From dbf51af7d1565c62902eef22a7aa6f6eb552432b Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Wed, 26 Aug 2020 18:41:32 -0400 Subject: [PATCH 001/182] Fixes segfault due to uninitialized pointers --- src/KSPACE/pair_buck_coul_long.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/KSPACE/pair_buck_coul_long.cpp b/src/KSPACE/pair_buck_coul_long.cpp index a46424baf7..a63047ea9f 100644 --- a/src/KSPACE/pair_buck_coul_long.cpp +++ b/src/KSPACE/pair_buck_coul_long.cpp @@ -43,7 +43,17 @@ PairBuckCoulLong::PairBuckCoulLong(LAMMPS *lmp) : Pair(lmp) { ewaldflag = pppmflag = 1; writedata = 1; - ftable = NULL; + ftable = nullptr; + cut_lj = nullptr; + cut_ljsq = nullptr; + a = nullptr; + rho = nullptr; + c = nullptr; + rhoinv = nullptr; + buck1 = nullptr; + buck2 = nullptr; + offset = nullptr; + cut_respa = nullptr; } /* ---------------------------------------------------------------------- */ From f8f2a94f601e985e987aea6b299506e4908a3ac9 Mon Sep 17 00:00:00 2001 From: Kateryna Goloviznina Date: Thu, 17 Sep 2020 15:14:27 +0200 Subject: [PATCH 002/182] coul/tt pair style added to USER-DRUDE --- src/USER-DRUDE/pair_coul_tt.cpp | 446 ++++++++++++++++++++++++++++++++ src/USER-DRUDE/pair_coul_tt.h | 76 ++++++ 2 files changed, 522 insertions(+) create mode 100644 src/USER-DRUDE/pair_coul_tt.cpp create mode 100644 src/USER-DRUDE/pair_coul_tt.h diff --git a/src/USER-DRUDE/pair_coul_tt.cpp b/src/USER-DRUDE/pair_coul_tt.cpp new file mode 100644 index 0000000000..261e3cb930 --- /dev/null +++ b/src/USER-DRUDE/pair_coul_tt.cpp @@ -0,0 +1,446 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "pair_coul_tt.h" + +#include +#include +#include "atom.h" +#include "comm.h" +#include "force.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "memory.h" +#include "error.h" + +#include "fix.h" +#include "fix_drude.h" +#include "domain.h" +#include "modify.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +PairCoulTT::PairCoulTT(LAMMPS *lmp) : Pair(lmp) { + fix_drude = nullptr; +} + +/* ---------------------------------------------------------------------- */ + +PairCoulTT::~PairCoulTT() +{ + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + memory->destroy(b); + memory->destroy(c); + memory->destroy(ntt); + memory->destroy(cut); + memory->destroy(scale); + } +} + +/* ---------------------------------------------------------------------- */ + +void PairCoulTT::compute(int eflag, int vflag) +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double qi,qj,xtmp,ytmp,ztmp,delx,dely,delz,ecoul,fpair; + double r,rsq,r2inv,rinv,factor_coul; + int *ilist,*jlist,*numneigh,**firstneigh; + double factor_f,factor_e; + int di,dj; + double dcoul; + double beta, gamma, betaprime, gammaprime, gammatmp; + + ecoul = 0.0; + ev_init(eflag,vflag); + + 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; + int newton_pair = force->newton_pair; + double qqrd2e = force->qqrd2e; + int *drudetype = fix_drude->drudetype; + tagint *drudeid = fix_drude->drudeid; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + + qi = 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_coul = special_coul[sbmask(j)]; + j &= NEIGHMASK; + + if (drudetype[type[i]] == drudetype[type[j]] && drudetype[type[j]] != CORE_TYPE) + continue; + + qj = q[j]; + + if (drudetype[type[i]] == CORE_TYPE) { + di = domain->closest_image(i, atom->map(drudeid[i])); + if (di == j) + continue; + switch (drudetype[type[j]]) { + case DRUDE_TYPE: + qi = q[i]+q[di]; + break; + case NOPOL_TYPE: + qi = -q[di]; + break; + } + } + + if (drudetype[type[j]] == CORE_TYPE) { + dj = domain->closest_image(j, atom->map(drudeid[j])); + if (dj == i) + continue; + switch (drudetype[type[i]]) { + case DRUDE_TYPE: + qj = q[j]+q[dj]; + break; + case NOPOL_TYPE: + qj = -q[dj]; + break; + } + } + + 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; + rinv = sqrt(r2inv); + + r = sqrt(rsq); + beta = c[itype][jtype] * exp(-b[itype][jtype] * r); + betaprime = -b[itype][jtype] * beta; + gamma = 1.0 + b[itype][jtype] * r; + gammaprime = b[itype][jtype]; + gammatmp = 1.0; + for (int k = 2; k <= ntt[itype][jtype]; k++) { + gammatmp *= b[itype][jtype] * r / k; + gamma += gammatmp * b[itype][jtype] * r; + gammaprime += gammatmp * b[itype][jtype] * k; + } + + if (drudetype[type[i]] == CORE_TYPE && drudetype[type[j]] == CORE_TYPE) + dcoul = qqrd2e * ( -(q[i]+q[di])*q[dj] - q[di]*(q[j]+q[dj]) ) * scale[itype][jtype] * rinv; + else + dcoul = qqrd2e * qi * qj *scale[itype][jtype] * rinv; + + factor_f = (-beta*gamma + r*betaprime*gamma + r*beta*gammaprime)*factor_coul; + if(eflag) factor_e = - beta*gamma*factor_coul; + fpair = factor_f * dcoul * r2inv; + + 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 (eflag) + ecoul = factor_e * dcoul; + + if (evflag) ev_tally(i,j,nlocal,newton_pair, + 0.0,ecoul,fpair,delx,dely,delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairCoulTT::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,n+1,n+1,"pair:cut"); + memory->create(scale,n+1,n+1,"pair:scale"); + memory->create(b, n + 1, n + 1, "pair:b"); + memory->create(c, n + 1, n + 1, "pair:c"); + memory->create(ntt, n + 1, n + 1, "pair:ntt"); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairCoulTT::settings(int narg, char **arg) +{ + if (narg != 2) error->all(FLERR, "Illegal pair_style command"); + + n_global = utils::inumeric(FLERR,arg[0],false,lmp); + cut_global = utils::numeric(FLERR,arg[1],false,lmp); + + // 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]) { + ntt[i][j] = n_global; + cut[i][j] = cut_global; + } + } +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairCoulTT::coeff(int narg, char **arg) +{ + if (narg < 3 || narg > 5) + error->all(FLERR,"Incorrect args for pair coefficients"); + if (!allocated) allocate(); + + int ilo,ihi,jlo,jhi; + + utils::bounds(FLERR,arg[0],1,atom->ntypes,ilo,ihi,error); + utils::bounds(FLERR,arg[1],1,atom->ntypes,jlo,jhi,error); + + double b_one = utils::numeric(FLERR,arg[2],false,lmp); + double c_one = utils::numeric(FLERR,arg[3],false,lmp); + int n_one = n_global; + double cut_one = cut_global; + if (narg >= 5) n_one = utils::inumeric(FLERR,arg[4],false,lmp); + if (narg == 6) cut_one = utils::numeric(FLERR,arg[5],false,lmp); + + if (n_one > n_global) + error->all(FLERR, "Incorrect coefficients for pair style coul/tt: n should not be larger than global setting"); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + b[i][j] = b_one; + c[i][j] = c_one; + ntt[i][j] = n_one; + cut[i][j] = cut_one; + scale[i][j] = 1.0; + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); +} + + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairCoulTT::init_style() +{ + if (!atom->q_flag) + error->all(FLERR,"Pair style coul/tt requires atom attribute q"); + int ifix; + for (ifix = 0; ifix < modify->nfix; ifix++) + if (strcmp(modify->fix[ifix]->style,"drude") == 0) break; + if (ifix == modify->nfix) error->all(FLERR, "Pair coul/tt requires fix drude"); + fix_drude = (FixDrude *) modify->fix[ifix]; + + neighbor->request(this,instance_me); +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairCoulTT::init_one(int i, int j) +{ + if (setflag[i][j] == 0) + cut[i][j] = mix_distance(cut[i][i], cut[j][j]); + + b[j][i] = b[i][j]; + c[j][i] = c[i][j]; + ntt[j][i] = ntt[i][j]; + scale[j][i] = scale[i][j]; + + return cut[i][j]; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairCoulTT::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(&b[i][j], sizeof(double), 1, fp); + fwrite(&c[i][j], sizeof(double), 1, fp); + fwrite(&ntt[i][j], sizeof(int), 1, fp); + fwrite(&cut[i][j],sizeof(double),1,fp); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairCoulTT::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) utils::sfread(FLERR,&setflag[i][j],sizeof(int),1,fp,nullptr,error); + MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + if (setflag[i][j]) { + if (me == 0) { + utils::sfread(FLERR,&b[i][j],sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&c[i][j],sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&ntt[i][j],sizeof(int),1,fp,nullptr,error); + utils::sfread(FLERR,&cut[i][j],sizeof(double),1,fp,nullptr,error); + } + MPI_Bcast(&b[i][j], 1, MPI_DOUBLE,0,world); + MPI_Bcast(&c[i][j], 1, MPI_DOUBLE,0,world); + MPI_Bcast(&ntt[i][j], 1, MPI_INT,0,world); + MPI_Bcast(&cut[i][j],1, MPI_DOUBLE,0,world); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairCoulTT::write_restart_settings(FILE *fp) +{ + fwrite(&n_global, sizeof(int), 1, fp); + fwrite(&cut_global,sizeof(double),1,fp); + fwrite(&offset_flag,sizeof(int),1,fp); + fwrite(&mix_flag,sizeof(int),1,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairCoulTT::read_restart_settings(FILE *fp) +{ + if (comm->me == 0) { + utils::sfread(FLERR,&n_global,sizeof(int),1,fp,nullptr,error); + utils::sfread(FLERR,&cut_global,sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&offset_flag,sizeof(int),1,fp,nullptr,error); + utils::sfread(FLERR,&mix_flag,sizeof(int),1,fp,nullptr,error); + } + MPI_Bcast(&n_global, 1, MPI_INT, 0, world); + MPI_Bcast(&cut_global,1,MPI_DOUBLE,0,world); + MPI_Bcast(&offset_flag,1,MPI_INT,0,world); + MPI_Bcast(&mix_flag,1,MPI_INT,0,world); +} + +/* ---------------------------------------------------------------------- */ + +double PairCoulTT::single(int i, int j, int itype, int jtype, + double rsq, double factor_coul, double /*factor_lj*/, + double &fforce) +{ + double r2inv,rinv,r,phicoul; + double qi,qj,factor_f,factor_e,dcoul; + double beta, betaprime, gamma, gammaprime, gammatmp; + + // single() is used in Pair::write_file where there is no information about topology + // it corresponds to pair_write command in input file + // charges qi and qj are defined by the user (or 1.0 by defaut) + + qi = atom->q[i]; + qj = atom->q[j]; + + r2inv = 1.0/rsq; + fforce = phicoul = 0.0; + if (rsq < cutsq[itype][jtype]) { + rinv = sqrt(r2inv); + r = sqrt(rsq); + beta = c[itype][jtype] * exp(-b[itype][jtype] * r); + betaprime = -b[itype][jtype] * beta; + gamma = 1 + b[itype][jtype] * r; + gammaprime = b[itype][jtype]; + gammatmp = 1; + for (int k = 2; k <= ntt[itype][jtype]; k++) { + gammatmp *= b[itype][jtype] * r / k; + gamma += gammatmp * b[itype][jtype] * r; + gammaprime += gammatmp * b[itype][jtype] * k; + } + dcoul = force->qqrd2e * qi * qj * scale[itype][jtype] * rinv; + factor_f = (-beta*gamma+r*betaprime*gamma+r*beta*gammaprime)*factor_coul; + fforce = factor_f * dcoul * r2inv; + factor_e = - beta*gamma*factor_coul; + phicoul = factor_e * dcoul; + } + + return phicoul; +} + +/* ---------------------------------------------------------------------- */ + +void *PairCoulTT::extract(const char *str, int &dim) +{ + dim = 2; + if (strcmp(str,"scale") == 0) return (void *) scale; + if (strcmp(str,"b") == 0) return (void *) b; + if (strcmp(str,"c") == 0) return (void *) c; + if (strcmp(str,"ntt") == 0) return (void *) ntt; + return nullptr; +} diff --git a/src/USER-DRUDE/pair_coul_tt.h b/src/USER-DRUDE/pair_coul_tt.h new file mode 100644 index 0000000000..c275b6e54b --- /dev/null +++ b/src/USER-DRUDE/pair_coul_tt.h @@ -0,0 +1,76 @@ +/* -*- 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(coul/tt,PairCoulTT) + +#else + +#ifndef LMP_PAIR_COULTT_H +#define LMP_PAIR_COULTT_H + +#include "pair.h" +#include + +namespace LAMMPS_NS { + +class PairCoulTT: public Pair { + public: + PairCoulTT(class LAMMPS *); + virtual ~PairCoulTT(); + virtual void compute(int, int); + virtual void settings(int, char **); + void coeff(int, char **); + void init_style(); + 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 *); + virtual double single(int, int, int, int, double, double, double, double &); + void *extract(const char *, int &); + + protected: + int n_global; + double cut_global; + double **cut,**scale; + double **b,**c; + int **ntt; + class FixDrude * fix_drude; + + 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 thole requires atom attribute q + +The atom style defined does not have these attributes. + +*/ From 2206de7c68a39adc01690480f23adec44b27a523 Mon Sep 17 00:00:00 2001 From: Kateryna Goloviznina Date: Mon, 21 Sep 2020 16:14:33 +0200 Subject: [PATCH 003/182] Examples added, bug fixed --- doc/src/pair_coul_tt.rst | 132 + doc/utils/sphinx-config/false_positives.txt | 6 + examples/USER/drude/README | 3 + .../USER/drude/ethylene_glycol/data.eg.lmp | 11259 ++++++++++++++++ examples/USER/drude/ethylene_glycol/in.eg.lmp | 81 + .../ethylene_glycol/log.21Sep20.eg.lammps | 422 + src/USER-DRUDE/README | 2 + src/USER-DRUDE/pair_coul_tt.cpp | 2 +- 8 files changed, 11906 insertions(+), 1 deletion(-) create mode 100644 doc/src/pair_coul_tt.rst create mode 100644 examples/USER/drude/ethylene_glycol/data.eg.lmp create mode 100644 examples/USER/drude/ethylene_glycol/in.eg.lmp create mode 100644 examples/USER/drude/ethylene_glycol/log.21Sep20.eg.lammps diff --git a/doc/src/pair_coul_tt.rst b/doc/src/pair_coul_tt.rst new file mode 100644 index 0000000000..47375d99a4 --- /dev/null +++ b/doc/src/pair_coul_tt.rst @@ -0,0 +1,132 @@ +.. index:: pair_style coul/tt + +pair_style coul/tt command +========================== + +Syntax +"""""" + +.. code-block:: LAMMPS + + pair_style style args + +* style = *coul/tt* +* args = list of arguments for a particular style + +.. parsed-literal:: + + *coul/tt* args = n cutoff + n = degree of polynomial + cutoff = global cutoff (distance units) + +Examples +"""""""" + +.. code-block:: LAMMPS + + pair_style hybrid/overlay ... coul/tt 4 12.0 + pair_coeff 1 2 coul/tt 4.5 1.0 + pair_coeff 1 2 coul/tt 4.0 1.0 4 12.0 + pair_coeff 1 3* coul/tt 4.5 1.0 4 + + +Description +""""""""""" + +The *coul/tt* pair styles are meant to be used with force fields that +include explicit polarization through Drude dipoles. + +The *coul/tt* pair style should be used as a sub-style within in the +:doc:`pair_style hybrid/overlay ` command, in conjunction with a +main pair style including Coulomb interactions and *thole* pair style, +or with *lj/cut/thole/long* pair style that is equivalent to the combination +of two preceding. + +The *coul/tt* pair styles compute the charge-dipole Coulomb interaction damped +at short distances by a function + +.. math:: + + TT_{ij}(r) = 1 - c_{ij} \cdot e^{-b_{ij} r} \sum_{k=0}^n \frac{(b_{ij} r)^k}{k!} + +This function results from an adaptation to Coulomb interaction :ref:`(Salanne) +` the damping function originally proposed +by :ref:`(Tang Toennies) ` for van der Waals interactions. + +The polynomial takes the degree of 4 for damping Coulomb interaction. +The parameters :math:`b_{ij}` and :math:`c_{ij}` could be determined from +first-principle calculations for small, mainly mono-atomic, ions :ref:`(Salanne) +` or chosen as empirical for large molecules. + +The damping function is typically applied to the interactions between a Drude +charge (:math:`q_{D,i}` on a Drude particle or :math:`-q_{D,i}` on the respective +Drude core particle bonded to a Drude particle) and a charge of a non-polarizable +atom, :math:`q_{j}`. The Tang-Toennies function could be used to damp electrostatic +interaction between two Drude cores acting on the partial charge of the one core +:math:`q_{i}-q_{D,i}` and a Drude charge of the another one :math:`-q_{D,j}`, and +the opposite case, respectively. The :math:`b_{ij}` and :math:`c_{ij}` are equal +to :math:`b_{ji}` and :math:`c_{ji}` in case of core - core interaction. +Therefore, the screening is not applied to the full charge of the Drude core +:math:`q_i`, but only to the :math:`-q_{D,i}` part of it when it acts as a +dipole or :math:`q_{i}-q_{D,i}` when it acts as a charge. + +For pair_style *coul/tt*\ , the following coefficients must be defined for +each pair of atoms types via the :doc:`pair_coeff ` command +as in the example above. + +* :math:`b_{ij}` +* :math:`c_{ij}` +* degree of polynomial (positive integer) +* cutoff (distance units) + +The last two coefficients are optional. If not specified the global +degree of polynomial or global cutoff specified in the pair_style +command are used. In order to specify a cutoff (forth argument) a damp +parameter (third argument) must also be specified. + +---------- + +Mixing, shift, table, tail correction, restart, rRESPA info +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +The *coul/tt* pair style does not support mixing. Thus, coefficients +for all I,J pairs must be specified explicitly. + +Restrictions +"""""""""""" + +These pair styles are part of the USER-DRUDE package. They are only +enabled if LAMMPS was built with that package. See the :doc:`Build package +` doc page for more info. + +This pair_style should currently not be used with the :doc:`charmm dihedral +style ` if the latter has non-zero 1-4 weighting +factors. This is because the *coul/tt* pair style does not know which +pairs are 1-4 partners of which dihedrals. + +Related commands +"""""""""""""""" + +:doc:`fix drude `, :doc:`fix langevin/drude `, +:doc:`fix drude/transform `, +:doc:`compute temp/drude `, +:doc:`pair_style thole ` + +Default +""""""" + +none + +---------- + +.. _Thole1: + +**(Thole)** Chem Phys, 59, 341 (1981). + +.. _Salanne1: + +**(Salanne)** Salanne, Rotenberg, Jahn, Vuilleumier, Simon, Christian and Madden, Theor Chem Acc, 131, 1143 (2012). + +.. _TangToennies1: + +**(Tang and Toennies)** J Chem Phys, 80, 3726 (1984). diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 5046316ec8..265b158484 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1099,6 +1099,7 @@ Gmask gneb GNEB Goldfarb +Gomes Gonzalez-Melchor googlemail Gordan @@ -1382,6 +1383,7 @@ Izz Jacobsen Jadhav jagreat +Jahn Jalalvand james Janssen @@ -2677,6 +2679,7 @@ Rosenberger Rossky rosybrown rotationally +Rotenberg Rovigatti royalblue rozero @@ -2711,6 +2714,7 @@ safezone Safran Sagui Saidi +Salanne Salles sandia Sandia @@ -3072,6 +3076,7 @@ Tobias tokenizer tokyo tol +Toennies toolchain topologies Toporov @@ -3296,6 +3301,7 @@ vtp vtr vtu Vu +Vuilleumier vv vx Vx diff --git a/examples/USER/drude/README b/examples/USER/drude/README index fb58fae83f..a305999e89 100644 --- a/examples/USER/drude/README +++ b/examples/USER/drude/README @@ -14,3 +14,6 @@ use of the `extra/special/per/atom` keyword * `swm4-ndp` -- 4-site rigid water model in NpT ensemble (no Thole damping) +* `ethylene_glycol` -- simulation in NpT ensemble with Thole +and Tang-Toennies damping and with Nosé-Hoover thermostat + diff --git a/examples/USER/drude/ethylene_glycol/data.eg.lmp b/examples/USER/drude/ethylene_glycol/data.eg.lmp new file mode 100644 index 0000000000..3c8e4af1e0 --- /dev/null +++ b/examples/USER/drude/ethylene_glycol/data.eg.lmp @@ -0,0 +1,11259 @@ +created by fftool + +2800 atoms +2600 bonds +2800 angles +3000 dihedrals +6 atom types +6 bond types +5 angle types +5 dihedral types +0.000000 35.000000 xlo xhi +0.000000 35.000000 ylo yhi +0.000000 35.000000 zlo zhi + +Masses + + 1 11.611 # CTO DC + 2 15.599 # OHG DC + 3 1.008 # H1O + 4 1.008 # HOG + 5 0.400 # CTO DP + 6 0.400 # OHG DP + +Bond Coeffs + + 1 267.925430 1.529000 # CT-CT + 2 320.004780 1.410000 # CT-OH + 3 339.985660 1.090000 # HC-CT + 4 552.999522 0.945000 # HO-OH + 5 500.000000 0.000000 # CTO DC-DP + 6 500.000000 0.000000 # OHG DC-DP + +Angle Coeffs + + 1 50.000000 109.500000 # CT-CT-OH + 2 37.500000 110.700000 # CT-CT-HC + 3 35.002390 109.500000 # HC-CT-OH + 4 32.994742 107.800000 # HC-CT-HC + 5 54.995220 108.500000 # CT-OH-HO + +Dihedral Coeffs + + 1 0.000000 0.000000 0.467997 0.000000 # HC-CT-CT-OH + 2 0.000000 0.000000 0.300000 0.000000 # HC-CT-CT-HC + 3 0.000000 -2.350000 0.288002 0.000000 # OH-CT-CT-OH + 4 -0.355999 -0.173996 0.491993 0.000000 # CT-CT-OH-HO + 5 0.000000 0.000000 0.450000 0.000000 # HC-CT-OH-HO + +Atoms + + 1 1 1 2.3822 2.755526e+01 2.277846e+01 2.645136e+01 # CTO EG DC + 2 1 1 2.3822 2.795486e+01 2.321761e+01 2.785060e+01 # CTO EG DC + 3 1 2 1.5019 2.876293e+01 2.250107e+01 2.566048e+01 # OHG EG DC + 4 1 3 0.0400 2.698128e+01 2.357103e+01 2.597128e+01 # H1O EG + 5 1 3 0.0400 2.694679e+01 2.187621e+01 2.651305e+01 # H1O EG + 6 1 3 0.0400 2.852884e+01 2.242504e+01 2.833068e+01 # H1O EG + 7 1 2 1.5019 2.674719e+01 2.349500e+01 2.864148e+01 # OHG EG DC + 8 1 3 0.0400 2.856333e+01 2.411986e+01 2.778891e+01 # H1O EG + 9 1 4 0.3750 2.850004e+01 2.221216e+01 2.473993e+01 # HOG EG + 10 1 4 0.3750 2.701008e+01 2.378391e+01 2.956203e+01 # HOG EG + 11 2 1 2.3822 6.623753e+00 2.915658e+01 3.087794e+01 # CTO EG DC + 12 2 1 2.3822 5.112785e+00 2.899133e+01 3.088630e+01 # CTO EG DC + 13 2 2 1.5019 7.262347e+00 2.783322e+01 3.092038e+01 # OHG EG DC + 14 2 3 0.0400 6.931235e+00 2.973590e+01 3.174855e+01 # H1O EG + 15 2 3 0.0400 6.927818e+00 2.967721e+01 2.996987e+01 # H1O EG + 16 2 3 0.0400 4.805304e+00 2.841202e+01 3.001570e+01 # H1O EG + 17 2 2 1.5019 4.474192e+00 3.031470e+01 3.084386e+01 # OHG EG DC + 18 2 3 0.0400 4.808721e+00 2.847071e+01 3.179437e+01 # H1O EG + 19 2 4 0.3750 8.256404e+00 2.794193e+01 3.091489e+01 # HOG EG + 20 2 4 0.3750 3.480134e+00 3.020599e+01 3.084936e+01 # HOG EG + 21 3 1 2.3822 2.205305e+01 1.038274e+01 1.043135e+01 # CTO EG DC + 22 3 1 2.3822 2.065524e+01 1.092101e+01 1.017293e+01 # CTO EG DC + 23 3 2 1.5019 2.293672e+01 1.148582e+01 1.083538e+01 # OHG EG DC + 24 3 3 0.0400 2.243964e+01 9.922620e+00 9.521990e+00 # H1O EG + 25 3 3 0.0400 2.201502e+01 9.638383e+00 1.122670e+01 # H1O EG + 26 3 3 0.0400 2.026864e+01 1.138113e+01 1.108229e+01 # H1O EG + 27 3 2 1.5019 1.977157e+01 9.817930e+00 9.768896e+00 # OHG EG DC + 28 3 3 0.0400 2.069326e+01 1.166537e+01 9.377574e+00 # H1O EG + 29 3 4 0.3750 2.385633e+01 1.113170e+01 1.100540e+01 # HOG EG + 30 3 4 0.3750 1.885195e+01 1.017206e+01 9.598880e+00 # HOG EG + 31 4 1 2.3822 1.918036e+01 9.082474e+00 3.855158e+00 # CTO EG DC + 32 4 1 2.3822 1.927472e+01 7.590587e+00 3.579892e+00 # CTO EG DC + 33 4 2 1.5019 2.048814e+01 9.582497e+00 4.303036e+00 # OHG EG DC + 34 4 3 0.0400 1.843748e+01 9.262831e+00 4.632142e+00 # H1O EG + 35 4 3 0.0400 1.888576e+01 9.602708e+00 2.943749e+00 # H1O EG + 36 4 3 0.0400 2.001760e+01 7.410230e+00 2.802908e+00 # H1O EG + 37 4 2 1.5019 1.796694e+01 7.090564e+00 3.132015e+00 # OHG EG DC + 38 4 3 0.0400 1.956932e+01 7.070353e+00 4.491301e+00 # H1O EG + 39 4 4 0.3750 2.042606e+01 1.056400e+01 4.484132e+00 # HOG EG + 40 4 4 0.3750 1.802902e+01 6.109060e+00 2.950918e+00 # HOG EG + 41 5 1 2.3822 2.083934e+01 7.627096e+00 3.259022e+01 # CTO EG DC + 42 5 1 2.3822 2.124856e+01 7.065877e+00 3.123820e+01 # CTO EG DC + 43 5 2 1.5019 2.107377e+01 9.078142e+00 3.261051e+01 # OHG EG DC + 44 5 3 0.0400 2.142950e+01 7.153225e+00 3.337460e+01 # H1O EG + 45 5 3 0.0400 1.978148e+01 7.428046e+00 3.276171e+01 # H1O EG + 46 5 3 0.0400 2.065840e+01 7.539748e+00 3.045381e+01 # H1O EG + 47 5 2 1.5019 2.101414e+01 5.614831e+00 3.121790e+01 # OHG EG DC + 48 5 3 0.0400 2.230642e+01 7.264927e+00 3.106670e+01 # H1O EG + 49 5 4 0.3750 2.080454e+01 9.447365e+00 3.350000e+01 # HOG EG + 50 5 4 0.3750 2.128336e+01 5.245608e+00 3.032841e+01 # HOG EG + 51 6 1 2.3822 1.337551e+01 6.713673e+00 1.425211e+01 # CTO EG DC + 52 6 1 2.3822 1.208970e+01 7.364244e+00 1.376852e+01 # CTO EG DC + 53 6 2 1.5019 1.452243e+01 7.550031e+00 1.387006e+01 # OHG EG DC + 54 6 3 0.0400 1.347783e+01 5.728142e+00 1.379785e+01 # H1O EG + 55 6 3 0.0400 1.334610e+01 6.611858e+00 1.533695e+01 # H1O EG + 56 6 3 0.0400 1.198737e+01 8.349775e+00 1.422278e+01 # H1O EG + 57 6 2 1.5019 1.094277e+01 6.527886e+00 1.415057e+01 # OHG EG DC + 58 6 3 0.0400 1.211910e+01 7.466059e+00 1.268368e+01 # H1O EG + 59 6 4 0.3750 1.536836e+01 7.122025e+00 1.418822e+01 # HOG EG + 60 6 4 0.3750 1.009685e+01 6.955893e+00 1.383241e+01 # HOG EG + 61 7 1 2.3822 1.650745e+01 3.161997e+01 3.202825e+01 # CTO EG DC + 62 7 1 2.3822 1.767331e+01 3.225537e+01 3.276812e+01 # CTO EG DC + 63 7 2 1.5019 1.544743e+01 3.127520e+01 3.298659e+01 # OHG EG DC + 64 7 3 0.0400 1.684685e+01 3.071628e+01 3.152203e+01 # H1O EG + 65 7 3 0.0400 1.611681e+01 3.232299e+01 3.129255e+01 # H1O EG + 66 7 3 0.0400 1.733391e+01 3.315906e+01 3.327435e+01 # H1O EG + 67 7 2 1.5019 1.873333e+01 3.260014e+01 3.180979e+01 # OHG EG DC + 68 7 3 0.0400 1.806396e+01 3.155234e+01 3.350382e+01 # H1O EG + 69 7 4 0.3750 1.468041e+01 3.085717e+01 3.249983e+01 # HOG EG + 70 7 4 0.3750 1.950035e+01 3.301817e+01 3.229655e+01 # HOG EG + 71 8 1 2.3822 1.144186e+01 2.330670e+01 2.409933e+01 # CTO EG DC + 72 8 1 2.3822 1.098108e+01 2.208579e+01 2.331994e+01 # CTO EG DC + 73 8 2 1.5019 1.282636e+01 2.310669e+01 2.455107e+01 # OHG EG DC + 74 8 3 0.0400 1.079516e+01 2.345129e+01 2.496476e+01 # H1O EG + 75 8 3 0.0400 1.139288e+01 2.418716e+01 2.345865e+01 # H1O EG + 76 8 3 0.0400 1.162778e+01 2.194119e+01 2.245452e+01 # H1O EG + 77 8 2 1.5019 9.596579e+00 2.228579e+01 2.286820e+01 # OHG EG DC + 78 8 3 0.0400 1.103006e+01 2.120532e+01 2.396063e+01 # H1O EG + 79 8 4 0.3750 1.312951e+01 2.390992e+01 2.506383e+01 # HOG EG + 80 8 4 0.3750 9.293428e+00 2.148256e+01 2.235544e+01 # HOG EG + 81 9 1 2.3822 3.199513e+01 1.662062e+01 2.357706e+01 # CTO EG DC + 82 9 1 2.3822 3.089704e+01 1.566981e+01 2.312921e+01 # CTO EG DC + 83 9 2 1.5019 3.211244e+01 1.657968e+01 2.504180e+01 # OHG EG DC + 84 9 3 0.0400 3.174981e+01 1.763451e+01 2.326092e+01 # H1O EG + 85 9 3 0.0400 3.294204e+01 1.631988e+01 2.312870e+01 # H1O EG + 86 9 3 0.0400 3.114237e+01 1.465592e+01 2.344535e+01 # H1O EG + 87 9 2 1.5019 3.077974e+01 1.571075e+01 2.166447e+01 # OHG EG DC + 88 9 3 0.0400 2.995014e+01 1.597055e+01 2.357757e+01 # H1O EG + 89 9 4 0.3750 3.283487e+01 1.720521e+01 2.533643e+01 # HOG EG + 90 9 4 0.3750 3.005731e+01 1.508522e+01 2.136984e+01 # HOG EG + 91 10 1 2.3822 2.584353e+01 1.420728e+01 3.075051e+01 # CTO EG DC + 92 10 1 2.3822 2.670436e+01 1.296193e+01 3.088648e+01 # CTO EG DC + 93 10 2 1.5019 2.659231e+01 1.537650e+01 3.123335e+01 # OHG EG DC + 94 10 3 0.0400 2.493563e+01 1.408836e+01 3.134184e+01 # H1O EG + 95 10 3 0.0400 2.557803e+01 1.435353e+01 2.970350e+01 # H1O EG + 96 10 3 0.0400 2.761226e+01 1.308085e+01 3.029515e+01 # H1O EG + 97 10 2 1.5019 2.595558e+01 1.179271e+01 3.040364e+01 # OHG EG DC + 98 10 3 0.0400 2.696986e+01 1.281568e+01 3.193349e+01 # H1O EG + 99 10 4 0.3750 2.602597e+01 1.619581e+01 3.114390e+01 # HOG EG + 100 10 4 0.3750 2.652191e+01 1.097340e+01 3.049309e+01 # HOG EG + 101 11 1 2.3822 1.111937e+01 3.137797e+01 1.878528e+01 # CTO EG DC + 102 11 1 2.3822 9.960582e+00 3.050260e+01 1.923399e+01 # CTO EG DC + 103 11 2 1.5019 1.072292e+01 3.214500e+01 1.759557e+01 # OHG EG DC + 104 11 3 0.0400 1.197700e+01 3.075033e+01 1.854313e+01 # H1O EG + 105 11 3 0.0400 1.138786e+01 3.206549e+01 1.958736e+01 # H1O EG + 106 11 3 0.0400 9.102950e+00 3.113024e+01 1.947613e+01 # H1O EG + 107 11 2 1.5019 1.035704e+01 2.973558e+01 2.042369e+01 # OHG EG DC + 108 11 3 0.0400 9.692093e+00 2.981509e+01 1.843191e+01 # H1O EG + 109 11 4 0.3750 1.148527e+01 3.272090e+01 1.730036e+01 # HOG EG + 110 11 4 0.3750 9.594676e+00 2.915968e+01 2.071890e+01 # HOG EG + 111 12 1 2.3822 2.306035e+01 8.786678e+00 1.512727e+01 # CTO EG DC + 112 12 1 2.3822 2.357304e+01 1.013690e+01 1.465351e+01 # CTO EG DC + 113 12 2 1.5019 2.392524e+01 7.721087e+00 1.460060e+01 # OHG EG DC + 114 12 3 0.0400 2.204190e+01 8.637897e+00 1.476848e+01 # H1O EG + 115 12 3 0.0400 2.306931e+01 8.755965e+00 1.621680e+01 # H1O EG + 116 12 3 0.0400 2.459148e+01 1.028569e+01 1.501230e+01 # H1O EG + 117 12 2 1.5019 2.270814e+01 1.120250e+01 1.518018e+01 # OHG EG DC + 118 12 3 0.0400 2.356407e+01 1.016762e+01 1.356398e+01 # H1O EG + 119 12 4 0.3750 2.358795e+01 6.832781e+00 1.491229e+01 # HOG EG + 120 12 4 0.3750 2.304544e+01 1.209080e+01 1.486850e+01 # HOG EG + 121 13 1 2.3822 1.038424e+01 3.015371e+01 2.418088e+01 # CTO EG DC + 122 13 1 2.3822 1.043537e+01 3.157030e+01 2.363220e+01 # CTO EG DC + 123 13 2 1.5019 1.086353e+01 2.921353e+01 2.315754e+01 # OHG EG DC + 124 13 3 0.0400 9.357803e+00 2.990464e+01 2.445015e+01 # H1O EG + 125 13 3 0.0400 1.101855e+01 3.008264e+01 2.506445e+01 # H1O EG + 126 13 3 0.0400 1.146180e+01 3.181937e+01 2.336294e+01 # H1O EG + 127 13 2 1.5019 9.956069e+00 3.251049e+01 2.465554e+01 # OHG EG DC + 128 13 3 0.0400 9.801050e+00 3.164137e+01 2.274863e+01 # H1O EG + 129 13 4 0.3750 1.082989e+01 2.828156e+01 2.351852e+01 # HOG EG + 130 13 4 0.3750 9.989708e+00 3.344245e+01 2.429456e+01 # HOG EG + 131 14 1 2.3822 1.931196e+01 2.952224e+01 2.110962e+01 # CTO EG DC + 132 14 1 2.3822 1.869344e+01 2.846107e+01 2.200502e+01 # CTO EG DC + 133 14 2 1.5019 2.027581e+01 3.031702e+01 2.188435e+01 # OHG EG DC + 134 14 3 0.0400 1.852873e+01 3.017565e+01 2.072530e+01 # H1O EG + 135 14 3 0.0400 1.982468e+01 2.904155e+01 2.027646e+01 # H1O EG + 136 14 3 0.0400 1.947667e+01 2.780766e+01 2.238934e+01 # H1O EG + 137 14 2 1.5019 1.772958e+01 2.766629e+01 2.123029e+01 # OHG EG DC + 138 14 3 0.0400 1.818072e+01 2.894177e+01 2.283818e+01 # H1O EG + 139 14 4 0.3750 2.068273e+01 3.101516e+01 2.129527e+01 # HOG EG + 140 14 4 0.3750 1.732266e+01 2.696816e+01 2.181937e+01 # HOG EG + 141 15 1 2.3822 3.432130e+00 1.094185e+01 2.270207e+01 # CTO EG DC + 142 15 1 2.3822 4.276053e+00 1.110272e+01 2.395599e+01 # CTO EG DC + 143 15 2 1.5019 2.850024e+00 9.592349e+00 2.267216e+01 # OHG EG DC + 144 15 3 0.0400 4.057782e+00 1.108671e+01 2.182135e+01 # H1O EG + 145 15 3 0.0400 2.632066e+00 1.168212e+01 2.270451e+01 # H1O EG + 146 15 3 0.0400 3.650402e+00 1.095786e+01 2.483672e+01 # H1O EG + 147 15 2 1.5019 4.858159e+00 1.245223e+01 2.398591e+01 # OHG EG DC + 148 15 3 0.0400 5.076117e+00 1.036246e+01 2.395356e+01 # H1O EG + 149 15 4 0.3750 2.294812e+00 9.486513e+00 2.184721e+01 # HOG EG + 150 15 4 0.3750 5.413372e+00 1.255806e+01 2.481086e+01 # HOG EG + 151 16 1 2.3822 2.749702e+01 2.680701e+01 2.577254e+01 # CTO EG DC + 152 16 1 2.3822 2.805401e+01 2.815050e+01 2.533073e+01 # CTO EG DC + 153 16 2 1.5019 2.602812e+01 2.686340e+01 2.578034e+01 # OHG EG DC + 154 16 3 0.0400 2.785657e+01 2.657604e+01 2.677527e+01 # H1O EG + 155 16 3 0.0400 2.782666e+01 2.603138e+01 2.508128e+01 # H1O EG + 156 16 3 0.0400 2.769445e+01 2.838148e+01 2.432800e+01 # H1O EG + 157 16 2 1.5019 2.952290e+01 2.809412e+01 2.532293e+01 # OHG EG DC + 158 16 3 0.0400 2.772437e+01 2.892614e+01 2.602199e+01 # H1O EG + 159 16 4 0.3750 2.566167e+01 2.597953e+01 2.607100e+01 # HOG EG + 160 16 4 0.3750 2.988935e+01 2.897799e+01 2.503227e+01 # HOG EG + 161 17 1 2.3822 2.279078e+00 1.895985e+01 9.516196e+00 # CTO EG DC + 162 17 1 2.3822 2.672321e+00 1.821263e+01 1.078009e+01 # CTO EG DC + 163 17 2 1.5019 3.452654e+00 1.909620e+01 8.641536e+00 # OHG EG DC + 164 17 3 0.0400 1.906084e+00 1.994955e+01 9.779782e+00 # H1O EG + 165 17 3 0.0400 1.499472e+00 1.840565e+01 8.993536e+00 # H1O EG + 166 17 3 0.0400 3.045315e+00 1.722294e+01 1.051650e+01 # H1O EG + 167 17 2 1.5019 1.498745e+00 1.807628e+01 1.165475e+01 # OHG EG DC + 168 17 3 0.0400 3.451926e+00 1.876684e+01 1.130275e+01 # H1O EG + 169 17 4 0.3750 3.193942e+00 1.958779e+01 7.810028e+00 # HOG EG + 170 17 4 0.3750 1.757457e+00 1.758469e+01 1.248626e+01 # HOG EG + 171 18 1 2.3822 2.792391e+01 1.384065e+01 5.804135e+00 # CTO EG DC + 172 18 1 2.3822 2.915509e+01 1.324832e+01 6.470271e+00 # CTO EG DC + 173 18 2 1.5019 2.782224e+01 1.526782e+01 6.141421e+00 # OHG EG DC + 174 18 3 0.0400 2.703349e+01 1.332017e+01 6.156781e+00 # H1O EG + 175 18 3 0.0400 2.800557e+01 1.372827e+01 4.723025e+00 # H1O EG + 176 18 3 0.0400 3.004550e+01 1.376880e+01 6.117625e+00 # H1O EG + 177 18 2 1.5019 2.925676e+01 1.182115e+01 6.132985e+00 # OHG EG DC + 178 18 3 0.0400 2.907342e+01 1.336070e+01 7.551381e+00 # H1O EG + 179 18 4 0.3750 2.701225e+01 1.565751e+01 5.703173e+00 # HOG EG + 180 18 4 0.3750 3.006674e+01 1.143146e+01 6.571233e+00 # HOG EG + 181 19 1 2.3822 1.056797e+01 8.155405e+00 7.636122e+00 # CTO EG DC + 182 19 1 2.3822 9.367107e+00 7.925278e+00 6.733149e+00 # CTO EG DC + 183 19 2 1.5019 1.118750e+01 9.447687e+00 7.308868e+00 # OHG EG DC + 184 19 3 0.0400 1.129427e+01 7.356562e+00 7.486291e+00 # H1O EG + 185 19 3 0.0400 1.024468e+01 8.161286e+00 8.677056e+00 # H1O EG + 186 19 3 0.0400 8.640816e+00 8.724122e+00 6.882980e+00 # H1O EG + 187 19 2 1.5019 8.747580e+00 6.632996e+00 7.060403e+00 # OHG EG DC + 188 19 3 0.0400 9.690404e+00 7.919397e+00 5.692215e+00 # H1O EG + 189 19 4 0.3750 1.197754e+01 9.599087e+00 7.902928e+00 # HOG EG + 190 19 4 0.3750 7.957536e+00 6.481596e+00 6.466342e+00 # HOG EG + 191 20 1 2.3822 3.070338e+01 3.250889e+01 2.628077e+01 # CTO EG DC + 192 20 1 2.3822 3.199034e+01 3.219994e+01 2.553330e+01 # CTO EG DC + 193 20 2 1.5019 3.004001e+01 3.125190e+01 2.665600e+01 # OHG EG DC + 194 20 3 0.0400 3.004132e+01 3.309133e+01 2.564003e+01 # H1O EG + 195 20 3 0.0400 3.093315e+01 3.308038e+01 2.718005e+01 # H1O EG + 196 20 3 0.0400 3.265240e+01 3.161751e+01 2.617404e+01 # H1O EG + 197 20 2 1.5019 3.265371e+01 3.345694e+01 2.515807e+01 # OHG EG DC + 198 20 3 0.0400 3.176057e+01 3.162845e+01 2.463402e+01 # H1O EG + 199 20 4 0.3750 2.919333e+01 3.145516e+01 2.714775e+01 # HOG EG + 200 20 4 0.3750 3.350039e+01 3.325368e+01 2.466631e+01 # HOG EG + 201 21 1 2.3822 1.821218e+01 8.431290e+00 1.769906e+01 # CTO EG DC + 202 21 1 2.3822 1.964344e+01 8.814608e+00 1.803810e+01 # CTO EG DC + 203 21 2 1.5019 1.793688e+01 8.757604e+00 1.629242e+01 # OHG EG DC + 204 21 3 0.0400 1.752580e+01 8.983789e+00 1.834072e+01 # H1O EG + 205 21 3 0.0400 1.807486e+01 7.361562e+00 1.785693e+01 # H1O EG + 206 21 3 0.0400 2.032982e+01 8.262110e+00 1.739644e+01 # H1O EG + 207 21 2 1.5019 1.991874e+01 8.488295e+00 1.944474e+01 # OHG EG DC + 208 21 3 0.0400 1.978075e+01 9.884337e+00 1.788023e+01 # H1O EG + 209 21 4 0.3750 1.699526e+01 8.505421e+00 1.606936e+01 # HOG EG + 210 21 4 0.3750 2.086036e+01 8.740477e+00 1.966780e+01 # HOG EG + 211 22 1 2.3822 2.592587e+01 2.899439e+01 2.947605e+01 # CTO EG DC + 212 22 1 2.3822 2.505059e+01 2.781408e+01 2.986486e+01 # CTO EG DC + 213 22 2 1.5019 2.508662e+01 3.018634e+01 2.928684e+01 # OHG EG DC + 214 22 3 0.0400 2.644986e+01 2.876845e+01 2.854735e+01 # H1O EG + 215 22 3 0.0400 2.665274e+01 2.918409e+01 3.026584e+01 # H1O EG + 216 22 3 0.0400 2.452660e+01 2.804002e+01 3.079356e+01 # H1O EG + 217 22 2 1.5019 2.588984e+01 2.662213e+01 3.005408e+01 # OHG EG DC + 218 22 3 0.0400 2.432372e+01 2.762438e+01 2.907507e+01 # H1O EG + 219 22 4 0.3750 2.566246e+01 3.096286e+01 2.903104e+01 # HOG EG + 220 22 4 0.3750 2.531399e+01 2.584561e+01 3.030987e+01 # HOG EG + 221 23 1 2.3822 1.287059e+01 2.493603e+01 1.984152e+01 # CTO EG DC + 222 23 1 2.3822 1.206732e+01 2.583841e+01 2.076393e+01 # CTO EG DC + 223 23 2 1.5019 1.419575e+01 2.552788e+01 1.960793e+01 # OHG EG DC + 224 23 3 0.0400 1.234803e+01 2.482972e+01 1.889087e+01 # H1O EG + 225 23 3 0.0400 1.298741e+01 2.395545e+01 2.030296e+01 # H1O EG + 226 23 3 0.0400 1.258988e+01 2.594471e+01 2.171458e+01 # H1O EG + 227 23 2 1.5019 1.074216e+01 2.524656e+01 2.099752e+01 # OHG EG DC + 228 23 3 0.0400 1.195050e+01 2.681898e+01 2.030249e+01 # H1O EG + 229 23 4 0.3750 1.472423e+01 2.493421e+01 1.900108e+01 # HOG EG + 230 23 4 0.3750 1.021368e+01 2.584023e+01 2.160437e+01 # HOG EG + 231 24 1 2.3822 2.252529e+01 3.227584e+01 1.392053e+01 # CTO EG DC + 232 24 1 2.3822 2.387874e+01 3.216828e+01 1.323717e+01 # CTO EG DC + 233 24 2 1.5019 2.205829e+01 3.093414e+01 1.429824e+01 # OHG EG DC + 234 24 3 0.0400 2.180794e+01 3.273074e+01 1.323747e+01 # H1O EG + 235 24 3 0.0400 2.261696e+01 3.289304e+01 1.481426e+01 # H1O EG + 236 24 3 0.0400 2.459609e+01 3.171337e+01 1.392023e+01 # H1O EG + 237 24 2 1.5019 2.434574e+01 3.350997e+01 1.285946e+01 # OHG EG DC + 238 24 3 0.0400 2.378707e+01 3.155107e+01 1.234344e+01 # H1O EG + 239 24 4 0.3750 2.116786e+01 3.100490e+01 1.474782e+01 # HOG EG + 240 24 4 0.3750 2.523617e+01 3.343921e+01 1.240988e+01 # HOG EG + 241 25 1 2.3822 1.312673e+01 6.874998e+00 2.516904e+01 # CTO EG DC + 242 25 1 2.3822 1.185349e+01 7.158523e+00 2.594935e+01 # CTO EG DC + 243 25 2 1.5019 1.302403e+01 5.558001e+00 2.452416e+01 # OHG EG DC + 244 25 3 0.0400 1.397888e+01 6.880730e+00 2.584867e+01 # H1O EG + 245 25 3 0.0400 1.326506e+01 7.642208e+00 2.440723e+01 # H1O EG + 246 25 3 0.0400 1.100133e+01 7.152791e+00 2.526973e+01 # H1O EG + 247 25 2 1.5019 1.195618e+01 8.475520e+00 2.659424e+01 # OHG EG DC + 248 25 3 0.0400 1.171516e+01 6.391313e+00 2.671116e+01 # H1O EG + 249 25 4 0.3750 1.386169e+01 5.371471e+00 2.401080e+01 # HOG EG + 250 25 4 0.3750 1.111853e+01 8.662050e+00 2.710760e+01 # HOG EG + 251 26 1 2.3822 3.000602e+01 1.837327e+01 2.907023e+01 # CTO EG DC + 252 26 1 2.3822 3.119859e+01 1.808464e+01 2.817308e+01 # CTO EG DC + 253 26 2 1.5019 2.926588e+01 1.712770e+01 2.931846e+01 # OHG EG DC + 254 26 3 0.0400 2.934986e+01 1.909417e+01 2.858252e+01 # H1O EG + 255 26 3 0.0400 3.035459e+01 1.878324e+01 3.001813e+01 # H1O EG + 256 26 3 0.0400 3.185476e+01 1.736374e+01 2.866079e+01 # H1O EG + 257 26 2 1.5019 3.193874e+01 1.933022e+01 2.792485e+01 # OHG EG DC + 258 26 3 0.0400 3.085002e+01 1.767467e+01 2.722517e+01 # H1O EG + 259 26 4 0.3750 2.848129e+01 1.731759e+01 2.990868e+01 # HOG EG + 260 26 4 0.3750 3.272332e+01 1.914033e+01 2.733462e+01 # HOG EG + 261 27 1 2.3822 1.016731e+01 1.266949e+01 5.999065e+00 # CTO EG DC + 262 27 1 2.3822 9.481783e+00 1.337326e+01 7.158876e+00 # CTO EG DC + 263 27 2 1.5019 9.687686e+00 1.128254e+01 5.914086e+00 # OHG EG DC + 264 27 3 0.0400 1.124560e+01 1.267139e+01 6.158411e+00 # H1O EG + 265 27 3 0.0400 9.936955e+00 1.319063e+01 5.069842e+00 # H1O EG + 266 27 3 0.0400 8.403495e+00 1.337137e+01 6.999530e+00 # H1O EG + 267 27 2 1.5019 9.961407e+00 1.476022e+01 7.243855e+00 # OHG EG DC + 268 27 3 0.0400 9.712138e+00 1.285213e+01 8.088099e+00 # H1O EG + 269 27 4 0.3750 1.013869e+01 1.081953e+01 5.151053e+00 # HOG EG + 270 27 4 0.3750 9.510403e+00 1.522322e+01 8.006888e+00 # HOG EG + 271 28 1 2.3822 5.171622e+00 1.492429e+01 2.147983e+01 # CTO EG DC + 272 28 1 2.3822 5.551606e+00 1.404696e+01 2.029817e+01 # CTO EG DC + 273 28 2 1.5019 6.193337e+00 1.480288e+01 2.252971e+01 # OHG EG DC + 274 28 3 0.0400 4.206644e+00 1.460572e+01 2.187407e+01 # H1O EG + 275 28 3 0.0400 5.106127e+00 1.596290e+01 2.115566e+01 # H1O EG + 276 28 3 0.0400 6.516584e+00 1.436552e+01 1.990392e+01 # H1O EG + 277 28 2 1.5019 4.529892e+00 1.416836e+01 1.924828e+01 # OHG EG DC + 278 28 3 0.0400 5.617101e+00 1.300834e+01 2.062233e+01 # H1O EG + 279 28 4 0.3750 5.943347e+00 1.538007e+01 2.330711e+01 # HOG EG + 280 28 4 0.3750 4.779881e+00 1.359117e+01 1.847088e+01 # HOG EG + 281 29 1 2.3822 1.014723e+01 3.087262e+01 2.879962e+01 # CTO EG DC + 282 29 1 2.3822 9.530306e+00 3.197990e+01 2.963851e+01 # CTO EG DC + 283 29 2 1.5019 9.080138e+00 3.008056e+01 2.817124e+01 # OHG EG DC + 284 29 3 0.0400 1.075113e+01 3.022674e+01 2.943699e+01 # H1O EG + 285 29 3 0.0400 1.077760e+01 3.131066e+01 2.802576e+01 # H1O EG + 286 29 3 0.0400 8.926409e+00 3.262579e+01 2.900114e+01 # H1O EG + 287 29 2 1.5019 1.059740e+01 3.277196e+01 3.026689e+01 # OHG EG DC + 288 29 3 0.0400 8.899930e+00 3.154187e+01 3.041237e+01 # H1O EG + 289 29 4 0.3750 9.486009e+00 2.935209e+01 2.761934e+01 # HOG EG + 290 29 4 0.3750 1.019153e+01 3.350043e+01 3.081879e+01 # HOG EG + 291 30 1 2.3822 3.137035e+01 2.189579e+01 8.811053e+00 # CTO EG DC + 292 30 1 2.3822 3.050465e+01 2.314292e+01 8.735994e+00 # CTO EG DC + 293 30 2 1.5019 3.086151e+01 2.100804e+01 9.866452e+00 # OHG EG DC + 294 30 3 0.0400 3.239775e+01 2.217927e+01 9.039495e+00 # H1O EG + 295 30 3 0.0400 3.134194e+01 2.137500e+01 7.853938e+00 # H1O EG + 296 30 3 0.0400 2.947724e+01 2.285945e+01 8.507552e+00 # H1O EG + 297 30 2 1.5019 3.101348e+01 2.403068e+01 7.680595e+00 # OHG EG DC + 298 30 3 0.0400 3.053306e+01 2.366371e+01 9.693109e+00 # H1O EG + 299 30 4 0.3750 3.143106e+01 2.018756e+01 9.915833e+00 # HOG EG + 300 30 4 0.3750 3.044394e+01 2.485115e+01 7.631214e+00 # HOG EG + 301 31 1 2.3822 2.890012e+01 1.176644e+01 2.693290e+01 # CTO EG DC + 302 31 1 2.3822 2.857438e+01 1.323905e+01 2.674392e+01 # CTO EG DC + 303 31 2 1.5019 2.772486e+01 1.106957e+01 2.747515e+01 # OHG EG DC + 304 31 3 0.0400 2.973453e+01 1.166450e+01 2.762679e+01 # H1O EG + 305 31 3 0.0400 2.917110e+01 1.132759e+01 2.597265e+01 # H1O EG + 306 31 3 0.0400 2.773998e+01 1.334099e+01 2.605003e+01 # H1O EG + 307 31 2 1.5019 2.974964e+01 1.393592e+01 2.620168e+01 # OHG EG DC + 308 31 3 0.0400 2.830340e+01 1.367789e+01 2.770417e+01 # H1O EG + 309 31 4 0.3750 2.793917e+01 1.010074e+01 2.759948e+01 # HOG EG + 310 31 4 0.3750 2.953534e+01 1.490474e+01 2.607735e+01 # HOG EG + 311 32 1 2.3822 5.116830e+00 2.991456e+01 9.494198e+00 # CTO EG DC + 312 32 1 2.3822 3.734302e+00 2.928288e+01 9.493965e+00 # CTO EG DC + 313 32 2 1.5019 4.987288e+00 3.137884e+01 9.494032e+00 # OHG EG DC + 314 32 3 0.0400 5.661459e+00 2.959840e+01 8.604520e+00 # H1O EG + 315 32 3 0.0400 5.661083e+00 2.959857e+01 1.038416e+01 # H1O EG + 316 32 3 0.0400 3.189674e+00 2.959903e+01 1.038364e+01 # H1O EG + 317 32 2 1.5019 3.863845e+00 2.781860e+01 9.494131e+00 # OHG EG DC + 318 32 3 0.0400 3.190050e+00 2.959886e+01 8.603997e+00 # H1O EG + 319 32 4 0.3750 5.896845e+00 3.179441e+01 9.494185e+00 # HOG EG + 320 32 4 0.3750 2.954287e+00 2.740302e+01 9.493978e+00 # HOG EG + 321 33 1 2.3822 8.062975e+00 1.400574e+01 3.080936e+01 # CTO EG DC + 322 33 1 2.3822 9.485974e+00 1.384362e+01 3.030025e+01 # CTO EG DC + 323 33 2 1.5019 7.820383e+00 1.541564e+01 3.114736e+01 # OHG EG DC + 324 33 3 0.0400 7.922066e+00 1.339021e+01 3.169782e+01 # H1O EG + 325 33 3 0.0400 7.361877e+00 1.369226e+01 3.003587e+01 # H1O EG + 326 33 3 0.0400 9.626883e+00 1.445915e+01 2.941178e+01 # H1O EG + 327 33 2 1.5019 9.728567e+00 1.243373e+01 2.996225e+01 # OHG EG DC + 328 33 3 0.0400 1.018707e+01 1.415711e+01 3.107374e+01 # H1O EG + 329 33 4 0.3750 6.884199e+00 1.552229e+01 3.148230e+01 # HOG EG + 330 33 4 0.3750 1.066475e+01 1.232707e+01 2.962731e+01 # HOG EG + 331 34 1 2.3822 3.374783e+00 7.732456e+00 5.613991e+00 # CTO EG DC + 332 34 1 2.3822 3.271649e+00 7.207864e+00 4.191118e+00 # CTO EG DC + 333 34 2 1.5019 2.661939e+00 9.013885e+00 5.717407e+00 # OHG EG DC + 334 34 3 0.0400 4.423474e+00 7.878741e+00 5.872731e+00 # H1O EG + 335 34 3 0.0400 2.928726e+00 7.012718e+00 6.300365e+00 # H1O EG + 336 34 3 0.0400 2.222958e+00 7.061580e+00 3.932377e+00 # H1O EG + 337 34 2 1.5019 3.984493e+00 5.926436e+00 4.087701e+00 # OHG EG DC + 338 34 3 0.0400 3.717706e+00 7.927603e+00 3.504744e+00 # H1O EG + 339 34 4 0.3750 2.729790e+00 9.359011e+00 6.653508e+00 # HOG EG + 340 34 4 0.3750 3.916641e+00 5.581309e+00 3.151601e+00 # HOG EG + 341 35 1 2.3822 1.859846e+01 3.032503e+01 2.856228e+01 # CTO EG DC + 342 35 1 2.3822 1.767010e+01 3.143061e+01 2.808663e+01 # CTO EG DC + 343 35 2 1.5019 1.907583e+01 3.063441e+01 2.991775e+01 # OHG EG DC + 344 35 3 0.0400 1.945008e+01 3.024905e+01 2.788622e+01 # H1O EG + 345 35 3 0.0400 1.805953e+01 2.937766e+01 2.857483e+01 # H1O EG + 346 35 3 0.0400 1.681847e+01 3.150659e+01 2.876268e+01 # H1O EG + 347 35 2 1.5019 1.719273e+01 3.112123e+01 2.673115e+01 # OHG EG DC + 348 35 3 0.0400 1.820903e+01 3.237798e+01 2.807407e+01 # H1O EG + 349 35 4 0.3750 1.968659e+01 2.990705e+01 3.023068e+01 # HOG EG + 350 35 4 0.3750 1.658197e+01 3.184859e+01 2.641823e+01 # HOG EG + 351 36 1 2.3822 3.153931e+01 1.410264e+01 2.923940e+01 # CTO EG DC + 352 36 1 2.3822 3.276717e+01 1.360786e+01 2.849243e+01 # CTO EG DC + 353 36 2 1.5019 3.195918e+01 1.483770e+01 3.044119e+01 # OHG EG DC + 354 36 3 0.0400 3.092353e+01 1.325187e+01 2.953111e+01 # H1O EG + 355 36 3 0.0400 3.096202e+01 1.476368e+01 2.859298e+01 # H1O EG + 356 36 3 0.0400 3.338295e+01 1.445863e+01 2.820072e+01 # H1O EG + 357 36 2 1.5019 3.234730e+01 1.287280e+01 2.729064e+01 # OHG EG DC + 358 36 3 0.0400 3.334446e+01 1.294682e+01 2.913885e+01 # H1O EG + 359 36 4 0.3750 3.115138e+01 1.516321e+01 3.093262e+01 # HOG EG + 360 36 4 0.3750 3.315510e+01 1.254729e+01 2.679921e+01 # HOG EG + 361 37 1 2.3822 4.984337e+00 9.047693e+00 1.519315e+01 # CTO EG DC + 362 37 1 2.3822 3.500548e+00 9.150695e+00 1.487984e+01 # CTO EG DC + 363 37 2 1.5019 5.760971e+00 9.246169e+00 1.396094e+01 # OHG EG DC + 364 37 3 0.0400 5.201824e+00 8.061906e+00 1.560427e+01 # H1O EG + 365 37 3 0.0400 5.256522e+00 9.812342e+00 1.592070e+01 # H1O EG + 366 37 3 0.0400 3.283061e+00 1.013648e+01 1.446872e+01 # H1O EG + 367 37 2 1.5019 2.723914e+00 8.952218e+00 1.611205e+01 # OHG EG DC + 368 37 3 0.0400 3.228363e+00 8.386046e+00 1.415229e+01 # H1O EG + 369 37 4 0.3750 6.737148e+00 9.178405e+00 1.416706e+01 # HOG EG + 370 37 4 0.3750 1.747737e+00 9.019983e+00 1.590593e+01 # HOG EG + 371 38 1 2.3822 1.739350e+01 2.811402e+01 1.361058e+01 # CTO EG DC + 372 38 1 2.3822 1.683227e+01 2.952661e+01 1.360858e+01 # CTO EG DC + 373 38 2 1.5019 1.633941e+01 2.716776e+01 1.400350e+01 # OHG EG DC + 374 38 3 0.0400 1.821951e+01 2.805169e+01 1.431905e+01 # H1O EG + 375 38 3 0.0400 1.775215e+01 2.786358e+01 1.261220e+01 # H1O EG + 376 38 3 0.0400 1.600626e+01 2.958894e+01 1.290011e+01 # H1O EG + 377 38 2 1.5019 1.788637e+01 3.047286e+01 1.321566e+01 # OHG EG DC + 378 38 3 0.0400 1.647362e+01 2.977705e+01 1.460695e+01 # H1O EG + 379 38 4 0.3750 1.670864e+01 2.623843e+01 1.400482e+01 # HOG EG + 380 38 4 0.3750 1.751713e+01 3.140220e+01 1.321434e+01 # HOG EG + 381 39 1 2.3822 2.066802e+01 2.193568e+01 2.133995e+01 # CTO EG DC + 382 39 1 2.3822 2.115082e+01 2.306538e+01 2.044491e+01 # CTO EG DC + 383 39 2 1.5019 2.177539e+01 2.147603e+01 2.219045e+01 # OHG EG DC + 384 39 3 0.0400 2.031622e+01 2.110826e+01 2.072374e+01 # H1O EG + 385 39 3 0.0400 1.985200e+01 2.229267e+01 2.196826e+01 # H1O EG + 386 39 3 0.0400 2.150262e+01 2.389280e+01 2.106112e+01 # H1O EG + 387 39 2 1.5019 2.004345e+01 2.352503e+01 1.959441e+01 # OHG EG DC + 388 39 3 0.0400 2.196684e+01 2.270839e+01 1.981660e+01 # H1O EG + 389 39 4 0.3750 2.145776e+01 2.073281e+01 2.277929e+01 # HOG EG + 390 39 4 0.3750 2.036108e+01 2.426825e+01 1.900557e+01 # HOG EG + 391 40 1 2.3822 4.180961e+00 5.462615e+00 1.869134e+01 # CTO EG DC + 392 40 1 2.3822 5.682656e+00 5.365208e+00 1.847727e+01 # CTO EG DC + 393 40 2 1.5019 3.771496e+00 6.874107e+00 1.866087e+01 # OHG EG DC + 394 40 3 0.0400 3.922471e+00 5.030636e+00 1.965812e+01 # H1O EG + 395 40 3 0.0400 3.664665e+00 4.917924e+00 1.790086e+01 # H1O EG + 396 40 3 0.0400 5.941146e+00 5.797186e+00 1.751048e+01 # H1O EG + 397 40 2 1.5019 6.092121e+00 3.953716e+00 1.850773e+01 # OHG EG DC + 398 40 3 0.0400 6.198952e+00 5.909898e+00 1.926775e+01 # H1O EG + 399 40 4 0.3750 2.783539e+00 6.938190e+00 1.880170e+01 # HOG EG + 400 40 4 0.3750 7.080078e+00 3.889633e+00 1.836690e+01 # HOG EG + 401 41 1 2.3822 1.269533e+01 7.102736e+00 1.885043e+01 # CTO EG DC + 402 41 1 2.3822 1.174356e+01 6.111428e+00 1.949993e+01 # CTO EG DC + 403 41 2 1.5019 1.405736e+01 6.549776e+00 1.885400e+01 # OHG EG DC + 404 41 3 0.0400 1.268234e+01 8.038855e+00 1.940865e+01 # H1O EG + 405 41 3 0.0400 1.238187e+01 7.288519e+00 1.782314e+01 # H1O EG + 406 41 3 0.0400 1.175656e+01 5.175309e+00 1.894171e+01 # H1O EG + 407 41 2 1.5019 1.038153e+01 6.664389e+00 1.949636e+01 # OHG EG DC + 408 41 3 0.0400 1.205702e+01 5.925646e+00 2.052722e+01 # H1O EG + 409 41 4 0.3750 1.468352e+01 7.201952e+00 1.842670e+01 # HOG EG + 410 41 4 0.3750 9.755372e+00 6.012212e+00 1.992366e+01 # HOG EG + 411 42 1 2.3822 2.304055e+01 2.653552e+01 2.195701e+01 # CTO EG DC + 412 42 1 2.3822 2.426284e+01 2.606082e+01 2.272582e+01 # CTO EG DC + 413 42 2 1.5019 2.302696e+01 2.800487e+01 2.191572e+01 # OHG EG DC + 414 42 3 0.0400 2.213775e+01 2.617811e+01 2.245230e+01 # H1O EG + 415 42 3 0.0400 2.307567e+01 2.614429e+01 2.094025e+01 # H1O EG + 416 42 3 0.0400 2.516564e+01 2.641822e+01 2.223053e+01 # H1O EG + 417 42 2 1.5019 2.427643e+01 2.459146e+01 2.276711e+01 # OHG EG DC + 418 42 3 0.0400 2.422772e+01 2.645204e+01 2.374258e+01 # H1O EG + 419 42 4 0.3750 2.222282e+01 2.831718e+01 2.140993e+01 # HOG EG + 420 42 4 0.3750 2.508057e+01 2.427916e+01 2.327290e+01 # HOG EG + 421 43 1 2.3822 2.496346e+01 2.979344e+01 1.674040e+01 # CTO EG DC + 422 43 1 2.3822 2.372061e+01 2.895227e+01 1.698159e+01 # CTO EG DC + 423 43 2 1.5019 2.459386e+01 3.121575e+01 1.670384e+01 # OHG EG DC + 424 43 3 0.0400 2.541482e+01 2.951130e+01 1.578921e+01 # H1O EG + 425 43 3 0.0400 2.567868e+01 2.962501e+01 1.754551e+01 # H1O EG + 426 43 3 0.0400 2.326926e+01 2.923442e+01 1.793278e+01 # H1O EG + 427 43 2 1.5019 2.409022e+01 2.752997e+01 1.701815e+01 # OHG EG DC + 428 43 3 0.0400 2.300539e+01 2.912070e+01 1.617649e+01 # H1O EG + 429 43 4 0.3750 2.541152e+01 3.176915e+01 1.654517e+01 # HOG EG + 430 43 4 0.3750 2.327256e+01 2.697657e+01 1.717683e+01 # HOG EG + 431 44 1 2.3822 2.099330e+01 2.496305e+01 2.992763e+01 # CTO EG DC + 432 44 1 2.3822 2.064714e+01 2.348301e+01 2.992081e+01 # CTO EG DC + 433 44 2 1.5019 2.231683e+01 2.515462e+01 3.053794e+01 # OHG EG DC + 434 44 3 0.0400 2.024585e+01 2.550889e+01 3.050337e+01 # H1O EG + 435 44 3 0.0400 2.100795e+01 2.533802e+01 2.890426e+01 # H1O EG + 436 44 3 0.0400 2.139460e+01 2.293717e+01 2.934507e+01 # H1O EG + 437 44 2 1.5019 1.932361e+01 2.329144e+01 2.931050e+01 # OHG EG DC + 438 44 3 0.0400 2.063249e+01 2.310805e+01 3.094418e+01 # H1O EG + 439 44 4 0.3750 2.254457e+01 2.612834e+01 3.054243e+01 # HOG EG + 440 44 4 0.3750 1.909587e+01 2.231773e+01 2.930601e+01 # HOG EG + 441 45 1 2.3822 1.864854e+01 3.186207e+00 1.064616e+01 # CTO EG DC + 442 45 1 2.3822 2.008740e+01 2.714751e+00 1.077970e+01 # CTO EG DC + 443 45 2 1.5019 1.792567e+01 2.300373e+00 9.722233e+00 # OHG EG DC + 444 45 3 0.0400 1.863391e+01 4.204762e+00 1.025831e+01 # H1O EG + 445 45 3 0.0400 1.816591e+01 3.163060e+00 1.162322e+01 # H1O EG + 446 45 3 0.0400 2.010203e+01 1.696196e+00 1.116756e+01 # H1O EG + 447 45 2 1.5019 2.081027e+01 3.600585e+00 1.170363e+01 # OHG EG DC + 448 45 3 0.0400 2.057003e+01 2.737898e+00 9.802649e+00 # H1O EG + 449 45 4 0.3750 1.697905e+01 2.610541e+00 9.634380e+00 # HOG EG + 450 45 4 0.3750 2.175689e+01 3.290417e+00 1.179148e+01 # HOG EG + 451 46 1 2.3822 3.226291e+01 1.318134e+01 1.488404e+01 # CTO EG DC + 452 46 1 2.3822 3.258941e+01 1.198992e+01 1.399842e+01 # CTO EG DC + 453 46 2 1.5019 3.350076e+01 1.390381e+01 1.521065e+01 # OHG EG DC + 454 46 3 0.0400 3.179266e+01 1.283310e+01 1.580365e+01 # H1O EG + 455 46 3 0.0400 3.158084e+01 1.384947e+01 1.435823e+01 # H1O EG + 456 46 3 0.0400 3.305966e+01 1.233817e+01 1.307881e+01 # H1O EG + 457 46 2 1.5019 3.135156e+01 1.126746e+01 1.367181e+01 # OHG EG DC + 458 46 3 0.0400 3.327148e+01 1.132179e+01 1.452423e+01 # H1O EG + 459 46 4 0.3750 3.328597e+01 1.468764e+01 1.579329e+01 # HOG EG + 460 46 4 0.3750 3.156636e+01 1.048363e+01 1.308917e+01 # HOG EG + 461 47 1 2.3822 4.374898e+00 2.194396e+01 1.036229e+01 # CTO EG DC + 462 47 1 2.3822 5.778112e+00 2.136975e+01 1.047030e+01 # CTO EG DC + 463 47 2 1.5019 4.424003e+00 2.339990e+01 1.055912e+01 # OHG EG DC + 464 47 3 0.0400 3.738672e+00 2.149592e+01 1.112556e+01 # H1O EG + 465 47 3 0.0400 3.967030e+00 2.172480e+01 9.375526e+00 # H1O EG + 466 47 3 0.0400 6.414338e+00 2.181780e+01 9.707033e+00 # H1O EG + 467 47 2 1.5019 5.729007e+00 1.991381e+01 1.027347e+01 # OHG EG DC + 468 47 3 0.0400 6.185980e+00 2.158892e+01 1.145706e+01 # H1O EG + 469 47 4 0.3750 3.500836e+00 2.377767e+01 1.048806e+01 # HOG EG + 470 47 4 0.3750 6.652174e+00 1.953604e+01 1.034453e+01 # HOG EG + 471 48 1 2.3822 5.421781e+00 2.448600e+01 7.517683e+00 # CTO EG DC + 472 48 1 2.3822 6.489879e+00 2.518445e+01 8.343349e+00 # CTO EG DC + 473 48 2 1.5019 5.784380e+00 2.307241e+01 7.341076e+00 # OHG EG DC + 474 48 3 0.0400 5.344809e+00 2.496547e+01 6.541833e+00 # H1O EG + 475 48 3 0.0400 4.462861e+00 2.455312e+01 8.031556e+00 # H1O EG + 476 48 3 0.0400 6.566851e+00 2.470498e+01 9.319199e+00 # H1O EG + 477 48 2 1.5019 6.127281e+00 2.659804e+01 8.519956e+00 # OHG EG DC + 478 48 3 0.0400 7.448800e+00 2.511733e+01 7.829475e+00 # H1O EG + 479 48 4 0.3750 5.081684e+00 2.261290e+01 6.797874e+00 # HOG EG + 480 48 4 0.3750 6.829977e+00 2.705755e+01 9.063157e+00 # HOG EG + 481 49 1 2.3822 1.475684e+01 1.930992e+01 1.240087e+01 # CTO EG DC + 482 49 1 2.3822 1.459836e+01 1.937204e+01 1.391131e+01 # CTO EG DC + 483 49 2 1.5019 1.375303e+01 2.017617e+01 1.176612e+01 # OHG EG DC + 484 49 3 0.0400 1.461648e+01 1.828342e+01 1.206221e+01 # H1O EG + 485 49 3 0.0400 1.575532e+01 1.964950e+01 1.212551e+01 # H1O EG + 486 49 3 0.0400 1.473872e+01 2.039854e+01 1.424997e+01 # H1O EG + 487 49 2 1.5019 1.560217e+01 1.850580e+01 1.454605e+01 # OHG EG DC + 488 49 3 0.0400 1.359988e+01 1.903247e+01 1.418666e+01 # H1O EG + 489 49 4 0.3750 1.385729e+01 2.013530e+01 1.077241e+01 # HOG EG + 490 49 4 0.3750 1.549791e+01 1.854667e+01 1.553976e+01 # HOG EG + 491 50 1 2.3822 9.619866e+00 3.630522e+00 1.632362e+01 # CTO EG DC + 492 50 1 2.3822 9.915005e+00 2.334168e+00 1.706034e+01 # CTO EG DC + 493 50 2 1.5019 8.275907e+00 3.563589e+00 1.573185e+01 # OHG EG DC + 494 50 3 0.0400 1.035709e+01 3.776296e+00 1.553410e+01 # H1O EG + 495 50 3 0.0400 9.667236e+00 4.465320e+00 1.702288e+01 # H1O EG + 496 50 3 0.0400 9.177779e+00 2.188394e+00 1.784987e+01 # H1O EG + 497 50 2 1.5019 1.125896e+01 2.401100e+00 1.765212e+01 # OHG EG DC + 498 50 3 0.0400 9.867635e+00 1.499370e+00 1.636108e+01 # H1O EG + 499 50 4 0.3750 8.081736e+00 4.416454e+00 1.524717e+01 # HOG EG + 500 50 4 0.3750 1.145313e+01 1.548236e+00 1.813680e+01 # HOG EG + 501 51 1 2.3822 1.218377e+01 2.235770e+01 6.984688e+00 # CTO EG DC + 502 51 1 2.3822 1.089889e+01 2.180552e+01 6.389217e+00 # CTO EG DC + 503 51 2 1.5019 1.234134e+01 2.376545e+01 6.591847e+00 # OHG EG DC + 504 51 3 0.0400 1.303248e+01 2.178116e+01 6.616745e+00 # H1O EG + 505 51 3 0.0400 1.214091e+01 2.228693e+01 8.071543e+00 # H1O EG + 506 51 3 0.0400 1.005017e+01 2.238206e+01 6.757160e+00 # H1O EG + 507 51 2 1.5019 1.074132e+01 2.039778e+01 6.782058e+00 # OHG EG DC + 508 51 3 0.0400 1.094174e+01 2.187630e+01 5.302361e+00 # H1O EG + 509 51 4 0.3750 1.318665e+01 2.412872e+01 6.983604e+00 # HOG EG + 510 51 4 0.3750 9.896000e+00 2.003451e+01 6.390300e+00 # HOG EG + 511 52 1 2.3822 1.421480e+01 2.976612e+01 2.303823e+01 # CTO EG DC + 512 52 1 2.3822 1.471597e+01 3.058770e+01 2.421476e+01 # CTO EG DC + 513 52 2 1.5019 1.536115e+01 2.924904e+01 2.227704e+01 # OHG EG DC + 514 52 3 0.0400 1.360264e+01 3.039378e+01 2.239062e+01 # H1O EG + 515 52 3 0.0400 1.361703e+01 2.893186e+01 2.340536e+01 # H1O EG + 516 52 3 0.0400 1.532813e+01 2.996003e+01 2.486237e+01 # H1O EG + 517 52 2 1.5019 1.356962e+01 3.110477e+01 2.497595e+01 # OHG EG DC + 518 52 3 0.0400 1.531374e+01 3.142195e+01 2.384763e+01 # H1O EG + 519 52 4 0.3750 1.503143e+01 2.870853e+01 2.150300e+01 # HOG EG + 520 52 4 0.3750 1.389934e+01 3.164528e+01 2.574998e+01 # HOG EG + 521 53 1 2.3822 1.425940e+01 3.511716e+00 1.716905e+01 # CTO EG DC + 522 53 1 2.3822 1.535868e+01 3.948872e+00 1.621465e+01 # CTO EG DC + 523 53 2 1.5019 1.466305e+01 3.807931e+00 1.855115e+01 # OHG EG DC + 524 53 3 0.0400 1.408972e+01 2.440304e+00 1.706234e+01 # H1O EG + 525 53 3 0.0400 1.334034e+01 4.049553e+00 1.693630e+01 # H1O EG + 526 53 3 0.0400 1.552835e+01 5.020284e+00 1.632136e+01 # H1O EG + 527 53 2 1.5019 1.495502e+01 3.652657e+00 1.483254e+01 # OHG EG DC + 528 53 3 0.0400 1.627773e+01 3.411034e+00 1.644739e+01 # H1O EG + 529 53 4 0.3750 1.393984e+01 3.520328e+00 1.917905e+01 # HOG EG + 530 53 4 0.3750 1.567824e+01 3.940259e+00 1.420465e+01 # HOG EG + 531 54 1 2.3822 2.460547e+01 1.936667e+01 2.759177e+01 # CTO EG DC + 532 54 1 2.3822 2.566375e+01 1.967855e+01 2.863732e+01 # CTO EG DC + 533 54 2 1.5019 2.501144e+01 1.993454e+01 2.629809e+01 # OHG EG DC + 534 54 3 0.0400 2.365367e+01 1.980186e+01 2.789639e+01 # H1O EG + 535 54 3 0.0400 2.449626e+01 1.828643e+01 2.749558e+01 # H1O EG + 536 54 3 0.0400 2.661555e+01 1.924335e+01 2.833270e+01 # H1O EG + 537 54 2 1.5019 2.525778e+01 1.911067e+01 2.993100e+01 # OHG EG DC + 538 54 3 0.0400 2.577296e+01 2.075879e+01 2.873351e+01 # H1O EG + 539 54 4 0.3750 2.431521e+01 1.972936e+01 2.561023e+01 # HOG EG + 540 54 4 0.3750 2.595402e+01 1.931585e+01 3.061886e+01 # HOG EG + 541 55 1 2.3822 1.520638e+01 1.084646e+01 1.736446e+01 # CTO EG DC + 542 55 1 2.3822 1.513806e+01 1.156020e+01 1.870473e+01 # CTO EG DC + 543 55 2 1.5019 1.418204e+01 1.139463e+01 1.646383e+01 # OHG EG DC + 544 55 3 0.0400 1.502872e+01 9.780956e+00 1.751018e+01 # H1O EG + 545 55 3 0.0400 1.619264e+01 1.099295e+01 1.692408e+01 # H1O EG + 546 55 3 0.0400 1.531572e+01 1.262571e+01 1.855901e+01 # H1O EG + 547 55 2 1.5019 1.616240e+01 1.101203e+01 1.960536e+01 # OHG EG DC + 548 55 3 0.0400 1.415181e+01 1.141371e+01 1.914511e+01 # H1O EG + 549 55 4 0.3750 1.422698e+01 1.092507e+01 1.558208e+01 # HOG EG + 550 55 4 0.3750 1.611746e+01 1.148159e+01 2.048711e+01 # HOG EG + 551 56 1 2.3822 1.738579e+01 2.474477e+01 2.543469e+01 # CTO EG DC + 552 56 1 2.3822 1.782819e+01 2.571043e+01 2.652197e+01 # CTO EG DC + 553 56 2 1.5019 1.760953e+01 2.535464e+01 2.411602e+01 # OHG EG DC + 554 56 3 0.0400 1.632588e+01 2.452116e+01 2.555589e+01 # H1O EG + 555 56 3 0.0400 1.796210e+01 2.382269e+01 2.551048e+01 # H1O EG + 556 56 3 0.0400 1.888810e+01 2.593404e+01 2.640076e+01 # H1O EG + 557 56 2 1.5019 1.760445e+01 2.510056e+01 2.784064e+01 # OHG EG DC + 558 56 3 0.0400 1.725188e+01 2.663251e+01 2.644618e+01 # H1O EG + 559 56 4 0.3750 1.731847e+01 2.471933e+01 2.340070e+01 # HOG EG + 560 56 4 0.3750 1.789550e+01 2.573587e+01 2.855596e+01 # HOG EG + 561 57 1 2.3822 2.352009e+01 1.983585e+01 1.917119e+01 # CTO EG DC + 562 57 1 2.3822 2.435149e+01 2.001033e+01 2.043163e+01 # CTO EG DC + 563 57 2 1.5019 2.365728e+01 1.845722e+01 1.867980e+01 # OHG EG DC + 564 57 3 0.0400 2.386860e+01 2.052997e+01 1.840645e+01 # H1O EG + 565 57 3 0.0400 2.247280e+01 2.003867e+01 1.939514e+01 # H1O EG + 566 57 3 0.0400 2.400298e+01 1.931621e+01 2.119637e+01 # H1O EG + 567 57 2 1.5019 2.421430e+01 2.138896e+01 2.092302e+01 # OHG EG DC + 568 57 3 0.0400 2.539878e+01 1.980751e+01 2.020768e+01 # H1O EG + 569 57 4 0.3750 2.311030e+01 1.834243e+01 1.785056e+01 # HOG EG + 570 57 4 0.3750 2.476127e+01 2.150375e+01 2.175226e+01 # HOG EG + 571 58 1 2.3822 3.030719e+01 2.301656e+01 1.365962e+01 # CTO EG DC + 572 58 1 2.3822 3.180629e+01 2.322560e+01 1.352032e+01 # CTO EG DC + 573 58 2 1.5019 2.959971e+01 2.422617e+01 1.321553e+01 # OHG EG DC + 574 58 3 0.0400 3.006318e+01 2.281593e+01 1.470284e+01 # H1O EG + 575 58 3 0.0400 2.999925e+01 2.217015e+01 1.304573e+01 # H1O EG + 576 58 3 0.0400 3.205030e+01 2.342623e+01 1.247710e+01 # H1O EG + 577 58 2 1.5019 3.251376e+01 2.201599e+01 1.396442e+01 # OHG EG DC + 578 58 3 0.0400 3.211422e+01 2.407201e+01 1.413421e+01 # H1O EG + 579 58 4 0.3750 2.861346e+01 2.408864e+01 1.330717e+01 # HOG EG + 580 58 4 0.3750 3.350001e+01 2.215351e+01 1.387278e+01 # HOG EG + 581 59 1 2.3822 1.112182e+01 3.181080e+01 8.571814e+00 # CTO EG DC + 582 59 1 2.3822 1.047382e+01 3.050097e+01 8.153702e+00 # CTO EG DC + 583 59 2 1.5019 1.081689e+01 3.208018e+01 9.984383e+00 # OHG EG DC + 584 59 3 0.0400 1.073346e+01 3.262181e+01 7.955749e+00 # H1O EG + 585 59 3 0.0400 1.220163e+01 3.174067e+01 8.440720e+00 # H1O EG + 586 59 3 0.0400 1.086218e+01 2.968995e+01 8.769768e+00 # H1O EG + 587 59 2 1.5019 1.077875e+01 3.023159e+01 6.741134e+00 # OHG EG DC + 588 59 3 0.0400 9.394006e+00 3.057109e+01 8.284796e+00 # H1O EG + 589 59 4 0.3750 1.124321e+01 3.294192e+01 1.025946e+01 # HOG EG + 590 59 4 0.3750 1.035243e+01 2.936985e+01 6.466060e+00 # HOG EG + 591 60 1 2.3822 3.014858e+00 6.016963e+00 2.526196e+01 # CTO EG DC + 592 60 1 2.3822 3.847059e+00 5.108930e+00 2.615265e+01 # CTO EG DC + 593 60 2 1.5019 3.802355e+00 6.402880e+00 2.408221e+01 # OHG EG DC + 594 60 3 0.0400 2.731441e+00 6.911027e+00 2.581732e+01 # H1O EG + 595 60 3 0.0400 2.116727e+00 5.488821e+00 2.494177e+01 # H1O EG + 596 60 3 0.0400 4.130477e+00 4.214866e+00 2.559729e+01 # H1O EG + 597 60 2 1.5019 3.059563e+00 4.723013e+00 2.733240e+01 # OHG EG DC + 598 60 3 0.0400 4.745191e+00 5.637072e+00 2.647284e+01 # H1O EG + 599 60 4 0.3750 3.254854e+00 7.000269e+00 2.349623e+01 # HOG EG + 600 60 4 0.3750 3.607064e+00 4.125623e+00 2.791838e+01 # HOG EG + 601 61 1 2.3822 5.084493e+00 3.197112e+01 2.006904e+01 # CTO EG DC + 602 61 1 2.3822 4.404449e+00 3.206612e+01 1.871298e+01 # CTO EG DC + 603 61 2 1.5019 6.512759e+00 3.228767e+01 1.992498e+01 # OHG EG DC + 604 61 3 0.0400 4.974711e+00 3.096001e+01 2.046110e+01 # H1O EG + 605 61 3 0.0400 4.623575e+00 3.267929e+01 2.075763e+01 # H1O EG + 606 61 3 0.0400 4.514231e+00 3.307722e+01 1.832092e+01 # H1O EG + 607 61 2 1.5019 2.976183e+00 3.174957e+01 1.885704e+01 # OHG EG DC + 608 61 3 0.0400 4.865366e+00 3.135795e+01 1.802439e+01 # H1O EG + 609 61 4 0.3750 6.960156e+00 3.222517e+01 2.081713e+01 # HOG EG + 610 61 4 0.3750 2.528785e+00 3.181207e+01 1.796489e+01 # HOG EG + 611 62 1 2.3822 2.559005e+01 2.401837e+01 6.951559e+00 # CTO EG DC + 612 62 1 2.3822 2.407501e+01 2.389789e+01 6.974741e+00 # CTO EG DC + 613 62 2 1.5019 2.609433e+01 2.413250e+01 8.327631e+00 # OHG EG DC + 614 62 3 0.0400 2.587592e+01 2.490502e+01 6.385676e+00 # H1O EG + 615 62 3 0.0400 2.601824e+01 2.313360e+01 6.480442e+00 # H1O EG + 616 62 3 0.0400 2.378913e+01 2.301124e+01 7.540625e+00 # H1O EG + 617 62 2 1.5019 2.357073e+01 2.378376e+01 5.598669e+00 # OHG EG DC + 618 62 3 0.0400 2.364682e+01 2.478265e+01 7.445858e+00 # H1O EG + 619 62 4 0.3750 2.709107e+01 2.421176e+01 8.312380e+00 # HOG EG + 620 62 4 0.3750 2.257399e+01 2.370450e+01 5.613920e+00 # HOG EG + 621 63 1 2.3822 8.528888e+00 2.064198e+01 1.621012e+01 # CTO EG DC + 622 63 1 2.3822 7.987622e+00 2.205582e+01 1.634608e+01 # CTO EG DC + 623 63 2 1.5019 9.996663e+00 2.068305e+01 1.614050e+01 # OHG EG DC + 624 63 3 0.0400 8.135112e+00 2.018748e+01 1.530102e+01 # H1O EG + 625 63 3 0.0400 8.223007e+00 2.005072e+01 1.707322e+01 # H1O EG + 626 63 3 0.0400 8.381397e+00 2.251032e+01 1.725518e+01 # H1O EG + 627 63 2 1.5019 6.519846e+00 2.201475e+01 1.641571e+01 # OHG EG DC + 628 63 3 0.0400 8.293502e+00 2.264709e+01 1.548298e+01 # H1O EG + 629 63 4 0.3750 1.035276e+01 1.975289e+01 1.605105e+01 # HOG EG + 630 63 4 0.3750 6.163751e+00 2.294491e+01 1.650515e+01 # HOG EG + 631 64 1 2.3822 2.564221e+01 7.746957e+00 1.786866e+01 # CTO EG DC + 632 64 1 2.3822 2.681178e+01 8.426357e+00 1.856215e+01 # CTO EG DC + 633 64 2 1.5019 2.576269e+01 6.289512e+00 1.801780e+01 # OHG EG DC + 634 64 3 0.0400 2.564740e+01 8.004962e+00 1.680965e+01 # H1O EG + 635 64 3 0.0400 2.470779e+01 8.081749e+00 1.831908e+01 # H1O EG + 636 64 3 0.0400 2.680659e+01 8.168351e+00 1.962116e+01 # H1O EG + 637 64 2 1.5019 2.669130e+01 9.883801e+00 1.841301e+01 # OHG EG DC + 638 64 3 0.0400 2.774620e+01 8.091564e+00 1.811173e+01 # H1O EG + 639 64 4 0.3750 2.499323e+01 5.842539e+00 1.756156e+01 # HOG EG + 640 64 4 0.3750 2.746076e+01 1.033077e+01 1.886925e+01 # HOG EG + 641 65 1 2.3822 1.696714e+01 6.825417e+00 6.594302e+00 # CTO EG DC + 642 65 1 2.3822 1.600730e+01 5.660973e+00 6.776441e+00 # CTO EG DC + 643 65 2 1.5019 1.673053e+01 7.825399e+00 7.645469e+00 # OHG EG DC + 644 65 3 0.0400 1.680544e+01 7.280829e+00 5.617289e+00 # H1O EG + 645 65 3 0.0400 1.799356e+01 6.464736e+00 6.661079e+00 # H1O EG + 646 65 3 0.0400 1.616899e+01 5.205561e+00 7.753454e+00 # H1O EG + 647 65 2 1.5019 1.624390e+01 4.660991e+00 5.725273e+00 # OHG EG DC + 648 65 3 0.0400 1.498087e+01 6.021654e+00 6.709664e+00 # H1O EG + 649 65 4 0.3750 1.736200e+01 8.591480e+00 7.525641e+00 # HOG EG + 650 65 4 0.3750 1.561243e+01 3.894910e+00 5.845102e+00 # HOG EG + 651 66 1 2.3822 2.179589e+01 1.942578e+01 3.066062e+01 # CTO EG DC + 652 66 1 2.3822 2.224307e+01 1.929153e+01 3.210714e+01 # CTO EG DC + 653 66 2 1.5019 2.035173e+01 1.916763e+01 3.056749e+01 # OHG EG DC + 654 66 3 0.0400 2.233378e+01 1.870475e+01 3.004509e+01 # H1O EG + 655 66 3 0.0400 2.200770e+01 2.043464e+01 3.030644e+01 # H1O EG + 656 66 3 0.0400 2.170517e+01 2.001256e+01 3.272268e+01 # H1O EG + 657 66 2 1.5019 2.368722e+01 1.954968e+01 3.220027e+01 # OHG EG DC + 658 66 3 0.0400 2.203125e+01 1.828268e+01 3.246132e+01 # H1O EG + 659 66 4 0.3750 2.005753e+01 1.925595e+01 2.961584e+01 # HOG EG + 660 66 4 0.3750 2.398142e+01 1.946136e+01 3.315193e+01 # HOG EG + 661 67 1 2.3822 1.039421e+01 1.720310e+01 2.313786e+01 # CTO EG DC + 662 67 1 2.3822 8.879914e+00 1.707299e+01 2.315698e+01 # CTO EG DC + 663 67 2 1.5019 1.096797e+01 1.642010e+01 2.424177e+01 # OHG EG DC + 664 67 3 0.0400 1.067087e+01 1.825097e+01 2.325418e+01 # H1O EG + 665 67 3 0.0400 1.077958e+01 1.682926e+01 2.218926e+01 # H1O EG + 666 67 3 0.0400 8.603262e+00 1.602512e+01 2.304065e+01 # H1O EG + 667 67 2 1.5019 8.306158e+00 1.785599e+01 2.205307e+01 # OHG EG DC + 668 67 3 0.0400 8.494549e+00 1.744683e+01 2.410558e+01 # H1O EG + 669 67 4 0.3750 1.196422e+01 1.650570e+01 2.422919e+01 # HOG EG + 670 67 4 0.3750 7.309908e+00 1.777039e+01 2.206565e+01 # HOG EG + 671 68 1 2.3822 2.460364e+01 8.623576e+00 2.876547e+01 # CTO EG DC + 672 68 1 2.3822 2.327816e+01 9.320300e+00 2.850458e+01 # CTO EG DC + 673 68 2 1.5019 2.473924e+01 7.472467e+00 2.786133e+01 # OHG EG DC + 674 68 3 0.0400 2.463630e+01 8.278939e+00 2.979903e+01 # H1O EG + 675 68 3 0.0400 2.542230e+01 9.321423e+00 2.858967e+01 # H1O EG + 676 68 3 0.0400 2.324550e+01 9.664937e+00 2.747101e+01 # H1O EG + 677 68 2 1.5019 2.314256e+01 1.047141e+01 2.940871e+01 # OHG EG DC + 678 68 3 0.0400 2.245950e+01 8.622453e+00 2.868038e+01 # H1O EG + 679 68 4 0.3750 2.561127e+01 7.014096e+00 2.803297e+01 # HOG EG + 680 68 4 0.3750 2.227053e+01 1.092978e+01 2.923707e+01 # HOG EG + 681 69 1 2.3822 1.929711e+01 3.274808e+01 2.383743e+01 # CTO EG DC + 682 69 1 2.3822 2.027733e+01 3.234582e+01 2.492728e+01 # CTO EG DC + 683 69 2 1.5019 1.845052e+01 3.159768e+01 2.348990e+01 # OHG EG DC + 684 69 3 0.0400 1.984776e+01 3.307314e+01 2.295470e+01 # H1O EG + 685 69 3 0.0400 1.867030e+01 3.356489e+01 2.419522e+01 # H1O EG + 686 69 3 0.0400 1.972668e+01 3.202076e+01 2.581002e+01 # H1O EG + 687 69 2 1.5019 2.112392e+01 3.349621e+01 2.527482e+01 # OHG EG DC + 688 69 3 0.0400 2.090415e+01 3.152900e+01 2.456950e+01 # H1O EG + 689 69 4 0.3750 1.780564e+01 3.186233e+01 2.277289e+01 # HOG EG + 690 69 4 0.3750 2.176880e+01 3.323157e+01 2.599183e+01 # HOG EG + 691 70 1 2.3822 6.373767e+00 2.533933e+01 3.276416e+01 # CTO EG DC + 692 70 1 2.3822 4.919110e+00 2.502523e+01 3.245479e+01 # CTO EG DC + 693 70 2 1.5019 6.477630e+00 2.670366e+01 3.330148e+01 # OHG EG DC + 694 70 3 0.0400 6.964589e+00 2.526293e+01 3.185137e+01 # H1O EG + 695 70 3 0.0400 6.750555e+00 2.462966e+01 3.350070e+01 # H1O EG + 696 70 3 0.0400 4.328288e+00 2.510164e+01 3.336758e+01 # H1O EG + 697 70 2 1.5019 4.815247e+00 2.366090e+01 3.191746e+01 # OHG EG DC + 698 70 3 0.0400 4.542322e+00 2.573491e+01 3.171825e+01 # H1O EG + 699 70 4 0.3750 7.434641e+00 2.691031e+01 3.350501e+01 # HOG EG + 700 70 4 0.3750 3.858236e+00 2.345425e+01 3.171393e+01 # HOG EG + 701 71 1 2.3822 1.660228e+01 1.706507e+01 2.928404e+01 # CTO EG DC + 702 71 1 2.3822 1.630588e+01 1.838919e+01 2.996906e+01 # CTO EG DC + 703 71 2 1.5019 1.795306e+01 1.661498e+01 2.964972e+01 # OHG EG DC + 704 71 3 0.0400 1.654274e+01 1.719321e+01 2.820324e+01 # H1O EG + 705 71 3 0.0400 1.587309e+01 1.631980e+01 2.960176e+01 # H1O EG + 706 71 3 0.0400 1.636542e+01 1.826106e+01 3.104986e+01 # H1O EG + 707 71 2 1.5019 1.495510e+01 1.883929e+01 2.960338e+01 # OHG EG DC + 708 71 3 0.0400 1.703506e+01 1.913447e+01 2.965134e+01 # H1O EG + 709 71 4 0.3750 1.814806e+01 1.574385e+01 2.919905e+01 # HOG EG + 710 71 4 0.3750 1.476010e+01 1.971042e+01 3.005405e+01 # HOG EG + 711 72 1 2.3822 2.344659e+01 1.226847e+01 1.826315e+01 # CTO EG DC + 712 72 1 2.3822 2.485095e+01 1.279140e+01 1.800880e+01 # CTO EG DC + 713 72 2 1.5019 2.343739e+01 1.080416e+01 1.813425e+01 # OHG EG DC + 714 72 3 0.0400 2.275991e+01 1.270106e+01 1.753552e+01 # H1O EG + 715 72 3 0.0400 2.313157e+01 1.254613e+01 1.926902e+01 # H1O EG + 716 72 3 0.0400 2.553763e+01 1.235881e+01 1.873643e+01 # H1O EG + 717 72 2 1.5019 2.486015e+01 1.425571e+01 1.813770e+01 # OHG EG DC + 718 72 3 0.0400 2.516597e+01 1.251374e+01 1.700293e+01 # H1O EG + 719 72 4 0.3750 2.251347e+01 1.046013e+01 1.830158e+01 # HOG EG + 720 72 4 0.3750 2.578408e+01 1.459974e+01 1.797036e+01 # HOG EG + 721 73 1 2.3822 2.230239e+01 7.319473e+00 7.137253e+00 # CTO EG DC + 722 73 1 2.3822 2.197884e+01 6.988599e+00 8.585091e+00 # CTO EG DC + 723 73 2 1.5019 2.262831e+01 8.748202e+00 7.021441e+00 # OHG EG DC + 724 73 3 0.0400 2.144002e+01 7.092100e+00 6.510588e+00 # H1O EG + 725 73 3 0.0400 2.315546e+01 6.725057e+00 6.810066e+00 # H1O EG + 726 73 3 0.0400 2.284121e+01 7.215973e+00 9.211756e+00 # H1O EG + 727 73 2 1.5019 2.165292e+01 5.559870e+00 8.700902e+00 # OHG EG DC + 728 73 3 0.0400 2.112577e+01 7.583016e+00 8.912278e+00 # H1O EG + 729 73 4 0.3750 2.284117e+01 8.965883e+00 6.068916e+00 # HOG EG + 730 73 4 0.3750 2.144006e+01 5.342190e+00 9.653427e+00 # HOG EG + 731 74 1 2.3822 1.814551e+01 9.771175e+00 2.222073e+01 # CTO EG DC + 732 74 1 2.3822 1.905443e+01 1.088915e+01 2.270486e+01 # CTO EG DC + 733 74 2 1.5019 1.862845e+01 8.484978e+00 2.274357e+01 # OHG EG DC + 734 74 3 0.0400 1.815011e+01 9.744616e+00 2.113106e+01 # H1O EG + 735 74 3 0.0400 1.713009e+01 9.948597e+00 2.257505e+01 # H1O EG + 736 74 3 0.0400 1.904983e+01 1.091571e+01 2.379453e+01 # H1O EG + 737 74 2 1.5019 1.857149e+01 1.217535e+01 2.218202e+01 # OHG EG DC + 738 74 3 0.0400 2.006986e+01 1.071173e+01 2.235055e+01 # H1O EG + 739 74 4 0.3750 1.803048e+01 7.749466e+00 2.242507e+01 # HOG EG + 740 74 4 0.3750 1.916947e+01 1.291086e+01 2.250053e+01 # HOG EG + 741 75 1 2.3822 5.382497e+00 1.624301e+01 7.951692e+00 # CTO EG DC + 742 75 1 2.3822 5.237427e+00 1.699287e+01 6.637512e+00 # CTO EG DC + 743 75 2 1.5019 4.451690e+00 1.510545e+01 7.972909e+00 # OHG EG DC + 744 75 3 0.0400 5.154827e+00 1.691360e+01 8.780290e+00 # H1O EG + 745 75 3 0.0400 6.404538e+00 1.587743e+01 8.051107e+00 # H1O EG + 746 75 3 0.0400 5.465097e+00 1.632228e+01 5.808915e+00 # H1O EG + 747 75 2 1.5019 6.168234e+00 1.813043e+01 6.616296e+00 # OHG EG DC + 748 75 3 0.0400 4.215387e+00 1.735845e+01 6.538098e+00 # H1O EG + 749 75 4 0.3750 4.547131e+00 1.461212e+01 8.837501e+00 # HOG EG + 750 75 4 0.3750 6.072793e+00 1.862376e+01 5.751704e+00 # HOG EG + 751 76 1 2.3822 1.079566e+01 1.147955e+01 1.694375e+01 # CTO EG DC + 752 76 1 2.3822 1.099249e+01 9.973367e+00 1.699905e+01 # CTO EG DC + 753 76 2 1.5019 1.182949e+01 1.213960e+01 1.775396e+01 # OHG EG DC + 754 76 3 0.0400 9.810720e+00 1.173243e+01 1.733625e+01 # H1O EG + 755 76 3 0.0400 1.087265e+01 1.181888e+01 1.591078e+01 # H1O EG + 756 76 3 0.0400 1.197743e+01 9.720487e+00 1.660655e+01 # H1O EG + 757 76 2 1.5019 9.958658e+00 9.313321e+00 1.618884e+01 # OHG EG DC + 758 76 3 0.0400 1.091549e+01 9.634041e+00 1.803202e+01 # H1O EG + 759 76 4 0.3750 1.169999e+01 1.313051e+01 1.771758e+01 # HOG EG + 760 76 4 0.3750 1.008816e+01 8.322409e+00 1.622522e+01 # HOG EG + 761 77 1 2.3822 6.469661e+00 1.260777e+01 1.433139e+01 # CTO EG DC + 762 77 1 2.3822 7.390002e+00 1.246407e+01 1.553252e+01 # CTO EG DC + 763 77 2 1.5019 7.036441e+00 1.187704e+01 1.318872e+01 # OHG EG DC + 764 77 3 0.0400 6.369247e+00 1.366219e+01 1.407404e+01 # H1O EG + 765 77 3 0.0400 5.488892e+00 1.219839e+01 1.457346e+01 # H1O EG + 766 77 3 0.0400 7.490417e+00 1.140966e+01 1.578987e+01 # H1O EG + 767 77 2 1.5019 6.823223e+00 1.319480e+01 1.667519e+01 # OHG EG DC + 768 77 3 0.0400 8.370772e+00 1.287345e+01 1.529045e+01 # H1O EG + 769 77 4 0.3750 6.430953e+00 1.197158e+01 1.239850e+01 # HOG EG + 770 77 4 0.3750 7.428710e+00 1.310026e+01 1.746541e+01 # HOG EG + 771 78 1 2.3822 1.522254e+01 2.246894e+01 3.261196e+01 # CTO EG DC + 772 78 1 2.3822 1.631325e+01 2.352425e+01 3.252768e+01 # CTO EG DC + 773 78 2 1.5019 1.390921e+01 2.312533e+01 3.268411e+01 # OHG EG DC + 774 78 3 0.0400 1.537336e+01 2.186019e+01 3.350347e+01 # H1O EG + 775 78 3 0.0400 1.526230e+01 2.183315e+01 3.172750e+01 # H1O EG + 776 78 3 0.0400 1.616243e+01 2.413300e+01 3.163618e+01 # H1O EG + 777 78 2 1.5019 1.762658e+01 2.286786e+01 3.245555e+01 # OHG EG DC + 778 78 3 0.0400 1.627349e+01 2.416004e+01 3.341215e+01 # H1O EG + 779 78 4 0.3750 1.319164e+01 2.243105e+01 3.273955e+01 # HOG EG + 780 78 4 0.3750 1.834415e+01 2.356214e+01 3.240010e+01 # HOG EG + 781 79 1 2.3822 3.216260e+01 7.263919e+00 1.770989e+01 # CTO EG DC + 782 79 1 2.3822 3.100384e+01 7.816158e+00 1.689582e+01 # CTO EG DC + 783 79 2 1.5019 3.164047e+01 6.533970e+00 1.887413e+01 # OHG EG DC + 784 79 3 0.0400 3.279282e+01 8.085774e+00 1.804970e+01 # H1O EG + 785 79 3 0.0400 3.275166e+01 6.586745e+00 1.709139e+01 # H1O EG + 786 79 3 0.0400 3.037361e+01 6.994303e+00 1.655601e+01 # H1O EG + 787 79 2 1.5019 3.152596e+01 8.546107e+00 1.573158e+01 # OHG EG DC + 788 79 3 0.0400 3.041477e+01 8.493332e+00 1.751432e+01 # H1O EG + 789 79 4 0.3750 3.240282e+01 6.170655e+00 1.940970e+01 # HOG EG + 790 79 4 0.3750 3.076362e+01 8.909422e+00 1.519601e+01 # HOG EG + 791 80 1 2.3822 1.205865e+01 1.641763e+01 2.856106e+01 # CTO EG DC + 792 80 1 2.3822 1.279181e+01 1.535927e+01 2.775312e+01 # CTO EG DC + 793 80 2 1.5019 1.274847e+01 1.770801e+01 2.841985e+01 # OHG EG DC + 794 80 3 0.0400 1.204324e+01 1.612751e+01 2.961163e+01 # H1O EG + 795 80 3 0.0400 1.103607e+01 1.651095e+01 2.819540e+01 # H1O EG + 796 80 3 0.0400 1.280722e+01 1.564939e+01 2.670255e+01 # H1O EG + 797 80 2 1.5019 1.210199e+01 1.406888e+01 2.789432e+01 # OHG EG DC + 798 80 3 0.0400 1.381439e+01 1.526595e+01 2.811878e+01 # H1O EG + 799 80 4 0.3750 1.226614e+01 1.840430e+01 2.895140e+01 # HOG EG + 800 80 4 0.3750 1.258432e+01 1.337260e+01 2.736278e+01 # HOG EG + 801 81 1 2.3822 1.809572e+01 1.240404e+01 2.825877e+01 # CTO EG DC + 802 81 1 2.3822 1.798222e+01 1.326409e+01 2.701064e+01 # CTO EG DC + 803 81 2 1.5019 1.946107e+01 1.186956e+01 2.836391e+01 # OHG EG DC + 804 81 3 0.0400 1.738664e+01 1.157849e+01 2.819749e+01 # H1O EG + 805 81 3 0.0400 1.787390e+01 1.300830e+01 2.913841e+01 # H1O EG + 806 81 3 0.0400 1.869131e+01 1.408965e+01 2.707192e+01 # H1O EG + 807 81 2 1.5019 1.661688e+01 1.379857e+01 2.690550e+01 # OHG EG DC + 808 81 3 0.0400 1.820404e+01 1.265983e+01 2.613099e+01 # H1O EG + 809 81 4 0.3750 1.953573e+01 1.130375e+01 2.918505e+01 # HOG EG + 810 81 4 0.3750 1.654221e+01 1.436439e+01 2.608436e+01 # HOG EG + 811 82 1 2.3822 2.818374e+01 1.324132e+01 1.620086e+01 # CTO EG DC + 812 82 1 2.3822 2.842904e+01 1.186141e+01 1.561256e+01 # CTO EG DC + 813 82 2 1.5019 2.935425e+01 1.409545e+01 1.595331e+01 # OHG EG DC + 814 82 3 0.0400 2.801830e+01 1.315486e+01 1.727476e+01 # H1O EG + 815 82 3 0.0400 2.730511e+01 1.368539e+01 1.573300e+01 # H1O EG + 816 82 3 0.0400 2.859448e+01 1.194788e+01 1.453866e+01 # H1O EG + 817 82 2 1.5019 2.725854e+01 1.100729e+01 1.586011e+01 # OHG EG DC + 818 82 3 0.0400 2.930768e+01 1.141735e+01 1.608043e+01 # H1O EG + 819 82 4 0.3750 2.919287e+01 1.500328e+01 1.634035e+01 # HOG EG + 820 82 4 0.3750 2.741992e+01 1.009946e+01 1.547307e+01 # HOG EG + 821 83 1 2.3822 2.623685e+01 3.190216e+01 7.583500e+00 # CTO EG DC + 822 83 1 2.3822 2.484462e+01 3.204560e+01 8.176395e+00 # CTO EG DC + 823 83 2 1.5019 2.677804e+01 3.057671e+01 7.916979e+00 # OHG EG DC + 824 83 3 0.0400 2.688831e+01 3.267376e+01 7.993776e+00 # H1O EG + 825 83 3 0.0400 2.618390e+01 3.201036e+01 6.500177e+00 # H1O EG + 826 83 3 0.0400 2.419316e+01 3.127400e+01 7.766119e+00 # H1O EG + 827 83 2 1.5019 2.430344e+01 3.337105e+01 7.842915e+00 # OHG EG DC + 828 83 3 0.0400 2.489758e+01 3.193740e+01 9.259718e+00 # H1O EG + 829 83 4 0.3750 2.769398e+01 3.048234e+01 7.526916e+00 # HOG EG + 830 83 4 0.3750 2.338750e+01 3.346542e+01 8.232978e+00 # HOG EG + 831 84 1 2.3822 3.962387e+00 1.839699e+01 2.134195e+00 # CTO EG DC + 832 84 1 2.3822 4.493943e+00 1.706615e+01 2.640846e+00 # CTO EG DC + 833 84 2 1.5019 3.666307e+00 1.927394e+01 3.276212e+00 # OHG EG DC + 834 84 3 0.0400 3.051500e+00 1.822989e+01 1.559338e+00 # H1O EG + 835 84 3 0.0400 4.711095e+00 1.886956e+01 1.498411e+00 # H1O EG + 836 84 3 0.0400 5.404830e+00 1.723325e+01 3.215703e+00 # H1O EG + 837 84 2 1.5019 4.790022e+00 1.618920e+01 1.498828e+00 # OHG EG DC + 838 84 3 0.0400 3.745235e+00 1.659358e+01 3.276630e+00 # H1O EG + 839 84 4 0.3750 3.316600e+00 2.014950e+01 2.942889e+00 # HOG EG + 840 84 4 0.3750 5.139730e+00 1.531364e+01 1.832152e+00 # HOG EG + 841 85 1 2.3822 1.947348e+01 2.734410e+01 1.755703e+01 # CTO EG DC + 842 85 1 2.3822 1.808371e+01 2.673375e+01 1.763705e+01 # CTO EG DC + 843 85 2 1.5019 1.936587e+01 2.881014e+01 1.754948e+01 # OHG EG DC + 844 85 3 0.0400 1.996477e+01 2.701166e+01 1.664258e+01 # H1O EG + 845 85 3 0.0400 2.006001e+01 2.702780e+01 1.841961e+01 # H1O EG + 846 85 3 0.0400 1.759242e+01 2.706620e+01 1.855150e+01 # H1O EG + 847 85 2 1.5019 1.819131e+01 2.526771e+01 1.764460e+01 # OHG EG DC + 848 85 3 0.0400 1.749718e+01 2.705006e+01 1.677448e+01 # H1O EG + 849 85 4 0.3750 2.028019e+01 2.921169e+01 1.749683e+01 # HOG EG + 850 85 4 0.3750 1.727699e+01 2.486616e+01 1.769725e+01 # HOG EG + 851 86 1 2.3822 1.873634e+01 1.501190e+01 3.262384e+01 # CTO EG DC + 852 86 1 2.3822 1.932192e+01 1.641453e+01 3.263591e+01 # CTO EG DC + 853 86 2 1.5019 1.981097e+01 1.403339e+01 3.240345e+01 # OHG EG DC + 854 86 3 0.0400 1.800205e+01 1.493106e+01 3.182236e+01 # H1O EG + 855 86 3 0.0400 1.825327e+01 1.481106e+01 3.358009e+01 # H1O EG + 856 86 3 0.0400 2.005621e+01 1.649537e+01 3.343739e+01 # H1O EG + 857 86 2 1.5019 1.824729e+01 1.739304e+01 3.285630e+01 # OHG EG DC + 858 86 3 0.0400 1.980498e+01 1.661537e+01 3.167966e+01 # H1O EG + 859 86 4 0.3750 1.942572e+01 1.311061e+01 3.239551e+01 # HOG EG + 860 86 4 0.3750 1.863254e+01 1.831582e+01 3.286424e+01 # HOG EG + 861 87 1 2.3822 1.130642e+01 1.400763e+01 1.300529e+01 # CTO EG DC + 862 87 1 2.3822 1.227538e+01 1.417497e+01 1.416439e+01 # CTO EG DC + 863 87 2 1.5019 1.030931e+01 1.298181e+01 1.334345e+01 # OHG EG DC + 864 87 3 0.0400 1.185442e+01 1.370117e+01 1.211429e+01 # H1O EG + 865 87 3 0.0400 1.080194e+01 1.495457e+01 1.281316e+01 # H1O EG + 866 87 3 0.0400 1.172737e+01 1.448144e+01 1.505539e+01 # H1O EG + 867 87 2 1.5019 1.327249e+01 1.520080e+01 1.382623e+01 # OHG EG DC + 868 87 3 0.0400 1.277985e+01 1.322804e+01 1.435652e+01 # H1O EG + 869 87 4 0.3750 9.671835e+00 1.287172e+01 1.258088e+01 # HOG EG + 870 87 4 0.3750 1.390996e+01 1.531089e+01 1.458880e+01 # HOG EG + 871 88 1 2.3822 6.105257e+00 2.806366e+01 4.834774e+00 # CTO EG DC + 872 88 1 2.3822 7.523959e+00 2.753859e+01 4.983078e+00 # CTO EG DC + 873 88 2 1.5019 6.141795e+00 2.951097e+01 4.580126e+00 # OHG EG DC + 874 88 3 0.0400 5.548116e+00 2.787051e+01 5.751502e+00 # H1O EG + 875 88 3 0.0400 5.616501e+00 2.756068e+01 4.000368e+00 # H1O EG + 876 88 3 0.0400 8.081100e+00 2.773174e+01 4.066351e+00 # H1O EG + 877 88 2 1.5019 7.487421e+00 2.609128e+01 5.237727e+00 # OHG EG DC + 878 88 3 0.0400 8.012714e+00 2.804157e+01 5.817484e+00 # H1O EG + 879 88 4 0.3750 5.208438e+00 2.985640e+01 4.482558e+00 # HOG EG + 880 88 4 0.3750 8.420778e+00 2.574584e+01 5.335295e+00 # HOG EG + 881 89 1 2.3822 2.044060e+01 3.585160e+00 2.370644e+01 # CTO EG DC + 882 89 1 2.3822 1.938858e+01 4.244634e+00 2.282965e+01 # CTO EG DC + 883 89 2 1.5019 2.176054e+01 4.156841e+00 2.340337e+01 # OHG EG DC + 884 89 3 0.0400 2.045630e+01 2.512795e+00 2.351179e+01 # H1O EG + 885 89 3 0.0400 2.020165e+01 3.760043e+00 2.475545e+01 # H1O EG + 886 89 3 0.0400 1.937289e+01 5.317000e+00 2.302429e+01 # H1O EG + 887 89 2 1.5019 1.806865e+01 3.672954e+00 2.313272e+01 # OHG EG DC + 888 89 3 0.0400 1.962753e+01 4.069752e+00 2.178064e+01 # H1O EG + 889 89 4 0.3750 2.245265e+01 3.722977e+00 2.398020e+01 # HOG EG + 890 89 4 0.3750 1.737653e+01 4.106818e+00 2.255589e+01 # HOG EG + 891 90 1 2.3822 8.821564e+00 1.657551e+01 4.616353e+00 # CTO EG DC + 892 90 1 2.3822 9.670957e+00 1.643570e+01 3.363603e+00 # CTO EG DC + 893 90 2 1.5019 9.562335e+00 1.734225e+01 5.628417e+00 # OHG EG DC + 894 90 3 0.0400 8.587955e+00 1.558623e+01 5.009840e+00 # H1O EG + 895 90 3 0.0400 7.895924e+00 1.709668e+01 4.372053e+00 # H1O EG + 896 90 3 0.0400 9.904566e+00 1.742499e+01 2.970115e+00 # H1O EG + 897 90 2 1.5019 8.930187e+00 1.566896e+01 2.351539e+00 # OHG EG DC + 898 90 3 0.0400 1.059660e+01 1.591454e+01 3.607903e+00 # H1O EG + 899 90 4 0.3750 9.003523e+00 1.743424e+01 6.452594e+00 # HOG EG + 900 90 4 0.3750 9.488998e+00 1.557698e+01 1.527361e+00 # HOG EG + 901 91 1 2.3822 1.587098e+01 2.197566e+01 2.811893e+01 # CTO EG DC + 902 91 1 2.3822 1.458492e+01 2.273374e+01 2.840489e+01 # CTO EG DC + 903 91 2 1.5019 1.555819e+01 2.073257e+01 2.739936e+01 # OHG EG DC + 904 91 3 0.0400 1.636845e+01 2.173560e+01 2.905861e+01 # H1O EG + 905 91 3 0.0400 1.652900e+01 2.259308e+01 2.750745e+01 # H1O EG + 906 91 3 0.0400 1.408746e+01 2.297380e+01 2.746521e+01 # H1O EG + 907 91 2 1.5019 1.489772e+01 2.397683e+01 2.912445e+01 # OHG EG DC + 908 91 3 0.0400 1.392691e+01 2.211632e+01 2.901636e+01 # H1O EG + 909 91 4 0.3750 1.640428e+01 2.023383e+01 2.721123e+01 # HOG EG + 910 91 4 0.3750 1.405163e+01 2.447557e+01 2.931258e+01 # HOG EG + 911 92 1 2.3822 3.537644e+00 1.806694e+01 1.873344e+01 # CTO EG DC + 912 92 1 2.3822 2.419906e+00 1.751482e+01 1.960305e+01 # CTO EG DC + 913 92 2 1.5019 3.285395e+00 1.948785e+01 1.845366e+01 # OHG EG DC + 914 92 3 0.0400 3.575736e+00 1.751360e+01 1.779510e+01 # H1O EG + 915 92 3 0.0400 4.489268e+00 1.796317e+01 1.925472e+01 # H1O EG + 916 92 3 0.0400 2.381815e+00 1.806817e+01 2.054138e+01 # H1O EG + 917 92 2 1.5019 2.672155e+00 1.609391e+01 1.988282e+01 # OHG EG DC + 918 92 3 0.0400 1.468282e+00 1.761860e+01 1.908176e+01 # H1O EG + 919 92 4 0.3750 4.020749e+00 1.985109e+01 1.788155e+01 # HOG EG + 920 92 4 0.3750 1.936801e+00 1.573067e+01 2.045493e+01 # HOG EG + 921 93 1 2.3822 3.024618e+01 1.158991e+01 3.250554e+01 # CTO EG DC + 922 93 1 2.3822 3.170329e+01 1.143044e+01 3.210330e+01 # CTO EG DC + 923 93 2 1.5019 2.957432e+01 1.028389e+01 3.244378e+01 # OHG EG DC + 924 93 3 0.0400 2.975430e+01 1.228356e+01 3.182363e+01 # H1O EG + 925 93 3 0.0400 3.018986e+01 1.197919e+01 3.352210e+01 # H1O EG + 926 93 3 0.0400 3.219517e+01 1.073678e+01 3.278521e+01 # H1O EG + 927 93 2 1.5019 3.237515e+01 1.273646e+01 3.216506e+01 # OHG EG DC + 928 93 3 0.0400 3.175962e+01 1.104116e+01 3.108674e+01 # H1O EG + 929 93 4 0.3750 2.861570e+01 1.038880e+01 3.270841e+01 # HOG EG + 930 93 4 0.3750 3.333378e+01 1.263154e+01 3.190043e+01 # HOG EG + 931 94 1 2.3822 1.595048e+01 1.353466e+01 9.126718e+00 # CTO EG DC + 932 94 1 2.3822 1.484860e+01 1.454424e+01 9.404222e+00 # CTO EG DC + 933 94 2 1.5019 1.535202e+01 1.225024e+01 8.735528e+00 # OHG EG DC + 934 94 3 0.0400 1.655172e+01 1.339609e+01 1.002527e+01 # H1O EG + 935 94 3 0.0400 1.658426e+01 1.390062e+01 8.318950e+00 # H1O EG + 936 94 3 0.0400 1.424735e+01 1.468281e+01 8.505669e+00 # H1O EG + 937 94 2 1.5019 1.544705e+01 1.582866e+01 9.795411e+00 # OHG EG DC + 938 94 3 0.0400 1.421481e+01 1.417828e+01 1.021199e+01 # H1O EG + 939 94 4 0.3750 1.607694e+01 1.158604e+01 8.552960e+00 # HOG EG + 940 94 4 0.3750 1.472213e+01 1.649285e+01 9.977980e+00 # HOG EG + 941 95 1 2.3822 2.000964e+01 1.474615e+01 1.868024e+01 # CTO EG DC + 942 95 1 2.3822 2.107958e+01 1.581086e+01 1.885915e+01 # CTO EG DC + 943 95 2 1.5019 1.875454e+01 1.537916e+01 1.825021e+01 # OHG EG DC + 944 95 3 0.0400 1.984952e+01 1.422868e+01 1.962611e+01 # H1O EG + 945 95 3 0.0400 2.033207e+01 1.402966e+01 1.792474e+01 # H1O EG + 946 95 3 0.0400 2.123971e+01 1.632834e+01 1.791327e+01 # H1O EG + 947 95 2 1.5019 2.233469e+01 1.517786e+01 1.928917e+01 # OHG EG DC + 948 95 3 0.0400 2.075716e+01 1.652736e+01 1.961465e+01 # H1O EG + 949 95 4 0.3750 1.805063e+01 1.467869e+01 1.813251e+01 # HOG EG + 950 95 4 0.3750 2.303860e+01 1.587833e+01 1.940688e+01 # HOG EG + 951 96 1 2.3822 2.682396e+00 2.533274e+01 1.792597e+01 # CTO EG DC + 952 96 1 2.3822 4.138616e+00 2.512666e+01 1.830983e+01 # CTO EG DC + 953 96 2 1.5019 2.458272e+00 2.482960e+01 1.656306e+01 # OHG EG DC + 954 96 3 0.0400 2.442872e+00 2.639541e+01 1.796438e+01 # H1O EG + 955 96 3 0.0400 2.042362e+00 2.479115e+01 1.862248e+01 # H1O EG + 956 96 3 0.0400 4.378140e+00 2.406400e+01 1.827142e+01 # H1O EG + 957 96 2 1.5019 4.362741e+00 2.562981e+01 1.967274e+01 # OHG EG DC + 958 96 3 0.0400 4.778651e+00 2.566825e+01 1.761331e+01 # H1O EG + 959 96 4 0.3750 1.500232e+00 2.496518e+01 1.631052e+01 # HOG EG + 960 96 4 0.3750 5.320780e+00 2.549423e+01 1.992528e+01 # HOG EG + 961 97 1 2.3822 9.658443e+00 2.559798e+00 5.540408e+00 # CTO EG DC + 962 97 1 2.3822 9.641414e+00 2.789843e+00 4.038013e+00 # CTO EG DC + 963 97 2 1.5019 1.095313e+01 2.989699e+00 6.088005e+00 # OHG EG DC + 964 97 3 0.0400 9.510638e+00 1.499990e+00 5.747919e+00 # H1O EG + 965 97 3 0.0400 8.858468e+00 3.135634e+00 6.005760e+00 # H1O EG + 966 97 3 0.0400 9.789219e+00 3.849651e+00 3.830502e+00 # H1O EG + 967 97 2 1.5019 8.346724e+00 2.359942e+00 3.490416e+00 # OHG EG DC + 968 97 3 0.0400 1.044139e+01 2.214007e+00 3.572662e+00 # H1O EG + 969 97 4 0.3750 1.096434e+01 2.838353e+00 7.076423e+00 # HOG EG + 970 97 4 0.3750 8.335521e+00 2.511288e+00 2.501998e+00 # HOG EG + 971 98 1 2.3822 2.138614e+01 2.776954e+01 1.286451e+01 # CTO EG DC + 972 98 1 2.3822 2.168725e+01 2.656901e+01 1.374682e+01 # CTO EG DC + 973 98 2 1.5019 2.264637e+01 2.840601e+01 1.245510e+01 # OHG EG DC + 974 98 3 0.0400 2.078119e+01 2.848646e+01 1.341963e+01 # H1O EG + 975 98 3 0.0400 2.084039e+01 2.744280e+01 1.197936e+01 # H1O EG + 976 98 3 0.0400 2.229219e+01 2.585209e+01 1.319170e+01 # H1O EG + 977 98 2 1.5019 2.042702e+01 2.593254e+01 1.415623e+01 # OHG EG DC + 978 98 3 0.0400 2.223300e+01 2.689576e+01 1.463198e+01 # H1O EG + 979 98 4 0.3750 2.244827e+01 2.919583e+01 1.187463e+01 # HOG EG + 980 98 4 0.3750 2.062512e+01 2.514272e+01 1.473670e+01 # HOG EG + 981 99 1 2.3822 1.724495e+01 5.613521e+00 3.023445e+01 # CTO EG DC + 982 99 1 2.3822 1.816877e+01 4.480733e+00 2.981762e+01 # CTO EG DC + 983 99 2 1.5019 1.804469e+01 6.736264e+00 3.074509e+01 # OHG EG DC + 984 99 3 0.0400 1.657007e+01 5.263876e+00 3.101573e+01 # H1O EG + 985 99 3 0.0400 1.666340e+01 5.944136e+00 2.937388e+01 # H1O EG + 986 99 3 0.0400 1.884364e+01 4.830377e+00 2.903635e+01 # H1O EG + 987 99 2 1.5019 1.736902e+01 3.357989e+00 2.930698e+01 # OHG EG DC + 988 99 3 0.0400 1.875032e+01 4.150118e+00 3.067820e+01 # H1O EG + 989 99 4 0.3750 1.743692e+01 7.481520e+00 3.101932e+01 # HOG EG + 990 99 4 0.3750 1.797680e+01 2.612734e+00 2.903275e+01 # HOG EG + 991 100 1 2.3822 1.388374e+01 1.096813e+01 1.173775e+01 # CTO EG DC + 992 100 1 2.3822 1.242842e+01 1.073172e+01 1.136821e+01 # CTO EG DC + 993 100 2 1.5019 1.425340e+01 1.009346e+01 1.285989e+01 # OHG EG DC + 994 100 3 0.0400 1.402061e+01 1.200952e+01 1.202910e+01 # H1O EG + 995 100 3 0.0400 1.451787e+01 1.074509e+01 1.087971e+01 # H1O EG + 996 100 3 0.0400 1.229156e+01 9.690333e+00 1.107687e+01 # H1O EG + 997 100 2 1.5019 1.205876e+01 1.160639e+01 1.024607e+01 # OHG EG DC + 998 100 3 0.0400 1.179430e+01 1.095476e+01 1.222626e+01 # H1O EG + 999 100 4 0.3750 1.521085e+01 1.024899e+01 1.310301e+01 # HOG EG + 1000 100 4 0.3750 1.110132e+01 1.145086e+01 1.000296e+01 # HOG EG + 1001 101 1 2.3822 9.334212e+00 2.317020e+01 1.003254e+01 # CTO EG DC + 1002 101 1 2.3822 1.014005e+01 2.445892e+01 1.001733e+01 # CTO EG DC + 1003 101 2 1.5019 1.024319e+01 2.202484e+01 1.018354e+01 # OHG EG DC + 1004 101 3 0.0400 8.782717e+00 2.307486e+01 9.097198e+00 # H1O EG + 1005 101 3 0.0400 8.633011e+00 2.318936e+01 1.086684e+01 # H1O EG + 1006 101 3 0.0400 1.069154e+01 2.455426e+01 1.095267e+01 # H1O EG + 1007 101 2 1.5019 9.231063e+00 2.560428e+01 9.866322e+00 # OHG EG DC + 1008 101 3 0.0400 1.084125e+01 2.443976e+01 9.183030e+00 # H1O EG + 1009 101 4 0.3750 9.713040e+00 2.117699e+01 1.019355e+01 # HOG EG + 1010 101 4 0.3750 9.761217e+00 2.645212e+01 9.856314e+00 # HOG EG + 1011 102 1 2.3822 7.053456e+00 2.318247e+01 2.926452e+01 # CTO EG DC + 1012 102 1 2.3822 8.384117e+00 2.387059e+01 2.900717e+01 # CTO EG DC + 1013 102 2 1.5019 5.955811e+00 2.405936e+01 2.883192e+01 # OHG EG DC + 1014 102 3 0.0400 6.952196e+00 2.297281e+01 3.032936e+01 # H1O EG + 1015 102 3 0.0400 7.013038e+00 2.224776e+01 2.870525e+01 # H1O EG + 1016 102 3 0.0400 8.485377e+00 2.408024e+01 2.794232e+01 # H1O EG + 1017 102 2 1.5019 9.481762e+00 2.299370e+01 2.943976e+01 # OHG EG DC + 1018 102 3 0.0400 8.424535e+00 2.480530e+01 2.956643e+01 # H1O EG + 1019 102 4 0.3750 5.080376e+00 2.360665e+01 2.900123e+01 # HOG EG + 1020 102 4 0.3750 1.035720e+01 2.344641e+01 2.927045e+01 # HOG EG + 1021 103 1 2.3822 6.455351e+00 2.339605e+01 2.392545e+01 # CTO EG DC + 1022 103 1 2.3822 7.183510e+00 2.392056e+01 2.515226e+01 # CTO EG DC + 1023 103 2 1.5019 6.061650e+00 2.199752e+01 2.414908e+01 # OHG EG DC + 1024 103 3 0.0400 7.114264e+00 2.345338e+01 2.305905e+01 # H1O EG + 1025 103 3 0.0400 5.565458e+00 2.399907e+01 2.374502e+01 # H1O EG + 1026 103 3 0.0400 6.524597e+00 2.386323e+01 2.601866e+01 # H1O EG + 1027 103 2 1.5019 7.577212e+00 2.531909e+01 2.492864e+01 # OHG EG DC + 1028 103 3 0.0400 8.073404e+00 2.331753e+01 2.533269e+01 # H1O EG + 1029 103 4 0.3750 5.582597e+00 2.165245e+01 2.334196e+01 # HOG EG + 1030 103 4 0.3750 8.056264e+00 2.566415e+01 2.573575e+01 # HOG EG + 1031 104 1 2.3822 1.418232e+01 2.870875e+01 8.462066e+00 # CTO EG DC + 1032 104 1 2.3822 1.457969e+01 2.954648e+01 9.666518e+00 # CTO EG DC + 1033 104 2 1.5019 1.314259e+01 2.774672e+01 8.854958e+00 # OHG EG DC + 1034 104 3 0.0400 1.505369e+01 2.816960e+01 8.090404e+00 # H1O EG + 1035 104 3 0.0400 1.379654e+01 2.935964e+01 7.677454e+00 # H1O EG + 1036 104 3 0.0400 1.370832e+01 3.008562e+01 1.003818e+01 # H1O EG + 1037 104 2 1.5019 1.561942e+01 3.050851e+01 9.273625e+00 # OHG EG DC + 1038 104 3 0.0400 1.496547e+01 2.889559e+01 1.045113e+01 # H1O EG + 1039 104 4 0.3750 1.288117e+01 2.719558e+01 8.062556e+00 # HOG EG + 1040 104 4 0.3750 1.588084e+01 3.105965e+01 1.006603e+01 # HOG EG + 1041 105 1 2.3822 1.599699e+01 2.540311e+01 2.357132e+00 # CTO EG DC + 1042 105 1 2.3822 1.635747e+01 2.687742e+01 2.440016e+00 # CTO EG DC + 1043 105 2 1.5019 1.719439e+01 2.462391e+01 2.010760e+00 # OHG EG DC + 1044 105 3 0.0400 1.523517e+01 2.525731e+01 1.591320e+00 # H1O EG + 1045 105 3 0.0400 1.561208e+01 2.506796e+01 3.320257e+00 # H1O EG + 1046 105 3 0.0400 1.711929e+01 2.702323e+01 3.205828e+00 # H1O EG + 1047 105 2 1.5019 1.516007e+01 2.765663e+01 2.786388e+00 # OHG EG DC + 1048 105 3 0.0400 1.674238e+01 2.721258e+01 1.476890e+00 # H1O EG + 1049 105 4 0.3750 1.695724e+01 2.365397e+01 1.956231e+00 # HOG EG + 1050 105 4 0.3750 1.539722e+01 2.862657e+01 2.840916e+00 # HOG EG + 1051 106 1 2.3822 2.429763e+01 7.222466e+00 2.256917e+01 # CTO EG DC + 1052 106 1 2.3822 2.314907e+01 7.377625e+00 2.158575e+01 # CTO EG DC + 1053 106 2 1.5019 2.540258e+01 8.109140e+00 2.217700e+01 # OHG EG DC + 1054 106 3 0.0400 2.464306e+01 6.188656e+00 2.256500e+01 # H1O EG + 1055 106 3 0.0400 2.395770e+01 7.487387e+00 2.357035e+01 # H1O EG + 1056 106 3 0.0400 2.280364e+01 8.411436e+00 2.158992e+01 # H1O EG + 1057 106 2 1.5019 2.204412e+01 6.490952e+00 2.197792e+01 # OHG EG DC + 1058 106 3 0.0400 2.348899e+01 7.112704e+00 2.058457e+01 # H1O EG + 1059 106 4 0.3750 2.615821e+01 8.007061e+00 2.282399e+01 # HOG EG + 1060 106 4 0.3750 2.128848e+01 6.593030e+00 2.133093e+01 # HOG EG + 1061 107 1 2.3822 2.922158e+01 2.741798e+01 1.816954e+01 # CTO EG DC + 1062 107 1 2.3822 2.883587e+01 2.615669e+01 1.741403e+01 # CTO EG DC + 1063 107 2 1.5019 2.833090e+01 2.851854e+01 1.777413e+01 # OHG EG DC + 1064 107 3 0.0400 3.025226e+01 2.768268e+01 1.793347e+01 # H1O EG + 1065 107 3 0.0400 2.912832e+01 2.724297e+01 1.924135e+01 # H1O EG + 1066 107 3 0.0400 2.780519e+01 2.589199e+01 1.765010e+01 # H1O EG + 1067 107 2 1.5019 2.972655e+01 2.505613e+01 1.780944e+01 # OHG EG DC + 1068 107 3 0.0400 2.892913e+01 2.633170e+01 1.634222e+01 # H1O EG + 1069 107 4 0.3750 2.858465e+01 2.934834e+01 1.827118e+01 # HOG EG + 1070 107 4 0.3750 2.947280e+01 2.422633e+01 1.731239e+01 # HOG EG + 1071 108 1 2.3822 8.426601e+00 3.061934e+01 1.199490e+01 # CTO EG DC + 1072 108 1 2.3822 9.471638e+00 3.140507e+01 1.277009e+01 # CTO EG DC + 1073 108 2 1.5019 8.449553e+00 2.921418e+01 1.242607e+01 # OHG EG DC + 1074 108 3 0.0400 8.646166e+00 3.067533e+01 1.092872e+01 # H1O EG + 1075 108 3 0.0400 7.439552e+00 3.104102e+01 1.218470e+01 # H1O EG + 1076 108 3 0.0400 9.252073e+00 3.134908e+01 1.383628e+01 # H1O EG + 1077 108 2 1.5019 9.448687e+00 3.281023e+01 1.233893e+01 # OHG EG DC + 1078 108 3 0.0400 1.045869e+01 3.098340e+01 1.258030e+01 # H1O EG + 1079 108 4 0.3750 7.762028e+00 2.869725e+01 1.191607e+01 # HOG EG + 1080 108 4 0.3750 1.013621e+01 3.332716e+01 1.284892e+01 # HOG EG + 1081 109 1 2.3822 3.170171e+01 1.475843e+01 9.929766e+00 # CTO EG DC + 1082 109 1 2.3822 3.229871e+01 1.586400e+01 9.074370e+00 # CTO EG DC + 1083 109 2 1.5019 3.129900e+01 1.530881e+01 1.123200e+01 # OHG EG DC + 1084 109 3 0.0400 3.244377e+01 1.397449e+01 1.008101e+01 # H1O EG + 1085 109 3 0.0400 3.082951e+01 1.434033e+01 9.427198e+00 # H1O EG + 1086 109 3 0.0400 3.155665e+01 1.664794e+01 8.923124e+00 # H1O EG + 1087 109 2 1.5019 3.270142e+01 1.531362e+01 7.772137e+00 # OHG EG DC + 1088 109 3 0.0400 3.317090e+01 1.628210e+01 9.576938e+00 # H1O EG + 1089 109 4 0.3750 3.090623e+01 1.458147e+01 1.179476e+01 # HOG EG + 1090 109 4 0.3750 3.309419e+01 1.604096e+01 7.209377e+00 # HOG EG + 1091 110 1 2.3822 2.017194e+01 1.591076e+01 8.251053e+00 # CTO EG DC + 1092 110 1 2.3822 1.874902e+01 1.634445e+01 7.938588e+00 # CTO EG DC + 1093 110 2 1.5019 2.066603e+01 1.665375e+01 9.419274e+00 # OHG EG DC + 1094 110 3 0.0400 2.081179e+01 1.611662e+01 7.392965e+00 # H1O EG + 1095 110 3 0.0400 2.018755e+01 1.484254e+01 8.467298e+00 # H1O EG + 1096 110 3 0.0400 1.810918e+01 1.613859e+01 8.796677e+00 # H1O EG + 1097 110 2 1.5019 1.825493e+01 1.560145e+01 6.770368e+00 # OHG EG DC + 1098 110 3 0.0400 1.873341e+01 1.741267e+01 7.722344e+00 # H1O EG + 1099 110 4 0.3750 2.160216e+01 1.636844e+01 9.624843e+00 # HOG EG + 1100 110 4 0.3750 1.731880e+01 1.588677e+01 6.564799e+00 # HOG EG + 1101 111 1 2.3822 1.832459e+01 2.748857e+01 9.271348e+00 # CTO EG DC + 1102 111 1 2.3822 1.803445e+01 2.633327e+01 8.327160e+00 # CTO EG DC + 1103 111 2 1.5019 1.923529e+01 2.843957e+01 8.617803e+00 # OHG EG DC + 1104 111 3 0.0400 1.878946e+01 2.710744e+01 1.018060e+01 # H1O EG + 1105 111 3 0.0400 1.739280e+01 2.799420e+01 9.524743e+00 # H1O EG + 1106 111 3 0.0400 1.756959e+01 2.671440e+01 7.417911e+00 # H1O EG + 1107 111 2 1.5019 1.712375e+01 2.538227e+01 8.980705e+00 # OHG EG DC + 1108 111 3 0.0400 1.896624e+01 2.582765e+01 8.073765e+00 # H1O EG + 1109 111 4 0.3750 1.942618e+01 2.919964e+01 9.238979e+00 # HOG EG + 1110 111 4 0.3750 1.693287e+01 2.462220e+01 8.359529e+00 # HOG EG + 1111 112 1 2.3822 8.107982e+00 1.658484e+01 1.766709e+01 # CTO EG DC + 1112 112 1 2.3822 9.312475e+00 1.566428e+01 1.755682e+01 # CTO EG DC + 1113 112 2 1.5019 6.873941e+00 1.579075e+01 1.758072e+01 # OHG EG DC + 1114 112 3 0.0400 8.129612e+00 1.731123e+01 1.685470e+01 # H1O EG + 1115 112 3 0.0400 8.136416e+00 1.710834e+01 1.862273e+01 # H1O EG + 1116 112 3 0.0400 9.290846e+00 1.493789e+01 1.836922e+01 # H1O EG + 1117 112 2 1.5019 1.054652e+01 1.645837e+01 1.764320e+01 # OHG EG DC + 1118 112 3 0.0400 9.284041e+00 1.514077e+01 1.660119e+01 # H1O EG + 1119 112 4 0.3750 6.081511e+00 1.639638e+01 1.765327e+01 # HOG EG + 1120 112 4 0.3750 1.133895e+01 1.585273e+01 1.757065e+01 # HOG EG + 1121 113 1 2.3822 2.626484e+01 3.622290e+00 2.453327e+01 # CTO EG DC + 1122 113 1 2.3822 2.540079e+01 2.394234e+00 2.429726e+01 # CTO EG DC + 1123 113 2 1.5019 2.729126e+01 3.709007e+00 2.348453e+01 # OHG EG DC + 1124 113 3 0.0400 2.674729e+01 3.545921e+00 2.550769e+01 # H1O EG + 1125 113 3 0.0400 2.564180e+01 4.516253e+00 2.450596e+01 # H1O EG + 1126 113 3 0.0400 2.491834e+01 2.470603e+00 2.332283e+01 # H1O EG + 1127 113 2 1.5019 2.437438e+01 2.307517e+00 2.534599e+01 # OHG EG DC + 1128 113 3 0.0400 2.602384e+01 1.500271e+00 2.432457e+01 # H1O EG + 1129 113 4 0.3750 2.785971e+01 4.516939e+00 2.363980e+01 # HOG EG + 1130 113 4 0.3750 2.380592e+01 1.499585e+00 2.519072e+01 # HOG EG + 1131 114 1 2.3822 2.337655e+01 2.926713e+01 5.190513e+00 # CTO EG DC + 1132 114 1 2.3822 2.399194e+01 3.025781e+01 4.215700e+00 # CTO EG DC + 1133 114 2 1.5019 2.433664e+01 2.897471e+01 6.264571e+00 # OHG EG DC + 1134 114 3 0.0400 2.312872e+01 2.834520e+01 4.664471e+00 # H1O EG + 1135 114 3 0.0400 2.247053e+01 2.969447e+01 5.620180e+00 # H1O EG + 1136 114 3 0.0400 2.423976e+01 3.117974e+01 4.741741e+00 # H1O EG + 1137 114 2 1.5019 2.303184e+01 3.055023e+01 3.141642e+00 # OHG EG DC + 1138 114 3 0.0400 2.489796e+01 2.983047e+01 3.786033e+00 # H1O EG + 1139 114 4 0.3750 2.393178e+01 2.832296e+01 6.905895e+00 # HOG EG + 1140 114 4 0.3750 2.343670e+01 3.120198e+01 2.500317e+00 # HOG EG + 1141 115 1 2.3822 2.826397e+01 2.677163e+01 3.259668e+01 # CTO EG DC + 1142 115 1 2.3822 2.968186e+01 2.622450e+01 3.257133e+01 # CTO EG DC + 1143 115 2 1.5019 2.731675e+01 2.566980e+01 3.281946e+01 # OHG EG DC + 1144 115 3 0.0400 2.804275e+01 2.725328e+01 3.164422e+01 # H1O EG + 1145 115 3 0.0400 2.816934e+01 2.749989e+01 3.340214e+01 # H1O EG + 1146 115 3 0.0400 2.990309e+01 2.574285e+01 3.352378e+01 # H1O EG + 1147 115 2 1.5019 3.062909e+01 2.732633e+01 3.234854e+01 # OHG EG DC + 1148 115 3 0.0400 2.977649e+01 2.549623e+01 3.176586e+01 # H1O EG + 1149 115 4 0.3750 2.638393e+01 2.602975e+01 3.283614e+01 # HOG EG + 1150 115 4 0.3750 3.156191e+01 2.696637e+01 3.233186e+01 # HOG EG + 1151 116 1 2.3822 2.490587e+01 4.091402e+00 7.678645e+00 # CTO EG DC + 1152 116 1 2.3822 2.538793e+01 3.772153e+00 6.272908e+00 # CTO EG DC + 1153 116 2 1.5019 2.552312e+01 5.344581e+00 8.136295e+00 # OHG EG DC + 1154 116 3 0.0400 2.518645e+01 3.281640e+00 8.352188e+00 # H1O EG + 1155 116 3 0.0400 2.382142e+01 4.201197e+00 7.675250e+00 # H1O EG + 1156 116 3 0.0400 2.510735e+01 4.581916e+00 5.599366e+00 # H1O EG + 1157 116 2 1.5019 2.477068e+01 2.518975e+00 5.815258e+00 # OHG EG DC + 1158 116 3 0.0400 2.647238e+01 3.662359e+00 6.276304e+00 # H1O EG + 1159 116 4 0.3750 2.520597e+01 5.554613e+00 9.061122e+00 # HOG EG + 1160 116 4 0.3750 2.508782e+01 2.308943e+00 4.890431e+00 # HOG EG + 1161 117 1 2.3822 2.407285e+01 3.530781e+00 3.186415e+01 # CTO EG DC + 1162 117 1 2.3822 2.516548e+01 4.587378e+00 3.187662e+01 # CTO EG DC + 1163 117 2 1.5019 2.468315e+01 2.194334e+00 3.181572e+01 # OHG EG DC + 1164 117 3 0.0400 2.343968e+01 3.672454e+00 3.098829e+01 # H1O EG + 1165 117 3 0.0400 2.346884e+01 3.621312e+00 3.276696e+01 # H1O EG + 1166 117 3 0.0400 2.579865e+01 4.445705e+00 3.275248e+01 # H1O EG + 1167 117 2 1.5019 2.455518e+01 5.923825e+00 3.192505e+01 # OHG EG DC + 1168 117 3 0.0400 2.576949e+01 4.496847e+00 3.097380e+01 # H1O EG + 1169 117 4 0.3750 2.396431e+01 1.499204e+00 3.180751e+01 # HOG EG + 1170 117 4 0.3750 2.527402e+01 6.618955e+00 3.193325e+01 # HOG EG + 1171 118 1 2.3822 1.918395e+01 2.195971e+00 6.490559e+00 # CTO EG DC + 1172 118 1 2.3822 1.982754e+01 3.530842e+00 6.152453e+00 # CTO EG DC + 1173 118 2 1.5019 1.774330e+01 2.387685e+00 6.711157e+00 # OHG EG DC + 1174 118 3 0.0400 1.963877e+01 1.791395e+00 7.394747e+00 # H1O EG + 1175 118 3 0.0400 1.933520e+01 1.499790e+00 5.665600e+00 # H1O EG + 1176 118 3 0.0400 1.937272e+01 3.935418e+00 5.248266e+00 # H1O EG + 1177 118 2 1.5019 2.126819e+01 3.339129e+00 5.931855e+00 # OHG EG DC + 1178 118 3 0.0400 1.967630e+01 4.227024e+00 6.977412e+00 # H1O EG + 1179 118 4 0.3750 1.731989e+01 1.509480e+00 6.933595e+00 # HOG EG + 1180 118 4 0.3750 2.169161e+01 4.217333e+00 5.709417e+00 # HOG EG + 1181 119 1 2.3822 3.275497e+01 7.049156e+00 3.037195e+01 # CTO EG DC + 1182 119 1 2.3822 3.242372e+01 6.442099e+00 3.172552e+01 # CTO EG DC + 1183 119 2 1.5019 3.328377e+01 6.005320e+00 2.948218e+01 # OHG EG DC + 1184 119 3 0.0400 3.350297e+01 7.831999e+00 3.049751e+01 # H1O EG + 1185 119 3 0.0400 3.185276e+01 7.476255e+00 2.993412e+01 # H1O EG + 1186 119 3 0.0400 3.167573e+01 5.659257e+00 3.159996e+01 # H1O EG + 1187 119 2 1.5019 3.189493e+01 7.485935e+00 3.261529e+01 # OHG EG DC + 1188 119 3 0.0400 3.332594e+01 6.015000e+00 3.216335e+01 # H1O EG + 1189 119 4 0.3750 3.350170e+01 6.404699e+00 2.859168e+01 # HOG EG + 1190 119 4 0.3750 3.167700e+01 7.086556e+00 3.350579e+01 # HOG EG + 1191 120 1 2.3822 2.765003e+01 1.985009e+01 8.092958e+00 # CTO EG DC + 1192 120 1 2.3822 2.860173e+01 1.870304e+01 7.794723e+00 # CTO EG DC + 1193 120 2 1.5019 2.763000e+01 2.010745e+01 9.540116e+00 # OHG EG DC + 1194 120 3 0.0400 2.664688e+01 1.958721e+01 7.757276e+00 # H1O EG + 1195 120 3 0.0400 2.798460e+01 2.074587e+01 7.569745e+00 # H1O EG + 1196 120 3 0.0400 2.960488e+01 1.896592e+01 8.130405e+00 # H1O EG + 1197 120 2 1.5019 2.862176e+01 1.844569e+01 6.347565e+00 # OHG EG DC + 1198 120 3 0.0400 2.826716e+01 1.780727e+01 8.317936e+00 # H1O EG + 1199 120 4 0.3750 2.700388e+01 2.086209e+01 9.736323e+00 # HOG EG + 1200 120 4 0.3750 2.924788e+01 1.769105e+01 6.151358e+00 # HOG EG + 1201 121 1 2.3822 3.154823e+01 1.045807e+01 9.599596e+00 # CTO EG DC + 1202 121 1 2.3822 3.018821e+01 1.090557e+01 1.010998e+01 # CTO EG DC + 1203 121 2 1.5019 3.137160e+01 9.395670e+00 8.599089e+00 # OHG EG DC + 1204 121 3 0.0400 3.214197e+01 1.007833e+01 1.043108e+01 # H1O EG + 1205 121 3 0.0400 3.206212e+01 1.130421e+01 9.143461e+00 # H1O EG + 1206 121 3 0.0400 2.959447e+01 1.128531e+01 9.278494e+00 # H1O EG + 1207 121 2 1.5019 3.036483e+01 1.196797e+01 1.111049e+01 # OHG EG DC + 1208 121 3 0.0400 2.967432e+01 1.005943e+01 1.056611e+01 # H1O EG + 1209 121 4 0.3750 3.226635e+01 9.101260e+00 8.263309e+00 # HOG EG + 1210 121 4 0.3750 2.947009e+01 1.226238e+01 1.144627e+01 # HOG EG + 1211 122 1 2.3822 2.246490e+01 1.293190e+01 2.249161e+01 # CTO EG DC + 1212 122 1 2.3822 2.327236e+01 1.420715e+01 2.231230e+01 # CTO EG DC + 1213 122 2 1.5019 2.337511e+01 1.177916e+01 2.255174e+01 # OHG EG DC + 1214 122 3 0.0400 2.178258e+01 1.281192e+01 2.165010e+01 # H1O EG + 1215 122 3 0.0400 2.189245e+01 1.299085e+01 2.341731e+01 # H1O EG + 1216 122 3 0.0400 2.395468e+01 1.432713e+01 2.315381e+01 # H1O EG + 1217 122 2 1.5019 2.236216e+01 1.535989e+01 2.225217e+01 # OHG EG DC + 1218 122 3 0.0400 2.384481e+01 1.414820e+01 2.138660e+01 # H1O EG + 1219 122 4 0.3750 2.284388e+01 1.094018e+01 2.266971e+01 # HOG EG + 1220 122 4 0.3750 2.289338e+01 1.619887e+01 2.213420e+01 # HOG EG + 1221 123 1 2.3822 5.985914e+00 1.055290e+01 4.589699e+00 # CTO EG DC + 1222 123 1 2.3822 5.773180e+00 1.108426e+01 3.181580e+00 # CTO EG DC + 1223 123 2 1.5019 6.825349e+00 1.149238e+01 5.347082e+00 # OHG EG DC + 1224 123 3 0.0400 6.479985e+00 9.582497e+00 4.541627e+00 # H1O EG + 1225 123 3 0.0400 5.022173e+00 1.044510e+01 5.087376e+00 # H1O EG + 1226 123 3 0.0400 5.279110e+00 1.205467e+01 3.229652e+00 # H1O EG + 1227 123 2 1.5019 4.933745e+00 1.014479e+01 2.424197e+00 # OHG EG DC + 1228 123 3 0.0400 6.736921e+00 1.119206e+01 2.683903e+00 # H1O EG + 1229 123 4 0.3750 6.965305e+00 1.114280e+01 6.273476e+00 # HOG EG + 1230 123 4 0.3750 4.793789e+00 1.049437e+01 1.497803e+00 # HOG EG + 1231 124 1 2.3822 9.015442e+00 3.145782e+01 3.972896e+00 # CTO EG DC + 1232 124 1 2.3822 8.183621e+00 3.177133e+01 5.205855e+00 # CTO EG DC + 1233 124 2 1.5019 8.408158e+00 3.033514e+01 3.243723e+00 # OHG EG DC + 1234 124 3 0.0400 1.002748e+01 3.118891e+01 4.275493e+00 # H1O EG + 1235 124 3 0.0400 9.051052e+00 3.233406e+01 3.325562e+00 # H1O EG + 1236 124 3 0.0400 7.171582e+00 3.204024e+01 4.903259e+00 # H1O EG + 1237 124 2 1.5019 8.790905e+00 3.289401e+01 5.935028e+00 # OHG EG DC + 1238 124 3 0.0400 8.148011e+00 3.089509e+01 5.853189e+00 # H1O EG + 1239 124 4 0.3750 8.955408e+00 3.012889e+01 2.432566e+00 # HOG EG + 1240 124 4 0.3750 8.243655e+00 3.310027e+01 6.746185e+00 # HOG EG + 1241 125 1 2.3822 3.229887e+01 2.707456e+01 1.533223e+01 # CTO EG DC + 1242 125 1 2.3822 3.134242e+01 2.762449e+01 1.428668e+01 # CTO EG DC + 1243 125 2 1.5019 3.164387e+01 2.598647e+01 1.607247e+01 # OHG EG DC + 1244 125 3 0.0400 3.257649e+01 2.786893e+01 1.602504e+01 # H1O EG + 1245 125 3 0.0400 3.319378e+01 2.669207e+01 1.484136e+01 # H1O EG + 1246 125 3 0.0400 3.106480e+01 2.683011e+01 1.359386e+01 # H1O EG + 1247 125 2 1.5019 3.199742e+01 2.871257e+01 1.354644e+01 # OHG EG DC + 1248 125 3 0.0400 3.044752e+01 2.800698e+01 1.477754e+01 # H1O EG + 1249 125 4 0.3750 3.227311e+01 2.562467e+01 1.676033e+01 # HOG EG + 1250 125 4 0.3750 3.136818e+01 2.907437e+01 1.285857e+01 # HOG EG + 1251 126 1 2.3822 1.340905e+01 1.953074e+01 2.550809e+01 # CTO EG DC + 1252 126 1 2.3822 1.426899e+01 1.995251e+01 2.432783e+01 # CTO EG DC + 1253 126 2 1.5019 1.304073e+01 2.071628e+01 2.629533e+01 # OHG EG DC + 1254 126 3 0.0400 1.396824e+01 1.883742e+01 2.613634e+01 # H1O EG + 1255 126 3 0.0400 1.250542e+01 1.904212e+01 2.514367e+01 # H1O EG + 1256 126 3 0.0400 1.370980e+01 2.064584e+01 2.369958e+01 # H1O EG + 1257 126 2 1.5019 1.463731e+01 1.876698e+01 2.354059e+01 # OHG EG DC + 1258 126 3 0.0400 1.517262e+01 2.044114e+01 2.469225e+01 # H1O EG + 1259 126 4 0.3750 1.247497e+01 2.043880e+01 2.707182e+01 # HOG EG + 1260 126 4 0.3750 1.520306e+01 1.904446e+01 2.276411e+01 # HOG EG + 1261 127 1 2.3822 2.221032e+01 2.901564e+01 2.599813e+01 # CTO EG DC + 1262 127 1 2.3822 2.091237e+01 2.822463e+01 2.599986e+01 # CTO EG DC + 1263 127 2 1.5019 2.328966e+01 2.818872e+01 2.655683e+01 # OHG EG DC + 1264 127 3 0.0400 2.209011e+01 2.991339e+01 2.660450e+01 # H1O EG + 1265 127 3 0.0400 2.246231e+01 2.929909e+01 2.497624e+01 # H1O EG + 1266 127 3 0.0400 2.103258e+01 2.732687e+01 2.539349e+01 # H1O EG + 1267 127 2 1.5019 1.983303e+01 2.905155e+01 2.544116e+01 # OHG EG DC + 1268 127 3 0.0400 2.066038e+01 2.794118e+01 2.702175e+01 # H1O EG + 1269 127 4 0.3750 2.414358e+01 2.870912e+01 2.655569e+01 # HOG EG + 1270 127 4 0.3750 1.897911e+01 2.853114e+01 2.544230e+01 # HOG EG + 1271 128 1 2.3822 2.528407e+01 3.019683e+01 2.091296e+01 # CTO EG DC + 1272 128 1 2.3822 2.542939e+01 3.159447e+01 2.033339e+01 # CTO EG DC + 1273 128 2 1.5019 2.660651e+01 2.968788e+01 2.130411e+01 # OHG EG DC + 1274 128 3 0.0400 2.484793e+01 2.953588e+01 2.016395e+01 # H1O EG + 1275 128 3 0.0400 2.463526e+01 3.023151e+01 2.178814e+01 # H1O EG + 1276 128 3 0.0400 2.586552e+01 3.225543e+01 2.108241e+01 # H1O EG + 1277 128 2 1.5019 2.410694e+01 3.210343e+01 1.994224e+01 # OHG EG DC + 1278 128 3 0.0400 2.607820e+01 3.155979e+01 1.945821e+01 # H1O EG + 1279 128 4 0.3750 2.651091e+01 2.876838e+01 2.168541e+01 # HOG EG + 1280 128 4 0.3750 2.420254e+01 3.302292e+01 1.956095e+01 # HOG EG + 1281 129 1 2.3822 2.046569e+01 3.476252e+00 1.645943e+01 # CTO EG DC + 1282 129 1 2.3822 1.999180e+01 4.874712e+00 1.609869e+01 # CTO EG DC + 1283 129 2 1.5019 2.191509e+01 3.497089e+00 1.670377e+01 # OHG EG DC + 1284 129 3 0.0400 2.024602e+01 2.794414e+00 1.563789e+01 # H1O EG + 1285 129 3 0.0400 1.995095e+01 3.138371e+00 1.735887e+01 # H1O EG + 1286 129 3 0.0400 2.021148e+01 5.556550e+00 1.692024e+01 # H1O EG + 1287 129 2 1.5019 1.854240e+01 4.853875e+00 1.585435e+01 # OHG EG DC + 1288 129 3 0.0400 2.050655e+01 5.212593e+00 1.519926e+01 # H1O EG + 1289 129 4 0.3750 2.222686e+01 2.577049e+00 1.694111e+01 # HOG EG + 1290 129 4 0.3750 1.823063e+01 5.773915e+00 1.561702e+01 # HOG EG + 1291 130 1 2.3822 1.207003e+01 2.342584e+01 1.404566e+01 # CTO EG DC + 1292 130 1 2.3822 1.143367e+01 2.219636e+01 1.341809e+01 # CTO EG DC + 1293 130 2 1.5019 1.352433e+01 2.323257e+01 1.413811e+01 # OHG EG DC + 1294 130 3 0.0400 1.166008e+01 2.357822e+01 1.504406e+01 # H1O EG + 1295 130 3 0.0400 1.185860e+01 2.429967e+01 1.342937e+01 # H1O EG + 1296 130 3 0.0400 1.184363e+01 2.204397e+01 1.241968e+01 # H1O EG + 1297 130 2 1.5019 9.979371e+00 2.238962e+01 1.332563e+01 # OHG EG DC + 1298 130 3 0.0400 1.164510e+01 2.132253e+01 1.403438e+01 # H1O EG + 1299 130 4 0.3750 1.394299e+01 2.404144e+01 1.455098e+01 # HOG EG + 1300 130 4 0.3750 9.560718e+00 2.158076e+01 1.291276e+01 # HOG EG + 1301 131 1 2.3822 3.069682e+01 2.777286e+01 2.881625e+01 # CTO EG DC + 1302 131 1 2.3822 3.106146e+01 2.912677e+01 2.940305e+01 # CTO EG DC + 1303 131 2 1.5019 3.185228e+01 2.722502e+01 2.809121e+01 # OHG EG DC + 1304 131 3 0.0400 2.985860e+01 2.788797e+01 2.812905e+01 # H1O EG + 1305 131 3 0.0400 3.041640e+01 2.709169e+01 2.961966e+01 # H1O EG + 1306 131 3 0.0400 3.189967e+01 2.901166e+01 3.009025e+01 # H1O EG + 1307 131 2 1.5019 2.990600e+01 2.967461e+01 3.012809e+01 # OHG EG DC + 1308 131 3 0.0400 3.134187e+01 2.980794e+01 2.859964e+01 # H1O EG + 1309 131 4 0.3750 3.161238e+01 2.633428e+01 2.770515e+01 # HOG EG + 1310 131 4 0.3750 3.014589e+01 3.056535e+01 3.051415e+01 # HOG EG + 1311 132 1 2.3822 5.968177e+00 3.081648e+01 2.684945e+01 # CTO EG DC + 1312 132 1 2.3822 6.829130e+00 3.158259e+01 2.585837e+01 # CTO EG DC + 1313 132 2 1.5019 6.354496e+00 2.939818e+01 2.684126e+01 # OHG EG DC + 1314 132 3 0.0400 4.919318e+00 3.090846e+01 2.656743e+01 # H1O EG + 1315 132 3 0.0400 6.112310e+00 3.122601e+01 2.784925e+01 # H1O EG + 1316 132 3 0.0400 7.877989e+00 3.149061e+01 2.614039e+01 # H1O EG + 1317 132 2 1.5019 6.442811e+00 3.300090e+01 2.586656e+01 # OHG EG DC + 1318 132 3 0.0400 6.684997e+00 3.117307e+01 2.485856e+01 # H1O EG + 1319 132 4 0.3750 5.788079e+00 2.889416e+01 2.749328e+01 # HOG EG + 1320 132 4 0.3750 7.009228e+00 3.350492e+01 2.521454e+01 # HOG EG + 1321 133 1 2.3822 4.251512e+00 2.928466e+01 2.295844e+01 # CTO EG DC + 1322 133 1 2.3822 3.635533e+00 2.884470e+01 2.427654e+01 # CTO EG DC + 1323 133 2 1.5019 5.178034e+00 2.824865e+01 2.247976e+01 # OHG EG DC + 1324 133 3 0.0400 4.795067e+00 3.021811e+01 2.310444e+01 # H1O EG + 1325 133 3 0.0400 3.463292e+00 2.943536e+01 2.222080e+01 # H1O EG + 1326 133 3 0.0400 3.091978e+00 2.791125e+01 2.413053e+01 # H1O EG + 1327 133 2 1.5019 2.709010e+00 2.988071e+01 2.475522e+01 # OHG EG DC + 1328 133 3 0.0400 4.423752e+00 2.869400e+01 2.501417e+01 # H1O EG + 1329 133 4 0.3750 5.583284e+00 2.853810e+01 2.161258e+01 # HOG EG + 1330 133 4 0.3750 2.303761e+00 2.959126e+01 2.562239e+01 # HOG EG + 1331 134 1 2.3822 1.805707e+01 2.716355e+01 3.234879e+01 # CTO EG DC + 1332 134 1 2.3822 1.670045e+01 2.764865e+01 3.283322e+01 # CTO EG DC + 1333 134 2 1.5019 1.894846e+01 2.696803e+01 3.350122e+01 # OHG EG DC + 1334 134 3 0.0400 1.848989e+01 2.790477e+01 3.167696e+01 # H1O EG + 1335 134 3 0.0400 1.793750e+01 2.621893e+01 3.181822e+01 # H1O EG + 1336 134 3 0.0400 1.626763e+01 2.690743e+01 3.350505e+01 # H1O EG + 1337 134 2 1.5019 1.580906e+01 2.784417e+01 3.168079e+01 # OHG EG DC + 1338 134 3 0.0400 1.682002e+01 2.859327e+01 3.336379e+01 # H1O EG + 1339 134 4 0.3750 1.984097e+01 2.664888e+01 3.318252e+01 # HOG EG + 1340 134 4 0.3750 1.491655e+01 2.816331e+01 3.199949e+01 # HOG EG + 1341 135 1 2.3822 2.306398e+01 5.866065e+00 2.391512e+00 # CTO EG DC + 1342 135 1 2.3822 2.316597e+01 7.257035e+00 2.995831e+00 # CTO EG DC + 1343 135 2 1.5019 2.352172e+01 4.870541e+00 3.371461e+00 # OHG EG DC + 1344 135 3 0.0400 2.368767e+01 5.810352e+00 1.499324e+00 # H1O EG + 1345 135 3 0.0400 2.202762e+01 5.661067e+00 2.123097e+00 # H1O EG + 1346 135 3 0.0400 2.254227e+01 7.312747e+00 3.888019e+00 # H1O EG + 1347 135 2 1.5019 2.270822e+01 8.252559e+00 2.015882e+00 # OHG EG DC + 1348 135 3 0.0400 2.420232e+01 7.462033e+00 3.264246e+00 # H1O EG + 1349 135 4 0.3750 2.345463e+01 3.955429e+00 2.973884e+00 # HOG EG + 1350 135 4 0.3750 2.277532e+01 9.167671e+00 2.413460e+00 # HOG EG + 1351 136 1 2.3822 2.302946e+01 4.723706e+00 2.740021e+01 # CTO EG DC + 1352 136 1 2.3822 2.247149e+01 3.324559e+00 2.760383e+01 # CTO EG DC + 1353 136 2 1.5019 2.194287e+01 5.633162e+00 2.700891e+01 # OHG EG DC + 1354 136 3 0.0400 2.378572e+01 4.703197e+00 2.661552e+01 # H1O EG + 1355 136 3 0.0400 2.347958e+01 5.074617e+00 2.832884e+01 # H1O EG + 1356 136 3 0.0400 2.171522e+01 3.345069e+00 2.838852e+01 # H1O EG + 1357 136 2 1.5019 2.355807e+01 2.415103e+00 2.799514e+01 # OHG EG DC + 1358 136 3 0.0400 2.202136e+01 2.973649e+00 2.667520e+01 # H1O EG + 1359 136 4 0.3750 2.230996e+01 6.553654e+00 2.687495e+01 # HOG EG + 1360 136 4 0.3750 2.319099e+01 1.494612e+00 2.812909e+01 # HOG EG + 1361 137 1 2.3822 5.667906e+00 5.725739e+00 1.295705e+01 # CTO EG DC + 1362 137 1 2.3822 4.340417e+00 5.124201e+00 1.252540e+01 # CTO EG DC + 1363 137 2 1.5019 6.764871e+00 5.058463e+00 1.224129e+01 # OHG EG DC + 1364 137 3 0.0400 5.798072e+00 5.587661e+00 1.403041e+01 # H1O EG + 1365 137 3 0.0400 5.677646e+00 6.790578e+00 1.272441e+01 # H1O EG + 1366 137 3 0.0400 4.210251e+00 5.262279e+00 1.145205e+01 # H1O EG + 1367 137 2 1.5019 3.243453e+00 5.791477e+00 1.324116e+01 # OHG EG DC + 1368 137 3 0.0400 4.330677e+00 4.059362e+00 1.275804e+01 # H1O EG + 1369 137 4 0.3750 7.638219e+00 5.454212e+00 1.252527e+01 # HOG EG + 1370 137 4 0.3750 2.370104e+00 5.395729e+00 1.295718e+01 # HOG EG + 1371 138 1 2.3822 1.279540e+01 1.864482e+01 4.723565e+00 # CTO EG DC + 1372 138 1 2.3822 1.364875e+01 1.843853e+01 3.482748e+00 # CTO EG DC + 1373 138 2 1.5019 1.366648e+01 1.886018e+01 5.887932e+00 # OHG EG DC + 1374 138 3 0.0400 1.217745e+01 1.776266e+01 4.890965e+00 # H1O EG + 1375 138 3 0.0400 1.215463e+01 1.951545e+01 4.583849e+00 # H1O EG + 1376 138 3 0.0400 1.426670e+01 1.932069e+01 3.315348e+00 # H1O EG + 1377 138 2 1.5019 1.277768e+01 1.822317e+01 2.318381e+00 # OHG EG DC + 1378 138 3 0.0400 1.428952e+01 1.756790e+01 3.622463e+00 # H1O EG + 1379 138 4 0.3750 1.310506e+01 1.899590e+01 6.704259e+00 # HOG EG + 1380 138 4 0.3750 1.333910e+01 1.808745e+01 1.502054e+00 # HOG EG + 1381 139 1 2.3822 1.486204e+01 1.020720e+01 2.634207e+01 # CTO EG DC + 1382 139 1 2.3822 1.510607e+01 9.551899e+00 2.769168e+01 # CTO EG DC + 1383 139 2 1.5019 1.349165e+01 1.073696e+01 2.629444e+01 # OHG EG DC + 1384 139 3 0.0400 1.499363e+01 9.469644e+00 2.555037e+01 # H1O EG + 1385 139 3 0.0400 1.557136e+01 1.102253e+01 2.619992e+01 # H1O EG + 1386 139 3 0.0400 1.497449e+01 1.028946e+01 2.848338e+01 # H1O EG + 1387 139 2 1.5019 1.647647e+01 9.022139e+00 2.773931e+01 # OHG EG DC + 1388 139 3 0.0400 1.439676e+01 8.736568e+00 2.783383e+01 # H1O EG + 1389 139 4 0.3750 1.333110e+01 1.116808e+01 2.540654e+01 # HOG EG + 1390 139 4 0.3750 1.663702e+01 8.591018e+00 2.862721e+01 # HOG EG + 1391 140 1 2.3822 2.360810e+01 2.279895e+01 3.268905e+01 # CTO EG DC + 1392 140 1 2.3822 2.512358e+01 2.283832e+01 3.257874e+01 # CTO EG DC + 1393 140 2 1.5019 2.310382e+01 2.414370e+01 3.300252e+01 # OHG EG DC + 1394 140 3 0.0400 2.331879e+01 2.210905e+01 3.348179e+01 # H1O EG + 1395 140 3 0.0400 2.318303e+01 2.246345e+01 3.174308e+01 # H1O EG + 1396 140 3 0.0400 2.541289e+01 2.352822e+01 3.178600e+01 # H1O EG + 1397 140 2 1.5019 2.562786e+01 2.149358e+01 3.226527e+01 # OHG EG DC + 1398 140 3 0.0400 2.554866e+01 2.317382e+01 3.352471e+01 # H1O EG + 1399 140 4 0.3750 2.210680e+01 2.411779e+01 3.307509e+01 # HOG EG + 1400 140 4 0.3750 2.662489e+01 2.151948e+01 3.219270e+01 # HOG EG + 1401 141 1 2.3822 2.862507e+01 3.224598e+01 1.538242e+01 # CTO EG DC + 1402 141 1 2.3822 2.889168e+01 3.270182e+01 1.680773e+01 # CTO EG DC + 1403 141 2 1.5019 2.987322e+01 3.175124e+01 1.478387e+01 # OHG EG DC + 1404 141 3 0.0400 2.824922e+01 3.308472e+01 1.479645e+01 # H1O EG + 1405 141 3 0.0400 2.788395e+01 3.144672e+01 1.538865e+01 # H1O EG + 1406 141 3 0.0400 2.926753e+01 3.186309e+01 1.739369e+01 # H1O EG + 1407 141 2 1.5019 2.764353e+01 3.319656e+01 1.740627e+01 # OHG EG DC + 1408 141 3 0.0400 2.963280e+01 3.350108e+01 1.680150e+01 # H1O EG + 1409 141 4 0.3750 2.969782e+01 3.145134e+01 1.384617e+01 # HOG EG + 1410 141 4 0.3750 2.781894e+01 3.349646e+01 1.834398e+01 # HOG EG + 1411 142 1 2.3822 1.119025e+01 9.692844e+00 2.279977e+01 # CTO EG DC + 1412 142 1 2.3822 1.030173e+01 1.037643e+01 2.382624e+01 # CTO EG DC + 1413 142 2 1.5019 1.257567e+01 1.015607e+01 2.296389e+01 # OHG EG DC + 1414 142 3 0.0400 1.084216e+01 9.938052e+00 2.179638e+01 # H1O EG + 1415 142 3 0.0400 1.114913e+01 8.613257e+00 2.294434e+01 # H1O EG + 1416 142 3 0.0400 1.064982e+01 1.013122e+01 2.482964e+01 # H1O EG + 1417 142 2 1.5019 8.916312e+00 9.913201e+00 2.366212e+01 # OHG EG DC + 1418 142 3 0.0400 1.034286e+01 1.145601e+01 2.368167e+01 # H1O EG + 1419 142 4 0.3750 1.316023e+01 9.706344e+00 2.228859e+01 # HOG EG + 1420 142 4 0.3750 8.331756e+00 1.036293e+01 2.433743e+01 # HOG EG + 1421 143 1 2.3822 1.358152e+01 2.796208e+01 2.724285e+01 # CTO EG DC + 1422 143 1 2.3822 1.465519e+01 2.826294e+01 2.827586e+01 # CTO EG DC + 1423 143 2 1.5019 1.394563e+01 2.674974e+01 2.649548e+01 # OHG EG DC + 1424 143 3 0.0400 1.349510e+01 2.880143e+01 2.655283e+01 # H1O EG + 1425 143 3 0.0400 1.262693e+01 2.780561e+01 2.774521e+01 # H1O EG + 1426 143 3 0.0400 1.474161e+01 2.742359e+01 2.896588e+01 # H1O EG + 1427 143 2 1.5019 1.429108e+01 2.947528e+01 2.902323e+01 # OHG EG DC + 1428 143 3 0.0400 1.560979e+01 2.841941e+01 2.777350e+01 # H1O EG + 1429 143 4 0.3750 1.323927e+01 2.655180e+01 2.581586e+01 # HOG EG + 1430 143 4 0.3750 1.499744e+01 2.967322e+01 2.970285e+01 # HOG EG + 1431 144 1 2.3822 1.130425e+01 1.385163e+01 2.083648e+01 # CTO EG DC + 1432 144 1 2.3822 1.252580e+01 1.383012e+01 2.174078e+01 # CTO EG DC + 1433 144 2 1.5019 1.011822e+01 1.422082e+01 2.162258e+01 # OHG EG DC + 1434 144 3 0.0400 1.115717e+01 1.286369e+01 2.040009e+01 # H1O EG + 1435 144 3 0.0400 1.145354e+01 1.458127e+01 2.004059e+01 # H1O EG + 1436 144 3 0.0400 1.267288e+01 1.481806e+01 2.217718e+01 # H1O EG + 1437 144 2 1.5019 1.371182e+01 1.346094e+01 2.095469e+01 # OHG EG DC + 1438 144 3 0.0400 1.237650e+01 1.310048e+01 2.253667e+01 # H1O EG + 1439 144 4 0.3750 9.314574e+00 1.423497e+01 2.102765e+01 # HOG EG + 1440 144 4 0.3750 1.451547e+01 1.344679e+01 2.154962e+01 # HOG EG + 1441 145 1 2.3822 2.822171e+01 1.863188e+01 2.509880e+01 # CTO EG DC + 1442 145 1 2.3822 2.743925e+01 1.741780e+01 2.557227e+01 # CTO EG DC + 1443 145 2 1.5019 2.778098e+01 1.900284e+01 2.374638e+01 # OHG EG DC + 1444 145 3 0.0400 2.928553e+01 1.839505e+01 2.508152e+01 # H1O EG + 1445 145 3 0.0400 2.804659e+01 1.946549e+01 2.577889e+01 # H1O EG + 1446 145 3 0.0400 2.637543e+01 1.765463e+01 2.558955e+01 # H1O EG + 1447 145 2 1.5019 2.787998e+01 1.704683e+01 2.692469e+01 # OHG EG DC + 1448 145 3 0.0400 2.761436e+01 1.658418e+01 2.489218e+01 # H1O EG + 1449 145 4 0.3750 2.829575e+01 1.980158e+01 2.343489e+01 # HOG EG + 1450 145 4 0.3750 2.736520e+01 1.624810e+01 2.723618e+01 # HOG EG + 1451 146 1 2.3822 1.908267e+01 7.582498e+00 2.577326e+01 # CTO EG DC + 1452 146 1 2.3822 1.817973e+01 6.387703e+00 2.603318e+01 # CTO EG DC + 1453 146 2 1.5019 1.983943e+01 7.900140e+00 2.699282e+01 # OHG EG DC + 1454 146 3 0.0400 1.847585e+01 8.442055e+00 2.548861e+01 # H1O EG + 1455 146 3 0.0400 1.977678e+01 7.345422e+00 2.496698e+01 # H1O EG + 1456 146 3 0.0400 1.878655e+01 5.528146e+00 2.631783e+01 # H1O EG + 1457 146 2 1.5019 1.742296e+01 6.070061e+00 2.481362e+01 # OHG EG DC + 1458 146 3 0.0400 1.748561e+01 6.624779e+00 2.683947e+01 # H1O EG + 1459 146 4 0.3750 2.043348e+01 8.686189e+00 2.682183e+01 # HOG EG + 1460 146 4 0.3750 1.682892e+01 5.284011e+00 2.498461e+01 # HOG EG + 1461 147 1 2.3822 1.462026e+01 1.709088e+01 2.030864e+01 # CTO EG DC + 1462 147 1 2.3822 1.594050e+01 1.643041e+01 1.994652e+01 # CTO EG DC + 1463 147 2 1.5019 1.356389e+01 1.660023e+01 1.941183e+01 # OHG EG DC + 1464 147 3 0.0400 1.471303e+01 1.817175e+01 2.020272e+01 # H1O EG + 1465 147 3 0.0400 1.436268e+01 1.684813e+01 2.133957e+01 # H1O EG + 1466 147 3 0.0400 1.584773e+01 1.534954e+01 2.005244e+01 # H1O EG + 1467 147 2 1.5019 1.699687e+01 1.692106e+01 2.084333e+01 # OHG EG DC + 1468 147 3 0.0400 1.619808e+01 1.667317e+01 1.891559e+01 # H1O EG + 1469 147 4 0.3750 1.269531e+01 1.703475e+01 1.965007e+01 # HOG EG + 1470 147 4 0.3750 1.786545e+01 1.648654e+01 2.060509e+01 # HOG EG + 1471 148 1 2.3822 4.744763e+00 1.984697e+01 2.775635e+01 # CTO EG DC + 1472 148 1 2.3822 5.969836e+00 1.918696e+01 2.714481e+01 # CTO EG DC + 1473 148 2 1.5019 3.727351e+00 1.882484e+01 2.804100e+01 # OHG EG DC + 1474 148 3 0.0400 4.338647e+00 2.057844e+01 2.705769e+01 # H1O EG + 1475 148 3 0.0400 5.025534e+00 2.034738e+01 2.868310e+01 # H1O EG + 1476 148 3 0.0400 6.375952e+00 1.845548e+01 2.784347e+01 # H1O EG + 1477 148 2 1.5019 6.987249e+00 2.020909e+01 2.686016e+01 # OHG EG DC + 1478 148 3 0.0400 5.689066e+00 1.868655e+01 2.621806e+01 # H1O EG + 1479 148 4 0.3750 2.921381e+00 1.925906e+01 2.844332e+01 # HOG EG + 1480 148 4 0.3750 7.793218e+00 1.977487e+01 2.645784e+01 # HOG EG + 1481 149 1 2.3822 6.291901e+00 2.535324e+01 1.268599e+01 # CTO EG DC + 1482 149 1 2.3822 7.534770e+00 2.579098e+01 1.344366e+01 # CTO EG DC + 1483 149 2 1.5019 5.231502e+00 2.500456e+01 1.364248e+01 # OHG EG DC + 1484 149 3 0.0400 6.527269e+00 2.448368e+01 1.207234e+01 # H1O EG + 1485 149 3 0.0400 5.950283e+00 2.616700e+01 1.204630e+01 # H1O EG + 1486 149 3 0.0400 7.299403e+00 2.666053e+01 1.405731e+01 # H1O EG + 1487 149 2 1.5019 8.595169e+00 2.613965e+01 1.248717e+01 # OHG EG DC + 1488 149 3 0.0400 7.876389e+00 2.497722e+01 1.408334e+01 # H1O EG + 1489 149 4 0.3750 4.413825e+00 2.471658e+01 1.314401e+01 # HOG EG + 1490 149 4 0.3750 9.412846e+00 2.642764e+01 1.298564e+01 # HOG EG + 1491 150 1 2.3822 3.061285e+01 1.813905e+01 1.257511e+01 # CTO EG DC + 1492 150 1 2.3822 2.909691e+01 1.814532e+01 1.246436e+01 # CTO EG DC + 1493 150 2 1.5019 3.106688e+01 1.940588e+01 1.316665e+01 # OHG EG DC + 1494 150 3 0.0400 3.104968e+01 1.802473e+01 1.158303e+01 # H1O EG + 1495 150 3 0.0400 3.092801e+01 1.730953e+01 1.320809e+01 # H1O EG + 1496 150 3 0.0400 2.866008e+01 1.825963e+01 1.345644e+01 # H1O EG + 1497 150 2 1.5019 2.864288e+01 1.687849e+01 1.187283e+01 # OHG EG DC + 1498 150 3 0.0400 2.878176e+01 1.897484e+01 1.183138e+01 # H1O EG + 1499 150 4 0.3750 3.206422e+01 1.940176e+01 1.323950e+01 # HOG EG + 1500 150 4 0.3750 2.764555e+01 1.688261e+01 1.179997e+01 # HOG EG + 1501 151 1 2.3822 1.463838e+01 3.265398e+01 4.665793e+00 # CTO EG DC + 1502 151 1 2.3822 1.318598e+01 3.228541e+01 4.920898e+00 # CTO EG DC + 1503 151 2 1.5019 1.540933e+01 3.143707e+01 4.373131e+00 # OHG EG DC + 1504 151 3 0.0400 1.505078e+01 3.314101e+01 5.549442e+00 # H1O EG + 1505 151 3 0.0400 1.469734e+01 3.333398e+01 3.815955e+00 # H1O EG + 1506 151 3 0.0400 1.277358e+01 3.179839e+01 4.037250e+00 # H1O EG + 1507 151 2 1.5019 1.241503e+01 3.350233e+01 5.213560e+00 # OHG EG DC + 1508 151 3 0.0400 1.312703e+01 3.160541e+01 5.770736e+00 # H1O EG + 1509 151 4 0.3750 1.636486e+01 3.167955e+01 4.205299e+00 # HOG EG + 1510 151 4 0.3750 1.145951e+01 3.325985e+01 5.381393e+00 # HOG EG + 1511 152 1 2.3822 7.072587e+00 6.567766e+00 2.249401e+01 # CTO EG DC + 1512 152 1 2.3822 8.072235e+00 6.318933e+00 2.361168e+01 # CTO EG DC + 1513 152 2 1.5019 6.301973e+00 7.784844e+00 2.278688e+01 # OHG EG DC + 1514 152 3 0.0400 6.393885e+00 5.718325e+00 2.241710e+01 # H1O EG + 1515 152 3 0.0400 7.604827e+00 6.693439e+00 2.155113e+01 # H1O EG + 1516 152 3 0.0400 8.750937e+00 7.168373e+00 2.368858e+01 # H1O EG + 1517 152 2 1.5019 8.842850e+00 5.101855e+00 2.331881e+01 # OHG EG DC + 1518 152 3 0.0400 7.539996e+00 6.193260e+00 2.455456e+01 # H1O EG + 1519 152 4 0.3750 5.644310e+00 7.948550e+00 2.205157e+01 # HOG EG + 1520 152 4 0.3750 9.500513e+00 4.938149e+00 2.405411e+01 # HOG EG + 1521 153 1 2.3822 3.144793e+01 4.603681e+00 1.217708e+01 # CTO EG DC + 1522 153 1 2.3822 3.044831e+01 5.748569e+00 1.219700e+01 # CTO EG DC + 1523 153 2 1.5019 3.072861e+01 3.323119e+00 1.223748e+01 # OHG EG DC + 1524 153 3 0.0400 3.211353e+01 4.686819e+00 1.303624e+01 # H1O EG + 1525 153 3 0.0400 3.203354e+01 4.647906e+00 1.125882e+01 # H1O EG + 1526 153 3 0.0400 2.978271e+01 5.665431e+00 1.133784e+01 # H1O EG + 1527 153 2 1.5019 3.116762e+01 7.029131e+00 1.213659e+01 # OHG EG DC + 1528 153 3 0.0400 2.986269e+01 5.704344e+00 1.311526e+01 # H1O EG + 1529 153 4 0.3750 3.138626e+01 2.569904e+00 1.222438e+01 # HOG EG + 1530 153 4 0.3750 3.050998e+01 7.782346e+00 1.214970e+01 # HOG EG + 1531 154 1 2.3822 1.904601e+01 2.039100e+01 8.789812e+00 # CTO EG DC + 1532 154 1 2.3822 1.761690e+01 2.087986e+01 8.960245e+00 # CTO EG DC + 1533 154 2 1.5019 1.997932e+01 2.145920e+01 9.175537e+00 # OHG EG DC + 1534 154 3 0.0400 1.921588e+01 2.011952e+01 7.747918e+00 # H1O EG + 1535 154 3 0.0400 1.921038e+01 1.951935e+01 9.423299e+00 # H1O EG + 1536 154 3 0.0400 1.744703e+01 2.115134e+01 1.000214e+01 # H1O EG + 1537 154 2 1.5019 1.668359e+01 1.981166e+01 8.574520e+00 # OHG EG DC + 1538 154 3 0.0400 1.745253e+01 2.175151e+01 8.326758e+00 # H1O EG + 1539 154 4 0.3750 2.091952e+01 2.113758e+01 9.063410e+00 # HOG EG + 1540 154 4 0.3750 1.574338e+01 2.013328e+01 8.686647e+00 # HOG EG + 1541 155 1 2.3822 1.464307e+01 7.397995e+00 1.021604e+01 # CTO EG DC + 1542 155 1 2.3822 1.362215e+01 6.279248e+00 1.008742e+01 # CTO EG DC + 1543 155 2 1.5019 1.599357e+01 6.823040e+00 1.029643e+01 # OHG EG DC + 1544 155 3 0.0400 1.443971e+01 7.974147e+00 1.111870e+01 # H1O EG + 1545 155 3 0.0400 1.457818e+01 8.051569e+00 9.346140e+00 # H1O EG + 1546 155 3 0.0400 1.382552e+01 5.703096e+00 9.184767e+00 # H1O EG + 1547 155 2 1.5019 1.227165e+01 6.854203e+00 1.000704e+01 # OHG EG DC + 1548 155 3 0.0400 1.368705e+01 5.625674e+00 1.095733e+01 # H1O EG + 1549 155 4 0.3750 1.666523e+01 7.559057e+00 1.038105e+01 # HOG EG + 1550 155 4 0.3750 1.160000e+01 6.118185e+00 9.922421e+00 # HOG EG + 1551 156 1 2.3822 1.637129e+01 2.242557e+01 5.164775e+00 # CTO EG DC + 1552 156 1 2.3822 1.770415e+01 2.178701e+01 4.809642e+00 # CTO EG DC + 1553 156 2 1.5019 1.660042e+01 2.377818e+01 5.692823e+00 # OHG EG DC + 1554 156 3 0.0400 1.586824e+01 2.182165e+01 5.919978e+00 # H1O EG + 1555 156 3 0.0400 1.574728e+01 2.248509e+01 4.273054e+00 # H1O EG + 1556 156 3 0.0400 1.820719e+01 2.239092e+01 4.054439e+00 # H1O EG + 1557 156 2 1.5019 1.747502e+01 2.043439e+01 4.281594e+00 # OHG EG DC + 1558 156 3 0.0400 1.832816e+01 2.172749e+01 5.701363e+00 # H1O EG + 1559 156 4 0.3750 1.572353e+01 2.419829e+01 5.926463e+00 # HOG EG + 1560 156 4 0.3750 1.835190e+01 2.001429e+01 4.047954e+00 # HOG EG + 1561 157 1 2.3822 8.859092e+00 2.316762e+01 2.911405e+00 # CTO EG DC + 1562 157 1 2.3822 7.595413e+00 2.391366e+01 2.515249e+00 # CTO EG DC + 1563 157 2 1.5019 8.623765e+00 2.171960e+01 2.817889e+00 # OHG EG DC + 1564 157 3 0.0400 9.128257e+00 2.342606e+01 3.935543e+00 # H1O EG + 1565 157 3 0.0400 9.671900e+00 2.344714e+01 2.241097e+00 # H1O EG + 1566 157 3 0.0400 7.326248e+00 2.365522e+01 1.491111e+00 # H1O EG + 1567 157 2 1.5019 7.830740e+00 2.536169e+01 2.608765e+00 # OHG EG DC + 1568 157 3 0.0400 6.782605e+00 2.363414e+01 3.185557e+00 # H1O EG + 1569 157 4 0.3750 9.455134e+00 2.122878e+01 3.078518e+00 # HOG EG + 1570 157 4 0.3750 6.999372e+00 2.585250e+01 2.348136e+00 # HOG EG + 1571 158 1 2.3822 3.376188e+00 1.516049e+01 2.845612e+01 # CTO EG DC + 1572 158 1 2.3822 3.379877e+00 1.368774e+01 2.808010e+01 # CTO EG DC + 1573 158 2 1.5019 4.497022e+00 1.543742e+01 2.936603e+01 # OHG EG DC + 1574 158 3 0.0400 2.437166e+00 1.540716e+01 2.895159e+01 # H1O EG + 1575 158 3 0.0400 3.481464e+00 1.576610e+01 2.755597e+01 # H1O EG + 1576 158 3 0.0400 4.318898e+00 1.344107e+01 2.758463e+01 # H1O EG + 1577 158 2 1.5019 2.259042e+00 1.341081e+01 2.717019e+01 # OHG EG DC + 1578 158 3 0.0400 3.274600e+00 1.308213e+01 2.898025e+01 # H1O EG + 1579 158 4 0.3750 4.494595e+00 1.640634e+01 2.961341e+01 # HOG EG + 1580 158 4 0.3750 2.261469e+00 1.244189e+01 2.692282e+01 # HOG EG + 1581 159 1 2.3822 1.922120e+01 1.900708e+01 1.676037e+01 # CTO EG DC + 1582 159 1 2.3822 1.991271e+01 2.027745e+01 1.629306e+01 # CTO EG DC + 1583 159 2 1.5019 1.924144e+01 1.894922e+01 1.822910e+01 # OHG EG DC + 1584 159 3 0.0400 1.974224e+01 1.813932e+01 1.635588e+01 # H1O EG + 1585 159 3 0.0400 1.818858e+01 1.900546e+01 1.641141e+01 # H1O EG + 1586 159 3 0.0400 1.939168e+01 2.114521e+01 1.669756e+01 # H1O EG + 1587 159 2 1.5019 1.989247e+01 2.033531e+01 1.482434e+01 # OHG EG DC + 1588 159 3 0.0400 2.094534e+01 2.027907e+01 1.664203e+01 # H1O EG + 1589 159 4 0.3750 1.878650e+01 1.811345e+01 1.853654e+01 # HOG EG + 1590 159 4 0.3750 2.034741e+01 2.117108e+01 1.451690e+01 # HOG EG + 1591 160 1 2.3822 3.056598e+01 8.686324e+00 2.107074e+01 # CTO EG DC + 1592 160 1 2.3822 3.099246e+01 1.005346e+01 2.056136e+01 # CTO EG DC + 1593 160 2 1.5019 2.962817e+01 8.077700e+00 2.011628e+01 # OHG EG DC + 1594 160 3 0.0400 3.007829e+01 8.794869e+00 2.203949e+01 # H1O EG + 1595 160 3 0.0400 3.144277e+01 8.047303e+00 2.117550e+01 # H1O EG + 1596 160 3 0.0400 3.148015e+01 9.944912e+00 1.959261e+01 # H1O EG + 1597 160 2 1.5019 3.193027e+01 1.066208e+01 2.151582e+01 # OHG EG DC + 1598 160 3 0.0400 3.011566e+01 1.069248e+01 2.045660e+01 # H1O EG + 1599 160 4 0.3750 2.934758e+01 7.178271e+00 2.045139e+01 # HOG EG + 1600 160 4 0.3750 3.221085e+01 1.156151e+01 2.118071e+01 # HOG EG + 1601 161 1 2.3822 1.284054e+01 2.965580e+00 2.923963e+01 # CTO EG DC + 1602 161 1 2.3822 1.363595e+01 4.236832e+00 2.948790e+01 # CTO EG DC + 1603 161 2 1.5019 1.315906e+01 2.440387e+00 2.790411e+01 # OHG EG DC + 1604 161 3 0.0400 1.177467e+01 3.186031e+00 2.929809e+01 # H1O EG + 1605 161 3 0.0400 1.309903e+01 2.221642e+00 2.999319e+01 # H1O EG + 1606 161 3 0.0400 1.470183e+01 4.016381e+00 2.942945e+01 # H1O EG + 1607 161 2 1.5019 1.331744e+01 4.762025e+00 3.082342e+01 # OHG EG DC + 1608 161 3 0.0400 1.337747e+01 4.980770e+00 2.873434e+01 # H1O EG + 1609 161 4 0.3750 1.263576e+01 1.604037e+00 2.774078e+01 # HOG EG + 1610 161 4 0.3750 1.384074e+01 5.598375e+00 3.098675e+01 # HOG EG + 1611 162 1 2.3822 1.384107e+01 3.268476e+01 1.309704e+01 # CTO EG DC + 1612 162 1 2.3822 1.333706e+01 3.148127e+01 1.387678e+01 # CTO EG DC + 1613 162 2 1.5019 1.506650e+01 3.232100e+01 1.237116e+01 # OHG EG DC + 1614 162 3 0.0400 1.405661e+01 3.350086e+01 1.378669e+01 # H1O EG + 1615 162 3 0.0400 1.307882e+01 3.300263e+01 1.238568e+01 # H1O EG + 1616 162 3 0.0400 1.312152e+01 3.066517e+01 1.318712e+01 # H1O EG + 1617 162 2 1.5019 1.211163e+01 3.184502e+01 1.460266e+01 # OHG EG DC + 1618 162 3 0.0400 1.409931e+01 3.116340e+01 1.458814e+01 # H1O EG + 1619 162 4 0.3750 1.539808e+01 3.311277e+01 1.185817e+01 # HOG EG + 1620 162 4 0.3750 1.178004e+01 3.105325e+01 1.511565e+01 # HOG EG + 1621 163 1 2.3822 2.708462e+01 9.045663e+00 8.327258e+00 # CTO EG DC + 1622 163 1 2.3822 2.581347e+01 9.851350e+00 8.114094e+00 # CTO EG DC + 1623 163 2 1.5019 2.694937e+01 7.734414e+00 7.676694e+00 # OHG EG DC + 1624 163 3 0.0400 2.725166e+01 8.905326e+00 9.395201e+00 # H1O EG + 1625 163 3 0.0400 2.793071e+01 9.579704e+00 7.894785e+00 # H1O EG + 1626 163 3 0.0400 2.564643e+01 9.991686e+00 7.046151e+00 # H1O EG + 1627 163 2 1.5019 2.594872e+01 1.116260e+01 8.764658e+00 # OHG EG DC + 1628 163 3 0.0400 2.496738e+01 9.317308e+00 8.546567e+00 # H1O EG + 1629 163 4 0.3750 2.778566e+01 7.204357e+00 7.816933e+00 # HOG EG + 1630 163 4 0.3750 2.511243e+01 1.169266e+01 8.624419e+00 # HOG EG + 1631 164 1 2.3822 2.717704e+01 1.049622e+01 3.826495e+00 # CTO EG DC + 1632 164 1 2.3822 2.802571e+01 9.240314e+00 3.939913e+00 # CTO EG DC + 1633 164 2 1.5019 2.588005e+01 1.015911e+01 3.222283e+00 # OHG EG DC + 1634 164 3 0.0400 2.768991e+01 1.122664e+01 3.200754e+00 # H1O EG + 1635 164 3 0.0400 2.701643e+01 1.091766e+01 4.818811e+00 # H1O EG + 1636 164 3 0.0400 2.751284e+01 8.509895e+00 4.565654e+00 # H1O EG + 1637 164 2 1.5019 2.932270e+01 9.577429e+00 4.544126e+00 # OHG EG DC + 1638 164 3 0.0400 2.818631e+01 8.818869e+00 2.947598e+00 # H1O EG + 1639 164 4 0.3750 2.532172e+01 1.098536e+01 3.147666e+00 # HOG EG + 1640 164 4 0.3750 2.988103e+01 8.751175e+00 4.618742e+00 # HOG EG + 1641 165 1 2.3822 2.006215e+01 6.815549e+00 1.239701e+01 # CTO EG DC + 1642 165 1 2.3822 1.937404e+01 7.955213e+00 1.313054e+01 # CTO EG DC + 1643 165 2 1.5019 2.148901e+01 6.795458e+00 1.274992e+01 # OHG EG DC + 1644 165 3 0.0400 1.995635e+01 6.958565e+00 1.132162e+01 # H1O EG + 1645 165 3 0.0400 1.960406e+01 5.869012e+00 1.268394e+01 # H1O EG + 1646 165 3 0.0400 1.947983e+01 7.812198e+00 1.420593e+01 # H1O EG + 1647 165 2 1.5019 1.794717e+01 7.975305e+00 1.277763e+01 # OHG EG DC + 1648 165 3 0.0400 1.983212e+01 8.901750e+00 1.284361e+01 # H1O EG + 1649 165 4 0.3750 2.194171e+01 6.045679e+00 1.226733e+01 # HOG EG + 1650 165 4 0.3750 1.749447e+01 8.725083e+00 1.326022e+01 # HOG EG + 1651 166 1 2.3822 2.553462e+01 2.518944e+01 1.500511e+01 # CTO EG DC + 1652 166 1 2.3822 2.573156e+01 2.644364e+01 1.416928e+01 # CTO EG DC + 1653 166 2 1.5019 2.421057e+01 2.461575e+01 1.472464e+01 # OHG EG DC + 1654 166 3 0.0400 2.560360e+01 2.544269e+01 1.606304e+01 # H1O EG + 1655 166 3 0.0400 2.630598e+01 2.446093e+01 1.475538e+01 # H1O EG + 1656 166 3 0.0400 2.566257e+01 2.619040e+01 1.311135e+01 # H1O EG + 1657 166 2 1.5019 2.705561e+01 2.701733e+01 1.444975e+01 # OHG EG DC + 1658 166 3 0.0400 2.496019e+01 2.717215e+01 1.441901e+01 # H1O EG + 1659 166 4 0.3750 2.408100e+01 2.379062e+01 1.527453e+01 # HOG EG + 1660 166 4 0.3750 2.718517e+01 2.784246e+01 1.389986e+01 # HOG EG + 1661 167 1 2.3822 7.376657e+00 8.657666e+00 2.813220e+01 # CTO EG DC + 1662 167 1 2.3822 6.288703e+00 9.351246e+00 2.732865e+01 # CTO EG DC + 1663 167 2 1.5019 8.253072e+00 9.666521e+00 2.874458e+01 # OHG EG DC + 1664 167 3 0.0400 7.964293e+00 8.018539e+00 2.747319e+01 # H1O EG + 1665 167 3 0.0400 6.920449e+00 8.050652e+00 2.891419e+01 # H1O EG + 1666 167 3 0.0400 5.701067e+00 9.990372e+00 2.798766e+01 # H1O EG + 1667 167 2 1.5019 5.412289e+00 8.342391e+00 2.671627e+01 # OHG EG DC + 1668 167 3 0.0400 6.744912e+00 9.958259e+00 2.654666e+01 # H1O EG + 1669 167 4 0.3750 8.968831e+00 9.210218e+00 2.927324e+01 # HOG EG + 1670 167 4 0.3750 4.696530e+00 8.798693e+00 2.618761e+01 # HOG EG + 1671 168 1 2.3822 5.801106e+00 3.181150e+01 1.476443e+01 # CTO EG DC + 1672 168 1 2.3822 6.376543e+00 3.057047e+01 1.542708e+01 # CTO EG DC + 1673 168 2 1.5019 6.897742e+00 3.268463e+01 1.432179e+01 # OHG EG DC + 1674 168 3 0.0400 5.175556e+00 3.234801e+01 1.547783e+01 # H1O EG + 1675 168 3 0.0400 5.200269e+00 3.151879e+01 1.390338e+01 # H1O EG + 1676 168 3 0.0400 7.002093e+00 3.003396e+01 1.471367e+01 # H1O EG + 1677 168 2 1.5019 5.279907e+00 2.969733e+01 1.586972e+01 # OHG EG DC + 1678 168 3 0.0400 6.977380e+00 3.086318e+01 1.628813e+01 # H1O EG + 1679 168 4 0.3750 6.519165e+00 3.350110e+01 1.388583e+01 # HOG EG + 1680 168 4 0.3750 5.658484e+00 2.888087e+01 1.630567e+01 # HOG EG + 1681 169 1 2.3822 2.314974e+01 1.547854e+01 5.275536e+00 # CTO EG DC + 1682 169 1 2.3822 2.202753e+01 1.515826e+01 4.301641e+00 # CTO EG DC + 1683 169 2 1.5019 2.319268e+01 1.445402e+01 6.328825e+00 # OHG EG DC + 1684 169 3 0.0400 2.297271e+01 1.645507e+01 5.726253e+00 # H1O EG + 1685 169 3 0.0400 2.410081e+01 1.549168e+01 4.743184e+00 # H1O EG + 1686 169 3 0.0400 2.220455e+01 1.418173e+01 3.850923e+00 # H1O EG + 1687 169 2 1.5019 2.198459e+01 1.618278e+01 3.248351e+00 # OHG EG DC + 1688 169 3 0.0400 2.107646e+01 1.514512e+01 4.833992e+00 # H1O EG + 1689 169 4 0.3750 2.393098e+01 1.466473e+01 6.969545e+00 # HOG EG + 1690 169 4 0.3750 2.124629e+01 1.597208e+01 2.607631e+00 # HOG EG + 1691 170 1 2.3822 2.043261e+01 2.405670e+01 1.086055e+01 # CTO EG DC + 1692 170 1 2.3822 2.156852e+01 2.453867e+01 9.972968e+00 # CTO EG DC + 1693 170 2 1.5019 1.920238e+01 2.394196e+01 1.006415e+01 # OHG EG DC + 1694 170 3 0.0400 2.027567e+01 2.476968e+01 1.166996e+01 # H1O EG + 1695 170 3 0.0400 2.068604e+01 2.308268e+01 1.127908e+01 # H1O EG + 1696 170 3 0.0400 2.172546e+01 2.382570e+01 9.163565e+00 # H1O EG + 1697 170 2 1.5019 2.279876e+01 2.465341e+01 1.076937e+01 # OHG EG DC + 1698 170 3 0.0400 2.131509e+01 2.551269e+01 9.554443e+00 # H1O EG + 1699 170 4 0.3750 1.845507e+01 2.362488e+01 1.064808e+01 # HOG EG + 1700 170 4 0.3750 2.354607e+01 2.497050e+01 1.018544e+01 # HOG EG + 1701 171 1 2.3822 2.747793e+01 2.341632e+01 2.005727e+01 # CTO EG DC + 1702 171 1 2.3822 2.647100e+01 2.320338e+01 1.893872e+01 # CTO EG DC + 1703 171 2 1.5019 2.853746e+01 2.240168e+01 1.996343e+01 # OHG EG DC + 1704 171 3 0.0400 2.697563e+01 2.332835e+01 2.102063e+01 # H1O EG + 1705 171 3 0.0400 2.791769e+01 2.440956e+01 1.996675e+01 # H1O EG + 1706 171 3 0.0400 2.697330e+01 2.329135e+01 1.797537e+01 # H1O EG + 1707 171 2 1.5019 2.541147e+01 2.421802e+01 1.903256e+01 # OHG EG DC + 1708 171 3 0.0400 2.603124e+01 2.221015e+01 1.902924e+01 # H1O EG + 1709 171 4 0.3750 2.919991e+01 2.254177e+01 2.069932e+01 # HOG EG + 1710 171 4 0.3750 2.474901e+01 2.407793e+01 1.829667e+01 # HOG EG + 1711 172 1 2.3822 1.695480e+01 2.135442e+01 2.020948e+01 # CTO EG DC + 1712 172 1 2.3822 1.585887e+01 2.194383e+01 2.108237e+01 # CTO EG DC + 1713 172 2 1.5019 1.643258e+01 2.112421e+01 1.885479e+01 # OHG EG DC + 1714 172 3 0.0400 1.728949e+01 2.040834e+01 2.063494e+01 # H1O EG + 1715 172 3 0.0400 1.779436e+01 2.204794e+01 2.016168e+01 # H1O EG + 1716 172 3 0.0400 1.552418e+01 2.288991e+01 2.065691e+01 # H1O EG + 1717 172 2 1.5019 1.638110e+01 2.217405e+01 2.243706e+01 # OHG EG DC + 1718 172 3 0.0400 1.501932e+01 2.125031e+01 2.113017e+01 # H1O EG + 1719 172 4 0.3750 1.715359e+01 2.073644e+01 1.828053e+01 # HOG EG + 1720 172 4 0.3750 1.566009e+01 2.256181e+01 2.301133e+01 # HOG EG + 1721 173 1 2.3822 7.903718e+00 1.011991e+01 2.033919e+01 # CTO EG DC + 1722 173 1 2.3822 6.735448e+00 9.940813e+00 1.938343e+01 # CTO EG DC + 1723 173 2 1.5019 7.894037e+00 1.148879e+01 2.087490e+01 # OHG EG DC + 1724 173 3 0.0400 8.838978e+00 9.945020e+00 1.980740e+01 # H1O EG + 1725 173 3 0.0400 7.814598e+00 9.408396e+00 2.116011e+01 # H1O EG + 1726 173 3 0.0400 5.800188e+00 1.011570e+01 1.991522e+01 # H1O EG + 1727 173 2 1.5019 6.745129e+00 8.571936e+00 1.884773e+01 # OHG EG DC + 1728 173 3 0.0400 6.824568e+00 1.065233e+01 1.856252e+01 # H1O EG + 1729 173 4 0.3750 8.662635e+00 1.160661e+01 2.150369e+01 # HOG EG + 1730 173 4 0.3750 5.976530e+00 8.454109e+00 1.821894e+01 # HOG EG + 1731 174 1 2.3822 7.975185e+00 3.084395e+00 2.792079e+01 # CTO EG DC + 1732 174 1 2.3822 8.787152e+00 3.637470e+00 2.676096e+01 # CTO EG DC + 1733 174 2 1.5019 6.541701e+00 3.235801e+00 2.763252e+01 # OHG EG DC + 1734 174 3 0.0400 8.221933e+00 3.630961e+00 2.883100e+01 # H1O EG + 1735 174 3 0.0400 8.208269e+00 2.028386e+00 2.805724e+01 # H1O EG + 1736 174 3 0.0400 8.540404e+00 3.090904e+00 2.585075e+01 # H1O EG + 1737 174 2 1.5019 1.022064e+01 3.486064e+00 2.704922e+01 # OHG EG DC + 1738 174 3 0.0400 8.554067e+00 4.693478e+00 2.662451e+01 # H1O EG + 1739 174 4 0.3750 6.007512e+00 2.871936e+00 2.839557e+01 # HOG EG + 1740 174 4 0.3750 1.075482e+01 3.849929e+00 2.628618e+01 # HOG EG + 1741 175 1 2.3822 1.157974e+01 2.717343e+01 4.086609e+00 # CTO EG DC + 1742 175 1 2.3822 1.242374e+01 2.591438e+01 3.973256e+00 # CTO EG DC + 1743 175 2 1.5019 1.245850e+01 2.835110e+01 4.128871e+00 # OHG EG DC + 1744 175 3 0.0400 1.098481e+01 2.713174e+01 4.998979e+00 # H1O EG + 1745 175 3 0.0400 1.091697e+01 2.724604e+01 3.224303e+00 # H1O EG + 1746 175 3 0.0400 1.301867e+01 2.595607e+01 3.060886e+00 # H1O EG + 1747 175 2 1.5019 1.154498e+01 2.473671e+01 3.930994e+00 # OHG EG DC + 1748 175 3 0.0400 1.308650e+01 2.584177e+01 4.835562e+00 # H1O EG + 1749 175 4 0.3750 1.190323e+01 2.917942e+01 4.203446e+00 # HOG EG + 1750 175 4 0.3750 1.210024e+01 2.390839e+01 3.856419e+00 # HOG EG + 1751 176 1 2.3822 2.285589e+01 2.007343e+01 5.755341e+00 # CTO EG DC + 1752 176 1 2.3822 2.210197e+01 1.975518e+01 4.474437e+00 # CTO EG DC + 1753 176 2 1.5019 2.264440e+01 1.899383e+01 6.730347e+00 # OHG EG DC + 1754 176 3 0.0400 2.248969e+01 2.101296e+01 6.169211e+00 # H1O EG + 1755 176 3 0.0400 2.392032e+01 2.016297e+01 5.538355e+00 # H1O EG + 1756 176 3 0.0400 2.246817e+01 1.881565e+01 4.060567e+00 # H1O EG + 1757 176 2 1.5019 2.231346e+01 2.083478e+01 3.499431e+00 # OHG EG DC + 1758 176 3 0.0400 2.103755e+01 1.966564e+01 4.691423e+00 # H1O EG + 1759 176 4 0.3750 2.314041e+01 1.920321e+01 7.573047e+00 # HOG EG + 1760 176 4 0.3750 2.181745e+01 2.062540e+01 2.656731e+00 # HOG EG + 1761 177 1 2.3822 2.869066e+01 3.010399e+01 3.034361e+00 # CTO EG DC + 1762 177 1 2.3822 2.920081e+01 3.148088e+01 3.427172e+00 # CTO EG DC + 1763 177 2 1.5019 2.973666e+01 2.938676e+01 2.291154e+00 # OHG EG DC + 1764 177 3 0.0400 2.780637e+01 3.020927e+01 2.405820e+00 # H1O EG + 1765 177 3 0.0400 2.843297e+01 2.954174e+01 3.931900e+00 # H1O EG + 1766 177 3 0.0400 3.008509e+01 3.137560e+01 4.055713e+00 # H1O EG + 1767 177 2 1.5019 2.815480e+01 3.219810e+01 4.170379e+00 # OHG EG DC + 1768 177 3 0.0400 2.945849e+01 3.204313e+01 2.529633e+00 # H1O EG + 1769 177 4 0.3750 2.940104e+01 2.848091e+01 2.032725e+00 # HOG EG + 1770 177 4 0.3750 2.849043e+01 3.310396e+01 4.428808e+00 # HOG EG + 1771 178 1 2.3822 3.243691e+01 9.601671e+00 2.541552e+01 # CTO EG DC + 1772 178 1 2.3822 3.175615e+01 9.167433e+00 2.670331e+01 # CTO EG DC + 1773 178 2 1.5019 3.216508e+01 8.615287e+00 2.436004e+01 # OHG EG DC + 1774 178 3 0.0400 3.351241e+01 9.671835e+00 2.557827e+01 # H1O EG + 1775 178 3 0.0400 3.205186e+01 1.057475e+01 2.511063e+01 # H1O EG + 1776 178 3 0.0400 3.068065e+01 9.097269e+00 2.654057e+01 # H1O EG + 1777 178 2 1.5019 3.202799e+01 1.015382e+01 2.775880e+01 # OHG EG DC + 1778 178 3 0.0400 3.214120e+01 8.194359e+00 2.700820e+01 # H1O EG + 1779 178 4 0.3750 3.261295e+01 8.900970e+00 2.351281e+01 # HOG EG + 1780 178 4 0.3750 3.158011e+01 9.868134e+00 2.860602e+01 # HOG EG + 1781 179 1 2.3822 2.747876e+01 1.692579e+01 2.028942e+01 # CTO EG DC + 1782 179 1 2.3822 2.636005e+01 1.653410e+01 2.124099e+01 # CTO EG DC + 1783 179 2 1.5019 2.781815e+01 1.578022e+01 1.943305e+01 # OHG EG DC + 1784 179 3 0.0400 2.835685e+01 1.722286e+01 2.086284e+01 # H1O EG + 1785 179 3 0.0400 2.715237e+01 1.775946e+01 1.966767e+01 # H1O EG + 1786 179 3 0.0400 2.548196e+01 1.623704e+01 2.066757e+01 # H1O EG + 1787 179 2 1.5019 2.602066e+01 1.767967e+01 2.209736e+01 # OHG EG DC + 1788 179 3 0.0400 2.668644e+01 1.570044e+01 2.186274e+01 # H1O EG + 1789 179 4 0.3750 2.855414e+01 1.603791e+01 1.880702e+01 # HOG EG + 1790 179 4 0.3750 2.528467e+01 1.742198e+01 2.272339e+01 # HOG EG + 1791 180 1 2.3822 1.972813e+01 2.775580e+01 4.692099e+00 # CTO EG DC + 1792 180 1 2.3822 1.989898e+01 2.893679e+01 3.750562e+00 # CTO EG DC + 1793 180 2 1.5019 1.972506e+01 2.650675e+01 3.917011e+00 # OHG EG DC + 1794 180 3 0.0400 1.878437e+01 2.785201e+01 5.228904e+00 # H1O EG + 1795 180 3 0.0400 2.055147e+01 2.773768e+01 5.406158e+00 # H1O EG + 1796 180 3 0.0400 2.084274e+01 2.884058e+01 3.213757e+00 # H1O EG + 1797 180 2 1.5019 1.990205e+01 3.018584e+01 4.525650e+00 # OHG EG DC + 1798 180 3 0.0400 1.907564e+01 2.895492e+01 3.036503e+00 # H1O EG + 1799 180 4 0.3750 1.961265e+01 2.572979e+01 4.536443e+00 # HOG EG + 1800 180 4 0.3750 2.001446e+01 3.096280e+01 3.906218e+00 # HOG EG + 1801 181 1 2.3822 8.380132e+00 1.735777e+01 1.296868e+01 # CTO EG DC + 1802 181 1 2.3822 9.790005e+00 1.783817e+01 1.327177e+01 # CTO EG DC + 1803 181 2 1.5019 7.520622e+00 1.758963e+01 1.413846e+01 # OHG EG DC + 1804 181 3 0.0400 8.400289e+00 1.629249e+01 1.273870e+01 # H1O EG + 1805 181 3 0.0400 7.984836e+00 1.790612e+01 1.211361e+01 # H1O EG + 1806 181 3 0.0400 9.769848e+00 1.890345e+01 1.350175e+01 # H1O EG + 1807 181 2 1.5019 1.064951e+01 1.760631e+01 1.210199e+01 # OHG EG DC + 1808 181 3 0.0400 1.018530e+01 1.728982e+01 1.412684e+01 # H1O EG + 1809 181 4 0.3750 6.593074e+00 1.727357e+01 1.393905e+01 # HOG EG + 1810 181 4 0.3750 1.157706e+01 1.792237e+01 1.230140e+01 # HOG EG + 1811 182 1 2.3822 1.771110e+01 1.342950e+01 1.445454e+01 # CTO EG DC + 1812 182 1 2.3822 1.746284e+01 1.294546e+01 1.303522e+01 # CTO EG DC + 1813 182 2 1.5019 1.745012e+01 1.487402e+01 1.453306e+01 # OHG EG DC + 1814 182 3 0.0400 1.874710e+01 1.323248e+01 1.473019e+01 # H1O EG + 1815 182 3 0.0400 1.704689e+01 1.290303e+01 1.513993e+01 # H1O EG + 1816 182 3 0.0400 1.642684e+01 1.314249e+01 1.275958e+01 # H1O EG + 1817 182 2 1.5019 1.772381e+01 1.150095e+01 1.295670e+01 # OHG EG DC + 1818 182 3 0.0400 1.812705e+01 1.347194e+01 1.234984e+01 # H1O EG + 1819 182 4 0.3750 1.761344e+01 1.519247e+01 1.546683e+01 # HOG EG + 1820 182 4 0.3750 1.756049e+01 1.118250e+01 1.202294e+01 # HOG EG + 1821 183 1 2.3822 2.270151e+01 2.343008e+01 2.606769e+01 # CTO EG DC + 1822 183 1 2.3822 2.171064e+01 2.230329e+01 2.582496e+01 # CTO EG DC + 1823 183 2 1.5019 2.380773e+01 2.293945e+01 2.690224e+01 # OHG EG DC + 1824 183 3 0.0400 2.219958e+01 2.425248e+01 2.657742e+01 # H1O EG + 1825 183 3 0.0400 2.309475e+01 2.378065e+01 2.511346e+01 # H1O EG + 1826 183 3 0.0400 2.221257e+01 2.148089e+01 2.531523e+01 # H1O EG + 1827 183 2 1.5019 2.060442e+01 2.279391e+01 2.499041e+01 # OHG EG DC + 1828 183 3 0.0400 2.131740e+01 2.195272e+01 2.677919e+01 # H1O EG + 1829 183 4 0.3750 2.445962e+01 2.368076e+01 2.706193e+01 # HOG EG + 1830 183 4 0.3750 1.995254e+01 2.205260e+01 2.483072e+01 # HOG EG + 1831 184 1 2.3822 2.924229e+01 5.269668e+00 2.844137e+01 # CTO EG DC + 1832 184 1 2.3822 2.972541e+01 3.969161e+00 2.782034e+01 # CTO EG DC + 1833 184 2 1.5019 2.795443e+01 5.043942e+00 2.911319e+01 # OHG EG DC + 1834 184 3 0.0400 2.911796e+01 6.021090e+00 2.766162e+01 # H1O EG + 1835 184 3 0.0400 2.997464e+01 5.619545e+00 2.916894e+01 # H1O EG + 1836 184 3 0.0400 2.984974e+01 3.217739e+00 2.860008e+01 # H1O EG + 1837 184 2 1.5019 3.101328e+01 4.194887e+00 2.714851e+01 # OHG EG DC + 1838 184 3 0.0400 2.899307e+01 3.619284e+00 2.709277e+01 # H1O EG + 1839 184 4 0.3750 2.763658e+01 5.899539e+00 2.952176e+01 # HOG EG + 1840 184 4 0.3750 3.133112e+01 3.339290e+00 2.673994e+01 # HOG EG + 1841 185 1 2.3822 2.998144e+01 3.036056e+01 2.197259e+01 # CTO EG DC + 1842 185 1 2.3822 2.927915e+01 3.151519e+01 2.266829e+01 # CTO EG DC + 1843 185 2 1.5019 2.919667e+01 2.913030e+01 2.215011e+01 # OHG EG DC + 1844 185 3 0.0400 3.097274e+01 3.022410e+01 2.240480e+01 # H1O EG + 1845 185 3 0.0400 3.007638e+01 3.058007e+01 2.090915e+01 # H1O EG + 1846 185 3 0.0400 2.828785e+01 3.165165e+01 2.223608e+01 # H1O EG + 1847 185 2 1.5019 3.006393e+01 3.274544e+01 2.249077e+01 # OHG EG DC + 1848 185 3 0.0400 2.918421e+01 3.129568e+01 2.373173e+01 # H1O EG + 1849 185 4 0.3750 2.965870e+01 2.837067e+01 2.169241e+01 # HOG EG + 1850 185 4 0.3750 2.960189e+01 3.350508e+01 2.294846e+01 # HOG EG + 1851 186 1 2.3822 1.422601e+01 2.550240e+01 1.096046e+01 # CTO EG DC + 1852 186 1 2.3822 1.463626e+01 2.405187e+01 1.076532e+01 # CTO EG DC + 1853 186 2 1.5019 1.432686e+01 2.585356e+01 1.238434e+01 # OHG EG DC + 1854 186 3 0.0400 1.319771e+01 2.563793e+01 1.062530e+01 # H1O EG + 1855 186 3 0.0400 1.488492e+01 2.614813e+01 1.037997e+01 # H1O EG + 1856 186 3 0.0400 1.566456e+01 2.391634e+01 1.110048e+01 # H1O EG + 1857 186 2 1.5019 1.453541e+01 2.370071e+01 9.341444e+00 # OHG EG DC + 1858 186 3 0.0400 1.397735e+01 2.340614e+01 1.134581e+01 # H1O EG + 1859 186 4 0.3750 1.405696e+01 2.680785e+01 1.251272e+01 # HOG EG + 1860 186 4 0.3750 1.480531e+01 2.274642e+01 9.213059e+00 # HOG EG + 1861 187 1 2.3822 2.782771e+01 1.180706e+01 2.280632e+01 # CTO EG DC + 1862 187 1 2.3822 2.647918e+01 1.139786e+01 2.337589e+01 # CTO EG DC + 1863 187 2 1.5019 2.762691e+01 1.254010e+01 2.154805e+01 # OHG EG DC + 1864 187 3 0.0400 2.842750e+01 1.091705e+01 2.261597e+01 # H1O EG + 1865 187 3 0.0400 2.834522e+01 1.244740e+01 2.352064e+01 # H1O EG + 1866 187 3 0.0400 2.587939e+01 1.228787e+01 2.356623e+01 # H1O EG + 1867 187 2 1.5019 2.667997e+01 1.066482e+01 2.463416e+01 # OHG EG DC + 1868 187 3 0.0400 2.596167e+01 1.075753e+01 2.266156e+01 # H1O EG + 1869 187 4 0.3750 2.851411e+01 1.280931e+01 2.117333e+01 # HOG EG + 1870 187 4 0.3750 2.579278e+01 1.039561e+01 2.500888e+01 # HOG EG + 1871 188 1 2.3822 1.009169e+01 2.673018e+01 1.647383e+01 # CTO EG DC + 1872 188 1 2.3822 1.093107e+01 2.778657e+01 1.577391e+01 # CTO EG DC + 1873 188 2 1.5019 8.856345e+00 2.734304e+01 1.698297e+01 # OHG EG DC + 1874 188 3 0.0400 1.065675e+01 2.630839e+01 1.730503e+01 # H1O EG + 1875 188 3 0.0400 9.839859e+00 2.593892e+01 1.576772e+01 # H1O EG + 1876 188 3 0.0400 1.036601e+01 2.820836e+01 1.494270e+01 # H1O EG + 1877 188 2 1.5019 1.216641e+01 2.717371e+01 1.526477e+01 # OHG EG DC + 1878 188 3 0.0400 1.118290e+01 2.857783e+01 1.648001e+01 # H1O EG + 1879 188 4 0.3750 8.304123e+00 2.664804e+01 1.744344e+01 # HOG EG + 1880 188 4 0.3750 1.271863e+01 2.786870e+01 1.480429e+01 # HOG EG + 1881 189 1 2.3822 2.551062e+01 3.271452e+01 3.169027e+01 # CTO EG DC + 1882 189 1 2.3822 2.407439e+01 3.230681e+01 3.197557e+01 # CTO EG DC + 1883 189 2 1.5019 2.636820e+01 3.152060e+01 3.168690e+01 # OHG EG DC + 1884 189 3 0.0400 2.585286e+01 3.340488e+01 3.246123e+01 # H1O EG + 1885 189 3 0.0400 2.556389e+01 3.320225e+01 3.071693e+01 # H1O EG + 1886 189 3 0.0400 2.373215e+01 3.161645e+01 3.120460e+01 # H1O EG + 1887 189 2 1.5019 2.321682e+01 3.350073e+01 3.197894e+01 # OHG EG DC + 1888 189 3 0.0400 2.402112e+01 3.181908e+01 3.294890e+01 # H1O EG + 1889 189 4 0.3750 2.731309e+01 3.178883e+01 3.149920e+01 # HOG EG + 1890 189 4 0.3750 2.227192e+01 3.323250e+01 3.216664e+01 # HOG EG + 1891 190 1 2.3822 1.781575e+01 1.296581e+01 3.775773e+00 # CTO EG DC + 1892 190 1 2.3822 1.762484e+01 1.271765e+01 5.263177e+00 # CTO EG DC + 1893 190 2 1.5019 1.657260e+01 1.264272e+01 3.060863e+00 # OHG EG DC + 1894 190 3 0.0400 1.862317e+01 1.233587e+01 3.402479e+00 # H1O EG + 1895 190 3 0.0400 1.806721e+01 1.401354e+01 3.611031e+00 # H1O EG + 1896 190 3 0.0400 1.681742e+01 1.334759e+01 5.636471e+00 # H1O EG + 1897 190 2 1.5019 1.886799e+01 1.304074e+01 5.978087e+00 # OHG EG DC + 1898 190 3 0.0400 1.737338e+01 1.166993e+01 5.427919e+00 # H1O EG + 1899 190 4 0.3750 1.669819e+01 1.280599e+01 2.082308e+00 # HOG EG + 1900 190 4 0.3750 1.874239e+01 1.287748e+01 6.956642e+00 # HOG EG + 1901 191 1 2.3822 2.901567e+01 3.834318e+00 1.580328e+01 # CTO EG DC + 1902 191 1 2.3822 3.033586e+01 3.882435e+00 1.655507e+01 # CTO EG DC + 1903 191 2 1.5019 2.855263e+01 5.203770e+00 1.553665e+01 # OHG EG DC + 1904 191 3 0.0400 2.827295e+01 3.310964e+00 1.640541e+01 # H1O EG + 1905 191 3 0.0400 2.915368e+01 3.307672e+00 1.485898e+01 # H1O EG + 1906 191 3 0.0400 3.107859e+01 4.405789e+00 1.595294e+01 # H1O EG + 1907 191 2 1.5019 3.079891e+01 2.512983e+00 1.682170e+01 # OHG EG DC + 1908 191 3 0.0400 3.019785e+01 4.409082e+00 1.749937e+01 # H1O EG + 1909 191 4 0.3750 2.768409e+01 5.172114e+00 1.504205e+01 # HOG EG + 1910 191 4 0.3750 3.166745e+01 2.544640e+00 1.731630e+01 # HOG EG + 1911 192 1 2.3822 2.875896e+01 3.425054e+00 8.827680e+00 # CTO EG DC + 1912 192 1 2.3822 2.833718e+01 2.725852e+00 1.010972e+01 # CTO EG DC + 1913 192 2 1.5019 3.001732e+01 4.150055e+00 9.055290e+00 # OHG EG DC + 1914 192 3 0.0400 2.798395e+01 4.129431e+00 8.525487e+00 # H1O EG + 1915 192 3 0.0400 2.890378e+01 2.685204e+00 8.040439e+00 # H1O EG + 1916 192 3 0.0400 2.911219e+01 2.021475e+00 1.041191e+01 # H1O EG + 1917 192 2 1.5019 2.707882e+01 2.000852e+00 9.882110e+00 # OHG EG DC + 1918 192 3 0.0400 2.819236e+01 3.465703e+00 1.089696e+01 # H1O EG + 1919 192 4 0.3750 3.029480e+01 4.610056e+00 8.211843e+00 # HOG EG + 1920 192 4 0.3750 2.680134e+01 1.540851e+00 1.072556e+01 # HOG EG + 1921 193 1 2.3822 1.805309e+01 1.720903e+01 2.517048e+01 # CTO EG DC + 1922 193 1 2.3822 1.893850e+01 1.843770e+01 2.530008e+01 # CTO EG DC + 1923 193 2 1.5019 1.665121e+01 1.762736e+01 2.502682e+01 # OHG EG DC + 1924 193 3 0.0400 1.815744e+01 1.658974e+01 2.606137e+01 # H1O EG + 1925 193 3 0.0400 1.835239e+01 1.663578e+01 2.429304e+01 # H1O EG + 1926 193 3 0.0400 1.883415e+01 1.905699e+01 2.440919e+01 # H1O EG + 1927 193 2 1.5019 2.034038e+01 1.801937e+01 2.544374e+01 # OHG EG DC + 1928 193 3 0.0400 1.863920e+01 1.901095e+01 2.617753e+01 # H1O EG + 1929 193 4 0.3750 1.606870e+01 1.681902e+01 2.494156e+01 # HOG EG + 1930 193 4 0.3750 2.092288e+01 1.882771e+01 2.552900e+01 # HOG EG + 1931 194 1 2.3822 5.820166e+00 1.028542e+01 9.435571e+00 # CTO EG DC + 1932 194 1 2.3822 5.707626e+00 1.179335e+01 9.281015e+00 # CTO EG DC + 1933 194 2 1.5019 4.492517e+00 9.675213e+00 9.274639e+00 # OHG EG DC + 1934 194 3 0.0400 6.210432e+00 1.004925e+01 1.042553e+01 # H1O EG + 1935 194 3 0.0400 6.495164e+00 9.891173e+00 8.675934e+00 # H1O EG + 1936 194 3 0.0400 5.317359e+00 1.202951e+01 8.291058e+00 # H1O EG + 1937 194 2 1.5019 7.035275e+00 1.240355e+01 9.441947e+00 # OHG EG DC + 1938 194 3 0.0400 5.032627e+00 1.218759e+01 1.004065e+01 # H1O EG + 1939 194 4 0.3750 4.566556e+00 8.683155e+00 9.376321e+00 # HOG EG + 1940 194 4 0.3750 6.961235e+00 1.339561e+01 9.340265e+00 # HOG EG + 1941 195 1 2.3822 2.519059e+01 3.168876e+01 2.492330e+01 # CTO EG DC + 1942 195 1 2.3822 2.466738e+01 3.286961e+01 2.412191e+01 # CTO EG DC + 1943 195 2 1.5019 2.620138e+01 3.215618e+01 2.588284e+01 # OHG EG DC + 1944 195 3 0.0400 2.564065e+01 3.096134e+01 2.424772e+01 # H1O EG + 1945 195 3 0.0400 2.436676e+01 3.122158e+01 2.546288e+01 # H1O EG + 1946 195 3 0.0400 2.421732e+01 3.359703e+01 2.479749e+01 # H1O EG + 1947 195 2 1.5019 2.365658e+01 3.240219e+01 2.316237e+01 # OHG EG DC + 1948 195 3 0.0400 2.549121e+01 3.333679e+01 2.358233e+01 # H1O EG + 1949 195 4 0.3750 2.654560e+01 3.137930e+01 2.641007e+01 # HOG EG + 1950 195 4 0.3750 2.331237e+01 3.317907e+01 2.263514e+01 # HOG EG + 1951 196 1 2.3822 2.160117e+01 1.599002e+01 2.853429e+01 # CTO EG DC + 1952 196 1 2.3822 2.199397e+01 1.517360e+01 2.975476e+01 # CTO EG DC + 1953 196 2 1.5019 2.122825e+01 1.508486e+01 2.743769e+01 # OHG EG DC + 1954 196 3 0.0400 2.244333e+01 1.660845e+01 2.822379e+01 # H1O EG + 1955 196 3 0.0400 2.075344e+01 1.662906e+01 2.878145e+01 # H1O EG + 1956 196 3 0.0400 2.115181e+01 1.455517e+01 3.006526e+01 # H1O EG + 1957 196 2 1.5019 2.236689e+01 1.607875e+01 3.085136e+01 # OHG EG DC + 1958 196 3 0.0400 2.284170e+01 1.453456e+01 2.950759e+01 # H1O EG + 1959 196 4 0.3750 2.096983e+01 1.562198e+01 2.663474e+01 # HOG EG + 1960 196 4 0.3750 2.262531e+01 1.554163e+01 3.165430e+01 # HOG EG + 1961 197 1 2.3822 1.278786e+01 5.566967e+00 3.869820e+00 # CTO EG DC + 1962 197 1 2.3822 1.343796e+01 6.562276e+00 2.922654e+00 # CTO EG DC + 1963 197 2 1.5019 1.176001e+01 6.249448e+00 4.668969e+00 # OHG EG DC + 1964 197 3 0.0400 1.354463e+01 5.148368e+00 4.533271e+00 # H1O EG + 1965 197 3 0.0400 1.232638e+01 4.764752e+00 3.293983e+00 # H1O EG + 1966 197 3 0.0400 1.268119e+01 6.980875e+00 2.259203e+00 # H1O EG + 1967 197 2 1.5019 1.446581e+01 5.879795e+00 2.123505e+00 # OHG EG DC + 1968 197 3 0.0400 1.389945e+01 7.364491e+00 3.498491e+00 # H1O EG + 1969 197 4 0.3750 1.133231e+01 5.594639e+00 5.292104e+00 # HOG EG + 1970 197 4 0.3750 1.489352e+01 6.534604e+00 1.500370e+00 # HOG EG + 1971 198 1 2.3822 2.678023e+01 2.035169e+01 1.586654e+01 # CTO EG DC + 1972 198 1 2.3822 2.765783e+01 1.971757e+01 1.693336e+01 # CTO EG DC + 1973 198 2 1.5019 2.538892e+01 1.991512e+01 1.605243e+01 # OHG EG DC + 1974 198 3 0.0400 2.712791e+01 2.004526e+01 1.487997e+01 # H1O EG + 1975 198 3 0.0400 2.683399e+01 2.143723e+01 1.594915e+01 # H1O EG + 1976 198 3 0.0400 2.731015e+01 2.002401e+01 1.791993e+01 # H1O EG + 1977 198 2 1.5019 2.904914e+01 2.015414e+01 1.674747e+01 # OHG EG DC + 1978 198 3 0.0400 2.760408e+01 1.863204e+01 1.685074e+01 # H1O EG + 1979 198 4 0.3750 2.481155e+01 2.033231e+01 1.535057e+01 # HOG EG + 1980 198 4 0.3750 2.962651e+01 1.973695e+01 1.744932e+01 # HOG EG + 1981 199 1 2.3822 2.421775e+01 1.338284e+01 2.647650e+01 # CTO EG DC + 1982 199 1 2.3822 2.459993e+01 1.483918e+01 2.626819e+01 # CTO EG DC + 1983 199 2 1.5019 2.531124e+01 1.268226e+01 2.716525e+01 # OHG EG DC + 1984 199 3 0.0400 2.403722e+01 1.291222e+01 2.551005e+01 # H1O EG + 1985 199 3 0.0400 2.331301e+01 1.332709e+01 2.708185e+01 # H1O EG + 1986 199 3 0.0400 2.478046e+01 1.530980e+01 2.723464e+01 # H1O EG + 1987 199 2 1.5019 2.350644e+01 1.553976e+01 2.557944e+01 # OHG EG DC + 1988 199 3 0.0400 2.550467e+01 1.489493e+01 2.566285e+01 # H1O EG + 1989 199 4 0.3750 2.505981e+01 1.172413e+01 2.730230e+01 # HOG EG + 1990 199 4 0.3750 2.375787e+01 1.649789e+01 2.544239e+01 # HOG EG + 1991 200 1 2.3822 1.283770e+01 2.077153e+01 1.822798e+01 # CTO EG DC + 1992 200 1 2.3822 1.170371e+01 2.059464e+01 1.922456e+01 # CTO EG DC + 1993 200 2 1.5019 1.238765e+01 2.162502e+01 1.711896e+01 # OHG EG DC + 1994 200 3 0.0400 1.313527e+01 1.979783e+01 1.783879e+01 # H1O EG + 1995 200 3 0.0400 1.368819e+01 2.123941e+01 1.872383e+01 # H1O EG + 1996 200 3 0.0400 1.140615e+01 2.156834e+01 1.961375e+01 # H1O EG + 1997 200 2 1.5019 1.215376e+01 1.974115e+01 2.033358e+01 # OHG EG DC + 1998 200 3 0.0400 1.085323e+01 2.012676e+01 1.872871e+01 # H1O EG + 1999 200 4 0.3750 1.313370e+01 2.174140e+01 1.646331e+01 # HOG EG + 2000 200 4 0.3750 1.140771e+01 1.962478e+01 2.098923e+01 # HOG EG + 2001 1 5 -2.2372 2.751050e+01 2.273718e+01 2.644208e+01 # CTO EG DP + 2002 1 5 -2.2372 2.791563e+01 2.325773e+01 2.780442e+01 # CTO EG DP + 2003 1 6 -2.1019 2.876655e+01 2.248429e+01 2.569569e+01 # OHG EG DP + 2004 1 6 -2.1019 2.671316e+01 2.347872e+01 2.862486e+01 # OHG EG DP + 2005 2 5 -2.2372 6.598269e+00 2.910675e+01 3.087157e+01 # CTO EG DP + 2006 2 5 -2.2372 5.071546e+00 2.900109e+01 3.084329e+01 # CTO EG DP + 2007 2 6 -2.1019 7.243893e+00 2.782805e+01 3.096092e+01 # OHG EG DP + 2008 2 6 -2.1019 4.433468e+00 3.027892e+01 3.087287e+01 # OHG EG DP + 2009 3 5 -2.2372 2.200517e+01 1.042386e+01 1.043869e+01 # CTO EG DP + 2010 3 5 -2.2372 2.063177e+01 1.095479e+01 1.019981e+01 # CTO EG DP + 2011 3 6 -2.1019 2.292107e+01 1.151597e+01 1.080607e+01 # OHG EG DP + 2012 3 6 -2.1019 1.978246e+01 9.820637e+00 9.799830e+00 # OHG EG DP + 2013 4 5 -2.2372 1.916189e+01 9.072298e+00 3.882086e+00 # CTO EG DP + 2014 4 5 -2.2372 1.927600e+01 7.609071e+00 3.593727e+00 # CTO EG DP + 2015 4 6 -2.1019 2.050481e+01 9.621507e+00 4.301650e+00 # OHG EG DP + 2016 4 6 -2.1019 1.798379e+01 7.078016e+00 3.085199e+00 # OHG EG DP + 2017 5 5 -2.2372 2.086476e+01 7.595242e+00 3.262224e+01 # CTO EG DP + 2018 5 5 -2.2372 2.128992e+01 7.081684e+00 3.120521e+01 # CTO EG DP + 2019 5 6 -2.1019 2.105746e+01 9.067261e+00 3.256784e+01 # OHG EG DP + 2020 5 6 -2.1019 2.100982e+01 5.622148e+00 3.120151e+01 # OHG EG DP + 2021 6 5 -2.2372 1.334442e+01 6.672489e+00 1.426494e+01 # CTO EG DP + 2022 6 5 -2.2372 1.204098e+01 7.349435e+00 1.374143e+01 # CTO EG DP + 2023 6 6 -2.1019 1.452563e+01 7.572397e+00 1.391098e+01 # OHG EG DP + 2024 6 6 -2.1019 1.095665e+01 6.577065e+00 1.419698e+01 # OHG EG DP + 2025 7 5 -2.2372 1.652045e+01 3.159331e+01 3.202663e+01 # CTO EG DP + 2026 7 5 -2.2372 1.764107e+01 3.230457e+01 3.276257e+01 # CTO EG DP + 2027 7 6 -2.1019 1.547260e+01 3.122961e+01 3.295006e+01 # OHG EG DP + 2028 7 6 -2.1019 1.870265e+01 3.257578e+01 3.179499e+01 # OHG EG DP + 2029 8 5 -2.2372 1.141905e+01 2.330013e+01 2.409137e+01 # CTO EG DP + 2030 8 5 -2.2372 1.094194e+01 2.204205e+01 2.330545e+01 # CTO EG DP + 2031 8 6 -2.1019 1.278524e+01 2.310001e+01 2.450193e+01 # OHG EG DP + 2032 8 6 -2.1019 9.600159e+00 2.224314e+01 2.288762e+01 # OHG EG DP + 2033 9 5 -2.2372 3.198555e+01 1.666915e+01 2.355331e+01 # CTO EG DP + 2034 9 5 -2.2372 3.089429e+01 1.569489e+01 2.311269e+01 # CTO EG DP + 2035 9 6 -2.1019 3.209728e+01 1.659359e+01 2.508877e+01 # OHG EG DP + 2036 9 6 -2.1019 3.081813e+01 1.570265e+01 2.168624e+01 # OHG EG DP + 2037 10 5 -2.2372 2.586144e+01 1.419449e+01 3.072401e+01 # CTO EG DP + 2038 10 5 -2.2372 2.666220e+01 1.299982e+01 3.084220e+01 # CTO EG DP + 2039 10 6 -2.1019 2.659418e+01 1.538025e+01 3.119796e+01 # OHG EG DP + 2040 10 6 -2.1019 2.597117e+01 1.183429e+01 3.043125e+01 # OHG EG DP + 2041 11 5 -2.2372 1.110830e+01 3.134062e+01 1.883277e+01 # CTO EG DP + 2042 11 5 -2.2372 9.962292e+00 3.051556e+01 1.926422e+01 # CTO EG DP + 2043 11 6 -2.1019 1.071154e+01 3.210121e+01 1.755917e+01 # OHG EG DP + 2044 11 6 -2.1019 1.037388e+01 2.972053e+01 2.046080e+01 # OHG EG DP + 2045 12 5 -2.2372 2.308437e+01 8.834722e+00 1.514415e+01 # CTO EG DP + 2046 12 5 -2.2372 2.355342e+01 1.016601e+01 1.460634e+01 # CTO EG DP + 2047 12 6 -2.1019 2.392740e+01 7.758226e+00 1.460207e+01 # OHG EG DP + 2048 12 6 -2.1019 2.267188e+01 1.120251e+01 1.518473e+01 # OHG EG DP + 2049 13 5 -2.2372 1.037114e+01 3.019305e+01 2.416489e+01 # CTO EG DP + 2050 13 5 -2.2372 1.041255e+01 3.157093e+01 2.360253e+01 # CTO EG DP + 2051 13 6 -2.1019 1.084574e+01 2.920335e+01 2.320137e+01 # OHG EG DP + 2052 13 6 -2.1019 9.914105e+00 3.248020e+01 2.462549e+01 # OHG EG DP + 2053 14 5 -2.2372 1.936149e+01 2.956132e+01 2.107904e+01 # CTO EG DP + 2054 14 5 -2.2372 1.869990e+01 2.841958e+01 2.198672e+01 # CTO EG DP + 2055 14 6 -2.1019 2.025992e+01 3.032079e+01 2.192729e+01 # OHG EG DP + 2056 14 6 -2.1019 1.776048e+01 2.766971e+01 2.125890e+01 # OHG EG DP + 2057 15 5 -2.2372 3.430526e+00 1.096491e+01 2.272977e+01 # CTO EG DP + 2058 15 5 -2.2372 4.251738e+00 1.113600e+01 2.396378e+01 # CTO EG DP + 2059 15 6 -2.1019 2.848636e+00 9.581930e+00 2.264457e+01 # OHG EG DP + 2060 15 6 -2.1019 4.858285e+00 1.241484e+01 2.399939e+01 # OHG EG DP + 2061 16 5 -2.2372 2.753685e+01 2.683606e+01 2.578346e+01 # CTO EG DP + 2062 16 5 -2.2372 2.805346e+01 2.817008e+01 2.529296e+01 # CTO EG DP + 2063 16 6 -2.1019 2.598336e+01 2.689956e+01 2.576652e+01 # OHG EG DP + 2064 16 6 -2.1019 2.953979e+01 2.808620e+01 2.530880e+01 # OHG EG DP + 2065 17 5 -2.2372 2.306107e+00 1.894415e+01 9.541567e+00 # CTO EG DP + 2066 17 5 -2.2372 2.704369e+00 1.818070e+01 1.082781e+01 # CTO EG DP + 2067 17 6 -2.1019 3.408898e+00 1.908767e+01 8.641583e+00 # OHG EG DP + 2068 17 6 -2.1019 1.531681e+00 1.804377e+01 1.166065e+01 # OHG EG DP + 2069 18 5 -2.2372 2.791076e+01 1.388282e+01 5.766368e+00 # CTO EG DP + 2070 18 5 -2.2372 2.913163e+01 1.328030e+01 6.452494e+00 # CTO EG DP + 2071 18 6 -2.1019 2.786666e+01 1.522298e+01 6.130263e+00 # OHG EG DP + 2072 18 6 -2.1019 2.921751e+01 1.182850e+01 6.179297e+00 # OHG EG DP + 2073 19 5 -2.2372 1.055044e+01 8.170089e+00 7.612713e+00 # CTO EG DP + 2074 19 5 -2.2372 9.361029e+00 7.932430e+00 6.707990e+00 # CTO EG DP + 2075 19 6 -2.1019 1.120655e+01 9.447787e+00 7.349414e+00 # OHG EG DP + 2076 19 6 -2.1019 8.725082e+00 6.678481e+00 7.028624e+00 # OHG EG DP + 2077 20 5 -2.2372 3.065537e+01 3.252491e+01 2.630415e+01 # CTO EG DP + 2078 20 5 -2.2372 3.198807e+01 3.215422e+01 2.558311e+01 # CTO EG DP + 2079 20 6 -2.1019 3.000417e+01 3.128895e+01 2.669515e+01 # OHG EG DP + 2080 20 6 -2.1019 3.262580e+01 3.349333e+01 2.515441e+01 # OHG EG DP + 2081 21 5 -2.2372 1.825214e+01 8.470042e+00 1.772649e+01 # CTO EG DP + 2082 21 5 -2.2372 1.962231e+01 8.822618e+00 1.808623e+01 # CTO EG DP + 2083 21 6 -2.1019 1.791894e+01 8.746254e+00 1.631122e+01 # OHG EG DP + 2084 21 6 -2.1019 1.987500e+01 8.463631e+00 1.941154e+01 # OHG EG DP + 2085 22 5 -2.2372 2.591748e+01 2.898689e+01 2.948676e+01 # CTO EG DP + 2086 22 5 -2.2372 2.505027e+01 2.778056e+01 2.981952e+01 # CTO EG DP + 2087 22 6 -2.1019 2.508910e+01 3.021273e+01 2.932953e+01 # OHG EG DP + 2088 22 6 -2.1019 2.592380e+01 2.660241e+01 3.009065e+01 # OHG EG DP + 2089 23 5 -2.2372 1.286733e+01 2.491427e+01 1.980074e+01 # CTO EG DP + 2090 23 5 -2.2372 1.206159e+01 2.584291e+01 2.074186e+01 # CTO EG DP + 2091 23 6 -2.1019 1.416528e+01 2.557197e+01 1.956471e+01 # OHG EG DP + 2092 23 6 -2.1019 1.078610e+01 2.523720e+01 2.102667e+01 # OHG EG DP + 2093 24 5 -2.2372 2.248638e+01 3.228284e+01 1.394670e+01 # CTO EG DP + 2094 24 5 -2.2372 2.387234e+01 3.215393e+01 1.323649e+01 # CTO EG DP + 2095 24 6 -2.1019 2.202774e+01 3.090530e+01 1.427237e+01 # OHG EG DP + 2096 24 6 -2.1019 2.429950e+01 3.355097e+01 1.281680e+01 # OHG EG DP + 2097 25 5 -2.2372 1.316944e+01 6.826094e+00 2.518466e+01 # CTO EG DP + 2098 25 5 -2.2372 1.185818e+01 7.112707e+00 2.599350e+01 # CTO EG DP + 2099 25 6 -2.1019 1.304711e+01 5.595914e+00 2.451773e+01 # OHG EG DP + 2100 25 6 -2.1019 1.193532e+01 8.444113e+00 2.655551e+01 # OHG EG DP + 2101 26 5 -2.2372 3.002311e+01 1.840545e+01 2.904143e+01 # CTO EG DP + 2102 26 5 -2.2372 3.115119e+01 1.807079e+01 2.813837e+01 # CTO EG DP + 2103 26 6 -2.1019 2.923837e+01 1.709990e+01 2.933470e+01 # OHG EG DP + 2104 26 6 -2.1019 3.193220e+01 1.933627e+01 2.791386e+01 # OHG EG DP + 2105 27 5 -2.2372 1.021568e+01 1.266918e+01 5.953324e+00 # CTO EG DP + 2106 27 5 -2.2372 9.445705e+00 1.339638e+01 7.200139e+00 # CTO EG DP + 2107 27 6 -2.1019 9.650284e+00 1.127855e+01 5.950301e+00 # OHG EG DP + 2108 27 6 -2.1019 9.966587e+00 1.471196e+01 7.245942e+00 # OHG EG DP + 2109 28 5 -2.2372 5.150498e+00 1.489563e+01 2.152349e+01 # CTO EG DP + 2110 28 5 -2.2372 5.512179e+00 1.407993e+01 2.032347e+01 # CTO EG DP + 2111 28 6 -2.1019 6.202619e+00 1.478537e+01 2.248799e+01 # OHG EG DP + 2112 28 6 -2.1019 4.546767e+00 1.421428e+01 1.921626e+01 # OHG EG DP + 2113 29 5 -2.2372 1.010984e+01 3.087014e+01 2.883476e+01 # CTO EG DP + 2114 29 5 -2.2372 9.480838e+00 3.200878e+01 2.959714e+01 # CTO EG DP + 2115 29 6 -2.1019 9.033367e+00 3.004520e+01 2.816700e+01 # OHG EG DP + 2116 29 6 -2.1019 1.064110e+01 3.278809e+01 3.022285e+01 # OHG EG DP + 2117 30 5 -2.2372 3.133552e+01 2.189192e+01 8.770082e+00 # CTO EG DP + 2118 30 5 -2.2372 3.052148e+01 2.312881e+01 8.781602e+00 # CTO EG DP + 2119 30 6 -2.1019 3.089348e+01 2.103973e+01 9.839965e+00 # OHG EG DP + 2120 30 6 -2.1019 3.100661e+01 2.404784e+01 7.639535e+00 # OHG EG DP + 2121 31 5 -2.2372 2.885107e+01 1.174918e+01 2.692297e+01 # CTO EG DP + 2122 31 5 -2.2372 2.860307e+01 1.327052e+01 2.669972e+01 # CTO EG DP + 2123 31 6 -2.1019 2.768132e+01 1.111205e+01 2.745396e+01 # OHG EG DP + 2124 31 6 -2.1019 2.971215e+01 1.396518e+01 2.623018e+01 # OHG EG DP + 2125 32 5 -2.2372 5.127299e+00 2.994130e+01 9.530158e+00 # CTO EG DP + 2126 32 5 -2.2372 3.769616e+00 2.925921e+01 9.486052e+00 # CTO EG DP + 2127 32 6 -2.1019 5.035733e+00 3.136561e+01 9.506641e+00 # OHG EG DP + 2128 32 6 -2.1019 3.898495e+00 2.785628e+01 9.504396e+00 # OHG EG DP + 2129 33 5 -2.2372 8.047961e+00 1.402476e+01 3.075969e+01 # CTO EG DP + 2130 33 5 -2.2372 9.471028e+00 1.386951e+01 3.031491e+01 # CTO EG DP + 2131 33 6 -2.1019 7.778371e+00 1.543760e+01 3.115836e+01 # OHG EG DP + 2132 33 6 -2.1019 9.723039e+00 1.239419e+01 2.997188e+01 # OHG EG DP + 2133 34 5 -2.2372 3.399341e+00 7.702329e+00 5.627482e+00 # CTO EG DP + 2134 34 5 -2.2372 3.228710e+00 7.178398e+00 4.176945e+00 # CTO EG DP + 2135 34 6 -2.1019 2.689741e+00 8.992215e+00 5.756439e+00 # OHG EG DP + 2136 34 6 -2.1019 4.032803e+00 5.892772e+00 4.040372e+00 # OHG EG DP + 2137 35 5 -2.2372 1.862133e+01 3.035147e+01 2.860237e+01 # CTO EG DP + 2138 35 5 -2.2372 1.768735e+01 3.145862e+01 2.807318e+01 # CTO EG DP + 2139 35 6 -2.1019 1.903591e+01 3.068440e+01 2.992822e+01 # OHG EG DP + 2140 35 6 -2.1019 1.716978e+01 3.116051e+01 2.668851e+01 # OHG EG DP + 2141 36 5 -2.2372 3.149499e+01 1.407813e+01 2.920241e+01 # CTO EG DP + 2142 36 5 -2.2372 3.275824e+01 1.361997e+01 2.849437e+01 # CTO EG DP + 2143 36 6 -2.1019 3.196455e+01 1.479964e+01 3.044468e+01 # OHG EG DP + 2144 36 6 -2.1019 3.239482e+01 1.285578e+01 2.732056e+01 # OHG EG DP + 2145 37 5 -2.2372 4.998136e+00 9.073899e+00 1.520894e+01 # CTO EG DP + 2146 37 5 -2.2372 3.494499e+00 9.124193e+00 1.483920e+01 # CTO EG DP + 2147 37 6 -2.1019 5.722296e+00 9.206262e+00 1.398767e+01 # OHG EG DP + 2148 37 6 -2.1019 2.757645e+00 8.983980e+00 1.615053e+01 # OHG EG DP + 2149 38 5 -2.2372 1.737938e+01 2.813143e+01 1.364261e+01 # CTO EG DP + 2150 38 5 -2.2372 1.679550e+01 2.947664e+01 1.357955e+01 # CTO EG DP + 2151 38 6 -2.1019 1.638099e+01 2.719853e+01 1.396646e+01 # OHG EG DP + 2152 38 6 -2.1019 1.792109e+01 3.044033e+01 1.319233e+01 # OHG EG DP + 2153 39 5 -2.2372 2.063483e+01 2.197407e+01 2.137276e+01 # CTO EG DP + 2154 39 5 -2.2372 2.110731e+01 2.301776e+01 2.047403e+01 # CTO EG DP + 2155 39 6 -2.1019 2.176476e+01 2.148287e+01 2.220426e+01 # OHG EG DP + 2156 39 6 -2.1019 2.004781e+01 2.349383e+01 1.957544e+01 # OHG EG DP + 2157 40 5 -2.2372 4.190706e+00 5.491044e+00 1.867516e+01 # CTO EG DP + 2158 40 5 -2.2372 5.634922e+00 5.329735e+00 1.845576e+01 # CTO EG DP + 2159 40 6 -2.1019 3.817613e+00 6.866805e+00 1.866062e+01 # OHG EG DP + 2160 40 6 -2.1019 6.084393e+00 3.990326e+00 1.853779e+01 # OHG EG DP + 2161 41 5 -2.2372 1.266073e+01 7.119343e+00 1.885542e+01 # CTO EG DP + 2162 41 5 -2.2372 1.178331e+01 6.067701e+00 1.950776e+01 # CTO EG DP + 2163 41 6 -2.1019 1.402634e+01 6.556710e+00 1.888572e+01 # OHG EG DP + 2164 41 6 -2.1019 1.037493e+01 6.667869e+00 1.948287e+01 # OHG EG DP + 2165 42 5 -2.2372 2.308503e+01 2.657176e+01 2.191598e+01 # CTO EG DP + 2166 42 5 -2.2372 2.421711e+01 2.606431e+01 2.270697e+01 # CTO EG DP + 2167 42 6 -2.1019 2.298008e+01 2.802239e+01 2.188134e+01 # OHG EG DP + 2168 42 6 -2.1019 2.429081e+01 2.455132e+01 2.278850e+01 # OHG EG DP + 2169 43 5 -2.2372 2.499721e+01 2.982316e+01 1.677870e+01 # CTO EG DP + 2170 43 5 -2.2372 2.373214e+01 2.893565e+01 1.694983e+01 # CTO EG DP + 2171 43 6 -2.1019 2.460965e+01 3.126318e+01 1.671965e+01 # OHG EG DP + 2172 43 6 -2.1019 2.405061e+01 2.748432e+01 1.698337e+01 # OHG EG DP + 2173 44 5 -2.2372 2.102359e+01 2.492664e+01 2.994822e+01 # CTO EG DP + 2174 44 5 -2.2372 2.065551e+01 2.346949e+01 2.991289e+01 # CTO EG DP + 2175 44 6 -2.1019 2.229315e+01 2.514572e+01 3.050634e+01 # OHG EG DP + 2176 44 6 -2.1019 1.932652e+01 2.330752e+01 2.931547e+01 # OHG EG DP + 2177 45 5 -2.2372 1.869767e+01 3.228711e+00 1.068519e+01 # CTO EG DP + 2178 45 5 -2.2372 2.009779e+01 2.679154e+00 1.080559e+01 # CTO EG DP + 2179 45 6 -2.1019 1.797002e+01 2.310435e+00 9.717638e+00 # OHG EG DP + 2180 45 6 -2.1019 2.082579e+01 3.613277e+00 1.173640e+01 # OHG EG DP + 2181 46 5 -2.2372 3.226085e+01 1.316851e+01 1.491484e+01 # CTO EG DP + 2182 46 5 -2.2372 3.258595e+01 1.200471e+01 1.397684e+01 # CTO EG DP + 2183 46 6 -2.1019 3.350461e+01 1.391008e+01 1.521930e+01 # OHG EG DP + 2184 46 6 -2.1019 3.138017e+01 1.125132e+01 1.363873e+01 # OHG EG DP + 2185 47 5 -2.2372 4.362387e+00 2.195255e+01 1.036137e+01 # CTO EG DP + 2186 47 5 -2.2372 5.765357e+00 2.136189e+01 1.043802e+01 # CTO EG DP + 2187 47 6 -2.1019 4.384475e+00 2.341563e+01 1.051640e+01 # OHG EG DP + 2188 47 6 -2.1019 5.736389e+00 1.996134e+01 1.027412e+01 # OHG EG DP + 2189 48 5 -2.2372 5.443063e+00 2.451235e+01 7.516494e+00 # CTO EG DP + 2190 48 5 -2.2372 6.492447e+00 2.515762e+01 8.356063e+00 # CTO EG DP + 2191 48 6 -2.1019 5.786902e+00 2.305593e+01 7.384854e+00 # OHG EG DP + 2192 48 6 -2.1019 6.140444e+00 2.658967e+01 8.560220e+00 # OHG EG DP + 2193 49 5 -2.2372 1.478318e+01 1.935693e+01 1.238465e+01 # CTO EG DP + 2194 49 5 -2.2372 1.459645e+01 1.934557e+01 1.393419e+01 # CTO EG DP + 2195 49 6 -2.1019 1.378709e+01 2.019526e+01 1.178724e+01 # OHG EG DP + 2196 49 6 -2.1019 1.556654e+01 1.854913e+01 1.451008e+01 # OHG EG DP + 2197 50 5 -2.2372 9.650590e+00 3.597246e+00 1.634221e+01 # CTO EG DP + 2198 50 5 -2.2372 9.939440e+00 2.302051e+00 1.706616e+01 # CTO EG DP + 2199 50 6 -2.1019 8.250809e+00 3.608870e+00 1.570011e+01 # OHG EG DP + 2200 50 6 -2.1019 1.130726e+01 2.401113e+00 1.760264e+01 # OHG EG DP + 2201 51 5 -2.2372 1.214935e+01 2.234272e+01 7.002358e+00 # CTO EG DP + 2202 51 5 -2.2372 1.091274e+01 2.177800e+01 6.381905e+00 # CTO EG DP + 2203 51 6 -2.1019 1.237621e+01 2.376269e+01 6.573705e+00 # OHG EG DP + 2204 51 6 -2.1019 1.075511e+01 2.043426e+01 6.801779e+00 # OHG EG DP + 2205 52 5 -2.2372 1.426283e+01 2.976046e+01 2.298968e+01 # CTO EG DP + 2206 52 5 -2.2372 1.466977e+01 3.063488e+01 2.420127e+01 # CTO EG DP + 2207 52 6 -2.1019 1.538898e+01 2.929610e+01 2.228186e+01 # OHG EG DP + 2208 52 6 -2.1019 1.358696e+01 3.111098e+01 2.499890e+01 # OHG EG DP + 2209 53 5 -2.2372 1.429162e+01 3.531235e+00 1.718561e+01 # CTO EG DP + 2210 53 5 -2.2372 1.531195e+01 3.911539e+00 1.620953e+01 # CTO EG DP + 2211 53 6 -2.1019 1.469462e+01 3.841578e+00 1.854401e+01 # OHG EG DP + 2212 53 6 -2.1019 1.498881e+01 3.637476e+00 1.484744e+01 # OHG EG DP + 2213 54 5 -2.2372 2.456797e+01 1.941212e+01 2.757742e+01 # CTO EG DP + 2214 54 5 -2.2372 2.564483e+01 1.963570e+01 2.860790e+01 # CTO EG DP + 2215 54 6 -2.1019 2.496613e+01 1.994038e+01 2.634577e+01 # OHG EG DP + 2216 54 6 -2.1019 2.520879e+01 1.910928e+01 2.992304e+01 # OHG EG DP + 2217 55 5 -2.2372 1.522681e+01 1.080287e+01 1.733330e+01 # CTO EG DP + 2218 55 5 -2.2372 1.512297e+01 1.154311e+01 1.869620e+01 # CTO EG DP + 2219 55 6 -2.1019 1.418087e+01 1.138422e+01 1.644974e+01 # OHG EG DP + 2220 55 6 -2.1019 1.620622e+01 1.097228e+01 1.958108e+01 # OHG EG DP + 2221 56 5 -2.2372 1.740503e+01 2.473159e+01 2.540369e+01 # CTO EG DP + 2222 56 5 -2.2372 1.786474e+01 2.570266e+01 2.653650e+01 # CTO EG DP + 2223 56 6 -2.1019 1.765168e+01 2.539755e+01 2.410970e+01 # OHG EG DP + 2224 56 6 -2.1019 1.759919e+01 2.505460e+01 2.779579e+01 # OHG EG DP + 2225 57 5 -2.2372 2.356371e+01 1.988052e+01 1.916045e+01 # CTO EG DP + 2226 57 5 -2.2372 2.438481e+01 2.003349e+01 2.041841e+01 # CTO EG DP + 2227 57 6 -2.1019 2.361359e+01 1.846779e+01 1.864191e+01 # OHG EG DP + 2228 57 6 -2.1019 2.420874e+01 2.138897e+01 2.087632e+01 # OHG EG DP + 2229 58 5 -2.2372 3.027765e+01 2.299526e+01 1.367991e+01 # CTO EG DP + 2230 58 5 -2.2372 3.177146e+01 2.323610e+01 1.350639e+01 # CTO EG DP + 2231 58 6 -2.1019 2.960315e+01 2.426274e+01 1.322709e+01 # OHG EG DP + 2232 58 6 -2.1019 3.254760e+01 2.198679e+01 1.393849e+01 # OHG EG DP + 2233 59 5 -2.2372 1.111941e+01 3.178296e+01 8.553030e+00 # CTO EG DP + 2234 59 5 -2.2372 1.050148e+01 3.047066e+01 8.151933e+00 # CTO EG DP + 2235 59 6 -2.1019 1.079997e+01 3.209282e+01 9.980707e+00 # OHG EG DP + 2236 59 6 -2.1019 1.081975e+01 3.022523e+01 6.782484e+00 # OHG EG DP + 2237 60 5 -2.2372 2.972790e+00 6.006328e+00 2.525856e+01 # CTO EG DP + 2238 60 5 -2.2372 3.806913e+00 5.146084e+00 2.618708e+01 # CTO EG DP + 2239 60 6 -2.1019 3.790632e+00 6.409260e+00 2.408525e+01 # OHG EG DP + 2240 60 6 -2.1019 3.032878e+00 4.678749e+00 2.735202e+01 # OHG EG DP + 2241 61 5 -2.2372 5.113487e+00 3.196553e+01 2.007999e+01 # CTO EG DP + 2242 61 5 -2.2372 4.415189e+00 3.209383e+01 1.868048e+01 # CTO EG DP + 2243 61 6 -2.1019 6.514786e+00 3.232847e+01 1.991670e+01 # OHG EG DP + 2244 61 6 -2.1019 2.999833e+00 3.170786e+01 1.884560e+01 # OHG EG DP + 2245 62 5 -2.2372 2.554637e+01 2.401495e+01 6.964826e+00 # CTO EG DP + 2246 62 5 -2.2372 2.403850e+01 2.386471e+01 6.994701e+00 # CTO EG DP + 2247 62 6 -2.1019 2.605717e+01 2.417897e+01 8.357469e+00 # OHG EG DP + 2248 62 6 -2.1019 2.356233e+01 2.374979e+01 5.575492e+00 # OHG EG DP + 2249 63 5 -2.2372 8.502089e+00 2.067363e+01 1.618979e+01 # CTO EG DP + 2250 63 5 -2.2372 7.996430e+00 2.201074e+01 1.638281e+01 # CTO EG DP + 2251 63 6 -2.1019 1.003961e+01 2.070984e+01 1.615161e+01 # OHG EG DP + 2252 63 6 -2.1019 6.472421e+00 2.198060e+01 1.639901e+01 # OHG EG DP + 2253 64 5 -2.2372 2.565879e+01 7.713084e+00 1.782261e+01 # CTO EG DP + 2254 64 5 -2.2372 2.678612e+01 8.411100e+00 1.852051e+01 # CTO EG DP + 2255 64 6 -2.1019 2.580397e+01 6.283025e+00 1.797725e+01 # OHG EG DP + 2256 64 6 -2.1019 2.669693e+01 9.838873e+00 1.842872e+01 # OHG EG DP + 2257 65 5 -2.2372 1.698259e+01 6.816862e+00 6.559879e+00 # CTO EG DP + 2258 65 5 -2.2372 1.602449e+01 5.628056e+00 6.802924e+00 # CTO EG DP + 2259 65 6 -2.1019 1.673872e+01 7.849189e+00 7.691177e+00 # OHG EG DP + 2260 65 6 -2.1019 1.625545e+01 4.642082e+00 5.718460e+00 # OHG EG DP + 2261 66 5 -2.2372 2.180599e+01 1.946722e+01 3.062499e+01 # CTO EG DP + 2262 66 5 -2.2372 2.221595e+01 1.931593e+01 3.213620e+01 # CTO EG DP + 2263 66 6 -2.1019 2.035231e+01 1.921657e+01 3.057624e+01 # OHG EG DP + 2264 66 6 -2.1019 2.373159e+01 1.951941e+01 3.220321e+01 # OHG EG DP + 2265 67 5 -2.2372 1.036745e+01 1.724272e+01 2.309973e+01 # CTO EG DP + 2266 67 5 -2.2372 8.860179e+00 1.704071e+01 2.310861e+01 # CTO EG DP + 2267 67 6 -2.1019 1.098987e+01 1.643280e+01 2.425862e+01 # OHG EG DP + 2268 67 6 -2.1019 8.279288e+00 1.786976e+01 2.202624e+01 # OHG EG DP + 2269 68 5 -2.2372 2.461568e+01 8.665536e+00 2.881498e+01 # CTO EG DP + 2270 68 5 -2.2372 2.323596e+01 9.297125e+00 2.851075e+01 # CTO EG DP + 2271 68 6 -2.1019 2.471584e+01 7.519003e+00 2.787306e+01 # OHG EG DP + 2272 68 6 -2.1019 2.319074e+01 1.042230e+01 2.942989e+01 # OHG EG DP + 2273 69 5 -2.2372 1.925616e+01 3.274937e+01 2.388514e+01 # CTO EG DP + 2274 69 5 -2.2372 2.023443e+01 3.234231e+01 2.492776e+01 # CTO EG DP + 2275 69 6 -2.1019 1.844413e+01 3.157869e+01 2.351597e+01 # OHG EG DP + 2276 69 6 -2.1019 2.113763e+01 3.346035e+01 2.525823e+01 # OHG EG DP + 2277 70 5 -2.2372 6.367872e+00 2.536418e+01 3.276094e+01 # CTO EG DP + 2278 70 5 -2.2372 4.899350e+00 2.504489e+01 3.245277e+01 # CTO EG DP + 2279 70 6 -2.1019 6.462709e+00 2.673877e+01 3.327456e+01 # OHG EG DP + 2280 70 6 -2.1019 4.801088e+00 2.370347e+01 3.189291e+01 # OHG EG DP + 2281 71 5 -2.2372 1.660970e+01 1.702430e+01 2.923496e+01 # CTO EG DP + 2282 71 5 -2.2372 1.632725e+01 1.837661e+01 2.996408e+01 # CTO EG DP + 2283 71 6 -2.1019 1.794180e+01 1.658282e+01 2.961766e+01 # OHG EG DP + 2284 71 6 -2.1019 1.497262e+01 1.880999e+01 2.959869e+01 # OHG EG DP + 2285 72 5 -2.2372 2.341095e+01 1.229627e+01 1.826799e+01 # CTO EG DP + 2286 72 5 -2.2372 2.487463e+01 1.278423e+01 1.799656e+01 # CTO EG DP + 2287 72 6 -2.1019 2.341323e+01 1.081146e+01 1.816784e+01 # OHG EG DP + 2288 72 6 -2.1019 2.490738e+01 1.424526e+01 1.815795e+01 # OHG EG DP + 2289 73 5 -2.2372 2.232112e+01 7.270039e+00 7.179362e+00 # CTO EG DP + 2290 73 5 -2.2372 2.202722e+01 6.961145e+00 8.594872e+00 # CTO EG DP + 2291 73 6 -2.1019 2.259379e+01 8.758109e+00 7.015922e+00 # OHG EG DP + 2292 73 6 -2.1019 2.167425e+01 5.541902e+00 8.722029e+00 # OHG EG DP + 2293 74 5 -2.2372 1.816077e+01 9.754852e+00 2.226897e+01 # CTO EG DP + 2294 74 5 -2.2372 1.900985e+01 1.084144e+01 2.266819e+01 # CTO EG DP + 2295 74 6 -2.1019 1.860554e+01 8.484131e+00 2.276054e+01 # OHG EG DP + 2296 74 6 -2.1019 1.858682e+01 1.214127e+01 2.218509e+01 # OHG EG DP + 2297 75 5 -2.2372 5.349805e+00 1.622066e+01 7.941823e+00 # CTO EG DP + 2298 75 5 -2.2372 5.234868e+00 1.698104e+01 6.629450e+00 # CTO EG DP + 2299 75 6 -2.1019 4.499057e+00 1.512485e+01 7.955414e+00 # OHG EG DP + 2300 75 6 -2.1019 6.131746e+00 1.810365e+01 6.643195e+00 # OHG EG DP + 2301 76 5 -2.2372 1.084562e+01 1.145977e+01 1.690298e+01 # CTO EG DP + 2302 76 5 -2.2372 1.097913e+01 1.001981e+01 1.697683e+01 # CTO EG DP + 2303 76 6 -2.1019 1.185606e+01 1.214395e+01 1.775209e+01 # OHG EG DP + 2304 76 6 -2.1019 9.912686e+00 9.287238e+00 1.618527e+01 # OHG EG DP + 2305 77 5 -2.2372 6.462463e+00 1.256806e+01 1.433082e+01 # CTO EG DP + 2306 77 5 -2.2372 7.430953e+00 1.247619e+01 1.554470e+01 # CTO EG DP + 2307 77 6 -2.1019 7.064964e+00 1.192472e+01 1.315185e+01 # OHG EG DP + 2308 77 6 -2.1019 6.792525e+00 1.314679e+01 1.672113e+01 # OHG EG DP + 2309 78 5 -2.2372 1.517978e+01 2.247273e+01 3.260999e+01 # CTO EG DP + 2310 78 5 -2.2372 1.632591e+01 2.350336e+01 3.257093e+01 # CTO EG DP + 2311 78 6 -2.1019 1.389164e+01 2.311456e+01 3.269689e+01 # OHG EG DP + 2312 78 6 -2.1019 1.759646e+01 2.288008e+01 3.248820e+01 # OHG EG DP + 2313 79 5 -2.2372 3.211609e+01 7.281683e+00 1.774806e+01 # CTO EG DP + 2314 79 5 -2.2372 3.101647e+01 7.796089e+00 1.693190e+01 # CTO EG DP + 2315 79 6 -2.1019 3.161916e+01 6.537857e+00 1.886324e+01 # OHG EG DP + 2316 79 6 -2.1019 3.148860e+01 8.511370e+00 1.577656e+01 # OHG EG DP + 2317 80 5 -2.2372 1.207204e+01 1.646333e+01 2.852170e+01 # CTO EG DP + 2318 80 5 -2.2372 1.278561e+01 1.531489e+01 2.777826e+01 # CTO EG DP + 2319 80 6 -2.1019 1.273546e+01 1.773380e+01 2.842631e+01 # OHG EG DP + 2320 80 6 -2.1019 1.211680e+01 1.405795e+01 2.791689e+01 # OHG EG DP + 2321 81 5 -2.2372 1.812065e+01 1.241961e+01 2.822590e+01 # CTO EG DP + 2322 81 5 -2.2372 1.795181e+01 1.329093e+01 2.704658e+01 # CTO EG DP + 2323 81 6 -2.1019 1.944138e+01 1.186075e+01 2.835819e+01 # OHG EG DP + 2324 81 6 -2.1019 1.662945e+01 1.376884e+01 2.688856e+01 # OHG EG DP + 2325 82 5 -2.2372 2.822599e+01 1.324967e+01 1.622745e+01 # CTO EG DP + 2326 82 5 -2.2372 2.840448e+01 1.187402e+01 1.559947e+01 # CTO EG DP + 2327 82 6 -2.1019 2.936269e+01 1.406127e+01 1.595302e+01 # OHG EG DP + 2328 82 6 -2.1019 2.721503e+01 1.097058e+01 1.587409e+01 # OHG EG DP + 2329 83 5 -2.2372 2.626089e+01 3.191882e+01 7.572838e+00 # CTO EG DP + 2330 83 5 -2.2372 2.484392e+01 3.201669e+01 8.159249e+00 # CTO EG DP + 2331 83 6 -2.1019 2.674899e+01 3.054954e+01 7.954232e+00 # OHG EG DP + 2332 83 6 -2.1019 2.426614e+01 3.334580e+01 7.806595e+00 # OHG EG DP + 2333 84 5 -2.2372 3.970614e+00 1.838524e+01 2.159062e+00 # CTO EG DP + 2334 84 5 -2.2372 4.536070e+00 1.702253e+01 2.687900e+00 # CTO EG DP + 2335 84 6 -2.1019 3.675563e+00 1.929454e+01 3.316071e+00 # OHG EG DP + 2336 84 6 -2.1019 4.835614e+00 1.620601e+01 1.473515e+00 # OHG EG DP + 2337 85 5 -2.2372 1.950977e+01 2.732823e+01 1.752741e+01 # CTO EG DP + 2338 85 5 -2.2372 1.807287e+01 2.673999e+01 1.767797e+01 # CTO EG DP + 2339 85 6 -2.1019 1.936963e+01 2.879124e+01 1.757693e+01 # OHG EG DP + 2340 85 6 -2.1019 1.823919e+01 2.528701e+01 1.767857e+01 # OHG EG DP + 2341 86 5 -2.2372 1.872868e+01 1.499463e+01 3.260962e+01 # CTO EG DP + 2342 86 5 -2.2372 1.934434e+01 1.642284e+01 3.258965e+01 # CTO EG DP + 2343 86 6 -2.1019 1.983686e+01 1.404731e+01 3.243118e+01 # OHG EG DP + 2344 86 6 -2.1019 1.829560e+01 1.741458e+01 3.280814e+01 # OHG EG DP + 2345 87 5 -2.2372 1.125826e+01 1.405107e+01 1.296099e+01 # CTO EG DP + 2346 87 5 -2.2372 1.223165e+01 1.419655e+01 1.412393e+01 # CTO EG DP + 2347 87 6 -2.1019 1.029289e+01 1.295085e+01 1.331900e+01 # OHG EG DP + 2348 87 6 -2.1019 1.324146e+01 1.517543e+01 1.377853e+01 # OHG EG DP + 2349 88 5 -2.2372 6.062258e+00 2.803540e+01 4.817732e+00 # CTO EG DP + 2350 88 5 -2.2372 7.487749e+00 2.750507e+01 5.028438e+00 # CTO EG DP + 2351 88 6 -2.1019 6.165983e+00 2.951906e+01 4.597154e+00 # OHG EG DP + 2352 88 6 -2.1019 7.461208e+00 2.608356e+01 5.233865e+00 # OHG EG DP + 2353 89 5 -2.2372 2.045661e+01 3.570262e+00 2.374345e+01 # CTO EG DP + 2354 89 5 -2.2372 1.942615e+01 4.208901e+00 2.282476e+01 # CTO EG DP + 2355 89 6 -2.1019 2.176388e+01 4.188938e+00 2.336736e+01 # OHG EG DP + 2356 89 6 -2.1019 1.804095e+01 3.639361e+00 2.316980e+01 # OHG EG DP + 2357 90 5 -2.2372 8.798140e+00 1.658791e+01 4.575850e+00 # CTO EG DP + 2358 90 5 -2.2372 9.644456e+00 1.645384e+01 3.350869e+00 # CTO EG DP + 2359 90 6 -2.1019 9.548617e+00 1.738011e+01 5.602323e+00 # OHG EG DP + 2360 90 6 -2.1019 8.971883e+00 1.562037e+01 2.307885e+00 # OHG EG DP + 2361 91 5 -2.2372 1.589482e+01 2.195362e+01 2.814614e+01 # CTO EG DP + 2362 91 5 -2.2372 1.460409e+01 2.274889e+01 2.840653e+01 # CTO EG DP + 2363 91 6 -2.1019 1.553271e+01 2.076767e+01 2.744079e+01 # OHG EG DP + 2364 91 6 -2.1019 1.493374e+01 2.394776e+01 2.911814e+01 # OHG EG DP + 2365 92 5 -2.2372 3.491516e+00 1.809518e+01 1.868895e+01 # CTO EG DP + 2366 92 5 -2.2372 2.380702e+00 1.755484e+01 1.959213e+01 # CTO EG DP + 2367 92 6 -2.1019 3.287731e+00 1.950779e+01 1.847539e+01 # OHG EG DP + 2368 92 6 -2.1019 2.623204e+00 1.609885e+01 1.989916e+01 # OHG EG DP + 2369 93 5 -2.2372 3.029238e+01 1.161268e+01 3.247081e+01 # CTO EG DP + 2370 93 5 -2.2372 3.174865e+01 1.146616e+01 3.211001e+01 # CTO EG DP + 2371 93 6 -2.1019 2.958662e+01 1.029180e+01 3.246339e+01 # OHG EG DP + 2372 93 6 -2.1019 3.241065e+01 1.269276e+01 3.220891e+01 # OHG EG DP + 2373 94 5 -2.2372 1.594517e+01 1.357119e+01 9.104166e+00 # CTO EG DP + 2374 94 5 -2.2372 1.484874e+01 1.452042e+01 9.420795e+00 # CTO EG DP + 2375 94 6 -2.1019 1.538210e+01 1.224655e+01 8.697810e+00 # OHG EG DP + 2376 94 6 -2.1019 1.544351e+01 1.579245e+01 9.844443e+00 # OHG EG DP + 2377 95 5 -2.2372 2.002178e+01 1.474986e+01 1.868972e+01 # CTO EG DP + 2378 95 5 -2.2372 2.106052e+01 1.583491e+01 1.889937e+01 # CTO EG DP + 2379 95 6 -2.1019 1.879294e+01 1.539243e+01 1.828719e+01 # OHG EG DP + 2380 95 6 -2.1019 2.234221e+01 1.515674e+01 1.925902e+01 # OHG EG DP + 2381 96 5 -2.2372 2.654819e+00 2.534754e+01 1.790743e+01 # CTO EG DP + 2382 96 5 -2.2372 4.097972e+00 2.516419e+01 1.828464e+01 # CTO EG DP + 2383 96 6 -2.1019 2.447784e+00 2.484954e+01 1.654401e+01 # OHG EG DP + 2384 96 6 -2.1019 4.366383e+00 2.567114e+01 1.969325e+01 # OHG EG DP + 2385 97 5 -2.2372 9.636553e+00 2.597574e+00 5.549553e+00 # CTO EG DP + 2386 97 5 -2.2372 9.664733e+00 2.812388e+00 3.998766e+00 # CTO EG DP + 2387 97 6 -2.1019 1.097143e+01 2.953579e+00 6.126610e+00 # OHG EG DP + 2388 97 6 -2.1019 8.310600e+00 2.377055e+00 3.486523e+00 # OHG EG DP + 2389 98 5 -2.2372 2.143185e+01 2.780564e+01 1.284193e+01 # CTO EG DP + 2390 98 5 -2.2372 2.171743e+01 2.652752e+01 1.375805e+01 # CTO EG DP + 2391 98 6 -2.1019 2.268023e+01 2.844928e+01 1.243889e+01 # OHG EG DP + 2392 98 6 -2.1019 2.040861e+01 2.595120e+01 1.413580e+01 # OHG EG DP + 2393 99 5 -2.2372 1.721965e+01 5.661334e+00 3.024114e+01 # CTO EG DP + 2394 99 5 -2.2372 1.812417e+01 4.483177e+00 2.980472e+01 # CTO EG DP + 2395 99 6 -2.1019 1.807192e+01 6.749361e+00 3.072128e+01 # OHG EG DP + 2396 99 6 -2.1019 1.740346e+01 3.337384e+00 2.932399e+01 # OHG EG DP + 2397 100 5 -2.2372 1.385527e+01 1.092526e+01 1.170954e+01 # CTO EG DP + 2398 100 5 -2.2372 1.244633e+01 1.073294e+01 1.138666e+01 # CTO EG DP + 2399 100 6 -2.1019 1.421654e+01 1.006191e+01 1.281798e+01 # OHG EG DP + 2400 100 6 -2.1019 1.204441e+01 1.157993e+01 1.029117e+01 # OHG EG DP + 2401 101 5 -2.2372 9.365645e+00 2.319543e+01 9.983319e+00 # CTO EG DP + 2402 101 5 -2.2372 1.014043e+01 2.440969e+01 1.003895e+01 # CTO EG DP + 2403 101 6 -2.1019 1.023700e+01 2.199194e+01 1.016316e+01 # OHG EG DP + 2404 101 6 -2.1019 9.211004e+00 2.564973e+01 9.821911e+00 # OHG EG DP + 2405 102 5 -2.2372 7.092915e+00 2.323032e+01 2.930290e+01 # CTO EG DP + 2406 102 5 -2.2372 8.356680e+00 2.390611e+01 2.899360e+01 # CTO EG DP + 2407 102 6 -2.1019 5.990024e+00 2.402360e+01 2.888052e+01 # OHG EG DP + 2408 102 6 -2.1019 9.521071e+00 2.301826e+01 2.947279e+01 # OHG EG DP + 2409 103 5 -2.2372 6.462788e+00 2.336539e+01 2.392142e+01 # CTO EG DP + 2410 103 5 -2.2372 7.150344e+00 2.395185e+01 2.511704e+01 # CTO EG DP + 2411 103 6 -2.1019 6.026176e+00 2.204378e+01 2.415444e+01 # OHG EG DP + 2412 103 6 -2.1019 7.581998e+00 2.532251e+01 2.493046e+01 # OHG EG DP + 2413 104 5 -2.2372 1.413824e+01 2.866775e+01 8.458554e+00 # CTO EG DP + 2414 104 5 -2.2372 1.457760e+01 2.957854e+01 9.713364e+00 # CTO EG DP + 2415 104 6 -2.1019 1.317637e+01 2.774790e+01 8.823144e+00 # OHG EG DP + 2416 104 6 -2.1019 1.561159e+01 3.050719e+01 9.226102e+00 # OHG EG DP + 2417 105 5 -2.2372 1.601631e+01 2.545200e+01 2.332908e+00 # CTO EG DP + 2418 105 5 -2.2372 1.639666e+01 2.686579e+01 2.453155e+00 # CTO EG DP + 2419 105 6 -2.1019 1.721873e+01 2.463154e+01 2.014345e+00 # OHG EG DP + 2420 105 6 -2.1019 1.512740e+01 2.769698e+01 2.814992e+00 # OHG EG DP + 2421 106 5 -2.2372 2.429758e+01 7.212709e+00 2.253309e+01 # CTO EG DP + 2422 106 5 -2.2372 2.316006e+01 7.406071e+00 2.162529e+01 # CTO EG DP + 2423 106 6 -2.1019 2.539857e+01 8.087419e+00 2.214119e+01 # OHG EG DP + 2424 106 6 -2.1019 2.200533e+01 6.463525e+00 2.198640e+01 # OHG EG DP + 2425 107 5 -2.2372 2.924177e+01 2.745599e+01 1.820852e+01 # CTO EG DP + 2426 107 5 -2.2372 2.882298e+01 2.617890e+01 1.738435e+01 # CTO EG DP + 2427 107 6 -2.1019 2.833089e+01 2.856489e+01 1.776499e+01 # OHG EG DP + 2428 107 6 -2.1019 2.975302e+01 2.508167e+01 1.784156e+01 # OHG EG DP + 2429 108 5 -2.2372 8.436355e+00 3.064466e+01 1.204041e+01 # CTO EG DP + 2430 108 5 -2.2372 9.467042e+00 3.137573e+01 1.275824e+01 # CTO EG DP + 2431 108 6 -2.1019 8.456338e+00 2.922447e+01 1.241065e+01 # OHG EG DP + 2432 108 6 -2.1019 9.464065e+00 3.278000e+01 1.231087e+01 # OHG EG DP + 2433 109 5 -2.2372 3.172960e+01 1.477258e+01 9.960676e+00 # CTO EG DP + 2434 109 5 -2.2372 3.230180e+01 1.588834e+01 9.041713e+00 # CTO EG DP + 2435 109 6 -2.1019 3.129024e+01 1.533425e+01 1.125672e+01 # OHG EG DP + 2436 109 6 -2.1019 3.267013e+01 1.527392e+01 7.753337e+00 # OHG EG DP + 2437 110 5 -2.2372 2.014800e+01 1.592734e+01 8.202475e+00 # CTO EG DP + 2438 110 5 -2.2372 1.876570e+01 1.633514e+01 7.970567e+00 # CTO EG DP + 2439 110 6 -2.1019 2.068102e+01 1.668911e+01 9.426117e+00 # OHG EG DP + 2440 110 6 -2.1019 1.830056e+01 1.565023e+01 6.816182e+00 # OHG EG DP + 2441 111 5 -2.2372 1.831338e+01 2.753501e+01 9.298977e+00 # CTO EG DP + 2442 111 5 -2.2372 1.807870e+01 2.637498e+01 8.344355e+00 # CTO EG DP + 2443 111 6 -2.1019 1.922159e+01 2.847969e+01 8.573181e+00 # OHG EG DP + 2444 111 6 -2.1019 1.715894e+01 2.533280e+01 8.971366e+00 # OHG EG DP + 2445 112 5 -2.2372 8.075351e+00 1.660003e+01 1.771037e+01 # CTO EG DP + 2446 112 5 -2.2372 9.284649e+00 1.568058e+01 1.756574e+01 # CTO EG DP + 2447 112 6 -2.1019 6.850527e+00 1.575697e+01 1.758432e+01 # OHG EG DP + 2448 112 6 -2.1019 1.054860e+01 1.650814e+01 1.764811e+01 # OHG EG DP + 2449 113 5 -2.2372 2.624496e+01 3.600705e+00 2.448625e+01 # CTO EG DP + 2450 113 5 -2.2372 2.535720e+01 2.350221e+00 2.432017e+01 # CTO EG DP + 2451 113 6 -2.1019 2.733558e+01 3.749701e+00 2.348864e+01 # OHG EG DP + 2452 113 6 -2.1019 2.432872e+01 2.354066e+00 2.539554e+01 # OHG EG DP + 2453 114 5 -2.2372 2.337736e+01 2.927826e+01 5.192356e+00 # CTO EG DP + 2454 114 5 -2.2372 2.395468e+01 3.023433e+01 4.199287e+00 # CTO EG DP + 2455 114 6 -2.1019 2.432818e+01 2.898713e+01 6.270401e+00 # OHG EG DP + 2456 114 6 -2.1019 2.307128e+01 3.052173e+01 3.149417e+00 # OHG EG DP + 2457 115 5 -2.2372 2.831156e+01 2.674622e+01 3.256358e+01 # CTO EG DP + 2458 115 5 -2.2372 2.965889e+01 2.623628e+01 3.252657e+01 # CTO EG DP + 2459 115 6 -2.1019 2.730056e+01 2.567175e+01 3.277261e+01 # OHG EG DP + 2460 115 6 -2.1019 3.062718e+01 2.736582e+01 3.233510e+01 # OHG EG DP + 2461 116 5 -2.2372 2.489146e+01 4.073732e+00 7.683640e+00 # CTO EG DP + 2462 116 5 -2.2372 2.537434e+01 3.781991e+00 6.296253e+00 # CTO EG DP + 2463 116 6 -2.1019 2.548471e+01 5.361881e+00 8.176743e+00 # OHG EG DP + 2464 116 6 -2.1019 2.473850e+01 2.566682e+00 5.790697e+00 # OHG EG DP + 2465 117 5 -2.2372 2.407408e+01 3.514264e+00 3.188083e+01 # CTO EG DP + 2466 117 5 -2.2372 2.518166e+01 4.584627e+00 3.189739e+01 # CTO EG DP + 2467 117 6 -2.1019 2.470815e+01 2.200463e+00 3.182288e+01 # OHG EG DP + 2468 117 6 -2.1019 2.459244e+01 5.906176e+00 3.192436e+01 # OHG EG DP + 2469 118 5 -2.2372 1.919532e+01 2.232258e+00 6.482998e+00 # CTO EG DP + 2470 118 5 -2.2372 1.981310e+01 3.530237e+00 6.187857e+00 # CTO EG DP + 2471 118 6 -2.1019 1.775193e+01 2.402147e+00 6.750873e+00 # OHG EG DP + 2472 118 6 -2.1019 2.127364e+01 3.342359e+00 5.910985e+00 # OHG EG DP + 2473 119 5 -2.2372 3.279665e+01 7.048521e+00 3.034935e+01 # CTO EG DP + 2474 119 5 -2.2372 3.238550e+01 6.409849e+00 3.172490e+01 # CTO EG DP + 2475 119 6 -2.1019 3.324821e+01 6.022689e+00 2.946830e+01 # OHG EG DP + 2476 119 6 -2.1019 3.185177e+01 7.515372e+00 3.265071e+01 # OHG EG DP + 2477 120 5 -2.2372 2.763565e+01 1.984382e+01 8.139392e+00 # CTO EG DP + 2478 120 5 -2.2372 2.861834e+01 1.869620e+01 7.815352e+00 # CTO EG DP + 2479 120 6 -2.1019 2.767571e+01 2.007486e+01 9.581117e+00 # OHG EG DP + 2480 120 6 -2.1019 2.859565e+01 1.849479e+01 6.349867e+00 # OHG EG DP + 2481 121 5 -2.2372 3.151619e+01 1.047259e+01 9.550018e+00 # CTO EG DP + 2482 121 5 -2.2372 3.023339e+01 1.095445e+01 1.013782e+01 # CTO EG DP + 2483 121 6 -2.1019 3.134616e+01 9.349285e+00 8.621950e+00 # OHG EG DP + 2484 121 6 -2.1019 3.040497e+01 1.196579e+01 1.109861e+01 # OHG EG DP + 2485 122 5 -2.2372 2.243331e+01 1.288667e+01 2.248452e+01 # CTO EG DP + 2486 122 5 -2.2372 2.324604e+01 1.420901e+01 2.234360e+01 # CTO EG DP + 2487 122 6 -2.1019 2.338622e+01 1.173565e+01 2.256516e+01 # OHG EG DP + 2488 122 6 -2.1019 2.236575e+01 1.531166e+01 2.227529e+01 # OHG EG DP + 2489 123 5 -2.2372 5.944776e+00 1.051833e+01 4.627904e+00 # CTO EG DP + 2490 123 5 -2.2372 5.794074e+00 1.111624e+01 3.172579e+00 # CTO EG DP + 2491 123 6 -2.1019 6.780782e+00 1.146522e+01 5.360012e+00 # OHG EG DP + 2492 123 6 -2.1019 4.885536e+00 1.013372e+01 2.458247e+00 # OHG EG DP + 2493 124 5 -2.2372 8.984378e+00 3.145956e+01 4.009160e+00 # CTO EG DP + 2494 124 5 -2.2372 8.141834e+00 3.175093e+01 5.161311e+00 # CTO EG DP + 2495 124 6 -2.1019 8.404997e+00 3.033907e+01 3.239668e+00 # OHG EG DP + 2496 124 6 -2.1019 8.772060e+00 3.285323e+01 5.927110e+00 # OHG EG DP + 2497 125 5 -2.2372 3.232327e+01 2.704801e+01 1.534212e+01 # CTO EG DP + 2498 125 5 -2.2372 3.133482e+01 2.762467e+01 1.427473e+01 # CTO EG DP + 2499 125 6 -2.1019 3.162909e+01 2.597186e+01 1.608653e+01 # OHG EG DP + 2500 125 6 -2.1019 3.202280e+01 2.874514e+01 1.353462e+01 # OHG EG DP + 2501 126 5 -2.2372 1.336732e+01 1.953264e+01 2.551187e+01 # CTO EG DP + 2502 126 5 -2.2372 1.425069e+01 1.995154e+01 2.433439e+01 # CTO EG DP + 2503 126 6 -2.1019 1.299835e+01 2.070065e+01 2.624839e+01 # OHG EG DP + 2504 126 6 -2.1019 1.462885e+01 1.879083e+01 2.352816e+01 # OHG EG DP + 2505 127 5 -2.2372 2.220538e+01 2.899388e+01 2.602466e+01 # CTO EG DP + 2506 127 5 -2.2372 2.089953e+01 2.825626e+01 2.599825e+01 # CTO EG DP + 2507 127 6 -2.1019 2.326223e+01 2.818565e+01 2.657279e+01 # OHG EG DP + 2508 127 6 -2.1019 1.979110e+01 2.903304e+01 2.541141e+01 # OHG EG DP + 2509 128 5 -2.2372 2.524167e+01 3.016801e+01 2.091816e+01 # CTO EG DP + 2510 128 5 -2.2372 2.543688e+01 3.163188e+01 2.035356e+01 # CTO EG DP + 2511 128 6 -2.1019 2.664370e+01 2.971029e+01 2.130186e+01 # OHG EG DP + 2512 128 6 -2.1019 2.407539e+01 3.214607e+01 1.989844e+01 # OHG EG DP + 2513 129 5 -2.2372 2.046099e+01 3.457026e+00 1.644922e+01 # CTO EG DP + 2514 129 5 -2.2372 1.995540e+01 4.843128e+00 1.607668e+01 # CTO EG DP + 2515 129 6 -2.1019 2.195785e+01 3.512959e+00 1.666418e+01 # OHG EG DP + 2516 129 6 -2.1019 1.858190e+01 4.894891e+00 1.581144e+01 # OHG EG DP + 2517 130 5 -2.2372 1.211699e+01 2.340892e+01 1.408870e+01 # CTO EG DP + 2518 130 5 -2.2372 1.144463e+01 2.218425e+01 1.346626e+01 # CTO EG DP + 2519 130 6 -2.1019 1.350523e+01 2.320383e+01 1.409668e+01 # OHG EG DP + 2520 130 6 -2.1019 1.001400e+01 2.235365e+01 1.335346e+01 # OHG EG DP + 2521 131 5 -2.2372 3.067401e+01 2.780555e+01 2.886594e+01 # CTO EG DP + 2522 131 5 -2.2372 3.101633e+01 2.908903e+01 2.941509e+01 # CTO EG DP + 2523 131 6 -2.1019 3.188310e+01 2.718031e+01 2.811832e+01 # OHG EG DP + 2524 131 6 -2.1019 2.986886e+01 2.968974e+01 3.014302e+01 # OHG EG DP + 2525 132 5 -2.2372 5.924671e+00 3.084735e+01 2.684224e+01 # CTO EG DP + 2526 132 5 -2.2372 6.808116e+00 3.153376e+01 2.587679e+01 # CTO EG DP + 2527 132 6 -2.1019 6.323906e+00 2.938246e+01 2.688331e+01 # OHG EG DP + 2528 132 6 -2.1019 6.419995e+00 3.298821e+01 2.587438e+01 # OHG EG DP + 2529 133 5 -2.2372 4.243616e+00 2.928125e+01 2.296025e+01 # CTO EG DP + 2530 133 5 -2.2372 3.587308e+00 2.883704e+01 2.423152e+01 # CTO EG DP + 2531 133 6 -2.1019 5.194906e+00 2.822397e+01 2.244571e+01 # OHG EG DP + 2532 133 6 -2.1019 2.693266e+00 2.984390e+01 2.471918e+01 # OHG EG DP + 2533 134 5 -2.2372 1.806878e+01 2.714448e+01 3.239694e+01 # CTO EG DP + 2534 134 5 -2.2372 1.669179e+01 2.765147e+01 3.286486e+01 # CTO EG DP + 2535 134 6 -2.1019 1.895405e+01 2.700229e+01 3.350283e+01 # OHG EG DP + 2536 134 6 -2.1019 1.579478e+01 2.788050e+01 3.170594e+01 # OHG EG DP + 2537 135 5 -2.2372 2.308587e+01 5.840229e+00 2.415657e+00 # CTO EG DP + 2538 135 5 -2.2372 2.321216e+01 7.274632e+00 2.963310e+00 # CTO EG DP + 2539 135 6 -2.1019 2.355290e+01 4.824925e+00 3.385774e+00 # OHG EG DP + 2540 135 6 -2.1019 2.266496e+01 8.215079e+00 1.988223e+00 # OHG EG DP + 2541 136 5 -2.2372 2.302494e+01 4.683201e+00 2.744238e+01 # CTO EG DP + 2542 136 5 -2.2372 2.244472e+01 3.363307e+00 2.755791e+01 # CTO EG DP + 2543 136 6 -2.1019 2.195309e+01 5.634838e+00 2.697190e+01 # OHG EG DP + 2544 136 6 -2.1019 2.357525e+01 2.404507e+00 2.800432e+01 # OHG EG DP + 2545 137 5 -2.2372 5.679159e+00 5.725382e+00 1.299133e+01 # CTO EG DP + 2546 137 5 -2.2372 4.379842e+00 5.121740e+00 1.251239e+01 # CTO EG DP + 2547 137 6 -2.1019 6.794297e+00 5.032563e+00 1.226086e+01 # OHG EG DP + 2548 137 6 -2.1019 3.259644e+00 5.816966e+00 1.327406e+01 # OHG EG DP + 2549 138 5 -2.2372 1.278206e+01 1.865605e+01 4.679508e+00 # CTO EG DP + 2550 138 5 -2.2372 1.360052e+01 1.847661e+01 3.523779e+00 # CTO EG DP + 2551 138 6 -2.1019 1.367277e+01 1.890216e+01 5.886134e+00 # OHG EG DP + 2552 138 6 -2.1019 1.273117e+01 1.822089e+01 2.328291e+00 # OHG EG DP + 2553 139 5 -2.2372 1.486523e+01 1.022586e+01 2.636529e+01 # CTO EG DP + 2554 139 5 -2.2372 1.508767e+01 9.525953e+00 2.766771e+01 # CTO EG DP + 2555 139 6 -2.1019 1.347837e+01 1.069958e+01 2.628540e+01 # OHG EG DP + 2556 139 6 -2.1019 1.642855e+01 8.989563e+00 2.777612e+01 # OHG EG DP + 2557 140 5 -2.2372 2.355903e+01 2.282348e+01 3.268465e+01 # CTO EG DP + 2558 140 5 -2.2372 2.512487e+01 2.288076e+01 3.254522e+01 # CTO EG DP + 2559 140 6 -2.1019 2.311700e+01 2.413303e+01 3.304102e+01 # OHG EG DP + 2560 140 6 -2.1019 2.561447e+01 2.150509e+01 3.230120e+01 # OHG EG DP + 2561 141 5 -2.2372 2.862844e+01 3.223224e+01 1.536591e+01 # CTO EG DP + 2562 141 5 -2.2372 2.891324e+01 3.268123e+01 1.681048e+01 # CTO EG DP + 2563 141 6 -2.1019 2.985564e+01 3.173313e+01 1.476135e+01 # OHG EG DP + 2564 141 6 -2.1019 2.766951e+01 3.318469e+01 1.737595e+01 # OHG EG DP + 2565 142 5 -2.2372 1.119660e+01 9.702310e+00 2.275272e+01 # CTO EG DP + 2566 142 5 -2.2372 1.035007e+01 1.041969e+01 2.385835e+01 # CTO EG DP + 2567 142 6 -2.1019 1.260705e+01 1.018387e+01 2.299332e+01 # OHG EG DP + 2568 142 6 -2.1019 8.937226e+00 9.962992e+00 2.371016e+01 # OHG EG DP + 2569 143 5 -2.2372 1.356138e+01 2.798943e+01 2.720316e+01 # CTO EG DP + 2570 143 5 -2.2372 1.466689e+01 2.829960e+01 2.830221e+01 # CTO EG DP + 2571 143 6 -2.1019 1.392360e+01 2.673557e+01 2.649301e+01 # OHG EG DP + 2572 143 6 -2.1019 1.433947e+01 2.948041e+01 2.906968e+01 # OHG EG DP + 2573 144 5 -2.2372 1.126873e+01 1.384253e+01 2.079207e+01 # CTO EG DP + 2574 144 5 -2.2372 1.247974e+01 1.386971e+01 2.173238e+01 # CTO EG DP + 2575 144 6 -2.1019 1.007685e+01 1.423315e+01 2.166939e+01 # OHG EG DP + 2576 144 6 -2.1019 1.367808e+01 1.342438e+01 2.092504e+01 # OHG EG DP + 2577 145 5 -2.2372 2.819702e+01 1.859019e+01 2.508456e+01 # CTO EG DP + 2578 145 5 -2.2372 2.739100e+01 1.736805e+01 2.558438e+01 # CTO EG DP + 2579 145 6 -2.1019 2.777996e+01 1.896392e+01 2.374102e+01 # OHG EG DP + 2580 145 6 -2.1019 2.785150e+01 1.702927e+01 2.689870e+01 # OHG EG DP + 2581 146 5 -2.2372 1.903968e+01 7.625891e+00 2.578279e+01 # CTO EG DP + 2582 146 5 -2.2372 1.817315e+01 6.434987e+00 2.600608e+01 # CTO EG DP + 2583 146 6 -2.1019 1.985597e+01 7.860294e+00 2.699306e+01 # OHG EG DP + 2584 146 6 -2.1019 1.739953e+01 6.080210e+00 2.486100e+01 # OHG EG DP + 2585 147 5 -2.2372 1.459865e+01 1.707267e+01 2.027199e+01 # CTO EG DP + 2586 147 5 -2.2372 1.596038e+01 1.647458e+01 1.991097e+01 # CTO EG DP + 2587 147 6 -2.1019 1.351953e+01 1.659040e+01 1.941080e+01 # OHG EG DP + 2588 147 6 -2.1019 1.701126e+01 1.694567e+01 2.081803e+01 # OHG EG DP + 2589 148 5 -2.2372 4.741882e+00 1.980433e+01 2.772538e+01 # CTO EG DP + 2590 148 5 -2.2372 5.976644e+00 1.917169e+01 2.710187e+01 # CTO EG DP + 2591 148 6 -2.1019 3.697585e+00 1.885091e+01 2.803961e+01 # OHG EG DP + 2592 148 6 -2.1019 6.995324e+00 2.024745e+01 2.685957e+01 # OHG EG DP + 2593 149 5 -2.2372 6.263945e+00 2.538740e+01 1.271331e+01 # CTO EG DP + 2594 149 5 -2.2372 7.521103e+00 2.578880e+01 1.346740e+01 # CTO EG DP + 2595 149 6 -2.1019 5.229558e+00 2.497652e+01 1.366363e+01 # OHG EG DP + 2596 149 6 -2.1019 8.609329e+00 2.613651e+01 1.248676e+01 # OHG EG DP + 2597 150 5 -2.2372 3.065203e+01 1.813492e+01 1.258585e+01 # CTO EG DP + 2598 150 5 -2.2372 2.907568e+01 1.817588e+01 1.247110e+01 # CTO EG DP + 2599 150 6 -2.1019 3.105023e+01 1.936294e+01 1.317588e+01 # OHG EG DP + 2600 150 6 -2.1019 2.859658e+01 1.683087e+01 1.189188e+01 # OHG EG DP + 2601 151 5 -2.2372 1.461927e+01 3.262422e+01 4.700195e+00 # CTO EG DP + 2602 151 5 -2.2372 1.315061e+01 3.232733e+01 4.876326e+00 # CTO EG DP + 2603 151 6 -2.1019 1.543727e+01 3.146234e+01 4.396490e+00 # OHG EG DP + 2604 151 6 -2.1019 1.242831e+01 3.349840e+01 5.250613e+00 # OHG EG DP + 2605 152 5 -2.2372 7.104398e+00 6.610267e+00 2.248809e+01 # CTO EG DP + 2606 152 5 -2.2372 8.039592e+00 6.276491e+00 2.365165e+01 # CTO EG DP + 2607 152 6 -2.1019 6.255448e+00 7.768646e+00 2.275394e+01 # OHG EG DP + 2608 152 6 -2.1019 8.793380e+00 5.137532e+00 2.328053e+01 # OHG EG DP + 2609 153 5 -2.2372 3.142930e+01 4.583032e+00 1.222609e+01 # CTO EG DP + 2610 153 5 -2.2372 3.040763e+01 5.720084e+00 1.220729e+01 # CTO EG DP + 2611 153 6 -2.1019 3.075455e+01 3.312687e+00 1.224874e+01 # OHG EG DP + 2612 153 6 -2.1019 3.121663e+01 6.999040e+00 1.209480e+01 # OHG EG DP + 2613 154 5 -2.2372 1.900744e+01 2.036478e+01 8.762520e+00 # CTO EG DP + 2614 154 5 -2.2372 1.757441e+01 2.089345e+01 8.914424e+00 # CTO EG DP + 2615 154 6 -2.1019 1.996686e+01 2.148701e+01 9.208340e+00 # OHG EG DP + 2616 154 6 -2.1019 1.672156e+01 1.980515e+01 8.561709e+00 # OHG EG DP + 2617 155 5 -2.2372 1.465248e+01 7.406581e+00 1.024318e+01 # CTO EG DP + 2618 155 5 -2.2372 1.359063e+01 6.305252e+00 1.007605e+01 # CTO EG DP + 2619 155 6 -2.1019 1.597500e+01 6.806405e+00 1.028557e+01 # OHG EG DP + 2620 155 6 -2.1019 1.225888e+01 6.891922e+00 9.984272e+00 # OHG EG DP + 2621 156 5 -2.2372 1.634714e+01 2.245438e+01 5.165740e+00 # CTO EG DP + 2622 156 5 -2.2372 1.767035e+01 2.174871e+01 4.798417e+00 # CTO EG DP + 2623 156 6 -2.1019 1.655494e+01 2.378158e+01 5.659627e+00 # OHG EG DP + 2624 156 6 -2.1019 1.745909e+01 2.040716e+01 4.265604e+00 # OHG EG DP + 2625 157 5 -2.2372 8.858760e+00 2.314016e+01 2.938790e+00 # CTO EG DP + 2626 157 5 -2.2372 7.632508e+00 2.389738e+01 2.545849e+00 # CTO EG DP + 2627 157 6 -2.1019 8.648913e+00 2.174799e+01 2.794554e+00 # OHG EG DP + 2628 157 6 -2.1019 7.864692e+00 2.532378e+01 2.616099e+00 # OHG EG DP + 2629 158 5 -2.2372 3.348825e+00 1.517005e+01 2.841104e+01 # CTO EG DP + 2630 158 5 -2.2372 3.405854e+00 1.373126e+01 2.805309e+01 # CTO EG DP + 2631 158 6 -2.1019 4.489199e+00 1.546022e+01 2.938560e+01 # OHG EG DP + 2632 158 6 -2.1019 2.210291e+00 1.344136e+01 2.717400e+01 # OHG EG DP + 2633 159 5 -2.2372 1.924315e+01 1.898980e+01 1.672430e+01 # CTO EG DP + 2634 159 5 -2.2372 1.993500e+01 2.028191e+01 1.624804e+01 # CTO EG DP + 2635 159 6 -2.1019 1.922428e+01 1.892375e+01 1.824946e+01 # OHG EG DP + 2636 159 6 -2.1019 1.988372e+01 2.034840e+01 1.481184e+01 # OHG EG DP + 2637 160 5 -2.2372 3.056568e+01 8.694095e+00 2.104849e+01 # CTO EG DP + 2638 160 5 -2.2372 3.100388e+01 1.001786e+01 2.053679e+01 # CTO EG DP + 2639 160 6 -2.1019 2.958920e+01 8.075992e+00 2.016387e+01 # OHG EG DP + 2640 160 6 -2.1019 3.193332e+01 1.068557e+01 2.149718e+01 # OHG EG DP + 2641 161 5 -2.2372 1.285509e+01 2.971899e+00 2.921242e+01 # CTO EG DP + 2642 161 5 -2.2372 1.367582e+01 4.234271e+00 2.951429e+01 # CTO EG DP + 2643 161 6 -2.1019 1.311043e+01 2.454962e+00 2.794937e+01 # OHG EG DP + 2644 161 6 -2.1019 1.336459e+01 4.780076e+00 3.079519e+01 # OHG EG DP + 2645 162 5 -2.2372 1.384922e+01 3.268011e+01 1.304996e+01 # CTO EG DP + 2646 162 5 -2.2372 1.333128e+01 3.149705e+01 1.383992e+01 # CTO EG DP + 2647 162 6 -2.1019 1.508595e+01 3.236887e+01 1.237586e+01 # OHG EG DP + 2648 162 6 -2.1019 1.209406e+01 3.186614e+01 1.457726e+01 # OHG EG DP + 2649 163 5 -2.2372 2.713428e+01 9.063689e+00 8.291549e+00 # CTO EG DP + 2650 163 5 -2.2372 2.585915e+01 9.828418e+00 8.157613e+00 # CTO EG DP + 2651 163 6 -2.1019 2.699103e+01 7.767164e+00 7.658794e+00 # OHG EG DP + 2652 163 6 -2.1019 2.599415e+01 1.111868e+01 8.761947e+00 # OHG EG DP + 2653 164 5 -2.2372 2.715236e+01 1.044760e+01 3.782812e+00 # CTO EG DP + 2654 164 5 -2.2372 2.798435e+01 9.207863e+00 3.956338e+00 # CTO EG DP + 2655 164 6 -2.1019 2.590369e+01 1.019246e+01 3.212316e+00 # OHG EG DP + 2656 164 6 -2.1019 2.933370e+01 9.620485e+00 4.530329e+00 # OHG EG DP + 2657 165 5 -2.2372 2.004433e+01 6.819411e+00 1.242626e+01 # CTO EG DP + 2658 165 5 -2.2372 1.940492e+01 7.970612e+00 1.309445e+01 # CTO EG DP + 2659 165 6 -2.1019 2.152200e+01 6.832135e+00 1.277921e+01 # OHG EG DP + 2660 165 6 -2.1019 1.798341e+01 8.008125e+00 1.274070e+01 # OHG EG DP + 2661 166 5 -2.2372 2.556836e+01 2.517493e+01 1.501448e+01 # CTO EG DP + 2662 166 5 -2.2372 2.576136e+01 2.649077e+01 1.419635e+01 # CTO EG DP + 2663 166 6 -2.1019 2.421226e+01 2.462725e+01 1.471299e+01 # OHG EG DP + 2664 166 6 -2.1019 2.708224e+01 2.704981e+01 1.440308e+01 # OHG EG DP + 2665 167 5 -2.2372 7.383352e+00 8.641273e+00 2.818125e+01 # CTO EG DP + 2666 167 5 -2.2372 6.317859e+00 9.344170e+00 2.737560e+01 # CTO EG DP + 2667 167 6 -2.1019 8.252002e+00 9.617488e+00 2.876262e+01 # OHG EG DP + 2668 167 6 -2.1019 5.401266e+00 8.356911e+00 2.668880e+01 # OHG EG DP + 2669 168 5 -2.2372 5.826691e+00 3.180594e+01 1.479249e+01 # CTO EG DP + 2670 168 5 -2.2372 6.344759e+00 3.057961e+01 1.545757e+01 # CTO EG DP + 2671 168 6 -2.1019 6.911489e+00 3.270080e+01 1.435073e+01 # OHG EG DP + 2672 168 6 -2.1019 5.255845e+00 2.974555e+01 1.582188e+01 # OHG EG DP + 2673 169 5 -2.2372 2.317340e+01 1.543797e+01 5.296247e+00 # CTO EG DP + 2674 169 5 -2.2372 2.199803e+01 1.519651e+01 4.254394e+00 # CTO EG DP + 2675 169 6 -2.1019 2.320592e+01 1.448191e+01 6.331331e+00 # OHG EG DP + 2676 169 6 -2.1019 2.197771e+01 1.615140e+01 3.202927e+00 # OHG EG DP + 2677 170 5 -2.2372 2.039606e+01 2.402884e+01 1.088278e+01 # CTO EG DP + 2678 170 5 -2.2372 2.153432e+01 2.454012e+01 9.987975e+00 # CTO EG DP + 2679 170 6 -2.1019 1.916538e+01 2.391455e+01 1.007258e+01 # OHG EG DP + 2680 170 6 -2.1019 2.277226e+01 2.466550e+01 1.080054e+01 # OHG EG DP + 2681 171 5 -2.2372 2.751579e+01 2.346041e+01 2.007220e+01 # CTO EG DP + 2682 171 5 -2.2372 2.642606e+01 2.317498e+01 1.893666e+01 # CTO EG DP + 2683 171 6 -2.1019 2.858587e+01 2.242478e+01 1.997409e+01 # OHG EG DP + 2684 171 6 -2.1019 2.546066e+01 2.424371e+01 1.900911e+01 # OHG EG DP + 2685 172 5 -2.2372 1.692165e+01 2.132690e+01 2.020433e+01 # CTO EG DP + 2686 172 5 -2.2372 1.585695e+01 2.194820e+01 2.104209e+01 # CTO EG DP + 2687 172 6 -2.1019 1.643078e+01 2.111124e+01 1.886265e+01 # OHG EG DP + 2688 172 6 -2.1019 1.634194e+01 2.220387e+01 2.241232e+01 # OHG EG DP + 2689 173 5 -2.2372 7.924169e+00 1.015536e+01 2.034072e+01 # CTO EG DP + 2690 173 5 -2.2372 6.771401e+00 9.891562e+00 1.942358e+01 # CTO EG DP + 2691 173 6 -2.1019 7.919357e+00 1.152748e+01 2.084935e+01 # OHG EG DP + 2692 173 6 -2.1019 6.710745e+00 8.572270e+00 1.887695e+01 # OHG EG DP + 2693 174 5 -2.2372 7.966204e+00 3.105314e+00 2.790551e+01 # CTO EG DP + 2694 174 5 -2.2372 8.749171e+00 3.621116e+00 2.672078e+01 # CTO EG DP + 2695 174 6 -2.1019 6.581170e+00 3.217777e+00 2.766324e+01 # OHG EG DP + 2696 174 6 -2.1019 1.018374e+01 3.530472e+00 2.707865e+01 # OHG EG DP + 2697 175 5 -2.2372 1.159676e+01 2.720128e+01 4.129735e+00 # CTO EG DP + 2698 175 5 -2.2372 1.244766e+01 2.590736e+01 3.925522e+00 # CTO EG DP + 2699 175 6 -2.1019 1.245278e+01 2.837315e+01 4.133286e+00 # OHG EG DP + 2700 175 6 -2.1019 1.154306e+01 2.476737e+01 3.887688e+00 # OHG EG DP + 2701 176 5 -2.2372 2.285224e+01 2.006840e+01 5.799160e+00 # CTO EG DP + 2702 176 5 -2.2372 2.206437e+01 1.974557e+01 4.480562e+00 # CTO EG DP + 2703 176 6 -2.1019 2.266654e+01 1.895066e+01 6.730903e+00 # OHG EG DP + 2704 176 6 -2.1019 2.227840e+01 2.084386e+01 3.496761e+00 # OHG EG DP + 2705 177 5 -2.2372 2.869705e+01 3.010599e+01 3.049788e+00 # CTO EG DP + 2706 177 5 -2.2372 2.917179e+01 3.145321e+01 3.476773e+00 # CTO EG DP + 2707 177 6 -2.1019 2.971041e+01 2.938774e+01 2.270851e+00 # OHG EG DP + 2708 177 6 -2.1019 2.816199e+01 3.216187e+01 4.137953e+00 # OHG EG DP + 2709 178 5 -2.2372 3.240733e+01 9.566816e+00 2.537320e+01 # CTO EG DP + 2710 178 5 -2.2372 3.175090e+01 9.211190e+00 2.670358e+01 # CTO EG DP + 2711 178 6 -2.1019 3.215596e+01 8.626885e+00 2.432940e+01 # OHG EG DP + 2712 178 6 -2.1019 3.203182e+01 1.017570e+01 2.780046e+01 # OHG EG DP + 2713 179 5 -2.2372 2.743489e+01 1.687878e+01 2.027653e+01 # CTO EG DP + 2714 179 5 -2.2372 2.634595e+01 1.655695e+01 2.120474e+01 # CTO EG DP + 2715 179 6 -2.1019 2.784192e+01 1.580391e+01 1.940139e+01 # OHG EG DP + 2716 179 6 -2.1019 2.597600e+01 1.766120e+01 2.214148e+01 # OHG EG DP + 2717 180 5 -2.2372 1.969355e+01 2.775029e+01 4.734255e+00 # CTO EG DP + 2718 180 5 -2.2372 1.994327e+01 2.896305e+01 3.738044e+00 # CTO EG DP + 2719 180 6 -2.1019 1.973447e+01 2.645793e+01 3.918810e+00 # OHG EG DP + 2720 180 6 -2.1019 1.990244e+01 3.022988e+01 4.558420e+00 # OHG EG DP + 2721 181 5 -2.2372 8.367971e+00 1.738847e+01 1.293338e+01 # CTO EG DP + 2722 181 5 -2.2372 9.774154e+00 1.787221e+01 1.322758e+01 # CTO EG DP + 2723 181 6 -2.1019 7.539911e+00 1.757084e+01 1.415226e+01 # OHG EG DP + 2724 181 6 -2.1019 1.063074e+01 1.763555e+01 1.210672e+01 # OHG EG DP + 2725 182 5 -2.2372 1.766157e+01 1.338286e+01 1.446154e+01 # CTO EG DP + 2726 182 5 -2.2372 1.750848e+01 1.297896e+01 1.299611e+01 # CTO EG DP + 2727 182 6 -2.1019 1.743823e+01 1.492263e+01 1.449142e+01 # OHG EG DP + 2728 182 6 -2.1019 1.773175e+01 1.150289e+01 1.292129e+01 # OHG EG DP + 2729 183 5 -2.2372 2.274270e+01 2.338503e+01 2.603932e+01 # CTO EG DP + 2730 183 5 -2.2372 2.173537e+01 2.231138e+01 2.585909e+01 # CTO EG DP + 2731 183 6 -2.1019 2.380158e+01 2.295675e+01 2.694984e+01 # OHG EG DP + 2732 183 6 -2.1019 2.060394e+01 2.275021e+01 2.495448e+01 # OHG EG DP + 2733 184 5 -2.2372 2.920241e+01 5.276517e+00 2.840698e+01 # CTO EG DP + 2734 184 5 -2.2372 2.974292e+01 3.946225e+00 2.777944e+01 # CTO EG DP + 2735 184 6 -2.1019 2.800331e+01 5.078327e+00 2.915081e+01 # OHG EG DP + 2736 184 6 -2.1019 3.099108e+01 4.157116e+00 2.717453e+01 # OHG EG DP + 2737 185 5 -2.2372 3.002049e+01 3.035093e+01 2.194107e+01 # CTO EG DP + 2738 185 5 -2.2372 2.927644e+01 3.154336e+01 2.270195e+01 # CTO EG DP + 2739 185 6 -2.1019 2.915597e+01 2.911078e+01 2.214203e+01 # OHG EG DP + 2740 185 6 -2.1019 3.005234e+01 3.273354e+01 2.250056e+01 # OHG EG DP + 2741 186 5 -2.2372 1.425150e+01 2.548438e+01 1.095072e+01 # CTO EG DP + 2742 186 5 -2.2372 1.463787e+01 2.408537e+01 1.073488e+01 # CTO EG DP + 2743 186 6 -2.1019 1.428307e+01 2.589953e+01 1.236627e+01 # OHG EG DP + 2744 186 6 -2.1019 1.449058e+01 2.372784e+01 9.339184e+00 # OHG EG DP + 2745 187 5 -2.2372 2.781874e+01 1.179346e+01 2.279623e+01 # CTO EG DP + 2746 187 5 -2.2372 2.648161e+01 1.137856e+01 2.338626e+01 # CTO EG DP + 2747 187 6 -2.1019 2.766756e+01 1.256544e+01 2.151482e+01 # OHG EG DP + 2748 187 6 -2.1019 2.668703e+01 1.067084e+01 2.466934e+01 # OHG EG DP + 2749 188 5 -2.2372 1.004492e+01 2.676312e+01 1.645423e+01 # CTO EG DP + 2750 188 5 -2.2372 1.092100e+01 2.776772e+01 1.572529e+01 # CTO EG DP + 2751 188 6 -2.1019 8.830010e+00 2.737462e+01 1.698303e+01 # OHG EG DP + 2752 188 6 -2.1019 1.219048e+01 2.716895e+01 1.529414e+01 # OHG EG DP + 2753 189 5 -2.2372 2.551489e+01 3.272546e+01 3.173248e+01 # CTO EG DP + 2754 189 5 -2.2372 2.405135e+01 3.231946e+01 3.201596e+01 # CTO EG DP + 2755 189 6 -2.1019 2.632281e+01 3.153326e+01 3.170831e+01 # OHG EG DP + 2756 189 6 -2.1019 2.326219e+01 3.345547e+01 3.199767e+01 # OHG EG DP + 2757 190 5 -2.2372 1.776885e+01 1.292278e+01 3.739758e+00 # CTO EG DP + 2758 190 5 -2.2372 1.766782e+01 1.275557e+01 5.247207e+00 # CTO EG DP + 2759 190 6 -2.1019 1.653512e+01 1.263742e+01 3.099010e+00 # OHG EG DP + 2760 190 6 -2.1019 1.884548e+01 1.303452e+01 5.958491e+00 # OHG EG DP + 2761 191 5 -2.2372 2.899682e+01 3.843105e+00 1.576071e+01 # CTO EG DP + 2762 191 5 -2.2372 3.028616e+01 3.905239e+00 1.655683e+01 # CTO EG DP + 2763 191 6 -2.1019 2.857131e+01 5.220364e+00 1.549738e+01 # OHG EG DP + 2764 191 6 -2.1019 3.084727e+01 2.484940e+00 1.678032e+01 # OHG EG DP + 2765 192 5 -2.2372 2.874900e+01 3.396621e+00 8.817474e+00 # CTO EG DP + 2766 192 5 -2.2372 2.829897e+01 2.708013e+00 1.010258e+01 # CTO EG DP + 2767 192 6 -2.1019 2.998690e+01 4.164289e+00 9.025482e+00 # OHG EG DP + 2768 192 6 -2.1019 2.711593e+01 1.967027e+00 9.892714e+00 # OHG EG DP + 2769 193 5 -2.2372 1.810186e+01 1.716118e+01 2.521101e+01 # CTO EG DP + 2770 193 5 -2.2372 1.895814e+01 1.847578e+01 2.533093e+01 # CTO EG DP + 2771 193 6 -2.1019 1.660915e+01 1.764918e+01 2.507307e+01 # OHG EG DP + 2772 193 6 -2.1019 2.029410e+01 1.798200e+01 2.548094e+01 # OHG EG DP + 2773 194 5 -2.2372 5.837098e+00 1.025727e+01 9.476314e+00 # CTO EG DP + 2774 194 5 -2.2372 5.711873e+00 1.179782e+01 9.321661e+00 # CTO EG DP + 2775 194 6 -2.1019 4.471986e+00 9.691541e+00 9.240776e+00 # OHG EG DP + 2776 194 6 -2.1019 7.079716e+00 1.240903e+01 9.428120e+00 # OHG EG DP + 2777 195 5 -2.2372 2.522786e+01 3.169954e+01 2.490139e+01 # CTO EG DP + 2778 195 5 -2.2372 2.462112e+01 3.287334e+01 2.414028e+01 # CTO EG DP + 2779 195 6 -2.1019 2.615796e+01 3.217497e+01 2.589089e+01 # OHG EG DP + 2780 195 6 -2.1019 2.363166e+01 3.244383e+01 2.315110e+01 # OHG EG DP + 2781 196 5 -2.2372 2.162143e+01 1.594685e+01 2.855060e+01 # CTO EG DP + 2782 196 5 -2.2372 2.198732e+01 1.513173e+01 2.972318e+01 # CTO EG DP + 2783 196 6 -2.1019 2.121640e+01 1.505321e+01 2.739045e+01 # OHG EG DP + 2784 196 6 -2.1019 2.231894e+01 1.603393e+01 3.081332e+01 # OHG EG DP + 2785 197 5 -2.2372 1.276462e+01 5.610605e+00 3.821728e+00 # CTO EG DP + 2786 197 5 -2.2372 1.343535e+01 6.594344e+00 2.965754e+00 # CTO EG DP + 2787 197 6 -2.1019 1.178885e+01 6.200974e+00 4.684982e+00 # OHG EG DP + 2788 197 6 -2.1019 1.443532e+01 5.838829e+00 2.116020e+00 # OHG EG DP + 2789 198 5 -2.2372 2.681380e+01 2.035263e+01 1.584899e+01 # CTO EG DP + 2790 198 5 -2.2372 2.763154e+01 1.970102e+01 1.696227e+01 # CTO EG DP + 2791 198 6 -2.1019 2.537822e+01 1.993515e+01 1.608766e+01 # OHG EG DP + 2792 198 6 -2.1019 2.900360e+01 2.010576e+01 1.677032e+01 # OHG EG DP + 2793 199 5 -2.2372 2.422451e+01 1.333421e+01 2.649596e+01 # CTO EG DP + 2794 199 5 -2.2372 2.458984e+01 1.483025e+01 2.623469e+01 # CTO EG DP + 2795 199 6 -2.1019 2.534975e+01 1.263791e+01 2.712667e+01 # OHG EG DP + 2796 199 6 -2.1019 2.353070e+01 1.556423e+01 2.553154e+01 # OHG EG DP + 2797 200 5 -2.2372 1.279927e+01 2.072308e+01 1.820195e+01 # CTO EG DP + 2798 200 5 -2.2372 1.169386e+01 2.057113e+01 1.927170e+01 # CTO EG DP + 2799 200 6 -2.1019 1.240918e+01 2.166991e+01 1.713903e+01 # OHG EG DP + 2800 200 6 -2.1019 1.218133e+01 1.974393e+01 2.035366e+01 # OHG EG DP + +Bonds + + 1 1 2 1 # CT-CT + 2 2 3 1 # CT-OH + 3 3 4 1 # HC-CT + 4 3 5 1 # HC-CT + 5 3 6 2 # HC-CT + 6 2 7 2 # CT-OH + 7 3 8 2 # HC-CT + 8 4 9 3 # HO-OH + 9 4 10 7 # HO-OH + 10 1 12 11 # CT-CT + 11 2 13 11 # CT-OH + 12 3 14 11 # HC-CT + 13 3 15 11 # HC-CT + 14 3 16 12 # HC-CT + 15 2 17 12 # CT-OH + 16 3 18 12 # HC-CT + 17 4 19 13 # HO-OH + 18 4 20 17 # HO-OH + 19 1 22 21 # CT-CT + 20 2 23 21 # CT-OH + 21 3 24 21 # HC-CT + 22 3 25 21 # HC-CT + 23 3 26 22 # HC-CT + 24 2 27 22 # CT-OH + 25 3 28 22 # HC-CT + 26 4 29 23 # HO-OH + 27 4 30 27 # HO-OH + 28 1 32 31 # CT-CT + 29 2 33 31 # CT-OH + 30 3 34 31 # HC-CT + 31 3 35 31 # HC-CT + 32 3 36 32 # HC-CT + 33 2 37 32 # CT-OH + 34 3 38 32 # HC-CT + 35 4 39 33 # HO-OH + 36 4 40 37 # HO-OH + 37 1 42 41 # CT-CT + 38 2 43 41 # CT-OH + 39 3 44 41 # HC-CT + 40 3 45 41 # HC-CT + 41 3 46 42 # HC-CT + 42 2 47 42 # CT-OH + 43 3 48 42 # HC-CT + 44 4 49 43 # HO-OH + 45 4 50 47 # HO-OH + 46 1 52 51 # CT-CT + 47 2 53 51 # CT-OH + 48 3 54 51 # HC-CT + 49 3 55 51 # HC-CT + 50 3 56 52 # HC-CT + 51 2 57 52 # CT-OH + 52 3 58 52 # HC-CT + 53 4 59 53 # HO-OH + 54 4 60 57 # HO-OH + 55 1 62 61 # CT-CT + 56 2 63 61 # CT-OH + 57 3 64 61 # HC-CT + 58 3 65 61 # HC-CT + 59 3 66 62 # HC-CT + 60 2 67 62 # CT-OH + 61 3 68 62 # HC-CT + 62 4 69 63 # HO-OH + 63 4 70 67 # HO-OH + 64 1 72 71 # CT-CT + 65 2 73 71 # CT-OH + 66 3 74 71 # HC-CT + 67 3 75 71 # HC-CT + 68 3 76 72 # HC-CT + 69 2 77 72 # CT-OH + 70 3 78 72 # HC-CT + 71 4 79 73 # HO-OH + 72 4 80 77 # HO-OH + 73 1 82 81 # CT-CT + 74 2 83 81 # CT-OH + 75 3 84 81 # HC-CT + 76 3 85 81 # HC-CT + 77 3 86 82 # HC-CT + 78 2 87 82 # CT-OH + 79 3 88 82 # HC-CT + 80 4 89 83 # HO-OH + 81 4 90 87 # HO-OH + 82 1 92 91 # CT-CT + 83 2 93 91 # CT-OH + 84 3 94 91 # HC-CT + 85 3 95 91 # HC-CT + 86 3 96 92 # HC-CT + 87 2 97 92 # CT-OH + 88 3 98 92 # HC-CT + 89 4 99 93 # HO-OH + 90 4 100 97 # HO-OH + 91 1 102 101 # CT-CT + 92 2 103 101 # CT-OH + 93 3 104 101 # HC-CT + 94 3 105 101 # HC-CT + 95 3 106 102 # HC-CT + 96 2 107 102 # CT-OH + 97 3 108 102 # HC-CT + 98 4 109 103 # HO-OH + 99 4 110 107 # HO-OH + 100 1 112 111 # CT-CT + 101 2 113 111 # CT-OH + 102 3 114 111 # HC-CT + 103 3 115 111 # HC-CT + 104 3 116 112 # HC-CT + 105 2 117 112 # CT-OH + 106 3 118 112 # HC-CT + 107 4 119 113 # HO-OH + 108 4 120 117 # HO-OH + 109 1 122 121 # CT-CT + 110 2 123 121 # CT-OH + 111 3 124 121 # HC-CT + 112 3 125 121 # HC-CT + 113 3 126 122 # HC-CT + 114 2 127 122 # CT-OH + 115 3 128 122 # HC-CT + 116 4 129 123 # HO-OH + 117 4 130 127 # HO-OH + 118 1 132 131 # CT-CT + 119 2 133 131 # CT-OH + 120 3 134 131 # HC-CT + 121 3 135 131 # HC-CT + 122 3 136 132 # HC-CT + 123 2 137 132 # CT-OH + 124 3 138 132 # HC-CT + 125 4 139 133 # HO-OH + 126 4 140 137 # HO-OH + 127 1 142 141 # CT-CT + 128 2 143 141 # CT-OH + 129 3 144 141 # HC-CT + 130 3 145 141 # HC-CT + 131 3 146 142 # HC-CT + 132 2 147 142 # CT-OH + 133 3 148 142 # HC-CT + 134 4 149 143 # HO-OH + 135 4 150 147 # HO-OH + 136 1 152 151 # CT-CT + 137 2 153 151 # CT-OH + 138 3 154 151 # HC-CT + 139 3 155 151 # HC-CT + 140 3 156 152 # HC-CT + 141 2 157 152 # CT-OH + 142 3 158 152 # HC-CT + 143 4 159 153 # HO-OH + 144 4 160 157 # HO-OH + 145 1 162 161 # CT-CT + 146 2 163 161 # CT-OH + 147 3 164 161 # HC-CT + 148 3 165 161 # HC-CT + 149 3 166 162 # HC-CT + 150 2 167 162 # CT-OH + 151 3 168 162 # HC-CT + 152 4 169 163 # HO-OH + 153 4 170 167 # HO-OH + 154 1 172 171 # CT-CT + 155 2 173 171 # CT-OH + 156 3 174 171 # HC-CT + 157 3 175 171 # HC-CT + 158 3 176 172 # HC-CT + 159 2 177 172 # CT-OH + 160 3 178 172 # HC-CT + 161 4 179 173 # HO-OH + 162 4 180 177 # HO-OH + 163 1 182 181 # CT-CT + 164 2 183 181 # CT-OH + 165 3 184 181 # HC-CT + 166 3 185 181 # HC-CT + 167 3 186 182 # HC-CT + 168 2 187 182 # CT-OH + 169 3 188 182 # HC-CT + 170 4 189 183 # HO-OH + 171 4 190 187 # HO-OH + 172 1 192 191 # CT-CT + 173 2 193 191 # CT-OH + 174 3 194 191 # HC-CT + 175 3 195 191 # HC-CT + 176 3 196 192 # HC-CT + 177 2 197 192 # CT-OH + 178 3 198 192 # HC-CT + 179 4 199 193 # HO-OH + 180 4 200 197 # HO-OH + 181 1 202 201 # CT-CT + 182 2 203 201 # CT-OH + 183 3 204 201 # HC-CT + 184 3 205 201 # HC-CT + 185 3 206 202 # HC-CT + 186 2 207 202 # CT-OH + 187 3 208 202 # HC-CT + 188 4 209 203 # HO-OH + 189 4 210 207 # HO-OH + 190 1 212 211 # CT-CT + 191 2 213 211 # CT-OH + 192 3 214 211 # HC-CT + 193 3 215 211 # HC-CT + 194 3 216 212 # HC-CT + 195 2 217 212 # CT-OH + 196 3 218 212 # HC-CT + 197 4 219 213 # HO-OH + 198 4 220 217 # HO-OH + 199 1 222 221 # CT-CT + 200 2 223 221 # CT-OH + 201 3 224 221 # HC-CT + 202 3 225 221 # HC-CT + 203 3 226 222 # HC-CT + 204 2 227 222 # CT-OH + 205 3 228 222 # HC-CT + 206 4 229 223 # HO-OH + 207 4 230 227 # HO-OH + 208 1 232 231 # CT-CT + 209 2 233 231 # CT-OH + 210 3 234 231 # HC-CT + 211 3 235 231 # HC-CT + 212 3 236 232 # HC-CT + 213 2 237 232 # CT-OH + 214 3 238 232 # HC-CT + 215 4 239 233 # HO-OH + 216 4 240 237 # HO-OH + 217 1 242 241 # CT-CT + 218 2 243 241 # CT-OH + 219 3 244 241 # HC-CT + 220 3 245 241 # HC-CT + 221 3 246 242 # HC-CT + 222 2 247 242 # CT-OH + 223 3 248 242 # HC-CT + 224 4 249 243 # HO-OH + 225 4 250 247 # HO-OH + 226 1 252 251 # CT-CT + 227 2 253 251 # CT-OH + 228 3 254 251 # HC-CT + 229 3 255 251 # HC-CT + 230 3 256 252 # HC-CT + 231 2 257 252 # CT-OH + 232 3 258 252 # HC-CT + 233 4 259 253 # HO-OH + 234 4 260 257 # HO-OH + 235 1 262 261 # CT-CT + 236 2 263 261 # CT-OH + 237 3 264 261 # HC-CT + 238 3 265 261 # HC-CT + 239 3 266 262 # HC-CT + 240 2 267 262 # CT-OH + 241 3 268 262 # HC-CT + 242 4 269 263 # HO-OH + 243 4 270 267 # HO-OH + 244 1 272 271 # CT-CT + 245 2 273 271 # CT-OH + 246 3 274 271 # HC-CT + 247 3 275 271 # HC-CT + 248 3 276 272 # HC-CT + 249 2 277 272 # CT-OH + 250 3 278 272 # HC-CT + 251 4 279 273 # HO-OH + 252 4 280 277 # HO-OH + 253 1 282 281 # CT-CT + 254 2 283 281 # CT-OH + 255 3 284 281 # HC-CT + 256 3 285 281 # HC-CT + 257 3 286 282 # HC-CT + 258 2 287 282 # CT-OH + 259 3 288 282 # HC-CT + 260 4 289 283 # HO-OH + 261 4 290 287 # HO-OH + 262 1 292 291 # CT-CT + 263 2 293 291 # CT-OH + 264 3 294 291 # HC-CT + 265 3 295 291 # HC-CT + 266 3 296 292 # HC-CT + 267 2 297 292 # CT-OH + 268 3 298 292 # HC-CT + 269 4 299 293 # HO-OH + 270 4 300 297 # HO-OH + 271 1 302 301 # CT-CT + 272 2 303 301 # CT-OH + 273 3 304 301 # HC-CT + 274 3 305 301 # HC-CT + 275 3 306 302 # HC-CT + 276 2 307 302 # CT-OH + 277 3 308 302 # HC-CT + 278 4 309 303 # HO-OH + 279 4 310 307 # HO-OH + 280 1 312 311 # CT-CT + 281 2 313 311 # CT-OH + 282 3 314 311 # HC-CT + 283 3 315 311 # HC-CT + 284 3 316 312 # HC-CT + 285 2 317 312 # CT-OH + 286 3 318 312 # HC-CT + 287 4 319 313 # HO-OH + 288 4 320 317 # HO-OH + 289 1 322 321 # CT-CT + 290 2 323 321 # CT-OH + 291 3 324 321 # HC-CT + 292 3 325 321 # HC-CT + 293 3 326 322 # HC-CT + 294 2 327 322 # CT-OH + 295 3 328 322 # HC-CT + 296 4 329 323 # HO-OH + 297 4 330 327 # HO-OH + 298 1 332 331 # CT-CT + 299 2 333 331 # CT-OH + 300 3 334 331 # HC-CT + 301 3 335 331 # HC-CT + 302 3 336 332 # HC-CT + 303 2 337 332 # CT-OH + 304 3 338 332 # HC-CT + 305 4 339 333 # HO-OH + 306 4 340 337 # HO-OH + 307 1 342 341 # CT-CT + 308 2 343 341 # CT-OH + 309 3 344 341 # HC-CT + 310 3 345 341 # HC-CT + 311 3 346 342 # HC-CT + 312 2 347 342 # CT-OH + 313 3 348 342 # HC-CT + 314 4 349 343 # HO-OH + 315 4 350 347 # HO-OH + 316 1 352 351 # CT-CT + 317 2 353 351 # CT-OH + 318 3 354 351 # HC-CT + 319 3 355 351 # HC-CT + 320 3 356 352 # HC-CT + 321 2 357 352 # CT-OH + 322 3 358 352 # HC-CT + 323 4 359 353 # HO-OH + 324 4 360 357 # HO-OH + 325 1 362 361 # CT-CT + 326 2 363 361 # CT-OH + 327 3 364 361 # HC-CT + 328 3 365 361 # HC-CT + 329 3 366 362 # HC-CT + 330 2 367 362 # CT-OH + 331 3 368 362 # HC-CT + 332 4 369 363 # HO-OH + 333 4 370 367 # HO-OH + 334 1 372 371 # CT-CT + 335 2 373 371 # CT-OH + 336 3 374 371 # HC-CT + 337 3 375 371 # HC-CT + 338 3 376 372 # HC-CT + 339 2 377 372 # CT-OH + 340 3 378 372 # HC-CT + 341 4 379 373 # HO-OH + 342 4 380 377 # HO-OH + 343 1 382 381 # CT-CT + 344 2 383 381 # CT-OH + 345 3 384 381 # HC-CT + 346 3 385 381 # HC-CT + 347 3 386 382 # HC-CT + 348 2 387 382 # CT-OH + 349 3 388 382 # HC-CT + 350 4 389 383 # HO-OH + 351 4 390 387 # HO-OH + 352 1 392 391 # CT-CT + 353 2 393 391 # CT-OH + 354 3 394 391 # HC-CT + 355 3 395 391 # HC-CT + 356 3 396 392 # HC-CT + 357 2 397 392 # CT-OH + 358 3 398 392 # HC-CT + 359 4 399 393 # HO-OH + 360 4 400 397 # HO-OH + 361 1 402 401 # CT-CT + 362 2 403 401 # CT-OH + 363 3 404 401 # HC-CT + 364 3 405 401 # HC-CT + 365 3 406 402 # HC-CT + 366 2 407 402 # CT-OH + 367 3 408 402 # HC-CT + 368 4 409 403 # HO-OH + 369 4 410 407 # HO-OH + 370 1 412 411 # CT-CT + 371 2 413 411 # CT-OH + 372 3 414 411 # HC-CT + 373 3 415 411 # HC-CT + 374 3 416 412 # HC-CT + 375 2 417 412 # CT-OH + 376 3 418 412 # HC-CT + 377 4 419 413 # HO-OH + 378 4 420 417 # HO-OH + 379 1 422 421 # CT-CT + 380 2 423 421 # CT-OH + 381 3 424 421 # HC-CT + 382 3 425 421 # HC-CT + 383 3 426 422 # HC-CT + 384 2 427 422 # CT-OH + 385 3 428 422 # HC-CT + 386 4 429 423 # HO-OH + 387 4 430 427 # HO-OH + 388 1 432 431 # CT-CT + 389 2 433 431 # CT-OH + 390 3 434 431 # HC-CT + 391 3 435 431 # HC-CT + 392 3 436 432 # HC-CT + 393 2 437 432 # CT-OH + 394 3 438 432 # HC-CT + 395 4 439 433 # HO-OH + 396 4 440 437 # HO-OH + 397 1 442 441 # CT-CT + 398 2 443 441 # CT-OH + 399 3 444 441 # HC-CT + 400 3 445 441 # HC-CT + 401 3 446 442 # HC-CT + 402 2 447 442 # CT-OH + 403 3 448 442 # HC-CT + 404 4 449 443 # HO-OH + 405 4 450 447 # HO-OH + 406 1 452 451 # CT-CT + 407 2 453 451 # CT-OH + 408 3 454 451 # HC-CT + 409 3 455 451 # HC-CT + 410 3 456 452 # HC-CT + 411 2 457 452 # CT-OH + 412 3 458 452 # HC-CT + 413 4 459 453 # HO-OH + 414 4 460 457 # HO-OH + 415 1 462 461 # CT-CT + 416 2 463 461 # CT-OH + 417 3 464 461 # HC-CT + 418 3 465 461 # HC-CT + 419 3 466 462 # HC-CT + 420 2 467 462 # CT-OH + 421 3 468 462 # HC-CT + 422 4 469 463 # HO-OH + 423 4 470 467 # HO-OH + 424 1 472 471 # CT-CT + 425 2 473 471 # CT-OH + 426 3 474 471 # HC-CT + 427 3 475 471 # HC-CT + 428 3 476 472 # HC-CT + 429 2 477 472 # CT-OH + 430 3 478 472 # HC-CT + 431 4 479 473 # HO-OH + 432 4 480 477 # HO-OH + 433 1 482 481 # CT-CT + 434 2 483 481 # CT-OH + 435 3 484 481 # HC-CT + 436 3 485 481 # HC-CT + 437 3 486 482 # HC-CT + 438 2 487 482 # CT-OH + 439 3 488 482 # HC-CT + 440 4 489 483 # HO-OH + 441 4 490 487 # HO-OH + 442 1 492 491 # CT-CT + 443 2 493 491 # CT-OH + 444 3 494 491 # HC-CT + 445 3 495 491 # HC-CT + 446 3 496 492 # HC-CT + 447 2 497 492 # CT-OH + 448 3 498 492 # HC-CT + 449 4 499 493 # HO-OH + 450 4 500 497 # HO-OH + 451 1 502 501 # CT-CT + 452 2 503 501 # CT-OH + 453 3 504 501 # HC-CT + 454 3 505 501 # HC-CT + 455 3 506 502 # HC-CT + 456 2 507 502 # CT-OH + 457 3 508 502 # HC-CT + 458 4 509 503 # HO-OH + 459 4 510 507 # HO-OH + 460 1 512 511 # CT-CT + 461 2 513 511 # CT-OH + 462 3 514 511 # HC-CT + 463 3 515 511 # HC-CT + 464 3 516 512 # HC-CT + 465 2 517 512 # CT-OH + 466 3 518 512 # HC-CT + 467 4 519 513 # HO-OH + 468 4 520 517 # HO-OH + 469 1 522 521 # CT-CT + 470 2 523 521 # CT-OH + 471 3 524 521 # HC-CT + 472 3 525 521 # HC-CT + 473 3 526 522 # HC-CT + 474 2 527 522 # CT-OH + 475 3 528 522 # HC-CT + 476 4 529 523 # HO-OH + 477 4 530 527 # HO-OH + 478 1 532 531 # CT-CT + 479 2 533 531 # CT-OH + 480 3 534 531 # HC-CT + 481 3 535 531 # HC-CT + 482 3 536 532 # HC-CT + 483 2 537 532 # CT-OH + 484 3 538 532 # HC-CT + 485 4 539 533 # HO-OH + 486 4 540 537 # HO-OH + 487 1 542 541 # CT-CT + 488 2 543 541 # CT-OH + 489 3 544 541 # HC-CT + 490 3 545 541 # HC-CT + 491 3 546 542 # HC-CT + 492 2 547 542 # CT-OH + 493 3 548 542 # HC-CT + 494 4 549 543 # HO-OH + 495 4 550 547 # HO-OH + 496 1 552 551 # CT-CT + 497 2 553 551 # CT-OH + 498 3 554 551 # HC-CT + 499 3 555 551 # HC-CT + 500 3 556 552 # HC-CT + 501 2 557 552 # CT-OH + 502 3 558 552 # HC-CT + 503 4 559 553 # HO-OH + 504 4 560 557 # HO-OH + 505 1 562 561 # CT-CT + 506 2 563 561 # CT-OH + 507 3 564 561 # HC-CT + 508 3 565 561 # HC-CT + 509 3 566 562 # HC-CT + 510 2 567 562 # CT-OH + 511 3 568 562 # HC-CT + 512 4 569 563 # HO-OH + 513 4 570 567 # HO-OH + 514 1 572 571 # CT-CT + 515 2 573 571 # CT-OH + 516 3 574 571 # HC-CT + 517 3 575 571 # HC-CT + 518 3 576 572 # HC-CT + 519 2 577 572 # CT-OH + 520 3 578 572 # HC-CT + 521 4 579 573 # HO-OH + 522 4 580 577 # HO-OH + 523 1 582 581 # CT-CT + 524 2 583 581 # CT-OH + 525 3 584 581 # HC-CT + 526 3 585 581 # HC-CT + 527 3 586 582 # HC-CT + 528 2 587 582 # CT-OH + 529 3 588 582 # HC-CT + 530 4 589 583 # HO-OH + 531 4 590 587 # HO-OH + 532 1 592 591 # CT-CT + 533 2 593 591 # CT-OH + 534 3 594 591 # HC-CT + 535 3 595 591 # HC-CT + 536 3 596 592 # HC-CT + 537 2 597 592 # CT-OH + 538 3 598 592 # HC-CT + 539 4 599 593 # HO-OH + 540 4 600 597 # HO-OH + 541 1 602 601 # CT-CT + 542 2 603 601 # CT-OH + 543 3 604 601 # HC-CT + 544 3 605 601 # HC-CT + 545 3 606 602 # HC-CT + 546 2 607 602 # CT-OH + 547 3 608 602 # HC-CT + 548 4 609 603 # HO-OH + 549 4 610 607 # HO-OH + 550 1 612 611 # CT-CT + 551 2 613 611 # CT-OH + 552 3 614 611 # HC-CT + 553 3 615 611 # HC-CT + 554 3 616 612 # HC-CT + 555 2 617 612 # CT-OH + 556 3 618 612 # HC-CT + 557 4 619 613 # HO-OH + 558 4 620 617 # HO-OH + 559 1 622 621 # CT-CT + 560 2 623 621 # CT-OH + 561 3 624 621 # HC-CT + 562 3 625 621 # HC-CT + 563 3 626 622 # HC-CT + 564 2 627 622 # CT-OH + 565 3 628 622 # HC-CT + 566 4 629 623 # HO-OH + 567 4 630 627 # HO-OH + 568 1 632 631 # CT-CT + 569 2 633 631 # CT-OH + 570 3 634 631 # HC-CT + 571 3 635 631 # HC-CT + 572 3 636 632 # HC-CT + 573 2 637 632 # CT-OH + 574 3 638 632 # HC-CT + 575 4 639 633 # HO-OH + 576 4 640 637 # HO-OH + 577 1 642 641 # CT-CT + 578 2 643 641 # CT-OH + 579 3 644 641 # HC-CT + 580 3 645 641 # HC-CT + 581 3 646 642 # HC-CT + 582 2 647 642 # CT-OH + 583 3 648 642 # HC-CT + 584 4 649 643 # HO-OH + 585 4 650 647 # HO-OH + 586 1 652 651 # CT-CT + 587 2 653 651 # CT-OH + 588 3 654 651 # HC-CT + 589 3 655 651 # HC-CT + 590 3 656 652 # HC-CT + 591 2 657 652 # CT-OH + 592 3 658 652 # HC-CT + 593 4 659 653 # HO-OH + 594 4 660 657 # HO-OH + 595 1 662 661 # CT-CT + 596 2 663 661 # CT-OH + 597 3 664 661 # HC-CT + 598 3 665 661 # HC-CT + 599 3 666 662 # HC-CT + 600 2 667 662 # CT-OH + 601 3 668 662 # HC-CT + 602 4 669 663 # HO-OH + 603 4 670 667 # HO-OH + 604 1 672 671 # CT-CT + 605 2 673 671 # CT-OH + 606 3 674 671 # HC-CT + 607 3 675 671 # HC-CT + 608 3 676 672 # HC-CT + 609 2 677 672 # CT-OH + 610 3 678 672 # HC-CT + 611 4 679 673 # HO-OH + 612 4 680 677 # HO-OH + 613 1 682 681 # CT-CT + 614 2 683 681 # CT-OH + 615 3 684 681 # HC-CT + 616 3 685 681 # HC-CT + 617 3 686 682 # HC-CT + 618 2 687 682 # CT-OH + 619 3 688 682 # HC-CT + 620 4 689 683 # HO-OH + 621 4 690 687 # HO-OH + 622 1 692 691 # CT-CT + 623 2 693 691 # CT-OH + 624 3 694 691 # HC-CT + 625 3 695 691 # HC-CT + 626 3 696 692 # HC-CT + 627 2 697 692 # CT-OH + 628 3 698 692 # HC-CT + 629 4 699 693 # HO-OH + 630 4 700 697 # HO-OH + 631 1 702 701 # CT-CT + 632 2 703 701 # CT-OH + 633 3 704 701 # HC-CT + 634 3 705 701 # HC-CT + 635 3 706 702 # HC-CT + 636 2 707 702 # CT-OH + 637 3 708 702 # HC-CT + 638 4 709 703 # HO-OH + 639 4 710 707 # HO-OH + 640 1 712 711 # CT-CT + 641 2 713 711 # CT-OH + 642 3 714 711 # HC-CT + 643 3 715 711 # HC-CT + 644 3 716 712 # HC-CT + 645 2 717 712 # CT-OH + 646 3 718 712 # HC-CT + 647 4 719 713 # HO-OH + 648 4 720 717 # HO-OH + 649 1 722 721 # CT-CT + 650 2 723 721 # CT-OH + 651 3 724 721 # HC-CT + 652 3 725 721 # HC-CT + 653 3 726 722 # HC-CT + 654 2 727 722 # CT-OH + 655 3 728 722 # HC-CT + 656 4 729 723 # HO-OH + 657 4 730 727 # HO-OH + 658 1 732 731 # CT-CT + 659 2 733 731 # CT-OH + 660 3 734 731 # HC-CT + 661 3 735 731 # HC-CT + 662 3 736 732 # HC-CT + 663 2 737 732 # CT-OH + 664 3 738 732 # HC-CT + 665 4 739 733 # HO-OH + 666 4 740 737 # HO-OH + 667 1 742 741 # CT-CT + 668 2 743 741 # CT-OH + 669 3 744 741 # HC-CT + 670 3 745 741 # HC-CT + 671 3 746 742 # HC-CT + 672 2 747 742 # CT-OH + 673 3 748 742 # HC-CT + 674 4 749 743 # HO-OH + 675 4 750 747 # HO-OH + 676 1 752 751 # CT-CT + 677 2 753 751 # CT-OH + 678 3 754 751 # HC-CT + 679 3 755 751 # HC-CT + 680 3 756 752 # HC-CT + 681 2 757 752 # CT-OH + 682 3 758 752 # HC-CT + 683 4 759 753 # HO-OH + 684 4 760 757 # HO-OH + 685 1 762 761 # CT-CT + 686 2 763 761 # CT-OH + 687 3 764 761 # HC-CT + 688 3 765 761 # HC-CT + 689 3 766 762 # HC-CT + 690 2 767 762 # CT-OH + 691 3 768 762 # HC-CT + 692 4 769 763 # HO-OH + 693 4 770 767 # HO-OH + 694 1 772 771 # CT-CT + 695 2 773 771 # CT-OH + 696 3 774 771 # HC-CT + 697 3 775 771 # HC-CT + 698 3 776 772 # HC-CT + 699 2 777 772 # CT-OH + 700 3 778 772 # HC-CT + 701 4 779 773 # HO-OH + 702 4 780 777 # HO-OH + 703 1 782 781 # CT-CT + 704 2 783 781 # CT-OH + 705 3 784 781 # HC-CT + 706 3 785 781 # HC-CT + 707 3 786 782 # HC-CT + 708 2 787 782 # CT-OH + 709 3 788 782 # HC-CT + 710 4 789 783 # HO-OH + 711 4 790 787 # HO-OH + 712 1 792 791 # CT-CT + 713 2 793 791 # CT-OH + 714 3 794 791 # HC-CT + 715 3 795 791 # HC-CT + 716 3 796 792 # HC-CT + 717 2 797 792 # CT-OH + 718 3 798 792 # HC-CT + 719 4 799 793 # HO-OH + 720 4 800 797 # HO-OH + 721 1 802 801 # CT-CT + 722 2 803 801 # CT-OH + 723 3 804 801 # HC-CT + 724 3 805 801 # HC-CT + 725 3 806 802 # HC-CT + 726 2 807 802 # CT-OH + 727 3 808 802 # HC-CT + 728 4 809 803 # HO-OH + 729 4 810 807 # HO-OH + 730 1 812 811 # CT-CT + 731 2 813 811 # CT-OH + 732 3 814 811 # HC-CT + 733 3 815 811 # HC-CT + 734 3 816 812 # HC-CT + 735 2 817 812 # CT-OH + 736 3 818 812 # HC-CT + 737 4 819 813 # HO-OH + 738 4 820 817 # HO-OH + 739 1 822 821 # CT-CT + 740 2 823 821 # CT-OH + 741 3 824 821 # HC-CT + 742 3 825 821 # HC-CT + 743 3 826 822 # HC-CT + 744 2 827 822 # CT-OH + 745 3 828 822 # HC-CT + 746 4 829 823 # HO-OH + 747 4 830 827 # HO-OH + 748 1 832 831 # CT-CT + 749 2 833 831 # CT-OH + 750 3 834 831 # HC-CT + 751 3 835 831 # HC-CT + 752 3 836 832 # HC-CT + 753 2 837 832 # CT-OH + 754 3 838 832 # HC-CT + 755 4 839 833 # HO-OH + 756 4 840 837 # HO-OH + 757 1 842 841 # CT-CT + 758 2 843 841 # CT-OH + 759 3 844 841 # HC-CT + 760 3 845 841 # HC-CT + 761 3 846 842 # HC-CT + 762 2 847 842 # CT-OH + 763 3 848 842 # HC-CT + 764 4 849 843 # HO-OH + 765 4 850 847 # HO-OH + 766 1 852 851 # CT-CT + 767 2 853 851 # CT-OH + 768 3 854 851 # HC-CT + 769 3 855 851 # HC-CT + 770 3 856 852 # HC-CT + 771 2 857 852 # CT-OH + 772 3 858 852 # HC-CT + 773 4 859 853 # HO-OH + 774 4 860 857 # HO-OH + 775 1 862 861 # CT-CT + 776 2 863 861 # CT-OH + 777 3 864 861 # HC-CT + 778 3 865 861 # HC-CT + 779 3 866 862 # HC-CT + 780 2 867 862 # CT-OH + 781 3 868 862 # HC-CT + 782 4 869 863 # HO-OH + 783 4 870 867 # HO-OH + 784 1 872 871 # CT-CT + 785 2 873 871 # CT-OH + 786 3 874 871 # HC-CT + 787 3 875 871 # HC-CT + 788 3 876 872 # HC-CT + 789 2 877 872 # CT-OH + 790 3 878 872 # HC-CT + 791 4 879 873 # HO-OH + 792 4 880 877 # HO-OH + 793 1 882 881 # CT-CT + 794 2 883 881 # CT-OH + 795 3 884 881 # HC-CT + 796 3 885 881 # HC-CT + 797 3 886 882 # HC-CT + 798 2 887 882 # CT-OH + 799 3 888 882 # HC-CT + 800 4 889 883 # HO-OH + 801 4 890 887 # HO-OH + 802 1 892 891 # CT-CT + 803 2 893 891 # CT-OH + 804 3 894 891 # HC-CT + 805 3 895 891 # HC-CT + 806 3 896 892 # HC-CT + 807 2 897 892 # CT-OH + 808 3 898 892 # HC-CT + 809 4 899 893 # HO-OH + 810 4 900 897 # HO-OH + 811 1 902 901 # CT-CT + 812 2 903 901 # CT-OH + 813 3 904 901 # HC-CT + 814 3 905 901 # HC-CT + 815 3 906 902 # HC-CT + 816 2 907 902 # CT-OH + 817 3 908 902 # HC-CT + 818 4 909 903 # HO-OH + 819 4 910 907 # HO-OH + 820 1 912 911 # CT-CT + 821 2 913 911 # CT-OH + 822 3 914 911 # HC-CT + 823 3 915 911 # HC-CT + 824 3 916 912 # HC-CT + 825 2 917 912 # CT-OH + 826 3 918 912 # HC-CT + 827 4 919 913 # HO-OH + 828 4 920 917 # HO-OH + 829 1 922 921 # CT-CT + 830 2 923 921 # CT-OH + 831 3 924 921 # HC-CT + 832 3 925 921 # HC-CT + 833 3 926 922 # HC-CT + 834 2 927 922 # CT-OH + 835 3 928 922 # HC-CT + 836 4 929 923 # HO-OH + 837 4 930 927 # HO-OH + 838 1 932 931 # CT-CT + 839 2 933 931 # CT-OH + 840 3 934 931 # HC-CT + 841 3 935 931 # HC-CT + 842 3 936 932 # HC-CT + 843 2 937 932 # CT-OH + 844 3 938 932 # HC-CT + 845 4 939 933 # HO-OH + 846 4 940 937 # HO-OH + 847 1 942 941 # CT-CT + 848 2 943 941 # CT-OH + 849 3 944 941 # HC-CT + 850 3 945 941 # HC-CT + 851 3 946 942 # HC-CT + 852 2 947 942 # CT-OH + 853 3 948 942 # HC-CT + 854 4 949 943 # HO-OH + 855 4 950 947 # HO-OH + 856 1 952 951 # CT-CT + 857 2 953 951 # CT-OH + 858 3 954 951 # HC-CT + 859 3 955 951 # HC-CT + 860 3 956 952 # HC-CT + 861 2 957 952 # CT-OH + 862 3 958 952 # HC-CT + 863 4 959 953 # HO-OH + 864 4 960 957 # HO-OH + 865 1 962 961 # CT-CT + 866 2 963 961 # CT-OH + 867 3 964 961 # HC-CT + 868 3 965 961 # HC-CT + 869 3 966 962 # HC-CT + 870 2 967 962 # CT-OH + 871 3 968 962 # HC-CT + 872 4 969 963 # HO-OH + 873 4 970 967 # HO-OH + 874 1 972 971 # CT-CT + 875 2 973 971 # CT-OH + 876 3 974 971 # HC-CT + 877 3 975 971 # HC-CT + 878 3 976 972 # HC-CT + 879 2 977 972 # CT-OH + 880 3 978 972 # HC-CT + 881 4 979 973 # HO-OH + 882 4 980 977 # HO-OH + 883 1 982 981 # CT-CT + 884 2 983 981 # CT-OH + 885 3 984 981 # HC-CT + 886 3 985 981 # HC-CT + 887 3 986 982 # HC-CT + 888 2 987 982 # CT-OH + 889 3 988 982 # HC-CT + 890 4 989 983 # HO-OH + 891 4 990 987 # HO-OH + 892 1 992 991 # CT-CT + 893 2 993 991 # CT-OH + 894 3 994 991 # HC-CT + 895 3 995 991 # HC-CT + 896 3 996 992 # HC-CT + 897 2 997 992 # CT-OH + 898 3 998 992 # HC-CT + 899 4 999 993 # HO-OH + 900 4 1000 997 # HO-OH + 901 1 1002 1001 # CT-CT + 902 2 1003 1001 # CT-OH + 903 3 1004 1001 # HC-CT + 904 3 1005 1001 # HC-CT + 905 3 1006 1002 # HC-CT + 906 2 1007 1002 # CT-OH + 907 3 1008 1002 # HC-CT + 908 4 1009 1003 # HO-OH + 909 4 1010 1007 # HO-OH + 910 1 1012 1011 # CT-CT + 911 2 1013 1011 # CT-OH + 912 3 1014 1011 # HC-CT + 913 3 1015 1011 # HC-CT + 914 3 1016 1012 # HC-CT + 915 2 1017 1012 # CT-OH + 916 3 1018 1012 # HC-CT + 917 4 1019 1013 # HO-OH + 918 4 1020 1017 # HO-OH + 919 1 1022 1021 # CT-CT + 920 2 1023 1021 # CT-OH + 921 3 1024 1021 # HC-CT + 922 3 1025 1021 # HC-CT + 923 3 1026 1022 # HC-CT + 924 2 1027 1022 # CT-OH + 925 3 1028 1022 # HC-CT + 926 4 1029 1023 # HO-OH + 927 4 1030 1027 # HO-OH + 928 1 1032 1031 # CT-CT + 929 2 1033 1031 # CT-OH + 930 3 1034 1031 # HC-CT + 931 3 1035 1031 # HC-CT + 932 3 1036 1032 # HC-CT + 933 2 1037 1032 # CT-OH + 934 3 1038 1032 # HC-CT + 935 4 1039 1033 # HO-OH + 936 4 1040 1037 # HO-OH + 937 1 1042 1041 # CT-CT + 938 2 1043 1041 # CT-OH + 939 3 1044 1041 # HC-CT + 940 3 1045 1041 # HC-CT + 941 3 1046 1042 # HC-CT + 942 2 1047 1042 # CT-OH + 943 3 1048 1042 # HC-CT + 944 4 1049 1043 # HO-OH + 945 4 1050 1047 # HO-OH + 946 1 1052 1051 # CT-CT + 947 2 1053 1051 # CT-OH + 948 3 1054 1051 # HC-CT + 949 3 1055 1051 # HC-CT + 950 3 1056 1052 # HC-CT + 951 2 1057 1052 # CT-OH + 952 3 1058 1052 # HC-CT + 953 4 1059 1053 # HO-OH + 954 4 1060 1057 # HO-OH + 955 1 1062 1061 # CT-CT + 956 2 1063 1061 # CT-OH + 957 3 1064 1061 # HC-CT + 958 3 1065 1061 # HC-CT + 959 3 1066 1062 # HC-CT + 960 2 1067 1062 # CT-OH + 961 3 1068 1062 # HC-CT + 962 4 1069 1063 # HO-OH + 963 4 1070 1067 # HO-OH + 964 1 1072 1071 # CT-CT + 965 2 1073 1071 # CT-OH + 966 3 1074 1071 # HC-CT + 967 3 1075 1071 # HC-CT + 968 3 1076 1072 # HC-CT + 969 2 1077 1072 # CT-OH + 970 3 1078 1072 # HC-CT + 971 4 1079 1073 # HO-OH + 972 4 1080 1077 # HO-OH + 973 1 1082 1081 # CT-CT + 974 2 1083 1081 # CT-OH + 975 3 1084 1081 # HC-CT + 976 3 1085 1081 # HC-CT + 977 3 1086 1082 # HC-CT + 978 2 1087 1082 # CT-OH + 979 3 1088 1082 # HC-CT + 980 4 1089 1083 # HO-OH + 981 4 1090 1087 # HO-OH + 982 1 1092 1091 # CT-CT + 983 2 1093 1091 # CT-OH + 984 3 1094 1091 # HC-CT + 985 3 1095 1091 # HC-CT + 986 3 1096 1092 # HC-CT + 987 2 1097 1092 # CT-OH + 988 3 1098 1092 # HC-CT + 989 4 1099 1093 # HO-OH + 990 4 1100 1097 # HO-OH + 991 1 1102 1101 # CT-CT + 992 2 1103 1101 # CT-OH + 993 3 1104 1101 # HC-CT + 994 3 1105 1101 # HC-CT + 995 3 1106 1102 # HC-CT + 996 2 1107 1102 # CT-OH + 997 3 1108 1102 # HC-CT + 998 4 1109 1103 # HO-OH + 999 4 1110 1107 # HO-OH + 1000 1 1112 1111 # CT-CT + 1001 2 1113 1111 # CT-OH + 1002 3 1114 1111 # HC-CT + 1003 3 1115 1111 # HC-CT + 1004 3 1116 1112 # HC-CT + 1005 2 1117 1112 # CT-OH + 1006 3 1118 1112 # HC-CT + 1007 4 1119 1113 # HO-OH + 1008 4 1120 1117 # HO-OH + 1009 1 1122 1121 # CT-CT + 1010 2 1123 1121 # CT-OH + 1011 3 1124 1121 # HC-CT + 1012 3 1125 1121 # HC-CT + 1013 3 1126 1122 # HC-CT + 1014 2 1127 1122 # CT-OH + 1015 3 1128 1122 # HC-CT + 1016 4 1129 1123 # HO-OH + 1017 4 1130 1127 # HO-OH + 1018 1 1132 1131 # CT-CT + 1019 2 1133 1131 # CT-OH + 1020 3 1134 1131 # HC-CT + 1021 3 1135 1131 # HC-CT + 1022 3 1136 1132 # HC-CT + 1023 2 1137 1132 # CT-OH + 1024 3 1138 1132 # HC-CT + 1025 4 1139 1133 # HO-OH + 1026 4 1140 1137 # HO-OH + 1027 1 1142 1141 # CT-CT + 1028 2 1143 1141 # CT-OH + 1029 3 1144 1141 # HC-CT + 1030 3 1145 1141 # HC-CT + 1031 3 1146 1142 # HC-CT + 1032 2 1147 1142 # CT-OH + 1033 3 1148 1142 # HC-CT + 1034 4 1149 1143 # HO-OH + 1035 4 1150 1147 # HO-OH + 1036 1 1152 1151 # CT-CT + 1037 2 1153 1151 # CT-OH + 1038 3 1154 1151 # HC-CT + 1039 3 1155 1151 # HC-CT + 1040 3 1156 1152 # HC-CT + 1041 2 1157 1152 # CT-OH + 1042 3 1158 1152 # HC-CT + 1043 4 1159 1153 # HO-OH + 1044 4 1160 1157 # HO-OH + 1045 1 1162 1161 # CT-CT + 1046 2 1163 1161 # CT-OH + 1047 3 1164 1161 # HC-CT + 1048 3 1165 1161 # HC-CT + 1049 3 1166 1162 # HC-CT + 1050 2 1167 1162 # CT-OH + 1051 3 1168 1162 # HC-CT + 1052 4 1169 1163 # HO-OH + 1053 4 1170 1167 # HO-OH + 1054 1 1172 1171 # CT-CT + 1055 2 1173 1171 # CT-OH + 1056 3 1174 1171 # HC-CT + 1057 3 1175 1171 # HC-CT + 1058 3 1176 1172 # HC-CT + 1059 2 1177 1172 # CT-OH + 1060 3 1178 1172 # HC-CT + 1061 4 1179 1173 # HO-OH + 1062 4 1180 1177 # HO-OH + 1063 1 1182 1181 # CT-CT + 1064 2 1183 1181 # CT-OH + 1065 3 1184 1181 # HC-CT + 1066 3 1185 1181 # HC-CT + 1067 3 1186 1182 # HC-CT + 1068 2 1187 1182 # CT-OH + 1069 3 1188 1182 # HC-CT + 1070 4 1189 1183 # HO-OH + 1071 4 1190 1187 # HO-OH + 1072 1 1192 1191 # CT-CT + 1073 2 1193 1191 # CT-OH + 1074 3 1194 1191 # HC-CT + 1075 3 1195 1191 # HC-CT + 1076 3 1196 1192 # HC-CT + 1077 2 1197 1192 # CT-OH + 1078 3 1198 1192 # HC-CT + 1079 4 1199 1193 # HO-OH + 1080 4 1200 1197 # HO-OH + 1081 1 1202 1201 # CT-CT + 1082 2 1203 1201 # CT-OH + 1083 3 1204 1201 # HC-CT + 1084 3 1205 1201 # HC-CT + 1085 3 1206 1202 # HC-CT + 1086 2 1207 1202 # CT-OH + 1087 3 1208 1202 # HC-CT + 1088 4 1209 1203 # HO-OH + 1089 4 1210 1207 # HO-OH + 1090 1 1212 1211 # CT-CT + 1091 2 1213 1211 # CT-OH + 1092 3 1214 1211 # HC-CT + 1093 3 1215 1211 # HC-CT + 1094 3 1216 1212 # HC-CT + 1095 2 1217 1212 # CT-OH + 1096 3 1218 1212 # HC-CT + 1097 4 1219 1213 # HO-OH + 1098 4 1220 1217 # HO-OH + 1099 1 1222 1221 # CT-CT + 1100 2 1223 1221 # CT-OH + 1101 3 1224 1221 # HC-CT + 1102 3 1225 1221 # HC-CT + 1103 3 1226 1222 # HC-CT + 1104 2 1227 1222 # CT-OH + 1105 3 1228 1222 # HC-CT + 1106 4 1229 1223 # HO-OH + 1107 4 1230 1227 # HO-OH + 1108 1 1232 1231 # CT-CT + 1109 2 1233 1231 # CT-OH + 1110 3 1234 1231 # HC-CT + 1111 3 1235 1231 # HC-CT + 1112 3 1236 1232 # HC-CT + 1113 2 1237 1232 # CT-OH + 1114 3 1238 1232 # HC-CT + 1115 4 1239 1233 # HO-OH + 1116 4 1240 1237 # HO-OH + 1117 1 1242 1241 # CT-CT + 1118 2 1243 1241 # CT-OH + 1119 3 1244 1241 # HC-CT + 1120 3 1245 1241 # HC-CT + 1121 3 1246 1242 # HC-CT + 1122 2 1247 1242 # CT-OH + 1123 3 1248 1242 # HC-CT + 1124 4 1249 1243 # HO-OH + 1125 4 1250 1247 # HO-OH + 1126 1 1252 1251 # CT-CT + 1127 2 1253 1251 # CT-OH + 1128 3 1254 1251 # HC-CT + 1129 3 1255 1251 # HC-CT + 1130 3 1256 1252 # HC-CT + 1131 2 1257 1252 # CT-OH + 1132 3 1258 1252 # HC-CT + 1133 4 1259 1253 # HO-OH + 1134 4 1260 1257 # HO-OH + 1135 1 1262 1261 # CT-CT + 1136 2 1263 1261 # CT-OH + 1137 3 1264 1261 # HC-CT + 1138 3 1265 1261 # HC-CT + 1139 3 1266 1262 # HC-CT + 1140 2 1267 1262 # CT-OH + 1141 3 1268 1262 # HC-CT + 1142 4 1269 1263 # HO-OH + 1143 4 1270 1267 # HO-OH + 1144 1 1272 1271 # CT-CT + 1145 2 1273 1271 # CT-OH + 1146 3 1274 1271 # HC-CT + 1147 3 1275 1271 # HC-CT + 1148 3 1276 1272 # HC-CT + 1149 2 1277 1272 # CT-OH + 1150 3 1278 1272 # HC-CT + 1151 4 1279 1273 # HO-OH + 1152 4 1280 1277 # HO-OH + 1153 1 1282 1281 # CT-CT + 1154 2 1283 1281 # CT-OH + 1155 3 1284 1281 # HC-CT + 1156 3 1285 1281 # HC-CT + 1157 3 1286 1282 # HC-CT + 1158 2 1287 1282 # CT-OH + 1159 3 1288 1282 # HC-CT + 1160 4 1289 1283 # HO-OH + 1161 4 1290 1287 # HO-OH + 1162 1 1292 1291 # CT-CT + 1163 2 1293 1291 # CT-OH + 1164 3 1294 1291 # HC-CT + 1165 3 1295 1291 # HC-CT + 1166 3 1296 1292 # HC-CT + 1167 2 1297 1292 # CT-OH + 1168 3 1298 1292 # HC-CT + 1169 4 1299 1293 # HO-OH + 1170 4 1300 1297 # HO-OH + 1171 1 1302 1301 # CT-CT + 1172 2 1303 1301 # CT-OH + 1173 3 1304 1301 # HC-CT + 1174 3 1305 1301 # HC-CT + 1175 3 1306 1302 # HC-CT + 1176 2 1307 1302 # CT-OH + 1177 3 1308 1302 # HC-CT + 1178 4 1309 1303 # HO-OH + 1179 4 1310 1307 # HO-OH + 1180 1 1312 1311 # CT-CT + 1181 2 1313 1311 # CT-OH + 1182 3 1314 1311 # HC-CT + 1183 3 1315 1311 # HC-CT + 1184 3 1316 1312 # HC-CT + 1185 2 1317 1312 # CT-OH + 1186 3 1318 1312 # HC-CT + 1187 4 1319 1313 # HO-OH + 1188 4 1320 1317 # HO-OH + 1189 1 1322 1321 # CT-CT + 1190 2 1323 1321 # CT-OH + 1191 3 1324 1321 # HC-CT + 1192 3 1325 1321 # HC-CT + 1193 3 1326 1322 # HC-CT + 1194 2 1327 1322 # CT-OH + 1195 3 1328 1322 # HC-CT + 1196 4 1329 1323 # HO-OH + 1197 4 1330 1327 # HO-OH + 1198 1 1332 1331 # CT-CT + 1199 2 1333 1331 # CT-OH + 1200 3 1334 1331 # HC-CT + 1201 3 1335 1331 # HC-CT + 1202 3 1336 1332 # HC-CT + 1203 2 1337 1332 # CT-OH + 1204 3 1338 1332 # HC-CT + 1205 4 1339 1333 # HO-OH + 1206 4 1340 1337 # HO-OH + 1207 1 1342 1341 # CT-CT + 1208 2 1343 1341 # CT-OH + 1209 3 1344 1341 # HC-CT + 1210 3 1345 1341 # HC-CT + 1211 3 1346 1342 # HC-CT + 1212 2 1347 1342 # CT-OH + 1213 3 1348 1342 # HC-CT + 1214 4 1349 1343 # HO-OH + 1215 4 1350 1347 # HO-OH + 1216 1 1352 1351 # CT-CT + 1217 2 1353 1351 # CT-OH + 1218 3 1354 1351 # HC-CT + 1219 3 1355 1351 # HC-CT + 1220 3 1356 1352 # HC-CT + 1221 2 1357 1352 # CT-OH + 1222 3 1358 1352 # HC-CT + 1223 4 1359 1353 # HO-OH + 1224 4 1360 1357 # HO-OH + 1225 1 1362 1361 # CT-CT + 1226 2 1363 1361 # CT-OH + 1227 3 1364 1361 # HC-CT + 1228 3 1365 1361 # HC-CT + 1229 3 1366 1362 # HC-CT + 1230 2 1367 1362 # CT-OH + 1231 3 1368 1362 # HC-CT + 1232 4 1369 1363 # HO-OH + 1233 4 1370 1367 # HO-OH + 1234 1 1372 1371 # CT-CT + 1235 2 1373 1371 # CT-OH + 1236 3 1374 1371 # HC-CT + 1237 3 1375 1371 # HC-CT + 1238 3 1376 1372 # HC-CT + 1239 2 1377 1372 # CT-OH + 1240 3 1378 1372 # HC-CT + 1241 4 1379 1373 # HO-OH + 1242 4 1380 1377 # HO-OH + 1243 1 1382 1381 # CT-CT + 1244 2 1383 1381 # CT-OH + 1245 3 1384 1381 # HC-CT + 1246 3 1385 1381 # HC-CT + 1247 3 1386 1382 # HC-CT + 1248 2 1387 1382 # CT-OH + 1249 3 1388 1382 # HC-CT + 1250 4 1389 1383 # HO-OH + 1251 4 1390 1387 # HO-OH + 1252 1 1392 1391 # CT-CT + 1253 2 1393 1391 # CT-OH + 1254 3 1394 1391 # HC-CT + 1255 3 1395 1391 # HC-CT + 1256 3 1396 1392 # HC-CT + 1257 2 1397 1392 # CT-OH + 1258 3 1398 1392 # HC-CT + 1259 4 1399 1393 # HO-OH + 1260 4 1400 1397 # HO-OH + 1261 1 1402 1401 # CT-CT + 1262 2 1403 1401 # CT-OH + 1263 3 1404 1401 # HC-CT + 1264 3 1405 1401 # HC-CT + 1265 3 1406 1402 # HC-CT + 1266 2 1407 1402 # CT-OH + 1267 3 1408 1402 # HC-CT + 1268 4 1409 1403 # HO-OH + 1269 4 1410 1407 # HO-OH + 1270 1 1412 1411 # CT-CT + 1271 2 1413 1411 # CT-OH + 1272 3 1414 1411 # HC-CT + 1273 3 1415 1411 # HC-CT + 1274 3 1416 1412 # HC-CT + 1275 2 1417 1412 # CT-OH + 1276 3 1418 1412 # HC-CT + 1277 4 1419 1413 # HO-OH + 1278 4 1420 1417 # HO-OH + 1279 1 1422 1421 # CT-CT + 1280 2 1423 1421 # CT-OH + 1281 3 1424 1421 # HC-CT + 1282 3 1425 1421 # HC-CT + 1283 3 1426 1422 # HC-CT + 1284 2 1427 1422 # CT-OH + 1285 3 1428 1422 # HC-CT + 1286 4 1429 1423 # HO-OH + 1287 4 1430 1427 # HO-OH + 1288 1 1432 1431 # CT-CT + 1289 2 1433 1431 # CT-OH + 1290 3 1434 1431 # HC-CT + 1291 3 1435 1431 # HC-CT + 1292 3 1436 1432 # HC-CT + 1293 2 1437 1432 # CT-OH + 1294 3 1438 1432 # HC-CT + 1295 4 1439 1433 # HO-OH + 1296 4 1440 1437 # HO-OH + 1297 1 1442 1441 # CT-CT + 1298 2 1443 1441 # CT-OH + 1299 3 1444 1441 # HC-CT + 1300 3 1445 1441 # HC-CT + 1301 3 1446 1442 # HC-CT + 1302 2 1447 1442 # CT-OH + 1303 3 1448 1442 # HC-CT + 1304 4 1449 1443 # HO-OH + 1305 4 1450 1447 # HO-OH + 1306 1 1452 1451 # CT-CT + 1307 2 1453 1451 # CT-OH + 1308 3 1454 1451 # HC-CT + 1309 3 1455 1451 # HC-CT + 1310 3 1456 1452 # HC-CT + 1311 2 1457 1452 # CT-OH + 1312 3 1458 1452 # HC-CT + 1313 4 1459 1453 # HO-OH + 1314 4 1460 1457 # HO-OH + 1315 1 1462 1461 # CT-CT + 1316 2 1463 1461 # CT-OH + 1317 3 1464 1461 # HC-CT + 1318 3 1465 1461 # HC-CT + 1319 3 1466 1462 # HC-CT + 1320 2 1467 1462 # CT-OH + 1321 3 1468 1462 # HC-CT + 1322 4 1469 1463 # HO-OH + 1323 4 1470 1467 # HO-OH + 1324 1 1472 1471 # CT-CT + 1325 2 1473 1471 # CT-OH + 1326 3 1474 1471 # HC-CT + 1327 3 1475 1471 # HC-CT + 1328 3 1476 1472 # HC-CT + 1329 2 1477 1472 # CT-OH + 1330 3 1478 1472 # HC-CT + 1331 4 1479 1473 # HO-OH + 1332 4 1480 1477 # HO-OH + 1333 1 1482 1481 # CT-CT + 1334 2 1483 1481 # CT-OH + 1335 3 1484 1481 # HC-CT + 1336 3 1485 1481 # HC-CT + 1337 3 1486 1482 # HC-CT + 1338 2 1487 1482 # CT-OH + 1339 3 1488 1482 # HC-CT + 1340 4 1489 1483 # HO-OH + 1341 4 1490 1487 # HO-OH + 1342 1 1492 1491 # CT-CT + 1343 2 1493 1491 # CT-OH + 1344 3 1494 1491 # HC-CT + 1345 3 1495 1491 # HC-CT + 1346 3 1496 1492 # HC-CT + 1347 2 1497 1492 # CT-OH + 1348 3 1498 1492 # HC-CT + 1349 4 1499 1493 # HO-OH + 1350 4 1500 1497 # HO-OH + 1351 1 1502 1501 # CT-CT + 1352 2 1503 1501 # CT-OH + 1353 3 1504 1501 # HC-CT + 1354 3 1505 1501 # HC-CT + 1355 3 1506 1502 # HC-CT + 1356 2 1507 1502 # CT-OH + 1357 3 1508 1502 # HC-CT + 1358 4 1509 1503 # HO-OH + 1359 4 1510 1507 # HO-OH + 1360 1 1512 1511 # CT-CT + 1361 2 1513 1511 # CT-OH + 1362 3 1514 1511 # HC-CT + 1363 3 1515 1511 # HC-CT + 1364 3 1516 1512 # HC-CT + 1365 2 1517 1512 # CT-OH + 1366 3 1518 1512 # HC-CT + 1367 4 1519 1513 # HO-OH + 1368 4 1520 1517 # HO-OH + 1369 1 1522 1521 # CT-CT + 1370 2 1523 1521 # CT-OH + 1371 3 1524 1521 # HC-CT + 1372 3 1525 1521 # HC-CT + 1373 3 1526 1522 # HC-CT + 1374 2 1527 1522 # CT-OH + 1375 3 1528 1522 # HC-CT + 1376 4 1529 1523 # HO-OH + 1377 4 1530 1527 # HO-OH + 1378 1 1532 1531 # CT-CT + 1379 2 1533 1531 # CT-OH + 1380 3 1534 1531 # HC-CT + 1381 3 1535 1531 # HC-CT + 1382 3 1536 1532 # HC-CT + 1383 2 1537 1532 # CT-OH + 1384 3 1538 1532 # HC-CT + 1385 4 1539 1533 # HO-OH + 1386 4 1540 1537 # HO-OH + 1387 1 1542 1541 # CT-CT + 1388 2 1543 1541 # CT-OH + 1389 3 1544 1541 # HC-CT + 1390 3 1545 1541 # HC-CT + 1391 3 1546 1542 # HC-CT + 1392 2 1547 1542 # CT-OH + 1393 3 1548 1542 # HC-CT + 1394 4 1549 1543 # HO-OH + 1395 4 1550 1547 # HO-OH + 1396 1 1552 1551 # CT-CT + 1397 2 1553 1551 # CT-OH + 1398 3 1554 1551 # HC-CT + 1399 3 1555 1551 # HC-CT + 1400 3 1556 1552 # HC-CT + 1401 2 1557 1552 # CT-OH + 1402 3 1558 1552 # HC-CT + 1403 4 1559 1553 # HO-OH + 1404 4 1560 1557 # HO-OH + 1405 1 1562 1561 # CT-CT + 1406 2 1563 1561 # CT-OH + 1407 3 1564 1561 # HC-CT + 1408 3 1565 1561 # HC-CT + 1409 3 1566 1562 # HC-CT + 1410 2 1567 1562 # CT-OH + 1411 3 1568 1562 # HC-CT + 1412 4 1569 1563 # HO-OH + 1413 4 1570 1567 # HO-OH + 1414 1 1572 1571 # CT-CT + 1415 2 1573 1571 # CT-OH + 1416 3 1574 1571 # HC-CT + 1417 3 1575 1571 # HC-CT + 1418 3 1576 1572 # HC-CT + 1419 2 1577 1572 # CT-OH + 1420 3 1578 1572 # HC-CT + 1421 4 1579 1573 # HO-OH + 1422 4 1580 1577 # HO-OH + 1423 1 1582 1581 # CT-CT + 1424 2 1583 1581 # CT-OH + 1425 3 1584 1581 # HC-CT + 1426 3 1585 1581 # HC-CT + 1427 3 1586 1582 # HC-CT + 1428 2 1587 1582 # CT-OH + 1429 3 1588 1582 # HC-CT + 1430 4 1589 1583 # HO-OH + 1431 4 1590 1587 # HO-OH + 1432 1 1592 1591 # CT-CT + 1433 2 1593 1591 # CT-OH + 1434 3 1594 1591 # HC-CT + 1435 3 1595 1591 # HC-CT + 1436 3 1596 1592 # HC-CT + 1437 2 1597 1592 # CT-OH + 1438 3 1598 1592 # HC-CT + 1439 4 1599 1593 # HO-OH + 1440 4 1600 1597 # HO-OH + 1441 1 1602 1601 # CT-CT + 1442 2 1603 1601 # CT-OH + 1443 3 1604 1601 # HC-CT + 1444 3 1605 1601 # HC-CT + 1445 3 1606 1602 # HC-CT + 1446 2 1607 1602 # CT-OH + 1447 3 1608 1602 # HC-CT + 1448 4 1609 1603 # HO-OH + 1449 4 1610 1607 # HO-OH + 1450 1 1612 1611 # CT-CT + 1451 2 1613 1611 # CT-OH + 1452 3 1614 1611 # HC-CT + 1453 3 1615 1611 # HC-CT + 1454 3 1616 1612 # HC-CT + 1455 2 1617 1612 # CT-OH + 1456 3 1618 1612 # HC-CT + 1457 4 1619 1613 # HO-OH + 1458 4 1620 1617 # HO-OH + 1459 1 1622 1621 # CT-CT + 1460 2 1623 1621 # CT-OH + 1461 3 1624 1621 # HC-CT + 1462 3 1625 1621 # HC-CT + 1463 3 1626 1622 # HC-CT + 1464 2 1627 1622 # CT-OH + 1465 3 1628 1622 # HC-CT + 1466 4 1629 1623 # HO-OH + 1467 4 1630 1627 # HO-OH + 1468 1 1632 1631 # CT-CT + 1469 2 1633 1631 # CT-OH + 1470 3 1634 1631 # HC-CT + 1471 3 1635 1631 # HC-CT + 1472 3 1636 1632 # HC-CT + 1473 2 1637 1632 # CT-OH + 1474 3 1638 1632 # HC-CT + 1475 4 1639 1633 # HO-OH + 1476 4 1640 1637 # HO-OH + 1477 1 1642 1641 # CT-CT + 1478 2 1643 1641 # CT-OH + 1479 3 1644 1641 # HC-CT + 1480 3 1645 1641 # HC-CT + 1481 3 1646 1642 # HC-CT + 1482 2 1647 1642 # CT-OH + 1483 3 1648 1642 # HC-CT + 1484 4 1649 1643 # HO-OH + 1485 4 1650 1647 # HO-OH + 1486 1 1652 1651 # CT-CT + 1487 2 1653 1651 # CT-OH + 1488 3 1654 1651 # HC-CT + 1489 3 1655 1651 # HC-CT + 1490 3 1656 1652 # HC-CT + 1491 2 1657 1652 # CT-OH + 1492 3 1658 1652 # HC-CT + 1493 4 1659 1653 # HO-OH + 1494 4 1660 1657 # HO-OH + 1495 1 1662 1661 # CT-CT + 1496 2 1663 1661 # CT-OH + 1497 3 1664 1661 # HC-CT + 1498 3 1665 1661 # HC-CT + 1499 3 1666 1662 # HC-CT + 1500 2 1667 1662 # CT-OH + 1501 3 1668 1662 # HC-CT + 1502 4 1669 1663 # HO-OH + 1503 4 1670 1667 # HO-OH + 1504 1 1672 1671 # CT-CT + 1505 2 1673 1671 # CT-OH + 1506 3 1674 1671 # HC-CT + 1507 3 1675 1671 # HC-CT + 1508 3 1676 1672 # HC-CT + 1509 2 1677 1672 # CT-OH + 1510 3 1678 1672 # HC-CT + 1511 4 1679 1673 # HO-OH + 1512 4 1680 1677 # HO-OH + 1513 1 1682 1681 # CT-CT + 1514 2 1683 1681 # CT-OH + 1515 3 1684 1681 # HC-CT + 1516 3 1685 1681 # HC-CT + 1517 3 1686 1682 # HC-CT + 1518 2 1687 1682 # CT-OH + 1519 3 1688 1682 # HC-CT + 1520 4 1689 1683 # HO-OH + 1521 4 1690 1687 # HO-OH + 1522 1 1692 1691 # CT-CT + 1523 2 1693 1691 # CT-OH + 1524 3 1694 1691 # HC-CT + 1525 3 1695 1691 # HC-CT + 1526 3 1696 1692 # HC-CT + 1527 2 1697 1692 # CT-OH + 1528 3 1698 1692 # HC-CT + 1529 4 1699 1693 # HO-OH + 1530 4 1700 1697 # HO-OH + 1531 1 1702 1701 # CT-CT + 1532 2 1703 1701 # CT-OH + 1533 3 1704 1701 # HC-CT + 1534 3 1705 1701 # HC-CT + 1535 3 1706 1702 # HC-CT + 1536 2 1707 1702 # CT-OH + 1537 3 1708 1702 # HC-CT + 1538 4 1709 1703 # HO-OH + 1539 4 1710 1707 # HO-OH + 1540 1 1712 1711 # CT-CT + 1541 2 1713 1711 # CT-OH + 1542 3 1714 1711 # HC-CT + 1543 3 1715 1711 # HC-CT + 1544 3 1716 1712 # HC-CT + 1545 2 1717 1712 # CT-OH + 1546 3 1718 1712 # HC-CT + 1547 4 1719 1713 # HO-OH + 1548 4 1720 1717 # HO-OH + 1549 1 1722 1721 # CT-CT + 1550 2 1723 1721 # CT-OH + 1551 3 1724 1721 # HC-CT + 1552 3 1725 1721 # HC-CT + 1553 3 1726 1722 # HC-CT + 1554 2 1727 1722 # CT-OH + 1555 3 1728 1722 # HC-CT + 1556 4 1729 1723 # HO-OH + 1557 4 1730 1727 # HO-OH + 1558 1 1732 1731 # CT-CT + 1559 2 1733 1731 # CT-OH + 1560 3 1734 1731 # HC-CT + 1561 3 1735 1731 # HC-CT + 1562 3 1736 1732 # HC-CT + 1563 2 1737 1732 # CT-OH + 1564 3 1738 1732 # HC-CT + 1565 4 1739 1733 # HO-OH + 1566 4 1740 1737 # HO-OH + 1567 1 1742 1741 # CT-CT + 1568 2 1743 1741 # CT-OH + 1569 3 1744 1741 # HC-CT + 1570 3 1745 1741 # HC-CT + 1571 3 1746 1742 # HC-CT + 1572 2 1747 1742 # CT-OH + 1573 3 1748 1742 # HC-CT + 1574 4 1749 1743 # HO-OH + 1575 4 1750 1747 # HO-OH + 1576 1 1752 1751 # CT-CT + 1577 2 1753 1751 # CT-OH + 1578 3 1754 1751 # HC-CT + 1579 3 1755 1751 # HC-CT + 1580 3 1756 1752 # HC-CT + 1581 2 1757 1752 # CT-OH + 1582 3 1758 1752 # HC-CT + 1583 4 1759 1753 # HO-OH + 1584 4 1760 1757 # HO-OH + 1585 1 1762 1761 # CT-CT + 1586 2 1763 1761 # CT-OH + 1587 3 1764 1761 # HC-CT + 1588 3 1765 1761 # HC-CT + 1589 3 1766 1762 # HC-CT + 1590 2 1767 1762 # CT-OH + 1591 3 1768 1762 # HC-CT + 1592 4 1769 1763 # HO-OH + 1593 4 1770 1767 # HO-OH + 1594 1 1772 1771 # CT-CT + 1595 2 1773 1771 # CT-OH + 1596 3 1774 1771 # HC-CT + 1597 3 1775 1771 # HC-CT + 1598 3 1776 1772 # HC-CT + 1599 2 1777 1772 # CT-OH + 1600 3 1778 1772 # HC-CT + 1601 4 1779 1773 # HO-OH + 1602 4 1780 1777 # HO-OH + 1603 1 1782 1781 # CT-CT + 1604 2 1783 1781 # CT-OH + 1605 3 1784 1781 # HC-CT + 1606 3 1785 1781 # HC-CT + 1607 3 1786 1782 # HC-CT + 1608 2 1787 1782 # CT-OH + 1609 3 1788 1782 # HC-CT + 1610 4 1789 1783 # HO-OH + 1611 4 1790 1787 # HO-OH + 1612 1 1792 1791 # CT-CT + 1613 2 1793 1791 # CT-OH + 1614 3 1794 1791 # HC-CT + 1615 3 1795 1791 # HC-CT + 1616 3 1796 1792 # HC-CT + 1617 2 1797 1792 # CT-OH + 1618 3 1798 1792 # HC-CT + 1619 4 1799 1793 # HO-OH + 1620 4 1800 1797 # HO-OH + 1621 1 1802 1801 # CT-CT + 1622 2 1803 1801 # CT-OH + 1623 3 1804 1801 # HC-CT + 1624 3 1805 1801 # HC-CT + 1625 3 1806 1802 # HC-CT + 1626 2 1807 1802 # CT-OH + 1627 3 1808 1802 # HC-CT + 1628 4 1809 1803 # HO-OH + 1629 4 1810 1807 # HO-OH + 1630 1 1812 1811 # CT-CT + 1631 2 1813 1811 # CT-OH + 1632 3 1814 1811 # HC-CT + 1633 3 1815 1811 # HC-CT + 1634 3 1816 1812 # HC-CT + 1635 2 1817 1812 # CT-OH + 1636 3 1818 1812 # HC-CT + 1637 4 1819 1813 # HO-OH + 1638 4 1820 1817 # HO-OH + 1639 1 1822 1821 # CT-CT + 1640 2 1823 1821 # CT-OH + 1641 3 1824 1821 # HC-CT + 1642 3 1825 1821 # HC-CT + 1643 3 1826 1822 # HC-CT + 1644 2 1827 1822 # CT-OH + 1645 3 1828 1822 # HC-CT + 1646 4 1829 1823 # HO-OH + 1647 4 1830 1827 # HO-OH + 1648 1 1832 1831 # CT-CT + 1649 2 1833 1831 # CT-OH + 1650 3 1834 1831 # HC-CT + 1651 3 1835 1831 # HC-CT + 1652 3 1836 1832 # HC-CT + 1653 2 1837 1832 # CT-OH + 1654 3 1838 1832 # HC-CT + 1655 4 1839 1833 # HO-OH + 1656 4 1840 1837 # HO-OH + 1657 1 1842 1841 # CT-CT + 1658 2 1843 1841 # CT-OH + 1659 3 1844 1841 # HC-CT + 1660 3 1845 1841 # HC-CT + 1661 3 1846 1842 # HC-CT + 1662 2 1847 1842 # CT-OH + 1663 3 1848 1842 # HC-CT + 1664 4 1849 1843 # HO-OH + 1665 4 1850 1847 # HO-OH + 1666 1 1852 1851 # CT-CT + 1667 2 1853 1851 # CT-OH + 1668 3 1854 1851 # HC-CT + 1669 3 1855 1851 # HC-CT + 1670 3 1856 1852 # HC-CT + 1671 2 1857 1852 # CT-OH + 1672 3 1858 1852 # HC-CT + 1673 4 1859 1853 # HO-OH + 1674 4 1860 1857 # HO-OH + 1675 1 1862 1861 # CT-CT + 1676 2 1863 1861 # CT-OH + 1677 3 1864 1861 # HC-CT + 1678 3 1865 1861 # HC-CT + 1679 3 1866 1862 # HC-CT + 1680 2 1867 1862 # CT-OH + 1681 3 1868 1862 # HC-CT + 1682 4 1869 1863 # HO-OH + 1683 4 1870 1867 # HO-OH + 1684 1 1872 1871 # CT-CT + 1685 2 1873 1871 # CT-OH + 1686 3 1874 1871 # HC-CT + 1687 3 1875 1871 # HC-CT + 1688 3 1876 1872 # HC-CT + 1689 2 1877 1872 # CT-OH + 1690 3 1878 1872 # HC-CT + 1691 4 1879 1873 # HO-OH + 1692 4 1880 1877 # HO-OH + 1693 1 1882 1881 # CT-CT + 1694 2 1883 1881 # CT-OH + 1695 3 1884 1881 # HC-CT + 1696 3 1885 1881 # HC-CT + 1697 3 1886 1882 # HC-CT + 1698 2 1887 1882 # CT-OH + 1699 3 1888 1882 # HC-CT + 1700 4 1889 1883 # HO-OH + 1701 4 1890 1887 # HO-OH + 1702 1 1892 1891 # CT-CT + 1703 2 1893 1891 # CT-OH + 1704 3 1894 1891 # HC-CT + 1705 3 1895 1891 # HC-CT + 1706 3 1896 1892 # HC-CT + 1707 2 1897 1892 # CT-OH + 1708 3 1898 1892 # HC-CT + 1709 4 1899 1893 # HO-OH + 1710 4 1900 1897 # HO-OH + 1711 1 1902 1901 # CT-CT + 1712 2 1903 1901 # CT-OH + 1713 3 1904 1901 # HC-CT + 1714 3 1905 1901 # HC-CT + 1715 3 1906 1902 # HC-CT + 1716 2 1907 1902 # CT-OH + 1717 3 1908 1902 # HC-CT + 1718 4 1909 1903 # HO-OH + 1719 4 1910 1907 # HO-OH + 1720 1 1912 1911 # CT-CT + 1721 2 1913 1911 # CT-OH + 1722 3 1914 1911 # HC-CT + 1723 3 1915 1911 # HC-CT + 1724 3 1916 1912 # HC-CT + 1725 2 1917 1912 # CT-OH + 1726 3 1918 1912 # HC-CT + 1727 4 1919 1913 # HO-OH + 1728 4 1920 1917 # HO-OH + 1729 1 1922 1921 # CT-CT + 1730 2 1923 1921 # CT-OH + 1731 3 1924 1921 # HC-CT + 1732 3 1925 1921 # HC-CT + 1733 3 1926 1922 # HC-CT + 1734 2 1927 1922 # CT-OH + 1735 3 1928 1922 # HC-CT + 1736 4 1929 1923 # HO-OH + 1737 4 1930 1927 # HO-OH + 1738 1 1932 1931 # CT-CT + 1739 2 1933 1931 # CT-OH + 1740 3 1934 1931 # HC-CT + 1741 3 1935 1931 # HC-CT + 1742 3 1936 1932 # HC-CT + 1743 2 1937 1932 # CT-OH + 1744 3 1938 1932 # HC-CT + 1745 4 1939 1933 # HO-OH + 1746 4 1940 1937 # HO-OH + 1747 1 1942 1941 # CT-CT + 1748 2 1943 1941 # CT-OH + 1749 3 1944 1941 # HC-CT + 1750 3 1945 1941 # HC-CT + 1751 3 1946 1942 # HC-CT + 1752 2 1947 1942 # CT-OH + 1753 3 1948 1942 # HC-CT + 1754 4 1949 1943 # HO-OH + 1755 4 1950 1947 # HO-OH + 1756 1 1952 1951 # CT-CT + 1757 2 1953 1951 # CT-OH + 1758 3 1954 1951 # HC-CT + 1759 3 1955 1951 # HC-CT + 1760 3 1956 1952 # HC-CT + 1761 2 1957 1952 # CT-OH + 1762 3 1958 1952 # HC-CT + 1763 4 1959 1953 # HO-OH + 1764 4 1960 1957 # HO-OH + 1765 1 1962 1961 # CT-CT + 1766 2 1963 1961 # CT-OH + 1767 3 1964 1961 # HC-CT + 1768 3 1965 1961 # HC-CT + 1769 3 1966 1962 # HC-CT + 1770 2 1967 1962 # CT-OH + 1771 3 1968 1962 # HC-CT + 1772 4 1969 1963 # HO-OH + 1773 4 1970 1967 # HO-OH + 1774 1 1972 1971 # CT-CT + 1775 2 1973 1971 # CT-OH + 1776 3 1974 1971 # HC-CT + 1777 3 1975 1971 # HC-CT + 1778 3 1976 1972 # HC-CT + 1779 2 1977 1972 # CT-OH + 1780 3 1978 1972 # HC-CT + 1781 4 1979 1973 # HO-OH + 1782 4 1980 1977 # HO-OH + 1783 1 1982 1981 # CT-CT + 1784 2 1983 1981 # CT-OH + 1785 3 1984 1981 # HC-CT + 1786 3 1985 1981 # HC-CT + 1787 3 1986 1982 # HC-CT + 1788 2 1987 1982 # CT-OH + 1789 3 1988 1982 # HC-CT + 1790 4 1989 1983 # HO-OH + 1791 4 1990 1987 # HO-OH + 1792 1 1992 1991 # CT-CT + 1793 2 1993 1991 # CT-OH + 1794 3 1994 1991 # HC-CT + 1795 3 1995 1991 # HC-CT + 1796 3 1996 1992 # HC-CT + 1797 2 1997 1992 # CT-OH + 1798 3 1998 1992 # HC-CT + 1799 4 1999 1993 # HO-OH + 1800 4 2000 1997 # HO-OH + 1801 5 1 2001 # CTO DC-DP + 1802 5 2 2002 # CTO DC-DP + 1803 6 3 2003 # OHG DC-DP + 1804 6 7 2004 # OHG DC-DP + 1805 5 11 2005 # CTO DC-DP + 1806 5 12 2006 # CTO DC-DP + 1807 6 13 2007 # OHG DC-DP + 1808 6 17 2008 # OHG DC-DP + 1809 5 21 2009 # CTO DC-DP + 1810 5 22 2010 # CTO DC-DP + 1811 6 23 2011 # OHG DC-DP + 1812 6 27 2012 # OHG DC-DP + 1813 5 31 2013 # CTO DC-DP + 1814 5 32 2014 # CTO DC-DP + 1815 6 33 2015 # OHG DC-DP + 1816 6 37 2016 # OHG DC-DP + 1817 5 41 2017 # CTO DC-DP + 1818 5 42 2018 # CTO DC-DP + 1819 6 43 2019 # OHG DC-DP + 1820 6 47 2020 # OHG DC-DP + 1821 5 51 2021 # CTO DC-DP + 1822 5 52 2022 # CTO DC-DP + 1823 6 53 2023 # OHG DC-DP + 1824 6 57 2024 # OHG DC-DP + 1825 5 61 2025 # CTO DC-DP + 1826 5 62 2026 # CTO DC-DP + 1827 6 63 2027 # OHG DC-DP + 1828 6 67 2028 # OHG DC-DP + 1829 5 71 2029 # CTO DC-DP + 1830 5 72 2030 # CTO DC-DP + 1831 6 73 2031 # OHG DC-DP + 1832 6 77 2032 # OHG DC-DP + 1833 5 81 2033 # CTO DC-DP + 1834 5 82 2034 # CTO DC-DP + 1835 6 83 2035 # OHG DC-DP + 1836 6 87 2036 # OHG DC-DP + 1837 5 91 2037 # CTO DC-DP + 1838 5 92 2038 # CTO DC-DP + 1839 6 93 2039 # OHG DC-DP + 1840 6 97 2040 # OHG DC-DP + 1841 5 101 2041 # CTO DC-DP + 1842 5 102 2042 # CTO DC-DP + 1843 6 103 2043 # OHG DC-DP + 1844 6 107 2044 # OHG DC-DP + 1845 5 111 2045 # CTO DC-DP + 1846 5 112 2046 # CTO DC-DP + 1847 6 113 2047 # OHG DC-DP + 1848 6 117 2048 # OHG DC-DP + 1849 5 121 2049 # CTO DC-DP + 1850 5 122 2050 # CTO DC-DP + 1851 6 123 2051 # OHG DC-DP + 1852 6 127 2052 # OHG DC-DP + 1853 5 131 2053 # CTO DC-DP + 1854 5 132 2054 # CTO DC-DP + 1855 6 133 2055 # OHG DC-DP + 1856 6 137 2056 # OHG DC-DP + 1857 5 141 2057 # CTO DC-DP + 1858 5 142 2058 # CTO DC-DP + 1859 6 143 2059 # OHG DC-DP + 1860 6 147 2060 # OHG DC-DP + 1861 5 151 2061 # CTO DC-DP + 1862 5 152 2062 # CTO DC-DP + 1863 6 153 2063 # OHG DC-DP + 1864 6 157 2064 # OHG DC-DP + 1865 5 161 2065 # CTO DC-DP + 1866 5 162 2066 # CTO DC-DP + 1867 6 163 2067 # OHG DC-DP + 1868 6 167 2068 # OHG DC-DP + 1869 5 171 2069 # CTO DC-DP + 1870 5 172 2070 # CTO DC-DP + 1871 6 173 2071 # OHG DC-DP + 1872 6 177 2072 # OHG DC-DP + 1873 5 181 2073 # CTO DC-DP + 1874 5 182 2074 # CTO DC-DP + 1875 6 183 2075 # OHG DC-DP + 1876 6 187 2076 # OHG DC-DP + 1877 5 191 2077 # CTO DC-DP + 1878 5 192 2078 # CTO DC-DP + 1879 6 193 2079 # OHG DC-DP + 1880 6 197 2080 # OHG DC-DP + 1881 5 201 2081 # CTO DC-DP + 1882 5 202 2082 # CTO DC-DP + 1883 6 203 2083 # OHG DC-DP + 1884 6 207 2084 # OHG DC-DP + 1885 5 211 2085 # CTO DC-DP + 1886 5 212 2086 # CTO DC-DP + 1887 6 213 2087 # OHG DC-DP + 1888 6 217 2088 # OHG DC-DP + 1889 5 221 2089 # CTO DC-DP + 1890 5 222 2090 # CTO DC-DP + 1891 6 223 2091 # OHG DC-DP + 1892 6 227 2092 # OHG DC-DP + 1893 5 231 2093 # CTO DC-DP + 1894 5 232 2094 # CTO DC-DP + 1895 6 233 2095 # OHG DC-DP + 1896 6 237 2096 # OHG DC-DP + 1897 5 241 2097 # CTO DC-DP + 1898 5 242 2098 # CTO DC-DP + 1899 6 243 2099 # OHG DC-DP + 1900 6 247 2100 # OHG DC-DP + 1901 5 251 2101 # CTO DC-DP + 1902 5 252 2102 # CTO DC-DP + 1903 6 253 2103 # OHG DC-DP + 1904 6 257 2104 # OHG DC-DP + 1905 5 261 2105 # CTO DC-DP + 1906 5 262 2106 # CTO DC-DP + 1907 6 263 2107 # OHG DC-DP + 1908 6 267 2108 # OHG DC-DP + 1909 5 271 2109 # CTO DC-DP + 1910 5 272 2110 # CTO DC-DP + 1911 6 273 2111 # OHG DC-DP + 1912 6 277 2112 # OHG DC-DP + 1913 5 281 2113 # CTO DC-DP + 1914 5 282 2114 # CTO DC-DP + 1915 6 283 2115 # OHG DC-DP + 1916 6 287 2116 # OHG DC-DP + 1917 5 291 2117 # CTO DC-DP + 1918 5 292 2118 # CTO DC-DP + 1919 6 293 2119 # OHG DC-DP + 1920 6 297 2120 # OHG DC-DP + 1921 5 301 2121 # CTO DC-DP + 1922 5 302 2122 # CTO DC-DP + 1923 6 303 2123 # OHG DC-DP + 1924 6 307 2124 # OHG DC-DP + 1925 5 311 2125 # CTO DC-DP + 1926 5 312 2126 # CTO DC-DP + 1927 6 313 2127 # OHG DC-DP + 1928 6 317 2128 # OHG DC-DP + 1929 5 321 2129 # CTO DC-DP + 1930 5 322 2130 # CTO DC-DP + 1931 6 323 2131 # OHG DC-DP + 1932 6 327 2132 # OHG DC-DP + 1933 5 331 2133 # CTO DC-DP + 1934 5 332 2134 # CTO DC-DP + 1935 6 333 2135 # OHG DC-DP + 1936 6 337 2136 # OHG DC-DP + 1937 5 341 2137 # CTO DC-DP + 1938 5 342 2138 # CTO DC-DP + 1939 6 343 2139 # OHG DC-DP + 1940 6 347 2140 # OHG DC-DP + 1941 5 351 2141 # CTO DC-DP + 1942 5 352 2142 # CTO DC-DP + 1943 6 353 2143 # OHG DC-DP + 1944 6 357 2144 # OHG DC-DP + 1945 5 361 2145 # CTO DC-DP + 1946 5 362 2146 # CTO DC-DP + 1947 6 363 2147 # OHG DC-DP + 1948 6 367 2148 # OHG DC-DP + 1949 5 371 2149 # CTO DC-DP + 1950 5 372 2150 # CTO DC-DP + 1951 6 373 2151 # OHG DC-DP + 1952 6 377 2152 # OHG DC-DP + 1953 5 381 2153 # CTO DC-DP + 1954 5 382 2154 # CTO DC-DP + 1955 6 383 2155 # OHG DC-DP + 1956 6 387 2156 # OHG DC-DP + 1957 5 391 2157 # CTO DC-DP + 1958 5 392 2158 # CTO DC-DP + 1959 6 393 2159 # OHG DC-DP + 1960 6 397 2160 # OHG DC-DP + 1961 5 401 2161 # CTO DC-DP + 1962 5 402 2162 # CTO DC-DP + 1963 6 403 2163 # OHG DC-DP + 1964 6 407 2164 # OHG DC-DP + 1965 5 411 2165 # CTO DC-DP + 1966 5 412 2166 # CTO DC-DP + 1967 6 413 2167 # OHG DC-DP + 1968 6 417 2168 # OHG DC-DP + 1969 5 421 2169 # CTO DC-DP + 1970 5 422 2170 # CTO DC-DP + 1971 6 423 2171 # OHG DC-DP + 1972 6 427 2172 # OHG DC-DP + 1973 5 431 2173 # CTO DC-DP + 1974 5 432 2174 # CTO DC-DP + 1975 6 433 2175 # OHG DC-DP + 1976 6 437 2176 # OHG DC-DP + 1977 5 441 2177 # CTO DC-DP + 1978 5 442 2178 # CTO DC-DP + 1979 6 443 2179 # OHG DC-DP + 1980 6 447 2180 # OHG DC-DP + 1981 5 451 2181 # CTO DC-DP + 1982 5 452 2182 # CTO DC-DP + 1983 6 453 2183 # OHG DC-DP + 1984 6 457 2184 # OHG DC-DP + 1985 5 461 2185 # CTO DC-DP + 1986 5 462 2186 # CTO DC-DP + 1987 6 463 2187 # OHG DC-DP + 1988 6 467 2188 # OHG DC-DP + 1989 5 471 2189 # CTO DC-DP + 1990 5 472 2190 # CTO DC-DP + 1991 6 473 2191 # OHG DC-DP + 1992 6 477 2192 # OHG DC-DP + 1993 5 481 2193 # CTO DC-DP + 1994 5 482 2194 # CTO DC-DP + 1995 6 483 2195 # OHG DC-DP + 1996 6 487 2196 # OHG DC-DP + 1997 5 491 2197 # CTO DC-DP + 1998 5 492 2198 # CTO DC-DP + 1999 6 493 2199 # OHG DC-DP + 2000 6 497 2200 # OHG DC-DP + 2001 5 501 2201 # CTO DC-DP + 2002 5 502 2202 # CTO DC-DP + 2003 6 503 2203 # OHG DC-DP + 2004 6 507 2204 # OHG DC-DP + 2005 5 511 2205 # CTO DC-DP + 2006 5 512 2206 # CTO DC-DP + 2007 6 513 2207 # OHG DC-DP + 2008 6 517 2208 # OHG DC-DP + 2009 5 521 2209 # CTO DC-DP + 2010 5 522 2210 # CTO DC-DP + 2011 6 523 2211 # OHG DC-DP + 2012 6 527 2212 # OHG DC-DP + 2013 5 531 2213 # CTO DC-DP + 2014 5 532 2214 # CTO DC-DP + 2015 6 533 2215 # OHG DC-DP + 2016 6 537 2216 # OHG DC-DP + 2017 5 541 2217 # CTO DC-DP + 2018 5 542 2218 # CTO DC-DP + 2019 6 543 2219 # OHG DC-DP + 2020 6 547 2220 # OHG DC-DP + 2021 5 551 2221 # CTO DC-DP + 2022 5 552 2222 # CTO DC-DP + 2023 6 553 2223 # OHG DC-DP + 2024 6 557 2224 # OHG DC-DP + 2025 5 561 2225 # CTO DC-DP + 2026 5 562 2226 # CTO DC-DP + 2027 6 563 2227 # OHG DC-DP + 2028 6 567 2228 # OHG DC-DP + 2029 5 571 2229 # CTO DC-DP + 2030 5 572 2230 # CTO DC-DP + 2031 6 573 2231 # OHG DC-DP + 2032 6 577 2232 # OHG DC-DP + 2033 5 581 2233 # CTO DC-DP + 2034 5 582 2234 # CTO DC-DP + 2035 6 583 2235 # OHG DC-DP + 2036 6 587 2236 # OHG DC-DP + 2037 5 591 2237 # CTO DC-DP + 2038 5 592 2238 # CTO DC-DP + 2039 6 593 2239 # OHG DC-DP + 2040 6 597 2240 # OHG DC-DP + 2041 5 601 2241 # CTO DC-DP + 2042 5 602 2242 # CTO DC-DP + 2043 6 603 2243 # OHG DC-DP + 2044 6 607 2244 # OHG DC-DP + 2045 5 611 2245 # CTO DC-DP + 2046 5 612 2246 # CTO DC-DP + 2047 6 613 2247 # OHG DC-DP + 2048 6 617 2248 # OHG DC-DP + 2049 5 621 2249 # CTO DC-DP + 2050 5 622 2250 # CTO DC-DP + 2051 6 623 2251 # OHG DC-DP + 2052 6 627 2252 # OHG DC-DP + 2053 5 631 2253 # CTO DC-DP + 2054 5 632 2254 # CTO DC-DP + 2055 6 633 2255 # OHG DC-DP + 2056 6 637 2256 # OHG DC-DP + 2057 5 641 2257 # CTO DC-DP + 2058 5 642 2258 # CTO DC-DP + 2059 6 643 2259 # OHG DC-DP + 2060 6 647 2260 # OHG DC-DP + 2061 5 651 2261 # CTO DC-DP + 2062 5 652 2262 # CTO DC-DP + 2063 6 653 2263 # OHG DC-DP + 2064 6 657 2264 # OHG DC-DP + 2065 5 661 2265 # CTO DC-DP + 2066 5 662 2266 # CTO DC-DP + 2067 6 663 2267 # OHG DC-DP + 2068 6 667 2268 # OHG DC-DP + 2069 5 671 2269 # CTO DC-DP + 2070 5 672 2270 # CTO DC-DP + 2071 6 673 2271 # OHG DC-DP + 2072 6 677 2272 # OHG DC-DP + 2073 5 681 2273 # CTO DC-DP + 2074 5 682 2274 # CTO DC-DP + 2075 6 683 2275 # OHG DC-DP + 2076 6 687 2276 # OHG DC-DP + 2077 5 691 2277 # CTO DC-DP + 2078 5 692 2278 # CTO DC-DP + 2079 6 693 2279 # OHG DC-DP + 2080 6 697 2280 # OHG DC-DP + 2081 5 701 2281 # CTO DC-DP + 2082 5 702 2282 # CTO DC-DP + 2083 6 703 2283 # OHG DC-DP + 2084 6 707 2284 # OHG DC-DP + 2085 5 711 2285 # CTO DC-DP + 2086 5 712 2286 # CTO DC-DP + 2087 6 713 2287 # OHG DC-DP + 2088 6 717 2288 # OHG DC-DP + 2089 5 721 2289 # CTO DC-DP + 2090 5 722 2290 # CTO DC-DP + 2091 6 723 2291 # OHG DC-DP + 2092 6 727 2292 # OHG DC-DP + 2093 5 731 2293 # CTO DC-DP + 2094 5 732 2294 # CTO DC-DP + 2095 6 733 2295 # OHG DC-DP + 2096 6 737 2296 # OHG DC-DP + 2097 5 741 2297 # CTO DC-DP + 2098 5 742 2298 # CTO DC-DP + 2099 6 743 2299 # OHG DC-DP + 2100 6 747 2300 # OHG DC-DP + 2101 5 751 2301 # CTO DC-DP + 2102 5 752 2302 # CTO DC-DP + 2103 6 753 2303 # OHG DC-DP + 2104 6 757 2304 # OHG DC-DP + 2105 5 761 2305 # CTO DC-DP + 2106 5 762 2306 # CTO DC-DP + 2107 6 763 2307 # OHG DC-DP + 2108 6 767 2308 # OHG DC-DP + 2109 5 771 2309 # CTO DC-DP + 2110 5 772 2310 # CTO DC-DP + 2111 6 773 2311 # OHG DC-DP + 2112 6 777 2312 # OHG DC-DP + 2113 5 781 2313 # CTO DC-DP + 2114 5 782 2314 # CTO DC-DP + 2115 6 783 2315 # OHG DC-DP + 2116 6 787 2316 # OHG DC-DP + 2117 5 791 2317 # CTO DC-DP + 2118 5 792 2318 # CTO DC-DP + 2119 6 793 2319 # OHG DC-DP + 2120 6 797 2320 # OHG DC-DP + 2121 5 801 2321 # CTO DC-DP + 2122 5 802 2322 # CTO DC-DP + 2123 6 803 2323 # OHG DC-DP + 2124 6 807 2324 # OHG DC-DP + 2125 5 811 2325 # CTO DC-DP + 2126 5 812 2326 # CTO DC-DP + 2127 6 813 2327 # OHG DC-DP + 2128 6 817 2328 # OHG DC-DP + 2129 5 821 2329 # CTO DC-DP + 2130 5 822 2330 # CTO DC-DP + 2131 6 823 2331 # OHG DC-DP + 2132 6 827 2332 # OHG DC-DP + 2133 5 831 2333 # CTO DC-DP + 2134 5 832 2334 # CTO DC-DP + 2135 6 833 2335 # OHG DC-DP + 2136 6 837 2336 # OHG DC-DP + 2137 5 841 2337 # CTO DC-DP + 2138 5 842 2338 # CTO DC-DP + 2139 6 843 2339 # OHG DC-DP + 2140 6 847 2340 # OHG DC-DP + 2141 5 851 2341 # CTO DC-DP + 2142 5 852 2342 # CTO DC-DP + 2143 6 853 2343 # OHG DC-DP + 2144 6 857 2344 # OHG DC-DP + 2145 5 861 2345 # CTO DC-DP + 2146 5 862 2346 # CTO DC-DP + 2147 6 863 2347 # OHG DC-DP + 2148 6 867 2348 # OHG DC-DP + 2149 5 871 2349 # CTO DC-DP + 2150 5 872 2350 # CTO DC-DP + 2151 6 873 2351 # OHG DC-DP + 2152 6 877 2352 # OHG DC-DP + 2153 5 881 2353 # CTO DC-DP + 2154 5 882 2354 # CTO DC-DP + 2155 6 883 2355 # OHG DC-DP + 2156 6 887 2356 # OHG DC-DP + 2157 5 891 2357 # CTO DC-DP + 2158 5 892 2358 # CTO DC-DP + 2159 6 893 2359 # OHG DC-DP + 2160 6 897 2360 # OHG DC-DP + 2161 5 901 2361 # CTO DC-DP + 2162 5 902 2362 # CTO DC-DP + 2163 6 903 2363 # OHG DC-DP + 2164 6 907 2364 # OHG DC-DP + 2165 5 911 2365 # CTO DC-DP + 2166 5 912 2366 # CTO DC-DP + 2167 6 913 2367 # OHG DC-DP + 2168 6 917 2368 # OHG DC-DP + 2169 5 921 2369 # CTO DC-DP + 2170 5 922 2370 # CTO DC-DP + 2171 6 923 2371 # OHG DC-DP + 2172 6 927 2372 # OHG DC-DP + 2173 5 931 2373 # CTO DC-DP + 2174 5 932 2374 # CTO DC-DP + 2175 6 933 2375 # OHG DC-DP + 2176 6 937 2376 # OHG DC-DP + 2177 5 941 2377 # CTO DC-DP + 2178 5 942 2378 # CTO DC-DP + 2179 6 943 2379 # OHG DC-DP + 2180 6 947 2380 # OHG DC-DP + 2181 5 951 2381 # CTO DC-DP + 2182 5 952 2382 # CTO DC-DP + 2183 6 953 2383 # OHG DC-DP + 2184 6 957 2384 # OHG DC-DP + 2185 5 961 2385 # CTO DC-DP + 2186 5 962 2386 # CTO DC-DP + 2187 6 963 2387 # OHG DC-DP + 2188 6 967 2388 # OHG DC-DP + 2189 5 971 2389 # CTO DC-DP + 2190 5 972 2390 # CTO DC-DP + 2191 6 973 2391 # OHG DC-DP + 2192 6 977 2392 # OHG DC-DP + 2193 5 981 2393 # CTO DC-DP + 2194 5 982 2394 # CTO DC-DP + 2195 6 983 2395 # OHG DC-DP + 2196 6 987 2396 # OHG DC-DP + 2197 5 991 2397 # CTO DC-DP + 2198 5 992 2398 # CTO DC-DP + 2199 6 993 2399 # OHG DC-DP + 2200 6 997 2400 # OHG DC-DP + 2201 5 1001 2401 # CTO DC-DP + 2202 5 1002 2402 # CTO DC-DP + 2203 6 1003 2403 # OHG DC-DP + 2204 6 1007 2404 # OHG DC-DP + 2205 5 1011 2405 # CTO DC-DP + 2206 5 1012 2406 # CTO DC-DP + 2207 6 1013 2407 # OHG DC-DP + 2208 6 1017 2408 # OHG DC-DP + 2209 5 1021 2409 # CTO DC-DP + 2210 5 1022 2410 # CTO DC-DP + 2211 6 1023 2411 # OHG DC-DP + 2212 6 1027 2412 # OHG DC-DP + 2213 5 1031 2413 # CTO DC-DP + 2214 5 1032 2414 # CTO DC-DP + 2215 6 1033 2415 # OHG DC-DP + 2216 6 1037 2416 # OHG DC-DP + 2217 5 1041 2417 # CTO DC-DP + 2218 5 1042 2418 # CTO DC-DP + 2219 6 1043 2419 # OHG DC-DP + 2220 6 1047 2420 # OHG DC-DP + 2221 5 1051 2421 # CTO DC-DP + 2222 5 1052 2422 # CTO DC-DP + 2223 6 1053 2423 # OHG DC-DP + 2224 6 1057 2424 # OHG DC-DP + 2225 5 1061 2425 # CTO DC-DP + 2226 5 1062 2426 # CTO DC-DP + 2227 6 1063 2427 # OHG DC-DP + 2228 6 1067 2428 # OHG DC-DP + 2229 5 1071 2429 # CTO DC-DP + 2230 5 1072 2430 # CTO DC-DP + 2231 6 1073 2431 # OHG DC-DP + 2232 6 1077 2432 # OHG DC-DP + 2233 5 1081 2433 # CTO DC-DP + 2234 5 1082 2434 # CTO DC-DP + 2235 6 1083 2435 # OHG DC-DP + 2236 6 1087 2436 # OHG DC-DP + 2237 5 1091 2437 # CTO DC-DP + 2238 5 1092 2438 # CTO DC-DP + 2239 6 1093 2439 # OHG DC-DP + 2240 6 1097 2440 # OHG DC-DP + 2241 5 1101 2441 # CTO DC-DP + 2242 5 1102 2442 # CTO DC-DP + 2243 6 1103 2443 # OHG DC-DP + 2244 6 1107 2444 # OHG DC-DP + 2245 5 1111 2445 # CTO DC-DP + 2246 5 1112 2446 # CTO DC-DP + 2247 6 1113 2447 # OHG DC-DP + 2248 6 1117 2448 # OHG DC-DP + 2249 5 1121 2449 # CTO DC-DP + 2250 5 1122 2450 # CTO DC-DP + 2251 6 1123 2451 # OHG DC-DP + 2252 6 1127 2452 # OHG DC-DP + 2253 5 1131 2453 # CTO DC-DP + 2254 5 1132 2454 # CTO DC-DP + 2255 6 1133 2455 # OHG DC-DP + 2256 6 1137 2456 # OHG DC-DP + 2257 5 1141 2457 # CTO DC-DP + 2258 5 1142 2458 # CTO DC-DP + 2259 6 1143 2459 # OHG DC-DP + 2260 6 1147 2460 # OHG DC-DP + 2261 5 1151 2461 # CTO DC-DP + 2262 5 1152 2462 # CTO DC-DP + 2263 6 1153 2463 # OHG DC-DP + 2264 6 1157 2464 # OHG DC-DP + 2265 5 1161 2465 # CTO DC-DP + 2266 5 1162 2466 # CTO DC-DP + 2267 6 1163 2467 # OHG DC-DP + 2268 6 1167 2468 # OHG DC-DP + 2269 5 1171 2469 # CTO DC-DP + 2270 5 1172 2470 # CTO DC-DP + 2271 6 1173 2471 # OHG DC-DP + 2272 6 1177 2472 # OHG DC-DP + 2273 5 1181 2473 # CTO DC-DP + 2274 5 1182 2474 # CTO DC-DP + 2275 6 1183 2475 # OHG DC-DP + 2276 6 1187 2476 # OHG DC-DP + 2277 5 1191 2477 # CTO DC-DP + 2278 5 1192 2478 # CTO DC-DP + 2279 6 1193 2479 # OHG DC-DP + 2280 6 1197 2480 # OHG DC-DP + 2281 5 1201 2481 # CTO DC-DP + 2282 5 1202 2482 # CTO DC-DP + 2283 6 1203 2483 # OHG DC-DP + 2284 6 1207 2484 # OHG DC-DP + 2285 5 1211 2485 # CTO DC-DP + 2286 5 1212 2486 # CTO DC-DP + 2287 6 1213 2487 # OHG DC-DP + 2288 6 1217 2488 # OHG DC-DP + 2289 5 1221 2489 # CTO DC-DP + 2290 5 1222 2490 # CTO DC-DP + 2291 6 1223 2491 # OHG DC-DP + 2292 6 1227 2492 # OHG DC-DP + 2293 5 1231 2493 # CTO DC-DP + 2294 5 1232 2494 # CTO DC-DP + 2295 6 1233 2495 # OHG DC-DP + 2296 6 1237 2496 # OHG DC-DP + 2297 5 1241 2497 # CTO DC-DP + 2298 5 1242 2498 # CTO DC-DP + 2299 6 1243 2499 # OHG DC-DP + 2300 6 1247 2500 # OHG DC-DP + 2301 5 1251 2501 # CTO DC-DP + 2302 5 1252 2502 # CTO DC-DP + 2303 6 1253 2503 # OHG DC-DP + 2304 6 1257 2504 # OHG DC-DP + 2305 5 1261 2505 # CTO DC-DP + 2306 5 1262 2506 # CTO DC-DP + 2307 6 1263 2507 # OHG DC-DP + 2308 6 1267 2508 # OHG DC-DP + 2309 5 1271 2509 # CTO DC-DP + 2310 5 1272 2510 # CTO DC-DP + 2311 6 1273 2511 # OHG DC-DP + 2312 6 1277 2512 # OHG DC-DP + 2313 5 1281 2513 # CTO DC-DP + 2314 5 1282 2514 # CTO DC-DP + 2315 6 1283 2515 # OHG DC-DP + 2316 6 1287 2516 # OHG DC-DP + 2317 5 1291 2517 # CTO DC-DP + 2318 5 1292 2518 # CTO DC-DP + 2319 6 1293 2519 # OHG DC-DP + 2320 6 1297 2520 # OHG DC-DP + 2321 5 1301 2521 # CTO DC-DP + 2322 5 1302 2522 # CTO DC-DP + 2323 6 1303 2523 # OHG DC-DP + 2324 6 1307 2524 # OHG DC-DP + 2325 5 1311 2525 # CTO DC-DP + 2326 5 1312 2526 # CTO DC-DP + 2327 6 1313 2527 # OHG DC-DP + 2328 6 1317 2528 # OHG DC-DP + 2329 5 1321 2529 # CTO DC-DP + 2330 5 1322 2530 # CTO DC-DP + 2331 6 1323 2531 # OHG DC-DP + 2332 6 1327 2532 # OHG DC-DP + 2333 5 1331 2533 # CTO DC-DP + 2334 5 1332 2534 # CTO DC-DP + 2335 6 1333 2535 # OHG DC-DP + 2336 6 1337 2536 # OHG DC-DP + 2337 5 1341 2537 # CTO DC-DP + 2338 5 1342 2538 # CTO DC-DP + 2339 6 1343 2539 # OHG DC-DP + 2340 6 1347 2540 # OHG DC-DP + 2341 5 1351 2541 # CTO DC-DP + 2342 5 1352 2542 # CTO DC-DP + 2343 6 1353 2543 # OHG DC-DP + 2344 6 1357 2544 # OHG DC-DP + 2345 5 1361 2545 # CTO DC-DP + 2346 5 1362 2546 # CTO DC-DP + 2347 6 1363 2547 # OHG DC-DP + 2348 6 1367 2548 # OHG DC-DP + 2349 5 1371 2549 # CTO DC-DP + 2350 5 1372 2550 # CTO DC-DP + 2351 6 1373 2551 # OHG DC-DP + 2352 6 1377 2552 # OHG DC-DP + 2353 5 1381 2553 # CTO DC-DP + 2354 5 1382 2554 # CTO DC-DP + 2355 6 1383 2555 # OHG DC-DP + 2356 6 1387 2556 # OHG DC-DP + 2357 5 1391 2557 # CTO DC-DP + 2358 5 1392 2558 # CTO DC-DP + 2359 6 1393 2559 # OHG DC-DP + 2360 6 1397 2560 # OHG DC-DP + 2361 5 1401 2561 # CTO DC-DP + 2362 5 1402 2562 # CTO DC-DP + 2363 6 1403 2563 # OHG DC-DP + 2364 6 1407 2564 # OHG DC-DP + 2365 5 1411 2565 # CTO DC-DP + 2366 5 1412 2566 # CTO DC-DP + 2367 6 1413 2567 # OHG DC-DP + 2368 6 1417 2568 # OHG DC-DP + 2369 5 1421 2569 # CTO DC-DP + 2370 5 1422 2570 # CTO DC-DP + 2371 6 1423 2571 # OHG DC-DP + 2372 6 1427 2572 # OHG DC-DP + 2373 5 1431 2573 # CTO DC-DP + 2374 5 1432 2574 # CTO DC-DP + 2375 6 1433 2575 # OHG DC-DP + 2376 6 1437 2576 # OHG DC-DP + 2377 5 1441 2577 # CTO DC-DP + 2378 5 1442 2578 # CTO DC-DP + 2379 6 1443 2579 # OHG DC-DP + 2380 6 1447 2580 # OHG DC-DP + 2381 5 1451 2581 # CTO DC-DP + 2382 5 1452 2582 # CTO DC-DP + 2383 6 1453 2583 # OHG DC-DP + 2384 6 1457 2584 # OHG DC-DP + 2385 5 1461 2585 # CTO DC-DP + 2386 5 1462 2586 # CTO DC-DP + 2387 6 1463 2587 # OHG DC-DP + 2388 6 1467 2588 # OHG DC-DP + 2389 5 1471 2589 # CTO DC-DP + 2390 5 1472 2590 # CTO DC-DP + 2391 6 1473 2591 # OHG DC-DP + 2392 6 1477 2592 # OHG DC-DP + 2393 5 1481 2593 # CTO DC-DP + 2394 5 1482 2594 # CTO DC-DP + 2395 6 1483 2595 # OHG DC-DP + 2396 6 1487 2596 # OHG DC-DP + 2397 5 1491 2597 # CTO DC-DP + 2398 5 1492 2598 # CTO DC-DP + 2399 6 1493 2599 # OHG DC-DP + 2400 6 1497 2600 # OHG DC-DP + 2401 5 1501 2601 # CTO DC-DP + 2402 5 1502 2602 # CTO DC-DP + 2403 6 1503 2603 # OHG DC-DP + 2404 6 1507 2604 # OHG DC-DP + 2405 5 1511 2605 # CTO DC-DP + 2406 5 1512 2606 # CTO DC-DP + 2407 6 1513 2607 # OHG DC-DP + 2408 6 1517 2608 # OHG DC-DP + 2409 5 1521 2609 # CTO DC-DP + 2410 5 1522 2610 # CTO DC-DP + 2411 6 1523 2611 # OHG DC-DP + 2412 6 1527 2612 # OHG DC-DP + 2413 5 1531 2613 # CTO DC-DP + 2414 5 1532 2614 # CTO DC-DP + 2415 6 1533 2615 # OHG DC-DP + 2416 6 1537 2616 # OHG DC-DP + 2417 5 1541 2617 # CTO DC-DP + 2418 5 1542 2618 # CTO DC-DP + 2419 6 1543 2619 # OHG DC-DP + 2420 6 1547 2620 # OHG DC-DP + 2421 5 1551 2621 # CTO DC-DP + 2422 5 1552 2622 # CTO DC-DP + 2423 6 1553 2623 # OHG DC-DP + 2424 6 1557 2624 # OHG DC-DP + 2425 5 1561 2625 # CTO DC-DP + 2426 5 1562 2626 # CTO DC-DP + 2427 6 1563 2627 # OHG DC-DP + 2428 6 1567 2628 # OHG DC-DP + 2429 5 1571 2629 # CTO DC-DP + 2430 5 1572 2630 # CTO DC-DP + 2431 6 1573 2631 # OHG DC-DP + 2432 6 1577 2632 # OHG DC-DP + 2433 5 1581 2633 # CTO DC-DP + 2434 5 1582 2634 # CTO DC-DP + 2435 6 1583 2635 # OHG DC-DP + 2436 6 1587 2636 # OHG DC-DP + 2437 5 1591 2637 # CTO DC-DP + 2438 5 1592 2638 # CTO DC-DP + 2439 6 1593 2639 # OHG DC-DP + 2440 6 1597 2640 # OHG DC-DP + 2441 5 1601 2641 # CTO DC-DP + 2442 5 1602 2642 # CTO DC-DP + 2443 6 1603 2643 # OHG DC-DP + 2444 6 1607 2644 # OHG DC-DP + 2445 5 1611 2645 # CTO DC-DP + 2446 5 1612 2646 # CTO DC-DP + 2447 6 1613 2647 # OHG DC-DP + 2448 6 1617 2648 # OHG DC-DP + 2449 5 1621 2649 # CTO DC-DP + 2450 5 1622 2650 # CTO DC-DP + 2451 6 1623 2651 # OHG DC-DP + 2452 6 1627 2652 # OHG DC-DP + 2453 5 1631 2653 # CTO DC-DP + 2454 5 1632 2654 # CTO DC-DP + 2455 6 1633 2655 # OHG DC-DP + 2456 6 1637 2656 # OHG DC-DP + 2457 5 1641 2657 # CTO DC-DP + 2458 5 1642 2658 # CTO DC-DP + 2459 6 1643 2659 # OHG DC-DP + 2460 6 1647 2660 # OHG DC-DP + 2461 5 1651 2661 # CTO DC-DP + 2462 5 1652 2662 # CTO DC-DP + 2463 6 1653 2663 # OHG DC-DP + 2464 6 1657 2664 # OHG DC-DP + 2465 5 1661 2665 # CTO DC-DP + 2466 5 1662 2666 # CTO DC-DP + 2467 6 1663 2667 # OHG DC-DP + 2468 6 1667 2668 # OHG DC-DP + 2469 5 1671 2669 # CTO DC-DP + 2470 5 1672 2670 # CTO DC-DP + 2471 6 1673 2671 # OHG DC-DP + 2472 6 1677 2672 # OHG DC-DP + 2473 5 1681 2673 # CTO DC-DP + 2474 5 1682 2674 # CTO DC-DP + 2475 6 1683 2675 # OHG DC-DP + 2476 6 1687 2676 # OHG DC-DP + 2477 5 1691 2677 # CTO DC-DP + 2478 5 1692 2678 # CTO DC-DP + 2479 6 1693 2679 # OHG DC-DP + 2480 6 1697 2680 # OHG DC-DP + 2481 5 1701 2681 # CTO DC-DP + 2482 5 1702 2682 # CTO DC-DP + 2483 6 1703 2683 # OHG DC-DP + 2484 6 1707 2684 # OHG DC-DP + 2485 5 1711 2685 # CTO DC-DP + 2486 5 1712 2686 # CTO DC-DP + 2487 6 1713 2687 # OHG DC-DP + 2488 6 1717 2688 # OHG DC-DP + 2489 5 1721 2689 # CTO DC-DP + 2490 5 1722 2690 # CTO DC-DP + 2491 6 1723 2691 # OHG DC-DP + 2492 6 1727 2692 # OHG DC-DP + 2493 5 1731 2693 # CTO DC-DP + 2494 5 1732 2694 # CTO DC-DP + 2495 6 1733 2695 # OHG DC-DP + 2496 6 1737 2696 # OHG DC-DP + 2497 5 1741 2697 # CTO DC-DP + 2498 5 1742 2698 # CTO DC-DP + 2499 6 1743 2699 # OHG DC-DP + 2500 6 1747 2700 # OHG DC-DP + 2501 5 1751 2701 # CTO DC-DP + 2502 5 1752 2702 # CTO DC-DP + 2503 6 1753 2703 # OHG DC-DP + 2504 6 1757 2704 # OHG DC-DP + 2505 5 1761 2705 # CTO DC-DP + 2506 5 1762 2706 # CTO DC-DP + 2507 6 1763 2707 # OHG DC-DP + 2508 6 1767 2708 # OHG DC-DP + 2509 5 1771 2709 # CTO DC-DP + 2510 5 1772 2710 # CTO DC-DP + 2511 6 1773 2711 # OHG DC-DP + 2512 6 1777 2712 # OHG DC-DP + 2513 5 1781 2713 # CTO DC-DP + 2514 5 1782 2714 # CTO DC-DP + 2515 6 1783 2715 # OHG DC-DP + 2516 6 1787 2716 # OHG DC-DP + 2517 5 1791 2717 # CTO DC-DP + 2518 5 1792 2718 # CTO DC-DP + 2519 6 1793 2719 # OHG DC-DP + 2520 6 1797 2720 # OHG DC-DP + 2521 5 1801 2721 # CTO DC-DP + 2522 5 1802 2722 # CTO DC-DP + 2523 6 1803 2723 # OHG DC-DP + 2524 6 1807 2724 # OHG DC-DP + 2525 5 1811 2725 # CTO DC-DP + 2526 5 1812 2726 # CTO DC-DP + 2527 6 1813 2727 # OHG DC-DP + 2528 6 1817 2728 # OHG DC-DP + 2529 5 1821 2729 # CTO DC-DP + 2530 5 1822 2730 # CTO DC-DP + 2531 6 1823 2731 # OHG DC-DP + 2532 6 1827 2732 # OHG DC-DP + 2533 5 1831 2733 # CTO DC-DP + 2534 5 1832 2734 # CTO DC-DP + 2535 6 1833 2735 # OHG DC-DP + 2536 6 1837 2736 # OHG DC-DP + 2537 5 1841 2737 # CTO DC-DP + 2538 5 1842 2738 # CTO DC-DP + 2539 6 1843 2739 # OHG DC-DP + 2540 6 1847 2740 # OHG DC-DP + 2541 5 1851 2741 # CTO DC-DP + 2542 5 1852 2742 # CTO DC-DP + 2543 6 1853 2743 # OHG DC-DP + 2544 6 1857 2744 # OHG DC-DP + 2545 5 1861 2745 # CTO DC-DP + 2546 5 1862 2746 # CTO DC-DP + 2547 6 1863 2747 # OHG DC-DP + 2548 6 1867 2748 # OHG DC-DP + 2549 5 1871 2749 # CTO DC-DP + 2550 5 1872 2750 # CTO DC-DP + 2551 6 1873 2751 # OHG DC-DP + 2552 6 1877 2752 # OHG DC-DP + 2553 5 1881 2753 # CTO DC-DP + 2554 5 1882 2754 # CTO DC-DP + 2555 6 1883 2755 # OHG DC-DP + 2556 6 1887 2756 # OHG DC-DP + 2557 5 1891 2757 # CTO DC-DP + 2558 5 1892 2758 # CTO DC-DP + 2559 6 1893 2759 # OHG DC-DP + 2560 6 1897 2760 # OHG DC-DP + 2561 5 1901 2761 # CTO DC-DP + 2562 5 1902 2762 # CTO DC-DP + 2563 6 1903 2763 # OHG DC-DP + 2564 6 1907 2764 # OHG DC-DP + 2565 5 1911 2765 # CTO DC-DP + 2566 5 1912 2766 # CTO DC-DP + 2567 6 1913 2767 # OHG DC-DP + 2568 6 1917 2768 # OHG DC-DP + 2569 5 1921 2769 # CTO DC-DP + 2570 5 1922 2770 # CTO DC-DP + 2571 6 1923 2771 # OHG DC-DP + 2572 6 1927 2772 # OHG DC-DP + 2573 5 1931 2773 # CTO DC-DP + 2574 5 1932 2774 # CTO DC-DP + 2575 6 1933 2775 # OHG DC-DP + 2576 6 1937 2776 # OHG DC-DP + 2577 5 1941 2777 # CTO DC-DP + 2578 5 1942 2778 # CTO DC-DP + 2579 6 1943 2779 # OHG DC-DP + 2580 6 1947 2780 # OHG DC-DP + 2581 5 1951 2781 # CTO DC-DP + 2582 5 1952 2782 # CTO DC-DP + 2583 6 1953 2783 # OHG DC-DP + 2584 6 1957 2784 # OHG DC-DP + 2585 5 1961 2785 # CTO DC-DP + 2586 5 1962 2786 # CTO DC-DP + 2587 6 1963 2787 # OHG DC-DP + 2588 6 1967 2788 # OHG DC-DP + 2589 5 1971 2789 # CTO DC-DP + 2590 5 1972 2790 # CTO DC-DP + 2591 6 1973 2791 # OHG DC-DP + 2592 6 1977 2792 # OHG DC-DP + 2593 5 1981 2793 # CTO DC-DP + 2594 5 1982 2794 # CTO DC-DP + 2595 6 1983 2795 # OHG DC-DP + 2596 6 1987 2796 # OHG DC-DP + 2597 5 1991 2797 # CTO DC-DP + 2598 5 1992 2798 # CTO DC-DP + 2599 6 1993 2799 # OHG DC-DP + 2600 6 1997 2800 # OHG DC-DP + +Angles + + 1 1 2 1 3 # CT-CT-OH + 2 2 2 1 4 # CT-CT-HC + 3 2 2 1 5 # CT-CT-HC + 4 3 3 1 4 # HC-CT-OH + 5 3 3 1 5 # HC-CT-OH + 6 4 4 1 5 # HC-CT-HC + 7 2 1 2 6 # CT-CT-HC + 8 1 1 2 7 # CT-CT-OH + 9 2 1 2 8 # CT-CT-HC + 10 3 6 2 7 # HC-CT-OH + 11 4 6 2 8 # HC-CT-HC + 12 3 7 2 8 # HC-CT-OH + 13 5 1 3 9 # CT-OH-HO + 14 5 2 7 10 # CT-OH-HO + 15 1 12 11 13 # CT-CT-OH + 16 2 12 11 14 # CT-CT-HC + 17 2 12 11 15 # CT-CT-HC + 18 3 13 11 14 # HC-CT-OH + 19 3 13 11 15 # HC-CT-OH + 20 4 14 11 15 # HC-CT-HC + 21 2 11 12 16 # CT-CT-HC + 22 1 11 12 17 # CT-CT-OH + 23 2 11 12 18 # CT-CT-HC + 24 3 16 12 17 # HC-CT-OH + 25 4 16 12 18 # HC-CT-HC + 26 3 17 12 18 # HC-CT-OH + 27 5 11 13 19 # CT-OH-HO + 28 5 12 17 20 # CT-OH-HO + 29 1 22 21 23 # CT-CT-OH + 30 2 22 21 24 # CT-CT-HC + 31 2 22 21 25 # CT-CT-HC + 32 3 23 21 24 # HC-CT-OH + 33 3 23 21 25 # HC-CT-OH + 34 4 24 21 25 # HC-CT-HC + 35 2 21 22 26 # CT-CT-HC + 36 1 21 22 27 # CT-CT-OH + 37 2 21 22 28 # CT-CT-HC + 38 3 26 22 27 # HC-CT-OH + 39 4 26 22 28 # HC-CT-HC + 40 3 27 22 28 # HC-CT-OH + 41 5 21 23 29 # CT-OH-HO + 42 5 22 27 30 # CT-OH-HO + 43 1 32 31 33 # CT-CT-OH + 44 2 32 31 34 # CT-CT-HC + 45 2 32 31 35 # CT-CT-HC + 46 3 33 31 34 # HC-CT-OH + 47 3 33 31 35 # HC-CT-OH + 48 4 34 31 35 # HC-CT-HC + 49 2 31 32 36 # CT-CT-HC + 50 1 31 32 37 # CT-CT-OH + 51 2 31 32 38 # CT-CT-HC + 52 3 36 32 37 # HC-CT-OH + 53 4 36 32 38 # HC-CT-HC + 54 3 37 32 38 # HC-CT-OH + 55 5 31 33 39 # CT-OH-HO + 56 5 32 37 40 # CT-OH-HO + 57 1 42 41 43 # CT-CT-OH + 58 2 42 41 44 # CT-CT-HC + 59 2 42 41 45 # CT-CT-HC + 60 3 43 41 44 # HC-CT-OH + 61 3 43 41 45 # HC-CT-OH + 62 4 44 41 45 # HC-CT-HC + 63 2 41 42 46 # CT-CT-HC + 64 1 41 42 47 # CT-CT-OH + 65 2 41 42 48 # CT-CT-HC + 66 3 46 42 47 # HC-CT-OH + 67 4 46 42 48 # HC-CT-HC + 68 3 47 42 48 # HC-CT-OH + 69 5 41 43 49 # CT-OH-HO + 70 5 42 47 50 # CT-OH-HO + 71 1 52 51 53 # CT-CT-OH + 72 2 52 51 54 # CT-CT-HC + 73 2 52 51 55 # CT-CT-HC + 74 3 53 51 54 # HC-CT-OH + 75 3 53 51 55 # HC-CT-OH + 76 4 54 51 55 # HC-CT-HC + 77 2 51 52 56 # CT-CT-HC + 78 1 51 52 57 # CT-CT-OH + 79 2 51 52 58 # CT-CT-HC + 80 3 56 52 57 # HC-CT-OH + 81 4 56 52 58 # HC-CT-HC + 82 3 57 52 58 # HC-CT-OH + 83 5 51 53 59 # CT-OH-HO + 84 5 52 57 60 # CT-OH-HO + 85 1 62 61 63 # CT-CT-OH + 86 2 62 61 64 # CT-CT-HC + 87 2 62 61 65 # CT-CT-HC + 88 3 63 61 64 # HC-CT-OH + 89 3 63 61 65 # HC-CT-OH + 90 4 64 61 65 # HC-CT-HC + 91 2 61 62 66 # CT-CT-HC + 92 1 61 62 67 # CT-CT-OH + 93 2 61 62 68 # CT-CT-HC + 94 3 66 62 67 # HC-CT-OH + 95 4 66 62 68 # HC-CT-HC + 96 3 67 62 68 # HC-CT-OH + 97 5 61 63 69 # CT-OH-HO + 98 5 62 67 70 # CT-OH-HO + 99 1 72 71 73 # CT-CT-OH + 100 2 72 71 74 # CT-CT-HC + 101 2 72 71 75 # CT-CT-HC + 102 3 73 71 74 # HC-CT-OH + 103 3 73 71 75 # HC-CT-OH + 104 4 74 71 75 # HC-CT-HC + 105 2 71 72 76 # CT-CT-HC + 106 1 71 72 77 # CT-CT-OH + 107 2 71 72 78 # CT-CT-HC + 108 3 76 72 77 # HC-CT-OH + 109 4 76 72 78 # HC-CT-HC + 110 3 77 72 78 # HC-CT-OH + 111 5 71 73 79 # CT-OH-HO + 112 5 72 77 80 # CT-OH-HO + 113 1 82 81 83 # CT-CT-OH + 114 2 82 81 84 # CT-CT-HC + 115 2 82 81 85 # CT-CT-HC + 116 3 83 81 84 # HC-CT-OH + 117 3 83 81 85 # HC-CT-OH + 118 4 84 81 85 # HC-CT-HC + 119 2 81 82 86 # CT-CT-HC + 120 1 81 82 87 # CT-CT-OH + 121 2 81 82 88 # CT-CT-HC + 122 3 86 82 87 # HC-CT-OH + 123 4 86 82 88 # HC-CT-HC + 124 3 87 82 88 # HC-CT-OH + 125 5 81 83 89 # CT-OH-HO + 126 5 82 87 90 # CT-OH-HO + 127 1 92 91 93 # CT-CT-OH + 128 2 92 91 94 # CT-CT-HC + 129 2 92 91 95 # CT-CT-HC + 130 3 93 91 94 # HC-CT-OH + 131 3 93 91 95 # HC-CT-OH + 132 4 94 91 95 # HC-CT-HC + 133 2 91 92 96 # CT-CT-HC + 134 1 91 92 97 # CT-CT-OH + 135 2 91 92 98 # CT-CT-HC + 136 3 96 92 97 # HC-CT-OH + 137 4 96 92 98 # HC-CT-HC + 138 3 97 92 98 # HC-CT-OH + 139 5 91 93 99 # CT-OH-HO + 140 5 92 97 100 # CT-OH-HO + 141 1 102 101 103 # CT-CT-OH + 142 2 102 101 104 # CT-CT-HC + 143 2 102 101 105 # CT-CT-HC + 144 3 103 101 104 # HC-CT-OH + 145 3 103 101 105 # HC-CT-OH + 146 4 104 101 105 # HC-CT-HC + 147 2 101 102 106 # CT-CT-HC + 148 1 101 102 107 # CT-CT-OH + 149 2 101 102 108 # CT-CT-HC + 150 3 106 102 107 # HC-CT-OH + 151 4 106 102 108 # HC-CT-HC + 152 3 107 102 108 # HC-CT-OH + 153 5 101 103 109 # CT-OH-HO + 154 5 102 107 110 # CT-OH-HO + 155 1 112 111 113 # CT-CT-OH + 156 2 112 111 114 # CT-CT-HC + 157 2 112 111 115 # CT-CT-HC + 158 3 113 111 114 # HC-CT-OH + 159 3 113 111 115 # HC-CT-OH + 160 4 114 111 115 # HC-CT-HC + 161 2 111 112 116 # CT-CT-HC + 162 1 111 112 117 # CT-CT-OH + 163 2 111 112 118 # CT-CT-HC + 164 3 116 112 117 # HC-CT-OH + 165 4 116 112 118 # HC-CT-HC + 166 3 117 112 118 # HC-CT-OH + 167 5 111 113 119 # CT-OH-HO + 168 5 112 117 120 # CT-OH-HO + 169 1 122 121 123 # CT-CT-OH + 170 2 122 121 124 # CT-CT-HC + 171 2 122 121 125 # CT-CT-HC + 172 3 123 121 124 # HC-CT-OH + 173 3 123 121 125 # HC-CT-OH + 174 4 124 121 125 # HC-CT-HC + 175 2 121 122 126 # CT-CT-HC + 176 1 121 122 127 # CT-CT-OH + 177 2 121 122 128 # CT-CT-HC + 178 3 126 122 127 # HC-CT-OH + 179 4 126 122 128 # HC-CT-HC + 180 3 127 122 128 # HC-CT-OH + 181 5 121 123 129 # CT-OH-HO + 182 5 122 127 130 # CT-OH-HO + 183 1 132 131 133 # CT-CT-OH + 184 2 132 131 134 # CT-CT-HC + 185 2 132 131 135 # CT-CT-HC + 186 3 133 131 134 # HC-CT-OH + 187 3 133 131 135 # HC-CT-OH + 188 4 134 131 135 # HC-CT-HC + 189 2 131 132 136 # CT-CT-HC + 190 1 131 132 137 # CT-CT-OH + 191 2 131 132 138 # CT-CT-HC + 192 3 136 132 137 # HC-CT-OH + 193 4 136 132 138 # HC-CT-HC + 194 3 137 132 138 # HC-CT-OH + 195 5 131 133 139 # CT-OH-HO + 196 5 132 137 140 # CT-OH-HO + 197 1 142 141 143 # CT-CT-OH + 198 2 142 141 144 # CT-CT-HC + 199 2 142 141 145 # CT-CT-HC + 200 3 143 141 144 # HC-CT-OH + 201 3 143 141 145 # HC-CT-OH + 202 4 144 141 145 # HC-CT-HC + 203 2 141 142 146 # CT-CT-HC + 204 1 141 142 147 # CT-CT-OH + 205 2 141 142 148 # CT-CT-HC + 206 3 146 142 147 # HC-CT-OH + 207 4 146 142 148 # HC-CT-HC + 208 3 147 142 148 # HC-CT-OH + 209 5 141 143 149 # CT-OH-HO + 210 5 142 147 150 # CT-OH-HO + 211 1 152 151 153 # CT-CT-OH + 212 2 152 151 154 # CT-CT-HC + 213 2 152 151 155 # CT-CT-HC + 214 3 153 151 154 # HC-CT-OH + 215 3 153 151 155 # HC-CT-OH + 216 4 154 151 155 # HC-CT-HC + 217 2 151 152 156 # CT-CT-HC + 218 1 151 152 157 # CT-CT-OH + 219 2 151 152 158 # CT-CT-HC + 220 3 156 152 157 # HC-CT-OH + 221 4 156 152 158 # HC-CT-HC + 222 3 157 152 158 # HC-CT-OH + 223 5 151 153 159 # CT-OH-HO + 224 5 152 157 160 # CT-OH-HO + 225 1 162 161 163 # CT-CT-OH + 226 2 162 161 164 # CT-CT-HC + 227 2 162 161 165 # CT-CT-HC + 228 3 163 161 164 # HC-CT-OH + 229 3 163 161 165 # HC-CT-OH + 230 4 164 161 165 # HC-CT-HC + 231 2 161 162 166 # CT-CT-HC + 232 1 161 162 167 # CT-CT-OH + 233 2 161 162 168 # CT-CT-HC + 234 3 166 162 167 # HC-CT-OH + 235 4 166 162 168 # HC-CT-HC + 236 3 167 162 168 # HC-CT-OH + 237 5 161 163 169 # CT-OH-HO + 238 5 162 167 170 # CT-OH-HO + 239 1 172 171 173 # CT-CT-OH + 240 2 172 171 174 # CT-CT-HC + 241 2 172 171 175 # CT-CT-HC + 242 3 173 171 174 # HC-CT-OH + 243 3 173 171 175 # HC-CT-OH + 244 4 174 171 175 # HC-CT-HC + 245 2 171 172 176 # CT-CT-HC + 246 1 171 172 177 # CT-CT-OH + 247 2 171 172 178 # CT-CT-HC + 248 3 176 172 177 # HC-CT-OH + 249 4 176 172 178 # HC-CT-HC + 250 3 177 172 178 # HC-CT-OH + 251 5 171 173 179 # CT-OH-HO + 252 5 172 177 180 # CT-OH-HO + 253 1 182 181 183 # CT-CT-OH + 254 2 182 181 184 # CT-CT-HC + 255 2 182 181 185 # CT-CT-HC + 256 3 183 181 184 # HC-CT-OH + 257 3 183 181 185 # HC-CT-OH + 258 4 184 181 185 # HC-CT-HC + 259 2 181 182 186 # CT-CT-HC + 260 1 181 182 187 # CT-CT-OH + 261 2 181 182 188 # CT-CT-HC + 262 3 186 182 187 # HC-CT-OH + 263 4 186 182 188 # HC-CT-HC + 264 3 187 182 188 # HC-CT-OH + 265 5 181 183 189 # CT-OH-HO + 266 5 182 187 190 # CT-OH-HO + 267 1 192 191 193 # CT-CT-OH + 268 2 192 191 194 # CT-CT-HC + 269 2 192 191 195 # CT-CT-HC + 270 3 193 191 194 # HC-CT-OH + 271 3 193 191 195 # HC-CT-OH + 272 4 194 191 195 # HC-CT-HC + 273 2 191 192 196 # CT-CT-HC + 274 1 191 192 197 # CT-CT-OH + 275 2 191 192 198 # CT-CT-HC + 276 3 196 192 197 # HC-CT-OH + 277 4 196 192 198 # HC-CT-HC + 278 3 197 192 198 # HC-CT-OH + 279 5 191 193 199 # CT-OH-HO + 280 5 192 197 200 # CT-OH-HO + 281 1 202 201 203 # CT-CT-OH + 282 2 202 201 204 # CT-CT-HC + 283 2 202 201 205 # CT-CT-HC + 284 3 203 201 204 # HC-CT-OH + 285 3 203 201 205 # HC-CT-OH + 286 4 204 201 205 # HC-CT-HC + 287 2 201 202 206 # CT-CT-HC + 288 1 201 202 207 # CT-CT-OH + 289 2 201 202 208 # CT-CT-HC + 290 3 206 202 207 # HC-CT-OH + 291 4 206 202 208 # HC-CT-HC + 292 3 207 202 208 # HC-CT-OH + 293 5 201 203 209 # CT-OH-HO + 294 5 202 207 210 # CT-OH-HO + 295 1 212 211 213 # CT-CT-OH + 296 2 212 211 214 # CT-CT-HC + 297 2 212 211 215 # CT-CT-HC + 298 3 213 211 214 # HC-CT-OH + 299 3 213 211 215 # HC-CT-OH + 300 4 214 211 215 # HC-CT-HC + 301 2 211 212 216 # CT-CT-HC + 302 1 211 212 217 # CT-CT-OH + 303 2 211 212 218 # CT-CT-HC + 304 3 216 212 217 # HC-CT-OH + 305 4 216 212 218 # HC-CT-HC + 306 3 217 212 218 # HC-CT-OH + 307 5 211 213 219 # CT-OH-HO + 308 5 212 217 220 # CT-OH-HO + 309 1 222 221 223 # CT-CT-OH + 310 2 222 221 224 # CT-CT-HC + 311 2 222 221 225 # CT-CT-HC + 312 3 223 221 224 # HC-CT-OH + 313 3 223 221 225 # HC-CT-OH + 314 4 224 221 225 # HC-CT-HC + 315 2 221 222 226 # CT-CT-HC + 316 1 221 222 227 # CT-CT-OH + 317 2 221 222 228 # CT-CT-HC + 318 3 226 222 227 # HC-CT-OH + 319 4 226 222 228 # HC-CT-HC + 320 3 227 222 228 # HC-CT-OH + 321 5 221 223 229 # CT-OH-HO + 322 5 222 227 230 # CT-OH-HO + 323 1 232 231 233 # CT-CT-OH + 324 2 232 231 234 # CT-CT-HC + 325 2 232 231 235 # CT-CT-HC + 326 3 233 231 234 # HC-CT-OH + 327 3 233 231 235 # HC-CT-OH + 328 4 234 231 235 # HC-CT-HC + 329 2 231 232 236 # CT-CT-HC + 330 1 231 232 237 # CT-CT-OH + 331 2 231 232 238 # CT-CT-HC + 332 3 236 232 237 # HC-CT-OH + 333 4 236 232 238 # HC-CT-HC + 334 3 237 232 238 # HC-CT-OH + 335 5 231 233 239 # CT-OH-HO + 336 5 232 237 240 # CT-OH-HO + 337 1 242 241 243 # CT-CT-OH + 338 2 242 241 244 # CT-CT-HC + 339 2 242 241 245 # CT-CT-HC + 340 3 243 241 244 # HC-CT-OH + 341 3 243 241 245 # HC-CT-OH + 342 4 244 241 245 # HC-CT-HC + 343 2 241 242 246 # CT-CT-HC + 344 1 241 242 247 # CT-CT-OH + 345 2 241 242 248 # CT-CT-HC + 346 3 246 242 247 # HC-CT-OH + 347 4 246 242 248 # HC-CT-HC + 348 3 247 242 248 # HC-CT-OH + 349 5 241 243 249 # CT-OH-HO + 350 5 242 247 250 # CT-OH-HO + 351 1 252 251 253 # CT-CT-OH + 352 2 252 251 254 # CT-CT-HC + 353 2 252 251 255 # CT-CT-HC + 354 3 253 251 254 # HC-CT-OH + 355 3 253 251 255 # HC-CT-OH + 356 4 254 251 255 # HC-CT-HC + 357 2 251 252 256 # CT-CT-HC + 358 1 251 252 257 # CT-CT-OH + 359 2 251 252 258 # CT-CT-HC + 360 3 256 252 257 # HC-CT-OH + 361 4 256 252 258 # HC-CT-HC + 362 3 257 252 258 # HC-CT-OH + 363 5 251 253 259 # CT-OH-HO + 364 5 252 257 260 # CT-OH-HO + 365 1 262 261 263 # CT-CT-OH + 366 2 262 261 264 # CT-CT-HC + 367 2 262 261 265 # CT-CT-HC + 368 3 263 261 264 # HC-CT-OH + 369 3 263 261 265 # HC-CT-OH + 370 4 264 261 265 # HC-CT-HC + 371 2 261 262 266 # CT-CT-HC + 372 1 261 262 267 # CT-CT-OH + 373 2 261 262 268 # CT-CT-HC + 374 3 266 262 267 # HC-CT-OH + 375 4 266 262 268 # HC-CT-HC + 376 3 267 262 268 # HC-CT-OH + 377 5 261 263 269 # CT-OH-HO + 378 5 262 267 270 # CT-OH-HO + 379 1 272 271 273 # CT-CT-OH + 380 2 272 271 274 # CT-CT-HC + 381 2 272 271 275 # CT-CT-HC + 382 3 273 271 274 # HC-CT-OH + 383 3 273 271 275 # HC-CT-OH + 384 4 274 271 275 # HC-CT-HC + 385 2 271 272 276 # CT-CT-HC + 386 1 271 272 277 # CT-CT-OH + 387 2 271 272 278 # CT-CT-HC + 388 3 276 272 277 # HC-CT-OH + 389 4 276 272 278 # HC-CT-HC + 390 3 277 272 278 # HC-CT-OH + 391 5 271 273 279 # CT-OH-HO + 392 5 272 277 280 # CT-OH-HO + 393 1 282 281 283 # CT-CT-OH + 394 2 282 281 284 # CT-CT-HC + 395 2 282 281 285 # CT-CT-HC + 396 3 283 281 284 # HC-CT-OH + 397 3 283 281 285 # HC-CT-OH + 398 4 284 281 285 # HC-CT-HC + 399 2 281 282 286 # CT-CT-HC + 400 1 281 282 287 # CT-CT-OH + 401 2 281 282 288 # CT-CT-HC + 402 3 286 282 287 # HC-CT-OH + 403 4 286 282 288 # HC-CT-HC + 404 3 287 282 288 # HC-CT-OH + 405 5 281 283 289 # CT-OH-HO + 406 5 282 287 290 # CT-OH-HO + 407 1 292 291 293 # CT-CT-OH + 408 2 292 291 294 # CT-CT-HC + 409 2 292 291 295 # CT-CT-HC + 410 3 293 291 294 # HC-CT-OH + 411 3 293 291 295 # HC-CT-OH + 412 4 294 291 295 # HC-CT-HC + 413 2 291 292 296 # CT-CT-HC + 414 1 291 292 297 # CT-CT-OH + 415 2 291 292 298 # CT-CT-HC + 416 3 296 292 297 # HC-CT-OH + 417 4 296 292 298 # HC-CT-HC + 418 3 297 292 298 # HC-CT-OH + 419 5 291 293 299 # CT-OH-HO + 420 5 292 297 300 # CT-OH-HO + 421 1 302 301 303 # CT-CT-OH + 422 2 302 301 304 # CT-CT-HC + 423 2 302 301 305 # CT-CT-HC + 424 3 303 301 304 # HC-CT-OH + 425 3 303 301 305 # HC-CT-OH + 426 4 304 301 305 # HC-CT-HC + 427 2 301 302 306 # CT-CT-HC + 428 1 301 302 307 # CT-CT-OH + 429 2 301 302 308 # CT-CT-HC + 430 3 306 302 307 # HC-CT-OH + 431 4 306 302 308 # HC-CT-HC + 432 3 307 302 308 # HC-CT-OH + 433 5 301 303 309 # CT-OH-HO + 434 5 302 307 310 # CT-OH-HO + 435 1 312 311 313 # CT-CT-OH + 436 2 312 311 314 # CT-CT-HC + 437 2 312 311 315 # CT-CT-HC + 438 3 313 311 314 # HC-CT-OH + 439 3 313 311 315 # HC-CT-OH + 440 4 314 311 315 # HC-CT-HC + 441 2 311 312 316 # CT-CT-HC + 442 1 311 312 317 # CT-CT-OH + 443 2 311 312 318 # CT-CT-HC + 444 3 316 312 317 # HC-CT-OH + 445 4 316 312 318 # HC-CT-HC + 446 3 317 312 318 # HC-CT-OH + 447 5 311 313 319 # CT-OH-HO + 448 5 312 317 320 # CT-OH-HO + 449 1 322 321 323 # CT-CT-OH + 450 2 322 321 324 # CT-CT-HC + 451 2 322 321 325 # CT-CT-HC + 452 3 323 321 324 # HC-CT-OH + 453 3 323 321 325 # HC-CT-OH + 454 4 324 321 325 # HC-CT-HC + 455 2 321 322 326 # CT-CT-HC + 456 1 321 322 327 # CT-CT-OH + 457 2 321 322 328 # CT-CT-HC + 458 3 326 322 327 # HC-CT-OH + 459 4 326 322 328 # HC-CT-HC + 460 3 327 322 328 # HC-CT-OH + 461 5 321 323 329 # CT-OH-HO + 462 5 322 327 330 # CT-OH-HO + 463 1 332 331 333 # CT-CT-OH + 464 2 332 331 334 # CT-CT-HC + 465 2 332 331 335 # CT-CT-HC + 466 3 333 331 334 # HC-CT-OH + 467 3 333 331 335 # HC-CT-OH + 468 4 334 331 335 # HC-CT-HC + 469 2 331 332 336 # CT-CT-HC + 470 1 331 332 337 # CT-CT-OH + 471 2 331 332 338 # CT-CT-HC + 472 3 336 332 337 # HC-CT-OH + 473 4 336 332 338 # HC-CT-HC + 474 3 337 332 338 # HC-CT-OH + 475 5 331 333 339 # CT-OH-HO + 476 5 332 337 340 # CT-OH-HO + 477 1 342 341 343 # CT-CT-OH + 478 2 342 341 344 # CT-CT-HC + 479 2 342 341 345 # CT-CT-HC + 480 3 343 341 344 # HC-CT-OH + 481 3 343 341 345 # HC-CT-OH + 482 4 344 341 345 # HC-CT-HC + 483 2 341 342 346 # CT-CT-HC + 484 1 341 342 347 # CT-CT-OH + 485 2 341 342 348 # CT-CT-HC + 486 3 346 342 347 # HC-CT-OH + 487 4 346 342 348 # HC-CT-HC + 488 3 347 342 348 # HC-CT-OH + 489 5 341 343 349 # CT-OH-HO + 490 5 342 347 350 # CT-OH-HO + 491 1 352 351 353 # CT-CT-OH + 492 2 352 351 354 # CT-CT-HC + 493 2 352 351 355 # CT-CT-HC + 494 3 353 351 354 # HC-CT-OH + 495 3 353 351 355 # HC-CT-OH + 496 4 354 351 355 # HC-CT-HC + 497 2 351 352 356 # CT-CT-HC + 498 1 351 352 357 # CT-CT-OH + 499 2 351 352 358 # CT-CT-HC + 500 3 356 352 357 # HC-CT-OH + 501 4 356 352 358 # HC-CT-HC + 502 3 357 352 358 # HC-CT-OH + 503 5 351 353 359 # CT-OH-HO + 504 5 352 357 360 # CT-OH-HO + 505 1 362 361 363 # CT-CT-OH + 506 2 362 361 364 # CT-CT-HC + 507 2 362 361 365 # CT-CT-HC + 508 3 363 361 364 # HC-CT-OH + 509 3 363 361 365 # HC-CT-OH + 510 4 364 361 365 # HC-CT-HC + 511 2 361 362 366 # CT-CT-HC + 512 1 361 362 367 # CT-CT-OH + 513 2 361 362 368 # CT-CT-HC + 514 3 366 362 367 # HC-CT-OH + 515 4 366 362 368 # HC-CT-HC + 516 3 367 362 368 # HC-CT-OH + 517 5 361 363 369 # CT-OH-HO + 518 5 362 367 370 # CT-OH-HO + 519 1 372 371 373 # CT-CT-OH + 520 2 372 371 374 # CT-CT-HC + 521 2 372 371 375 # CT-CT-HC + 522 3 373 371 374 # HC-CT-OH + 523 3 373 371 375 # HC-CT-OH + 524 4 374 371 375 # HC-CT-HC + 525 2 371 372 376 # CT-CT-HC + 526 1 371 372 377 # CT-CT-OH + 527 2 371 372 378 # CT-CT-HC + 528 3 376 372 377 # HC-CT-OH + 529 4 376 372 378 # HC-CT-HC + 530 3 377 372 378 # HC-CT-OH + 531 5 371 373 379 # CT-OH-HO + 532 5 372 377 380 # CT-OH-HO + 533 1 382 381 383 # CT-CT-OH + 534 2 382 381 384 # CT-CT-HC + 535 2 382 381 385 # CT-CT-HC + 536 3 383 381 384 # HC-CT-OH + 537 3 383 381 385 # HC-CT-OH + 538 4 384 381 385 # HC-CT-HC + 539 2 381 382 386 # CT-CT-HC + 540 1 381 382 387 # CT-CT-OH + 541 2 381 382 388 # CT-CT-HC + 542 3 386 382 387 # HC-CT-OH + 543 4 386 382 388 # HC-CT-HC + 544 3 387 382 388 # HC-CT-OH + 545 5 381 383 389 # CT-OH-HO + 546 5 382 387 390 # CT-OH-HO + 547 1 392 391 393 # CT-CT-OH + 548 2 392 391 394 # CT-CT-HC + 549 2 392 391 395 # CT-CT-HC + 550 3 393 391 394 # HC-CT-OH + 551 3 393 391 395 # HC-CT-OH + 552 4 394 391 395 # HC-CT-HC + 553 2 391 392 396 # CT-CT-HC + 554 1 391 392 397 # CT-CT-OH + 555 2 391 392 398 # CT-CT-HC + 556 3 396 392 397 # HC-CT-OH + 557 4 396 392 398 # HC-CT-HC + 558 3 397 392 398 # HC-CT-OH + 559 5 391 393 399 # CT-OH-HO + 560 5 392 397 400 # CT-OH-HO + 561 1 402 401 403 # CT-CT-OH + 562 2 402 401 404 # CT-CT-HC + 563 2 402 401 405 # CT-CT-HC + 564 3 403 401 404 # HC-CT-OH + 565 3 403 401 405 # HC-CT-OH + 566 4 404 401 405 # HC-CT-HC + 567 2 401 402 406 # CT-CT-HC + 568 1 401 402 407 # CT-CT-OH + 569 2 401 402 408 # CT-CT-HC + 570 3 406 402 407 # HC-CT-OH + 571 4 406 402 408 # HC-CT-HC + 572 3 407 402 408 # HC-CT-OH + 573 5 401 403 409 # CT-OH-HO + 574 5 402 407 410 # CT-OH-HO + 575 1 412 411 413 # CT-CT-OH + 576 2 412 411 414 # CT-CT-HC + 577 2 412 411 415 # CT-CT-HC + 578 3 413 411 414 # HC-CT-OH + 579 3 413 411 415 # HC-CT-OH + 580 4 414 411 415 # HC-CT-HC + 581 2 411 412 416 # CT-CT-HC + 582 1 411 412 417 # CT-CT-OH + 583 2 411 412 418 # CT-CT-HC + 584 3 416 412 417 # HC-CT-OH + 585 4 416 412 418 # HC-CT-HC + 586 3 417 412 418 # HC-CT-OH + 587 5 411 413 419 # CT-OH-HO + 588 5 412 417 420 # CT-OH-HO + 589 1 422 421 423 # CT-CT-OH + 590 2 422 421 424 # CT-CT-HC + 591 2 422 421 425 # CT-CT-HC + 592 3 423 421 424 # HC-CT-OH + 593 3 423 421 425 # HC-CT-OH + 594 4 424 421 425 # HC-CT-HC + 595 2 421 422 426 # CT-CT-HC + 596 1 421 422 427 # CT-CT-OH + 597 2 421 422 428 # CT-CT-HC + 598 3 426 422 427 # HC-CT-OH + 599 4 426 422 428 # HC-CT-HC + 600 3 427 422 428 # HC-CT-OH + 601 5 421 423 429 # CT-OH-HO + 602 5 422 427 430 # CT-OH-HO + 603 1 432 431 433 # CT-CT-OH + 604 2 432 431 434 # CT-CT-HC + 605 2 432 431 435 # CT-CT-HC + 606 3 433 431 434 # HC-CT-OH + 607 3 433 431 435 # HC-CT-OH + 608 4 434 431 435 # HC-CT-HC + 609 2 431 432 436 # CT-CT-HC + 610 1 431 432 437 # CT-CT-OH + 611 2 431 432 438 # CT-CT-HC + 612 3 436 432 437 # HC-CT-OH + 613 4 436 432 438 # HC-CT-HC + 614 3 437 432 438 # HC-CT-OH + 615 5 431 433 439 # CT-OH-HO + 616 5 432 437 440 # CT-OH-HO + 617 1 442 441 443 # CT-CT-OH + 618 2 442 441 444 # CT-CT-HC + 619 2 442 441 445 # CT-CT-HC + 620 3 443 441 444 # HC-CT-OH + 621 3 443 441 445 # HC-CT-OH + 622 4 444 441 445 # HC-CT-HC + 623 2 441 442 446 # CT-CT-HC + 624 1 441 442 447 # CT-CT-OH + 625 2 441 442 448 # CT-CT-HC + 626 3 446 442 447 # HC-CT-OH + 627 4 446 442 448 # HC-CT-HC + 628 3 447 442 448 # HC-CT-OH + 629 5 441 443 449 # CT-OH-HO + 630 5 442 447 450 # CT-OH-HO + 631 1 452 451 453 # CT-CT-OH + 632 2 452 451 454 # CT-CT-HC + 633 2 452 451 455 # CT-CT-HC + 634 3 453 451 454 # HC-CT-OH + 635 3 453 451 455 # HC-CT-OH + 636 4 454 451 455 # HC-CT-HC + 637 2 451 452 456 # CT-CT-HC + 638 1 451 452 457 # CT-CT-OH + 639 2 451 452 458 # CT-CT-HC + 640 3 456 452 457 # HC-CT-OH + 641 4 456 452 458 # HC-CT-HC + 642 3 457 452 458 # HC-CT-OH + 643 5 451 453 459 # CT-OH-HO + 644 5 452 457 460 # CT-OH-HO + 645 1 462 461 463 # CT-CT-OH + 646 2 462 461 464 # CT-CT-HC + 647 2 462 461 465 # CT-CT-HC + 648 3 463 461 464 # HC-CT-OH + 649 3 463 461 465 # HC-CT-OH + 650 4 464 461 465 # HC-CT-HC + 651 2 461 462 466 # CT-CT-HC + 652 1 461 462 467 # CT-CT-OH + 653 2 461 462 468 # CT-CT-HC + 654 3 466 462 467 # HC-CT-OH + 655 4 466 462 468 # HC-CT-HC + 656 3 467 462 468 # HC-CT-OH + 657 5 461 463 469 # CT-OH-HO + 658 5 462 467 470 # CT-OH-HO + 659 1 472 471 473 # CT-CT-OH + 660 2 472 471 474 # CT-CT-HC + 661 2 472 471 475 # CT-CT-HC + 662 3 473 471 474 # HC-CT-OH + 663 3 473 471 475 # HC-CT-OH + 664 4 474 471 475 # HC-CT-HC + 665 2 471 472 476 # CT-CT-HC + 666 1 471 472 477 # CT-CT-OH + 667 2 471 472 478 # CT-CT-HC + 668 3 476 472 477 # HC-CT-OH + 669 4 476 472 478 # HC-CT-HC + 670 3 477 472 478 # HC-CT-OH + 671 5 471 473 479 # CT-OH-HO + 672 5 472 477 480 # CT-OH-HO + 673 1 482 481 483 # CT-CT-OH + 674 2 482 481 484 # CT-CT-HC + 675 2 482 481 485 # CT-CT-HC + 676 3 483 481 484 # HC-CT-OH + 677 3 483 481 485 # HC-CT-OH + 678 4 484 481 485 # HC-CT-HC + 679 2 481 482 486 # CT-CT-HC + 680 1 481 482 487 # CT-CT-OH + 681 2 481 482 488 # CT-CT-HC + 682 3 486 482 487 # HC-CT-OH + 683 4 486 482 488 # HC-CT-HC + 684 3 487 482 488 # HC-CT-OH + 685 5 481 483 489 # CT-OH-HO + 686 5 482 487 490 # CT-OH-HO + 687 1 492 491 493 # CT-CT-OH + 688 2 492 491 494 # CT-CT-HC + 689 2 492 491 495 # CT-CT-HC + 690 3 493 491 494 # HC-CT-OH + 691 3 493 491 495 # HC-CT-OH + 692 4 494 491 495 # HC-CT-HC + 693 2 491 492 496 # CT-CT-HC + 694 1 491 492 497 # CT-CT-OH + 695 2 491 492 498 # CT-CT-HC + 696 3 496 492 497 # HC-CT-OH + 697 4 496 492 498 # HC-CT-HC + 698 3 497 492 498 # HC-CT-OH + 699 5 491 493 499 # CT-OH-HO + 700 5 492 497 500 # CT-OH-HO + 701 1 502 501 503 # CT-CT-OH + 702 2 502 501 504 # CT-CT-HC + 703 2 502 501 505 # CT-CT-HC + 704 3 503 501 504 # HC-CT-OH + 705 3 503 501 505 # HC-CT-OH + 706 4 504 501 505 # HC-CT-HC + 707 2 501 502 506 # CT-CT-HC + 708 1 501 502 507 # CT-CT-OH + 709 2 501 502 508 # CT-CT-HC + 710 3 506 502 507 # HC-CT-OH + 711 4 506 502 508 # HC-CT-HC + 712 3 507 502 508 # HC-CT-OH + 713 5 501 503 509 # CT-OH-HO + 714 5 502 507 510 # CT-OH-HO + 715 1 512 511 513 # CT-CT-OH + 716 2 512 511 514 # CT-CT-HC + 717 2 512 511 515 # CT-CT-HC + 718 3 513 511 514 # HC-CT-OH + 719 3 513 511 515 # HC-CT-OH + 720 4 514 511 515 # HC-CT-HC + 721 2 511 512 516 # CT-CT-HC + 722 1 511 512 517 # CT-CT-OH + 723 2 511 512 518 # CT-CT-HC + 724 3 516 512 517 # HC-CT-OH + 725 4 516 512 518 # HC-CT-HC + 726 3 517 512 518 # HC-CT-OH + 727 5 511 513 519 # CT-OH-HO + 728 5 512 517 520 # CT-OH-HO + 729 1 522 521 523 # CT-CT-OH + 730 2 522 521 524 # CT-CT-HC + 731 2 522 521 525 # CT-CT-HC + 732 3 523 521 524 # HC-CT-OH + 733 3 523 521 525 # HC-CT-OH + 734 4 524 521 525 # HC-CT-HC + 735 2 521 522 526 # CT-CT-HC + 736 1 521 522 527 # CT-CT-OH + 737 2 521 522 528 # CT-CT-HC + 738 3 526 522 527 # HC-CT-OH + 739 4 526 522 528 # HC-CT-HC + 740 3 527 522 528 # HC-CT-OH + 741 5 521 523 529 # CT-OH-HO + 742 5 522 527 530 # CT-OH-HO + 743 1 532 531 533 # CT-CT-OH + 744 2 532 531 534 # CT-CT-HC + 745 2 532 531 535 # CT-CT-HC + 746 3 533 531 534 # HC-CT-OH + 747 3 533 531 535 # HC-CT-OH + 748 4 534 531 535 # HC-CT-HC + 749 2 531 532 536 # CT-CT-HC + 750 1 531 532 537 # CT-CT-OH + 751 2 531 532 538 # CT-CT-HC + 752 3 536 532 537 # HC-CT-OH + 753 4 536 532 538 # HC-CT-HC + 754 3 537 532 538 # HC-CT-OH + 755 5 531 533 539 # CT-OH-HO + 756 5 532 537 540 # CT-OH-HO + 757 1 542 541 543 # CT-CT-OH + 758 2 542 541 544 # CT-CT-HC + 759 2 542 541 545 # CT-CT-HC + 760 3 543 541 544 # HC-CT-OH + 761 3 543 541 545 # HC-CT-OH + 762 4 544 541 545 # HC-CT-HC + 763 2 541 542 546 # CT-CT-HC + 764 1 541 542 547 # CT-CT-OH + 765 2 541 542 548 # CT-CT-HC + 766 3 546 542 547 # HC-CT-OH + 767 4 546 542 548 # HC-CT-HC + 768 3 547 542 548 # HC-CT-OH + 769 5 541 543 549 # CT-OH-HO + 770 5 542 547 550 # CT-OH-HO + 771 1 552 551 553 # CT-CT-OH + 772 2 552 551 554 # CT-CT-HC + 773 2 552 551 555 # CT-CT-HC + 774 3 553 551 554 # HC-CT-OH + 775 3 553 551 555 # HC-CT-OH + 776 4 554 551 555 # HC-CT-HC + 777 2 551 552 556 # CT-CT-HC + 778 1 551 552 557 # CT-CT-OH + 779 2 551 552 558 # CT-CT-HC + 780 3 556 552 557 # HC-CT-OH + 781 4 556 552 558 # HC-CT-HC + 782 3 557 552 558 # HC-CT-OH + 783 5 551 553 559 # CT-OH-HO + 784 5 552 557 560 # CT-OH-HO + 785 1 562 561 563 # CT-CT-OH + 786 2 562 561 564 # CT-CT-HC + 787 2 562 561 565 # CT-CT-HC + 788 3 563 561 564 # HC-CT-OH + 789 3 563 561 565 # HC-CT-OH + 790 4 564 561 565 # HC-CT-HC + 791 2 561 562 566 # CT-CT-HC + 792 1 561 562 567 # CT-CT-OH + 793 2 561 562 568 # CT-CT-HC + 794 3 566 562 567 # HC-CT-OH + 795 4 566 562 568 # HC-CT-HC + 796 3 567 562 568 # HC-CT-OH + 797 5 561 563 569 # CT-OH-HO + 798 5 562 567 570 # CT-OH-HO + 799 1 572 571 573 # CT-CT-OH + 800 2 572 571 574 # CT-CT-HC + 801 2 572 571 575 # CT-CT-HC + 802 3 573 571 574 # HC-CT-OH + 803 3 573 571 575 # HC-CT-OH + 804 4 574 571 575 # HC-CT-HC + 805 2 571 572 576 # CT-CT-HC + 806 1 571 572 577 # CT-CT-OH + 807 2 571 572 578 # CT-CT-HC + 808 3 576 572 577 # HC-CT-OH + 809 4 576 572 578 # HC-CT-HC + 810 3 577 572 578 # HC-CT-OH + 811 5 571 573 579 # CT-OH-HO + 812 5 572 577 580 # CT-OH-HO + 813 1 582 581 583 # CT-CT-OH + 814 2 582 581 584 # CT-CT-HC + 815 2 582 581 585 # CT-CT-HC + 816 3 583 581 584 # HC-CT-OH + 817 3 583 581 585 # HC-CT-OH + 818 4 584 581 585 # HC-CT-HC + 819 2 581 582 586 # CT-CT-HC + 820 1 581 582 587 # CT-CT-OH + 821 2 581 582 588 # CT-CT-HC + 822 3 586 582 587 # HC-CT-OH + 823 4 586 582 588 # HC-CT-HC + 824 3 587 582 588 # HC-CT-OH + 825 5 581 583 589 # CT-OH-HO + 826 5 582 587 590 # CT-OH-HO + 827 1 592 591 593 # CT-CT-OH + 828 2 592 591 594 # CT-CT-HC + 829 2 592 591 595 # CT-CT-HC + 830 3 593 591 594 # HC-CT-OH + 831 3 593 591 595 # HC-CT-OH + 832 4 594 591 595 # HC-CT-HC + 833 2 591 592 596 # CT-CT-HC + 834 1 591 592 597 # CT-CT-OH + 835 2 591 592 598 # CT-CT-HC + 836 3 596 592 597 # HC-CT-OH + 837 4 596 592 598 # HC-CT-HC + 838 3 597 592 598 # HC-CT-OH + 839 5 591 593 599 # CT-OH-HO + 840 5 592 597 600 # CT-OH-HO + 841 1 602 601 603 # CT-CT-OH + 842 2 602 601 604 # CT-CT-HC + 843 2 602 601 605 # CT-CT-HC + 844 3 603 601 604 # HC-CT-OH + 845 3 603 601 605 # HC-CT-OH + 846 4 604 601 605 # HC-CT-HC + 847 2 601 602 606 # CT-CT-HC + 848 1 601 602 607 # CT-CT-OH + 849 2 601 602 608 # CT-CT-HC + 850 3 606 602 607 # HC-CT-OH + 851 4 606 602 608 # HC-CT-HC + 852 3 607 602 608 # HC-CT-OH + 853 5 601 603 609 # CT-OH-HO + 854 5 602 607 610 # CT-OH-HO + 855 1 612 611 613 # CT-CT-OH + 856 2 612 611 614 # CT-CT-HC + 857 2 612 611 615 # CT-CT-HC + 858 3 613 611 614 # HC-CT-OH + 859 3 613 611 615 # HC-CT-OH + 860 4 614 611 615 # HC-CT-HC + 861 2 611 612 616 # CT-CT-HC + 862 1 611 612 617 # CT-CT-OH + 863 2 611 612 618 # CT-CT-HC + 864 3 616 612 617 # HC-CT-OH + 865 4 616 612 618 # HC-CT-HC + 866 3 617 612 618 # HC-CT-OH + 867 5 611 613 619 # CT-OH-HO + 868 5 612 617 620 # CT-OH-HO + 869 1 622 621 623 # CT-CT-OH + 870 2 622 621 624 # CT-CT-HC + 871 2 622 621 625 # CT-CT-HC + 872 3 623 621 624 # HC-CT-OH + 873 3 623 621 625 # HC-CT-OH + 874 4 624 621 625 # HC-CT-HC + 875 2 621 622 626 # CT-CT-HC + 876 1 621 622 627 # CT-CT-OH + 877 2 621 622 628 # CT-CT-HC + 878 3 626 622 627 # HC-CT-OH + 879 4 626 622 628 # HC-CT-HC + 880 3 627 622 628 # HC-CT-OH + 881 5 621 623 629 # CT-OH-HO + 882 5 622 627 630 # CT-OH-HO + 883 1 632 631 633 # CT-CT-OH + 884 2 632 631 634 # CT-CT-HC + 885 2 632 631 635 # CT-CT-HC + 886 3 633 631 634 # HC-CT-OH + 887 3 633 631 635 # HC-CT-OH + 888 4 634 631 635 # HC-CT-HC + 889 2 631 632 636 # CT-CT-HC + 890 1 631 632 637 # CT-CT-OH + 891 2 631 632 638 # CT-CT-HC + 892 3 636 632 637 # HC-CT-OH + 893 4 636 632 638 # HC-CT-HC + 894 3 637 632 638 # HC-CT-OH + 895 5 631 633 639 # CT-OH-HO + 896 5 632 637 640 # CT-OH-HO + 897 1 642 641 643 # CT-CT-OH + 898 2 642 641 644 # CT-CT-HC + 899 2 642 641 645 # CT-CT-HC + 900 3 643 641 644 # HC-CT-OH + 901 3 643 641 645 # HC-CT-OH + 902 4 644 641 645 # HC-CT-HC + 903 2 641 642 646 # CT-CT-HC + 904 1 641 642 647 # CT-CT-OH + 905 2 641 642 648 # CT-CT-HC + 906 3 646 642 647 # HC-CT-OH + 907 4 646 642 648 # HC-CT-HC + 908 3 647 642 648 # HC-CT-OH + 909 5 641 643 649 # CT-OH-HO + 910 5 642 647 650 # CT-OH-HO + 911 1 652 651 653 # CT-CT-OH + 912 2 652 651 654 # CT-CT-HC + 913 2 652 651 655 # CT-CT-HC + 914 3 653 651 654 # HC-CT-OH + 915 3 653 651 655 # HC-CT-OH + 916 4 654 651 655 # HC-CT-HC + 917 2 651 652 656 # CT-CT-HC + 918 1 651 652 657 # CT-CT-OH + 919 2 651 652 658 # CT-CT-HC + 920 3 656 652 657 # HC-CT-OH + 921 4 656 652 658 # HC-CT-HC + 922 3 657 652 658 # HC-CT-OH + 923 5 651 653 659 # CT-OH-HO + 924 5 652 657 660 # CT-OH-HO + 925 1 662 661 663 # CT-CT-OH + 926 2 662 661 664 # CT-CT-HC + 927 2 662 661 665 # CT-CT-HC + 928 3 663 661 664 # HC-CT-OH + 929 3 663 661 665 # HC-CT-OH + 930 4 664 661 665 # HC-CT-HC + 931 2 661 662 666 # CT-CT-HC + 932 1 661 662 667 # CT-CT-OH + 933 2 661 662 668 # CT-CT-HC + 934 3 666 662 667 # HC-CT-OH + 935 4 666 662 668 # HC-CT-HC + 936 3 667 662 668 # HC-CT-OH + 937 5 661 663 669 # CT-OH-HO + 938 5 662 667 670 # CT-OH-HO + 939 1 672 671 673 # CT-CT-OH + 940 2 672 671 674 # CT-CT-HC + 941 2 672 671 675 # CT-CT-HC + 942 3 673 671 674 # HC-CT-OH + 943 3 673 671 675 # HC-CT-OH + 944 4 674 671 675 # HC-CT-HC + 945 2 671 672 676 # CT-CT-HC + 946 1 671 672 677 # CT-CT-OH + 947 2 671 672 678 # CT-CT-HC + 948 3 676 672 677 # HC-CT-OH + 949 4 676 672 678 # HC-CT-HC + 950 3 677 672 678 # HC-CT-OH + 951 5 671 673 679 # CT-OH-HO + 952 5 672 677 680 # CT-OH-HO + 953 1 682 681 683 # CT-CT-OH + 954 2 682 681 684 # CT-CT-HC + 955 2 682 681 685 # CT-CT-HC + 956 3 683 681 684 # HC-CT-OH + 957 3 683 681 685 # HC-CT-OH + 958 4 684 681 685 # HC-CT-HC + 959 2 681 682 686 # CT-CT-HC + 960 1 681 682 687 # CT-CT-OH + 961 2 681 682 688 # CT-CT-HC + 962 3 686 682 687 # HC-CT-OH + 963 4 686 682 688 # HC-CT-HC + 964 3 687 682 688 # HC-CT-OH + 965 5 681 683 689 # CT-OH-HO + 966 5 682 687 690 # CT-OH-HO + 967 1 692 691 693 # CT-CT-OH + 968 2 692 691 694 # CT-CT-HC + 969 2 692 691 695 # CT-CT-HC + 970 3 693 691 694 # HC-CT-OH + 971 3 693 691 695 # HC-CT-OH + 972 4 694 691 695 # HC-CT-HC + 973 2 691 692 696 # CT-CT-HC + 974 1 691 692 697 # CT-CT-OH + 975 2 691 692 698 # CT-CT-HC + 976 3 696 692 697 # HC-CT-OH + 977 4 696 692 698 # HC-CT-HC + 978 3 697 692 698 # HC-CT-OH + 979 5 691 693 699 # CT-OH-HO + 980 5 692 697 700 # CT-OH-HO + 981 1 702 701 703 # CT-CT-OH + 982 2 702 701 704 # CT-CT-HC + 983 2 702 701 705 # CT-CT-HC + 984 3 703 701 704 # HC-CT-OH + 985 3 703 701 705 # HC-CT-OH + 986 4 704 701 705 # HC-CT-HC + 987 2 701 702 706 # CT-CT-HC + 988 1 701 702 707 # CT-CT-OH + 989 2 701 702 708 # CT-CT-HC + 990 3 706 702 707 # HC-CT-OH + 991 4 706 702 708 # HC-CT-HC + 992 3 707 702 708 # HC-CT-OH + 993 5 701 703 709 # CT-OH-HO + 994 5 702 707 710 # CT-OH-HO + 995 1 712 711 713 # CT-CT-OH + 996 2 712 711 714 # CT-CT-HC + 997 2 712 711 715 # CT-CT-HC + 998 3 713 711 714 # HC-CT-OH + 999 3 713 711 715 # HC-CT-OH + 1000 4 714 711 715 # HC-CT-HC + 1001 2 711 712 716 # CT-CT-HC + 1002 1 711 712 717 # CT-CT-OH + 1003 2 711 712 718 # CT-CT-HC + 1004 3 716 712 717 # HC-CT-OH + 1005 4 716 712 718 # HC-CT-HC + 1006 3 717 712 718 # HC-CT-OH + 1007 5 711 713 719 # CT-OH-HO + 1008 5 712 717 720 # CT-OH-HO + 1009 1 722 721 723 # CT-CT-OH + 1010 2 722 721 724 # CT-CT-HC + 1011 2 722 721 725 # CT-CT-HC + 1012 3 723 721 724 # HC-CT-OH + 1013 3 723 721 725 # HC-CT-OH + 1014 4 724 721 725 # HC-CT-HC + 1015 2 721 722 726 # CT-CT-HC + 1016 1 721 722 727 # CT-CT-OH + 1017 2 721 722 728 # CT-CT-HC + 1018 3 726 722 727 # HC-CT-OH + 1019 4 726 722 728 # HC-CT-HC + 1020 3 727 722 728 # HC-CT-OH + 1021 5 721 723 729 # CT-OH-HO + 1022 5 722 727 730 # CT-OH-HO + 1023 1 732 731 733 # CT-CT-OH + 1024 2 732 731 734 # CT-CT-HC + 1025 2 732 731 735 # CT-CT-HC + 1026 3 733 731 734 # HC-CT-OH + 1027 3 733 731 735 # HC-CT-OH + 1028 4 734 731 735 # HC-CT-HC + 1029 2 731 732 736 # CT-CT-HC + 1030 1 731 732 737 # CT-CT-OH + 1031 2 731 732 738 # CT-CT-HC + 1032 3 736 732 737 # HC-CT-OH + 1033 4 736 732 738 # HC-CT-HC + 1034 3 737 732 738 # HC-CT-OH + 1035 5 731 733 739 # CT-OH-HO + 1036 5 732 737 740 # CT-OH-HO + 1037 1 742 741 743 # CT-CT-OH + 1038 2 742 741 744 # CT-CT-HC + 1039 2 742 741 745 # CT-CT-HC + 1040 3 743 741 744 # HC-CT-OH + 1041 3 743 741 745 # HC-CT-OH + 1042 4 744 741 745 # HC-CT-HC + 1043 2 741 742 746 # CT-CT-HC + 1044 1 741 742 747 # CT-CT-OH + 1045 2 741 742 748 # CT-CT-HC + 1046 3 746 742 747 # HC-CT-OH + 1047 4 746 742 748 # HC-CT-HC + 1048 3 747 742 748 # HC-CT-OH + 1049 5 741 743 749 # CT-OH-HO + 1050 5 742 747 750 # CT-OH-HO + 1051 1 752 751 753 # CT-CT-OH + 1052 2 752 751 754 # CT-CT-HC + 1053 2 752 751 755 # CT-CT-HC + 1054 3 753 751 754 # HC-CT-OH + 1055 3 753 751 755 # HC-CT-OH + 1056 4 754 751 755 # HC-CT-HC + 1057 2 751 752 756 # CT-CT-HC + 1058 1 751 752 757 # CT-CT-OH + 1059 2 751 752 758 # CT-CT-HC + 1060 3 756 752 757 # HC-CT-OH + 1061 4 756 752 758 # HC-CT-HC + 1062 3 757 752 758 # HC-CT-OH + 1063 5 751 753 759 # CT-OH-HO + 1064 5 752 757 760 # CT-OH-HO + 1065 1 762 761 763 # CT-CT-OH + 1066 2 762 761 764 # CT-CT-HC + 1067 2 762 761 765 # CT-CT-HC + 1068 3 763 761 764 # HC-CT-OH + 1069 3 763 761 765 # HC-CT-OH + 1070 4 764 761 765 # HC-CT-HC + 1071 2 761 762 766 # CT-CT-HC + 1072 1 761 762 767 # CT-CT-OH + 1073 2 761 762 768 # CT-CT-HC + 1074 3 766 762 767 # HC-CT-OH + 1075 4 766 762 768 # HC-CT-HC + 1076 3 767 762 768 # HC-CT-OH + 1077 5 761 763 769 # CT-OH-HO + 1078 5 762 767 770 # CT-OH-HO + 1079 1 772 771 773 # CT-CT-OH + 1080 2 772 771 774 # CT-CT-HC + 1081 2 772 771 775 # CT-CT-HC + 1082 3 773 771 774 # HC-CT-OH + 1083 3 773 771 775 # HC-CT-OH + 1084 4 774 771 775 # HC-CT-HC + 1085 2 771 772 776 # CT-CT-HC + 1086 1 771 772 777 # CT-CT-OH + 1087 2 771 772 778 # CT-CT-HC + 1088 3 776 772 777 # HC-CT-OH + 1089 4 776 772 778 # HC-CT-HC + 1090 3 777 772 778 # HC-CT-OH + 1091 5 771 773 779 # CT-OH-HO + 1092 5 772 777 780 # CT-OH-HO + 1093 1 782 781 783 # CT-CT-OH + 1094 2 782 781 784 # CT-CT-HC + 1095 2 782 781 785 # CT-CT-HC + 1096 3 783 781 784 # HC-CT-OH + 1097 3 783 781 785 # HC-CT-OH + 1098 4 784 781 785 # HC-CT-HC + 1099 2 781 782 786 # CT-CT-HC + 1100 1 781 782 787 # CT-CT-OH + 1101 2 781 782 788 # CT-CT-HC + 1102 3 786 782 787 # HC-CT-OH + 1103 4 786 782 788 # HC-CT-HC + 1104 3 787 782 788 # HC-CT-OH + 1105 5 781 783 789 # CT-OH-HO + 1106 5 782 787 790 # CT-OH-HO + 1107 1 792 791 793 # CT-CT-OH + 1108 2 792 791 794 # CT-CT-HC + 1109 2 792 791 795 # CT-CT-HC + 1110 3 793 791 794 # HC-CT-OH + 1111 3 793 791 795 # HC-CT-OH + 1112 4 794 791 795 # HC-CT-HC + 1113 2 791 792 796 # CT-CT-HC + 1114 1 791 792 797 # CT-CT-OH + 1115 2 791 792 798 # CT-CT-HC + 1116 3 796 792 797 # HC-CT-OH + 1117 4 796 792 798 # HC-CT-HC + 1118 3 797 792 798 # HC-CT-OH + 1119 5 791 793 799 # CT-OH-HO + 1120 5 792 797 800 # CT-OH-HO + 1121 1 802 801 803 # CT-CT-OH + 1122 2 802 801 804 # CT-CT-HC + 1123 2 802 801 805 # CT-CT-HC + 1124 3 803 801 804 # HC-CT-OH + 1125 3 803 801 805 # HC-CT-OH + 1126 4 804 801 805 # HC-CT-HC + 1127 2 801 802 806 # CT-CT-HC + 1128 1 801 802 807 # CT-CT-OH + 1129 2 801 802 808 # CT-CT-HC + 1130 3 806 802 807 # HC-CT-OH + 1131 4 806 802 808 # HC-CT-HC + 1132 3 807 802 808 # HC-CT-OH + 1133 5 801 803 809 # CT-OH-HO + 1134 5 802 807 810 # CT-OH-HO + 1135 1 812 811 813 # CT-CT-OH + 1136 2 812 811 814 # CT-CT-HC + 1137 2 812 811 815 # CT-CT-HC + 1138 3 813 811 814 # HC-CT-OH + 1139 3 813 811 815 # HC-CT-OH + 1140 4 814 811 815 # HC-CT-HC + 1141 2 811 812 816 # CT-CT-HC + 1142 1 811 812 817 # CT-CT-OH + 1143 2 811 812 818 # CT-CT-HC + 1144 3 816 812 817 # HC-CT-OH + 1145 4 816 812 818 # HC-CT-HC + 1146 3 817 812 818 # HC-CT-OH + 1147 5 811 813 819 # CT-OH-HO + 1148 5 812 817 820 # CT-OH-HO + 1149 1 822 821 823 # CT-CT-OH + 1150 2 822 821 824 # CT-CT-HC + 1151 2 822 821 825 # CT-CT-HC + 1152 3 823 821 824 # HC-CT-OH + 1153 3 823 821 825 # HC-CT-OH + 1154 4 824 821 825 # HC-CT-HC + 1155 2 821 822 826 # CT-CT-HC + 1156 1 821 822 827 # CT-CT-OH + 1157 2 821 822 828 # CT-CT-HC + 1158 3 826 822 827 # HC-CT-OH + 1159 4 826 822 828 # HC-CT-HC + 1160 3 827 822 828 # HC-CT-OH + 1161 5 821 823 829 # CT-OH-HO + 1162 5 822 827 830 # CT-OH-HO + 1163 1 832 831 833 # CT-CT-OH + 1164 2 832 831 834 # CT-CT-HC + 1165 2 832 831 835 # CT-CT-HC + 1166 3 833 831 834 # HC-CT-OH + 1167 3 833 831 835 # HC-CT-OH + 1168 4 834 831 835 # HC-CT-HC + 1169 2 831 832 836 # CT-CT-HC + 1170 1 831 832 837 # CT-CT-OH + 1171 2 831 832 838 # CT-CT-HC + 1172 3 836 832 837 # HC-CT-OH + 1173 4 836 832 838 # HC-CT-HC + 1174 3 837 832 838 # HC-CT-OH + 1175 5 831 833 839 # CT-OH-HO + 1176 5 832 837 840 # CT-OH-HO + 1177 1 842 841 843 # CT-CT-OH + 1178 2 842 841 844 # CT-CT-HC + 1179 2 842 841 845 # CT-CT-HC + 1180 3 843 841 844 # HC-CT-OH + 1181 3 843 841 845 # HC-CT-OH + 1182 4 844 841 845 # HC-CT-HC + 1183 2 841 842 846 # CT-CT-HC + 1184 1 841 842 847 # CT-CT-OH + 1185 2 841 842 848 # CT-CT-HC + 1186 3 846 842 847 # HC-CT-OH + 1187 4 846 842 848 # HC-CT-HC + 1188 3 847 842 848 # HC-CT-OH + 1189 5 841 843 849 # CT-OH-HO + 1190 5 842 847 850 # CT-OH-HO + 1191 1 852 851 853 # CT-CT-OH + 1192 2 852 851 854 # CT-CT-HC + 1193 2 852 851 855 # CT-CT-HC + 1194 3 853 851 854 # HC-CT-OH + 1195 3 853 851 855 # HC-CT-OH + 1196 4 854 851 855 # HC-CT-HC + 1197 2 851 852 856 # CT-CT-HC + 1198 1 851 852 857 # CT-CT-OH + 1199 2 851 852 858 # CT-CT-HC + 1200 3 856 852 857 # HC-CT-OH + 1201 4 856 852 858 # HC-CT-HC + 1202 3 857 852 858 # HC-CT-OH + 1203 5 851 853 859 # CT-OH-HO + 1204 5 852 857 860 # CT-OH-HO + 1205 1 862 861 863 # CT-CT-OH + 1206 2 862 861 864 # CT-CT-HC + 1207 2 862 861 865 # CT-CT-HC + 1208 3 863 861 864 # HC-CT-OH + 1209 3 863 861 865 # HC-CT-OH + 1210 4 864 861 865 # HC-CT-HC + 1211 2 861 862 866 # CT-CT-HC + 1212 1 861 862 867 # CT-CT-OH + 1213 2 861 862 868 # CT-CT-HC + 1214 3 866 862 867 # HC-CT-OH + 1215 4 866 862 868 # HC-CT-HC + 1216 3 867 862 868 # HC-CT-OH + 1217 5 861 863 869 # CT-OH-HO + 1218 5 862 867 870 # CT-OH-HO + 1219 1 872 871 873 # CT-CT-OH + 1220 2 872 871 874 # CT-CT-HC + 1221 2 872 871 875 # CT-CT-HC + 1222 3 873 871 874 # HC-CT-OH + 1223 3 873 871 875 # HC-CT-OH + 1224 4 874 871 875 # HC-CT-HC + 1225 2 871 872 876 # CT-CT-HC + 1226 1 871 872 877 # CT-CT-OH + 1227 2 871 872 878 # CT-CT-HC + 1228 3 876 872 877 # HC-CT-OH + 1229 4 876 872 878 # HC-CT-HC + 1230 3 877 872 878 # HC-CT-OH + 1231 5 871 873 879 # CT-OH-HO + 1232 5 872 877 880 # CT-OH-HO + 1233 1 882 881 883 # CT-CT-OH + 1234 2 882 881 884 # CT-CT-HC + 1235 2 882 881 885 # CT-CT-HC + 1236 3 883 881 884 # HC-CT-OH + 1237 3 883 881 885 # HC-CT-OH + 1238 4 884 881 885 # HC-CT-HC + 1239 2 881 882 886 # CT-CT-HC + 1240 1 881 882 887 # CT-CT-OH + 1241 2 881 882 888 # CT-CT-HC + 1242 3 886 882 887 # HC-CT-OH + 1243 4 886 882 888 # HC-CT-HC + 1244 3 887 882 888 # HC-CT-OH + 1245 5 881 883 889 # CT-OH-HO + 1246 5 882 887 890 # CT-OH-HO + 1247 1 892 891 893 # CT-CT-OH + 1248 2 892 891 894 # CT-CT-HC + 1249 2 892 891 895 # CT-CT-HC + 1250 3 893 891 894 # HC-CT-OH + 1251 3 893 891 895 # HC-CT-OH + 1252 4 894 891 895 # HC-CT-HC + 1253 2 891 892 896 # CT-CT-HC + 1254 1 891 892 897 # CT-CT-OH + 1255 2 891 892 898 # CT-CT-HC + 1256 3 896 892 897 # HC-CT-OH + 1257 4 896 892 898 # HC-CT-HC + 1258 3 897 892 898 # HC-CT-OH + 1259 5 891 893 899 # CT-OH-HO + 1260 5 892 897 900 # CT-OH-HO + 1261 1 902 901 903 # CT-CT-OH + 1262 2 902 901 904 # CT-CT-HC + 1263 2 902 901 905 # CT-CT-HC + 1264 3 903 901 904 # HC-CT-OH + 1265 3 903 901 905 # HC-CT-OH + 1266 4 904 901 905 # HC-CT-HC + 1267 2 901 902 906 # CT-CT-HC + 1268 1 901 902 907 # CT-CT-OH + 1269 2 901 902 908 # CT-CT-HC + 1270 3 906 902 907 # HC-CT-OH + 1271 4 906 902 908 # HC-CT-HC + 1272 3 907 902 908 # HC-CT-OH + 1273 5 901 903 909 # CT-OH-HO + 1274 5 902 907 910 # CT-OH-HO + 1275 1 912 911 913 # CT-CT-OH + 1276 2 912 911 914 # CT-CT-HC + 1277 2 912 911 915 # CT-CT-HC + 1278 3 913 911 914 # HC-CT-OH + 1279 3 913 911 915 # HC-CT-OH + 1280 4 914 911 915 # HC-CT-HC + 1281 2 911 912 916 # CT-CT-HC + 1282 1 911 912 917 # CT-CT-OH + 1283 2 911 912 918 # CT-CT-HC + 1284 3 916 912 917 # HC-CT-OH + 1285 4 916 912 918 # HC-CT-HC + 1286 3 917 912 918 # HC-CT-OH + 1287 5 911 913 919 # CT-OH-HO + 1288 5 912 917 920 # CT-OH-HO + 1289 1 922 921 923 # CT-CT-OH + 1290 2 922 921 924 # CT-CT-HC + 1291 2 922 921 925 # CT-CT-HC + 1292 3 923 921 924 # HC-CT-OH + 1293 3 923 921 925 # HC-CT-OH + 1294 4 924 921 925 # HC-CT-HC + 1295 2 921 922 926 # CT-CT-HC + 1296 1 921 922 927 # CT-CT-OH + 1297 2 921 922 928 # CT-CT-HC + 1298 3 926 922 927 # HC-CT-OH + 1299 4 926 922 928 # HC-CT-HC + 1300 3 927 922 928 # HC-CT-OH + 1301 5 921 923 929 # CT-OH-HO + 1302 5 922 927 930 # CT-OH-HO + 1303 1 932 931 933 # CT-CT-OH + 1304 2 932 931 934 # CT-CT-HC + 1305 2 932 931 935 # CT-CT-HC + 1306 3 933 931 934 # HC-CT-OH + 1307 3 933 931 935 # HC-CT-OH + 1308 4 934 931 935 # HC-CT-HC + 1309 2 931 932 936 # CT-CT-HC + 1310 1 931 932 937 # CT-CT-OH + 1311 2 931 932 938 # CT-CT-HC + 1312 3 936 932 937 # HC-CT-OH + 1313 4 936 932 938 # HC-CT-HC + 1314 3 937 932 938 # HC-CT-OH + 1315 5 931 933 939 # CT-OH-HO + 1316 5 932 937 940 # CT-OH-HO + 1317 1 942 941 943 # CT-CT-OH + 1318 2 942 941 944 # CT-CT-HC + 1319 2 942 941 945 # CT-CT-HC + 1320 3 943 941 944 # HC-CT-OH + 1321 3 943 941 945 # HC-CT-OH + 1322 4 944 941 945 # HC-CT-HC + 1323 2 941 942 946 # CT-CT-HC + 1324 1 941 942 947 # CT-CT-OH + 1325 2 941 942 948 # CT-CT-HC + 1326 3 946 942 947 # HC-CT-OH + 1327 4 946 942 948 # HC-CT-HC + 1328 3 947 942 948 # HC-CT-OH + 1329 5 941 943 949 # CT-OH-HO + 1330 5 942 947 950 # CT-OH-HO + 1331 1 952 951 953 # CT-CT-OH + 1332 2 952 951 954 # CT-CT-HC + 1333 2 952 951 955 # CT-CT-HC + 1334 3 953 951 954 # HC-CT-OH + 1335 3 953 951 955 # HC-CT-OH + 1336 4 954 951 955 # HC-CT-HC + 1337 2 951 952 956 # CT-CT-HC + 1338 1 951 952 957 # CT-CT-OH + 1339 2 951 952 958 # CT-CT-HC + 1340 3 956 952 957 # HC-CT-OH + 1341 4 956 952 958 # HC-CT-HC + 1342 3 957 952 958 # HC-CT-OH + 1343 5 951 953 959 # CT-OH-HO + 1344 5 952 957 960 # CT-OH-HO + 1345 1 962 961 963 # CT-CT-OH + 1346 2 962 961 964 # CT-CT-HC + 1347 2 962 961 965 # CT-CT-HC + 1348 3 963 961 964 # HC-CT-OH + 1349 3 963 961 965 # HC-CT-OH + 1350 4 964 961 965 # HC-CT-HC + 1351 2 961 962 966 # CT-CT-HC + 1352 1 961 962 967 # CT-CT-OH + 1353 2 961 962 968 # CT-CT-HC + 1354 3 966 962 967 # HC-CT-OH + 1355 4 966 962 968 # HC-CT-HC + 1356 3 967 962 968 # HC-CT-OH + 1357 5 961 963 969 # CT-OH-HO + 1358 5 962 967 970 # CT-OH-HO + 1359 1 972 971 973 # CT-CT-OH + 1360 2 972 971 974 # CT-CT-HC + 1361 2 972 971 975 # CT-CT-HC + 1362 3 973 971 974 # HC-CT-OH + 1363 3 973 971 975 # HC-CT-OH + 1364 4 974 971 975 # HC-CT-HC + 1365 2 971 972 976 # CT-CT-HC + 1366 1 971 972 977 # CT-CT-OH + 1367 2 971 972 978 # CT-CT-HC + 1368 3 976 972 977 # HC-CT-OH + 1369 4 976 972 978 # HC-CT-HC + 1370 3 977 972 978 # HC-CT-OH + 1371 5 971 973 979 # CT-OH-HO + 1372 5 972 977 980 # CT-OH-HO + 1373 1 982 981 983 # CT-CT-OH + 1374 2 982 981 984 # CT-CT-HC + 1375 2 982 981 985 # CT-CT-HC + 1376 3 983 981 984 # HC-CT-OH + 1377 3 983 981 985 # HC-CT-OH + 1378 4 984 981 985 # HC-CT-HC + 1379 2 981 982 986 # CT-CT-HC + 1380 1 981 982 987 # CT-CT-OH + 1381 2 981 982 988 # CT-CT-HC + 1382 3 986 982 987 # HC-CT-OH + 1383 4 986 982 988 # HC-CT-HC + 1384 3 987 982 988 # HC-CT-OH + 1385 5 981 983 989 # CT-OH-HO + 1386 5 982 987 990 # CT-OH-HO + 1387 1 992 991 993 # CT-CT-OH + 1388 2 992 991 994 # CT-CT-HC + 1389 2 992 991 995 # CT-CT-HC + 1390 3 993 991 994 # HC-CT-OH + 1391 3 993 991 995 # HC-CT-OH + 1392 4 994 991 995 # HC-CT-HC + 1393 2 991 992 996 # CT-CT-HC + 1394 1 991 992 997 # CT-CT-OH + 1395 2 991 992 998 # CT-CT-HC + 1396 3 996 992 997 # HC-CT-OH + 1397 4 996 992 998 # HC-CT-HC + 1398 3 997 992 998 # HC-CT-OH + 1399 5 991 993 999 # CT-OH-HO + 1400 5 992 997 1000 # CT-OH-HO + 1401 1 1002 1001 1003 # CT-CT-OH + 1402 2 1002 1001 1004 # CT-CT-HC + 1403 2 1002 1001 1005 # CT-CT-HC + 1404 3 1003 1001 1004 # HC-CT-OH + 1405 3 1003 1001 1005 # HC-CT-OH + 1406 4 1004 1001 1005 # HC-CT-HC + 1407 2 1001 1002 1006 # CT-CT-HC + 1408 1 1001 1002 1007 # CT-CT-OH + 1409 2 1001 1002 1008 # CT-CT-HC + 1410 3 1006 1002 1007 # HC-CT-OH + 1411 4 1006 1002 1008 # HC-CT-HC + 1412 3 1007 1002 1008 # HC-CT-OH + 1413 5 1001 1003 1009 # CT-OH-HO + 1414 5 1002 1007 1010 # CT-OH-HO + 1415 1 1012 1011 1013 # CT-CT-OH + 1416 2 1012 1011 1014 # CT-CT-HC + 1417 2 1012 1011 1015 # CT-CT-HC + 1418 3 1013 1011 1014 # HC-CT-OH + 1419 3 1013 1011 1015 # HC-CT-OH + 1420 4 1014 1011 1015 # HC-CT-HC + 1421 2 1011 1012 1016 # CT-CT-HC + 1422 1 1011 1012 1017 # CT-CT-OH + 1423 2 1011 1012 1018 # CT-CT-HC + 1424 3 1016 1012 1017 # HC-CT-OH + 1425 4 1016 1012 1018 # HC-CT-HC + 1426 3 1017 1012 1018 # HC-CT-OH + 1427 5 1011 1013 1019 # CT-OH-HO + 1428 5 1012 1017 1020 # CT-OH-HO + 1429 1 1022 1021 1023 # CT-CT-OH + 1430 2 1022 1021 1024 # CT-CT-HC + 1431 2 1022 1021 1025 # CT-CT-HC + 1432 3 1023 1021 1024 # HC-CT-OH + 1433 3 1023 1021 1025 # HC-CT-OH + 1434 4 1024 1021 1025 # HC-CT-HC + 1435 2 1021 1022 1026 # CT-CT-HC + 1436 1 1021 1022 1027 # CT-CT-OH + 1437 2 1021 1022 1028 # CT-CT-HC + 1438 3 1026 1022 1027 # HC-CT-OH + 1439 4 1026 1022 1028 # HC-CT-HC + 1440 3 1027 1022 1028 # HC-CT-OH + 1441 5 1021 1023 1029 # CT-OH-HO + 1442 5 1022 1027 1030 # CT-OH-HO + 1443 1 1032 1031 1033 # CT-CT-OH + 1444 2 1032 1031 1034 # CT-CT-HC + 1445 2 1032 1031 1035 # CT-CT-HC + 1446 3 1033 1031 1034 # HC-CT-OH + 1447 3 1033 1031 1035 # HC-CT-OH + 1448 4 1034 1031 1035 # HC-CT-HC + 1449 2 1031 1032 1036 # CT-CT-HC + 1450 1 1031 1032 1037 # CT-CT-OH + 1451 2 1031 1032 1038 # CT-CT-HC + 1452 3 1036 1032 1037 # HC-CT-OH + 1453 4 1036 1032 1038 # HC-CT-HC + 1454 3 1037 1032 1038 # HC-CT-OH + 1455 5 1031 1033 1039 # CT-OH-HO + 1456 5 1032 1037 1040 # CT-OH-HO + 1457 1 1042 1041 1043 # CT-CT-OH + 1458 2 1042 1041 1044 # CT-CT-HC + 1459 2 1042 1041 1045 # CT-CT-HC + 1460 3 1043 1041 1044 # HC-CT-OH + 1461 3 1043 1041 1045 # HC-CT-OH + 1462 4 1044 1041 1045 # HC-CT-HC + 1463 2 1041 1042 1046 # CT-CT-HC + 1464 1 1041 1042 1047 # CT-CT-OH + 1465 2 1041 1042 1048 # CT-CT-HC + 1466 3 1046 1042 1047 # HC-CT-OH + 1467 4 1046 1042 1048 # HC-CT-HC + 1468 3 1047 1042 1048 # HC-CT-OH + 1469 5 1041 1043 1049 # CT-OH-HO + 1470 5 1042 1047 1050 # CT-OH-HO + 1471 1 1052 1051 1053 # CT-CT-OH + 1472 2 1052 1051 1054 # CT-CT-HC + 1473 2 1052 1051 1055 # CT-CT-HC + 1474 3 1053 1051 1054 # HC-CT-OH + 1475 3 1053 1051 1055 # HC-CT-OH + 1476 4 1054 1051 1055 # HC-CT-HC + 1477 2 1051 1052 1056 # CT-CT-HC + 1478 1 1051 1052 1057 # CT-CT-OH + 1479 2 1051 1052 1058 # CT-CT-HC + 1480 3 1056 1052 1057 # HC-CT-OH + 1481 4 1056 1052 1058 # HC-CT-HC + 1482 3 1057 1052 1058 # HC-CT-OH + 1483 5 1051 1053 1059 # CT-OH-HO + 1484 5 1052 1057 1060 # CT-OH-HO + 1485 1 1062 1061 1063 # CT-CT-OH + 1486 2 1062 1061 1064 # CT-CT-HC + 1487 2 1062 1061 1065 # CT-CT-HC + 1488 3 1063 1061 1064 # HC-CT-OH + 1489 3 1063 1061 1065 # HC-CT-OH + 1490 4 1064 1061 1065 # HC-CT-HC + 1491 2 1061 1062 1066 # CT-CT-HC + 1492 1 1061 1062 1067 # CT-CT-OH + 1493 2 1061 1062 1068 # CT-CT-HC + 1494 3 1066 1062 1067 # HC-CT-OH + 1495 4 1066 1062 1068 # HC-CT-HC + 1496 3 1067 1062 1068 # HC-CT-OH + 1497 5 1061 1063 1069 # CT-OH-HO + 1498 5 1062 1067 1070 # CT-OH-HO + 1499 1 1072 1071 1073 # CT-CT-OH + 1500 2 1072 1071 1074 # CT-CT-HC + 1501 2 1072 1071 1075 # CT-CT-HC + 1502 3 1073 1071 1074 # HC-CT-OH + 1503 3 1073 1071 1075 # HC-CT-OH + 1504 4 1074 1071 1075 # HC-CT-HC + 1505 2 1071 1072 1076 # CT-CT-HC + 1506 1 1071 1072 1077 # CT-CT-OH + 1507 2 1071 1072 1078 # CT-CT-HC + 1508 3 1076 1072 1077 # HC-CT-OH + 1509 4 1076 1072 1078 # HC-CT-HC + 1510 3 1077 1072 1078 # HC-CT-OH + 1511 5 1071 1073 1079 # CT-OH-HO + 1512 5 1072 1077 1080 # CT-OH-HO + 1513 1 1082 1081 1083 # CT-CT-OH + 1514 2 1082 1081 1084 # CT-CT-HC + 1515 2 1082 1081 1085 # CT-CT-HC + 1516 3 1083 1081 1084 # HC-CT-OH + 1517 3 1083 1081 1085 # HC-CT-OH + 1518 4 1084 1081 1085 # HC-CT-HC + 1519 2 1081 1082 1086 # CT-CT-HC + 1520 1 1081 1082 1087 # CT-CT-OH + 1521 2 1081 1082 1088 # CT-CT-HC + 1522 3 1086 1082 1087 # HC-CT-OH + 1523 4 1086 1082 1088 # HC-CT-HC + 1524 3 1087 1082 1088 # HC-CT-OH + 1525 5 1081 1083 1089 # CT-OH-HO + 1526 5 1082 1087 1090 # CT-OH-HO + 1527 1 1092 1091 1093 # CT-CT-OH + 1528 2 1092 1091 1094 # CT-CT-HC + 1529 2 1092 1091 1095 # CT-CT-HC + 1530 3 1093 1091 1094 # HC-CT-OH + 1531 3 1093 1091 1095 # HC-CT-OH + 1532 4 1094 1091 1095 # HC-CT-HC + 1533 2 1091 1092 1096 # CT-CT-HC + 1534 1 1091 1092 1097 # CT-CT-OH + 1535 2 1091 1092 1098 # CT-CT-HC + 1536 3 1096 1092 1097 # HC-CT-OH + 1537 4 1096 1092 1098 # HC-CT-HC + 1538 3 1097 1092 1098 # HC-CT-OH + 1539 5 1091 1093 1099 # CT-OH-HO + 1540 5 1092 1097 1100 # CT-OH-HO + 1541 1 1102 1101 1103 # CT-CT-OH + 1542 2 1102 1101 1104 # CT-CT-HC + 1543 2 1102 1101 1105 # CT-CT-HC + 1544 3 1103 1101 1104 # HC-CT-OH + 1545 3 1103 1101 1105 # HC-CT-OH + 1546 4 1104 1101 1105 # HC-CT-HC + 1547 2 1101 1102 1106 # CT-CT-HC + 1548 1 1101 1102 1107 # CT-CT-OH + 1549 2 1101 1102 1108 # CT-CT-HC + 1550 3 1106 1102 1107 # HC-CT-OH + 1551 4 1106 1102 1108 # HC-CT-HC + 1552 3 1107 1102 1108 # HC-CT-OH + 1553 5 1101 1103 1109 # CT-OH-HO + 1554 5 1102 1107 1110 # CT-OH-HO + 1555 1 1112 1111 1113 # CT-CT-OH + 1556 2 1112 1111 1114 # CT-CT-HC + 1557 2 1112 1111 1115 # CT-CT-HC + 1558 3 1113 1111 1114 # HC-CT-OH + 1559 3 1113 1111 1115 # HC-CT-OH + 1560 4 1114 1111 1115 # HC-CT-HC + 1561 2 1111 1112 1116 # CT-CT-HC + 1562 1 1111 1112 1117 # CT-CT-OH + 1563 2 1111 1112 1118 # CT-CT-HC + 1564 3 1116 1112 1117 # HC-CT-OH + 1565 4 1116 1112 1118 # HC-CT-HC + 1566 3 1117 1112 1118 # HC-CT-OH + 1567 5 1111 1113 1119 # CT-OH-HO + 1568 5 1112 1117 1120 # CT-OH-HO + 1569 1 1122 1121 1123 # CT-CT-OH + 1570 2 1122 1121 1124 # CT-CT-HC + 1571 2 1122 1121 1125 # CT-CT-HC + 1572 3 1123 1121 1124 # HC-CT-OH + 1573 3 1123 1121 1125 # HC-CT-OH + 1574 4 1124 1121 1125 # HC-CT-HC + 1575 2 1121 1122 1126 # CT-CT-HC + 1576 1 1121 1122 1127 # CT-CT-OH + 1577 2 1121 1122 1128 # CT-CT-HC + 1578 3 1126 1122 1127 # HC-CT-OH + 1579 4 1126 1122 1128 # HC-CT-HC + 1580 3 1127 1122 1128 # HC-CT-OH + 1581 5 1121 1123 1129 # CT-OH-HO + 1582 5 1122 1127 1130 # CT-OH-HO + 1583 1 1132 1131 1133 # CT-CT-OH + 1584 2 1132 1131 1134 # CT-CT-HC + 1585 2 1132 1131 1135 # CT-CT-HC + 1586 3 1133 1131 1134 # HC-CT-OH + 1587 3 1133 1131 1135 # HC-CT-OH + 1588 4 1134 1131 1135 # HC-CT-HC + 1589 2 1131 1132 1136 # CT-CT-HC + 1590 1 1131 1132 1137 # CT-CT-OH + 1591 2 1131 1132 1138 # CT-CT-HC + 1592 3 1136 1132 1137 # HC-CT-OH + 1593 4 1136 1132 1138 # HC-CT-HC + 1594 3 1137 1132 1138 # HC-CT-OH + 1595 5 1131 1133 1139 # CT-OH-HO + 1596 5 1132 1137 1140 # CT-OH-HO + 1597 1 1142 1141 1143 # CT-CT-OH + 1598 2 1142 1141 1144 # CT-CT-HC + 1599 2 1142 1141 1145 # CT-CT-HC + 1600 3 1143 1141 1144 # HC-CT-OH + 1601 3 1143 1141 1145 # HC-CT-OH + 1602 4 1144 1141 1145 # HC-CT-HC + 1603 2 1141 1142 1146 # CT-CT-HC + 1604 1 1141 1142 1147 # CT-CT-OH + 1605 2 1141 1142 1148 # CT-CT-HC + 1606 3 1146 1142 1147 # HC-CT-OH + 1607 4 1146 1142 1148 # HC-CT-HC + 1608 3 1147 1142 1148 # HC-CT-OH + 1609 5 1141 1143 1149 # CT-OH-HO + 1610 5 1142 1147 1150 # CT-OH-HO + 1611 1 1152 1151 1153 # CT-CT-OH + 1612 2 1152 1151 1154 # CT-CT-HC + 1613 2 1152 1151 1155 # CT-CT-HC + 1614 3 1153 1151 1154 # HC-CT-OH + 1615 3 1153 1151 1155 # HC-CT-OH + 1616 4 1154 1151 1155 # HC-CT-HC + 1617 2 1151 1152 1156 # CT-CT-HC + 1618 1 1151 1152 1157 # CT-CT-OH + 1619 2 1151 1152 1158 # CT-CT-HC + 1620 3 1156 1152 1157 # HC-CT-OH + 1621 4 1156 1152 1158 # HC-CT-HC + 1622 3 1157 1152 1158 # HC-CT-OH + 1623 5 1151 1153 1159 # CT-OH-HO + 1624 5 1152 1157 1160 # CT-OH-HO + 1625 1 1162 1161 1163 # CT-CT-OH + 1626 2 1162 1161 1164 # CT-CT-HC + 1627 2 1162 1161 1165 # CT-CT-HC + 1628 3 1163 1161 1164 # HC-CT-OH + 1629 3 1163 1161 1165 # HC-CT-OH + 1630 4 1164 1161 1165 # HC-CT-HC + 1631 2 1161 1162 1166 # CT-CT-HC + 1632 1 1161 1162 1167 # CT-CT-OH + 1633 2 1161 1162 1168 # CT-CT-HC + 1634 3 1166 1162 1167 # HC-CT-OH + 1635 4 1166 1162 1168 # HC-CT-HC + 1636 3 1167 1162 1168 # HC-CT-OH + 1637 5 1161 1163 1169 # CT-OH-HO + 1638 5 1162 1167 1170 # CT-OH-HO + 1639 1 1172 1171 1173 # CT-CT-OH + 1640 2 1172 1171 1174 # CT-CT-HC + 1641 2 1172 1171 1175 # CT-CT-HC + 1642 3 1173 1171 1174 # HC-CT-OH + 1643 3 1173 1171 1175 # HC-CT-OH + 1644 4 1174 1171 1175 # HC-CT-HC + 1645 2 1171 1172 1176 # CT-CT-HC + 1646 1 1171 1172 1177 # CT-CT-OH + 1647 2 1171 1172 1178 # CT-CT-HC + 1648 3 1176 1172 1177 # HC-CT-OH + 1649 4 1176 1172 1178 # HC-CT-HC + 1650 3 1177 1172 1178 # HC-CT-OH + 1651 5 1171 1173 1179 # CT-OH-HO + 1652 5 1172 1177 1180 # CT-OH-HO + 1653 1 1182 1181 1183 # CT-CT-OH + 1654 2 1182 1181 1184 # CT-CT-HC + 1655 2 1182 1181 1185 # CT-CT-HC + 1656 3 1183 1181 1184 # HC-CT-OH + 1657 3 1183 1181 1185 # HC-CT-OH + 1658 4 1184 1181 1185 # HC-CT-HC + 1659 2 1181 1182 1186 # CT-CT-HC + 1660 1 1181 1182 1187 # CT-CT-OH + 1661 2 1181 1182 1188 # CT-CT-HC + 1662 3 1186 1182 1187 # HC-CT-OH + 1663 4 1186 1182 1188 # HC-CT-HC + 1664 3 1187 1182 1188 # HC-CT-OH + 1665 5 1181 1183 1189 # CT-OH-HO + 1666 5 1182 1187 1190 # CT-OH-HO + 1667 1 1192 1191 1193 # CT-CT-OH + 1668 2 1192 1191 1194 # CT-CT-HC + 1669 2 1192 1191 1195 # CT-CT-HC + 1670 3 1193 1191 1194 # HC-CT-OH + 1671 3 1193 1191 1195 # HC-CT-OH + 1672 4 1194 1191 1195 # HC-CT-HC + 1673 2 1191 1192 1196 # CT-CT-HC + 1674 1 1191 1192 1197 # CT-CT-OH + 1675 2 1191 1192 1198 # CT-CT-HC + 1676 3 1196 1192 1197 # HC-CT-OH + 1677 4 1196 1192 1198 # HC-CT-HC + 1678 3 1197 1192 1198 # HC-CT-OH + 1679 5 1191 1193 1199 # CT-OH-HO + 1680 5 1192 1197 1200 # CT-OH-HO + 1681 1 1202 1201 1203 # CT-CT-OH + 1682 2 1202 1201 1204 # CT-CT-HC + 1683 2 1202 1201 1205 # CT-CT-HC + 1684 3 1203 1201 1204 # HC-CT-OH + 1685 3 1203 1201 1205 # HC-CT-OH + 1686 4 1204 1201 1205 # HC-CT-HC + 1687 2 1201 1202 1206 # CT-CT-HC + 1688 1 1201 1202 1207 # CT-CT-OH + 1689 2 1201 1202 1208 # CT-CT-HC + 1690 3 1206 1202 1207 # HC-CT-OH + 1691 4 1206 1202 1208 # HC-CT-HC + 1692 3 1207 1202 1208 # HC-CT-OH + 1693 5 1201 1203 1209 # CT-OH-HO + 1694 5 1202 1207 1210 # CT-OH-HO + 1695 1 1212 1211 1213 # CT-CT-OH + 1696 2 1212 1211 1214 # CT-CT-HC + 1697 2 1212 1211 1215 # CT-CT-HC + 1698 3 1213 1211 1214 # HC-CT-OH + 1699 3 1213 1211 1215 # HC-CT-OH + 1700 4 1214 1211 1215 # HC-CT-HC + 1701 2 1211 1212 1216 # CT-CT-HC + 1702 1 1211 1212 1217 # CT-CT-OH + 1703 2 1211 1212 1218 # CT-CT-HC + 1704 3 1216 1212 1217 # HC-CT-OH + 1705 4 1216 1212 1218 # HC-CT-HC + 1706 3 1217 1212 1218 # HC-CT-OH + 1707 5 1211 1213 1219 # CT-OH-HO + 1708 5 1212 1217 1220 # CT-OH-HO + 1709 1 1222 1221 1223 # CT-CT-OH + 1710 2 1222 1221 1224 # CT-CT-HC + 1711 2 1222 1221 1225 # CT-CT-HC + 1712 3 1223 1221 1224 # HC-CT-OH + 1713 3 1223 1221 1225 # HC-CT-OH + 1714 4 1224 1221 1225 # HC-CT-HC + 1715 2 1221 1222 1226 # CT-CT-HC + 1716 1 1221 1222 1227 # CT-CT-OH + 1717 2 1221 1222 1228 # CT-CT-HC + 1718 3 1226 1222 1227 # HC-CT-OH + 1719 4 1226 1222 1228 # HC-CT-HC + 1720 3 1227 1222 1228 # HC-CT-OH + 1721 5 1221 1223 1229 # CT-OH-HO + 1722 5 1222 1227 1230 # CT-OH-HO + 1723 1 1232 1231 1233 # CT-CT-OH + 1724 2 1232 1231 1234 # CT-CT-HC + 1725 2 1232 1231 1235 # CT-CT-HC + 1726 3 1233 1231 1234 # HC-CT-OH + 1727 3 1233 1231 1235 # HC-CT-OH + 1728 4 1234 1231 1235 # HC-CT-HC + 1729 2 1231 1232 1236 # CT-CT-HC + 1730 1 1231 1232 1237 # CT-CT-OH + 1731 2 1231 1232 1238 # CT-CT-HC + 1732 3 1236 1232 1237 # HC-CT-OH + 1733 4 1236 1232 1238 # HC-CT-HC + 1734 3 1237 1232 1238 # HC-CT-OH + 1735 5 1231 1233 1239 # CT-OH-HO + 1736 5 1232 1237 1240 # CT-OH-HO + 1737 1 1242 1241 1243 # CT-CT-OH + 1738 2 1242 1241 1244 # CT-CT-HC + 1739 2 1242 1241 1245 # CT-CT-HC + 1740 3 1243 1241 1244 # HC-CT-OH + 1741 3 1243 1241 1245 # HC-CT-OH + 1742 4 1244 1241 1245 # HC-CT-HC + 1743 2 1241 1242 1246 # CT-CT-HC + 1744 1 1241 1242 1247 # CT-CT-OH + 1745 2 1241 1242 1248 # CT-CT-HC + 1746 3 1246 1242 1247 # HC-CT-OH + 1747 4 1246 1242 1248 # HC-CT-HC + 1748 3 1247 1242 1248 # HC-CT-OH + 1749 5 1241 1243 1249 # CT-OH-HO + 1750 5 1242 1247 1250 # CT-OH-HO + 1751 1 1252 1251 1253 # CT-CT-OH + 1752 2 1252 1251 1254 # CT-CT-HC + 1753 2 1252 1251 1255 # CT-CT-HC + 1754 3 1253 1251 1254 # HC-CT-OH + 1755 3 1253 1251 1255 # HC-CT-OH + 1756 4 1254 1251 1255 # HC-CT-HC + 1757 2 1251 1252 1256 # CT-CT-HC + 1758 1 1251 1252 1257 # CT-CT-OH + 1759 2 1251 1252 1258 # CT-CT-HC + 1760 3 1256 1252 1257 # HC-CT-OH + 1761 4 1256 1252 1258 # HC-CT-HC + 1762 3 1257 1252 1258 # HC-CT-OH + 1763 5 1251 1253 1259 # CT-OH-HO + 1764 5 1252 1257 1260 # CT-OH-HO + 1765 1 1262 1261 1263 # CT-CT-OH + 1766 2 1262 1261 1264 # CT-CT-HC + 1767 2 1262 1261 1265 # CT-CT-HC + 1768 3 1263 1261 1264 # HC-CT-OH + 1769 3 1263 1261 1265 # HC-CT-OH + 1770 4 1264 1261 1265 # HC-CT-HC + 1771 2 1261 1262 1266 # CT-CT-HC + 1772 1 1261 1262 1267 # CT-CT-OH + 1773 2 1261 1262 1268 # CT-CT-HC + 1774 3 1266 1262 1267 # HC-CT-OH + 1775 4 1266 1262 1268 # HC-CT-HC + 1776 3 1267 1262 1268 # HC-CT-OH + 1777 5 1261 1263 1269 # CT-OH-HO + 1778 5 1262 1267 1270 # CT-OH-HO + 1779 1 1272 1271 1273 # CT-CT-OH + 1780 2 1272 1271 1274 # CT-CT-HC + 1781 2 1272 1271 1275 # CT-CT-HC + 1782 3 1273 1271 1274 # HC-CT-OH + 1783 3 1273 1271 1275 # HC-CT-OH + 1784 4 1274 1271 1275 # HC-CT-HC + 1785 2 1271 1272 1276 # CT-CT-HC + 1786 1 1271 1272 1277 # CT-CT-OH + 1787 2 1271 1272 1278 # CT-CT-HC + 1788 3 1276 1272 1277 # HC-CT-OH + 1789 4 1276 1272 1278 # HC-CT-HC + 1790 3 1277 1272 1278 # HC-CT-OH + 1791 5 1271 1273 1279 # CT-OH-HO + 1792 5 1272 1277 1280 # CT-OH-HO + 1793 1 1282 1281 1283 # CT-CT-OH + 1794 2 1282 1281 1284 # CT-CT-HC + 1795 2 1282 1281 1285 # CT-CT-HC + 1796 3 1283 1281 1284 # HC-CT-OH + 1797 3 1283 1281 1285 # HC-CT-OH + 1798 4 1284 1281 1285 # HC-CT-HC + 1799 2 1281 1282 1286 # CT-CT-HC + 1800 1 1281 1282 1287 # CT-CT-OH + 1801 2 1281 1282 1288 # CT-CT-HC + 1802 3 1286 1282 1287 # HC-CT-OH + 1803 4 1286 1282 1288 # HC-CT-HC + 1804 3 1287 1282 1288 # HC-CT-OH + 1805 5 1281 1283 1289 # CT-OH-HO + 1806 5 1282 1287 1290 # CT-OH-HO + 1807 1 1292 1291 1293 # CT-CT-OH + 1808 2 1292 1291 1294 # CT-CT-HC + 1809 2 1292 1291 1295 # CT-CT-HC + 1810 3 1293 1291 1294 # HC-CT-OH + 1811 3 1293 1291 1295 # HC-CT-OH + 1812 4 1294 1291 1295 # HC-CT-HC + 1813 2 1291 1292 1296 # CT-CT-HC + 1814 1 1291 1292 1297 # CT-CT-OH + 1815 2 1291 1292 1298 # CT-CT-HC + 1816 3 1296 1292 1297 # HC-CT-OH + 1817 4 1296 1292 1298 # HC-CT-HC + 1818 3 1297 1292 1298 # HC-CT-OH + 1819 5 1291 1293 1299 # CT-OH-HO + 1820 5 1292 1297 1300 # CT-OH-HO + 1821 1 1302 1301 1303 # CT-CT-OH + 1822 2 1302 1301 1304 # CT-CT-HC + 1823 2 1302 1301 1305 # CT-CT-HC + 1824 3 1303 1301 1304 # HC-CT-OH + 1825 3 1303 1301 1305 # HC-CT-OH + 1826 4 1304 1301 1305 # HC-CT-HC + 1827 2 1301 1302 1306 # CT-CT-HC + 1828 1 1301 1302 1307 # CT-CT-OH + 1829 2 1301 1302 1308 # CT-CT-HC + 1830 3 1306 1302 1307 # HC-CT-OH + 1831 4 1306 1302 1308 # HC-CT-HC + 1832 3 1307 1302 1308 # HC-CT-OH + 1833 5 1301 1303 1309 # CT-OH-HO + 1834 5 1302 1307 1310 # CT-OH-HO + 1835 1 1312 1311 1313 # CT-CT-OH + 1836 2 1312 1311 1314 # CT-CT-HC + 1837 2 1312 1311 1315 # CT-CT-HC + 1838 3 1313 1311 1314 # HC-CT-OH + 1839 3 1313 1311 1315 # HC-CT-OH + 1840 4 1314 1311 1315 # HC-CT-HC + 1841 2 1311 1312 1316 # CT-CT-HC + 1842 1 1311 1312 1317 # CT-CT-OH + 1843 2 1311 1312 1318 # CT-CT-HC + 1844 3 1316 1312 1317 # HC-CT-OH + 1845 4 1316 1312 1318 # HC-CT-HC + 1846 3 1317 1312 1318 # HC-CT-OH + 1847 5 1311 1313 1319 # CT-OH-HO + 1848 5 1312 1317 1320 # CT-OH-HO + 1849 1 1322 1321 1323 # CT-CT-OH + 1850 2 1322 1321 1324 # CT-CT-HC + 1851 2 1322 1321 1325 # CT-CT-HC + 1852 3 1323 1321 1324 # HC-CT-OH + 1853 3 1323 1321 1325 # HC-CT-OH + 1854 4 1324 1321 1325 # HC-CT-HC + 1855 2 1321 1322 1326 # CT-CT-HC + 1856 1 1321 1322 1327 # CT-CT-OH + 1857 2 1321 1322 1328 # CT-CT-HC + 1858 3 1326 1322 1327 # HC-CT-OH + 1859 4 1326 1322 1328 # HC-CT-HC + 1860 3 1327 1322 1328 # HC-CT-OH + 1861 5 1321 1323 1329 # CT-OH-HO + 1862 5 1322 1327 1330 # CT-OH-HO + 1863 1 1332 1331 1333 # CT-CT-OH + 1864 2 1332 1331 1334 # CT-CT-HC + 1865 2 1332 1331 1335 # CT-CT-HC + 1866 3 1333 1331 1334 # HC-CT-OH + 1867 3 1333 1331 1335 # HC-CT-OH + 1868 4 1334 1331 1335 # HC-CT-HC + 1869 2 1331 1332 1336 # CT-CT-HC + 1870 1 1331 1332 1337 # CT-CT-OH + 1871 2 1331 1332 1338 # CT-CT-HC + 1872 3 1336 1332 1337 # HC-CT-OH + 1873 4 1336 1332 1338 # HC-CT-HC + 1874 3 1337 1332 1338 # HC-CT-OH + 1875 5 1331 1333 1339 # CT-OH-HO + 1876 5 1332 1337 1340 # CT-OH-HO + 1877 1 1342 1341 1343 # CT-CT-OH + 1878 2 1342 1341 1344 # CT-CT-HC + 1879 2 1342 1341 1345 # CT-CT-HC + 1880 3 1343 1341 1344 # HC-CT-OH + 1881 3 1343 1341 1345 # HC-CT-OH + 1882 4 1344 1341 1345 # HC-CT-HC + 1883 2 1341 1342 1346 # CT-CT-HC + 1884 1 1341 1342 1347 # CT-CT-OH + 1885 2 1341 1342 1348 # CT-CT-HC + 1886 3 1346 1342 1347 # HC-CT-OH + 1887 4 1346 1342 1348 # HC-CT-HC + 1888 3 1347 1342 1348 # HC-CT-OH + 1889 5 1341 1343 1349 # CT-OH-HO + 1890 5 1342 1347 1350 # CT-OH-HO + 1891 1 1352 1351 1353 # CT-CT-OH + 1892 2 1352 1351 1354 # CT-CT-HC + 1893 2 1352 1351 1355 # CT-CT-HC + 1894 3 1353 1351 1354 # HC-CT-OH + 1895 3 1353 1351 1355 # HC-CT-OH + 1896 4 1354 1351 1355 # HC-CT-HC + 1897 2 1351 1352 1356 # CT-CT-HC + 1898 1 1351 1352 1357 # CT-CT-OH + 1899 2 1351 1352 1358 # CT-CT-HC + 1900 3 1356 1352 1357 # HC-CT-OH + 1901 4 1356 1352 1358 # HC-CT-HC + 1902 3 1357 1352 1358 # HC-CT-OH + 1903 5 1351 1353 1359 # CT-OH-HO + 1904 5 1352 1357 1360 # CT-OH-HO + 1905 1 1362 1361 1363 # CT-CT-OH + 1906 2 1362 1361 1364 # CT-CT-HC + 1907 2 1362 1361 1365 # CT-CT-HC + 1908 3 1363 1361 1364 # HC-CT-OH + 1909 3 1363 1361 1365 # HC-CT-OH + 1910 4 1364 1361 1365 # HC-CT-HC + 1911 2 1361 1362 1366 # CT-CT-HC + 1912 1 1361 1362 1367 # CT-CT-OH + 1913 2 1361 1362 1368 # CT-CT-HC + 1914 3 1366 1362 1367 # HC-CT-OH + 1915 4 1366 1362 1368 # HC-CT-HC + 1916 3 1367 1362 1368 # HC-CT-OH + 1917 5 1361 1363 1369 # CT-OH-HO + 1918 5 1362 1367 1370 # CT-OH-HO + 1919 1 1372 1371 1373 # CT-CT-OH + 1920 2 1372 1371 1374 # CT-CT-HC + 1921 2 1372 1371 1375 # CT-CT-HC + 1922 3 1373 1371 1374 # HC-CT-OH + 1923 3 1373 1371 1375 # HC-CT-OH + 1924 4 1374 1371 1375 # HC-CT-HC + 1925 2 1371 1372 1376 # CT-CT-HC + 1926 1 1371 1372 1377 # CT-CT-OH + 1927 2 1371 1372 1378 # CT-CT-HC + 1928 3 1376 1372 1377 # HC-CT-OH + 1929 4 1376 1372 1378 # HC-CT-HC + 1930 3 1377 1372 1378 # HC-CT-OH + 1931 5 1371 1373 1379 # CT-OH-HO + 1932 5 1372 1377 1380 # CT-OH-HO + 1933 1 1382 1381 1383 # CT-CT-OH + 1934 2 1382 1381 1384 # CT-CT-HC + 1935 2 1382 1381 1385 # CT-CT-HC + 1936 3 1383 1381 1384 # HC-CT-OH + 1937 3 1383 1381 1385 # HC-CT-OH + 1938 4 1384 1381 1385 # HC-CT-HC + 1939 2 1381 1382 1386 # CT-CT-HC + 1940 1 1381 1382 1387 # CT-CT-OH + 1941 2 1381 1382 1388 # CT-CT-HC + 1942 3 1386 1382 1387 # HC-CT-OH + 1943 4 1386 1382 1388 # HC-CT-HC + 1944 3 1387 1382 1388 # HC-CT-OH + 1945 5 1381 1383 1389 # CT-OH-HO + 1946 5 1382 1387 1390 # CT-OH-HO + 1947 1 1392 1391 1393 # CT-CT-OH + 1948 2 1392 1391 1394 # CT-CT-HC + 1949 2 1392 1391 1395 # CT-CT-HC + 1950 3 1393 1391 1394 # HC-CT-OH + 1951 3 1393 1391 1395 # HC-CT-OH + 1952 4 1394 1391 1395 # HC-CT-HC + 1953 2 1391 1392 1396 # CT-CT-HC + 1954 1 1391 1392 1397 # CT-CT-OH + 1955 2 1391 1392 1398 # CT-CT-HC + 1956 3 1396 1392 1397 # HC-CT-OH + 1957 4 1396 1392 1398 # HC-CT-HC + 1958 3 1397 1392 1398 # HC-CT-OH + 1959 5 1391 1393 1399 # CT-OH-HO + 1960 5 1392 1397 1400 # CT-OH-HO + 1961 1 1402 1401 1403 # CT-CT-OH + 1962 2 1402 1401 1404 # CT-CT-HC + 1963 2 1402 1401 1405 # CT-CT-HC + 1964 3 1403 1401 1404 # HC-CT-OH + 1965 3 1403 1401 1405 # HC-CT-OH + 1966 4 1404 1401 1405 # HC-CT-HC + 1967 2 1401 1402 1406 # CT-CT-HC + 1968 1 1401 1402 1407 # CT-CT-OH + 1969 2 1401 1402 1408 # CT-CT-HC + 1970 3 1406 1402 1407 # HC-CT-OH + 1971 4 1406 1402 1408 # HC-CT-HC + 1972 3 1407 1402 1408 # HC-CT-OH + 1973 5 1401 1403 1409 # CT-OH-HO + 1974 5 1402 1407 1410 # CT-OH-HO + 1975 1 1412 1411 1413 # CT-CT-OH + 1976 2 1412 1411 1414 # CT-CT-HC + 1977 2 1412 1411 1415 # CT-CT-HC + 1978 3 1413 1411 1414 # HC-CT-OH + 1979 3 1413 1411 1415 # HC-CT-OH + 1980 4 1414 1411 1415 # HC-CT-HC + 1981 2 1411 1412 1416 # CT-CT-HC + 1982 1 1411 1412 1417 # CT-CT-OH + 1983 2 1411 1412 1418 # CT-CT-HC + 1984 3 1416 1412 1417 # HC-CT-OH + 1985 4 1416 1412 1418 # HC-CT-HC + 1986 3 1417 1412 1418 # HC-CT-OH + 1987 5 1411 1413 1419 # CT-OH-HO + 1988 5 1412 1417 1420 # CT-OH-HO + 1989 1 1422 1421 1423 # CT-CT-OH + 1990 2 1422 1421 1424 # CT-CT-HC + 1991 2 1422 1421 1425 # CT-CT-HC + 1992 3 1423 1421 1424 # HC-CT-OH + 1993 3 1423 1421 1425 # HC-CT-OH + 1994 4 1424 1421 1425 # HC-CT-HC + 1995 2 1421 1422 1426 # CT-CT-HC + 1996 1 1421 1422 1427 # CT-CT-OH + 1997 2 1421 1422 1428 # CT-CT-HC + 1998 3 1426 1422 1427 # HC-CT-OH + 1999 4 1426 1422 1428 # HC-CT-HC + 2000 3 1427 1422 1428 # HC-CT-OH + 2001 5 1421 1423 1429 # CT-OH-HO + 2002 5 1422 1427 1430 # CT-OH-HO + 2003 1 1432 1431 1433 # CT-CT-OH + 2004 2 1432 1431 1434 # CT-CT-HC + 2005 2 1432 1431 1435 # CT-CT-HC + 2006 3 1433 1431 1434 # HC-CT-OH + 2007 3 1433 1431 1435 # HC-CT-OH + 2008 4 1434 1431 1435 # HC-CT-HC + 2009 2 1431 1432 1436 # CT-CT-HC + 2010 1 1431 1432 1437 # CT-CT-OH + 2011 2 1431 1432 1438 # CT-CT-HC + 2012 3 1436 1432 1437 # HC-CT-OH + 2013 4 1436 1432 1438 # HC-CT-HC + 2014 3 1437 1432 1438 # HC-CT-OH + 2015 5 1431 1433 1439 # CT-OH-HO + 2016 5 1432 1437 1440 # CT-OH-HO + 2017 1 1442 1441 1443 # CT-CT-OH + 2018 2 1442 1441 1444 # CT-CT-HC + 2019 2 1442 1441 1445 # CT-CT-HC + 2020 3 1443 1441 1444 # HC-CT-OH + 2021 3 1443 1441 1445 # HC-CT-OH + 2022 4 1444 1441 1445 # HC-CT-HC + 2023 2 1441 1442 1446 # CT-CT-HC + 2024 1 1441 1442 1447 # CT-CT-OH + 2025 2 1441 1442 1448 # CT-CT-HC + 2026 3 1446 1442 1447 # HC-CT-OH + 2027 4 1446 1442 1448 # HC-CT-HC + 2028 3 1447 1442 1448 # HC-CT-OH + 2029 5 1441 1443 1449 # CT-OH-HO + 2030 5 1442 1447 1450 # CT-OH-HO + 2031 1 1452 1451 1453 # CT-CT-OH + 2032 2 1452 1451 1454 # CT-CT-HC + 2033 2 1452 1451 1455 # CT-CT-HC + 2034 3 1453 1451 1454 # HC-CT-OH + 2035 3 1453 1451 1455 # HC-CT-OH + 2036 4 1454 1451 1455 # HC-CT-HC + 2037 2 1451 1452 1456 # CT-CT-HC + 2038 1 1451 1452 1457 # CT-CT-OH + 2039 2 1451 1452 1458 # CT-CT-HC + 2040 3 1456 1452 1457 # HC-CT-OH + 2041 4 1456 1452 1458 # HC-CT-HC + 2042 3 1457 1452 1458 # HC-CT-OH + 2043 5 1451 1453 1459 # CT-OH-HO + 2044 5 1452 1457 1460 # CT-OH-HO + 2045 1 1462 1461 1463 # CT-CT-OH + 2046 2 1462 1461 1464 # CT-CT-HC + 2047 2 1462 1461 1465 # CT-CT-HC + 2048 3 1463 1461 1464 # HC-CT-OH + 2049 3 1463 1461 1465 # HC-CT-OH + 2050 4 1464 1461 1465 # HC-CT-HC + 2051 2 1461 1462 1466 # CT-CT-HC + 2052 1 1461 1462 1467 # CT-CT-OH + 2053 2 1461 1462 1468 # CT-CT-HC + 2054 3 1466 1462 1467 # HC-CT-OH + 2055 4 1466 1462 1468 # HC-CT-HC + 2056 3 1467 1462 1468 # HC-CT-OH + 2057 5 1461 1463 1469 # CT-OH-HO + 2058 5 1462 1467 1470 # CT-OH-HO + 2059 1 1472 1471 1473 # CT-CT-OH + 2060 2 1472 1471 1474 # CT-CT-HC + 2061 2 1472 1471 1475 # CT-CT-HC + 2062 3 1473 1471 1474 # HC-CT-OH + 2063 3 1473 1471 1475 # HC-CT-OH + 2064 4 1474 1471 1475 # HC-CT-HC + 2065 2 1471 1472 1476 # CT-CT-HC + 2066 1 1471 1472 1477 # CT-CT-OH + 2067 2 1471 1472 1478 # CT-CT-HC + 2068 3 1476 1472 1477 # HC-CT-OH + 2069 4 1476 1472 1478 # HC-CT-HC + 2070 3 1477 1472 1478 # HC-CT-OH + 2071 5 1471 1473 1479 # CT-OH-HO + 2072 5 1472 1477 1480 # CT-OH-HO + 2073 1 1482 1481 1483 # CT-CT-OH + 2074 2 1482 1481 1484 # CT-CT-HC + 2075 2 1482 1481 1485 # CT-CT-HC + 2076 3 1483 1481 1484 # HC-CT-OH + 2077 3 1483 1481 1485 # HC-CT-OH + 2078 4 1484 1481 1485 # HC-CT-HC + 2079 2 1481 1482 1486 # CT-CT-HC + 2080 1 1481 1482 1487 # CT-CT-OH + 2081 2 1481 1482 1488 # CT-CT-HC + 2082 3 1486 1482 1487 # HC-CT-OH + 2083 4 1486 1482 1488 # HC-CT-HC + 2084 3 1487 1482 1488 # HC-CT-OH + 2085 5 1481 1483 1489 # CT-OH-HO + 2086 5 1482 1487 1490 # CT-OH-HO + 2087 1 1492 1491 1493 # CT-CT-OH + 2088 2 1492 1491 1494 # CT-CT-HC + 2089 2 1492 1491 1495 # CT-CT-HC + 2090 3 1493 1491 1494 # HC-CT-OH + 2091 3 1493 1491 1495 # HC-CT-OH + 2092 4 1494 1491 1495 # HC-CT-HC + 2093 2 1491 1492 1496 # CT-CT-HC + 2094 1 1491 1492 1497 # CT-CT-OH + 2095 2 1491 1492 1498 # CT-CT-HC + 2096 3 1496 1492 1497 # HC-CT-OH + 2097 4 1496 1492 1498 # HC-CT-HC + 2098 3 1497 1492 1498 # HC-CT-OH + 2099 5 1491 1493 1499 # CT-OH-HO + 2100 5 1492 1497 1500 # CT-OH-HO + 2101 1 1502 1501 1503 # CT-CT-OH + 2102 2 1502 1501 1504 # CT-CT-HC + 2103 2 1502 1501 1505 # CT-CT-HC + 2104 3 1503 1501 1504 # HC-CT-OH + 2105 3 1503 1501 1505 # HC-CT-OH + 2106 4 1504 1501 1505 # HC-CT-HC + 2107 2 1501 1502 1506 # CT-CT-HC + 2108 1 1501 1502 1507 # CT-CT-OH + 2109 2 1501 1502 1508 # CT-CT-HC + 2110 3 1506 1502 1507 # HC-CT-OH + 2111 4 1506 1502 1508 # HC-CT-HC + 2112 3 1507 1502 1508 # HC-CT-OH + 2113 5 1501 1503 1509 # CT-OH-HO + 2114 5 1502 1507 1510 # CT-OH-HO + 2115 1 1512 1511 1513 # CT-CT-OH + 2116 2 1512 1511 1514 # CT-CT-HC + 2117 2 1512 1511 1515 # CT-CT-HC + 2118 3 1513 1511 1514 # HC-CT-OH + 2119 3 1513 1511 1515 # HC-CT-OH + 2120 4 1514 1511 1515 # HC-CT-HC + 2121 2 1511 1512 1516 # CT-CT-HC + 2122 1 1511 1512 1517 # CT-CT-OH + 2123 2 1511 1512 1518 # CT-CT-HC + 2124 3 1516 1512 1517 # HC-CT-OH + 2125 4 1516 1512 1518 # HC-CT-HC + 2126 3 1517 1512 1518 # HC-CT-OH + 2127 5 1511 1513 1519 # CT-OH-HO + 2128 5 1512 1517 1520 # CT-OH-HO + 2129 1 1522 1521 1523 # CT-CT-OH + 2130 2 1522 1521 1524 # CT-CT-HC + 2131 2 1522 1521 1525 # CT-CT-HC + 2132 3 1523 1521 1524 # HC-CT-OH + 2133 3 1523 1521 1525 # HC-CT-OH + 2134 4 1524 1521 1525 # HC-CT-HC + 2135 2 1521 1522 1526 # CT-CT-HC + 2136 1 1521 1522 1527 # CT-CT-OH + 2137 2 1521 1522 1528 # CT-CT-HC + 2138 3 1526 1522 1527 # HC-CT-OH + 2139 4 1526 1522 1528 # HC-CT-HC + 2140 3 1527 1522 1528 # HC-CT-OH + 2141 5 1521 1523 1529 # CT-OH-HO + 2142 5 1522 1527 1530 # CT-OH-HO + 2143 1 1532 1531 1533 # CT-CT-OH + 2144 2 1532 1531 1534 # CT-CT-HC + 2145 2 1532 1531 1535 # CT-CT-HC + 2146 3 1533 1531 1534 # HC-CT-OH + 2147 3 1533 1531 1535 # HC-CT-OH + 2148 4 1534 1531 1535 # HC-CT-HC + 2149 2 1531 1532 1536 # CT-CT-HC + 2150 1 1531 1532 1537 # CT-CT-OH + 2151 2 1531 1532 1538 # CT-CT-HC + 2152 3 1536 1532 1537 # HC-CT-OH + 2153 4 1536 1532 1538 # HC-CT-HC + 2154 3 1537 1532 1538 # HC-CT-OH + 2155 5 1531 1533 1539 # CT-OH-HO + 2156 5 1532 1537 1540 # CT-OH-HO + 2157 1 1542 1541 1543 # CT-CT-OH + 2158 2 1542 1541 1544 # CT-CT-HC + 2159 2 1542 1541 1545 # CT-CT-HC + 2160 3 1543 1541 1544 # HC-CT-OH + 2161 3 1543 1541 1545 # HC-CT-OH + 2162 4 1544 1541 1545 # HC-CT-HC + 2163 2 1541 1542 1546 # CT-CT-HC + 2164 1 1541 1542 1547 # CT-CT-OH + 2165 2 1541 1542 1548 # CT-CT-HC + 2166 3 1546 1542 1547 # HC-CT-OH + 2167 4 1546 1542 1548 # HC-CT-HC + 2168 3 1547 1542 1548 # HC-CT-OH + 2169 5 1541 1543 1549 # CT-OH-HO + 2170 5 1542 1547 1550 # CT-OH-HO + 2171 1 1552 1551 1553 # CT-CT-OH + 2172 2 1552 1551 1554 # CT-CT-HC + 2173 2 1552 1551 1555 # CT-CT-HC + 2174 3 1553 1551 1554 # HC-CT-OH + 2175 3 1553 1551 1555 # HC-CT-OH + 2176 4 1554 1551 1555 # HC-CT-HC + 2177 2 1551 1552 1556 # CT-CT-HC + 2178 1 1551 1552 1557 # CT-CT-OH + 2179 2 1551 1552 1558 # CT-CT-HC + 2180 3 1556 1552 1557 # HC-CT-OH + 2181 4 1556 1552 1558 # HC-CT-HC + 2182 3 1557 1552 1558 # HC-CT-OH + 2183 5 1551 1553 1559 # CT-OH-HO + 2184 5 1552 1557 1560 # CT-OH-HO + 2185 1 1562 1561 1563 # CT-CT-OH + 2186 2 1562 1561 1564 # CT-CT-HC + 2187 2 1562 1561 1565 # CT-CT-HC + 2188 3 1563 1561 1564 # HC-CT-OH + 2189 3 1563 1561 1565 # HC-CT-OH + 2190 4 1564 1561 1565 # HC-CT-HC + 2191 2 1561 1562 1566 # CT-CT-HC + 2192 1 1561 1562 1567 # CT-CT-OH + 2193 2 1561 1562 1568 # CT-CT-HC + 2194 3 1566 1562 1567 # HC-CT-OH + 2195 4 1566 1562 1568 # HC-CT-HC + 2196 3 1567 1562 1568 # HC-CT-OH + 2197 5 1561 1563 1569 # CT-OH-HO + 2198 5 1562 1567 1570 # CT-OH-HO + 2199 1 1572 1571 1573 # CT-CT-OH + 2200 2 1572 1571 1574 # CT-CT-HC + 2201 2 1572 1571 1575 # CT-CT-HC + 2202 3 1573 1571 1574 # HC-CT-OH + 2203 3 1573 1571 1575 # HC-CT-OH + 2204 4 1574 1571 1575 # HC-CT-HC + 2205 2 1571 1572 1576 # CT-CT-HC + 2206 1 1571 1572 1577 # CT-CT-OH + 2207 2 1571 1572 1578 # CT-CT-HC + 2208 3 1576 1572 1577 # HC-CT-OH + 2209 4 1576 1572 1578 # HC-CT-HC + 2210 3 1577 1572 1578 # HC-CT-OH + 2211 5 1571 1573 1579 # CT-OH-HO + 2212 5 1572 1577 1580 # CT-OH-HO + 2213 1 1582 1581 1583 # CT-CT-OH + 2214 2 1582 1581 1584 # CT-CT-HC + 2215 2 1582 1581 1585 # CT-CT-HC + 2216 3 1583 1581 1584 # HC-CT-OH + 2217 3 1583 1581 1585 # HC-CT-OH + 2218 4 1584 1581 1585 # HC-CT-HC + 2219 2 1581 1582 1586 # CT-CT-HC + 2220 1 1581 1582 1587 # CT-CT-OH + 2221 2 1581 1582 1588 # CT-CT-HC + 2222 3 1586 1582 1587 # HC-CT-OH + 2223 4 1586 1582 1588 # HC-CT-HC + 2224 3 1587 1582 1588 # HC-CT-OH + 2225 5 1581 1583 1589 # CT-OH-HO + 2226 5 1582 1587 1590 # CT-OH-HO + 2227 1 1592 1591 1593 # CT-CT-OH + 2228 2 1592 1591 1594 # CT-CT-HC + 2229 2 1592 1591 1595 # CT-CT-HC + 2230 3 1593 1591 1594 # HC-CT-OH + 2231 3 1593 1591 1595 # HC-CT-OH + 2232 4 1594 1591 1595 # HC-CT-HC + 2233 2 1591 1592 1596 # CT-CT-HC + 2234 1 1591 1592 1597 # CT-CT-OH + 2235 2 1591 1592 1598 # CT-CT-HC + 2236 3 1596 1592 1597 # HC-CT-OH + 2237 4 1596 1592 1598 # HC-CT-HC + 2238 3 1597 1592 1598 # HC-CT-OH + 2239 5 1591 1593 1599 # CT-OH-HO + 2240 5 1592 1597 1600 # CT-OH-HO + 2241 1 1602 1601 1603 # CT-CT-OH + 2242 2 1602 1601 1604 # CT-CT-HC + 2243 2 1602 1601 1605 # CT-CT-HC + 2244 3 1603 1601 1604 # HC-CT-OH + 2245 3 1603 1601 1605 # HC-CT-OH + 2246 4 1604 1601 1605 # HC-CT-HC + 2247 2 1601 1602 1606 # CT-CT-HC + 2248 1 1601 1602 1607 # CT-CT-OH + 2249 2 1601 1602 1608 # CT-CT-HC + 2250 3 1606 1602 1607 # HC-CT-OH + 2251 4 1606 1602 1608 # HC-CT-HC + 2252 3 1607 1602 1608 # HC-CT-OH + 2253 5 1601 1603 1609 # CT-OH-HO + 2254 5 1602 1607 1610 # CT-OH-HO + 2255 1 1612 1611 1613 # CT-CT-OH + 2256 2 1612 1611 1614 # CT-CT-HC + 2257 2 1612 1611 1615 # CT-CT-HC + 2258 3 1613 1611 1614 # HC-CT-OH + 2259 3 1613 1611 1615 # HC-CT-OH + 2260 4 1614 1611 1615 # HC-CT-HC + 2261 2 1611 1612 1616 # CT-CT-HC + 2262 1 1611 1612 1617 # CT-CT-OH + 2263 2 1611 1612 1618 # CT-CT-HC + 2264 3 1616 1612 1617 # HC-CT-OH + 2265 4 1616 1612 1618 # HC-CT-HC + 2266 3 1617 1612 1618 # HC-CT-OH + 2267 5 1611 1613 1619 # CT-OH-HO + 2268 5 1612 1617 1620 # CT-OH-HO + 2269 1 1622 1621 1623 # CT-CT-OH + 2270 2 1622 1621 1624 # CT-CT-HC + 2271 2 1622 1621 1625 # CT-CT-HC + 2272 3 1623 1621 1624 # HC-CT-OH + 2273 3 1623 1621 1625 # HC-CT-OH + 2274 4 1624 1621 1625 # HC-CT-HC + 2275 2 1621 1622 1626 # CT-CT-HC + 2276 1 1621 1622 1627 # CT-CT-OH + 2277 2 1621 1622 1628 # CT-CT-HC + 2278 3 1626 1622 1627 # HC-CT-OH + 2279 4 1626 1622 1628 # HC-CT-HC + 2280 3 1627 1622 1628 # HC-CT-OH + 2281 5 1621 1623 1629 # CT-OH-HO + 2282 5 1622 1627 1630 # CT-OH-HO + 2283 1 1632 1631 1633 # CT-CT-OH + 2284 2 1632 1631 1634 # CT-CT-HC + 2285 2 1632 1631 1635 # CT-CT-HC + 2286 3 1633 1631 1634 # HC-CT-OH + 2287 3 1633 1631 1635 # HC-CT-OH + 2288 4 1634 1631 1635 # HC-CT-HC + 2289 2 1631 1632 1636 # CT-CT-HC + 2290 1 1631 1632 1637 # CT-CT-OH + 2291 2 1631 1632 1638 # CT-CT-HC + 2292 3 1636 1632 1637 # HC-CT-OH + 2293 4 1636 1632 1638 # HC-CT-HC + 2294 3 1637 1632 1638 # HC-CT-OH + 2295 5 1631 1633 1639 # CT-OH-HO + 2296 5 1632 1637 1640 # CT-OH-HO + 2297 1 1642 1641 1643 # CT-CT-OH + 2298 2 1642 1641 1644 # CT-CT-HC + 2299 2 1642 1641 1645 # CT-CT-HC + 2300 3 1643 1641 1644 # HC-CT-OH + 2301 3 1643 1641 1645 # HC-CT-OH + 2302 4 1644 1641 1645 # HC-CT-HC + 2303 2 1641 1642 1646 # CT-CT-HC + 2304 1 1641 1642 1647 # CT-CT-OH + 2305 2 1641 1642 1648 # CT-CT-HC + 2306 3 1646 1642 1647 # HC-CT-OH + 2307 4 1646 1642 1648 # HC-CT-HC + 2308 3 1647 1642 1648 # HC-CT-OH + 2309 5 1641 1643 1649 # CT-OH-HO + 2310 5 1642 1647 1650 # CT-OH-HO + 2311 1 1652 1651 1653 # CT-CT-OH + 2312 2 1652 1651 1654 # CT-CT-HC + 2313 2 1652 1651 1655 # CT-CT-HC + 2314 3 1653 1651 1654 # HC-CT-OH + 2315 3 1653 1651 1655 # HC-CT-OH + 2316 4 1654 1651 1655 # HC-CT-HC + 2317 2 1651 1652 1656 # CT-CT-HC + 2318 1 1651 1652 1657 # CT-CT-OH + 2319 2 1651 1652 1658 # CT-CT-HC + 2320 3 1656 1652 1657 # HC-CT-OH + 2321 4 1656 1652 1658 # HC-CT-HC + 2322 3 1657 1652 1658 # HC-CT-OH + 2323 5 1651 1653 1659 # CT-OH-HO + 2324 5 1652 1657 1660 # CT-OH-HO + 2325 1 1662 1661 1663 # CT-CT-OH + 2326 2 1662 1661 1664 # CT-CT-HC + 2327 2 1662 1661 1665 # CT-CT-HC + 2328 3 1663 1661 1664 # HC-CT-OH + 2329 3 1663 1661 1665 # HC-CT-OH + 2330 4 1664 1661 1665 # HC-CT-HC + 2331 2 1661 1662 1666 # CT-CT-HC + 2332 1 1661 1662 1667 # CT-CT-OH + 2333 2 1661 1662 1668 # CT-CT-HC + 2334 3 1666 1662 1667 # HC-CT-OH + 2335 4 1666 1662 1668 # HC-CT-HC + 2336 3 1667 1662 1668 # HC-CT-OH + 2337 5 1661 1663 1669 # CT-OH-HO + 2338 5 1662 1667 1670 # CT-OH-HO + 2339 1 1672 1671 1673 # CT-CT-OH + 2340 2 1672 1671 1674 # CT-CT-HC + 2341 2 1672 1671 1675 # CT-CT-HC + 2342 3 1673 1671 1674 # HC-CT-OH + 2343 3 1673 1671 1675 # HC-CT-OH + 2344 4 1674 1671 1675 # HC-CT-HC + 2345 2 1671 1672 1676 # CT-CT-HC + 2346 1 1671 1672 1677 # CT-CT-OH + 2347 2 1671 1672 1678 # CT-CT-HC + 2348 3 1676 1672 1677 # HC-CT-OH + 2349 4 1676 1672 1678 # HC-CT-HC + 2350 3 1677 1672 1678 # HC-CT-OH + 2351 5 1671 1673 1679 # CT-OH-HO + 2352 5 1672 1677 1680 # CT-OH-HO + 2353 1 1682 1681 1683 # CT-CT-OH + 2354 2 1682 1681 1684 # CT-CT-HC + 2355 2 1682 1681 1685 # CT-CT-HC + 2356 3 1683 1681 1684 # HC-CT-OH + 2357 3 1683 1681 1685 # HC-CT-OH + 2358 4 1684 1681 1685 # HC-CT-HC + 2359 2 1681 1682 1686 # CT-CT-HC + 2360 1 1681 1682 1687 # CT-CT-OH + 2361 2 1681 1682 1688 # CT-CT-HC + 2362 3 1686 1682 1687 # HC-CT-OH + 2363 4 1686 1682 1688 # HC-CT-HC + 2364 3 1687 1682 1688 # HC-CT-OH + 2365 5 1681 1683 1689 # CT-OH-HO + 2366 5 1682 1687 1690 # CT-OH-HO + 2367 1 1692 1691 1693 # CT-CT-OH + 2368 2 1692 1691 1694 # CT-CT-HC + 2369 2 1692 1691 1695 # CT-CT-HC + 2370 3 1693 1691 1694 # HC-CT-OH + 2371 3 1693 1691 1695 # HC-CT-OH + 2372 4 1694 1691 1695 # HC-CT-HC + 2373 2 1691 1692 1696 # CT-CT-HC + 2374 1 1691 1692 1697 # CT-CT-OH + 2375 2 1691 1692 1698 # CT-CT-HC + 2376 3 1696 1692 1697 # HC-CT-OH + 2377 4 1696 1692 1698 # HC-CT-HC + 2378 3 1697 1692 1698 # HC-CT-OH + 2379 5 1691 1693 1699 # CT-OH-HO + 2380 5 1692 1697 1700 # CT-OH-HO + 2381 1 1702 1701 1703 # CT-CT-OH + 2382 2 1702 1701 1704 # CT-CT-HC + 2383 2 1702 1701 1705 # CT-CT-HC + 2384 3 1703 1701 1704 # HC-CT-OH + 2385 3 1703 1701 1705 # HC-CT-OH + 2386 4 1704 1701 1705 # HC-CT-HC + 2387 2 1701 1702 1706 # CT-CT-HC + 2388 1 1701 1702 1707 # CT-CT-OH + 2389 2 1701 1702 1708 # CT-CT-HC + 2390 3 1706 1702 1707 # HC-CT-OH + 2391 4 1706 1702 1708 # HC-CT-HC + 2392 3 1707 1702 1708 # HC-CT-OH + 2393 5 1701 1703 1709 # CT-OH-HO + 2394 5 1702 1707 1710 # CT-OH-HO + 2395 1 1712 1711 1713 # CT-CT-OH + 2396 2 1712 1711 1714 # CT-CT-HC + 2397 2 1712 1711 1715 # CT-CT-HC + 2398 3 1713 1711 1714 # HC-CT-OH + 2399 3 1713 1711 1715 # HC-CT-OH + 2400 4 1714 1711 1715 # HC-CT-HC + 2401 2 1711 1712 1716 # CT-CT-HC + 2402 1 1711 1712 1717 # CT-CT-OH + 2403 2 1711 1712 1718 # CT-CT-HC + 2404 3 1716 1712 1717 # HC-CT-OH + 2405 4 1716 1712 1718 # HC-CT-HC + 2406 3 1717 1712 1718 # HC-CT-OH + 2407 5 1711 1713 1719 # CT-OH-HO + 2408 5 1712 1717 1720 # CT-OH-HO + 2409 1 1722 1721 1723 # CT-CT-OH + 2410 2 1722 1721 1724 # CT-CT-HC + 2411 2 1722 1721 1725 # CT-CT-HC + 2412 3 1723 1721 1724 # HC-CT-OH + 2413 3 1723 1721 1725 # HC-CT-OH + 2414 4 1724 1721 1725 # HC-CT-HC + 2415 2 1721 1722 1726 # CT-CT-HC + 2416 1 1721 1722 1727 # CT-CT-OH + 2417 2 1721 1722 1728 # CT-CT-HC + 2418 3 1726 1722 1727 # HC-CT-OH + 2419 4 1726 1722 1728 # HC-CT-HC + 2420 3 1727 1722 1728 # HC-CT-OH + 2421 5 1721 1723 1729 # CT-OH-HO + 2422 5 1722 1727 1730 # CT-OH-HO + 2423 1 1732 1731 1733 # CT-CT-OH + 2424 2 1732 1731 1734 # CT-CT-HC + 2425 2 1732 1731 1735 # CT-CT-HC + 2426 3 1733 1731 1734 # HC-CT-OH + 2427 3 1733 1731 1735 # HC-CT-OH + 2428 4 1734 1731 1735 # HC-CT-HC + 2429 2 1731 1732 1736 # CT-CT-HC + 2430 1 1731 1732 1737 # CT-CT-OH + 2431 2 1731 1732 1738 # CT-CT-HC + 2432 3 1736 1732 1737 # HC-CT-OH + 2433 4 1736 1732 1738 # HC-CT-HC + 2434 3 1737 1732 1738 # HC-CT-OH + 2435 5 1731 1733 1739 # CT-OH-HO + 2436 5 1732 1737 1740 # CT-OH-HO + 2437 1 1742 1741 1743 # CT-CT-OH + 2438 2 1742 1741 1744 # CT-CT-HC + 2439 2 1742 1741 1745 # CT-CT-HC + 2440 3 1743 1741 1744 # HC-CT-OH + 2441 3 1743 1741 1745 # HC-CT-OH + 2442 4 1744 1741 1745 # HC-CT-HC + 2443 2 1741 1742 1746 # CT-CT-HC + 2444 1 1741 1742 1747 # CT-CT-OH + 2445 2 1741 1742 1748 # CT-CT-HC + 2446 3 1746 1742 1747 # HC-CT-OH + 2447 4 1746 1742 1748 # HC-CT-HC + 2448 3 1747 1742 1748 # HC-CT-OH + 2449 5 1741 1743 1749 # CT-OH-HO + 2450 5 1742 1747 1750 # CT-OH-HO + 2451 1 1752 1751 1753 # CT-CT-OH + 2452 2 1752 1751 1754 # CT-CT-HC + 2453 2 1752 1751 1755 # CT-CT-HC + 2454 3 1753 1751 1754 # HC-CT-OH + 2455 3 1753 1751 1755 # HC-CT-OH + 2456 4 1754 1751 1755 # HC-CT-HC + 2457 2 1751 1752 1756 # CT-CT-HC + 2458 1 1751 1752 1757 # CT-CT-OH + 2459 2 1751 1752 1758 # CT-CT-HC + 2460 3 1756 1752 1757 # HC-CT-OH + 2461 4 1756 1752 1758 # HC-CT-HC + 2462 3 1757 1752 1758 # HC-CT-OH + 2463 5 1751 1753 1759 # CT-OH-HO + 2464 5 1752 1757 1760 # CT-OH-HO + 2465 1 1762 1761 1763 # CT-CT-OH + 2466 2 1762 1761 1764 # CT-CT-HC + 2467 2 1762 1761 1765 # CT-CT-HC + 2468 3 1763 1761 1764 # HC-CT-OH + 2469 3 1763 1761 1765 # HC-CT-OH + 2470 4 1764 1761 1765 # HC-CT-HC + 2471 2 1761 1762 1766 # CT-CT-HC + 2472 1 1761 1762 1767 # CT-CT-OH + 2473 2 1761 1762 1768 # CT-CT-HC + 2474 3 1766 1762 1767 # HC-CT-OH + 2475 4 1766 1762 1768 # HC-CT-HC + 2476 3 1767 1762 1768 # HC-CT-OH + 2477 5 1761 1763 1769 # CT-OH-HO + 2478 5 1762 1767 1770 # CT-OH-HO + 2479 1 1772 1771 1773 # CT-CT-OH + 2480 2 1772 1771 1774 # CT-CT-HC + 2481 2 1772 1771 1775 # CT-CT-HC + 2482 3 1773 1771 1774 # HC-CT-OH + 2483 3 1773 1771 1775 # HC-CT-OH + 2484 4 1774 1771 1775 # HC-CT-HC + 2485 2 1771 1772 1776 # CT-CT-HC + 2486 1 1771 1772 1777 # CT-CT-OH + 2487 2 1771 1772 1778 # CT-CT-HC + 2488 3 1776 1772 1777 # HC-CT-OH + 2489 4 1776 1772 1778 # HC-CT-HC + 2490 3 1777 1772 1778 # HC-CT-OH + 2491 5 1771 1773 1779 # CT-OH-HO + 2492 5 1772 1777 1780 # CT-OH-HO + 2493 1 1782 1781 1783 # CT-CT-OH + 2494 2 1782 1781 1784 # CT-CT-HC + 2495 2 1782 1781 1785 # CT-CT-HC + 2496 3 1783 1781 1784 # HC-CT-OH + 2497 3 1783 1781 1785 # HC-CT-OH + 2498 4 1784 1781 1785 # HC-CT-HC + 2499 2 1781 1782 1786 # CT-CT-HC + 2500 1 1781 1782 1787 # CT-CT-OH + 2501 2 1781 1782 1788 # CT-CT-HC + 2502 3 1786 1782 1787 # HC-CT-OH + 2503 4 1786 1782 1788 # HC-CT-HC + 2504 3 1787 1782 1788 # HC-CT-OH + 2505 5 1781 1783 1789 # CT-OH-HO + 2506 5 1782 1787 1790 # CT-OH-HO + 2507 1 1792 1791 1793 # CT-CT-OH + 2508 2 1792 1791 1794 # CT-CT-HC + 2509 2 1792 1791 1795 # CT-CT-HC + 2510 3 1793 1791 1794 # HC-CT-OH + 2511 3 1793 1791 1795 # HC-CT-OH + 2512 4 1794 1791 1795 # HC-CT-HC + 2513 2 1791 1792 1796 # CT-CT-HC + 2514 1 1791 1792 1797 # CT-CT-OH + 2515 2 1791 1792 1798 # CT-CT-HC + 2516 3 1796 1792 1797 # HC-CT-OH + 2517 4 1796 1792 1798 # HC-CT-HC + 2518 3 1797 1792 1798 # HC-CT-OH + 2519 5 1791 1793 1799 # CT-OH-HO + 2520 5 1792 1797 1800 # CT-OH-HO + 2521 1 1802 1801 1803 # CT-CT-OH + 2522 2 1802 1801 1804 # CT-CT-HC + 2523 2 1802 1801 1805 # CT-CT-HC + 2524 3 1803 1801 1804 # HC-CT-OH + 2525 3 1803 1801 1805 # HC-CT-OH + 2526 4 1804 1801 1805 # HC-CT-HC + 2527 2 1801 1802 1806 # CT-CT-HC + 2528 1 1801 1802 1807 # CT-CT-OH + 2529 2 1801 1802 1808 # CT-CT-HC + 2530 3 1806 1802 1807 # HC-CT-OH + 2531 4 1806 1802 1808 # HC-CT-HC + 2532 3 1807 1802 1808 # HC-CT-OH + 2533 5 1801 1803 1809 # CT-OH-HO + 2534 5 1802 1807 1810 # CT-OH-HO + 2535 1 1812 1811 1813 # CT-CT-OH + 2536 2 1812 1811 1814 # CT-CT-HC + 2537 2 1812 1811 1815 # CT-CT-HC + 2538 3 1813 1811 1814 # HC-CT-OH + 2539 3 1813 1811 1815 # HC-CT-OH + 2540 4 1814 1811 1815 # HC-CT-HC + 2541 2 1811 1812 1816 # CT-CT-HC + 2542 1 1811 1812 1817 # CT-CT-OH + 2543 2 1811 1812 1818 # CT-CT-HC + 2544 3 1816 1812 1817 # HC-CT-OH + 2545 4 1816 1812 1818 # HC-CT-HC + 2546 3 1817 1812 1818 # HC-CT-OH + 2547 5 1811 1813 1819 # CT-OH-HO + 2548 5 1812 1817 1820 # CT-OH-HO + 2549 1 1822 1821 1823 # CT-CT-OH + 2550 2 1822 1821 1824 # CT-CT-HC + 2551 2 1822 1821 1825 # CT-CT-HC + 2552 3 1823 1821 1824 # HC-CT-OH + 2553 3 1823 1821 1825 # HC-CT-OH + 2554 4 1824 1821 1825 # HC-CT-HC + 2555 2 1821 1822 1826 # CT-CT-HC + 2556 1 1821 1822 1827 # CT-CT-OH + 2557 2 1821 1822 1828 # CT-CT-HC + 2558 3 1826 1822 1827 # HC-CT-OH + 2559 4 1826 1822 1828 # HC-CT-HC + 2560 3 1827 1822 1828 # HC-CT-OH + 2561 5 1821 1823 1829 # CT-OH-HO + 2562 5 1822 1827 1830 # CT-OH-HO + 2563 1 1832 1831 1833 # CT-CT-OH + 2564 2 1832 1831 1834 # CT-CT-HC + 2565 2 1832 1831 1835 # CT-CT-HC + 2566 3 1833 1831 1834 # HC-CT-OH + 2567 3 1833 1831 1835 # HC-CT-OH + 2568 4 1834 1831 1835 # HC-CT-HC + 2569 2 1831 1832 1836 # CT-CT-HC + 2570 1 1831 1832 1837 # CT-CT-OH + 2571 2 1831 1832 1838 # CT-CT-HC + 2572 3 1836 1832 1837 # HC-CT-OH + 2573 4 1836 1832 1838 # HC-CT-HC + 2574 3 1837 1832 1838 # HC-CT-OH + 2575 5 1831 1833 1839 # CT-OH-HO + 2576 5 1832 1837 1840 # CT-OH-HO + 2577 1 1842 1841 1843 # CT-CT-OH + 2578 2 1842 1841 1844 # CT-CT-HC + 2579 2 1842 1841 1845 # CT-CT-HC + 2580 3 1843 1841 1844 # HC-CT-OH + 2581 3 1843 1841 1845 # HC-CT-OH + 2582 4 1844 1841 1845 # HC-CT-HC + 2583 2 1841 1842 1846 # CT-CT-HC + 2584 1 1841 1842 1847 # CT-CT-OH + 2585 2 1841 1842 1848 # CT-CT-HC + 2586 3 1846 1842 1847 # HC-CT-OH + 2587 4 1846 1842 1848 # HC-CT-HC + 2588 3 1847 1842 1848 # HC-CT-OH + 2589 5 1841 1843 1849 # CT-OH-HO + 2590 5 1842 1847 1850 # CT-OH-HO + 2591 1 1852 1851 1853 # CT-CT-OH + 2592 2 1852 1851 1854 # CT-CT-HC + 2593 2 1852 1851 1855 # CT-CT-HC + 2594 3 1853 1851 1854 # HC-CT-OH + 2595 3 1853 1851 1855 # HC-CT-OH + 2596 4 1854 1851 1855 # HC-CT-HC + 2597 2 1851 1852 1856 # CT-CT-HC + 2598 1 1851 1852 1857 # CT-CT-OH + 2599 2 1851 1852 1858 # CT-CT-HC + 2600 3 1856 1852 1857 # HC-CT-OH + 2601 4 1856 1852 1858 # HC-CT-HC + 2602 3 1857 1852 1858 # HC-CT-OH + 2603 5 1851 1853 1859 # CT-OH-HO + 2604 5 1852 1857 1860 # CT-OH-HO + 2605 1 1862 1861 1863 # CT-CT-OH + 2606 2 1862 1861 1864 # CT-CT-HC + 2607 2 1862 1861 1865 # CT-CT-HC + 2608 3 1863 1861 1864 # HC-CT-OH + 2609 3 1863 1861 1865 # HC-CT-OH + 2610 4 1864 1861 1865 # HC-CT-HC + 2611 2 1861 1862 1866 # CT-CT-HC + 2612 1 1861 1862 1867 # CT-CT-OH + 2613 2 1861 1862 1868 # CT-CT-HC + 2614 3 1866 1862 1867 # HC-CT-OH + 2615 4 1866 1862 1868 # HC-CT-HC + 2616 3 1867 1862 1868 # HC-CT-OH + 2617 5 1861 1863 1869 # CT-OH-HO + 2618 5 1862 1867 1870 # CT-OH-HO + 2619 1 1872 1871 1873 # CT-CT-OH + 2620 2 1872 1871 1874 # CT-CT-HC + 2621 2 1872 1871 1875 # CT-CT-HC + 2622 3 1873 1871 1874 # HC-CT-OH + 2623 3 1873 1871 1875 # HC-CT-OH + 2624 4 1874 1871 1875 # HC-CT-HC + 2625 2 1871 1872 1876 # CT-CT-HC + 2626 1 1871 1872 1877 # CT-CT-OH + 2627 2 1871 1872 1878 # CT-CT-HC + 2628 3 1876 1872 1877 # HC-CT-OH + 2629 4 1876 1872 1878 # HC-CT-HC + 2630 3 1877 1872 1878 # HC-CT-OH + 2631 5 1871 1873 1879 # CT-OH-HO + 2632 5 1872 1877 1880 # CT-OH-HO + 2633 1 1882 1881 1883 # CT-CT-OH + 2634 2 1882 1881 1884 # CT-CT-HC + 2635 2 1882 1881 1885 # CT-CT-HC + 2636 3 1883 1881 1884 # HC-CT-OH + 2637 3 1883 1881 1885 # HC-CT-OH + 2638 4 1884 1881 1885 # HC-CT-HC + 2639 2 1881 1882 1886 # CT-CT-HC + 2640 1 1881 1882 1887 # CT-CT-OH + 2641 2 1881 1882 1888 # CT-CT-HC + 2642 3 1886 1882 1887 # HC-CT-OH + 2643 4 1886 1882 1888 # HC-CT-HC + 2644 3 1887 1882 1888 # HC-CT-OH + 2645 5 1881 1883 1889 # CT-OH-HO + 2646 5 1882 1887 1890 # CT-OH-HO + 2647 1 1892 1891 1893 # CT-CT-OH + 2648 2 1892 1891 1894 # CT-CT-HC + 2649 2 1892 1891 1895 # CT-CT-HC + 2650 3 1893 1891 1894 # HC-CT-OH + 2651 3 1893 1891 1895 # HC-CT-OH + 2652 4 1894 1891 1895 # HC-CT-HC + 2653 2 1891 1892 1896 # CT-CT-HC + 2654 1 1891 1892 1897 # CT-CT-OH + 2655 2 1891 1892 1898 # CT-CT-HC + 2656 3 1896 1892 1897 # HC-CT-OH + 2657 4 1896 1892 1898 # HC-CT-HC + 2658 3 1897 1892 1898 # HC-CT-OH + 2659 5 1891 1893 1899 # CT-OH-HO + 2660 5 1892 1897 1900 # CT-OH-HO + 2661 1 1902 1901 1903 # CT-CT-OH + 2662 2 1902 1901 1904 # CT-CT-HC + 2663 2 1902 1901 1905 # CT-CT-HC + 2664 3 1903 1901 1904 # HC-CT-OH + 2665 3 1903 1901 1905 # HC-CT-OH + 2666 4 1904 1901 1905 # HC-CT-HC + 2667 2 1901 1902 1906 # CT-CT-HC + 2668 1 1901 1902 1907 # CT-CT-OH + 2669 2 1901 1902 1908 # CT-CT-HC + 2670 3 1906 1902 1907 # HC-CT-OH + 2671 4 1906 1902 1908 # HC-CT-HC + 2672 3 1907 1902 1908 # HC-CT-OH + 2673 5 1901 1903 1909 # CT-OH-HO + 2674 5 1902 1907 1910 # CT-OH-HO + 2675 1 1912 1911 1913 # CT-CT-OH + 2676 2 1912 1911 1914 # CT-CT-HC + 2677 2 1912 1911 1915 # CT-CT-HC + 2678 3 1913 1911 1914 # HC-CT-OH + 2679 3 1913 1911 1915 # HC-CT-OH + 2680 4 1914 1911 1915 # HC-CT-HC + 2681 2 1911 1912 1916 # CT-CT-HC + 2682 1 1911 1912 1917 # CT-CT-OH + 2683 2 1911 1912 1918 # CT-CT-HC + 2684 3 1916 1912 1917 # HC-CT-OH + 2685 4 1916 1912 1918 # HC-CT-HC + 2686 3 1917 1912 1918 # HC-CT-OH + 2687 5 1911 1913 1919 # CT-OH-HO + 2688 5 1912 1917 1920 # CT-OH-HO + 2689 1 1922 1921 1923 # CT-CT-OH + 2690 2 1922 1921 1924 # CT-CT-HC + 2691 2 1922 1921 1925 # CT-CT-HC + 2692 3 1923 1921 1924 # HC-CT-OH + 2693 3 1923 1921 1925 # HC-CT-OH + 2694 4 1924 1921 1925 # HC-CT-HC + 2695 2 1921 1922 1926 # CT-CT-HC + 2696 1 1921 1922 1927 # CT-CT-OH + 2697 2 1921 1922 1928 # CT-CT-HC + 2698 3 1926 1922 1927 # HC-CT-OH + 2699 4 1926 1922 1928 # HC-CT-HC + 2700 3 1927 1922 1928 # HC-CT-OH + 2701 5 1921 1923 1929 # CT-OH-HO + 2702 5 1922 1927 1930 # CT-OH-HO + 2703 1 1932 1931 1933 # CT-CT-OH + 2704 2 1932 1931 1934 # CT-CT-HC + 2705 2 1932 1931 1935 # CT-CT-HC + 2706 3 1933 1931 1934 # HC-CT-OH + 2707 3 1933 1931 1935 # HC-CT-OH + 2708 4 1934 1931 1935 # HC-CT-HC + 2709 2 1931 1932 1936 # CT-CT-HC + 2710 1 1931 1932 1937 # CT-CT-OH + 2711 2 1931 1932 1938 # CT-CT-HC + 2712 3 1936 1932 1937 # HC-CT-OH + 2713 4 1936 1932 1938 # HC-CT-HC + 2714 3 1937 1932 1938 # HC-CT-OH + 2715 5 1931 1933 1939 # CT-OH-HO + 2716 5 1932 1937 1940 # CT-OH-HO + 2717 1 1942 1941 1943 # CT-CT-OH + 2718 2 1942 1941 1944 # CT-CT-HC + 2719 2 1942 1941 1945 # CT-CT-HC + 2720 3 1943 1941 1944 # HC-CT-OH + 2721 3 1943 1941 1945 # HC-CT-OH + 2722 4 1944 1941 1945 # HC-CT-HC + 2723 2 1941 1942 1946 # CT-CT-HC + 2724 1 1941 1942 1947 # CT-CT-OH + 2725 2 1941 1942 1948 # CT-CT-HC + 2726 3 1946 1942 1947 # HC-CT-OH + 2727 4 1946 1942 1948 # HC-CT-HC + 2728 3 1947 1942 1948 # HC-CT-OH + 2729 5 1941 1943 1949 # CT-OH-HO + 2730 5 1942 1947 1950 # CT-OH-HO + 2731 1 1952 1951 1953 # CT-CT-OH + 2732 2 1952 1951 1954 # CT-CT-HC + 2733 2 1952 1951 1955 # CT-CT-HC + 2734 3 1953 1951 1954 # HC-CT-OH + 2735 3 1953 1951 1955 # HC-CT-OH + 2736 4 1954 1951 1955 # HC-CT-HC + 2737 2 1951 1952 1956 # CT-CT-HC + 2738 1 1951 1952 1957 # CT-CT-OH + 2739 2 1951 1952 1958 # CT-CT-HC + 2740 3 1956 1952 1957 # HC-CT-OH + 2741 4 1956 1952 1958 # HC-CT-HC + 2742 3 1957 1952 1958 # HC-CT-OH + 2743 5 1951 1953 1959 # CT-OH-HO + 2744 5 1952 1957 1960 # CT-OH-HO + 2745 1 1962 1961 1963 # CT-CT-OH + 2746 2 1962 1961 1964 # CT-CT-HC + 2747 2 1962 1961 1965 # CT-CT-HC + 2748 3 1963 1961 1964 # HC-CT-OH + 2749 3 1963 1961 1965 # HC-CT-OH + 2750 4 1964 1961 1965 # HC-CT-HC + 2751 2 1961 1962 1966 # CT-CT-HC + 2752 1 1961 1962 1967 # CT-CT-OH + 2753 2 1961 1962 1968 # CT-CT-HC + 2754 3 1966 1962 1967 # HC-CT-OH + 2755 4 1966 1962 1968 # HC-CT-HC + 2756 3 1967 1962 1968 # HC-CT-OH + 2757 5 1961 1963 1969 # CT-OH-HO + 2758 5 1962 1967 1970 # CT-OH-HO + 2759 1 1972 1971 1973 # CT-CT-OH + 2760 2 1972 1971 1974 # CT-CT-HC + 2761 2 1972 1971 1975 # CT-CT-HC + 2762 3 1973 1971 1974 # HC-CT-OH + 2763 3 1973 1971 1975 # HC-CT-OH + 2764 4 1974 1971 1975 # HC-CT-HC + 2765 2 1971 1972 1976 # CT-CT-HC + 2766 1 1971 1972 1977 # CT-CT-OH + 2767 2 1971 1972 1978 # CT-CT-HC + 2768 3 1976 1972 1977 # HC-CT-OH + 2769 4 1976 1972 1978 # HC-CT-HC + 2770 3 1977 1972 1978 # HC-CT-OH + 2771 5 1971 1973 1979 # CT-OH-HO + 2772 5 1972 1977 1980 # CT-OH-HO + 2773 1 1982 1981 1983 # CT-CT-OH + 2774 2 1982 1981 1984 # CT-CT-HC + 2775 2 1982 1981 1985 # CT-CT-HC + 2776 3 1983 1981 1984 # HC-CT-OH + 2777 3 1983 1981 1985 # HC-CT-OH + 2778 4 1984 1981 1985 # HC-CT-HC + 2779 2 1981 1982 1986 # CT-CT-HC + 2780 1 1981 1982 1987 # CT-CT-OH + 2781 2 1981 1982 1988 # CT-CT-HC + 2782 3 1986 1982 1987 # HC-CT-OH + 2783 4 1986 1982 1988 # HC-CT-HC + 2784 3 1987 1982 1988 # HC-CT-OH + 2785 5 1981 1983 1989 # CT-OH-HO + 2786 5 1982 1987 1990 # CT-OH-HO + 2787 1 1992 1991 1993 # CT-CT-OH + 2788 2 1992 1991 1994 # CT-CT-HC + 2789 2 1992 1991 1995 # CT-CT-HC + 2790 3 1993 1991 1994 # HC-CT-OH + 2791 3 1993 1991 1995 # HC-CT-OH + 2792 4 1994 1991 1995 # HC-CT-HC + 2793 2 1991 1992 1996 # CT-CT-HC + 2794 1 1991 1992 1997 # CT-CT-OH + 2795 2 1991 1992 1998 # CT-CT-HC + 2796 3 1996 1992 1997 # HC-CT-OH + 2797 4 1996 1992 1998 # HC-CT-HC + 2798 3 1997 1992 1998 # HC-CT-OH + 2799 5 1991 1993 1999 # CT-OH-HO + 2800 5 1992 1997 2000 # CT-OH-HO + +Dihedrals + + 1 1 6 2 1 3 # HC-CT-CT-OH + 2 2 6 2 1 4 # HC-CT-CT-HC + 3 2 6 2 1 5 # HC-CT-CT-HC + 4 3 7 2 1 3 # OH-CT-CT-OH + 5 1 7 2 1 4 # HC-CT-CT-OH + 6 1 7 2 1 5 # HC-CT-CT-OH + 7 1 8 2 1 3 # HC-CT-CT-OH + 8 2 8 2 1 4 # HC-CT-CT-HC + 9 2 8 2 1 5 # HC-CT-CT-HC + 10 4 9 3 1 2 # CT-CT-OH-HO + 11 5 9 3 1 4 # HC-CT-OH-HO + 12 5 9 3 1 5 # HC-CT-OH-HO + 13 4 10 7 2 1 # CT-CT-OH-HO + 14 5 10 7 2 6 # HC-CT-OH-HO + 15 5 10 7 2 8 # HC-CT-OH-HO + 16 1 16 12 11 13 # HC-CT-CT-OH + 17 2 16 12 11 14 # HC-CT-CT-HC + 18 2 16 12 11 15 # HC-CT-CT-HC + 19 3 17 12 11 13 # OH-CT-CT-OH + 20 1 17 12 11 14 # HC-CT-CT-OH + 21 1 17 12 11 15 # HC-CT-CT-OH + 22 1 18 12 11 13 # HC-CT-CT-OH + 23 2 18 12 11 14 # HC-CT-CT-HC + 24 2 18 12 11 15 # HC-CT-CT-HC + 25 4 19 13 11 12 # CT-CT-OH-HO + 26 5 19 13 11 14 # HC-CT-OH-HO + 27 5 19 13 11 15 # HC-CT-OH-HO + 28 4 20 17 12 11 # CT-CT-OH-HO + 29 5 20 17 12 16 # HC-CT-OH-HO + 30 5 20 17 12 18 # HC-CT-OH-HO + 31 1 26 22 21 23 # HC-CT-CT-OH + 32 2 26 22 21 24 # HC-CT-CT-HC + 33 2 26 22 21 25 # HC-CT-CT-HC + 34 3 27 22 21 23 # OH-CT-CT-OH + 35 1 27 22 21 24 # HC-CT-CT-OH + 36 1 27 22 21 25 # HC-CT-CT-OH + 37 1 28 22 21 23 # HC-CT-CT-OH + 38 2 28 22 21 24 # HC-CT-CT-HC + 39 2 28 22 21 25 # HC-CT-CT-HC + 40 4 29 23 21 22 # CT-CT-OH-HO + 41 5 29 23 21 24 # HC-CT-OH-HO + 42 5 29 23 21 25 # HC-CT-OH-HO + 43 4 30 27 22 21 # CT-CT-OH-HO + 44 5 30 27 22 26 # HC-CT-OH-HO + 45 5 30 27 22 28 # HC-CT-OH-HO + 46 1 36 32 31 33 # HC-CT-CT-OH + 47 2 36 32 31 34 # HC-CT-CT-HC + 48 2 36 32 31 35 # HC-CT-CT-HC + 49 3 37 32 31 33 # OH-CT-CT-OH + 50 1 37 32 31 34 # HC-CT-CT-OH + 51 1 37 32 31 35 # HC-CT-CT-OH + 52 1 38 32 31 33 # HC-CT-CT-OH + 53 2 38 32 31 34 # HC-CT-CT-HC + 54 2 38 32 31 35 # HC-CT-CT-HC + 55 4 39 33 31 32 # CT-CT-OH-HO + 56 5 39 33 31 34 # HC-CT-OH-HO + 57 5 39 33 31 35 # HC-CT-OH-HO + 58 4 40 37 32 31 # CT-CT-OH-HO + 59 5 40 37 32 36 # HC-CT-OH-HO + 60 5 40 37 32 38 # HC-CT-OH-HO + 61 1 46 42 41 43 # HC-CT-CT-OH + 62 2 46 42 41 44 # HC-CT-CT-HC + 63 2 46 42 41 45 # HC-CT-CT-HC + 64 3 47 42 41 43 # OH-CT-CT-OH + 65 1 47 42 41 44 # HC-CT-CT-OH + 66 1 47 42 41 45 # HC-CT-CT-OH + 67 1 48 42 41 43 # HC-CT-CT-OH + 68 2 48 42 41 44 # HC-CT-CT-HC + 69 2 48 42 41 45 # HC-CT-CT-HC + 70 4 49 43 41 42 # CT-CT-OH-HO + 71 5 49 43 41 44 # HC-CT-OH-HO + 72 5 49 43 41 45 # HC-CT-OH-HO + 73 4 50 47 42 41 # CT-CT-OH-HO + 74 5 50 47 42 46 # HC-CT-OH-HO + 75 5 50 47 42 48 # HC-CT-OH-HO + 76 1 56 52 51 53 # HC-CT-CT-OH + 77 2 56 52 51 54 # HC-CT-CT-HC + 78 2 56 52 51 55 # HC-CT-CT-HC + 79 3 57 52 51 53 # OH-CT-CT-OH + 80 1 57 52 51 54 # HC-CT-CT-OH + 81 1 57 52 51 55 # HC-CT-CT-OH + 82 1 58 52 51 53 # HC-CT-CT-OH + 83 2 58 52 51 54 # HC-CT-CT-HC + 84 2 58 52 51 55 # HC-CT-CT-HC + 85 4 59 53 51 52 # CT-CT-OH-HO + 86 5 59 53 51 54 # HC-CT-OH-HO + 87 5 59 53 51 55 # HC-CT-OH-HO + 88 4 60 57 52 51 # CT-CT-OH-HO + 89 5 60 57 52 56 # HC-CT-OH-HO + 90 5 60 57 52 58 # HC-CT-OH-HO + 91 1 66 62 61 63 # HC-CT-CT-OH + 92 2 66 62 61 64 # HC-CT-CT-HC + 93 2 66 62 61 65 # HC-CT-CT-HC + 94 3 67 62 61 63 # OH-CT-CT-OH + 95 1 67 62 61 64 # HC-CT-CT-OH + 96 1 67 62 61 65 # HC-CT-CT-OH + 97 1 68 62 61 63 # HC-CT-CT-OH + 98 2 68 62 61 64 # HC-CT-CT-HC + 99 2 68 62 61 65 # HC-CT-CT-HC + 100 4 69 63 61 62 # CT-CT-OH-HO + 101 5 69 63 61 64 # HC-CT-OH-HO + 102 5 69 63 61 65 # HC-CT-OH-HO + 103 4 70 67 62 61 # CT-CT-OH-HO + 104 5 70 67 62 66 # HC-CT-OH-HO + 105 5 70 67 62 68 # HC-CT-OH-HO + 106 1 76 72 71 73 # HC-CT-CT-OH + 107 2 76 72 71 74 # HC-CT-CT-HC + 108 2 76 72 71 75 # HC-CT-CT-HC + 109 3 77 72 71 73 # OH-CT-CT-OH + 110 1 77 72 71 74 # HC-CT-CT-OH + 111 1 77 72 71 75 # HC-CT-CT-OH + 112 1 78 72 71 73 # HC-CT-CT-OH + 113 2 78 72 71 74 # HC-CT-CT-HC + 114 2 78 72 71 75 # HC-CT-CT-HC + 115 4 79 73 71 72 # CT-CT-OH-HO + 116 5 79 73 71 74 # HC-CT-OH-HO + 117 5 79 73 71 75 # HC-CT-OH-HO + 118 4 80 77 72 71 # CT-CT-OH-HO + 119 5 80 77 72 76 # HC-CT-OH-HO + 120 5 80 77 72 78 # HC-CT-OH-HO + 121 1 86 82 81 83 # HC-CT-CT-OH + 122 2 86 82 81 84 # HC-CT-CT-HC + 123 2 86 82 81 85 # HC-CT-CT-HC + 124 3 87 82 81 83 # OH-CT-CT-OH + 125 1 87 82 81 84 # HC-CT-CT-OH + 126 1 87 82 81 85 # HC-CT-CT-OH + 127 1 88 82 81 83 # HC-CT-CT-OH + 128 2 88 82 81 84 # HC-CT-CT-HC + 129 2 88 82 81 85 # HC-CT-CT-HC + 130 4 89 83 81 82 # CT-CT-OH-HO + 131 5 89 83 81 84 # HC-CT-OH-HO + 132 5 89 83 81 85 # HC-CT-OH-HO + 133 4 90 87 82 81 # CT-CT-OH-HO + 134 5 90 87 82 86 # HC-CT-OH-HO + 135 5 90 87 82 88 # HC-CT-OH-HO + 136 1 96 92 91 93 # HC-CT-CT-OH + 137 2 96 92 91 94 # HC-CT-CT-HC + 138 2 96 92 91 95 # HC-CT-CT-HC + 139 3 97 92 91 93 # OH-CT-CT-OH + 140 1 97 92 91 94 # HC-CT-CT-OH + 141 1 97 92 91 95 # HC-CT-CT-OH + 142 1 98 92 91 93 # HC-CT-CT-OH + 143 2 98 92 91 94 # HC-CT-CT-HC + 144 2 98 92 91 95 # HC-CT-CT-HC + 145 4 99 93 91 92 # CT-CT-OH-HO + 146 5 99 93 91 94 # HC-CT-OH-HO + 147 5 99 93 91 95 # HC-CT-OH-HO + 148 4 100 97 92 91 # CT-CT-OH-HO + 149 5 100 97 92 96 # HC-CT-OH-HO + 150 5 100 97 92 98 # HC-CT-OH-HO + 151 1 106 102 101 103 # HC-CT-CT-OH + 152 2 106 102 101 104 # HC-CT-CT-HC + 153 2 106 102 101 105 # HC-CT-CT-HC + 154 3 107 102 101 103 # OH-CT-CT-OH + 155 1 107 102 101 104 # HC-CT-CT-OH + 156 1 107 102 101 105 # HC-CT-CT-OH + 157 1 108 102 101 103 # HC-CT-CT-OH + 158 2 108 102 101 104 # HC-CT-CT-HC + 159 2 108 102 101 105 # HC-CT-CT-HC + 160 4 109 103 101 102 # CT-CT-OH-HO + 161 5 109 103 101 104 # HC-CT-OH-HO + 162 5 109 103 101 105 # HC-CT-OH-HO + 163 4 110 107 102 101 # CT-CT-OH-HO + 164 5 110 107 102 106 # HC-CT-OH-HO + 165 5 110 107 102 108 # HC-CT-OH-HO + 166 1 116 112 111 113 # HC-CT-CT-OH + 167 2 116 112 111 114 # HC-CT-CT-HC + 168 2 116 112 111 115 # HC-CT-CT-HC + 169 3 117 112 111 113 # OH-CT-CT-OH + 170 1 117 112 111 114 # HC-CT-CT-OH + 171 1 117 112 111 115 # HC-CT-CT-OH + 172 1 118 112 111 113 # HC-CT-CT-OH + 173 2 118 112 111 114 # HC-CT-CT-HC + 174 2 118 112 111 115 # HC-CT-CT-HC + 175 4 119 113 111 112 # CT-CT-OH-HO + 176 5 119 113 111 114 # HC-CT-OH-HO + 177 5 119 113 111 115 # HC-CT-OH-HO + 178 4 120 117 112 111 # CT-CT-OH-HO + 179 5 120 117 112 116 # HC-CT-OH-HO + 180 5 120 117 112 118 # HC-CT-OH-HO + 181 1 126 122 121 123 # HC-CT-CT-OH + 182 2 126 122 121 124 # HC-CT-CT-HC + 183 2 126 122 121 125 # HC-CT-CT-HC + 184 3 127 122 121 123 # OH-CT-CT-OH + 185 1 127 122 121 124 # HC-CT-CT-OH + 186 1 127 122 121 125 # HC-CT-CT-OH + 187 1 128 122 121 123 # HC-CT-CT-OH + 188 2 128 122 121 124 # HC-CT-CT-HC + 189 2 128 122 121 125 # HC-CT-CT-HC + 190 4 129 123 121 122 # CT-CT-OH-HO + 191 5 129 123 121 124 # HC-CT-OH-HO + 192 5 129 123 121 125 # HC-CT-OH-HO + 193 4 130 127 122 121 # CT-CT-OH-HO + 194 5 130 127 122 126 # HC-CT-OH-HO + 195 5 130 127 122 128 # HC-CT-OH-HO + 196 1 136 132 131 133 # HC-CT-CT-OH + 197 2 136 132 131 134 # HC-CT-CT-HC + 198 2 136 132 131 135 # HC-CT-CT-HC + 199 3 137 132 131 133 # OH-CT-CT-OH + 200 1 137 132 131 134 # HC-CT-CT-OH + 201 1 137 132 131 135 # HC-CT-CT-OH + 202 1 138 132 131 133 # HC-CT-CT-OH + 203 2 138 132 131 134 # HC-CT-CT-HC + 204 2 138 132 131 135 # HC-CT-CT-HC + 205 4 139 133 131 132 # CT-CT-OH-HO + 206 5 139 133 131 134 # HC-CT-OH-HO + 207 5 139 133 131 135 # HC-CT-OH-HO + 208 4 140 137 132 131 # CT-CT-OH-HO + 209 5 140 137 132 136 # HC-CT-OH-HO + 210 5 140 137 132 138 # HC-CT-OH-HO + 211 1 146 142 141 143 # HC-CT-CT-OH + 212 2 146 142 141 144 # HC-CT-CT-HC + 213 2 146 142 141 145 # HC-CT-CT-HC + 214 3 147 142 141 143 # OH-CT-CT-OH + 215 1 147 142 141 144 # HC-CT-CT-OH + 216 1 147 142 141 145 # HC-CT-CT-OH + 217 1 148 142 141 143 # HC-CT-CT-OH + 218 2 148 142 141 144 # HC-CT-CT-HC + 219 2 148 142 141 145 # HC-CT-CT-HC + 220 4 149 143 141 142 # CT-CT-OH-HO + 221 5 149 143 141 144 # HC-CT-OH-HO + 222 5 149 143 141 145 # HC-CT-OH-HO + 223 4 150 147 142 141 # CT-CT-OH-HO + 224 5 150 147 142 146 # HC-CT-OH-HO + 225 5 150 147 142 148 # HC-CT-OH-HO + 226 1 156 152 151 153 # HC-CT-CT-OH + 227 2 156 152 151 154 # HC-CT-CT-HC + 228 2 156 152 151 155 # HC-CT-CT-HC + 229 3 157 152 151 153 # OH-CT-CT-OH + 230 1 157 152 151 154 # HC-CT-CT-OH + 231 1 157 152 151 155 # HC-CT-CT-OH + 232 1 158 152 151 153 # HC-CT-CT-OH + 233 2 158 152 151 154 # HC-CT-CT-HC + 234 2 158 152 151 155 # HC-CT-CT-HC + 235 4 159 153 151 152 # CT-CT-OH-HO + 236 5 159 153 151 154 # HC-CT-OH-HO + 237 5 159 153 151 155 # HC-CT-OH-HO + 238 4 160 157 152 151 # CT-CT-OH-HO + 239 5 160 157 152 156 # HC-CT-OH-HO + 240 5 160 157 152 158 # HC-CT-OH-HO + 241 1 166 162 161 163 # HC-CT-CT-OH + 242 2 166 162 161 164 # HC-CT-CT-HC + 243 2 166 162 161 165 # HC-CT-CT-HC + 244 3 167 162 161 163 # OH-CT-CT-OH + 245 1 167 162 161 164 # HC-CT-CT-OH + 246 1 167 162 161 165 # HC-CT-CT-OH + 247 1 168 162 161 163 # HC-CT-CT-OH + 248 2 168 162 161 164 # HC-CT-CT-HC + 249 2 168 162 161 165 # HC-CT-CT-HC + 250 4 169 163 161 162 # CT-CT-OH-HO + 251 5 169 163 161 164 # HC-CT-OH-HO + 252 5 169 163 161 165 # HC-CT-OH-HO + 253 4 170 167 162 161 # CT-CT-OH-HO + 254 5 170 167 162 166 # HC-CT-OH-HO + 255 5 170 167 162 168 # HC-CT-OH-HO + 256 1 176 172 171 173 # HC-CT-CT-OH + 257 2 176 172 171 174 # HC-CT-CT-HC + 258 2 176 172 171 175 # HC-CT-CT-HC + 259 3 177 172 171 173 # OH-CT-CT-OH + 260 1 177 172 171 174 # HC-CT-CT-OH + 261 1 177 172 171 175 # HC-CT-CT-OH + 262 1 178 172 171 173 # HC-CT-CT-OH + 263 2 178 172 171 174 # HC-CT-CT-HC + 264 2 178 172 171 175 # HC-CT-CT-HC + 265 4 179 173 171 172 # CT-CT-OH-HO + 266 5 179 173 171 174 # HC-CT-OH-HO + 267 5 179 173 171 175 # HC-CT-OH-HO + 268 4 180 177 172 171 # CT-CT-OH-HO + 269 5 180 177 172 176 # HC-CT-OH-HO + 270 5 180 177 172 178 # HC-CT-OH-HO + 271 1 186 182 181 183 # HC-CT-CT-OH + 272 2 186 182 181 184 # HC-CT-CT-HC + 273 2 186 182 181 185 # HC-CT-CT-HC + 274 3 187 182 181 183 # OH-CT-CT-OH + 275 1 187 182 181 184 # HC-CT-CT-OH + 276 1 187 182 181 185 # HC-CT-CT-OH + 277 1 188 182 181 183 # HC-CT-CT-OH + 278 2 188 182 181 184 # HC-CT-CT-HC + 279 2 188 182 181 185 # HC-CT-CT-HC + 280 4 189 183 181 182 # CT-CT-OH-HO + 281 5 189 183 181 184 # HC-CT-OH-HO + 282 5 189 183 181 185 # HC-CT-OH-HO + 283 4 190 187 182 181 # CT-CT-OH-HO + 284 5 190 187 182 186 # HC-CT-OH-HO + 285 5 190 187 182 188 # HC-CT-OH-HO + 286 1 196 192 191 193 # HC-CT-CT-OH + 287 2 196 192 191 194 # HC-CT-CT-HC + 288 2 196 192 191 195 # HC-CT-CT-HC + 289 3 197 192 191 193 # OH-CT-CT-OH + 290 1 197 192 191 194 # HC-CT-CT-OH + 291 1 197 192 191 195 # HC-CT-CT-OH + 292 1 198 192 191 193 # HC-CT-CT-OH + 293 2 198 192 191 194 # HC-CT-CT-HC + 294 2 198 192 191 195 # HC-CT-CT-HC + 295 4 199 193 191 192 # CT-CT-OH-HO + 296 5 199 193 191 194 # HC-CT-OH-HO + 297 5 199 193 191 195 # HC-CT-OH-HO + 298 4 200 197 192 191 # CT-CT-OH-HO + 299 5 200 197 192 196 # HC-CT-OH-HO + 300 5 200 197 192 198 # HC-CT-OH-HO + 301 1 206 202 201 203 # HC-CT-CT-OH + 302 2 206 202 201 204 # HC-CT-CT-HC + 303 2 206 202 201 205 # HC-CT-CT-HC + 304 3 207 202 201 203 # OH-CT-CT-OH + 305 1 207 202 201 204 # HC-CT-CT-OH + 306 1 207 202 201 205 # HC-CT-CT-OH + 307 1 208 202 201 203 # HC-CT-CT-OH + 308 2 208 202 201 204 # HC-CT-CT-HC + 309 2 208 202 201 205 # HC-CT-CT-HC + 310 4 209 203 201 202 # CT-CT-OH-HO + 311 5 209 203 201 204 # HC-CT-OH-HO + 312 5 209 203 201 205 # HC-CT-OH-HO + 313 4 210 207 202 201 # CT-CT-OH-HO + 314 5 210 207 202 206 # HC-CT-OH-HO + 315 5 210 207 202 208 # HC-CT-OH-HO + 316 1 216 212 211 213 # HC-CT-CT-OH + 317 2 216 212 211 214 # HC-CT-CT-HC + 318 2 216 212 211 215 # HC-CT-CT-HC + 319 3 217 212 211 213 # OH-CT-CT-OH + 320 1 217 212 211 214 # HC-CT-CT-OH + 321 1 217 212 211 215 # HC-CT-CT-OH + 322 1 218 212 211 213 # HC-CT-CT-OH + 323 2 218 212 211 214 # HC-CT-CT-HC + 324 2 218 212 211 215 # HC-CT-CT-HC + 325 4 219 213 211 212 # CT-CT-OH-HO + 326 5 219 213 211 214 # HC-CT-OH-HO + 327 5 219 213 211 215 # HC-CT-OH-HO + 328 4 220 217 212 211 # CT-CT-OH-HO + 329 5 220 217 212 216 # HC-CT-OH-HO + 330 5 220 217 212 218 # HC-CT-OH-HO + 331 1 226 222 221 223 # HC-CT-CT-OH + 332 2 226 222 221 224 # HC-CT-CT-HC + 333 2 226 222 221 225 # HC-CT-CT-HC + 334 3 227 222 221 223 # OH-CT-CT-OH + 335 1 227 222 221 224 # HC-CT-CT-OH + 336 1 227 222 221 225 # HC-CT-CT-OH + 337 1 228 222 221 223 # HC-CT-CT-OH + 338 2 228 222 221 224 # HC-CT-CT-HC + 339 2 228 222 221 225 # HC-CT-CT-HC + 340 4 229 223 221 222 # CT-CT-OH-HO + 341 5 229 223 221 224 # HC-CT-OH-HO + 342 5 229 223 221 225 # HC-CT-OH-HO + 343 4 230 227 222 221 # CT-CT-OH-HO + 344 5 230 227 222 226 # HC-CT-OH-HO + 345 5 230 227 222 228 # HC-CT-OH-HO + 346 1 236 232 231 233 # HC-CT-CT-OH + 347 2 236 232 231 234 # HC-CT-CT-HC + 348 2 236 232 231 235 # HC-CT-CT-HC + 349 3 237 232 231 233 # OH-CT-CT-OH + 350 1 237 232 231 234 # HC-CT-CT-OH + 351 1 237 232 231 235 # HC-CT-CT-OH + 352 1 238 232 231 233 # HC-CT-CT-OH + 353 2 238 232 231 234 # HC-CT-CT-HC + 354 2 238 232 231 235 # HC-CT-CT-HC + 355 4 239 233 231 232 # CT-CT-OH-HO + 356 5 239 233 231 234 # HC-CT-OH-HO + 357 5 239 233 231 235 # HC-CT-OH-HO + 358 4 240 237 232 231 # CT-CT-OH-HO + 359 5 240 237 232 236 # HC-CT-OH-HO + 360 5 240 237 232 238 # HC-CT-OH-HO + 361 1 246 242 241 243 # HC-CT-CT-OH + 362 2 246 242 241 244 # HC-CT-CT-HC + 363 2 246 242 241 245 # HC-CT-CT-HC + 364 3 247 242 241 243 # OH-CT-CT-OH + 365 1 247 242 241 244 # HC-CT-CT-OH + 366 1 247 242 241 245 # HC-CT-CT-OH + 367 1 248 242 241 243 # HC-CT-CT-OH + 368 2 248 242 241 244 # HC-CT-CT-HC + 369 2 248 242 241 245 # HC-CT-CT-HC + 370 4 249 243 241 242 # CT-CT-OH-HO + 371 5 249 243 241 244 # HC-CT-OH-HO + 372 5 249 243 241 245 # HC-CT-OH-HO + 373 4 250 247 242 241 # CT-CT-OH-HO + 374 5 250 247 242 246 # HC-CT-OH-HO + 375 5 250 247 242 248 # HC-CT-OH-HO + 376 1 256 252 251 253 # HC-CT-CT-OH + 377 2 256 252 251 254 # HC-CT-CT-HC + 378 2 256 252 251 255 # HC-CT-CT-HC + 379 3 257 252 251 253 # OH-CT-CT-OH + 380 1 257 252 251 254 # HC-CT-CT-OH + 381 1 257 252 251 255 # HC-CT-CT-OH + 382 1 258 252 251 253 # HC-CT-CT-OH + 383 2 258 252 251 254 # HC-CT-CT-HC + 384 2 258 252 251 255 # HC-CT-CT-HC + 385 4 259 253 251 252 # CT-CT-OH-HO + 386 5 259 253 251 254 # HC-CT-OH-HO + 387 5 259 253 251 255 # HC-CT-OH-HO + 388 4 260 257 252 251 # CT-CT-OH-HO + 389 5 260 257 252 256 # HC-CT-OH-HO + 390 5 260 257 252 258 # HC-CT-OH-HO + 391 1 266 262 261 263 # HC-CT-CT-OH + 392 2 266 262 261 264 # HC-CT-CT-HC + 393 2 266 262 261 265 # HC-CT-CT-HC + 394 3 267 262 261 263 # OH-CT-CT-OH + 395 1 267 262 261 264 # HC-CT-CT-OH + 396 1 267 262 261 265 # HC-CT-CT-OH + 397 1 268 262 261 263 # HC-CT-CT-OH + 398 2 268 262 261 264 # HC-CT-CT-HC + 399 2 268 262 261 265 # HC-CT-CT-HC + 400 4 269 263 261 262 # CT-CT-OH-HO + 401 5 269 263 261 264 # HC-CT-OH-HO + 402 5 269 263 261 265 # HC-CT-OH-HO + 403 4 270 267 262 261 # CT-CT-OH-HO + 404 5 270 267 262 266 # HC-CT-OH-HO + 405 5 270 267 262 268 # HC-CT-OH-HO + 406 1 276 272 271 273 # HC-CT-CT-OH + 407 2 276 272 271 274 # HC-CT-CT-HC + 408 2 276 272 271 275 # HC-CT-CT-HC + 409 3 277 272 271 273 # OH-CT-CT-OH + 410 1 277 272 271 274 # HC-CT-CT-OH + 411 1 277 272 271 275 # HC-CT-CT-OH + 412 1 278 272 271 273 # HC-CT-CT-OH + 413 2 278 272 271 274 # HC-CT-CT-HC + 414 2 278 272 271 275 # HC-CT-CT-HC + 415 4 279 273 271 272 # CT-CT-OH-HO + 416 5 279 273 271 274 # HC-CT-OH-HO + 417 5 279 273 271 275 # HC-CT-OH-HO + 418 4 280 277 272 271 # CT-CT-OH-HO + 419 5 280 277 272 276 # HC-CT-OH-HO + 420 5 280 277 272 278 # HC-CT-OH-HO + 421 1 286 282 281 283 # HC-CT-CT-OH + 422 2 286 282 281 284 # HC-CT-CT-HC + 423 2 286 282 281 285 # HC-CT-CT-HC + 424 3 287 282 281 283 # OH-CT-CT-OH + 425 1 287 282 281 284 # HC-CT-CT-OH + 426 1 287 282 281 285 # HC-CT-CT-OH + 427 1 288 282 281 283 # HC-CT-CT-OH + 428 2 288 282 281 284 # HC-CT-CT-HC + 429 2 288 282 281 285 # HC-CT-CT-HC + 430 4 289 283 281 282 # CT-CT-OH-HO + 431 5 289 283 281 284 # HC-CT-OH-HO + 432 5 289 283 281 285 # HC-CT-OH-HO + 433 4 290 287 282 281 # CT-CT-OH-HO + 434 5 290 287 282 286 # HC-CT-OH-HO + 435 5 290 287 282 288 # HC-CT-OH-HO + 436 1 296 292 291 293 # HC-CT-CT-OH + 437 2 296 292 291 294 # HC-CT-CT-HC + 438 2 296 292 291 295 # HC-CT-CT-HC + 439 3 297 292 291 293 # OH-CT-CT-OH + 440 1 297 292 291 294 # HC-CT-CT-OH + 441 1 297 292 291 295 # HC-CT-CT-OH + 442 1 298 292 291 293 # HC-CT-CT-OH + 443 2 298 292 291 294 # HC-CT-CT-HC + 444 2 298 292 291 295 # HC-CT-CT-HC + 445 4 299 293 291 292 # CT-CT-OH-HO + 446 5 299 293 291 294 # HC-CT-OH-HO + 447 5 299 293 291 295 # HC-CT-OH-HO + 448 4 300 297 292 291 # CT-CT-OH-HO + 449 5 300 297 292 296 # HC-CT-OH-HO + 450 5 300 297 292 298 # HC-CT-OH-HO + 451 1 306 302 301 303 # HC-CT-CT-OH + 452 2 306 302 301 304 # HC-CT-CT-HC + 453 2 306 302 301 305 # HC-CT-CT-HC + 454 3 307 302 301 303 # OH-CT-CT-OH + 455 1 307 302 301 304 # HC-CT-CT-OH + 456 1 307 302 301 305 # HC-CT-CT-OH + 457 1 308 302 301 303 # HC-CT-CT-OH + 458 2 308 302 301 304 # HC-CT-CT-HC + 459 2 308 302 301 305 # HC-CT-CT-HC + 460 4 309 303 301 302 # CT-CT-OH-HO + 461 5 309 303 301 304 # HC-CT-OH-HO + 462 5 309 303 301 305 # HC-CT-OH-HO + 463 4 310 307 302 301 # CT-CT-OH-HO + 464 5 310 307 302 306 # HC-CT-OH-HO + 465 5 310 307 302 308 # HC-CT-OH-HO + 466 1 316 312 311 313 # HC-CT-CT-OH + 467 2 316 312 311 314 # HC-CT-CT-HC + 468 2 316 312 311 315 # HC-CT-CT-HC + 469 3 317 312 311 313 # OH-CT-CT-OH + 470 1 317 312 311 314 # HC-CT-CT-OH + 471 1 317 312 311 315 # HC-CT-CT-OH + 472 1 318 312 311 313 # HC-CT-CT-OH + 473 2 318 312 311 314 # HC-CT-CT-HC + 474 2 318 312 311 315 # HC-CT-CT-HC + 475 4 319 313 311 312 # CT-CT-OH-HO + 476 5 319 313 311 314 # HC-CT-OH-HO + 477 5 319 313 311 315 # HC-CT-OH-HO + 478 4 320 317 312 311 # CT-CT-OH-HO + 479 5 320 317 312 316 # HC-CT-OH-HO + 480 5 320 317 312 318 # HC-CT-OH-HO + 481 1 326 322 321 323 # HC-CT-CT-OH + 482 2 326 322 321 324 # HC-CT-CT-HC + 483 2 326 322 321 325 # HC-CT-CT-HC + 484 3 327 322 321 323 # OH-CT-CT-OH + 485 1 327 322 321 324 # HC-CT-CT-OH + 486 1 327 322 321 325 # HC-CT-CT-OH + 487 1 328 322 321 323 # HC-CT-CT-OH + 488 2 328 322 321 324 # HC-CT-CT-HC + 489 2 328 322 321 325 # HC-CT-CT-HC + 490 4 329 323 321 322 # CT-CT-OH-HO + 491 5 329 323 321 324 # HC-CT-OH-HO + 492 5 329 323 321 325 # HC-CT-OH-HO + 493 4 330 327 322 321 # CT-CT-OH-HO + 494 5 330 327 322 326 # HC-CT-OH-HO + 495 5 330 327 322 328 # HC-CT-OH-HO + 496 1 336 332 331 333 # HC-CT-CT-OH + 497 2 336 332 331 334 # HC-CT-CT-HC + 498 2 336 332 331 335 # HC-CT-CT-HC + 499 3 337 332 331 333 # OH-CT-CT-OH + 500 1 337 332 331 334 # HC-CT-CT-OH + 501 1 337 332 331 335 # HC-CT-CT-OH + 502 1 338 332 331 333 # HC-CT-CT-OH + 503 2 338 332 331 334 # HC-CT-CT-HC + 504 2 338 332 331 335 # HC-CT-CT-HC + 505 4 339 333 331 332 # CT-CT-OH-HO + 506 5 339 333 331 334 # HC-CT-OH-HO + 507 5 339 333 331 335 # HC-CT-OH-HO + 508 4 340 337 332 331 # CT-CT-OH-HO + 509 5 340 337 332 336 # HC-CT-OH-HO + 510 5 340 337 332 338 # HC-CT-OH-HO + 511 1 346 342 341 343 # HC-CT-CT-OH + 512 2 346 342 341 344 # HC-CT-CT-HC + 513 2 346 342 341 345 # HC-CT-CT-HC + 514 3 347 342 341 343 # OH-CT-CT-OH + 515 1 347 342 341 344 # HC-CT-CT-OH + 516 1 347 342 341 345 # HC-CT-CT-OH + 517 1 348 342 341 343 # HC-CT-CT-OH + 518 2 348 342 341 344 # HC-CT-CT-HC + 519 2 348 342 341 345 # HC-CT-CT-HC + 520 4 349 343 341 342 # CT-CT-OH-HO + 521 5 349 343 341 344 # HC-CT-OH-HO + 522 5 349 343 341 345 # HC-CT-OH-HO + 523 4 350 347 342 341 # CT-CT-OH-HO + 524 5 350 347 342 346 # HC-CT-OH-HO + 525 5 350 347 342 348 # HC-CT-OH-HO + 526 1 356 352 351 353 # HC-CT-CT-OH + 527 2 356 352 351 354 # HC-CT-CT-HC + 528 2 356 352 351 355 # HC-CT-CT-HC + 529 3 357 352 351 353 # OH-CT-CT-OH + 530 1 357 352 351 354 # HC-CT-CT-OH + 531 1 357 352 351 355 # HC-CT-CT-OH + 532 1 358 352 351 353 # HC-CT-CT-OH + 533 2 358 352 351 354 # HC-CT-CT-HC + 534 2 358 352 351 355 # HC-CT-CT-HC + 535 4 359 353 351 352 # CT-CT-OH-HO + 536 5 359 353 351 354 # HC-CT-OH-HO + 537 5 359 353 351 355 # HC-CT-OH-HO + 538 4 360 357 352 351 # CT-CT-OH-HO + 539 5 360 357 352 356 # HC-CT-OH-HO + 540 5 360 357 352 358 # HC-CT-OH-HO + 541 1 366 362 361 363 # HC-CT-CT-OH + 542 2 366 362 361 364 # HC-CT-CT-HC + 543 2 366 362 361 365 # HC-CT-CT-HC + 544 3 367 362 361 363 # OH-CT-CT-OH + 545 1 367 362 361 364 # HC-CT-CT-OH + 546 1 367 362 361 365 # HC-CT-CT-OH + 547 1 368 362 361 363 # HC-CT-CT-OH + 548 2 368 362 361 364 # HC-CT-CT-HC + 549 2 368 362 361 365 # HC-CT-CT-HC + 550 4 369 363 361 362 # CT-CT-OH-HO + 551 5 369 363 361 364 # HC-CT-OH-HO + 552 5 369 363 361 365 # HC-CT-OH-HO + 553 4 370 367 362 361 # CT-CT-OH-HO + 554 5 370 367 362 366 # HC-CT-OH-HO + 555 5 370 367 362 368 # HC-CT-OH-HO + 556 1 376 372 371 373 # HC-CT-CT-OH + 557 2 376 372 371 374 # HC-CT-CT-HC + 558 2 376 372 371 375 # HC-CT-CT-HC + 559 3 377 372 371 373 # OH-CT-CT-OH + 560 1 377 372 371 374 # HC-CT-CT-OH + 561 1 377 372 371 375 # HC-CT-CT-OH + 562 1 378 372 371 373 # HC-CT-CT-OH + 563 2 378 372 371 374 # HC-CT-CT-HC + 564 2 378 372 371 375 # HC-CT-CT-HC + 565 4 379 373 371 372 # CT-CT-OH-HO + 566 5 379 373 371 374 # HC-CT-OH-HO + 567 5 379 373 371 375 # HC-CT-OH-HO + 568 4 380 377 372 371 # CT-CT-OH-HO + 569 5 380 377 372 376 # HC-CT-OH-HO + 570 5 380 377 372 378 # HC-CT-OH-HO + 571 1 386 382 381 383 # HC-CT-CT-OH + 572 2 386 382 381 384 # HC-CT-CT-HC + 573 2 386 382 381 385 # HC-CT-CT-HC + 574 3 387 382 381 383 # OH-CT-CT-OH + 575 1 387 382 381 384 # HC-CT-CT-OH + 576 1 387 382 381 385 # HC-CT-CT-OH + 577 1 388 382 381 383 # HC-CT-CT-OH + 578 2 388 382 381 384 # HC-CT-CT-HC + 579 2 388 382 381 385 # HC-CT-CT-HC + 580 4 389 383 381 382 # CT-CT-OH-HO + 581 5 389 383 381 384 # HC-CT-OH-HO + 582 5 389 383 381 385 # HC-CT-OH-HO + 583 4 390 387 382 381 # CT-CT-OH-HO + 584 5 390 387 382 386 # HC-CT-OH-HO + 585 5 390 387 382 388 # HC-CT-OH-HO + 586 1 396 392 391 393 # HC-CT-CT-OH + 587 2 396 392 391 394 # HC-CT-CT-HC + 588 2 396 392 391 395 # HC-CT-CT-HC + 589 3 397 392 391 393 # OH-CT-CT-OH + 590 1 397 392 391 394 # HC-CT-CT-OH + 591 1 397 392 391 395 # HC-CT-CT-OH + 592 1 398 392 391 393 # HC-CT-CT-OH + 593 2 398 392 391 394 # HC-CT-CT-HC + 594 2 398 392 391 395 # HC-CT-CT-HC + 595 4 399 393 391 392 # CT-CT-OH-HO + 596 5 399 393 391 394 # HC-CT-OH-HO + 597 5 399 393 391 395 # HC-CT-OH-HO + 598 4 400 397 392 391 # CT-CT-OH-HO + 599 5 400 397 392 396 # HC-CT-OH-HO + 600 5 400 397 392 398 # HC-CT-OH-HO + 601 1 406 402 401 403 # HC-CT-CT-OH + 602 2 406 402 401 404 # HC-CT-CT-HC + 603 2 406 402 401 405 # HC-CT-CT-HC + 604 3 407 402 401 403 # OH-CT-CT-OH + 605 1 407 402 401 404 # HC-CT-CT-OH + 606 1 407 402 401 405 # HC-CT-CT-OH + 607 1 408 402 401 403 # HC-CT-CT-OH + 608 2 408 402 401 404 # HC-CT-CT-HC + 609 2 408 402 401 405 # HC-CT-CT-HC + 610 4 409 403 401 402 # CT-CT-OH-HO + 611 5 409 403 401 404 # HC-CT-OH-HO + 612 5 409 403 401 405 # HC-CT-OH-HO + 613 4 410 407 402 401 # CT-CT-OH-HO + 614 5 410 407 402 406 # HC-CT-OH-HO + 615 5 410 407 402 408 # HC-CT-OH-HO + 616 1 416 412 411 413 # HC-CT-CT-OH + 617 2 416 412 411 414 # HC-CT-CT-HC + 618 2 416 412 411 415 # HC-CT-CT-HC + 619 3 417 412 411 413 # OH-CT-CT-OH + 620 1 417 412 411 414 # HC-CT-CT-OH + 621 1 417 412 411 415 # HC-CT-CT-OH + 622 1 418 412 411 413 # HC-CT-CT-OH + 623 2 418 412 411 414 # HC-CT-CT-HC + 624 2 418 412 411 415 # HC-CT-CT-HC + 625 4 419 413 411 412 # CT-CT-OH-HO + 626 5 419 413 411 414 # HC-CT-OH-HO + 627 5 419 413 411 415 # HC-CT-OH-HO + 628 4 420 417 412 411 # CT-CT-OH-HO + 629 5 420 417 412 416 # HC-CT-OH-HO + 630 5 420 417 412 418 # HC-CT-OH-HO + 631 1 426 422 421 423 # HC-CT-CT-OH + 632 2 426 422 421 424 # HC-CT-CT-HC + 633 2 426 422 421 425 # HC-CT-CT-HC + 634 3 427 422 421 423 # OH-CT-CT-OH + 635 1 427 422 421 424 # HC-CT-CT-OH + 636 1 427 422 421 425 # HC-CT-CT-OH + 637 1 428 422 421 423 # HC-CT-CT-OH + 638 2 428 422 421 424 # HC-CT-CT-HC + 639 2 428 422 421 425 # HC-CT-CT-HC + 640 4 429 423 421 422 # CT-CT-OH-HO + 641 5 429 423 421 424 # HC-CT-OH-HO + 642 5 429 423 421 425 # HC-CT-OH-HO + 643 4 430 427 422 421 # CT-CT-OH-HO + 644 5 430 427 422 426 # HC-CT-OH-HO + 645 5 430 427 422 428 # HC-CT-OH-HO + 646 1 436 432 431 433 # HC-CT-CT-OH + 647 2 436 432 431 434 # HC-CT-CT-HC + 648 2 436 432 431 435 # HC-CT-CT-HC + 649 3 437 432 431 433 # OH-CT-CT-OH + 650 1 437 432 431 434 # HC-CT-CT-OH + 651 1 437 432 431 435 # HC-CT-CT-OH + 652 1 438 432 431 433 # HC-CT-CT-OH + 653 2 438 432 431 434 # HC-CT-CT-HC + 654 2 438 432 431 435 # HC-CT-CT-HC + 655 4 439 433 431 432 # CT-CT-OH-HO + 656 5 439 433 431 434 # HC-CT-OH-HO + 657 5 439 433 431 435 # HC-CT-OH-HO + 658 4 440 437 432 431 # CT-CT-OH-HO + 659 5 440 437 432 436 # HC-CT-OH-HO + 660 5 440 437 432 438 # HC-CT-OH-HO + 661 1 446 442 441 443 # HC-CT-CT-OH + 662 2 446 442 441 444 # HC-CT-CT-HC + 663 2 446 442 441 445 # HC-CT-CT-HC + 664 3 447 442 441 443 # OH-CT-CT-OH + 665 1 447 442 441 444 # HC-CT-CT-OH + 666 1 447 442 441 445 # HC-CT-CT-OH + 667 1 448 442 441 443 # HC-CT-CT-OH + 668 2 448 442 441 444 # HC-CT-CT-HC + 669 2 448 442 441 445 # HC-CT-CT-HC + 670 4 449 443 441 442 # CT-CT-OH-HO + 671 5 449 443 441 444 # HC-CT-OH-HO + 672 5 449 443 441 445 # HC-CT-OH-HO + 673 4 450 447 442 441 # CT-CT-OH-HO + 674 5 450 447 442 446 # HC-CT-OH-HO + 675 5 450 447 442 448 # HC-CT-OH-HO + 676 1 456 452 451 453 # HC-CT-CT-OH + 677 2 456 452 451 454 # HC-CT-CT-HC + 678 2 456 452 451 455 # HC-CT-CT-HC + 679 3 457 452 451 453 # OH-CT-CT-OH + 680 1 457 452 451 454 # HC-CT-CT-OH + 681 1 457 452 451 455 # HC-CT-CT-OH + 682 1 458 452 451 453 # HC-CT-CT-OH + 683 2 458 452 451 454 # HC-CT-CT-HC + 684 2 458 452 451 455 # HC-CT-CT-HC + 685 4 459 453 451 452 # CT-CT-OH-HO + 686 5 459 453 451 454 # HC-CT-OH-HO + 687 5 459 453 451 455 # HC-CT-OH-HO + 688 4 460 457 452 451 # CT-CT-OH-HO + 689 5 460 457 452 456 # HC-CT-OH-HO + 690 5 460 457 452 458 # HC-CT-OH-HO + 691 1 466 462 461 463 # HC-CT-CT-OH + 692 2 466 462 461 464 # HC-CT-CT-HC + 693 2 466 462 461 465 # HC-CT-CT-HC + 694 3 467 462 461 463 # OH-CT-CT-OH + 695 1 467 462 461 464 # HC-CT-CT-OH + 696 1 467 462 461 465 # HC-CT-CT-OH + 697 1 468 462 461 463 # HC-CT-CT-OH + 698 2 468 462 461 464 # HC-CT-CT-HC + 699 2 468 462 461 465 # HC-CT-CT-HC + 700 4 469 463 461 462 # CT-CT-OH-HO + 701 5 469 463 461 464 # HC-CT-OH-HO + 702 5 469 463 461 465 # HC-CT-OH-HO + 703 4 470 467 462 461 # CT-CT-OH-HO + 704 5 470 467 462 466 # HC-CT-OH-HO + 705 5 470 467 462 468 # HC-CT-OH-HO + 706 1 476 472 471 473 # HC-CT-CT-OH + 707 2 476 472 471 474 # HC-CT-CT-HC + 708 2 476 472 471 475 # HC-CT-CT-HC + 709 3 477 472 471 473 # OH-CT-CT-OH + 710 1 477 472 471 474 # HC-CT-CT-OH + 711 1 477 472 471 475 # HC-CT-CT-OH + 712 1 478 472 471 473 # HC-CT-CT-OH + 713 2 478 472 471 474 # HC-CT-CT-HC + 714 2 478 472 471 475 # HC-CT-CT-HC + 715 4 479 473 471 472 # CT-CT-OH-HO + 716 5 479 473 471 474 # HC-CT-OH-HO + 717 5 479 473 471 475 # HC-CT-OH-HO + 718 4 480 477 472 471 # CT-CT-OH-HO + 719 5 480 477 472 476 # HC-CT-OH-HO + 720 5 480 477 472 478 # HC-CT-OH-HO + 721 1 486 482 481 483 # HC-CT-CT-OH + 722 2 486 482 481 484 # HC-CT-CT-HC + 723 2 486 482 481 485 # HC-CT-CT-HC + 724 3 487 482 481 483 # OH-CT-CT-OH + 725 1 487 482 481 484 # HC-CT-CT-OH + 726 1 487 482 481 485 # HC-CT-CT-OH + 727 1 488 482 481 483 # HC-CT-CT-OH + 728 2 488 482 481 484 # HC-CT-CT-HC + 729 2 488 482 481 485 # HC-CT-CT-HC + 730 4 489 483 481 482 # CT-CT-OH-HO + 731 5 489 483 481 484 # HC-CT-OH-HO + 732 5 489 483 481 485 # HC-CT-OH-HO + 733 4 490 487 482 481 # CT-CT-OH-HO + 734 5 490 487 482 486 # HC-CT-OH-HO + 735 5 490 487 482 488 # HC-CT-OH-HO + 736 1 496 492 491 493 # HC-CT-CT-OH + 737 2 496 492 491 494 # HC-CT-CT-HC + 738 2 496 492 491 495 # HC-CT-CT-HC + 739 3 497 492 491 493 # OH-CT-CT-OH + 740 1 497 492 491 494 # HC-CT-CT-OH + 741 1 497 492 491 495 # HC-CT-CT-OH + 742 1 498 492 491 493 # HC-CT-CT-OH + 743 2 498 492 491 494 # HC-CT-CT-HC + 744 2 498 492 491 495 # HC-CT-CT-HC + 745 4 499 493 491 492 # CT-CT-OH-HO + 746 5 499 493 491 494 # HC-CT-OH-HO + 747 5 499 493 491 495 # HC-CT-OH-HO + 748 4 500 497 492 491 # CT-CT-OH-HO + 749 5 500 497 492 496 # HC-CT-OH-HO + 750 5 500 497 492 498 # HC-CT-OH-HO + 751 1 506 502 501 503 # HC-CT-CT-OH + 752 2 506 502 501 504 # HC-CT-CT-HC + 753 2 506 502 501 505 # HC-CT-CT-HC + 754 3 507 502 501 503 # OH-CT-CT-OH + 755 1 507 502 501 504 # HC-CT-CT-OH + 756 1 507 502 501 505 # HC-CT-CT-OH + 757 1 508 502 501 503 # HC-CT-CT-OH + 758 2 508 502 501 504 # HC-CT-CT-HC + 759 2 508 502 501 505 # HC-CT-CT-HC + 760 4 509 503 501 502 # CT-CT-OH-HO + 761 5 509 503 501 504 # HC-CT-OH-HO + 762 5 509 503 501 505 # HC-CT-OH-HO + 763 4 510 507 502 501 # CT-CT-OH-HO + 764 5 510 507 502 506 # HC-CT-OH-HO + 765 5 510 507 502 508 # HC-CT-OH-HO + 766 1 516 512 511 513 # HC-CT-CT-OH + 767 2 516 512 511 514 # HC-CT-CT-HC + 768 2 516 512 511 515 # HC-CT-CT-HC + 769 3 517 512 511 513 # OH-CT-CT-OH + 770 1 517 512 511 514 # HC-CT-CT-OH + 771 1 517 512 511 515 # HC-CT-CT-OH + 772 1 518 512 511 513 # HC-CT-CT-OH + 773 2 518 512 511 514 # HC-CT-CT-HC + 774 2 518 512 511 515 # HC-CT-CT-HC + 775 4 519 513 511 512 # CT-CT-OH-HO + 776 5 519 513 511 514 # HC-CT-OH-HO + 777 5 519 513 511 515 # HC-CT-OH-HO + 778 4 520 517 512 511 # CT-CT-OH-HO + 779 5 520 517 512 516 # HC-CT-OH-HO + 780 5 520 517 512 518 # HC-CT-OH-HO + 781 1 526 522 521 523 # HC-CT-CT-OH + 782 2 526 522 521 524 # HC-CT-CT-HC + 783 2 526 522 521 525 # HC-CT-CT-HC + 784 3 527 522 521 523 # OH-CT-CT-OH + 785 1 527 522 521 524 # HC-CT-CT-OH + 786 1 527 522 521 525 # HC-CT-CT-OH + 787 1 528 522 521 523 # HC-CT-CT-OH + 788 2 528 522 521 524 # HC-CT-CT-HC + 789 2 528 522 521 525 # HC-CT-CT-HC + 790 4 529 523 521 522 # CT-CT-OH-HO + 791 5 529 523 521 524 # HC-CT-OH-HO + 792 5 529 523 521 525 # HC-CT-OH-HO + 793 4 530 527 522 521 # CT-CT-OH-HO + 794 5 530 527 522 526 # HC-CT-OH-HO + 795 5 530 527 522 528 # HC-CT-OH-HO + 796 1 536 532 531 533 # HC-CT-CT-OH + 797 2 536 532 531 534 # HC-CT-CT-HC + 798 2 536 532 531 535 # HC-CT-CT-HC + 799 3 537 532 531 533 # OH-CT-CT-OH + 800 1 537 532 531 534 # HC-CT-CT-OH + 801 1 537 532 531 535 # HC-CT-CT-OH + 802 1 538 532 531 533 # HC-CT-CT-OH + 803 2 538 532 531 534 # HC-CT-CT-HC + 804 2 538 532 531 535 # HC-CT-CT-HC + 805 4 539 533 531 532 # CT-CT-OH-HO + 806 5 539 533 531 534 # HC-CT-OH-HO + 807 5 539 533 531 535 # HC-CT-OH-HO + 808 4 540 537 532 531 # CT-CT-OH-HO + 809 5 540 537 532 536 # HC-CT-OH-HO + 810 5 540 537 532 538 # HC-CT-OH-HO + 811 1 546 542 541 543 # HC-CT-CT-OH + 812 2 546 542 541 544 # HC-CT-CT-HC + 813 2 546 542 541 545 # HC-CT-CT-HC + 814 3 547 542 541 543 # OH-CT-CT-OH + 815 1 547 542 541 544 # HC-CT-CT-OH + 816 1 547 542 541 545 # HC-CT-CT-OH + 817 1 548 542 541 543 # HC-CT-CT-OH + 818 2 548 542 541 544 # HC-CT-CT-HC + 819 2 548 542 541 545 # HC-CT-CT-HC + 820 4 549 543 541 542 # CT-CT-OH-HO + 821 5 549 543 541 544 # HC-CT-OH-HO + 822 5 549 543 541 545 # HC-CT-OH-HO + 823 4 550 547 542 541 # CT-CT-OH-HO + 824 5 550 547 542 546 # HC-CT-OH-HO + 825 5 550 547 542 548 # HC-CT-OH-HO + 826 1 556 552 551 553 # HC-CT-CT-OH + 827 2 556 552 551 554 # HC-CT-CT-HC + 828 2 556 552 551 555 # HC-CT-CT-HC + 829 3 557 552 551 553 # OH-CT-CT-OH + 830 1 557 552 551 554 # HC-CT-CT-OH + 831 1 557 552 551 555 # HC-CT-CT-OH + 832 1 558 552 551 553 # HC-CT-CT-OH + 833 2 558 552 551 554 # HC-CT-CT-HC + 834 2 558 552 551 555 # HC-CT-CT-HC + 835 4 559 553 551 552 # CT-CT-OH-HO + 836 5 559 553 551 554 # HC-CT-OH-HO + 837 5 559 553 551 555 # HC-CT-OH-HO + 838 4 560 557 552 551 # CT-CT-OH-HO + 839 5 560 557 552 556 # HC-CT-OH-HO + 840 5 560 557 552 558 # HC-CT-OH-HO + 841 1 566 562 561 563 # HC-CT-CT-OH + 842 2 566 562 561 564 # HC-CT-CT-HC + 843 2 566 562 561 565 # HC-CT-CT-HC + 844 3 567 562 561 563 # OH-CT-CT-OH + 845 1 567 562 561 564 # HC-CT-CT-OH + 846 1 567 562 561 565 # HC-CT-CT-OH + 847 1 568 562 561 563 # HC-CT-CT-OH + 848 2 568 562 561 564 # HC-CT-CT-HC + 849 2 568 562 561 565 # HC-CT-CT-HC + 850 4 569 563 561 562 # CT-CT-OH-HO + 851 5 569 563 561 564 # HC-CT-OH-HO + 852 5 569 563 561 565 # HC-CT-OH-HO + 853 4 570 567 562 561 # CT-CT-OH-HO + 854 5 570 567 562 566 # HC-CT-OH-HO + 855 5 570 567 562 568 # HC-CT-OH-HO + 856 1 576 572 571 573 # HC-CT-CT-OH + 857 2 576 572 571 574 # HC-CT-CT-HC + 858 2 576 572 571 575 # HC-CT-CT-HC + 859 3 577 572 571 573 # OH-CT-CT-OH + 860 1 577 572 571 574 # HC-CT-CT-OH + 861 1 577 572 571 575 # HC-CT-CT-OH + 862 1 578 572 571 573 # HC-CT-CT-OH + 863 2 578 572 571 574 # HC-CT-CT-HC + 864 2 578 572 571 575 # HC-CT-CT-HC + 865 4 579 573 571 572 # CT-CT-OH-HO + 866 5 579 573 571 574 # HC-CT-OH-HO + 867 5 579 573 571 575 # HC-CT-OH-HO + 868 4 580 577 572 571 # CT-CT-OH-HO + 869 5 580 577 572 576 # HC-CT-OH-HO + 870 5 580 577 572 578 # HC-CT-OH-HO + 871 1 586 582 581 583 # HC-CT-CT-OH + 872 2 586 582 581 584 # HC-CT-CT-HC + 873 2 586 582 581 585 # HC-CT-CT-HC + 874 3 587 582 581 583 # OH-CT-CT-OH + 875 1 587 582 581 584 # HC-CT-CT-OH + 876 1 587 582 581 585 # HC-CT-CT-OH + 877 1 588 582 581 583 # HC-CT-CT-OH + 878 2 588 582 581 584 # HC-CT-CT-HC + 879 2 588 582 581 585 # HC-CT-CT-HC + 880 4 589 583 581 582 # CT-CT-OH-HO + 881 5 589 583 581 584 # HC-CT-OH-HO + 882 5 589 583 581 585 # HC-CT-OH-HO + 883 4 590 587 582 581 # CT-CT-OH-HO + 884 5 590 587 582 586 # HC-CT-OH-HO + 885 5 590 587 582 588 # HC-CT-OH-HO + 886 1 596 592 591 593 # HC-CT-CT-OH + 887 2 596 592 591 594 # HC-CT-CT-HC + 888 2 596 592 591 595 # HC-CT-CT-HC + 889 3 597 592 591 593 # OH-CT-CT-OH + 890 1 597 592 591 594 # HC-CT-CT-OH + 891 1 597 592 591 595 # HC-CT-CT-OH + 892 1 598 592 591 593 # HC-CT-CT-OH + 893 2 598 592 591 594 # HC-CT-CT-HC + 894 2 598 592 591 595 # HC-CT-CT-HC + 895 4 599 593 591 592 # CT-CT-OH-HO + 896 5 599 593 591 594 # HC-CT-OH-HO + 897 5 599 593 591 595 # HC-CT-OH-HO + 898 4 600 597 592 591 # CT-CT-OH-HO + 899 5 600 597 592 596 # HC-CT-OH-HO + 900 5 600 597 592 598 # HC-CT-OH-HO + 901 1 606 602 601 603 # HC-CT-CT-OH + 902 2 606 602 601 604 # HC-CT-CT-HC + 903 2 606 602 601 605 # HC-CT-CT-HC + 904 3 607 602 601 603 # OH-CT-CT-OH + 905 1 607 602 601 604 # HC-CT-CT-OH + 906 1 607 602 601 605 # HC-CT-CT-OH + 907 1 608 602 601 603 # HC-CT-CT-OH + 908 2 608 602 601 604 # HC-CT-CT-HC + 909 2 608 602 601 605 # HC-CT-CT-HC + 910 4 609 603 601 602 # CT-CT-OH-HO + 911 5 609 603 601 604 # HC-CT-OH-HO + 912 5 609 603 601 605 # HC-CT-OH-HO + 913 4 610 607 602 601 # CT-CT-OH-HO + 914 5 610 607 602 606 # HC-CT-OH-HO + 915 5 610 607 602 608 # HC-CT-OH-HO + 916 1 616 612 611 613 # HC-CT-CT-OH + 917 2 616 612 611 614 # HC-CT-CT-HC + 918 2 616 612 611 615 # HC-CT-CT-HC + 919 3 617 612 611 613 # OH-CT-CT-OH + 920 1 617 612 611 614 # HC-CT-CT-OH + 921 1 617 612 611 615 # HC-CT-CT-OH + 922 1 618 612 611 613 # HC-CT-CT-OH + 923 2 618 612 611 614 # HC-CT-CT-HC + 924 2 618 612 611 615 # HC-CT-CT-HC + 925 4 619 613 611 612 # CT-CT-OH-HO + 926 5 619 613 611 614 # HC-CT-OH-HO + 927 5 619 613 611 615 # HC-CT-OH-HO + 928 4 620 617 612 611 # CT-CT-OH-HO + 929 5 620 617 612 616 # HC-CT-OH-HO + 930 5 620 617 612 618 # HC-CT-OH-HO + 931 1 626 622 621 623 # HC-CT-CT-OH + 932 2 626 622 621 624 # HC-CT-CT-HC + 933 2 626 622 621 625 # HC-CT-CT-HC + 934 3 627 622 621 623 # OH-CT-CT-OH + 935 1 627 622 621 624 # HC-CT-CT-OH + 936 1 627 622 621 625 # HC-CT-CT-OH + 937 1 628 622 621 623 # HC-CT-CT-OH + 938 2 628 622 621 624 # HC-CT-CT-HC + 939 2 628 622 621 625 # HC-CT-CT-HC + 940 4 629 623 621 622 # CT-CT-OH-HO + 941 5 629 623 621 624 # HC-CT-OH-HO + 942 5 629 623 621 625 # HC-CT-OH-HO + 943 4 630 627 622 621 # CT-CT-OH-HO + 944 5 630 627 622 626 # HC-CT-OH-HO + 945 5 630 627 622 628 # HC-CT-OH-HO + 946 1 636 632 631 633 # HC-CT-CT-OH + 947 2 636 632 631 634 # HC-CT-CT-HC + 948 2 636 632 631 635 # HC-CT-CT-HC + 949 3 637 632 631 633 # OH-CT-CT-OH + 950 1 637 632 631 634 # HC-CT-CT-OH + 951 1 637 632 631 635 # HC-CT-CT-OH + 952 1 638 632 631 633 # HC-CT-CT-OH + 953 2 638 632 631 634 # HC-CT-CT-HC + 954 2 638 632 631 635 # HC-CT-CT-HC + 955 4 639 633 631 632 # CT-CT-OH-HO + 956 5 639 633 631 634 # HC-CT-OH-HO + 957 5 639 633 631 635 # HC-CT-OH-HO + 958 4 640 637 632 631 # CT-CT-OH-HO + 959 5 640 637 632 636 # HC-CT-OH-HO + 960 5 640 637 632 638 # HC-CT-OH-HO + 961 1 646 642 641 643 # HC-CT-CT-OH + 962 2 646 642 641 644 # HC-CT-CT-HC + 963 2 646 642 641 645 # HC-CT-CT-HC + 964 3 647 642 641 643 # OH-CT-CT-OH + 965 1 647 642 641 644 # HC-CT-CT-OH + 966 1 647 642 641 645 # HC-CT-CT-OH + 967 1 648 642 641 643 # HC-CT-CT-OH + 968 2 648 642 641 644 # HC-CT-CT-HC + 969 2 648 642 641 645 # HC-CT-CT-HC + 970 4 649 643 641 642 # CT-CT-OH-HO + 971 5 649 643 641 644 # HC-CT-OH-HO + 972 5 649 643 641 645 # HC-CT-OH-HO + 973 4 650 647 642 641 # CT-CT-OH-HO + 974 5 650 647 642 646 # HC-CT-OH-HO + 975 5 650 647 642 648 # HC-CT-OH-HO + 976 1 656 652 651 653 # HC-CT-CT-OH + 977 2 656 652 651 654 # HC-CT-CT-HC + 978 2 656 652 651 655 # HC-CT-CT-HC + 979 3 657 652 651 653 # OH-CT-CT-OH + 980 1 657 652 651 654 # HC-CT-CT-OH + 981 1 657 652 651 655 # HC-CT-CT-OH + 982 1 658 652 651 653 # HC-CT-CT-OH + 983 2 658 652 651 654 # HC-CT-CT-HC + 984 2 658 652 651 655 # HC-CT-CT-HC + 985 4 659 653 651 652 # CT-CT-OH-HO + 986 5 659 653 651 654 # HC-CT-OH-HO + 987 5 659 653 651 655 # HC-CT-OH-HO + 988 4 660 657 652 651 # CT-CT-OH-HO + 989 5 660 657 652 656 # HC-CT-OH-HO + 990 5 660 657 652 658 # HC-CT-OH-HO + 991 1 666 662 661 663 # HC-CT-CT-OH + 992 2 666 662 661 664 # HC-CT-CT-HC + 993 2 666 662 661 665 # HC-CT-CT-HC + 994 3 667 662 661 663 # OH-CT-CT-OH + 995 1 667 662 661 664 # HC-CT-CT-OH + 996 1 667 662 661 665 # HC-CT-CT-OH + 997 1 668 662 661 663 # HC-CT-CT-OH + 998 2 668 662 661 664 # HC-CT-CT-HC + 999 2 668 662 661 665 # HC-CT-CT-HC + 1000 4 669 663 661 662 # CT-CT-OH-HO + 1001 5 669 663 661 664 # HC-CT-OH-HO + 1002 5 669 663 661 665 # HC-CT-OH-HO + 1003 4 670 667 662 661 # CT-CT-OH-HO + 1004 5 670 667 662 666 # HC-CT-OH-HO + 1005 5 670 667 662 668 # HC-CT-OH-HO + 1006 1 676 672 671 673 # HC-CT-CT-OH + 1007 2 676 672 671 674 # HC-CT-CT-HC + 1008 2 676 672 671 675 # HC-CT-CT-HC + 1009 3 677 672 671 673 # OH-CT-CT-OH + 1010 1 677 672 671 674 # HC-CT-CT-OH + 1011 1 677 672 671 675 # HC-CT-CT-OH + 1012 1 678 672 671 673 # HC-CT-CT-OH + 1013 2 678 672 671 674 # HC-CT-CT-HC + 1014 2 678 672 671 675 # HC-CT-CT-HC + 1015 4 679 673 671 672 # CT-CT-OH-HO + 1016 5 679 673 671 674 # HC-CT-OH-HO + 1017 5 679 673 671 675 # HC-CT-OH-HO + 1018 4 680 677 672 671 # CT-CT-OH-HO + 1019 5 680 677 672 676 # HC-CT-OH-HO + 1020 5 680 677 672 678 # HC-CT-OH-HO + 1021 1 686 682 681 683 # HC-CT-CT-OH + 1022 2 686 682 681 684 # HC-CT-CT-HC + 1023 2 686 682 681 685 # HC-CT-CT-HC + 1024 3 687 682 681 683 # OH-CT-CT-OH + 1025 1 687 682 681 684 # HC-CT-CT-OH + 1026 1 687 682 681 685 # HC-CT-CT-OH + 1027 1 688 682 681 683 # HC-CT-CT-OH + 1028 2 688 682 681 684 # HC-CT-CT-HC + 1029 2 688 682 681 685 # HC-CT-CT-HC + 1030 4 689 683 681 682 # CT-CT-OH-HO + 1031 5 689 683 681 684 # HC-CT-OH-HO + 1032 5 689 683 681 685 # HC-CT-OH-HO + 1033 4 690 687 682 681 # CT-CT-OH-HO + 1034 5 690 687 682 686 # HC-CT-OH-HO + 1035 5 690 687 682 688 # HC-CT-OH-HO + 1036 1 696 692 691 693 # HC-CT-CT-OH + 1037 2 696 692 691 694 # HC-CT-CT-HC + 1038 2 696 692 691 695 # HC-CT-CT-HC + 1039 3 697 692 691 693 # OH-CT-CT-OH + 1040 1 697 692 691 694 # HC-CT-CT-OH + 1041 1 697 692 691 695 # HC-CT-CT-OH + 1042 1 698 692 691 693 # HC-CT-CT-OH + 1043 2 698 692 691 694 # HC-CT-CT-HC + 1044 2 698 692 691 695 # HC-CT-CT-HC + 1045 4 699 693 691 692 # CT-CT-OH-HO + 1046 5 699 693 691 694 # HC-CT-OH-HO + 1047 5 699 693 691 695 # HC-CT-OH-HO + 1048 4 700 697 692 691 # CT-CT-OH-HO + 1049 5 700 697 692 696 # HC-CT-OH-HO + 1050 5 700 697 692 698 # HC-CT-OH-HO + 1051 1 706 702 701 703 # HC-CT-CT-OH + 1052 2 706 702 701 704 # HC-CT-CT-HC + 1053 2 706 702 701 705 # HC-CT-CT-HC + 1054 3 707 702 701 703 # OH-CT-CT-OH + 1055 1 707 702 701 704 # HC-CT-CT-OH + 1056 1 707 702 701 705 # HC-CT-CT-OH + 1057 1 708 702 701 703 # HC-CT-CT-OH + 1058 2 708 702 701 704 # HC-CT-CT-HC + 1059 2 708 702 701 705 # HC-CT-CT-HC + 1060 4 709 703 701 702 # CT-CT-OH-HO + 1061 5 709 703 701 704 # HC-CT-OH-HO + 1062 5 709 703 701 705 # HC-CT-OH-HO + 1063 4 710 707 702 701 # CT-CT-OH-HO + 1064 5 710 707 702 706 # HC-CT-OH-HO + 1065 5 710 707 702 708 # HC-CT-OH-HO + 1066 1 716 712 711 713 # HC-CT-CT-OH + 1067 2 716 712 711 714 # HC-CT-CT-HC + 1068 2 716 712 711 715 # HC-CT-CT-HC + 1069 3 717 712 711 713 # OH-CT-CT-OH + 1070 1 717 712 711 714 # HC-CT-CT-OH + 1071 1 717 712 711 715 # HC-CT-CT-OH + 1072 1 718 712 711 713 # HC-CT-CT-OH + 1073 2 718 712 711 714 # HC-CT-CT-HC + 1074 2 718 712 711 715 # HC-CT-CT-HC + 1075 4 719 713 711 712 # CT-CT-OH-HO + 1076 5 719 713 711 714 # HC-CT-OH-HO + 1077 5 719 713 711 715 # HC-CT-OH-HO + 1078 4 720 717 712 711 # CT-CT-OH-HO + 1079 5 720 717 712 716 # HC-CT-OH-HO + 1080 5 720 717 712 718 # HC-CT-OH-HO + 1081 1 726 722 721 723 # HC-CT-CT-OH + 1082 2 726 722 721 724 # HC-CT-CT-HC + 1083 2 726 722 721 725 # HC-CT-CT-HC + 1084 3 727 722 721 723 # OH-CT-CT-OH + 1085 1 727 722 721 724 # HC-CT-CT-OH + 1086 1 727 722 721 725 # HC-CT-CT-OH + 1087 1 728 722 721 723 # HC-CT-CT-OH + 1088 2 728 722 721 724 # HC-CT-CT-HC + 1089 2 728 722 721 725 # HC-CT-CT-HC + 1090 4 729 723 721 722 # CT-CT-OH-HO + 1091 5 729 723 721 724 # HC-CT-OH-HO + 1092 5 729 723 721 725 # HC-CT-OH-HO + 1093 4 730 727 722 721 # CT-CT-OH-HO + 1094 5 730 727 722 726 # HC-CT-OH-HO + 1095 5 730 727 722 728 # HC-CT-OH-HO + 1096 1 736 732 731 733 # HC-CT-CT-OH + 1097 2 736 732 731 734 # HC-CT-CT-HC + 1098 2 736 732 731 735 # HC-CT-CT-HC + 1099 3 737 732 731 733 # OH-CT-CT-OH + 1100 1 737 732 731 734 # HC-CT-CT-OH + 1101 1 737 732 731 735 # HC-CT-CT-OH + 1102 1 738 732 731 733 # HC-CT-CT-OH + 1103 2 738 732 731 734 # HC-CT-CT-HC + 1104 2 738 732 731 735 # HC-CT-CT-HC + 1105 4 739 733 731 732 # CT-CT-OH-HO + 1106 5 739 733 731 734 # HC-CT-OH-HO + 1107 5 739 733 731 735 # HC-CT-OH-HO + 1108 4 740 737 732 731 # CT-CT-OH-HO + 1109 5 740 737 732 736 # HC-CT-OH-HO + 1110 5 740 737 732 738 # HC-CT-OH-HO + 1111 1 746 742 741 743 # HC-CT-CT-OH + 1112 2 746 742 741 744 # HC-CT-CT-HC + 1113 2 746 742 741 745 # HC-CT-CT-HC + 1114 3 747 742 741 743 # OH-CT-CT-OH + 1115 1 747 742 741 744 # HC-CT-CT-OH + 1116 1 747 742 741 745 # HC-CT-CT-OH + 1117 1 748 742 741 743 # HC-CT-CT-OH + 1118 2 748 742 741 744 # HC-CT-CT-HC + 1119 2 748 742 741 745 # HC-CT-CT-HC + 1120 4 749 743 741 742 # CT-CT-OH-HO + 1121 5 749 743 741 744 # HC-CT-OH-HO + 1122 5 749 743 741 745 # HC-CT-OH-HO + 1123 4 750 747 742 741 # CT-CT-OH-HO + 1124 5 750 747 742 746 # HC-CT-OH-HO + 1125 5 750 747 742 748 # HC-CT-OH-HO + 1126 1 756 752 751 753 # HC-CT-CT-OH + 1127 2 756 752 751 754 # HC-CT-CT-HC + 1128 2 756 752 751 755 # HC-CT-CT-HC + 1129 3 757 752 751 753 # OH-CT-CT-OH + 1130 1 757 752 751 754 # HC-CT-CT-OH + 1131 1 757 752 751 755 # HC-CT-CT-OH + 1132 1 758 752 751 753 # HC-CT-CT-OH + 1133 2 758 752 751 754 # HC-CT-CT-HC + 1134 2 758 752 751 755 # HC-CT-CT-HC + 1135 4 759 753 751 752 # CT-CT-OH-HO + 1136 5 759 753 751 754 # HC-CT-OH-HO + 1137 5 759 753 751 755 # HC-CT-OH-HO + 1138 4 760 757 752 751 # CT-CT-OH-HO + 1139 5 760 757 752 756 # HC-CT-OH-HO + 1140 5 760 757 752 758 # HC-CT-OH-HO + 1141 1 766 762 761 763 # HC-CT-CT-OH + 1142 2 766 762 761 764 # HC-CT-CT-HC + 1143 2 766 762 761 765 # HC-CT-CT-HC + 1144 3 767 762 761 763 # OH-CT-CT-OH + 1145 1 767 762 761 764 # HC-CT-CT-OH + 1146 1 767 762 761 765 # HC-CT-CT-OH + 1147 1 768 762 761 763 # HC-CT-CT-OH + 1148 2 768 762 761 764 # HC-CT-CT-HC + 1149 2 768 762 761 765 # HC-CT-CT-HC + 1150 4 769 763 761 762 # CT-CT-OH-HO + 1151 5 769 763 761 764 # HC-CT-OH-HO + 1152 5 769 763 761 765 # HC-CT-OH-HO + 1153 4 770 767 762 761 # CT-CT-OH-HO + 1154 5 770 767 762 766 # HC-CT-OH-HO + 1155 5 770 767 762 768 # HC-CT-OH-HO + 1156 1 776 772 771 773 # HC-CT-CT-OH + 1157 2 776 772 771 774 # HC-CT-CT-HC + 1158 2 776 772 771 775 # HC-CT-CT-HC + 1159 3 777 772 771 773 # OH-CT-CT-OH + 1160 1 777 772 771 774 # HC-CT-CT-OH + 1161 1 777 772 771 775 # HC-CT-CT-OH + 1162 1 778 772 771 773 # HC-CT-CT-OH + 1163 2 778 772 771 774 # HC-CT-CT-HC + 1164 2 778 772 771 775 # HC-CT-CT-HC + 1165 4 779 773 771 772 # CT-CT-OH-HO + 1166 5 779 773 771 774 # HC-CT-OH-HO + 1167 5 779 773 771 775 # HC-CT-OH-HO + 1168 4 780 777 772 771 # CT-CT-OH-HO + 1169 5 780 777 772 776 # HC-CT-OH-HO + 1170 5 780 777 772 778 # HC-CT-OH-HO + 1171 1 786 782 781 783 # HC-CT-CT-OH + 1172 2 786 782 781 784 # HC-CT-CT-HC + 1173 2 786 782 781 785 # HC-CT-CT-HC + 1174 3 787 782 781 783 # OH-CT-CT-OH + 1175 1 787 782 781 784 # HC-CT-CT-OH + 1176 1 787 782 781 785 # HC-CT-CT-OH + 1177 1 788 782 781 783 # HC-CT-CT-OH + 1178 2 788 782 781 784 # HC-CT-CT-HC + 1179 2 788 782 781 785 # HC-CT-CT-HC + 1180 4 789 783 781 782 # CT-CT-OH-HO + 1181 5 789 783 781 784 # HC-CT-OH-HO + 1182 5 789 783 781 785 # HC-CT-OH-HO + 1183 4 790 787 782 781 # CT-CT-OH-HO + 1184 5 790 787 782 786 # HC-CT-OH-HO + 1185 5 790 787 782 788 # HC-CT-OH-HO + 1186 1 796 792 791 793 # HC-CT-CT-OH + 1187 2 796 792 791 794 # HC-CT-CT-HC + 1188 2 796 792 791 795 # HC-CT-CT-HC + 1189 3 797 792 791 793 # OH-CT-CT-OH + 1190 1 797 792 791 794 # HC-CT-CT-OH + 1191 1 797 792 791 795 # HC-CT-CT-OH + 1192 1 798 792 791 793 # HC-CT-CT-OH + 1193 2 798 792 791 794 # HC-CT-CT-HC + 1194 2 798 792 791 795 # HC-CT-CT-HC + 1195 4 799 793 791 792 # CT-CT-OH-HO + 1196 5 799 793 791 794 # HC-CT-OH-HO + 1197 5 799 793 791 795 # HC-CT-OH-HO + 1198 4 800 797 792 791 # CT-CT-OH-HO + 1199 5 800 797 792 796 # HC-CT-OH-HO + 1200 5 800 797 792 798 # HC-CT-OH-HO + 1201 1 806 802 801 803 # HC-CT-CT-OH + 1202 2 806 802 801 804 # HC-CT-CT-HC + 1203 2 806 802 801 805 # HC-CT-CT-HC + 1204 3 807 802 801 803 # OH-CT-CT-OH + 1205 1 807 802 801 804 # HC-CT-CT-OH + 1206 1 807 802 801 805 # HC-CT-CT-OH + 1207 1 808 802 801 803 # HC-CT-CT-OH + 1208 2 808 802 801 804 # HC-CT-CT-HC + 1209 2 808 802 801 805 # HC-CT-CT-HC + 1210 4 809 803 801 802 # CT-CT-OH-HO + 1211 5 809 803 801 804 # HC-CT-OH-HO + 1212 5 809 803 801 805 # HC-CT-OH-HO + 1213 4 810 807 802 801 # CT-CT-OH-HO + 1214 5 810 807 802 806 # HC-CT-OH-HO + 1215 5 810 807 802 808 # HC-CT-OH-HO + 1216 1 816 812 811 813 # HC-CT-CT-OH + 1217 2 816 812 811 814 # HC-CT-CT-HC + 1218 2 816 812 811 815 # HC-CT-CT-HC + 1219 3 817 812 811 813 # OH-CT-CT-OH + 1220 1 817 812 811 814 # HC-CT-CT-OH + 1221 1 817 812 811 815 # HC-CT-CT-OH + 1222 1 818 812 811 813 # HC-CT-CT-OH + 1223 2 818 812 811 814 # HC-CT-CT-HC + 1224 2 818 812 811 815 # HC-CT-CT-HC + 1225 4 819 813 811 812 # CT-CT-OH-HO + 1226 5 819 813 811 814 # HC-CT-OH-HO + 1227 5 819 813 811 815 # HC-CT-OH-HO + 1228 4 820 817 812 811 # CT-CT-OH-HO + 1229 5 820 817 812 816 # HC-CT-OH-HO + 1230 5 820 817 812 818 # HC-CT-OH-HO + 1231 1 826 822 821 823 # HC-CT-CT-OH + 1232 2 826 822 821 824 # HC-CT-CT-HC + 1233 2 826 822 821 825 # HC-CT-CT-HC + 1234 3 827 822 821 823 # OH-CT-CT-OH + 1235 1 827 822 821 824 # HC-CT-CT-OH + 1236 1 827 822 821 825 # HC-CT-CT-OH + 1237 1 828 822 821 823 # HC-CT-CT-OH + 1238 2 828 822 821 824 # HC-CT-CT-HC + 1239 2 828 822 821 825 # HC-CT-CT-HC + 1240 4 829 823 821 822 # CT-CT-OH-HO + 1241 5 829 823 821 824 # HC-CT-OH-HO + 1242 5 829 823 821 825 # HC-CT-OH-HO + 1243 4 830 827 822 821 # CT-CT-OH-HO + 1244 5 830 827 822 826 # HC-CT-OH-HO + 1245 5 830 827 822 828 # HC-CT-OH-HO + 1246 1 836 832 831 833 # HC-CT-CT-OH + 1247 2 836 832 831 834 # HC-CT-CT-HC + 1248 2 836 832 831 835 # HC-CT-CT-HC + 1249 3 837 832 831 833 # OH-CT-CT-OH + 1250 1 837 832 831 834 # HC-CT-CT-OH + 1251 1 837 832 831 835 # HC-CT-CT-OH + 1252 1 838 832 831 833 # HC-CT-CT-OH + 1253 2 838 832 831 834 # HC-CT-CT-HC + 1254 2 838 832 831 835 # HC-CT-CT-HC + 1255 4 839 833 831 832 # CT-CT-OH-HO + 1256 5 839 833 831 834 # HC-CT-OH-HO + 1257 5 839 833 831 835 # HC-CT-OH-HO + 1258 4 840 837 832 831 # CT-CT-OH-HO + 1259 5 840 837 832 836 # HC-CT-OH-HO + 1260 5 840 837 832 838 # HC-CT-OH-HO + 1261 1 846 842 841 843 # HC-CT-CT-OH + 1262 2 846 842 841 844 # HC-CT-CT-HC + 1263 2 846 842 841 845 # HC-CT-CT-HC + 1264 3 847 842 841 843 # OH-CT-CT-OH + 1265 1 847 842 841 844 # HC-CT-CT-OH + 1266 1 847 842 841 845 # HC-CT-CT-OH + 1267 1 848 842 841 843 # HC-CT-CT-OH + 1268 2 848 842 841 844 # HC-CT-CT-HC + 1269 2 848 842 841 845 # HC-CT-CT-HC + 1270 4 849 843 841 842 # CT-CT-OH-HO + 1271 5 849 843 841 844 # HC-CT-OH-HO + 1272 5 849 843 841 845 # HC-CT-OH-HO + 1273 4 850 847 842 841 # CT-CT-OH-HO + 1274 5 850 847 842 846 # HC-CT-OH-HO + 1275 5 850 847 842 848 # HC-CT-OH-HO + 1276 1 856 852 851 853 # HC-CT-CT-OH + 1277 2 856 852 851 854 # HC-CT-CT-HC + 1278 2 856 852 851 855 # HC-CT-CT-HC + 1279 3 857 852 851 853 # OH-CT-CT-OH + 1280 1 857 852 851 854 # HC-CT-CT-OH + 1281 1 857 852 851 855 # HC-CT-CT-OH + 1282 1 858 852 851 853 # HC-CT-CT-OH + 1283 2 858 852 851 854 # HC-CT-CT-HC + 1284 2 858 852 851 855 # HC-CT-CT-HC + 1285 4 859 853 851 852 # CT-CT-OH-HO + 1286 5 859 853 851 854 # HC-CT-OH-HO + 1287 5 859 853 851 855 # HC-CT-OH-HO + 1288 4 860 857 852 851 # CT-CT-OH-HO + 1289 5 860 857 852 856 # HC-CT-OH-HO + 1290 5 860 857 852 858 # HC-CT-OH-HO + 1291 1 866 862 861 863 # HC-CT-CT-OH + 1292 2 866 862 861 864 # HC-CT-CT-HC + 1293 2 866 862 861 865 # HC-CT-CT-HC + 1294 3 867 862 861 863 # OH-CT-CT-OH + 1295 1 867 862 861 864 # HC-CT-CT-OH + 1296 1 867 862 861 865 # HC-CT-CT-OH + 1297 1 868 862 861 863 # HC-CT-CT-OH + 1298 2 868 862 861 864 # HC-CT-CT-HC + 1299 2 868 862 861 865 # HC-CT-CT-HC + 1300 4 869 863 861 862 # CT-CT-OH-HO + 1301 5 869 863 861 864 # HC-CT-OH-HO + 1302 5 869 863 861 865 # HC-CT-OH-HO + 1303 4 870 867 862 861 # CT-CT-OH-HO + 1304 5 870 867 862 866 # HC-CT-OH-HO + 1305 5 870 867 862 868 # HC-CT-OH-HO + 1306 1 876 872 871 873 # HC-CT-CT-OH + 1307 2 876 872 871 874 # HC-CT-CT-HC + 1308 2 876 872 871 875 # HC-CT-CT-HC + 1309 3 877 872 871 873 # OH-CT-CT-OH + 1310 1 877 872 871 874 # HC-CT-CT-OH + 1311 1 877 872 871 875 # HC-CT-CT-OH + 1312 1 878 872 871 873 # HC-CT-CT-OH + 1313 2 878 872 871 874 # HC-CT-CT-HC + 1314 2 878 872 871 875 # HC-CT-CT-HC + 1315 4 879 873 871 872 # CT-CT-OH-HO + 1316 5 879 873 871 874 # HC-CT-OH-HO + 1317 5 879 873 871 875 # HC-CT-OH-HO + 1318 4 880 877 872 871 # CT-CT-OH-HO + 1319 5 880 877 872 876 # HC-CT-OH-HO + 1320 5 880 877 872 878 # HC-CT-OH-HO + 1321 1 886 882 881 883 # HC-CT-CT-OH + 1322 2 886 882 881 884 # HC-CT-CT-HC + 1323 2 886 882 881 885 # HC-CT-CT-HC + 1324 3 887 882 881 883 # OH-CT-CT-OH + 1325 1 887 882 881 884 # HC-CT-CT-OH + 1326 1 887 882 881 885 # HC-CT-CT-OH + 1327 1 888 882 881 883 # HC-CT-CT-OH + 1328 2 888 882 881 884 # HC-CT-CT-HC + 1329 2 888 882 881 885 # HC-CT-CT-HC + 1330 4 889 883 881 882 # CT-CT-OH-HO + 1331 5 889 883 881 884 # HC-CT-OH-HO + 1332 5 889 883 881 885 # HC-CT-OH-HO + 1333 4 890 887 882 881 # CT-CT-OH-HO + 1334 5 890 887 882 886 # HC-CT-OH-HO + 1335 5 890 887 882 888 # HC-CT-OH-HO + 1336 1 896 892 891 893 # HC-CT-CT-OH + 1337 2 896 892 891 894 # HC-CT-CT-HC + 1338 2 896 892 891 895 # HC-CT-CT-HC + 1339 3 897 892 891 893 # OH-CT-CT-OH + 1340 1 897 892 891 894 # HC-CT-CT-OH + 1341 1 897 892 891 895 # HC-CT-CT-OH + 1342 1 898 892 891 893 # HC-CT-CT-OH + 1343 2 898 892 891 894 # HC-CT-CT-HC + 1344 2 898 892 891 895 # HC-CT-CT-HC + 1345 4 899 893 891 892 # CT-CT-OH-HO + 1346 5 899 893 891 894 # HC-CT-OH-HO + 1347 5 899 893 891 895 # HC-CT-OH-HO + 1348 4 900 897 892 891 # CT-CT-OH-HO + 1349 5 900 897 892 896 # HC-CT-OH-HO + 1350 5 900 897 892 898 # HC-CT-OH-HO + 1351 1 906 902 901 903 # HC-CT-CT-OH + 1352 2 906 902 901 904 # HC-CT-CT-HC + 1353 2 906 902 901 905 # HC-CT-CT-HC + 1354 3 907 902 901 903 # OH-CT-CT-OH + 1355 1 907 902 901 904 # HC-CT-CT-OH + 1356 1 907 902 901 905 # HC-CT-CT-OH + 1357 1 908 902 901 903 # HC-CT-CT-OH + 1358 2 908 902 901 904 # HC-CT-CT-HC + 1359 2 908 902 901 905 # HC-CT-CT-HC + 1360 4 909 903 901 902 # CT-CT-OH-HO + 1361 5 909 903 901 904 # HC-CT-OH-HO + 1362 5 909 903 901 905 # HC-CT-OH-HO + 1363 4 910 907 902 901 # CT-CT-OH-HO + 1364 5 910 907 902 906 # HC-CT-OH-HO + 1365 5 910 907 902 908 # HC-CT-OH-HO + 1366 1 916 912 911 913 # HC-CT-CT-OH + 1367 2 916 912 911 914 # HC-CT-CT-HC + 1368 2 916 912 911 915 # HC-CT-CT-HC + 1369 3 917 912 911 913 # OH-CT-CT-OH + 1370 1 917 912 911 914 # HC-CT-CT-OH + 1371 1 917 912 911 915 # HC-CT-CT-OH + 1372 1 918 912 911 913 # HC-CT-CT-OH + 1373 2 918 912 911 914 # HC-CT-CT-HC + 1374 2 918 912 911 915 # HC-CT-CT-HC + 1375 4 919 913 911 912 # CT-CT-OH-HO + 1376 5 919 913 911 914 # HC-CT-OH-HO + 1377 5 919 913 911 915 # HC-CT-OH-HO + 1378 4 920 917 912 911 # CT-CT-OH-HO + 1379 5 920 917 912 916 # HC-CT-OH-HO + 1380 5 920 917 912 918 # HC-CT-OH-HO + 1381 1 926 922 921 923 # HC-CT-CT-OH + 1382 2 926 922 921 924 # HC-CT-CT-HC + 1383 2 926 922 921 925 # HC-CT-CT-HC + 1384 3 927 922 921 923 # OH-CT-CT-OH + 1385 1 927 922 921 924 # HC-CT-CT-OH + 1386 1 927 922 921 925 # HC-CT-CT-OH + 1387 1 928 922 921 923 # HC-CT-CT-OH + 1388 2 928 922 921 924 # HC-CT-CT-HC + 1389 2 928 922 921 925 # HC-CT-CT-HC + 1390 4 929 923 921 922 # CT-CT-OH-HO + 1391 5 929 923 921 924 # HC-CT-OH-HO + 1392 5 929 923 921 925 # HC-CT-OH-HO + 1393 4 930 927 922 921 # CT-CT-OH-HO + 1394 5 930 927 922 926 # HC-CT-OH-HO + 1395 5 930 927 922 928 # HC-CT-OH-HO + 1396 1 936 932 931 933 # HC-CT-CT-OH + 1397 2 936 932 931 934 # HC-CT-CT-HC + 1398 2 936 932 931 935 # HC-CT-CT-HC + 1399 3 937 932 931 933 # OH-CT-CT-OH + 1400 1 937 932 931 934 # HC-CT-CT-OH + 1401 1 937 932 931 935 # HC-CT-CT-OH + 1402 1 938 932 931 933 # HC-CT-CT-OH + 1403 2 938 932 931 934 # HC-CT-CT-HC + 1404 2 938 932 931 935 # HC-CT-CT-HC + 1405 4 939 933 931 932 # CT-CT-OH-HO + 1406 5 939 933 931 934 # HC-CT-OH-HO + 1407 5 939 933 931 935 # HC-CT-OH-HO + 1408 4 940 937 932 931 # CT-CT-OH-HO + 1409 5 940 937 932 936 # HC-CT-OH-HO + 1410 5 940 937 932 938 # HC-CT-OH-HO + 1411 1 946 942 941 943 # HC-CT-CT-OH + 1412 2 946 942 941 944 # HC-CT-CT-HC + 1413 2 946 942 941 945 # HC-CT-CT-HC + 1414 3 947 942 941 943 # OH-CT-CT-OH + 1415 1 947 942 941 944 # HC-CT-CT-OH + 1416 1 947 942 941 945 # HC-CT-CT-OH + 1417 1 948 942 941 943 # HC-CT-CT-OH + 1418 2 948 942 941 944 # HC-CT-CT-HC + 1419 2 948 942 941 945 # HC-CT-CT-HC + 1420 4 949 943 941 942 # CT-CT-OH-HO + 1421 5 949 943 941 944 # HC-CT-OH-HO + 1422 5 949 943 941 945 # HC-CT-OH-HO + 1423 4 950 947 942 941 # CT-CT-OH-HO + 1424 5 950 947 942 946 # HC-CT-OH-HO + 1425 5 950 947 942 948 # HC-CT-OH-HO + 1426 1 956 952 951 953 # HC-CT-CT-OH + 1427 2 956 952 951 954 # HC-CT-CT-HC + 1428 2 956 952 951 955 # HC-CT-CT-HC + 1429 3 957 952 951 953 # OH-CT-CT-OH + 1430 1 957 952 951 954 # HC-CT-CT-OH + 1431 1 957 952 951 955 # HC-CT-CT-OH + 1432 1 958 952 951 953 # HC-CT-CT-OH + 1433 2 958 952 951 954 # HC-CT-CT-HC + 1434 2 958 952 951 955 # HC-CT-CT-HC + 1435 4 959 953 951 952 # CT-CT-OH-HO + 1436 5 959 953 951 954 # HC-CT-OH-HO + 1437 5 959 953 951 955 # HC-CT-OH-HO + 1438 4 960 957 952 951 # CT-CT-OH-HO + 1439 5 960 957 952 956 # HC-CT-OH-HO + 1440 5 960 957 952 958 # HC-CT-OH-HO + 1441 1 966 962 961 963 # HC-CT-CT-OH + 1442 2 966 962 961 964 # HC-CT-CT-HC + 1443 2 966 962 961 965 # HC-CT-CT-HC + 1444 3 967 962 961 963 # OH-CT-CT-OH + 1445 1 967 962 961 964 # HC-CT-CT-OH + 1446 1 967 962 961 965 # HC-CT-CT-OH + 1447 1 968 962 961 963 # HC-CT-CT-OH + 1448 2 968 962 961 964 # HC-CT-CT-HC + 1449 2 968 962 961 965 # HC-CT-CT-HC + 1450 4 969 963 961 962 # CT-CT-OH-HO + 1451 5 969 963 961 964 # HC-CT-OH-HO + 1452 5 969 963 961 965 # HC-CT-OH-HO + 1453 4 970 967 962 961 # CT-CT-OH-HO + 1454 5 970 967 962 966 # HC-CT-OH-HO + 1455 5 970 967 962 968 # HC-CT-OH-HO + 1456 1 976 972 971 973 # HC-CT-CT-OH + 1457 2 976 972 971 974 # HC-CT-CT-HC + 1458 2 976 972 971 975 # HC-CT-CT-HC + 1459 3 977 972 971 973 # OH-CT-CT-OH + 1460 1 977 972 971 974 # HC-CT-CT-OH + 1461 1 977 972 971 975 # HC-CT-CT-OH + 1462 1 978 972 971 973 # HC-CT-CT-OH + 1463 2 978 972 971 974 # HC-CT-CT-HC + 1464 2 978 972 971 975 # HC-CT-CT-HC + 1465 4 979 973 971 972 # CT-CT-OH-HO + 1466 5 979 973 971 974 # HC-CT-OH-HO + 1467 5 979 973 971 975 # HC-CT-OH-HO + 1468 4 980 977 972 971 # CT-CT-OH-HO + 1469 5 980 977 972 976 # HC-CT-OH-HO + 1470 5 980 977 972 978 # HC-CT-OH-HO + 1471 1 986 982 981 983 # HC-CT-CT-OH + 1472 2 986 982 981 984 # HC-CT-CT-HC + 1473 2 986 982 981 985 # HC-CT-CT-HC + 1474 3 987 982 981 983 # OH-CT-CT-OH + 1475 1 987 982 981 984 # HC-CT-CT-OH + 1476 1 987 982 981 985 # HC-CT-CT-OH + 1477 1 988 982 981 983 # HC-CT-CT-OH + 1478 2 988 982 981 984 # HC-CT-CT-HC + 1479 2 988 982 981 985 # HC-CT-CT-HC + 1480 4 989 983 981 982 # CT-CT-OH-HO + 1481 5 989 983 981 984 # HC-CT-OH-HO + 1482 5 989 983 981 985 # HC-CT-OH-HO + 1483 4 990 987 982 981 # CT-CT-OH-HO + 1484 5 990 987 982 986 # HC-CT-OH-HO + 1485 5 990 987 982 988 # HC-CT-OH-HO + 1486 1 996 992 991 993 # HC-CT-CT-OH + 1487 2 996 992 991 994 # HC-CT-CT-HC + 1488 2 996 992 991 995 # HC-CT-CT-HC + 1489 3 997 992 991 993 # OH-CT-CT-OH + 1490 1 997 992 991 994 # HC-CT-CT-OH + 1491 1 997 992 991 995 # HC-CT-CT-OH + 1492 1 998 992 991 993 # HC-CT-CT-OH + 1493 2 998 992 991 994 # HC-CT-CT-HC + 1494 2 998 992 991 995 # HC-CT-CT-HC + 1495 4 999 993 991 992 # CT-CT-OH-HO + 1496 5 999 993 991 994 # HC-CT-OH-HO + 1497 5 999 993 991 995 # HC-CT-OH-HO + 1498 4 1000 997 992 991 # CT-CT-OH-HO + 1499 5 1000 997 992 996 # HC-CT-OH-HO + 1500 5 1000 997 992 998 # HC-CT-OH-HO + 1501 1 1006 1002 1001 1003 # HC-CT-CT-OH + 1502 2 1006 1002 1001 1004 # HC-CT-CT-HC + 1503 2 1006 1002 1001 1005 # HC-CT-CT-HC + 1504 3 1007 1002 1001 1003 # OH-CT-CT-OH + 1505 1 1007 1002 1001 1004 # HC-CT-CT-OH + 1506 1 1007 1002 1001 1005 # HC-CT-CT-OH + 1507 1 1008 1002 1001 1003 # HC-CT-CT-OH + 1508 2 1008 1002 1001 1004 # HC-CT-CT-HC + 1509 2 1008 1002 1001 1005 # HC-CT-CT-HC + 1510 4 1009 1003 1001 1002 # CT-CT-OH-HO + 1511 5 1009 1003 1001 1004 # HC-CT-OH-HO + 1512 5 1009 1003 1001 1005 # HC-CT-OH-HO + 1513 4 1010 1007 1002 1001 # CT-CT-OH-HO + 1514 5 1010 1007 1002 1006 # HC-CT-OH-HO + 1515 5 1010 1007 1002 1008 # HC-CT-OH-HO + 1516 1 1016 1012 1011 1013 # HC-CT-CT-OH + 1517 2 1016 1012 1011 1014 # HC-CT-CT-HC + 1518 2 1016 1012 1011 1015 # HC-CT-CT-HC + 1519 3 1017 1012 1011 1013 # OH-CT-CT-OH + 1520 1 1017 1012 1011 1014 # HC-CT-CT-OH + 1521 1 1017 1012 1011 1015 # HC-CT-CT-OH + 1522 1 1018 1012 1011 1013 # HC-CT-CT-OH + 1523 2 1018 1012 1011 1014 # HC-CT-CT-HC + 1524 2 1018 1012 1011 1015 # HC-CT-CT-HC + 1525 4 1019 1013 1011 1012 # CT-CT-OH-HO + 1526 5 1019 1013 1011 1014 # HC-CT-OH-HO + 1527 5 1019 1013 1011 1015 # HC-CT-OH-HO + 1528 4 1020 1017 1012 1011 # CT-CT-OH-HO + 1529 5 1020 1017 1012 1016 # HC-CT-OH-HO + 1530 5 1020 1017 1012 1018 # HC-CT-OH-HO + 1531 1 1026 1022 1021 1023 # HC-CT-CT-OH + 1532 2 1026 1022 1021 1024 # HC-CT-CT-HC + 1533 2 1026 1022 1021 1025 # HC-CT-CT-HC + 1534 3 1027 1022 1021 1023 # OH-CT-CT-OH + 1535 1 1027 1022 1021 1024 # HC-CT-CT-OH + 1536 1 1027 1022 1021 1025 # HC-CT-CT-OH + 1537 1 1028 1022 1021 1023 # HC-CT-CT-OH + 1538 2 1028 1022 1021 1024 # HC-CT-CT-HC + 1539 2 1028 1022 1021 1025 # HC-CT-CT-HC + 1540 4 1029 1023 1021 1022 # CT-CT-OH-HO + 1541 5 1029 1023 1021 1024 # HC-CT-OH-HO + 1542 5 1029 1023 1021 1025 # HC-CT-OH-HO + 1543 4 1030 1027 1022 1021 # CT-CT-OH-HO + 1544 5 1030 1027 1022 1026 # HC-CT-OH-HO + 1545 5 1030 1027 1022 1028 # HC-CT-OH-HO + 1546 1 1036 1032 1031 1033 # HC-CT-CT-OH + 1547 2 1036 1032 1031 1034 # HC-CT-CT-HC + 1548 2 1036 1032 1031 1035 # HC-CT-CT-HC + 1549 3 1037 1032 1031 1033 # OH-CT-CT-OH + 1550 1 1037 1032 1031 1034 # HC-CT-CT-OH + 1551 1 1037 1032 1031 1035 # HC-CT-CT-OH + 1552 1 1038 1032 1031 1033 # HC-CT-CT-OH + 1553 2 1038 1032 1031 1034 # HC-CT-CT-HC + 1554 2 1038 1032 1031 1035 # HC-CT-CT-HC + 1555 4 1039 1033 1031 1032 # CT-CT-OH-HO + 1556 5 1039 1033 1031 1034 # HC-CT-OH-HO + 1557 5 1039 1033 1031 1035 # HC-CT-OH-HO + 1558 4 1040 1037 1032 1031 # CT-CT-OH-HO + 1559 5 1040 1037 1032 1036 # HC-CT-OH-HO + 1560 5 1040 1037 1032 1038 # HC-CT-OH-HO + 1561 1 1046 1042 1041 1043 # HC-CT-CT-OH + 1562 2 1046 1042 1041 1044 # HC-CT-CT-HC + 1563 2 1046 1042 1041 1045 # HC-CT-CT-HC + 1564 3 1047 1042 1041 1043 # OH-CT-CT-OH + 1565 1 1047 1042 1041 1044 # HC-CT-CT-OH + 1566 1 1047 1042 1041 1045 # HC-CT-CT-OH + 1567 1 1048 1042 1041 1043 # HC-CT-CT-OH + 1568 2 1048 1042 1041 1044 # HC-CT-CT-HC + 1569 2 1048 1042 1041 1045 # HC-CT-CT-HC + 1570 4 1049 1043 1041 1042 # CT-CT-OH-HO + 1571 5 1049 1043 1041 1044 # HC-CT-OH-HO + 1572 5 1049 1043 1041 1045 # HC-CT-OH-HO + 1573 4 1050 1047 1042 1041 # CT-CT-OH-HO + 1574 5 1050 1047 1042 1046 # HC-CT-OH-HO + 1575 5 1050 1047 1042 1048 # HC-CT-OH-HO + 1576 1 1056 1052 1051 1053 # HC-CT-CT-OH + 1577 2 1056 1052 1051 1054 # HC-CT-CT-HC + 1578 2 1056 1052 1051 1055 # HC-CT-CT-HC + 1579 3 1057 1052 1051 1053 # OH-CT-CT-OH + 1580 1 1057 1052 1051 1054 # HC-CT-CT-OH + 1581 1 1057 1052 1051 1055 # HC-CT-CT-OH + 1582 1 1058 1052 1051 1053 # HC-CT-CT-OH + 1583 2 1058 1052 1051 1054 # HC-CT-CT-HC + 1584 2 1058 1052 1051 1055 # HC-CT-CT-HC + 1585 4 1059 1053 1051 1052 # CT-CT-OH-HO + 1586 5 1059 1053 1051 1054 # HC-CT-OH-HO + 1587 5 1059 1053 1051 1055 # HC-CT-OH-HO + 1588 4 1060 1057 1052 1051 # CT-CT-OH-HO + 1589 5 1060 1057 1052 1056 # HC-CT-OH-HO + 1590 5 1060 1057 1052 1058 # HC-CT-OH-HO + 1591 1 1066 1062 1061 1063 # HC-CT-CT-OH + 1592 2 1066 1062 1061 1064 # HC-CT-CT-HC + 1593 2 1066 1062 1061 1065 # HC-CT-CT-HC + 1594 3 1067 1062 1061 1063 # OH-CT-CT-OH + 1595 1 1067 1062 1061 1064 # HC-CT-CT-OH + 1596 1 1067 1062 1061 1065 # HC-CT-CT-OH + 1597 1 1068 1062 1061 1063 # HC-CT-CT-OH + 1598 2 1068 1062 1061 1064 # HC-CT-CT-HC + 1599 2 1068 1062 1061 1065 # HC-CT-CT-HC + 1600 4 1069 1063 1061 1062 # CT-CT-OH-HO + 1601 5 1069 1063 1061 1064 # HC-CT-OH-HO + 1602 5 1069 1063 1061 1065 # HC-CT-OH-HO + 1603 4 1070 1067 1062 1061 # CT-CT-OH-HO + 1604 5 1070 1067 1062 1066 # HC-CT-OH-HO + 1605 5 1070 1067 1062 1068 # HC-CT-OH-HO + 1606 1 1076 1072 1071 1073 # HC-CT-CT-OH + 1607 2 1076 1072 1071 1074 # HC-CT-CT-HC + 1608 2 1076 1072 1071 1075 # HC-CT-CT-HC + 1609 3 1077 1072 1071 1073 # OH-CT-CT-OH + 1610 1 1077 1072 1071 1074 # HC-CT-CT-OH + 1611 1 1077 1072 1071 1075 # HC-CT-CT-OH + 1612 1 1078 1072 1071 1073 # HC-CT-CT-OH + 1613 2 1078 1072 1071 1074 # HC-CT-CT-HC + 1614 2 1078 1072 1071 1075 # HC-CT-CT-HC + 1615 4 1079 1073 1071 1072 # CT-CT-OH-HO + 1616 5 1079 1073 1071 1074 # HC-CT-OH-HO + 1617 5 1079 1073 1071 1075 # HC-CT-OH-HO + 1618 4 1080 1077 1072 1071 # CT-CT-OH-HO + 1619 5 1080 1077 1072 1076 # HC-CT-OH-HO + 1620 5 1080 1077 1072 1078 # HC-CT-OH-HO + 1621 1 1086 1082 1081 1083 # HC-CT-CT-OH + 1622 2 1086 1082 1081 1084 # HC-CT-CT-HC + 1623 2 1086 1082 1081 1085 # HC-CT-CT-HC + 1624 3 1087 1082 1081 1083 # OH-CT-CT-OH + 1625 1 1087 1082 1081 1084 # HC-CT-CT-OH + 1626 1 1087 1082 1081 1085 # HC-CT-CT-OH + 1627 1 1088 1082 1081 1083 # HC-CT-CT-OH + 1628 2 1088 1082 1081 1084 # HC-CT-CT-HC + 1629 2 1088 1082 1081 1085 # HC-CT-CT-HC + 1630 4 1089 1083 1081 1082 # CT-CT-OH-HO + 1631 5 1089 1083 1081 1084 # HC-CT-OH-HO + 1632 5 1089 1083 1081 1085 # HC-CT-OH-HO + 1633 4 1090 1087 1082 1081 # CT-CT-OH-HO + 1634 5 1090 1087 1082 1086 # HC-CT-OH-HO + 1635 5 1090 1087 1082 1088 # HC-CT-OH-HO + 1636 1 1096 1092 1091 1093 # HC-CT-CT-OH + 1637 2 1096 1092 1091 1094 # HC-CT-CT-HC + 1638 2 1096 1092 1091 1095 # HC-CT-CT-HC + 1639 3 1097 1092 1091 1093 # OH-CT-CT-OH + 1640 1 1097 1092 1091 1094 # HC-CT-CT-OH + 1641 1 1097 1092 1091 1095 # HC-CT-CT-OH + 1642 1 1098 1092 1091 1093 # HC-CT-CT-OH + 1643 2 1098 1092 1091 1094 # HC-CT-CT-HC + 1644 2 1098 1092 1091 1095 # HC-CT-CT-HC + 1645 4 1099 1093 1091 1092 # CT-CT-OH-HO + 1646 5 1099 1093 1091 1094 # HC-CT-OH-HO + 1647 5 1099 1093 1091 1095 # HC-CT-OH-HO + 1648 4 1100 1097 1092 1091 # CT-CT-OH-HO + 1649 5 1100 1097 1092 1096 # HC-CT-OH-HO + 1650 5 1100 1097 1092 1098 # HC-CT-OH-HO + 1651 1 1106 1102 1101 1103 # HC-CT-CT-OH + 1652 2 1106 1102 1101 1104 # HC-CT-CT-HC + 1653 2 1106 1102 1101 1105 # HC-CT-CT-HC + 1654 3 1107 1102 1101 1103 # OH-CT-CT-OH + 1655 1 1107 1102 1101 1104 # HC-CT-CT-OH + 1656 1 1107 1102 1101 1105 # HC-CT-CT-OH + 1657 1 1108 1102 1101 1103 # HC-CT-CT-OH + 1658 2 1108 1102 1101 1104 # HC-CT-CT-HC + 1659 2 1108 1102 1101 1105 # HC-CT-CT-HC + 1660 4 1109 1103 1101 1102 # CT-CT-OH-HO + 1661 5 1109 1103 1101 1104 # HC-CT-OH-HO + 1662 5 1109 1103 1101 1105 # HC-CT-OH-HO + 1663 4 1110 1107 1102 1101 # CT-CT-OH-HO + 1664 5 1110 1107 1102 1106 # HC-CT-OH-HO + 1665 5 1110 1107 1102 1108 # HC-CT-OH-HO + 1666 1 1116 1112 1111 1113 # HC-CT-CT-OH + 1667 2 1116 1112 1111 1114 # HC-CT-CT-HC + 1668 2 1116 1112 1111 1115 # HC-CT-CT-HC + 1669 3 1117 1112 1111 1113 # OH-CT-CT-OH + 1670 1 1117 1112 1111 1114 # HC-CT-CT-OH + 1671 1 1117 1112 1111 1115 # HC-CT-CT-OH + 1672 1 1118 1112 1111 1113 # HC-CT-CT-OH + 1673 2 1118 1112 1111 1114 # HC-CT-CT-HC + 1674 2 1118 1112 1111 1115 # HC-CT-CT-HC + 1675 4 1119 1113 1111 1112 # CT-CT-OH-HO + 1676 5 1119 1113 1111 1114 # HC-CT-OH-HO + 1677 5 1119 1113 1111 1115 # HC-CT-OH-HO + 1678 4 1120 1117 1112 1111 # CT-CT-OH-HO + 1679 5 1120 1117 1112 1116 # HC-CT-OH-HO + 1680 5 1120 1117 1112 1118 # HC-CT-OH-HO + 1681 1 1126 1122 1121 1123 # HC-CT-CT-OH + 1682 2 1126 1122 1121 1124 # HC-CT-CT-HC + 1683 2 1126 1122 1121 1125 # HC-CT-CT-HC + 1684 3 1127 1122 1121 1123 # OH-CT-CT-OH + 1685 1 1127 1122 1121 1124 # HC-CT-CT-OH + 1686 1 1127 1122 1121 1125 # HC-CT-CT-OH + 1687 1 1128 1122 1121 1123 # HC-CT-CT-OH + 1688 2 1128 1122 1121 1124 # HC-CT-CT-HC + 1689 2 1128 1122 1121 1125 # HC-CT-CT-HC + 1690 4 1129 1123 1121 1122 # CT-CT-OH-HO + 1691 5 1129 1123 1121 1124 # HC-CT-OH-HO + 1692 5 1129 1123 1121 1125 # HC-CT-OH-HO + 1693 4 1130 1127 1122 1121 # CT-CT-OH-HO + 1694 5 1130 1127 1122 1126 # HC-CT-OH-HO + 1695 5 1130 1127 1122 1128 # HC-CT-OH-HO + 1696 1 1136 1132 1131 1133 # HC-CT-CT-OH + 1697 2 1136 1132 1131 1134 # HC-CT-CT-HC + 1698 2 1136 1132 1131 1135 # HC-CT-CT-HC + 1699 3 1137 1132 1131 1133 # OH-CT-CT-OH + 1700 1 1137 1132 1131 1134 # HC-CT-CT-OH + 1701 1 1137 1132 1131 1135 # HC-CT-CT-OH + 1702 1 1138 1132 1131 1133 # HC-CT-CT-OH + 1703 2 1138 1132 1131 1134 # HC-CT-CT-HC + 1704 2 1138 1132 1131 1135 # HC-CT-CT-HC + 1705 4 1139 1133 1131 1132 # CT-CT-OH-HO + 1706 5 1139 1133 1131 1134 # HC-CT-OH-HO + 1707 5 1139 1133 1131 1135 # HC-CT-OH-HO + 1708 4 1140 1137 1132 1131 # CT-CT-OH-HO + 1709 5 1140 1137 1132 1136 # HC-CT-OH-HO + 1710 5 1140 1137 1132 1138 # HC-CT-OH-HO + 1711 1 1146 1142 1141 1143 # HC-CT-CT-OH + 1712 2 1146 1142 1141 1144 # HC-CT-CT-HC + 1713 2 1146 1142 1141 1145 # HC-CT-CT-HC + 1714 3 1147 1142 1141 1143 # OH-CT-CT-OH + 1715 1 1147 1142 1141 1144 # HC-CT-CT-OH + 1716 1 1147 1142 1141 1145 # HC-CT-CT-OH + 1717 1 1148 1142 1141 1143 # HC-CT-CT-OH + 1718 2 1148 1142 1141 1144 # HC-CT-CT-HC + 1719 2 1148 1142 1141 1145 # HC-CT-CT-HC + 1720 4 1149 1143 1141 1142 # CT-CT-OH-HO + 1721 5 1149 1143 1141 1144 # HC-CT-OH-HO + 1722 5 1149 1143 1141 1145 # HC-CT-OH-HO + 1723 4 1150 1147 1142 1141 # CT-CT-OH-HO + 1724 5 1150 1147 1142 1146 # HC-CT-OH-HO + 1725 5 1150 1147 1142 1148 # HC-CT-OH-HO + 1726 1 1156 1152 1151 1153 # HC-CT-CT-OH + 1727 2 1156 1152 1151 1154 # HC-CT-CT-HC + 1728 2 1156 1152 1151 1155 # HC-CT-CT-HC + 1729 3 1157 1152 1151 1153 # OH-CT-CT-OH + 1730 1 1157 1152 1151 1154 # HC-CT-CT-OH + 1731 1 1157 1152 1151 1155 # HC-CT-CT-OH + 1732 1 1158 1152 1151 1153 # HC-CT-CT-OH + 1733 2 1158 1152 1151 1154 # HC-CT-CT-HC + 1734 2 1158 1152 1151 1155 # HC-CT-CT-HC + 1735 4 1159 1153 1151 1152 # CT-CT-OH-HO + 1736 5 1159 1153 1151 1154 # HC-CT-OH-HO + 1737 5 1159 1153 1151 1155 # HC-CT-OH-HO + 1738 4 1160 1157 1152 1151 # CT-CT-OH-HO + 1739 5 1160 1157 1152 1156 # HC-CT-OH-HO + 1740 5 1160 1157 1152 1158 # HC-CT-OH-HO + 1741 1 1166 1162 1161 1163 # HC-CT-CT-OH + 1742 2 1166 1162 1161 1164 # HC-CT-CT-HC + 1743 2 1166 1162 1161 1165 # HC-CT-CT-HC + 1744 3 1167 1162 1161 1163 # OH-CT-CT-OH + 1745 1 1167 1162 1161 1164 # HC-CT-CT-OH + 1746 1 1167 1162 1161 1165 # HC-CT-CT-OH + 1747 1 1168 1162 1161 1163 # HC-CT-CT-OH + 1748 2 1168 1162 1161 1164 # HC-CT-CT-HC + 1749 2 1168 1162 1161 1165 # HC-CT-CT-HC + 1750 4 1169 1163 1161 1162 # CT-CT-OH-HO + 1751 5 1169 1163 1161 1164 # HC-CT-OH-HO + 1752 5 1169 1163 1161 1165 # HC-CT-OH-HO + 1753 4 1170 1167 1162 1161 # CT-CT-OH-HO + 1754 5 1170 1167 1162 1166 # HC-CT-OH-HO + 1755 5 1170 1167 1162 1168 # HC-CT-OH-HO + 1756 1 1176 1172 1171 1173 # HC-CT-CT-OH + 1757 2 1176 1172 1171 1174 # HC-CT-CT-HC + 1758 2 1176 1172 1171 1175 # HC-CT-CT-HC + 1759 3 1177 1172 1171 1173 # OH-CT-CT-OH + 1760 1 1177 1172 1171 1174 # HC-CT-CT-OH + 1761 1 1177 1172 1171 1175 # HC-CT-CT-OH + 1762 1 1178 1172 1171 1173 # HC-CT-CT-OH + 1763 2 1178 1172 1171 1174 # HC-CT-CT-HC + 1764 2 1178 1172 1171 1175 # HC-CT-CT-HC + 1765 4 1179 1173 1171 1172 # CT-CT-OH-HO + 1766 5 1179 1173 1171 1174 # HC-CT-OH-HO + 1767 5 1179 1173 1171 1175 # HC-CT-OH-HO + 1768 4 1180 1177 1172 1171 # CT-CT-OH-HO + 1769 5 1180 1177 1172 1176 # HC-CT-OH-HO + 1770 5 1180 1177 1172 1178 # HC-CT-OH-HO + 1771 1 1186 1182 1181 1183 # HC-CT-CT-OH + 1772 2 1186 1182 1181 1184 # HC-CT-CT-HC + 1773 2 1186 1182 1181 1185 # HC-CT-CT-HC + 1774 3 1187 1182 1181 1183 # OH-CT-CT-OH + 1775 1 1187 1182 1181 1184 # HC-CT-CT-OH + 1776 1 1187 1182 1181 1185 # HC-CT-CT-OH + 1777 1 1188 1182 1181 1183 # HC-CT-CT-OH + 1778 2 1188 1182 1181 1184 # HC-CT-CT-HC + 1779 2 1188 1182 1181 1185 # HC-CT-CT-HC + 1780 4 1189 1183 1181 1182 # CT-CT-OH-HO + 1781 5 1189 1183 1181 1184 # HC-CT-OH-HO + 1782 5 1189 1183 1181 1185 # HC-CT-OH-HO + 1783 4 1190 1187 1182 1181 # CT-CT-OH-HO + 1784 5 1190 1187 1182 1186 # HC-CT-OH-HO + 1785 5 1190 1187 1182 1188 # HC-CT-OH-HO + 1786 1 1196 1192 1191 1193 # HC-CT-CT-OH + 1787 2 1196 1192 1191 1194 # HC-CT-CT-HC + 1788 2 1196 1192 1191 1195 # HC-CT-CT-HC + 1789 3 1197 1192 1191 1193 # OH-CT-CT-OH + 1790 1 1197 1192 1191 1194 # HC-CT-CT-OH + 1791 1 1197 1192 1191 1195 # HC-CT-CT-OH + 1792 1 1198 1192 1191 1193 # HC-CT-CT-OH + 1793 2 1198 1192 1191 1194 # HC-CT-CT-HC + 1794 2 1198 1192 1191 1195 # HC-CT-CT-HC + 1795 4 1199 1193 1191 1192 # CT-CT-OH-HO + 1796 5 1199 1193 1191 1194 # HC-CT-OH-HO + 1797 5 1199 1193 1191 1195 # HC-CT-OH-HO + 1798 4 1200 1197 1192 1191 # CT-CT-OH-HO + 1799 5 1200 1197 1192 1196 # HC-CT-OH-HO + 1800 5 1200 1197 1192 1198 # HC-CT-OH-HO + 1801 1 1206 1202 1201 1203 # HC-CT-CT-OH + 1802 2 1206 1202 1201 1204 # HC-CT-CT-HC + 1803 2 1206 1202 1201 1205 # HC-CT-CT-HC + 1804 3 1207 1202 1201 1203 # OH-CT-CT-OH + 1805 1 1207 1202 1201 1204 # HC-CT-CT-OH + 1806 1 1207 1202 1201 1205 # HC-CT-CT-OH + 1807 1 1208 1202 1201 1203 # HC-CT-CT-OH + 1808 2 1208 1202 1201 1204 # HC-CT-CT-HC + 1809 2 1208 1202 1201 1205 # HC-CT-CT-HC + 1810 4 1209 1203 1201 1202 # CT-CT-OH-HO + 1811 5 1209 1203 1201 1204 # HC-CT-OH-HO + 1812 5 1209 1203 1201 1205 # HC-CT-OH-HO + 1813 4 1210 1207 1202 1201 # CT-CT-OH-HO + 1814 5 1210 1207 1202 1206 # HC-CT-OH-HO + 1815 5 1210 1207 1202 1208 # HC-CT-OH-HO + 1816 1 1216 1212 1211 1213 # HC-CT-CT-OH + 1817 2 1216 1212 1211 1214 # HC-CT-CT-HC + 1818 2 1216 1212 1211 1215 # HC-CT-CT-HC + 1819 3 1217 1212 1211 1213 # OH-CT-CT-OH + 1820 1 1217 1212 1211 1214 # HC-CT-CT-OH + 1821 1 1217 1212 1211 1215 # HC-CT-CT-OH + 1822 1 1218 1212 1211 1213 # HC-CT-CT-OH + 1823 2 1218 1212 1211 1214 # HC-CT-CT-HC + 1824 2 1218 1212 1211 1215 # HC-CT-CT-HC + 1825 4 1219 1213 1211 1212 # CT-CT-OH-HO + 1826 5 1219 1213 1211 1214 # HC-CT-OH-HO + 1827 5 1219 1213 1211 1215 # HC-CT-OH-HO + 1828 4 1220 1217 1212 1211 # CT-CT-OH-HO + 1829 5 1220 1217 1212 1216 # HC-CT-OH-HO + 1830 5 1220 1217 1212 1218 # HC-CT-OH-HO + 1831 1 1226 1222 1221 1223 # HC-CT-CT-OH + 1832 2 1226 1222 1221 1224 # HC-CT-CT-HC + 1833 2 1226 1222 1221 1225 # HC-CT-CT-HC + 1834 3 1227 1222 1221 1223 # OH-CT-CT-OH + 1835 1 1227 1222 1221 1224 # HC-CT-CT-OH + 1836 1 1227 1222 1221 1225 # HC-CT-CT-OH + 1837 1 1228 1222 1221 1223 # HC-CT-CT-OH + 1838 2 1228 1222 1221 1224 # HC-CT-CT-HC + 1839 2 1228 1222 1221 1225 # HC-CT-CT-HC + 1840 4 1229 1223 1221 1222 # CT-CT-OH-HO + 1841 5 1229 1223 1221 1224 # HC-CT-OH-HO + 1842 5 1229 1223 1221 1225 # HC-CT-OH-HO + 1843 4 1230 1227 1222 1221 # CT-CT-OH-HO + 1844 5 1230 1227 1222 1226 # HC-CT-OH-HO + 1845 5 1230 1227 1222 1228 # HC-CT-OH-HO + 1846 1 1236 1232 1231 1233 # HC-CT-CT-OH + 1847 2 1236 1232 1231 1234 # HC-CT-CT-HC + 1848 2 1236 1232 1231 1235 # HC-CT-CT-HC + 1849 3 1237 1232 1231 1233 # OH-CT-CT-OH + 1850 1 1237 1232 1231 1234 # HC-CT-CT-OH + 1851 1 1237 1232 1231 1235 # HC-CT-CT-OH + 1852 1 1238 1232 1231 1233 # HC-CT-CT-OH + 1853 2 1238 1232 1231 1234 # HC-CT-CT-HC + 1854 2 1238 1232 1231 1235 # HC-CT-CT-HC + 1855 4 1239 1233 1231 1232 # CT-CT-OH-HO + 1856 5 1239 1233 1231 1234 # HC-CT-OH-HO + 1857 5 1239 1233 1231 1235 # HC-CT-OH-HO + 1858 4 1240 1237 1232 1231 # CT-CT-OH-HO + 1859 5 1240 1237 1232 1236 # HC-CT-OH-HO + 1860 5 1240 1237 1232 1238 # HC-CT-OH-HO + 1861 1 1246 1242 1241 1243 # HC-CT-CT-OH + 1862 2 1246 1242 1241 1244 # HC-CT-CT-HC + 1863 2 1246 1242 1241 1245 # HC-CT-CT-HC + 1864 3 1247 1242 1241 1243 # OH-CT-CT-OH + 1865 1 1247 1242 1241 1244 # HC-CT-CT-OH + 1866 1 1247 1242 1241 1245 # HC-CT-CT-OH + 1867 1 1248 1242 1241 1243 # HC-CT-CT-OH + 1868 2 1248 1242 1241 1244 # HC-CT-CT-HC + 1869 2 1248 1242 1241 1245 # HC-CT-CT-HC + 1870 4 1249 1243 1241 1242 # CT-CT-OH-HO + 1871 5 1249 1243 1241 1244 # HC-CT-OH-HO + 1872 5 1249 1243 1241 1245 # HC-CT-OH-HO + 1873 4 1250 1247 1242 1241 # CT-CT-OH-HO + 1874 5 1250 1247 1242 1246 # HC-CT-OH-HO + 1875 5 1250 1247 1242 1248 # HC-CT-OH-HO + 1876 1 1256 1252 1251 1253 # HC-CT-CT-OH + 1877 2 1256 1252 1251 1254 # HC-CT-CT-HC + 1878 2 1256 1252 1251 1255 # HC-CT-CT-HC + 1879 3 1257 1252 1251 1253 # OH-CT-CT-OH + 1880 1 1257 1252 1251 1254 # HC-CT-CT-OH + 1881 1 1257 1252 1251 1255 # HC-CT-CT-OH + 1882 1 1258 1252 1251 1253 # HC-CT-CT-OH + 1883 2 1258 1252 1251 1254 # HC-CT-CT-HC + 1884 2 1258 1252 1251 1255 # HC-CT-CT-HC + 1885 4 1259 1253 1251 1252 # CT-CT-OH-HO + 1886 5 1259 1253 1251 1254 # HC-CT-OH-HO + 1887 5 1259 1253 1251 1255 # HC-CT-OH-HO + 1888 4 1260 1257 1252 1251 # CT-CT-OH-HO + 1889 5 1260 1257 1252 1256 # HC-CT-OH-HO + 1890 5 1260 1257 1252 1258 # HC-CT-OH-HO + 1891 1 1266 1262 1261 1263 # HC-CT-CT-OH + 1892 2 1266 1262 1261 1264 # HC-CT-CT-HC + 1893 2 1266 1262 1261 1265 # HC-CT-CT-HC + 1894 3 1267 1262 1261 1263 # OH-CT-CT-OH + 1895 1 1267 1262 1261 1264 # HC-CT-CT-OH + 1896 1 1267 1262 1261 1265 # HC-CT-CT-OH + 1897 1 1268 1262 1261 1263 # HC-CT-CT-OH + 1898 2 1268 1262 1261 1264 # HC-CT-CT-HC + 1899 2 1268 1262 1261 1265 # HC-CT-CT-HC + 1900 4 1269 1263 1261 1262 # CT-CT-OH-HO + 1901 5 1269 1263 1261 1264 # HC-CT-OH-HO + 1902 5 1269 1263 1261 1265 # HC-CT-OH-HO + 1903 4 1270 1267 1262 1261 # CT-CT-OH-HO + 1904 5 1270 1267 1262 1266 # HC-CT-OH-HO + 1905 5 1270 1267 1262 1268 # HC-CT-OH-HO + 1906 1 1276 1272 1271 1273 # HC-CT-CT-OH + 1907 2 1276 1272 1271 1274 # HC-CT-CT-HC + 1908 2 1276 1272 1271 1275 # HC-CT-CT-HC + 1909 3 1277 1272 1271 1273 # OH-CT-CT-OH + 1910 1 1277 1272 1271 1274 # HC-CT-CT-OH + 1911 1 1277 1272 1271 1275 # HC-CT-CT-OH + 1912 1 1278 1272 1271 1273 # HC-CT-CT-OH + 1913 2 1278 1272 1271 1274 # HC-CT-CT-HC + 1914 2 1278 1272 1271 1275 # HC-CT-CT-HC + 1915 4 1279 1273 1271 1272 # CT-CT-OH-HO + 1916 5 1279 1273 1271 1274 # HC-CT-OH-HO + 1917 5 1279 1273 1271 1275 # HC-CT-OH-HO + 1918 4 1280 1277 1272 1271 # CT-CT-OH-HO + 1919 5 1280 1277 1272 1276 # HC-CT-OH-HO + 1920 5 1280 1277 1272 1278 # HC-CT-OH-HO + 1921 1 1286 1282 1281 1283 # HC-CT-CT-OH + 1922 2 1286 1282 1281 1284 # HC-CT-CT-HC + 1923 2 1286 1282 1281 1285 # HC-CT-CT-HC + 1924 3 1287 1282 1281 1283 # OH-CT-CT-OH + 1925 1 1287 1282 1281 1284 # HC-CT-CT-OH + 1926 1 1287 1282 1281 1285 # HC-CT-CT-OH + 1927 1 1288 1282 1281 1283 # HC-CT-CT-OH + 1928 2 1288 1282 1281 1284 # HC-CT-CT-HC + 1929 2 1288 1282 1281 1285 # HC-CT-CT-HC + 1930 4 1289 1283 1281 1282 # CT-CT-OH-HO + 1931 5 1289 1283 1281 1284 # HC-CT-OH-HO + 1932 5 1289 1283 1281 1285 # HC-CT-OH-HO + 1933 4 1290 1287 1282 1281 # CT-CT-OH-HO + 1934 5 1290 1287 1282 1286 # HC-CT-OH-HO + 1935 5 1290 1287 1282 1288 # HC-CT-OH-HO + 1936 1 1296 1292 1291 1293 # HC-CT-CT-OH + 1937 2 1296 1292 1291 1294 # HC-CT-CT-HC + 1938 2 1296 1292 1291 1295 # HC-CT-CT-HC + 1939 3 1297 1292 1291 1293 # OH-CT-CT-OH + 1940 1 1297 1292 1291 1294 # HC-CT-CT-OH + 1941 1 1297 1292 1291 1295 # HC-CT-CT-OH + 1942 1 1298 1292 1291 1293 # HC-CT-CT-OH + 1943 2 1298 1292 1291 1294 # HC-CT-CT-HC + 1944 2 1298 1292 1291 1295 # HC-CT-CT-HC + 1945 4 1299 1293 1291 1292 # CT-CT-OH-HO + 1946 5 1299 1293 1291 1294 # HC-CT-OH-HO + 1947 5 1299 1293 1291 1295 # HC-CT-OH-HO + 1948 4 1300 1297 1292 1291 # CT-CT-OH-HO + 1949 5 1300 1297 1292 1296 # HC-CT-OH-HO + 1950 5 1300 1297 1292 1298 # HC-CT-OH-HO + 1951 1 1306 1302 1301 1303 # HC-CT-CT-OH + 1952 2 1306 1302 1301 1304 # HC-CT-CT-HC + 1953 2 1306 1302 1301 1305 # HC-CT-CT-HC + 1954 3 1307 1302 1301 1303 # OH-CT-CT-OH + 1955 1 1307 1302 1301 1304 # HC-CT-CT-OH + 1956 1 1307 1302 1301 1305 # HC-CT-CT-OH + 1957 1 1308 1302 1301 1303 # HC-CT-CT-OH + 1958 2 1308 1302 1301 1304 # HC-CT-CT-HC + 1959 2 1308 1302 1301 1305 # HC-CT-CT-HC + 1960 4 1309 1303 1301 1302 # CT-CT-OH-HO + 1961 5 1309 1303 1301 1304 # HC-CT-OH-HO + 1962 5 1309 1303 1301 1305 # HC-CT-OH-HO + 1963 4 1310 1307 1302 1301 # CT-CT-OH-HO + 1964 5 1310 1307 1302 1306 # HC-CT-OH-HO + 1965 5 1310 1307 1302 1308 # HC-CT-OH-HO + 1966 1 1316 1312 1311 1313 # HC-CT-CT-OH + 1967 2 1316 1312 1311 1314 # HC-CT-CT-HC + 1968 2 1316 1312 1311 1315 # HC-CT-CT-HC + 1969 3 1317 1312 1311 1313 # OH-CT-CT-OH + 1970 1 1317 1312 1311 1314 # HC-CT-CT-OH + 1971 1 1317 1312 1311 1315 # HC-CT-CT-OH + 1972 1 1318 1312 1311 1313 # HC-CT-CT-OH + 1973 2 1318 1312 1311 1314 # HC-CT-CT-HC + 1974 2 1318 1312 1311 1315 # HC-CT-CT-HC + 1975 4 1319 1313 1311 1312 # CT-CT-OH-HO + 1976 5 1319 1313 1311 1314 # HC-CT-OH-HO + 1977 5 1319 1313 1311 1315 # HC-CT-OH-HO + 1978 4 1320 1317 1312 1311 # CT-CT-OH-HO + 1979 5 1320 1317 1312 1316 # HC-CT-OH-HO + 1980 5 1320 1317 1312 1318 # HC-CT-OH-HO + 1981 1 1326 1322 1321 1323 # HC-CT-CT-OH + 1982 2 1326 1322 1321 1324 # HC-CT-CT-HC + 1983 2 1326 1322 1321 1325 # HC-CT-CT-HC + 1984 3 1327 1322 1321 1323 # OH-CT-CT-OH + 1985 1 1327 1322 1321 1324 # HC-CT-CT-OH + 1986 1 1327 1322 1321 1325 # HC-CT-CT-OH + 1987 1 1328 1322 1321 1323 # HC-CT-CT-OH + 1988 2 1328 1322 1321 1324 # HC-CT-CT-HC + 1989 2 1328 1322 1321 1325 # HC-CT-CT-HC + 1990 4 1329 1323 1321 1322 # CT-CT-OH-HO + 1991 5 1329 1323 1321 1324 # HC-CT-OH-HO + 1992 5 1329 1323 1321 1325 # HC-CT-OH-HO + 1993 4 1330 1327 1322 1321 # CT-CT-OH-HO + 1994 5 1330 1327 1322 1326 # HC-CT-OH-HO + 1995 5 1330 1327 1322 1328 # HC-CT-OH-HO + 1996 1 1336 1332 1331 1333 # HC-CT-CT-OH + 1997 2 1336 1332 1331 1334 # HC-CT-CT-HC + 1998 2 1336 1332 1331 1335 # HC-CT-CT-HC + 1999 3 1337 1332 1331 1333 # OH-CT-CT-OH + 2000 1 1337 1332 1331 1334 # HC-CT-CT-OH + 2001 1 1337 1332 1331 1335 # HC-CT-CT-OH + 2002 1 1338 1332 1331 1333 # HC-CT-CT-OH + 2003 2 1338 1332 1331 1334 # HC-CT-CT-HC + 2004 2 1338 1332 1331 1335 # HC-CT-CT-HC + 2005 4 1339 1333 1331 1332 # CT-CT-OH-HO + 2006 5 1339 1333 1331 1334 # HC-CT-OH-HO + 2007 5 1339 1333 1331 1335 # HC-CT-OH-HO + 2008 4 1340 1337 1332 1331 # CT-CT-OH-HO + 2009 5 1340 1337 1332 1336 # HC-CT-OH-HO + 2010 5 1340 1337 1332 1338 # HC-CT-OH-HO + 2011 1 1346 1342 1341 1343 # HC-CT-CT-OH + 2012 2 1346 1342 1341 1344 # HC-CT-CT-HC + 2013 2 1346 1342 1341 1345 # HC-CT-CT-HC + 2014 3 1347 1342 1341 1343 # OH-CT-CT-OH + 2015 1 1347 1342 1341 1344 # HC-CT-CT-OH + 2016 1 1347 1342 1341 1345 # HC-CT-CT-OH + 2017 1 1348 1342 1341 1343 # HC-CT-CT-OH + 2018 2 1348 1342 1341 1344 # HC-CT-CT-HC + 2019 2 1348 1342 1341 1345 # HC-CT-CT-HC + 2020 4 1349 1343 1341 1342 # CT-CT-OH-HO + 2021 5 1349 1343 1341 1344 # HC-CT-OH-HO + 2022 5 1349 1343 1341 1345 # HC-CT-OH-HO + 2023 4 1350 1347 1342 1341 # CT-CT-OH-HO + 2024 5 1350 1347 1342 1346 # HC-CT-OH-HO + 2025 5 1350 1347 1342 1348 # HC-CT-OH-HO + 2026 1 1356 1352 1351 1353 # HC-CT-CT-OH + 2027 2 1356 1352 1351 1354 # HC-CT-CT-HC + 2028 2 1356 1352 1351 1355 # HC-CT-CT-HC + 2029 3 1357 1352 1351 1353 # OH-CT-CT-OH + 2030 1 1357 1352 1351 1354 # HC-CT-CT-OH + 2031 1 1357 1352 1351 1355 # HC-CT-CT-OH + 2032 1 1358 1352 1351 1353 # HC-CT-CT-OH + 2033 2 1358 1352 1351 1354 # HC-CT-CT-HC + 2034 2 1358 1352 1351 1355 # HC-CT-CT-HC + 2035 4 1359 1353 1351 1352 # CT-CT-OH-HO + 2036 5 1359 1353 1351 1354 # HC-CT-OH-HO + 2037 5 1359 1353 1351 1355 # HC-CT-OH-HO + 2038 4 1360 1357 1352 1351 # CT-CT-OH-HO + 2039 5 1360 1357 1352 1356 # HC-CT-OH-HO + 2040 5 1360 1357 1352 1358 # HC-CT-OH-HO + 2041 1 1366 1362 1361 1363 # HC-CT-CT-OH + 2042 2 1366 1362 1361 1364 # HC-CT-CT-HC + 2043 2 1366 1362 1361 1365 # HC-CT-CT-HC + 2044 3 1367 1362 1361 1363 # OH-CT-CT-OH + 2045 1 1367 1362 1361 1364 # HC-CT-CT-OH + 2046 1 1367 1362 1361 1365 # HC-CT-CT-OH + 2047 1 1368 1362 1361 1363 # HC-CT-CT-OH + 2048 2 1368 1362 1361 1364 # HC-CT-CT-HC + 2049 2 1368 1362 1361 1365 # HC-CT-CT-HC + 2050 4 1369 1363 1361 1362 # CT-CT-OH-HO + 2051 5 1369 1363 1361 1364 # HC-CT-OH-HO + 2052 5 1369 1363 1361 1365 # HC-CT-OH-HO + 2053 4 1370 1367 1362 1361 # CT-CT-OH-HO + 2054 5 1370 1367 1362 1366 # HC-CT-OH-HO + 2055 5 1370 1367 1362 1368 # HC-CT-OH-HO + 2056 1 1376 1372 1371 1373 # HC-CT-CT-OH + 2057 2 1376 1372 1371 1374 # HC-CT-CT-HC + 2058 2 1376 1372 1371 1375 # HC-CT-CT-HC + 2059 3 1377 1372 1371 1373 # OH-CT-CT-OH + 2060 1 1377 1372 1371 1374 # HC-CT-CT-OH + 2061 1 1377 1372 1371 1375 # HC-CT-CT-OH + 2062 1 1378 1372 1371 1373 # HC-CT-CT-OH + 2063 2 1378 1372 1371 1374 # HC-CT-CT-HC + 2064 2 1378 1372 1371 1375 # HC-CT-CT-HC + 2065 4 1379 1373 1371 1372 # CT-CT-OH-HO + 2066 5 1379 1373 1371 1374 # HC-CT-OH-HO + 2067 5 1379 1373 1371 1375 # HC-CT-OH-HO + 2068 4 1380 1377 1372 1371 # CT-CT-OH-HO + 2069 5 1380 1377 1372 1376 # HC-CT-OH-HO + 2070 5 1380 1377 1372 1378 # HC-CT-OH-HO + 2071 1 1386 1382 1381 1383 # HC-CT-CT-OH + 2072 2 1386 1382 1381 1384 # HC-CT-CT-HC + 2073 2 1386 1382 1381 1385 # HC-CT-CT-HC + 2074 3 1387 1382 1381 1383 # OH-CT-CT-OH + 2075 1 1387 1382 1381 1384 # HC-CT-CT-OH + 2076 1 1387 1382 1381 1385 # HC-CT-CT-OH + 2077 1 1388 1382 1381 1383 # HC-CT-CT-OH + 2078 2 1388 1382 1381 1384 # HC-CT-CT-HC + 2079 2 1388 1382 1381 1385 # HC-CT-CT-HC + 2080 4 1389 1383 1381 1382 # CT-CT-OH-HO + 2081 5 1389 1383 1381 1384 # HC-CT-OH-HO + 2082 5 1389 1383 1381 1385 # HC-CT-OH-HO + 2083 4 1390 1387 1382 1381 # CT-CT-OH-HO + 2084 5 1390 1387 1382 1386 # HC-CT-OH-HO + 2085 5 1390 1387 1382 1388 # HC-CT-OH-HO + 2086 1 1396 1392 1391 1393 # HC-CT-CT-OH + 2087 2 1396 1392 1391 1394 # HC-CT-CT-HC + 2088 2 1396 1392 1391 1395 # HC-CT-CT-HC + 2089 3 1397 1392 1391 1393 # OH-CT-CT-OH + 2090 1 1397 1392 1391 1394 # HC-CT-CT-OH + 2091 1 1397 1392 1391 1395 # HC-CT-CT-OH + 2092 1 1398 1392 1391 1393 # HC-CT-CT-OH + 2093 2 1398 1392 1391 1394 # HC-CT-CT-HC + 2094 2 1398 1392 1391 1395 # HC-CT-CT-HC + 2095 4 1399 1393 1391 1392 # CT-CT-OH-HO + 2096 5 1399 1393 1391 1394 # HC-CT-OH-HO + 2097 5 1399 1393 1391 1395 # HC-CT-OH-HO + 2098 4 1400 1397 1392 1391 # CT-CT-OH-HO + 2099 5 1400 1397 1392 1396 # HC-CT-OH-HO + 2100 5 1400 1397 1392 1398 # HC-CT-OH-HO + 2101 1 1406 1402 1401 1403 # HC-CT-CT-OH + 2102 2 1406 1402 1401 1404 # HC-CT-CT-HC + 2103 2 1406 1402 1401 1405 # HC-CT-CT-HC + 2104 3 1407 1402 1401 1403 # OH-CT-CT-OH + 2105 1 1407 1402 1401 1404 # HC-CT-CT-OH + 2106 1 1407 1402 1401 1405 # HC-CT-CT-OH + 2107 1 1408 1402 1401 1403 # HC-CT-CT-OH + 2108 2 1408 1402 1401 1404 # HC-CT-CT-HC + 2109 2 1408 1402 1401 1405 # HC-CT-CT-HC + 2110 4 1409 1403 1401 1402 # CT-CT-OH-HO + 2111 5 1409 1403 1401 1404 # HC-CT-OH-HO + 2112 5 1409 1403 1401 1405 # HC-CT-OH-HO + 2113 4 1410 1407 1402 1401 # CT-CT-OH-HO + 2114 5 1410 1407 1402 1406 # HC-CT-OH-HO + 2115 5 1410 1407 1402 1408 # HC-CT-OH-HO + 2116 1 1416 1412 1411 1413 # HC-CT-CT-OH + 2117 2 1416 1412 1411 1414 # HC-CT-CT-HC + 2118 2 1416 1412 1411 1415 # HC-CT-CT-HC + 2119 3 1417 1412 1411 1413 # OH-CT-CT-OH + 2120 1 1417 1412 1411 1414 # HC-CT-CT-OH + 2121 1 1417 1412 1411 1415 # HC-CT-CT-OH + 2122 1 1418 1412 1411 1413 # HC-CT-CT-OH + 2123 2 1418 1412 1411 1414 # HC-CT-CT-HC + 2124 2 1418 1412 1411 1415 # HC-CT-CT-HC + 2125 4 1419 1413 1411 1412 # CT-CT-OH-HO + 2126 5 1419 1413 1411 1414 # HC-CT-OH-HO + 2127 5 1419 1413 1411 1415 # HC-CT-OH-HO + 2128 4 1420 1417 1412 1411 # CT-CT-OH-HO + 2129 5 1420 1417 1412 1416 # HC-CT-OH-HO + 2130 5 1420 1417 1412 1418 # HC-CT-OH-HO + 2131 1 1426 1422 1421 1423 # HC-CT-CT-OH + 2132 2 1426 1422 1421 1424 # HC-CT-CT-HC + 2133 2 1426 1422 1421 1425 # HC-CT-CT-HC + 2134 3 1427 1422 1421 1423 # OH-CT-CT-OH + 2135 1 1427 1422 1421 1424 # HC-CT-CT-OH + 2136 1 1427 1422 1421 1425 # HC-CT-CT-OH + 2137 1 1428 1422 1421 1423 # HC-CT-CT-OH + 2138 2 1428 1422 1421 1424 # HC-CT-CT-HC + 2139 2 1428 1422 1421 1425 # HC-CT-CT-HC + 2140 4 1429 1423 1421 1422 # CT-CT-OH-HO + 2141 5 1429 1423 1421 1424 # HC-CT-OH-HO + 2142 5 1429 1423 1421 1425 # HC-CT-OH-HO + 2143 4 1430 1427 1422 1421 # CT-CT-OH-HO + 2144 5 1430 1427 1422 1426 # HC-CT-OH-HO + 2145 5 1430 1427 1422 1428 # HC-CT-OH-HO + 2146 1 1436 1432 1431 1433 # HC-CT-CT-OH + 2147 2 1436 1432 1431 1434 # HC-CT-CT-HC + 2148 2 1436 1432 1431 1435 # HC-CT-CT-HC + 2149 3 1437 1432 1431 1433 # OH-CT-CT-OH + 2150 1 1437 1432 1431 1434 # HC-CT-CT-OH + 2151 1 1437 1432 1431 1435 # HC-CT-CT-OH + 2152 1 1438 1432 1431 1433 # HC-CT-CT-OH + 2153 2 1438 1432 1431 1434 # HC-CT-CT-HC + 2154 2 1438 1432 1431 1435 # HC-CT-CT-HC + 2155 4 1439 1433 1431 1432 # CT-CT-OH-HO + 2156 5 1439 1433 1431 1434 # HC-CT-OH-HO + 2157 5 1439 1433 1431 1435 # HC-CT-OH-HO + 2158 4 1440 1437 1432 1431 # CT-CT-OH-HO + 2159 5 1440 1437 1432 1436 # HC-CT-OH-HO + 2160 5 1440 1437 1432 1438 # HC-CT-OH-HO + 2161 1 1446 1442 1441 1443 # HC-CT-CT-OH + 2162 2 1446 1442 1441 1444 # HC-CT-CT-HC + 2163 2 1446 1442 1441 1445 # HC-CT-CT-HC + 2164 3 1447 1442 1441 1443 # OH-CT-CT-OH + 2165 1 1447 1442 1441 1444 # HC-CT-CT-OH + 2166 1 1447 1442 1441 1445 # HC-CT-CT-OH + 2167 1 1448 1442 1441 1443 # HC-CT-CT-OH + 2168 2 1448 1442 1441 1444 # HC-CT-CT-HC + 2169 2 1448 1442 1441 1445 # HC-CT-CT-HC + 2170 4 1449 1443 1441 1442 # CT-CT-OH-HO + 2171 5 1449 1443 1441 1444 # HC-CT-OH-HO + 2172 5 1449 1443 1441 1445 # HC-CT-OH-HO + 2173 4 1450 1447 1442 1441 # CT-CT-OH-HO + 2174 5 1450 1447 1442 1446 # HC-CT-OH-HO + 2175 5 1450 1447 1442 1448 # HC-CT-OH-HO + 2176 1 1456 1452 1451 1453 # HC-CT-CT-OH + 2177 2 1456 1452 1451 1454 # HC-CT-CT-HC + 2178 2 1456 1452 1451 1455 # HC-CT-CT-HC + 2179 3 1457 1452 1451 1453 # OH-CT-CT-OH + 2180 1 1457 1452 1451 1454 # HC-CT-CT-OH + 2181 1 1457 1452 1451 1455 # HC-CT-CT-OH + 2182 1 1458 1452 1451 1453 # HC-CT-CT-OH + 2183 2 1458 1452 1451 1454 # HC-CT-CT-HC + 2184 2 1458 1452 1451 1455 # HC-CT-CT-HC + 2185 4 1459 1453 1451 1452 # CT-CT-OH-HO + 2186 5 1459 1453 1451 1454 # HC-CT-OH-HO + 2187 5 1459 1453 1451 1455 # HC-CT-OH-HO + 2188 4 1460 1457 1452 1451 # CT-CT-OH-HO + 2189 5 1460 1457 1452 1456 # HC-CT-OH-HO + 2190 5 1460 1457 1452 1458 # HC-CT-OH-HO + 2191 1 1466 1462 1461 1463 # HC-CT-CT-OH + 2192 2 1466 1462 1461 1464 # HC-CT-CT-HC + 2193 2 1466 1462 1461 1465 # HC-CT-CT-HC + 2194 3 1467 1462 1461 1463 # OH-CT-CT-OH + 2195 1 1467 1462 1461 1464 # HC-CT-CT-OH + 2196 1 1467 1462 1461 1465 # HC-CT-CT-OH + 2197 1 1468 1462 1461 1463 # HC-CT-CT-OH + 2198 2 1468 1462 1461 1464 # HC-CT-CT-HC + 2199 2 1468 1462 1461 1465 # HC-CT-CT-HC + 2200 4 1469 1463 1461 1462 # CT-CT-OH-HO + 2201 5 1469 1463 1461 1464 # HC-CT-OH-HO + 2202 5 1469 1463 1461 1465 # HC-CT-OH-HO + 2203 4 1470 1467 1462 1461 # CT-CT-OH-HO + 2204 5 1470 1467 1462 1466 # HC-CT-OH-HO + 2205 5 1470 1467 1462 1468 # HC-CT-OH-HO + 2206 1 1476 1472 1471 1473 # HC-CT-CT-OH + 2207 2 1476 1472 1471 1474 # HC-CT-CT-HC + 2208 2 1476 1472 1471 1475 # HC-CT-CT-HC + 2209 3 1477 1472 1471 1473 # OH-CT-CT-OH + 2210 1 1477 1472 1471 1474 # HC-CT-CT-OH + 2211 1 1477 1472 1471 1475 # HC-CT-CT-OH + 2212 1 1478 1472 1471 1473 # HC-CT-CT-OH + 2213 2 1478 1472 1471 1474 # HC-CT-CT-HC + 2214 2 1478 1472 1471 1475 # HC-CT-CT-HC + 2215 4 1479 1473 1471 1472 # CT-CT-OH-HO + 2216 5 1479 1473 1471 1474 # HC-CT-OH-HO + 2217 5 1479 1473 1471 1475 # HC-CT-OH-HO + 2218 4 1480 1477 1472 1471 # CT-CT-OH-HO + 2219 5 1480 1477 1472 1476 # HC-CT-OH-HO + 2220 5 1480 1477 1472 1478 # HC-CT-OH-HO + 2221 1 1486 1482 1481 1483 # HC-CT-CT-OH + 2222 2 1486 1482 1481 1484 # HC-CT-CT-HC + 2223 2 1486 1482 1481 1485 # HC-CT-CT-HC + 2224 3 1487 1482 1481 1483 # OH-CT-CT-OH + 2225 1 1487 1482 1481 1484 # HC-CT-CT-OH + 2226 1 1487 1482 1481 1485 # HC-CT-CT-OH + 2227 1 1488 1482 1481 1483 # HC-CT-CT-OH + 2228 2 1488 1482 1481 1484 # HC-CT-CT-HC + 2229 2 1488 1482 1481 1485 # HC-CT-CT-HC + 2230 4 1489 1483 1481 1482 # CT-CT-OH-HO + 2231 5 1489 1483 1481 1484 # HC-CT-OH-HO + 2232 5 1489 1483 1481 1485 # HC-CT-OH-HO + 2233 4 1490 1487 1482 1481 # CT-CT-OH-HO + 2234 5 1490 1487 1482 1486 # HC-CT-OH-HO + 2235 5 1490 1487 1482 1488 # HC-CT-OH-HO + 2236 1 1496 1492 1491 1493 # HC-CT-CT-OH + 2237 2 1496 1492 1491 1494 # HC-CT-CT-HC + 2238 2 1496 1492 1491 1495 # HC-CT-CT-HC + 2239 3 1497 1492 1491 1493 # OH-CT-CT-OH + 2240 1 1497 1492 1491 1494 # HC-CT-CT-OH + 2241 1 1497 1492 1491 1495 # HC-CT-CT-OH + 2242 1 1498 1492 1491 1493 # HC-CT-CT-OH + 2243 2 1498 1492 1491 1494 # HC-CT-CT-HC + 2244 2 1498 1492 1491 1495 # HC-CT-CT-HC + 2245 4 1499 1493 1491 1492 # CT-CT-OH-HO + 2246 5 1499 1493 1491 1494 # HC-CT-OH-HO + 2247 5 1499 1493 1491 1495 # HC-CT-OH-HO + 2248 4 1500 1497 1492 1491 # CT-CT-OH-HO + 2249 5 1500 1497 1492 1496 # HC-CT-OH-HO + 2250 5 1500 1497 1492 1498 # HC-CT-OH-HO + 2251 1 1506 1502 1501 1503 # HC-CT-CT-OH + 2252 2 1506 1502 1501 1504 # HC-CT-CT-HC + 2253 2 1506 1502 1501 1505 # HC-CT-CT-HC + 2254 3 1507 1502 1501 1503 # OH-CT-CT-OH + 2255 1 1507 1502 1501 1504 # HC-CT-CT-OH + 2256 1 1507 1502 1501 1505 # HC-CT-CT-OH + 2257 1 1508 1502 1501 1503 # HC-CT-CT-OH + 2258 2 1508 1502 1501 1504 # HC-CT-CT-HC + 2259 2 1508 1502 1501 1505 # HC-CT-CT-HC + 2260 4 1509 1503 1501 1502 # CT-CT-OH-HO + 2261 5 1509 1503 1501 1504 # HC-CT-OH-HO + 2262 5 1509 1503 1501 1505 # HC-CT-OH-HO + 2263 4 1510 1507 1502 1501 # CT-CT-OH-HO + 2264 5 1510 1507 1502 1506 # HC-CT-OH-HO + 2265 5 1510 1507 1502 1508 # HC-CT-OH-HO + 2266 1 1516 1512 1511 1513 # HC-CT-CT-OH + 2267 2 1516 1512 1511 1514 # HC-CT-CT-HC + 2268 2 1516 1512 1511 1515 # HC-CT-CT-HC + 2269 3 1517 1512 1511 1513 # OH-CT-CT-OH + 2270 1 1517 1512 1511 1514 # HC-CT-CT-OH + 2271 1 1517 1512 1511 1515 # HC-CT-CT-OH + 2272 1 1518 1512 1511 1513 # HC-CT-CT-OH + 2273 2 1518 1512 1511 1514 # HC-CT-CT-HC + 2274 2 1518 1512 1511 1515 # HC-CT-CT-HC + 2275 4 1519 1513 1511 1512 # CT-CT-OH-HO + 2276 5 1519 1513 1511 1514 # HC-CT-OH-HO + 2277 5 1519 1513 1511 1515 # HC-CT-OH-HO + 2278 4 1520 1517 1512 1511 # CT-CT-OH-HO + 2279 5 1520 1517 1512 1516 # HC-CT-OH-HO + 2280 5 1520 1517 1512 1518 # HC-CT-OH-HO + 2281 1 1526 1522 1521 1523 # HC-CT-CT-OH + 2282 2 1526 1522 1521 1524 # HC-CT-CT-HC + 2283 2 1526 1522 1521 1525 # HC-CT-CT-HC + 2284 3 1527 1522 1521 1523 # OH-CT-CT-OH + 2285 1 1527 1522 1521 1524 # HC-CT-CT-OH + 2286 1 1527 1522 1521 1525 # HC-CT-CT-OH + 2287 1 1528 1522 1521 1523 # HC-CT-CT-OH + 2288 2 1528 1522 1521 1524 # HC-CT-CT-HC + 2289 2 1528 1522 1521 1525 # HC-CT-CT-HC + 2290 4 1529 1523 1521 1522 # CT-CT-OH-HO + 2291 5 1529 1523 1521 1524 # HC-CT-OH-HO + 2292 5 1529 1523 1521 1525 # HC-CT-OH-HO + 2293 4 1530 1527 1522 1521 # CT-CT-OH-HO + 2294 5 1530 1527 1522 1526 # HC-CT-OH-HO + 2295 5 1530 1527 1522 1528 # HC-CT-OH-HO + 2296 1 1536 1532 1531 1533 # HC-CT-CT-OH + 2297 2 1536 1532 1531 1534 # HC-CT-CT-HC + 2298 2 1536 1532 1531 1535 # HC-CT-CT-HC + 2299 3 1537 1532 1531 1533 # OH-CT-CT-OH + 2300 1 1537 1532 1531 1534 # HC-CT-CT-OH + 2301 1 1537 1532 1531 1535 # HC-CT-CT-OH + 2302 1 1538 1532 1531 1533 # HC-CT-CT-OH + 2303 2 1538 1532 1531 1534 # HC-CT-CT-HC + 2304 2 1538 1532 1531 1535 # HC-CT-CT-HC + 2305 4 1539 1533 1531 1532 # CT-CT-OH-HO + 2306 5 1539 1533 1531 1534 # HC-CT-OH-HO + 2307 5 1539 1533 1531 1535 # HC-CT-OH-HO + 2308 4 1540 1537 1532 1531 # CT-CT-OH-HO + 2309 5 1540 1537 1532 1536 # HC-CT-OH-HO + 2310 5 1540 1537 1532 1538 # HC-CT-OH-HO + 2311 1 1546 1542 1541 1543 # HC-CT-CT-OH + 2312 2 1546 1542 1541 1544 # HC-CT-CT-HC + 2313 2 1546 1542 1541 1545 # HC-CT-CT-HC + 2314 3 1547 1542 1541 1543 # OH-CT-CT-OH + 2315 1 1547 1542 1541 1544 # HC-CT-CT-OH + 2316 1 1547 1542 1541 1545 # HC-CT-CT-OH + 2317 1 1548 1542 1541 1543 # HC-CT-CT-OH + 2318 2 1548 1542 1541 1544 # HC-CT-CT-HC + 2319 2 1548 1542 1541 1545 # HC-CT-CT-HC + 2320 4 1549 1543 1541 1542 # CT-CT-OH-HO + 2321 5 1549 1543 1541 1544 # HC-CT-OH-HO + 2322 5 1549 1543 1541 1545 # HC-CT-OH-HO + 2323 4 1550 1547 1542 1541 # CT-CT-OH-HO + 2324 5 1550 1547 1542 1546 # HC-CT-OH-HO + 2325 5 1550 1547 1542 1548 # HC-CT-OH-HO + 2326 1 1556 1552 1551 1553 # HC-CT-CT-OH + 2327 2 1556 1552 1551 1554 # HC-CT-CT-HC + 2328 2 1556 1552 1551 1555 # HC-CT-CT-HC + 2329 3 1557 1552 1551 1553 # OH-CT-CT-OH + 2330 1 1557 1552 1551 1554 # HC-CT-CT-OH + 2331 1 1557 1552 1551 1555 # HC-CT-CT-OH + 2332 1 1558 1552 1551 1553 # HC-CT-CT-OH + 2333 2 1558 1552 1551 1554 # HC-CT-CT-HC + 2334 2 1558 1552 1551 1555 # HC-CT-CT-HC + 2335 4 1559 1553 1551 1552 # CT-CT-OH-HO + 2336 5 1559 1553 1551 1554 # HC-CT-OH-HO + 2337 5 1559 1553 1551 1555 # HC-CT-OH-HO + 2338 4 1560 1557 1552 1551 # CT-CT-OH-HO + 2339 5 1560 1557 1552 1556 # HC-CT-OH-HO + 2340 5 1560 1557 1552 1558 # HC-CT-OH-HO + 2341 1 1566 1562 1561 1563 # HC-CT-CT-OH + 2342 2 1566 1562 1561 1564 # HC-CT-CT-HC + 2343 2 1566 1562 1561 1565 # HC-CT-CT-HC + 2344 3 1567 1562 1561 1563 # OH-CT-CT-OH + 2345 1 1567 1562 1561 1564 # HC-CT-CT-OH + 2346 1 1567 1562 1561 1565 # HC-CT-CT-OH + 2347 1 1568 1562 1561 1563 # HC-CT-CT-OH + 2348 2 1568 1562 1561 1564 # HC-CT-CT-HC + 2349 2 1568 1562 1561 1565 # HC-CT-CT-HC + 2350 4 1569 1563 1561 1562 # CT-CT-OH-HO + 2351 5 1569 1563 1561 1564 # HC-CT-OH-HO + 2352 5 1569 1563 1561 1565 # HC-CT-OH-HO + 2353 4 1570 1567 1562 1561 # CT-CT-OH-HO + 2354 5 1570 1567 1562 1566 # HC-CT-OH-HO + 2355 5 1570 1567 1562 1568 # HC-CT-OH-HO + 2356 1 1576 1572 1571 1573 # HC-CT-CT-OH + 2357 2 1576 1572 1571 1574 # HC-CT-CT-HC + 2358 2 1576 1572 1571 1575 # HC-CT-CT-HC + 2359 3 1577 1572 1571 1573 # OH-CT-CT-OH + 2360 1 1577 1572 1571 1574 # HC-CT-CT-OH + 2361 1 1577 1572 1571 1575 # HC-CT-CT-OH + 2362 1 1578 1572 1571 1573 # HC-CT-CT-OH + 2363 2 1578 1572 1571 1574 # HC-CT-CT-HC + 2364 2 1578 1572 1571 1575 # HC-CT-CT-HC + 2365 4 1579 1573 1571 1572 # CT-CT-OH-HO + 2366 5 1579 1573 1571 1574 # HC-CT-OH-HO + 2367 5 1579 1573 1571 1575 # HC-CT-OH-HO + 2368 4 1580 1577 1572 1571 # CT-CT-OH-HO + 2369 5 1580 1577 1572 1576 # HC-CT-OH-HO + 2370 5 1580 1577 1572 1578 # HC-CT-OH-HO + 2371 1 1586 1582 1581 1583 # HC-CT-CT-OH + 2372 2 1586 1582 1581 1584 # HC-CT-CT-HC + 2373 2 1586 1582 1581 1585 # HC-CT-CT-HC + 2374 3 1587 1582 1581 1583 # OH-CT-CT-OH + 2375 1 1587 1582 1581 1584 # HC-CT-CT-OH + 2376 1 1587 1582 1581 1585 # HC-CT-CT-OH + 2377 1 1588 1582 1581 1583 # HC-CT-CT-OH + 2378 2 1588 1582 1581 1584 # HC-CT-CT-HC + 2379 2 1588 1582 1581 1585 # HC-CT-CT-HC + 2380 4 1589 1583 1581 1582 # CT-CT-OH-HO + 2381 5 1589 1583 1581 1584 # HC-CT-OH-HO + 2382 5 1589 1583 1581 1585 # HC-CT-OH-HO + 2383 4 1590 1587 1582 1581 # CT-CT-OH-HO + 2384 5 1590 1587 1582 1586 # HC-CT-OH-HO + 2385 5 1590 1587 1582 1588 # HC-CT-OH-HO + 2386 1 1596 1592 1591 1593 # HC-CT-CT-OH + 2387 2 1596 1592 1591 1594 # HC-CT-CT-HC + 2388 2 1596 1592 1591 1595 # HC-CT-CT-HC + 2389 3 1597 1592 1591 1593 # OH-CT-CT-OH + 2390 1 1597 1592 1591 1594 # HC-CT-CT-OH + 2391 1 1597 1592 1591 1595 # HC-CT-CT-OH + 2392 1 1598 1592 1591 1593 # HC-CT-CT-OH + 2393 2 1598 1592 1591 1594 # HC-CT-CT-HC + 2394 2 1598 1592 1591 1595 # HC-CT-CT-HC + 2395 4 1599 1593 1591 1592 # CT-CT-OH-HO + 2396 5 1599 1593 1591 1594 # HC-CT-OH-HO + 2397 5 1599 1593 1591 1595 # HC-CT-OH-HO + 2398 4 1600 1597 1592 1591 # CT-CT-OH-HO + 2399 5 1600 1597 1592 1596 # HC-CT-OH-HO + 2400 5 1600 1597 1592 1598 # HC-CT-OH-HO + 2401 1 1606 1602 1601 1603 # HC-CT-CT-OH + 2402 2 1606 1602 1601 1604 # HC-CT-CT-HC + 2403 2 1606 1602 1601 1605 # HC-CT-CT-HC + 2404 3 1607 1602 1601 1603 # OH-CT-CT-OH + 2405 1 1607 1602 1601 1604 # HC-CT-CT-OH + 2406 1 1607 1602 1601 1605 # HC-CT-CT-OH + 2407 1 1608 1602 1601 1603 # HC-CT-CT-OH + 2408 2 1608 1602 1601 1604 # HC-CT-CT-HC + 2409 2 1608 1602 1601 1605 # HC-CT-CT-HC + 2410 4 1609 1603 1601 1602 # CT-CT-OH-HO + 2411 5 1609 1603 1601 1604 # HC-CT-OH-HO + 2412 5 1609 1603 1601 1605 # HC-CT-OH-HO + 2413 4 1610 1607 1602 1601 # CT-CT-OH-HO + 2414 5 1610 1607 1602 1606 # HC-CT-OH-HO + 2415 5 1610 1607 1602 1608 # HC-CT-OH-HO + 2416 1 1616 1612 1611 1613 # HC-CT-CT-OH + 2417 2 1616 1612 1611 1614 # HC-CT-CT-HC + 2418 2 1616 1612 1611 1615 # HC-CT-CT-HC + 2419 3 1617 1612 1611 1613 # OH-CT-CT-OH + 2420 1 1617 1612 1611 1614 # HC-CT-CT-OH + 2421 1 1617 1612 1611 1615 # HC-CT-CT-OH + 2422 1 1618 1612 1611 1613 # HC-CT-CT-OH + 2423 2 1618 1612 1611 1614 # HC-CT-CT-HC + 2424 2 1618 1612 1611 1615 # HC-CT-CT-HC + 2425 4 1619 1613 1611 1612 # CT-CT-OH-HO + 2426 5 1619 1613 1611 1614 # HC-CT-OH-HO + 2427 5 1619 1613 1611 1615 # HC-CT-OH-HO + 2428 4 1620 1617 1612 1611 # CT-CT-OH-HO + 2429 5 1620 1617 1612 1616 # HC-CT-OH-HO + 2430 5 1620 1617 1612 1618 # HC-CT-OH-HO + 2431 1 1626 1622 1621 1623 # HC-CT-CT-OH + 2432 2 1626 1622 1621 1624 # HC-CT-CT-HC + 2433 2 1626 1622 1621 1625 # HC-CT-CT-HC + 2434 3 1627 1622 1621 1623 # OH-CT-CT-OH + 2435 1 1627 1622 1621 1624 # HC-CT-CT-OH + 2436 1 1627 1622 1621 1625 # HC-CT-CT-OH + 2437 1 1628 1622 1621 1623 # HC-CT-CT-OH + 2438 2 1628 1622 1621 1624 # HC-CT-CT-HC + 2439 2 1628 1622 1621 1625 # HC-CT-CT-HC + 2440 4 1629 1623 1621 1622 # CT-CT-OH-HO + 2441 5 1629 1623 1621 1624 # HC-CT-OH-HO + 2442 5 1629 1623 1621 1625 # HC-CT-OH-HO + 2443 4 1630 1627 1622 1621 # CT-CT-OH-HO + 2444 5 1630 1627 1622 1626 # HC-CT-OH-HO + 2445 5 1630 1627 1622 1628 # HC-CT-OH-HO + 2446 1 1636 1632 1631 1633 # HC-CT-CT-OH + 2447 2 1636 1632 1631 1634 # HC-CT-CT-HC + 2448 2 1636 1632 1631 1635 # HC-CT-CT-HC + 2449 3 1637 1632 1631 1633 # OH-CT-CT-OH + 2450 1 1637 1632 1631 1634 # HC-CT-CT-OH + 2451 1 1637 1632 1631 1635 # HC-CT-CT-OH + 2452 1 1638 1632 1631 1633 # HC-CT-CT-OH + 2453 2 1638 1632 1631 1634 # HC-CT-CT-HC + 2454 2 1638 1632 1631 1635 # HC-CT-CT-HC + 2455 4 1639 1633 1631 1632 # CT-CT-OH-HO + 2456 5 1639 1633 1631 1634 # HC-CT-OH-HO + 2457 5 1639 1633 1631 1635 # HC-CT-OH-HO + 2458 4 1640 1637 1632 1631 # CT-CT-OH-HO + 2459 5 1640 1637 1632 1636 # HC-CT-OH-HO + 2460 5 1640 1637 1632 1638 # HC-CT-OH-HO + 2461 1 1646 1642 1641 1643 # HC-CT-CT-OH + 2462 2 1646 1642 1641 1644 # HC-CT-CT-HC + 2463 2 1646 1642 1641 1645 # HC-CT-CT-HC + 2464 3 1647 1642 1641 1643 # OH-CT-CT-OH + 2465 1 1647 1642 1641 1644 # HC-CT-CT-OH + 2466 1 1647 1642 1641 1645 # HC-CT-CT-OH + 2467 1 1648 1642 1641 1643 # HC-CT-CT-OH + 2468 2 1648 1642 1641 1644 # HC-CT-CT-HC + 2469 2 1648 1642 1641 1645 # HC-CT-CT-HC + 2470 4 1649 1643 1641 1642 # CT-CT-OH-HO + 2471 5 1649 1643 1641 1644 # HC-CT-OH-HO + 2472 5 1649 1643 1641 1645 # HC-CT-OH-HO + 2473 4 1650 1647 1642 1641 # CT-CT-OH-HO + 2474 5 1650 1647 1642 1646 # HC-CT-OH-HO + 2475 5 1650 1647 1642 1648 # HC-CT-OH-HO + 2476 1 1656 1652 1651 1653 # HC-CT-CT-OH + 2477 2 1656 1652 1651 1654 # HC-CT-CT-HC + 2478 2 1656 1652 1651 1655 # HC-CT-CT-HC + 2479 3 1657 1652 1651 1653 # OH-CT-CT-OH + 2480 1 1657 1652 1651 1654 # HC-CT-CT-OH + 2481 1 1657 1652 1651 1655 # HC-CT-CT-OH + 2482 1 1658 1652 1651 1653 # HC-CT-CT-OH + 2483 2 1658 1652 1651 1654 # HC-CT-CT-HC + 2484 2 1658 1652 1651 1655 # HC-CT-CT-HC + 2485 4 1659 1653 1651 1652 # CT-CT-OH-HO + 2486 5 1659 1653 1651 1654 # HC-CT-OH-HO + 2487 5 1659 1653 1651 1655 # HC-CT-OH-HO + 2488 4 1660 1657 1652 1651 # CT-CT-OH-HO + 2489 5 1660 1657 1652 1656 # HC-CT-OH-HO + 2490 5 1660 1657 1652 1658 # HC-CT-OH-HO + 2491 1 1666 1662 1661 1663 # HC-CT-CT-OH + 2492 2 1666 1662 1661 1664 # HC-CT-CT-HC + 2493 2 1666 1662 1661 1665 # HC-CT-CT-HC + 2494 3 1667 1662 1661 1663 # OH-CT-CT-OH + 2495 1 1667 1662 1661 1664 # HC-CT-CT-OH + 2496 1 1667 1662 1661 1665 # HC-CT-CT-OH + 2497 1 1668 1662 1661 1663 # HC-CT-CT-OH + 2498 2 1668 1662 1661 1664 # HC-CT-CT-HC + 2499 2 1668 1662 1661 1665 # HC-CT-CT-HC + 2500 4 1669 1663 1661 1662 # CT-CT-OH-HO + 2501 5 1669 1663 1661 1664 # HC-CT-OH-HO + 2502 5 1669 1663 1661 1665 # HC-CT-OH-HO + 2503 4 1670 1667 1662 1661 # CT-CT-OH-HO + 2504 5 1670 1667 1662 1666 # HC-CT-OH-HO + 2505 5 1670 1667 1662 1668 # HC-CT-OH-HO + 2506 1 1676 1672 1671 1673 # HC-CT-CT-OH + 2507 2 1676 1672 1671 1674 # HC-CT-CT-HC + 2508 2 1676 1672 1671 1675 # HC-CT-CT-HC + 2509 3 1677 1672 1671 1673 # OH-CT-CT-OH + 2510 1 1677 1672 1671 1674 # HC-CT-CT-OH + 2511 1 1677 1672 1671 1675 # HC-CT-CT-OH + 2512 1 1678 1672 1671 1673 # HC-CT-CT-OH + 2513 2 1678 1672 1671 1674 # HC-CT-CT-HC + 2514 2 1678 1672 1671 1675 # HC-CT-CT-HC + 2515 4 1679 1673 1671 1672 # CT-CT-OH-HO + 2516 5 1679 1673 1671 1674 # HC-CT-OH-HO + 2517 5 1679 1673 1671 1675 # HC-CT-OH-HO + 2518 4 1680 1677 1672 1671 # CT-CT-OH-HO + 2519 5 1680 1677 1672 1676 # HC-CT-OH-HO + 2520 5 1680 1677 1672 1678 # HC-CT-OH-HO + 2521 1 1686 1682 1681 1683 # HC-CT-CT-OH + 2522 2 1686 1682 1681 1684 # HC-CT-CT-HC + 2523 2 1686 1682 1681 1685 # HC-CT-CT-HC + 2524 3 1687 1682 1681 1683 # OH-CT-CT-OH + 2525 1 1687 1682 1681 1684 # HC-CT-CT-OH + 2526 1 1687 1682 1681 1685 # HC-CT-CT-OH + 2527 1 1688 1682 1681 1683 # HC-CT-CT-OH + 2528 2 1688 1682 1681 1684 # HC-CT-CT-HC + 2529 2 1688 1682 1681 1685 # HC-CT-CT-HC + 2530 4 1689 1683 1681 1682 # CT-CT-OH-HO + 2531 5 1689 1683 1681 1684 # HC-CT-OH-HO + 2532 5 1689 1683 1681 1685 # HC-CT-OH-HO + 2533 4 1690 1687 1682 1681 # CT-CT-OH-HO + 2534 5 1690 1687 1682 1686 # HC-CT-OH-HO + 2535 5 1690 1687 1682 1688 # HC-CT-OH-HO + 2536 1 1696 1692 1691 1693 # HC-CT-CT-OH + 2537 2 1696 1692 1691 1694 # HC-CT-CT-HC + 2538 2 1696 1692 1691 1695 # HC-CT-CT-HC + 2539 3 1697 1692 1691 1693 # OH-CT-CT-OH + 2540 1 1697 1692 1691 1694 # HC-CT-CT-OH + 2541 1 1697 1692 1691 1695 # HC-CT-CT-OH + 2542 1 1698 1692 1691 1693 # HC-CT-CT-OH + 2543 2 1698 1692 1691 1694 # HC-CT-CT-HC + 2544 2 1698 1692 1691 1695 # HC-CT-CT-HC + 2545 4 1699 1693 1691 1692 # CT-CT-OH-HO + 2546 5 1699 1693 1691 1694 # HC-CT-OH-HO + 2547 5 1699 1693 1691 1695 # HC-CT-OH-HO + 2548 4 1700 1697 1692 1691 # CT-CT-OH-HO + 2549 5 1700 1697 1692 1696 # HC-CT-OH-HO + 2550 5 1700 1697 1692 1698 # HC-CT-OH-HO + 2551 1 1706 1702 1701 1703 # HC-CT-CT-OH + 2552 2 1706 1702 1701 1704 # HC-CT-CT-HC + 2553 2 1706 1702 1701 1705 # HC-CT-CT-HC + 2554 3 1707 1702 1701 1703 # OH-CT-CT-OH + 2555 1 1707 1702 1701 1704 # HC-CT-CT-OH + 2556 1 1707 1702 1701 1705 # HC-CT-CT-OH + 2557 1 1708 1702 1701 1703 # HC-CT-CT-OH + 2558 2 1708 1702 1701 1704 # HC-CT-CT-HC + 2559 2 1708 1702 1701 1705 # HC-CT-CT-HC + 2560 4 1709 1703 1701 1702 # CT-CT-OH-HO + 2561 5 1709 1703 1701 1704 # HC-CT-OH-HO + 2562 5 1709 1703 1701 1705 # HC-CT-OH-HO + 2563 4 1710 1707 1702 1701 # CT-CT-OH-HO + 2564 5 1710 1707 1702 1706 # HC-CT-OH-HO + 2565 5 1710 1707 1702 1708 # HC-CT-OH-HO + 2566 1 1716 1712 1711 1713 # HC-CT-CT-OH + 2567 2 1716 1712 1711 1714 # HC-CT-CT-HC + 2568 2 1716 1712 1711 1715 # HC-CT-CT-HC + 2569 3 1717 1712 1711 1713 # OH-CT-CT-OH + 2570 1 1717 1712 1711 1714 # HC-CT-CT-OH + 2571 1 1717 1712 1711 1715 # HC-CT-CT-OH + 2572 1 1718 1712 1711 1713 # HC-CT-CT-OH + 2573 2 1718 1712 1711 1714 # HC-CT-CT-HC + 2574 2 1718 1712 1711 1715 # HC-CT-CT-HC + 2575 4 1719 1713 1711 1712 # CT-CT-OH-HO + 2576 5 1719 1713 1711 1714 # HC-CT-OH-HO + 2577 5 1719 1713 1711 1715 # HC-CT-OH-HO + 2578 4 1720 1717 1712 1711 # CT-CT-OH-HO + 2579 5 1720 1717 1712 1716 # HC-CT-OH-HO + 2580 5 1720 1717 1712 1718 # HC-CT-OH-HO + 2581 1 1726 1722 1721 1723 # HC-CT-CT-OH + 2582 2 1726 1722 1721 1724 # HC-CT-CT-HC + 2583 2 1726 1722 1721 1725 # HC-CT-CT-HC + 2584 3 1727 1722 1721 1723 # OH-CT-CT-OH + 2585 1 1727 1722 1721 1724 # HC-CT-CT-OH + 2586 1 1727 1722 1721 1725 # HC-CT-CT-OH + 2587 1 1728 1722 1721 1723 # HC-CT-CT-OH + 2588 2 1728 1722 1721 1724 # HC-CT-CT-HC + 2589 2 1728 1722 1721 1725 # HC-CT-CT-HC + 2590 4 1729 1723 1721 1722 # CT-CT-OH-HO + 2591 5 1729 1723 1721 1724 # HC-CT-OH-HO + 2592 5 1729 1723 1721 1725 # HC-CT-OH-HO + 2593 4 1730 1727 1722 1721 # CT-CT-OH-HO + 2594 5 1730 1727 1722 1726 # HC-CT-OH-HO + 2595 5 1730 1727 1722 1728 # HC-CT-OH-HO + 2596 1 1736 1732 1731 1733 # HC-CT-CT-OH + 2597 2 1736 1732 1731 1734 # HC-CT-CT-HC + 2598 2 1736 1732 1731 1735 # HC-CT-CT-HC + 2599 3 1737 1732 1731 1733 # OH-CT-CT-OH + 2600 1 1737 1732 1731 1734 # HC-CT-CT-OH + 2601 1 1737 1732 1731 1735 # HC-CT-CT-OH + 2602 1 1738 1732 1731 1733 # HC-CT-CT-OH + 2603 2 1738 1732 1731 1734 # HC-CT-CT-HC + 2604 2 1738 1732 1731 1735 # HC-CT-CT-HC + 2605 4 1739 1733 1731 1732 # CT-CT-OH-HO + 2606 5 1739 1733 1731 1734 # HC-CT-OH-HO + 2607 5 1739 1733 1731 1735 # HC-CT-OH-HO + 2608 4 1740 1737 1732 1731 # CT-CT-OH-HO + 2609 5 1740 1737 1732 1736 # HC-CT-OH-HO + 2610 5 1740 1737 1732 1738 # HC-CT-OH-HO + 2611 1 1746 1742 1741 1743 # HC-CT-CT-OH + 2612 2 1746 1742 1741 1744 # HC-CT-CT-HC + 2613 2 1746 1742 1741 1745 # HC-CT-CT-HC + 2614 3 1747 1742 1741 1743 # OH-CT-CT-OH + 2615 1 1747 1742 1741 1744 # HC-CT-CT-OH + 2616 1 1747 1742 1741 1745 # HC-CT-CT-OH + 2617 1 1748 1742 1741 1743 # HC-CT-CT-OH + 2618 2 1748 1742 1741 1744 # HC-CT-CT-HC + 2619 2 1748 1742 1741 1745 # HC-CT-CT-HC + 2620 4 1749 1743 1741 1742 # CT-CT-OH-HO + 2621 5 1749 1743 1741 1744 # HC-CT-OH-HO + 2622 5 1749 1743 1741 1745 # HC-CT-OH-HO + 2623 4 1750 1747 1742 1741 # CT-CT-OH-HO + 2624 5 1750 1747 1742 1746 # HC-CT-OH-HO + 2625 5 1750 1747 1742 1748 # HC-CT-OH-HO + 2626 1 1756 1752 1751 1753 # HC-CT-CT-OH + 2627 2 1756 1752 1751 1754 # HC-CT-CT-HC + 2628 2 1756 1752 1751 1755 # HC-CT-CT-HC + 2629 3 1757 1752 1751 1753 # OH-CT-CT-OH + 2630 1 1757 1752 1751 1754 # HC-CT-CT-OH + 2631 1 1757 1752 1751 1755 # HC-CT-CT-OH + 2632 1 1758 1752 1751 1753 # HC-CT-CT-OH + 2633 2 1758 1752 1751 1754 # HC-CT-CT-HC + 2634 2 1758 1752 1751 1755 # HC-CT-CT-HC + 2635 4 1759 1753 1751 1752 # CT-CT-OH-HO + 2636 5 1759 1753 1751 1754 # HC-CT-OH-HO + 2637 5 1759 1753 1751 1755 # HC-CT-OH-HO + 2638 4 1760 1757 1752 1751 # CT-CT-OH-HO + 2639 5 1760 1757 1752 1756 # HC-CT-OH-HO + 2640 5 1760 1757 1752 1758 # HC-CT-OH-HO + 2641 1 1766 1762 1761 1763 # HC-CT-CT-OH + 2642 2 1766 1762 1761 1764 # HC-CT-CT-HC + 2643 2 1766 1762 1761 1765 # HC-CT-CT-HC + 2644 3 1767 1762 1761 1763 # OH-CT-CT-OH + 2645 1 1767 1762 1761 1764 # HC-CT-CT-OH + 2646 1 1767 1762 1761 1765 # HC-CT-CT-OH + 2647 1 1768 1762 1761 1763 # HC-CT-CT-OH + 2648 2 1768 1762 1761 1764 # HC-CT-CT-HC + 2649 2 1768 1762 1761 1765 # HC-CT-CT-HC + 2650 4 1769 1763 1761 1762 # CT-CT-OH-HO + 2651 5 1769 1763 1761 1764 # HC-CT-OH-HO + 2652 5 1769 1763 1761 1765 # HC-CT-OH-HO + 2653 4 1770 1767 1762 1761 # CT-CT-OH-HO + 2654 5 1770 1767 1762 1766 # HC-CT-OH-HO + 2655 5 1770 1767 1762 1768 # HC-CT-OH-HO + 2656 1 1776 1772 1771 1773 # HC-CT-CT-OH + 2657 2 1776 1772 1771 1774 # HC-CT-CT-HC + 2658 2 1776 1772 1771 1775 # HC-CT-CT-HC + 2659 3 1777 1772 1771 1773 # OH-CT-CT-OH + 2660 1 1777 1772 1771 1774 # HC-CT-CT-OH + 2661 1 1777 1772 1771 1775 # HC-CT-CT-OH + 2662 1 1778 1772 1771 1773 # HC-CT-CT-OH + 2663 2 1778 1772 1771 1774 # HC-CT-CT-HC + 2664 2 1778 1772 1771 1775 # HC-CT-CT-HC + 2665 4 1779 1773 1771 1772 # CT-CT-OH-HO + 2666 5 1779 1773 1771 1774 # HC-CT-OH-HO + 2667 5 1779 1773 1771 1775 # HC-CT-OH-HO + 2668 4 1780 1777 1772 1771 # CT-CT-OH-HO + 2669 5 1780 1777 1772 1776 # HC-CT-OH-HO + 2670 5 1780 1777 1772 1778 # HC-CT-OH-HO + 2671 1 1786 1782 1781 1783 # HC-CT-CT-OH + 2672 2 1786 1782 1781 1784 # HC-CT-CT-HC + 2673 2 1786 1782 1781 1785 # HC-CT-CT-HC + 2674 3 1787 1782 1781 1783 # OH-CT-CT-OH + 2675 1 1787 1782 1781 1784 # HC-CT-CT-OH + 2676 1 1787 1782 1781 1785 # HC-CT-CT-OH + 2677 1 1788 1782 1781 1783 # HC-CT-CT-OH + 2678 2 1788 1782 1781 1784 # HC-CT-CT-HC + 2679 2 1788 1782 1781 1785 # HC-CT-CT-HC + 2680 4 1789 1783 1781 1782 # CT-CT-OH-HO + 2681 5 1789 1783 1781 1784 # HC-CT-OH-HO + 2682 5 1789 1783 1781 1785 # HC-CT-OH-HO + 2683 4 1790 1787 1782 1781 # CT-CT-OH-HO + 2684 5 1790 1787 1782 1786 # HC-CT-OH-HO + 2685 5 1790 1787 1782 1788 # HC-CT-OH-HO + 2686 1 1796 1792 1791 1793 # HC-CT-CT-OH + 2687 2 1796 1792 1791 1794 # HC-CT-CT-HC + 2688 2 1796 1792 1791 1795 # HC-CT-CT-HC + 2689 3 1797 1792 1791 1793 # OH-CT-CT-OH + 2690 1 1797 1792 1791 1794 # HC-CT-CT-OH + 2691 1 1797 1792 1791 1795 # HC-CT-CT-OH + 2692 1 1798 1792 1791 1793 # HC-CT-CT-OH + 2693 2 1798 1792 1791 1794 # HC-CT-CT-HC + 2694 2 1798 1792 1791 1795 # HC-CT-CT-HC + 2695 4 1799 1793 1791 1792 # CT-CT-OH-HO + 2696 5 1799 1793 1791 1794 # HC-CT-OH-HO + 2697 5 1799 1793 1791 1795 # HC-CT-OH-HO + 2698 4 1800 1797 1792 1791 # CT-CT-OH-HO + 2699 5 1800 1797 1792 1796 # HC-CT-OH-HO + 2700 5 1800 1797 1792 1798 # HC-CT-OH-HO + 2701 1 1806 1802 1801 1803 # HC-CT-CT-OH + 2702 2 1806 1802 1801 1804 # HC-CT-CT-HC + 2703 2 1806 1802 1801 1805 # HC-CT-CT-HC + 2704 3 1807 1802 1801 1803 # OH-CT-CT-OH + 2705 1 1807 1802 1801 1804 # HC-CT-CT-OH + 2706 1 1807 1802 1801 1805 # HC-CT-CT-OH + 2707 1 1808 1802 1801 1803 # HC-CT-CT-OH + 2708 2 1808 1802 1801 1804 # HC-CT-CT-HC + 2709 2 1808 1802 1801 1805 # HC-CT-CT-HC + 2710 4 1809 1803 1801 1802 # CT-CT-OH-HO + 2711 5 1809 1803 1801 1804 # HC-CT-OH-HO + 2712 5 1809 1803 1801 1805 # HC-CT-OH-HO + 2713 4 1810 1807 1802 1801 # CT-CT-OH-HO + 2714 5 1810 1807 1802 1806 # HC-CT-OH-HO + 2715 5 1810 1807 1802 1808 # HC-CT-OH-HO + 2716 1 1816 1812 1811 1813 # HC-CT-CT-OH + 2717 2 1816 1812 1811 1814 # HC-CT-CT-HC + 2718 2 1816 1812 1811 1815 # HC-CT-CT-HC + 2719 3 1817 1812 1811 1813 # OH-CT-CT-OH + 2720 1 1817 1812 1811 1814 # HC-CT-CT-OH + 2721 1 1817 1812 1811 1815 # HC-CT-CT-OH + 2722 1 1818 1812 1811 1813 # HC-CT-CT-OH + 2723 2 1818 1812 1811 1814 # HC-CT-CT-HC + 2724 2 1818 1812 1811 1815 # HC-CT-CT-HC + 2725 4 1819 1813 1811 1812 # CT-CT-OH-HO + 2726 5 1819 1813 1811 1814 # HC-CT-OH-HO + 2727 5 1819 1813 1811 1815 # HC-CT-OH-HO + 2728 4 1820 1817 1812 1811 # CT-CT-OH-HO + 2729 5 1820 1817 1812 1816 # HC-CT-OH-HO + 2730 5 1820 1817 1812 1818 # HC-CT-OH-HO + 2731 1 1826 1822 1821 1823 # HC-CT-CT-OH + 2732 2 1826 1822 1821 1824 # HC-CT-CT-HC + 2733 2 1826 1822 1821 1825 # HC-CT-CT-HC + 2734 3 1827 1822 1821 1823 # OH-CT-CT-OH + 2735 1 1827 1822 1821 1824 # HC-CT-CT-OH + 2736 1 1827 1822 1821 1825 # HC-CT-CT-OH + 2737 1 1828 1822 1821 1823 # HC-CT-CT-OH + 2738 2 1828 1822 1821 1824 # HC-CT-CT-HC + 2739 2 1828 1822 1821 1825 # HC-CT-CT-HC + 2740 4 1829 1823 1821 1822 # CT-CT-OH-HO + 2741 5 1829 1823 1821 1824 # HC-CT-OH-HO + 2742 5 1829 1823 1821 1825 # HC-CT-OH-HO + 2743 4 1830 1827 1822 1821 # CT-CT-OH-HO + 2744 5 1830 1827 1822 1826 # HC-CT-OH-HO + 2745 5 1830 1827 1822 1828 # HC-CT-OH-HO + 2746 1 1836 1832 1831 1833 # HC-CT-CT-OH + 2747 2 1836 1832 1831 1834 # HC-CT-CT-HC + 2748 2 1836 1832 1831 1835 # HC-CT-CT-HC + 2749 3 1837 1832 1831 1833 # OH-CT-CT-OH + 2750 1 1837 1832 1831 1834 # HC-CT-CT-OH + 2751 1 1837 1832 1831 1835 # HC-CT-CT-OH + 2752 1 1838 1832 1831 1833 # HC-CT-CT-OH + 2753 2 1838 1832 1831 1834 # HC-CT-CT-HC + 2754 2 1838 1832 1831 1835 # HC-CT-CT-HC + 2755 4 1839 1833 1831 1832 # CT-CT-OH-HO + 2756 5 1839 1833 1831 1834 # HC-CT-OH-HO + 2757 5 1839 1833 1831 1835 # HC-CT-OH-HO + 2758 4 1840 1837 1832 1831 # CT-CT-OH-HO + 2759 5 1840 1837 1832 1836 # HC-CT-OH-HO + 2760 5 1840 1837 1832 1838 # HC-CT-OH-HO + 2761 1 1846 1842 1841 1843 # HC-CT-CT-OH + 2762 2 1846 1842 1841 1844 # HC-CT-CT-HC + 2763 2 1846 1842 1841 1845 # HC-CT-CT-HC + 2764 3 1847 1842 1841 1843 # OH-CT-CT-OH + 2765 1 1847 1842 1841 1844 # HC-CT-CT-OH + 2766 1 1847 1842 1841 1845 # HC-CT-CT-OH + 2767 1 1848 1842 1841 1843 # HC-CT-CT-OH + 2768 2 1848 1842 1841 1844 # HC-CT-CT-HC + 2769 2 1848 1842 1841 1845 # HC-CT-CT-HC + 2770 4 1849 1843 1841 1842 # CT-CT-OH-HO + 2771 5 1849 1843 1841 1844 # HC-CT-OH-HO + 2772 5 1849 1843 1841 1845 # HC-CT-OH-HO + 2773 4 1850 1847 1842 1841 # CT-CT-OH-HO + 2774 5 1850 1847 1842 1846 # HC-CT-OH-HO + 2775 5 1850 1847 1842 1848 # HC-CT-OH-HO + 2776 1 1856 1852 1851 1853 # HC-CT-CT-OH + 2777 2 1856 1852 1851 1854 # HC-CT-CT-HC + 2778 2 1856 1852 1851 1855 # HC-CT-CT-HC + 2779 3 1857 1852 1851 1853 # OH-CT-CT-OH + 2780 1 1857 1852 1851 1854 # HC-CT-CT-OH + 2781 1 1857 1852 1851 1855 # HC-CT-CT-OH + 2782 1 1858 1852 1851 1853 # HC-CT-CT-OH + 2783 2 1858 1852 1851 1854 # HC-CT-CT-HC + 2784 2 1858 1852 1851 1855 # HC-CT-CT-HC + 2785 4 1859 1853 1851 1852 # CT-CT-OH-HO + 2786 5 1859 1853 1851 1854 # HC-CT-OH-HO + 2787 5 1859 1853 1851 1855 # HC-CT-OH-HO + 2788 4 1860 1857 1852 1851 # CT-CT-OH-HO + 2789 5 1860 1857 1852 1856 # HC-CT-OH-HO + 2790 5 1860 1857 1852 1858 # HC-CT-OH-HO + 2791 1 1866 1862 1861 1863 # HC-CT-CT-OH + 2792 2 1866 1862 1861 1864 # HC-CT-CT-HC + 2793 2 1866 1862 1861 1865 # HC-CT-CT-HC + 2794 3 1867 1862 1861 1863 # OH-CT-CT-OH + 2795 1 1867 1862 1861 1864 # HC-CT-CT-OH + 2796 1 1867 1862 1861 1865 # HC-CT-CT-OH + 2797 1 1868 1862 1861 1863 # HC-CT-CT-OH + 2798 2 1868 1862 1861 1864 # HC-CT-CT-HC + 2799 2 1868 1862 1861 1865 # HC-CT-CT-HC + 2800 4 1869 1863 1861 1862 # CT-CT-OH-HO + 2801 5 1869 1863 1861 1864 # HC-CT-OH-HO + 2802 5 1869 1863 1861 1865 # HC-CT-OH-HO + 2803 4 1870 1867 1862 1861 # CT-CT-OH-HO + 2804 5 1870 1867 1862 1866 # HC-CT-OH-HO + 2805 5 1870 1867 1862 1868 # HC-CT-OH-HO + 2806 1 1876 1872 1871 1873 # HC-CT-CT-OH + 2807 2 1876 1872 1871 1874 # HC-CT-CT-HC + 2808 2 1876 1872 1871 1875 # HC-CT-CT-HC + 2809 3 1877 1872 1871 1873 # OH-CT-CT-OH + 2810 1 1877 1872 1871 1874 # HC-CT-CT-OH + 2811 1 1877 1872 1871 1875 # HC-CT-CT-OH + 2812 1 1878 1872 1871 1873 # HC-CT-CT-OH + 2813 2 1878 1872 1871 1874 # HC-CT-CT-HC + 2814 2 1878 1872 1871 1875 # HC-CT-CT-HC + 2815 4 1879 1873 1871 1872 # CT-CT-OH-HO + 2816 5 1879 1873 1871 1874 # HC-CT-OH-HO + 2817 5 1879 1873 1871 1875 # HC-CT-OH-HO + 2818 4 1880 1877 1872 1871 # CT-CT-OH-HO + 2819 5 1880 1877 1872 1876 # HC-CT-OH-HO + 2820 5 1880 1877 1872 1878 # HC-CT-OH-HO + 2821 1 1886 1882 1881 1883 # HC-CT-CT-OH + 2822 2 1886 1882 1881 1884 # HC-CT-CT-HC + 2823 2 1886 1882 1881 1885 # HC-CT-CT-HC + 2824 3 1887 1882 1881 1883 # OH-CT-CT-OH + 2825 1 1887 1882 1881 1884 # HC-CT-CT-OH + 2826 1 1887 1882 1881 1885 # HC-CT-CT-OH + 2827 1 1888 1882 1881 1883 # HC-CT-CT-OH + 2828 2 1888 1882 1881 1884 # HC-CT-CT-HC + 2829 2 1888 1882 1881 1885 # HC-CT-CT-HC + 2830 4 1889 1883 1881 1882 # CT-CT-OH-HO + 2831 5 1889 1883 1881 1884 # HC-CT-OH-HO + 2832 5 1889 1883 1881 1885 # HC-CT-OH-HO + 2833 4 1890 1887 1882 1881 # CT-CT-OH-HO + 2834 5 1890 1887 1882 1886 # HC-CT-OH-HO + 2835 5 1890 1887 1882 1888 # HC-CT-OH-HO + 2836 1 1896 1892 1891 1893 # HC-CT-CT-OH + 2837 2 1896 1892 1891 1894 # HC-CT-CT-HC + 2838 2 1896 1892 1891 1895 # HC-CT-CT-HC + 2839 3 1897 1892 1891 1893 # OH-CT-CT-OH + 2840 1 1897 1892 1891 1894 # HC-CT-CT-OH + 2841 1 1897 1892 1891 1895 # HC-CT-CT-OH + 2842 1 1898 1892 1891 1893 # HC-CT-CT-OH + 2843 2 1898 1892 1891 1894 # HC-CT-CT-HC + 2844 2 1898 1892 1891 1895 # HC-CT-CT-HC + 2845 4 1899 1893 1891 1892 # CT-CT-OH-HO + 2846 5 1899 1893 1891 1894 # HC-CT-OH-HO + 2847 5 1899 1893 1891 1895 # HC-CT-OH-HO + 2848 4 1900 1897 1892 1891 # CT-CT-OH-HO + 2849 5 1900 1897 1892 1896 # HC-CT-OH-HO + 2850 5 1900 1897 1892 1898 # HC-CT-OH-HO + 2851 1 1906 1902 1901 1903 # HC-CT-CT-OH + 2852 2 1906 1902 1901 1904 # HC-CT-CT-HC + 2853 2 1906 1902 1901 1905 # HC-CT-CT-HC + 2854 3 1907 1902 1901 1903 # OH-CT-CT-OH + 2855 1 1907 1902 1901 1904 # HC-CT-CT-OH + 2856 1 1907 1902 1901 1905 # HC-CT-CT-OH + 2857 1 1908 1902 1901 1903 # HC-CT-CT-OH + 2858 2 1908 1902 1901 1904 # HC-CT-CT-HC + 2859 2 1908 1902 1901 1905 # HC-CT-CT-HC + 2860 4 1909 1903 1901 1902 # CT-CT-OH-HO + 2861 5 1909 1903 1901 1904 # HC-CT-OH-HO + 2862 5 1909 1903 1901 1905 # HC-CT-OH-HO + 2863 4 1910 1907 1902 1901 # CT-CT-OH-HO + 2864 5 1910 1907 1902 1906 # HC-CT-OH-HO + 2865 5 1910 1907 1902 1908 # HC-CT-OH-HO + 2866 1 1916 1912 1911 1913 # HC-CT-CT-OH + 2867 2 1916 1912 1911 1914 # HC-CT-CT-HC + 2868 2 1916 1912 1911 1915 # HC-CT-CT-HC + 2869 3 1917 1912 1911 1913 # OH-CT-CT-OH + 2870 1 1917 1912 1911 1914 # HC-CT-CT-OH + 2871 1 1917 1912 1911 1915 # HC-CT-CT-OH + 2872 1 1918 1912 1911 1913 # HC-CT-CT-OH + 2873 2 1918 1912 1911 1914 # HC-CT-CT-HC + 2874 2 1918 1912 1911 1915 # HC-CT-CT-HC + 2875 4 1919 1913 1911 1912 # CT-CT-OH-HO + 2876 5 1919 1913 1911 1914 # HC-CT-OH-HO + 2877 5 1919 1913 1911 1915 # HC-CT-OH-HO + 2878 4 1920 1917 1912 1911 # CT-CT-OH-HO + 2879 5 1920 1917 1912 1916 # HC-CT-OH-HO + 2880 5 1920 1917 1912 1918 # HC-CT-OH-HO + 2881 1 1926 1922 1921 1923 # HC-CT-CT-OH + 2882 2 1926 1922 1921 1924 # HC-CT-CT-HC + 2883 2 1926 1922 1921 1925 # HC-CT-CT-HC + 2884 3 1927 1922 1921 1923 # OH-CT-CT-OH + 2885 1 1927 1922 1921 1924 # HC-CT-CT-OH + 2886 1 1927 1922 1921 1925 # HC-CT-CT-OH + 2887 1 1928 1922 1921 1923 # HC-CT-CT-OH + 2888 2 1928 1922 1921 1924 # HC-CT-CT-HC + 2889 2 1928 1922 1921 1925 # HC-CT-CT-HC + 2890 4 1929 1923 1921 1922 # CT-CT-OH-HO + 2891 5 1929 1923 1921 1924 # HC-CT-OH-HO + 2892 5 1929 1923 1921 1925 # HC-CT-OH-HO + 2893 4 1930 1927 1922 1921 # CT-CT-OH-HO + 2894 5 1930 1927 1922 1926 # HC-CT-OH-HO + 2895 5 1930 1927 1922 1928 # HC-CT-OH-HO + 2896 1 1936 1932 1931 1933 # HC-CT-CT-OH + 2897 2 1936 1932 1931 1934 # HC-CT-CT-HC + 2898 2 1936 1932 1931 1935 # HC-CT-CT-HC + 2899 3 1937 1932 1931 1933 # OH-CT-CT-OH + 2900 1 1937 1932 1931 1934 # HC-CT-CT-OH + 2901 1 1937 1932 1931 1935 # HC-CT-CT-OH + 2902 1 1938 1932 1931 1933 # HC-CT-CT-OH + 2903 2 1938 1932 1931 1934 # HC-CT-CT-HC + 2904 2 1938 1932 1931 1935 # HC-CT-CT-HC + 2905 4 1939 1933 1931 1932 # CT-CT-OH-HO + 2906 5 1939 1933 1931 1934 # HC-CT-OH-HO + 2907 5 1939 1933 1931 1935 # HC-CT-OH-HO + 2908 4 1940 1937 1932 1931 # CT-CT-OH-HO + 2909 5 1940 1937 1932 1936 # HC-CT-OH-HO + 2910 5 1940 1937 1932 1938 # HC-CT-OH-HO + 2911 1 1946 1942 1941 1943 # HC-CT-CT-OH + 2912 2 1946 1942 1941 1944 # HC-CT-CT-HC + 2913 2 1946 1942 1941 1945 # HC-CT-CT-HC + 2914 3 1947 1942 1941 1943 # OH-CT-CT-OH + 2915 1 1947 1942 1941 1944 # HC-CT-CT-OH + 2916 1 1947 1942 1941 1945 # HC-CT-CT-OH + 2917 1 1948 1942 1941 1943 # HC-CT-CT-OH + 2918 2 1948 1942 1941 1944 # HC-CT-CT-HC + 2919 2 1948 1942 1941 1945 # HC-CT-CT-HC + 2920 4 1949 1943 1941 1942 # CT-CT-OH-HO + 2921 5 1949 1943 1941 1944 # HC-CT-OH-HO + 2922 5 1949 1943 1941 1945 # HC-CT-OH-HO + 2923 4 1950 1947 1942 1941 # CT-CT-OH-HO + 2924 5 1950 1947 1942 1946 # HC-CT-OH-HO + 2925 5 1950 1947 1942 1948 # HC-CT-OH-HO + 2926 1 1956 1952 1951 1953 # HC-CT-CT-OH + 2927 2 1956 1952 1951 1954 # HC-CT-CT-HC + 2928 2 1956 1952 1951 1955 # HC-CT-CT-HC + 2929 3 1957 1952 1951 1953 # OH-CT-CT-OH + 2930 1 1957 1952 1951 1954 # HC-CT-CT-OH + 2931 1 1957 1952 1951 1955 # HC-CT-CT-OH + 2932 1 1958 1952 1951 1953 # HC-CT-CT-OH + 2933 2 1958 1952 1951 1954 # HC-CT-CT-HC + 2934 2 1958 1952 1951 1955 # HC-CT-CT-HC + 2935 4 1959 1953 1951 1952 # CT-CT-OH-HO + 2936 5 1959 1953 1951 1954 # HC-CT-OH-HO + 2937 5 1959 1953 1951 1955 # HC-CT-OH-HO + 2938 4 1960 1957 1952 1951 # CT-CT-OH-HO + 2939 5 1960 1957 1952 1956 # HC-CT-OH-HO + 2940 5 1960 1957 1952 1958 # HC-CT-OH-HO + 2941 1 1966 1962 1961 1963 # HC-CT-CT-OH + 2942 2 1966 1962 1961 1964 # HC-CT-CT-HC + 2943 2 1966 1962 1961 1965 # HC-CT-CT-HC + 2944 3 1967 1962 1961 1963 # OH-CT-CT-OH + 2945 1 1967 1962 1961 1964 # HC-CT-CT-OH + 2946 1 1967 1962 1961 1965 # HC-CT-CT-OH + 2947 1 1968 1962 1961 1963 # HC-CT-CT-OH + 2948 2 1968 1962 1961 1964 # HC-CT-CT-HC + 2949 2 1968 1962 1961 1965 # HC-CT-CT-HC + 2950 4 1969 1963 1961 1962 # CT-CT-OH-HO + 2951 5 1969 1963 1961 1964 # HC-CT-OH-HO + 2952 5 1969 1963 1961 1965 # HC-CT-OH-HO + 2953 4 1970 1967 1962 1961 # CT-CT-OH-HO + 2954 5 1970 1967 1962 1966 # HC-CT-OH-HO + 2955 5 1970 1967 1962 1968 # HC-CT-OH-HO + 2956 1 1976 1972 1971 1973 # HC-CT-CT-OH + 2957 2 1976 1972 1971 1974 # HC-CT-CT-HC + 2958 2 1976 1972 1971 1975 # HC-CT-CT-HC + 2959 3 1977 1972 1971 1973 # OH-CT-CT-OH + 2960 1 1977 1972 1971 1974 # HC-CT-CT-OH + 2961 1 1977 1972 1971 1975 # HC-CT-CT-OH + 2962 1 1978 1972 1971 1973 # HC-CT-CT-OH + 2963 2 1978 1972 1971 1974 # HC-CT-CT-HC + 2964 2 1978 1972 1971 1975 # HC-CT-CT-HC + 2965 4 1979 1973 1971 1972 # CT-CT-OH-HO + 2966 5 1979 1973 1971 1974 # HC-CT-OH-HO + 2967 5 1979 1973 1971 1975 # HC-CT-OH-HO + 2968 4 1980 1977 1972 1971 # CT-CT-OH-HO + 2969 5 1980 1977 1972 1976 # HC-CT-OH-HO + 2970 5 1980 1977 1972 1978 # HC-CT-OH-HO + 2971 1 1986 1982 1981 1983 # HC-CT-CT-OH + 2972 2 1986 1982 1981 1984 # HC-CT-CT-HC + 2973 2 1986 1982 1981 1985 # HC-CT-CT-HC + 2974 3 1987 1982 1981 1983 # OH-CT-CT-OH + 2975 1 1987 1982 1981 1984 # HC-CT-CT-OH + 2976 1 1987 1982 1981 1985 # HC-CT-CT-OH + 2977 1 1988 1982 1981 1983 # HC-CT-CT-OH + 2978 2 1988 1982 1981 1984 # HC-CT-CT-HC + 2979 2 1988 1982 1981 1985 # HC-CT-CT-HC + 2980 4 1989 1983 1981 1982 # CT-CT-OH-HO + 2981 5 1989 1983 1981 1984 # HC-CT-OH-HO + 2982 5 1989 1983 1981 1985 # HC-CT-OH-HO + 2983 4 1990 1987 1982 1981 # CT-CT-OH-HO + 2984 5 1990 1987 1982 1986 # HC-CT-OH-HO + 2985 5 1990 1987 1982 1988 # HC-CT-OH-HO + 2986 1 1996 1992 1991 1993 # HC-CT-CT-OH + 2987 2 1996 1992 1991 1994 # HC-CT-CT-HC + 2988 2 1996 1992 1991 1995 # HC-CT-CT-HC + 2989 3 1997 1992 1991 1993 # OH-CT-CT-OH + 2990 1 1997 1992 1991 1994 # HC-CT-CT-OH + 2991 1 1997 1992 1991 1995 # HC-CT-CT-OH + 2992 1 1998 1992 1991 1993 # HC-CT-CT-OH + 2993 2 1998 1992 1991 1994 # HC-CT-CT-HC + 2994 2 1998 1992 1991 1995 # HC-CT-CT-HC + 2995 4 1999 1993 1991 1992 # CT-CT-OH-HO + 2996 5 1999 1993 1991 1994 # HC-CT-OH-HO + 2997 5 1999 1993 1991 1995 # HC-CT-OH-HO + 2998 4 2000 1997 1992 1991 # CT-CT-OH-HO + 2999 5 2000 1997 1992 1996 # HC-CT-OH-HO + 3000 5 2000 1997 1992 1998 # HC-CT-OH-HO diff --git a/examples/USER/drude/ethylene_glycol/in.eg.lmp b/examples/USER/drude/ethylene_glycol/in.eg.lmp new file mode 100644 index 0000000000..24d763602a --- /dev/null +++ b/examples/USER/drude/ethylene_glycol/in.eg.lmp @@ -0,0 +1,81 @@ +# created by fftool + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls + +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 coul/tt 4 8.0 +pair_modify tail yes +kspace_style pppm 1.0e-5 + +read_data data.eg.lmp + +pair_coeff 1 1 lj/cut/coul/long 0.057289 3.500000 # CTO CTO ~ +pair_coeff 1 2 lj/cut/coul/long 0.091945 3.304542 # CTO OHG ~ +pair_coeff 1 3 lj/cut/coul/long 0.038625 2.958040 # CTO H1O ~ +pair_coeff 1 4 lj/cut/coul/long 0.000000 0.000000 # CTO HOG ~ +pair_coeff 2 2 lj/cut/coul/long 0.147565 3.120000 # OHG OHG ~ +pair_coeff 2 3 lj/cut/coul/long 0.061990 2.792848 # OHG H1O ~ +pair_coeff 2 4 lj/cut/coul/long 0.000000 0.000000 # OHG HOG ~ +pair_coeff 3 3 lj/cut/coul/long 0.026041 2.500000 # H1O H1O ~ +pair_coeff 3 4 lj/cut/coul/long 0.000000 0.000000 # H1O HOG ~ +pair_coeff 4 4 lj/cut/coul/long 0.000000 0.000000 # HOG HOG ~ +pair_coeff * 5* lj/cut/coul/long 0.000000 0.000000 +pair_coeff 1 1 thole 1.662 +pair_coeff 1 2 thole 1.561 +pair_coeff 1 5 thole 1.662 +pair_coeff 1 6 thole 1.561 +pair_coeff 2 2 thole 1.467 +pair_coeff 2 5 thole 1.561 +pair_coeff 2 6 thole 1.467 +pair_coeff 5 5 thole 1.662 +pair_coeff 5 6 thole 1.561 +pair_coeff 6 6 thole 1.467 +pair_coeff 2 4 coul/tt 4.5 1.0 +pair_coeff 4 6 coul/tt 4.5 1.0 +pair_coeff 1 4 coul/tt 4.5 1.0 +pair_coeff 4 5 coul/tt 4.5 1.0 + +group ATOMS type 1 2 3 4 +group CORES type 1 2 +group DRUDES type 5 6 + +fix DRUDE all drude C C N N D D + +fix SHAKE ATOMS shake 0.0001 20 0 b 3 4 + +neighbor 2.0 bin + +timestep 1.0 + +variable TK equal 298.0 +variable TDK equal 1.0 +variable PBAR equal 1.0 + +comm_modify vel yes +velocity ATOMS create ${TK} 12345 + +compute TATOM ATOMS temp +compute TDRUDE all temp/drude + +fix DTDIR all drude/transform/direct +fix TSTAT ATOMS npt temp ${TK} ${TK} 200 iso ${PBAR} ${PBAR} 1000 +fix_modify TSTAT temp TATOM press thermo_press +fix TSTDR DRUDES nvt temp ${TDK} ${TDK} 50 +fix DTINV all drude/transform/inverse + +fix ICECUBE all momentum 1000 linear 1 1 1 + +thermo_style custom step time cpu etotal ke pe ebond eangle evdwl ecoul elong & + press vol density c_TATOM c_TDRUDE[1] c_TDRUDE[2] +thermo 10 + +run 2000 + +write_data data-eq.eg.lmp diff --git a/examples/USER/drude/ethylene_glycol/log.21Sep20.eg.lammps b/examples/USER/drude/ethylene_glycol/log.21Sep20.eg.lammps new file mode 100644 index 0000000000..e85e1fca10 --- /dev/null +++ b/examples/USER/drude/ethylene_glycol/log.21Sep20.eg.lammps @@ -0,0 +1,422 @@ +LAMMPS (24 Aug 2020) +# created by fftool + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls + +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 coul/tt 4 8.0 +pair_modify tail yes +kspace_style pppm 1.0e-5 + +read_data data.eg.lmp +Reading data file ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (35.000000 35.000000 35.000000) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 2800 atoms + scanning bonds ... + 2 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 9 = max dihedrals/atom + reading bonds ... + 2600 bonds + reading angles ... + 2800 angles + reading dihedrals ... + 3000 dihedrals +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0.0 0.0 0.5 + special bond factors coul: 0.0 0.0 0.5 + 5 = max # of 1-2 neighbors + 6 = max # of 1-3 neighbors + 10 = max # of 1-4 neighbors + 13 = max # of special neighbors + special bonds CPU = 0.001 seconds + read_data CPU = 0.014 seconds + +pair_coeff 1 1 lj/cut/coul/long 0.057289 3.500000 # CTO CTO ~ +pair_coeff 1 2 lj/cut/coul/long 0.091945 3.304542 # CTO OHG ~ +pair_coeff 1 3 lj/cut/coul/long 0.038625 2.958040 # CTO H1O ~ +pair_coeff 1 4 lj/cut/coul/long 0.000000 0.000000 # CTO HOG ~ +pair_coeff 2 2 lj/cut/coul/long 0.147565 3.120000 # OHG OHG ~ +pair_coeff 2 3 lj/cut/coul/long 0.061990 2.792848 # OHG H1O ~ +pair_coeff 2 4 lj/cut/coul/long 0.000000 0.000000 # OHG HOG ~ +pair_coeff 3 3 lj/cut/coul/long 0.026041 2.500000 # H1O H1O ~ +pair_coeff 3 4 lj/cut/coul/long 0.000000 0.000000 # H1O HOG ~ +pair_coeff 4 4 lj/cut/coul/long 0.000000 0.000000 # HOG HOG ~ +pair_coeff * 5* lj/cut/coul/long 0.000000 0.000000 +pair_coeff 1 1 thole 1.662 +pair_coeff 1 2 thole 1.561 +pair_coeff 1 5 thole 1.662 +pair_coeff 1 6 thole 1.561 +pair_coeff 2 2 thole 1.467 +pair_coeff 2 5 thole 1.561 +pair_coeff 2 6 thole 1.467 +pair_coeff 5 5 thole 1.662 +pair_coeff 5 6 thole 1.561 +pair_coeff 6 6 thole 1.467 +pair_coeff 2 4 coul/tt 4.5 1.0 +pair_coeff 4 6 coul/tt 4.5 1.0 +pair_coeff 1 4 coul/tt 4.5 1.0 +pair_coeff 4 5 coul/tt 4.5 1.0 + +group ATOMS type 1 2 3 4 +2000 atoms in group ATOMS +group CORES type 1 2 +800 atoms in group CORES +group DRUDES type 5 6 +800 atoms in group DRUDES + +fix DRUDE all drude C C N N D D + +fix SHAKE ATOMS shake 0.0001 20 0 b 3 4 + 400 = # of size 2 clusters + 400 = # of size 3 clusters + 0 = # of size 4 clusters + 0 = # of frozen angles + find clusters CPU = 0.000 seconds + +neighbor 2.0 bin + +timestep 1.0 + +variable TK equal 298.0 +variable TDK equal 1.0 +variable PBAR equal 1.0 + +comm_modify vel yes +velocity ATOMS create ${TK} 12345 +velocity ATOMS create 298 12345 + +compute TATOM ATOMS temp +compute TDRUDE all temp/drude + +fix DTDIR all drude/transform/direct +fix TSTAT ATOMS npt temp ${TK} ${TK} 200 iso ${PBAR} ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 ${TK} 200 iso ${PBAR} ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 298 200 iso ${PBAR} ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 298 200 iso 1 ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 298 200 iso 1 1 1000 +fix_modify TSTAT temp TATOM press thermo_press +WARNING: Temperature for fix modify is not for group all (../fix_nh.cpp:1428) +fix TSTDR DRUDES nvt temp ${TDK} ${TDK} 50 +fix TSTDR DRUDES nvt temp 1 ${TDK} 50 +fix TSTDR DRUDES nvt temp 1 1 50 +fix DTINV all drude/transform/inverse + +fix ICECUBE all momentum 1000 linear 1 1 1 + +thermo_style custom step time cpu etotal ke pe ebond eangle evdwl ecoul elong press vol density c_TATOM c_TDRUDE[1] c_TDRUDE[2] +thermo 10 + +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (../kspace.cpp:328) + G vector (1/distance) = 0.41206781 + grid = 54 54 54 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0040479865 + estimated relative force accuracy = 1.2190391e-05 + using double precision KISS FFT + 3d grid and FFT values/proc = 81648 40824 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 13 +New max number of 1-2 to 1-4 neighbors: 13 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10 + ghost atom cutoff = 10 + binsize = 5, bins = 7 7 7 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair thole, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (3) pair coul/tt, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 21.28 | 21.36 | 21.43 Mbytes +Step Time CPU TotEng KinEng PotEng E_bond E_angle E_vdwl E_coul E_long Press Volume Density c_TATOM c_TDRUDE[1] c_TDRUDE[2] + 0 0 0 2707.9246 1420.362 1287.5627 1474.8647 30.734202 -461.31379 540022.21 -539778.93 -9408.4231 42875 0.48077588 298 294.34401 6.9394757 + 10 10 0.201665 1866.1234 1294.3904 571.73299 570.18548 421.90708 -480.70585 539943.81 -539929.74 805.31575 42854.367 0.48100736 216.74278 221.57505 99.651373 + 20 20 0.40385 1639.4254 1025.541 613.88441 440.75582 630.81291 -511.62082 539884.11 -539931.54 3547.7591 42831.812 0.48126066 189.9745 191.41076 47.238176 + 30 30 0.610653 1509.2246 1199.5696 309.65504 372.66235 422.42807 -441.22393 539785.92 -539996.76 -2255.2096 42822.727 0.48136275 232.23532 234.10184 34.834744 + 40 40 0.811939 1447.7122 1208.8207 238.89149 301.47584 466.79595 -415.52093 539713.64 -540015.07 -2983.4667 42805.664 0.48155464 240.97408 243.39825 20.121373 + 50 50 1.006791 1418.4666 1249.502 168.96462 309.99547 480.01554 -495.04808 539716.53 -540017.02 3344.285 42776.949 0.48187789 252.07241 255.56807 12.841402 + 60 60 1.206454 1401.9371 1239.9607 161.97643 467.90054 298.63561 -481.19864 539718.72 -540016.73 6314.7205 42763.12 0.48203372 251.90217 255.43544 9.1055215 + 70 70 1.40222 1396.4533 1021.9568 374.49649 585.0559 367.14909 -436.69254 539677.13 -540007.02 -9573.8026 42770.007 0.4819561 207.52883 210.90348 6.7497287 + 80 80 1.607893 1388.5231 1234.429 154.09415 291.38001 446.20262 -454.21016 539690.22 -540020.29 -2596.442 42743.245 0.48225786 251.84239 256.22625 5.2041747 + 90 90 1.809296 1390.1274 1165.6307 224.49668 292.42639 610.78166 -509.169 539648.43 -540009.54 2755.6799 42701.879 0.48272503 239.29515 242.40904 3.9881039 + 100 100 2.00484 1391.6311 1287.2692 104.36195 333.86638 427.43215 -456.38003 539638.17 -540023.61 -3962.1784 42668.283 0.48310512 265.74273 268.23371 3.3477446 + 110 110 2.210337 1392.4962 1128.7784 263.71774 341.80093 547.86435 -397.70381 539615.87 -540033.75 -5131.6567 42619.2 0.48366149 231.88962 235.24089 2.8704377 + 120 120 2.408385 1391.2911 1316.2526 75.038553 302.07876 445.61484 -439.78763 539603.43 -540019.07 376.35842 42547.904 0.48447195 270.46432 274.66659 2.6361343 + 130 130 2.609918 1400.0627 1131.989 268.07372 519.48714 417.6662 -431.15046 539616.71 -540036.69 8538.062 42480.874 0.48523639 233.04019 236.40125 1.8960582 + 140 140 2.806209 1404.1878 1334.9133 69.274512 389.421 393.34067 -367.2924 539507.94 -540028.8 -4426.6651 42444.674 0.48565024 275.02782 279.10558 1.5835267 + 150 150 3.00539 1404.7864 1334.1949 70.591471 285.69314 480.49153 -340.69071 539518.01 -540045.75 -2082.9184 42395.713 0.48621109 274.19439 278.9463 1.6008215 + 160 160 3.204755 1412.6555 1291.707 120.94843 348.7604 575.18871 -418.38779 539483.99 -540034.49 5790.6824 42339.303 0.48685889 266.64535 270.16691 1.3423664 + 170 170 3.408187 1417.1467 1394.9631 22.183576 347.96723 497.00846 -398.67453 539439.29 -540027.81 -2071.8934 42303.603 0.48726974 288.38891 291.92774 1.1210284 + 180 180 3.609337 1420.2155 1260.1515 160.06402 383.6767 547.79961 -344.95473 539442.15 -540043.12 -5707.9251 42261.493 0.48775527 259.80398 263.64509 1.1531929 + 190 190 3.805143 1419.3667 1375.1626 44.20412 383.71873 500.13275 -378.41788 539388.43 -540024.18 -3451.5079 42194.665 0.48852777 283.36482 287.66025 1.3527012 + 200 200 4.00597 1425.8199 1378.4982 47.321658 460.35819 459.3409 -415.44783 539411.67 -540044.6 6205.8009 42117.045 0.48942811 284.32248 288.46226 1.1474766 + 210 210 4.244616 1432.8476 1458.7461 -25.898456 348.39192 519.78477 -364.59687 539324.82 -540036.04 -2670.2448 42061.074 0.4900794 300.62025 305.40698 0.90989006 + 220 220 4.447524 1433.9234 1316.4385 117.48481 361.7325 586.07086 -288.11279 539309.49 -540044.33 -3665.7207 41997.584 0.49082028 270.93115 275.42918 1.1889587 + 230 230 4.653393 1439.0053 1526.3478 -87.342481 396.7696 419.31409 -364.6791 539312.78 -540045.43 7360.3024 41924.153 0.49167997 315.32585 319.5731 0.92637024 + 240 240 4.889968 1447.1229 1465.5412 -18.418302 387.84585 555.89043 -357.40374 539236.35 -540033.29 1804.1542 41878.572 0.49221511 302.34061 306.96246 0.64844737 + 250 250 5.101767 1451.5311 1408.0791 43.45194 376.3631 598.22558 -302.55739 539235.03 -540053.8 -3523.5223 41843.302 0.49263001 290.29736 294.90586 0.66500213 + 260 260 5.302457 1451.9121 1486.9381 -35.026077 439.39664 496.53832 -294.82206 539179.22 -540041.63 -3359.5387 41794.408 0.49320632 306.86146 311.37486 0.79643935 + 270 270 5.534307 1455.7824 1489.843 -34.060558 384.68471 584.31906 -345.52522 539213.2 -540050.09 4219.7836 41735.543 0.49390195 307.5027 312.00087 0.76256302 + 280 280 5.73088 1459.6907 1557.7147 -98.024008 363.40614 544.03098 -338.5609 539195.96 -540044.55 -1927.5595 41691.464 0.49442413 321.11857 326.30138 0.62349308 + 290 290 5.932546 1458.5631 1502.6363 -44.073215 468.8459 480.27985 -273.9133 539154.14 -540045.25 -6405.1654 41640.349 0.49503105 309.96993 314.62142 0.88634485 + 300 300 6.128592 1460.3316 1532.4499 -72.118356 394.63943 561.19456 -334.56113 539192.83 -540050.12 4984.7229 41569.486 0.49587494 316.03908 320.88619 0.85911177 + 310 310 6.331105 1465.7207 1493.2205 -27.499762 413.70607 630.92768 -345.49768 539150.28 -540033.83 3577.7221 41517.391 0.49649714 307.69086 312.804 0.57266056 + 320 320 6.52852 1465.4884 1660.5835 -195.09515 367.20331 477.59376 -303.61686 539152.63 -540037.91 -1201.1187 41482.202 0.49691832 342.85699 347.89088 0.58244251 + 330 330 6.733947 1465.9531 1506.4899 -40.536832 425.91339 568.10087 -249.05183 539108.48 -540033.08 -1066.8345 41444.504 0.49737031 310.75802 315.56257 0.62004599 + 340 340 6.934754 1465.9409 1557.6309 -91.689954 381.9757 625.89222 -296.40182 539081.74 -540030.48 4892.9614 41406.266 0.49782962 321.30624 326.29428 0.60252992 + 350 350 7.133858 1465.3216 1564.1509 -98.829249 418.42971 585.969 -296.62488 539077.24 -540036.78 740.63262 41386.895 0.49806264 322.55732 327.69219 0.54088039 + 360 360 7.338907 1462.6063 1545.8695 -83.263187 514.18444 506.65279 -255.48445 539024 -540031.84 -7180.551 41369.254 0.49827502 319.00076 323.79932 0.66034813 + 370 370 7.542607 1458.1677 1587.9359 -129.76813 389.00186 580.31846 -293.01684 539062.35 -540044.02 1831.7432 41328.293 0.49876886 327.289 332.55424 0.79099417 + 380 380 7.740463 1456.1241 1571.9683 -115.84419 389.73014 617.48805 -335.78903 539071.87 -540039.48 3128.4098 41293.129 0.49919361 324.14181 329.2188 0.76588497 + 390 390 7.943726 1451.8992 1566.361 -114.46186 409.57976 595.32696 -323.84233 539065.42 -540042.85 -2047.2083 41270.539 0.49946685 323.40659 328.06158 0.72893025 + 400 400 8.145595 1446.0615 1528.773 -82.711545 414.46841 582.41732 -279.89532 539064.81 -540045.35 -1758.08 41241.935 0.49981326 314.95174 320.11166 0.86625721 + 410 410 8.344249 1440.2008 1651.8275 -211.62673 396.56535 533.57242 -312.80543 539046.01 -540042.07 4444.0109 41209.153 0.50021086 340.45089 345.88102 0.9303561 + 420 420 8.558267 1435.656 1554.4611 -118.8051 454.51384 576.06992 -316.30443 539049.5 -540045.56 3709.2794 41194.366 0.50039042 320.18805 325.47827 0.90533299 + 430 430 8.769287 1427.9462 1634.1272 -206.18106 461.69471 552.57081 -278.82069 538945.64 -540038.11 -5309.7454 41192.427 0.50041397 336.91747 342.13613 0.99752281 + 440 440 8.972045 1419.5459 1581.5366 -161.99068 418.65549 618.71776 -258.37568 538949.12 -540039.03 -45.053757 41173.677 0.50064185 325.71857 331.04837 1.1191906 + 450 450 9.169624 1411.6639 1569.3142 -157.65035 380.53742 668.13347 -290.80748 538968.35 -540032.62 3122.8222 41154.153 0.50087936 323.37981 328.45983 1.1708438 + 460 460 9.374355 1402.5334 1627.6142 -225.08079 452.17261 578.69141 -298.30585 538927.95 -540030.11 -2417.8519 41145.38 0.50098616 335.41854 340.63875 1.2610557 + 470 470 9.571992 1393.2236 1617.2885 -224.06489 436.18212 569.79211 -278.51933 538933.86 -540035.19 -3103.9609 41128.381 0.50119323 333.10318 338.43628 1.3359175 + 480 480 9.780216 1384.5295 1583.0615 -198.53199 460.65721 603.39994 -285.15851 538894.86 -540025.61 2315.242 41100.555 0.50153254 325.89632 331.2083 1.4388068 + 490 490 9.979856 1375.6696 1607.7362 -232.06655 478.07831 546.08808 -283.66976 538902.42 -540031.78 4472.4169 41082.807 0.50174921 331.37679 336.42468 1.3533669 + 500 500 10.184838 1366.0159 1653.6341 -287.61812 433.24034 598.38535 -281.95695 538837.44 -540025.77 -2921.1083 41080.827 0.5017734 340.53355 346.03811 1.3737347 + 510 510 10.396907 1356.1785 1625.4343 -269.25582 430.87164 614.37229 -274.02613 538850.25 -540029.1 -514.63413 41070.415 0.5019006 334.54685 340.1105 1.4034076 + 520 520 10.597572 1345.9803 1672.4272 -326.44692 410.44251 589.22282 -300.56101 538873.38 -540022.33 3423.1019 41058.605 0.50204497 344.74979 349.98307 1.3647023 + 530 530 10.800114 1335.9908 1610.2842 -274.29341 453.69553 630.07905 -307.15955 538849.94 -540018.03 -1600.2251 41058.305 0.50204863 331.45503 336.99781 1.2756028 + 540 540 11.004271 1325.3284 1622.8383 -297.50983 467.0454 565.42045 -284.7694 538855.1 -540019.63 -3638.2655 41052.412 0.5021207 334.16222 339.63113 1.2734996 + 550 550 11.207241 1314.4631 1651.4251 -336.96202 462.52498 578.48562 -284.70119 538808.88 -540016.15 -518.70335 41032.516 0.50236417 340.19545 345.65835 1.2069185 + 560 560 11.409818 1304.2928 1656.256 -351.9632 418.3626 608.41877 -267.15227 538789.68 -540024.32 2812.3348 41011.228 0.50262493 341.36426 346.71795 1.1135433 + 570 570 11.606485 1294.0759 1610.4771 -316.40114 441.78983 648.31376 -262.29938 538733.04 -540018.04 -1538.1626 40999.314 0.502771 332.02401 337.14404 1.0640192 + 580 580 11.808931 1282.4524 1645.2031 -362.75069 440.30488 580.58811 -236.71445 538736.27 -540024.85 -1101.6572 40983 0.50297113 339.25673 344.424 1.0664332 + 590 590 12.013963 1272.0788 1684.9242 -412.84541 426.57598 579.81154 -250.95724 538728.6 -540026.39 3972.5381 40964.393 0.50319959 347.39514 352.81162 0.9481937 + 600 600 12.217631 1260.9837 1675.1424 -414.15866 426.29955 601.62481 -277.0776 538735.86 -540019.69 733.89874 40959.911 0.50325466 345.33847 350.77315 0.92315425 + 610 610 12.421063 1249.4355 1680.3253 -430.88979 461.94541 568.50547 -279.19131 538733 -540020.22 -2637.3171 40958.816 0.50326812 346.5244 351.87492 0.8930443 + 620 620 12.622456 1238.2436 1639.1356 -400.89196 462.34964 648.9058 -282.32391 538687.09 -540016.6 -1272.7738 40948.016 0.50340084 338.09955 343.24784 0.8743544 + 630 630 12.827096 1226.2102 1700.4355 -474.22536 415.43324 626.07728 -284.77036 538701.1 -540024.64 1191.1215 40932.519 0.50359143 350.55404 356.13127 0.81354721 + 640 640 13.029161 1213.6625 1722.4306 -508.76811 451.82932 596.2177 -304.21125 538680.81 -540025.34 -2040.5501 40920.026 0.50374519 355.14014 360.74736 0.80500911 + 650 650 13.240494 1200.523 1711.9652 -511.44222 468.66709 555.52213 -284.35989 538686.74 -540030.85 -3242.3861 40899.595 0.50399682 352.96478 358.53307 0.8449128 + 660 660 13.438967 1188.0333 1686.8332 -498.79991 447.18786 623.78213 -277.2393 538662.53 -540036.47 2062.8 40868.281 0.504383 347.66952 353.26364 0.84470068 + 670 670 13.642934 1176.309 1677.3756 -501.06663 432.41729 630.68477 -246.82119 538633.15 -540025.32 2018.2625 40844.215 0.50468018 345.93001 351.30318 0.79958169 + 680 680 13.847762 1164.0539 1637.268 -473.21403 456.37206 620.05888 -220.36961 538603.84 -540020.32 -976.09071 40828.172 0.50487849 337.63373 342.91086 0.76511377 + 690 690 14.053487 1151.5332 1658.5734 -507.04017 455.22409 597.05127 -207.88025 538576.76 -540018.31 323.34897 40810.021 0.50510305 341.94091 347.36248 0.79627601 + 700 700 14.253089 1139.9903 1700.0553 -560.06498 436.02394 577.80227 -205.50405 538580.01 -540024.21 2001.9128 40793.73 0.50530475 350.53199 356.08655 0.74354299 + 710 710 14.458296 1128.2643 1664.8705 -536.60628 463.70506 651.50664 -230.61516 538538.77 -540025.31 -508.86732 40784.628 0.50541753 343.34437 348.6884 0.78515878 + 720 720 14.663292 1115.9411 1630.2796 -514.33852 506.57764 607.09308 -229.84152 538559.57 -540017.07 -3127.5793 40773.329 0.50555759 336.08992 341.42284 0.81059211 + 730 730 14.865795 1103.0656 1694.1592 -591.09356 450.11958 627.65288 -253.85448 538551.36 -540015.43 -146.32999 40751.104 0.50583332 349.11077 354.74126 0.96159634 + 740 740 15.06561 1090.6612 1721.1435 -630.48227 437.46474 606.18905 -248.87815 538542.97 -540008.35 1077.7969 40727.746 0.50612342 354.64465 360.41017 0.93961199 + 750 750 15.268618 1077.6001 1706.0173 -628.41716 477.13711 591.82616 -241.11378 538505.89 -540005.96 -974.1309 40707.979 0.50636918 351.76494 357.21309 0.99061611 + 760 760 15.468203 1064.8462 1671.2712 -606.42497 459.57992 620.48754 -220.77486 538487.09 -540007.33 -71.64889 40685.72 0.50664622 344.49488 349.92005 1.0059768 + 770 770 15.673284 1052.4557 1681.2022 -628.74649 428.96094 608.2218 -198.40559 538475.09 -540006.2 1856.6076 40663.884 0.50691828 346.27378 351.96343 1.0837482 + 780 780 15.872032 1040.723 1625.9969 -585.27381 458.27519 626.0187 -235.63783 538502.81 -540008.7 1016.2221 40649.237 0.50710094 335.13457 340.40065 1.0590112 + 790 790 16.075992 1028.4064 1633.2536 -604.84719 455.65305 626.15622 -248.78737 538508.38 -540008.88 -1369.2979 40638.582 0.50723389 336.64828 341.88384 1.1357406 + 800 800 16.280536 1015.4954 1666.4595 -650.9641 445.94756 657.57103 -280.18245 538498.84 -540015.1 -1043.1656 40623.317 0.50742449 343.47686 348.83548 1.1573361 + 810 810 16.478913 1002.1183 1685.5373 -683.41906 440.89112 604.14181 -291.89016 538535.57 -540014.83 -581.99461 40603.767 0.50766881 347.41495 352.80847 1.2116042 + 820 820 16.687266 989.15171 1678.3078 -689.15612 455.2621 599.94003 -298.7579 538514.82 -540009.96 -2027.8844 40581.116 0.50795217 345.89589 351.2764 1.2440787 + 830 830 16.891776 975.707 1649.255 -673.54801 458.71883 647.01152 -302.29605 538497.69 -540017.88 -1485.4901 40550.879 0.50833092 339.85438 345.15667 1.3002628 + 840 840 17.091786 962.26855 1667.3243 -705.05577 462.77662 592.72694 -279.50507 538495.49 -540012.35 -54.163113 40514.914 0.50878217 343.40682 348.92391 1.3431364 + 850 850 17.298514 949.49932 1631.9134 -682.4141 478.53288 614.19826 -243.38115 538444.52 -540010.3 310.08768 40478.805 0.50923603 336.30228 341.53075 1.2799218 + 860 860 17.510715 935.99845 1684.7625 -748.76409 440.77296 594.40682 -219.10467 538407.93 -540013.87 248.0022 40444.498 0.50966798 347.06325 352.6711 1.161457 + 870 870 17.726043 922.58003 1694.0713 -771.49127 466.19871 609.11461 -205.02926 538339.03 -540013.71 495.00215 40411.839 0.51007988 349.28528 354.6354 1.1364619 + 880 880 17.938866 908.90546 1697.4569 -788.55149 458.33805 606.14761 -189.21242 538326.84 -540014.77 986.80955 40381.983 0.510457 350.0288 355.36417 1.0987025 + 890 890 18.146777 895.51995 1647.1281 -751.60817 467.89799 618.42866 -204.03381 538331.65 -540002.93 -624.82453 40355.893 0.51078701 339.51567 344.85213 1.0174293 + 900 900 18.358038 881.35561 1648.538 -767.18239 482.4553 618.07345 -231.01967 538322.5 -540005.24 -1427.503 40327.852 0.51114217 339.70171 345.13656 1.0398005 + 910 910 18.578115 867.61758 1644.2566 -776.639 467.74273 603.67744 -236.07867 538351.52 -540008.11 -265.82677 40294.966 0.51155933 339.01554 344.25158 1.0143413 + 920 920 18.78827 853.94584 1627.6141 -773.66826 472.82171 589.79371 -219.1737 538345.65 -540005.73 -101.571 40261.021 0.51199064 335.50924 340.78304 0.97241589 + 930 930 18.999789 840.36432 1647.6033 -807.23894 448.42292 585.44013 -225.33398 538337.25 -540001.93 -579.43943 40227.022 0.51242336 339.78899 345.00145 0.91803022 + 940 940 19.204846 827.65554 1587.3974 -759.74184 460.78076 625.88654 -234.39212 538341.74 -540000.41 -521.27788 40191.265 0.51287926 327.35362 332.38943 0.89479535 + 950 950 19.417197 814.92728 1613.2286 -798.30131 444.69207 625.45006 -220.90437 538310.82 -539997.46 690.75705 40154.389 0.51335026 332.76498 337.82638 0.85318584 + 960 960 19.622609 802.68594 1582.1571 -779.47118 464.65237 620.34911 -202.28265 538285.19 -539989.82 603.28491 40120.532 0.51378346 326.13938 331.32007 0.8360227 + 970 970 19.83407 790.05035 1625.6546 -835.60423 458.40436 586.65017 -213.69114 538280.37 -539993.72 -505.81997 40089.412 0.5141823 335.20752 340.43527 0.84623905 + 980 980 20.053373 777.63872 1616.1839 -838.5452 489.85695 596.65508 -249.36777 538276.37 -539994.03 -720.92633 40057.048 0.51459772 333.26967 338.47472 0.79582384 + 990 990 20.264685 764.76448 1625.2264 -860.46187 455.6042 582.88497 -251.36667 538315.5 -539997.18 -736.01132 40022.287 0.51504468 335.09615 340.34019 0.85681602 + 1000 1000 20.480256 752.15165 1602.1524 -850.00076 440.64651 612.21179 -259.66632 538327.16 -539995.9 -659.783 39985.098 0.51552371 330.23098 335.51944 0.82229368 + 1010 1010 20.692034 739.36313 1612.4766 -873.11349 456.73339 595.48756 -265.92682 538317.42 -539994.4 -805.3156 39945.679 0.51603244 332.47155 337.67068 0.84926087 + 1020 1020 20.904996 726.60873 1607.6476 -881.03885 453.27344 580.3865 -263.10342 538318.42 -539994.98 -867.47906 39903.697 0.51657534 331.38231 336.63862 0.88832411 + 1030 1030 21.117612 714.38154 1568.6465 -854.26499 450.07706 620.13214 -247.05848 538288.31 -539992.98 -21.052816 39859.334 0.51715028 323.35423 328.44574 0.91902456 + 1040 1040 21.324916 702.14692 1585.2297 -883.08274 452.30576 586.6151 -222.99088 538272.15 -539994.18 439.19554 39815.597 0.51771837 326.8922 331.92732 0.90998278 + 1050 1050 21.537507 690.07486 1604.6904 -914.61558 454.89463 577.67062 -217.9776 538243.15 -539993.38 322.83286 39774.408 0.5182545 330.83397 336.02496 0.87557251 + 1060 1060 21.744004 678.22883 1616.2423 -938.01344 451.38029 587.76489 -199.22296 538184.33 -539990.34 -445.39958 39735.128 0.51876682 333.30762 338.44871 0.87231416 + 1070 1070 21.952336 666.68565 1572.2135 -905.52789 463.80966 606.04348 -188.43084 538159.53 -539987.03 -163.71062 39695.243 0.51928807 323.93741 329.19376 0.91879888 + 1080 1080 22.16258 655.3194 1549.8766 -894.55717 471.58122 627.43794 -171.01223 538118.27 -539983.53 642.00617 39655.854 0.51980386 319.40093 324.50755 0.92424346 + 1090 1090 22.369915 643.56988 1572.9827 -929.41284 477.53512 617.3063 -155.84223 538080.67 -539981.75 -303.11208 39619.261 0.52028396 324.11211 329.35218 0.92452937 + 1100 1100 22.579439 631.34926 1606.5068 -975.1575 482.38301 596.35174 -152.24071 538069.94 -539985.59 -295.74715 39582.718 0.52076429 331.14581 336.34658 0.99398777 + 1110 1110 22.788083 619.40749 1650.0925 -1030.685 471.99628 581.92908 -163.37165 538056.44 -539986.19 101.99914 39545.912 0.52124898 340.30522 345.49221 0.98038296 + 1120 1120 23.015764 607.80142 1601.7714 -993.96998 481.78391 604.13823 -175.98477 538075.33 -539989.29 772.03173 39510.545 0.52171556 329.92976 335.33428 1.0328339 + 1130 1130 23.223714 596.14983 1585.9766 -989.82673 478.57552 593.5132 -163.56273 538080.21 -539991.31 698.29284 39478.891 0.52213387 326.73721 332.03022 1.0174001 + 1140 1140 23.429322 584.55115 1528.6932 -944.14208 500.23792 618.7855 -145.95898 538068.56 -539991.59 181.46798 39450.636 0.52250783 315.01595 320.01906 1.0180086 + 1150 1150 23.638504 573.2311 1532.9497 -959.71864 483.82952 595.80796 -147.60708 538091.56 -539992.86 960.828 39424.391 0.52285565 315.87623 320.88763 1.0658274 + 1160 1160 23.844767 562.48544 1542.3058 -979.82036 479.02129 557.25946 -148.66969 538106.56 -539989.91 865.76041 39402.269 0.52314921 317.55574 322.8689 1.0267396 + 1170 1170 24.052802 551.79114 1565.0048 -1013.2136 473.50392 595.12481 -176.67308 538082.7 -539996.66 287.39786 39383.964 0.52339237 322.51003 327.60986 1.0636049 + 1180 1180 24.257648 540.84306 1560.3606 -1019.5175 472.50193 613.77621 -180.43646 538077.13 -539996.75 -273.84079 39367.233 0.5236148 321.24203 326.61818 1.0994493 + 1190 1190 24.466387 529.81791 1554.3154 -1024.4975 479.61574 608.56003 -190.37193 538092.52 -539997.94 -199.37466 39350.015 0.52384391 320.26323 325.33314 1.1344811 + 1200 1200 24.671538 518.37678 1598.5516 -1080.1748 475.43183 585.7003 -196.96318 538076.64 -539998.23 63.187511 39332.491 0.5240773 329.21805 334.58589 1.179388 + 1210 1210 24.88114 506.92408 1597.2282 -1090.3041 478.61347 599.24396 -201.47857 538049.55 -539992.4 -282.33521 39315.294 0.52430655 328.93235 334.3036 1.1889983 + 1220 1220 25.086479 495.3273 1606.9452 -1111.6179 486.00588 549.43523 -204.38154 538078.12 -539992.38 604.77764 39297.911 0.52453847 331.09004 336.35084 1.1693315 + 1230 1230 25.296821 483.97099 1552.6316 -1068.6606 472.98644 610.41417 -176.61168 538037.16 -539988.94 470.47936 39282.921 0.52473863 319.75816 324.99789 1.0988695 + 1240 1240 25.505858 472.33281 1542.3666 -1070.0338 489.16026 584.28947 -175.21695 538035.4 -539991.65 -39.470875 39269.955 0.52491188 317.74163 322.82092 1.1481824 + 1250 1250 25.7153 461.11742 1519.0832 -1057.9658 473.26317 593.83851 -175.20668 538033.43 -539994.75 295.86367 39257.488 0.52507858 312.91207 317.94819 1.1297909 + 1260 1260 25.92238 450.3583 1527.6842 -1077.3259 485.88507 599.1393 -175.2479 537977.99 -539996.56 432.81529 39246.428 0.52522655 314.61209 319.7779 1.0772012 + 1270 1270 26.13477 439.18619 1544.6237 -1105.4375 482.11644 557.47819 -180.22821 537997.38 -540002.38 -298.3561 39236.936 0.52535361 318.30327 323.34421 1.0481196 + 1280 1280 26.342161 428.46106 1516.596 -1088.1349 504.49165 596.2217 -191.79409 537968.4 -539999.7 -883.68236 39226.429 0.52549433 312.38724 317.45893 1.0652888 + 1290 1290 26.556546 417.63805 1546.4541 -1128.8161 479.2285 593.89919 -185.11562 537964.93 -540001.23 -50.607033 39213.194 0.52567168 318.46765 323.73839 1.0273567 + 1300 1300 26.763237 407.00807 1551.335 -1144.327 493.43178 574.48856 -175.61939 537958.65 -539998.7 123.574 39199.722 0.52585235 319.7532 324.78784 0.9752765 + 1310 1310 26.977504 395.94205 1538.6343 -1142.6923 491.37859 591.0781 -184.30661 537953.49 -539994.21 -524.8278 39186.687 0.52602726 317.02529 322.10872 1.0074745 + 1320 1320 27.182461 384.90905 1530.8244 -1145.9153 476.59333 569.84151 -182.12499 537989.64 -539996.56 21.826355 39172.368 0.52621955 315.37027 320.49323 0.9633641 + 1330 1330 27.392437 374.26223 1511.5796 -1137.3173 475.38356 601.06911 -174.11503 537961.77 -539992.81 516.38488 39158.343 0.52640802 311.48105 316.4728 0.93392709 + 1340 1340 27.600544 364.32413 1500.0476 -1135.7235 483.5558 569.29153 -175.60404 537991.19 -539992.7 243.67538 39146.39 0.52656875 309.10478 314.05501 0.9335977 + 1350 1350 27.811893 354.55464 1504.469 -1149.9143 490.62162 587.58927 -186.35248 537961.88 -539995.1 -381.78526 39135.483 0.52671551 310.21158 315.01201 0.8736878 + 1360 1360 28.030634 344.35547 1531.3642 -1187.0088 491.21584 579.89411 -193.76413 537943.58 -539990.58 -244.2355 39123.584 0.5268757 315.75953 320.64866 0.87888611 + 1370 1370 28.24468 334.27989 1515.0842 -1180.8043 488.03531 574.19257 -211.87448 537993.57 -539991.08 -249.97543 39110.893 0.52704667 312.25817 317.23298 0.8832415 + 1380 1380 28.456206 323.86696 1538.6119 -1214.745 485.08686 582.87805 -225.29898 537973.87 -539986.54 -739.02426 39097.267 0.52723035 317.12737 322.16729 0.88094849 + 1390 1390 28.664907 313.80794 1533.3067 -1219.4987 481.37523 588.64375 -234.24759 537976.62 -539986.05 -655.28833 39081.143 0.52744788 315.91691 321.06481 0.86113555 + 1400 1400 28.88081 303.79864 1530.9473 -1227.1487 480.72027 590.16215 -215.86567 537959.68 -539992.21 -330.73807 39062.732 0.52769647 315.41341 320.56481 0.87174767 + 1410 1410 29.087998 293.51075 1533.2975 -1239.7868 491.09148 572.9868 -198.65749 537930.68 -539987.8 -65.486938 39043.309 0.52795899 316.19674 321.05974 0.86744465 + 1420 1420 29.301172 283.71084 1526.6328 -1242.922 495.08331 568.48527 -176.82189 537902.75 -539990.49 21.532166 39023.934 0.52822111 314.51268 319.62568 0.94073093 + 1430 1430 29.50998 273.976 1499.5001 -1225.5241 493.7511 599.34826 -163.21126 537865.36 -539986.48 -139.4696 39004.889 0.52847903 308.9433 313.92488 0.96423296 + 1440 1440 29.727497 264.37595 1479.3112 -1214.9353 485.97735 626.51291 -168.73441 537862.24 -539985.08 -5.1376016 38985.764 0.52873828 304.69592 309.69382 0.96018344 + 1450 1450 29.944622 254.48311 1516.8238 -1262.3406 485.20611 584.42229 -187.84777 537878.3 -539988.09 -409.87731 38966.698 0.528997 312.38753 317.54805 0.98256115 + 1460 1460 30.158573 244.44609 1528.0096 -1283.5635 475.14932 572.1757 -195.03467 537887.83 -539982.93 -382.07163 38946.576 0.5292703 314.82863 319.87313 1.0231637 + 1470 1470 30.374277 234.92186 1506.9672 -1272.0453 483.58859 574.09386 -193.42819 537901.5 -539985.43 -556.48369 38925.157 0.52956153 310.53209 315.46775 1.0098195 + 1480 1480 30.582726 225.54727 1504.4567 -1278.9094 488.61689 565.0204 -174.14691 537885.2 -539984.52 -359.42169 38902.063 0.52987591 309.97065 314.91696 1.0586336 + 1490 1490 30.796749 216.38416 1466.2284 -1249.8443 509.51688 596.47771 -171.13996 537848.83 -539986.88 -260.22681 38877.931 0.53020481 302.13725 306.92154 1.0184879 + 1500 1500 31.023761 206.69536 1483.4352 -1276.7398 489.094 572.06657 -180.74977 537863.53 -539990.17 -374.65638 38853.144 0.53054306 305.41421 310.49034 1.0965311 + 1510 1510 31.233468 197.53496 1470.5518 -1273.0168 496.4778 572.70296 -188.04176 537867.9 -539990.72 -194.44393 38827.445 0.53089421 302.98152 307.8031 1.0683639 + 1520 1520 31.448166 188.48557 1505.5349 -1317.0494 482.1399 549.60023 -188.37002 537878.58 -539995.49 -303.59474 38801.329 0.53125155 310.28121 315.125 1.0947178 + 1530 1530 31.661083 180.01627 1478.9048 -1298.8885 480.66008 576.52332 -189.11463 537879.38 -539993.74 -93.728814 38774.647 0.53161711 304.77682 309.54442 1.0885542 + 1540 1540 31.876939 171.52164 1446.5122 -1274.9905 501.65604 592.7318 -194.77694 537883.38 -539991.88 -572.03929 38747.789 0.53198561 297.926 302.75623 1.081108 + 1550 1550 32.090882 162.60918 1457.9287 -1295.3195 486.66451 571.43484 -187.48201 537884.26 -539989.54 -853.52486 38719.251 0.53237771 300.30512 305.13923 1.10264 + 1560 1560 32.311805 154.14961 1460.7712 -1306.6216 487.11697 573.05525 -179.37345 537856.59 -539987.73 206.95258 38688.466 0.53280133 300.76679 305.73882 1.0954494 + 1570 1570 32.531622 145.6307 1495.1533 -1349.5226 487.99972 554.96647 -191.74891 537850.24 -539993.78 -213.86136 38658.392 0.53321581 308.13343 312.9642 1.0627758 + 1580 1580 32.751277 137.39237 1453.073 -1315.6806 505.50016 572.68038 -203.83828 537848.17 -539990.51 -661.68831 38628.081 0.53363422 299.22674 304.14568 1.0534877 + 1590 1590 32.972927 129.05492 1470.1644 -1341.1095 501.44319 556.99456 -200.18914 537839.64 -539995.46 -568.78912 38595.999 0.53407779 302.89304 307.72799 1.0561465 + 1600 1600 33.187581 120.98183 1474.539 -1353.5572 501.88809 579.32612 -190.98534 537804.72 -539996.91 -160.89634 38562.46 0.53454229 303.82394 308.64511 1.0563809 + 1610 1610 33.413061 112.95651 1460.2249 -1347.2684 507.62493 568.61569 -186.36471 537806.85 -539992.66 -173.77943 38528.878 0.5350082 300.96155 305.65977 1.0244687 + 1620 1620 33.629147 105.14119 1417.5884 -1312.4472 509.86727 587.11752 -178.54456 537794.49 -539991.12 -986.38798 38495.018 0.53547879 292.14329 296.7195 1.025421 + 1630 1630 33.851194 96.99965 1437.5733 -1340.5736 501.20257 559.09339 -183.47706 537795.68 -539989.89 -337.67771 38458.687 0.53598465 296.23298 300.93861 0.96783706 + 1640 1640 34.071485 89.301341 1442.9464 -1353.6451 499.24329 557.10277 -189.77016 537785.82 -539988.95 -217.33207 38421.605 0.53650195 297.30451 302.041 1.0162812 + 1650 1650 34.290747 82.272541 1418.4528 -1336.1802 512.15045 576.54801 -197.74469 537770.95 -539985.93 -765.69935 38384.269 0.53702379 292.16195 296.91165 1.003587 + 1660 1660 34.514742 75.245147 1432.3065 -1357.0613 504.60866 561.06335 -182.84394 537758.28 -539981.97 -720.77431 38345.103 0.53757232 295.09799 299.8321 0.97222873 + 1670 1670 34.73444 67.974343 1462.3052 -1394.3308 508.79216 571.9667 -187.97716 537720.4 -539984.82 -728.38004 38304.006 0.53814909 301.39433 306.11908 0.97819013 + 1680 1680 34.952376 60.242602 1487.7274 -1427.4848 489.91874 550.06024 -193.29007 537746.63 -539988.16 -117.94688 38261.502 0.53874692 306.67673 311.465 0.94713061 + 1690 1690 35.168277 53.143919 1459.148 -1406.0041 479.9147 580.91763 -186.24589 537744.92 -539985.86 -692.45728 38219.174 0.53934357 300.68984 305.45048 0.99146043 + 1700 1700 35.388784 45.953602 1426.9308 -1380.9772 497.60714 580.50612 -166.09691 537725.11 -539986.46 -844.43524 38175.5 0.53996061 294.09174 298.73772 0.90668449 + 1710 1710 35.606398 38.964967 1436.2145 -1397.2495 507.68713 561.14384 -167.73914 537716.98 -539981.32 -377.11797 38130.02 0.54060465 295.93443 300.65779 0.95966541 + 1720 1720 35.816981 31.75435 1459.2052 -1427.4509 504.38186 553.04689 -168.58594 537710.3 -539981.5 -367.33181 38084.217 0.54125482 300.78718 305.47781 0.96077303 + 1730 1730 36.027429 24.463684 1486.6879 -1462.2242 495.52339 528.05137 -156.11454 537702 -539982.96 -322.91733 38038.426 0.54190639 306.39559 311.27389 0.89344382 + 1740 1740 36.244198 17.443572 1469.0301 -1451.5866 501.23042 555.32899 -163.40791 537688.49 -539982.76 -575.76272 37992.635 0.54255953 302.56905 307.53139 0.97367765 + 1750 1750 36.462417 10.226222 1468.5048 -1458.2786 483.79386 557.22663 -180.9805 537725.87 -539987.79 -144.3588 37946.413 0.54322041 302.65462 307.44452 0.92710718 + 1760 1760 36.676042 3.3338713 1455.7767 -1452.4428 492.16679 580.418 -196.41241 537718.11 -539984.89 -447.17625 37900.791 0.54387429 300.01777 304.78831 0.90201134 + 1770 1770 36.890956 -4.4436072 1514.2285 -1518.6721 498.58626 543.0597 -201.20107 537697.54 -539988.08 -413.5874 37855.167 0.54452978 311.8641 317.03639 0.9175616 + 1780 1780 37.102769 -12.078178 1500.0141 -1512.0923 510.8842 537.91557 -190.57863 537688.29 -539987.37 -281.34559 37809.557 0.54518666 309.0417 314.07409 0.88137104 + 1790 1790 37.321547 -19.807866 1489.6217 -1509.4295 512.47719 540.74673 -173.01134 537672.4 -539983.96 -594.2773 37764.312 0.54583984 306.88911 311.89004 0.89141439 + 1800 1800 37.531257 -27.551935 1454.1881 -1481.74 504.43406 587.85284 -163.0931 537659.52 -539985.61 -562.902 37718.536 0.54650229 299.65393 304.46526 0.88194202 + 1810 1810 37.746996 -35.172046 1461.1948 -1496.3668 506.76051 559.34064 -159.78596 537650.98 -539986.62 93.333143 37672.584 0.54716889 301.01216 305.92428 0.90215653 + 1820 1820 37.967154 -42.544395 1464.1727 -1506.717 511.80012 555.63005 -146.87939 537615.87 -539991.66 -235.83431 37628.272 0.54781325 301.84224 306.52652 0.94643867 + 1830 1830 38.185209 -50.408898 1455.5933 -1506.0022 516.85237 571.75274 -143.477 537588.37 -539995.28 -657.1656 37584.697 0.54844838 300.1439 304.75432 0.89308276 + 1840 1840 38.399681 -57.74015 1439.3155 -1497.0556 508.44952 551.85922 -133.91203 537602.46 -539988.67 74.452185 37540.779 0.54908999 296.68313 301.3222 0.9312283 + 1850 1850 38.646602 -64.1309 1424.4531 -1488.584 510.53555 557.24559 -140.10065 537612.54 -539983.68 478.00794 37498.661 0.54970672 293.49702 298.20289 0.93735246 + 1860 1860 38.862309 -71.003858 1463.0623 -1534.0661 494.22469 530.44018 -152.81505 537636.97 -539982.44 91.961324 37459.697 0.5502785 301.5481 306.34354 0.84675017 + 1870 1870 39.078972 -77.648795 1427.4781 -1505.1269 491.02394 561.49148 -151.1223 537636.43 -539980.02 -435.92195 37422.477 0.5508258 294.2896 298.83391 0.94385309 + 1880 1880 39.295787 -83.937246 1408.3625 -1492.2997 496.49653 563.43084 -154.07954 537636.6 -539982.97 191.50779 37385.544 0.55136996 290.28708 294.84415 0.9072399 + 1890 1890 39.509838 -90.055778 1415.472 -1505.5278 506.7446 556.72837 -168.16962 537629.16 -539984.5 66.201503 37350.415 0.55188853 291.88679 296.31605 0.94481507 + 1900 1900 39.73106 -96.47075 1431.3413 -1527.812 519.74922 544.01957 -192.65467 537633.12 -539988.67 -796.13306 37316.64 0.55238804 294.95092 299.64568 0.94032731 + 1910 1910 39.951516 -102.85417 1429.9108 -1532.765 496.58603 552.34631 -203.14772 537655.96 -539987.35 -1079.2969 37281.465 0.55290922 294.59953 299.3099 1.0120105 + 1920 1920 40.166842 -109.00048 1451.2983 -1560.2988 504.47992 539.89277 -189.83624 537617.75 -539982.83 -162.49828 37244.135 0.55346342 299.01729 303.77465 1.0513433 + 1930 1930 40.393396 -114.90526 1443.6048 -1558.51 513.67097 531.71647 -174.66654 537610.57 -539982.62 187.46093 37207.476 0.55400871 297.54402 302.1569 1.0605547 + 1940 1940 40.609046 -120.50564 1404.7013 -1525.207 504.52336 572.28422 -159.44687 537600.18 -539977.31 -735.06991 37172.415 0.55453126 289.46595 294.00591 1.0484137 + 1950 1950 40.829466 -126.12492 1413.284 -1539.4089 516.22056 561.97444 -159.40311 537594.29 -539979.2 -239.01279 37136.578 0.55506638 291.05888 295.75975 1.1398655 + 1960 1960 41.045869 -131.2896 1429.1674 -1560.457 504.07961 554.2537 -175.64758 537611.38 -539978.46 226.43877 37101.172 0.55559608 294.46237 299.12106 1.0779577 + 1970 1970 41.268836 -136.70492 1441.4232 -1578.1281 516.78111 551.13969 -181.42271 537584.57 -539980.88 23.658598 37067.725 0.55609742 296.90884 301.66921 1.1210845 + 1980 1980 41.482154 -142.78731 1440.1051 -1582.8924 508.11976 532.18635 -172.6671 537588.62 -539978.74 -604.40478 37035.477 0.55658163 296.87807 301.39775 1.111257 + 1990 1990 41.702512 -148.45813 1420.5171 -1568.9752 521.95895 535.64727 -167.03945 537590.49 -539975.13 -722.04634 37002.397 0.55707921 292.74976 297.2732 1.1461384 + 2000 2000 41.918277 -153.70316 1413.1112 -1566.8144 500.23407 577.00843 -176.66202 537589.81 -539978.18 77.164357 36968.346 0.55759232 290.88401 295.72127 1.1443678 +Loop time of 41.9183 on 4 procs for 2000 steps with 2800 atoms + +Performance: 4.122 ns/day, 5.822 hours/ns, 47.712 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 | 5.9071 | 6.3864 | 6.9155 | 14.4 | 15.24 +Bond | 0.39044 | 0.40283 | 0.41797 | 1.6 | 0.96 +Kspace | 22.375 | 22.9 | 23.363 | 7.4 | 54.63 +Neigh | 0.55622 | 0.55652 | 0.55674 | 0.0 | 1.33 +Comm | 0.23496 | 0.23626 | 0.23839 | 0.3 | 0.56 +Output | 0.007792 | 0.0096738 | 0.013204 | 2.1 | 0.02 +Modify | 11.399 | 11.406 | 11.414 | 0.2 | 27.21 +Other | | 0.02042 | | | 0.05 + +Nlocal: 700.000 ave 712 max 682 min +Histogram: 1 0 0 0 0 0 0 2 0 1 +Nghost: 4507.00 ave 4666 max 4371 min +Histogram: 1 0 0 1 0 1 0 0 0 1 +Neighs: 121324.0 ave 132538 max 108358 min +Histogram: 1 0 0 0 1 0 0 1 0 1 + +Total # of neighbors = 485295 +Ave neighs/atom = 173.31964 +Ave special neighs/atom = 11.714286 +Neighbor list builds = 115 +Dangerous builds = 0 + +write_data data-eq.eg.lmp +System init for write_data ... +PPPM initialization ... + using 12-bit tables for long-range coulomb (../kspace.cpp:328) + G vector (1/distance) = 0.41619437 + grid = 54 54 54 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0035032687 + estimated relative force accuracy = 1.054999e-05 + using double precision KISS FFT + 3d grid and FFT values/proc = 81648 40824 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10 + ghost atom cutoff = 10 + binsize = 5, bins = 7 7 7 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair thole, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (3) pair coul/tt, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +Total wall time: 0:00:41 diff --git a/src/USER-DRUDE/README b/src/USER-DRUDE/README index 3aac41ec7f..53685221b1 100644 --- a/src/USER-DRUDE/README +++ b/src/USER-DRUDE/README @@ -7,6 +7,7 @@ features: using Langevin or Nosé-Hoover thermostats * computation of the atom and dipole temperatures * damping induced dipole interactions using Thole's function +* charge-dipole damping using Tang-Toennies damping function See the file doc/drude_tutorial.html for getting started. @@ -18,4 +19,5 @@ The person who created this package is Alain Dequidt at the Chemistry Institute of Clermont-Ferrand, Clermont University, France (alain.dequidt at uca.fr). Contact him directly if you have questions. Co-authors: Julien Devémy, Agilio Padua. +Contributors: Kateryna Goloviznina, Zheng Gong. diff --git a/src/USER-DRUDE/pair_coul_tt.cpp b/src/USER-DRUDE/pair_coul_tt.cpp index 261e3cb930..dee0d381e4 100644 --- a/src/USER-DRUDE/pair_coul_tt.cpp +++ b/src/USER-DRUDE/pair_coul_tt.cpp @@ -240,7 +240,7 @@ void PairCoulTT::settings(int narg, char **arg) void PairCoulTT::coeff(int narg, char **arg) { - if (narg < 3 || narg > 5) + if (narg < 3 || narg > 6) error->all(FLERR,"Incorrect args for pair coefficients"); if (!allocated) allocate(); From 8099e2a5d9eae40935452625799aceaaf830f0c4 Mon Sep 17 00:00:00 2001 From: Kateryna Goloviznina Date: Mon, 21 Sep 2020 16:16:38 +0200 Subject: [PATCH 004/182] Docs updated --- doc/utils/sphinx-config/false_positives.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 265b158484..1eec67ebf9 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1099,7 +1099,6 @@ Gmask gneb GNEB Goldfarb -Gomes Gonzalez-Melchor googlemail Gordan From 19bc3d36435599170ce2ceea4728508c947287ea Mon Sep 17 00:00:00 2001 From: Kateryna Goloviznina Date: Mon, 21 Sep 2020 18:05:57 +0200 Subject: [PATCH 005/182] Docs updated --- doc/src/pair_coul_tt.rst | 41 ++++++++++++++++++++-------------------- src/USER-DRUDE/README | 2 +- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/doc/src/pair_coul_tt.rst b/doc/src/pair_coul_tt.rst index 47375d99a4..885cce073e 100644 --- a/doc/src/pair_coul_tt.rst +++ b/doc/src/pair_coul_tt.rst @@ -40,35 +40,34 @@ The *coul/tt* pair style should be used as a sub-style within in the :doc:`pair_style hybrid/overlay ` command, in conjunction with a main pair style including Coulomb interactions and *thole* pair style, or with *lj/cut/thole/long* pair style that is equivalent to the combination -of two preceding. +of preceding two. The *coul/tt* pair styles compute the charge-dipole Coulomb interaction damped at short distances by a function .. math:: - TT_{ij}(r) = 1 - c_{ij} \cdot e^{-b_{ij} r} \sum_{k=0}^n \frac{(b_{ij} r)^k}{k!} + f_{n,ij}(r) = 1 - c_{ij} \cdot e^{-b_{ij} r} \sum_{k=0}^n \frac{(b_{ij} r)^k}{k!} -This function results from an adaptation to Coulomb interaction :ref:`(Salanne) -` the damping function originally proposed -by :ref:`(Tang Toennies) ` for van der Waals interactions. +This function results from an adaptation to the Coulomb interaction :ref:`(Salanne) +` of the damping function originally proposed +by :ref:`Tang Toennies ` for van der Waals interactions. -The polynomial takes the degree of 4 for damping Coulomb interaction. +The polynomial takes the degree 4 for damping the Coulomb interaction. The parameters :math:`b_{ij}` and :math:`c_{ij}` could be determined from first-principle calculations for small, mainly mono-atomic, ions :ref:`(Salanne) -` or chosen as empirical for large molecules. +`, or else treated as empirical for large molecules. -The damping function is typically applied to the interactions between a Drude -charge (:math:`q_{D,i}` on a Drude particle or :math:`-q_{D,i}` on the respective -Drude core particle bonded to a Drude particle) and a charge of a non-polarizable -atom, :math:`q_{j}`. The Tang-Toennies function could be used to damp electrostatic -interaction between two Drude cores acting on the partial charge of the one core -:math:`q_{i}-q_{D,i}` and a Drude charge of the another one :math:`-q_{D,j}`, and -the opposite case, respectively. The :math:`b_{ij}` and :math:`c_{ij}` are equal -to :math:`b_{ji}` and :math:`c_{ji}` in case of core - core interaction. -Therefore, the screening is not applied to the full charge of the Drude core -:math:`q_i`, but only to the :math:`-q_{D,i}` part of it when it acts as a -dipole or :math:`q_{i}-q_{D,i}` when it acts as a charge. +In pair styles with Drude induced dipoles, this damping function is typically +applied to the interactions between a Drude charge (either :math:`q_{D,i}` on +a Drude particle or :math:`-q_{D,i}` on the respective +Drude core)) and a charge on a non-polarizable atom, :math:`q_{j}`. + +The Tang-Toennies function could also be used to damp electrostatic +interactions between the (non-polarizable part of the) charge of a core, +:math:`q_{i}-q_{D,i}`, and the Drude charge of another, :math:`-q_{D,j}`. +The :math:`b_{ij}` and :math:`c_{ij}` are equal to :math:`b_{ji}` and +:math:`c_{ji}` in the case of core-core interactions. For pair_style *coul/tt*\ , the following coefficients must be defined for each pair of atoms types via the :doc:`pair_coeff ` command @@ -80,9 +79,9 @@ as in the example above. * cutoff (distance units) The last two coefficients are optional. If not specified the global -degree of polynomial or global cutoff specified in the pair_style -command are used. In order to specify a cutoff (forth argument) a damp -parameter (third argument) must also be specified. +degree of the polynomial or the global cutoff specified in the pair_style +command are used. In order to specify a cutoff (forth argument), the degree of +the polynomial (third argument) must also be specified. ---------- diff --git a/src/USER-DRUDE/README b/src/USER-DRUDE/README index 53685221b1..179c1e1179 100644 --- a/src/USER-DRUDE/README +++ b/src/USER-DRUDE/README @@ -7,7 +7,7 @@ features: using Langevin or Nosé-Hoover thermostats * computation of the atom and dipole temperatures * damping induced dipole interactions using Thole's function -* charge-dipole damping using Tang-Toennies damping function +* charge-dipole damping using Tang-Toennies function See the file doc/drude_tutorial.html for getting started. From 7a35f786fb10a931b813f858ebfebcf8c3e887e8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 24 Sep 2020 16:56:05 -0400 Subject: [PATCH 006/182] tweak button size setting for active state, too. --- doc/utils/sphinx-config/_static/css/lammps.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/utils/sphinx-config/_static/css/lammps.css b/doc/utils/sphinx-config/_static/css/lammps.css index a4f7d68693..fc565037d3 100644 --- a/doc/utils/sphinx-config/_static/css/lammps.css +++ b/doc/utils/sphinx-config/_static/css/lammps.css @@ -43,7 +43,7 @@ hr { border-radius: 6px; } -.btn { +.btn, .btn:active { padding: 4px; font-size: 80%; border-radius: 4px; From 064f73527264e2227cfb3cabb0edbba625511b56 Mon Sep 17 00:00:00 2001 From: Kateryna Goloviznina Date: Fri, 25 Sep 2020 16:08:20 +0200 Subject: [PATCH 007/182] source files updated, examples changes --- .../{data.eg.lmp => data.ethylene_glycol} | 0 .../{in.eg.lmp => in.ethylene_glycol} | 3 +- .../log.24Aug20.ethylene_glycol.g++.1 | 389 +++++++++++++++ ...mmps => log.24Aug20.ethylene_glycol.g++.4} | 461 ++++++++---------- src/USER-DRUDE/pair_coul_tt.cpp | 22 +- src/USER-DRUDE/pair_coul_tt.h | 1 - 6 files changed, 615 insertions(+), 261 deletions(-) rename examples/USER/drude/ethylene_glycol/{data.eg.lmp => data.ethylene_glycol} (100%) rename examples/USER/drude/ethylene_glycol/{in.eg.lmp => in.ethylene_glycol} (98%) create mode 100644 examples/USER/drude/ethylene_glycol/log.24Aug20.ethylene_glycol.g++.1 rename examples/USER/drude/ethylene_glycol/{log.21Sep20.eg.lammps => log.24Aug20.ethylene_glycol.g++.4} (71%) diff --git a/examples/USER/drude/ethylene_glycol/data.eg.lmp b/examples/USER/drude/ethylene_glycol/data.ethylene_glycol similarity index 100% rename from examples/USER/drude/ethylene_glycol/data.eg.lmp rename to examples/USER/drude/ethylene_glycol/data.ethylene_glycol diff --git a/examples/USER/drude/ethylene_glycol/in.eg.lmp b/examples/USER/drude/ethylene_glycol/in.ethylene_glycol similarity index 98% rename from examples/USER/drude/ethylene_glycol/in.eg.lmp rename to examples/USER/drude/ethylene_glycol/in.ethylene_glycol index 24d763602a..45268f8202 100644 --- a/examples/USER/drude/ethylene_glycol/in.eg.lmp +++ b/examples/USER/drude/ethylene_glycol/in.ethylene_glycol @@ -14,7 +14,7 @@ pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 coul/tt 4 8.0 pair_modify tail yes kspace_style pppm 1.0e-5 -read_data data.eg.lmp +read_data data.ethylene_glycol pair_coeff 1 1 lj/cut/coul/long 0.057289 3.500000 # CTO CTO ~ pair_coeff 1 2 lj/cut/coul/long 0.091945 3.304542 # CTO OHG ~ @@ -78,4 +78,3 @@ thermo 10 run 2000 -write_data data-eq.eg.lmp diff --git a/examples/USER/drude/ethylene_glycol/log.24Aug20.ethylene_glycol.g++.1 b/examples/USER/drude/ethylene_glycol/log.24Aug20.ethylene_glycol.g++.1 new file mode 100644 index 0000000000..8360131b5b --- /dev/null +++ b/examples/USER/drude/ethylene_glycol/log.24Aug20.ethylene_glycol.g++.1 @@ -0,0 +1,389 @@ +LAMMPS (24 Aug 2020) +# created by fftool + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls + +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 coul/tt 4 8.0 +pair_modify tail yes +kspace_style pppm 1.0e-5 + +read_data data.ethylene_glycol +Reading data file ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (35.000000 35.000000 35.000000) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 2800 atoms + scanning bonds ... + 2 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 9 = max dihedrals/atom + reading bonds ... + 2600 bonds + reading angles ... + 2800 angles + reading dihedrals ... + 3000 dihedrals +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0.0 0.0 0.5 + special bond factors coul: 0.0 0.0 0.5 + 5 = max # of 1-2 neighbors + 6 = max # of 1-3 neighbors + 10 = max # of 1-4 neighbors + 13 = max # of special neighbors + special bonds CPU = 0.001 seconds + read_data CPU = 0.012 seconds + +pair_coeff 1 1 lj/cut/coul/long 0.057289 3.500000 # CTO CTO ~ +pair_coeff 1 2 lj/cut/coul/long 0.091945 3.304542 # CTO OHG ~ +pair_coeff 1 3 lj/cut/coul/long 0.038625 2.958040 # CTO H1O ~ +pair_coeff 1 4 lj/cut/coul/long 0.000000 0.000000 # CTO HOG ~ +pair_coeff 2 2 lj/cut/coul/long 0.147565 3.120000 # OHG OHG ~ +pair_coeff 2 3 lj/cut/coul/long 0.061990 2.792848 # OHG H1O ~ +pair_coeff 2 4 lj/cut/coul/long 0.000000 0.000000 # OHG HOG ~ +pair_coeff 3 3 lj/cut/coul/long 0.026041 2.500000 # H1O H1O ~ +pair_coeff 3 4 lj/cut/coul/long 0.000000 0.000000 # H1O HOG ~ +pair_coeff 4 4 lj/cut/coul/long 0.000000 0.000000 # HOG HOG ~ +pair_coeff * 5* lj/cut/coul/long 0.000000 0.000000 +pair_coeff 1 1 thole 1.662 +pair_coeff 1 2 thole 1.561 +pair_coeff 1 5 thole 1.662 +pair_coeff 1 6 thole 1.561 +pair_coeff 2 2 thole 1.467 +pair_coeff 2 5 thole 1.561 +pair_coeff 2 6 thole 1.467 +pair_coeff 5 5 thole 1.662 +pair_coeff 5 6 thole 1.561 +pair_coeff 6 6 thole 1.467 +pair_coeff 2 4 coul/tt 4.5 1.0 +pair_coeff 4 6 coul/tt 4.5 1.0 +pair_coeff 1 4 coul/tt 4.5 1.0 +pair_coeff 4 5 coul/tt 4.5 1.0 + +group ATOMS type 1 2 3 4 +2000 atoms in group ATOMS +group CORES type 1 2 +800 atoms in group CORES +group DRUDES type 5 6 +800 atoms in group DRUDES + +fix DRUDE all drude C C N N D D + +fix SHAKE ATOMS shake 0.0001 20 0 b 3 4 + 400 = # of size 2 clusters + 400 = # of size 3 clusters + 0 = # of size 4 clusters + 0 = # of frozen angles + find clusters CPU = 0.001 seconds + +neighbor 2.0 bin + +timestep 1.0 + +variable TK equal 298.0 +variable TDK equal 1.0 +variable PBAR equal 1.0 + +comm_modify vel yes +velocity ATOMS create ${TK} 12345 +velocity ATOMS create 298 12345 + +compute TATOM ATOMS temp +compute TDRUDE all temp/drude + +fix DTDIR all drude/transform/direct +fix TSTAT ATOMS npt temp ${TK} ${TK} 200 iso ${PBAR} ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 ${TK} 200 iso ${PBAR} ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 298 200 iso ${PBAR} ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 298 200 iso 1 ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 298 200 iso 1 1 1000 +fix_modify TSTAT temp TATOM press thermo_press +WARNING: Temperature for fix modify is not for group all (../fix_nh.cpp:1428) +fix TSTDR DRUDES nvt temp ${TDK} ${TDK} 50 +fix TSTDR DRUDES nvt temp 1 ${TDK} 50 +fix TSTDR DRUDES nvt temp 1 1 50 +fix DTINV all drude/transform/inverse + +fix ICECUBE all momentum 1000 linear 1 1 1 + +thermo_style custom step time cpu etotal ke pe ebond eangle evdwl ecoul elong press vol density c_TATOM c_TDRUDE[1] c_TDRUDE[2] +thermo 10 + +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (../kspace.cpp:328) + G vector (1/distance) = 0.41206781 + grid = 54 54 54 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0040479865 + estimated relative force accuracy = 1.2190391e-05 + using double precision KISS FFT + 3d grid and FFT values/proc = 250047 157464 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 13 +New max number of 1-2 to 1-4 neighbors: 13 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10 + ghost atom cutoff = 10 + binsize = 5, bins = 7 7 7 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair thole, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (3) pair coul/tt, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 39.43 | 39.43 | 39.43 Mbytes +Step Time CPU TotEng KinEng PotEng E_bond E_angle E_vdwl E_coul E_long Press Volume Density c_TATOM c_TDRUDE[1] c_TDRUDE[2] + 0 0 0 2707.9246 1420.362 1287.5627 1474.8647 30.734202 -461.31379 540022.21 -539778.93 -9408.4231 42875 0.48077588 298 294.34401 6.9394757 + 10 10 0.66722703 1866.1234 1294.3904 571.73299 570.18548 421.90708 -480.70585 539943.81 -539929.74 805.31575 42854.367 0.48100736 216.74278 221.57505 99.651373 + 20 20 1.3338492 1639.4254 1025.541 613.88439 440.75582 630.81291 -511.62082 539884.11 -539931.54 3547.7591 42831.812 0.48126066 189.9745 191.41076 47.238176 + 30 30 2.0093691 1509.2246 1199.5696 309.65502 372.66235 422.42807 -441.22393 539785.92 -539996.76 -2255.2097 42822.727 0.48136275 232.23532 234.10184 34.834744 + 40 40 2.694386 1447.7122 1208.8207 238.89145 301.47584 466.79595 -415.52093 539713.64 -540015.07 -2983.4666 42805.664 0.48155464 240.97408 243.39825 20.121373 + 50 50 3.3607922 1418.4665 1249.502 168.96453 309.99547 480.01554 -495.04808 539716.53 -540017.02 3344.2849 42776.949 0.48187789 252.07241 255.56807 12.841402 + 60 60 4.0487151 1401.9374 1239.9607 161.97672 467.90054 298.63561 -481.19864 539718.72 -540016.73 6314.7204 42763.12 0.48203372 251.90217 255.43544 9.1055211 + 70 70 4.7337511 1396.4535 1021.9568 374.49665 585.05591 367.14909 -436.69254 539677.13 -540007.02 -9573.8028 42770.007 0.4819561 207.52883 210.90348 6.7497278 + 80 80 5.435864 1388.5232 1234.429 154.09425 291.38 446.20262 -454.21016 539690.22 -540020.29 -2596.4424 42743.245 0.48225786 251.84239 256.22625 5.2041745 + 90 90 6.1335561 1390.1275 1165.6307 224.49675 292.42637 610.78166 -509.169 539648.43 -540009.54 2755.6801 42701.879 0.48272503 239.29515 242.40904 3.9881049 + 100 100 6.8105361 1391.631 1287.2692 104.36183 333.86635 427.43215 -456.38003 539638.17 -540023.61 -3962.1785 42668.283 0.48310512 265.74273 268.23371 3.347745 + 110 110 7.5044641 1392.4961 1128.7784 263.71763 341.80093 547.86434 -397.70381 539615.87 -540033.75 -5131.6566 42619.2 0.48366149 231.88962 235.24089 2.8704355 + 120 120 8.184123 1391.2913 1316.2525 75.038706 302.07873 445.61483 -439.78763 539603.43 -540019.07 376.35789 42547.904 0.48447195 270.46432 274.66659 2.6361333 + 130 130 8.8712091 1400.0626 1131.989 268.07364 519.48714 417.6662 -431.15047 539616.71 -540036.69 8538.0622 42480.874 0.48523639 233.04019 236.40124 1.8960578 + 140 140 9.5497742 1404.1881 1334.9133 69.274795 389.42101 393.34067 -367.29241 539507.94 -540028.8 -4426.6648 42444.674 0.48565024 275.02782 279.10558 1.5835282 + 150 150 10.242218 1404.7862 1334.1949 70.591327 285.69316 480.49153 -340.69071 539518.01 -540045.75 -2082.9187 42395.713 0.48621109 274.19438 278.9463 1.6008208 + 160 160 10.935114 1412.6555 1291.707 120.94846 348.76035 575.18871 -418.38779 539483.99 -540034.49 5790.6824 42339.303 0.48685889 266.64535 270.1669 1.3423668 + 170 170 11.610989 1417.1464 1394.9631 22.183375 347.96719 497.00845 -398.67453 539439.29 -540027.81 -2071.8927 42303.603 0.48726974 288.3889 291.92774 1.1210291 + 180 180 12.289061 1420.2158 1260.1514 160.06435 383.67659 547.79959 -344.95473 539442.15 -540043.12 -5707.9246 42261.493 0.48775527 259.80397 263.64509 1.1531951 + 190 190 12.958536 1419.3668 1375.1626 44.204188 383.7187 500.13274 -378.41788 539388.43 -540024.18 -3451.5083 42194.665 0.48852777 283.36482 287.66025 1.3527016 + 200 200 13.633367 1425.8199 1378.4982 47.321725 460.35816 459.3409 -415.44782 539411.67 -540044.6 6205.8015 42117.045 0.48942811 284.32246 288.46225 1.1474796 + 210 210 14.311682 1432.8476 1458.746 -25.898458 348.39196 519.78477 -364.59687 539324.82 -540036.04 -2670.2453 42061.074 0.4900794 300.62024 305.40697 0.90989585 + 220 220 14.989255 1433.9236 1316.4386 117.48502 361.73263 586.07085 -288.11281 539309.49 -540044.33 -3665.7218 41997.584 0.49082028 270.93116 275.42919 1.1889667 + 230 230 15.654224 1439.0048 1526.3478 -87.342964 396.76966 419.31407 -364.67912 539312.78 -540045.43 7360.3014 41924.153 0.49167997 315.32585 319.5731 0.92637077 + 240 240 16.34516 1447.1229 1465.5412 -18.41826 387.84589 555.89046 -357.40376 539236.35 -540033.29 1804.1536 41878.572 0.49221511 302.34061 306.96246 0.64845084 + 250 250 17.011375 1451.5312 1408.0792 43.451972 376.36312 598.22556 -302.55742 539235.03 -540053.8 -3523.5226 41843.302 0.49263001 290.29737 294.90587 0.66500287 + 260 260 17.722074 1451.912 1486.9382 -35.026201 439.39663 496.5383 -294.82208 539179.22 -540041.63 -3359.5383 41794.408 0.49320632 306.86148 311.37488 0.79644143 + 270 270 18.416089 1455.7826 1489.843 -34.060455 384.68473 584.319 -345.52517 539213.2 -540050.09 4219.7839 41735.543 0.49390195 307.50271 312.00088 0.76256308 + 280 280 19.086374 1459.6904 1557.7147 -98.02431 363.40631 544.03097 -338.56088 539195.96 -540044.55 -1927.559 41691.464 0.49442413 321.11857 326.30138 0.62349318 + 290 290 19.776339 1458.5631 1502.6363 -44.073109 468.84588 480.27988 -273.91331 539154.14 -540045.25 -6405.1657 41640.349 0.49503106 309.96991 314.6214 0.8863505 + 300 300 20.460839 1460.3318 1532.4499 -72.11807 394.63947 561.19448 -334.56112 539192.83 -540050.12 4984.7237 41569.486 0.49587494 316.03907 320.88618 0.85911384 + 310 310 21.167455 1465.72 1493.2202 -27.500152 413.70603 630.92769 -345.49766 539150.28 -540033.83 3577.7209 41517.391 0.49649714 307.6908 312.80394 0.57266047 + 320 320 21.849908 1465.4882 1660.5838 -195.09555 367.20336 477.5937 -303.61685 539152.63 -540037.91 -1201.1197 41482.202 0.49691832 342.85705 347.89093 0.58244644 + 330 330 22.545706 1465.9528 1506.4911 -40.538288 425.9134 568.10101 -249.05186 539108.47 -540033.08 -1066.8372 41444.504 0.49737031 310.75826 315.56281 0.62005138 + 340 340 23.236471 1465.941 1557.6335 -91.692439 381.97546 625.89135 -296.40185 539081.74 -540030.48 4892.9571 41406.266 0.49782962 321.30678 326.29483 0.60253345 + 350 350 23.918806 1465.3219 1564.1522 -98.830312 418.42988 585.96966 -296.62497 539077.24 -540036.78 740.62795 41386.895 0.49806264 322.5576 327.69246 0.54088855 + 360 360 24.618034 1462.6063 1545.8716 -83.265302 514.18386 506.65245 -255.48504 539024.01 -540031.84 -7180.5551 41369.254 0.49827502 319.00119 323.79976 0.66034847 + 370 370 25.302386 1458.1673 1587.936 -129.76865 389.00162 580.31809 -293.01759 539062.35 -540044.02 1831.7475 41328.293 0.49876887 327.28902 332.55426 0.79099725 + 380 380 25.979058 1456.1242 1571.9673 -115.84304 389.73109 617.48838 -335.789 539071.87 -540039.48 3128.4244 41293.128 0.49919361 324.14157 329.21858 0.7658851 + 390 390 26.672543 1451.8986 1566.3578 -114.45925 409.58196 595.32553 -323.84183 539065.42 -540042.85 -2047.1954 41270.538 0.49946685 323.40592 328.06089 0.72893881 + 400 400 27.35931 1446.0614 1528.7698 -82.708453 414.47026 582.41586 -279.89484 539064.81 -540045.35 -1758.0676 41241.935 0.49981326 314.95109 320.111 0.86625159 + 410 410 28.041399 1440.2005 1651.8206 -211.62014 396.56866 533.57277 -312.80562 539046.01 -540042.07 4444.0299 41209.153 0.50021086 340.44948 345.87957 0.93036258 + 420 420 28.713939 1435.656 1554.4533 -118.79733 454.51792 576.06635 -316.30708 539049.51 -540045.56 3709.2547 41194.366 0.50039042 320.18642 325.47663 0.90533533 + 430 430 29.408968 1427.9462 1634.1145 -206.16837 461.69825 552.56741 -278.82495 538945.66 -540038.11 -5309.7858 41192.427 0.50041397 336.91486 342.13346 0.99752021 + 440 440 30.100174 1419.5461 1581.5128 -161.96678 418.66024 618.71093 -258.37983 538949.14 -540039.04 -45.04328 41173.678 0.50064185 325.71366 331.04339 1.1192027 + 450 450 30.781165 1411.6642 1569.329 -157.66479 380.5392 668.12618 -290.80879 538968.32 -540032.63 3122.7195 41154.153 0.50087936 323.38298 328.46291 1.1708776 + 460 460 31.469372 1402.5342 1627.6241 -225.08988 452.16964 578.69178 -298.30865 538927.93 -540030.11 -2417.9663 41145.38 0.50098617 335.42073 340.6408 1.2610836 + 470 470 32.141833 1393.2235 1617.2654 -224.04193 436.17938 569.79398 -278.51398 538933.88 -540035.19 -3103.9764 41128.379 0.50119325 333.09846 338.43145 1.3358906 + 480 480 32.83543 1384.531 1583.0622 -198.53121 460.65928 603.4034 -285.16458 538894.86 -540025.61 2315.2361 41100.553 0.50153257 325.89657 331.2085 1.4386937 + 490 490 33.512115 1375.67 1607.7541 -232.08412 478.08234 546.08252 -283.67189 538902.39 -540031.79 4472.5623 41082.804 0.50174925 331.38058 336.42849 1.3532614 + 500 500 34.196416 1366.0184 1653.6253 -287.60684 433.23462 598.37595 -281.95588 538837.43 -540025.77 -2921.0303 41080.823 0.50177344 340.53146 346.03623 1.3738058 + 510 510 34.887821 1356.1779 1625.4002 -269.22226 430.87286 614.37995 -274.02401 538850.24 -540029.11 -514.74733 41070.411 0.50190065 334.53988 340.10337 1.4033675 + 520 520 35.568482 1345.9827 1672.4342 -326.45149 410.4373 589.2259 -300.56391 538873.36 -540022.33 3422.9813 41058.601 0.50204502 344.75101 349.98437 1.3650429 + 530 530 36.253272 1335.9927 1610.2975 -274.30488 453.70829 630.07813 -307.15541 538849.89 -540018.01 -1600.1663 41058.3 0.50204869 331.45878 337.0013 1.2742094 + 540 540 36.929745 1325.3294 1622.7984 -297.469 467.07173 565.4329 -284.76737 538855.1 -540019.63 -3638.1511 41052.407 0.50212076 334.15385 339.62281 1.2734042 + 550 550 37.614929 1314.4624 1651.384 -336.92166 462.50602 578.49325 -284.70593 538808.93 -540016.13 -518.81114 41032.511 0.50236424 340.18663 345.64979 1.2068283 + 560 560 38.30281 1304.2946 1656.2572 -351.96261 418.38161 608.4185 -267.1651 538789.68 -540024.32 2812.5749 41011.222 0.50262501 341.36439 346.71837 1.1132402 + 570 570 38.968509 1294.0662 1610.486 -316.41984 441.76639 648.31424 -262.28744 538733.02 -540018.02 -1538.0916 40999.307 0.50277108 332.02722 337.14618 1.0635153 + 580 580 39.660802 1282.4498 1645.1489 -362.69914 440.312 580.63775 -236.68981 538736.22 -540024.85 -1101.4796 40982.995 0.5029712 339.24699 344.41338 1.0649616 + 590 590 40.334129 1272.0795 1684.9413 -412.86188 426.59194 579.83264 -250.92442 538728.51 -540026.41 3972.8154 40964.39 0.50319963 347.39845 352.81566 0.94731087 + 600 600 41.048102 1260.9835 1675.1026 -414.11911 426.30246 601.64923 -277.06881 538735.77 -540019.69 734.00273 40959.91 0.50325467 345.32911 350.76428 0.92422584 + 610 610 41.741513 1249.4376 1680.3024 -430.86481 461.98359 568.49567 -279.15072 538732.86 -540020.22 -2637.0497 40958.819 0.50326807 346.51864 351.86938 0.89455213 + 620 620 42.414478 1238.2494 1639.0994 -400.84996 462.30623 648.97497 -282.29483 538686.98 -540016.57 -1273.3337 40948.025 0.50340073 338.09346 343.23931 0.87622789 + 630 630 43.097268 1226.2206 1700.4438 -474.22316 415.44158 626.06093 -284.76848 538701 -540024.65 1189.5467 40932.531 0.50359129 350.55412 356.1328 0.81396661 + 640 640 43.788412 1213.6718 1722.5963 -508.92448 451.75966 596.15589 -304.19314 538680.78 -540025.33 -2040.5889 40920.034 0.50374508 355.17542 360.78185 0.80550146 + 650 650 44.479798 1200.5286 1712.0582 -511.52952 468.57523 555.5853 -284.3835 538686.81 -540030.87 -3241.3366 40899.599 0.50399677 352.98515 358.55291 0.84422259 + 660 660 45.146352 1188.0355 1686.7006 -498.66506 447.13788 623.79281 -277.27603 538662.78 -540036.48 2063.7513 40868.284 0.50438295 347.64044 353.23612 0.84411368 + 670 670 45.838863 1176.3202 1677.3379 -501.01775 432.39196 630.63662 -246.87422 538633.17 -540025.28 2018.5449 40844.222 0.5046801 345.92274 351.29625 0.79765142 + 680 680 46.514638 1164.0567 1637.5703 -473.51362 456.35969 620.04865 -220.51828 538603.75 -540020.31 -976.60074 40828.184 0.50487835 337.69799 342.97493 0.76377368 + 690 690 47.205994 1151.5359 1658.8065 -507.27065 455.18706 597.02897 -208.03899 538576.88 -540018.3 322.38087 40810.034 0.50510289 341.98818 347.41043 0.79815517 + 700 700 47.879878 1139.9903 1700.2911 -560.30078 435.98357 577.8242 -205.61874 538580.14 -540024.2 2000.2694 40793.74 0.50530463 350.58114 356.13628 0.74296449 + 710 710 48.568487 1128.264 1665.4723 -537.20835 463.76446 651.59115 -230.65333 538538.4 -540025.33 -509.61232 40784.629 0.50541752 343.46593 348.8134 0.78751508 + 720 720 49.264778 1115.93 1630.7565 -514.82652 506.53769 607.16471 -229.82851 538559.14 -540017.08 -3128.0993 40773.317 0.50555774 336.19023 341.52193 0.81241576 + 730 730 49.95434 1103.0861 1693.6547 -590.56861 449.96492 627.91156 -253.85501 538551.14 -540015.34 -149.3908 40751.076 0.50583366 349.00364 354.63214 0.96828585 + 740 740 50.640368 1090.6895 1721.0166 -630.32706 437.38184 606.18468 -248.9766 538542.64 -540008.25 1076.2201 40727.694 0.50612407 354.60708 360.37927 0.94820937 + 750 750 51.314864 1077.6264 1706.9939 -629.36751 477.34023 592.06785 -241.17012 538504.58 -540006.13 -978.20505 40707.892 0.50637027 351.96678 357.41563 0.99510839 + 760 760 52.004491 1064.8649 1670.3803 -605.51537 459.7133 621.11647 -220.34804 538486.12 -540007.66 -73.703028 40685.583 0.50664791 344.30042 349.72677 1.0189171 + 770 770 52.698124 1052.5063 1678.5504 -626.04408 429.49349 609.54654 -198.06479 538475.21 -540006.64 1856.6695 40663.69 0.5069207 345.71047 351.39771 1.1031709 + 780 780 53.371805 1040.7804 1626.9339 -586.15347 458.65937 625.17557 -235.68082 538504.32 -540009.28 1027.8021 40648.992 0.50710399 335.32101 340.58885 1.0755417 + 790 790 54.06492 1028.4288 1635.2234 -606.79463 456.80643 626.14821 -248.60698 538507.8 -540008.98 -1370.6148 40638.323 0.50723712 337.04528 342.28645 1.1565605 + 800 800 54.759088 1015.5035 1665.4981 -649.9946 445.78982 658.20045 -279.78518 538499.6 -540014.9 -1038.3661 40623.049 0.50742784 343.25371 348.62213 1.1808822 + 810 810 55.430872 1002.1533 1683.1796 -681.0263 440.51425 604.98532 -291.49462 538537.92 -540015.3 -572.09456 40603.508 0.50767205 346.94843 352.31225 1.2153414 + 820 820 56.132222 989.19583 1676.8671 -687.67123 454.16999 601.64035 -298.37645 538517.32 -540010.82 -2017.1523 40580.909 0.50795476 345.61042 350.97365 1.2453839 + 830 830 56.835319 975.79292 1648.0222 -672.2293 457.5301 647.03708 -301.93001 538500.55 -540019.28 -1480.1591 40550.766 0.50833234 339.56652 344.89673 1.30317 + 840 840 57.544934 962.33793 1667.0218 -704.68387 461.4571 596.28166 -279.37217 538495.66 -540014.25 -85.118365 40514.896 0.5087824 343.35846 348.86882 1.3264433 + 850 850 58.244995 949.54228 1632.642 -683.09972 476.42368 616.30295 -243.45149 538447.8 -540011.59 312.32904 40478.782 0.50923632 336.43492 341.68468 1.2775995 + 860 860 58.977497 936.00137 1687.8505 -751.84917 439.29154 594.43795 -220.43933 538410.93 -540014.7 216.93858 40444.448 0.50966862 347.70581 353.31273 1.173142 + 870 870 59.645842 922.54093 1696.9521 -774.41121 464.36431 609.38564 -208.02143 538341.43 -540014.72 440.34841 40411.634 0.51008247 349.86664 355.25009 1.1151612 + 880 880 60.427056 908.78777 1702.0807 -793.29291 457.46621 604.11808 -192.2501 538327.44 -540016.03 932.76309 40381.402 0.51046435 350.97927 356.34193 1.0821299 + 890 890 61.124637 895.35623 1641.4727 -746.11648 466.78456 622.86991 -207.04658 538334.95 -540003.51 -681.75697 40354.709 0.51080199 338.33159 343.67 1.0101072 + 900 900 61.901692 881.24944 1639.4923 -758.24291 481.38965 619.87748 -233.19912 538331.45 -540005.99 -1439.81 40325.857 0.51116746 337.88864 343.24606 1.0275191 + 910 910 62.611037 867.46519 1643.1706 -775.70543 468.68262 603.17181 -238.43462 538352.91 -540009.29 -275.79166 40292.103 0.51159568 338.76084 344.02955 1.0030087 + 920 920 63.34952 853.97988 1631.3965 -777.41663 474.85895 588.82562 -219.35163 538342.59 -540006.98 -62.754987 40257.288 0.51203811 336.31935 341.56634 0.99196885 + 930 930 64.05327 840.41362 1645.025 -804.61134 447.85382 587.9851 -225.01975 538339.75 -540002.74 -555.49599 40222.58 0.51247995 339.28553 344.44654 0.94664259 + 940 940 64.737005 827.76871 1587.5414 -759.7727 460.48307 621.8746 -235.65012 538344.69 -539999.26 -532.01637 40186.221 0.51294363 327.38945 332.41019 0.91368715 + 950 950 65.435712 815.02839 1620.017 -804.98861 444.11677 622.93832 -224.53373 538307.28 -539999.67 650.87188 40148.706 0.51342292 334.15908 339.24274 0.86718157 + 960 960 66.11542 802.59749 1600.8853 -798.28777 460.82761 618.5358 -204.94287 538277.13 -539994.5 565.08592 40114.076 0.51386616 330.04164 335.24039 0.84900019 + 970 970 66.809439 789.71165 1625.0356 -835.32393 453.24367 595.34881 -209.80467 538274.3 -539994.7 -429.65331 40082.097 0.51427613 335.12946 340.30347 0.85026333 + 980 980 67.498662 777.23625 1599.2221 -821.98582 483.6492 592.52689 -239.95014 538284.68 -539989.4 -679.87516 40049.163 0.51469904 329.80605 334.91604 0.80024747 + 990 990 68.171112 764.49736 1616.9152 -852.4178 451.24335 578.34889 -246.93614 538322.43 -539990.69 -725.77921 40014.039 0.51515084 333.41976 338.59959 0.85272294 + 1000 1000 68.87218 751.9616 1602.3648 -850.40319 440.44622 607.89023 -260.38007 538330.86 -539992.28 -655.41032 39976.561 0.5156338 330.28921 335.54624 0.85774711 + 1010 1010 69.568027 739.23622 1608.3162 -869.07993 453.37764 599.55478 -268.05724 538318.37 -539990.61 -944.18546 39936.822 0.51614688 331.62628 336.79124 0.86343714 + 1020 1020 70.254618 726.57563 1603.2801 -876.70451 456.00216 578.04019 -268.37136 538331.48 -539991.76 -993.19042 39894.008 0.5167008 330.49767 335.72146 0.89116772 + 1030 1030 70.948082 714.23534 1575.4792 -861.24391 451.11225 613.6829 -258.70217 538315.85 -539992.85 -68.576608 39848.35 0.51729283 324.82081 329.89207 0.89165001 + 1040 1040 71.625937 702.03201 1582.19 -880.15797 454.35428 589.4527 -240.85244 538303.75 -539994.97 481.43706 39803.185 0.51787981 326.24444 331.29664 0.89665812 + 1050 1050 72.32406 690.24009 1580.1335 -889.89337 456.92093 584.9166 -233.91929 538281.44 -539992.57 378.07746 39760.768 0.51843229 325.67839 330.8875 0.85252921 + 1060 1060 73.018665 678.51497 1597.2744 -918.75938 453.89954 588.83337 -207.40943 538217.01 -539993.07 -427.56213 39720.503 0.51895783 329.36068 334.49154 0.8324703 + 1070 1070 73.69195 667.1701 1572.006 -904.83588 469.26436 617.3996 -190.81473 538160.69 -539992.92 -149.00324 39679.76 0.51949069 323.89679 329.15189 0.91549703 + 1080 1080 74.379973 656.03284 1552.6284 -896.59552 480.37102 628.01048 -176.16118 538124.99 -539986.83 546.46409 39639.581 0.52001725 320.0459 325.1041 0.88510254 + 1090 1090 75.075322 644.48834 1576.1461 -931.65773 480.22631 619.23659 -162.58366 538087.88 -539982.49 -437.67421 39601.899 0.52051206 324.84815 330.02057 0.9142907 + 1100 1100 75.756475 632.4209 1593.3118 -960.89087 482.45504 608.42039 -163.65887 538082.06 -539983.01 -578.05159 39563.693 0.5210147 328.41403 333.58803 0.97778176 + 1110 1110 76.451658 620.59957 1621.2709 -1000.6713 462.34654 597.36158 -178.01016 538085.58 -539981.44 92.893727 39524.327 0.52153363 334.30034 339.4419 0.994688 + 1120 1120 77.112771 609.26906 1578.9905 -969.7214 476.02526 609.73579 -181.21969 538089.67 -539982.65 850.52248 39486.393 0.52203467 325.29851 330.57568 0.99687526 + 1130 1130 77.810811 597.88707 1585.8789 -987.99182 474.81174 577.09036 -169.33513 538094.06 -539984.81 598.20799 39452.503 0.52248309 326.74515 332.00355 1.0297772 + 1140 1140 78.483261 586.76532 1527.4079 -940.64257 499.41447 606.08942 -149.31526 538062.35 -539985.61 191.9565 39421.787 0.5228902 314.84428 319.75862 0.99988865 + 1150 1150 79.1787 575.92137 1526.5527 -950.63133 487.69353 602.90272 -136.67929 538056.12 -539988.86 1152.6101 39393.256 0.5232689 314.67331 319.57118 1.0161269 + 1160 1160 79.877159 565.47264 1537.2563 -971.78365 481.69021 580.59002 -138.67546 538064.65 -539982.48 909.08533 39369.59 0.52358346 316.6823 321.81622 1.0145894 + 1170 1170 80.551921 554.89258 1553.0806 -998.18798 474.92071 599.18052 -167.3488 538068.37 -539983.9 174.56373 39350.03 0.52384372 320.0432 325.0983 1.0863184 + 1180 1180 81.259112 544.05556 1571.6125 -1027.5569 473.0273 604.62324 -182.50623 538059.19 -539983.32 -431.85536 39331.619 0.52408893 323.77829 328.97386 1.1065558 + 1190 1190 81.934297 533.18824 1568.6122 -1035.424 480.56363 597.56584 -199.92235 538077.79 -539985.86 -123.11151 39312.288 0.52434664 323.20365 328.34663 1.102858 + 1200 1200 82.633486 521.74424 1599.1092 -1077.3649 467.32235 585.41422 -207.89385 538087.52 -539990.32 56.310132 39292.907 0.52460526 329.42204 334.72551 1.1339718 + 1210 1210 83.330124 510.28209 1605.7674 -1095.4853 486.1625 580.78312 -213.3055 538071.57 -539993.55 -269.03436 39273.954 0.52485843 330.74526 336.09358 1.189949 + 1220 1220 84.008808 498.50586 1636.8178 -1138.3119 493.88547 550.9317 -214.47737 538060.18 -539998.9 344.20965 39254.816 0.52511432 337.1548 342.61183 1.1743938 + 1230 1230 84.706245 486.665 1587.8095 -1101.1445 489.91197 610.48557 -192.26663 538003.31 -539993.82 -40.768231 39237.077 0.52535173 326.99705 332.34213 1.162246 + 1240 1240 85.381363 474.56427 1577.8915 -1103.3273 501.57535 576.4551 -182.65979 537998.5 -539990.92 -160.81029 39219.702 0.52558447 325.01538 330.2598 1.1677797 + 1250 1250 86.07477 462.11402 1599.9963 -1137.8823 490.25739 579.30129 -179.13521 537951.59 -539991.71 24.81579 39202.232 0.52581869 329.90742 334.91314 1.1307251 + 1260 1260 86.758837 450.158 1574.6752 -1124.5172 488.74275 611.97561 -172.62705 537912.89 -539991.88 151.27583 39185.28 0.52604615 324.35077 329.58626 1.1661208 + 1270 1270 87.447766 438.0952 1560.3925 -1122.2973 485.0847 560.28113 -164.53235 537960.55 -539994.7 -321.63854 39169.042 0.52626424 321.42547 326.6315 1.0861861 + 1280 1280 88.147683 426.37099 1518.1956 -1091.8246 509.06853 617.59649 -180.55068 537933.21 -539992.7 -620.83125 39151.89 0.52649479 312.83142 317.78435 1.0852406 + 1290 1290 88.823027 414.63351 1553.3371 -1138.7036 484.34516 586.85531 -181.78864 537950.74 -539993.9 254.54281 39133.176 0.52674656 319.9705 325.16208 1.0663413 + 1300 1300 89.516381 403.37227 1543.7052 -1140.3329 505.20824 577.35111 -180.84728 537933.29 -539992.5 -44.795728 39115.348 0.52698665 318.15933 323.18665 0.97807258 + 1310 1310 90.217709 392.14133 1537.0649 -1144.9235 511.03917 610.15699 -190.40072 537886.99 -539990.15 -552.27308 39097.644 0.52722527 316.79122 321.81054 0.94568205 + 1320 1320 90.903743 380.67483 1548.8569 -1168.1821 491.07519 564.67798 -192.39507 537935.84 -539990.53 -230.71988 39078.45 0.52748423 319.09459 324.25891 0.99390849 + 1330 1330 91.596026 369.75539 1534.9167 -1165.1614 507.076 583.88606 -177.67603 537907.65 -539990 405.22773 39058.821 0.52774931 316.47359 321.37564 0.91467388 + 1340 1340 92.273535 359.05731 1525.4786 -1166.4212 497.63373 601.69088 -183.21428 537925.7 -539993.38 255.87303 39040.937 0.52799106 314.21306 319.37855 0.95096098 + 1350 1350 92.96347 348.78036 1486.7122 -1137.9319 510.81966 593.8195 -198.3198 537970.13 -539992.76 -546.45157 39024.137 0.52821837 306.44936 311.29173 0.8679722 + 1360 1360 93.64702 338.28157 1519.6038 -1181.3222 498.92969 587.54355 -211.41049 537952.67 -539985.99 -73.453405 39006.076 0.52846294 313.14091 318.19702 0.85042168 + 1370 1370 94.338578 328.14321 1508.8722 -1180.729 502.0876 564.03092 -213.48922 537976.88 -539990.85 -155.84444 38987.824 0.52871035 310.87237 315.93211 0.87997336 + 1380 1380 95.033163 317.80999 1513.8796 -1196.0696 491.11639 575.79571 -213.35369 537962.43 -539989.94 -476.41548 38969.23 0.52896262 312.00799 316.99551 0.8530112 + 1390 1390 95.711654 307.88837 1492.7778 -1184.8894 487.58365 592.28899 -213.76608 537961.79 -539995.23 -489.72644 38949.272 0.52923366 307.64225 312.55759 0.87985113 + 1400 1400 96.382817 298.10172 1503.5417 -1205.44 480.03514 569.37448 -213.09486 537964.9 -539995.44 -625.22466 38927.696 0.529527 309.82406 314.84017 0.82853994 + 1410 1410 97.07431 288.39497 1499.82 -1211.425 480.36526 564.45219 -213.51652 537954.8 -539992.15 -259.19258 38904.295 0.5298455 309.32945 314.03898 0.87020348 + 1420 1420 97.742513 278.85215 1522.3698 -1243.5177 485.99375 561.50554 -209.19733 537922.71 -539993.29 -142.1742 38880.213 0.5301737 313.72886 318.75504 0.89433162 + 1430 1430 98.433859 269.2021 1530.9912 -1261.7891 475.99862 564.09601 -191.6853 537894.94 -539989.87 -219.42531 38856.009 0.53050394 315.3848 320.55941 0.90095316 + 1440 1440 99.129957 259.83967 1493.7661 -1233.9264 494.43047 592.70116 -170.31054 537844.83 -539989.05 -303.01625 38831.45 0.53083946 307.74971 312.75457 0.90032175 + 1450 1450 99.813066 250.16278 1478.882 -1228.7192 492.4154 588.98167 -160.23785 537828.24 -539990.43 -216.01885 38806.254 0.53118412 304.68152 309.59998 0.96786347 + 1460 1460 100.50575 240.68805 1495.8215 -1255.1334 494.64542 572.53707 -178.04039 537837.08 -539987.44 47.832605 38780.836 0.53153228 308.28376 313.14092 0.98954674 + 1470 1470 101.19723 231.3084 1513.8414 -1282.533 499.13995 553.10442 -176.44065 537844.02 -539988.31 -637.7582 38755.708 0.53187691 312.05991 316.90601 1.0159812 + 1480 1480 101.89509 222.09859 1505.7987 -1283.7001 500.92735 532.14741 -184.25693 537879.22 -539987.88 -591.72796 38728.878 0.53224537 310.17711 315.23199 0.99136547 + 1490 1490 102.56488 213.14179 1479.3775 -1266.2357 503.71559 572.92866 -207.71506 537887.43 -539987.29 -378.94563 38700.332 0.53263796 304.91855 309.65178 1.0720663 + 1500 1500 103.25515 203.91969 1502.2958 -1298.3761 481.50824 572.93966 -219.89904 537897.24 -539986.66 -411.06686 38670.837 0.53304422 309.53406 314.46236 1.0616662 + 1510 1510 103.94247 194.96944 1476.2258 -1281.2564 492.71131 580.48623 -224.72265 537893.94 -539983.2 -615.30192 38640.261 0.53346601 304.05731 308.97898 1.0959945 + 1520 1520 104.61477 185.79705 1499.7702 -1313.9732 502.24075 549.83129 -209.48323 537872.64 -539983.68 -853.96556 38607.888 0.53391333 309.19004 313.8997 1.1278807 + 1530 1530 105.30626 176.66223 1496.2605 -1319.5983 487.61367 564.0371 -210.38052 537881.64 -539987.76 -45.993522 38573.369 0.53439113 308.2859 313.1424 1.1706909 + 1540 1540 105.98062 167.30468 1509.5793 -1342.2747 484.70826 560.76595 -205.28232 537869.01 -539987.19 -394.64086 38538.951 0.53486837 311.08322 315.94918 1.1423693 + 1550 1550 106.67891 157.81128 1513.5743 -1355.7631 501.56421 553.04773 -194.94778 537848.45 -539991.21 -798.10405 38503.785 0.53535687 311.83679 316.76922 1.1775939 + 1560 1560 107.3653 148.77984 1487.931 -1339.1512 486.62562 594.88585 -190.71694 537821.56 -539989.6 -352.84351 38466.67 0.53587342 306.31266 311.38507 1.1923988 + 1570 1570 108.05785 139.61857 1492.0429 -1352.4243 495.36759 551.71446 -193.709 537833.41 -539986.36 -36.064878 38428.978 0.53639901 307.25883 312.26846 1.1499233 + 1580 1580 108.74586 130.44955 1497.1672 -1366.7177 500.84244 540.43915 -195.00023 537816.63 -539988.19 -207.69615 38391.915 0.53691685 308.5692 313.3432 1.1493094 + 1590 1590 109.44688 121.29977 1475.3297 -1354.0299 502.69119 562.18548 -184.3876 537779.93 -539983.95 -701.90588 38354.821 0.53743612 304.09275 308.77702 1.1241263 + 1600 1600 110.12352 112.29253 1465.3483 -1353.0557 498.56871 560.33345 -183.94436 537782.94 -539985.61 62.497105 38316.502 0.53797358 301.94751 306.71497 1.0625339 + 1610 1610 110.82452 103.46322 1482.3241 -1378.8609 510.17675 573.26218 -180.87017 537728.87 -539984.85 -462.68943 38278.885 0.53850225 305.61761 310.26833 1.0745981 + 1620 1620 111.52566 94.462702 1464.1659 -1369.7032 501.07487 583.65534 -179.1581 537729.44 -539982.9 -1003.084 38240.473 0.53904317 301.71486 306.4345 1.1276524 + 1630 1630 112.22434 85.744351 1431.8456 -1346.1013 506.23489 559.01914 -165.92022 537754.42 -539982.91 -44.922828 38199.836 0.53961661 295.07256 299.6966 1.0499782 + 1640 1640 112.91181 77.883773 1431.916 -1354.0322 515.19249 560.29179 -161.32501 537739.63 -539981.17 -288.57138 38159.637 0.54018506 295.12068 299.73953 0.99361413 + 1650 1650 113.60929 69.951714 1408.3479 -1338.3962 521.43148 576.68685 -171.12417 537765.39 -539986.16 -701.05944 38119.471 0.54075425 290.24084 294.81551 0.95838791 + 1660 1660 114.294 61.960243 1443.0348 -1381.0746 502.75633 561.60999 -173.7664 537766.93 -539987.21 -226.09809 38078.131 0.54134133 297.52366 302.0827 0.96994803 + 1670 1670 114.99 54.255728 1469.98 -1415.7242 489.79022 547.54612 -185.22503 537779.93 -539991.17 220.27193 38037.077 0.54192561 302.94306 307.77333 0.88810335 + 1680 1680 115.67178 47.265331 1454.0772 -1406.8119 485.87507 550.06616 -193.54409 537805.56 -539995.39 -303.54356 37997.753 0.54248645 299.9021 304.44801 0.86994223 + 1690 1690 116.37051 40.013281 1414.0487 -1374.0354 496.50299 585.34646 -209.38601 537812.11 -539992.75 -777.78258 37958.43 0.54304843 291.58093 296.05926 0.86152909 + 1700 1700 117.04984 32.9472 1426.299 -1393.3518 474.5113 558.00619 -213.63699 537852.91 -539993.88 266.84396 37918.012 0.54362728 293.91287 298.62059 0.87603505 + 1710 1710 117.75925 26.34909 1444.3476 -1417.9985 493.39365 533.46162 -228.21989 537848.73 -539989.16 -109.98361 37879.284 0.54418309 297.7381 302.42229 0.84126891 + 1720 1720 118.46526 19.241827 1440.9792 -1421.7373 492.13181 541.30218 -227.7986 537839.5 -539990.04 -1034.8525 37841.236 0.54473025 297.06006 301.72293 0.82744545 + 1730 1730 119.15048 12.244898 1440.1712 -1427.9263 500.74462 543.86644 -213.66719 537808.85 -539989.6 -915.51009 37800.891 0.54531164 296.91112 301.51145 0.91158063 + 1740 1740 119.85618 5.5714644 1428.1293 -1422.5578 499.43262 549.90308 -195.96662 537788.13 -539988.03 -3.6786977 37758.736 0.54592045 294.33156 299.00275 0.87922923 + 1750 1750 120.54619 -0.45398177 1423.3987 -1423.8527 493.18703 547.29329 -185.21619 537782.22 -539986.76 182.59625 37717.739 0.54651383 293.34517 298.03646 0.82804723 + 1760 1760 121.25623 -6.1919038 1389.9778 -1396.1697 500.11352 568.22991 -172.48994 537757.92 -539982.04 -545.30728 37678.439 0.54708387 286.50557 291.01141 0.86313198 + 1770 1770 121.93922 -12.293353 1409.1151 -1421.4085 493.3545 574.98039 -187.01225 537740.79 -539985.38 -139.94802 37638.881 0.54765884 290.40968 295.02394 0.86328318 + 1780 1780 122.64347 -18.079343 1431.0225 -1449.1019 518.16951 539.99065 -196.68849 537719.3 -539990.89 270.31946 37600.124 0.54822335 294.99564 299.60534 0.88731829 + 1790 1790 123.33416 -23.689678 1453.19 -1476.8797 501.19182 534.83108 -202.32276 537723.07 -539992.42 -53.923445 37563.459 0.54875846 299.43425 304.25779 0.87833003 + 1800 1800 124.0362 -28.879689 1418.552 -1447.4317 513.6365 556.22747 -194.90638 537737.26 -539994.05 -491.44436 37527.798 0.54927993 292.45556 296.98957 0.88938274 + 1810 1810 124.72592 -34.326386 1425.1449 -1459.4713 502.78393 557.92228 -188.01057 537729.93 -539990.52 -269.52053 37491.807 0.54980722 293.57211 298.34713 0.93896776 + 1820 1820 125.42808 -39.50595 1421.8112 -1461.3172 493.99291 564.49657 -191.40421 537738.48 -539993.36 141.03947 37456.232 0.55032941 293.00269 297.63525 0.96474298 + 1830 1830 126.10877 -45.131045 1456.6598 -1501.7909 508.50049 563.84263 -185.66907 537690.67 -539996.5 -596.99808 37421.947 0.55083361 300.14286 304.94541 0.95817196 + 1840 1840 126.8033 -50.718896 1463.5551 -1514.274 518.35121 551.80901 -182.64458 537679.58 -539999.56 -356.86881 37387.02 0.5513482 301.53943 306.34485 1.0508221 + 1850 1850 127.48901 -56.169373 1465.0934 -1521.2628 523.9441 535.51656 -192.04035 537692.37 -540002.42 14.237689 37352.047 0.55186443 301.84602 306.6432 1.0991807 + 1860 1860 128.17832 -61.746773 1457.3329 -1519.0797 517.21016 528.57559 -189.04218 537702.96 -540001.76 -81.723106 37318.204 0.5523649 300.04669 305.01663 1.0979667 + 1870 1870 128.84756 -66.931707 1427.61 -1494.5417 521.20148 546.64415 -196.52008 537711.49 -539997.43 -46.041141 37285.324 0.552852 294.06407 298.78212 1.1027061 + 1880 1880 129.55224 -72.55405 1455.9128 -1528.4669 508.45212 548.26755 -208.11473 537709.63 -540002.68 -306.22472 37253.354 0.55332644 299.93266 304.70406 1.1275873 + 1890 1890 130.25363 -78.709283 1471.972 -1550.6812 506.36522 570.79777 -230.44758 537685.27 -539999.77 -324.03464 37221.49 0.55380013 303.32625 308.07361 1.1228851 + 1900 1900 130.93532 -85.190712 1456.8998 -1542.0905 512.08315 542.83037 -233.21714 537706.22 -539998.56 -828.9349 37189.324 0.55427912 300.17215 304.90077 1.1480744 + 1910 1910 131.64305 -91.17215 1443.4898 -1534.6619 518.15258 548.43638 -225.11928 537687.2 -539995.05 -510.38563 37155.63 0.55478176 297.45632 302.06335 1.199425 + 1920 1920 132.32337 -96.942991 1441.1437 -1538.0867 515.3242 589.31694 -212.4115 537629.01 -539992.52 -356.55664 37121.215 0.5552961 297.07028 301.58175 1.1787869 + 1930 1930 133.02397 -103.16981 1436.7415 -1539.9113 528.1959 550.5162 -199.14452 537636 -539998.07 -555.36974 37086.568 0.55581487 296.07565 300.65625 1.1837404 + 1940 1940 133.70851 -109.31893 1426.8418 -1536.1607 519.36033 566.98017 -188.79587 537608.35 -539994.45 -352.69641 37051.329 0.5563435 293.88551 298.58644 1.1719193 + 1950 1950 134.40653 -115.36493 1450.6434 -1566.0083 512.5905 550.89405 -178.61271 537595.96 -540000.97 -291.67297 37015.978 0.55687481 298.7376 303.57491 1.1761814 + 1960 1960 135.09589 -121.15057 1435.35 -1556.5006 529.22528 542.65247 -167.22757 537591.29 -540003.82 234.05773 36980.955 0.5574022 295.887 300.39361 1.125507 + 1970 1970 135.79901 -126.84539 1436.4257 -1563.2711 515.13404 565.89493 -170.70325 537586.42 -540000.19 -35.988813 36947.754 0.55790308 296.05087 300.62446 1.1149271 + 1980 1980 136.51745 -132.69454 1441.8559 -1574.5505 511.04803 571.15904 -181.08954 537591.61 -540001.7 -569.56467 36915.446 0.55839135 297.07978 301.78595 1.0690786 + 1990 1990 137.19956 -138.98913 1483.0893 -1622.0784 505.92562 545.06939 -178.80056 537572.57 -539999.75 -248.72575 36882.509 0.55889001 305.58613 310.44889 1.0343638 + 2000 2000 137.91408 -145.02856 1439.8744 -1584.903 519.28678 568.70476 -166.26544 537556.85 -540000.6 -16.512081 36849.764 0.55938665 296.63112 301.40656 0.99691127 +Loop time of 137.914 on 1 procs for 2000 steps with 2800 atoms + +Performance: 1.253 ns/day, 19.155 hours/ns, 14.502 timesteps/s +99.3% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 25.777 | 25.777 | 25.777 | 0.0 | 18.69 +Bond | 1.5617 | 1.5617 | 1.5617 | 0.0 | 1.13 +Kspace | 70.65 | 70.65 | 70.65 | 0.0 | 51.23 +Neigh | 2.0179 | 2.0179 | 2.0179 | 0.0 | 1.46 +Comm | 0.16914 | 0.16914 | 0.16914 | 0.0 | 0.12 +Output | 0.015132 | 0.015132 | 0.015132 | 0.0 | 0.01 +Modify | 37.698 | 37.698 | 37.698 | 0.0 | 27.33 +Other | | 0.02468 | | | 0.02 + +Nlocal: 2800.00 ave 2800 max 2800 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 7316.00 ave 7316 max 7316 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 485484.0 ave 485484 max 485484 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 485484 +Ave neighs/atom = 173.38714 +Ave special neighs/atom = 11.714286 +Neighbor list builds = 116 +Dangerous builds = 0 + +Total wall time: 0:02:18 diff --git a/examples/USER/drude/ethylene_glycol/log.21Sep20.eg.lammps b/examples/USER/drude/ethylene_glycol/log.24Aug20.ethylene_glycol.g++.4 similarity index 71% rename from examples/USER/drude/ethylene_glycol/log.21Sep20.eg.lammps rename to examples/USER/drude/ethylene_glycol/log.24Aug20.ethylene_glycol.g++.4 index e85e1fca10..2237dbc29f 100644 --- a/examples/USER/drude/ethylene_glycol/log.21Sep20.eg.lammps +++ b/examples/USER/drude/ethylene_glycol/log.24Aug20.ethylene_glycol.g++.4 @@ -15,7 +15,7 @@ pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 coul/tt 4 8.0 pair_modify tail yes kspace_style pppm 1.0e-5 -read_data data.eg.lmp +read_data data.ethylene_glycol Reading data file ... orthogonal box = (0.0000000 0.0000000 0.0000000) to (35.000000 35.000000 35.000000) 1 by 2 by 2 MPI processor grid @@ -41,7 +41,7 @@ Finding 1-2 1-3 1-4 neighbors ... 10 = max # of 1-4 neighbors 13 = max # of special neighbors special bonds CPU = 0.001 seconds - read_data CPU = 0.014 seconds + read_data CPU = 0.015 seconds pair_coeff 1 1 lj/cut/coul/long 0.057289 3.500000 # CTO CTO ~ pair_coeff 1 2 lj/cut/coul/long 0.091945 3.304542 # CTO OHG ~ @@ -156,222 +156,222 @@ Neighbor list info ... Per MPI rank memory allocation (min/avg/max) = 21.28 | 21.36 | 21.43 Mbytes Step Time CPU TotEng KinEng PotEng E_bond E_angle E_vdwl E_coul E_long Press Volume Density c_TATOM c_TDRUDE[1] c_TDRUDE[2] 0 0 0 2707.9246 1420.362 1287.5627 1474.8647 30.734202 -461.31379 540022.21 -539778.93 -9408.4231 42875 0.48077588 298 294.34401 6.9394757 - 10 10 0.201665 1866.1234 1294.3904 571.73299 570.18548 421.90708 -480.70585 539943.81 -539929.74 805.31575 42854.367 0.48100736 216.74278 221.57505 99.651373 - 20 20 0.40385 1639.4254 1025.541 613.88441 440.75582 630.81291 -511.62082 539884.11 -539931.54 3547.7591 42831.812 0.48126066 189.9745 191.41076 47.238176 - 30 30 0.610653 1509.2246 1199.5696 309.65504 372.66235 422.42807 -441.22393 539785.92 -539996.76 -2255.2096 42822.727 0.48136275 232.23532 234.10184 34.834744 - 40 40 0.811939 1447.7122 1208.8207 238.89149 301.47584 466.79595 -415.52093 539713.64 -540015.07 -2983.4667 42805.664 0.48155464 240.97408 243.39825 20.121373 - 50 50 1.006791 1418.4666 1249.502 168.96462 309.99547 480.01554 -495.04808 539716.53 -540017.02 3344.285 42776.949 0.48187789 252.07241 255.56807 12.841402 - 60 60 1.206454 1401.9371 1239.9607 161.97643 467.90054 298.63561 -481.19864 539718.72 -540016.73 6314.7205 42763.12 0.48203372 251.90217 255.43544 9.1055215 - 70 70 1.40222 1396.4533 1021.9568 374.49649 585.0559 367.14909 -436.69254 539677.13 -540007.02 -9573.8026 42770.007 0.4819561 207.52883 210.90348 6.7497287 - 80 80 1.607893 1388.5231 1234.429 154.09415 291.38001 446.20262 -454.21016 539690.22 -540020.29 -2596.442 42743.245 0.48225786 251.84239 256.22625 5.2041747 - 90 90 1.809296 1390.1274 1165.6307 224.49668 292.42639 610.78166 -509.169 539648.43 -540009.54 2755.6799 42701.879 0.48272503 239.29515 242.40904 3.9881039 - 100 100 2.00484 1391.6311 1287.2692 104.36195 333.86638 427.43215 -456.38003 539638.17 -540023.61 -3962.1784 42668.283 0.48310512 265.74273 268.23371 3.3477446 - 110 110 2.210337 1392.4962 1128.7784 263.71774 341.80093 547.86435 -397.70381 539615.87 -540033.75 -5131.6567 42619.2 0.48366149 231.88962 235.24089 2.8704377 - 120 120 2.408385 1391.2911 1316.2526 75.038553 302.07876 445.61484 -439.78763 539603.43 -540019.07 376.35842 42547.904 0.48447195 270.46432 274.66659 2.6361343 - 130 130 2.609918 1400.0627 1131.989 268.07372 519.48714 417.6662 -431.15046 539616.71 -540036.69 8538.062 42480.874 0.48523639 233.04019 236.40125 1.8960582 - 140 140 2.806209 1404.1878 1334.9133 69.274512 389.421 393.34067 -367.2924 539507.94 -540028.8 -4426.6651 42444.674 0.48565024 275.02782 279.10558 1.5835267 - 150 150 3.00539 1404.7864 1334.1949 70.591471 285.69314 480.49153 -340.69071 539518.01 -540045.75 -2082.9184 42395.713 0.48621109 274.19439 278.9463 1.6008215 - 160 160 3.204755 1412.6555 1291.707 120.94843 348.7604 575.18871 -418.38779 539483.99 -540034.49 5790.6824 42339.303 0.48685889 266.64535 270.16691 1.3423664 - 170 170 3.408187 1417.1467 1394.9631 22.183576 347.96723 497.00846 -398.67453 539439.29 -540027.81 -2071.8934 42303.603 0.48726974 288.38891 291.92774 1.1210284 - 180 180 3.609337 1420.2155 1260.1515 160.06402 383.6767 547.79961 -344.95473 539442.15 -540043.12 -5707.9251 42261.493 0.48775527 259.80398 263.64509 1.1531929 - 190 190 3.805143 1419.3667 1375.1626 44.20412 383.71873 500.13275 -378.41788 539388.43 -540024.18 -3451.5079 42194.665 0.48852777 283.36482 287.66025 1.3527012 - 200 200 4.00597 1425.8199 1378.4982 47.321658 460.35819 459.3409 -415.44783 539411.67 -540044.6 6205.8009 42117.045 0.48942811 284.32248 288.46226 1.1474766 - 210 210 4.244616 1432.8476 1458.7461 -25.898456 348.39192 519.78477 -364.59687 539324.82 -540036.04 -2670.2448 42061.074 0.4900794 300.62025 305.40698 0.90989006 - 220 220 4.447524 1433.9234 1316.4385 117.48481 361.7325 586.07086 -288.11279 539309.49 -540044.33 -3665.7207 41997.584 0.49082028 270.93115 275.42918 1.1889587 - 230 230 4.653393 1439.0053 1526.3478 -87.342481 396.7696 419.31409 -364.6791 539312.78 -540045.43 7360.3024 41924.153 0.49167997 315.32585 319.5731 0.92637024 - 240 240 4.889968 1447.1229 1465.5412 -18.418302 387.84585 555.89043 -357.40374 539236.35 -540033.29 1804.1542 41878.572 0.49221511 302.34061 306.96246 0.64844737 - 250 250 5.101767 1451.5311 1408.0791 43.45194 376.3631 598.22558 -302.55739 539235.03 -540053.8 -3523.5223 41843.302 0.49263001 290.29736 294.90586 0.66500213 - 260 260 5.302457 1451.9121 1486.9381 -35.026077 439.39664 496.53832 -294.82206 539179.22 -540041.63 -3359.5387 41794.408 0.49320632 306.86146 311.37486 0.79643935 - 270 270 5.534307 1455.7824 1489.843 -34.060558 384.68471 584.31906 -345.52522 539213.2 -540050.09 4219.7836 41735.543 0.49390195 307.5027 312.00087 0.76256302 - 280 280 5.73088 1459.6907 1557.7147 -98.024008 363.40614 544.03098 -338.5609 539195.96 -540044.55 -1927.5595 41691.464 0.49442413 321.11857 326.30138 0.62349308 - 290 290 5.932546 1458.5631 1502.6363 -44.073215 468.8459 480.27985 -273.9133 539154.14 -540045.25 -6405.1654 41640.349 0.49503105 309.96993 314.62142 0.88634485 - 300 300 6.128592 1460.3316 1532.4499 -72.118356 394.63943 561.19456 -334.56113 539192.83 -540050.12 4984.7229 41569.486 0.49587494 316.03908 320.88619 0.85911177 - 310 310 6.331105 1465.7207 1493.2205 -27.499762 413.70607 630.92768 -345.49768 539150.28 -540033.83 3577.7221 41517.391 0.49649714 307.69086 312.804 0.57266056 - 320 320 6.52852 1465.4884 1660.5835 -195.09515 367.20331 477.59376 -303.61686 539152.63 -540037.91 -1201.1187 41482.202 0.49691832 342.85699 347.89088 0.58244251 - 330 330 6.733947 1465.9531 1506.4899 -40.536832 425.91339 568.10087 -249.05183 539108.48 -540033.08 -1066.8345 41444.504 0.49737031 310.75802 315.56257 0.62004599 - 340 340 6.934754 1465.9409 1557.6309 -91.689954 381.9757 625.89222 -296.40182 539081.74 -540030.48 4892.9614 41406.266 0.49782962 321.30624 326.29428 0.60252992 - 350 350 7.133858 1465.3216 1564.1509 -98.829249 418.42971 585.969 -296.62488 539077.24 -540036.78 740.63262 41386.895 0.49806264 322.55732 327.69219 0.54088039 - 360 360 7.338907 1462.6063 1545.8695 -83.263187 514.18444 506.65279 -255.48445 539024 -540031.84 -7180.551 41369.254 0.49827502 319.00076 323.79932 0.66034813 - 370 370 7.542607 1458.1677 1587.9359 -129.76813 389.00186 580.31846 -293.01684 539062.35 -540044.02 1831.7432 41328.293 0.49876886 327.289 332.55424 0.79099417 - 380 380 7.740463 1456.1241 1571.9683 -115.84419 389.73014 617.48805 -335.78903 539071.87 -540039.48 3128.4098 41293.129 0.49919361 324.14181 329.2188 0.76588497 - 390 390 7.943726 1451.8992 1566.361 -114.46186 409.57976 595.32696 -323.84233 539065.42 -540042.85 -2047.2083 41270.539 0.49946685 323.40659 328.06158 0.72893025 - 400 400 8.145595 1446.0615 1528.773 -82.711545 414.46841 582.41732 -279.89532 539064.81 -540045.35 -1758.08 41241.935 0.49981326 314.95174 320.11166 0.86625721 - 410 410 8.344249 1440.2008 1651.8275 -211.62673 396.56535 533.57242 -312.80543 539046.01 -540042.07 4444.0109 41209.153 0.50021086 340.45089 345.88102 0.9303561 - 420 420 8.558267 1435.656 1554.4611 -118.8051 454.51384 576.06992 -316.30443 539049.5 -540045.56 3709.2794 41194.366 0.50039042 320.18805 325.47827 0.90533299 - 430 430 8.769287 1427.9462 1634.1272 -206.18106 461.69471 552.57081 -278.82069 538945.64 -540038.11 -5309.7454 41192.427 0.50041397 336.91747 342.13613 0.99752281 - 440 440 8.972045 1419.5459 1581.5366 -161.99068 418.65549 618.71776 -258.37568 538949.12 -540039.03 -45.053757 41173.677 0.50064185 325.71857 331.04837 1.1191906 - 450 450 9.169624 1411.6639 1569.3142 -157.65035 380.53742 668.13347 -290.80748 538968.35 -540032.62 3122.8222 41154.153 0.50087936 323.37981 328.45983 1.1708438 - 460 460 9.374355 1402.5334 1627.6142 -225.08079 452.17261 578.69141 -298.30585 538927.95 -540030.11 -2417.8519 41145.38 0.50098616 335.41854 340.63875 1.2610557 - 470 470 9.571992 1393.2236 1617.2885 -224.06489 436.18212 569.79211 -278.51933 538933.86 -540035.19 -3103.9609 41128.381 0.50119323 333.10318 338.43628 1.3359175 - 480 480 9.780216 1384.5295 1583.0615 -198.53199 460.65721 603.39994 -285.15851 538894.86 -540025.61 2315.242 41100.555 0.50153254 325.89632 331.2083 1.4388068 - 490 490 9.979856 1375.6696 1607.7362 -232.06655 478.07831 546.08808 -283.66976 538902.42 -540031.78 4472.4169 41082.807 0.50174921 331.37679 336.42468 1.3533669 - 500 500 10.184838 1366.0159 1653.6341 -287.61812 433.24034 598.38535 -281.95695 538837.44 -540025.77 -2921.1083 41080.827 0.5017734 340.53355 346.03811 1.3737347 - 510 510 10.396907 1356.1785 1625.4343 -269.25582 430.87164 614.37229 -274.02613 538850.25 -540029.1 -514.63413 41070.415 0.5019006 334.54685 340.1105 1.4034076 - 520 520 10.597572 1345.9803 1672.4272 -326.44692 410.44251 589.22282 -300.56101 538873.38 -540022.33 3423.1019 41058.605 0.50204497 344.74979 349.98307 1.3647023 - 530 530 10.800114 1335.9908 1610.2842 -274.29341 453.69553 630.07905 -307.15955 538849.94 -540018.03 -1600.2251 41058.305 0.50204863 331.45503 336.99781 1.2756028 - 540 540 11.004271 1325.3284 1622.8383 -297.50983 467.0454 565.42045 -284.7694 538855.1 -540019.63 -3638.2655 41052.412 0.5021207 334.16222 339.63113 1.2734996 - 550 550 11.207241 1314.4631 1651.4251 -336.96202 462.52498 578.48562 -284.70119 538808.88 -540016.15 -518.70335 41032.516 0.50236417 340.19545 345.65835 1.2069185 - 560 560 11.409818 1304.2928 1656.256 -351.9632 418.3626 608.41877 -267.15227 538789.68 -540024.32 2812.3348 41011.228 0.50262493 341.36426 346.71795 1.1135433 - 570 570 11.606485 1294.0759 1610.4771 -316.40114 441.78983 648.31376 -262.29938 538733.04 -540018.04 -1538.1626 40999.314 0.502771 332.02401 337.14404 1.0640192 - 580 580 11.808931 1282.4524 1645.2031 -362.75069 440.30488 580.58811 -236.71445 538736.27 -540024.85 -1101.6572 40983 0.50297113 339.25673 344.424 1.0664332 - 590 590 12.013963 1272.0788 1684.9242 -412.84541 426.57598 579.81154 -250.95724 538728.6 -540026.39 3972.5381 40964.393 0.50319959 347.39514 352.81162 0.9481937 - 600 600 12.217631 1260.9837 1675.1424 -414.15866 426.29955 601.62481 -277.0776 538735.86 -540019.69 733.89874 40959.911 0.50325466 345.33847 350.77315 0.92315425 - 610 610 12.421063 1249.4355 1680.3253 -430.88979 461.94541 568.50547 -279.19131 538733 -540020.22 -2637.3171 40958.816 0.50326812 346.5244 351.87492 0.8930443 - 620 620 12.622456 1238.2436 1639.1356 -400.89196 462.34964 648.9058 -282.32391 538687.09 -540016.6 -1272.7738 40948.016 0.50340084 338.09955 343.24784 0.8743544 - 630 630 12.827096 1226.2102 1700.4355 -474.22536 415.43324 626.07728 -284.77036 538701.1 -540024.64 1191.1215 40932.519 0.50359143 350.55404 356.13127 0.81354721 - 640 640 13.029161 1213.6625 1722.4306 -508.76811 451.82932 596.2177 -304.21125 538680.81 -540025.34 -2040.5501 40920.026 0.50374519 355.14014 360.74736 0.80500911 - 650 650 13.240494 1200.523 1711.9652 -511.44222 468.66709 555.52213 -284.35989 538686.74 -540030.85 -3242.3861 40899.595 0.50399682 352.96478 358.53307 0.8449128 - 660 660 13.438967 1188.0333 1686.8332 -498.79991 447.18786 623.78213 -277.2393 538662.53 -540036.47 2062.8 40868.281 0.504383 347.66952 353.26364 0.84470068 - 670 670 13.642934 1176.309 1677.3756 -501.06663 432.41729 630.68477 -246.82119 538633.15 -540025.32 2018.2625 40844.215 0.50468018 345.93001 351.30318 0.79958169 - 680 680 13.847762 1164.0539 1637.268 -473.21403 456.37206 620.05888 -220.36961 538603.84 -540020.32 -976.09071 40828.172 0.50487849 337.63373 342.91086 0.76511377 - 690 690 14.053487 1151.5332 1658.5734 -507.04017 455.22409 597.05127 -207.88025 538576.76 -540018.31 323.34897 40810.021 0.50510305 341.94091 347.36248 0.79627601 - 700 700 14.253089 1139.9903 1700.0553 -560.06498 436.02394 577.80227 -205.50405 538580.01 -540024.21 2001.9128 40793.73 0.50530475 350.53199 356.08655 0.74354299 - 710 710 14.458296 1128.2643 1664.8705 -536.60628 463.70506 651.50664 -230.61516 538538.77 -540025.31 -508.86732 40784.628 0.50541753 343.34437 348.6884 0.78515878 - 720 720 14.663292 1115.9411 1630.2796 -514.33852 506.57764 607.09308 -229.84152 538559.57 -540017.07 -3127.5793 40773.329 0.50555759 336.08992 341.42284 0.81059211 - 730 730 14.865795 1103.0656 1694.1592 -591.09356 450.11958 627.65288 -253.85448 538551.36 -540015.43 -146.32999 40751.104 0.50583332 349.11077 354.74126 0.96159634 - 740 740 15.06561 1090.6612 1721.1435 -630.48227 437.46474 606.18905 -248.87815 538542.97 -540008.35 1077.7969 40727.746 0.50612342 354.64465 360.41017 0.93961199 - 750 750 15.268618 1077.6001 1706.0173 -628.41716 477.13711 591.82616 -241.11378 538505.89 -540005.96 -974.1309 40707.979 0.50636918 351.76494 357.21309 0.99061611 - 760 760 15.468203 1064.8462 1671.2712 -606.42497 459.57992 620.48754 -220.77486 538487.09 -540007.33 -71.64889 40685.72 0.50664622 344.49488 349.92005 1.0059768 - 770 770 15.673284 1052.4557 1681.2022 -628.74649 428.96094 608.2218 -198.40559 538475.09 -540006.2 1856.6076 40663.884 0.50691828 346.27378 351.96343 1.0837482 - 780 780 15.872032 1040.723 1625.9969 -585.27381 458.27519 626.0187 -235.63783 538502.81 -540008.7 1016.2221 40649.237 0.50710094 335.13457 340.40065 1.0590112 - 790 790 16.075992 1028.4064 1633.2536 -604.84719 455.65305 626.15622 -248.78737 538508.38 -540008.88 -1369.2979 40638.582 0.50723389 336.64828 341.88384 1.1357406 - 800 800 16.280536 1015.4954 1666.4595 -650.9641 445.94756 657.57103 -280.18245 538498.84 -540015.1 -1043.1656 40623.317 0.50742449 343.47686 348.83548 1.1573361 - 810 810 16.478913 1002.1183 1685.5373 -683.41906 440.89112 604.14181 -291.89016 538535.57 -540014.83 -581.99461 40603.767 0.50766881 347.41495 352.80847 1.2116042 - 820 820 16.687266 989.15171 1678.3078 -689.15612 455.2621 599.94003 -298.7579 538514.82 -540009.96 -2027.8844 40581.116 0.50795217 345.89589 351.2764 1.2440787 - 830 830 16.891776 975.707 1649.255 -673.54801 458.71883 647.01152 -302.29605 538497.69 -540017.88 -1485.4901 40550.879 0.50833092 339.85438 345.15667 1.3002628 - 840 840 17.091786 962.26855 1667.3243 -705.05577 462.77662 592.72694 -279.50507 538495.49 -540012.35 -54.163113 40514.914 0.50878217 343.40682 348.92391 1.3431364 - 850 850 17.298514 949.49932 1631.9134 -682.4141 478.53288 614.19826 -243.38115 538444.52 -540010.3 310.08768 40478.805 0.50923603 336.30228 341.53075 1.2799218 - 860 860 17.510715 935.99845 1684.7625 -748.76409 440.77296 594.40682 -219.10467 538407.93 -540013.87 248.0022 40444.498 0.50966798 347.06325 352.6711 1.161457 - 870 870 17.726043 922.58003 1694.0713 -771.49127 466.19871 609.11461 -205.02926 538339.03 -540013.71 495.00215 40411.839 0.51007988 349.28528 354.6354 1.1364619 - 880 880 17.938866 908.90546 1697.4569 -788.55149 458.33805 606.14761 -189.21242 538326.84 -540014.77 986.80955 40381.983 0.510457 350.0288 355.36417 1.0987025 - 890 890 18.146777 895.51995 1647.1281 -751.60817 467.89799 618.42866 -204.03381 538331.65 -540002.93 -624.82453 40355.893 0.51078701 339.51567 344.85213 1.0174293 - 900 900 18.358038 881.35561 1648.538 -767.18239 482.4553 618.07345 -231.01967 538322.5 -540005.24 -1427.503 40327.852 0.51114217 339.70171 345.13656 1.0398005 - 910 910 18.578115 867.61758 1644.2566 -776.639 467.74273 603.67744 -236.07867 538351.52 -540008.11 -265.82677 40294.966 0.51155933 339.01554 344.25158 1.0143413 - 920 920 18.78827 853.94584 1627.6141 -773.66826 472.82171 589.79371 -219.1737 538345.65 -540005.73 -101.571 40261.021 0.51199064 335.50924 340.78304 0.97241589 - 930 930 18.999789 840.36432 1647.6033 -807.23894 448.42292 585.44013 -225.33398 538337.25 -540001.93 -579.43943 40227.022 0.51242336 339.78899 345.00145 0.91803022 - 940 940 19.204846 827.65554 1587.3974 -759.74184 460.78076 625.88654 -234.39212 538341.74 -540000.41 -521.27788 40191.265 0.51287926 327.35362 332.38943 0.89479535 - 950 950 19.417197 814.92728 1613.2286 -798.30131 444.69207 625.45006 -220.90437 538310.82 -539997.46 690.75705 40154.389 0.51335026 332.76498 337.82638 0.85318584 - 960 960 19.622609 802.68594 1582.1571 -779.47118 464.65237 620.34911 -202.28265 538285.19 -539989.82 603.28491 40120.532 0.51378346 326.13938 331.32007 0.8360227 - 970 970 19.83407 790.05035 1625.6546 -835.60423 458.40436 586.65017 -213.69114 538280.37 -539993.72 -505.81997 40089.412 0.5141823 335.20752 340.43527 0.84623905 - 980 980 20.053373 777.63872 1616.1839 -838.5452 489.85695 596.65508 -249.36777 538276.37 -539994.03 -720.92633 40057.048 0.51459772 333.26967 338.47472 0.79582384 - 990 990 20.264685 764.76448 1625.2264 -860.46187 455.6042 582.88497 -251.36667 538315.5 -539997.18 -736.01132 40022.287 0.51504468 335.09615 340.34019 0.85681602 - 1000 1000 20.480256 752.15165 1602.1524 -850.00076 440.64651 612.21179 -259.66632 538327.16 -539995.9 -659.783 39985.098 0.51552371 330.23098 335.51944 0.82229368 - 1010 1010 20.692034 739.36313 1612.4766 -873.11349 456.73339 595.48756 -265.92682 538317.42 -539994.4 -805.3156 39945.679 0.51603244 332.47155 337.67068 0.84926087 - 1020 1020 20.904996 726.60873 1607.6476 -881.03885 453.27344 580.3865 -263.10342 538318.42 -539994.98 -867.47906 39903.697 0.51657534 331.38231 336.63862 0.88832411 - 1030 1030 21.117612 714.38154 1568.6465 -854.26499 450.07706 620.13214 -247.05848 538288.31 -539992.98 -21.052816 39859.334 0.51715028 323.35423 328.44574 0.91902456 - 1040 1040 21.324916 702.14692 1585.2297 -883.08274 452.30576 586.6151 -222.99088 538272.15 -539994.18 439.19554 39815.597 0.51771837 326.8922 331.92732 0.90998278 - 1050 1050 21.537507 690.07486 1604.6904 -914.61558 454.89463 577.67062 -217.9776 538243.15 -539993.38 322.83286 39774.408 0.5182545 330.83397 336.02496 0.87557251 - 1060 1060 21.744004 678.22883 1616.2423 -938.01344 451.38029 587.76489 -199.22296 538184.33 -539990.34 -445.39958 39735.128 0.51876682 333.30762 338.44871 0.87231416 - 1070 1070 21.952336 666.68565 1572.2135 -905.52789 463.80966 606.04348 -188.43084 538159.53 -539987.03 -163.71062 39695.243 0.51928807 323.93741 329.19376 0.91879888 - 1080 1080 22.16258 655.3194 1549.8766 -894.55717 471.58122 627.43794 -171.01223 538118.27 -539983.53 642.00617 39655.854 0.51980386 319.40093 324.50755 0.92424346 - 1090 1090 22.369915 643.56988 1572.9827 -929.41284 477.53512 617.3063 -155.84223 538080.67 -539981.75 -303.11208 39619.261 0.52028396 324.11211 329.35218 0.92452937 - 1100 1100 22.579439 631.34926 1606.5068 -975.1575 482.38301 596.35174 -152.24071 538069.94 -539985.59 -295.74715 39582.718 0.52076429 331.14581 336.34658 0.99398777 - 1110 1110 22.788083 619.40749 1650.0925 -1030.685 471.99628 581.92908 -163.37165 538056.44 -539986.19 101.99914 39545.912 0.52124898 340.30522 345.49221 0.98038296 - 1120 1120 23.015764 607.80142 1601.7714 -993.96998 481.78391 604.13823 -175.98477 538075.33 -539989.29 772.03173 39510.545 0.52171556 329.92976 335.33428 1.0328339 - 1130 1130 23.223714 596.14983 1585.9766 -989.82673 478.57552 593.5132 -163.56273 538080.21 -539991.31 698.29284 39478.891 0.52213387 326.73721 332.03022 1.0174001 - 1140 1140 23.429322 584.55115 1528.6932 -944.14208 500.23792 618.7855 -145.95898 538068.56 -539991.59 181.46798 39450.636 0.52250783 315.01595 320.01906 1.0180086 - 1150 1150 23.638504 573.2311 1532.9497 -959.71864 483.82952 595.80796 -147.60708 538091.56 -539992.86 960.828 39424.391 0.52285565 315.87623 320.88763 1.0658274 - 1160 1160 23.844767 562.48544 1542.3058 -979.82036 479.02129 557.25946 -148.66969 538106.56 -539989.91 865.76041 39402.269 0.52314921 317.55574 322.8689 1.0267396 - 1170 1170 24.052802 551.79114 1565.0048 -1013.2136 473.50392 595.12481 -176.67308 538082.7 -539996.66 287.39786 39383.964 0.52339237 322.51003 327.60986 1.0636049 - 1180 1180 24.257648 540.84306 1560.3606 -1019.5175 472.50193 613.77621 -180.43646 538077.13 -539996.75 -273.84079 39367.233 0.5236148 321.24203 326.61818 1.0994493 - 1190 1190 24.466387 529.81791 1554.3154 -1024.4975 479.61574 608.56003 -190.37193 538092.52 -539997.94 -199.37466 39350.015 0.52384391 320.26323 325.33314 1.1344811 - 1200 1200 24.671538 518.37678 1598.5516 -1080.1748 475.43183 585.7003 -196.96318 538076.64 -539998.23 63.187511 39332.491 0.5240773 329.21805 334.58589 1.179388 - 1210 1210 24.88114 506.92408 1597.2282 -1090.3041 478.61347 599.24396 -201.47857 538049.55 -539992.4 -282.33521 39315.294 0.52430655 328.93235 334.3036 1.1889983 - 1220 1220 25.086479 495.3273 1606.9452 -1111.6179 486.00588 549.43523 -204.38154 538078.12 -539992.38 604.77764 39297.911 0.52453847 331.09004 336.35084 1.1693315 - 1230 1230 25.296821 483.97099 1552.6316 -1068.6606 472.98644 610.41417 -176.61168 538037.16 -539988.94 470.47936 39282.921 0.52473863 319.75816 324.99789 1.0988695 - 1240 1240 25.505858 472.33281 1542.3666 -1070.0338 489.16026 584.28947 -175.21695 538035.4 -539991.65 -39.470875 39269.955 0.52491188 317.74163 322.82092 1.1481824 - 1250 1250 25.7153 461.11742 1519.0832 -1057.9658 473.26317 593.83851 -175.20668 538033.43 -539994.75 295.86367 39257.488 0.52507858 312.91207 317.94819 1.1297909 - 1260 1260 25.92238 450.3583 1527.6842 -1077.3259 485.88507 599.1393 -175.2479 537977.99 -539996.56 432.81529 39246.428 0.52522655 314.61209 319.7779 1.0772012 - 1270 1270 26.13477 439.18619 1544.6237 -1105.4375 482.11644 557.47819 -180.22821 537997.38 -540002.38 -298.3561 39236.936 0.52535361 318.30327 323.34421 1.0481196 - 1280 1280 26.342161 428.46106 1516.596 -1088.1349 504.49165 596.2217 -191.79409 537968.4 -539999.7 -883.68236 39226.429 0.52549433 312.38724 317.45893 1.0652888 - 1290 1290 26.556546 417.63805 1546.4541 -1128.8161 479.2285 593.89919 -185.11562 537964.93 -540001.23 -50.607033 39213.194 0.52567168 318.46765 323.73839 1.0273567 - 1300 1300 26.763237 407.00807 1551.335 -1144.327 493.43178 574.48856 -175.61939 537958.65 -539998.7 123.574 39199.722 0.52585235 319.7532 324.78784 0.9752765 - 1310 1310 26.977504 395.94205 1538.6343 -1142.6923 491.37859 591.0781 -184.30661 537953.49 -539994.21 -524.8278 39186.687 0.52602726 317.02529 322.10872 1.0074745 - 1320 1320 27.182461 384.90905 1530.8244 -1145.9153 476.59333 569.84151 -182.12499 537989.64 -539996.56 21.826355 39172.368 0.52621955 315.37027 320.49323 0.9633641 - 1330 1330 27.392437 374.26223 1511.5796 -1137.3173 475.38356 601.06911 -174.11503 537961.77 -539992.81 516.38488 39158.343 0.52640802 311.48105 316.4728 0.93392709 - 1340 1340 27.600544 364.32413 1500.0476 -1135.7235 483.5558 569.29153 -175.60404 537991.19 -539992.7 243.67538 39146.39 0.52656875 309.10478 314.05501 0.9335977 - 1350 1350 27.811893 354.55464 1504.469 -1149.9143 490.62162 587.58927 -186.35248 537961.88 -539995.1 -381.78526 39135.483 0.52671551 310.21158 315.01201 0.8736878 - 1360 1360 28.030634 344.35547 1531.3642 -1187.0088 491.21584 579.89411 -193.76413 537943.58 -539990.58 -244.2355 39123.584 0.5268757 315.75953 320.64866 0.87888611 - 1370 1370 28.24468 334.27989 1515.0842 -1180.8043 488.03531 574.19257 -211.87448 537993.57 -539991.08 -249.97543 39110.893 0.52704667 312.25817 317.23298 0.8832415 - 1380 1380 28.456206 323.86696 1538.6119 -1214.745 485.08686 582.87805 -225.29898 537973.87 -539986.54 -739.02426 39097.267 0.52723035 317.12737 322.16729 0.88094849 - 1390 1390 28.664907 313.80794 1533.3067 -1219.4987 481.37523 588.64375 -234.24759 537976.62 -539986.05 -655.28833 39081.143 0.52744788 315.91691 321.06481 0.86113555 - 1400 1400 28.88081 303.79864 1530.9473 -1227.1487 480.72027 590.16215 -215.86567 537959.68 -539992.21 -330.73807 39062.732 0.52769647 315.41341 320.56481 0.87174767 - 1410 1410 29.087998 293.51075 1533.2975 -1239.7868 491.09148 572.9868 -198.65749 537930.68 -539987.8 -65.486938 39043.309 0.52795899 316.19674 321.05974 0.86744465 - 1420 1420 29.301172 283.71084 1526.6328 -1242.922 495.08331 568.48527 -176.82189 537902.75 -539990.49 21.532166 39023.934 0.52822111 314.51268 319.62568 0.94073093 - 1430 1430 29.50998 273.976 1499.5001 -1225.5241 493.7511 599.34826 -163.21126 537865.36 -539986.48 -139.4696 39004.889 0.52847903 308.9433 313.92488 0.96423296 - 1440 1440 29.727497 264.37595 1479.3112 -1214.9353 485.97735 626.51291 -168.73441 537862.24 -539985.08 -5.1376016 38985.764 0.52873828 304.69592 309.69382 0.96018344 - 1450 1450 29.944622 254.48311 1516.8238 -1262.3406 485.20611 584.42229 -187.84777 537878.3 -539988.09 -409.87731 38966.698 0.528997 312.38753 317.54805 0.98256115 - 1460 1460 30.158573 244.44609 1528.0096 -1283.5635 475.14932 572.1757 -195.03467 537887.83 -539982.93 -382.07163 38946.576 0.5292703 314.82863 319.87313 1.0231637 - 1470 1470 30.374277 234.92186 1506.9672 -1272.0453 483.58859 574.09386 -193.42819 537901.5 -539985.43 -556.48369 38925.157 0.52956153 310.53209 315.46775 1.0098195 - 1480 1480 30.582726 225.54727 1504.4567 -1278.9094 488.61689 565.0204 -174.14691 537885.2 -539984.52 -359.42169 38902.063 0.52987591 309.97065 314.91696 1.0586336 - 1490 1490 30.796749 216.38416 1466.2284 -1249.8443 509.51688 596.47771 -171.13996 537848.83 -539986.88 -260.22681 38877.931 0.53020481 302.13725 306.92154 1.0184879 - 1500 1500 31.023761 206.69536 1483.4352 -1276.7398 489.094 572.06657 -180.74977 537863.53 -539990.17 -374.65638 38853.144 0.53054306 305.41421 310.49034 1.0965311 - 1510 1510 31.233468 197.53496 1470.5518 -1273.0168 496.4778 572.70296 -188.04176 537867.9 -539990.72 -194.44393 38827.445 0.53089421 302.98152 307.8031 1.0683639 - 1520 1520 31.448166 188.48557 1505.5349 -1317.0494 482.1399 549.60023 -188.37002 537878.58 -539995.49 -303.59474 38801.329 0.53125155 310.28121 315.125 1.0947178 - 1530 1530 31.661083 180.01627 1478.9048 -1298.8885 480.66008 576.52332 -189.11463 537879.38 -539993.74 -93.728814 38774.647 0.53161711 304.77682 309.54442 1.0885542 - 1540 1540 31.876939 171.52164 1446.5122 -1274.9905 501.65604 592.7318 -194.77694 537883.38 -539991.88 -572.03929 38747.789 0.53198561 297.926 302.75623 1.081108 - 1550 1550 32.090882 162.60918 1457.9287 -1295.3195 486.66451 571.43484 -187.48201 537884.26 -539989.54 -853.52486 38719.251 0.53237771 300.30512 305.13923 1.10264 - 1560 1560 32.311805 154.14961 1460.7712 -1306.6216 487.11697 573.05525 -179.37345 537856.59 -539987.73 206.95258 38688.466 0.53280133 300.76679 305.73882 1.0954494 - 1570 1570 32.531622 145.6307 1495.1533 -1349.5226 487.99972 554.96647 -191.74891 537850.24 -539993.78 -213.86136 38658.392 0.53321581 308.13343 312.9642 1.0627758 - 1580 1580 32.751277 137.39237 1453.073 -1315.6806 505.50016 572.68038 -203.83828 537848.17 -539990.51 -661.68831 38628.081 0.53363422 299.22674 304.14568 1.0534877 - 1590 1590 32.972927 129.05492 1470.1644 -1341.1095 501.44319 556.99456 -200.18914 537839.64 -539995.46 -568.78912 38595.999 0.53407779 302.89304 307.72799 1.0561465 - 1600 1600 33.187581 120.98183 1474.539 -1353.5572 501.88809 579.32612 -190.98534 537804.72 -539996.91 -160.89634 38562.46 0.53454229 303.82394 308.64511 1.0563809 - 1610 1610 33.413061 112.95651 1460.2249 -1347.2684 507.62493 568.61569 -186.36471 537806.85 -539992.66 -173.77943 38528.878 0.5350082 300.96155 305.65977 1.0244687 - 1620 1620 33.629147 105.14119 1417.5884 -1312.4472 509.86727 587.11752 -178.54456 537794.49 -539991.12 -986.38798 38495.018 0.53547879 292.14329 296.7195 1.025421 - 1630 1630 33.851194 96.99965 1437.5733 -1340.5736 501.20257 559.09339 -183.47706 537795.68 -539989.89 -337.67771 38458.687 0.53598465 296.23298 300.93861 0.96783706 - 1640 1640 34.071485 89.301341 1442.9464 -1353.6451 499.24329 557.10277 -189.77016 537785.82 -539988.95 -217.33207 38421.605 0.53650195 297.30451 302.041 1.0162812 - 1650 1650 34.290747 82.272541 1418.4528 -1336.1802 512.15045 576.54801 -197.74469 537770.95 -539985.93 -765.69935 38384.269 0.53702379 292.16195 296.91165 1.003587 - 1660 1660 34.514742 75.245147 1432.3065 -1357.0613 504.60866 561.06335 -182.84394 537758.28 -539981.97 -720.77431 38345.103 0.53757232 295.09799 299.8321 0.97222873 - 1670 1670 34.73444 67.974343 1462.3052 -1394.3308 508.79216 571.9667 -187.97716 537720.4 -539984.82 -728.38004 38304.006 0.53814909 301.39433 306.11908 0.97819013 - 1680 1680 34.952376 60.242602 1487.7274 -1427.4848 489.91874 550.06024 -193.29007 537746.63 -539988.16 -117.94688 38261.502 0.53874692 306.67673 311.465 0.94713061 - 1690 1690 35.168277 53.143919 1459.148 -1406.0041 479.9147 580.91763 -186.24589 537744.92 -539985.86 -692.45728 38219.174 0.53934357 300.68984 305.45048 0.99146043 - 1700 1700 35.388784 45.953602 1426.9308 -1380.9772 497.60714 580.50612 -166.09691 537725.11 -539986.46 -844.43524 38175.5 0.53996061 294.09174 298.73772 0.90668449 - 1710 1710 35.606398 38.964967 1436.2145 -1397.2495 507.68713 561.14384 -167.73914 537716.98 -539981.32 -377.11797 38130.02 0.54060465 295.93443 300.65779 0.95966541 - 1720 1720 35.816981 31.75435 1459.2052 -1427.4509 504.38186 553.04689 -168.58594 537710.3 -539981.5 -367.33181 38084.217 0.54125482 300.78718 305.47781 0.96077303 - 1730 1730 36.027429 24.463684 1486.6879 -1462.2242 495.52339 528.05137 -156.11454 537702 -539982.96 -322.91733 38038.426 0.54190639 306.39559 311.27389 0.89344382 - 1740 1740 36.244198 17.443572 1469.0301 -1451.5866 501.23042 555.32899 -163.40791 537688.49 -539982.76 -575.76272 37992.635 0.54255953 302.56905 307.53139 0.97367765 - 1750 1750 36.462417 10.226222 1468.5048 -1458.2786 483.79386 557.22663 -180.9805 537725.87 -539987.79 -144.3588 37946.413 0.54322041 302.65462 307.44452 0.92710718 - 1760 1760 36.676042 3.3338713 1455.7767 -1452.4428 492.16679 580.418 -196.41241 537718.11 -539984.89 -447.17625 37900.791 0.54387429 300.01777 304.78831 0.90201134 - 1770 1770 36.890956 -4.4436072 1514.2285 -1518.6721 498.58626 543.0597 -201.20107 537697.54 -539988.08 -413.5874 37855.167 0.54452978 311.8641 317.03639 0.9175616 - 1780 1780 37.102769 -12.078178 1500.0141 -1512.0923 510.8842 537.91557 -190.57863 537688.29 -539987.37 -281.34559 37809.557 0.54518666 309.0417 314.07409 0.88137104 - 1790 1790 37.321547 -19.807866 1489.6217 -1509.4295 512.47719 540.74673 -173.01134 537672.4 -539983.96 -594.2773 37764.312 0.54583984 306.88911 311.89004 0.89141439 - 1800 1800 37.531257 -27.551935 1454.1881 -1481.74 504.43406 587.85284 -163.0931 537659.52 -539985.61 -562.902 37718.536 0.54650229 299.65393 304.46526 0.88194202 - 1810 1810 37.746996 -35.172046 1461.1948 -1496.3668 506.76051 559.34064 -159.78596 537650.98 -539986.62 93.333143 37672.584 0.54716889 301.01216 305.92428 0.90215653 - 1820 1820 37.967154 -42.544395 1464.1727 -1506.717 511.80012 555.63005 -146.87939 537615.87 -539991.66 -235.83431 37628.272 0.54781325 301.84224 306.52652 0.94643867 - 1830 1830 38.185209 -50.408898 1455.5933 -1506.0022 516.85237 571.75274 -143.477 537588.37 -539995.28 -657.1656 37584.697 0.54844838 300.1439 304.75432 0.89308276 - 1840 1840 38.399681 -57.74015 1439.3155 -1497.0556 508.44952 551.85922 -133.91203 537602.46 -539988.67 74.452185 37540.779 0.54908999 296.68313 301.3222 0.9312283 - 1850 1850 38.646602 -64.1309 1424.4531 -1488.584 510.53555 557.24559 -140.10065 537612.54 -539983.68 478.00794 37498.661 0.54970672 293.49702 298.20289 0.93735246 - 1860 1860 38.862309 -71.003858 1463.0623 -1534.0661 494.22469 530.44018 -152.81505 537636.97 -539982.44 91.961324 37459.697 0.5502785 301.5481 306.34354 0.84675017 - 1870 1870 39.078972 -77.648795 1427.4781 -1505.1269 491.02394 561.49148 -151.1223 537636.43 -539980.02 -435.92195 37422.477 0.5508258 294.2896 298.83391 0.94385309 - 1880 1880 39.295787 -83.937246 1408.3625 -1492.2997 496.49653 563.43084 -154.07954 537636.6 -539982.97 191.50779 37385.544 0.55136996 290.28708 294.84415 0.9072399 - 1890 1890 39.509838 -90.055778 1415.472 -1505.5278 506.7446 556.72837 -168.16962 537629.16 -539984.5 66.201503 37350.415 0.55188853 291.88679 296.31605 0.94481507 - 1900 1900 39.73106 -96.47075 1431.3413 -1527.812 519.74922 544.01957 -192.65467 537633.12 -539988.67 -796.13306 37316.64 0.55238804 294.95092 299.64568 0.94032731 - 1910 1910 39.951516 -102.85417 1429.9108 -1532.765 496.58603 552.34631 -203.14772 537655.96 -539987.35 -1079.2969 37281.465 0.55290922 294.59953 299.3099 1.0120105 - 1920 1920 40.166842 -109.00048 1451.2983 -1560.2988 504.47992 539.89277 -189.83624 537617.75 -539982.83 -162.49828 37244.135 0.55346342 299.01729 303.77465 1.0513433 - 1930 1930 40.393396 -114.90526 1443.6048 -1558.51 513.67097 531.71647 -174.66654 537610.57 -539982.62 187.46093 37207.476 0.55400871 297.54402 302.1569 1.0605547 - 1940 1940 40.609046 -120.50564 1404.7013 -1525.207 504.52336 572.28422 -159.44687 537600.18 -539977.31 -735.06991 37172.415 0.55453126 289.46595 294.00591 1.0484137 - 1950 1950 40.829466 -126.12492 1413.284 -1539.4089 516.22056 561.97444 -159.40311 537594.29 -539979.2 -239.01279 37136.578 0.55506638 291.05888 295.75975 1.1398655 - 1960 1960 41.045869 -131.2896 1429.1674 -1560.457 504.07961 554.2537 -175.64758 537611.38 -539978.46 226.43877 37101.172 0.55559608 294.46237 299.12106 1.0779577 - 1970 1970 41.268836 -136.70492 1441.4232 -1578.1281 516.78111 551.13969 -181.42271 537584.57 -539980.88 23.658598 37067.725 0.55609742 296.90884 301.66921 1.1210845 - 1980 1980 41.482154 -142.78731 1440.1051 -1582.8924 508.11976 532.18635 -172.6671 537588.62 -539978.74 -604.40478 37035.477 0.55658163 296.87807 301.39775 1.111257 - 1990 1990 41.702512 -148.45813 1420.5171 -1568.9752 521.95895 535.64727 -167.03945 537590.49 -539975.13 -722.04634 37002.397 0.55707921 292.74976 297.2732 1.1461384 - 2000 2000 41.918277 -153.70316 1413.1112 -1566.8144 500.23407 577.00843 -176.66202 537589.81 -539978.18 77.164357 36968.346 0.55759232 290.88401 295.72127 1.1443678 -Loop time of 41.9183 on 4 procs for 2000 steps with 2800 atoms + 10 10 0.207272 1866.1234 1294.3904 571.73299 570.18548 421.90708 -480.70585 539943.81 -539929.74 805.31575 42854.367 0.48100736 216.74278 221.57505 99.651373 + 20 20 0.422615 1639.4254 1025.541 613.88441 440.75582 630.81291 -511.62082 539884.11 -539931.54 3547.7591 42831.812 0.48126066 189.9745 191.41076 47.238176 + 30 30 0.636004 1509.2246 1199.5696 309.65504 372.66235 422.42807 -441.22393 539785.92 -539996.76 -2255.2096 42822.727 0.48136275 232.23532 234.10184 34.834744 + 40 40 0.849322 1447.7122 1208.8207 238.89149 301.47584 466.79595 -415.52093 539713.64 -540015.07 -2983.4667 42805.664 0.48155464 240.97408 243.39825 20.121373 + 50 50 1.057875 1418.4666 1249.502 168.96462 309.99547 480.01554 -495.04808 539716.53 -540017.02 3344.285 42776.949 0.48187789 252.07241 255.56807 12.841402 + 60 60 1.279009 1401.9371 1239.9607 161.97643 467.90054 298.63561 -481.19864 539718.72 -540016.73 6314.7205 42763.12 0.48203372 251.90217 255.43544 9.1055215 + 70 70 1.488082 1396.4533 1021.9568 374.49649 585.0559 367.14909 -436.69254 539677.13 -540007.02 -9573.8026 42770.007 0.4819561 207.52883 210.90348 6.7497287 + 80 80 1.701604 1388.5231 1234.429 154.09415 291.38001 446.20262 -454.21016 539690.22 -540020.29 -2596.442 42743.245 0.48225786 251.84239 256.22625 5.2041747 + 90 90 1.913986 1390.1274 1165.6307 224.49668 292.42639 610.78166 -509.169 539648.43 -540009.54 2755.6799 42701.879 0.48272503 239.29515 242.40904 3.9881039 + 100 100 2.121214 1391.6311 1287.2692 104.36195 333.86638 427.43215 -456.38003 539638.17 -540023.61 -3962.1784 42668.283 0.48310512 265.74273 268.23371 3.3477446 + 110 110 2.335767 1392.4962 1128.7784 263.71774 341.80093 547.86435 -397.70381 539615.87 -540033.75 -5131.6567 42619.2 0.48366149 231.88962 235.24089 2.8704377 + 120 120 2.542481 1391.2911 1316.2526 75.038553 302.07876 445.61484 -439.78763 539603.43 -540019.07 376.35842 42547.904 0.48447195 270.46432 274.66659 2.6361343 + 130 130 2.753605 1400.0627 1131.989 268.07372 519.48714 417.6662 -431.15046 539616.71 -540036.69 8538.062 42480.874 0.48523639 233.04019 236.40125 1.8960582 + 140 140 2.961175 1404.1878 1334.9133 69.274512 389.421 393.34067 -367.2924 539507.94 -540028.8 -4426.6651 42444.674 0.48565024 275.02782 279.10558 1.5835267 + 150 150 3.177236 1404.7864 1334.1949 70.591471 285.69314 480.49153 -340.69071 539518.01 -540045.75 -2082.9184 42395.713 0.48621109 274.19439 278.9463 1.6008215 + 160 160 3.391919 1412.6555 1291.707 120.94843 348.7604 575.18871 -418.38779 539483.99 -540034.49 5790.6824 42339.303 0.48685889 266.64535 270.16691 1.3423664 + 170 170 3.599132 1417.1467 1394.9631 22.183576 347.96723 497.00846 -398.67453 539439.29 -540027.81 -2071.8934 42303.603 0.48726974 288.38891 291.92774 1.1210284 + 180 180 3.809463 1420.2155 1260.1515 160.06402 383.6767 547.79961 -344.95473 539442.15 -540043.12 -5707.9251 42261.493 0.48775527 259.80398 263.64509 1.1531929 + 190 190 4.014893 1419.3667 1375.1626 44.20412 383.71873 500.13275 -378.41788 539388.43 -540024.18 -3451.5079 42194.665 0.48852777 283.36482 287.66025 1.3527012 + 200 200 4.227127 1425.8199 1378.4982 47.321658 460.35819 459.3409 -415.44783 539411.67 -540044.6 6205.8009 42117.045 0.48942811 284.32248 288.46226 1.1474766 + 210 210 4.432286 1432.8476 1458.7461 -25.898456 348.39192 519.78477 -364.59687 539324.82 -540036.04 -2670.2448 42061.074 0.4900794 300.62025 305.40698 0.90989006 + 220 220 4.644142 1433.9234 1316.4385 117.48481 361.7325 586.07086 -288.11279 539309.49 -540044.33 -3665.7207 41997.584 0.49082028 270.93115 275.42918 1.1889587 + 230 230 4.856654 1439.0053 1526.3478 -87.342481 396.7696 419.31409 -364.6791 539312.78 -540045.43 7360.3024 41924.153 0.49167997 315.32585 319.5731 0.92637024 + 240 240 5.069204 1447.1229 1465.5412 -18.418302 387.84585 555.89043 -357.40374 539236.35 -540033.29 1804.1542 41878.572 0.49221511 302.34061 306.96246 0.64844737 + 250 250 5.276274 1451.5311 1408.0791 43.45194 376.3631 598.22558 -302.55739 539235.03 -540053.8 -3523.5223 41843.302 0.49263001 290.29736 294.90586 0.66500213 + 260 260 5.486435 1451.9121 1486.9381 -35.026077 439.39664 496.53832 -294.82206 539179.22 -540041.63 -3359.5387 41794.408 0.49320632 306.86146 311.37486 0.79643935 + 270 270 5.701114 1455.7824 1489.843 -34.060558 384.68471 584.31906 -345.52522 539213.2 -540050.09 4219.7836 41735.543 0.49390195 307.5027 312.00087 0.76256302 + 280 280 5.917565 1459.6907 1557.7147 -98.024008 363.40614 544.03098 -338.5609 539195.96 -540044.55 -1927.5595 41691.464 0.49442413 321.11857 326.30138 0.62349308 + 290 290 6.138473 1458.5631 1502.6363 -44.073215 468.8459 480.27985 -273.9133 539154.14 -540045.25 -6405.1654 41640.349 0.49503105 309.96993 314.62142 0.88634485 + 300 300 6.40204 1460.3316 1532.4499 -72.118356 394.63943 561.19456 -334.56113 539192.83 -540050.12 4984.7229 41569.486 0.49587494 316.03908 320.88619 0.85911177 + 310 310 6.627332 1465.7207 1493.2205 -27.499762 413.70607 630.92768 -345.49768 539150.28 -540033.83 3577.7221 41517.391 0.49649714 307.69086 312.804 0.57266056 + 320 320 6.849714 1465.4884 1660.5835 -195.09515 367.20331 477.59376 -303.61686 539152.63 -540037.91 -1201.1187 41482.202 0.49691832 342.85699 347.89088 0.58244251 + 330 330 7.064092 1465.9531 1506.4899 -40.536832 425.91339 568.10087 -249.05183 539108.48 -540033.08 -1066.8345 41444.504 0.49737031 310.75802 315.56257 0.62004599 + 340 340 7.280941 1465.9409 1557.6309 -91.689954 381.9757 625.89222 -296.40182 539081.74 -540030.48 4892.9614 41406.266 0.49782962 321.30624 326.29428 0.60252992 + 350 350 7.48787 1465.3216 1564.1509 -98.829249 418.42971 585.969 -296.62488 539077.24 -540036.78 740.63262 41386.895 0.49806264 322.55732 327.69219 0.54088039 + 360 360 7.700874 1462.6063 1545.8695 -83.263187 514.18444 506.65279 -255.48445 539024 -540031.84 -7180.551 41369.254 0.49827502 319.00076 323.79932 0.66034813 + 370 370 7.913417 1458.1677 1587.9359 -129.76813 389.00186 580.31846 -293.01684 539062.35 -540044.02 1831.7432 41328.293 0.49876886 327.289 332.55424 0.79099417 + 380 380 8.122597 1456.1241 1571.9683 -115.84419 389.73014 617.48805 -335.78903 539071.87 -540039.48 3128.4098 41293.129 0.49919361 324.14181 329.2188 0.76588497 + 390 390 8.368157 1451.8992 1566.361 -114.46186 409.57976 595.32696 -323.84233 539065.42 -540042.85 -2047.2083 41270.539 0.49946685 323.40659 328.06158 0.72893025 + 400 400 8.591038 1446.0615 1528.773 -82.711545 414.46841 582.41732 -279.89532 539064.81 -540045.35 -1758.08 41241.935 0.49981326 314.95174 320.11166 0.86625721 + 410 410 8.805136 1440.2008 1651.8275 -211.62673 396.56535 533.57242 -312.80543 539046.01 -540042.07 4444.0109 41209.153 0.50021086 340.45089 345.88102 0.9303561 + 420 420 9.027896 1435.656 1554.4611 -118.8051 454.51384 576.06992 -316.30443 539049.5 -540045.56 3709.2794 41194.366 0.50039042 320.18805 325.47827 0.90533299 + 430 430 9.254297 1427.9462 1634.1272 -206.18106 461.69471 552.57081 -278.82069 538945.64 -540038.11 -5309.7454 41192.427 0.50041397 336.91747 342.13613 0.99752281 + 440 440 9.48287 1419.5459 1581.5366 -161.99068 418.65549 618.71776 -258.37568 538949.12 -540039.03 -45.053757 41173.677 0.50064185 325.71857 331.04837 1.1191906 + 450 450 9.696312 1411.6639 1569.3142 -157.65035 380.53742 668.13347 -290.80748 538968.35 -540032.62 3122.8222 41154.153 0.50087936 323.37981 328.45983 1.1708438 + 460 460 9.915707 1402.5334 1627.6142 -225.08079 452.17261 578.69141 -298.30585 538927.95 -540030.11 -2417.8519 41145.38 0.50098616 335.41854 340.63875 1.2610557 + 470 470 10.127069 1393.2236 1617.2885 -224.06489 436.18212 569.79211 -278.51933 538933.86 -540035.19 -3103.9609 41128.381 0.50119323 333.10318 338.43628 1.3359175 + 480 480 10.340579 1384.5295 1583.0615 -198.53199 460.65721 603.39994 -285.15851 538894.86 -540025.61 2315.242 41100.555 0.50153254 325.89632 331.2083 1.4388068 + 490 490 10.553304 1375.6696 1607.7362 -232.06655 478.07831 546.08808 -283.66976 538902.42 -540031.78 4472.4169 41082.807 0.50174921 331.37679 336.42468 1.3533669 + 500 500 10.775566 1366.0159 1653.6341 -287.61812 433.24034 598.38535 -281.95695 538837.44 -540025.77 -2921.1083 41080.827 0.5017734 340.53355 346.03811 1.3737347 + 510 510 10.991695 1356.1785 1625.4343 -269.25582 430.87164 614.37229 -274.02613 538850.25 -540029.1 -514.63413 41070.415 0.5019006 334.54685 340.1105 1.4034076 + 520 520 11.212936 1345.9803 1672.4272 -326.44692 410.44251 589.22282 -300.56101 538873.38 -540022.33 3423.1019 41058.605 0.50204497 344.74979 349.98307 1.3647023 + 530 530 11.442425 1335.9908 1610.2842 -274.29341 453.69553 630.07905 -307.15955 538849.94 -540018.03 -1600.2251 41058.305 0.50204863 331.45503 336.99781 1.2756028 + 540 540 11.689729 1325.3284 1622.8383 -297.50983 467.0454 565.42045 -284.7694 538855.1 -540019.63 -3638.2655 41052.412 0.5021207 334.16222 339.63113 1.2734996 + 550 550 11.908075 1314.4631 1651.4251 -336.96202 462.52498 578.48562 -284.70119 538808.88 -540016.15 -518.70335 41032.516 0.50236417 340.19545 345.65835 1.2069185 + 560 560 12.123316 1304.2928 1656.256 -351.9632 418.3626 608.41877 -267.15227 538789.68 -540024.32 2812.3348 41011.228 0.50262493 341.36426 346.71795 1.1135433 + 570 570 12.334333 1294.0759 1610.4771 -316.40114 441.78983 648.31376 -262.29938 538733.04 -540018.04 -1538.1626 40999.314 0.502771 332.02401 337.14404 1.0640192 + 580 580 12.55041 1282.4524 1645.2031 -362.75069 440.30488 580.58811 -236.71445 538736.27 -540024.85 -1101.6572 40983 0.50297113 339.25673 344.424 1.0664332 + 590 590 12.759961 1272.0788 1684.9242 -412.84541 426.57598 579.81154 -250.95724 538728.6 -540026.39 3972.5381 40964.393 0.50319959 347.39514 352.81162 0.9481937 + 600 600 12.991543 1260.9837 1675.1424 -414.15866 426.29955 601.62481 -277.0776 538735.86 -540019.69 733.89874 40959.911 0.50325466 345.33847 350.77315 0.92315425 + 610 610 13.220988 1249.4355 1680.3253 -430.88979 461.94541 568.50547 -279.19131 538733 -540020.22 -2637.3171 40958.816 0.50326812 346.5244 351.87492 0.8930443 + 620 620 13.434275 1238.2436 1639.1356 -400.89196 462.34964 648.9058 -282.32391 538687.09 -540016.6 -1272.7738 40948.016 0.50340084 338.09955 343.24784 0.8743544 + 630 630 13.678674 1226.2102 1700.4355 -474.22536 415.43324 626.07728 -284.77036 538701.1 -540024.64 1191.1215 40932.519 0.50359143 350.55404 356.13127 0.81354721 + 640 640 13.908361 1213.6625 1722.4306 -508.76811 451.82932 596.2177 -304.21125 538680.81 -540025.34 -2040.5501 40920.026 0.50374519 355.14014 360.74736 0.80500911 + 650 650 14.122375 1200.523 1711.9652 -511.44222 468.66709 555.52213 -284.35989 538686.74 -540030.85 -3242.3861 40899.595 0.50399682 352.96478 358.53307 0.8449128 + 660 660 14.33797 1188.0333 1686.8332 -498.79991 447.18786 623.78213 -277.2393 538662.53 -540036.47 2062.8 40868.281 0.504383 347.66952 353.26364 0.84470068 + 670 670 14.552749 1176.309 1677.3756 -501.06663 432.41729 630.68477 -246.82119 538633.15 -540025.32 2018.2625 40844.215 0.50468018 345.93001 351.30318 0.79958169 + 680 680 14.760923 1164.0539 1637.268 -473.21403 456.37206 620.05888 -220.36961 538603.84 -540020.32 -976.09071 40828.172 0.50487849 337.63373 342.91086 0.76511377 + 690 690 14.973559 1151.5332 1658.5734 -507.04017 455.22409 597.05127 -207.88025 538576.76 -540018.31 323.34897 40810.021 0.50510305 341.94091 347.36248 0.79627601 + 700 700 15.184398 1139.9903 1700.0553 -560.06498 436.02394 577.80227 -205.50405 538580.01 -540024.21 2001.9128 40793.73 0.50530475 350.53199 356.08655 0.74354299 + 710 710 15.400627 1128.2643 1664.8705 -536.60628 463.70506 651.50664 -230.61516 538538.77 -540025.31 -508.86732 40784.628 0.50541753 343.34437 348.6884 0.78515878 + 720 720 15.614563 1115.9411 1630.2796 -514.33852 506.57764 607.09308 -229.84152 538559.57 -540017.07 -3127.5793 40773.329 0.50555759 336.08992 341.42284 0.81059211 + 730 730 15.830713 1103.0656 1694.1592 -591.09356 450.11958 627.65288 -253.85448 538551.36 -540015.43 -146.32999 40751.104 0.50583332 349.11077 354.74126 0.96159634 + 740 740 16.038668 1090.6612 1721.1435 -630.48227 437.46474 606.18905 -248.87815 538542.97 -540008.35 1077.7969 40727.746 0.50612342 354.64465 360.41017 0.93961199 + 750 750 16.252273 1077.6001 1706.0173 -628.41716 477.13711 591.82616 -241.11378 538505.89 -540005.96 -974.1309 40707.979 0.50636918 351.76494 357.21309 0.99061611 + 760 760 16.460337 1064.8462 1671.2712 -606.42497 459.57992 620.48754 -220.77486 538487.09 -540007.33 -71.64889 40685.72 0.50664622 344.49488 349.92005 1.0059768 + 770 770 16.677585 1052.4557 1681.2022 -628.74649 428.96094 608.2218 -198.40559 538475.09 -540006.2 1856.6076 40663.884 0.50691828 346.27378 351.96343 1.0837482 + 780 780 16.893769 1040.723 1625.9969 -585.27381 458.27519 626.0187 -235.63783 538502.81 -540008.7 1016.2221 40649.237 0.50710094 335.13457 340.40065 1.0590112 + 790 790 17.118082 1028.4064 1633.2536 -604.84719 455.65305 626.15622 -248.78737 538508.38 -540008.88 -1369.2979 40638.582 0.50723389 336.64828 341.88384 1.1357406 + 800 800 17.339244 1015.4954 1666.4595 -650.9641 445.94756 657.57103 -280.18245 538498.84 -540015.1 -1043.1656 40623.317 0.50742449 343.47686 348.83548 1.1573361 + 810 810 17.553809 1002.1183 1685.5373 -683.41906 440.89112 604.14181 -291.89016 538535.57 -540014.83 -581.99461 40603.767 0.50766881 347.41495 352.80847 1.2116042 + 820 820 17.778791 989.15171 1678.3078 -689.15612 455.2621 599.94003 -298.7579 538514.82 -540009.96 -2027.8844 40581.116 0.50795217 345.89589 351.2764 1.2440787 + 830 830 18.001953 975.707 1649.255 -673.54801 458.71883 647.01152 -302.29605 538497.69 -540017.88 -1485.4901 40550.879 0.50833092 339.85438 345.15667 1.3002628 + 840 840 18.217084 962.26855 1667.3243 -705.05577 462.77662 592.72694 -279.50507 538495.49 -540012.35 -54.163113 40514.914 0.50878217 343.40682 348.92391 1.3431364 + 850 850 18.440542 949.49932 1631.9134 -682.4141 478.53288 614.19826 -243.38115 538444.52 -540010.3 310.08768 40478.805 0.50923603 336.30228 341.53075 1.2799218 + 860 860 18.65751 935.99845 1684.7625 -748.76409 440.77296 594.40682 -219.10467 538407.93 -540013.87 248.0022 40444.498 0.50966798 347.06325 352.6711 1.161457 + 870 870 18.87971 922.58003 1694.0713 -771.49127 466.19871 609.11461 -205.02926 538339.03 -540013.71 495.00215 40411.839 0.51007988 349.28528 354.6354 1.1364619 + 880 880 19.111334 908.90546 1697.4569 -788.55149 458.33805 606.14761 -189.21242 538326.84 -540014.77 986.80955 40381.983 0.510457 350.0288 355.36417 1.0987025 + 890 890 19.336511 895.51995 1647.1281 -751.60817 467.89799 618.42866 -204.03381 538331.65 -540002.93 -624.82453 40355.893 0.51078701 339.51567 344.85213 1.0174293 + 900 900 19.561979 881.35561 1648.538 -767.18239 482.4553 618.07345 -231.01967 538322.5 -540005.24 -1427.503 40327.852 0.51114217 339.70171 345.13656 1.0398005 + 910 910 19.77894 867.61758 1644.2566 -776.639 467.74273 603.67744 -236.07867 538351.52 -540008.11 -265.82677 40294.966 0.51155933 339.01554 344.25158 1.0143413 + 920 920 20.001905 853.94584 1627.6141 -773.66826 472.82171 589.79371 -219.1737 538345.65 -540005.73 -101.571 40261.021 0.51199064 335.50924 340.78304 0.97241589 + 930 930 20.222736 840.36432 1647.6033 -807.23894 448.42292 585.44013 -225.33398 538337.25 -540001.93 -579.43943 40227.022 0.51242336 339.78899 345.00145 0.91803022 + 940 940 20.452171 827.65554 1587.3974 -759.74184 460.78076 625.88654 -234.39212 538341.74 -540000.41 -521.27788 40191.265 0.51287926 327.35362 332.38943 0.89479535 + 950 950 20.683637 814.92728 1613.2286 -798.30131 444.69207 625.45006 -220.90437 538310.82 -539997.46 690.75705 40154.389 0.51335026 332.76498 337.82638 0.85318584 + 960 960 20.909569 802.68594 1582.1571 -779.47118 464.65237 620.34911 -202.28265 538285.19 -539989.82 603.28491 40120.532 0.51378346 326.13938 331.32007 0.8360227 + 970 970 21.157412 790.05035 1625.6546 -835.60423 458.40436 586.65017 -213.69114 538280.37 -539993.72 -505.81997 40089.412 0.5141823 335.20752 340.43527 0.84623905 + 980 980 21.386351 777.63872 1616.1839 -838.5452 489.85695 596.65508 -249.36777 538276.37 -539994.03 -720.92633 40057.048 0.51459772 333.26967 338.47472 0.79582384 + 990 990 21.611019 764.76448 1625.2264 -860.46187 455.6042 582.88497 -251.36667 538315.5 -539997.18 -736.01132 40022.287 0.51504468 335.09615 340.34019 0.85681602 + 1000 1000 21.840266 752.15165 1602.1524 -850.00076 440.64651 612.21179 -259.66632 538327.16 -539995.9 -659.783 39985.098 0.51552371 330.23098 335.51944 0.82229368 + 1010 1010 22.061729 739.36313 1612.4766 -873.11349 456.73339 595.48756 -265.92682 538317.42 -539994.4 -805.3156 39945.679 0.51603244 332.47155 337.67068 0.84926087 + 1020 1020 22.281956 726.60873 1607.6476 -881.03885 453.27344 580.3865 -263.10342 538318.42 -539994.98 -867.47906 39903.697 0.51657534 331.38231 336.63862 0.88832411 + 1030 1030 22.500293 714.38154 1568.6465 -854.26499 450.07706 620.13214 -247.05848 538288.31 -539992.98 -21.052816 39859.334 0.51715028 323.35423 328.44574 0.91902456 + 1040 1040 22.714615 702.14692 1585.2297 -883.08274 452.30576 586.6151 -222.99088 538272.15 -539994.18 439.19554 39815.597 0.51771837 326.8922 331.92732 0.90998278 + 1050 1050 22.934165 690.07486 1604.6904 -914.61558 454.89463 577.67062 -217.9776 538243.15 -539993.38 322.83286 39774.408 0.5182545 330.83397 336.02496 0.87557251 + 1060 1060 23.147485 678.22883 1616.2423 -938.01344 451.38029 587.76489 -199.22296 538184.33 -539990.34 -445.39958 39735.128 0.51876682 333.30762 338.44871 0.87231416 + 1070 1070 23.371712 666.68565 1572.2135 -905.52789 463.80966 606.04348 -188.43084 538159.53 -539987.03 -163.71062 39695.243 0.51928807 323.93741 329.19376 0.91879888 + 1080 1080 23.592074 655.3194 1549.8766 -894.55717 471.58122 627.43794 -171.01223 538118.27 -539983.53 642.00617 39655.854 0.51980386 319.40093 324.50755 0.92424346 + 1090 1090 23.810768 643.56988 1572.9827 -929.41284 477.53512 617.3063 -155.84223 538080.67 -539981.75 -303.11208 39619.261 0.52028396 324.11211 329.35218 0.92452937 + 1100 1100 24.030996 631.34926 1606.5068 -975.1575 482.38301 596.35174 -152.24071 538069.94 -539985.59 -295.74715 39582.718 0.52076429 331.14581 336.34658 0.99398777 + 1110 1110 24.253748 619.40749 1650.0925 -1030.685 471.99628 581.92908 -163.37165 538056.44 -539986.19 101.99914 39545.912 0.52124898 340.30522 345.49221 0.98038296 + 1120 1120 24.466358 607.80142 1601.7714 -993.96998 481.78391 604.13823 -175.98477 538075.33 -539989.29 772.03173 39510.545 0.52171556 329.92976 335.33428 1.0328339 + 1130 1130 24.683317 596.14983 1585.9766 -989.82673 478.57552 593.5132 -163.56273 538080.21 -539991.31 698.29284 39478.891 0.52213387 326.73721 332.03022 1.0174001 + 1140 1140 24.899456 584.55115 1528.6932 -944.14208 500.23792 618.7855 -145.95898 538068.56 -539991.59 181.46798 39450.636 0.52250783 315.01595 320.01906 1.0180086 + 1150 1150 25.121842 573.2311 1532.9497 -959.71864 483.82952 595.80796 -147.60708 538091.56 -539992.86 960.828 39424.391 0.52285565 315.87623 320.88763 1.0658274 + 1160 1160 25.337582 562.48544 1542.3058 -979.82036 479.02129 557.25946 -148.66969 538106.56 -539989.91 865.76041 39402.269 0.52314921 317.55574 322.8689 1.0267396 + 1170 1170 25.560172 551.79114 1565.0048 -1013.2136 473.50392 595.12481 -176.67308 538082.7 -539996.66 287.39786 39383.964 0.52339237 322.51003 327.60986 1.0636049 + 1180 1180 25.780628 540.84306 1560.3606 -1019.5175 472.50193 613.77621 -180.43646 538077.13 -539996.75 -273.84079 39367.233 0.5236148 321.24203 326.61818 1.0994493 + 1190 1190 26.006947 529.81791 1554.3154 -1024.4975 479.61574 608.56003 -190.37193 538092.52 -539997.94 -199.37466 39350.015 0.52384391 320.26323 325.33314 1.1344811 + 1200 1200 26.227567 518.37678 1598.5516 -1080.1748 475.43183 585.7003 -196.96318 538076.64 -539998.23 63.187511 39332.491 0.5240773 329.21805 334.58589 1.179388 + 1210 1210 26.45494 506.92408 1597.2282 -1090.3041 478.61347 599.24396 -201.47857 538049.55 -539992.4 -282.33521 39315.294 0.52430655 328.93235 334.3036 1.1889983 + 1220 1220 26.678579 495.3273 1606.9452 -1111.6179 486.00588 549.43523 -204.38154 538078.12 -539992.38 604.77764 39297.911 0.52453847 331.09004 336.35084 1.1693315 + 1230 1230 26.910881 483.97099 1552.6316 -1068.6606 472.98644 610.41417 -176.61168 538037.16 -539988.94 470.47936 39282.921 0.52473863 319.75816 324.99789 1.0988695 + 1240 1240 27.131567 472.33281 1542.3666 -1070.0338 489.16026 584.28947 -175.21695 538035.4 -539991.65 -39.470875 39269.955 0.52491188 317.74163 322.82092 1.1481824 + 1250 1250 27.361988 461.11742 1519.0832 -1057.9658 473.26317 593.83851 -175.20668 538033.43 -539994.75 295.86367 39257.488 0.52507858 312.91207 317.94819 1.1297909 + 1260 1260 27.586596 450.3583 1527.6842 -1077.3259 485.88507 599.1393 -175.2479 537977.99 -539996.56 432.81529 39246.428 0.52522655 314.61209 319.7779 1.0772012 + 1270 1270 27.813668 439.18619 1544.6237 -1105.4375 482.11644 557.47819 -180.22821 537997.38 -540002.38 -298.3561 39236.936 0.52535361 318.30327 323.34421 1.0481196 + 1280 1280 28.035589 428.46106 1516.596 -1088.1349 504.49165 596.2217 -191.79409 537968.4 -539999.7 -883.68236 39226.429 0.52549433 312.38724 317.45893 1.0652888 + 1290 1290 28.263998 417.63805 1546.4541 -1128.8161 479.2285 593.89919 -185.11562 537964.93 -540001.23 -50.607033 39213.194 0.52567168 318.46765 323.73839 1.0273567 + 1300 1300 28.482059 407.00807 1551.335 -1144.327 493.43178 574.48856 -175.61939 537958.65 -539998.7 123.574 39199.722 0.52585235 319.7532 324.78784 0.9752765 + 1310 1310 28.704087 395.94205 1538.6343 -1142.6923 491.37859 591.0781 -184.30661 537953.49 -539994.21 -524.8278 39186.687 0.52602726 317.02529 322.10872 1.0074745 + 1320 1320 28.920503 384.90905 1530.8244 -1145.9153 476.59333 569.84151 -182.12499 537989.64 -539996.56 21.826355 39172.368 0.52621955 315.37027 320.49323 0.9633641 + 1330 1330 29.141909 374.26223 1511.5796 -1137.3173 475.38356 601.06911 -174.11503 537961.77 -539992.81 516.38488 39158.343 0.52640802 311.48105 316.4728 0.93392709 + 1340 1340 29.362343 364.32413 1500.0476 -1135.7235 483.5558 569.29153 -175.60404 537991.19 -539992.7 243.67538 39146.39 0.52656875 309.10478 314.05501 0.9335977 + 1350 1350 29.592061 354.55464 1504.469 -1149.9143 490.62162 587.58927 -186.35248 537961.88 -539995.1 -381.78526 39135.483 0.52671551 310.21158 315.01201 0.8736878 + 1360 1360 29.816398 344.35547 1531.3642 -1187.0088 491.21584 579.89411 -193.76413 537943.58 -539990.58 -244.2355 39123.584 0.5268757 315.75953 320.64866 0.87888611 + 1370 1370 30.039889 334.27989 1515.0842 -1180.8043 488.03531 574.19257 -211.87448 537993.57 -539991.08 -249.97543 39110.893 0.52704667 312.25817 317.23298 0.8832415 + 1380 1380 30.272868 323.86696 1538.6119 -1214.745 485.08686 582.87805 -225.29898 537973.87 -539986.54 -739.02426 39097.267 0.52723035 317.12737 322.16729 0.88094849 + 1390 1390 30.496249 313.80794 1533.3067 -1219.4987 481.37523 588.64375 -234.24759 537976.62 -539986.05 -655.28833 39081.143 0.52744788 315.91691 321.06481 0.86113555 + 1400 1400 30.725094 303.79864 1530.9473 -1227.1487 480.72027 590.16215 -215.86567 537959.68 -539992.21 -330.73807 39062.732 0.52769647 315.41341 320.56481 0.87174767 + 1410 1410 30.951381 293.51075 1533.2975 -1239.7868 491.09148 572.9868 -198.65749 537930.68 -539987.8 -65.486938 39043.309 0.52795899 316.19674 321.05974 0.86744465 + 1420 1420 31.181557 283.71084 1526.6328 -1242.922 495.08331 568.48527 -176.82189 537902.75 -539990.49 21.532166 39023.934 0.52822111 314.51268 319.62568 0.94073093 + 1430 1430 31.408995 273.976 1499.5001 -1225.5241 493.7511 599.34826 -163.21126 537865.36 -539986.48 -139.4696 39004.889 0.52847903 308.9433 313.92488 0.96423296 + 1440 1440 31.639168 264.37595 1479.3112 -1214.9353 485.97735 626.51291 -168.73441 537862.24 -539985.08 -5.1376016 38985.764 0.52873828 304.69592 309.69382 0.96018344 + 1450 1450 31.86538 254.48311 1516.8238 -1262.3406 485.20611 584.42229 -187.84777 537878.3 -539988.09 -409.87731 38966.698 0.528997 312.38753 317.54805 0.98256115 + 1460 1460 32.097869 244.44609 1528.0096 -1283.5635 475.14932 572.1757 -195.03467 537887.83 -539982.93 -382.07163 38946.576 0.5292703 314.82863 319.87313 1.0231637 + 1470 1470 32.334475 234.92186 1506.9672 -1272.0453 483.58859 574.09386 -193.42819 537901.5 -539985.43 -556.48369 38925.157 0.52956153 310.53209 315.46775 1.0098195 + 1480 1480 32.561381 225.54727 1504.4567 -1278.9094 488.61689 565.0204 -174.14691 537885.2 -539984.52 -359.42169 38902.063 0.52987591 309.97065 314.91696 1.0586336 + 1490 1490 32.794577 216.38416 1466.2284 -1249.8443 509.51688 596.47771 -171.13996 537848.83 -539986.88 -260.22681 38877.931 0.53020481 302.13725 306.92154 1.0184879 + 1500 1500 33.026393 206.69536 1483.4352 -1276.7398 489.094 572.06657 -180.74977 537863.53 -539990.17 -374.65638 38853.144 0.53054306 305.41421 310.49034 1.0965311 + 1510 1510 33.253073 197.53496 1470.5518 -1273.0168 496.4778 572.70296 -188.04176 537867.9 -539990.72 -194.44393 38827.445 0.53089421 302.98152 307.8031 1.0683639 + 1520 1520 33.486049 188.48557 1505.5349 -1317.0494 482.1399 549.60023 -188.37002 537878.58 -539995.49 -303.59474 38801.329 0.53125155 310.28121 315.125 1.0947178 + 1530 1530 33.71214 180.01627 1478.9048 -1298.8885 480.66008 576.52332 -189.11463 537879.38 -539993.74 -93.728814 38774.647 0.53161711 304.77682 309.54442 1.0885542 + 1540 1540 33.945085 171.52164 1446.5122 -1274.9905 501.65604 592.7318 -194.77694 537883.38 -539991.88 -572.03929 38747.789 0.53198561 297.926 302.75623 1.081108 + 1550 1550 34.169209 162.60918 1457.9287 -1295.3195 486.66451 571.43484 -187.48201 537884.26 -539989.54 -853.52486 38719.251 0.53237771 300.30512 305.13923 1.10264 + 1560 1560 34.402741 154.14961 1460.7712 -1306.6216 487.11697 573.05525 -179.37345 537856.59 -539987.73 206.95258 38688.466 0.53280133 300.76679 305.73882 1.0954494 + 1570 1570 34.633793 145.6307 1495.1533 -1349.5226 487.99972 554.96647 -191.74891 537850.24 -539993.78 -213.86136 38658.392 0.53321581 308.13343 312.9642 1.0627758 + 1580 1580 34.858544 137.39237 1453.073 -1315.6806 505.50016 572.68038 -203.83828 537848.17 -539990.51 -661.68831 38628.081 0.53363422 299.22674 304.14568 1.0534877 + 1590 1590 35.087313 129.05492 1470.1644 -1341.1095 501.44319 556.99456 -200.18914 537839.64 -539995.46 -568.78912 38595.999 0.53407779 302.89304 307.72799 1.0561465 + 1600 1600 35.314759 120.98183 1474.539 -1353.5572 501.88809 579.32612 -190.98534 537804.72 -539996.91 -160.89634 38562.46 0.53454229 303.82394 308.64511 1.0563809 + 1610 1610 35.54699 112.95651 1460.2249 -1347.2684 507.62493 568.61569 -186.36471 537806.85 -539992.66 -173.77943 38528.878 0.5350082 300.96155 305.65977 1.0244687 + 1620 1620 35.775333 105.14119 1417.5884 -1312.4472 509.86727 587.11752 -178.54456 537794.49 -539991.12 -986.38798 38495.018 0.53547879 292.14329 296.7195 1.025421 + 1630 1630 36.00793 96.99965 1437.5733 -1340.5736 501.20257 559.09339 -183.47706 537795.68 -539989.89 -337.67771 38458.687 0.53598465 296.23298 300.93861 0.96783706 + 1640 1640 36.240331 89.301341 1442.9464 -1353.6451 499.24329 557.10277 -189.77016 537785.82 -539988.95 -217.33207 38421.605 0.53650195 297.30451 302.041 1.0162812 + 1650 1650 36.464999 82.272541 1418.4528 -1336.1802 512.15045 576.54801 -197.74469 537770.95 -539985.93 -765.69935 38384.269 0.53702379 292.16195 296.91165 1.003587 + 1660 1660 36.696163 75.245147 1432.3065 -1357.0613 504.60866 561.06335 -182.84394 537758.28 -539981.97 -720.77431 38345.103 0.53757232 295.09799 299.8321 0.97222873 + 1670 1670 36.921469 67.974343 1462.3052 -1394.3308 508.79216 571.9667 -187.97716 537720.4 -539984.82 -728.38004 38304.006 0.53814909 301.39433 306.11908 0.97819013 + 1680 1680 37.156748 60.242602 1487.7274 -1427.4848 489.91874 550.06024 -193.29007 537746.63 -539988.16 -117.94688 38261.502 0.53874692 306.67673 311.465 0.94713061 + 1690 1690 37.383504 53.143919 1459.148 -1406.0041 479.9147 580.91763 -186.24589 537744.92 -539985.86 -692.45728 38219.174 0.53934357 300.68984 305.45048 0.99146043 + 1700 1700 37.614368 45.953602 1426.9308 -1380.9772 497.60714 580.50612 -166.09691 537725.11 -539986.46 -844.43524 38175.5 0.53996061 294.09174 298.73772 0.90668449 + 1710 1710 37.847542 38.964967 1436.2145 -1397.2495 507.68713 561.14384 -167.73914 537716.98 -539981.32 -377.11797 38130.02 0.54060465 295.93443 300.65779 0.95966541 + 1720 1720 38.071033 31.75435 1459.2052 -1427.4509 504.38186 553.04689 -168.58594 537710.3 -539981.5 -367.33181 38084.217 0.54125482 300.78718 305.47781 0.96077303 + 1730 1730 38.298399 24.463684 1486.6879 -1462.2242 495.52339 528.05137 -156.11454 537702 -539982.96 -322.91733 38038.426 0.54190639 306.39559 311.27389 0.89344382 + 1740 1740 38.528471 17.443572 1469.0301 -1451.5866 501.23042 555.32899 -163.40791 537688.49 -539982.76 -575.76272 37992.635 0.54255953 302.56905 307.53139 0.97367765 + 1750 1750 38.760203 10.226222 1468.5048 -1458.2786 483.79386 557.22663 -180.9805 537725.87 -539987.79 -144.3588 37946.413 0.54322041 302.65462 307.44452 0.92710718 + 1760 1760 38.988632 3.3338713 1455.7767 -1452.4428 492.16679 580.418 -196.41241 537718.11 -539984.89 -447.17625 37900.791 0.54387429 300.01777 304.78831 0.90201134 + 1770 1770 39.221733 -4.4436072 1514.2285 -1518.6721 498.58626 543.0597 -201.20107 537697.54 -539988.08 -413.5874 37855.167 0.54452978 311.8641 317.03639 0.9175616 + 1780 1780 39.462746 -12.078178 1500.0141 -1512.0923 510.8842 537.91557 -190.57863 537688.29 -539987.37 -281.34559 37809.557 0.54518666 309.0417 314.07409 0.88137104 + 1790 1790 39.70076 -19.807866 1489.6217 -1509.4295 512.47719 540.74673 -173.01134 537672.4 -539983.96 -594.2773 37764.312 0.54583984 306.88911 311.89004 0.89141439 + 1800 1800 39.999239 -27.551935 1454.1881 -1481.74 504.43406 587.85284 -163.0931 537659.52 -539985.61 -562.902 37718.536 0.54650229 299.65393 304.46526 0.88194202 + 1810 1810 40.240858 -35.172046 1461.1948 -1496.3668 506.76051 559.34064 -159.78596 537650.98 -539986.62 93.333143 37672.584 0.54716889 301.01216 305.92428 0.90215653 + 1820 1820 40.478228 -42.544395 1464.1727 -1506.717 511.80012 555.63005 -146.87939 537615.87 -539991.66 -235.83431 37628.272 0.54781325 301.84224 306.52652 0.94643867 + 1830 1830 40.712435 -50.408898 1455.5933 -1506.0022 516.85237 571.75274 -143.477 537588.37 -539995.28 -657.1656 37584.697 0.54844838 300.1439 304.75432 0.89308276 + 1840 1840 40.944117 -57.74015 1439.3155 -1497.0556 508.44952 551.85922 -133.91203 537602.46 -539988.67 74.452185 37540.779 0.54908999 296.68313 301.3222 0.9312283 + 1850 1850 41.179574 -64.1309 1424.4531 -1488.584 510.53555 557.24559 -140.10065 537612.54 -539983.68 478.00794 37498.661 0.54970672 293.49702 298.20289 0.93735246 + 1860 1860 41.409342 -71.003858 1463.0623 -1534.0661 494.22469 530.44018 -152.81505 537636.97 -539982.44 91.961324 37459.697 0.5502785 301.5481 306.34354 0.84675017 + 1870 1870 41.644415 -77.648795 1427.4781 -1505.1269 491.02394 561.49148 -151.1223 537636.43 -539980.02 -435.92195 37422.477 0.5508258 294.2896 298.83391 0.94385309 + 1880 1880 41.904945 -83.937246 1408.3625 -1492.2997 496.49653 563.43084 -154.07954 537636.6 -539982.97 191.50779 37385.544 0.55136996 290.28708 294.84415 0.9072399 + 1890 1890 42.140914 -90.055778 1415.472 -1505.5278 506.7446 556.72837 -168.16962 537629.16 -539984.5 66.201503 37350.415 0.55188853 291.88679 296.31605 0.94481507 + 1900 1900 42.381274 -96.47075 1431.3413 -1527.812 519.74922 544.01957 -192.65467 537633.12 -539988.67 -796.13306 37316.64 0.55238804 294.95092 299.64568 0.94032731 + 1910 1910 42.618679 -102.85417 1429.9108 -1532.765 496.58603 552.34631 -203.14772 537655.96 -539987.35 -1079.2969 37281.465 0.55290922 294.59953 299.3099 1.0120105 + 1920 1920 42.853256 -109.00048 1451.2983 -1560.2988 504.47992 539.89277 -189.83624 537617.75 -539982.83 -162.49828 37244.135 0.55346342 299.01729 303.77465 1.0513433 + 1930 1930 43.094871 -114.90526 1443.6048 -1558.51 513.67097 531.71647 -174.66654 537610.57 -539982.62 187.46093 37207.476 0.55400871 297.54402 302.1569 1.0605547 + 1940 1940 43.329949 -120.50564 1404.7013 -1525.207 504.52336 572.28422 -159.44687 537600.18 -539977.31 -735.06991 37172.415 0.55453126 289.46595 294.00591 1.0484137 + 1950 1950 43.56525 -126.12492 1413.284 -1539.4089 516.22056 561.97444 -159.40311 537594.29 -539979.2 -239.01279 37136.578 0.55506638 291.05888 295.75975 1.1398655 + 1960 1960 43.801592 -131.2896 1429.1674 -1560.457 504.07961 554.2537 -175.64758 537611.38 -539978.46 226.43877 37101.172 0.55559608 294.46237 299.12106 1.0779577 + 1970 1970 44.036043 -136.70492 1441.4232 -1578.1281 516.78111 551.13969 -181.42271 537584.57 -539980.88 23.658598 37067.725 0.55609742 296.90884 301.66921 1.1210845 + 1980 1980 44.271311 -142.78731 1440.1051 -1582.8924 508.11976 532.18635 -172.6671 537588.62 -539978.74 -604.40478 37035.477 0.55658163 296.87807 301.39775 1.111257 + 1990 1990 44.505131 -148.45813 1420.5171 -1568.9752 521.95895 535.64727 -167.03945 537590.49 -539975.13 -722.04634 37002.397 0.55707921 292.74976 297.2732 1.1461384 + 2000 2000 44.73314 -153.70316 1413.1112 -1566.8144 500.23407 577.00843 -176.66202 537589.81 -539978.18 77.164357 36968.346 0.55759232 290.88401 295.72127 1.1443678 +Loop time of 44.7332 on 4 procs for 2000 steps with 2800 atoms -Performance: 4.122 ns/day, 5.822 hours/ns, 47.712 timesteps/s -99.5% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 3.863 ns/day, 6.213 hours/ns, 44.710 timesteps/s +99.0% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 5.9071 | 6.3864 | 6.9155 | 14.4 | 15.24 -Bond | 0.39044 | 0.40283 | 0.41797 | 1.6 | 0.96 -Kspace | 22.375 | 22.9 | 23.363 | 7.4 | 54.63 -Neigh | 0.55622 | 0.55652 | 0.55674 | 0.0 | 1.33 -Comm | 0.23496 | 0.23626 | 0.23839 | 0.3 | 0.56 -Output | 0.007792 | 0.0096738 | 0.013204 | 2.1 | 0.02 -Modify | 11.399 | 11.406 | 11.414 | 0.2 | 27.21 -Other | | 0.02042 | | | 0.05 +Pair | 6.2146 | 6.7951 | 7.2455 | 14.2 | 15.19 +Bond | 0.40987 | 0.42168 | 0.43298 | 1.5 | 0.94 +Kspace | 24.004 | 24.445 | 25.016 | 7.4 | 54.65 +Neigh | 0.58942 | 0.58983 | 0.5902 | 0.0 | 1.32 +Comm | 0.25569 | 0.25754 | 0.25878 | 0.2 | 0.58 +Output | 0.009785 | 0.011768 | 0.01571 | 2.1 | 0.03 +Modify | 12.178 | 12.188 | 12.197 | 0.2 | 27.25 +Other | | 0.02401 | | | 0.05 Nlocal: 700.000 ave 712 max 682 min Histogram: 1 0 0 0 0 0 0 2 0 1 @@ -386,37 +386,4 @@ Ave special neighs/atom = 11.714286 Neighbor list builds = 115 Dangerous builds = 0 -write_data data-eq.eg.lmp -System init for write_data ... -PPPM initialization ... - using 12-bit tables for long-range coulomb (../kspace.cpp:328) - G vector (1/distance) = 0.41619437 - grid = 54 54 54 - stencil order = 5 - estimated absolute RMS force accuracy = 0.0035032687 - estimated relative force accuracy = 1.054999e-05 - using double precision KISS FFT - 3d grid and FFT values/proc = 81648 40824 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 10 - ghost atom cutoff = 10 - binsize = 5, bins = 7 7 7 - 3 neighbor lists, perpetual/occasional/extra = 3 0 0 - (1) pair lj/cut/coul/long, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard - (2) pair thole, perpetual, skip from (1) - attributes: half, newton on - pair build: skip - stencil: none - bin: none - (3) pair coul/tt, perpetual, skip from (1) - attributes: half, newton on - pair build: skip - stencil: none - bin: none -Total wall time: 0:00:41 +Total wall time: 0:00:44 diff --git a/src/USER-DRUDE/pair_coul_tt.cpp b/src/USER-DRUDE/pair_coul_tt.cpp index dee0d381e4..5aa57c29e6 100644 --- a/src/USER-DRUDE/pair_coul_tt.cpp +++ b/src/USER-DRUDE/pair_coul_tt.cpp @@ -13,20 +13,20 @@ #include "pair_coul_tt.h" -#include -#include #include "atom.h" #include "comm.h" +#include "domain.h" +#include "fix.h" +#include "fix_drude.h" #include "force.h" #include "neighbor.h" #include "neigh_list.h" #include "memory.h" +#include "modify.h" #include "error.h" -#include "fix.h" -#include "fix_drude.h" -#include "domain.h" -#include "modify.h" +#include +#include using namespace LAMMPS_NS; @@ -286,7 +286,7 @@ void PairCoulTT::init_style() error->all(FLERR,"Pair style coul/tt requires atom attribute q"); int ifix; for (ifix = 0; ifix < modify->nfix; ifix++) - if (strcmp(modify->fix[ifix]->style,"drude") == 0) break; + if (utils::strmatch(modify->fix[ifix]->style,"drude") == 0 break; if (ifix == modify->nfix) error->all(FLERR, "Pair coul/tt requires fix drude"); fix_drude = (FixDrude *) modify->fix[ifix]; @@ -438,9 +438,9 @@ double PairCoulTT::single(int i, int j, int itype, int jtype, void *PairCoulTT::extract(const char *str, int &dim) { dim = 2; - if (strcmp(str,"scale") == 0) return (void *) scale; - if (strcmp(str,"b") == 0) return (void *) b; - if (strcmp(str,"c") == 0) return (void *) c; - if (strcmp(str,"ntt") == 0) return (void *) ntt; + if (utils::strmatch(str,"scale") == 0) return (void *) scale; + if (utils::strmatch(str,"b") == 0) return (void *) b; + if (utils::strmatch(str,"c") == 0) return (void *) c; + if (utils::strmatch(str,"ntt") == 0) return (void *) ntt; return nullptr; } diff --git a/src/USER-DRUDE/pair_coul_tt.h b/src/USER-DRUDE/pair_coul_tt.h index c275b6e54b..f1c250f8b4 100644 --- a/src/USER-DRUDE/pair_coul_tt.h +++ b/src/USER-DRUDE/pair_coul_tt.h @@ -21,7 +21,6 @@ PairStyle(coul/tt,PairCoulTT) #define LMP_PAIR_COULTT_H #include "pair.h" -#include namespace LAMMPS_NS { From e1b00e96ed9bc7f964ce055e461478f0443887b5 Mon Sep 17 00:00:00 2001 From: Kateryna Goloviznina Date: Fri, 25 Sep 2020 17:10:54 +0200 Subject: [PATCH 008/182] bug fixed --- src/USER-DRUDE/pair_coul_tt.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/USER-DRUDE/pair_coul_tt.cpp b/src/USER-DRUDE/pair_coul_tt.cpp index 5aa57c29e6..d9c0589754 100644 --- a/src/USER-DRUDE/pair_coul_tt.cpp +++ b/src/USER-DRUDE/pair_coul_tt.cpp @@ -286,7 +286,7 @@ void PairCoulTT::init_style() error->all(FLERR,"Pair style coul/tt requires atom attribute q"); int ifix; for (ifix = 0; ifix < modify->nfix; ifix++) - if (utils::strmatch(modify->fix[ifix]->style,"drude") == 0 break; + if (utils::strmatch(modify->fix[ifix]->style,"drude") == 0) break; if (ifix == modify->nfix) error->all(FLERR, "Pair coul/tt requires fix drude"); fix_drude = (FixDrude *) modify->fix[ifix]; From 26ad6640796aecd54b7a27cdd01207c4abd0cd09 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 25 Sep 2020 13:44:28 -0400 Subject: [PATCH 009/182] Avoid string duplication and remove memory leak --- src/input.cpp | 5 ++--- unittest/commands/test_simple_commands.cpp | 26 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/input.cpp b/src/input.cpp index 78086906c5..420f840a14 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -1234,12 +1234,11 @@ void Input::shell() } else if (strcmp(arg[0],"putenv") == 0) { if (narg < 2) error->all(FLERR,"Illegal shell putenv command"); for (int i = 1; i < narg; i++) { - char *ptr = strdup(arg[i]); rv = 0; #ifdef _WIN32 - if (ptr != nullptr) rv = _putenv(ptr); + if (arg[i]) rv = _putenv(arg[i]); #else - if (ptr != nullptr) rv = putenv(ptr); + if (arg[i]) rv = putenv(arg[i]); #endif rv = (rv < 0) ? errno : 0; MPI_Reduce(&rv,&err,1,MPI_INT,MPI_MAX,0,world); diff --git a/unittest/commands/test_simple_commands.cpp b/unittest/commands/test_simple_commands.cpp index 0c6043ea84..f13ae62a73 100644 --- a/unittest/commands/test_simple_commands.cpp +++ b/unittest/commands/test_simple_commands.cpp @@ -312,6 +312,32 @@ TEST_F(SimpleCommandsTest, Units) TEST_FAILURE(".*ERROR: Illegal units command.*", lmp->input->one("units unknown");); } + +TEST_F(SimpleCommandsTest, Shell) +{ + if (!verbose) ::testing::internal::CaptureStdout(); + lmp->input->one("shell putenv TEST_VARIABLE=simpletest"); + if (!verbose) ::testing::internal::GetCapturedStdout(); + + char * test_var = getenv("TEST_VARIABLE"); + ASSERT_NE(test_var, nullptr); + ASSERT_THAT(test_var, StrEq("simpletest")); + + if (!verbose) ::testing::internal::CaptureStdout(); + lmp->input->one("shell putenv TEST_VARIABLE=simpletest"); + lmp->input->one("shell putenv TEST_VARIABLE2=simpletest2 OTHER_VARIABLE=2"); + if (!verbose) ::testing::internal::GetCapturedStdout(); + + char * test_var2 = getenv("TEST_VARIABLE2"); + char * other_var = getenv("OTHER_VARIABLE"); + + ASSERT_NE(test_var2, nullptr); + ASSERT_THAT(test_var2, StrEq("simpletest2")); + + ASSERT_NE(other_var, nullptr); + ASSERT_THAT(other_var, StrEq("2")); +} + } // namespace LAMMPS_NS int main(int argc, char **argv) From 089e55cc37ad33de5edaf39d4d5b4920f4cee2ac Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 13:48:05 -0400 Subject: [PATCH 010/182] fix typo --- doc/src/pair_resquared.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/pair_resquared.rst b/doc/src/pair_resquared.rst index 448af410db..d34588682c 100644 --- a/doc/src/pair_resquared.rst +++ b/doc/src/pair_resquared.rst @@ -231,4 +231,4 @@ none .. _Babadi: -**(Berardi)** Babadi, Ejtehadi, Everaers, J Comp Phys, 219, 770-779 (2006). +**(Babadi)** Babadi, Ejtehadi, Everaers, J Comp Phys, 219, 770-779 (2006). From 9a523fef651992f08276db019c985b1370a044ab Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 13:48:22 -0400 Subject: [PATCH 011/182] add bibliography --- doc/src/Bibliography.rst | 1394 ++++++++++++++++++++++++++++++++++++++ doc/src/Manual.rst | 1 + 2 files changed, 1395 insertions(+) create mode 100644 doc/src/Bibliography.rst diff --git a/doc/src/Bibliography.rst b/doc/src/Bibliography.rst new file mode 100644 index 0000000000..39e93b4e90 --- /dev/null +++ b/doc/src/Bibliography.rst @@ -0,0 +1,1394 @@ +Bibliography +************ + +**(Ackland)** + Ackland, Jones, Phys Rev B, 73, 054104 (2006). + +**(Ackland1)** + Ackland, Condensed Matter (2005). + +**(Ackland2)** + Ackland, Mendelev, Srolovitz, Han and Barashev, Journal of Physics: Condensed Matter, 16, S2629 (2004). + +**(Addington)** + Addington, Long, Gubbins, J Chem Phys, 149, 084109 (2018). + +**(Adhikari et al.)** + Adhikari, R., Stratford, K., Cates, M. E., and Wagner, A. J., Fluctuating lattice Boltzmann, Europhys. Lett. 71 (2005) 473-479. + +**(Afshar)** + Afshar, F. Schmid, A. Pishevar, S. Worley, Comput Phys Comm, 184, 1119-1128 (2013). + +**(Agnolin and Roux 2007)** + Agnolin, I. & Roux, J-N. (2007). Internal states of model isotropic granular packings. I. Assembling process, geometry, and contact networks. Phys. Rev. E, 76, 061302. + +**(Aktulga)** + Aktulga, Fogarty, Pandit, Grama, Parallel Computing, 38, 245-259 (2012). + +**(Albe)** + J.\ Nord, K. Albe, P. Erhart, and K. Nordlund, J. Phys.: Condens. Matter, 15, 5649(2003). + +**(Albe)** + K.\ Albe, K. Nordlund, J. Nord, and A. Kuronen, Phys. Rev. B, 66, 035205 (2002). + +**(Allen)** + Allen and Germano, Mol Phys 104, 3225-3235 (2006). + +**(Allen)** + Allen and Tildesley, Computer Simulation of Liquids, Clarendon Press, Oxford, 1987. + +**(AllenTildesley)** + Allen and Tildesley, Computer Simulation of Liquids, Oxford University Press (1987) + +**(Allinger)** + Allinger, Yuh, Lii, JACS, 111(23), 8551-8566 (1989), + +**(Andersen)** + H.\ Andersen, J of Comp Phys, 52, 24-34 (1983). + +**(Anderson)** + Anderson, Mukherjee, Critchley, Ziegler, and Lipton "POEMS: Parallelizable Open-source Efficient Multibody Software ", Engineering With Computers (2006). + +**(Avendano)** + C.\ Avendano, T. Lafitte, A. Galindo, C. S. Adjiman, G. Jackson, E. Muller, J Phys Chem B, 115, 11154 (2011). + +**(Axilrod)** + Axilrod and Teller, J Chem Phys, 11, 299 (1943); Muto, Nippon Sugaku-Buturigakkwaishi 17, 629 (1943). + +**(Babadi)** + Babadi, Ejtehadi, Everaers, J Comp Phys, 219, 770-779 (2006). + +**(Babadi)** + Babadi and Ejtehadi, EPL, 77 (2007) 23002. + +**(Baczewski)** + A.D. Baczewski and S.D. Bond, J. Chem. Phys. 139, 044107 (2013). + +**(Bal)** + K.\ M Bal and E. C. Neyts, J. Chem. Phys. 141, 204104 (2014). + +**(Ball)** + Ball and Melrose, Physica A, 247, 444-472 (1997). + +**(Ballenegger)** + Ballenegger, Arnold, Cerda, J Chem Phys, 131, 094107 (2009). + +**(Banna)** + Volkov, Banna, Comp. Mater. Sci. 176, 109410 (2020). + +**(Barrat)** + Barrat and Rodney, J. Stat. Phys, 144, 679 (2011). + +**(Barrett)** + Barrett, Tschopp, El Kadiri, Scripta Mat. 66, p.666 (2012). + +**(Bartok)** + Bartok, Payne, Risi, Csanyi, Phys Rev Lett, 104, 136403 (2010). + +**(Bartok2010)** + Bartok, Payne, Risi, Csanyi, Phys Rev Lett, 104, 136403 (2010). + +**(Bartok_2010)** + AP Bartok, MC Payne, R Kondor, and G Csanyi, Physical Review Letters 104, 136403 (2010). + +**(Bartok_PhD)** + A Bartok-Partay, PhD Thesis, University of Cambridge, (2010). + +**(Baskes)** + Baskes, Phys Rev B, 46, 2727-2742 (1992). + +**(Beck)** + Beck, Molecular Physics, 14, 311 (1968). + +**(Bennet)** + Bennet, J Comput Phys, 22, 245 (1976) + +**(Berardi)** + Berardi, Fava, Zannoni, Chem Phys Lett, 297, 8-14 (1998). Berardi, Muccioli, Zannoni, J Chem Phys, 128, 024905 (2008). + +**(Berendsen)** + Berendsen, Grigera, Straatsma, J Phys Chem, 91, 6269-6271 (1987). + +**(Berendsen)** + Berendsen, Postma, van Gunsteren, DiNola, Haak, J Chem Phys, 81, 3684 (1984). + +**(Bessarab)** + Bessarab, Uzdin, Jonsson, Comp Phys Comm, 196, 335-347 (2015). + +**(Beutler)** + Beutler, Mark, van Schaik, Gerber, van Gunsteren, Chem Phys Lett, 222, 529 (1994). + +**(Bialke)** + J.\ Bialke, T. Speck, and H Loewen, Phys. Rev. Lett. 108, 168301, 2012. + +**(Bird)** + G.\ A. Bird, "Molecular Gas Dynamics and the Direct Simulation of Gas Flows" (1994). + +**(Bitzek)** + Bitzek, Koskinen, Gahler, Moseler, Gumbsch, Phys Rev Lett, 97, 170201 (2006). + +**(Bond)** + Bond and Leimkuhler, SIAM J Sci Comput, 30, p 134 (2007). + +**(Boone)** + Boone, Babaei, Wilmer, J Chem Theory Comput, 15, 5579--5587 (2019). + +**(BoreschKarplus)** + Boresch and Karplus, J Phys Chem A, 103, 103 (1999) + +**(Botu1)** + V.\ Botu and R. Ramprasad, Int. J. Quant. Chem., 115(16), 1074 (2015). + +**(Botu2)** + V.\ Botu and R. Ramprasad, Phys. Rev. B, 92(9), 094306 (2015). + +**(Botu3)** + V.\ Botu, R. Batra, J. Chapman and R. Ramprasad, https://arxiv.org/abs/1610.02098 (2016). + +**(Branicio2009)** + Branicio, Rino, Gan and Tsuzuki, J. Phys Condensed Matter 21 (2009) 095002 + +**(Brennan)** + Brennan, J Chem Phys Lett, 5, 2144-2149 (2014). + +**(Brenner)** + Brenner, Shenderova, Harrison, Stuart, Ni, Sinnott, J Physics: Condensed Matter, 14, 783-802 (2002). + +**(Brilliantov)** + Brilliantov, Spahn, Hertzsch, Poschel, Phys Rev E, 53, p 5382-5392 (1996). + +**(Brooks)** + Brooks, Brooks, MacKerell Jr., J Comput Chem, 30, 1545 (2009). + +**(Brooks)** + Brooks, et al, J Comput Chem, 30, 1545 (2009). + +**(Brown)** + Brown et al. International Tables for Crystallography Volume C: Mathematical and Chemical Tables, 554-95 (2004). + +**(Buck)** + Buck, Bouguet-Bonnet, Pastor, MacKerell Jr., Biophys J, 90, L36 (2006). + +**(Bussi)** + G.\ Bussi, M. Parrinello, Phs. Rev. E 75, 056707 (2007) + +**(Bussi1)** + Bussi, Donadio and Parrinello, J. Chem. Phys. 126, 014101(2007) + +**(Bussi2)** + Bussi and Parrinello, Phys. Rev. E 75, 056707 (2007) + +**(COMB)** + T.-R. Shan, B. D. Devine, T. W. Kemper, S. B. Sinnott, and S. R. Phillpot, Phys. Rev. B 81, 125328 (2010) + +**(COMB3)** + T.\ Liang, T.-R. Shan, Y.-T. Cheng, B. D. Devine, M. Noordhoek, Y. Li, Z. Lu, S. R. Phillpot, and S. B. Sinnott, Mat. Sci. & Eng: R 74, 255-279 (2013). + +**(COMB_1)** + J.\ Yu, S. B. Sinnott, S. R. Phillpot, Phys Rev B, 75, 085311 (2007), + +**(Calhoun)** + A.\ Calhoun, M. Pavese, G. Voth, Chem Phys Letters, 262, 415 (1996). + +**(Campana)** + C.\ Campana and M. H. Muser, *Practical Green's function approach to the simulation of elastic semi-infinite solids*\ , `Phys. Rev. B [74], 075420 (2006) `_ + +**(Cao1)** + J.\ Cao and B. Berne, J Chem Phys, 99, 2902 (1993). + +**(Cao2)** + J.\ Cao and G. Voth, J Chem Phys, 100, 5093 (1994). + +**(Caro)** + A Caro, DA Crowson, M Caro; Phys Rev Lett, 95, 075702 (2005) + +**(CasP)** + CasP webpage: https://www.helmholtz-berlin.de/people/gregor-schiwietz/casp_en.html + +**(Cawkwell2012)** + A.\ M. N. Niklasson, M. J. Cawkwell, Phys. Rev. B, 86 (17), 174308 (2012). + +**(Cercignani)** + C.\ Cercignani and M. Lampis. Trans. Theory Stat. Phys. 1, 2, 101 (1971). + +**(Cerda)** + Cerda, Ballenegger, Lenz, Holm, J Chem Phys 129, 234104 (2008) + +**(Ceriotti)** + Ceriotti, Bussi and Parrinello, J Chem Theory Comput 6, 1170-80 (2010) + +**(Ceriotti2)** + Ceriotti, Bussi and Parrinello, Phys Rev Lett 103, 030603 (2009) + +**(Cerutti)** + Cerutti, Duke, Darden, Lybrand, Journal of Chemical Theory and Computation 5, 2322 (2009) + +**(Chen)** + J Chen, D Tzou and J Beraun, Int. J. Heat Mass Transfer, 49, 307-316 (2006). + +**(Chenoweth_2008)** + Chenoweth, van Duin and Goddard, Journal of Physical Chemistry A, 112, 1040-1053 (2008). + +**(Clarke)** + Clarke and Smith, J Chem Phys, 84, 2290 (1986). + +**(Coleman)** + Coleman, Spearot, Capolungo, MSMSE, 21, 055020 (2013). + +**(Colliex)** + Colliex et al. International Tables for Crystallography Volume C: Mathematical and Chemical Tables, 249-429 (2004). + +**(Cooke)** + "Cooke, Kremer and Deserno, Phys. Rev. E, 72, 011506 (2005)" + +**(Cornell)** + Cornell, Cieplak, Bayly, Gould, Merz, Ferguson, Spellmeyer, Fox, Caldwell, Kollman, JACS 117, 5179-5197 (1995). + +**(Cusentino)** + Cusentino, Wood, and Thompson, J Phys Chem A, xxx, xxxxx, (2020) + +**(Daivis and Todd)** + Daivis and Todd, J Chem Phys, 124, 194103 (2006). + +**(Daivis and Todd)** + Daivis and Todd, Nonequilibrium Molecular Dynamics (book), Cambridge University Press, https://doi.org/10.1017/9781139017848, (2017). + +**(Dammak)** + Dammak, Chalopin, Laroche, Hayoun, and Greffet, Phys Rev Lett, 103, 190601 (2009). + +**(Darden)** + Darden, York, Pedersen, J Chem Phys, 98, 10089 (1993). + +**(Davidchack)** + R.L Davidchack, T.E. Ouldridge, and M.V. Tretyakov. J. Chem. Phys. 142, 144114 (2015). + +**(Daw1)** + Daw, Baskes, Phys Rev Lett, 50, 1285 (1983). Daw, Baskes, Phys Rev B, 29, 6443 (1984). + +**(Daw2)** + M.\ S. Daw, and M. I. Baskes, Phys. Rev. B, 29, 6443 (1984). + +**(DeVane)** + Shinoda, DeVane, Klein, Soft Matter, 4, 2453-2462 (2008). + +**(Deserno)** + Deserno and Holm, J Chem Phys, 109, 7694 (1998). + +**(Destree)** + M.\ Destree, F. Laupretre, A. Lyulin, and J.-P. Ryckaert, J Chem Phys, 112, 9632 (2000). + +**(Dobson)** + Dobson, J Chem Phys, 141, 184103 (2014). + +**(Duffy)** + D M Duffy and A M Rutherford, J. Phys.: Condens. Matter, 19, 016207-016218 (2007). + +**(Dullweber)** + Dullweber, Leimkuhler and McLachlan, J Chem Phys, 107, 5840 (1997). + +**(Dunn1)** + Dunn and Noid, J Chem Phys, 143, 243148 (2015). + +**(Dunn2)** + Dunn, Lebold, DeLyser, Rudzinski, and Noid, J. Phys. Chem. B, 122, 3363 (2018). + +**(Dunweg)** + Dunweg and Paul, Int J of Modern Physics C, 2, 817-27 (1991). + +**(EDIP)** + J F Justo et al, Phys Rev B 58, 2539 (1998). + +**(Eike)** + Eike and Maginn, Journal of Chemical Physics, 124, 164503 (2006). + +**(Elliott)** + Elliott, Tadmor and Bernstein, `https://openkim.org/kim-api `_ (2011) doi: `https://doi.org/10.25950/FF8F563A `_ + +**(Elstner)** + M.\ Elstner, D. Poresag, G. Jungnickel, J. Elsner, M. Haugk, T. Frauenheim, S. Suhai, and G. Seifert, Phys. Rev. B, 58, 7260 (1998). + +**(Erdmann)** + U.\ Erdmann , W. Ebeling, L. Schimansky-Geier, and F. Schweitzer, Eur. Phys. J. B 15, 105-113, 2000. + +**(Espanol and Revenga)** + Espanol, Revenga, Physical Review E, 67, 026705 (2003). + +**(Espanol1997)** + Espanol, Europhys Lett, 40(6): 631-636 (1997). DOI: 10.1209/epl/i1997-00515-8 + +**(Evans and Morriss)** + Evans and Morriss, Phys Rev A, 30, 1528 (1984). + +**(Evans)** + Evans and Morriss, Phys. Rev. Lett. 56, 2172 (1986). + +**(Everaers)** + Everaers and Ejtehadi, Phys Rev E, 67, 041710 (2003). + +**(Faken)** + Faken, Jonsson, Comput Mater Sci, 2, 279 (1994). + +**(Fath)** + Fath, Hochbruck, Singh, J Comp Phys, 333, 180-198 (2017). + +**(Fennell)** + C.\ J. Fennell, J. D. Gezelter, J Chem Phys, 124, 234104 (2006). + +**(Feynman)** + R.\ Feynman and A. Hibbs, Chapter 7, Quantum Mechanics and Path Integrals, McGraw-Hill, New York (1965). + +**(Fichthorn)** + Fichthorn, Balankura, Qi, CrystEngComm, 18(29), 5410-5417 (2016). + +**(Fily)** + Y.\ Fily and M.C. Marchetti, Phys. Rev. Lett. 108, 235702, 2012. Default + +**(Fincham)** + Fincham, Mackrodt and Mitchell, J Phys Condensed Matter, 6, 393-404 (1994). + +**(Finnis1)** + Finnis, Sinclair, Philosophical Magazine A, 50, 45 (1984). + +**(Finnis2)** + M.\ W. Finnis, A. T. Paxton, M. Methfessel, and M. van Schilfgarde, Phys. Rev. Lett., 81, 5149 (1998). + +**(Fiorin)** + Fiorin, Klein, Henin, Mol. Phys., DOI:10.1080/00268976.2013.813594 + +**(Fox)** + Fox, O'Keefe, Tabbernor, Acta Crystallogr. A, 45, 786-93 (1989). + +**(Fraige)** + F.\ Y. Fraige, P. A. Langston, A. J. Matchett, J. Dodds, Particuology, 6, 455 (2008). + +**(Freitas)** + Freitas, Asta, and de Koning, Computational Materials Science, 112, 333 (2016). + +**(Frenkel)** + Frenkel and Smit, Understanding Molecular Simulation, Academic Press, London, 2002. + +**(GLE4MD)** + `http://gle4md.org/ `_ + +**(Gao)** + Gao and Weber, Nuclear Instruments and Methods in Physics Research B 191 (2012) 504. + +**(Gissinger)** + Gissinger, Jensen and Wise, Polymer, 128, 211 (2017). + +**(Glosli)** + Glosli, unpublished, 2005. Streitz, Glosli, Patel, Chan, Yates, de Supinski, Sexton and Gunnels, Journal of Physics: Conference Series, 46, 254 (2006). + +**(Goldman1)** + Goldman, Reed and Fried, J. Chem. Phys. 131, 204103 (2009) + +**(Goldman2)** + Goldman, Srinivasan, Hamel, Fried, Gaus, and Elstner, J. Phys. Chem. C, 117, 7885 (2013). + +**(Grime)** + Grime and Voth, to appear in J Chem Theory & Computation (2014). + +**(Grimme)** + Grimme, J Comput Chem, 27(15), 1787-1799 (2006). + +**(Gronbech-Jensen1)** + Gronbech Jensen and Gronbech-Jensen, Mol Phys, 117, 2511 (2019) + +**(Gronbech-Jensen2)** + Gronbech-Jensen and Farago, Mol Phys, 111, 983 (2013) + +**(Gronbech-Jensen3)** + Hayre, and Farago, Comp Phys Comm, 185, 524 (2014) + +**(Groot)** + Groot and Warren, J Chem Phys, 107: 4423-4435 (1997). DOI: 10.1063/1.474784 + +**(Guenole)** + Guenole, Noehring, Vaid, Houlle, Xie, Prakash, Bitzek, Comput Mater Sci, 175, 109584 (2020). + +**(Gullet)** + Gullet, Wagner, Slepoy, SANDIA Report 2003-8782 (2003). + +**(Guo)** + Guo and Thirumalai, Journal of Molecular Biology, 263, 323-43 (1996). + +**(Hardy)** + David Hardy thesis: Multilevel Summation for the Fast Evaluation of Forces for the Simulation of Biomolecules, University of Illinois at Urbana-Champaign, (2006). + +**(Hardy2)** + Hardy, Stone, Schulten, Parallel Computing, 35, 164-177 (2009). + +**(Hecht)** + Hecht, Harting, Ihle, Herrmann, Phys Rev E, 72, 011408 (2005). + +**(Henkelman1)** + Henkelman and Jonsson, J Chem Phys, 113, 9978-9985 (2000). + +**(Henkelman2)** + Henkelman, Uberuaga, Jonsson, J Chem Phys, 113, 9901-9904 (2000). + +**(Henkes)** + Henkes, S, Fily, Y., and Marchetti, M. C. Phys. Rev. E, 84, 040301(R), 2011. + +**(Henrich)** + O.\ Henrich, Y. A. Gutierrez-Fosado, T. Curk, T. E. Ouldridge, Eur. Phys. J. E 41, 57 (2018). + +**(Hess)** + Hess, B. The Journal of Chemical Physics 2002, 116 (1), 209-217. + +**(Heyes)** + Heyes, Phys Rev B, 49, 755 (1994). + +**(Hijazi)** + M.\ Hijazi, D. M. Wilkins, M. Ceriotti, J. Chem. Phys. 148, 184109 (2018) + +**(Hockney)** + Hockney and Eastwood, Computer Simulation Using Particles, Adam Hilger, NY (1989). + +**(Holian)** + Holian and Ravelo, Phys Rev B, 51, 11275 (1995). + +**(Hone)** + T.\ Hone, P. Rossky, G. Voth, J Chem Phys, 124, 154103 (2006). + +**(Hoover)** + Hoover, Phys Rev A, 31, 1695 (1985). + +**(Hummer)** + Hummer, Gronbech-Jensen, Neumann, J Chem Phys, 109, 2791 (1998) + +**(Hunt)** + Hunt, Mol Simul, 42, 347 (2016). + +**(IPI)** + `http://epfl-cosmo.github.io/gle4md/index.html?page=ipi `_ + +**(IPI-CPC)** + Ceriotti, More and Manolopoulos, Comp Phys Comm, 185, 1019-1026 (2014). + +**(Ikeshoji)** + Ikeshoji and Hafskjold, Molecular Physics, 81, 251-261 (1994). + +**(In 't Veld)** + In 't Veld, Ismail, Grest, J Chem Phys (accepted) (2007). + +**(Isele-Holder)** + Isele-Holder, Mitchell, Ismail, J Chem Phys, 137, 174107 (2012). + +**(Isele-Holder2)** + Isele-Holder, Mitchell, Hammond, Kohlmeyer, Ismail, J Chem Theory Comput 9, 5412 (2013). + +**(Ismail)** + Ismail, Tsige, In 't Veld, Grest, Molecular Physics (accepted) (2007). + +**(Ivanov)** + Ivanov, Uzdin, Jonsson. arXiv preprint arXiv:1904.02669, (2019). + +**(Izrailev)** + Izrailev, Stepaniants, Isralewitz, Kosztin, Lu, Molnar, Wriggers, Schulten. Computational Molecular Dynamics: Challenges, Methods, Ideas, volume 4 of Lecture Notes in Computational Science and + +**(Izvekov)** + Izvekov, Voth, J Chem Phys 123, 134105 (2005). + +**(Janssens)** + Janssens, Olmsted, Holm, Foiles, Plimpton, Derlet, Nature Materials, 5, 124-127 (2006). + +**(Jaramillo-Botero)** + Jaramillo-Botero, Su, Qi, Goddard, Large-scale, Long-term Non-adiabatic Electron Molecular Dynamics for Describing Material Properties and Phenomena in Extreme Environments, J Comp + +**(Jarzynski)** + Jarzynski, Phys. Rev. Lett. 78, 2690 (1997) + +**(Jiang)** + Jiang, Hardy, Phillips, MacKerell, Schulten, and Roux, J Phys Chem Lett, 2, 87-92 (2011). + +**(Johnson et al, 1971)** + Johnson, K. L., Kendall, K., & Roberts, A. D. (1971). Surface energy and the contact of elastic solids. Proc. R. Soc. Lond. A, 324(1558), 301-313. + +**(Jones)** + Jones, RE; Templeton, JA; Wagner, GJ; Olmsted, D; Modine, JA, "Electron transport enhanced molecular dynamics for metals and semi-metals." International Journal for Numerical Methods in Engineering (2010), 83:940. + +**(Jonsson)** + Jonsson, Mills and Jacobsen, in Classical and Quantum Dynamics in Condensed Phase Simulations, edited by Berne, Ciccotti, and Coker World Scientific, Singapore, 1998, p 385. + +**(Jorgensen)** + Jorgensen, Chandrasekhar, Madura, Impey, Klein, J Chem Phys, 79, 926 (1983). + +**(Jusufi)** + Jusufi, Hynninen, and Panagiotopoulos, J Phys Chem B, 112, 13783 (2008). + +**(Kamberaj)** + Kamberaj, Low, Neal, J Chem Phys, 122, 224114 (2005). + +**(Katsura)** + H.\ Katsura, N. Nagaosa, A.V. Balatsky. Phys. Rev. Lett., 95(5), 057205. (2005) + +**(Kelchner)** + Kelchner, Plimpton, Hamilton, Phys Rev B, 58, 11085 (1998). + +**(Khrapak)** + Khrapak, Chaudhuri, and Morfill, J Chem Phys, 134, 054120 (2011). + +**(Kim)** + Kim, Keyes, Straub, J Chem. Phys, 132, 224107 (2010). + +**(Klapp)** + Klapp, Schoen, J Chem Phys, 117, 8050 (2002). + +**(Kolafa)** + Kolafa and Perram, Molecular Simulation, 9, 351 (1992). + +**(Kolmogorov)** + A.\ N. Kolmogorov, V. H. Crespi, Phys. Rev. B 71, 235415 (2005). + +**(Kong)** + L.T. Kong, G. Bartels, C. Campana, C. Denniston, and Martin H. Muser, `Computer Physics Communications [180](6):1004-1010 (2009). `_ + +**(Kong2011)** + L.T. Kong, `Computer Physics Communications [182](10):2201-2207, (2011). `_ + +**(Kremer)** + Kremer, Grest, J Chem Phys, 92, 5057 (1990). + +**(Kuhn and Bagi, 2005)** + Kuhn, M. R., & Bagi, K. (2004). Contact rolling and deformation in granular media. International journal of solids and structures, 41(21), 5793-5820. + +**(Kumagai)** + T.\ Kumagai, S. Izumi, S. Hara, S. Sakai, Comp. Mat. Science, 39, 457 (2007). + +**(Kumar)** + Kumar and Higdon, Phys Rev E, 82, 051401 (2010). + +**(Kumar)** + Kumar and Skinner, J. Phys. Chem. B, 112, 8311 (2008) + +**(Lamoureux and Roux)** + G.\ Lamoureux, B. Roux, J. Chem. Phys 119, 3025 (2003) + +**(Lamoureux)** + Lamoureux and Roux, J Chem Phys, 119, 3025-3039 (2003). + +**(Larentzos)** + J.P. Larentzos, J.K. Brennan, J.D. Moore, and W.D. Mattson, "LAMMPS Implementation of Constant Energy Dissipative Particle Dynamics (DPD-E)", ARL-TR-6863, U.S. Army Research + +**(Larentzos1)** + J.P. Larentzos, J.K. Brennan, J.D. Moore, M. Lisal and W.D. Mattson, "Parallel Implementation of Isothermal and Isoenergetic Dissipative Particle Dynamics Using Shardlow-Like Splitting + +**(Larentzos2)** + J.P. Larentzos, J.K. Brennan, J.D. Moore, and W.D. Mattson, "LAMMPS Implementation of Constant Energy Dissipative Particle Dynamics (DPD-E)", ARL-TR-6863, U.S. Army Research + +**(Larsen)** + Larsen, Schmidt, Schiotz, Modelling Simul Mater Sci Eng, 24, 055007 (2016). + +**(Lebedeva et al.)** + I.\ V. Lebedeva, A. A. Knizhnik, A. M. Popov, Y. E. Lozovik, B. V. Potapkin, Phys. Rev. B, 84, 245437 (2011) + +**(Lechman)** + Lechman, et al, in preparation (2010). + +**(Lee)** + Lee, Baskes, Phys. Rev. B, 62, 8564-8567 (2000). + +**(Lee2)** + Lee, Baskes, Kim, Cho. Phys. Rev. B, 64, 184102 (2001). + +**(Lenart)** + Lenart , Jusufi, and Panagiotopoulos, J Chem Phys, 126, 044509 (2007). + +**(Lenosky)** + Lenosky, Sadigh, Alonso, Bulatov, de la Rubia, Kim, Voter, Kress, Modelling Simulation Materials Science Engineering, 8, 825 (2000). + +**(Leven1)** + I.\ Leven, I. Azuri, L. Kronik and O. Hod, J. Chem. Phys. 140, 104106 (2014). + +**(Leven2)** + I.\ Leven et al, J. Chem.Theory Comput. 12, 2896-905 (2016). + +**(Li2013_POF)** + Li, Hu, Wang, Ma, Zhou, Phys Fluids, 25: 072103 (2013). DOI: 10.1063/1.4812366. + +**(Li2014_JCP)** + Li, Tang, Lei, Caswell, Karniadakis, J Comput Phys, 265: 113-127 (2014). DOI: 10.1016/j.jcp.2014.02.003. + +**(Li2015_CC)** + Li, Tang, Li, Karniadakis, Chem Commun, 51: 11038-11040 (2015). DOI: 10.1039/C5CC01684C. + +**(Li2015_JCP)** + Li, Yazdani, Tartakovsky, Karniadakis, J Chem Phys, 143: 014101 (2015). DOI: 10.1063/1.4923254. + +**(Lisal)** + M.\ Lisal, J.K. Brennan, J. Bonet Avalos, "Dissipative particle dynamics at isothermal, isobaric, isoenergetic, and isoenthalpic conditions using Shardlow-like splitting algorithms.", + +**(Liu1)** + L.\ Liu, Y. Liu, S. V. Zybin, H. Sun and W. A. Goddard, Journal of Physical Chemistry A, 115, 11016-11022 (2011). + +**(Liu2)** + Liu, Bryantsev, Diallo, Goddard III, J. Am. Chem. Soc 131 (8) 2798 (2009) + +**(Los and Fasolino)** + J.\ H. Los and A. Fasolino, Phys. Rev. B 68, 024107 (2003). + +**(Los2017)** + J.\ H. Los et al. "Extended Tersoff potential for boron nitride: Energetics and elastic properties of pristine and defective h-BN", Phys. Rev. B 96 (184108), 2017. + +**(Luding, 2008)** + Luding, S. (2008). Cohesive, frictional powders: contact models for tension. Granular matter, 10(4), 235. + +**(Maaravi)** + T.\ Maaravi et al, J. Phys. Chem. C 121, 22826-22835 (2017). + +**(MacKerell)** + MacKerell, Bashford, Bellott, Dunbrack, Evanseck, Field, Fischer, Gao, Guo, Ha, et al, J Phys Chem B, 102, 3586 (1998). + +**(Mackay and Denniston)** + Mackay, F. E., and Denniston, C., Coupling MD particles to a lattice-Boltzmann fluid through the use of conservative forces, J. Comput. Phys. 237 (2013) 289-298. + +**(Mackay et al.)** + Mackay, F. E., Ollila, S.T.T., and Denniston, C., Hydrodynamic Forces Implemented into LAMMPS through a lattice-Boltzmann fluid, Computer Physics Communications 184 (2013) 2021-2031. + +**(Magda)** + Magda, Tirrell, Davis, J Chem Phys, 83, 1888-1901 (1985); erratum in JCP 84, 2901 (1986). + +**(Maginn)** + Kelkar, Rafferty, Maginn, Siepmann, Fluid Phase Equilibria, 260, 218-231 (2007). + +**(Malolepsza)** + Malolepsza, Secor, Keyes, J Phys Chem B 119 (42), 13379-13384 (2015). + +**(Mandadapu)** + Mandadapu, KK; Templeton, JA; Lee, JW, "Polarization as a field variable from molecular dynamics simulations." Journal of Chemical Physics (2013), 139:054115. Please refer to the standard finite element (FE) texts, e.g. T.J.R Hughes " The finite element method ", Dover 2003, for the basics of FE simulation. + +**(Maras)** + Maras, Trushin, Stukowski, Ala-Nissila, Jonsson, Comp Phys Comm, 205, 13-21 (2016). + +**(Marrink)** + Marrink, de Vries, Mark, J Phys Chem B, 108, 750-760 (2004). + +**(Marshall, 2009)** + Marshall, J. S. (2009). Discrete-element modeling of particulate aerosol flows. Journal of Computational Physics, 228(5), 1541-1561. + +**(Martyna1992)** + Martyna, Klein, Tuckerman, J Chem Phys, 97, 2635 (1992); Martyna, Tuckerman, Tobias, Klein, Mol Phys, 87, 1117. + +**(Martyna1994)** + Martyna, Tobias and Klein, J Chem Phys, 101, 4177 (1994). + +**(Mason)** + J.\ K. Mason, Acta Cryst A65, 259 (2009). + +**(Mattice)** + Mattice, Suter, Conformational Theory of Large Molecules, Wiley, New York, 1994. + +**(Maxwell)** + J.C. Maxwell, Philos. Tans. Royal Soc. London, 157: 49-88 (1867). + +**(Mayergoyz)** + I.D. Mayergoyz, G. Bertotti, C. Serpico (2009). Elsevier (2009) + +**(Mayo)** + Mayo, Olfason, Goddard III, J Phys Chem, 94, 8897-8909 (1990). + +**(Mees)** + M.\ J. Mees, G. Pourtois, E. C. Neyts, B. J. Thijsse, and A. Stesmans, Phys. Rev. B 85, 134301 (2012). + +**(Mei)** + Mei, Davenport, Fernando, Phys Rev B, 43 4653 (1991) + +**(Melchor)** + Gonzalez-Melchor, Mayoral, Velazquez, and Alejandre, J Chem Phys, 125, 224107 (2006). + +**(Meloni)** + Meloni, Rosati and Colombo, J Chem Phys, 126, 121102 (2007). + +**(Meremianin)** + Meremianin, J. Phys. A, 39, 3099 (2006). + +**(Mezei)** + Mezei, J Chem Phys, 86, 7084 (1987) + +**(Mickel)** + W.\ Mickel, S. C. Kapfer, G. E. Schroeder-Turkand, K. Mecke, J. Chem. Phys. 138, 044501 (2013). + +**(Mie)** + G.\ Mie, Ann Phys, 316, 657 (1903). + +**(Miller1)** + T.\ F. Miller III, M. Eleftheriou, P. Pattnaik, A. Ndirango, G. J. Martyna, J. Chem. Phys., 116, 8649-8659 (2002). + +**(Miller2)** + Miller, Tadmor, Gibson, Bernstein and Pavia, J Chem Phys, 144, 184107 (2016). + +**(Minary)** + Minary, Martyna, and Tuckerman, J Chem Phys, 18, 2510 (2003). + +**(Mindlin and Deresiewicz, 1953)** + Mindlin, R.D., & Deresiewicz, H (1953). Elastic Spheres in Contact under Varying Oblique Force. J. Appl. Mech., ASME 20, 327-344. + +**(Mindlin, 1949)** + Mindlin, R. D. (1949). Compliance of elastic bodies in contact. J. Appl. Mech., ASME 16, 259-268. + +**(Miron)** + R.\ A. Miron and K. A. Fichthorn, J Chem Phys, 119, 6210 (2003). + +**(Mishin)** + Mishin, Mehl, and Papaconstantopoulos, Acta Mater, 53, 4029 (2005). + +**(Mitchell and Finchham)** + Mitchell, Finchham, J Phys Condensed Matter, 5, 1031-1038 (1993). + +**(Mitchell2011)** + Mitchell. A non-local, ordinary-state-based viscoelasticity model for peridynamics. Sandia National Lab Report, 8064:1-28 (2011). + +**(Mitchell2011a)** + Mitchell. A Nonlocal, Ordinary, State-Based Plasticity Model for Peridynamics. Sandia National Lab Report, 3166:1-34 (2011). + +**(Mniszewski)** + S.\ M. Mniszewski, M. J. Cawkwell, M. E. Wall, J. Mohd-Yusof, N. Bock, T. C. Germann, and A. M. N. Niklasson, J. Chem. Theory Comput., 11, 4644 (2015). + +**(Monaghan)** + Monaghan and Gingold, Journal of Computational Physics, 52, 374-389 (1983). + +**(Moore)** + Moore, J Chem Phys, 144, 104501 (2016). + +**(Mori)** + Y.\ Mori, Y. Okamoto, J. Phys. Soc. Jpn., 7, 074003 (2010). + +**(Moriarty1)** + Moriarty, Physical Review B, 38, 3199 (1988). + +**(Moriarty2)** + Moriarty, Physical Review B, 42, 1609 (1990). Moriarty, Physical Review B 49, 12431 (1994). + +**(Moriarty3)** + Moriarty, Benedict, Glosli, Hood, Orlikowski, Patel, Soderlind, Streitz, Tang, and Yang, Journal of Materials Research, 21, 563 (2006). + +**(Morris)** + Morris, Fox, Zhu, J Comp Physics, 136, 214-226 (1997). + +**(Moustafa)** + Sabry G. Moustafa, Andrew J. Schultz, and David A. Kofke, *Very fast averaging of thermal properties of crystals by molecular simulation*\ , `Phys. Rev. E [92], 043303 (2015) `_ + +**(Muller-Plathe1)** + Muller-Plathe, J Chem Phys, 106, 6082 (1997). + +**(Muller-Plathe2)** + Muller-Plathe, Phys Rev E, 59, 4894-4898 (1999). + +**(Murdick)** + D.A. Murdick, X.W. Zhou, H.N.G. Wadley, D. Nguyen-Manh, R. Drautz, and D.G. Pettifor, Phys. Rev. B, 73, 45206 (2006). + +**(Murty)** + M.V.R. Murty, H.A. Atwater, Phys Rev B, 51, 4889 (1995). + +**(Nakano)** + A.\ Nakano, Computer Physics Communications, 104, 59-69 (1997). + +**(Neelov)** + Neelov, Holm, J Chem Phys 132, 234103 (2010) + +**(Negre2016)** + C.\ F. A. Negre, S. M. Mniszewski, M. J. Cawkwell, N. Bock, M. E. Wall, and A. M. N. Niklasson, J. Chem. Theory Comp., 12, 3063 (2016). + +**(Nelson)** + Nelson, Halperin, Phys Rev B, 19, 2457 (1979). + +**(Nettleton)** + Nettleton and Green, J Chem Phys, 29, 6 (1958). + +**(Neyts)** + E.\ C. Neyts and A. Bogaerts, Theor. Chem. Acc. 132, 1320 (2013). + +**(Nicholson and Rutledge)** + Nicholson and Rutledge, J Chem Phys, 145, 244903 (2016). + +**(Nicklas)** + The spline-based MEAM+SW format was first devised and used to develop potentials for bcc transition metals by Jeremy Nicklas, Michael Fellinger, + +**(Niklasson2002)** + A.\ M. N. Niklasson, Phys. Rev. B, 66, 155115 (2002). + +**(Niklasson2008)** + A.\ M. N. Niklasson, Phys. Rev. Lett., 100, 123004 (2008). + +**(Niklasson2014)** + A.\ M. N. Niklasson and M. Cawkwell, J. Chem. Phys., 141, 164123, (2014). + +**(Niklasson2017)** + A.\ M. N. Niklasson, J. Chem. Phys., 147, 054103 (2017). + +**(Noid)** + Noid, Chu, Ayton, Krishna, Izvekov, Voth, Das, Andersen, J Chem Phys 128, 134105 (2008). + +**(Nordlund95)** + Nordlund, Kai. Computational materials science 3.4 (1995): 448-456. + +**(Nordlund98)** + Nordlund, Kai, et al. Physical Review B 57.13 (1998): 7556. + +**(Norman)** + G E Norman, S V Starikov, V V Stegailov et al., Contrib. Plasma Phys., 53, 129-139 (2013). + +**(Noskov)** + Noskov, Lamoureux and Roux, J Phys Chem B, 109, 6705 (2005). + +**(Nurdin)** + Nurdin and Schotte Phys Rev E, 61(4), 3579 (2000) + +**(O'Connor)** + O'Connor et al., J. Chem. Phys. 142, 024903 (2015). + +**(Okabe)** + T.\ Okabe, M. Kawata, Y. Okamoto, M. Masuhiro, Chem. Phys. Lett., 335, 435-439 (2001). + +**(Ollila et al.)** + Ollila, S.T.T., Denniston, C., Karttunen, M., and Ala-Nissila, T., Fluctuating lattice-Boltzmann model for complex fluids, J. Chem. Phys. 134 (2011) 064902. + +**(Omelyan)** + Omelyan, Mryglod, and Folk. Phys. Rev. Lett. 86(5), 898. (2001). + +**(Oppelstrup)** + Oppelstrup, unpublished, 2015. Oppelstrup and Moriarty, to be published. + +**(Orsi)** + Orsi & Essex, The ELBA force field for coarse-grain modeling of lipid membranes, PloS ONE 6(12): e28637, 2011. + +**(Otis R. Walton)** + Walton, O.R., Personal Communication + +**(Ouldridge)** + T.E. Ouldridge, A.A. Louis, J.P.K. Doye, J. Chem. Phys. 134, 085101 (2011). + +**(Ouldridge-DPhil)** + T.E. Ouldridge, Coarse-grained modelling of DNA and DNA self-assembly, DPhil. University of Oxford (2011). + +**(Ouyang1)** + W.\ Ouyang, D. Mandelli, M. Urbakh and O. Hod, Nano Lett. 18, 6009-6016 (2018). + +**(Ouyang2)** + W.\ Ouyang et al., J. Chem. Theory Comput. 16(1), 666-676 (2020). + +**(PASS)** + PASS webpage: https://www.sdu.dk/en/DPASS + +**(PLUMED)** + G.A. Tribello, M. Bonomi, D. Branduardi, C. Camilloni and G. Bussi, Comp. Phys. Comm 185, 604 (2014) + +**(Paquay)** + Paquay and Kusters, Biophys. J., 110, 6, (2016). preprint available at `arXiv:1411.3019 `_. + +**(Park)** + Park, Schulten, J. Chem. Phys. 120 (13), 5946 (2004) + +**(Parks)** + Parks, Lehoucq, Plimpton, Silling, Comp Phys Comm, 179(11), 777-783 (2008). + +**(Parrinello1981)** + Parrinello and Rahman, J Appl Phys, 52, 7182 (1981). + +**(Paula Leite2016)** + Paula Leite , Freitas, Azevedo, and de Koning, J Chem Phys, 126, 044509 (2016). + +**(Paula Leite2017)** + Paula Leite, Santos-Florez, and de Koning, Phys Rev E, 96, 32115 (2017). + +**(Pearlman)** + Pearlman, J Chem Phys, 98, 1487 (1994) + +**(Pedersen)** + Pedersen, J. Chem. Phys., 139, 104102 (2013). + +**(Peng)** + Peng, Ren, Dudarev, Whelan, Acta Crystallogr. A, 52, 257-76 (1996). + +**(Perram)** + Perram and Rasmussen, Phys Rev E, 54, 6565-6572 (1996). + +**(Petersen)** + Petersen, J Chem Phys, 103, 3668 (1995). + +**(Petersen)** + Petersen, Lechman, Plimpton, Grest, in' t Veld, Schunk, J Chem Phys, 132, 174106 (2010). + +**(Pettifor_1)** + D.G. Pettifor and I.I. Oleinik, Phys. Rev. B, 59, 8487 (1999). + +**(Pettifor_2)** + D.G. Pettifor and I.I. Oleinik, Phys. Rev. Lett., 84, 4124 (2000). + +**(Pettifor_3)** + D.G. Pettifor and I.I. Oleinik, Phys. Rev. B, 65, 172103 (2002). + +**(Phillips)** + C.\ L. Phillips, J. A. Anderson, S. C. Glotzer, Comput Phys Comm, 230, 7191-7201 (2011). + +**(Piaggi)** + Piaggi and Parrinello, J Chem Phys, 147, 114112 (2017). + +**(Pisarev)** + V V Pisarev and S V Starikov, J. Phys.: Condens. Matter, 26, 475401 (2014). + +**(Pollock)** + Pollock and Glosli, Comp Phys Comm, 95, 93 (1996). + +**(Price1)** + Price and Brooks, J Chem Phys, 121, 10096 (2004). + +**(Price2)** + Price, Stone and Alderton, Mol Phys, 52, 987 (1984). + +**(QEq/Fire)** + T.-R. Shan, A. P. Thompson, S. J. Plimpton, in preparation + +**(Qi)** + Qi and Reed, J. Phys. Chem. A 116, 10451 (2012). + +**(Ramirez)** + J.\ Ramirez, S.K. Sukumaran, B. Vorselaars and A.E. Likhtman, J. Chem. Phys. 133, 154103 (2010). + +**(Rappe)** + Rappe and Goddard III, Journal of Physical Chemistry, 95, 3358-3363 (1991). + +**(Ravelo)** + Ravelo, Holian, Germann and Lomdahl, Phys Rev B, 70, 014103 (2004). + +**(ReaxFF)** + A.\ C. T. van Duin, S. Dasgupta, F. Lorant, W. A. Goddard III, J Physical Chemistry, 105, 9396-9049 (2001) + +**(Rector)** + Rector, Van Swol, Henderson, Molecular Physics, 82, 1009 (1994). + +**(Ree)** + Ree, Journal of Chemical Physics, 73, 5401 (1980). + +**(Reed)** + Reed, Fried, and Joannopoulos, Phys. Rev. Lett., 90, 235503 (2003). + +**(Reed2)** + Reed, J. Phys. Chem. C, 116, 2205 (2012). + +**(Rick)** + S.\ W. Rick, S. J. Stuart, B. J. Berne, J Chem Phys 101, 16141 (1994). + +**(Rohart)** + Rohart and Thiaville, Physical Review B, 88(18), 184422. (2013). + +**(Rosenberger)** + Rosenberger, Sanyal, Shell and van der Vegt, Journal of Chemical Physics, 2019, 151 (4), 044111. + +**(Rubensson)** + E.\ H. Rubensson, A. M. N. Niklasson, SIAM J. Sci. Comput. 36 (2), 147-170, (2014). + +**(Rutherford)** + A M Rutherford and D M Duffy, J. Phys.: Condens. Matter, 19, 496201-496210 (2007). + +**(Ryckaert)** + J.-P. Ryckaert, G. Ciccotti and H. J. C. Berendsen, J of Comp Phys, 23, 327-341 (1977). + +**(SMTB-Q_1)** + N.\ Salles, O. Politano, E. Amzallag, R. Tetot, Comput. Mater. Sci. 111 (2016) 181-189 + +**(SMTB-Q_2)** + E.\ Maras, N. Salles, R. Tetot, T. Ala-Nissila, H. Jonsson, J. Phys. Chem. C 2015, 119, 10391-10399 + +**(SMTB-Q_3)** + R.\ Tetot, N. Salles, S. Landron, E. Amzallag, Surface Science 616, 19-8722 28 (2013) + +**(SRIM)** + SRIM webpage: http://www.srim.org/ + +**(SW)** + F.\ H. Stillinger, and T. A. Weber, Phys. Rev. B, 31, 5262 (1985). + +**(SWM4-NDP)** + Lamoureux, Harder, Vorobyov, Roux, MacKerell, Chem Phys Let, 418, 245-249 (2006) + +**(Sadigh)** + B Sadigh, P Erhart, A Stukowski, A Caro, E Martinez, and L Zepeda-Ruiz, Phys. Rev. B, 85, 184203 (2012). + +**(Safran)** + Safran, Statistical Thermodynamics of Surfaces, Interfaces, And Membranes, Westview Press, ISBN: 978-0813340791 (2003). + +**(Salerno)** + Salerno, Bernstein, J Chem Theory Comput, --, ---- (2018). + +**(Sanyal1)** + Sanyal and Shell, Journal of Chemical Physics, 2016, 145 (3), 034109. + +**(Sanyal2)** + Sanyal and Shell, Journal of Physical Chemistry B, 122 (21), 5678-5693. + +**(Schelling)** + Patrick K. Schelling, Comp. Mat. Science, 44, 274 (2008). + +**(Schlitter1)** + Schlitter, Swegat, Mulders, "Distance-type reaction coordinates for modelling activated processes", J Molecular Modeling, 7, 171-177 (2001). + +**(Schlitter2)** + Schlitter and Klahn, "The free energy of a reaction coordinate at multiple constraints: a concise formulation", Molecular Physics, 101, 3439-3443 (2003). + +**(Schmid)** + S.\ Bureekaew, S. Amirjalayer, M. Tafipolsky, C. Spickermann, T.K. Roy and R. Schmid, Phys. Status Solidi B, 6, 1128 (2013). + +**(Schneider)** + Schneider and Stoll, Phys Rev B, 17, 1302 (1978). + +**(Schratt & Mohles)** + Schratt, Mohles. Comp. Mat. Sci. 182 (2020) 109774 ---------- + +**(Schroeder)** + Schroeder and Steinhauser, J Chem Phys, 133, 154511 (2010). + +**(Semaev)** + Semaev, Cryptography and Lattices, 181 (2001). + +**(Sheppard)** + Sheppard, Terrell, Henkelman, J Chem Phys, 128, 134106 (2008). See ref 1 in this paper for original reference to Qmin in Jonsson, Mills, Jacobsen. + +**(Shinoda)** + Shinoda, DeVane, Klein, Mol Sim, 33, 27 (2007). + +**(Shinoda)** + Shinoda, Shiga, and Mikami, Phys Rev B, 69, 134103 (2004). + +**(Sides)** + Sides, Grest, Stevens, Plimpton, J Polymer Science B, 42, 199-208 (2004). + +**(Silbert)** + Silbert, Ertas, Grest, Halsey, Levine, Plimpton, Phys Rev E, 64, p 051302 (2001). + +**(Silbert, 2001)** + Silbert, L. E., Ertas, D., Grest, G. S., Halsey, T. C., Levine, D., & Plimpton, S. J. (2001). Granular flow down an inclined plane: Bagnold scaling and rheology. Physical Review E, + +**(Silling 2000)** + Silling, J Mech Phys Solids, 48, 175-209 (2000). + +**(Silling 2007)** + Silling, Epton, Weckner, Xu, Askari, J Elasticity, 88, 151-184 (2007). + +**(Singh)** + Singh and Warner, Acta Mater, 58, 5797-5805 (2010), + +**(Sirk1)** + Sirk TW, Sliozberg YR, Brennan JK, Lisal M, Andzelm JW, J Chem Phys, 136 (13) 134903, 2012. + +**(Sirk2)** + Sirk, Moore, Brown, J Chem Phys, 138, 064505 (2013). + +**(Skomski)** + Skomski, R. (2008). Simple models of magnetism. Oxford University Press. + +**(Snodin)** + B.E. Snodin, F. Randisi, M. Mosayebi, et al., J. Chem. Phys. 142, 234901 (2015). + +**(Srivastava)** + Zhigilei, Wei, Srivastava, Phys. Rev. B 71, 165417 (2005). + +**(Steinbach)** + Steinbach, Brooks, J Comput Chem, 15, 667 (1994). + +**(Steinhardt)** + P.\ Steinhardt, D. Nelson, and M. Ronchetti, Phys. Rev. B 28, 784 (1983). + +**(Stiles)** + Stiles , Hubbard, and Kayser, J Chem Phys, 77, 6189 (1982). + +**(Stillinger)** + Stillinger, Weber, Phys. Rev. B 31, 5262 (1985). + +**(Stoddard)** + Stoddard and Ford, Phys Rev A, 8, 1504 (1973). + +**(Streitz)** + F.\ H. Streitz, J. W. Mintmire, Phys Rev B, 50, 11996-12003 (1994). + +**(Strong)** + Strong and Eaves, J. Phys. Chem. B 121, 189 (2017). + +**(Stuart)** + Stuart, Tutein, Harrison, J Chem Phys, 112, 6472-6486 (2000). + +**(Stukowski)** + Stukowski, Sadigh, Erhart, Caro; Modeling Simulation Materials Science & Engineering, 7, 075005 (2009). + +**(Su)** + Su and Goddard, Excited Electron Dynamics Modeling of Warm Dense Matter, Phys Rev Lett, 99:185003 (2007). + +**(Sulc1)** + P.\ Sulc, F. Romano, T. E. Ouldridge, et al., J. Chem. Phys. 140, 235102 (2014). + +**(Sulc2)** + P.\ Sulc, F. Romano, T.E. Ouldridge, L. Rovigatti, J.P.K. Doye, A.A. Louis, J. Chem. Phys. 137, 135101 (2012). + +**(Sun)** + Sun, J. Phys. Chem. B, 102, 7338-7364 (1998). + +**(Surblys)** + Surblys, Matsubara, Kikugawa, Ohara, Phys Rev E, 99, 051301(R) (2019). + +**(Sutmann)** + Sutmann, Arnold, Fahrenberger, et. al., Physical review / E 88(6), 063308 (2013) + +**(Swinburne)** + Swinburne and Marinica, Physical Review Letters, 120, 1 (2018) + +**(Tadmor)** + Tadmor, Elliott, Sethna, Miller and Becker, JOM, 63, 17 (2011). doi: `https://doi.org/10.1007/s11837-011-0102-6 `_ + +**(Tainter 2011)** + Tainter, Pieniazek, Lin, and Skinner, J. Chem. Phys., 134, 184501 (2011) + +**(Tainter 2015)** + Tainter, Shi, and Skinner, 11, 2268 (2015) + +**(Templeton2010)** + Templeton, JA; Jones, RE; Wagner, GJ, "Application of a field-based method to spatially varying thermal transport problems in molecular dynamics." Modelling and Simulation in Materials Science and Engineering (2010), 18:085007. + +**(Templeton2011)** + Templeton, JA; Jones, RE; Lee, JW; Zimmerman, JA; Wong, BM, "A long-range electric field solver for molecular dynamics based on atomistic-to-continuum modeling." Journal of Chemical Theory and Computation (2011), 7:1736. + +**(Tersoff_1)** + J.\ Tersoff, Phys Rev B, 37, 6991 (1988). + +**(Tersoff_2)** + J.\ Tersoff, Phys Rev B, 38, 9902 (1988). + +**(Tersoff_3)** + J.\ Tersoff, Phys Rev B, 39, 5566 (1989); errata (PRB 41, 3248) + +**(Theodorou)** + Theodorou, Suter, Macromolecules, 18, 1206 (1985). + +**(Thole)** + Chem Phys, 59, 341 (1981). + +**(Thompson1)** + Thompson, Plimpton, Mattson, J Chem Phys, 131, 154107 (2009). + +**(Thompson2)** + Thompson, Swiler, Trott, Foiles, Tucker, J Comp Phys, 285, 316 (2015). + +**(Thornton et al, 2013)** + Thornton, C., Cummins, S. J., & Cleary, P. W. (2013). An investigation of the comparative behavior of alternative contact force models during inelastic collisions. Powder + +**(Thornton, 1991)** + Thornton, C. (1991). Interparticle sliding in the presence of adhesion. J. Phys. D: Appl. Phys. 24 1942 + +**(To)** + Q.D. To, V.H. Vu, G. Lauriat, and C. Leonard. J. Math. Phys. 56, 103101 (2015). + +**(Todd)** + B.\ D. Todd, Denis J. Evans, and Peter J. Daivis: "Pressure tensor for inhomogeneous fluids", Phys. Rev. E 52, 1627 (1995). + +**(Toukmaji)** + Toukmaji, Sagui, Board, and Darden, J Chem Phys, 113, 10913 (2000). + +**(Toxvaerd)** + Toxvaerd, Dyre, J Chem Phys, 134, 081102 (2011). + +**(Tranchida)** + Tranchida, Plimpton, Thibaudeau and Thompson, Journal of Computational Physics, 372, 406-425, (2018). + +**(Tsuji et al, 1992)** + Tsuji, Y., Tanaka, T., & Ishida, T. (1992). Lagrangian numerical simulation of plug flow of cohesionless particles in a horizontal pipe. Powder technology, 71(3), + +**(Tsuzuki)** + Tsuzuki, Branicio, Rino, Comput Phys Comm, 177, 518 (2007). + +**(Tuckerman1)** + M.\ Tuckerman and B. Berne, J Chem Phys, 99, 2796 (1993). + +**(Tuckerman2)** + Tuckerman, Alejandre, Lopez-Rendon, Jochim, and Martyna, J Phys A: Math Gen, 39, 5629 (2006). + +**(Tuckerman3)** + Tuckerman, Berne and Martyna, J Chem Phys, 97, p 1990 (1992). + +**(Tuckerman4)** + Tuckerman, Mundy, Balasubramanian, Klein, J Chem Phys, 106, 5615 (1997). + +**(Ulomek)** + Ulomek, Brien, Foiles, Mohles, Modelling Simul. Mater. Sci. Eng. 23 (2015) 025007 + +**(Vaiwala)** + Vaiwala, Jadhav, and Thaokar, J Chem Phys, 146, 124904 (2017). + +**(Valone)** + Valone, Baskes, Martin, Phys. Rev. B, 73, 214209 (2006). + +**(Varshalovich)** + Varshalovich, Moskalev, Khersonskii, Quantum Theory of Angular Momentum, World Scientific, Singapore (1987). + +**(Vashishta1990)** + P.\ Vashishta, R. K. Kalia, J. P. Rino, Phys. Rev. B 41, 12197 (1990). + +**(Vashishta2007)** + P.\ Vashishta, R. K. Kalia, A. Nakano, J. P. Rino. J. Appl. Phys. 101, 103515 (2007). + +**(Veld)** + In 't Veld, Ismail, Grest, J Chem Phys, 127, 144711 (2007). + +**(Volkov1)** + Volkov and Zhigilei, J Phys Chem C, 114, 5513 (2010). + +**(Volkov2)** + Volkov, Simov and Zhigilei, APS Meeting Abstracts, Q31.013 (2008). + +**(Voter1998)** + Voter, Phys Rev B, 57, 13985 (1998). + +**(Voter2000)** + Sorensen and Voter, J Chem Phys, 112, 9599 (2000) + +**(Voter2002)** + Voter, Montalenti, Germann, Annual Review of Materials Research 32, 321 (2002). + +**(Voter2013)** + S.\ Y. Kim, D. Perez, A. F. Voter, J Chem Phys, 139, 144110 (2013). + +**(Wagner)** + Wagner, GJ; Jones, RE; Templeton, JA; Parks, MA, "An atomistic-to-continuum coupling method for heat transfer in solids." Special Issue of Computer Methods and Applied Mechanics (2008) 197:3351. + +**(Wang et al, 2015)** + Wang, Y., Alonso-Marroquin, F., & Guo, W. W. (2015). Rolling and sliding in 3-D discrete element models. Particuology, 23, 49-55. + +**(Wang1)** + J.\ Wang, H. S. Yu, P. A. Langston, F. Y. Fraige, Granular Matter, 13, 1 (2011). + +**(Wang2)** + J.\ Wang, and A. Rockett, Phys. Rev. B, 43, 12571 (1991). + +**(Wang3)** + Wang and Holm, J Chem Phys, 115, 6277 (2001). + +**(Wang4)** + Wang, Van Hove, Ross, Baskes, J. Chem. Phys., 121, 5410 (2004). + +**(Ward)** + D.K. Ward, X.W. Zhou, B.M. Wong, F.P. Doty, and J.A. Zimmerman, Phys. Rev. B, 85,115206 (2012). + +**(Warren)** + Warren, Phys Rev E, 68, 066702 (2003). + +**(Watkins)** + Watkins and Jorgensen, J Phys Chem A, 105, 4118-4125 (2001). + +**(Weeks)** + Weeks, Chandler and Andersen, J. Chem. Phys., 54, 5237 (1971) + +**(WeinanE)** + E, Ren, Vanden-Eijnden, Phys Rev B, 66, 052301 (2002). + +**(Wen)** + M.\ Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, Phys. Rev. B, 98, 235404 (2018) + +**(Wennberg)** + Wennberg, Murtola, Hess, Lindahl, J Chem Theory Comput, 9, 3527 (2013). + +**(Who)** + Who, Author2, Author3, J of Long Range Solvers, 35, 164-177 (2012). + +**(Wicaksono1)** + Wicaksono, Sinclair, Militzer, Computational Materials Science, 117, 397-405 (2016). + +**(Wicaksono2)** + Wicaksono, figshare, https://doi.org/10.6084/m9.figshare.1488628.v1 (2015). + +**(Wirnsberger)** + Wirnsberger, Frenkel, and Dellago, J Chem Phys, 143, 124104 (2015). + +**(Wolf)** + D.\ Wolf, P. Keblinski, S. R. Phillpot, J. Eggebrecht, J Chem Phys, 110, 8254 (1999). + +**(Wolff)** + Wolff and Rudd, Comp Phys Comm, 120, 200-32 (1999). + +**(Wood)** + Wood and Thompson, J Chem Phys, 148, 241721, (2018) + +**(Yeh)** + Yeh and Berkowitz, J Chem Phys, 111, 3155 (1999). + +**(ZBL)** + J.F. Ziegler, J.P. Biersack, U. Littmark, 'Stopping and Ranges of Ions in Matter' Vol 1, 1985, Pergamon Press. + +**(Zhang1)** + Zhang and Makse, Phys Rev E, 72, p 011301 (2005). + +**(Zhang2)** + Zhang and Trinkle, Computational Materials Science, 124, 204-210 (2016). + +**(Zhang3)** + Zhang, Glotzer, Nanoletters, 4, 1407-1413 (2004). + +**(Zhang4)** + Zhang, J Chem Phys, 106, 6102 (1997). + +**(Zhang5)** + Zhang, Lussetti, de Souza, Muller-Plathe, J Phys Chem B, 109, 15060-15067 (2005). + +**(Zhigilei1)** + Volkov and Zhigilei, ACS Nano 4, 6187 (2010). + +**(Zhigilei2)** + Volkov, Simov, Zhigilei, ASME paper IMECE2008, 68021 (2008). + +**(Zhigilei3)** + Volkov, Zhigilei, J. Phys. Chem. C 114, 5513 (2010). + +**(Zhigilei4)** + Wittmaack, Banna, Volkov, Zhigilei, Carbon 130, 69 (2018). + +**(Zhigilei5)** + Wittmaack, Volkov, Zhigilei, Compos. Sci. Technol. 166, 66 (2018). + +**(Zhigilei6)** + Wittmaack, Volkov, Zhigilei, Carbon 143, 587 (2019). + +**(Zhigilei7)** + Volkov, Zhigilei, Phys. Rev. Lett. 104, 215902 (2010). + +**(Zhigilei8)** + Volkov, Shiga, Nicholson, Shiomi, Zhigilei, J. Appl. Phys. 111, 053501 (2012). + +**(Zhigilei9)** + Volkov, Zhigilei, Appl. Phys. Lett. 101, 043113 (2012). + +**(Zhigilei10)** + Jacobs, Nicholson, Zemer, Volkov, Zhigilei, Phys. Rev. B 86, 165414 (2012). + +**(Zhou1)** + Zhou, Saidi, Fichthorn, J Phys Chem C, 118(6), 3366-3374 (2014). + +**(Zhou3)** + X.\ W. Zhou, M. E. Foster, R. E. Jones, P. Yang, H. Fan, and F. P. Doty, J. Mater. Sci. Res., 4, 15 (2015). + +**(Zhou4)** + X.\ W. Zhou, M. E. Foster, J. A. Ronevich, and C. W. San Marchi, J. Comp. Chem., 41, 1299 (2020). + +**(Zhu)** + Zhu, Tajkhorshid, and Schulten, Biophys. J. 83, 154 (2002). + +**(Ziegler)** + J.F. Ziegler, J. P. Biersack and U. Littmark, "The Stopping and Range of Ions in Matter," Volume 1, Pergamon, 1985. + +**(Zimmerman2004)** + Zimmerman, JA; Webb, EB; Hoyt, JJ;. Jones, RE; Klein, PA; Bammann, DJ, "Calculation of stress in atomistic simulation." Special Issue of Modelling and Simulation in Materials Science and Engineering (2004),12:S319. + +**(Zimmerman2010)** + Zimmerman, JA; Jones, RE; Templeton, JA, "A material frame approach for evaluating continuum variables in atomistic simulations." Journal of Computational Physics (2010), 229:2364. + +**(de Buyl)** + de Buyl, Colberg and Hofling, H5MD: A structured, efficient, and portable file format for molecular data, Comp. Phys. Comm. 185(6), 1546-1553 (2014) - + +**(de Koning)** + de Koning and Antonelli, Phys Rev E, 53, 465 (1996). + +**(electronic stopping)** + Wikipedia - Electronic Stopping Power: https://en.wikipedia.org/wiki/Stopping_power_%28particle_radiation%29 + +**(tenWolde)** + P.\ R. ten Wolde, M. J. Ruiz-Montero, D. Frenkel, J. Chem. Phys. 104, 9932 (1996). + +**(vanWijk)** + M.\ M. van Wijk, A. Schuring, M. I. Katsnelson, and A. Fasolino, Physical Review Letters, 113, 135504 (2014) diff --git a/doc/src/Manual.rst b/doc/src/Manual.rst index ddc2b2daa8..243444f89a 100644 --- a/doc/src/Manual.rst +++ b/doc/src/Manual.rst @@ -91,6 +91,7 @@ Programmer Documentation dihedrals impropers fix_modify_atc_commands + Bibliography Indices and tables ****************** From 495438105f0feaac917bda66a8dc660c849413fc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 13:59:29 -0400 Subject: [PATCH 012/182] mass renaming of programmer guide files --- doc/src/{pg_dev_classes.rst => Classes.rst} | 0 doc/src/{pg_atom.rst => Classes_atom.rst} | 0 doc/src/{pg_input.rst => Classes_input.rst} | 0 doc/src/{pg_lammps.rst => Classes_lammps.rst} | 0 doc/src/{pg_cplusplus.rst => Cplusplus.rst} | 0 doc/src/{pg_developer.rst => Developer.rst} | 10 ++++---- .../{pg_dev_flow.rst => Developer_flow.rst} | 0 doc/src/{pg_dev_org.rst => Developer_org.rst} | 0 .../{pg_dev_utils.rst => Developer_utils.rst} | 0 .../{pg_dev_write.rst => Developer_write.rst} | 0 doc/src/{pg_fortran.rst => Fortran.rst} | 0 doc/src/{pg_library.rst => Library.rst} | 24 +++++++++---------- doc/src/{pg_lib_add.rst => Library_add.rst} | 0 .../{pg_lib_config.rst => Library_config.rst} | 0 .../{pg_lib_create.rst => Library_create.rst} | 0 ...pg_lib_execute.rst => Library_execute.rst} | 0 ..._lib_neighbor.rst => Library_neighbor.rst} | 0 ...pg_lib_objects.rst => Library_objects.rst} | 0 ..._properties.rst => Library_properties.rst} | 0 ...pg_lib_scatter.rst => Library_scatter.rst} | 0 ...pg_lib_utility.rst => Library_utility.rst} | 0 doc/src/Manual.rst | 4 ++-- doc/src/{pg_python.rst => Python_module.rst} | 0 23 files changed, 19 insertions(+), 19 deletions(-) rename doc/src/{pg_dev_classes.rst => Classes.rst} (100%) rename doc/src/{pg_atom.rst => Classes_atom.rst} (100%) rename doc/src/{pg_input.rst => Classes_input.rst} (100%) rename doc/src/{pg_lammps.rst => Classes_lammps.rst} (100%) rename doc/src/{pg_cplusplus.rst => Cplusplus.rst} (100%) rename doc/src/{pg_developer.rst => Developer.rst} (79%) rename doc/src/{pg_dev_flow.rst => Developer_flow.rst} (100%) rename doc/src/{pg_dev_org.rst => Developer_org.rst} (100%) rename doc/src/{pg_dev_utils.rst => Developer_utils.rst} (100%) rename doc/src/{pg_dev_write.rst => Developer_write.rst} (100%) rename doc/src/{pg_fortran.rst => Fortran.rst} (100%) rename doc/src/{pg_library.rst => Library.rst} (96%) rename doc/src/{pg_lib_add.rst => Library_add.rst} (100%) rename doc/src/{pg_lib_config.rst => Library_config.rst} (100%) rename doc/src/{pg_lib_create.rst => Library_create.rst} (100%) rename doc/src/{pg_lib_execute.rst => Library_execute.rst} (100%) rename doc/src/{pg_lib_neighbor.rst => Library_neighbor.rst} (100%) rename doc/src/{pg_lib_objects.rst => Library_objects.rst} (100%) rename doc/src/{pg_lib_properties.rst => Library_properties.rst} (100%) rename doc/src/{pg_lib_scatter.rst => Library_scatter.rst} (100%) rename doc/src/{pg_lib_utility.rst => Library_utility.rst} (100%) rename doc/src/{pg_python.rst => Python_module.rst} (100%) diff --git a/doc/src/pg_dev_classes.rst b/doc/src/Classes.rst similarity index 100% rename from doc/src/pg_dev_classes.rst rename to doc/src/Classes.rst diff --git a/doc/src/pg_atom.rst b/doc/src/Classes_atom.rst similarity index 100% rename from doc/src/pg_atom.rst rename to doc/src/Classes_atom.rst diff --git a/doc/src/pg_input.rst b/doc/src/Classes_input.rst similarity index 100% rename from doc/src/pg_input.rst rename to doc/src/Classes_input.rst diff --git a/doc/src/pg_lammps.rst b/doc/src/Classes_lammps.rst similarity index 100% rename from doc/src/pg_lammps.rst rename to doc/src/Classes_lammps.rst diff --git a/doc/src/pg_cplusplus.rst b/doc/src/Cplusplus.rst similarity index 100% rename from doc/src/pg_cplusplus.rst rename to doc/src/Cplusplus.rst diff --git a/doc/src/pg_developer.rst b/doc/src/Developer.rst similarity index 79% rename from doc/src/pg_developer.rst rename to doc/src/Developer.rst index 89282820ae..cd031ad465 100644 --- a/doc/src/pg_developer.rst +++ b/doc/src/Developer.rst @@ -10,8 +10,8 @@ of time and requests from the LAMMPS user community. .. toctree:: :maxdepth: 1 - pg_dev_org - pg_dev_flow - pg_dev_write - pg_dev_utils - pg_dev_classes + Developer_org + Developer_flow + Developer_write + Developer_utils + Classes diff --git a/doc/src/pg_dev_flow.rst b/doc/src/Developer_flow.rst similarity index 100% rename from doc/src/pg_dev_flow.rst rename to doc/src/Developer_flow.rst diff --git a/doc/src/pg_dev_org.rst b/doc/src/Developer_org.rst similarity index 100% rename from doc/src/pg_dev_org.rst rename to doc/src/Developer_org.rst diff --git a/doc/src/pg_dev_utils.rst b/doc/src/Developer_utils.rst similarity index 100% rename from doc/src/pg_dev_utils.rst rename to doc/src/Developer_utils.rst diff --git a/doc/src/pg_dev_write.rst b/doc/src/Developer_write.rst similarity index 100% rename from doc/src/pg_dev_write.rst rename to doc/src/Developer_write.rst diff --git a/doc/src/pg_fortran.rst b/doc/src/Fortran.rst similarity index 100% rename from doc/src/pg_fortran.rst rename to doc/src/Fortran.rst diff --git a/doc/src/pg_library.rst b/doc/src/Library.rst similarity index 96% rename from doc/src/pg_library.rst rename to doc/src/Library.rst index 9193b56214..7d843e0745 100644 --- a/doc/src/pg_library.rst +++ b/doc/src/Library.rst @@ -91,15 +91,15 @@ and consequently the function :cpp:func:`lammps_open` may not be used. .. toctree:: :maxdepth: 1 - pg_lib_create - pg_lib_execute - pg_lib_properties - pg_lib_objects - pg_lib_scatter - pg_lib_neighbor - pg_lib_config - pg_lib_utility - pg_lib_add + Library_create + Library_execute + Library_properties + Library_objects + Library_scatter + Library_neighbor + Library_config + Library_utility + Library_add -------------------- @@ -119,7 +119,7 @@ Python classes to run LAMMPS are available and they build on each other. .. toctree:: :maxdepth: 1 - pg_python + Python_module ------------------- @@ -136,7 +136,7 @@ be very similar to the C library API and the basic Python module. .. toctree:: :maxdepth: 1 - pg_fortran + Fortran ------------------- @@ -153,6 +153,6 @@ The following links provide some examples and references to the C++ API. .. toctree:: :maxdepth: 1 - pg_cplusplus + Cplusplus diff --git a/doc/src/pg_lib_add.rst b/doc/src/Library_add.rst similarity index 100% rename from doc/src/pg_lib_add.rst rename to doc/src/Library_add.rst diff --git a/doc/src/pg_lib_config.rst b/doc/src/Library_config.rst similarity index 100% rename from doc/src/pg_lib_config.rst rename to doc/src/Library_config.rst diff --git a/doc/src/pg_lib_create.rst b/doc/src/Library_create.rst similarity index 100% rename from doc/src/pg_lib_create.rst rename to doc/src/Library_create.rst diff --git a/doc/src/pg_lib_execute.rst b/doc/src/Library_execute.rst similarity index 100% rename from doc/src/pg_lib_execute.rst rename to doc/src/Library_execute.rst diff --git a/doc/src/pg_lib_neighbor.rst b/doc/src/Library_neighbor.rst similarity index 100% rename from doc/src/pg_lib_neighbor.rst rename to doc/src/Library_neighbor.rst diff --git a/doc/src/pg_lib_objects.rst b/doc/src/Library_objects.rst similarity index 100% rename from doc/src/pg_lib_objects.rst rename to doc/src/Library_objects.rst diff --git a/doc/src/pg_lib_properties.rst b/doc/src/Library_properties.rst similarity index 100% rename from doc/src/pg_lib_properties.rst rename to doc/src/Library_properties.rst diff --git a/doc/src/pg_lib_scatter.rst b/doc/src/Library_scatter.rst similarity index 100% rename from doc/src/pg_lib_scatter.rst rename to doc/src/Library_scatter.rst diff --git a/doc/src/pg_lib_utility.rst b/doc/src/Library_utility.rst similarity index 100% rename from doc/src/pg_lib_utility.rst rename to doc/src/Library_utility.rst diff --git a/doc/src/Manual.rst b/doc/src/Manual.rst index 243444f89a..572748d7a1 100644 --- a/doc/src/Manual.rst +++ b/doc/src/Manual.rst @@ -73,9 +73,9 @@ Programmer Documentation :name: progdoc :includehidden: - pg_library + Library Modify - pg_developer + Developer .. toctree:: :caption: Index diff --git a/doc/src/pg_python.rst b/doc/src/Python_module.rst similarity index 100% rename from doc/src/pg_python.rst rename to doc/src/Python_module.rst From 5e6d222d294a973870bee714ef2564ee59f55e7b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 14:04:44 -0400 Subject: [PATCH 013/182] fix up a few internal references --- doc/src/Classes.rst | 8 ++++---- doc/src/Howto_couple.rst | 2 +- doc/src/Howto_library.rst | 6 +++--- doc/src/Library.rst | 2 +- doc/src/Python_module.rst | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/doc/src/Classes.rst b/doc/src/Classes.rst index 78e1dabcd1..4b50eef7b2 100644 --- a/doc/src/Classes.rst +++ b/doc/src/Classes.rst @@ -5,7 +5,7 @@ LAMMPS is designed to be used as a C++ class library where one can set up and drive a simulation through creating a class instance and then calling some abstract operations or commands on that class or its member class instances. These are interfaced to the :doc:`C library API -`, which providing an additional level of abstraction +`, which providing an additional level of abstraction simplification for common operations. The C API is also the basis for calling LAMMPS from Python or Fortran. @@ -33,6 +33,6 @@ some selected examples for derived classes of specific models. :caption: Individual Base Classes :name: lammpsbase - pg_lammps - pg_atom - pg_input + Classes_lammps + Classes_atom + Classes_input diff --git a/doc/src/Howto_couple.rst b/doc/src/Howto_couple.rst index 2eadbb522e..36ba2a526e 100644 --- a/doc/src/Howto_couple.rst +++ b/doc/src/Howto_couple.rst @@ -54,7 +54,7 @@ context of your application. invoked with minimal overhead (no setup or clean-up) if you wish to do multiple short runs, driven by another program. Details about using the library interface are given in the :doc:`library API - ` documentation. + ` documentation. .. spacer diff --git a/doc/src/Howto_library.rst b/doc/src/Howto_library.rst index afa8dde941..36d6626c59 100644 --- a/doc/src/Howto_library.rst +++ b/doc/src/Howto_library.rst @@ -20,8 +20,8 @@ Creating a LAMMPS instance can be done by using C++ code directly or through a C-style interface library to LAMMPS that is provided in the files ``src/library.cpp`` and ``library.h``. This :ref:`C language API `, can be used from C and C++, -and is also the basis for the :doc:`Python ` and -:doc:`Fortran ` interfaces or wrappers included in the +and is also the basis for the :doc:`Python ` and +:doc:`Fortran ` interfaces or wrappers included in the LAMMPS source code. The ``examples/COUPLE`` and ``python/examples`` directories contain some @@ -33,5 +33,5 @@ LAMMPS. A detailed documentation of the available APIs and examples of how to use them can be found in the :doc:`Programmer Documentation -` section of this manual. +` section of this manual. diff --git a/doc/src/Library.rst b/doc/src/Library.rst index 7d843e0745..42c554467e 100644 --- a/doc/src/Library.rst +++ b/doc/src/Library.rst @@ -53,7 +53,7 @@ LAMMPS C Library API The C library interface is most commonly used path to manage LAMMPS instances from a compiled code and it is the basis for the :doc:`Python -` and :doc:`Fortran ` modules. Almost all +` and :doc:`Fortran ` modules. Almost all functions of the C language API require an argument containing a "handle" in the form of a ``void *`` type variable, which points to the location of a LAMMPS class instance. diff --git a/doc/src/Python_module.rst b/doc/src/Python_module.rst index 37cfb2c6db..e9a48dd797 100644 --- a/doc/src/Python_module.rst +++ b/doc/src/Python_module.rst @@ -204,7 +204,7 @@ to "compute" what the next LAMMPS command should be. .. tab:: lammps API Same as in the equivalent - :doc:`C library functions `, commands can be read from a file, a + :doc:`C library functions `, commands can be read from a file, a single string, a list of strings and a block of commands in a single multi-line string. They are processed under the same boundary conditions as the C library counterparts. The example below demonstrates the use From 0ffb2ce09c84d22081d6d2e4a400d6955b612527 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 15:12:31 -0400 Subject: [PATCH 014/182] move Tutorials to bottom of Howto section --- doc/src/Howto.rst | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/doc/src/Howto.rst b/doc/src/Howto.rst index 6d8f6e9054..ff75b751b1 100644 --- a/doc/src/Howto.rst +++ b/doc/src/Howto.rst @@ -9,18 +9,6 @@ example input scripts included in the examples directory of the LAMMPS distribution and highlighted on the :doc:`Examples ` doc page also show how to setup and run various kinds of simulations. -Tutorials howto -=============== - -.. toctree:: - :name: tutorials - :maxdepth: 1 - - Howto_cmake - Howto_github - Howto_pylammps - Howto_wsl - General howto ============= @@ -94,3 +82,16 @@ Packages howto Howto_drude2 Howto_manifold Howto_spins + +Tutorials howto +=============== + +.. toctree:: + :name: tutorials + :maxdepth: 1 + + Howto_cmake + Howto_github + Howto_pylammps + Howto_wsl + From cc5ef652e4f1ab71bf5f5af40d1a353bf72ebf76 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 15:13:05 -0400 Subject: [PATCH 015/182] move Using Python with LAMMPS to programmer guide and integrate python module docs --- doc/src/Library.rst | 8 +++----- doc/src/Manual.rst | 2 +- doc/src/Python_head.rst | 1 + 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/doc/src/Library.rst b/doc/src/Library.rst index 42c554467e..8222fc7172 100644 --- a/doc/src/Library.rst +++ b/doc/src/Library.rst @@ -115,11 +115,9 @@ Because of the dynamic loading, it is **required** that LAMMPS is compiled in :ref:`"shared" mode `. The Python interface is object oriented, but otherwise trying to be very similar to the C library API. Three different Python classes to run LAMMPS are available and they build on each other. - -.. toctree:: - :maxdepth: 1 - - Python_module +More information on this is in the :doc:`Python_head` +section of the manual and for using the LAMMPS Python modules is in +:doc:`Python_module`. ------------------- diff --git a/doc/src/Manual.rst b/doc/src/Manual.rst index 572748d7a1..ffd75ef974 100644 --- a/doc/src/Manual.rst +++ b/doc/src/Manual.rst @@ -58,7 +58,6 @@ User Documentation Howto Examples Tools - Python_head Errors Manual_build @@ -74,6 +73,7 @@ Programmer Documentation :includehidden: Library + Python_head Modify Developer diff --git a/doc/src/Python_head.rst b/doc/src/Python_head.rst index fc808489a5..611e6424fe 100644 --- a/doc/src/Python_head.rst +++ b/doc/src/Python_head.rst @@ -14,6 +14,7 @@ used together. Python_mpi Python_test Python_library + Python_module Python_pylammps Python_examples Python_call From 2e67aa6b478a0a9e2fc52642e006fdb047827a7a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 16:16:06 -0400 Subject: [PATCH 016/182] autodetect OpenMP 4.0 semantic compatibility if not explicitly set --- src/omp_compat.h | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/src/omp_compat.h b/src/omp_compat.h index d80d6f6f7f..340bbca204 100644 --- a/src/omp_compat.h +++ b/src/omp_compat.h @@ -25,11 +25,30 @@ // so this is what LAMMPS primarily uses. For those compilers // that strictly implement OpenMP 4.0 (such as GCC 9.0 and later // or Clang 10.0 and later), we give up default(none). -#if LAMMPS_OMP_COMPAT == 4 -# define LMP_SHARED(...) -# define LMP_DEFAULT_NONE default(shared) -#else -# define LMP_SHARED(...) shared(__VA_ARGS__) -# define LMP_DEFAULT_NONE default(none) + +// autodetect OpenMP compatibility if not explicitly set + +#ifndef LAMMPS_OMP_COMPAT +# if defined(__INTEL_COMPILER) +# if __INTEL_COMPILER > 18 +# define LAMMPS_OMP_COMPAT 4 +# endif +# elif defined(__clang__) +# if __clang_major__ >= 10 +# define LAMMPS_OMP_COMPAT 4 +# endif +# elif defined(__GNUC__) +# if __GNUC__ >= 0 +# define LAMMPS_OMP_COMPAT 4 +# endif +# endif +#endif + +#if LAMMPS_OMP_COMPAT == 4 +# define LMP_SHARED(...) +# define LMP_DEFAULT_NONE default(shared) +#else +# define LMP_SHARED(...) shared(__VA_ARGS__) +# define LMP_DEFAULT_NONE default(none) #endif From 5489c64aeffafdf001111597b171c32b87d6ca58 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 16:32:54 -0400 Subject: [PATCH 017/182] remove trailing whitespace --- doc/src/Bibliography.rst | 464 +++++++++++++++++++-------------------- 1 file changed, 232 insertions(+), 232 deletions(-) diff --git a/doc/src/Bibliography.rst b/doc/src/Bibliography.rst index 39e93b4e90..7789ae6e7b 100644 --- a/doc/src/Bibliography.rst +++ b/doc/src/Bibliography.rst @@ -212,58 +212,58 @@ Bibliography C.\ Cercignani and M. Lampis. Trans. Theory Stat. Phys. 1, 2, 101 (1971). **(Cerda)** - Cerda, Ballenegger, Lenz, Holm, J Chem Phys 129, 234104 (2008) + Cerda, Ballenegger, Lenz, Holm, J Chem Phys 129, 234104 (2008) **(Ceriotti)** - Ceriotti, Bussi and Parrinello, J Chem Theory Comput 6, 1170-80 (2010) + Ceriotti, Bussi and Parrinello, J Chem Theory Comput 6, 1170-80 (2010) **(Ceriotti2)** Ceriotti, Bussi and Parrinello, Phys Rev Lett 103, 030603 (2009) **(Cerutti)** - Cerutti, Duke, Darden, Lybrand, Journal of Chemical Theory and Computation 5, 2322 (2009) + Cerutti, Duke, Darden, Lybrand, Journal of Chemical Theory and Computation 5, 2322 (2009) **(Chen)** - J Chen, D Tzou and J Beraun, Int. J. Heat Mass Transfer, 49, 307-316 (2006). + J Chen, D Tzou and J Beraun, Int. J. Heat Mass Transfer, 49, 307-316 (2006). **(Chenoweth_2008)** - Chenoweth, van Duin and Goddard, Journal of Physical Chemistry A, 112, 1040-1053 (2008). + Chenoweth, van Duin and Goddard, Journal of Physical Chemistry A, 112, 1040-1053 (2008). **(Clarke)** Clarke and Smith, J Chem Phys, 84, 2290 (1986). **(Coleman)** - Coleman, Spearot, Capolungo, MSMSE, 21, 055020 (2013). + Coleman, Spearot, Capolungo, MSMSE, 21, 055020 (2013). **(Colliex)** - Colliex et al. International Tables for Crystallography Volume C: Mathematical and Chemical Tables, 249-429 (2004). + Colliex et al. International Tables for Crystallography Volume C: Mathematical and Chemical Tables, 249-429 (2004). **(Cooke)** - "Cooke, Kremer and Deserno, Phys. Rev. E, 72, 011506 (2005)" + "Cooke, Kremer and Deserno, Phys. Rev. E, 72, 011506 (2005)" **(Cornell)** - Cornell, Cieplak, Bayly, Gould, Merz, Ferguson, Spellmeyer, Fox, Caldwell, Kollman, JACS 117, 5179-5197 (1995). + Cornell, Cieplak, Bayly, Gould, Merz, Ferguson, Spellmeyer, Fox, Caldwell, Kollman, JACS 117, 5179-5197 (1995). **(Cusentino)** Cusentino, Wood, and Thompson, J Phys Chem A, xxx, xxxxx, (2020) **(Daivis and Todd)** - Daivis and Todd, J Chem Phys, 124, 194103 (2006). + Daivis and Todd, J Chem Phys, 124, 194103 (2006). **(Daivis and Todd)** - Daivis and Todd, Nonequilibrium Molecular Dynamics (book), Cambridge University Press, https://doi.org/10.1017/9781139017848, (2017). + Daivis and Todd, Nonequilibrium Molecular Dynamics (book), Cambridge University Press, https://doi.org/10.1017/9781139017848, (2017). **(Dammak)** - Dammak, Chalopin, Laroche, Hayoun, and Greffet, Phys Rev Lett, 103, 190601 (2009). + Dammak, Chalopin, Laroche, Hayoun, and Greffet, Phys Rev Lett, 103, 190601 (2009). **(Darden)** - Darden, York, Pedersen, J Chem Phys, 98, 10089 (1993). + Darden, York, Pedersen, J Chem Phys, 98, 10089 (1993). **(Davidchack)** - R.L Davidchack, T.E. Ouldridge, and M.V. Tretyakov. J. Chem. Phys. 142, 144114 (2015). + R.L Davidchack, T.E. Ouldridge, and M.V. Tretyakov. J. Chem. Phys. 142, 144114 (2015). **(Daw1)** - Daw, Baskes, Phys Rev Lett, 50, 1285 (1983). Daw, Baskes, Phys Rev B, 29, 6443 (1984). + Daw, Baskes, Phys Rev Lett, 50, 1285 (1983). Daw, Baskes, Phys Rev B, 29, 6443 (1984). **(Daw2)** M.\ S. Daw, and M. I. Baskes, Phys. Rev. B, 29, 6443 (1984). @@ -272,28 +272,28 @@ Bibliography Shinoda, DeVane, Klein, Soft Matter, 4, 2453-2462 (2008). **(Deserno)** - Deserno and Holm, J Chem Phys, 109, 7694 (1998). + Deserno and Holm, J Chem Phys, 109, 7694 (1998). **(Destree)** M.\ Destree, F. Laupretre, A. Lyulin, and J.-P. Ryckaert, J Chem Phys, 112, 9632 (2000). **(Dobson)** - Dobson, J Chem Phys, 141, 184103 (2014). + Dobson, J Chem Phys, 141, 184103 (2014). **(Duffy)** - D M Duffy and A M Rutherford, J. Phys.: Condens. Matter, 19, 016207-016218 (2007). + D M Duffy and A M Rutherford, J. Phys.: Condens. Matter, 19, 016207-016218 (2007). **(Dullweber)** Dullweber, Leimkuhler and McLachlan, J Chem Phys, 107, 5840 (1997). **(Dunn1)** - Dunn and Noid, J Chem Phys, 143, 243148 (2015). + Dunn and Noid, J Chem Phys, 143, 243148 (2015). **(Dunn2)** Dunn, Lebold, DeLyser, Rudzinski, and Noid, J. Phys. Chem. B, 122, 3363 (2018). **(Dunweg)** - Dunweg and Paul, Int J of Modern Physics C, 2, 817-27 (1991). + Dunweg and Paul, Int J of Modern Physics C, 2, 817-27 (1991). **(EDIP)** J F Justo et al, Phys Rev B 58, 2539 (1998). @@ -308,37 +308,37 @@ Bibliography M.\ Elstner, D. Poresag, G. Jungnickel, J. Elsner, M. Haugk, T. Frauenheim, S. Suhai, and G. Seifert, Phys. Rev. B, 58, 7260 (1998). **(Erdmann)** - U.\ Erdmann , W. Ebeling, L. Schimansky-Geier, and F. Schweitzer, Eur. Phys. J. B 15, 105-113, 2000. + U.\ Erdmann , W. Ebeling, L. Schimansky-Geier, and F. Schweitzer, Eur. Phys. J. B 15, 105-113, 2000. **(Espanol and Revenga)** Espanol, Revenga, Physical Review E, 67, 026705 (2003). **(Espanol1997)** - Espanol, Europhys Lett, 40(6): 631-636 (1997). DOI: 10.1209/epl/i1997-00515-8 + Espanol, Europhys Lett, 40(6): 631-636 (1997). DOI: 10.1209/epl/i1997-00515-8 **(Evans and Morriss)** - Evans and Morriss, Phys Rev A, 30, 1528 (1984). + Evans and Morriss, Phys Rev A, 30, 1528 (1984). **(Evans)** - Evans and Morriss, Phys. Rev. Lett. 56, 2172 (1986). + Evans and Morriss, Phys. Rev. Lett. 56, 2172 (1986). **(Everaers)** - Everaers and Ejtehadi, Phys Rev E, 67, 041710 (2003). + Everaers and Ejtehadi, Phys Rev E, 67, 041710 (2003). **(Faken)** - Faken, Jonsson, Comput Mater Sci, 2, 279 (1994). + Faken, Jonsson, Comput Mater Sci, 2, 279 (1994). **(Fath)** Fath, Hochbruck, Singh, J Comp Phys, 333, 180-198 (2017). **(Fennell)** - C.\ J. Fennell, J. D. Gezelter, J Chem Phys, 124, 234104 (2006). + C.\ J. Fennell, J. D. Gezelter, J Chem Phys, 124, 234104 (2006). **(Feynman)** - R.\ Feynman and A. Hibbs, Chapter 7, Quantum Mechanics and Path Integrals, McGraw-Hill, New York (1965). + R.\ Feynman and A. Hibbs, Chapter 7, Quantum Mechanics and Path Integrals, McGraw-Hill, New York (1965). **(Fichthorn)** - Fichthorn, Balankura, Qi, CrystEngComm, 18(29), 5410-5417 (2016). + Fichthorn, Balankura, Qi, CrystEngComm, 18(29), 5410-5417 (2016). **(Fily)** Y.\ Fily and M.C. Marchetti, Phys. Rev. Lett. 108, 235702, 2012. Default @@ -347,10 +347,10 @@ Bibliography Fincham, Mackrodt and Mitchell, J Phys Condensed Matter, 6, 393-404 (1994). **(Finnis1)** - Finnis, Sinclair, Philosophical Magazine A, 50, 45 (1984). + Finnis, Sinclair, Philosophical Magazine A, 50, 45 (1984). **(Finnis2)** - M.\ W. Finnis, A. T. Paxton, M. Methfessel, and M. van Schilfgarde, Phys. Rev. Lett., 81, 5149 (1998). + M.\ W. Finnis, A. T. Paxton, M. Methfessel, and M. van Schilfgarde, Phys. Rev. Lett., 81, 5149 (1998). **(Fiorin)** Fiorin, Klein, Henin, Mol. Phys., DOI:10.1080/00268976.2013.813594 @@ -359,16 +359,16 @@ Bibliography Fox, O'Keefe, Tabbernor, Acta Crystallogr. A, 45, 786-93 (1989). **(Fraige)** - F.\ Y. Fraige, P. A. Langston, A. J. Matchett, J. Dodds, Particuology, 6, 455 (2008). + F.\ Y. Fraige, P. A. Langston, A. J. Matchett, J. Dodds, Particuology, 6, 455 (2008). **(Freitas)** - Freitas, Asta, and de Koning, Computational Materials Science, 112, 333 (2016). + Freitas, Asta, and de Koning, Computational Materials Science, 112, 333 (2016). **(Frenkel)** Frenkel and Smit, Understanding Molecular Simulation, Academic Press, London, 2002. **(GLE4MD)** - `http://gle4md.org/ `_ + `http://gle4md.org/ `_ **(Gao)** Gao and Weber, Nuclear Instruments and Methods in Physics Research B 191 (2012) 504. @@ -380,7 +380,7 @@ Bibliography Glosli, unpublished, 2005. Streitz, Glosli, Patel, Chan, Yates, de Supinski, Sexton and Gunnels, Journal of Physics: Conference Series, 46, 254 (2006). **(Goldman1)** - Goldman, Reed and Fried, J. Chem. Phys. 131, 204103 (2009) + Goldman, Reed and Fried, J. Chem. Phys. 131, 204103 (2009) **(Goldman2)** Goldman, Srinivasan, Hamel, Fried, Gaus, and Elstner, J. Phys. Chem. C, 117, 7885 (2013). @@ -389,16 +389,16 @@ Bibliography Grime and Voth, to appear in J Chem Theory & Computation (2014). **(Grimme)** - Grimme, J Comput Chem, 27(15), 1787-1799 (2006). + Grimme, J Comput Chem, 27(15), 1787-1799 (2006). **(Gronbech-Jensen1)** - Gronbech Jensen and Gronbech-Jensen, Mol Phys, 117, 2511 (2019) + Gronbech Jensen and Gronbech-Jensen, Mol Phys, 117, 2511 (2019) **(Gronbech-Jensen2)** Gronbech-Jensen and Farago, Mol Phys, 111, 983 (2013) **(Gronbech-Jensen3)** - Hayre, and Farago, Comp Phys Comm, 185, 524 (2014) + Hayre, and Farago, Comp Phys Comm, 185, 524 (2014) **(Groot)** Groot and Warren, J Chem Phys, 107: 4423-4435 (1997). DOI: 10.1063/1.474784 @@ -416,19 +416,19 @@ Bibliography David Hardy thesis: Multilevel Summation for the Fast Evaluation of Forces for the Simulation of Biomolecules, University of Illinois at Urbana-Champaign, (2006). **(Hardy2)** - Hardy, Stone, Schulten, Parallel Computing, 35, 164-177 (2009). + Hardy, Stone, Schulten, Parallel Computing, 35, 164-177 (2009). **(Hecht)** - Hecht, Harting, Ihle, Herrmann, Phys Rev E, 72, 011408 (2005). + Hecht, Harting, Ihle, Herrmann, Phys Rev E, 72, 011408 (2005). **(Henkelman1)** - Henkelman and Jonsson, J Chem Phys, 113, 9978-9985 (2000). + Henkelman and Jonsson, J Chem Phys, 113, 9978-9985 (2000). **(Henkelman2)** - Henkelman, Uberuaga, Jonsson, J Chem Phys, 113, 9901-9904 (2000). + Henkelman, Uberuaga, Jonsson, J Chem Phys, 113, 9901-9904 (2000). **(Henkes)** - Henkes, S, Fily, Y., and Marchetti, M. C. Phys. Rev. E, 84, 040301(R), 2011. + Henkes, S, Fily, Y., and Marchetti, M. C. Phys. Rev. E, 84, 040301(R), 2011. **(Henrich)** O.\ Henrich, Y. A. Gutierrez-Fosado, T. Curk, T. E. Ouldridge, Eur. Phys. J. E 41, 57 (2018). @@ -437,46 +437,46 @@ Bibliography Hess, B. The Journal of Chemical Physics 2002, 116 (1), 209-217. **(Heyes)** - Heyes, Phys Rev B, 49, 755 (1994). + Heyes, Phys Rev B, 49, 755 (1994). **(Hijazi)** - M.\ Hijazi, D. M. Wilkins, M. Ceriotti, J. Chem. Phys. 148, 184109 (2018) + M.\ Hijazi, D. M. Wilkins, M. Ceriotti, J. Chem. Phys. 148, 184109 (2018) **(Hockney)** - Hockney and Eastwood, Computer Simulation Using Particles, Adam Hilger, NY (1989). + Hockney and Eastwood, Computer Simulation Using Particles, Adam Hilger, NY (1989). **(Holian)** - Holian and Ravelo, Phys Rev B, 51, 11275 (1995). + Holian and Ravelo, Phys Rev B, 51, 11275 (1995). **(Hone)** - T.\ Hone, P. Rossky, G. Voth, J Chem Phys, 124, 154103 (2006). + T.\ Hone, P. Rossky, G. Voth, J Chem Phys, 124, 154103 (2006). **(Hoover)** - Hoover, Phys Rev A, 31, 1695 (1985). + Hoover, Phys Rev A, 31, 1695 (1985). **(Hummer)** - Hummer, Gronbech-Jensen, Neumann, J Chem Phys, 109, 2791 (1998) + Hummer, Gronbech-Jensen, Neumann, J Chem Phys, 109, 2791 (1998) **(Hunt)** - Hunt, Mol Simul, 42, 347 (2016). + Hunt, Mol Simul, 42, 347 (2016). **(IPI)** `http://epfl-cosmo.github.io/gle4md/index.html?page=ipi `_ **(IPI-CPC)** - Ceriotti, More and Manolopoulos, Comp Phys Comm, 185, 1019-1026 (2014). + Ceriotti, More and Manolopoulos, Comp Phys Comm, 185, 1019-1026 (2014). **(Ikeshoji)** - Ikeshoji and Hafskjold, Molecular Physics, 81, 251-261 (1994). + Ikeshoji and Hafskjold, Molecular Physics, 81, 251-261 (1994). **(In 't Veld)** - In 't Veld, Ismail, Grest, J Chem Phys (accepted) (2007). + In 't Veld, Ismail, Grest, J Chem Phys (accepted) (2007). **(Isele-Holder)** - Isele-Holder, Mitchell, Ismail, J Chem Phys, 137, 174107 (2012). + Isele-Holder, Mitchell, Ismail, J Chem Phys, 137, 174107 (2012). **(Isele-Holder2)** - Isele-Holder, Mitchell, Hammond, Kohlmeyer, Ismail, J Chem Theory Comput 9, 5412 (2013). + Isele-Holder, Mitchell, Hammond, Kohlmeyer, Ismail, J Chem Theory Comput 9, 5412 (2013). **(Ismail)** Ismail, Tsige, In 't Veld, Grest, Molecular Physics (accepted) (2007). @@ -488,10 +488,10 @@ Bibliography Izrailev, Stepaniants, Isralewitz, Kosztin, Lu, Molnar, Wriggers, Schulten. Computational Molecular Dynamics: Challenges, Methods, Ideas, volume 4 of Lecture Notes in Computational Science and **(Izvekov)** - Izvekov, Voth, J Chem Phys 123, 134105 (2005). + Izvekov, Voth, J Chem Phys 123, 134105 (2005). **(Janssens)** - Janssens, Olmsted, Holm, Foiles, Plimpton, Derlet, Nature Materials, 5, 124-127 (2006). + Janssens, Olmsted, Holm, Foiles, Plimpton, Derlet, Nature Materials, 5, 124-127 (2006). **(Jaramillo-Botero)** Jaramillo-Botero, Su, Qi, Goddard, Large-scale, Long-term Non-adiabatic Electron Molecular Dynamics for Describing Material Properties and Phenomena in Extreme Environments, J Comp @@ -500,28 +500,28 @@ Bibliography Jarzynski, Phys. Rev. Lett. 78, 2690 (1997) **(Jiang)** - Jiang, Hardy, Phillips, MacKerell, Schulten, and Roux, J Phys Chem Lett, 2, 87-92 (2011). + Jiang, Hardy, Phillips, MacKerell, Schulten, and Roux, J Phys Chem Lett, 2, 87-92 (2011). **(Johnson et al, 1971)** Johnson, K. L., Kendall, K., & Roberts, A. D. (1971). Surface energy and the contact of elastic solids. Proc. R. Soc. Lond. A, 324(1558), 301-313. **(Jones)** - Jones, RE; Templeton, JA; Wagner, GJ; Olmsted, D; Modine, JA, "Electron transport enhanced molecular dynamics for metals and semi-metals." International Journal for Numerical Methods in Engineering (2010), 83:940. + Jones, RE; Templeton, JA; Wagner, GJ; Olmsted, D; Modine, JA, "Electron transport enhanced molecular dynamics for metals and semi-metals." International Journal for Numerical Methods in Engineering (2010), 83:940. **(Jonsson)** Jonsson, Mills and Jacobsen, in Classical and Quantum Dynamics in Condensed Phase Simulations, edited by Berne, Ciccotti, and Coker World Scientific, Singapore, 1998, p 385. **(Jorgensen)** - Jorgensen, Chandrasekhar, Madura, Impey, Klein, J Chem Phys, 79, 926 (1983). + Jorgensen, Chandrasekhar, Madura, Impey, Klein, J Chem Phys, 79, 926 (1983). **(Jusufi)** Jusufi, Hynninen, and Panagiotopoulos, J Phys Chem B, 112, 13783 (2008). **(Kamberaj)** - Kamberaj, Low, Neal, J Chem Phys, 122, 224114 (2005). + Kamberaj, Low, Neal, J Chem Phys, 122, 224114 (2005). **(Katsura)** - H.\ Katsura, N. Nagaosa, A.V. Balatsky. Phys. Rev. Lett., 95(5), 057205. (2005) + H.\ Katsura, N. Nagaosa, A.V. Balatsky. Phys. Rev. Lett., 95(5), 057205. (2005) **(Kelchner)** Kelchner, Plimpton, Hamilton, Phys Rev B, 58, 11085 (1998). @@ -530,16 +530,16 @@ Bibliography Khrapak, Chaudhuri, and Morfill, J Chem Phys, 134, 054120 (2011). **(Kim)** - Kim, Keyes, Straub, J Chem. Phys, 132, 224107 (2010). + Kim, Keyes, Straub, J Chem. Phys, 132, 224107 (2010). **(Klapp)** - Klapp, Schoen, J Chem Phys, 117, 8050 (2002). + Klapp, Schoen, J Chem Phys, 117, 8050 (2002). **(Kolafa)** - Kolafa and Perram, Molecular Simulation, 9, 351 (1992). + Kolafa and Perram, Molecular Simulation, 9, 351 (1992). **(Kolmogorov)** - A.\ N. Kolmogorov, V. H. Crespi, Phys. Rev. B 71, 235415 (2005). + A.\ N. Kolmogorov, V. H. Crespi, Phys. Rev. B 71, 235415 (2005). **(Kong)** L.T. Kong, G. Bartels, C. Campana, C. Denniston, and Martin H. Muser, `Computer Physics Communications [180](6):1004-1010 (2009). `_ @@ -548,19 +548,19 @@ Bibliography L.T. Kong, `Computer Physics Communications [182](10):2201-2207, (2011). `_ **(Kremer)** - Kremer, Grest, J Chem Phys, 92, 5057 (1990). + Kremer, Grest, J Chem Phys, 92, 5057 (1990). **(Kuhn and Bagi, 2005)** Kuhn, M. R., & Bagi, K. (2004). Contact rolling and deformation in granular media. International journal of solids and structures, 41(21), 5793-5820. **(Kumagai)** - T.\ Kumagai, S. Izumi, S. Hara, S. Sakai, Comp. Mat. Science, 39, 457 (2007). + T.\ Kumagai, S. Izumi, S. Hara, S. Sakai, Comp. Mat. Science, 39, 457 (2007). **(Kumar)** Kumar and Higdon, Phys Rev E, 82, 051401 (2010). **(Kumar)** - Kumar and Skinner, J. Phys. Chem. B, 112, 8311 (2008) + Kumar and Skinner, J. Phys. Chem. B, 112, 8311 (2008) **(Lamoureux and Roux)** G.\ Lamoureux, B. Roux, J. Chem. Phys 119, 3025 (2003) @@ -587,31 +587,31 @@ Bibliography Lechman, et al, in preparation (2010). **(Lee)** - Lee, Baskes, Phys. Rev. B, 62, 8564-8567 (2000). + Lee, Baskes, Phys. Rev. B, 62, 8564-8567 (2000). **(Lee2)** - Lee, Baskes, Kim, Cho. Phys. Rev. B, 64, 184102 (2001). + Lee, Baskes, Kim, Cho. Phys. Rev. B, 64, 184102 (2001). **(Lenart)** - Lenart , Jusufi, and Panagiotopoulos, J Chem Phys, 126, 044509 (2007). + Lenart , Jusufi, and Panagiotopoulos, J Chem Phys, 126, 044509 (2007). **(Lenosky)** Lenosky, Sadigh, Alonso, Bulatov, de la Rubia, Kim, Voter, Kress, Modelling Simulation Materials Science Engineering, 8, 825 (2000). **(Leven1)** - I.\ Leven, I. Azuri, L. Kronik and O. Hod, J. Chem. Phys. 140, 104106 (2014). + I.\ Leven, I. Azuri, L. Kronik and O. Hod, J. Chem. Phys. 140, 104106 (2014). **(Leven2)** - I.\ Leven et al, J. Chem.Theory Comput. 12, 2896-905 (2016). + I.\ Leven et al, J. Chem.Theory Comput. 12, 2896-905 (2016). **(Li2013_POF)** - Li, Hu, Wang, Ma, Zhou, Phys Fluids, 25: 072103 (2013). DOI: 10.1063/1.4812366. + Li, Hu, Wang, Ma, Zhou, Phys Fluids, 25: 072103 (2013). DOI: 10.1063/1.4812366. **(Li2014_JCP)** Li, Tang, Lei, Caswell, Karniadakis, J Comput Phys, 265: 113-127 (2014). DOI: 10.1016/j.jcp.2014.02.003. **(Li2015_CC)** - Li, Tang, Li, Karniadakis, Chem Commun, 51: 11038-11040 (2015). DOI: 10.1039/C5CC01684C. + Li, Tang, Li, Karniadakis, Chem Commun, 51: 11038-11040 (2015). DOI: 10.1039/C5CC01684C. **(Li2015_JCP)** Li, Yazdani, Tartakovsky, Karniadakis, J Chem Phys, 143: 014101 (2015). DOI: 10.1063/1.4923254. @@ -632,19 +632,19 @@ Bibliography J.\ H. Los et al. "Extended Tersoff potential for boron nitride: Energetics and elastic properties of pristine and defective h-BN", Phys. Rev. B 96 (184108), 2017. **(Luding, 2008)** - Luding, S. (2008). Cohesive, frictional powders: contact models for tension. Granular matter, 10(4), 235. + Luding, S. (2008). Cohesive, frictional powders: contact models for tension. Granular matter, 10(4), 235. **(Maaravi)** - T.\ Maaravi et al, J. Phys. Chem. C 121, 22826-22835 (2017). + T.\ Maaravi et al, J. Phys. Chem. C 121, 22826-22835 (2017). **(MacKerell)** MacKerell, Bashford, Bellott, Dunbrack, Evanseck, Field, Fischer, Gao, Guo, Ha, et al, J Phys Chem B, 102, 3586 (1998). **(Mackay and Denniston)** - Mackay, F. E., and Denniston, C., Coupling MD particles to a lattice-Boltzmann fluid through the use of conservative forces, J. Comput. Phys. 237 (2013) 289-298. + Mackay, F. E., and Denniston, C., Coupling MD particles to a lattice-Boltzmann fluid through the use of conservative forces, J. Comput. Phys. 237 (2013) 289-298. **(Mackay et al.)** - Mackay, F. E., Ollila, S.T.T., and Denniston, C., Hydrodynamic Forces Implemented into LAMMPS through a lattice-Boltzmann fluid, Computer Physics Communications 184 (2013) 2021-2031. + Mackay, F. E., Ollila, S.T.T., and Denniston, C., Hydrodynamic Forces Implemented into LAMMPS through a lattice-Boltzmann fluid, Computer Physics Communications 184 (2013) 2021-2031. **(Magda)** Magda, Tirrell, Davis, J Chem Phys, 83, 1888-1901 (1985); erratum in JCP 84, 2901 (1986). @@ -668,70 +668,70 @@ Bibliography Marshall, J. S. (2009). Discrete-element modeling of particulate aerosol flows. Journal of Computational Physics, 228(5), 1541-1561. **(Martyna1992)** - Martyna, Klein, Tuckerman, J Chem Phys, 97, 2635 (1992); Martyna, Tuckerman, Tobias, Klein, Mol Phys, 87, 1117. + Martyna, Klein, Tuckerman, J Chem Phys, 97, 2635 (1992); Martyna, Tuckerman, Tobias, Klein, Mol Phys, 87, 1117. **(Martyna1994)** - Martyna, Tobias and Klein, J Chem Phys, 101, 4177 (1994). + Martyna, Tobias and Klein, J Chem Phys, 101, 4177 (1994). **(Mason)** - J.\ K. Mason, Acta Cryst A65, 259 (2009). + J.\ K. Mason, Acta Cryst A65, 259 (2009). **(Mattice)** - Mattice, Suter, Conformational Theory of Large Molecules, Wiley, New York, 1994. + Mattice, Suter, Conformational Theory of Large Molecules, Wiley, New York, 1994. **(Maxwell)** - J.C. Maxwell, Philos. Tans. Royal Soc. London, 157: 49-88 (1867). + J.C. Maxwell, Philos. Tans. Royal Soc. London, 157: 49-88 (1867). **(Mayergoyz)** - I.D. Mayergoyz, G. Bertotti, C. Serpico (2009). Elsevier (2009) + I.D. Mayergoyz, G. Bertotti, C. Serpico (2009). Elsevier (2009) **(Mayo)** - Mayo, Olfason, Goddard III, J Phys Chem, 94, 8897-8909 (1990). + Mayo, Olfason, Goddard III, J Phys Chem, 94, 8897-8909 (1990). **(Mees)** - M.\ J. Mees, G. Pourtois, E. C. Neyts, B. J. Thijsse, and A. Stesmans, Phys. Rev. B 85, 134301 (2012). + M.\ J. Mees, G. Pourtois, E. C. Neyts, B. J. Thijsse, and A. Stesmans, Phys. Rev. B 85, 134301 (2012). **(Mei)** Mei, Davenport, Fernando, Phys Rev B, 43 4653 (1991) **(Melchor)** - Gonzalez-Melchor, Mayoral, Velazquez, and Alejandre, J Chem Phys, 125, 224107 (2006). + Gonzalez-Melchor, Mayoral, Velazquez, and Alejandre, J Chem Phys, 125, 224107 (2006). **(Meloni)** Meloni, Rosati and Colombo, J Chem Phys, 126, 121102 (2007). **(Meremianin)** - Meremianin, J. Phys. A, 39, 3099 (2006). + Meremianin, J. Phys. A, 39, 3099 (2006). **(Mezei)** - Mezei, J Chem Phys, 86, 7084 (1987) + Mezei, J Chem Phys, 86, 7084 (1987) **(Mickel)** - W.\ Mickel, S. C. Kapfer, G. E. Schroeder-Turkand, K. Mecke, J. Chem. Phys. 138, 044501 (2013). + W.\ Mickel, S. C. Kapfer, G. E. Schroeder-Turkand, K. Mecke, J. Chem. Phys. 138, 044501 (2013). **(Mie)** - G.\ Mie, Ann Phys, 316, 657 (1903). + G.\ Mie, Ann Phys, 316, 657 (1903). **(Miller1)** - T.\ F. Miller III, M. Eleftheriou, P. Pattnaik, A. Ndirango, G. J. Martyna, J. Chem. Phys., 116, 8649-8659 (2002). + T.\ F. Miller III, M. Eleftheriou, P. Pattnaik, A. Ndirango, G. J. Martyna, J. Chem. Phys., 116, 8649-8659 (2002). **(Miller2)** Miller, Tadmor, Gibson, Bernstein and Pavia, J Chem Phys, 144, 184107 (2016). **(Minary)** - Minary, Martyna, and Tuckerman, J Chem Phys, 18, 2510 (2003). + Minary, Martyna, and Tuckerman, J Chem Phys, 18, 2510 (2003). **(Mindlin and Deresiewicz, 1953)** Mindlin, R.D., & Deresiewicz, H (1953). Elastic Spheres in Contact under Varying Oblique Force. J. Appl. Mech., ASME 20, 327-344. **(Mindlin, 1949)** - Mindlin, R. D. (1949). Compliance of elastic bodies in contact. J. Appl. Mech., ASME 16, 259-268. + Mindlin, R. D. (1949). Compliance of elastic bodies in contact. J. Appl. Mech., ASME 16, 259-268. **(Miron)** R.\ A. Miron and K. A. Fichthorn, J Chem Phys, 119, 6210 (2003). **(Mishin)** - Mishin, Mehl, and Papaconstantopoulos, Acta Mater, 53, 4029 (2005). + Mishin, Mehl, and Papaconstantopoulos, Acta Mater, 53, 4029 (2005). **(Mitchell and Finchham)** Mitchell, Finchham, J Phys Condensed Matter, 5, 1031-1038 (1993). @@ -755,13 +755,13 @@ Bibliography Y.\ Mori, Y. Okamoto, J. Phys. Soc. Jpn., 7, 074003 (2010). **(Moriarty1)** - Moriarty, Physical Review B, 38, 3199 (1988). + Moriarty, Physical Review B, 38, 3199 (1988). **(Moriarty2)** - Moriarty, Physical Review B, 42, 1609 (1990). Moriarty, Physical Review B 49, 12431 (1994). + Moriarty, Physical Review B, 42, 1609 (1990). Moriarty, Physical Review B 49, 12431 (1994). **(Moriarty3)** - Moriarty, Benedict, Glosli, Hood, Orlikowski, Patel, Soderlind, Streitz, Tang, and Yang, Journal of Materials Research, 21, 563 (2006). + Moriarty, Benedict, Glosli, Hood, Orlikowski, Patel, Soderlind, Streitz, Tang, and Yang, Journal of Materials Research, 21, 563 (2006). **(Morris)** Morris, Fox, Zhu, J Comp Physics, 136, 214-226 (1997). @@ -770,22 +770,22 @@ Bibliography Sabry G. Moustafa, Andrew J. Schultz, and David A. Kofke, *Very fast averaging of thermal properties of crystals by molecular simulation*\ , `Phys. Rev. E [92], 043303 (2015) `_ **(Muller-Plathe1)** - Muller-Plathe, J Chem Phys, 106, 6082 (1997). + Muller-Plathe, J Chem Phys, 106, 6082 (1997). **(Muller-Plathe2)** - Muller-Plathe, Phys Rev E, 59, 4894-4898 (1999). + Muller-Plathe, Phys Rev E, 59, 4894-4898 (1999). **(Murdick)** - D.A. Murdick, X.W. Zhou, H.N.G. Wadley, D. Nguyen-Manh, R. Drautz, and D.G. Pettifor, Phys. Rev. B, 73, 45206 (2006). + D.A. Murdick, X.W. Zhou, H.N.G. Wadley, D. Nguyen-Manh, R. Drautz, and D.G. Pettifor, Phys. Rev. B, 73, 45206 (2006). **(Murty)** - M.V.R. Murty, H.A. Atwater, Phys Rev B, 51, 4889 (1995). + M.V.R. Murty, H.A. Atwater, Phys Rev B, 51, 4889 (1995). **(Nakano)** - A.\ Nakano, Computer Physics Communications, 104, 59-69 (1997). + A.\ Nakano, Computer Physics Communications, 104, 59-69 (1997). **(Neelov)** - Neelov, Holm, J Chem Phys 132, 234103 (2010) + Neelov, Holm, J Chem Phys 132, 234103 (2010) **(Negre2016)** C.\ F. A. Negre, S. M. Mniszewski, M. J. Cawkwell, N. Bock, M. E. Wall, and A. M. N. Niklasson, J. Chem. Theory Comp., 12, 3063 (2016). @@ -806,31 +806,31 @@ Bibliography The spline-based MEAM+SW format was first devised and used to develop potentials for bcc transition metals by Jeremy Nicklas, Michael Fellinger, **(Niklasson2002)** - A.\ M. N. Niklasson, Phys. Rev. B, 66, 155115 (2002). + A.\ M. N. Niklasson, Phys. Rev. B, 66, 155115 (2002). **(Niklasson2008)** - A.\ M. N. Niklasson, Phys. Rev. Lett., 100, 123004 (2008). + A.\ M. N. Niklasson, Phys. Rev. Lett., 100, 123004 (2008). **(Niklasson2014)** - A.\ M. N. Niklasson and M. Cawkwell, J. Chem. Phys., 141, 164123, (2014). + A.\ M. N. Niklasson and M. Cawkwell, J. Chem. Phys., 141, 164123, (2014). **(Niklasson2017)** - A.\ M. N. Niklasson, J. Chem. Phys., 147, 054103 (2017). + A.\ M. N. Niklasson, J. Chem. Phys., 147, 054103 (2017). **(Noid)** Noid, Chu, Ayton, Krishna, Izvekov, Voth, Das, Andersen, J Chem Phys 128, 134105 (2008). **(Nordlund95)** - Nordlund, Kai. Computational materials science 3.4 (1995): 448-456. + Nordlund, Kai. Computational materials science 3.4 (1995): 448-456. **(Nordlund98)** - Nordlund, Kai, et al. Physical Review B 57.13 (1998): 7556. + Nordlund, Kai, et al. Physical Review B 57.13 (1998): 7556. **(Norman)** - G E Norman, S V Starikov, V V Stegailov et al., Contrib. Plasma Phys., 53, 129-139 (2013). + G E Norman, S V Starikov, V V Stegailov et al., Contrib. Plasma Phys., 53, 129-139 (2013). **(Noskov)** - Noskov, Lamoureux and Roux, J Phys Chem B, 109, 6705 (2005). + Noskov, Lamoureux and Roux, J Phys Chem B, 109, 6705 (2005). **(Nurdin)** Nurdin and Schotte Phys Rev E, 61(4), 3579 (2000) @@ -839,31 +839,31 @@ Bibliography O'Connor et al., J. Chem. Phys. 142, 024903 (2015). **(Okabe)** - T.\ Okabe, M. Kawata, Y. Okamoto, M. Masuhiro, Chem. Phys. Lett., 335, 435-439 (2001). + T.\ Okabe, M. Kawata, Y. Okamoto, M. Masuhiro, Chem. Phys. Lett., 335, 435-439 (2001). **(Ollila et al.)** - Ollila, S.T.T., Denniston, C., Karttunen, M., and Ala-Nissila, T., Fluctuating lattice-Boltzmann model for complex fluids, J. Chem. Phys. 134 (2011) 064902. + Ollila, S.T.T., Denniston, C., Karttunen, M., and Ala-Nissila, T., Fluctuating lattice-Boltzmann model for complex fluids, J. Chem. Phys. 134 (2011) 064902. **(Omelyan)** - Omelyan, Mryglod, and Folk. Phys. Rev. Lett. 86(5), 898. (2001). + Omelyan, Mryglod, and Folk. Phys. Rev. Lett. 86(5), 898. (2001). **(Oppelstrup)** Oppelstrup, unpublished, 2015. Oppelstrup and Moriarty, to be published. **(Orsi)** - Orsi & Essex, The ELBA force field for coarse-grain modeling of lipid membranes, PloS ONE 6(12): e28637, 2011. + Orsi & Essex, The ELBA force field for coarse-grain modeling of lipid membranes, PloS ONE 6(12): e28637, 2011. **(Otis R. Walton)** - Walton, O.R., Personal Communication + Walton, O.R., Personal Communication **(Ouldridge)** - T.E. Ouldridge, A.A. Louis, J.P.K. Doye, J. Chem. Phys. 134, 085101 (2011). + T.E. Ouldridge, A.A. Louis, J.P.K. Doye, J. Chem. Phys. 134, 085101 (2011). **(Ouldridge-DPhil)** - T.E. Ouldridge, Coarse-grained modelling of DNA and DNA self-assembly, DPhil. University of Oxford (2011). + T.E. Ouldridge, Coarse-grained modelling of DNA and DNA self-assembly, DPhil. University of Oxford (2011). **(Ouyang1)** - W.\ Ouyang, D. Mandelli, M. Urbakh and O. Hod, Nano Lett. 18, 6009-6016 (2018). + W.\ Ouyang, D. Mandelli, M. Urbakh and O. Hod, Nano Lett. 18, 6009-6016 (2018). **(Ouyang2)** W.\ Ouyang et al., J. Chem. Theory Comput. 16(1), 666-676 (2020). @@ -872,28 +872,28 @@ Bibliography PASS webpage: https://www.sdu.dk/en/DPASS **(PLUMED)** - G.A. Tribello, M. Bonomi, D. Branduardi, C. Camilloni and G. Bussi, Comp. Phys. Comm 185, 604 (2014) + G.A. Tribello, M. Bonomi, D. Branduardi, C. Camilloni and G. Bussi, Comp. Phys. Comm 185, 604 (2014) **(Paquay)** Paquay and Kusters, Biophys. J., 110, 6, (2016). preprint available at `arXiv:1411.3019 `_. **(Park)** - Park, Schulten, J. Chem. Phys. 120 (13), 5946 (2004) + Park, Schulten, J. Chem. Phys. 120 (13), 5946 (2004) **(Parks)** - Parks, Lehoucq, Plimpton, Silling, Comp Phys Comm, 179(11), 777-783 (2008). + Parks, Lehoucq, Plimpton, Silling, Comp Phys Comm, 179(11), 777-783 (2008). **(Parrinello1981)** Parrinello and Rahman, J Appl Phys, 52, 7182 (1981). **(Paula Leite2016)** - Paula Leite , Freitas, Azevedo, and de Koning, J Chem Phys, 126, 044509 (2016). + Paula Leite , Freitas, Azevedo, and de Koning, J Chem Phys, 126, 044509 (2016). **(Paula Leite2017)** - Paula Leite, Santos-Florez, and de Koning, Phys Rev E, 96, 32115 (2017). + Paula Leite, Santos-Florez, and de Koning, Phys Rev E, 96, 32115 (2017). **(Pearlman)** - Pearlman, J Chem Phys, 98, 1487 (1994) + Pearlman, J Chem Phys, 98, 1487 (1994) **(Pedersen)** Pedersen, J. Chem. Phys., 139, 104102 (2013). @@ -902,34 +902,34 @@ Bibliography Peng, Ren, Dudarev, Whelan, Acta Crystallogr. A, 52, 257-76 (1996). **(Perram)** - Perram and Rasmussen, Phys Rev E, 54, 6565-6572 (1996). + Perram and Rasmussen, Phys Rev E, 54, 6565-6572 (1996). **(Petersen)** - Petersen, J Chem Phys, 103, 3668 (1995). + Petersen, J Chem Phys, 103, 3668 (1995). **(Petersen)** - Petersen, Lechman, Plimpton, Grest, in' t Veld, Schunk, J Chem Phys, 132, 174106 (2010). + Petersen, Lechman, Plimpton, Grest, in' t Veld, Schunk, J Chem Phys, 132, 174106 (2010). **(Pettifor_1)** - D.G. Pettifor and I.I. Oleinik, Phys. Rev. B, 59, 8487 (1999). + D.G. Pettifor and I.I. Oleinik, Phys. Rev. B, 59, 8487 (1999). **(Pettifor_2)** - D.G. Pettifor and I.I. Oleinik, Phys. Rev. Lett., 84, 4124 (2000). + D.G. Pettifor and I.I. Oleinik, Phys. Rev. Lett., 84, 4124 (2000). **(Pettifor_3)** - D.G. Pettifor and I.I. Oleinik, Phys. Rev. B, 65, 172103 (2002). + D.G. Pettifor and I.I. Oleinik, Phys. Rev. B, 65, 172103 (2002). **(Phillips)** C.\ L. Phillips, J. A. Anderson, S. C. Glotzer, Comput Phys Comm, 230, 7191-7201 (2011). **(Piaggi)** - Piaggi and Parrinello, J Chem Phys, 147, 114112 (2017). + Piaggi and Parrinello, J Chem Phys, 147, 114112 (2017). **(Pisarev)** V V Pisarev and S V Starikov, J. Phys.: Condens. Matter, 26, 475401 (2014). **(Pollock)** - Pollock and Glosli, Comp Phys Comm, 95, 93 (1996). + Pollock and Glosli, Comp Phys Comm, 95, 93 (1996). **(Price1)** Price and Brooks, J Chem Phys, 121, 10096 (2004). @@ -947,58 +947,58 @@ Bibliography J.\ Ramirez, S.K. Sukumaran, B. Vorselaars and A.E. Likhtman, J. Chem. Phys. 133, 154103 (2010). **(Rappe)** - Rappe and Goddard III, Journal of Physical Chemistry, 95, 3358-3363 (1991). + Rappe and Goddard III, Journal of Physical Chemistry, 95, 3358-3363 (1991). **(Ravelo)** Ravelo, Holian, Germann and Lomdahl, Phys Rev B, 70, 014103 (2004). **(ReaxFF)** - A.\ C. T. van Duin, S. Dasgupta, F. Lorant, W. A. Goddard III, J Physical Chemistry, 105, 9396-9049 (2001) + A.\ C. T. van Duin, S. Dasgupta, F. Lorant, W. A. Goddard III, J Physical Chemistry, 105, 9396-9049 (2001) **(Rector)** Rector, Van Swol, Henderson, Molecular Physics, 82, 1009 (1994). **(Ree)** - Ree, Journal of Chemical Physics, 73, 5401 (1980). + Ree, Journal of Chemical Physics, 73, 5401 (1980). **(Reed)** - Reed, Fried, and Joannopoulos, Phys. Rev. Lett., 90, 235503 (2003). + Reed, Fried, and Joannopoulos, Phys. Rev. Lett., 90, 235503 (2003). **(Reed2)** - Reed, J. Phys. Chem. C, 116, 2205 (2012). + Reed, J. Phys. Chem. C, 116, 2205 (2012). **(Rick)** S.\ W. Rick, S. J. Stuart, B. J. Berne, J Chem Phys 101, 16141 (1994). **(Rohart)** - Rohart and Thiaville, Physical Review B, 88(18), 184422. (2013). + Rohart and Thiaville, Physical Review B, 88(18), 184422. (2013). **(Rosenberger)** Rosenberger, Sanyal, Shell and van der Vegt, Journal of Chemical Physics, 2019, 151 (4), 044111. **(Rubensson)** - E.\ H. Rubensson, A. M. N. Niklasson, SIAM J. Sci. Comput. 36 (2), 147-170, (2014). + E.\ H. Rubensson, A. M. N. Niklasson, SIAM J. Sci. Comput. 36 (2), 147-170, (2014). **(Rutherford)** - A M Rutherford and D M Duffy, J. Phys.: Condens. Matter, 19, 496201-496210 (2007). + A M Rutherford and D M Duffy, J. Phys.: Condens. Matter, 19, 496201-496210 (2007). **(Ryckaert)** - J.-P. Ryckaert, G. Ciccotti and H. J. C. Berendsen, J of Comp Phys, 23, 327-341 (1977). + J.-P. Ryckaert, G. Ciccotti and H. J. C. Berendsen, J of Comp Phys, 23, 327-341 (1977). **(SMTB-Q_1)** - N.\ Salles, O. Politano, E. Amzallag, R. Tetot, Comput. Mater. Sci. 111 (2016) 181-189 + N.\ Salles, O. Politano, E. Amzallag, R. Tetot, Comput. Mater. Sci. 111 (2016) 181-189 **(SMTB-Q_2)** - E.\ Maras, N. Salles, R. Tetot, T. Ala-Nissila, H. Jonsson, J. Phys. Chem. C 2015, 119, 10391-10399 + E.\ Maras, N. Salles, R. Tetot, T. Ala-Nissila, H. Jonsson, J. Phys. Chem. C 2015, 119, 10391-10399 **(SMTB-Q_3)** - R.\ Tetot, N. Salles, S. Landron, E. Amzallag, Surface Science 616, 19-8722 28 (2013) + R.\ Tetot, N. Salles, S. Landron, E. Amzallag, Surface Science 616, 19-8722 28 (2013) **(SRIM)** - SRIM webpage: http://www.srim.org/ + SRIM webpage: http://www.srim.org/ **(SW)** - F.\ H. Stillinger, and T. A. Weber, Phys. Rev. B, 31, 5262 (1985). + F.\ H. Stillinger, and T. A. Weber, Phys. Rev. B, 31, 5262 (1985). **(SWM4-NDP)** Lamoureux, Harder, Vorobyov, Roux, MacKerell, Chem Phys Let, 418, 245-249 (2006) @@ -1013,10 +1013,10 @@ Bibliography Salerno, Bernstein, J Chem Theory Comput, --, ---- (2018). **(Sanyal1)** - Sanyal and Shell, Journal of Chemical Physics, 2016, 145 (3), 034109. + Sanyal and Shell, Journal of Chemical Physics, 2016, 145 (3), 034109. **(Sanyal2)** - Sanyal and Shell, Journal of Physical Chemistry B, 122 (21), 5678-5693. + Sanyal and Shell, Journal of Physical Chemistry B, 122 (21), 5678-5693. **(Schelling)** Patrick K. Schelling, Comp. Mat. Science, 44, 274 (2008). @@ -1028,43 +1028,43 @@ Bibliography Schlitter and Klahn, "The free energy of a reaction coordinate at multiple constraints: a concise formulation", Molecular Physics, 101, 3439-3443 (2003). **(Schmid)** - S.\ Bureekaew, S. Amirjalayer, M. Tafipolsky, C. Spickermann, T.K. Roy and R. Schmid, Phys. Status Solidi B, 6, 1128 (2013). + S.\ Bureekaew, S. Amirjalayer, M. Tafipolsky, C. Spickermann, T.K. Roy and R. Schmid, Phys. Status Solidi B, 6, 1128 (2013). **(Schneider)** - Schneider and Stoll, Phys Rev B, 17, 1302 (1978). + Schneider and Stoll, Phys Rev B, 17, 1302 (1978). **(Schratt & Mohles)** Schratt, Mohles. Comp. Mat. Sci. 182 (2020) 109774 ---------- **(Schroeder)** - Schroeder and Steinhauser, J Chem Phys, 133, 154511 (2010). + Schroeder and Steinhauser, J Chem Phys, 133, 154511 (2010). **(Semaev)** - Semaev, Cryptography and Lattices, 181 (2001). + Semaev, Cryptography and Lattices, 181 (2001). **(Sheppard)** Sheppard, Terrell, Henkelman, J Chem Phys, 128, 134106 (2008). See ref 1 in this paper for original reference to Qmin in Jonsson, Mills, Jacobsen. **(Shinoda)** - Shinoda, DeVane, Klein, Mol Sim, 33, 27 (2007). + Shinoda, DeVane, Klein, Mol Sim, 33, 27 (2007). **(Shinoda)** - Shinoda, Shiga, and Mikami, Phys Rev B, 69, 134103 (2004). + Shinoda, Shiga, and Mikami, Phys Rev B, 69, 134103 (2004). **(Sides)** Sides, Grest, Stevens, Plimpton, J Polymer Science B, 42, 199-208 (2004). **(Silbert)** - Silbert, Ertas, Grest, Halsey, Levine, Plimpton, Phys Rev E, 64, p 051302 (2001). + Silbert, Ertas, Grest, Halsey, Levine, Plimpton, Phys Rev E, 64, p 051302 (2001). **(Silbert, 2001)** Silbert, L. E., Ertas, D., Grest, G. S., Halsey, T. C., Levine, D., & Plimpton, S. J. (2001). Granular flow down an inclined plane: Bagnold scaling and rheology. Physical Review E, **(Silling 2000)** - Silling, J Mech Phys Solids, 48, 175-209 (2000). + Silling, J Mech Phys Solids, 48, 175-209 (2000). **(Silling 2007)** - Silling, Epton, Weckner, Xu, Askari, J Elasticity, 88, 151-184 (2007). + Silling, Epton, Weckner, Xu, Askari, J Elasticity, 88, 151-184 (2007). **(Singh)** Singh and Warner, Acta Mater, 58, 5797-5805 (2010), @@ -1073,85 +1073,85 @@ Bibliography Sirk TW, Sliozberg YR, Brennan JK, Lisal M, Andzelm JW, J Chem Phys, 136 (13) 134903, 2012. **(Sirk2)** - Sirk, Moore, Brown, J Chem Phys, 138, 064505 (2013). + Sirk, Moore, Brown, J Chem Phys, 138, 064505 (2013). **(Skomski)** Skomski, R. (2008). Simple models of magnetism. Oxford University Press. **(Snodin)** - B.E. Snodin, F. Randisi, M. Mosayebi, et al., J. Chem. Phys. 142, 234901 (2015). + B.E. Snodin, F. Randisi, M. Mosayebi, et al., J. Chem. Phys. 142, 234901 (2015). **(Srivastava)** - Zhigilei, Wei, Srivastava, Phys. Rev. B 71, 165417 (2005). + Zhigilei, Wei, Srivastava, Phys. Rev. B 71, 165417 (2005). **(Steinbach)** Steinbach, Brooks, J Comput Chem, 15, 667 (1994). **(Steinhardt)** - P.\ Steinhardt, D. Nelson, and M. Ronchetti, Phys. Rev. B 28, 784 (1983). + P.\ Steinhardt, D. Nelson, and M. Ronchetti, Phys. Rev. B 28, 784 (1983). **(Stiles)** - Stiles , Hubbard, and Kayser, J Chem Phys, 77, 6189 (1982). + Stiles , Hubbard, and Kayser, J Chem Phys, 77, 6189 (1982). **(Stillinger)** - Stillinger, Weber, Phys. Rev. B 31, 5262 (1985). + Stillinger, Weber, Phys. Rev. B 31, 5262 (1985). **(Stoddard)** - Stoddard and Ford, Phys Rev A, 8, 1504 (1973). + Stoddard and Ford, Phys Rev A, 8, 1504 (1973). **(Streitz)** - F.\ H. Streitz, J. W. Mintmire, Phys Rev B, 50, 11996-12003 (1994). + F.\ H. Streitz, J. W. Mintmire, Phys Rev B, 50, 11996-12003 (1994). **(Strong)** - Strong and Eaves, J. Phys. Chem. B 121, 189 (2017). + Strong and Eaves, J. Phys. Chem. B 121, 189 (2017). **(Stuart)** - Stuart, Tutein, Harrison, J Chem Phys, 112, 6472-6486 (2000). + Stuart, Tutein, Harrison, J Chem Phys, 112, 6472-6486 (2000). **(Stukowski)** - Stukowski, Sadigh, Erhart, Caro; Modeling Simulation Materials Science & Engineering, 7, 075005 (2009). + Stukowski, Sadigh, Erhart, Caro; Modeling Simulation Materials Science & Engineering, 7, 075005 (2009). **(Su)** - Su and Goddard, Excited Electron Dynamics Modeling of Warm Dense Matter, Phys Rev Lett, 99:185003 (2007). + Su and Goddard, Excited Electron Dynamics Modeling of Warm Dense Matter, Phys Rev Lett, 99:185003 (2007). **(Sulc1)** - P.\ Sulc, F. Romano, T. E. Ouldridge, et al., J. Chem. Phys. 140, 235102 (2014). + P.\ Sulc, F. Romano, T. E. Ouldridge, et al., J. Chem. Phys. 140, 235102 (2014). **(Sulc2)** P.\ Sulc, F. Romano, T.E. Ouldridge, L. Rovigatti, J.P.K. Doye, A.A. Louis, J. Chem. Phys. 137, 135101 (2012). **(Sun)** - Sun, J. Phys. Chem. B, 102, 7338-7364 (1998). + Sun, J. Phys. Chem. B, 102, 7338-7364 (1998). **(Surblys)** - Surblys, Matsubara, Kikugawa, Ohara, Phys Rev E, 99, 051301(R) (2019). + Surblys, Matsubara, Kikugawa, Ohara, Phys Rev E, 99, 051301(R) (2019). **(Sutmann)** - Sutmann, Arnold, Fahrenberger, et. al., Physical review / E 88(6), 063308 (2013) + Sutmann, Arnold, Fahrenberger, et. al., Physical review / E 88(6), 063308 (2013) **(Swinburne)** Swinburne and Marinica, Physical Review Letters, 120, 1 (2018) **(Tadmor)** - Tadmor, Elliott, Sethna, Miller and Becker, JOM, 63, 17 (2011). doi: `https://doi.org/10.1007/s11837-011-0102-6 `_ + Tadmor, Elliott, Sethna, Miller and Becker, JOM, 63, 17 (2011). doi: `https://doi.org/10.1007/s11837-011-0102-6 `_ **(Tainter 2011)** - Tainter, Pieniazek, Lin, and Skinner, J. Chem. Phys., 134, 184501 (2011) + Tainter, Pieniazek, Lin, and Skinner, J. Chem. Phys., 134, 184501 (2011) **(Tainter 2015)** Tainter, Shi, and Skinner, 11, 2268 (2015) **(Templeton2010)** - Templeton, JA; Jones, RE; Wagner, GJ, "Application of a field-based method to spatially varying thermal transport problems in molecular dynamics." Modelling and Simulation in Materials Science and Engineering (2010), 18:085007. + Templeton, JA; Jones, RE; Wagner, GJ, "Application of a field-based method to spatially varying thermal transport problems in molecular dynamics." Modelling and Simulation in Materials Science and Engineering (2010), 18:085007. **(Templeton2011)** - Templeton, JA; Jones, RE; Lee, JW; Zimmerman, JA; Wong, BM, "A long-range electric field solver for molecular dynamics based on atomistic-to-continuum modeling." Journal of Chemical Theory and Computation (2011), 7:1736. + Templeton, JA; Jones, RE; Lee, JW; Zimmerman, JA; Wong, BM, "A long-range electric field solver for molecular dynamics based on atomistic-to-continuum modeling." Journal of Chemical Theory and Computation (2011), 7:1736. **(Tersoff_1)** - J.\ Tersoff, Phys Rev B, 37, 6991 (1988). + J.\ Tersoff, Phys Rev B, 37, 6991 (1988). **(Tersoff_2)** - J.\ Tersoff, Phys Rev B, 38, 9902 (1988). + J.\ Tersoff, Phys Rev B, 38, 9902 (1988). **(Tersoff_3)** J.\ Tersoff, Phys Rev B, 39, 5566 (1989); errata (PRB 41, 3248) @@ -1160,19 +1160,19 @@ Bibliography Theodorou, Suter, Macromolecules, 18, 1206 (1985). **(Thole)** - Chem Phys, 59, 341 (1981). + Chem Phys, 59, 341 (1981). **(Thompson1)** - Thompson, Plimpton, Mattson, J Chem Phys, 131, 154107 (2009). + Thompson, Plimpton, Mattson, J Chem Phys, 131, 154107 (2009). **(Thompson2)** - Thompson, Swiler, Trott, Foiles, Tucker, J Comp Phys, 285, 316 (2015). + Thompson, Swiler, Trott, Foiles, Tucker, J Comp Phys, 285, 316 (2015). **(Thornton et al, 2013)** Thornton, C., Cummins, S. J., & Cleary, P. W. (2013). An investigation of the comparative behavior of alternative contact force models during inelastic collisions. Powder **(Thornton, 1991)** - Thornton, C. (1991). Interparticle sliding in the presence of adhesion. J. Phys. D: Appl. Phys. 24 1942 + Thornton, C. (1991). Interparticle sliding in the presence of adhesion. J. Phys. D: Appl. Phys. 24 1942 **(To)** Q.D. To, V.H. Vu, G. Lauriat, and C. Leonard. J. Math. Phys. 56, 103101 (2015). @@ -1181,7 +1181,7 @@ Bibliography B.\ D. Todd, Denis J. Evans, and Peter J. Daivis: "Pressure tensor for inhomogeneous fluids", Phys. Rev. E 52, 1627 (1995). **(Toukmaji)** - Toukmaji, Sagui, Board, and Darden, J Chem Phys, 113, 10913 (2000). + Toukmaji, Sagui, Board, and Darden, J Chem Phys, 113, 10913 (2000). **(Toxvaerd)** Toxvaerd, Dyre, J Chem Phys, 134, 081102 (2011). @@ -1196,10 +1196,10 @@ Bibliography Tsuzuki, Branicio, Rino, Comput Phys Comm, 177, 518 (2007). **(Tuckerman1)** - M.\ Tuckerman and B. Berne, J Chem Phys, 99, 2796 (1993). + M.\ Tuckerman and B. Berne, J Chem Phys, 99, 2796 (1993). **(Tuckerman2)** - Tuckerman, Alejandre, Lopez-Rendon, Jochim, and Martyna, J Phys A: Math Gen, 39, 5629 (2006). + Tuckerman, Alejandre, Lopez-Rendon, Jochim, and Martyna, J Phys A: Math Gen, 39, 5629 (2006). **(Tuckerman3)** Tuckerman, Berne and Martyna, J Chem Phys, 97, p 1990 (1992). @@ -1208,46 +1208,46 @@ Bibliography Tuckerman, Mundy, Balasubramanian, Klein, J Chem Phys, 106, 5615 (1997). **(Ulomek)** - Ulomek, Brien, Foiles, Mohles, Modelling Simul. Mater. Sci. Eng. 23 (2015) 025007 + Ulomek, Brien, Foiles, Mohles, Modelling Simul. Mater. Sci. Eng. 23 (2015) 025007 **(Vaiwala)** - Vaiwala, Jadhav, and Thaokar, J Chem Phys, 146, 124904 (2017). + Vaiwala, Jadhav, and Thaokar, J Chem Phys, 146, 124904 (2017). **(Valone)** - Valone, Baskes, Martin, Phys. Rev. B, 73, 214209 (2006). + Valone, Baskes, Martin, Phys. Rev. B, 73, 214209 (2006). **(Varshalovich)** - Varshalovich, Moskalev, Khersonskii, Quantum Theory of Angular Momentum, World Scientific, Singapore (1987). + Varshalovich, Moskalev, Khersonskii, Quantum Theory of Angular Momentum, World Scientific, Singapore (1987). **(Vashishta1990)** - P.\ Vashishta, R. K. Kalia, J. P. Rino, Phys. Rev. B 41, 12197 (1990). + P.\ Vashishta, R. K. Kalia, J. P. Rino, Phys. Rev. B 41, 12197 (1990). **(Vashishta2007)** - P.\ Vashishta, R. K. Kalia, A. Nakano, J. P. Rino. J. Appl. Phys. 101, 103515 (2007). + P.\ Vashishta, R. K. Kalia, A. Nakano, J. P. Rino. J. Appl. Phys. 101, 103515 (2007). **(Veld)** - In 't Veld, Ismail, Grest, J Chem Phys, 127, 144711 (2007). + In 't Veld, Ismail, Grest, J Chem Phys, 127, 144711 (2007). **(Volkov1)** - Volkov and Zhigilei, J Phys Chem C, 114, 5513 (2010). + Volkov and Zhigilei, J Phys Chem C, 114, 5513 (2010). **(Volkov2)** Volkov, Simov and Zhigilei, APS Meeting Abstracts, Q31.013 (2008). **(Voter1998)** - Voter, Phys Rev B, 57, 13985 (1998). + Voter, Phys Rev B, 57, 13985 (1998). **(Voter2000)** - Sorensen and Voter, J Chem Phys, 112, 9599 (2000) + Sorensen and Voter, J Chem Phys, 112, 9599 (2000) **(Voter2002)** Voter, Montalenti, Germann, Annual Review of Materials Research 32, 321 (2002). **(Voter2013)** - S.\ Y. Kim, D. Perez, A. F. Voter, J Chem Phys, 139, 144110 (2013). + S.\ Y. Kim, D. Perez, A. F. Voter, J Chem Phys, 139, 144110 (2013). **(Wagner)** - Wagner, GJ; Jones, RE; Templeton, JA; Parks, MA, "An atomistic-to-continuum coupling method for heat transfer in solids." Special Issue of Computer Methods and Applied Mechanics (2008) 197:3351. + Wagner, GJ; Jones, RE; Templeton, JA; Parks, MA, "An atomistic-to-continuum coupling method for heat transfer in solids." Special Issue of Computer Methods and Applied Mechanics (2008) 197:3351. **(Wang et al, 2015)** Wang, Y., Alonso-Marroquin, F., & Guo, W. W. (2015). Rolling and sliding in 3-D discrete element models. Particuology, 23, 49-55. @@ -1256,19 +1256,19 @@ Bibliography J.\ Wang, H. S. Yu, P. A. Langston, F. Y. Fraige, Granular Matter, 13, 1 (2011). **(Wang2)** - J.\ Wang, and A. Rockett, Phys. Rev. B, 43, 12571 (1991). + J.\ Wang, and A. Rockett, Phys. Rev. B, 43, 12571 (1991). **(Wang3)** - Wang and Holm, J Chem Phys, 115, 6277 (2001). + Wang and Holm, J Chem Phys, 115, 6277 (2001). **(Wang4)** - Wang, Van Hove, Ross, Baskes, J. Chem. Phys., 121, 5410 (2004). + Wang, Van Hove, Ross, Baskes, J. Chem. Phys., 121, 5410 (2004). **(Ward)** - D.K. Ward, X.W. Zhou, B.M. Wong, F.P. Doty, and J.A. Zimmerman, Phys. Rev. B, 85,115206 (2012). + D.K. Ward, X.W. Zhou, B.M. Wong, F.P. Doty, and J.A. Zimmerman, Phys. Rev. B, 85,115206 (2012). **(Warren)** - Warren, Phys Rev E, 68, 066702 (2003). + Warren, Phys Rev E, 68, 066702 (2003). **(Watkins)** Watkins and Jorgensen, J Phys Chem A, 105, 4118-4125 (2001). @@ -1277,10 +1277,10 @@ Bibliography Weeks, Chandler and Andersen, J. Chem. Phys., 54, 5237 (1971) **(WeinanE)** - E, Ren, Vanden-Eijnden, Phys Rev B, 66, 052301 (2002). + E, Ren, Vanden-Eijnden, Phys Rev B, 66, 052301 (2002). **(Wen)** - M.\ Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, Phys. Rev. B, 98, 235404 (2018) + M.\ Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, Phys. Rev. B, 98, 235404 (2018) **(Wennberg)** Wennberg, Murtola, Hess, Lindahl, J Chem Theory Comput, 9, 3527 (2013). @@ -1289,28 +1289,28 @@ Bibliography Who, Author2, Author3, J of Long Range Solvers, 35, 164-177 (2012). **(Wicaksono1)** - Wicaksono, Sinclair, Militzer, Computational Materials Science, 117, 397-405 (2016). + Wicaksono, Sinclair, Militzer, Computational Materials Science, 117, 397-405 (2016). **(Wicaksono2)** - Wicaksono, figshare, https://doi.org/10.6084/m9.figshare.1488628.v1 (2015). + Wicaksono, figshare, https://doi.org/10.6084/m9.figshare.1488628.v1 (2015). **(Wirnsberger)** Wirnsberger, Frenkel, and Dellago, J Chem Phys, 143, 124104 (2015). **(Wolf)** - D.\ Wolf, P. Keblinski, S. R. Phillpot, J. Eggebrecht, J Chem Phys, 110, 8254 (1999). + D.\ Wolf, P. Keblinski, S. R. Phillpot, J. Eggebrecht, J Chem Phys, 110, 8254 (1999). **(Wolff)** - Wolff and Rudd, Comp Phys Comm, 120, 200-32 (1999). + Wolff and Rudd, Comp Phys Comm, 120, 200-32 (1999). **(Wood)** - Wood and Thompson, J Chem Phys, 148, 241721, (2018) + Wood and Thompson, J Chem Phys, 148, 241721, (2018) **(Yeh)** - Yeh and Berkowitz, J Chem Phys, 111, 3155 (1999). + Yeh and Berkowitz, J Chem Phys, 111, 3155 (1999). **(ZBL)** - J.F. Ziegler, J.P. Biersack, U. Littmark, 'Stopping and Ranges of Ions in Matter' Vol 1, 1985, Pergamon Press. + J.F. Ziegler, J.P. Biersack, U. Littmark, 'Stopping and Ranges of Ions in Matter' Vol 1, 1985, Pergamon Press. **(Zhang1)** Zhang and Makse, Phys Rev E, 72, p 011301 (2005). @@ -1328,43 +1328,43 @@ Bibliography Zhang, Lussetti, de Souza, Muller-Plathe, J Phys Chem B, 109, 15060-15067 (2005). **(Zhigilei1)** - Volkov and Zhigilei, ACS Nano 4, 6187 (2010). + Volkov and Zhigilei, ACS Nano 4, 6187 (2010). **(Zhigilei2)** - Volkov, Simov, Zhigilei, ASME paper IMECE2008, 68021 (2008). + Volkov, Simov, Zhigilei, ASME paper IMECE2008, 68021 (2008). **(Zhigilei3)** - Volkov, Zhigilei, J. Phys. Chem. C 114, 5513 (2010). + Volkov, Zhigilei, J. Phys. Chem. C 114, 5513 (2010). **(Zhigilei4)** - Wittmaack, Banna, Volkov, Zhigilei, Carbon 130, 69 (2018). + Wittmaack, Banna, Volkov, Zhigilei, Carbon 130, 69 (2018). **(Zhigilei5)** - Wittmaack, Volkov, Zhigilei, Compos. Sci. Technol. 166, 66 (2018). + Wittmaack, Volkov, Zhigilei, Compos. Sci. Technol. 166, 66 (2018). **(Zhigilei6)** - Wittmaack, Volkov, Zhigilei, Carbon 143, 587 (2019). + Wittmaack, Volkov, Zhigilei, Carbon 143, 587 (2019). **(Zhigilei7)** - Volkov, Zhigilei, Phys. Rev. Lett. 104, 215902 (2010). + Volkov, Zhigilei, Phys. Rev. Lett. 104, 215902 (2010). **(Zhigilei8)** - Volkov, Shiga, Nicholson, Shiomi, Zhigilei, J. Appl. Phys. 111, 053501 (2012). + Volkov, Shiga, Nicholson, Shiomi, Zhigilei, J. Appl. Phys. 111, 053501 (2012). **(Zhigilei9)** - Volkov, Zhigilei, Appl. Phys. Lett. 101, 043113 (2012). + Volkov, Zhigilei, Appl. Phys. Lett. 101, 043113 (2012). **(Zhigilei10)** - Jacobs, Nicholson, Zemer, Volkov, Zhigilei, Phys. Rev. B 86, 165414 (2012). + Jacobs, Nicholson, Zemer, Volkov, Zhigilei, Phys. Rev. B 86, 165414 (2012). **(Zhou1)** Zhou, Saidi, Fichthorn, J Phys Chem C, 118(6), 3366-3374 (2014). **(Zhou3)** - X.\ W. Zhou, M. E. Foster, R. E. Jones, P. Yang, H. Fan, and F. P. Doty, J. Mater. Sci. Res., 4, 15 (2015). + X.\ W. Zhou, M. E. Foster, R. E. Jones, P. Yang, H. Fan, and F. P. Doty, J. Mater. Sci. Res., 4, 15 (2015). **(Zhou4)** - X.\ W. Zhou, M. E. Foster, J. A. Ronevich, and C. W. San Marchi, J. Comp. Chem., 41, 1299 (2020). + X.\ W. Zhou, M. E. Foster, J. A. Ronevich, and C. W. San Marchi, J. Comp. Chem., 41, 1299 (2020). **(Zhu)** Zhu, Tajkhorshid, and Schulten, Biophys. J. 83, 154 (2002). @@ -1373,10 +1373,10 @@ Bibliography J.F. Ziegler, J. P. Biersack and U. Littmark, "The Stopping and Range of Ions in Matter," Volume 1, Pergamon, 1985. **(Zimmerman2004)** - Zimmerman, JA; Webb, EB; Hoyt, JJ;. Jones, RE; Klein, PA; Bammann, DJ, "Calculation of stress in atomistic simulation." Special Issue of Modelling and Simulation in Materials Science and Engineering (2004),12:S319. + Zimmerman, JA; Webb, EB; Hoyt, JJ;. Jones, RE; Klein, PA; Bammann, DJ, "Calculation of stress in atomistic simulation." Special Issue of Modelling and Simulation in Materials Science and Engineering (2004),12:S319. **(Zimmerman2010)** - Zimmerman, JA; Jones, RE; Templeton, JA, "A material frame approach for evaluating continuum variables in atomistic simulations." Journal of Computational Physics (2010), 229:2364. + Zimmerman, JA; Jones, RE; Templeton, JA, "A material frame approach for evaluating continuum variables in atomistic simulations." Journal of Computational Physics (2010), 229:2364. **(de Buyl)** de Buyl, Colberg and Hofling, H5MD: A structured, efficient, and portable file format for molecular data, Comp. Phys. Comm. 185(6), 1546-1553 (2014) - @@ -1385,7 +1385,7 @@ Bibliography de Koning and Antonelli, Phys Rev E, 53, 465 (1996). **(electronic stopping)** - Wikipedia - Electronic Stopping Power: https://en.wikipedia.org/wiki/Stopping_power_%28particle_radiation%29 + Wikipedia - Electronic Stopping Power: https://en.wikipedia.org/wiki/Stopping_power_%28particle_radiation%29 **(tenWolde)** P.\ R. ten Wolde, M. J. Ruiz-Montero, D. Frenkel, J. Chem. Phys. 104, 9932 (1996). From 5e110fe70741c554e8b42120aa0cf981b83197b4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 16:45:39 -0400 Subject: [PATCH 018/182] update docs for autodetected OpenMP compatibility --- doc/src/Build_basics.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/Build_basics.rst b/doc/src/Build_basics.rst index 3b20209e5c..d364382591 100644 --- a/doc/src/Build_basics.rst +++ b/doc/src/Build_basics.rst @@ -159,11 +159,11 @@ others (e.g. GCC version 9 and beyond, Clang version 10 and later) may implement strict OpenMP 4.0 and later semantics, which are incompatible with the OpenMP 3.1 semantics used in LAMMPS for maximal compatibility with compiler versions in use. If compilation with OpenMP enabled fails -because of your compiler requiring strict OpenMP 4.0 semantic, you can +because of your compiler requiring strict OpenMP 4.0 semantics, you can change the behavior by adding ``-D LAMMPS_OMP_COMPAT=4`` to the ``LMP_INC`` variable in your makefile, or add it to the command line -while configuring with CMake. CMake will detect the suitable setting for -the GNU, Clang, and Intel compilers. +while configuring with CMake. LAMMPS will autodetect a suitable setting +for most GNU, Clang, and Intel compilers. ---------- From e378532003d9f58cb52adab42811f275018eebf8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 17:31:49 -0400 Subject: [PATCH 019/182] avoid 32-bit integer overflow --- src/reset_atom_ids.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/reset_atom_ids.cpp b/src/reset_atom_ids.cpp index bf642533d5..55513a1109 100644 --- a/src/reset_atom_ids.cpp +++ b/src/reset_atom_ids.cpp @@ -368,9 +368,9 @@ void ResetIDs::sort() // bins are numbered from 0 to Nbins-1 bigint nbins = (bigint) nbinx*nbiny*nbinz; - int nlo = nbins / nprocs; - int nhi = nlo + 1; - int nplo = nprocs - (nbins % nprocs); + bigint nlo = nbins / nprocs; + bigint nhi = nlo + 1; + bigint nplo = nprocs - (nbins % nprocs); bigint nbinlo = nplo*nlo; if (me < nplo) { From d1321a0860d92a2a351048984561c340bfe0853a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 17:49:52 -0400 Subject: [PATCH 020/182] fix argument dimensions --- src/SPIN/pair_spin_dipole_long.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPIN/pair_spin_dipole_long.cpp b/src/SPIN/pair_spin_dipole_long.cpp index 28a70a047d..364c2025c8 100644 --- a/src/SPIN/pair_spin_dipole_long.cpp +++ b/src/SPIN/pair_spin_dipole_long.cpp @@ -453,7 +453,7 @@ void PairSpinDipoleLong::compute_long(int /* i */, int /* j */, double eij[3], ------------------------------------------------------------------------- */ void PairSpinDipoleLong::compute_long_mech(int /* i */, int /* j */, double eij[3], - double bij[4], double fi[3], double spi[3], double spj[3]) + double bij[4], double fi[3], double spi[4], double spj[4]) { double sisj,sieij,sjeij,b2,b3; double g1,g2,g1b2_g2b3,gigj,pre; From c496b18a9de08c445e3c242d78d0f9af711da1a6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 17:50:02 -0400 Subject: [PATCH 021/182] avoid memory leak --- src/math_eigen_impl.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/math_eigen_impl.h b/src/math_eigen_impl.h index a48158de32..daef0e7052 100644 --- a/src/math_eigen_impl.h +++ b/src/math_eigen_impl.h @@ -849,6 +849,7 @@ void Jacobi:: Dealloc() { //assert(! is_preallocated); Dealloc2D(&M); + delete[] max_idx_row; Init(); } From c0384eb2642080a2cf0380ed8aae57f4f54a52e0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 17:52:13 -0400 Subject: [PATCH 022/182] update code owners --- .github/CODEOWNERS | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 033939551b..8457af3af9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -114,6 +114,7 @@ src/info.* @akohlmey @rbberger src/timer.* @akohlmey src/min* @sjplimp @stanmoore1 src/utils.* @akohlmey @rbberger +src/math_eigen_impl.h @jewettaij # tools tools/msi2lmp/* @akohlmey @@ -134,6 +135,9 @@ cmake/presets/*.cmake @junghans @rbberger @akohlmey # python python/* @rbberger +# fortran +fortran/* @akohlmey + # docs doc/utils/*/* @rbberger doc/Makefile @rbberger From bd60174fd320b446f814ceea77a5d65432184adb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 18:00:19 -0400 Subject: [PATCH 023/182] fix argument dimensions --- src/SPIN/pair_spin_dipole_cut.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPIN/pair_spin_dipole_cut.cpp b/src/SPIN/pair_spin_dipole_cut.cpp index 7444be347a..b482792e12 100644 --- a/src/SPIN/pair_spin_dipole_cut.cpp +++ b/src/SPIN/pair_spin_dipole_cut.cpp @@ -379,7 +379,7 @@ void PairSpinDipoleCut::compute_dipolar(int /* i */, int /* j */, double eij[3], ------------------------------------------------------------------------- */ void PairSpinDipoleCut::compute_dipolar_mech(int /* i */, int /* j */, double eij[3], - double fi[3], double spi[3], double spj[3], double r2inv) + double fi[3], double spi[4], double spj[4], double r2inv) { double sisj,sieij,sjeij; double gigjri4,bij,pre; From ab08a27731e27c3a05e4d7a79d8bacd8389d5b42 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 18:00:47 -0400 Subject: [PATCH 024/182] correct data layout for creating integrate style --- src/USER-INTEL/fix_intel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/USER-INTEL/fix_intel.cpp b/src/USER-INTEL/fix_intel.cpp index 92b47179dd..de1f947bc2 100644 --- a/src/USER-INTEL/fix_intel.cpp +++ b/src/USER-INTEL/fix_intel.cpp @@ -160,9 +160,9 @@ FixIntel::FixIntel(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) // if using LRT mode, create the integrate style if (_lrt) { - char *str; - str = (char *) "verlet/lrt/intel"; - update->create_integrate(1,&str,0); + char *cmd[1]; + cmd[0] = (char *) "verlet/lrt/intel"; + update->create_integrate(1,cmd,0); } // error check From 2ffa50f2f8fd56c8c54757eb59cc249e8ce9cd4a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 18:13:52 -0400 Subject: [PATCH 025/182] fix memory leak --- src/compute_pressure.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/compute_pressure.cpp b/src/compute_pressure.cpp index f626718596..5c6cbcb71a 100644 --- a/src/compute_pressure.cpp +++ b/src/compute_pressure.cpp @@ -36,7 +36,7 @@ using namespace LAMMPS_NS; ComputePressure::ComputePressure(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg), - vptr(nullptr), id_temp(nullptr) + vptr(nullptr), id_temp(nullptr), pstyle(nullptr) { if (narg < 4) error->all(FLERR,"Illegal compute pressure command"); if (igroup) error->all(FLERR,"Compute pressure must use group all"); @@ -146,6 +146,7 @@ ComputePressure::~ComputePressure() delete [] id_temp; delete [] vector; delete [] vptr; + delete [] pstyle; } /* ---------------------------------------------------------------------- */ From a963e85846aca021a97331ff78b20015224f6199 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 21:50:53 -0400 Subject: [PATCH 026/182] remove dead code --- src/ASPHERE/pair_line_lj.cpp | 1 - src/ASPHERE/pair_tri_lj.cpp | 1 - src/BODY/compute_body_local.cpp | 2 +- src/BODY/compute_temp_body.cpp | 1 - src/CLASS2/angle_class2.cpp | 4 ---- 5 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/ASPHERE/pair_line_lj.cpp b/src/ASPHERE/pair_line_lj.cpp index ba565c5922..7e6979f0a5 100644 --- a/src/ASPHERE/pair_line_lj.cpp +++ b/src/ASPHERE/pair_line_lj.cpp @@ -74,7 +74,6 @@ void PairLineLJ::compute(int eflag, int vflag) double xi[2],xj[2],fi[2],dxi,dxj,dyi,dyj; int *ilist,*jlist,*numneigh,**firstneigh; - evdwl = 0.0; ev_init(eflag,vflag); double **x = atom->x; diff --git a/src/ASPHERE/pair_tri_lj.cpp b/src/ASPHERE/pair_tri_lj.cpp index 79253140c0..5f62d211db 100644 --- a/src/ASPHERE/pair_tri_lj.cpp +++ b/src/ASPHERE/pair_tri_lj.cpp @@ -74,7 +74,6 @@ void PairTriLJ::compute(int eflag, int vflag) double dc1[3],dc2[3],dc3[3]; int *ilist,*jlist,*numneigh,**firstneigh; - evdwl = 0.0; ev_init(eflag,vflag); AtomVecTri::Bonus *bonus = avec->bonus; diff --git a/src/BODY/compute_body_local.cpp b/src/BODY/compute_body_local.cpp index 940250d160..6443f95325 100644 --- a/src/BODY/compute_body_local.cpp +++ b/src/BODY/compute_body_local.cpp @@ -123,7 +123,7 @@ void ComputeBodyLocal::compute_local() int ncount = compute_body(0); if (ncount > nmax) reallocate(ncount); size_local_rows = ncount; - ncount = compute_body(1); + compute_body(1); } /* ---------------------------------------------------------------------- diff --git a/src/BODY/compute_temp_body.cpp b/src/BODY/compute_temp_body.cpp index 6903f7a25c..210bb07417 100644 --- a/src/BODY/compute_temp_body.cpp +++ b/src/BODY/compute_temp_body.cpp @@ -343,7 +343,6 @@ void ComputeTempBody::compute_vector() inertia = bonus[body[i]].inertia; quat = bonus[body[i]].quat; - massone = rmass[i]; // wbody = angular velocity in body frame diff --git a/src/CLASS2/angle_class2.cpp b/src/CLASS2/angle_class2.cpp index 28d081c5c9..616d191d1c 100644 --- a/src/CLASS2/angle_class2.cpp +++ b/src/CLASS2/angle_class2.cpp @@ -447,10 +447,6 @@ double AngleClass2::single(int type, int i1, int i2, int i3) 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; From 172bb6050af242f288890db58a5240caaba9ae11 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 22:08:22 -0400 Subject: [PATCH 027/182] use safe read function --- src/USER-MISC/pair_coul_slater_cut.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/USER-MISC/pair_coul_slater_cut.cpp b/src/USER-MISC/pair_coul_slater_cut.cpp index 5e799178c9..f7096292ba 100644 --- a/src/USER-MISC/pair_coul_slater_cut.cpp +++ b/src/USER-MISC/pair_coul_slater_cut.cpp @@ -152,10 +152,10 @@ void PairCoulSlaterCut::write_restart_settings(FILE *fp) void PairCoulSlaterCut::read_restart_settings(FILE *fp) { if (comm->me == 0) { - fread(&cut_global,sizeof(double),1,fp); - fread(&lamda,sizeof(double),1,fp); - fread(&offset_flag,sizeof(int),1,fp); - fread(&mix_flag,sizeof(int),1,fp); + utils::sfread(FLERR,&cut_global,sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&lamda,sizeof(double),1,fp,nullptr,error); + utils::sfread(FLERR,&offset_flag,sizeof(int),1,fp,nullptr,error); + utils::sfread(FLERR,&mix_flag,sizeof(int),1,fp,nullptr,error); } MPI_Bcast(&cut_global,1,MPI_DOUBLE,0,world); MPI_Bcast(&lamda,1,MPI_DOUBLE,0,world); From 6967522a4fef8aa36268299cabf711023c977845 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 22:08:28 -0400 Subject: [PATCH 028/182] fix logic error --- src/change_box.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/change_box.cpp b/src/change_box.cpp index 1bd3fe733f..a214a56969 100644 --- a/src/change_box.cpp +++ b/src/change_box.cpp @@ -176,7 +176,7 @@ void ChangeBox::command(int narg, char **arg) int move_atoms = 0; for (int m = 0; m < nops; m++) { - if (ops[m].style != ORTHO || ops[m].style != TRICLINIC) move_atoms = 1; + if (ops[m].style != ORTHO && ops[m].style != TRICLINIC) move_atoms = 1; } // error if moving atoms and there is stored per-atom restart state From 909960514af58720686038fc4eec79169bbeba32 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 22:10:30 -0400 Subject: [PATCH 029/182] avoid unneeded division --- src/USER-UEF/compute_pressure_uef.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/USER-UEF/compute_pressure_uef.cpp b/src/USER-UEF/compute_pressure_uef.cpp index adb9970c12..e0c5f667a7 100644 --- a/src/USER-UEF/compute_pressure_uef.cpp +++ b/src/USER-UEF/compute_pressure_uef.cpp @@ -78,7 +78,7 @@ double ComputePressureUef::compute_scalar() addstep(update->ntimestep+1); int k =0; - scalar = 0; + scalar = 0.0; if (ext_flags[0]) { scalar += vector[0]; k++; @@ -92,7 +92,7 @@ double ComputePressureUef::compute_scalar() k++; } - scalar /= k; + if (k > 1) scalar /= k; return scalar; } From adef7d4e1843910054b1c518830cd545ce655dfb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 22:14:21 -0400 Subject: [PATCH 030/182] need to check for nthreads < 1 only if OpenMP is enabled --- src/USER-OMP/fix_omp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/USER-OMP/fix_omp.cpp b/src/USER-OMP/fix_omp.cpp index 2bbfa22b99..75eadca25e 100644 --- a/src/USER-OMP/fix_omp.cpp +++ b/src/USER-OMP/fix_omp.cpp @@ -78,10 +78,10 @@ FixOMP::FixOMP(LAMMPS *lmp, int narg, char **arg) #endif } +#if defined(_OPENMP) if (nthreads < 1) error->all(FLERR,"Illegal number of OpenMP threads requested"); -#if defined(_OPENMP) int reset_thr = 0; #endif if (nthreads != comm->nthreads) { From 7e68746ebe1a9ad946cfadbdb922093055f2849e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 22:16:19 -0400 Subject: [PATCH 031/182] use safe reader function --- src/USER-MISC/bond_special.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/USER-MISC/bond_special.cpp b/src/USER-MISC/bond_special.cpp index 4f79fea519..b21396202e 100644 --- a/src/USER-MISC/bond_special.cpp +++ b/src/USER-MISC/bond_special.cpp @@ -184,8 +184,8 @@ void BondSpecial::read_restart(FILE *fp) allocate(); if (comm->me == 0) { - fread(&factor_lj[1],sizeof(double),atom->nbondtypes,fp); - fread(&factor_coul[1],sizeof(double),atom->nbondtypes,fp); + utils::sfread(FLERR,&factor_lj[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); + utils::sfread(FLERR,&factor_coul[1],sizeof(double),atom->nbondtypes,fp,nullptr,error); } MPI_Bcast(&factor_lj[1],atom->nbondtypes,MPI_DOUBLE,0,world); MPI_Bcast(&factor_coul[1],atom->nbondtypes,MPI_DOUBLE,0,world); From d23f7d14c9490b96f033b9fb7a539134c345b3c9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 25 Sep 2020 22:20:31 -0400 Subject: [PATCH 032/182] typo --- src/SPIN/neb_spin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index 8abf7b8e7c..31122ec678 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -298,7 +298,7 @@ void NEBSpin::run() fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc EBF EBR RDT " "RD1 PE1 RD2 PE2 ... RDN PEN " - "GradV0dottan DN0... GradVNdottan DNN\n"); + "GradV0dottan DN0 ... GradVNdottan DNN\n"); } else { fprintf(uscreen,"Step MaxReplicaTorque MaxAtomTorque " "GradV0 GradV1 GradVc " From b11b420b08f35a816d6111438f2557ee55215bd6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 26 Sep 2020 22:30:05 -0400 Subject: [PATCH 033/182] small doc update for singularity --- doc/src/Tools.rst | 1 + tools/singularity/README.md | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/src/Tools.rst b/doc/src/Tools.rst index 3600d6c661..e3e6b344c0 100644 --- a/doc/src/Tools.rst +++ b/doc/src/Tools.rst @@ -663,6 +663,7 @@ The singularity sub-directory contains container definitions files that can be used to build container images for building and testing LAMMPS on specific OS variants using the `Singularity `_ container software. Contributions for additional variants are welcome. +For more details please see the README.md file in that folder. ---------- diff --git a/tools/singularity/README.md b/tools/singularity/README.md index bcc13fbaa1..100d367439 100644 --- a/tools/singularity/README.md +++ b/tools/singularity/README.md @@ -5,12 +5,12 @@ for [Singularity](https://sylabs.io), suitable for compiling and testing LAMMPS on a variety of OS variants with support for most standard packages and - for some of them - also building/spellchecking the manual in all supported formats. This allows to test and debug LAMMPS code on -different OS variants than what is locally installed on your development +different OS variants without doing a full installation on your development workstation, e.g. when bugs are reported that can only be reproduced on a specific OS or with specific (mostly older) versions of tools, compilers, or libraries. -Ready-to-use container images built from these definition files are +Ready-to-use container images built from some these definition files are occasionally uploaded to the container library at sylabs.io. They can be found here: https://cloud.sylabs.io/library/lammps/default/lammps_development# and will be signed with a GPG key that has the fingerprint: @@ -25,7 +25,7 @@ git clone --depth 500 git://github.com/lammps/lammps.git lammps mkdir build-centos7 cd build-centos7 sudo singularity build centos7.sif ../tools/singularity/centos7.def -singularity shell centos7.sif +singularity exec centos7.sif bash --login cmake -C ../cmake/presets/most.cmake ../cmake make ``` @@ -39,7 +39,7 @@ git clone --depth 500 git://github.com/lammps/lammps.git lammps mkdir build-ubuntu18 cd build-ubuntu18 singularity pull library://lammps/default/lammps_development:ubuntu18.04 -singularity shell lammps_development_ubuntu18.04.sif +singularity exec lammps_development_ubuntu18.04.sif bash --login cmake -C ../cmake/presets/most.cmake ../cmake make ``` From fdbdd26585428bedd4d434d7527dee893c902c65 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 26 Sep 2020 22:30:21 -0400 Subject: [PATCH 034/182] include intel fortran compiler into intel cmake preset --- cmake/presets/intel.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmake/presets/intel.cmake b/cmake/presets/intel.cmake index 099d744ad3..d101a0f699 100644 --- a/cmake/presets/intel.cmake +++ b/cmake/presets/intel.cmake @@ -1,7 +1,8 @@ -# preset that will enable clang/clang++ with support for MPI and OpenMP (on Linux boxes) +# preset that will enable Intel compilers with support for MPI and OpenMP (on Linux boxes) set(CMAKE_CXX_COMPILER "icpc" CACHE STRING "" FORCE) set(CMAKE_C_COMPILER "icc" CACHE STRING "" FORCE) +set(CMAKE_Fortran_COMPILER "ifort" CACHE STRING "" FORCE) set(MPI_CXX "icpc" CACHE STRING "" FORCE) set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE) unset(HAVE_OMP_H_INCLUDE CACHE) @@ -12,5 +13,6 @@ set(OpenMP_C_LIB_NAMES "omp" CACHE STRING "" FORCE) set(OpenMP_CXX "icpc" CACHE STRING "" FORCE) set(OpenMP_CXX_FLAGS "-qopenmp" CACHE STRING "" FORCE) set(OpenMP_CXX_LIB_NAMES "omp" CACHE STRING "" FORCE) +set(OpenMP_Fortran_FLAGS "-qopenmp" CACHE STRING "" FORCE) set(OpenMP_omp_LIBRARY "libiomp5.so" CACHE PATH "" FORCE) From 9d39587d37bc9faaed25ecc0547ccb41fb2fc8bb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 27 Sep 2020 19:05:40 -0400 Subject: [PATCH 035/182] expand c-library properties example --- doc/src/Library_properties.rst | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/doc/src/Library_properties.rst b/doc/src/Library_properties.rst index bf36dcb8b1..037e6ffb5a 100644 --- a/doc/src/Library_properties.rst +++ b/doc/src/Library_properties.rst @@ -26,9 +26,18 @@ event as atoms are migrating between sub-domains. handle = lammps_open_no_mpi(0, NULL, NULL); lammps_file(handle,"in.sysinit"); - printf("running simulation with %g atoms\n", + printf("Running a simulation with %g atoms.\n", lammps_get_natoms(handle)); + printf(" %d local and %d ghost atoms. %d atom types\n", + lammps_extract_setting(handle,"nlocal"), + lammps_extract_setting(handle,"nghost"), + lammps_extract_setting(handle,"ntypes")); + + double *dt = (double *)lammps_extract_global(handle,"dt"); + printf("Changing timestep from %g to 0.5\n", *dt); + *dt = 0.5; + lammps_command(handle,"run 1000 post no"); for (i=0; i < 10; ++i) { From c626208c80d99247ace2e02c489924afa6e80e1a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 27 Sep 2020 19:05:58 -0400 Subject: [PATCH 036/182] avoid failure with Intel compilers --- unittest/c-library/test_library_properties.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unittest/c-library/test_library_properties.cpp b/unittest/c-library/test_library_properties.cpp index a63dac9b01..7bf0da3d72 100644 --- a/unittest/c-library/test_library_properties.cpp +++ b/unittest/c-library/test_library_properties.cpp @@ -63,7 +63,7 @@ TEST_F(LibraryProperties, memory_usage) lammps_memory_usage(lmp, meminfo); EXPECT_GT(meminfo[0], 0.0); #if defined(__linux__) || defined(_WIN32) - EXPECT_GT(meminfo[1], 0.0); + EXPECT_GE(meminfo[1], 0.0); #endif EXPECT_GT(meminfo[2], 0.0); }; From 407f44575303fb8495f673e54285c5fbae671eaf Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 28 Sep 2020 07:32:11 -0400 Subject: [PATCH 037/182] remove specializations using cilk array notation --- src/USER-INTEL/intel_intrinsics.h | 257 +----------------------------- 1 file changed, 4 insertions(+), 253 deletions(-) diff --git a/src/USER-INTEL/intel_intrinsics.h b/src/USER-INTEL/intel_intrinsics.h index ee20cd1119..d1f019feea 100644 --- a/src/USER-INTEL/intel_intrinsics.h +++ b/src/USER-INTEL/intel_intrinsics.h @@ -35,114 +35,10 @@ #include #endif -// Vector classes for Cilk array notation -// This is experimental and doesn't yield good code yet -template -struct lmp_intel_an_fvec { - fscal data[VL]; - lmp_intel_an_fvec() {} - explicit lmp_intel_an_fvec(const fscal f) { data[:] = f; } - explicit lmp_intel_an_fvec(fscal f[VL]) { data[:] = f[:]; } - lmp_intel_an_fvec(const lmp_intel_an_fvec &a) { data[:] = a.data[:]; } - lmp_intel_an_fvec& operator =(const lmp_intel_an_fvec &a) { data[:] = a.data[:]; return *this; } - const lmp_intel_an_fvec operator +(const lmp_intel_an_fvec &b) const { - lmp_intel_an_fvec ret = *this; - ret.data[:] += b.data[:]; - return ret; - } - const lmp_intel_an_fvec operator -(const lmp_intel_an_fvec &b) const { - lmp_intel_an_fvec ret = *this; - ret.data[:] -= b.data[:]; - return ret; - } - const lmp_intel_an_fvec operator *(const lmp_intel_an_fvec &b) const { - lmp_intel_an_fvec ret = *this; - ret.data[:] *= b.data[:]; - return ret; - } - const lmp_intel_an_fvec operator /(const lmp_intel_an_fvec &b) const { - lmp_intel_an_fvec ret = *this; - ret.data[:] /= b.data[:]; - return ret; - } - lmp_intel_an_fvec& operator +=(const lmp_intel_an_fvec &b) { - data[:] += b.data[:]; return *this; - } - lmp_intel_an_fvec& operator -=(const lmp_intel_an_fvec &b) { - data[:] -= b.data[:]; return *this; - } - lmp_intel_an_fvec& operator *=(const lmp_intel_an_fvec &b) { - data[:] *= b.data[:]; return *this; - } - lmp_intel_an_fvec& operator /=(const lmp_intel_an_fvec &b) { - data[:] /= b.data[:]; return *this; - } - friend lmp_intel_an_fvec sqrt(const lmp_intel_an_fvec &a) __attribute__((always_inline)) { - lmp_intel_an_fvec ret; ret.data[:] = sqrt(a.data[:]); return ret; - } - friend lmp_intel_an_fvec exp(const lmp_intel_an_fvec &a) __attribute__((always_inline)) { - lmp_intel_an_fvec ret; ret.data[:] = exp(a.data[:]); return ret; - } - friend lmp_intel_an_fvec sin(const lmp_intel_an_fvec &a) __attribute__((always_inline)) { - lmp_intel_an_fvec ret; ret.data[:] = sin(a.data[:]); return ret; - } - friend lmp_intel_an_fvec invsqrt(const lmp_intel_an_fvec &a) __attribute__((always_inline)) { - lmp_intel_an_fvec ret; ret.data[:] = ((fscal)1.) / sqrt(a.data[:]); return ret; - } - friend lmp_intel_an_fvec pow(const lmp_intel_an_fvec &a, const lmp_intel_an_fvec &b) __attribute__((always_inline)) { - lmp_intel_an_fvec ret; ret.data[:] = pow(a.data[:], b.data[:]); return ret; - } - lmp_intel_an_fvec operator - () const { - lmp_intel_an_fvec ret; ret.data[:] = - data[:]; return ret; - } -}; -template -struct lmp_intel_an_ivec { - int data[VL]; - lmp_intel_an_ivec() {} - explicit lmp_intel_an_ivec(int i) { data[:] = i; } - explicit lmp_intel_an_ivec(const int * a) { data[:] = a[0:VL]; } - const lmp_intel_an_ivec operator &(const lmp_intel_an_ivec &b) { - lmp_intel_an_ivec ret = *this; - ret.data[:] &= b.data[:]; - return ret; - } - const lmp_intel_an_ivec operator |(const lmp_intel_an_ivec &b) { - lmp_intel_an_ivec ret = *this; - ret.data[:] |= b.data[:]; - return ret; - } - const lmp_intel_an_ivec operator +(const lmp_intel_an_ivec &b) { - lmp_intel_an_ivec ret = *this; - ret.data[:] += b.data[:]; - return ret; - } -}; -template -struct lmp_intel_an_bvec { - bool data[VL]; - lmp_intel_an_bvec() {} - lmp_intel_an_bvec(const lmp_intel_an_bvec &a) { data[:] = a.data[:]; } - lmp_intel_an_bvec& operator =(const lmp_intel_an_bvec &a) { data[:] = a.data[:]; return *this; } - explicit lmp_intel_an_bvec(int i) { data[:] = i; } - friend lmp_intel_an_bvec operator &(const lmp_intel_an_bvec &a, const lmp_intel_an_bvec &b) __attribute__((always_inline)) { - lmp_intel_an_bvec ret; ret.data[:] = a.data[:] & b.data[:]; return ret; - } - friend lmp_intel_an_bvec operator |(const lmp_intel_an_bvec &a, const lmp_intel_an_bvec &b) __attribute__((always_inline)) { - lmp_intel_an_bvec ret; ret.data[:] = a.data[:] | b.data[:]; return ret; - } - friend lmp_intel_an_bvec operator ~(const lmp_intel_an_bvec &a) __attribute__((always_inline)) { - lmp_intel_an_bvec ret; ret.data[:] = ! a.data[:]; return ret; - } - lmp_intel_an_bvec& operator &=(const lmp_intel_an_bvec &a) __attribute__((always_inline)) { - data[:] &= a.data[:]; return *this; - } -}; - namespace lmp_intel { -// Self explanatory mostly, KNC=IMCI and AVX-512, NONE=Scalar, AN=Array Not. -enum CalculationMode { KNC, AVX, AVX2, SSE, NONE, AN }; +// Self explanatory mostly, KNC=IMCI and AVX-512, NONE=Scalar. +enum CalculationMode {KNC, AVX, AVX2, SSE, NONE}; #ifdef __MIC__ #ifdef LMP_INTEL_VECTOR_MIC static const CalculationMode mode = LMP_INTEL_VECTOR_MIC; @@ -1916,148 +1812,6 @@ struct vector_ops { } }; -// Array notation implementation -template -struct vector_ops { - static const int VL = 4; - typedef flt_t fscal; - typedef lmp_intel_an_fvec fvec; - typedef lmp_intel_an_ivec ivec; - typedef lmp_intel_an_bvec bvec; - typedef flt_t farr[VL]; - typedef int iarr[VL]; - static fvec recip(const fvec &a) { - fvec ret; ret.data[:] = ((fscal)1.) / a.data[:]; return ret; - } - template - static void gather_prefetch_t0(const ivec &idx, const bvec &mask, const void *base) { - // nop - } - template - static fvec gather(const fvec &from, const bvec &mask, const ivec &idx, const void *base) { - fvec ret = from; - if (mask.data[:]) ret.data[:] = *reinterpret_cast(reinterpret_cast(base) + scale * idx.data[:]); - return ret; - } - template - static void gather_x(const ivec &idxs, const bvec &mask, const T *base, fvec *x, fvec *y, fvec *z, ivec *w) { - *x = gather<1>(*x, mask, idxs, &base->x); - *y = gather<1>(*y, mask, idxs, &base->y); - *z = gather<1>(*z, mask, idxs, &base->z); - *w = int_gather<1>(*w, mask, idxs, &base->w); - } - static void gather_8(const ivec &idxs, const bvec &mask, const void *base, - fvec *r0, fvec *r1, fvec *r2, fvec *r3, fvec *r4, fvec *r5, fvec *r6, fvec *r7) { - fvec a = zero(), b = zero(), c = zero(), d = zero(); - gather_4(idxs, mask, base, r0, r1, r2, r3); - gather_4(idxs, mask, reinterpret_cast(base) + 4 * sizeof(fscal), r4, r5, r6, r7); - } - static void gather_4(const ivec &idxs, const bvec &mask, const void *base, - fvec *r0, fvec *r1, fvec *r2, fvec *r3) { - *r0 = gather<4>(*r0, mask, idxs, reinterpret_cast(base) + 0 * sizeof(fscal)); - *r1 = gather<4>(*r1, mask, idxs, reinterpret_cast(base) + 1 * sizeof(fscal)); - *r2 = gather<4>(*r2, mask, idxs, reinterpret_cast(base) + 2 * sizeof(fscal)); - *r3 = gather<4>(*r3, mask, idxs, reinterpret_cast(base) + 3 * sizeof(fscal)); - } - static fvec blend(const bvec &mask, const fvec &a, const fvec &b) { - fvec ret = a; - if (mask.data[:]) ret.data[:] = b.data[:]; - return ret; - } - static ivec int_blend(const bvec &mask, const ivec &a, const ivec &b) { - fvec ret = a; - if (mask.data[:]) ret.data[:] = b.data[:]; - return ret; - } - static fvec fmadd(const fvec &a, const fvec &b, const fvec &c) { - fvec ret; ret.data[:] = a.data[:] * b.data[:] + c.data[:]; return ret; - } - static fvec zero() { - return fvec(0.); - } - static bvec cmpeq(const fvec &a, const fvec &b) { - bvec ret; ret.data[:] = a.data[:] == b.data[:]; return ret; - } - static bvec cmpnle(const fvec &a, const fvec &b) { - bvec ret; ret.data[:] = !(a.data[:] <= b.data[:]); return ret; - } - static bvec cmple(const fvec &a, const fvec &b) { - bvec ret; ret.data[:] = a.data[:] <= b.data[:]; return ret; - } - static bvec cmplt(const fvec &a, const fvec &b) { - bvec ret; ret.data[:] = a.data[:] < b.data[:]; return ret; - } - static bvec int_cmpneq(const ivec &a, const ivec &b) { - bvec ret; ret.data[:] = a.data[:] != b.data[:]; return ret; - } - static bvec int_cmplt(const ivec &a, const ivec &b) { - bvec ret; ret.data[:] = a.data[:] < b.data[:]; return ret; - } - static fvec invsqrt(const fvec &a) { - fvec ret; ret.data[:] = ((fscal)1.) / sqrt(a.data[:]); return ret; - } - static fvec sincos(fvec *c, const fvec &a) { - c->data[:] = cos(a.data[:]); - fvec ret; ret.data[:] = sin(a.data[:]); return ret; - } - static fscal reduce_add(const fvec &a) { - return __sec_reduce_add(a.data[:]); - } - static ivec int_mullo(const ivec &a, const ivec &b) { - ivec ret; ret.data[:] = a.data[:] * b.data[:]; return ret; - } - static ivec int_mask_add(const ivec &src, const bvec &mask, const ivec &a, const ivec &b) { - ivec ret = src; - if (mask.data[:]) ret.data[:] = a.data[:] + b.data[:]; - return ret; - } - template - static ivec int_gather(const ivec &from, bvec mask, const ivec &idx, const void *base) { - ivec ret = from; - if (mask.data[:]) ret.data[:] = reinterpret_cast(base)[scale * idx.data[:] / sizeof(int)]; - return ret; - } - static fvec mask_add(const fvec &src, const bvec &mask, const fvec &a, const fvec &b) { - fvec ret = src; - if (mask.data[:]) ret.data[:] = a.data[:] + b.data[:]; - return ret; - } - static void store(void *at, const fvec &a) { - reinterpret_cast(at)[0:VL] = a.data[:]; - } - static void int_store(int *at, const ivec &a) { - reinterpret_cast(at)[0:VL] = a.data[:]; - } - static void mask_store(int *at, const bvec &a) { - at[0:VL] = a.data[:]; - } - static fvec min(const fvec &a, const fvec &b) { - fvec ret = b; - if (a.data[:] < b.data[:]) ret.data[:] = a.data[:]; - return ret; - } - static bool mask_test_at(const bvec &mask, int at) { - return mask.data[at]; - } - static bool mask_testz(const bvec &mask) { - return ! __sec_reduce_or(mask.data[:]); - } - static bvec mask_enable_lower(int n) { - bvec ret; ret.data[:] = __sec_implicit_index(0) < n; return ret; - } - static ivec int_load_vl(const int *a) { - return ivec(a); - } - static void int_clear_arr(int *a) { - a[0:VL] = 0; - } - static bvec full_mask() { - return bvec(1); - } - static void int_print(const ivec &a) { - } -}; - // Mixins to implement mixed precision and single/single and double/double // This one is for single/single and double/double template @@ -2138,7 +1892,7 @@ struct AccumulatorTwiceMixin { }; // For cases where vector_ops::VL == vector_ops::VL -// i.e. scalar & AN + template struct AccumulatorTwiceMixinNone { typedef vector_ops BASE; @@ -2177,11 +1931,8 @@ struct vector_routines : public vector_ops, public template struct vector_routines : public vector_ops, public AccumulatorTwiceMixin {}; -// Specialize for AN and scalar +// Specialize for scalar template<> struct vector_routines : public vector_ops, public AccumulatorTwiceMixinNone {}; -template<> -struct vector_routines : public vector_ops, public AccumulatorTwiceMixinNone {}; - } // namespace lmp_intel From d868271b014177713a2b49c98bcb9a4c2f4fda2a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 28 Sep 2020 07:52:38 -0400 Subject: [PATCH 038/182] remove unneeded escapes from input examples --- doc/src/dump_cfg_uef.rst | 4 ++-- doc/src/dump_image.rst | 6 +++--- doc/src/restart.rst | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/src/dump_cfg_uef.rst b/doc/src/dump_cfg_uef.rst index 8c6a4937d7..ee027e9347 100644 --- a/doc/src/dump_cfg_uef.rst +++ b/doc/src/dump_cfg_uef.rst @@ -24,8 +24,8 @@ Examples .. code-block:: LAMMPS - dump 1 all cfg/uef 10 dump.\*.cfg mass type xs ys zs - dump 2 all cfg/uef 100 dump.\*.cfg mass type xs ys zs id c_stress + dump 1 all cfg/uef 10 dump.*.cfg mass type xs ys zs + dump 2 all cfg/uef 100 dump.*.cfg mass type xs ys zs id c_stress Description """"""""""" diff --git a/doc/src/dump_image.rst b/doc/src/dump_image.rst index 396f1eeb2d..b22da251ff 100644 --- a/doc/src/dump_image.rst +++ b/doc/src/dump_image.rst @@ -87,9 +87,9 @@ Examples .. code-block:: LAMMPS - dump d0 all image 100 dump.\*.jpg type type - dump d1 mobile image 500 snap.\*.png element element ssao yes 4539 0.6 - dump d2 all image 200 img-\*.ppm type type zoom 2.5 adiam 1.5 size 1280 720 + dump d0 all image 100 dump.*.jpg type type + dump d1 mobile image 500 snap.*.png element element ssao yes 4539 0.6 + dump d2 all image 200 img-*.ppm type type zoom 2.5 adiam 1.5 size 1280 720 dump m0 all movie 1000 movie.mpg type type size 640 480 dump m1 all movie 1000 movie.avi type type size 640 480 dump m2 all movie 100 movie.m4v type type zoom 1.8 adiam v_value size 1280 720 diff --git a/doc/src/restart.rst b/doc/src/restart.rst index e0958d4bb1..1a746a280d 100644 --- a/doc/src/restart.rst +++ b/doc/src/restart.rst @@ -34,7 +34,7 @@ Examples restart 0 restart 1000 poly.restart restart 1000 poly.restart.mpiio - restart 1000 restart.\*.equil + restart 1000 restart.*.equil restart 10000 poly.%.1 poly.%.2 nfile 10 restart v_mystep poly.restart From 405c1b98c5755b67190e97b442338cd20745b5c1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 28 Sep 2020 08:18:00 -0400 Subject: [PATCH 039/182] remove inactive code and documentation for dump image persp option --- doc/src/Errors_messages.rst | 12 ------------ doc/src/dump_image.rst | 26 +++++--------------------- src/dump_image.cpp | 30 +++--------------------------- src/dump_image.h | 20 ++------------------ 4 files changed, 10 insertions(+), 78 deletions(-) diff --git a/doc/src/Errors_messages.rst b/doc/src/Errors_messages.rst index b1b9f38311..aa38b3c0ba 100644 --- a/doc/src/Errors_messages.rst +++ b/doc/src/Errors_messages.rst @@ -3005,9 +3005,6 @@ Doc page with :doc:`WARNING messages ` *Dump image line requires atom style line* Self-explanatory. -*Dump image persp option is not yet supported* - Self-explanatory. - *Dump image requires one snapshot per file* Use a "\*" in the filename. @@ -5108,9 +5105,6 @@ Doc page with :doc:`WARNING messages ` The file produced by dump image cannot be binary and must be for a single processor. -*Invalid dump image persp value* - Persp value must be >= 0.0. - *Invalid dump image theta value* Theta must be between 0.0 and 180.0 inclusive. @@ -8116,9 +8110,6 @@ keyword to allow for additional bonds to be formed *Variable for dump image center is invalid style* Must be an equal-style variable. -*Variable for dump image persp is invalid style* - Must be an equal-style variable. - *Variable for dump image phi is invalid style* Must be an equal-style variable. @@ -8259,9 +8250,6 @@ keyword to allow for additional bonds to be formed *Variable name for dump image center does not exist* Self-explanatory. -*Variable name for dump image persp does not exist* - Self-explanatory. - *Variable name for dump image phi does not exist* Self-explanatory. diff --git a/doc/src/dump_image.rst b/doc/src/dump_image.rst index b22da251ff..3923d5c2dc 100644 --- a/doc/src/dump_image.rst +++ b/doc/src/dump_image.rst @@ -21,7 +21,7 @@ Syntax * color = atom attribute that determines color of each atom * diameter = atom attribute that determines size of each atom * zero or more keyword/value pairs may be appended -* keyword = *atom* or *adiam* or *bond* or *line* or *tri* or *body* or *fix* or *size* or *view* or *center* or *up* or *zoom* or *persp* or *box* or *axes* or *subbox* or *shiny* or *ssao* +* keyword = *atom* or *adiam* or *bond* or *line* or *tri* or *body* or *fix* or *size* or *view* or *center* or *up* or *zoom* or *box* or *axes* or *subbox* or *shiny* or *ssao* .. parsed-literal:: @@ -62,9 +62,6 @@ Syntax *zoom* value = zfactor = size that simulation box appears in image zfactor = scale image size by factor > 1 to enlarge, factor < 1 to shrink zfactor can be a variable (see below) - *persp* value = pfactor = amount of "perspective" in image - pfactor = amount of perspective (0 = none, < 1 = some, > 1 = highly skewed) - pfactor can be a variable (see below) *box* values = yes/no diam = draw outline of simulation box yes/no = do or do not draw simulation box lines diam = diameter of box lines as fraction of shortest box length @@ -426,13 +423,14 @@ i.e. the number of pixels in each direction. ---------- -The *view*\ , *center*\ , *up*\ , *zoom*\ , and *persp* values determine how +The *view*\ , *center*\ , *up*\ , and *zoom* values determine how 3d simulation space is mapped to the 2d plane of the image. Basically they control how the simulation box appears in the image. -All of the *view*\ , *center*\ , *up*\ , *zoom*\ , and *persp* values can be +All of the *view*\ , *center*\ , *up*\ , and *zoom* values can be specified as numeric quantities, whose meaning is explained below. -Any of them can also be specified as an :doc:`equal-style variable `, by using v_name as the value, where "name" is +Any of them can also be specified as an :doc:`equal-style variable `, +by using v_name as the value, where "name" is the variable name. In this case the variable will be evaluated on the timestep each image is created to create a new value. If the equal-style variable is time-dependent, this is a means of changing @@ -483,19 +481,6 @@ image mostly filled by the atoms in the simulation box. A *zfactor* > 1 will make the simulation box larger; a *zfactor* < 1 will make it smaller. *Zfactor* must be a value > 0.0. -The *persp* keyword determines how much depth perspective is present -in the image. Depth perspective makes lines that are parallel in -simulation space appear non-parallel in the image. A *pfactor* value -of 0.0 means that parallel lines will meet at infinity (1.0/pfactor), -which is an orthographic rendering with no perspective. A *pfactor* -value between 0.0 and 1.0 will introduce more perspective. A *pfactor* -value > 1 will create a highly skewed image with a large amount of -perspective. - -.. note:: - - The *persp* keyword is not yet supported as an option. - ---------- The *box* keyword determines if and how the simulation box boundaries @@ -692,7 +677,6 @@ The defaults for the keywords are as follows: * up = 0 0 1 (for 3d) * up = 0 1 0 (for 2d) * zoom = 1.0 -* persp = 0.0 * box = yes 0.02 * axes = no 0.0 0.0 * subbox no 0.0 diff --git a/src/dump_image.cpp b/src/dump_image.cpp index 1362b6a6de..0dc0b9b26d 100644 --- a/src/dump_image.cpp +++ b/src/dump_image.cpp @@ -52,7 +52,7 @@ enum{NO,YES}; DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : DumpCustom(lmp, narg, arg), thetastr(nullptr), phistr(nullptr), cxstr(nullptr), cystr(nullptr), czstr(nullptr), upxstr(nullptr), upystr(nullptr), upzstr(nullptr), - zoomstr(nullptr), perspstr(nullptr), diamtype(nullptr), diamelement(nullptr), + zoomstr(nullptr), diamtype(nullptr), diamelement(nullptr), bdiamtype(nullptr), colortype(nullptr), colorelement(nullptr), bcolortype(nullptr), avec_line(nullptr), avec_tri(nullptr), avec_body(nullptr), fixptr(nullptr), image(nullptr), chooseghost(nullptr), bufcopy(nullptr) @@ -133,7 +133,6 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : upxstr = upystr = upzstr = nullptr; zoomstr = nullptr; - perspstr = nullptr; boxflag = YES; boxdiam = 0.02; axesflag = NO; @@ -305,20 +304,6 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : } iarg += 2; - } else if (strcmp(arg[iarg],"persp") == 0) { - error->all(FLERR,"Dump image persp option is not yet supported"); - if (iarg+2 > narg) error->all(FLERR,"Illegal dump image command"); - if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) { - int n = strlen(&arg[iarg+1][2]) + 1; - perspstr = new char[n]; - strcpy(perspstr,&arg[iarg+1][2]); - } else { - double persp = utils::numeric(FLERR,arg[iarg+1],false,lmp); - if (persp < 0.0) error->all(FLERR,"Illegal dump image command"); - image->persp = persp; - } - iarg += 2; - } else if (strcmp(arg[iarg],"box") == 0) { if (iarg+3 > narg) error->all(FLERR,"Illegal dump image command"); if (strcmp(arg[iarg+1],"yes") == 0) boxflag = YES; @@ -449,7 +434,7 @@ DumpImage::DumpImage(LAMMPS *lmp, int narg, char **arg) : viewflag = STATIC; if (thetastr || phistr || cflag == DYNAMIC || - upxstr || upystr || upzstr || zoomstr || perspstr) viewflag = DYNAMIC; + upxstr || upystr || upzstr || zoomstr) viewflag = DYNAMIC; box_bounds(); if (cflag == STATIC) box_center(); @@ -553,13 +538,6 @@ void DumpImage::init_style() if (!input->variable->equalstyle(zoomvar)) error->all(FLERR,"Variable for dump image zoom is invalid style"); } - if (perspstr) { - perspvar = input->variable->find(perspstr); - if (perspvar < 0) - error->all(FLERR,"Variable name for dump image persp does not exist"); - if (!input->variable->equalstyle(perspvar)) - error->all(FLERR,"Variable for dump image persp is invalid style"); - } // set up type -> element mapping @@ -719,12 +697,10 @@ void DumpImage::view_params() if (upystr) image->up[1] = input->variable->compute_equal(upyvar); if (upzstr) image->up[2] = input->variable->compute_equal(upzvar); - // zoom and perspective + // zoom if (zoomstr) image->zoom = input->variable->compute_equal(zoomvar); if (image->zoom <= 0.0) error->all(FLERR,"Invalid dump image zoom value"); - if (perspstr) image->persp = input->variable->compute_equal(perspvar); - if (image->persp < 0.0) error->all(FLERR,"Invalid dump image persp value"); // remainder of view setup is internal to Image class diff --git a/src/dump_image.h b/src/dump_image.h index 4faf558b1a..fb560e252d 100644 --- a/src/dump_image.h +++ b/src/dump_image.h @@ -67,8 +67,8 @@ class DumpImage : public DumpCustom { int cxvar,cyvar,czvar; // index to box center vars char *upxstr,*upystr,*upzstr; // view up vector variables int upxvar,upyvar,upzvar; // index to up vector vars - char *zoomstr,*perspstr; // view zoom and perspective variables - int zoomvar,perspvar; // index to zoom,persp vars + char *zoomstr; // view zoom variable name + int zoomvar; // index to zoom variable int boxflag,axesflag; // 0/1 for draw box and axes double boxdiam,axeslen,axesdiam; // params for drawing box and axes int subboxflag; @@ -136,10 +136,6 @@ E: Invalid dump image theta value Theta must be between 0.0 and 180.0 inclusive. -E: Dump image persp option is not yet supported - -Self-explanatory. - E: Dump image line requires atom style line Self-explanatory. @@ -196,14 +192,6 @@ E: Variable for dump image zoom is invalid style Must be an equal-style variable. -E: Variable name for dump image persp does not exist - -Self-explanatory. - -E: Variable for dump image persp is invalid style - -Must be an equal-style variable. - E: Invalid dump image element name The specified element name was not in the standard list of elements. @@ -218,10 +206,6 @@ E: Invalid dump image zoom value Zoom value must be > 0.0. -E: Invalid dump image persp value - -Persp value must be >= 0.0. - E: Invalid color in dump_modify command The specified color name was not in the list of recognized colors. From 25bda86ad0941c294fb66389d2db00bfaed9efc6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 28 Sep 2020 12:52:32 -0400 Subject: [PATCH 040/182] fix typo --- src/omp_compat.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/omp_compat.h b/src/omp_compat.h index 340bbca204..366dd9371c 100644 --- a/src/omp_compat.h +++ b/src/omp_compat.h @@ -38,7 +38,7 @@ # define LAMMPS_OMP_COMPAT 4 # endif # elif defined(__GNUC__) -# if __GNUC__ >= 0 +# if __GNUC__ >= 9 # define LAMMPS_OMP_COMPAT 4 # endif # endif From 8bc67f17cc898e19c023fe5ac13eb08fc96b9162 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 28 Sep 2020 13:46:53 -0400 Subject: [PATCH 041/182] fully integrate pair style coul/tt into manual --- doc/src/Commands_pair.rst | 1 + doc/src/pair_coul_tt.rst | 44 +++++++++++++++++++-------------------- doc/src/pair_style.rst | 1 + 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/doc/src/Commands_pair.rst b/doc/src/Commands_pair.rst index 888a445daa..70a6fe6e35 100644 --- a/doc/src/Commands_pair.rst +++ b/doc/src/Commands_pair.rst @@ -81,6 +81,7 @@ OPT. * :doc:`coul/slater/long ` * :doc:`coul/shield ` * :doc:`coul/streitz ` + * :doc:`coul/tt ` * :doc:`coul/wolf (ko) ` * :doc:`coul/wolf/cs ` * :doc:`dpd (gio) ` diff --git a/doc/src/pair_coul_tt.rst b/doc/src/pair_coul_tt.rst index 885cce073e..165355bd22 100644 --- a/doc/src/pair_coul_tt.rst +++ b/doc/src/pair_coul_tt.rst @@ -10,7 +10,7 @@ Syntax pair_style style args -* style = *coul/tt* +* style = *coul/tt* * args = list of arguments for a particular style .. parsed-literal:: @@ -33,40 +33,40 @@ Examples Description """"""""""" -The *coul/tt* pair styles are meant to be used with force fields that +The *coul/tt* pair style is meant to be used with force fields that include explicit polarization through Drude dipoles. The *coul/tt* pair style should be used as a sub-style within in the :doc:`pair_style hybrid/overlay ` command, in conjunction with a -main pair style including Coulomb interactions and *thole* pair style, -or with *lj/cut/thole/long* pair style that is equivalent to the combination +main pair style including Coulomb interactions and *thole* pair style, +or with *lj/cut/thole/long* pair style that is equivalent to the combination of preceding two. -The *coul/tt* pair styles compute the charge-dipole Coulomb interaction damped +The *coul/tt* pair styles compute the charge-dipole Coulomb interaction damped at short distances by a function .. math:: f_{n,ij}(r) = 1 - c_{ij} \cdot e^{-b_{ij} r} \sum_{k=0}^n \frac{(b_{ij} r)^k}{k!} -This function results from an adaptation to the Coulomb interaction :ref:`(Salanne) +This function results from an adaptation to the Coulomb interaction :ref:`(Salanne) ` of the damping function originally proposed by :ref:`Tang Toennies ` for van der Waals interactions. The polynomial takes the degree 4 for damping the Coulomb interaction. -The parameters :math:`b_{ij}` and :math:`c_{ij}` could be determined from -first-principle calculations for small, mainly mono-atomic, ions :ref:`(Salanne) +The parameters :math:`b_{ij}` and :math:`c_{ij}` could be determined from +first-principle calculations for small, mainly mono-atomic, ions :ref:`(Salanne) `, or else treated as empirical for large molecules. -In pair styles with Drude induced dipoles, this damping function is typically -applied to the interactions between a Drude charge (either :math:`q_{D,i}` on -a Drude particle or :math:`-q_{D,i}` on the respective -Drude core)) and a charge on a non-polarizable atom, :math:`q_{j}`. +In pair styles with Drude induced dipoles, this damping function is typically +applied to the interactions between a Drude charge (either :math:`q_{D,i}` on +a Drude particle or :math:`-q_{D,i}` on the respective +Drude core)) and a charge on a non-polarizable atom, :math:`q_{j}`. -The Tang-Toennies function could also be used to damp electrostatic -interactions between the (non-polarizable part of the) charge of a core, -:math:`q_{i}-q_{D,i}`, and the Drude charge of another, :math:`-q_{D,j}`. -The :math:`b_{ij}` and :math:`c_{ij}` are equal to :math:`b_{ji}` and +The Tang-Toennies function could also be used to damp electrostatic +interactions between the (non-polarizable part of the) charge of a core, +:math:`q_{i}-q_{D,i}`, and the Drude charge of another, :math:`-q_{D,j}`. +The :math:`b_{ij}` and :math:`c_{ij}` are equal to :math:`b_{ji}` and :math:`c_{ji}` in the case of core-core interactions. For pair_style *coul/tt*\ , the following coefficients must be defined for @@ -78,9 +78,9 @@ as in the example above. * degree of polynomial (positive integer) * cutoff (distance units) -The last two coefficients are optional. If not specified the global +The last two coefficients are optional. If not specified the global degree of the polynomial or the global cutoff specified in the pair_style -command are used. In order to specify a cutoff (forth argument), the degree of +command are used. In order to specify a cutoff (forth argument), the degree of the polynomial (third argument) must also be specified. ---------- @@ -95,10 +95,10 @@ Restrictions """""""""""" These pair styles are part of the USER-DRUDE package. They are only -enabled if LAMMPS was built with that package. See the :doc:`Build package +enabled if LAMMPS was built with that package. See the :doc:`Build package ` doc page for more info. -This pair_style should currently not be used with the :doc:`charmm dihedral +This pair_style should currently not be used with the :doc:`charmm dihedral style ` if the latter has non-zero 1-4 weighting factors. This is because the *coul/tt* pair style does not know which pairs are 1-4 partners of which dihedrals. @@ -106,8 +106,8 @@ pairs are 1-4 partners of which dihedrals. Related commands """""""""""""""" -:doc:`fix drude `, :doc:`fix langevin/drude `, -:doc:`fix drude/transform `, +:doc:`fix drude `, :doc:`fix langevin/drude `, +:doc:`fix drude/transform `, :doc:`compute temp/drude `, :doc:`pair_style thole ` diff --git a/doc/src/pair_style.rst b/doc/src/pair_style.rst index 4feaeacad0..887840cedf 100644 --- a/doc/src/pair_style.rst +++ b/doc/src/pair_style.rst @@ -144,6 +144,7 @@ accelerated styles exist. * :doc:`coul/slater/long ` - long-range smeared out Coulomb * :doc:`coul/shield ` - Coulomb for boron nitride for use with :doc:`ilp/graphene/hbn ` potential * :doc:`coul/streitz ` - Coulomb via Streitz/Mintmire Slater orbitals +* :doc:`coul/tt ` - damped charge-dipole Coulomb for Drude dipoles * :doc:`coul/wolf ` - Coulomb via Wolf potential * :doc:`coul/wolf/cs ` - Coulomb via Wolf potential with core/shell adjustments * :doc:`dpd ` - dissipative particle dynamics (DPD) From c217c8df24dadb3907657c9f236d4177ebfb22c4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 28 Sep 2020 13:48:58 -0400 Subject: [PATCH 042/182] shorten example and do not print CPU time output to avoid false positives when comparing --- .../drude/ethylene_glycol/in.ethylene_glycol | 6 +- .../log.18Sep20.ethylene_glycol.g++.1 | 200 +++++++++ .../log.18Sep20.ethylene_glycol.g++.4 | 200 +++++++++ .../log.24Aug20.ethylene_glycol.g++.1 | 389 ------------------ .../log.24Aug20.ethylene_glycol.g++.4 | 389 ------------------ 5 files changed, 403 insertions(+), 781 deletions(-) create mode 100644 examples/USER/drude/ethylene_glycol/log.18Sep20.ethylene_glycol.g++.1 create mode 100644 examples/USER/drude/ethylene_glycol/log.18Sep20.ethylene_glycol.g++.4 delete mode 100644 examples/USER/drude/ethylene_glycol/log.24Aug20.ethylene_glycol.g++.1 delete mode 100644 examples/USER/drude/ethylene_glycol/log.24Aug20.ethylene_glycol.g++.4 diff --git a/examples/USER/drude/ethylene_glycol/in.ethylene_glycol b/examples/USER/drude/ethylene_glycol/in.ethylene_glycol index 45268f8202..26f051b4ef 100644 --- a/examples/USER/drude/ethylene_glycol/in.ethylene_glycol +++ b/examples/USER/drude/ethylene_glycol/in.ethylene_glycol @@ -72,9 +72,9 @@ fix DTINV all drude/transform/inverse fix ICECUBE all momentum 1000 linear 1 1 1 -thermo_style custom step time cpu etotal ke pe ebond eangle evdwl ecoul elong & +thermo_style custom step etotal ke pe ebond eangle evdwl ecoul elong & press vol density c_TATOM c_TDRUDE[1] c_TDRUDE[2] -thermo 10 +thermo 50 -run 2000 +run 500 diff --git a/examples/USER/drude/ethylene_glycol/log.18Sep20.ethylene_glycol.g++.1 b/examples/USER/drude/ethylene_glycol/log.18Sep20.ethylene_glycol.g++.1 new file mode 100644 index 0000000000..51de85bcb1 --- /dev/null +++ b/examples/USER/drude/ethylene_glycol/log.18Sep20.ethylene_glycol.g++.1 @@ -0,0 +1,200 @@ +LAMMPS (24 Aug 2020) + using 1 OpenMP thread(s) per MPI task +# created by fftool + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls + +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 coul/tt 4 8.0 +pair_modify tail yes +kspace_style pppm 1.0e-5 + +read_data data.ethylene_glycol +Reading data file ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (35.000000 35.000000 35.000000) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 2800 atoms + scanning bonds ... + 2 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 9 = max dihedrals/atom + reading bonds ... + 2600 bonds + reading angles ... + 2800 angles + reading dihedrals ... + 3000 dihedrals +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0.0 0.0 0.5 + special bond factors coul: 0.0 0.0 0.5 + 5 = max # of 1-2 neighbors + 6 = max # of 1-3 neighbors + 10 = max # of 1-4 neighbors + 13 = max # of special neighbors + special bonds CPU = 0.002 seconds + read_data CPU = 0.023 seconds + +pair_coeff 1 1 lj/cut/coul/long 0.057289 3.500000 # CTO CTO ~ +pair_coeff 1 2 lj/cut/coul/long 0.091945 3.304542 # CTO OHG ~ +pair_coeff 1 3 lj/cut/coul/long 0.038625 2.958040 # CTO H1O ~ +pair_coeff 1 4 lj/cut/coul/long 0.000000 0.000000 # CTO HOG ~ +pair_coeff 2 2 lj/cut/coul/long 0.147565 3.120000 # OHG OHG ~ +pair_coeff 2 3 lj/cut/coul/long 0.061990 2.792848 # OHG H1O ~ +pair_coeff 2 4 lj/cut/coul/long 0.000000 0.000000 # OHG HOG ~ +pair_coeff 3 3 lj/cut/coul/long 0.026041 2.500000 # H1O H1O ~ +pair_coeff 3 4 lj/cut/coul/long 0.000000 0.000000 # H1O HOG ~ +pair_coeff 4 4 lj/cut/coul/long 0.000000 0.000000 # HOG HOG ~ +pair_coeff * 5* lj/cut/coul/long 0.000000 0.000000 +pair_coeff 1 1 thole 1.662 +pair_coeff 1 2 thole 1.561 +pair_coeff 1 5 thole 1.662 +pair_coeff 1 6 thole 1.561 +pair_coeff 2 2 thole 1.467 +pair_coeff 2 5 thole 1.561 +pair_coeff 2 6 thole 1.467 +pair_coeff 5 5 thole 1.662 +pair_coeff 5 6 thole 1.561 +pair_coeff 6 6 thole 1.467 +pair_coeff 2 4 coul/tt 4.5 1.0 +pair_coeff 4 6 coul/tt 4.5 1.0 +pair_coeff 1 4 coul/tt 4.5 1.0 +pair_coeff 4 5 coul/tt 4.5 1.0 + +group ATOMS type 1 2 3 4 +2000 atoms in group ATOMS +group CORES type 1 2 +800 atoms in group CORES +group DRUDES type 5 6 +800 atoms in group DRUDES + +fix DRUDE all drude C C N N D D + +fix SHAKE ATOMS shake 0.0001 20 0 b 3 4 + 400 = # of size 2 clusters + 400 = # of size 3 clusters + 0 = # of size 4 clusters + 0 = # of frozen angles + find clusters CPU = 0.001 seconds + +neighbor 2.0 bin + +timestep 1.0 + +variable TK equal 298.0 +variable TDK equal 1.0 +variable PBAR equal 1.0 + +comm_modify vel yes +velocity ATOMS create ${TK} 12345 +velocity ATOMS create 298 12345 + +compute TATOM ATOMS temp +compute TDRUDE all temp/drude + +fix DTDIR all drude/transform/direct +fix TSTAT ATOMS npt temp ${TK} ${TK} 200 iso ${PBAR} ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 ${TK} 200 iso ${PBAR} ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 298 200 iso ${PBAR} ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 298 200 iso 1 ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 298 200 iso 1 1 1000 +fix_modify TSTAT temp TATOM press thermo_press +WARNING: Temperature for fix modify is not for group all (src/fix_nh.cpp:1428) +fix TSTDR DRUDES nvt temp ${TDK} ${TDK} 50 +fix TSTDR DRUDES nvt temp 1 ${TDK} 50 +fix TSTDR DRUDES nvt temp 1 1 50 +fix DTINV all drude/transform/inverse + +fix ICECUBE all momentum 1000 linear 1 1 1 + +thermo_style custom step etotal ke pe ebond eangle evdwl ecoul elong press vol density c_TATOM c_TDRUDE[1] c_TDRUDE[2] +thermo 50 + +run 500 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:328) + G vector (1/distance) = 0.41206781 + grid = 54 54 54 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0040479865 + estimated relative force accuracy = 1.2190391e-05 + using double precision FFTW3 + 3d grid and FFT values/proc = 250047 157464 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 13 +New max number of 1-2 to 1-4 neighbors: 13 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10 + ghost atom cutoff = 10 + binsize = 5, bins = 7 7 7 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair thole, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (3) pair coul/tt, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 39.43 | 39.43 | 39.43 Mbytes +Step TotEng KinEng PotEng E_bond E_angle E_vdwl E_coul E_long Press Volume Density c_TATOM c_TDRUDE[1] c_TDRUDE[2] + 0 2707.9246 1420.362 1287.5627 1474.8647 30.734202 -461.31379 540022.21 -539778.93 -9408.4231 42875 0.48077588 298 294.34401 6.9394757 + 50 1418.4664 1249.502 168.96443 309.99547 480.01554 -495.04808 539716.53 -540017.02 3344.2851 42776.949 0.48187789 252.07241 255.56807 12.841403 + 100 1391.631 1287.2692 104.36186 333.86636 427.43215 -456.38003 539638.17 -540023.61 -3962.1786 42668.283 0.48310512 265.74273 268.23371 3.3477444 + 150 1404.7861 1334.1949 70.591169 285.69315 480.49154 -340.69071 539518.01 -540045.75 -2082.9182 42395.713 0.48621109 274.19438 278.9463 1.6008228 + 200 1425.8199 1378.4982 47.321668 460.35813 459.3409 -415.44782 539411.67 -540044.6 6205.8012 42117.045 0.48942811 284.32248 288.46225 1.1474711 + 250 1451.5312 1408.0791 43.452124 376.36315 598.2256 -302.5574 539235.03 -540053.8 -3523.5224 41843.302 0.49263001 290.29735 294.90585 0.66499891 + 300 1460.3317 1532.45 -72.118296 394.63946 561.19451 -334.56109 539192.83 -540050.12 4984.7253 41569.486 0.49587493 316.03909 320.8862 0.85911251 + 350 1465.3219 1564.1529 -98.830958 418.42916 585.9688 -296.62501 539077.24 -540036.78 740.62275 41386.895 0.49806264 322.55774 327.69261 0.54088355 + 400 1446.0613 1528.77 -82.708678 414.47172 582.41623 -279.89537 539064.81 -540045.35 -1758.0709 41241.935 0.49981326 314.95112 320.11103 0.86624717 + 450 1411.6647 1569.3338 -157.66914 380.54196 668.12309 -290.80881 538968.32 -540032.63 3122.7219 41154.153 0.50087936 323.38401 328.46391 1.1709084 + 500 1366.0173 1653.6398 -287.62246 433.22615 598.36853 -281.95956 538837.44 -540025.77 -2920.9274 41080.823 0.50177344 340.53461 346.03932 1.3737011 +Loop time of 21.2526 on 1 procs for 500 steps with 2800 atoms + +Performance: 2.033 ns/day, 11.807 hours/ns, 23.526 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 5.0143 | 5.0143 | 5.0143 | 0.0 | 23.59 +Bond | 0.34285 | 0.34285 | 0.34285 | 0.0 | 1.61 +Kspace | 7.6454 | 7.6454 | 7.6454 | 0.0 | 35.97 +Neigh | 0.36282 | 0.36282 | 0.36282 | 0.0 | 1.71 +Comm | 0.035159 | 0.035159 | 0.035159 | 0.0 | 0.17 +Output | 0.00068069 | 0.00068069 | 0.00068069 | 0.0 | 0.00 +Modify | 7.8451 | 7.8451 | 7.8451 | 0.0 | 36.91 +Other | | 0.006337 | | | 0.03 + +Nlocal: 2800.00 ave 2800 max 2800 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 6816.00 ave 6816 max 6816 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 446966.0 ave 446966 max 446966 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 446966 +Ave neighs/atom = 159.63071 +Ave special neighs/atom = 11.714286 +Neighbor list builds = 28 +Dangerous builds = 0 + +Total wall time: 0:00:21 diff --git a/examples/USER/drude/ethylene_glycol/log.18Sep20.ethylene_glycol.g++.4 b/examples/USER/drude/ethylene_glycol/log.18Sep20.ethylene_glycol.g++.4 new file mode 100644 index 0000000000..8654de9e7d --- /dev/null +++ b/examples/USER/drude/ethylene_glycol/log.18Sep20.ethylene_glycol.g++.4 @@ -0,0 +1,200 @@ +LAMMPS (24 Aug 2020) + using 1 OpenMP thread(s) per MPI task +# created by fftool + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls + +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 coul/tt 4 8.0 +pair_modify tail yes +kspace_style pppm 1.0e-5 + +read_data data.ethylene_glycol +Reading data file ... + orthogonal box = (0.0000000 0.0000000 0.0000000) to (35.000000 35.000000 35.000000) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 2800 atoms + scanning bonds ... + 2 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 9 = max dihedrals/atom + reading bonds ... + 2600 bonds + reading angles ... + 2800 angles + reading dihedrals ... + 3000 dihedrals +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0.0 0.0 0.5 + special bond factors coul: 0.0 0.0 0.5 + 5 = max # of 1-2 neighbors + 6 = max # of 1-3 neighbors + 10 = max # of 1-4 neighbors + 13 = max # of special neighbors + special bonds CPU = 0.001 seconds + read_data CPU = 0.010 seconds + +pair_coeff 1 1 lj/cut/coul/long 0.057289 3.500000 # CTO CTO ~ +pair_coeff 1 2 lj/cut/coul/long 0.091945 3.304542 # CTO OHG ~ +pair_coeff 1 3 lj/cut/coul/long 0.038625 2.958040 # CTO H1O ~ +pair_coeff 1 4 lj/cut/coul/long 0.000000 0.000000 # CTO HOG ~ +pair_coeff 2 2 lj/cut/coul/long 0.147565 3.120000 # OHG OHG ~ +pair_coeff 2 3 lj/cut/coul/long 0.061990 2.792848 # OHG H1O ~ +pair_coeff 2 4 lj/cut/coul/long 0.000000 0.000000 # OHG HOG ~ +pair_coeff 3 3 lj/cut/coul/long 0.026041 2.500000 # H1O H1O ~ +pair_coeff 3 4 lj/cut/coul/long 0.000000 0.000000 # H1O HOG ~ +pair_coeff 4 4 lj/cut/coul/long 0.000000 0.000000 # HOG HOG ~ +pair_coeff * 5* lj/cut/coul/long 0.000000 0.000000 +pair_coeff 1 1 thole 1.662 +pair_coeff 1 2 thole 1.561 +pair_coeff 1 5 thole 1.662 +pair_coeff 1 6 thole 1.561 +pair_coeff 2 2 thole 1.467 +pair_coeff 2 5 thole 1.561 +pair_coeff 2 6 thole 1.467 +pair_coeff 5 5 thole 1.662 +pair_coeff 5 6 thole 1.561 +pair_coeff 6 6 thole 1.467 +pair_coeff 2 4 coul/tt 4.5 1.0 +pair_coeff 4 6 coul/tt 4.5 1.0 +pair_coeff 1 4 coul/tt 4.5 1.0 +pair_coeff 4 5 coul/tt 4.5 1.0 + +group ATOMS type 1 2 3 4 +2000 atoms in group ATOMS +group CORES type 1 2 +800 atoms in group CORES +group DRUDES type 5 6 +800 atoms in group DRUDES + +fix DRUDE all drude C C N N D D + +fix SHAKE ATOMS shake 0.0001 20 0 b 3 4 + 400 = # of size 2 clusters + 400 = # of size 3 clusters + 0 = # of size 4 clusters + 0 = # of frozen angles + find clusters CPU = 0.000 seconds + +neighbor 2.0 bin + +timestep 1.0 + +variable TK equal 298.0 +variable TDK equal 1.0 +variable PBAR equal 1.0 + +comm_modify vel yes +velocity ATOMS create ${TK} 12345 +velocity ATOMS create 298 12345 + +compute TATOM ATOMS temp +compute TDRUDE all temp/drude + +fix DTDIR all drude/transform/direct +fix TSTAT ATOMS npt temp ${TK} ${TK} 200 iso ${PBAR} ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 ${TK} 200 iso ${PBAR} ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 298 200 iso ${PBAR} ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 298 200 iso 1 ${PBAR} 1000 +fix TSTAT ATOMS npt temp 298 298 200 iso 1 1 1000 +fix_modify TSTAT temp TATOM press thermo_press +WARNING: Temperature for fix modify is not for group all (src/fix_nh.cpp:1428) +fix TSTDR DRUDES nvt temp ${TDK} ${TDK} 50 +fix TSTDR DRUDES nvt temp 1 ${TDK} 50 +fix TSTDR DRUDES nvt temp 1 1 50 +fix DTINV all drude/transform/inverse + +fix ICECUBE all momentum 1000 linear 1 1 1 + +thermo_style custom step etotal ke pe ebond eangle evdwl ecoul elong press vol density c_TATOM c_TDRUDE[1] c_TDRUDE[2] +thermo 50 + +run 500 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:328) + G vector (1/distance) = 0.41206781 + grid = 54 54 54 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0040479865 + estimated relative force accuracy = 1.2190391e-05 + using double precision FFTW3 + 3d grid and FFT values/proc = 81648 40824 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 13 +New max number of 1-2 to 1-4 neighbors: 13 (+0) +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10 + ghost atom cutoff = 10 + binsize = 5, bins = 7 7 7 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair lj/cut/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair thole, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (3) pair coul/tt, perpetual, skip from (1) + attributes: half, newton on + pair build: skip + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 21.28 | 21.36 | 21.43 Mbytes +Step TotEng KinEng PotEng E_bond E_angle E_vdwl E_coul E_long Press Volume Density c_TATOM c_TDRUDE[1] c_TDRUDE[2] + 0 2707.9246 1420.362 1287.5627 1474.8647 30.734202 -461.31379 540022.21 -539778.93 -9408.4231 42875 0.48077588 298 294.34401 6.9394757 + 50 1418.4665 1249.502 168.96445 309.99547 480.01554 -495.04808 539716.53 -540017.02 3344.2849 42776.949 0.48187789 252.07241 255.56807 12.841403 + 100 1391.631 1287.2692 104.36189 333.86638 427.43215 -456.38003 539638.17 -540023.61 -3962.1786 42668.283 0.48310512 265.74272 268.23371 3.3477454 + 150 1404.786 1334.1949 70.59104 285.69317 480.49154 -340.6907 539518.01 -540045.75 -2082.9181 42395.713 0.48621109 274.19439 278.9463 1.6008224 + 200 1425.8201 1378.4982 47.32185 460.35819 459.34089 -415.44783 539411.67 -540044.6 6205.8014 42117.045 0.48942811 284.32247 288.46225 1.1474763 + 250 1451.5312 1408.0791 43.45212 376.3631 598.22557 -302.55737 539235.03 -540053.8 -3523.5218 41843.302 0.49263001 290.29734 294.90584 0.66500219 + 300 1460.3316 1532.4498 -72.118238 394.63949 561.1946 -334.56112 539192.83 -540050.12 4984.7226 41569.486 0.49587493 316.03906 320.88617 0.85911374 + 350 1465.322 1564.1496 -98.827597 418.43029 585.96947 -296.62447 539077.24 -540036.78 740.63702 41386.895 0.49806264 322.55705 327.69192 0.54088385 + 400 1446.0613 1528.7739 -82.712576 414.46626 582.41806 -279.89551 539064.81 -540045.35 -1758.0964 41241.935 0.49981326 314.95192 320.11185 0.86625313 + 450 1411.6627 1569.3001 -157.63739 380.53709 668.13885 -290.80678 538968.36 -540032.62 3122.8773 41154.153 0.50087936 323.37686 328.45689 1.170821 + 500 1366.0164 1653.6078 -287.59139 433.23854 598.39638 -281.95272 538837.43 -540025.77 -2921.1108 41080.827 0.50177339 340.52802 346.03257 1.3738053 +Loop time of 8.54338 on 4 procs for 500 steps with 2800 atoms + +Performance: 5.057 ns/day, 4.746 hours/ns, 58.525 timesteps/s +96.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.1432 | 1.2405 | 1.3019 | 5.3 | 14.52 +Bond | 0.085337 | 0.091544 | 0.097553 | 1.4 | 1.07 +Kspace | 4.3889 | 4.4519 | 4.5415 | 2.6 | 52.11 +Neigh | 0.098468 | 0.098565 | 0.098639 | 0.0 | 1.15 +Comm | 0.090891 | 0.096061 | 0.102 | 1.3 | 1.12 +Output | 0.00051045 | 0.00081128 | 0.0016632 | 0.0 | 0.01 +Modify | 2.549 | 2.5525 | 2.5554 | 0.1 | 29.88 +Other | | 0.01154 | | | 0.14 + +Nlocal: 700.000 ave 721 max 665 min +Histogram: 1 0 0 0 0 0 1 0 1 1 +Nghost: 4229.75 ave 4342 max 4122 min +Histogram: 1 1 0 0 0 0 0 1 0 1 +Neighs: 111742.0 ave 117831 max 101992 min +Histogram: 1 0 0 0 0 1 0 0 0 2 + +Total # of neighbors = 446967 +Ave neighs/atom = 159.63107 +Ave special neighs/atom = 11.714286 +Neighbor list builds = 28 +Dangerous builds = 0 + +Total wall time: 0:00:08 diff --git a/examples/USER/drude/ethylene_glycol/log.24Aug20.ethylene_glycol.g++.1 b/examples/USER/drude/ethylene_glycol/log.24Aug20.ethylene_glycol.g++.1 deleted file mode 100644 index 8360131b5b..0000000000 --- a/examples/USER/drude/ethylene_glycol/log.24Aug20.ethylene_glycol.g++.1 +++ /dev/null @@ -1,389 +0,0 @@ -LAMMPS (24 Aug 2020) -# created by fftool - -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls - -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 coul/tt 4 8.0 -pair_modify tail yes -kspace_style pppm 1.0e-5 - -read_data data.ethylene_glycol -Reading data file ... - orthogonal box = (0.0000000 0.0000000 0.0000000) to (35.000000 35.000000 35.000000) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 2800 atoms - scanning bonds ... - 2 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 9 = max dihedrals/atom - reading bonds ... - 2600 bonds - reading angles ... - 2800 angles - reading dihedrals ... - 3000 dihedrals -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0.0 0.0 0.5 - special bond factors coul: 0.0 0.0 0.5 - 5 = max # of 1-2 neighbors - 6 = max # of 1-3 neighbors - 10 = max # of 1-4 neighbors - 13 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.012 seconds - -pair_coeff 1 1 lj/cut/coul/long 0.057289 3.500000 # CTO CTO ~ -pair_coeff 1 2 lj/cut/coul/long 0.091945 3.304542 # CTO OHG ~ -pair_coeff 1 3 lj/cut/coul/long 0.038625 2.958040 # CTO H1O ~ -pair_coeff 1 4 lj/cut/coul/long 0.000000 0.000000 # CTO HOG ~ -pair_coeff 2 2 lj/cut/coul/long 0.147565 3.120000 # OHG OHG ~ -pair_coeff 2 3 lj/cut/coul/long 0.061990 2.792848 # OHG H1O ~ -pair_coeff 2 4 lj/cut/coul/long 0.000000 0.000000 # OHG HOG ~ -pair_coeff 3 3 lj/cut/coul/long 0.026041 2.500000 # H1O H1O ~ -pair_coeff 3 4 lj/cut/coul/long 0.000000 0.000000 # H1O HOG ~ -pair_coeff 4 4 lj/cut/coul/long 0.000000 0.000000 # HOG HOG ~ -pair_coeff * 5* lj/cut/coul/long 0.000000 0.000000 -pair_coeff 1 1 thole 1.662 -pair_coeff 1 2 thole 1.561 -pair_coeff 1 5 thole 1.662 -pair_coeff 1 6 thole 1.561 -pair_coeff 2 2 thole 1.467 -pair_coeff 2 5 thole 1.561 -pair_coeff 2 6 thole 1.467 -pair_coeff 5 5 thole 1.662 -pair_coeff 5 6 thole 1.561 -pair_coeff 6 6 thole 1.467 -pair_coeff 2 4 coul/tt 4.5 1.0 -pair_coeff 4 6 coul/tt 4.5 1.0 -pair_coeff 1 4 coul/tt 4.5 1.0 -pair_coeff 4 5 coul/tt 4.5 1.0 - -group ATOMS type 1 2 3 4 -2000 atoms in group ATOMS -group CORES type 1 2 -800 atoms in group CORES -group DRUDES type 5 6 -800 atoms in group DRUDES - -fix DRUDE all drude C C N N D D - -fix SHAKE ATOMS shake 0.0001 20 0 b 3 4 - 400 = # of size 2 clusters - 400 = # of size 3 clusters - 0 = # of size 4 clusters - 0 = # of frozen angles - find clusters CPU = 0.001 seconds - -neighbor 2.0 bin - -timestep 1.0 - -variable TK equal 298.0 -variable TDK equal 1.0 -variable PBAR equal 1.0 - -comm_modify vel yes -velocity ATOMS create ${TK} 12345 -velocity ATOMS create 298 12345 - -compute TATOM ATOMS temp -compute TDRUDE all temp/drude - -fix DTDIR all drude/transform/direct -fix TSTAT ATOMS npt temp ${TK} ${TK} 200 iso ${PBAR} ${PBAR} 1000 -fix TSTAT ATOMS npt temp 298 ${TK} 200 iso ${PBAR} ${PBAR} 1000 -fix TSTAT ATOMS npt temp 298 298 200 iso ${PBAR} ${PBAR} 1000 -fix TSTAT ATOMS npt temp 298 298 200 iso 1 ${PBAR} 1000 -fix TSTAT ATOMS npt temp 298 298 200 iso 1 1 1000 -fix_modify TSTAT temp TATOM press thermo_press -WARNING: Temperature for fix modify is not for group all (../fix_nh.cpp:1428) -fix TSTDR DRUDES nvt temp ${TDK} ${TDK} 50 -fix TSTDR DRUDES nvt temp 1 ${TDK} 50 -fix TSTDR DRUDES nvt temp 1 1 50 -fix DTINV all drude/transform/inverse - -fix ICECUBE all momentum 1000 linear 1 1 1 - -thermo_style custom step time cpu etotal ke pe ebond eangle evdwl ecoul elong press vol density c_TATOM c_TDRUDE[1] c_TDRUDE[2] -thermo 10 - -run 2000 -PPPM initialization ... - using 12-bit tables for long-range coulomb (../kspace.cpp:328) - G vector (1/distance) = 0.41206781 - grid = 54 54 54 - stencil order = 5 - estimated absolute RMS force accuracy = 0.0040479865 - estimated relative force accuracy = 1.2190391e-05 - using double precision KISS FFT - 3d grid and FFT values/proc = 250047 157464 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 13 -New max number of 1-2 to 1-4 neighbors: 13 (+0) -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 10 - ghost atom cutoff = 10 - binsize = 5, bins = 7 7 7 - 3 neighbor lists, perpetual/occasional/extra = 3 0 0 - (1) pair lj/cut/coul/long, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard - (2) pair thole, perpetual, skip from (1) - attributes: half, newton on - pair build: skip - stencil: none - bin: none - (3) pair coul/tt, perpetual, skip from (1) - attributes: half, newton on - pair build: skip - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 39.43 | 39.43 | 39.43 Mbytes -Step Time CPU TotEng KinEng PotEng E_bond E_angle E_vdwl E_coul E_long Press Volume Density c_TATOM c_TDRUDE[1] c_TDRUDE[2] - 0 0 0 2707.9246 1420.362 1287.5627 1474.8647 30.734202 -461.31379 540022.21 -539778.93 -9408.4231 42875 0.48077588 298 294.34401 6.9394757 - 10 10 0.66722703 1866.1234 1294.3904 571.73299 570.18548 421.90708 -480.70585 539943.81 -539929.74 805.31575 42854.367 0.48100736 216.74278 221.57505 99.651373 - 20 20 1.3338492 1639.4254 1025.541 613.88439 440.75582 630.81291 -511.62082 539884.11 -539931.54 3547.7591 42831.812 0.48126066 189.9745 191.41076 47.238176 - 30 30 2.0093691 1509.2246 1199.5696 309.65502 372.66235 422.42807 -441.22393 539785.92 -539996.76 -2255.2097 42822.727 0.48136275 232.23532 234.10184 34.834744 - 40 40 2.694386 1447.7122 1208.8207 238.89145 301.47584 466.79595 -415.52093 539713.64 -540015.07 -2983.4666 42805.664 0.48155464 240.97408 243.39825 20.121373 - 50 50 3.3607922 1418.4665 1249.502 168.96453 309.99547 480.01554 -495.04808 539716.53 -540017.02 3344.2849 42776.949 0.48187789 252.07241 255.56807 12.841402 - 60 60 4.0487151 1401.9374 1239.9607 161.97672 467.90054 298.63561 -481.19864 539718.72 -540016.73 6314.7204 42763.12 0.48203372 251.90217 255.43544 9.1055211 - 70 70 4.7337511 1396.4535 1021.9568 374.49665 585.05591 367.14909 -436.69254 539677.13 -540007.02 -9573.8028 42770.007 0.4819561 207.52883 210.90348 6.7497278 - 80 80 5.435864 1388.5232 1234.429 154.09425 291.38 446.20262 -454.21016 539690.22 -540020.29 -2596.4424 42743.245 0.48225786 251.84239 256.22625 5.2041745 - 90 90 6.1335561 1390.1275 1165.6307 224.49675 292.42637 610.78166 -509.169 539648.43 -540009.54 2755.6801 42701.879 0.48272503 239.29515 242.40904 3.9881049 - 100 100 6.8105361 1391.631 1287.2692 104.36183 333.86635 427.43215 -456.38003 539638.17 -540023.61 -3962.1785 42668.283 0.48310512 265.74273 268.23371 3.347745 - 110 110 7.5044641 1392.4961 1128.7784 263.71763 341.80093 547.86434 -397.70381 539615.87 -540033.75 -5131.6566 42619.2 0.48366149 231.88962 235.24089 2.8704355 - 120 120 8.184123 1391.2913 1316.2525 75.038706 302.07873 445.61483 -439.78763 539603.43 -540019.07 376.35789 42547.904 0.48447195 270.46432 274.66659 2.6361333 - 130 130 8.8712091 1400.0626 1131.989 268.07364 519.48714 417.6662 -431.15047 539616.71 -540036.69 8538.0622 42480.874 0.48523639 233.04019 236.40124 1.8960578 - 140 140 9.5497742 1404.1881 1334.9133 69.274795 389.42101 393.34067 -367.29241 539507.94 -540028.8 -4426.6648 42444.674 0.48565024 275.02782 279.10558 1.5835282 - 150 150 10.242218 1404.7862 1334.1949 70.591327 285.69316 480.49153 -340.69071 539518.01 -540045.75 -2082.9187 42395.713 0.48621109 274.19438 278.9463 1.6008208 - 160 160 10.935114 1412.6555 1291.707 120.94846 348.76035 575.18871 -418.38779 539483.99 -540034.49 5790.6824 42339.303 0.48685889 266.64535 270.1669 1.3423668 - 170 170 11.610989 1417.1464 1394.9631 22.183375 347.96719 497.00845 -398.67453 539439.29 -540027.81 -2071.8927 42303.603 0.48726974 288.3889 291.92774 1.1210291 - 180 180 12.289061 1420.2158 1260.1514 160.06435 383.67659 547.79959 -344.95473 539442.15 -540043.12 -5707.9246 42261.493 0.48775527 259.80397 263.64509 1.1531951 - 190 190 12.958536 1419.3668 1375.1626 44.204188 383.7187 500.13274 -378.41788 539388.43 -540024.18 -3451.5083 42194.665 0.48852777 283.36482 287.66025 1.3527016 - 200 200 13.633367 1425.8199 1378.4982 47.321725 460.35816 459.3409 -415.44782 539411.67 -540044.6 6205.8015 42117.045 0.48942811 284.32246 288.46225 1.1474796 - 210 210 14.311682 1432.8476 1458.746 -25.898458 348.39196 519.78477 -364.59687 539324.82 -540036.04 -2670.2453 42061.074 0.4900794 300.62024 305.40697 0.90989585 - 220 220 14.989255 1433.9236 1316.4386 117.48502 361.73263 586.07085 -288.11281 539309.49 -540044.33 -3665.7218 41997.584 0.49082028 270.93116 275.42919 1.1889667 - 230 230 15.654224 1439.0048 1526.3478 -87.342964 396.76966 419.31407 -364.67912 539312.78 -540045.43 7360.3014 41924.153 0.49167997 315.32585 319.5731 0.92637077 - 240 240 16.34516 1447.1229 1465.5412 -18.41826 387.84589 555.89046 -357.40376 539236.35 -540033.29 1804.1536 41878.572 0.49221511 302.34061 306.96246 0.64845084 - 250 250 17.011375 1451.5312 1408.0792 43.451972 376.36312 598.22556 -302.55742 539235.03 -540053.8 -3523.5226 41843.302 0.49263001 290.29737 294.90587 0.66500287 - 260 260 17.722074 1451.912 1486.9382 -35.026201 439.39663 496.5383 -294.82208 539179.22 -540041.63 -3359.5383 41794.408 0.49320632 306.86148 311.37488 0.79644143 - 270 270 18.416089 1455.7826 1489.843 -34.060455 384.68473 584.319 -345.52517 539213.2 -540050.09 4219.7839 41735.543 0.49390195 307.50271 312.00088 0.76256308 - 280 280 19.086374 1459.6904 1557.7147 -98.02431 363.40631 544.03097 -338.56088 539195.96 -540044.55 -1927.559 41691.464 0.49442413 321.11857 326.30138 0.62349318 - 290 290 19.776339 1458.5631 1502.6363 -44.073109 468.84588 480.27988 -273.91331 539154.14 -540045.25 -6405.1657 41640.349 0.49503106 309.96991 314.6214 0.8863505 - 300 300 20.460839 1460.3318 1532.4499 -72.11807 394.63947 561.19448 -334.56112 539192.83 -540050.12 4984.7237 41569.486 0.49587494 316.03907 320.88618 0.85911384 - 310 310 21.167455 1465.72 1493.2202 -27.500152 413.70603 630.92769 -345.49766 539150.28 -540033.83 3577.7209 41517.391 0.49649714 307.6908 312.80394 0.57266047 - 320 320 21.849908 1465.4882 1660.5838 -195.09555 367.20336 477.5937 -303.61685 539152.63 -540037.91 -1201.1197 41482.202 0.49691832 342.85705 347.89093 0.58244644 - 330 330 22.545706 1465.9528 1506.4911 -40.538288 425.9134 568.10101 -249.05186 539108.47 -540033.08 -1066.8372 41444.504 0.49737031 310.75826 315.56281 0.62005138 - 340 340 23.236471 1465.941 1557.6335 -91.692439 381.97546 625.89135 -296.40185 539081.74 -540030.48 4892.9571 41406.266 0.49782962 321.30678 326.29483 0.60253345 - 350 350 23.918806 1465.3219 1564.1522 -98.830312 418.42988 585.96966 -296.62497 539077.24 -540036.78 740.62795 41386.895 0.49806264 322.5576 327.69246 0.54088855 - 360 360 24.618034 1462.6063 1545.8716 -83.265302 514.18386 506.65245 -255.48504 539024.01 -540031.84 -7180.5551 41369.254 0.49827502 319.00119 323.79976 0.66034847 - 370 370 25.302386 1458.1673 1587.936 -129.76865 389.00162 580.31809 -293.01759 539062.35 -540044.02 1831.7475 41328.293 0.49876887 327.28902 332.55426 0.79099725 - 380 380 25.979058 1456.1242 1571.9673 -115.84304 389.73109 617.48838 -335.789 539071.87 -540039.48 3128.4244 41293.128 0.49919361 324.14157 329.21858 0.7658851 - 390 390 26.672543 1451.8986 1566.3578 -114.45925 409.58196 595.32553 -323.84183 539065.42 -540042.85 -2047.1954 41270.538 0.49946685 323.40592 328.06089 0.72893881 - 400 400 27.35931 1446.0614 1528.7698 -82.708453 414.47026 582.41586 -279.89484 539064.81 -540045.35 -1758.0676 41241.935 0.49981326 314.95109 320.111 0.86625159 - 410 410 28.041399 1440.2005 1651.8206 -211.62014 396.56866 533.57277 -312.80562 539046.01 -540042.07 4444.0299 41209.153 0.50021086 340.44948 345.87957 0.93036258 - 420 420 28.713939 1435.656 1554.4533 -118.79733 454.51792 576.06635 -316.30708 539049.51 -540045.56 3709.2547 41194.366 0.50039042 320.18642 325.47663 0.90533533 - 430 430 29.408968 1427.9462 1634.1145 -206.16837 461.69825 552.56741 -278.82495 538945.66 -540038.11 -5309.7858 41192.427 0.50041397 336.91486 342.13346 0.99752021 - 440 440 30.100174 1419.5461 1581.5128 -161.96678 418.66024 618.71093 -258.37983 538949.14 -540039.04 -45.04328 41173.678 0.50064185 325.71366 331.04339 1.1192027 - 450 450 30.781165 1411.6642 1569.329 -157.66479 380.5392 668.12618 -290.80879 538968.32 -540032.63 3122.7195 41154.153 0.50087936 323.38298 328.46291 1.1708776 - 460 460 31.469372 1402.5342 1627.6241 -225.08988 452.16964 578.69178 -298.30865 538927.93 -540030.11 -2417.9663 41145.38 0.50098617 335.42073 340.6408 1.2610836 - 470 470 32.141833 1393.2235 1617.2654 -224.04193 436.17938 569.79398 -278.51398 538933.88 -540035.19 -3103.9764 41128.379 0.50119325 333.09846 338.43145 1.3358906 - 480 480 32.83543 1384.531 1583.0622 -198.53121 460.65928 603.4034 -285.16458 538894.86 -540025.61 2315.2361 41100.553 0.50153257 325.89657 331.2085 1.4386937 - 490 490 33.512115 1375.67 1607.7541 -232.08412 478.08234 546.08252 -283.67189 538902.39 -540031.79 4472.5623 41082.804 0.50174925 331.38058 336.42849 1.3532614 - 500 500 34.196416 1366.0184 1653.6253 -287.60684 433.23462 598.37595 -281.95588 538837.43 -540025.77 -2921.0303 41080.823 0.50177344 340.53146 346.03623 1.3738058 - 510 510 34.887821 1356.1779 1625.4002 -269.22226 430.87286 614.37995 -274.02401 538850.24 -540029.11 -514.74733 41070.411 0.50190065 334.53988 340.10337 1.4033675 - 520 520 35.568482 1345.9827 1672.4342 -326.45149 410.4373 589.2259 -300.56391 538873.36 -540022.33 3422.9813 41058.601 0.50204502 344.75101 349.98437 1.3650429 - 530 530 36.253272 1335.9927 1610.2975 -274.30488 453.70829 630.07813 -307.15541 538849.89 -540018.01 -1600.1663 41058.3 0.50204869 331.45878 337.0013 1.2742094 - 540 540 36.929745 1325.3294 1622.7984 -297.469 467.07173 565.4329 -284.76737 538855.1 -540019.63 -3638.1511 41052.407 0.50212076 334.15385 339.62281 1.2734042 - 550 550 37.614929 1314.4624 1651.384 -336.92166 462.50602 578.49325 -284.70593 538808.93 -540016.13 -518.81114 41032.511 0.50236424 340.18663 345.64979 1.2068283 - 560 560 38.30281 1304.2946 1656.2572 -351.96261 418.38161 608.4185 -267.1651 538789.68 -540024.32 2812.5749 41011.222 0.50262501 341.36439 346.71837 1.1132402 - 570 570 38.968509 1294.0662 1610.486 -316.41984 441.76639 648.31424 -262.28744 538733.02 -540018.02 -1538.0916 40999.307 0.50277108 332.02722 337.14618 1.0635153 - 580 580 39.660802 1282.4498 1645.1489 -362.69914 440.312 580.63775 -236.68981 538736.22 -540024.85 -1101.4796 40982.995 0.5029712 339.24699 344.41338 1.0649616 - 590 590 40.334129 1272.0795 1684.9413 -412.86188 426.59194 579.83264 -250.92442 538728.51 -540026.41 3972.8154 40964.39 0.50319963 347.39845 352.81566 0.94731087 - 600 600 41.048102 1260.9835 1675.1026 -414.11911 426.30246 601.64923 -277.06881 538735.77 -540019.69 734.00273 40959.91 0.50325467 345.32911 350.76428 0.92422584 - 610 610 41.741513 1249.4376 1680.3024 -430.86481 461.98359 568.49567 -279.15072 538732.86 -540020.22 -2637.0497 40958.819 0.50326807 346.51864 351.86938 0.89455213 - 620 620 42.414478 1238.2494 1639.0994 -400.84996 462.30623 648.97497 -282.29483 538686.98 -540016.57 -1273.3337 40948.025 0.50340073 338.09346 343.23931 0.87622789 - 630 630 43.097268 1226.2206 1700.4438 -474.22316 415.44158 626.06093 -284.76848 538701 -540024.65 1189.5467 40932.531 0.50359129 350.55412 356.1328 0.81396661 - 640 640 43.788412 1213.6718 1722.5963 -508.92448 451.75966 596.15589 -304.19314 538680.78 -540025.33 -2040.5889 40920.034 0.50374508 355.17542 360.78185 0.80550146 - 650 650 44.479798 1200.5286 1712.0582 -511.52952 468.57523 555.5853 -284.3835 538686.81 -540030.87 -3241.3366 40899.599 0.50399677 352.98515 358.55291 0.84422259 - 660 660 45.146352 1188.0355 1686.7006 -498.66506 447.13788 623.79281 -277.27603 538662.78 -540036.48 2063.7513 40868.284 0.50438295 347.64044 353.23612 0.84411368 - 670 670 45.838863 1176.3202 1677.3379 -501.01775 432.39196 630.63662 -246.87422 538633.17 -540025.28 2018.5449 40844.222 0.5046801 345.92274 351.29625 0.79765142 - 680 680 46.514638 1164.0567 1637.5703 -473.51362 456.35969 620.04865 -220.51828 538603.75 -540020.31 -976.60074 40828.184 0.50487835 337.69799 342.97493 0.76377368 - 690 690 47.205994 1151.5359 1658.8065 -507.27065 455.18706 597.02897 -208.03899 538576.88 -540018.3 322.38087 40810.034 0.50510289 341.98818 347.41043 0.79815517 - 700 700 47.879878 1139.9903 1700.2911 -560.30078 435.98357 577.8242 -205.61874 538580.14 -540024.2 2000.2694 40793.74 0.50530463 350.58114 356.13628 0.74296449 - 710 710 48.568487 1128.264 1665.4723 -537.20835 463.76446 651.59115 -230.65333 538538.4 -540025.33 -509.61232 40784.629 0.50541752 343.46593 348.8134 0.78751508 - 720 720 49.264778 1115.93 1630.7565 -514.82652 506.53769 607.16471 -229.82851 538559.14 -540017.08 -3128.0993 40773.317 0.50555774 336.19023 341.52193 0.81241576 - 730 730 49.95434 1103.0861 1693.6547 -590.56861 449.96492 627.91156 -253.85501 538551.14 -540015.34 -149.3908 40751.076 0.50583366 349.00364 354.63214 0.96828585 - 740 740 50.640368 1090.6895 1721.0166 -630.32706 437.38184 606.18468 -248.9766 538542.64 -540008.25 1076.2201 40727.694 0.50612407 354.60708 360.37927 0.94820937 - 750 750 51.314864 1077.6264 1706.9939 -629.36751 477.34023 592.06785 -241.17012 538504.58 -540006.13 -978.20505 40707.892 0.50637027 351.96678 357.41563 0.99510839 - 760 760 52.004491 1064.8649 1670.3803 -605.51537 459.7133 621.11647 -220.34804 538486.12 -540007.66 -73.703028 40685.583 0.50664791 344.30042 349.72677 1.0189171 - 770 770 52.698124 1052.5063 1678.5504 -626.04408 429.49349 609.54654 -198.06479 538475.21 -540006.64 1856.6695 40663.69 0.5069207 345.71047 351.39771 1.1031709 - 780 780 53.371805 1040.7804 1626.9339 -586.15347 458.65937 625.17557 -235.68082 538504.32 -540009.28 1027.8021 40648.992 0.50710399 335.32101 340.58885 1.0755417 - 790 790 54.06492 1028.4288 1635.2234 -606.79463 456.80643 626.14821 -248.60698 538507.8 -540008.98 -1370.6148 40638.323 0.50723712 337.04528 342.28645 1.1565605 - 800 800 54.759088 1015.5035 1665.4981 -649.9946 445.78982 658.20045 -279.78518 538499.6 -540014.9 -1038.3661 40623.049 0.50742784 343.25371 348.62213 1.1808822 - 810 810 55.430872 1002.1533 1683.1796 -681.0263 440.51425 604.98532 -291.49462 538537.92 -540015.3 -572.09456 40603.508 0.50767205 346.94843 352.31225 1.2153414 - 820 820 56.132222 989.19583 1676.8671 -687.67123 454.16999 601.64035 -298.37645 538517.32 -540010.82 -2017.1523 40580.909 0.50795476 345.61042 350.97365 1.2453839 - 830 830 56.835319 975.79292 1648.0222 -672.2293 457.5301 647.03708 -301.93001 538500.55 -540019.28 -1480.1591 40550.766 0.50833234 339.56652 344.89673 1.30317 - 840 840 57.544934 962.33793 1667.0218 -704.68387 461.4571 596.28166 -279.37217 538495.66 -540014.25 -85.118365 40514.896 0.5087824 343.35846 348.86882 1.3264433 - 850 850 58.244995 949.54228 1632.642 -683.09972 476.42368 616.30295 -243.45149 538447.8 -540011.59 312.32904 40478.782 0.50923632 336.43492 341.68468 1.2775995 - 860 860 58.977497 936.00137 1687.8505 -751.84917 439.29154 594.43795 -220.43933 538410.93 -540014.7 216.93858 40444.448 0.50966862 347.70581 353.31273 1.173142 - 870 870 59.645842 922.54093 1696.9521 -774.41121 464.36431 609.38564 -208.02143 538341.43 -540014.72 440.34841 40411.634 0.51008247 349.86664 355.25009 1.1151612 - 880 880 60.427056 908.78777 1702.0807 -793.29291 457.46621 604.11808 -192.2501 538327.44 -540016.03 932.76309 40381.402 0.51046435 350.97927 356.34193 1.0821299 - 890 890 61.124637 895.35623 1641.4727 -746.11648 466.78456 622.86991 -207.04658 538334.95 -540003.51 -681.75697 40354.709 0.51080199 338.33159 343.67 1.0101072 - 900 900 61.901692 881.24944 1639.4923 -758.24291 481.38965 619.87748 -233.19912 538331.45 -540005.99 -1439.81 40325.857 0.51116746 337.88864 343.24606 1.0275191 - 910 910 62.611037 867.46519 1643.1706 -775.70543 468.68262 603.17181 -238.43462 538352.91 -540009.29 -275.79166 40292.103 0.51159568 338.76084 344.02955 1.0030087 - 920 920 63.34952 853.97988 1631.3965 -777.41663 474.85895 588.82562 -219.35163 538342.59 -540006.98 -62.754987 40257.288 0.51203811 336.31935 341.56634 0.99196885 - 930 930 64.05327 840.41362 1645.025 -804.61134 447.85382 587.9851 -225.01975 538339.75 -540002.74 -555.49599 40222.58 0.51247995 339.28553 344.44654 0.94664259 - 940 940 64.737005 827.76871 1587.5414 -759.7727 460.48307 621.8746 -235.65012 538344.69 -539999.26 -532.01637 40186.221 0.51294363 327.38945 332.41019 0.91368715 - 950 950 65.435712 815.02839 1620.017 -804.98861 444.11677 622.93832 -224.53373 538307.28 -539999.67 650.87188 40148.706 0.51342292 334.15908 339.24274 0.86718157 - 960 960 66.11542 802.59749 1600.8853 -798.28777 460.82761 618.5358 -204.94287 538277.13 -539994.5 565.08592 40114.076 0.51386616 330.04164 335.24039 0.84900019 - 970 970 66.809439 789.71165 1625.0356 -835.32393 453.24367 595.34881 -209.80467 538274.3 -539994.7 -429.65331 40082.097 0.51427613 335.12946 340.30347 0.85026333 - 980 980 67.498662 777.23625 1599.2221 -821.98582 483.6492 592.52689 -239.95014 538284.68 -539989.4 -679.87516 40049.163 0.51469904 329.80605 334.91604 0.80024747 - 990 990 68.171112 764.49736 1616.9152 -852.4178 451.24335 578.34889 -246.93614 538322.43 -539990.69 -725.77921 40014.039 0.51515084 333.41976 338.59959 0.85272294 - 1000 1000 68.87218 751.9616 1602.3648 -850.40319 440.44622 607.89023 -260.38007 538330.86 -539992.28 -655.41032 39976.561 0.5156338 330.28921 335.54624 0.85774711 - 1010 1010 69.568027 739.23622 1608.3162 -869.07993 453.37764 599.55478 -268.05724 538318.37 -539990.61 -944.18546 39936.822 0.51614688 331.62628 336.79124 0.86343714 - 1020 1020 70.254618 726.57563 1603.2801 -876.70451 456.00216 578.04019 -268.37136 538331.48 -539991.76 -993.19042 39894.008 0.5167008 330.49767 335.72146 0.89116772 - 1030 1030 70.948082 714.23534 1575.4792 -861.24391 451.11225 613.6829 -258.70217 538315.85 -539992.85 -68.576608 39848.35 0.51729283 324.82081 329.89207 0.89165001 - 1040 1040 71.625937 702.03201 1582.19 -880.15797 454.35428 589.4527 -240.85244 538303.75 -539994.97 481.43706 39803.185 0.51787981 326.24444 331.29664 0.89665812 - 1050 1050 72.32406 690.24009 1580.1335 -889.89337 456.92093 584.9166 -233.91929 538281.44 -539992.57 378.07746 39760.768 0.51843229 325.67839 330.8875 0.85252921 - 1060 1060 73.018665 678.51497 1597.2744 -918.75938 453.89954 588.83337 -207.40943 538217.01 -539993.07 -427.56213 39720.503 0.51895783 329.36068 334.49154 0.8324703 - 1070 1070 73.69195 667.1701 1572.006 -904.83588 469.26436 617.3996 -190.81473 538160.69 -539992.92 -149.00324 39679.76 0.51949069 323.89679 329.15189 0.91549703 - 1080 1080 74.379973 656.03284 1552.6284 -896.59552 480.37102 628.01048 -176.16118 538124.99 -539986.83 546.46409 39639.581 0.52001725 320.0459 325.1041 0.88510254 - 1090 1090 75.075322 644.48834 1576.1461 -931.65773 480.22631 619.23659 -162.58366 538087.88 -539982.49 -437.67421 39601.899 0.52051206 324.84815 330.02057 0.9142907 - 1100 1100 75.756475 632.4209 1593.3118 -960.89087 482.45504 608.42039 -163.65887 538082.06 -539983.01 -578.05159 39563.693 0.5210147 328.41403 333.58803 0.97778176 - 1110 1110 76.451658 620.59957 1621.2709 -1000.6713 462.34654 597.36158 -178.01016 538085.58 -539981.44 92.893727 39524.327 0.52153363 334.30034 339.4419 0.994688 - 1120 1120 77.112771 609.26906 1578.9905 -969.7214 476.02526 609.73579 -181.21969 538089.67 -539982.65 850.52248 39486.393 0.52203467 325.29851 330.57568 0.99687526 - 1130 1130 77.810811 597.88707 1585.8789 -987.99182 474.81174 577.09036 -169.33513 538094.06 -539984.81 598.20799 39452.503 0.52248309 326.74515 332.00355 1.0297772 - 1140 1140 78.483261 586.76532 1527.4079 -940.64257 499.41447 606.08942 -149.31526 538062.35 -539985.61 191.9565 39421.787 0.5228902 314.84428 319.75862 0.99988865 - 1150 1150 79.1787 575.92137 1526.5527 -950.63133 487.69353 602.90272 -136.67929 538056.12 -539988.86 1152.6101 39393.256 0.5232689 314.67331 319.57118 1.0161269 - 1160 1160 79.877159 565.47264 1537.2563 -971.78365 481.69021 580.59002 -138.67546 538064.65 -539982.48 909.08533 39369.59 0.52358346 316.6823 321.81622 1.0145894 - 1170 1170 80.551921 554.89258 1553.0806 -998.18798 474.92071 599.18052 -167.3488 538068.37 -539983.9 174.56373 39350.03 0.52384372 320.0432 325.0983 1.0863184 - 1180 1180 81.259112 544.05556 1571.6125 -1027.5569 473.0273 604.62324 -182.50623 538059.19 -539983.32 -431.85536 39331.619 0.52408893 323.77829 328.97386 1.1065558 - 1190 1190 81.934297 533.18824 1568.6122 -1035.424 480.56363 597.56584 -199.92235 538077.79 -539985.86 -123.11151 39312.288 0.52434664 323.20365 328.34663 1.102858 - 1200 1200 82.633486 521.74424 1599.1092 -1077.3649 467.32235 585.41422 -207.89385 538087.52 -539990.32 56.310132 39292.907 0.52460526 329.42204 334.72551 1.1339718 - 1210 1210 83.330124 510.28209 1605.7674 -1095.4853 486.1625 580.78312 -213.3055 538071.57 -539993.55 -269.03436 39273.954 0.52485843 330.74526 336.09358 1.189949 - 1220 1220 84.008808 498.50586 1636.8178 -1138.3119 493.88547 550.9317 -214.47737 538060.18 -539998.9 344.20965 39254.816 0.52511432 337.1548 342.61183 1.1743938 - 1230 1230 84.706245 486.665 1587.8095 -1101.1445 489.91197 610.48557 -192.26663 538003.31 -539993.82 -40.768231 39237.077 0.52535173 326.99705 332.34213 1.162246 - 1240 1240 85.381363 474.56427 1577.8915 -1103.3273 501.57535 576.4551 -182.65979 537998.5 -539990.92 -160.81029 39219.702 0.52558447 325.01538 330.2598 1.1677797 - 1250 1250 86.07477 462.11402 1599.9963 -1137.8823 490.25739 579.30129 -179.13521 537951.59 -539991.71 24.81579 39202.232 0.52581869 329.90742 334.91314 1.1307251 - 1260 1260 86.758837 450.158 1574.6752 -1124.5172 488.74275 611.97561 -172.62705 537912.89 -539991.88 151.27583 39185.28 0.52604615 324.35077 329.58626 1.1661208 - 1270 1270 87.447766 438.0952 1560.3925 -1122.2973 485.0847 560.28113 -164.53235 537960.55 -539994.7 -321.63854 39169.042 0.52626424 321.42547 326.6315 1.0861861 - 1280 1280 88.147683 426.37099 1518.1956 -1091.8246 509.06853 617.59649 -180.55068 537933.21 -539992.7 -620.83125 39151.89 0.52649479 312.83142 317.78435 1.0852406 - 1290 1290 88.823027 414.63351 1553.3371 -1138.7036 484.34516 586.85531 -181.78864 537950.74 -539993.9 254.54281 39133.176 0.52674656 319.9705 325.16208 1.0663413 - 1300 1300 89.516381 403.37227 1543.7052 -1140.3329 505.20824 577.35111 -180.84728 537933.29 -539992.5 -44.795728 39115.348 0.52698665 318.15933 323.18665 0.97807258 - 1310 1310 90.217709 392.14133 1537.0649 -1144.9235 511.03917 610.15699 -190.40072 537886.99 -539990.15 -552.27308 39097.644 0.52722527 316.79122 321.81054 0.94568205 - 1320 1320 90.903743 380.67483 1548.8569 -1168.1821 491.07519 564.67798 -192.39507 537935.84 -539990.53 -230.71988 39078.45 0.52748423 319.09459 324.25891 0.99390849 - 1330 1330 91.596026 369.75539 1534.9167 -1165.1614 507.076 583.88606 -177.67603 537907.65 -539990 405.22773 39058.821 0.52774931 316.47359 321.37564 0.91467388 - 1340 1340 92.273535 359.05731 1525.4786 -1166.4212 497.63373 601.69088 -183.21428 537925.7 -539993.38 255.87303 39040.937 0.52799106 314.21306 319.37855 0.95096098 - 1350 1350 92.96347 348.78036 1486.7122 -1137.9319 510.81966 593.8195 -198.3198 537970.13 -539992.76 -546.45157 39024.137 0.52821837 306.44936 311.29173 0.8679722 - 1360 1360 93.64702 338.28157 1519.6038 -1181.3222 498.92969 587.54355 -211.41049 537952.67 -539985.99 -73.453405 39006.076 0.52846294 313.14091 318.19702 0.85042168 - 1370 1370 94.338578 328.14321 1508.8722 -1180.729 502.0876 564.03092 -213.48922 537976.88 -539990.85 -155.84444 38987.824 0.52871035 310.87237 315.93211 0.87997336 - 1380 1380 95.033163 317.80999 1513.8796 -1196.0696 491.11639 575.79571 -213.35369 537962.43 -539989.94 -476.41548 38969.23 0.52896262 312.00799 316.99551 0.8530112 - 1390 1390 95.711654 307.88837 1492.7778 -1184.8894 487.58365 592.28899 -213.76608 537961.79 -539995.23 -489.72644 38949.272 0.52923366 307.64225 312.55759 0.87985113 - 1400 1400 96.382817 298.10172 1503.5417 -1205.44 480.03514 569.37448 -213.09486 537964.9 -539995.44 -625.22466 38927.696 0.529527 309.82406 314.84017 0.82853994 - 1410 1410 97.07431 288.39497 1499.82 -1211.425 480.36526 564.45219 -213.51652 537954.8 -539992.15 -259.19258 38904.295 0.5298455 309.32945 314.03898 0.87020348 - 1420 1420 97.742513 278.85215 1522.3698 -1243.5177 485.99375 561.50554 -209.19733 537922.71 -539993.29 -142.1742 38880.213 0.5301737 313.72886 318.75504 0.89433162 - 1430 1430 98.433859 269.2021 1530.9912 -1261.7891 475.99862 564.09601 -191.6853 537894.94 -539989.87 -219.42531 38856.009 0.53050394 315.3848 320.55941 0.90095316 - 1440 1440 99.129957 259.83967 1493.7661 -1233.9264 494.43047 592.70116 -170.31054 537844.83 -539989.05 -303.01625 38831.45 0.53083946 307.74971 312.75457 0.90032175 - 1450 1450 99.813066 250.16278 1478.882 -1228.7192 492.4154 588.98167 -160.23785 537828.24 -539990.43 -216.01885 38806.254 0.53118412 304.68152 309.59998 0.96786347 - 1460 1460 100.50575 240.68805 1495.8215 -1255.1334 494.64542 572.53707 -178.04039 537837.08 -539987.44 47.832605 38780.836 0.53153228 308.28376 313.14092 0.98954674 - 1470 1470 101.19723 231.3084 1513.8414 -1282.533 499.13995 553.10442 -176.44065 537844.02 -539988.31 -637.7582 38755.708 0.53187691 312.05991 316.90601 1.0159812 - 1480 1480 101.89509 222.09859 1505.7987 -1283.7001 500.92735 532.14741 -184.25693 537879.22 -539987.88 -591.72796 38728.878 0.53224537 310.17711 315.23199 0.99136547 - 1490 1490 102.56488 213.14179 1479.3775 -1266.2357 503.71559 572.92866 -207.71506 537887.43 -539987.29 -378.94563 38700.332 0.53263796 304.91855 309.65178 1.0720663 - 1500 1500 103.25515 203.91969 1502.2958 -1298.3761 481.50824 572.93966 -219.89904 537897.24 -539986.66 -411.06686 38670.837 0.53304422 309.53406 314.46236 1.0616662 - 1510 1510 103.94247 194.96944 1476.2258 -1281.2564 492.71131 580.48623 -224.72265 537893.94 -539983.2 -615.30192 38640.261 0.53346601 304.05731 308.97898 1.0959945 - 1520 1520 104.61477 185.79705 1499.7702 -1313.9732 502.24075 549.83129 -209.48323 537872.64 -539983.68 -853.96556 38607.888 0.53391333 309.19004 313.8997 1.1278807 - 1530 1530 105.30626 176.66223 1496.2605 -1319.5983 487.61367 564.0371 -210.38052 537881.64 -539987.76 -45.993522 38573.369 0.53439113 308.2859 313.1424 1.1706909 - 1540 1540 105.98062 167.30468 1509.5793 -1342.2747 484.70826 560.76595 -205.28232 537869.01 -539987.19 -394.64086 38538.951 0.53486837 311.08322 315.94918 1.1423693 - 1550 1550 106.67891 157.81128 1513.5743 -1355.7631 501.56421 553.04773 -194.94778 537848.45 -539991.21 -798.10405 38503.785 0.53535687 311.83679 316.76922 1.1775939 - 1560 1560 107.3653 148.77984 1487.931 -1339.1512 486.62562 594.88585 -190.71694 537821.56 -539989.6 -352.84351 38466.67 0.53587342 306.31266 311.38507 1.1923988 - 1570 1570 108.05785 139.61857 1492.0429 -1352.4243 495.36759 551.71446 -193.709 537833.41 -539986.36 -36.064878 38428.978 0.53639901 307.25883 312.26846 1.1499233 - 1580 1580 108.74586 130.44955 1497.1672 -1366.7177 500.84244 540.43915 -195.00023 537816.63 -539988.19 -207.69615 38391.915 0.53691685 308.5692 313.3432 1.1493094 - 1590 1590 109.44688 121.29977 1475.3297 -1354.0299 502.69119 562.18548 -184.3876 537779.93 -539983.95 -701.90588 38354.821 0.53743612 304.09275 308.77702 1.1241263 - 1600 1600 110.12352 112.29253 1465.3483 -1353.0557 498.56871 560.33345 -183.94436 537782.94 -539985.61 62.497105 38316.502 0.53797358 301.94751 306.71497 1.0625339 - 1610 1610 110.82452 103.46322 1482.3241 -1378.8609 510.17675 573.26218 -180.87017 537728.87 -539984.85 -462.68943 38278.885 0.53850225 305.61761 310.26833 1.0745981 - 1620 1620 111.52566 94.462702 1464.1659 -1369.7032 501.07487 583.65534 -179.1581 537729.44 -539982.9 -1003.084 38240.473 0.53904317 301.71486 306.4345 1.1276524 - 1630 1630 112.22434 85.744351 1431.8456 -1346.1013 506.23489 559.01914 -165.92022 537754.42 -539982.91 -44.922828 38199.836 0.53961661 295.07256 299.6966 1.0499782 - 1640 1640 112.91181 77.883773 1431.916 -1354.0322 515.19249 560.29179 -161.32501 537739.63 -539981.17 -288.57138 38159.637 0.54018506 295.12068 299.73953 0.99361413 - 1650 1650 113.60929 69.951714 1408.3479 -1338.3962 521.43148 576.68685 -171.12417 537765.39 -539986.16 -701.05944 38119.471 0.54075425 290.24084 294.81551 0.95838791 - 1660 1660 114.294 61.960243 1443.0348 -1381.0746 502.75633 561.60999 -173.7664 537766.93 -539987.21 -226.09809 38078.131 0.54134133 297.52366 302.0827 0.96994803 - 1670 1670 114.99 54.255728 1469.98 -1415.7242 489.79022 547.54612 -185.22503 537779.93 -539991.17 220.27193 38037.077 0.54192561 302.94306 307.77333 0.88810335 - 1680 1680 115.67178 47.265331 1454.0772 -1406.8119 485.87507 550.06616 -193.54409 537805.56 -539995.39 -303.54356 37997.753 0.54248645 299.9021 304.44801 0.86994223 - 1690 1690 116.37051 40.013281 1414.0487 -1374.0354 496.50299 585.34646 -209.38601 537812.11 -539992.75 -777.78258 37958.43 0.54304843 291.58093 296.05926 0.86152909 - 1700 1700 117.04984 32.9472 1426.299 -1393.3518 474.5113 558.00619 -213.63699 537852.91 -539993.88 266.84396 37918.012 0.54362728 293.91287 298.62059 0.87603505 - 1710 1710 117.75925 26.34909 1444.3476 -1417.9985 493.39365 533.46162 -228.21989 537848.73 -539989.16 -109.98361 37879.284 0.54418309 297.7381 302.42229 0.84126891 - 1720 1720 118.46526 19.241827 1440.9792 -1421.7373 492.13181 541.30218 -227.7986 537839.5 -539990.04 -1034.8525 37841.236 0.54473025 297.06006 301.72293 0.82744545 - 1730 1730 119.15048 12.244898 1440.1712 -1427.9263 500.74462 543.86644 -213.66719 537808.85 -539989.6 -915.51009 37800.891 0.54531164 296.91112 301.51145 0.91158063 - 1740 1740 119.85618 5.5714644 1428.1293 -1422.5578 499.43262 549.90308 -195.96662 537788.13 -539988.03 -3.6786977 37758.736 0.54592045 294.33156 299.00275 0.87922923 - 1750 1750 120.54619 -0.45398177 1423.3987 -1423.8527 493.18703 547.29329 -185.21619 537782.22 -539986.76 182.59625 37717.739 0.54651383 293.34517 298.03646 0.82804723 - 1760 1760 121.25623 -6.1919038 1389.9778 -1396.1697 500.11352 568.22991 -172.48994 537757.92 -539982.04 -545.30728 37678.439 0.54708387 286.50557 291.01141 0.86313198 - 1770 1770 121.93922 -12.293353 1409.1151 -1421.4085 493.3545 574.98039 -187.01225 537740.79 -539985.38 -139.94802 37638.881 0.54765884 290.40968 295.02394 0.86328318 - 1780 1780 122.64347 -18.079343 1431.0225 -1449.1019 518.16951 539.99065 -196.68849 537719.3 -539990.89 270.31946 37600.124 0.54822335 294.99564 299.60534 0.88731829 - 1790 1790 123.33416 -23.689678 1453.19 -1476.8797 501.19182 534.83108 -202.32276 537723.07 -539992.42 -53.923445 37563.459 0.54875846 299.43425 304.25779 0.87833003 - 1800 1800 124.0362 -28.879689 1418.552 -1447.4317 513.6365 556.22747 -194.90638 537737.26 -539994.05 -491.44436 37527.798 0.54927993 292.45556 296.98957 0.88938274 - 1810 1810 124.72592 -34.326386 1425.1449 -1459.4713 502.78393 557.92228 -188.01057 537729.93 -539990.52 -269.52053 37491.807 0.54980722 293.57211 298.34713 0.93896776 - 1820 1820 125.42808 -39.50595 1421.8112 -1461.3172 493.99291 564.49657 -191.40421 537738.48 -539993.36 141.03947 37456.232 0.55032941 293.00269 297.63525 0.96474298 - 1830 1830 126.10877 -45.131045 1456.6598 -1501.7909 508.50049 563.84263 -185.66907 537690.67 -539996.5 -596.99808 37421.947 0.55083361 300.14286 304.94541 0.95817196 - 1840 1840 126.8033 -50.718896 1463.5551 -1514.274 518.35121 551.80901 -182.64458 537679.58 -539999.56 -356.86881 37387.02 0.5513482 301.53943 306.34485 1.0508221 - 1850 1850 127.48901 -56.169373 1465.0934 -1521.2628 523.9441 535.51656 -192.04035 537692.37 -540002.42 14.237689 37352.047 0.55186443 301.84602 306.6432 1.0991807 - 1860 1860 128.17832 -61.746773 1457.3329 -1519.0797 517.21016 528.57559 -189.04218 537702.96 -540001.76 -81.723106 37318.204 0.5523649 300.04669 305.01663 1.0979667 - 1870 1870 128.84756 -66.931707 1427.61 -1494.5417 521.20148 546.64415 -196.52008 537711.49 -539997.43 -46.041141 37285.324 0.552852 294.06407 298.78212 1.1027061 - 1880 1880 129.55224 -72.55405 1455.9128 -1528.4669 508.45212 548.26755 -208.11473 537709.63 -540002.68 -306.22472 37253.354 0.55332644 299.93266 304.70406 1.1275873 - 1890 1890 130.25363 -78.709283 1471.972 -1550.6812 506.36522 570.79777 -230.44758 537685.27 -539999.77 -324.03464 37221.49 0.55380013 303.32625 308.07361 1.1228851 - 1900 1900 130.93532 -85.190712 1456.8998 -1542.0905 512.08315 542.83037 -233.21714 537706.22 -539998.56 -828.9349 37189.324 0.55427912 300.17215 304.90077 1.1480744 - 1910 1910 131.64305 -91.17215 1443.4898 -1534.6619 518.15258 548.43638 -225.11928 537687.2 -539995.05 -510.38563 37155.63 0.55478176 297.45632 302.06335 1.199425 - 1920 1920 132.32337 -96.942991 1441.1437 -1538.0867 515.3242 589.31694 -212.4115 537629.01 -539992.52 -356.55664 37121.215 0.5552961 297.07028 301.58175 1.1787869 - 1930 1930 133.02397 -103.16981 1436.7415 -1539.9113 528.1959 550.5162 -199.14452 537636 -539998.07 -555.36974 37086.568 0.55581487 296.07565 300.65625 1.1837404 - 1940 1940 133.70851 -109.31893 1426.8418 -1536.1607 519.36033 566.98017 -188.79587 537608.35 -539994.45 -352.69641 37051.329 0.5563435 293.88551 298.58644 1.1719193 - 1950 1950 134.40653 -115.36493 1450.6434 -1566.0083 512.5905 550.89405 -178.61271 537595.96 -540000.97 -291.67297 37015.978 0.55687481 298.7376 303.57491 1.1761814 - 1960 1960 135.09589 -121.15057 1435.35 -1556.5006 529.22528 542.65247 -167.22757 537591.29 -540003.82 234.05773 36980.955 0.5574022 295.887 300.39361 1.125507 - 1970 1970 135.79901 -126.84539 1436.4257 -1563.2711 515.13404 565.89493 -170.70325 537586.42 -540000.19 -35.988813 36947.754 0.55790308 296.05087 300.62446 1.1149271 - 1980 1980 136.51745 -132.69454 1441.8559 -1574.5505 511.04803 571.15904 -181.08954 537591.61 -540001.7 -569.56467 36915.446 0.55839135 297.07978 301.78595 1.0690786 - 1990 1990 137.19956 -138.98913 1483.0893 -1622.0784 505.92562 545.06939 -178.80056 537572.57 -539999.75 -248.72575 36882.509 0.55889001 305.58613 310.44889 1.0343638 - 2000 2000 137.91408 -145.02856 1439.8744 -1584.903 519.28678 568.70476 -166.26544 537556.85 -540000.6 -16.512081 36849.764 0.55938665 296.63112 301.40656 0.99691127 -Loop time of 137.914 on 1 procs for 2000 steps with 2800 atoms - -Performance: 1.253 ns/day, 19.155 hours/ns, 14.502 timesteps/s -99.3% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 25.777 | 25.777 | 25.777 | 0.0 | 18.69 -Bond | 1.5617 | 1.5617 | 1.5617 | 0.0 | 1.13 -Kspace | 70.65 | 70.65 | 70.65 | 0.0 | 51.23 -Neigh | 2.0179 | 2.0179 | 2.0179 | 0.0 | 1.46 -Comm | 0.16914 | 0.16914 | 0.16914 | 0.0 | 0.12 -Output | 0.015132 | 0.015132 | 0.015132 | 0.0 | 0.01 -Modify | 37.698 | 37.698 | 37.698 | 0.0 | 27.33 -Other | | 0.02468 | | | 0.02 - -Nlocal: 2800.00 ave 2800 max 2800 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 7316.00 ave 7316 max 7316 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 485484.0 ave 485484 max 485484 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 485484 -Ave neighs/atom = 173.38714 -Ave special neighs/atom = 11.714286 -Neighbor list builds = 116 -Dangerous builds = 0 - -Total wall time: 0:02:18 diff --git a/examples/USER/drude/ethylene_glycol/log.24Aug20.ethylene_glycol.g++.4 b/examples/USER/drude/ethylene_glycol/log.24Aug20.ethylene_glycol.g++.4 deleted file mode 100644 index 2237dbc29f..0000000000 --- a/examples/USER/drude/ethylene_glycol/log.24Aug20.ethylene_glycol.g++.4 +++ /dev/null @@ -1,389 +0,0 @@ -LAMMPS (24 Aug 2020) -# created by fftool - -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls - -special_bonds lj/coul 0.0 0.0 0.5 - -pair_style hybrid/overlay lj/cut/coul/long 8.0 8.0 thole 2.600 8.0 coul/tt 4 8.0 -pair_modify tail yes -kspace_style pppm 1.0e-5 - -read_data data.ethylene_glycol -Reading data file ... - orthogonal box = (0.0000000 0.0000000 0.0000000) to (35.000000 35.000000 35.000000) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 2800 atoms - scanning bonds ... - 2 = max bonds/atom - scanning angles ... - 6 = max angles/atom - scanning dihedrals ... - 9 = max dihedrals/atom - reading bonds ... - 2600 bonds - reading angles ... - 2800 angles - reading dihedrals ... - 3000 dihedrals -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0.0 0.0 0.5 - special bond factors coul: 0.0 0.0 0.5 - 5 = max # of 1-2 neighbors - 6 = max # of 1-3 neighbors - 10 = max # of 1-4 neighbors - 13 = max # of special neighbors - special bonds CPU = 0.001 seconds - read_data CPU = 0.015 seconds - -pair_coeff 1 1 lj/cut/coul/long 0.057289 3.500000 # CTO CTO ~ -pair_coeff 1 2 lj/cut/coul/long 0.091945 3.304542 # CTO OHG ~ -pair_coeff 1 3 lj/cut/coul/long 0.038625 2.958040 # CTO H1O ~ -pair_coeff 1 4 lj/cut/coul/long 0.000000 0.000000 # CTO HOG ~ -pair_coeff 2 2 lj/cut/coul/long 0.147565 3.120000 # OHG OHG ~ -pair_coeff 2 3 lj/cut/coul/long 0.061990 2.792848 # OHG H1O ~ -pair_coeff 2 4 lj/cut/coul/long 0.000000 0.000000 # OHG HOG ~ -pair_coeff 3 3 lj/cut/coul/long 0.026041 2.500000 # H1O H1O ~ -pair_coeff 3 4 lj/cut/coul/long 0.000000 0.000000 # H1O HOG ~ -pair_coeff 4 4 lj/cut/coul/long 0.000000 0.000000 # HOG HOG ~ -pair_coeff * 5* lj/cut/coul/long 0.000000 0.000000 -pair_coeff 1 1 thole 1.662 -pair_coeff 1 2 thole 1.561 -pair_coeff 1 5 thole 1.662 -pair_coeff 1 6 thole 1.561 -pair_coeff 2 2 thole 1.467 -pair_coeff 2 5 thole 1.561 -pair_coeff 2 6 thole 1.467 -pair_coeff 5 5 thole 1.662 -pair_coeff 5 6 thole 1.561 -pair_coeff 6 6 thole 1.467 -pair_coeff 2 4 coul/tt 4.5 1.0 -pair_coeff 4 6 coul/tt 4.5 1.0 -pair_coeff 1 4 coul/tt 4.5 1.0 -pair_coeff 4 5 coul/tt 4.5 1.0 - -group ATOMS type 1 2 3 4 -2000 atoms in group ATOMS -group CORES type 1 2 -800 atoms in group CORES -group DRUDES type 5 6 -800 atoms in group DRUDES - -fix DRUDE all drude C C N N D D - -fix SHAKE ATOMS shake 0.0001 20 0 b 3 4 - 400 = # of size 2 clusters - 400 = # of size 3 clusters - 0 = # of size 4 clusters - 0 = # of frozen angles - find clusters CPU = 0.000 seconds - -neighbor 2.0 bin - -timestep 1.0 - -variable TK equal 298.0 -variable TDK equal 1.0 -variable PBAR equal 1.0 - -comm_modify vel yes -velocity ATOMS create ${TK} 12345 -velocity ATOMS create 298 12345 - -compute TATOM ATOMS temp -compute TDRUDE all temp/drude - -fix DTDIR all drude/transform/direct -fix TSTAT ATOMS npt temp ${TK} ${TK} 200 iso ${PBAR} ${PBAR} 1000 -fix TSTAT ATOMS npt temp 298 ${TK} 200 iso ${PBAR} ${PBAR} 1000 -fix TSTAT ATOMS npt temp 298 298 200 iso ${PBAR} ${PBAR} 1000 -fix TSTAT ATOMS npt temp 298 298 200 iso 1 ${PBAR} 1000 -fix TSTAT ATOMS npt temp 298 298 200 iso 1 1 1000 -fix_modify TSTAT temp TATOM press thermo_press -WARNING: Temperature for fix modify is not for group all (../fix_nh.cpp:1428) -fix TSTDR DRUDES nvt temp ${TDK} ${TDK} 50 -fix TSTDR DRUDES nvt temp 1 ${TDK} 50 -fix TSTDR DRUDES nvt temp 1 1 50 -fix DTINV all drude/transform/inverse - -fix ICECUBE all momentum 1000 linear 1 1 1 - -thermo_style custom step time cpu etotal ke pe ebond eangle evdwl ecoul elong press vol density c_TATOM c_TDRUDE[1] c_TDRUDE[2] -thermo 10 - -run 2000 -PPPM initialization ... - using 12-bit tables for long-range coulomb (../kspace.cpp:328) - G vector (1/distance) = 0.41206781 - grid = 54 54 54 - stencil order = 5 - estimated absolute RMS force accuracy = 0.0040479865 - estimated relative force accuracy = 1.2190391e-05 - using double precision KISS FFT - 3d grid and FFT values/proc = 81648 40824 -Rebuild special list taking Drude particles into account -Old max number of 1-2 to 1-4 neighbors: 13 -New max number of 1-2 to 1-4 neighbors: 13 (+0) -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 10 - ghost atom cutoff = 10 - binsize = 5, bins = 7 7 7 - 3 neighbor lists, perpetual/occasional/extra = 3 0 0 - (1) pair lj/cut/coul/long, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard - (2) pair thole, perpetual, skip from (1) - attributes: half, newton on - pair build: skip - stencil: none - bin: none - (3) pair coul/tt, perpetual, skip from (1) - attributes: half, newton on - pair build: skip - stencil: none - bin: none -Per MPI rank memory allocation (min/avg/max) = 21.28 | 21.36 | 21.43 Mbytes -Step Time CPU TotEng KinEng PotEng E_bond E_angle E_vdwl E_coul E_long Press Volume Density c_TATOM c_TDRUDE[1] c_TDRUDE[2] - 0 0 0 2707.9246 1420.362 1287.5627 1474.8647 30.734202 -461.31379 540022.21 -539778.93 -9408.4231 42875 0.48077588 298 294.34401 6.9394757 - 10 10 0.207272 1866.1234 1294.3904 571.73299 570.18548 421.90708 -480.70585 539943.81 -539929.74 805.31575 42854.367 0.48100736 216.74278 221.57505 99.651373 - 20 20 0.422615 1639.4254 1025.541 613.88441 440.75582 630.81291 -511.62082 539884.11 -539931.54 3547.7591 42831.812 0.48126066 189.9745 191.41076 47.238176 - 30 30 0.636004 1509.2246 1199.5696 309.65504 372.66235 422.42807 -441.22393 539785.92 -539996.76 -2255.2096 42822.727 0.48136275 232.23532 234.10184 34.834744 - 40 40 0.849322 1447.7122 1208.8207 238.89149 301.47584 466.79595 -415.52093 539713.64 -540015.07 -2983.4667 42805.664 0.48155464 240.97408 243.39825 20.121373 - 50 50 1.057875 1418.4666 1249.502 168.96462 309.99547 480.01554 -495.04808 539716.53 -540017.02 3344.285 42776.949 0.48187789 252.07241 255.56807 12.841402 - 60 60 1.279009 1401.9371 1239.9607 161.97643 467.90054 298.63561 -481.19864 539718.72 -540016.73 6314.7205 42763.12 0.48203372 251.90217 255.43544 9.1055215 - 70 70 1.488082 1396.4533 1021.9568 374.49649 585.0559 367.14909 -436.69254 539677.13 -540007.02 -9573.8026 42770.007 0.4819561 207.52883 210.90348 6.7497287 - 80 80 1.701604 1388.5231 1234.429 154.09415 291.38001 446.20262 -454.21016 539690.22 -540020.29 -2596.442 42743.245 0.48225786 251.84239 256.22625 5.2041747 - 90 90 1.913986 1390.1274 1165.6307 224.49668 292.42639 610.78166 -509.169 539648.43 -540009.54 2755.6799 42701.879 0.48272503 239.29515 242.40904 3.9881039 - 100 100 2.121214 1391.6311 1287.2692 104.36195 333.86638 427.43215 -456.38003 539638.17 -540023.61 -3962.1784 42668.283 0.48310512 265.74273 268.23371 3.3477446 - 110 110 2.335767 1392.4962 1128.7784 263.71774 341.80093 547.86435 -397.70381 539615.87 -540033.75 -5131.6567 42619.2 0.48366149 231.88962 235.24089 2.8704377 - 120 120 2.542481 1391.2911 1316.2526 75.038553 302.07876 445.61484 -439.78763 539603.43 -540019.07 376.35842 42547.904 0.48447195 270.46432 274.66659 2.6361343 - 130 130 2.753605 1400.0627 1131.989 268.07372 519.48714 417.6662 -431.15046 539616.71 -540036.69 8538.062 42480.874 0.48523639 233.04019 236.40125 1.8960582 - 140 140 2.961175 1404.1878 1334.9133 69.274512 389.421 393.34067 -367.2924 539507.94 -540028.8 -4426.6651 42444.674 0.48565024 275.02782 279.10558 1.5835267 - 150 150 3.177236 1404.7864 1334.1949 70.591471 285.69314 480.49153 -340.69071 539518.01 -540045.75 -2082.9184 42395.713 0.48621109 274.19439 278.9463 1.6008215 - 160 160 3.391919 1412.6555 1291.707 120.94843 348.7604 575.18871 -418.38779 539483.99 -540034.49 5790.6824 42339.303 0.48685889 266.64535 270.16691 1.3423664 - 170 170 3.599132 1417.1467 1394.9631 22.183576 347.96723 497.00846 -398.67453 539439.29 -540027.81 -2071.8934 42303.603 0.48726974 288.38891 291.92774 1.1210284 - 180 180 3.809463 1420.2155 1260.1515 160.06402 383.6767 547.79961 -344.95473 539442.15 -540043.12 -5707.9251 42261.493 0.48775527 259.80398 263.64509 1.1531929 - 190 190 4.014893 1419.3667 1375.1626 44.20412 383.71873 500.13275 -378.41788 539388.43 -540024.18 -3451.5079 42194.665 0.48852777 283.36482 287.66025 1.3527012 - 200 200 4.227127 1425.8199 1378.4982 47.321658 460.35819 459.3409 -415.44783 539411.67 -540044.6 6205.8009 42117.045 0.48942811 284.32248 288.46226 1.1474766 - 210 210 4.432286 1432.8476 1458.7461 -25.898456 348.39192 519.78477 -364.59687 539324.82 -540036.04 -2670.2448 42061.074 0.4900794 300.62025 305.40698 0.90989006 - 220 220 4.644142 1433.9234 1316.4385 117.48481 361.7325 586.07086 -288.11279 539309.49 -540044.33 -3665.7207 41997.584 0.49082028 270.93115 275.42918 1.1889587 - 230 230 4.856654 1439.0053 1526.3478 -87.342481 396.7696 419.31409 -364.6791 539312.78 -540045.43 7360.3024 41924.153 0.49167997 315.32585 319.5731 0.92637024 - 240 240 5.069204 1447.1229 1465.5412 -18.418302 387.84585 555.89043 -357.40374 539236.35 -540033.29 1804.1542 41878.572 0.49221511 302.34061 306.96246 0.64844737 - 250 250 5.276274 1451.5311 1408.0791 43.45194 376.3631 598.22558 -302.55739 539235.03 -540053.8 -3523.5223 41843.302 0.49263001 290.29736 294.90586 0.66500213 - 260 260 5.486435 1451.9121 1486.9381 -35.026077 439.39664 496.53832 -294.82206 539179.22 -540041.63 -3359.5387 41794.408 0.49320632 306.86146 311.37486 0.79643935 - 270 270 5.701114 1455.7824 1489.843 -34.060558 384.68471 584.31906 -345.52522 539213.2 -540050.09 4219.7836 41735.543 0.49390195 307.5027 312.00087 0.76256302 - 280 280 5.917565 1459.6907 1557.7147 -98.024008 363.40614 544.03098 -338.5609 539195.96 -540044.55 -1927.5595 41691.464 0.49442413 321.11857 326.30138 0.62349308 - 290 290 6.138473 1458.5631 1502.6363 -44.073215 468.8459 480.27985 -273.9133 539154.14 -540045.25 -6405.1654 41640.349 0.49503105 309.96993 314.62142 0.88634485 - 300 300 6.40204 1460.3316 1532.4499 -72.118356 394.63943 561.19456 -334.56113 539192.83 -540050.12 4984.7229 41569.486 0.49587494 316.03908 320.88619 0.85911177 - 310 310 6.627332 1465.7207 1493.2205 -27.499762 413.70607 630.92768 -345.49768 539150.28 -540033.83 3577.7221 41517.391 0.49649714 307.69086 312.804 0.57266056 - 320 320 6.849714 1465.4884 1660.5835 -195.09515 367.20331 477.59376 -303.61686 539152.63 -540037.91 -1201.1187 41482.202 0.49691832 342.85699 347.89088 0.58244251 - 330 330 7.064092 1465.9531 1506.4899 -40.536832 425.91339 568.10087 -249.05183 539108.48 -540033.08 -1066.8345 41444.504 0.49737031 310.75802 315.56257 0.62004599 - 340 340 7.280941 1465.9409 1557.6309 -91.689954 381.9757 625.89222 -296.40182 539081.74 -540030.48 4892.9614 41406.266 0.49782962 321.30624 326.29428 0.60252992 - 350 350 7.48787 1465.3216 1564.1509 -98.829249 418.42971 585.969 -296.62488 539077.24 -540036.78 740.63262 41386.895 0.49806264 322.55732 327.69219 0.54088039 - 360 360 7.700874 1462.6063 1545.8695 -83.263187 514.18444 506.65279 -255.48445 539024 -540031.84 -7180.551 41369.254 0.49827502 319.00076 323.79932 0.66034813 - 370 370 7.913417 1458.1677 1587.9359 -129.76813 389.00186 580.31846 -293.01684 539062.35 -540044.02 1831.7432 41328.293 0.49876886 327.289 332.55424 0.79099417 - 380 380 8.122597 1456.1241 1571.9683 -115.84419 389.73014 617.48805 -335.78903 539071.87 -540039.48 3128.4098 41293.129 0.49919361 324.14181 329.2188 0.76588497 - 390 390 8.368157 1451.8992 1566.361 -114.46186 409.57976 595.32696 -323.84233 539065.42 -540042.85 -2047.2083 41270.539 0.49946685 323.40659 328.06158 0.72893025 - 400 400 8.591038 1446.0615 1528.773 -82.711545 414.46841 582.41732 -279.89532 539064.81 -540045.35 -1758.08 41241.935 0.49981326 314.95174 320.11166 0.86625721 - 410 410 8.805136 1440.2008 1651.8275 -211.62673 396.56535 533.57242 -312.80543 539046.01 -540042.07 4444.0109 41209.153 0.50021086 340.45089 345.88102 0.9303561 - 420 420 9.027896 1435.656 1554.4611 -118.8051 454.51384 576.06992 -316.30443 539049.5 -540045.56 3709.2794 41194.366 0.50039042 320.18805 325.47827 0.90533299 - 430 430 9.254297 1427.9462 1634.1272 -206.18106 461.69471 552.57081 -278.82069 538945.64 -540038.11 -5309.7454 41192.427 0.50041397 336.91747 342.13613 0.99752281 - 440 440 9.48287 1419.5459 1581.5366 -161.99068 418.65549 618.71776 -258.37568 538949.12 -540039.03 -45.053757 41173.677 0.50064185 325.71857 331.04837 1.1191906 - 450 450 9.696312 1411.6639 1569.3142 -157.65035 380.53742 668.13347 -290.80748 538968.35 -540032.62 3122.8222 41154.153 0.50087936 323.37981 328.45983 1.1708438 - 460 460 9.915707 1402.5334 1627.6142 -225.08079 452.17261 578.69141 -298.30585 538927.95 -540030.11 -2417.8519 41145.38 0.50098616 335.41854 340.63875 1.2610557 - 470 470 10.127069 1393.2236 1617.2885 -224.06489 436.18212 569.79211 -278.51933 538933.86 -540035.19 -3103.9609 41128.381 0.50119323 333.10318 338.43628 1.3359175 - 480 480 10.340579 1384.5295 1583.0615 -198.53199 460.65721 603.39994 -285.15851 538894.86 -540025.61 2315.242 41100.555 0.50153254 325.89632 331.2083 1.4388068 - 490 490 10.553304 1375.6696 1607.7362 -232.06655 478.07831 546.08808 -283.66976 538902.42 -540031.78 4472.4169 41082.807 0.50174921 331.37679 336.42468 1.3533669 - 500 500 10.775566 1366.0159 1653.6341 -287.61812 433.24034 598.38535 -281.95695 538837.44 -540025.77 -2921.1083 41080.827 0.5017734 340.53355 346.03811 1.3737347 - 510 510 10.991695 1356.1785 1625.4343 -269.25582 430.87164 614.37229 -274.02613 538850.25 -540029.1 -514.63413 41070.415 0.5019006 334.54685 340.1105 1.4034076 - 520 520 11.212936 1345.9803 1672.4272 -326.44692 410.44251 589.22282 -300.56101 538873.38 -540022.33 3423.1019 41058.605 0.50204497 344.74979 349.98307 1.3647023 - 530 530 11.442425 1335.9908 1610.2842 -274.29341 453.69553 630.07905 -307.15955 538849.94 -540018.03 -1600.2251 41058.305 0.50204863 331.45503 336.99781 1.2756028 - 540 540 11.689729 1325.3284 1622.8383 -297.50983 467.0454 565.42045 -284.7694 538855.1 -540019.63 -3638.2655 41052.412 0.5021207 334.16222 339.63113 1.2734996 - 550 550 11.908075 1314.4631 1651.4251 -336.96202 462.52498 578.48562 -284.70119 538808.88 -540016.15 -518.70335 41032.516 0.50236417 340.19545 345.65835 1.2069185 - 560 560 12.123316 1304.2928 1656.256 -351.9632 418.3626 608.41877 -267.15227 538789.68 -540024.32 2812.3348 41011.228 0.50262493 341.36426 346.71795 1.1135433 - 570 570 12.334333 1294.0759 1610.4771 -316.40114 441.78983 648.31376 -262.29938 538733.04 -540018.04 -1538.1626 40999.314 0.502771 332.02401 337.14404 1.0640192 - 580 580 12.55041 1282.4524 1645.2031 -362.75069 440.30488 580.58811 -236.71445 538736.27 -540024.85 -1101.6572 40983 0.50297113 339.25673 344.424 1.0664332 - 590 590 12.759961 1272.0788 1684.9242 -412.84541 426.57598 579.81154 -250.95724 538728.6 -540026.39 3972.5381 40964.393 0.50319959 347.39514 352.81162 0.9481937 - 600 600 12.991543 1260.9837 1675.1424 -414.15866 426.29955 601.62481 -277.0776 538735.86 -540019.69 733.89874 40959.911 0.50325466 345.33847 350.77315 0.92315425 - 610 610 13.220988 1249.4355 1680.3253 -430.88979 461.94541 568.50547 -279.19131 538733 -540020.22 -2637.3171 40958.816 0.50326812 346.5244 351.87492 0.8930443 - 620 620 13.434275 1238.2436 1639.1356 -400.89196 462.34964 648.9058 -282.32391 538687.09 -540016.6 -1272.7738 40948.016 0.50340084 338.09955 343.24784 0.8743544 - 630 630 13.678674 1226.2102 1700.4355 -474.22536 415.43324 626.07728 -284.77036 538701.1 -540024.64 1191.1215 40932.519 0.50359143 350.55404 356.13127 0.81354721 - 640 640 13.908361 1213.6625 1722.4306 -508.76811 451.82932 596.2177 -304.21125 538680.81 -540025.34 -2040.5501 40920.026 0.50374519 355.14014 360.74736 0.80500911 - 650 650 14.122375 1200.523 1711.9652 -511.44222 468.66709 555.52213 -284.35989 538686.74 -540030.85 -3242.3861 40899.595 0.50399682 352.96478 358.53307 0.8449128 - 660 660 14.33797 1188.0333 1686.8332 -498.79991 447.18786 623.78213 -277.2393 538662.53 -540036.47 2062.8 40868.281 0.504383 347.66952 353.26364 0.84470068 - 670 670 14.552749 1176.309 1677.3756 -501.06663 432.41729 630.68477 -246.82119 538633.15 -540025.32 2018.2625 40844.215 0.50468018 345.93001 351.30318 0.79958169 - 680 680 14.760923 1164.0539 1637.268 -473.21403 456.37206 620.05888 -220.36961 538603.84 -540020.32 -976.09071 40828.172 0.50487849 337.63373 342.91086 0.76511377 - 690 690 14.973559 1151.5332 1658.5734 -507.04017 455.22409 597.05127 -207.88025 538576.76 -540018.31 323.34897 40810.021 0.50510305 341.94091 347.36248 0.79627601 - 700 700 15.184398 1139.9903 1700.0553 -560.06498 436.02394 577.80227 -205.50405 538580.01 -540024.21 2001.9128 40793.73 0.50530475 350.53199 356.08655 0.74354299 - 710 710 15.400627 1128.2643 1664.8705 -536.60628 463.70506 651.50664 -230.61516 538538.77 -540025.31 -508.86732 40784.628 0.50541753 343.34437 348.6884 0.78515878 - 720 720 15.614563 1115.9411 1630.2796 -514.33852 506.57764 607.09308 -229.84152 538559.57 -540017.07 -3127.5793 40773.329 0.50555759 336.08992 341.42284 0.81059211 - 730 730 15.830713 1103.0656 1694.1592 -591.09356 450.11958 627.65288 -253.85448 538551.36 -540015.43 -146.32999 40751.104 0.50583332 349.11077 354.74126 0.96159634 - 740 740 16.038668 1090.6612 1721.1435 -630.48227 437.46474 606.18905 -248.87815 538542.97 -540008.35 1077.7969 40727.746 0.50612342 354.64465 360.41017 0.93961199 - 750 750 16.252273 1077.6001 1706.0173 -628.41716 477.13711 591.82616 -241.11378 538505.89 -540005.96 -974.1309 40707.979 0.50636918 351.76494 357.21309 0.99061611 - 760 760 16.460337 1064.8462 1671.2712 -606.42497 459.57992 620.48754 -220.77486 538487.09 -540007.33 -71.64889 40685.72 0.50664622 344.49488 349.92005 1.0059768 - 770 770 16.677585 1052.4557 1681.2022 -628.74649 428.96094 608.2218 -198.40559 538475.09 -540006.2 1856.6076 40663.884 0.50691828 346.27378 351.96343 1.0837482 - 780 780 16.893769 1040.723 1625.9969 -585.27381 458.27519 626.0187 -235.63783 538502.81 -540008.7 1016.2221 40649.237 0.50710094 335.13457 340.40065 1.0590112 - 790 790 17.118082 1028.4064 1633.2536 -604.84719 455.65305 626.15622 -248.78737 538508.38 -540008.88 -1369.2979 40638.582 0.50723389 336.64828 341.88384 1.1357406 - 800 800 17.339244 1015.4954 1666.4595 -650.9641 445.94756 657.57103 -280.18245 538498.84 -540015.1 -1043.1656 40623.317 0.50742449 343.47686 348.83548 1.1573361 - 810 810 17.553809 1002.1183 1685.5373 -683.41906 440.89112 604.14181 -291.89016 538535.57 -540014.83 -581.99461 40603.767 0.50766881 347.41495 352.80847 1.2116042 - 820 820 17.778791 989.15171 1678.3078 -689.15612 455.2621 599.94003 -298.7579 538514.82 -540009.96 -2027.8844 40581.116 0.50795217 345.89589 351.2764 1.2440787 - 830 830 18.001953 975.707 1649.255 -673.54801 458.71883 647.01152 -302.29605 538497.69 -540017.88 -1485.4901 40550.879 0.50833092 339.85438 345.15667 1.3002628 - 840 840 18.217084 962.26855 1667.3243 -705.05577 462.77662 592.72694 -279.50507 538495.49 -540012.35 -54.163113 40514.914 0.50878217 343.40682 348.92391 1.3431364 - 850 850 18.440542 949.49932 1631.9134 -682.4141 478.53288 614.19826 -243.38115 538444.52 -540010.3 310.08768 40478.805 0.50923603 336.30228 341.53075 1.2799218 - 860 860 18.65751 935.99845 1684.7625 -748.76409 440.77296 594.40682 -219.10467 538407.93 -540013.87 248.0022 40444.498 0.50966798 347.06325 352.6711 1.161457 - 870 870 18.87971 922.58003 1694.0713 -771.49127 466.19871 609.11461 -205.02926 538339.03 -540013.71 495.00215 40411.839 0.51007988 349.28528 354.6354 1.1364619 - 880 880 19.111334 908.90546 1697.4569 -788.55149 458.33805 606.14761 -189.21242 538326.84 -540014.77 986.80955 40381.983 0.510457 350.0288 355.36417 1.0987025 - 890 890 19.336511 895.51995 1647.1281 -751.60817 467.89799 618.42866 -204.03381 538331.65 -540002.93 -624.82453 40355.893 0.51078701 339.51567 344.85213 1.0174293 - 900 900 19.561979 881.35561 1648.538 -767.18239 482.4553 618.07345 -231.01967 538322.5 -540005.24 -1427.503 40327.852 0.51114217 339.70171 345.13656 1.0398005 - 910 910 19.77894 867.61758 1644.2566 -776.639 467.74273 603.67744 -236.07867 538351.52 -540008.11 -265.82677 40294.966 0.51155933 339.01554 344.25158 1.0143413 - 920 920 20.001905 853.94584 1627.6141 -773.66826 472.82171 589.79371 -219.1737 538345.65 -540005.73 -101.571 40261.021 0.51199064 335.50924 340.78304 0.97241589 - 930 930 20.222736 840.36432 1647.6033 -807.23894 448.42292 585.44013 -225.33398 538337.25 -540001.93 -579.43943 40227.022 0.51242336 339.78899 345.00145 0.91803022 - 940 940 20.452171 827.65554 1587.3974 -759.74184 460.78076 625.88654 -234.39212 538341.74 -540000.41 -521.27788 40191.265 0.51287926 327.35362 332.38943 0.89479535 - 950 950 20.683637 814.92728 1613.2286 -798.30131 444.69207 625.45006 -220.90437 538310.82 -539997.46 690.75705 40154.389 0.51335026 332.76498 337.82638 0.85318584 - 960 960 20.909569 802.68594 1582.1571 -779.47118 464.65237 620.34911 -202.28265 538285.19 -539989.82 603.28491 40120.532 0.51378346 326.13938 331.32007 0.8360227 - 970 970 21.157412 790.05035 1625.6546 -835.60423 458.40436 586.65017 -213.69114 538280.37 -539993.72 -505.81997 40089.412 0.5141823 335.20752 340.43527 0.84623905 - 980 980 21.386351 777.63872 1616.1839 -838.5452 489.85695 596.65508 -249.36777 538276.37 -539994.03 -720.92633 40057.048 0.51459772 333.26967 338.47472 0.79582384 - 990 990 21.611019 764.76448 1625.2264 -860.46187 455.6042 582.88497 -251.36667 538315.5 -539997.18 -736.01132 40022.287 0.51504468 335.09615 340.34019 0.85681602 - 1000 1000 21.840266 752.15165 1602.1524 -850.00076 440.64651 612.21179 -259.66632 538327.16 -539995.9 -659.783 39985.098 0.51552371 330.23098 335.51944 0.82229368 - 1010 1010 22.061729 739.36313 1612.4766 -873.11349 456.73339 595.48756 -265.92682 538317.42 -539994.4 -805.3156 39945.679 0.51603244 332.47155 337.67068 0.84926087 - 1020 1020 22.281956 726.60873 1607.6476 -881.03885 453.27344 580.3865 -263.10342 538318.42 -539994.98 -867.47906 39903.697 0.51657534 331.38231 336.63862 0.88832411 - 1030 1030 22.500293 714.38154 1568.6465 -854.26499 450.07706 620.13214 -247.05848 538288.31 -539992.98 -21.052816 39859.334 0.51715028 323.35423 328.44574 0.91902456 - 1040 1040 22.714615 702.14692 1585.2297 -883.08274 452.30576 586.6151 -222.99088 538272.15 -539994.18 439.19554 39815.597 0.51771837 326.8922 331.92732 0.90998278 - 1050 1050 22.934165 690.07486 1604.6904 -914.61558 454.89463 577.67062 -217.9776 538243.15 -539993.38 322.83286 39774.408 0.5182545 330.83397 336.02496 0.87557251 - 1060 1060 23.147485 678.22883 1616.2423 -938.01344 451.38029 587.76489 -199.22296 538184.33 -539990.34 -445.39958 39735.128 0.51876682 333.30762 338.44871 0.87231416 - 1070 1070 23.371712 666.68565 1572.2135 -905.52789 463.80966 606.04348 -188.43084 538159.53 -539987.03 -163.71062 39695.243 0.51928807 323.93741 329.19376 0.91879888 - 1080 1080 23.592074 655.3194 1549.8766 -894.55717 471.58122 627.43794 -171.01223 538118.27 -539983.53 642.00617 39655.854 0.51980386 319.40093 324.50755 0.92424346 - 1090 1090 23.810768 643.56988 1572.9827 -929.41284 477.53512 617.3063 -155.84223 538080.67 -539981.75 -303.11208 39619.261 0.52028396 324.11211 329.35218 0.92452937 - 1100 1100 24.030996 631.34926 1606.5068 -975.1575 482.38301 596.35174 -152.24071 538069.94 -539985.59 -295.74715 39582.718 0.52076429 331.14581 336.34658 0.99398777 - 1110 1110 24.253748 619.40749 1650.0925 -1030.685 471.99628 581.92908 -163.37165 538056.44 -539986.19 101.99914 39545.912 0.52124898 340.30522 345.49221 0.98038296 - 1120 1120 24.466358 607.80142 1601.7714 -993.96998 481.78391 604.13823 -175.98477 538075.33 -539989.29 772.03173 39510.545 0.52171556 329.92976 335.33428 1.0328339 - 1130 1130 24.683317 596.14983 1585.9766 -989.82673 478.57552 593.5132 -163.56273 538080.21 -539991.31 698.29284 39478.891 0.52213387 326.73721 332.03022 1.0174001 - 1140 1140 24.899456 584.55115 1528.6932 -944.14208 500.23792 618.7855 -145.95898 538068.56 -539991.59 181.46798 39450.636 0.52250783 315.01595 320.01906 1.0180086 - 1150 1150 25.121842 573.2311 1532.9497 -959.71864 483.82952 595.80796 -147.60708 538091.56 -539992.86 960.828 39424.391 0.52285565 315.87623 320.88763 1.0658274 - 1160 1160 25.337582 562.48544 1542.3058 -979.82036 479.02129 557.25946 -148.66969 538106.56 -539989.91 865.76041 39402.269 0.52314921 317.55574 322.8689 1.0267396 - 1170 1170 25.560172 551.79114 1565.0048 -1013.2136 473.50392 595.12481 -176.67308 538082.7 -539996.66 287.39786 39383.964 0.52339237 322.51003 327.60986 1.0636049 - 1180 1180 25.780628 540.84306 1560.3606 -1019.5175 472.50193 613.77621 -180.43646 538077.13 -539996.75 -273.84079 39367.233 0.5236148 321.24203 326.61818 1.0994493 - 1190 1190 26.006947 529.81791 1554.3154 -1024.4975 479.61574 608.56003 -190.37193 538092.52 -539997.94 -199.37466 39350.015 0.52384391 320.26323 325.33314 1.1344811 - 1200 1200 26.227567 518.37678 1598.5516 -1080.1748 475.43183 585.7003 -196.96318 538076.64 -539998.23 63.187511 39332.491 0.5240773 329.21805 334.58589 1.179388 - 1210 1210 26.45494 506.92408 1597.2282 -1090.3041 478.61347 599.24396 -201.47857 538049.55 -539992.4 -282.33521 39315.294 0.52430655 328.93235 334.3036 1.1889983 - 1220 1220 26.678579 495.3273 1606.9452 -1111.6179 486.00588 549.43523 -204.38154 538078.12 -539992.38 604.77764 39297.911 0.52453847 331.09004 336.35084 1.1693315 - 1230 1230 26.910881 483.97099 1552.6316 -1068.6606 472.98644 610.41417 -176.61168 538037.16 -539988.94 470.47936 39282.921 0.52473863 319.75816 324.99789 1.0988695 - 1240 1240 27.131567 472.33281 1542.3666 -1070.0338 489.16026 584.28947 -175.21695 538035.4 -539991.65 -39.470875 39269.955 0.52491188 317.74163 322.82092 1.1481824 - 1250 1250 27.361988 461.11742 1519.0832 -1057.9658 473.26317 593.83851 -175.20668 538033.43 -539994.75 295.86367 39257.488 0.52507858 312.91207 317.94819 1.1297909 - 1260 1260 27.586596 450.3583 1527.6842 -1077.3259 485.88507 599.1393 -175.2479 537977.99 -539996.56 432.81529 39246.428 0.52522655 314.61209 319.7779 1.0772012 - 1270 1270 27.813668 439.18619 1544.6237 -1105.4375 482.11644 557.47819 -180.22821 537997.38 -540002.38 -298.3561 39236.936 0.52535361 318.30327 323.34421 1.0481196 - 1280 1280 28.035589 428.46106 1516.596 -1088.1349 504.49165 596.2217 -191.79409 537968.4 -539999.7 -883.68236 39226.429 0.52549433 312.38724 317.45893 1.0652888 - 1290 1290 28.263998 417.63805 1546.4541 -1128.8161 479.2285 593.89919 -185.11562 537964.93 -540001.23 -50.607033 39213.194 0.52567168 318.46765 323.73839 1.0273567 - 1300 1300 28.482059 407.00807 1551.335 -1144.327 493.43178 574.48856 -175.61939 537958.65 -539998.7 123.574 39199.722 0.52585235 319.7532 324.78784 0.9752765 - 1310 1310 28.704087 395.94205 1538.6343 -1142.6923 491.37859 591.0781 -184.30661 537953.49 -539994.21 -524.8278 39186.687 0.52602726 317.02529 322.10872 1.0074745 - 1320 1320 28.920503 384.90905 1530.8244 -1145.9153 476.59333 569.84151 -182.12499 537989.64 -539996.56 21.826355 39172.368 0.52621955 315.37027 320.49323 0.9633641 - 1330 1330 29.141909 374.26223 1511.5796 -1137.3173 475.38356 601.06911 -174.11503 537961.77 -539992.81 516.38488 39158.343 0.52640802 311.48105 316.4728 0.93392709 - 1340 1340 29.362343 364.32413 1500.0476 -1135.7235 483.5558 569.29153 -175.60404 537991.19 -539992.7 243.67538 39146.39 0.52656875 309.10478 314.05501 0.9335977 - 1350 1350 29.592061 354.55464 1504.469 -1149.9143 490.62162 587.58927 -186.35248 537961.88 -539995.1 -381.78526 39135.483 0.52671551 310.21158 315.01201 0.8736878 - 1360 1360 29.816398 344.35547 1531.3642 -1187.0088 491.21584 579.89411 -193.76413 537943.58 -539990.58 -244.2355 39123.584 0.5268757 315.75953 320.64866 0.87888611 - 1370 1370 30.039889 334.27989 1515.0842 -1180.8043 488.03531 574.19257 -211.87448 537993.57 -539991.08 -249.97543 39110.893 0.52704667 312.25817 317.23298 0.8832415 - 1380 1380 30.272868 323.86696 1538.6119 -1214.745 485.08686 582.87805 -225.29898 537973.87 -539986.54 -739.02426 39097.267 0.52723035 317.12737 322.16729 0.88094849 - 1390 1390 30.496249 313.80794 1533.3067 -1219.4987 481.37523 588.64375 -234.24759 537976.62 -539986.05 -655.28833 39081.143 0.52744788 315.91691 321.06481 0.86113555 - 1400 1400 30.725094 303.79864 1530.9473 -1227.1487 480.72027 590.16215 -215.86567 537959.68 -539992.21 -330.73807 39062.732 0.52769647 315.41341 320.56481 0.87174767 - 1410 1410 30.951381 293.51075 1533.2975 -1239.7868 491.09148 572.9868 -198.65749 537930.68 -539987.8 -65.486938 39043.309 0.52795899 316.19674 321.05974 0.86744465 - 1420 1420 31.181557 283.71084 1526.6328 -1242.922 495.08331 568.48527 -176.82189 537902.75 -539990.49 21.532166 39023.934 0.52822111 314.51268 319.62568 0.94073093 - 1430 1430 31.408995 273.976 1499.5001 -1225.5241 493.7511 599.34826 -163.21126 537865.36 -539986.48 -139.4696 39004.889 0.52847903 308.9433 313.92488 0.96423296 - 1440 1440 31.639168 264.37595 1479.3112 -1214.9353 485.97735 626.51291 -168.73441 537862.24 -539985.08 -5.1376016 38985.764 0.52873828 304.69592 309.69382 0.96018344 - 1450 1450 31.86538 254.48311 1516.8238 -1262.3406 485.20611 584.42229 -187.84777 537878.3 -539988.09 -409.87731 38966.698 0.528997 312.38753 317.54805 0.98256115 - 1460 1460 32.097869 244.44609 1528.0096 -1283.5635 475.14932 572.1757 -195.03467 537887.83 -539982.93 -382.07163 38946.576 0.5292703 314.82863 319.87313 1.0231637 - 1470 1470 32.334475 234.92186 1506.9672 -1272.0453 483.58859 574.09386 -193.42819 537901.5 -539985.43 -556.48369 38925.157 0.52956153 310.53209 315.46775 1.0098195 - 1480 1480 32.561381 225.54727 1504.4567 -1278.9094 488.61689 565.0204 -174.14691 537885.2 -539984.52 -359.42169 38902.063 0.52987591 309.97065 314.91696 1.0586336 - 1490 1490 32.794577 216.38416 1466.2284 -1249.8443 509.51688 596.47771 -171.13996 537848.83 -539986.88 -260.22681 38877.931 0.53020481 302.13725 306.92154 1.0184879 - 1500 1500 33.026393 206.69536 1483.4352 -1276.7398 489.094 572.06657 -180.74977 537863.53 -539990.17 -374.65638 38853.144 0.53054306 305.41421 310.49034 1.0965311 - 1510 1510 33.253073 197.53496 1470.5518 -1273.0168 496.4778 572.70296 -188.04176 537867.9 -539990.72 -194.44393 38827.445 0.53089421 302.98152 307.8031 1.0683639 - 1520 1520 33.486049 188.48557 1505.5349 -1317.0494 482.1399 549.60023 -188.37002 537878.58 -539995.49 -303.59474 38801.329 0.53125155 310.28121 315.125 1.0947178 - 1530 1530 33.71214 180.01627 1478.9048 -1298.8885 480.66008 576.52332 -189.11463 537879.38 -539993.74 -93.728814 38774.647 0.53161711 304.77682 309.54442 1.0885542 - 1540 1540 33.945085 171.52164 1446.5122 -1274.9905 501.65604 592.7318 -194.77694 537883.38 -539991.88 -572.03929 38747.789 0.53198561 297.926 302.75623 1.081108 - 1550 1550 34.169209 162.60918 1457.9287 -1295.3195 486.66451 571.43484 -187.48201 537884.26 -539989.54 -853.52486 38719.251 0.53237771 300.30512 305.13923 1.10264 - 1560 1560 34.402741 154.14961 1460.7712 -1306.6216 487.11697 573.05525 -179.37345 537856.59 -539987.73 206.95258 38688.466 0.53280133 300.76679 305.73882 1.0954494 - 1570 1570 34.633793 145.6307 1495.1533 -1349.5226 487.99972 554.96647 -191.74891 537850.24 -539993.78 -213.86136 38658.392 0.53321581 308.13343 312.9642 1.0627758 - 1580 1580 34.858544 137.39237 1453.073 -1315.6806 505.50016 572.68038 -203.83828 537848.17 -539990.51 -661.68831 38628.081 0.53363422 299.22674 304.14568 1.0534877 - 1590 1590 35.087313 129.05492 1470.1644 -1341.1095 501.44319 556.99456 -200.18914 537839.64 -539995.46 -568.78912 38595.999 0.53407779 302.89304 307.72799 1.0561465 - 1600 1600 35.314759 120.98183 1474.539 -1353.5572 501.88809 579.32612 -190.98534 537804.72 -539996.91 -160.89634 38562.46 0.53454229 303.82394 308.64511 1.0563809 - 1610 1610 35.54699 112.95651 1460.2249 -1347.2684 507.62493 568.61569 -186.36471 537806.85 -539992.66 -173.77943 38528.878 0.5350082 300.96155 305.65977 1.0244687 - 1620 1620 35.775333 105.14119 1417.5884 -1312.4472 509.86727 587.11752 -178.54456 537794.49 -539991.12 -986.38798 38495.018 0.53547879 292.14329 296.7195 1.025421 - 1630 1630 36.00793 96.99965 1437.5733 -1340.5736 501.20257 559.09339 -183.47706 537795.68 -539989.89 -337.67771 38458.687 0.53598465 296.23298 300.93861 0.96783706 - 1640 1640 36.240331 89.301341 1442.9464 -1353.6451 499.24329 557.10277 -189.77016 537785.82 -539988.95 -217.33207 38421.605 0.53650195 297.30451 302.041 1.0162812 - 1650 1650 36.464999 82.272541 1418.4528 -1336.1802 512.15045 576.54801 -197.74469 537770.95 -539985.93 -765.69935 38384.269 0.53702379 292.16195 296.91165 1.003587 - 1660 1660 36.696163 75.245147 1432.3065 -1357.0613 504.60866 561.06335 -182.84394 537758.28 -539981.97 -720.77431 38345.103 0.53757232 295.09799 299.8321 0.97222873 - 1670 1670 36.921469 67.974343 1462.3052 -1394.3308 508.79216 571.9667 -187.97716 537720.4 -539984.82 -728.38004 38304.006 0.53814909 301.39433 306.11908 0.97819013 - 1680 1680 37.156748 60.242602 1487.7274 -1427.4848 489.91874 550.06024 -193.29007 537746.63 -539988.16 -117.94688 38261.502 0.53874692 306.67673 311.465 0.94713061 - 1690 1690 37.383504 53.143919 1459.148 -1406.0041 479.9147 580.91763 -186.24589 537744.92 -539985.86 -692.45728 38219.174 0.53934357 300.68984 305.45048 0.99146043 - 1700 1700 37.614368 45.953602 1426.9308 -1380.9772 497.60714 580.50612 -166.09691 537725.11 -539986.46 -844.43524 38175.5 0.53996061 294.09174 298.73772 0.90668449 - 1710 1710 37.847542 38.964967 1436.2145 -1397.2495 507.68713 561.14384 -167.73914 537716.98 -539981.32 -377.11797 38130.02 0.54060465 295.93443 300.65779 0.95966541 - 1720 1720 38.071033 31.75435 1459.2052 -1427.4509 504.38186 553.04689 -168.58594 537710.3 -539981.5 -367.33181 38084.217 0.54125482 300.78718 305.47781 0.96077303 - 1730 1730 38.298399 24.463684 1486.6879 -1462.2242 495.52339 528.05137 -156.11454 537702 -539982.96 -322.91733 38038.426 0.54190639 306.39559 311.27389 0.89344382 - 1740 1740 38.528471 17.443572 1469.0301 -1451.5866 501.23042 555.32899 -163.40791 537688.49 -539982.76 -575.76272 37992.635 0.54255953 302.56905 307.53139 0.97367765 - 1750 1750 38.760203 10.226222 1468.5048 -1458.2786 483.79386 557.22663 -180.9805 537725.87 -539987.79 -144.3588 37946.413 0.54322041 302.65462 307.44452 0.92710718 - 1760 1760 38.988632 3.3338713 1455.7767 -1452.4428 492.16679 580.418 -196.41241 537718.11 -539984.89 -447.17625 37900.791 0.54387429 300.01777 304.78831 0.90201134 - 1770 1770 39.221733 -4.4436072 1514.2285 -1518.6721 498.58626 543.0597 -201.20107 537697.54 -539988.08 -413.5874 37855.167 0.54452978 311.8641 317.03639 0.9175616 - 1780 1780 39.462746 -12.078178 1500.0141 -1512.0923 510.8842 537.91557 -190.57863 537688.29 -539987.37 -281.34559 37809.557 0.54518666 309.0417 314.07409 0.88137104 - 1790 1790 39.70076 -19.807866 1489.6217 -1509.4295 512.47719 540.74673 -173.01134 537672.4 -539983.96 -594.2773 37764.312 0.54583984 306.88911 311.89004 0.89141439 - 1800 1800 39.999239 -27.551935 1454.1881 -1481.74 504.43406 587.85284 -163.0931 537659.52 -539985.61 -562.902 37718.536 0.54650229 299.65393 304.46526 0.88194202 - 1810 1810 40.240858 -35.172046 1461.1948 -1496.3668 506.76051 559.34064 -159.78596 537650.98 -539986.62 93.333143 37672.584 0.54716889 301.01216 305.92428 0.90215653 - 1820 1820 40.478228 -42.544395 1464.1727 -1506.717 511.80012 555.63005 -146.87939 537615.87 -539991.66 -235.83431 37628.272 0.54781325 301.84224 306.52652 0.94643867 - 1830 1830 40.712435 -50.408898 1455.5933 -1506.0022 516.85237 571.75274 -143.477 537588.37 -539995.28 -657.1656 37584.697 0.54844838 300.1439 304.75432 0.89308276 - 1840 1840 40.944117 -57.74015 1439.3155 -1497.0556 508.44952 551.85922 -133.91203 537602.46 -539988.67 74.452185 37540.779 0.54908999 296.68313 301.3222 0.9312283 - 1850 1850 41.179574 -64.1309 1424.4531 -1488.584 510.53555 557.24559 -140.10065 537612.54 -539983.68 478.00794 37498.661 0.54970672 293.49702 298.20289 0.93735246 - 1860 1860 41.409342 -71.003858 1463.0623 -1534.0661 494.22469 530.44018 -152.81505 537636.97 -539982.44 91.961324 37459.697 0.5502785 301.5481 306.34354 0.84675017 - 1870 1870 41.644415 -77.648795 1427.4781 -1505.1269 491.02394 561.49148 -151.1223 537636.43 -539980.02 -435.92195 37422.477 0.5508258 294.2896 298.83391 0.94385309 - 1880 1880 41.904945 -83.937246 1408.3625 -1492.2997 496.49653 563.43084 -154.07954 537636.6 -539982.97 191.50779 37385.544 0.55136996 290.28708 294.84415 0.9072399 - 1890 1890 42.140914 -90.055778 1415.472 -1505.5278 506.7446 556.72837 -168.16962 537629.16 -539984.5 66.201503 37350.415 0.55188853 291.88679 296.31605 0.94481507 - 1900 1900 42.381274 -96.47075 1431.3413 -1527.812 519.74922 544.01957 -192.65467 537633.12 -539988.67 -796.13306 37316.64 0.55238804 294.95092 299.64568 0.94032731 - 1910 1910 42.618679 -102.85417 1429.9108 -1532.765 496.58603 552.34631 -203.14772 537655.96 -539987.35 -1079.2969 37281.465 0.55290922 294.59953 299.3099 1.0120105 - 1920 1920 42.853256 -109.00048 1451.2983 -1560.2988 504.47992 539.89277 -189.83624 537617.75 -539982.83 -162.49828 37244.135 0.55346342 299.01729 303.77465 1.0513433 - 1930 1930 43.094871 -114.90526 1443.6048 -1558.51 513.67097 531.71647 -174.66654 537610.57 -539982.62 187.46093 37207.476 0.55400871 297.54402 302.1569 1.0605547 - 1940 1940 43.329949 -120.50564 1404.7013 -1525.207 504.52336 572.28422 -159.44687 537600.18 -539977.31 -735.06991 37172.415 0.55453126 289.46595 294.00591 1.0484137 - 1950 1950 43.56525 -126.12492 1413.284 -1539.4089 516.22056 561.97444 -159.40311 537594.29 -539979.2 -239.01279 37136.578 0.55506638 291.05888 295.75975 1.1398655 - 1960 1960 43.801592 -131.2896 1429.1674 -1560.457 504.07961 554.2537 -175.64758 537611.38 -539978.46 226.43877 37101.172 0.55559608 294.46237 299.12106 1.0779577 - 1970 1970 44.036043 -136.70492 1441.4232 -1578.1281 516.78111 551.13969 -181.42271 537584.57 -539980.88 23.658598 37067.725 0.55609742 296.90884 301.66921 1.1210845 - 1980 1980 44.271311 -142.78731 1440.1051 -1582.8924 508.11976 532.18635 -172.6671 537588.62 -539978.74 -604.40478 37035.477 0.55658163 296.87807 301.39775 1.111257 - 1990 1990 44.505131 -148.45813 1420.5171 -1568.9752 521.95895 535.64727 -167.03945 537590.49 -539975.13 -722.04634 37002.397 0.55707921 292.74976 297.2732 1.1461384 - 2000 2000 44.73314 -153.70316 1413.1112 -1566.8144 500.23407 577.00843 -176.66202 537589.81 -539978.18 77.164357 36968.346 0.55759232 290.88401 295.72127 1.1443678 -Loop time of 44.7332 on 4 procs for 2000 steps with 2800 atoms - -Performance: 3.863 ns/day, 6.213 hours/ns, 44.710 timesteps/s -99.0% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 6.2146 | 6.7951 | 7.2455 | 14.2 | 15.19 -Bond | 0.40987 | 0.42168 | 0.43298 | 1.5 | 0.94 -Kspace | 24.004 | 24.445 | 25.016 | 7.4 | 54.65 -Neigh | 0.58942 | 0.58983 | 0.5902 | 0.0 | 1.32 -Comm | 0.25569 | 0.25754 | 0.25878 | 0.2 | 0.58 -Output | 0.009785 | 0.011768 | 0.01571 | 2.1 | 0.03 -Modify | 12.178 | 12.188 | 12.197 | 0.2 | 27.25 -Other | | 0.02401 | | | 0.05 - -Nlocal: 700.000 ave 712 max 682 min -Histogram: 1 0 0 0 0 0 0 2 0 1 -Nghost: 4507.00 ave 4666 max 4371 min -Histogram: 1 0 0 1 0 1 0 0 0 1 -Neighs: 121324.0 ave 132538 max 108358 min -Histogram: 1 0 0 0 1 0 0 1 0 1 - -Total # of neighbors = 485295 -Ave neighs/atom = 173.31964 -Ave special neighs/atom = 11.714286 -Neighbor list builds = 115 -Dangerous builds = 0 - -Total wall time: 0:00:44 From 3b1d07225d1285d8cfc650dfbecbf0db80cbe1f6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 28 Sep 2020 13:49:38 -0400 Subject: [PATCH 043/182] corret strmatch() semantics and restore strcmp() in extract function --- src/USER-DRUDE/pair_coul_tt.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/USER-DRUDE/pair_coul_tt.cpp b/src/USER-DRUDE/pair_coul_tt.cpp index d9c0589754..b417c0660b 100644 --- a/src/USER-DRUDE/pair_coul_tt.cpp +++ b/src/USER-DRUDE/pair_coul_tt.cpp @@ -160,7 +160,7 @@ void PairCoulTT::compute(int eflag, int vflag) if (drudetype[type[i]] == CORE_TYPE && drudetype[type[j]] == CORE_TYPE) dcoul = qqrd2e * ( -(q[i]+q[di])*q[dj] - q[di]*(q[j]+q[dj]) ) * scale[itype][jtype] * rinv; else - dcoul = qqrd2e * qi * qj *scale[itype][jtype] * rinv; + dcoul = qqrd2e * qi * qj *scale[itype][jtype] * rinv; factor_f = (-beta*gamma + r*betaprime*gamma + r*beta*gammaprime)*factor_coul; if(eflag) factor_e = - beta*gamma*factor_coul; @@ -174,7 +174,7 @@ void PairCoulTT::compute(int eflag, int vflag) f[j][1] -= dely*fpair; f[j][2] -= delz*fpair; } - + if (eflag) ecoul = factor_e * dcoul; @@ -286,7 +286,7 @@ void PairCoulTT::init_style() error->all(FLERR,"Pair style coul/tt requires atom attribute q"); int ifix; for (ifix = 0; ifix < modify->nfix; ifix++) - if (utils::strmatch(modify->fix[ifix]->style,"drude") == 0) break; + if (utils::strmatch(modify->fix[ifix]->style,"^drude")) break; if (ifix == modify->nfix) error->all(FLERR, "Pair coul/tt requires fix drude"); fix_drude = (FixDrude *) modify->fix[ifix]; @@ -438,9 +438,9 @@ double PairCoulTT::single(int i, int j, int itype, int jtype, void *PairCoulTT::extract(const char *str, int &dim) { dim = 2; - if (utils::strmatch(str,"scale") == 0) return (void *) scale; - if (utils::strmatch(str,"b") == 0) return (void *) b; - if (utils::strmatch(str,"c") == 0) return (void *) c; - if (utils::strmatch(str,"ntt") == 0) return (void *) ntt; + if (strcmp(str,"scale") == 0) return (void *) scale; + if (strcmp(str,"b") == 0) return (void *) b; + if (strcmp(str,"c") == 0) return (void *) c; + if (strcmp(str,"ntt") == 0) return (void *) ntt; return nullptr; } From 54c4b95c4df24b4d0cbc24fa7f3fe7ce3c89139a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 28 Sep 2020 14:09:03 -0400 Subject: [PATCH 044/182] small format tweak --- doc/src/compute_centro_atom.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/compute_centro_atom.rst b/doc/src/compute_centro_atom.rst index 489b7845ce..b250634b5c 100644 --- a/doc/src/compute_centro_atom.rst +++ b/doc/src/compute_centro_atom.rst @@ -133,7 +133,7 @@ simulation into gold (FCC). These were provided by Jon Zimmerman Stacking faults ~ 5.0 (4.0 to 6.0) Free surface ~ 23.0 -These values are \*not\* normalized by the square of the lattice +These values are **not** normalized by the square of the lattice parameter. If they were, normalized values would be: .. parsed-literal:: From 0ed935ab76d74e38aea0300c778ca2d2ed6718e5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 29 Sep 2020 11:19:12 -0400 Subject: [PATCH 045/182] silence compiler warning on windows --- tools/msi2lmp/src/msi2lmp.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/msi2lmp/src/msi2lmp.c b/tools/msi2lmp/src/msi2lmp.c index b5e9a96293..4e519855f3 100644 --- a/tools/msi2lmp/src/msi2lmp.c +++ b/tools/msi2lmp/src/msi2lmp.c @@ -152,6 +152,10 @@ #include #include +#ifdef _WIN32 +#include +#endif + /* global variables */ char *rootname; From e4cfb9116997703e97f21d7ee038ba8ccb2193bd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 29 Sep 2020 16:57:19 -0400 Subject: [PATCH 046/182] discuss that USER-MESONT package potentials are not bundled and provide URL --- doc/src/pair_mesocnt.rst | 7 +++++-- doc/src/pair_mesont_tpm.rst | 15 ++++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/doc/src/pair_mesocnt.rst b/doc/src/pair_mesocnt.rst index e6164943f3..90b6644fd9 100644 --- a/doc/src/pair_mesocnt.rst +++ b/doc/src/pair_mesocnt.rst @@ -77,8 +77,11 @@ boron nitride nanotubes. .. note:: - LAMMPS comes with one *mesocnt* style potential file - where the default number of data points per table is 1001. + Because of their size, *mesocnt* style potential files + are not bundled with LAMMPS. When compiling LAMMPS from + source code, the file ``C_10_10.mesocnt`` should be downloaded + transparently from `https://download.lammps.org/potentials/C_10_10.mesocnt `_ + This file has as number of data points per table 1001. This is sufficient for NVT simulations. For proper energy conservation, we recommend using a potential file where the resolution for Phi is at least 2001 data points. diff --git a/doc/src/pair_mesont_tpm.rst b/doc/src/pair_mesont_tpm.rst index e26f16fba3..d698dddd92 100644 --- a/doc/src/pair_mesont_tpm.rst +++ b/doc/src/pair_mesont_tpm.rst @@ -147,12 +147,17 @@ where L is the maximum segment length, R is the maximum tube radius, and segments. Because of the use of extended chain concept at CNT ends, the recommended cutoff is 3L. -The MESONT-TABTP_10_10.xrs potential file provided with LAMMPS (see the -potentials directory) is parameterized for metal :doc:`units `. +.. note:: + + Because of their size, *mesont* style potential files + are not bundled with LAMMPS. When compiling LAMMPS from + source code, the file ``TABTP_10_10.mesont`` should be downloaded + transparently from `https://download.lammps.org/potentials/TABTP_10_10.mesont `_ + +The ``TABTP_10_10.mesont`` potential file is parameterized for metal :doc:`units `. You can use the carbon nanotube mesoscopic force field with any LAMMPS units, -but you would need to create your own TPMSSTP.xrs and TPMA.xrs potential files -with coefficients listed in appropriate units, if your simulation -does not use "metal" units. +but you would need to create your own potential files with coefficients listed in +appropriate units, if your simulation does not use "metal" units. The chirality parameters set during system generation must match the values specified during generation of the potential tables. From 555fba1e4bb5559079b3572ffd09f6bfbd20fe60 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 29 Sep 2020 18:46:32 -0400 Subject: [PATCH 047/182] add special case for windows installer package where the .dll file is in the bin folder --- python/lammps.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/python/lammps.py b/python/lammps.py index 6f9cf5031d..e3c8f7f61c 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -169,6 +169,8 @@ class lammps(object): # determine module file location modpath = dirname(abspath(getsourcefile(lambda:0))) + # for windows installers the shared library is in a different folder + winpath = abspath(os.path.join(modpath,'..','bin')) self.lib = None self.lmp = None @@ -197,6 +199,10 @@ class lammps(object): elif any([f.startswith('liblammps') and f.endswith('.dll') for f in os.listdir(modpath)]): lib_ext = ".dll" + elif any([f.startswith('liblammps') and f.endswith('.dll') + for f in os.listdir(winpath)]): + lib_ext = ".dll" + modpath = winpath else: lib_ext = ".so" From d84300a3ac87f74a6612ec454071a63b28dcb4b7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 30 Sep 2020 00:05:15 -0400 Subject: [PATCH 048/182] do not fail when looking for gzip or ffmpeg executables when cross compiling to windows --- cmake/CMakeLists.txt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index d9887925ec..0d041b2aa9 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -343,20 +343,22 @@ find_program(GZIP_EXECUTABLE gzip) find_package_handle_standard_args(GZIP REQUIRED_VARS GZIP_EXECUTABLE) option(WITH_GZIP "Enable GZIP support" ${GZIP_FOUND}) if(WITH_GZIP) - if(NOT GZIP_FOUND) + if(GZIP_FOUND OR ((CMAKE_SYSTEM_NAME STREQUAL Windows) AND CMAKE_CROSSCOMPILING)) + target_compile_definitions(lammps PRIVATE -DLAMMPS_GZIP) + else() message(FATAL_ERROR "gzip executable not found") endif() - target_compile_definitions(lammps PRIVATE -DLAMMPS_GZIP) endif() find_program(FFMPEG_EXECUTABLE ffmpeg) find_package_handle_standard_args(FFMPEG REQUIRED_VARS FFMPEG_EXECUTABLE) option(WITH_FFMPEG "Enable FFMPEG support" ${FFMPEG_FOUND}) if(WITH_FFMPEG) - if(NOT FFMPEG_FOUND) + if(FFMPEG_FOUND OR ((CMAKE_SYSTEM_NAME STREQUAL Windows) AND CMAKE_CROSSCOMPILING)) + target_compile_definitions(lammps PRIVATE -DLAMMPS_FFMPEG) + else() message(FATAL_ERROR "ffmpeg executable not found") endif() - target_compile_definitions(lammps PRIVATE -DLAMMPS_FFMPEG) endif() if(BUILD_SHARED_LIBS) From 23279836c96cd4fc19d5d61d22629f64e38a9280 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Wed, 30 Sep 2020 09:10:40 -0400 Subject: [PATCH 049/182] Invalidate pointer after deallocation --- src/math_eigen_impl.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/math_eigen_impl.h b/src/math_eigen_impl.h index daef0e7052..80502b1701 100644 --- a/src/math_eigen_impl.h +++ b/src/math_eigen_impl.h @@ -850,6 +850,7 @@ Dealloc() { //assert(! is_preallocated); Dealloc2D(&M); delete[] max_idx_row; + max_idx_row = nullptr; Init(); } From cbc529881c9dcf737bff75ab8bfb29895b54f8e2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 30 Sep 2020 14:07:46 -0400 Subject: [PATCH 050/182] support hybrid atom styles in in fix propel/self --- src/USER-MISC/fix_propel_self.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/USER-MISC/fix_propel_self.cpp b/src/USER-MISC/fix_propel_self.cpp index 02a55599db..34fcfaeee1 100644 --- a/src/USER-MISC/fix_propel_self.cpp +++ b/src/USER-MISC/fix_propel_self.cpp @@ -160,13 +160,13 @@ template void FixPropelSelf::post_force_quaternion(int /* vflag */ ) { double **f = atom->f; - AtomVecEllipsoid *av = static_cast(atom->avec); int *mask = atom->mask; int nlocal = atom->nlocal; int *type = atom->type; int* ellipsoid = atom->ellipsoid; + AtomVecEllipsoid *av = static_cast(atom->style_match("ellipsoid")); AtomVecEllipsoid::Bonus *bonus = av->bonus; // Add the active force to the atom force: From 4b71e1cbdac9d505a629ea36b95c0a700087e33f Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Wed, 30 Sep 2020 15:37:11 -0600 Subject: [PATCH 051/182] initial library doc page edits --- doc/src/Library.rst | 52 +++++++++++++++++----------------- doc/src/Library_create.rst | 25 ++++++++-------- doc/src/Library_execute.rst | 24 ++++++++-------- doc/src/Library_properties.rst | 28 ++++++++++-------- 4 files changed, 67 insertions(+), 62 deletions(-) diff --git a/doc/src/Library.rst b/doc/src/Library.rst index 8222fc7172..1a12ed134b 100644 --- a/doc/src/Library.rst +++ b/doc/src/Library.rst @@ -9,15 +9,15 @@ script `. Even the LAMMPS standalone executable is essentially a thin wrapper on top of the LAMMPS library, creating a LAMMPS instance, processing input and then existing. -Several of these approaches are based on C language wrapper functions -in the files ``src/library.h`` and ``src/library.cpp``, but it is also -possible to use C++ directly. The basic procedure is always the same: -you create one or more instances of the -:cpp:class:`LAMMPS ` and then pass commands as -strings or from files to that LAMMPS instance to execute calculations, -or read, manipulate, and update data from the active class instances -inside the LAMMPS to do analysis or perform operations that are not -possible with existing commands. +Most of the APIs described below are based on C language wrapper +functions in the files ``src/library.h`` and ``src/library.cpp``, but +it is also possible to use C++ directly. The basic procedure is +always the same: you create one or more instances of +:cpp:class:`LAMMPS `, pass commands as strings or +from files to that LAMMPS instance to execute calculations, and/or +call functions that read, manipulate, and update data from the active +class instances inside LAMMPS to do analysis or perform operations +that are not possible with existing input script commands. .. _thread-safety: @@ -36,13 +36,13 @@ possible with existing commands. Another major issue to deal with is to correctly handle MPI. Creating a LAMMPS instance requires passing an MPI communicator, or it assumes the ``MPI_COMM_WORLD`` communicator, which spans all MPI - processor ranks. When creating multiple LAMMPS object instances from - different threads, this communicator has to be different for each - thread or else collisions can happen. or it has to be guaranteed, - that only one thread at a time is active. MPI communicators, - however, are not a problem, if LAMMPS is compiled with the MPI STUBS - library, which implies that there is no MPI communication and only 1 - MPI rank. + processor ranks. When creating multiple LAMMPS object instances + from different threads, this communicator has to be different for + each thread or else collisions can happen. Or it has to be + guaranteed, that only one thread at a time is active. MPI + communicators, however, are not a problem, if LAMMPS is compiled + with the MPI STUBS library, which implies that there is no MPI + communication and only 1 MPI rank. ---------- @@ -51,7 +51,7 @@ possible with existing commands. LAMMPS C Library API ==================== -The C library interface is most commonly used path to manage LAMMPS +The C library interface is the most commonly used path to manage LAMMPS instances from a compiled code and it is the basis for the :doc:`Python ` and :doc:`Fortran ` modules. Almost all functions of the C language API require an argument containing a @@ -64,7 +64,7 @@ library interface. This usually must be the header from the same MPI library as the LAMMPS library was compiled with. The exception is when LAMMPS was compiled in serial mode using the ``STUBS`` MPI library. In that case the calling code may be compiled with a different MPI library -for as long as :cpp:func:`lammps_open_no_mpi` is called to create a +so long as :cpp:func:`lammps_open_no_mpi` is called to create a LAMMPS instance. Then you may set the define ``-DLAMMPS_LIB_NO_MPI`` when compiling your code and the inclusion of ``mpi.h`` will be skipped and consequently the function :cpp:func:`lammps_open` may not be used. @@ -72,7 +72,7 @@ and consequently the function :cpp:func:`lammps_open` may not be used. .. admonition:: Errors versus exceptions :class: note - If any of the function calls in the LAMMPS library API will trigger + If any of the function calls in the LAMMPS library API trigger an error inside LAMMPS, this will result in an abort of the entire program. This is not always desirable. Instead, LAMMPS can be compiled to instead :ref:`throw a C++ exception `. @@ -81,7 +81,7 @@ and consequently the function :cpp:func:`lammps_open` may not be used. No checks are made on the arguments of the function calls of the C library interface. *All* function arguments must be non-NULL unless - *explicitly* allowed and point to consistent and valid data. Buffers + *explicitly* allowed, and msut point to consistent and valid data. Buffers for storing returned data must be allocated to a suitable size. Passing invalid or unsuitable information will likely cause crashes or corrupt data. @@ -113,10 +113,10 @@ Python by dynamically loading functions in the LAMMPS shared library through the `Python ctypes module `_. Because of the dynamic loading, it is **required** that LAMMPS is compiled in :ref:`"shared" mode `. The Python interface is object oriented, but -otherwise trying to be very similar to the C library API. Three different +otherwise tries to be very similar to the C library API. Three different Python classes to run LAMMPS are available and they build on each other. More information on this is in the :doc:`Python_head` -section of the manual and for using the LAMMPS Python modules is in +section of the manual. Use of the LAMMPS Python module is described in :doc:`Python_module`. ------------------- @@ -127,8 +127,8 @@ LAMMPS Fortran API ================== The LAMMPS Fortran module is a wrapper around calling functions from the -LAMMPS C library API from Fortran through the ISO_C_BINDING feature in -Fortran 2003. The interface is object oriented but otherwise trying to +LAMMPS C library API. This is done using the ISO_C_BINDING feature in +Fortran 2003. The interface is object oriented but otherwise tries to be very similar to the C library API and the basic Python module. .. toctree:: @@ -144,8 +144,8 @@ LAMMPS C++ API ============== It is also possible to invoke the LAMMPS C++ API directly in your code. -It is lacking some of the convenience of the C library API, but it allows -a more direct access to simulation data and thus more low-level manipulations. +It lacks some of the convenience of the C library API, but it allows +more direct access to simulation data and thus more low-level manipulations. The following links provide some examples and references to the C++ API. .. toctree:: diff --git a/doc/src/Library_create.rst b/doc/src/Library_create.rst index f8a8fb7829..a30b3c6e02 100644 --- a/doc/src/Library_create.rst +++ b/doc/src/Library_create.rst @@ -3,9 +3,9 @@ Creating or deleting a LAMMPS object The :cpp:func:`lammps_open` and :cpp:func:`lammps_open_no_mpi` functions are used to create and initialize a -:cpp:func:`LAMMPS` instance. The calling program has to -provide a handle where a reference to this instance can be stored and -which has to be used in all subsequent function calls until that +:cpp:func:`LAMMPS` instance. The calling program provides +a handle where a reference to this instance can be stored and +which is then used in all subsequent function calls until that instance is destroyed by calling :cpp:func:`lammps_close`. Here is a simple example demonstrating its use: @@ -39,9 +39,9 @@ Here is a simple example demonstrating its use: return 0; } -The LAMMPS library will be using the MPI library it was compiled with +The LAMMPS library uses the MPI library it was compiled with and will either run on all processors in the ``MPI_COMM_WORLD`` -communicator or on the set of processors in the communicator given in +communicator or on the set of processors in the communicator passed as the ``comm`` argument of :cpp:func:`lammps_open`. This means the calling code can run LAMMPS on all or a subset of processors. For example, a wrapper code might decide to alternate between LAMMPS and @@ -55,13 +55,14 @@ concurrently on split communicators, or run them one after the other. The :cpp:func:`lammps_open` function may be called multiple times for this latter purpose. -The :cpp:func:`lammps_close` function is used to shut down -the :cpp:class:`LAMMPS ` class pointed to by the handle -passed as an argument and free all its memory. This has to be called for -every instance created with any of the :cpp:func:`lammps_open` functions. It will, however, **not** call -``MPI_Finalize()``, since that may only be called once. See -:cpp:func:`lammps_mpi_finalize` for an alternative to calling -``MPI_Finalize()`` explicitly in the calling program. +The :cpp:func:`lammps_close` function is used to shut down the +:cpp:class:`LAMMPS ` class pointed to by the handle +passed as an argument and free all its memory. This has to be called +for every instance created with one of the :cpp:func:`lammps_open` +functions. It will, however, **not** call ``MPI_Finalize()``, since +that may only be called once. See :cpp:func:`lammps_mpi_finalize` for +an alternative to invoking ``MPI_Finalize()`` explicitly from the +calling program. The :cpp:func:`lammps_free` function is a clean-up function to free memory that the library allocated previously diff --git a/doc/src/Library_execute.rst b/doc/src/Library_execute.rst index 3e79cb3cb4..77e7c13f70 100644 --- a/doc/src/Library_execute.rst +++ b/doc/src/Library_execute.rst @@ -7,19 +7,19 @@ LAMMPS commands like in an input file. This can be done through reading a file or passing single commands or lists of commands or blocks of commands with the following functions. -Via these functions, the calling code can have the LAMMPS instance act -on a series of :doc:`input file commands ` that are either -read from a file or passed as strings. This for, for example, allows to -setup a problem from a template file and then run it in stages while -performing other operations in between or concurrently. The caller can -interleave the LAMMPS function calls with operations it performs, calls -to extract information from or set information within LAMMPS, or calls -to another code's library. +Via these functions, the calling code can have LAMMPS act on a series +of :doc:`input file commands ` that are either read from +a file or passed as strings. For example, this allows setup of a +problem from an input script, and then running it in stages while +performing other operations in between or concurrently. The caller +can interleave the LAMMPS function calls with operations it performs, +such as calls to extract information from or set information within +LAMMPS, or calls to another code's library. -Also equivalent to regular :doc:`input script parsing ` -is the handling of comments and expansion of variables with ``${name}`` -or ``$(expression)`` syntax before the commands are parsed and -executed. Below is a short example using some of these functions. +Just as with :doc:`input script parsing ` comments can +be included in the file or strings, and expansion of variables with +``${name}`` or ``$(expression)`` syntax is performed. +Below is a short example using some of these functions. .. code-block:: C diff --git a/doc/src/Library_properties.rst b/doc/src/Library_properties.rst index bf36dcb8b1..84b3fc7b8f 100644 --- a/doc/src/Library_properties.rst +++ b/doc/src/Library_properties.rst @@ -1,18 +1,22 @@ Retrieving or setting LAMMPS system properties ============================================== -The library interface allows to extract different kinds of information -about the active simulation instance and also to modify some of it. -This enables combining MD simulation steps with other processing and -simulation methods computed in the calling code or another code that is -coupled to LAMMPS via the library interface. In some cases the data -returned is direct reference to the original data inside LAMMPS cast -to a void pointer. In that case the data needs to be cast to a suitable -pointer to be able to access it, and you need to know the correct dimensions -and lengths. When accessing per-atom data, please note that this data -is the per-processor **local** data and indexed accordingly. These arrays -can change sizes and order at every neighbor list rebuild and atom sort -event as atoms are migrating between sub-domains. +The library interface allows extraction of different kinds of +information about the active simulation instance and also +modifications to it. This enables combining of a LAMMPS simulation +with other processing and simulation methods computed by the calling +code, or by another code that is coupled to LAMMPS via the library +interface. In some cases the data returned is direct reference to the +original data inside LAMMPS, cast to a void pointer. In that case the +data needs to be cast to a suitable pointer for the calling program to +access it, and you may need to know the correct dimensions and +lengths. This also means you can directly change those value(s) from +the calling program, e.g. to modify atom positions. Of course, this +should be done with care. When accessing per-atom data, please note +that this data is the per-processor **local** data and is indexed +accordingly. Per-atom data can change sizes and ordering at every +neighbor list rebuild or atom sort event as atoms migrate between +sub-domains and processors. .. code-block:: C From 38d954e0383b5dccde00bd0104a082fe1680e74b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 30 Sep 2020 19:54:07 -0400 Subject: [PATCH 052/182] Update the text to mention returning the handle instead of passing it as an argument. --- doc/src/Library_create.rst | 43 +++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/doc/src/Library_create.rst b/doc/src/Library_create.rst index a30b3c6e02..3c3b9da22f 100644 --- a/doc/src/Library_create.rst +++ b/doc/src/Library_create.rst @@ -1,13 +1,12 @@ Creating or deleting a LAMMPS object ==================================== -The :cpp:func:`lammps_open` and :cpp:func:`lammps_open_no_mpi` -functions are used to create and initialize a -:cpp:func:`LAMMPS` instance. The calling program provides -a handle where a reference to this instance can be stored and -which is then used in all subsequent function calls until that -instance is destroyed by calling :cpp:func:`lammps_close`. -Here is a simple example demonstrating its use: +The :cpp:func:`lammps_open` and :cpp:func:`lammps_open_no_mpi` functions +are used to create and initialize a :cpp:func:`LAMMPS` instance. They +return a reference to this instance as a ``void *`` pointer to be used +as the "handle" argument in subsequent function calls until that +instance is destroyed by calling :cpp:func:`lammps_close`. Here is a +simple example demonstrating its use: .. code-block:: C @@ -39,21 +38,21 @@ Here is a simple example demonstrating its use: return 0; } -The LAMMPS library uses the MPI library it was compiled with -and will either run on all processors in the ``MPI_COMM_WORLD`` -communicator or on the set of processors in the communicator passed as -the ``comm`` argument of :cpp:func:`lammps_open`. This means -the calling code can run LAMMPS on all or a subset of processors. For -example, a wrapper code might decide to alternate between LAMMPS and -another code, allowing them both to run on all the processors. Or it -might allocate part of the processors to LAMMPS and the rest to the -other code by creating a custom communicator with ``MPI_Comm_split()`` -and running both codes concurrently before syncing them up periodically. -Or it might instantiate multiple instances of LAMMPS to perform -different calculations and either alternate between them, run them -concurrently on split communicators, or run them one after the other. -The :cpp:func:`lammps_open` function may be called multiple -times for this latter purpose. +The LAMMPS library uses the MPI library it was compiled with and will +either run on all processors in the ``MPI_COMM_WORLD`` communicator or +on the set of processors in the communicator passed as the ``comm`` +argument of :cpp:func:`lammps_open`. This means the calling code can +run LAMMPS on all or a subset of processors. For example, a wrapper +code might decide to alternate between LAMMPS and another code, allowing +them both to run on all the processors. Or it might allocate part of +the processors to LAMMPS and the rest to the other code by creating a +custom communicator with ``MPI_Comm_split()`` and running both codes +concurrently before syncing them up periodically. Or it might +instantiate multiple instances of LAMMPS to perform different +calculations and either alternate between them, run them concurrently on +split communicators, or run them one after the other. The +:cpp:func:`lammps_open` function may be called multiple times for this +latter purpose. The :cpp:func:`lammps_close` function is used to shut down the :cpp:class:`LAMMPS ` class pointed to by the handle From dc13a61b4002bd7852aa019f735f704db430d4a0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 30 Sep 2020 20:00:53 -0400 Subject: [PATCH 053/182] fix spelling --- doc/src/Build_basics.rst | 2 +- doc/src/Library.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/Build_basics.rst b/doc/src/Build_basics.rst index d364382591..87863e3042 100644 --- a/doc/src/Build_basics.rst +++ b/doc/src/Build_basics.rst @@ -162,7 +162,7 @@ with compiler versions in use. If compilation with OpenMP enabled fails because of your compiler requiring strict OpenMP 4.0 semantics, you can change the behavior by adding ``-D LAMMPS_OMP_COMPAT=4`` to the ``LMP_INC`` variable in your makefile, or add it to the command line -while configuring with CMake. LAMMPS will autodetect a suitable setting +while configuring with CMake. LAMMPS will auto-detect a suitable setting for most GNU, Clang, and Intel compilers. ---------- diff --git a/doc/src/Library.rst b/doc/src/Library.rst index 1a12ed134b..8096980a32 100644 --- a/doc/src/Library.rst +++ b/doc/src/Library.rst @@ -81,7 +81,7 @@ and consequently the function :cpp:func:`lammps_open` may not be used. No checks are made on the arguments of the function calls of the C library interface. *All* function arguments must be non-NULL unless - *explicitly* allowed, and msut point to consistent and valid data. Buffers + *explicitly* allowed, and must point to consistent and valid data. Buffers for storing returned data must be allocated to a suitable size. Passing invalid or unsuitable information will likely cause crashes or corrupt data. From 77fb2ee311f2b51c7d7c3500d4a84c80d6ec8e0d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 30 Sep 2020 21:16:48 -0400 Subject: [PATCH 054/182] add list of documented functions at the top of the C-Library doc pages --- doc/src/Library_config.rst | 17 +++++++++++++++ doc/src/Library_create.rst | 12 +++++++++++ doc/src/Library_execute.rst | 9 ++++++++ doc/src/Library_neighbor.rst | 8 ++++++- doc/src/Library_objects.rst | 7 ++++++- doc/src/Library_properties.rst | 18 ++++++++++++++++ doc/src/Library_scatter.rst | 38 ++++++++++++++++++++++++++++++++++ doc/src/Library_utility.rst | 20 +++++++++++++++++- 8 files changed, 126 insertions(+), 3 deletions(-) diff --git a/doc/src/Library_config.rst b/doc/src/Library_config.rst index d33afe3b5b..0c07896ff6 100644 --- a/doc/src/Library_config.rst +++ b/doc/src/Library_config.rst @@ -1,6 +1,23 @@ Retrieving LAMMPS configuration information =========================================== +This section documents the following functions: + +- :cpp:func:`lammps_config_has_mpi_support` +- :cpp:func:`lammps_config_has_gzip_support` +- :cpp:func:`lammps_config_has_png_support` +- :cpp:func:`lammps_config_has_jpeg_support` +- :cpp:func:`lammps_config_has_ffmpeg_support` +- :cpp:func:`lammps_config_has_exceptions` +- :cpp:func:`lammps_config_has_package` +- :cpp:func:`lammps_config_package_count` +- :cpp:func:`lammps_config_package_name` +- :cpp:func:`lammps_has_style` +- :cpp:func:`lammps_style_count` +- :cpp:func:`lammps_style_name` + +-------------------- + The following library functions can be used to query the LAMMPS library about compile time settings and included packages and styles. This enables programs that use the library interface to run LAMMPS diff --git a/doc/src/Library_create.rst b/doc/src/Library_create.rst index 3c3b9da22f..7303c499d1 100644 --- a/doc/src/Library_create.rst +++ b/doc/src/Library_create.rst @@ -1,6 +1,18 @@ Creating or deleting a LAMMPS object ==================================== +This section documents the following functions: + +- :cpp:func:`lammps_open` +- :cpp:func:`lammps_open_no_mpi` +- :cpp:func:`lammps_open_fortran` +- :cpp:func:`lammps_close` +- :cpp:func:`lammps_mpi_init` +- :cpp:func:`lammps_mpi_finalize` +- :cpp:func:`lammps_free` + +-------------------- + The :cpp:func:`lammps_open` and :cpp:func:`lammps_open_no_mpi` functions are used to create and initialize a :cpp:func:`LAMMPS` instance. They return a reference to this instance as a ``void *`` pointer to be used diff --git a/doc/src/Library_execute.rst b/doc/src/Library_execute.rst index 77e7c13f70..b6bcab2ead 100644 --- a/doc/src/Library_execute.rst +++ b/doc/src/Library_execute.rst @@ -1,6 +1,15 @@ Executing LAMMPS commands ========================= +This section documents the following functions: + +- :cpp:func:`lammps_file` +- :cpp:func:`lammps_command` +- :cpp:func:`lammps_commands_list` +- :cpp:func:`lammps_commands_string` + +-------------------- + Once a LAMMPS instance is created, there are multiple ways to "drive" a simulation. In most cases it is easiest to process single or multiple LAMMPS commands like in an input file. This can be done through reading diff --git a/doc/src/Library_neighbor.rst b/doc/src/Library_neighbor.rst index b004e85d0e..3179b669f1 100644 --- a/doc/src/Library_neighbor.rst +++ b/doc/src/Library_neighbor.rst @@ -2,7 +2,13 @@ Accessing LAMMPS Neighbor lists =============================== The following functions allow to access neighbor lists -generated by LAMMPS or query their properties. +generated by LAMMPS or query their properties: + +- :cpp:func:`lammps_find_compute_neighlist` +- :cpp:func:`lammps_find_fix_neighlist` +- :cpp:func:`lammps_find_pair_neighlist` +- :cpp:func:`lammps_neighlist_num_elements` +- :cpp:func:`lammps_neighlist_element_neighbors` ----------------------- diff --git a/doc/src/Library_objects.rst b/doc/src/Library_objects.rst index 301511b848..3b87842169 100644 --- a/doc/src/Library_objects.rst +++ b/doc/src/Library_objects.rst @@ -2,7 +2,12 @@ Retrieving or setting properties of LAMMPS objects ================================================== This section documents accessing or modifying data from objects like -computes, fixes, or variables in LAMMPS. +computes, fixes, or variables in LAMMPS using following functions: + +- :cpp:func:`lammps_extract_compute` +- :cpp:func:`lammps_extract_fix` +- :cpp:func:`lammps_extract_variable` +- :cpp:func:`lammps_set_variable` ----------------------- diff --git a/doc/src/Library_properties.rst b/doc/src/Library_properties.rst index 3e43a80600..e53a3caa0d 100644 --- a/doc/src/Library_properties.rst +++ b/doc/src/Library_properties.rst @@ -1,6 +1,24 @@ Retrieving or setting LAMMPS system properties ============================================== +This section documents the following functions: + +- :cpp:func:`lammps_version` +- :cpp:func:`lammps_memory_usage` +- :cpp:func:`lammps_get_mpi_comm` +- :cpp:func:`lammps_get_natoms` +- :cpp:func:`lammps_get_thermo` +- :cpp:func:`lammps_extract_box` +- :cpp:func:`lammps_reset_box` +- :cpp:func:`lammps_extract_setting` +- :cpp:func:`lammps_extract_global_datatype` +- :cpp:func:`lammps_extract_global` +- :cpp:func:`lammps_extract_atom_datatype` +- :cpp:func:`lammps_extract_atom` +- :cpp:func:`lammps_create_atoms` + +-------------------- + The library interface allows extraction of different kinds of information about the active simulation instance and also modifications to it. This enables combining of a LAMMPS simulation diff --git a/doc/src/Library_scatter.rst b/doc/src/Library_scatter.rst index 5865d22349..e3ca34e999 100644 --- a/doc/src/Library_scatter.rst +++ b/doc/src/Library_scatter.rst @@ -1,6 +1,19 @@ Library functions for scatter/gather operations ================================================ +This section documents the following functions: + +- :cpp:func:`lammps_gather_atoms` +- :cpp:func:`lammps_gather_atoms_concat` +- :cpp:func:`lammps_gather_atoms_subset` +- :cpp:func:`lammps_scatter_atoms` +- :cpp:func:`lammps_scatter_atoms_subset` +- :cpp:func:`lammps_gather` +- :cpp:func:`lammps_gather_concat` +- :cpp:func:`lammps_gather_subset` +- :cpp:func:`lammps_scatter` +- :cpp:func:`lammps_scatter_subset` + .. TODO add description ----------------------- @@ -27,3 +40,28 @@ Library functions for scatter/gather operations .. doxygenfunction:: lammps_scatter_atoms_subset :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_gather + :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_gather_concat + :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_gather_subset + :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_scatter + :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_scatter_subset + :project: progguide diff --git a/doc/src/Library_utility.rst b/doc/src/Library_utility.rst index 8eda4e4988..3d2fae53d3 100644 --- a/doc/src/Library_utility.rst +++ b/doc/src/Library_utility.rst @@ -2,7 +2,15 @@ Library interface utility functions =================================== To simplify some of the tasks, the library interface contains -some utility functions that are not directly calling LAMMPS. +some utility functions that are not directly calling LAMMPS: + +- :cpp:func:`lammps_encode_image_flags` +- :cpp:func:`lammps_decode_image_flags` +- :cpp:func:`lammps_set_fix_external_callback` +- :cpp:func:`lammps_fix_external_set_energy_global` +- :cpp:func:`lammps_fix_external_set_virial_global` +- :cpp:func:`lammps_has_error` +- :cpp:func:`lammps_get_last_error_message` ----------------------- @@ -21,6 +29,16 @@ some utility functions that are not directly calling LAMMPS. ----------------------- +.. doxygenfunction:: lammps_fix_external_set_energy_global + :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_fix_external_set_virial_global + :project: progguide + +----------------------- + .. doxygenfunction:: lammps_has_error :project: progguide From a79a7b270499069117ee5924096739a5344c4b3f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 30 Sep 2020 21:24:55 -0400 Subject: [PATCH 055/182] fix typo reported on lammps-users --- src/library.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/library.cpp b/src/library.cpp index da9ece326e..90a71beb0c 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -4252,7 +4252,7 @@ int lammps_find_compute_neighlist(void* handle, char * id, int request) { } } - if (compute == nullptr) { + if (compute != nullptr) { // find neigh list for (int i = 0; i < lmp->neighbor->nlist; i++) { NeighList * list = lmp->neighbor->lists[i]; From 507c2cb2a893419fb848181c2d8639d53fba63fc Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 28 Sep 2020 21:01:26 -0400 Subject: [PATCH 056/182] Update and reorganize Python docs --- doc/graphviz/lammps-invoke-python.dot | 27 + doc/graphviz/pylammps-invoke-lammps.dot | 30 + doc/graphviz/python-invoke-lammps.dot | 24 + doc/src/Build_basics.rst | 1 + doc/src/Howto_pylammps.rst | 2 +- doc/src/JPG/lammps-classes.png | Bin 250470 -> 272143 bytes doc/src/JPG/lammps-invoke-python.png | Bin 0 -> 37367 bytes doc/src/JPG/pylammps-invoke-lammps.png | Bin 0 -> 36936 bytes doc/src/JPG/python-invoke-lammps.png | Bin 0 -> 28981 bytes doc/src/Python_call.rst | 33 +- doc/src/Python_error.rst | 15 + doc/src/Python_examples.rst | 3 + doc/src/Python_ext.rst | 16 + doc/src/Python_head.rst | 15 +- doc/src/Python_install.rst | 533 ++++++++++++++++-- doc/src/Python_module.rst | 295 +--------- doc/src/Python_mpi.rst | 71 --- doc/src/Python_overview.rst | 56 +- doc/src/Python_pylammps.rst | 5 - doc/src/Python_run.rst | 138 ++++- doc/src/Python_shlib.rst | 78 --- doc/src/Python_test.rst | 152 ----- doc/src/Python_trouble.rst | 44 ++ .../{Python_library.rst => Python_usage.rst} | 421 ++++++++++---- doc/src/python.rst | 2 +- 25 files changed, 1140 insertions(+), 821 deletions(-) create mode 100644 doc/graphviz/lammps-invoke-python.dot create mode 100644 doc/graphviz/pylammps-invoke-lammps.dot create mode 100644 doc/graphviz/python-invoke-lammps.dot create mode 100644 doc/src/JPG/lammps-invoke-python.png create mode 100644 doc/src/JPG/pylammps-invoke-lammps.png create mode 100644 doc/src/JPG/python-invoke-lammps.png create mode 100644 doc/src/Python_error.rst create mode 100644 doc/src/Python_ext.rst delete mode 100644 doc/src/Python_mpi.rst delete mode 100644 doc/src/Python_pylammps.rst delete mode 100644 doc/src/Python_shlib.rst delete mode 100644 doc/src/Python_test.rst create mode 100644 doc/src/Python_trouble.rst rename doc/src/{Python_library.rst => Python_usage.rst} (53%) diff --git a/doc/graphviz/lammps-invoke-python.dot b/doc/graphviz/lammps-invoke-python.dot new file mode 100644 index 0000000000..4fcbc9e482 --- /dev/null +++ b/doc/graphviz/lammps-invoke-python.dot @@ -0,0 +1,27 @@ +// LAMMPS -> Python +digraph api { + rankdir="LR"; + edge [constraint=false]; + input [shape=box label="LAMMPS\nInput Script" height=1.5]; + subgraph cluster0 { + style=filled; + color="#e5e5e5"; + rank=same; + capi [shape=box style=filled height=1 color="#666666" fontcolor=white label="LAMMPS\nC Library API"]; + instance [shape=box style=filled height=1 color="#3465a4" fontcolor=white label="LAMMPS\ninstance\n\n0x01abcdef"]; + capi -> instance [dir=both]; + label="LAMMPS Shared Library"; + } + python [shape=box style=filled color="#4e9a06" fontcolor=white label="Python\nScript" height=1.5]; + subgraph cluster1 { + style=filled; + color="#e5e5e5"; + lammps [shape=box style=filled height=1 color="#729fcf" label="lammps\n\nptr: 0x01abcdef"]; + label="LAMMPS Python Module"; + } + input -> instance [constraint=true]; + instance -> python [dir=both constraint=true]; + python:e -> lammps:w [dir=both constraint=true]; + lammps:s -> capi:e [dir=both label=ctypes constraint=true]; +} + diff --git a/doc/graphviz/pylammps-invoke-lammps.dot b/doc/graphviz/pylammps-invoke-lammps.dot new file mode 100644 index 0000000000..0d9e65a5fe --- /dev/null +++ b/doc/graphviz/pylammps-invoke-lammps.dot @@ -0,0 +1,30 @@ +// PyLammps -> LAMMPS +digraph api { + rankdir="LR"; + edge [constraint=false]; + python [shape=box style=filled color="#4e9a06" fontcolor=white label="Python\nScript" height=1.5]; + subgraph cluster0 { + style=filled; + color="#e5e5e5"; + height=1.5; + rank=same; + pylammps [shape=box style=filled height=1 color="#729fcf" label="(I)PyLammps"]; + lammps [shape=box style=filled height=1 color="#729fcf" label="lammps\n\nptr: 0x01abcdef"]; + pylammps -> lammps [dir=both]; + label="LAMMPS Python Module"; + } + subgraph cluster1 { + style=filled; + color="#e5e5e5"; + height=1.5; + capi [shape=box style=filled height=1 color="#666666" fontcolor=white label="LAMMPS\nC Library API"]; + instance [shape=box style=filled height=1 color="#3465a4" fontcolor=white label="LAMMPS\ninstance\n\n0x01abcdef"]; + capi -> instance [dir=both constraint=true]; + label="LAMMPS Shared Library"; + } + python -> pylammps [dir=both constraint=true]; + lammps -> capi [dir=both label=ctypes constraint=true]; + + pylammps:e -> instance:ne [dir=back, style=dashed label="captured standard output"]; +} + diff --git a/doc/graphviz/python-invoke-lammps.dot b/doc/graphviz/python-invoke-lammps.dot new file mode 100644 index 0000000000..6b9766fc7d --- /dev/null +++ b/doc/graphviz/python-invoke-lammps.dot @@ -0,0 +1,24 @@ +// Python -> LAMMPS +digraph api { + rankdir="LR"; + python [shape=box style=filled color="#4e9a06" fontcolor=white label="Python\nScript" height=1.5]; + subgraph cluster0 { + style=filled; + color="#e5e5e5"; + height=1.5; + lammps [shape=box style=filled height=1 color="#729fcf" label="lammps\n\nptr: 0x01abcdef"]; + label="LAMMPS Python Module"; + } + subgraph cluster1 { + style=filled; + color="#e5e5e5"; + height=1.5; + capi [shape=box style=filled height=1 color="#666666" fontcolor=white label="LAMMPS\nC Library API"]; + instance [shape=box style=filled height=1 color="#3465a4" fontcolor=white label="LAMMPS\ninstance\n\n0x01abcdef"]; + capi -> instance [dir=both]; + label="LAMMPS Shared Library"; + } + python -> lammps [dir=both]; + lammps -> capi [dir=both,label=ctypes]; +} + diff --git a/doc/src/Build_basics.rst b/doc/src/Build_basics.rst index 3b20209e5c..18092a1573 100644 --- a/doc/src/Build_basics.rst +++ b/doc/src/Build_basics.rst @@ -329,6 +329,7 @@ LAMMPS. ---------- .. _exe: +.. _library: Build the LAMMPS executable and library --------------------------------------- diff --git a/doc/src/Howto_pylammps.rst b/doc/src/Howto_pylammps.rst index 96d9acd994..89119e89af 100644 --- a/doc/src/Howto_pylammps.rst +++ b/doc/src/Howto_pylammps.rst @@ -11,7 +11,7 @@ on its own or use an existing lammps Python object. It creates a simpler, more "pythonic" interface to common LAMMPS functionality, in contrast to the ``lammps.py`` wrapper for the C-style LAMMPS library interface which is written using `Python ctypes `_. The ``lammps.py`` wrapper -is discussed on the :doc:`Python library ` doc page. +is discussed on the :doc:`Python_head` doc page. Unlike the flat ``ctypes`` interface, PyLammps exposes a discoverable API. It no longer requires knowledge of the underlying C++ code diff --git a/doc/src/JPG/lammps-classes.png b/doc/src/JPG/lammps-classes.png index e673299e9dc15c240a720820590c7e5620269e0c..6d8a20aecdf0ee1d55f58d9004882cb6bcf03306 100644 GIT binary patch literal 272143 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 z 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%0A-tN=>36cOj8uTXz$%d@xyhFFh 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

SuzeII!e%8sHIb>` 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 literal 250470 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 diff --git a/doc/src/JPG/lammps-invoke-python.png b/doc/src/JPG/lammps-invoke-python.png new file mode 100644 index 0000000000000000000000000000000000000000..bb629ae1da7db83a4acbeb57ea0bc92abd8e417c GIT binary patch literal 37367 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 literal 0 HcmV?d00001 diff --git a/doc/src/JPG/pylammps-invoke-lammps.png b/doc/src/JPG/pylammps-invoke-lammps.png new file mode 100644 index 0000000000000000000000000000000000000000..39296ee272360cb2247c8ac78fe6faa4e299f5d5 GIT binary patch literal 36936 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 VY~7&?{~Y6TkCdc~C7-|fzW@rQ^Wp#i literal 0 HcmV?d00001 diff --git a/doc/src/JPG/python-invoke-lammps.png b/doc/src/JPG/python-invoke-lammps.png new file mode 100644 index 0000000000000000000000000000000000000000..0c456028dbbed2d119f3afc432c6418c08294b44 GIT binary patch literal 28981 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 doc page and the :doc:`variable ` doc page for its python-style variables for more info, including examples of Python code you can write for both pure Python operations and callbacks to LAMMPS. - -The :doc:`fix python/invoke ` command can execute -Python code at selected timesteps during a simulation run. - -The :doc:`pair_style python ` command allows you to define -pairwise potentials as python code which encodes a single pairwise -interaction. This is useful for rapid development and debugging of a -new potential. - -To use any of these commands, you only need to build LAMMPS with the -PYTHON package installed: - -.. code-block:: bash - - make yes-python - make machine - -Note that this will link LAMMPS with the Python library on your -system, which typically requires several auxiliary system libraries to -also be linked. The list of these libraries and the paths to find -them are specified in the lib/python/Makefile.lammps file. You need -to insure that file contains the correct information for your version -of Python and your machine to successfully build LAMMPS. See the -lib/python/README file for more info. - -If you want to write Python code with callbacks to LAMMPS, then you -must also follow the steps summarized in the :doc:`Python run ` doc page. I.e. you must build LAMMPS as a shared -library and insure that Python can find the python/lammps.py file and -the shared library. diff --git a/doc/src/Python_error.rst b/doc/src/Python_error.rst new file mode 100644 index 0000000000..92f68c423f --- /dev/null +++ b/doc/src/Python_error.rst @@ -0,0 +1,15 @@ +LAMMPS error handling in Python +******************************* + +Compiling the shared library with :ref:`C++ exception support ` provides a better error +handling experience. Without exceptions the LAMMPS code will terminate the +current Python process with an error message. C++ exceptions allow capturing +them on the C++ side and rethrowing them on the Python side. This way +LAMMPS errors can be handled through the Python exception handling mechanism. + +.. warning:: + + Capturing a LAMMPS exception in Python can still mean that the + current LAMMPS process is in an illegal state and must be terminated. It is + advised to save your data and terminate the Python instance as quickly as + possible. diff --git a/doc/src/Python_examples.rst b/doc/src/Python_examples.rst index 6b444e40ed..c63691a004 100644 --- a/doc/src/Python_examples.rst +++ b/doc/src/Python_examples.rst @@ -1,6 +1,9 @@ Example Python scripts that use LAMMPS ====================================== +The python/examples directory has Python scripts which show how Python +can run LAMMPS, grab data, change it, and put it back into LAMMPS. + These are the Python scripts included as demos in the python/examples directory of the LAMMPS distribution, to illustrate the kinds of things that are possible when Python wraps LAMMPS. If you create your diff --git a/doc/src/Python_ext.rst b/doc/src/Python_ext.rst new file mode 100644 index 0000000000..30782c9464 --- /dev/null +++ b/doc/src/Python_ext.rst @@ -0,0 +1,16 @@ +Extending the library and Python interface +****************************************** + +As noted above, these Python class methods correspond one-to-one with +the functions in the LAMMPS library interface in src/library.cpp and +library.h. This means you can extend the Python wrapper via the +following steps: + +* Add a new interface function to src/library.cpp and + src/library.h. +* Rebuild LAMMPS as a shared library. +* Add a wrapper method to python/lammps.py for this interface + function. +* You should now be able to invoke the new interface function from a + Python script. + diff --git a/doc/src/Python_head.rst b/doc/src/Python_head.rst index 611e6424fe..148b167ff7 100644 --- a/doc/src/Python_head.rst +++ b/doc/src/Python_head.rst @@ -8,16 +8,15 @@ used together. :maxdepth: 1 Python_overview - Python_run - Python_shlib Python_install - Python_mpi - Python_test - Python_library - Python_module - Python_pylammps - Python_examples + Python_run + Python_usage Python_call + Python_module + Python_examples + Python_error + Python_ext + Python_trouble If you're not familiar with `Python `_, it's a powerful scripting and programming language which can do most diff --git a/doc/src/Python_install.rst b/doc/src/Python_install.rst index 8b2fe9c367..bff395ddba 100644 --- a/doc/src/Python_install.rst +++ b/doc/src/Python_install.rst @@ -1,68 +1,499 @@ -Installing LAMMPS in Python -=========================== +Installation +************ -For Python to invoke LAMMPS, there are 2 files it needs to know about: +The LAMMPS Python module enables calling the :ref:`LAMMPS C library API ` +from Python by dynamically loading functions in the LAMMPS shared library through the +Python ``ctypes`` module. Because of the dynamic loading, it is required that +LAMMPS is compiled in *shared mode*. -* python/lammps.py -* liblammps.so or liblammps.dylib +Two files are necessary for Python to be able to invoke LAMMPS code: -The python source code in lammps.py is the Python wrapper on the -LAMMPS library interface. The liblammps.so or liblammps.dylib file -is the shared LAMMPS library that Python loads dynamically. +* LAMMPS Python Module (``python/lammps.py``) +* LAMMPS Shared Library (e.g., ``liblammps.so``) -You can achieve that Python can find these files in one of two ways: -* set two environment variables pointing to the location in the source tree -* run "make install-python" or run the python/install.py script explicitly +.. _python_virtualenv: https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment +.. _python_venv: https://docs.python.org/3.8/library/venv.html +.. _python_pep405: https://www.python.org/dev/peps/pep-0405 -When calling "make install-python" LAMMPS will try to install the -python module and the shared library into the python site-packages folders; -either the system-wide ones, or the local users ones (in case of insufficient -permissions for the global install). Python will then find the module -and shared library file automatically. The exact location of these folders -depends on your python version and your operating system. When using -the CMake build system, you can set the python executable to use during -the CMake configuration process. Details are given in the build instructions -for the :ref:`PYTHON ` package. When using the conventional make -system, you can override the python version to version x.y when calling -make with PYTHON=pythonx.y. +.. _python_install_guides: -If you set the paths to these files as environment variables, you only -have to do it once. For the csh or tcsh shells, add something like -this to your ~/.cshrc file, one line for each of the two files: +Installing the LAMMPS Python Module and Shared Library +====================================================== -.. code-block:: csh +Making LAMMPS usable within Python and vice versa requires putting the LAMMPS +Python module into a location that the Python interpreter can find and +installing the LAMMPS shared library into a folder that the dynamic loader +searches. For some potentials LAMMPS also needs to know where it can find the +necessary potential files. - setenv PYTHONPATH ${PYTHONPATH}:/home/sjplimp/lammps/python - setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/src +Both CMake and traditional make build options offer ways to automate these tasks. -On MacOSX you may also need to set DYLD_LIBRARY_PATH accordingly. -For Bourne/Korn shells accordingly into the corresponding files using -the "export" shell builtin. +.. tabs:: -If you use "make install-python" or the python/install.py script, you need -to invoke it every time you rebuild LAMMPS (as a shared library) or -make changes to the python/lammps.py file, so that the site-packages -files are updated with the new version. + .. tab:: CMake (local user) -If the default settings of "make install-python" are not what you want, -you can invoke install.py from the python directory manually as + LAMMPS can be configured and compiled as shared library with CMake by enabling the ``BUILD_SHARED_LIBS`` option. + The file name of the shared library depends on the platform (Unix/Linux, MacOS, Windows) and the build configuration + being used. See :ref:`Build the LAMMPS executable and library ` for more details and how the name is + determined. -.. parsed-literal:: + After compilation, the generated binaries, shared library, Python module, + and other files can be installed to a custom location defined by the + ``CMAKE_INSTALL_PREFIX`` setting. By default, this is set to the current + user's ``$HOME/.local`` directory. This leads to an installation to the following locations: - % python install.py -m \ -l -v [-d \] + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | File | Location | Notes | + +========================+===========================================================+=============================================================+ + | LAMMPS Python Module | * ``$HOME/.local/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``$HOME/.local/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS shared library | * ``$HOME/.local/lib/`` (32bit) | | + | | * ``$HOME/.local/lib64/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS potential files | ``$HOME/.local/share/lammps/potentials/`` | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ -* The -m flag points to the lammps.py python module file to be installed, -* the -l flag points to the LAMMPS shared library file to be installed, -* the -v flag points to the version.h file in the LAMMPS source -* and the optional -d flag to a custom (legacy) installation folder + The following is a minimal working example: -If you use a legacy installation folder, you will need to set your -PYTHONPATH and LD_LIBRARY_PATH (and/or DYLD_LIBRARY_PATH) environment -variables accordingly, as described above. + 1. Install LAMMPS Shared Library and Python module using CMake + + .. code-block:: bash + + # create and change into build directory + mkdir build + cd build + + # configure LAMMPS compilation + # compile with shared library, PYTHON package, and C++ exceptions + # TODO: add more options to customize your LAMMPS installation + cmake -C ../cmake/presets/minimal.cmake \ + -D BUILD_SHARED_LIBS=on \ + -D PKG_PYTHON=on \ + -D LAMMPS_EXCEPTIONS=on \ + ../cmake + + # compile LAMMPS (in parallel for faster builds) + cmake --build . --parallel + + # install LAMMPS into myvenv + cmake --install . + + 2. Configure Environment Variables + + To use this installation you have to ensure that the folder containing + the LAMMPS shared library is part of the ``LD_LIBRARY_PATH`` environment variable (or + ``DYLD_LIBRARY_PATH`` on MacOS). This allows the dynamic library loader of your system + to find the LAMMPS shared library when needed. + + .. code-block:: bash + + # Unix/Linux + export LD_LIBRARY_PATH=$HOME/.local/lib:$LD_LIBRARY_PATH + + # MacOS + export DYLD_LIBRARY_PATH=$HOME/.local/lib:$DYLD_LIBRARY_PATH + + + LAMMPS will also need to know the location of the folder + containing its potential files. This can be set with the ``LAMMPS_POTENTIALS`` + environment variable: + + .. code-block:: + + export LAMMPS_POTENTIALS=$HOME/.local/share/lammps/potentials + + To set these environment variables for each new shell, add the above + ``export`` commands at the end of the ``$HOME/.bashrc`` file. + + 3. Verify if LAMMPS can be successfully started from Python + + .. code-block:: bash + + $ python + Python 3.8.5 (default, Sep 5 2020, 10:50:12) + [GCC 10.2.0] on linux + Type "help", "copyright", "credits" or "license" for more information. + >>> import lammps + >>> lmp = lammps.lammps() + LAMMPS (18 Sep 2020) + using 1 OpenMP thread(s) per MPI task + >>> + + .. note:: + + If you recompile LAMMPS, you will have to also rerun the install step to + ensure the latest Python module and shared library are installed. + + .. tab:: CMake (system-wide) + + A system-wide installation allows all users to run Python with LAMMPS + included. Note that during the installation step you will need to either be + root or use ``sudo`` to elevate your write privileges. The compilation steps are identical + to the local user installation, with the only difference that + ``CMAKE_INSTALL_PREFIX`` is set to system folder such as ``/usr``. This leads to + the following installation locations: + + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ + | File | Location | Notes | + +========================+===================================================+=============================================================+ + | LAMMPS Python Module | * ``/usr/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``/usr/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS shared library | * ``/usr/lib/`` (32bit) | | + | | * ``/usr/lib64/`` (64bit) | | + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS potential files | ``/usr/share/lammps/potentials/`` | | + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ + + The following is a minimal working example: + + 1. Install LAMMPS shared library and Python module into system folder + + .. code-block:: bash + + # configure LAMMPS compilation + # compile with shared library, PYTHON package, and C++ exceptions + # TODO: add more options to customize your LAMMPS installation + cmake -C ../cmake/presets/minimal.cmake \ + -D BUILD_SHARED_LIBS=on \ + -D PKG_PYTHON=on \ + -D LAMMPS_EXCEPTIONS=on \ + -D CMAKE_INSTALL_PREFIX=/usr \ + ../cmake + + # compile LAMMPS (in parallel for faster builds) + cmake --build . --parallel + + # install LAMMPS into /usr (requires write access) + sudo cmake --install . + + Unlike the local user installation, no additional environment + variables need to be set. The system locations such as ``/usr/lib`` and + ``/usr/lib64`` are already part of the search path of the dynamic library + loader. Therefore ``LD_LIBRARY_PATH`` or ``DYLD_LIBRARY_PATH`` on MacOS do not + have be set. + + All other environment variables will be automatically set when + launching a new shell. This is due to files installed in system folders + ``/etc/profile.d/``, such as ``/etc/profile.d/lammps.sh``, that are loaded when a + login shell is started. + + 2. Open a new shell + + Close the current shell and open a new one or use ``source /etc/profile`` to + update your environment + + .. note:: + + On some systems you might also need to log out your current user and log back in. + + 3. Verify if LAMMPS can be successfully started from Python + + Open a new terminal and test if LAMMPS can be started from within Python: + + .. code-block:: bash + + $ python + Python 3.8.5 (default, Sep 5 2020, 10:50:12) + [GCC 10.2.0] on linux + Type "help", "copyright", "credits" or "license" for more information. + >>> import lammps + >>> lmp = lammps.lammps() + LAMMPS (18 Sep 2020) + using 1 OpenMP thread(s) per MPI task + >>> + + .. note:: + + If you recompile LAMMPS, you will have to also rerun the install step to + ensure the latest Python module and shared library are installed. + + .. tab:: CMake (virtual environment) + + LAMMPS and its Python module can be installed together into a + Python virtual environment. + + A virtual environment is a minimalistic Python installation inside of a + folder. It allows isolating and customizing a Python environment that is + independent from a user or system installation. This gives you the flexibility + to install (newer) versions of Python packages that would potentially conflict + with already installed system packages. It also does not requite any superuser + privileges. See `PEP 405: Python Virtual Environments `_ + for more information. + + To install into the virtual environment, it is first activated and the + ``CMAKE_INSTALL_PREFIX`` is set to value of the ``$VIRTUAL_ENV`` environment + variable. This leads to the following installation locations: + + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | File | Location | Notes | + +========================+===========================================================+=============================================================+ + | LAMMPS Python Module | * ``$VIRTUAL_ENV/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``$VIRTUAL_ENV/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS shared library | * ``$VIRTUAL_ENV/lib/`` (32bit) | | + | | * ``$VIRTUAL_ENV/lib64/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS potential files | ``$VIRTUAL_ENV/share/lammps/potentials/`` | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + + The following is a minimal working example using CMake: + + 1. Create a virtual environment + + Use the `venv `_ module to create a new environment + inside of the folder ``$HOME/myenv``. For Python versions prior 3.3, + you can use `virtualenv `_ instead. + + .. code-block:: bash + + # create virtual environment in folder $HOME/myenv + python3 -m venv $HOME/myenv + + 2. Modify the ``$HOME/myenv/bin/activate`` script + + The ``activate`` script initializes the environment for use. For convienience, + add two additional lines at the end of this script: + + * To allow the dynamic library loader to find the LAMMPS shared library, add + the folder where it will be installed to ``LD_LIBRARY_PATH`` environment + variable (``DYLD_LIBRARY_PATH`` on MacOS). When installing LAMMPS into a + virtual environment this location will be ``$VIRTUAL_ENV/lib``. + Run the following command to add the necessary line to the ``activate`` script: + + .. code-block:: bash + + # Unix/Linux + echo 'export LD_LIBRARY_PATH=$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH' >> $HOME/myenv/bin/activate + + # MacOS + echo 'export DYLD_LIBRARY_PATH=$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH' >> $HOME/myenv/bin/activate + + * Any LAMMPS installation will need to know the location of the folder containing its potential files. + This can be set with the ``LAMMPS_POTENTIALS`` environment variable. When installing LAMMPS into a + virtual environment this location will be ``$VIRTUAL_ENV/share/lammps/potentials``. + Run the following command to add the change in the ``activate`` script: + + .. code-block:: bash + + echo 'export LAMMPS_POTENTIALS=$VIRTUAL_ENV/share/lammps/potentials' >> $HOME/myenv/bin/activate + + 3. Compile LAMMPS and install it into virtual environment + + .. code-block:: bash + + # create and change into build directory + mkdir build + cd build + + # activate environment, this sets VIRTUAL_ENV and other environment variables + source $HOME/myenv/bin/activate + + # configure LAMMPS compilation + # compile with shared library, PYTHON package, and C++ exceptions + # and install into virtual environment folder (VIRTUAL_ENV) + # TODO: add more options to customize your LAMMPS installation + (myenv)$ cmake -C ../cmake/presets/minimal.cmake \ + -D BUILD_SHARED_LIBS=on \ + -D PKG_PYTHON=on \ + -D LAMMPS_EXCEPTIONS=on \ + -D CMAKE_INSTALL_PREFIX=$VIRTUAL_ENV \ + ../cmake + + # compile LAMMPS (in parallel for faster builds) + (myenv)$ cmake --build . --parallel + + # install LAMMPS into myenv + (myenv)$ cmake --install . + + 4. Verify if LAMMPS can be successfully started from Python + + .. code-block:: bash + + (myenv)$ python + Python 3.8.5 (default, Sep 5 2020, 10:50:12) + [GCC 10.2.0] on linux + Type "help", "copyright", "credits" or "license" for more information. + >>> import lammps + >>> lmp = lammps.lammps() + LAMMPS (18 Sep 2020) + using 1 OpenMP thread(s) per MPI task + >>> + + .. note:: + + If you recompile LAMMPS, you will have to also rerun the install step to + ensure the virtual environment contains the latest Python module and shared + library. + + + .. tab:: Traditional make + + Instructions on how to build LAMMPS as a shared library are given on + the :doc:`Build_basics ` doc page. A shared library is + one that is dynamically loadable, which is what Python requires to + wrap LAMMPS. On Linux this is a library file that ends in ``.so``, not + ``.a``. + + From the src directory, type + + .. code-block:: bash + + make foo mode=shared + + where ``foo`` is the machine target name, such as ``mpi`` or ``serial``. + This should create the file ``liblammps_foo.so`` in the ``src`` directory, as + well as a soft link ``liblammps.so``, which is what the Python wrapper will + load by default. Note that if you are building multiple machine + versions of the shared library, the soft link is always set to the + most recently built version. + + .. note:: + + If you are building LAMMPS with an MPI or FFT library or other + auxiliary libraries (used by various packages), then all of these + extra libraries must also be shared libraries. If the LAMMPS + shared-library build fails with an error complaining about this, see + the :doc:`Build_basics ` doc page. + + You can achieve that Python can find these files in one of two ways: + + * set two environment variables pointing to the location in the source tree + * run ``make install-python`` or run the ``python/install.py`` script explicitly + + When calling ``make install-python`` LAMMPS will try to install the + python module and the shared library into the python site-packages folders; + either the system-wide ones, or the local users ones (in case of insufficient + permissions for the global install). Python will then find the module + and shared library file automatically. The exact location of these folders + depends on your python version and your operating system. + + You can override the python version to version x.y when calling + ``make`` with ``PYTHON=pythonX.Y``. + + If you set the paths to these files as environment variables, you only + have to do it once. For the csh or tcsh shells, add something like + this to your ~/.cshrc file, one line for each of the two files: + + .. code-block:: csh + + setenv PYTHONPATH ${PYTHONPATH}:/home/sjplimp/lammps/python + setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/src + + On MacOS you may also need to set ``DYLD_LIBRARY_PATH`` accordingly. + For Bourne/Korn shells accordingly into the corresponding files using + the ``export`` shell builtin. + + If you use ``make install-python`` or the ``python/install.py`` script, you need + to invoke it every time you rebuild LAMMPS (as a shared library) or + make changes to the ``python/lammps.py`` file, so that the site-packages + files are updated with the new version. + + If the default settings of ``make install-python`` are not what you want, + you can invoke ``install.py`` from the python directory manually as + + .. code-block:: bash + + $ python install.py -m -l -v [-d ] + + * The ``-m`` flag points to the ``lammps.py`` python module file to be installed, + * the ``-l`` flag points to the LAMMPS shared library file to be installed, + * the ``-v`` flag points to the ``version.h`` file in the LAMMPS source + * and the optional ``-d`` flag to a custom (legacy) installation folder + + If you use a legacy installation folder, you will need to set your + ``PYTHONPATH`` and ``LD_LIBRARY_PATH`` (and/or ``DYLD_LIBRARY_PATH``) environment + variables accordingly, as described above. + + Note that if you want Python to be able to load different versions of + the LAMMPS shared library (see :ref:`python_create_lammps`), you will + need to manually copy files like ``liblammps_mpi.so`` into the appropriate + system directory. This is not needed if you set the ``LD_LIBRARY_PATH`` + environment variable as described above. + + +Extending Python to run in parallel +=================================== + +If you wish to run LAMMPS in parallel from Python, you need to extend +your Python with an interface to MPI. This also allows you to +make MPI calls directly from Python in your script, if you desire. + +We have tested this with mpi4py and pypar: + +* `MPI for Python `_ +* `pypar `_ + +We recommend the use of mpi4py as it is the more complete MPI interface, +and as of version 2.0.0 mpi4py allows passing a custom MPI communicator +to the LAMMPS constructor, which means one can easily run one or more +LAMMPS instances on subsets of the total MPI ranks. + +To install mpi4py (version 3.0.3 as of Sep 2020), + +.. tabs:: + + .. tab:: local user + + .. code-block:: bash + + pip install --user mpi4py + + .. tab:: system-wide + + .. code-block:: bash + + sudo pip install mpi4py + + .. tab:: virtual environment + + .. code-block:: bash + + $ source $HOME/myenv/activate + (myenv)$ pip install mpi4py + +.. _mpi4py_install: https://mpi4py.readthedocs.io/en/stable/install.html + +For more detailed installation instructions, please see the `mpi4py installation `_ page. + +If you have successfully installed mpi4py, you should be able to run +Python and type + +.. code-block:: python + + from mpi4py import MPI + +without error. You should also be able to run Python in parallel +on a simple test script + +.. code-block:: bash + + $ mpirun -np 4 python test.py + +where ``test.py`` contains the lines + +.. code-block:: python + + from mpi4py import MPI + comm = MPI.COMM_WORLD + print "Proc %d out of %d procs" % (comm.Get_rank(),comm.Get_size()) + +and see one line of output for each processor you run on. + +.. note:: + + To use mpi4py and LAMMPS in parallel from Python, you must + insure both are using the same version of MPI. If you only have one + MPI installed on your system, this is not an issue, but it can be if + you have multiple MPIs. Your LAMMPS build is explicit about which MPI + it is using, since you specify the details in your low-level + src/MAKE/Makefile.foo file. mpi4py uses the "mpicc" command to find + information about the MPI it uses to build against. And it tries to + load "libmpi.so" from the ``LD_LIBRARY_PATH``. This may or may not find + the MPI library that LAMMPS is using. If you have problems running + both mpi4py and LAMMPS together, this is an issue you may need to + address, e.g. by moving other MPI installations so that mpi4py finds + the right one. -Note that if you want Python to be able to load different versions of -the LAMMPS shared library (see :doc:`this section `), you will -need to manually copy files like liblammps_g++.so into the appropriate -system directory. This is not needed if you set the LD_LIBRARY_PATH -environment variable as described above. diff --git a/doc/src/Python_module.rst b/doc/src/Python_module.rst index e9a48dd797..9fb634f05a 100644 --- a/doc/src/Python_module.rst +++ b/doc/src/Python_module.rst @@ -28,278 +28,8 @@ There are multiple Python interface classes in the :py:mod:`lammps` module: ---------- -Setting up a Python virtual environment -*************************************** - -LAMMPS and its Python module can be installed together into a Python virtual -environment. This lets you isolate your customized Python environment from -your user or system installation. The following is a minimal working example: - -.. code-block:: bash - - # create and change into build directory - mkdir build - cd build - - # create virtual environment - virtualenv myenv - - # Add venv lib folder to LD_LIBRARY_PATH when activating it - echo 'export LD_LIBRARY_PATH=$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH' >> myenv/bin/activate - - # Add LAMMPS_POTENTIALS path when activating venv - echo 'export LAMMPS_POTENTIALS=$VIRTUAL_ENV/share/lammps/potentials' >> myenv/bin/activate - - # activate environment - source myenv/bin/activate - - # configure LAMMPS compilation - # compiles as shared library with PYTHON package and C++ exceptions - # and installs into myvenv - (myenv)$ cmake -C ../cmake/presets/minimal.cmake \ - -D BUILD_SHARED_LIBS=on \ - -D PKG_PYTHON=on \ - -D LAMMPS_EXCEPTIONS=on \ - -D CMAKE_INSTALL_PREFIX=$VIRTUAL_ENV \ - ../cmake - - # compile LAMMPS - (myenv)$ cmake --build . --parallel - - # install LAMMPS into myvenv - (myenv)$ cmake --install . - -Creating or deleting a LAMMPS object -************************************ - -With the Python interface the creation of a :cpp:class:`LAMMPS -` instance is included in the constructors for the -:py:meth:`lammps `, :py:meth:`PyLammps `, -and :py:meth:`PyLammps ` classes. -Internally it will call either :cpp:func:`lammps_open` or :cpp:func:`lammps_open_no_mpi` from the C -library API to create the class instance. - -All arguments are optional. The *name* argument allows loading a -LAMMPS shared library that is named ``liblammps_machine.so`` instead of -the default name of ``liblammps.so``. In most cases the latter will be -installed or used. The *ptr* argument is for use of the -:py:mod:`lammps` module from inside a LAMMPS instance, e.g. with the -:doc:`python ` command, where a pointer to the already existing -:cpp:class:`LAMMPS ` class instance can be passed -to the Python class and used instead of creating a new instance. The -*comm* argument may be used in combination with the `mpi4py `_ -module to pass an MPI communicator to LAMMPS and thus it is possible -to run the Python module like the library interface on a subset of the -MPI ranks after splitting the communicator. - - -Here are simple examples using all three Python interfaces: - -.. tabs:: - - .. tab:: lammps API - - .. code-block:: python - - from lammps import lammps - - # NOTE: argv[0] is set by the lammps class constructor - args = ["-log", "none"] - # create LAMMPS instance - lmp = lammps(cmdargs=args) - # get and print numerical version code - print("LAMMPS Version: ", lmp.version()) - # explicitly close and delete LAMMPS instance (optional) - lmp.close() - - .. tab:: PyLammps API - - The :py:class:`PyLammps` class is a wrapper around the - :py:class:`lammps` class and all of its lower level functions. - By default, it will create a new instance of :py:class:`lammps` passing - along all arguments to the constructor of :py:class:`lammps`. - - .. code-block:: python - - from lammps import PyLammps - - # NOTE: argv[0] is set by the lammps class constructor - args = ["-log", "none"] - # create LAMMPS instance - L = PyLammps(cmdargs=args) - # get and print numerical version code - print("LAMMPS Version: ", L.version()) - # explicitly close and delete LAMMPS instance (optional) - L.close() - - :py:class:`PyLammps` objects can also be created on top of an existing :py:class:`lammps` object: - - .. code-block:: Python - - from lammps import lammps, PyLammps - ... - # create LAMMPS instance - lmp = lammps(cmdargs=args) - # create PyLammps instance using previously created LAMMPS instance - L = PyLammps(ptr=lmp) - - This is useful if you have to create the :py:class:`lammps ` - instance is a specific way, but want to take advantage of the - :py:class:`PyLammps ` interface. - - .. tab:: IPyLammps API - - The :py:class:`IPyLammps` class is an extension of the - :py:class:`PyLammps` class. It has the same construction behavior. By - default, it will create a new instance of :py:class:`lammps` passing - along all arguments to the constructor of :py:class:`lammps`. - - .. code-block:: python - - from lammps import IPyLammps - - # NOTE: argv[0] is set by the lammps class constructor - args = ["-log", "none"] - # create LAMMPS instance - L = IPyLammps(cmdargs=args) - # get and print numerical version code - print("LAMMPS Version: ", L.version()) - # explicitly close and delete LAMMPS instance (optional) - L.close() - - You can also initialize IPyLammps on top of an existing :py:class:`lammps` or :py:class:`PyLammps` object: - - .. code-block:: Python - - from lammps import lammps, IPyLammps - ... - # create LAMMPS instance - lmp = lammps(cmdargs=args) - # create PyLammps instance using previously created LAMMPS instance - L = PyLammps(ptr=lmp) - - This is useful if you have to create the :py:class:`lammps ` - instance is a specific way, but want to take advantage of the - :py:class:`IPyLammps ` interface. - -In all of the above cases, same as with the :ref:`C library API `, this will use the -``MPI_COMM_WORLD`` communicator for the MPI library that LAMMPS was -compiled with. The :py:func:`lmp.close() ` call is -optional since the LAMMPS class instance will also be deleted -automatically during the :py:class:`lammps ` class -destructor. - -Executing LAMMPS commands -************************* - -Once an instance of the :py:class:`lammps`, :py:class:`PyLammps`, or -:py:class:`IPyLammps` class is created, there are multiple ways to "feed" it -commands. In a way that is not very different from running a LAMMPS input -script, except that Python has many more facilities for structured -programming than the LAMMPS input script syntax. Furthermore it is possible -to "compute" what the next LAMMPS command should be. - -.. tabs:: - - .. tab:: lammps API - - Same as in the equivalent - :doc:`C library functions `, commands can be read from a file, a - single string, a list of strings and a block of commands in a single - multi-line string. They are processed under the same boundary conditions - as the C library counterparts. The example below demonstrates the use - of :py:func:`lammps.file`, :py:func:`lammps.command`, - :py:func:`lammps.commands_list`, and :py:func:`lammps.commands_string`: - - .. code-block:: python - - from lammps import lammps - lmp = lammps() - # read commands from file 'in.melt' - lmp.file('in.melt') - # issue a single command - lmp.command('variable zpos index 1.0') - # create 10 groups with 10 atoms each - cmds = ["group g{} id {}:{}".format(i,10*i+1,10*(i+1)) for i in range(10)] - lmp.commands_list(cmds) - # run commands from a multi-line string - block = """ - clear - region box block 0 2 0 2 0 2 - create_box 1 box - create_atoms 1 single 1.0 1.0 ${zpos} - """ - lmp.commands_string(block) - - .. tab:: PyLammps/IPyLammps API - - Unlike the lammps API, the PyLammps/IPyLammps APIs allow running LAMMPS - commands by calling equivalent member functions. - - For instance, the following LAMMPS command - - .. code-block:: LAMMPS - - region box block 0 10 0 5 -0.5 0.5 - - can be executed using the following Python code if *L* is a :py:class:`lammps` instance: - - .. code-block:: Python - - L.command("region box block 0 10 0 5 -0.5 0.5") - - With the PyLammps interface, any LAMMPS command can be split up into arbitrary parts. - These parts are then passed to a member function with the name of the command. - For the ``region`` command that means the :code:`region` method can be called. - The arguments of the command can be passed as one string, or - individually. - - .. code-block:: Python - - L.region("box block", 0, 10, 0, 5, -0.5, 0.5) - - In this example all parameters except the first are Python floating-point literals. The - PyLammps interface takes the entire parameter list and transparently - merges it to a single command string. - - The benefit of this approach is avoiding redundant command calls and easier - parameterization. In the original interface parameterization this needed to be done - manually by creating formatted strings. - - .. code-block:: Python - - L.command("region box block %f %f %f %f %f %f" % (xlo, xhi, ylo, yhi, zlo, zhi)) - - In contrast, methods of PyLammps accept parameters directly and will convert - them automatically to a final command string. - - .. code-block:: Python - - L.region("box block", xlo, xhi, ylo, yhi, zlo, zhi) - - Using these facilities, the example shown for the lammps API can be rewritten as follows: - - .. code-block:: python - - from lammps import PyLammps - L = PyLammps() - # read commands from file 'in.melt' - L.file('in.melt') - # issue a single command - L.variable('zpos', 'index', 1.0) - # create 10 groups with 10 atoms each - for i in range(10): - L.group(f"g{i}", "id", f"{10*i+1}:{10*(i+1)}") - - L.clear() - L.region("box block", 0, 2, 0, 2, 0, 2) - L.create_box(1, "box") - L.create_atoms(1, "single", 1.0, 1.0, "${zpos}") - ----------- - The ``lammps`` class API -************************ +======================== The :py:class:`lammps ` class is the core of the LAMMPS Python interfaces. It is a wrapper around the :ref:`LAMMPS C library @@ -317,7 +47,7 @@ functions. Below is a detailed documentation of the API. ---------- The ``PyLammps`` class API -************************** +========================== The :py:class:`PyLammps ` class is a wrapper that creates a simpler, more "Pythonic" interface to common LAMMPS functionality. LAMMPS @@ -340,7 +70,7 @@ scripts shorter and more concise. See the :doc:`PyLammps Tutorial ---------- The ``IPyLammps`` class API -*************************** +=========================== The :py:class:`IPyLammps ` class is an extension of :py:class:`PyLammps `, adding additional functions to @@ -353,7 +83,7 @@ See the :doc:`PyLammps Tutorial ` for examples. ---------- Additional components of the ``lammps`` module -********************************************** +============================================== The :py:mod:`lammps` module additionally contains several constants and the :py:class:`NeighList ` class: @@ -415,20 +145,3 @@ Classes representing internal objects .. autoclass:: lammps.NeighList :members: :no-undoc-members: - - -LAMMPS error handling in Python -******************************* - -Compiling the shared library with :ref:`C++ exception support ` provides a better error -handling experience. Without exceptions the LAMMPS code will terminate the -current Python process with an error message. C++ exceptions allow capturing -them on the C++ side and rethrowing them on the Python side. This way -LAMMPS errors can be handled through the Python exception handling mechanism. - -.. warning:: - - Capturing a LAMMPS exception in Python can still mean that the - current LAMMPS process is in an illegal state and must be terminated. It is - advised to save your data and terminate the Python instance as quickly as - possible. diff --git a/doc/src/Python_mpi.rst b/doc/src/Python_mpi.rst deleted file mode 100644 index 02a62c89d0..0000000000 --- a/doc/src/Python_mpi.rst +++ /dev/null @@ -1,71 +0,0 @@ -Extending Python to run in parallel -=================================== - -If you wish to run LAMMPS in parallel from Python, you need to extend -your Python with an interface to MPI. This also allows you to -make MPI calls directly from Python in your script, if you desire. - -We have tested this with mpi4py and pypar: - -* `MPI for Python `_ -* `pypar `_ - -We recommend the use of mpi4py as it is the more complete MPI interface, -and as of version 2.0.0 mpi4py allows passing a custom MPI communicator -to the LAMMPS constructor, which means one can easily run one or more -LAMMPS instances on subsets of the total MPI ranks. - -To install mpi4py (version mpi4py-3.0.3 as of Nov 2019), unpack it -and from its main directory, type - -.. code-block:: bash - - python setup.py build - sudo python setup.py install - -Again, the "sudo" is only needed if required to copy mpi4py files into -your Python distribution's site-packages directory. To install with -user privilege into the user local directory type - -.. code-block:: bash - - python setup.py install --user - -If you have successfully installed mpi4py, you should be able to run -Python and type - -.. code-block:: python - - from mpi4py import MPI - -without error. You should also be able to run python in parallel -on a simple test script - -.. code-block:: bash - - % mpirun -np 4 python test.py - -where test.py contains the lines - -.. code-block:: python - - from mpi4py import MPI - comm = MPI.COMM_WORLD - print "Proc %d out of %d procs" % (comm.Get_rank(),comm.Get_size()) - -and see one line of output for each processor you run on. - -.. note:: - - To use mpi4py and LAMMPS in parallel from Python, you must - insure both are using the same version of MPI. If you only have one - MPI installed on your system, this is not an issue, but it can be if - you have multiple MPIs. Your LAMMPS build is explicit about which MPI - it is using, since you specify the details in your low-level - src/MAKE/Makefile.foo file. Mpi4py uses the "mpicc" command to find - information about the MPI it uses to build against. And it tries to - load "libmpi.so" from the LD_LIBRARY_PATH. This may or may not find - the MPI library that LAMMPS is using. If you have problems running - both mpi4py and LAMMPS together, this is an issue you may need to - address, e.g. by moving other MPI installations so that mpi4py finds - the right one. diff --git a/doc/src/Python_overview.rst b/doc/src/Python_overview.rst index a41de5d444..b39d841979 100644 --- a/doc/src/Python_overview.rst +++ b/doc/src/Python_overview.rst @@ -1,5 +1,37 @@ -Overview of Python and LAMMPS -============================= +Overview +======== + +The LAMMPS distribution includes a python directory with all you need +to run LAMMPS from Python. The python/lammps.py file wraps the LAMMPS +library interface, with one wrapper function per LAMMPS library +function. This file makes it is possible to do the following either +from a Python script, or interactively from a Python prompt: create +one or more instances of LAMMPS, invoke LAMMPS commands or give it an +input script, run LAMMPS incrementally, extract LAMMPS results, an +modify internal LAMMPS variables. From a Python script you can do +this in serial or parallel. Running Python interactively in parallel +does not generally work, unless you have a version of Python that +extends Python to enable multiple instances of Python to read what you +type. + +To do all of this, you must first build LAMMPS as a shared library, +then insure that your Python can find the python/lammps.py file and +the shared library. + +The Python wrapper for LAMMPS uses the "ctypes" package in Python, +which auto-generates the interface code needed between Python and a +set of C-style library functions. Ctypes is part of standard Python +for versions 2.5 and later. You can check which version of Python you +have by simply typing "python" at a shell prompt. + +.. warning:: Python 2 support is deprecated + + While the LAMMPS Python module was originally developed to support both + Python 2 and 3, Python 2 is no longer maintained as of `January 1, 2020 `_. + Therefore, we will no longer backport any new features to Python 2 and + highly recommend using Python versions 3.6+. + +--------- LAMMPS can work together with Python in three ways. First, Python can wrap LAMMPS through the its :doc:`library interface `, so @@ -7,14 +39,25 @@ that a Python script can create one or more instances of LAMMPS and launch one or more simulations. In Python lingo, this is called "extending" Python with a LAMMPS module. -Second, a lower-level Python interface can be used indirectly through -the provided PyLammps and IPyLammps wrapper classes, written in Python. +.. figure:: JPG/python-invoke-lammps.png + :figclass: align-center + + Launching LAMMPS via Python + + +Second, the lower-level Python interface can be used indirectly through +the provided :code`PyLammps` and :code:`IPyLammps` wrapper classes, written in Python. These wrappers try to simplify the usage of LAMMPS in Python by providing an object-based interface to common LAMMPS functionality. They also reduces the amount of code necessary to parameterize LAMMPS scripts through Python and make variables and computes directly accessible. +.. figure:: JPG/pylammps-invoke-lammps.png + :figclass: align-center + + Using the PyLammps / IPyLammps wrappers + Third, LAMMPS can use the Python interpreter, so that a LAMMPS input script or styles can invoke Python code directly, and pass information back-and-forth between the input script and Python @@ -23,3 +66,8 @@ to query or change its attributes through the LAMMPS Python module mentioned above. In Python lingo, this is "embedding" Python in LAMMPS. When used in this mode, Python can perform script operations that the simple LAMMPS input script syntax can not. + +.. figure:: JPG/lammps-invoke-python.png + :figclass: align-center + + Calling Python code from LAMMPS diff --git a/doc/src/Python_pylammps.rst b/doc/src/Python_pylammps.rst deleted file mode 100644 index ad34706f50..0000000000 --- a/doc/src/Python_pylammps.rst +++ /dev/null @@ -1,5 +0,0 @@ -PyLammps interface -================== - -PyLammps is a Python wrapper class which can be created on its own or -use an existing lammps Python object. It has its own :doc:`Howto pylammps ` doc page. diff --git a/doc/src/Python_run.rst b/doc/src/Python_run.rst index 9aab6da9c6..ba8cf77c12 100644 --- a/doc/src/Python_run.rst +++ b/doc/src/Python_run.rst @@ -1,32 +1,118 @@ Run LAMMPS from Python ====================== -The LAMMPS distribution includes a python directory with all you need -to run LAMMPS from Python. The python/lammps.py file wraps the LAMMPS -library interface, with one wrapper function per LAMMPS library -function. This file makes it is possible to do the following either -from a Python script, or interactively from a Python prompt: create -one or more instances of LAMMPS, invoke LAMMPS commands or give it an -input script, run LAMMPS incrementally, extract LAMMPS results, an -modify internal LAMMPS variables. From a Python script you can do -this in serial or parallel. Running Python interactively in parallel -does not generally work, unless you have a version of Python that -extends Python to enable multiple instances of Python to read what you -type. +Running LAMMPS and Python in serial: +------------------------------------- -To do all of this, you must first build LAMMPS as a shared library, -then insure that your Python can find the python/lammps.py file and -the shared library. +To run a LAMMPS in serial, type these lines into Python +interactively from the bench directory: -Two advantages of using Python to run LAMMPS are how concise the -language is, and that it can be run interactively, enabling rapid -development and debugging. If you use it to mostly invoke costly -operations within LAMMPS, such as running a simulation for a -reasonable number of timesteps, then the overhead cost of invoking -LAMMPS through Python will be negligible. +.. parsed-literal:: -The Python wrapper for LAMMPS uses the "ctypes" package in Python, -which auto-generates the interface code needed between Python and a -set of C-style library functions. Ctypes is part of standard Python -for versions 2.5 and later. You can check which version of Python you -have by simply typing "python" at a shell prompt. + >>> from lammps import lammps + >>> lmp = lammps() + >>> lmp.file("in.lj") + +Or put the same lines in the file ``test.py`` and run it as + +.. code-block:: bash + + % python test.py + +Either way, you should see the results of running the ``in.lj`` benchmark +on a single processor appear on the screen, the same as if you had +typed something like: + +.. parsed-literal:: + + lmp_serial -in in.lj + +Test LAMMPS and Python in parallel: +--------------------------------------- + +To run LAMMPS in parallel, assuming you have installed the +`PyPar `_ package as discussed +above, create a ``test.py`` file containing these lines: + +.. code-block:: python + + import pypar + from lammps import lammps + lmp = lammps() + lmp.file("in.lj") + print "Proc %d out of %d procs has" % (pypar.rank(),pypar.size()),lmp + pypar.finalize() + +To run LAMMPS in parallel, assuming you have installed the +`mpi4py `_ package as discussed +above, create a ``test.py`` file containing these lines: + +.. code-block:: python + + from mpi4py import MPI + from lammps import lammps + lmp = lammps() + lmp.file("in.lj") + me = MPI.COMM_WORLD.Get_rank() + nprocs = MPI.COMM_WORLD.Get_size() + print "Proc %d out of %d procs has" % (me,nprocs),lmp + MPI.Finalize() + +You can run either script in parallel as: + +.. code-block:: bash + + $ mpirun -np 4 python test.py + +and you should see the same output as if you had typed + +.. code-block:: bash + + $ mpirun -np 4 lmp_mpi -in in.lj + +Note that if you leave out the 3 lines from ``test.py`` that specify PyPar +commands you will instantiate and run LAMMPS independently on each of +the :math:`P` processors specified in the mpirun command. In this case you +should get 4 sets of output, each showing that a LAMMPS run was made +on a single processor, instead of one set of output showing that +LAMMPS ran on 4 processors. If the 1-processor outputs occur, it +means that PyPar is not working correctly. + +Also note that once you import the PyPar module, PyPar initializes MPI +for you, and you can use MPI calls directly in your Python script, as +described in the PyPar documentation. The last line of your Python +script should be ``pypar.finalize()``, to insure MPI is shut down +correctly. + +Running Python scripts: +--------------------------- + +Note that any Python script (not just for LAMMPS) can be invoked in +one of several ways: + +.. code-block:: bash + + $ python script.py + $ python -i script.py + $ ./script.py + +The last command requires that the first line of the script be +something like this: + +.. code-block:: bash + + #!/usr/bin/python + #!/usr/bin/python -i + +where the path points to where you have Python installed, and that you +have made the script file executable: + +.. code-block:: bash + + $ chmod +x script.py + +Without the ``-i`` flag, Python will exit when the script finishes. +With the ``-i`` flag, you will be left in the Python interpreter when +the script finishes, so you can type subsequent commands. As +mentioned above, you can only run Python interactively when running +Python on a single processor, not in parallel. diff --git a/doc/src/Python_shlib.rst b/doc/src/Python_shlib.rst deleted file mode 100644 index b02fcd7bb8..0000000000 --- a/doc/src/Python_shlib.rst +++ /dev/null @@ -1,78 +0,0 @@ -Build LAMMPS as a shared library -================================ - -.. TODO this is mostly redundant and should be addressed in the 'progguide' branch if it has not already - -Build LAMMPS as a shared library using make -------------------------------------------- - -Instructions on how to build LAMMPS as a shared library are given on -the :doc:`Build_basics ` doc page. A shared library is -one that is dynamically loadable, which is what Python requires to -wrap LAMMPS. On Linux this is a library file that ends in ".so", not -".a". - -From the src directory, type - -.. code-block:: bash - - make foo mode=shared - -where foo is the machine target name, such as mpi or serial. -This should create the file liblammps_foo.so in the src directory, as -well as a soft link liblammps.so, which is what the Python wrapper will -load by default. Note that if you are building multiple machine -versions of the shared library, the soft link is always set to the -most recently built version. - -.. note:: - - If you are building LAMMPS with an MPI or FFT library or other - auxiliary libraries (used by various packages), then all of these - extra libraries must also be shared libraries. If the LAMMPS - shared-library build fails with an error complaining about this, see - the :doc:`Build_basics ` doc page. - -Build LAMMPS as a shared library using CMake --------------------------------------------- - -When using CMake the following two options are necessary to generate the LAMMPS -shared library: - -.. code-block:: bash - - -D BUILD_SHARED_LIBS=on # enable building of LAMMPS shared library (both options are needed!) - -What this does is create a liblammps.so which contains the majority of LAMMPS -code. The generated lmp binary also dynamically links to this library. This -means that either this liblammps.so file has to be in the same directory, a system -library path (e.g. /usr/lib64/) or in the LD_LIBRARY_PATH. - -If you want to use the shared library with Python the recommended way is to create a virtualenv and use it as -CMAKE_INSTALL_PREFIX. - -.. code-block:: bash - - # create virtualenv - virtualenv --python=$(which python3) myenv3 - source myenv3/bin/activate - - # build library - mkdir build - cd build - cmake -D PKG_PYTHON=on -D BUILD_SHARED_LIBS=on -D CMAKE_INSTALL_PREFIX=$VIRTUAL_ENV ../cmake - make -j 4 - - # install into prefix - make install - -This will also install the Python module into your virtualenv. Since virtualenv -does not change your LD_LIBRARY_PATH, you still need to add its lib64 folder to -it, which contains the installed liblammps.so. - -.. code-block:: bash - - export LD_LIBRARY_PATH=$VIRTUAL_ENV/lib64:$LD_LIBRARY_PATH - -Starting Python outside (!) of your build directory, but with the virtualenv -enabled and with the LD_LIBRARY_PATH set gives you access to LAMMPS via Python. diff --git a/doc/src/Python_test.rst b/doc/src/Python_test.rst deleted file mode 100644 index 323feec2d8..0000000000 --- a/doc/src/Python_test.rst +++ /dev/null @@ -1,152 +0,0 @@ -Test the Python/LAMMPS interface -================================ - -To test if LAMMPS is callable from Python, launch Python interactively -and type: - -.. parsed-literal:: - - >>> from lammps import lammps - >>> lmp = lammps() - -If you get no errors, you're ready to use LAMMPS from Python. If the -second command fails, the most common error to see is - -.. parsed-literal:: - - OSError: Could not load LAMMPS dynamic library - -which means Python was unable to load the LAMMPS shared library. This -typically occurs if the system can't find the LAMMPS shared library or -one of the auxiliary shared libraries it depends on, or if something -about the library is incompatible with your Python. The error message -should give you an indication of what went wrong. - -You can also test the load directly in Python as follows, without -first importing from the lammps.py file: - -.. parsed-literal:: - - >>> from ctypes import CDLL - >>> CDLL("liblammps.so") - -If an error occurs, carefully go through the steps on the -:doc:`Build_basics ` doc page about building a shared -library and the :doc:`Python_install ` doc page about -insuring Python can find the necessary two files it needs. - -Test LAMMPS and Python in serial: -------------------------------------- - -To run a LAMMPS test in serial, type these lines into Python -interactively from the bench directory: - -.. parsed-literal:: - - >>> from lammps import lammps - >>> lmp = lammps() - >>> lmp.file("in.lj") - -Or put the same lines in the file test.py and run it as - -.. code-block:: bash - - % python test.py - -Either way, you should see the results of running the in.lj benchmark -on a single processor appear on the screen, the same as if you had -typed something like: - -.. parsed-literal:: - - lmp_g++ -in in.lj - -Test LAMMPS and Python in parallel: ---------------------------------------- - -To run LAMMPS in parallel, assuming you have installed the -`PyPar `_ package as discussed -above, create a test.py file containing these lines: - -.. code-block:: python - - import pypar - from lammps import lammps - lmp = lammps() - lmp.file("in.lj") - print "Proc %d out of %d procs has" % (pypar.rank(),pypar.size()),lmp - pypar.finalize() - -To run LAMMPS in parallel, assuming you have installed the -`mpi4py `_ package as discussed -above, create a test.py file containing these lines: - -.. code-block:: python - - from mpi4py import MPI - from lammps import lammps - lmp = lammps() - lmp.file("in.lj") - me = MPI.COMM_WORLD.Get_rank() - nprocs = MPI.COMM_WORLD.Get_size() - print "Proc %d out of %d procs has" % (me,nprocs),lmp - MPI.Finalize() - -You can either script in parallel as: - -.. code-block:: bash - - % mpirun -np 4 python test.py - -and you should see the same output as if you had typed - -.. code-block:: bash - - % mpirun -np 4 lmp_g++ -in in.lj - -Note that if you leave out the 3 lines from test.py that specify PyPar -commands you will instantiate and run LAMMPS independently on each of -the P processors specified in the mpirun command. In this case you -should get 4 sets of output, each showing that a LAMMPS run was made -on a single processor, instead of one set of output showing that -LAMMPS ran on 4 processors. If the 1-processor outputs occur, it -means that PyPar is not working correctly. - -Also note that once you import the PyPar module, PyPar initializes MPI -for you, and you can use MPI calls directly in your Python script, as -described in the PyPar documentation. The last line of your Python -script should be pypar.finalize(), to insure MPI is shut down -correctly. - -Running Python scripts: ---------------------------- - -Note that any Python script (not just for LAMMPS) can be invoked in -one of several ways: - -.. code-block:: bash - - % python foo.script - % python -i foo.script - % foo.script - -The last command requires that the first line of the script be -something like this: - -.. code-block:: bash - - #!/usr/local/bin/python - #!/usr/local/bin/python -i - -where the path points to where you have Python installed, and that you -have made the script file executable: - -.. code-block:: bash - - % chmod +x foo.script - -Without the "-i" flag, Python will exit when the script finishes. -With the "-i" flag, you will be left in the Python interpreter when -the script finishes, so you can type subsequent commands. As -mentioned above, you can only run Python interactively when running -Python on a single processor, not in parallel. diff --git a/doc/src/Python_trouble.rst b/doc/src/Python_trouble.rst new file mode 100644 index 0000000000..3ef7dacf34 --- /dev/null +++ b/doc/src/Python_trouble.rst @@ -0,0 +1,44 @@ +Troubleshooting +*************** + +Testing if Python can launch LAMMPS +=================================== + +To test if LAMMPS is callable from Python, launch Python interactively +and type: + +.. code-block:: python + + >>> from lammps import lammps + >>> lmp = lammps() + +If you get no errors, you're ready to use LAMMPS from Python. If the +second command fails, the most common error to see is + +.. code-block:: bash + + OSError: Could not load LAMMPS dynamic library + +which means Python was unable to load the LAMMPS shared library. This +typically occurs if the system can't find the LAMMPS shared library or +one of the auxiliary shared libraries it depends on, or if something +about the library is incompatible with your Python. The error message +should give you an indication of what went wrong. + +If your shared library uses a suffix, such as ``liblammps_mpi.so``, change +the constructor call as follows (see :ref:`python_create_lammps` for more details): + +.. code-block:: python + + >>> lmp = lammps(name='mpi') + +You can also test the load directly in Python as follows, without +first importing from the lammps.py file: + +.. code-block:: python + + >>> from ctypes import CDLL + >>> CDLL("liblammps.so") + +If an error occurs, carefully go through the steps in :ref:`python_install_guides` and on the +:doc:`Build_basics ` doc page about building a shared library. diff --git a/doc/src/Python_library.rst b/doc/src/Python_usage.rst similarity index 53% rename from doc/src/Python_library.rst rename to doc/src/Python_usage.rst index 370c67b3f8..40705d33df 100644 --- a/doc/src/Python_library.rst +++ b/doc/src/Python_usage.rst @@ -1,25 +1,126 @@ -Python library interface -======================== +.. _mpi4py_url: https://mpi4py.readthedocs.io/ -As described previously, the Python interface to LAMMPS consists of a -Python "lammps" module, the source code for which is in -python/lammps.py, which creates a "lammps" object, with a set of -methods that can be invoked on that object. The sample Python code -below assumes you have first imported the "lammps" module in your -Python script, as follows: +.. _python_create_lammps: -.. code-block:: Python +Creating or deleting a LAMMPS object +************************************ - from lammps import lammps +With the Python interface the creation of a :cpp:class:`LAMMPS +` instance is included in the constructors for the +:py:meth:`lammps `, :py:meth:`PyLammps `, +and :py:meth:`PyLammps ` classes. +Internally it will call either :cpp:func:`lammps_open` or :cpp:func:`lammps_open_no_mpi` from the C +library API to create the class instance. -These are the methods defined by the lammps module. If you look at -the files src/library.cpp and src/library.h you will see they -correspond one-to-one with calls you can make to the LAMMPS library -from a C++ or C or Fortran program, and which are described on the -:doc:`Howto library ` doc page. +All arguments are optional. The *name* argument allows loading a +LAMMPS shared library that is named ``liblammps_machine.so`` instead of +the default name of ``liblammps.so``. In most cases the latter will be +installed or used. The *ptr* argument is for use of the +:py:mod:`lammps` module from inside a LAMMPS instance, e.g. with the +:doc:`python ` command, where a pointer to the already existing +:cpp:class:`LAMMPS ` class instance can be passed +to the Python class and used instead of creating a new instance. The +*comm* argument may be used in combination with the `mpi4py `_ +module to pass an MPI communicator to LAMMPS and thus it is possible +to run the Python module like the library interface on a subset of the +MPI ranks after splitting the communicator. -The python/examples directory has Python scripts which show how Python -can run LAMMPS, grab data, change it, and put it back into LAMMPS. + +Here are simple examples using all three Python interfaces: + +.. tabs:: + + .. tab:: lammps API + + .. code-block:: python + + from lammps import lammps + + # NOTE: argv[0] is set by the lammps class constructor + args = ["-log", "none"] + # create LAMMPS instance + lmp = lammps(cmdargs=args) + # get and print numerical version code + print("LAMMPS Version: ", lmp.version()) + # explicitly close and delete LAMMPS instance (optional) + lmp.close() + + .. tab:: PyLammps API + + The :py:class:`PyLammps` class is a wrapper around the + :py:class:`lammps` class and all of its lower level functions. + By default, it will create a new instance of :py:class:`lammps` passing + along all arguments to the constructor of :py:class:`lammps`. + + .. code-block:: python + + from lammps import PyLammps + + # NOTE: argv[0] is set by the lammps class constructor + args = ["-log", "none"] + # create LAMMPS instance + L = PyLammps(cmdargs=args) + # get and print numerical version code + print("LAMMPS Version: ", L.version()) + # explicitly close and delete LAMMPS instance (optional) + L.close() + + :py:class:`PyLammps` objects can also be created on top of an existing :py:class:`lammps` object: + + .. code-block:: Python + + from lammps import lammps, PyLammps + ... + # create LAMMPS instance + lmp = lammps(cmdargs=args) + # create PyLammps instance using previously created LAMMPS instance + L = PyLammps(ptr=lmp) + + This is useful if you have to create the :py:class:`lammps ` + instance is a specific way, but want to take advantage of the + :py:class:`PyLammps ` interface. + + .. tab:: IPyLammps API + + The :py:class:`IPyLammps` class is an extension of the + :py:class:`PyLammps` class. It has the same construction behavior. By + default, it will create a new instance of :py:class:`lammps` passing + along all arguments to the constructor of :py:class:`lammps`. + + .. code-block:: python + + from lammps import IPyLammps + + # NOTE: argv[0] is set by the lammps class constructor + args = ["-log", "none"] + # create LAMMPS instance + L = IPyLammps(cmdargs=args) + # get and print numerical version code + print("LAMMPS Version: ", L.version()) + # explicitly close and delete LAMMPS instance (optional) + L.close() + + You can also initialize IPyLammps on top of an existing :py:class:`lammps` or :py:class:`PyLammps` object: + + .. code-block:: Python + + from lammps import lammps, IPyLammps + ... + # create LAMMPS instance + lmp = lammps(cmdargs=args) + # create PyLammps instance using previously created LAMMPS instance + L = PyLammps(ptr=lmp) + + This is useful if you have to create the :py:class:`lammps ` + instance is a specific way, but want to take advantage of the + :py:class:`IPyLammps ` interface. + +In all of the above cases, same as with the :ref:`C library API `, this will use the +``MPI_COMM_WORLD`` communicator for the MPI library that LAMMPS was +compiled with. The :py:func:`lmp.close() ` call is +optional since the LAMMPS class instance will also be deleted +automatically during the :py:class:`lammps ` class +destructor. .. code-block:: Python @@ -32,67 +133,6 @@ can run LAMMPS, grab data, change it, and put it back into LAMMPS. lmp.close() # destroy a LAMMPS object - version = lmp.version() # return the numerical version id, e.g. LAMMPS 2 Sep 2015 -> 20150902 - - lmp.file(file) # run an entire input script, file = "in.lj" - lmp.command(cmd) # invoke a single LAMMPS command, cmd = "run 100" - lmp.commands_list(cmdlist) # invoke commands in cmdlist = **"run 10", "run 20"** - lmp.commands_string(multicmd) # invoke commands in multicmd = "run 10\nrun 20" - - size = lmp.extract_setting(name) # return data type info - - xlo = lmp.extract_global(name,type) # extract a global quantity - # name = "boxxlo", "nlocal", etc - # type = 0 = int - # 1 = double - - boxlo,boxhi,xy,yz,xz,periodicity,box_change = lmp.extract_box() # extract box info - - coords = lmp.extract_atom(name,type) # extract a per-atom quantity - # name = "x", "type", etc - # type = 0 = vector of ints - # 1 = array of ints - # 2 = vector of doubles - # 3 = array of doubles - - eng = lmp.extract_compute(id,style,type) # extract value(s) from a compute - v3 = lmp.extract_fix(id,style,type,i,j) # extract value(s) from a fix - # id = ID of compute or fix - # style = 0 = global data - # 1 = per-atom data - # 2 = local data - # type = 0 = scalar - # 1 = vector - # 2 = array - # i,j = indices of value in global vector or array - - var = lmp.extract_variable(name,group,flag) # extract value(s) from a variable - # name = name of variable - # group = group ID (ignored for equal-style variables) - # flag = 0 = equal-style variable - # 1 = atom-style variable - - value = lmp.get_thermo(name) # return current value of a thermo keyword - natoms = lmp.get_natoms() # total # of atoms as int - - flag = lmp.set_variable(name,value) # set existing named string-style variable to value, flag = 0 if successful - lmp.reset_box(boxlo,boxhi,xy,yz,xz) # reset the simulation box size - - data = lmp.gather_atoms(name,type,count) # return per-atom property of all atoms gathered into data, ordered by atom ID - # name = "x", "charge", "type", etc - data = lmp.gather_atoms_concat(name,type,count) # ditto, but concatenated atom values from each proc (unordered) - data = lmp.gather_atoms_subset(name,type,count,ndata,ids) # ditto, but for subset of Ndata atoms with IDs - - lmp.scatter_atoms(name,type,count,data) # scatter per-atom property to all atoms from data, ordered by atom ID - # name = "x", "charge", "type", etc - # count = # of per-atom values, 1 or 3, etc - - lmp.scatter_atoms_subset(name,type,count,ndata,ids,data) # ditto, but for subset of Ndata atoms with IDs - - lmp.create_atoms(n,ids,types,x,v,image,shrinkexceed) # create N atoms with IDs, types, x, v, and image flags - ----------- - The lines .. code-block:: Python @@ -135,10 +175,163 @@ script, and coordinate and run multiple simulations, e.g. lmp1.file("in.file1") lmp2.file("in.file2") +Executing LAMMPS commands +************************* + +Once an instance of the :py:class:`lammps`, :py:class:`PyLammps`, or +:py:class:`IPyLammps` class is created, there are multiple ways to "feed" it +commands. In a way that is not very different from running a LAMMPS input +script, except that Python has many more facilities for structured +programming than the LAMMPS input script syntax. Furthermore it is possible +to "compute" what the next LAMMPS command should be. + +.. tabs:: + + .. tab:: lammps API + + Same as in the equivalent + :doc:`C library functions `, commands can be read from a file, a + single string, a list of strings and a block of commands in a single + multi-line string. They are processed under the same boundary conditions + as the C library counterparts. The example below demonstrates the use + of :py:func:`lammps.file`, :py:func:`lammps.command`, + :py:func:`lammps.commands_list`, and :py:func:`lammps.commands_string`: + + .. code-block:: python + + from lammps import lammps + lmp = lammps() + # read commands from file 'in.melt' + lmp.file('in.melt') + # issue a single command + lmp.command('variable zpos index 1.0') + # create 10 groups with 10 atoms each + cmds = ["group g{} id {}:{}".format(i,10*i+1,10*(i+1)) for i in range(10)] + lmp.commands_list(cmds) + # run commands from a multi-line string + block = """ + clear + region box block 0 2 0 2 0 2 + create_box 1 box + create_atoms 1 single 1.0 1.0 ${zpos} + """ + lmp.commands_string(block) + + .. tab:: PyLammps/IPyLammps API + + Unlike the lammps API, the PyLammps/IPyLammps APIs allow running LAMMPS + commands by calling equivalent member functions. + + For instance, the following LAMMPS command + + .. code-block:: LAMMPS + + region box block 0 10 0 5 -0.5 0.5 + + can be executed using the following Python code if *L* is a :py:class:`lammps` instance: + + .. code-block:: Python + + L.command("region box block 0 10 0 5 -0.5 0.5") + + With the PyLammps interface, any LAMMPS command can be split up into arbitrary parts. + These parts are then passed to a member function with the name of the command. + For the ``region`` command that means the :code:`region` method can be called. + The arguments of the command can be passed as one string, or + individually. + + .. code-block:: Python + + L.region("box block", 0, 10, 0, 5, -0.5, 0.5) + + In this example all parameters except the first are Python floating-point literals. The + PyLammps interface takes the entire parameter list and transparently + merges it to a single command string. + + The benefit of this approach is avoiding redundant command calls and easier + parameterization. In the original interface parameterization this needed to be done + manually by creating formatted strings. + + .. code-block:: Python + + L.command("region box block %f %f %f %f %f %f" % (xlo, xhi, ylo, yhi, zlo, zhi)) + + In contrast, methods of PyLammps accept parameters directly and will convert + them automatically to a final command string. + + .. code-block:: Python + + L.region("box block", xlo, xhi, ylo, yhi, zlo, zhi) + + Using these facilities, the example shown for the lammps API can be rewritten as follows: + + .. code-block:: python + + from lammps import PyLammps + L = PyLammps() + # read commands from file 'in.melt' + L.file('in.melt') + # issue a single command + L.variable('zpos', 'index', 1.0) + # create 10 groups with 10 atoms each + for i in range(10): + L.group(f"g{i}", "id", f"{10*i+1}:{10*(i+1)}") + + L.clear() + L.region("box block", 0, 2, 0, 2, 0, 2) + L.create_box(1, "box") + L.create_atoms(1, "single", 1.0, 1.0, "${zpos}") + + +.. code-block:: Python + + lmp.file(file) # run an entire input script, file = "in.lj" + lmp.command(cmd) # invoke a single LAMMPS command, cmd = "run 100" + lmp.commands_list(cmdlist) # invoke commands in cmdlist = **"run 10", "run 20"** + lmp.commands_string(multicmd) # invoke commands in multicmd = "run 10\nrun 20" + The file(), command(), commands_list(), commands_string() methods allow an input script, a single command, or multiple commands to be invoked. + +Retrieving or setting LAMMPS system properties +********************************************** + +.. code-block:: Python + + version = lmp.version() # return the numerical version id, e.g. LAMMPS 2 Sep 2015 -> 20150902 + + size = lmp.extract_setting(name) # return data type info + + xlo = lmp.extract_global(name,type) # extract a global quantity + # name = "boxxlo", "nlocal", etc + # type = 0 = int + # 1 = double + + boxlo,boxhi,xy,yz,xz,periodicity,box_change = lmp.extract_box() # extract box info + + + value = lmp.get_thermo(name) # return current value of a thermo keyword + natoms = lmp.get_natoms() # total # of atoms as int + + lmp.reset_box(boxlo,boxhi,xy,yz,xz) # reset the simulation box size + + lmp.create_atoms(n,ids,types,x,v,image,shrinkexceed) # create N atoms with IDs, types, x, v, and image flags + + +The :py:meth:`get_thermo() ` method returns the current value of a thermo +keyword as a float. + +The get_natoms() method returns the total number of atoms in the +simulation, as an int. + + +The reset_box() method resets the size and shape of the simulation +box, e.g. as part of restoring a previously extracted and saved state +of a simulation. + + The extract_setting(), extract_global(), extract_box(), extract_atom(), extract_compute(), extract_fix(), and extract_variable() methods return values or pointers to data @@ -149,6 +342,37 @@ valid names. New names could easily be added. A double or integer is returned. You need to specify the appropriate data type via the type argument. +Retrieving or setting properties of LAMMPS objects +************************************************** + +.. code-block:: Python + + coords = lmp.extract_atom(name,type) # extract a per-atom quantity + # name = "x", "type", etc + # type = 0 = vector of ints + # 1 = array of ints + # 2 = vector of doubles + # 3 = array of doubles + + eng = lmp.extract_compute(id,style,type) # extract value(s) from a compute + v3 = lmp.extract_fix(id,style,type,i,j) # extract value(s) from a fix + # id = ID of compute or fix + # style = 0 = global data + # 1 = per-atom data + # 2 = local data + # type = 0 = scalar + # 1 = vector + # 2 = array + # i,j = indices of value in global vector or array + + var = lmp.extract_variable(name,group,flag) # extract value(s) from a variable + # name = name of variable + # group = group ID (ignored for equal-style variables) + # flag = 0 = equal-style variable + # 1 = atom-style variable + + flag = lmp.set_variable(name,value) # set existing named string-style variable to value, flag = 0 if successful + For extract_atom(), a pointer to internal LAMMPS atom-based data is returned, which you can use via normal Python subscripting. See the extract() method in the src/atom.cpp file for a list of valid names. @@ -181,19 +405,27 @@ doubles is returned, one value per atom, which you can use via normal Python subscripting. The values will be zero for atoms not in the specified group. -The get_thermo() method returns the current value of a thermo -keyword as a float. - -The get_natoms() method returns the total number of atoms in the -simulation, as an int. - The set_variable() method sets an existing string-style variable to a new string value, so that subsequent LAMMPS commands can access the variable. -The reset_box() method resets the size and shape of the simulation -box, e.g. as part of restoring a previously extracted and saved state -of a simulation. + +Gather and Scatter Data between MPI processors +********************************************** + +.. code-block:: Python + + data = lmp.gather_atoms(name,type,count) # return per-atom property of all atoms gathered into data, ordered by atom ID + # name = "x", "charge", "type", etc + data = lmp.gather_atoms_concat(name,type,count) # ditto, but concatenated atom values from each proc (unordered) + data = lmp.gather_atoms_subset(name,type,count,ndata,ids) # ditto, but for subset of Ndata atoms with IDs + + lmp.scatter_atoms(name,type,count,data) # scatter per-atom property to all atoms from data, ordered by atom ID + # name = "x", "charge", "type", etc + # count = # of per-atom values, 1 or 3, etc + + lmp.scatter_atoms_subset(name,type,count,ndata,ids,data) # ditto, but for subset of Ndata atoms with IDs + The gather methods collect peratom info of the requested type (atom coords, atom types, forces, etc) from all processors, and returns the @@ -239,18 +471,3 @@ like this: Alternatively, you can just change values in the vector returned by the gather methods, since they are also ctypes vectors. ----------- - -As noted above, these Python class methods correspond one-to-one with -the functions in the LAMMPS library interface in src/library.cpp and -library.h. This means you can extend the Python wrapper via the -following steps: - -* Add a new interface function to src/library.cpp and - src/library.h. -* Rebuild LAMMPS as a shared library. -* Add a wrapper method to python/lammps.py for this interface - function. -* You should now be able to invoke the new interface function from a - Python script. - diff --git a/doc/src/python.rst b/doc/src/python.rst index 8451fe476e..f3238e8bb5 100644 --- a/doc/src/python.rst +++ b/doc/src/python.rst @@ -340,7 +340,7 @@ to the screen and log file. Note that since the LAMMPS print command itself takes a string in quotes as its argument, the Python string must be delimited with a different style of quotes. -The :doc:`Python library ` doc page describes the syntax +The :doc:`Python_head` doc page describes the syntax for how Python wraps the various functions included in the LAMMPS library interface. From fb33a71720e3ba8aac2a0bd915cb66c3c4576acb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 1 Oct 2020 00:34:03 -0400 Subject: [PATCH 057/182] look for liblammps.dll in windows binary dir only if that directory exists --- python/lammps.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/lammps.py b/python/lammps.py index e3c8f7f61c..59f2dce012 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -199,8 +199,8 @@ class lammps(object): elif any([f.startswith('liblammps') and f.endswith('.dll') for f in os.listdir(modpath)]): lib_ext = ".dll" - elif any([f.startswith('liblammps') and f.endswith('.dll') - for f in os.listdir(winpath)]): + elif os.path.exists(winpath) and any([f.startswith('liblammps') and f.endswith('.dll') + for f in os.listdir(winpath)]): lib_ext = ".dll" modpath = winpath else: From 9efcaf2d61cae7f98b96d01cd4cd73fb93371273 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 1 Oct 2020 00:57:53 -0400 Subject: [PATCH 058/182] update documentation for Windows installer --- doc/src/Install_windows.rst | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/doc/src/Install_windows.rst b/doc/src/Install_windows.rst index 548f67e484..ac1e578241 100644 --- a/doc/src/Install_windows.rst +++ b/doc/src/Install_windows.rst @@ -12,14 +12,20 @@ Note that each installer package has a date in its name, which corresponds to the LAMMPS version of the same date. Installers for current and older versions of LAMMPS are available. 32-bit and 64-bit installers are available, and each installer contains both a serial -and parallel executable. The installer site also explains how to +and parallel executable. The installer web site also explains how to install the Windows MPI package (MPICH2 from Argonne National Labs), needed to run in parallel. -The LAMMPS binaries contain all optional packages included in the -source distribution except: KIM, KOKKOS, USER-INTEL, and USER-QMMM. +The LAMMPS binaries contain *all* :doc:`optional packages ` +included in the source distribution except: KIM, KOKKOS, MSCG, PYTHON, +USER-ADIOS, USER-H5MD, USER-NETCDF, USER-QMMM, USER-QUIP, and USER-VTK. The serial version also does not include the MPIIO and -USER-LB packages. GPU support is provided for OpenCL. +USER-LB packages. The GPU package is compiled for OpenCL with +mixed precision kernels. + +The LAMMPS library is compiled as a shared library and the +:doc:`LAMMPS Python module ` is installed, so that +it is possible to load LAMMPS into a Python interpreter. The installer site also has instructions on how to run LAMMPS under Windows, once it is installed, in both serial and parallel. @@ -42,5 +48,3 @@ install multiple versions of LAMMPS (in different directories), but only the executable for the last-installed package will be found automatically, so this should only be done for debugging purposes. -Thanks to Axel Kohlmeyer (Temple U, akohlmey at gmail.com) for setting -up this Windows capability. From ea3af3c2bc3ee5a16528cef9c6875dbd98bb056f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 1 Oct 2020 09:34:38 -0400 Subject: [PATCH 059/182] resolve delete/free() mismatch --- src/dump_custom.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index cf034b0450..b5609b754f 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -234,7 +234,7 @@ DumpCustom::~DumpCustom() for (int i = 0; i < ncustom; i++) delete [] id_custom[i]; memory->sfree(id_custom); - delete [] flag_custom; + memory->sfree(flag_custom); memory->destroy(choose); memory->destroy(dchoose); From 8c56f609398f9c8c3cb826837060a0ec4cd6be52 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 1 Oct 2020 09:35:45 -0400 Subject: [PATCH 060/182] use bigint instead of int for timestep related variable functions to avoid overflows --- src/variable.cpp | 60 ++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/src/variable.cpp b/src/variable.cpp index 16677ef5ae..6931fd9122 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -2687,23 +2687,23 @@ double Variable::collapse_tree(Tree *tree) } if (tree->type == STAGGER) { - int ivalue1 = static_cast (collapse_tree(tree->first)); - int ivalue2 = static_cast (collapse_tree(tree->second)); + bigint ivalue1 = static_cast (collapse_tree(tree->first)); + bigint ivalue2 = static_cast (collapse_tree(tree->second)); if (tree->first->type != VALUE || tree->second->type != VALUE) return 0.0; tree->type = VALUE; if (ivalue1 <= 0 || ivalue2 <= 0 || ivalue1 <= ivalue2) error->one(FLERR,"Invalid math function in variable formula"); - int lower = update->ntimestep/ivalue1 * ivalue1; - int delta = update->ntimestep - lower; + bigint lower = update->ntimestep/ivalue1 * ivalue1; + bigint delta = update->ntimestep - lower; if (delta < ivalue2) tree->value = lower+ivalue2; else tree->value = lower+ivalue1; return tree->value; } if (tree->type == LOGFREQ) { - int ivalue1 = static_cast (collapse_tree(tree->first)); - int ivalue2 = static_cast (collapse_tree(tree->second)); - int ivalue3 = static_cast (collapse_tree(tree->extra[0])); + bigint ivalue1 = static_cast (collapse_tree(tree->first)); + bigint ivalue2 = static_cast (collapse_tree(tree->second)); + bigint ivalue3 = static_cast (collapse_tree(tree->extra[0])); if (tree->first->type != VALUE || tree->second->type != VALUE || tree->extra[0]->type != VALUE) return 0.0; tree->type = VALUE; @@ -2711,9 +2711,9 @@ double Variable::collapse_tree(Tree *tree) error->one(FLERR,"Invalid math function in variable formula"); if (update->ntimestep < ivalue1) tree->value = ivalue1; else { - int lower = ivalue1; + bigint lower = ivalue1; while (update->ntimestep >= ivalue3*lower) lower *= ivalue3; - int multiple = update->ntimestep/lower; + bigint multiple = update->ntimestep/lower; if (multiple < ivalue2) tree->value = (multiple+1)*lower; else tree->value = lower*ivalue3; } @@ -2721,9 +2721,9 @@ double Variable::collapse_tree(Tree *tree) } if (tree->type == LOGFREQ2) { - int ivalue1 = static_cast (collapse_tree(tree->first)); - int ivalue2 = static_cast (collapse_tree(tree->second)); - int ivalue3 = static_cast (collapse_tree(tree->extra[0])); + bigint ivalue1 = static_cast (collapse_tree(tree->first)); + bigint ivalue2 = static_cast (collapse_tree(tree->second)); + bigint ivalue3 = static_cast (collapse_tree(tree->extra[0])); if (tree->first->type != VALUE || tree->second->type != VALUE || tree->extra[0]->type != VALUE) return 0.0; tree->type = VALUE; @@ -2733,7 +2733,7 @@ double Variable::collapse_tree(Tree *tree) else { tree->value = ivalue1; double delta = ivalue1*(ivalue3-1.0)/ivalue2; - int count = 0; + bigint count = 0; while (update->ntimestep >= tree->value) { tree->value += delta; count++; @@ -2745,9 +2745,9 @@ double Variable::collapse_tree(Tree *tree) } if (tree->type == LOGFREQ3) { - int ivalue1 = static_cast (collapse_tree(tree->first)); - int ivalue2 = static_cast (collapse_tree(tree->second)); - int ivalue3 = static_cast (collapse_tree(tree->extra[0])); + bigint ivalue1 = static_cast (collapse_tree(tree->first)); + bigint ivalue2 = static_cast (collapse_tree(tree->second)); + bigint ivalue3 = static_cast (collapse_tree(tree->extra[0])); if (tree->first->type != VALUE || tree->second->type != VALUE || tree->extra[0]->type != VALUE) return 0.0; tree->type = VALUE; @@ -2760,7 +2760,7 @@ double Variable::collapse_tree(Tree *tree) tree->value = ivalue1; double logsp = ivalue1; double factor = pow(((double)ivalue3)/ivalue1, 1.0/(ivalue2-1)); - int linsp = ivalue1; + bigint linsp = ivalue1; while (update->ntimestep >= (tree->value)) { logsp *= factor; linsp++; @@ -2774,9 +2774,9 @@ double Variable::collapse_tree(Tree *tree) } if (tree->type == STRIDE) { - int ivalue1 = static_cast (collapse_tree(tree->first)); - int ivalue2 = static_cast (collapse_tree(tree->second)); - int ivalue3 = static_cast (collapse_tree(tree->extra[0])); + bigint ivalue1 = static_cast (collapse_tree(tree->first)); + bigint ivalue2 = static_cast (collapse_tree(tree->second)); + bigint ivalue3 = static_cast (collapse_tree(tree->extra[0])); if (tree->first->type != VALUE || tree->second->type != VALUE || tree->extra[0]->type != VALUE) return 0.0; tree->type = VALUE; @@ -2784,7 +2784,7 @@ double Variable::collapse_tree(Tree *tree) error->one(FLERR,"Invalid math function in variable formula"); if (update->ntimestep < ivalue1) tree->value = ivalue1; else if (update->ntimestep < ivalue2) { - int offset = update->ntimestep - ivalue1; + bigint offset = update->ntimestep - ivalue1; tree->value = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3; if (tree->value > ivalue2) tree->value = (double) MAXBIGINT; } else tree->value = (double) MAXBIGINT; @@ -2792,12 +2792,12 @@ double Variable::collapse_tree(Tree *tree) } if (tree->type == STRIDE2) { - int ivalue1 = static_cast (collapse_tree(tree->first)); - int ivalue2 = static_cast (collapse_tree(tree->second)); - int ivalue3 = static_cast (collapse_tree(tree->extra[0])); - int ivalue4 = static_cast (collapse_tree(tree->extra[1])); - int ivalue5 = static_cast (collapse_tree(tree->extra[2])); - int ivalue6 = static_cast (collapse_tree(tree->extra[3])); + bigint ivalue1 = static_cast (collapse_tree(tree->first)); + bigint ivalue2 = static_cast (collapse_tree(tree->second)); + bigint ivalue3 = static_cast (collapse_tree(tree->extra[0])); + bigint ivalue4 = static_cast (collapse_tree(tree->extra[1])); + bigint ivalue5 = static_cast (collapse_tree(tree->extra[2])); + bigint ivalue6 = static_cast (collapse_tree(tree->extra[3])); if (tree->first->type != VALUE || tree->second->type != VALUE || tree->extra[0]->type != VALUE || tree->extra[1]->type != VALUE || tree->extra[2]->type != VALUE || tree->extra[3]->type != VALUE) @@ -2813,15 +2813,15 @@ double Variable::collapse_tree(Tree *tree) if (update->ntimestep < ivalue1) istep = ivalue1; else if (update->ntimestep < ivalue2) { if (update->ntimestep < ivalue4 || update->ntimestep > ivalue5) { - int offset = update->ntimestep - ivalue1; + bigint offset = update->ntimestep - ivalue1; istep = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3; if (update->ntimestep < ivalue2 && istep > ivalue4) tree->value = ivalue4; } else { - int offset = update->ntimestep - ivalue4; + bigint offset = update->ntimestep - ivalue4; istep = ivalue4 + (offset/ivalue6)*ivalue6 + ivalue6; if (istep > ivalue5) { - int offset = ivalue5 - ivalue1; + bigint offset = ivalue5 - ivalue1; istep = ivalue1 + (offset/ivalue3)*ivalue3 + ivalue3; if (istep > ivalue2) istep = MAXBIGINT; } From 4a40a708706ed3b73d945ac90c18699da07cc171 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 1 Oct 2020 09:48:54 -0400 Subject: [PATCH 061/182] avoid overflow of timestep related computations --- src/fix_ave_histo.cpp | 4 ++-- src/fix_ave_histo_weight.cpp | 2 +- src/fix_ave_time.cpp | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/fix_ave_histo.cpp b/src/fix_ave_histo.cpp index 4d1cd5b2dd..5d5abdc9ac 100644 --- a/src/fix_ave_histo.cpp +++ b/src/fix_ave_histo.cpp @@ -760,7 +760,7 @@ void FixAveHisto::end_of_step() } irepeat = 0; - nvalid = ntimestep + nfreq - (nrepeat-1)*nevery; + nvalid = ntimestep + nfreq - static_cast(nrepeat-1)*nevery; modify->addstep_compute(nvalid); // merge histogram stats across procs if necessary @@ -1046,7 +1046,7 @@ bigint FixAveHisto::nextvalid() if (nvalid-nfreq == update->ntimestep && nrepeat == 1) nvalid = update->ntimestep; else - nvalid -= (nrepeat-1)*nevery; + nvalid -= static_cast(nrepeat-1)*nevery; if (nvalid < update->ntimestep) nvalid += nfreq; return nvalid; } diff --git a/src/fix_ave_histo_weight.cpp b/src/fix_ave_histo_weight.cpp index 586c36af8a..08ec3632b4 100644 --- a/src/fix_ave_histo_weight.cpp +++ b/src/fix_ave_histo_weight.cpp @@ -403,7 +403,7 @@ void FixAveHistoWeight::end_of_step() } irepeat = 0; - nvalid = ntimestep + nfreq - (nrepeat-1)*nevery; + nvalid = ntimestep + nfreq - static_cast(nrepeat-1)*nevery; modify->addstep_compute(nvalid); // merge histogram stats across procs if necessary diff --git a/src/fix_ave_time.cpp b/src/fix_ave_time.cpp index b40a7eb009..4a25cca6e5 100644 --- a/src/fix_ave_time.cpp +++ b/src/fix_ave_time.cpp @@ -640,7 +640,7 @@ void FixAveTime::invoke_scalar(bigint ntimestep) } irepeat = 0; - nvalid = ntimestep + nfreq - (nrepeat-1)*nevery; + nvalid = ntimestep + nfreq - static_cast(nrepeat-1)*nevery; modify->addstep_compute(nvalid); // average the final result for the Nfreq timestep @@ -743,7 +743,7 @@ void FixAveTime::invoke_vector(bigint ntimestep) if (!varlen[i] || which[i] != COMPUTE) continue; if (nrepeat > 1 && ave == ONE) { Compute *compute = modify->compute[value2index[i]]; - compute->lock(this,ntimestep,ntimestep+(nrepeat-1)*nevery); + compute->lock(this,ntimestep,ntimestep+static_cast(nrepeat-1)*nevery); } else if ((ave == RUNNING || ave == WINDOW) && !lockforever) { Compute *compute = modify->compute[value2index[i]]; compute->lock(this,update->ntimestep,-1); @@ -838,7 +838,7 @@ void FixAveTime::invoke_vector(bigint ntimestep) } irepeat = 0; - nvalid = ntimestep+nfreq - (nrepeat-1)*nevery; + nvalid = ntimestep+nfreq - static_cast(nrepeat-1)*nevery; modify->addstep_compute(nvalid); // unlock any variable length computes at end of Nfreq epoch @@ -1146,7 +1146,7 @@ bigint FixAveTime::nextvalid() if (nvalid-nfreq == update->ntimestep && nrepeat == 1) nvalid = update->ntimestep; else - nvalid -= (nrepeat-1)*nevery; + nvalid -= static_cast(nrepeat-1)*nevery; if (nvalid < update->ntimestep) nvalid += nfreq; return nvalid; } From 774ac8b2d9b1cd96882f7d6655761d49597e3796 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 1 Oct 2020 09:49:28 -0400 Subject: [PATCH 062/182] avoid overflow of per-local-atom computation --- src/min.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/min.cpp b/src/min.cpp index ea07820e53..7474025c1a 100644 --- a/src/min.cpp +++ b/src/min.cpp @@ -244,7 +244,7 @@ void Min::setup(int flag) bigint ndofme = 3 * static_cast(atom->nlocal); for (int m = 0; m < nextra_atom; m++) - ndofme += extra_peratom[m]*atom->nlocal; + ndofme += extra_peratom[m]*static_cast(atom->nlocal); MPI_Allreduce(&ndofme,&ndoftotal,1,MPI_LMP_BIGINT,MPI_SUM,world); ndoftotal += nextra_global; From 343b24dd5edf52efa73b2cc2824bfd545de50f95 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Thu, 1 Oct 2020 10:50:33 -0600 Subject: [PATCH 063/182] more edits to C library chapter --- doc/src/Library_add.rst | 29 +++++++++++++++-------------- doc/src/Library_config.rst | 24 ++++++++++++------------ doc/src/Library_neighbor.rst | 4 ++-- doc/src/Library_objects.rst | 4 ++-- doc/src/Library_scatter.rst | 13 ++++++++++--- doc/src/Library_utility.rst | 4 ++-- 6 files changed, 43 insertions(+), 35 deletions(-) diff --git a/doc/src/Library_add.rst b/doc/src/Library_add.rst index e58b6c2b73..ef91c98ab0 100644 --- a/doc/src/Library_add.rst +++ b/doc/src/Library_add.rst @@ -2,11 +2,11 @@ Adding code to the Library interface ==================================== The functionality of the LAMMPS library interface has historically -always been motivated by the needs of its users and functions were -added or expanded as they were needed and used. Contributions to -the interface are always welcome. However with a refactoring of -the library interface and its documentation that started in 2020, -there are now a few requirements for inclusion of changes. +been motivated by the needs of its users. Functions have been added +or expanded as they were needed and used. Contributions to the +interface are always welcome. However with a refactoring of the +library interface and its documentation that started in 2020, there +are now a few requirements for including new changes or extensions. - New functions should be orthogonal to existing ones and not implement functionality that can already be achieved with the @@ -17,17 +17,18 @@ there are now a few requirements for inclusion of changes. ``doc/src`` folder. - If possible, new unit tests to test those new features should be added. - - The new feature should also be implemented and documented for - the Python and Fortran modules. + - The new feature should also be implemented and documented not + just for the C interface, but also the Python and Fortran interfaces. - All additions should work and be compatible with ``-DLAMMPS_BIGBIG``, - ``-DLAMMPS_SMALLBIG``, ``-DLAMMPS_SMALLSMALL`` and compiling + ``-DLAMMPS_SMALLBIG``, ``-DLAMMPS_SMALLSMALL`` and when compiling with and without MPI support. - The ``library.h`` file should be kept compatible to C code at a level similar to C89. Its interfaces may not reference any - custom data types (e.g. ``bigint``, ``tagint``, and so on) only - known inside of LAMMPS. - - only C style comments, not C++ style + custom data types (e.g. ``bigint``, ``tagint``, and so on) that + are only known inside of LAMMPS. + - only use C style comments, not C++ style + +Please note that these are *not* *strict* requirements, but the LAMMPS +developers appreciate if they are followed and can assist with +implementing what is missing. -Please note, that these are *not* *strict* requirements, but the -LAMMPS developers appreciate if they are followed closely and will -assist with implementing what is missing. diff --git a/doc/src/Library_config.rst b/doc/src/Library_config.rst index 0c07896ff6..3389d52173 100644 --- a/doc/src/Library_config.rst +++ b/doc/src/Library_config.rst @@ -18,18 +18,18 @@ This section documents the following functions: -------------------- -The following library functions can be used to query the LAMMPS library -about compile time settings and included packages and styles. This -enables programs that use the library interface to run LAMMPS -simulations to determine, whether the linked LAMMPS library is compatible -with the requirements of the application without crashing during the -LAMMPS functions (e.g. due to missing pair styles from packages) or to -choose between different options (e.g. whether to use ``lj/cut``, -``lj/cut/opt``, ``lj/cut/omp`` or ``lj/cut/intel``). Most of the -functions can be called directly without first creating a LAMMPS -instance. While crashes within LAMMPS may be recovered from through -enabling :ref:`exceptions `, avoiding them proactively is -a safer approach. +These library functions can be used to query the LAMMPS library for +compile time settings and included packages and styles. This enables +programs that use the library interface to determine whether the +linked LAMMPS library is compatible with the requirements of the +application without crashing during the LAMMPS functions (e.g. due to +missing pair styles from packages) or to choose between different +options (e.g. whether to use ``lj/cut``, ``lj/cut/opt``, +``lj/cut/omp`` or ``lj/cut/intel``). Most of the functions can be +called directly without first creating a LAMMPS instance. While +crashes within LAMMPS may be recovered from by enabling +:ref:`exceptions `, avoiding them proactively is a safer +approach. .. code-block:: C :caption: Example for using configuration settings functions diff --git a/doc/src/Library_neighbor.rst b/doc/src/Library_neighbor.rst index 3179b669f1..f50d28b81e 100644 --- a/doc/src/Library_neighbor.rst +++ b/doc/src/Library_neighbor.rst @@ -1,8 +1,8 @@ Accessing LAMMPS Neighbor lists =============================== -The following functions allow to access neighbor lists -generated by LAMMPS or query their properties: +The following functions enable access to neighbor lists generated by +LAMMPS or querying of their properties: - :cpp:func:`lammps_find_compute_neighlist` - :cpp:func:`lammps_find_fix_neighlist` diff --git a/doc/src/Library_objects.rst b/doc/src/Library_objects.rst index 3b87842169..5ce03f84a3 100644 --- a/doc/src/Library_objects.rst +++ b/doc/src/Library_objects.rst @@ -1,8 +1,8 @@ Retrieving or setting properties of LAMMPS objects ================================================== -This section documents accessing or modifying data from objects like -computes, fixes, or variables in LAMMPS using following functions: +This section documents accessing or modifying data stored by computes, +fixes, or variables in LAMMPS using the following functions: - :cpp:func:`lammps_extract_compute` - :cpp:func:`lammps_extract_fix` diff --git a/doc/src/Library_scatter.rst b/doc/src/Library_scatter.rst index e3ca34e999..9594593172 100644 --- a/doc/src/Library_scatter.rst +++ b/doc/src/Library_scatter.rst @@ -1,7 +1,16 @@ Library functions for scatter/gather operations ================================================ -This section documents the following functions: +This section has functions which gather per-atom data from one or more +processors into a contiguous global list ordered by atom ID. The same +list is returned to all calling processors. It also contains +functions which scatter per-atom data from a contiguous global list +across the processors that own those atom IDs. It also has a +create_atoms() function which can create a new simulation by +scattering atms appropriately to owning processors in the LAMMPS +spatial decomposition. + +It documents the following functions: - :cpp:func:`lammps_gather_atoms` - :cpp:func:`lammps_gather_atoms_concat` @@ -14,8 +23,6 @@ This section documents the following functions: - :cpp:func:`lammps_scatter` - :cpp:func:`lammps_scatter_subset` -.. TODO add description - ----------------------- .. doxygenfunction:: lammps_gather_atoms diff --git a/doc/src/Library_utility.rst b/doc/src/Library_utility.rst index 3d2fae53d3..6cc3337d48 100644 --- a/doc/src/Library_utility.rst +++ b/doc/src/Library_utility.rst @@ -1,8 +1,8 @@ Library interface utility functions =================================== -To simplify some of the tasks, the library interface contains -some utility functions that are not directly calling LAMMPS: +To simplify some tasks, the library interface contains these utility +functions. They do not directly call the LAMMPS library. - :cpp:func:`lammps_encode_image_flags` - :cpp:func:`lammps_decode_image_flags` From 9dc42262ec20ad3e7133b3bb1365831b9f95084b Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Thu, 1 Oct 2020 11:34:27 -0600 Subject: [PATCH 064/182] one more edit --- doc/src/Library_scatter.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/Library_scatter.rst b/doc/src/Library_scatter.rst index 9594593172..4fb02ec3e3 100644 --- a/doc/src/Library_scatter.rst +++ b/doc/src/Library_scatter.rst @@ -6,9 +6,9 @@ processors into a contiguous global list ordered by atom ID. The same list is returned to all calling processors. It also contains functions which scatter per-atom data from a contiguous global list across the processors that own those atom IDs. It also has a -create_atoms() function which can create a new simulation by -scattering atms appropriately to owning processors in the LAMMPS -spatial decomposition. +create_atoms() function which can create new atoms by scattering them +appropriately to owning processors in the LAMMPS spatial +decomposition. It documents the following functions: From 243a81e9d883050ec6e899c30db5d773a2c4291b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 1 Oct 2020 14:49:23 -0400 Subject: [PATCH 065/182] must initialize eflag_atom and vflag_atom to zero in constructor --- src/update.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/update.cpp b/src/update.cpp index 492db2bd7c..41a0910556 100644 --- a/src/update.cpp +++ b/src/update.cpp @@ -51,6 +51,7 @@ Update::Update(LAMMPS *lmp) : Pointers(lmp) multireplica = 0; eflag_global = vflag_global = -1; + eflag_atom = vflag_atom = 0; dt_default = 1; unit_style = nullptr; From 533c453a08a583a5c1d430ad692b95db9798a12b Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Thu, 1 Oct 2020 15:00:08 -0400 Subject: [PATCH 066/182] Update Python docs --- doc/src/Python_install.rst | 78 +++++++++++++++++++++------------ doc/src/Python_overview.rst | 2 +- doc/src/Python_run.rst | 86 ++++++++++++++++++++++++++----------- 3 files changed, 112 insertions(+), 54 deletions(-) diff --git a/doc/src/Python_install.rst b/doc/src/Python_install.rst index bff395ddba..ce0bfec346 100644 --- a/doc/src/Python_install.rst +++ b/doc/src/Python_install.rst @@ -35,10 +35,10 @@ Both CMake and traditional make build options offer ways to automate these tasks LAMMPS can be configured and compiled as shared library with CMake by enabling the ``BUILD_SHARED_LIBS`` option. The file name of the shared library depends on the platform (Unix/Linux, MacOS, Windows) and the build configuration - being used. See :ref:`Build the LAMMPS executable and library ` for more details and how the name is - determined. + being used. See :ref:`Build the LAMMPS executable and library ` for more details and how the name of the + shared library and executable is determined. - After compilation, the generated binaries, shared library, Python module, + After compilation, the generated executables, shared library, Python module, and other files can be installed to a custom location defined by the ``CMAKE_INSTALL_PREFIX`` setting. By default, this is set to the current user's ``$HOME/.local`` directory. This leads to an installation to the following locations: @@ -52,6 +52,8 @@ Both CMake and traditional make build options offer ways to automate these tasks | LAMMPS shared library | * ``$HOME/.local/lib/`` (32bit) | | | | * ``$HOME/.local/lib64/`` (64bit) | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS executable | ``$HOME/.local/bin/`` | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ | LAMMPS potential files | ``$HOME/.local/share/lammps/potentials/`` | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ @@ -77,7 +79,7 @@ Both CMake and traditional make build options offer ways to automate these tasks # compile LAMMPS (in parallel for faster builds) cmake --build . --parallel - # install LAMMPS into myvenv + # install LAMMPS into $HOME/.local cmake --install . 2. Configure Environment Variables @@ -100,10 +102,16 @@ Both CMake and traditional make build options offer ways to automate these tasks containing its potential files. This can be set with the ``LAMMPS_POTENTIALS`` environment variable: - .. code-block:: + .. code-block:: bash export LAMMPS_POTENTIALS=$HOME/.local/share/lammps/potentials + If you are planning to also use the LAMMPS executable (e.g., ``lmp``), also set the ``PATH`` variable: + + .. code-block:: bash + + export PATH=$HOME/.local/bin:$PATH + To set these environment variables for each new shell, add the above ``export`` commands at the end of the ``$HOME/.bashrc`` file. @@ -144,6 +152,8 @@ Both CMake and traditional make build options offer ways to automate these tasks | LAMMPS shared library | * ``/usr/lib/`` (32bit) | | | | * ``/usr/lib64/`` (64bit) | | +------------------------+---------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS executable | ``/usr/bin/`` | | + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ | LAMMPS potential files | ``/usr/share/lammps/potentials/`` | | +------------------------+---------------------------------------------------+-------------------------------------------------------------+ @@ -170,10 +180,10 @@ Both CMake and traditional make build options offer ways to automate these tasks sudo cmake --install . Unlike the local user installation, no additional environment - variables need to be set. The system locations such as ``/usr/lib`` and + variables need to be set. The system locations such as ``/usr/lib``, and ``/usr/lib64`` are already part of the search path of the dynamic library - loader. Therefore ``LD_LIBRARY_PATH`` or ``DYLD_LIBRARY_PATH`` on MacOS do not - have be set. + loader. Therefore ``LD_LIBRARY_PATH`` (or ``DYLD_LIBRARY_PATH`` on MacOS) does not + have be set. The same is true for ``PATH``. All other environment variables will be automatically set when launching a new shell. This is due to files installed in system folders @@ -236,6 +246,8 @@ Both CMake and traditional make build options offer ways to automate these tasks | LAMMPS shared library | * ``$VIRTUAL_ENV/lib/`` (32bit) | | | | * ``$VIRTUAL_ENV/lib64/`` (64bit) | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS executable | ``$VIRTUAL_ENV/bin/`` | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ | LAMMPS potential files | ``$VIRTUAL_ENV/share/lammps/potentials/`` | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ @@ -337,7 +349,7 @@ Both CMake and traditional make build options offer ways to automate these tasks wrap LAMMPS. On Linux this is a library file that ends in ``.so``, not ``.a``. - From the src directory, type + From the ``src`` directory, type .. code-block:: bash @@ -375,7 +387,7 @@ Both CMake and traditional make build options offer ways to automate these tasks If you set the paths to these files as environment variables, you only have to do it once. For the csh or tcsh shells, add something like - this to your ~/.cshrc file, one line for each of the two files: + this to your ``~/.cshrc`` file, one line for each of the two files: .. code-block:: csh @@ -414,6 +426,8 @@ Both CMake and traditional make build options offer ways to automate these tasks environment variable as described above. +.. _python_install_mpi4py: + Extending Python to run in parallel =================================== @@ -431,7 +445,7 @@ and as of version 2.0.0 mpi4py allows passing a custom MPI communicator to the LAMMPS constructor, which means one can easily run one or more LAMMPS instances on subsets of the total MPI ranks. -To install mpi4py (version 3.0.3 as of Sep 2020), +Install mpi4py via ``pip`` (version 3.0.3 as of Sep 2020): .. tabs:: @@ -458,6 +472,23 @@ To install mpi4py (version 3.0.3 as of Sep 2020), For more detailed installation instructions, please see the `mpi4py installation `_ page. +.. note:: + + To use mpi4py and LAMMPS in parallel from Python, you must + insure both are using the same version of MPI. If you only have one + MPI installed on your system, this is not an issue, but it can be if + you have multiple MPIs. Your LAMMPS build is explicit about which MPI + it is using, since it is either detected during CMake configuration or + in the traditional make build system you specify the details in your + low-level ``src/MAKE/Makefile.foo`` file. + mpi4py uses the ``mpicc`` command to find + information about the MPI it uses to build against. And it tries to + load "libmpi.so" from the ``LD_LIBRARY_PATH``. This may or may not find + the MPI library that LAMMPS is using. If you have problems running + both mpi4py and LAMMPS together, this is an issue you may need to + address, e.g. by moving other MPI installations so that mpi4py finds + the right one. + If you have successfully installed mpi4py, you should be able to run Python and type @@ -470,7 +501,7 @@ on a simple test script .. code-block:: bash - $ mpirun -np 4 python test.py + $ mpirun -np 4 python3 test.py where ``test.py`` contains the lines @@ -478,22 +509,15 @@ where ``test.py`` contains the lines from mpi4py import MPI comm = MPI.COMM_WORLD - print "Proc %d out of %d procs" % (comm.Get_rank(),comm.Get_size()) + print("Proc %d out of %d procs" % (comm.Get_rank(),comm.Get_size())) and see one line of output for each processor you run on. -.. note:: - - To use mpi4py and LAMMPS in parallel from Python, you must - insure both are using the same version of MPI. If you only have one - MPI installed on your system, this is not an issue, but it can be if - you have multiple MPIs. Your LAMMPS build is explicit about which MPI - it is using, since you specify the details in your low-level - src/MAKE/Makefile.foo file. mpi4py uses the "mpicc" command to find - information about the MPI it uses to build against. And it tries to - load "libmpi.so" from the ``LD_LIBRARY_PATH``. This may or may not find - the MPI library that LAMMPS is using. If you have problems running - both mpi4py and LAMMPS together, this is an issue you may need to - address, e.g. by moving other MPI installations so that mpi4py finds - the right one. +.. code-block:: bash + # NOTE: the line order is not deterministic + $ mpirun -np 4 python3 test.py + Proc 0 out of 4 procs + Proc 1 out of 4 procs + Proc 2 out of 4 procs + Proc 3 out of 4 procs diff --git a/doc/src/Python_overview.rst b/doc/src/Python_overview.rst index b39d841979..e9aba544f9 100644 --- a/doc/src/Python_overview.rst +++ b/doc/src/Python_overview.rst @@ -46,7 +46,7 @@ launch one or more simulations. In Python lingo, this is called Second, the lower-level Python interface can be used indirectly through -the provided :code`PyLammps` and :code:`IPyLammps` wrapper classes, written in Python. +the provided :code:`PyLammps` and :code:`IPyLammps` wrapper classes, written in Python. These wrappers try to simplify the usage of LAMMPS in Python by providing an object-based interface to common LAMMPS functionality. They also reduces the amount of code necessary to parameterize LAMMPS diff --git a/doc/src/Python_run.rst b/doc/src/Python_run.rst index ba8cf77c12..726705e30e 100644 --- a/doc/src/Python_run.rst +++ b/doc/src/Python_run.rst @@ -5,9 +5,9 @@ Running LAMMPS and Python in serial: ------------------------------------- To run a LAMMPS in serial, type these lines into Python -interactively from the bench directory: +interactively from the ``bench`` directory: -.. parsed-literal:: +.. code-block:: python >>> from lammps import lammps >>> lmp = lammps() @@ -17,35 +17,22 @@ Or put the same lines in the file ``test.py`` and run it as .. code-block:: bash - % python test.py + $ python3 test.py Either way, you should see the results of running the ``in.lj`` benchmark on a single processor appear on the screen, the same as if you had typed something like: -.. parsed-literal:: +.. code-block:: bash lmp_serial -in in.lj -Test LAMMPS and Python in parallel: ---------------------------------------- - -To run LAMMPS in parallel, assuming you have installed the -`PyPar `_ package as discussed -above, create a ``test.py`` file containing these lines: - -.. code-block:: python - - import pypar - from lammps import lammps - lmp = lammps() - lmp.file("in.lj") - print "Proc %d out of %d procs has" % (pypar.rank(),pypar.size()),lmp - pypar.finalize() +Running LAMMPS and Python in parallel with MPI (mpi4py) +------------------------------------------------------- To run LAMMPS in parallel, assuming you have installed the `mpi4py `_ package as discussed -above, create a ``test.py`` file containing these lines: +:ref:`python_install_mpi4py`, create a ``test.py`` file containing these lines: .. code-block:: python @@ -55,14 +42,61 @@ above, create a ``test.py`` file containing these lines: lmp.file("in.lj") me = MPI.COMM_WORLD.Get_rank() nprocs = MPI.COMM_WORLD.Get_size() - print "Proc %d out of %d procs has" % (me,nprocs),lmp + print("Proc %d out of %d procs has" % (me,nprocs),lmp) MPI.Finalize() -You can run either script in parallel as: +You can run the script in parallel as: .. code-block:: bash - $ mpirun -np 4 python test.py + $ mpirun -np 4 python3 test.py + +and you should see the same output as if you had typed + +.. code-block:: bash + + $ mpirun -np 4 lmp_mpi -in in.lj + +Note that without the mpi4py specific lines from ``test.py`` + +.. code-block:: + + from lammps import lammps + lmp = lammps() + lmp.file("in.lj") + +running the script with ``mpirun`` on :math:`P` processors would lead to +:math:`P` independent simulations to run parallel, each with a single +processor. Therefore, if you use the mpi4py lines and you see multiple LAMMPS +single processor outputs. that means mpi4py isn't working correctly. + +Also note that once you import the mpi4py module, mpi4py initializes MPI +for you, and you can use MPI calls directly in your Python script, as +described in the mpi4py documentation. The last line of your Python +script should be ``MPI.finalize()``, to insure MPI is shut down +correctly. + +Running LAMMPS and Python in parallel with MPI (pypar) +------------------------------------------------------ + +To run LAMMPS in parallel, assuming you have installed the +`PyPar `_ package as discussed +in :ref:`python_install_mpi4py`, create a ``test.py`` file containing these lines: + +.. code-block:: python + + import pypar + from lammps import lammps + lmp = lammps() + lmp.file("in.lj") + print("Proc %d out of %d procs has" % (pypar.rank(),pypar.size()), lmp) + pypar.finalize() + +You can run the script in parallel as: + +.. code-block:: bash + + $ mpirun -np 4 python3 test.py and you should see the same output as if you had typed @@ -72,7 +106,7 @@ and you should see the same output as if you had typed Note that if you leave out the 3 lines from ``test.py`` that specify PyPar commands you will instantiate and run LAMMPS independently on each of -the :math:`P` processors specified in the mpirun command. In this case you +the :math:`P` processors specified in the ``mpirun`` command. In this case you should get 4 sets of output, each showing that a LAMMPS run was made on a single processor, instead of one set of output showing that LAMMPS ran on 4 processors. If the 1-processor outputs occur, it @@ -84,8 +118,8 @@ described in the PyPar documentation. The last line of your Python script should be ``pypar.finalize()``, to insure MPI is shut down correctly. -Running Python scripts: ---------------------------- +Running Python scripts +---------------------- Note that any Python script (not just for LAMMPS) can be invoked in one of several ways: From c5fc3f2c78afb043dc45add4e154da774781c26a Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Thu, 1 Oct 2020 18:01:07 -0400 Subject: [PATCH 067/182] Update Python_usage.rst --- doc/src/Python_usage.rst | 246 ++++++++++++++++++++------------------- 1 file changed, 127 insertions(+), 119 deletions(-) diff --git a/doc/src/Python_usage.rst b/doc/src/Python_usage.rst index 40705d33df..ebf28b5c35 100644 --- a/doc/src/Python_usage.rst +++ b/doc/src/Python_usage.rst @@ -7,8 +7,8 @@ Creating or deleting a LAMMPS object With the Python interface the creation of a :cpp:class:`LAMMPS ` instance is included in the constructors for the -:py:meth:`lammps `, :py:meth:`PyLammps `, -and :py:meth:`PyLammps ` classes. +:py:class:`lammps `, :py:class:`PyLammps `, +and :py:class:`IPyLammps ` classes. Internally it will call either :cpp:func:`lammps_open` or :cpp:func:`lammps_open_no_mpi` from the C library API to create the class instance. @@ -38,19 +38,22 @@ Here are simple examples using all three Python interfaces: # NOTE: argv[0] is set by the lammps class constructor args = ["-log", "none"] + # create LAMMPS instance lmp = lammps(cmdargs=args) + # get and print numerical version code print("LAMMPS Version: ", lmp.version()) + # explicitly close and delete LAMMPS instance (optional) lmp.close() .. tab:: PyLammps API - The :py:class:`PyLammps` class is a wrapper around the - :py:class:`lammps` class and all of its lower level functions. - By default, it will create a new instance of :py:class:`lammps` passing - along all arguments to the constructor of :py:class:`lammps`. + The :py:class:`PyLammps ` class is a wrapper around the + :py:class:`lammps ` class and all of its lower level functions. + By default, it will create a new instance of :py:class:`lammps ` passing + along all arguments to the constructor of :py:class:`lammps `. .. code-block:: python @@ -58,14 +61,18 @@ Here are simple examples using all three Python interfaces: # NOTE: argv[0] is set by the lammps class constructor args = ["-log", "none"] + # create LAMMPS instance L = PyLammps(cmdargs=args) + # get and print numerical version code print("LAMMPS Version: ", L.version()) + # explicitly close and delete LAMMPS instance (optional) L.close() - :py:class:`PyLammps` objects can also be created on top of an existing :py:class:`lammps` object: + :py:class:`PyLammps ` objects can also be created on top of an existing + :py:class:`lammps ` object: .. code-block:: Python @@ -73,6 +80,7 @@ Here are simple examples using all three Python interfaces: ... # create LAMMPS instance lmp = lammps(cmdargs=args) + # create PyLammps instance using previously created LAMMPS instance L = PyLammps(ptr=lmp) @@ -82,8 +90,8 @@ Here are simple examples using all three Python interfaces: .. tab:: IPyLammps API - The :py:class:`IPyLammps` class is an extension of the - :py:class:`PyLammps` class. It has the same construction behavior. By + The :py:class:`IPyLammps ` class is an extension of the + :py:class:`PyLammps ` class. It has the same construction behavior. By default, it will create a new instance of :py:class:`lammps` passing along all arguments to the constructor of :py:class:`lammps`. @@ -93,10 +101,13 @@ Here are simple examples using all three Python interfaces: # NOTE: argv[0] is set by the lammps class constructor args = ["-log", "none"] + # create LAMMPS instance L = IPyLammps(cmdargs=args) + # get and print numerical version code print("LAMMPS Version: ", L.version()) + # explicitly close and delete LAMMPS instance (optional) L.close() @@ -108,6 +119,7 @@ Here are simple examples using all three Python interfaces: ... # create LAMMPS instance lmp = lammps(cmdargs=args) + # create PyLammps instance using previously created LAMMPS instance L = PyLammps(ptr=lmp) @@ -117,53 +129,13 @@ Here are simple examples using all three Python interfaces: In all of the above cases, same as with the :ref:`C library API `, this will use the ``MPI_COMM_WORLD`` communicator for the MPI library that LAMMPS was -compiled with. The :py:func:`lmp.close() ` call is +compiled with. + +The :py:func:`lmp.close() ` call is optional since the LAMMPS class instance will also be deleted automatically during the :py:class:`lammps ` class destructor. -.. code-block:: Python - - lmp = lammps() # create a LAMMPS object using the default liblammps.so library - # 4 optional args are allowed: name, cmdargs, ptr, comm - lmp = lammps(ptr=lmpptr) # use lmpptr as previously created LAMMPS object - lmp = lammps(comm=split) # create a LAMMPS object with a custom communicator, requires mpi4py 2.0.0 or later - lmp = lammps(name="g++") # create a LAMMPS object using the liblammps_g++.so library - lmp = lammps(name="g++",cmdargs=list) # add LAMMPS command-line args, e.g. list = ["-echo","screen"] - - lmp.close() # destroy a LAMMPS object - -The lines - -.. code-block:: Python - - from lammps import lammps - lmp = lammps() - -create an instance of LAMMPS, wrapped in a Python class by the lammps -Python module, and return an instance of the Python class as lmp. It -is used to make all subsequent calls to the LAMMPS library. - -Additional arguments to lammps() can be used to tell Python the name -of the shared library to load or to pass arguments to the LAMMPS -instance, the same as if LAMMPS were launched from a command-line -prompt. - -If the ptr argument is set like this: - -.. code-block:: Python - - lmp = lammps(ptr=lmpptr) - -then lmpptr must be an argument passed to Python via the LAMMPS -:doc:`python ` command, when it is used to define a Python -function that is invoked by the LAMMPS input script. This mode of -calling Python from LAMMPS is described in the :doc:`Python call ` doc page. The variable lmpptr refers to the -instance of LAMMPS that called the embedded Python interpreter. Using -it as an argument to lammps() allows the returned Python class -instance "lmp" to make calls to that instance of LAMMPS. See the -:doc:`python ` command doc page for examples using this syntax. - Note that you can create multiple LAMMPS objects in your Python script, and coordinate and run multiple simulations, e.g. @@ -178,12 +150,13 @@ script, and coordinate and run multiple simulations, e.g. Executing LAMMPS commands ************************* -Once an instance of the :py:class:`lammps`, :py:class:`PyLammps`, or -:py:class:`IPyLammps` class is created, there are multiple ways to "feed" it -commands. In a way that is not very different from running a LAMMPS input -script, except that Python has many more facilities for structured -programming than the LAMMPS input script syntax. Furthermore it is possible -to "compute" what the next LAMMPS command should be. +Once an instance of the :py:class:`lammps `, +:py:class:`PyLammps `, or +:py:class:`IPyLammps ` class is created, there are +multiple ways to "feed" it commands. In a way that is not very different from +running a LAMMPS input script, except that Python has many more facilities +for structured programming than the LAMMPS input script syntax. Furthermore +it is possible to "compute" what the next LAMMPS command should be. .. tabs:: @@ -194,20 +167,24 @@ to "compute" what the next LAMMPS command should be. single string, a list of strings and a block of commands in a single multi-line string. They are processed under the same boundary conditions as the C library counterparts. The example below demonstrates the use - of :py:func:`lammps.file`, :py:func:`lammps.command`, - :py:func:`lammps.commands_list`, and :py:func:`lammps.commands_string`: + of :py:func:`lammps.file()`, :py:func:`lammps.command()`, + :py:func:`lammps.commands_list()`, and :py:func:`lammps.commands_string()`: .. code-block:: python from lammps import lammps lmp = lammps() + # read commands from file 'in.melt' lmp.file('in.melt') + # issue a single command lmp.command('variable zpos index 1.0') + # create 10 groups with 10 atoms each cmds = ["group g{} id {}:{}".format(i,10*i+1,10*(i+1)) for i in range(10)] lmp.commands_list(cmds) + # run commands from a multi-line string block = """ clear @@ -220,7 +197,8 @@ to "compute" what the next LAMMPS command should be. .. tab:: PyLammps/IPyLammps API Unlike the lammps API, the PyLammps/IPyLammps APIs allow running LAMMPS - commands by calling equivalent member functions. + commands by calling equivalent member functions of :py:class:`PyLammps ` + and :py:class:`IPyLammps ` instances. For instance, the following LAMMPS command @@ -228,7 +206,8 @@ to "compute" what the next LAMMPS command should be. region box block 0 10 0 5 -0.5 0.5 - can be executed using the following Python code if *L* is a :py:class:`lammps` instance: + can be executed using with the lammps AI with the following Python code if *L* is an + instance of :py:class:`lammps `: .. code-block:: Python @@ -236,7 +215,7 @@ to "compute" what the next LAMMPS command should be. With the PyLammps interface, any LAMMPS command can be split up into arbitrary parts. These parts are then passed to a member function with the name of the command. - For the ``region`` command that means the :code:`region` method can be called. + For the ``region`` command that means the :code:`region()` method can be called. The arguments of the command can be passed as one string, or individually. @@ -269,10 +248,13 @@ to "compute" what the next LAMMPS command should be. from lammps import PyLammps L = PyLammps() + # read commands from file 'in.melt' L.file('in.melt') + # issue a single command L.variable('zpos', 'index', 1.0) + # create 10 groups with 10 atoms each for i in range(10): L.group(f"g{i}", "id", f"{10*i+1}:{10*(i+1)}") @@ -283,76 +265,102 @@ to "compute" what the next LAMMPS command should be. L.create_atoms(1, "single", 1.0, 1.0, "${zpos}") -.. code-block:: Python - - lmp.file(file) # run an entire input script, file = "in.lj" - lmp.command(cmd) # invoke a single LAMMPS command, cmd = "run 100" - lmp.commands_list(cmdlist) # invoke commands in cmdlist = **"run 10", "run 20"** - lmp.commands_string(multicmd) # invoke commands in multicmd = "run 10\nrun 20" - -The file(), command(), commands_list(), commands_string() methods -allow an input script, a single command, or multiple commands to be -invoked. - - Retrieving or setting LAMMPS system properties ********************************************** -.. code-block:: Python +Similar to what is described in :doc:`Library_properties`, the instances of +:py:class:`lammps `, :py:class:`PyLammps `, or +:py:class:`IPyLammps ` can be used to extract different kinds +of information about the active LAMMPS instance and also to modify some of it. The +main difference between the interfaces is how the information is exposed. - version = lmp.version() # return the numerical version id, e.g. LAMMPS 2 Sep 2015 -> 20150902 +While the :py:class:`lammps ` is just a thin layer that wraps C API calls, +:py:class:`PyLammps ` and :py:class:`IPyLammps ` expose +information as objects and properties. - size = lmp.extract_setting(name) # return data type info +In some cases the data returned is a direct reference to the original data +inside LAMMPS cast to ``ctypes`` pointers. Where possible, the wrappers will +determine the ``ctypes`` data type and cast pointers accordingly. If +``numpy`` is installed arrays can also be extracted as numpy arrays, which +will access the C arrays directly and have the correct dimensions to protect +against invalid accesses. - xlo = lmp.extract_global(name,type) # extract a global quantity - # name = "boxxlo", "nlocal", etc - # type = 0 = int - # 1 = double +.. warning:: - boxlo,boxhi,xy,yz,xz,periodicity,box_change = lmp.extract_box() # extract box info + When accessing per-atom data, + please note that this data is the per-processor local data and indexed + accordingly. These arrays can change sizes and order at every neighbor list + rebuild and atom sort event as atoms are migrating between sub-domains. + +.. tabs:: + + .. tab:: lammps API + + .. code-block:: python + + from lammps import lammps + + lmp = lammps() + lmp.file("in.sysinit") + + natoms = lmp.get_natoms() + print(f"running simulation with {natoms} atoms") + + lmp.command("run 1000 post no"); + + for i in range(10): + lmp.command("run 100 pre no post no") + pe = lmp.get_thermo("pe") + ke = lmp.get_thermo("ke") + print(f"PE = {pe}\nKE = {ke}") + + lmp.close() + + Methods: + + * :py:meth:`get_version() `: return the numerical version id, e.g. LAMMPS 2 Sep 2015 -> 20150902 + * :py:meth:`get_thermo() `: return current value of a thermo keyword + * :py:meth:`get_natoms() `: total # of atoms as int + * :py:meth:`reset_box() `: reset the simulation box size + * :py:meth:`extract_setting() `: return a global setting + * :py:meth:`extract_global() `: extract a global quantity + * :py:meth:`extract_atom() `: extract a per-atom quantity + * :py:meth:`extract_box() `: extract box info + * :py:meth:`create_atoms() `: create N atoms with IDs, types, x, v, and image flags + + Numpy Methods: + + * :py:meth:`numpy.extract_atom() `: extract a per-atom quantity as numpy array + + .. tab:: PyLammps/IPyLammps API + + .. code-block:: python + + from lammps import PyLammps + + L = PyLammps() + L.file("in.sysinit") + + print(f"running simulation with {L.system.natoms} atoms") + + L.run(1000, "post no"); + + for i in range(10): + L.run(100, "pre no post no") + pe = L.eval("pe") + ke = L.eval("ke") + print(f"PE = {pe}\nKE = {ke}") - value = lmp.get_thermo(name) # return current value of a thermo keyword - natoms = lmp.get_natoms() # total # of atoms as int - - lmp.reset_box(boxlo,boxhi,xy,yz,xz) # reset the simulation box size - - lmp.create_atoms(n,ids,types,x,v,image,shrinkexceed) # create N atoms with IDs, types, x, v, and image flags - - -The :py:meth:`get_thermo() ` method returns the current value of a thermo -keyword as a float. - -The get_natoms() method returns the total number of atoms in the -simulation, as an int. - - -The reset_box() method resets the size and shape of the simulation -box, e.g. as part of restoring a previously extracted and saved state -of a simulation. - - -The extract_setting(), extract_global(), extract_box(), -extract_atom(), extract_compute(), extract_fix(), and -extract_variable() methods return values or pointers to data -structures internal to LAMMPS. - -For extract_global() see the src/library.cpp file for the list of -valid names. New names could easily be added. A double or integer is -returned. You need to specify the appropriate data type via the type -argument. Retrieving or setting properties of LAMMPS objects ************************************************** -.. code-block:: Python +* :py:meth:`extract_compute() ` +* :py:meth:`extract_fix() ` +* :py:meth:`extract_variable() ` - coords = lmp.extract_atom(name,type) # extract a per-atom quantity - # name = "x", "type", etc - # type = 0 = vector of ints - # 1 = array of ints - # 2 = vector of doubles - # 3 = array of doubles +.. code-block:: Python eng = lmp.extract_compute(id,style,type) # extract value(s) from a compute v3 = lmp.extract_fix(id,style,type,i,j) # extract value(s) from a fix From 48c45767f9ff9deb804ced678ce9ffd7de62ad77 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 1 Oct 2020 18:11:08 -0400 Subject: [PATCH 068/182] remove dead code --- src/USER-DIFFRACTION/fix_saed_vtk.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/USER-DIFFRACTION/fix_saed_vtk.cpp b/src/USER-DIFFRACTION/fix_saed_vtk.cpp index 00cfcbf91a..b39bc7ab99 100644 --- a/src/USER-DIFFRACTION/fix_saed_vtk.cpp +++ b/src/USER-DIFFRACTION/fix_saed_vtk.cpp @@ -145,8 +145,6 @@ FixSAEDVTK::FixSAEDVTK(LAMMPS *lmp, int narg, char **arg) : memory->create(vector,nrows,"saed/vtk:vector"); memory->create(vector_total,nrows,"saed/vtk:vector_total"); - extlist = nullptr; - vector_flag = 1; size_vector = nrows; @@ -282,7 +280,6 @@ FixSAEDVTK::FixSAEDVTK(LAMMPS *lmp, int narg, char **arg) : FixSAEDVTK::~FixSAEDVTK() { - delete [] extlist; delete [] filename; delete [] ids; memory->destroy(vector); From 2ea61b21f87eb9560a0ef1e1bb4266c225012c94 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 1 Oct 2020 18:11:19 -0400 Subject: [PATCH 069/182] fix small memory leaks --- src/USER-MISC/compute_viscosity_cos.cpp | 4 +++- src/compute_slice.cpp | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/USER-MISC/compute_viscosity_cos.cpp b/src/USER-MISC/compute_viscosity_cos.cpp index 4a798eb158..383fa17be2 100644 --- a/src/USER-MISC/compute_viscosity_cos.cpp +++ b/src/USER-MISC/compute_viscosity_cos.cpp @@ -53,8 +53,10 @@ ComputeViscosityCos::ComputeViscosityCos(LAMMPS *lmp, int narg, char **arg) : /* ---------------------------------------------------------------------- */ ComputeViscosityCos::~ComputeViscosityCos() { - if (!copymode) + if (!copymode) { delete[] vector; + delete[] extlist; + } } /* ---------------------------------------------------------------------- */ diff --git a/src/compute_slice.cpp b/src/compute_slice.cpp index 036a9bb289..7c56f07582 100644 --- a/src/compute_slice.cpp +++ b/src/compute_slice.cpp @@ -224,6 +224,7 @@ ComputeSlice::~ComputeSlice() for (int m = 0; m < nvalues; m++) delete [] ids[m]; delete [] ids; delete [] value2index; + delete [] extlist; memory->destroy(vector); memory->destroy(array); From 2c7a686220cb4298f939d30d6d2bed67ab18cf43 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 1 Oct 2020 23:20:52 -0400 Subject: [PATCH 070/182] update fortran2 module --- examples/COUPLE/fortran2/LAMMPS.F90 | 2703 +++++++++++------ .../COUPLE/fortran2/{makefile => Makefile} | 0 examples/COUPLE/fortran2/README | 530 ++-- 3 files changed, 2026 insertions(+), 1207 deletions(-) rename examples/COUPLE/fortran2/{makefile => Makefile} (100%) diff --git a/examples/COUPLE/fortran2/LAMMPS.F90 b/examples/COUPLE/fortran2/LAMMPS.F90 index db370b23a4..eb2b8f3eba 100644 --- a/examples/COUPLE/fortran2/LAMMPS.F90 +++ b/examples/COUPLE/fortran2/LAMMPS.F90 @@ -1,942 +1,1761 @@ -!! ----------------------------------------------------------------------- -! LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator -! www.cs.sandia.gov/~sjplimp/lammps.html -! Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories -! -! 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: Karl D. Hammond -! University of Tennessee, Knoxville (USA), 2012 -!-------------------------------------------------------------------------- - -!! LAMMPS, a Fortran 2003 module containing an interface between Fortran -!! programs and the C-style functions in library.cpp that ship with LAMMPS. -!! This file should be accompanied by LAMMPS-wrapper.cpp and LAMMPS-wrapper.h, -!! which define wrapper functions that ease portability and enforce array -!! dimensions. -!! -!! Everything in this module should be 100% portable by way of Fortran 2003's -!! ISO_C_BINDING intrinsic module. See the README for instructions for -!! compilation and use. -!! -!! Here are the PUBLIC functions and subroutines included in this module. -!! subroutine lammps_open (command_line, communicator, ptr) -!! subroutine lammps_open_no_mpi (command_line, ptr) -!! subroutine lammps_close (ptr) -!! subroutine lammps_file (ptr, str) -!! subroutine lammps_command (ptr, str) -!! subroutine lammps_free (ptr) -!! subroutine lammps_extract_global (global, ptr, name) -!! subroutine lammps_extract_atom (atom, ptr, name) -!! subroutine lammps_extract_fix (fix, ptr, id, style, type, i, j) -!! subroutine lammps_extract_compute (compute, ptr, id, style, type) -!! subroutine lammps_extract_variable (variable, ptr, name, group) -!! function lammps_get_natoms (ptr) -!! subroutine lammps_gather_atoms (ptr, name, count, data) -!! subroutine lammps_scatter_atoms (ptr, name, data) - -#define FLERR __FILE__,__LINE__ -! The above line allows for similar error checking as is done with standard -! LAMMPS files. - -module LAMMPS - - use, intrinsic :: ISO_C_binding, only : C_double, C_int, C_ptr, C_char, & - C_NULL_CHAR, C_loc, C_F_pointer, lammps_instance => C_ptr - implicit none - private - public :: lammps_open, lammps_open_no_mpi, lammps_close, lammps_file, & - lammps_command, lammps_free, lammps_extract_global, & - lammps_extract_atom, lammps_extract_compute, lammps_extract_fix, & - lammps_extract_variable, lammps_get_natoms, lammps_gather_atoms, & - lammps_scatter_atoms - public :: lammps_instance, C_ptr, C_double, C_int - - !! Functions supplemental to the prototypes in library.h. {{{1 - !! The function definitions (in C++) are contained in LAMMPS-wrapper.cpp. - !! I would have written the first in Fortran, but the MPI libraries (which - !! were written in C) have C-based functions to convert from Fortran MPI - !! handles to C MPI handles, and there is no Fortran equivalent for those - !! functions. - interface - subroutine lammps_open_wrapper (argc, argv, communicator, ptr) & - bind (C, name='lammps_open_fortran_wrapper') - import :: C_int, C_ptr - integer (C_int), value :: argc - type (C_ptr), dimension(*) :: argv - integer, value :: communicator - type (C_ptr) :: ptr - end subroutine lammps_open_wrapper - subroutine lammps_actual_error_all (ptr, file, line, str) & - bind (C, name='lammps_error_all') - import :: C_int, C_char, C_ptr - type (C_ptr), value :: ptr - character (kind=C_char), dimension(*), intent(in) :: file, str - integer (C_int), value :: line - end subroutine lammps_actual_error_all - function lammps_get_ntypes (ptr) result (ntypes) & - bind (C, name='lammps_get_ntypes') - import :: C_int, C_ptr - type (C_ptr), value :: ptr - integer (C_int) :: ntypes - end function lammps_get_ntypes - function lammps_actual_extract_compute_vectorsize (ptr, id, style) & - result (vectorsize) bind (C, name='lammps_extract_compute_vectorsize') - import :: C_int, C_char, C_ptr - integer (C_int) :: vectorsize - type (C_ptr), value :: ptr - character (kind=C_char), dimension(*) :: id - integer (C_int), value :: style - end function lammps_actual_extract_compute_vectorsize - subroutine lammps_actual_extract_compute_arraysize (ptr, id, style, & - nrows, ncols) bind (C, name='lammps_extract_compute_arraysize') - import :: C_int, C_char, C_ptr - integer (C_int) :: arraysize - type (C_ptr), value :: ptr - character (kind=C_char), dimension(*) :: id - integer (C_int), value :: style - integer (C_int) :: nrows, ncols - end subroutine lammps_actual_extract_compute_arraysize - function lammps_actual_extract_fix_vectorsize (ptr, id, style) & - result (vectorsize) bind (C, name='lammps_extract_fix_vectorsize') - import :: C_int, C_char, C_ptr - integer (C_int) :: vectorsize - type (C_ptr), value :: ptr - character (kind=C_char), dimension(*) :: id - integer (C_int), value :: style - end function lammps_actual_extract_fix_vectorsize - subroutine lammps_actual_extract_fix_arraysize (ptr, id, style, & - nrows, ncols) bind (C, name='lammps_extract_fix_arraysize') - import :: C_int, C_char, C_ptr - type (C_ptr), value :: ptr - character (kind=C_char), dimension(*) :: id - integer (C_int), value :: style - integer (C_int) :: nrows, ncols - end subroutine lammps_actual_extract_fix_arraysize - end interface - - !! Functions/subroutines defined in library.h and library.cpp {{{1 - interface - subroutine lammps_actual_open_no_mpi (argc, argv, ptr) & - bind (C, name='lammps_open_no_mpi') - import :: C_int, C_ptr - integer (C_int), value :: argc - type (C_ptr), dimension(*) :: argv - type (C_ptr) :: ptr - end subroutine lammps_actual_open_no_mpi - - subroutine lammps_close (ptr) bind (C, name='lammps_close') - import :: C_ptr - type (C_ptr), value :: ptr - end subroutine lammps_close - - subroutine lammps_actual_file (ptr, str) bind (C, name='lammps_file') - import :: C_ptr, C_char - type (C_ptr), value :: ptr - character (kind=C_char), dimension(*) :: str - end subroutine lammps_actual_file - - function lammps_actual_command (ptr, str) result (command) & - bind (C, name='lammps_command') - import :: C_ptr, C_char - type (C_ptr), value :: ptr - character (kind=C_char), dimension(*) :: str - type (C_ptr) :: command - end function lammps_actual_command - - subroutine lammps_free (ptr) bind (C, name='lammps_free') - import :: C_ptr - type (C_ptr), value :: ptr - end subroutine lammps_free - - function lammps_actual_extract_global (ptr, name) & - bind (C, name='lammps_extract_global') result (global) - import :: C_ptr, C_char - type (C_ptr), value :: ptr - character (kind=C_char), dimension(*) :: name - type (C_ptr) :: global - end function lammps_actual_extract_global - - function lammps_actual_extract_atom (ptr, name) & - bind (C, name='lammps_extract_atom') result (atom) - import :: C_ptr, C_char - type (C_ptr), value :: ptr - character (kind=C_char), dimension(*) :: name - type (C_ptr) :: atom - end function lammps_actual_extract_atom - - function lammps_actual_extract_compute (ptr, id, style, type) & - result (compute) bind (C, name='lammps_extract_compute') - import :: C_ptr, C_char, C_int - type (C_ptr), value :: ptr - character (kind=C_char), dimension(*) :: id - integer (C_int), value :: style, type - type (C_ptr) :: compute - end function lammps_actual_extract_compute - - function lammps_actual_extract_fix (ptr, id, style, type, i, j) & - result (fix) bind (C, name='lammps_extract_fix') - import :: C_ptr, C_char, C_int - type (C_ptr), value :: ptr - character (kind=C_char), dimension(*) :: id - integer (C_int), value :: style, type, i, j - type (C_ptr) :: fix - end function lammps_actual_extract_fix - - function lammps_actual_extract_variable (ptr, name, group) & - result (variable) bind (C, name='lammps_extract_variable') - import :: C_ptr, C_char - type (C_ptr), value :: ptr - character (kind=C_char), dimension(*) :: name, group - type (C_ptr) :: variable - end function lammps_actual_extract_variable - - function lammps_get_natoms (ptr) result (natoms) & - bind (C, name='lammps_get_natoms') - import :: C_ptr, C_int - type (C_ptr), value :: ptr - integer (C_int) :: natoms - end function lammps_get_natoms - - subroutine lammps_actual_gather_atoms (ptr, name, type, count, data) & - bind (C, name='lammps_gather_atoms') - import :: C_ptr, C_int, C_char - type (C_ptr), value :: ptr, data - character (kind=C_char), dimension(*) :: name - integer (C_int), value :: type, count - end subroutine lammps_actual_gather_atoms - - subroutine lammps_actual_scatter_atoms (ptr, name, type, count, data) & - bind (C, name='lammps_scatter_atoms') - import :: C_ptr, C_int, C_char - type (C_ptr), value :: ptr, data - character (kind=C_char), dimension(*) :: name - integer (C_int), value :: type, count - end subroutine lammps_actual_scatter_atoms - end interface - - ! Generic functions for the wrappers below {{{1 - - interface lammps_extract_global - module procedure lammps_extract_global_i, & - lammps_extract_global_dp - end interface lammps_extract_global - - interface lammps_extract_atom - module procedure lammps_extract_atom_ia, & - lammps_extract_atom_dpa, & - lammps_extract_atom_dp2a - end interface lammps_extract_atom - - interface lammps_extract_compute - module procedure lammps_extract_compute_dp, & - lammps_extract_compute_dpa, & - lammps_extract_compute_dp2a - end interface lammps_extract_compute - - interface lammps_extract_fix - module procedure lammps_extract_fix_dp, & - lammps_extract_fix_dpa, & - lammps_extract_fix_dp2a - end interface lammps_extract_fix - - interface lammps_extract_variable - module procedure lammps_extract_variable_dp, & - lammps_extract_variable_dpa - end interface lammps_extract_variable - - interface lammps_gather_atoms - module procedure lammps_gather_atoms_ia, lammps_gather_atoms_dpa - end interface lammps_gather_atoms - - interface lammps_scatter_atoms - module procedure lammps_scatter_atoms_ia, lammps_scatter_atoms_dpa - end interface lammps_scatter_atoms - -contains !! Wrapper functions local to this module {{{1 - - subroutine lammps_open (command_line, communicator, ptr) - character (len=*), intent(in) :: command_line - integer, intent(in) :: communicator - type (C_ptr) :: ptr - integer (C_int) :: argc - type (C_ptr), dimension(:), allocatable :: argv - character (kind=C_char), dimension(len_trim(command_line)+1), target :: & - c_command_line - c_command_line = string2Cstring (command_line) - call Cstring2argcargv (c_command_line, argc, argv) - call lammps_open_wrapper (argc, argv, communicator, ptr) - deallocate (argv) - end subroutine lammps_open - -!----------------------------------------------------------------------------- - - subroutine lammps_open_no_mpi (command_line, ptr) - character (len=*), intent(in) :: command_line - type (C_ptr) :: ptr - integer (C_int) :: argc - type (C_ptr), dimension(:), allocatable :: argv - character (kind=C_char), dimension(len_trim(command_line)+1), target :: & - c_command_line - c_command_line = string2Cstring (command_line) - call Cstring2argcargv (c_command_line, argc, argv) - call lammps_actual_open_no_mpi (argc, argv, ptr) - deallocate (argv) - end subroutine lammps_open_no_mpi - -!----------------------------------------------------------------------------- - - subroutine lammps_file (ptr, str) - type (C_ptr) :: ptr - character (len=*) :: str - character (kind=C_char), dimension(len_trim(str)+1) :: Cstr - Cstr = string2Cstring (str) - call lammps_actual_file (ptr, Cstr) - end subroutine lammps_file - -!----------------------------------------------------------------------------- - - subroutine lammps_command (ptr, str) - type (C_ptr) :: ptr - character (len=*) :: str - character (kind=C_char), dimension(len_trim(str)+1) :: Cstr - type (C_ptr) :: dummy - Cstr = string2Cstring (str) - dummy = lammps_actual_command (ptr, Cstr) - end subroutine lammps_command - -!----------------------------------------------------------------------------- - -! lammps_extract_global {{{2 - function lammps_extract_global_Cptr (ptr, name) result (global) - type (C_ptr) :: global - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: name - character (kind=C_char), dimension(len_trim(name)+1) :: Cname - Cname = string2Cstring (name) - global = lammps_actual_extract_global (ptr, Cname) - end function lammps_extract_global_Cptr - subroutine lammps_extract_global_i (global, ptr, name) - integer (C_int), pointer, intent(out) :: global - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: name - type (C_ptr) :: Cptr - Cptr = lammps_extract_global_Cptr (ptr, name) - call C_F_pointer (Cptr, global) - end subroutine lammps_extract_global_i - subroutine lammps_extract_global_dp (global, ptr, name) - real (C_double), pointer, intent(out) :: global - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: name - type (C_ptr) :: Cptr - Cptr = lammps_extract_global_Cptr (ptr, name) - call C_F_pointer (Cptr, global) - end subroutine lammps_extract_global_dp - -!----------------------------------------------------------------------------- - -! lammps_extract_atom {{{2 - function lammps_extract_atom_Cptr (ptr, name) result (atom) - type (C_ptr) :: atom - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: name - character (kind=C_char), dimension(len_trim(name)+1) :: Cname - Cname = string2Cstring (name) - atom = lammps_actual_extract_atom (ptr, Cname) - end function lammps_extract_atom_Cptr - subroutine lammps_extract_atom_ia (atom, ptr, name) - integer (C_int), dimension(:), pointer, intent(out) :: atom - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: name - type (C_ptr) :: Cptr - integer (C_int), pointer :: nelements - call lammps_extract_global_i (nelements, ptr, 'nlocal') - Cptr = lammps_extract_atom_Cptr (ptr, name) - call C_F_pointer (Cptr, atom, (/nelements/)) - end subroutine lammps_extract_atom_ia - subroutine lammps_extract_atom_dpa (atom, ptr, name) - real (C_double), dimension(:), pointer, intent(out) :: atom - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: name - type (C_ptr) :: Cptr - integer (C_int), pointer :: nlocal - integer :: nelements - real (C_double), dimension(:), pointer :: Fptr - if ( name == 'mass' ) then - nelements = lammps_get_ntypes (ptr) + 1 - else if ( name == 'x' .or. name == 'v' .or. name == 'f' .or. & - name == 'mu' .or. name == 'omega' .or. name == 'torque' .or. & - name == 'angmom' ) then - ! We should not be getting a rank-2 array here! - call lammps_error_all (ptr, FLERR, 'You cannot extract those atom& - & data (' // trim(name) // ') into a rank 1 array.') - return - else - ! Everything else we can get is probably nlocal units long - call lammps_extract_global_i (nlocal, ptr, 'nlocal') - nelements = nlocal - end if - Cptr = lammps_extract_atom_Cptr (ptr, name) - call C_F_pointer (Cptr, Fptr, (/nelements/)) - if ( name == 'mass' ) then - atom(0:) => Fptr - else - atom => Fptr - end if - end subroutine lammps_extract_atom_dpa - subroutine lammps_extract_atom_dp2a (atom, ptr, name) - real (C_double), dimension(:,:), pointer, intent(out) :: atom - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: name - type (C_ptr) :: Cptr - type (C_ptr), pointer, dimension(:) :: Catom - integer (C_int), pointer :: nelements - if ( name /= 'x' .and. name /= 'v' .and. name /= 'f' .and. & - name /= 'mu' .and. name /= 'omega' .and. name /= 'tandque' .and. & - name /= 'angmom' ) then - ! We should not be getting a rank-2 array here! - call lammps_error_all (ptr, FLERR, 'You cannot extract those atom& - & data (' // trim(name) // ') into a rank 2 array.') - return - end if - Cptr = lammps_extract_atom_Cptr (ptr, name) - call lammps_extract_global_i (nelements, ptr, 'nlocal') - ! Catom will now be the array of void* pointers that the void** pointer - ! pointed to. Catom(1) is now the pointer to the first element. - call C_F_pointer (Cptr, Catom, (/nelements/)) - ! Now get the actual array, which has its shape transposed from what we - ! might think of it in C - call C_F_pointer (Catom(1), atom, (/3, nelements/)) - end subroutine lammps_extract_atom_dp2a - -!----------------------------------------------------------------------------- - -! lammps_extract_compute {{{2 - function lammps_extract_compute_Cptr (ptr, id, style, type) result (compute) - type (C_ptr) :: compute - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: id - integer, intent(in) :: style, type - integer (kind=C_int) :: Cstyle, Ctype - character (kind=C_char), dimension(len_trim(id)+1) :: Cid - Cid = string2Cstring (id) - Cstyle = style - Ctype = type - compute = lammps_actual_extract_compute (ptr, Cid, Cstyle, Ctype) - end function lammps_extract_compute_Cptr - subroutine lammps_extract_compute_dp (compute, ptr, id, style, type) - real (C_double), pointer, intent(out) :: compute - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: id - integer, intent(in) :: style, type - type (C_ptr) :: Cptr - ! The only valid values of (style,type) are (0,0) for scalar 'compute' - if ( style /= 0 ) then - call lammps_error_all (ptr, FLERR, 'You cannot pack per-atom/local& - & data into a scalar.') - return - end if - if ( type == 1 ) then - call lammps_error_all (ptr, FLERR, 'You cannot extract a compute& - & vector (rank 1) into a scalar.') - return - else if ( type == 2 ) then - call lammps_error_all (ptr, FLERR, 'You cannot extract a compute& - & array (rank 2) into a scalar.') - return - end if - Cptr = lammps_extract_compute_Cptr (ptr, id, style, type) - call C_F_pointer (Cptr, compute) - end subroutine lammps_extract_compute_dp - subroutine lammps_extract_compute_dpa (compute, ptr, id, style, type) - real (C_double), dimension(:), pointer, intent(out) :: compute - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: id - integer, intent(in) :: style, type - type (C_ptr) :: Cptr - integer :: nelements - ! Check for the correct dimensionality - if ( type == 0 ) then - call lammps_error_all (ptr, FLERR, 'You cannot extract a compute& - & scalar (rank 0) into a rank 1 variable.') - return - else if ( type == 2 ) then - call lammps_error_all (ptr, FLERR, 'You cannot extract a compute& - & array (rank 2) into a rank 1 variable.') - return - end if - nelements = lammps_extract_compute_vectorsize (ptr, id, style) - Cptr = lammps_extract_compute_Cptr (ptr, id, style, type) - call C_F_pointer (Cptr, compute, (/nelements/)) - end subroutine lammps_extract_compute_dpa - subroutine lammps_extract_compute_dp2a (compute, ptr, id, style, type) - real (C_double), dimension(:,:), pointer, intent(out) :: compute - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: id - integer, intent(in) :: style, type - type (C_ptr) :: Cptr - type (C_ptr), pointer, dimension(:) :: Ccompute - integer :: nr, nc - ! Check for the correct dimensionality - if ( type == 0 ) then - call lammps_error_all (ptr, FLERR, 'You cannot extract a compute& - & scalar (rank 0) into a rank 2 variable.') - return - else if ( type == 1 ) then - call lammps_error_all (ptr, FLERR, 'You cannot extract a compute& - & array (rank 1) into a rank 2 variable.') - return - end if - call lammps_extract_compute_arraysize (ptr, id, style, nr, nc) - Cptr = lammps_extract_compute_Cptr (ptr, id, style, type) - call C_F_pointer (Cptr, Ccompute, (/nr/)) - ! Note that the matrix is transposed, from Fortran's perspective - call C_F_pointer (Ccompute(1), compute, (/nc, nr/)) - end subroutine lammps_extract_compute_dp2a - -!----------------------------------------------------------------------------- - -! lammps_extract_fix {{{2 - function lammps_extract_fix_Cptr (ptr, id, style, type, i, j) & - result (fix) - type (C_ptr) :: fix - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: id - integer, intent(in) :: style, type, i, j - character (kind=C_char), dimension(len_trim(id)+1) :: Cid - integer (kind=C_int) :: Cstyle, Ctype, Ci, Cj - Cid = string2Cstring (id) - Cstyle = style - Ctype = type - Ci = i - 1 ! This is for consistency with the values from f_ID[i], - Cj = j - 1 ! which is different from what library.cpp uses! - if ( (type >= 1 .and. Ci < 0) .or. & - (type == 2 .and. (Ci < 0 .or. Cj < 0) ) ) then - call lammps_error_all (ptr, FLERR, 'Index out of range in& - & lammps_extract_fix') - end if - fix = lammps_actual_extract_fix (ptr, Cid, Cstyle, Ctype, Ci, Cj) - end function lammps_extract_fix_Cptr - subroutine lammps_extract_fix_dp (fix, ptr, id, style, type, i, j) - real (C_double), intent(out) :: fix - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: id - integer, intent(in) :: style, type, i, j - type (C_ptr) :: Cptr - real (C_double), pointer :: Fptr - ! Check for the correct dimensionality - if ( style /= 0 ) then - select case (type) - case (0) - call lammps_error_all (ptr, FLERR, 'There is no per-atom or local& - & scalar data available from fixes.') - case (1) - call lammps_error_all (ptr, FLERR, 'You cannot extract a fix''s & - &per-atom/local vector (rank 1) into a scalar.') - case (2) - call lammps_error_all (ptr, FLERR, 'You cannot extract a fix''s & - &per-atom/local array (rank 2) into a scalar.') - case default - call lammps_error_all (ptr, FLERR, 'Invalid extract_fix style/& - &type combination.') - end select - return - end if - Cptr = lammps_extract_fix_Cptr (ptr, id, style, type, i, j) - call C_F_pointer (Cptr, Fptr) - fix = Fptr - nullify (Fptr) - ! Memory is only allocated for "global" fix variables - if ( style == 0 ) call lammps_free (Cptr) - end subroutine lammps_extract_fix_dp - subroutine lammps_extract_fix_dpa (fix, ptr, id, style, type, i, j) - real (C_double), dimension(:), pointer, intent(out) :: fix - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: id - integer, intent(in) :: style, type, i, j - type (C_ptr) :: Cptr - integer :: fix_len - ! Check for the correct dimensionality - if ( style == 0 ) then - call lammps_error_all (ptr, FLERR, 'You can''t extract the& - & whole vector from global fix data') - return - else if ( type == 0 ) then - call lammps_error_all (ptr, FLERR, 'You can''t extract a fix& - & scalar into a rank 1 variable') - return - else if ( type == 2 ) then - call lammps_error_all (ptr, FLERR, 'You cannot extract a fix& - & array into a rank 1 variable.') - return - else if ( type /= 1 ) then - call lammps_error_all (ptr, FLERR, 'Invalid type for fix extraction.') - return - end if - fix_len = lammps_extract_fix_vectorsize (ptr, id, style) - call C_F_pointer (Cptr, fix, (/fix_len/)) - ! Memory is only allocated for "global" fix variables, which we should - ! never get here, so no need to call lammps_free! - end subroutine lammps_extract_fix_dpa - subroutine lammps_extract_fix_dp2a (fix, ptr, id, style, type, i, j) - real (C_double), dimension(:,:), pointer, intent(out) :: fix - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: id - integer, intent(in) :: style, type, i, j - type (C_ptr) :: Cptr - type (C_ptr), pointer, dimension(:) :: Cfix - integer :: nr, nc - ! Check for the correct dimensionality - if ( style == 0 ) then - call lammps_error_all (ptr, FLERR, 'It is not possible to extract the& - & entire array from global fix data.') - return - else if ( type == 0 ) then - call lammps_error_all (ptr, FLERR, 'You cannot extract a fix& - & scalar (rank 0) into a rank 2 variable.') - return - else if ( type == 1 ) then - call lammps_error_all (ptr, FLERR, 'You cannot extract a fix& - & vector (rank 1) into a rank 2 variable.') - return - end if - call lammps_extract_fix_arraysize (ptr, id, style, nr, nc) - ! Extract pointer to first element as Cfix(1) - call C_F_pointer (Cptr, Cfix, (/nr/)) - ! Now extract the array, which is transposed - call C_F_pointer (Cfix(1), fix, (/nc, nr/)) - end subroutine lammps_extract_fix_dp2a - -!----------------------------------------------------------------------------- - -! lammps_extract_variable {{{2 - function lammps_extract_variable_Cptr (ptr, name, group) result (variable) - type (C_ptr) :: ptr, variable - character (len=*) :: name - character (len=*), optional :: group - character (kind=C_char), dimension(len_trim(name)+1) :: Cname - character (kind=C_char), dimension(:), allocatable :: Cgroup - Cname = string2Cstring (name) - if ( present(group) ) then - allocate (Cgroup(len_trim(group)+1)) - Cgroup = string2Cstring (group) - else - allocate (Cgroup(1)) - Cgroup(1) = C_NULL_CHAR - end if - variable = lammps_actual_extract_variable (ptr, Cname, Cgroup) - deallocate (Cgroup) - end function lammps_extract_variable_Cptr - subroutine lammps_extract_variable_dp (variable, ptr, name, group) - real (C_double), intent(out) :: variable - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: name - character (len=*), intent(in), optional :: group - type (C_ptr) :: Cptr - real (C_double), pointer :: Fptr - if ( present(group) ) then - Cptr = lammps_extract_variable_Cptr (ptr, name, group) - else - Cptr = lammps_extract_variable_Cptr (ptr, name) - end if - call C_F_pointer (Cptr, Fptr) - variable = Fptr - nullify (Fptr) - call lammps_free (Cptr) - end subroutine lammps_extract_variable_dp - subroutine lammps_extract_variable_dpa (variable, ptr, name, group) - real (C_double), dimension(:), allocatable, intent(out) :: variable - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: name - character (len=*), intent(in), optional :: group - type (C_ptr) :: Cptr - real (C_double), dimension(:), pointer :: Fptr - integer :: natoms - if ( present(group) ) then - Cptr = lammps_extract_variable_Cptr (ptr, name, group) - else - Cptr = lammps_extract_variable_Cptr (ptr, name) - end if - natoms = lammps_get_natoms (ptr) - allocate (variable(natoms)) - call C_F_pointer (Cptr, Fptr, (/natoms/)) - variable = Fptr - nullify (Fptr) - call lammps_free (Cptr) - end subroutine lammps_extract_variable_dpa - -!-------------------------------------------------------------------------2}}} - - subroutine lammps_gather_atoms_ia (ptr, name, count, data) - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: name - integer, intent(in) :: count - integer, dimension(:), allocatable, intent(out) :: data - type (C_ptr) :: Cdata - integer (C_int), dimension(:), pointer :: Fdata - integer (C_int) :: natoms - character (kind=C_char), dimension(len_trim(name)+1) :: Cname - integer (C_int), parameter :: Ctype = 0_C_int - integer (C_int) :: Ccount - natoms = lammps_get_natoms (ptr) - Cname = string2Cstring (name) - if ( count /= 1 .and. count /= 3 ) then - call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires& - & count to be either 1 or 3') - else - Ccount = count - end if - allocate ( Fdata(count*natoms) ) - allocate ( data(count*natoms) ) - Cdata = C_loc (Fdata(1)) - call lammps_actual_gather_atoms (ptr, Cname, Ctype, Ccount, Cdata) - data = Fdata - deallocate (Fdata) - end subroutine lammps_gather_atoms_ia - subroutine lammps_gather_atoms_dpa (ptr, name, count, data) - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: name - integer, intent(in) :: count - double precision, dimension(:), allocatable, intent(out) :: data - type (C_ptr) :: Cdata - real (C_double), dimension(:), pointer :: Fdata - integer (C_int) :: natoms - character (kind=C_char), dimension(len_trim(name)+1) :: Cname - integer (C_int), parameter :: Ctype = 1_C_int - integer (C_int) :: Ccount - natoms = lammps_get_natoms (ptr) - Cname = string2Cstring (name) - if ( count /= 1 .and. count /= 3 ) then - call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires& - & count to be either 1 or 3') - else - Ccount = count - end if - allocate ( Fdata(count*natoms) ) - allocate ( data(count*natoms) ) - Cdata = C_loc (Fdata(1)) - call lammps_actual_gather_atoms (ptr, Cname, Ctype, Ccount, Cdata) - data = Fdata(:) - deallocate (Fdata) - end subroutine lammps_gather_atoms_dpa - -!----------------------------------------------------------------------------- - - subroutine lammps_scatter_atoms_ia (ptr, name, data) - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: name - integer, dimension(:), intent(in) :: data - integer (kind=C_int) :: natoms, Ccount - integer (kind=C_int), parameter :: Ctype = 0_C_int - character (kind=C_char), dimension(len_trim(name)+1) :: Cname - integer (C_int), dimension(size(data)), target :: Fdata - type (C_ptr) :: Cdata - natoms = lammps_get_natoms (ptr) - Cname = string2Cstring (name) - Ccount = size(data) / natoms - if ( Ccount /= 1 .and. Ccount /= 3 ) & - call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires& - & count to be either 1 or 3') - Fdata = data - Cdata = C_loc (Fdata(1)) - call lammps_actual_scatter_atoms (ptr, Cname, Ctype, Ccount, Cdata) - end subroutine lammps_scatter_atoms_ia - subroutine lammps_scatter_atoms_dpa (ptr, name, data) - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: name - double precision, dimension(:), intent(in) :: data - integer (kind=C_int) :: natoms, Ccount - integer (kind=C_int), parameter :: Ctype = 1_C_int - character (kind=C_char), dimension(len_trim(name)+1) :: Cname - real (C_double), dimension(size(data)), target :: Fdata - type (C_ptr) :: Cdata - natoms = lammps_get_natoms (ptr) - Cname = string2Cstring (name) - Ccount = size(data) / natoms - if ( Ccount /= 1 .and. Ccount /= 3 ) & - call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires& - & count to be either 1 or 3') - Fdata = data - Cdata = C_loc (Fdata(1)) - call lammps_actual_scatter_atoms (ptr, Cname, Ctype, Ccount, Cdata) - end subroutine lammps_scatter_atoms_dpa - -!----------------------------------------------------------------------------- - - function lammps_extract_compute_vectorsize (ptr, id, style) & - result (vectorsize) - integer :: vectorsize - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: id - integer, intent(in) :: style - integer (C_int) :: Cvectorsize, Cstyle - character (kind=C_char), dimension(len_trim(id)+1) :: Cid - Cid = string2Cstring (id) - Cstyle = int(style, C_int) - Cvectorsize = lammps_actual_extract_compute_vectorsize (ptr, Cid, Cstyle) - vectorsize = int(Cvectorsize, kind(vectorsize)) - end function lammps_extract_compute_vectorsize - -!----------------------------------------------------------------------------- - - function lammps_extract_fix_vectorsize (ptr, id, style) & - result (vectorsize) - integer :: vectorsize - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: id - integer, intent(in) :: style - integer (C_int) :: Cvectorsize, Cstyle - character (kind=C_char), dimension(len_trim(id)+1) :: Cid - Cid = string2Cstring (id) - Cstyle = int(style, C_int) - Cvectorsize = lammps_actual_extract_fix_vectorsize (ptr, Cid, Cstyle) - vectorsize = int(Cvectorsize, kind(vectorsize)) - end function lammps_extract_fix_vectorsize - -!----------------------------------------------------------------------------- - - subroutine lammps_extract_compute_arraysize (ptr, id, style, nrows, ncols) - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: id - integer, intent(in) :: style - integer, intent(out) :: nrows, ncols - integer (C_int) :: Cstyle, Cnrows, Cncols - character (kind=C_char), dimension(len_trim(id)+1) :: Cid - Cid = string2Cstring (id) - Cstyle = int (style, C_int) - call lammps_actual_extract_compute_arraysize (ptr, Cid, Cstyle, & - Cnrows, Cncols) - nrows = int (Cnrows, kind(nrows)) - ncols = int (Cncols, kind(ncols)) - end subroutine lammps_extract_compute_arraysize - -!----------------------------------------------------------------------------- - - subroutine lammps_extract_fix_arraysize (ptr, id, style, nrows, ncols) - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: id - integer, intent(in) :: style - integer, intent(out) :: nrows, ncols - integer (C_int) :: Cstyle, Cnrows, Cncols - character (kind=C_char), dimension(len_trim(id)+1) :: Cid - Cid = string2Cstring (id) - Cstyle = int (style, kind(Cstyle)) - call lammps_actual_extract_fix_arraysize (ptr, Cid, Cstyle, & - Cnrows, Cncols) - nrows = int (Cnrows, kind(nrows)) - ncols = int (Cncols, kind(ncols)) - end subroutine lammps_extract_fix_arraysize - -!----------------------------------------------------------------------------- - - subroutine lammps_error_all (ptr, file, line, str) - type (C_ptr), intent(in) :: ptr - character (len=*), intent(in) :: file, str - integer, intent(in) :: line - character (kind=C_char), dimension(len_trim(file)+1) :: Cfile - character (kind=C_char), dimension(len_trim(str)+1) :: Cstr - integer (C_int) :: Cline - Cline = int(line, kind(Cline)) - Cfile = string2Cstring (file) - Cstr = string2Cstring (str) - call lammps_actual_error_all (ptr, Cfile, Cline, Cstr) - end subroutine lammps_error_all - -!----------------------------------------------------------------------------- - -! Locally defined helper functions {{{1 - - pure function string2Cstring (string) result (C_string) - use, intrinsic :: ISO_C_binding, only : C_char, C_NULL_CHAR - character (len=*), intent(in) :: string - character (len=1, kind=C_char) :: C_string (len_trim(string)+1) - integer :: i, n - n = len_trim (string) - forall (i = 1:n) - C_string(i) = string(i:i) - end forall - C_string(n+1) = C_NULL_CHAR - end function string2Cstring - -!----------------------------------------------------------------------------- - - subroutine Cstring2argcargv (Cstring, argc, argv) - !! Converts a C-style string to argc and argv, that is, words in Cstring - !! become C-style strings in argv. IMPORTANT: Cstring is modified by - !! this routine! I would make Cstring local TO this routine and accept - !! a Fortran-style string instead, but we run into scoping and - !! allocation problems that way. This routine assumes the string is - !! null-terminated, as all C-style strings must be. - - character (kind=C_char), dimension(*), target, intent(inout) :: Cstring - integer (C_int), intent(out) :: argc - type (C_ptr), dimension(:), allocatable, intent(out) :: argv - - integer :: StringStart, SpaceIndex, strlen, argnum - - argc = 1_C_int - - ! Find the length of the string - strlen = 1 - do while ( Cstring(strlen) /= C_NULL_CHAR ) - strlen = strlen + 1 - end do - - ! Find the number of non-escaped spaces - SpaceIndex = 2 - do while ( SpaceIndex < strlen ) - if ( Cstring(SpaceIndex) == ' ' .and. & - Cstring(SpaceIndex-1) /= '\' ) then - argc = argc + 1_C_int - ! Find the next non-space character - do while ( Cstring(SpaceIndex+1) == ' ') - SpaceIndex = SpaceIndex + 1 - end do - end if - SpaceIndex = SpaceIndex + 1 - end do - - ! Now allocate memory for argv - allocate (argv(argc)) - - ! Now find the string starting and ending locations - StringStart = 1 - SpaceIndex = 2 - argnum = 1 - do while ( SpaceIndex < strlen ) - if ( Cstring(SpaceIndex) == ' ' .and. & - Cstring(SpaceIndex-1) /= '\' ) then - ! Found a real space => split strings and store this one - Cstring(Spaceindex) = C_NULL_CHAR ! Replaces space with NULL - argv(argnum) = C_loc(Cstring(StringStart)) - argnum = argnum + 1 - ! Find the next non-space character - do while ( Cstring(SpaceIndex+1) == ' ') - SpaceIndex = SpaceIndex + 1 - end do - StringStart = SpaceIndex + 1 - else if ( Cstring(SpaceIndex) == ' ' .and. & - Cstring(SpaceIndex-1) == '\' ) then - ! Escaped space => remove backslash and move rest of array - Cstring(SpaceIndex-1:strlen-1) = Cstring(SpaceIndex:strlen) - strlen = strlen - 1 ! Last character is still C_NULL_CHAR - end if - SpaceIndex = SpaceIndex + 1 - end do - ! Now handle the last argument - argv(argnum) = C_loc(Cstring(StringStart)) - - end subroutine Cstring2argcargv - -! 1}}} - -end module LAMMPS - -! vim: foldmethod=marker tabstop=3 softtabstop=3 shiftwidth=3 expandtab +!! ----------------------------------------------------------------------- +! LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator +! www.cs.sandia.gov/~sjplimp/lammps.html +! Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories +! +! 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: Karl D. Hammond +! University of Tennessee, Knoxville (USA), 2012 +! Updated October 2020 by the author (now at the University of Missouri). +!-------------------------------------------------------------------------- + +!! LAMMPS, a Fortran 2003 module containing an interface between Fortran +!! programs and the C-style functions in library.cpp that ship with LAMMPS. +!! This file should be accompanied by LAMMPS-wrapper.cpp and LAMMPS-wrapper.h, +!! which define wrapper functions that ease portability and enforce array +!! dimensions. +!! +!! Everything in this module should be 100% portable by way of Fortran 2003's +!! ISO_C_BINDING intrinsic module. See the README for instructions for +!! compilation and use. +!! +!! Here are the PUBLIC functions and subroutines included in this module. +!! subroutine lammps_open (command_line, communicator, ptr) +!! subroutine lammps_open_no_mpi (command_line, ptr) +!! subroutine lammps_close (ptr) +!! integer (kind=C_int) lammps_version (ptr) +!! subroutine lammps_file (ptr, str) +!! subroutine lammps_command (ptr, str) +!! subroutine lammps_commands_list (ptr, cmds) +!! subroutine lammps_commands_string (ptr, str) +!! subroutine lammps_free (ptr) +!! integer function lammps_extract_setting (ptr, name) +!! subroutine lammps_extract_global (global, ptr, name) +!! subroutine lammps_extract_box (ptr, boxlo, boxhi, xy, yz, xz, & +!! periodicity, box_change) +!! subroutine lammps_extract_atom (atom, ptr, name) +!! subroutine lammps_extract_compute (compute, ptr, id, style, type) +!! subroutine lammps_extract_fix (fix, ptr, id, style, type, i, j) +!! subroutine lammps_extract_variable (variable, ptr, name, group) +!! double precision function lammps_get_thermo (ptr, name) +!! integer function lammps_get_natoms (ptr) +!! subroutine lammps_set_variable (ptr, name, str, [err]) +!! subroutine lammps_reset_box (ptr, boxlo, boxhi, xy, yz, xz) +!! subroutine lammps_gather_atoms (ptr, name, count, data) +!! subroutine lammps_gather_atoms_concat (ptr, name, count, data) +!! subroutine lammps_gather_atoms_subset (ptr, name, count, ids, data) +!! subroutine lammps_scatter_atoms (ptr, name, data) +!! subroutine lammps_scatter_atoms_subset (ptr, name, ids, data) +!! logical function lammps_config_has_package (package_name) +!! integer function lammps_config_package_count () +!! logical function lammps_config_package_name (index, buffer) +!! logical function lammps_config_has_gzip_support () +!! logical function lammps_config_has_png_support () +!! logical function lammps_config_has_jpeg_support () +!! logical function lammps_config_has_ffmpeg_support () +!! logical function lammps_config_has_exceptions () +!! integer function lammps_find_pair_neighlist (ptr, style, exact, nsub, +!! request) +!! integer function lammps_find_fix_neighlist (ptr, id, request) +!! integer function lammps_find_compute_neighlist (ptr, id, request) +!! integer function lammps_neighlist_num_elements (ptr, idx) +!! subroutine lammps_neighlist_element_neighbors (ptr, idx, element, iatom, +!! numneigh, neighbors) +!! subroutine lammps_create_atoms (ptr, n, id, type, x, v, image, +!1 shrinkexceed) +!! +!! The following are also available if compiled with -DLAMMPS_EXCEPTIONS +!! function lammps_has_error (ptr) +!! function lammps_get_last_error_message (ptr, buffer) +!! +!! Note that the following function is not implemented from this interface: +!! lammps_set_fix_external_callback + +#define FLERR __FILE__,__LINE__ +! The above line allows for similar error checking as is done with standard +! LAMMPS files. + +! This should (?) allow this module to work with settings in lmptype.h +#if !defined(LAMMPS_SMALLSMALL) && !defined(LAMMPS_BIGBIG) && !defined(LAMMPS_SMALLBIG) +#define LAMMPS_SMALLBIG +#endif + +#ifdef LAMMPS_SMALLBIG +#define C_smallint C_int +#define C_imageint C_int +#define C_tagint C_int +#define C_bigint C_int64_t +#endif + +#ifdef LAMMPS_BIGBIG +#define C_smallint C_int +#define C_imageint C_int64_t +#define C_tagint C_int64_t +#define C_bigint C_int64_t +#endif + +#ifdef LAMMPS_SMALLSMALL +#define C_smallint C_int +#define C_imageint C_int +#define C_tagint C_int +#define C_bigint C_int +#endif + +module LAMMPS + + use, intrinsic :: ISO_C_binding, only : C_double, C_int, C_ptr, C_char, & + C_NULL_CHAR, C_NULL_PTR, C_loc, C_F_pointer, C_int64_t, & + lammps_instance => C_ptr + implicit none + private + ! We inherit some ISO_C_BINDING entities for ease of use + public :: lammps_instance, C_ptr, C_double, C_int + ! Only the following functions may be called by the user: + public :: lammps_open, lammps_open_no_mpi, lammps_close, & + lammps_version, lammps_file, lammps_command, lammps_commands_list, & + lammps_commands_string, lammps_free, lammps_extract_setting, & + lammps_extract_global, lammps_extract_box, lammps_extract_atom, & + lammps_extract_compute, lammps_extract_fix, lammps_extract_variable, & + lammps_get_thermo, lammps_get_natoms, lammps_set_variable, & + lammps_reset_box, lammps_gather_atoms, lammps_gather_atoms_concat, & + lammps_gather_atoms_subset, lammps_scatter_atoms, & + lammps_scatter_atoms_subset, lammps_config_has_package, & + lammps_config_package_count, lammps_config_package_name, & + lammps_config_has_gzip_support, lammps_config_has_png_support, & + lammps_config_has_jpeg_support, lammps_config_has_ffmpeg_support, & + lammps_config_has_exceptions, lammps_find_pair_neighlist, & + lammps_find_fix_neighlist, lammps_find_compute_neighlist, & + lammps_neighlist_num_elements, lammps_neighlist_element_neighbors, & + lammps_create_atoms + +#ifdef LAMMPS_EXCEPTIONS + public :: lammps_has_error, lammps_get_last_error_message +#endif + + !! Functions supplemental to the prototypes in library.h. {{{1 + !! The function definitions (in C++) are contained in LAMMPS-wrapper.cpp. + !! I would have written the first in Fortran, but the MPI libraries (which + !! were written in C) have C-based functions to convert from Fortran MPI + !! handles to C MPI handles, and there is no Fortran equivalent for those + !! functions. + interface + subroutine lammps_open_wrapper (argc, argv, communicator, ptr) & + bind (C, name='lammps_open_fortran_wrapper') + import :: C_int, C_ptr + integer (C_int), value :: argc + type (C_ptr), dimension(*) :: argv + integer, value :: communicator + type (C_ptr) :: ptr + end subroutine lammps_open_wrapper + subroutine lammps_actual_error_all (ptr, file, line, str) & + bind (C, name='lammps_error_all') + import :: C_int, C_char, C_ptr + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: file, str + integer (C_int), value :: line + end subroutine lammps_actual_error_all + function lammps_get_ntypes (ptr) result (ntypes) & + bind (C, name='lammps_get_ntypes') + import :: C_int, C_ptr + type (C_ptr), value :: ptr + integer (C_int) :: ntypes + end function lammps_get_ntypes + function lammps_actual_extract_compute_vectorsize (ptr, id, style) & + result (vectorsize) bind (C, name='lammps_extract_compute_vectorsize') + import :: C_int, C_char, C_ptr + integer (C_int) :: vectorsize + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: id + integer (C_int), value :: style + end function lammps_actual_extract_compute_vectorsize + subroutine lammps_actual_extract_compute_arraysize (ptr, id, style, & + nrows, ncols) bind (C, name='lammps_extract_compute_arraysize') + import :: C_int, C_char, C_ptr + integer (C_int) :: arraysize + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: id + integer (C_int), value :: style + integer (C_int) :: nrows, ncols + end subroutine lammps_actual_extract_compute_arraysize + function lammps_actual_extract_fix_vectorsize (ptr, id, style) & + result (vectorsize) bind (C, name='lammps_extract_fix_vectorsize') + import :: C_int, C_char, C_ptr + integer (C_int) :: vectorsize + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: id + integer (C_int), value :: style + end function lammps_actual_extract_fix_vectorsize + subroutine lammps_actual_extract_fix_arraysize (ptr, id, style, & + nrows, ncols) bind (C, name='lammps_extract_fix_arraysize') + import :: C_int, C_char, C_ptr + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: id + integer (C_int), value :: style + integer (C_int) :: nrows, ncols + end subroutine lammps_actual_extract_fix_arraysize + end interface + + !! Functions/subroutines defined in library.h and library.cpp {{{1 + interface + subroutine lammps_actual_open_no_mpi (argc, argv, ptr) & + bind (C, name='lammps_open_no_mpi') + import :: C_int, C_ptr + integer (C_int), value :: argc + type (C_ptr), dimension(*) :: argv + type (C_ptr) :: ptr + end subroutine lammps_actual_open_no_mpi + + subroutine lammps_close (ptr) bind (C, name='lammps_close') + import :: C_ptr + type (C_ptr), value :: ptr + end subroutine lammps_close + + function lammps_version (ptr) result (version) & + bind (C, name='lammps_version') + import :: C_ptr, C_int + type (C_ptr), value :: ptr + integer (kind=C_int) :: version + end function lammps_version + + subroutine lammps_actual_file (ptr, str) bind (C, name='lammps_file') + import :: C_ptr, C_char + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: str + end subroutine lammps_actual_file + + function lammps_actual_command (ptr, str) result (command) & + bind (C, name='lammps_command') + import :: C_ptr, C_char + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: str + type (C_ptr) :: command + end function lammps_actual_command + + subroutine lammps_actual_commands_list (ptr, ncmd, cmds) & + bind (C, name='lammps_commands_list') + import :: C_ptr, C_int + type (C_ptr), value :: ptr + type (C_ptr), dimension(*) :: cmds + integer (C_int), value :: ncmd + end subroutine lammps_actual_commands_list + + subroutine lammps_actual_commands_string (ptr, str) & + bind (C, name='lammps_commands_string') + import :: C_ptr, C_char + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: str + end subroutine lammps_actual_commands_string + + subroutine lammps_free (ptr) bind (C, name='lammps_free') + import :: C_ptr + type (C_ptr), value :: ptr + end subroutine lammps_free + + function lammps_actual_extract_setting (ptr, name) result (setting) & + bind(C, name='lammps_extract_setting') + import :: C_ptr, C_char, C_int + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: name + integer (kind=C_int) :: setting + end function lammps_actual_extract_setting + + function lammps_actual_extract_global (ptr, name) & + bind (C, name='lammps_extract_global') result (global) + import :: C_ptr, C_char + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: name + type (C_ptr) :: global + end function lammps_actual_extract_global + + subroutine lammps_actual_extract_box (ptr, boxlo, boxhi, xy, yz, & + xz, periodicity, box_change) bind (C, name='lammps_extract_box') + import :: C_ptr, C_double, C_int + type (C_ptr), value :: ptr + real (C_double) :: boxlo(3), boxhi(3), xy, yz, xz + integer (C_int) :: periodicity(3), box_change + end subroutine lammps_actual_extract_box + + function lammps_actual_extract_atom (ptr, name) & + bind (C, name='lammps_extract_atom') result (atom) + import :: C_ptr, C_char + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: name + type (C_ptr) :: atom + end function lammps_actual_extract_atom + + function lammps_actual_extract_compute (ptr, id, style, type) & + result (compute) bind (C, name='lammps_extract_compute') + import :: C_ptr, C_char, C_int + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: id + integer (C_int), value :: style, type + type (C_ptr) :: compute + end function lammps_actual_extract_compute + + function lammps_actual_extract_fix (ptr, id, style, type, i, j) & + result (fix) bind (C, name='lammps_extract_fix') + import :: C_ptr, C_char, C_int + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: id + integer (C_int), value :: style, type, i, j + type (C_ptr) :: fix + end function lammps_actual_extract_fix + + function lammps_actual_extract_variable (ptr, name, group) & + result (variable) bind (C, name='lammps_extract_variable') + import :: C_ptr, C_char + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: name, group + type (C_ptr) :: variable + end function lammps_actual_extract_variable + + function lammps_actual_get_thermo (ptr, name) result (dval) & + bind (C, name='lammps_get_thermo') + import :: C_ptr, C_char, C_double + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: name + real (C_double) :: dval + end function lammps_actual_get_thermo + + function lammps_get_natoms (ptr) result (natoms) & + bind (C, name='lammps_get_natoms') + import :: C_ptr, C_int + type (C_ptr), value :: ptr + integer (C_int) :: natoms + end function lammps_get_natoms + + function lammps_actual_set_variable (ptr, name, str) result (err) & + bind (C, name='lammps_set_variable') + import :: C_ptr, C_char, C_int + type (C_ptr), value :: ptr + character (kind=C_char), dimension(*) :: name, str + integer (C_int) :: err + end function lammps_actual_set_variable + + subroutine lammps_actual_reset_box (ptr, boxlo, boxhi, xy, yz, xz) & + bind (C, name='lammps_reset_box') + import :: C_ptr, C_double, C_int + type (C_ptr), value :: ptr + real (C_double) :: boxlo(3), boxhi(3), xy, yz, xz + end subroutine lammps_actual_reset_box + + subroutine lammps_actual_gather_atoms (ptr, name, type, count, data) & + bind (C, name='lammps_gather_atoms') + import :: C_ptr, C_int, C_char + type (C_ptr), value :: ptr, data + character (kind=C_char), dimension(*) :: name + integer (C_int), value :: type, count + end subroutine lammps_actual_gather_atoms + + subroutine lammps_actual_gather_atoms_concat (ptr, name, type, count, & + data) bind (C, name='lammps_gather_atoms_concat') + import :: C_ptr, C_int, C_char + type (C_ptr), value :: ptr, data + character (kind=C_char), dimension(*) :: name + integer (C_int), value :: type, count + end subroutine lammps_actual_gather_atoms_concat + + subroutine lammps_actual_gather_atoms_subset (ptr, name, type, count, & + ndata, ids, data) bind (C, name='lammps_gather_atoms_subset') + import :: C_ptr, C_int, C_char + type (C_ptr), value :: ptr, data + character (kind=C_char), dimension(*) :: name + integer (C_int), value :: type, count, ndata + integer (C_int) :: ids(:) + end subroutine lammps_actual_gather_atoms_subset + + subroutine lammps_actual_scatter_atoms (ptr, name, type, count, data) & + bind (C, name='lammps_scatter_atoms') + import :: C_ptr, C_int, C_char + type (C_ptr), value :: ptr, data + character (kind=C_char), dimension(*) :: name + integer (C_int), value :: type, count + end subroutine lammps_actual_scatter_atoms + + subroutine lammps_actual_scatter_atoms_subset (ptr, name, type, count, & + ndata, ids, data) bind (C, name='lammps_scatter_atoms_subset') + import :: C_ptr, C_int, C_char + type (C_ptr), value :: ptr, data + character (kind=C_char), dimension(*) :: name + integer (C_int), value :: type, count, ndata + integer (C_int), dimension(*) :: ids + end subroutine lammps_actual_scatter_atoms_subset + + function lammps_actual_config_has_package (package_name) & + result (has_it) bind (C, name='lammps_config_has_package') + import :: C_char, C_int + character (len=1, kind=C_char), dimension(*) :: package_name + integer (C_int) :: has_it + end function lammps_actual_config_has_package + + function lammps_config_package_count () result (count) & + bind (C, name='lammps_config_package_count') + import :: C_int + integer (C_int) :: count + end function lammps_config_package_count + + function lammps_actual_config_package_name (index, buffer, max_size) & + result (num) bind (C, name='lammps_config_package_name') + import :: C_int, C_char + integer (C_int), value :: index, max_size + character (len=1, kind=C_char), dimension(*) :: buffer + integer (C_int) :: num + end function lammps_actual_config_package_name + + function lammps_actual_config_has_gzip_support () result (C_has_it) & + bind (C, name='lammps_config_has_gzip_support') + import :: C_int + integer (C_int) :: C_has_it + end function lammps_actual_config_has_gzip_support + + function lammps_actual_config_has_png_support () result (C_has_it) & + bind (C, name='lammps_config_has_png_support') + import :: C_int + integer (C_int) :: C_has_it + end function lammps_actual_config_has_png_support + + function lammps_actual_config_has_jpeg_support () result (C_has_it) & + bind (C, name='lammps_config_has_jpeg_support') + import :: C_int + integer (C_int) :: C_has_it + end function lammps_actual_config_has_jpeg_support + + function lammps_actual_config_has_ffmpeg_support () result (C_has_it) & + bind (C, name='lammps_config_has_ffmpeg_support') + import :: C_int + integer (C_int) :: C_has_it + end function lammps_actual_config_has_ffmpeg_support + + function lammps_actual_config_has_exceptions () result (C_has_it) & + bind (C, name='lammps_config_has_exceptions') + import :: C_int + integer (C_int) :: C_has_it + end function lammps_actual_config_has_exceptions + + function lammps_actual_find_pair_neighlist (ptr, style, exact, nsub, & + request) result (C_neighlist) & + bind (C, name='lammps_find_pair_neighlist') + import :: C_ptr, C_int, C_char + integer (C_int) :: C_neighlist + type (C_ptr), value :: ptr + character (len=1, kind=C_char), dimension(*) :: style + integer (C_int), value :: exact, nsub, request + end function lammps_actual_find_pair_neighlist + + function lammps_actual_find_fix_neighlist (ptr, id, request) & + result (C_neighlist) bind (C, name='lammps_find_fix_neighlist') + import :: C_ptr, C_int, C_char + integer (C_int) :: C_neighlist + type (C_ptr), value :: ptr + character (len=1, kind=C_char), dimension(*) :: id + integer (C_int), value :: request + end function lammps_actual_find_fix_neighlist + + function lammps_actual_find_compute_neighlist (ptr, id, request) & + result (C_neighlist) bind (C, name='lammps_find_compute_neighlist') + import :: C_ptr, C_int, C_char + integer (C_int) :: C_neighlist + type (C_ptr), value :: ptr + character (len=1, kind=C_char), dimension(*) :: id + integer (C_int), value :: request + end function lammps_actual_find_compute_neighlist + + function lammps_actual_neighlist_num_elements (ptr, idx) & + result (nelements) bind (C, name='lammps_neighlist_num_elements') + import :: C_ptr, C_int + integer (C_int) :: nelements + type (C_ptr), value :: ptr + integer (C_int), value :: idx + end function lammps_actual_neighlist_num_elements + + subroutine lammps_actual_neighlist_element_neighbors (ptr, idx, & + element, iatom, numneigh, neighbors) & + bind (C, name='lammps_neighlist_element_neighbors') + import :: C_ptr, C_int + type (C_ptr), value :: ptr + integer (C_int), value :: idx, element + integer (C_int) :: iatom, numneigh + type (C_ptr) :: neighbors + end subroutine lammps_actual_neighlist_element_neighbors + + subroutine lammps_actual_create_atoms (ptr, n, id, type, x, v, image, & + shrinkexceed) bind (C, name='lammps_create_atoms') + import :: C_ptr, C_int64_t, C_double, C_int + type (C_ptr), value :: ptr + integer (C_int), value :: n + integer (C_tagint) :: id + integer (C_int) :: type + real (C_double), dimension(*) :: x, v + integer (C_imageint), dimension(*) :: image + integer (C_int), value :: shrinkexceed + end subroutine lammps_actual_create_atoms + +#ifdef LAMMPS_EXCEPTIONS + + function lammps_actual_has_error (ptr) result (C_has_it) & + bind (C, name='lammps_has_error') + import :: C_int, C_ptr + type (C_ptr), value :: ptr + integer (C_int) :: C_has_it + end function lammps_actual_has_error + + function lammps_actual_get_last_error_message (ptr, buffer, & + buffer_size) result (error_type) & + bind (C, name='lammps_get_last_error_message') + import :: C_ptr, C_char, C_int + type (C_ptr), value :: ptr + integer (C_int), value :: buffer_size + character (len=1, kind=C_char), dimension(*) :: buffer + integer (C_int) :: error_type + end function lammps_actual_get_last_error_message + +#endif + + end interface + + ! Generic functions for the wrappers below {{{1 + + interface lammps_extract_global + module procedure lammps_extract_global_i, & + lammps_extract_global_dp + end interface lammps_extract_global + + interface lammps_extract_atom + module procedure lammps_extract_atom_ia, & + lammps_extract_atom_dpa, & + lammps_extract_atom_dp2a + end interface lammps_extract_atom + + interface lammps_extract_compute + module procedure lammps_extract_compute_dp, & + lammps_extract_compute_dpa, & + lammps_extract_compute_dp2a + end interface lammps_extract_compute + + interface lammps_extract_fix + module procedure lammps_extract_fix_dp, & + lammps_extract_fix_dpa, & + lammps_extract_fix_dp2a + end interface lammps_extract_fix + + interface lammps_extract_variable + module procedure lammps_extract_variable_dp, & + lammps_extract_variable_dpa + end interface lammps_extract_variable + + interface lammps_gather_atoms + module procedure lammps_gather_atoms_ia, lammps_gather_atoms_dpa + end interface lammps_gather_atoms + + interface lammps_gather_atoms_concat + module procedure lammps_gather_atoms_concat_ia, & + lammps_gather_atoms_concat_dpa + end interface lammps_gather_atoms_concat + + interface lammps_gather_atoms_subset + module procedure lammps_gather_atoms_subset_ia, & + lammps_gather_atoms_subset_dpa + end interface lammps_gather_atoms_subset + + interface lammps_scatter_atoms + module procedure lammps_scatter_atoms_ia, lammps_scatter_atoms_dpa + end interface lammps_scatter_atoms + + interface lammps_scatter_atoms_subset + module procedure lammps_scatter_atoms_subset_ia, & + lammps_scatter_atoms_subset_dpa + end interface lammps_scatter_atoms_subset + +contains !! Wrapper functions local to this module {{{1 + + subroutine lammps_open (command_line, communicator, ptr) + character (len=*), intent(in) :: command_line + integer, intent(in) :: communicator + type (C_ptr) :: ptr + integer (C_int) :: argc + type (C_ptr), dimension(:), allocatable :: argv + character (kind=C_char), dimension(len_trim(command_line)+1), target :: & + c_command_line + c_command_line = string2Cstring (command_line) + call Cstring2argcargv (c_command_line, argc, argv) + call lammps_open_wrapper (argc, argv, communicator, ptr) + deallocate (argv) + end subroutine lammps_open + +!----------------------------------------------------------------------------- + + subroutine lammps_open_no_mpi (command_line, ptr) + character (len=*), intent(in) :: command_line + type (C_ptr) :: ptr + integer (C_int) :: argc + type (C_ptr), dimension(:), allocatable :: argv + character (kind=C_char), dimension(len_trim(command_line)+1), target :: & + c_command_line + c_command_line = string2Cstring (command_line) + call Cstring2argcargv (c_command_line, argc, argv) + call lammps_actual_open_no_mpi (argc, argv, ptr) + deallocate (argv) + end subroutine lammps_open_no_mpi + +!----------------------------------------------------------------------------- + + subroutine lammps_file (ptr, str) + type (C_ptr) :: ptr + character (len=*) :: str + character (kind=C_char), dimension(len_trim(str)+1) :: Cstr + Cstr = string2Cstring (str) + call lammps_actual_file (ptr, Cstr) + end subroutine lammps_file + +!----------------------------------------------------------------------------- + + subroutine lammps_command (ptr, str) + type (C_ptr) :: ptr + character (len=*) :: str + character (kind=C_char), dimension(len_trim(str)+1) :: Cstr + type (C_ptr) :: dummy + Cstr = string2Cstring (str) + dummy = lammps_actual_command (ptr, Cstr) + end subroutine lammps_command + +!----------------------------------------------------------------------------- + + subroutine lammps_commands_list (ptr, cmds) + type (C_ptr), intent(in) :: ptr + character (len=*), dimension(:) :: cmds + integer (C_int) :: ncmd +! character (kind=C_char,len=1), dimension(size(cmds)) :: C_cmds + type (C_ptr), dimension(:), allocatable :: C_cmds + character (len=1, kind=C_char), allocatable, target :: C_strings(:,:) + integer :: i, max_len + ncmd = size(cmds) + allocate (C_cmds(ncmd)) + max_len = 0 + do i=1, size(cmds) + if ( len(cmds(i)) > max_len ) max_len = len(cmds(i)) + end do + allocate (C_strings(max_len + 1, ncmd)) + do i=1, size(cmds) + C_strings(:,i) = string2Cstring(cmds(i)) + C_cmds(i) = C_loc(C_strings(1,i)) + end do + call lammps_actual_commands_list (ptr, ncmd, C_cmds) + deallocate (C_strings) + deallocate (C_cmds) + end subroutine lammps_commands_list + +!----------------------------------------------------------------------------- + + subroutine lammps_commands_string (ptr, str) + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: str + character (kind=C_char), dimension(len_trim(str)+1) :: C_str + C_str = string2Cstring (str) + call lammps_actual_commands_string (ptr, C_str) + end subroutine lammps_commands_string + +!----------------------------------------------------------------------------- + + function lammps_extract_setting (ptr, name) result (setting) + integer :: setting + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + character (kind=C_char), dimension(len_trim(name)+1) :: C_name + C_name = string2Cstring (name) + setting = lammps_actual_extract_setting (ptr, C_name) + end function lammps_extract_setting + +!----------------------------------------------------------------------------- + +! lammps_extract_global {{{2 + function lammps_extract_global_Cptr (ptr, name) result (global) + type (C_ptr) :: global + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + character (kind=C_char), dimension(len_trim(name)+1) :: Cname + Cname = string2Cstring (name) + global = lammps_actual_extract_global (ptr, Cname) + end function lammps_extract_global_Cptr + subroutine lammps_extract_global_i (global, ptr, name) + integer (C_int), pointer, intent(out) :: global + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + type (C_ptr) :: Cptr + Cptr = lammps_extract_global_Cptr (ptr, name) + call C_F_pointer (Cptr, global) + end subroutine lammps_extract_global_i + subroutine lammps_extract_global_dp (global, ptr, name) + real (C_double), pointer, intent(out) :: global + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + type (C_ptr) :: Cptr + Cptr = lammps_extract_global_Cptr (ptr, name) + call C_F_pointer (Cptr, global) + end subroutine lammps_extract_global_dp + +!----------------------------------------------------------------------------- + +! lammps_extract_box {{{2 + subroutine lammps_extract_box (ptr, boxlo, boxhi, xy, yz, xz, & + periodicity, box_change) + type (C_ptr), intent(in) :: ptr + double precision, dimension(3), intent(out) :: boxlo, boxhi + double precision, intent(out) :: xy, yz, xz + logical, intent(out) :: periodicity(3), box_change + integer (kind=C_int) :: C_periodicity(3), C_box_change + real (C_double) :: C_boxlo(3), C_boxhi(3), C_xy, C_yz, C_xz + call lammps_actual_extract_box (ptr, C_boxlo, C_boxhi, C_xy, C_yz, & + C_xz, C_periodicity, C_box_change) + boxlo = C_boxlo + boxhi = C_boxhi + xy = C_xy + yz = C_yz + xz = C_xz + periodicity = (C_periodicity == 1) + box_change = (C_box_change == 1) + end subroutine + +!----------------------------------------------------------------------------- + +! lammps_extract_atom {{{2 + function lammps_extract_atom_Cptr (ptr, name) result (atom) + type (C_ptr) :: atom + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + character (kind=C_char), dimension(len_trim(name)+1) :: Cname + Cname = string2Cstring (name) + atom = lammps_actual_extract_atom (ptr, Cname) + end function lammps_extract_atom_Cptr + subroutine lammps_extract_atom_ia (atom, ptr, name) + integer (C_int), dimension(:), pointer, intent(out) :: atom + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + type (C_ptr) :: Cptr + integer (C_int), pointer :: nelements + call lammps_extract_global_i (nelements, ptr, 'nlocal') + Cptr = lammps_extract_atom_Cptr (ptr, name) + call C_F_pointer (Cptr, atom, (/nelements/)) + end subroutine lammps_extract_atom_ia + subroutine lammps_extract_atom_dpa (atom, ptr, name) + real (C_double), dimension(:), pointer, intent(out) :: atom + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + type (C_ptr) :: Cptr + integer (C_int), pointer :: nlocal + integer :: nelements + real (C_double), dimension(:), pointer :: Fptr + if ( name == 'mass' ) then + nelements = lammps_get_ntypes (ptr) + 1 + else if ( name == 'x' .or. name == 'v' .or. name == 'f' .or. & + name == 'mu' .or. name == 'omega' .or. name == 'torque' .or. & + name == 'angmom' ) then + ! We should not be getting a rank-2 array here! + call lammps_error_all (ptr, FLERR, 'You cannot extract those atom& + & data (' // trim(name) // ') into a rank 1 array.') + return + else + ! Everything else we can get is probably nlocal units long + call lammps_extract_global_i (nlocal, ptr, 'nlocal') + nelements = nlocal + end if + Cptr = lammps_extract_atom_Cptr (ptr, name) + call C_F_pointer (Cptr, Fptr, (/nelements/)) + if ( name == 'mass' ) then + atom(0:) => Fptr + else + atom => Fptr + end if + end subroutine lammps_extract_atom_dpa + subroutine lammps_extract_atom_dp2a (atom, ptr, name) + real (C_double), dimension(:,:), pointer, intent(out) :: atom + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + type (C_ptr) :: Cptr + type (C_ptr), pointer, dimension(:) :: Catom + integer (C_int), pointer :: nelements + if ( name /= 'x' .and. name /= 'v' .and. name /= 'f' .and. & + name /= 'mu' .and. name /= 'omega' .and. name /= 'tandque' .and. & + name /= 'angmom' ) then + ! We should not be getting a rank-2 array here! + call lammps_error_all (ptr, FLERR, 'You cannot extract those atom& + & data (' // trim(name) // ') into a rank 2 array.') + return + end if + Cptr = lammps_extract_atom_Cptr (ptr, name) + call lammps_extract_global_i (nelements, ptr, 'nlocal') + ! Catom will now be the array of void* pointers that the void** pointer + ! pointed to. Catom(1) is now the pointer to the first element. + call C_F_pointer (Cptr, Catom, (/nelements/)) + ! Now get the actual array, which has its shape transposed from what we + ! might think of it in C + call C_F_pointer (Catom(1), atom, (/3, nelements/)) + end subroutine lammps_extract_atom_dp2a + +!----------------------------------------------------------------------------- + +! lammps_extract_compute {{{2 + function lammps_extract_compute_Cptr (ptr, id, style, type) result (compute) + type (C_ptr) :: compute + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: id + integer, intent(in) :: style, type + integer (kind=C_int) :: Cstyle, Ctype + character (kind=C_char), dimension(len_trim(id)+1) :: Cid + Cid = string2Cstring (id) + Cstyle = style + Ctype = type + compute = lammps_actual_extract_compute (ptr, Cid, Cstyle, Ctype) + end function lammps_extract_compute_Cptr + subroutine lammps_extract_compute_dp (compute, ptr, id, style, type) + real (C_double), pointer, intent(out) :: compute + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: id + integer, intent(in) :: style, type + type (C_ptr) :: Cptr + ! The only valid values of (style,type) are (0,0) for scalar 'compute' + if ( style /= 0 ) then + call lammps_error_all (ptr, FLERR, 'You cannot pack per-atom/local& + & data into a scalar.') + return + end if + if ( type == 1 ) then + call lammps_error_all (ptr, FLERR, 'You cannot extract a compute& + & vector (rank 1) into a scalar.') + return + else if ( type == 2 ) then + call lammps_error_all (ptr, FLERR, 'You cannot extract a compute& + & array (rank 2) into a scalar.') + return + end if + Cptr = lammps_extract_compute_Cptr (ptr, id, style, type) + call C_F_pointer (Cptr, compute) + end subroutine lammps_extract_compute_dp + subroutine lammps_extract_compute_dpa (compute, ptr, id, style, type) + real (C_double), dimension(:), pointer, intent(out) :: compute + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: id + integer, intent(in) :: style, type + type (C_ptr) :: Cptr + integer :: nelements + ! Check for the correct dimensionality + if ( type == 0 ) then + call lammps_error_all (ptr, FLERR, 'You cannot extract a compute& + & scalar (rank 0) into a rank 1 variable.') + return + else if ( type == 2 ) then + call lammps_error_all (ptr, FLERR, 'You cannot extract a compute& + & array (rank 2) into a rank 1 variable.') + return + end if + nelements = lammps_extract_compute_vectorsize (ptr, id, style) + Cptr = lammps_extract_compute_Cptr (ptr, id, style, type) + call C_F_pointer (Cptr, compute, (/nelements/)) + end subroutine lammps_extract_compute_dpa + subroutine lammps_extract_compute_dp2a (compute, ptr, id, style, type) + real (C_double), dimension(:,:), pointer, intent(out) :: compute + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: id + integer, intent(in) :: style, type + type (C_ptr) :: Cptr + type (C_ptr), pointer, dimension(:) :: Ccompute + integer :: nr, nc + ! Check for the correct dimensionality + if ( type == 0 ) then + call lammps_error_all (ptr, FLERR, 'You cannot extract a compute& + & scalar (rank 0) into a rank 2 variable.') + return + else if ( type == 1 ) then + call lammps_error_all (ptr, FLERR, 'You cannot extract a compute& + & array (rank 1) into a rank 2 variable.') + return + end if + call lammps_extract_compute_arraysize (ptr, id, style, nr, nc) + Cptr = lammps_extract_compute_Cptr (ptr, id, style, type) + call C_F_pointer (Cptr, Ccompute, (/nr/)) + ! Note that the matrix is transposed, from Fortran's perspective + call C_F_pointer (Ccompute(1), compute, (/nc, nr/)) + end subroutine lammps_extract_compute_dp2a + +!----------------------------------------------------------------------------- + +! lammps_extract_fix {{{2 + function lammps_extract_fix_Cptr (ptr, id, style, type, i, j) & + result (fix) + type (C_ptr) :: fix + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: id + integer, intent(in) :: style, type, i, j + character (kind=C_char), dimension(len_trim(id)+1) :: Cid + integer (kind=C_int) :: Cstyle, Ctype, Ci, Cj + Cid = string2Cstring (id) + Cstyle = style + Ctype = type + Ci = i - 1 ! This is for consistency with the values from f_ID[i], + Cj = j - 1 ! which is different from what library.cpp uses! + if ( (type >= 1 .and. Ci < 0) .or. & + (type == 2 .and. (Ci < 0 .or. Cj < 0) ) ) then + call lammps_error_all (ptr, FLERR, 'Index out of range in& + & lammps_extract_fix') + end if + fix = lammps_actual_extract_fix (ptr, Cid, Cstyle, Ctype, Ci, Cj) + end function lammps_extract_fix_Cptr + subroutine lammps_extract_fix_dp (fix, ptr, id, style, type, i, j) + real (C_double), intent(out) :: fix + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: id + integer, intent(in) :: style, type, i, j + type (C_ptr) :: Cptr + real (C_double), pointer :: Fptr + ! Check for the correct dimensionality + if ( style /= 0 ) then + select case (type) + case (0) + call lammps_error_all (ptr, FLERR, 'There is no per-atom or local& + & scalar data available from fixes.') + case (1) + call lammps_error_all (ptr, FLERR, 'You cannot extract a fix''s & + &per-atom/local vector (rank 1) into a scalar.') + case (2) + call lammps_error_all (ptr, FLERR, 'You cannot extract a fix''s & + &per-atom/local array (rank 2) into a scalar.') + case default + call lammps_error_all (ptr, FLERR, 'Invalid extract_fix style/& + &type combination.') + end select + return + end if + Cptr = lammps_extract_fix_Cptr (ptr, id, style, type, i, j) + call C_F_pointer (Cptr, Fptr) + nullify (Fptr) + ! Memory is only allocated for "global" fix variables + if ( style == 0 ) call lammps_free (Cptr) + end subroutine lammps_extract_fix_dp + subroutine lammps_extract_fix_dpa (fix, ptr, id, style, type, i, j) + real (C_double), dimension(:), pointer, intent(out) :: fix + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: id + integer, intent(in) :: style, type, i, j + type (C_ptr) :: Cptr + integer :: fix_len + ! Check for the correct dimensionality + if ( style == 0 ) then + call lammps_error_all (ptr, FLERR, 'You can''t extract the& + & whole vector from global fix data') + return + else if ( type == 0 ) then + call lammps_error_all (ptr, FLERR, 'You can''t extract a fix& + & scalar into a rank 1 variable') + return + else if ( type == 2 ) then + call lammps_error_all (ptr, FLERR, 'You cannot extract a fix& + & array into a rank 1 variable.') + return + else if ( type /= 1 ) then + call lammps_error_all (ptr, FLERR, 'Invalid type for fix extraction.') + return + end if + fix_len = lammps_extract_fix_vectorsize (ptr, id, style) + call C_F_pointer (Cptr, fix, (/fix_len/)) + ! Memory is only allocated for "global" fix variables, which we should + ! never get here, so no need to call lammps_free! + end subroutine lammps_extract_fix_dpa + subroutine lammps_extract_fix_dp2a (fix, ptr, id, style, type, i, j) + real (C_double), dimension(:,:), pointer, intent(out) :: fix + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: id + integer, intent(in) :: style, type, i, j + type (C_ptr) :: Cptr + type (C_ptr), pointer, dimension(:) :: Cfix + integer :: nr, nc + ! Check for the correct dimensionality + if ( style == 0 ) then + call lammps_error_all (ptr, FLERR, 'It is not possible to extract the& + & entire array from global fix data.') + return + else if ( type == 0 ) then + call lammps_error_all (ptr, FLERR, 'You cannot extract a fix& + & scalar (rank 0) into a rank 2 variable.') + return + else if ( type == 1 ) then + call lammps_error_all (ptr, FLERR, 'You cannot extract a fix& + & vector (rank 1) into a rank 2 variable.') + return + end if + call lammps_extract_fix_arraysize (ptr, id, style, nr, nc) + ! Extract pointer to first element as Cfix(1) + call C_F_pointer (Cptr, Cfix, (/nr/)) + ! Now extract the array, which is transposed + call C_F_pointer (Cfix(1), fix, (/nc, nr/)) + end subroutine lammps_extract_fix_dp2a + +!----------------------------------------------------------------------------- + +! lammps_extract_variable {{{2 + function lammps_extract_variable_Cptr (ptr, name, group) result (variable) + type (C_ptr) :: ptr, variable + character (len=*) :: name + character (len=*), optional :: group + character (kind=C_char), dimension(len_trim(name)+1) :: Cname + character (kind=C_char), dimension(:), allocatable :: Cgroup + Cname = string2Cstring (name) + if ( present(group) ) then + allocate (Cgroup(len_trim(group)+1)) + Cgroup = string2Cstring (group) + else + allocate (Cgroup(1)) + Cgroup(1) = C_NULL_CHAR + end if + variable = lammps_actual_extract_variable (ptr, Cname, Cgroup) + deallocate (Cgroup) + end function lammps_extract_variable_Cptr + subroutine lammps_extract_variable_dp (variable, ptr, name, group) + real (C_double), intent(out) :: variable + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + character (len=*), intent(in), optional :: group + type (C_ptr) :: Cptr + real (C_double), pointer :: Fptr + if ( present(group) ) then + Cptr = lammps_extract_variable_Cptr (ptr, name, group) + else + Cptr = lammps_extract_variable_Cptr (ptr, name) + end if + call C_F_pointer (Cptr, Fptr) + variable = Fptr + nullify (Fptr) + call lammps_free (Cptr) + end subroutine lammps_extract_variable_dp + subroutine lammps_extract_variable_dpa (variable, ptr, name, group) + real (C_double), dimension(:), allocatable, intent(out) :: variable + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + character (len=*), intent(in), optional :: group + type (C_ptr) :: Cptr + real (C_double), dimension(:), pointer :: Fptr + integer :: natoms + if ( present(group) ) then + Cptr = lammps_extract_variable_Cptr (ptr, name, group) + else + Cptr = lammps_extract_variable_Cptr (ptr, name) + end if + natoms = lammps_get_natoms (ptr) + allocate (variable(natoms)) + call C_F_pointer (Cptr, Fptr, (/natoms/)) + variable = Fptr + nullify (Fptr) + call lammps_free (Cptr) + end subroutine lammps_extract_variable_dpa + +!-------------------------------------------------------------------------2}}} + + function lammps_get_thermo (ptr, name) result (dval) + double precision :: dval + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + character (kind=C_char), dimension(len_trim(name)+1) :: Cname + Cname = string2Cstring (name) + dval = lammps_actual_get_thermo (ptr, Cname) + end function lammps_get_thermo + + subroutine lammps_set_variable (ptr, name, str, err) + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name, str + integer, optional :: err + integer (C_int) :: Cerr + character (kind=C_char) :: Cname(len_trim(name)+1), Cstr(len_trim(str)+1) + Cname = string2Cstring (name) + Cstr = string2Cstring (str) + Cerr = lammps_actual_set_variable (ptr, Cname, Cstr) + if ( present(err) ) err = Cerr + end subroutine lammps_set_variable + + subroutine lammps_reset_box (ptr, boxlo, boxhi, xy, yz, xz) + type (C_ptr), intent(in) :: ptr + double precision, dimension(3), intent(in) :: boxlo, boxhi + double precision, intent(in) :: xy, yz, xz + real (C_double) :: C_boxlo(3), C_boxhi(3), C_xy, C_yz, C_xz + C_boxlo = boxlo + C_boxhi = boxhi + C_xy = xy + C_xz = xz + C_yz = yz + call lammps_actual_reset_box (ptr, C_boxlo, C_boxhi, C_xy, C_xz, C_yz) + end subroutine lammps_reset_box + +! lammps_gather_atoms {{{2 + subroutine lammps_gather_atoms_ia (ptr, name, count, data) + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + integer, intent(in) :: count + integer, dimension(:), allocatable, intent(out) :: data + type (C_ptr) :: Cdata + integer (C_int), dimension(:), pointer :: Fdata + integer (C_int) :: natoms + character (kind=C_char), dimension(len_trim(name)+1) :: Cname + integer (C_int), parameter :: Ctype = 0_C_int + integer (C_int) :: Ccount + natoms = lammps_get_natoms (ptr) + Cname = string2Cstring (name) + if ( count /= 1 .and. count /= 3 ) then + call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires& + & count to be either 1 or 3') + else + Ccount = count + end if + allocate ( Fdata(count*natoms) ) + allocate ( data(count*natoms) ) + Cdata = C_loc (Fdata(1)) + call lammps_actual_gather_atoms (ptr, Cname, Ctype, Ccount, Cdata) + data = Fdata + deallocate (Fdata) + end subroutine lammps_gather_atoms_ia + subroutine lammps_gather_atoms_dpa (ptr, name, count, data) + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + integer, intent(in) :: count + double precision, dimension(:), allocatable, intent(out) :: data + type (C_ptr) :: Cdata + real (C_double), dimension(:), pointer :: Fdata + integer (C_int) :: natoms + character (kind=C_char), dimension(len_trim(name)+1) :: Cname + integer (C_int), parameter :: Ctype = 1_C_int + integer (C_int) :: Ccount + natoms = lammps_get_natoms (ptr) + Cname = string2Cstring (name) + if ( count /= 1 .and. count /= 3 ) then + call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires& + & count to be either 1 or 3') + else + Ccount = count + end if + allocate ( Fdata(count*natoms) ) + allocate ( data(count*natoms) ) + Cdata = C_loc (Fdata(1)) + call lammps_actual_gather_atoms (ptr, Cname, Ctype, Ccount, Cdata) + data = Fdata(:) + deallocate (Fdata) + end subroutine lammps_gather_atoms_dpa + +! lammps_gather_atoms_concat {{{2 + subroutine lammps_gather_atoms_concat_ia (ptr, name, count, data) + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + integer, intent(in) :: count + integer, dimension(:), allocatable, intent(out) :: data + type (C_ptr) :: Cdata + integer (C_int), dimension(:), pointer :: Fdata + integer (C_int) :: natoms + character (kind=C_char), dimension(len_trim(name)+1) :: Cname + integer (C_int), parameter :: Ctype = 0_C_int + integer (C_int) :: Ccount + natoms = lammps_get_natoms (ptr) + Cname = string2Cstring (name) + if ( count /= 1 .and. count /= 3 ) then + call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires& + & count to be either 1 or 3') + else + Ccount = count + end if + allocate ( Fdata(count*natoms) ) + allocate ( data(count*natoms) ) + Cdata = C_loc (Fdata(1)) + call lammps_actual_gather_atoms_concat (ptr, Cname, Ctype, Ccount, Cdata) + data = Fdata + deallocate (Fdata) + end subroutine lammps_gather_atoms_concat_ia + subroutine lammps_gather_atoms_concat_dpa (ptr, name, count, data) + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + integer, intent(in) :: count + double precision, dimension(:), allocatable, intent(out) :: data + type (C_ptr) :: Cdata + real (C_double), dimension(:), pointer :: Fdata + integer (C_int) :: natoms + character (kind=C_char), dimension(len_trim(name)+1) :: Cname + integer (C_int), parameter :: Ctype = 1_C_int + integer (C_int) :: Ccount + natoms = lammps_get_natoms (ptr) + Cname = string2Cstring (name) + if ( count /= 1 .and. count /= 3 ) then + call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms_concat& + & requires count to be either 1 or 3') + else + Ccount = count + end if + allocate ( Fdata(count*natoms) ) + allocate ( data(count*natoms) ) + Cdata = C_loc (Fdata(1)) + call lammps_actual_gather_atoms_concat (ptr, Cname, Ctype, Ccount, Cdata) + data = Fdata(:) + deallocate (Fdata) + end subroutine lammps_gather_atoms_concat_dpa + +!----------------------------------------------------------------------------- + +! lammps_gather_atoms_subset {{{2 + subroutine lammps_gather_atoms_subset_ia (ptr,name,count,ids,data) + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + integer, intent(in) :: count, ids(:) + integer, dimension(:), allocatable, intent(out) :: data + type (C_ptr) :: Cdata + integer (C_int), dimension(:), pointer :: Fdata + integer (C_int) :: ndata, Cids(size(ids)) + character (kind=C_char), dimension(len_trim(name)+1) :: Cname + integer (C_int), parameter :: Ctype = 0_C_int + integer (C_int) :: Ccount + ndata = size(ids) + Cname = string2Cstring (name) + Cids = ids + if ( count /= 1 .and. count /= 3 ) then + call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms_subset& + & requires count to be either 1 or 3') + else + Ccount = count + end if + allocate ( Fdata(count*ndata) ) + allocate ( data(count*ndata) ) + Cdata = C_loc (Fdata(1)) + call lammps_actual_gather_atoms_subset (ptr, Cname, Ctype, Ccount, & + ndata, Cids, Cdata) + data = Fdata + deallocate (Fdata) + end subroutine lammps_gather_atoms_subset_ia + subroutine lammps_gather_atoms_subset_dpa (ptr,name,count,ids,data) + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + integer, intent(in) :: count, ids(:) + double precision, dimension(:), allocatable, intent(out) :: data + type (C_ptr) :: Cdata + real (C_double), dimension(:), pointer :: Fdata + integer (C_int) :: ndata, Cids(size(ids)) + character (kind=C_char), dimension(len_trim(name)+1) :: Cname + integer (C_int), parameter :: Ctype = 1_C_int + integer (C_int) :: Ccount + ndata = size(ids) + Cname = string2Cstring (name) + Cids = ids + if ( count /= 1 .and. count /= 3 ) then + call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires& + & count to be either 1 or 3') + else + Ccount = count + end if + allocate ( Fdata(count*ndata) ) + allocate ( data(count*ndata) ) + Cdata = C_loc (Fdata(1)) + call lammps_actual_gather_atoms_subset (ptr, Cname, Ctype, Ccount, & + ndata, Cids, Cdata) + data = Fdata + deallocate (Fdata) + end subroutine lammps_gather_atoms_subset_dpa + +!----------------------------------------------------------------------------- + +! lammps_scatter_atoms {{{2 + subroutine lammps_scatter_atoms_ia (ptr, name, data) + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + integer, dimension(:), intent(in) :: data + integer (kind=C_int) :: natoms, Ccount + integer (kind=C_int), parameter :: Ctype = 0_C_int + character (kind=C_char), dimension(len_trim(name)+1) :: Cname + integer (C_int), dimension(size(data)), target :: Fdata + type (C_ptr) :: Cdata + natoms = lammps_get_natoms (ptr) + Cname = string2Cstring (name) + Ccount = size(data) / natoms + if ( Ccount /= 1 .and. Ccount /= 3 ) & + call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires& + & count to be either 1 or 3') + Fdata = data + Cdata = C_loc (Fdata(1)) + call lammps_actual_scatter_atoms (ptr, Cname, Ctype, Ccount, Cdata) + end subroutine lammps_scatter_atoms_ia + subroutine lammps_scatter_atoms_dpa (ptr, name, data) + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + double precision, dimension(:), intent(in) :: data + integer (kind=C_int) :: natoms, Ccount + integer (kind=C_int), parameter :: Ctype = 1_C_int + character (kind=C_char), dimension(len_trim(name)+1) :: Cname + real (C_double), dimension(size(data)), target :: Fdata + type (C_ptr) :: Cdata + natoms = lammps_get_natoms (ptr) + Cname = string2Cstring (name) + Ccount = size(data) / natoms + if ( Ccount /= 1 .and. Ccount /= 3 ) & + call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires& + & count to be either 1 or 3') + Fdata = data + Cdata = C_loc (Fdata(1)) + call lammps_actual_scatter_atoms (ptr, Cname, Ctype, Ccount, Cdata) + end subroutine lammps_scatter_atoms_dpa + +!----------------------------------------------------------------------------- + +! lammps_scatter_atoms_subset {{{2 + subroutine lammps_scatter_atoms_subset_ia (ptr, name, ids, data) + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + integer, dimension(:), intent(in) :: data, ids + integer (kind=C_int) :: ndata, Ccount, Cids(size(ids)) + integer (kind=C_int), parameter :: Ctype = 0_C_int + character (kind=C_char), dimension(len_trim(name)+1) :: Cname + integer (C_int), dimension(size(data)), target :: Fdata + type (C_ptr) :: Cdata + ndata = size(ids) + Cname = string2Cstring (name) + Ccount = size(data) / ndata + if ( Ccount /= 1 .and. Ccount /= 3 ) & + call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires& + & count to be either 1 or 3') + Fdata = data + Cdata = C_loc (Fdata(1)) + Cids = ids + call lammps_actual_scatter_atoms_subset (ptr, Cname, Ctype, Ccount, & + ndata, Cids, Cdata) + end subroutine lammps_scatter_atoms_subset_ia + subroutine lammps_scatter_atoms_subset_dpa (ptr, name, ids, data) + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: name + double precision, dimension(:), intent(in) :: data, ids + integer (kind=C_int) :: ndata, Ccount, Cids(size(ids)) + integer (kind=C_int), parameter :: Ctype = 1_C_int + character (kind=C_char), dimension(len_trim(name)+1) :: Cname + real (C_double), dimension(size(data)), target :: Fdata + type (C_ptr) :: Cdata + ndata = size(ids) + Cname = string2Cstring (name) + Ccount = size(data) / ndata + if ( Ccount /= 1 .and. Ccount /= 3 ) & + call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires& + & count to be either 1 or 3') + Fdata = data + Cdata = C_loc (Fdata(1)) + call lammps_actual_scatter_atoms_subset (ptr, Cname, Ctype, Ccount, & + ndata, Cids, Cdata) + end subroutine lammps_scatter_atoms_subset_dpa + +!----------------------------------------------------------------------------- + + subroutine lammps_create_atoms (ptr, id, type, x, v, image, shrinkexceed) + type (C_ptr), intent(in) :: ptr + integer (kind=C_tagint), dimension(:), optional :: id + integer, dimension(:) :: type + double precision, dimension(:,:) :: x + double precision, dimension(:,:), optional :: v + integer (kind=C_imageint), dimension(:), target, optional :: image + logical, optional :: shrinkexceed + real (C_double), dimension(size(x)) :: C_x, C_v + integer (C_int) :: C_shrinkexceed, n + integer (kind=C_tagint) :: C_id + integer (C_imageint), dimension(size(x)/3) :: C_image + integer (C_int) :: C_type + if (shrinkexceed) then + C_shrinkexceed = 1_C_int + else + C_shrinkexceed = 0_C_int + end if + C_x = reshape(transpose(x), shape(C_x)) + if ( present(v) ) then + C_v = reshape(transpose(v), shape(C_v)) + else + C_v = 0.0_C_double + end if + if ( present(image) ) then + C_image = image + else + C_image = int(0,kind=C_imageint) + end if + n = size(type) + call lammps_actual_create_atoms (ptr, n, C_id, C_type, C_x, C_v, & + C_image, C_shrinkexceed) + end subroutine lammps_create_atoms + +!----------------------------------------------------------------------------- + + function lammps_config_has_package (package_name) result (has_it) + character (len=*), intent(in) :: package_name + character (len=1, kind=C_char), dimension(len_trim(package_name)+1) :: & + C_package_name + logical :: has_it + integer (C_int) :: C_has_it + C_package_name = string2Cstring (package_name) + C_has_it = lammps_actual_config_has_package (C_package_name) + has_it = (C_has_it == 1) + end function lammps_config_has_package + +!----------------------------------------------------------------------------- + + function lammps_config_package_name (index, buffer) result (installed) + character (len=*), intent(inout) :: buffer + integer, intent(in) :: index + logical :: installed + integer (kind=C_int) :: C_installed, C_index, max_size + character (len=1, kind=C_char), dimension(len_trim(buffer)+1) :: C_buffer + C_buffer = string2Cstring (buffer) + max_size = len(buffer) + C_index = index + C_installed = lammps_actual_config_package_name (C_index, C_buffer, & + max_size) + installed = (C_installed == 1_C_int) + buffer = Cstring2string (C_buffer) + end function lammps_config_package_name + +!----------------------------------------------------------------------------- + + logical function lammps_config_has_gzip_support () result (has_it) + integer (C_int) :: C_has_it + C_has_it = lammps_actual_config_has_gzip_support () + has_it = (C_has_it == 1_C_int) + end function lammps_config_has_gzip_support + +!----------------------------------------------------------------------------- + + logical function lammps_config_has_png_support () result (has_it) + integer (C_int) :: C_has_it + C_has_it = lammps_actual_config_has_png_support () + has_it = (C_has_it == 1_C_int) + end function lammps_config_has_png_support + +!----------------------------------------------------------------------------- + + logical function lammps_config_has_jpeg_support () result (has_it) + integer (C_int) :: C_has_it + C_has_it = lammps_actual_config_has_jpeg_support () + has_it = (C_has_it == 1_C_int) + end function lammps_config_has_jpeg_support + +!----------------------------------------------------------------------------- + + logical function lammps_config_has_ffmpeg_support () result (has_it) + integer (C_int) :: C_has_it + C_has_it = lammps_actual_config_has_ffmpeg_support () + has_it = (C_has_it == 1_C_int) + end function lammps_config_has_ffmpeg_support + +!----------------------------------------------------------------------------- + + logical function lammps_config_has_exceptions () result (has_it) + integer (C_int) :: C_has_it + C_has_it = lammps_actual_config_has_exceptions () + has_it = (C_has_it == 1_C_int) + end function lammps_config_has_exceptions + +!----------------------------------------------------------------------------- + + function lammps_find_pair_neighlist (ptr, style, exact, nsub, request) & + result (neighlist) + integer :: neighlist + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: style + logical, intent(in) :: exact + integer, intent(in) :: nsub, request + integer (C_int) :: C_exact, C_nsub, C_neighlist, C_request + character (kind=C_char), dimension(len_trim(style)+1) :: C_style + if (exact) then + C_exact = 1_C_int + else + C_exact = 0_C_int + end if + C_nsub = nsub + C_request = request + C_style = string2Cstring (style) + C_neighlist = lammps_actual_find_pair_neighlist (ptr, C_style, C_exact, & + C_nsub, C_request) + neighlist = C_neighlist + end function lammps_find_pair_neighlist + +!----------------------------------------------------------------------------- + + function lammps_find_fix_neighlist (ptr, id, request) result (neighlist) + integer :: neighlist + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: id + integer, intent(in) :: request + integer (C_int) :: C_request, C_neighlist + character (kind=C_char), dimension(len_trim(id)+1) :: C_id + C_id = string2Cstring(id) + C_request = request + C_neighlist = lammps_actual_find_fix_neighlist (ptr, C_id, C_request) + neighlist = C_neighlist + end function lammps_find_fix_neighlist + +!----------------------------------------------------------------------------- + + function lammps_find_compute_neighlist (ptr, id, request) result (neighlist) + integer :: neighlist + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: id + integer, intent(in) :: request + integer (C_int) :: C_request + character (kind=C_char), dimension(len_trim(id)+1) :: C_id + C_id = string2Cstring(id) + C_request = request + neighlist = lammps_actual_find_compute_neighlist (ptr, C_id, C_request) + end function lammps_find_compute_neighlist + +!----------------------------------------------------------------------------- + + function lammps_neighlist_num_elements (ptr, idx) result (nelements) + integer :: nelements + type (C_ptr), intent(in) :: ptr + integer, intent(in) :: idx + integer (C_int) :: C_idx + C_idx = idx + nelements = lammps_actual_neighlist_num_elements (ptr, C_idx) + end function lammps_neighlist_num_elements + +!----------------------------------------------------------------------------- + + subroutine lammps_neighlist_element_neighbors (ptr, idx, element, iatom, & + numneigh, neighbors) + type (C_ptr), intent(in) :: ptr + integer, intent(in) :: idx, element + integer, intent(out) :: iatom, numneigh + integer (C_int), dimension(:), pointer, intent(out) :: neighbors + integer (C_int) :: C_idx, C_element, C_iatom, C_numneigh + type (C_ptr) :: C_neighbors + C_idx = idx + C_element = element + call lammps_actual_neighlist_element_neighbors (ptr, C_idx, C_element, & + C_iatom, C_numneigh, C_neighbors) + iatom = C_iatom + numneigh = C_numneigh + call C_F_pointer (C_neighbors, neighbors, [numneigh]) + end subroutine lammps_neighlist_element_neighbors + +!----------------------------------------------------------------------------- + +! These are only defined if -DLAMMPS_EXCEPTIONS was issued +#ifdef LAMMPS_EXCEPTIONS + logical function lammps_has_error (ptr) result (has_it) + type (C_ptr), intent(in) :: ptr + integer (kind=C_int) :: C_has_it + C_has_it = lammps_actual_has_error (ptr) + has_it = (C_has_it == 1_C_int) + end function lammps_has_error + +!----------------------------------------------------------------------------- + + function lammps_get_last_error_message (ptr, buffer) result (error_type) + integer (C_int) :: error_type + type (C_ptr), intent(in) :: ptr + character (len=*), intent(out) :: buffer + integer (C_int) :: buffer_size + character (len=1, kind=C_char), dimension(len(buffer)+1) :: C_buffer + buffer_size = len(buffer) + error_type = lammps_actual_get_last_error_message (ptr, C_buffer, & + buffer_size) + buffer = Cstring2string (C_buffer) + end function lammps_get_last_error_message +#endif +!-------------------------------------------------------------------------2}}} + + function lammps_extract_compute_vectorsize (ptr, id, style) & + result (vectorsize) + integer :: vectorsize + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: id + integer, intent(in) :: style + integer (C_int) :: Cvectorsize, Cstyle + character (kind=C_char), dimension(len_trim(id)+1) :: Cid + Cid = string2Cstring (id) + Cstyle = int(style, C_int) + Cvectorsize = lammps_actual_extract_compute_vectorsize (ptr, Cid, Cstyle) + vectorsize = int(Cvectorsize, kind(vectorsize)) + end function lammps_extract_compute_vectorsize + +!----------------------------------------------------------------------------- + + function lammps_extract_fix_vectorsize (ptr, id, style) & + result (vectorsize) + integer :: vectorsize + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: id + integer, intent(in) :: style + integer (C_int) :: Cvectorsize, Cstyle + character (kind=C_char), dimension(len_trim(id)+1) :: Cid + Cid = string2Cstring (id) + Cstyle = int(style, C_int) + Cvectorsize = lammps_actual_extract_fix_vectorsize (ptr, Cid, Cstyle) + vectorsize = int(Cvectorsize, kind(vectorsize)) + end function lammps_extract_fix_vectorsize + +!----------------------------------------------------------------------------- + + subroutine lammps_extract_compute_arraysize (ptr, id, style, nrows, ncols) + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: id + integer, intent(in) :: style + integer, intent(out) :: nrows, ncols + integer (C_int) :: Cstyle, Cnrows, Cncols + character (kind=C_char), dimension(len_trim(id)+1) :: Cid + Cid = string2Cstring (id) + Cstyle = int (style, C_int) + call lammps_actual_extract_compute_arraysize (ptr, Cid, Cstyle, & + Cnrows, Cncols) + nrows = int (Cnrows, kind(nrows)) + ncols = int (Cncols, kind(ncols)) + end subroutine lammps_extract_compute_arraysize + +!----------------------------------------------------------------------------- + + subroutine lammps_extract_fix_arraysize (ptr, id, style, nrows, ncols) + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: id + integer, intent(in) :: style + integer, intent(out) :: nrows, ncols + integer (C_int) :: Cstyle, Cnrows, Cncols + character (kind=C_char), dimension(len_trim(id)+1) :: Cid + Cid = string2Cstring (id) + Cstyle = int (style, kind(Cstyle)) + call lammps_actual_extract_fix_arraysize (ptr, Cid, Cstyle, & + Cnrows, Cncols) + nrows = int (Cnrows, kind(nrows)) + ncols = int (Cncols, kind(ncols)) + end subroutine lammps_extract_fix_arraysize + +!----------------------------------------------------------------------------- + + subroutine lammps_error_all (ptr, file, line, str) + type (C_ptr), intent(in) :: ptr + character (len=*), intent(in) :: file, str + integer, intent(in) :: line + character (kind=C_char), dimension(len_trim(file)+1) :: Cfile + character (kind=C_char), dimension(len_trim(str)+1) :: Cstr + integer (C_int) :: Cline + Cline = int(line, kind(Cline)) + Cfile = string2Cstring (file) + Cstr = string2Cstring (str) + call lammps_actual_error_all (ptr, Cfile, Cline, Cstr) + end subroutine lammps_error_all + +!----------------------------------------------------------------------------- + +! Locally defined helper functions {{{1 + + pure function string2Cstring (string) result (C_string) + use, intrinsic :: ISO_C_binding, only : C_char, C_NULL_CHAR + character (len=*), intent(in) :: string + character (len=1, kind=C_char) :: C_string (len_trim(string)+1) + integer :: i, n + n = len_trim (string) + forall (i = 1:n) + C_string(i) = string(i:i) + end forall + C_string(n+1) = C_NULL_CHAR + end function string2Cstring + +!----------------------------------------------------------------------------- + + pure function Cstrlen (Cstring) result (n) + character (len=1, kind=C_char), dimension(:), intent(in) :: Cstring + integer :: n, i + n = size(Cstring) + do i = 1, size(Cstring) + if ( Cstring(i) == C_NULL_CHAR ) then + n = i - 1 + return + end if + end do + end function Cstrlen + +!----------------------------------------------------------------------------- + + pure function Cstring2string (Cstring) result (string) + !use, intrinsic :: ISO_C_binding, only : C_char, C_NULL_CHAR + character (len=1, kind=C_char), intent(in) :: Cstring (:) + character (len=Cstrlen(Cstring)) :: string + integer :: i, n + n = Cstrlen(Cstring) + string = '' + forall (i = 1:n) + string(i:i) = Cstring(i) + end forall + end function Cstring2string + +!----------------------------------------------------------------------------- + + subroutine Cstring2argcargv (Cstring, argc, argv) + !! Converts a C-style string to argc and argv, that is, words in Cstring + !! become C-style strings in argv. IMPORTANT: Cstring is modified by + !! this routine! I would make Cstring local TO this routine and accept + !! a Fortran-style string instead, but we run into scoping and + !! allocation problems that way. This routine assumes the string is + !! null-terminated, as all C-style strings must be. + + character (kind=C_char), dimension(*), target, intent(inout) :: Cstring + integer (C_int), intent(out) :: argc + type (C_ptr), dimension(:), allocatable, intent(out) :: argv + + integer :: StringStart, SpaceIndex, strlen, argnum + + argc = 1_C_int + + ! Find the length of the string + strlen = 1 + do while ( Cstring(strlen) /= C_NULL_CHAR ) + strlen = strlen + 1 + end do + + ! Find the number of non-escaped spaces + SpaceIndex = 2 + do while ( SpaceIndex < strlen ) + if ( Cstring(SpaceIndex) == ' ' .and. & + Cstring(SpaceIndex-1) /= '\' ) then + argc = argc + 1_C_int + ! Find the next non-space character + do while ( Cstring(SpaceIndex+1) == ' ') + SpaceIndex = SpaceIndex + 1 + end do + end if + SpaceIndex = SpaceIndex + 1 + end do + + ! Now allocate memory for argv + allocate (argv(argc)) + + ! Now find the string starting and ending locations + StringStart = 1 + SpaceIndex = 2 + argnum = 1 + do while ( SpaceIndex < strlen ) + if ( Cstring(SpaceIndex) == ' ' .and. & + Cstring(SpaceIndex-1) /= '\' ) then + ! Found a real space => split strings and store this one + Cstring(Spaceindex) = C_NULL_CHAR ! Replaces space with NULL + argv(argnum) = C_loc(Cstring(StringStart)) + argnum = argnum + 1 + ! Find the next non-space character + do while ( Cstring(SpaceIndex+1) == ' ') + SpaceIndex = SpaceIndex + 1 + end do + StringStart = SpaceIndex + 1 + else if ( Cstring(SpaceIndex) == ' ' .and. & + Cstring(SpaceIndex-1) == '\' ) then + ! Escaped space => remove backslash and move rest of array + Cstring(SpaceIndex-1:strlen-1) = Cstring(SpaceIndex:strlen) + strlen = strlen - 1 ! Last character is still C_NULL_CHAR + end if + SpaceIndex = SpaceIndex + 1 + end do + ! Now handle the last argument + argv(argnum) = C_loc(Cstring(StringStart)) + + end subroutine Cstring2argcargv + +! 1}}} + +end module LAMMPS + +! vim: foldmethod=marker tabstop=3 softtabstop=3 shiftwidth=3 expandtab diff --git a/examples/COUPLE/fortran2/makefile b/examples/COUPLE/fortran2/Makefile similarity index 100% rename from examples/COUPLE/fortran2/makefile rename to examples/COUPLE/fortran2/Makefile diff --git a/examples/COUPLE/fortran2/README b/examples/COUPLE/fortran2/README index 01eb76b0a1..1710ca8ba6 100644 --- a/examples/COUPLE/fortran2/README +++ b/examples/COUPLE/fortran2/README @@ -1,265 +1,265 @@ -LAMMPS.F90 defines a Fortran 2003 module, LAMMPS, which wraps all functions in -src/library.h so they can be used directly from Fortran-encoded programs. - -All functions in src/library.h that use and/or return C-style pointers have -Fortran wrapper functions that use Fortran-style arrays, pointers, and -strings; all C-style memory management is handled internally with no user -intervention. See --USE-- for notes on how this interface differs from the -C interface (and the Python interface). - -This interface was created by Karl Hammond who you can contact with -questions: - -Karl D. Hammond -University of Tennessee, Knoxville -karlh at ugcs.caltech.edu -karlh at utk.edu - -------------------------------------- - ---COMPILATION-- - -First, be advised that mixed-language programming is not trivial. It requires -you to link in the required libraries of all languages you use (in this case, -those for Fortran, C, and C++), as well as any other libraries required. -You are also advised to read the --USE-- section below before trying to -compile. - -The following steps will work to compile this module (replace ${LAMMPS_SRC} -with the path to your LAMMPS source directory). - -Steps 3-5 are accomplished, possibly after some modifications to -the makefile, by make using the attached makefile. Said makefile also builds -the dynamically-linkable library (liblammps_fortran.so). - -** STATIC LIBRARY INSTRUCTIONS ** - (1) Compile LAMMPS as a static library. - Call the resulting file ${LAMMPS_LIB}, which will have an actual name - like liblmp_openmpi.a. If compiling using the MPI stubs in - ${LAMMPS_SRC}/STUBS, you will need to know where libmpi_stubs.a - is as well (I'll call it ${MPI_STUBS} hereafter) - (2) Copy said library to your Fortran program's source directory or replace - ${LAMMPS_LIB} with its full path in the instructions below. - (3) Compile (but don't link!) LAMMPS.F90. Example: - mpif90 -c LAMMPS.f90 - OR - gfortran -c LAMMPS.F90 - NOTE: you may get a warning such as, - subroutine lammps_open_wrapper (argc, argv, communicator, ptr) & - Variable 'communicator' at (1) is a parameter to the BIND(C) - procedure 'lammps_open_wrapper' but may not be C interoperable - This is normal (see --IMPLEMENTATION NOTES--). - - (4) Compile (but don't link) LAMMPS-wrapper.cpp. You will need its header - file as well. You will have to provide the locations of LAMMPS's - header files. For example, - mpicxx -c -I${LAMMPS_SRC} LAMMPS-wrapper.cpp - OR - g++ -c -I${LAMMPS_SRC} -I${LAMMPS_SRC}/STUBS LAMMPS-wrapper.cpp - OR - icpc -c -I${LAMMPS_SRC} -I${LAMMPS_SRC}/STUBS LAMMPS-wrapper.cpp - (5) OPTIONAL: Make a library from the object files so you can carry around - two files instead of three. Example: - ar rs liblammps_fortran.a LAMMPS.o LAMMPS-wrapper.o - This will create the file liblammps_fortran.a that you can use in place - of "LAMMPS.o LAMMPS-wrapper.o" later. Note that you will still - need to have the .mod file from part (3). - - It is also possible to add LAMMPS.o and LAMMPS-wrapper.o into the - LAMMPS library (e.g., liblmp_openmpi.a) instead of creating a separate - library, like so: - ar rs ${LAMMPS_LIB} LAMMPS.o LAMMPS-wrapper.o - In this case, you can now use the Fortran wrapper functions as if they - were part of the usual LAMMPS library interface (if you have the module - file visible to the compiler, that is). - (6) Compile (but don't link) your Fortran program. Example: - mpif90 -c myfreeformatfile.f90 - mpif90 -c myfixedformatfile.f - OR - gfortran -c myfreeformatfile.f90 - gfortran -c myfixedformatfile.f - The object files generated by these steps are collectively referred to - as ${my_object_files} in the next step(s). - - IMPORTANT: If the Fortran module from part (3) is not in the current - directory or in one searched by the compiler for module files, you will - need to include that location via the -I flag to the compiler, like so: - mpif90 -I${LAMMPS_SRC}/examples/COUPLE/fortran2 -c myfreeformatfile.f90 - - (7) Link everything together, including any libraries needed by LAMMPS (such - as the C++ standard library, the C math library, the JPEG library, fftw, - etc.) For example, - mpif90 LAMMPS.o LAMMPS-wrapper.o ${my_object_files} \ - ${LAMMPS_LIB} -lmpi_cxx -lstdc++ -lm - OR - gfortran LAMMPS.o LAMMPS-wrapper.o ${my_object_files} \ - ${LAMMPS_LIB} ${MPI_STUBS} -lstdc++ -lm - OR - ifort LAMMPS.o LAMMPS-wrapper.o ${my_object_files} \ - ${LAMMPS_LIB} ${MPI_STUBS} -cxxlib -lm - Any other required libraries (e.g. -ljpeg, -lfftw) should be added to - the end of this line. - -You should now have a working executable. - -** DYNAMIC LIBRARY INSTRUCTIONS ** - (1) Compile LAMMPS as a dynamic library - (make makeshlib && make -f Makefile.shlib [targetname]). - (2) Compile, but don't link, LAMMPS.F90 using the -fPIC flag, such as - mpif90 -fPIC -c LAMMPS.f90 - (3) Compile, but don't link, LAMMPS-wrapper.cpp in the same manner, e.g. - mpicxx -fPIC -c LAMMPS-wrapper.cpp - (4) Make the dynamic library, like so: - mpif90 -fPIC -shared -o liblammps_fortran.so LAMMPS.o LAMMPS-wrapper.o - (5) Compile your program, such as, - mpif90 -I${LAMMPS_SRC}/examples/COUPLE/fortran2 -c myfreeformatfile.f90 - where ${LAMMPS_SRC}/examples/COUPLE/fortran2 contains the .mod file from - step (3) - (6) Link everything together, such as - mpif90 ${my_object_files} -L${LAMMPS_SRC} \ - -L${LAMMPS_SRC}/examples/COUPLE/fortran2 -llammps_fortran \ - -llammps_openmpi -lmpi_cxx -lstdc++ -lm - -If you wish to avoid the -L flags, add the directories containing your -shared libraries to the LIBRARY_PATH environment variable. At run time, you -will have to add these directories to LD_LIBRARY_PATH as well; otherwise, -your executable will not find the libraries it needs. - -------------------------------------- - ---USAGE-- - -To use this API, your program unit (PROGRAM/SUBROUTINE/FUNCTION/MODULE/etc.) -should look something like this: - program call_lammps - use LAMMPS - ! Other modules, etc. - implicit none - type (lammps_instance) :: lmp ! This is a pointer to your LAMMPS instance - real (C_double) :: fix - real (C_double), dimension(:), pointer :: fix2 - ! Rest of declarations - call lammps_open_no_mpi ('lmp -in /dev/null -screen out.lammps',lmp) - ! Set up rest of program here - call lammps_file (lmp, 'in.example') - call lammps_extract_fix (fix, lmp, '2', 0, 1, 1, 1) - call lammps_extract_fix (fix2, lmp, '4', 0, 2, 1, 1) - call lammps_close (lmp) - end program call_lammps - -Important notes: - * Though I dislike the use of pointers, they are necessary when communicating - with C and C++, which do not support Fortran's ALLOCATABLE attribute. - * There is no need to deallocate C-allocated memory; this is done for you in - the cases when it is done (which are all cases when pointers are not - accepted, such as global fix data) - * All arguments which are char* variables in library.cpp are character (len=*) - variables here. For example, - call lammps_command (lmp, 'units metal') - will work as expected. - * The public functions (the only ones you can use) have interfaces as - described in the comments at the top of LAMMPS.F90. They are not always - the same as those in library.h, since C strings are replaced by Fortran - strings and the like. - * The module attempts to check whether you have done something stupid (such - as assign a 2D array to a scalar), but it's not perfect. For example, the - command - call lammps_extract_global (nlocal, ptr, 'nlocal') - will give nlocal correctly if nlocal is a pointer to type INTEGER, but it - will give the wrong answer if nlocal is a pointer to type REAL. This is a - feature of the (void*) type cast in library.cpp. There is no way I can - check this for you! It WILL catch you if you pass it an allocatable or - fixed-size array when it expects a pointer. - * Arrays constructed from temporary data from LAMMPS are ALLOCATABLE, and - represent COPIES of data, not the originals. Functions like - lammps_extract_atom, which return actual LAMMPS data, are pointers. - * IMPORTANT: Due to the differences between C and Fortran arrays (C uses - row-major vectors, Fortran uses column-major vectors), all arrays returned - from LAMMPS have their indices swapped. - * An example of a complete program, simple.f90, is included with this - package. - -------------------------------------- - ---TROUBLESHOOTING-- - -Compile-time errors (when compiling LAMMPS.F90, that is) probably indicate -that your compiler is not new enough to support Fortran 2003 features. For -example, GCC 4.1.2 will not compile this module, but GCC 4.4.0 will. - -If your compiler balks at 'use, intrinsic :: ISO_C_binding,' try removing the -intrinsic part so it looks like an ordinary module. However, it is likely -that such a compiler will also have problems with everything else in the -file as well. - -If you get a segfault as soon as the lammps_open call is made, check that you -compiled your program AND LAMMPS-wrapper.cpp using the same MPI headers. Using -the stubs for one and the actual MPI library for the other will cause Bad -Things to happen. - -If you find run-time errors, please pass them along via the LAMMPS Users -mailing list (please CC me as well; address above). Please provide a minimal -working example along with the names and versions of the compilers you are -using. Please make sure the error is repeatable and is in MY code, not yours -(generating a minimal working example will usually ensure this anyway). - -------------------------------------- - ---IMPLEMENTATION NOTES-- - -The Fortran procedures have the same names as the C procedures, and -their purpose is the same, but they may take different arguments. Here are -some of the important differences: - * lammps_open and lammps_open_no_mpi take a string instead of argc and - argv. This is necessary because C and C++ have a very different way - of treating strings than Fortran. If you want the command line to be - passed to lammps_open (as it often would be from C/C++), use the - GET_COMMAND intrinsic to obtain it. - * All C++ functions that accept char* pointers now accept Fortran-style - strings within this interface instead. - * All of the lammps_extract_[something] functions, which return void* - C-style pointers, have been replaced by generic subroutines that return - Fortran variables (which may be arrays). The first argument houses the - variable/pointer to be returned (pretend it's on the left-hand side); all - other arguments are identical except as stipulated above. - Note that it is not possible to declare generic functions that are selected - based solely on the type/kind/rank (TKR) signature of the return value, - only based on the TKR of the arguments. - * The SHAPE of the first argument to lammps_extract_[something] is checked - against the "shape" of the C array (e.g., double vs. double* vs. double**). - Calling a subroutine with arguments of inappropriate rank will result in an - error at run time. - * The indices i and j in lammps_extract_fix are used the same way they - are in f_ID[i][j] references in LAMMPS (i.e., starting from 1). This is - different than the way library.cpp uses these numbers, but is more - consistent with the way arrays are accessed in LAMMPS and in Fortran. - * The char* pointer normally returned by lammps_command is thrown away - in this version; note also that lammps_command is now a subroutine - instead of a function. - * The pointer to LAMMPS itself is of type(lammps_instance), which is itself - a synonym for type(C_ptr), part of ISO_C_BINDING. Type (C_ptr) is - C's void* data type. - * This module will almost certainly generate a compile-time warning, - such as, - subroutine lammps_open_wrapper (argc, argv, communicator, ptr) & - Variable 'communicator' at (1) is a parameter to the BIND(C) - procedure 'lammps_open_wrapper' but may not be C interoperable - This happens because lammps_open_wrapper actually takes a Fortran - INTEGER argument, whose type is defined by the MPI library itself. The - Fortran integer is converted to a C integer by the MPI library (if such - conversion is actually necessary). - * lammps_extract_global returns COPIES of the (scalar) data, as does the - C version. - * lammps_extract_atom, lammps_extract_compute, and lammps_extract_fix - have a first argument that will be associated with ACTUAL LAMMPS DATA. - This means the first argument must be: - * The right rank (via the DIMENSION modifier) - * A C-interoperable POINTER type (i.e., INTEGER (C_int) or - REAL (C_double)). - * lammps_extract_variable returns COPIES of the data, as the C library - interface does. There is no need to deallocate using lammps_free. - * The 'data' argument to lammps_gather_atoms and lammps_scatter atoms must - be ALLOCATABLE. It should be of type INTEGER or DOUBLE PRECISION. It - does NOT need to be C inter-operable (and indeed should not be). - * The 'count' argument of lammps_scatter_atoms is unnecessary; the shape of - the array determines the number of elements LAMMPS will read. +LAMMPS.F90 defines a Fortran 2003 module, LAMMPS, which wraps all functions in +src/library.h so they can be used directly from Fortran-encoded programs. + +All functions in src/library.h that use and/or return C-style pointers have +Fortran wrapper functions that use Fortran-style arrays, pointers, and +strings; all C-style memory management is handled internally with no user +intervention. See --USE-- for notes on how this interface differs from the +C interface (and the Python interface). + +This interface was created by Karl Hammond who you can contact with +questions: + +Karl D. Hammond +University of Tennessee, Knoxville +karlh at ugcs.caltech.edu +karlh at utk.edu + +------------------------------------- + +--COMPILATION-- + +First, be advised that mixed-language programming is not trivial. It requires +you to link in the required libraries of all languages you use (in this case, +those for Fortran, C, and C++), as well as any other libraries required. +You are also advised to read the --USE-- section below before trying to +compile. + +The following steps will work to compile this module (replace ${LAMMPS_SRC} +with the path to your LAMMPS source directory). + +Steps 3-5 are accomplished, possibly after some modifications to +the makefile, by make using the attached makefile. Said makefile also builds +the dynamically-linkable library (liblammps_fortran.so). + +** STATIC LIBRARY INSTRUCTIONS ** + (1) Compile LAMMPS as a static library. + Call the resulting file ${LAMMPS_LIB}, which will have an actual name + like liblmp_openmpi.a. If compiling using the MPI stubs in + ${LAMMPS_SRC}/STUBS, you will need to know where libmpi_stubs.a + is as well (I'll call it ${MPI_STUBS} hereafter) + (2) Copy said library to your Fortran program's source directory or replace + ${LAMMPS_LIB} with its full path in the instructions below. + (3) Compile (but don't link!) LAMMPS.F90. Example: + mpif90 -c LAMMPS.f90 + OR + gfortran -c LAMMPS.F90 + NOTE: you may get a warning such as, + subroutine lammps_open_wrapper (argc, argv, communicator, ptr) & + Variable 'communicator' at (1) is a parameter to the BIND(C) + procedure 'lammps_open_wrapper' but may not be C interoperable + This is normal (see --IMPLEMENTATION NOTES--). + + (4) Compile (but don't link) LAMMPS-wrapper.cpp. You will need its header + file as well. You will have to provide the locations of LAMMPS's + header files. For example, + mpicxx -c -I${LAMMPS_SRC} LAMMPS-wrapper.cpp + OR + g++ -c -I${LAMMPS_SRC} -I${LAMMPS_SRC}/STUBS LAMMPS-wrapper.cpp + OR + icpc -c -I${LAMMPS_SRC} -I${LAMMPS_SRC}/STUBS LAMMPS-wrapper.cpp + (5) OPTIONAL: Make a library from the object files so you can carry around + two files instead of three. Example: + ar rs liblammps_fortran.a LAMMPS.o LAMMPS-wrapper.o + This will create the file liblammps_fortran.a that you can use in place + of "LAMMPS.o LAMMPS-wrapper.o" later. Note that you will still + need to have the .mod file from part (3). + + It is also possible to add LAMMPS.o and LAMMPS-wrapper.o into the + LAMMPS library (e.g., liblmp_openmpi.a) instead of creating a separate + library, like so: + ar rs ${LAMMPS_LIB} LAMMPS.o LAMMPS-wrapper.o + In this case, you can now use the Fortran wrapper functions as if they + were part of the usual LAMMPS library interface (if you have the module + file visible to the compiler, that is). + (6) Compile (but don't link) your Fortran program. Example: + mpif90 -c myfreeformatfile.f90 + mpif90 -c myfixedformatfile.f + OR + gfortran -c myfreeformatfile.f90 + gfortran -c myfixedformatfile.f + The object files generated by these steps are collectively referred to + as ${my_object_files} in the next step(s). + + IMPORTANT: If the Fortran module from part (3) is not in the current + directory or in one searched by the compiler for module files, you will + need to include that location via the -I flag to the compiler, like so: + mpif90 -I${LAMMPS_SRC}/examples/COUPLE/fortran2 -c myfreeformatfile.f90 + + (7) Link everything together, including any libraries needed by LAMMPS (such + as the C++ standard library, the C math library, the JPEG library, fftw, + etc.) For example, + mpif90 LAMMPS.o LAMMPS-wrapper.o ${my_object_files} \ + ${LAMMPS_LIB} -lmpi_cxx -lstdc++ -lm + OR + gfortran LAMMPS.o LAMMPS-wrapper.o ${my_object_files} \ + ${LAMMPS_LIB} ${MPI_STUBS} -lstdc++ -lm + OR + ifort LAMMPS.o LAMMPS-wrapper.o ${my_object_files} \ + ${LAMMPS_LIB} ${MPI_STUBS} -cxxlib -lm + Any other required libraries (e.g. -ljpeg, -lfftw) should be added to + the end of this line. + +You should now have a working executable. + +** DYNAMIC LIBRARY INSTRUCTIONS ** + (1) Compile LAMMPS as a dynamic library + (make makeshlib && make -f Makefile.shlib [targetname]). + (2) Compile, but don't link, LAMMPS.F90 using the -fPIC flag, such as + mpif90 -fPIC -c LAMMPS.f90 + (3) Compile, but don't link, LAMMPS-wrapper.cpp in the same manner, e.g. + mpicxx -fPIC -c LAMMPS-wrapper.cpp + (4) Make the dynamic library, like so: + mpif90 -fPIC -shared -o liblammps_fortran.so LAMMPS.o LAMMPS-wrapper.o + (5) Compile your program, such as, + mpif90 -I${LAMMPS_SRC}/examples/COUPLE/fortran2 -c myfreeformatfile.f90 + where ${LAMMPS_SRC}/examples/COUPLE/fortran2 contains the .mod file from + step (3) + (6) Link everything together, such as + mpif90 ${my_object_files} -L${LAMMPS_SRC} \ + -L${LAMMPS_SRC}/examples/COUPLE/fortran2 -llammps_fortran \ + -llammps_openmpi -lmpi_cxx -lstdc++ -lm + +If you wish to avoid the -L flags, add the directories containing your +shared libraries to the LIBRARY_PATH environment variable. At run time, you +will have to add these directories to LD_LIBRARY_PATH as well; otherwise, +your executable will not find the libraries it needs. + +------------------------------------- + +--USAGE-- + +To use this API, your program unit (PROGRAM/SUBROUTINE/FUNCTION/MODULE/etc.) +should look something like this: + program call_lammps + use LAMMPS + ! Other modules, etc. + implicit none + type (lammps_instance) :: lmp ! This is a pointer to your LAMMPS instance + real (C_double) :: fix + real (C_double), dimension(:), pointer :: fix2 + ! Rest of declarations + call lammps_open_no_mpi ('lmp -in /dev/null -screen out.lammps',lmp) + ! Set up rest of program here + call lammps_file (lmp, 'in.example') + call lammps_extract_fix (fix, lmp, '2', 0, 1, 1, 1) + call lammps_extract_fix (fix2, lmp, '4', 0, 2, 1, 1) + call lammps_close (lmp) + end program call_lammps + +Important notes: + * Though I dislike the use of pointers, they are necessary when communicating + with C and C++, which do not support Fortran's ALLOCATABLE attribute. + * There is no need to deallocate C-allocated memory; this is done for you in + the cases when it is done (which are all cases when pointers are not + accepted, such as global fix data) + * All arguments which are char* variables in library.cpp are character (len=*) + variables here. For example, + call lammps_command (lmp, 'units metal') + will work as expected. + * The public functions (the only ones you can use) have interfaces as + described in the comments at the top of LAMMPS.F90. They are not always + the same as those in library.h, since C strings are replaced by Fortran + strings and the like. + * The module attempts to check whether you have done something stupid (such + as assign a 2D array to a scalar), but it's not perfect. For example, the + command + call lammps_extract_global (nlocal, ptr, 'nlocal') + will give nlocal correctly if nlocal is a pointer to type INTEGER, but it + will give the wrong answer if nlocal is a pointer to type REAL. This is a + feature of the (void*) type cast in library.cpp. There is no way I can + check this for you! It WILL catch you if you pass it an allocatable or + fixed-size array when it expects a pointer. + * Arrays constructed from temporary data from LAMMPS are ALLOCATABLE, and + represent COPIES of data, not the originals. Functions like + lammps_extract_atom, which return actual LAMMPS data, are pointers. + * IMPORTANT: Due to the differences between C and Fortran arrays (C uses + row-major vectors, Fortran uses column-major vectors), all arrays returned + from LAMMPS have their indices swapped. + * An example of a complete program, simple.f90, is included with this + package. + +------------------------------------- + +--TROUBLESHOOTING-- + +Compile-time errors (when compiling LAMMPS.F90, that is) probably indicate +that your compiler is not new enough to support Fortran 2003 features. For +example, GCC 4.1.2 will not compile this module, but GCC 4.4.0 will. + +If your compiler balks at 'use, intrinsic :: ISO_C_binding,' try removing the +intrinsic part so it looks like an ordinary module. However, it is likely +that such a compiler will also have problems with everything else in the +file as well. + +If you get a segfault as soon as the lammps_open call is made, check that you +compiled your program AND LAMMPS-wrapper.cpp using the same MPI headers. Using +the stubs for one and the actual MPI library for the other will cause Bad +Things to happen. + +If you find run-time errors, please pass them along via the LAMMPS Users +mailing list (please CC me as well; address above). Please provide a minimal +working example along with the names and versions of the compilers you are +using. Please make sure the error is repeatable and is in MY code, not yours +(generating a minimal working example will usually ensure this anyway). + +------------------------------------- + +--IMPLEMENTATION NOTES-- + +The Fortran procedures have the same names as the C procedures, and +their purpose is the same, but they may take different arguments. Here are +some of the important differences: + * lammps_open and lammps_open_no_mpi take a string instead of argc and + argv. This is necessary because C and C++ have a very different way + of treating strings than Fortran. If you want the command line to be + passed to lammps_open (as it often would be from C/C++), use the + GET_COMMAND intrinsic to obtain it. + * All C++ functions that accept char* pointers now accept Fortran-style + strings within this interface instead. + * All of the lammps_extract_[something] functions, which return void* + C-style pointers, have been replaced by generic subroutines that return + Fortran variables (which may be arrays). The first argument houses the + variable/pointer to be returned (pretend it's on the left-hand side); all + other arguments are identical except as stipulated above. + Note that it is not possible to declare generic functions that are selected + based solely on the type/kind/rank (TKR) signature of the return value, + only based on the TKR of the arguments. + * The SHAPE of the first argument to lammps_extract_[something] is checked + against the "shape" of the C array (e.g., double vs. double* vs. double**). + Calling a subroutine with arguments of inappropriate rank will result in an + error at run time. + * The indices i and j in lammps_extract_fix are used the same way they + are in f_ID[i][j] references in LAMMPS (i.e., starting from 1). This is + different than the way library.cpp uses these numbers, but is more + consistent with the way arrays are accessed in LAMMPS and in Fortran. + * The char* pointer normally returned by lammps_command is thrown away + in this version; note also that lammps_command is now a subroutine + instead of a function. + * The pointer to LAMMPS itself is of type(lammps_instance), which is itself + a synonym for type(C_ptr), part of ISO_C_BINDING. Type (C_ptr) is + C's void* data type. + * This module will almost certainly generate a compile-time warning, + such as, + subroutine lammps_open_wrapper (argc, argv, communicator, ptr) & + Variable 'communicator' at (1) is a parameter to the BIND(C) + procedure 'lammps_open_wrapper' but may not be C interoperable + This happens because lammps_open_wrapper actually takes a Fortran + INTEGER argument, whose type is defined by the MPI library itself. The + Fortran integer is converted to a C integer by the MPI library (if such + conversion is actually necessary). + * lammps_extract_global returns COPIES of the (scalar) data, as does the + C version. + * lammps_extract_atom, lammps_extract_compute, and lammps_extract_fix + have a first argument that will be associated with ACTUAL LAMMPS DATA. + This means the first argument must be: + * The right rank (via the DIMENSION modifier) + * A C-interoperable POINTER type (i.e., INTEGER (C_int) or + REAL (C_double)). + * lammps_extract_variable returns COPIES of the data, as the C library + interface does. There is no need to deallocate using lammps_free. + * The 'data' argument to lammps_gather_atoms and lammps_scatter atoms must + be ALLOCATABLE. It should be of type INTEGER or DOUBLE PRECISION. It + does NOT need to be C inter-operable (and indeed should not be). + * The 'count' argument of lammps_scatter_atoms is unnecessary; the shape of + the array determines the number of elements LAMMPS will read. From 086a71ba4655c163d9d92b32f4c89a36537e02e1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 2 Oct 2020 00:07:01 -0400 Subject: [PATCH 071/182] incorporate LAMMPS fortran2 interface updates and apply a few corrections --- examples/COUPLE/fortran2/LAMMPS.F90 | 26 ++++++++++++++++++++++---- examples/COUPLE/fortran2/Makefile | 7 ++++--- examples/COUPLE/fortran2/simple.f90 | 9 +++++---- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/examples/COUPLE/fortran2/LAMMPS.F90 b/examples/COUPLE/fortran2/LAMMPS.F90 index eb2b8f3eba..8b74a38721 100644 --- a/examples/COUPLE/fortran2/LAMMPS.F90 +++ b/examples/COUPLE/fortran2/LAMMPS.F90 @@ -46,7 +46,7 @@ !! subroutine lammps_extract_fix (fix, ptr, id, style, type, i, j) !! subroutine lammps_extract_variable (variable, ptr, name, group) !! double precision function lammps_get_thermo (ptr, name) -!! integer function lammps_get_natoms (ptr) +!! double precision function lammps_get_natoms (ptr) !! subroutine lammps_set_variable (ptr, name, str, [err]) !! subroutine lammps_reset_box (ptr, boxlo, boxhi, xy, yz, xz) !! subroutine lammps_gather_atoms (ptr, name, count, data) @@ -116,6 +116,7 @@ module LAMMPS lammps_instance => C_ptr implicit none private + ! We inherit some ISO_C_BINDING entities for ease of use public :: lammps_instance, C_ptr, C_double, C_int ! Only the following functions may be called by the user: @@ -140,6 +141,22 @@ module LAMMPS public :: lammps_has_error, lammps_get_last_error_message #endif + !! constants for extracting data from computes and fixes + !! and data types + + INTEGER, PARAMETER :: LMP_STYLE_GLOBAL = 0, LMP_STYLE_ATOM = 1, & + LMP_STYLE_LOCAL = 2, LMP_TYPE_SCALAR = 0, LMP_TYPE_VECTOR = 1, & + LMP_TYPE_ARRAY = 2, LMP_SIZE_VECTOR = 3, LMP_SIZE_ROWS = 4, & + LMP_SIZE_COLS = 5, LAMMPS_INT = 0, LAMMPS_INT_2D = 1, & + LAMMPS_DOUBLE = 2, LAMMPS_DOUBLE_2D = 3, LAMMPS_INT64 = 4, & + LAMMPS_INT64_2D = 5, LAMMPS_STRING = 6 + + PUBLIC :: LMP_STYLE_GLOBAL, LMP_STYLE_ATOM, LMP_STYLE_LOCAL, & + LMP_TYPE_SCALAR, LMP_TYPE_VECTOR, LMP_TYPE_ARRAY, & + LMP_SIZE_VECTOR, LMP_SIZE_ROWS, LMP_SIZE_COLS, LAMMPS_INT, & + LAMMPS_INT_2D, LAMMPS_DOUBLE, LAMMPS_DOUBLE_2D, LAMMPS_INT64, & + LAMMPS_INT64_2D, LAMMPS_STRING + !! Functions supplemental to the prototypes in library.h. {{{1 !! The function definitions (in C++) are contained in LAMMPS-wrapper.cpp. !! I would have written the first in Fortran, but the MPI libraries (which @@ -327,9 +344,9 @@ module LAMMPS function lammps_get_natoms (ptr) result (natoms) & bind (C, name='lammps_get_natoms') - import :: C_ptr, C_int + import :: C_ptr, C_double type (C_ptr), value :: ptr - integer (C_int) :: natoms + real (C_double) :: natoms end function lammps_get_natoms function lammps_actual_set_variable (ptr, name, str) result (err) & @@ -934,6 +951,7 @@ contains !! Wrapper functions local to this module {{{1 end if Cptr = lammps_extract_fix_Cptr (ptr, id, style, type, i, j) call C_F_pointer (Cptr, Fptr) + fix = Fptr nullify (Fptr) ! Memory is only allocated for "global" fix variables if ( style == 0 ) call lammps_free (Cptr) @@ -1293,7 +1311,7 @@ contains !! Wrapper functions local to this module {{{1 Cname = string2Cstring (name) Ccount = size(data) / natoms if ( Ccount /= 1 .and. Ccount /= 3 ) & - call lammps_error_all (ptr, FLERR, 'lammps_gather_atoms requires& + call lammps_error_all (ptr, FLERR, 'lammps_scatter_atoms requires& & count to be either 1 or 3') Fdata = data Cdata = C_loc (Fdata(1)) diff --git a/examples/COUPLE/fortran2/Makefile b/examples/COUPLE/fortran2/Makefile index 0b1f086d6a..f8a2126233 100644 --- a/examples/COUPLE/fortran2/Makefile +++ b/examples/COUPLE/fortran2/Makefile @@ -7,8 +7,9 @@ LAMMPS_SRC = $(LAMMPS_ROOT)/src # Uncomment the line below if using the MPI stubs library MPI_STUBS = #-I$(LAMMPS_SRC)/STUBS -FC = mpif90 # replace with your Fortran compiler -CXX = mpicxx # replace with your C++ compiler +FC = mpifort # replace with your Fortran compiler +CXX = mpicxx # replace with your C++ compiler +CXXLIB = -lstdc++ # replace with your C++ runtime libs # Flags for Fortran compiler, C++ compiler, and C preprocessor, respectively FFLAGS = -O2 -fPIC @@ -18,7 +19,7 @@ CPPFLAGS = -DOMPI_SKIP_MPICXX=1 -DMPICH_SKIP_MPICXX all : liblammps_fortran.a liblammps_fortran.so liblammps_fortran.so : LAMMPS.o LAMMPS-wrapper.o - $(FC) $(FFLAGS) -shared -o $@ $^ + $(FC) $(FFLAGS) -shared -o $@ $^ $(CXXLIB) liblammps_fortran.a : LAMMPS.o LAMMPS-wrapper.o $(AR) rs $@ $^ diff --git a/examples/COUPLE/fortran2/simple.f90 b/examples/COUPLE/fortran2/simple.f90 index 7ed3850a3d..0b84a1ecc1 100644 --- a/examples/COUPLE/fortran2/simple.f90 +++ b/examples/COUPLE/fortran2/simple.f90 @@ -60,19 +60,19 @@ program simple call lammps_command (lmp, 'run 500') ! This extracts f_2 as a scalar (the last two arguments can be arbitrary) - call lammps_extract_fix (fix, lmp, '2', 0, 1, 1, 1) + call lammps_extract_fix (fix, lmp, '2', LMP_STYLE_GLOBAL, LMP_TYPE_SCALAR, 1, 1) print *, 'Fix is ', fix ! This extracts f_4[1][1] as a scalar - call lammps_extract_fix (fix2, lmp, '4', 0, 2, 1, 1) + call lammps_extract_fix (fix2, lmp, '4', LMP_STYLE_GLOBAL, LMP_TYPE_ARRAY, 1, 1) print *, 'Fix 2 is ', fix2 ! This extracts the scalar compute of compute thermo_temp - call lammps_extract_compute (compute, lmp, 'thermo_temp', 0, 0) + call lammps_extract_compute (compute, lmp, 'thermo_temp', LMP_STYLE_GLOBAL, LMP_TYPE_SCALAR) print *, 'Compute is ', compute ! This extracts the vector compute of compute thermo_temp - call lammps_extract_compute (compute_v, lmp, 'thermo_temp', 0, 1) + call lammps_extract_compute (compute_v, lmp, 'thermo_temp', LMP_STYLE_GLOBAL, LMP_TYPE_VECTOR) print *, 'Vector is ', compute_v ! This extracts the masses @@ -90,6 +90,7 @@ program simple ! Allocates an array and assigns all positions to it call lammps_gather_atoms (lmp, 'x', 3, r) + print *, 'natoms = ', int(lammps_get_natoms(lmp)) print *, 'size(r) = ', size(r) print *, 'r is ', r(1:6) From 1f417f8eb4d4e5ca6d5d00bb247be6e13833bd62 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 2 Oct 2020 00:28:13 -0400 Subject: [PATCH 072/182] mention Fortran interface in examples/COUPLE/fortran2 now that it is up-to-date again --- doc/src/Fortran.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/src/Fortran.rst b/doc/src/Fortran.rst index 50738330d2..6197d2ffd2 100644 --- a/doc/src/Fortran.rst +++ b/doc/src/Fortran.rst @@ -33,6 +33,13 @@ Fortran code using the interface. cover the entire range of functionality available in the C and Python library interfaces. +.. note:: + + A contributed (and complete!) Fortran interface is available + in the ``examples/COUPLE/fortran2`` folder. Please see the + README file in that folder for more information about that + Fortran interface and how to contact its author and maintainer. + ---------- Creating or deleting a LAMMPS object From a0d0f96e523dadd38952929d5fb4634eb6ab000d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 2 Oct 2020 10:36:17 -0400 Subject: [PATCH 073/182] make f2c_string utility function portable across fortran compilers --- doc/src/Fortran.rst | 2 +- fortran/lammps.f90 | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/doc/src/Fortran.rst b/doc/src/Fortran.rst index 50738330d2..d411d56d42 100644 --- a/doc/src/Fortran.rst +++ b/doc/src/Fortran.rst @@ -24,7 +24,7 @@ of the source files: the lammps.f90 file needs to be compiled first, since it provides the ``LIBLAMMPS`` module that is imported by the Fortran code using the interface. -.. versionadded:: 30Sep2020 +.. versionadded:: 6Oct2020 .. admonition:: Work in Progress diff --git a/fortran/lammps.f90 b/fortran/lammps.f90 index 6511673c66..9e6ca22d5a 100644 --- a/fortran/lammps.f90 +++ b/fortran/lammps.f90 @@ -16,8 +16,8 @@ ! and library.h using the ISO_C_BINDING module of the Fortran compiler. ! ! Based on the LAMMPS Fortran 2003 module contributed by: -! Karl D. Hammond -! University of Tennessee, Knoxville (USA), 2012 +! Karl D. Hammond +! University of Missouri, 2012-2020 ! ! The Fortran module tries to follow the API of the C-library interface ! closely, but like the Python wrapper it employs an object oriented @@ -30,7 +30,7 @@ MODULE LIBLAMMPS USE, INTRINSIC :: ISO_C_BINDING, ONLY: c_ptr, c_null_ptr, c_loc, & - c_int, c_char, c_null_char, c_double + c_int, c_char, c_null_char, c_double, c_size_t, c_f_pointer IMPLICIT NONE PRIVATE @@ -114,6 +114,12 @@ MODULE LIBLAMMPS TYPE(c_ptr), VALUE :: str END SUBROUTINE lammps_commands_string + FUNCTION lammps_malloc(size) BIND(C, name='malloc') + IMPORT :: c_ptr, c_size_t + INTEGER(c_size_t), value :: size + TYPE(c_ptr) :: lammps_malloc + END FUNCTION lammps_malloc + SUBROUTINE lammps_free(ptr) BIND(C, name='lammps_free') IMPORT :: c_ptr TYPE(c_ptr), VALUE :: ptr @@ -267,14 +273,14 @@ CONTAINS CHARACTER (len=*), INTENT(in) :: f_string CHARACTER (len=1, kind=c_char), POINTER :: c_string(:) TYPE(c_ptr) :: ptr - INTEGER :: i, n + INTEGER(c_size_t) :: i, n n = LEN_TRIM(f_string) - ALLOCATE(c_string(n+1)) + ptr = lammps_malloc(n+1) + CALL C_F_POINTER(ptr,c_string,[1]) DO i=1,n c_string(i) = f_string(i:i) END DO c_string(n+1) = c_null_char - ptr = c_loc(c_string(1)) END FUNCTION f2c_string END MODULE LIBLAMMPS From 52c6353f868cc5c116232f89f411844dc0559e74 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 15:09:29 -0400 Subject: [PATCH 074/182] Fix typo --- src/library.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/library.cpp b/src/library.cpp index da9ece326e..06c5a632d4 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -4454,7 +4454,7 @@ the failing MPI ranks to send messages. * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. * \param buffer string buffer to copy the error message to * \param buf_size size of the provided string buffer - * \return 1 when all ranks had the error, 1 on a single rank error. + * \return 1 when all ranks had the error, 2 on a single rank error. */ int lammps_get_last_error_message(void *handle, char *buffer, int buf_size) { #ifdef LAMMPS_EXCEPTIONS From b57c8f6b7781feeb82bfd1f9570b89d688f3b9f2 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 16:53:41 -0400 Subject: [PATCH 075/182] Add tests for LAMMPS exceptions in Python --- unittest/python/python-open.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/unittest/python/python-open.py b/unittest/python/python-open.py index 6ad7d335d5..6153e032e3 100644 --- a/unittest/python/python-open.py +++ b/unittest/python/python-open.py @@ -18,6 +18,7 @@ try: machine = "" lmp = lammps(name=machine) has_mpi = lmp.has_mpi_support + has_exceptions = lmp.has_exceptions lmp.close() except: pass @@ -57,5 +58,32 @@ class PythonOpen(unittest.TestCase): self.assertEqual(lmp.opened,1) lmp.close() + @unittest.skipIf(not has_exceptions,"Skipping death test since LAMMPS isn't compiled with exception support") + def testUnknownCommand(self): + lmp = lammps(name=self.machine) + + with self.assertRaisesRegex(Exception, "ERROR: Unknown command: write_paper"): + lmp.command("write_paper") + + lmp.close() + + @unittest.skipIf(not has_exceptions,"Skipping death test since LAMMPS isn't compiled with exception support") + def testUnknownCommandInList(self): + lmp = lammps(name=self.machine) + + with self.assertRaisesRegex(Exception, "ERROR: Unknown command: write_paper"): + lmp.commands_list(["write_paper"]) + + lmp.close() + + @unittest.skipIf(not has_exceptions,"Skipping death test since LAMMPS isn't compiled with exception support") + def testUnknownCommandInList(self): + lmp = lammps(name=self.machine) + + with self.assertRaisesRegex(Exception, "ERROR: Unknown command: write_paper"): + lmp.commands_string("write_paper") + + lmp.close() + if __name__ == "__main__": unittest.main() From 60891fe6f998ffd09b36f8ef7854607989c670e3 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 17:19:04 -0400 Subject: [PATCH 076/182] Add Python_config.rst --- doc/src/Python_config.rst | 13 +++++++++++++ doc/src/Python_head.rst | 1 + 2 files changed, 14 insertions(+) create mode 100644 doc/src/Python_config.rst diff --git a/doc/src/Python_config.rst b/doc/src/Python_config.rst new file mode 100644 index 0000000000..62bd52900f --- /dev/null +++ b/doc/src/Python_config.rst @@ -0,0 +1,13 @@ +Retrieving LAMMPS configuration information +******************************************* + +* :py:attr:`has_mpi_support ` +* :py:attr:`has_exceptions ` +* :py:attr:`has_gzip_support ` +* :py:attr:`has_png_support ` +* :py:attr:`has_jpeg_support ` +* :py:attr:`has_ffmpeg_support ` +* :py:attr:`installed_packages ` + +* :py:meth:`lammps.has_style() ` +* :py:meth:`lammps.available_styles() Date: Fri, 2 Oct 2020 17:19:51 -0400 Subject: [PATCH 077/182] Update Python_usage.rst --- doc/src/Python_usage.rst | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/doc/src/Python_usage.rst b/doc/src/Python_usage.rst index ebf28b5c35..13c3b31cad 100644 --- a/doc/src/Python_usage.rst +++ b/doc/src/Python_usage.rst @@ -356,9 +356,10 @@ against invalid accesses. Retrieving or setting properties of LAMMPS objects ************************************************** -* :py:meth:`extract_compute() ` -* :py:meth:`extract_fix() ` -* :py:meth:`extract_variable() ` +* :py:meth:`extract_compute() `: extract value(s) from a compute +* :py:meth:`extract_fix() `: extract value(s) from a fix +* :py:meth:`extract_variable() `: extract value(s) from a variable +* :py:meth:`set_variable() `: set existing named string-style variable to value .. code-block:: Python @@ -381,14 +382,6 @@ Retrieving or setting properties of LAMMPS objects flag = lmp.set_variable(name,value) # set existing named string-style variable to value, flag = 0 if successful -For extract_atom(), a pointer to internal LAMMPS atom-based data is -returned, which you can use via normal Python subscripting. See the -extract() method in the src/atom.cpp file for a list of valid names. -Again, new names could easily be added if the property you want is not -listed. A pointer to a vector of doubles or integers, or a pointer to -an array of doubles (double \*\*) or integers (int \*\*) is returned. You -need to specify the appropriate data type via the type argument. - For extract_compute() and extract_fix(), the global, per-atom, or local data calculated by the compute or fix can be accessed. What is returned depends on whether the compute or fix calculates a scalar or @@ -405,7 +398,8 @@ data types. See the doc pages for individual :doc:`computes ` and :doc:`fixes ` for a description of what they calculate and store. -For extract_variable(), an :doc:`equal-style or atom-style variable ` is evaluated and its result returned. +For extract_variable(), an :doc:`equal-style or atom-style variable ` +is evaluated and its result returned. For equal-style variables a single double value is returned and the group argument is ignored. For atom-style variables, a vector of @@ -464,10 +458,10 @@ like this: .. code-block:: Python - from ctypes import \* + from ctypes import * natoms = lmp.get_natoms() - n3 = 3\*natoms - x = (n3\*c_double)() + n3 = 3*natoms + x = (n3*c_double)() x[0] = x coord of atom with ID 1 x[1] = y coord of atom with ID 1 x[2] = z coord of atom with ID 1 From d9cbb354d2f6b63dc654a6014512f536b8d69354 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 17:22:01 -0400 Subject: [PATCH 078/182] Move lammps exception code into its own property --- python/lammps.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/python/lammps.py b/python/lammps.py index 6f9cf5031d..1ca1b601f1 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -699,6 +699,18 @@ class lammps(object): # ------------------------------------------------------------------------- + @property + def _lammps_exception(self): + sb = create_string_buffer(100) + error_type = self.lib.lammps_get_last_error_message(self.lmp, sb, 100) + error_msg = sb.value.decode().strip() + + if error_type == 2: + return MPIAbortException(error_msg) + return Exception(error_msg) + + # ------------------------------------------------------------------------- + def file(self, path): """Read LAMMPS commands from a file. @@ -729,13 +741,7 @@ class lammps(object): self.lib.lammps_command(self.lmp,cmd) if self.has_exceptions and self.lib.lammps_has_error(self.lmp): - sb = create_string_buffer(100) - error_type = self.lib.lammps_get_last_error_message(self.lmp, sb, 100) - error_msg = sb.value.decode().strip() - - if error_type == 2: - raise MPIAbortException(error_msg) - raise Exception(error_msg) + raise self._lammps_exception # ------------------------------------------------------------------------- From 735597781914db9144dd4aa560edd652ba88699e Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 17:26:14 -0400 Subject: [PATCH 079/182] Add missing exception handling for functions that could cause errors --- python/lammps.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/python/lammps.py b/python/lammps.py index 1ca1b601f1..9f5900a6f1 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -725,6 +725,9 @@ class lammps(object): else: return self.lib.lammps_file(self.lmp, path) + if self.has_exceptions and self.lib.lammps_has_error(self.lmp): + raise self._lammps_exception + # ------------------------------------------------------------------------- def command(self,cmd): @@ -761,6 +764,9 @@ class lammps(object): self.lib.lammps_commands_list.argtypes = [c_void_p, c_int, c_char_p * narg] self.lib.lammps_commands_list(self.lmp,narg,args) + if self.has_exceptions and self.lib.lammps_has_error(self.lmp): + raise self._lammps_exception + # ------------------------------------------------------------------------- def commands_string(self,multicmd): @@ -776,6 +782,9 @@ class lammps(object): if type(multicmd) is str: multicmd = multicmd.encode() self.lib.lammps_commands_string(self.lmp,c_char_p(multicmd)) + if self.has_exceptions and self.lib.lammps_has_error(self.lmp): + raise self._lammps_exception + # ------------------------------------------------------------------------- def get_natoms(self): From 0089a35d95db5b9d242a0b0c48ac709e7f99f79b Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 17:27:08 -0400 Subject: [PATCH 080/182] Remove dead code --- python/lammps.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/python/lammps.py b/python/lammps.py index 9f5900a6f1..129f5eeb99 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -1706,13 +1706,6 @@ class lammps(object): def set_fix_external_callback(self, fix_name, callback, caller=None): import numpy as np - def _ctype_to_numpy_int(ctype_int): - if ctype_int == c_int32: - return np.int32 - elif ctype_int == c_int64: - return np.int64 - return np.intc - def callback_wrapper(caller, ntimestep, nlocal, tag_ptr, x_ptr, fext_ptr): tag = self.numpy.iarray(self.c_tagint, tag_ptr, nlocal, 1) x = self.numpy.darray(x_ptr, nlocal, 3) From d91d8de76d71ab87c9bacaf33e12b5635802fb24 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 17:28:25 -0400 Subject: [PATCH 081/182] Refactor LammpsNumpyWrapper to numpy_wrapper LammpsNumpyWrapper was a class that was defined inside of the lammps.numpy property when it was first accessed. This made it hard to document the methods of this class. This commit extracts this utility class into the lammps module and renames it to 'numpy_wrapper'. --- doc/src/Python_module.rst | 3 + python/lammps.py | 376 ++++++++++++++++++++------------------ 2 files changed, 205 insertions(+), 174 deletions(-) diff --git a/doc/src/Python_module.rst b/doc/src/Python_module.rst index 9fb634f05a..64ff7b53f7 100644 --- a/doc/src/Python_module.rst +++ b/doc/src/Python_module.rst @@ -44,6 +44,9 @@ functions. Below is a detailed documentation of the API. .. autoclass:: lammps.lammps :members: +.. autoclass:: lammps.numpy_wrapper + :members: + ---------- The ``PyLammps`` class API diff --git a/python/lammps.py b/python/lammps.py index 129f5eeb99..000867805d 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -465,181 +465,17 @@ class lammps(object): @property def numpy(self): - "Convert between ctypes arrays and numpy arrays" + """ Return object to access numpy versions of API + + It provides alternative implementations of API functions that + return numpy arrays instead of ctypes pointers. If numpy is not installed, + accessing this property will lead to an ImportError. + + :return: instance of numpy wrapper object + :rtype: numpy_wrapper + """ if not self._numpy: - import numpy as np - class LammpsNumpyWrapper: - def __init__(self, lmp): - self.lmp = lmp - - def _ctype_to_numpy_int(self, ctype_int): - if ctype_int == c_int32: - return np.int32 - elif ctype_int == c_int64: - return np.int64 - return np.intc - - def extract_atom(self, name, dtype=LAMMPS_AUTODETECT, nelem=LAMMPS_AUTODETECT, dim=LAMMPS_AUTODETECT): - """Retrieve per-atom properties from LAMMPS as NumPy arrays - - This is a wrapper around the :cpp:func:`lammps_extract_atom` - function of the C-library interface. Its documentation includes a - list of the supported keywords and their data types. - Since Python needs to know the data type to be able to interpret - the result, by default, this function will try to auto-detect the data - type by asking the library. You can also force a specific data type. - For that purpose the :py:mod:`lammps` module contains the constants - ``LAMMPS_INT``, ``LAMMPS_INT_2D``, ``LAMMPS_DOUBLE``, - ``LAMMPS_DOUBLE_2D``, ``LAMMPS_INT64``, ``LAMMPS_INT64_2D``, and - ``LAMMPS_STRING``. - This function returns ``None`` if either the keyword is not - recognized, or an invalid data type constant is used. - - .. note:: - - While the returned arrays of per-atom data are dimensioned - for the range [0:nmax] - as is the underlying storage - - the data is usually only valid for the range of [0:nlocal], - unless the property of interest is also updated for ghost - atoms. In some cases, this depends on a LAMMPS setting, see - for example :doc:`comm_modify vel yes `. - - :param name: name of the property - :type name: string - :param dtype: type of the returned data (see :ref:`py_data_constants`) - :type dtype: int, optional - :param nelem: number of elements in array - :type nelem: int, optional - :param dim: dimension of each element - :type dim: int, optional - :return: requested data as NumPy array with direct access to C data - :rtype: numpy.array - """ - if dtype == LAMMPS_AUTODETECT: - dtype = self.lmp.extract_atom_datatype(name) - - if nelem == LAMMPS_AUTODETECT: - if name == "mass": - nelem = self.lmp.extract_global("ntypes") + 1 - else: - nelem = self.lmp.extract_global("nlocal") - if dim == LAMMPS_AUTODETECT: - if dtype in (LAMMPS_INT_2D, LAMMPS_DOUBLE_2D, LAMMPS_INT64_2D): - # TODO add other fields - if name in ("x", "v", "f", "angmom", "torque", "csforce", "vforce"): - dim = 3 - else: - dim = 2 - else: - dim = 1 - - raw_ptr = self.lmp.extract_atom(name, dtype) - - if dtype in (LAMMPS_DOUBLE, LAMMPS_DOUBLE_2D): - return self.darray(raw_ptr, nelem, dim) - elif dtype in (LAMMPS_INT, LAMMPS_INT_2D): - return self.iarray(c_int32, raw_ptr, nelem, dim) - elif dtype in (LAMMPS_INT64, LAMMPS_INT64_2D): - return self.iarray(c_int64, raw_ptr, nelem, dim) - return raw_ptr - - def extract_atom_iarray(self, name, nelem, dim=1): - warnings.warn("deprecated, use extract_atom instead", DeprecationWarning) - - if name in ['id', 'molecule']: - c_int_type = self.lmp.c_tagint - elif name in ['image']: - c_int_type = self.lmp.c_imageint - else: - c_int_type = c_int - - if dim == 1: - raw_ptr = self.lmp.extract_atom(name, LAMMPS_INT) - else: - raw_ptr = self.lmp.extract_atom(name, LAMMPS_INT_2D) - - return self.iarray(c_int_type, raw_ptr, nelem, dim) - - def extract_atom_darray(self, name, nelem, dim=1): - warnings.warn("deprecated, use extract_atom instead", DeprecationWarning) - - if dim == 1: - raw_ptr = self.lmp.extract_atom(name, LAMMPS_DOUBLE) - else: - raw_ptr = self.lmp.extract_atom(name, LAMMPS_DOUBLE_2D) - - return self.darray(raw_ptr, nelem, dim) - - def extract_compute(self, cid, style, datatype): - value = self.lmp.extract_compute(cid, style, datatype) - - if style in (LMP_STYLE_GLOBAL, LMP_STYLE_LOCAL): - if datatype == LMP_TYPE_VECTOR: - nrows = self.lmp.extract_compute(cid, style, LMP_SIZE_VECTOR) - return self.darray(value, nrows) - elif datatype == LMP_TYPE_ARRAY: - nrows = self.lmp.extract_compute(cid, style, LMP_SIZE_ROWS) - ncols = self.lmp.extract_compute(cid, style, LMP_SIZE_COLS) - return self.darray(value, nrows, ncols) - elif style == LMP_STYLE_ATOM: - if datatype == LMP_TYPE_VECTOR: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) - return self.darray(value, nlocal) - elif datatype == LMP_TYPE_ARRAY: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) - ncols = self.lmp.extract_compute(cid, style, LMP_SIZE_COLS) - return self.darray(value, nlocal, ncols) - return value - - def extract_fix(self, fid, style, datatype, nrow=0, ncol=0): - value = self.lmp.extract_fix(fid, style, datatype, nrow, ncol) - if style == LMP_STYLE_ATOM: - if datatype == LMP_TYPE_VECTOR: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) - return self.darray(value, nlocal) - elif datatype == LMP_TYPE_ARRAY: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) - ncols = self.lmp.extract_fix(fid, style, LMP_SIZE_COLS, 0, 0) - return self.darray(value, nlocal, ncols) - elif style == LMP_STYLE_LOCAL: - if datatype == LMP_TYPE_VECTOR: - nrows = self.lmp.extract_fix(fid, style, LMP_SIZE_ROWS, 0, 0) - return self.darray(value, nrows) - elif datatype == LMP_TYPE_ARRAY: - nrows = self.lmp.extract_fix(fid, style, LMP_SIZE_ROWS, 0, 0) - ncols = self.lmp.extract_fix(fid, style, LMP_SIZE_COLS, 0, 0) - return self.darray(value, nrows, ncols) - return value - - def extract_variable(self, name, group=None, datatype=LMP_VAR_EQUAL): - value = self.lmp.extract_variable(name, group, datatype) - if datatype == LMP_VAR_ATOM: - return np.ctypeslib.as_array(value) - return value - - def iarray(self, c_int_type, raw_ptr, nelem, dim=1): - np_int_type = self._ctype_to_numpy_int(c_int_type) - - if dim == 1: - ptr = cast(raw_ptr, POINTER(c_int_type * nelem)) - else: - ptr = cast(raw_ptr[0], POINTER(c_int_type * nelem * dim)) - - a = np.frombuffer(ptr.contents, dtype=np_int_type) - a.shape = (nelem, dim) - return a - - def darray(self, raw_ptr, nelem, dim=1): - if dim == 1: - ptr = cast(raw_ptr, POINTER(c_double * nelem)) - else: - ptr = cast(raw_ptr[0], POINTER(c_double * nelem * dim)) - - a = np.frombuffer(ptr.contents) - a.shape = (nelem, dim) - return a - - self._numpy = LammpsNumpyWrapper(self) + self._numpy = numpy_wrapper(self) return self._numpy # ------------------------------------------------------------------------- @@ -1825,6 +1661,198 @@ class lammps(object): neighbors = self.numpy.iarray(c_int, c_neighbors, c_numneigh.value, 1) return c_iatom.value, c_numneigh.value, neighbors +# ------------------------------------------------------------------------- + +class numpy_wrapper: + """lammps API NumPy Wrapper + + This is a wrapper class that provides additional methods on top of an + existing :py:class:`lammps` instance. The methods transform raw ctypes + pointers into NumPy arrays, which give direct access to the + original data while protecting against out-of-bounds accesses. + + There is no need to explicitly instantiate this class. Each instance + of :py:class:`lammps` has a :py:attr:`numpy ` property + that returns an instance. + + :param lmp: instance of the :py:class:`lammps` class + :type lmp: lammps + """ + def __init__(self, lmp): + self.lmp = lmp + + def _ctype_to_numpy_int(self, ctype_int): + import numpy as np + if ctype_int == c_int32: + return np.int32 + elif ctype_int == c_int64: + return np.int64 + return np.intc + + def extract_atom(self, name, dtype=LAMMPS_AUTODETECT, nelem=LAMMPS_AUTODETECT, dim=LAMMPS_AUTODETECT): + """Retrieve per-atom properties from LAMMPS as NumPy arrays + + This is a wrapper around the :cpp:func:`lammps_extract_atom` + function of the C-library interface. Its documentation includes a + list of the supported keywords and their data types. + Since Python needs to know the data type to be able to interpret + the result, by default, this function will try to auto-detect the data + type by asking the library. You can also force a specific data type. + For that purpose the :py:mod:`lammps` module contains the constants + ``LAMMPS_INT``, ``LAMMPS_INT_2D``, ``LAMMPS_DOUBLE``, + ``LAMMPS_DOUBLE_2D``, ``LAMMPS_INT64``, ``LAMMPS_INT64_2D``, and + ``LAMMPS_STRING``. + This function returns ``None`` if either the keyword is not + recognized, or an invalid data type constant is used. + + .. note:: + + While the returned arrays of per-atom data are dimensioned + for the range [0:nmax] - as is the underlying storage - + the data is usually only valid for the range of [0:nlocal], + unless the property of interest is also updated for ghost + atoms. In some cases, this depends on a LAMMPS setting, see + for example :doc:`comm_modify vel yes `. + + :param name: name of the property + :type name: string + :param dtype: type of the returned data (see :ref:`py_data_constants`) + :type dtype: int, optional + :param nelem: number of elements in array + :type nelem: int, optional + :param dim: dimension of each element + :type dim: int, optional + :return: requested data as NumPy array with direct access to C data + :rtype: numpy.array + """ + if dtype == LAMMPS_AUTODETECT: + dtype = self.lmp.extract_atom_datatype(name) + + if nelem == LAMMPS_AUTODETECT: + if name == "mass": + nelem = self.lmp.extract_global("ntypes") + 1 + else: + nelem = self.lmp.extract_global("nlocal") + if dim == LAMMPS_AUTODETECT: + if dtype in (LAMMPS_INT_2D, LAMMPS_DOUBLE_2D, LAMMPS_INT64_2D): + # TODO add other fields + if name in ("x", "v", "f", "angmom", "torque", "csforce", "vforce"): + dim = 3 + else: + dim = 2 + else: + dim = 1 + + raw_ptr = self.lmp.extract_atom(name, dtype) + + if dtype in (LAMMPS_DOUBLE, LAMMPS_DOUBLE_2D): + return self.darray(raw_ptr, nelem, dim) + elif dtype in (LAMMPS_INT, LAMMPS_INT_2D): + return self.iarray(c_int32, raw_ptr, nelem, dim) + elif dtype in (LAMMPS_INT64, LAMMPS_INT64_2D): + return self.iarray(c_int64, raw_ptr, nelem, dim) + return raw_ptr + + def extract_atom_iarray(self, name, nelem, dim=1): + warnings.warn("deprecated, use extract_atom instead", DeprecationWarning) + + if name in ['id', 'molecule']: + c_int_type = self.lmp.c_tagint + elif name in ['image']: + c_int_type = self.lmp.c_imageint + else: + c_int_type = c_int + + if dim == 1: + raw_ptr = self.lmp.extract_atom(name, LAMMPS_INT) + else: + raw_ptr = self.lmp.extract_atom(name, LAMMPS_INT_2D) + + return self.iarray(c_int_type, raw_ptr, nelem, dim) + + def extract_atom_darray(self, name, nelem, dim=1): + warnings.warn("deprecated, use extract_atom instead", DeprecationWarning) + + if dim == 1: + raw_ptr = self.lmp.extract_atom(name, LAMMPS_DOUBLE) + else: + raw_ptr = self.lmp.extract_atom(name, LAMMPS_DOUBLE_2D) + + return self.darray(raw_ptr, nelem, dim) + + def extract_compute(self, cid, style, datatype): + value = self.lmp.extract_compute(cid, style, datatype) + + if style in (LMP_STYLE_GLOBAL, LMP_STYLE_LOCAL): + if datatype == LMP_TYPE_VECTOR: + nrows = self.lmp.extract_compute(cid, style, LMP_SIZE_VECTOR) + return self.darray(value, nrows) + elif datatype == LMP_TYPE_ARRAY: + nrows = self.lmp.extract_compute(cid, style, LMP_SIZE_ROWS) + ncols = self.lmp.extract_compute(cid, style, LMP_SIZE_COLS) + return self.darray(value, nrows, ncols) + elif style == LMP_STYLE_ATOM: + if datatype == LMP_TYPE_VECTOR: + nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + return self.darray(value, nlocal) + elif datatype == LMP_TYPE_ARRAY: + nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + ncols = self.lmp.extract_compute(cid, style, LMP_SIZE_COLS) + return self.darray(value, nlocal, ncols) + return value + + def extract_fix(self, fid, style, datatype, nrow=0, ncol=0): + value = self.lmp.extract_fix(fid, style, datatype, nrow, ncol) + if style == LMP_STYLE_ATOM: + if datatype == LMP_TYPE_VECTOR: + nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + return self.darray(value, nlocal) + elif datatype == LMP_TYPE_ARRAY: + nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + ncols = self.lmp.extract_fix(fid, style, LMP_SIZE_COLS, 0, 0) + return self.darray(value, nlocal, ncols) + elif style == LMP_STYLE_LOCAL: + if datatype == LMP_TYPE_VECTOR: + nrows = self.lmp.extract_fix(fid, style, LMP_SIZE_ROWS, 0, 0) + return self.darray(value, nrows) + elif datatype == LMP_TYPE_ARRAY: + nrows = self.lmp.extract_fix(fid, style, LMP_SIZE_ROWS, 0, 0) + ncols = self.lmp.extract_fix(fid, style, LMP_SIZE_COLS, 0, 0) + return self.darray(value, nrows, ncols) + return value + + def extract_variable(self, name, group=None, datatype=LMP_VAR_EQUAL): + import numpy as np + value = self.lmp.extract_variable(name, group, datatype) + if datatype == LMP_VAR_ATOM: + return np.ctypeslib.as_array(value) + return value + + def iarray(self, c_int_type, raw_ptr, nelem, dim=1): + import numpy as np + np_int_type = self._ctype_to_numpy_int(c_int_type) + + if dim == 1: + ptr = cast(raw_ptr, POINTER(c_int_type * nelem)) + else: + ptr = cast(raw_ptr[0], POINTER(c_int_type * nelem * dim)) + + a = np.frombuffer(ptr.contents, dtype=np_int_type) + a.shape = (nelem, dim) + return a + + def darray(self, raw_ptr, nelem, dim=1): + import numpy as np + if dim == 1: + ptr = cast(raw_ptr, POINTER(c_double * nelem)) + else: + ptr = cast(raw_ptr[0], POINTER(c_double * nelem * dim)) + + a = np.frombuffer(ptr.contents) + a.shape = (nelem, dim) + return a + + # ------------------------------------------------------------------------- # ------------------------------------------------------------------------- # ------------------------------------------------------------------------- From fb1bd3e962a3611503d07323afb8159a5b50b768 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 2 Oct 2020 18:01:52 -0400 Subject: [PATCH 082/182] Correct links --- doc/src/Python_config.rst | 14 +++++++------- doc/src/Python_usage.rst | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/src/Python_config.rst b/doc/src/Python_config.rst index 62bd52900f..8e14b5085c 100644 --- a/doc/src/Python_config.rst +++ b/doc/src/Python_config.rst @@ -1,13 +1,13 @@ Retrieving LAMMPS configuration information ******************************************* -* :py:attr:`has_mpi_support ` -* :py:attr:`has_exceptions ` -* :py:attr:`has_gzip_support ` -* :py:attr:`has_png_support ` -* :py:attr:`has_jpeg_support ` -* :py:attr:`has_ffmpeg_support ` -* :py:attr:`installed_packages ` +* :py:attr:`has_mpi_support ` +* :py:attr:`has_exceptions ` +* :py:attr:`has_gzip_support ` +* :py:attr:`has_png_support ` +* :py:attr:`has_jpeg_support ` +* :py:attr:`has_ffmpeg_support ` +* :py:attr:`installed_packages ` * :py:meth:`lammps.has_style() ` * :py:meth:`lammps.available_styles() `: return the numerical version id, e.g. LAMMPS 2 Sep 2015 -> 20150902 + * :py:meth:`version() `: return the numerical version id, e.g. LAMMPS 2 Sep 2015 -> 20150902 * :py:meth:`get_thermo() `: return current value of a thermo keyword * :py:meth:`get_natoms() `: total # of atoms as int * :py:meth:`reset_box() `: reset the simulation box size @@ -330,7 +330,7 @@ against invalid accesses. Numpy Methods: - * :py:meth:`numpy.extract_atom() `: extract a per-atom quantity as numpy array + * :py:meth:`numpy.extract_atom() `: extract a per-atom quantity as numpy array .. tab:: PyLammps/IPyLammps API From 946a49662f8307c4ec93b142856037a9bbce6380 Mon Sep 17 00:00:00 2001 From: Jacob Gissinger Date: Fri, 2 Oct 2020 18:43:35 -0400 Subject: [PATCH 083/182] bond/react: rmsd constraint bugfix previously, eligible reactions could have been temporarily prevented, at the edge of the box, in serial --- src/USER-REACTION/fix_bond_react.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/USER-REACTION/fix_bond_react.cpp b/src/USER-REACTION/fix_bond_react.cpp index 814f8a0fcf..28a7ca92e7 100644 --- a/src/USER-REACTION/fix_bond_react.cpp +++ b/src/USER-REACTION/fix_bond_react.cpp @@ -1863,6 +1863,8 @@ int FixBondReact::check_constraints() if (prrhob < rrhandom[(int) constraints[i][2]]->uniform()) return 0; } else if (constraints[i][1] == RMSD) { // call superpose + int iatom; + int iref = -1; // choose first atom as reference int n2superpose = 0; double **xfrozen; // coordinates for the "frozen" target molecule double **xmobile; // coordinates for the "mobile" molecule @@ -1875,20 +1877,28 @@ int FixBondReact::check_constraints() int myincr = 0; for (int j = 0; j < onemol->natoms; j++) { if (onemol->fragmentmask[ifragment][j]) { + iatom = atom->map(glove[j][1]); + if (iref == -1) iref = iatom; + iatom = domain->closest_image(iref,iatom); for (int k = 0; k < 3; k++) { - xfrozen[myincr][k] = x[atom->map(glove[j][1])][k]; + xfrozen[myincr][k] = x[iatom][k]; xmobile[myincr][k] = onemol->x[j][k]; } myincr++; } } } else { + int iatom; + int iref = -1; // choose first atom as reference n2superpose = onemol->natoms; memory->create(xfrozen,n2superpose,3,"bond/react:xfrozen"); memory->create(xmobile,n2superpose,3,"bond/react:xmobile"); for (int j = 0; j < n2superpose; j++) { + iatom = atom->map(glove[j][1]); + if (iref == -1) iref = iatom; + iatom = domain->closest_image(iref,iatom); for (int k = 0; k < 3; k++) { - xfrozen[j][k] = x[atom->map(glove[j][1])][k]; + xfrozen[j][k] = x[iatom][k]; xmobile[j][k] = onemol->x[j][k]; } } From 22cbac0b013f2746358a1e1fc76683d59903b6dd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 3 Oct 2020 09:48:54 -0400 Subject: [PATCH 084/182] initial version of LAMMPS shell. without build system support (yet). --- src/library.cpp | 8 + src/library.h | 8 + tools/lammps-shell/lammps-shell.cpp | 300 ++++++++++++++++++++++++++++ 3 files changed, 316 insertions(+) create mode 100644 tools/lammps-shell/lammps-shell.cpp diff --git a/src/library.cpp b/src/library.cpp index 90a71beb0c..4c759fd91c 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -4044,6 +4044,14 @@ int lammps_style_name(void *handle, const char *category, int idx, return 0; } + +int lammps_has_group(void *, const char *); +int lammps_group_count(void *); +int lammps_group_name(void *, int, char *, int); + +int lammps_has_id(void *, const char *, const char *); +int lammps_id_count(void *, const char *); +int lammps_id_name(void *, const char *, int, char *, int); /* ---------------------------------------------------------------------- */ /** This function is used to query whether LAMMPS was compiled with diff --git a/src/library.h b/src/library.h index 2ddad86baa..2ac0997487 100644 --- a/src/library.h +++ b/src/library.h @@ -183,6 +183,14 @@ int lammps_has_style(void *, const char *, const char *); int lammps_style_count(void *, const char *); int lammps_style_name(void *, const char *, int, char *, int); +int lammps_has_group(void *, const char *); +int lammps_group_count(void *); +int lammps_group_name(void *, int, char *, int); + +int lammps_has_id(void *, const char *, const char *); +int lammps_id_count(void *, const char *); +int lammps_id_name(void *, const char *, int, char *, int); + /* ---------------------------------------------------------------------- * Library functions for accessing neighbor lists * ---------------------------------------------------------------------- */ diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp new file mode 100644 index 0000000000..a7f2c594f9 --- /dev/null +++ b/tools/lammps-shell/lammps-shell.cpp @@ -0,0 +1,300 @@ +// LAMMPS Shell. An improved interactive LAMMPS session with +// command line editing, history, TAB expansion and shell escapes + +// Copyright (c) 2020 Axel Kohlmeyer + +#include "library.h" +#include "utils.h" + +#include +#include +#include +#include +#include +#include +#include + +#if !defined(_WIN32) +#include +#else +#if !defined(WIN32_LEAN_AND_MEAN) +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include +#define isatty(x) _isatty(x) +#endif + +#include +#include + +using namespace LAMMPS_NS; + +const int buflen = 512; +char buf[buflen]; + +std::vector commands; + +// this list of commands is generated by: +// grep '!strcmp(command,' ../../src/input.cpp | sed -e 's/^.*!strcmp(command,"\(.*\)".*$/"\1",/' + +const char *cmdlist[] = {"clear", + "echo", + "if", + "include", + "jump", + "label", + "log", + "next", + "partition", + "print", + "python", + "quit", + "shell", + "variable", + "angle_coeff", + "angle_style", + "atom_modify", + "atom_style", + "bond_coeff", + "bond_style", + "bond_write", + "boundary", + "box", + "comm_modify", + "comm_style", + "compute", + "compute_modify", + "dielectric", + "dihedral_coeff", + "dihedral_style", + "dimension", + "dump", + "dump_modify", + "fix", + "fix_modify", + "group", + "improper_coeff", + "improper_style", + "kspace_modify", + "kspace_style", + "lattice", + "mass", + "min_modify", + "min_style", + "molecule", + "neigh_modify", + "neighbor", + "newton", + "package", + "pair_coeff", + "pair_modify", + "pair_style", + "pair_write", + "processors", + "region", + "reset_timestep", + "restart", + "run_style", + "special_bonds", + "suffix", + "thermo", + "thermo_modify", + "thermo_style", + "timestep", + "timer", + "uncompute", + "undump", + "unfix", + "units"}; + +static char *dupstring(const std::string &text) +{ + int len = text.size() + 1; + char *copy = (char *)malloc(len); + strcpy(copy, text.c_str()); + return copy; +} + +extern "C" { +static char *cmd_generator(const char *text, int state) +{ + static std::size_t idx; + if (!state) idx = 0; + + do { + if (commands[idx].substr(0, strlen(text)) == text) + return dupstring(commands[idx++]); + else + ++idx; + } while (idx < commands.size()); + return nullptr; +} + +static char **cmd_completion(const char *text, int start, int) +{ + char **matches = nullptr; + + if (start == 0) { + // match command names from the beginning of a line + matches = rl_completion_matches(text, cmd_generator); + } else { + // try to provide context specific matches + // first split the already completed text + auto words = utils::split_words(std::string(rl_line_buffer).substr(0, start)); + + // these commands have a group id as 3rd word + if ((words.size() == 2) && + ((words[0] == "fix") || (words[0] == "compute") || (words[0] == "dump"))) { + std::cout << "#words: " << words.size() << "\n"; + } + } + return matches; +} +} // end of extern "C" + +static void init_commands(void *lmp) +{ + // store internal commands + int ncmds = sizeof(cmdlist) / sizeof(const char *); + for (int i = 0; i < ncmds; ++i) + commands.push_back(cmdlist[i]); + + // store optional commands from command styles + ncmds = lammps_style_count(lmp, "command"); + for (int i = 0; i < ncmds; ++i) { + if (lammps_style_name(lmp, "command", i, buf, buflen)) commands.push_back(buf); + } + + // store LAMMPS shell specific command names + commands.push_back("help"); + commands.push_back("exit"); + commands.push_back("history"); + commands.push_back("clear_history"); + + // set name so there can be specific entries in ~/.inputrc + rl_readline_name = "lammps-shell"; + + // attempt completions only if we have are connected to tty, + // otherwise any tabs in redirected input will cause havoc. + if (isatty(fileno(stdin))) { + rl_attempted_completion_function = cmd_completion; + } else { + rl_bind_key('\t', rl_insert); + } + + // read old history + read_history(".lammps_history"); +} + +static int help_cmd() +{ + std::cout << "\nThis is the LAMMPS Shell. An interactive LAMMPS session with command \n" + "line editing, context aware command expansion, and history.\n\n" + "- Hit the TAB key any time to try to expand the current word\n" + "- Issue shell commands by prefixing them with '|' (Example: '|ls -la')\n" + "- Use the '!' character for bash-like history epansion. (Example: '!run)\n\n" + "A history of the session will be written to the a file '.lammps_history'\n" + "in the current working directory and - if present - this file will be\n" + "read at the beginning of the next session of the LAMMPS shell.\n\n"; + return 0; +} + +static int lammps_end(void *&lmp) +{ + write_history(".lammps_history"); + if (lmp) lammps_close(lmp); + lmp = nullptr; + return 0; +} + +static int lammps_cmd(void *&lmp, const std::string &cmd) +{ + char *expansion; + char *text = dupstring(cmd); + int retval = history_expand(text, &expansion); + + // history expansion error + if (retval < 0) { + free(text); + free(expansion); + std::cout << "History error: " << utils::getsyserror() << "\n"; + return 1; + } + + // use expanded or original text and add to history + if (retval > 0) { + free(text); + text = expansion; + } else + free(expansion); + + add_history(text); + + // only print, don't execute. + if (retval == 2) { + std::cout << text << "\n"; + free(text); + return 0; + } + + // check for commands particular to lammps-shell + auto words = utils::split_words(text); + if (words[0][0] == '|') { + int rv = system(text + 1); + free(text); + return rv; + } else if ((words[0] == "help") || (words[0] == "?")) { + free(text); + return help_cmd(); + } else if (words[0] == "exit") { + free(text); + return lammps_end(lmp); + } else if (words[0] == "history") { + free(text); + HIST_ENTRY **list = history_list(); + for (int i = 0; i < history_length; ++i) { + std::cout << i + history_base << ": " << list[i]->line << "\n"; + } + return 0; + } else if (words[0] == "clear_history") { + free(text); + clear_history(); + return 0; + } + + lammps_command(lmp, text); + free(text); + return lammps_has_error(lmp); +} + +int main(int argc, char **argv) +{ + char *line; + std::string trimmed; + + void *lmp = lammps_open_no_mpi(argc, argv, nullptr); + if (lmp == nullptr) return 1; + + using_history(); + init_commands(lmp); + + // pre-load an input file that was provided on the command line + for (int i = 0; i < argc; ++i) { + if ((strcmp(argv[i], "-in") == 0) || (strcmp(argv[i], "-i") == 0)) { + lammps_file(lmp, argv[i + 1]); + } + } + + while (lmp != nullptr) { + line = readline("LAMMPS Shell> "); + if (!line) break; + trimmed = utils::trim(line); + if (trimmed.size() > 0) { + lammps_cmd(lmp, trimmed); + } + free(line); + } + + return lammps_end(lmp); +} From 024c9238f92e6c7f61403f343df67680b986d091 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 3 Oct 2020 09:51:28 -0400 Subject: [PATCH 085/182] fix issue spotted by compiler warning --- src/SPIN/fix_neb_spin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPIN/fix_neb_spin.cpp b/src/SPIN/fix_neb_spin.cpp index b2982e7bc0..d207979732 100644 --- a/src/SPIN/fix_neb_spin.cpp +++ b/src/SPIN/fix_neb_spin.cpp @@ -229,7 +229,7 @@ void FixNEBSpin::init() if (atom->nmax > maxlocal) reallocate(); - if (MULTI_PROC && counts == nullptr) { + if (cmode == MULTI_PROC && counts == nullptr) { memory->create(xsendall,ntotal,3,"neb:xsendall"); memory->create(xrecvall,ntotal,3,"neb:xrecvall"); memory->create(fsendall,ntotal,3,"neb:fsendall"); From af8f8d3c114ab27013538151b5d0ba4ea69b0f4a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 3 Oct 2020 09:51:42 -0400 Subject: [PATCH 086/182] avoid segfault --- src/library.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/library.cpp b/src/library.cpp index 90a71beb0c..b7faf4b890 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -168,7 +168,7 @@ void *lammps_open(int argc, char **argv, MPI_Comm comm, void **ptr) } catch(LAMMPSException &e) { fmt::print(stderr, "LAMMPS Exception: {}", e.message); - *ptr = nullptr; + if (ptr) *ptr = nullptr; } #else lmp = new LAMMPS(argc, argv, comm); From 4cf30ceda153f273eb6d3e03290be27515a13553 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 3 Oct 2020 09:52:00 -0400 Subject: [PATCH 087/182] silence compiler warnings --- src/library.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/library.cpp b/src/library.cpp index b7faf4b890..1b3a07f283 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -1266,10 +1266,8 @@ to then decide how to cast the (void*) pointer and access the data. * \return integer constant encoding the data type of the property * or -1 if not found. */ -int lammps_extract_global_datatype(void *handle, const char *name) +int lammps_extract_global_datatype(void *, const char *name) { - LAMMPS *lmp = (LAMMPS *) handle; - if (strcmp(name,"units") == 0) return LAMMPS_STRING; if (strcmp(name,"dt") == 0) return LAMMPS_DOUBLE; if (strcmp(name,"ntimestep") == 0) return LAMMPS_BIGINT; @@ -2959,7 +2957,7 @@ void lammps_gather_concat(void *ptr, char *name, int type, int count, void *data BEGIN_CAPTURE { - int i,j,offset,fcid,ltype; + int i,offset,fcid,ltype; // error if tags are not defined or not consecutive int flag = 0; @@ -3217,8 +3215,6 @@ void lammps_gather_subset(void *ptr, char *name, return; } - int natoms = static_cast (lmp->atom->natoms); - void *vptr = lmp->atom->extract(name); if (vptr==nullptr && strstr(name,"f_") == name) { // fix From b231fa8a1612e40e90cd13cf707a4af4427af065 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 3 Oct 2020 11:32:56 -0400 Subject: [PATCH 088/182] add completion for force style names --- tools/lammps-shell/lammps-shell.cpp | 155 +++++++++++++++++++++++++--- 1 file changed, 140 insertions(+), 15 deletions(-) diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index a7f2c594f9..2c0a8b0360 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -32,6 +32,25 @@ using namespace LAMMPS_NS; const int buflen = 512; char buf[buflen]; +void *lmp = nullptr; +enum { + ATOM, + INTEGRATE, + MINIMIZE, + PAIR, + BOND, + ANGLE, + DIHEDRAL, + IMPROPER, + KSPACE, + FIX, + COMPUTE, + REGION, + DUMP +}; +const char *lmp_style[] = {"atom", "integrate", "minimize", "pair", "bond", + "angle", "dihedral", "improper", "kspace", "fix", + "compute", "region", "dump"}; std::vector commands; @@ -116,14 +135,32 @@ static char *dupstring(const std::string &text) return copy; } +template char *style_generator(const char *text, int state) +{ + static int idx, num, len; + if (!state) { + idx = 0; + num = lammps_style_count(lmp, lmp_style[STYLE]); + len = strlen(text); + } + + while (idx < num) { + lammps_style_name(lmp, lmp_style[STYLE], idx, buf, buflen); + ++idx; + if ((len == 0) || (strncmp(text, buf, len) == 0)) return dupstring(buf); + } + return nullptr; +} + extern "C" { static char *cmd_generator(const char *text, int state) { - static std::size_t idx; + static std::size_t idx, len; if (!state) idx = 0; + len = strlen(text); do { - if (commands[idx].substr(0, strlen(text)) == text) + if ((len == 0) || (commands[idx].substr(0, len) == text)) return dupstring(commands[idx++]); else ++idx; @@ -131,10 +168,78 @@ static char *cmd_generator(const char *text, int state) return nullptr; } +static char *atom_generator(const char *text, int state) +{ + return style_generator(text, state); +} + +static char *integrate_generator(const char *text, int state) +{ + return style_generator(text, state); +} + +static char *minimize_generator(const char *text, int state) +{ + return style_generator(text, state); +} + +static char *pair_generator(const char *text, int state) +{ + return style_generator(text, state); +} + +static char *bond_generator(const char *text, int state) +{ + return style_generator(text, state); +} + +static char *angle_generator(const char *text, int state) +{ + return style_generator(text, state); +} + +static char *dihedral_generator(const char *text, int state) +{ + return style_generator(text, state); +} + +static char *improper_generator(const char *text, int state) +{ + return style_generator(text, state); +} + +static char *kspace_generator(const char *text, int state) +{ + return style_generator(text, state); +} + +static char *fix_generator(const char *text, int state) +{ + return style_generator(text, state); +} + +static char *compute_generator(const char *text, int state) +{ + return style_generator(text, state); +} + +static char *region_generator(const char *text, int state) +{ + return style_generator(text, state); +} + +static char *dump_generator(const char *text, int state) +{ + return style_generator(text, state); +} + static char **cmd_completion(const char *text, int start, int) { char **matches = nullptr; + // avoid segfaults + if (strlen(text) == 0) return matches; + if (start == 0) { // match command names from the beginning of a line matches = rl_completion_matches(text, cmd_generator); @@ -143,17 +248,37 @@ static char **cmd_completion(const char *text, int start, int) // first split the already completed text auto words = utils::split_words(std::string(rl_line_buffer).substr(0, start)); - // these commands have a group id as 3rd word - if ((words.size() == 2) && - ((words[0] == "fix") || (words[0] == "compute") || (words[0] == "dump"))) { - std::cout << "#words: " << words.size() << "\n"; + if (words.size() == 1) { // expand second word + if (words[0] == "atom_style") { + matches = rl_completion_matches(text, atom_generator); + } else if (words[0] == "pair_style") { + matches = rl_completion_matches(text, pair_generator); + } else if (words[0] == "bond_style") { + matches = rl_completion_matches(text, bond_generator); + } else if (words[0] == "angle_style") { + matches = rl_completion_matches(text, angle_generator); + } else if (words[0] == "dihedral_style") { + matches = rl_completion_matches(text, dihedral_generator); + } else if (words[0] == "improper_style") { + matches = rl_completion_matches(text, improper_generator); + } else if (words[0] == "kspace_style") { + matches = rl_completion_matches(text, kspace_generator); + } + } else if (words.size() == 2) { // expand third word + + // these commands have a group name as 3rd word + if ((words[0] == "fix") || (words[0] == "compute") || (words[0] == "dump")) { + std::cout << "#words: " << words.size() << "\n"; + } } } + return matches; } + } // end of extern "C" -static void init_commands(void *lmp) +static void init_commands() { // store internal commands int ncmds = sizeof(cmdlist) / sizeof(const char *); @@ -175,7 +300,7 @@ static void init_commands(void *lmp) // set name so there can be specific entries in ~/.inputrc rl_readline_name = "lammps-shell"; - // attempt completions only if we have are connected to tty, + // attempt completions only if we are connected to a tty, // otherwise any tabs in redirected input will cause havoc. if (isatty(fileno(stdin))) { rl_attempted_completion_function = cmd_completion; @@ -200,7 +325,7 @@ static int help_cmd() return 0; } -static int lammps_end(void *&lmp) +static int shell_end() { write_history(".lammps_history"); if (lmp) lammps_close(lmp); @@ -208,7 +333,7 @@ static int lammps_end(void *&lmp) return 0; } -static int lammps_cmd(void *&lmp, const std::string &cmd) +static int shell_cmd(const std::string &cmd) { char *expansion; char *text = dupstring(cmd); @@ -249,7 +374,7 @@ static int lammps_cmd(void *&lmp, const std::string &cmd) return help_cmd(); } else if (words[0] == "exit") { free(text); - return lammps_end(lmp); + return shell_end(); } else if (words[0] == "history") { free(text); HIST_ENTRY **list = history_list(); @@ -273,11 +398,11 @@ int main(int argc, char **argv) char *line; std::string trimmed; - void *lmp = lammps_open_no_mpi(argc, argv, nullptr); + lmp = lammps_open_no_mpi(argc, argv, nullptr); if (lmp == nullptr) return 1; using_history(); - init_commands(lmp); + init_commands(); // pre-load an input file that was provided on the command line for (int i = 0; i < argc; ++i) { @@ -291,10 +416,10 @@ int main(int argc, char **argv) if (!line) break; trimmed = utils::trim(line); if (trimmed.size() > 0) { - lammps_cmd(lmp, trimmed); + shell_cmd(trimmed); } free(line); } - return lammps_end(lmp); + return shell_end(); } From 01c85a3032d3676f37f2cf1adfa0743ce7027d47 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 3 Oct 2020 12:25:56 -0400 Subject: [PATCH 089/182] correct embedded docs --- src/library.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/library.cpp b/src/library.cpp index 4c759fd91c..25fec98b5c 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -4013,18 +4013,17 @@ int lammps_style_count(void *handle, const char *category) { /** Look up the name of a style by index in the list of style of a given category in the LAMMPS library. * -\verbatim embed:rst -This function copies the name of the package with the index *idx* into the -provided C-style string buffer. The length of the buffer must be provided -as *buf_size* argument. If the name of the package exceeds the length of the -buffer, it will be truncated accordingly. If the index is out of range, -the function returns 0 and *buffer* is set to an empty string, otherwise 1. -Please see :cpp:func:`lammps_has_style` for a list of valid categories. -\endverbatim + * + * This function copies the name of the *category* style with the index + * *idx* into the provided C-style string buffer. The length of the buffer + * must be provided as *buf_size* argument. If the name of the style + * exceeds the length of the buffer, it will be truncated accordingly. + * If the index is out of range, the function returns 0 and *buffer* is + * set to an empty string, otherwise 1. * * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. * \param category category of styles - * \param idx index of the package in the list of included packages (0 <= idx < style count) + * \param idx index of the style in the list of *category* styles (0 <= idx < style count) * \param buffer string buffer to copy the name of the style to * \param buf_size size of the provided string buffer * \return 1 if successful, otherwise 0 From a2f7aae6db1a1b49f1811460eed72bbc70c0623b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 3 Oct 2020 12:26:17 -0400 Subject: [PATCH 090/182] add API to query group names --- src/library.cpp | 75 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 72 insertions(+), 3 deletions(-) diff --git a/src/library.cpp b/src/library.cpp index 25fec98b5c..585f293f58 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -4043,10 +4043,79 @@ int lammps_style_name(void *handle, const char *category, int idx, return 0; } +/* ---------------------------------------------------------------------- */ -int lammps_has_group(void *, const char *); -int lammps_group_count(void *); -int lammps_group_name(void *, int, char *, int); +/** Check if a group with a given name has been defined + * +\verbatim embed:rst +This function checks if a group with the provided *name* is defined +in the current LAMMPS instance. +\endverbatim + * + * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. + * \param name name of the style + * \return 1 if defined, 0 if not. + */ +int lammps_has_group(void *handle, const char *name) +{ + LAMMPS *lmp = (LAMMPS *)handle; + + int ngroup = lmp->group->ngroup; + char **groups = lmp->group->names; + + for (int i=0; i < ngroup; ++i) + if (strcmp(groups[i],name) == 0) return 1; + + return 0; +} + +/* ---------------------------------------------------------------------- */ + +/** Count the number of currently defined groups + * + * This function counts how many groups are defined in the + * current LAMMPS instance. + * + * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. + * \return number of styles in category + */ +int lammps_group_count(void *handle) +{ + LAMMPS *lmp = (LAMMPS *)handle; + + return lmp->group->ngroup; +} + +/* ---------------------------------------------------------------------- */ + +/** Look up the name of a group by index in the list of groups. + * + * This function copies the name of the group with the index *idx* into + * the provided C-style string buffer. The length of the buffer must be + * provided as *buf_size* argument. If the name of the group exceeds the + * length of the buffer, it will be truncated accordingly. If the index + * is out of range, the function returns 0 and *buffer* is set to an empty + * string, otherwise 1 is returned. + * + * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. + * \param idx index of the group in the list of groups (0 <= idx < group count) + * \param buffer string buffer to copy the name of the style to + * \param buf_size size of the provided string buffer + * \return 1 if successful, otherwise 0 + */ +int lammps_group_name(void *handle, int idx, char *buffer, int buf_size) { + LAMMPS *lmp = (LAMMPS *)handle; + + int ngroup = lmp->group->ngroup; + char **groups = lmp->group->names; + if ((idx >=0) && (idx < ngroup)) { + strncpy(buffer, groups[idx], buf_size); + return 1; + } + + buffer[0] = '\0'; + return 0; +} int lammps_has_id(void *, const char *, const char *); int lammps_id_count(void *, const char *); From acf53ff55e229272f71c9f0fc373e80dc728a8be Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 3 Oct 2020 12:26:40 -0400 Subject: [PATCH 091/182] add a few more context aware matcher functions --- tools/lammps-shell/lammps-shell.cpp | 35 ++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index 2c0a8b0360..b9bb753e78 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -233,6 +233,23 @@ static char *dump_generator(const char *text, int state) return style_generator(text, state); } +char *group_generator(const char *text, int state) +{ + static int idx, num, len; + if (!state) { + idx = 0; + num = lammps_group_count(lmp); + len = strlen(text); + } + + while (idx < num) { + lammps_group_name(lmp, idx, buf, buflen); + ++idx; + if ((len == 0) || (strncmp(text, buf, len) == 0)) return dupstring(buf); + } + return nullptr; +} + static char **cmd_completion(const char *text, int start, int) { char **matches = nullptr; @@ -263,12 +280,28 @@ static char **cmd_completion(const char *text, int start, int) matches = rl_completion_matches(text, improper_generator); } else if (words[0] == "kspace_style") { matches = rl_completion_matches(text, kspace_generator); + } else if (words[0] == "run_style") { + matches = rl_completion_matches(text, integrate_generator); + } else if (words[0] == "min_style") { + matches = rl_completion_matches(text, minimize_generator); } } else if (words.size() == 2) { // expand third word // these commands have a group name as 3rd word if ((words[0] == "fix") || (words[0] == "compute") || (words[0] == "dump")) { - std::cout << "#words: " << words.size() << "\n"; + matches = rl_completion_matches(text, group_generator); + } else if (words[0] == "region") { + matches = rl_completion_matches(text, region_generator); + } + } else if (words.size() == 3) { // expand fourth word + + // style name is the fourth word + if (words[0] == "fix") { + matches = rl_completion_matches(text, fix_generator); + } else if (words[0] == "compute") { + matches = rl_completion_matches(text, compute_generator); + } else if (words[0] == "dump") { + matches = rl_completion_matches(text, dump_generator); } } } From 4e8feff52c3db6c40f0be91e00428c4dc0388a90 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 3 Oct 2020 22:01:57 -0400 Subject: [PATCH 092/182] add support for building the LAMMPS shell in CMake --- cmake/CMakeLists.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 0d041b2aa9..daa2a7d90a 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -90,6 +90,7 @@ if(BUILD_SHARED_LIBS) # for all pkg libs, mpi_stubs and linalg endif() option(BUILD_TOOLS "Build and install LAMMPS tools (msi2lmp, binary2txt, chain)" OFF) +option(BUILD_SHELL "Build and install the LAMMPS shell" OFF) include(GNUInstallDirs) file(GLOB ALL_SOURCES ${LAMMPS_SOURCE_DIR}/[^.]*.cpp) @@ -642,6 +643,23 @@ if(BUILD_TOOLS) install(FILES ${LAMMPS_DOC_DIR}/msi2lmp.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) endif() +if(BUILD_SHELL) + include(FindPkgConfig) + pkg_check_modules(READLINE IMPORTED_TARGET readline) + if(PKG_CONFIG_FOUND AND READLINE_FOUND) + if(NOT LAMMPS_EXCEPTIONS) + message(FATAL_ERROR "The LAMMPS shell requires LAMMPS_EXCEPTIONS enabled") + endif() + add_executable(lammps-shell ${LAMMPS_TOOLS_DIR}/lammps-shell/lammps-shell.cpp) + target_compile_definitions(lammps-shell PRIVATE -DLAMMPS_LIB_NO_MPI) + target_link_libraries(lammps-shell PRIVATE lammps) + target_link_libraries(lammps-shell PRIVATE PkgConfig::READLINE) + install(TARGETS lammps-shell DESTINATION ${CMAKE_INSTALL_BINDIR}) + else() + message(WARNING "PkgConfig info for readline library not found, skipping build of 'lammps-shell'") + endif() +endif() + include(Documentation) ############################################################################### From c5514c0a36bcad0fddd2cebcb1afd6d9ac450045 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 3 Oct 2020 22:02:13 -0400 Subject: [PATCH 093/182] windows portability fix --- tools/lammps-shell/lammps-shell.cpp | 52 ++++++++++++++--------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index b9bb753e78..1ae548e4f5 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -34,19 +34,19 @@ const int buflen = 512; char buf[buflen]; void *lmp = nullptr; enum { - ATOM, - INTEGRATE, - MINIMIZE, - PAIR, - BOND, - ANGLE, - DIHEDRAL, - IMPROPER, - KSPACE, - FIX, - COMPUTE, - REGION, - DUMP + ATOM_STYLE, + INTEGRATE_STYLE, + MINIMIZE_STYLE, + PAIR_STYLE, + BOND_STYLE, + ANGLE_STYLE, + DIHEDRAL_STYLE, + IMPROPER_STYLE, + KSPACE_STYLE, + FIX_STYLE, + COMPUTE_STYLE, + REGION_STYLE, + DUMP_STYLE }; const char *lmp_style[] = {"atom", "integrate", "minimize", "pair", "bond", "angle", "dihedral", "improper", "kspace", "fix", @@ -170,67 +170,67 @@ static char *cmd_generator(const char *text, int state) static char *atom_generator(const char *text, int state) { - return style_generator(text, state); + return style_generator(text, state); } static char *integrate_generator(const char *text, int state) { - return style_generator(text, state); + return style_generator(text, state); } static char *minimize_generator(const char *text, int state) { - return style_generator(text, state); + return style_generator(text, state); } static char *pair_generator(const char *text, int state) { - return style_generator(text, state); + return style_generator(text, state); } static char *bond_generator(const char *text, int state) { - return style_generator(text, state); + return style_generator(text, state); } static char *angle_generator(const char *text, int state) { - return style_generator(text, state); + return style_generator(text, state); } static char *dihedral_generator(const char *text, int state) { - return style_generator(text, state); + return style_generator(text, state); } static char *improper_generator(const char *text, int state) { - return style_generator(text, state); + return style_generator(text, state); } static char *kspace_generator(const char *text, int state) { - return style_generator(text, state); + return style_generator(text, state); } static char *fix_generator(const char *text, int state) { - return style_generator(text, state); + return style_generator(text, state); } static char *compute_generator(const char *text, int state) { - return style_generator(text, state); + return style_generator(text, state); } static char *region_generator(const char *text, int state) { - return style_generator(text, state); + return style_generator(text, state); } static char *dump_generator(const char *text, int state) { - return style_generator(text, state); + return style_generator(text, state); } char *group_generator(const char *text, int state) From 7f3db6f8e385e8a32f173977ebad92b5e9d5bcd6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 3 Oct 2020 22:04:54 -0400 Subject: [PATCH 094/182] improve wording --- cmake/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 0d041b2aa9..dac09fb676 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -627,10 +627,10 @@ if(BUILD_TOOLS) target_link_libraries(chain.x PRIVATE ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES}) install(TARGETS chain.x DESTINATION ${CMAKE_INSTALL_BINDIR}) else() - message(WARNING "No suitable Fortran compiler found, skipping building 'chain.x'") + message(WARNING "No suitable Fortran compiler found, skipping build of 'chain.x'") endif() else() - message(WARNING "CMake build doesn't support fortran, skipping building 'chain.x'") + message(WARNING "CMake build doesn't support fortran, skipping build of 'chain.x'") endif() enable_language(C) From 4520eef1b07afb7d971690f412e73b0760f0eb68 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 3 Oct 2020 22:05:52 -0400 Subject: [PATCH 095/182] include readline support to be ready for LAMMPS-Shell --- tools/singularity/centos7.def | 4 +-- tools/singularity/centos8.def | 2 +- tools/singularity/fedora32_mingw.def | 36 +++++++++++++++---- tools/singularity/ubuntu16.04.def | 2 +- tools/singularity/ubuntu18.04.def | 1 + tools/singularity/ubuntu18.04_amd_rocm.def | 1 + tools/singularity/ubuntu18.04_gpu.def | 1 + .../singularity/ubuntu18.04_intel_opencl.def | 1 + tools/singularity/ubuntu18.04_nvidia.def | 1 + tools/singularity/ubuntu20.04.def | 1 + tools/singularity/ubuntu20.04_amd_rocm.def | 1 + tools/singularity/ubuntu20.04_gpu.def | 1 + .../singularity/ubuntu20.04_intel_opencl.def | 1 + tools/singularity/ubuntu20.04_nvidia.def | 1 + 14 files changed, 44 insertions(+), 10 deletions(-) diff --git a/tools/singularity/centos7.def b/tools/singularity/centos7.def index 24be2347ba..8d2d18cd0d 100644 --- a/tools/singularity/centos7.def +++ b/tools/singularity/centos7.def @@ -6,9 +6,9 @@ From: centos:7 yum -y update yum -y install vim-enhanced \ ccache gcc-c++ gcc-gfortran clang gdb valgrind-openmpi \ - make cmake cmake3 ninja-build patch which file git Lmod \ + make cmake3 ninja-build patch which file git Lmod \ libpng-devel libjpeg-devel openmpi-devel mpich-devel python-devel python36-devel \ - hdf5-devel python36-virtualenv python36-pip python-pip \ + hdf5-devel python36-virtualenv python36-pip python-pip readline-devel \ netcdf-devel netcdf-cxx-devel netcdf-mpich-devel netcdf-openmpi-devel \ python-virtualenv fftw-devel voro++-devel eigen3-devel gsl-devel openblas-devel enchant \ blas-devel lapack-devel libyaml-devel openkim-models kim-api-devel zstd libzstd-devel diff --git a/tools/singularity/centos8.def b/tools/singularity/centos8.def index c9d1b3b7ba..4e1acc27fe 100644 --- a/tools/singularity/centos8.def +++ b/tools/singularity/centos8.def @@ -10,7 +10,7 @@ From: centos:8 eigen3-devel openblas-devel libpng-devel libjpeg-devel platform-python-devel \ openmpi-devel mpich-devel fftw-devel voro++-devel gsl-devel hdf5-devel \ netcdf-devel netcdf-cxx-devel netcdf-mpich-devel netcdf-openmpi-devel \ - enchant python3-virtualenv doxygen diffutils latexmk \ + enchant python3-virtualenv doxygen diffutils latexmk readline-devel \ texlive-latex-fonts texlive-pslatex texlive-collection-latexrecommended \ texlive-latex texlive-latexconfig doxygen-latex texlive-collection-latex \ texlive-latex-bin texlive-lualatex-math texlive-fncychap texlive-tabulary \ diff --git a/tools/singularity/fedora32_mingw.def b/tools/singularity/fedora32_mingw.def index 68ad7b2a59..e89e5f3b39 100644 --- a/tools/singularity/fedora32_mingw.def +++ b/tools/singularity/fedora32_mingw.def @@ -9,7 +9,7 @@ From: fedora:32 ccache gcc-c++ gcc-gfortran gdb valgrind eigen3-devel openblas-devel \ openmpi-devel mpich-devel fftw-devel voro++-devel gsl-devel hdf5-devel \ netcdf-devel netcdf-cxx-devel netcdf-mpich-devel netcdf-openmpi-devel \ - python3-pyyaml \ + readline-devel python3-pyyaml \ mingw-filesystem-base mingw32-nsis mingw-binutils-generic \ mingw32-filesystem mingw32-pkg-config \ mingw64-filesystem mingw64-pkg-config \ @@ -18,16 +18,13 @@ From: fedora:32 mingw32-cpp mingw32-gcc mingw32-gcc-gfortran mingw32-gcc-c++ \ mingw64-cpp mingw64-gcc mingw64-gcc-gfortran mingw64-gcc-c++ \ mingw32-libgomp mingw64-libgomp \ - mingw32-winpthreads mingw64-winpthreads \ mingw32-winpthreads-static mingw64-winpthreads-static \ mingw32-eigen3 mingw64-eigen3 \ - mingw32-libjpeg-turbo mingw64-libjpeg-turbo \ mingw32-libjpeg-turbo-static mingw64-libjpeg-turbo-static \ - mingw32-libpng mingw64-libpng \ mingw32-libpng-static mingw64-libpng-static \ - mingw32-zlib mingw64-zlib \ + mingw32-readline-static mingw64-readline-static \ + mingw32-termcap-static mingw64-termcap-static \ mingw32-zlib-static mingw64-zlib-static \ - mingw32-expat mingw64-expat \ mingw64-expat-static mingw32-expat-static \ mingw32-sqlite-static mingw64-sqlite-static \ enchant python3-virtualenv doxygen latexmk \ @@ -60,6 +57,33 @@ From: fedora:32 cd ../../ rm -rvf plumed + # create missing termcap pkgconfig files + cat > /usr/i686-w64-mingw32/sys-root/mingw/lib/pkgconfig/termcap.pc < /usr/x86_64-w64-mingw32/sys-root/mingw/lib/pkgconfig/termcap.pc <$CUSTOM_PROMPT_ENV < Date: Sat, 3 Oct 2020 22:35:58 -0400 Subject: [PATCH 096/182] add missing pkg-config file for readline --- tools/singularity/centos7.def | 15 +++++++++++++++ tools/singularity/centos8.def | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/tools/singularity/centos7.def b/tools/singularity/centos7.def index 8d2d18cd0d..f64db0649b 100644 --- a/tools/singularity/centos7.def +++ b/tools/singularity/centos7.def @@ -48,6 +48,21 @@ From: centos:7 cd ../../ rm -rvf plumed + # create missing readline pkgconfig file + cat > /usr/lib64/pkgconfig/readline.pc <$CUSTOM_PROMPT_ENV < /usr/lib64/pkgconfig/readline.pc <$CUSTOM_PROMPT_ENV < Date: Sat, 3 Oct 2020 23:38:02 -0400 Subject: [PATCH 097/182] add introspection for various kinds of IDs --- src/library.cpp | 141 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 138 insertions(+), 3 deletions(-) diff --git a/src/library.cpp b/src/library.cpp index 585f293f58..6c8d643453 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -22,6 +22,7 @@ #include "comm.h" #include "compute.h" #include "domain.h" +#include "dump.h" #include "error.h" #include "fix.h" #include "fix_external.h" @@ -31,8 +32,10 @@ #include "input.h" #include "memory.h" #include "modify.h" +#include "molecule.h" #include "neigh_list.h" #include "neighbor.h" +#include "region.h" #include "output.h" #include "thermo.h" #include "universe.h" @@ -4117,9 +4120,141 @@ int lammps_group_name(void *handle, int idx, char *buffer, int buf_size) { return 0; } -int lammps_has_id(void *, const char *, const char *); -int lammps_id_count(void *, const char *); -int lammps_id_name(void *, const char *, int, char *, int); +/* ---------------------------------------------------------------------- */ + +/** Check if a specific ID exists in the current LAMMPS instance + * +\verbatim embed:rst +This function checks if the current LAMMPS instance a *category* ID of +the given *name* exists. Valid categories are: *compute*\ , *dump*\ , +*fix*\ , *molecule*\ , and *region*\ . +\endverbatim + * + * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. + * \param category category of the id + * \param name name of the id + * \return 1 if included, 0 if not. + */ +int lammps_has_id(void *handle, const char *category, const char *name) { + LAMMPS *lmp = (LAMMPS *) handle; + + if (strcmp(category,"compute") == 0) { + int ncompute = lmp->modify->ncompute; + Compute **compute = lmp->modify->compute; + for (int i=0; i < ncompute; ++i) { + if (strcmp(name,compute[i]->id) == 0) return 1; + } + } else if (strcmp(category,"dump") == 0) { + int ndump = lmp->output->ndump; + Dump **dump = lmp->output->dump; + for (int i=0; i < ndump; ++i) { + if (strcmp(name,dump[i]->id) == 0) return 1; + } + } else if (strcmp(category,"fix") == 0) { + int nfix = lmp->modify->nfix; + Fix **fix = lmp->modify->fix; + for (int i=0; i < nfix; ++i) { + if (strcmp(name,fix[i]->id) == 0) return 1; + } + } else if (strcmp(category,"molecule") == 0) { + int nmolecule = lmp->atom->nmolecule; + Molecule **molecule = lmp->atom->molecules; + for (int i=0; i < nmolecule; ++i) { + if (strcmp(name,molecule[i]->id) == 0) return 1; + } + } else if (strcmp(category,"region") == 0) { + int nregion = lmp->domain->nregion; + Region **region = lmp->domain->regions; + for (int i=0; i < nregion; ++i) { + if (strcmp(name,region[i]->id) == 0) return 1; + } + } + return 0; +} + +/* ---------------------------------------------------------------------- */ + +/** Count the number of IDs of a category. + * +\verbatim embed:rst +This function counts how many IDs in the provided *category* +are defined in the current LAMMPS instance. +Please see :cpp:func:`lammps_has_id` for a list of valid +categories. +\endverbatim + * + * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. + * \param category category of IDs + * \return number of IDs in category + */ +int lammps_id_count(void *handle, const char *category) { + LAMMPS *lmp = (LAMMPS *) handle; + if (strcmp(category,"compute") == 0) { + return lmp->modify->ncompute; + } else if (strcmp(category,"dump") == 0) { + return lmp->output->ndump; + } else if (strcmp(category,"fix") == 0) { + return lmp->modify->nfix; + } else if (strcmp(category,"molecule") == 0) { + return lmp->atom->nmolecule; + } else if (strcmp(category,"region") == 0) { + return lmp->domain->nregion; + } + return 0; +} + +/* ---------------------------------------------------------------------- */ + +/** Look up the name of an ID by index in the list of IDs of a given category. + * + * This function copies the name of the *category* ID with the index + * *idx* into the provided C-style string buffer. The length of the buffer + * must be provided as *buf_size* argument. If the name of the style + * exceeds the length of the buffer, it will be truncated accordingly. + * If the index is out of range, the function returns 0 and *buffer* is + * set to an empty string, otherwise 1. + * + * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. + * \param category category of IDs + * \param idx index of the ID in the list of *category* styles (0 <= idx < count) + * \param buffer string buffer to copy the name of the style to + * \param buf_size size of the provided string buffer + * \return 1 if successful, otherwise 0 + */ +int lammps_id_name(void *handle, const char *category, int idx, + char *buffer, int buf_size) { + LAMMPS *lmp = (LAMMPS *) handle; + + if (strcmp(category,"compute") == 0) { + if ((idx >=0) && (idx < lmp->modify->ncompute)) { + strncpy(buffer, lmp->modify->compute[idx]->id, buf_size); + return 1; + } + } else if (strcmp(category,"dump") == 0) { + if ((idx >=0) && (idx < lmp->output->ndump)) { + strncpy(buffer, lmp->output->dump[idx]->id, buf_size); + return 1; + } + } else if (strcmp(category,"fix") == 0) { + if ((idx >=0) && (idx < lmp->modify->nfix)) { + strncpy(buffer, lmp->modify->fix[idx]->id, buf_size); + return 1; + } + } else if (strcmp(category,"molecule") == 0) { + if ((idx >=0) && (idx < lmp->atom->nmolecule)) { + strncpy(buffer, lmp->atom->molecules[idx]->id, buf_size); + return 1; + } + } else if (strcmp(category,"region") == 0) { + if ((idx >=0) && (idx < lmp->domain->nregion)) { + strncpy(buffer, lmp->domain->regions[idx]->id, buf_size); + return 1; + } + } + buffer[0] = '\0'; + return 0; +} + /* ---------------------------------------------------------------------- */ /** This function is used to query whether LAMMPS was compiled with From b1cc9949e4fbec2fb224c74d6fa8f917c51e77cd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 3 Oct 2020 23:38:22 -0400 Subject: [PATCH 098/182] include added introspection into docs --- doc/src/Library_config.rst | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/doc/src/Library_config.rst b/doc/src/Library_config.rst index 0c07896ff6..532bd5cfa0 100644 --- a/doc/src/Library_config.rst +++ b/doc/src/Library_config.rst @@ -15,6 +15,12 @@ This section documents the following functions: - :cpp:func:`lammps_has_style` - :cpp:func:`lammps_style_count` - :cpp:func:`lammps_style_name` +- :cpp:func:`lammps_has_group` +- :cpp:func:`lammps_group_count` +- :cpp:func:`lammps_group_name` +- :cpp:func:`lammps_has_id` +- :cpp:func:`lammps_id_count` +- :cpp:func:`lammps_id_name` -------------------- @@ -124,3 +130,33 @@ a safer approach. .. doxygenfunction:: lammps_style_name :project: progguide +----------------------- + +.. doxygenfunction:: lammps_has_group + :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_group_count + :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_group_name + :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_has_id + :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_id_count + :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_id_name + :project: progguide + From 9dfb715296c2752c6bce5984240d5ca94d426003 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Oct 2020 06:01:26 -0400 Subject: [PATCH 099/182] add support for variable names to id introspection in library interface --- src/library.cpp | 15 ++++++++++++++- src/variable.h | 6 ++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/library.cpp b/src/library.cpp index 6c8d643453..d8ec849f49 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -4127,7 +4127,7 @@ int lammps_group_name(void *handle, int idx, char *buffer, int buf_size) { \verbatim embed:rst This function checks if the current LAMMPS instance a *category* ID of the given *name* exists. Valid categories are: *compute*\ , *dump*\ , -*fix*\ , *molecule*\ , and *region*\ . +*fix*\ , *molecule*\ , *region*\ , and *variable*\ . \endverbatim * * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. @@ -4168,6 +4168,12 @@ int lammps_has_id(void *handle, const char *category, const char *name) { for (int i=0; i < nregion; ++i) { if (strcmp(name,region[i]->id) == 0) return 1; } + } else if (strcmp(category,"variable") == 0) { + int nvariable = lmp->input->variable->nvar; + char **varnames = lmp->input->variable->names; + for (int i=0; i < nvariable; ++i) { + if (strcmp(name,varnames[i]) == 0) return 1; + } } return 0; } @@ -4199,6 +4205,8 @@ int lammps_id_count(void *handle, const char *category) { return lmp->atom->nmolecule; } else if (strcmp(category,"region") == 0) { return lmp->domain->nregion; + } else if (strcmp(category,"variable") == 0) { + return lmp->input->variable->nvar; } return 0; } @@ -4250,6 +4258,11 @@ int lammps_id_name(void *handle, const char *category, int idx, strncpy(buffer, lmp->domain->regions[idx]->id, buf_size); return 1; } + } else if (strcmp(category,"variable") == 0) { + if ((idx >=0) && (idx < lmp->input->variable->nvar)) { + strncpy(buffer, lmp->input->variable->names[idx], buf_size); + return 1; + } } buffer[0] = '\0'; return 0; diff --git a/src/variable.h b/src/variable.h index 58548bc276..2519bc7ac9 100644 --- a/src/variable.h +++ b/src/variable.h @@ -49,11 +49,13 @@ class Variable : protected Pointers { tagint int_between_brackets(char *&, int); double evaluate_boolean(char *); + public: + int nvar; // # of defined variables + char **names; // name of each variable + private: int me; - int nvar; // # of defined variables int maxvar; // max # of variables following lists can hold - char **names; // name of each variable int *style; // style of each variable int *num; // # of values for each variable int *which; // next available value for each variable From 2eb07f74271fca945e47ea0765fc273d577ca960 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Oct 2020 06:02:14 -0400 Subject: [PATCH 100/182] add expansions of IDs and references to IDs --- tools/lammps-shell/lammps-shell.cpp | 113 +++++++++++++++++++++++++++- 1 file changed, 111 insertions(+), 2 deletions(-) diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index 1ae548e4f5..3dd80482d2 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -52,6 +52,9 @@ const char *lmp_style[] = {"atom", "integrate", "minimize", "pair", "bond", "angle", "dihedral", "improper", "kspace", "fix", "compute", "region", "dump"}; +enum { COMPUTE_ID, DUMP_ID, FIX_ID, MOLECULE_ID, REGION_ID, VARIABLE_ID }; +const char *lmp_id[] = {"compute", "dump", "fix", "molecule", "region", "variable"}; + std::vector commands; // this list of commands is generated by: @@ -152,6 +155,46 @@ template char *style_generator(const char *text, int state) return nullptr; } +template char *id_generator(const char *text, int state) +{ + static int idx, num, len; + if (!state) { + idx = 0; + num = lammps_id_count(lmp, lmp_id[ID]); + len = strlen(text); + } + + while (idx < num) { + lammps_id_name(lmp, lmp_id[ID], idx, buf, buflen); + ++idx; + if ((len == 0) || (strncmp(text, buf, len) == 0)) return dupstring(buf); + } + return nullptr; +} + +template char *ref_generator(const char *text, int state) +{ + char prefix[] = "X_"; + prefix[0] = PREFIX; + + if (strncmp(text, prefix, 2) == 0) { + char *id = id_generator(text + 2, state); + char *ref = nullptr; + if (id) { + ref = (char *)malloc(strlen(id) + 3); + if (ref) { + ref[0] = PREFIX; + ref[1] = '_'; + ref[2] = 0; + strcat(ref, id); + } + free(id); + } + return ref; + } + return nullptr; +} + extern "C" { static char *cmd_generator(const char *text, int state) { @@ -168,6 +211,57 @@ static char *cmd_generator(const char *text, int state) return nullptr; } +static char *compute_id_generator(const char *text, int state) +{ + return id_generator(text, state); +} + +static char *compute_ref_generator(const char *text, int state) +{ + return ref_generator(text, state); +} + +static char *dump_id_generator(const char *text, int state) +{ + return id_generator(text, state); +} + +static char *fix_id_generator(const char *text, int state) +{ + return id_generator(text, state); +} + +static char *fix_ref_generator(const char *text, int state) +{ + return ref_generator(text, state); +} + +static char *variable_ref_generator(const char *text, int state) +{ + return ref_generator(text, state); +} + +static char *variable_expand_generator(const char *text, int state) +{ + if (strncmp(text, "${", 2) == 0) { + char *id = id_generator(text + 2, state); + char *ref = nullptr; + if (id) { + ref = (char *)malloc(strlen(id) + 4); + if (ref) { + ref[0] = '$'; + ref[1] = '{'; + ref[2] = 0; + strcat(ref, id); + strcat(ref, "}"); + } + free(id); + } + return ref; + } + return nullptr; +} + static char *atom_generator(const char *text, int state) { return style_generator(text, state); @@ -262,10 +356,18 @@ static char **cmd_completion(const char *text, int start, int) matches = rl_completion_matches(text, cmd_generator); } else { // try to provide context specific matches - // first split the already completed text + // first split the already completed text into words for position specific expansion auto words = utils::split_words(std::string(rl_line_buffer).substr(0, start)); - if (words.size() == 1) { // expand second word + if (strncmp(text, "c_", 2) == 0) { // expand references to computes or fixes + matches = rl_completion_matches(text, compute_ref_generator); + } else if (strncmp(text, "f_", 2) == 0) { + matches = rl_completion_matches(text, fix_ref_generator); + } else if (strncmp(text, "v_", 2) == 0) { + matches = rl_completion_matches(text, variable_ref_generator); + } else if (strncmp(text, "${", 2) == 0) { + matches = rl_completion_matches(text, variable_expand_generator); + } else if (words.size() == 1) { // expand second word if (words[0] == "atom_style") { matches = rl_completion_matches(text, atom_generator); } else if (words[0] == "pair_style") { @@ -284,6 +386,12 @@ static char **cmd_completion(const char *text, int start, int) matches = rl_completion_matches(text, integrate_generator); } else if (words[0] == "min_style") { matches = rl_completion_matches(text, minimize_generator); + } else if (words[0] == "compute_modify") { + matches = rl_completion_matches(text, compute_id_generator); + } else if (words[0] == "dump_modify") { + matches = rl_completion_matches(text, dump_id_generator); + } else if (words[0] == "fix_modify") { + matches = rl_completion_matches(text, fix_id_generator); } } else if (words.size() == 2) { // expand third word @@ -431,6 +539,7 @@ int main(int argc, char **argv) char *line; std::string trimmed; + std::cout << "LAMMPS Shell version 1.0\n"; lmp = lammps_open_no_mpi(argc, argv, nullptr); if (lmp == nullptr) return 1; From 9353004e3e7e34346db9c21d15b0d1478fce6c0b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Oct 2020 11:23:49 -0400 Subject: [PATCH 101/182] add APIs to determine of LAMMPS is running and to interrupt a run cleanly --- src/library.cpp | 28 ++++++++++++++++++++++++++++ src/library.h | 3 +++ 2 files changed, 31 insertions(+) diff --git a/src/library.cpp b/src/library.cpp index d8ec849f49..ebbebff2c1 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -38,6 +38,7 @@ #include "region.h" #include "output.h" #include "thermo.h" +#include "timer.h" #include "universe.h" #include "update.h" #include "variable.h" @@ -4619,6 +4620,33 @@ void lammps_decode_image_flags(imageint image, int *flags) flags[2] = (image >> IMG2BITS) - IMGMAX; } +/** Check if LAMMPS is currently inside a run or minimization + * + * This function can be used from signal handlers or multi-threaded + * applications to determine if the LAMMPS instance is currently active. + * + * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. + * \return 0 if idle or >0 if active */ + +int lammps_is_running(void *handle) +{ + LAMMPS * lmp = (LAMMPS *) handle; + return lmp->update->whichflag; +} + +/** Force a timeout to cleanly stop an ongoing run + * + * This function can be used from signal handlers or multi-threaded + * applications to cleanly terminate an ongoing run. + * + * \param handle pointer to a previously created LAMMPS instance cast to ``void *`` */ + +void lammps_force_timeout(void *handle) +{ + LAMMPS * lmp = (LAMMPS *) handle; + return lmp->timer->force_timeout(); +} + // ---------------------------------------------------------------------- // Library functions for error handling with exceptions enabled // ---------------------------------------------------------------------- diff --git a/src/library.h b/src/library.h index 2ac0997487..c365bd9210 100644 --- a/src/library.h +++ b/src/library.h @@ -226,6 +226,9 @@ void lammps_set_fix_external_callback(void *, char *, FixExternalFnPtr, void*); void lammps_fix_external_set_energy_global(void *, char *, double); void lammps_fix_external_set_virial_global(void *, char *, double *); +int lammps_is_running(void *handle); +void lammps_force_timeout(void *handle); + int lammps_has_error(void *handle); int lammps_get_last_error_message(void *handle, char *buffer, int buf_size); From f1ed6a9782ee24857e10c0a36cbd0ddc607f4cad Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Oct 2020 11:25:05 -0400 Subject: [PATCH 102/182] change word break characters to make direct variable expansion completion work --- tools/lammps-shell/lammps-shell.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index 3dd80482d2..d79e580ca2 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -439,7 +439,8 @@ static void init_commands() commands.push_back("clear_history"); // set name so there can be specific entries in ~/.inputrc - rl_readline_name = "lammps-shell"; + rl_readline_name = "lammps-shell"; + rl_basic_word_break_characters = " \t\n\"\\'`@><=;|&("; // attempt completions only if we are connected to a tty, // otherwise any tabs in redirected input will cause havoc. From ecb5078ba75f0937ebf0f3014b8424f6e46db8d4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Oct 2020 11:25:37 -0400 Subject: [PATCH 103/182] add signal handler to smoothly interrupt ongoing runs. non-windows only. --- tools/lammps-shell/lammps-shell.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index d79e580ca2..eba89b0a84 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -25,6 +25,11 @@ #define isatty(x) _isatty(x) #endif +#if !defined(_WIN32) +#include +#else +#endif + #include #include @@ -196,6 +201,16 @@ template char *ref_generator(const char *text, int state) } extern "C" { + +#if !defined(_WIN32) +static void ctrl_c_handler(int) +{ + if (lmp) + if (lammps_is_running(lmp)) lammps_force_timeout(lmp); +} +#else +#endif + static char *cmd_generator(const char *text, int state) { static std::size_t idx, len; @@ -452,6 +467,11 @@ static void init_commands() // read old history read_history(".lammps_history"); + +#if !defined(_WIN32) + signal(SIGINT, ctrl_c_handler); +#else +#endif } static int help_cmd() From 2f67f299e5b3a07fc99d06cab8da33be1e531df9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Oct 2020 11:26:22 -0400 Subject: [PATCH 104/182] correct error messages and make use of utils and fmtlib --- src/timer.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/timer.cpp b/src/timer.cpp index adf143b4ae..f5bc373d7c 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -249,7 +249,6 @@ double Timer::get_timeout_remain() ------------------------------------------------------------------------- */ static const char *timer_style[] = { "off", "loop", "normal", "full" }; static const char *timer_mode[] = { "nosync", "(dummy)", "sync" }; -static const char timer_fmt[] = "New timer settings: style=%s mode=%s timeout=%s\n"; void Timer::modify_params(int narg, char **arg) { @@ -271,15 +270,15 @@ void Timer::modify_params(int narg, char **arg) ++iarg; if (iarg < narg) { _timeout = utils::timespec2seconds(arg[iarg]); - } else error->all(FLERR,"Illegal timers command"); + } else error->all(FLERR,"Illegal timer command"); } else if (strcmp(arg[iarg],"every") == 0) { ++iarg; if (iarg < narg) { _checkfreq = utils::inumeric(FLERR,arg[iarg],false,lmp); if (_checkfreq <= 0) - error->all(FLERR,"Illegal timers command"); - } else error->all(FLERR,"Illegal timers command"); - } else error->all(FLERR,"Illegal timers command"); + error->all(FLERR,"Illegal timer command"); + } else error->all(FLERR,"Illegal timer command"); + } else error->all(FLERR,"Illegal timer command"); ++iarg; } @@ -295,9 +294,8 @@ void Timer::modify_params(int narg, char **arg) strftime(timebuf,32,"%H:%M:%S",tm); } - if (screen) - fprintf(screen,timer_fmt,timer_style[_level],timer_mode[_sync],timebuf); - if (logfile) - fprintf(logfile,timer_fmt,timer_style[_level],timer_mode[_sync],timebuf); + utils::logmesg(lmp,fmt::format("New timer settings: style={} mode={} " + "timeout={}\n",timer_style[_level], + timer_mode[_sync],timebuf); } } From f6a7cbd2e8e458d7706cb7d1084d3a04773b6226 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Oct 2020 11:31:15 -0400 Subject: [PATCH 105/182] fix typo --- src/timer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/timer.cpp b/src/timer.cpp index f5bc373d7c..9bd1778b54 100644 --- a/src/timer.cpp +++ b/src/timer.cpp @@ -296,6 +296,6 @@ void Timer::modify_params(int narg, char **arg) utils::logmesg(lmp,fmt::format("New timer settings: style={} mode={} " "timeout={}\n",timer_style[_level], - timer_mode[_sync],timebuf); + timer_mode[_sync],timebuf)); } } From cc14bae2400e778aa46785495588b0bb42d2592e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Oct 2020 12:22:37 -0400 Subject: [PATCH 106/182] add LAMMPS shell to README --- tools/README | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/README b/tools/README index bed062f918..e98e552b61 100644 --- a/tools/README +++ b/tools/README @@ -29,6 +29,7 @@ fep scripts for free-energy perturbation with USER-FEP pkg i-pi Python wrapper for performing path-integral MD (PIMD) ipp input pre-processor Perl tool for creating input scripts kate add-ons to Kate editor for editing LAMMPS input scripts +lammps-shell LAMMPS executable enhanced for interactive use lmp2arc convert LAMMPS output to Accelrys Insight format lmp2cfg convert LAMMPS output to CFG files for AtomEye viz matlab MatLab scripts for post-processing LAMMPS output From e71806196f334dd1f60c2d6ef738abdf51271e5c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Oct 2020 12:26:26 -0400 Subject: [PATCH 107/182] ignore LAMMPS shell history files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5c90b0f39c..0f1b01775d 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,7 @@ vgcore.* ehthumbs.db Thumbs.db .clang-format +.lammps_history #cmake /build* From e360219a8a2b6b2823f863fdad7541c9555a9a86 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Oct 2020 12:28:01 -0400 Subject: [PATCH 108/182] add readme and makefile for LAMMPS shell --- tools/lammps-shell/.gitignore | 1 + tools/lammps-shell/Makefile | 14 +++++ tools/lammps-shell/README | 108 ++++++++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+) create mode 100644 tools/lammps-shell/.gitignore create mode 100644 tools/lammps-shell/Makefile create mode 100644 tools/lammps-shell/README diff --git a/tools/lammps-shell/.gitignore b/tools/lammps-shell/.gitignore new file mode 100644 index 0000000000..f6c4ad00fa --- /dev/null +++ b/tools/lammps-shell/.gitignore @@ -0,0 +1 @@ +/lammps-shell diff --git a/tools/lammps-shell/Makefile b/tools/lammps-shell/Makefile new file mode 100644 index 0000000000..434fc471aa --- /dev/null +++ b/tools/lammps-shell/Makefile @@ -0,0 +1,14 @@ +SHELL=/bin/sh + +CXX=g++ +CXXFLAGS=-O -g -Wall -I../../src -DLAMMPS_LIB_NO_MPI +LDFLAGS= -L../../src -llammps -lreadline + +lammps-shell: lammps-shell.o + $(CXX) -o $@ $^ $(LDFLAGS) + +lammps-shell.o: lammps-shell.cpp + $(CXX) -c $(CXXFLAGS) -o $@ $< + +clean: + @rm -f lammps-shell lammps-shell.o core *~ .lammps-history diff --git a/tools/lammps-shell/README b/tools/lammps-shell/README new file mode 100644 index 0000000000..568d5a1d9e --- /dev/null +++ b/tools/lammps-shell/README @@ -0,0 +1,108 @@ +The LAMMPS Shell. An enhanced LAMMPS executable for interactive sessions. + +Overview +======== + +This is a program that functions very similar to the regular LAMMPS +executable but has several modifications and additions that make it +more powerful for interactive sessions, i.e. where you type LAMMPS +commands from the prompt instead of reading them from a file. + +- It uses the readline and history libraries to provide command line + editing and context aware TAB-expansion (details on that below). + +- When processing an input file with the '-in' or '-i' flag from the + command line, it does not exit at the end of that input file but + stops at a prompt, so that additional commands can be issued + +- Errors will not abort the shell but return to the prompt. + +- It has additional commands aimed at interactive use (details below). + +- Interrupting a calculation with CTRL-C will not terminate the + session but rather enforce a timeout to cleanly stop an ongoing + run (more info on timeouts is in the timer command documentation). + +These enhancements makes the LAMMPS shell an attractive choice for +interactive LAMMPS sessions in graphical user interfaces. + +TAB-expansion +============= + +When writing commands interactively at the shell prompt, you can hit +the TAB key at any time to try and complete the text. This completion +is context aware and will expand any first word only to commands +available in that executable. + +- For style commands it will expand to available styles of the + corresponding categrory (e.g. pair styles after a pair_style command). + +- For "compute", "fix", or "dump" it will also expand only to already + defined groups for the group-ID keyword. + +- For commands like "compute_modify", "fix_modify", or "dump_modify" + it will expand to known compute/fix/dump IDs only. + +- When typing references to computes, fixes, or variables with a + "c_", "f_", or "v_" prefix, respectively, then the expansion will + to known compute/fix IDs and variable names. Variable name expansion + is also available for the ${name} variable syntax. + +- In all other cases, expansion will be + +For all other + +Command line editing and history +================================ + +When typing commands, command line editing similar to what BASH +provides is available. Thus it is possible to move around the +currently line and perform various cut and insert and edit operations. +Previous commands can be retrieved by scrolling up (and down) +or searching (e.g. with CTRL-r). + +Also history expansion through using the exclamation mark '!' +can be performed. Examples: '!!' will be replaced with the previous +command, '!-2' will repeat the command before that, '!30' will be +replaced with event number 30 in the command history list, and +'!run' with the last command line that started with "run". Adding +a ":p" to such a history expansion will result that the expansion is +printed and added to the history list, but NOT executed. +On exit the LAMMPS shell will write the history list to a file +".lammps_history" in the current working directory. If such a +file exists when the LAMMPS shell is launched it will be read to +populate the history list. + +This is realized via the readline library and can thus be customised +with an .inputrc file in the home directory. For application specific +customizations, the LAMMPS shell uses the name "lammps-shell". +For more information about using and customizing an application using +readline, please see the available documentation at: +http://www.gnu.org/s/readline/#Documentation + +Additional commands +=================== + +The followind commands are added to the LAMMPS shell on top of the +regular LAMMPS commands: + +- help (or ?) print a brief help message +- history display the current command history list +- clear_history wipe out the current command history list +- | execute as a shell command and return to the command prompt +- exit exit the LAMMPS shell cleanly (unlike the "quit" command) + +Compilation +=========== + +Compilation of the LAMMPS shell can be enabled by setting the +CMake variable LAMMPS_SHELL to on or using the makefile in the +tools/lammps-shell folder to compile after building LAMMPS using +the conventional make procedure. The makefile will likely need +customization depending on the features and settings used for +compiling LAMMPS. + +Limitations +=========== + +The LAMMPS shell was not designed for use with MPI parallelization. From ffcd905bf1f59984008fdea0c776ed2ce8bf1a58 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Oct 2020 14:03:34 -0400 Subject: [PATCH 109/182] complete LAMMPS shell docs interation. Warn if exceptions are missing but don't fail --- cmake/CMakeLists.txt | 9 +- doc/src/Build_basics.rst | 6 +- doc/src/Howto_cmake.rst | 2 + doc/src/Tools.rst | 123 +++++++++++++++++++++++++++- tools/lammps-shell/README | 11 ++- tools/lammps-shell/lammps-shell.cpp | 6 ++ 6 files changed, 144 insertions(+), 13 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index daa2a7d90a..f6b1f204b4 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -643,20 +643,19 @@ if(BUILD_TOOLS) install(FILES ${LAMMPS_DOC_DIR}/msi2lmp.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) endif() -if(BUILD_SHELL) +if(BUILD_LAMMPS_SHELL) include(FindPkgConfig) pkg_check_modules(READLINE IMPORTED_TARGET readline) if(PKG_CONFIG_FOUND AND READLINE_FOUND) if(NOT LAMMPS_EXCEPTIONS) - message(FATAL_ERROR "The LAMMPS shell requires LAMMPS_EXCEPTIONS enabled") + message(WARNING "The LAMMPS shell needs LAMMPS_EXCEPTIONS enabled for full functionality") endif() add_executable(lammps-shell ${LAMMPS_TOOLS_DIR}/lammps-shell/lammps-shell.cpp) target_compile_definitions(lammps-shell PRIVATE -DLAMMPS_LIB_NO_MPI) - target_link_libraries(lammps-shell PRIVATE lammps) - target_link_libraries(lammps-shell PRIVATE PkgConfig::READLINE) + target_link_libraries(lammps-shell PRIVATE lammps;PkgConfig::READLINE) install(TARGETS lammps-shell DESTINATION ${CMAKE_INSTALL_BINDIR}) else() - message(WARNING "PkgConfig info for readline library not found, skipping build of 'lammps-shell'") + message(FATAL_ERROR "pkg-config and readline library not found. Cannot build LAMMPS shell") endif() endif() diff --git a/doc/src/Build_basics.rst b/doc/src/Build_basics.rst index 87863e3042..74b6023c3e 100644 --- a/doc/src/Build_basics.rst +++ b/doc/src/Build_basics.rst @@ -541,7 +541,8 @@ using CMake or Make. .. code-block:: bash - -D BUILD_TOOLS=value # yes or no (default) + -D BUILD_TOOLS=value # yes or no (default) + -D BUILD_LAMMPS_SHELL=value # yes or no (default) The generated binaries will also become part of the LAMMPS installation (see below). @@ -557,6 +558,9 @@ using CMake or Make. make micelle2d # build only micelle2d tool make thermo_extract # build only thermo_extract tool + cd lammps/tools/lammps-shell + make # build LAMMPS shell + ---------- .. _install: diff --git a/doc/src/Howto_cmake.rst b/doc/src/Howto_cmake.rst index 9176600820..30d71edd87 100644 --- a/doc/src/Howto_cmake.rst +++ b/doc/src/Howto_cmake.rst @@ -328,6 +328,8 @@ Some common LAMMPS specific variables - build LAMMPS with OpenMP support (default: ``on`` if compiler supports OpenMP fully, else ``off``) * - ``BUILD_TOOLS`` - compile some additional executables from the ``tools`` folder (default: ``off``) + * - ``BUILD_LAMMPS_SHELL`` + - compile the LAMMPS shell from the ``tools/lammps-shell`` folder (default: ``off``) * - ``BUILD_DOC`` - include building the HTML format documentation for packaging/installing (default: ``off``) * - ``CMAKE_TUNE_FLAGS`` diff --git a/doc/src/Tools.rst b/doc/src/Tools.rst index e3e6b344c0..96c49623d8 100644 --- a/doc/src/Tools.rst +++ b/doc/src/Tools.rst @@ -92,6 +92,7 @@ Miscellaneous tools * :ref:`emacs ` * :ref:`i-pi ` * :ref:`kate ` + * :ref:`LAMMPS shell ` * :ref:`singularity ` * :ref:`vim ` @@ -397,10 +398,130 @@ The file was provided by Alessandro Luigi Sellerio ---------- +.. _lammps_shell: + +LAMMPS shell +------------ + +Overview +======== + +The LAMMPS Shell, ``lammps-shell`` is a program that functions very +similar to the regular LAMMPS executable but has several modifications +and additions that make it more powerful for interactive sessions, +i.e. where you type LAMMPS commands from the prompt instead of reading +them from a file. + +- It uses the readline and history libraries to provide command line + editing and context aware TAB-expansion (details on that below). + +- When processing an input file with the '-in' or '-i' flag from the + command line, it does not exit at the end of that input file but + stops at a prompt, so that additional commands can be issued + +- Errors will not abort the shell but return to the prompt. + +- It has additional commands aimed at interactive use (details below). + +- Interrupting a calculation with CTRL-C will not terminate the + session but rather enforce a timeout to cleanly stop an ongoing + run (more info on timeouts is in the timer command documentation). + +These enhancements makes the LAMMPS shell an attractive choice for +interactive LAMMPS sessions in graphical user interfaces. + +TAB-expansion +============= + +When writing commands interactively at the shell prompt, you can hit +the TAB key at any time to try and complete the text. This completion +is context aware and will expand any first word only to commands +available in that executable. + +- For style commands it will expand to available styles of the + corresponding categrory (e.g. pair styles after a + :doc:`pair_style ` command). + +- For :doc:`compute `, :doc:`fix `, or :doc:`dump ` + it will also expand only to already defined groups for the group-ID + keyword. + +- For commands like :doc:`compute_modify `, + :doc:`fix_modify `, or :doc:`dump_modify ` + it will expand to known compute/fix/dump IDs only. + +- When typing references to computes, fixes, or variables with a + "c\_", "f\_", or "v\_" prefix, respectively, then the expansion will + to known compute/fix IDs and variable names. Variable name expansion + is also available for the ${name} variable syntax. + +- In all other cases, expansion will be performed on filenames. + + +Command line editing and history +================================ + +When typing commands, command line editing similar to what BASH +provides is available. Thus it is possible to move around the +currently line and perform various cut and insert and edit operations. +Previous commands can be retrieved by scrolling up (and down) +or searching (e.g. with CTRL-r). + +Also history expansion through using the exclamation mark '!' +can be performed. Examples: '!!' will be replaced with the previous +command, '!-2' will repeat the command before that, '!30' will be +replaced with event number 30 in the command history list, and +'!run' with the last command line that started with "run". Adding +a ":p" to such a history expansion will result that the expansion is +printed and added to the history list, but NOT executed. +On exit the LAMMPS shell will write the history list to a file +".lammps_history" in the current working directory. If such a +file exists when the LAMMPS shell is launched it will be read to +populate the history list. + +This is realized via the readline library and can thus be customised +with an .inputrc file in the home directory. For application specific +customizations, the LAMMPS shell uses the name "lammps-shell". +For more information about using and customizing an application using +readline, please see the available documentation at: +`http://www.gnu.org/s/readline/#Documentation `_ + +Additional commands +=================== + +The followind commands are added to the LAMMPS shell on top of the +regular LAMMPS commands: + +.. parsed-literal:: + + help (or ?) print a brief help message + history display the current command history list + clear_history wipe out the current command history list + \| execute as a shell command and return to the command prompt + exit exit the LAMMPS shell cleanly (unlike the "quit" command) + +Compilation +=========== + +Compilation of the LAMMPS shell can be enabled by setting the CMake +variable ``BUILD_LAMMPS_SHELL`` to "on" or using the makefile in the +``tools/lammps-shell`` folder to compile after building LAMMPS using +the conventional make procedure. The makefile will likely need +customization depending on the features and settings used for +compiling LAMMPS. + +Limitations +=========== + +The LAMMPS shell was not designed for use with MPI parallelization +via ``mpirun`` or ``mpiexec`` or ``srun``. + +---------- + .. _arc: lmp2arc tool ----------------------- +------------ The lmp2arc sub-directory contains a tool for converting LAMMPS output files to the format for Accelrys' Insight MD code (formerly diff --git a/tools/lammps-shell/README b/tools/lammps-shell/README index 568d5a1d9e..8a0ec73734 100644 --- a/tools/lammps-shell/README +++ b/tools/lammps-shell/README @@ -48,9 +48,7 @@ available in that executable. to known compute/fix IDs and variable names. Variable name expansion is also available for the ${name} variable syntax. -- In all other cases, expansion will be - -For all other +- In all other cases, expansion will be performed on filenames. Command line editing and history ================================ @@ -95,8 +93,8 @@ regular LAMMPS commands: Compilation =========== -Compilation of the LAMMPS shell can be enabled by setting the -CMake variable LAMMPS_SHELL to on or using the makefile in the +Compilation of the LAMMPS shell can be enabled by setting the CMake +variable BUILD_LAMMPS_SHELL to "on" or using the makefile in the tools/lammps-shell folder to compile after building LAMMPS using the conventional make procedure. The makefile will likely need customization depending on the features and settings used for @@ -105,4 +103,5 @@ compiling LAMMPS. Limitations =========== -The LAMMPS shell was not designed for use with MPI parallelization. +The LAMMPS shell was not designed for use with MPI parallelization +via "mpirun" or "mpiexec" or "srun". diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index eba89b0a84..cfae8ad50b 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -3,6 +3,8 @@ // Copyright (c) 2020 Axel Kohlmeyer +// This software is distributed under the GNU General Public License. + #include "library.h" #include "utils.h" @@ -561,6 +563,10 @@ int main(int argc, char **argv) std::string trimmed; std::cout << "LAMMPS Shell version 1.0\n"; + if (!lammps_config_has_exceptions()) + std::cout << "WARNING: LAMMPS was compiled without exceptions\n" + "WARNING: Some features will not work as expected\n"; + lmp = lammps_open_no_mpi(argc, argv, nullptr); if (lmp == nullptr) return 1; From d1e76068e86ebdb65ae8405246da1d96c57907c3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Oct 2020 14:10:18 -0400 Subject: [PATCH 110/182] add new APIs to library docs --- doc/src/Library_utility.rst | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/doc/src/Library_utility.rst b/doc/src/Library_utility.rst index 3d2fae53d3..5fbb3efd89 100644 --- a/doc/src/Library_utility.rst +++ b/doc/src/Library_utility.rst @@ -9,6 +9,8 @@ some utility functions that are not directly calling LAMMPS: - :cpp:func:`lammps_set_fix_external_callback` - :cpp:func:`lammps_fix_external_set_energy_global` - :cpp:func:`lammps_fix_external_set_virial_global` +- :cpp:func:`lammps_is_running` +- :cpp:func:`lammps_force_timeout` - :cpp:func:`lammps_has_error` - :cpp:func:`lammps_get_last_error_message` @@ -39,6 +41,16 @@ some utility functions that are not directly calling LAMMPS: ----------------------- +.. doxygenfunction:: lammps_is_running + :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_force_timeout + :project: progguide + +----------------------- + .. doxygenfunction:: lammps_has_error :project: progguide From f3b33ea0c63da9f2aba27c276353a994a65b138c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Oct 2020 14:10:35 -0400 Subject: [PATCH 111/182] address spelling issues --- doc/src/Tools.rst | 13 +++++++------ tools/lammps-shell/README | 8 ++++---- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/doc/src/Tools.rst b/doc/src/Tools.rst index 96c49623d8..483c77038e 100644 --- a/doc/src/Tools.rst +++ b/doc/src/Tools.rst @@ -439,7 +439,7 @@ is context aware and will expand any first word only to commands available in that executable. - For style commands it will expand to available styles of the - corresponding categrory (e.g. pair styles after a + corresponding category (e.g. pair styles after a :doc:`pair_style ` command). - For :doc:`compute `, :doc:`fix `, or :doc:`dump ` @@ -479,17 +479,18 @@ On exit the LAMMPS shell will write the history list to a file file exists when the LAMMPS shell is launched it will be read to populate the history list. -This is realized via the readline library and can thus be customised -with an .inputrc file in the home directory. For application specific -customizations, the LAMMPS shell uses the name "lammps-shell". +This is realized via the readline library and can thus be customized +with an ``.inputrc`` file in the home directory. For application +specific customization, the LAMMPS shell uses the name "lammps-shell". For more information about using and customizing an application using readline, please see the available documentation at: -`http://www.gnu.org/s/readline/#Documentation `_ +`http://www.gnu.org/s/readline/#Documentation +`_ Additional commands =================== -The followind commands are added to the LAMMPS shell on top of the +The following commands are added to the LAMMPS shell on top of the regular LAMMPS commands: .. parsed-literal:: diff --git a/tools/lammps-shell/README b/tools/lammps-shell/README index 8a0ec73734..efa19236ce 100644 --- a/tools/lammps-shell/README +++ b/tools/lammps-shell/README @@ -35,7 +35,7 @@ is context aware and will expand any first word only to commands available in that executable. - For style commands it will expand to available styles of the - corresponding categrory (e.g. pair styles after a pair_style command). + corresponding category (e.g. pair styles after a pair_style command). - For "compute", "fix", or "dump" it will also expand only to already defined groups for the group-ID keyword. @@ -71,9 +71,9 @@ On exit the LAMMPS shell will write the history list to a file file exists when the LAMMPS shell is launched it will be read to populate the history list. -This is realized via the readline library and can thus be customised -with an .inputrc file in the home directory. For application specific -customizations, the LAMMPS shell uses the name "lammps-shell". +This is realized via the readline library and can thus be customized +with an ".inputrc" file in the home directory. For application specific +customization, the LAMMPS shell uses the name "lammps-shell". For more information about using and customizing an application using readline, please see the available documentation at: http://www.gnu.org/s/readline/#Documentation From d500ffa7841d3e7186a21d5dd45072d4d2138e9c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Oct 2020 16:42:29 -0400 Subject: [PATCH 112/182] implement handler for CTRL-C on windows. --- tools/lammps-shell/lammps-shell.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index cfae8ad50b..6dd03cd5bf 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -29,7 +29,6 @@ #if !defined(_WIN32) #include -#else #endif #include @@ -206,12 +205,21 @@ extern "C" { #if !defined(_WIN32) static void ctrl_c_handler(int) -{ - if (lmp) - if (lammps_is_running(lmp)) lammps_force_timeout(lmp); -} #else +static BOOL WINAPI ctrl_c_handler(DWORD event) #endif +{ +#if defined(_WIN32) + if (event == CTRL_C_EVENT) { +#endif + if (lmp) + if (lammps_is_running(lmp)) lammps_force_timeout(lmp); +#if defined(_WIN32) + return TRUE; + } + return FALSE; +#endif +} static char *cmd_generator(const char *text, int state) { @@ -473,6 +481,7 @@ static void init_commands() #if !defined(_WIN32) signal(SIGINT, ctrl_c_handler); #else + SetConsoleCtrlHandler(ctrl_c_handler, TRUE); #endif } @@ -493,6 +502,7 @@ static int shell_end() { write_history(".lammps_history"); if (lmp) lammps_close(lmp); + lammps_mpi_finalize(); lmp = nullptr; return 0; } From 3e74e03bbbddf76c68b021c82c8c11d303c66e64 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 4 Oct 2020 16:46:29 -0400 Subject: [PATCH 113/182] update all_on/all_off presets to really include all packages --- cmake/presets/all_off.cmake | 6 +++--- cmake/presets/all_on.cmake | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmake/presets/all_off.cmake b/cmake/presets/all_off.cmake index dc51ddd18d..bd94b9dbe5 100644 --- a/cmake/presets/all_off.cmake +++ b/cmake/presets/all_off.cmake @@ -2,9 +2,9 @@ # an existing package selection without losing any other settings set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU - GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MISC MESSAGE MOLECULE - MPIIO MSCG OPT PERI POEMS PYTHON QEQ REPLICA RIGID SHOCK SNAP SPIN - SRD VORONOI + GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MISC MESSAGE MLIAP + MOLECULE MPIIO MSCG OPT PERI POEMS PYTHON QEQ REPLICA RIGID SHOCK + SNAP SPIN SRD VORONOI USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESODPD diff --git a/cmake/presets/all_on.cmake b/cmake/presets/all_on.cmake index a4fcfa8faa..438c119c4c 100644 --- a/cmake/presets/all_on.cmake +++ b/cmake/presets/all_on.cmake @@ -4,9 +4,9 @@ # with just a working C++ compiler and an MPI library. set(ALL_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE GPU - GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MISC MESSAGE MOLECULE - MPIIO MSCG OPT PERI POEMS PYTHON QEQ REPLICA RIGID SHOCK SNAP SPIN - SRD VORONOI + GRANULAR KIM KOKKOS KSPACE LATTE MANYBODY MC MISC MESSAGE MLIAP + MOLECULE MPIIO MSCG OPT PERI POEMS PYTHON QEQ REPLICA RIGID SHOCK + SNAP SPIN SRD VORONOI USER-ADIOS USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-INTEL USER-LB USER-MANIFOLD USER-MEAMC USER-MESODPD From e08d9055043a69e7074f7a6e1a28b0a21c954cda Mon Sep 17 00:00:00 2001 From: mrcdr Date: Mon, 5 Oct 2020 22:32:15 +0900 Subject: [PATCH 114/182] make a small change to math_eigen_impl.h --- src/math_eigen_impl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/math_eigen_impl.h b/src/math_eigen_impl.h index 80502b1701..7d6f0385ae 100644 --- a/src/math_eigen_impl.h +++ b/src/math_eigen_impl.h @@ -935,7 +935,7 @@ run(real_t& eigvalue, std::vector& eigvec) const //assert(matrix_size > 0); //assert(0 < this->tridiag_eps_ratio && this->tridiag_eps_ratio < 1); - std::vector> u; // Lanczos vectors + std::vector> u; // Lanczos vectors std::vector> alpha; // Diagonal elements of an approximated tridiagonal matrix std::vector> beta; // Subdiagonal elements of an approximated tridiagonal matrix From b6d333535ce4bf30a78ec390d28bf0c4fdf579e7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 5 Oct 2020 11:43:43 -0400 Subject: [PATCH 115/182] correct variable name --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index f6b1f204b4..dec20095ca 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -90,7 +90,7 @@ if(BUILD_SHARED_LIBS) # for all pkg libs, mpi_stubs and linalg endif() option(BUILD_TOOLS "Build and install LAMMPS tools (msi2lmp, binary2txt, chain)" OFF) -option(BUILD_SHELL "Build and install the LAMMPS shell" OFF) +option(BUILD_LAMMPS_SHELL "Build and install the LAMMPS shell" OFF) include(GNUInstallDirs) file(GLOB ALL_SOURCES ${LAMMPS_SOURCE_DIR}/[^.]*.cpp) From bd206dca101bff400899efb46170f5d98becf94d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 5 Oct 2020 11:44:19 -0400 Subject: [PATCH 116/182] simplify based on suggestions from @junghans --- cmake/CMakeLists.txt | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index dec20095ca..6a0b6b7cc9 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -644,19 +644,15 @@ if(BUILD_TOOLS) endif() if(BUILD_LAMMPS_SHELL) - include(FindPkgConfig) - pkg_check_modules(READLINE IMPORTED_TARGET readline) - if(PKG_CONFIG_FOUND AND READLINE_FOUND) - if(NOT LAMMPS_EXCEPTIONS) - message(WARNING "The LAMMPS shell needs LAMMPS_EXCEPTIONS enabled for full functionality") - endif() - add_executable(lammps-shell ${LAMMPS_TOOLS_DIR}/lammps-shell/lammps-shell.cpp) - target_compile_definitions(lammps-shell PRIVATE -DLAMMPS_LIB_NO_MPI) - target_link_libraries(lammps-shell PRIVATE lammps;PkgConfig::READLINE) - install(TARGETS lammps-shell DESTINATION ${CMAKE_INSTALL_BINDIR}) - else() - message(FATAL_ERROR "pkg-config and readline library not found. Cannot build LAMMPS shell") + find_package(PkgConfig REQUIRED) + pkg_check_modules(READLINE IMPORTED_TARGET REQUIRED readline) + if(NOT LAMMPS_EXCEPTIONS) + message(WARNING "The LAMMPS shell needs LAMMPS_EXCEPTIONS enabled for full functionality") endif() + add_executable(lammps-shell ${LAMMPS_TOOLS_DIR}/lammps-shell/lammps-shell.cpp) + target_compile_definitions(lammps-shell PRIVATE -DLAMMPS_LIB_NO_MPI) + target_link_libraries(lammps-shell PRIVATE lammps PkgConfig::READLINE) + install(TARGETS lammps-shell EXPORT LAMMPS_Targets DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() include(Documentation) From 68cca6d31a56976fa4745dc92d54126791b0d4e0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 5 Oct 2020 12:51:42 -0400 Subject: [PATCH 117/182] make warning about lack of exception handling more specific --- tools/lammps-shell/lammps-shell.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index 6dd03cd5bf..7fa1e0f931 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -575,7 +575,7 @@ int main(int argc, char **argv) std::cout << "LAMMPS Shell version 1.0\n"; if (!lammps_config_has_exceptions()) std::cout << "WARNING: LAMMPS was compiled without exceptions\n" - "WARNING: Some features will not work as expected\n"; + "WARNING: The shell will terminate on errors.\n"; lmp = lammps_open_no_mpi(argc, argv, nullptr); if (lmp == nullptr) return 1; From 113db3ac7321176bc8e02f6d4ae915b6c008d1a2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 5 Oct 2020 13:39:34 -0400 Subject: [PATCH 118/182] fold group specific query functions into the more generic ID query functions --- doc/src/Library_config.rst | 18 ------ src/library.cpp | 89 +++++------------------------ src/library.h | 4 -- tools/lammps-shell/lammps-shell.cpp | 4 +- 4 files changed, 16 insertions(+), 99 deletions(-) diff --git a/doc/src/Library_config.rst b/doc/src/Library_config.rst index 532bd5cfa0..0c1e254537 100644 --- a/doc/src/Library_config.rst +++ b/doc/src/Library_config.rst @@ -15,9 +15,6 @@ This section documents the following functions: - :cpp:func:`lammps_has_style` - :cpp:func:`lammps_style_count` - :cpp:func:`lammps_style_name` -- :cpp:func:`lammps_has_group` -- :cpp:func:`lammps_group_count` -- :cpp:func:`lammps_group_name` - :cpp:func:`lammps_has_id` - :cpp:func:`lammps_id_count` - :cpp:func:`lammps_id_name` @@ -132,21 +129,6 @@ a safer approach. ----------------------- -.. doxygenfunction:: lammps_has_group - :project: progguide - ------------------------ - -.. doxygenfunction:: lammps_group_count - :project: progguide - ------------------------ - -.. doxygenfunction:: lammps_group_name - :project: progguide - ------------------------ - .. doxygenfunction:: lammps_has_id :project: progguide diff --git a/src/library.cpp b/src/library.cpp index ebbebff2c1..3192cf4eef 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -4049,86 +4049,12 @@ int lammps_style_name(void *handle, const char *category, int idx, /* ---------------------------------------------------------------------- */ -/** Check if a group with a given name has been defined - * -\verbatim embed:rst -This function checks if a group with the provided *name* is defined -in the current LAMMPS instance. -\endverbatim - * - * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. - * \param name name of the style - * \return 1 if defined, 0 if not. - */ -int lammps_has_group(void *handle, const char *name) -{ - LAMMPS *lmp = (LAMMPS *)handle; - - int ngroup = lmp->group->ngroup; - char **groups = lmp->group->names; - - for (int i=0; i < ngroup; ++i) - if (strcmp(groups[i],name) == 0) return 1; - - return 0; -} - -/* ---------------------------------------------------------------------- */ - -/** Count the number of currently defined groups - * - * This function counts how many groups are defined in the - * current LAMMPS instance. - * - * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. - * \return number of styles in category - */ -int lammps_group_count(void *handle) -{ - LAMMPS *lmp = (LAMMPS *)handle; - - return lmp->group->ngroup; -} - -/* ---------------------------------------------------------------------- */ - -/** Look up the name of a group by index in the list of groups. - * - * This function copies the name of the group with the index *idx* into - * the provided C-style string buffer. The length of the buffer must be - * provided as *buf_size* argument. If the name of the group exceeds the - * length of the buffer, it will be truncated accordingly. If the index - * is out of range, the function returns 0 and *buffer* is set to an empty - * string, otherwise 1 is returned. - * - * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. - * \param idx index of the group in the list of groups (0 <= idx < group count) - * \param buffer string buffer to copy the name of the style to - * \param buf_size size of the provided string buffer - * \return 1 if successful, otherwise 0 - */ -int lammps_group_name(void *handle, int idx, char *buffer, int buf_size) { - LAMMPS *lmp = (LAMMPS *)handle; - - int ngroup = lmp->group->ngroup; - char **groups = lmp->group->names; - if ((idx >=0) && (idx < ngroup)) { - strncpy(buffer, groups[idx], buf_size); - return 1; - } - - buffer[0] = '\0'; - return 0; -} - -/* ---------------------------------------------------------------------- */ - /** Check if a specific ID exists in the current LAMMPS instance * \verbatim embed:rst This function checks if the current LAMMPS instance a *category* ID of the given *name* exists. Valid categories are: *compute*\ , *dump*\ , -*fix*\ , *molecule*\ , *region*\ , and *variable*\ . +*fix*\ , *group*\ , *molecule*\ , *region*\ , and *variable*\ . \endverbatim * * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. @@ -4157,6 +4083,12 @@ int lammps_has_id(void *handle, const char *category, const char *name) { for (int i=0; i < nfix; ++i) { if (strcmp(name,fix[i]->id) == 0) return 1; } + } else if (strcmp(category,"group") == 0) { + int ngroup = lmp->group->ngroup; + char **groups = lmp->group->names; + for (int i=0; i < ngroup; ++i) { + if (strcmp(groups[i],name) == 0) return 1; + } } else if (strcmp(category,"molecule") == 0) { int nmolecule = lmp->atom->nmolecule; Molecule **molecule = lmp->atom->molecules; @@ -4202,6 +4134,8 @@ int lammps_id_count(void *handle, const char *category) { return lmp->output->ndump; } else if (strcmp(category,"fix") == 0) { return lmp->modify->nfix; + } else if (strcmp(category,"group") == 0) { + return lmp->group->ngroup; } else if (strcmp(category,"molecule") == 0) { return lmp->atom->nmolecule; } else if (strcmp(category,"region") == 0) { @@ -4249,6 +4183,11 @@ int lammps_id_name(void *handle, const char *category, int idx, strncpy(buffer, lmp->modify->fix[idx]->id, buf_size); return 1; } + } else if (strcmp(category,"group") == 0) { + if ((idx >=0) && (idx < lmp->group->ngroup)) { + strncpy(buffer, lmp->group->names[idx], buf_size); + return 1; + } } else if (strcmp(category,"molecule") == 0) { if ((idx >=0) && (idx < lmp->atom->nmolecule)) { strncpy(buffer, lmp->atom->molecules[idx]->id, buf_size); diff --git a/src/library.h b/src/library.h index c365bd9210..8089e51ade 100644 --- a/src/library.h +++ b/src/library.h @@ -183,10 +183,6 @@ int lammps_has_style(void *, const char *, const char *); int lammps_style_count(void *, const char *); int lammps_style_name(void *, const char *, int, char *, int); -int lammps_has_group(void *, const char *); -int lammps_group_count(void *); -int lammps_group_name(void *, int, char *, int); - int lammps_has_id(void *, const char *, const char *); int lammps_id_count(void *, const char *); int lammps_id_name(void *, const char *, int, char *, int); diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index 7fa1e0f931..c1f8182535 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -357,12 +357,12 @@ char *group_generator(const char *text, int state) static int idx, num, len; if (!state) { idx = 0; - num = lammps_group_count(lmp); + num = lammps_id_count(lmp, "group"); len = strlen(text); } while (idx < num) { - lammps_group_name(lmp, idx, buf, buflen); + lammps_id_name(lmp, "group", idx, buf, buflen); ++idx; if ((len == 0) || (strncmp(text, buf, len) == 0)) return dupstring(buf); } From 6933233c565690f300948c798488007c61398283 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 5 Oct 2020 13:41:25 -0400 Subject: [PATCH 119/182] add tests for the new library APIs --- unittest/c-library/test_library_config.cpp | 77 +++++++++++++++++++++- 1 file changed, 76 insertions(+), 1 deletion(-) diff --git a/unittest/c-library/test_library_config.cpp b/unittest/c-library/test_library_config.cpp index 0e81683159..55ca1f84ac 100644 --- a/unittest/c-library/test_library_config.cpp +++ b/unittest/c-library/test_library_config.cpp @@ -2,6 +2,7 @@ #include "lammps.h" #include "library.h" +#include "timer.h" #include #include "gmock/gmock.h" @@ -34,7 +35,11 @@ protected: int argc = sizeof(args) / sizeof(char *); ::testing::internal::CaptureStdout(); - lmp = lammps_open_no_mpi(argc, argv, NULL); + lmp = lammps_open_no_mpi(argc, argv, NULL); + lammps_command(lmp, "fix charge all property/atom q ghost yes"); + lammps_command(lmp, "region box block 0 1 0 1 0 1"); + lammps_command(lmp, "create_box 1 box"); + lammps_command(lmp, "group none empty"); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; EXPECT_THAT(output, StartsWith("LAMMPS (")); @@ -118,6 +123,76 @@ TEST_F(LibraryConfig, style_name) EXPECT_THAT(buf, StrEq("")); }; +TEST_F(LibraryConfig, has_id) +{ + EXPECT_EQ(lammps_has_id(lmp, "compute", "thermo_temp"), 1); + EXPECT_EQ(lammps_has_id(lmp, "compute", "thermo_press"), 1); + EXPECT_EQ(lammps_has_id(lmp, "compute", "thermo_pe"), 1); + EXPECT_EQ(lammps_has_id(lmp, "dump", "xxx"), 0); + EXPECT_EQ(lammps_has_id(lmp, "fix", "charge"), 1); + EXPECT_EQ(lammps_has_id(lmp, "fix", "xxx"), 0); + EXPECT_EQ(lammps_has_id(lmp, "group", "all"), 1); + EXPECT_EQ(lammps_has_id(lmp, "group", "none"), 1); + EXPECT_EQ(lammps_has_id(lmp, "group", "xxx"), 0); + EXPECT_EQ(lammps_has_id(lmp, "molecule", "xxx"), 0); + EXPECT_EQ(lammps_has_id(lmp, "region", "box"), 1); + EXPECT_EQ(lammps_has_id(lmp, "region", "xxx"), 0); + EXPECT_EQ(lammps_has_id(lmp, "variable", "input_dir"), 1); + EXPECT_EQ(lammps_has_id(lmp, "variable", "xxx"), 0); +}; + +TEST_F(LibraryConfig, id_count) +{ + EXPECT_EQ(lammps_id_count(lmp, "compute"), 3); + EXPECT_EQ(lammps_id_count(lmp, "dump"), 0); + EXPECT_EQ(lammps_id_count(lmp, "fix"), 1); + EXPECT_EQ(lammps_id_count(lmp, "group"), 2); + EXPECT_EQ(lammps_id_count(lmp, "molecule"), 0); + EXPECT_EQ(lammps_id_count(lmp, "region"), 1); + EXPECT_EQ(lammps_id_count(lmp, "variable"), 1); +}; + +TEST_F(LibraryConfig, id_name) +{ + const int bufsize = 128; + char buf[bufsize]; + EXPECT_EQ(lammps_id_name(lmp, "compute", 2, buf, bufsize), 1); + EXPECT_THAT(buf, StrEq("thermo_pe")); + EXPECT_EQ(lammps_id_name(lmp, "compute", 10, buf, bufsize), 0); + EXPECT_THAT(buf, StrEq("")); + EXPECT_EQ(lammps_id_name(lmp, "fix", 0, buf, bufsize), 1); + EXPECT_THAT(buf, StrEq("charge")); + EXPECT_EQ(lammps_id_name(lmp, "fix", 10, buf, bufsize), 0); + EXPECT_THAT(buf, StrEq("")); + EXPECT_EQ(lammps_id_name(lmp, "group", 0, buf, bufsize), 1); + EXPECT_THAT(buf, StrEq("all")); + EXPECT_EQ(lammps_id_name(lmp, "group", 1, buf, bufsize), 1); + EXPECT_THAT(buf, StrEq("none")); + EXPECT_EQ(lammps_id_name(lmp, "group", 10, buf, bufsize), 0); + EXPECT_THAT(buf, StrEq("")); + EXPECT_EQ(lammps_id_name(lmp, "region", 0, buf, bufsize), 1); + EXPECT_THAT(buf, StrEq("box")); + EXPECT_EQ(lammps_id_name(lmp, "region", 10, buf, bufsize), 0); + EXPECT_THAT(buf, StrEq("")); + EXPECT_EQ(lammps_id_name(lmp, "variable", 0, buf, bufsize), 1); + EXPECT_THAT(buf, StrEq("input_dir")); + EXPECT_EQ(lammps_id_name(lmp, "variable", 10, buf, bufsize), 0); + EXPECT_THAT(buf, StrEq("")); +}; + +TEST_F(LibraryConfig, is_running) +{ + EXPECT_EQ(lammps_is_running(lmp), 0); +} + +TEST_F(LibraryConfig, force_timeout) +{ + LAMMPS_NS::Timer *timer = ((LAMMPS_NS::LAMMPS *)lmp)->timer; + EXPECT_EQ(timer->is_timeout(), false); + lammps_force_timeout(lmp); + EXPECT_EQ(timer->is_timeout(), true); +} + TEST(LAMMPSConfig, exceptions) { EXPECT_EQ(lammps_config_has_exceptions(), LAMMPS_HAS_EXCEPTIONS); From 4f1ed775e97850327a02e18d4214d16509a63693 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 14:03:19 -0400 Subject: [PATCH 120/182] Add missing docstrings --- python/lammps.py | 200 ++++++++++++++++++++++++++--------------------- 1 file changed, 113 insertions(+), 87 deletions(-) diff --git a/python/lammps.py b/python/lammps.py index 000867805d..8b477055d3 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -737,14 +737,12 @@ class lammps(object): list of the supported keywords. This function returns ``None`` if the keyword is not recognized. Otherwise it will return a positive integer value that - corresponds to one of the constants define in the :py:mod:`lammps` module: - ``LAMMPS_INT``, ``LAMMPS_INT_2D``, ``LAMMPS_DOUBLE``, ``LAMMPS_DOUBLE_2D``, - ``LAMMPS_INT64``, ``LAMMPS_INT64_2D``, and ``LAMMPS_STRING``. These values - are equivalent to the ones defined in :cpp:enum:`_LMP_DATATYPE_CONST`. + corresponds to one of the :ref:`data type ` + constants define in the :py:mod:`lammps` module. :param name: name of the property :type name: string - :return: datatype of global property + :return: data type of global property, see :ref:`py_datatype_constants` :rtype: int """ if name: name = name.encode() @@ -766,15 +764,13 @@ class lammps(object): Since Python needs to know the data type to be able to interpret the result, by default, this function will try to auto-detect the data type by asking the library. You can also force a specific data type. For that - purpose the :py:mod:`lammps` module contains the constants ``LAMMPS_INT``, - ``LAMMPS_DOUBLE``, ``LAMMPS_INT64``, and ``LAMMPS_STRING``. These values - are equivalent to the ones defined in :cpp:enum:`_LMP_DATATYPE_CONST`. - This function returns ``None`` if either the keyword is not recognized, + purpose the :py:mod:`lammps` module contains :ref:`data type ` + constants. This function returns ``None`` if either the keyword is not recognized, or an invalid data type constant is used. :param name: name of the property :type name: string - :param dtype: data type of the returned data (see :ref:`py_data_constants`) + :param dtype: data type of the returned data (see :ref:`py_datatype_constants`) :type dtype: int, optional :return: value of the property or None :rtype: int, float, or NoneType @@ -815,14 +811,12 @@ class lammps(object): list of the supported keywords. This function returns ``None`` if the keyword is not recognized. Otherwise it will return an integer value that - corresponds to one of the constants define in the :py:mod:`lammps` module: - ``LAMMPS_INT``, ``LAMMPS_INT_2D``, ``LAMMPS_DOUBLE``, ``LAMMPS_DOUBLE_2D``, - ``LAMMPS_INT64``, ``LAMMPS_INT64_2D``, and ``LAMMPS_STRING``. These values - are equivalent to the ones defined in :cpp:enum:`_LMP_DATATYPE_CONST`. + corresponds to one of the :ref:`data type ` constants + defined in the :py:mod:`lammps` module. :param name: name of the property :type name: string - :return: data type of per-atom property (see :ref:`py_data_constants`) + :return: data type of per-atom property (see :ref:`py_datatype_constants`) :rtype: int """ if name: name = name.encode() @@ -840,11 +834,9 @@ class lammps(object): list of the supported keywords and their data types. Since Python needs to know the data type to be able to interpret the result, by default, this function will try to auto-detect the data type - by asking the library. You can also force a specific data type. For - that purpose the :py:mod:`lammps` module contains the constants - ``LAMMPS_INT``, ``LAMMPS_INT_2D``, ``LAMMPS_DOUBLE``, ``LAMMPS_DOUBLE_2D``, - ``LAMMPS_INT64``, ``LAMMPS_INT64_2D``, and ``LAMMPS_STRING``. These values - are equivalent to the ones defined in :cpp:enum:`_LMP_DATATYPE_CONST`. + by asking the library. You can also force a specific data type by setting ``dtype`` + to one of the :ref:`data type ` constants defined in the + :py:mod:`lammps` module. This function returns ``None`` if either the keyword is not recognized, or an invalid data type constant is used. @@ -859,7 +851,7 @@ class lammps(object): :param name: name of the property :type name: string - :param dtype: data type of the returned data (see :ref:`py_data_constants`) + :param dtype: data type of the returned data (see :ref:`py_datatype_constants`) :type dtype: int, optional :return: requested data or ``None`` :rtype: ctypes.POINTER(ctypes.c_int32), ctypes.POINTER(ctypes.POINTER(ctypes.c_int32)), @@ -907,12 +899,12 @@ class lammps(object): :param id: compute ID :type id: string - :param style: style of the data retrieve (global, atom, or local) + :param style: style of the data retrieve (global, atom, or local), see :ref:`py_style_constants` :type style: int - :param type: type or size of the returned data (scalar, vector, or array) + :param type: type or size of the returned data (scalar, vector, or array), see :ref:`py_type_constants` :type type: int - :return: requested data - :rtype: integer or double or pointer to 1d or 2d double array or None + :return: requested data as scalar, pointer to 1d or 2d double array, or None + :rtype: c_double, ctypes.POINTER(c_double), ctypes.POINTER(ctypes.POINTER(c_double)), or NoneType """ if id: id = id.encode() else: return None @@ -977,33 +969,29 @@ class lammps(object): :param id: fix ID :type id: string - :param style: style of the data retrieve (global, atom, or local) + :param style: style of the data retrieve (global, atom, or local), see :ref:`py_style_constants` :type style: int - :param type: type or size of the returned data (scalar, vector, or array) + :param type: type or size of the returned data (scalar, vector, or array), see :ref:`py_type_constants` :type type: int :param nrow: index of global vector element or row index of global array element :type nrow: int :param ncol: column index of global array element :type ncol: int - :return: requested data - :rtype: integer or double value, pointer to 1d or 2d double array or None + :return: requested data or None + :rtype: c_double, ctypes.POINTER(c_double), ctypes.POINTER(ctypes.POINTER(c_double)), or NoneType """ if id: id = id.encode() else: return None if style == LMP_STYLE_GLOBAL: - if type == LMP_TYPE_SCALAR \ - or type == LMP_TYPE_VECTOR \ - or type == LMP_TYPE_ARRAY: + if type in (LMP_TYPE_SCALAR, LMP_TYPE_VECTOR, LMP_TYPE_ARRAY): self.lib.lammps_extract_fix.restype = POINTER(c_double) ptr = self.lib.lammps_extract_fix(self.lmp,id,style,type,nrow,ncol) result = ptr[0] self.lib.lammps_free(ptr) return result - elif type == LMP_SIZE_VECTOR \ - or type == LMP_SIZE_ROWS \ - or type == LMP_SIZE_COLS: + elif type in (LMP_SIZE_VECTOR, LMP_SIZE_ROWS, LMP_SIZE_COLS): self.lib.lammps_extract_fix.restype = POINTER(c_int) ptr = self.lib.lammps_extract_fix(self.lmp,id,style,type,nrow,ncol) return ptr[0] @@ -1030,15 +1018,12 @@ class lammps(object): self.lib.lammps_extract_fix.restype = POINTER(c_double) elif type == LMP_TYPE_ARRAY: self.lib.lammps_extract_fix.restype = POINTER(POINTER(c_double)) - elif type == LMP_TYPE_SCALAR \ - or type == LMP_SIZE_VECTOR \ - or type == LMP_SIZE_ROWS \ - or type == LMP_SIZE_COLS: + elif type in (LMP_TYPE_SCALAR, LMP_SIZE_VECTOR, LMP_SIZE_ROWS, LMP_SIZE_COLS): self.lib.lammps_extract_fix.restype = POINTER(c_int) else: return None ptr = self.lib.lammps_extract_fix(self.lmp,id,style,type,nrow,ncol) - if type == LMP_TYPE_VECTOR or type == LMP_TYPE_ARRAY: + if type in (LMP_TYPE_VECTOR, LMP_TYPE_ARRAY): return ptr else: return ptr[0] @@ -1051,17 +1036,17 @@ class lammps(object): # for vector, must copy nlocal returned values to local c_double vector # memory was allocated by library interface function - def extract_variable(self,name,group=None,type=LMP_VAR_EQUAL): + def extract_variable(self, name, group=None, vartype=LMP_VAR_EQUAL): """ Evaluate a LAMMPS variable and return its data This function is a wrapper around the function :cpp:func:`lammps_extract_variable` of the C-library interface, evaluates variable name and returns a copy of the computed data. The memory temporarily allocated by the C-interface is deleted - after the data is copied to a python variable or list. + after the data is copied to a Python variable or list. The variable must be either an equal-style (or equivalent) variable or an atom-style variable. The variable type has to - provided as type parameter which may be two constants: + provided as ``vartype`` parameter which may be two constants: ``LMP_VAR_EQUAL`` or ``LMP_VAR_STRING``; it defaults to equal-style variables. The group parameter is only used for atom-style variables and @@ -1069,26 +1054,24 @@ class lammps(object): :param name: name of the variable to execute :type name: string - :param group: name of group for atom style variable - :type group: string - :param type: type of variable - :type type: int + :param group: name of group for atom-style variable + :type group: string, only for atom-style variables + :param vartype: type of variable, see :ref:`py_vartype_constants` + :type vartype: int :return: the requested data - :rtype: double, array of doubles, or None + :rtype: c_double, (c_double), or NoneType """ if name: name = name.encode() else: return None if group: group = group.encode() - if type == LMP_VAR_EQUAL: + if vartype == LMP_VAR_EQUAL: self.lib.lammps_extract_variable.restype = POINTER(c_double) ptr = self.lib.lammps_extract_variable(self.lmp,name,group) result = ptr[0] self.lib.lammps_free(ptr) return result - if type == LMP_VAR_ATOM: - self.lib.lammps_extract_global.restype = POINTER(c_int) - nlocalptr = self.lib.lammps_extract_global(self.lmp,"nlocal".encode()) - nlocal = nlocalptr[0] + elif vartype == LMP_VAR_ATOM: + nlocal = self.extract_global("nlocal") result = (c_double*nlocal)() self.lib.lammps_extract_variable.restype = POINTER(c_double) ptr = self.lib.lammps_extract_variable(self.lmp,name,group) @@ -1692,18 +1675,9 @@ class numpy_wrapper: def extract_atom(self, name, dtype=LAMMPS_AUTODETECT, nelem=LAMMPS_AUTODETECT, dim=LAMMPS_AUTODETECT): """Retrieve per-atom properties from LAMMPS as NumPy arrays - This is a wrapper around the :cpp:func:`lammps_extract_atom` - function of the C-library interface. Its documentation includes a - list of the supported keywords and their data types. - Since Python needs to know the data type to be able to interpret - the result, by default, this function will try to auto-detect the data - type by asking the library. You can also force a specific data type. - For that purpose the :py:mod:`lammps` module contains the constants - ``LAMMPS_INT``, ``LAMMPS_INT_2D``, ``LAMMPS_DOUBLE``, - ``LAMMPS_DOUBLE_2D``, ``LAMMPS_INT64``, ``LAMMPS_INT64_2D``, and - ``LAMMPS_STRING``. - This function returns ``None`` if either the keyword is not - recognized, or an invalid data type constant is used. + This is a wrapper around the :py:meth:`lammps.extract_atom()` method. + It behaves the same as the original method, but returns NumPy arrays + instead of ``ctypes`` pointers. .. note:: @@ -1716,14 +1690,14 @@ class numpy_wrapper: :param name: name of the property :type name: string - :param dtype: type of the returned data (see :ref:`py_data_constants`) + :param dtype: type of the returned data (see :ref:`py_datatype_constants`) :type dtype: int, optional :param nelem: number of elements in array :type nelem: int, optional :param dim: dimension of each element :type dim: int, optional - :return: requested data as NumPy array with direct access to C data - :rtype: numpy.array + :return: requested data as NumPy array with direct access to C data or None + :rtype: numpy.array or NoneType """ if dtype == LAMMPS_AUTODETECT: dtype = self.lmp.extract_atom_datatype(name) @@ -1780,51 +1754,103 @@ class numpy_wrapper: return self.darray(raw_ptr, nelem, dim) - def extract_compute(self, cid, style, datatype): - value = self.lmp.extract_compute(cid, style, datatype) + def extract_compute(self, cid, style, type): + """Retrieve data from a LAMMPS compute + + This is a wrapper around the + :py:meth:`lammps.extract_compute() ` method. + It behaves the same as the original method, but returns NumPy arrays + instead of ``ctypes`` pointers. + + :param id: compute ID + :type id: string + :param style: style of the data retrieve (global, atom, or local), see :ref:`py_style_constants` + :type style: int + :param type: type of the returned data (scalar, vector, or array), see :ref:`py_type_constants` + :type type: int + :return: requested data either as float, as NumPy array with direct access to C data, or None + :rtype: float, numpy.array, or NoneType + """ + value = self.lmp.extract_compute(cid, style, type) if style in (LMP_STYLE_GLOBAL, LMP_STYLE_LOCAL): - if datatype == LMP_TYPE_VECTOR: + if type == LMP_TYPE_VECTOR: nrows = self.lmp.extract_compute(cid, style, LMP_SIZE_VECTOR) return self.darray(value, nrows) - elif datatype == LMP_TYPE_ARRAY: + elif type == LMP_TYPE_ARRAY: nrows = self.lmp.extract_compute(cid, style, LMP_SIZE_ROWS) ncols = self.lmp.extract_compute(cid, style, LMP_SIZE_COLS) return self.darray(value, nrows, ncols) elif style == LMP_STYLE_ATOM: - if datatype == LMP_TYPE_VECTOR: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + if type == LMP_TYPE_VECTOR: + nlocal = self.lmp.extract_global("nlocal") return self.darray(value, nlocal) - elif datatype == LMP_TYPE_ARRAY: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + elif type == LMP_TYPE_ARRAY: + nlocal = self.lmp.extract_global("nlocal") ncols = self.lmp.extract_compute(cid, style, LMP_SIZE_COLS) return self.darray(value, nlocal, ncols) return value - def extract_fix(self, fid, style, datatype, nrow=0, ncol=0): - value = self.lmp.extract_fix(fid, style, datatype, nrow, ncol) + def extract_fix(self, fid, style, type, nrow=0, ncol=0): + """Retrieve data from a LAMMPS fix + + This is a wrapper around the :py:meth:`lammps.extract_fix() ` method. + It behaves the same as the original method, but returns NumPy arrays + instead of ``ctypes`` pointers. + + :param id: fix ID + :type id: string + :param style: style of the data retrieve (global, atom, or local), see :ref:`py_style_constants` + :type style: int + :param type: type or size of the returned data (scalar, vector, or array), see :ref:`py_type_constants` + :type type: int + :param nrow: index of global vector element or row index of global array element + :type nrow: int + :param ncol: column index of global array element + :type ncol: int + :return: requested data + :rtype: integer or double value, pointer to 1d or 2d double array or None + + """ + value = self.lmp.extract_fix(fid, style, type, nrow, ncol) if style == LMP_STYLE_ATOM: - if datatype == LMP_TYPE_VECTOR: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + if type == LMP_TYPE_VECTOR: + nlocal = self.lmp.extract_global("nlocal") return self.darray(value, nlocal) - elif datatype == LMP_TYPE_ARRAY: - nlocal = self.lmp.extract_global("nlocal", LAMMPS_INT) + elif type == LMP_TYPE_ARRAY: + nlocal = self.lmp.extract_global("nlocal") ncols = self.lmp.extract_fix(fid, style, LMP_SIZE_COLS, 0, 0) return self.darray(value, nlocal, ncols) elif style == LMP_STYLE_LOCAL: - if datatype == LMP_TYPE_VECTOR: + if type == LMP_TYPE_VECTOR: nrows = self.lmp.extract_fix(fid, style, LMP_SIZE_ROWS, 0, 0) return self.darray(value, nrows) - elif datatype == LMP_TYPE_ARRAY: + elif type == LMP_TYPE_ARRAY: nrows = self.lmp.extract_fix(fid, style, LMP_SIZE_ROWS, 0, 0) ncols = self.lmp.extract_fix(fid, style, LMP_SIZE_COLS, 0, 0) return self.darray(value, nrows, ncols) return value - def extract_variable(self, name, group=None, datatype=LMP_VAR_EQUAL): + def extract_variable(self, name, group=None, vartype=LMP_VAR_EQUAL): + """ Evaluate a LAMMPS variable and return its data + + This function is a wrapper around the function + :py:meth:`lammps.extract_variable() ` + method. It behaves the same as the original method, but returns NumPy arrays + instead of ``ctypes`` pointers. + + :param name: name of the variable to execute + :type name: string + :param group: name of group for atom-style variable (ignored for equal-style variables) + :type group: string + :param vartype: type of variable, see :ref:`py_vartype_constants` + :type vartype: int + :return: the requested data or None + :rtype: c_double, numpy.array, or NoneType + """ import numpy as np - value = self.lmp.extract_variable(name, group, datatype) - if datatype == LMP_VAR_ATOM: + value = self.lmp.extract_variable(name, group, vartype) + if vartype == LMP_VAR_ATOM: return np.ctypeslib.as_array(value) return value From 6672568fca41da6ccb7a73669741e47a4886405b Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 14:03:50 -0400 Subject: [PATCH 121/182] Change links --- doc/src/Python_config.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/src/Python_config.rst b/doc/src/Python_config.rst index 8e14b5085c..7660f96835 100644 --- a/doc/src/Python_config.rst +++ b/doc/src/Python_config.rst @@ -1,13 +1,13 @@ Retrieving LAMMPS configuration information ******************************************* -* :py:attr:`has_mpi_support ` -* :py:attr:`has_exceptions ` -* :py:attr:`has_gzip_support ` -* :py:attr:`has_png_support ` -* :py:attr:`has_jpeg_support ` -* :py:attr:`has_ffmpeg_support ` -* :py:attr:`installed_packages ` +* :py:attr:`lammps.has_mpi_support ` +* :py:attr:`lammps.has_exceptions ` +* :py:attr:`lammps.has_gzip_support ` +* :py:attr:`lammps.has_png_support ` +* :py:attr:`lammps.has_jpeg_support ` +* :py:attr:`lammps.has_ffmpeg_support ` +* :py:attr:`lammps.installed_packages ` * :py:meth:`lammps.has_style() ` * :py:meth:`lammps.available_styles() Date: Mon, 5 Oct 2020 14:04:14 -0400 Subject: [PATCH 122/182] Add example showing Python exception handling --- doc/src/Python_error.rst | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/doc/src/Python_error.rst b/doc/src/Python_error.rst index 92f68c423f..f57ec06576 100644 --- a/doc/src/Python_error.rst +++ b/doc/src/Python_error.rst @@ -7,6 +7,27 @@ current Python process with an error message. C++ exceptions allow capturing them on the C++ side and rethrowing them on the Python side. This way LAMMPS errors can be handled through the Python exception handling mechanism. +.. code-block:: Python + + from lammps import lammps, MPIAbortException + + lmp = lammps() + + try: + # LAMMPS will normally terminate itself and the running process if an error + # occurs. This would kill the Python interpreter. To avoid this, make sure to + # compile with LAMMPS_EXCEPTIONS enabled. This ensures the library API calls + # will not terminate the parent process. Instead, the library wrapper will + # detect that an error has occured and throw a Python exception + + lmp.command('unknown') + except MPIAbortException as ae: + # Single MPI process got killed. This would normally be handled by an MPI abort + pass + except Exception as e: + # All (MPI) processes have reached this error + pass + .. warning:: Capturing a LAMMPS exception in Python can still mean that the From ed17eabe1705b114a24113852ceec903adc6816b Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 14:04:44 -0400 Subject: [PATCH 123/182] Add missing code highlights --- doc/src/Python_ext.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/src/Python_ext.rst b/doc/src/Python_ext.rst index 30782c9464..40f6e10609 100644 --- a/doc/src/Python_ext.rst +++ b/doc/src/Python_ext.rst @@ -2,14 +2,14 @@ Extending the library and Python interface ****************************************** As noted above, these Python class methods correspond one-to-one with -the functions in the LAMMPS library interface in src/library.cpp and -library.h. This means you can extend the Python wrapper via the +the functions in the LAMMPS library interface in ``src/library.cpp`` and +``library.h``. This means you can extend the Python wrapper via the following steps: -* Add a new interface function to src/library.cpp and - src/library.h. +* Add a new interface function to ``src/library.cpp`` and + ``src/library.h``. * Rebuild LAMMPS as a shared library. -* Add a wrapper method to python/lammps.py for this interface +* Add a wrapper method to ``python/lammps.py`` for this interface function. * You should now be able to invoke the new interface function from a Python script. From 8f808a5e6e57adb787ad45da2203c1b3f952095b Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 14:06:09 -0400 Subject: [PATCH 124/182] Update Python_usage.rst and Python_module.rst --- doc/src/Python_module.rst | 18 +++-- doc/src/Python_usage.rst | 151 ++++++++++++++++++++++++-------------- 2 files changed, 106 insertions(+), 63 deletions(-) diff --git a/doc/src/Python_module.rst b/doc/src/Python_module.rst index 64ff7b53f7..a78fad8519 100644 --- a/doc/src/Python_module.rst +++ b/doc/src/Python_module.rst @@ -91,7 +91,7 @@ Additional components of the ``lammps`` module The :py:mod:`lammps` module additionally contains several constants and the :py:class:`NeighList ` class: -.. _py_data_constants: +.. _py_datatype_constants: Data Types ---------- @@ -116,7 +116,9 @@ Style Constants Constants in the :py:mod:`lammps` module to select what style of data to request from computes or fixes. See :cpp:enum:`_LMP_STYLE_CONST` for the equivalent constants in the C library interface. Used in - :py:func:`lammps.extract_compute` and :py:func:`lammps.extract_fix`. + :py:func:`lammps.extract_compute`, :py:func:`lammps.extract_fix`, and their NumPy variants + :py:func:`lammps.numpy.extract_compute() ` and + :py:func:`lammps.numpy.extract_fix() `. .. _py_type_constants: @@ -129,18 +131,20 @@ Type Constants Constants in the :py:mod:`lammps` module to select what type of data to request from computes or fixes. See :cpp:enum:`_LMP_TYPE_CONST` for the equivalent constants in the C library interface. Used in - :py:func:`lammps.extract_compute` and :py:func:`lammps.extract_fix`. + :py:func:`lammps.extract_compute`, :py:func:`lammps.extract_fix`, and their NumPy variants + :py:func:`lammps.numpy.extract_compute() ` and + :py:func:`lammps.numpy.extract_fix() `. -.. _py_var_constants: +.. _py_vartype_constants: -Variable Style Constants +Variable Type Constants ------------------------ .. py:data:: LMP_VAR_EQUAL, LMP_VAR_ATOM :type: int - Constants in the :py:mod:`lammps` module to select what style of - variable to query when calling :py:func:`lammps.extract_variable`. + Constants in the :py:mod:`lammps` module to select what type of + variable to query when calling :py:func:`lammps.extract_variable`. See also: :doc:`variable command `. Classes representing internal objects ------------------------------------- diff --git a/doc/src/Python_usage.rst b/doc/src/Python_usage.rst index 135406a740..dc17d007b9 100644 --- a/doc/src/Python_usage.rst +++ b/doc/src/Python_usage.rst @@ -129,7 +129,7 @@ Here are simple examples using all three Python interfaces: In all of the above cases, same as with the :ref:`C library API `, this will use the ``MPI_COMM_WORLD`` communicator for the MPI library that LAMMPS was -compiled with. +compiled with. The :py:func:`lmp.close() ` call is optional since the LAMMPS class instance will also be deleted @@ -251,7 +251,7 @@ it is possible to "compute" what the next LAMMPS command should be. # read commands from file 'in.melt' L.file('in.melt') - + # issue a single command L.variable('zpos', 'index', 1.0) @@ -316,7 +316,7 @@ against invalid accesses. lmp.close() - Methods: + **Methods**: * :py:meth:`version() `: return the numerical version id, e.g. LAMMPS 2 Sep 2015 -> 20150902 * :py:meth:`get_thermo() `: return current value of a thermo keyword @@ -328,23 +328,23 @@ against invalid accesses. * :py:meth:`extract_box() `: extract box info * :py:meth:`create_atoms() `: create N atoms with IDs, types, x, v, and image flags - Numpy Methods: + **Numpy Methods**: * :py:meth:`numpy.extract_atom() `: extract a per-atom quantity as numpy array .. tab:: PyLammps/IPyLammps API .. code-block:: python - + from lammps import PyLammps - + L = PyLammps() L.file("in.sysinit") - + print(f"running simulation with {L.system.natoms} atoms") - + L.run(1000, "post no"); - + for i in range(10): L.run(100, "pre no post no") pe = L.eval("pe") @@ -356,60 +356,99 @@ against invalid accesses. Retrieving or setting properties of LAMMPS objects ************************************************** -* :py:meth:`extract_compute() `: extract value(s) from a compute -* :py:meth:`extract_fix() `: extract value(s) from a fix -* :py:meth:`extract_variable() `: extract value(s) from a variable -* :py:meth:`set_variable() `: set existing named string-style variable to value +.. tabs:: -.. code-block:: Python + .. tab:: lammps API - eng = lmp.extract_compute(id,style,type) # extract value(s) from a compute - v3 = lmp.extract_fix(id,style,type,i,j) # extract value(s) from a fix - # id = ID of compute or fix - # style = 0 = global data - # 1 = per-atom data - # 2 = local data - # type = 0 = scalar - # 1 = vector - # 2 = array - # i,j = indices of value in global vector or array + For :py:meth:`lammps.extract_compute() ` and + :py:meth:`lammps.extract_fix() `, the global, per-atom, + or local data calculated by the compute or fix can be accessed. What is returned + depends on whether the compute or fix calculates a scalar or vector or array. + For a scalar, a single double value is returned. If the compute or fix calculates + a vector or array, a pointer to the internal LAMMPS data is returned, which you can + use via normal Python subscripting. - var = lmp.extract_variable(name,group,flag) # extract value(s) from a variable - # name = name of variable - # group = group ID (ignored for equal-style variables) - # flag = 0 = equal-style variable - # 1 = atom-style variable + The one exception is that for a fix that calculates a + global vector or array, a single double value from the vector or array + is returned, indexed by I (vector) or I and J (array). I,J are + zero-based indices. + See the :doc:`Howto output ` doc page for a discussion of + global, per-atom, and local data, and of scalar, vector, and array + data types. See the doc pages for individual :doc:`computes ` + and :doc:`fixes ` for a description of what they calculate and + store. - flag = lmp.set_variable(name,value) # set existing named string-style variable to value, flag = 0 if successful + For :py:meth:`lammps.extract_variable() `, + an :doc:`equal-style or atom-style variable ` is evaluated and + its result returned. -For extract_compute() and extract_fix(), the global, per-atom, or -local data calculated by the compute or fix can be accessed. What is -returned depends on whether the compute or fix calculates a scalar or -vector or array. For a scalar, a single double value is returned. If -the compute or fix calculates a vector or array, a pointer to the -internal LAMMPS data is returned, which you can use via normal Python -subscripting. The one exception is that for a fix that calculates a -global vector or array, a single double value from the vector or array -is returned, indexed by I (vector) or I and J (array). I,J are -zero-based indices. The I,J arguments can be left out if not needed. -See the :doc:`Howto output ` doc page for a discussion of -global, per-atom, and local data, and of scalar, vector, and array -data types. See the doc pages for individual :doc:`computes ` -and :doc:`fixes ` for a description of what they calculate and -store. + For equal-style variables a single ``c_double`` value is returned and the + group argument is ignored. For atom-style variables, a vector of + ``c_double`` is returned, one value per atom, which you can use via normal + Python subscripting. The values will be zero for atoms not in the + specified group. -For extract_variable(), an :doc:`equal-style or atom-style variable ` -is evaluated and its result returned. + :py:meth:`lammps.numpy.extract_compute() `, + :py:meth:`lammps.numpy.extract_fix() `, and + :py:meth:`lammps.numpy.extract_variable() ` are + equivlanent NumPy implementations that return NumPy arrays instead of ``ctypes`` pointers. -For equal-style variables a single double value is returned and the -group argument is ignored. For atom-style variables, a vector of -doubles is returned, one value per atom, which you can use via normal -Python subscripting. The values will be zero for atoms not in the -specified group. + The :py:meth:`lammps.set_variable() ` method sets an + existing string-style variable to a new string value, so that subsequent LAMMPS + commands can access the variable. + + **Methods**: + + * :py:meth:`lammps.extract_compute() `: extract value(s) from a compute + * :py:meth:`lammps.extract_fix() `: extract value(s) from a fix + * :py:meth:`lammps.extract_variable() `: extract value(s) from a variable + * :py:meth:`lammps.set_variable() `: set existing named string-style variable to value + + **NumPy Methods**: + + * :py:meth:`lammps.numpy.extract_compute() `: extract value(s) from a compute, return arrays as numpy arrays + * :py:meth:`lammps.numpy.extract_fix() `: extract value(s) from a fix, return arrays as numpy arrays + * :py:meth:`lammps.numpy.extract_variable() `: extract value(s) from a variable, return arrays as numpy arrays + + + .. tab:: PyLammps/IPyLammps API + + PyLammps and IPyLammps classes currently do not add any additional ways of + retrieving information out of computes and fixes. This information can still be accessed by using the lammps API: + + .. code-block:: python + + L.lmp.extract_compute(...) + L.lmp.extract_fix(...) + # OR + L.lmp.numpy.extract_compute(...) + L.lmp.numpy.extract_fix(...) + + LAMMPS variables can be both defined and accessed via the :py:class:`PyLammps ` interface. + + To define a variable you can use the :doc:`variable ` command: + + .. code-block:: Python + + L.variable("a index 2") + + A dictionary of all variables is returned by the :py:attr:`PyLammps.variables ` property: + + you can access an individual variable by retrieving a variable object from the + ``L.variables`` dictionary by name + + .. code-block:: Python + + a = L.variables['a'] + + The variable value can then be easily read and written by accessing the value + property of this object. + + .. code-block:: Python + + print(a.value) + a.value = 4 -The set_variable() method sets an existing string-style variable to a -new string value, so that subsequent LAMMPS commands can access the -variable. Gather and Scatter Data between MPI processors @@ -458,7 +497,7 @@ like this: .. code-block:: Python - from ctypes import * + from ctypes import c_double natoms = lmp.get_natoms() n3 = 3*natoms x = (n3*c_double)() From c06348c507ab4f8889dffa4f09945934757b2506 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 15:07:57 -0400 Subject: [PATCH 125/182] Update Python docs --- doc/src/Python_usage.rst | 3 +++ doc/src/python.rst | 12 ++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/doc/src/Python_usage.rst b/doc/src/Python_usage.rst index dc17d007b9..a2750d8195 100644 --- a/doc/src/Python_usage.rst +++ b/doc/src/Python_usage.rst @@ -356,6 +356,9 @@ against invalid accesses. Retrieving or setting properties of LAMMPS objects ************************************************** +This section documents accessing or modifying data from objects like +computes, fixes, or variables in LAMMPS using the :py:mod:`lammps` module. + .. tabs:: .. tab:: lammps API diff --git a/doc/src/python.rst b/doc/src/python.rst index f3238e8bb5..f38e756232 100644 --- a/doc/src/python.rst +++ b/doc/src/python.rst @@ -350,7 +350,7 @@ which loads and runs the following function from examples/python/funcs.py: .. code-block:: python def loop(N,cut0,thresh,lmpptr): - print "LOOP ARGS",N,cut0,thresh,lmpptr + print("LOOP ARGS", N, cut0, thresh, lmpptr) from lammps import lammps lmp = lammps(ptr=lmpptr) natoms = lmp.get_natoms() @@ -365,12 +365,12 @@ which loads and runs the following function from examples/python/funcs.py: lmp.command("pair_coeff * * 1.0 1.0") # ditto lmp.command("run 10") # ditto pe = lmp.extract_compute("thermo_pe",0,0) # extract total PE from LAMMPS - print "PE",pe/natoms,thresh + print("PE", pe/natoms, thresh) if pe/natoms < thresh: return with these input script commands: -.. parsed-literal:: +.. code-block:: LAMMPS python loop input 4 10 1.0 -4.0 SELF format iffp file funcs.py python loop invoke @@ -473,11 +473,11 @@ like this: .. code-block:: python import exceptions - print "Inside simple function" + print("Inside simple function") try: foo += 1 # one or more statements here - except Exception, e: - print "FOO error:",e + except Exception as e: + print("FOO error:", e) then you will get this message printed to the screen: From 68147306e7d31931dfeac4bc3a0b4dcc616213fa Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 16:15:40 -0400 Subject: [PATCH 126/182] Add Python_neighbor.rst --- doc/src/Python_head.rst | 1 + doc/src/Python_neighbor.rst | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 doc/src/Python_neighbor.rst diff --git a/doc/src/Python_head.rst b/doc/src/Python_head.rst index 6952215188..e78e727a10 100644 --- a/doc/src/Python_head.rst +++ b/doc/src/Python_head.rst @@ -13,6 +13,7 @@ used together. Python_usage Python_call Python_config + Python_neighbor Python_module Python_examples Python_error diff --git a/doc/src/Python_neighbor.rst b/doc/src/Python_neighbor.rst new file mode 100644 index 0000000000..2e8f84050c --- /dev/null +++ b/doc/src/Python_neighbor.rst @@ -0,0 +1,18 @@ +Accessing LAMMPS Neighbor lists +******************************* + +**Methods:** + +* :py:meth:`lammps.get_neighlist() `: Get neighbor list for given index +* :py:meth:`lammps.get_neighlist_size()`: Get number of elements in neighbor list +* :py:meth:`lammps.get_neighlist_element_neighbors()`: Get element in neighbor list and its neighbors + +* :py:meth:`lammps.find_pair_neighlist() `: Find neighbor list of pair style +* :py:meth:`lammps.find_fix_neighlist() `: Find neighbor list of pair style +* :py:meth:`lammps.find_compute_neighlist() `: Find neighbor list of pair style + + +**NumPy Methods:** + +* :py:meth:`lammps.numpy.get_neighlist() `: Get neighbor list for given index, which uses NumPy arrays for its element neighbor arrays +* :py:meth:`lammps.numpy.get_neighlist_element_neighbors() `: Get element in neighbor list and its neighbors (as numpy array) From 02b10380bcd6e65ab0649036e783914a3d9bcdc6 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 16:21:37 -0400 Subject: [PATCH 127/182] Create ctypes only neighbor list API variant This moves the lammps.get_neighlist() method to lammps.numpy.get_neighlist(). lammps.get_neighlist() now returns a NeighList object, while the NumPy variants returns a NumPyNeighList object. The main difference between the two is that while the ctypes variant returns neighlist elements as atom idx (int), numneighs (int), neighbors (POINTER(c_int)) the NumPy variant returns atom idx (int), neighbors (numpy.array) --- doc/src/Python_module.rst | 4 + .../python/in.fix_python_invoke_neighlist | 9 +- python/lammps.py | 166 ++++++++++++++---- 3 files changed, 137 insertions(+), 42 deletions(-) diff --git a/doc/src/Python_module.rst b/doc/src/Python_module.rst index a78fad8519..04bc3f2c5b 100644 --- a/doc/src/Python_module.rst +++ b/doc/src/Python_module.rst @@ -152,3 +152,7 @@ Classes representing internal objects .. autoclass:: lammps.NeighList :members: :no-undoc-members: + +.. autoclass:: lammps.NumPyNeighList + :members: + :no-undoc-members: diff --git a/examples/python/in.fix_python_invoke_neighlist b/examples/python/in.fix_python_invoke_neighlist index e5445227b1..af0399ae1f 100644 --- a/examples/python/in.fix_python_invoke_neighlist +++ b/examples/python/in.fix_python_invoke_neighlist @@ -32,8 +32,9 @@ def post_force_callback(lmp, v): t = L.extract_global("ntimestep", 0) print(pid_prefix, "### POST_FORCE ###", t) - #mylist = L.get_neighlist(0) - mylist = L.find_pair_neighlist("lj/cut", request=0) + #mylist = L.numpy.get_neighlist(0) + idx = L.find_pair_neighlist("lj/cut", request=0) + mylist = L.numpy.get_neighlist(idx) print(pid_prefix, mylist) nlocal = L.extract_global("nlocal") nghost = L.extract_global("nghost") @@ -43,8 +44,8 @@ def post_force_callback(lmp, v): v = L.numpy.extract_atom("v", nelem=nlocal+nghost, dim=3) f = L.numpy.extract_atom("f", nelem=nlocal+nghost, dim=3) - for iatom, numneigh, neighs in mylist: - print(pid_prefix, "- {}".format(iatom), x[iatom], v[iatom], f[iatom], " : ", numneigh, "Neighbors") + for iatom, neighs in mylist: + print(pid_prefix, "- {}".format(iatom), x[iatom], v[iatom], f[iatom], " : ", len(neighs), "Neighbors") for jatom in neighs: if jatom < nlocal: print(pid_prefix, " * ", jatom, x[jatom], v[jatom], f[jatom]) diff --git a/python/lammps.py b/python/lammps.py index 8b477055d3..1f38dd7772 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -81,7 +81,12 @@ class MPIAbortException(Exception): class NeighList: """This is a wrapper class that exposes the contents of a neighbor list. - It can be used like a regular Python list. + It can be used like a regular Python list. Each element is a tuple of: + + * the atom local index + * its number of neighbors + * and a pointer to an c_int array containing local atom indices of its + neighbors Internally it uses the lower-level LAMMPS C-library interface. @@ -109,8 +114,8 @@ class NeighList: def get(self, element): """ - :return: tuple with atom local index, number of neighbors and array of neighbor local atom indices - :rtype: (int, int, numpy.array) + :return: tuple with atom local index, numpy array of neighbor local atom indices + :rtype: (int, int, ctypes.POINTER(c_int)) """ iatom, numneigh, neighbors = self.lmp.get_neighlist_element_neighbors(self.idx, element) return iatom, numneigh, neighbors @@ -129,6 +134,35 @@ class NeighList: for ii in range(inum): yield self.get(ii) +# ------------------------------------------------------------------------- + +class NumPyNeighList(NeighList): + """This is a wrapper class that exposes the contents of a neighbor list. + + It can be used like a regular Python list. Each element is a tuple of: + + * the atom local index + * a NumPy array containing the local atom indices of its neighbors + + Internally it uses the lower-level LAMMPS C-library interface. + + :param lmp: reference to instance of :py:class:`lammps` + :type lmp: lammps + :param idx: neighbor list index + :type idx: int + """ + def __init__(self, lmp, idx): + super(NumPyNeighList, self).__init__(lmp, idx) + + def get(self, element): + """ + :return: tuple with atom local index, numpy array of neighbor local atom indices + :rtype: (int, numpy.array) + """ + iatom, neighbors = self.lmp.numpy.get_neighlist_element_neighbors(self.idx, element) + return iatom, neighbors + + # ------------------------------------------------------------------------- # ------------------------------------------------------------------------- @@ -1537,11 +1571,15 @@ class lammps(object): self.callback[fix_name] = { 'function': cFunc, 'caller': caller } self.lib.lammps_set_fix_external_callback(self.lmp, fix_name.encode(), cFunc, cCaller) + # ------------------------------------------------------------------------- def get_neighlist(self, idx): """Returns an instance of :class:`NeighList` which wraps access to the neighbor list with the given index + See :py:meth:`lammps.numpy.get_neighlist() ` if you want to use + NumPy arrays instead of ``c_int`` pointers. + :param idx: index of neighbor list :type idx: int :return: an instance of :class:`NeighList` wrapping access to neighbor list data @@ -1549,7 +1587,37 @@ class lammps(object): """ if idx < 0: return None - return NeighList(self, idx) + return NeighList(self.lmp, idx) + + # ------------------------------------------------------------------------- + + def get_neighlist_size(self, idx): + """Return the number of elements in neighbor list with the given index + + :param idx: neighbor list index + :type idx: int + :return: number of elements in neighbor list with index idx + :rtype: int + """ + return self.lib.lammps_neighlist_num_elements(self.lmp, idx) + + # ------------------------------------------------------------------------- + + def get_neighlist_element_neighbors(self, idx, element): + """Return data of neighbor list entry + + :param element: neighbor list index + :type element: int + :param element: neighbor list element index + :type element: int + :return: tuple with atom local index, number of neighbors and array of neighbor local atom indices + :rtype: (int, int, POINTER(c_int)) + """ + c_iatom = c_int() + c_numneigh = c_int() + c_neighbors = POINTER(c_int)() + self.lib.lammps_neighlist_element_neighbors(self.lmp, idx, element, byref(c_iatom), byref(c_numneigh), byref(c_neighbors)) + return c_iatom.value, c_numneigh.value, c_neighbors # ------------------------------------------------------------------------- @@ -1579,7 +1647,7 @@ class lammps(object): style = style.encode() exact = int(exact) idx = self.lib.lammps_find_pair_neighlist(self.lmp, style, exact, nsub, request) - return self.get_neighlist(idx) + return idx # ------------------------------------------------------------------------- @@ -1595,7 +1663,7 @@ class lammps(object): """ fixid = fixid.encode() idx = self.lib.lammps_find_fix_neighlist(self.lmp, fixid, request) - return self.get_neighlist(idx) + return idx # ------------------------------------------------------------------------- @@ -1611,38 +1679,7 @@ class lammps(object): """ computeid = computeid.encode() idx = self.lib.lammps_find_compute_neighlist(self.lmp, computeid, request) - return self.get_neighlist(idx) - - # ------------------------------------------------------------------------- - - def get_neighlist_size(self, idx): - """Return the number of elements in neighbor list with the given index - - :param idx: neighbor list index - :type idx: int - :return: number of elements in neighbor list with index idx - :rtype: int - """ - return self.lib.lammps_neighlist_num_elements(self.lmp, idx) - - # ------------------------------------------------------------------------- - - def get_neighlist_element_neighbors(self, idx, element): - """Return data of neighbor list entry - - :param element: neighbor list index - :type element: int - :param element: neighbor list element index - :type element: int - :return: tuple with atom local index, number of neighbors and array of neighbor local atom indices - :rtype: (int, int, numpy.array) - """ - c_iatom = c_int() - c_numneigh = c_int() - c_neighbors = POINTER(c_int)() - self.lib.lammps_neighlist_element_neighbors(self.lmp, idx, element, byref(c_iatom), byref(c_numneigh), byref(c_neighbors)) - neighbors = self.numpy.iarray(c_int, c_neighbors, c_numneigh.value, 1) - return c_iatom.value, c_numneigh.value, neighbors + return idx # ------------------------------------------------------------------------- @@ -1664,6 +1701,8 @@ class numpy_wrapper: def __init__(self, lmp): self.lmp = lmp + # ------------------------------------------------------------------------- + def _ctype_to_numpy_int(self, ctype_int): import numpy as np if ctype_int == c_int32: @@ -1672,6 +1711,8 @@ class numpy_wrapper: return np.int64 return np.intc + # ------------------------------------------------------------------------- + def extract_atom(self, name, dtype=LAMMPS_AUTODETECT, nelem=LAMMPS_AUTODETECT, dim=LAMMPS_AUTODETECT): """Retrieve per-atom properties from LAMMPS as NumPy arrays @@ -1727,6 +1768,8 @@ class numpy_wrapper: return self.iarray(c_int64, raw_ptr, nelem, dim) return raw_ptr + # ------------------------------------------------------------------------- + def extract_atom_iarray(self, name, nelem, dim=1): warnings.warn("deprecated, use extract_atom instead", DeprecationWarning) @@ -1744,6 +1787,8 @@ class numpy_wrapper: return self.iarray(c_int_type, raw_ptr, nelem, dim) + # ------------------------------------------------------------------------- + def extract_atom_darray(self, name, nelem, dim=1): warnings.warn("deprecated, use extract_atom instead", DeprecationWarning) @@ -1754,6 +1799,8 @@ class numpy_wrapper: return self.darray(raw_ptr, nelem, dim) + # ------------------------------------------------------------------------- + def extract_compute(self, cid, style, type): """Retrieve data from a LAMMPS compute @@ -1791,6 +1838,8 @@ class numpy_wrapper: return self.darray(value, nlocal, ncols) return value + # ------------------------------------------------------------------------- + def extract_fix(self, fid, style, type, nrow=0, ncol=0): """Retrieve data from a LAMMPS fix @@ -1831,6 +1880,8 @@ class numpy_wrapper: return self.darray(value, nrows, ncols) return value + # ------------------------------------------------------------------------- + def extract_variable(self, name, group=None, vartype=LMP_VAR_EQUAL): """ Evaluate a LAMMPS variable and return its data @@ -1854,6 +1905,43 @@ class numpy_wrapper: return np.ctypeslib.as_array(value) return value + # ------------------------------------------------------------------------- + + def get_neighlist(self, idx): + """Returns an instance of :class:`NumPyNeighList` which wraps access to the neighbor list with the given index + + :param idx: index of neighbor list + :type idx: int + :return: an instance of :class:`NumPyNeighList` wrapping access to neighbor list data + :rtype: NumPyNeighList + """ + if idx < 0: + return None + return NumPyNeighList(self.lmp, idx) + + # ------------------------------------------------------------------------- + + def get_neighlist_element_neighbors(self, idx, element): + """Return data of neighbor list entry + + This function is a wrapper around the function + :py:meth:`lammps.get_neighlist_element_neighbors() ` + method. It behaves the same as the original method, but returns a NumPy array containing the neighbors + instead of a ``ctypes`` pointer. + + :param element: neighbor list index + :type element: int + :param element: neighbor list element index + :type element: int + :return: tuple with atom local index and numpy array of neighbor local atom indices + :rtype: (int, numpy.array) + """ + iatom, numneigh, c_neighbors = self.lmp.get_neighlist_element_neighbors(idx, element) + neighbors = self.iarray(c_int, c_neighbors, numneigh, 1) + return iatom, neighbors + + # ------------------------------------------------------------------------- + def iarray(self, c_int_type, raw_ptr, nelem, dim=1): import numpy as np np_int_type = self._ctype_to_numpy_int(c_int_type) @@ -1867,6 +1955,8 @@ class numpy_wrapper: a.shape = (nelem, dim) return a + # ------------------------------------------------------------------------- + def darray(self, raw_ptr, nelem, dim=1): import numpy as np if dim == 1: From 22cca93603fed52fd82b9fb59a7a0237b19838f1 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 17:34:08 -0400 Subject: [PATCH 128/182] Add tests for neighbor list API --- python/lammps.py | 2 +- unittest/python/python-commands.py | 43 ++++++++++++++++++++++++++++++ unittest/python/python-numpy.py | 43 ++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 1 deletion(-) diff --git a/python/lammps.py b/python/lammps.py index 1f38dd7772..2e7b9ab86f 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -1587,7 +1587,7 @@ class lammps(object): """ if idx < 0: return None - return NeighList(self.lmp, idx) + return NeighList(self, idx) # ------------------------------------------------------------------------- diff --git a/unittest/python/python-commands.py b/unittest/python/python-commands.py index 0b853a207e..6bd5a2a247 100644 --- a/unittest/python/python-commands.py +++ b/unittest/python/python-commands.py @@ -85,6 +85,49 @@ create_atoms 1 single & natoms = self.lmp.get_natoms() self.assertEqual(natoms,2) + def testNeighborList(self): + self.lmp.command("units lj") + self.lmp.command("atom_style atomic") + self.lmp.command("atom_modify map array") + self.lmp.command("boundary f f f") + self.lmp.command("region box block 0 2 0 2 0 2") + self.lmp.command("create_box 1 box") + + x = [ + 1.0, 1.0, 1.0, + 1.0, 1.0, 1.5 + ] + + types = [1, 1] + + self.assertEqual(self.lmp.create_atoms(2, id=None, type=types, x=x), 2) + nlocal = self.lmp.extract_global("nlocal") + self.assertEqual(nlocal, 2) + + self.lmp.command("mass 1 1.0") + self.lmp.command("velocity all create 3.0 87287") + self.lmp.command("pair_style lj/cut 2.5") + self.lmp.command("pair_coeff 1 1 1.0 1.0 2.5") + self.lmp.command("neighbor 0.1 bin") + self.lmp.command("neigh_modify every 20 delay 0 check no") + + self.lmp.command("run 0") + + self.assertEqual(self.lmp.find_pair_neighlist("lj/cut"), 0) + nlist = self.lmp.get_neighlist(0) + self.assertEqual(len(nlist), 2) + atom_i, numneigh_i, neighbors_i = nlist[0] + atom_j, numneigh_j, _ = nlist[1] + + self.assertEqual(atom_i, 0) + self.assertEqual(atom_j, 1) + + self.assertEqual(numneigh_i, 1) + self.assertEqual(numneigh_j, 0) + + self.assertEqual(1, neighbors_i[0]) + + ############################## if __name__ == "__main__": unittest.main() diff --git a/unittest/python/python-numpy.py b/unittest/python/python-numpy.py index 3c8ff9f512..46794590f4 100644 --- a/unittest/python/python-numpy.py +++ b/unittest/python/python-numpy.py @@ -135,5 +135,48 @@ class PythonNumpy(unittest.TestCase): self.assertTrue((x[1] == (1.0, 1.0, 1.5)).all()) self.assertEqual(len(v), 2) + def testNeighborList(self): + self.lmp.command("units lj") + self.lmp.command("atom_style atomic") + self.lmp.command("atom_modify map array") + self.lmp.command("boundary f f f") + self.lmp.command("region box block 0 2 0 2 0 2") + self.lmp.command("create_box 1 box") + + x = [ + 1.0, 1.0, 1.0, + 1.0, 1.0, 1.5 + ] + + types = [1, 1] + + self.assertEqual(self.lmp.create_atoms(2, id=None, type=types, x=x), 2) + nlocal = self.lmp.extract_global("nlocal") + self.assertEqual(nlocal, 2) + + self.lmp.command("mass 1 1.0") + self.lmp.command("velocity all create 3.0 87287") + self.lmp.command("pair_style lj/cut 2.5") + self.lmp.command("pair_coeff 1 1 1.0 1.0 2.5") + self.lmp.command("neighbor 0.1 bin") + self.lmp.command("neigh_modify every 20 delay 0 check no") + + self.lmp.command("run 0") + + self.assertEqual(self.lmp.find_pair_neighlist("lj/cut"), 0) + nlist = self.lmp.numpy.get_neighlist(0) + self.assertEqual(len(nlist), 2) + atom_i, neighbors_i = nlist[0] + atom_j, neighbors_j = nlist[1] + + self.assertEqual(atom_i, 0) + self.assertEqual(atom_j, 1) + + self.assertEqual(len(neighbors_i), 1) + self.assertEqual(len(neighbors_j), 0) + + self.assertIn(1, neighbors_i) + self.assertNotIn(0, neighbors_j) + if __name__ == "__main__": unittest.main() From 93ed9b42661747803a538960da91c40127094bee Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 17:34:50 -0400 Subject: [PATCH 129/182] Add PyLammps parts --- doc/src/Python_usage.rst | 52 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/doc/src/Python_usage.rst b/doc/src/Python_usage.rst index a2750d8195..7c23980015 100644 --- a/doc/src/Python_usage.rst +++ b/doc/src/Python_usage.rst @@ -334,6 +334,58 @@ against invalid accesses. .. tab:: PyLammps/IPyLammps API + In addition to the functions provided by :py:class:`lammps `, :py:class:`PyLammps ` objects + have several properties which allow you to query the system state: + + L.system + Is a dictionary describing the system such as the bounding box or number of atoms + + L.system.xlo, L.system.xhi + bounding box limits along x-axis + + L.system.ylo, L.system.yhi + bounding box limits along y-axis + + L.system.zlo, L.system.zhi + bounding box limits along z-axis + + L.communication + configuration of communication subsystem, such as the number of threads or processors + + L.communication.nthreads + number of threads used by each LAMMPS process + + L.communication.nprocs + number of MPI processes used by LAMMPS + + L.fixes + List of fixes in the current system + + L.computes + List of active computes in the current system + + L.dump + List of active dumps in the current system + + L.groups + List of groups present in the current system + + **Retrieving the value of an arbitrary LAMMPS expressions** + + LAMMPS expressions can be immediately evaluated by using the ``eval`` method. The + passed string parameter can be any expression containing global :doc:`thermo` values, + variables, compute or fix data (see :doc:`Howto_output`): + + + .. code-block:: Python + + result = L.eval("ke") # kinetic energy + result = L.eval("pe") # potential energy + + result = L.eval("v_t/2.0") + + **Example** + .. code-block:: python from lammps import PyLammps From b8c66b099d74892a719ca395764d0969251e4cc1 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 17:42:43 -0400 Subject: [PATCH 130/182] Fix typo --- doc/src/Python_config.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Python_config.rst b/doc/src/Python_config.rst index 7660f96835..2bd562c533 100644 --- a/doc/src/Python_config.rst +++ b/doc/src/Python_config.rst @@ -10,4 +10,4 @@ Retrieving LAMMPS configuration information * :py:attr:`lammps.installed_packages ` * :py:meth:`lammps.has_style() ` -* :py:meth:`lammps.available_styles() ` From caf434811a3baf748c7d7d41750af991f05abbca Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 17:54:48 -0400 Subject: [PATCH 131/182] Add example to Python_config.rst --- doc/src/Python_config.rst | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/doc/src/Python_config.rst b/doc/src/Python_config.rst index 2bd562c533..bb44ae5630 100644 --- a/doc/src/Python_config.rst +++ b/doc/src/Python_config.rst @@ -1,12 +1,44 @@ Retrieving LAMMPS configuration information ******************************************* +The following methods can be used to query the LAMMPS library +about compile time settings and included packages and styles. + +.. code-block:: Python + :caption: Example for using configuration settings functions + + from lammps import lammps + + lmp = lammps() + + try: + lmp.file("in.missing") + except Exception as e: + print("LAMMPS failed with error:", e) + + # write compressed dump file depending on available of options + + if lmp.has_style("dump", "atom/zstd"): + lmp.command("dump d1 all atom/zstd 100 dump.zst") + elif lmp.has_style("dump", "atom/gz"): + lmp.command("dump d1 all atom/gz 100 dump.gz") + elif lmp.has_gzip_support(): + lmp.command("dump d1 all atom 100 dump.gz") + else: + lmp.command("dump d1 all atom 100 dump") + + +----------------------- + +**Methods:** + * :py:attr:`lammps.has_mpi_support ` * :py:attr:`lammps.has_exceptions ` * :py:attr:`lammps.has_gzip_support ` * :py:attr:`lammps.has_png_support ` * :py:attr:`lammps.has_jpeg_support ` * :py:attr:`lammps.has_ffmpeg_support ` + * :py:attr:`lammps.installed_packages ` * :py:meth:`lammps.has_style() ` From 5244f49234037ad5b7a9cedf5e37eda351c57794 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 5 Oct 2020 18:04:30 -0400 Subject: [PATCH 132/182] Fix broken page --- doc/src/compute_tally.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/compute_tally.rst b/doc/src/compute_tally.rst index 6487618516..0e2856ea5e 100644 --- a/doc/src/compute_tally.rst +++ b/doc/src/compute_tally.rst @@ -107,8 +107,8 @@ The computes in this package are not compatible with dynamic groups. Related commands """""""""""""""" -*compute group/group*\ _compute_group_group.html, *compute -heat/flux*\ _compute_heat_flux.html +* :doc:`compute group/group ` +* :doc:`compute heat/flux ` Default """"""" From f2ba00ea9cc633db76ca3305ef92234d2295ce99 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 5 Oct 2020 21:50:37 -0400 Subject: [PATCH 133/182] update label in graph --- doc/graphviz/lammps-invoke-python.dot | 2 +- doc/src/JPG/lammps-invoke-python.png | Bin 37367 -> 37244 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/graphviz/lammps-invoke-python.dot b/doc/graphviz/lammps-invoke-python.dot index 4fcbc9e482..f880eecfd7 100644 --- a/doc/graphviz/lammps-invoke-python.dot +++ b/doc/graphviz/lammps-invoke-python.dot @@ -10,7 +10,7 @@ digraph api { capi [shape=box style=filled height=1 color="#666666" fontcolor=white label="LAMMPS\nC Library API"]; instance [shape=box style=filled height=1 color="#3465a4" fontcolor=white label="LAMMPS\ninstance\n\n0x01abcdef"]; capi -> instance [dir=both]; - label="LAMMPS Shared Library"; + label="LAMMPS Shared Library\nor LAMMPS Executable"; } python [shape=box style=filled color="#4e9a06" fontcolor=white label="Python\nScript" height=1.5]; subgraph cluster1 { diff --git a/doc/src/JPG/lammps-invoke-python.png b/doc/src/JPG/lammps-invoke-python.png index bb629ae1da7db83a4acbeb57ea0bc92abd8e417c..d1e25f52ea1fd7944391009f31fe4b176e4812c4 100644 GIT binary patch literal 37244 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 From b5db29bae41841d049aba855828381fc3cd02f77 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 5 Oct 2020 21:51:30 -0400 Subject: [PATCH 134/182] revise python in LAMMPS docs --- doc/src/Python_head.rst | 43 ++++++++------- doc/src/Python_install.rst | 32 +++++++----- doc/src/Python_overview.rst | 101 +++++++++++++++++++++--------------- doc/src/Python_run.rst | 2 +- doc/src/Python_usage.rst | 2 +- 5 files changed, 105 insertions(+), 75 deletions(-) diff --git a/doc/src/Python_head.rst b/doc/src/Python_head.rst index e78e727a10..99d005dd97 100644 --- a/doc/src/Python_head.rst +++ b/doc/src/Python_head.rst @@ -1,8 +1,8 @@ Use Python with LAMMPS ********************** -These doc pages describe various ways that LAMMPS and Python can be -used together. +These pages describe various ways that LAMMPS and Python can be used +together. .. toctree:: :maxdepth: 1 @@ -20,26 +20,31 @@ used together. Python_ext Python_trouble -If you're not familiar with `Python `_, it's a -powerful scripting and programming language which can do most -everything that lower-level languages like C or C++ can do in fewer -lines of code. The only drawback is slower execution speed. Python -is also easy to use as a "glue" language to drive a program through -its library interface, or to hook multiple pieces of software -together, such as a simulation code plus a visualization tool, or to -run a coupled multiscale or multiphysics model. +If you are not familiar with `Python `_, it is a +powerful scripting and programming language which can do almost +everything that compiled languages like C, C++, or Fortran can do in +fewer lines of code. It also comes with a large collection of add-on +modules for many purposes (either bundled or easily installed from +Python code repositories). The major drawback is slower execution speed +of the script code compared to compiled programming languages. But when +the script code is interfaced to optimized compiled code, performance can +be on par with a standalone executable, for as long as the scripting is +restricted to high-level operations. Thus Python is also convenient to +use as a "glue" language to "drive" a program through its library +interface, or to hook multiple pieces of software together, such as a +simulation code and a visualization tool, or to run a coupled +multi-scale or multi-physics model. -See the :doc:`Howto_couple ` doc page for more ideas about -coupling LAMMPS to other codes. See the :doc:`Howto library ` doc page for a description of the LAMMPS -library interface provided in src/library.h and src/library.h. That -interface is exposed to Python either when calling LAMMPS from Python -or when calling Python from a LAMMPS input script and then calling -back to LAMMPS from Python code. The library interface is designed to -be easy to add functionality to. Thus the Python interface to LAMMPS -is also easy to extend as well. +See the :doc:`Howto_couple` page for more ideas about coupling LAMMPS +to other codes. See the :doc:`Library` page for a description of the +LAMMPS library interfaces. That interface is exposed to Python either +when calling LAMMPS from Python or when calling Python from a LAMMPS +input script and then calling back to LAMMPS from Python code. The +C-library interface is designed to be easy to add functionality to, +thus the Python interface to LAMMPS is easy to extend as well. If you create interesting Python scripts that run LAMMPS or interesting Python functions that can be called from a LAMMPS input script, that you think would be generally useful, please post them as a pull request to our `GitHub site `_, -and they can be added to the LAMMPS distribution or webpage. +and they can be added to the LAMMPS distribution or web page. diff --git a/doc/src/Python_install.rst b/doc/src/Python_install.rst index ce0bfec346..5c244e6c16 100644 --- a/doc/src/Python_install.rst +++ b/doc/src/Python_install.rst @@ -3,13 +3,15 @@ Installation The LAMMPS Python module enables calling the :ref:`LAMMPS C library API ` from Python by dynamically loading functions in the LAMMPS shared library through the -Python ``ctypes`` module. Because of the dynamic loading, it is required that -LAMMPS is compiled in *shared mode*. +Python ``ctypes`` module. Because of the dynamic loading, it is required that +LAMMPS is compiled in :ref:`"shared" mode `. It is also recommended +to compile LAMMPS with :ref:`C++ exceptions ` enabled. Two files are necessary for Python to be able to invoke LAMMPS code: -* LAMMPS Python Module (``python/lammps.py``) -* LAMMPS Shared Library (e.g., ``liblammps.so``) +* The LAMMPS Python Module (``lammps.py``) from the ``python`` folder +* The LAMMPS Shared Library (``liblammps.so``, ``liblammps.dylib`` or ``liblammps.dll``) + from the folder where you compiled LAMMPS. .. _python_virtualenv: https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment @@ -24,7 +26,7 @@ Installing the LAMMPS Python Module and Shared Library Making LAMMPS usable within Python and vice versa requires putting the LAMMPS Python module into a location that the Python interpreter can find and installing the LAMMPS shared library into a folder that the dynamic loader -searches. For some potentials LAMMPS also needs to know where it can find the +searches. For some potentials LAMMPS also needs to know where it can find the necessary potential files. Both CMake and traditional make build options offer ways to automate these tasks. @@ -225,13 +227,17 @@ Both CMake and traditional make build options offer ways to automate these tasks LAMMPS and its Python module can be installed together into a Python virtual environment. - A virtual environment is a minimalistic Python installation inside of a - folder. It allows isolating and customizing a Python environment that is - independent from a user or system installation. This gives you the flexibility - to install (newer) versions of Python packages that would potentially conflict - with already installed system packages. It also does not requite any superuser - privileges. See `PEP 405: Python Virtual Environments `_ - for more information. + A virtual environment is a minimal Python installation inside of a + folder. It allows isolating and customizing a Python environment + that is mostly independent from a user or system installation. + For the core Python environment, it uses symbolic links to the + system installation and thus it can be set up quickly and will not + take up much disk space. This gives you the flexibility to + install (newer/different) versions of Python packages that would + potentially conflict with already installed system packages. It + also does not requite any superuser privileges. See `PEP 405: + Python Virtual Environments `_ for more + information. To install into the virtual environment, it is first activated and the ``CMAKE_INSTALL_PREFIX`` is set to value of the ``$VIRTUAL_ENV`` environment @@ -266,7 +272,7 @@ Both CMake and traditional make build options offer ways to automate these tasks 2. Modify the ``$HOME/myenv/bin/activate`` script - The ``activate`` script initializes the environment for use. For convienience, + The ``activate`` script initializes the environment for use. For convenience, add two additional lines at the end of this script: * To allow the dynamic library loader to find the LAMMPS shared library, add diff --git a/doc/src/Python_overview.rst b/doc/src/Python_overview.rst index e9aba544f9..cbc656b602 100644 --- a/doc/src/Python_overview.rst +++ b/doc/src/Python_overview.rst @@ -1,42 +1,60 @@ Overview ======== -The LAMMPS distribution includes a python directory with all you need -to run LAMMPS from Python. The python/lammps.py file wraps the LAMMPS -library interface, with one wrapper function per LAMMPS library -function. This file makes it is possible to do the following either -from a Python script, or interactively from a Python prompt: create -one or more instances of LAMMPS, invoke LAMMPS commands or give it an -input script, run LAMMPS incrementally, extract LAMMPS results, an -modify internal LAMMPS variables. From a Python script you can do -this in serial or parallel. Running Python interactively in parallel -does not generally work, unless you have a version of Python that -extends Python to enable multiple instances of Python to read what you -type. +The LAMMPS distribution includes a python directory with all you need to +run LAMMPS from Python. The ``python/lammps.py`` contains :doc:`the +"lammps" Python ` that wraps the LAMMPS C-library +interface. This file makes it is possible to do the following either +from a Python script, or interactively from a Python prompt: -To do all of this, you must first build LAMMPS as a shared library, -then insure that your Python can find the python/lammps.py file and -the shared library. +- create one or more instances of LAMMPS +- invoke LAMMPS commands or read them from an input script +- run LAMMPS incrementally +- extract LAMMPS results +- and modify internal LAMMPS data structures. + +From a Python script you can do this in serial or parallel. Running +Python interactively in parallel does not generally work, unless you +have a version of Python that extends Python to enable multiple +instances of Python to read what you type. + +To do all of this, you must build LAMMPS in :ref:`"shared" mode ` +and make certain that your Python interpreter can find the ``lammps.py`` +file and the LAMMPS shared library file. + +.. _ctypes: https://docs.python.org/3/library/ctypes.html + +The Python wrapper for LAMMPS uses the `ctypes `_ package in +Python, which auto-generates the interface code needed between Python +and a set of C-style library functions. Ctypes has been part of the +standard Python distribution since version 2.5. You can check which +version of Python you have by simply typing "python" at a shell prompt. +Below is an example output for Python version 3.8.5. + +.. code-block:: + + $ python + Python 3.8.5 (default, Aug 12 2020, 00:00:00) + [GCC 10.2.1 20200723 (Red Hat 10.2.1-1)] on linux + Type "help", "copyright", "credits" or "license" for more information. + >>> -The Python wrapper for LAMMPS uses the "ctypes" package in Python, -which auto-generates the interface code needed between Python and a -set of C-style library functions. Ctypes is part of standard Python -for versions 2.5 and later. You can check which version of Python you -have by simply typing "python" at a shell prompt. .. warning:: Python 2 support is deprecated - While the LAMMPS Python module was originally developed to support both - Python 2 and 3, Python 2 is no longer maintained as of `January 1, 2020 `_. - Therefore, we will no longer backport any new features to Python 2 and - highly recommend using Python versions 3.6+. + While the LAMMPS Python module was originally developed to support + both, Python 2 and 3, any new code is only tested with Python 3. + Please note that Python 2 is no longer maintained as of `January 1, + 2020 `_. Therefore, we + highly recommend using Python version 3.6 or later. Compatibility to + Python 2 will be removed eventually. --------- LAMMPS can work together with Python in three ways. First, Python can -wrap LAMMPS through the its :doc:`library interface `, so +wrap LAMMPS through the its :doc:`library interface `, so that a Python script can create one or more instances of LAMMPS and -launch one or more simulations. In Python lingo, this is called +launch one or more simulations. In Python terms, this is referred to as "extending" Python with a LAMMPS module. .. figure:: JPG/python-invoke-lammps.png @@ -45,27 +63,28 @@ launch one or more simulations. In Python lingo, this is called Launching LAMMPS via Python -Second, the lower-level Python interface can be used indirectly through -the provided :code:`PyLammps` and :code:`IPyLammps` wrapper classes, written in Python. -These wrappers try to simplify the usage of LAMMPS in Python by -providing an object-based interface to common LAMMPS functionality. -They also reduces the amount of code necessary to parameterize LAMMPS -scripts through Python and make variables and computes directly -accessible. +Second, the lower-level Python interface in the :py:class:`lammps Python +class ` can be used indirectly through the provided +:py:class:`PyLammps ` and :py:class:`IPyLammps +` wrapper classes, also written in Python. These +wrappers try to simplify the usage of LAMMPS in Python by providing a +more object-based interface to common LAMMPS functionality. They also +reduce the amount of code necessary to parameterize LAMMPS scripts +through Python and make variables and computes directly accessible. .. figure:: JPG/pylammps-invoke-lammps.png :figclass: align-center Using the PyLammps / IPyLammps wrappers -Third, LAMMPS can use the Python interpreter, so that a LAMMPS -input script or styles can invoke Python code directly, and pass -information back-and-forth between the input script and Python -functions you write. This Python code can also callback to LAMMPS -to query or change its attributes through the LAMMPS Python module -mentioned above. In Python lingo, this is "embedding" Python in -LAMMPS. When used in this mode, Python can perform script operations -that the simple LAMMPS input script syntax can not. +Third, LAMMPS can use the Python interpreter, so that a LAMMPS input +script or styles can invoke Python code directly, and pass information +back-and-forth between the input script and Python functions you write. +This Python code can also call back to LAMMPS to query or change its +attributes through the LAMMPS Python module mentioned above. In Python +terms, this is called "embedding" Python into LAMMPS. When used in this +mode, Python can perform script operations that the simple LAMMPS input +script syntax can not. .. figure:: JPG/lammps-invoke-python.png :figclass: align-center diff --git a/doc/src/Python_run.rst b/doc/src/Python_run.rst index 726705e30e..1f91dfadd7 100644 --- a/doc/src/Python_run.rst +++ b/doc/src/Python_run.rst @@ -68,7 +68,7 @@ Note that without the mpi4py specific lines from ``test.py`` running the script with ``mpirun`` on :math:`P` processors would lead to :math:`P` independent simulations to run parallel, each with a single processor. Therefore, if you use the mpi4py lines and you see multiple LAMMPS -single processor outputs. that means mpi4py isn't working correctly. +single processor outputs, mpi4py is not working correctly. Also note that once you import the mpi4py module, mpi4py initializes MPI for you, and you can use MPI calls directly in your Python script, as diff --git a/doc/src/Python_usage.rst b/doc/src/Python_usage.rst index 7c23980015..777f226e68 100644 --- a/doc/src/Python_usage.rst +++ b/doc/src/Python_usage.rst @@ -446,7 +446,7 @@ computes, fixes, or variables in LAMMPS using the :py:mod:`lammps` module. :py:meth:`lammps.numpy.extract_compute() `, :py:meth:`lammps.numpy.extract_fix() `, and :py:meth:`lammps.numpy.extract_variable() ` are - equivlanent NumPy implementations that return NumPy arrays instead of ``ctypes`` pointers. + equivalent NumPy implementations that return NumPy arrays instead of ``ctypes`` pointers. The :py:meth:`lammps.set_variable() ` method sets an existing string-style variable to a new string value, so that subsequent LAMMPS From 5d08f629abbb28684684c04bcf58f2c55671d079 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Oct 2020 05:30:09 -0400 Subject: [PATCH 135/182] fix typo --- doc/src/Install_patch.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Install_patch.rst b/doc/src/Install_patch.rst index 0bbd7bbf00..3ccb9fef03 100644 --- a/doc/src/Install_patch.rst +++ b/doc/src/Install_patch.rst @@ -10,7 +10,7 @@ If you prefer to download a tarball, as described on the :doc:`tarball download ` page, you can stay current by downloading "patch files" when new patch releases are made. A link to a patch file is posted on the -`bugf fixes and new feature page `_ +`bug fixes and new feature page `_ of the LAMMPS website, along with a list of changed files and details about what is in the new patch release. This page explains how to apply the patch file to your local From 18023ad9dc0dfa68b82fe0790f4d7785122e1ac3 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Tue, 6 Oct 2020 10:39:14 -0400 Subject: [PATCH 136/182] Update fix_wall_gran_region.cpp Don't store atom tag, just if there is a contact. Fixes #2306 --- src/GRANULAR/fix_wall_gran_region.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GRANULAR/fix_wall_gran_region.cpp b/src/GRANULAR/fix_wall_gran_region.cpp index f91bac2c9b..d795d1bc37 100644 --- a/src/GRANULAR/fix_wall_gran_region.cpp +++ b/src/GRANULAR/fix_wall_gran_region.cpp @@ -250,7 +250,7 @@ void FixWallGranRegion::post_force(int /*vflag*/) // store contact info if (peratom_flag) { - array_atom[i][0] = (double)atom->tag[i]; + array_atom[i][0] = 1.0; array_atom[i][4] = x[i][0] - dx; array_atom[i][5] = x[i][1] - dy; array_atom[i][6] = x[i][2] - dz; From 7dd244a828ebd6d0e2e78c7b15613253a57a20a4 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Tue, 6 Oct 2020 10:45:23 -0400 Subject: [PATCH 137/182] Correct fix wall/gran and wall/gran/region docs --- doc/src/fix_wall_gran.rst | 6 +++--- doc/src/fix_wall_gran_region.rst | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/src/fix_wall_gran.rst b/doc/src/fix_wall_gran.rst index 4ebbf35ba1..bc59fd71a7 100644 --- a/doc/src/fix_wall_gran.rst +++ b/doc/src/fix_wall_gran.rst @@ -205,11 +205,11 @@ the following table: +-------+----------------------------------------------------+----------------+ | 4 | Force :math:`f_z` exerted on the wall | force units | +-------+----------------------------------------------------+----------------+ -| 5 | :math:`\Delta x` between wall surface and particle | distance units | +| 5 | :math:`x`-coordinate of contact point on wall | distance units | +-------+----------------------------------------------------+----------------+ -| 6 | :math:`\Delta y` between wall surface and particle | distance units | +| 6 | :math:`y`-coordinate of contact point on wall | distance units | +-------+----------------------------------------------------+----------------+ -| 7 | :math:`\Delta z` between wall surface and particle | distance units | +| 7 | :math:`z`-coordinate of contact point on wall | distance units | +-------+----------------------------------------------------+----------------+ | 8 | Radius :math:`r` of atom | distance units | +-------+----------------------------------------------------+----------------+ diff --git a/doc/src/fix_wall_gran_region.rst b/doc/src/fix_wall_gran_region.rst index 7d62d71a1d..bedf1165c1 100644 --- a/doc/src/fix_wall_gran_region.rst +++ b/doc/src/fix_wall_gran_region.rst @@ -246,11 +246,11 @@ the following table: +-------+----------------------------------------------------+----------------+ | 4 | Force :math:`f_z` exerted on the wall | force units | +-------+----------------------------------------------------+----------------+ -| 5 | :math:`\Delta x` between wall surface and particle | distance units | +| 5 | :math:`x`-coordinate of contact point on wall | distance units | +-------+----------------------------------------------------+----------------+ -| 6 | :math:`\Delta y` between wall surface and particle | distance units | +| 6 | :math:`y`-coordinate of contact point on wall | distance units | +-------+----------------------------------------------------+----------------+ -| 7 | :math:`\Delta z` between wall surface and particle | distance units | +| 7 | :math:`z`-coordinate of contact point on wall | distance units | +-------+----------------------------------------------------+----------------+ | 8 | Radius :math:`r` of atom | distance units | +-------+----------------------------------------------------+----------------+ From 1afd9b1c83a1ee15be5170c392fb8090736484e1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Oct 2020 12:15:56 -0400 Subject: [PATCH 138/182] update Python installation docs --- doc/src/Python_install.rst | 678 +++++++++----------- doc/utils/sphinx-config/false_positives.txt | 1 + 2 files changed, 308 insertions(+), 371 deletions(-) diff --git a/doc/src/Python_install.rst b/doc/src/Python_install.rst index 5c244e6c16..234a98ca0c 100644 --- a/doc/src/Python_install.rst +++ b/doc/src/Python_install.rst @@ -1,21 +1,22 @@ Installation ************ -The LAMMPS Python module enables calling the :ref:`LAMMPS C library API ` -from Python by dynamically loading functions in the LAMMPS shared library through the -Python ``ctypes`` module. Because of the dynamic loading, it is required that -LAMMPS is compiled in :ref:`"shared" mode `. It is also recommended -to compile LAMMPS with :ref:`C++ exceptions ` enabled. +The LAMMPS Python module enables calling the :ref:`LAMMPS C library API +` from Python by dynamically loading functions in the +LAMMPS shared library through the Python `ctypes `_ +module. Because of the dynamic loading, it is required that LAMMPS is +compiled in :ref:`"shared" mode `. It is also recommended to +compile LAMMPS with :ref:`C++ exceptions ` enabled. Two files are necessary for Python to be able to invoke LAMMPS code: * The LAMMPS Python Module (``lammps.py``) from the ``python`` folder -* The LAMMPS Shared Library (``liblammps.so``, ``liblammps.dylib`` or ``liblammps.dll``) - from the folder where you compiled LAMMPS. - +* The LAMMPS Shared Library (``liblammps.so``, ``liblammps.dylib`` or + ``liblammps.dll``) from the folder where you compiled LAMMPS. +.. _ctypes: https://docs.python.org/3/library/ctypes.html .. _python_virtualenv: https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/#creating-a-virtual-environment -.. _python_venv: https://docs.python.org/3.8/library/venv.html +.. _python_venv: https://docs.python.org/3/library/venv.html .. _python_pep405: https://www.python.org/dev/peps/pep-0405 .. _python_install_guides: @@ -23,27 +24,60 @@ Two files are necessary for Python to be able to invoke LAMMPS code: Installing the LAMMPS Python Module and Shared Library ====================================================== -Making LAMMPS usable within Python and vice versa requires putting the LAMMPS -Python module into a location that the Python interpreter can find and -installing the LAMMPS shared library into a folder that the dynamic loader -searches. For some potentials LAMMPS also needs to know where it can find the -necessary potential files. +Making LAMMPS usable within Python and vice versa requires putting the +LAMMPS Python module file (``lammps.py``) into a location where the +Python interpreter can find it and installing the LAMMPS shared library +into a folder that the dynamic loader searches or into the same folder +where the ``lammps.py`` file is. There are multiple ways to achieve +this. -Both CMake and traditional make build options offer ways to automate these tasks. +#. Install both files into a Python ``site-packages`` folder, either + system-wide or in the corresponding user-specific folder. This way no + additional environment variables need to be set, but the shared + library is otherwise not accessible. + +#. Do a full LAMMPS installation of libraries, executables, selected + headers, documentation (if enabled), and supporting files (only + available via CMake), which can also be either system-wide or into + user specific folders. + +#. Do an installation into a virtual environment. This can either be + an installation of the python module only or a full installation. + +#. Leave the files where they are in the source/development tree and + adjust some environment variables. .. tabs:: - .. tab:: CMake (local user) + .. tab:: Full install (CMake-only) - LAMMPS can be configured and compiled as shared library with CMake by enabling the ``BUILD_SHARED_LIBS`` option. - The file name of the shared library depends on the platform (Unix/Linux, MacOS, Windows) and the build configuration - being used. See :ref:`Build the LAMMPS executable and library ` for more details and how the name of the - shared library and executable is determined. + :ref:`Build the LAMMPS executable and library ` with + ``-DBUILD_SHARED_LIBS=on``, ``-DLAMMPS_EXCEPTIONS=on`` and + ``-DPKG_PYTHON=on`` (The first option is required, the other two + are optional by recommended). The exact file name of the shared + library depends on the platform (Unix/Linux, MacOS, Windows) and + the build configuration being used. The installation base folder + is already set by default to the ``$HOME/.local`` directory, but + it can be changed to a custom location defined by the + ``CMAKE_INSTALL_PREFIX`` CMake variable. This uses a folder + called ``build`` to store files generated during compilation. + Make certain this folder is empty or does not exist if you do not + want to inherit any settings from a previous compilation attempt. - After compilation, the generated executables, shared library, Python module, - and other files can be installed to a custom location defined by the - ``CMAKE_INSTALL_PREFIX`` setting. By default, this is set to the current - user's ``$HOME/.local`` directory. This leads to an installation to the following locations: + .. code-block:: bash + + # configure LAMMPS compilation + cmake -B build -C cmake/presets/minimal.cmake \ + -D BUILD_SHARED_LIBS=on -D LAMMPS_EXCEPTIONS=on -D PKG_PYTHON=on cmake + + # compile LAMMPS + cmake --build build + + # install LAMMPS into $HOME/.local + cmake --install build + + + This leads to an installation to the following locations: +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ | File | Location | Notes | @@ -54,96 +88,17 @@ Both CMake and traditional make build options offer ways to automate these tasks | LAMMPS shared library | * ``$HOME/.local/lib/`` (32bit) | | | | * ``$HOME/.local/lib64/`` (64bit) | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ - | LAMMPS executable | ``$HOME/.local/bin/`` | | + | LAMMPS executable | * ``$HOME/.local/bin/`` | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ - | LAMMPS potential files | ``$HOME/.local/share/lammps/potentials/`` | | + | LAMMPS potential files | * ``$HOME/.local/share/lammps/potentials/`` | Set ``LAMMPS_POTENTIALS`` environment variable to this path | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ - The following is a minimal working example: - - 1. Install LAMMPS Shared Library and Python module using CMake - - .. code-block:: bash - - # create and change into build directory - mkdir build - cd build - - # configure LAMMPS compilation - # compile with shared library, PYTHON package, and C++ exceptions - # TODO: add more options to customize your LAMMPS installation - cmake -C ../cmake/presets/minimal.cmake \ - -D BUILD_SHARED_LIBS=on \ - -D PKG_PYTHON=on \ - -D LAMMPS_EXCEPTIONS=on \ - ../cmake - - # compile LAMMPS (in parallel for faster builds) - cmake --build . --parallel - - # install LAMMPS into $HOME/.local - cmake --install . - - 2. Configure Environment Variables - - To use this installation you have to ensure that the folder containing - the LAMMPS shared library is part of the ``LD_LIBRARY_PATH`` environment variable (or - ``DYLD_LIBRARY_PATH`` on MacOS). This allows the dynamic library loader of your system - to find the LAMMPS shared library when needed. - - .. code-block:: bash - - # Unix/Linux - export LD_LIBRARY_PATH=$HOME/.local/lib:$LD_LIBRARY_PATH - - # MacOS - export DYLD_LIBRARY_PATH=$HOME/.local/lib:$DYLD_LIBRARY_PATH - - - LAMMPS will also need to know the location of the folder - containing its potential files. This can be set with the ``LAMMPS_POTENTIALS`` - environment variable: - - .. code-block:: bash - - export LAMMPS_POTENTIALS=$HOME/.local/share/lammps/potentials - - If you are planning to also use the LAMMPS executable (e.g., ``lmp``), also set the ``PATH`` variable: - - .. code-block:: bash - - export PATH=$HOME/.local/bin:$PATH - - To set these environment variables for each new shell, add the above - ``export`` commands at the end of the ``$HOME/.bashrc`` file. - - 3. Verify if LAMMPS can be successfully started from Python - - .. code-block:: bash - - $ python - Python 3.8.5 (default, Sep 5 2020, 10:50:12) - [GCC 10.2.0] on linux - Type "help", "copyright", "credits" or "license" for more information. - >>> import lammps - >>> lmp = lammps.lammps() - LAMMPS (18 Sep 2020) - using 1 OpenMP thread(s) per MPI task - >>> - - .. note:: - - If you recompile LAMMPS, you will have to also rerun the install step to - ensure the latest Python module and shared library are installed. - - .. tab:: CMake (system-wide) - - A system-wide installation allows all users to run Python with LAMMPS - included. Note that during the installation step you will need to either be - root or use ``sudo`` to elevate your write privileges. The compilation steps are identical - to the local user installation, with the only difference that - ``CMAKE_INSTALL_PREFIX`` is set to system folder such as ``/usr``. This leads to - the following installation locations: + For a system-wide installation you need to set + ``CMAKE_INSTALL_PREFIX`` to a system folder like ``/usr`` (or + ``/usr/local``). The installation step (**not** the + configuration/compilation) needs to be done with superuser + privilege, e.g. by using ``sudo cmake --install build``. The + installation folders will then by changed to: +------------------------+---------------------------------------------------+-------------------------------------------------------------+ | File | Location | Notes | @@ -154,260 +109,88 @@ Both CMake and traditional make build options offer ways to automate these tasks | LAMMPS shared library | * ``/usr/lib/`` (32bit) | | | | * ``/usr/lib64/`` (64bit) | | +------------------------+---------------------------------------------------+-------------------------------------------------------------+ - | LAMMPS executable | ``/usr/bin/`` | | + | LAMMPS executable | * ``/usr/bin/`` | | +------------------------+---------------------------------------------------+-------------------------------------------------------------+ - | LAMMPS potential files | ``/usr/share/lammps/potentials/`` | | + | LAMMPS potential files | * ``/usr/share/lammps/potentials/`` | | +------------------------+---------------------------------------------------+-------------------------------------------------------------+ - The following is a minimal working example: + To be able to use the "user" installation you have to ensure that + the folder containing the LAMMPS shared library is either included + in a path searched by the shared linker (e.g. like + ``/usr/lib64/``) or part of the ``LD_LIBRARY_PATH`` environment + variable (or ``DYLD_LIBRARY_PATH`` on MacOS). Otherwise you will + get an error when trying to create a LAMMPS object through the + Python module. - 1. Install LAMMPS shared library and Python module into system folder + .. code-block:: bash - .. code-block:: bash + # Unix/Linux + export LD_LIBRARY_PATH=$HOME/.local/lib:$LD_LIBRARY_PATH - # configure LAMMPS compilation - # compile with shared library, PYTHON package, and C++ exceptions - # TODO: add more options to customize your LAMMPS installation - cmake -C ../cmake/presets/minimal.cmake \ - -D BUILD_SHARED_LIBS=on \ - -D PKG_PYTHON=on \ - -D LAMMPS_EXCEPTIONS=on \ - -D CMAKE_INSTALL_PREFIX=/usr \ - ../cmake + # MacOS + export DYLD_LIBRARY_PATH=$HOME/.local/lib:$DYLD_LIBRARY_PATH - # compile LAMMPS (in parallel for faster builds) - cmake --build . --parallel + If you plan to use the LAMMPS executable (e.g., ``lmp``), you may + also need to adjust the ``PATH`` environment variable (but many + newer Linux distributions already have ``$HOME/.local/bin`` + included). Example: - # install LAMMPS into /usr (requires write access) - sudo cmake --install . + .. code-block:: bash - Unlike the local user installation, no additional environment - variables need to be set. The system locations such as ``/usr/lib``, and - ``/usr/lib64`` are already part of the search path of the dynamic library - loader. Therefore ``LD_LIBRARY_PATH`` (or ``DYLD_LIBRARY_PATH`` on MacOS) does not - have be set. The same is true for ``PATH``. + export PATH=$HOME/.local/bin:$PATH - All other environment variables will be automatically set when - launching a new shell. This is due to files installed in system folders - ``/etc/profile.d/``, such as ``/etc/profile.d/lammps.sh``, that are loaded when a - login shell is started. + To make those changes permanent, you can add the commands to your + ``$HOME/.bashrc`` file. For a system-wide installation is is not + necessary due to files installed in system folders that are loaded + automatically when a login shell is started. - 2. Open a new shell + .. tab:: Python module only - Close the current shell and open a new one or use ``source /etc/profile`` to - update your environment + Compile LAMMPS with either :doc:`CMake ` or the + :doc:`traditional make ` procedure in :ref:`shared + mode `. After compilation has finished type (in the + compilation folder): - .. note:: + .. code-block:: bash - On some systems you might also need to log out your current user and log back in. + make install-python - 3. Verify if LAMMPS can be successfully started from Python - - Open a new terminal and test if LAMMPS can be started from within Python: - - .. code-block:: bash - - $ python - Python 3.8.5 (default, Sep 5 2020, 10:50:12) - [GCC 10.2.0] on linux - Type "help", "copyright", "credits" or "license" for more information. - >>> import lammps - >>> lmp = lammps.lammps() - LAMMPS (18 Sep 2020) - using 1 OpenMP thread(s) per MPI task - >>> - - .. note:: - - If you recompile LAMMPS, you will have to also rerun the install step to - ensure the latest Python module and shared library are installed. - - .. tab:: CMake (virtual environment) - - LAMMPS and its Python module can be installed together into a - Python virtual environment. - - A virtual environment is a minimal Python installation inside of a - folder. It allows isolating and customizing a Python environment - that is mostly independent from a user or system installation. - For the core Python environment, it uses symbolic links to the - system installation and thus it can be set up quickly and will not - take up much disk space. This gives you the flexibility to - install (newer/different) versions of Python packages that would - potentially conflict with already installed system packages. It - also does not requite any superuser privileges. See `PEP 405: - Python Virtual Environments `_ for more - information. - - To install into the virtual environment, it is first activated and the - ``CMAKE_INSTALL_PREFIX`` is set to value of the ``$VIRTUAL_ENV`` environment - variable. This leads to the following installation locations: + This will try to install (only) the shared library and the python + module into a system folder and if that fails (due to missing + write permissions) will instead do the installation to a user + folder under ``$HOME/.local``. For a system-wide installation you + would have to gain superuser privilege, e.g. though ``sudo`` +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ | File | Location | Notes | +========================+===========================================================+=============================================================+ - | LAMMPS Python Module | * ``$VIRTUAL_ENV/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | - | | * ``$VIRTUAL_ENV/lib64/pythonX.Y/site-packages/`` (64bit) | | + | LAMMPS Python Module | * ``$HOME/.local/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``$HOME/.local/lib64/pythonX.Y/site-packages/`` (64bit) | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ - | LAMMPS shared library | * ``$VIRTUAL_ENV/lib/`` (32bit) | | - | | * ``$VIRTUAL_ENV/lib64/`` (64bit) | | - +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ - | LAMMPS executable | ``$VIRTUAL_ENV/bin/`` | | - +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ - | LAMMPS potential files | ``$VIRTUAL_ENV/share/lammps/potentials/`` | | + | LAMMPS shared library | * ``$HOME/.local/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``$HOME/.local/lib64/pythonX.Y/site-packages/`` (64bit) | | +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ - The following is a minimal working example using CMake: + For a system-wide installation those folders would then become. - 1. Create a virtual environment + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ + | File | Location | Notes | + +========================+===================================================+=============================================================+ + | LAMMPS Python Module | * ``/usr/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``/usr/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS shared library | * ``/usr/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``/usr/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+---------------------------------------------------+-------------------------------------------------------------+ - Use the `venv `_ module to create a new environment - inside of the folder ``$HOME/myenv``. For Python versions prior 3.3, - you can use `virtualenv `_ instead. + No environment variables need to be set for those, as those + folders are searched by default by Python or the LAMMPS Python + module. - .. code-block:: bash - - # create virtual environment in folder $HOME/myenv - python3 -m venv $HOME/myenv - - 2. Modify the ``$HOME/myenv/bin/activate`` script - - The ``activate`` script initializes the environment for use. For convenience, - add two additional lines at the end of this script: - - * To allow the dynamic library loader to find the LAMMPS shared library, add - the folder where it will be installed to ``LD_LIBRARY_PATH`` environment - variable (``DYLD_LIBRARY_PATH`` on MacOS). When installing LAMMPS into a - virtual environment this location will be ``$VIRTUAL_ENV/lib``. - Run the following command to add the necessary line to the ``activate`` script: - - .. code-block:: bash - - # Unix/Linux - echo 'export LD_LIBRARY_PATH=$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH' >> $HOME/myenv/bin/activate - - # MacOS - echo 'export DYLD_LIBRARY_PATH=$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH' >> $HOME/myenv/bin/activate - - * Any LAMMPS installation will need to know the location of the folder containing its potential files. - This can be set with the ``LAMMPS_POTENTIALS`` environment variable. When installing LAMMPS into a - virtual environment this location will be ``$VIRTUAL_ENV/share/lammps/potentials``. - Run the following command to add the change in the ``activate`` script: - - .. code-block:: bash - - echo 'export LAMMPS_POTENTIALS=$VIRTUAL_ENV/share/lammps/potentials' >> $HOME/myenv/bin/activate - - 3. Compile LAMMPS and install it into virtual environment - - .. code-block:: bash - - # create and change into build directory - mkdir build - cd build - - # activate environment, this sets VIRTUAL_ENV and other environment variables - source $HOME/myenv/bin/activate - - # configure LAMMPS compilation - # compile with shared library, PYTHON package, and C++ exceptions - # and install into virtual environment folder (VIRTUAL_ENV) - # TODO: add more options to customize your LAMMPS installation - (myenv)$ cmake -C ../cmake/presets/minimal.cmake \ - -D BUILD_SHARED_LIBS=on \ - -D PKG_PYTHON=on \ - -D LAMMPS_EXCEPTIONS=on \ - -D CMAKE_INSTALL_PREFIX=$VIRTUAL_ENV \ - ../cmake - - # compile LAMMPS (in parallel for faster builds) - (myenv)$ cmake --build . --parallel - - # install LAMMPS into myenv - (myenv)$ cmake --install . - - 4. Verify if LAMMPS can be successfully started from Python - - .. code-block:: bash - - (myenv)$ python - Python 3.8.5 (default, Sep 5 2020, 10:50:12) - [GCC 10.2.0] on linux - Type "help", "copyright", "credits" or "license" for more information. - >>> import lammps - >>> lmp = lammps.lammps() - LAMMPS (18 Sep 2020) - using 1 OpenMP thread(s) per MPI task - >>> - - .. note:: - - If you recompile LAMMPS, you will have to also rerun the install step to - ensure the virtual environment contains the latest Python module and shared - library. - - - .. tab:: Traditional make - - Instructions on how to build LAMMPS as a shared library are given on - the :doc:`Build_basics ` doc page. A shared library is - one that is dynamically loadable, which is what Python requires to - wrap LAMMPS. On Linux this is a library file that ends in ``.so``, not - ``.a``. - - From the ``src`` directory, type - - .. code-block:: bash - - make foo mode=shared - - where ``foo`` is the machine target name, such as ``mpi`` or ``serial``. - This should create the file ``liblammps_foo.so`` in the ``src`` directory, as - well as a soft link ``liblammps.so``, which is what the Python wrapper will - load by default. Note that if you are building multiple machine - versions of the shared library, the soft link is always set to the - most recently built version. - - .. note:: - - If you are building LAMMPS with an MPI or FFT library or other - auxiliary libraries (used by various packages), then all of these - extra libraries must also be shared libraries. If the LAMMPS - shared-library build fails with an error complaining about this, see - the :doc:`Build_basics ` doc page. - - You can achieve that Python can find these files in one of two ways: - - * set two environment variables pointing to the location in the source tree - * run ``make install-python`` or run the ``python/install.py`` script explicitly - - When calling ``make install-python`` LAMMPS will try to install the - python module and the shared library into the python site-packages folders; - either the system-wide ones, or the local users ones (in case of insufficient - permissions for the global install). Python will then find the module - and shared library file automatically. The exact location of these folders - depends on your python version and your operating system. - - You can override the python version to version x.y when calling - ``make`` with ``PYTHON=pythonX.Y``. - - If you set the paths to these files as environment variables, you only - have to do it once. For the csh or tcsh shells, add something like - this to your ``~/.cshrc`` file, one line for each of the two files: - - .. code-block:: csh - - setenv PYTHONPATH ${PYTHONPATH}:/home/sjplimp/lammps/python - setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/sjplimp/lammps/src - - On MacOS you may also need to set ``DYLD_LIBRARY_PATH`` accordingly. - For Bourne/Korn shells accordingly into the corresponding files using - the ``export`` shell builtin. - - If you use ``make install-python`` or the ``python/install.py`` script, you need - to invoke it every time you rebuild LAMMPS (as a shared library) or - make changes to the ``python/lammps.py`` file, so that the site-packages - files are updated with the new version. + For the traditional make process you can override the python + version to version x.y when calling ``make`` with + ``PYTHON=pythonX.Y``. For a CMake based compilation this choice + has to be made during the CMake configuration step. If the default settings of ``make install-python`` are not what you want, you can invoke ``install.py`` from the python directory manually as @@ -423,14 +206,156 @@ Both CMake and traditional make build options offer ways to automate these tasks If you use a legacy installation folder, you will need to set your ``PYTHONPATH`` and ``LD_LIBRARY_PATH`` (and/or ``DYLD_LIBRARY_PATH``) environment - variables accordingly, as described above. + variables accordingly as explained in the description for "In place use". - Note that if you want Python to be able to load different versions of - the LAMMPS shared library (see :ref:`python_create_lammps`), you will - need to manually copy files like ``liblammps_mpi.so`` into the appropriate - system directory. This is not needed if you set the ``LD_LIBRARY_PATH`` - environment variable as described above. + .. tab:: Virtual environment + A virtual environment is a minimal Python installation inside of a + folder. It allows isolating and customizing a Python environment + that is mostly independent from a user or system installation. + For the core Python environment, it uses symbolic links to the + system installation and thus it can be set up quickly and will not + take up much disk space. This gives you the flexibility to + install (newer/different) versions of Python packages that would + potentially conflict with already installed system packages. It + also does not requite any superuser privileges. See `PEP 405: + Python Virtual Environments `_ for more + information. + + To create a virtual environment in the folder ``$HOME/myenv``, + use the `venv `_ module as follows. + + .. code-block:: bash + + # create virtual environment in folder $HOME/myenv + python3 -m venv $HOME/myenv + + For Python versions prior 3.3 you can use `virtualenv + `_ command instead of "python3 -m venv". This + step has to be done only once. + + To activate the virtual environment type: + + .. code-block:: bash + + source $HOME/myenv/bin/activate + + This has to be done every time you log in or open a new terminal + window and after you turn off the virtual environment with the + ``deactivate`` command. + + When using CMake to build LAMMPS, you need to set + ``CMAKE_INSTALL_PREFIX`` to the value of the ``$VIRTUAL_ENV`` + environment variable during the configuration step. For the + traditional make procedure, not additional steps are needed. + After compiling LAMMPS you can do a "Python module only" + installation with ``make install-python`` and the LAMMPS Python + module and the shared library file are installed into the + following locations: + + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | File | Location | Notes | + +========================+===========================================================+=============================================================+ + | LAMMPS Python Module | * ``$VIRTUAL_ENV/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``$VIRTUAL_ENV/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS shared library | * ``$VIRTUAL_ENV/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``$VIRTUAL_ENV/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + + If you do a full installation (CMake only) with "install", this + leads to the following installation locations: + + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | File | Location | Notes | + +========================+===========================================================+=============================================================+ + | LAMMPS Python Module | * ``$VIRTUAL_ENV/lib/pythonX.Y/site-packages/`` (32bit) | ``X.Y`` depends on the installed Python version | + | | * ``$VIRTUAL_ENV/lib64/pythonX.Y/site-packages/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS shared library | * ``$VIRTUAL_ENV/lib/`` (32bit) | | + | | * ``$VIRTUAL_ENV/lib64/`` (64bit) | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS executable | * ``$VIRTUAL_ENV/bin/`` | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + | LAMMPS potential files | * ``$VIRTUAL_ENV/share/lammps/potentials/`` | | + +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ + + In that case you need to modify the ``$HOME/myenv/bin/activate`` + script in a similar fashion you need to update your + ``$HOME/.bashrc`` file to include the shared library and + executable locations in ``LD_LIBRARY_PATH`` (or + ``DYLD_LIBRARY_PATH`` on MacOS) and ``PATH``, respectively. + + For example with: + + .. code-block:: bash + + # Unix/Linux + echo 'export LD_LIBRARY_PATH=$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH' >> $HOME/myenv/bin/activate + + # MacOS + echo 'export DYLD_LIBRARY_PATH=$VIRTUAL_ENV/lib:$LD_LIBRARY_PATH' >> $HOME/myenv/bin/activate + + .. tab:: In place usage + + You can also :doc:`compile LAMMPS ` as usual in + :ref:`"shared" mode ` leave the shared library and Python + module files inside the source/compilation folders. Instead of + copying the files where they can be found, you need to set the environment + variables ``PYTHONPATH`` (for the Python module) and + ``LD_LIBRARY_PATH`` (or ``DYLD_LIBRARY_PATH`` on MacOS + + For Bourne shells (bash, ksh and similar) the commands are: + + .. code-block:: bash + + export PYTHONPATH=${PYTHONPATH}:${HOME}/lammps/python + export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${HOME}/lammps/src + + For the C-shells like csh or tcsh the commands are: + + .. code-block:: csh + + setenv PYTHONPATH ${PYTHONPATH}:${HOME}/lammps/python + setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${HOME}/lammps/src + + On MacOS you may also need to set ``DYLD_LIBRARY_PATH`` accordingly. + You can make those changes permanent by editing your ``$HOME/.bashrc`` + or ``$HOME/.login`` files, respectively. + + +To verify if LAMMPS can be successfully started from Python, start the +Python interpreter, load the ``lammps`` Python module and create a +LAMMPS instance. This should not generate an error message and produce +output similar to the following: + + .. code-block:: bash + + $ python + Python 3.8.5 (default, Sep 5 2020, 10:50:12) + [GCC 10.2.0] on linux + Type "help", "copyright", "credits" or "license" for more information. + >>> import lammps + >>> lmp = lammps.lammps() + LAMMPS (18 Sep 2020) + using 1 OpenMP thread(s) per MPI task + >>> + +.. note:: + + Unless you opted for "In place use", you will have to rerun the installation + any time you recompile LAMMPS to ensure the latest Python module and shared + library are installed and used. + +.. note:: + + If you want Python to be able to load different versions of the + LAMMPS shared library with different settings, you will need to + manually copy the files under different names + (e.g. ``liblammps_mpi.so`` or ``liblammps_gpu.so``) into the + appropriate folder as indicated above. You can then select the + desired library through the *name* argument of the LAMMPS object + constructor (see :ref:`python_create_lammps`). .. _python_install_mpi4py: @@ -451,49 +376,60 @@ and as of version 2.0.0 mpi4py allows passing a custom MPI communicator to the LAMMPS constructor, which means one can easily run one or more LAMMPS instances on subsets of the total MPI ranks. -Install mpi4py via ``pip`` (version 3.0.3 as of Sep 2020): +Installation of mpi4py (version 3.0.3 as of Sep 2020) can be done as +follows: -.. tabs:: +- Via ``pip`` into a local user folder with: - .. tab:: local user + .. code-block:: bash - .. code-block:: bash + pip install --user mpi4py - pip install --user mpi4py +- Via ``dnf`` into a system folder for RedHat/Fedora systems: - .. tab:: system-wide + .. code-block:: bash - .. code-block:: bash + # for use with OpenMPI + sudo dnf install python3-mpi4py-openmpi + # for use with MPICH + sudo dnf install python3-mpi4py-openmpi - sudo pip install mpi4py +- Via ``pip`` into a system folder (not recommended): - .. tab:: virtual environment + .. code-block:: bash - .. code-block:: bash + sudo dnf install mpi4py - $ source $HOME/myenv/activate - (myenv)$ pip install mpi4py +- Via ``pip`` into a virtual environment (see above): + + .. code-block:: bash + + $ source $HOME/myenv/activate + (myenv)$ pip install mpi4py .. _mpi4py_install: https://mpi4py.readthedocs.io/en/stable/install.html -For more detailed installation instructions, please see the `mpi4py installation `_ page. +For more detailed installation instructions and additional options, +please see the `mpi4py installation `_ page. .. note:: - To use mpi4py and LAMMPS in parallel from Python, you must - insure both are using the same version of MPI. If you only have one - MPI installed on your system, this is not an issue, but it can be if - you have multiple MPIs. Your LAMMPS build is explicit about which MPI - it is using, since it is either detected during CMake configuration or - in the traditional make build system you specify the details in your - low-level ``src/MAKE/Makefile.foo`` file. - mpi4py uses the ``mpicc`` command to find - information about the MPI it uses to build against. And it tries to - load "libmpi.so" from the ``LD_LIBRARY_PATH``. This may or may not find + To use ``mpi4py`` and LAMMPS in parallel from Python, you must make + certain that both are using the same implementation and version of an + MPI library. If you only have one MPI library installed on your + system, this is not an issue, but it can be if you have multiple MPI + installations (e.g. on an HPC cluster to be selected through + environment modules). Your LAMMPS build is explicit about which MPI + it is using, since it is either detected during CMake configuration + or in the traditional make build system you specify the details in + your low-level ``src/MAKE/Makefile.foo`` file. The installation + process of ``mpi4py`` uses the ``mpicc`` command to find information + about the MPI it uses to build against. And it tries to load + "libmpi.so" from the ``LD_LIBRARY_PATH``. This may or may not find the MPI library that LAMMPS is using. If you have problems running both mpi4py and LAMMPS together, this is an issue you may need to - address, e.g. by moving other MPI installations so that mpi4py finds - the right one. + address, e.g. by loading the module for different MPI installation so + that mpi4py finds the right one. If you have successfully installed mpi4py, you should be able to run Python and type diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index b276933a88..cabe8182e7 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -3285,6 +3285,7 @@ vectorized Vegt vel Velázquez +venv Verlag verlet Verlet From 2f857176c8f8c59e61052469498bfc73d976e2a9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Oct 2020 13:45:46 -0400 Subject: [PATCH 139/182] stay compatible with cmake older than version 3.14 --- doc/src/Python_install.rst | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/doc/src/Python_install.rst b/doc/src/Python_install.rst index 234a98ca0c..0626c23860 100644 --- a/doc/src/Python_install.rst +++ b/doc/src/Python_install.rst @@ -61,23 +61,25 @@ this. it can be changed to a custom location defined by the ``CMAKE_INSTALL_PREFIX`` CMake variable. This uses a folder called ``build`` to store files generated during compilation. - Make certain this folder is empty or does not exist if you do not - want to inherit any settings from a previous compilation attempt. .. code-block:: bash + # create build folder + mkdir build + cd build + # configure LAMMPS compilation - cmake -B build -C cmake/presets/minimal.cmake \ - -D BUILD_SHARED_LIBS=on -D LAMMPS_EXCEPTIONS=on -D PKG_PYTHON=on cmake + cmake -C cmake/presets/minimal.cmake -D BUILD_SHARED_LIBS=on \ + -D LAMMPS_EXCEPTIONS=on -D PKG_PYTHON=on cmake # compile LAMMPS - cmake --build build + cmake --build . # install LAMMPS into $HOME/.local - cmake --install build + cmake --install . - This leads to an installation to the following locations: + This leads to an installation to the following locations: +------------------------+-----------------------------------------------------------+-------------------------------------------------------------+ | File | Location | Notes | @@ -97,7 +99,7 @@ this. ``CMAKE_INSTALL_PREFIX`` to a system folder like ``/usr`` (or ``/usr/local``). The installation step (**not** the configuration/compilation) needs to be done with superuser - privilege, e.g. by using ``sudo cmake --install build``. The + privilege, e.g. by using ``sudo cmake --install .``. The installation folders will then by changed to: +------------------------+---------------------------------------------------+-------------------------------------------------------------+ From 9274912a81fddb287e21a3477e3eb193e1862fb7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Oct 2020 16:19:43 -0400 Subject: [PATCH 140/182] add note about no longer supporting PyPar and remove instructions related to it. --- doc/src/Python_install.rst | 71 +++++++++++++++++++------------------- doc/src/Python_run.rst | 42 ---------------------- 2 files changed, 36 insertions(+), 77 deletions(-) diff --git a/doc/src/Python_install.rst b/doc/src/Python_install.rst index 0626c23860..6927d0745f 100644 --- a/doc/src/Python_install.rst +++ b/doc/src/Python_install.rst @@ -31,16 +31,16 @@ into a folder that the dynamic loader searches or into the same folder where the ``lammps.py`` file is. There are multiple ways to achieve this. -#. Install both files into a Python ``site-packages`` folder, either - system-wide or in the corresponding user-specific folder. This way no - additional environment variables need to be set, but the shared - library is otherwise not accessible. - #. Do a full LAMMPS installation of libraries, executables, selected headers, documentation (if enabled), and supporting files (only available via CMake), which can also be either system-wide or into user specific folders. +#. Install both files into a Python ``site-packages`` folder, either + system-wide or in the corresponding user-specific folder. This way no + additional environment variables need to be set, but the shared + library is otherwise not accessible. + #. Do an installation into a virtual environment. This can either be an installation of the python module only or a full installation. @@ -368,15 +368,16 @@ If you wish to run LAMMPS in parallel from Python, you need to extend your Python with an interface to MPI. This also allows you to make MPI calls directly from Python in your script, if you desire. -We have tested this with mpi4py and pypar: +We have tested this with `MPI for Python `_ +(aka mpi4py) and you will find installation instruction for it below. -* `MPI for Python `_ -* `pypar `_ +.. note:: -We recommend the use of mpi4py as it is the more complete MPI interface, -and as of version 2.0.0 mpi4py allows passing a custom MPI communicator -to the LAMMPS constructor, which means one can easily run one or more -LAMMPS instances on subsets of the total MPI ranks. + Older LAMMPS versions were also tested with `PyPar `_ + but we can no longer test it, since it does not work with the Python + (3.x) versions on our test servers. Since there have been no updates + to PyPar visible in its repository since November 2016 we have to assume + it is no longer maintained. Installation of mpi4py (version 3.0.3 as of Sep 2020) can be done as follows: @@ -396,12 +397,6 @@ follows: # for use with MPICH sudo dnf install python3-mpi4py-openmpi -- Via ``pip`` into a system folder (not recommended): - - .. code-block:: bash - - sudo dnf install mpi4py - - Via ``pip`` into a virtual environment (see above): .. code-block:: bash @@ -409,29 +404,34 @@ follows: $ source $HOME/myenv/activate (myenv)$ pip install mpi4py +- Via ``pip`` into a system folder (not recommended): + + .. code-block:: bash + + sudo pip install mpi4py + .. _mpi4py_install: https://mpi4py.readthedocs.io/en/stable/install.html For more detailed installation instructions and additional options, please see the `mpi4py installation `_ page. -.. note:: - To use ``mpi4py`` and LAMMPS in parallel from Python, you must make - certain that both are using the same implementation and version of an - MPI library. If you only have one MPI library installed on your - system, this is not an issue, but it can be if you have multiple MPI - installations (e.g. on an HPC cluster to be selected through - environment modules). Your LAMMPS build is explicit about which MPI - it is using, since it is either detected during CMake configuration - or in the traditional make build system you specify the details in - your low-level ``src/MAKE/Makefile.foo`` file. The installation - process of ``mpi4py`` uses the ``mpicc`` command to find information - about the MPI it uses to build against. And it tries to load - "libmpi.so" from the ``LD_LIBRARY_PATH``. This may or may not find - the MPI library that LAMMPS is using. If you have problems running - both mpi4py and LAMMPS together, this is an issue you may need to - address, e.g. by loading the module for different MPI installation so - that mpi4py finds the right one. +To use ``mpi4py`` and LAMMPS in parallel from Python, you **must** make +certain that **both** are using the **same** implementation and version +of MPI library. If you only have one MPI library installed on your +system this is not an issue, but it can be if you have multiple MPI +installations (e.g. on an HPC cluster to be selected through environment +modules). Your LAMMPS build is explicit about which MPI it is using, +since it is either detected during CMake configuration or in the +traditional make build system you specify the details in your low-level +``src/MAKE/Makefile.foo`` file. The installation process of ``mpi4py`` +uses the ``mpicc`` command to find information about the MPI it uses to +build against. And it tries to load "libmpi.so" from the +``LD_LIBRARY_PATH``. This may or may not find the MPI library that +LAMMPS is using. If you have problems running both mpi4py and LAMMPS +together, this is an issue you may need to address, e.g. by loading the +module for different MPI installation so that mpi4py finds the right +one. If you have successfully installed mpi4py, you should be able to run Python and type @@ -465,3 +465,4 @@ and see one line of output for each processor you run on. Proc 1 out of 4 procs Proc 2 out of 4 procs Proc 3 out of 4 procs + diff --git a/doc/src/Python_run.rst b/doc/src/Python_run.rst index 1f91dfadd7..41086a63d6 100644 --- a/doc/src/Python_run.rst +++ b/doc/src/Python_run.rst @@ -76,48 +76,6 @@ described in the mpi4py documentation. The last line of your Python script should be ``MPI.finalize()``, to insure MPI is shut down correctly. -Running LAMMPS and Python in parallel with MPI (pypar) ------------------------------------------------------- - -To run LAMMPS in parallel, assuming you have installed the -`PyPar `_ package as discussed -in :ref:`python_install_mpi4py`, create a ``test.py`` file containing these lines: - -.. code-block:: python - - import pypar - from lammps import lammps - lmp = lammps() - lmp.file("in.lj") - print("Proc %d out of %d procs has" % (pypar.rank(),pypar.size()), lmp) - pypar.finalize() - -You can run the script in parallel as: - -.. code-block:: bash - - $ mpirun -np 4 python3 test.py - -and you should see the same output as if you had typed - -.. code-block:: bash - - $ mpirun -np 4 lmp_mpi -in in.lj - -Note that if you leave out the 3 lines from ``test.py`` that specify PyPar -commands you will instantiate and run LAMMPS independently on each of -the :math:`P` processors specified in the ``mpirun`` command. In this case you -should get 4 sets of output, each showing that a LAMMPS run was made -on a single processor, instead of one set of output showing that -LAMMPS ran on 4 processors. If the 1-processor outputs occur, it -means that PyPar is not working correctly. - -Also note that once you import the PyPar module, PyPar initializes MPI -for you, and you can use MPI calls directly in your Python script, as -described in the PyPar documentation. The last line of your Python -script should be ``pypar.finalize()``, to insure MPI is shut down -correctly. - Running Python scripts ---------------------- From 15f9987c328fd9f200af85d0e8d2b0aad991a82f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Oct 2020 18:39:22 -0400 Subject: [PATCH 141/182] add custom commands "cd" and "pwd" to the LAMMPS shell --- doc/src/Tools.rst | 7 +++++++ tools/lammps-shell/README | 12 +++++++----- tools/lammps-shell/lammps-shell.cpp | 13 +++++++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/doc/src/Tools.rst b/doc/src/Tools.rst index 483c77038e..f29103e7af 100644 --- a/doc/src/Tools.rst +++ b/doc/src/Tools.rst @@ -498,9 +498,16 @@ regular LAMMPS commands: help (or ?) print a brief help message history display the current command history list clear_history wipe out the current command history list + pwd print current working directory + cd change current working directory (same as pwd if no directory) \| execute as a shell command and return to the command prompt exit exit the LAMMPS shell cleanly (unlike the "quit" command) +Please note that some known shell operations are implemented in the +LAMMPS :doc:`shell command ` in a platform neutral fashion, +while using the '\|' character will always pass the following text +to the operating system's shell command. + Compilation =========== diff --git a/tools/lammps-shell/README b/tools/lammps-shell/README index efa19236ce..f72305536d 100644 --- a/tools/lammps-shell/README +++ b/tools/lammps-shell/README @@ -84,11 +84,13 @@ Additional commands The followind commands are added to the LAMMPS shell on top of the regular LAMMPS commands: -- help (or ?) print a brief help message -- history display the current command history list -- clear_history wipe out the current command history list -- | execute as a shell command and return to the command prompt -- exit exit the LAMMPS shell cleanly (unlike the "quit" command) +- help (or ?) print a brief help message +- history display the current command history list +- clear_history wipe out the current command history list +- pwd print current working directory +- cd change current working directory (same as pwd if no directory) +- | execute as a shell command and return to the command prompt +- exit exit the LAMMPS shell cleanly (unlike the "quit" command) Compilation =========== diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index c1f8182535..f286137e53 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -25,6 +25,7 @@ #include #include #define isatty(x) _isatty(x) +#define getcwd(buf, len) _getcwd(buf, len) #endif #if !defined(_WIN32) @@ -460,6 +461,8 @@ static void init_commands() // store LAMMPS shell specific command names commands.push_back("help"); commands.push_back("exit"); + commands.push_back("pwd"); + commands.push_back("cd"); commands.push_back("history"); commands.push_back("clear_history"); @@ -549,6 +552,16 @@ static int shell_cmd(const std::string &cmd) } else if (words[0] == "exit") { free(text); return shell_end(); + } else if ((words[0] == "pwd") || ((words[0] == "cd") && (words.size() == 1))) { + if (getcwd(buf, buflen)) std::cout << buf << "\n"; + free(text); + return 0; + } else if (words[0] == "cd") { + std::string shellcmd = "shell "; + shellcmd += text; + lammps_command(lmp, shellcmd.c_str()); + free(text); + return 0; } else if (words[0] == "history") { free(text); HIST_ENTRY **list = history_list(); From f0f933a7115598a4bfbea912da8d148e558df0e1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Oct 2020 18:44:26 -0400 Subject: [PATCH 142/182] allow forward slash in strings for if statements --- doc/src/if.rst | 6 +++--- src/variable.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/src/if.rst b/doc/src/if.rst index 3f39edceb3..36d78da0d3 100644 --- a/doc/src/if.rst +++ b/doc/src/if.rst @@ -140,12 +140,12 @@ clarity, you must enclose the entire expression in quotes. An expression is built out of numbers (which start with a digit or period or minus sign) or strings (which start with a letter and can -contain alphanumeric characters or underscores): +contain alphanumeric characters, underscores, or forward slashes): .. parsed-literal:: - 0.2, 100, 1.0e20, -15.4, etc - InP, myString, a123, ab_23_cd, etc + 0.2, 100, 1.0e20, -15.4, ... + InP, myString, a123, ab_23_cd, lj/cut, ... and Boolean operators: diff --git a/src/variable.cpp b/src/variable.cpp index 6931fd9122..54c55fe11f 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -4902,7 +4902,7 @@ double Variable::evaluate_boolean(char *str) // set I to end of string int istart = i++; - while (isalnum(str[i]) || str[i] == '_') i++; + while (isalnum(str[i]) || (str[i] == '_') || (str[i] == '/')) i++; int n = i - istart + 1; argstack[nargstack].str = new char[n]; From 9ea38c545d38c40a15394f3765f58202ddfd4992 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 6 Oct 2020 22:43:42 -0400 Subject: [PATCH 143/182] update global properties tests --- .../c-library/test_library_properties.cpp | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/unittest/c-library/test_library_properties.cpp b/unittest/c-library/test_library_properties.cpp index 7bf0da3d72..9b8f0d727d 100644 --- a/unittest/c-library/test_library_properties.cpp +++ b/unittest/c-library/test_library_properties.cpp @@ -13,10 +13,10 @@ #define STRINGIFY(val) XSTR(val) #define XSTR(val) #val +using ::LAMMPS_NS::tagint; using ::testing::HasSubstr; using ::testing::StartsWith; using ::testing::StrEq; -using ::LAMMPS_NS::tagint; class LibraryProperties : public ::testing::Test { protected: @@ -240,20 +240,31 @@ TEST_F(LibraryProperties, global) lammps_command(lmp, "run 2 post no"); if (!verbose) ::testing::internal::GetCapturedStdout(); - LAMMPS_NS::bigint *b_ptr; + int64_t *b_ptr; char *c_ptr; double *d_ptr; int *i_ptr; + EXPECT_EQ(lammps_extract_global_datatype(lmp, "UNKNOWN"), -1); EXPECT_EQ(lammps_extract_global(lmp, "UNKNOWN"), nullptr); + + EXPECT_EQ(lammps_extract_global_datatype(lmp, "units"), LAMMPS_STRING); c_ptr = (char *)lammps_extract_global(lmp, "units"); EXPECT_THAT(c_ptr, StrEq("real")); - b_ptr = (LAMMPS_NS::bigint *)lammps_extract_global(lmp, "ntimestep"); + +#if defined(LAMMPS_SMALLSMALL) + EXPECT_EQ(lammps_extract_global_datatype(lmp, "ntimestep"), LAMMPS_INT); + i_ptr = (int *)lammps_extract_global(lmp, "ntimestep"); + EXPECT_EQ((*i_ptr), 2); +#else + EXPECT_EQ(lammps_extract_global_datatype(lmp, "ntimestep"), LAMMPS_INT64); + b_ptr = (int64_t *)lammps_extract_global(lmp, "ntimestep"); EXPECT_EQ((*b_ptr), 2); +#endif + + EXPECT_EQ(lammps_extract_global_datatype(lmp, "dt"), LAMMPS_DOUBLE); d_ptr = (double *)lammps_extract_global(lmp, "dt"); EXPECT_DOUBLE_EQ((*d_ptr), 0.1); - int dtype = lammps_extract_global_datatype(lmp, "dt"); - EXPECT_EQ(dtype, LAMMPS_DOUBLE); }; class AtomProperties : public ::testing::Test { From 5fa1cd7e864d0e40dc356a0fa9828d8f01a12bd3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Oct 2020 05:33:55 -0400 Subject: [PATCH 144/182] small corrections --- doc/src/Python_install.rst | 2 +- doc/src/Python_run.rst | 4 ++-- doc/src/Tools.rst | 10 ++++++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/doc/src/Python_install.rst b/doc/src/Python_install.rst index 6927d0745f..88d32895a3 100644 --- a/doc/src/Python_install.rst +++ b/doc/src/Python_install.rst @@ -70,7 +70,7 @@ this. # configure LAMMPS compilation cmake -C cmake/presets/minimal.cmake -D BUILD_SHARED_LIBS=on \ - -D LAMMPS_EXCEPTIONS=on -D PKG_PYTHON=on cmake + -D LAMMPS_EXCEPTIONS=on -D PKG_PYTHON=on ../cmake # compile LAMMPS cmake --build . diff --git a/doc/src/Python_run.rst b/doc/src/Python_run.rst index 41086a63d6..077945d8a9 100644 --- a/doc/src/Python_run.rst +++ b/doc/src/Python_run.rst @@ -27,8 +27,8 @@ typed something like: lmp_serial -in in.lj -Running LAMMPS and Python in parallel with MPI (mpi4py) -------------------------------------------------------- +Running LAMMPS and Python in parallel with MPI +---------------------------------------------- To run LAMMPS in parallel, assuming you have installed the `mpi4py `_ package as discussed diff --git a/doc/src/Tools.rst b/doc/src/Tools.rst index f29103e7af..ea813789ab 100644 --- a/doc/src/Tools.rst +++ b/doc/src/Tools.rst @@ -403,6 +403,8 @@ The file was provided by Alessandro Luigi Sellerio LAMMPS shell ------------ +.. versionadded:: 6Oct2020 + Overview ======== @@ -452,11 +454,11 @@ available in that executable. - When typing references to computes, fixes, or variables with a "c\_", "f\_", or "v\_" prefix, respectively, then the expansion will - to known compute/fix IDs and variable names. Variable name expansion - is also available for the ${name} variable syntax. - -- In all other cases, expansion will be performed on filenames. + be to known compute/fix IDs and variable names. Variable name + expansion is also available for the ${name} variable syntax. +- In all other cases TAB expansion will complete to names of files + and directories. Command line editing and history ================================ From 395906b3879ee532e43e31aea3f708aca630bb0a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Oct 2020 13:07:57 -0400 Subject: [PATCH 145/182] whitespace --- doc/src/Python_overview.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/Python_overview.rst b/doc/src/Python_overview.rst index cbc656b602..67f066f670 100644 --- a/doc/src/Python_overview.rst +++ b/doc/src/Python_overview.rst @@ -34,10 +34,10 @@ Below is an example output for Python version 3.8.5. .. code-block:: $ python - Python 3.8.5 (default, Aug 12 2020, 00:00:00) + Python 3.8.5 (default, Aug 12 2020, 00:00:00) [GCC 10.2.1 20200723 (Red Hat 10.2.1-1)] on linux Type "help", "copyright", "credits" or "license" for more information. - >>> + >>> .. warning:: Python 2 support is deprecated From e637c150ba5489867eae7cef42a00bf05f5ebd36 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Oct 2020 13:08:25 -0400 Subject: [PATCH 146/182] add versionadded tags --- src/library.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/library.cpp b/src/library.cpp index 404789d315..cad0e4d20f 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -4051,6 +4051,9 @@ int lammps_style_name(void *handle, const char *category, int idx, This function checks if the current LAMMPS instance a *category* ID of the given *name* exists. Valid categories are: *compute*\ , *dump*\ , *fix*\ , *group*\ , *molecule*\ , *region*\ , and *variable*\ . + +.. versionadded:: 6Oct2020 + \endverbatim * * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. @@ -4116,6 +4119,9 @@ This function counts how many IDs in the provided *category* are defined in the current LAMMPS instance. Please see :cpp:func:`lammps_has_id` for a list of valid categories. + +.. versionadded:: 6Oct2020 + \endverbatim * * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. @@ -4146,12 +4152,17 @@ int lammps_id_count(void *handle, const char *category) { /** Look up the name of an ID by index in the list of IDs of a given category. * - * This function copies the name of the *category* ID with the index - * *idx* into the provided C-style string buffer. The length of the buffer - * must be provided as *buf_size* argument. If the name of the style - * exceeds the length of the buffer, it will be truncated accordingly. - * If the index is out of range, the function returns 0 and *buffer* is - * set to an empty string, otherwise 1. +\verbatim embed:rst +This function copies the name of the *category* ID with the index +*idx* into the provided C-style string buffer. The length of the buffer +must be provided as *buf_size* argument. If the name of the style +exceeds the length of the buffer, it will be truncated accordingly. +If the index is out of range, the function returns 0 and *buffer* is +set to an empty string, otherwise 1. + +.. versionadded:: 6Oct2020 + +\endverbatim * * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. * \param category category of IDs From 1098ca87491746211e4580a7bc66c3b4b8db0785 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Oct 2020 13:08:49 -0400 Subject: [PATCH 147/182] add some more explanation about exceptions from the library interface perspective --- src/library.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/library.cpp b/src/library.cpp index cad0e4d20f..4a6919f8c4 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -4313,6 +4313,17 @@ int lammps_config_has_ffmpeg_support() { In case of errors LAMMPS will either abort or throw a C++ exception. The latter has to be :ref:`enabled at compile time `. This function checks if exceptions were enabled. + +When using the library interface and C++ exceptions are enabled, +the library interface functions will "catch" them and the +error status can then be checked by calling +:cpp:func:`lammps_has_error` and the most recent error message +can be retrieved via :cpp:func:`lammps_get_last_error_message`. +This can allow to restart a calculation or delete and recreate +the LAMMPS instance when C++ exceptions are enabled. One application +of using exceptions this way is the :ref:`lammps_shell`. If C++ +exceptions are disabled and an error happens during a call to +LAMMPS, the application will terminate. \endverbatim * \return 1 if yes, otherwise 0 */ From 57cc8d62903c39c084d819b2b2b6d1a2eb76860a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Oct 2020 18:35:05 -0400 Subject: [PATCH 148/182] fix incorrectly formatted "notes" --- doc/src/Modify_overview.rst | 12 ++++++------ src/library.cpp | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/src/Modify_overview.rst b/doc/src/Modify_overview.rst index 3ec05c4ddd..e733dc1563 100644 --- a/doc/src/Modify_overview.rst +++ b/doc/src/Modify_overview.rst @@ -56,13 +56,13 @@ the executable and can be invoked with a pair_style command like the example above. Arguments like 0.1 and 3.5 can be defined and processed by your new class. -.. note: +.. note:: - With the traditional make process, simply adding the new files to the - src folder and compiling LAMMPS again for the desired configuration - with "make machine" is sufficient. When using CMake, you need to - re-run CMake with "cmake ." in the build folder to have it recognize - the added files and include them into the build system. + With the traditional make process, simply adding the new files to the + src folder and compiling LAMMPS again for the desired configuration + with "make machine" is sufficient. When using CMake, you need to + re-run CMake with "cmake ." in the build folder to have it recognize + the added files and include them into the build system. As illustrated by this example pair style, many kinds of options are referred to in the LAMMPS documentation as the "style" of a particular diff --git a/src/library.cpp b/src/library.cpp index 4a6919f8c4..d045cf1d23 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -4614,7 +4614,7 @@ void lammps_force_timeout(void *handle) This function can be used to query if an error inside of LAMMPS has thrown a :ref:`C++ exception `. -.. note: +.. note:: This function will always report "no error" when the LAMMPS library has been compiled without ``-DLAMMPS_EXCEPTIONS`` which turns fatal @@ -4652,7 +4652,7 @@ a "2" indicates an abort that would happen only in a single MPI rank and thus may not be recoverable as other MPI ranks may be waiting on the failing MPI ranks to send messages. -.. note: +.. note:: This function will do nothing when the LAMMPS library has been compiled without ``-DLAMMPS_EXCEPTIONS`` which turns errors aborting From 50bfb9142d1463b0e46e3301461a5a628657e76f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Oct 2020 18:35:59 -0400 Subject: [PATCH 149/182] add library API to print OS/Compiler info (for use with LAMMPS shell) --- doc/src/Library_properties.rst | 6 ++++ src/library.cpp | 54 ++++++++++++++++++++++++++-------- src/library.h | 1 + 3 files changed, 48 insertions(+), 13 deletions(-) diff --git a/doc/src/Library_properties.rst b/doc/src/Library_properties.rst index e53a3caa0d..fa8f7e7503 100644 --- a/doc/src/Library_properties.rst +++ b/doc/src/Library_properties.rst @@ -4,6 +4,7 @@ Retrieving or setting LAMMPS system properties This section documents the following functions: - :cpp:func:`lammps_version` +- :cpp:func:`lammps_get_os_info` - :cpp:func:`lammps_memory_usage` - :cpp:func:`lammps_get_mpi_comm` - :cpp:func:`lammps_get_natoms` @@ -80,6 +81,11 @@ sub-domains and processors. ----------------------- +.. doxygenfunction:: lammps_get_os_info + :project: progguide + +----------------------- + .. doxygenfunction:: lammps_memory_usage :project: progguide diff --git a/src/library.cpp b/src/library.cpp index d045cf1d23..05fcccd84d 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -566,6 +566,33 @@ int lammps_version(void *handle) return lmp->num_ver; } +/** Get operating system and architecture information + * +\verbatim embed:rst + +The :cpp:func:`lammps_get_os_info` function can be used to retrieve +detailed information about the hosting operating system and +compiler/runtime. +A suitable buffer for a C-style string has to be provided and its length. +If the assembled text will be truncated to not overflow this buffer. + +.. versionadded:: 6Oct2020 + +\endverbatim + * + * \param buffer string buffer to copy the information to + * \param buf_size size of the provided string buffer */ + +void lammps_get_os_info(char *buffer, int buf_size) +{ + if (buf_size <=0) return; + buffer[0] = buffer[buf_size-1] = '\0'; + std::string txt = Info::get_os_info() + "\n"; + txt += Info::get_compiler_info(); + txt += " with " + Info::get_openmp_info() + "\n"; + strncpy(buffer, txt.c_str(), buf_size-1); +} + /* ---------------------------------------------------------------------- */ /** Get memory usage information @@ -4346,15 +4373,15 @@ int lammps_config_has_exceptions() { * index. Thus, providing this request index ensures that the correct neighbor * list index is returned. * - * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. - * \param style String used to search for pair style instance - * \param exact Flag to control whether style should match exactly or only - * must be contained in pair style name - * \param nsub match nsub-th hybrid sub-style - * \param request request index that specifies which neighbor list should be - * returned, in case there are multiple neighbor lists requests - * for the found pair style - * \return return neighbor list index if found, otherwise -1 + * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. + * \param style String used to search for pair style instance + * \param exact Flag to control whether style should match exactly or only + * must be contained in pair style name + * \param nsub match nsub-th hybrid sub-style + * \param request request index that specifies which neighbor list should be + * returned, in case there are multiple neighbor lists requests + * for the found pair style + * \return return neighbor list index if found, otherwise -1 */ int lammps_find_pair_neighlist(void* handle, char * style, int exact, int nsub, int request) { LAMMPS * lmp = (LAMMPS *) handle; @@ -4660,15 +4687,16 @@ the failing MPI ranks to send messages. :cpp:func:`lammps_config_has_exceptions` to check if this is the case. \endverbatim * - * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. - * \param buffer string buffer to copy the error message to - * \param buf_size size of the provided string buffer - * \return 1 when all ranks had the error, 2 on a single rank error. + * \param handle pointer to a previously created LAMMPS instance cast to ``void *``. + * \param buffer string buffer to copy the error message to + * \param buf_size size of the provided string buffer + * \return 1 when all ranks had the error, 2 on a single rank error. */ int lammps_get_last_error_message(void *handle, char *buffer, int buf_size) { #ifdef LAMMPS_EXCEPTIONS LAMMPS *lmp = (LAMMPS *) handle; Error *error = lmp->error; + buffer[0] = buffer[buf_size-1] = '\0'; if(!error->get_last_error().empty()) { int error_type = error->get_last_error_type(); diff --git a/src/library.h b/src/library.h index 8089e51ade..68ae74740a 100644 --- a/src/library.h +++ b/src/library.h @@ -112,6 +112,7 @@ void lammps_commands_string(void *handle, const char *str); * ----------------------------------------------------------------------- */ int lammps_version(void *handle); +void lammps_get_os_info(char *buffer, int buf_size); void lammps_memory_usage(void *handle, double *meminfo); int lammps_get_mpi_comm(void *handle); double lammps_get_natoms(void *handle); From ac6e99ae81e0f05c5ce39dbfa369357e2a436145 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Oct 2020 18:36:43 -0400 Subject: [PATCH 150/182] implement "mem" command into LAMMPS shell to print current and max memory use --- doc/src/Tools.rst | 1 + tools/lammps-shell/README | 1 + tools/lammps-shell/lammps-shell.cpp | 8 ++++++++ 3 files changed, 10 insertions(+) diff --git a/doc/src/Tools.rst b/doc/src/Tools.rst index ea813789ab..6785e33821 100644 --- a/doc/src/Tools.rst +++ b/doc/src/Tools.rst @@ -502,6 +502,7 @@ regular LAMMPS commands: clear_history wipe out the current command history list pwd print current working directory cd change current working directory (same as pwd if no directory) + mem print current and maximum memory usage \| execute as a shell command and return to the command prompt exit exit the LAMMPS shell cleanly (unlike the "quit" command) diff --git a/tools/lammps-shell/README b/tools/lammps-shell/README index f72305536d..bacb28ae56 100644 --- a/tools/lammps-shell/README +++ b/tools/lammps-shell/README @@ -89,6 +89,7 @@ regular LAMMPS commands: - clear_history wipe out the current command history list - pwd print current working directory - cd change current working directory (same as pwd if no directory) +- mem print current and maximum memory usage - | execute as a shell command and return to the command prompt - exit exit the LAMMPS shell cleanly (unlike the "quit" command) diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index f286137e53..b5c6594930 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -463,6 +463,7 @@ static void init_commands() commands.push_back("exit"); commands.push_back("pwd"); commands.push_back("cd"); + commands.push_back("mem"); commands.push_back("history"); commands.push_back("clear_history"); @@ -562,6 +563,13 @@ static int shell_cmd(const std::string &cmd) lammps_command(lmp, shellcmd.c_str()); free(text); return 0; + } else if (words[0] == "mem") { + double meminfo[3]; + lammps_memory_usage(lmp,meminfo); + std::cout << "Memory usage. Current: " << meminfo[0] << " MByte, " + << "Maximum : " << meminfo[2] << " MByte\n"; + free(text); + return 0; } else if (words[0] == "history") { free(text); HIST_ENTRY **list = history_list(); From 0891a8ce7d71134f7840c95ca8f9b4397d61a410 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Oct 2020 18:37:09 -0400 Subject: [PATCH 151/182] better MPI version detection. --- src/info.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/info.cpp b/src/info.cpp index dd913271a1..ece8ab1a3d 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -1240,7 +1240,7 @@ std::string Info::get_mpi_vendor() { #elif defined(MSMPI_VER) return "Microsoft MPI"; #else - return "Unknown"; + return "Unknown MPI implementation"; #endif } @@ -1251,7 +1251,8 @@ std::string Info::get_mpi_info(int &major, int &minor) static char version[MPI_MAX_LIBRARY_VERSION_STRING]; MPI_Get_library_version(version,&len); #else - static char version[] = "Undetected MPI implementation"; + static char version[32]; + strcpy(version,get_mpi_vendor()); len = strlen(version); #endif From d48b0ebd7ba89c81132af6bbec770a966d88dd75 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Oct 2020 18:37:27 -0400 Subject: [PATCH 152/182] print OS/Compiler info when starting LAMMPS shell --- tools/lammps-shell/lammps-shell.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/lammps-shell/lammps-shell.cpp b/tools/lammps-shell/lammps-shell.cpp index b5c6594930..48ac8fe2a1 100644 --- a/tools/lammps-shell/lammps-shell.cpp +++ b/tools/lammps-shell/lammps-shell.cpp @@ -593,7 +593,9 @@ int main(int argc, char **argv) char *line; std::string trimmed; - std::cout << "LAMMPS Shell version 1.0\n"; + lammps_get_os_info(buf,buflen); + std::cout << "LAMMPS Shell version 1.0 OS: " << buf; + if (!lammps_config_has_exceptions()) std::cout << "WARNING: LAMMPS was compiled without exceptions\n" "WARNING: The shell will terminate on errors.\n"; From 08f8e7ed289eeb35a378f0193711b22427ef86a9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Oct 2020 20:07:30 -0400 Subject: [PATCH 153/182] update titles as suggested by steve and move a few entries around --- doc/src/Library.rst | 1 + doc/src/Library_add.rst | 26 ++++++++------- doc/src/Library_atoms.rst | 18 ++++++++++ doc/src/Library_config.rst | 16 +++++++-- doc/src/Library_execute.rst | 4 +-- doc/src/Library_neighbor.rst | 4 +-- doc/src/Library_properties.rst | 60 ++++++++-------------------------- doc/src/Library_scatter.rst | 12 +++++-- doc/src/Library_utility.rst | 4 +-- 9 files changed, 77 insertions(+), 68 deletions(-) create mode 100644 doc/src/Library_atoms.rst diff --git a/doc/src/Library.rst b/doc/src/Library.rst index 8096980a32..6adc78b556 100644 --- a/doc/src/Library.rst +++ b/doc/src/Library.rst @@ -94,6 +94,7 @@ and consequently the function :cpp:func:`lammps_open` may not be used. Library_create Library_execute Library_properties + Library_atoms Library_objects Library_scatter Library_neighbor diff --git a/doc/src/Library_add.rst b/doc/src/Library_add.rst index ef91c98ab0..d35ba5616b 100644 --- a/doc/src/Library_add.rst +++ b/doc/src/Library_add.rst @@ -1,12 +1,12 @@ -Adding code to the Library interface -==================================== +Extending the Library interface +=============================== The functionality of the LAMMPS library interface has historically been motivated by the needs of its users. Functions have been added or expanded as they were needed and used. Contributions to the interface are always welcome. However with a refactoring of the -library interface and its documentation that started in 2020, there -are now a few requirements for including new changes or extensions. +library interface and its documentation that started in Spring 2020, +there are now a few requirements for including new changes or extensions. - New functions should be orthogonal to existing ones and not implement functionality that can already be achieved with the @@ -17,18 +17,20 @@ are now a few requirements for including new changes or extensions. ``doc/src`` folder. - If possible, new unit tests to test those new features should be added. - - The new feature should also be implemented and documented not - just for the C interface, but also the Python and Fortran interfaces. + - New features should also be implemented and documented not just + for the C interface, but also the Python and Fortran interfaces. - All additions should work and be compatible with ``-DLAMMPS_BIGBIG``, - ``-DLAMMPS_SMALLBIG``, ``-DLAMMPS_SMALLSMALL`` and when compiling - with and without MPI support. + ``-DLAMMPS_SMALLBIG``, ``-DLAMMPS_SMALLSMALL`` as well as when + compiling with and without MPI support. - The ``library.h`` file should be kept compatible to C code at a level similar to C89. Its interfaces may not reference any custom data types (e.g. ``bigint``, ``tagint``, and so on) that - are only known inside of LAMMPS. + are only known inside of LAMMPS; instead ``int`` and ``int64_t`` + should be used. - only use C style comments, not C++ style -Please note that these are *not* *strict* requirements, but the LAMMPS -developers appreciate if they are followed and can assist with -implementing what is missing. +Please note that these are not **strict** requirements, but the LAMMPS +developers very much appreciate, if they are followed and can assist +with implementing what is missing. It helps maintaining the code base +and keeping it consistent. diff --git a/doc/src/Library_atoms.rst b/doc/src/Library_atoms.rst new file mode 100644 index 0000000000..cebd8f0c2e --- /dev/null +++ b/doc/src/Library_atoms.rst @@ -0,0 +1,18 @@ +Per-atom properties +=================== + +This section documents the following functions: + +- :cpp:func:`lammps_extract_atom_datatype` +- :cpp:func:`lammps_extract_atom` + +----------------------- + +.. doxygenfunction:: lammps_extract_atom_datatype + :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_extract_atom + :project: progguide + diff --git a/doc/src/Library_config.rst b/doc/src/Library_config.rst index 230c908ad6..24c412a23d 100644 --- a/doc/src/Library_config.rst +++ b/doc/src/Library_config.rst @@ -1,8 +1,10 @@ -Retrieving LAMMPS configuration information -=========================================== +Configuration information +========================= This section documents the following functions: +- :cpp:func:`lammps_version` +- :cpp:func:`lammps_get_os_info` - :cpp:func:`lammps_config_has_mpi_support` - :cpp:func:`lammps_config_has_gzip_support` - :cpp:func:`lammps_config_has_png_support` @@ -69,6 +71,16 @@ approach. ----------------------- +.. doxygenfunction:: lammps_version + :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_get_os_info + :project: progguide + +----------------------- + .. doxygenfunction:: lammps_config_has_mpi_support :project: progguide diff --git a/doc/src/Library_execute.rst b/doc/src/Library_execute.rst index b6bcab2ead..deed99f456 100644 --- a/doc/src/Library_execute.rst +++ b/doc/src/Library_execute.rst @@ -1,5 +1,5 @@ -Executing LAMMPS commands -========================= +Executing commands +================== This section documents the following functions: diff --git a/doc/src/Library_neighbor.rst b/doc/src/Library_neighbor.rst index f50d28b81e..304ae43cee 100644 --- a/doc/src/Library_neighbor.rst +++ b/doc/src/Library_neighbor.rst @@ -1,5 +1,5 @@ -Accessing LAMMPS Neighbor lists -=============================== +Neighbor list access +==================== The following functions enable access to neighbor lists generated by LAMMPS or querying of their properties: diff --git a/doc/src/Library_properties.rst b/doc/src/Library_properties.rst index fa8f7e7503..e023c78185 100644 --- a/doc/src/Library_properties.rst +++ b/doc/src/Library_properties.rst @@ -1,22 +1,17 @@ -Retrieving or setting LAMMPS system properties -============================================== +System properties +================= This section documents the following functions: -- :cpp:func:`lammps_version` -- :cpp:func:`lammps_get_os_info` -- :cpp:func:`lammps_memory_usage` -- :cpp:func:`lammps_get_mpi_comm` - :cpp:func:`lammps_get_natoms` - :cpp:func:`lammps_get_thermo` - :cpp:func:`lammps_extract_box` - :cpp:func:`lammps_reset_box` +- :cpp:func:`lammps_memory_usage` +- :cpp:func:`lammps_get_mpi_comm` - :cpp:func:`lammps_extract_setting` - :cpp:func:`lammps_extract_global_datatype` - :cpp:func:`lammps_extract_global` -- :cpp:func:`lammps_extract_atom_datatype` -- :cpp:func:`lammps_extract_atom` -- :cpp:func:`lammps_create_atoms` -------------------- @@ -76,26 +71,6 @@ sub-domains and processors. ----------------------- -.. doxygenfunction:: lammps_version - :project: progguide - ------------------------ - -.. doxygenfunction:: lammps_get_os_info - :project: progguide - ------------------------ - -.. doxygenfunction:: lammps_memory_usage - :project: progguide - ------------------------ - -.. doxygenfunction:: lammps_get_mpi_comm - :project: progguide - ------------------------ - .. doxygenfunction:: lammps_get_natoms :project: progguide @@ -114,6 +89,16 @@ sub-domains and processors. .. doxygenfunction:: lammps_reset_box :project: progguide +----------------------- + +.. doxygenfunction:: lammps_memory_usage + :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_get_mpi_comm + :project: progguide + ------------------- .. doxygenfunction:: lammps_extract_setting @@ -129,20 +114,3 @@ sub-domains and processors. .. doxygenfunction:: lammps_extract_global :project: progguide ------------------------ - -.. doxygenfunction:: lammps_extract_atom_datatype - :project: progguide - - ------------------------ - -.. doxygenfunction:: lammps_extract_atom - :project: progguide - ------------------------ - -.. doxygenfunction:: lammps_create_atoms(void *handle, int n, int *id, int *type, double *x, double *v, int *image, int bexpand) - :project: progguide - - diff --git a/doc/src/Library_scatter.rst b/doc/src/Library_scatter.rst index 4fb02ec3e3..1bbce6cc4e 100644 --- a/doc/src/Library_scatter.rst +++ b/doc/src/Library_scatter.rst @@ -1,5 +1,5 @@ -Library functions for scatter/gather operations -================================================ +Per-atom scatter/gather operations +================================== This section has functions which gather per-atom data from one or more processors into a contiguous global list ordered by atom ID. The same @@ -22,6 +22,7 @@ It documents the following functions: - :cpp:func:`lammps_gather_subset` - :cpp:func:`lammps_scatter` - :cpp:func:`lammps_scatter_subset` +- :cpp:func:`lammps_create_atoms` ----------------------- @@ -72,3 +73,10 @@ It documents the following functions: .. doxygenfunction:: lammps_scatter_subset :project: progguide + +----------------------- + +.. doxygenfunction:: lammps_create_atoms(void *handle, int n, int *id, int *type, double *x, double *v, int *image, int bexpand) + :project: progguide + + diff --git a/doc/src/Library_utility.rst b/doc/src/Library_utility.rst index 3ca56789c3..2e81a785af 100644 --- a/doc/src/Library_utility.rst +++ b/doc/src/Library_utility.rst @@ -1,5 +1,5 @@ -Library interface utility functions -=================================== +Utility functions +================= To simplify some tasks, the library interface contains these utility functions. They do not directly call the LAMMPS library. From 20e1697dba794da959266259c711206512a137d9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Oct 2020 20:24:56 -0400 Subject: [PATCH 154/182] add ":class: note" to admonitions where it was missing for consistent formatting --- doc/src/Fortran.rst | 6 ++++-- doc/src/Library.rst | 3 +++ doc/src/Speed_kokkos.rst | 3 +++ doc/src/fix_property_atom.rst | 2 ++ doc/src/write_data.rst | 1 + 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/doc/src/Fortran.rst b/doc/src/Fortran.rst index 6197d2ffd2..ce548e4662 100644 --- a/doc/src/Fortran.rst +++ b/doc/src/Fortran.rst @@ -27,6 +27,7 @@ Fortran code using the interface. .. versionadded:: 30Sep2020 .. admonition:: Work in Progress + :class: note This Fortran module is work in progress and only the documented functionality is currently available. The final implementation should @@ -35,9 +36,10 @@ Fortran code using the interface. .. note:: - A contributed (and complete!) Fortran interface is available + A contributed (and complete!) Fortran interface that is more + closely resembling the C-library interface is available in the ``examples/COUPLE/fortran2`` folder. Please see the - README file in that folder for more information about that + ``README`` file in that folder for more information about that Fortran interface and how to contact its author and maintainer. ---------- diff --git a/doc/src/Library.rst b/doc/src/Library.rst index 6adc78b556..a992948b40 100644 --- a/doc/src/Library.rst +++ b/doc/src/Library.rst @@ -76,6 +76,9 @@ and consequently the function :cpp:func:`lammps_open` may not be used. an error inside LAMMPS, this will result in an abort of the entire program. This is not always desirable. Instead, LAMMPS can be compiled to instead :ref:`throw a C++ exception `. + These exceptions are caught by the library interface and the + error status :cpp:func:`can be queried ` and + the :cpp:func:`error message retrieved `. .. warning:: diff --git a/doc/src/Speed_kokkos.rst b/doc/src/Speed_kokkos.rst index 5df53ec2cd..7827c13811 100644 --- a/doc/src/Speed_kokkos.rst +++ b/doc/src/Speed_kokkos.rst @@ -27,6 +27,7 @@ GPUs) and HIP (for AMD GPUs). You choose the mode at build time to produce an executable compatible with a specific hardware. .. admonition:: NVIDIA CUDA support + :class: note To build with Kokkos support for NVIDIA GPUs, the NVIDIA CUDA toolkit software version 9.0 or later must be installed on your system. See @@ -34,6 +35,7 @@ produce an executable compatible with a specific hardware. how to check and do this. .. admonition:: CUDA and MPI library compatibility + :class: note Kokkos with CUDA currently implicitly assumes that the MPI library is CUDA-aware. This is not always the case, especially when using @@ -46,6 +48,7 @@ produce an executable compatible with a specific hardware. cuda/aware off ` in the input file. .. admonition:: AMD GPU support + :class: note To build with Kokkos the HIPCC compiler from the AMD ROCm software version 3.5 or later is required. Supporting this Kokkos mode in diff --git a/doc/src/fix_property_atom.rst b/doc/src/fix_property_atom.rst index dbea88c5a9..0768c59ac8 100644 --- a/doc/src/fix_property_atom.rst +++ b/doc/src/fix_property_atom.rst @@ -106,6 +106,7 @@ when ghost atoms are created (at every re-neighboring) to insure the new properties are also defined for the ghost atoms. .. admonition:: Properties on ghost atoms + :class: note If you use this command with the *mol*\ , *q* or *rmass* vectors, then you most likely want to set *ghost* yes, since these properties @@ -116,6 +117,7 @@ new properties are also defined for the ghost atoms. those vectors but do not set *ghost* yes. .. admonition:: Limitations on ghost atom properties + :class: note The properties for ghost atoms are not updated every timestep, but only once every few steps when neighbor lists are re-built. Thus diff --git a/doc/src/write_data.rst b/doc/src/write_data.rst index b353f4a16f..0aa26f8bbf 100644 --- a/doc/src/write_data.rst +++ b/doc/src/write_data.rst @@ -43,6 +43,7 @@ wild-card character. The "\*" is replaced with the current timestep value. .. admonition:: Data in Coeff sections + :class: note The write_data command may not always write all coefficient settings to the corresponding Coeff sections of the data file. This can have From 353158f7e7ee88f7e2afa746df3d09afb382d8d9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Oct 2020 21:56:14 -0400 Subject: [PATCH 155/182] improve errors vs. exception not --- doc/src/Library.rst | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/doc/src/Library.rst b/doc/src/Library.rst index a992948b40..e380b74806 100644 --- a/doc/src/Library.rst +++ b/doc/src/Library.rst @@ -2,7 +2,7 @@ LAMMPS Library Interfaces ************************* As described on the :doc:`library interface to LAMMPS ` -doc page, LAMMPS can be built as a library (static or shared), so that +page, LAMMPS can be built as a library (static or shared), so that it can be called by another code, used in a :doc:`coupled manner ` with other codes, or driven through a :doc:`Python script `. Even the LAMMPS standalone executable is @@ -72,13 +72,14 @@ and consequently the function :cpp:func:`lammps_open` may not be used. .. admonition:: Errors versus exceptions :class: note - If any of the function calls in the LAMMPS library API trigger - an error inside LAMMPS, this will result in an abort of the entire - program. This is not always desirable. Instead, LAMMPS can be - compiled to instead :ref:`throw a C++ exception `. - These exceptions are caught by the library interface and the - error status :cpp:func:`can be queried ` and - the :cpp:func:`error message retrieved `. + If the LAMMPS executable encounters an error condition, it will abort + after printing an error message. For a library interface this is + usually not desirable. Thus LAMMPS can be compiled to to :ref:`throw + a C++ exception ` instead. If enabled, the library + functions will catch those exceptions and return. The error status + :cpp:func:`can be queried ` and an :cpp:func:`error + message retrieved `. We thus + recommend enabling C++ exceptions when using the library interface, .. warning:: From e683585bbac806d9c8f1f346802ca5277d866224 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Oct 2020 22:28:34 -0400 Subject: [PATCH 156/182] reformat reax/c control file parameter descriptions --- doc/src/pair_reaxc.rst | 110 +++++++++++++++++++++++------------------ 1 file changed, 62 insertions(+), 48 deletions(-) diff --git a/doc/src/pair_reaxc.rst b/doc/src/pair_reaxc.rst index 13ff16d4d3..b28b387e0b 100644 --- a/doc/src/pair_reaxc.rst +++ b/doc/src/pair_reaxc.rst @@ -92,13 +92,11 @@ tested). create a suitable ReaxFF parameterization. The *cfile* setting can be specified as NULL, in which case default -settings are used. A control file can be specified which defines -values of control variables. Some control variables are -global parameters for the ReaxFF potential. Others define certain -performance and output settings. -Each line in the control file specifies the value for -a control variable. The format of the control file is described -below. +settings are used. A control file can be specified which defines values +of control variables. Some control variables are global parameters for +the ReaxFF potential. Others define certain performance and output +settings. Each line in the control file specifies the value for a +control variable. The format of the control file is described below. .. note:: @@ -224,7 +222,10 @@ H, you would use the following pair_coeff command: pair_coeff * * ffield.reax C C N H ----------- +------------- + +Control file +"""""""""""" The format of a line in the control file is as follows: @@ -238,60 +239,73 @@ If the value of a control variable is not specified, then default values are used. What follows is the list of variables along with a brief description of their use and default values. -simulation_name: Output files produced by *pair_style reax/c* carry -this name + extensions specific to their contents. Partial energies -are reported with a ".pot" extension, while the trajectory file has -".trj" extension. -tabulate_long_range: To improve performance, long range interactions -can optionally be tabulated (0 means no tabulation). Value of this -variable denotes the size of the long range interaction table. The -range from 0 to long range cutoff (defined in the *ffield* file) is -divided into *tabulate_long_range* points. Then at the start of -simulation, we fill in the entries of the long range interaction table -by computing the energies and forces resulting from van der Waals and -Coulomb interactions between every possible atom type pairs present in -the input system. During the simulation we consult to the long range -interaction table to estimate the energy and forces between a pair of -atoms. Linear interpolation is used for estimation. (default value = -0) +*simulation_name* + Output files produced by *pair_style reax/c* carry + this name + extensions specific to their contents. Partial energies + are reported with a ".pot" extension, while the trajectory file has + ".trj" extension. -energy_update_freq: Denotes the frequency (in number of steps) of -writes into the partial energies file. (default value = 0) +*tabulate_long_range* + To improve performance, long range interactions can optionally be + tabulated (0 means no tabulation). Value of this variable denotes the + size of the long range interaction table. The range from 0 to long + range cutoff (defined in the *ffield* file) is divided into + *tabulate_long_range* points. Then at the start of simulation, we + fill in the entries of the long range interaction table by computing + the energies and forces resulting from van der Waals and Coulomb + interactions between every possible atom type pairs present in the + input system. During the simulation we consult to the long range + interaction table to estimate the energy and forces between a pair of + atoms. Linear interpolation is used for estimation. (default value = 0) -nbrhood_cutoff: Denotes the near neighbors cutoff (in Angstroms) -regarding the bonded interactions. (default value = 5.0) +*energy_update_freq* + Denotes the frequency (in number of steps) of writes into the partial + energies file. (default value = 0) -hbond_cutoff: Denotes the cutoff distance (in Angstroms) for hydrogen -bond interactions.(default value = 7.5. A value of 0.0 turns off -hydrogen bonds) +*nbrhood_cutoff* + Denotes the near neighbors cutoff (in Angstroms) + regarding the bonded interactions. (default value = 5.0) -bond_graph_cutoff: is the threshold used in determining what is a -physical bond, what is not. Bonds and angles reported in the -trajectory file rely on this cutoff. (default value = 0.3) +*hbond_cutoff* + Denotes the cutoff distance (in Angstroms) for hydrogen + bond interactions.(default value = 7.5. A value of 0.0 turns off + hydrogen bonds) -thb_cutoff: cutoff value for the strength of bonds to be considered in -three body interactions. (default value = 0.001) +*bond_graph_cutoff* + is the threshold used in determining what is a + physical bond, what is not. Bonds and angles reported in the + trajectory file rely on this cutoff. (default value = 0.3) -thb_cutoff_sq: cutoff value for the strength of bond order products -to be considered in three body interactions. (default value = 0.00001) +*thb_cutoff* + cutoff value for the strength of bonds to be considered in + three body interactions. (default value = 0.001) -write_freq: Frequency of writes into the trajectory file. (default -value = 0) +*thb_cutoff_sq* + cutoff value for the strength of bond order products + to be considered in three body interactions. (default value = 0.00001) -traj_title: Title of the trajectory - not the name of the trajectory -file. +*write_freq* + Frequency of writes into the trajectory file. (default + value = 0) -atom_info: 1 means print only atomic positions + charge (default = 0) +*traj_title* + Title of the trajectory - not the name of the trajectory file. -atom_forces: 1 adds net forces to atom lines in the trajectory file -(default = 0) +*atom_info* + 1 means print only atomic positions + charge (default = 0) -atom_velocities: 1 adds atomic velocities to atoms line (default = 0) +*atom_forces* + 1 adds net forces to atom lines in the trajectory file (default = 0) -bond_info: 1 prints bonds in the trajectory file (default = 0) +*atom_velocities* + 1 adds atomic velocities to atoms line (default = 0) -angle_info: 1 prints angles in the trajectory file (default = 0) +*bond_info* + 1 prints bonds in the trajectory file (default = 0) + +*angle_info* + 1 prints angles in the trajectory file (default = 0) ---------- From 60864f021f23f4f63397f794582b30087a1ed9e9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 7 Oct 2020 22:29:26 -0400 Subject: [PATCH 157/182] replace "doc page" with "page" or equivalent --- doc/Makefile | 2 +- doc/src/Build_basics.rst | 25 +++++++++++++------------ doc/src/Install_git.rst | 2 +- doc/src/Install_tarball.rst | 2 +- doc/src/Manual.rst | 7 ++++--- doc/src/Manual_build.rst | 10 +++++----- doc/src/Manual_version.rst | 4 ++-- 7 files changed, 27 insertions(+), 25 deletions(-) diff --git a/doc/Makefile b/doc/Makefile index 2b9849d9e8..18fba1bab4 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -65,7 +65,7 @@ DOXYFILES = $(shell sed -n -e 's/\#.*$$//' -e '/^ *INPUT \+=/,/^[A-Z_]\+ \+ help: @if [ "$(HAS_BASH)" == "NO" ] ; then echo "bash was not found at $(OSHELL)! Please use: $(MAKE) SHELL=/path/to/bash" 1>&2; exit 1; fi @echo "Please use \`make ' where is one of" - @echo " html create HTML doc pages in html dir" + @echo " html create HTML pages in html dir" @echo " pdf create Manual.pdf in this dir" @echo " fetch fetch HTML and PDF files from LAMMPS web site" @echo " epub create ePUB format manual for e-book readers" diff --git a/doc/src/Build_basics.rst b/doc/src/Build_basics.rst index 8a9370e5a7..dd6baa9e0b 100644 --- a/doc/src/Build_basics.rst +++ b/doc/src/Build_basics.rst @@ -134,8 +134,8 @@ support included as well. These are commands in the ``MPIIO``, ``SNAP``, ``USER-DIFFRACTION``, and ``USER-DPD`` packages. In addition some packages support OpenMP threading indirectly through the libraries they interface to: e.g. ``LATTE``, ``KSPACE``, and ``USER-COLVARS``. -See the :doc:`Packages details ` doc page for more -info on these packages and the doc pages for their respective commands +See the :doc:`Packages details ` page for more +info on these packages and the pages for their respective commands for OpenMP threading info. For CMake, if you use ``BUILD_OMP=yes``, you can use these packages @@ -310,7 +310,7 @@ LAMMPS. required or recommended to enable required features and to achieve optimal performance. You need to include these in the CCFLAGS and LINKFLAGS settings above. For details, see the - individual package doc pages listed on the + documentation for the individual packages listed on the :doc:`Speed_packages` page. Or examine these files in the src/MAKE/OPTIONS directory. They correspond to each of the 5 accelerator packages and their hardware variants: @@ -341,7 +341,7 @@ will then process commands provided via a file or from the console input. The LAMMPS library can also be called from another application or a scripting language. See the :doc:`Howto couple ` doc page for more info on coupling LAMMPS to other codes. See the -:doc:`Python ` doc page for more info on wrapping and +:doc:`Python ` page for more info on wrapping and running LAMMPS from Python via its library interface. .. tabs:: @@ -472,13 +472,14 @@ Build the LAMMPS documentation ---------------------------------------- The LAMMPS manual is written in `reStructuredText `_ format which -can be translated to different output format using the `Sphinx `_ -document generator tool. Currently the translation to HTML and PDF (via -LaTeX) are supported. For that to work a Python 3 interpreter and -internet access is required. For the documentation build a python -based virtual environment is set up in the folder doc/docenv and various -python packages are installed into that virtual environment via the pip -tool. The actual translation is then done via make commands. +can be translated to different output format using the `Sphinx +`_ document generator tool. Currently the translation to HTML +and PDF (via LaTeX) are supported. For that to work a Python 3 +interpreter and internet access is required. For the documentation +build a python based virtual environment is set up in the folder +``doc/docenv`` and various python packages are installed into that +virtual environment via the ``pip`` tool. The actual translation is +then done via ``make`` commands. .. _rst: https://docutils.readthedocs.io/en/sphinx-docs/user/rst/quickstart.html .. _sphinx: https://www.sphinx-doc.org @@ -491,7 +492,7 @@ LAMMPS source distribution. .. code-block:: bash - make html # create HTML doc pages in html directory + make html # create HTML pages in html directory make pdf # create Manual.pdf in this directory make fetch # fetch HTML and PDF files from LAMMPS web site make clean # remove all intermediate files diff --git a/doc/src/Install_git.rst b/doc/src/Install_git.rst index 868f679dbc..c198970991 100644 --- a/doc/src/Install_git.rst +++ b/doc/src/Install_git.rst @@ -94,7 +94,7 @@ changed. To do this, you should cd to the src directory and type: $ make package-update # sync package files with src files $ make foo # re-build for your machine (mpi, serial, etc) -just as described on the :doc:`Apply patch ` doc page, +just as described on the :doc:`Apply patch ` page, after a patch has been installed. .. warning:: diff --git a/doc/src/Install_tarball.rst b/doc/src/Install_tarball.rst index d80fc14f76..896ce6a610 100644 --- a/doc/src/Install_tarball.rst +++ b/doc/src/Install_tarball.rst @@ -61,4 +61,4 @@ periodically.) The patch files are posted on the `bug and feature page `_ of the website, along with a list of changed files and details about what is in the new patch release. Instructions for applying a patch file are -on the :doc:`Install patch ` doc page. +on the :doc:`Install patch ` page. diff --git a/doc/src/Manual.rst b/doc/src/Manual.rst index ffd75ef974..8940c507b7 100644 --- a/doc/src/Manual.rst +++ b/doc/src/Manual.rst @@ -21,7 +21,7 @@ all LAMMPS development is coordinated. The content for this manual is part of the LAMMPS distribution. You can build a local copy of the Manual as HTML pages or a PDF file, by -following the steps on the :doc:`Manual build ` doc page. +following the steps on the :doc:`Manual build ` page. The manual is organized in two parts: 1) the :ref:`User documentation ` for how to install and use LAMMPS and 2) the :ref:`Programmer documentation ` @@ -30,8 +30,9 @@ programming languages and how to modify and extend LAMMPS. .. only:: html - Once you are familiar with LAMMPS, you may want to bookmark :doc:`this page ` since it gives quick access to a doc page for - every LAMMPS command. + Once you are familiar with LAMMPS, you may want to bookmark + :doc:`this page ` since it gives quick access + the documentation for all LAMMPS commands. .. _lws: https://lammps.sandia.gov diff --git a/doc/src/Manual_build.rst b/doc/src/Manual_build.rst index d1aebe9b09..518af20997 100644 --- a/doc/src/Manual_build.rst +++ b/doc/src/Manual_build.rst @@ -32,8 +32,8 @@ and PDF files are not included. Instead you need to create them, in one of two ways: a. You can "fetch" the current HTML and PDF files from the LAMMPS web - site. Just type ``make fetch``. This should download a html_www - directory and a Manual_www.pdf file. Note that if new LAMMPS features + site. Just type ``make fetch``. This should download a ``html_www`` + directory and a ``Manual_www.pdf`` file. Note that if new LAMMPS features have been added more recently than the date of your LAMMPS version, the fetched documentation will include those changes (but your source code will not, unless you update your local repository). @@ -54,15 +54,15 @@ A version of the manual corresponding to the ongoing development ---------- The generation of all documentation is managed by the Makefile in the -doc directory. The following documentation related make commands are +doc directory. The following documentation related ``make`` commands are available: .. code-block:: bash make html # generate HTML in html dir using Sphinx make pdf # generate PDF as Manual.pdf using Sphinx and pdflatex - make fetch # fetch HTML doc pages and PDF file from web site - # as a tarball and unpack into html dir and PDF + make fetch # fetch HTML pages and PDF files from LAMMPS web site + # and unpack into the html_www folder and Manual_www.pdf make epub # generate LAMMPS.epub in ePUB format using Sphinx make mobi # generate LAMMPS.mobi in MOBI format using ebook-convert diff --git a/doc/src/Manual_version.rst b/doc/src/Manual_version.rst index a9a395a14d..38c490f08b 100644 --- a/doc/src/Manual_version.rst +++ b/doc/src/Manual_version.rst @@ -17,7 +17,7 @@ run LAMMPS. It is also in the file src/version.h and in the LAMMPS directory name created when you unpack a tarball. And it is on the first page of the :doc:`manual `. -* If you browse the HTML doc pages on the LAMMPS WWW site, they always +* If you browse the HTML pages on the LAMMPS WWW site, they always describe the most current patch release of LAMMPS. -* If you browse the HTML doc pages included in your tarball, they +* If you browse the HTML pages included in your tarball, they describe the version you have, which may be older. From fdbcd202fa9873b0df92c9792e4d81692b0c2f8f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 8 Oct 2020 08:31:58 -0400 Subject: [PATCH 158/182] Consolidate the redundant instructions for building the manual into one location. --- doc/src/Build.rst | 3 +- doc/src/Build_basics.rst | 64 -------- .../{Manual_build.rst => Build_manual.rst} | 137 +++++++++++------- doc/src/Manual.rst | 9 +- 4 files changed, 92 insertions(+), 121 deletions(-) rename doc/src/{Manual_build.rst => Build_manual.rst} (66%) diff --git a/doc/src/Build.rst b/doc/src/Build.rst index 441af79009..296793da79 100644 --- a/doc/src/Build.rst +++ b/doc/src/Build.rst @@ -8,7 +8,7 @@ Makefiles, Ninja, Xcode, Visual Studio, KDevelop, CodeBlocks and more). As an alternative you can download a package with pre-built executables or automated build trees as described on the :doc:`Install ` -doc page. +page. .. toctree:: :maxdepth: 1 @@ -20,5 +20,6 @@ doc page. Build_settings Build_package Build_extras + Build_manual Build_windows Build_development diff --git a/doc/src/Build_basics.rst b/doc/src/Build_basics.rst index dd6baa9e0b..12202ffcbc 100644 --- a/doc/src/Build_basics.rst +++ b/doc/src/Build_basics.rst @@ -8,7 +8,6 @@ CMake and make: * :ref:`Choice of compiler and compile/link options ` * :ref:`Build the LAMMPS executable and library ` * :ref:`Including and removing debug support ` -* :ref:`Build the LAMMPS documentation ` * :ref:`Install LAMMPS after a build ` ---------- @@ -466,69 +465,6 @@ the debug information from the LAMMPS executable: ---------- -.. _doc: - -Build the LAMMPS documentation ----------------------------------------- - -The LAMMPS manual is written in `reStructuredText `_ format which -can be translated to different output format using the `Sphinx -`_ document generator tool. Currently the translation to HTML -and PDF (via LaTeX) are supported. For that to work a Python 3 -interpreter and internet access is required. For the documentation -build a python based virtual environment is set up in the folder -``doc/docenv`` and various python packages are installed into that -virtual environment via the ``pip`` tool. The actual translation is -then done via ``make`` commands. - -.. _rst: https://docutils.readthedocs.io/en/sphinx-docs/user/rst/quickstart.html -.. _sphinx: https://www.sphinx-doc.org - -Documentation makefile options -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The following make commands can be issued in the doc folder of the -LAMMPS source distribution. - -.. code-block:: bash - - make html # create HTML pages in html directory - make pdf # create Manual.pdf in this directory - make fetch # fetch HTML and PDF files from LAMMPS web site - make clean # remove all intermediate files - make clean-all # reset the entire doc build environment - make anchor_check # scan for duplicate anchor labels - make style_check # check for complete and consistent style lists - make package_check # check for complete and consistent package lists - make spelling # spell-check the manual - -Thus "make html" will create a "doc/html" directory with the HTML format -manual pages so that you can browse them with a web browser locally on -your system. - -.. note:: - - You can also download a tarball of the documentation for the - current LAMMPS version (HTML and PDF files), from the website - `download page `_. - -CMake build options -^^^^^^^^^^^^^^^^^^^ - -It is also possible to create the HTML version (and only the HTML -version) of the manual within the :doc:`CMake build directory -`. The reason for this option is to include the -installation of the HTML manual pages into the "install" step when -installing LAMMPS after the CMake build via ``make install``. The -documentation build is included in the default build target, but can -also be requested independently with ``make doc``. - -.. code-block:: bash - - -D BUILD_DOC=value # yes or no (default) - ----------- - .. _tools: Build LAMMPS tools diff --git a/doc/src/Manual_build.rst b/doc/src/Build_manual.rst similarity index 66% rename from doc/src/Manual_build.rst rename to doc/src/Build_manual.rst index 518af20997..129e256cfd 100644 --- a/doc/src/Manual_build.rst +++ b/doc/src/Build_manual.rst @@ -1,5 +1,5 @@ -Building the LAMMPS manual -************************** +Build the LAMMPS documentation +============================== Depending on how you obtained LAMMPS and whether you have built the manual yourself, this directory has a number of sub-directories and @@ -39,23 +39,45 @@ a. You can "fetch" the current HTML and PDF files from the LAMMPS web will not, unless you update your local repository). b. You can build the HTML or PDF files yourself, by typing ``make html`` - or ``make pdf``. This requires various tools and files. Some of them - have to be installed (more on that below). For the rest the build - process will attempt to download and install them into a python - virtual environment and local folders. This download is required - only once, unless you type ``make clean-all``. After that, viewing and - processing of the documentation can be done without internet access. + or ``make pdf`` in the ``doc`` folder. This requires various tools + and files. Some of them have to be installed (see below). For the + rest the build process will attempt to download and install them into + a python virtual environment and local folders. -A current version of the manual (latest patch release, aka unstable branch) -is is available online at: `https://lammps.sandia.gov/doc/Manual.html `_ -A version of the manual corresponding to the ongoing development -(aka master branch) is available online at: `https://docs.lammps.org/ `_ +A current version of the manual (latest patch release, aka unstable +branch) is is available online at: +`https://lammps.sandia.gov/doc/Manual.html +`_ A version of the manual +corresponding to the ongoing development (aka master branch) is +available online at: `https://docs.lammps.org/ +`_ ----------- +Build using GNU make +-------------------- -The generation of all documentation is managed by the Makefile in the -doc directory. The following documentation related ``make`` commands are -available: +The LAMMPS manual is written in `reStructuredText `_ format which +can be translated to different output format using the `Sphinx +`_ document generator tool. It also incorporates programmer +documentation extracted from the LAMMPS C++ sources through the `Doxygen +`_ program. Currently the translation to HTML, PDF +(via LaTeX), ePUB (for many e-book readers) and MOBI (for Amazon Kindle +readers) are supported. For that to work a Python 3 interpreter, the +``doxygen`` tools and internet access to download additional files and +tools are required. This download is usually only required once or +after the documentation folder is returned to a pristine state with +``make clean-all``. + +.. _rst: https://docutils.readthedocs.io/en/sphinx-docs/user/rst/quickstart.html +.. _sphinx: https://www.sphinx-doc.org + +For the documentation build a python virtual environment is set up in +the folder ``doc/docenv`` and various python packages are installed into +that virtual environment via the ``pip`` tool. For rendering embedded +LaTeX code also the `MathJax `_ and the +`Polyfill `_ JavaScript engines need to be downloaded. + +The actual translation is then done via ``make`` commands in the doc +folder. The following ``make`` commands are available: .. code-block:: bash @@ -76,66 +98,79 @@ available: ---------- -Installing prerequisites for HTML build -======================================= +Build using CMake +----------------- + +It is also possible to create the HTML version (and **only** the HTML +version) of the manual within the :doc:`CMake build directory +`. The reason for this option is to include the +installation of the HTML manual pages into the "install" step when +installing LAMMPS after the CMake build via ``cmake --build . --target +install``. The documentation build is included in the default build +target, but can also be requested independently with +``cmake --build . --target doc``. + +.. code-block:: bash + + -D BUILD_DOC=value # yes or no (default) + +---------- + +Prerequisites for HTML +---------------------- To run the HTML documentation build toolchain, python 3, git, doxygen, and virtualenv have to be installed locally. Here are instructions for common setups: -Ubuntu ------- +.. tabs:: -.. code-block:: bash + .. tab:: Ubuntu - sudo apt-get install python-virtualenv git doxygen + .. code-block:: bash -Fedora (up to version 21) and Red Hat Enterprise Linux or CentOS (up to version 7.x) ------------------------------------------------------------------------------------- + sudo apt-get install python-virtualenv git doxygen -.. code-block:: bash + .. tab:: RHEL or CentOS (Version 7.x) - sudo yum install python3-virtualenv git doxygen + .. code-block:: bash -Fedora (since version 22) -------------------------- + sudo yum install python3-virtualenv git doxygen -.. code-block:: bash + .. tab:: Fedora or RHEL/CentOS (8.x or later) - sudo dnf install python3-virtualenv git doxygen + .. code-block:: bash -MacOS X -------- + sudo dnf install python3-virtualenv git doxygen -Python 3 -^^^^^^^^ + .. tab:: MacOS X -Download the latest Python 3 MacOS X package from -`https://www.python.org `_ -and install it. This will install both Python 3 -and pip3. + *Python 3* -virtualenv -^^^^^^^^^^ + Download the latest Python 3 MacOS X package from + `https://www.python.org `_ and install it. + This will install both Python 3 and pip3. -Once Python 3 is installed, open a Terminal and type + *virtualenv* -.. code-block:: bash + Once Python 3 is installed, open a Terminal and type - pip3 install virtualenv + .. code-block:: bash -This will install virtualenv from the Python Package Index. + pip3 install virtualenv -Installing prerequisites for PDF build -====================================== + This will install virtualenv from the Python Package Index. + +Prerequisites for PDF +--------------------- In addition to the tools needed for building the HTML format manual, a working LaTeX installation with support for PDFLaTeX and a selection of LaTeX styles/packages are required. To run the PDFLaTeX translation the ``latexmk`` script needs to be installed as well. -Installing prerequisites for e-book reader builds -================================================= +Prerequisites for ePUB and MOBI +------------------------------- In addition to the tools needed for building the HTML format manual, a working LaTeX installation with a few add-on LaTeX packages @@ -152,12 +187,12 @@ files, so you could download and view the PDF version as an alternative. Instructions for Developers -=========================== +--------------------------- When adding new styles or options to the LAMMPS code, corresponding documentation is required and either existing files in the ``src`` -folder need to be updated or new files added. These files are written -in `reStructuredText `_ markup for translation with the Sphinx tool. +folder need to be updated or new files added. These files are written in +`reStructuredText `_ markup for translation with the Sphinx tool. Before contributing any documentation, please check that both the HTML and the PDF format documentation can translate without errors. Please also diff --git a/doc/src/Manual.rst b/doc/src/Manual.rst index 8940c507b7..46eff9859c 100644 --- a/doc/src/Manual.rst +++ b/doc/src/Manual.rst @@ -19,10 +19,10 @@ all LAMMPS development is coordinated. ---------- -The content for this manual is part of the LAMMPS distribution. You -can build a local copy of the Manual as HTML pages or a PDF file, by -following the steps on the :doc:`Manual build ` page. -The manual is organized in two parts: +The content for this manual is part of the LAMMPS distribution. You can +build a local copy of the Manual as HTML pages or a PDF file, by +following the steps on the :doc:`Build_manual` page. The manual is +organized in two parts: 1) the :ref:`User documentation ` for how to install and use LAMMPS and 2) the :ref:`Programmer documentation ` for how to write programs using the LAMMPS library from different @@ -60,7 +60,6 @@ User Documentation Examples Tools Errors - Manual_build Programmer Documentation ************************ From a89741f7f653d43b888ec1da8f2adb581caf24a8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 8 Oct 2020 08:32:15 -0400 Subject: [PATCH 159/182] more 'doc page' to 'page' changes --- doc/src/Build_extras.rst | 2 +- doc/src/Build_make.rst | 4 ++-- doc/src/Build_package.rst | 4 ++-- doc/src/Build_settings.rst | 13 ++++++------- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/doc/src/Build_extras.rst b/doc/src/Build_extras.rst index 7d778ada3d..5ef29fbca1 100644 --- a/doc/src/Build_extras.rst +++ b/doc/src/Build_extras.rst @@ -18,7 +18,7 @@ in addition to $ make yes-name -as described on the :doc:`Build_package ` doc page. +as described on the :doc:`Build_package ` page. For a CMake build there may be additional optional or required variables to set. For a build with make, a provided library under the diff --git a/doc/src/Build_make.rst b/doc/src/Build_make.rst index cd71fd46e6..06f87fe904 100644 --- a/doc/src/Build_make.rst +++ b/doc/src/Build_make.rst @@ -27,14 +27,14 @@ additional tools to be available and functioning. * a few shell utilities: ``ls``, ``mv``, ``ln``, ``rm``, ``grep``, ``sed``, ``tr``, ``cat``, ``touch``, ``diff``, ``dirname`` * python (optional, required for ``make lib-`` in the src folder). python scripts are currently tested with python 2.7 and 3.6. The procedure - for :doc:`building the documentation ` requires python 3. + for :doc:`building the documentation ` requires python 3.5 or later. Getting started ^^^^^^^^^^^^^^^ To include LAMMPS packages (i.e. optional commands and styles) you must enable (or "install") them first, as discussed on the :doc:`Build -package ` doc page. If a packages requires (provided or +package ` page. If a packages requires (provided or external) libraries, you must configure and build those libraries **before** building LAMMPS itself and especially **before** enabling such a package with ``make yes-``. :doc:`Building LAMMPS with diff --git a/doc/src/Build_package.rst b/doc/src/Build_package.rst index 72f7ba74f3..b171479a76 100644 --- a/doc/src/Build_package.rst +++ b/doc/src/Build_package.rst @@ -7,7 +7,7 @@ rigid-body constraints are in packages. In the src directory, each package is a sub-directory with the package name in capital letters. An overview of packages is given on the :doc:`Packages ` doc -page. Brief overviews of each package are on the :doc:`Packages details ` doc page. +page. Brief overviews of each package are on the :doc:`Packages details ` page. When building LAMMPS, you can choose to include or exclude each package. In general there is no need to include a package if you @@ -25,7 +25,7 @@ when building that executable. For the majority of packages, if you follow the single step below to include it, you can then build LAMMPS exactly the same as you would without any packages installed. A few packages may require additional -steps, as explained on the :doc:`Build extras ` doc page. +steps, as explained on the :doc:`Build extras ` page. These links take you to the extra instructions for those select packages: diff --git a/doc/src/Build_settings.rst b/doc/src/Build_settings.rst index 9618d7e5a4..caa6042a51 100644 --- a/doc/src/Build_settings.rst +++ b/doc/src/Build_settings.rst @@ -122,7 +122,7 @@ communication can be costly). A breakdown of these timings is printed to the screen at the end of a run when using the :doc:`kspace_style pppm ` command. The :doc:`Screen and logfile output ` -doc page gives more details. A more detailed (and time consuming) +page gives more details. A more detailed (and time consuming) report of the FFT performance is generated with the :doc:`kspace_modify fftbench yes ` command. @@ -266,12 +266,11 @@ in neighbor lists for storing special bonds info). Image flags store 3 values per atom in a single integer which count the number of times an atom has moved through the periodic box in each -dimension. See the :doc:`dump ` doc page for a discussion. If an -atom moves through the periodic box more than this limit, the value will -"roll over", e.g. from 511 to -512, which can cause diagnostics like the -mean-squared displacement, as calculated by the :doc:`compute msd -` command, to be faulty. - +dimension. See the :doc:`dump ` manual page for a discussion. If +an atom moves through the periodic box more than this limit, the value +will "roll over", e.g. from 511 to -512, which can cause diagnostics +like the mean-squared displacement, as calculated by the :doc:`compute +msd ` command, to be faulty. Also note that the GPU package requires its lib/gpu library to be compiled with the same size setting, or the link will fail. A CMake From 677e8afdc5c0a35a34fbbd4c1d8f3bca46262443 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 8 Oct 2020 10:32:02 -0400 Subject: [PATCH 160/182] update section headlines --- doc/src/Library_add.rst | 4 ++-- doc/src/Library_objects.rst | 4 ++-- doc/src/Library_scatter.rst | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/src/Library_add.rst b/doc/src/Library_add.rst index d35ba5616b..8777ebbcad 100644 --- a/doc/src/Library_add.rst +++ b/doc/src/Library_add.rst @@ -1,5 +1,5 @@ -Extending the Library interface -=============================== +Extending the C API +=================== The functionality of the LAMMPS library interface has historically been motivated by the needs of its users. Functions have been added diff --git a/doc/src/Library_objects.rst b/doc/src/Library_objects.rst index 5ce03f84a3..eed14b3a05 100644 --- a/doc/src/Library_objects.rst +++ b/doc/src/Library_objects.rst @@ -1,5 +1,5 @@ -Retrieving or setting properties of LAMMPS objects -================================================== +Compute, fixes, variables +========================= This section documents accessing or modifying data stored by computes, fixes, or variables in LAMMPS using the following functions: diff --git a/doc/src/Library_scatter.rst b/doc/src/Library_scatter.rst index 1bbce6cc4e..40a79c2d9b 100644 --- a/doc/src/Library_scatter.rst +++ b/doc/src/Library_scatter.rst @@ -1,5 +1,5 @@ -Per-atom scatter/gather operations -================================== +Scatter/gather operations +========================= This section has functions which gather per-atom data from one or more processors into a contiguous global list ordered by atom ID. The same From 4f4bc427aeb16a350300860b71f7fe030494415b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 8 Oct 2020 21:40:37 -0400 Subject: [PATCH 161/182] implement LAMMPS_LIB_NO_MPI to LAMMPS_LIB_MPI change --- cmake/CMakeLists.txt | 1 - doc/src/Library.rst | 26 +++++++++++++++--------- src/library.cpp | 12 ++++++----- src/library.h | 4 ++-- unittest/c-library/test_library_open.cpp | 1 + 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 9bf591665a..aadf448b9a 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -650,7 +650,6 @@ if(BUILD_LAMMPS_SHELL) message(WARNING "The LAMMPS shell needs LAMMPS_EXCEPTIONS enabled for full functionality") endif() add_executable(lammps-shell ${LAMMPS_TOOLS_DIR}/lammps-shell/lammps-shell.cpp) - target_compile_definitions(lammps-shell PRIVATE -DLAMMPS_LIB_NO_MPI) target_link_libraries(lammps-shell PRIVATE lammps PkgConfig::READLINE) install(TARGETS lammps-shell EXPORT LAMMPS_Targets DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() diff --git a/doc/src/Library.rst b/doc/src/Library.rst index e380b74806..058b0413b4 100644 --- a/doc/src/Library.rst +++ b/doc/src/Library.rst @@ -58,16 +58,22 @@ functions of the C language API require an argument containing a "handle" in the form of a ``void *`` type variable, which points to the location of a LAMMPS class instance. -The ``library.h`` header file by default includes the ``mpi.h`` header -for an MPI library, so it must be present when compiling code using the -library interface. This usually must be the header from the same MPI -library as the LAMMPS library was compiled with. The exception is when -LAMMPS was compiled in serial mode using the ``STUBS`` MPI library. In -that case the calling code may be compiled with a different MPI library -so long as :cpp:func:`lammps_open_no_mpi` is called to create a -LAMMPS instance. Then you may set the define ``-DLAMMPS_LIB_NO_MPI`` -when compiling your code and the inclusion of ``mpi.h`` will be skipped -and consequently the function :cpp:func:`lammps_open` may not be used. +The ``library.h`` header file by default does not include the ``mpi.h`` +header file and thus hides the :cpp:func:`lammps_open` function which +requires the declaration of the ``MPI_comm`` data type. This is only +a problem when the communicator that would be passed is different from +``MPI_COMM_WORLD``. Otherwise calling :cpp:func:`lammps_open_no_mpi` +will work just as well. To make :cpp:func:`lammps_open` available, +you need to compile the code with ``-DLAMMPS_LIB_MPI`` or add the line +``#define LAMMPS_LIB_MPI 1`` before ``#include "library.h"``. + +Please note the ``mpi.h`` file must usually be the same (and thus the +MPI library in use) for the LAMMPS code and library and the calling code. +The exception is when LAMMPS was compiled in serial mode using the +``STUBS`` MPI library. In that case the calling code may be compiled +with a different MPI library so long as :cpp:func:`lammps_open_no_mpi` +is called to create a LAMMPS instance. In that case each MPI rank will +run LAMMPS in serial mode. .. admonition:: Errors versus exceptions :class: note diff --git a/src/library.cpp b/src/library.cpp index 05fcccd84d..9131f1e422 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -14,6 +14,7 @@ // C style library interface to LAMMPS. // See the manual for detailed documentation. +#define LAMMPS_LIB_MPI 1 #include "library.h" #include @@ -140,11 +141,12 @@ fails a null pointer is returned. .. note:: - This function is not declared when the code linking to the LAMMPS - library interface is compiled with ``-DLAMMPS_LIB_NO_MPI``, or - contains a ``#define LAMMPS_LIB_NO_MPI 1`` statement before - ``#include "library.h"``. In that case, you must use the - :cpp:func:`lammps_open_no_mpi` function. + This function is **only** declared when the code using the LAMMPS + ``library.h`` include file is compiled with ``-DLAMMPS_LIB_MPI``, + or contains a ``#define LAMMPS_LIB_MPI 1`` statement before + ``#include "library.h"``. Otherwise you can only use the + :cpp:func:`lammps_open_no_mpi` or :cpp:func:`lammps_open_fortran` + functions. *See also* :cpp:func:`lammps_open_no_mpi`, :cpp:func:`lammps_open_fortran` diff --git a/src/library.h b/src/library.h index 68ae74740a..36b07a4fe5 100644 --- a/src/library.h +++ b/src/library.h @@ -32,7 +32,7 @@ /* To allow including the library interface without MPI */ -#if !defined(LAMMPS_LIB_NO_MPI) +#if defined(LAMMPS_LIB_MPI) #include #endif @@ -87,7 +87,7 @@ extern "C" { * Library functions to create/destroy an instance of LAMMPS * ---------------------------------------------------------------------- */ -#if !defined(LAMMPS_LIB_NO_MPI) +#if defined(LAMMPS_LIB_MPI) void *lammps_open(int argc, char **argv, MPI_Comm comm, void **ptr); #endif void *lammps_open_no_mpi(int argc, char **argv, void **ptr); diff --git a/unittest/c-library/test_library_open.cpp b/unittest/c-library/test_library_open.cpp index a948295017..d6234c1c04 100644 --- a/unittest/c-library/test_library_open.cpp +++ b/unittest/c-library/test_library_open.cpp @@ -1,6 +1,7 @@ // unit tests creating LAMMPS instances via the library interface #include "lammps.h" +#define LAMMPS_LIB_MPI 1 #include "library.h" #include // for stdin, stdout #include From 49ebc5ac40c2c49937f42bb7f205d828b327f0b6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 8 Oct 2020 22:32:08 -0400 Subject: [PATCH 162/182] update versionadded date --- src/library.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/library.cpp b/src/library.cpp index 9131f1e422..ad6ba34804 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -578,7 +578,7 @@ compiler/runtime. A suitable buffer for a C-style string has to be provided and its length. If the assembled text will be truncated to not overflow this buffer. -.. versionadded:: 6Oct2020 +.. versionadded:: 9Oct2020 \endverbatim * @@ -4081,7 +4081,7 @@ This function checks if the current LAMMPS instance a *category* ID of the given *name* exists. Valid categories are: *compute*\ , *dump*\ , *fix*\ , *group*\ , *molecule*\ , *region*\ , and *variable*\ . -.. versionadded:: 6Oct2020 +.. versionadded:: 9Oct2020 \endverbatim * @@ -4149,7 +4149,7 @@ are defined in the current LAMMPS instance. Please see :cpp:func:`lammps_has_id` for a list of valid categories. -.. versionadded:: 6Oct2020 +.. versionadded:: 9Oct2020 \endverbatim * @@ -4189,7 +4189,7 @@ exceeds the length of the buffer, it will be truncated accordingly. If the index is out of range, the function returns 0 and *buffer* is set to an empty string, otherwise 1. -.. versionadded:: 6Oct2020 +.. versionadded:: 9Oct2020 \endverbatim * From 90d511bc86dab6c16c2b35a39581bb1d0becdd54 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 8 Oct 2020 22:32:33 -0400 Subject: [PATCH 163/182] add wrappers for new library functions --- python/lammps.py | 107 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 104 insertions(+), 3 deletions(-) diff --git a/python/lammps.py b/python/lammps.py index 4982c11b39..f571557488 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -348,8 +348,13 @@ class lammps(object): self.lib.lammps_neighlist_element_neighbors.argtypes = [c_void_p, c_int, c_int, POINTER(c_int), POINTER(c_int), POINTER(POINTER(c_int))] self.lib.lammps_neighlist_element_neighbors.restype = None + self.lib.lammps_is_running.argtypes = [c_void_p] + self.lib.lammps_is_running.restype = c_int + + self.lib.lammps_force_timeout.argtypes = [c_void_p] + self.lib.lammps_has_error.argtypes = [c_void_p] - self.lib.lammps_has_error.restype = c_bool + self.lib.lammps_has_error.restype = c_int self.lib.lammps_get_last_error_message.argtypes = [c_void_p, c_char_p, c_int] self.lib.lammps_get_last_error_message.restype = c_int @@ -366,16 +371,24 @@ class lammps(object): self.lib.lammps_config_package_name.argtypes = [c_int, c_char_p, c_int] - self.lib.lammps_has_style.argtypes = [c_void_p, c_char_p, c_char_p] - self.lib.lammps_set_variable.argtypes = [c_void_p, c_char_p, c_char_p] + self.lib.lammps_has_style.argtypes = [c_void_p, c_char_p, c_char_p] + self.lib.lammps_style_count.argtypes = [c_void_p, c_char_p] self.lib.lammps_style_name.argtypes = [c_void_p, c_char_p, c_int, c_char_p, c_int] + self.lib.lammps_has_id.argtypes = [c_void_p, c_char_p, c_char_p] + + self.lib.lammps_id_count.argtypes = [c_void_p, c_char_p] + + self.lib.lammps_id_name.argtypes = [c_void_p, c_char_p, c_int, c_char_p, c_int] + self.lib.lammps_version.argtypes = [c_void_p] + self.lib.lammps_get_os_info.argtypes = [c_char_p, c_int] + self.lib.lammps_get_mpi_comm.argtypes = [c_void_p] self.lib.lammps_decode_image_flags.argtypes = [self.c_imageint, POINTER(c_int*3)] @@ -553,6 +566,21 @@ class lammps(object): # ------------------------------------------------------------------------- + def get_os_info(self): + """Return a string with information about the OS and compiler runtime + + This is a wrapper around the :cpp:func:`lammps_get_os_info` function of the C-library interface. + + :return: OS info string + :rtype: string + """ + + sb = create_string_buffer(512) + self.lib.lammps_get_os_info(sb,512) + return sb + + # ------------------------------------------------------------------------- + def get_mpi_comm(self): """Get the MPI communicator in use by the current LAMMPS instance @@ -1424,6 +1452,36 @@ class lammps(object): # ------------------------------------------------------------------------- + @property + def is_running(self): + """ Report whether being called from a function during a run or a minimization + + Various LAMMPS commands must not be called during an ongoing + run or minimization. This property allows to check for that. + This is a wrapper around the :cpp:func:`lammps_is_running` + function of the library interface. + + :return: True when called during a run otherwise false + :rtype: bool + """ + return self.lib.lammps_is_running(self.lmp) == 1 + + # ------------------------------------------------------------------------- + + @property + def force_timeout(self): + """ Trigger an immediate timeout, i.e. a "soft stop" of a run. + + This function allows to cleanly stop an ongoing run or minimization + at the next loop iteration. + This is a wrapper around the :cpp:func:`lammps_force_timeout` + function of the library interface. + + """ + self.lib.lammps_force_timeout(self.lmp) + + # ------------------------------------------------------------------------- + @property def has_exceptions(self): """ Report whether the LAMMPS shared library was compiled with C++ @@ -1562,6 +1620,49 @@ class lammps(object): # ------------------------------------------------------------------------- + def has_id(self, category, name): + """Returns whether a given ID name is available in a given category + + This is a wrapper around the function :cpp:func:`lammps_has_id` + of the library interface. + + :param category: name of category + :type category: string + :param name: name of the ID + :type name: string + + :return: true if ID is available in given category + :rtype: bool + """ + return self.lib.lammps_has_id(self.lmp, category.encode(), name.encode()) != 0 + + # ------------------------------------------------------------------------- + + def available_ids(self, category): + """Returns a list of IDs available for a given category + + This is a wrapper around the functions :cpp:func:`lammps_id_count()` + and :cpp:func:`lammps_id_name()` of the library interface. + + :param category: name of category + :type category: string + + :return: list of id names in given category + :rtype: list + """ + self._available_ids = {} + + if category not in self._available_ids: + self._available_ids[category] = [] + nstyles = self.lib.lammps_id_count(self.lmp, category.encode()) + sb = create_string_buffer(100) + for idx in range(nstyles): + self.lib.lammps_id_name(self.lmp, category.encode(), idx, sb, 100) + self._available_ids[category].append(sb.value.decode()) + return self._available_ids[category] + + # ------------------------------------------------------------------------- + def set_fix_external_callback(self, fix_name, callback, caller=None): import numpy as np From 6d67fa004c31f9773d85f1c87f8fcc7ea6454020 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 8 Oct 2020 23:35:49 -0400 Subject: [PATCH 164/182] tweak formulation --- doc/src/Python_overview.rst | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/doc/src/Python_overview.rst b/doc/src/Python_overview.rst index 67f066f670..67262692a6 100644 --- a/doc/src/Python_overview.rst +++ b/doc/src/Python_overview.rst @@ -1,11 +1,12 @@ Overview ======== -The LAMMPS distribution includes a python directory with all you need to -run LAMMPS from Python. The ``python/lammps.py`` contains :doc:`the -"lammps" Python ` that wraps the LAMMPS C-library -interface. This file makes it is possible to do the following either -from a Python script, or interactively from a Python prompt: +The LAMMPS distribution includes a ``python`` directory with the Python +code needed to run LAMMPS from Python. The ``python/lammps.py`` +contains :doc:`the "lammps" Python ` that wraps the +LAMMPS C-library interface. This file makes it is possible to do the +following either from a Python script, or interactively from a Python +prompt: - create one or more instances of LAMMPS - invoke LAMMPS commands or read them from an input script @@ -13,7 +14,7 @@ from a Python script, or interactively from a Python prompt: - extract LAMMPS results - and modify internal LAMMPS data structures. -From a Python script you can do this in serial or parallel. Running +From a Python script you can do this in serial or in parallel. Running Python interactively in parallel does not generally work, unless you have a version of Python that extends Python to enable multiple instances of Python to read what you type. From 5a207247b677c543d8880c47122e063ac6e2a26c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 01:12:41 -0400 Subject: [PATCH 165/182] update version strings for next patch release --- doc/lammps.1 | 2 +- src/version.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/lammps.1 b/doc/lammps.1 index 71795325e8..970da8c313 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,4 +1,4 @@ -.TH LAMMPS "18 September 2020" "2020-09-18" +.TH LAMMPS "9 October 2020" "2020-10-09" .SH NAME .B LAMMPS \- Molecular Dynamics Simulator. diff --git a/src/version.h b/src/version.h index 84d15a17dd..ac8a6a9d6a 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "18 Sep 2020" +#define LAMMPS_VERSION "9 Oct 2020" From bfcb78d5d7c4a0601094e995da37a29380008187 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 01:42:48 -0400 Subject: [PATCH 166/182] fix bug with string passing --- src/info.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/info.cpp b/src/info.cpp index ece8ab1a3d..063578ef13 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -1252,7 +1252,7 @@ std::string Info::get_mpi_info(int &major, int &minor) MPI_Get_library_version(version,&len); #else static char version[32]; - strcpy(version,get_mpi_vendor()); + strcpy(version,get_mpi_vendor().c_str()); len = strlen(version); #endif From eb3992a69a2d841ba5b0d3fcf5d97a05e81c379d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 02:26:46 -0400 Subject: [PATCH 167/182] enable static linkage for executables when cross-compiling with MinGW --- cmake/presets/mingw-cross.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index d187586df8..1b45a4c84d 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -23,7 +23,7 @@ set(DOWNLOAD_VORO ON CACHE BOOL "" FORCE) set(DOWNLOAD_EIGEN3 ON CACHE BOOL "" FORCE) set(LAMMPS_MEMALIGN "0" CACHE STRING "" FORCE) set(CMAKE_TUNE_FLAGS "-Wno-missing-include-dirs" CACHE STRING "" FORCE) -set(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-stdcall-fixup" CACHE STRING "" FORCE) +set(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-stdcall-fixup -static" CACHE STRING "" FORCE) set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-stdcall-fixup" CACHE STRING "" FORCE) set(BUILD_TOOLS ON CACHE BOOL "" FORCE) set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/lammps-installer") From 7a9b4ef0d4d9e3207e846926559d9772fedf3a3b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 02:27:31 -0400 Subject: [PATCH 168/182] include FFTW in MinGW cross-compiler libraries. Make static/dynamic explicit --- tools/singularity/fedora32_mingw.def | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/tools/singularity/fedora32_mingw.def b/tools/singularity/fedora32_mingw.def index e89e5f3b39..830535e0c4 100644 --- a/tools/singularity/fedora32_mingw.def +++ b/tools/singularity/fedora32_mingw.def @@ -18,15 +18,14 @@ From: fedora:32 mingw32-cpp mingw32-gcc mingw32-gcc-gfortran mingw32-gcc-c++ \ mingw64-cpp mingw64-gcc mingw64-gcc-gfortran mingw64-gcc-c++ \ mingw32-libgomp mingw64-libgomp \ - mingw32-winpthreads-static mingw64-winpthreads-static \ + mingw32-winpthreads mingw64-winpthreads mingw32-winpthreads-static mingw64-winpthreads-static \ mingw32-eigen3 mingw64-eigen3 \ - mingw32-libjpeg-turbo-static mingw64-libjpeg-turbo-static \ - mingw32-libpng-static mingw64-libpng-static \ - mingw32-readline-static mingw64-readline-static \ - mingw32-termcap-static mingw64-termcap-static \ - mingw32-zlib-static mingw64-zlib-static \ - mingw64-expat-static mingw32-expat-static \ - mingw32-sqlite-static mingw64-sqlite-static \ + mingw32-libjpeg-turbo mingw64-libjpeg-turbo mingw32-libjpeg-turbo-static mingw64-libjpeg-turbo-static \ + mingw32-libpng mingw64-libpng mingw32-libpng-static mingw64-libpng-static \ + mingw32-readline mingw64-readline mingw32-readline-static mingw64-readline-static \ + mingw32-termcap mingw64-termcap mingw32-termcap-static mingw64-termcap-static \ + mingw32-fftw mingw64-fftw mingw32-fftw-static mingw64-fftw-static \ + mingw32-zlib mingw64-zlib mingw32-zlib-static mingw64-zlib-static \ enchant python3-virtualenv doxygen latexmk \ texlive-latex-fonts texlive-pslatex texlive-collection-latexrecommended \ texlive-latex texlive-latexconfig doxygen-latex texlive-collection-latex \ From 471acb2ef85282ea83090f1365281e12d0f25b22 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 07:16:34 -0400 Subject: [PATCH 169/182] add unit tests for added APIs --- python/lammps.py | 15 +++--- unittest/python/python-capabilities.py | 63 ++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 8 deletions(-) diff --git a/python/lammps.py b/python/lammps.py index f571557488..00e12c3e64 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -1468,7 +1468,6 @@ class lammps(object): # ------------------------------------------------------------------------- - @property def force_timeout(self): """ Trigger an immediate timeout, i.e. a "soft stop" of a run. @@ -1650,16 +1649,16 @@ class lammps(object): :return: list of id names in given category :rtype: list """ - self._available_ids = {} - if category not in self._available_ids: - self._available_ids[category] = [] - nstyles = self.lib.lammps_id_count(self.lmp, category.encode()) + categories = ['compute','dump','fix','group','molecule','region','variable'] + available_ids = [] + if category in categories: + num = self.lib.lammps_id_count(self.lmp, category.encode()) sb = create_string_buffer(100) - for idx in range(nstyles): + for idx in range(num): self.lib.lammps_id_name(self.lmp, category.encode(), idx, sb, 100) - self._available_ids[category].append(sb.value.decode()) - return self._available_ids[category] + available_ids.append(sb.value.decode()) + return available_ids # ------------------------------------------------------------------------- diff --git a/unittest/python/python-capabilities.py b/unittest/python/python-capabilities.py index e5dd63707b..2b47b8ca90 100644 --- a/unittest/python/python-capabilities.py +++ b/unittest/python/python-capabilities.py @@ -60,5 +60,68 @@ class PythonCapabilities(unittest.TestCase): pairs = self.lmp.available_styles('pair') self.assertIn('lj/cut', pairs) + def test_has_id(self): + self.lmp.command('fix charge all property/atom q ghost yes') + self.lmp.command('region box block 0 1 0 1 0 1') + self.lmp.command('create_box 1 box') + self.lmp.command('group none empty') + self.lmp.command('variable test index 1') + self.assertTrue(self.lmp.has_id('compute', 'thermo_temp')) + self.assertTrue(self.lmp.has_id('compute', 'thermo_press')) + self.assertTrue(self.lmp.has_id('compute', 'thermo_pe')) + self.assertFalse(self.lmp.has_id('compute', 'xxx')) + self.assertFalse(self.lmp.has_id('dump', 'xxx')) + self.assertTrue(self.lmp.has_id('fix', 'charge')) + self.assertFalse(self.lmp.has_id('fix', 'xxx')) + self.assertTrue(self.lmp.has_id('group', 'all')) + self.assertTrue(self.lmp.has_id('group', 'none')) + self.assertFalse(self.lmp.has_id('group', 'xxx')) + self.assertTrue(self.lmp.has_id('region', 'box')) + self.assertFalse(self.lmp.has_id('region', 'xxx')) + self.assertTrue(self.lmp.has_id('variable', 'test')) + self.assertFalse(self.lmp.has_id('variable', 'xxx')) + + def test_available_id(self): + self.lmp.command('fix charge all property/atom q ghost yes') + self.lmp.command('region box block 0 1 0 1 0 1') + self.lmp.command('create_box 1 box') + self.lmp.command('group none empty') + self.lmp.command('variable test index 1') + ids = self.lmp.available_ids('compute') + self.assertIn('thermo_pe', ids) + self.assertEqual(len(ids),3) + ids = self.lmp.available_ids('dump') + self.assertEqual(len(ids),0) + ids = self.lmp.available_ids('fix') + self.assertIn('charge', ids) + self.assertEqual(len(ids),1) + ids = self.lmp.available_ids('group') + self.assertIn('none', ids) + self.assertEqual(len(ids),2) + ids = self.lmp.available_ids('molecule') + self.assertEqual(len(ids),0) + ids = self.lmp.available_ids('region') + self.assertIn('box', ids) + self.assertEqual(len(ids),1) + ids = self.lmp.available_ids('variable') + self.assertIn('test', ids) + self.assertEqual(len(ids),1) + + def test_is_running(self): + self.assertFalse(self.lmp.is_running) + + def test_force_timeout(self): + self.lmp.command('region box block 0 1 0 1 0 1') + self.lmp.command('create_box 1 box') + self.lmp.command('mass * 1.0') + self.lmp.command('run 10') + self.assertEqual(self.lmp.extract_global('ntimestep'),10) + self.lmp.force_timeout() + self.lmp.command('run 10') + self.assertEqual(self.lmp.extract_global('ntimestep'),10) + self.lmp.command('timer timeout off') + self.lmp.command('run 10') + self.assertEqual(self.lmp.extract_global('ntimestep'),20) + if __name__ == "__main__": unittest.main() From 38bf231361444ac1ab335ec48ece12c6fa938efe Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 07:19:02 -0400 Subject: [PATCH 170/182] silence sphinx warning --- doc/src/pair_coul_tt.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/pair_coul_tt.rst b/doc/src/pair_coul_tt.rst index 165355bd22..734404d3e4 100644 --- a/doc/src/pair_coul_tt.rst +++ b/doc/src/pair_coul_tt.rst @@ -118,7 +118,7 @@ none ---------- -.. _Thole1: +.. _Thole2: **(Thole)** Chem Phys, 59, 341 (1981). From 188e1c382883bf625233b42bf02f5693cd5b677a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 07:22:16 -0400 Subject: [PATCH 171/182] correct versionadded dates --- doc/src/Fortran.rst | 2 +- doc/src/Tools.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/Fortran.rst b/doc/src/Fortran.rst index 038bea7e17..6ad8d75941 100644 --- a/doc/src/Fortran.rst +++ b/doc/src/Fortran.rst @@ -24,7 +24,7 @@ of the source files: the lammps.f90 file needs to be compiled first, since it provides the ``LIBLAMMPS`` module that is imported by the Fortran code using the interface. -.. versionadded:: 6Oct2020 +.. versionadded:: 9Oct2020 .. admonition:: Work in Progress :class: note diff --git a/doc/src/Tools.rst b/doc/src/Tools.rst index 6785e33821..dbd01f070c 100644 --- a/doc/src/Tools.rst +++ b/doc/src/Tools.rst @@ -403,7 +403,7 @@ The file was provided by Alessandro Luigi Sellerio LAMMPS shell ------------ -.. versionadded:: 6Oct2020 +.. versionadded:: 9Oct2020 Overview ======== From bafba4235c185249a2cd88f3f0bcc815949765be Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 07:26:01 -0400 Subject: [PATCH 172/182] include versionadded tags --- python/lammps.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/python/lammps.py b/python/lammps.py index 00e12c3e64..19883e266a 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -1461,6 +1461,8 @@ class lammps(object): This is a wrapper around the :cpp:func:`lammps_is_running` function of the library interface. + .. versionadded:: 9Oct2020 + :return: True when called during a run otherwise false :rtype: bool """ @@ -1476,6 +1478,7 @@ class lammps(object): This is a wrapper around the :cpp:func:`lammps_force_timeout` function of the library interface. + .. versionadded:: 9Oct2020 """ self.lib.lammps_force_timeout(self.lmp) @@ -1625,6 +1628,8 @@ class lammps(object): This is a wrapper around the function :cpp:func:`lammps_has_id` of the library interface. + .. versionadded:: 9Oct2020 + :param category: name of category :type category: string :param name: name of the ID @@ -1643,6 +1648,8 @@ class lammps(object): This is a wrapper around the functions :cpp:func:`lammps_id_count()` and :cpp:func:`lammps_id_name()` of the library interface. + .. versionadded:: 9Oct2020 + :param category: name of category :type category: string From ca3d10fa39d5e41bfc30b9d48ca02484a1b06a45 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 07:37:25 -0400 Subject: [PATCH 173/182] need to define LAMMPS_LIB_MPI --- doc/src/Library_execute.rst | 1 + examples/COUPLE/simple/simple.c | 1 + 2 files changed, 2 insertions(+) diff --git a/doc/src/Library_execute.rst b/doc/src/Library_execute.rst index deed99f456..ac2de17ba2 100644 --- a/doc/src/Library_execute.rst +++ b/doc/src/Library_execute.rst @@ -32,6 +32,7 @@ Below is a short example using some of these functions. .. code-block:: C + #define LAMMPS_LIB_MPI #include "library.h" #include #include diff --git a/examples/COUPLE/simple/simple.c b/examples/COUPLE/simple/simple.c index a5ce281b1d..603ff270b7 100644 --- a/examples/COUPLE/simple/simple.c +++ b/examples/COUPLE/simple/simple.c @@ -23,6 +23,7 @@ #include #include #include +#define LAMMPS_LIB_MPI #include "library.h" /* this is a LAMMPS include file */ int main(int narg, char **arg) From 5457accb3d753ed45122d5de12f7602f727db551 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 07:52:36 -0400 Subject: [PATCH 174/182] make the legacy fortran wrapper work (again) --- examples/COUPLE/fortran/README | 6 +- examples/COUPLE/fortran/libfwrapper.c | 36 +------- examples/COUPLE/simple/README | 28 +++--- examples/COUPLE/simple/simple.f90 | 2 +- examples/COUPLE/simple/simple_f77.f90 | 125 ++++++++++++++++++++++++++ 5 files changed, 148 insertions(+), 49 deletions(-) create mode 100644 examples/COUPLE/simple/simple_f77.f90 diff --git a/examples/COUPLE/fortran/README b/examples/COUPLE/fortran/README index 5e5a4fe504..cc2ab19f27 100644 --- a/examples/COUPLE/fortran/README +++ b/examples/COUPLE/fortran/README @@ -1,7 +1,7 @@ -libfwrapper.c is a C file that wraps the LAMMPS library API -in src/library.h so that it can be called from Fortran. +libfwrapper.c is a C file that wraps a few functions of the LAMMPS +library API in src/library.h so that it can be called from Fortran. -See the couple/simple/simple.f90 program for an example of a Fortran +See the couple/simple/simple_f77.f90 program for an example of a Fortran code that does this. See the README file in that dir for instructions on how to build a diff --git a/examples/COUPLE/fortran/libfwrapper.c b/examples/COUPLE/fortran/libfwrapper.c index 844324362b..e25cdc94c8 100644 --- a/examples/COUPLE/fortran/libfwrapper.c +++ b/examples/COUPLE/fortran/libfwrapper.c @@ -29,14 +29,7 @@ void lammps_open_(MPI_Fint *comm, int64_t *ptr) { - void *obj; - MPI_Comm ccomm; - - /* convert MPI communicator from fortran to c */ - ccomm = MPI_Comm_f2c(*comm); - - lammps_open(0,NULL,ccomm,&obj); - *ptr = (int64_t) obj; + *ptr = (int64_t) lammps_open_fortran(0,NULL,*comm); } /* no-MPI version of the wrapper from above. */ @@ -107,30 +100,3 @@ void lammps_get_natoms_(int64_t *ptr, MPI_Fint *natoms) *natoms = lammps_get_natoms(obj); } -/* wrapper to copy coordinates from lammps to fortran */ - -/* NOTE: this is now out-of-date, needs to be updated to lammps_gather_atoms() - -void lammps_get_coords_(int64_t *ptr, double *coords) -{ - void *obj; - obj = (void *) *ptr; - - lammps_get_coords(obj,coords); -} - -*/ - -/* wrapper to copy coordinates from fortran to lammps */ - -/* NOTE: this is now out-of-date, needs to be updated to lammps_scatter_atoms() - -void lammps_put_coords_(int64_t *ptr, double *coords) -{ - void *obj; - obj = (void *) *ptr; - - lammps_put_coords(obj,coords); -} - -*/ diff --git a/examples/COUPLE/simple/README b/examples/COUPLE/simple/README index bcd0d635b8..61ee0c324e 100644 --- a/examples/COUPLE/simple/README +++ b/examples/COUPLE/simple/README @@ -7,18 +7,21 @@ code to perform a coupled calculation. simple.cpp is the C++ driver simple.c is the C driver -simple.f90 is the Fortran driver +simple.f90 is the Fortran driver using the new Fortran module +simple_f77.f90 is the Fortran driver using the legacy Fortran wrapper -The 3 codes do the same thing, so you can compare them to see how to +The 4 codes do the same thing, so you can compare them to see how to drive LAMMPS from each language. See python/example/simple.py -to do something similar from Python. The Fortran driver requires a -Fortran module that uses the Fortran 03 ISO_C_BINDING module to +to do something similar from Python. The new Fortran driver requires +a Fortran module that uses the Fortran 03 ISO_C_BINDING module to interface the LAMMPS C library functions to Fortran. First build LAMMPS as a library (see examples/COUPLE/README), e.g. make mode=shlib mpi +or via CMake through settings -DBUILD_SHARED_LIBS=on + You can then build any of the driver codes with compile lines like these, which include paths to the LAMMPS library interface, and linking with FFTW (only needed if you built LAMMPS as a library with @@ -27,22 +30,27 @@ its PPPM solver). This builds the C++ driver with the LAMMPS library using the mpicxx (C++) compiler: -mpicxx -I/home/sjplimp/lammps/src -c simple.cpp -mpicxx -L/home/sjplimp/lammps/src simple.o -llammps -o simpleCC +mpicxx -I${HOME}/lammps/src -c simple.cpp +mpicxx -L${HOME}/lammps/src simple.o -llammps -o simpleCC This builds the C driver with the LAMMPS library using the mpicc (C) compiler: -mpicc -I/home/sjplimp/lammps/src -c simple.c -mpicc -L/home/sjplimp/lammps/src simple.o -llammps -o simpleC +mpicc -I${HOME}/lammps/src -c simple.c +mpicc -L${HOME}/lammps/src simple.o -llammps -o simpleC This builds the Fortran module and driver with the LAMMPS library using the mpifort (Fortran) compilers, using the Fortran module from the fortran directory: -mpifort -L/home/sjplimp/lammps/src ../../../fortran/lammps.f90 simple.f90 -llammps -o simpleF +mpifort -L${HOME}/lammps/src ../../../fortran/lammps.f90 simple.f90 -llammps -o simpleF -You then run simpleCC, simpleC, or simpleF on a parallel machine +This builds the legacy Fortran wrapper and driver with the LAMMPS library +using the mpifort (Fortran) MPI compiler wrapper (assuming GNU gfortran). + +mpifort -std=legacy -L${HOME}/lammps/src ../fortran/libfwrapper.c simple.f90 -llammps -o simpleF77 + +You then run simpleCC, simpleC, simpleF, or simpleF77 on a parallel machine on some number of processors Q with 2 arguments: % mpirun -np Q simpleCC P in.lj diff --git a/examples/COUPLE/simple/simple.f90 b/examples/COUPLE/simple/simple.f90 index aacbbfcb79..660c5624b5 100644 --- a/examples/COUPLE/simple/simple.f90 +++ b/examples/COUPLE/simple/simple.f90 @@ -29,7 +29,7 @@ PROGRAM f_driver REAL (kind=8), ALLOCATABLE :: x(:) REAL (kind=8), PARAMETER :: epsilon=0.1 - + CHARACTER (len=64) :: arg CHARACTER (len=1024) :: line diff --git a/examples/COUPLE/simple/simple_f77.f90 b/examples/COUPLE/simple/simple_f77.f90 new file mode 100644 index 0000000000..374a0748ee --- /dev/null +++ b/examples/COUPLE/simple/simple_f77.f90 @@ -0,0 +1,125 @@ +! LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator +! www.cs.sandia.gov/~sjplimp/lammps.html +! Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories +! +! 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. + +! f_driver = simple example of how an umbrella program +! can invoke LAMMPS as a library on some subset of procs +! Syntax: simpleF P in.lammps +! P = # of procs to run LAMMPS on +! must be <= # of procs the driver code itself runs on +! in.lammps = LAMMPS input script +! See README for compilation instructions + +PROGRAM f_driver + IMPLICIT NONE + INCLUDE 'mpif.h' + + INTEGER, PARAMETER :: fp=20 + INTEGER :: n, narg, ierr, me, nprocs, natoms + INTEGER :: lammps, nprocs_lammps, comm_lammps + INTEGER (kind=8) :: ptr + + REAL (kind=8), ALLOCATABLE :: x(:) + REAL (kind=8), PARAMETER :: epsilon=0.1 + + CHARACTER (len=64) :: arg + CHARACTER (len=1024) :: line + + ! setup MPI and various communicators + ! driver runs on all procs in MPI_COMM_WORLD + ! comm_lammps only has 1st P procs (could be all or any subset) + + CALL mpi_init(ierr) + + narg = command_argument_count() + + IF (narg /= 2) THEN + PRINT *, 'Syntax: simpleF P in.lammps' + CALL mpi_abort(MPI_COMM_WORLD,1,ierr) + END IF + + CALL mpi_comm_rank(MPI_COMM_WORLD,me,ierr); + CALL mpi_comm_size(MPI_COMM_WORLD,nprocs,ierr); + + CALL get_command_argument(1,arg) + READ (arg,'(I10)') nprocs_lammps + + IF (nprocs_lammps > nprocs) THEN + IF (me == 0) THEN + PRINT *, 'ERROR: LAMMPS cannot use more procs than available' + CALL mpi_abort(MPI_COMM_WORLD,2,ierr) + END IF + END IF + + lammps = 0 + IF (me < nprocs_lammps) THEN + lammps = 1 + ELSE + lammps = MPI_UNDEFINED + END IF + + CALL mpi_comm_split(MPI_COMM_WORLD,lammps,0,comm_lammps,ierr) + + ! open LAMMPS input script on rank zero + + CALL get_command_argument(2,arg) + OPEN(UNIT=fp, FILE=arg, ACTION='READ', STATUS='OLD', IOSTAT=ierr) + IF (ierr /= 0) THEN + PRINT *, 'ERROR: Could not open LAMMPS input script' + CALL mpi_abort(MPI_COMM_WORLD,3,ierr); + END IF + + ! run the input script thru LAMMPS one line at a time until end-of-file + ! driver proc 0 reads a line, Bcasts it to all procs + ! (could just send it to proc 0 of comm_lammps and let it Bcast) + ! all LAMMPS procs call lammps_command() on the line */ + + IF (lammps == 1) CALL lammps_open(comm_lammps,ptr) + + n = 0 + DO + IF (me == 0) THEN + READ (UNIT=fp, FMT='(A)', IOSTAT=ierr) line + n = 0 + IF (ierr == 0) THEN + n = LEN(TRIM(line)) + IF (n == 0 ) THEN + line = ' ' + n = 1 + END IF + END IF + END IF + CALL mpi_bcast(n,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) + IF (n == 0) EXIT + CALL mpi_bcast(line,n,MPI_CHARACTER,0,MPI_COMM_WORLD,ierr) + IF (lammps == 1) CALL lammps_command(ptr,line,n) + END DO + CLOSE(UNIT=fp) + + ! run 10 more steps followed by a single step */ + + IF (lammps == 1) THEN + CALL lammps_command(ptr,'run 10',6) + + CALL lammps_get_natoms(ptr,natoms) + print*,'natoms=',natoms + + CALL lammps_command(ptr,'run 1',5); + END IF + + ! free LAMMPS object + + IF (lammps == 1) CALL lammps_close(ptr); + + ! close down MPI + + CALL mpi_finalize(ierr) + +END PROGRAM f_driver From 74e1d0f8cf899d66e4a15cc7b7a2142d03ee0b2a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 11:15:00 -0400 Subject: [PATCH 175/182] move Tools compilation script code from CMakeLists.txt to separate Tools.cmake file --- cmake/CMakeLists.txt | 49 +++++++-------------------------------- cmake/Modules/Tools.cmake | 46 ++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 41 deletions(-) create mode 100644 cmake/Modules/Tools.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index aadf448b9a..fa5cb4bbc1 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -613,47 +613,7 @@ if(BUILD_SHARED_LIBS) endif() install(FILES ${LAMMPS_DOC_DIR}/lammps.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME ${LAMMPS_BINARY}.1) -if(BUILD_TOOLS) - add_executable(binary2txt ${LAMMPS_TOOLS_DIR}/binary2txt.cpp) - target_compile_definitions(binary2txt PRIVATE -DLAMMPS_${LAMMPS_SIZES}) - install(TARGETS binary2txt DESTINATION ${CMAKE_INSTALL_BINDIR}) - - include(CheckGeneratorSupport) - if(CMAKE_GENERATOR_SUPPORT_FORTRAN) - include(CheckLanguage) - check_language(Fortran) - if(CMAKE_Fortran_COMPILER) - enable_language(Fortran) - add_executable(chain.x ${LAMMPS_TOOLS_DIR}/chain.f) - target_link_libraries(chain.x PRIVATE ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES}) - install(TARGETS chain.x DESTINATION ${CMAKE_INSTALL_BINDIR}) - else() - message(WARNING "No suitable Fortran compiler found, skipping build of 'chain.x'") - endif() - else() - message(WARNING "CMake build doesn't support fortran, skipping build of 'chain.x'") - endif() - - enable_language(C) - get_filename_component(MSI2LMP_SOURCE_DIR ${LAMMPS_TOOLS_DIR}/msi2lmp/src ABSOLUTE) - file(GLOB MSI2LMP_SOURCES ${MSI2LMP_SOURCE_DIR}/[^.]*.c) - add_executable(msi2lmp ${MSI2LMP_SOURCES}) - target_link_libraries(msi2lmp PRIVATE ${MATH_LIBRARIES}) - install(TARGETS msi2lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) - install(FILES ${LAMMPS_DOC_DIR}/msi2lmp.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) -endif() - -if(BUILD_LAMMPS_SHELL) - find_package(PkgConfig REQUIRED) - pkg_check_modules(READLINE IMPORTED_TARGET REQUIRED readline) - if(NOT LAMMPS_EXCEPTIONS) - message(WARNING "The LAMMPS shell needs LAMMPS_EXCEPTIONS enabled for full functionality") - endif() - add_executable(lammps-shell ${LAMMPS_TOOLS_DIR}/lammps-shell/lammps-shell.cpp) - target_link_libraries(lammps-shell PRIVATE lammps PkgConfig::READLINE) - install(TARGETS lammps-shell EXPORT LAMMPS_Targets DESTINATION ${CMAKE_INSTALL_BINDIR}) -endif() - +include(Tools) include(Documentation) ############################################################################### @@ -749,6 +709,7 @@ get_target_property(DEFINES lammps COMPILE_DEFINITIONS) include(FeatureSummary) feature_summary(DESCRIPTION "The following tools and libraries have been found and configured:" WHAT PACKAGES_FOUND) message(STATUS "<<< Build configuration >>> + Operating System: ${CMAKE_SYSTEM_NAME} Build type: ${CMAKE_BUILD_TYPE} Install path: ${CMAKE_INSTALL_PREFIX} Generator: ${CMAKE_GENERATOR} using ${CMAKE_MAKE_PROGRAM} @@ -848,3 +809,9 @@ endif() if(BUILD_DOC) message(STATUS "<<< Building HTML Manual >>>") endif() +if(BUILD_TOOLS) + message(STATUS "<<< Building Tools >>>") +endif() +if(BUILD_LAMMPS_SHELL) + message(STATUS "<<< Building LAMMPS Shell >>>") +endif() diff --git a/cmake/Modules/Tools.cmake b/cmake/Modules/Tools.cmake new file mode 100644 index 0000000000..d033681c79 --- /dev/null +++ b/cmake/Modules/Tools.cmake @@ -0,0 +1,46 @@ +if(BUILD_TOOLS) + add_executable(binary2txt ${LAMMPS_TOOLS_DIR}/binary2txt.cpp) + target_compile_definitions(binary2txt PRIVATE -DLAMMPS_${LAMMPS_SIZES}) + install(TARGETS binary2txt DESTINATION ${CMAKE_INSTALL_BINDIR}) + + include(CheckGeneratorSupport) + if(CMAKE_GENERATOR_SUPPORT_FORTRAN) + include(CheckLanguage) + check_language(Fortran) + if(CMAKE_Fortran_COMPILER) + enable_language(Fortran) + add_executable(chain.x ${LAMMPS_TOOLS_DIR}/chain.f) + target_link_libraries(chain.x PRIVATE ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES}) + install(TARGETS chain.x DESTINATION ${CMAKE_INSTALL_BINDIR}) + else() + message(WARNING "No suitable Fortran compiler found, skipping build of 'chain.x'") + endif() + else() + message(WARNING "CMake build doesn't support fortran, skipping build of 'chain.x'") + endif() + + enable_language(C) + get_filename_component(MSI2LMP_SOURCE_DIR ${LAMMPS_TOOLS_DIR}/msi2lmp/src ABSOLUTE) + file(GLOB MSI2LMP_SOURCES ${MSI2LMP_SOURCE_DIR}/[^.]*.c) + add_executable(msi2lmp ${MSI2LMP_SOURCES}) + target_link_libraries(msi2lmp PRIVATE ${MATH_LIBRARIES}) + install(TARGETS msi2lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) + install(FILES ${LAMMPS_DOC_DIR}/msi2lmp.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) +endif() + +if(BUILD_LAMMPS_SHELL) + find_package(PkgConfig REQUIRED) + pkg_check_modules(READLINE IMPORTED_TARGET REQUIRED readline) + if(NOT LAMMPS_EXCEPTIONS) + message(WARNING "The LAMMPS shell needs LAMMPS_EXCEPTIONS enabled for full functionality") + endif() + add_executable(lammps-shell ${LAMMPS_TOOLS_DIR}/lammps-shell/lammps-shell.cpp) + # workaround for broken readline pkg-config file on FreeBSD + if(CMAKE_SYSTEM_NAME STREQUAL FreeBSD) + target_include_directories(lammps-shell PRIVATE /usr/local/include) + endif() + target_link_libraries(lammps-shell PRIVATE lammps PkgConfig::READLINE) + install(TARGETS lammps-shell EXPORT LAMMPS_Targets DESTINATION ${CMAKE_INSTALL_BINDIR}) +endif() + + From 84c9fcf6e90492b8e4e4e8151b697914ea0ba8a4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 11:15:15 -0400 Subject: [PATCH 176/182] add legacy warning to F77 style Fortran wrapper --- examples/COUPLE/fortran/README | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/COUPLE/fortran/README b/examples/COUPLE/fortran/README index cc2ab19f27..f5a1dd873a 100644 --- a/examples/COUPLE/fortran/README +++ b/examples/COUPLE/fortran/README @@ -6,3 +6,6 @@ code that does this. See the README file in that dir for instructions on how to build a Fortran code that uses this wrapper and links to the LAMMPS library. + +This legacy wrapper is deprecated and will be removed in a future +release of LAMMPS. Please use the Fortran 90 module instead. From 078f93139312c11ee5ab3b11f9bf1a8e4036c3d3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 11:50:53 -0400 Subject: [PATCH 177/182] add comment to explain using the LAMMPS_LIB_MPI define in example --- doc/src/Library.rst | 2 +- doc/src/Library_execute.rst | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/src/Library.rst b/doc/src/Library.rst index 058b0413b4..0eddc5afb3 100644 --- a/doc/src/Library.rst +++ b/doc/src/Library.rst @@ -65,7 +65,7 @@ a problem when the communicator that would be passed is different from ``MPI_COMM_WORLD``. Otherwise calling :cpp:func:`lammps_open_no_mpi` will work just as well. To make :cpp:func:`lammps_open` available, you need to compile the code with ``-DLAMMPS_LIB_MPI`` or add the line -``#define LAMMPS_LIB_MPI 1`` before ``#include "library.h"``. +``#define LAMMPS_LIB_MPI`` before ``#include "library.h"``. Please note the ``mpi.h`` file must usually be the same (and thus the MPI library in use) for the LAMMPS code and library and the calling code. diff --git a/doc/src/Library_execute.rst b/doc/src/Library_execute.rst index ac2de17ba2..201d9c01b0 100644 --- a/doc/src/Library_execute.rst +++ b/doc/src/Library_execute.rst @@ -32,8 +32,10 @@ Below is a short example using some of these functions. .. code-block:: C + /* define to make the otherwise hidden prototype for "lammps_open()" visible */ #define LAMMPS_LIB_MPI #include "library.h" + #include #include From 57e0e64ffe73029fc660c3def9711cfa7ad9a936 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 12:47:13 -0400 Subject: [PATCH 178/182] No MPI communicaton after MPI_Finalize() and no MPI_Finalize() unless we are initialized. --- src/library.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/library.cpp b/src/library.cpp index ad6ba34804..db05faf9fb 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -337,8 +337,15 @@ more MPI calls may be made. void lammps_mpi_finalize() { - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); + int flag; + MPI_Initialized(&flag); + if (flag) { + MPI_Finalized(&flag); + if (!flag) { + MPI_Barrier(MPI_COMM_WORLD); + MPI_Finalize(); + } + } } /* ---------------------------------------------------------------------- */ From 43f2c14c8b0d65480740f2fdfd6848a76cd83a4d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 13:24:53 -0400 Subject: [PATCH 179/182] print warning when reading data files with non-zero image flags for non-periodic boundaries --- src/atom.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/atom.cpp b/src/atom.cpp index fbf7a067a9..b8bfc1b659 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -1106,6 +1106,7 @@ void Atom::data_atoms(int n, char *buf, tagint id_offset, tagint mol_offset, // remap atom into simulation box // if atom is in my sub-domain, unpack its values + int flagx = 0, flagy = 0, flagz = 0; for (int i = 0; i < n; i++) { next = strchr(buf,'\n'); @@ -1118,15 +1119,16 @@ void Atom::data_atoms(int n, char *buf, tagint id_offset, tagint mol_offset, error->all(FLERR,"Incorrect atom format in data file"); } - int imx = 0; - int imy = 0; - int imz = 0; + int imx = 0, imy = 0, imz = 0; if (imageflag) { imx = utils::inumeric(FLERR,values[iptr],false,lmp); imy = utils::inumeric(FLERR,values[iptr+1],false,lmp); imz = utils::inumeric(FLERR,values[iptr+2],false,lmp); if ((domain->dimension == 2) && (imz != 0)) error->all(FLERR,"Z-direction image flag must be 0 for 2d-systems"); + if ((!domain->xperiodic) && (imx != 0)) flagx = 1; + if ((!domain->yperiodic) && (imy != 0)) flagy = 1; + if ((!domain->zperiodic) && (imz != 0)) flagz = 1; } imagedata = ((imageint) (imx + IMGMAX) & IMGMASK) | (((imageint) (imy + IMGMAX) & IMGMASK) << IMGBITS) | @@ -1163,6 +1165,19 @@ void Atom::data_atoms(int n, char *buf, tagint id_offset, tagint mol_offset, buf = next + 1; } + // warn if reading data with non-zero image flags for non-periodic boundaries. + // we may want to turn this into an error at some point, since this essentially + // creates invalid position information that works by accident most of the time. + + if (comm->me == 0) { + if (flagx) + error->warning(FLERR,"Non-zero imageflag(s) in x direction for non-periodic boundary"); + if (flagy) + error->warning(FLERR,"Non-zero imageflag(s) in y direction for non-periodic boundary"); + if (flagz) + error->warning(FLERR,"Non-zero imageflag(s) in z direction for non-periodic boundary"); + } + delete [] values; } From 362fe700a5ee71bfcd96c0cb9d8c9b1b9cc9e505 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 13:26:52 -0400 Subject: [PATCH 180/182] remove static libraries for cross-compiler. not used with .dll version. --- tools/singularity/fedora32_mingw.def | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tools/singularity/fedora32_mingw.def b/tools/singularity/fedora32_mingw.def index 830535e0c4..fbbce4f279 100644 --- a/tools/singularity/fedora32_mingw.def +++ b/tools/singularity/fedora32_mingw.def @@ -18,14 +18,14 @@ From: fedora:32 mingw32-cpp mingw32-gcc mingw32-gcc-gfortran mingw32-gcc-c++ \ mingw64-cpp mingw64-gcc mingw64-gcc-gfortran mingw64-gcc-c++ \ mingw32-libgomp mingw64-libgomp \ - mingw32-winpthreads mingw64-winpthreads mingw32-winpthreads-static mingw64-winpthreads-static \ + mingw32-winpthreads mingw64-winpthreads \ mingw32-eigen3 mingw64-eigen3 \ - mingw32-libjpeg-turbo mingw64-libjpeg-turbo mingw32-libjpeg-turbo-static mingw64-libjpeg-turbo-static \ - mingw32-libpng mingw64-libpng mingw32-libpng-static mingw64-libpng-static \ - mingw32-readline mingw64-readline mingw32-readline-static mingw64-readline-static \ - mingw32-termcap mingw64-termcap mingw32-termcap-static mingw64-termcap-static \ - mingw32-fftw mingw64-fftw mingw32-fftw-static mingw64-fftw-static \ - mingw32-zlib mingw64-zlib mingw32-zlib-static mingw64-zlib-static \ + mingw32-fftw mingw64-fftw \ + mingw32-libjpeg-turbo mingw64-libjpeg-turbo \ + mingw32-libpng mingw64-libpng \ + mingw32-readline mingw64-readline \ + mingw32-termcap mingw64-termcap \ + mingw32-zlib mingw64-zlib \ enchant python3-virtualenv doxygen latexmk \ texlive-latex-fonts texlive-pslatex texlive-collection-latexrecommended \ texlive-latex texlive-latexconfig doxygen-latex texlive-collection-latex \ From 97964604c6cbbb25cd9e290395b4738008b9e48a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 13:29:13 -0400 Subject: [PATCH 181/182] no point in trying a static link of executables --- cmake/presets/mingw-cross.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/presets/mingw-cross.cmake b/cmake/presets/mingw-cross.cmake index 1b45a4c84d..d187586df8 100644 --- a/cmake/presets/mingw-cross.cmake +++ b/cmake/presets/mingw-cross.cmake @@ -23,7 +23,7 @@ set(DOWNLOAD_VORO ON CACHE BOOL "" FORCE) set(DOWNLOAD_EIGEN3 ON CACHE BOOL "" FORCE) set(LAMMPS_MEMALIGN "0" CACHE STRING "" FORCE) set(CMAKE_TUNE_FLAGS "-Wno-missing-include-dirs" CACHE STRING "" FORCE) -set(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-stdcall-fixup -static" CACHE STRING "" FORCE) +set(CMAKE_EXE_LINKER_FLAGS "-Wl,--enable-stdcall-fixup" CACHE STRING "" FORCE) set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--enable-stdcall-fixup" CACHE STRING "" FORCE) set(BUILD_TOOLS ON CACHE BOOL "" FORCE) set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/lammps-installer") From 51489c15093af3775cd77c755e9e0b650d8e0145 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Oct 2020 17:29:31 -0400 Subject: [PATCH 182/182] dedup anchor --- doc/src/pair_coul_tt.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/pair_coul_tt.rst b/doc/src/pair_coul_tt.rst index 734404d3e4..11b4e72a60 100644 --- a/doc/src/pair_coul_tt.rst +++ b/doc/src/pair_coul_tt.rst @@ -118,7 +118,7 @@ none ---------- -.. _Thole2: +.. _Thole3: **(Thole)** Chem Phys, 59, 341 (1981).