From 588cce7e7e7b280f6f93b401a46626db83ba0799 Mon Sep 17 00:00:00 2001 From: alxvov Date: Thu, 27 Jun 2019 09:30:10 +0000 Subject: [PATCH 001/237] add min_spin_oso (just a copy of min_spin) --- src/min_spin_oso.cpp | 333 +++++++++++++++++++++++++++++++++++++++++++ src/min_spin_oso.h | 59 ++++++++ 2 files changed, 392 insertions(+) create mode 100644 src/min_spin_oso.cpp create mode 100644 src/min_spin_oso.h diff --git a/src/min_spin_oso.cpp b/src/min_spin_oso.cpp new file mode 100644 index 0000000000..a97d7b40a1 --- /dev/null +++ b/src/min_spin_oso.cpp @@ -0,0 +1,333 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------------ + Contributing authors: Julien Tranchida (SNL) + + Please cite the related publication: +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "min_spin_oso.h" +#include "universe.h" +#include "atom.h" +#include "force.h" +#include "update.h" +#include "output.h" +#include "timer.h" +#include "error.h" +#include "modify.h" +#include "math_special.h" +#include "math_const.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +// EPS_ENERGY = minimum normalization for energy tolerance + +#define EPS_ENERGY 1.0e-8 + +#define DELAYSTEP 5 + +/* ---------------------------------------------------------------------- */ + +MinSpinOSO::MinSpinOSO(LAMMPS *lmp) : Min(lmp) {} + +/* ---------------------------------------------------------------------- */ + +void MinSpinOSO::init() +{ + alpha_damp = 1.0; + discrete_factor = 10.0; + + Min::init(); + + dts = dt = update->dt; + last_negative = update->ntimestep; +} + +/* ---------------------------------------------------------------------- */ + +void MinSpinOSO::setup_style() +{ + double **v = atom->v; + int nlocal = atom->nlocal; + + // check if the atom/spin style is defined + + if (!atom->sp_flag) + error->all(FLERR,"min/spin_oso requires atom/spin style"); + + for (int i = 0; i < nlocal; i++) + v[i][0] = v[i][1] = v[i][2] = 0.0; +} + +/* ---------------------------------------------------------------------- */ + +int MinSpinOSO::modify_param(int narg, char **arg) +{ + if (strcmp(arg[0],"alpha_damp") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + alpha_damp = force->numeric(FLERR,arg[1]); + return 2; + } + if (strcmp(arg[0],"discrete_factor") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + discrete_factor = force->numeric(FLERR,arg[1]); + return 2; + } + return 0; +} + +/* ---------------------------------------------------------------------- + set current vector lengths and pointers + called after atoms have migrated +------------------------------------------------------------------------- */ + +void MinSpinOSO::reset_vectors() +{ + // atomic dof + + // size sp is 4N vector + nvec = 4 * atom->nlocal; + if (nvec) spvec = atom->sp[0]; + + nvec = 3 * atom->nlocal; + if (nvec) fmvec = atom->fm[0]; + + if (nvec) xvec = atom->x[0]; + if (nvec) fvec = atom->f[0]; +} + +/* ---------------------------------------------------------------------- + minimization via damped spin dynamics +------------------------------------------------------------------------- */ + +int MinSpinOSO::iterate(int maxiter) +{ + bigint ntimestep; + double fmdotfm; + int flag, flagall; + + for (int iter = 0; iter < maxiter; iter++) { + + if (timer->check_timeout(niter)) + return TIMEOUT; + + ntimestep = ++update->ntimestep; + niter++; + + // optimize timestep accross processes / replicas + // need a force calculation for timestep optimization + + energy_force(0); + dts = evaluate_dt(); + + // apply damped precessional dynamics to the spins + + advance_spins(dts); + + eprevious = ecurrent; + ecurrent = energy_force(0); + neval++; + + //// energy tolerance criterion + //// only check after DELAYSTEP elapsed since velocties reset to 0 + //// sync across replicas if running multi-replica minimization + + if (update->etol > 0.0 && ntimestep-last_negative > DELAYSTEP) { + if (update->multireplica == 0) { + if (fabs(ecurrent-eprevious) < + update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) + return ETOL; + } else { + if (fabs(ecurrent-eprevious) < + update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) + flag = 0; + else flag = 1; + MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); + if (flagall == 0) return ETOL; + } + } + + // magnetic torque tolerance criterion + // sync across replicas if running multi-replica minimization + + if (update->ftol > 0.0) { + fmdotfm = fmnorm_sqr(); + if (update->multireplica == 0) { + if (fmdotfm < update->ftol*update->ftol) return FTOL; + } else { + if (fmdotfm < update->ftol*update->ftol) flag = 0; + else flag = 1; + MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); + if (flagall == 0) return FTOL; + } + } + + // output for thermo, dump, restart files + + if (output->next == ntimestep) { + timer->stamp(); + output->write(ntimestep); + timer->stamp(Timer::OUTPUT); + } + } + + return MAXITER; +} + +/* ---------------------------------------------------------------------- + evaluate max timestep +---------------------------------------------------------------------- */ + +double MinSpinOSO::evaluate_dt() +{ + double dtmax; + double fmsq; + double fmaxsqone,fmaxsqloc,fmaxsqall; + int nlocal = atom->nlocal; + double **fm = atom->fm; + + // finding max fm on this proc. + + fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; + for (int i = 0; i < nlocal; i++) { + fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; + fmaxsqone = MAX(fmaxsqone,fmsq); + } + + // finding max fm on this replica + + fmaxsqloc = fmaxsqone; + MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); + + // finding max fm over all replicas, if necessary + // this communicator would be invalid for multiprocess replicas + + fmaxsqall = fmaxsqloc; + if (update->multireplica == 1) { + fmaxsqall = fmaxsqloc; + MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); + } + + if (fmaxsqall == 0.0) + error->all(FLERR,"Incorrect fmaxsqall calculation"); + + // define max timestep by dividing by the + // inverse of max frequency by discrete_factor + + dtmax = MY_2PI/(discrete_factor*sqrt(fmaxsqall)); + + return dtmax; +} + +/* ---------------------------------------------------------------------- + geometric damped advance of spins +---------------------------------------------------------------------- */ + +void MinSpinOSO::advance_spins(double dts) +{ + int nlocal = atom->nlocal; + double **sp = atom->sp; + double **fm = atom->fm; + double tdampx,tdampy,tdampz; + double msq, scale, fm2, energy, dts2; + double cp[3], g[3]; + + dts2 = dts*dts; + + // loop on all spins on proc. + + for (int i = 0; i < nlocal; i++) { + + // calc. damping torque + + tdampx = -alpha_damp*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); + tdampy = -alpha_damp*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + tdampz = -alpha_damp*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); + + // apply advance algorithm (geometric, norm preserving) + + fm2 = (tdampx*tdampx+tdampy*tdampy+tdampz*tdampz); + energy = (sp[i][0]*tdampx)+(sp[i][1]*tdampy)+(sp[i][2]*tdampz); + + cp[0] = tdampy*sp[i][2]-tdampz*sp[i][1]; + cp[1] = tdampz*sp[i][0]-tdampx*sp[i][2]; + cp[2] = tdampx*sp[i][1]-tdampy*sp[i][0]; + + g[0] = sp[i][0]+cp[0]*dts; + g[1] = sp[i][1]+cp[1]*dts; + g[2] = sp[i][2]+cp[2]*dts; + + g[0] += (tdampx*energy-0.5*sp[i][0]*fm2)*0.5*dts2; + g[1] += (tdampy*energy-0.5*sp[i][1]*fm2)*0.5*dts2; + g[2] += (tdampz*energy-0.5*sp[i][2]*fm2)*0.5*dts2; + + g[0] /= (1+0.25*fm2*dts2); + g[1] /= (1+0.25*fm2*dts2); + g[2] /= (1+0.25*fm2*dts2); + + sp[i][0] = g[0]; + sp[i][1] = g[1]; + sp[i][2] = g[2]; + + // renormalization (check if necessary) + + msq = g[0]*g[0] + g[1]*g[1] + g[2]*g[2]; + scale = 1.0/sqrt(msq); + sp[i][0] *= scale; + sp[i][1] *= scale; + sp[i][2] *= scale; + + // no comm. to atoms with same tag + // because no need for simplecticity + } +} + +/* ---------------------------------------------------------------------- + compute and return ||mag. torque||_2^2 +------------------------------------------------------------------------- */ + +double MinSpinOSO::fmnorm_sqr() +{ + int nlocal = atom->nlocal; + double tx,ty,tz; + double **sp = atom->sp; + double **fm = atom->fm; + + // calc. magnetic torques + + double local_norm2_sqr = 0.0; + for (int i = 0; i < nlocal; i++) { + tx = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); + ty = (fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + tz = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); + + local_norm2_sqr += tx*tx + ty*ty + tz*tz; + } + + // no extra atom calc. for spins + + if (nextra_atom) + error->all(FLERR,"extra atom option not available yet"); + + double norm2_sqr = 0.0; + MPI_Allreduce(&local_norm2_sqr,&norm2_sqr,1,MPI_DOUBLE,MPI_SUM,world); + + return norm2_sqr; +} + diff --git a/src/min_spin_oso.h b/src/min_spin_oso.h new file mode 100644 index 0000000000..81ad812e5c --- /dev/null +++ b/src/min_spin_oso.h @@ -0,0 +1,59 @@ +/* -*- 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 MINIMIZE_CLASS + +MinimizeStyle(spin_oso, MinSpinOSO) + +#else + +#ifndef LMP_MIN_SPIN_OSO_H +#define LMP_MIN_SPIN_OSO_H + +#include "min.h" + +namespace LAMMPS_NS { + +class MinSpinOSO : public Min { + public: + MinSpinOSO(class LAMMPS *); //? + ~MinSpinOSO() {} //? + void init(); + void setup_style(); + int modify_param(int, char **); + void reset_vectors(); + int iterate(int); + double evaluate_dt(); + void advance_spins(double); + double fmnorm_sqr(); + + private: + + // global and spin timesteps + + double dt; + double dts; + + double alpha_damp; // damping for spin minimization + double discrete_factor; // factor for spin timestep evaluation + + double *spvec; // variables for atomic dof, as 1d vector + double *fmvec; // variables for atomic dof, as 1d vector + + bigint last_negative; +}; + +} + +#endif +#endif From 1eb83136c4a86ad8d65e1d46284d8dc69a4a7858 Mon Sep 17 00:00:00 2001 From: alxvov Date: Thu, 27 Jun 2019 10:59:15 +0000 Subject: [PATCH 002/237] add gradient descent with rotation matrices with adaptive time step (as before) --- src/min_spin_oso.cpp | 149 ++++++++++++++++++++++++++++++------------- 1 file changed, 105 insertions(+), 44 deletions(-) diff --git a/src/min_spin_oso.cpp b/src/min_spin_oso.cpp index a97d7b40a1..c20096ae1c 100644 --- a/src/min_spin_oso.cpp +++ b/src/min_spin_oso.cpp @@ -42,6 +42,9 @@ using namespace MathConst; #define DELAYSTEP 5 +void vm3(const double *m, const double *v, double *out); +void rodrigues_rotation(const double *upp_tr, double *out); + /* ---------------------------------------------------------------------- */ MinSpinOSO::MinSpinOSO(LAMMPS *lmp) : Min(lmp) {} @@ -244,58 +247,33 @@ void MinSpinOSO::advance_spins(double dts) int nlocal = atom->nlocal; double **sp = atom->sp; double **fm = atom->fm; - double tdampx,tdampy,tdampz; - double msq, scale, fm2, energy, dts2; - double cp[3], g[3]; - - dts2 = dts*dts; + double tdampx, tdampy, tdampz; + double f[3]; // upper triag. part of skew-symm. matr. to be exponented + double rot_mat[9]; // exponential of a + double s_new[3]; // loop on all spins on proc. for (int i = 0; i < nlocal; i++) { - // calc. damping torque + // calc. damping torque + tdampx = -alpha_damp*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); + tdampy = -alpha_damp*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + tdampz = -alpha_damp*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - tdampx = -alpha_damp*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); - tdampy = -alpha_damp*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); - tdampz = -alpha_damp*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); + // calculate rotation matrix + f[0] = tdampz * dts; + f[1] = -tdampy * dts; + f[2] = tdampx * dts; + rodrigues_rotation(f, rot_mat); - // apply advance algorithm (geometric, norm preserving) - - fm2 = (tdampx*tdampx+tdampy*tdampy+tdampz*tdampz); - energy = (sp[i][0]*tdampx)+(sp[i][1]*tdampy)+(sp[i][2]*tdampz); - - cp[0] = tdampy*sp[i][2]-tdampz*sp[i][1]; - cp[1] = tdampz*sp[i][0]-tdampx*sp[i][2]; - cp[2] = tdampx*sp[i][1]-tdampy*sp[i][0]; - - g[0] = sp[i][0]+cp[0]*dts; - g[1] = sp[i][1]+cp[1]*dts; - g[2] = sp[i][2]+cp[2]*dts; - - g[0] += (tdampx*energy-0.5*sp[i][0]*fm2)*0.5*dts2; - g[1] += (tdampy*energy-0.5*sp[i][1]*fm2)*0.5*dts2; - g[2] += (tdampz*energy-0.5*sp[i][2]*fm2)*0.5*dts2; - - g[0] /= (1+0.25*fm2*dts2); - g[1] /= (1+0.25*fm2*dts2); - g[2] /= (1+0.25*fm2*dts2); - - sp[i][0] = g[0]; - sp[i][1] = g[1]; - sp[i][2] = g[2]; - - // renormalization (check if necessary) - - msq = g[0]*g[0] + g[1]*g[1] + g[2]*g[2]; - scale = 1.0/sqrt(msq); - sp[i][0] *= scale; - sp[i][1] *= scale; - sp[i][2] *= scale; - - // no comm. to atoms with same tag - // because no need for simplecticity + // rotate spins + vm3(rot_mat, sp[i], s_new); + sp[i][0] = s_new[0]; + sp[i][1] = s_new[1]; + sp[i][2] = s_new[2]; } + } /* ---------------------------------------------------------------------- @@ -331,3 +309,86 @@ double MinSpinOSO::fmnorm_sqr() return norm2_sqr; } + +void rodrigues_rotation(const double *upp_tr, double *out){ + + /*** + * calculate 3x3 matrix exponential using Rodrigues' formula + * (R. Murray, Z. Li, and S. Shankar Sastry, + * A Mathematical Introduction to + * Robotic Manipulation (1994), p. 28 and 30). + * + * upp_tr - vector x, y, z so that one calculate + * U = exp(A) with A= [[0, x, y], + * [-x, 0, z], + * [-y, -z, 0]] + ***/ + + + if (fabs(upp_tr[0]) < 1.0e-40 && + fabs(upp_tr[1]) < 1.0e-40 && + fabs(upp_tr[2]) < 1.0e-40){ + // if upp_tr is zero, return unity matrix + int k; + int m; + for(k = 0; k < 3; k++){ + for(m = 0; m < 3; m++){ + if (m == k) out[3 * k + m] = 1.0; + else out[3 * k + m] = 0.0; + } + } + return; + } + + double theta = sqrt(upp_tr[0] * upp_tr[0] + + upp_tr[1] * upp_tr[1] + + upp_tr[2] * upp_tr[2]); + + double A = cos(theta); + double B = sin(theta); + double D = 1 - A; + double x = upp_tr[0]/theta; + double y = upp_tr[1]/theta; + double z = upp_tr[2]/theta; + + // diagonal elements of U + out[0] = A + z * z * D; + out[4] = A + y * y * D; + out[8] = A + x * x * D; + + // off diagonal of U + double s1 = -y * z *D; + double s2 = x * z * D; + double s3 = -x * y * D; + + double a1 = x * B; + double a2 = y * B; + double a3 = z * B; + + out[1] = s1 + a1; + out[3] = s1 - a1; + out[2] = s2 + a2; + out[6] = s2 - a2; + out[5] = s3 + a3; + out[7] = s3 - a3; + +} + + +void vm3(const double *m, const double *v, double *out){ + /*** + * out = vector^T x m, + * m -- 3x3 matrix , v -- 3-d vector + ***/ + + int i; + int j; + + for(i = 0; i < 3; i++){ + out[i] *= 0.0; + for(j = 0; j < 3; j++){ + out[i] += *(m + 3 * j + i) * v[j]; + } + } + +} From f7ddf433ef03dc94fcf5e5e50a3d61018abe8e06 Mon Sep 17 00:00:00 2001 From: alxvov Date: Thu, 27 Jun 2019 13:14:27 +0000 Subject: [PATCH 003/237] modify comment --- src/min_spin_oso.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/min_spin_oso.cpp b/src/min_spin_oso.cpp index c20096ae1c..d26a7ffc39 100644 --- a/src/min_spin_oso.cpp +++ b/src/min_spin_oso.cpp @@ -239,7 +239,7 @@ double MinSpinOSO::evaluate_dt() } /* ---------------------------------------------------------------------- - geometric damped advance of spins + rotation of spins along the search direction ---------------------------------------------------------------------- */ void MinSpinOSO::advance_spins(double dts) From 589d0e2a6a53c760937b2b9b19c28f41c90db341 Mon Sep 17 00:00:00 2001 From: alxvov Date: Thu, 27 Jun 2019 16:26:24 +0000 Subject: [PATCH 004/237] add conjugate gradients with OSO --- .../min_spin_oso_cg.cpp} | 148 +++++++++++++----- src/SPIN/min_spin_oso_cg.h | 65 ++++++++ src/min_spin_oso.h | 59 ------- 3 files changed, 177 insertions(+), 95 deletions(-) rename src/{min_spin_oso.cpp => SPIN/min_spin_oso_cg.cpp} (72%) create mode 100644 src/SPIN/min_spin_oso_cg.h delete mode 100644 src/min_spin_oso.h diff --git a/src/min_spin_oso.cpp b/src/SPIN/min_spin_oso_cg.cpp similarity index 72% rename from src/min_spin_oso.cpp rename to src/SPIN/min_spin_oso_cg.cpp index d26a7ffc39..9f43442e27 100644 --- a/src/min_spin_oso.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -21,7 +21,7 @@ #include #include #include -#include "min_spin_oso.h" +#include "min_spin_oso_cg.h" #include "universe.h" #include "atom.h" #include "force.h" @@ -47,24 +47,24 @@ void rodrigues_rotation(const double *upp_tr, double *out); /* ---------------------------------------------------------------------- */ -MinSpinOSO::MinSpinOSO(LAMMPS *lmp) : Min(lmp) {} +MinSpinOSO_CG::MinSpinOSO_CG(LAMMPS *lmp) : Min(lmp) {} /* ---------------------------------------------------------------------- */ -void MinSpinOSO::init() +void MinSpinOSO_CG::init() { - alpha_damp = 1.0; - discrete_factor = 10.0; + alpha_damp = 1.0; + discrete_factor = 10.0; - Min::init(); + Min::init(); - dts = dt = update->dt; - last_negative = update->ntimestep; + dts = dt = update->dt; + last_negative = update->ntimestep; } /* ---------------------------------------------------------------------- */ -void MinSpinOSO::setup_style() +void MinSpinOSO_CG::setup_style() { double **v = atom->v; int nlocal = atom->nlocal; @@ -72,7 +72,7 @@ void MinSpinOSO::setup_style() // check if the atom/spin style is defined if (!atom->sp_flag) - error->all(FLERR,"min/spin_oso requires atom/spin style"); + error->all(FLERR,"min/spin_oso_cg requires atom/spin style"); for (int i = 0; i < nlocal; i++) v[i][0] = v[i][1] = v[i][2] = 0.0; @@ -80,7 +80,7 @@ void MinSpinOSO::setup_style() /* ---------------------------------------------------------------------- */ -int MinSpinOSO::modify_param(int narg, char **arg) +int MinSpinOSO_CG::modify_param(int narg, char **arg) { if (strcmp(arg[0],"alpha_damp") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); @@ -100,7 +100,7 @@ int MinSpinOSO::modify_param(int narg, char **arg) called after atoms have migrated ------------------------------------------------------------------------- */ -void MinSpinOSO::reset_vectors() +void MinSpinOSO_CG::reset_vectors() { // atomic dof @@ -119,13 +119,19 @@ void MinSpinOSO::reset_vectors() minimization via damped spin dynamics ------------------------------------------------------------------------- */ -int MinSpinOSO::iterate(int maxiter) +int MinSpinOSO_CG::iterate(int maxiter) { - bigint ntimestep; - double fmdotfm; - int flag, flagall; + bigint ntimestep; + double fmdotfm; + int flag, flagall; - for (int iter = 0; iter < maxiter; iter++) { + // not sure it is best place to allocate memory + int nlocal = atom->nlocal; + g = (double *) calloc(3*nlocal, sizeof(double)); + p = (double *) calloc(3*nlocal, sizeof(double)); + g_old = (double *) calloc(3*nlocal, sizeof(double)); + + for (int iter = 0; iter < maxiter; iter++) { if (timer->check_timeout(niter)) return TIMEOUT; @@ -139,9 +145,9 @@ int MinSpinOSO::iterate(int maxiter) energy_force(0); dts = evaluate_dt(); - // apply damped precessional dynamics to the spins - - advance_spins(dts); + calc_gradients(dts); + calc_search_direction(iter); + advance_spins(); eprevious = ecurrent; ecurrent = energy_force(0); @@ -190,6 +196,10 @@ int MinSpinOSO::iterate(int maxiter) } } + free(p); + free(g); + free(g_old); + return MAXITER; } @@ -197,7 +207,7 @@ int MinSpinOSO::iterate(int maxiter) evaluate max timestep ---------------------------------------------------------------------- */ -double MinSpinOSO::evaluate_dt() +double MinSpinOSO_CG::evaluate_dt() { double dtmax; double fmsq; @@ -238,35 +248,101 @@ double MinSpinOSO::evaluate_dt() return dtmax; } +/* ---------------------------------------------------------------------- + calculate gradients +---------------------------------------------------------------------- */ + +void MinSpinOSO_CG::calc_gradients(double dts) +{ + int nlocal = atom->nlocal; + double **sp = atom->sp; + double **fm = atom->fm; + double tdampx, tdampy, tdampz; + // loop on all spins on proc. + + for (int i = 0; i < nlocal; i++) { + + // calc. damping torque + tdampx = -alpha_damp*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); + tdampy = -alpha_damp*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + tdampz = -alpha_damp*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); + + // calculate rotation matrix + g[3 * i + 0] = -tdampz * dts; + g[3 * i + 1] = tdampy * dts; + g[3 * i + 2] = -tdampx * dts; + } +} + +void MinSpinOSO_CG::calc_search_direction(int iter) +{ + int nlocal = atom->nlocal; + double g2old = 0.0; + double g2 = 0.0; + double beta = 0.0; + + double g2_global= 0.0; + double g2old_global= 0.0; + + // for some reason on a second iteration g_old = 0 + // so we make to iterations as steepest descent + if (iter <= 2 || iter % 5 == 0){ + // steepest descent direction + for (int i = 0; i < nlocal; i++) { + for (int j = 0; j < 3; j++){ + p[3 * i + j] = -g[3 * i + j]; + g_old[3 * i + j] = g[3 * i + j]; + } + } + } else{ + // conjugate direction + for (int i = 0; i < nlocal; i++) { + for (int j = 0; j < 3; j++){ + g2old += g_old[3 * i + j] * g_old[3 * i + j]; + g2 += g[3 * i + j] * g[3 * i + j]; + + } + } + + // now we need to collect/broadcast beta on this replica + // different replica can have different beta for now. + // need to check what is beta for GNEB + MPI_Allreduce(&g2, &g2_global, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&g2old, &g2old_global, 1, MPI_DOUBLE, MPI_SUM, world); + + beta = g2_global / g2old_global; + + //calculate conjugate direction + for (int i = 0; i < nlocal; i++) { + for (int j = 0; j < 3; j++){ + p[3 * i + j] = beta * p[3 * i + j] - g[3 * i + j]; + g_old[3 * i + j] = g[3 * i + j]; + } + } + + } + +} + + /* ---------------------------------------------------------------------- rotation of spins along the search direction ---------------------------------------------------------------------- */ -void MinSpinOSO::advance_spins(double dts) +void MinSpinOSO_CG::advance_spins() { int nlocal = atom->nlocal; double **sp = atom->sp; double **fm = atom->fm; double tdampx, tdampy, tdampz; - double f[3]; // upper triag. part of skew-symm. matr. to be exponented + // double f[3]; // upper triag. part of skew-symm. matr. to be exponented double rot_mat[9]; // exponential of a double s_new[3]; // loop on all spins on proc. for (int i = 0; i < nlocal; i++) { - - // calc. damping torque - tdampx = -alpha_damp*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); - tdampy = -alpha_damp*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); - tdampz = -alpha_damp*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - - // calculate rotation matrix - f[0] = tdampz * dts; - f[1] = -tdampy * dts; - f[2] = tdampx * dts; - rodrigues_rotation(f, rot_mat); - + rodrigues_rotation(p + 3 * i, rot_mat); // rotate spins vm3(rot_mat, sp[i], s_new); sp[i][0] = s_new[0]; @@ -280,7 +356,7 @@ void MinSpinOSO::advance_spins(double dts) compute and return ||mag. torque||_2^2 ------------------------------------------------------------------------- */ -double MinSpinOSO::fmnorm_sqr() +double MinSpinOSO_CG::fmnorm_sqr() { int nlocal = atom->nlocal; double tx,ty,tz; diff --git a/src/SPIN/min_spin_oso_cg.h b/src/SPIN/min_spin_oso_cg.h new file mode 100644 index 0000000000..fa0b591c21 --- /dev/null +++ b/src/SPIN/min_spin_oso_cg.h @@ -0,0 +1,65 @@ +/* -*- 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 MINIMIZE_CLASS + +MinimizeStyle(spin_oso_cg, MinSpinOSO_CG) + +#else + +#ifndef LMP_MIN_SPIN_OSO_CG_H +#define LMP_MIN_SPIN_OSO_CG_H + +#include "min.h" + +namespace LAMMPS_NS { + +class MinSpinOSO_CG : public Min { + +public: + MinSpinOSO_CG(class LAMMPS *); //? + ~MinSpinOSO_CG() {} //? + void init(); + void setup_style(); + int modify_param(int, char **); + void reset_vectors(); + int iterate(int); + double evaluate_dt(); + void advance_spins(); + double fmnorm_sqr(); + void calc_gradients(double); + void calc_search_direction(int); + +private: + // global and spin timesteps + + double dt; + double dts; + + double alpha_damp; // damping for spin minimization + double discrete_factor; // factor for spin timestep evaluation + + double *spvec; // variables for atomic dof, as 1d vector + double *fmvec; // variables for atomic dof, as 1d vector + + double *g_old; // gradient vector + double *g; // gradient vector + double *p; // search direction vector + + bigint last_negative; +}; + +} + +#endif +#endif diff --git a/src/min_spin_oso.h b/src/min_spin_oso.h deleted file mode 100644 index 81ad812e5c..0000000000 --- a/src/min_spin_oso.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- 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 MINIMIZE_CLASS - -MinimizeStyle(spin_oso, MinSpinOSO) - -#else - -#ifndef LMP_MIN_SPIN_OSO_H -#define LMP_MIN_SPIN_OSO_H - -#include "min.h" - -namespace LAMMPS_NS { - -class MinSpinOSO : public Min { - public: - MinSpinOSO(class LAMMPS *); //? - ~MinSpinOSO() {} //? - void init(); - void setup_style(); - int modify_param(int, char **); - void reset_vectors(); - int iterate(int); - double evaluate_dt(); - void advance_spins(double); - double fmnorm_sqr(); - - private: - - // global and spin timesteps - - double dt; - double dts; - - double alpha_damp; // damping for spin minimization - double discrete_factor; // factor for spin timestep evaluation - - double *spvec; // variables for atomic dof, as 1d vector - double *fmvec; // variables for atomic dof, as 1d vector - - bigint last_negative; -}; - -} - -#endif -#endif From 630ce7b96247b3d8bf23f54c83c04fef8da79c61 Mon Sep 17 00:00:00 2001 From: alxvov Date: Thu, 27 Jun 2019 16:31:24 +0000 Subject: [PATCH 005/237] add contributing authors --- src/SPIN/min_spin_oso_cg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 9f43442e27..b36e5f280f 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -12,7 +12,7 @@ ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------ - Contributing authors: Julien Tranchida (SNL) + Contributing authors: Julien Tranchida (SNL), Aleksei Ivanov (UI) Please cite the related publication: ------------------------------------------------------------------------- */ From 2520eab46d844bda3e30111d1c8f06d94a009a82 Mon Sep 17 00:00:00 2001 From: alxvov Date: Thu, 27 Jun 2019 16:41:19 +0000 Subject: [PATCH 006/237] small typo --- src/SPIN/min_spin_oso_cg.cpp | 13 ++++++------- src/SPIN/min_spin_oso_cg.h | 4 ++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index b36e5f280f..9c084d9684 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -145,7 +145,7 @@ int MinSpinOSO_CG::iterate(int maxiter) energy_force(0); dts = evaluate_dt(); - calc_gradients(dts); + calc_gradient(dts); calc_search_direction(iter); advance_spins(); @@ -252,7 +252,7 @@ double MinSpinOSO_CG::evaluate_dt() calculate gradients ---------------------------------------------------------------------- */ -void MinSpinOSO_CG::calc_gradients(double dts) +void MinSpinOSO_CG::calc_gradient(double dts) { int nlocal = atom->nlocal; double **sp = atom->sp; @@ -267,7 +267,7 @@ void MinSpinOSO_CG::calc_gradients(double dts) tdampy = -alpha_damp*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); tdampz = -alpha_damp*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - // calculate rotation matrix + // calculate gradients g[3 * i + 0] = -tdampz * dts; g[3 * i + 1] = tdampy * dts; g[3 * i + 2] = -tdampx * dts; @@ -285,7 +285,7 @@ void MinSpinOSO_CG::calc_search_direction(int iter) double g2old_global= 0.0; // for some reason on a second iteration g_old = 0 - // so we make to iterations as steepest descent + // so we make two iterations as steepest descent if (iter <= 2 || iter % 5 == 0){ // steepest descent direction for (int i = 0; i < nlocal; i++) { @@ -312,7 +312,7 @@ void MinSpinOSO_CG::calc_search_direction(int iter) beta = g2_global / g2old_global; - //calculate conjugate direction + // calculate conjugate direction for (int i = 0; i < nlocal; i++) { for (int j = 0; j < 3; j++){ p[3 * i + j] = beta * p[3 * i + j] - g[3 * i + j]; @@ -335,8 +335,7 @@ void MinSpinOSO_CG::advance_spins() double **sp = atom->sp; double **fm = atom->fm; double tdampx, tdampy, tdampz; - // double f[3]; // upper triag. part of skew-symm. matr. to be exponented - double rot_mat[9]; // exponential of a + double rot_mat[9]; // exponential of matrix made of search direction double s_new[3]; // loop on all spins on proc. diff --git a/src/SPIN/min_spin_oso_cg.h b/src/SPIN/min_spin_oso_cg.h index fa0b591c21..a2ecf53e55 100644 --- a/src/SPIN/min_spin_oso_cg.h +++ b/src/SPIN/min_spin_oso_cg.h @@ -37,7 +37,7 @@ public: double evaluate_dt(); void advance_spins(); double fmnorm_sqr(); - void calc_gradients(double); + void calc_gradient(double); void calc_search_direction(int); private: @@ -52,7 +52,7 @@ private: double *spvec; // variables for atomic dof, as 1d vector double *fmvec; // variables for atomic dof, as 1d vector - double *g_old; // gradient vector + double *g_old; // gradient vector at previous iteration double *g; // gradient vector double *p; // search direction vector From 3e8ab7cbb00f42745794afa5205ed4cafbea24f6 Mon Sep 17 00:00:00 2001 From: julient31 Date: Thu, 27 Jun 2019 15:15:57 -0600 Subject: [PATCH 007/237] Commit JT 062719 - cleaned code and setup LAMMPS format and indentation - added src/min_spin_oso_cg.h/cpp to .gitignore --- src/.gitignore | 2 + src/SPIN/min_spin_oso_cg.cpp | 340 ++++++++++++++++++----------------- src/SPIN/min_spin_oso_cg.h | 23 +-- 3 files changed, 193 insertions(+), 172 deletions(-) diff --git a/src/.gitignore b/src/.gitignore index c79c958e6d..0d802981f9 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -161,6 +161,8 @@ /fix_setforce_spin.h /min_spin.cpp /min_spin.h +/min_spin_oso_cg.cpp +/min_spin_oso_cg.h /neb_spin.cpp /neb_spin.h /pair_spin.cpp diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 9c084d9684..c09d12dbc8 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -12,9 +12,13 @@ ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------ - Contributing authors: Julien Tranchida (SNL), Aleksei Ivanov (UI) + Contributing authors: Aleksei Ivanov (UI) + Julien Tranchida (SNL) Please cite the related publication: + Ivanov, A. V., Uzdin, V. M., & Jónsson, H. (2019). Fast and Robust + Algorithm for the Minimisation of the Energy of Spin Systems. arXiv + preprint arXiv:1904.02669. ------------------------------------------------------------------------- */ #include @@ -24,6 +28,7 @@ #include "min_spin_oso_cg.h" #include "universe.h" #include "atom.h" +#include "citeme.h" #include "force.h" #include "update.h" #include "output.h" @@ -36,30 +41,40 @@ using namespace LAMMPS_NS; using namespace MathConst; +static const char cite_minstyle_spin_oso_cg[] = + "min_style spin/oso_cg command:\n\n" + "@article{ivanov2019fast,\n" + "title={Fast and Robust Algorithm for the Minimisation of the Energy of " + "Spin Systems},\n" + "author={Ivanov, A. V and Uzdin, V. M. and J{\'o}nsson, H.},\n" + "journal={arXiv preprint arXiv:1904.02669},\n" + "year={2019}\n" + "}\n\n"; + // EPS_ENERGY = minimum normalization for energy tolerance #define EPS_ENERGY 1.0e-8 #define DELAYSTEP 5 -void vm3(const double *m, const double *v, double *out); -void rodrigues_rotation(const double *upp_tr, double *out); /* ---------------------------------------------------------------------- */ -MinSpinOSO_CG::MinSpinOSO_CG(LAMMPS *lmp) : Min(lmp) {} +MinSpinOSO_CG::MinSpinOSO_CG(LAMMPS *lmp) : Min(lmp) { + if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_cg); +} /* ---------------------------------------------------------------------- */ void MinSpinOSO_CG::init() { - alpha_damp = 1.0; - discrete_factor = 10.0; + alpha_damp = 1.0; + discrete_factor = 10.0; - Min::init(); + Min::init(); - dts = dt = update->dt; - last_negative = update->ntimestep; + dts = dt = update->dt; + last_negative = update->ntimestep; } /* ---------------------------------------------------------------------- */ @@ -121,34 +136,34 @@ void MinSpinOSO_CG::reset_vectors() int MinSpinOSO_CG::iterate(int maxiter) { - bigint ntimestep; - double fmdotfm; - int flag, flagall; + bigint ntimestep; + double fmdotfm; + int flag, flagall; - // not sure it is best place to allocate memory - int nlocal = atom->nlocal; - g = (double *) calloc(3*nlocal, sizeof(double)); - p = (double *) calloc(3*nlocal, sizeof(double)); - g_old = (double *) calloc(3*nlocal, sizeof(double)); - - for (int iter = 0; iter < maxiter; iter++) { + // not sure it is best place to allocate memory + int nlocal = atom->nlocal; + g = (double *) calloc(3*nlocal, sizeof(double)); + p = (double *) calloc(3*nlocal, sizeof(double)); + g_old = (double *) calloc(3*nlocal, sizeof(double)); + for (int iter = 0; iter < maxiter; iter++) { + if (timer->check_timeout(niter)) return TIMEOUT; - + ntimestep = ++update->ntimestep; niter++; - + // optimize timestep accross processes / replicas // need a force calculation for timestep optimization - + energy_force(0); dts = evaluate_dt(); - + calc_gradient(dts); calc_search_direction(iter); advance_spins(); - + eprevious = ecurrent; ecurrent = energy_force(0); neval++; @@ -156,7 +171,7 @@ int MinSpinOSO_CG::iterate(int maxiter) //// energy tolerance criterion //// only check after DELAYSTEP elapsed since velocties reset to 0 //// sync across replicas if running multi-replica minimization - + if (update->etol > 0.0 && ntimestep-last_negative > DELAYSTEP) { if (update->multireplica == 0) { if (fabs(ecurrent-eprevious) < @@ -196,9 +211,9 @@ int MinSpinOSO_CG::iterate(int maxiter) } } - free(p); - free(g); - free(g_old); + free(p); + free(g); + free(g_old); return MAXITER; } @@ -254,76 +269,80 @@ double MinSpinOSO_CG::evaluate_dt() void MinSpinOSO_CG::calc_gradient(double dts) { - int nlocal = atom->nlocal; - double **sp = atom->sp; - double **fm = atom->fm; - double tdampx, tdampy, tdampz; - // loop on all spins on proc. + int nlocal = atom->nlocal; + double **sp = atom->sp; + double **fm = atom->fm; + double tdampx, tdampy, tdampz; + + // loop on all spins on proc. - for (int i = 0; i < nlocal; i++) { + for (int i = 0; i < nlocal; i++) { + + // calc. damping torque + + tdampx = -alpha_damp*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); + tdampy = -alpha_damp*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + tdampz = -alpha_damp*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - // calc. damping torque - tdampx = -alpha_damp*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); - tdampy = -alpha_damp*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); - tdampz = -alpha_damp*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - - // calculate gradients - g[3 * i + 0] = -tdampz * dts; - g[3 * i + 1] = tdampy * dts; - g[3 * i + 2] = -tdampx * dts; - } + // calculate gradients + + g[3 * i + 0] = -tdampz * dts; + g[3 * i + 1] = tdampy * dts; + g[3 * i + 2] = -tdampx * dts; + } } +/* ---------------------------------------------------------------------- + search direction +---------------------------------------------------------------------- */ + void MinSpinOSO_CG::calc_search_direction(int iter) { - int nlocal = atom->nlocal; - double g2old = 0.0; - double g2 = 0.0; - double beta = 0.0; + int nlocal = atom->nlocal; + double g2old = 0.0; + double g2 = 0.0; + double beta = 0.0; - double g2_global= 0.0; - double g2old_global= 0.0; - - // for some reason on a second iteration g_old = 0 - // so we make two iterations as steepest descent - if (iter <= 2 || iter % 5 == 0){ - // steepest descent direction - for (int i = 0; i < nlocal; i++) { - for (int j = 0; j < 3; j++){ - p[3 * i + j] = -g[3 * i + j]; - g_old[3 * i + j] = g[3 * i + j]; - } - } - } else{ - // conjugate direction - for (int i = 0; i < nlocal; i++) { - for (int j = 0; j < 3; j++){ - g2old += g_old[3 * i + j] * g_old[3 * i + j]; - g2 += g[3 * i + j] * g[3 * i + j]; - - } - } - - // now we need to collect/broadcast beta on this replica - // different replica can have different beta for now. - // need to check what is beta for GNEB - MPI_Allreduce(&g2, &g2_global, 1, MPI_DOUBLE, MPI_SUM, world); - MPI_Allreduce(&g2old, &g2old_global, 1, MPI_DOUBLE, MPI_SUM, world); - - beta = g2_global / g2old_global; - - // calculate conjugate direction - for (int i = 0; i < nlocal; i++) { - for (int j = 0; j < 3; j++){ - p[3 * i + j] = beta * p[3 * i + j] - g[3 * i + j]; - g_old[3 * i + j] = g[3 * i + j]; - } - } + double g2_global= 0.0; + double g2old_global= 0.0; + // for some reason on a second iteration g_old = 0 + // so we make two iterations as steepest descent + + if (iter <= 2 || iter % 5 == 0){ // steepest descent direction + for (int i = 0; i < nlocal; i++) { + for (int j = 0; j < 3; j++){ + p[3 * i + j] = -g[3 * i + j]; + g_old[3 * i + j] = g[3 * i + j]; + } + } + } else { // conjugate direction + for (int i = 0; i < nlocal; i++) { + for (int j = 0; j < 3; j++){ + g2old += g_old[3 * i + j] * g_old[3 * i + j]; + g2 += g[3 * i + j] * g[3 * i + j]; + } } -} + // now we need to collect/broadcast beta on this replica + // different replica can have different beta for now. + // need to check what is beta for GNEB + + MPI_Allreduce(&g2, &g2_global, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&g2old, &g2old_global, 1, MPI_DOUBLE, MPI_SUM, world); + beta = g2_global / g2old_global; + + // calculate conjugate direction + + for (int i = 0; i < nlocal; i++) { + for (int j = 0; j < 3; j++){ + p[3 * i + j] = beta * p[3 * i + j] - g[3 * i + j]; + g_old[3 * i + j] = g[3 * i + j]; + } + } + } +} /* ---------------------------------------------------------------------- rotation of spins along the search direction @@ -341,14 +360,15 @@ void MinSpinOSO_CG::advance_spins() // loop on all spins on proc. for (int i = 0; i < nlocal; i++) { - rodrigues_rotation(p + 3 * i, rot_mat); - // rotate spins - vm3(rot_mat, sp[i], s_new); - sp[i][0] = s_new[0]; - sp[i][1] = s_new[1]; - sp[i][2] = s_new[2]; + rodrigues_rotation(p + 3 * i, rot_mat); + + // rotate spins + + vm3(rot_mat, sp[i], s_new); + sp[i][0] = s_new[0]; + sp[i][1] = s_new[1]; + sp[i][2] = s_new[2]; } - } /* ---------------------------------------------------------------------- @@ -384,86 +404,82 @@ double MinSpinOSO_CG::fmnorm_sqr() return norm2_sqr; } +/* ---------------------------------------------------------------------- + calculate 3x3 matrix exponential using Rodrigues' formula + (R. Murray, Z. Li, and S. Shankar Sastry, + A Mathematical Introduction to + Robotic Manipulation (1994), p. 28 and 30). + + upp_tr - vector x, y, z so that one calculate + U = exp(A) with A= [[0, x, y], + [-x, 0, z], + [-y, -z, 0]] +------------------------------------------------------------------------- */ -void rodrigues_rotation(const double *upp_tr, double *out){ +void MinSpinOSO_CG::rodrigues_rotation(const double *upp_tr, double *out) +{ - /*** - * calculate 3x3 matrix exponential using Rodrigues' formula - * (R. Murray, Z. Li, and S. Shankar Sastry, - * A Mathematical Introduction to - * Robotic Manipulation (1994), p. 28 and 30). - * - * upp_tr - vector x, y, z so that one calculate - * U = exp(A) with A= [[0, x, y], - * [-x, 0, z], - * [-y, -z, 0]] - ***/ - - - if (fabs(upp_tr[0]) < 1.0e-40 && - fabs(upp_tr[1]) < 1.0e-40 && - fabs(upp_tr[2]) < 1.0e-40){ - // if upp_tr is zero, return unity matrix - int k; - int m; - for(k = 0; k < 3; k++){ - for(m = 0; m < 3; m++){ - if (m == k) out[3 * k + m] = 1.0; - else out[3 * k + m] = 0.0; - } - } - return; + if (fabs(upp_tr[0]) < 1.0e-40 && + fabs(upp_tr[1]) < 1.0e-40 && + fabs(upp_tr[2]) < 1.0e-40){ + + // if upp_tr is zero, return unity matrix + for(int k = 0; k < 3; k++){ + for(int m = 0; m < 3; m++){ + if (m == k) out[3 * k + m] = 1.0; + else out[3 * k + m] = 0.0; + } } + return; + } - double theta = sqrt(upp_tr[0] * upp_tr[0] + - upp_tr[1] * upp_tr[1] + - upp_tr[2] * upp_tr[2]); + double theta = sqrt(upp_tr[0] * upp_tr[0] + + upp_tr[1] * upp_tr[1] + + upp_tr[2] * upp_tr[2]); - double A = cos(theta); - double B = sin(theta); - double D = 1 - A; - double x = upp_tr[0]/theta; - double y = upp_tr[1]/theta; - double z = upp_tr[2]/theta; + double A = cos(theta); + double B = sin(theta); + double D = 1 - A; + double x = upp_tr[0]/theta; + double y = upp_tr[1]/theta; + double z = upp_tr[2]/theta; - // diagonal elements of U - out[0] = A + z * z * D; - out[4] = A + y * y * D; - out[8] = A + x * x * D; + // diagonal elements of U + + out[0] = A + z * z * D; + out[4] = A + y * y * D; + out[8] = A + x * x * D; - // off diagonal of U - double s1 = -y * z *D; - double s2 = x * z * D; - double s3 = -x * y * D; + // off diagonal of U + + double s1 = -y * z *D; + double s2 = x * z * D; + double s3 = -x * y * D; - double a1 = x * B; - double a2 = y * B; - double a3 = z * B; + double a1 = x * B; + double a2 = y * B; + double a3 = z * B; - out[1] = s1 + a1; - out[3] = s1 - a1; - out[2] = s2 + a2; - out[6] = s2 - a2; - out[5] = s3 + a3; - out[7] = s3 - a3; + out[1] = s1 + a1; + out[3] = s1 - a1; + out[2] = s2 + a2; + out[6] = s2 - a2; + out[5] = s3 + a3; + out[7] = s3 - a3; } +/* ---------------------------------------------------------------------- + out = vector^T x m, + m -- 3x3 matrix , v -- 3-d vector +------------------------------------------------------------------------- */ -void vm3(const double *m, const double *v, double *out){ - /*** - * out = vector^T x m, - * m -- 3x3 matrix , v -- 3-d vector - ***/ - - int i; - int j; - - for(i = 0; i < 3; i++){ - out[i] *= 0.0; - for(j = 0; j < 3; j++){ - out[i] += *(m + 3 * j + i) * v[j]; - } +void MinSpinOSO_CG::vm3(const double *m, const double *v, double *out) +{ + for(int i = 0; i < 3; i++){ + out[i] *= 0.0; + for(int j = 0; j < 3; j++){ + out[i] += *(m + 3 * j + i) * v[j]; } - + } } diff --git a/src/SPIN/min_spin_oso_cg.h b/src/SPIN/min_spin_oso_cg.h index a2ecf53e55..8cff52431c 100644 --- a/src/SPIN/min_spin_oso_cg.h +++ b/src/SPIN/min_spin_oso_cg.h @@ -13,7 +13,7 @@ #ifdef MINIMIZE_CLASS -MinimizeStyle(spin_oso_cg, MinSpinOSO_CG) +MinimizeStyle(spin/oso_cg, MinSpinOSO_CG) #else @@ -27,8 +27,8 @@ namespace LAMMPS_NS { class MinSpinOSO_CG : public Min { public: - MinSpinOSO_CG(class LAMMPS *); //? - ~MinSpinOSO_CG() {} //? + MinSpinOSO_CG(class LAMMPS *); + ~MinSpinOSO_CG() {} void init(); void setup_style(); int modify_param(int, char **); @@ -46,15 +46,18 @@ private: double dt; double dts; - double alpha_damp; // damping for spin minimization - double discrete_factor; // factor for spin timestep evaluation + double alpha_damp; // damping for spin minimization + double discrete_factor; // factor for spin timestep evaluation - double *spvec; // variables for atomic dof, as 1d vector - double *fmvec; // variables for atomic dof, as 1d vector + double *spvec; // variables for atomic dof, as 1d vector + double *fmvec; // variables for atomic dof, as 1d vector - double *g_old; // gradient vector at previous iteration - double *g; // gradient vector - double *p; // search direction vector + double *g_old; // gradient vector at previous iteration + double *g; // gradient vector + double *p; // search direction vector + + void vm3(const double *m, const double *v, double *out); + void rodrigues_rotation(const double *upp_tr, double *out); bigint last_negative; }; From 5c8e81241aba49399ef221bc841ccdc249cc08c1 Mon Sep 17 00:00:00 2001 From: julient31 Date: Fri, 28 Jun 2019 10:49:21 -0600 Subject: [PATCH 008/237] Commit JT 062819 - modified memory allocation --- src/SPIN/fix_nve_spin.h | 2 +- src/SPIN/min_spin_oso_cg.cpp | 90 ++++++++++++++++++++++-------------- src/SPIN/min_spin_oso_cg.h | 11 +++-- 3 files changed, 63 insertions(+), 40 deletions(-) diff --git a/src/SPIN/fix_nve_spin.h b/src/SPIN/fix_nve_spin.h index 4800575c06..89cd617e0b 100644 --- a/src/SPIN/fix_nve_spin.h +++ b/src/SPIN/fix_nve_spin.h @@ -54,7 +54,7 @@ friend class PairSpin; double dtv, dtf, dts; // velocity, force, and spin timesteps - int nlocal_max; // max value of nlocal (for lists size) + int nlocal_max; // max value of nlocal (for size of lists) int pair_spin_flag; // magnetic pair flags int long_spin_flag; // magnetic long-range flag diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index c09d12dbc8..d6bca32a40 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -34,6 +34,7 @@ #include "output.h" #include "timer.h" #include "error.h" +#include "memory.h" #include "modify.h" #include "math_special.h" #include "math_const.h" @@ -60,8 +61,20 @@ static const char cite_minstyle_spin_oso_cg[] = /* ---------------------------------------------------------------------- */ -MinSpinOSO_CG::MinSpinOSO_CG(LAMMPS *lmp) : Min(lmp) { +MinSpinOSO_CG::MinSpinOSO_CG(LAMMPS *lmp) : + Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL) +{ if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_cg); + nlocal_max = 0; +} + +/* ---------------------------------------------------------------------- */ + +MinSpinOSO_CG::~MinSpinOSO_CG() +{ + memory->destroy(g_old); + memory->destroy(g_cur); + memory->destroy(p_s); } /* ---------------------------------------------------------------------- */ @@ -75,6 +88,13 @@ void MinSpinOSO_CG::init() dts = dt = update->dt; last_negative = update->ntimestep; + + // allocate tables + + nlocal_max = atom->nlocal; + memory->grow(g_old,3*nlocal_max,"min/spin/oso/cg:g_old"); + memory->grow(g_cur,3*nlocal_max,"min/spin/oso/cg:g_cur"); + memory->grow(p_s,3*nlocal_max,"min/spin/oso/cg:p_s"); } /* ---------------------------------------------------------------------- */ @@ -134,17 +154,21 @@ void MinSpinOSO_CG::reset_vectors() minimization via damped spin dynamics ------------------------------------------------------------------------- */ +// g_old g_cur p_s + int MinSpinOSO_CG::iterate(int maxiter) { + int nlocal = atom->nlocal; bigint ntimestep; double fmdotfm; int flag, flagall; - // not sure it is best place to allocate memory - int nlocal = atom->nlocal; - g = (double *) calloc(3*nlocal, sizeof(double)); - p = (double *) calloc(3*nlocal, sizeof(double)); - g_old = (double *) calloc(3*nlocal, sizeof(double)); + if (nlocal_max < nlocal) { + nlocal_max = nlocal; + memory->grow(g_old,3*nlocal_max,"min/spin/oso/cg:g_old"); + memory->grow(g_cur,3*nlocal_max,"min/spin/oso/cg:g_cur"); + memory->grow(p_s,3*nlocal_max,"min/spin/oso/cg:p_s"); + } for (int iter = 0; iter < maxiter; iter++) { @@ -211,10 +235,6 @@ int MinSpinOSO_CG::iterate(int maxiter) } } - free(p); - free(g); - free(g_old); - return MAXITER; } @@ -286,9 +306,9 @@ void MinSpinOSO_CG::calc_gradient(double dts) // calculate gradients - g[3 * i + 0] = -tdampz * dts; - g[3 * i + 1] = tdampy * dts; - g[3 * i + 2] = -tdampx * dts; + g_cur[3 * i + 0] = -tdampz * dts; + g_cur[3 * i + 1] = tdampy * dts; + g_cur[3 * i + 2] = -tdampx * dts; } } @@ -312,15 +332,15 @@ void MinSpinOSO_CG::calc_search_direction(int iter) if (iter <= 2 || iter % 5 == 0){ // steepest descent direction for (int i = 0; i < nlocal; i++) { for (int j = 0; j < 3; j++){ - p[3 * i + j] = -g[3 * i + j]; - g_old[3 * i + j] = g[3 * i + j]; + p_s[3 * i + j] = -g_cur[3 * i + j]; + g_old[3 * i + j] = g_cur[3 * i + j]; } } } else { // conjugate direction for (int i = 0; i < nlocal; i++) { for (int j = 0; j < 3; j++){ g2old += g_old[3 * i + j] * g_old[3 * i + j]; - g2 += g[3 * i + j] * g[3 * i + j]; + g2 += g_cur[3 * i + j] * g_cur[3 * i + j]; } } @@ -337,8 +357,8 @@ void MinSpinOSO_CG::calc_search_direction(int iter) for (int i = 0; i < nlocal; i++) { for (int j = 0; j < 3; j++){ - p[3 * i + j] = beta * p[3 * i + j] - g[3 * i + j]; - g_old[3 * i + j] = g[3 * i + j]; + p_s[3 * i + j] = beta * p_s[3 * i + j] - g_cur[3 * i + j]; + g_old[3 * i + j] = g_cur[3 * i + j]; } } } @@ -360,7 +380,7 @@ void MinSpinOSO_CG::advance_spins() // loop on all spins on proc. for (int i = 0; i < nlocal; i++) { - rodrigues_rotation(p + 3 * i, rot_mat); + rodrigues_rotation(p_s + 3 * i, rot_mat); // rotate spins @@ -418,6 +438,8 @@ double MinSpinOSO_CG::fmnorm_sqr() void MinSpinOSO_CG::rodrigues_rotation(const double *upp_tr, double *out) { + double theta,A,B,D,x,y,z; + double s1,s2,s3,a1,a2,a3; if (fabs(upp_tr[0]) < 1.0e-40 && fabs(upp_tr[1]) < 1.0e-40 && @@ -433,16 +455,16 @@ void MinSpinOSO_CG::rodrigues_rotation(const double *upp_tr, double *out) return; } - double theta = sqrt(upp_tr[0] * upp_tr[0] + - upp_tr[1] * upp_tr[1] + - upp_tr[2] * upp_tr[2]); + theta = sqrt(upp_tr[0] * upp_tr[0] + + upp_tr[1] * upp_tr[1] + + upp_tr[2] * upp_tr[2]); - double A = cos(theta); - double B = sin(theta); - double D = 1 - A; - double x = upp_tr[0]/theta; - double y = upp_tr[1]/theta; - double z = upp_tr[2]/theta; + A = cos(theta); + B = sin(theta); + D = 1 - A; + x = upp_tr[0]/theta; + y = upp_tr[1]/theta; + z = upp_tr[2]/theta; // diagonal elements of U @@ -452,13 +474,13 @@ void MinSpinOSO_CG::rodrigues_rotation(const double *upp_tr, double *out) // off diagonal of U - double s1 = -y * z *D; - double s2 = x * z * D; - double s3 = -x * y * D; + s1 = -y * z *D; + s2 = x * z * D; + s3 = -x * y * D; - double a1 = x * B; - double a2 = y * B; - double a3 = z * B; + a1 = x * B; + a2 = y * B; + a3 = z * B; out[1] = s1 + a1; out[3] = s1 - a1; diff --git a/src/SPIN/min_spin_oso_cg.h b/src/SPIN/min_spin_oso_cg.h index 8cff52431c..a791754836 100644 --- a/src/SPIN/min_spin_oso_cg.h +++ b/src/SPIN/min_spin_oso_cg.h @@ -28,7 +28,7 @@ class MinSpinOSO_CG : public Min { public: MinSpinOSO_CG(class LAMMPS *); - ~MinSpinOSO_CG() {} + virtual ~MinSpinOSO_CG(); void init(); void setup_style(); int modify_param(int, char **); @@ -43,6 +43,7 @@ public: private: // global and spin timesteps + int nlocal_max; // max value of nlocal (for size of lists) double dt; double dts; @@ -53,11 +54,11 @@ private: double *fmvec; // variables for atomic dof, as 1d vector double *g_old; // gradient vector at previous iteration - double *g; // gradient vector - double *p; // search direction vector + double *g_cur; // current gradient vector + double *p_s; // search direction vector - void vm3(const double *m, const double *v, double *out); - void rodrigues_rotation(const double *upp_tr, double *out); + void vm3(const double *, const double *, double *); + void rodrigues_rotation(const double *, double *); bigint last_negative; }; From 61b12a09f2c3f81e520aa788721985f762d50ced Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 1 Jul 2019 08:01:11 +0000 Subject: [PATCH 009/237] added lbfgs --- src/SPIN/min_spin_oso_lbfgs.cpp | 577 ++++++++++++++++++++++++++++++++ src/SPIN/min_spin_oso_lbfgs.h | 73 ++++ 2 files changed, 650 insertions(+) create mode 100644 src/SPIN/min_spin_oso_lbfgs.cpp create mode 100644 src/SPIN/min_spin_oso_lbfgs.h diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp new file mode 100644 index 0000000000..f0a4fcbd87 --- /dev/null +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -0,0 +1,577 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------------ + Contributing authors: Aleksei Ivanov (UI) + Julien Tranchida (SNL) + + Please cite the related publication: + Ivanov, A. V., Uzdin, V. M., & Jónsson, H. (2019). Fast and Robust + Algorithm for the Minimisation of the Energy of Spin Systems. arXiv + preprint arXiv:1904.02669. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "min_spin_oso_lbfgs.h" +#include "universe.h" +#include "atom.h" +#include "citeme.h" +#include "force.h" +#include "update.h" +#include "output.h" +#include "timer.h" +#include "error.h" +#include "modify.h" +#include "math_special.h" +#include "math_const.h" + +#include +using namespace std; + +using namespace LAMMPS_NS; +using namespace MathConst; + +static const char cite_minstyle_spin_oso_lbfgs[] = + "min_style spin/oso_lbfgs command:\n\n" + "@article{ivanov2019fast,\n" + "title={Fast and Robust Algorithm for the Minimisation of the Energy of " + "Spin Systems},\n" + "author={Ivanov, A. V and Uzdin, V. M. and J{\'o}nsson, H.},\n" + "journal={arXiv preprint arXiv:1904.02669},\n" + "year={2019}\n" + "}\n\n"; + +// EPS_ENERGY = minimum normalization for energy tolerance + +#define EPS_ENERGY 1.0e-8 + +#define DELAYSTEP 5 + + +/* ---------------------------------------------------------------------- */ + +MinSpinOSO_LBFGS::MinSpinOSO_LBFGS(LAMMPS *lmp) : Min(lmp) { + if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_lbfgs); +} + +/* ---------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS::init() +{ + alpha_damp = 1.0; + discrete_factor = 10.0; + num_mem = 3; + + Min::init(); + + dts = dt = update->dt; + last_negative = update->ntimestep; +} + +/* ---------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS::setup_style() +{ + double **v = atom->v; + int nlocal = atom->nlocal; + + // check if the atom/spin style is defined + + if (!atom->sp_flag) + error->all(FLERR,"min/spin_oso_lbfgs requires atom/spin style"); + + for (int i = 0; i < nlocal; i++) + v[i][0] = v[i][1] = v[i][2] = 0.0; +} + +/* ---------------------------------------------------------------------- */ + +int MinSpinOSO_LBFGS::modify_param(int narg, char **arg) +{ + if (strcmp(arg[0],"alpha_damp") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + alpha_damp = force->numeric(FLERR,arg[1]); + return 2; + } + if (strcmp(arg[0],"discrete_factor") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + discrete_factor = force->numeric(FLERR,arg[1]); + return 2; + } + return 0; +} + +/* ---------------------------------------------------------------------- + set current vector lengths and pointers + called after atoms have migrated +------------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS::reset_vectors() +{ + // atomic dof + + // size sp is 4N vector + nvec = 4 * atom->nlocal; + if (nvec) spvec = atom->sp[0]; + + nvec = 3 * atom->nlocal; + if (nvec) fmvec = atom->fm[0]; + + if (nvec) xvec = atom->x[0]; + if (nvec) fvec = atom->f[0]; +} + +/* ---------------------------------------------------------------------- + minimization via damped spin dynamics +------------------------------------------------------------------------- */ + +int MinSpinOSO_LBFGS::iterate(int maxiter) +{ + bigint ntimestep; + double fmdotfm; + int flag, flagall; + + // not sure it is best place to allocate memory + int nlocal = atom->nlocal; + g = (double *) calloc(3*nlocal, sizeof(double)); + p = (double *) calloc(3*nlocal, sizeof(double)); + g_old = (double *) calloc(3*nlocal, sizeof(double)); + rho = (double *) calloc(num_mem, sizeof(double)); + ds = (double **) calloc(num_mem, sizeof(double *)); + dy = (double **) calloc(num_mem, sizeof(double *)); + for (int k = 0; k < num_mem; k++){ + ds[k] = (double *) calloc(3*nlocal, sizeof(double)); + dy[k] = (double *) calloc(3*nlocal, sizeof(double)); + } + + for (int iter = 0; iter < maxiter; iter++) { + + if (timer->check_timeout(niter)) + return TIMEOUT; + + ntimestep = ++update->ntimestep; + niter++; + + // optimize timestep accross processes / replicas + // need a force calculation for timestep optimization + + energy_force(0); + // dts = evaluate_dt(); + // dts = 1.0; + calc_gradient(1.0); + calc_search_direction(iter); + advance_spins(); + + eprevious = ecurrent; + ecurrent = energy_force(0); + neval++; + + //// energy tolerance criterion + //// only check after DELAYSTEP elapsed since velocties reset to 0 + //// sync across replicas if running multi-replica minimization + + if (update->etol > 0.0 && ntimestep-last_negative > DELAYSTEP) { + if (update->multireplica == 0) { + if (fabs(ecurrent-eprevious) < + update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) + return ETOL; + } else { + if (fabs(ecurrent-eprevious) < + update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) + flag = 0; + else flag = 1; + MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); + if (flagall == 0) return ETOL; + } + } + + // magnetic torque tolerance criterion + // sync across replicas if running multi-replica minimization + + if (update->ftol > 0.0) { + fmdotfm = fmnorm_sqr(); + if (update->multireplica == 0) { + if (fmdotfm < update->ftol*update->ftol) return FTOL; + } else { + if (fmdotfm < update->ftol*update->ftol) flag = 0; + else flag = 1; + MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); + if (flagall == 0) return FTOL; + } + } + + // output for thermo, dump, restart files + + if (output->next == ntimestep) { + timer->stamp(); + output->write(ntimestep); + timer->stamp(Timer::OUTPUT); + } + } + + free(p); + free(g); + free(g_old); + for (int k = 0; k < num_mem; k++){ + free(ds[k]); + free(dy[k]); + } + free(ds); + free(dy); + free(rho); + + return MAXITER; +} + +/* ---------------------------------------------------------------------- + evaluate max timestep +---------------------------------------------------------------------- */ + +double MinSpinOSO_LBFGS::evaluate_dt() +{ + double dtmax; + double fmsq; + double fmaxsqone,fmaxsqloc,fmaxsqall; + int nlocal = atom->nlocal; + double **fm = atom->fm; + + // finding max fm on this proc. + + fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; + for (int i = 0; i < nlocal; i++) { + fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; + fmaxsqone = MAX(fmaxsqone,fmsq); + } + + // finding max fm on this replica + + fmaxsqloc = fmaxsqone; + MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); + + // finding max fm over all replicas, if necessary + // this communicator would be invalid for multiprocess replicas + + fmaxsqall = fmaxsqloc; + if (update->multireplica == 1) { + fmaxsqall = fmaxsqloc; + MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); + } + + if (fmaxsqall == 0.0) + error->all(FLERR,"Incorrect fmaxsqall calculation"); + + // define max timestep by dividing by the + // inverse of max frequency by discrete_factor + + dtmax = MY_2PI/(discrete_factor*sqrt(fmaxsqall)); + + return dtmax; +} + +/* ---------------------------------------------------------------------- + calculate gradients +---------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS::calc_gradient(double dts) +{ + int nlocal = atom->nlocal; + double **sp = atom->sp; + double **fm = atom->fm; + double tdampx, tdampy, tdampz; + + // loop on all spins on proc. + + for (int i = 0; i < nlocal; i++) { + + // calc. damping torque + + tdampx = -alpha_damp*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); + tdampy = -alpha_damp*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + tdampz = -alpha_damp*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); + + // calculate gradients + + g[3 * i + 0] = -tdampz * dts; + g[3 * i + 1] = tdampy * dts; + g[3 * i + 2] = -tdampx * dts; + } +} + +/* ---------------------------------------------------------------------- + search direction +---------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS::calc_search_direction(int iter) +{ + int nlocal = atom->nlocal; + + double dyds = 0.0; + double sq = 0.0; + double yy = 0.0; + double yr = 0.0; + double beta = 0.0; + + double dyds_global = 0.0; + double sq_global = 0.0; + double yy_global = 0.0; + double yr_global = 0.0; + double beta_global = 0.0; + + int m_index = iter % num_mem; // memory index + int c_ind = 0; + double *q; + double *alpha; + + q = (double *) calloc(3*nlocal, sizeof(double)); + alpha = (double *) calloc(num_mem, sizeof(double)); + + // for some reason on a second iteration g_old = 0 + // so we make two iterations as steepest descent + + if (iter == 0){ // steepest descent direction + for (int i = 0; i < 3 * nlocal; i++) { + p[i] = -g[i]; + g_old[i] = g[i]; + ds[m_index][i] = 0.0; + dy[m_index][i] = 0.0; + + } + } else { + dyds = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + ds[m_index][i] = p[i]; + dy[m_index][i] = g[i] - g_old[i]; + dyds += ds[m_index][i] * dy[m_index][i]; + } +// MPI_Allreduce(&dyds, &dyds_global, 1, MPI_DOUBLE, MPI_SUM, world); + if (fabs(dyds) > 1.0e-60) rho[m_index] = 1.0 / dyds; + else rho[m_index] = 1.0e60; + + // set the q vector + + for (int i = 0; i < 3 * nlocal; i++) { + q[i] = g[i]; + } + + // loop over last m indecies + for(int k = num_mem - 1; k > -1; k--) { + // this loop should run from the newest memory to the oldest one. + + c_ind = (k + m_index + 1) % num_mem; + + // dot product between dg and q + + sq = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + sq += ds[c_ind][i] * q[i]; + } + + // update alpha + + alpha[c_ind] = rho[c_ind] * sq; + + // update q + + for (int i = 0; i < 3 * nlocal; i++) { + q[i] -= alpha[c_ind] * dy[c_ind][i]; + } + } + + // dot product between dg with itself + yy = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + yy += dy[m_index][i] * dy[m_index][i]; + } + + // calculate now search direction + + if (fabs(yy) > 1.0e-60) { + for (int i = 0; i < 3 * nlocal; i++) { + p[i] = q[i] / (rho[m_index] * yy); + } + }else{ + for (int i = 0; i < 3 * nlocal; i++) { + p[i] = q[i] * 1.0e60; + } + } + + for (int k = 0; k < num_mem; k++){ + // this loop should run from the oldest memory to the newest one. + + if (iter < num_mem) c_ind = k; + else c_ind = (k + m_index + 1) % num_mem; + + // dot product between p and da + yr = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + yr += dy[c_ind][i] * p[i]; + } + + beta = rho[c_ind] * yr; + for (int i = 0; i < 3 * nlocal; i++) { + p[i] += ds[c_ind][i] * (alpha[c_ind] - beta); + } + } + for (int i = 0; i < 3 * nlocal; i++) { + p[i] = -1.0 * p[i]; + g_old[i] = g[i]; + } + } + + free(q); + free(alpha); + +} + +/* ---------------------------------------------------------------------- + rotation of spins along the search direction +---------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS::advance_spins() +{ + int nlocal = atom->nlocal; + double **sp = atom->sp; + double **fm = atom->fm; + double tdampx, tdampy, tdampz; + double rot_mat[9]; // exponential of matrix made of search direction + double s_new[3]; + + // loop on all spins on proc. + + for (int i = 0; i < nlocal; i++) { + rodrigues_rotation(p + 3 * i, rot_mat); + + // rotate spins + + vm3(rot_mat, sp[i], s_new); + sp[i][0] = s_new[0]; + sp[i][1] = s_new[1]; + sp[i][2] = s_new[2]; + } +} + +/* ---------------------------------------------------------------------- + compute and return ||mag. torque||_2^2 +------------------------------------------------------------------------- */ + +double MinSpinOSO_LBFGS::fmnorm_sqr() +{ + int nlocal = atom->nlocal; + double tx,ty,tz; + double **sp = atom->sp; + double **fm = atom->fm; + + // calc. magnetic torques + + double local_norm2_sqr = 0.0; + for (int i = 0; i < nlocal; i++) { + tx = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); + ty = (fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + tz = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); + + local_norm2_sqr += tx*tx + ty*ty + tz*tz; + } + + // no extra atom calc. for spins + + if (nextra_atom) + error->all(FLERR,"extra atom option not available yet"); + + double norm2_sqr = 0.0; + MPI_Allreduce(&local_norm2_sqr,&norm2_sqr,1,MPI_DOUBLE,MPI_SUM,world); + + return norm2_sqr; +} + +/* ---------------------------------------------------------------------- + calculate 3x3 matrix exponential using Rodrigues' formula + (R. Murray, Z. Li, and S. Shankar Sastry, + A Mathematical Introduction to + Robotic Manipulation (1994), p. 28 and 30). + + upp_tr - vector x, y, z so that one calculate + U = exp(A) with A= [[0, x, y], + [-x, 0, z], + [-y, -z, 0]] +------------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS::rodrigues_rotation(const double *upp_tr, double *out) +{ + + if (fabs(upp_tr[0]) < 1.0e-40 && + fabs(upp_tr[1]) < 1.0e-40 && + fabs(upp_tr[2]) < 1.0e-40){ + + // if upp_tr is zero, return unity matrix + for(int k = 0; k < 3; k++){ + for(int m = 0; m < 3; m++){ + if (m == k) out[3 * k + m] = 1.0; + else out[3 * k + m] = 0.0; + } + } + return; + } + + double theta = sqrt(upp_tr[0] * upp_tr[0] + + upp_tr[1] * upp_tr[1] + + upp_tr[2] * upp_tr[2]); + + double A = cos(theta); + double B = sin(theta); + double D = 1 - A; + double x = upp_tr[0]/theta; + double y = upp_tr[1]/theta; + double z = upp_tr[2]/theta; + + // diagonal elements of U + + out[0] = A + z * z * D; + out[4] = A + y * y * D; + out[8] = A + x * x * D; + + // off diagonal of U + + double s1 = -y * z *D; + double s2 = x * z * D; + double s3 = -x * y * D; + + double a1 = x * B; + double a2 = y * B; + double a3 = z * B; + + out[1] = s1 + a1; + out[3] = s1 - a1; + out[2] = s2 + a2; + out[6] = s2 - a2; + out[5] = s3 + a3; + out[7] = s3 - a3; + +} + +/* ---------------------------------------------------------------------- + out = vector^T x m, + m -- 3x3 matrix , v -- 3-d vector +------------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS::vm3(const double *m, const double *v, double *out) +{ + for(int i = 0; i < 3; i++){ + out[i] *= 0.0; + for(int j = 0; j < 3; j++){ + out[i] += *(m + 3 * j + i) * v[j]; + } + } +} diff --git a/src/SPIN/min_spin_oso_lbfgs.h b/src/SPIN/min_spin_oso_lbfgs.h new file mode 100644 index 0000000000..0a06824382 --- /dev/null +++ b/src/SPIN/min_spin_oso_lbfgs.h @@ -0,0 +1,73 @@ +/* -*- 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 MINIMIZE_CLASS + +MinimizeStyle(spin/oso_lbfgs, MinSpinOSO_LBFGS) + +#else + +#ifndef LMP_MIN_SPIN_OSO_LBFGS_H +#define LMP_MIN_SPIN_OSO_LBFGS_H + +#include "min.h" + +namespace LAMMPS_NS { + +class MinSpinOSO_LBFGS : public Min { + +public: + MinSpinOSO_LBFGS(class LAMMPS *); + ~MinSpinOSO_LBFGS() {} + void init(); + void setup_style(); + int modify_param(int, char **); + void reset_vectors(); + int iterate(int); + double evaluate_dt(); + void advance_spins(); + double fmnorm_sqr(); + void calc_gradient(double); + void calc_search_direction(int); + +private: + // global and spin timesteps + + double dt; + double dts; + + double alpha_damp; // damping for spin minimization + double discrete_factor; // factor for spin timestep evaluation + + double *spvec; // variables for atomic dof, as 1d vector + double *fmvec; // variables for atomic dof, as 1d vector + + double *g; // gradient vector + double *g_old; // gradient vector at previous step + double *p; // search direction vector + double **ds; // change in rotation matrix between two iterations, da + double **dy; // change in gradients between two iterations, dg + double *rho; // estimation of curvature + int num_mem; // number of stored steps + + + void vm3(const double *m, const double *v, double *out); + void rodrigues_rotation(const double *upp_tr, double *out); + + bigint last_negative; +}; + +} + +#endif +#endif From 89ecd5d9f9e3daa9fb62430a883e896c3c5235e1 Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 1 Jul 2019 08:35:41 +0000 Subject: [PATCH 010/237] get rid off double loops in cg --- src/SPIN/min_spin_oso_cg.cpp | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index d6bca32a40..0c628f7567 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -329,19 +329,15 @@ void MinSpinOSO_CG::calc_search_direction(int iter) // for some reason on a second iteration g_old = 0 // so we make two iterations as steepest descent - if (iter <= 2 || iter % 5 == 0){ // steepest descent direction - for (int i = 0; i < nlocal; i++) { - for (int j = 0; j < 3; j++){ - p_s[3 * i + j] = -g_cur[3 * i + j]; - g_old[3 * i + j] = g_cur[3 * i + j]; - } + if (iter == 0 || iter % 5 == 0){ // steepest descent direction + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = -g_cur[i]; + g_old[i] = g_cur[i]; } } else { // conjugate direction - for (int i = 0; i < nlocal; i++) { - for (int j = 0; j < 3; j++){ - g2old += g_old[3 * i + j] * g_old[3 * i + j]; - g2 += g_cur[3 * i + j] * g_cur[3 * i + j]; - } + for (int i = 0; i < 3 * nlocal; i++) { + g2old += g_old[i] * g_old[i]; + g2 += g_cur[i] * g_cur[i]; } // now we need to collect/broadcast beta on this replica @@ -355,11 +351,9 @@ void MinSpinOSO_CG::calc_search_direction(int iter) // calculate conjugate direction - for (int i = 0; i < nlocal; i++) { - for (int j = 0; j < 3; j++){ - p_s[3 * i + j] = beta * p_s[3 * i + j] - g_cur[3 * i + j]; - g_old[3 * i + j] = g_cur[3 * i + j]; - } + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = beta * p_s[i] - g_cur[i]; + g_old[i] = g_cur[i]; } } } @@ -385,9 +379,7 @@ void MinSpinOSO_CG::advance_spins() // rotate spins vm3(rot_mat, sp[i], s_new); - sp[i][0] = s_new[0]; - sp[i][1] = s_new[1]; - sp[i][2] = s_new[2]; + for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; } } From 0f2997533a258ca0869c57ca3c67b309b1d538d7 Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 1 Jul 2019 08:36:44 +0000 Subject: [PATCH 011/237] get rid off double loops in cg --- src/SPIN/min_spin_oso_cg.cpp | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index d6bca32a40..5ea5ad8b6d 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -326,22 +326,15 @@ void MinSpinOSO_CG::calc_search_direction(int iter) double g2_global= 0.0; double g2old_global= 0.0; - // for some reason on a second iteration g_old = 0 - // so we make two iterations as steepest descent - - if (iter <= 2 || iter % 5 == 0){ // steepest descent direction - for (int i = 0; i < nlocal; i++) { - for (int j = 0; j < 3; j++){ - p_s[3 * i + j] = -g_cur[3 * i + j]; - g_old[3 * i + j] = g_cur[3 * i + j]; - } + if (iter == 0 || iter % 5 == 0){ // steepest descent direction + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = -g_cur[i]; + g_old[i] = g_cur[i]; } } else { // conjugate direction - for (int i = 0; i < nlocal; i++) { - for (int j = 0; j < 3; j++){ - g2old += g_old[3 * i + j] * g_old[3 * i + j]; - g2 += g_cur[3 * i + j] * g_cur[3 * i + j]; - } + for (int i = 0; i < 3 * nlocal; i++) { + g2old += g_old[i] * g_old[i]; + g2 += g_cur[i] * g_cur[i]; } // now we need to collect/broadcast beta on this replica @@ -355,11 +348,9 @@ void MinSpinOSO_CG::calc_search_direction(int iter) // calculate conjugate direction - for (int i = 0; i < nlocal; i++) { - for (int j = 0; j < 3; j++){ - p_s[3 * i + j] = beta * p_s[3 * i + j] - g_cur[3 * i + j]; - g_old[3 * i + j] = g_cur[3 * i + j]; - } + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = beta * p_s[i] - g_cur[i]; + g_old[i] = g_cur[i]; } } } From 5f74f6ddfa9aac318a00c17e1afd59f5d3438f15 Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 1 Jul 2019 08:38:44 +0000 Subject: [PATCH 012/237] delete irrelevant comment --- src/SPIN/min_spin_oso_cg.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 0c628f7567..4449832f54 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -326,9 +326,6 @@ void MinSpinOSO_CG::calc_search_direction(int iter) double g2_global= 0.0; double g2old_global= 0.0; - // for some reason on a second iteration g_old = 0 - // so we make two iterations as steepest descent - if (iter == 0 || iter % 5 == 0){ // steepest descent direction for (int i = 0; i < 3 * nlocal; i++) { p_s[i] = -g_cur[i]; From 6a2a4d5cfb00c51de71e4f59288a73b739cb2da9 Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 1 Jul 2019 08:58:31 +0000 Subject: [PATCH 013/237] parallelisation of lbfgs --- src/SPIN/min_spin_oso_lbfgs.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index f0a4fcbd87..f21245899b 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -356,8 +356,8 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) dy[m_index][i] = g[i] - g_old[i]; dyds += ds[m_index][i] * dy[m_index][i]; } -// MPI_Allreduce(&dyds, &dyds_global, 1, MPI_DOUBLE, MPI_SUM, world); - if (fabs(dyds) > 1.0e-60) rho[m_index] = 1.0 / dyds; + MPI_Allreduce(&dyds, &dyds_global, 1, MPI_DOUBLE, MPI_SUM, world); + if (fabs(dyds) > 1.0e-60) rho[m_index] = 1.0 / dyds_global; else rho[m_index] = 1.0e60; // set the q vector @@ -378,10 +378,11 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) for (int i = 0; i < 3 * nlocal; i++) { sq += ds[c_ind][i] * q[i]; } + MPI_Allreduce(&sq, &sq_global, 1, MPI_DOUBLE, MPI_SUM, world); // update alpha - alpha[c_ind] = rho[c_ind] * sq; + alpha[c_ind] = rho[c_ind] * sq_global; // update q @@ -395,12 +396,13 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) for (int i = 0; i < 3 * nlocal; i++) { yy += dy[m_index][i] * dy[m_index][i]; } + MPI_Allreduce(&yy, &yy_global, 1, MPI_DOUBLE, MPI_SUM, world); - // calculate now search direction + // calculate now search direction - if (fabs(yy) > 1.0e-60) { + if (fabs(yy_global) > 1.0e-60) { for (int i = 0; i < 3 * nlocal; i++) { - p[i] = q[i] / (rho[m_index] * yy); + p[i] = q[i] / (rho[m_index] * yy_global); } }else{ for (int i = 0; i < 3 * nlocal; i++) { @@ -419,8 +421,9 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) for (int i = 0; i < 3 * nlocal; i++) { yr += dy[c_ind][i] * p[i]; } + MPI_Allreduce(&yr, &yr_global, 1, MPI_DOUBLE, MPI_SUM, world); - beta = rho[c_ind] * yr; + beta = rho[c_ind] * yr_global; for (int i = 0; i < 3 * nlocal; i++) { p[i] += ds[c_ind][i] * (alpha[c_ind] - beta); } @@ -514,7 +517,7 @@ void MinSpinOSO_LBFGS::rodrigues_rotation(const double *upp_tr, double *out) if (fabs(upp_tr[0]) < 1.0e-40 && fabs(upp_tr[1]) < 1.0e-40 && fabs(upp_tr[2]) < 1.0e-40){ - + // if upp_tr is zero, return unity matrix for(int k = 0; k < 3; k++){ for(int m = 0; m < 3; m++){ @@ -537,13 +540,13 @@ void MinSpinOSO_LBFGS::rodrigues_rotation(const double *upp_tr, double *out) double z = upp_tr[2]/theta; // diagonal elements of U - + out[0] = A + z * z * D; out[4] = A + y * y * D; out[8] = A + x * x * D; // off diagonal of U - + double s1 = -y * z *D; double s2 = x * z * D; double s3 = -x * y * D; From 0a0e85ac46b335e0df5242ee1b635a39adddc1a1 Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 1 Jul 2019 09:03:17 +0000 Subject: [PATCH 014/237] rodr. rot. as in cg --- src/SPIN/min_spin_oso_lbfgs.cpp | 38 +++++++++++++++++---------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index f21245899b..d200e07f4a 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -513,6 +513,8 @@ double MinSpinOSO_LBFGS::fmnorm_sqr() void MinSpinOSO_LBFGS::rodrigues_rotation(const double *upp_tr, double *out) { + double theta,A,B,D,x,y,z; + double s1,s2,s3,a1,a2,a3; if (fabs(upp_tr[0]) < 1.0e-40 && fabs(upp_tr[1]) < 1.0e-40 && @@ -521,23 +523,23 @@ void MinSpinOSO_LBFGS::rodrigues_rotation(const double *upp_tr, double *out) // if upp_tr is zero, return unity matrix for(int k = 0; k < 3; k++){ for(int m = 0; m < 3; m++){ - if (m == k) out[3 * k + m] = 1.0; - else out[3 * k + m] = 0.0; - } + if (m == k) out[3 * k + m] = 1.0; + else out[3 * k + m] = 0.0; + } } return; } - double theta = sqrt(upp_tr[0] * upp_tr[0] + - upp_tr[1] * upp_tr[1] + - upp_tr[2] * upp_tr[2]); + theta = sqrt(upp_tr[0] * upp_tr[0] + + upp_tr[1] * upp_tr[1] + + upp_tr[2] * upp_tr[2]); - double A = cos(theta); - double B = sin(theta); - double D = 1 - A; - double x = upp_tr[0]/theta; - double y = upp_tr[1]/theta; - double z = upp_tr[2]/theta; + A = cos(theta); + B = sin(theta); + D = 1 - A; + x = upp_tr[0]/theta; + y = upp_tr[1]/theta; + z = upp_tr[2]/theta; // diagonal elements of U @@ -547,13 +549,13 @@ void MinSpinOSO_LBFGS::rodrigues_rotation(const double *upp_tr, double *out) // off diagonal of U - double s1 = -y * z *D; - double s2 = x * z * D; - double s3 = -x * y * D; + s1 = -y * z *D; + s2 = x * z * D; + s3 = -x * y * D; - double a1 = x * B; - double a2 = y * B; - double a3 = z * B; + a1 = x * B; + a2 = y * B; + a3 = z * B; out[1] = s1 + a1; out[3] = s1 - a1; From 1d64d78f240b3bc8a26872ba1cb78b5a83772b45 Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 1 Jul 2019 09:40:14 +0000 Subject: [PATCH 015/237] handle memory in a right way --- src/SPIN/min_spin_oso_lbfgs.cpp | 93 ++++++++++++++++++--------------- 1 file changed, 52 insertions(+), 41 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index d200e07f4a..1143786d73 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -34,13 +34,11 @@ #include "output.h" #include "timer.h" #include "error.h" +#include "memory.h" #include "modify.h" #include "math_special.h" #include "math_const.h" -#include -using namespace std; - using namespace LAMMPS_NS; using namespace MathConst; @@ -63,8 +61,23 @@ static const char cite_minstyle_spin_oso_lbfgs[] = /* ---------------------------------------------------------------------- */ -MinSpinOSO_LBFGS::MinSpinOSO_LBFGS(LAMMPS *lmp) : Min(lmp) { +MinSpinOSO_LBFGS::MinSpinOSO_LBFGS(LAMMPS *lmp) : + Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL), ds(NULL), dy(NULL), rho(NULL) +{ if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_lbfgs); + nlocal_max = 0; +} + +/* ---------------------------------------------------------------------- */ + +MinSpinOSO_LBFGS::~MinSpinOSO_LBFGS() +{ + memory->destroy(g_old); + memory->destroy(g_cur); + memory->destroy(p_s); + memory->destroy(ds); + memory->destroy(dy); + memory->destroy(rho); } /* ---------------------------------------------------------------------- */ @@ -79,6 +92,17 @@ void MinSpinOSO_LBFGS::init() dts = dt = update->dt; last_negative = update->ntimestep; + + // allocate tables + + nlocal_max = atom->nlocal; + memory->grow(g_old,3*nlocal_max,"min/spin/oso/lbfgs:g_old"); + memory->grow(g_cur,3*nlocal_max,"min/spin/oso/lbfgs:g_cur"); + memory->grow(p_s,3*nlocal_max,"min/spin/oso/lbfgs:p_s"); + memory->grow(rho,num_mem,"min/spin/oso/lbfgs:rho"); + memory->grow(ds,num_mem,3*nlocal_max,"min/spin/oso/lbfgs:ds"); + memory->grow(dy,num_mem,3*nlocal_max,"min/spin/oso/lbfgs:dy"); + } /* ---------------------------------------------------------------------- */ @@ -140,21 +164,19 @@ void MinSpinOSO_LBFGS::reset_vectors() int MinSpinOSO_LBFGS::iterate(int maxiter) { + int nlocal = atom->nlocal; bigint ntimestep; double fmdotfm; int flag, flagall; - // not sure it is best place to allocate memory - int nlocal = atom->nlocal; - g = (double *) calloc(3*nlocal, sizeof(double)); - p = (double *) calloc(3*nlocal, sizeof(double)); - g_old = (double *) calloc(3*nlocal, sizeof(double)); - rho = (double *) calloc(num_mem, sizeof(double)); - ds = (double **) calloc(num_mem, sizeof(double *)); - dy = (double **) calloc(num_mem, sizeof(double *)); - for (int k = 0; k < num_mem; k++){ - ds[k] = (double *) calloc(3*nlocal, sizeof(double)); - dy[k] = (double *) calloc(3*nlocal, sizeof(double)); + if (nlocal_max < nlocal) { + nlocal_max = nlocal; + memory->grow(g_old,3*nlocal_max,"min/spin/oso/cg:g_old"); + memory->grow(g_cur,3*nlocal_max,"min/spin/oso/cg:g_cur"); + memory->grow(p_s,3*nlocal_max,"min/spin/oso/cg:p_s"); + memory->grow(rho,num_mem,"min/spin/oso/lbfgs:rho"); + memory->grow(ds,num_mem,3*nlocal_max,"min/spin/oso/lbfgs:ds"); + memory->grow(dy,num_mem,3*nlocal_max,"min/spin/oso/lbfgs:dy"); } for (int iter = 0; iter < maxiter; iter++) { @@ -222,17 +244,6 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) } } - free(p); - free(g); - free(g_old); - for (int k = 0; k < num_mem; k++){ - free(ds[k]); - free(dy[k]); - } - free(ds); - free(dy); - free(rho); - return MAXITER; } @@ -304,9 +315,9 @@ void MinSpinOSO_LBFGS::calc_gradient(double dts) // calculate gradients - g[3 * i + 0] = -tdampz * dts; - g[3 * i + 1] = tdampy * dts; - g[3 * i + 2] = -tdampx * dts; + g_cur[3 * i + 0] = -tdampz * dts; + g_cur[3 * i + 1] = tdampy * dts; + g_cur[3 * i + 2] = -tdampx * dts; } } @@ -343,8 +354,8 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) if (iter == 0){ // steepest descent direction for (int i = 0; i < 3 * nlocal; i++) { - p[i] = -g[i]; - g_old[i] = g[i]; + p_s[i] = -g_cur[i]; + g_old[i] = g_cur[i]; ds[m_index][i] = 0.0; dy[m_index][i] = 0.0; @@ -352,8 +363,8 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) } else { dyds = 0.0; for (int i = 0; i < 3 * nlocal; i++) { - ds[m_index][i] = p[i]; - dy[m_index][i] = g[i] - g_old[i]; + ds[m_index][i] = p_s[i]; + dy[m_index][i] = g_cur[i] - g_old[i]; dyds += ds[m_index][i] * dy[m_index][i]; } MPI_Allreduce(&dyds, &dyds_global, 1, MPI_DOUBLE, MPI_SUM, world); @@ -363,7 +374,7 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) // set the q vector for (int i = 0; i < 3 * nlocal; i++) { - q[i] = g[i]; + q[i] = g_cur[i]; } // loop over last m indecies @@ -402,11 +413,11 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) if (fabs(yy_global) > 1.0e-60) { for (int i = 0; i < 3 * nlocal; i++) { - p[i] = q[i] / (rho[m_index] * yy_global); + p_s[i] = q[i] / (rho[m_index] * yy_global); } }else{ for (int i = 0; i < 3 * nlocal; i++) { - p[i] = q[i] * 1.0e60; + p_s[i] = q[i] * 1.0e60; } } @@ -419,18 +430,18 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) // dot product between p and da yr = 0.0; for (int i = 0; i < 3 * nlocal; i++) { - yr += dy[c_ind][i] * p[i]; + yr += dy[c_ind][i] * p_s[i]; } MPI_Allreduce(&yr, &yr_global, 1, MPI_DOUBLE, MPI_SUM, world); beta = rho[c_ind] * yr_global; for (int i = 0; i < 3 * nlocal; i++) { - p[i] += ds[c_ind][i] * (alpha[c_ind] - beta); + p_s[i] += ds[c_ind][i] * (alpha[c_ind] - beta); } } for (int i = 0; i < 3 * nlocal; i++) { - p[i] = -1.0 * p[i]; - g_old[i] = g[i]; + p_s[i] = -1.0 * p_s[i]; + g_old[i] = g_cur[i]; } } @@ -455,7 +466,7 @@ void MinSpinOSO_LBFGS::advance_spins() // loop on all spins on proc. for (int i = 0; i < nlocal; i++) { - rodrigues_rotation(p + 3 * i, rot_mat); + rodrigues_rotation(p_s + 3 * i, rot_mat); // rotate spins From 56c34e42670b7b2c079d462e480f17afe4508cb1 Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 1 Jul 2019 09:41:34 +0000 Subject: [PATCH 016/237] merge memory alloc for lbfgs --- src/SPIN/min_spin_oso_lbfgs.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.h b/src/SPIN/min_spin_oso_lbfgs.h index 0a06824382..3aa326142c 100644 --- a/src/SPIN/min_spin_oso_lbfgs.h +++ b/src/SPIN/min_spin_oso_lbfgs.h @@ -28,7 +28,7 @@ class MinSpinOSO_LBFGS : public Min { public: MinSpinOSO_LBFGS(class LAMMPS *); - ~MinSpinOSO_LBFGS() {} + virtual ~MinSpinOSO_LBFGS(); void init(); void setup_style(); int modify_param(int, char **); @@ -43,6 +43,7 @@ public: private: // global and spin timesteps + int nlocal_max; // max value of nlocal (for size of lists) double dt; double dts; @@ -52,9 +53,9 @@ private: double *spvec; // variables for atomic dof, as 1d vector double *fmvec; // variables for atomic dof, as 1d vector - double *g; // gradient vector + double *g_cur; // current gradient vector double *g_old; // gradient vector at previous step - double *p; // search direction vector + double *p_s; // search direction vector double **ds; // change in rotation matrix between two iterations, da double **dy; // change in gradients between two iterations, dg double *rho; // estimation of curvature From 924c610ebe69ae10656cd9ba70cc05f2723c900f Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 1 Jul 2019 09:45:05 +0000 Subject: [PATCH 017/237] use for loop --- src/SPIN/min_spin_oso_lbfgs.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index 1143786d73..f3643168a4 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -471,9 +471,7 @@ void MinSpinOSO_LBFGS::advance_spins() // rotate spins vm3(rot_mat, sp[i], s_new); - sp[i][0] = s_new[0]; - sp[i][1] = s_new[1]; - sp[i][2] = s_new[2]; + for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; } } From 398f33d4072576e9237744f95709982c1e6c895a Mon Sep 17 00:00:00 2001 From: alxvov Date: Tue, 2 Jul 2019 16:36:06 +0000 Subject: [PATCH 018/237] added cubic line search --- src/SPIN/min_spin_oso_lbfgs_ls.cpp | 717 +++++++++++++++++++++++++++++ src/SPIN/min_spin_oso_lbfgs_ls.h | 84 ++++ 2 files changed, 801 insertions(+) create mode 100644 src/SPIN/min_spin_oso_lbfgs_ls.cpp create mode 100644 src/SPIN/min_spin_oso_lbfgs_ls.h diff --git a/src/SPIN/min_spin_oso_lbfgs_ls.cpp b/src/SPIN/min_spin_oso_lbfgs_ls.cpp new file mode 100644 index 0000000000..f054755129 --- /dev/null +++ b/src/SPIN/min_spin_oso_lbfgs_ls.cpp @@ -0,0 +1,717 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------------ + Contributing authors: Aleksei Ivanov (UI) + Julien Tranchida (SNL) + + Please cite the related publication: + Ivanov, A. V., Uzdin, V. M., & Jónsson, H. (2019). Fast and Robust + Algorithm for the Minimisation of the Energy of Spin Systems. arXiv + preprint arXiv:1904.02669. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "min_spin_oso_lbfgs_ls.h" +#include "universe.h" +#include "atom.h" +#include "citeme.h" +#include "force.h" +#include "update.h" +#include "output.h" +#include "timer.h" +#include "error.h" +#include "memory.h" +#include "modify.h" +#include "math_special.h" +#include "math_const.h" +#include + + +using namespace LAMMPS_NS; +using namespace MathConst; + +static const char cite_minstyle_spin_oso_lbfgs_ls[] = + "min_style spin/oso_lbfgs_ls command:\n\n" + "@article{ivanov2019fast,\n" + "title={Fast and Robust Algorithm for the Minimisation of the Energy of " + "Spin Systems},\n" + "author={Ivanov, A. V and Uzdin, V. M. and J{\'o}nsson, H.},\n" + "journal={arXiv preprint arXiv:1904.02669},\n" + "year={2019}\n" + "}\n\n"; + +// EPS_ENERGY = minimum normalization for energy tolerance + +#define EPS_ENERGY 1.0e-8 + +#define DELAYSTEP 5 + + +/* ---------------------------------------------------------------------- */ + +MinSpinOSO_LBFGS_LS::MinSpinOSO_LBFGS_LS(LAMMPS *lmp) : + Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL), ds(NULL), dy(NULL), rho(NULL) +{ + if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_lbfgs_ls); + nlocal_max = 0; +} + +/* ---------------------------------------------------------------------- */ + +MinSpinOSO_LBFGS_LS::~MinSpinOSO_LBFGS_LS() +{ + memory->destroy(g_old); + memory->destroy(g_cur); + memory->destroy(p_s); + memory->destroy(ds); + memory->destroy(dy); + memory->destroy(rho); + memory->destroy(sp_copy); +} + +/* ---------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS_LS::init() +{ + alpha_damp = 1.0; + discrete_factor = 10.0; + num_mem = 3; + der_e_cur = 0.0; + der_e_pr = 0.0; + use_line_search = 1; + + Min::init(); + + dts = dt = update->dt; + last_negative = update->ntimestep; + + // allocate tables + + nlocal_max = atom->nlocal; + memory->grow(g_old,3*nlocal_max,"min/spin/oso/lbfgs_ls:g_old"); + memory->grow(g_cur,3*nlocal_max,"min/spin/oso/lbfgs_ls:g_cur"); + memory->grow(p_s,3*nlocal_max,"min/spin/oso/lbfgs_ls:p_s"); + memory->grow(rho,num_mem,"min/spin/oso/lbfgs_ls:rho"); + memory->grow(ds,num_mem,3*nlocal_max,"min/spin/oso/lbfgs_ls:ds"); + memory->grow(dy,num_mem,3*nlocal_max,"min/spin/oso/lbfgs_ls:dy"); + memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/lbfgs_ls:sp_copy"); + +} + +/* ---------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS_LS::setup_style() +{ + double **v = atom->v; + int nlocal = atom->nlocal; + + // check if the atom/spin style is defined + + if (!atom->sp_flag) + error->all(FLERR,"min/spin_oso_lbfgs_ls requires atom/spin style"); + + for (int i = 0; i < nlocal; i++) + v[i][0] = v[i][1] = v[i][2] = 0.0; +} + +/* ---------------------------------------------------------------------- */ + +int MinSpinOSO_LBFGS_LS::modify_param(int narg, char **arg) +{ + if (strcmp(arg[0],"alpha_damp") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + alpha_damp = force->numeric(FLERR,arg[1]); + return 2; + } + if (strcmp(arg[0],"discrete_factor") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + discrete_factor = force->numeric(FLERR,arg[1]); + return 2; + } + return 0; +} + +/* ---------------------------------------------------------------------- + set current vector lengths and pointers + called after atoms have migrated +------------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS_LS::reset_vectors() +{ + // atomic dof + + // size sp is 4N vector + nvec = 4 * atom->nlocal; + if (nvec) spvec = atom->sp[0]; + + nvec = 3 * atom->nlocal; + if (nvec) fmvec = atom->fm[0]; + + if (nvec) xvec = atom->x[0]; + if (nvec) fvec = atom->f[0]; +} + +/* ---------------------------------------------------------------------- + minimization via damped spin dynamics +------------------------------------------------------------------------- */ + +int MinSpinOSO_LBFGS_LS::iterate(int maxiter) +{ + int nlocal = atom->nlocal; + bigint ntimestep; + double fmdotfm; + int flag, flagall; + double **sp = atom->sp; + + if (nlocal_max < nlocal) { + nlocal_max = nlocal; + memory->grow(g_old,3*nlocal_max,"min/spin/oso/lbfgs_ls:g_old"); + memory->grow(g_cur,3*nlocal_max,"min/spin/oso/lbfgs_ls:g_cur"); + memory->grow(p_s,3*nlocal_max,"min/spin/oso/lbfgs_ls:p_s"); + memory->grow(rho,num_mem,"min/spin/oso/lbfgs_ls:rho"); + memory->grow(ds,num_mem,3*nlocal_max,"min/spin/oso/lbfgs_ls:ds"); + memory->grow(dy,num_mem,3*nlocal_max,"min/spin/oso/lbfgs_ls:dy"); + memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/lbfgs_ls:sp_copy"); + } + + + for (int iter = 0; iter < maxiter; iter++) { + + if (timer->check_timeout(niter)) + return TIMEOUT; + + ntimestep = ++update->ntimestep; + niter++; + + // optimize timestep accross processes / replicas + // need a force calculation for timestep optimization + + if (iter == 0){ + ecurrent = energy_force(0); + calc_gradient(1.0); + neval++; + }else{ + } + calc_search_direction(iter); + + if (use_line_search) { + der_e_cur = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + der_e_cur += g_cur[i] * p_s[i]; + } + } + + if (use_line_search){ + // here we need to do line search + for (int i = 0; i < nlocal; i++) { + for (int j = 0; j < 3; j++) sp_copy[i][j] = sp[i][j]; + } + eprevious = ecurrent; + der_e_pr = der_e_cur; + + calc_and_make_step(0.0, 1.0, 0); + } + else{ + advance_spins(); + eprevious = ecurrent; + ecurrent = energy_force(0); + neval++; + } + + //// energy tolerance criterion + //// only check after DELAYSTEP elapsed since velocties reset to 0 + //// sync across replicas if running multi-replica minimization + + if (update->etol > 0.0 && ntimestep-last_negative > DELAYSTEP) { + if (update->multireplica == 0) { + if (fabs(ecurrent-eprevious) < + update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) + return ETOL; + } else { + if (fabs(ecurrent-eprevious) < + update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) + flag = 0; + else flag = 1; + MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); + if (flagall == 0) return ETOL; + } + } + + // magnetic torque tolerance criterion + // sync across replicas if running multi-replica minimization + + if (update->ftol > 0.0) { + fmdotfm = fmnorm_sqr(); + if (update->multireplica == 0) { + if (fmdotfm < update->ftol*update->ftol) return FTOL; + } else { + if (fmdotfm < update->ftol*update->ftol) flag = 0; + else flag = 1; + MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); + if (flagall == 0) return FTOL; + } + } + + // output for thermo, dump, restart files + + if (output->next == ntimestep) { + timer->stamp(); + output->write(ntimestep); + timer->stamp(Timer::OUTPUT); + } + } + + return MAXITER; +} + +/* ---------------------------------------------------------------------- + evaluate max timestep +---------------------------------------------------------------------- */ + +double MinSpinOSO_LBFGS_LS::evaluate_dt() +{ + double dtmax; + double fmsq; + double fmaxsqone,fmaxsqloc,fmaxsqall; + int nlocal = atom->nlocal; + double **fm = atom->fm; + + // finding max fm on this proc. + + fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; + for (int i = 0; i < nlocal; i++) { + fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; + fmaxsqone = MAX(fmaxsqone,fmsq); + } + + // finding max fm on this replica + + fmaxsqloc = fmaxsqone; + MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); + + // finding max fm over all replicas, if necessary + // this communicator would be invalid for multiprocess replicas + + fmaxsqall = fmaxsqloc; + if (update->multireplica == 1) { + fmaxsqall = fmaxsqloc; + MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); + } + + if (fmaxsqall == 0.0) + error->all(FLERR,"Incorrect fmaxsqall calculation"); + + // define max timestep by dividing by the + // inverse of max frequency by discrete_factor + + dtmax = MY_2PI/(discrete_factor*sqrt(fmaxsqall)); + + return dtmax; +} + +/* ---------------------------------------------------------------------- + calculate gradients +---------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS_LS::calc_gradient(double dts) +{ + int nlocal = atom->nlocal; + double **sp = atom->sp; + double **fm = atom->fm; + double tdampx, tdampy, tdampz; + + // loop on all spins on proc. + + for (int i = 0; i < nlocal; i++) { + + // calc. damping torque + + tdampx = -alpha_damp*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); + tdampy = -alpha_damp*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + tdampz = -alpha_damp*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); + + // calculate gradients + + g_cur[3 * i + 0] = -tdampz * dts; + g_cur[3 * i + 1] = tdampy * dts; + g_cur[3 * i + 2] = -tdampx * dts; + } +} + +/* ---------------------------------------------------------------------- + search direction +---------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS_LS::calc_search_direction(int iter) +{ + int nlocal = atom->nlocal; + + double dyds = 0.0; + double sq = 0.0; + double yy = 0.0; + double yr = 0.0; + double beta = 0.0; + + double dyds_global = 0.0; + double sq_global = 0.0; + double yy_global = 0.0; + double yr_global = 0.0; + double beta_global = 0.0; + + int m_index = iter % num_mem; // memory index + int c_ind = 0; + double *q; + double *alpha; + + q = (double *) calloc(3*nlocal, sizeof(double)); + alpha = (double *) calloc(num_mem, sizeof(double)); + + // for some reason on a second iteration g_old = 0 + // so we make two iterations as steepest descent + + if (iter == 0){ // steepest descent direction + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = -g_cur[i]; + g_old[i] = g_cur[i]; + ds[m_index][i] = 0.0; + dy[m_index][i] = 0.0; + + } + } else { + dyds = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + ds[m_index][i] = p_s[i]; + dy[m_index][i] = g_cur[i] - g_old[i]; + dyds += ds[m_index][i] * dy[m_index][i]; + } + MPI_Allreduce(&dyds, &dyds_global, 1, MPI_DOUBLE, MPI_SUM, world); + if (fabs(dyds) > 1.0e-60) rho[m_index] = 1.0 / dyds_global; + else rho[m_index] = 1.0e60; + + // set the q vector + + for (int i = 0; i < 3 * nlocal; i++) { + q[i] = g_cur[i]; + } + + // loop over last m indecies + for(int k = num_mem - 1; k > -1; k--) { + // this loop should run from the newest memory to the oldest one. + + c_ind = (k + m_index + 1) % num_mem; + + // dot product between dg and q + + sq = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + sq += ds[c_ind][i] * q[i]; + } + MPI_Allreduce(&sq, &sq_global, 1, MPI_DOUBLE, MPI_SUM, world); + + // update alpha + + alpha[c_ind] = rho[c_ind] * sq_global; + + // update q + + for (int i = 0; i < 3 * nlocal; i++) { + q[i] -= alpha[c_ind] * dy[c_ind][i]; + } + } + + // dot product between dg with itself + yy = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + yy += dy[m_index][i] * dy[m_index][i]; + } + MPI_Allreduce(&yy, &yy_global, 1, MPI_DOUBLE, MPI_SUM, world); + + // calculate now search direction + + if (fabs(yy_global) > 1.0e-60) { + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = q[i] / (rho[m_index] * yy_global); + } + }else{ + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = q[i] * 1.0e60; + } + } + + for (int k = 0; k < num_mem; k++){ + // this loop should run from the oldest memory to the newest one. + + if (iter < num_mem) c_ind = k; + else c_ind = (k + m_index + 1) % num_mem; + + // dot product between p and da + yr = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + yr += dy[c_ind][i] * p_s[i]; + } + MPI_Allreduce(&yr, &yr_global, 1, MPI_DOUBLE, MPI_SUM, world); + + beta = rho[c_ind] * yr_global; + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] += ds[c_ind][i] * (alpha[c_ind] - beta); + } + } + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = -1.0 * p_s[i]; + g_old[i] = g_cur[i]; + } + } + + free(q); + free(alpha); + +} + +/* ---------------------------------------------------------------------- + rotation of spins along the search direction +---------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS_LS::advance_spins() +{ + int nlocal = atom->nlocal; + double **sp = atom->sp; + double **fm = atom->fm; + double tdampx, tdampy, tdampz; + double rot_mat[9]; // exponential of matrix made of search direction + double s_new[3]; + + // loop on all spins on proc. + + for (int i = 0; i < nlocal; i++) { + rodrigues_rotation(p_s + 3 * i, rot_mat); + + // rotate spins + + vm3(rot_mat, sp[i], s_new); + for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; + } +} + +/* ---------------------------------------------------------------------- + compute and return ||mag. torque||_2^2 +------------------------------------------------------------------------- */ + +double MinSpinOSO_LBFGS_LS::fmnorm_sqr() +{ + int nlocal = atom->nlocal; + double tx,ty,tz; + double **sp = atom->sp; + double **fm = atom->fm; + + // calc. magnetic torques + + double local_norm2_sqr = 0.0; + for (int i = 0; i < nlocal; i++) { + tx = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); + ty = (fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + tz = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); + + local_norm2_sqr += tx*tx + ty*ty + tz*tz; + } + + // no extra atom calc. for spins + + if (nextra_atom) + error->all(FLERR,"extra atom option not available yet"); + + double norm2_sqr = 0.0; + MPI_Allreduce(&local_norm2_sqr,&norm2_sqr,1,MPI_DOUBLE,MPI_SUM,world); + + return norm2_sqr; +} + +/* ---------------------------------------------------------------------- + calculate 3x3 matrix exponential using Rodrigues' formula + (R. Murray, Z. Li, and S. Shankar Sastry, + A Mathematical Introduction to + Robotic Manipulation (1994), p. 28 and 30). + + upp_tr - vector x, y, z so that one calculate + U = exp(A) with A= [[0, x, y], + [-x, 0, z], + [-y, -z, 0]] +------------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS_LS::rodrigues_rotation(const double *upp_tr, double *out) +{ + double theta,A,B,D,x,y,z; + double s1,s2,s3,a1,a2,a3; + + if (fabs(upp_tr[0]) < 1.0e-40 && + fabs(upp_tr[1]) < 1.0e-40 && + fabs(upp_tr[2]) < 1.0e-40){ + + // if upp_tr is zero, return unity matrix + for(int k = 0; k < 3; k++){ + for(int m = 0; m < 3; m++){ + if (m == k) out[3 * k + m] = 1.0; + else out[3 * k + m] = 0.0; + } + } + return; + } + + theta = sqrt(upp_tr[0] * upp_tr[0] + + upp_tr[1] * upp_tr[1] + + upp_tr[2] * upp_tr[2]); + + A = cos(theta); + B = sin(theta); + D = 1 - A; + x = upp_tr[0]/theta; + y = upp_tr[1]/theta; + z = upp_tr[2]/theta; + + // diagonal elements of U + + out[0] = A + z * z * D; + out[4] = A + y * y * D; + out[8] = A + x * x * D; + + // off diagonal of U + + s1 = -y * z *D; + s2 = x * z * D; + s3 = -x * y * D; + + a1 = x * B; + a2 = y * B; + a3 = z * B; + + out[1] = s1 + a1; + out[3] = s1 - a1; + out[2] = s2 + a2; + out[6] = s2 - a2; + out[5] = s3 + a3; + out[7] = s3 - a3; + +} + +/* ---------------------------------------------------------------------- + out = vector^T x m, + m -- 3x3 matrix , v -- 3-d vector +------------------------------------------------------------------------- */ + +void MinSpinOSO_LBFGS_LS::vm3(const double *m, const double *v, double *out) +{ + for(int i = 0; i < 3; i++){ + out[i] *= 0.0; + for(int j = 0; j < 3; j++){ + out[i] += *(m + 3 * j + i) * v[j]; + } + } +} + + +void MinSpinOSO_LBFGS_LS::make_step(double c, double *energy_and_der) +{ + double p_scaled[3]; + int nlocal = atom->nlocal; + double rot_mat[9]; // exponential of matrix made of search direction + double s_new[3]; + double **sp = atom->sp; + + for (int i = 0; i < nlocal; i++) { + + // scale the search direction + + for (int j = 0; j < 3; j++) p_scaled[j] = c * p_s[3 * i + j]; + + // calculate rotation matrix + + rodrigues_rotation(p_scaled, rot_mat); + + // rotate spins + + vm3(rot_mat, sp[i], s_new); + for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; + } + + ecurrent = energy_force(0); + calc_gradient(1.0); + neval++; + der_e_cur = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + der_e_cur += g_cur[i] * p_s[i]; + } + energy_and_der[0] = ecurrent; + energy_and_der[1] = der_e_cur; +} + + +int MinSpinOSO_LBFGS_LS::calc_and_make_step(double a, double b, int index) +{ + double e_and_d[2] = {0.0, 0.0}; + double alpha, c1, c2, c3; + double **sp = atom->sp; + int nlocal = atom->nlocal; + + make_step(b, e_and_d); + ecurrent = e_and_d[0]; + der_e_cur = e_and_d[1]; + index++; + + if (awc(der_e_pr, eprevious, e_and_d[1], e_and_d[0]) || index == 3){ + + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = b * p_s[i]; + } + return 1; + } + else{ + double r, f0, f1, df0, df1; + r = b - a; + f0 = eprevious; + f1 = ecurrent; + df0 = der_e_pr; + df1 = der_e_cur; + + c1 = -2.0*(f1-f0)/(r*r*r)+(df1+df0)/(r*r); + c2 = 3.0*(f1-f0)/(r*r)-(df1+2.0*df0)/(r); + c3 = df0; + + alpha = (-c2 + sqrt(c2*c2 - 3.0*c1*c3))/(3.0*c1); + if (alpha < 0.0) alpha = r/2.0; + + for (int i = 0; i < nlocal; i++) { + for (int j = 0; j < 3; j++) sp[i][j] = sp_copy[i][j]; + } + calc_and_make_step(0.0, alpha, index); + } + + return 0; + +} + + +int MinSpinOSO_LBFGS_LS::awc(double der_phi_0, double phi_0, double der_phi_j, double phi_j){ + + double eps = 1.0e-6; + double delta = 0.1; + double sigma = 0.9; + + if ((phi_j <= phi_0 + eps * fabs(phi_0)) && + ((2.0*delta - 1.0) * der_phi_0 >= der_phi_j >= sigma * der_phi_0)) + return 1; + else + return 0; +} diff --git a/src/SPIN/min_spin_oso_lbfgs_ls.h b/src/SPIN/min_spin_oso_lbfgs_ls.h new file mode 100644 index 0000000000..3e0e608ecb --- /dev/null +++ b/src/SPIN/min_spin_oso_lbfgs_ls.h @@ -0,0 +1,84 @@ +/* -*- 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 MINIMIZE_CLASS + +MinimizeStyle(spin/oso_lbfgs_ls, MinSpinOSO_LBFGS_LS) + +#else + +#ifndef LMP_MIN_SPIN_OSO_LBFGS_LS_H +#define LMP_MIN_SPIN_OSO_LBFGS_LS_H + +#include "min.h" + +namespace LAMMPS_NS { + +class MinSpinOSO_LBFGS_LS : public Min { + +public: + MinSpinOSO_LBFGS_LS(class LAMMPS *); + virtual ~MinSpinOSO_LBFGS_LS(); + void init(); + void setup_style(); + int modify_param(int, char **); + void reset_vectors(); + int iterate(int); + double evaluate_dt(); + void advance_spins(); + double fmnorm_sqr(); + void calc_gradient(double); + void calc_search_direction(int); + +private: + // global and spin timesteps + + int nlocal_max; // max value of nlocal (for size of lists) + double dt; + double dts; + + double alpha_damp; // damping for spin minimization + double discrete_factor; // factor for spin timestep evaluation + + double *spvec; // variables for atomic dof, as 1d vector + double *fmvec; // variables for atomic dof, as 1d vector + + double *g_cur; // current gradient vector + double *g_old; // gradient vector at previous step + double *p_s; // search direction vector + double **ds; // change in rotation matrix between two iterations, da + double **dy; // change in gradients between two iterations, dg + double *rho; // estimation of curvature + double **sp_copy; // copy of the spins + + int num_mem; // number of stored steps + + double der_e_cur; // current derivative along search dir. + double der_e_pr; // previous derivative along search dir. + + int use_line_search; // use line search or not. + + + void vm3(const double *, const double *, double *); + void rodrigues_rotation(const double *, double *); + int calc_and_make_step(double, double, int); + int awc(double, double, double, double); + void make_step(double, double *); + + bigint last_negative; +}; + +} + +#endif +#endif From ee8d3ced31fb88bc0356fd55e52053106495ad0a Mon Sep 17 00:00:00 2001 From: alxvov Date: Tue, 2 Jul 2019 16:39:27 +0000 Subject: [PATCH 019/237] change cg to lbfgs in oso_lbfgs --- src/SPIN/min_spin_oso_lbfgs.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index f3643168a4..2283a55e51 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -171,9 +171,9 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) if (nlocal_max < nlocal) { nlocal_max = nlocal; - memory->grow(g_old,3*nlocal_max,"min/spin/oso/cg:g_old"); - memory->grow(g_cur,3*nlocal_max,"min/spin/oso/cg:g_cur"); - memory->grow(p_s,3*nlocal_max,"min/spin/oso/cg:p_s"); + memory->grow(g_old,3*nlocal_max,"min/spin/oso/lbfgs:g_old"); + memory->grow(g_cur,3*nlocal_max,"min/spin/oso/lbfgs:g_cur"); + memory->grow(p_s,3*nlocal_max,"min/spin/oso/lbfgs:p_s"); memory->grow(rho,num_mem,"min/spin/oso/lbfgs:rho"); memory->grow(ds,num_mem,3*nlocal_max,"min/spin/oso/lbfgs:ds"); memory->grow(dy,num_mem,3*nlocal_max,"min/spin/oso/lbfgs:dy"); From fd5bc857b24f3d62944c45f0d55542deba473aeb Mon Sep 17 00:00:00 2001 From: alxvov Date: Tue, 2 Jul 2019 17:03:15 +0000 Subject: [PATCH 020/237] calculate energy in the beginning only once --- src/SPIN/min_spin.cpp | 2 +- src/SPIN/min_spin_oso_cg.cpp | 4 ++-- src/SPIN/min_spin_oso_lbfgs.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/SPIN/min_spin.cpp b/src/SPIN/min_spin.cpp index 2bddc110e7..2277281e80 100644 --- a/src/SPIN/min_spin.cpp +++ b/src/SPIN/min_spin.cpp @@ -133,7 +133,7 @@ int MinSpin::iterate(int maxiter) // optimize timestep accross processes / replicas // need a force calculation for timestep optimization - energy_force(0); + if (iter == 0) energy_force(0); dts = evaluate_dt(); // apply damped precessional dynamics to the spins diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 4449832f54..9ed2cb96ea 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -180,8 +180,8 @@ int MinSpinOSO_CG::iterate(int maxiter) // optimize timestep accross processes / replicas // need a force calculation for timestep optimization - - energy_force(0); + + if (iter == 0) energy_force(0); dts = evaluate_dt(); calc_gradient(dts); diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index 2283a55e51..b54c42ebfd 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -190,7 +190,7 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) // optimize timestep accross processes / replicas // need a force calculation for timestep optimization - energy_force(0); + if (iter == 0) energy_force(0); // dts = evaluate_dt(); // dts = 1.0; calc_gradient(1.0); From 44ca54fa25cc90f772c352ee0bfa75bad687a16e Mon Sep 17 00:00:00 2001 From: alxvov Date: Tue, 2 Jul 2019 17:06:53 +0000 Subject: [PATCH 021/237] a bit more comments --- src/SPIN/min_spin_oso_cg.cpp | 7 +++++-- src/SPIN/min_spin_oso_lbfgs.cpp | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 9ed2cb96ea..8d03ada45d 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -12,7 +12,7 @@ ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------ - Contributing authors: Aleksei Ivanov (UI) + Contributing authors: Aleksei Ivanov (University of Iceland) Julien Tranchida (SNL) Please cite the related publication: @@ -313,7 +313,10 @@ void MinSpinOSO_CG::calc_gradient(double dts) } /* ---------------------------------------------------------------------- - search direction + search direction: + The Fletcher-Reeves conj. grad. method + See Jorge Nocedal and Stephen J. Wright 'Numerical + Optimization' Second Edition, 2006 (p. 121) ---------------------------------------------------------------------- */ void MinSpinOSO_CG::calc_search_direction(int iter) diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index b54c42ebfd..81c36d5e32 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -12,7 +12,7 @@ ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------ - Contributing authors: Aleksei Ivanov (UI) + Contributing authors: Aleksei Ivanov (University of Iceland) Julien Tranchida (SNL) Please cite the related publication: @@ -322,7 +322,10 @@ void MinSpinOSO_LBFGS::calc_gradient(double dts) } /* ---------------------------------------------------------------------- - search direction + search direction: + Limited-memory BFGS. + See Jorge Nocedal and Stephen J. Wright 'Numerical + Optimization' Second Edition, 2006 (p. 177) ---------------------------------------------------------------------- */ void MinSpinOSO_LBFGS::calc_search_direction(int iter) From e3ed8d856209b3f7116f82b3077660ad4c2893ba Mon Sep 17 00:00:00 2001 From: alxvov Date: Tue, 2 Jul 2019 18:02:22 +0000 Subject: [PATCH 022/237] parallelisation of lbfgs, change indentation, more comments --- src/SPIN/min_spin_oso_lbfgs_ls.cpp | 140 ++++++++++++++++------------- 1 file changed, 79 insertions(+), 61 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs_ls.cpp b/src/SPIN/min_spin_oso_lbfgs_ls.cpp index f054755129..38a557266e 100644 --- a/src/SPIN/min_spin_oso_lbfgs_ls.cpp +++ b/src/SPIN/min_spin_oso_lbfgs_ls.cpp @@ -12,7 +12,7 @@ ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------ - Contributing authors: Aleksei Ivanov (UI) + Contributing authors: Aleksei Ivanov (University of Iceland) Julien Tranchida (SNL) Please cite the related publication: @@ -176,6 +176,7 @@ int MinSpinOSO_LBFGS_LS::iterate(int maxiter) double fmdotfm; int flag, flagall; double **sp = atom->sp; + double der_e_cur_global = 0.0; if (nlocal_max < nlocal) { nlocal_max = nlocal; @@ -213,6 +214,8 @@ int MinSpinOSO_LBFGS_LS::iterate(int maxiter) for (int i = 0; i < 3 * nlocal; i++) { der_e_cur += g_cur[i] * p_s[i]; } + MPI_Allreduce(&der_e_cur, &der_e_cur_global, 1, MPI_DOUBLE, MPI_SUM, world); + der_e_cur = der_e_cur_global; } if (use_line_search){ @@ -353,7 +356,10 @@ void MinSpinOSO_LBFGS_LS::calc_gradient(double dts) } /* ---------------------------------------------------------------------- - search direction + search direction: + Limited-memory BFGS. + See Jorge Nocedal and Stephen J. Wright 'Numerical + Optimization' Second Edition, 2006 (p. 177) ---------------------------------------------------------------------- */ void MinSpinOSO_LBFGS_LS::calc_search_direction(int iter) @@ -624,26 +630,26 @@ void MinSpinOSO_LBFGS_LS::vm3(const double *m, const double *v, double *out) void MinSpinOSO_LBFGS_LS::make_step(double c, double *energy_and_der) { - double p_scaled[3]; - int nlocal = atom->nlocal; - double rot_mat[9]; // exponential of matrix made of search direction - double s_new[3]; - double **sp = atom->sp; + double p_scaled[3]; + int nlocal = atom->nlocal; + double rot_mat[9]; // exponential of matrix made of search direction + double s_new[3]; + double **sp = atom->sp; + double der_e_cur_global = 0.0;; - for (int i = 0; i < nlocal; i++) { + for (int i = 0; i < nlocal; i++) { + // scale the search direction - // scale the search direction + for (int j = 0; j < 3; j++) p_scaled[j] = c * p_s[3 * i + j]; - for (int j = 0; j < 3; j++) p_scaled[j] = c * p_s[3 * i + j]; + // calculate rotation matrix - // calculate rotation matrix + rodrigues_rotation(p_scaled, rot_mat); - rodrigues_rotation(p_scaled, rot_mat); + // rotate spins - // rotate spins - - vm3(rot_mat, sp[i], s_new); - for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; + vm3(rot_mat, sp[i], s_new); + for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; } ecurrent = energy_force(0); @@ -653,65 +659,77 @@ void MinSpinOSO_LBFGS_LS::make_step(double c, double *energy_and_der) for (int i = 0; i < 3 * nlocal; i++) { der_e_cur += g_cur[i] * p_s[i]; } + MPI_Allreduce(&der_e_cur, &der_e_cur_global, 1, MPI_DOUBLE, MPI_SUM, world); + der_e_cur = der_e_cur_global; + energy_and_der[0] = ecurrent; energy_and_der[1] = der_e_cur; } +/* ---------------------------------------------------------------------- + Calculate step length which satisfies approximate Wolfe conditions + using the cubic interpolation +------------------------------------------------------------------------- */ int MinSpinOSO_LBFGS_LS::calc_and_make_step(double a, double b, int index) { - double e_and_d[2] = {0.0, 0.0}; - double alpha, c1, c2, c3; - double **sp = atom->sp; - int nlocal = atom->nlocal; + double e_and_d[2] = {0.0, 0.0}; + double alpha, c1, c2, c3; + double **sp = atom->sp; + int nlocal = atom->nlocal; - make_step(b, e_and_d); - ecurrent = e_and_d[0]; - der_e_cur = e_and_d[1]; - index++; + make_step(b, e_and_d); + ecurrent = e_and_d[0]; + der_e_cur = e_and_d[1]; + index++; - if (awc(der_e_pr, eprevious, e_and_d[1], e_and_d[0]) || index == 3){ + if (awc(der_e_pr, eprevious, e_and_d[1], e_and_d[0]) || index == 3){ + MPI_Bcast(&b,1,MPI_DOUBLE,0,world); - for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = b * p_s[i]; - } - return 1; + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = b * p_s[i]; + } + return 1; + } + else{ + double r, f0, f1, df0, df1; + r = b - a; + f0 = eprevious; + f1 = ecurrent; + df0 = der_e_pr; + df1 = der_e_cur; + + c1 = -2.0*(f1-f0)/(r*r*r)+(df1+df0)/(r*r); + c2 = 3.0*(f1-f0)/(r*r)-(df1+2.0*df0)/(r); + c3 = df0; + + // f(x) = c1 x^3 + c2 x^2 + c3 x^1 + c4 + // has minimum at alpha below. We do not check boundaries. + + alpha = (-c2 + sqrt(c2*c2 - 3.0*c1*c3))/(3.0*c1); + if (alpha < 0.0) alpha = r/2.0; + + for (int i = 0; i < nlocal; i++) { + for (int j = 0; j < 3; j++) sp[i][j] = sp_copy[i][j]; } - else{ - double r, f0, f1, df0, df1; - r = b - a; - f0 = eprevious; - f1 = ecurrent; - df0 = der_e_pr; - df1 = der_e_cur; - - c1 = -2.0*(f1-f0)/(r*r*r)+(df1+df0)/(r*r); - c2 = 3.0*(f1-f0)/(r*r)-(df1+2.0*df0)/(r); - c3 = df0; - - alpha = (-c2 + sqrt(c2*c2 - 3.0*c1*c3))/(3.0*c1); - if (alpha < 0.0) alpha = r/2.0; - - for (int i = 0; i < nlocal; i++) { - for (int j = 0; j < 3; j++) sp[i][j] = sp_copy[i][j]; - } - calc_and_make_step(0.0, alpha, index); - } - - return 0; + calc_and_make_step(0.0, alpha, index); + } + return 0; } - - +/* ---------------------------------------------------------------------- + Approximate Wolfe conditions: + William W. Hager and Hongchao Zhang + SIAM J. optim., 16(1), 170-192. (23 pages) +------------------------------------------------------------------------- */ int MinSpinOSO_LBFGS_LS::awc(double der_phi_0, double phi_0, double der_phi_j, double phi_j){ - double eps = 1.0e-6; - double delta = 0.1; - double sigma = 0.9; + double eps = 1.0e-6; + double delta = 0.1; + double sigma = 0.9; - if ((phi_j <= phi_0 + eps * fabs(phi_0)) && - ((2.0*delta - 1.0) * der_phi_0 >= der_phi_j >= sigma * der_phi_0)) - return 1; - else - return 0; + if ((phi_j <= phi_0 + eps * fabs(phi_0)) && ((2.0*delta - 1.0) * der_phi_0 >= der_phi_j >= sigma * der_phi_0)) + return 1; + else + return 0; } From 66a50419734d343a246ab5ce5a91ea327c4f8ab8 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 2 Jul 2019 16:02:36 -0600 Subject: [PATCH 023/237] Commit1 JT 060219 - added all min/spin tests in src/SPIN/neb_spin.cpp - added lbfgs to .gitignore - commit before pull/merge --- src/.gitignore | 2 ++ src/SPIN/min_spin_oso_lbfgs.cpp | 14 +++++++------- src/SPIN/neb_spin.cpp | 5 +++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/.gitignore b/src/.gitignore index 0d802981f9..f0ac3a1ff9 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -163,6 +163,8 @@ /min_spin.h /min_spin_oso_cg.cpp /min_spin_oso_cg.h +/min_spin_oso_lbfgs.cpp +/min_spin_oso_lbfgs.h /neb_spin.cpp /neb_spin.h /pair_spin.cpp diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index f3643168a4..23cb3718c8 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -361,12 +361,12 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) } } else { - dyds = 0.0; - for (int i = 0; i < 3 * nlocal; i++) { - ds[m_index][i] = p_s[i]; - dy[m_index][i] = g_cur[i] - g_old[i]; - dyds += ds[m_index][i] * dy[m_index][i]; - } + dyds = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + ds[m_index][i] = p_s[i]; + dy[m_index][i] = g_cur[i] - g_old[i]; + dyds += ds[m_index][i] * dy[m_index][i]; + } MPI_Allreduce(&dyds, &dyds_global, 1, MPI_DOUBLE, MPI_SUM, world); if (fabs(dyds) > 1.0e-60) rho[m_index] = 1.0 / dyds_global; else rho[m_index] = 1.0e60; @@ -409,7 +409,7 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) } MPI_Allreduce(&yy, &yy_global, 1, MPI_DOUBLE, MPI_SUM, world); - // calculate now search direction + // calculate now search direction if (fabs(yy_global) > 1.0e-60) { for (int i = 0; i < 3 * nlocal; i++) { diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index 126cfb09e3..9ab461cbe6 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -50,6 +50,7 @@ #include "memory.h" #include "error.h" #include "math_const.h" +#include "utils.h" using namespace LAMMPS_NS; using namespace MathConst; @@ -194,8 +195,8 @@ void NEBSpin::run() if (update->minimize->searchflag) error->all(FLERR,"NEBSpin requires damped dynamics minimizer"); - if (strcmp(update->minimize_style,"spin") != 0) - error->all(FLERR,"NEBSpin requires spin minimizer"); + if (!utils::strmatch(update->minimize_style,"^spin")) + error->all(FLERR,"NEBSpin requires a spin minimizer"); // setup regular NEBSpin minimization From 8452afb5120c03dfe941afa6a484b98b7e1c5347 Mon Sep 17 00:00:00 2001 From: alxvov Date: Wed, 3 Jul 2019 11:38:31 +0000 Subject: [PATCH 024/237] compare dyds_global instead --- src/SPIN/min_spin_oso_lbfgs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index 83d537030c..e8ac915d8b 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -371,7 +371,7 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) dyds += ds[m_index][i] * dy[m_index][i]; } MPI_Allreduce(&dyds, &dyds_global, 1, MPI_DOUBLE, MPI_SUM, world); - if (fabs(dyds) > 1.0e-60) rho[m_index] = 1.0 / dyds_global; + if (fabs(dyds_global) > 1.0e-60) rho[m_index] = 1.0 / dyds_global; else rho[m_index] = 1.0e60; // set the q vector From eaa542b6e78c828756fd83ff82aba113ea36504a Mon Sep 17 00:00:00 2001 From: alxvov Date: Wed, 3 Jul 2019 11:59:54 +0000 Subject: [PATCH 025/237] scale initial gradients with adaptive time step in the beggining, try to use global parameters for lbfgs --- src/SPIN/min_spin_oso_lbfgs.cpp | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index e8ac915d8b..a598601532 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -190,10 +190,13 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) // optimize timestep accross processes / replicas // need a force calculation for timestep optimization - if (iter == 0) energy_force(0); - // dts = evaluate_dt(); - // dts = 1.0; - calc_gradient(1.0); + if (iter == 0){ + energy_force(0); + dts = evaluate_dt(); + } + else dts = 1.0; + + calc_gradient(dts); calc_search_direction(iter); advance_spins(); @@ -371,6 +374,11 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) dyds += ds[m_index][i] * dy[m_index][i]; } MPI_Allreduce(&dyds, &dyds_global, 1, MPI_DOUBLE, MPI_SUM, world); + if (update->multireplica == 1) { + dyds = dyds_global; + MPI_Allreduce(&dyds_global,&dyds,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } + if (fabs(dyds_global) > 1.0e-60) rho[m_index] = 1.0 / dyds_global; else rho[m_index] = 1.0e60; @@ -393,6 +401,10 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) sq += ds[c_ind][i] * q[i]; } MPI_Allreduce(&sq, &sq_global, 1, MPI_DOUBLE, MPI_SUM, world); + if (update->multireplica == 1) { + sq = sq_global; + MPI_Allreduce(&sq_global,&sq,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } // update alpha @@ -411,6 +423,10 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) yy += dy[m_index][i] * dy[m_index][i]; } MPI_Allreduce(&yy, &yy_global, 1, MPI_DOUBLE, MPI_SUM, world); + if (update->multireplica == 1) { + yy = yy_global; + MPI_Allreduce(&yy_global,&yy,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } // calculate now search direction @@ -435,7 +451,12 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) for (int i = 0; i < 3 * nlocal; i++) { yr += dy[c_ind][i] * p_s[i]; } + MPI_Allreduce(&yr, &yr_global, 1, MPI_DOUBLE, MPI_SUM, world); + if (update->multireplica == 1) { + yr = yr_global; + MPI_Allreduce(&yr_global,&yr,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } beta = rho[c_ind] * yr_global; for (int i = 0; i < 3 * nlocal; i++) { From 48cc0293ffe7129370163ac8c0aa4c3e5c953e3d Mon Sep 17 00:00:00 2001 From: alxvov Date: Wed, 3 Jul 2019 12:01:21 +0000 Subject: [PATCH 026/237] if g2 zero then beta is also zero --- src/SPIN/min_spin_oso_cg.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 8d03ada45d..52bf48d228 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -326,9 +326,8 @@ void MinSpinOSO_CG::calc_search_direction(int iter) double g2 = 0.0; double beta = 0.0; - double g2_global= 0.0; - double g2old_global= 0.0; - + double g2_global = 0.0; + double g2old_global = 0.0; if (iter == 0 || iter % 5 == 0){ // steepest descent direction for (int i = 0; i < 3 * nlocal; i++) { p_s[i] = -g_cur[i]; @@ -347,8 +346,16 @@ void MinSpinOSO_CG::calc_search_direction(int iter) MPI_Allreduce(&g2, &g2_global, 1, MPI_DOUBLE, MPI_SUM, world); MPI_Allreduce(&g2old, &g2old_global, 1, MPI_DOUBLE, MPI_SUM, world); - beta = g2_global / g2old_global; + // we don't know yet if we need this. Needs to be tested with multiple replica. + // if (update->multireplica == 1) { + // g2 = g2_global; + // g2old = g2old_global; + // MPI_Allreduce(&g2,&g2_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + // MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + // } + if (fabs(g2_global) < 1.0e-40) beta = 0.0; + else beta = g2_global / g2old_global; // calculate conjugate direction for (int i = 0; i < 3 * nlocal; i++) { From 87fd17a4d2ce411cfbcff15d1cdd2bc41550570d Mon Sep 17 00:00:00 2001 From: alxvov Date: Wed, 3 Jul 2019 14:54:02 +0000 Subject: [PATCH 027/237] global dot products --- src/SPIN/min_spin_oso_lbfgs_ls.cpp | 37 +++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs_ls.cpp b/src/SPIN/min_spin_oso_lbfgs_ls.cpp index 38a557266e..2e124466ac 100644 --- a/src/SPIN/min_spin_oso_lbfgs_ls.cpp +++ b/src/SPIN/min_spin_oso_lbfgs_ls.cpp @@ -216,6 +216,9 @@ int MinSpinOSO_LBFGS_LS::iterate(int maxiter) } MPI_Allreduce(&der_e_cur, &der_e_cur_global, 1, MPI_DOUBLE, MPI_SUM, world); der_e_cur = der_e_cur_global; + if (update->multireplica == 1) { + MPI_Allreduce(&der_e_cur_global,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } } if (use_line_search){ @@ -388,7 +391,7 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction(int iter) // for some reason on a second iteration g_old = 0 // so we make two iterations as steepest descent - + if (iter == 0){ // steepest descent direction for (int i = 0; i < 3 * nlocal; i++) { p_s[i] = -g_cur[i]; @@ -405,7 +408,12 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction(int iter) dyds += ds[m_index][i] * dy[m_index][i]; } MPI_Allreduce(&dyds, &dyds_global, 1, MPI_DOUBLE, MPI_SUM, world); - if (fabs(dyds) > 1.0e-60) rho[m_index] = 1.0 / dyds_global; + if (update->multireplica == 1) { + dyds = dyds_global; + MPI_Allreduce(&dyds_global,&dyds,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } + + if (fabs(dyds_global) > 1.0e-60) rho[m_index] = 1.0 / dyds_global; else rho[m_index] = 1.0e60; // set the q vector @@ -427,7 +435,10 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction(int iter) sq += ds[c_ind][i] * q[i]; } MPI_Allreduce(&sq, &sq_global, 1, MPI_DOUBLE, MPI_SUM, world); - + if (update->multireplica == 1) { + sq = sq_global; + MPI_Allreduce(&sq_global,&sq,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } // update alpha alpha[c_ind] = rho[c_ind] * sq_global; @@ -445,8 +456,12 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction(int iter) yy += dy[m_index][i] * dy[m_index][i]; } MPI_Allreduce(&yy, &yy_global, 1, MPI_DOUBLE, MPI_SUM, world); + if (update->multireplica == 1) { + yy = yy_global; + MPI_Allreduce(&yy_global,&yy,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } - // calculate now search direction + // calculate now search direction if (fabs(yy_global) > 1.0e-60) { for (int i = 0; i < 3 * nlocal; i++) { @@ -470,6 +485,10 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction(int iter) yr += dy[c_ind][i] * p_s[i]; } MPI_Allreduce(&yr, &yr_global, 1, MPI_DOUBLE, MPI_SUM, world); + if (update->multireplica == 1) { + yr = yr_global; + MPI_Allreduce(&yr_global,&yr,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } beta = rho[c_ind] * yr_global; for (int i = 0; i < 3 * nlocal; i++) { @@ -661,6 +680,9 @@ void MinSpinOSO_LBFGS_LS::make_step(double c, double *energy_and_der) } MPI_Allreduce(&der_e_cur, &der_e_cur_global, 1, MPI_DOUBLE, MPI_SUM, world); der_e_cur = der_e_cur_global; + if (update->multireplica == 1) { + MPI_Allreduce(&der_e_cur_global,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } energy_and_der[0] = ecurrent; energy_and_der[1] = der_e_cur; @@ -685,10 +707,9 @@ int MinSpinOSO_LBFGS_LS::calc_and_make_step(double a, double b, int index) if (awc(der_e_pr, eprevious, e_and_d[1], e_and_d[0]) || index == 3){ MPI_Bcast(&b,1,MPI_DOUBLE,0,world); - - for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = b * p_s[i]; - } + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = b * p_s[i]; + } return 1; } else{ From 747245ee907151deb6cd691f9d53b43972f033d3 Mon Sep 17 00:00:00 2001 From: alxvov Date: Wed, 3 Jul 2019 15:06:53 +0000 Subject: [PATCH 028/237] sum beta over all replicas in cg. Good for GNEB --- src/SPIN/min_spin_oso_cg.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 52bf48d228..1b4e33ace3 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -346,13 +346,13 @@ void MinSpinOSO_CG::calc_search_direction(int iter) MPI_Allreduce(&g2, &g2_global, 1, MPI_DOUBLE, MPI_SUM, world); MPI_Allreduce(&g2old, &g2old_global, 1, MPI_DOUBLE, MPI_SUM, world); - // we don't know yet if we need this. Needs to be tested with multiple replica. - // if (update->multireplica == 1) { - // g2 = g2_global; - // g2old = g2old_global; - // MPI_Allreduce(&g2,&g2_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - // MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - // } + // Sum over all replicas. Good for GNEB. + if (update->multireplica == 1) { + g2 = g2_global; + g2old = g2old_global; + MPI_Allreduce(&g2,&g2_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } if (fabs(g2_global) < 1.0e-40) beta = 0.0; else beta = g2_global / g2old_global; From fb63c5a7085f3f5d6362f4cf3515bcd9666e469d Mon Sep 17 00:00:00 2001 From: julient31 Date: Wed, 3 Jul 2019 09:37:43 -0600 Subject: [PATCH 029/237] Commit1 JT 070319 - commit before pull --- src/SPIN/min_spin_oso_cg.cpp | 8 ++++---- src/SPIN/neb_spin.cpp | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 52bf48d228..094ae376aa 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -154,8 +154,6 @@ void MinSpinOSO_CG::reset_vectors() minimization via damped spin dynamics ------------------------------------------------------------------------- */ -// g_old g_cur p_s - int MinSpinOSO_CG::iterate(int maxiter) { int nlocal = atom->nlocal; @@ -163,6 +161,8 @@ int MinSpinOSO_CG::iterate(int maxiter) double fmdotfm; int flag, flagall; + // grow tables if nlocal increased + if (nlocal_max < nlocal) { nlocal_max = nlocal; memory->grow(g_old,3*nlocal_max,"min/spin/oso/cg:g_old"); @@ -354,8 +354,8 @@ void MinSpinOSO_CG::calc_search_direction(int iter) // MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); // } - if (fabs(g2_global) < 1.0e-40) beta = 0.0; - else beta = g2_global / g2old_global; + //if (fabs(g2_global) < 1.0e-40) beta = 0.0; + //else beta = g2_global / g2old_global; // calculate conjugate direction for (int i = 0; i < 3 * nlocal; i++) { diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index 9ab461cbe6..12d1d2a956 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -252,6 +252,8 @@ void NEBSpin::run() timer->init(); timer->barrier_start(); + // if(ireplica != 0 && ireplica != nreplica -1) + while (update->minimize->niter < n1steps) { update->minimize->run(nevery); print_status(); From 526e0da0a90bdd55458892a959b1bf1c60ce6204 Mon Sep 17 00:00:00 2001 From: alxvov Date: Wed, 3 Jul 2019 15:41:29 +0000 Subject: [PATCH 030/237] reduce correctly over the universe --- src/SPIN/min_spin_oso_lbfgs.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index a598601532..5604f99752 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -376,7 +376,7 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) MPI_Allreduce(&dyds, &dyds_global, 1, MPI_DOUBLE, MPI_SUM, world); if (update->multireplica == 1) { dyds = dyds_global; - MPI_Allreduce(&dyds_global,&dyds,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + MPI_Allreduce(&dyds, &dyds_global, 1,MPI_DOUBLE,MPI_SUM,universe->uworld); } if (fabs(dyds_global) > 1.0e-60) rho[m_index] = 1.0 / dyds_global; @@ -403,7 +403,7 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) MPI_Allreduce(&sq, &sq_global, 1, MPI_DOUBLE, MPI_SUM, world); if (update->multireplica == 1) { sq = sq_global; - MPI_Allreduce(&sq_global,&sq,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + MPI_Allreduce(&sq,&sq_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } // update alpha @@ -425,7 +425,7 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) MPI_Allreduce(&yy, &yy_global, 1, MPI_DOUBLE, MPI_SUM, world); if (update->multireplica == 1) { yy = yy_global; - MPI_Allreduce(&yy_global,&yy,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + MPI_Allreduce(&yy,&yy_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } // calculate now search direction @@ -455,7 +455,7 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) MPI_Allreduce(&yr, &yr_global, 1, MPI_DOUBLE, MPI_SUM, world); if (update->multireplica == 1) { yr = yr_global; - MPI_Allreduce(&yr_global,&yr,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + MPI_Allreduce(&yr,&yr_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } beta = rho[c_ind] * yr_global; From 99e58d889cdf3ba9794cd97b5315b891120b165b Mon Sep 17 00:00:00 2001 From: julient31 Date: Wed, 3 Jul 2019 10:48:11 -0600 Subject: [PATCH 031/237] Commit2 JT 070319 - fixing first and last images in oso_lbfgs.cpp --- src/SPIN/min_spin_oso_lbfgs.cpp | 20 +++++++++++++++++++- src/SPIN/min_spin_oso_lbfgs.h | 5 +++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index 5604f99752..a14bf7c4fd 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -39,6 +39,8 @@ #include "math_special.h" #include "math_const.h" +#include "universe.h" + using namespace LAMMPS_NS; using namespace MathConst; @@ -66,6 +68,13 @@ MinSpinOSO_LBFGS::MinSpinOSO_LBFGS(LAMMPS *lmp) : { if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_lbfgs); nlocal_max = 0; + + // nreplica = number of partitions + // ireplica = which world I am in universe + + nreplica = universe->nworlds; + ireplica = universe->iworld; + } /* ---------------------------------------------------------------------- */ @@ -198,7 +207,16 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) calc_gradient(dts); calc_search_direction(iter); - advance_spins(); + + // to be checked + // if gneb calc., nreplica > 0 + // then advance spins only if intermediate replica + // otherwise (simple minimization), advance spins + + if (nreplica > 0) { + if(ireplica != 0 && ireplica != nreplica-1) + advance_spins(); + } else advance_spins(); eprevious = ecurrent; ecurrent = energy_force(0); diff --git a/src/SPIN/min_spin_oso_lbfgs.h b/src/SPIN/min_spin_oso_lbfgs.h index 3aa326142c..3fc1d625dd 100644 --- a/src/SPIN/min_spin_oso_lbfgs.h +++ b/src/SPIN/min_spin_oso_lbfgs.h @@ -41,6 +41,11 @@ public: void calc_search_direction(int); private: + + + // test + int ireplica,nreplica; + // global and spin timesteps int nlocal_max; // max value of nlocal (for size of lists) From 3c3c7899b4fdceb378c206870ee4e93ff76711df Mon Sep 17 00:00:00 2001 From: alxvov Date: Wed, 3 Jul 2019 19:33:24 +0000 Subject: [PATCH 032/237] use local iteration counter, needed for neb --- src/SPIN/min_spin_oso_cg.cpp | 13 ++++++++----- src/SPIN/min_spin_oso_cg.h | 3 ++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 1b4e33ace3..8f2ba0623b 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -83,7 +83,7 @@ void MinSpinOSO_CG::init() { alpha_damp = 1.0; discrete_factor = 10.0; - + local_iter = 0; Min::init(); dts = dt = update->dt; @@ -164,6 +164,7 @@ int MinSpinOSO_CG::iterate(int maxiter) int flag, flagall; if (nlocal_max < nlocal) { + local_iter = 0; nlocal_max = nlocal; memory->grow(g_old,3*nlocal_max,"min/spin/oso/cg:g_old"); memory->grow(g_cur,3*nlocal_max,"min/spin/oso/cg:g_cur"); @@ -181,11 +182,11 @@ int MinSpinOSO_CG::iterate(int maxiter) // optimize timestep accross processes / replicas // need a force calculation for timestep optimization - if (iter == 0) energy_force(0); + if (local_iter == 0) energy_force(0); dts = evaluate_dt(); calc_gradient(dts); - calc_search_direction(iter); + calc_search_direction(); advance_spins(); eprevious = ecurrent; @@ -319,7 +320,7 @@ void MinSpinOSO_CG::calc_gradient(double dts) Optimization' Second Edition, 2006 (p. 121) ---------------------------------------------------------------------- */ -void MinSpinOSO_CG::calc_search_direction(int iter) +void MinSpinOSO_CG::calc_search_direction() { int nlocal = atom->nlocal; double g2old = 0.0; @@ -328,7 +329,7 @@ void MinSpinOSO_CG::calc_search_direction(int iter) double g2_global = 0.0; double g2old_global = 0.0; - if (iter == 0 || iter % 5 == 0){ // steepest descent direction + if (local_iter == 0 || local_iter % 5 == 0){ // steepest descent direction for (int i = 0; i < 3 * nlocal; i++) { p_s[i] = -g_cur[i]; g_old[i] = g_cur[i]; @@ -363,6 +364,8 @@ void MinSpinOSO_CG::calc_search_direction(int iter) g_old[i] = g_cur[i]; } } + + local_iter++; } /* ---------------------------------------------------------------------- diff --git a/src/SPIN/min_spin_oso_cg.h b/src/SPIN/min_spin_oso_cg.h index a791754836..3a3d24f078 100644 --- a/src/SPIN/min_spin_oso_cg.h +++ b/src/SPIN/min_spin_oso_cg.h @@ -38,7 +38,7 @@ public: void advance_spins(); double fmnorm_sqr(); void calc_gradient(double); - void calc_search_direction(int); + void calc_search_direction(); private: // global and spin timesteps @@ -56,6 +56,7 @@ private: double *g_old; // gradient vector at previous iteration double *g_cur; // current gradient vector double *p_s; // search direction vector + int local_iter; // number of times we call search_direction void vm3(const double *, const double *, double *); void rodrigues_rotation(const double *, double *); From 95cf85f1b932acc983ab826c90cdcc78e3991751 Mon Sep 17 00:00:00 2001 From: alxvov Date: Wed, 3 Jul 2019 21:12:04 +0000 Subject: [PATCH 033/237] bug: forget to calculate beta.. --- src/SPIN/min_spin_oso_cg.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 6ae2518986..d8535b19c4 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -355,10 +355,9 @@ void MinSpinOSO_CG::calc_search_direction() MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } - //if (fabs(g2_global) < 1.0e-40) beta = 0.0; - //else beta = g2_global / g2old_global; + if (fabs(g2_global) < 1.0e-60) beta = 0.0; + else beta = g2_global / g2old_global; // calculate conjugate direction - for (int i = 0; i < 3 * nlocal; i++) { p_s[i] = beta * p_s[i] - g_cur[i]; g_old[i] = g_cur[i]; From e85bdd17d3a2980f1987f2770c1958c8bbcd8015 Mon Sep 17 00:00:00 2001 From: alxvov Date: Thu, 4 Jul 2019 15:31:18 +0000 Subject: [PATCH 034/237] introduce cutoff step. make lbfgs stable --- src/SPIN/min_spin_oso_lbfgs.cpp | 107 +++++++++++++++++++++++++------- src/SPIN/min_spin_oso_lbfgs.h | 12 ++-- 2 files changed, 92 insertions(+), 27 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index a14bf7c4fd..09948ac3e5 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -38,7 +38,6 @@ #include "modify.h" #include "math_special.h" #include "math_const.h" - #include "universe.h" using namespace LAMMPS_NS; @@ -96,6 +95,8 @@ void MinSpinOSO_LBFGS::init() alpha_damp = 1.0; discrete_factor = 10.0; num_mem = 3; + local_iter = 0; + maxepsrot = MY_2PI / (200.0); Min::init(); @@ -180,6 +181,7 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) if (nlocal_max < nlocal) { nlocal_max = nlocal; + local_iter = 0; memory->grow(g_old,3*nlocal_max,"min/spin/oso/lbfgs:g_old"); memory->grow(g_cur,3*nlocal_max,"min/spin/oso/lbfgs:g_cur"); memory->grow(p_s,3*nlocal_max,"min/spin/oso/lbfgs:p_s"); @@ -198,26 +200,26 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) // optimize timestep accross processes / replicas // need a force calculation for timestep optimization - - if (iter == 0){ - energy_force(0); - dts = evaluate_dt(); - } - else dts = 1.0; + if (local_iter == 0) energy_force(0); + // to be checked + // if gneb calc., nreplica > 1 + // then calculate gradients of intermediate replicas - calc_gradient(dts); + if (nreplica > 1) { + if(ireplica != 0 && ireplica != nreplica-1) + calc_gradient(1.0); + } else calc_gradient(1.0); calc_search_direction(iter); // to be checked - // if gneb calc., nreplica > 0 + // if gneb calc., nreplica > 1 // then advance spins only if intermediate replica // otherwise (simple minimization), advance spins - if (nreplica > 0) { + if (nreplica > 1) { if(ireplica != 0 && ireplica != nreplica-1) advance_spins(); } else advance_spins(); - eprevious = ecurrent; ecurrent = energy_force(0); neval++; @@ -307,7 +309,7 @@ double MinSpinOSO_LBFGS::evaluate_dt() // define max timestep by dividing by the // inverse of max frequency by discrete_factor - + // std::cout << fmaxsqall << "\n"; dtmax = MY_2PI/(discrete_factor*sqrt(fmaxsqall)); return dtmax; @@ -365,20 +367,31 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) double yr_global = 0.0; double beta_global = 0.0; - int m_index = iter % num_mem; // memory index + int m_index = local_iter % num_mem; // memory index int c_ind = 0; double *q; double *alpha; + double factor; + double scaling; + + if (nreplica > 1) { + if (ireplica == 0 || ireplica == nreplica - 1) { + factor = 0.0; + } + else factor = 1.0; + }else{ + factor = 1.0; + } + q = (double *) calloc(3*nlocal, sizeof(double)); alpha = (double *) calloc(num_mem, sizeof(double)); - // for some reason on a second iteration g_old = 0 - // so we make two iterations as steepest descent - - if (iter == 0){ // steepest descent direction + if (local_iter == 0){ // steepest descent direction + + scaling = maximum_rotation(g_cur); for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = -g_cur[i]; + p_s[i] = - g_cur[i] * factor * scaling; g_old[i] = g_cur[i]; ds[m_index][i] = 0.0; dy[m_index][i] = 0.0; @@ -392,7 +405,9 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) dyds += ds[m_index][i] * dy[m_index][i]; } MPI_Allreduce(&dyds, &dyds_global, 1, MPI_DOUBLE, MPI_SUM, world); + if (update->multireplica == 1) { + dyds_global *= factor; dyds = dyds_global; MPI_Allreduce(&dyds, &dyds_global, 1,MPI_DOUBLE,MPI_SUM,universe->uworld); } @@ -400,6 +415,17 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) if (fabs(dyds_global) > 1.0e-60) rho[m_index] = 1.0 / dyds_global; else rho[m_index] = 1.0e60; + if (rho[m_index] < 0.0){ + local_iter = 0; + for (int k = 0; k < num_mem; k++){ + for (int i = 0; i < nlocal; i ++){ + ds[k][i] = 0.0; + dy[k][i] = 0.0; + } + } + return calc_search_direction(0); + } + // set the q vector for (int i = 0; i < 3 * nlocal; i++) { @@ -420,6 +446,7 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) } MPI_Allreduce(&sq, &sq_global, 1, MPI_DOUBLE, MPI_SUM, world); if (update->multireplica == 1) { + sq_global *= factor; sq = sq_global; MPI_Allreduce(&sq,&sq_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } @@ -442,19 +469,22 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) } MPI_Allreduce(&yy, &yy_global, 1, MPI_DOUBLE, MPI_SUM, world); if (update->multireplica == 1) { + yy_global *= factor; yy = yy_global; MPI_Allreduce(&yy,&yy_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } // calculate now search direction - if (fabs(yy_global) > 1.0e-60) { + double devis = rho[m_index] * yy_global; + + if (fabs(devis) > 1.0e-60) { for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = q[i] / (rho[m_index] * yy_global); + p_s[i] = factor * q[i] / devis; } }else{ for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = q[i] * 1.0e60; + p_s[i] = factor * q[i] * 1.0e60; } } @@ -472,6 +502,7 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) MPI_Allreduce(&yr, &yr_global, 1, MPI_DOUBLE, MPI_SUM, world); if (update->multireplica == 1) { + yr_global *= factor; yr = yr_global; MPI_Allreduce(&yr,&yr_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } @@ -481,12 +512,14 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) p_s[i] += ds[c_ind][i] * (alpha[c_ind] - beta); } } + scaling = maximum_rotation(p_s); for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = -1.0 * p_s[i]; + p_s[i] = - factor * p_s[i] * scaling; g_old[i] = g_cur[i]; } } + local_iter++; free(q); free(alpha); @@ -631,3 +664,33 @@ void MinSpinOSO_LBFGS::vm3(const double *m, const double *v, double *out) } } } + +double MinSpinOSO_LBFGS::maximum_rotation(double *p) +{ + double norm, norm_global, scaling, alpha; + int nlocal = atom->nlocal; + int ntotal = 0; + + norm = 0.0; + for (int i = 0; i < 3 * nlocal; i++) norm += p[i] * p[i]; + + MPI_Allreduce(&norm,&norm_global,1,MPI_DOUBLE,MPI_SUM,world); + if (update->multireplica == 1) { + norm = norm_global; + MPI_Allreduce(&norm,&norm_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } + + MPI_Allreduce(&nlocal,&ntotal,1,MPI_INT,MPI_SUM,world); + if (update->multireplica == 1) { + nlocal = ntotal; + MPI_Allreduce(&nlocal,&ntotal,1,MPI_INT,MPI_SUM,universe->uworld); + } + + scaling = (maxepsrot * sqrt((double) ntotal / norm_global)); + + if (scaling < 1.0) alpha = scaling; + else alpha = 1.0; + + return alpha; +} + diff --git a/src/SPIN/min_spin_oso_lbfgs.h b/src/SPIN/min_spin_oso_lbfgs.h index 3fc1d625dd..dfc4ec06ff 100644 --- a/src/SPIN/min_spin_oso_lbfgs.h +++ b/src/SPIN/min_spin_oso_lbfgs.h @@ -38,8 +38,8 @@ public: void advance_spins(); double fmnorm_sqr(); void calc_gradient(double); - void calc_search_direction(int); - + void calc_search_direction(int); + double maximum_rotation(double *); private: @@ -64,11 +64,13 @@ private: double **ds; // change in rotation matrix between two iterations, da double **dy; // change in gradients between two iterations, dg double *rho; // estimation of curvature - int num_mem; // number of stored steps + int num_mem; // number of stored steps + int local_iter; // number of times we call search_direction + double maxepsrot; - void vm3(const double *m, const double *v, double *out); - void rodrigues_rotation(const double *upp_tr, double *out); + void vm3(const double *, const double *, double *); + void rodrigues_rotation(const double *, double *); bigint last_negative; }; From f3985c853edace460556d87ff22ed81de884cb25 Mon Sep 17 00:00:00 2001 From: alxvov Date: Thu, 4 Jul 2019 18:19:57 +0000 Subject: [PATCH 035/237] local iter instead of iter --- src/SPIN/min_spin_oso_lbfgs.cpp | 12 ++++++------ src/SPIN/min_spin_oso_lbfgs.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index 09948ac3e5..9687f2f64d 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -96,7 +96,7 @@ void MinSpinOSO_LBFGS::init() discrete_factor = 10.0; num_mem = 3; local_iter = 0; - maxepsrot = MY_2PI / (200.0); + maxepsrot = MY_2PI / (100.0); Min::init(); @@ -209,7 +209,7 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) if(ireplica != 0 && ireplica != nreplica-1) calc_gradient(1.0); } else calc_gradient(1.0); - calc_search_direction(iter); + calc_search_direction(); // to be checked // if gneb calc., nreplica > 1 @@ -351,7 +351,7 @@ void MinSpinOSO_LBFGS::calc_gradient(double dts) Optimization' Second Edition, 2006 (p. 177) ---------------------------------------------------------------------- */ -void MinSpinOSO_LBFGS::calc_search_direction(int iter) +void MinSpinOSO_LBFGS::calc_search_direction() { int nlocal = atom->nlocal; @@ -418,12 +418,12 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) if (rho[m_index] < 0.0){ local_iter = 0; for (int k = 0; k < num_mem; k++){ - for (int i = 0; i < nlocal; i ++){ + for (int i = 0; i < nlocal; i ++){ ds[k][i] = 0.0; dy[k][i] = 0.0; } } - return calc_search_direction(0); + return calc_search_direction(); } // set the q vector @@ -491,7 +491,7 @@ void MinSpinOSO_LBFGS::calc_search_direction(int iter) for (int k = 0; k < num_mem; k++){ // this loop should run from the oldest memory to the newest one. - if (iter < num_mem) c_ind = k; + if (local_iter < num_mem) c_ind = k; else c_ind = (k + m_index + 1) % num_mem; // dot product between p and da diff --git a/src/SPIN/min_spin_oso_lbfgs.h b/src/SPIN/min_spin_oso_lbfgs.h index dfc4ec06ff..c0f8dc484d 100644 --- a/src/SPIN/min_spin_oso_lbfgs.h +++ b/src/SPIN/min_spin_oso_lbfgs.h @@ -38,7 +38,7 @@ public: void advance_spins(); double fmnorm_sqr(); void calc_gradient(double); - void calc_search_direction(int); + void calc_search_direction(); double maximum_rotation(double *); private: From 79f8e422f9f8ee044db5b9e5cb7cee6b637e3dff Mon Sep 17 00:00:00 2001 From: alxvov Date: Thu, 4 Jul 2019 18:21:07 +0000 Subject: [PATCH 036/237] indentation --- src/SPIN/min_spin_oso_lbfgs.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index 9687f2f64d..fd83e7b460 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -418,7 +418,7 @@ void MinSpinOSO_LBFGS::calc_search_direction() if (rho[m_index] < 0.0){ local_iter = 0; for (int k = 0; k < num_mem; k++){ - for (int i = 0; i < nlocal; i ++){ + for (int i = 0; i < nlocal; i ++){ ds[k][i] = 0.0; dy[k][i] = 0.0; } From bb325a335ed3c8a8e612142aff2547461a3c35d3 Mon Sep 17 00:00:00 2001 From: julient31 Date: Wed, 10 Jul 2019 09:52:39 -0600 Subject: [PATCH 037/237] Commit1 JT 070919 - test energy/torque modif with etotal --- src/SPIN/pair_spin_dmi.cpp | 8 ++++---- src/SPIN/pair_spin_exchange.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/SPIN/pair_spin_dmi.cpp b/src/SPIN/pair_spin_dmi.cpp index 41430d230f..817d933698 100644 --- a/src/SPIN/pair_spin_dmi.cpp +++ b/src/SPIN/pair_spin_dmi.cpp @@ -317,7 +317,7 @@ void PairSpinDmi::compute(int eflag, int vflag) if (eflag) { evdwl -= (spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); - evdwl *= hbar; + evdwl *= 0.5*hbar; } else evdwl = 0.0; if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, @@ -431,9 +431,9 @@ void PairSpinDmi::compute_dmi(int i, int j, double eij[3], double fmi[3], double dmiy = eij[2]*v_dmx[itype][jtype] - eij[0]*v_dmz[itype][jtype]; dmiz = eij[0]*v_dmy[itype][jtype] - eij[1]*v_dmx[itype][jtype]; - fmi[0] -= (dmiy*spj[2] - dmiz*spj[1]); - fmi[1] -= (dmiz*spj[0] - dmix*spj[2]); - fmi[2] -= (dmix*spj[1] - dmiy*spj[0]); + fmi[0] -= 2.0*(dmiy*spj[2] - dmiz*spj[1]); + fmi[1] -= 2.0*(dmiz*spj[0] - dmix*spj[2]); + fmi[2] -= 2.0*(dmix*spj[1] - dmiy*spj[0]); } /* ---------------------------------------------------------------------- diff --git a/src/SPIN/pair_spin_exchange.cpp b/src/SPIN/pair_spin_exchange.cpp index 93b6d9501e..721002acba 100644 --- a/src/SPIN/pair_spin_exchange.cpp +++ b/src/SPIN/pair_spin_exchange.cpp @@ -300,7 +300,7 @@ void PairSpinExchange::compute(int eflag, int vflag) if (eflag) { evdwl -= (spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); - evdwl *= hbar; + evdwl *= 0.5*hbar; } else evdwl = 0.0; if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, @@ -409,9 +409,9 @@ void PairSpinExchange::compute_exchange(int i, int j, double rsq, double fmi[3], Jex *= (1.0-J2[itype][jtype]*ra); Jex *= exp(-ra); - fmi[0] += Jex*spj[0]; - fmi[1] += Jex*spj[1]; - fmi[2] += Jex*spj[2]; + fmi[0] += 2.0*Jex*spj[0]; + fmi[1] += 2.0*Jex*spj[1]; + fmi[2] += 2.0*Jex*spj[2]; } /* ---------------------------------------------------------------------- From 2b2a9e775eed2d8991d776e3f50afd9f678f130c Mon Sep 17 00:00:00 2001 From: alxvov Date: Thu, 11 Jul 2019 08:24:28 +0000 Subject: [PATCH 038/237] fix memory, add sp_copy --- src/SPIN/min_spin_oso_lbfgs_ls.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SPIN/min_spin_oso_lbfgs_ls.cpp b/src/SPIN/min_spin_oso_lbfgs_ls.cpp index 2e124466ac..0d9c2d7c51 100644 --- a/src/SPIN/min_spin_oso_lbfgs_ls.cpp +++ b/src/SPIN/min_spin_oso_lbfgs_ls.cpp @@ -64,7 +64,7 @@ static const char cite_minstyle_spin_oso_lbfgs_ls[] = /* ---------------------------------------------------------------------- */ MinSpinOSO_LBFGS_LS::MinSpinOSO_LBFGS_LS(LAMMPS *lmp) : - Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL), ds(NULL), dy(NULL), rho(NULL) + Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL), ds(NULL), dy(NULL), rho(NULL), sp_copy(NULL) { if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_lbfgs_ls); nlocal_max = 0; From 6238ad321228ef4320dc0f006b30f6e150ed7890 Mon Sep 17 00:00:00 2001 From: alxvov Date: Thu, 11 Jul 2019 14:18:42 +0000 Subject: [PATCH 039/237] local iterator, broadcast more --- src/SPIN/min_spin_oso_lbfgs_ls.cpp | 100 ++++++++++++++++++++--------- src/SPIN/min_spin_oso_lbfgs_ls.h | 6 +- 2 files changed, 75 insertions(+), 31 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs_ls.cpp b/src/SPIN/min_spin_oso_lbfgs_ls.cpp index 0d9c2d7c51..e1a6ae99d5 100644 --- a/src/SPIN/min_spin_oso_lbfgs_ls.cpp +++ b/src/SPIN/min_spin_oso_lbfgs_ls.cpp @@ -38,6 +38,7 @@ #include "modify.h" #include "math_special.h" #include "math_const.h" +#include "universe.h" #include @@ -68,6 +69,13 @@ MinSpinOSO_LBFGS_LS::MinSpinOSO_LBFGS_LS(LAMMPS *lmp) : { if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_lbfgs_ls); nlocal_max = 0; + + // nreplica = number of partitions + // ireplica = which world I am in universe + + nreplica = universe->nworlds; + ireplica = universe->iworld; + } /* ---------------------------------------------------------------------- */ @@ -90,6 +98,7 @@ void MinSpinOSO_LBFGS_LS::init() alpha_damp = 1.0; discrete_factor = 10.0; num_mem = 3; + local_iter = 0; der_e_cur = 0.0; der_e_pr = 0.0; use_line_search = 1; @@ -189,7 +198,6 @@ int MinSpinOSO_LBFGS_LS::iterate(int maxiter) memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/lbfgs_ls:sp_copy"); } - for (int iter = 0; iter < maxiter; iter++) { if (timer->check_timeout(niter)) @@ -201,13 +209,12 @@ int MinSpinOSO_LBFGS_LS::iterate(int maxiter) // optimize timestep accross processes / replicas // need a force calculation for timestep optimization - if (iter == 0){ + if (local_iter == 0){ ecurrent = energy_force(0); calc_gradient(1.0); neval++; - }else{ } - calc_search_direction(iter); + calc_search_direction(); if (use_line_search) { der_e_cur = 0.0; @@ -365,7 +372,7 @@ void MinSpinOSO_LBFGS_LS::calc_gradient(double dts) Optimization' Second Edition, 2006 (p. 177) ---------------------------------------------------------------------- */ -void MinSpinOSO_LBFGS_LS::calc_search_direction(int iter) +void MinSpinOSO_LBFGS_LS::calc_search_direction() { int nlocal = atom->nlocal; @@ -381,41 +388,64 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction(int iter) double yr_global = 0.0; double beta_global = 0.0; - int m_index = iter % num_mem; // memory index + int m_index = local_iter % num_mem; // memory index int c_ind = 0; double *q; double *alpha; + double factor; + + if (nreplica > 1) { + if (ireplica == 0 || ireplica == nreplica - 1) { + factor = 0.0; + } + else factor = 1.0; + }else{ + factor = 1.0; + } + q = (double *) calloc(3*nlocal, sizeof(double)); alpha = (double *) calloc(num_mem, sizeof(double)); - // for some reason on a second iteration g_old = 0 - // so we make two iterations as steepest descent - - if (iter == 0){ // steepest descent direction + if (local_iter == 0){ // steepest descent direction for (int i = 0; i < 3 * nlocal; i++) { p_s[i] = -g_cur[i]; g_old[i] = g_cur[i]; - ds[m_index][i] = 0.0; - dy[m_index][i] = 0.0; - + for (int k = 0; k < num_mem; k++){ + ds[k][i] = 0.0; + dy[k][i] = 0.0; + rho[k] = 0.0; + } } } else { - dyds = 0.0; - for (int i = 0; i < 3 * nlocal; i++) { - ds[m_index][i] = p_s[i]; - dy[m_index][i] = g_cur[i] - g_old[i]; - dyds += ds[m_index][i] * dy[m_index][i]; - } + dyds = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + ds[m_index][i] = p_s[i]; + dy[m_index][i] = g_cur[i] - g_old[i]; + dyds += ds[m_index][i] * dy[m_index][i]; + } MPI_Allreduce(&dyds, &dyds_global, 1, MPI_DOUBLE, MPI_SUM, world); + if (update->multireplica == 1) { + dyds_global *= factor; dyds = dyds_global; - MPI_Allreduce(&dyds_global,&dyds,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + MPI_Allreduce(&dyds, &dyds_global, 1,MPI_DOUBLE,MPI_SUM,universe->uworld); } - if (fabs(dyds_global) > 1.0e-60) rho[m_index] = 1.0 / dyds_global; + if (fabs(dyds_global) > 1.0e-60) rho[m_index] = 1.0 / dyds_global; else rho[m_index] = 1.0e60; + if (rho[m_index] < 0.0){ + local_iter = 0; + for (int k = 0; k < num_mem; k++){ + for (int i = 0; i < nlocal; i ++){ + ds[k][i] = 0.0; + dy[k][i] = 0.0; + } + } + return calc_search_direction(); + } + // set the q vector for (int i = 0; i < 3 * nlocal; i++) { @@ -436,9 +466,11 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction(int iter) } MPI_Allreduce(&sq, &sq_global, 1, MPI_DOUBLE, MPI_SUM, world); if (update->multireplica == 1) { + sq_global *= factor; sq = sq_global; - MPI_Allreduce(&sq_global,&sq,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + MPI_Allreduce(&sq,&sq_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } + // update alpha alpha[c_ind] = rho[c_ind] * sq_global; @@ -457,26 +489,29 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction(int iter) } MPI_Allreduce(&yy, &yy_global, 1, MPI_DOUBLE, MPI_SUM, world); if (update->multireplica == 1) { + yy_global *= factor; yy = yy_global; - MPI_Allreduce(&yy_global,&yy,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + MPI_Allreduce(&yy,&yy_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } // calculate now search direction - if (fabs(yy_global) > 1.0e-60) { + double devis = rho[m_index] * yy_global; + + if (fabs(devis) > 1.0e-60) { for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = q[i] / (rho[m_index] * yy_global); + p_s[i] = factor * q[i] / devis; } }else{ for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = q[i] * 1.0e60; + p_s[i] = factor * q[i] * 1.0e60; } } for (int k = 0; k < num_mem; k++){ // this loop should run from the oldest memory to the newest one. - if (iter < num_mem) c_ind = k; + if (local_iter < num_mem) c_ind = k; else c_ind = (k + m_index + 1) % num_mem; // dot product between p and da @@ -484,10 +519,12 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction(int iter) for (int i = 0; i < 3 * nlocal; i++) { yr += dy[c_ind][i] * p_s[i]; } + MPI_Allreduce(&yr, &yr_global, 1, MPI_DOUBLE, MPI_SUM, world); if (update->multireplica == 1) { + yr_global *= factor; yr = yr_global; - MPI_Allreduce(&yr_global,&yr,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + MPI_Allreduce(&yr,&yr_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } beta = rho[c_ind] * yr_global; @@ -496,11 +533,12 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction(int iter) } } for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = -1.0 * p_s[i]; + p_s[i] = - factor * p_s[i]; g_old[i] = g_cur[i]; } } + local_iter++; free(q); free(alpha); @@ -705,7 +743,7 @@ int MinSpinOSO_LBFGS_LS::calc_and_make_step(double a, double b, int index) der_e_cur = e_and_d[1]; index++; - if (awc(der_e_pr, eprevious, e_and_d[1], e_and_d[0]) || index == 3){ + if (awc(der_e_pr, eprevious, e_and_d[1], e_and_d[0]) || index == 5){ MPI_Bcast(&b,1,MPI_DOUBLE,0,world); for (int i = 0; i < 3 * nlocal; i++) { p_s[i] = b * p_s[i]; @@ -728,6 +766,8 @@ int MinSpinOSO_LBFGS_LS::calc_and_make_step(double a, double b, int index) // has minimum at alpha below. We do not check boundaries. alpha = (-c2 + sqrt(c2*c2 - 3.0*c1*c3))/(3.0*c1); + MPI_Bcast(&alpha,1,MPI_DOUBLE,0,world); + if (alpha < 0.0) alpha = r/2.0; for (int i = 0; i < nlocal; i++) { diff --git a/src/SPIN/min_spin_oso_lbfgs_ls.h b/src/SPIN/min_spin_oso_lbfgs_ls.h index 3e0e608ecb..eeaf20adf4 100644 --- a/src/SPIN/min_spin_oso_lbfgs_ls.h +++ b/src/SPIN/min_spin_oso_lbfgs_ls.h @@ -38,9 +38,12 @@ public: void advance_spins(); double fmnorm_sqr(); void calc_gradient(double); - void calc_search_direction(int); + void calc_search_direction(); private: + // test + int ireplica,nreplica; + // global and spin timesteps int nlocal_max; // max value of nlocal (for size of lists) @@ -62,6 +65,7 @@ private: double **sp_copy; // copy of the spins int num_mem; // number of stored steps + int local_iter; double der_e_cur; // current derivative along search dir. double der_e_pr; // previous derivative along search dir. From 45516e329eaa69686823b26394541c077068f9f2 Mon Sep 17 00:00:00 2001 From: alxvov Date: Fri, 19 Jul 2019 09:30:02 +0000 Subject: [PATCH 040/237] delete unused variables and function --- src/SPIN/min_spin_oso_lbfgs_ls.cpp | 174 ++++++++++------------------- src/SPIN/min_spin_oso_lbfgs_ls.h | 15 +-- 2 files changed, 62 insertions(+), 127 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs_ls.cpp b/src/SPIN/min_spin_oso_lbfgs_ls.cpp index e1a6ae99d5..5896ba9a9f 100644 --- a/src/SPIN/min_spin_oso_lbfgs_ls.cpp +++ b/src/SPIN/min_spin_oso_lbfgs_ls.cpp @@ -75,6 +75,7 @@ MinSpinOSO_LBFGS_LS::MinSpinOSO_LBFGS_LS(LAMMPS *lmp) : nreplica = universe->nworlds; ireplica = universe->iworld; + use_line_search = 1; } @@ -88,24 +89,21 @@ MinSpinOSO_LBFGS_LS::~MinSpinOSO_LBFGS_LS() memory->destroy(ds); memory->destroy(dy); memory->destroy(rho); - memory->destroy(sp_copy); + if (use_line_search) + memory->destroy(sp_copy); } /* ---------------------------------------------------------------------- */ void MinSpinOSO_LBFGS_LS::init() { - alpha_damp = 1.0; - discrete_factor = 10.0; num_mem = 3; local_iter = 0; der_e_cur = 0.0; der_e_pr = 0.0; - use_line_search = 1; Min::init(); - dts = dt = update->dt; last_negative = update->ntimestep; // allocate tables @@ -117,7 +115,8 @@ void MinSpinOSO_LBFGS_LS::init() memory->grow(rho,num_mem,"min/spin/oso/lbfgs_ls:rho"); memory->grow(ds,num_mem,3*nlocal_max,"min/spin/oso/lbfgs_ls:ds"); memory->grow(dy,num_mem,3*nlocal_max,"min/spin/oso/lbfgs_ls:dy"); - memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/lbfgs_ls:sp_copy"); + if (use_line_search) + memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/lbfgs_ls:sp_copy"); } @@ -141,14 +140,10 @@ void MinSpinOSO_LBFGS_LS::setup_style() int MinSpinOSO_LBFGS_LS::modify_param(int narg, char **arg) { - if (strcmp(arg[0],"alpha_damp") == 0) { + + if (strcmp(arg[0],"line_search") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - alpha_damp = force->numeric(FLERR,arg[1]); - return 2; - } - if (strcmp(arg[0],"discrete_factor") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - discrete_factor = force->numeric(FLERR,arg[1]); + use_line_search = force->numeric(FLERR,arg[1]); return 2; } return 0; @@ -185,7 +180,7 @@ int MinSpinOSO_LBFGS_LS::iterate(int maxiter) double fmdotfm; int flag, flagall; double **sp = atom->sp; - double der_e_cur_global = 0.0; + double der_e_cur_tmp = 0.0; if (nlocal_max < nlocal) { nlocal_max = nlocal; @@ -195,7 +190,8 @@ int MinSpinOSO_LBFGS_LS::iterate(int maxiter) memory->grow(rho,num_mem,"min/spin/oso/lbfgs_ls:rho"); memory->grow(ds,num_mem,3*nlocal_max,"min/spin/oso/lbfgs_ls:ds"); memory->grow(dy,num_mem,3*nlocal_max,"min/spin/oso/lbfgs_ls:dy"); - memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/lbfgs_ls:sp_copy"); + if (use_line_search) + memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/lbfgs_ls:sp_copy"); } for (int iter = 0; iter < maxiter; iter++) { @@ -211,34 +207,35 @@ int MinSpinOSO_LBFGS_LS::iterate(int maxiter) if (local_iter == 0){ ecurrent = energy_force(0); - calc_gradient(1.0); + calc_gradient(); neval++; } calc_search_direction(); if (use_line_search) { + + // here we need to do line search + der_e_cur = 0.0; for (int i = 0; i < 3 * nlocal; i++) { der_e_cur += g_cur[i] * p_s[i]; } - MPI_Allreduce(&der_e_cur, &der_e_cur_global, 1, MPI_DOUBLE, MPI_SUM, world); - der_e_cur = der_e_cur_global; + MPI_Allreduce(&der_e_cur,&der_e_cur_tmp,1,MPI_DOUBLE,MPI_SUM,world); + der_e_cur = der_e_cur_tmp; if (update->multireplica == 1) { - MPI_Allreduce(&der_e_cur_global,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + MPI_Allreduce(&der_e_cur_tmp,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } - } - - if (use_line_search){ - // here we need to do line search for (int i = 0; i < nlocal; i++) { for (int j = 0; j < 3; j++) sp_copy[i][j] = sp[i][j]; } eprevious = ecurrent; der_e_pr = der_e_cur; - calc_and_make_step(0.0, 1.0, 0); } else{ + + // here we don't do line search + advance_spins(); eprevious = ecurrent; ecurrent = energy_force(0); @@ -291,56 +288,11 @@ int MinSpinOSO_LBFGS_LS::iterate(int maxiter) return MAXITER; } -/* ---------------------------------------------------------------------- - evaluate max timestep ----------------------------------------------------------------------- */ - -double MinSpinOSO_LBFGS_LS::evaluate_dt() -{ - double dtmax; - double fmsq; - double fmaxsqone,fmaxsqloc,fmaxsqall; - int nlocal = atom->nlocal; - double **fm = atom->fm; - - // finding max fm on this proc. - - fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; - for (int i = 0; i < nlocal; i++) { - fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; - fmaxsqone = MAX(fmaxsqone,fmsq); - } - - // finding max fm on this replica - - fmaxsqloc = fmaxsqone; - MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); - - // finding max fm over all replicas, if necessary - // this communicator would be invalid for multiprocess replicas - - fmaxsqall = fmaxsqloc; - if (update->multireplica == 1) { - fmaxsqall = fmaxsqloc; - MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); - } - - if (fmaxsqall == 0.0) - error->all(FLERR,"Incorrect fmaxsqall calculation"); - - // define max timestep by dividing by the - // inverse of max frequency by discrete_factor - - dtmax = MY_2PI/(discrete_factor*sqrt(fmaxsqall)); - - return dtmax; -} - /* ---------------------------------------------------------------------- calculate gradients ---------------------------------------------------------------------- */ -void MinSpinOSO_LBFGS_LS::calc_gradient(double dts) +void MinSpinOSO_LBFGS_LS::calc_gradient() { int nlocal = atom->nlocal; double **sp = atom->sp; @@ -351,17 +303,11 @@ void MinSpinOSO_LBFGS_LS::calc_gradient(double dts) for (int i = 0; i < nlocal; i++) { - // calc. damping torque - - tdampx = -alpha_damp*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); - tdampy = -alpha_damp*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); - tdampz = -alpha_damp*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - // calculate gradients - g_cur[3 * i + 0] = -tdampz * dts; - g_cur[3 * i + 1] = tdampy * dts; - g_cur[3 * i + 2] = -tdampx * dts; + g_cur[3 * i + 0] = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); + g_cur[3 * i + 1] = -(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + g_cur[3 * i + 2] = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); } } @@ -438,7 +384,7 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction() if (rho[m_index] < 0.0){ local_iter = 0; for (int k = 0; k < num_mem; k++){ - for (int i = 0; i < nlocal; i ++){ + for (int i = 0; i < nlocal; i ++){ ds[k][i] = 0.0; dy[k][i] = 0.0; } @@ -464,7 +410,7 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction() for (int i = 0; i < 3 * nlocal; i++) { sq += ds[c_ind][i] * q[i]; } - MPI_Allreduce(&sq, &sq_global, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&sq,&sq_global,1,MPI_DOUBLE,MPI_SUM,world); if (update->multireplica == 1) { sq_global *= factor; sq = sq_global; @@ -487,7 +433,7 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction() for (int i = 0; i < 3 * nlocal; i++) { yy += dy[m_index][i] * dy[m_index][i]; } - MPI_Allreduce(&yy, &yy_global, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&yy,&yy_global,1,MPI_DOUBLE,MPI_SUM,world); if (update->multireplica == 1) { yy_global *= factor; yy = yy_global; @@ -520,7 +466,7 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction() yr += dy[c_ind][i] * p_s[i]; } - MPI_Allreduce(&yr, &yr_global, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&yr,&yr_global,1,MPI_DOUBLE,MPI_SUM,world); if (update->multireplica == 1) { yr_global *= factor; yr = yr_global; @@ -580,15 +526,11 @@ double MinSpinOSO_LBFGS_LS::fmnorm_sqr() double **sp = atom->sp; double **fm = atom->fm; - // calc. magnetic torques + // calc. magnetic torques norm double local_norm2_sqr = 0.0; - for (int i = 0; i < nlocal; i++) { - tx = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); - ty = (fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); - tz = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - - local_norm2_sqr += tx*tx + ty*ty + tz*tz; + for (int i = 0; i < 3 * nlocal; i++) { + local_norm2_sqr += g_cur[i]*g_cur[i]; } // no extra atom calc. for spins @@ -678,9 +620,8 @@ void MinSpinOSO_LBFGS_LS::vm3(const double *m, const double *v, double *out) { for(int i = 0; i < 3; i++){ out[i] *= 0.0; - for(int j = 0; j < 3; j++){ - out[i] += *(m + 3 * j + i) * v[j]; - } + for(int j = 0; j < 3; j++) + out[i] += *(m + 3 * j + i) * v[j]; } } @@ -692,9 +633,10 @@ void MinSpinOSO_LBFGS_LS::make_step(double c, double *energy_and_der) double rot_mat[9]; // exponential of matrix made of search direction double s_new[3]; double **sp = atom->sp; - double der_e_cur_global = 0.0;; + double der_e_cur_tmp = 0.0;; for (int i = 0; i < nlocal; i++) { + // scale the search direction for (int j = 0; j < 3; j++) p_scaled[j] = c * p_s[3 * i + j]; @@ -707,23 +649,23 @@ void MinSpinOSO_LBFGS_LS::make_step(double c, double *energy_and_der) vm3(rot_mat, sp[i], s_new); for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; - } + } - ecurrent = energy_force(0); - calc_gradient(1.0); - neval++; - der_e_cur = 0.0; - for (int i = 0; i < 3 * nlocal; i++) { - der_e_cur += g_cur[i] * p_s[i]; - } - MPI_Allreduce(&der_e_cur, &der_e_cur_global, 1, MPI_DOUBLE, MPI_SUM, world); - der_e_cur = der_e_cur_global; - if (update->multireplica == 1) { - MPI_Allreduce(&der_e_cur_global,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - } + ecurrent = energy_force(0); + calc_gradient(); + neval++; + der_e_cur = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + der_e_cur += g_cur[i] * p_s[i]; + } + MPI_Allreduce(&der_e_cur,&der_e_cur_tmp, 1, MPI_DOUBLE, MPI_SUM, world); + der_e_cur = der_e_cur_tmp; + if (update->multireplica == 1) { + MPI_Allreduce(&der_e_cur_tmp,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } - energy_and_der[0] = ecurrent; - energy_and_der[1] = der_e_cur; + energy_and_der[0] = ecurrent; + energy_and_der[1] = der_e_cur; } /* ---------------------------------------------------------------------- @@ -733,17 +675,17 @@ void MinSpinOSO_LBFGS_LS::make_step(double c, double *energy_and_der) int MinSpinOSO_LBFGS_LS::calc_and_make_step(double a, double b, int index) { - double e_and_d[2] = {0.0, 0.0}; - double alpha, c1, c2, c3; + double e_and_d[2] = {0.0,0.0}; + double alpha,c1,c2,c3; double **sp = atom->sp; int nlocal = atom->nlocal; - make_step(b, e_and_d); + make_step(b,e_and_d); ecurrent = e_and_d[0]; der_e_cur = e_and_d[1]; index++; - if (awc(der_e_pr, eprevious, e_and_d[1], e_and_d[0]) || index == 5){ + if (awc(der_e_pr,eprevious,e_and_d[1],e_and_d[0]) || index == 5){ MPI_Bcast(&b,1,MPI_DOUBLE,0,world); for (int i = 0; i < 3 * nlocal; i++) { p_s[i] = b * p_s[i]; @@ -751,7 +693,7 @@ int MinSpinOSO_LBFGS_LS::calc_and_make_step(double a, double b, int index) return 1; } else{ - double r, f0, f1, df0, df1; + double r,f0,f1,df0,df1; r = b - a; f0 = eprevious; f1 = ecurrent; @@ -778,18 +720,20 @@ int MinSpinOSO_LBFGS_LS::calc_and_make_step(double a, double b, int index) return 0; } + /* ---------------------------------------------------------------------- Approximate Wolfe conditions: William W. Hager and Hongchao Zhang SIAM J. optim., 16(1), 170-192. (23 pages) ------------------------------------------------------------------------- */ + int MinSpinOSO_LBFGS_LS::awc(double der_phi_0, double phi_0, double der_phi_j, double phi_j){ double eps = 1.0e-6; double delta = 0.1; double sigma = 0.9; - if ((phi_j <= phi_0 + eps * fabs(phi_0)) && ((2.0*delta - 1.0) * der_phi_0 >= der_phi_j >= sigma * der_phi_0)) + if ((phi_j<=phi_0+eps*fabs(phi_0)) && ((2.0*delta-1.0) * der_phi_0>=der_phi_j>=sigma*der_phi_0)) return 1; else return 0; diff --git a/src/SPIN/min_spin_oso_lbfgs_ls.h b/src/SPIN/min_spin_oso_lbfgs_ls.h index eeaf20adf4..876e34f9c9 100644 --- a/src/SPIN/min_spin_oso_lbfgs_ls.h +++ b/src/SPIN/min_spin_oso_lbfgs_ls.h @@ -34,24 +34,15 @@ public: int modify_param(int, char **); void reset_vectors(); int iterate(int); - double evaluate_dt(); void advance_spins(); double fmnorm_sqr(); - void calc_gradient(double); + void calc_gradient(); void calc_search_direction(); private: - // test - int ireplica,nreplica; - - // global and spin timesteps + int ireplica,nreplica; // for neb int nlocal_max; // max value of nlocal (for size of lists) - double dt; - double dts; - - double alpha_damp; // damping for spin minimization - double discrete_factor; // factor for spin timestep evaluation double *spvec; // variables for atomic dof, as 1d vector double *fmvec; // variables for atomic dof, as 1d vector @@ -65,7 +56,7 @@ private: double **sp_copy; // copy of the spins int num_mem; // number of stored steps - int local_iter; + int local_iter; // for neb double der_e_cur; // current derivative along search dir. double der_e_pr; // previous derivative along search dir. From 7514eea9a7112a3962ff208178570125e4d9bb4c Mon Sep 17 00:00:00 2001 From: alxvov Date: Fri, 19 Jul 2019 11:47:24 +0000 Subject: [PATCH 041/237] no line search option too --- src/SPIN/min_spin_oso_lbfgs_ls.cpp | 115 ++++++++++++++++++++--------- src/SPIN/min_spin_oso_lbfgs_ls.h | 6 +- 2 files changed, 83 insertions(+), 38 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs_ls.cpp b/src/SPIN/min_spin_oso_lbfgs_ls.cpp index 5896ba9a9f..ddacd3e207 100644 --- a/src/SPIN/min_spin_oso_lbfgs_ls.cpp +++ b/src/SPIN/min_spin_oso_lbfgs_ls.cpp @@ -76,6 +76,7 @@ MinSpinOSO_LBFGS_LS::MinSpinOSO_LBFGS_LS(LAMMPS *lmp) : nreplica = universe->nworlds; ireplica = universe->iworld; use_line_search = 1; + maxepsrot = MY_2PI / (100.0); } @@ -146,6 +147,13 @@ int MinSpinOSO_LBFGS_LS::modify_param(int narg, char **arg) use_line_search = force->numeric(FLERR,arg[1]); return 2; } + if (strcmp(arg[0],"discrete_factor") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + double discrete_factor; + discrete_factor = force->numeric(FLERR,arg[1]); + maxepsrot = MY_2PI / discrete_factor; + return 2; + } return 0; } @@ -184,6 +192,7 @@ int MinSpinOSO_LBFGS_LS::iterate(int maxiter) if (nlocal_max < nlocal) { nlocal_max = nlocal; + local_iter = 0; memory->grow(g_old,3*nlocal_max,"min/spin/oso/lbfgs_ls:g_old"); memory->grow(g_cur,3*nlocal_max,"min/spin/oso/lbfgs_ls:g_cur"); memory->grow(p_s,3*nlocal_max,"min/spin/oso/lbfgs_ls:p_s"); @@ -195,7 +204,7 @@ int MinSpinOSO_LBFGS_LS::iterate(int maxiter) } for (int iter = 0; iter < maxiter; iter++) { - + if (timer->check_timeout(niter)) return TIMEOUT; @@ -205,17 +214,13 @@ int MinSpinOSO_LBFGS_LS::iterate(int maxiter) // optimize timestep accross processes / replicas // need a force calculation for timestep optimization - if (local_iter == 0){ - ecurrent = energy_force(0); - calc_gradient(); - neval++; - } - calc_search_direction(); + if (local_iter == 0) + ecurrent = energy_force(0); if (use_line_search) { // here we need to do line search - + calc_search_direction(); der_e_cur = 0.0; for (int i = 0; i < 3 * nlocal; i++) { der_e_cur += g_cur[i] * p_s[i]; @@ -235,8 +240,22 @@ int MinSpinOSO_LBFGS_LS::iterate(int maxiter) else{ // here we don't do line search + // but use cutoff rotation angle + // if gneb calc., nreplica > 1 + // then calculate gradients and advance spins + // of intermediate replicas only + if (nreplica > 1) { + if(ireplica != 0 && ireplica != nreplica-1) + calc_gradient(); + calc_search_direction(); advance_spins(); + } else{ + calc_gradient(); + calc_search_direction(); + advance_spins(); + } + neval++; eprevious = ecurrent; ecurrent = energy_force(0); neval++; @@ -265,7 +284,7 @@ int MinSpinOSO_LBFGS_LS::iterate(int maxiter) // sync across replicas if running multi-replica minimization if (update->ftol > 0.0) { - fmdotfm = fmnorm_sqr(); + fmdotfm = fmnorm2(); if (update->multireplica == 0) { if (fmdotfm < update->ftol*update->ftol) return FTOL; } else { @@ -340,7 +359,9 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction() double *alpha; double factor; + double scaling = 1.0; + // for multiple replica do not move end points if (nreplica > 1) { if (ireplica == 0 || ireplica == nreplica - 1) { factor = 0.0; @@ -354,9 +375,14 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction() alpha = (double *) calloc(num_mem, sizeof(double)); if (local_iter == 0){ // steepest descent direction + + //if no line search then calculate maximum rotation + if (use_line_search == 0) + scaling = maximum_rotation(g_cur); + for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = -g_cur[i]; - g_old[i] = g_cur[i]; + p_s[i] = -g_cur[i] * factor * scaling;; + g_old[i] = g_cur[i] * factor; for (int k = 0; k < num_mem; k++){ ds[k][i] = 0.0; dy[k][i] = 0.0; @@ -478,9 +504,11 @@ void MinSpinOSO_LBFGS_LS::calc_search_direction() p_s[i] += ds[c_ind][i] * (alpha[c_ind] - beta); } } + if (use_line_search == 0) + scaling = maximum_rotation(p_s); for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = - factor * p_s[i]; - g_old[i] = g_cur[i]; + p_s[i] = - factor * p_s[i] * scaling; + g_old[i] = g_cur[i] * factor; } } @@ -516,32 +544,21 @@ void MinSpinOSO_LBFGS_LS::advance_spins() } /* ---------------------------------------------------------------------- - compute and return ||mag. torque||_2^2 + compute and return ||mag. torque||_2^2 / N ------------------------------------------------------------------------- */ -double MinSpinOSO_LBFGS_LS::fmnorm_sqr() -{ +double MinSpinOSO_LBFGS_LS::fmnorm2() { + double norm2, norm2_global; int nlocal = atom->nlocal; - double tx,ty,tz; - double **sp = atom->sp; - double **fm = atom->fm; + int ntotal = 0; - // calc. magnetic torques norm - - double local_norm2_sqr = 0.0; - for (int i = 0; i < 3 * nlocal; i++) { - local_norm2_sqr += g_cur[i]*g_cur[i]; - } - - // no extra atom calc. for spins - - if (nextra_atom) - error->all(FLERR,"extra atom option not available yet"); - - double norm2_sqr = 0.0; - MPI_Allreduce(&local_norm2_sqr,&norm2_sqr,1,MPI_DOUBLE,MPI_SUM,world); - - return norm2_sqr; + norm2 = 0.0; + for (int i = 0; i < 3 * nlocal; i++) norm2 += g_cur[i] * g_cur[i]; + MPI_Allreduce(&norm2, &norm2_global, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&nlocal, &ntotal, 1, MPI_INT, MPI_SUM, world); + double ans = norm2_global / (double) ntotal; + MPI_Bcast(&ans, 1, MPI_DOUBLE, 0, world); + return ans; } /* ---------------------------------------------------------------------- @@ -738,3 +755,31 @@ int MinSpinOSO_LBFGS_LS::awc(double der_phi_0, double phi_0, double der_phi_j, d else return 0; } + +double MinSpinOSO_LBFGS_LS::maximum_rotation(double *p) +{ + double norm2,norm2_global,scaling,alpha; + int nlocal = atom->nlocal; + int ntotal = 0; + + norm2 = 0.0; + for (int i = 0; i < 3 * nlocal; i++) norm2 += p[i] * p[i]; + + MPI_Allreduce(&norm2,&norm2_global,1,MPI_DOUBLE,MPI_SUM,world); + if (update->multireplica == 1) { + norm2 = norm2_global; + MPI_Allreduce(&norm2,&norm2_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } + MPI_Allreduce(&nlocal,&ntotal,1,MPI_INT,MPI_SUM,world); + if (update->multireplica == 1) { + nlocal = ntotal; + MPI_Allreduce(&nlocal,&ntotal,1,MPI_INT,MPI_SUM,universe->uworld); + } + + scaling = (maxepsrot * sqrt((double) ntotal / norm2_global)); + + if (scaling < 1.0) alpha = scaling; + else alpha = 1.0; + + return alpha; +} \ No newline at end of file diff --git a/src/SPIN/min_spin_oso_lbfgs_ls.h b/src/SPIN/min_spin_oso_lbfgs_ls.h index 876e34f9c9..a253808923 100644 --- a/src/SPIN/min_spin_oso_lbfgs_ls.h +++ b/src/SPIN/min_spin_oso_lbfgs_ls.h @@ -35,10 +35,10 @@ public: void reset_vectors(); int iterate(int); void advance_spins(); - double fmnorm_sqr(); + double fmnorm2(); void calc_gradient(); void calc_search_direction(); - + double maximum_rotation(double *); private: int ireplica,nreplica; // for neb @@ -62,7 +62,7 @@ private: double der_e_pr; // previous derivative along search dir. int use_line_search; // use line search or not. - + double maxepsrot; void vm3(const double *, const double *, double *); void rodrigues_rotation(const double *, double *); From ad713d39a41107601c7337ac281627057c2c451c Mon Sep 17 00:00:00 2001 From: alxvov Date: Fri, 19 Jul 2019 11:58:39 +0000 Subject: [PATCH 042/237] rename min_spin_oso_lbfgs_ls -> min_spin_oso_lbfgs --- src/SPIN/min_spin_oso_lbfgs.cpp | 365 +++++++++----- src/SPIN/min_spin_oso_lbfgs.h | 32 +- src/SPIN/min_spin_oso_lbfgs_ls.cpp | 785 ----------------------------- src/SPIN/min_spin_oso_lbfgs_ls.h | 79 --- 4 files changed, 241 insertions(+), 1020 deletions(-) delete mode 100644 src/SPIN/min_spin_oso_lbfgs_ls.cpp delete mode 100644 src/SPIN/min_spin_oso_lbfgs_ls.h diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index fd83e7b460..7f716da63d 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -63,16 +63,18 @@ static const char cite_minstyle_spin_oso_lbfgs[] = /* ---------------------------------------------------------------------- */ MinSpinOSO_LBFGS::MinSpinOSO_LBFGS(LAMMPS *lmp) : - Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL), ds(NULL), dy(NULL), rho(NULL) + Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL), ds(NULL), dy(NULL), rho(NULL), sp_copy(NULL) { if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_lbfgs); nlocal_max = 0; - + // nreplica = number of partitions // ireplica = which world I am in universe nreplica = universe->nworlds; ireplica = universe->iworld; + use_line_search = 1; + maxepsrot = MY_2PI / (100.0); } @@ -86,21 +88,21 @@ MinSpinOSO_LBFGS::~MinSpinOSO_LBFGS() memory->destroy(ds); memory->destroy(dy); memory->destroy(rho); + if (use_line_search) + memory->destroy(sp_copy); } /* ---------------------------------------------------------------------- */ void MinSpinOSO_LBFGS::init() { - alpha_damp = 1.0; - discrete_factor = 10.0; num_mem = 3; local_iter = 0; - maxepsrot = MY_2PI / (100.0); + der_e_cur = 0.0; + der_e_pr = 0.0; Min::init(); - dts = dt = update->dt; last_negative = update->ntimestep; // allocate tables @@ -112,6 +114,8 @@ void MinSpinOSO_LBFGS::init() memory->grow(rho,num_mem,"min/spin/oso/lbfgs:rho"); memory->grow(ds,num_mem,3*nlocal_max,"min/spin/oso/lbfgs:ds"); memory->grow(dy,num_mem,3*nlocal_max,"min/spin/oso/lbfgs:dy"); + if (use_line_search) + memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/lbfgs:sp_copy"); } @@ -135,14 +139,17 @@ void MinSpinOSO_LBFGS::setup_style() int MinSpinOSO_LBFGS::modify_param(int narg, char **arg) { - if (strcmp(arg[0],"alpha_damp") == 0) { + + if (strcmp(arg[0],"line_search") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - alpha_damp = force->numeric(FLERR,arg[1]); + use_line_search = force->numeric(FLERR,arg[1]); return 2; } if (strcmp(arg[0],"discrete_factor") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + double discrete_factor; discrete_factor = force->numeric(FLERR,arg[1]); + maxepsrot = MY_2PI / discrete_factor; return 2; } return 0; @@ -178,6 +185,8 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) bigint ntimestep; double fmdotfm; int flag, flagall; + double **sp = atom->sp; + double der_e_cur_tmp = 0.0; if (nlocal_max < nlocal) { nlocal_max = nlocal; @@ -188,10 +197,12 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) memory->grow(rho,num_mem,"min/spin/oso/lbfgs:rho"); memory->grow(ds,num_mem,3*nlocal_max,"min/spin/oso/lbfgs:ds"); memory->grow(dy,num_mem,3*nlocal_max,"min/spin/oso/lbfgs:dy"); + if (use_line_search) + memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/lbfgs:sp_copy"); } for (int iter = 0; iter < maxiter; iter++) { - + if (timer->check_timeout(niter)) return TIMEOUT; @@ -200,29 +211,53 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) // optimize timestep accross processes / replicas // need a force calculation for timestep optimization - if (local_iter == 0) energy_force(0); - // to be checked - // if gneb calc., nreplica > 1 - // then calculate gradients of intermediate replicas - if (nreplica > 1) { + if (local_iter == 0) + ecurrent = energy_force(0); + + if (use_line_search) { + + // here we need to do line search + calc_search_direction(); + der_e_cur = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + der_e_cur += g_cur[i] * p_s[i]; + } + MPI_Allreduce(&der_e_cur,&der_e_cur_tmp,1,MPI_DOUBLE,MPI_SUM,world); + der_e_cur = der_e_cur_tmp; + if (update->multireplica == 1) { + MPI_Allreduce(&der_e_cur_tmp,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } + for (int i = 0; i < nlocal; i++) { + for (int j = 0; j < 3; j++) sp_copy[i][j] = sp[i][j]; + } + eprevious = ecurrent; + der_e_pr = der_e_cur; + calc_and_make_step(0.0, 1.0, 0); + } + else{ + + // here we don't do line search + // but use cutoff rotation angle + // if gneb calc., nreplica > 1 + // then calculate gradients and advance spins + // of intermediate replicas only + + if (nreplica > 1) { if(ireplica != 0 && ireplica != nreplica-1) - calc_gradient(1.0); - } else calc_gradient(1.0); - calc_search_direction(); - - // to be checked - // if gneb calc., nreplica > 1 - // then advance spins only if intermediate replica - // otherwise (simple minimization), advance spins - - if (nreplica > 1) { - if(ireplica != 0 && ireplica != nreplica-1) - advance_spins(); - } else advance_spins(); - eprevious = ecurrent; - ecurrent = energy_force(0); - neval++; + calc_gradient(); + calc_search_direction(); + advance_spins(); + } else{ + calc_gradient(); + calc_search_direction(); + advance_spins(); + } + neval++; + eprevious = ecurrent; + ecurrent = energy_force(0); + neval++; + } //// energy tolerance criterion //// only check after DELAYSTEP elapsed since velocties reset to 0 @@ -247,7 +282,7 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) // sync across replicas if running multi-replica minimization if (update->ftol > 0.0) { - fmdotfm = fmnorm_sqr(); + fmdotfm = fmnorm2(); if (update->multireplica == 0) { if (fmdotfm < update->ftol*update->ftol) return FTOL; } else { @@ -270,56 +305,11 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) return MAXITER; } -/* ---------------------------------------------------------------------- - evaluate max timestep ----------------------------------------------------------------------- */ - -double MinSpinOSO_LBFGS::evaluate_dt() -{ - double dtmax; - double fmsq; - double fmaxsqone,fmaxsqloc,fmaxsqall; - int nlocal = atom->nlocal; - double **fm = atom->fm; - - // finding max fm on this proc. - - fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; - for (int i = 0; i < nlocal; i++) { - fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; - fmaxsqone = MAX(fmaxsqone,fmsq); - } - - // finding max fm on this replica - - fmaxsqloc = fmaxsqone; - MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); - - // finding max fm over all replicas, if necessary - // this communicator would be invalid for multiprocess replicas - - fmaxsqall = fmaxsqloc; - if (update->multireplica == 1) { - fmaxsqall = fmaxsqloc; - MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); - } - - if (fmaxsqall == 0.0) - error->all(FLERR,"Incorrect fmaxsqall calculation"); - - // define max timestep by dividing by the - // inverse of max frequency by discrete_factor - // std::cout << fmaxsqall << "\n"; - dtmax = MY_2PI/(discrete_factor*sqrt(fmaxsqall)); - - return dtmax; -} - /* ---------------------------------------------------------------------- calculate gradients ---------------------------------------------------------------------- */ -void MinSpinOSO_LBFGS::calc_gradient(double dts) +void MinSpinOSO_LBFGS::calc_gradient() { int nlocal = atom->nlocal; double **sp = atom->sp; @@ -330,17 +320,11 @@ void MinSpinOSO_LBFGS::calc_gradient(double dts) for (int i = 0; i < nlocal; i++) { - // calc. damping torque - - tdampx = -alpha_damp*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); - tdampy = -alpha_damp*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); - tdampz = -alpha_damp*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - // calculate gradients - g_cur[3 * i + 0] = -tdampz * dts; - g_cur[3 * i + 1] = tdampy * dts; - g_cur[3 * i + 2] = -tdampx * dts; + g_cur[3 * i + 0] = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); + g_cur[3 * i + 1] = -(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); + g_cur[3 * i + 2] = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); } } @@ -373,8 +357,9 @@ void MinSpinOSO_LBFGS::calc_search_direction() double *alpha; double factor; - double scaling; + double scaling = 1.0; + // for multiple replica do not move end points if (nreplica > 1) { if (ireplica == 0 || ireplica == nreplica - 1) { factor = 0.0; @@ -388,14 +373,19 @@ void MinSpinOSO_LBFGS::calc_search_direction() alpha = (double *) calloc(num_mem, sizeof(double)); if (local_iter == 0){ // steepest descent direction - - scaling = maximum_rotation(g_cur); - for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = - g_cur[i] * factor * scaling; - g_old[i] = g_cur[i]; - ds[m_index][i] = 0.0; - dy[m_index][i] = 0.0; + //if no line search then calculate maximum rotation + if (use_line_search == 0) + scaling = maximum_rotation(g_cur); + + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = -g_cur[i] * factor * scaling;; + g_old[i] = g_cur[i] * factor; + for (int k = 0; k < num_mem; k++){ + ds[k][i] = 0.0; + dy[k][i] = 0.0; + rho[k] = 0.0; + } } } else { dyds = 0.0; @@ -418,7 +408,7 @@ void MinSpinOSO_LBFGS::calc_search_direction() if (rho[m_index] < 0.0){ local_iter = 0; for (int k = 0; k < num_mem; k++){ - for (int i = 0; i < nlocal; i ++){ + for (int i = 0; i < nlocal; i ++){ ds[k][i] = 0.0; dy[k][i] = 0.0; } @@ -444,7 +434,7 @@ void MinSpinOSO_LBFGS::calc_search_direction() for (int i = 0; i < 3 * nlocal; i++) { sq += ds[c_ind][i] * q[i]; } - MPI_Allreduce(&sq, &sq_global, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&sq,&sq_global,1,MPI_DOUBLE,MPI_SUM,world); if (update->multireplica == 1) { sq_global *= factor; sq = sq_global; @@ -467,7 +457,7 @@ void MinSpinOSO_LBFGS::calc_search_direction() for (int i = 0; i < 3 * nlocal; i++) { yy += dy[m_index][i] * dy[m_index][i]; } - MPI_Allreduce(&yy, &yy_global, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&yy,&yy_global,1,MPI_DOUBLE,MPI_SUM,world); if (update->multireplica == 1) { yy_global *= factor; yy = yy_global; @@ -500,7 +490,7 @@ void MinSpinOSO_LBFGS::calc_search_direction() yr += dy[c_ind][i] * p_s[i]; } - MPI_Allreduce(&yr, &yr_global, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&yr,&yr_global,1,MPI_DOUBLE,MPI_SUM,world); if (update->multireplica == 1) { yr_global *= factor; yr = yr_global; @@ -512,10 +502,11 @@ void MinSpinOSO_LBFGS::calc_search_direction() p_s[i] += ds[c_ind][i] * (alpha[c_ind] - beta); } } - scaling = maximum_rotation(p_s); + if (use_line_search == 0) + scaling = maximum_rotation(p_s); for (int i = 0; i < 3 * nlocal; i++) { p_s[i] = - factor * p_s[i] * scaling; - g_old[i] = g_cur[i]; + g_old[i] = g_cur[i] * factor; } } @@ -551,36 +542,21 @@ void MinSpinOSO_LBFGS::advance_spins() } /* ---------------------------------------------------------------------- - compute and return ||mag. torque||_2^2 + compute and return ||mag. torque||_2^2 / N ------------------------------------------------------------------------- */ -double MinSpinOSO_LBFGS::fmnorm_sqr() -{ +double MinSpinOSO_LBFGS::fmnorm2() { + double norm2, norm2_global; int nlocal = atom->nlocal; - double tx,ty,tz; - double **sp = atom->sp; - double **fm = atom->fm; + int ntotal = 0; - // calc. magnetic torques - - double local_norm2_sqr = 0.0; - for (int i = 0; i < nlocal; i++) { - tx = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); - ty = (fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); - tz = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - - local_norm2_sqr += tx*tx + ty*ty + tz*tz; - } - - // no extra atom calc. for spins - - if (nextra_atom) - error->all(FLERR,"extra atom option not available yet"); - - double norm2_sqr = 0.0; - MPI_Allreduce(&local_norm2_sqr,&norm2_sqr,1,MPI_DOUBLE,MPI_SUM,world); - - return norm2_sqr; + norm2 = 0.0; + for (int i = 0; i < 3 * nlocal; i++) norm2 += g_cur[i] * g_cur[i]; + MPI_Allreduce(&norm2, &norm2_global, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&nlocal, &ntotal, 1, MPI_INT, MPI_SUM, world); + double ans = norm2_global / (double) ntotal; + MPI_Bcast(&ans, 1, MPI_DOUBLE, 0, world); + return ans; } /* ---------------------------------------------------------------------- @@ -659,38 +635,149 @@ void MinSpinOSO_LBFGS::vm3(const double *m, const double *v, double *out) { for(int i = 0; i < 3; i++){ out[i] *= 0.0; - for(int j = 0; j < 3; j++){ - out[i] += *(m + 3 * j + i) * v[j]; - } + for(int j = 0; j < 3; j++) + out[i] += *(m + 3 * j + i) * v[j]; } } + +void MinSpinOSO_LBFGS::make_step(double c, double *energy_and_der) +{ + double p_scaled[3]; + int nlocal = atom->nlocal; + double rot_mat[9]; // exponential of matrix made of search direction + double s_new[3]; + double **sp = atom->sp; + double der_e_cur_tmp = 0.0;; + + for (int i = 0; i < nlocal; i++) { + + // scale the search direction + + for (int j = 0; j < 3; j++) p_scaled[j] = c * p_s[3 * i + j]; + + // calculate rotation matrix + + rodrigues_rotation(p_scaled, rot_mat); + + // rotate spins + + vm3(rot_mat, sp[i], s_new); + for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; + } + + ecurrent = energy_force(0); + calc_gradient(); + neval++; + der_e_cur = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + der_e_cur += g_cur[i] * p_s[i]; + } + MPI_Allreduce(&der_e_cur,&der_e_cur_tmp, 1, MPI_DOUBLE, MPI_SUM, world); + der_e_cur = der_e_cur_tmp; + if (update->multireplica == 1) { + MPI_Allreduce(&der_e_cur_tmp,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } + + energy_and_der[0] = ecurrent; + energy_and_der[1] = der_e_cur; +} + +/* ---------------------------------------------------------------------- + Calculate step length which satisfies approximate Wolfe conditions + using the cubic interpolation +------------------------------------------------------------------------- */ + +int MinSpinOSO_LBFGS::calc_and_make_step(double a, double b, int index) +{ + double e_and_d[2] = {0.0,0.0}; + double alpha,c1,c2,c3; + double **sp = atom->sp; + int nlocal = atom->nlocal; + + make_step(b,e_and_d); + ecurrent = e_and_d[0]; + der_e_cur = e_and_d[1]; + index++; + + if (awc(der_e_pr,eprevious,e_and_d[1],e_and_d[0]) || index == 5){ + MPI_Bcast(&b,1,MPI_DOUBLE,0,world); + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = b * p_s[i]; + } + return 1; + } + else{ + double r,f0,f1,df0,df1; + r = b - a; + f0 = eprevious; + f1 = ecurrent; + df0 = der_e_pr; + df1 = der_e_cur; + + c1 = -2.0*(f1-f0)/(r*r*r)+(df1+df0)/(r*r); + c2 = 3.0*(f1-f0)/(r*r)-(df1+2.0*df0)/(r); + c3 = df0; + + // f(x) = c1 x^3 + c2 x^2 + c3 x^1 + c4 + // has minimum at alpha below. We do not check boundaries. + + alpha = (-c2 + sqrt(c2*c2 - 3.0*c1*c3))/(3.0*c1); + MPI_Bcast(&alpha,1,MPI_DOUBLE,0,world); + + if (alpha < 0.0) alpha = r/2.0; + + for (int i = 0; i < nlocal; i++) { + for (int j = 0; j < 3; j++) sp[i][j] = sp_copy[i][j]; + } + calc_and_make_step(0.0, alpha, index); + } + + return 0; +} + +/* ---------------------------------------------------------------------- + Approximate Wolfe conditions: + William W. Hager and Hongchao Zhang + SIAM J. optim., 16(1), 170-192. (23 pages) +------------------------------------------------------------------------- */ + +int MinSpinOSO_LBFGS::awc(double der_phi_0, double phi_0, double der_phi_j, double phi_j){ + + double eps = 1.0e-6; + double delta = 0.1; + double sigma = 0.9; + + if ((phi_j<=phi_0+eps*fabs(phi_0)) && ((2.0*delta-1.0) * der_phi_0>=der_phi_j>=sigma*der_phi_0)) + return 1; + else + return 0; +} + double MinSpinOSO_LBFGS::maximum_rotation(double *p) { - double norm, norm_global, scaling, alpha; + double norm2,norm2_global,scaling,alpha; int nlocal = atom->nlocal; int ntotal = 0; - norm = 0.0; - for (int i = 0; i < 3 * nlocal; i++) norm += p[i] * p[i]; + norm2 = 0.0; + for (int i = 0; i < 3 * nlocal; i++) norm2 += p[i] * p[i]; - MPI_Allreduce(&norm,&norm_global,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&norm2,&norm2_global,1,MPI_DOUBLE,MPI_SUM,world); if (update->multireplica == 1) { - norm = norm_global; - MPI_Allreduce(&norm,&norm_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + norm2 = norm2_global; + MPI_Allreduce(&norm2,&norm2_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } - MPI_Allreduce(&nlocal,&ntotal,1,MPI_INT,MPI_SUM,world); if (update->multireplica == 1) { nlocal = ntotal; MPI_Allreduce(&nlocal,&ntotal,1,MPI_INT,MPI_SUM,universe->uworld); } - scaling = (maxepsrot * sqrt((double) ntotal / norm_global)); + scaling = (maxepsrot * sqrt((double) ntotal / norm2_global)); if (scaling < 1.0) alpha = scaling; else alpha = 1.0; return alpha; -} - +} \ No newline at end of file diff --git a/src/SPIN/min_spin_oso_lbfgs.h b/src/SPIN/min_spin_oso_lbfgs.h index c0f8dc484d..91c900f244 100644 --- a/src/SPIN/min_spin_oso_lbfgs.h +++ b/src/SPIN/min_spin_oso_lbfgs.h @@ -24,7 +24,7 @@ MinimizeStyle(spin/oso_lbfgs, MinSpinOSO_LBFGS) namespace LAMMPS_NS { -class MinSpinOSO_LBFGS : public Min { +class MinSpinOSO_LBFGS: public Min { public: MinSpinOSO_LBFGS(class LAMMPS *); @@ -34,26 +34,15 @@ public: int modify_param(int, char **); void reset_vectors(); int iterate(int); - double evaluate_dt(); void advance_spins(); - double fmnorm_sqr(); - void calc_gradient(double); + double fmnorm2(); + void calc_gradient(); void calc_search_direction(); double maximum_rotation(double *); private: - - - // test - int ireplica,nreplica; - - // global and spin timesteps + int ireplica,nreplica; // for neb int nlocal_max; // max value of nlocal (for size of lists) - double dt; - double dts; - - double alpha_damp; // damping for spin minimization - double discrete_factor; // factor for spin timestep evaluation double *spvec; // variables for atomic dof, as 1d vector double *fmvec; // variables for atomic dof, as 1d vector @@ -64,13 +53,22 @@ private: double **ds; // change in rotation matrix between two iterations, da double **dy; // change in gradients between two iterations, dg double *rho; // estimation of curvature - int num_mem; // number of stored steps - int local_iter; // number of times we call search_direction + double **sp_copy; // copy of the spins + int num_mem; // number of stored steps + int local_iter; // for neb + + double der_e_cur; // current derivative along search dir. + double der_e_pr; // previous derivative along search dir. + + int use_line_search; // use line search or not. double maxepsrot; void vm3(const double *, const double *, double *); void rodrigues_rotation(const double *, double *); + int calc_and_make_step(double, double, int); + int awc(double, double, double, double); + void make_step(double, double *); bigint last_negative; }; diff --git a/src/SPIN/min_spin_oso_lbfgs_ls.cpp b/src/SPIN/min_spin_oso_lbfgs_ls.cpp deleted file mode 100644 index ddacd3e207..0000000000 --- a/src/SPIN/min_spin_oso_lbfgs_ls.cpp +++ /dev/null @@ -1,785 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ------------------------------------------------------------------------ - Contributing authors: Aleksei Ivanov (University of Iceland) - Julien Tranchida (SNL) - - Please cite the related publication: - Ivanov, A. V., Uzdin, V. M., & Jónsson, H. (2019). Fast and Robust - Algorithm for the Minimisation of the Energy of Spin Systems. arXiv - preprint arXiv:1904.02669. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "min_spin_oso_lbfgs_ls.h" -#include "universe.h" -#include "atom.h" -#include "citeme.h" -#include "force.h" -#include "update.h" -#include "output.h" -#include "timer.h" -#include "error.h" -#include "memory.h" -#include "modify.h" -#include "math_special.h" -#include "math_const.h" -#include "universe.h" -#include - - -using namespace LAMMPS_NS; -using namespace MathConst; - -static const char cite_minstyle_spin_oso_lbfgs_ls[] = - "min_style spin/oso_lbfgs_ls command:\n\n" - "@article{ivanov2019fast,\n" - "title={Fast and Robust Algorithm for the Minimisation of the Energy of " - "Spin Systems},\n" - "author={Ivanov, A. V and Uzdin, V. M. and J{\'o}nsson, H.},\n" - "journal={arXiv preprint arXiv:1904.02669},\n" - "year={2019}\n" - "}\n\n"; - -// EPS_ENERGY = minimum normalization for energy tolerance - -#define EPS_ENERGY 1.0e-8 - -#define DELAYSTEP 5 - - -/* ---------------------------------------------------------------------- */ - -MinSpinOSO_LBFGS_LS::MinSpinOSO_LBFGS_LS(LAMMPS *lmp) : - Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL), ds(NULL), dy(NULL), rho(NULL), sp_copy(NULL) -{ - if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_lbfgs_ls); - nlocal_max = 0; - - // nreplica = number of partitions - // ireplica = which world I am in universe - - nreplica = universe->nworlds; - ireplica = universe->iworld; - use_line_search = 1; - maxepsrot = MY_2PI / (100.0); - -} - -/* ---------------------------------------------------------------------- */ - -MinSpinOSO_LBFGS_LS::~MinSpinOSO_LBFGS_LS() -{ - memory->destroy(g_old); - memory->destroy(g_cur); - memory->destroy(p_s); - memory->destroy(ds); - memory->destroy(dy); - memory->destroy(rho); - if (use_line_search) - memory->destroy(sp_copy); -} - -/* ---------------------------------------------------------------------- */ - -void MinSpinOSO_LBFGS_LS::init() -{ - num_mem = 3; - local_iter = 0; - der_e_cur = 0.0; - der_e_pr = 0.0; - - Min::init(); - - last_negative = update->ntimestep; - - // allocate tables - - nlocal_max = atom->nlocal; - memory->grow(g_old,3*nlocal_max,"min/spin/oso/lbfgs_ls:g_old"); - memory->grow(g_cur,3*nlocal_max,"min/spin/oso/lbfgs_ls:g_cur"); - memory->grow(p_s,3*nlocal_max,"min/spin/oso/lbfgs_ls:p_s"); - memory->grow(rho,num_mem,"min/spin/oso/lbfgs_ls:rho"); - memory->grow(ds,num_mem,3*nlocal_max,"min/spin/oso/lbfgs_ls:ds"); - memory->grow(dy,num_mem,3*nlocal_max,"min/spin/oso/lbfgs_ls:dy"); - if (use_line_search) - memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/lbfgs_ls:sp_copy"); - -} - -/* ---------------------------------------------------------------------- */ - -void MinSpinOSO_LBFGS_LS::setup_style() -{ - double **v = atom->v; - int nlocal = atom->nlocal; - - // check if the atom/spin style is defined - - if (!atom->sp_flag) - error->all(FLERR,"min/spin_oso_lbfgs_ls requires atom/spin style"); - - for (int i = 0; i < nlocal; i++) - v[i][0] = v[i][1] = v[i][2] = 0.0; -} - -/* ---------------------------------------------------------------------- */ - -int MinSpinOSO_LBFGS_LS::modify_param(int narg, char **arg) -{ - - if (strcmp(arg[0],"line_search") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - use_line_search = force->numeric(FLERR,arg[1]); - return 2; - } - if (strcmp(arg[0],"discrete_factor") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - double discrete_factor; - discrete_factor = force->numeric(FLERR,arg[1]); - maxepsrot = MY_2PI / discrete_factor; - return 2; - } - return 0; -} - -/* ---------------------------------------------------------------------- - set current vector lengths and pointers - called after atoms have migrated -------------------------------------------------------------------------- */ - -void MinSpinOSO_LBFGS_LS::reset_vectors() -{ - // atomic dof - - // size sp is 4N vector - nvec = 4 * atom->nlocal; - if (nvec) spvec = atom->sp[0]; - - nvec = 3 * atom->nlocal; - if (nvec) fmvec = atom->fm[0]; - - if (nvec) xvec = atom->x[0]; - if (nvec) fvec = atom->f[0]; -} - -/* ---------------------------------------------------------------------- - minimization via damped spin dynamics -------------------------------------------------------------------------- */ - -int MinSpinOSO_LBFGS_LS::iterate(int maxiter) -{ - int nlocal = atom->nlocal; - bigint ntimestep; - double fmdotfm; - int flag, flagall; - double **sp = atom->sp; - double der_e_cur_tmp = 0.0; - - if (nlocal_max < nlocal) { - nlocal_max = nlocal; - local_iter = 0; - memory->grow(g_old,3*nlocal_max,"min/spin/oso/lbfgs_ls:g_old"); - memory->grow(g_cur,3*nlocal_max,"min/spin/oso/lbfgs_ls:g_cur"); - memory->grow(p_s,3*nlocal_max,"min/spin/oso/lbfgs_ls:p_s"); - memory->grow(rho,num_mem,"min/spin/oso/lbfgs_ls:rho"); - memory->grow(ds,num_mem,3*nlocal_max,"min/spin/oso/lbfgs_ls:ds"); - memory->grow(dy,num_mem,3*nlocal_max,"min/spin/oso/lbfgs_ls:dy"); - if (use_line_search) - memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/lbfgs_ls:sp_copy"); - } - - for (int iter = 0; iter < maxiter; iter++) { - - if (timer->check_timeout(niter)) - return TIMEOUT; - - ntimestep = ++update->ntimestep; - niter++; - - // optimize timestep accross processes / replicas - // need a force calculation for timestep optimization - - if (local_iter == 0) - ecurrent = energy_force(0); - - if (use_line_search) { - - // here we need to do line search - calc_search_direction(); - der_e_cur = 0.0; - for (int i = 0; i < 3 * nlocal; i++) { - der_e_cur += g_cur[i] * p_s[i]; - } - MPI_Allreduce(&der_e_cur,&der_e_cur_tmp,1,MPI_DOUBLE,MPI_SUM,world); - der_e_cur = der_e_cur_tmp; - if (update->multireplica == 1) { - MPI_Allreduce(&der_e_cur_tmp,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - } - for (int i = 0; i < nlocal; i++) { - for (int j = 0; j < 3; j++) sp_copy[i][j] = sp[i][j]; - } - eprevious = ecurrent; - der_e_pr = der_e_cur; - calc_and_make_step(0.0, 1.0, 0); - } - else{ - - // here we don't do line search - // but use cutoff rotation angle - // if gneb calc., nreplica > 1 - // then calculate gradients and advance spins - // of intermediate replicas only - - if (nreplica > 1) { - if(ireplica != 0 && ireplica != nreplica-1) - calc_gradient(); - calc_search_direction(); - advance_spins(); - } else{ - calc_gradient(); - calc_search_direction(); - advance_spins(); - } - neval++; - eprevious = ecurrent; - ecurrent = energy_force(0); - neval++; - } - - //// energy tolerance criterion - //// only check after DELAYSTEP elapsed since velocties reset to 0 - //// sync across replicas if running multi-replica minimization - - if (update->etol > 0.0 && ntimestep-last_negative > DELAYSTEP) { - if (update->multireplica == 0) { - if (fabs(ecurrent-eprevious) < - update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) - return ETOL; - } else { - if (fabs(ecurrent-eprevious) < - update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) - flag = 0; - else flag = 1; - MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); - if (flagall == 0) return ETOL; - } - } - - // magnetic torque tolerance criterion - // sync across replicas if running multi-replica minimization - - if (update->ftol > 0.0) { - fmdotfm = fmnorm2(); - if (update->multireplica == 0) { - if (fmdotfm < update->ftol*update->ftol) return FTOL; - } else { - if (fmdotfm < update->ftol*update->ftol) flag = 0; - else flag = 1; - MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); - if (flagall == 0) return FTOL; - } - } - - // output for thermo, dump, restart files - - if (output->next == ntimestep) { - timer->stamp(); - output->write(ntimestep); - timer->stamp(Timer::OUTPUT); - } - } - - return MAXITER; -} - -/* ---------------------------------------------------------------------- - calculate gradients ----------------------------------------------------------------------- */ - -void MinSpinOSO_LBFGS_LS::calc_gradient() -{ - int nlocal = atom->nlocal; - double **sp = atom->sp; - double **fm = atom->fm; - double tdampx, tdampy, tdampz; - - // loop on all spins on proc. - - for (int i = 0; i < nlocal; i++) { - - // calculate gradients - - g_cur[3 * i + 0] = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - g_cur[3 * i + 1] = -(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); - g_cur[3 * i + 2] = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); - } -} - -/* ---------------------------------------------------------------------- - search direction: - Limited-memory BFGS. - See Jorge Nocedal and Stephen J. Wright 'Numerical - Optimization' Second Edition, 2006 (p. 177) ----------------------------------------------------------------------- */ - -void MinSpinOSO_LBFGS_LS::calc_search_direction() -{ - int nlocal = atom->nlocal; - - double dyds = 0.0; - double sq = 0.0; - double yy = 0.0; - double yr = 0.0; - double beta = 0.0; - - double dyds_global = 0.0; - double sq_global = 0.0; - double yy_global = 0.0; - double yr_global = 0.0; - double beta_global = 0.0; - - int m_index = local_iter % num_mem; // memory index - int c_ind = 0; - double *q; - double *alpha; - - double factor; - double scaling = 1.0; - - // for multiple replica do not move end points - if (nreplica > 1) { - if (ireplica == 0 || ireplica == nreplica - 1) { - factor = 0.0; - } - else factor = 1.0; - }else{ - factor = 1.0; - } - - q = (double *) calloc(3*nlocal, sizeof(double)); - alpha = (double *) calloc(num_mem, sizeof(double)); - - if (local_iter == 0){ // steepest descent direction - - //if no line search then calculate maximum rotation - if (use_line_search == 0) - scaling = maximum_rotation(g_cur); - - for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = -g_cur[i] * factor * scaling;; - g_old[i] = g_cur[i] * factor; - for (int k = 0; k < num_mem; k++){ - ds[k][i] = 0.0; - dy[k][i] = 0.0; - rho[k] = 0.0; - } - } - } else { - dyds = 0.0; - for (int i = 0; i < 3 * nlocal; i++) { - ds[m_index][i] = p_s[i]; - dy[m_index][i] = g_cur[i] - g_old[i]; - dyds += ds[m_index][i] * dy[m_index][i]; - } - MPI_Allreduce(&dyds, &dyds_global, 1, MPI_DOUBLE, MPI_SUM, world); - - if (update->multireplica == 1) { - dyds_global *= factor; - dyds = dyds_global; - MPI_Allreduce(&dyds, &dyds_global, 1,MPI_DOUBLE,MPI_SUM,universe->uworld); - } - - if (fabs(dyds_global) > 1.0e-60) rho[m_index] = 1.0 / dyds_global; - else rho[m_index] = 1.0e60; - - if (rho[m_index] < 0.0){ - local_iter = 0; - for (int k = 0; k < num_mem; k++){ - for (int i = 0; i < nlocal; i ++){ - ds[k][i] = 0.0; - dy[k][i] = 0.0; - } - } - return calc_search_direction(); - } - - // set the q vector - - for (int i = 0; i < 3 * nlocal; i++) { - q[i] = g_cur[i]; - } - - // loop over last m indecies - for(int k = num_mem - 1; k > -1; k--) { - // this loop should run from the newest memory to the oldest one. - - c_ind = (k + m_index + 1) % num_mem; - - // dot product between dg and q - - sq = 0.0; - for (int i = 0; i < 3 * nlocal; i++) { - sq += ds[c_ind][i] * q[i]; - } - MPI_Allreduce(&sq,&sq_global,1,MPI_DOUBLE,MPI_SUM,world); - if (update->multireplica == 1) { - sq_global *= factor; - sq = sq_global; - MPI_Allreduce(&sq,&sq_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - } - - // update alpha - - alpha[c_ind] = rho[c_ind] * sq_global; - - // update q - - for (int i = 0; i < 3 * nlocal; i++) { - q[i] -= alpha[c_ind] * dy[c_ind][i]; - } - } - - // dot product between dg with itself - yy = 0.0; - for (int i = 0; i < 3 * nlocal; i++) { - yy += dy[m_index][i] * dy[m_index][i]; - } - MPI_Allreduce(&yy,&yy_global,1,MPI_DOUBLE,MPI_SUM,world); - if (update->multireplica == 1) { - yy_global *= factor; - yy = yy_global; - MPI_Allreduce(&yy,&yy_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - } - - // calculate now search direction - - double devis = rho[m_index] * yy_global; - - if (fabs(devis) > 1.0e-60) { - for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = factor * q[i] / devis; - } - }else{ - for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = factor * q[i] * 1.0e60; - } - } - - for (int k = 0; k < num_mem; k++){ - // this loop should run from the oldest memory to the newest one. - - if (local_iter < num_mem) c_ind = k; - else c_ind = (k + m_index + 1) % num_mem; - - // dot product between p and da - yr = 0.0; - for (int i = 0; i < 3 * nlocal; i++) { - yr += dy[c_ind][i] * p_s[i]; - } - - MPI_Allreduce(&yr,&yr_global,1,MPI_DOUBLE,MPI_SUM,world); - if (update->multireplica == 1) { - yr_global *= factor; - yr = yr_global; - MPI_Allreduce(&yr,&yr_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - } - - beta = rho[c_ind] * yr_global; - for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] += ds[c_ind][i] * (alpha[c_ind] - beta); - } - } - if (use_line_search == 0) - scaling = maximum_rotation(p_s); - for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = - factor * p_s[i] * scaling; - g_old[i] = g_cur[i] * factor; - } - } - - local_iter++; - free(q); - free(alpha); - -} - -/* ---------------------------------------------------------------------- - rotation of spins along the search direction ----------------------------------------------------------------------- */ - -void MinSpinOSO_LBFGS_LS::advance_spins() -{ - int nlocal = atom->nlocal; - double **sp = atom->sp; - double **fm = atom->fm; - double tdampx, tdampy, tdampz; - double rot_mat[9]; // exponential of matrix made of search direction - double s_new[3]; - - // loop on all spins on proc. - - for (int i = 0; i < nlocal; i++) { - rodrigues_rotation(p_s + 3 * i, rot_mat); - - // rotate spins - - vm3(rot_mat, sp[i], s_new); - for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; - } -} - -/* ---------------------------------------------------------------------- - compute and return ||mag. torque||_2^2 / N -------------------------------------------------------------------------- */ - -double MinSpinOSO_LBFGS_LS::fmnorm2() { - double norm2, norm2_global; - int nlocal = atom->nlocal; - int ntotal = 0; - - norm2 = 0.0; - for (int i = 0; i < 3 * nlocal; i++) norm2 += g_cur[i] * g_cur[i]; - MPI_Allreduce(&norm2, &norm2_global, 1, MPI_DOUBLE, MPI_SUM, world); - MPI_Allreduce(&nlocal, &ntotal, 1, MPI_INT, MPI_SUM, world); - double ans = norm2_global / (double) ntotal; - MPI_Bcast(&ans, 1, MPI_DOUBLE, 0, world); - return ans; -} - -/* ---------------------------------------------------------------------- - calculate 3x3 matrix exponential using Rodrigues' formula - (R. Murray, Z. Li, and S. Shankar Sastry, - A Mathematical Introduction to - Robotic Manipulation (1994), p. 28 and 30). - - upp_tr - vector x, y, z so that one calculate - U = exp(A) with A= [[0, x, y], - [-x, 0, z], - [-y, -z, 0]] -------------------------------------------------------------------------- */ - -void MinSpinOSO_LBFGS_LS::rodrigues_rotation(const double *upp_tr, double *out) -{ - double theta,A,B,D,x,y,z; - double s1,s2,s3,a1,a2,a3; - - if (fabs(upp_tr[0]) < 1.0e-40 && - fabs(upp_tr[1]) < 1.0e-40 && - fabs(upp_tr[2]) < 1.0e-40){ - - // if upp_tr is zero, return unity matrix - for(int k = 0; k < 3; k++){ - for(int m = 0; m < 3; m++){ - if (m == k) out[3 * k + m] = 1.0; - else out[3 * k + m] = 0.0; - } - } - return; - } - - theta = sqrt(upp_tr[0] * upp_tr[0] + - upp_tr[1] * upp_tr[1] + - upp_tr[2] * upp_tr[2]); - - A = cos(theta); - B = sin(theta); - D = 1 - A; - x = upp_tr[0]/theta; - y = upp_tr[1]/theta; - z = upp_tr[2]/theta; - - // diagonal elements of U - - out[0] = A + z * z * D; - out[4] = A + y * y * D; - out[8] = A + x * x * D; - - // off diagonal of U - - s1 = -y * z *D; - s2 = x * z * D; - s3 = -x * y * D; - - a1 = x * B; - a2 = y * B; - a3 = z * B; - - out[1] = s1 + a1; - out[3] = s1 - a1; - out[2] = s2 + a2; - out[6] = s2 - a2; - out[5] = s3 + a3; - out[7] = s3 - a3; - -} - -/* ---------------------------------------------------------------------- - out = vector^T x m, - m -- 3x3 matrix , v -- 3-d vector -------------------------------------------------------------------------- */ - -void MinSpinOSO_LBFGS_LS::vm3(const double *m, const double *v, double *out) -{ - for(int i = 0; i < 3; i++){ - out[i] *= 0.0; - for(int j = 0; j < 3; j++) - out[i] += *(m + 3 * j + i) * v[j]; - } -} - - -void MinSpinOSO_LBFGS_LS::make_step(double c, double *energy_and_der) -{ - double p_scaled[3]; - int nlocal = atom->nlocal; - double rot_mat[9]; // exponential of matrix made of search direction - double s_new[3]; - double **sp = atom->sp; - double der_e_cur_tmp = 0.0;; - - for (int i = 0; i < nlocal; i++) { - - // scale the search direction - - for (int j = 0; j < 3; j++) p_scaled[j] = c * p_s[3 * i + j]; - - // calculate rotation matrix - - rodrigues_rotation(p_scaled, rot_mat); - - // rotate spins - - vm3(rot_mat, sp[i], s_new); - for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; - } - - ecurrent = energy_force(0); - calc_gradient(); - neval++; - der_e_cur = 0.0; - for (int i = 0; i < 3 * nlocal; i++) { - der_e_cur += g_cur[i] * p_s[i]; - } - MPI_Allreduce(&der_e_cur,&der_e_cur_tmp, 1, MPI_DOUBLE, MPI_SUM, world); - der_e_cur = der_e_cur_tmp; - if (update->multireplica == 1) { - MPI_Allreduce(&der_e_cur_tmp,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - } - - energy_and_der[0] = ecurrent; - energy_and_der[1] = der_e_cur; -} - -/* ---------------------------------------------------------------------- - Calculate step length which satisfies approximate Wolfe conditions - using the cubic interpolation -------------------------------------------------------------------------- */ - -int MinSpinOSO_LBFGS_LS::calc_and_make_step(double a, double b, int index) -{ - double e_and_d[2] = {0.0,0.0}; - double alpha,c1,c2,c3; - double **sp = atom->sp; - int nlocal = atom->nlocal; - - make_step(b,e_and_d); - ecurrent = e_and_d[0]; - der_e_cur = e_and_d[1]; - index++; - - if (awc(der_e_pr,eprevious,e_and_d[1],e_and_d[0]) || index == 5){ - MPI_Bcast(&b,1,MPI_DOUBLE,0,world); - for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = b * p_s[i]; - } - return 1; - } - else{ - double r,f0,f1,df0,df1; - r = b - a; - f0 = eprevious; - f1 = ecurrent; - df0 = der_e_pr; - df1 = der_e_cur; - - c1 = -2.0*(f1-f0)/(r*r*r)+(df1+df0)/(r*r); - c2 = 3.0*(f1-f0)/(r*r)-(df1+2.0*df0)/(r); - c3 = df0; - - // f(x) = c1 x^3 + c2 x^2 + c3 x^1 + c4 - // has minimum at alpha below. We do not check boundaries. - - alpha = (-c2 + sqrt(c2*c2 - 3.0*c1*c3))/(3.0*c1); - MPI_Bcast(&alpha,1,MPI_DOUBLE,0,world); - - if (alpha < 0.0) alpha = r/2.0; - - for (int i = 0; i < nlocal; i++) { - for (int j = 0; j < 3; j++) sp[i][j] = sp_copy[i][j]; - } - calc_and_make_step(0.0, alpha, index); - } - - return 0; -} - -/* ---------------------------------------------------------------------- - Approximate Wolfe conditions: - William W. Hager and Hongchao Zhang - SIAM J. optim., 16(1), 170-192. (23 pages) -------------------------------------------------------------------------- */ - -int MinSpinOSO_LBFGS_LS::awc(double der_phi_0, double phi_0, double der_phi_j, double phi_j){ - - double eps = 1.0e-6; - double delta = 0.1; - double sigma = 0.9; - - if ((phi_j<=phi_0+eps*fabs(phi_0)) && ((2.0*delta-1.0) * der_phi_0>=der_phi_j>=sigma*der_phi_0)) - return 1; - else - return 0; -} - -double MinSpinOSO_LBFGS_LS::maximum_rotation(double *p) -{ - double norm2,norm2_global,scaling,alpha; - int nlocal = atom->nlocal; - int ntotal = 0; - - norm2 = 0.0; - for (int i = 0; i < 3 * nlocal; i++) norm2 += p[i] * p[i]; - - MPI_Allreduce(&norm2,&norm2_global,1,MPI_DOUBLE,MPI_SUM,world); - if (update->multireplica == 1) { - norm2 = norm2_global; - MPI_Allreduce(&norm2,&norm2_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - } - MPI_Allreduce(&nlocal,&ntotal,1,MPI_INT,MPI_SUM,world); - if (update->multireplica == 1) { - nlocal = ntotal; - MPI_Allreduce(&nlocal,&ntotal,1,MPI_INT,MPI_SUM,universe->uworld); - } - - scaling = (maxepsrot * sqrt((double) ntotal / norm2_global)); - - if (scaling < 1.0) alpha = scaling; - else alpha = 1.0; - - return alpha; -} \ No newline at end of file diff --git a/src/SPIN/min_spin_oso_lbfgs_ls.h b/src/SPIN/min_spin_oso_lbfgs_ls.h deleted file mode 100644 index a253808923..0000000000 --- a/src/SPIN/min_spin_oso_lbfgs_ls.h +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- 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 MINIMIZE_CLASS - -MinimizeStyle(spin/oso_lbfgs_ls, MinSpinOSO_LBFGS_LS) - -#else - -#ifndef LMP_MIN_SPIN_OSO_LBFGS_LS_H -#define LMP_MIN_SPIN_OSO_LBFGS_LS_H - -#include "min.h" - -namespace LAMMPS_NS { - -class MinSpinOSO_LBFGS_LS : public Min { - -public: - MinSpinOSO_LBFGS_LS(class LAMMPS *); - virtual ~MinSpinOSO_LBFGS_LS(); - void init(); - void setup_style(); - int modify_param(int, char **); - void reset_vectors(); - int iterate(int); - void advance_spins(); - double fmnorm2(); - void calc_gradient(); - void calc_search_direction(); - double maximum_rotation(double *); -private: - int ireplica,nreplica; // for neb - - int nlocal_max; // max value of nlocal (for size of lists) - - double *spvec; // variables for atomic dof, as 1d vector - double *fmvec; // variables for atomic dof, as 1d vector - - double *g_cur; // current gradient vector - double *g_old; // gradient vector at previous step - double *p_s; // search direction vector - double **ds; // change in rotation matrix between two iterations, da - double **dy; // change in gradients between two iterations, dg - double *rho; // estimation of curvature - double **sp_copy; // copy of the spins - - int num_mem; // number of stored steps - int local_iter; // for neb - - double der_e_cur; // current derivative along search dir. - double der_e_pr; // previous derivative along search dir. - - int use_line_search; // use line search or not. - double maxepsrot; - - void vm3(const double *, const double *, double *); - void rodrigues_rotation(const double *, double *); - int calc_and_make_step(double, double, int); - int awc(double, double, double, double); - void make_step(double, double *); - - bigint last_negative; -}; - -} - -#endif -#endif From aa5263f729d6cfb996e7b0033c6737b1a6e5d8c9 Mon Sep 17 00:00:00 2001 From: alxvov Date: Fri, 19 Jul 2019 13:46:26 +0000 Subject: [PATCH 043/237] restructure a bit --- src/SPIN/min_spin_oso_lbfgs.h | 47 +++++++++++++++-------------------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.h b/src/SPIN/min_spin_oso_lbfgs.h index 91c900f244..48d1b47837 100644 --- a/src/SPIN/min_spin_oso_lbfgs.h +++ b/src/SPIN/min_spin_oso_lbfgs.h @@ -25,8 +25,7 @@ MinimizeStyle(spin/oso_lbfgs, MinSpinOSO_LBFGS) namespace LAMMPS_NS { class MinSpinOSO_LBFGS: public Min { - -public: + public: MinSpinOSO_LBFGS(class LAMMPS *); virtual ~MinSpinOSO_LBFGS(); void init(); @@ -34,42 +33,36 @@ public: int modify_param(int, char **); void reset_vectors(); int iterate(int); + private: + int ireplica,nreplica; // for neb + double *spvec; // variables for atomic dof, as 1d vector + double *fmvec; // variables for atomic dof, as 1d vector + double *g_cur; // current gradient vector + double *g_old; // gradient vector at previous step + double *p_s; // search direction vector + double **sp_copy; // copy of the spins + int local_iter; // for neb + int nlocal_max; // max value of nlocal (for size of lists) + void advance_spins(); double fmnorm2(); void calc_gradient(); void calc_search_direction(); double maximum_rotation(double *); -private: - int ireplica,nreplica; // for neb - - int nlocal_max; // max value of nlocal (for size of lists) - - double *spvec; // variables for atomic dof, as 1d vector - double *fmvec; // variables for atomic dof, as 1d vector - - double *g_cur; // current gradient vector - double *g_old; // gradient vector at previous step - double *p_s; // search direction vector - double **ds; // change in rotation matrix between two iterations, da - double **dy; // change in gradients between two iterations, dg - double *rho; // estimation of curvature - double **sp_copy; // copy of the spins - - int num_mem; // number of stored steps - int local_iter; // for neb - - double der_e_cur; // current derivative along search dir. - double der_e_pr; // previous derivative along search dir. - - int use_line_search; // use line search or not. - double maxepsrot; - void vm3(const double *, const double *, double *); void rodrigues_rotation(const double *, double *); int calc_and_make_step(double, double, int); int awc(double, double, double, double); void make_step(double, double *); + double der_e_cur; // current derivative along search dir. + double der_e_pr; // previous derivative along search dir. + int use_line_search; // use line search or not. + double maxepsrot; + double **ds; // change in rotation matrix between two iterations, da + double **dy; // change in gradients between two iterations, dg + double *rho; // estimation of curvature + int num_mem; // number of stored steps bigint last_negative; }; From b31548df2e84ded3b50ebbbd53ae94b2cf912e35 Mon Sep 17 00:00:00 2001 From: alxvov Date: Fri, 19 Jul 2019 16:00:08 +0000 Subject: [PATCH 044/237] convergence criterion based on maximum toque at atom. Minor changes --- src/SPIN/min_spin_oso_lbfgs.cpp | 62 +++++++++++++++++++++------------ src/SPIN/min_spin_oso_lbfgs.h | 2 +- 2 files changed, 40 insertions(+), 24 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index 7f716da63d..8d05ea63d8 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -212,25 +212,25 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) // optimize timestep accross processes / replicas // need a force calculation for timestep optimization - if (local_iter == 0) - ecurrent = energy_force(0); - if (use_line_search) { // here we need to do line search + if (local_iter == 0) + calc_gradient(); + calc_search_direction(); der_e_cur = 0.0; - for (int i = 0; i < 3 * nlocal; i++) { + for (int i = 0; i < 3 * nlocal; i++) der_e_cur += g_cur[i] * p_s[i]; - } MPI_Allreduce(&der_e_cur,&der_e_cur_tmp,1,MPI_DOUBLE,MPI_SUM,world); der_e_cur = der_e_cur_tmp; if (update->multireplica == 1) { MPI_Allreduce(&der_e_cur_tmp,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } - for (int i = 0; i < nlocal; i++) { - for (int j = 0; j < 3; j++) sp_copy[i][j] = sp[i][j]; - } + for (int i = 0; i < nlocal; i++) + for (int j = 0; j < 3; j++) + sp_copy[i][j] = sp[i][j]; + eprevious = ecurrent; der_e_pr = der_e_cur; calc_and_make_step(0.0, 1.0, 0); @@ -253,7 +253,6 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) calc_search_direction(); advance_spins(); } - neval++; eprevious = ecurrent; ecurrent = energy_force(0); neval++; @@ -282,7 +281,7 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) // sync across replicas if running multi-replica minimization if (update->ftol > 0.0) { - fmdotfm = fmnorm2(); + fmdotfm = max_torque(); if (update->multireplica == 0) { if (fmdotfm < update->ftol*update->ftol) return FTOL; } else { @@ -314,8 +313,7 @@ void MinSpinOSO_LBFGS::calc_gradient() int nlocal = atom->nlocal; double **sp = atom->sp; double **fm = atom->fm; - double tdampx, tdampy, tdampz; - + // loop on all spins on proc. for (int i = 0; i < nlocal; i++) { @@ -542,21 +540,39 @@ void MinSpinOSO_LBFGS::advance_spins() } /* ---------------------------------------------------------------------- - compute and return ||mag. torque||_2^2 / N + compute and return max_i||mag. torque_i||_2 ------------------------------------------------------------------------- */ -double MinSpinOSO_LBFGS::fmnorm2() { - double norm2, norm2_global; +double MinSpinOSO_LBFGS::max_torque() +{ + double fmsq,fmaxsqone,fmaxsqloc,fmaxsqall; int nlocal = atom->nlocal; - int ntotal = 0; - norm2 = 0.0; - for (int i = 0; i < 3 * nlocal; i++) norm2 += g_cur[i] * g_cur[i]; - MPI_Allreduce(&norm2, &norm2_global, 1, MPI_DOUBLE, MPI_SUM, world); - MPI_Allreduce(&nlocal, &ntotal, 1, MPI_INT, MPI_SUM, world); - double ans = norm2_global / (double) ntotal; - MPI_Bcast(&ans, 1, MPI_DOUBLE, 0, world); - return ans; + // finding max fm on this proc. + + fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; + for (int i = 0; i < nlocal; i++) { + fmsq = 0.0; + for (int j = 0; j < 3; j++) + fmsq += g_cur[3 * i + j] * g_cur[3 * i + j]; + fmaxsqone = MAX(fmaxsqone,fmsq); + } + + // finding max fm on this replica + + fmaxsqloc = fmaxsqone; + MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); + + // finding max fm over all replicas, if necessary + // this communicator would be invalid for multiprocess replicas + + fmaxsqall = fmaxsqloc; + if (update->multireplica == 1) { + fmaxsqall = fmaxsqloc; + MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); + } + + return sqrt(fmaxsqall); } /* ---------------------------------------------------------------------- diff --git a/src/SPIN/min_spin_oso_lbfgs.h b/src/SPIN/min_spin_oso_lbfgs.h index 48d1b47837..d74898aa8c 100644 --- a/src/SPIN/min_spin_oso_lbfgs.h +++ b/src/SPIN/min_spin_oso_lbfgs.h @@ -45,7 +45,6 @@ class MinSpinOSO_LBFGS: public Min { int nlocal_max; // max value of nlocal (for size of lists) void advance_spins(); - double fmnorm2(); void calc_gradient(); void calc_search_direction(); double maximum_rotation(double *); @@ -54,6 +53,7 @@ class MinSpinOSO_LBFGS: public Min { int calc_and_make_step(double, double, int); int awc(double, double, double, double); void make_step(double, double *); + double max_torque(); double der_e_cur; // current derivative along search dir. double der_e_pr; // previous derivative along search dir. int use_line_search; // use line search or not. From 3b7bb668aecc3f32d32c1eb4061a112e07536e5b Mon Sep 17 00:00:00 2001 From: alxvov Date: Fri, 19 Jul 2019 16:41:51 +0000 Subject: [PATCH 045/237] conjugate gradients with line search --- src/SPIN/min_spin_oso_cg2.cpp | 665 ++++++++++++++++++++++++++++++++++ src/SPIN/min_spin_oso_cg2.h | 68 ++++ 2 files changed, 733 insertions(+) create mode 100644 src/SPIN/min_spin_oso_cg2.cpp create mode 100644 src/SPIN/min_spin_oso_cg2.h diff --git a/src/SPIN/min_spin_oso_cg2.cpp b/src/SPIN/min_spin_oso_cg2.cpp new file mode 100644 index 0000000000..23873e24f2 --- /dev/null +++ b/src/SPIN/min_spin_oso_cg2.cpp @@ -0,0 +1,665 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------------ + Contributing authors: Aleksei Ivanov (University of Iceland) + Julien Tranchida (SNL) + + Please cite the related publication: + Ivanov, A. V., Uzdin, V. M., & Jónsson, H. (2019). Fast and Robust + Algorithm for the Minimisation of the Energy of Spin Systems. arXiv + preprint arXiv:1904.02669. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "min_spin_oso_cg2.h" +#include "universe.h" +#include "atom.h" +#include "citeme.h" +#include "force.h" +#include "update.h" +#include "output.h" +#include "timer.h" +#include "error.h" +#include "memory.h" +#include "modify.h" +#include "math_special.h" +#include "math_const.h" +#include "universe.h" +#include + +using namespace LAMMPS_NS; +using namespace MathConst; + +static const char cite_minstyle_spin_oso_cg2[] = + "min_style spin/oso_cg2 command:\n\n" + "@article{ivanov2019fast,\n" + "title={Fast and Robust Algorithm for the Minimisation of the Energy of " + "Spin Systems},\n" + "author={Ivanov, A. V and Uzdin, V. M. and J{\'o}nsson, H.},\n" + "journal={arXiv preprint arXiv:1904.02669},\n" + "year={2019}\n" + "}\n\n"; + +// EPS_ENERGY = minimum normalization for energy tolerance + +#define EPS_ENERGY 1.0e-8 + +#define DELAYSTEP 5 + + +/* ---------------------------------------------------------------------- */ + +MinSpinOSO_CG2::MinSpinOSO_CG2(LAMMPS *lmp) : + Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL) +{ + if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_cg2); + nlocal_max = 0; + + // nreplica = number of partitions + // ireplica = which world I am in universe + + nreplica = universe->nworlds; + ireplica = universe->iworld; + use_line_search = 1; + maxepsrot = MY_2PI / (100.0); + +} + +/* ---------------------------------------------------------------------- */ + +MinSpinOSO_CG2::~MinSpinOSO_CG2() +{ + memory->destroy(g_old); + memory->destroy(g_cur); + memory->destroy(p_s); + if (use_line_search) + memory->destroy(sp_copy); +} + +/* ---------------------------------------------------------------------- */ + +void MinSpinOSO_CG2::init() +{ + local_iter = 0; + der_e_cur = 0.0; + der_e_pr = 0.0; + + Min::init(); + + last_negative = update->ntimestep; + + // allocate tables + + nlocal_max = atom->nlocal; + memory->grow(g_old,3*nlocal_max,"min/spin/oso/cg2:g_old"); + memory->grow(g_cur,3*nlocal_max,"min/spin/oso/cg2:g_cur"); + memory->grow(p_s,3*nlocal_max,"min/spin/oso/cg2:p_s"); + if (use_line_search) + memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/cg2:sp_copy"); +} + +/* ---------------------------------------------------------------------- */ + +void MinSpinOSO_CG2::setup_style() +{ + double **v = atom->v; + int nlocal = atom->nlocal; + + // check if the atom/spin style is defined + + if (!atom->sp_flag) + error->all(FLERR,"min/spin_oso_cg2 requires atom/spin style"); + + for (int i = 0; i < nlocal; i++) + v[i][0] = v[i][1] = v[i][2] = 0.0; +} + +/* ---------------------------------------------------------------------- */ + +int MinSpinOSO_CG2::modify_param(int narg, char **arg) +{ + + if (strcmp(arg[0],"line_search") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + use_line_search = force->numeric(FLERR,arg[1]); + return 2; + } + if (strcmp(arg[0],"discrete_factor") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + double discrete_factor; + discrete_factor = force->numeric(FLERR,arg[1]); + maxepsrot = MY_2PI / discrete_factor; + return 2; + } + return 0; +} + +/* ---------------------------------------------------------------------- + set current vector lengths and pointers + called after atoms have migrated +------------------------------------------------------------------------- */ + +void MinSpinOSO_CG2::reset_vectors() +{ + // atomic dof + + // size sp is 4N vector + nvec = 4 * atom->nlocal; + if (nvec) spvec = atom->sp[0]; + + nvec = 3 * atom->nlocal; + if (nvec) fmvec = atom->fm[0]; + + if (nvec) xvec = atom->x[0]; + if (nvec) fvec = atom->f[0]; +} + +/* ---------------------------------------------------------------------- + minimization via damped spin dynamics +------------------------------------------------------------------------- */ + +int MinSpinOSO_CG2::iterate(int maxiter) +{ + int nlocal = atom->nlocal; + bigint ntimestep; + double fmdotfm; + int flag, flagall; + double **sp = atom->sp; + double der_e_cur_tmp = 0.0; + + if (nlocal_max < nlocal) { + nlocal_max = nlocal; + local_iter = 0; + nlocal_max = nlocal; + memory->grow(g_old,3*nlocal_max,"min/spin/oso/cg2:g_old"); + memory->grow(g_cur,3*nlocal_max,"min/spin/oso/cg2:g_cur"); + memory->grow(p_s,3*nlocal_max,"min/spin/oso/cg2:p_s"); + if (use_line_search) + memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/cg2:sp_copy"); + } + + for (int iter = 0; iter < maxiter; iter++) { + + if (timer->check_timeout(niter)) + return TIMEOUT; + + ntimestep = ++update->ntimestep; + niter++; + + // optimize timestep accross processes / replicas + // need a force calculation for timestep optimization + + if (use_line_search) { + + // here we need to do line search + if (local_iter == 0) + calc_gradient(); + + calc_search_direction(); + der_e_cur = 0.0; + for (int i = 0; i < 3 * nlocal; i++) + der_e_cur += g_cur[i] * p_s[i]; + MPI_Allreduce(&der_e_cur,&der_e_cur_tmp,1,MPI_DOUBLE,MPI_SUM,world); + der_e_cur = der_e_cur_tmp; + if (update->multireplica == 1) { + MPI_Allreduce(&der_e_cur_tmp,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } + for (int i = 0; i < nlocal; i++) + for (int j = 0; j < 3; j++) + sp_copy[i][j] = sp[i][j]; + + eprevious = ecurrent; + der_e_pr = der_e_cur; + calc_and_make_step(0.0, 1.0, 0); + } + else{ + + // here we don't do line search + // but use cutoff rotation angle + // if gneb calc., nreplica > 1 + // then calculate gradients and advance spins + // of intermediate replicas only + + if (nreplica > 1) { + if(ireplica != 0 && ireplica != nreplica-1) + calc_gradient(); + calc_search_direction(); + advance_spins(); + } else{ + calc_gradient(); + calc_search_direction(); + advance_spins(); + } + eprevious = ecurrent; + ecurrent = energy_force(0); + neval++; + } + + //// energy tolerance criterion + //// only check after DELAYSTEP elapsed since velocties reset to 0 + //// sync across replicas if running multi-replica minimization + + if (update->etol > 0.0 && ntimestep-last_negative > DELAYSTEP) { + if (update->multireplica == 0) { + if (fabs(ecurrent-eprevious) < + update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) + return ETOL; + } else { + if (fabs(ecurrent-eprevious) < + update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) + flag = 0; + else flag = 1; + MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); + if (flagall == 0) return ETOL; + } + } + + // magnetic torque tolerance criterion + // sync across replicas if running multi-replica minimization + + if (update->ftol > 0.0) { + fmdotfm = max_torque(); + if (update->multireplica == 0) { + if (fmdotfm < update->ftol*update->ftol) return FTOL; + } else { + if (fmdotfm < update->ftol*update->ftol) flag = 0; + else flag = 1; + MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); + if (flagall == 0) return FTOL; + } + } + + // output for thermo, dump, restart files + + if (output->next == ntimestep) { + timer->stamp(); + output->write(ntimestep); + timer->stamp(Timer::OUTPUT); + } + } + + return MAXITER; +} + +/* ---------------------------------------------------------------------- + calculate gradients +---------------------------------------------------------------------- */ + +void MinSpinOSO_CG2::calc_gradient() +{ + int nlocal = atom->nlocal; + double **sp = atom->sp; + double **fm = atom->fm; + double hbar = force->hplanck/MY_2PI; + + // loop on all spins on proc. + + for (int i = 0; i < nlocal; i++) { + + // calculate gradients + + g_cur[3 * i + 0] = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]) * hbar; + g_cur[3 * i + 1] = -(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]) * hbar; + g_cur[3 * i + 2] = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]) * hbar; + } +} + + +/* ---------------------------------------------------------------------- + search direction: + The Fletcher-Reeves conj. grad. method + See Jorge Nocedal and Stephen J. Wright 'Numerical + Optimization' Second Edition, 2006 (p. 121) +---------------------------------------------------------------------- */ + +void MinSpinOSO_CG2::calc_search_direction() +{ + int nlocal = atom->nlocal; + double g2old = 0.0; + double g2 = 0.0; + double beta = 0.0; + + double g2_global = 0.0; + double g2old_global = 0.0; + double scaling = 1.0; + + if (use_line_search == 0) + scaling = maximum_rotation(g_cur); + + if (local_iter == 0 || local_iter % 5 == 0){ // steepest descent direction + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = -g_cur[i] * scaling; + g_old[i] = g_cur[i]; + } + } else { // conjugate direction + for (int i = 0; i < 3 * nlocal; i++) { + g2old += g_old[i] * g_old[i]; + g2 += g_cur[i] * g_cur[i]; + } + + // now we need to collect/broadcast beta on this replica + // different replica can have different beta for now. + // need to check what is beta for GNEB + + MPI_Allreduce(&g2, &g2_global, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&g2old, &g2old_global, 1, MPI_DOUBLE, MPI_SUM, world); + + // Sum over all replicas. Good for GNEB. + if (update->multireplica == 1) { + g2 = g2_global; + g2old = g2old_global; + MPI_Allreduce(&g2,&g2_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } + + if (fabs(g2_global) < 1.0e-60) beta = 0.0; + else beta = g2_global / g2old_global; + // calculate conjugate direction + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = (beta * p_s[i] - g_cur[i])*scaling; + g_old[i] = g_cur[i]; + } + } + + local_iter++; +} + +/* ---------------------------------------------------------------------- + rotation of spins along the search direction +---------------------------------------------------------------------- */ + +void MinSpinOSO_CG2::advance_spins() +{ + int nlocal = atom->nlocal; + double **sp = atom->sp; + double **fm = atom->fm; + double tdampx, tdampy, tdampz; + double rot_mat[9]; // exponential of matrix made of search direction + double s_new[3]; + + // loop on all spins on proc. + + for (int i = 0; i < nlocal; i++) { + rodrigues_rotation(p_s + 3 * i, rot_mat); + + // rotate spins + + vm3(rot_mat, sp[i], s_new); + for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; + } +} + +/* ---------------------------------------------------------------------- + compute and return max_i||mag. torque_i||_2 +------------------------------------------------------------------------- */ + +double MinSpinOSO_CG2::max_torque() +{ + double fmsq,fmaxsqone,fmaxsqloc,fmaxsqall; + int nlocal = atom->nlocal; + + // finding max fm on this proc. + + fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; + for (int i = 0; i < nlocal; i++) { + fmsq = 0.0; + for (int j = 0; j < 3; j++) + fmsq += g_cur[3 * i + j] * g_cur[3 * i + j]; + fmaxsqone = MAX(fmaxsqone,fmsq); + } + + // finding max fm on this replica + + fmaxsqloc = fmaxsqone; + MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); + + // finding max fm over all replicas, if necessary + // this communicator would be invalid for multiprocess replicas + + fmaxsqall = fmaxsqloc; + if (update->multireplica == 1) { + fmaxsqall = fmaxsqloc; + MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); + } + + return sqrt(fmaxsqall); +} + +/* ---------------------------------------------------------------------- + calculate 3x3 matrix exponential using Rodrigues' formula + (R. Murray, Z. Li, and S. Shankar Sastry, + A Mathematical Introduction to + Robotic Manipulation (1994), p. 28 and 30). + + upp_tr - vector x, y, z so that one calculate + U = exp(A) with A= [[0, x, y], + [-x, 0, z], + [-y, -z, 0]] +------------------------------------------------------------------------- */ + +void MinSpinOSO_CG2::rodrigues_rotation(const double *upp_tr, double *out) +{ + double theta,A,B,D,x,y,z; + double s1,s2,s3,a1,a2,a3; + + if (fabs(upp_tr[0]) < 1.0e-40 && + fabs(upp_tr[1]) < 1.0e-40 && + fabs(upp_tr[2]) < 1.0e-40){ + + // if upp_tr is zero, return unity matrix + for(int k = 0; k < 3; k++){ + for(int m = 0; m < 3; m++){ + if (m == k) out[3 * k + m] = 1.0; + else out[3 * k + m] = 0.0; + } + } + return; + } + + theta = sqrt(upp_tr[0] * upp_tr[0] + + upp_tr[1] * upp_tr[1] + + upp_tr[2] * upp_tr[2]); + + A = cos(theta); + B = sin(theta); + D = 1 - A; + x = upp_tr[0]/theta; + y = upp_tr[1]/theta; + z = upp_tr[2]/theta; + + // diagonal elements of U + + out[0] = A + z * z * D; + out[4] = A + y * y * D; + out[8] = A + x * x * D; + + // off diagonal of U + + s1 = -y * z *D; + s2 = x * z * D; + s3 = -x * y * D; + + a1 = x * B; + a2 = y * B; + a3 = z * B; + + out[1] = s1 + a1; + out[3] = s1 - a1; + out[2] = s2 + a2; + out[6] = s2 - a2; + out[5] = s3 + a3; + out[7] = s3 - a3; + +} + +/* ---------------------------------------------------------------------- + out = vector^T x m, + m -- 3x3 matrix , v -- 3-d vector +------------------------------------------------------------------------- */ + +void MinSpinOSO_CG2::vm3(const double *m, const double *v, double *out) +{ + for(int i = 0; i < 3; i++){ + out[i] *= 0.0; + for(int j = 0; j < 3; j++) + out[i] += *(m + 3 * j + i) * v[j]; + } +} + + +void MinSpinOSO_CG2::make_step(double c, double *energy_and_der) +{ + double p_scaled[3]; + int nlocal = atom->nlocal; + double rot_mat[9]; // exponential of matrix made of search direction + double s_new[3]; + double **sp = atom->sp; + double der_e_cur_tmp = 0.0;; + + for (int i = 0; i < nlocal; i++) { + + // scale the search direction + + for (int j = 0; j < 3; j++) p_scaled[j] = c * p_s[3 * i + j]; + + // calculate rotation matrix + + rodrigues_rotation(p_scaled, rot_mat); + + // rotate spins + + vm3(rot_mat, sp[i], s_new); + for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; + } + + ecurrent = energy_force(0); + calc_gradient(); + neval++; + der_e_cur = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + der_e_cur += g_cur[i] * p_s[i]; + } + MPI_Allreduce(&der_e_cur,&der_e_cur_tmp,1,MPI_DOUBLE,MPI_SUM,world); + der_e_cur = der_e_cur_tmp; + if (update->multireplica == 1) { + MPI_Allreduce(&der_e_cur_tmp,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } + + energy_and_der[0] = ecurrent; + energy_and_der[1] = der_e_cur; +} + +/* ---------------------------------------------------------------------- + Calculate step length which satisfies approximate Wolfe conditions + using the cubic interpolation +------------------------------------------------------------------------- */ + +int MinSpinOSO_CG2::calc_and_make_step(double a, double b, int index) +{ + double e_and_d[2] = {0.0,0.0}; + double alpha,c1,c2,c3; + double **sp = atom->sp; + int nlocal = atom->nlocal; + + make_step(b,e_and_d); + ecurrent = e_and_d[0]; + der_e_cur = e_and_d[1]; + index++; + + if (awc(der_e_pr,eprevious,e_and_d[1],e_and_d[0]) || index == 10){ + MPI_Bcast(&b,1,MPI_DOUBLE,0,world); + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = b * p_s[i]; + } + return 1; + } + else{ + double r,f0,f1,df0,df1; + r = b - a; + f0 = eprevious; + f1 = ecurrent; + df0 = der_e_pr; + df1 = der_e_cur; + + c1 = -2.0*(f1-f0)/(r*r*r)+(df1+df0)/(r*r); + c2 = 3.0*(f1-f0)/(r*r)-(df1+2.0*df0)/(r); + c3 = df0; + + // f(x) = c1 x^3 + c2 x^2 + c3 x^1 + c4 + // has minimum at alpha below. We do not check boundaries. + + alpha = (-c2 + sqrt(c2*c2 - 3.0*c1*c3))/(3.0*c1); + MPI_Bcast(&alpha,1,MPI_DOUBLE,0,world); + + if (alpha < 0.0) alpha = r/2.0; + + std::cout << alpha << "\n"; + + for (int i = 0; i < nlocal; i++) { + for (int j = 0; j < 3; j++) sp[i][j] = sp_copy[i][j]; + } + calc_and_make_step(0.0, alpha, index); + } + + return 0; +} + +/* ---------------------------------------------------------------------- + Approximate Wolfe conditions: + William W. Hager and Hongchao Zhang + SIAM J. optim., 16(1), 170-192. (23 pages) +------------------------------------------------------------------------- */ + +int MinSpinOSO_CG2::awc(double der_phi_0, double phi_0, double der_phi_j, double phi_j){ + + double eps = 1.0e-6; + double delta = 0.1; + double sigma = 0.9; + + if ((phi_j<=phi_0+eps*fabs(phi_0)) && ((2.0*delta-1.0) * der_phi_0>=der_phi_j>=sigma*der_phi_0)) + return 1; + else + return 0; +} + +double MinSpinOSO_CG2::maximum_rotation(double *p) +{ + double norm2,norm2_global,scaling,alpha; + int nlocal = atom->nlocal; + int ntotal = 0; + + norm2 = 0.0; + for (int i = 0; i < 3 * nlocal; i++) norm2 += p[i] * p[i]; + + MPI_Allreduce(&norm2,&norm2_global,1,MPI_DOUBLE,MPI_SUM,world); + if (update->multireplica == 1) { + norm2 = norm2_global; + MPI_Allreduce(&norm2,&norm2_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } + MPI_Allreduce(&nlocal,&ntotal,1,MPI_INT,MPI_SUM,world); + if (update->multireplica == 1) { + nlocal = ntotal; + MPI_Allreduce(&nlocal,&ntotal,1,MPI_INT,MPI_SUM,universe->uworld); + } + + scaling = (maxepsrot * sqrt((double) ntotal / norm2_global)); + + if (scaling < 1.0) alpha = scaling; + else alpha = 1.0; + + return alpha; +} \ No newline at end of file diff --git a/src/SPIN/min_spin_oso_cg2.h b/src/SPIN/min_spin_oso_cg2.h new file mode 100644 index 0000000000..c96e82ca8e --- /dev/null +++ b/src/SPIN/min_spin_oso_cg2.h @@ -0,0 +1,68 @@ +/* -*- 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 MINIMIZE_CLASS + +MinimizeStyle(spin/oso_cg2, MinSpinOSO_CG2) + +#else + +#ifndef LMP_MIN_SPIN_OSO_CG2_H +#define LMP_MIN_SPIN_OSO_CG2_H + +#include "min.h" + +namespace LAMMPS_NS { + +class MinSpinOSO_CG2: public Min { + public: + MinSpinOSO_CG2(class LAMMPS *); + virtual ~MinSpinOSO_CG2(); + void init(); + void setup_style(); + int modify_param(int, char **); + void reset_vectors(); + int iterate(int); + private: + int ireplica,nreplica; // for neb + double *spvec; // variables for atomic dof, as 1d vector + double *fmvec; // variables for atomic dof, as 1d vector + double *g_cur; // current gradient vector + double *g_old; // gradient vector at previous step + double *p_s; // search direction vector + double **sp_copy; // copy of the spins + int local_iter; // for neb + int nlocal_max; // max value of nlocal (for size of lists) + + void advance_spins(); + void calc_gradient(); + void calc_search_direction(); + double maximum_rotation(double *); + void vm3(const double *, const double *, double *); + void rodrigues_rotation(const double *, double *); + int calc_and_make_step(double, double, int); + int awc(double, double, double, double); + void make_step(double, double *); + double max_torque(); + double der_e_cur; // current derivative along search dir. + double der_e_pr; // previous derivative along search dir. + int use_line_search; // use line search or not. + double maxepsrot; + + bigint last_negative; +}; + +} + +#endif +#endif From a96e6f220a9dcf26221121a969ee690f06ae2212 Mon Sep 17 00:00:00 2001 From: casievers Date: Fri, 19 Jul 2019 13:36:57 -0700 Subject: [PATCH 046/237] updated fix_langevin and made example --- examples/gjf/argon.lmp | 886 ++++++++++++++++++++++++++++++++++ examples/gjf/ff-argon.lmp | 20 + examples/gjf/in.argon | 162 +++++++ examples/gjf/out.argon | 249 ++++++++++ examples/gjf/trajectory.0.dcd | Bin 0 -> 439092 bytes src/fix_langevin.cpp | 272 +++++++++-- src/fix_langevin.h | 7 +- 7 files changed, 1550 insertions(+), 46 deletions(-) create mode 100644 examples/gjf/argon.lmp create mode 100644 examples/gjf/ff-argon.lmp create mode 100644 examples/gjf/in.argon create mode 100644 examples/gjf/out.argon create mode 100644 examples/gjf/trajectory.0.dcd diff --git a/examples/gjf/argon.lmp b/examples/gjf/argon.lmp new file mode 100644 index 0000000000..00214b4c54 --- /dev/null +++ b/examples/gjf/argon.lmp @@ -0,0 +1,886 @@ +LAMMPS description + + 864 atoms + 0 bonds + 0 angles + 0 dihedrals + 0 impropers + + 1 atom types + 0 bond types + 0 angle types + 0 dihedral types + 0 improper types + + + 0.0000000 32.146000 xlo xhi + 0.0000000 32.146000 ylo yhi + 0.0000000 32.146000 zlo zhi + + Atoms + + 1 1 1 0.0000000 0.0000000 2.6790000 2.6790000 + 2 2 1 0.0000000 0.0000000 2.6790000 8.0360000 + 3 3 1 0.0000000 0.0000000 2.6790000 13.3940000 + 4 4 1 0.0000000 0.0000000 2.6790000 18.7520000 + 5 5 1 0.0000000 0.0000000 2.6790000 24.1090000 + 6 6 1 0.0000000 0.0000000 2.6790000 29.4670000 + 7 7 1 0.0000000 0.0000000 8.0360000 2.6790000 + 8 8 1 0.0000000 0.0000000 8.0360000 8.0360000 + 9 9 1 0.0000000 0.0000000 8.0360000 13.3940000 + 10 10 1 0.0000000 0.0000000 8.0360000 18.7520000 + 11 11 1 0.0000000 0.0000000 8.0360000 24.1090000 + 12 12 1 0.0000000 0.0000000 8.0360000 29.4670000 + 13 13 1 0.0000000 0.0000000 13.3940000 2.6790000 + 14 14 1 0.0000000 0.0000000 13.3940000 8.0360000 + 15 15 1 0.0000000 0.0000000 13.3940000 13.3940000 + 16 16 1 0.0000000 0.0000000 13.3940000 18.7520000 + 17 17 1 0.0000000 0.0000000 13.3940000 24.1090000 + 18 18 1 0.0000000 0.0000000 13.3940000 29.4670000 + 19 19 1 0.0000000 0.0000000 18.7520000 2.6790000 + 20 20 1 0.0000000 0.0000000 18.7520000 8.0360000 + 21 21 1 0.0000000 0.0000000 18.7520000 13.3940000 + 22 22 1 0.0000000 0.0000000 18.7520000 18.7520000 + 23 23 1 0.0000000 0.0000000 18.7520000 24.1090000 + 24 24 1 0.0000000 0.0000000 18.7520000 29.4670000 + 25 25 1 0.0000000 0.0000000 24.1090000 2.6790000 + 26 26 1 0.0000000 0.0000000 24.1090000 8.0360000 + 27 27 1 0.0000000 0.0000000 24.1090000 13.3940000 + 28 28 1 0.0000000 0.0000000 24.1090000 18.7520000 + 29 29 1 0.0000000 0.0000000 24.1090000 24.1090000 + 30 30 1 0.0000000 0.0000000 24.1090000 29.4670000 + 31 31 1 0.0000000 0.0000000 29.4670000 2.6790000 + 32 32 1 0.0000000 0.0000000 29.4670000 8.0360000 + 33 33 1 0.0000000 0.0000000 29.4670000 13.3940000 + 34 34 1 0.0000000 0.0000000 29.4670000 18.7520000 + 35 35 1 0.0000000 0.0000000 29.4670000 24.1090000 + 36 36 1 0.0000000 0.0000000 29.4670000 29.4670000 + 37 37 1 0.0000000 5.3580000 2.6790000 2.6790000 + 38 38 1 0.0000000 5.3580000 2.6790000 8.0360000 + 39 39 1 0.0000000 5.3580000 2.6790000 13.3940000 + 40 40 1 0.0000000 5.3580000 2.6790000 18.7520000 + 41 41 1 0.0000000 5.3580000 2.6790000 24.1090000 + 42 42 1 0.0000000 5.3580000 2.6790000 29.4670000 + 43 43 1 0.0000000 5.3580000 8.0360000 2.6790000 + 44 44 1 0.0000000 5.3580000 8.0360000 8.0360000 + 45 45 1 0.0000000 5.3580000 8.0360000 13.3940000 + 46 46 1 0.0000000 5.3580000 8.0360000 18.7520000 + 47 47 1 0.0000000 5.3580000 8.0360000 24.1090000 + 48 48 1 0.0000000 5.3580000 8.0360000 29.4670000 + 49 49 1 0.0000000 5.3580000 13.3940000 2.6790000 + 50 50 1 0.0000000 5.3580000 13.3940000 8.0360000 + 51 51 1 0.0000000 5.3580000 13.3940000 13.3940000 + 52 52 1 0.0000000 5.3580000 13.3940000 18.7520000 + 53 53 1 0.0000000 5.3580000 13.3940000 24.1090000 + 54 54 1 0.0000000 5.3580000 13.3940000 29.4670000 + 55 55 1 0.0000000 5.3580000 18.7520000 2.6790000 + 56 56 1 0.0000000 5.3580000 18.7520000 8.0360000 + 57 57 1 0.0000000 5.3580000 18.7520000 13.3940000 + 58 58 1 0.0000000 5.3580000 18.7520000 18.7520000 + 59 59 1 0.0000000 5.3580000 18.7520000 24.1090000 + 60 60 1 0.0000000 5.3580000 18.7520000 29.4670000 + 61 61 1 0.0000000 5.3580000 24.1090000 2.6790000 + 62 62 1 0.0000000 5.3580000 24.1090000 8.0360000 + 63 63 1 0.0000000 5.3580000 24.1090000 13.3940000 + 64 64 1 0.0000000 5.3580000 24.1090000 18.7520000 + 65 65 1 0.0000000 5.3580000 24.1090000 24.1090000 + 66 66 1 0.0000000 5.3580000 24.1090000 29.4670000 + 67 67 1 0.0000000 5.3580000 29.4670000 2.6790000 + 68 68 1 0.0000000 5.3580000 29.4670000 8.0360000 + 69 69 1 0.0000000 5.3580000 29.4670000 13.3940000 + 70 70 1 0.0000000 5.3580000 29.4670000 18.7520000 + 71 71 1 0.0000000 5.3580000 29.4670000 24.1090000 + 72 72 1 0.0000000 5.3580000 29.4670000 29.4670000 + 73 73 1 0.0000000 10.7150000 2.6790000 2.6790000 + 74 74 1 0.0000000 10.7150000 2.6790000 8.0360000 + 75 75 1 0.0000000 10.7150000 2.6790000 13.3940000 + 76 76 1 0.0000000 10.7150000 2.6790000 18.7520000 + 77 77 1 0.0000000 10.7150000 2.6790000 24.1090000 + 78 78 1 0.0000000 10.7150000 2.6790000 29.4670000 + 79 79 1 0.0000000 10.7150000 8.0360000 2.6790000 + 80 80 1 0.0000000 10.7150000 8.0360000 8.0360000 + 81 81 1 0.0000000 10.7150000 8.0360000 13.3940000 + 82 82 1 0.0000000 10.7150000 8.0360000 18.7520000 + 83 83 1 0.0000000 10.7150000 8.0360000 24.1090000 + 84 84 1 0.0000000 10.7150000 8.0360000 29.4670000 + 85 85 1 0.0000000 10.7150000 13.3940000 2.6790000 + 86 86 1 0.0000000 10.7150000 13.3940000 8.0360000 + 87 87 1 0.0000000 10.7150000 13.3940000 13.3940000 + 88 88 1 0.0000000 10.7150000 13.3940000 18.7520000 + 89 89 1 0.0000000 10.7150000 13.3940000 24.1090000 + 90 90 1 0.0000000 10.7150000 13.3940000 29.4670000 + 91 91 1 0.0000000 10.7150000 18.7520000 2.6790000 + 92 92 1 0.0000000 10.7150000 18.7520000 8.0360000 + 93 93 1 0.0000000 10.7150000 18.7520000 13.3940000 + 94 94 1 0.0000000 10.7150000 18.7520000 18.7520000 + 95 95 1 0.0000000 10.7150000 18.7520000 24.1090000 + 96 96 1 0.0000000 10.7150000 18.7520000 29.4670000 + 97 97 1 0.0000000 10.7150000 24.1090000 2.6790000 + 98 98 1 0.0000000 10.7150000 24.1090000 8.0360000 + 99 99 1 0.0000000 10.7150000 24.1090000 13.3940000 + 100 100 1 0.0000000 10.7150000 24.1090000 18.7520000 + 101 101 1 0.0000000 10.7150000 24.1090000 24.1090000 + 102 102 1 0.0000000 10.7150000 24.1090000 29.4670000 + 103 103 1 0.0000000 10.7150000 29.4670000 2.6790000 + 104 104 1 0.0000000 10.7150000 29.4670000 8.0360000 + 105 105 1 0.0000000 10.7150000 29.4670000 13.3940000 + 106 106 1 0.0000000 10.7150000 29.4670000 18.7520000 + 107 107 1 0.0000000 10.7150000 29.4670000 24.1090000 + 108 108 1 0.0000000 10.7150000 29.4670000 29.4670000 + 109 109 1 0.0000000 16.0730000 2.6790000 2.6790000 + 110 110 1 0.0000000 16.0730000 2.6790000 8.0360000 + 111 111 1 0.0000000 16.0730000 2.6790000 13.3940000 + 112 112 1 0.0000000 16.0730000 2.6790000 18.7520000 + 113 113 1 0.0000000 16.0730000 2.6790000 24.1090000 + 114 114 1 0.0000000 16.0730000 2.6790000 29.4670000 + 115 115 1 0.0000000 16.0730000 8.0360000 2.6790000 + 116 116 1 0.0000000 16.0730000 8.0360000 8.0360000 + 117 117 1 0.0000000 16.0730000 8.0360000 13.3940000 + 118 118 1 0.0000000 16.0730000 8.0360000 18.7520000 + 119 119 1 0.0000000 16.0730000 8.0360000 24.1090000 + 120 120 1 0.0000000 16.0730000 8.0360000 29.4670000 + 121 121 1 0.0000000 16.0730000 13.3940000 2.6790000 + 122 122 1 0.0000000 16.0730000 13.3940000 8.0360000 + 123 123 1 0.0000000 16.0730000 13.3940000 13.3940000 + 124 124 1 0.0000000 16.0730000 13.3940000 18.7520000 + 125 125 1 0.0000000 16.0730000 13.3940000 24.1090000 + 126 126 1 0.0000000 16.0730000 13.3940000 29.4670000 + 127 127 1 0.0000000 16.0730000 18.7520000 2.6790000 + 128 128 1 0.0000000 16.0730000 18.7520000 8.0360000 + 129 129 1 0.0000000 16.0730000 18.7520000 13.3940000 + 130 130 1 0.0000000 16.0730000 18.7520000 18.7520000 + 131 131 1 0.0000000 16.0730000 18.7520000 24.1090000 + 132 132 1 0.0000000 16.0730000 18.7520000 29.4670000 + 133 133 1 0.0000000 16.0730000 24.1090000 2.6790000 + 134 134 1 0.0000000 16.0730000 24.1090000 8.0360000 + 135 135 1 0.0000000 16.0730000 24.1090000 13.3940000 + 136 136 1 0.0000000 16.0730000 24.1090000 18.7520000 + 137 137 1 0.0000000 16.0730000 24.1090000 24.1090000 + 138 138 1 0.0000000 16.0730000 24.1090000 29.4670000 + 139 139 1 0.0000000 16.0730000 29.4670000 2.6790000 + 140 140 1 0.0000000 16.0730000 29.4670000 8.0360000 + 141 141 1 0.0000000 16.0730000 29.4670000 13.3940000 + 142 142 1 0.0000000 16.0730000 29.4670000 18.7520000 + 143 143 1 0.0000000 16.0730000 29.4670000 24.1090000 + 144 144 1 0.0000000 16.0730000 29.4670000 29.4670000 + 145 145 1 0.0000000 21.4310000 2.6790000 2.6790000 + 146 146 1 0.0000000 21.4310000 2.6790000 8.0360000 + 147 147 1 0.0000000 21.4310000 2.6790000 13.3940000 + 148 148 1 0.0000000 21.4310000 2.6790000 18.7520000 + 149 149 1 0.0000000 21.4310000 2.6790000 24.1090000 + 150 150 1 0.0000000 21.4310000 2.6790000 29.4670000 + 151 151 1 0.0000000 21.4310000 8.0360000 2.6790000 + 152 152 1 0.0000000 21.4310000 8.0360000 8.0360000 + 153 153 1 0.0000000 21.4310000 8.0360000 13.3940000 + 154 154 1 0.0000000 21.4310000 8.0360000 18.7520000 + 155 155 1 0.0000000 21.4310000 8.0360000 24.1090000 + 156 156 1 0.0000000 21.4310000 8.0360000 29.4670000 + 157 157 1 0.0000000 21.4310000 13.3940000 2.6790000 + 158 158 1 0.0000000 21.4310000 13.3940000 8.0360000 + 159 159 1 0.0000000 21.4310000 13.3940000 13.3940000 + 160 160 1 0.0000000 21.4310000 13.3940000 18.7520000 + 161 161 1 0.0000000 21.4310000 13.3940000 24.1090000 + 162 162 1 0.0000000 21.4310000 13.3940000 29.4670000 + 163 163 1 0.0000000 21.4310000 18.7520000 2.6790000 + 164 164 1 0.0000000 21.4310000 18.7520000 8.0360000 + 165 165 1 0.0000000 21.4310000 18.7520000 13.3940000 + 166 166 1 0.0000000 21.4310000 18.7520000 18.7520000 + 167 167 1 0.0000000 21.4310000 18.7520000 24.1090000 + 168 168 1 0.0000000 21.4310000 18.7520000 29.4670000 + 169 169 1 0.0000000 21.4310000 24.1090000 2.6790000 + 170 170 1 0.0000000 21.4310000 24.1090000 8.0360000 + 171 171 1 0.0000000 21.4310000 24.1090000 13.3940000 + 172 172 1 0.0000000 21.4310000 24.1090000 18.7520000 + 173 173 1 0.0000000 21.4310000 24.1090000 24.1090000 + 174 174 1 0.0000000 21.4310000 24.1090000 29.4670000 + 175 175 1 0.0000000 21.4310000 29.4670000 2.6790000 + 176 176 1 0.0000000 21.4310000 29.4670000 8.0360000 + 177 177 1 0.0000000 21.4310000 29.4670000 13.3940000 + 178 178 1 0.0000000 21.4310000 29.4670000 18.7520000 + 179 179 1 0.0000000 21.4310000 29.4670000 24.1090000 + 180 180 1 0.0000000 21.4310000 29.4670000 29.4670000 + 181 181 1 0.0000000 26.7880000 2.6790000 2.6790000 + 182 182 1 0.0000000 26.7880000 2.6790000 8.0360000 + 183 183 1 0.0000000 26.7880000 2.6790000 13.3940000 + 184 184 1 0.0000000 26.7880000 2.6790000 18.7520000 + 185 185 1 0.0000000 26.7880000 2.6790000 24.1090000 + 186 186 1 0.0000000 26.7880000 2.6790000 29.4670000 + 187 187 1 0.0000000 26.7880000 8.0360000 2.6790000 + 188 188 1 0.0000000 26.7880000 8.0360000 8.0360000 + 189 189 1 0.0000000 26.7880000 8.0360000 13.3940000 + 190 190 1 0.0000000 26.7880000 8.0360000 18.7520000 + 191 191 1 0.0000000 26.7880000 8.0360000 24.1090000 + 192 192 1 0.0000000 26.7880000 8.0360000 29.4670000 + 193 193 1 0.0000000 26.7880000 13.3940000 2.6790000 + 194 194 1 0.0000000 26.7880000 13.3940000 8.0360000 + 195 195 1 0.0000000 26.7880000 13.3940000 13.3940000 + 196 196 1 0.0000000 26.7880000 13.3940000 18.7520000 + 197 197 1 0.0000000 26.7880000 13.3940000 24.1090000 + 198 198 1 0.0000000 26.7880000 13.3940000 29.4670000 + 199 199 1 0.0000000 26.7880000 18.7520000 2.6790000 + 200 200 1 0.0000000 26.7880000 18.7520000 8.0360000 + 201 201 1 0.0000000 26.7880000 18.7520000 13.3940000 + 202 202 1 0.0000000 26.7880000 18.7520000 18.7520000 + 203 203 1 0.0000000 26.7880000 18.7520000 24.1090000 + 204 204 1 0.0000000 26.7880000 18.7520000 29.4670000 + 205 205 1 0.0000000 26.7880000 24.1090000 2.6790000 + 206 206 1 0.0000000 26.7880000 24.1090000 8.0360000 + 207 207 1 0.0000000 26.7880000 24.1090000 13.3940000 + 208 208 1 0.0000000 26.7880000 24.1090000 18.7520000 + 209 209 1 0.0000000 26.7880000 24.1090000 24.1090000 + 210 210 1 0.0000000 26.7880000 24.1090000 29.4670000 + 211 211 1 0.0000000 26.7880000 29.4670000 2.6790000 + 212 212 1 0.0000000 26.7880000 29.4670000 8.0360000 + 213 213 1 0.0000000 26.7880000 29.4670000 13.3940000 + 214 214 1 0.0000000 26.7880000 29.4670000 18.7520000 + 215 215 1 0.0000000 26.7880000 29.4670000 24.1090000 + 216 216 1 0.0000000 26.7880000 29.4670000 29.4670000 + 217 217 1 0.0000000 2.6790000 5.3580000 2.6790000 + 218 218 1 0.0000000 2.6790000 5.3580000 8.0360000 + 219 219 1 0.0000000 2.6790000 5.3580000 13.3940000 + 220 220 1 0.0000000 2.6790000 5.3580000 18.7520000 + 221 221 1 0.0000000 2.6790000 5.3580000 24.1090000 + 222 222 1 0.0000000 2.6790000 5.3580000 29.4670000 + 223 223 1 0.0000000 2.6790000 10.7150000 2.6790000 + 224 224 1 0.0000000 2.6790000 10.7150000 8.0360000 + 225 225 1 0.0000000 2.6790000 10.7150000 13.3940000 + 226 226 1 0.0000000 2.6790000 10.7150000 18.7520000 + 227 227 1 0.0000000 2.6790000 10.7150000 24.1090000 + 228 228 1 0.0000000 2.6790000 10.7150000 29.4670000 + 229 229 1 0.0000000 2.6790000 16.0730000 2.6790000 + 230 230 1 0.0000000 2.6790000 16.0730000 8.0360000 + 231 231 1 0.0000000 2.6790000 16.0730000 13.3940000 + 232 232 1 0.0000000 2.6790000 16.0730000 18.7520000 + 233 233 1 0.0000000 2.6790000 16.0730000 24.1090000 + 234 234 1 0.0000000 2.6790000 16.0730000 29.4670000 + 235 235 1 0.0000000 2.6790000 21.4310000 2.6790000 + 236 236 1 0.0000000 2.6790000 21.4310000 8.0360000 + 237 237 1 0.0000000 2.6790000 21.4310000 13.3940000 + 238 238 1 0.0000000 2.6790000 21.4310000 18.7520000 + 239 239 1 0.0000000 2.6790000 21.4310000 24.1090000 + 240 240 1 0.0000000 2.6790000 21.4310000 29.4670000 + 241 241 1 0.0000000 2.6790000 26.7880000 2.6790000 + 242 242 1 0.0000000 2.6790000 26.7880000 8.0360000 + 243 243 1 0.0000000 2.6790000 26.7880000 13.3940000 + 244 244 1 0.0000000 2.6790000 26.7880000 18.7520000 + 245 245 1 0.0000000 2.6790000 26.7880000 24.1090000 + 246 246 1 0.0000000 2.6790000 26.7880000 29.4670000 + 247 247 1 0.0000000 2.6790000 32.1460000 2.6790000 + 248 248 1 0.0000000 2.6790000 32.1460000 8.0360000 + 249 249 1 0.0000000 2.6790000 32.1460000 13.3940000 + 250 250 1 0.0000000 2.6790000 32.1460000 18.7520000 + 251 251 1 0.0000000 2.6790000 32.1460000 24.1090000 + 252 252 1 0.0000000 2.6790000 32.1460000 29.4670000 + 253 253 1 0.0000000 8.0360000 5.3580000 2.6790000 + 254 254 1 0.0000000 8.0360000 5.3580000 8.0360000 + 255 255 1 0.0000000 8.0360000 5.3580000 13.3940000 + 256 256 1 0.0000000 8.0360000 5.3580000 18.7520000 + 257 257 1 0.0000000 8.0360000 5.3580000 24.1090000 + 258 258 1 0.0000000 8.0360000 5.3580000 29.4670000 + 259 259 1 0.0000000 8.0360000 10.7150000 2.6790000 + 260 260 1 0.0000000 8.0360000 10.7150000 8.0360000 + 261 261 1 0.0000000 8.0360000 10.7150000 13.3940000 + 262 262 1 0.0000000 8.0360000 10.7150000 18.7520000 + 263 263 1 0.0000000 8.0360000 10.7150000 24.1090000 + 264 264 1 0.0000000 8.0360000 10.7150000 29.4670000 + 265 265 1 0.0000000 8.0360000 16.0730000 2.6790000 + 266 266 1 0.0000000 8.0360000 16.0730000 8.0360000 + 267 267 1 0.0000000 8.0360000 16.0730000 13.3940000 + 268 268 1 0.0000000 8.0360000 16.0730000 18.7520000 + 269 269 1 0.0000000 8.0360000 16.0730000 24.1090000 + 270 270 1 0.0000000 8.0360000 16.0730000 29.4670000 + 271 271 1 0.0000000 8.0360000 21.4310000 2.6790000 + 272 272 1 0.0000000 8.0360000 21.4310000 8.0360000 + 273 273 1 0.0000000 8.0360000 21.4310000 13.3940000 + 274 274 1 0.0000000 8.0360000 21.4310000 18.7520000 + 275 275 1 0.0000000 8.0360000 21.4310000 24.1090000 + 276 276 1 0.0000000 8.0360000 21.4310000 29.4670000 + 277 277 1 0.0000000 8.0360000 26.7880000 2.6790000 + 278 278 1 0.0000000 8.0360000 26.7880000 8.0360000 + 279 279 1 0.0000000 8.0360000 26.7880000 13.3940000 + 280 280 1 0.0000000 8.0360000 26.7880000 18.7520000 + 281 281 1 0.0000000 8.0360000 26.7880000 24.1090000 + 282 282 1 0.0000000 8.0360000 26.7880000 29.4670000 + 283 283 1 0.0000000 8.0360000 32.1460000 2.6790000 + 284 284 1 0.0000000 8.0360000 32.1460000 8.0360000 + 285 285 1 0.0000000 8.0360000 32.1460000 13.3940000 + 286 286 1 0.0000000 8.0360000 32.1460000 18.7520000 + 287 287 1 0.0000000 8.0360000 32.1460000 24.1090000 + 288 288 1 0.0000000 8.0360000 32.1460000 29.4670000 + 289 289 1 0.0000000 13.3940000 5.3580000 2.6790000 + 290 290 1 0.0000000 13.3940000 5.3580000 8.0360000 + 291 291 1 0.0000000 13.3940000 5.3580000 13.3940000 + 292 292 1 0.0000000 13.3940000 5.3580000 18.7520000 + 293 293 1 0.0000000 13.3940000 5.3580000 24.1090000 + 294 294 1 0.0000000 13.3940000 5.3580000 29.4670000 + 295 295 1 0.0000000 13.3940000 10.7150000 2.6790000 + 296 296 1 0.0000000 13.3940000 10.7150000 8.0360000 + 297 297 1 0.0000000 13.3940000 10.7150000 13.3940000 + 298 298 1 0.0000000 13.3940000 10.7150000 18.7520000 + 299 299 1 0.0000000 13.3940000 10.7150000 24.1090000 + 300 300 1 0.0000000 13.3940000 10.7150000 29.4670000 + 301 301 1 0.0000000 13.3940000 16.0730000 2.6790000 + 302 302 1 0.0000000 13.3940000 16.0730000 8.0360000 + 303 303 1 0.0000000 13.3940000 16.0730000 13.3940000 + 304 304 1 0.0000000 13.3940000 16.0730000 18.7520000 + 305 305 1 0.0000000 13.3940000 16.0730000 24.1090000 + 306 306 1 0.0000000 13.3940000 16.0730000 29.4670000 + 307 307 1 0.0000000 13.3940000 21.4310000 2.6790000 + 308 308 1 0.0000000 13.3940000 21.4310000 8.0360000 + 309 309 1 0.0000000 13.3940000 21.4310000 13.3940000 + 310 310 1 0.0000000 13.3940000 21.4310000 18.7520000 + 311 311 1 0.0000000 13.3940000 21.4310000 24.1090000 + 312 312 1 0.0000000 13.3940000 21.4310000 29.4670000 + 313 313 1 0.0000000 13.3940000 26.7880000 2.6790000 + 314 314 1 0.0000000 13.3940000 26.7880000 8.0360000 + 315 315 1 0.0000000 13.3940000 26.7880000 13.3940000 + 316 316 1 0.0000000 13.3940000 26.7880000 18.7520000 + 317 317 1 0.0000000 13.3940000 26.7880000 24.1090000 + 318 318 1 0.0000000 13.3940000 26.7880000 29.4670000 + 319 319 1 0.0000000 13.3940000 32.1460000 2.6790000 + 320 320 1 0.0000000 13.3940000 32.1460000 8.0360000 + 321 321 1 0.0000000 13.3940000 32.1460000 13.3940000 + 322 322 1 0.0000000 13.3940000 32.1460000 18.7520000 + 323 323 1 0.0000000 13.3940000 32.1460000 24.1090000 + 324 324 1 0.0000000 13.3940000 32.1460000 29.4670000 + 325 325 1 0.0000000 18.7520000 5.3580000 2.6790000 + 326 326 1 0.0000000 18.7520000 5.3580000 8.0360000 + 327 327 1 0.0000000 18.7520000 5.3580000 13.3940000 + 328 328 1 0.0000000 18.7520000 5.3580000 18.7520000 + 329 329 1 0.0000000 18.7520000 5.3580000 24.1090000 + 330 330 1 0.0000000 18.7520000 5.3580000 29.4670000 + 331 331 1 0.0000000 18.7520000 10.7150000 2.6790000 + 332 332 1 0.0000000 18.7520000 10.7150000 8.0360000 + 333 333 1 0.0000000 18.7520000 10.7150000 13.3940000 + 334 334 1 0.0000000 18.7520000 10.7150000 18.7520000 + 335 335 1 0.0000000 18.7520000 10.7150000 24.1090000 + 336 336 1 0.0000000 18.7520000 10.7150000 29.4670000 + 337 337 1 0.0000000 18.7520000 16.0730000 2.6790000 + 338 338 1 0.0000000 18.7520000 16.0730000 8.0360000 + 339 339 1 0.0000000 18.7520000 16.0730000 13.3940000 + 340 340 1 0.0000000 18.7520000 16.0730000 18.7520000 + 341 341 1 0.0000000 18.7520000 16.0730000 24.1090000 + 342 342 1 0.0000000 18.7520000 16.0730000 29.4670000 + 343 343 1 0.0000000 18.7520000 21.4310000 2.6790000 + 344 344 1 0.0000000 18.7520000 21.4310000 8.0360000 + 345 345 1 0.0000000 18.7520000 21.4310000 13.3940000 + 346 346 1 0.0000000 18.7520000 21.4310000 18.7520000 + 347 347 1 0.0000000 18.7520000 21.4310000 24.1090000 + 348 348 1 0.0000000 18.7520000 21.4310000 29.4670000 + 349 349 1 0.0000000 18.7520000 26.7880000 2.6790000 + 350 350 1 0.0000000 18.7520000 26.7880000 8.0360000 + 351 351 1 0.0000000 18.7520000 26.7880000 13.3940000 + 352 352 1 0.0000000 18.7520000 26.7880000 18.7520000 + 353 353 1 0.0000000 18.7520000 26.7880000 24.1090000 + 354 354 1 0.0000000 18.7520000 26.7880000 29.4670000 + 355 355 1 0.0000000 18.7520000 32.1460000 2.6790000 + 356 356 1 0.0000000 18.7520000 32.1460000 8.0360000 + 357 357 1 0.0000000 18.7520000 32.1460000 13.3940000 + 358 358 1 0.0000000 18.7520000 32.1460000 18.7520000 + 359 359 1 0.0000000 18.7520000 32.1460000 24.1090000 + 360 360 1 0.0000000 18.7520000 32.1460000 29.4670000 + 361 361 1 0.0000000 24.1090000 5.3580000 2.6790000 + 362 362 1 0.0000000 24.1090000 5.3580000 8.0360000 + 363 363 1 0.0000000 24.1090000 5.3580000 13.3940000 + 364 364 1 0.0000000 24.1090000 5.3580000 18.7520000 + 365 365 1 0.0000000 24.1090000 5.3580000 24.1090000 + 366 366 1 0.0000000 24.1090000 5.3580000 29.4670000 + 367 367 1 0.0000000 24.1090000 10.7150000 2.6790000 + 368 368 1 0.0000000 24.1090000 10.7150000 8.0360000 + 369 369 1 0.0000000 24.1090000 10.7150000 13.3940000 + 370 370 1 0.0000000 24.1090000 10.7150000 18.7520000 + 371 371 1 0.0000000 24.1090000 10.7150000 24.1090000 + 372 372 1 0.0000000 24.1090000 10.7150000 29.4670000 + 373 373 1 0.0000000 24.1090000 16.0730000 2.6790000 + 374 374 1 0.0000000 24.1090000 16.0730000 8.0360000 + 375 375 1 0.0000000 24.1090000 16.0730000 13.3940000 + 376 376 1 0.0000000 24.1090000 16.0730000 18.7520000 + 377 377 1 0.0000000 24.1090000 16.0730000 24.1090000 + 378 378 1 0.0000000 24.1090000 16.0730000 29.4670000 + 379 379 1 0.0000000 24.1090000 21.4310000 2.6790000 + 380 380 1 0.0000000 24.1090000 21.4310000 8.0360000 + 381 381 1 0.0000000 24.1090000 21.4310000 13.3940000 + 382 382 1 0.0000000 24.1090000 21.4310000 18.7520000 + 383 383 1 0.0000000 24.1090000 21.4310000 24.1090000 + 384 384 1 0.0000000 24.1090000 21.4310000 29.4670000 + 385 385 1 0.0000000 24.1090000 26.7880000 2.6790000 + 386 386 1 0.0000000 24.1090000 26.7880000 8.0360000 + 387 387 1 0.0000000 24.1090000 26.7880000 13.3940000 + 388 388 1 0.0000000 24.1090000 26.7880000 18.7520000 + 389 389 1 0.0000000 24.1090000 26.7880000 24.1090000 + 390 390 1 0.0000000 24.1090000 26.7880000 29.4670000 + 391 391 1 0.0000000 24.1090000 32.1460000 2.6790000 + 392 392 1 0.0000000 24.1090000 32.1460000 8.0360000 + 393 393 1 0.0000000 24.1090000 32.1460000 13.3940000 + 394 394 1 0.0000000 24.1090000 32.1460000 18.7520000 + 395 395 1 0.0000000 24.1090000 32.1460000 24.1090000 + 396 396 1 0.0000000 24.1090000 32.1460000 29.4670000 + 397 397 1 0.0000000 29.4670000 5.3580000 2.6790000 + 398 398 1 0.0000000 29.4670000 5.3580000 8.0360000 + 399 399 1 0.0000000 29.4670000 5.3580000 13.3940000 + 400 400 1 0.0000000 29.4670000 5.3580000 18.7520000 + 401 401 1 0.0000000 29.4670000 5.3580000 24.1090000 + 402 402 1 0.0000000 29.4670000 5.3580000 29.4670000 + 403 403 1 0.0000000 29.4670000 10.7150000 2.6790000 + 404 404 1 0.0000000 29.4670000 10.7150000 8.0360000 + 405 405 1 0.0000000 29.4670000 10.7150000 13.3940000 + 406 406 1 0.0000000 29.4670000 10.7150000 18.7520000 + 407 407 1 0.0000000 29.4670000 10.7150000 24.1090000 + 408 408 1 0.0000000 29.4670000 10.7150000 29.4670000 + 409 409 1 0.0000000 29.4670000 16.0730000 2.6790000 + 410 410 1 0.0000000 29.4670000 16.0730000 8.0360000 + 411 411 1 0.0000000 29.4670000 16.0730000 13.3940000 + 412 412 1 0.0000000 29.4670000 16.0730000 18.7520000 + 413 413 1 0.0000000 29.4670000 16.0730000 24.1090000 + 414 414 1 0.0000000 29.4670000 16.0730000 29.4670000 + 415 415 1 0.0000000 29.4670000 21.4310000 2.6790000 + 416 416 1 0.0000000 29.4670000 21.4310000 8.0360000 + 417 417 1 0.0000000 29.4670000 21.4310000 13.3940000 + 418 418 1 0.0000000 29.4670000 21.4310000 18.7520000 + 419 419 1 0.0000000 29.4670000 21.4310000 24.1090000 + 420 420 1 0.0000000 29.4670000 21.4310000 29.4670000 + 421 421 1 0.0000000 29.4670000 26.7880000 2.6790000 + 422 422 1 0.0000000 29.4670000 26.7880000 8.0360000 + 423 423 1 0.0000000 29.4670000 26.7880000 13.3940000 + 424 424 1 0.0000000 29.4670000 26.7880000 18.7520000 + 425 425 1 0.0000000 29.4670000 26.7880000 24.1090000 + 426 426 1 0.0000000 29.4670000 26.7880000 29.4670000 + 427 427 1 0.0000000 29.4670000 32.1460000 2.6790000 + 428 428 1 0.0000000 29.4670000 32.1460000 8.0360000 + 429 429 1 0.0000000 29.4670000 32.1460000 13.3940000 + 430 430 1 0.0000000 29.4670000 32.1460000 18.7520000 + 431 431 1 0.0000000 29.4670000 32.1460000 24.1090000 + 432 432 1 0.0000000 29.4670000 32.1460000 29.4670000 + 433 433 1 0.0000000 2.6790000 2.6790000 5.3580000 + 434 434 1 0.0000000 2.6790000 2.6790000 10.7150000 + 435 435 1 0.0000000 2.6790000 2.6790000 16.0730000 + 436 436 1 0.0000000 2.6790000 2.6790000 21.4310000 + 437 437 1 0.0000000 2.6790000 2.6790000 26.7880000 + 438 438 1 0.0000000 2.6790000 2.6790000 32.1460000 + 439 439 1 0.0000000 2.6790000 8.0360000 5.3580000 + 440 440 1 0.0000000 2.6790000 8.0360000 10.7150000 + 441 441 1 0.0000000 2.6790000 8.0360000 16.0730000 + 442 442 1 0.0000000 2.6790000 8.0360000 21.4310000 + 443 443 1 0.0000000 2.6790000 8.0360000 26.7880000 + 444 444 1 0.0000000 2.6790000 8.0360000 32.1460000 + 445 445 1 0.0000000 2.6790000 13.3940000 5.3580000 + 446 446 1 0.0000000 2.6790000 13.3940000 10.7150000 + 447 447 1 0.0000000 2.6790000 13.3940000 16.0730000 + 448 448 1 0.0000000 2.6790000 13.3940000 21.4310000 + 449 449 1 0.0000000 2.6790000 13.3940000 26.7880000 + 450 450 1 0.0000000 2.6790000 13.3940000 32.1460000 + 451 451 1 0.0000000 2.6790000 18.7520000 5.3580000 + 452 452 1 0.0000000 2.6790000 18.7520000 10.7150000 + 453 453 1 0.0000000 2.6790000 18.7520000 16.0730000 + 454 454 1 0.0000000 2.6790000 18.7520000 21.4310000 + 455 455 1 0.0000000 2.6790000 18.7520000 26.7880000 + 456 456 1 0.0000000 2.6790000 18.7520000 32.1460000 + 457 457 1 0.0000000 2.6790000 24.1090000 5.3580000 + 458 458 1 0.0000000 2.6790000 24.1090000 10.7150000 + 459 459 1 0.0000000 2.6790000 24.1090000 16.0730000 + 460 460 1 0.0000000 2.6790000 24.1090000 21.4310000 + 461 461 1 0.0000000 2.6790000 24.1090000 26.7880000 + 462 462 1 0.0000000 2.6790000 24.1090000 32.1460000 + 463 463 1 0.0000000 2.6790000 29.4670000 5.3580000 + 464 464 1 0.0000000 2.6790000 29.4670000 10.7150000 + 465 465 1 0.0000000 2.6790000 29.4670000 16.0730000 + 466 466 1 0.0000000 2.6790000 29.4670000 21.4310000 + 467 467 1 0.0000000 2.6790000 29.4670000 26.7880000 + 468 468 1 0.0000000 2.6790000 29.4670000 32.1460000 + 469 469 1 0.0000000 8.0360000 2.6790000 5.3580000 + 470 470 1 0.0000000 8.0360000 2.6790000 10.7150000 + 471 471 1 0.0000000 8.0360000 2.6790000 16.0730000 + 472 472 1 0.0000000 8.0360000 2.6790000 21.4310000 + 473 473 1 0.0000000 8.0360000 2.6790000 26.7880000 + 474 474 1 0.0000000 8.0360000 2.6790000 32.1460000 + 475 475 1 0.0000000 8.0360000 8.0360000 5.3580000 + 476 476 1 0.0000000 8.0360000 8.0360000 10.7150000 + 477 477 1 0.0000000 8.0360000 8.0360000 16.0730000 + 478 478 1 0.0000000 8.0360000 8.0360000 21.4310000 + 479 479 1 0.0000000 8.0360000 8.0360000 26.7880000 + 480 480 1 0.0000000 8.0360000 8.0360000 32.1460000 + 481 481 1 0.0000000 8.0360000 13.3940000 5.3580000 + 482 482 1 0.0000000 8.0360000 13.3940000 10.7150000 + 483 483 1 0.0000000 8.0360000 13.3940000 16.0730000 + 484 484 1 0.0000000 8.0360000 13.3940000 21.4310000 + 485 485 1 0.0000000 8.0360000 13.3940000 26.7880000 + 486 486 1 0.0000000 8.0360000 13.3940000 32.1460000 + 487 487 1 0.0000000 8.0360000 18.7520000 5.3580000 + 488 488 1 0.0000000 8.0360000 18.7520000 10.7150000 + 489 489 1 0.0000000 8.0360000 18.7520000 16.0730000 + 490 490 1 0.0000000 8.0360000 18.7520000 21.4310000 + 491 491 1 0.0000000 8.0360000 18.7520000 26.7880000 + 492 492 1 0.0000000 8.0360000 18.7520000 32.1460000 + 493 493 1 0.0000000 8.0360000 24.1090000 5.3580000 + 494 494 1 0.0000000 8.0360000 24.1090000 10.7150000 + 495 495 1 0.0000000 8.0360000 24.1090000 16.0730000 + 496 496 1 0.0000000 8.0360000 24.1090000 21.4310000 + 497 497 1 0.0000000 8.0360000 24.1090000 26.7880000 + 498 498 1 0.0000000 8.0360000 24.1090000 32.1460000 + 499 499 1 0.0000000 8.0360000 29.4670000 5.3580000 + 500 500 1 0.0000000 8.0360000 29.4670000 10.7150000 + 501 501 1 0.0000000 8.0360000 29.4670000 16.0730000 + 502 502 1 0.0000000 8.0360000 29.4670000 21.4310000 + 503 503 1 0.0000000 8.0360000 29.4670000 26.7880000 + 504 504 1 0.0000000 8.0360000 29.4670000 32.1460000 + 505 505 1 0.0000000 13.3940000 2.6790000 5.3580000 + 506 506 1 0.0000000 13.3940000 2.6790000 10.7150000 + 507 507 1 0.0000000 13.3940000 2.6790000 16.0730000 + 508 508 1 0.0000000 13.3940000 2.6790000 21.4310000 + 509 509 1 0.0000000 13.3940000 2.6790000 26.7880000 + 510 510 1 0.0000000 13.3940000 2.6790000 32.1460000 + 511 511 1 0.0000000 13.3940000 8.0360000 5.3580000 + 512 512 1 0.0000000 13.3940000 8.0360000 10.7150000 + 513 513 1 0.0000000 13.3940000 8.0360000 16.0730000 + 514 514 1 0.0000000 13.3940000 8.0360000 21.4310000 + 515 515 1 0.0000000 13.3940000 8.0360000 26.7880000 + 516 516 1 0.0000000 13.3940000 8.0360000 32.1460000 + 517 517 1 0.0000000 13.3940000 13.3940000 5.3580000 + 518 518 1 0.0000000 13.3940000 13.3940000 10.7150000 + 519 519 1 0.0000000 13.3940000 13.3940000 16.0730000 + 520 520 1 0.0000000 13.3940000 13.3940000 21.4310000 + 521 521 1 0.0000000 13.3940000 13.3940000 26.7880000 + 522 522 1 0.0000000 13.3940000 13.3940000 32.1460000 + 523 523 1 0.0000000 13.3940000 18.7520000 5.3580000 + 524 524 1 0.0000000 13.3940000 18.7520000 10.7150000 + 525 525 1 0.0000000 13.3940000 18.7520000 16.0730000 + 526 526 1 0.0000000 13.3940000 18.7520000 21.4310000 + 527 527 1 0.0000000 13.3940000 18.7520000 26.7880000 + 528 528 1 0.0000000 13.3940000 18.7520000 32.1460000 + 529 529 1 0.0000000 13.3940000 24.1090000 5.3580000 + 530 530 1 0.0000000 13.3940000 24.1090000 10.7150000 + 531 531 1 0.0000000 13.3940000 24.1090000 16.0730000 + 532 532 1 0.0000000 13.3940000 24.1090000 21.4310000 + 533 533 1 0.0000000 13.3940000 24.1090000 26.7880000 + 534 534 1 0.0000000 13.3940000 24.1090000 32.1460000 + 535 535 1 0.0000000 13.3940000 29.4670000 5.3580000 + 536 536 1 0.0000000 13.3940000 29.4670000 10.7150000 + 537 537 1 0.0000000 13.3940000 29.4670000 16.0730000 + 538 538 1 0.0000000 13.3940000 29.4670000 21.4310000 + 539 539 1 0.0000000 13.3940000 29.4670000 26.7880000 + 540 540 1 0.0000000 13.3940000 29.4670000 32.1460000 + 541 541 1 0.0000000 18.7520000 2.6790000 5.3580000 + 542 542 1 0.0000000 18.7520000 2.6790000 10.7150000 + 543 543 1 0.0000000 18.7520000 2.6790000 16.0730000 + 544 544 1 0.0000000 18.7520000 2.6790000 21.4310000 + 545 545 1 0.0000000 18.7520000 2.6790000 26.7880000 + 546 546 1 0.0000000 18.7520000 2.6790000 32.1460000 + 547 547 1 0.0000000 18.7520000 8.0360000 5.3580000 + 548 548 1 0.0000000 18.7520000 8.0360000 10.7150000 + 549 549 1 0.0000000 18.7520000 8.0360000 16.0730000 + 550 550 1 0.0000000 18.7520000 8.0360000 21.4310000 + 551 551 1 0.0000000 18.7520000 8.0360000 26.7880000 + 552 552 1 0.0000000 18.7520000 8.0360000 32.1460000 + 553 553 1 0.0000000 18.7520000 13.3940000 5.3580000 + 554 554 1 0.0000000 18.7520000 13.3940000 10.7150000 + 555 555 1 0.0000000 18.7520000 13.3940000 16.0730000 + 556 556 1 0.0000000 18.7520000 13.3940000 21.4310000 + 557 557 1 0.0000000 18.7520000 13.3940000 26.7880000 + 558 558 1 0.0000000 18.7520000 13.3940000 32.1460000 + 559 559 1 0.0000000 18.7520000 18.7520000 5.3580000 + 560 560 1 0.0000000 18.7520000 18.7520000 10.7150000 + 561 561 1 0.0000000 18.7520000 18.7520000 16.0730000 + 562 562 1 0.0000000 18.7520000 18.7520000 21.4310000 + 563 563 1 0.0000000 18.7520000 18.7520000 26.7880000 + 564 564 1 0.0000000 18.7520000 18.7520000 32.1460000 + 565 565 1 0.0000000 18.7520000 24.1090000 5.3580000 + 566 566 1 0.0000000 18.7520000 24.1090000 10.7150000 + 567 567 1 0.0000000 18.7520000 24.1090000 16.0730000 + 568 568 1 0.0000000 18.7520000 24.1090000 21.4310000 + 569 569 1 0.0000000 18.7520000 24.1090000 26.7880000 + 570 570 1 0.0000000 18.7520000 24.1090000 32.1460000 + 571 571 1 0.0000000 18.7520000 29.4670000 5.3580000 + 572 572 1 0.0000000 18.7520000 29.4670000 10.7150000 + 573 573 1 0.0000000 18.7520000 29.4670000 16.0730000 + 574 574 1 0.0000000 18.7520000 29.4670000 21.4310000 + 575 575 1 0.0000000 18.7520000 29.4670000 26.7880000 + 576 576 1 0.0000000 18.7520000 29.4670000 32.1460000 + 577 577 1 0.0000000 24.1090000 2.6790000 5.3580000 + 578 578 1 0.0000000 24.1090000 2.6790000 10.7150000 + 579 579 1 0.0000000 24.1090000 2.6790000 16.0730000 + 580 580 1 0.0000000 24.1090000 2.6790000 21.4310000 + 581 581 1 0.0000000 24.1090000 2.6790000 26.7880000 + 582 582 1 0.0000000 24.1090000 2.6790000 32.1460000 + 583 583 1 0.0000000 24.1090000 8.0360000 5.3580000 + 584 584 1 0.0000000 24.1090000 8.0360000 10.7150000 + 585 585 1 0.0000000 24.1090000 8.0360000 16.0730000 + 586 586 1 0.0000000 24.1090000 8.0360000 21.4310000 + 587 587 1 0.0000000 24.1090000 8.0360000 26.7880000 + 588 588 1 0.0000000 24.1090000 8.0360000 32.1460000 + 589 589 1 0.0000000 24.1090000 13.3940000 5.3580000 + 590 590 1 0.0000000 24.1090000 13.3940000 10.7150000 + 591 591 1 0.0000000 24.1090000 13.3940000 16.0730000 + 592 592 1 0.0000000 24.1090000 13.3940000 21.4310000 + 593 593 1 0.0000000 24.1090000 13.3940000 26.7880000 + 594 594 1 0.0000000 24.1090000 13.3940000 32.1460000 + 595 595 1 0.0000000 24.1090000 18.7520000 5.3580000 + 596 596 1 0.0000000 24.1090000 18.7520000 10.7150000 + 597 597 1 0.0000000 24.1090000 18.7520000 16.0730000 + 598 598 1 0.0000000 24.1090000 18.7520000 21.4310000 + 599 599 1 0.0000000 24.1090000 18.7520000 26.7880000 + 600 600 1 0.0000000 24.1090000 18.7520000 32.1460000 + 601 601 1 0.0000000 24.1090000 24.1090000 5.3580000 + 602 602 1 0.0000000 24.1090000 24.1090000 10.7150000 + 603 603 1 0.0000000 24.1090000 24.1090000 16.0730000 + 604 604 1 0.0000000 24.1090000 24.1090000 21.4310000 + 605 605 1 0.0000000 24.1090000 24.1090000 26.7880000 + 606 606 1 0.0000000 24.1090000 24.1090000 32.1460000 + 607 607 1 0.0000000 24.1090000 29.4670000 5.3580000 + 608 608 1 0.0000000 24.1090000 29.4670000 10.7150000 + 609 609 1 0.0000000 24.1090000 29.4670000 16.0730000 + 610 610 1 0.0000000 24.1090000 29.4670000 21.4310000 + 611 611 1 0.0000000 24.1090000 29.4670000 26.7880000 + 612 612 1 0.0000000 24.1090000 29.4670000 32.1460000 + 613 613 1 0.0000000 29.4670000 2.6790000 5.3580000 + 614 614 1 0.0000000 29.4670000 2.6790000 10.7150000 + 615 615 1 0.0000000 29.4670000 2.6790000 16.0730000 + 616 616 1 0.0000000 29.4670000 2.6790000 21.4310000 + 617 617 1 0.0000000 29.4670000 2.6790000 26.7880000 + 618 618 1 0.0000000 29.4670000 2.6790000 32.1460000 + 619 619 1 0.0000000 29.4670000 8.0360000 5.3580000 + 620 620 1 0.0000000 29.4670000 8.0360000 10.7150000 + 621 621 1 0.0000000 29.4670000 8.0360000 16.0730000 + 622 622 1 0.0000000 29.4670000 8.0360000 21.4310000 + 623 623 1 0.0000000 29.4670000 8.0360000 26.7880000 + 624 624 1 0.0000000 29.4670000 8.0360000 32.1460000 + 625 625 1 0.0000000 29.4670000 13.3940000 5.3580000 + 626 626 1 0.0000000 29.4670000 13.3940000 10.7150000 + 627 627 1 0.0000000 29.4670000 13.3940000 16.0730000 + 628 628 1 0.0000000 29.4670000 13.3940000 21.4310000 + 629 629 1 0.0000000 29.4670000 13.3940000 26.7880000 + 630 630 1 0.0000000 29.4670000 13.3940000 32.1460000 + 631 631 1 0.0000000 29.4670000 18.7520000 5.3580000 + 632 632 1 0.0000000 29.4670000 18.7520000 10.7150000 + 633 633 1 0.0000000 29.4670000 18.7520000 16.0730000 + 634 634 1 0.0000000 29.4670000 18.7520000 21.4310000 + 635 635 1 0.0000000 29.4670000 18.7520000 26.7880000 + 636 636 1 0.0000000 29.4670000 18.7520000 32.1460000 + 637 637 1 0.0000000 29.4670000 24.1090000 5.3580000 + 638 638 1 0.0000000 29.4670000 24.1090000 10.7150000 + 639 639 1 0.0000000 29.4670000 24.1090000 16.0730000 + 640 640 1 0.0000000 29.4670000 24.1090000 21.4310000 + 641 641 1 0.0000000 29.4670000 24.1090000 26.7880000 + 642 642 1 0.0000000 29.4670000 24.1090000 32.1460000 + 643 643 1 0.0000000 29.4670000 29.4670000 5.3580000 + 644 644 1 0.0000000 29.4670000 29.4670000 10.7150000 + 645 645 1 0.0000000 29.4670000 29.4670000 16.0730000 + 646 646 1 0.0000000 29.4670000 29.4670000 21.4310000 + 647 647 1 0.0000000 29.4670000 29.4670000 26.7880000 + 648 648 1 0.0000000 29.4670000 29.4670000 32.1460000 + 649 649 1 0.0000000 0.0000000 5.3580000 5.3580000 + 650 650 1 0.0000000 0.0000000 5.3580000 10.7150000 + 651 651 1 0.0000000 0.0000000 5.3580000 16.0730000 + 652 652 1 0.0000000 0.0000000 5.3580000 21.4310000 + 653 653 1 0.0000000 0.0000000 5.3580000 26.7880000 + 654 654 1 0.0000000 0.0000000 5.3580000 32.1460000 + 655 655 1 0.0000000 0.0000000 10.7150000 5.3580000 + 656 656 1 0.0000000 0.0000000 10.7150000 10.7150000 + 657 657 1 0.0000000 0.0000000 10.7150000 16.0730000 + 658 658 1 0.0000000 0.0000000 10.7150000 21.4310000 + 659 659 1 0.0000000 0.0000000 10.7150000 26.7880000 + 660 660 1 0.0000000 0.0000000 10.7150000 32.1460000 + 661 661 1 0.0000000 0.0000000 16.0730000 5.3580000 + 662 662 1 0.0000000 0.0000000 16.0730000 10.7150000 + 663 663 1 0.0000000 0.0000000 16.0730000 16.0730000 + 664 664 1 0.0000000 0.0000000 16.0730000 21.4310000 + 665 665 1 0.0000000 0.0000000 16.0730000 26.7880000 + 666 666 1 0.0000000 0.0000000 16.0730000 32.1460000 + 667 667 1 0.0000000 0.0000000 21.4310000 5.3580000 + 668 668 1 0.0000000 0.0000000 21.4310000 10.7150000 + 669 669 1 0.0000000 0.0000000 21.4310000 16.0730000 + 670 670 1 0.0000000 0.0000000 21.4310000 21.4310000 + 671 671 1 0.0000000 0.0000000 21.4310000 26.7880000 + 672 672 1 0.0000000 0.0000000 21.4310000 32.1460000 + 673 673 1 0.0000000 0.0000000 26.7880000 5.3580000 + 674 674 1 0.0000000 0.0000000 26.7880000 10.7150000 + 675 675 1 0.0000000 0.0000000 26.7880000 16.0730000 + 676 676 1 0.0000000 0.0000000 26.7880000 21.4310000 + 677 677 1 0.0000000 0.0000000 26.7880000 26.7880000 + 678 678 1 0.0000000 0.0000000 26.7880000 32.1460000 + 679 679 1 0.0000000 0.0000000 32.1460000 5.3580000 + 680 680 1 0.0000000 0.0000000 32.1460000 10.7150000 + 681 681 1 0.0000000 0.0000000 32.1460000 16.0730000 + 682 682 1 0.0000000 0.0000000 32.1460000 21.4310000 + 683 683 1 0.0000000 0.0000000 32.1460000 26.7880000 + 684 684 1 0.0000000 0.0000000 32.1460000 32.1460000 + 685 685 1 0.0000000 5.3580000 5.3580000 5.3580000 + 686 686 1 0.0000000 5.3580000 5.3580000 10.7150000 + 687 687 1 0.0000000 5.3580000 5.3580000 16.0730000 + 688 688 1 0.0000000 5.3580000 5.3580000 21.4310000 + 689 689 1 0.0000000 5.3580000 5.3580000 26.7880000 + 690 690 1 0.0000000 5.3580000 5.3580000 32.1460000 + 691 691 1 0.0000000 5.3580000 10.7150000 5.3580000 + 692 692 1 0.0000000 5.3580000 10.7150000 10.7150000 + 693 693 1 0.0000000 5.3580000 10.7150000 16.0730000 + 694 694 1 0.0000000 5.3580000 10.7150000 21.4310000 + 695 695 1 0.0000000 5.3580000 10.7150000 26.7880000 + 696 696 1 0.0000000 5.3580000 10.7150000 32.1460000 + 697 697 1 0.0000000 5.3580000 16.0730000 5.3580000 + 698 698 1 0.0000000 5.3580000 16.0730000 10.7150000 + 699 699 1 0.0000000 5.3580000 16.0730000 16.0730000 + 700 700 1 0.0000000 5.3580000 16.0730000 21.4310000 + 701 701 1 0.0000000 5.3580000 16.0730000 26.7880000 + 702 702 1 0.0000000 5.3580000 16.0730000 32.1460000 + 703 703 1 0.0000000 5.3580000 21.4310000 5.3580000 + 704 704 1 0.0000000 5.3580000 21.4310000 10.7150000 + 705 705 1 0.0000000 5.3580000 21.4310000 16.0730000 + 706 706 1 0.0000000 5.3580000 21.4310000 21.4310000 + 707 707 1 0.0000000 5.3580000 21.4310000 26.7880000 + 708 708 1 0.0000000 5.3580000 21.4310000 32.1460000 + 709 709 1 0.0000000 5.3580000 26.7880000 5.3580000 + 710 710 1 0.0000000 5.3580000 26.7880000 10.7150000 + 711 711 1 0.0000000 5.3580000 26.7880000 16.0730000 + 712 712 1 0.0000000 5.3580000 26.7880000 21.4310000 + 713 713 1 0.0000000 5.3580000 26.7880000 26.7880000 + 714 714 1 0.0000000 5.3580000 26.7880000 32.1460000 + 715 715 1 0.0000000 5.3580000 32.1460000 5.3580000 + 716 716 1 0.0000000 5.3580000 32.1460000 10.7150000 + 717 717 1 0.0000000 5.3580000 32.1460000 16.0730000 + 718 718 1 0.0000000 5.3580000 32.1460000 21.4310000 + 719 719 1 0.0000000 5.3580000 32.1460000 26.7880000 + 720 720 1 0.0000000 5.3580000 32.1460000 32.1460000 + 721 721 1 0.0000000 10.7150000 5.3580000 5.3580000 + 722 722 1 0.0000000 10.7150000 5.3580000 10.7150000 + 723 723 1 0.0000000 10.7150000 5.3580000 16.0730000 + 724 724 1 0.0000000 10.7150000 5.3580000 21.4310000 + 725 725 1 0.0000000 10.7150000 5.3580000 26.7880000 + 726 726 1 0.0000000 10.7150000 5.3580000 32.1460000 + 727 727 1 0.0000000 10.7150000 10.7150000 5.3580000 + 728 728 1 0.0000000 10.7150000 10.7150000 10.7150000 + 729 729 1 0.0000000 10.7150000 10.7150000 16.0730000 + 730 730 1 0.0000000 10.7150000 10.7150000 21.4310000 + 731 731 1 0.0000000 10.7150000 10.7150000 26.7880000 + 732 732 1 0.0000000 10.7150000 10.7150000 32.1460000 + 733 733 1 0.0000000 10.7150000 16.0730000 5.3580000 + 734 734 1 0.0000000 10.7150000 16.0730000 10.7150000 + 735 735 1 0.0000000 10.7150000 16.0730000 16.0730000 + 736 736 1 0.0000000 10.7150000 16.0730000 21.4310000 + 737 737 1 0.0000000 10.7150000 16.0730000 26.7880000 + 738 738 1 0.0000000 10.7150000 16.0730000 32.1460000 + 739 739 1 0.0000000 10.7150000 21.4310000 5.3580000 + 740 740 1 0.0000000 10.7150000 21.4310000 10.7150000 + 741 741 1 0.0000000 10.7150000 21.4310000 16.0730000 + 742 742 1 0.0000000 10.7150000 21.4310000 21.4310000 + 743 743 1 0.0000000 10.7150000 21.4310000 26.7880000 + 744 744 1 0.0000000 10.7150000 21.4310000 32.1460000 + 745 745 1 0.0000000 10.7150000 26.7880000 5.3580000 + 746 746 1 0.0000000 10.7150000 26.7880000 10.7150000 + 747 747 1 0.0000000 10.7150000 26.7880000 16.0730000 + 748 748 1 0.0000000 10.7150000 26.7880000 21.4310000 + 749 749 1 0.0000000 10.7150000 26.7880000 26.7880000 + 750 750 1 0.0000000 10.7150000 26.7880000 32.1460000 + 751 751 1 0.0000000 10.7150000 32.1460000 5.3580000 + 752 752 1 0.0000000 10.7150000 32.1460000 10.7150000 + 753 753 1 0.0000000 10.7150000 32.1460000 16.0730000 + 754 754 1 0.0000000 10.7150000 32.1460000 21.4310000 + 755 755 1 0.0000000 10.7150000 32.1460000 26.7880000 + 756 756 1 0.0000000 10.7150000 32.1460000 32.1460000 + 757 757 1 0.0000000 16.0730000 5.3580000 5.3580000 + 758 758 1 0.0000000 16.0730000 5.3580000 10.7150000 + 759 759 1 0.0000000 16.0730000 5.3580000 16.0730000 + 760 760 1 0.0000000 16.0730000 5.3580000 21.4310000 + 761 761 1 0.0000000 16.0730000 5.3580000 26.7880000 + 762 762 1 0.0000000 16.0730000 5.3580000 32.1460000 + 763 763 1 0.0000000 16.0730000 10.7150000 5.3580000 + 764 764 1 0.0000000 16.0730000 10.7150000 10.7150000 + 765 765 1 0.0000000 16.0730000 10.7150000 16.0730000 + 766 766 1 0.0000000 16.0730000 10.7150000 21.4310000 + 767 767 1 0.0000000 16.0730000 10.7150000 26.7880000 + 768 768 1 0.0000000 16.0730000 10.7150000 32.1460000 + 769 769 1 0.0000000 16.0730000 16.0730000 5.3580000 + 770 770 1 0.0000000 16.0730000 16.0730000 10.7150000 + 771 771 1 0.0000000 16.0730000 16.0730000 16.0730000 + 772 772 1 0.0000000 16.0730000 16.0730000 21.4310000 + 773 773 1 0.0000000 16.0730000 16.0730000 26.7880000 + 774 774 1 0.0000000 16.0730000 16.0730000 32.1460000 + 775 775 1 0.0000000 16.0730000 21.4310000 5.3580000 + 776 776 1 0.0000000 16.0730000 21.4310000 10.7150000 + 777 777 1 0.0000000 16.0730000 21.4310000 16.0730000 + 778 778 1 0.0000000 16.0730000 21.4310000 21.4310000 + 779 779 1 0.0000000 16.0730000 21.4310000 26.7880000 + 780 780 1 0.0000000 16.0730000 21.4310000 32.1460000 + 781 781 1 0.0000000 16.0730000 26.7880000 5.3580000 + 782 782 1 0.0000000 16.0730000 26.7880000 10.7150000 + 783 783 1 0.0000000 16.0730000 26.7880000 16.0730000 + 784 784 1 0.0000000 16.0730000 26.7880000 21.4310000 + 785 785 1 0.0000000 16.0730000 26.7880000 26.7880000 + 786 786 1 0.0000000 16.0730000 26.7880000 32.1460000 + 787 787 1 0.0000000 16.0730000 32.1460000 5.3580000 + 788 788 1 0.0000000 16.0730000 32.1460000 10.7150000 + 789 789 1 0.0000000 16.0730000 32.1460000 16.0730000 + 790 790 1 0.0000000 16.0730000 32.1460000 21.4310000 + 791 791 1 0.0000000 16.0730000 32.1460000 26.7880000 + 792 792 1 0.0000000 16.0730000 32.1460000 32.1460000 + 793 793 1 0.0000000 21.4310000 5.3580000 5.3580000 + 794 794 1 0.0000000 21.4310000 5.3580000 10.7150000 + 795 795 1 0.0000000 21.4310000 5.3580000 16.0730000 + 796 796 1 0.0000000 21.4310000 5.3580000 21.4310000 + 797 797 1 0.0000000 21.4310000 5.3580000 26.7880000 + 798 798 1 0.0000000 21.4310000 5.3580000 32.1460000 + 799 799 1 0.0000000 21.4310000 10.7150000 5.3580000 + 800 800 1 0.0000000 21.4310000 10.7150000 10.7150000 + 801 801 1 0.0000000 21.4310000 10.7150000 16.0730000 + 802 802 1 0.0000000 21.4310000 10.7150000 21.4310000 + 803 803 1 0.0000000 21.4310000 10.7150000 26.7880000 + 804 804 1 0.0000000 21.4310000 10.7150000 32.1460000 + 805 805 1 0.0000000 21.4310000 16.0730000 5.3580000 + 806 806 1 0.0000000 21.4310000 16.0730000 10.7150000 + 807 807 1 0.0000000 21.4310000 16.0730000 16.0730000 + 808 808 1 0.0000000 21.4310000 16.0730000 21.4310000 + 809 809 1 0.0000000 21.4310000 16.0730000 26.7880000 + 810 810 1 0.0000000 21.4310000 16.0730000 32.1460000 + 811 811 1 0.0000000 21.4310000 21.4310000 5.3580000 + 812 812 1 0.0000000 21.4310000 21.4310000 10.7150000 + 813 813 1 0.0000000 21.4310000 21.4310000 16.0730000 + 814 814 1 0.0000000 21.4310000 21.4310000 21.4310000 + 815 815 1 0.0000000 21.4310000 21.4310000 26.7880000 + 816 816 1 0.0000000 21.4310000 21.4310000 32.1460000 + 817 817 1 0.0000000 21.4310000 26.7880000 5.3580000 + 818 818 1 0.0000000 21.4310000 26.7880000 10.7150000 + 819 819 1 0.0000000 21.4310000 26.7880000 16.0730000 + 820 820 1 0.0000000 21.4310000 26.7880000 21.4310000 + 821 821 1 0.0000000 21.4310000 26.7880000 26.7880000 + 822 822 1 0.0000000 21.4310000 26.7880000 32.1460000 + 823 823 1 0.0000000 21.4310000 32.1460000 5.3580000 + 824 824 1 0.0000000 21.4310000 32.1460000 10.7150000 + 825 825 1 0.0000000 21.4310000 32.1460000 16.0730000 + 826 826 1 0.0000000 21.4310000 32.1460000 21.4310000 + 827 827 1 0.0000000 21.4310000 32.1460000 26.7880000 + 828 828 1 0.0000000 21.4310000 32.1460000 32.1460000 + 829 829 1 0.0000000 26.7880000 5.3580000 5.3580000 + 830 830 1 0.0000000 26.7880000 5.3580000 10.7150000 + 831 831 1 0.0000000 26.7880000 5.3580000 16.0730000 + 832 832 1 0.0000000 26.7880000 5.3580000 21.4310000 + 833 833 1 0.0000000 26.7880000 5.3580000 26.7880000 + 834 834 1 0.0000000 26.7880000 5.3580000 32.1460000 + 835 835 1 0.0000000 26.7880000 10.7150000 5.3580000 + 836 836 1 0.0000000 26.7880000 10.7150000 10.7150000 + 837 837 1 0.0000000 26.7880000 10.7150000 16.0730000 + 838 838 1 0.0000000 26.7880000 10.7150000 21.4310000 + 839 839 1 0.0000000 26.7880000 10.7150000 26.7880000 + 840 840 1 0.0000000 26.7880000 10.7150000 32.1460000 + 841 841 1 0.0000000 26.7880000 16.0730000 5.3580000 + 842 842 1 0.0000000 26.7880000 16.0730000 10.7150000 + 843 843 1 0.0000000 26.7880000 16.0730000 16.0730000 + 844 844 1 0.0000000 26.7880000 16.0730000 21.4310000 + 845 845 1 0.0000000 26.7880000 16.0730000 26.7880000 + 846 846 1 0.0000000 26.7880000 16.0730000 32.1460000 + 847 847 1 0.0000000 26.7880000 21.4310000 5.3580000 + 848 848 1 0.0000000 26.7880000 21.4310000 10.7150000 + 849 849 1 0.0000000 26.7880000 21.4310000 16.0730000 + 850 850 1 0.0000000 26.7880000 21.4310000 21.4310000 + 851 851 1 0.0000000 26.7880000 21.4310000 26.7880000 + 852 852 1 0.0000000 26.7880000 21.4310000 32.1460000 + 853 853 1 0.0000000 26.7880000 26.7880000 5.3580000 + 854 854 1 0.0000000 26.7880000 26.7880000 10.7150000 + 855 855 1 0.0000000 26.7880000 26.7880000 16.0730000 + 856 856 1 0.0000000 26.7880000 26.7880000 21.4310000 + 857 857 1 0.0000000 26.7880000 26.7880000 26.7880000 + 858 858 1 0.0000000 26.7880000 26.7880000 32.1460000 + 859 859 1 0.0000000 26.7880000 32.1460000 5.3580000 + 860 860 1 0.0000000 26.7880000 32.1460000 10.7150000 + 861 861 1 0.0000000 26.7880000 32.1460000 16.0730000 + 862 862 1 0.0000000 26.7880000 32.1460000 21.4310000 + 863 863 1 0.0000000 26.7880000 32.1460000 26.7880000 + 864 864 1 0.0000000 26.7880000 32.1460000 32.1460000 + diff --git a/examples/gjf/ff-argon.lmp b/examples/gjf/ff-argon.lmp new file mode 100644 index 0000000000..b6f7bc931a --- /dev/null +++ b/examples/gjf/ff-argon.lmp @@ -0,0 +1,20 @@ +############################# +#Atoms types - mass - charge# +############################# +#@ 1 atom types #!THIS LINE IS NECESSARY DON'T SPEND HOURS FINDING THAT OUT!# + +variable Ar equal 1 + +############# +#Atom Masses# +############# + +mass ${Ar} 39.903 + +########################### +#Pair Potentials - Tersoff# +########################### + +pair_style lj/cubic +pair_coeff * * 0.0102701 3.42 + diff --git a/examples/gjf/in.argon b/examples/gjf/in.argon new file mode 100644 index 0000000000..271882c665 --- /dev/null +++ b/examples/gjf/in.argon @@ -0,0 +1,162 @@ +###############################mm +# Atom style - charge/vdw/bonded# +################################# +atom_style full + +############################################## +#Units Metal : eV - ps - angstrom - bar# +# Real : kcal/mol - fs - angstrom - atm# +############################################## +units metal + +############ +#Run number# +############ +variable run_no equal 0 # is it a restart? +variable res_no equal ${run_no}-1 # restart file number + +####################################### +#Random Seeds and Domain Decomposition# +####################################### +variable iseed0 equal 2357 +variable iseed1 equal 26488 +variable iseed2 equal 10669 +processors * * * + +########### +#Data File# +########### +variable inpfile string argon.lmp +variable resfile string final_restart.${res_no} +variable ff_file string ff-argon.lmp + +########## +#Run Type# +########## +variable minimise equal 0 #Energy Minimization +variable md equal 1 #Plain MD + +############################### +#Molecular Dynamics Parameters# +############################### +variable run_no equal 0 # is it a restart? + +variable ens equal 9 # ensemble (0=nve, 1=nvt, 2=npt, 3=ber, 4=lang, 5=stoc, 6=vres, 7=stoch, 8=gjf) +variable ts equal 0.120 # simulation timestep (time units) +variable nequil equal 0 # number of equilibration steps +variable nsteps equal 200000 # number of MD steps +#variable nsteps equal 20 # number of MD steps + +variable temp_s equal 10 # starting temperature +variable temp_f equal 10 # final simulation temperature +variable trel equal 1 # thermostat relaxation time +variable tscale equal 1 # thermostat relaxation freq - vel rescaling only +variable deltat equal 1 # maximum temperature change - vel rescaling only + +variable npttype string iso # type of NPT (iso, aniso, tri, z...) +variable pres equal 1.01325 # pressure (NPT runs only) +variable prel equal 1.0 # barostat relaxation time + +neighbor 1 bin + +################### +#Output Parameters# +################### +variable ntraj equal 1000 # trajectory output frequency - all system +variable ntraj_s equal -100 # trajectory output frequency - solute only +variable nthermo equal 200 # thermodynamic data output frequency + +################################ +#Energy Minimization Parameters# +################################ +variable mtraj equal 1 # trajectory output frequency - all system +variable etol equal 1e-5 # % change in energy +variable ftol equal 1e-5 # max force threshold (force units) +variable maxiter equal 10000 # max # of iterations + +######################## +#3D Periodic Simulation# +######################## +boundary p p p + +############################# +#Reading the input structure# +############################# +if "${run_no} == 0" then "read_data ${inpfile}" else "read_restart ${resfile}" + +############# +#Force Field# +############# +include ${ff_file} + +###################### +#Thermodynamic Output# +###################### +variable str_basic string 'step time pe temp press' + +#MD ensemble (0=nve, 1=nvt, 2=npt, 3=ber, 4=lang, 5=stoc, 6=vres) +variable str_ens string ' ' +if "${ens} == 0" then "variable str_ens string 'etotal'" +if "${ens} == 2" then "variable str_ens string 'vol pxx pyy pzz cella cellb cellc cellakpha cellbeta cellgamma'" + +#Variable for a gulp friend output +if "${ens} >= 0" then "thermo_style custom time temp pe etotal press vol cpu" & + "thermo ${nthermo}" & + "thermo_modify flush yes" + +##################### +#Energy Minimization# +##################### +if "${minimise} <= 0 || ${run_no} > 0" then "jump SELF end_minimise" + print "Doing CG minimisation" + dump mdcd all dcd ${mtraj} min.dcd + dump_modify mdcd unwrap yes + min_style cg + min_modify line quadratic + minimize ${etol} ${ftol} ${maxiter} ${maxiter} + reset_timestep 0 + undump mdcd +label end_minimise + +################ +#Timestep in ps# +################ +timestep ${ts} + +############## +#Restart file# +############## +restart 100000 restart.1 restart.2 + +################### +#Trajectory output# +################### +#dump xyz all atom 1000 silicon.lammpstrj + +if "${ntraj} > 0" then & + "dump 1 all dcd ${ntraj} trajectory.${run_no}.dcd" & + "dump_modify 1 unwrap yes" + +fix mom all momentum 1 linear 1 1 1 + +############################################################### +#Ensembles (0=nve,1=nvt, 2=npt, 3=ber, 4=lang, 5=stoc, 6=vres)# +############################################################### +if "${md} > 0" then 'print "Setting up the ensembles"' & + 'if "${run_no} == 0" then "velocity all create ${temp_s} ${iseed0} mom yes dist gaussian"' & + 'if "${ens} == 0" then "fix nve all nve"' & + 'if "${ens} == 1" then "fix nvt all nvt temp ${temp_s} ${temp_f} ${trel} tchain 5"' & + 'if "${ens} == 2" then "fix npt all npt temp ${temp_s} ${temp_f} ${trel} ${npttype} ${pres} ${pres} ${prel} tchain 5 pchain 5 mtk yes"' & + 'if "${ens} == 3" then "fix nve all nve" "fix ber all temp/berendsen ${temp_s} ${temp_f} ${trel}"' & + 'if "${ens} == 4" then "fix nve all nve" "fix lang all langevin ${temp_s} ${temp_f} ${trel} ${iseed1} tally yes zero yes"' & + 'if "${ens} == 5" then "fix nve all nve" "fix stoch all temp/csvr ${temp_s} ${temp_f} ${trel} ${iseed1}"' & + 'if "${ens} == 6" then "fix nve all nve" "fix stoch all temp/csld ${temp_s} ${temp_f} ${trel} ${iseed1}"' & + 'if "${ens} == 7" then "fix nve all nve" "fix vres all temp/rescale ${tscale} ${temp_s} ${temp_f} ${tmin} ${tmax}"' & + 'if "${ens} == 8" then "fix nve all nve" "fix lang all langevin ${temp_s} ${temp_f} ${trel} ${iseed1} gjf yes"' & + 'if "${ens} == 9" then "fix nve all nve" "fix lang all langevin ${temp_s} ${temp_f} ${trel} ${iseed1} gjf yes halfstep yes"' + +if "${md} > 0" then "print 'Doing Molecular dynamics'" & + "run ${nsteps}" & + "write_restart final_restart.${run_no}" + + diff --git a/examples/gjf/out.argon b/examples/gjf/out.argon new file mode 100644 index 0000000000..8dda569157 --- /dev/null +++ b/examples/gjf/out.argon @@ -0,0 +1,249 @@ +LAMMPS (1 Feb 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +Reading data file ... + orthogonal box = (0 0 0) to (32.146 32.146 32.146) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 864 atoms +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors +Setting up the ensembles +WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) +WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) +WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) +WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) +Doing Molecular dynamics +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.94072 + ghost atom cutoff = 6.94072 + binsize = 3.47036, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cubic, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Setting up Verlet run ... + Unit style : metal + Current step : 0 + Time step : 0.12 +Per MPI rank memory allocation (min/avg/max) = 6.847 | 6.847 | 6.847 Mbytes +Time Temp PotEng TotEng Press Volume CPU + 0 10 -56.207655 -55.09214 33.340921 33218.561 0 + 24 10.156356 -55.092888 -53.959932 339.40964 33218.561 0.082175482 + 48 9.6121006 -55.07262 -54.000376 344.56765 33218.561 0.19529325 + 72 9.8187467 -55.16687 -54.071574 318.85979 33218.561 0.29643488 + 96 9.5421385 -55.151229 -54.086789 322.8842 33218.561 0.38801357 + 120 10.295035 -55.12919 -53.980763 332.00171 33218.561 0.47607262 + 144 10.331608 -55.09907 -53.946563 339.28896 33218.561 0.57389224 + 168 10.154698 -55.058246 -53.925475 349.03253 33218.561 0.65481471 + 192 9.858198 -55.127583 -54.027886 330.09298 33218.561 0.74437734 + 216 9.6658918 -55.10812 -54.029875 334.28383 33218.561 0.8278495 + 240 9.6801591 -55.102386 -54.02255 336.27242 33218.561 0.91167379 + 264 10.685658 -55.046238 -53.854237 355.0448 33218.561 1.0023789 + 288 10.387727 -55.08427 -53.925504 343.87247 33218.561 1.0960371 + 312 10.231132 -55.120428 -53.97913 333.22463 33218.561 1.2382998 + 336 10.20896 -55.075142 -53.936317 344.88438 33218.561 1.3420489 + 360 9.7876538 -55.165008 -54.07318 319.14962 33218.561 1.42782 + 384 9.9872551 -55.13881 -54.024717 327.82471 33218.561 1.5417666 + 408 9.5362734 -55.063733 -53.999947 346.50545 33218.561 1.6328366 + 432 10.262638 -55.126608 -53.981796 332.16342 33218.561 1.7242996 + 456 9.9228239 -55.122119 -54.015214 332.26261 33218.561 1.8124888 + 480 9.7026324 -55.17057 -54.088227 317.84818 33218.561 1.900233 + 504 10.028762 -55.082465 -53.963741 343.04257 33218.561 1.989605 + 528 9.8227851 -55.121222 -54.025476 332.42857 33218.561 2.0708802 + 552 10.208672 -55.100242 -53.961449 338.68109 33218.561 2.1527217 + 576 10.180849 -55.124065 -53.988376 331.29516 33218.561 2.238126 + 600 9.6467252 -55.119533 -54.043427 332.43109 33218.561 2.323443 + 624 10.041885 -55.173802 -54.053614 318.48579 33218.561 2.4046151 + 648 10.151597 -55.111725 -53.979299 334.66227 33218.561 2.4902161 + 672 9.7719111 -55.060111 -53.970039 348.55249 33218.561 2.5800372 + 696 10.476688 -55.088109 -53.919419 342.94922 33218.561 2.6731395 + 720 10.517805 -55.113604 -53.940327 335.47342 33218.561 2.760651 + 744 10.006466 -55.045085 -53.928848 353.53813 33218.561 2.8537894 + 768 10.201492 -55.081598 -53.943606 343.3206 33218.561 2.9404115 + 792 10.117738 -55.077806 -53.949157 345.31093 33218.561 3.030765 + 816 10.362288 -55.11635 -53.960421 333.9045 33218.561 3.1177356 + 840 10.204164 -55.097619 -53.959329 338.82717 33218.561 3.2091886 + 864 10.147722 -55.101372 -53.969378 338.19682 33218.561 3.3003742 + 888 9.9265037 -55.111394 -54.004077 334.08116 33218.561 3.395341 + 912 10.206403 -55.132181 -53.993642 328.89904 33218.561 3.4882881 + 936 10.28639 -55.093317 -53.945855 340.61244 33218.561 3.5764735 + 960 9.8028822 -55.078802 -53.985276 343.5904 33218.561 3.7056267 + 984 10.492755 -55.121321 -53.950839 334.62697 33218.561 3.8055611 + 1008 10.621569 -55.088588 -53.903736 343.33166 33218.561 3.9144807 + 1032 10.006729 -55.113459 -53.997193 334.43025 33218.561 4.0189888 + 1056 10.099853 -55.068035 -53.941381 347.42158 33218.561 4.1391664 + 1080 10.254232 -55.066685 -53.92281 347.15777 33218.561 4.2443953 + 1104 9.9495142 -55.13686 -54.026977 327.63107 33218.561 4.3368342 + 1128 10.377108 -55.08846 -53.930878 344.13083 33218.561 4.4287748 + 1152 10.036981 -55.114643 -53.995003 334.88053 33218.561 4.526868 + 1176 10.144779 -55.097125 -53.965459 339.698 33218.561 4.6614049 + 1200 10.075844 -55.14695 -54.022974 326.05911 33218.561 4.799835 + 1224 10.183695 -55.121716 -53.98571 332.75772 33218.561 4.8908897 + 1248 10.581369 -55.027954 -53.847587 359.06251 33218.561 4.9839788 + 1272 10.158269 -55.105173 -53.972003 337.52964 33218.561 5.0918646 + 1296 9.8776072 -55.064085 -53.962223 347.15648 33218.561 5.2291209 + 1320 10.38161 -55.118366 -53.960282 335.17767 33218.561 5.3570446 + 1344 9.9528146 -55.141937 -54.031685 326.27117 33218.561 5.4584705 + 1368 9.8024326 -55.117808 -54.024332 332.99835 33218.561 5.5557818 + 1392 10.35447 -55.110235 -53.955179 336.80412 33218.561 5.6467392 + 1416 10.199061 -55.105641 -53.96792 337.36785 33218.561 5.7476527 + 1440 9.6868779 -55.087316 -54.00673 340.9166 33218.561 5.8432207 + 1464 10.093238 -55.049436 -53.92352 352.27563 33218.561 5.9471521 + 1488 9.7578808 -55.123935 -54.035429 329.93926 33218.561 6.0495014 + 1512 10.099979 -55.205426 -54.078758 309.26166 33218.561 6.1612976 + 1536 10.172944 -55.087106 -53.952299 342.93395 33218.561 6.2506202 + 1560 10.51771 -55.107635 -53.934369 340.1967 33218.561 6.3379856 + 1584 10.044994 -55.101362 -53.980828 339.03163 33218.561 6.4362567 + 1608 9.624758 -55.146246 -54.07259 324.32486 33218.561 6.5385845 + 1632 9.9135215 -55.097278 -53.99141 338.69162 33218.561 6.6452786 + 1656 9.863681 -55.070523 -53.970214 345.84608 33218.561 6.7518212 + 1680 10.138513 -55.127065 -53.996099 330.40757 33218.561 6.8775188 + 1704 10.382237 -55.070572 -53.912417 347.074 33218.561 7.0126448 + 1728 10.72487 -55.081147 -53.884771 345.83623 33218.561 7.1384216 + 1752 9.829431 -55.131041 -54.034553 328.57652 33218.561 7.2616419 + 1776 9.9135662 -55.100556 -53.994682 336.52238 33218.561 7.4193201 + 1800 10.41873 -55.097116 -53.934891 340.24798 33218.561 7.5570544 + 1824 10.151782 -55.03231 -53.899864 357.3654 33218.561 7.6872905 + 1848 10.42307 -55.043808 -53.881099 355.71677 33218.561 7.7933885 + 1872 10.276862 -55.085016 -53.938616 344.46273 33218.561 7.8887472 + 1896 9.7681373 -55.146507 -54.056857 324.84323 33218.561 7.9977923 + 1920 9.6624824 -55.103214 -54.025349 336.06397 33218.561 8.090235 + 1944 10.153504 -55.049175 -53.916536 352.36339 33218.561 8.1923703 + 1968 10.191954 -55.098741 -53.961813 338.8667 33218.561 8.3320906 + 1992 9.92167 -55.117079 -54.010302 332.96497 33218.561 8.4774437 + 2016 9.5737281 -55.091141 -54.023178 339.41837 33218.561 8.6149527 + 2040 10.600908 -55.092717 -53.91017 342.71852 33218.561 8.7639523 + 2064 9.9214513 -55.099904 -53.993151 337.46799 33218.561 8.898087 + 2088 9.9256258 -55.082224 -53.975005 342.85042 33218.561 9.0130784 + 2112 10.345379 -55.112923 -53.95888 335.81471 33218.561 9.1422766 + 2136 9.8876649 -55.079254 -53.97627 343.05764 33218.561 9.2885707 + 2160 10.04492 -55.074876 -53.95435 344.82419 33218.561 9.3876103 + 2184 10.028705 -55.063961 -53.945244 347.70549 33218.561 9.500967 + 2208 10.412572 -55.136316 -53.974778 329.8188 33218.561 9.5900362 + 2232 10.404205 -55.09913 -53.938525 339.77542 33218.561 9.7048353 + 2256 9.5694135 -55.139021 -54.071538 326.37473 33218.561 9.8045958 + 2280 10.244745 -55.134529 -53.991713 329.19392 33218.561 9.8968908 + 2304 9.9129922 -55.116192 -54.010382 333.14326 33218.561 9.9818651 + 2328 10.167027 -55.08241 -53.948263 343.08135 33218.561 10.068683 + 2352 10.262045 -55.144327 -53.999581 327.40876 33218.561 10.155937 + 2376 10.520934 -55.073147 -53.899521 347.6998 33218.561 10.246316 + 2400 9.9628692 -55.122001 -54.010628 331.25369 33218.561 10.336833 + 2424 10.565531 -55.157113 -53.978512 325.14897 33218.561 10.452039 + 2448 10.03709 -55.096409 -53.976756 338.29607 33218.561 10.537936 + 2472 9.384311 -55.141821 -54.094987 324.23247 33218.561 10.628689 + 2496 9.8019362 -55.105685 -54.012264 335.97239 33218.561 10.717287 + 2520 10.31114 -55.078831 -53.928608 345.42395 33218.561 10.818756 + 2544 10.407237 -55.148382 -53.987439 325.94421 33218.561 10.910801 + 2568 10.257967 -55.041348 -53.897056 355.73261 33218.561 11.004221 + 2592 9.8425807 -55.139428 -54.041474 328.28096 33218.561 11.101295 + 2616 10.140697 -55.100238 -53.969028 338.76319 33218.561 11.192211 + 2640 9.7102818 -55.136288 -54.053091 326.7053 33218.561 11.280277 + 2664 10.120372 -55.128779 -53.999836 330.71707 33218.561 11.369001 + 2688 10.232537 -55.120614 -53.979159 333.35087 33218.561 11.464652 + 2712 10.032526 -55.094761 -53.975618 339.97984 33218.561 11.559387 + 2736 9.8791 -55.121998 -54.01997 332.32556 33218.561 11.649679 + 2760 9.891483 -55.120919 -54.017509 331.32614 33218.561 11.742604 + 2784 10.201053 -55.165525 -54.027582 320.39272 33218.561 11.85274 + 2808 10.238648 -55.096449 -53.954312 340.06316 33218.561 11.939782 + 2832 9.8692851 -55.068632 -53.967699 346.77535 33218.561 12.036655 + 2856 10.179976 -55.128413 -53.992822 331.5662 33218.561 12.123227 + 2880 9.7656315 -55.1468 -54.057429 324.02612 33218.561 12.213117 + 2904 9.7991628 -55.049191 -53.95608 352.45738 33218.561 12.326761 + 2928 10.581767 -55.093293 -53.912881 341.37292 33218.561 12.417633 + 2952 10.546144 -55.07452 -53.898081 347.02025 33218.561 12.52701 + 2976 9.8306008 -55.14762 -54.051002 323.45715 33218.561 12.633522 + 3000 10.033532 -55.076433 -53.957178 345.36812 33218.561 12.72627 + 3024 10.046266 -55.085775 -53.965099 342.47786 33218.561 12.816242 + 3048 10.176777 -55.133013 -53.997778 329.04144 33218.561 12.903175 + 3072 9.9778064 -55.143787 -54.030748 326.75284 33218.561 13.014329 + 3096 10.516223 -55.110144 -53.937043 336.802 33218.561 13.104673 + 3120 9.6561157 -55.138699 -54.061544 325.6652 33218.561 13.207371 + 3144 10.237043 -55.060968 -53.91901 349.44011 33218.561 13.303442 + 3168 9.9704264 -55.123073 -54.010857 332.19725 33218.561 13.391877 + 3192 10.493307 -55.144402 -53.973858 327.15485 33218.561 13.482857 + 3216 10.022171 -55.141782 -54.023794 326.08249 33218.561 13.574484 + 3240 9.6957248 -55.137865 -54.056292 326.04858 33218.561 13.671408 + 3264 9.9685299 -55.124301 -54.012297 331.9015 33218.561 13.760186 + 3288 10.413707 -55.153604 -53.99194 324.32939 33218.561 13.877604 + 3312 10.022953 -55.103422 -53.985346 337.52066 33218.561 13.977562 + 3336 10.044478 -55.110297 -53.98982 334.48379 33218.561 14.065563 + 3360 9.8593734 -55.130623 -54.030795 327.71748 33218.561 14.15952 + 3384 9.9269422 -55.107979 -54.000613 335.18173 33218.561 14.258064 + 3408 10.288049 -55.092276 -53.944629 340.71484 33218.561 14.36211 + 3432 9.9702156 -55.08732 -53.975128 341.72171 33218.561 14.452123 + 3456 10.246178 -55.091669 -53.948692 341.62844 33218.561 14.555775 + 3480 10.559292 -55.086917 -53.909012 343.70626 33218.561 14.645718 + 3504 10.652207 -55.050897 -53.862628 354.46979 33218.561 14.797422 + 3528 9.9835266 -55.0557 -53.942023 350.74747 33218.561 14.895716 + 3552 10.240934 -55.123217 -53.980825 332.26434 33218.561 15.023796 + 3576 10.406519 -55.093536 -53.932674 341.54029 33218.561 15.203252 + 3600 10.406733 -55.095168 -53.934282 341.22192 33218.561 15.303986 + 3624 9.9877484 -55.154231 -54.040083 323.55633 33218.561 15.398883 + 3648 10.391829 -55.110208 -53.950984 337.09219 33218.561 15.49042 + 3672 10.368995 -55.069591 -53.912914 346.82649 33218.561 15.582259 + 3696 10.362939 -55.109012 -53.953011 337.32216 33218.561 15.679316 + 3720 10.465254 -55.136214 -53.968799 331.22288 33218.561 15.773303 + 3744 9.8238226 -55.10114 -54.005278 338.12616 33218.561 15.86905 + 3768 10.205504 -55.101263 -53.962824 339.04196 33218.561 15.960072 + 3792 9.9589987 -55.118883 -54.007942 332.84318 33218.561 16.047055 + 3816 10.253382 -55.117513 -53.973732 334.42101 33218.561 16.148412 + 3840 10.262393 -55.069549 -53.924764 349.084 33218.561 16.235391 + 3864 9.7367167 -55.078288 -53.992142 342.48207 33218.561 16.329112 + 3888 10.171202 -55.134701 -54.000088 329.5847 33218.561 16.415353 + 3912 10.01925 -55.145139 -54.027477 326.65074 33218.561 16.526334 + 3936 10.053638 -55.038151 -53.916653 355.74893 33218.561 16.618524 + 3960 10.044055 -55.058382 -53.937953 349.01834 33218.561 16.712577 + 3984 10.382422 -55.099216 -53.941041 339.28099 33218.561 16.79941 + 4008 9.97927 -55.09284 -53.979637 339.07225 33218.561 16.904198 + 4032 9.6782319 -55.126143 -54.046522 329.0201 33218.561 16.991454 + 4056 9.6593809 -55.123677 -54.046159 329.89833 33218.561 17.097172 + 4080 10.442896 -55.141149 -53.976229 327.9899 33218.561 17.189364 + 4104 9.9571109 -55.08588 -53.975149 341.3746 33218.561 17.294147 + 4128 10.44943 -55.087946 -53.922296 343.09435 33218.561 17.387357 + 4152 10.040581 -55.171939 -54.051897 317.85348 33218.561 17.500905 + 4176 10.089442 -55.128713 -54.00322 330.29121 33218.561 17.588891 + 4200 10.316156 -55.123219 -53.972436 333.59382 33218.561 17.679254 + 4224 10.177245 -55.095671 -53.960384 339.34498 33218.561 17.770569 + 4248 9.7129183 -55.135335 -54.051844 328.25125 33218.561 17.857728 + 4272 10.231838 -55.099554 -53.958177 339.64015 33218.561 17.944226 + 4296 9.9737677 -55.117885 -54.005297 333.07248 33218.561 18.034105 + 4320 10.004955 -55.116155 -54.000088 333.52271 33218.561 18.129644 + 4344 9.5938901 -55.133824 -54.063612 327.84171 33218.561 18.215476 + 4368 9.8954562 -55.131603 -54.02775 329.0813 33218.561 18.306539 + 4392 10.439732 -55.100379 -53.935812 339.81679 33218.561 18.395651 + 4416 9.934513 -55.08449 -53.97628 341.74441 33218.561 18.484506 + 4440 10.025998 -55.136771 -54.018356 327.73718 33218.561 18.593946 + 4464 9.9304451 -55.101817 -53.994061 338.1801 33218.561 18.684011 + 4488 10.344371 -55.085856 -53.931926 342.91721 33218.561 18.782399 + 4512 10.033193 -55.091778 -53.972561 339.85728 33218.561 18.879666 + 4536 9.2361614 -55.169375 -54.139067 316.67597 33218.561 18.983667 + 4560 9.5786289 -55.179976 -54.111465 314.76415 33218.561 19.079009 + 4584 10.071651 -55.107218 -53.98371 336.10364 33218.561 19.163975 + 4608 9.9873098 -55.109348 -53.995249 336.03665 33218.561 19.25635 + 4632 10.143888 -55.119423 -53.987857 333.74978 33218.561 19.346658 + 4656 9.7506264 -55.114772 -54.027075 332.98271 33218.561 19.435425 + 4680 9.9616769 -55.096054 -53.984814 339.20499 33218.561 19.55562 + 4704 10.271313 -55.074522 -53.928742 345.87397 33218.561 19.642652 + 4728 9.9172336 -55.098805 -53.992523 338.06318 33218.561 19.734557 + 4752 9.9556222 -55.12128 -54.010716 332.66408 33218.561 19.83859 + 4776 10.197593 -55.095293 -53.957736 339.50067 33218.561 19.947471 + 4800 10.145085 -55.108467 -53.976768 336.05115 33218.561 20.044183 + 4824 10.205523 -55.147376 -54.008934 325.56559 33218.561 20.144393 + 4848 9.8900281 -55.121598 -54.01835 331.17401 33218.561 20.243197 + 4872 10.03655 -55.100936 -53.981343 337.6777 33218.561 20.336043 + 4896 9.8120635 -55.087507 -53.992957 341.42438 33218.561 20.425498 + 4920 10.615354 -55.093335 -53.909176 342.30776 33218.561 20.519318 + 4944 10.374366 -55.06455 -53.907274 351.10607 33218.561 20.612312 + 4968 10.677474 -55.147807 -53.956718 327.85703 33218.561 20.719371 + 4992 10.558882 -55.145253 -53.967393 327.427 33218.561 20.818726 + 5016 9.4097946 -55.150835 -54.101158 321.62641 33218.561 20.914472 diff --git a/examples/gjf/trajectory.0.dcd b/examples/gjf/trajectory.0.dcd new file mode 100644 index 0000000000000000000000000000000000000000..47927e9909cfcfc86ceb2568ba1660efed5834f2 GIT binary patch literal 439092 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 z zEKdrI1roSKf%OgZ#I2S?x^~DHPtM=tYUfEYFNZv1-aopF6L!7Im*f@&Vn3{bhbq58dfo>_DC)v++}x@Xxjj$F2wA&~E3PoaCN>^7Bbw(lbsw_#uhQG-#;@m}yGrKKKTkPF*ha6^BeEl|G6Ty$U%=0$l`~`Z z=}dg{&qVCA40;bU5J2zb$jTXb_L&_evD9-qn{l7ITBSYwyJP5kJZpw|12cZ~Kh+*& zL)VAY`JUTwmgoFQEA2Q$w!zP9cC5H*LtHts7m9GEbIA^U4)rUw9Xh2Qqt4LJSUd-# z$C4rUjQO)(Ir#RNU(<?cE+u{+zEp5dMKr1L*sQoL7?e5<6A_i8us zt>q)%_5L#Bi@!{o9w_mRJS6xYy}};8()U$>#EobmBMy?upjAo!R3GW!>LI=}d?Y57 zx#UUiQoBfiO!oAZja7ZcLe^?*M|x1;A|K{@%B6i?a;!MB#q<_-slYz>Qwof#l`qz; zJh?S0k360{c|omFJ+MHY^v##pGk>J^JbwOEz8rh4Krwxu1h^N-)Y1j==xUyf>+g&q z-ef&>qKD*?f>~0Bm`^!mvr571jlM|gIjfc{FgG?|;^>KNUx_@%GRYQdFkI1+7pTDo6Z_3RXmBi7L+`y7z4p_8 zm`ML3d)gPz2}j#G8r0gXK}?GXJP4&0xGW4u$AshiIt^~E4#$kb&Od^ATV|QPsI&6S{zk)|vO?5osT+7*VwQFry$fadv8U`( zQ|YmgxWvQtPUHmGf5KXXjLA zOiky#lS{_qznM7B@7et?wV`~@s{T;pJw-O!olK~2u?N1k8R1UszgWfZ$6uSwHN$_G z4L9qP1$NCwz8v+fs?7cd*%7;g8S+x}FlssDx=($D8glS#8%ExwZ`fo*iIbdvWiao} z`=$C*cD;YGV{cFnoJ{09PPE~3v>jK-MR}6Xx#o82>by^jWY{qHBsIwoHdt!g(U^M6 z_x-$=`L%(<8SE3ysNO$+T4OCCF7@Ep{|D6wUD?mWZJhRw{Q zF)LN;`F>ecja-uz?78Bed{U!CncOBtV#(1M%=utypH$IUlVwO5qr47grY@Otx@(D2 zu1>Oi3m}WJOrjW=b-YCOw_mvg2`y!mdq|R>O_i8(*B9C;%!2k*BIZ4{0~OhdJIK<` z_d%U}&W0Yahmze3Pk6p*)Lx0nhm~+y#xry(bF^oenboLJ`Kk(?Dv+r(%nwhl`r^<= zC02A|mZl3kKDRR87pOv#54)(_G4pjtiGJ1Sot(tH~3A;Ov5#g9DCj@KdbP85pw;8~`U4l$lOyeP!k zRY)|_$${@QpL@LK6&+_0n^Njqwb`58gemeA8z`bP&9eKX< zkWw%Y9(_5#=oQ*^--1pHxySrq zLA5w~8)N8?9Av?+a#l<}VZo}m79>);nzYM;m0hgx&~e{M%^~Z#1snGMKR@Fza<@yZ z36Qlr{N!VyK$*3+k$fAi zvWmXJ!YE)#iLa`iaJ z-|&<7eGB&3f#MX{Sb~^a2;JFO-iHT> zn~O@C_ap;x5j`M{%vc%BpNHDKDbF{f)Owo$Mnw;yFV&Ib2(_xepzq$A)$p z=s$?uuM3&*pw|AgtC<{xOcWZ!jLJ4U4#t0gzGM!%3?%!@jqBAqA6bx7UtB->NKG)PEu@&~D-7Ju)DlJnSqG}#aO70e6AF$W#W zKFkU_Xn3aX|D9*w+4*=*NBW1 z>e(}_cs?W>HQtgZ`;|SJ8a}H+$-2s5kSJC_6&928zsj@9Q zRjf(L;;v7YzmX}@mHx%@lbElhrvJJP*R5yls~GK%+dJs@Y)>zvf_eJN)CcItSp1P1 z!6A0%oHMe|)rcw6>BVTtUgf|P%op|$WpQ@Uls{82pS>IC>uznu*hTcCggdDxlKs`2 zy~=88mi6XS&om~Z}B)RC4BH9eUC=X74*%}KVzFp76R9~0Gadzu;A`eX0G}E4Cd>zmip|bB?`4ab>qfoQ)R+! zqb#O=HKQnVzB$Zw#2ICGGe0=unV-EtpUgca28a6NV=wAf*-?1YDH`qm<(hwyj4SGk zE<>rQdZb`y33@%Pe2=U~{NB&kDv~*as@eD&OCP@73TOJ7@_&=L#r5)0HD1H}6l!12 zwqEhQ+G)1rVrxzy9lDGuYh)t1cK zPs|}k>hYv5dlTF<5i%+hp6BW7P9(3E-s+m%&$s7Vabj-{CRo_*{Lzj*>+SFv$@NU< zCz_58rS%4K5hDVmDf=WV-w%>u(ezYSD3B9F74RKImhLTzA%E>{+f^oRK!*v$5nz=DHeEOISg!FvyUfa|V}hn8|}+4`pB`e)6?x z%KiN3mF$^5%U`cE%2_S0(FkcHWn) z$Q1TZ*HBK8aqVL6vzSK&PBe`q?~Yw`^VuO4xyL&CUU)96F)bbux%8XH zbA6{)kyv2Hg1*dpEvJ8w=lm%HayXyh+TPucDkbP0;2GxNDSuhEzmb?M9`ZSd+{!gU zVj4^DPrL%>emdc*8$I|F6&O*{8P(`RwN}<(Tcid)!^2UwcqIPat;O}b)NuH^1U`vH z<5l#Abf;D`HxA`$==olm;Y8-p9=O{^-AQ)@VDiKVBp6d8mSjS|e+^?+<84)ye-c0gY3 zKqV&d+33HC8Tx+YMa-nXdz}t9j_6?KUfuSd>%|}=)cz?LzSD?7Cz%PN)*9c+2>VO& z2iIEBEQEbEMXcEQgnQ&^*?3N--r)=EQ;r}9@u)%_m_jb%5rw+NQ?8#EIs2@zPr4;1 z$(L(9e`Oe@{Apht-l{~ozRU^GN7%E13a_U4;Y%SMylgsl?dTA9oZiYD9dw8IoDOAI z&nou9o#jmOh7nz<`v$9+W#Y4W0iQv|>0|u&Dt&v;$w}w_dc}6~^|BRe=gsuw)5my< zGv3ksdGI1dMv%Gxl^l>h9m)QSPLXT$S!NChK%cVoFFy9ghu>VgnyWBzl`lGZGRxIf zhXcR(njFyKrAddRCDg%dr6Po0#_PE}YrNzQ!L{>4`c^}%$7`bryxdhJAJ7Iy8IM?7!NIk#V)j5o@!I{W4PkyL56%@2<> zO8C%c>31jq8`k?{vx9R3u2;{!Vz6jt6m~X^!4mF0s<(=Px)5jXZd|*leLJY1H{!YG zKORTVDCPmUhN@Rmvz}-{=~(tS`dE?Tt5AQ`E7UzWyL4TkP%q>D<7X0imU9f^5wu^P zk>4beEKl6XI_A&wG{+BqyU9to!VUp{KLoT?!8urkvi~rv@Gc6k=0!vIhU@!A9q)5` z3D?m}xyXoX)5!WMYNU6H8M7P%44fZM%VHPOTq}B0BVXxaWtSNL>*b^_NK>e{^x&+D zKbP!QsQYXoKZ!ZQEm!u*_|J**fY;6iW)Ej}OqOG_=wTi}~V0f0N>RERN~v(^<{_ z)}wB6x+XjC7li$f|E0wVa_(};NwmAkl|Zg1{^4lZlfL&s={Pyl1_eJJ!ToKI6=gId?{8Zsz*Qz?b>5`xi>^zEq}fXk{^K*7NC)n_|PfV?NUFa=v(d4?}*3 zSUi88fhu?2!#KcKJZn-%+(G@^v;lqVlRL(Jy645(a~1{qFv0>FJKRB!+O%Qaju-75Qa;p zSZaJcZ|<{^o#DdXbp;;XV~_TWI6O;ZKQ-86n@unO-8>1&3Bx-2zjQ8UoZw#FIm|~A zsi7X=^SpYESRAjJfd&0-SVX^7ZpI(^{-qc4O2y&>^|f9D$UPk6E^on5|w6CBTVzQed!T=XDc&zJA}VHaub#7?i}?7KoNHf^Ub zEX#)Pzq}~Si|9%ubu+0ZB)>71u%qcf2E)`qqIo)UOHUsi3PpN_BFCuT^l zo&n(O^~Qu;5smTG1=w#K6G>I@t? zZ^LqOC(D<~mjaJ)tfkLRj%J{tjoR#SSIMFd63Kn+(HF7!Iwk{|-}vw4+~8f~d>PB< zM#9oqc%I9^_BwWS^{69ty?C8$WS1E4Bkyq;Xi}N`p!2>GfB28Y_S7<)t4GcC8RXB} zvC>*sR#g8hXHvt^gV$~Q68!n8i>#aHA#0B~(VNCT>v4SF$I+*m#M#WMdh*Ud{vhw) z1DVXc9LwO@*3KMQU9l!R z6zWxJ)*#F+uP4=$MmFK^DVOXm; z1P{zWwNf_Z@ZUR}zVE)g9=e{|Kz3gS`gHh@=k6wR{uW5Nd0}w#j)U=31{x*vv zSC;~b{Lu^5ij#kO(~NIJ>e<$O8Rvcn^{fCw&KeU;v93)rqde<=A_aJ|^H+iN$^i3ad zkzRfUlA;d7>PNAdb07oHH!~NS;wh86A=*~ zL}|$V(bVOf?Uyj%DnFiZ+<`-G|K%R2H@oYw;T*Ydoh)eYPM+6+WGV5R`<2V|@r^TJ z7`4$m=N)LqT-`}>&35s8853&2Dqs54m{I&tZjWqytitBHI_3)K58~c(lBWZ+WA@02 z!OYvGMkB_FS^>4vsv{KYX)f&1*y@e*g}6VQmW!yV>D22M+%tYz())!-ka^Iz)PvMpYq2wpp2a})JR)rb-cU^zO9_l4l zY@f$HXnW2YzWR{s7fpN;^De3M2T;p67`IpaN~)l{&3RH~!L*JY_NzNtu;=3XWIYY?};OpO=`hs^2`m=s2@w+t{S@b4Fa;SfcqsXR76+C^?Uis(A2g*dRi|w-!X{-Qzc;_WMUqrnNPi6bnk%(p zr_y)wH&3yjIzLh3&eI21Ga71@0dJ~XFoZfn)ka2U!F@6E#XMZ_p{90~J~ir7Wtt?* z`KmscyC(|e1{h$f#`k?PyE9Jgk%#T60j-XP|J7t%UPxWPIJxosITye4MT-$pSl^cK z`wI(d^mE|&0QPTvWv7+rJS^w?zSGHqe+JR-c5{#H`bDA|mG7E$Fem!s^pRtk(R&O19S`27; zJPY%?E7X=6MsfM3L>~=%t>{y^H6#n)8!Oa{&L@fGy%PI*CbPDrU#uv7$MpZsPu?Rz zHGQz%MTc1GR;`!O7kN>kzWUQ3W4*{vTgncUk9=SLdp$=nYrAN-#8o5Lg7cO(2iebV z&qBFP}XY<&0M3zsm?-7G#mj znVGOhJeBM|`zH$dI}P~JfHRzS3U$mhdb(zi6*7qV>)vGl^ZBrr`K1@^i~l*E{K^~i zu#)=e)d+T?K%tHpWt66`d{LC=oie`c89$PRv|c6zAH!p7}h{^Ez+L`OgHC151`A$v}FQ@R-}w6U1^JEiAbAB?6idr>*&zk}F|V&`*gS%TD}ANe4!^Q-{+RkN968nip zU8{y*Q17&aDuvVgIBzpmS=K6T$IE7?4^QkI(qMqr)Um94df0`akZQ~Jnc`oqO=}eL z#uT+?cgVa0<ZPcC+SVQ&n`$eS(=*iE1WPbZvD+vTU)}kxmk3} z27c>J?-~?04fQMED$LqC-RF6c^zq$Zn)aUgVw(47uQ*jT%I0>7@`Rm7Jqo4BM}LEy zy`CsPwj0F3KEXpN3|)-{Zuy)P2_QJu&Q+ zF2C7V{V7=vv@%FmQ~tluD>=X@dm5yQsbrEQ3`vs2Hp%jgQE+l{hkh*J&bshf#hgtW?44x)T1!lu&ZLI^^SrV6t-ta&Fyt zDm$W$N)+wO{`Sf$oLxtjfH!lie4d}-v+sbPl3XZuqbsRFKl4TBPfF}o`{LYvB@89` zY(K5UW1i{9^Y17d${vrq%y!P=Oxjh4t`Rz<^IH4yD~b$oYDC|n(S*LlhwaJIxf_kT z-FW|AB8!JU#Us7B=I*4ww`nvoI?^Y;Lx-%_)U`L0F>Q^;_&YI3aPWHOvu|{R7)+Q< z?cKuX6g|FSBXoH5g!jOl82mk`L$Dj!kiOCIeZbBK-ZOqr=xOiBOf9eZliQgiO`tb= zz5#{3jF=H)K&jbAOf5!6LnksDnljT#c0|ty)MGN4$DL$kM;K?!Ey-}4$~pHeBPKD! zQM{HBu4XcaFVG{|jvmEjoK3%Ek3?PeYYc<~nLwFza0wroHAGGRz9^MeGMWY{9-#R-C`f`8u zD7=w9DaR}rwloV(66t4jq7SNzw+xNgV-f~(L-+d z`%2z#cQKr*CrhkK@jUE7t;tL5qo~DqttXkSJ*C1)ABp#@E0s_C%B{BaQdL(8X1L3V zRQj==`pBk-?9H{)w^&e5hGqLn)Gl}VSXL=JyLm~4a9o86sX|ugn86kT*zsxQ<>-BCS(OvWXG*ff!Mk#Fl`@MK~M9g$hAD_ z|4@OXSqiAu7f9>Q`I51m9>;u#N$i-Vkx^gc>{V{v-8x{@IfM@HO!4H}#X$EN^xF3hI> zU6WeLP%Yl1vA4QMIM&zEvbRjjjsXqE6(J{a7W1WQb_2C%|Hd3WUgVJrUrCSU)MHjZ zBxk5Ny^C?NSg|4w(>d?hRGqV5S3QQF(qmmmc1h3R?>RH?NncfLV?CB~?$GQTJ4Bkq zVaDwLyjkqs$Y6KXXzB|M^k}nz{YdNMV7||D*aR|h9>R%$mQW7!bP+a`tjAe=68}sm8;a3Sv0^^;5qc|H?Wx za6F8ij}~?`OtrJ;nC$nk2 z50FdL1Ebdj%EYHiNxWTCmX-67uH);;p_fK94K#!`pbFpn5wSw62l~K`C6Ck#&>(66gN-4oL`QQvl^ zuhB{m@<9bGYn%`;wtfiAz;d9zxJTgSq2 zX;L`wh-dg^)H_>~!MKjy(80VnYisdidj!TRG^kOX^F7{cTa{#Rz1INK!%^*#7DqPF zPt1EN^(1*K55n;;H9KV|etc6Tp5N8r{{NnBaY#5Bi@ec# z99Tvjc>#Y<9jPnt-<`YocXa1mYZQILQ}j4oo!-b-_8kJ)%eTZl2E!@O=Ba}R_VRoFP{`G~LR=Zg0rJ&c5_d$azoRjin zddi7kZ>5G;%Z~h}oYS?YKZ*Cy9=&#hzTp|R|M3sEZD$Q0T){u&d(RK2Tbx@J((L)ekWNE> znq0qTnkI z*|=-^oiCZDmkX<=p9pp{O&{$M@}x|Da9G8CY1`e>Os!rYF~t|ZmiG16YSXcOqtiBO zZkqnN**twl-OncNl+C8dDF;J3S7>h1RoyF%uO`a^za&YWoGPn!8RX#PBq_TtNlY#1 zQ{0~*#ix-~w32;jedrPCZCS*a2lX_Vj9Q)ST91gW&1U*9@OGD`221%FbcWhnm}yD}9b{mAJl_Gs7l2oZ)`YzJpo866{L|V1~t0hbA|5_+g9Y^EL|hV>+mk zxEEYWFXKZU8hOW{RCUfkgLRnQl=Ho@^g$LxVeCO>Tc+!f5v9ZGU1T*Dis2lXXYl4a zoaRi)dXe1jV)QN!kH)r}(U`Y03YG#L{ZY(cF4y5>4%uO^$>G0az^!2RM9*NB?_UG9 zIQaVrBMy!-;@B@E#+4vIk@wi~ zyi=!?BgxzkHgJeHSp>~XDlnY;!lbbZ$S^H@`h?@+33}c4Yf*C|y(%O4^KdV7;T3ti zd`_SBiN~{xtW$~vXirbx=J%UuQDsNrFe9RI2DF zOWp*@^kFL2+6Bt83kqCaKxSlJXWVE}2z9zSqa?2>oYvy8J`%luYY;&%hO$*8bgv?z zxspWy&?bGlDaB_2`_k|ktroklJ2M0Dk?Uw* z&Q#l&k#Ot`zWU~11^1e-Ds!K@CGt}T`QafW=zvmJDJwuWAZBJ}EA z&|&vu`c;xs5HgfZ+m`Gv;B)aXpPAn$q@d1J`Yq@InbSBMk={HH`|;=E*)*h~lRCbZ zliFFUP{+QcZ*MNO(x(o*TxFEzO_<-DwNLB=66D>+6lt(vpA2^Q$Bgg3C>Tr~f?km8 zZTv9yT>zHTYcZyx4l{pKS6su)@3KUIPtYu`O^>Mhf@=*=#Q$3rY1Vf&!&&iLa%+r7<6MkveQ=s z^gi^VE->K3Z6hMMCcNb{c`DhA8x1_8`(&eOC$h=5a8^;=Nj=S?P_NgsuaiE9u>+Z5 zR#8`fOF!&ldN8ah^3{Kz6n@P8Kpgu+W^k>p?}veZ{V<6?k2kgPoDF`sRVoInE5%@2 z{TN)X6T>`e3~o%1L3jFhZkvpl!}rYN3waE|WD#6W!RDIx(7n19vXUIK(e%#0wqW2Y zE1v9UA2&U)F4XpiQrC9xr%-#5ljg`smA~gxWLaveq*qRn1;?4!ZImphI;qf(np4dm zHOX^pz{Iy;%&36=f&*&KN{jHUKJoL9TDWX z(J$D5d;L?~v!}8r;h-KfGwI2n!M$;7a$#p@!btz%2DeO1{%oeNnLNgx}ph%q@9OVAG<82?Q>Q-0&_VN?;aepzm2FZ+#O8Iot z32o0R;MYol_He@Aw$AVm>=$=hh&MtO6=Ld*; zYgcKI87LuJ8cN-4FR9ltK%5Rc;mZVv#CtiT)kkMEpjWS&pEGJ+3`ayFnfq1^D$da0 zPbm8_m^EF+nS0B@ahUv@XEVM=gScKKj-_^ykco%C&3N4|6DP^8%w-mH%Xc%B3vy6U zEC-voRuu1NN5pNO<@4E(Sk*_4Uh|QG>x1Mbxt)Kls{kt%%Pd7l(VGmgDJ3*kZ^JTy%EiO7VnD`?S_u{o!oT-K5JeiH$`?y-D z?abFBwGp$d;ap3X>QSvJ*_9W`tU64e%5r8+$J3WTmwD2wHq;DaZjIjDgO_sf@}3<| zVPrzbr^>oVDdI+6#!hVVOva5KCOx(OrV)*)0W#9EvfBGvMsE~Pty>(=$oN^6> z>JjIchq;cn=If-OX0MEakD0yPeq2k-q+k)xKtoR$kxT!%d$kkN?J%1Z>e76jZm_$cYK2rOvM@#N`_o%ln7xieQ^ia# z!?buMUI(dQxXJ%jxHQ8BoyWfyki6ny8}Riz_Ynt!SD zXVcsGl=H3&T({I#*xa+Z?vj18$BN?IZ=7%Hqz)ZJZVRs?U#{zKxYn2L>!d#VIa#a+ z={>#4b(B9-s}4q4M|M(6oj;D=RwAOiKj*W4P{yd}Kc`1FTE|XevK0nJBhQVm%VHhQ z^F3^yV}v{R8{Ii`2wu&3Yd{J{^P0Zh&dRwjJ)WM~Sg&R$Wd9yy&2cm|LbQQQQ2RH*Hw^l#6D%_dVG$sKl;pj?C9h!RYw%ar)e5Iz05w- zml^o+o4O|R&a>EeT@Ug7hWcpFqb_>i#6!6CKiL+ zQ=g@ut2=pivt0`00{tveK6;EfpMltKZG6~C2vvS^%!oO`Ydfz0dj`8McZH>pRC z;rZY6WAf)LMLqXM8EQPQUFFo}T&eBEY;!idPq=PWiMQcl(Yo>`@voG=K;8Wj`()?v zSy#(`cZJzUmHbB@Um;I$QXFceXJAt`8=kImm$FR?V*$m_w(!Fh#)Wju(`u#b2% zwY6P5Z!&K%Z)g}E{bp}(@l324L}vd!Z@E;QJhjeYP+g40ITL+nVAiaOr)08Mx9H5C zuz2(Q)Py|5Z_HSnR*E$-SJH}vBWF-79>&stx7dc(PdKYNn=kLm(m%ML8fYgoO8VMx zt`+;cZvB-7^sx@##7Uzw)bF-hqy&D+b&w{WEP{rI*)K#5`M0m08bSshQ{TMa+FN$M$P@p{WK{6)ozN}=&6$CyF-0j0Coor;%wFbK zu~<~b4DIIk*fpS@d?(-V%#$z_s>Zcw6l-f zU)(no$X+e|bVXuOD1tflIrQ@;(eXx17GVB$e1(lhb;Me#V8o9v*Q|+S7(%5#Hi2`ErSSNRRKa2vwUg;Ue|p;(_8m zJXc=Fy0Uz_uoPe*;F_mg}H;`6XsP%KV3 zGO)_QUZ1w^vW?t^V)0?HD*NG+Yob=eags}HiyHpdoFw4%bT&n&xR3v9gfs1 zkiwkL9k0*Mvv>3l{vg+KjhEE+;GXN?Ww!OoM9h5XH&=WYRcVJ`7&n}eW0;%=vjjq zVEQ@($-O{1CwTBW@5BA=?_C*)3gs-Ss-N_vUvft|Em}nI-!;X|t_d4@>*~m~?+VU2 zH2BAj*P)H`fm77nJ9$Vgvf;;5+sL0lK5tX{$`jZ>w#8lS*O-k7WZ&F{Sd4qk><#bV zHOX#LznX$PNM2WsI9sg7=PGsl`E5L9qbgS}chw@jv>uDUvk$$r9lw_tWrY)cQum{9 zhv&;?n=RA}=%1RKBwUh=g52cVe_%1S-P~l%ZbRLYzOAO^ zj1s+&+DH-h8aFj!%>e45-yEoOB2iX)vpe#AG(v79qgw>ehw%<(fD`4z1r_cxk8%2K zGR8$&;6iO-gTo;AnI);_L$APM10pLh>rg_Ww(99)s-i+wRTL)AHo{xUK5ObDl?$iJ zS`YeVF&b2-V5r8&OX?5V@f>B;zhioUJN3ia-@3G$&neT6M~-XF=l zJoiJt`SsJM8l`1>AN=a9!~MqeC3WZAKAwBng?r@ZH1fg@%){lNP^eRSCCYK`Q><(0r8vUg zVQ2pQ%xuK=OOgxZ=(XePTv$u*0=45hJIFLoNS36H^o0!4VM{&cbt;lWM_=CBrz!HB zvx1r)QMk4u8E?O2!Dlo3J2vc*xB~jo>gzBk$%xRxWG}hVk69-{rZn?Lb?)iQj58vp zFZtXF4h&7&E&ly{aI#Sp>YicdWH?z&l@#iPA_n<;*@v?w`VH^${h~HqJDGjNFh~OP zyH}6QL%B9aJYP#6-)QT9oiN*Vs;Sw zXL%;jkOj7PJAEyUqVX}3Sz5l2pOgyqo}68xDyqaH?yrOS`hQtKZ^S1D)`#sCiSxmZ zkJQwb8{itlp5L;}X>vC6v$hgzzDMC+9<_Q6b@R96=xGvVO}HPNsaYI3#F;^3awmD6 z6ep{G+;k-ZUy;>aiZh1k7Cch$dgx=6o}h--jXcfjWE@c6@9?VteM_>Ji~h0#8)p~p zMhrh?A@@k3E=HeEZf_qPeM#RLIen#^$d~L(&4;s|TI2?%X6dkoGYjLCEbO3PZ<9S) zuJ=}9Ri|iFh&Lc`D*dYb`VI#AG{4a2+n>E0kGLltl7*N_4rG!$ndHpQl@HN)zJdO` zUs>2s|LM}mB*GBVeZze%63a%F;Cj8r1FoDRQC2K4N2 zfvPTjWcA2@bWvgSa-Mb0GaqHP;3+@8xln?5X;s+%G79axFei@!I{#}zSt0$$K_~j;dRw>5n1l-=!Z2W%9xqtB(g8N%nt*ub+VvuF=m`k?v{&#l{grw zLyKw#Wa_g}jJ`!(6lZ$%__|%=(gU;ikQKK+@%BQn1mDh94qY2`7%m;(}MxobW`m8M$TR3Iu?q0A|FqStJDxhRCVa2`fK=8ks`R9muFn*OUqDtWAlW$BsXd8-$n+lMbC zN&x-5$xY}18*0GB;QusVYMJAc&NU;W@pwLci$U~9@xCz5O_0(b z*#jOLg@)~nID5l_W+N2p!LGcIW_qKcL5HKO$zu(rAM2b0lMfkWYc6}wheadk4Y{|4 zt!P#Mf6rn6KYqp=mUX6ywKkaUeA$s!pkCE-SIdzGzy~ zrg!?TLW9%q1U@jO81A;b(`cosO5*_2$F&1Z-y}Bp%%jff(ZTgiWu^{KUtd2dWYCRq zCR4jEruwnGAIL@gGBQafJU=L(dl+OvcCsA)nkWyirpTs+336!TJ}Gcck~K})@x3lt zf*S0X)$}z#p1Vf^bIH;fW0aztOYdHmC`niM%CLyNQg%U-RKB}MUY+3gTaqMWrzA_* zd1?*RJYH5zl%Kl|VjXOda}AQjXU0CM#_Zy9FN1WCpaSo#AAMst$a@OXC}azTn3)&pD*&m@fk|wt@XuR&uA!@ zM&mm*p_WIZQAJCCxsU*E?%ya(8Bd-f*YvxiqHvL3SS>Xq zU9A`_YZQa=L&;Vc5zUSS<{iU1_tw+%C|qYak8WNq2LJNc%G2gi(`E0)U>&=obhy}& z8P+_qSeKDUynr+9$DHr1pf5a=p6E~P|7&HyMuib+oUg2%$LG)nBVKXdbDp#3JJhZm zTmu65@gAj8Q2qhu47p@Daz^xb2^rX25A~l7@R(*mXX-eMK<)(BhRwS;i}+x~l^I4X z9Zuh4X?6SL2#m~Yiu$e6UkbqV`JGWofN?8D-^dw-_|>swn9ev&NbQq*LwSm4I}kn1Qb z!hEe5*NI-ppINxZy~>?K%rQ5!;O!aS~zT3bC@_0yXvDI=B^*s+M`OaN-^mUg}HGRcexvtb9mvQS$Ul}sE zo}_jNU?-59l-$VvfXe|gj{OMJ)7-@rLC$>{cjl8C|uGW(Q6rVjfnf2dhcm`Y8ybgl%vD3GwX3cTE!FP~@SN~5Jt zxYwvait+QkBA7pAANAgH`7)xv6L$Y8peHj={1Wm-v&JDqiv5*)$MU5I&(rnn4jFcj zJrX53UtUuPqu7f(ZHN>5gz2v;>;$)Cxe_tL8I`*#@aCsOE^i9QYHBj?A8D~+l?J`n zhU3Q>`V76aX!ApZMu);MdVV+}cZK6KXVbF=hhq%SXzF4byxGDIK_B+hBLC)T5>B&%LFCphDj#kV}UW-HPz&OlIV?XpbYBK+w8-Fmv`6LeY>6eiKi}JvY?-cl)L+HkfHCwhI+Lf6O#jvPICMS4IZa_bPNXu^7@)^C ze$C_OWXvVRG4sOCrj2n}wOY@4I&*J@%}AT4$dlwDUs?Sm}2I&aKa zIx`ay;p_@oO&?YWGiBwO^*_g+ryTZgr1I;iM_ryyrVVwhfj#NZ>R=}4+YCEBSoN2Z zVc&$zxYC&jtz^b^&rBpNq3$#}6Q`-)JgvqVNzqJn>}bY;YBscWE40qYl zqZj!})JSfGk*B}Fh8|~aI9$?>#m9JVuSM2DU-E!AqKKy;sL9!gEZxrg8gQ9x&dDXIG!7%n( zhxth7I5!En*jP*sUzvZ`Uwj`1NQXu$DKtbWFVnoFprx18ozsx{1b0b$7$k>=QG0k$ zU0UVWWAB-}bR|P*(F~Q`Z|@@JsrBUGK_4k{xvmtM;wnz_>dD)C^`!mbda|*&mq;J_ z9KCsVc6f?1(noeI@f4%dM;cD@5Qk1B4{AE2REs=mb%@$fP^FKT?SySos{nE?f{72Ru&-4X-VvD;&} z!VGpNpkgaEGl1O;3@UaUrR*+dz)mE->wMnpy}p0I`vVt84h+NdJokO?z4i*~rpvwb zhh?lEl5_mAfc)N(oayao?~g6}1F-3U7Sk4KQM+v*4i3@c>pOpJi2n~8px5GdevaW> zYitk>G}0n#VgSbPX71OyAjA#{#IF@vbm70{RscSAXC~MSu61GoS>w2dUeOydBMiZt z$TMVLue|(Uz8rHj#zdeJ@f3%$Tn9@c{+Cl~oKIYE4?QiehT-Y{FeKHX-t;wjiQmHU zOh;~TyKu}L%v{W|5zvhxmbZraom|KLSCG3xET_%{dV~?XxzwJ%sCy$YsSJHr$)#*t zD+0wMIb$ORl(vjI>KPUs=UN!Eot&0Zskm1o6(OM(I6Y%_$Z&coM$kj-9`*Y9#BT0e zP;nsVtHd9dldrg^CMZbGPd*0M-5zpjJT6+$^$fMC?QHP5M8DD>e7>i0&bP$|-ziqy)=~?)!-hBCxgNOQ zIzF(XD3rb(oDD|RBo}Ep{YzblQ@*jG=}mrYr8i6wzjnq7zYgREb8S6P(65TT$5A%w zP}g(q>|_p055BG!*YgP*Iy|@GVhR3S>0BteRtwMC;PIx6*|NJwr_YH;I=S8{bKN<+pS9ST}#*GHoqgx zuf|U?Pc7FrDPl-(bJ3x4$tRlDN$x(Obn>w!wUaLwI3+JL9WoDibkRJmW!I!9lUMmD z4x!W8;oaL^t5ZF>akH8}@6%(=p?y}FI}h{i7}GC7(muyZhACcJwTcscKa(U6G05OS ziK3z=@LS_(xk-)QO!_(9I$)9w)eQ2hVXQdaG}1fOAc21wCGU$t3^{RfZ%4Gm)iFpY zJs$hV9+b)K%^E^xuek?B^Ezb<88V-bgV7+AE1tA1M@-p z)6m-`Ujyhbu<=gTt4aGn6F2jI@HOK%Q37rv*ex_FlZ|4xgFHD{4(P2 zJR{0ZWp86M!o^~O^DKVcpda^S>cf6A6W|^B9vLPe#)zlHPP({LmqyMek##~*6g!O)Q?AL;um)OdGkyY@r-yp5#n&|O>lFe{-rdrnLS4A{*{3# zYWCRdw`L7u{upb(T^-qbIZ%hPp7X%<)Txvr@6a@KlQ?YrU1(gik ze|U}$38v0rYYKjy;(oTD>%M$0B0rIXLHu_)*MIAOnHRO)U6wLyC?Z5HgT8x7@E{lI z6lpJ8IqTck$&OrE`f@K}PUp-LSny4O(PeoKybMB{z#!CXr^U-KE%{{34ffnlJwgO- z4x=}9GjbWTS>sF&$GNBUYI;sA{SS2$OXx$`Jq6#mhtB2xHpep;6|3bUNo-j1gtL@E z%oRIAew?d^So2-PEv$vy4EKyXb*?#1#m2haXW_vDZW19`Tl= z4qj5>iK{55Dy0!?kfb+u7*UIu_)l^y&ojGoN}(wG(UY+xXPAcq|L2pohu5fbPoCeb zNz1Olu==Ndgl^cf56T*?-(SkC~=_y4H$X=&ZEM(niS3eb(A9JS2XQynVTzqDo zmh+R|E36N1lmC&FrWQ||Qd}E)O3!qqDDBizubUl)k^^#MvmJK((NnWgv8)}d!2U=- zj9sFItpl}7*Xf1wJb-zSoZS=kC6LoiyHL9HE>>X zgxKLz<|@6(MDjL;rtqjjbC0tRlZA5^UwRLQ7h_~^qnsXhSW0e8kX^xv(xR_X5{Us{ z7)L+j|2P=&9vHGz4WAz>Og}=8_cjkA=#Ike57RhBC&iR9RDX$aX%XDJ=O3p8w7AMGn z8%BvsikF4&K6Ly|5!HYbQvOlt@Az(H__K^2?XD5j z7O7YL5Vx%CT^2^*&Ol}>Byo@4#QEmcaID`Nf&Jv5edO6S>JW8J<1EPZOo5rb z@~l^!iE46Da~;pqZ=B=)SG#v&9j|bcFEzd7Xd9lVEj=XjmW$lz<0wZ;70aN(3IwoU zJluzT#%I)GljFujuEJm8;)^9Bk+y=lie}Syj{qF zUy+It71>L0A6&G-La)6PEM^~bphO-*^T^kTrmwrR4KC~z{Je5ey&HA4KU+v*xVJnj zQpv0m_R^!2QcBlRU4V{D%s)b1ooa^3#8S^K#bn3#cH=9s8&@AhkVXgHwEBo zPihnPY)7zjIF_zpo+!`w`Q0L*CJqsJfIUwP`=jOb0IJChiB>%4|4^%Nl;>y`Gr`$| zRCmh7!!n!;A0gkpFExY3Zt|?Dmu&yrRs6{NoYt5=h|C)3`n8z4i4r&;Tr7G2eQlOM z9C`-vZ)dMLB8am_@(#*tajYN=qu;Ri+Z>KJsq7nn@GK=C!MHsY?G{}?M_!Xhw=9@= zfb;Pae2!Y@qE)S2Xrrjh3eDuocA9j~hkkh~G@qBzbJ)uyw`V6xJ^EJWKTeQ@-t_X_6eD4q z)!0#2jU;02p2K;zHuk{6vhJ8VmmKp6p`5Ale4newxaFbftO-TQ?09tENneqRMl|_q zz-u*i^2g~X&vT-SJ^AHBIlt$7dCxQc{2+cFsnFcwH9EpGBa-iDM^}Yr>2QUnkB32K zHcpgR)KUD?!64yXVkN%1QM^m2QS*=o`$IJ@g;Dz^?C0nM^PSv#Wf6O}DxoNHLDgP7sUp=h|*~(m(W51=r zLO+}#{=2`q1)Kk+-&q@#^q_CxmWRx5of{6_&=e@!+Tb|7sr=(yBt5^7uT&-s{ucHa z#4*E`G?bPj^X18QEjrc<$3>oT2+BbY^HtAwQ=qMvKMF5Vqq{MMIz9R`PHrj(cIQjV zZhw3U4ad;ZDcJtUirr!_6C;S(6aS8@_J8X3RR^tT?e8cqwF{+Yj34@Yhr?|J`wL=3 zE;;sM`A30uKK^(`o}iGI*SxhAE0;LQfVd*jt`5MM4LoCJr{MC@9D4jXh{|LKwVN;N ztT12!d3hD7tA(pf2r3Y_CjO{)in!ab3wXjhe8)6LX`#xO$~u2s{J0JGXIqf|h1k_0 zwUiGmkQ$f#5VR!>;V;Q=QrVFDjeNI@1v2@K9~8zgl-ZJkW4u0>u2G9XEx4ZghuDE( z7<-p|x0_aM$aR$IN6B~VOy1l-VHh@^xv?j6n8)5!irW@T{WL%HNejcpS{97EXT`fS zUefVLp=`1Q;4XP~?SCdSi;F&JHI(wFk^(_v>7Czzz6Gje%&KO?^Z*CR^7te6aqLeX zGsm`X3T!*Am~opt%9{CdGLU>LS7M2$lJRE%c}C^QKecC0PCj#@^AFRCZ8SGh)*07>kfTJAz^;>GM3_vq2wOpx;g9@*cq%#s>lLAfeChg-SJ0A0Sk{qB$F6Uo~R zO+gt2J@<1QW{xPsz}5rtrq0ne4e+C=U|-a5{_m(I4sixrF?|+x2DC zmI86!7(k9QpTme0G?-~cp4LsyZz+-i`~C2IAu}u z6F#4xaxi$EqjXGRcECk?WVdB6e2M(NSn6boU8UVn&a}uo8`LBmKIEO+X~p63Dk)Ws zzc(%bk$ag_+>AaI0n}b@Qp+7aZ*!*mVkh^3vU$n4nq@^jos)Q_{+3y3zQ{Wk1_#cE z{4SGs?Cm6PIg|LZ&liCfu50pnyFAN5P#u-5YfvQp>3ev;FboeDreHO%=e6Dra`1DJ zOlr?ertmP>meaS?9FoipA(pkCP2yFr+8L`keRcqOY>aq3???%0Tpju{KwZqR$X0P%2Noh~dfN}JFpW_O{WN4c))d9-G=t$eYdK|eWr2%265)`%fW&}SF9L! z!A(-Ae<{WK^|W0CR`I#gai7%sHD?}}g8pcJ*gY%E z^2F^jhERXw+e}^!{v|In1JI%;pR3LmJYH(WsM|*QKptOuUp@DK&dR4}pfziOT@HsN zk>`4ZiaL@^`l*qBWU0q9ko+d^no6t*(&5fY1G-PiK-?Yjk~SO?dkej_cLt*YvD)9~ zGvPl+q4~ZnN^W#xW+iiMm)&9>aYOQ--r(om}JH9j^ z3-7NNHNtJzC-D!R*~LFtT&p>P-wcZj+O>rnUI#Y1Wmf~_wLKUs6EB>Rw92V zjy$hpA@rs&Ag&MdtjUj?(mF;a2e{$FsSqd>tfh8mVA75v4DTE#gLW&?)tA?80c$>D zB_H^At-ELt|Hi8S`M%XYMqU_kf)Dc*nljYz%)G+9V2chrUm5`Nh7wr!eXK+;gkU#R zptgU^83R5{Brj=SF{YM}mHWqBQE^fT&i*oBR3QD!{=;F&IjQ_ciJMLIsD6=tXTcfx zR8))~H{ztjO!}Su2!=<0^2LfXuyz=0rvpa$o~|UnS%>kw{x>RT;rBnpa{4Don{i5H z#0F!^5+l~HW&KQkWd-U+_B?juEIF7Nea!9HM87BED<7Q=5`4fFxw;TsSWO=Q@(Tv&0bLdnL*V<_-9J|D7~EhQ8j59V6H5Kg03H?N zOp`cyK17LA+d`1@jd{&&Gti1WJCzIdF4^SR^y2&JORc3Bb+F{;J|G|H`Fv`n?gnG; zEFsMeXJP6wixB(NmuqX>@irsn{H-6LA<0J`M>R0 z*Pdn#+iC{+n+Gz`_6u{m1EZwO1to^n55Y3>=Bgjbz>Ryw$bL${$WKaCf2IH5^WTC# zi~(DV5iuuPRv%NM;I9675tTmt*V1vDA4A;|L|!$ZW(1$-a`bv2S)(P?o zml&mJwHtcw4@SEZMqE6ffioV=+$k3$8hX%qwx+k-A@Z!b-xjVcMt?Ou^6rwKs13$A z5Bh#`U)scdV@acU2|cGo@N*sZai5HxlnMLZ)SSJGmrFl5zxzi|Zw?by{>Z?H2gS(h z5hEG%nD6{y3El-#`@A3vYupu@SB;{$-rew}OE9Lok}uUR3%X0iX!s&d&JUpPVMWg8 z%Cm1=kb!^s^_$ey-S15=mF7Cm^Nc7lkoye#*7Eb?CA*_Lx(Bi!-^~8?B@9Iy|;%Q;4rjAw2&*YB3uJTG3mB7nVe)-3~CouRKTG0Lm-b{WN9Eo}`w@}j9N zb7Vddd##;37fwd1*uMm0Ux)!N!^w>bD@NO>SZVu>9JvE}lpRd`{1f?=-2eZZh5f(q z8AlyG*{R|9xQ@9mw)&*a+-)AY#kc*gykwudXR>^9mX-9WR;E(N`uUcmnbWFv+!kFk zSrO}uLYd!D5u7mFP{CH|yv-}z{D@wUi4Do; zCvL6UYmhKzKzq3wL}NC|raCc_#5r_HdNnF8$IG3;CZT7GgnA}Qh0HkS?Zir?W4sjj z()aQ?IjSq;Ww0_v()fJ3{)m&hwpjV1F^X$l@DqFd@M>3A)oa!^9es@#mTaP zhdJjl$@e<(Qr*cYFV4ryA&{$H+YK8lso?LchK)1nZ+Xm%5YCf%&J7(;55>lue~foS z<$EeDq&MT+5c(`CRZw%TJ$Z*3SGK4ybEFE__K~yL)*TL8__eqE*=24>oUFp~`YPP? zP+|U8H?(Z+&N-zTBRZ>bvomq&zACJ`s>DC%)tDtNXI^e9PgW9>K{p7HnW*iJ3!QqG#a zjp)ALhy&aoUxgTPi|hC75ze3Yo8TG348U0Ojn~r0q7}K1QPgxk<2wGyIrMN7{I2r* zJDO0pz6t+KU`}9bdcT(7dFf=tqA=!3ui}|%Pc5jCbCT7>-nSdE)gGciH&LWNuEXSqA%+k`)oA5 zm4%5n>D~CAKG>W+*W1SW>^aZIEA-aUF`uh+HqU`f9B)AX4TntJ9Y?-m{VW`zSHX;> z%&K}!oUJQsv3bm$f6Je(!mJj)P6h5$Ybww~IM_qlbaoa``jjl#!kbAc13el2U1ZNidj6BYHDH^QD6T7|SxdDfZBokhU{}do<0R82yGs2guJXL2 zQYsB8kp1KH<<3HKs-hJr+Qi)3ghKhzRe|N4eLlTN&XuPEmmL)-+kkw-@B(SS^pCVD zpysfQ0&)2YEUZ=_p0zlabXVZgUV7hwhxMFkI{XO01tb4GTg#fp zAFU$%(AnD$Z#@H0+szM4sM&hxOTN`R;@1ZH$hrHocVUhLd-heev>13^i;O$$NBS}= zSIz#l0(}=gYw>0=v89**jH>KUZFV5mc=+QbzxVh_Kg{-|r(skVlrZ+rw=_KLuV7wm}_(t9Y7ehnQWFg}qUjQt~!z9bxpe{l{& zt!r!I4R@%^SN9Ib5n>e`eCbUi8i1rrZdhDB)5u@=+#WMCvzm734;+zG$7E_0J zJQa0`kjXJI7^wk%G8rIiJt<%ydoTd?o71=Z3mh!~oT+4rgEWAC@jm$Ram7Wh?2 z#fHVnoTbq7@dY(#oJSnVO2GsE?xVGt+4PP63ZFT%F0|sYCwT_!Nq-K^Wlc$qXqi0J zNwrZg%o+Py8^+t)P@OZK?~(M2yF(AT4%Ca14={rK3FA|0|AvyI=wd@}eqZ5z`Z(s$ zt8sNM(l>BEzL;JT(d05{tyr8+4>`{4FW2YSb}_Gt|G)23&hkGHAKc<5am~~+d9}N| zCFWJKYco;Rc9#kM%z4=8EHlqJi}hz4S$kY9mzr^&wb5QoL!F5GxXZ+O&1La*2f26G zNdiZbL!9Cw-I6^d#6Ydqs-Jam*w4Dr1Di)N#l%T;wEP)O&;T{ zLbYrf>>{_Gs3knJxf~-0cog$PGTn+~1bK#P@)UzN+F|6)Vq$dE6`m}VM>~ltE~X|i zzF52l*r5sYJx+L#`$#Ti_?SO(rH&o$mgSuP5xI}Yi{;NRu2pg*-qDlsOrs+HtqSCB zDU`&?3hdfU%;>BFowM!mY=8pond6>FTyEOBVlj_UATiM&cTV|X(IkIl#B<$zBR;^j z;a5+KzzO8^9tgl=YL9DiP5AcnhkC6a_SFkO&{JPrObI~mj?BNAOATpc0R4ahP$@%; zUeN)l`N<#ks**4A(H}{-$RYNir-?u3H&*7~O!mjDk>nI}239`OA0v8jojQog@4``%xbW;e&P6{GSKJVe ziR41IzsYP5PyU{#%(fsddgK>zh7PUK(Qtj6*(W=T9v*}k<=V# zS}^Lk1*cA0@W8^1_GD(ey(j0lKfPHhlb^Vg++p%hHhf6IxrWqqt{~3UGzA-PTc8gi z$MG@O+-3_V5Wi@CGX-BcQ=3DLe_#N889S$<{aNa)dvcui?W_q(a-6?r=_(iiWuc6OP=ila#BY(^x2N!g5st}%Jd7fo1|7@JkjFo z>W4OON|1xE=$W|gu#8@2lCgQL<-1ewbw5EI#>Pn=`39B8M$4LR2D!GI`jqwtc}RWC z;cxNMqKQG$dld1$& z@|eEr&E1URH`|twVRUzgrhs2-qC)9nH69z3#8lm}Y>XPqB9+)OQH63<>G^b7 zg&VtA|F57nM$0@1)`w5Y=h#-BoW@bq-5#eW%N`Hr8IZRSsKaXJ25cwCWS4^aMe;kQ z@xR|_^jLRYhmgj4^uHgBP8XOVKu)8527Bi%^i!OzM+m=f3+uf#{NBI!lGmsW1swF~ zJV6I_0B2mbU_@*qw}7GI;rf>e^>>r!INpf;HI2ALEKlLg8nPm1 zZLA%Cw>LsJn>sdfR+5Q*C@W;)W-ZR&KwZnXOq`2hwx(}3UX$ZEH=g{K<jL$eeGIwcoM zw?V~nvb+Mly%accR*S=mK%@=T!ciHBTD(>}SnG|N9)Z%Ec_z$?_+JgSk9>^&ZajnP zrXqA#Dt>XVe_bsVr-<`^I%q-jZ}hC>K6sk-%gU=(^evqSFZvb8y`++}d{_Tf9eFK1dT1@>$ z50cyAc-gQVaBE;M%QJEU10~r`+k2Hjmdxs1pchy&FyKj5D7X8_zpC!X1@LtMQ8a=Hp4^4^9llgGh28esdpX zkKL6y)7eepVPpTfD2h3d{-*!s{=7Mz#W`yhUe~2R5&O-TEi>_ZDzgB_DKy@->@;bG z)VLFe&7Yvq98c#Ao#)G%>n4dU881g_8>LezlSD)%NCmSBE58yKdPDtUDK*w`kN>8*R1`|4rN8#1VMXFvS-J^dL^nJ|g_m;?P}ryOJ6 z{n0Fxuat!!_T1ANDKw*rqdS$g)6C{fzw#=Drud6O(|BUMn7+hIeVa*!li%-2eC2oB zqoS_pj%nNIyHKh*`z$qj>D8F>om$LnJ^KD3zu=P&F(r9@CXv6V)nn*c@<5IdKaDe? zXq5@;29Tq^llb~ka#DDG7Nk%=o}UTZ9OfZxra!KooyNB(uM08x4(ZgtGjlqTcz(<6 zhh<28a%G71e53Dj`Fr#yn|Vya$lY1Zv($rGPbHSC@E5U@o|oORF^4|Ft$9AR=UHS= z?*30b)_&9D=`x-ht~@Wu2Psq~;FgaG!#bJJ=mYr;R%T%LW-nimiQTWWP-Qc-p2)js zM$Scb-mgKY6q*;rP~&*d(mTb7$J%%q*uX>&R+IeMMt=Dqg!Kzb#2jQvl`aGqHk zZ|IA-(w+X4dR+D5tfN#Y5*(>vk09Q1i2Q#I^PGuUqm5tCdS*W;yXB=@6H8IM8Q~BJOd0qIqfr-x#{R!5# za}(-z=zoL$wX?Kn$v(dq=Z;BrBhawzcJy0BA6;uWXpbG$ha(I@FU_}Cu}HQXDYQR~Qg z`S_I)&^%|~Q;EG%TsUl#EHDxaNXuluVz59Rk%~N|U`>B!7caD-2G7*1{cu*(@Nk1c{Z0DX_1%B{EZ}f9mh~R_nchVFP!Orq*r7|))!@|;rN^U5T30I)>20? z(1JDW>25#dz4GDgI^2SdPpL~||5MgG7Zsv-ZalPM=YAW~chSGc+gXw!CJxe18>2o=_3*QX_u_^NVxT*cuax*8@W_ zn`hU~mZ8Y!xslW`6qQ0v=#$0Tcr!ihICuMZrU|PO`H@EbcM7r4;w-F7roV6mH9Uq) zEO?;MSPyak>uaY;;an%0GsYdW6q=AigR}`sko|@1!Dhru7pHhRev7lyInD8Xni^y4 zy5sE~cWkcVj$FPU9p_kA)`p^Ky-?;ogra&w^5LJ+^MmKtn`q*{tnK4IG2=Oby+W=L zA1{+%`H@*xpE-ALN`Ci7`qjRr&u~YDW^sS!UTsupN*<>_>{^B9{b0_ynC-l3xlvqV z$gsD{L*J4f6xaZO6?~% zfpev1bD0BBM~wuYU+X#FQne(9@iM)NI7c>ZqL%F#dr6)b?}o&aXHP$0-YfTA%uISo z{n+0;<4e#FvG;vEUd6d!KW2mLvT!ahi})1JhCI%t`JOuRxzX`nEx1L05eJhLEip*_ z21n$@TcgZ>mmoim)4Rv0!n!YN_;SutEmw_=JX4!K<2gS)6wj9H5xXW7ia0&$Gzvxi zGvwr_QX9}H9&2mH5XLM=a0nfOVUr@jyg7;q23o1n!(+9 zZbd0H0rZbNPCv{4+lOuM+E_mJ`6H%w2It`V(i_)2=`o&i2RcxyhM7;7;W9d7K{=YW^P=>XAzwariIM#}wl`isv zSa|ILT3oA3Zv3efjJ-`hS}8|4M}FCmTtB#!BVN2O1=G7&vDeZ}%6Fq*z-oWgSkB-3 zI2pq_Qu}?=Ri?iFDP0>AyY5B47|%od3dBV1n@IYFKk{L{KT6c0&ex8(?F1Xbt~$%R z%6$Li#xHKlv*S<-7W8Fb^R|)nI>@|WfBNoqW!>L{KFGv}yvWD#X8!5#e#~siB^F-N z!WrVGxR!hv9W-GXC==y!yaR8u%B8H~EYk=7zy32`v)$=f2eUh2ai)WS7)7bUo-QC)Av)Bs1stA#-WsQ_yFq73(S~ zrDXr#G9=v}p{MyA_DVtW8DfF0c%Av&x_E05dvzQ3RJ9=EfE5jgH4sO>{$5w+L{Fsu z^cv=sucZcK3Ui7E(cj`+0M^=v;n$uNbXKvxim?}6twO1$_eWTG7`Ah+5OT!|@0ZTf z;Y@+(ID_%{!+FPM`U&c+n0?npl9v3DMbG`PttD#%)=Fss8$vkt2tFF?>Kc zdQY_A>Nxs@c2&u^!cx zXIBer8=kM1oMdS5A6cGFUhoO>VZ+H6K0+Sxy1G)kOTL&^24Mf)FvR#;Q1U$UreC_s z?p5?RY|XsvN8$K5g*A=06*aaxib>Btwi)jWd+6>JSX&&=!O5FW5_h{$`WyU^et8=% zlw-YEgV%YtvwW%bhrS5DSotap>AzC2G?aN$L!BichBeP?=2MRf!}=A;xUI6{KIeF) ztp)P;H9s67rsG(XdDFs-t8I-%N593^6WA{|p|9%)GprHhlV&!Pbf-c&#`k%sCOtOz zcTE{+MM_Oa$?>NZ|l;nZ6#&As!*zmXr7z6ryo(dFT(xD{P#CFSj@k%4i~|FBFQ)ZRV;eh;5CvpfunAk4of0-})taspOR}p_j=Pd9N`G7iN{4Mxgb=cKVjye{|0<%9>Y$JbGlY*+m-Gd+U`Po-2 zeM`~XfwlkF#(Yl9IcUw{*z3apOfeW}Wvw;#+^3$mj73}^Wopun<{%$WPd8OSCJnnl=9s!TK4^`uaK z*Y`(-F5%dtOu?wSoCS<*BG#S-(wFnjLOv&3JX7&*a}H))s4x2aMe@%mE&ARKhpLMO zJFPibUp-cqhLG>pU5^+Yvuw&zZ%y9fla?mw74M3^L!2HZg(~9K z7xkDCYD66^{SY+@jh$<>+$OK^>kN1pNB^~>#h5)QR?dYIpBSSD(hUf+ke}5< zp?Q-YBhQFce#IrYo=9v9rEugER2$6JzX(CsmDsC3HxtkP(#oB?qM%MlECIp_39mvqIq5%Ydi*GLaIa&`hOYSipHVETE^t zg-i6U3m^xh8GDDj(Ng)F5=kd@*!tZ>4heHC8rkch0H7iPD$m3f;U%#Dp^v`l6->^FQaW&$k6tTRO3FODE zW5y?OFxBv4`ew(<%rz={XX~)vYQSIYCtfO;|LYPb#fM!v_h5!;Z~BM+PDimn^Mcz% zi_cE-@5qrUMXc|ynVIOVQfQjQ#K_dEZV0-fL*QWMhCWZnSl-8r4dO&QN)7)f%y;g{ zzn8e%@Poyebbxu~!&KNDt4HeqBNC3%_cNs!iOOh6;mqf34?gF^jF_-D17FzJ{6${p zg7M7Dj^Z4KzU&{*W@6hD@@?tGv3<5H=DL%QbB=zXnaox1RE#Sxd`I2fOB)XZ?JZ+LcXEXXeIVM2tl7nBQ|qAcA8Cp&rZ?eI@S%*`}MHvV?s;)nbc2GADqR!>Agx^Nz>t@miX5N?kA4L=zT9%1|Lvj z%;6CHv%v@tuHOT#$ZsvfbyPt#Z-u$c8#j3l~~m)bJ~mLCSxZJ&wfb&Bb;A0w|DsbD29 zTUTU20B1OE?G>6>-rq~zlz4PC1QU22jHj3@b4H=5Habp*9VQQv^RK@T7;&x==RIS{ zBW`69!*lYuRtMuwS0k=R(obz^F)^z+F|Jplc%csSi@ilOm}mTlx&KikcI zxB_Qkt(l=iesLf2aLb-n!o7hGn?D+0c*W=3iM^#)yo@}eM6>dI{;Lx+D?xpk#d614TT-RfUN7GMDiNs_bnm#uo zj67m@?w=D3)MYnu!(Zog^x!n0jY~F;9_Mq_I!-EushD}8!}JKg|F@aA^}HB^ro~8a zs}h~u^mtZ=yhZk(o&ognd|{Fh`ZEql=gd#RY@Q_<@FB04?V3Z7R-4?pgbix#!H2Nv@~1n@=u^NXks9m0WFQzIpcE3dtAUZkV5aE|u)q zq>1@P?{FFqGL*g$>+?Z2WE4Fipd4Gf=(;R`+ZCeYS@`*dHge0DqV|{o9|-9oqnY! z9vWrUwHOIl&U@J;R>p@K1)O2mq;JkY z=-->M!yu2Inxu7SgG?iT-;K{iwZ$gc{fzQ4){o7OY2fBRy`s)uB6| zq4lggMmw?gn8cr(9Ezi?6B4-xRjy23stY}J^62Tv+GjHN|2y?~25bt!!w`BMXvs@o z#%$}k{GKFosw4DxvY9x`zd9V?oV!hRYDn)8=lIJ6`|n0f_T}t?^XKwqO{g&0gmauN zk18^u%^oA}uQp=EN6t8Am@xLV36-Oa7+J=IWyI2I8;mG?ZA7zF?&)8R@V>&?bS>ih zZU4)VFd=|AyX`rD$0K6y+!yZdpyy*t`Yc-vnDUKTAe`ekZa2X^hg{002?*&$Uy2D? zu;kHa`yb*e#GHJ-@N5}O{^5D@3>BQAaBbcr9%LFyZ)(n#pCx9X`-cUXa<(Q3D-h(?Yduo9`?u-ZzuCPu0@qVl#Pm-AyiccalYJ zjxyzKQ;DA1OzJ#pCVkVJ%2;~J4cw)a#0qYbe853ErMpQ4xr)_Cc}ViyMpEYledy@f zKCuzAmFUwr`jLxFt*I8-&{95g_FFJhDHZ71U;P1pzpsijh60(wyuiXog>vUyp$u7C zD9(oq1QcLSPJvI< zUbU-Zhq2}W44F=^_TK^6`jh?$d;IAuq{VK>KwN$22a18QbPB!Q$iY(g^~dr%zSu;~ z+_##6aJflOcrWG$4C5@+jkwWaE$m~M8+}ZR9uET0u_b$+x4t+yo3H0X{ClYuuE_zY z8p14&7C~sJ;J=$Q=i#S6&l4>*O5lEXD2G8sC z0}3Xt{hRvRb@X~5URI$ZXT}=lQ&)+=+}-3nZVE>d`^Lx<#N>TAYyX>l@xWAMrdhCk zJ~g!isE;de!PFxbTv|Y^g#A$5Vqy`TV>Ae1wnA_!dNpC@263qc*Xco^qR$ZL8+Pq2 z=w2-q7oS+ryL>9<*yvI4ff~80#IHVB&~Oi5E1NTj4Dzh#A9w2}Ib5YvF@Ja}CT+Fg zb!&Rx7%kK++c3X}4M|IwxluM3AL57=jIp6!Q!7kesngA-*360j?;}0>Ij?v?tS+q` zb;HCUzH+YeVG^;3GW1}&YQ^W7tlnFy>H_Ixrjb*Lo)l+NiUe` za?Xm9Kbe(#(1!cH$YHFRixqqyNyPjwwsn$2J)C7OeWd)!Jv`B&g}f7IS$5b(PM3C; zzIn~$VUm;F)OyHZVi#Smx=1DOX41M0y-jo6WE1@x&o)=eIX`++^m3B9TyJl7GW#>m zN&akblLPnEa&MbbY(w2-<3N?TOi)S8V3jmK;zB)zr(`fU%zvt@crQ>%Qd~9X8hHyfDBH>BEbq_fRboZWBwSzV)m=0Mi1s*hH=3rq9G(hBI?wp_Vy0S_~EX zf9&IjgBIS~{4t#C?Pc`n;J#H zZ9RRi+LNcanmKhT%okh1JZa+2r%RCg*gXQ(Q;9uY41@U&v6{#9fNV zmIaoN^fA>iJFW_I8yfO+5q(ZpSx};t1*N!lQVZw<#r3qzkKEy8VrNCEs5hJ(W3G>Z zlZchJv!Ki0DR5YALH)g{C=q3Wdw*uue6wKN8@^6-D!d? zIoBjT9Os;8e#@j(lrvj#YBO=6w^rDkbMZQWv&cU-^6iOf4PlPwS#o{CIgdO-9*L6t zk=x8{iy`hk%8El-Jn$PDwI#VMWa(^qwfe3hTnE-&8PF1>Bi%NY^ox7%x* z6AH%qc)WbragSXS^Nh?-oq8q2`HZ;|Exn(|$il`k;@2r&X16g)9b=62YGaT}%$)9) z$T@$oL3*-(>Z^;BJ`G|dwca7|R7c6Fs|Kl1+9Y?{Qp*yZD7&$i z>$y{f7xW}qvPp&2iE2z&yJK=3`G(Zm?fsYiX=61Gu2kXc-^`7srlp&j^P2W*w2E}c zNcIzl`co@bxj9;XRw4V63ND=KSS>1SnWl!raL#oy$SWySvR7s%z(*x+^`y3@ggf@n zcE|2jD%AH^Bc(DmFr`EB@EzxLgUCnxOOMDhp~zL~;axWb+T$T;@rT-$F#4mg-#Iaq z{DyuZ zD)s0?o!>;(qyr8y&mxi-NCx{=_WBc9la`yJN2OBn7{)s9;Cmx%>Gb>GMhzr6Cc|0t zJwC>{+-=TQEk=yqKrI>Zt6#myW6U$4BmeDkjed@snT1h>wIA!eQ1UKzzoCY&hY42( z^5Z2l*zOxK^D@01`wl;(_<-_yP#d#h{{^(pkiqVG%hZyDGYlZotM zoWFgf2hG+D%wSD;#GZZGnoKy`i1U>ox3Os*UplU!`iR? zJaQHvXTqa;7TRy1r_EyeS+&c;(eK26`1$U9dZCfy)QdHsmytbj9%r%qzSy=u~8?jnqJ z?SR2<5avC0pU?X~f57_#AJpJ6m9!K{7;~5>tx=Fe9UNYZXEwee-;&i}M za?5*2z+#(3oMvAmg=fig1yU<1QD(dy^{zruAi*d(HxzcS=yN!OvC!uryu86$I%5>q zxL99xon`qBed zq??+^;Ter(MpQGoXZDh(6TGE4y_vEeE72w04l5OQ_-CI2mmJCN#VN4oWiZx$4McnH z^^<0V;Gdejwu8Y~uZ+cvpWKg2#vss#T28IWrwQXE#wn?dcs-%iXnf55_9k_%ZgQp~ zHXjb$-}cmchwsbY!AKqFw`9^<2Q`&p>!_;?FPU-JSDM_=%J)US;?Prxdi9j>twX)P z=?c8|Ag{NJ@upuW=9oe;`B?};9|q%wu|HnC3&C%54E>{HPSVE63*(Y;pip7cwj|73%AsCSN<(haDe^fDifBb&?9ah@_|mPXoF z^^&sZn@SGjfM%BzP){KbGDv~QTMCSr%d_3SB&shA!uHT0e6tHgRdPHTt3wgS>-lzr zj6-%T()+}q&-WN|O)+@4gZkg=EwJ>naMr+rBm62sCd6bjs;#FrZBuC>Wm-r!8a ztPu18=M#1ZA@42cid;gm{v?0*g=mbO!dU^H#g}-0?p=vSi!ckqQW#q@HnbZ-AJaM1 zKVVFHj{KtSCpp+&+nFMZ<4jT*c0m4kM-SogT1<`d#87f6`NPy0mEnnP z5gN``EyB|R&hCck(e9=mRaQmfq(P6G>#2jd)QAbsjrdqdJ=$HYX>OpG!GIhrS(63# z{W+K&mkrZR&iPf!!DF(NLwQYuKafcYQ|fM#$5>oVsq1>0T1|!VvVuIwIC2-24jmBh zEe7V5T8yp4bA{J(x~T^9mU!XGN>3EoQ|piS<;IOj=;yH)a$1jq0M-~jaAxtk2{reU zt88h)-(teDc}9f(q}JCp?s>`_?AgrxdTTbKUuR=*Tcz&u1hODx9(r|F{^yn1=o7WT zcs_rjCcxQt337RKvh1pzB15~R$o6-h*gS(8Qm@E4T-BiYA}zwpdSZjG9^v$qXx&2( z*9m&G9KHw{^XZSt>lmHF&n$y_h^MI2IN1o(8=fT*S$H>!dA%34n>KPUubzXcm9o+Q z0==ZjIehbD4~X@(J*+A2??*ib&Z$ovmn6G4a-LyYlC&R~B4vCNWPiLGsyG!CBQ@m9 zHF!Op_bHVgup{)CwS~MVYcvx!M_|Sw@`JM?K|&W>Ss(v!!Gr;Hvg#5ogkNTCY&6PiayiF$TWs>K6@w`kZFmscf3(*)uM;! z)?|5I$0V+uGORwBcS8;DES$k zsG5uwe2)IAU__XU5vwQWpi3t8$1Y~W$j`282G74q)VtbCZN}{i-5k9_H|w!NclJHK zc*5xa6xmn?P4g1_1|Bj>p^>Sj8q0taYALshXG3E<^sS&o?S(uyZjyg@Q&N{U7-ii< z(Bo1d?$`yR!Kz@?R)%m6kh*%KV=!$@45DhsV8#J@{pC<+cuWR7>yfAKZ^qY?^e{d} z?b`Ylgr20Ho>M+jr{`m=*$TB|KEjzxzFnf0q*fY9FX1k+={{2RsYaIlY$dieb|`mN ziCM=uClG9h;tqCjGBWRC4s^>D0%zt!E>o#x)IJzDFNUI8{aEzC2;Cm2vm=#5qT&GL)=2pbvS3i z9tGjnr5H536ph<=c&=CAoWd`1mdvG2f23a6AG{xBGw_jTeD!4N$-9tm{KJaQF8S2+ z&PQ458tprqk6yd;G3b`JB=2;Q119AlZ zogKD44#ted!Dv)S_Wkc*L#1u~(Ts<& z^ml%nj^N2=>f@NPowESTujk`5&oTdZWb$WP;mEu`(cVq8E!0xM%T>;CCbxO6x4i47 zm6OwKve28J1aXD(d!zz)mhg;kt-z_-!HD}DjLKvgOI`@Z?1Ug{jf5bVx#Eqn)aoC= zdC_z1^E$GI@{Bx17WFiXEYz5w{xb8m5WN{)3+Ovtp6AvA&Ph(>JO_0VO+I5!v@+U`-rQ%r?5u~T4kO{H&$@I!F(PNe8Mmpo;MMku3PmZy4 z4zASB#^F`jD4xN2pS#p6Cx=#_ymI67)I_{S4t_Pgv3QnUS$jaTQ<5e0szFu`CVSp4 zS={odB|r_4jos8Re$pazmj=PPS~&7NwOr9-rVH!R+@JUHdTNZLwjTFqAs^>+n`hV@ zBgT;({2os49WvI7o8+L!$t*lOl8w#W4>$ZGyBE(Go7dB&u2LsO3SGNB?0+02ua}_I z1yHxP-Av}1nhhwVMk8R z^>idEpP=4KiXL+Yns9To3G=s`5SB%KBaIO*r;YTqV~)VRFp4?ADb|l$)z5+TA9_B2 zRp^`&sB1&Ma$*Uk?lsShTzVOgA97G!n16b2;{4omYUj8ZrFFVdLYGp@;0g799JR3T z;E9nnyzuj(7W2DCVxD&-XOqY=I!2=9Yu5G`vF6^!gciI%E<8)WJz=ad-G~Eij2O;- zsoQkwXkN|6*oV|Zyq%3qXKKXrERE&04Ca^d3AKd}D|F`rl)AKS25A+LAPdSE{3W7MGLbmpPt|9!$*^!Bm>(MVCl?SxV-? zME`9oXD573=w8W)UAv8V`J6e>i!5k6Fb1+@q1&NMJUNz)qw5vAV(R1kX6$3CuhhNw zCmTz>nO74H5>9QRd&iQ*UYR0;{0yRbN8Yo$3b?^%cs`lW^=g<#b3WiM`zU|v@yBvr z!!l|e*XB7kM~@fnsh2&Hz1j#P)&`p}@HlmM#_%jQev~*N8@9q#45v)fCYkCyg)iEP{dLEYda+Wm4wF#~K(K(*8 z>Fvl+PtC)Ne;njvI(5yu(u;_-;pOCF8vSj>!dbPYO1WbBHjkbtE6LYHaJKbta({6i za;!7;dY6*>TOEysd(z=Hm9@`QCvjf#OHMrVM>1<%Ef%FCdtDwL`!^tyuE1C7ubm_p zIbsy+xC_Wb=lgOv9YF=zDDk{-;4TgodZyOMEAgqiREp)UD2Z_YI=X(Yoo|CWza0^zrXyy4L_xYQ-T zW^xvfAnF?q4x$b!=dk;yBQBc%u9YeY%d|L5meolSuBDEIM&!=(#++#K&;-DGtCv#?CZXLPfS1h`s0A!{`16$1SKb{Bu zc~=Qm^K)0Rui_sKuRqiABsLexGhF3R5;?LzsYlt9|6Ziy!yMKUFR8?SPk}sb6olyy zH(|-DbnKX!2S+!R94P!LPOAfO7u0J=Nk`7gJXEOXE+xtoN^ONd?o9pHH#{Ait+{yA z*HP?EMG_qvh(#6YQ+z26ZYQ`d`ZbU~-Kj%Y9DqMVqwt#itU;HDm(Y}e|8SW4xY8|_&hiT(xb~=Jnj>bAJ6^I-V81#UH=i zq}3V)qFZy0@oW@^J9F0LBzq*YoaA7AdZdk~Uvoh;{%mSS(P#eN6|U0EL4k%F$V+O- z@tvce^C`}o3xNIGO&EKH9P3|J;A(55A*M)u`fBU0ME6(N&z$?>*Pc3=b=so>c&-<4!xOJQQk1h?wR<}snm88z*l_+{rq;uvYkN(xvWx4!YeC7tik^9(} zU3{O~^d+C|A~S~;ilrub!y#N3hBSmI=r6RZfeiOjpegssYTct?Y|glsJ*J_idNO=c zv3x2Fz*6dUJ|`cl8XR_rA#*`15cWn3lt?r&+MqK@sq>!@!!9<^d!evOONC~K3p<^Xi%>%W;Z zbYp+3Lo)g3=Y^7A*bfiyQLpw|I@Wpd^DWy*R$ecZF)8GQ+tLr+)rO}@O#X|UnmuRvc`h{EmWg2x}UjUL=SEXX^VUQagF20kf-d?jwOZgI~yCnBCFBgT9j080%fj!se#T zt8@3uiT7^ULSI__8u}$X$fTc+LI?6k@$~tfl)n%){pnlXl75NIzh^&Ake@{!m=i`0 zsCyDtdC_0TU7^eQwqIhpXt48F1TI}8k2Z`m6>W6Aw}R;sm0pB zbLzoep*MtMIOe`dL}AxVIPl*)-X}?}w{^$4fC!WwZa~~RYELm9vp4ONT0K?BYY>hG z+mbjtmx(jv%j!n%mx()6X!VRxJI&UH;TTE_lzX}IuvaT3RU*Nwv zi}cBcCAxU|(&1mtbUk*pGGIeA{hsP7bZu{vr&FpC|2qO}_8Q^XlOCeOY&gwz*Mra1 z#hVN1^OXe0Blqy0+-u$M`^1GDaq|3dsJ0|wZZOwNM;q$-n#6jG{8Ap*dp30y-KpEi z^*HT#oSb7{>5V=DRd|2WYh^Dz0sNMTDVOPS+Fqec(NUMgNsSa&J^J%`vvbZwS_!Uq>X7vQ?hd=j;cyDz za~R1U3ik)E5&LDuad*sXMgI2zUnjrQjGSg2a$k#+RT%CYP7hTBd`?nV|B($p3aGa@ zO^y48aJ+j+pIDcBIK{lAXlk5v-Q|W)4I^-W8u{zpnW*yBhUYgDrH@U8auvv*+LExz zmIWN39w}a`=gn$U!0n#5WSvxF?q(YHq^U+T8s--5@dEWHB#F$Z+=X_c7n_l^DMJ#hC;7`CLapH`om{mpH7Rx435x4C0c zFFpP&M-KEvCc195;q!w1lAo#mPkX;-H=YX}vXR)-hJ;N<$+aWrPM;gYR0EcWa9tcP z#<;cd@;hIJmDIhpu}^1LBNHS0aQ`0`C(21G6t#skb7FQXlmRPMx?=?-zG1we6?< zb^SVTn2?%w*xGjRA*a-f*Q@%yN?7YxarG>}mPf)a{NEsoKw8sXH(D zwDtDCl8U(XsY~8oOg(kjcIs1hMZXDadZlK~n43D*u8!Zk35gQLI(nC2lN`!1ileVl z^kfxhFxQ>GJ5JP{OmhELl8hN{l#F_bvT+vuC3YoB)yfI-x@(dgi(tQ*zJr!$31VGm zl;&NN#djt3516|jm}8W?XAM$gC^b$eQg@gvqtYW$j$C8iKFcJ}Es1iwFj07hy1 zBfCx{>iT6_70*s_-2jcDBzhGNGQf{@_y%>2 zaQ=fji}v*4c#}z=yDSuHva!!82i_jph}l9WpEW6a)?9ksqBhU7EX?0bEk@SvCLYR0 zdq?U=uznVICJWalW}!=77J9H|m2f8;f1k_7jePn~kD-5HJI;Ep$U)7g+1M38ZO2Qj z`*FP&GgfOD${s|cY@|4`m$aJmyjMJ=bji9h{5$pIPN~J((_IE=J*4YUSBWa=F2{B? z68Agq@=ryT48H9y8Ry-k-sC1yGKF*MowO2h*IQaU_{i+7&T?`ky(FNL>bIyfH^x;u z%=3_PZ#*S>EqSc59-?&QjNW-?nOmM711Gf-a91TseVK34L*Pq}t8AU?EcJI3%l=ME zBn(mF?SAG*Rp_xmU)y=UN{p+iL{K)_s|Q8$_>%%(l$?q0ZHE)vl=!P8`?D*4%ZI88 z9PXsRg-bp#punDA3o}4u;|6t+v`^ z&j;3nqo`jupI(LEf6I2x%UxI4Ku_CZ`UWsJJ^Pkk zwfD(0szZ>>p7|gT&Y9+gpo4E9CiM!&`y~OeR3_KBH4q_d=~>;4d0(3le5u7c!CKZR z=7r#G$zaUv$UeKCY}L>pI9h|yv0E^zP~T`(2AMAMkKM14Ma*D6QHfeYUYw(!9fOd{ zF_?Zj8a2C6dw_NO%}Zht***pLy%{MujHPsIxo<8@^G?F_moM zLFP)|>47_rKhK|8Uy{9a3mL0!(bR3A4xI!4&OY|MnPjW(M5B#;EOxz%#`$gJwU*G6 zx1j}_zNX{SgLJg9;|#9R0(&P5Ua*dlxrsF|{#h}cS_6|U==I!;CpXfORgN|LRu;Uh zN)3QD)Bq@Hfj{$|*sEqNJWX9DzFz00nXE8*#r9@w7-UA%+vKs*$w{7~FT@ts`NcS;jsjp(i-^P6U15>}KBDIW0S*h{E{Fpr@ z-;!1|KE@f^`(&+tu`WL{AB(?Oagz18E&W)7xk^6kLOxoY$j9upWU1H_pRZvp-;Ycc zdmR&B(`PA`Gnc2VIGREI#}9d!oRNpmeBUd~c}v`7Z~wPe6!)Fv<84nln&B-uNn{=l zddPZepw0+uB#$~Ymdaf;5@x3r{j>)1sJXlB&2Sa%E44gPs-&OZMW&bWlETlfGH9_% zzEY>+Odqwh+~_T5$tpT<4m4#rH6D9;$eQz7sgbIZ;AI*a*UUrm`QK%iddSCDE|N!{ zVBX7y(sS}}$*-h9{a7-?eeHnmWPd9bNv1)8ZuWNMkvKEFp;(^xSE6kfB^I%-w(*Ao zhkn_ljgGpdR{BfNDwK2miljF6xL$I`^7>|*Jbqs+$4bQBFA_l3Xi5oGmc}uvsVl@a!vlbCe(Fe zP_qix#{4DalRllS)jf;i+Wj4c(fpqJ0a56EiCRRT}RBJ~|R(SM>hH6F9fsDIduQ#09vqy|>G?d+{B;JVe3^%%o>mlc{cXCGi)UpQoXxus zes)!#xvAyTeA~SmS3cDz$-!^S+G(k0-`q(ZWE|i2ceXY4sl%=|d)x=51syJR_Vw** zenao&`*olB$gh>6Lc1}WU$)+x=a5$7PH}3(M7MU^N;WuqYwx+XHJY6`TOq1c>W?uc z{0x6rPCHoodE04g8>hAWdqmqa&#tx&t2i^YRn#HB*JX~iIiT2{dU(CH?V)gk%&Tma z;A+VdKExy~FD6Pd=UJ{yFv#HN2GO-MN|z*qbTB7MOU|l}xR@mMPN&HC=p<3SpHps5~MtaVhWYH38AKB=4P{SziqD&H} zjh7cYP154BQS2o}5+@|co`Gt--k`;^^7P2sNZtQ6T3nq%4>;CR8oy*L$KFf>gBEqt z)I3Yn$epRh+j^YWi__58mU`U_)yR(0p!QfTN^PSy*G?_9^wjt;N{w-WYIK~W#!zyO zkH4wW{BJd;vqrFCq82^dYY^wG#dX$B4&2e=UIS`aFyDRkC+A2#$aG{=pSxQm8DGw` zjts|A1$mF~NccC`W5F?MX?aJWHTlIDFV63^rWW@_vMBwj%gFdo$KGCT<{2+4ayF(% z1ib!WjJThgS8Mf%n5BnXFZTaB>d8Duz~`zSEBU*Qwa{bkRO&Mx*JI>l_D(t97Vkrj z<0`#JImdhUXcFcX8Ij>^!v5h#%maIt(}*{nMH$*=X>V zGoLP5xcQv5xt;74j>>_SF=1tU>eh6m?nk>EykZZr_nK_XU(Na4Ls{7HEDPWGbBoOE zF~(&f_s?t;tmjPH9{O6(%)!2;I~FzkT)3YxK366^LyYs6{v+6!YEbSGK z`B_R zV(LVmqt@=9894FCOs@nBtZ&RHQ$+52j}`A0GUk|(kC6uMv(E1@Y?6=oUExg8OCS2q z`p8I!#?t$bCQ?|A8s(??dF@r8MgyMjkv0h-->7=TxtXc-=xjzG<)%Sc!SlDFG6(}5 zV*lemjy|RSpduExgkE8GG3d6J`U~V6dhW6S5!3-DKNHK(&-^wYyPM}@PTV`3983?< zr}@;hrcdT?A30ahM7HnqmE$F~;!&lAemyax=O=0iGfw=;>xx#J zF?t~5&s}5~H_?;(XC4A$tgz!b^OW&gYMCZ-+fO5@qna_lZY({bH8Q?(6KQqK4*NTl zK=YmoOf5k^B~QtHLWzqzL*aBM7zIaysAUj@BWHqOcOn!&EAm>7l3%RMIU~jmop#1x z;xOKy{)|=m88yCTMloaCNqx-FkqMd2-e=WL`Iy9bakPmX>L2u*=Jk~9azuP~8^!eA zBzbuWvU+2pbQxoif3|6HDTSMhn1 zYtN?E>lP#Gmtu~3%7DQ!+<%zAMug-b=`H8jSnn(2oP%oI7cTl|qXRuv4D91;$$jmA zP2VKe4i7w1=$!Q?DVUrhne?LYUU5La9Z8YTtTn!TsfBZh8nz~$DEUImJ`*((_Gn?c zPA%MYJ^b3~(QiI^bS1Tu@DW5BxW=t z(9F5SN36e&Am>>?y}w=5Y$BU-{#-UZ=2L&G!vAPjmj6O#a5PzvKa{$~yGpxyS&uEg5X$NH8IHP>osKvUb{G3{9FtDix z!zc1tI_ZhAw|OS=Je5}D|A+DUabZ2OVkD|nHo@(S0j@l=7Vxa=Jd*4w>yCSGv3}e# z8}gKXFRjT~vaY_fn6=jea-M!lT`%5~W$ZWHeyPx1jvyQIAVq@mIa6`VAPu|{ru z7S}V#(Iig<*7L;OI%GgfYyO+Hc*FUL^}dmqIgwhCWypfCRy(_WBsD$A6ZJNt+Bb5H z@9A@K(TI@yoF{EzK(AP`o};N5*_J$PXf~?G(bp=GXBvAC7jG+c3C9(>r@IuoL*!GM zA7kId!$)R5X(Fj*wbEt0yIl5D%dopz@##Qsh9D)9La7ZqU4gkt%!e-9q4uH>bovqu z%O3hnGdKB?7l?OX={MgZmYy5ToyU@aKg@i%S`4-~i$S%O7R+BkKF`mBxBV=b=$(O4 zjGgB`rEY&XHTAC2Q~7}v?F#bn_6`|lRTJsi$y2&5p?C4OhEiOynY4bamTGAV&JHT! z(%KHeDm&=EQY&^IzxsrrpluLzk-^Al9E@tELg)(-f?lIy@q9ZOIeiS~ZeyO_F9r_G zLvDF8R=4L_I@f~7x$KcvAm8|iJ_e&XdsN{aDl!&7NKR!sWAv}TxDP#UBGaa6#BHjN z_>O2QV;47-sdc<$9rMIv=k3sBA$iZw3QXp;%rq%cp+*S)>=c4B$ejPlnaDT``nSwLNAh|~iy7msX4E*!UTacKQ)qoZeD`Iy9A6Hg6f0z=&!ewxs$I2&s{C_=_cDU zE*&1f%y@i19~+Hi&6$f_TxLb|Cu&add@W&WEQN2I%8m+6_v#j`+)0n}rsP`MvSu=j{?5l)H}PQ}<;48TpL1Q^`FSOg|7?Nsa-61)b zt-)YlEry=(M0axL_XaUH8KcF>x{+|}7m3k}^wcDY#4I)Q3~KH9XiUgGY`|uoUDtaU z$;TSex`YYCCekl>Q4Yq>qDJkyY?Qph`1w^9URv0jB!AYQeC4Cf3S9-BUp0AclP^)1 z;2!J!w^Bq;&4QV)k|ld)q70r*KCdfl_;0n;vDd)<2=yyhd!kN2BtirADE*kT0lZf; z_tN8tXRGOy2~GN$P=e=asLF^*oX0xUh+51wb5Nok=hK^$!GFaW_HyLC9ka2C=lY61 zN?qj#yhrTUp5t{rJH)ef1^X9&9+&Q($uh5bvZOm6kiRP?%OV$Y_=i2A;yHTvff{X? zE4E&)hT?rB%#WBiH6#zPPLG?5sEbi85_|KEoCh#rO;Z!n9GEw$O|a)a4W8#q|H#4J z1fCmxIZMxLIcFwYKwt2O6BW8+pU5%tdPeeG-ORJTU;07Wnv)_O{^7M07^P{@A?a4> zptKsPMcz6sRxbAh`E%@~w#U6_>i^7)1o->)Tgbmh=@C*Kfol~a5vif3KI`+sGkx$g z*8680FiuIm#vfT2{)Rox<2)&R<4F^^gxs};K5E=pbZs!E+l zqZH}1DMi+@KhtJhvQ%<7C_eM4VcFOV9||;BK2eP)%h(rTPF#3Zi~71qZ2ihU#9;D_ z_w~s0ibSW9WI%6_W#m_@sYcwZM9qYs)O5-wV|hA@n(^7_(lZ;Sj%UHpCmYuD^iR63 z(0%bx>Q=icbsfk(jG4)M^yYtg#w%ayNSR%~sj>o$)MlpD9(NNbP;{O?~*#sA9F5jf~hn0!dm8{;tWTbev7

YmD()?v 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

k(3eUSN@wI2>xvLzU?kG7;9mTIr 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

n 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,"Illegal fix langevin command"); iarg += 2; + } else if (strcmp(arg[iarg],"halfstep") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command"); + if (gjfflag == 0) error->all(FLERR,"GJF must be set"); + if (tallyflag == 0) error->warning(FLERR,"Careful, tally is untested"); + if (strcmp(arg[iarg+1],"no") == 0) hsflag = 0; + else if (strcmp(arg[iarg+1],"yes") == 0) hsflag = 1; + else error->all(FLERR,"Illegal fix langevin command"); + iarg += 2; } else error->all(FLERR,"Illegal fix langevin command"); } @@ -155,6 +164,8 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : flangevin = NULL; flangevin_allocated = 0; franprev = NULL; + wildcard = NULL; + lv = NULL; tforce = NULL; maxatom1 = maxatom2 = 0; @@ -163,6 +174,12 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : // no need to set peratom_flag, b/c data is for internal use only if (gjfflag) { + int mem = 6*atom->nmax*sizeof(double); + if (hsflag) mem += 3*atom->nmax*sizeof(double); + + comm->maxexchange_fix = MAX(comm->maxexchange_fix, 0); + comm->maxexchange_fix += MAX(1000, mem); + nvalues = 3; grow_arrays(atom->nmax); atom->add_callback(0); @@ -174,6 +191,14 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : franprev[i][0] = 0.0; franprev[i][1] = 0.0; franprev[i][2] = 0.0; + wildcard[i][0] = 0.0; + wildcard[i][1] = 0.0; + wildcard[i][2] = 0.0; + if (hsflag) { + lv[i][0] = 0.0; + lv[i][1] = 0.0; + lv[i][2] = 0.0; + } } } @@ -196,6 +221,8 @@ FixLangevin::~FixLangevin() if (gjfflag) { memory->destroy(franprev); + memory->destroy(wildcard); + if (hsflag) memory->destroy(lv); atom->delete_callback(id,0); } } @@ -205,6 +232,8 @@ FixLangevin::~FixLangevin() int FixLangevin::setmask() { int mask = 0; + //if (gjfflag) mask |= INITIAL_INTEGRATE; + if (gjfflag) mask |= POST_INTEGRATE; mask |= POST_FORCE; mask |= POST_FORCE_RESPA; mask |= END_OF_STEP; @@ -260,13 +289,11 @@ void FixLangevin::init() error->one(FLERR,"Fix langevin angmom requires extended particles"); } - // set force prefactors - if (!atom->rmass) { for (int i = 1; i <= atom->ntypes; i++) { gfactor1[i] = -atom->mass[i] / t_period / force->ftm2v; gfactor2[i] = sqrt(atom->mass[i]) * - sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / + sqrt(2.0*force->boltz/t_period/update->dt/force->mvv2e) / force->ftm2v; gfactor1[i] *= 1.0/ratio[i]; gfactor2[i] *= 1.0/sqrt(ratio[i]); @@ -279,7 +306,7 @@ void FixLangevin::init() if (strstr(update->integrate_style,"respa")) nlevels_respa = ((Respa *) update->integrate)->nlevels; - if (gjfflag) gjffac = 1.0/(1.0+update->dt/2.0/t_period); + if (gjfflag) gjffac = 1.0/sqrt(1.0+update->dt/2.0/t_period); } @@ -294,6 +321,94 @@ void FixLangevin::setup(int vflag) post_force_respa(vflag,nlevels_respa-1,0); ((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1); } + if (gjfflag && hsflag) { + + double dt = update->dt; + + // update v of atoms in group + + double **v = atom->v; + double *rmass = atom->rmass; + int *type = atom->type; + int nlocal = atom->nlocal; + if (igroup == atom->firstgroup) nlocal = atom->nfirst; + + double boltz = force->boltz; + double mvv2e = force->mvv2e; + double ftm2v = force->ftm2v; + + double gamma2; + + for (int i = 0; i < nlocal; i++) { + if (rmass) { + gamma2 = sqrt(rmass[i]) * sqrt(2.0*boltz/t_period/dt/mvv2e) / ftm2v; + gamma2 *= 1.0/sqrt(ratio[type[i]]) * tsqrt; + } else { + gamma2 = gfactor2[type[i]] * tsqrt; + } + + franprev[i][0] = gamma2*random->gaussian(); + franprev[i][1] = gamma2*random->gaussian(); + franprev[i][2] = gamma2*random->gaussian(); + wildcard[i][0] = v[i][0]; + wildcard[i][1] = v[i][1]; + wildcard[i][2] = v[i][2]; + } + } +} + +/* ---------------------------------------------------------------------- + allow for both per-type and per-atom mass +------------------------------------------------------------------------- */ + +void FixLangevin::post_integrate() +{ + double dtfm; + double dt = update->dt; + double dtf = 0.5 * dt * force->ftm2v; + + // update v of atoms in group + + double **x = atom->x; + double **v = atom->v; + double **f = atom->f; + double *rmass = atom->rmass; + double *mass = atom->mass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + if (igroup == atom->firstgroup) nlocal = atom->nfirst; + + if (rmass) { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + dtfm = dtf / rmass[i]; + x[i][0] += -dt * v[i][0]; + x[i][1] += -dt * v[i][1]; + x[i][2] += -dt * v[i][2]; + v[i][0] = gjffac * (wildcard[i][0] + dtfm * franprev[i][0] + dtfm * f[i][0]); + v[i][1] = gjffac * (wildcard[i][1] + dtfm * franprev[i][1] + dtfm * f[i][1]); + v[i][2] = gjffac * (wildcard[i][2] + dtfm * franprev[i][2] + dtfm * f[i][2]); + x[i][0] += gjffac * dt * v[i][0]; + x[i][1] += gjffac * dt * v[i][1]; + x[i][2] += gjffac * dt * v[i][2]; + } + + } else { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + dtfm = dtf / mass[type[i]]; + x[i][0] += -dt * v[i][0]; + x[i][1] += -dt * v[i][1]; + x[i][2] += -dt * v[i][2]; + v[i][0] = gjffac * (wildcard[i][0] + dtfm * franprev[i][0] + dtfm * f[i][0]); + v[i][1] = gjffac * (wildcard[i][1] + dtfm * franprev[i][1] + dtfm * f[i][1]); + v[i][2] = gjffac * (wildcard[i][2] + dtfm * franprev[i][2] + dtfm * f[i][2]); + x[i][0] += gjffac * dt * v[i][0]; + x[i][1] += gjffac * dt * v[i][1]; + x[i][2] += gjffac * dt * v[i][2]; + } + } } /* ---------------------------------------------------------------------- */ @@ -490,9 +605,8 @@ void FixLangevin::post_force_untemplated // sum random force over all atoms in group // subtract sum/count from each atom in group - double fdrag[3],fran[3],fsum[3],fsumall[3]; + double fdrag[3],fran[3],fsum[3],fsumall[3], rantemp[3]; bigint count; - double fswap; double boltz = force->boltz; double dt = update->dt; @@ -526,7 +640,7 @@ void FixLangevin::post_force_untemplated if (Tp_TSTYLEATOM) tsqrt = sqrt(tforce[i]); if (Tp_RMASS) { gamma1 = -rmass[i] / t_period / ftm2v; - gamma2 = sqrt(rmass[i]) * sqrt(24.0*boltz/t_period/dt/mvv2e) / ftm2v; + gamma2 = sqrt(rmass[i]) * sqrt(2.0*boltz/t_period/dt/mvv2e) / ftm2v; gamma1 *= 1.0/ratio[type[i]]; gamma2 *= 1.0/sqrt(ratio[type[i]]) * tsqrt; } else { @@ -534,9 +648,9 @@ void FixLangevin::post_force_untemplated gamma2 = gfactor2[type[i]] * tsqrt; } - fran[0] = gamma2*(random->uniform()-0.5); - fran[1] = gamma2*(random->uniform()-0.5); - fran[2] = gamma2*(random->uniform()-0.5); + fran[0] = gamma2*random->gaussian(); + fran[1] = gamma2*random->gaussian(); + fran[2] = gamma2*random->gaussian(); if (Tp_BIAS) { temperature->remove_bias(i,v[i]); @@ -554,25 +668,20 @@ void FixLangevin::post_force_untemplated } if (Tp_GJF) { - fswap = 0.5*(fran[0]+franprev[i][0]); - franprev[i][0] = fran[0]; - fran[0] = fswap; - fswap = 0.5*(fran[1]+franprev[i][1]); - franprev[i][1] = fran[1]; - fran[1] = fswap; - fswap = 0.5*(fran[2]+franprev[i][2]); - franprev[i][2] = fran[2]; - fran[2] = fswap; + wildcard[i][0] = f[i][0]; + wildcard[i][1] = f[i][1]; + wildcard[i][2] = f[i][2]; - fdrag[0] *= gjffac; - fdrag[1] *= gjffac; - fdrag[2] *= gjffac; - fran[0] *= gjffac; - fran[1] *= gjffac; - fran[2] *= gjffac; - f[i][0] *= gjffac; - f[i][1] *= gjffac; - f[i][2] *= gjffac; + rantemp[0] = fran[0]; + rantemp[1] = fran[1]; + rantemp[2] = fran[2]; + fran[0] = franprev[i][0]; + fran[1] = franprev[i][1]; + fran[2] = franprev[i][2]; + + fdrag[0] *= -2*t_period*(2*gjffac-1/gjffac-1)/dt; + fdrag[1] *= -2*t_period*(2*gjffac-1/gjffac-1)/dt; + fdrag[2] *= -2*t_period*(2*gjffac-1/gjffac-1)/dt; } f[i][0] += fdrag[0] + fran[0]; @@ -580,6 +689,11 @@ void FixLangevin::post_force_untemplated f[i][2] += fdrag[2] + fran[2]; if (Tp_TALLY) { + if (Tp_GJF){ + fdrag[0] = gamma1*gjffac*v[i][0]; + fdrag[1] = gamma1*gjffac*v[i][1]; + fdrag[2] = gamma1*gjffac*v[i][2]; + } flangevin[i][0] = fdrag[0] + fran[0]; flangevin[i][1] = fdrag[1] + fran[1]; flangevin[i][2] = fdrag[2] + fran[2]; @@ -590,6 +704,19 @@ void FixLangevin::post_force_untemplated fsum[1] += fran[1]; fsum[2] += fran[2]; } + + if (Tp_GJF) + { + franprev[i][0] = rantemp[0]; + franprev[i][1] = rantemp[1]; + franprev[i][2] = rantemp[2]; + + if (hsflag){ + lv[i][0] = v[i][0]; + lv[i][1] = v[i][1]; + lv[i][2] = v[i][2]; + } + } } } @@ -649,9 +776,9 @@ void FixLangevin::compute_target() input->variable->compute_atom(tvar,igroup,tforce,1,0); for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) - if (tforce[i] < 0.0) - error->one(FLERR, - "Fix langevin variable returned negative temperature"); + if (tforce[i] < 0.0) + error->one(FLERR, + "Fix langevin variable returned negative temperature"); } modify->addstep_compute(update->ntimestep + 1); } @@ -764,20 +891,41 @@ void FixLangevin::angmom_thermostat() void FixLangevin::end_of_step() { - if (!tallyflag) return; + if (!tallyflag && !gjfflag) return; double **v = atom->v; + double **f = atom->f; int *mask = atom->mask; int nlocal = atom->nlocal; energy_onestep = 0.0; - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) - energy_onestep += flangevin[i][0]*v[i][0] + flangevin[i][1]*v[i][1] + - flangevin[i][2]*v[i][2]; - - energy += energy_onestep*update->dt; + if (mask[i] & groupbit) { + if (gjfflag){ + f[i][0] = wildcard[i][0]; + f[i][1] = wildcard[i][1]; + f[i][2] = wildcard[i][2]; + wildcard[i][0] = v[i][0]; + wildcard[i][1] = v[i][1]; + wildcard[i][2] = v[i][2]; + if (hsflag){ + v[i][0] = lv[i][0]; + v[i][1] = lv[i][1]; + v[i][2] = lv[i][2]; + } + } + if (tallyflag && hsflag){ + energy_onestep += gjffac*(flangevin[i][0] * lv[i][0] + + flangevin[i][1] * lv[i][1] + flangevin[i][2] * lv[i][2]); + } + else if (tallyflag){ + energy_onestep += flangevin[i][0] * v[i][0] + flangevin[i][1] * v[i][1] + + flangevin[i][2] * v[i][2]; + } + } + if (tallyflag) { + energy += energy_onestep * update->dt; + } } /* ---------------------------------------------------------------------- */ @@ -877,7 +1025,8 @@ void *FixLangevin::extract(const char *str, int &dim) double FixLangevin::memory_usage() { double bytes = 0.0; - if (gjfflag) bytes += atom->nmax*3 * sizeof(double); + if (gjfflag) bytes += atom->nmax*3*2 * sizeof(double); + if (gjfflag) if (hsflag) bytes += atom->nmax*3 * sizeof(double); if (tallyflag) bytes += atom->nmax*3 * sizeof(double); if (tforce) bytes += atom->nmax * sizeof(double); return bytes; @@ -890,6 +1039,8 @@ double FixLangevin::memory_usage() void FixLangevin::grow_arrays(int nmax) { memory->grow(franprev,nmax,3,"fix_langevin:franprev"); + memory->grow(wildcard,nmax,3,"fix_langevin:wildcard"); + if (hsflag) memory->grow(lv,nmax,3,"fix_langevin:lv"); } /* ---------------------------------------------------------------------- @@ -898,8 +1049,17 @@ void FixLangevin::grow_arrays(int nmax) void FixLangevin::copy_arrays(int i, int j, int /*delflag*/) { - for (int m = 0; m < nvalues; m++) - franprev[j][m] = franprev[i][m]; + franprev[j][0] = franprev[i][0]; + franprev[j][1] = franprev[i][1]; + franprev[j][2] = franprev[i][2]; + wildcard[j][0] = wildcard[i][0]; + wildcard[j][1] = wildcard[i][1]; + wildcard[j][2] = wildcard[i][2]; + if (hsflag) { + lv[j][0] = lv[i][0]; + lv[j][1] = lv[i][1]; + lv[j][2] = lv[i][2]; + } } /* ---------------------------------------------------------------------- @@ -908,8 +1068,19 @@ void FixLangevin::copy_arrays(int i, int j, int /*delflag*/) int FixLangevin::pack_exchange(int i, double *buf) { - for (int m = 0; m < nvalues; m++) buf[m] = franprev[i][m]; - return nvalues; + int n = 0; + buf[n++] = franprev[i][0]; + buf[n++] = franprev[i][1]; + buf[n++] = franprev[i][2]; + buf[n++] = wildcard[i][0]; + buf[n++] = wildcard[i][1]; + buf[n++] = wildcard[i][2]; + if (hsflag){ + buf[n++] = lv[i][0]; + buf[n++] = lv[i][1]; + buf[n++] = lv[i][2]; + } + return n; } /* ---------------------------------------------------------------------- @@ -918,6 +1089,17 @@ int FixLangevin::pack_exchange(int i, double *buf) int FixLangevin::unpack_exchange(int nlocal, double *buf) { - for (int m = 0; m < nvalues; m++) franprev[nlocal][m] = buf[m]; - return nvalues; + int n = 0; + franprev[nlocal][0] = buf[n++]; + franprev[nlocal][1] = buf[n++]; + franprev[nlocal][2] = buf[n++]; + wildcard[nlocal][0] = buf[n++]; + wildcard[nlocal][1] = buf[n++]; + wildcard[nlocal][2] = buf[n++]; + if (hsflag){ + lv[nlocal][0] = buf[n++]; + lv[nlocal][1] = buf[n++]; + lv[nlocal][2] = buf[n++]; + } + return n; } diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 2883ac9ea2..70fb254f4e 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -31,6 +31,8 @@ class FixLangevin : public Fix { int setmask(); void init(); void setup(int); + //virtual void initial_integrate(int); + virtual void post_integrate(); virtual void post_force(int); void post_force_respa(int, int, int); virtual void end_of_step(); @@ -46,7 +48,7 @@ class FixLangevin : public Fix { int unpack_exchange(int, double *); protected: - int gjfflag,oflag,tallyflag,zeroflag,tbiasflag; + int gjfflag,oflag,tallyflag,zeroflag,tbiasflag,hsflag; int flangevin_allocated; double ascale; double t_start,t_stop,t_period,t_target; @@ -63,6 +65,9 @@ class FixLangevin : public Fix { double **flangevin; double *tforce; double **franprev; + double **lv; //lucas velocity or half-step velocity + double **wildcard; + int nvalues; char *id_temp; From eb447db7c55efc18cd3e6c398fbf31e5f7f56d1b Mon Sep 17 00:00:00 2001 From: casievers Date: Fri, 19 Jul 2019 13:51:36 -0700 Subject: [PATCH 047/237] added lammps python example --- examples/python/gjf_python/argon.lmp | 886 +++++++++++++++++++++ examples/python/gjf_python/ff-argon.lmp | 20 + examples/python/gjf_python/gjf.py | 180 +++++ examples/python/gjf_python/lammps_tools.py | 78 ++ 4 files changed, 1164 insertions(+) create mode 100644 examples/python/gjf_python/argon.lmp create mode 100644 examples/python/gjf_python/ff-argon.lmp create mode 100644 examples/python/gjf_python/gjf.py create mode 100644 examples/python/gjf_python/lammps_tools.py diff --git a/examples/python/gjf_python/argon.lmp b/examples/python/gjf_python/argon.lmp new file mode 100644 index 0000000000..00214b4c54 --- /dev/null +++ b/examples/python/gjf_python/argon.lmp @@ -0,0 +1,886 @@ +LAMMPS description + + 864 atoms + 0 bonds + 0 angles + 0 dihedrals + 0 impropers + + 1 atom types + 0 bond types + 0 angle types + 0 dihedral types + 0 improper types + + + 0.0000000 32.146000 xlo xhi + 0.0000000 32.146000 ylo yhi + 0.0000000 32.146000 zlo zhi + + Atoms + + 1 1 1 0.0000000 0.0000000 2.6790000 2.6790000 + 2 2 1 0.0000000 0.0000000 2.6790000 8.0360000 + 3 3 1 0.0000000 0.0000000 2.6790000 13.3940000 + 4 4 1 0.0000000 0.0000000 2.6790000 18.7520000 + 5 5 1 0.0000000 0.0000000 2.6790000 24.1090000 + 6 6 1 0.0000000 0.0000000 2.6790000 29.4670000 + 7 7 1 0.0000000 0.0000000 8.0360000 2.6790000 + 8 8 1 0.0000000 0.0000000 8.0360000 8.0360000 + 9 9 1 0.0000000 0.0000000 8.0360000 13.3940000 + 10 10 1 0.0000000 0.0000000 8.0360000 18.7520000 + 11 11 1 0.0000000 0.0000000 8.0360000 24.1090000 + 12 12 1 0.0000000 0.0000000 8.0360000 29.4670000 + 13 13 1 0.0000000 0.0000000 13.3940000 2.6790000 + 14 14 1 0.0000000 0.0000000 13.3940000 8.0360000 + 15 15 1 0.0000000 0.0000000 13.3940000 13.3940000 + 16 16 1 0.0000000 0.0000000 13.3940000 18.7520000 + 17 17 1 0.0000000 0.0000000 13.3940000 24.1090000 + 18 18 1 0.0000000 0.0000000 13.3940000 29.4670000 + 19 19 1 0.0000000 0.0000000 18.7520000 2.6790000 + 20 20 1 0.0000000 0.0000000 18.7520000 8.0360000 + 21 21 1 0.0000000 0.0000000 18.7520000 13.3940000 + 22 22 1 0.0000000 0.0000000 18.7520000 18.7520000 + 23 23 1 0.0000000 0.0000000 18.7520000 24.1090000 + 24 24 1 0.0000000 0.0000000 18.7520000 29.4670000 + 25 25 1 0.0000000 0.0000000 24.1090000 2.6790000 + 26 26 1 0.0000000 0.0000000 24.1090000 8.0360000 + 27 27 1 0.0000000 0.0000000 24.1090000 13.3940000 + 28 28 1 0.0000000 0.0000000 24.1090000 18.7520000 + 29 29 1 0.0000000 0.0000000 24.1090000 24.1090000 + 30 30 1 0.0000000 0.0000000 24.1090000 29.4670000 + 31 31 1 0.0000000 0.0000000 29.4670000 2.6790000 + 32 32 1 0.0000000 0.0000000 29.4670000 8.0360000 + 33 33 1 0.0000000 0.0000000 29.4670000 13.3940000 + 34 34 1 0.0000000 0.0000000 29.4670000 18.7520000 + 35 35 1 0.0000000 0.0000000 29.4670000 24.1090000 + 36 36 1 0.0000000 0.0000000 29.4670000 29.4670000 + 37 37 1 0.0000000 5.3580000 2.6790000 2.6790000 + 38 38 1 0.0000000 5.3580000 2.6790000 8.0360000 + 39 39 1 0.0000000 5.3580000 2.6790000 13.3940000 + 40 40 1 0.0000000 5.3580000 2.6790000 18.7520000 + 41 41 1 0.0000000 5.3580000 2.6790000 24.1090000 + 42 42 1 0.0000000 5.3580000 2.6790000 29.4670000 + 43 43 1 0.0000000 5.3580000 8.0360000 2.6790000 + 44 44 1 0.0000000 5.3580000 8.0360000 8.0360000 + 45 45 1 0.0000000 5.3580000 8.0360000 13.3940000 + 46 46 1 0.0000000 5.3580000 8.0360000 18.7520000 + 47 47 1 0.0000000 5.3580000 8.0360000 24.1090000 + 48 48 1 0.0000000 5.3580000 8.0360000 29.4670000 + 49 49 1 0.0000000 5.3580000 13.3940000 2.6790000 + 50 50 1 0.0000000 5.3580000 13.3940000 8.0360000 + 51 51 1 0.0000000 5.3580000 13.3940000 13.3940000 + 52 52 1 0.0000000 5.3580000 13.3940000 18.7520000 + 53 53 1 0.0000000 5.3580000 13.3940000 24.1090000 + 54 54 1 0.0000000 5.3580000 13.3940000 29.4670000 + 55 55 1 0.0000000 5.3580000 18.7520000 2.6790000 + 56 56 1 0.0000000 5.3580000 18.7520000 8.0360000 + 57 57 1 0.0000000 5.3580000 18.7520000 13.3940000 + 58 58 1 0.0000000 5.3580000 18.7520000 18.7520000 + 59 59 1 0.0000000 5.3580000 18.7520000 24.1090000 + 60 60 1 0.0000000 5.3580000 18.7520000 29.4670000 + 61 61 1 0.0000000 5.3580000 24.1090000 2.6790000 + 62 62 1 0.0000000 5.3580000 24.1090000 8.0360000 + 63 63 1 0.0000000 5.3580000 24.1090000 13.3940000 + 64 64 1 0.0000000 5.3580000 24.1090000 18.7520000 + 65 65 1 0.0000000 5.3580000 24.1090000 24.1090000 + 66 66 1 0.0000000 5.3580000 24.1090000 29.4670000 + 67 67 1 0.0000000 5.3580000 29.4670000 2.6790000 + 68 68 1 0.0000000 5.3580000 29.4670000 8.0360000 + 69 69 1 0.0000000 5.3580000 29.4670000 13.3940000 + 70 70 1 0.0000000 5.3580000 29.4670000 18.7520000 + 71 71 1 0.0000000 5.3580000 29.4670000 24.1090000 + 72 72 1 0.0000000 5.3580000 29.4670000 29.4670000 + 73 73 1 0.0000000 10.7150000 2.6790000 2.6790000 + 74 74 1 0.0000000 10.7150000 2.6790000 8.0360000 + 75 75 1 0.0000000 10.7150000 2.6790000 13.3940000 + 76 76 1 0.0000000 10.7150000 2.6790000 18.7520000 + 77 77 1 0.0000000 10.7150000 2.6790000 24.1090000 + 78 78 1 0.0000000 10.7150000 2.6790000 29.4670000 + 79 79 1 0.0000000 10.7150000 8.0360000 2.6790000 + 80 80 1 0.0000000 10.7150000 8.0360000 8.0360000 + 81 81 1 0.0000000 10.7150000 8.0360000 13.3940000 + 82 82 1 0.0000000 10.7150000 8.0360000 18.7520000 + 83 83 1 0.0000000 10.7150000 8.0360000 24.1090000 + 84 84 1 0.0000000 10.7150000 8.0360000 29.4670000 + 85 85 1 0.0000000 10.7150000 13.3940000 2.6790000 + 86 86 1 0.0000000 10.7150000 13.3940000 8.0360000 + 87 87 1 0.0000000 10.7150000 13.3940000 13.3940000 + 88 88 1 0.0000000 10.7150000 13.3940000 18.7520000 + 89 89 1 0.0000000 10.7150000 13.3940000 24.1090000 + 90 90 1 0.0000000 10.7150000 13.3940000 29.4670000 + 91 91 1 0.0000000 10.7150000 18.7520000 2.6790000 + 92 92 1 0.0000000 10.7150000 18.7520000 8.0360000 + 93 93 1 0.0000000 10.7150000 18.7520000 13.3940000 + 94 94 1 0.0000000 10.7150000 18.7520000 18.7520000 + 95 95 1 0.0000000 10.7150000 18.7520000 24.1090000 + 96 96 1 0.0000000 10.7150000 18.7520000 29.4670000 + 97 97 1 0.0000000 10.7150000 24.1090000 2.6790000 + 98 98 1 0.0000000 10.7150000 24.1090000 8.0360000 + 99 99 1 0.0000000 10.7150000 24.1090000 13.3940000 + 100 100 1 0.0000000 10.7150000 24.1090000 18.7520000 + 101 101 1 0.0000000 10.7150000 24.1090000 24.1090000 + 102 102 1 0.0000000 10.7150000 24.1090000 29.4670000 + 103 103 1 0.0000000 10.7150000 29.4670000 2.6790000 + 104 104 1 0.0000000 10.7150000 29.4670000 8.0360000 + 105 105 1 0.0000000 10.7150000 29.4670000 13.3940000 + 106 106 1 0.0000000 10.7150000 29.4670000 18.7520000 + 107 107 1 0.0000000 10.7150000 29.4670000 24.1090000 + 108 108 1 0.0000000 10.7150000 29.4670000 29.4670000 + 109 109 1 0.0000000 16.0730000 2.6790000 2.6790000 + 110 110 1 0.0000000 16.0730000 2.6790000 8.0360000 + 111 111 1 0.0000000 16.0730000 2.6790000 13.3940000 + 112 112 1 0.0000000 16.0730000 2.6790000 18.7520000 + 113 113 1 0.0000000 16.0730000 2.6790000 24.1090000 + 114 114 1 0.0000000 16.0730000 2.6790000 29.4670000 + 115 115 1 0.0000000 16.0730000 8.0360000 2.6790000 + 116 116 1 0.0000000 16.0730000 8.0360000 8.0360000 + 117 117 1 0.0000000 16.0730000 8.0360000 13.3940000 + 118 118 1 0.0000000 16.0730000 8.0360000 18.7520000 + 119 119 1 0.0000000 16.0730000 8.0360000 24.1090000 + 120 120 1 0.0000000 16.0730000 8.0360000 29.4670000 + 121 121 1 0.0000000 16.0730000 13.3940000 2.6790000 + 122 122 1 0.0000000 16.0730000 13.3940000 8.0360000 + 123 123 1 0.0000000 16.0730000 13.3940000 13.3940000 + 124 124 1 0.0000000 16.0730000 13.3940000 18.7520000 + 125 125 1 0.0000000 16.0730000 13.3940000 24.1090000 + 126 126 1 0.0000000 16.0730000 13.3940000 29.4670000 + 127 127 1 0.0000000 16.0730000 18.7520000 2.6790000 + 128 128 1 0.0000000 16.0730000 18.7520000 8.0360000 + 129 129 1 0.0000000 16.0730000 18.7520000 13.3940000 + 130 130 1 0.0000000 16.0730000 18.7520000 18.7520000 + 131 131 1 0.0000000 16.0730000 18.7520000 24.1090000 + 132 132 1 0.0000000 16.0730000 18.7520000 29.4670000 + 133 133 1 0.0000000 16.0730000 24.1090000 2.6790000 + 134 134 1 0.0000000 16.0730000 24.1090000 8.0360000 + 135 135 1 0.0000000 16.0730000 24.1090000 13.3940000 + 136 136 1 0.0000000 16.0730000 24.1090000 18.7520000 + 137 137 1 0.0000000 16.0730000 24.1090000 24.1090000 + 138 138 1 0.0000000 16.0730000 24.1090000 29.4670000 + 139 139 1 0.0000000 16.0730000 29.4670000 2.6790000 + 140 140 1 0.0000000 16.0730000 29.4670000 8.0360000 + 141 141 1 0.0000000 16.0730000 29.4670000 13.3940000 + 142 142 1 0.0000000 16.0730000 29.4670000 18.7520000 + 143 143 1 0.0000000 16.0730000 29.4670000 24.1090000 + 144 144 1 0.0000000 16.0730000 29.4670000 29.4670000 + 145 145 1 0.0000000 21.4310000 2.6790000 2.6790000 + 146 146 1 0.0000000 21.4310000 2.6790000 8.0360000 + 147 147 1 0.0000000 21.4310000 2.6790000 13.3940000 + 148 148 1 0.0000000 21.4310000 2.6790000 18.7520000 + 149 149 1 0.0000000 21.4310000 2.6790000 24.1090000 + 150 150 1 0.0000000 21.4310000 2.6790000 29.4670000 + 151 151 1 0.0000000 21.4310000 8.0360000 2.6790000 + 152 152 1 0.0000000 21.4310000 8.0360000 8.0360000 + 153 153 1 0.0000000 21.4310000 8.0360000 13.3940000 + 154 154 1 0.0000000 21.4310000 8.0360000 18.7520000 + 155 155 1 0.0000000 21.4310000 8.0360000 24.1090000 + 156 156 1 0.0000000 21.4310000 8.0360000 29.4670000 + 157 157 1 0.0000000 21.4310000 13.3940000 2.6790000 + 158 158 1 0.0000000 21.4310000 13.3940000 8.0360000 + 159 159 1 0.0000000 21.4310000 13.3940000 13.3940000 + 160 160 1 0.0000000 21.4310000 13.3940000 18.7520000 + 161 161 1 0.0000000 21.4310000 13.3940000 24.1090000 + 162 162 1 0.0000000 21.4310000 13.3940000 29.4670000 + 163 163 1 0.0000000 21.4310000 18.7520000 2.6790000 + 164 164 1 0.0000000 21.4310000 18.7520000 8.0360000 + 165 165 1 0.0000000 21.4310000 18.7520000 13.3940000 + 166 166 1 0.0000000 21.4310000 18.7520000 18.7520000 + 167 167 1 0.0000000 21.4310000 18.7520000 24.1090000 + 168 168 1 0.0000000 21.4310000 18.7520000 29.4670000 + 169 169 1 0.0000000 21.4310000 24.1090000 2.6790000 + 170 170 1 0.0000000 21.4310000 24.1090000 8.0360000 + 171 171 1 0.0000000 21.4310000 24.1090000 13.3940000 + 172 172 1 0.0000000 21.4310000 24.1090000 18.7520000 + 173 173 1 0.0000000 21.4310000 24.1090000 24.1090000 + 174 174 1 0.0000000 21.4310000 24.1090000 29.4670000 + 175 175 1 0.0000000 21.4310000 29.4670000 2.6790000 + 176 176 1 0.0000000 21.4310000 29.4670000 8.0360000 + 177 177 1 0.0000000 21.4310000 29.4670000 13.3940000 + 178 178 1 0.0000000 21.4310000 29.4670000 18.7520000 + 179 179 1 0.0000000 21.4310000 29.4670000 24.1090000 + 180 180 1 0.0000000 21.4310000 29.4670000 29.4670000 + 181 181 1 0.0000000 26.7880000 2.6790000 2.6790000 + 182 182 1 0.0000000 26.7880000 2.6790000 8.0360000 + 183 183 1 0.0000000 26.7880000 2.6790000 13.3940000 + 184 184 1 0.0000000 26.7880000 2.6790000 18.7520000 + 185 185 1 0.0000000 26.7880000 2.6790000 24.1090000 + 186 186 1 0.0000000 26.7880000 2.6790000 29.4670000 + 187 187 1 0.0000000 26.7880000 8.0360000 2.6790000 + 188 188 1 0.0000000 26.7880000 8.0360000 8.0360000 + 189 189 1 0.0000000 26.7880000 8.0360000 13.3940000 + 190 190 1 0.0000000 26.7880000 8.0360000 18.7520000 + 191 191 1 0.0000000 26.7880000 8.0360000 24.1090000 + 192 192 1 0.0000000 26.7880000 8.0360000 29.4670000 + 193 193 1 0.0000000 26.7880000 13.3940000 2.6790000 + 194 194 1 0.0000000 26.7880000 13.3940000 8.0360000 + 195 195 1 0.0000000 26.7880000 13.3940000 13.3940000 + 196 196 1 0.0000000 26.7880000 13.3940000 18.7520000 + 197 197 1 0.0000000 26.7880000 13.3940000 24.1090000 + 198 198 1 0.0000000 26.7880000 13.3940000 29.4670000 + 199 199 1 0.0000000 26.7880000 18.7520000 2.6790000 + 200 200 1 0.0000000 26.7880000 18.7520000 8.0360000 + 201 201 1 0.0000000 26.7880000 18.7520000 13.3940000 + 202 202 1 0.0000000 26.7880000 18.7520000 18.7520000 + 203 203 1 0.0000000 26.7880000 18.7520000 24.1090000 + 204 204 1 0.0000000 26.7880000 18.7520000 29.4670000 + 205 205 1 0.0000000 26.7880000 24.1090000 2.6790000 + 206 206 1 0.0000000 26.7880000 24.1090000 8.0360000 + 207 207 1 0.0000000 26.7880000 24.1090000 13.3940000 + 208 208 1 0.0000000 26.7880000 24.1090000 18.7520000 + 209 209 1 0.0000000 26.7880000 24.1090000 24.1090000 + 210 210 1 0.0000000 26.7880000 24.1090000 29.4670000 + 211 211 1 0.0000000 26.7880000 29.4670000 2.6790000 + 212 212 1 0.0000000 26.7880000 29.4670000 8.0360000 + 213 213 1 0.0000000 26.7880000 29.4670000 13.3940000 + 214 214 1 0.0000000 26.7880000 29.4670000 18.7520000 + 215 215 1 0.0000000 26.7880000 29.4670000 24.1090000 + 216 216 1 0.0000000 26.7880000 29.4670000 29.4670000 + 217 217 1 0.0000000 2.6790000 5.3580000 2.6790000 + 218 218 1 0.0000000 2.6790000 5.3580000 8.0360000 + 219 219 1 0.0000000 2.6790000 5.3580000 13.3940000 + 220 220 1 0.0000000 2.6790000 5.3580000 18.7520000 + 221 221 1 0.0000000 2.6790000 5.3580000 24.1090000 + 222 222 1 0.0000000 2.6790000 5.3580000 29.4670000 + 223 223 1 0.0000000 2.6790000 10.7150000 2.6790000 + 224 224 1 0.0000000 2.6790000 10.7150000 8.0360000 + 225 225 1 0.0000000 2.6790000 10.7150000 13.3940000 + 226 226 1 0.0000000 2.6790000 10.7150000 18.7520000 + 227 227 1 0.0000000 2.6790000 10.7150000 24.1090000 + 228 228 1 0.0000000 2.6790000 10.7150000 29.4670000 + 229 229 1 0.0000000 2.6790000 16.0730000 2.6790000 + 230 230 1 0.0000000 2.6790000 16.0730000 8.0360000 + 231 231 1 0.0000000 2.6790000 16.0730000 13.3940000 + 232 232 1 0.0000000 2.6790000 16.0730000 18.7520000 + 233 233 1 0.0000000 2.6790000 16.0730000 24.1090000 + 234 234 1 0.0000000 2.6790000 16.0730000 29.4670000 + 235 235 1 0.0000000 2.6790000 21.4310000 2.6790000 + 236 236 1 0.0000000 2.6790000 21.4310000 8.0360000 + 237 237 1 0.0000000 2.6790000 21.4310000 13.3940000 + 238 238 1 0.0000000 2.6790000 21.4310000 18.7520000 + 239 239 1 0.0000000 2.6790000 21.4310000 24.1090000 + 240 240 1 0.0000000 2.6790000 21.4310000 29.4670000 + 241 241 1 0.0000000 2.6790000 26.7880000 2.6790000 + 242 242 1 0.0000000 2.6790000 26.7880000 8.0360000 + 243 243 1 0.0000000 2.6790000 26.7880000 13.3940000 + 244 244 1 0.0000000 2.6790000 26.7880000 18.7520000 + 245 245 1 0.0000000 2.6790000 26.7880000 24.1090000 + 246 246 1 0.0000000 2.6790000 26.7880000 29.4670000 + 247 247 1 0.0000000 2.6790000 32.1460000 2.6790000 + 248 248 1 0.0000000 2.6790000 32.1460000 8.0360000 + 249 249 1 0.0000000 2.6790000 32.1460000 13.3940000 + 250 250 1 0.0000000 2.6790000 32.1460000 18.7520000 + 251 251 1 0.0000000 2.6790000 32.1460000 24.1090000 + 252 252 1 0.0000000 2.6790000 32.1460000 29.4670000 + 253 253 1 0.0000000 8.0360000 5.3580000 2.6790000 + 254 254 1 0.0000000 8.0360000 5.3580000 8.0360000 + 255 255 1 0.0000000 8.0360000 5.3580000 13.3940000 + 256 256 1 0.0000000 8.0360000 5.3580000 18.7520000 + 257 257 1 0.0000000 8.0360000 5.3580000 24.1090000 + 258 258 1 0.0000000 8.0360000 5.3580000 29.4670000 + 259 259 1 0.0000000 8.0360000 10.7150000 2.6790000 + 260 260 1 0.0000000 8.0360000 10.7150000 8.0360000 + 261 261 1 0.0000000 8.0360000 10.7150000 13.3940000 + 262 262 1 0.0000000 8.0360000 10.7150000 18.7520000 + 263 263 1 0.0000000 8.0360000 10.7150000 24.1090000 + 264 264 1 0.0000000 8.0360000 10.7150000 29.4670000 + 265 265 1 0.0000000 8.0360000 16.0730000 2.6790000 + 266 266 1 0.0000000 8.0360000 16.0730000 8.0360000 + 267 267 1 0.0000000 8.0360000 16.0730000 13.3940000 + 268 268 1 0.0000000 8.0360000 16.0730000 18.7520000 + 269 269 1 0.0000000 8.0360000 16.0730000 24.1090000 + 270 270 1 0.0000000 8.0360000 16.0730000 29.4670000 + 271 271 1 0.0000000 8.0360000 21.4310000 2.6790000 + 272 272 1 0.0000000 8.0360000 21.4310000 8.0360000 + 273 273 1 0.0000000 8.0360000 21.4310000 13.3940000 + 274 274 1 0.0000000 8.0360000 21.4310000 18.7520000 + 275 275 1 0.0000000 8.0360000 21.4310000 24.1090000 + 276 276 1 0.0000000 8.0360000 21.4310000 29.4670000 + 277 277 1 0.0000000 8.0360000 26.7880000 2.6790000 + 278 278 1 0.0000000 8.0360000 26.7880000 8.0360000 + 279 279 1 0.0000000 8.0360000 26.7880000 13.3940000 + 280 280 1 0.0000000 8.0360000 26.7880000 18.7520000 + 281 281 1 0.0000000 8.0360000 26.7880000 24.1090000 + 282 282 1 0.0000000 8.0360000 26.7880000 29.4670000 + 283 283 1 0.0000000 8.0360000 32.1460000 2.6790000 + 284 284 1 0.0000000 8.0360000 32.1460000 8.0360000 + 285 285 1 0.0000000 8.0360000 32.1460000 13.3940000 + 286 286 1 0.0000000 8.0360000 32.1460000 18.7520000 + 287 287 1 0.0000000 8.0360000 32.1460000 24.1090000 + 288 288 1 0.0000000 8.0360000 32.1460000 29.4670000 + 289 289 1 0.0000000 13.3940000 5.3580000 2.6790000 + 290 290 1 0.0000000 13.3940000 5.3580000 8.0360000 + 291 291 1 0.0000000 13.3940000 5.3580000 13.3940000 + 292 292 1 0.0000000 13.3940000 5.3580000 18.7520000 + 293 293 1 0.0000000 13.3940000 5.3580000 24.1090000 + 294 294 1 0.0000000 13.3940000 5.3580000 29.4670000 + 295 295 1 0.0000000 13.3940000 10.7150000 2.6790000 + 296 296 1 0.0000000 13.3940000 10.7150000 8.0360000 + 297 297 1 0.0000000 13.3940000 10.7150000 13.3940000 + 298 298 1 0.0000000 13.3940000 10.7150000 18.7520000 + 299 299 1 0.0000000 13.3940000 10.7150000 24.1090000 + 300 300 1 0.0000000 13.3940000 10.7150000 29.4670000 + 301 301 1 0.0000000 13.3940000 16.0730000 2.6790000 + 302 302 1 0.0000000 13.3940000 16.0730000 8.0360000 + 303 303 1 0.0000000 13.3940000 16.0730000 13.3940000 + 304 304 1 0.0000000 13.3940000 16.0730000 18.7520000 + 305 305 1 0.0000000 13.3940000 16.0730000 24.1090000 + 306 306 1 0.0000000 13.3940000 16.0730000 29.4670000 + 307 307 1 0.0000000 13.3940000 21.4310000 2.6790000 + 308 308 1 0.0000000 13.3940000 21.4310000 8.0360000 + 309 309 1 0.0000000 13.3940000 21.4310000 13.3940000 + 310 310 1 0.0000000 13.3940000 21.4310000 18.7520000 + 311 311 1 0.0000000 13.3940000 21.4310000 24.1090000 + 312 312 1 0.0000000 13.3940000 21.4310000 29.4670000 + 313 313 1 0.0000000 13.3940000 26.7880000 2.6790000 + 314 314 1 0.0000000 13.3940000 26.7880000 8.0360000 + 315 315 1 0.0000000 13.3940000 26.7880000 13.3940000 + 316 316 1 0.0000000 13.3940000 26.7880000 18.7520000 + 317 317 1 0.0000000 13.3940000 26.7880000 24.1090000 + 318 318 1 0.0000000 13.3940000 26.7880000 29.4670000 + 319 319 1 0.0000000 13.3940000 32.1460000 2.6790000 + 320 320 1 0.0000000 13.3940000 32.1460000 8.0360000 + 321 321 1 0.0000000 13.3940000 32.1460000 13.3940000 + 322 322 1 0.0000000 13.3940000 32.1460000 18.7520000 + 323 323 1 0.0000000 13.3940000 32.1460000 24.1090000 + 324 324 1 0.0000000 13.3940000 32.1460000 29.4670000 + 325 325 1 0.0000000 18.7520000 5.3580000 2.6790000 + 326 326 1 0.0000000 18.7520000 5.3580000 8.0360000 + 327 327 1 0.0000000 18.7520000 5.3580000 13.3940000 + 328 328 1 0.0000000 18.7520000 5.3580000 18.7520000 + 329 329 1 0.0000000 18.7520000 5.3580000 24.1090000 + 330 330 1 0.0000000 18.7520000 5.3580000 29.4670000 + 331 331 1 0.0000000 18.7520000 10.7150000 2.6790000 + 332 332 1 0.0000000 18.7520000 10.7150000 8.0360000 + 333 333 1 0.0000000 18.7520000 10.7150000 13.3940000 + 334 334 1 0.0000000 18.7520000 10.7150000 18.7520000 + 335 335 1 0.0000000 18.7520000 10.7150000 24.1090000 + 336 336 1 0.0000000 18.7520000 10.7150000 29.4670000 + 337 337 1 0.0000000 18.7520000 16.0730000 2.6790000 + 338 338 1 0.0000000 18.7520000 16.0730000 8.0360000 + 339 339 1 0.0000000 18.7520000 16.0730000 13.3940000 + 340 340 1 0.0000000 18.7520000 16.0730000 18.7520000 + 341 341 1 0.0000000 18.7520000 16.0730000 24.1090000 + 342 342 1 0.0000000 18.7520000 16.0730000 29.4670000 + 343 343 1 0.0000000 18.7520000 21.4310000 2.6790000 + 344 344 1 0.0000000 18.7520000 21.4310000 8.0360000 + 345 345 1 0.0000000 18.7520000 21.4310000 13.3940000 + 346 346 1 0.0000000 18.7520000 21.4310000 18.7520000 + 347 347 1 0.0000000 18.7520000 21.4310000 24.1090000 + 348 348 1 0.0000000 18.7520000 21.4310000 29.4670000 + 349 349 1 0.0000000 18.7520000 26.7880000 2.6790000 + 350 350 1 0.0000000 18.7520000 26.7880000 8.0360000 + 351 351 1 0.0000000 18.7520000 26.7880000 13.3940000 + 352 352 1 0.0000000 18.7520000 26.7880000 18.7520000 + 353 353 1 0.0000000 18.7520000 26.7880000 24.1090000 + 354 354 1 0.0000000 18.7520000 26.7880000 29.4670000 + 355 355 1 0.0000000 18.7520000 32.1460000 2.6790000 + 356 356 1 0.0000000 18.7520000 32.1460000 8.0360000 + 357 357 1 0.0000000 18.7520000 32.1460000 13.3940000 + 358 358 1 0.0000000 18.7520000 32.1460000 18.7520000 + 359 359 1 0.0000000 18.7520000 32.1460000 24.1090000 + 360 360 1 0.0000000 18.7520000 32.1460000 29.4670000 + 361 361 1 0.0000000 24.1090000 5.3580000 2.6790000 + 362 362 1 0.0000000 24.1090000 5.3580000 8.0360000 + 363 363 1 0.0000000 24.1090000 5.3580000 13.3940000 + 364 364 1 0.0000000 24.1090000 5.3580000 18.7520000 + 365 365 1 0.0000000 24.1090000 5.3580000 24.1090000 + 366 366 1 0.0000000 24.1090000 5.3580000 29.4670000 + 367 367 1 0.0000000 24.1090000 10.7150000 2.6790000 + 368 368 1 0.0000000 24.1090000 10.7150000 8.0360000 + 369 369 1 0.0000000 24.1090000 10.7150000 13.3940000 + 370 370 1 0.0000000 24.1090000 10.7150000 18.7520000 + 371 371 1 0.0000000 24.1090000 10.7150000 24.1090000 + 372 372 1 0.0000000 24.1090000 10.7150000 29.4670000 + 373 373 1 0.0000000 24.1090000 16.0730000 2.6790000 + 374 374 1 0.0000000 24.1090000 16.0730000 8.0360000 + 375 375 1 0.0000000 24.1090000 16.0730000 13.3940000 + 376 376 1 0.0000000 24.1090000 16.0730000 18.7520000 + 377 377 1 0.0000000 24.1090000 16.0730000 24.1090000 + 378 378 1 0.0000000 24.1090000 16.0730000 29.4670000 + 379 379 1 0.0000000 24.1090000 21.4310000 2.6790000 + 380 380 1 0.0000000 24.1090000 21.4310000 8.0360000 + 381 381 1 0.0000000 24.1090000 21.4310000 13.3940000 + 382 382 1 0.0000000 24.1090000 21.4310000 18.7520000 + 383 383 1 0.0000000 24.1090000 21.4310000 24.1090000 + 384 384 1 0.0000000 24.1090000 21.4310000 29.4670000 + 385 385 1 0.0000000 24.1090000 26.7880000 2.6790000 + 386 386 1 0.0000000 24.1090000 26.7880000 8.0360000 + 387 387 1 0.0000000 24.1090000 26.7880000 13.3940000 + 388 388 1 0.0000000 24.1090000 26.7880000 18.7520000 + 389 389 1 0.0000000 24.1090000 26.7880000 24.1090000 + 390 390 1 0.0000000 24.1090000 26.7880000 29.4670000 + 391 391 1 0.0000000 24.1090000 32.1460000 2.6790000 + 392 392 1 0.0000000 24.1090000 32.1460000 8.0360000 + 393 393 1 0.0000000 24.1090000 32.1460000 13.3940000 + 394 394 1 0.0000000 24.1090000 32.1460000 18.7520000 + 395 395 1 0.0000000 24.1090000 32.1460000 24.1090000 + 396 396 1 0.0000000 24.1090000 32.1460000 29.4670000 + 397 397 1 0.0000000 29.4670000 5.3580000 2.6790000 + 398 398 1 0.0000000 29.4670000 5.3580000 8.0360000 + 399 399 1 0.0000000 29.4670000 5.3580000 13.3940000 + 400 400 1 0.0000000 29.4670000 5.3580000 18.7520000 + 401 401 1 0.0000000 29.4670000 5.3580000 24.1090000 + 402 402 1 0.0000000 29.4670000 5.3580000 29.4670000 + 403 403 1 0.0000000 29.4670000 10.7150000 2.6790000 + 404 404 1 0.0000000 29.4670000 10.7150000 8.0360000 + 405 405 1 0.0000000 29.4670000 10.7150000 13.3940000 + 406 406 1 0.0000000 29.4670000 10.7150000 18.7520000 + 407 407 1 0.0000000 29.4670000 10.7150000 24.1090000 + 408 408 1 0.0000000 29.4670000 10.7150000 29.4670000 + 409 409 1 0.0000000 29.4670000 16.0730000 2.6790000 + 410 410 1 0.0000000 29.4670000 16.0730000 8.0360000 + 411 411 1 0.0000000 29.4670000 16.0730000 13.3940000 + 412 412 1 0.0000000 29.4670000 16.0730000 18.7520000 + 413 413 1 0.0000000 29.4670000 16.0730000 24.1090000 + 414 414 1 0.0000000 29.4670000 16.0730000 29.4670000 + 415 415 1 0.0000000 29.4670000 21.4310000 2.6790000 + 416 416 1 0.0000000 29.4670000 21.4310000 8.0360000 + 417 417 1 0.0000000 29.4670000 21.4310000 13.3940000 + 418 418 1 0.0000000 29.4670000 21.4310000 18.7520000 + 419 419 1 0.0000000 29.4670000 21.4310000 24.1090000 + 420 420 1 0.0000000 29.4670000 21.4310000 29.4670000 + 421 421 1 0.0000000 29.4670000 26.7880000 2.6790000 + 422 422 1 0.0000000 29.4670000 26.7880000 8.0360000 + 423 423 1 0.0000000 29.4670000 26.7880000 13.3940000 + 424 424 1 0.0000000 29.4670000 26.7880000 18.7520000 + 425 425 1 0.0000000 29.4670000 26.7880000 24.1090000 + 426 426 1 0.0000000 29.4670000 26.7880000 29.4670000 + 427 427 1 0.0000000 29.4670000 32.1460000 2.6790000 + 428 428 1 0.0000000 29.4670000 32.1460000 8.0360000 + 429 429 1 0.0000000 29.4670000 32.1460000 13.3940000 + 430 430 1 0.0000000 29.4670000 32.1460000 18.7520000 + 431 431 1 0.0000000 29.4670000 32.1460000 24.1090000 + 432 432 1 0.0000000 29.4670000 32.1460000 29.4670000 + 433 433 1 0.0000000 2.6790000 2.6790000 5.3580000 + 434 434 1 0.0000000 2.6790000 2.6790000 10.7150000 + 435 435 1 0.0000000 2.6790000 2.6790000 16.0730000 + 436 436 1 0.0000000 2.6790000 2.6790000 21.4310000 + 437 437 1 0.0000000 2.6790000 2.6790000 26.7880000 + 438 438 1 0.0000000 2.6790000 2.6790000 32.1460000 + 439 439 1 0.0000000 2.6790000 8.0360000 5.3580000 + 440 440 1 0.0000000 2.6790000 8.0360000 10.7150000 + 441 441 1 0.0000000 2.6790000 8.0360000 16.0730000 + 442 442 1 0.0000000 2.6790000 8.0360000 21.4310000 + 443 443 1 0.0000000 2.6790000 8.0360000 26.7880000 + 444 444 1 0.0000000 2.6790000 8.0360000 32.1460000 + 445 445 1 0.0000000 2.6790000 13.3940000 5.3580000 + 446 446 1 0.0000000 2.6790000 13.3940000 10.7150000 + 447 447 1 0.0000000 2.6790000 13.3940000 16.0730000 + 448 448 1 0.0000000 2.6790000 13.3940000 21.4310000 + 449 449 1 0.0000000 2.6790000 13.3940000 26.7880000 + 450 450 1 0.0000000 2.6790000 13.3940000 32.1460000 + 451 451 1 0.0000000 2.6790000 18.7520000 5.3580000 + 452 452 1 0.0000000 2.6790000 18.7520000 10.7150000 + 453 453 1 0.0000000 2.6790000 18.7520000 16.0730000 + 454 454 1 0.0000000 2.6790000 18.7520000 21.4310000 + 455 455 1 0.0000000 2.6790000 18.7520000 26.7880000 + 456 456 1 0.0000000 2.6790000 18.7520000 32.1460000 + 457 457 1 0.0000000 2.6790000 24.1090000 5.3580000 + 458 458 1 0.0000000 2.6790000 24.1090000 10.7150000 + 459 459 1 0.0000000 2.6790000 24.1090000 16.0730000 + 460 460 1 0.0000000 2.6790000 24.1090000 21.4310000 + 461 461 1 0.0000000 2.6790000 24.1090000 26.7880000 + 462 462 1 0.0000000 2.6790000 24.1090000 32.1460000 + 463 463 1 0.0000000 2.6790000 29.4670000 5.3580000 + 464 464 1 0.0000000 2.6790000 29.4670000 10.7150000 + 465 465 1 0.0000000 2.6790000 29.4670000 16.0730000 + 466 466 1 0.0000000 2.6790000 29.4670000 21.4310000 + 467 467 1 0.0000000 2.6790000 29.4670000 26.7880000 + 468 468 1 0.0000000 2.6790000 29.4670000 32.1460000 + 469 469 1 0.0000000 8.0360000 2.6790000 5.3580000 + 470 470 1 0.0000000 8.0360000 2.6790000 10.7150000 + 471 471 1 0.0000000 8.0360000 2.6790000 16.0730000 + 472 472 1 0.0000000 8.0360000 2.6790000 21.4310000 + 473 473 1 0.0000000 8.0360000 2.6790000 26.7880000 + 474 474 1 0.0000000 8.0360000 2.6790000 32.1460000 + 475 475 1 0.0000000 8.0360000 8.0360000 5.3580000 + 476 476 1 0.0000000 8.0360000 8.0360000 10.7150000 + 477 477 1 0.0000000 8.0360000 8.0360000 16.0730000 + 478 478 1 0.0000000 8.0360000 8.0360000 21.4310000 + 479 479 1 0.0000000 8.0360000 8.0360000 26.7880000 + 480 480 1 0.0000000 8.0360000 8.0360000 32.1460000 + 481 481 1 0.0000000 8.0360000 13.3940000 5.3580000 + 482 482 1 0.0000000 8.0360000 13.3940000 10.7150000 + 483 483 1 0.0000000 8.0360000 13.3940000 16.0730000 + 484 484 1 0.0000000 8.0360000 13.3940000 21.4310000 + 485 485 1 0.0000000 8.0360000 13.3940000 26.7880000 + 486 486 1 0.0000000 8.0360000 13.3940000 32.1460000 + 487 487 1 0.0000000 8.0360000 18.7520000 5.3580000 + 488 488 1 0.0000000 8.0360000 18.7520000 10.7150000 + 489 489 1 0.0000000 8.0360000 18.7520000 16.0730000 + 490 490 1 0.0000000 8.0360000 18.7520000 21.4310000 + 491 491 1 0.0000000 8.0360000 18.7520000 26.7880000 + 492 492 1 0.0000000 8.0360000 18.7520000 32.1460000 + 493 493 1 0.0000000 8.0360000 24.1090000 5.3580000 + 494 494 1 0.0000000 8.0360000 24.1090000 10.7150000 + 495 495 1 0.0000000 8.0360000 24.1090000 16.0730000 + 496 496 1 0.0000000 8.0360000 24.1090000 21.4310000 + 497 497 1 0.0000000 8.0360000 24.1090000 26.7880000 + 498 498 1 0.0000000 8.0360000 24.1090000 32.1460000 + 499 499 1 0.0000000 8.0360000 29.4670000 5.3580000 + 500 500 1 0.0000000 8.0360000 29.4670000 10.7150000 + 501 501 1 0.0000000 8.0360000 29.4670000 16.0730000 + 502 502 1 0.0000000 8.0360000 29.4670000 21.4310000 + 503 503 1 0.0000000 8.0360000 29.4670000 26.7880000 + 504 504 1 0.0000000 8.0360000 29.4670000 32.1460000 + 505 505 1 0.0000000 13.3940000 2.6790000 5.3580000 + 506 506 1 0.0000000 13.3940000 2.6790000 10.7150000 + 507 507 1 0.0000000 13.3940000 2.6790000 16.0730000 + 508 508 1 0.0000000 13.3940000 2.6790000 21.4310000 + 509 509 1 0.0000000 13.3940000 2.6790000 26.7880000 + 510 510 1 0.0000000 13.3940000 2.6790000 32.1460000 + 511 511 1 0.0000000 13.3940000 8.0360000 5.3580000 + 512 512 1 0.0000000 13.3940000 8.0360000 10.7150000 + 513 513 1 0.0000000 13.3940000 8.0360000 16.0730000 + 514 514 1 0.0000000 13.3940000 8.0360000 21.4310000 + 515 515 1 0.0000000 13.3940000 8.0360000 26.7880000 + 516 516 1 0.0000000 13.3940000 8.0360000 32.1460000 + 517 517 1 0.0000000 13.3940000 13.3940000 5.3580000 + 518 518 1 0.0000000 13.3940000 13.3940000 10.7150000 + 519 519 1 0.0000000 13.3940000 13.3940000 16.0730000 + 520 520 1 0.0000000 13.3940000 13.3940000 21.4310000 + 521 521 1 0.0000000 13.3940000 13.3940000 26.7880000 + 522 522 1 0.0000000 13.3940000 13.3940000 32.1460000 + 523 523 1 0.0000000 13.3940000 18.7520000 5.3580000 + 524 524 1 0.0000000 13.3940000 18.7520000 10.7150000 + 525 525 1 0.0000000 13.3940000 18.7520000 16.0730000 + 526 526 1 0.0000000 13.3940000 18.7520000 21.4310000 + 527 527 1 0.0000000 13.3940000 18.7520000 26.7880000 + 528 528 1 0.0000000 13.3940000 18.7520000 32.1460000 + 529 529 1 0.0000000 13.3940000 24.1090000 5.3580000 + 530 530 1 0.0000000 13.3940000 24.1090000 10.7150000 + 531 531 1 0.0000000 13.3940000 24.1090000 16.0730000 + 532 532 1 0.0000000 13.3940000 24.1090000 21.4310000 + 533 533 1 0.0000000 13.3940000 24.1090000 26.7880000 + 534 534 1 0.0000000 13.3940000 24.1090000 32.1460000 + 535 535 1 0.0000000 13.3940000 29.4670000 5.3580000 + 536 536 1 0.0000000 13.3940000 29.4670000 10.7150000 + 537 537 1 0.0000000 13.3940000 29.4670000 16.0730000 + 538 538 1 0.0000000 13.3940000 29.4670000 21.4310000 + 539 539 1 0.0000000 13.3940000 29.4670000 26.7880000 + 540 540 1 0.0000000 13.3940000 29.4670000 32.1460000 + 541 541 1 0.0000000 18.7520000 2.6790000 5.3580000 + 542 542 1 0.0000000 18.7520000 2.6790000 10.7150000 + 543 543 1 0.0000000 18.7520000 2.6790000 16.0730000 + 544 544 1 0.0000000 18.7520000 2.6790000 21.4310000 + 545 545 1 0.0000000 18.7520000 2.6790000 26.7880000 + 546 546 1 0.0000000 18.7520000 2.6790000 32.1460000 + 547 547 1 0.0000000 18.7520000 8.0360000 5.3580000 + 548 548 1 0.0000000 18.7520000 8.0360000 10.7150000 + 549 549 1 0.0000000 18.7520000 8.0360000 16.0730000 + 550 550 1 0.0000000 18.7520000 8.0360000 21.4310000 + 551 551 1 0.0000000 18.7520000 8.0360000 26.7880000 + 552 552 1 0.0000000 18.7520000 8.0360000 32.1460000 + 553 553 1 0.0000000 18.7520000 13.3940000 5.3580000 + 554 554 1 0.0000000 18.7520000 13.3940000 10.7150000 + 555 555 1 0.0000000 18.7520000 13.3940000 16.0730000 + 556 556 1 0.0000000 18.7520000 13.3940000 21.4310000 + 557 557 1 0.0000000 18.7520000 13.3940000 26.7880000 + 558 558 1 0.0000000 18.7520000 13.3940000 32.1460000 + 559 559 1 0.0000000 18.7520000 18.7520000 5.3580000 + 560 560 1 0.0000000 18.7520000 18.7520000 10.7150000 + 561 561 1 0.0000000 18.7520000 18.7520000 16.0730000 + 562 562 1 0.0000000 18.7520000 18.7520000 21.4310000 + 563 563 1 0.0000000 18.7520000 18.7520000 26.7880000 + 564 564 1 0.0000000 18.7520000 18.7520000 32.1460000 + 565 565 1 0.0000000 18.7520000 24.1090000 5.3580000 + 566 566 1 0.0000000 18.7520000 24.1090000 10.7150000 + 567 567 1 0.0000000 18.7520000 24.1090000 16.0730000 + 568 568 1 0.0000000 18.7520000 24.1090000 21.4310000 + 569 569 1 0.0000000 18.7520000 24.1090000 26.7880000 + 570 570 1 0.0000000 18.7520000 24.1090000 32.1460000 + 571 571 1 0.0000000 18.7520000 29.4670000 5.3580000 + 572 572 1 0.0000000 18.7520000 29.4670000 10.7150000 + 573 573 1 0.0000000 18.7520000 29.4670000 16.0730000 + 574 574 1 0.0000000 18.7520000 29.4670000 21.4310000 + 575 575 1 0.0000000 18.7520000 29.4670000 26.7880000 + 576 576 1 0.0000000 18.7520000 29.4670000 32.1460000 + 577 577 1 0.0000000 24.1090000 2.6790000 5.3580000 + 578 578 1 0.0000000 24.1090000 2.6790000 10.7150000 + 579 579 1 0.0000000 24.1090000 2.6790000 16.0730000 + 580 580 1 0.0000000 24.1090000 2.6790000 21.4310000 + 581 581 1 0.0000000 24.1090000 2.6790000 26.7880000 + 582 582 1 0.0000000 24.1090000 2.6790000 32.1460000 + 583 583 1 0.0000000 24.1090000 8.0360000 5.3580000 + 584 584 1 0.0000000 24.1090000 8.0360000 10.7150000 + 585 585 1 0.0000000 24.1090000 8.0360000 16.0730000 + 586 586 1 0.0000000 24.1090000 8.0360000 21.4310000 + 587 587 1 0.0000000 24.1090000 8.0360000 26.7880000 + 588 588 1 0.0000000 24.1090000 8.0360000 32.1460000 + 589 589 1 0.0000000 24.1090000 13.3940000 5.3580000 + 590 590 1 0.0000000 24.1090000 13.3940000 10.7150000 + 591 591 1 0.0000000 24.1090000 13.3940000 16.0730000 + 592 592 1 0.0000000 24.1090000 13.3940000 21.4310000 + 593 593 1 0.0000000 24.1090000 13.3940000 26.7880000 + 594 594 1 0.0000000 24.1090000 13.3940000 32.1460000 + 595 595 1 0.0000000 24.1090000 18.7520000 5.3580000 + 596 596 1 0.0000000 24.1090000 18.7520000 10.7150000 + 597 597 1 0.0000000 24.1090000 18.7520000 16.0730000 + 598 598 1 0.0000000 24.1090000 18.7520000 21.4310000 + 599 599 1 0.0000000 24.1090000 18.7520000 26.7880000 + 600 600 1 0.0000000 24.1090000 18.7520000 32.1460000 + 601 601 1 0.0000000 24.1090000 24.1090000 5.3580000 + 602 602 1 0.0000000 24.1090000 24.1090000 10.7150000 + 603 603 1 0.0000000 24.1090000 24.1090000 16.0730000 + 604 604 1 0.0000000 24.1090000 24.1090000 21.4310000 + 605 605 1 0.0000000 24.1090000 24.1090000 26.7880000 + 606 606 1 0.0000000 24.1090000 24.1090000 32.1460000 + 607 607 1 0.0000000 24.1090000 29.4670000 5.3580000 + 608 608 1 0.0000000 24.1090000 29.4670000 10.7150000 + 609 609 1 0.0000000 24.1090000 29.4670000 16.0730000 + 610 610 1 0.0000000 24.1090000 29.4670000 21.4310000 + 611 611 1 0.0000000 24.1090000 29.4670000 26.7880000 + 612 612 1 0.0000000 24.1090000 29.4670000 32.1460000 + 613 613 1 0.0000000 29.4670000 2.6790000 5.3580000 + 614 614 1 0.0000000 29.4670000 2.6790000 10.7150000 + 615 615 1 0.0000000 29.4670000 2.6790000 16.0730000 + 616 616 1 0.0000000 29.4670000 2.6790000 21.4310000 + 617 617 1 0.0000000 29.4670000 2.6790000 26.7880000 + 618 618 1 0.0000000 29.4670000 2.6790000 32.1460000 + 619 619 1 0.0000000 29.4670000 8.0360000 5.3580000 + 620 620 1 0.0000000 29.4670000 8.0360000 10.7150000 + 621 621 1 0.0000000 29.4670000 8.0360000 16.0730000 + 622 622 1 0.0000000 29.4670000 8.0360000 21.4310000 + 623 623 1 0.0000000 29.4670000 8.0360000 26.7880000 + 624 624 1 0.0000000 29.4670000 8.0360000 32.1460000 + 625 625 1 0.0000000 29.4670000 13.3940000 5.3580000 + 626 626 1 0.0000000 29.4670000 13.3940000 10.7150000 + 627 627 1 0.0000000 29.4670000 13.3940000 16.0730000 + 628 628 1 0.0000000 29.4670000 13.3940000 21.4310000 + 629 629 1 0.0000000 29.4670000 13.3940000 26.7880000 + 630 630 1 0.0000000 29.4670000 13.3940000 32.1460000 + 631 631 1 0.0000000 29.4670000 18.7520000 5.3580000 + 632 632 1 0.0000000 29.4670000 18.7520000 10.7150000 + 633 633 1 0.0000000 29.4670000 18.7520000 16.0730000 + 634 634 1 0.0000000 29.4670000 18.7520000 21.4310000 + 635 635 1 0.0000000 29.4670000 18.7520000 26.7880000 + 636 636 1 0.0000000 29.4670000 18.7520000 32.1460000 + 637 637 1 0.0000000 29.4670000 24.1090000 5.3580000 + 638 638 1 0.0000000 29.4670000 24.1090000 10.7150000 + 639 639 1 0.0000000 29.4670000 24.1090000 16.0730000 + 640 640 1 0.0000000 29.4670000 24.1090000 21.4310000 + 641 641 1 0.0000000 29.4670000 24.1090000 26.7880000 + 642 642 1 0.0000000 29.4670000 24.1090000 32.1460000 + 643 643 1 0.0000000 29.4670000 29.4670000 5.3580000 + 644 644 1 0.0000000 29.4670000 29.4670000 10.7150000 + 645 645 1 0.0000000 29.4670000 29.4670000 16.0730000 + 646 646 1 0.0000000 29.4670000 29.4670000 21.4310000 + 647 647 1 0.0000000 29.4670000 29.4670000 26.7880000 + 648 648 1 0.0000000 29.4670000 29.4670000 32.1460000 + 649 649 1 0.0000000 0.0000000 5.3580000 5.3580000 + 650 650 1 0.0000000 0.0000000 5.3580000 10.7150000 + 651 651 1 0.0000000 0.0000000 5.3580000 16.0730000 + 652 652 1 0.0000000 0.0000000 5.3580000 21.4310000 + 653 653 1 0.0000000 0.0000000 5.3580000 26.7880000 + 654 654 1 0.0000000 0.0000000 5.3580000 32.1460000 + 655 655 1 0.0000000 0.0000000 10.7150000 5.3580000 + 656 656 1 0.0000000 0.0000000 10.7150000 10.7150000 + 657 657 1 0.0000000 0.0000000 10.7150000 16.0730000 + 658 658 1 0.0000000 0.0000000 10.7150000 21.4310000 + 659 659 1 0.0000000 0.0000000 10.7150000 26.7880000 + 660 660 1 0.0000000 0.0000000 10.7150000 32.1460000 + 661 661 1 0.0000000 0.0000000 16.0730000 5.3580000 + 662 662 1 0.0000000 0.0000000 16.0730000 10.7150000 + 663 663 1 0.0000000 0.0000000 16.0730000 16.0730000 + 664 664 1 0.0000000 0.0000000 16.0730000 21.4310000 + 665 665 1 0.0000000 0.0000000 16.0730000 26.7880000 + 666 666 1 0.0000000 0.0000000 16.0730000 32.1460000 + 667 667 1 0.0000000 0.0000000 21.4310000 5.3580000 + 668 668 1 0.0000000 0.0000000 21.4310000 10.7150000 + 669 669 1 0.0000000 0.0000000 21.4310000 16.0730000 + 670 670 1 0.0000000 0.0000000 21.4310000 21.4310000 + 671 671 1 0.0000000 0.0000000 21.4310000 26.7880000 + 672 672 1 0.0000000 0.0000000 21.4310000 32.1460000 + 673 673 1 0.0000000 0.0000000 26.7880000 5.3580000 + 674 674 1 0.0000000 0.0000000 26.7880000 10.7150000 + 675 675 1 0.0000000 0.0000000 26.7880000 16.0730000 + 676 676 1 0.0000000 0.0000000 26.7880000 21.4310000 + 677 677 1 0.0000000 0.0000000 26.7880000 26.7880000 + 678 678 1 0.0000000 0.0000000 26.7880000 32.1460000 + 679 679 1 0.0000000 0.0000000 32.1460000 5.3580000 + 680 680 1 0.0000000 0.0000000 32.1460000 10.7150000 + 681 681 1 0.0000000 0.0000000 32.1460000 16.0730000 + 682 682 1 0.0000000 0.0000000 32.1460000 21.4310000 + 683 683 1 0.0000000 0.0000000 32.1460000 26.7880000 + 684 684 1 0.0000000 0.0000000 32.1460000 32.1460000 + 685 685 1 0.0000000 5.3580000 5.3580000 5.3580000 + 686 686 1 0.0000000 5.3580000 5.3580000 10.7150000 + 687 687 1 0.0000000 5.3580000 5.3580000 16.0730000 + 688 688 1 0.0000000 5.3580000 5.3580000 21.4310000 + 689 689 1 0.0000000 5.3580000 5.3580000 26.7880000 + 690 690 1 0.0000000 5.3580000 5.3580000 32.1460000 + 691 691 1 0.0000000 5.3580000 10.7150000 5.3580000 + 692 692 1 0.0000000 5.3580000 10.7150000 10.7150000 + 693 693 1 0.0000000 5.3580000 10.7150000 16.0730000 + 694 694 1 0.0000000 5.3580000 10.7150000 21.4310000 + 695 695 1 0.0000000 5.3580000 10.7150000 26.7880000 + 696 696 1 0.0000000 5.3580000 10.7150000 32.1460000 + 697 697 1 0.0000000 5.3580000 16.0730000 5.3580000 + 698 698 1 0.0000000 5.3580000 16.0730000 10.7150000 + 699 699 1 0.0000000 5.3580000 16.0730000 16.0730000 + 700 700 1 0.0000000 5.3580000 16.0730000 21.4310000 + 701 701 1 0.0000000 5.3580000 16.0730000 26.7880000 + 702 702 1 0.0000000 5.3580000 16.0730000 32.1460000 + 703 703 1 0.0000000 5.3580000 21.4310000 5.3580000 + 704 704 1 0.0000000 5.3580000 21.4310000 10.7150000 + 705 705 1 0.0000000 5.3580000 21.4310000 16.0730000 + 706 706 1 0.0000000 5.3580000 21.4310000 21.4310000 + 707 707 1 0.0000000 5.3580000 21.4310000 26.7880000 + 708 708 1 0.0000000 5.3580000 21.4310000 32.1460000 + 709 709 1 0.0000000 5.3580000 26.7880000 5.3580000 + 710 710 1 0.0000000 5.3580000 26.7880000 10.7150000 + 711 711 1 0.0000000 5.3580000 26.7880000 16.0730000 + 712 712 1 0.0000000 5.3580000 26.7880000 21.4310000 + 713 713 1 0.0000000 5.3580000 26.7880000 26.7880000 + 714 714 1 0.0000000 5.3580000 26.7880000 32.1460000 + 715 715 1 0.0000000 5.3580000 32.1460000 5.3580000 + 716 716 1 0.0000000 5.3580000 32.1460000 10.7150000 + 717 717 1 0.0000000 5.3580000 32.1460000 16.0730000 + 718 718 1 0.0000000 5.3580000 32.1460000 21.4310000 + 719 719 1 0.0000000 5.3580000 32.1460000 26.7880000 + 720 720 1 0.0000000 5.3580000 32.1460000 32.1460000 + 721 721 1 0.0000000 10.7150000 5.3580000 5.3580000 + 722 722 1 0.0000000 10.7150000 5.3580000 10.7150000 + 723 723 1 0.0000000 10.7150000 5.3580000 16.0730000 + 724 724 1 0.0000000 10.7150000 5.3580000 21.4310000 + 725 725 1 0.0000000 10.7150000 5.3580000 26.7880000 + 726 726 1 0.0000000 10.7150000 5.3580000 32.1460000 + 727 727 1 0.0000000 10.7150000 10.7150000 5.3580000 + 728 728 1 0.0000000 10.7150000 10.7150000 10.7150000 + 729 729 1 0.0000000 10.7150000 10.7150000 16.0730000 + 730 730 1 0.0000000 10.7150000 10.7150000 21.4310000 + 731 731 1 0.0000000 10.7150000 10.7150000 26.7880000 + 732 732 1 0.0000000 10.7150000 10.7150000 32.1460000 + 733 733 1 0.0000000 10.7150000 16.0730000 5.3580000 + 734 734 1 0.0000000 10.7150000 16.0730000 10.7150000 + 735 735 1 0.0000000 10.7150000 16.0730000 16.0730000 + 736 736 1 0.0000000 10.7150000 16.0730000 21.4310000 + 737 737 1 0.0000000 10.7150000 16.0730000 26.7880000 + 738 738 1 0.0000000 10.7150000 16.0730000 32.1460000 + 739 739 1 0.0000000 10.7150000 21.4310000 5.3580000 + 740 740 1 0.0000000 10.7150000 21.4310000 10.7150000 + 741 741 1 0.0000000 10.7150000 21.4310000 16.0730000 + 742 742 1 0.0000000 10.7150000 21.4310000 21.4310000 + 743 743 1 0.0000000 10.7150000 21.4310000 26.7880000 + 744 744 1 0.0000000 10.7150000 21.4310000 32.1460000 + 745 745 1 0.0000000 10.7150000 26.7880000 5.3580000 + 746 746 1 0.0000000 10.7150000 26.7880000 10.7150000 + 747 747 1 0.0000000 10.7150000 26.7880000 16.0730000 + 748 748 1 0.0000000 10.7150000 26.7880000 21.4310000 + 749 749 1 0.0000000 10.7150000 26.7880000 26.7880000 + 750 750 1 0.0000000 10.7150000 26.7880000 32.1460000 + 751 751 1 0.0000000 10.7150000 32.1460000 5.3580000 + 752 752 1 0.0000000 10.7150000 32.1460000 10.7150000 + 753 753 1 0.0000000 10.7150000 32.1460000 16.0730000 + 754 754 1 0.0000000 10.7150000 32.1460000 21.4310000 + 755 755 1 0.0000000 10.7150000 32.1460000 26.7880000 + 756 756 1 0.0000000 10.7150000 32.1460000 32.1460000 + 757 757 1 0.0000000 16.0730000 5.3580000 5.3580000 + 758 758 1 0.0000000 16.0730000 5.3580000 10.7150000 + 759 759 1 0.0000000 16.0730000 5.3580000 16.0730000 + 760 760 1 0.0000000 16.0730000 5.3580000 21.4310000 + 761 761 1 0.0000000 16.0730000 5.3580000 26.7880000 + 762 762 1 0.0000000 16.0730000 5.3580000 32.1460000 + 763 763 1 0.0000000 16.0730000 10.7150000 5.3580000 + 764 764 1 0.0000000 16.0730000 10.7150000 10.7150000 + 765 765 1 0.0000000 16.0730000 10.7150000 16.0730000 + 766 766 1 0.0000000 16.0730000 10.7150000 21.4310000 + 767 767 1 0.0000000 16.0730000 10.7150000 26.7880000 + 768 768 1 0.0000000 16.0730000 10.7150000 32.1460000 + 769 769 1 0.0000000 16.0730000 16.0730000 5.3580000 + 770 770 1 0.0000000 16.0730000 16.0730000 10.7150000 + 771 771 1 0.0000000 16.0730000 16.0730000 16.0730000 + 772 772 1 0.0000000 16.0730000 16.0730000 21.4310000 + 773 773 1 0.0000000 16.0730000 16.0730000 26.7880000 + 774 774 1 0.0000000 16.0730000 16.0730000 32.1460000 + 775 775 1 0.0000000 16.0730000 21.4310000 5.3580000 + 776 776 1 0.0000000 16.0730000 21.4310000 10.7150000 + 777 777 1 0.0000000 16.0730000 21.4310000 16.0730000 + 778 778 1 0.0000000 16.0730000 21.4310000 21.4310000 + 779 779 1 0.0000000 16.0730000 21.4310000 26.7880000 + 780 780 1 0.0000000 16.0730000 21.4310000 32.1460000 + 781 781 1 0.0000000 16.0730000 26.7880000 5.3580000 + 782 782 1 0.0000000 16.0730000 26.7880000 10.7150000 + 783 783 1 0.0000000 16.0730000 26.7880000 16.0730000 + 784 784 1 0.0000000 16.0730000 26.7880000 21.4310000 + 785 785 1 0.0000000 16.0730000 26.7880000 26.7880000 + 786 786 1 0.0000000 16.0730000 26.7880000 32.1460000 + 787 787 1 0.0000000 16.0730000 32.1460000 5.3580000 + 788 788 1 0.0000000 16.0730000 32.1460000 10.7150000 + 789 789 1 0.0000000 16.0730000 32.1460000 16.0730000 + 790 790 1 0.0000000 16.0730000 32.1460000 21.4310000 + 791 791 1 0.0000000 16.0730000 32.1460000 26.7880000 + 792 792 1 0.0000000 16.0730000 32.1460000 32.1460000 + 793 793 1 0.0000000 21.4310000 5.3580000 5.3580000 + 794 794 1 0.0000000 21.4310000 5.3580000 10.7150000 + 795 795 1 0.0000000 21.4310000 5.3580000 16.0730000 + 796 796 1 0.0000000 21.4310000 5.3580000 21.4310000 + 797 797 1 0.0000000 21.4310000 5.3580000 26.7880000 + 798 798 1 0.0000000 21.4310000 5.3580000 32.1460000 + 799 799 1 0.0000000 21.4310000 10.7150000 5.3580000 + 800 800 1 0.0000000 21.4310000 10.7150000 10.7150000 + 801 801 1 0.0000000 21.4310000 10.7150000 16.0730000 + 802 802 1 0.0000000 21.4310000 10.7150000 21.4310000 + 803 803 1 0.0000000 21.4310000 10.7150000 26.7880000 + 804 804 1 0.0000000 21.4310000 10.7150000 32.1460000 + 805 805 1 0.0000000 21.4310000 16.0730000 5.3580000 + 806 806 1 0.0000000 21.4310000 16.0730000 10.7150000 + 807 807 1 0.0000000 21.4310000 16.0730000 16.0730000 + 808 808 1 0.0000000 21.4310000 16.0730000 21.4310000 + 809 809 1 0.0000000 21.4310000 16.0730000 26.7880000 + 810 810 1 0.0000000 21.4310000 16.0730000 32.1460000 + 811 811 1 0.0000000 21.4310000 21.4310000 5.3580000 + 812 812 1 0.0000000 21.4310000 21.4310000 10.7150000 + 813 813 1 0.0000000 21.4310000 21.4310000 16.0730000 + 814 814 1 0.0000000 21.4310000 21.4310000 21.4310000 + 815 815 1 0.0000000 21.4310000 21.4310000 26.7880000 + 816 816 1 0.0000000 21.4310000 21.4310000 32.1460000 + 817 817 1 0.0000000 21.4310000 26.7880000 5.3580000 + 818 818 1 0.0000000 21.4310000 26.7880000 10.7150000 + 819 819 1 0.0000000 21.4310000 26.7880000 16.0730000 + 820 820 1 0.0000000 21.4310000 26.7880000 21.4310000 + 821 821 1 0.0000000 21.4310000 26.7880000 26.7880000 + 822 822 1 0.0000000 21.4310000 26.7880000 32.1460000 + 823 823 1 0.0000000 21.4310000 32.1460000 5.3580000 + 824 824 1 0.0000000 21.4310000 32.1460000 10.7150000 + 825 825 1 0.0000000 21.4310000 32.1460000 16.0730000 + 826 826 1 0.0000000 21.4310000 32.1460000 21.4310000 + 827 827 1 0.0000000 21.4310000 32.1460000 26.7880000 + 828 828 1 0.0000000 21.4310000 32.1460000 32.1460000 + 829 829 1 0.0000000 26.7880000 5.3580000 5.3580000 + 830 830 1 0.0000000 26.7880000 5.3580000 10.7150000 + 831 831 1 0.0000000 26.7880000 5.3580000 16.0730000 + 832 832 1 0.0000000 26.7880000 5.3580000 21.4310000 + 833 833 1 0.0000000 26.7880000 5.3580000 26.7880000 + 834 834 1 0.0000000 26.7880000 5.3580000 32.1460000 + 835 835 1 0.0000000 26.7880000 10.7150000 5.3580000 + 836 836 1 0.0000000 26.7880000 10.7150000 10.7150000 + 837 837 1 0.0000000 26.7880000 10.7150000 16.0730000 + 838 838 1 0.0000000 26.7880000 10.7150000 21.4310000 + 839 839 1 0.0000000 26.7880000 10.7150000 26.7880000 + 840 840 1 0.0000000 26.7880000 10.7150000 32.1460000 + 841 841 1 0.0000000 26.7880000 16.0730000 5.3580000 + 842 842 1 0.0000000 26.7880000 16.0730000 10.7150000 + 843 843 1 0.0000000 26.7880000 16.0730000 16.0730000 + 844 844 1 0.0000000 26.7880000 16.0730000 21.4310000 + 845 845 1 0.0000000 26.7880000 16.0730000 26.7880000 + 846 846 1 0.0000000 26.7880000 16.0730000 32.1460000 + 847 847 1 0.0000000 26.7880000 21.4310000 5.3580000 + 848 848 1 0.0000000 26.7880000 21.4310000 10.7150000 + 849 849 1 0.0000000 26.7880000 21.4310000 16.0730000 + 850 850 1 0.0000000 26.7880000 21.4310000 21.4310000 + 851 851 1 0.0000000 26.7880000 21.4310000 26.7880000 + 852 852 1 0.0000000 26.7880000 21.4310000 32.1460000 + 853 853 1 0.0000000 26.7880000 26.7880000 5.3580000 + 854 854 1 0.0000000 26.7880000 26.7880000 10.7150000 + 855 855 1 0.0000000 26.7880000 26.7880000 16.0730000 + 856 856 1 0.0000000 26.7880000 26.7880000 21.4310000 + 857 857 1 0.0000000 26.7880000 26.7880000 26.7880000 + 858 858 1 0.0000000 26.7880000 26.7880000 32.1460000 + 859 859 1 0.0000000 26.7880000 32.1460000 5.3580000 + 860 860 1 0.0000000 26.7880000 32.1460000 10.7150000 + 861 861 1 0.0000000 26.7880000 32.1460000 16.0730000 + 862 862 1 0.0000000 26.7880000 32.1460000 21.4310000 + 863 863 1 0.0000000 26.7880000 32.1460000 26.7880000 + 864 864 1 0.0000000 26.7880000 32.1460000 32.1460000 + diff --git a/examples/python/gjf_python/ff-argon.lmp b/examples/python/gjf_python/ff-argon.lmp new file mode 100644 index 0000000000..b6f7bc931a --- /dev/null +++ b/examples/python/gjf_python/ff-argon.lmp @@ -0,0 +1,20 @@ +############################# +#Atoms types - mass - charge# +############################# +#@ 1 atom types #!THIS LINE IS NECESSARY DON'T SPEND HOURS FINDING THAT OUT!# + +variable Ar equal 1 + +############# +#Atom Masses# +############# + +mass ${Ar} 39.903 + +########################### +#Pair Potentials - Tersoff# +########################### + +pair_style lj/cubic +pair_coeff * * 0.0102701 3.42 + diff --git a/examples/python/gjf_python/gjf.py b/examples/python/gjf_python/gjf.py new file mode 100644 index 0000000000..37fc28bb79 --- /dev/null +++ b/examples/python/gjf_python/gjf.py @@ -0,0 +1,180 @@ +"""Made by Charlie Sievers Ph.D. Candidate, UC Davis, Donadio Lab 2019""" + +from mpi4py import MPI +from lammps import lammps +import lammps_tools as lt +import numpy as np + +comm = MPI.COMM_WORLD +rank = comm.Get_rank() + +""" LAMMPS VARIABLES """ + +# new file or restart +run_no = 0 + +# data files +infile = "argon.lmp" +restart_file = "final_restart.{}".format(run_no) +ff_file = "ff-argon.lmp" +outfile = "output.dat" + +# write final_restart +write_final_restart = False + +# random numbers +seed0 = 2357 +seed1 = 26588 +seed2 = 10669 + +# MD Parameters +# number of steps +nsteps = 50000 +# timestep +# dt = 0.001 +# starting simulation temp +temp_start = 10 +# final simulation temp +temp_final = 10 +# relaxation time +trel = 1 +# trajectory frequency +ntraj = 0 + +# Ensemble 0 = GJF u, 1 = GJF v, 2 = Nose-Hoover, 3 = Langevin, 4 = BDP (Currently all NVT) +ensemble = 0 + +# Output Parameters +nthermo = 200 +nout = int(nsteps / nthermo) # Important + +# output to screen and log file? +lammps_output = False +# Lammps Thermo +thermo = False + +python_output = True + +# Write output to file? +write_output = False + +if write_output is True: + data = open("{}".format(outfile), "w") + +if python_output is True: + if rank == 0: + print("dt, temp, ke, fke, pe, fpe") + +for j in range(20): + + # timestep + dt = 0.005*(j+1) + + if lammps_output is True: + lmp = lammps() + else: + lmp = lammps(cmdargs=["-screen", "none", "-log", "none"]) + + lmp.command("atom_style full") + lmp.command("units metal") + lmp.command("processors * * *") + lmp.command("neighbor 1 bin") + lmp.command("boundary p p p") + + if run_no is 0: + lmp.command("read_data {}".format(infile)) + else: + lmp.command("read_restart final_restart".format(run_no-1)) + + if thermo is True: + lmp.command("thermo_style custom time temp pe ke press vol cpu") + lmp.command("thermo {}".format(nthermo)) + lmp.command("thermo_modify flush yes") + + lmp.file("{}".format(ff_file)) + lmp.command("timestep {}".format(dt)) + + # get_per_atom_compute example with dim of two and within a group + # lmp.command("region rand block 5 20 5 20 5 20") + # lmp.command("group rand region rand") + # lmp.command("compute x rand property/atom x y") + # test = get_per_atom_compute(comm, lmp, "x", 2, group="rand") + + lmp.command("compute ke all ke/atom") + + lmp.command("compute pe all pe") + + if ntraj != 0: + lmp.command("dump 1 all dcd {} trajectory.dcd".format(ntraj)) + lmp.command("dump_modify 1 unwrap yes") + + if run_no == 0: + lmp.command("velocity all create {} {} mom yes dist gaussian".format(temp_start, seed0)) + lmp.command("fix nve all nve") + + if ensemble == 0: + # gjf u + lmp.command("fix lang all langevin {} {} {} {} gjf yes halfstep yes".format( + temp_start, temp_final, trel, seed1)) + elif ensemble == 1: + # gjf v + lmp.command("fix lang all langevin {} {} {} {} gjf yes".format( + temp_start, temp_final, trel, seed1)) + elif ensemble == 2: + # NH + lmp.command("fix nvt all nvt temp {} {} {}".format( + temp_start, temp_final, trel)) + elif ensemble == 3: + # lang + lmp.command("fix lang all langevin {} {} {} {} tally yes zero yes".format( + temp_start, temp_final, trel, seed1)) + elif ensemble == 4: + # BDP + lmp.command("fix stoch all temp/csvr {} {} {} {}".format( + temp_start, temp_final, trel, seed1)) + + natoms = lmp.extract_global("natoms", 0) + nlocal = lmp.extract_global("nlocal", 0) + ke_sum = lt.get_per_atom_compute(comm, lmp, "ke") + ke_2 = ke_sum**2 + pe_sum = 0 + pe_2 = 0 + temp_sum = 0 + + for i in range(nout): + nlocal = lmp.extract_global("nlocal", 0) + lmp.command("run {} pre no post no".format(nthermo)) + temp = lmp.extract_compute("thermo_temp", 0, 0) + ke = lt.get_per_atom_compute(comm, lmp, "ke") + pe = lmp.extract_compute("pe", 0, 0) + ke_sum += ke + ke_2 += ke**2 + pe_sum += pe + pe_2 += pe**2 + temp_sum += temp + + if python_output is True: + if rank == 0: + print("Time: {:.6f}, Temp: {:.6f}, KE: {:.6f}, PE: {:.6f}".format( + i*nthermo*dt, temp, ke.sum(), pe)) + + if write_final_restart is True: + lmp.command("write_restart {}".format(restart_file)) + + if rank == 0: + ke = ke_sum.sum() / (nout + 1) + fke = (np.sqrt((ke_2 - ke_sum ** 2 / (nout + 1)) / (nout + 1))).sum() + pe = pe_sum / nout + fpe = np.sqrt((pe_2 - pe_sum ** 2 / nout) / nout) + temp = temp_sum / nout + + if python_output is True: + print(dt, temp, ke, fke, pe, fpe) + + if write_output is True: + data.write("{:.6f} {:.6f} {:.6f} {:.6f} {:.6f} {:.6f}\n".format( + dt, temp, ke, fke, pe, fpe)) + data.flush() + +if write_output is True: + data.close() diff --git a/examples/python/gjf_python/lammps_tools.py b/examples/python/gjf_python/lammps_tools.py new file mode 100644 index 0000000000..f9f25eaa28 --- /dev/null +++ b/examples/python/gjf_python/lammps_tools.py @@ -0,0 +1,78 @@ +"""Made by Charlie Sievers Ph.D. Candidate, UC Davis, Donadio Lab 2019""" + +from mpi4py import MPI +import numpy as np +import ctypes as ctypes + +""" USEFULL LAMMPS FUNCTION """ + + +def get_nlocal(lmp): + + nlocal = lmp.extract_global("nlocal", 0) + + return nlocal + + +def get_aid(lmp, group=None): + + if group is None: + c_aid = lmp.extract_atom("id", 0) + ptr = ctypes.cast(c_aid, ctypes.POINTER(ctypes.c_int32 * get_nlocal(lmp))) + aid = np.frombuffer(ptr.contents, dtype=np.int32) + else: + try: + c_aid = lmp.extract_variable("aid", group, 1) + ptr = ctypes.cast(c_aid, ctypes.POINTER(ctypes.c_double * get_nlocal(lmp))) + aid = np.frombuffer(ptr.contents, dtype=np.double) + except ValueError: + lmp.command("variable aid atom id") + aid = get_aid(lmp, group) + + return aid + + +def get_per_atom_compute(comm, lmp, name, dim=1, dtype="double", group=None): + laid = get_aid(lmp, group) + nlocal = get_nlocal(lmp) + ngroup = comm.allgather(laid) + type = dim + if dim > 1: + type = 2 + for array in ngroup: + try: + aid = np.concatenate((aid, array)) + except UnboundLocalError: + aid = array + if dtype == "double": + mem_type = ctypes.c_double + elif dtype == "integer": + mem_type = ctypes.c_int + elif dtype == "bigint": + mem_type = ctypes.c_int32 + else: + print("{} not implemented".format(dtype)) + return + + tmp = lmp.extract_compute(name, 1, type) + if type == 1: + ptr = ctypes.cast(tmp, ctypes.POINTER(mem_type * nlocal)) + else: + ptr = ctypes.cast(tmp[0], ctypes.POINTER(mem_type * nlocal * dim)) + lcompute = comm.allgather(np.frombuffer(ptr.contents).reshape((-1, dim))) + for array in lcompute: + try: + compute = np.concatenate((compute, array)) + except UnboundLocalError: + compute = array + + aid = np.expand_dims(aid, axis=1) + + compute = np.concatenate((aid, compute), axis=-1) + compute = compute[compute[..., 0] != 0] + compute = compute[compute[..., 0].argsort()][..., 1:] + + if dim == 1: + compute = np.squeeze(compute, axis=-1) + + return compute \ No newline at end of file From e517a16bdae1b1b3b1064b39f9a663d5900faff6 Mon Sep 17 00:00:00 2001 From: casievers Date: Fri, 19 Jul 2019 17:21:01 -0700 Subject: [PATCH 048/237] updated gjf in fix_langevin --- src/fix_langevin.cpp | 39 +++++++++++---------------------------- src/fix_langevin.h | 2 +- 2 files changed, 12 insertions(+), 29 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 5058d5c650..840861ef91 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -174,11 +174,11 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : // no need to set peratom_flag, b/c data is for internal use only if (gjfflag) { - int mem = 6*atom->nmax*sizeof(double); - if (hsflag) mem += 3*atom->nmax*sizeof(double); - - comm->maxexchange_fix = MAX(comm->maxexchange_fix, 0); - comm->maxexchange_fix += MAX(1000, mem); + //int mem = 6*atom->nmax*sizeof(double); + //if (hsflag) mem += 3*atom->nmax*sizeof(double); +// + //comm->maxexchange_fix = MAX(comm->maxexchange_fix, 0); + //comm->maxexchange_fix += MAX(1000, mem); nvalues = 3; grow_arrays(atom->nmax); @@ -232,7 +232,6 @@ FixLangevin::~FixLangevin() int FixLangevin::setmask() { int mask = 0; - //if (gjfflag) mask |= INITIAL_INTEGRATE; if (gjfflag) mask |= POST_INTEGRATE; mask |= POST_FORCE; mask |= POST_FORCE_RESPA; @@ -321,35 +320,19 @@ void FixLangevin::setup(int vflag) post_force_respa(vflag,nlevels_respa-1,0); ((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1); } - if (gjfflag && hsflag) { + if (gjfflag) { - double dt = update->dt; // update v of atoms in group - - double **v = atom->v; - double *rmass = atom->rmass; - int *type = atom->type; + double ** v = atom->v; + double **f = atom->f; int nlocal = atom->nlocal; if (igroup == atom->firstgroup) nlocal = atom->nfirst; - double boltz = force->boltz; - double mvv2e = force->mvv2e; - double ftm2v = force->ftm2v; - - double gamma2; - for (int i = 0; i < nlocal; i++) { - if (rmass) { - gamma2 = sqrt(rmass[i]) * sqrt(2.0*boltz/t_period/dt/mvv2e) / ftm2v; - gamma2 *= 1.0/sqrt(ratio[type[i]]) * tsqrt; - } else { - gamma2 = gfactor2[type[i]] * tsqrt; - } - - franprev[i][0] = gamma2*random->gaussian(); - franprev[i][1] = gamma2*random->gaussian(); - franprev[i][2] = gamma2*random->gaussian(); + f[i][0] = wildcard[i][0]; + f[i][1] = wildcard[i][1]; + f[i][2] = wildcard[i][2]; wildcard[i][0] = v[i][0]; wildcard[i][1] = v[i][1]; wildcard[i][2] = v[i][2]; diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 70fb254f4e..91ed210e54 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -65,7 +65,7 @@ class FixLangevin : public Fix { double **flangevin; double *tforce; double **franprev; - double **lv; //lucas velocity or half-step velocity + double **lv; //2GJ velocity or half-step velocity double **wildcard; int nvalues; From 473e64c6b6d2c2ac86db5672075febd12af4385c Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 22 Jul 2019 13:49:41 +0000 Subject: [PATCH 049/237] actual gradient of energy, not scaled by hbar. convergence criterion is in eV --- src/SPIN/min_spin_oso_lbfgs.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index 8d05ea63d8..d7e7302e4f 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -313,16 +313,14 @@ void MinSpinOSO_LBFGS::calc_gradient() int nlocal = atom->nlocal; double **sp = atom->sp; double **fm = atom->fm; + double hbar = force->hplanck/MY_2PI; // loop on all spins on proc. for (int i = 0; i < nlocal; i++) { - - // calculate gradients - - g_cur[3 * i + 0] = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - g_cur[3 * i + 1] = -(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); - g_cur[3 * i + 2] = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); + g_cur[3 * i + 0] = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]) * hbar; + g_cur[3 * i + 1] = -(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]) * hbar; + g_cur[3 * i + 2] = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]) * hbar; } } From e4001b01791e9ac1caa54d0c5962886f566afa18 Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 22 Jul 2019 14:38:02 +0000 Subject: [PATCH 050/237] change convergence criterion --- src/SPIN/min_spin_oso_cg.cpp | 49 +++++++++++++++++++----------------- src/SPIN/min_spin_oso_cg.h | 10 ++++---- 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index d8535b19c4..fe52ddebe1 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -66,6 +66,8 @@ MinSpinOSO_CG::MinSpinOSO_CG(LAMMPS *lmp) : { if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_cg); nlocal_max = 0; + alpha_damp = 1.0; + discrete_factor = 10.0; } /* ---------------------------------------------------------------------- */ @@ -81,11 +83,9 @@ MinSpinOSO_CG::~MinSpinOSO_CG() void MinSpinOSO_CG::init() { - alpha_damp = 1.0; - discrete_factor = 10.0; + local_iter = 0; Min::init(); - dts = dt = update->dt; last_negative = update->ntimestep; @@ -216,7 +216,7 @@ int MinSpinOSO_CG::iterate(int maxiter) // sync across replicas if running multi-replica minimization if (update->ftol > 0.0) { - fmdotfm = fmnorm_sqr(); + fmdotfm = max_torque(); if (update->multireplica == 0) { if (fmdotfm < update->ftol*update->ftol) return FTOL; } else { @@ -393,38 +393,41 @@ void MinSpinOSO_CG::advance_spins() } /* ---------------------------------------------------------------------- - compute and return ||mag. torque||_2^2 + compute and return max_i||mag. torque_i||_2 ------------------------------------------------------------------------- */ -double MinSpinOSO_CG::fmnorm_sqr() +double MinSpinOSO_CG::max_torque() { + double fmsq,fmaxsqone,fmaxsqloc,fmaxsqall; int nlocal = atom->nlocal; - double tx,ty,tz; - double **sp = atom->sp; - double **fm = atom->fm; + double hbar = force->hplanck/MY_2PI; - // calc. magnetic torques + // finding max fm on this proc. - double local_norm2_sqr = 0.0; + fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; for (int i = 0; i < nlocal; i++) { - tx = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); - ty = (fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); - tz = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - - local_norm2_sqr += tx*tx + ty*ty + tz*tz; + fmsq = 0.0; + for (int j = 0; j < 3; j++) + fmsq += g_cur[3 * i + j] * g_cur[3 * i + j]; + fmaxsqone = MAX(fmaxsqone,fmsq); } - // no extra atom calc. for spins + // finding max fm on this replica - if (nextra_atom) - error->all(FLERR,"extra atom option not available yet"); + fmaxsqloc = fmaxsqone; + MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); - double norm2_sqr = 0.0; - MPI_Allreduce(&local_norm2_sqr,&norm2_sqr,1,MPI_DOUBLE,MPI_SUM,world); + // finding max fm over all replicas, if necessary + // this communicator would be invalid for multiprocess replicas - return norm2_sqr; + fmaxsqall = fmaxsqloc; + if (update->multireplica == 1) { + fmaxsqall = fmaxsqloc; + MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); + } + + return sqrt(fmaxsqall) * hbar; } - /* ---------------------------------------------------------------------- calculate 3x3 matrix exponential using Rodrigues' formula (R. Murray, Z. Li, and S. Shankar Sastry, diff --git a/src/SPIN/min_spin_oso_cg.h b/src/SPIN/min_spin_oso_cg.h index 3a3d24f078..81bbd2c294 100644 --- a/src/SPIN/min_spin_oso_cg.h +++ b/src/SPIN/min_spin_oso_cg.h @@ -25,8 +25,7 @@ MinimizeStyle(spin/oso_cg, MinSpinOSO_CG) namespace LAMMPS_NS { class MinSpinOSO_CG : public Min { - -public: + public: MinSpinOSO_CG(class LAMMPS *); virtual ~MinSpinOSO_CG(); void init(); @@ -34,18 +33,19 @@ public: int modify_param(int, char **); void reset_vectors(); int iterate(int); + + private: double evaluate_dt(); void advance_spins(); - double fmnorm_sqr(); + double max_torque(); void calc_gradient(double); void calc_search_direction(); -private: // global and spin timesteps - int nlocal_max; // max value of nlocal (for size of lists) double dt; double dts; + int nlocal_max; // max value of nlocal (for size of lists) double alpha_damp; // damping for spin minimization double discrete_factor; // factor for spin timestep evaluation From fabe611c110b1366088369b9e8c5eb56f50aaf04 Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 22 Jul 2019 17:26:47 +0000 Subject: [PATCH 051/237] use line search or adaptive time step --- src/SPIN/min_spin_oso_cg.cpp | 3 +- src/SPIN/min_spin_oso_cg2.cpp | 98 ++++++++++++++++++++--------------- src/SPIN/min_spin_oso_cg2.h | 4 ++ 3 files changed, 62 insertions(+), 43 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index fe52ddebe1..8eb358f86a 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -151,7 +151,7 @@ void MinSpinOSO_CG::reset_vectors() } /* ---------------------------------------------------------------------- - minimization via damped spin dynamics + minimization via orthogonal spin optimisation ------------------------------------------------------------------------- */ int MinSpinOSO_CG::iterate(int maxiter) @@ -428,6 +428,7 @@ double MinSpinOSO_CG::max_torque() return sqrt(fmaxsqall) * hbar; } + /* ---------------------------------------------------------------------- calculate 3x3 matrix exponential using Rodrigues' formula (R. Murray, Z. Li, and S. Shankar Sastry, diff --git a/src/SPIN/min_spin_oso_cg2.cpp b/src/SPIN/min_spin_oso_cg2.cpp index 23873e24f2..52b98eead7 100644 --- a/src/SPIN/min_spin_oso_cg2.cpp +++ b/src/SPIN/min_spin_oso_cg2.cpp @@ -75,7 +75,7 @@ MinSpinOSO_CG2::MinSpinOSO_CG2(LAMMPS *lmp) : nreplica = universe->nworlds; ireplica = universe->iworld; use_line_search = 1; - maxepsrot = MY_2PI / (100.0); + discrete_factor = 10.0; } @@ -100,6 +100,7 @@ void MinSpinOSO_CG2::init() Min::init(); + dts = dt = update->dt; last_negative = update->ntimestep; // allocate tables @@ -140,9 +141,7 @@ int MinSpinOSO_CG2::modify_param(int narg, char **arg) } if (strcmp(arg[0],"discrete_factor") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - double discrete_factor; discrete_factor = force->numeric(FLERR,arg[1]); - maxepsrot = MY_2PI / discrete_factor; return 2; } return 0; @@ -169,7 +168,7 @@ void MinSpinOSO_CG2::reset_vectors() } /* ---------------------------------------------------------------------- - minimization via damped spin dynamics + minimization via orthogonal spin optimisation ------------------------------------------------------------------------- */ int MinSpinOSO_CG2::iterate(int maxiter) @@ -305,20 +304,21 @@ void MinSpinOSO_CG2::calc_gradient() double **sp = atom->sp; double **fm = atom->fm; double hbar = force->hplanck/MY_2PI; + double factor; + + if (use_line_search) + factor = hbar; + else factor = evaluate_dt(); // loop on all spins on proc. for (int i = 0; i < nlocal; i++) { - - // calculate gradients - - g_cur[3 * i + 0] = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]) * hbar; - g_cur[3 * i + 1] = -(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]) * hbar; - g_cur[3 * i + 2] = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]) * hbar; + g_cur[3 * i + 0] = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]) * factor; + g_cur[3 * i + 1] = -(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]) * factor; + g_cur[3 * i + 2] = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]) * factor; } } - /* ---------------------------------------------------------------------- search direction: The Fletcher-Reeves conj. grad. method @@ -335,14 +335,10 @@ void MinSpinOSO_CG2::calc_search_direction() double g2_global = 0.0; double g2old_global = 0.0; - double scaling = 1.0; - - if (use_line_search == 0) - scaling = maximum_rotation(g_cur); if (local_iter == 0 || local_iter % 5 == 0){ // steepest descent direction for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = -g_cur[i] * scaling; + p_s[i] = -g_cur[i]; g_old[i] = g_cur[i]; } } else { // conjugate direction @@ -352,11 +348,10 @@ void MinSpinOSO_CG2::calc_search_direction() } // now we need to collect/broadcast beta on this replica - // different replica can have different beta for now. // need to check what is beta for GNEB - MPI_Allreduce(&g2, &g2_global, 1, MPI_DOUBLE, MPI_SUM, world); - MPI_Allreduce(&g2old, &g2old_global, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&g2,&g2_global,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,world); // Sum over all replicas. Good for GNEB. if (update->multireplica == 1) { @@ -365,12 +360,11 @@ void MinSpinOSO_CG2::calc_search_direction() MPI_Allreduce(&g2,&g2_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } - if (fabs(g2_global) < 1.0e-60) beta = 0.0; else beta = g2_global / g2old_global; // calculate conjugate direction for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = (beta * p_s[i] - g_cur[i])*scaling; + p_s[i] = (beta * p_s[i] - g_cur[i]); g_old[i] = g_cur[i]; } } @@ -411,6 +405,11 @@ double MinSpinOSO_CG2::max_torque() { double fmsq,fmaxsqone,fmaxsqloc,fmaxsqall; int nlocal = atom->nlocal; + double factor; + double hbar = force->hplanck/MY_2PI; + + if (use_line_search) factor = 1.0; + else factor = hbar; // finding max fm on this proc. @@ -436,7 +435,7 @@ double MinSpinOSO_CG2::max_torque() MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); } - return sqrt(fmaxsqall); + return sqrt(fmaxsqall) * factor; } /* ---------------------------------------------------------------------- @@ -607,8 +606,6 @@ int MinSpinOSO_CG2::calc_and_make_step(double a, double b, int index) if (alpha < 0.0) alpha = r/2.0; - std::cout << alpha << "\n"; - for (int i = 0; i < nlocal; i++) { for (int j = 0; j < 3; j++) sp[i][j] = sp_copy[i][j]; } @@ -636,30 +633,47 @@ int MinSpinOSO_CG2::awc(double der_phi_0, double phi_0, double der_phi_j, double return 0; } -double MinSpinOSO_CG2::maximum_rotation(double *p) +/* ---------------------------------------------------------------------- + evaluate max timestep +---------------------------------------------------------------------- */ + +double MinSpinOSO_CG2::evaluate_dt() { - double norm2,norm2_global,scaling,alpha; + double dtmax; + double fmsq; + double fmaxsqone,fmaxsqloc,fmaxsqall; int nlocal = atom->nlocal; - int ntotal = 0; + double **fm = atom->fm; - norm2 = 0.0; - for (int i = 0; i < 3 * nlocal; i++) norm2 += p[i] * p[i]; + // finding max fm on this proc. - MPI_Allreduce(&norm2,&norm2_global,1,MPI_DOUBLE,MPI_SUM,world); - if (update->multireplica == 1) { - norm2 = norm2_global; - MPI_Allreduce(&norm2,&norm2_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - } - MPI_Allreduce(&nlocal,&ntotal,1,MPI_INT,MPI_SUM,world); - if (update->multireplica == 1) { - nlocal = ntotal; - MPI_Allreduce(&nlocal,&ntotal,1,MPI_INT,MPI_SUM,universe->uworld); + fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; + for (int i = 0; i < nlocal; i++) { + fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; + fmaxsqone = MAX(fmaxsqone,fmsq); } - scaling = (maxepsrot * sqrt((double) ntotal / norm2_global)); + // finding max fm on this replica - if (scaling < 1.0) alpha = scaling; - else alpha = 1.0; + fmaxsqloc = fmaxsqone; + MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); - return alpha; + // finding max fm over all replicas, if necessary + // this communicator would be invalid for multiprocess replicas + + fmaxsqall = fmaxsqloc; + if (update->multireplica == 1) { + fmaxsqall = fmaxsqloc; + MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); + } + + if (fmaxsqall == 0.0) + error->all(FLERR,"Incorrect fmaxsqall calculation"); + + // define max timestep by dividing by the + // inverse of max frequency by discrete_factor + + dtmax = MY_2PI/(discrete_factor*sqrt(fmaxsqall)); + + return dtmax; } \ No newline at end of file diff --git a/src/SPIN/min_spin_oso_cg2.h b/src/SPIN/min_spin_oso_cg2.h index c96e82ca8e..83605f98ed 100644 --- a/src/SPIN/min_spin_oso_cg2.h +++ b/src/SPIN/min_spin_oso_cg2.h @@ -34,6 +34,8 @@ class MinSpinOSO_CG2: public Min { void reset_vectors(); int iterate(int); private: + double dt; // global timestep + double dts; // spin timestep int ireplica,nreplica; // for neb double *spvec; // variables for atomic dof, as 1d vector double *fmvec; // variables for atomic dof, as 1d vector @@ -43,7 +45,9 @@ class MinSpinOSO_CG2: public Min { double **sp_copy; // copy of the spins int local_iter; // for neb int nlocal_max; // max value of nlocal (for size of lists) + double discrete_factor; // factor for spin timestep evaluation + double evaluate_dt(); void advance_spins(); void calc_gradient(); void calc_search_direction(); From 31d2b23f9c8de272051beac63261278bcd6bf411 Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 22 Jul 2019 17:53:02 +0000 Subject: [PATCH 052/237] rename cg2 -> cg --- src/SPIN/min_spin_oso_cg.cpp | 660 ++++++++++++++++++++------------- src/SPIN/min_spin_oso_cg.h | 43 +-- src/SPIN/min_spin_oso_cg2.cpp | 679 ---------------------------------- src/SPIN/min_spin_oso_cg2.h | 72 ---- 4 files changed, 435 insertions(+), 1019 deletions(-) delete mode 100644 src/SPIN/min_spin_oso_cg2.cpp delete mode 100644 src/SPIN/min_spin_oso_cg2.h diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 8eb358f86a..c9f3a59f87 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -38,6 +38,7 @@ #include "modify.h" #include "math_special.h" #include "math_const.h" +#include "universe.h" using namespace LAMMPS_NS; using namespace MathConst; @@ -61,12 +62,18 @@ static const char cite_minstyle_spin_oso_cg[] = /* ---------------------------------------------------------------------- */ -MinSpinOSO_CG::MinSpinOSO_CG(LAMMPS *lmp) : +MinSpinOSO_CG::MinSpinOSO_CG(LAMMPS *lmp) : Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL) { if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_cg); nlocal_max = 0; - alpha_damp = 1.0; + + // nreplica = number of partitions + // ireplica = which world I am in universe + + nreplica = universe->nworlds; + ireplica = universe->iworld; + use_line_search = 1; discrete_factor = 10.0; } @@ -77,24 +84,31 @@ MinSpinOSO_CG::~MinSpinOSO_CG() memory->destroy(g_old); memory->destroy(g_cur); memory->destroy(p_s); + if (use_line_search) + memory->destroy(sp_copy); } /* ---------------------------------------------------------------------- */ void MinSpinOSO_CG::init() { - local_iter = 0; + der_e_cur = 0.0; + der_e_pr = 0.0; + Min::init(); + dts = dt = update->dt; last_negative = update->ntimestep; - + // allocate tables nlocal_max = atom->nlocal; memory->grow(g_old,3*nlocal_max,"min/spin/oso/cg:g_old"); memory->grow(g_cur,3*nlocal_max,"min/spin/oso/cg:g_cur"); memory->grow(p_s,3*nlocal_max,"min/spin/oso/cg:p_s"); + if (use_line_search) + memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/cg:sp_copy"); } /* ---------------------------------------------------------------------- */ @@ -117,9 +131,9 @@ void MinSpinOSO_CG::setup_style() int MinSpinOSO_CG::modify_param(int narg, char **arg) { - if (strcmp(arg[0],"alpha_damp") == 0) { + if (strcmp(arg[0],"line_search") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - alpha_damp = force->numeric(FLERR,arg[1]); + use_line_search = force->numeric(FLERR,arg[1]); return 2; } if (strcmp(arg[0],"discrete_factor") == 0) { @@ -160,19 +174,22 @@ int MinSpinOSO_CG::iterate(int maxiter) bigint ntimestep; double fmdotfm; int flag, flagall; - - // grow tables if nlocal increased + double **sp = atom->sp; + double der_e_cur_tmp = 0.0; if (nlocal_max < nlocal) { + nlocal_max = nlocal; local_iter = 0; nlocal_max = nlocal; memory->grow(g_old,3*nlocal_max,"min/spin/oso/cg:g_old"); memory->grow(g_cur,3*nlocal_max,"min/spin/oso/cg:g_cur"); memory->grow(p_s,3*nlocal_max,"min/spin/oso/cg:p_s"); + if (use_line_search) + memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/cg:sp_copy"); } for (int iter = 0; iter < maxiter; iter++) { - + if (timer->check_timeout(niter)) return TIMEOUT; @@ -182,16 +199,51 @@ int MinSpinOSO_CG::iterate(int maxiter) // optimize timestep accross processes / replicas // need a force calculation for timestep optimization - if (local_iter == 0) energy_force(0); - dts = evaluate_dt(); - - calc_gradient(dts); - calc_search_direction(); - advance_spins(); - - eprevious = ecurrent; - ecurrent = energy_force(0); - neval++; + if (use_line_search) { + + // here we need to do line search + if (local_iter == 0) + calc_gradient(); + + calc_search_direction(); + der_e_cur = 0.0; + for (int i = 0; i < 3 * nlocal; i++) + der_e_cur += g_cur[i] * p_s[i]; + MPI_Allreduce(&der_e_cur,&der_e_cur_tmp,1,MPI_DOUBLE,MPI_SUM,world); + der_e_cur = der_e_cur_tmp; + if (update->multireplica == 1) { + MPI_Allreduce(&der_e_cur_tmp,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } + for (int i = 0; i < nlocal; i++) + for (int j = 0; j < 3; j++) + sp_copy[i][j] = sp[i][j]; + + eprevious = ecurrent; + der_e_pr = der_e_cur; + calc_and_make_step(0.0, 1.0, 0); + } + else{ + + // here we don't do line search + // but use cutoff rotation angle + // if gneb calc., nreplica > 1 + // then calculate gradients and advance spins + // of intermediate replicas only + + if (nreplica > 1) { + if(ireplica != 0 && ireplica != nreplica-1) + calc_gradient(); + calc_search_direction(); + advance_spins(); + } else{ + calc_gradient(); + calc_search_direction(); + advance_spins(); + } + eprevious = ecurrent; + ecurrent = energy_force(0); + neval++; + } //// energy tolerance criterion //// only check after DELAYSTEP elapsed since velocties reset to 0 @@ -239,6 +291,347 @@ int MinSpinOSO_CG::iterate(int maxiter) return MAXITER; } +/* ---------------------------------------------------------------------- + calculate gradients +---------------------------------------------------------------------- */ + +void MinSpinOSO_CG::calc_gradient() +{ + int nlocal = atom->nlocal; + double **sp = atom->sp; + double **fm = atom->fm; + double hbar = force->hplanck/MY_2PI; + double factor; + + if (use_line_search) + factor = hbar; + else factor = evaluate_dt(); + + // loop on all spins on proc. + + for (int i = 0; i < nlocal; i++) { + g_cur[3 * i + 0] = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]) * factor; + g_cur[3 * i + 1] = -(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]) * factor; + g_cur[3 * i + 2] = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]) * factor; + } +} + +/* ---------------------------------------------------------------------- + search direction: + The Fletcher-Reeves conj. grad. method + See Jorge Nocedal and Stephen J. Wright 'Numerical + Optimization' Second Edition, 2006 (p. 121) +---------------------------------------------------------------------- */ + +void MinSpinOSO_CG::calc_search_direction() +{ + int nlocal = atom->nlocal; + double g2old = 0.0; + double g2 = 0.0; + double beta = 0.0; + + double g2_global = 0.0; + double g2old_global = 0.0; + + if (local_iter == 0 || local_iter % 5 == 0){ // steepest descent direction + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = -g_cur[i]; + g_old[i] = g_cur[i]; + } + } else { // conjugate direction + for (int i = 0; i < 3 * nlocal; i++) { + g2old += g_old[i] * g_old[i]; + g2 += g_cur[i] * g_cur[i]; + } + + // now we need to collect/broadcast beta on this replica + // need to check what is beta for GNEB + + MPI_Allreduce(&g2,&g2_global,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,world); + + // Sum over all replicas. Good for GNEB. + if (update->multireplica == 1) { + g2 = g2_global; + g2old = g2old_global; + MPI_Allreduce(&g2,&g2_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } + if (fabs(g2_global) < 1.0e-60) beta = 0.0; + else beta = g2_global / g2old_global; + // calculate conjugate direction + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = (beta * p_s[i] - g_cur[i]); + g_old[i] = g_cur[i]; + } + } + + local_iter++; +} + +/* ---------------------------------------------------------------------- + rotation of spins along the search direction +---------------------------------------------------------------------- */ + +void MinSpinOSO_CG::advance_spins() +{ + int nlocal = atom->nlocal; + double **sp = atom->sp; + double **fm = atom->fm; + double tdampx, tdampy, tdampz; + double rot_mat[9]; // exponential of matrix made of search direction + double s_new[3]; + + // loop on all spins on proc. + + for (int i = 0; i < nlocal; i++) { + rodrigues_rotation(p_s + 3 * i, rot_mat); + + // rotate spins + + vm3(rot_mat, sp[i], s_new); + for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; + } +} + +/* ---------------------------------------------------------------------- + compute and return max_i||mag. torque_i||_2 +------------------------------------------------------------------------- */ + +double MinSpinOSO_CG::max_torque() +{ + double fmsq,fmaxsqone,fmaxsqloc,fmaxsqall; + int nlocal = atom->nlocal; + double factor; + double hbar = force->hplanck/MY_2PI; + + if (use_line_search) factor = 1.0; + else factor = hbar; + + // finding max fm on this proc. + + fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; + for (int i = 0; i < nlocal; i++) { + fmsq = 0.0; + for (int j = 0; j < 3; j++) + fmsq += g_cur[3 * i + j] * g_cur[3 * i + j]; + fmaxsqone = MAX(fmaxsqone,fmsq); + } + + // finding max fm on this replica + + fmaxsqloc = fmaxsqone; + MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); + + // finding max fm over all replicas, if necessary + // this communicator would be invalid for multiprocess replicas + + fmaxsqall = fmaxsqloc; + if (update->multireplica == 1) { + fmaxsqall = fmaxsqloc; + MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); + } + + return sqrt(fmaxsqall) * factor; +} + +/* ---------------------------------------------------------------------- + calculate 3x3 matrix exponential using Rodrigues' formula + (R. Murray, Z. Li, and S. Shankar Sastry, + A Mathematical Introduction to + Robotic Manipulation (1994), p. 28 and 30). + + upp_tr - vector x, y, z so that one calculate + U = exp(A) with A= [[0, x, y], + [-x, 0, z], + [-y, -z, 0]] +------------------------------------------------------------------------- */ + +void MinSpinOSO_CG::rodrigues_rotation(const double *upp_tr, double *out) +{ + double theta,A,B,D,x,y,z; + double s1,s2,s3,a1,a2,a3; + + if (fabs(upp_tr[0]) < 1.0e-40 && + fabs(upp_tr[1]) < 1.0e-40 && + fabs(upp_tr[2]) < 1.0e-40){ + + // if upp_tr is zero, return unity matrix + for(int k = 0; k < 3; k++){ + for(int m = 0; m < 3; m++){ + if (m == k) + out[3 * k + m] = 1.0; + else + out[3 * k + m] = 0.0; + } + } + return; + } + + theta = sqrt(upp_tr[0] * upp_tr[0] + + upp_tr[1] * upp_tr[1] + + upp_tr[2] * upp_tr[2]); + + A = cos(theta); + B = sin(theta); + D = 1 - A; + x = upp_tr[0]/theta; + y = upp_tr[1]/theta; + z = upp_tr[2]/theta; + + // diagonal elements of U + + out[0] = A + z * z * D; + out[4] = A + y * y * D; + out[8] = A + x * x * D; + + // off diagonal of U + + s1 = -y * z *D; + s2 = x * z * D; + s3 = -x * y * D; + + a1 = x * B; + a2 = y * B; + a3 = z * B; + + out[1] = s1 + a1; + out[3] = s1 - a1; + out[2] = s2 + a2; + out[6] = s2 - a2; + out[5] = s3 + a3; + out[7] = s3 - a3; + +} + +/* ---------------------------------------------------------------------- + out = vector^T x m, + m -- 3x3 matrix , v -- 3-d vector +------------------------------------------------------------------------- */ + +void MinSpinOSO_CG::vm3(const double *m, const double *v, double *out) +{ + for(int i = 0; i < 3; i++){ + out[i] *= 0.0; + for(int j = 0; j < 3; j++) + out[i] += *(m + 3 * j + i) * v[j]; + } +} + + +void MinSpinOSO_CG::make_step(double c, double *energy_and_der) +{ + double p_scaled[3]; + int nlocal = atom->nlocal; + double rot_mat[9]; // exponential of matrix made of search direction + double s_new[3]; + double **sp = atom->sp; + double der_e_cur_tmp = 0.0;; + + for (int i = 0; i < nlocal; i++) { + + // scale the search direction + + for (int j = 0; j < 3; j++) p_scaled[j] = c * p_s[3 * i + j]; + + // calculate rotation matrix + + rodrigues_rotation(p_scaled, rot_mat); + + // rotate spins + + vm3(rot_mat, sp[i], s_new); + for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; + } + + ecurrent = energy_force(0); + calc_gradient(); + neval++; + der_e_cur = 0.0; + for (int i = 0; i < 3 * nlocal; i++) { + der_e_cur += g_cur[i] * p_s[i]; + } + MPI_Allreduce(&der_e_cur,&der_e_cur_tmp,1,MPI_DOUBLE,MPI_SUM,world); + der_e_cur = der_e_cur_tmp; + if (update->multireplica == 1) { + MPI_Allreduce(&der_e_cur_tmp,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); + } + + energy_and_der[0] = ecurrent; + energy_and_der[1] = der_e_cur; +} + +/* ---------------------------------------------------------------------- + Calculate step length which satisfies approximate Wolfe conditions + using the cubic interpolation +------------------------------------------------------------------------- */ + +int MinSpinOSO_CG::calc_and_make_step(double a, double b, int index) +{ + double e_and_d[2] = {0.0,0.0}; + double alpha,c1,c2,c3; + double **sp = atom->sp; + int nlocal = atom->nlocal; + + make_step(b,e_and_d); + ecurrent = e_and_d[0]; + der_e_cur = e_and_d[1]; + index++; + + if (awc(der_e_pr,eprevious,e_and_d[1],e_and_d[0]) || index == 10){ + MPI_Bcast(&b,1,MPI_DOUBLE,0,world); + for (int i = 0; i < 3 * nlocal; i++) { + p_s[i] = b * p_s[i]; + } + return 1; + } + else{ + double r,f0,f1,df0,df1; + r = b - a; + f0 = eprevious; + f1 = ecurrent; + df0 = der_e_pr; + df1 = der_e_cur; + + c1 = -2.0*(f1-f0)/(r*r*r)+(df1+df0)/(r*r); + c2 = 3.0*(f1-f0)/(r*r)-(df1+2.0*df0)/(r); + c3 = df0; + + // f(x) = c1 x^3 + c2 x^2 + c3 x^1 + c4 + // has minimum at alpha below. We do not check boundaries. + + alpha = (-c2 + sqrt(c2*c2 - 3.0*c1*c3))/(3.0*c1); + MPI_Bcast(&alpha,1,MPI_DOUBLE,0,world); + + if (alpha < 0.0) alpha = r/2.0; + + for (int i = 0; i < nlocal; i++) { + for (int j = 0; j < 3; j++) sp[i][j] = sp_copy[i][j]; + } + calc_and_make_step(0.0, alpha, index); + } + + return 0; +} + +/* ---------------------------------------------------------------------- + Approximate Wolfe conditions: + William W. Hager and Hongchao Zhang + SIAM J. optim., 16(1), 170-192. (23 pages) +------------------------------------------------------------------------- */ + +int MinSpinOSO_CG::awc(double der_phi_0, double phi_0, double der_phi_j, double phi_j){ + + double eps = 1.0e-6; + double delta = 0.1; + double sigma = 0.9; + + if ((phi_j<=phi_0+eps*fabs(phi_0)) && ((2.0*delta-1.0) * der_phi_0>=der_phi_j>=sigma*der_phi_0)) + return 1; + else + return 0; +} + /* ---------------------------------------------------------------------- evaluate max timestep ---------------------------------------------------------------------- */ @@ -282,231 +675,4 @@ double MinSpinOSO_CG::evaluate_dt() dtmax = MY_2PI/(discrete_factor*sqrt(fmaxsqall)); return dtmax; -} - -/* ---------------------------------------------------------------------- - calculate gradients ----------------------------------------------------------------------- */ - -void MinSpinOSO_CG::calc_gradient(double dts) -{ - int nlocal = atom->nlocal; - double **sp = atom->sp; - double **fm = atom->fm; - double tdampx, tdampy, tdampz; - - // loop on all spins on proc. - - for (int i = 0; i < nlocal; i++) { - - // calc. damping torque - - tdampx = -alpha_damp*(fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); - tdampy = -alpha_damp*(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); - tdampz = -alpha_damp*(fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - - // calculate gradients - - g_cur[3 * i + 0] = -tdampz * dts; - g_cur[3 * i + 1] = tdampy * dts; - g_cur[3 * i + 2] = -tdampx * dts; - } -} - -/* ---------------------------------------------------------------------- - search direction: - The Fletcher-Reeves conj. grad. method - See Jorge Nocedal and Stephen J. Wright 'Numerical - Optimization' Second Edition, 2006 (p. 121) ----------------------------------------------------------------------- */ - -void MinSpinOSO_CG::calc_search_direction() -{ - int nlocal = atom->nlocal; - double g2old = 0.0; - double g2 = 0.0; - double beta = 0.0; - - double g2_global = 0.0; - double g2old_global = 0.0; - if (local_iter == 0 || local_iter % 5 == 0){ // steepest descent direction - for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = -g_cur[i]; - g_old[i] = g_cur[i]; - } - } else { // conjugate direction - for (int i = 0; i < 3 * nlocal; i++) { - g2old += g_old[i] * g_old[i]; - g2 += g_cur[i] * g_cur[i]; - } - - // now we need to collect/broadcast beta on this replica - // different replica can have different beta for now. - // need to check what is beta for GNEB - - MPI_Allreduce(&g2, &g2_global, 1, MPI_DOUBLE, MPI_SUM, world); - MPI_Allreduce(&g2old, &g2old_global, 1, MPI_DOUBLE, MPI_SUM, world); - - // Sum over all replicas. Good for GNEB. - if (update->multireplica == 1) { - g2 = g2_global; - g2old = g2old_global; - MPI_Allreduce(&g2,&g2_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - } - - if (fabs(g2_global) < 1.0e-60) beta = 0.0; - else beta = g2_global / g2old_global; - // calculate conjugate direction - for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = beta * p_s[i] - g_cur[i]; - g_old[i] = g_cur[i]; - } - } - - local_iter++; -} - -/* ---------------------------------------------------------------------- - rotation of spins along the search direction ----------------------------------------------------------------------- */ - -void MinSpinOSO_CG::advance_spins() -{ - int nlocal = atom->nlocal; - double **sp = atom->sp; - double **fm = atom->fm; - double tdampx, tdampy, tdampz; - double rot_mat[9]; // exponential of matrix made of search direction - double s_new[3]; - - // loop on all spins on proc. - - for (int i = 0; i < nlocal; i++) { - rodrigues_rotation(p_s + 3 * i, rot_mat); - - // rotate spins - - vm3(rot_mat, sp[i], s_new); - for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; - } -} - -/* ---------------------------------------------------------------------- - compute and return max_i||mag. torque_i||_2 -------------------------------------------------------------------------- */ - -double MinSpinOSO_CG::max_torque() -{ - double fmsq,fmaxsqone,fmaxsqloc,fmaxsqall; - int nlocal = atom->nlocal; - double hbar = force->hplanck/MY_2PI; - - // finding max fm on this proc. - - fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; - for (int i = 0; i < nlocal; i++) { - fmsq = 0.0; - for (int j = 0; j < 3; j++) - fmsq += g_cur[3 * i + j] * g_cur[3 * i + j]; - fmaxsqone = MAX(fmaxsqone,fmsq); - } - - // finding max fm on this replica - - fmaxsqloc = fmaxsqone; - MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); - - // finding max fm over all replicas, if necessary - // this communicator would be invalid for multiprocess replicas - - fmaxsqall = fmaxsqloc; - if (update->multireplica == 1) { - fmaxsqall = fmaxsqloc; - MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); - } - - return sqrt(fmaxsqall) * hbar; -} - -/* ---------------------------------------------------------------------- - calculate 3x3 matrix exponential using Rodrigues' formula - (R. Murray, Z. Li, and S. Shankar Sastry, - A Mathematical Introduction to - Robotic Manipulation (1994), p. 28 and 30). - - upp_tr - vector x, y, z so that one calculate - U = exp(A) with A= [[0, x, y], - [-x, 0, z], - [-y, -z, 0]] -------------------------------------------------------------------------- */ - -void MinSpinOSO_CG::rodrigues_rotation(const double *upp_tr, double *out) -{ - double theta,A,B,D,x,y,z; - double s1,s2,s3,a1,a2,a3; - - if (fabs(upp_tr[0]) < 1.0e-40 && - fabs(upp_tr[1]) < 1.0e-40 && - fabs(upp_tr[2]) < 1.0e-40){ - - // if upp_tr is zero, return unity matrix - for(int k = 0; k < 3; k++){ - for(int m = 0; m < 3; m++){ - if (m == k) out[3 * k + m] = 1.0; - else out[3 * k + m] = 0.0; - } - } - return; - } - - theta = sqrt(upp_tr[0] * upp_tr[0] + - upp_tr[1] * upp_tr[1] + - upp_tr[2] * upp_tr[2]); - - A = cos(theta); - B = sin(theta); - D = 1 - A; - x = upp_tr[0]/theta; - y = upp_tr[1]/theta; - z = upp_tr[2]/theta; - - // diagonal elements of U - - out[0] = A + z * z * D; - out[4] = A + y * y * D; - out[8] = A + x * x * D; - - // off diagonal of U - - s1 = -y * z *D; - s2 = x * z * D; - s3 = -x * y * D; - - a1 = x * B; - a2 = y * B; - a3 = z * B; - - out[1] = s1 + a1; - out[3] = s1 - a1; - out[2] = s2 + a2; - out[6] = s2 - a2; - out[5] = s3 + a3; - out[7] = s3 - a3; - -} - -/* ---------------------------------------------------------------------- - out = vector^T x m, - m -- 3x3 matrix , v -- 3-d vector -------------------------------------------------------------------------- */ - -void MinSpinOSO_CG::vm3(const double *m, const double *v, double *out) -{ - for(int i = 0; i < 3; i++){ - out[i] *= 0.0; - for(int j = 0; j < 3; j++){ - out[i] += *(m + 3 * j + i) * v[j]; - } - } -} +} \ No newline at end of file diff --git a/src/SPIN/min_spin_oso_cg.h b/src/SPIN/min_spin_oso_cg.h index 81bbd2c294..e50d1a69db 100644 --- a/src/SPIN/min_spin_oso_cg.h +++ b/src/SPIN/min_spin_oso_cg.h @@ -24,7 +24,7 @@ MinimizeStyle(spin/oso_cg, MinSpinOSO_CG) namespace LAMMPS_NS { -class MinSpinOSO_CG : public Min { +class MinSpinOSO_CG: public Min { public: MinSpinOSO_CG(class LAMMPS *); virtual ~MinSpinOSO_CG(); @@ -33,33 +33,34 @@ class MinSpinOSO_CG : public Min { int modify_param(int, char **); void reset_vectors(); int iterate(int); - private: - double evaluate_dt(); - void advance_spins(); - double max_torque(); - void calc_gradient(double); - void calc_search_direction(); - - // global and spin timesteps - - double dt; - double dts; - int nlocal_max; // max value of nlocal (for size of lists) - - double alpha_damp; // damping for spin minimization - double discrete_factor; // factor for spin timestep evaluation - + double dt; // global timestep + double dts; // spin timestep + int ireplica,nreplica; // for neb double *spvec; // variables for atomic dof, as 1d vector double *fmvec; // variables for atomic dof, as 1d vector - - double *g_old; // gradient vector at previous iteration - double *g_cur; // current gradient vector + double *g_cur; // current gradient vector + double *g_old; // gradient vector at previous step double *p_s; // search direction vector - int local_iter; // number of times we call search_direction + double **sp_copy; // copy of the spins + int local_iter; // for neb + int nlocal_max; // max value of nlocal (for size of lists) + double discrete_factor; // factor for spin timestep evaluation + double evaluate_dt(); + void advance_spins(); + void calc_gradient(); + void calc_search_direction(); + double maximum_rotation(double *); void vm3(const double *, const double *, double *); void rodrigues_rotation(const double *, double *); + int calc_and_make_step(double, double, int); + int awc(double, double, double, double); + void make_step(double, double *); + double max_torque(); + double der_e_cur; // current derivative along search dir. + double der_e_pr; // previous derivative along search dir. + int use_line_search; // use line search or not. bigint last_negative; }; diff --git a/src/SPIN/min_spin_oso_cg2.cpp b/src/SPIN/min_spin_oso_cg2.cpp deleted file mode 100644 index 52b98eead7..0000000000 --- a/src/SPIN/min_spin_oso_cg2.cpp +++ /dev/null @@ -1,679 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - Copyright (2003) Sandia Corporation. Under the terms of Contract - DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains - certain rights in this software. This software is distributed under - the GNU General Public License. - - See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ - -/* ------------------------------------------------------------------------ - Contributing authors: Aleksei Ivanov (University of Iceland) - Julien Tranchida (SNL) - - Please cite the related publication: - Ivanov, A. V., Uzdin, V. M., & Jónsson, H. (2019). Fast and Robust - Algorithm for the Minimisation of the Energy of Spin Systems. arXiv - preprint arXiv:1904.02669. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "min_spin_oso_cg2.h" -#include "universe.h" -#include "atom.h" -#include "citeme.h" -#include "force.h" -#include "update.h" -#include "output.h" -#include "timer.h" -#include "error.h" -#include "memory.h" -#include "modify.h" -#include "math_special.h" -#include "math_const.h" -#include "universe.h" -#include - -using namespace LAMMPS_NS; -using namespace MathConst; - -static const char cite_minstyle_spin_oso_cg2[] = - "min_style spin/oso_cg2 command:\n\n" - "@article{ivanov2019fast,\n" - "title={Fast and Robust Algorithm for the Minimisation of the Energy of " - "Spin Systems},\n" - "author={Ivanov, A. V and Uzdin, V. M. and J{\'o}nsson, H.},\n" - "journal={arXiv preprint arXiv:1904.02669},\n" - "year={2019}\n" - "}\n\n"; - -// EPS_ENERGY = minimum normalization for energy tolerance - -#define EPS_ENERGY 1.0e-8 - -#define DELAYSTEP 5 - - -/* ---------------------------------------------------------------------- */ - -MinSpinOSO_CG2::MinSpinOSO_CG2(LAMMPS *lmp) : - Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL) -{ - if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_cg2); - nlocal_max = 0; - - // nreplica = number of partitions - // ireplica = which world I am in universe - - nreplica = universe->nworlds; - ireplica = universe->iworld; - use_line_search = 1; - discrete_factor = 10.0; - -} - -/* ---------------------------------------------------------------------- */ - -MinSpinOSO_CG2::~MinSpinOSO_CG2() -{ - memory->destroy(g_old); - memory->destroy(g_cur); - memory->destroy(p_s); - if (use_line_search) - memory->destroy(sp_copy); -} - -/* ---------------------------------------------------------------------- */ - -void MinSpinOSO_CG2::init() -{ - local_iter = 0; - der_e_cur = 0.0; - der_e_pr = 0.0; - - Min::init(); - - dts = dt = update->dt; - last_negative = update->ntimestep; - - // allocate tables - - nlocal_max = atom->nlocal; - memory->grow(g_old,3*nlocal_max,"min/spin/oso/cg2:g_old"); - memory->grow(g_cur,3*nlocal_max,"min/spin/oso/cg2:g_cur"); - memory->grow(p_s,3*nlocal_max,"min/spin/oso/cg2:p_s"); - if (use_line_search) - memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/cg2:sp_copy"); -} - -/* ---------------------------------------------------------------------- */ - -void MinSpinOSO_CG2::setup_style() -{ - double **v = atom->v; - int nlocal = atom->nlocal; - - // check if the atom/spin style is defined - - if (!atom->sp_flag) - error->all(FLERR,"min/spin_oso_cg2 requires atom/spin style"); - - for (int i = 0; i < nlocal; i++) - v[i][0] = v[i][1] = v[i][2] = 0.0; -} - -/* ---------------------------------------------------------------------- */ - -int MinSpinOSO_CG2::modify_param(int narg, char **arg) -{ - - if (strcmp(arg[0],"line_search") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - use_line_search = force->numeric(FLERR,arg[1]); - return 2; - } - if (strcmp(arg[0],"discrete_factor") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - discrete_factor = force->numeric(FLERR,arg[1]); - return 2; - } - return 0; -} - -/* ---------------------------------------------------------------------- - set current vector lengths and pointers - called after atoms have migrated -------------------------------------------------------------------------- */ - -void MinSpinOSO_CG2::reset_vectors() -{ - // atomic dof - - // size sp is 4N vector - nvec = 4 * atom->nlocal; - if (nvec) spvec = atom->sp[0]; - - nvec = 3 * atom->nlocal; - if (nvec) fmvec = atom->fm[0]; - - if (nvec) xvec = atom->x[0]; - if (nvec) fvec = atom->f[0]; -} - -/* ---------------------------------------------------------------------- - minimization via orthogonal spin optimisation -------------------------------------------------------------------------- */ - -int MinSpinOSO_CG2::iterate(int maxiter) -{ - int nlocal = atom->nlocal; - bigint ntimestep; - double fmdotfm; - int flag, flagall; - double **sp = atom->sp; - double der_e_cur_tmp = 0.0; - - if (nlocal_max < nlocal) { - nlocal_max = nlocal; - local_iter = 0; - nlocal_max = nlocal; - memory->grow(g_old,3*nlocal_max,"min/spin/oso/cg2:g_old"); - memory->grow(g_cur,3*nlocal_max,"min/spin/oso/cg2:g_cur"); - memory->grow(p_s,3*nlocal_max,"min/spin/oso/cg2:p_s"); - if (use_line_search) - memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/cg2:sp_copy"); - } - - for (int iter = 0; iter < maxiter; iter++) { - - if (timer->check_timeout(niter)) - return TIMEOUT; - - ntimestep = ++update->ntimestep; - niter++; - - // optimize timestep accross processes / replicas - // need a force calculation for timestep optimization - - if (use_line_search) { - - // here we need to do line search - if (local_iter == 0) - calc_gradient(); - - calc_search_direction(); - der_e_cur = 0.0; - for (int i = 0; i < 3 * nlocal; i++) - der_e_cur += g_cur[i] * p_s[i]; - MPI_Allreduce(&der_e_cur,&der_e_cur_tmp,1,MPI_DOUBLE,MPI_SUM,world); - der_e_cur = der_e_cur_tmp; - if (update->multireplica == 1) { - MPI_Allreduce(&der_e_cur_tmp,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - } - for (int i = 0; i < nlocal; i++) - for (int j = 0; j < 3; j++) - sp_copy[i][j] = sp[i][j]; - - eprevious = ecurrent; - der_e_pr = der_e_cur; - calc_and_make_step(0.0, 1.0, 0); - } - else{ - - // here we don't do line search - // but use cutoff rotation angle - // if gneb calc., nreplica > 1 - // then calculate gradients and advance spins - // of intermediate replicas only - - if (nreplica > 1) { - if(ireplica != 0 && ireplica != nreplica-1) - calc_gradient(); - calc_search_direction(); - advance_spins(); - } else{ - calc_gradient(); - calc_search_direction(); - advance_spins(); - } - eprevious = ecurrent; - ecurrent = energy_force(0); - neval++; - } - - //// energy tolerance criterion - //// only check after DELAYSTEP elapsed since velocties reset to 0 - //// sync across replicas if running multi-replica minimization - - if (update->etol > 0.0 && ntimestep-last_negative > DELAYSTEP) { - if (update->multireplica == 0) { - if (fabs(ecurrent-eprevious) < - update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) - return ETOL; - } else { - if (fabs(ecurrent-eprevious) < - update->etol * 0.5*(fabs(ecurrent) + fabs(eprevious) + EPS_ENERGY)) - flag = 0; - else flag = 1; - MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); - if (flagall == 0) return ETOL; - } - } - - // magnetic torque tolerance criterion - // sync across replicas if running multi-replica minimization - - if (update->ftol > 0.0) { - fmdotfm = max_torque(); - if (update->multireplica == 0) { - if (fmdotfm < update->ftol*update->ftol) return FTOL; - } else { - if (fmdotfm < update->ftol*update->ftol) flag = 0; - else flag = 1; - MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,universe->uworld); - if (flagall == 0) return FTOL; - } - } - - // output for thermo, dump, restart files - - if (output->next == ntimestep) { - timer->stamp(); - output->write(ntimestep); - timer->stamp(Timer::OUTPUT); - } - } - - return MAXITER; -} - -/* ---------------------------------------------------------------------- - calculate gradients ----------------------------------------------------------------------- */ - -void MinSpinOSO_CG2::calc_gradient() -{ - int nlocal = atom->nlocal; - double **sp = atom->sp; - double **fm = atom->fm; - double hbar = force->hplanck/MY_2PI; - double factor; - - if (use_line_search) - factor = hbar; - else factor = evaluate_dt(); - - // loop on all spins on proc. - - for (int i = 0; i < nlocal; i++) { - g_cur[3 * i + 0] = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]) * factor; - g_cur[3 * i + 1] = -(fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]) * factor; - g_cur[3 * i + 2] = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]) * factor; - } -} - -/* ---------------------------------------------------------------------- - search direction: - The Fletcher-Reeves conj. grad. method - See Jorge Nocedal and Stephen J. Wright 'Numerical - Optimization' Second Edition, 2006 (p. 121) ----------------------------------------------------------------------- */ - -void MinSpinOSO_CG2::calc_search_direction() -{ - int nlocal = atom->nlocal; - double g2old = 0.0; - double g2 = 0.0; - double beta = 0.0; - - double g2_global = 0.0; - double g2old_global = 0.0; - - if (local_iter == 0 || local_iter % 5 == 0){ // steepest descent direction - for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = -g_cur[i]; - g_old[i] = g_cur[i]; - } - } else { // conjugate direction - for (int i = 0; i < 3 * nlocal; i++) { - g2old += g_old[i] * g_old[i]; - g2 += g_cur[i] * g_cur[i]; - } - - // now we need to collect/broadcast beta on this replica - // need to check what is beta for GNEB - - MPI_Allreduce(&g2,&g2_global,1,MPI_DOUBLE,MPI_SUM,world); - MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,world); - - // Sum over all replicas. Good for GNEB. - if (update->multireplica == 1) { - g2 = g2_global; - g2old = g2old_global; - MPI_Allreduce(&g2,&g2_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - } - if (fabs(g2_global) < 1.0e-60) beta = 0.0; - else beta = g2_global / g2old_global; - // calculate conjugate direction - for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = (beta * p_s[i] - g_cur[i]); - g_old[i] = g_cur[i]; - } - } - - local_iter++; -} - -/* ---------------------------------------------------------------------- - rotation of spins along the search direction ----------------------------------------------------------------------- */ - -void MinSpinOSO_CG2::advance_spins() -{ - int nlocal = atom->nlocal; - double **sp = atom->sp; - double **fm = atom->fm; - double tdampx, tdampy, tdampz; - double rot_mat[9]; // exponential of matrix made of search direction - double s_new[3]; - - // loop on all spins on proc. - - for (int i = 0; i < nlocal; i++) { - rodrigues_rotation(p_s + 3 * i, rot_mat); - - // rotate spins - - vm3(rot_mat, sp[i], s_new); - for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; - } -} - -/* ---------------------------------------------------------------------- - compute and return max_i||mag. torque_i||_2 -------------------------------------------------------------------------- */ - -double MinSpinOSO_CG2::max_torque() -{ - double fmsq,fmaxsqone,fmaxsqloc,fmaxsqall; - int nlocal = atom->nlocal; - double factor; - double hbar = force->hplanck/MY_2PI; - - if (use_line_search) factor = 1.0; - else factor = hbar; - - // finding max fm on this proc. - - fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; - for (int i = 0; i < nlocal; i++) { - fmsq = 0.0; - for (int j = 0; j < 3; j++) - fmsq += g_cur[3 * i + j] * g_cur[3 * i + j]; - fmaxsqone = MAX(fmaxsqone,fmsq); - } - - // finding max fm on this replica - - fmaxsqloc = fmaxsqone; - MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); - - // finding max fm over all replicas, if necessary - // this communicator would be invalid for multiprocess replicas - - fmaxsqall = fmaxsqloc; - if (update->multireplica == 1) { - fmaxsqall = fmaxsqloc; - MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); - } - - return sqrt(fmaxsqall) * factor; -} - -/* ---------------------------------------------------------------------- - calculate 3x3 matrix exponential using Rodrigues' formula - (R. Murray, Z. Li, and S. Shankar Sastry, - A Mathematical Introduction to - Robotic Manipulation (1994), p. 28 and 30). - - upp_tr - vector x, y, z so that one calculate - U = exp(A) with A= [[0, x, y], - [-x, 0, z], - [-y, -z, 0]] -------------------------------------------------------------------------- */ - -void MinSpinOSO_CG2::rodrigues_rotation(const double *upp_tr, double *out) -{ - double theta,A,B,D,x,y,z; - double s1,s2,s3,a1,a2,a3; - - if (fabs(upp_tr[0]) < 1.0e-40 && - fabs(upp_tr[1]) < 1.0e-40 && - fabs(upp_tr[2]) < 1.0e-40){ - - // if upp_tr is zero, return unity matrix - for(int k = 0; k < 3; k++){ - for(int m = 0; m < 3; m++){ - if (m == k) out[3 * k + m] = 1.0; - else out[3 * k + m] = 0.0; - } - } - return; - } - - theta = sqrt(upp_tr[0] * upp_tr[0] + - upp_tr[1] * upp_tr[1] + - upp_tr[2] * upp_tr[2]); - - A = cos(theta); - B = sin(theta); - D = 1 - A; - x = upp_tr[0]/theta; - y = upp_tr[1]/theta; - z = upp_tr[2]/theta; - - // diagonal elements of U - - out[0] = A + z * z * D; - out[4] = A + y * y * D; - out[8] = A + x * x * D; - - // off diagonal of U - - s1 = -y * z *D; - s2 = x * z * D; - s3 = -x * y * D; - - a1 = x * B; - a2 = y * B; - a3 = z * B; - - out[1] = s1 + a1; - out[3] = s1 - a1; - out[2] = s2 + a2; - out[6] = s2 - a2; - out[5] = s3 + a3; - out[7] = s3 - a3; - -} - -/* ---------------------------------------------------------------------- - out = vector^T x m, - m -- 3x3 matrix , v -- 3-d vector -------------------------------------------------------------------------- */ - -void MinSpinOSO_CG2::vm3(const double *m, const double *v, double *out) -{ - for(int i = 0; i < 3; i++){ - out[i] *= 0.0; - for(int j = 0; j < 3; j++) - out[i] += *(m + 3 * j + i) * v[j]; - } -} - - -void MinSpinOSO_CG2::make_step(double c, double *energy_and_der) -{ - double p_scaled[3]; - int nlocal = atom->nlocal; - double rot_mat[9]; // exponential of matrix made of search direction - double s_new[3]; - double **sp = atom->sp; - double der_e_cur_tmp = 0.0;; - - for (int i = 0; i < nlocal; i++) { - - // scale the search direction - - for (int j = 0; j < 3; j++) p_scaled[j] = c * p_s[3 * i + j]; - - // calculate rotation matrix - - rodrigues_rotation(p_scaled, rot_mat); - - // rotate spins - - vm3(rot_mat, sp[i], s_new); - for (int j = 0; j < 3; j++) sp[i][j] = s_new[j]; - } - - ecurrent = energy_force(0); - calc_gradient(); - neval++; - der_e_cur = 0.0; - for (int i = 0; i < 3 * nlocal; i++) { - der_e_cur += g_cur[i] * p_s[i]; - } - MPI_Allreduce(&der_e_cur,&der_e_cur_tmp,1,MPI_DOUBLE,MPI_SUM,world); - der_e_cur = der_e_cur_tmp; - if (update->multireplica == 1) { - MPI_Allreduce(&der_e_cur_tmp,&der_e_cur,1,MPI_DOUBLE,MPI_SUM,universe->uworld); - } - - energy_and_der[0] = ecurrent; - energy_and_der[1] = der_e_cur; -} - -/* ---------------------------------------------------------------------- - Calculate step length which satisfies approximate Wolfe conditions - using the cubic interpolation -------------------------------------------------------------------------- */ - -int MinSpinOSO_CG2::calc_and_make_step(double a, double b, int index) -{ - double e_and_d[2] = {0.0,0.0}; - double alpha,c1,c2,c3; - double **sp = atom->sp; - int nlocal = atom->nlocal; - - make_step(b,e_and_d); - ecurrent = e_and_d[0]; - der_e_cur = e_and_d[1]; - index++; - - if (awc(der_e_pr,eprevious,e_and_d[1],e_and_d[0]) || index == 10){ - MPI_Bcast(&b,1,MPI_DOUBLE,0,world); - for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = b * p_s[i]; - } - return 1; - } - else{ - double r,f0,f1,df0,df1; - r = b - a; - f0 = eprevious; - f1 = ecurrent; - df0 = der_e_pr; - df1 = der_e_cur; - - c1 = -2.0*(f1-f0)/(r*r*r)+(df1+df0)/(r*r); - c2 = 3.0*(f1-f0)/(r*r)-(df1+2.0*df0)/(r); - c3 = df0; - - // f(x) = c1 x^3 + c2 x^2 + c3 x^1 + c4 - // has minimum at alpha below. We do not check boundaries. - - alpha = (-c2 + sqrt(c2*c2 - 3.0*c1*c3))/(3.0*c1); - MPI_Bcast(&alpha,1,MPI_DOUBLE,0,world); - - if (alpha < 0.0) alpha = r/2.0; - - for (int i = 0; i < nlocal; i++) { - for (int j = 0; j < 3; j++) sp[i][j] = sp_copy[i][j]; - } - calc_and_make_step(0.0, alpha, index); - } - - return 0; -} - -/* ---------------------------------------------------------------------- - Approximate Wolfe conditions: - William W. Hager and Hongchao Zhang - SIAM J. optim., 16(1), 170-192. (23 pages) -------------------------------------------------------------------------- */ - -int MinSpinOSO_CG2::awc(double der_phi_0, double phi_0, double der_phi_j, double phi_j){ - - double eps = 1.0e-6; - double delta = 0.1; - double sigma = 0.9; - - if ((phi_j<=phi_0+eps*fabs(phi_0)) && ((2.0*delta-1.0) * der_phi_0>=der_phi_j>=sigma*der_phi_0)) - return 1; - else - return 0; -} - -/* ---------------------------------------------------------------------- - evaluate max timestep ----------------------------------------------------------------------- */ - -double MinSpinOSO_CG2::evaluate_dt() -{ - double dtmax; - double fmsq; - double fmaxsqone,fmaxsqloc,fmaxsqall; - int nlocal = atom->nlocal; - double **fm = atom->fm; - - // finding max fm on this proc. - - fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; - for (int i = 0; i < nlocal; i++) { - fmsq = fm[i][0]*fm[i][0]+fm[i][1]*fm[i][1]+fm[i][2]*fm[i][2]; - fmaxsqone = MAX(fmaxsqone,fmsq); - } - - // finding max fm on this replica - - fmaxsqloc = fmaxsqone; - MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); - - // finding max fm over all replicas, if necessary - // this communicator would be invalid for multiprocess replicas - - fmaxsqall = fmaxsqloc; - if (update->multireplica == 1) { - fmaxsqall = fmaxsqloc; - MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); - } - - if (fmaxsqall == 0.0) - error->all(FLERR,"Incorrect fmaxsqall calculation"); - - // define max timestep by dividing by the - // inverse of max frequency by discrete_factor - - dtmax = MY_2PI/(discrete_factor*sqrt(fmaxsqall)); - - return dtmax; -} \ No newline at end of file diff --git a/src/SPIN/min_spin_oso_cg2.h b/src/SPIN/min_spin_oso_cg2.h deleted file mode 100644 index 83605f98ed..0000000000 --- a/src/SPIN/min_spin_oso_cg2.h +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- 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 MINIMIZE_CLASS - -MinimizeStyle(spin/oso_cg2, MinSpinOSO_CG2) - -#else - -#ifndef LMP_MIN_SPIN_OSO_CG2_H -#define LMP_MIN_SPIN_OSO_CG2_H - -#include "min.h" - -namespace LAMMPS_NS { - -class MinSpinOSO_CG2: public Min { - public: - MinSpinOSO_CG2(class LAMMPS *); - virtual ~MinSpinOSO_CG2(); - void init(); - void setup_style(); - int modify_param(int, char **); - void reset_vectors(); - int iterate(int); - private: - double dt; // global timestep - double dts; // spin timestep - int ireplica,nreplica; // for neb - double *spvec; // variables for atomic dof, as 1d vector - double *fmvec; // variables for atomic dof, as 1d vector - double *g_cur; // current gradient vector - double *g_old; // gradient vector at previous step - double *p_s; // search direction vector - double **sp_copy; // copy of the spins - int local_iter; // for neb - int nlocal_max; // max value of nlocal (for size of lists) - double discrete_factor; // factor for spin timestep evaluation - - double evaluate_dt(); - void advance_spins(); - void calc_gradient(); - void calc_search_direction(); - double maximum_rotation(double *); - void vm3(const double *, const double *, double *); - void rodrigues_rotation(const double *, double *); - int calc_and_make_step(double, double, int); - int awc(double, double, double, double); - void make_step(double, double *); - double max_torque(); - double der_e_cur; // current derivative along search dir. - double der_e_pr; // previous derivative along search dir. - int use_line_search; // use line search or not. - double maxepsrot; - - bigint last_negative; -}; - -} - -#endif -#endif From 07f2f5e5266983d3fcec42c5e50ac19ce82903f4 Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 22 Jul 2019 18:15:32 +0000 Subject: [PATCH 053/237] no line search for multireplica --- src/SPIN/min_spin_oso_cg.cpp | 10 +++++++++- src/SPIN/min_spin_oso_lbfgs.cpp | 12 ++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index c9f3a59f87..21927d0d31 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -73,7 +73,11 @@ MinSpinOSO_CG::MinSpinOSO_CG(LAMMPS *lmp) : nreplica = universe->nworlds; ireplica = universe->iworld; - use_line_search = 1; + if (nreplica > 1) + use_line_search = 0; // no line search for NEB + else + use_line_search = 1; + discrete_factor = 10.0; } @@ -134,6 +138,10 @@ int MinSpinOSO_CG::modify_param(int narg, char **arg) if (strcmp(arg[0],"line_search") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); use_line_search = force->numeric(FLERR,arg[1]); + + if (nreplica > 1 && use_line_search) + error->all(FLERR,"Illegal fix_modify command, cannot use NEB and line search together"); + return 2; } if (strcmp(arg[0],"discrete_factor") == 0) { diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index d7e7302e4f..eba62f296f 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -73,7 +73,11 @@ MinSpinOSO_LBFGS::MinSpinOSO_LBFGS(LAMMPS *lmp) : nreplica = universe->nworlds; ireplica = universe->iworld; - use_line_search = 1; + if (nreplica > 1) + use_line_search = 0; // no line search for NEB + else + use_line_search = 1; + maxepsrot = MY_2PI / (100.0); } @@ -143,13 +147,17 @@ int MinSpinOSO_LBFGS::modify_param(int narg, char **arg) if (strcmp(arg[0],"line_search") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); use_line_search = force->numeric(FLERR,arg[1]); + + if (nreplica > 1 && use_line_search) + error->all(FLERR,"Illegal fix_modify command, cannot use NEB and line search together"); + return 2; } if (strcmp(arg[0],"discrete_factor") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); double discrete_factor; discrete_factor = force->numeric(FLERR,arg[1]); - maxepsrot = MY_2PI / discrete_factor; + maxepsrot = MY_2PI / (10 * discrete_factor); return 2; } return 0; From 89bfe4acf23eb09e6c9ab04302fb1faef89106de Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 22 Jul 2019 18:29:24 +0000 Subject: [PATCH 054/237] change convergence criteria in min_spin --- src/SPIN/min_spin.cpp | 42 +++++++++++++++++++++++++++++++++++++++++- src/SPIN/min_spin.h | 1 + 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/SPIN/min_spin.cpp b/src/SPIN/min_spin.cpp index 2277281e80..9849ba9946 100644 --- a/src/SPIN/min_spin.cpp +++ b/src/SPIN/min_spin.cpp @@ -167,7 +167,7 @@ int MinSpin::iterate(int maxiter) // sync across replicas if running multi-replica minimization if (update->ftol > 0.0) { - fmdotfm = fmnorm_sqr(); + fmdotfm = max_torque(); if (update->multireplica == 0) { if (fmdotfm < update->ftol*update->ftol) return FTOL; } else { @@ -331,3 +331,43 @@ double MinSpin::fmnorm_sqr() return norm2_sqr; } +/* ---------------------------------------------------------------------- + compute and return max_i||mag. torque_i||_2 +------------------------------------------------------------------------- */ + +double MinSpin::max_torque() +{ + double fmsq,fmaxsqone,fmaxsqloc,fmaxsqall; + int nlocal = atom->nlocal; + double hbar = force->hplanck/MY_2PI; + double tx,ty,tz; + double **sp = atom->sp; + double **fm = atom->fm; + + fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; + for (int i = 0; i < nlocal; i++) { + tx = fm[i][1] * sp[i][2] - fm[i][2] * sp[i][1]; + ty = fm[i][2] * sp[i][0] - fm[i][0] * sp[i][2]; + tz = fm[i][0] * sp[i][1] - fm[i][1] * sp[i][0]; + fmsq = tx * tx + ty * ty + tz * tz; + fmaxsqone = MAX(fmaxsqone,fmsq); + } + + // finding max fm on this replica + + fmaxsqloc = fmaxsqone; + MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); + + // finding max fm over all replicas, if necessary + // this communicator would be invalid for multiprocess replicas + + fmaxsqall = fmaxsqloc; + if (update->multireplica == 1) { + fmaxsqall = fmaxsqloc; + MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); + } + + // multiply it by hbar so that units are in eV + + return sqrt(fmaxsqall) * hbar; +} diff --git a/src/SPIN/min_spin.h b/src/SPIN/min_spin.h index fbc624a9cc..d6d49203d5 100644 --- a/src/SPIN/min_spin.h +++ b/src/SPIN/min_spin.h @@ -36,6 +36,7 @@ class MinSpin : public Min { double evaluate_dt(); void advance_spins(double); double fmnorm_sqr(); + double max_torque(); private: From a9a2c7a496b38e4f30f6aa8389e6f7a58e13267c Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 22 Jul 2019 18:31:14 +0000 Subject: [PATCH 055/237] no line search as default option for CG --- src/SPIN/min_spin_oso_cg.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 21927d0d31..843f1e48f1 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -73,10 +73,7 @@ MinSpinOSO_CG::MinSpinOSO_CG(LAMMPS *lmp) : nreplica = universe->nworlds; ireplica = universe->iworld; - if (nreplica > 1) - use_line_search = 0; // no line search for NEB - else - use_line_search = 1; + use_line_search = 0; // no line search as default option for CG discrete_factor = 10.0; } From 1f4039048936835fb84a1e7a0f21d920b28a14ab Mon Sep 17 00:00:00 2001 From: casievers Date: Mon, 22 Jul 2019 13:48:02 -0700 Subject: [PATCH 056/237] recent change to gjf tally (not working) --- examples/gjf/out.argon | 249 ---------------------------------- examples/gjf/trajectory.0.dcd | Bin 439092 -> 0 bytes src/fix_langevin.cpp | 7 +- 3 files changed, 6 insertions(+), 250 deletions(-) delete mode 100644 examples/gjf/out.argon delete mode 100644 examples/gjf/trajectory.0.dcd diff --git a/examples/gjf/out.argon b/examples/gjf/out.argon deleted file mode 100644 index 8dda569157..0000000000 --- a/examples/gjf/out.argon +++ /dev/null @@ -1,249 +0,0 @@ -LAMMPS (1 Feb 2019) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -Reading data file ... - orthogonal box = (0 0 0) to (32.146 32.146 32.146) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 864 atoms -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 0 0 - special bond factors coul: 0 0 0 - 0 = max # of 1-2 neighbors - 0 = max # of 1-3 neighbors - 0 = max # of 1-4 neighbors - 1 = max # of special neighbors -Setting up the ensembles -WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) -WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) -WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) -WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) -Doing Molecular dynamics -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 6.94072 - ghost atom cutoff = 6.94072 - binsize = 3.47036, bins = 10 10 10 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cubic, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard -Setting up Verlet run ... - Unit style : metal - Current step : 0 - Time step : 0.12 -Per MPI rank memory allocation (min/avg/max) = 6.847 | 6.847 | 6.847 Mbytes -Time Temp PotEng TotEng Press Volume CPU - 0 10 -56.207655 -55.09214 33.340921 33218.561 0 - 24 10.156356 -55.092888 -53.959932 339.40964 33218.561 0.082175482 - 48 9.6121006 -55.07262 -54.000376 344.56765 33218.561 0.19529325 - 72 9.8187467 -55.16687 -54.071574 318.85979 33218.561 0.29643488 - 96 9.5421385 -55.151229 -54.086789 322.8842 33218.561 0.38801357 - 120 10.295035 -55.12919 -53.980763 332.00171 33218.561 0.47607262 - 144 10.331608 -55.09907 -53.946563 339.28896 33218.561 0.57389224 - 168 10.154698 -55.058246 -53.925475 349.03253 33218.561 0.65481471 - 192 9.858198 -55.127583 -54.027886 330.09298 33218.561 0.74437734 - 216 9.6658918 -55.10812 -54.029875 334.28383 33218.561 0.8278495 - 240 9.6801591 -55.102386 -54.02255 336.27242 33218.561 0.91167379 - 264 10.685658 -55.046238 -53.854237 355.0448 33218.561 1.0023789 - 288 10.387727 -55.08427 -53.925504 343.87247 33218.561 1.0960371 - 312 10.231132 -55.120428 -53.97913 333.22463 33218.561 1.2382998 - 336 10.20896 -55.075142 -53.936317 344.88438 33218.561 1.3420489 - 360 9.7876538 -55.165008 -54.07318 319.14962 33218.561 1.42782 - 384 9.9872551 -55.13881 -54.024717 327.82471 33218.561 1.5417666 - 408 9.5362734 -55.063733 -53.999947 346.50545 33218.561 1.6328366 - 432 10.262638 -55.126608 -53.981796 332.16342 33218.561 1.7242996 - 456 9.9228239 -55.122119 -54.015214 332.26261 33218.561 1.8124888 - 480 9.7026324 -55.17057 -54.088227 317.84818 33218.561 1.900233 - 504 10.028762 -55.082465 -53.963741 343.04257 33218.561 1.989605 - 528 9.8227851 -55.121222 -54.025476 332.42857 33218.561 2.0708802 - 552 10.208672 -55.100242 -53.961449 338.68109 33218.561 2.1527217 - 576 10.180849 -55.124065 -53.988376 331.29516 33218.561 2.238126 - 600 9.6467252 -55.119533 -54.043427 332.43109 33218.561 2.323443 - 624 10.041885 -55.173802 -54.053614 318.48579 33218.561 2.4046151 - 648 10.151597 -55.111725 -53.979299 334.66227 33218.561 2.4902161 - 672 9.7719111 -55.060111 -53.970039 348.55249 33218.561 2.5800372 - 696 10.476688 -55.088109 -53.919419 342.94922 33218.561 2.6731395 - 720 10.517805 -55.113604 -53.940327 335.47342 33218.561 2.760651 - 744 10.006466 -55.045085 -53.928848 353.53813 33218.561 2.8537894 - 768 10.201492 -55.081598 -53.943606 343.3206 33218.561 2.9404115 - 792 10.117738 -55.077806 -53.949157 345.31093 33218.561 3.030765 - 816 10.362288 -55.11635 -53.960421 333.9045 33218.561 3.1177356 - 840 10.204164 -55.097619 -53.959329 338.82717 33218.561 3.2091886 - 864 10.147722 -55.101372 -53.969378 338.19682 33218.561 3.3003742 - 888 9.9265037 -55.111394 -54.004077 334.08116 33218.561 3.395341 - 912 10.206403 -55.132181 -53.993642 328.89904 33218.561 3.4882881 - 936 10.28639 -55.093317 -53.945855 340.61244 33218.561 3.5764735 - 960 9.8028822 -55.078802 -53.985276 343.5904 33218.561 3.7056267 - 984 10.492755 -55.121321 -53.950839 334.62697 33218.561 3.8055611 - 1008 10.621569 -55.088588 -53.903736 343.33166 33218.561 3.9144807 - 1032 10.006729 -55.113459 -53.997193 334.43025 33218.561 4.0189888 - 1056 10.099853 -55.068035 -53.941381 347.42158 33218.561 4.1391664 - 1080 10.254232 -55.066685 -53.92281 347.15777 33218.561 4.2443953 - 1104 9.9495142 -55.13686 -54.026977 327.63107 33218.561 4.3368342 - 1128 10.377108 -55.08846 -53.930878 344.13083 33218.561 4.4287748 - 1152 10.036981 -55.114643 -53.995003 334.88053 33218.561 4.526868 - 1176 10.144779 -55.097125 -53.965459 339.698 33218.561 4.6614049 - 1200 10.075844 -55.14695 -54.022974 326.05911 33218.561 4.799835 - 1224 10.183695 -55.121716 -53.98571 332.75772 33218.561 4.8908897 - 1248 10.581369 -55.027954 -53.847587 359.06251 33218.561 4.9839788 - 1272 10.158269 -55.105173 -53.972003 337.52964 33218.561 5.0918646 - 1296 9.8776072 -55.064085 -53.962223 347.15648 33218.561 5.2291209 - 1320 10.38161 -55.118366 -53.960282 335.17767 33218.561 5.3570446 - 1344 9.9528146 -55.141937 -54.031685 326.27117 33218.561 5.4584705 - 1368 9.8024326 -55.117808 -54.024332 332.99835 33218.561 5.5557818 - 1392 10.35447 -55.110235 -53.955179 336.80412 33218.561 5.6467392 - 1416 10.199061 -55.105641 -53.96792 337.36785 33218.561 5.7476527 - 1440 9.6868779 -55.087316 -54.00673 340.9166 33218.561 5.8432207 - 1464 10.093238 -55.049436 -53.92352 352.27563 33218.561 5.9471521 - 1488 9.7578808 -55.123935 -54.035429 329.93926 33218.561 6.0495014 - 1512 10.099979 -55.205426 -54.078758 309.26166 33218.561 6.1612976 - 1536 10.172944 -55.087106 -53.952299 342.93395 33218.561 6.2506202 - 1560 10.51771 -55.107635 -53.934369 340.1967 33218.561 6.3379856 - 1584 10.044994 -55.101362 -53.980828 339.03163 33218.561 6.4362567 - 1608 9.624758 -55.146246 -54.07259 324.32486 33218.561 6.5385845 - 1632 9.9135215 -55.097278 -53.99141 338.69162 33218.561 6.6452786 - 1656 9.863681 -55.070523 -53.970214 345.84608 33218.561 6.7518212 - 1680 10.138513 -55.127065 -53.996099 330.40757 33218.561 6.8775188 - 1704 10.382237 -55.070572 -53.912417 347.074 33218.561 7.0126448 - 1728 10.72487 -55.081147 -53.884771 345.83623 33218.561 7.1384216 - 1752 9.829431 -55.131041 -54.034553 328.57652 33218.561 7.2616419 - 1776 9.9135662 -55.100556 -53.994682 336.52238 33218.561 7.4193201 - 1800 10.41873 -55.097116 -53.934891 340.24798 33218.561 7.5570544 - 1824 10.151782 -55.03231 -53.899864 357.3654 33218.561 7.6872905 - 1848 10.42307 -55.043808 -53.881099 355.71677 33218.561 7.7933885 - 1872 10.276862 -55.085016 -53.938616 344.46273 33218.561 7.8887472 - 1896 9.7681373 -55.146507 -54.056857 324.84323 33218.561 7.9977923 - 1920 9.6624824 -55.103214 -54.025349 336.06397 33218.561 8.090235 - 1944 10.153504 -55.049175 -53.916536 352.36339 33218.561 8.1923703 - 1968 10.191954 -55.098741 -53.961813 338.8667 33218.561 8.3320906 - 1992 9.92167 -55.117079 -54.010302 332.96497 33218.561 8.4774437 - 2016 9.5737281 -55.091141 -54.023178 339.41837 33218.561 8.6149527 - 2040 10.600908 -55.092717 -53.91017 342.71852 33218.561 8.7639523 - 2064 9.9214513 -55.099904 -53.993151 337.46799 33218.561 8.898087 - 2088 9.9256258 -55.082224 -53.975005 342.85042 33218.561 9.0130784 - 2112 10.345379 -55.112923 -53.95888 335.81471 33218.561 9.1422766 - 2136 9.8876649 -55.079254 -53.97627 343.05764 33218.561 9.2885707 - 2160 10.04492 -55.074876 -53.95435 344.82419 33218.561 9.3876103 - 2184 10.028705 -55.063961 -53.945244 347.70549 33218.561 9.500967 - 2208 10.412572 -55.136316 -53.974778 329.8188 33218.561 9.5900362 - 2232 10.404205 -55.09913 -53.938525 339.77542 33218.561 9.7048353 - 2256 9.5694135 -55.139021 -54.071538 326.37473 33218.561 9.8045958 - 2280 10.244745 -55.134529 -53.991713 329.19392 33218.561 9.8968908 - 2304 9.9129922 -55.116192 -54.010382 333.14326 33218.561 9.9818651 - 2328 10.167027 -55.08241 -53.948263 343.08135 33218.561 10.068683 - 2352 10.262045 -55.144327 -53.999581 327.40876 33218.561 10.155937 - 2376 10.520934 -55.073147 -53.899521 347.6998 33218.561 10.246316 - 2400 9.9628692 -55.122001 -54.010628 331.25369 33218.561 10.336833 - 2424 10.565531 -55.157113 -53.978512 325.14897 33218.561 10.452039 - 2448 10.03709 -55.096409 -53.976756 338.29607 33218.561 10.537936 - 2472 9.384311 -55.141821 -54.094987 324.23247 33218.561 10.628689 - 2496 9.8019362 -55.105685 -54.012264 335.97239 33218.561 10.717287 - 2520 10.31114 -55.078831 -53.928608 345.42395 33218.561 10.818756 - 2544 10.407237 -55.148382 -53.987439 325.94421 33218.561 10.910801 - 2568 10.257967 -55.041348 -53.897056 355.73261 33218.561 11.004221 - 2592 9.8425807 -55.139428 -54.041474 328.28096 33218.561 11.101295 - 2616 10.140697 -55.100238 -53.969028 338.76319 33218.561 11.192211 - 2640 9.7102818 -55.136288 -54.053091 326.7053 33218.561 11.280277 - 2664 10.120372 -55.128779 -53.999836 330.71707 33218.561 11.369001 - 2688 10.232537 -55.120614 -53.979159 333.35087 33218.561 11.464652 - 2712 10.032526 -55.094761 -53.975618 339.97984 33218.561 11.559387 - 2736 9.8791 -55.121998 -54.01997 332.32556 33218.561 11.649679 - 2760 9.891483 -55.120919 -54.017509 331.32614 33218.561 11.742604 - 2784 10.201053 -55.165525 -54.027582 320.39272 33218.561 11.85274 - 2808 10.238648 -55.096449 -53.954312 340.06316 33218.561 11.939782 - 2832 9.8692851 -55.068632 -53.967699 346.77535 33218.561 12.036655 - 2856 10.179976 -55.128413 -53.992822 331.5662 33218.561 12.123227 - 2880 9.7656315 -55.1468 -54.057429 324.02612 33218.561 12.213117 - 2904 9.7991628 -55.049191 -53.95608 352.45738 33218.561 12.326761 - 2928 10.581767 -55.093293 -53.912881 341.37292 33218.561 12.417633 - 2952 10.546144 -55.07452 -53.898081 347.02025 33218.561 12.52701 - 2976 9.8306008 -55.14762 -54.051002 323.45715 33218.561 12.633522 - 3000 10.033532 -55.076433 -53.957178 345.36812 33218.561 12.72627 - 3024 10.046266 -55.085775 -53.965099 342.47786 33218.561 12.816242 - 3048 10.176777 -55.133013 -53.997778 329.04144 33218.561 12.903175 - 3072 9.9778064 -55.143787 -54.030748 326.75284 33218.561 13.014329 - 3096 10.516223 -55.110144 -53.937043 336.802 33218.561 13.104673 - 3120 9.6561157 -55.138699 -54.061544 325.6652 33218.561 13.207371 - 3144 10.237043 -55.060968 -53.91901 349.44011 33218.561 13.303442 - 3168 9.9704264 -55.123073 -54.010857 332.19725 33218.561 13.391877 - 3192 10.493307 -55.144402 -53.973858 327.15485 33218.561 13.482857 - 3216 10.022171 -55.141782 -54.023794 326.08249 33218.561 13.574484 - 3240 9.6957248 -55.137865 -54.056292 326.04858 33218.561 13.671408 - 3264 9.9685299 -55.124301 -54.012297 331.9015 33218.561 13.760186 - 3288 10.413707 -55.153604 -53.99194 324.32939 33218.561 13.877604 - 3312 10.022953 -55.103422 -53.985346 337.52066 33218.561 13.977562 - 3336 10.044478 -55.110297 -53.98982 334.48379 33218.561 14.065563 - 3360 9.8593734 -55.130623 -54.030795 327.71748 33218.561 14.15952 - 3384 9.9269422 -55.107979 -54.000613 335.18173 33218.561 14.258064 - 3408 10.288049 -55.092276 -53.944629 340.71484 33218.561 14.36211 - 3432 9.9702156 -55.08732 -53.975128 341.72171 33218.561 14.452123 - 3456 10.246178 -55.091669 -53.948692 341.62844 33218.561 14.555775 - 3480 10.559292 -55.086917 -53.909012 343.70626 33218.561 14.645718 - 3504 10.652207 -55.050897 -53.862628 354.46979 33218.561 14.797422 - 3528 9.9835266 -55.0557 -53.942023 350.74747 33218.561 14.895716 - 3552 10.240934 -55.123217 -53.980825 332.26434 33218.561 15.023796 - 3576 10.406519 -55.093536 -53.932674 341.54029 33218.561 15.203252 - 3600 10.406733 -55.095168 -53.934282 341.22192 33218.561 15.303986 - 3624 9.9877484 -55.154231 -54.040083 323.55633 33218.561 15.398883 - 3648 10.391829 -55.110208 -53.950984 337.09219 33218.561 15.49042 - 3672 10.368995 -55.069591 -53.912914 346.82649 33218.561 15.582259 - 3696 10.362939 -55.109012 -53.953011 337.32216 33218.561 15.679316 - 3720 10.465254 -55.136214 -53.968799 331.22288 33218.561 15.773303 - 3744 9.8238226 -55.10114 -54.005278 338.12616 33218.561 15.86905 - 3768 10.205504 -55.101263 -53.962824 339.04196 33218.561 15.960072 - 3792 9.9589987 -55.118883 -54.007942 332.84318 33218.561 16.047055 - 3816 10.253382 -55.117513 -53.973732 334.42101 33218.561 16.148412 - 3840 10.262393 -55.069549 -53.924764 349.084 33218.561 16.235391 - 3864 9.7367167 -55.078288 -53.992142 342.48207 33218.561 16.329112 - 3888 10.171202 -55.134701 -54.000088 329.5847 33218.561 16.415353 - 3912 10.01925 -55.145139 -54.027477 326.65074 33218.561 16.526334 - 3936 10.053638 -55.038151 -53.916653 355.74893 33218.561 16.618524 - 3960 10.044055 -55.058382 -53.937953 349.01834 33218.561 16.712577 - 3984 10.382422 -55.099216 -53.941041 339.28099 33218.561 16.79941 - 4008 9.97927 -55.09284 -53.979637 339.07225 33218.561 16.904198 - 4032 9.6782319 -55.126143 -54.046522 329.0201 33218.561 16.991454 - 4056 9.6593809 -55.123677 -54.046159 329.89833 33218.561 17.097172 - 4080 10.442896 -55.141149 -53.976229 327.9899 33218.561 17.189364 - 4104 9.9571109 -55.08588 -53.975149 341.3746 33218.561 17.294147 - 4128 10.44943 -55.087946 -53.922296 343.09435 33218.561 17.387357 - 4152 10.040581 -55.171939 -54.051897 317.85348 33218.561 17.500905 - 4176 10.089442 -55.128713 -54.00322 330.29121 33218.561 17.588891 - 4200 10.316156 -55.123219 -53.972436 333.59382 33218.561 17.679254 - 4224 10.177245 -55.095671 -53.960384 339.34498 33218.561 17.770569 - 4248 9.7129183 -55.135335 -54.051844 328.25125 33218.561 17.857728 - 4272 10.231838 -55.099554 -53.958177 339.64015 33218.561 17.944226 - 4296 9.9737677 -55.117885 -54.005297 333.07248 33218.561 18.034105 - 4320 10.004955 -55.116155 -54.000088 333.52271 33218.561 18.129644 - 4344 9.5938901 -55.133824 -54.063612 327.84171 33218.561 18.215476 - 4368 9.8954562 -55.131603 -54.02775 329.0813 33218.561 18.306539 - 4392 10.439732 -55.100379 -53.935812 339.81679 33218.561 18.395651 - 4416 9.934513 -55.08449 -53.97628 341.74441 33218.561 18.484506 - 4440 10.025998 -55.136771 -54.018356 327.73718 33218.561 18.593946 - 4464 9.9304451 -55.101817 -53.994061 338.1801 33218.561 18.684011 - 4488 10.344371 -55.085856 -53.931926 342.91721 33218.561 18.782399 - 4512 10.033193 -55.091778 -53.972561 339.85728 33218.561 18.879666 - 4536 9.2361614 -55.169375 -54.139067 316.67597 33218.561 18.983667 - 4560 9.5786289 -55.179976 -54.111465 314.76415 33218.561 19.079009 - 4584 10.071651 -55.107218 -53.98371 336.10364 33218.561 19.163975 - 4608 9.9873098 -55.109348 -53.995249 336.03665 33218.561 19.25635 - 4632 10.143888 -55.119423 -53.987857 333.74978 33218.561 19.346658 - 4656 9.7506264 -55.114772 -54.027075 332.98271 33218.561 19.435425 - 4680 9.9616769 -55.096054 -53.984814 339.20499 33218.561 19.55562 - 4704 10.271313 -55.074522 -53.928742 345.87397 33218.561 19.642652 - 4728 9.9172336 -55.098805 -53.992523 338.06318 33218.561 19.734557 - 4752 9.9556222 -55.12128 -54.010716 332.66408 33218.561 19.83859 - 4776 10.197593 -55.095293 -53.957736 339.50067 33218.561 19.947471 - 4800 10.145085 -55.108467 -53.976768 336.05115 33218.561 20.044183 - 4824 10.205523 -55.147376 -54.008934 325.56559 33218.561 20.144393 - 4848 9.8900281 -55.121598 -54.01835 331.17401 33218.561 20.243197 - 4872 10.03655 -55.100936 -53.981343 337.6777 33218.561 20.336043 - 4896 9.8120635 -55.087507 -53.992957 341.42438 33218.561 20.425498 - 4920 10.615354 -55.093335 -53.909176 342.30776 33218.561 20.519318 - 4944 10.374366 -55.06455 -53.907274 351.10607 33218.561 20.612312 - 4968 10.677474 -55.147807 -53.956718 327.85703 33218.561 20.719371 - 4992 10.558882 -55.145253 -53.967393 327.427 33218.561 20.818726 - 5016 9.4097946 -55.150835 -54.101158 321.62641 33218.561 20.914472 diff --git a/examples/gjf/trajectory.0.dcd b/examples/gjf/trajectory.0.dcd deleted file mode 100644 index 47927e9909cfcfc86ceb2568ba1660efed5834f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439092 zcmeEubx>P-)a?m%rApmsu_RbsfbNyL3nZbgw72dqgu2rf66!*Wph-<^4HzCT{SnRe#fz`5b@<0pHsz1G?Z5d@)KufFZ2{QB$P>mq{S zx$A#^`5*ohne`=5@*nR0#~ao8RtR5v`Eue*J$20V>0uM=51&)NJ9_l!9nAOsEC2d- z=z+f7g6p@N8a8Zt*vR_+t?GB3F@BD`u^)dmY(-ooB;CH&xri%ET zuA4oq_?@ow=`!BWzt1%zO2F@Q-Rz;__4<9T8bx*Zovt>IO!%FyvFSGaPS@{rwtkJ} zcRE|Y#_~IztzTpLozB*;vHVVF>(^L*r?d5IEWZyj{Cgz76E^%cmfr~*{u;~ggbja< z<#)n{zsB-AVZ&cz`Bj7cy8bPX{aZfyx48aq@%7*0+`q+}KjZlucm0{4zwz*Y|NZly z^9uhKzyB?c{#!izx406a6%_y3^>2CX&v^cxuRrtiH;?h3?VVrue!uzo&pD1i`Rng` z`AwmAq{^8C3;fH?J0RM1%|8Q9Ua5aDK z|IJzbnTJ2~@aMez&A0!Vhd=Z1|1Tc?%}M{mz5bJf|KY0t-2XE_|L_O@=mr1q;(zY{ ztq=T}hd=Z1CrXpm(Y^Am!1@=C8=JhlmhR%a#ke$om+@u8W5&4T8^#Y` zoijr9a{~siOAZXaC=2*xhzXqXBRk#p$|e0-?qXx>Dl?56{Er64F4+~BwoYq&xMO{w z-?^fJx+UR(`$BvIr>{>Ae7df6z_=CF(^p>$HokaVGH}(bqv>1RPa2~ZA5ZTX*|<%& zw+Y6ge!Bvve|i-7zar8sq2G8`u^Xug3{n85=5-DollSAt##j;B>3>qcJ`&LpsnJ>fDZBm>Llp!UVy_6lL_&8jO zOD*M)?2;kOKLVMEz@2~yTzjR##UdJvpRB=kYmM&@~kE2TVQBvfvnJiz78t}b+cl!s};M{RtS@=2>)(@ z`Mw2Dy72oV`E`i}m#$mk+0KH`v#nU9v|_8t0!MQzKJ3ZH#urvZTP<)sW5v#4R$PB( zL9tH0)X*-cjVpZU&~Z;{V09(0=1s`?jwhA)+K_%u^`^v{Ze$$jP8~+esq;Z8#gF%< zBQCy_(a?*2UTaQaUd^fTTwf|$LQdU}HK6IwdRlm}Z{6D+V z?j16!e_Bpube_~_mIpQN=tdJ}xYGP8a+)#Pk8-mMsdGC4g{=#zl#_t0>xDF`xddwucTlxd2PM~+VEy?} z+`rrpYnS!I&^jSVa8g0nUX8o0RTwc*3F~t;BBrX)y@nD!SB2nuloB=Ph9ES~; zimy>YdQ^q4$3l@cQw>+O3Om;X<3)f9p@k}hPg0@xLN#8VP@;=G1T{;kvAKj2i&m>) z<>&7AP~kxN5EQMa!u*#iOzN-2fnz!}?HL2@LmfsO*J5rj9hxU;vFU&gmlZlRiq_#% z10Cj;(jl?54(9^3i1XFLRU3_%3R)cY(V_8kEo?P)XfacV_K{jVpQA;sfm$q|sfFLK z=QPn_$zd%@6>2f8l@3z=9iQ&$kbF~z{RKLd=o^EeTrG~4FvGFjgarposI}XSEsxDO z^3#L^uT3ztF`?X66TVh4A^cq?R8vi;KGTf1rOjx2)`VkS&4^l(iD&0BK_ktm`6v@b z@0c*Aml*~Z6NC!)2%)O$;_%cw|Gp+IFPP%7JNt4Ks_` z(QByooK_hoE*3{vq9x-$6u4|c-h>JaxpfNBS2qDg4;8GlI@xV z?t=u3kC31QpPNs$1(eS#q$xoH+-?fE(b+*MLLm)XQb?uS7Sh@1-|R09?ItWaV=MS!OR1U$7}H%1q_&wOZuA(ZO|`4xdkG z(e{BBg%$YcqqTUmUk9(TI?R}%#oj?$M4r~-r(O%y2_0fP#UQL=48D5n;9}I`VJbgY zn}y!dCXDN3hIXeJ>lT`Dkk8!K875pYW}?keGae^o;qnPSLoZDb4w+DIxCxWyn31*A zghp}vvzeJZPbTDEG$H%32@9v05MwgIZ?g&G`MjO3YR1*=CKP-#!DW&e&)S-?rg9d} z$;=!}%xF>Bj8wG=8#N}pt6;;vB{mdpx1o7k8>*DEq1*>EYz4n4mf8g9c}y$v@UIS6lJ zgTBy)obfg^`Iv(x={776%99&9|++B?19+AyQa`IfQd)pEw^ zD}MykKD8#`_4(QXVV(m5;&+ZUmP-f=+&k;@iT97+rN3+RDLt()<;2s0D+A-d8v{2M z>ze+odX$`KXH~Lm3ANN+whG@yZKpt7k+G`m$2J-nVs&5P;DxZgmdoDylt z?L=C1Gm&$iNJXyb>GkY1YHv)Y1G;1yo^GJ^u8EYSHBkBaNfdc1nfhJR(|UOlZ7wcS z&>cP9SeHzZIzmbBYBRsETwdCS|O6pnq=y|IGJ*T4HSG? zibFqSc-}{bB3r%SS4#^03ON?+_r@NH96!IxaBiFo@88H!r7Qalo67OIryR@r%iujm z3Xd6HxLrYppsF(1S9!s8ycA_i%3$>OM&qk8ge>wzpIb7_GDzWCSBk@sggRwA}Aeyhd!F0_~dy`M1#93*1!C_NlyL>zv`IFg_B@-Smb zlOEJvMCw`*9W)|JToSRGzdp*iFp-~On9jJ<*MNm<40yIpM5loU^y1&wzm^D9pam|= zEht&aigPovQ6t!jF}tl;UEhLXdACq!niYYSt;j#cSg@xB1DjY;ow20xwiRWZtVmsK z#hxe&&iY!hILv~h@fJ+DVSyk2zc>8e3qP$GcisXF%frYE^WwfcOH&se^&^^XhTSgR+Uke9` z!4ArD7LdZ;@GbAvDCMU{SQ{1IWQV}1w-VWBwWyk=#T1Jc5sWibjkVY|Fb1t_n9-zx z2}X?>@`6k(Ich@Hsb)0bIB*&^)Gn}LK^+_RF6S7K%V*zHN_ZzD*SY>QQ^)!7rZ>Hf zlv0hF1vFw#0X^IzU~E7k>5~N1>mWgtnd5u~HTI2DLH&*M%;gYt@KR&+869Gd=org$ z9M052J6ns`k~%D(WyaL`CS2WQf-J^_E8-4NoNlQWm%zrPz=+zQD@^DaH#;QAg`{B)JC05=J zL1o5~_8w}8ob&4SkKvr8L%E(h%x3JBR8@yl={ls|HsL*wq46LyigTQw*xif^pG+t{ z!HyanV@t2%I2mNaF2*&Ub8Kkz)Qvi~_oU4AGTNQwLt|$7(&|o4=mq27LG2}&A{S83 zPy}=@{<;oCfSR^f|>8mhKxBwN4J)pX4BE zr457L%4qfyciPykDQ#`slsZ3hBUu?A8g7+fd0k$w0Y#7zEWyC@PIx1A;u=r|d6y8p zAFsr)bTx)IQ(^D{HT*e$uRj}&p3gYvkJqAE865_3{x8>>=V!19yRMo*3KLAvP3Uhl z;REB--4An+=4XTAnhom295lPfzWik(-SRY$=4%Qa_fMk0N_uKh#z5{)9D8?oVLr#= z`PJp9+FFY0XQimnm%Z4>G`PMu97A$7_&QjFJ)<;m_7u@=j~-9Y=ppN>hxomMn&WJR+`D_Y8}comq9xZ#4rHbqcWlt~mXCkl$#k`jgI89{NeOcH&+sHfOr zDWpkGpz^y!GOLm({;m{0O}*gJObSS)xYtXD_=9phB>ubLGbs#+oPxV~Ms;L9zpgEv~y?w+6+-$PLJ_$ep` z$R&z1vjxTe6hX18auPMXmq^ZgQz&q3DoyKUpo=f`w7I+tBWKAmH(CZ8&sF?68Agp} zKEx{mpEER=+L-f1)d)oY2*=GG5pYY@BQ-$861@S_jd}z-889#?8PnHVF^OyMvXipm zQXw1F`ekEG2P-l~K`|&*P@LmAn*B{s7&-}x>URW1dELgqPo zda3k=?Vb!-52bK=zr!Mli-4JVmc^gL z;jvnSTAWwAAJt%POBh-R(d#yN=#J{`1fi1jNyQ2j~mQ_$ZYb_|AY?M-k{vLFEvy@tN zbEirHo-{F3N_DsfscvxmYP3d0u3xPCxaP65-sz`Aoi-uZd{~W2AC*Xdri9Kr6s1zM z8233ECpcF`*3)4!*U75SIvnEqvjSuE<;zUi!1-&x#0<9;X54#YL(%zm7zf)?cc%^2 zAKEY>g6qkZKJ;OQCymT$N@dn~)1;~%lyXB(Z9)oZ#=b(DKdg{!oGT9W6wq*<1VU34 zTs=cjuqFgyJf7wWYLp+X#@1mvv|Oact@~OuPt;*;dmZl9)nQaEGbYHhuxxrJsx!t9 z|6qo2g)#nZ8>aI(#&@wp%(ub+tqu7FHmq`Ur&0BNsmX&T^w+_rw4_i*&j&Rm=VB5Z zt}KB$$wA(nQ$JR5P>oGLX(PvCLwOZmomPUbD`D%UMhQtMrcKtN%v~KKIiC*C(qb0J z>zkEhkmb)jKtD6iyJlfndoxT$*zp3K$k<2tpK6CPx#P`;5GQs!GyGgTP%NQH_j z6=H{IQP!E~$c=OQel6a%)1iZJ40E9-Y;w=Sz1Jq}m-0HbG-JSh6Gn3_lmC_TC+GFc zoJ;48wPQh`9pN7v(qBRT^mw%|Y2Ub!S9^cjztfvaxp7|K>V$Dx2~Ho9pgz~q-I@uw z_gw|g`AQ`9<9T_k!m9ad%$&^iXOI>Zm{*y>S6i+J144AD)JKP}%%2=AYewH!nb>sC zgeqL~EjVIA7U!#4)wvGZU_;AV%v1O?{^9Q%>*Z8=tS?E<`_Y>VGCDp|PPx70l$apF zh&DwaOXAvI?SxBlMbLT^*V%a?cziGzUoWXpwyGKd^O(EZq(oj79e#2?eKw2d<$N@5 z9pJijlolt~WMUkTq4Taxp5kVv(gNpH>M%)9rL{8L8X`sCI^HO&mm-tvjY^-q5G^qFo)V4`jU#a05sv0x zHF&i?0uck4V@+dB%yIGg+ay>^8sHowq9$YCCUvbCFvNnC0t*uAGhY2@!CQl%n7Tqx zTrvrYv;KnO`X)g!ier*yTmrS*BvS0qM4InsAblSLedHSJ$8ISC;=FL`iWEN=b1l<@ zIqRu%eB)T$YP|-z91H!F8pw?rG&rHb>v5b%n}~?K#u$E}i2k`EauY=KZkCOk9#+h$ zlMR1!gLf<#E=UxwKL`prkE3avpy<9*P(0ruD4H!#qAiz`Y16h;a&MPH3pOND zkTchcDlb$Ik>mCmFMLRm!}XgCj$k=9; z&U`zMNf;Y}fIK}iq6|3nUc|v@JuD^>ZAiq8^;XPlm5nfWD`p}a3olu4ylpnRa*lX0 zSy22u!E2N*C@wq_6z_QrzdT5xr!5RLym>NR*)P%u_e8o;-#`lsvc4XEW~Me93O zsE1n6lrd0zCo7IK?s&98P{b_YaXb|iR~Y{k%j5mTxphXqNVd2X8t9Qs*+)eRu9iy6 zqeLn_P>MO*Wmv>mV|G7ptT--1g{eMJ9M|C3t%az~`&wBd9M1=9@HSF|9dD8l+k*GA zj~?fEZZbKyFYLp)_1i6k@Z5Avfvqcr;CW08>a{YV zq?-*m=0iQtNpNYq8Yi#oaPXT6Kl<2k(M3+FOPMb}7J{cjWOrS7FGbXk;;_-dMs8*EKS_9Oi@(ZfXR-(Ly|H#*Hy{)Qk0`!9yfiwLcg` zuWB(=W5Tq{oO_L~w7YU4xx8T>akUnSW6aF!b6uGurwLCSRFwI|qD6Js!|(4kI0ue! zKYBRd39UWVn0!HtO4m#{Q`U|IVFvOQ`x0K*pwi0^I zeTAcWe&*RR)n86yo;cx9t`bAmYf-v{2{kx=N9B0123SamZIo!wIr9#4dOarQARx?@ z7R3Ift`k&f8>&TzluW!}?yF4`DLu<`(1LMFjF9UvI@N^qQa1D`*@#ZH65#wqiNGT~ zZ;ee*)wkj4Vkt?SB?!H$f=gd5c3sIt+gEapvq1>Z^Wn6U%bbILcFcv#bp{P&Hh zjrfydoz-Z;CH(Z1~W&Astmq@Ogm>x9Y|~w=4@e$GLvXa;5y!4l<2ZV_j$FSDnpx z$uvUhCAo9;m_YaR6cuMnJSrbF#btdFeZ+Hg*N`o+<13m;}53kFrs%CUxEO*`6i=t2R{JVr=*IUM^i%sas zwQnb7BidY1f}TTEaChS0+dC88m)o$Sg*W9^74W#G3O#>BBP>1>uOj)J#`;mkC#*5> zd2iU0apmMp9C(|9$}1T+*K<&UZwS(OeLaIsI6TjW;!WMiBf>#4=A4LeU*%IKL@8}J z9@Bs-%N;a)w-S~b96uYG5LCyG_$M;@YpQ^YrPUac5RDHmCM5BG(*=1_r633CE~_w} z*U_vqA#F2r*1f!GMK1vzSU;%7^Ru~rCW4v!IPKv^LiYly;;X{;8Zmf(oN-)t){VM& zQQSxYJFIFvHEZF-T>OB>{C<@uZC)kdD?g_m^ZskwG1i*Tm~T@Ps<@H0$wg{BzQ+8E znYoQ+{P)iHAn}-k4%H6Dq`^8|FVA`#YfiT-x>IIT)?*@7=)mzI*~bLeNjALqkWp`c z2`U7uG5fL(o;OWsKaRQjK_2wpA>dj|HST}bVoQJ-b*I^J@n|E8$rtebg9;6%>9D%E z8J8;C;1uOW?k-N)^Enu2Pw7}|&P4P1HVm)oL&M%M2NwWzE(Pre#%Rz}|UNpG8 z6DEOqK>m9bWlh+;#D-bJlIVUvDXO&4U|~DPRm?eFm@X(JUlVD6TQBq-!1Zyk9tT{l zNZBVS!p`X_aIGimc8|dIED@8RS&+z>YTt<@YSPpjuTE$Xvx;lf##W5Y78DjSg(~&t zdYgIP2A&3tQ)eTqi=g;k$w0B`-Vg_AaCZ@NB(iJ-_Z1Z9$0gJE<6cR;14q6mDx1=+z!i$R3BozDdNpZWaWLWsV?IB(Jw# zxOXWWPgaXK!kF-)Mo`>+ucx~r^W=>*cr;CfUSfqjR!|I=rqcI4jE$M&F7Rhe$DHqY z{(GOcOQtW7!@%|U66SD(4;H-NEhwVzi=-C4kaj2>$38F)9b-kE5J90kqNias<>)w5 zgRDqBG&a`$8w-k4PRVrUvJ4c@n06NP$_*@7%v{E)+KE)^xfJ{V(!kn-@!BE_z*tpX zN>9-|Z?#)%P{WvnIgF3azY!G6w&9BU#pF#KR1q&M^M^96-@mYxR9m0}U&-sN-j_{P8Y zR98VEP7=vC#2e<1;V}0RF@1s+O|A-x6GaX5&cQhGp$6ABifF)i{E@$)7*RQ%Qe|>< zn;n6xLqxd5G7dEhilkA=^u|?&vk4mPZZ6_(t_4@O3JOmcsJ^olA*aJJll>{h7h0iv zA}F*iQfTHiITkL}z?d)MyVZi$%-cydX85y9G}C97p>k+WOfGIebpH-qGXbCo5JmkF~g?ft;SnaD_Cux>}EL?`&NE$b8^> z109fhV{t|}igOKCvJ2}Te+dfvz+`GxC`H3W4U$i=CbOS?FU=*2!Ab*7<61^}K!d_r zdc;3qZfG#i&j&qq@|9wfgx7Zh$ANOJo9uPq(c45iv{!})-8GoRf7gjhR&37{6y^IF z=oHsMpIJMSeiso?J{z~^alGnmpwqG5P@fD(!v?(WT#p_ZEK$IaLYov`%oi-gD!U$a zCt5KyNTOKuIGHv^d0|W**O$liD4$_L^mswh@)&c6UFE1aUjv0R^MB`Vq0bOO@hwVE zzVEzn>G?t=*A&rWo)yj?9jG}kiFPlQA^VaBk3B_H$+Mt11jVC^i8Qc<3|)t7@I$S~ zj9wO;Ud?s!W03}~^@6`O91%72khizsS|veIN@1XSC48_$9f36$li+aT`fRPBsPH<0 z6wf>naaDtLkJ-nRmW|#=ne!YFPf<5yc*JpLcx@3im~*>RPEd5-&-=5M3?IH|(4FhQ zp6M2BE5B5)#B&ov!$!pVXnHztwfeWX}>mdC^AT06&za*G7TD=~qVAM!@SKn*JL{-1x@ zio<;b#bQP6qqTWwIA@Dp@KPKbc%JFlCh)2%ZXw2*NU-dJlA3d4gq1buj)yNTn^FsyW z;i>!Ew5~QaaQ36>K|{+f2$-Lpi6qo9 zP-ou5jsT9c3uMquWbdL?j)N)Qu)dWds*MbJd~d>R&QpD**t}SVz$r4EIK**Z!5kCo zBXKvScx02I`g|E`ob@ag(1}v6~bR z&&wdaD1+&k9OwD_-dp7edJv9q-UD-XuqUxq1d_wp)99l?_Bi%6#%WO1s=YatXuo(_+IyLtQ)IAAU|hA z`3O|)7J-<${G7CfSkqO56MP11TnNW1_Dp8*{*SrHnh$Fh3;3KJKgu!lnFw`H_BX!J zBdnjEIb0DDr45jc(Btk5JsQUH{%5}Y8G9b@))2Ay6X*NmBANwo9{HLCmzS(tGsl0j zI&0P8dd#23-o-=_o5%8d`!j!Xm7iaef7fU|+-%HU7(_hTF2doiN9PNyF?kr^y5EAa z35?bF9JkoXJp3Eh1qNF&coOFej#*}BD^9?Q2ahc1r{dhT-h!3GvZ3eqFWJG`_DKtB z-?iZGCkqA}Ecja7ib9U18_X7r^R(c>1PksLvKGCOwP}tR1DtS>e%# zaS-!4XPMvWIm3$0vl>xkHFrAU;!jBhQhHn6ovIG;AZafjO3rISWk-5a`EhbeW*nW) ze#h1|Wt3K#Ie;Htw6>L;Dn>V^8v|wJpC_Y$u1zR-yp*L5{&~xalM@y#b<_Ke>oKfo>1d<8Lq`< zg<|F%CGI>9L19xBW+_#eX;5KB0rSbCMp8a2Jx6LpBa06TQ3wnv8zd@V1~VtQ?^d8X@NSs#N< zo0(79t%cO2MZ-xtjI5x;iCtQ(tgeN#zZNt>i!RLbPw%Y*`skp4AICn+d3u|O1@|Zh&&h@uT1@3%7muVO@JF~AyZB0I){0&VrD#*n~=}7R_-R&u1~W+E7ydl zmCX3OnmHSP8}>)r(6gEiy1q8{gykSEn>matcC;U8L)-o~Tpw#gs<#~{zvSReGp;MI zu@1k~2In9fiul-YIFM`5LpC_9HhA4)52MzGIj3@PvXKp6OERCfmbLoBcBIN}T*Krb zurLSNk8-f@9KZiW4#x`iHny|Fy3Lb57IUS71MJ;pA8@GwUUaaWj6TH3sn{uRQdIG! zI>)@IVMBj zRbQIF(1%`R%BUXmCqE~6({elWSoOSU|7Tx{8_nEadskZCPDbwA+1s#GPG58m>dySd z>z)$y-sFVCkpjwcy}OkCio-o5=zPvWBhNc%%oz4Ke3D?)6bZ(g1YG_sAdU64ydDDc zvI3?bl)%V*R@W!&F_sA^w#Nyh>Nseunf;E99hBxQLG!2rYF$Nw*@K;!1LpTUmLTD# zfMGui>DUwp-DoVpzL`A%%q_fI#-7E|N-VjiLX)>4=)-5FyIqOrBh(0Ouf`}Z6`nOy z!#-Apvw9WudsNuXe#YR%O4PllL~3$Bls%wAdK>0#OREr<6N2LfN{lP1MArQf6dT0n z=U6a^HJnR(l;}`IjXCZ3=L`Alo#wOoF$A5Lsc&U$jbUCgJrkw)`!`QaSazBHFJa7iCh$30 zZGs}hgrYUfILkV#W-ogzx|wj2pSNP72>}n7Gp)&fqVN232TV9JG7~qL*FEIIoN`4o zdQW1ljnDUf*0{Fla!_=R9bJy(pvD9nx-POIG|z@Uxi+-EYeV;aIhfzfj%mwtFl|5k zgAdv9I>UyIeD4~cxg9(BTwbzagxUsavK`K~+2_c7o>ppu#n*;nzIH6?WP{HG_Mi0R zGpDm*c2PST@VRZpuidZPU^FrhdY`$(mUisxvBsD-;iWNlk0j&Gmz!<&)N~JQv@tp` zZ;2+ba@kdZXOcWKT5PFkEZt&rz^%~Y#@w)*>Fu`d2=ot5H&zZv4(#78FL2bD2xEWW zJAv`a8i6B1o*JWS>`uQ@w~Mj+>7Ie9&9?<+M7jo6tk%cqbhfoocXW=i%&sMY&+c_P zacXx#o34%D8~cS8Zk-~W)YcuWTNWU$|%0L-P=6YdB4R0J> zBS+s!QnX|Ic$M`)|2LjUjF#e6QyHGUlVR&1DY{0=klUF3izB57@9c#(wb^GPN-_SW z4CCiAMr|v@nq-Or4a7w|tPXi4?!!^iX5`hl8HTXDQgBe`k=^k(& z%pMIoT+m=K%gm)SYOJF^2xdwXX6mGTFBc!*8jYC9SV84yDsR*CRB34Zi z5p!FQEmK8&J;5GDFaDfw_9J>T-aFjM00m>nr}y<(b5)P=Jz2{eZNPy_?0aPY&_X{E z?U{SHa3=|E-Wag2Bl9=!^r*5t3E|9{GzV;TGm3tjN2_JuJl-BhI!!%e>6)6;|{Z!#Iw(Kc$ToSJeFd39fH9 zSn+VR$P8|3(f9WaKI%S zjV@WSaI6(^Tnqm5xge{Sd(w_}a_Y6nkG>~KN%-PLFKhVFwfYiNyi-62ck`={1Px{t z#e_!!G|CX9aIF4tk$F*>8nKgE&ktctq-DR}BQ2^B`vzZY;cMeKcZK;;j!DLTW+b!z zaiKkX2-%Z1vmW<79OloDx@kvg3-=W)vZJf(TMS_RWny1fTI=Uc8_Rpspx2z&)KXgf zMou~1zSF54tdETPNw?XTFHI_-{6kKtVW` z!`;P)F7ezPpCl)1o;O`)%v(Rqm)t%Tke)sMGRBqeYYXY|O75fiAfR>!_7jAKV%S$D zj+RrRVGAX~t|@UbOot;cbr3?dSoedya`8HJe!^d~=i-+yZh(&&or{{ee}v~M+l&uS zIX;f&-U){d>v}UEz1fDOnXKQjZ*W0eHa(n^EpdS>Y5%j_K`33-YBCJ zPa4oPiJU?%2r!H(pzbdP%x3K0LsdwNc~7E+1xc09pcq!yet$suUMN1 z)uBl>9oBI!&b-an8^*dNO}NOKku&G4PLXCbUuH(DLuL$iZ^wUZrB zy0Xtc%7@$!%IVuSe>$;?eXy&&skPmmicI7_s?$ygU&j3yj9H=<^Y|t^=s}hey_>L> zIFNP539L!nRbh%s4gK+GJgcPxF(xQHqeF^b3x6Z`5N&1sB;SmVBTcwj-h|h;&4`(A zLO;sEraC$3!J6{0%pA1c%l?p1_JoW#(CPADBR0Q6x-MX@mZQg{>}6hzb=L5 z>`A7wvQ#p&KYsRRPxOkDq2mSi7OdlV-araJ^2VDN9JlvGV0;Y?pDzu2fi>8l#vJ&5 z?hlk0Q1P{h&Ri3FpD|!2^GV$bve7Mt{ny=@uUu)x)d^O}dN6kuD=2z)6BI+23JU+) z5=HM8f})9?_5INXqRdn}(;%7JbDn!RJC$%fnf4gHpdT;AxWn9g87IY&P#K(S$l;e6 zfzfj~M;z1O@@5V8E{VXH^~?`^6=Ap~q7Do=7sdQ)on+*2oxU!TJ>#hyD~EHxV1Fy# zdfmo~hPTn&!Ja|(>xC5viiNBzTp7dTVt#wZoCG@hYkoXas8eJ-ZQZM@(?sZ=>e0ZJ zb5W`R!|!v9ceY}>*@{YQt#Ie~U%xT0*9<|CJ&<{2=D-gXlPJpaTBY;4-Q1W$*GeUm zY^O+j&WfZ}BvXDHJ*9n4;vU_MCJ`G3hv#e%mf0rMv-Y51Idr+^UupM)!i5F@J5ji z;mFtX9%divLH0N;%wU~C7lHS+4d|*cp!5j#$von9;{1F2frudH=}U5+E4GJyDt$Ot z^4|Gc$XsVz)@-`)e&IcByvAOlg@U5-EkRLZvtzU)ol8tig5_i}FF8f~Ej{kXm=zkz!kD{y_|8478p5*eeo z_v$=*E}ybzBaQ3+lUnTI`l0R@_NK+@@Tf=@N)#}jk72*XB(Bd(vhQ4BMsy)-$VU+-jN37j|vZr;tgYZ-eR z`wG}}f%`d`2l>)ciLIs7*j7!6Qo%|DNOXAKh2!91EhhZ(#ZA^>_+A~RjbXoFu`EQk zGGkhQGj@D2BXAbyvQ>8Y9nHbP{W;ipg7c{VTe#|MsO08FwOaU4{7z3QXyQR5GyJH{ zZaIzGUPu)ybHA#O6Rw8~2+#@e<2o|cQ;F4#F%o*JF?cKUGdxEIhY~-Iu?Hhc3(E>E z=6&OujB{$!mt3FCV|}%$89h_E&RN2Igr6DZ7H~eDY(v!m&RdaOr_|%Tm10L+T^lq{ z{b}M@A8I&NPHQ%JQ;n-$q-xi^80T9%Sg-J%kxJ)KaN$Fuah zfVp|xTf+0zC0GTIiJZSUcloH8gSr|Dr|)XS^kS}OmlmV#TD-o+K75{^)}>+)9?SlP z;U-usm|^|IHKLapho3Vpi{L)AYrH;rHi(RYYBN4N!~BVDxcPHtmC-jrpHLD z9&}GkQ@g*S@#lIV|Q@f zu!wu+%SPbmBMsWJcKqY12n%z%%acSr9-WMhXSw%@^XG>S+34c1z|_@>rPUcPKjNIq zvG~Cw_Q+M2D31QpT{tc_f5|a%QzDgRjm>&6nJS!2qmXp|+=F-n6)7vlf?jgeZNeOW zJ1HV6%8{2Qg^}}n{ZRH*_KZN@!Emg9wh+b?u5(yh^a*A^_Z&SYT{j?qqX82yh}h|! z%|2c3YvTM>(uwD4DElkz*=WsqtJwn9yJoZYbWl*d<-Adzb-;IAM|Mm$(BSw)s@FP^ zKD|mNduKg0$mSYu1NQ{f<9@d4-dNU4hD4heK3CGf?#BK>Gy4q&u$ERBj*sPd&V1N2 zkjMJaDiNjjvflmF02O18+a;~&)RF6m%2upTWR29uz57zm@lOTCj+267I%}Y>PVriC zzE5i=Cmt?y{j@LwP9aCmK?ICtaGG?V;|Rk zA1-S!+!}$vXbogh5$Lj;`_7odPviP+MMDuE=NOQ!Y_*{5 zR_^KNxk1GVk%GB*VRLsGYhm6f zJyQl>55^mBWVpLrhN!XOSmdHX5bxvp>-e)6ShvjUslmH5to2Xjo(`U$!=Jd0OyO~{ z4$!zebMKr(!v`jRC`ddf)Rg1M4?M|>Z!Rbvp# zJW!<=R#ULFc^`IIo{vTgx;ThNnP2`(t&#fDk*WJ9($xe zWgwL~(KoML$*;VCipx=;KBe*5+za_dNHt8*N+<`%vw4 z0pi3^oSecv`3=o*-Dk(KvhL)PDWD(waY}n~F5a4nu)#Ul5hkUlMhBf*)EC?5N2AJm zj$LzeptX5WmCp`}e6ED^yJ$F4GvSh!gYv~>^pmxNj6O>EFV~`RYtENvYzPTzOlc|s zb=ZG&vXl-9?C(>&3D#w5%qGk8EH=!vNu?X+{NtwdThdt3pR8Kai_@QPRPH=TxV4tKl{agcH{aw)`t!r{z0A# z)QCHy#TBmWuB^zxy(BqZdGV93$FdKOYny!*6B;o0)-T7KdQLB(#kZ7bbu${X&v38x zt{l9W*pRx;WeumJ8e=!>u#fBcPbGPrBm602qrg4QTvsxm`ieD!Z3nnEoYH`Ly~(Gq zFO_(~IeG%ul26Lpu=sK#GWHcP^okOfhiOr>r3p*-Ft1)wMrEuHDi#~cHMtfeyK)|X zk%PYRo^;T;kb4P3u(zlVo12?3q@NAdp46ks#~DYp4nf`q{w#~Zj`Snpz;es;Jud57oVeb zn{x1Vl$5#-{Z35^g3+NF_qx2!#CFyS${PJ?ty}_$TL>mH|ND6q*T{Cxo4@>G2?B%# zO0053qtScz7nir=9ryZ0bt$A)KL=!hfEG$6KDx6;6Pt;NTx)M>A*WMK1aul7f{)eNH@7wu$?i4`jr62}asi3V zHH<96_Zbtu>0^U?XICnWaDv|tHTvnaC^E!^vrlvQGiJQ#Qau5_H9`<`Rg0AFnON~4 z2iMknQ{=}&iX5WE?Fl-ZY-&PbSw8QjJ*a9g)&+Vg(Xq7-)vf&ZhH&3H`!rh)WxnGY z_eYM^Vfzsi7H_a2rJN6Koy(d-Llu5LV?QSQY6p+7qhpMmy7Ffo6l<@NXgAmNbQy=A??GxGhCk2$Yk>nSIA?d45D491XGXz_@7hlq3=W*w7~>Y0FvUAQl_ zvTNPFwQruR2|e8cYULZ!BmcA@t*y8{N;eZ+1(dK8A; z$*^02ZG_!}&F*Aicd}W>MquCTyuXjnm5o(h;=Mi;Wd`#6)LK!9?@Oz}9?~;HfdU9cPoCQ?&!rGm^8r-2`EV|poT2V!xgFDW3atn6f$=UiB6~)|cbplES#x}0->&zkr|u8Yg#|@R2pw%s_>wYtXoT3}&`rjhaYp1Z%y8)Je4|p+?a^(b#>T`2#oUtKF>7 z-g73)zOnRNnWZC5Yu(!&7>Eo}#g~EKE4(v(R+i@YDy1Z%$(xapg#`FC; z+|i7&{Q3v0E3`M?@0Hm}8oVtZ4eK-$zWGw0p;l-&k28weR}EV}F`%y0>rt2CzKxiY z+AOC=_@Ec-NYCfY)@n@e=mM_ine^10R$;-EXebL2BbsAJT0QDO1B~+iCN()nqwui} zIfzB9A6eu7vo~J0UR9%rEgH)QnUK&s16$9#(4c6dB(SCrkJe*jwh@us7m1!OoX?Jz zhFw(H%lEz395al3&X!lG&pnnT<43D-h3nHjJP9*Lk_%|apLc*!e)Lx3_6}xF5U={T zDf1AB0d+r4ozp$$q)p^L+Q+Z|PbU86dY&@dB>#3)L0wyq3f#YWhskH~eNTOoAPXzf zQ$`JtC-pIJSK2Xy-rS!P5(PU{$QclYrZFZ|<30@zRcNcz-<{u3gZkcu88KuxxG?~SZzPZQD#@MMfA=5ttZ`<;9OG*~=ST!oN zjl#ffCZylVz)9j)FO!p{O=IS6G~oLlVZ!}~nXuQVetAoRG+scg>b@TLD<@%_yB$KE zW^3x8-R5baHS*ujoAKeh9fxmoJ#+n6u(3Bd7L7rDO*s71j#AW7hB?ggVW}FosE-Pz zpDC5+Si6=AZD_+}$@FHw)sj7Dq8a%<#QWAOw5unx_Zj7f$o0`E*Vzoq@Jw{!zAk&& zEE6hG=j%nx_o*4bcy6RLV;^-RMU;i8zuFpucAw4g_+W?sH-)zLextn1Bj?9HyZdnV zAgk%yHY>E&=kfAxvj!Ww>#?|-8C_;m&%2tvp^CXFF6zYib9G-sP1FSHj*2O?_vabK z`+}M{EpzBbCE@BtJG^-=we6iK6R&8Hqt|0Lf8OaYs88?3^L&s=`cZ>6!-tx!2jtes zMGc|;*S$%y48EYj!wGuGCvslrnC;e?p0<@n(M9le=Dl!*=R>hFnaF#=^}lkTZ0@f@ z#|7m1CYn(7nH>$5@cb;kS8fGp(6mVmCRR0b9r62e{nv{$OZ8J~)NB)jo!3nWV&54{ z%rx9-mLoUR=+RY=)Cl^s7u)gYlS132BXRd##AgRf8jyL@f1W#=i2=LJ}@n$9`tW?gOBsh?%JoHZ(V>D;I0j^iLaaaot}LoIkUc#j8MO@WqVImWpvDTm3VkuqE-)!&BymzG+8( z6bLTSqoAeT`8dlC;XeGFAakl3W&h?R$=I`3?DRFZVOGvtdJGyJ;JICzp3r&BZ!DH1 zlP@I8wC-jZyWJ?K0?iWUXO?qo$y+Q<5RWrS(t}^G9`{D4HfFj1-Y6aWo8;o*1R4ID zxjysEGB-6@UN=sb((TPMyh5VPPfnE5#AizMN|Y%&ql9PCtN2rcu}#(Z+pfY2-VN0n zsj<7W2JJrj;-!`T)1~yIHX$Z)P=jG}e9>H^#>|R-SaV5(I)NIzU#mvfIn>&(Q{z4V zp0-|t`!9U4gMaQpKAeCmRt0J3iPb<~LxcPBWqxWR4k50^K-06+ZJX@I=1|b%m zcA2=)9X%TS(nE2Tf3`CpCqmC0Ha+^CipESwG&U?`KEW70Mvv8FS#kPuePU2tsC)bo zg$dL3SkaKW$PUypwxLILtsar-(Rf6RyWu%<*0cC^J8^yU{}1OxBO^N+VFUGO+KU`U zMl>QD^6o9D$16TVG}q!c-sg)4n{k9(PwzAn-s!lnXPNPm=k!1yu5H#s+0=HoZ%STy zvKga>F^@6BjPZS#3oz8otVU)_oHe8B0De5b)|0YHm}fF!>~bUI0)3ZD=@02f9b^$R z4C9QL$b0Il-N-Y7y7r00!<;7SK9Ya~JkRIa(QUgOXTN43zcFjAX_+ux&BQ(8EV>$Y z3>0E5ywe}AU=9z@k}KTr7uIKx^UOrq51Cj@op8_2c9?ihwyl?mbG)}75;rPGtmbZ- z9d#m@b8*#l?2W$T0n(oN$by)Uxoc@-ee z`JOUrtXghG(Hr)K+N?svd3}AQ^gusZ;qVdVfjScK-b)^bYouXgjSO2HD4*$1Y$G1h z;-9*5VzF9kTkA=?OiyVYtHib%?1!Tic-+z@ElVh2eBqM40SfpiawP9Qv6j90Qsz>w z^lGbs@AZ7y_ECxCA}(U^3aq-JgwGf17Y+HME=w$TTE6T#qd=WVC5jUR|4~SEJf#=0DeLxu zW*t_rZ(d1$qd~QB;=d6X*iVOwo5G;lMNQVoP!u~Cj)!qNDA%%{KORa?pbn>qnG~22 zj$NB{c(_If%T@9L8R5)wVOHGRFg)uYhKKugIJ-O)S?_glvG=)4&a@wUg4BY{WKcz* z?SnX;_v}mftN%87``JTmxNX4C9n4lFelWj@0n1byun6oy%TYH)uD%v|j^#%U7&eoc zKV=O#IL!dfWdkl=HDF%rIMlCC4mLLyDdi2gLT}o(%FLZu5{HUr1KJTw&@y*sOSS?2 zH8Fkzk*4L(`%voNy{9#CTy zWW&34?A^y%@rKz9UT!v|CDZdt?&t3-=@|FUie-nacox8{#j50ft6A}PW;)6~p}z4V zySIZb_*j}@su(otuh72fZuYdl5`WhEQh{Y{ML6?Iic>ZhXKqbYHtnz0Vt zyyQR-dF>xr#Jj3Eux~5-%a=}^tn9?MYzOitIM}CWBZeR2=H|qo_sm;jPyb~TKaPL5 z4tAjK3J1<~bfPN%FE!bTXY4K0lui^K$A9~q*>e64OgZu%PpEA?)|0%ur{ax~gktY1~q zX4{17xa=}{sD5pElBDz(F?0X4wYI)x!{f(}j9VQAnW{?=KC=?kfgRB}%fCz|QhVL$cA zub)yc@tmGkPxkRn>J)Hhh!79%v8i$RKAKv^Nz6p~6o*1j;tS3DuF;lA$b5yy1zH_fA_Q&FVdMt*_=ALRmeQ_yjXlgMNBPtf{Ul=fS zumP_9)IE+jpjom3%R3PRsBM7Pj&uy&$_&NFR&37U9++lD!);bfDqzFG_1tq~=pRnw zei~uLf)7@#J#NLSYt&D0@4Xyh!zk`O$0aMCa*vvO+UQT<{_&*lIFcI22KxjqtJ#Jaag)E}xpCUG(o4ClB|F*{GTHjGtou;&umWbYR9KxOcceONBVm zi2HR2_vi`kt+C~qr`q3vwZv*WuXf@|Q)*9+I`H8bb4e!gYw-JKt#e|M&H<7naM;|^ z>K`qc);qY`>9q^nT8?e4A6$F!!P8G~CR(I$pH`{G-dZGjw`KR3BEh}imkHi!7}P2v z@80R#-L|)=-`sS%U|Y52srOLJmJ=FF@2F5qDYgXhHM$3ns1ns`*{H9r`h96 zSyFFo@YGfNEkjggEYn)tu@oFrDXnY#9?ST%H7#p;rw1Q(BwN~)8GqWfCP8{yljPOU zcxgaBf6XV8c%&I+8T~#1XU%eZZi1wE8pZi6LE_ueLpC-=w!co2*k(o? zO=1MGNpcpL<=J7Q^jeuLn-f#yk9U%6qj%;>Gn4djH_C5%HlHjpOS9D}^1ZK77Sv;g z6*DA8MjGW4{i`{?Ch@A|htV~OQ;hS4;-?Q@cl1R)_Aw>;X^X#8`48k`_A zMkKOETyMtT9n2`DWrpH&)@!UAO+}M1@hY=4MzD_^NN&|^!sOy+ayDkf^W)l&Wv%F9 zCiiaUd{v;1v@_Km~lcs+MICuRf-We8)e7J!*=YA&qSX@_ND7G zv5|f2z;W~@FU!Q_0-5B0=!a>>T$W5b=BCr*)-n?(_<64CcHF&5%xnp3%`kf6JhSlp zGO-%sHEmC`US!R9No&V2elK(3EchB(j~4#F^QMz*4Mq3RU)EF#lKt&{CE%2=`1jFB zW^6&+`9t0NJ7xvwa%InL1v<}Rj>pk3Y@wHag(Cuom<4f}dbBU+!|*$nHOUO>#k;b; zm>h>CJTo7VL+`c7iY6zl^j_F-vapp|T;$P85o4vk!BXJ^PHlEzfQh*FY6mv;cOvn= zhqMdzkzHPX;<3YD))iLC{Kh`=X{G|XpB3oCd#wQPoBXBBOFE@M+>tOeHbvmpL;6QX zl9O8;j-%tlaHS$^qtsYtz#4Gbo!Y$>aky88HBkxXAhMq5a@Y#PL!P64^so1|;^Z_Z zjxNeZ^FdDd`I0wU#7vXV)N1ch$)f~~+@zPst5;$*4cRG^UphMXz`3*_)$)TA9pfqkFU);J{$EH2Oc}IwveARiC~^Oc}4$9~h3DUSW96Y{YJR4d~aJ z8vn0+jtKf!F7ocnXPwCRYFcj_#$Beil3JB&W2yVx$Xwq5V)PB1n4aUnibyA75}22* zXV#U6O6Gj`lMOmwnc^ELo2?CH$1`Ti{GdMOsuBlEGjD4fdCnOMw0!M`*goOV4(f|8 zws0Ko9L|iAa9lEl!8MP1BJx95bLr{fUEQck9CQK9Nb|74y^jqymNL`(r4`wCY^cHe z^2MEO9Bt^ph&xV{=WCNQlG!wTwu|Efq(Y8b>aFpWBj?zg82n^_GEjo}9`$s0$<#GU zjOY3(wc8DcCn=e69)`lcI$#;sG3yB%^AUs`V(J>M-B9vpgEt`eeH^@9%xH{?Ls8zh zalALD6|>=1mK8D7gJcywL+p+|nYP*Z#k=b(*YVyj)Q4QA2GuiJO3@o0Fg;oRq3&zg zO|$HXNRgK8wbKv#VN6XwO!=rm+hAXGP9>*aDF!KHc?K$CaD1E|X*c!gQjL8y&zOUw z>DNnT4&q_4>-`nV09_5RbZp5kQ#h`K_ zp64Fq@%daOoq9ZfPOZuV6SJQ=qhJrQ*gP|C%w<+UmKiNlvyfxRM3wc_Ve`3Op1+50 zJdb|zdsn2^A#RvL+wl=`r4VAw)T_MmH_2jCioCyTltauU@ZFXwK01?BPUdWhTwiQ+ zYH+4@IzWBHSA{n1utK|$*m>JwN^RV_WSLw)S*kZr zk>p~j^5{&mcKw9nGAm$7G~U^W zhq#%s;*S}%d7oUqXo3$pfFJG6@XN5HSWG6mj?Y5c6y5PxZ98B;Hsk;yf*kvO)}+wWV(~&Wx>3sZA+OoTa20 z4nEJ1LgYhMXX1N&yV7CiXlznN6z{S`+WBfcpLt zLOp`nD^UJg=r0f0f2}@C-Pb8M9B-_^ig z%=}Bs#*XH!U)Pf-9nXB&7lGm^5-4j%)5m#4Ee9(G%FI+|=RRcqO>hBpXU|oZoZ#KZ z3bf4#!}3?uz;_@&9utN)55h2UHRn1s=l6cdISh;9kbfc$E8a2NeHZ`Sm9;)K20iy! zG4iYx@%wF<&VRd9i5Z9msDCfa-jvVr^{5kP8hk*Z%bcgNBtX)A17!DNmH3tOllV2w=K()0_QCej{#5o%@Wo$5&=Gm+~gADdn8#>w$*N@&T z_8_fSI$=ERB)8#&YdL+7Wi|4qpGF=#g2at85n}1*xHP4)Z2C`g%4gW*<%WLaU2=h1 z_~(1wQ1x;c!cK-WcPt#%65)8eow?9I*^e4HAA=Z9gGO;^#Tw{~&4AmL9rK;|Y$oNHIEdymQSqfsS;z((R(C&S9o-G&L&SxPAr_<1ttfZcfMbD9*0v<3#(t4xG)-#@^rA(78LX zpnQrnW~NF(_B+i!n&r^=REc{??H)5Aa?{DT_S9ffDmB%InZ?4KgsKzBqqNoIBz1$m zCdJ^GgIH~IYQ6t9A*@{zvbUHqjy3q!-{gdNf9UH|dp4im9itsrt#+(YtwaV z2k)9?^c0?bG2|0@Ps9vVY6UY;a?vperEFO&S$Jw?h)GfU?lDe_p&e8wi!y_fLC zb*`bnA8K^YWbRFI=DHYS;9ffh_p+HQ%zESa2YS~&vd=of{Gy*`oS8?jz#(SoPv zcqaTxWZ~o4Oln9nu`Jt;iV?)fjeMU*DztOIkjrbP)SjKE&^}-d;!!9h62s4{-oci9)WmTS;(mmZyV$DoKl1|MI?piMF6o}8nf zW1|^6Ba*Ph$hxBwy&b{KT5&RO^at}k<6e|%+5PY)?MnKkNq9kvl8YO~aezz6h>CV7adu@XuB=(F!ZjdTh1?j}M25ky zFl+37R;UWmBX0JS?N9UMz|c@gngM^$w_<2D>c!X#+TZ+<)?a#~mLnEZUJ*;$l#O!l zJ>)fW%1T@f!SnCTechXmnx!3R8|^L&O6ADX<6)>YFBZ$A({cP(HX^or%BC^-5;u>2 z<7UL0&sp(!3BOKVZ}B;oCu3&o@Qrxe)^AoEzfBDHiLWfCuIlOne*GD-ICPSkw)d%b zJLoBS8}gY$ABvFD^gSK7!gDMA>>oVkK<#`vQ$&YZr(>~hGjZe14isssmg3>LQjD1W z&8@MxGLe|rUe4@!QCDVM`YkP*ha>a@{lyCU>fh0aRM10ecFvV%<`Crb3H@wn^_Yc5*d*v_W2>O4Wr(tB(b*|>_2|^N)h6xUt^ig z&%P?3-?yHMzIkY*f1na6g+g(OXYo64dh{C+U!EHv>$D0SEJNIrSfRZXvGF3zd)`ma zTtL258xaa~QD)YENkO+NV#A1rmtgO-gEW6JUwXf^`y`e=E{}O;qt$+(3Z2J<3(b8oFSArPl18SVHnnuwa%Y(EH`9h5&OB? z5iXgTPW)73fcvv_EbYqYY{k5b0M;+OdsqKsz##UC=amlT+-PK7&L6q_JRHZy#G!&S z9jcRDS7YnQ)MtMrH-a+(co#M*cLsM0FfW=sQol~WrN)XdRPW36M*ZoQD%n`|xQ6)O zaEURD+Wb&@1E~9ZT#7xOvaZ}FFLdEC^B;B_@Q`==Top3~j(CaN5Cz`#)gieKvmH8G zQHr{)+9T^r-Cy}~erp(RM6x!RX~lt3e4fqpn4Ha*=GNZmH=H@jrRf9d^Yn+{A$(80?LokLo@8A#{8qw>r>5h-=JM5AP!~;&9h@}^d@5@sMl7?y|g!}7c z1sw)8;OoQM;0k-k@<%;oH}RHsX(6~BM~u2N_w_CMRQ7txf0@-a=j*WkW-LxDq7KfF z`Iz^;WLixH+!}>qaW4aQF63+nVg^e_F*o5{uADW|4>FOtu9J!R?r>n?bx$#F%9SzB z5KJTnzNaO1&}XSLec&St)#TH9QfKGGybE1AyvK0C9Qm z#>F~*QpPV|!aGx^Ol*AT9?sy}LvF-TTf$qoq*Xy3^u)yrY$vxf)Pcs-$-Z`1z`bq= z%J7`I&iZU)ayH7ItReT;=1I$DI&5xhz?dRdto+JZ83WZ)_hG&iTq9K@vyjq{vRJ%Q%*ttnb{;&c;1E*k1t0L|JqvOm76R6KSHqe zt^rX|%pKtRA9~PR{+Y@3Nv!Hm73!A)U_<-hOWE1f&5(QL3DcW0U~>J|BG59=D9@NV;NE9Zp(yLB?!7S#cwPl7+Fnjo^MtSB*?7AxR4GWuL zy+nPYRiVwR6fY^mRB#LD^8^!@c*Hy))*~TZlcZa=H&$+pLa#PvJRWPuJ?bTAO-YbV zZYu0)!o0kx%q}WNUpaf=Z%q?rQ6^_vj?&{q6#LUJ%o_4y{@ROulFeBJ{`BA{ji&D4 z5dXad^ULTRxn}f1+2_p5TWG@SqjoH&kJCl%N3@EXiivv6Xl_QKiOfTssnCw8W0dM` z>1FM%M{a}($7+%1XB~As)-3C(BYV-282LT=SEKEiO+DR$%|VPpI~tzu7pXdb@oBV zBx2>ms9%^*y-AyRS*K-PApSHtU*EVN<<>)Bnd^Td#C+d%= zUn|E9@cALE+x})QRjvtlJ7%Cby&4Z~%>24T4=VeBlts*nBA%UTP-qhmF|(_J3QbRP zPSYzBrsZWoz0-xE4UF=!pavbsM*|g;@a$P8svUJ<+^v1`CD#u(=IHT^_|Dc|)KKhm z;a(MLXPz?q+#Zd;*jv2M$-pW<7v{8%m*COVg;k>t^qL7%b~D$KI;P(p_lbFp2DNH( z-pF?9r_wW!Nd0VDtWkDcQDJ9_9^0rBw5=xYK1QJ}$eAJc%cwbPjl9BgW~HCCqY>Yi znOrA^k}8z07mdwLsK-pSBlNQie?pB?;*Jmg1VuqhU0Vxc^Q!GGxF1fG&9hV}V%KA6 zFX~dM1JRyzA!k>D?4iD|>Rvs5M4FKGE&~gwU;EI~C`tV|bMkg-iT-4|5;&_GVW3aD}##d7lJRr#A0tG)ztt zTF2V4-iPbJCPO!UF|VRLcup_zCX*JlA@Sby!2m2=c^FT<>giPRA% zX274dw`wQ#aZQ=G7Rz;#Lfs!Rp7IM_SitA;kMu#aEzC;GBd^km97iRE_SVlt8U0#? zSFh*dS!Z%BTbbp+_0zAKNnS?#Fo$w3<~KGWcoO|f^xDqm`nkrO4$t?|__~GM&Q|;X za$0Y1-7Cv-RY;X+Tp<_px(M+luID~&jZ$)v8v6^=d-t!2S-f^Uq2CC5;wAYBHB&st zzGibj#@lgvAp5=ciL#13+9c|!&lfXeNI%XJxI!#5D_)Af_90%y^WiD=l^v+pW?kQ# zz4F%P%uiHsee&mBMU1W5D}`2b(j>L^@!V*`eN9X^yrmtNJ1Dfpa#E#V8_q&2LhTga zufpBg1Alj66m@xB8~Gq&aTL~2Kiju4UxzrJlPk=uKRHw9bredSFmXm7^U=5-LWjqT zVt@u$?@+(2Gof6a4CvJKY*$K@!f$-IAE{&AXF}QIe0|uH#11q{lZEW#mq%l7xEXF! zIirR8?!MF`KYOggpmv-O^vHx+Ettp8btU}xZ(JugcSNJ!CKEd9Ie#{gxaF02xx1PA z?$*&Lbkl^-I-c`|724pQd*$j}uAlaL6nA5u9P!3QHK;eNpD2Hpdn1tjUSqDGIW4G1 z=Ig)WSAvu(!EC+CoV{aYo?~VP993O-);L~*R6bbRfj)LSc{)D7=j(jjpkC6#^SO8{ zJ#M~azQ_t+@%6uKf|dKRI@jC( ztDdn>=;`2$ibGDX%+0Wz{I{!Rb410E5r|9TT=SvcyHrP{_u zryA`z-0H{dVyzDq85vym*Lus8;6s+srv*=+y5W5~r`q4G>@TiZRNl4I99~7!&fS|A zJc{dVO3P%ae90_GiI?(w66NJplawhyZrYe62dbIn3+L=K>y;$t8%C+}Bt=}4O;Tj8 zS$eGU&1W=UYg`{+XOMsG0A|d$r5|oB)5N><=E?ZIk(;LEWLb!XXrR$RW3c2@qQZYLC$(QIpsCfAP(jXK@D;257doAk5#9mkzAU0eJhqaGqL3 zsF<^JhnzJ(_hd!Z73s|AO(oCm;mFB%MY65c* z?o-eF-H!4N>_~2x30Eldb*MjVLi|HP{J!iUW^80;V#H*g>j!yf@jhPGh+MY9j!m`i zVNSa&bO^CyPq$2LnnmpII?t1Z{IkQ3Vi*SJZJDU@R00pL1OL3d3Mx8 zmRsO2C5zXW=D$2-Zq2$fw6DKBJE)QYV>HrYgolj2Qb+u3?$R;VU*^_oBpts7%Gfzx z()68|T$|}BJ-QP+S15qCE~z-uCAt5SYh@;5i+wJcmE)3=Nz_cu{Uas%B9|a2b$(N1Yb7kaaa-^KE@M8B5v3e_T;7hLbDXl=}JOy47 zfA(Zg)i=r|SA*zn4OXJ^d4B)J3M4oEBX?WnNe=te3CvEMxmmD%if_L3uR5{^IBLU4RnDE#?(dx*8f zq|j$pIuw=0>yR&;UEv5pk1g~HPT}mPOdaOd2*d4H)IClM#oGJqmEW;%I?Oq_bLd$k zr=qSFhtu7ujam_l3x^CS4bDJ_X6|A>y_MI#W{KrGWabQiMY6v!(qq~r!iu5njV6s}CSy)IG4*uxTV};^ea|Jpxk8zcQvy2>YXMcP3c{avR zVdlaE2j;Y=UU7>9$3JCrUKZzFRiy4Qin$pd-lKqq9?f+Q;9NFwbtlZZ)L>a1u$`q| zaTd8}FXlyUaG*VBn|ul)M-@m-)nNy&hdc0_eX9@g{&`Iu=s(Yar&}GE&YXTr0gVK_ zt}p&$RPv{)kDSo^NZVYER6FY@Pa4z}Be@Y*DV3C}?=AiF0|hTMGN87%SeALnlotM? z9_uYt26L9BkFPA<;wg)kxJ%AtAGtSx8pqv@By@ncJe{YO-$!doV0lkz*~D9}3{uP7 zjs9Zu^OEY*>PvLETK4ZFR&Z5;i;WbV$B`$M9e?Com>cQ`a83vReZ(&2BW2{ttJVr^ zE1oY?xtH2@cgav{6sIyX5D>+yo8x&eJfAJfwq-I9eU=P;BOWj<;*+Ro@kY`rSg2 z`CA9io18fvti!mBP&_FbibKUC5YUDHJ~0GALv;x7(_!=q;#=>jp)AP#_KsL4ap0i7 z%z>;!tieM6@Gt|iB8Zz5-T+5`=922;aD)46|5@r9xervw$k(kS{&U=bx}&Hi*2cj) zkn=8@8t{XA^f9raL7faZaWxj*>lyIiTr3*YU>*nm@An#JtcGyzm^Z(Nj#|k91`I1i z9b*`^8B?hxZb_c&EA=dm4Cq4*O_ym_>UnI;-?k!@8B`yqrepOzD>}8}><*O`GjvuQ z4P+K0F_j5Lx$lNsvEv*0r^8lU3r@$`p*HI6IXBwIeeyURZ=PE5*SB<(e#d>A&bc`J z+>XDj=-!WW@+PID!HINCpGzFOCV90ZHVpk~#fez@re|?aZgQY9@zQ^*anJniKstXn z7>L&dIB|DdHk_%%{wxmM{X-q%nQWYNIPm4BgBY&^y57t(nk7 z*Xdv>U;Uw_(%e3la^q?S&stkKt;VNSr|XREE$ z(bQ67Q8~-~$EM)x3#+8vsB_V>(|9BJ^D5t9@8wrdEZhFrGWLp(rA_|}mg#>VY}KYh zx8N!h@3pEnqIFvH_BoaczauPBktHmx21HoK54y_8jGvYo!4q3vEjj(f$q!#GjS@}r zh5Sc!+e9h|bm zd-!609deBcYG{Y5k=ISdj6G&}J6SJMAJVZUJ#AiUoKULqHC=^GyXcSM{EH3j^}J0Q zoXb;V?GhivrTM_?AoUyW)O5@wesO|WQJjicCbJ-yQA=sjW96|J*r-+b%v!NVb3Gac zMZ@ig9{ze}Sbd2`hrnnQzpF?65Mmkg$W@hz!K|xMxKfxpnT>i>b8-%K2lKaGFC%KtxOM#=9cY%6ER ziN(x$cJ`Bvkq+eojF<;sZk8%oRY(wnUG9PVqZHVn($*9+0o-J^SxOoHlAZg zEvp?v3T2{hiA?Nf4VpSE6T66W;JF<=Ggv$FExzTX=9LR7X`@0 zm;TI^Du_}m6xbZ7z!qj`&wZ>w3^gLJT5&iJ_GF&jhje5%W=4_1hDc)lk$0JQObyy~pAUFflyf_GI&me! zL2RX=Ox)@(@5u{2{^=*%TKLJ_c0MxXOrE$!6hNItZuq$(U*07vP`Ma05)XzmCng-7 z{^+o2QW*Ll2*a4c%;ex%+&wrBA6N64A`KYc+yHM6p7q%_c=Nn9Eg&!Q-HL?yXK?Kj zXHai;!go98Lsg~Ln$KZ+PfjV#iKO}Dp?-Nw_1pe3ZvtmZO>H3gW7P7tBr~KsC{UQ0 zCtZ0DUS=k;UnS~Pp6JkM9`7^eZQbn|2ImLfQ}Qy(O z)+Oc-_M~3VXodTebcF7s9;D3~6#nZ2_D~mBpSsVwC8z~iMt#b12Le8MOHY@VY#-q- z_m=xf_7{zebp*)oCQ1xFPVYjL8&FLNY3v4tn;ZJ_^%*lc98Z>#*VquoS(IT&_N8v` zAT|9(;?V6AIikk~jN|WD?oxX%)Ks2lJ(ohhA=ZYz)DK=~Z5P&wdW(b10Nc-*;H{k) zaf5osNb)Izn@CUhK$$IZ#nDDKUy$i5q&yN%@)@ylKsOlq-Dk`I;}@USUuFN5%OhoPV%Tk5W^aYu7pkZp8oA zGkL$Xb~j5$>MmxKW=&5Rw>ldvx?3yR{L1@$Ns zhPRn`yD^;2bCM;y8g-w?sFx{lK&qVQ zT{zB{xr>}{)J%har)W^UJbj$J>x!px?&BPKafy>hjEcc8HSwygdRPycP`N)}lit*; z4DbteCDkQoG*`Alia(v^CYCP&P2){A*$Zu_NeA7YKvo{rk(hp)ZWIP#PD z@d;nteeZ{aRrHKLqJHN)^OAX&E;*&ggiA5hsU^WmT=K#|&J694gxi`V{QH64PVxgy z-|-m^Q&;~o6L*GC^GSV(atFURwXm7p>0n-=5`iwTe~I6kboo^ z=a($aJ{Tq8JawKa8eA$uy^JU4a;LI(2xH#Xcs;<{VAN7Q+RbA2=r=v~YnkEEDhYRv zGMjM%v1;Nh0UgY^UN8ysPf*)*kZXrJ)byKntZGH?=iix}O`_0F;F=kuQ)-pO*{AZg z>9Udfrbb@U{gW5D;l{FOn!of6R>?AQjKkdMpFCa=4Hvm2u(}eHiYe*iQzE?$^@AI9 z2#yNFttnx|sW|JtS{Oe6LvD8j=Os=yAaH9OJoA`!!+YZp&%tl=t?=c!_^s3#H1M!t z@I4#$4B;$Z=Kb}o&kV#6C$^iN@XXCdy;P0djn~MD!a>qJvXR`r)IhFLL%60lXIA!f z$;1!^-k%_@(at45ausOf3P)PB4sUrT7E0G)=ocNbsUd9sgr29p%!hv$3tMXgjvq2G zqaqIafmT!xw;|}J6$3g^``(To!5U|<{~ERCiyauZ#)%))ci;2>fMz_ScmMJiMUe*5 z(uvgdr(El3{p3zQxO>38GYy8~~TIk=FyRBM!2dRc+IJ=6*^>knPSG4edKeaUZs zHR$jp!+;f~+3(m5c+Q?ExlJ4~IrdS(Htg=ga~U?Y+Ga(Ci@eVQIJ4n0XWxZ!rt>5x zmTl(T%cV{{EKJ?`jRsOp=_^Yj8Zc)$K-}YkWa--gxk8^phPx62uJAQkszm)uO5|7- zs5v77|MKpt^N{|xEZ*@edDk<$YvPJH3|!58n;yhVyyM_sYXfe2Y{1$wHu&}7>2b_Y4hnO9Tkwt_tC78$ z0`U6fhVA`wWsOzIxwvkq?ctJJT_WIBoY~Zmbo9LG_+CcfR3*M%tbc;?nAem*O~)SQ z+KW}V?r{a~Vv8E-a7vJC@TI8eRj2M95U+g+R}#GYsNXJQl`{G@mP z0QoeqvD9UT<*9Vep8lqi8w*&A{o;G1;S7_LoRM(PCEL>#_}7y-({~+qRqTtSX1-sS zId7zq4v$a7q51~uhsf0@w%LGAe6Osl<4`V@IhxetHtuV~#7WHd8e)UJsf}1L^ZAQ@ zKqBvWtB(_F3exY{p7RKoCrQsZ>dpHckod8wqWzpGeOjkT&089bIix|q8_d?IPtD#Z zHBg8+HTU*CBeP33QHvi+ogB}j%#%D9EoQt>GT*!yXA$PnXMTx3^eW7VC7#*-KDB7a ziGOnMFUn%JuRH5xa?VK7&P1xjq5weF%Q$jc!B-JAm*-LH$#_8 zt@+#}ESf{@po@8X8fNB>Cr7+76U}*7RC424xP@5|M&=8z=lnHlEEk+6k9e2bv@B}V zID>n~O_MAc!Z}XNXp}=Ka)+5Roos5%U+M>Ejt1R2Q$JXhnEFTN5N1Z>RKaMJtQLbs zo-tTilR1q&^*Ftf**3432TweC`7QeG6OwS@uOw8?&BT_c%=a6S31bgx_c~{xgenv7 zcqaFvUN4Qlg+q;aF7iy=yIP^$m7FYHW+Zc#;C?yu(Ihu^BuSPzSyFAj_*jO0+CJ7D zi!`9O7Jb>< zD|dsLCw!keLF#T2UT5QbO)ojzfqK1Wq3Cj*o}@_PLY~=Z8tW~SYyFXH8$7MiiW@vMq)BsiOwGvRL7EpBRmgzbsGs zBN^92q1#J+pNAD|Ts$N8SLa-b9BDm7hZn5bPj;hDuz~}{!|KSV?=ItflD1o+ zzRPp8VSOt$7l`k3T<&8T#uCADC{W%t@%>FawzWb zj&E#8$56g6`V>V^dA0` zeWjJROR_pLuk8%`ZaaI)OAcfVV}8FjN4}Gj*f^0`rmq!t{=E7?Pgy+8C3RCnnc2wR zW?ni1r}OzU)G}dGzU<=rvb{C=2I|yO*<-~#@E1L~n@ykT|DaASlHYgZe?M<~m5j>F zlfm6WFq!#!x5xzyWIr~1ho^)wL!wAl2ux$CJFCw=j`#1K7HT=OGDrIE48^Wv1{j-J zG0u>U8w=`*W{pe6aa}EM9gCIysR#T?zw~;wd zd5t(5#=V|gsG2LoRu5SUglFSUa$Q-k z&6Q=*p*WC6j)nc;*&*3@YW0<}2I>ua^@gq^ed}B&_DFga`npT4qPg<&Z|YrtWu zeHO$*3w`#H+{{1ns4IW2=JaB4{k$c9`aZR`{Ho7+mn5QRm8(vr$e!TwTG{_l)A{?IF{Mdh{f%boD0P7+c2u0EFY6A z)3$`7wY%Yexvphq5(A#(Ek{1)$$~Lq*w3FgOlL*8ZtrpLL0!4PeY%Quq~{*yY!0(x ztdsiXNN)*#>5@-HIUm`VIgh8Us2b?NDekY0e4dIq%#D3b48W9*bspI`J&ZN<>U^n0 z-T)O?d$wc>Lv}W1p7jtV`3j9M^{rD`pYKaY(>I(8)UJ+9oRKSuA30wkpZdNtX*ff? zde8zdF;fqCS(qadPmJD+oYPctM$|Q5OI2WyS15*Tj)jqY)-qzy#s15on8H~OJwoxL zya5Bkt(fw6Hn|~hnK#NMkvSpopFj>EF&zc&WW(CcQ_Oq+NGs+qOpY-id?9mG#}MBx z;v?>VawUFdC?00<^6Y*~j5D@#v*XX-BJ=ElWSRZG6Zjo2At-48&i|BJHFMEdwiV}9`?cJ^~^XaYK7~C1OFte zWrOpl{7MVOJcR+Cb*zYZL7j4NU2*u6JAEF4E!C*YEr!iUlskC`J5{)LUb_RVU|N_8?L@2S5Ple zI&ASlSNCY@1E^~YWnMD%GRw#BlPP;tC`nBC^)vG1Ui4Sjqdv~DPoC9Rq1Qa(wXAto zf6TzjUJ7jidKrD0s~D6_ofqqmCnf0FzU{(@-NY?6s4?k$6h>4}LU=3Y&`~#6b7i9J z{N;nwv!hUdv=Nnta9%Kb!&;$cIX%W3joRqRvvLkWIqKSmu|C0Gaqd>3jyVd)Y$jZ< zO@AZxL^CsuvSyYKzPw^?+68(w-`Ej#IUfzuiQl(jPTYGvI;zd6+a&|%D%00ToZdi8 zB8;`bP4=!ysTn9xRG|$^Is#gZK zEps8pmMG);tMP9adNddR=drgVsJlXYr=n5xPubfSkHJztf7e$TXg)!q^`&kuU?j7t zD(dlJzlnDV^JSG&rE{nW+0m_Qw+ zE(XQI>CxXxk0JG>1!tN>(_D?Q9reg7L!HqS>iE)Jxb)sAGwP{PXmm8zyNF$N$Y54A zJvc3rMAcV~CxxT2lJ8^ta68^5x#01MKkt1X)OXPL8UAFS9O&+Yzzb1`szfa80dqnl7223w zK0o!jtD~dg_+vsZu7}yIMT=#|%ZD5vY@_bQtuJ%AhEey*{$@fS@Tu3r ziOS?$5bF4lAcGsI5tsP?k@nS5ZEoAQNvXTLAVrb@73wYRnyI@$fO<=N>h1=Fx+_w5 zBm#9O5U9Hms8F}lK;4VIdGBw$_r`etzB>k^=LSeZzWwdJ)?8CUaf>}v{ASjdvzc=p z7cafLyJIZpBzYT+2=b(#AbDOck+EW&=!O%EsjsbR!lla8ijC#<3OOKO$fHco3B|(Y z#H40%{f8;E4=%*Xt9vR;xl4ZB7J7nJBIdn7_jCB!_;Bi|L=ZkUUwX zkva(v_>eDLsS5Q)lWmxrLBGhj{W6^E*{5R|n)7vsFC-t3yx<$=SXp05jp_Cf zJue-LE*GL#>Otuk#TgWPpiX<}A5nyUg^>klt}@A*01x^*g`rt7os=)Miz%_Fyo;f4Ps5$GTVkx6&2cluNY)~ zt{PT7^-Y}rG%rYpofz5hs5qJ3Mumn)nRg#e-$@7Zb#4~IG(AS1Tp?!pA(Wm3MqItl z-0-sGrPhj-Pj^(<8L!7k^64h=zSFUf8;Kaf3=PJfPw{g8gt~6Bf@Q1{tl;9#+T62G(%JaE5t7)Ei%cCi8d6SaJw#(0@%r_b+cdgHk> zpM4$kqsjBF&gZZCh~9b~!mvz5e-cmTCX`lah2f(|MMBM7Phst=`zl@%8JaS zj6^3(?-LK&wSU~xGUU=BU!6W7sr-W9mY~RimWFk&`+lrZKY68YMAF{THp{{y|0ZR2 z?$mZ+>4la{chW5<%O7a}`+lb7Rmpef7Jo06{A%?|%hWf;+OIoO#Ztfh#-zc2KUm(T zeYGTJQ4gN+xlmN9yNBvC_Y%S!(jWd%{eG@imNcal1(t%r?>5 zFJ9(vBF}v&XWT6ea_4Kj^b6tr_KBXiX|a;aGcv3~jASmOuj3wrgwHU@h2us!aw=AK z4Pd5V1*44Js(~x_otE@ozQ0P1>NPa5s>v(u;|b$-dNG1oRg1}AoK6qj0&)|ZF)z@E zKD#`7gD>#Dvk^}Y^}r5#&i-^DC$T3rke|s}+(E8>kOpDA*Ivz`=MMdOKKCV$UZ+8E z-mk73=-*g^{Kg~9oPOeo(YrMG_a*C*iD3xYM2zaCo_;&@RxQnWGS4vYXg!oa>A_k{ z56`#s*m2h5dL=!1P+|B`QIE98p%``{47pBv{HPR;0w-o{kdHW}kshNr5Z_+FS@xVz z>X<{}QH)skV?D8ya9mkOjc8C9HZRko25X*g#ODv3U}m*T7&>@x?;yT%^ST)a!p(4d zVZ@dx^u$?WgnLC3f->n}y~u=RW+RrW%}8#@d_m$M9fQqCy~_;hIVQa6!;Jb?oMZ3e ztebVytyAPEcIWrFm!CXkLNb5eV;p&rZTWN2FdMa zJLGJJS8xVgezKO@OFwESa<13fP^ToZvAdifbH+62cLq*rZOG^S`I~!2-y@muq24yV zQwElBj^K1L6X%Jcg^&~JXkjhFb8;7Js@x|wL=WNInvXp%%lxGZ8HnD*z3VyokvmvZ z9LM0BBxk<&FUZQE`D)mF0C6l_Q0VDaCu25Pk71)zh zAf1_wd#*hF;(8Uxp03njO)8Z1NCozT$vRZ4+eBc7}*tHgjE z`O^MWp#-&~4y%O%*NZ6VZBiiL+9?sapIj~CyKWu|45`g|0X1K7#h5MkvOvP=Be!t4 z0xlgDSeVRNxFa9S^hdAdoTvJ-54_`t=;QwA97K(qRfnvjoN+42XWUG0w-|q%=|dkl z_BRQC{INw9z?>R?be}=aRDVCr*~koP3-h9O2H@&hdi4i0Yub%IK^4i%Ivm zB(f?;VZplyc+RGGTr&Ib<@|m2&)p;nKb^?m>JovVYEg)p!nr_s>gHfS%Ck4sxh`Fz^qRmX^)jp@*t~q%S3hEe_=3wYVJF*IyO^{75h%7!y?6uez8;Jew z$;P&HJNl_|FqgmAOr4Fy_u07cm)|>J$H<%6a8YQ888?y=i7J^tL@jfBc*&DdF5;nV zD$}nulzVr`<#lA%GqyM4xYkvAK2u2;^P{sb zxXSiYE^;ujsjOVtyB60=_9OY=R%bM`2(ZXENw{wz!%~H-#c%Rze7Krct0ttRnAk7x$$+cev^671% zY+R?rpjQPlQO6m}LIr%26fh1fkhj|un8^D{(JKJIj|bojHHyXW1fXP)4v8ZIunGQ{ z)WaVmeRU|Z${(di^06w+i{WF>#s@H;YQTRzr2_Wp;8fEe1AY8apSa1tXsC%45k5vc0wuKoh`NUm`p%m6(ZnQQUKE!et z^Pcf^j70mR?B82a%Q-I!x!%MQiQ76|CGVwuB(|O>wo;ECB=4Ca7DR5tFlJJmBj5L1 zB!c<%dltP=|D_jWF>-{5ko!0-5|~KbqFogJ)pHg(h@Kb;^ustyj$=pac!hlAIlMP} z@G;_S6UV0_ZFwqZ_SDZSQ&Hj*^CE~*g_Y)7C!ggYJx+=f8$7s>-Xd8ks8cQ#7fX`I zQDBAFJuA|WrDDl3em~g?3`s>XM=P@GlNZyQcwZmR@Q4?UqjtDFRgJeUrC>kr%@>^U z%_dIh#~Iek7vxTsOu>NVydP&Udn}F`R~z{Wej;`{!lOS?&Rms-{>m}&WQ`&V1ij+kUB*PK%0J9w>E58%8Baz$vq|Z)TJODe*F@NP^7R zL~S4Ivo<<{3k`BFMT z6v1Zc??G=ybDUgQl|W6QS&lle2G5U`lw)yHE1&wYal{bz#))6E1euyn-^L|IF(eq} z#G_c^!5;X1fwMASdTwX4_B%k#!jCzjuQ)TSqDDg(HOhFaVCVOoXAyU?s8D988eKkX zQ0uxH<)^ARYw#eqUWIol)VP$T7Z&k{rQV!L{_6?#W;N1RYjAIYhWvOH&M)NGIt_*| z_QVS(4f)GnC{@oB&8efw=f6eRPt3YY53eSAYW_lq(Xt*SmSml$M|0MSk(a^{Uzc8r zC8>3ZptmAtW-ZOk#&qC(@jP`e)Wa?2?`rt-M_ZB4Q#Kquy_g+f3q@;U7FUUfseA7odJO#(isZa-M6rKs!yY|hZzz604#V!_Cd}qc?#BZI?rtNl#G0>1 zJiWDJsdX)5hUJVArnZ->n=tab5iz&e*A6$L z*gkqTR$?zj+-dC{YU}=`pUYPxvNjp9ygB`*nv)+nlyk^56MDKB@w^E2q`Qqc#@C8g z5V!Fom*#l}ihpI6W(@N*I?&IXe8fT9nQM1A16NqvZ8*p}l0BbYn}KJgGBJ;jB@Sjy zxSM&hi!*U>mJJQtW?L9J; zO8zF^V585soqWg5w*SLt-0a*~jO&=qo8~SjS81dLxrDbk<8mpjM4dnd`h_SkG`CR7 zv;OjV!hGfUK=ip5fQ~f>p@w@9o@WN)^^QP#Ek-eOjeB1<{TYc@7v&87YjbkOf3k*{ zlL~X6RP_48nNLHW@sEi?tFlpPbq>;3@=WHLedjzq2z+x8V!-(5AZsJ#&Gp_?-*ftO=Ytzeja}=fy zi^AzGQLHVZi0yF?e@AZl0oE3$xi8jC!>7Ymq`9Y}OdWbhbKiUXhV!)6InWXxkFC!7 zU<|!vQ=7={d~eBcQAuU;2m5qU%dbh!@^Fw6qcZYjB+c)_1$3la0fH@XigMbex!chF%@q(gEM8Ok~dFo$PLy@ zZp5rFvhKJ{PB?3tiX(C`s0DMdi+{j^>OSK8Q6nF}X{0SPqQ(V#${CeLes@>k&3yVM zFIJ-G>LLh_D3BV{ieT!RKosrG45l9e7)Rf&J1qmLsU_d?F}GPAi|I3jW zVdB|$i}hS1aveNVvF>atM&$5JnMG`UI{Az5=-XS!4AB?ai1sEnpFv-TJB{RLq?`13 z>LtUkwve%op0fD8r#M|Jlol=M5lIe)jl7U~2@d$#NP#Eefmp2%z*yG4l{N-plR5x< z4+SEgHR;qR}>o(*xF;ompQx(kpuu`LCVG zCvqc4h1crUJDxRDG;-sim+T+wAvagK$>c98@%Y(ThO$R+%2#5=a|Jy0N(9@K7`Z@+ zedhw;dy*bkr-JZrgMs+HjC0pgIyB}CF?eefZgLGZ=@x}gzLBV#5QT}0Q_+eX&*o23 zQH`I?kiltqTa7jHnrz%F!+a|>J&ZX=IY*w;zJ2sTsbP}S^slSkJYKrHnWe}JgD8nB z)NHQ7OYXUqlF2vk>`6~?Z)huM;8Cc@r!aE9bII=xq`%dgaEvO#d;;!48@c}^wlHJk zUV6!%p#SR*;)Ud2Eb+?3(mBLsT4!Jy@A)@xnHfxuUeoWy@5wV5--~ksYM8qbFMaCD z*KZgv-Dby&+Se#W4;UppJ6^u`@Pvzn8phsU_@HfsSqGTy+){;RzTtQr9ge5d=}WXZ z47Q%kRcN4xGkf973rz5{(l?3yZ{9ENncPD|8*p#)WiLBC6E*nWTK6M2C5=5Vu`|m) zg|;Ozx^;D#14AtN^Ct2vi_mLur&)%O>lx&nAg3-fM`gZID!G$S5TM57isa&_d&2RB z26r4aP;k$mF+Utb?$MudgC5mdhocwqg~1cZIX`T~fy4A1{A0$)T4wzIX@cuaa=giL zSe9%eU{ds5;=S9vhXO=ftz%B1gVG2Uc;@I5yvx`zE&PX!*tDbe7p0?B_BNdKHC>l1Vc z$_qpTatOmz1IhUgfIf^l*!huoKA(QIwWCm)=hjYs9Un|T_=~9+$^E$wJz=*vq+v`m z_RSxdJAEM=<#qHPd`0aM_v&@5(OnGmM!f7Tt6dsN`R<;Qo9-gF?l+Pa``zVNav?PW zg>s&}y{*JsYSmKWN^qgPcMHVgvjOO_mp+j{1IRZB!1!-|2qu3qn`hX-B=$8AqwuXN z_vg`(_|lJ`N8eQJV6W2UBE6!7y+tQ#1#0AA$TRu@mB_&xZ4Npf&&J*y?$0;9#rGd? z=|JDXUF4shF=_-c9#UMVL^tls-oJ`qNi6Xn_LnJ}c%~KT;CxSqokN1Km^m5?%LQV^ zd1mPqaDV2$+&zLGSpB0ghv)s1_B`kRNuw4a6;D}fj6KY=b!{r1g;FC{B?nH$$Z2ew zgUs2?YPe1=!`2)u+TkWk70fJ&R*U=TmXi8jEnA`+OVfJPz}};`r?V0{(F*n}_MeYf_gthl;0^1bH<1`$k3Nn4s9|7^;r#h&DF4}t z3*-$hKE$=t-imp|7OL>P>P9`+RweTodA^srN1vWI?oyn7qvsxLuY)J49F7}vn4#R?4DD9xg*aClUDCwb-G~Xb=v&@|Gmd}^?(fX5QDtHa@Aq=2 zcy3*%pK!WDTScMNR^b01Xj5plKFqsHV}@J%1bLz2?0W-q)h@?M%~PK6{pbbL4-Jm5 zrLS-=HBPZ7+HR+}-^y?_Js6HL)55Xwsh%3GP_)sR(T_F!tSCp5w33mgHV-exT51D(GMG*eEmim}JfugE+NJ zkP2Fp40BAB>YTl-9m7^)g}onF;rOnK;V5@KPzIR!LstPx`~y z=kmRHDYQ4mET={qC03mv_iM7B{F@+q=v{JcswY;jQ)3%zjQ{xQbUo*V=XaThy<3mh zoB8_MaBNA}qtO68h6L-OElscEh2#??^56dSJa#2F|GW`8>J?s%rY65`1}5`bMO@`s z+9Lzy3KZHi{izM$Os(2)h4upYUZ_`C<(w$9=O&1aJp3B34$02*N9em^mbXhe)7Ywk z!yZr6W&U;5ZJak$_C!zmA3o0x$DT{{_3RXmHYs6vG?jCKWeFH&qeg8IeT6H~55FOM zDb0)5+Gx6mJXI2w3@u?_#p1qv)9#m-0l~!t>-BoDSJTLx|hq}DKNhTCE zN~uZ)sYUPOErsOfIvtg-56G!3O+IC|28E$qKV!JQ*OJdjzUP{~dh9tBjyj*{H~%qGfhmu5=vABy?rK?Htw3ayAAXl$Uh~ov zRJp*6nf2snaew-@$PX2_MbN7(1*eFImKx(MEx5POZb>cv03uV)yIBHXxNutVlN01`l~UT!D=| zLzeS>J{(AV%EgX1Yn-I*0rCVhh~XLNOE@qEUnbd6ceArJwB*b7mCRb%#Qx}3GL8~| z`eRVZ+A9U(bV7$p{`7@>k&MgF?1)WkC})}#%8-tJ*cVJZk9+;|p4rH{;wm0B@}2k$f@k;|EtoVB>b;V?4tx$JEk$PJwu{XRDVLfuY>5cl@+t zS`X$?5mPPmi~a*e$WsgEURg66_~9nIcI8UYYJW^1Ca)*IugMDHUi%%T)~Et;-RO^w zha!;MGX*EF65l%GD7g&^#Iw9VYVV9hpY6%04r0+c&N8nUan`QPWuDLHaZJU^q-=cV z9A)>_LMhXbe91HH&6-jd$mYqeB5n5nmeXASTPrhndlGrRSL|qhl-?b|3iKJl=h+g8Rijfdmd`U`XFX}_ zu0ZE%0qDTl$FpDbqYTVOlG0616Kj}e^@Fu8d-j$on3qJ{GT%wcJ^w37vzXDw%K_li(Pw|ko4e4unnfINJJl4CsFV53nuajE5evrp^Mh6Xfb|a@# z|H%8R{WZQW^Mbd`q^^|f(~}r-cVenp)f>vhx%6Fq=7+QVyYlia&i{I$9gNZ-bw z2(BM^VOEop`wsGvStpl?_K=FFa^-}L z-UhtB=a!M5ILD4Y+tl)UwE`^~_~YtrUSH0JN=Mk~tL`R!p5;nwXXc5M4`^A=nUgE| zq?;ScB=Qq`^weR~NaF9im=Au|j<)uOGN&E0rB?c*WK+(%dXpbIJR9}-J{K*_7w6Od zDC9n)Ab#-vAFkWs&QfGqzC12Uo-#iluOn9U@67eNTO&1Z{FO6#0r)YO{KslmG~)g+ zk~0_&)?0Hc1`!93fZb%p=o!p+-t8_1KLwU8VxE+qx>;x9U26Jux~Qe+pWpI?`^=`> zynpA?>tii-j_eJ(uP^_$-*2Dhr;k@n$Ys9Ha_7#K3 ztJU(p-WGtr?vZ%l!#aDmow^3{XVZSm^l%-@_KC!uF{~*=ImbHQP$m?ie}#^9a|vcl zJWWCMlkaijzLTVJKM$#@L+GRkD0u(=-9_Fm_p1ea^TgGK{<$l;Z*W~XwaUiB9o3}& z^gNl)^TMwTXNmsw9Z9z1rK_`;PvlGT2|x7Yb+1{8vj(Fb`-zKht*6FYtsc2kr~{vz zj@{(%RA#N_9z@?pdLjL~WW+`f8;W-#Kjnx~dR|c@@=z!qk1h8Rg8FT%-*zHjx(znj7tI(a~zn3EpPk&F6XDm;F6) z>#Ns|_`#n)w7U>psu|_^UKOg>qvmA2i8X-@{ofbjT5h}y>O%iJCG#P&jo4b7xrpqS z>qZ;p_YW1m(#P$786#G&q9(5@`EF&*vaYd)wH|$-4jQ0{r*|{|t}YMgldx3<-^t7u zE>A82aoWFC6xy0K<0ZJVJI)*mLz5BY6&AB$?~+39Pciagg&Hr&wWvbwLFXd$E1aRw z-YsvIn5QcI`)XXa>cx8Y$WK0Y*7j`(?CvorY= zHI3*}k=c-}O?33?ioB{qy(4;<8yRuJi+Qg-iPQMdSCLtuUA8k<+Qo!9rRmSe8gIa% zIMMXuyum#bwTKCo_{Qhisn8z1YLuK;9`qlfKV44~yj?P|cep}ppx0N>EDb&7=z&#_ z{0Z=V?jnzAkU>;;HTVoYdc8E_MQ0ljtI+0LjTgs24X(M+FDrz4%;`2%n6J=w@`#o3 zMm4?OsAo+vQP;`b3u0cf%^<%A(a(!BfZY8?=7=!&i0f_X<5+1sONDBwp~Nrg7kSsl z+&6`G-jX;u=B`H0Aw71tB>phZMjlup+N_I{p=(sQdM^wkZjo1VEFHIby`Jo+&tNYP zOfrR`Kur&Xem1;f-P?uv-Kj2WoZJ?Q6+3x-HDod}Ka?nHVo#Rr zP}H{?;Xj%A6}-N$Ud2g|95q5JQ1g7(fNM$V7}1aZm0|Hxa=Qv2t1_Qs81sTB+we|R z$V?rh1e9Y|*E#Zt`x`OQNPcKHg?4h(L3#g7gV;CpDC@>`m~VsQ;X;H~HA#`<9?;d& zGaH9<4;A?=e7w7o`Px|;9QqiFuFDK?IFOFfj|wrcb(|C|Rbd7_%hJ3#JK?&Geo%;% zvIe=gjq9YE9+PU3Z+OUt&ZBs}Hphs9pU;3PeQu8jS7QX zHTs3zRkwaVPYk5jfzi0Z8Zb-*SvqD>& zJmp@zFBbFu-B-?tgtqBWu2pDL+Q&)mN_SM@{BW8umpq0%cRo+j)L2~ zZ5D~s?y|NFoH_y7ODkN@X){?o&itZ>w_XXcRP;*Z*#dswZvZ`XTElO8P} zYzh57(=zvdmc?~a(WJ`bu3G{>lubVAYDx-qyl2_G(K-33_ZZ9WTJ@6(XWuwib;vi% z-i5W3o9$a^30N|@UHjoz&Mh45ncPP4ASu0xi?4B6>E!YAuO`*bOHFbg{l<5G>14~S z8aLWaDs{lpsq6iA8?}$xecKt)cEPmyN$u1JrQVr1v6qh%YncS;PCw78+l+FZzPz7S zbFZpNPaK}XYk!%=K&@fBVhK{Kkx_Q7iIduk<3*WA-^N)+ImSLYooC&fI|pP(<3tJI zSNnO1@^BZ=#Y6EjXG4O_jxo!nA;j$I^*G;&{KX-0vi)t0TpDbWeu42)zp+^~$J8h~ zg#L+r)mYJAjeoxJnsJ{VOz)hu7;+c`IB#yEf~krp7S~YYS|@rmJM+Bf+Sxr=gPQ@K z2(QD;D4t~wS!$e5BbR-p7hYFqhJ8m3vf8LICWABWVDcUtY2bL4`hK31Ku8|3E#whU;O<4a1v<lsbCP*l#OpXw}f6zl3ynR~O&MxSVE5YoDbBj!B6Pp)Ko zR0y2=vaVRIM|s{K$1^w&XFXw9Ms35IFk=7AyXt9%x}+JWw{d3i%79=eBkJ5Y0{7|1 zV=>}cX){v3(5K-N@rJcVYju^u z^L)sU_9Q;^%LWDa(o@+se9>~x_NQOLpbWU~vf)#4W)N}~@|ZQ(d18SBLb>OL^R-Xg zaE9mQ^gHPozs6m@-Kj55UmD5|@)SQf&@Y`{is3gJ$c=!8@;*f^I?hGCiQ{hjsh0kw zG&0WWCJwupqu{KPvjbg4rFWC&gWcuJS0@=z%U!1RZYnb}ykvWbhYZ}R5sPnqIr~e+ zTy>31e(NkgI#*dX&`qva^pJ?3ZZha!Z>d|!T{e2Ti>?E8_tV(7A5>uA_X5$9J5_zO z67!E1NHq0{f$UiW{>_t5{h8lqQ{W(d;6{I^-fDBcoFK>X=hs5&!I=BgT7g#NKknu8 zWy%A0>!w`%GZZFpC}ww{-M5)M51jKlYvh*j$F5^ko7t z@xDJQ(i`%LU59SZ{qePv|9>+UmdDZOKQ971`bUt`{4{K7i(tvKOnMb&?p=dhjHutf43?@$}N+loG`tvLUQ`4!DmFzb>P!M^lt zuv+2T^FLZ%D<1IYeJ1i}W)o8%$hpHqYG;YFzwE^4X5W33y{pp~D-NVs@wOg4=k}#w z@zM7%_-2y}%o+OGY|NQOjuiX7C8e|J18B#&-^`TWVn@?+w1EGMRUio~g<+8KI2z!GN`OtRx!7_L3=N`w5qXGEblGnD=F}>nF2Sz zEAaM>0**Tir0$%*61+@-wT+e7T1J6cp9*9Bg!JVJr)g#}`q zp@1`ajvC&NjyDRWdq|-qR^vRdJ#~8X3MKA3`Nqt9ubjpEuS&k`KFRy}R-Po-^Cdb$ ziP3G8^gSZ)WE}5T-vKb%IQ#kHk2+O|S;p!x{-Zy3b~&? zPwADhjeR}u=|1IyQ2H9Rw#@7BAMB5A)%-EBg$~a(QK++v_fiRBbec#c6LWn;PU7xq zk+{v7STO%BX(ApJAA#MR)%E!riH4UWVRR(tmzmO010qmkCUZo1zYQzOEH4}H6%~1l zYa&rSm-o^d`h}d0L`yGnA-7XcS}_W7p;6fOAOiESh8BZmnr7jhRV(5eRAq9q}R(zO9&cy<9Lk1CdZD2)( ztQ553{WX+0NP0NAj)I{S0SpT>H1L(07XXXhAuC?aXGT zfgQiPk~{3f3>p5+gErK@&(6jMVqi5}GIx*P58s%L9a(m?Yfc=hLJsyvlK)8l$qBn1 z*H=Ir!Dv9 zb+jBf*V{5`z{8}7iF!+efqN`qCbdsWgk?(ChL%MG2V1ghu4tF{B;2>iF^Be}H`YlW z(Wy_8IV?Hp_T5ds?+X|CuAd)dIsGP1njbaDi!%nP*wP@;l?`&-iJBqiTAW;DmVx!+ zWn^5ONNei5tZ}kDI8HkDh>_l3j8cW%k$rdR|2^Qa+_@hw#i*e&*vJJCer@8s&>Sxx zse6e$$t>%6hov<=t5y(4X>W>?=+~?%H^)l1k#RE1Y?f)WV@0Ph%0I>F5A|7%rhPe| z@>C(>g9pylW(G9pFoW6uoS}EO=`FpzEgI;rs*%B(FIc6);acoz{;JTYf(k3^YH**= zQSF)ng+j%lK^mEwP3%~ zk(#?)4=gRO$IL~cC`E0G-_kH*M|!*n(Bsb)au&ncJFq5vOV91ap<&E+rFKk74&#?F z1kR!N*SRo!ZonF^nH~$W*iSE@wvznENp_wqTqum(MHlA1gIOsU@N(e@B8cxb@l14c+y8`d~*4%pjE8 zDV2fxS=11&q^CA}-6cQi)%}!M-!$SZ-!rgciVdy{_}IV<_>^UDZcB$tKW26uWNyJG z`YS%pU_LHA9A8m)xygnxA2YCYE-{Y1%m=y2OzPz}-kan{*5~(zWFUJgGvUf-&^y`2 zx$*zyGakL{BQNT!#qEbXeM3Fu>@2l7_WtA2_akQq^! zbu|*>8q*^;)rwc#OD~p5LyvB(NxCzWvbzr*z!{tJ0U!w@l_awiPy#AUk74UWsK(8e_taTZPhG*yv z92|g8JkyMO=xuO@`+saCo)X6{)`;2@)_23tSgC2X;zw306x^d-e$yW%jx)tU*%+9e zjWU_pc=3_G(3v^NYr(qbHu;o2RgwbwR|YY=>kH>_7AG0RGkVfpp8F#e82OBTTLA^K zVxWTOFMW%52BOZLAT&)5!k#|N$mDgakrIg$)uYg93$NGaDEv6UET%dCGmom)HkCPy z)R+ur7B_3Of@-O#V$8AVoU*(U$w&!x?(arWXEuSonXrjUib^WH&VxuabLH)z$1(yE5xz0Qrj#>BmS+xbkv^Hi{UP z=CnfF`7!x$^sMyQYLM6TwkkrL#IV3D3(22ff1009H7|5~LEph@o>=SWiI#qPC|>JP zSY!ROK_tnfjWM0KA zPek~5VZkM4G7Z$=K!_fblgMKXrO%cv9Cya?Ji9?I|7e~!!~wrfH_;1#9E`8Lepkpp zeN8?)_v5Hm%rLD=E(rCD=SNZVK8rkutMt?)XE2D|hw_W53I7l8^FxB{f0ZcL^3C#W zMFO)J%`%KQ)9Fdfl;L$coJOyPdHm|5Mmyp(nbZhW+0XUUD;%5oxhzod+T}Cz`L_w` z^=33{VaBy1X6R0s@Gzfv;R9wy{3RE@+5>#!`uV;h10P0`LrBg=eNUzKgO%CN^_ALy zvPx~YNWMqM1bO@Os1%$c1{PwLmzz1iaWTr@Ku@d>@}LSRZ8uhdDNeCcJpEp=PrX4+D!vFPw{Cg7h@XB-ilr_)=rP%3XNp4dt+%+$pOKk z%z;xY(fg+obG7{M?$k{#(-E`L;gn|(ZciaU?i0Dx4+HRc4)5*Zc@ShA=;92A91b)vCT%^sS)^|^E_JwBL)r%1&?ixnGqcG~-pmyu3= z5OVOI=h^4d*+{78DvPIj$koyFLg@W*h7D0kKLSk3XY9rNCQ_H7}QKwyEc`a5MoY+ZgQ-E znT9!$dh6w5v&ekJ$uaXW&$erjL#q<0QeU3Lp;nk@q zjN$pUXhkIU?y#b~iQJDZsW|%6iovI?xcbS8P*-|7HK%vwPLH(b|c;}+LT zpTRlsn!~P+GsJNEA7;+r5cSfWA?nv}J$oJzDO|ByQ-qZ9Cis8AQkc!E5 z=rL@!VtbKP9NR{ZtcD*@dqp;?Y@zSyRn}#%$&r~szt0ATWu(J@GP3B0!d|BC63$7iy}eXizki{VN2CXJMXC3~T$#1;+_UfA-M3CE_Rdn z&c5_4Ayw_Z=S@JJc)fW4{D+(g7q34<5#z~q1baI z41EjflQ4@tCHudr!Fs&jO>dP=37AM+|LH3emc~*iu#eX(kZUHw27@1YohEV-NpdK4arQ&Qhyi zo@^uUsqr87O(4dzow!L?cX>KqiPPkNIj)Mtk+M_FpgZhQQdkblUxB5qc^gcS}I$#rh&DO-={OZl4v&{rFQYQ6bB z8!@Bfa|8OU1a;Dn_+gOPSwb){dw}>upf>TL?G*P3ijP0-gB~n^d*jH z9>&_A_;pEd;>QQL=OjAG$))*%lm2K|ClU!CQ_%S*aaT)2*+%?w%d-Jk{Wt<$E|Ir* z&5jq9-K6J)ztY4q0GDes7p1xtj zNH#hIHEEYdk~eYZE%n5w8hz7F4#32Z5x7#8dAN_W;Wo`#T9wO{ zem=~h-cHZul2#m^la1jwoTXrHf!wU^k79F}vrK$EQe#I0jk^q_-{q4h{uuc+0?*S@ zP-G$Vo!y*ee4RYm@210YK7Tjz8PjWI<4FhpUG(XDyibRp0nD0to{V#&=+pPpMKS{N z#gCfuo4+IQxses-PIjbhbCjds3grH8e~i5nfp>%XIk&N6#4=C0YgS^)cYj#&Bk=FW z6lC_Y9B+TZl$lKAbuQu>z>z>`Gb_0aD$lz^ks-OThT*7EO48PtlXI^10!_g8PYeC z8tm{F%quVICgoQu(2YKogQ{^}u{s4)-`erVNh3~irO0>VdS20#ewU9@kiojbaJ!CddsHYBI?>Z0jJW$m z^0JMrS?{>W^uR*V*6>Hww&V{wSh;7=SNw;gENa5s^V&Lcu_DnW*NS#VJLZ)luaI^9 z1b#lN!XuEVPr-~n)Db2%7R8=I89RwHglMkMt10+EUf$0MUNUNIp*+j*C$~HTfBzx> z^bdV0`n$=SdIgfaioDK4QE+-q9xijds{=@$+B%+)3IO=1S^8e@uQBfw?`1ueT;&n>qDQZqeuTtUuHbn0L>= zclH1~bSE2%qPqf1dgw5Kyh3##GtbuXe!O2#bUq5Wdg|c$obv-G&dE;MQN5;G?yV}2 zuqFXm@rd5>#uV0=%t6vSOFsR=r(ENH-b3|BrOLrbChk*H0(T>|&T(mRDc=w=mCc3O&6IoENgksm;%=_GdS78>+yq zTl9KaP4D_HDLAo+xKB4{aa)-y%Z&cGk;8hs3-_@QJH92x%gg&7&8Xd?YXj~rp+1pk>RrPDdDg)LPOM?PrjkFEM?P0> zAj35ps}ktyXhC^snE8VXArON9=P0?J$XG7LdIkusUd5DP5Z@OPla<^ zsA0WhK*b^%I6!{T+ac7PZgR%}XZk#@GNQ^{@{A@cw9CV&M?Iy&v*lrUoomFK$#~hqeBK^o$)o&bz*1rqL>ipaeGjsC-d-)dBLb49s+}9vtB=5`?g2=5Vq>&GGEr|8beWPq2tHvZ^H@;iB zPLk76E3^;>YH!qCyr|(P*1y__PPc6+R)U}NK$Fz0uf}>u;ykmB7}=g)?uQCd|2=c4 zJ2Q)FZWy}rb(4v2Z+u#aj#HR#zJR*UhG9^&HzKEv4dx!yt&)$aD$V=|K7V;1BUAEAflX#3z0;2mJew7}>Z{!#to+bS_4Yh>qM07p~98%x*oY!tpZnXLMoCZynb0 zKMK)gG}oIO^~{gL&}yj>f9&ZW`9>*)z<1a_sv)Rn&QZH+Q{ojVj& zLNR?2=L*H?nZ=s_H~C_Vl6YOX9^QW?kMaolVhZ~1xyQ)zcnzBMVJ-c|h=-$yd37LP zue?z@{-ef3^6bVwGoZx|a!!^O;`Z`5*%+us80RqeI~#FwD19wgv&ZNaBSWitAn!8y zXk5?JyvZXADa6H-anikk2QG9E#ZBT!^@ux;(kisgTOE*q!zwJ;5<<^p1OBWe|1^R= zkM!tRy;%kC3Sn65U_$W*HgqMQv{Ei}isRMD%v*#VW$5!*H{-v)iVNILvSbwbxoyaM z9d1Bi8FF8EKmJ-BBZECu*mpGq*MHG>FO9rQ;&x}M#z;Tb@H?GC@pOfWeGNVJ=P(Cc zZIIIR^_cb{4E4i|_&Ujkn_P$36eI7rUyYlmN2Np~Vqeo&v;i|o%F=5tkeLHXA-G8l z(OQ)ET~pq_;jyx9nmcMM^{CGK>py%<2Yx<%|22p&`N-2-Gk4a(h)lkp?MmKXH%(Hy zCHZ%G^o!JyuRV=DNm?P6{EC;`b^!qqpi0XbuiQzs_b7B|{aKD=7VZ)r=h0u~eUgId&5BH@! z?&tPB%$*;~znA>SQoHEad4&2rtr6-S?3-usb1QpL^kvj262uI*E7ZK7O~<8H|I>&4 z|L_?vt+-;jnKIQfc%8{|WLULitNp6wg#W~3-!rw7CzKDjDCv#!-KSY{)RC1*rjmV< z%M{z&Zgr}_L_t55~qh2*HYar{# zxv!3k=(qeaUiy3@){@3GNbg1S;zXIlIrgX@M#;{LmyPs39YDT(trN^TNHI#QW&gqO z4Kk7(--BMvp_*%u-kf#dApH_J>!`AsJXmO8GSRzn! z)L;!W*s0fyCGT;H3Qhkq&w8^4ZxTG|lgxdIXXNTEHO7&znB_t3#Tw3(SA^oyE8aGx~r;a30_Yw$oR}$*333V@$JJ0uxJMJHFe>kJ3Kq*c3-fOM-&iPE# z3Fqgk=rE)$eeR`nIKg>Df6hkq!tb-0zw+}vCsO|^9|Mnv(MYSr=L_$lt<*6dpVpxU zzyCi8^gfr=p;l>f8OJc65lBX?&dA;v_WD&|-nSmLmYW82n?ZKYegpRWHlXP_BT6Y! z&~i7qizf}3`G~zwBMtDsZ$yEI0S%jx={SWQ)y2pKh@vlQtGV**VC$hT|w_8?OBN z9#%YR%2@~3-M##N>e-xSSEuLs6aA3h?Gtftvc7I{J)$7 zjPjIt7qZh6yrc`WLUEjXzU^E`+E*i2e!Nl=;+fl9rjm;5eC6#xH+k}Jec2l9DJQgn za;QW@dHXgt-#O`3KTwDAeu?}GM8uG=7)aE z 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

YmD()?v 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

k(3eUSN@wI2>xvLzU?kG7;9mTIr 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

n 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 != update->beginstep){ fdrag[0] = gamma1*gjffac*v[i][0]; fdrag[1] = gamma1*gjffac*v[i][1]; fdrag[2] = gamma1*gjffac*v[i][2]; } + else if (Tp_GJF && update->ntimestep == update->beginstep){ + fdrag[0] = 0.0; + fdrag[1] = 0.0; + fdrag[2] = 0.0; + } flangevin[i][0] = fdrag[0] + fran[0]; flangevin[i][1] = fdrag[1] + fran[1]; flangevin[i][2] = fdrag[2] + fran[2]; From f0679cff6d87b0133f05833309af9c5d44468a0f Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 23 Jul 2019 09:27:15 -0600 Subject: [PATCH 057/237] Commit JT 072319 - added 2 oso examples in examples/SPIN/spinmin - added doc for oso_cg and oso_lbfgs --- doc/src/lammps.book | 1 + doc/src/min_modify.txt | 22 +++++++-- doc/src/min_spin.txt | 36 +++++++++++++-- doc/src/min_style.txt | 19 +++++++- doc/src/minimize.txt | 3 +- doc/src/neb_spin.txt | 6 ++- doc/src/pair_spin_dipole.txt | 5 +- examples/SPIN/spinmin/in.spinmin_cg.bfo | 54 ++++++++++++++++++++++ examples/SPIN/spinmin/in.spinmin_lbfgs.bfo | 54 ++++++++++++++++++++++ src/SPIN/min_spin.cpp | 4 +- src/SPIN/min_spin_oso_cg.cpp | 12 ++--- src/SPIN/min_spin_oso_lbfgs.cpp | 16 +++---- 12 files changed, 200 insertions(+), 32 deletions(-) create mode 100644 examples/SPIN/spinmin/in.spinmin_cg.bfo create mode 100644 examples/SPIN/spinmin/in.spinmin_lbfgs.bfo diff --git a/doc/src/lammps.book b/doc/src/lammps.book index 2738c9b051..8abe9cffa1 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -647,6 +647,7 @@ pair_sph_lj.html pair_sph_rhosum.html pair_sph_taitwater.html pair_sph_taitwater_morris.html +pair_spin_dipole.html pair_spin_dmi.html pair_spin_exchange.html pair_spin_magelec.html diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index d342e8bf01..da7b593d16 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -13,11 +13,11 @@ min_modify command :h3 min_modify keyword values ... :pre one or more keyword/value pairs may be listed :ulb,l -keyword = {dmax} or {line} or {alpha_damp} or {discrete_factor} +keyword = {dmax} or {line} or {alpha_damp} or {discrete_factor} or {spin_cubic} or {spin_none} {dmax} value = max max = maximum distance for line search to move (distance units) - {line} value = {backtrack} or {quadratic} or {forcezero} - backtrack,quadratic,forcezero = style of linesearch to use + {line} value = {backtrack} or {quadratic} or {forcezero} or {spin_cubic} or {spin_none} + backtrack,quadratic,forcezero,spin_cubic,spin_none = style of linesearch to use {alpha_damp} value = damping damping = fictitious Gilbert damping for spin minimization (adim) {discrete_factor} value = factor @@ -80,7 +80,21 @@ See "min_spin"_min_spin.html for more information about those quantities. Default values are {alpha_damp} = 1.0 and {discrete_factor} = 10.0. -[Restrictions:] none +The choice of a line search algorithm for the {spin_oso_cg} and +{spin_oso_lbfgs} can be specified via the {line} keyword. +The {spin_cubic} and {spin_none} only make sense when those two +when one of those two minimization styles is declared. + +The {spin_cubic} keyword activates the line search procedure when +the {spin_oso_cg} algorithm is used. + +The {spin_none} keyword deactivates the line search procedure when +the {spin_oso_lbfgs} algorithm is used. + +[Restrictions:] The line search procedure of styles +{spin_oso_cg} and {spin_oso_lbfgs} cannot be used for magnetic +NEB calculations. See "neb/spin"_neb_spin.html for more +explanation. [Related commands:] diff --git a/doc/src/min_spin.txt b/doc/src/min_spin.txt index 890e324aca..6883a4197c 100644 --- a/doc/src/min_spin.txt +++ b/doc/src/min_spin.txt @@ -6,14 +6,19 @@ :line min_style spin command :h3 +min_style spin_oso_cg command :h3 +min_style spin_oso_lbfgs command :h3 [Syntax:] -min_style spin :pre +min_style spin +min_style spin_oso_cg +min_style spin_oso_lbfgs :pre [Examples:] -min_style spin :pre +min_style spin_oso_lbfgs +min_modify discrete_factor 10.0 line_search 0 :pre [Description:] @@ -46,9 +51,29 @@ definition of this timestep. {discrete_factor} can be defined with the "min_modify"_min_modify.html command. -NOTE: The {spin} style replaces the force tolerance by a torque +Style {spin_oso_cg} defines an orthogonal spin optimization +(OSO) combined to a conjugate gradient (CG) algorithm. +The "min_modify"_min_modify.html command can be used to +couple the {spin_oso_cg} to a line search procedure, and to modify the +discretization factor {discrete_factor}. + +Style {spin_oso_lbfgs} defines an orthogonal spin optimization +(OSO) combined to a limited-memory Broyden-Fletcher-Goldfarb-Shanno +(LBFGS) algorithm. +By default, style {spin_oso_lbfgs} uses a line search procedure. +The "min_modify"_min_modify.html command can be used to +deactivate the line search procedure. + +For more information about styles {spin_oso_cg} and {spin_oso_lbfgs}, +see their implementation reported in "(Ivanov)"_#Ivanov1. + +NOTE: All the {spin} styles replace the force tolerance by a torque tolerance. See "minimize"_minimize.html for more explanation. +NOTE: The {spin_oso_cg} and {spin_oso_lbfgs} styles can be used +for magnetic NEB calculations only if the line search procedure +is deactivated. See "neb/spin"_neb_spin.html for more explanation. + [Restrictions:] This minimization procedure is only applied to spin degrees of @@ -63,3 +88,8 @@ freedom for a frozen lattice configuration. The option defaults are {alpha_damp} = 1.0 and {discrete_factor} = 10.0. + +:line + +:link(Ivanov1) +[(Ivanov)] Ivanov, Uzdin, Jonsson. arXiv preprint arXiv:1904.02669, (2019). diff --git a/doc/src/min_style.txt b/doc/src/min_style.txt index c46c1492b4..081ec17889 100644 --- a/doc/src/min_style.txt +++ b/doc/src/min_style.txt @@ -11,7 +11,8 @@ min_style command :h3 min_style style :pre -style = {cg} or {hftn} or {sd} or {quickmin} or {fire} or {spin} :ul +style = {cg} or {hftn} or {sd} or {quickmin} or {fire} or {spin} +or {spin_oso_cg} or {spin_oso_lbfgs} :ul [Examples:] @@ -64,11 +65,25 @@ a minimization. Style {spin} is a damped spin dynamics with an adaptive timestep. -See the "min/spin"_min_spin.html doc page for more information. + +Style {spin_oso_cg} uses an orthogonal spin optimization (OSO) +combined to a conjugate gradient (CG) approach to minimize spin +configurations. + +Style {spin_oso_lbfgs} uses an orthogonal spin optimization (OSO) +combined to a limited-memory Broyden-Fletcher-Goldfarb-Shanno +(LBFGS) approach to minimize spin configurations. + +See the "min/spin"_min_spin.html doc page for more information +about the {spin}, {spin_oso_cg} and {spin_oso_lbfgs} styles. Either the {quickmin} and {fire} styles are useful in the context of nudged elastic band (NEB) calculations via the "neb"_neb.html command. +Either the {spin}, {spin_oso_cg} and {spin_oso_lbfgs} styles are useful +in the context of magnetic geodesic nudged elastic band (GNEB) calculations +via the "neb/spin"_neb_spin.html command. + NOTE: The damped dynamic minimizers use whatever timestep you have defined via the "timestep"_timestep.html command. Often they will converge more quickly if you use a timestep about 10x larger than you diff --git a/doc/src/minimize.txt b/doc/src/minimize.txt index ecf1ad0fcf..1dc28acdef 100644 --- a/doc/src/minimize.txt +++ b/doc/src/minimize.txt @@ -103,7 +103,8 @@ the line search fails because the step distance backtracks to 0.0 the number of outer iterations or timesteps exceeds {maxiter} the number of total force evaluations exceeds {maxeval} :ul -NOTE: the "minimization style"_min_style.html {spin} replaces +NOTE: the "minimization style"_min_style.html {spin}, +{spin_oso_cg}, and {spin_oso_lbfgs} replace the force tolerance {ftol} by a torque tolerance. The minimization procedure stops if the 2-norm (length) of the global torque vector (defined as the cross product between the diff --git a/doc/src/neb_spin.txt b/doc/src/neb_spin.txt index 7dbd924cd2..46478b1219 100644 --- a/doc/src/neb_spin.txt +++ b/doc/src/neb_spin.txt @@ -172,7 +172,8 @@ command is issued. A NEB calculation proceeds in two stages, each of which is a minimization procedure, performed via damped dynamics. To enable this, you must first define a damped spin dynamics -"min_style"_min_style.html, using the {spin} style (see +"min_style"_min_style.html, using either the {spin}, +{spin_oso_cg}, or {spin_oso_lbfgs} style (see "min_spin"_min_spin.html for more information). The other styles cannot be used, since they relax the lattice degrees of freedom instead of the spins. @@ -358,6 +359,9 @@ This command can only be used if LAMMPS was built with the SPIN package. See the "Build package"_Build_package.html doc page for more info. +The line search procedures of the {spin_oso_cg} and {spin_oso_lbfgs} +minimization styles cannot be used in a GNEB calculation. + :line [Related commands:] diff --git a/doc/src/pair_spin_dipole.txt b/doc/src/pair_spin_dipole.txt index 0d6471e07f..735c71139a 100644 --- a/doc/src/pair_spin_dipole.txt +++ b/doc/src/pair_spin_dipole.txt @@ -25,9 +25,8 @@ pair_coeff * * 10.0 pair_coeff 2 3 8.0 :pre pair_style spin/dipole/long 9.0 -pair_coeff * * 1.0 1.0 -pair_coeff 2 3 1.0 1.0 2.5 4.0 scale 0.5 -pair_coeff 2 3 1.0 1.0 2.5 4.0 :pre +pair_coeff * * 10.0 +pair_coeff 2 3 6.0 :pre [Description:] diff --git a/examples/SPIN/spinmin/in.spinmin_cg.bfo b/examples/SPIN/spinmin/in.spinmin_cg.bfo new file mode 100644 index 0000000000..cd6ec485ad --- /dev/null +++ b/examples/SPIN/spinmin/in.spinmin_cg.bfo @@ -0,0 +1,54 @@ +# bfo in a 3d periodic box + +units metal +dimension 3 +boundary p p f +atom_style spin + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice sc 3.96 +region box block 0.0 34.0 0.0 34.0 0.0 1.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 1.0 +set group all spin/random 11 2.50 + +pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 spin/dmi 4.5 +pair_coeff * * spin/exchange exchange 6.0 -0.01575 0.0 1.965 +# pair_coeff * * spin/magelec magelec 4.5 0.000109 1.0 1.0 1.0 +pair_coeff * * spin/magelec magelec 4.5 0.00109 1.0 1.0 1.0 +pair_coeff * * spin/dmi dmi 4.5 0.00005 1.0 1.0 1.0 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin anisotropy 0.0000033 0.0 0.0 1.0 +fix_modify 1 energy yes + +timestep 0.0001 + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo 50 +thermo_style custom step time v_magnorm v_emag v_tmag temp etotal +thermo_modify format float %20.15g + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] + +min_style spin/oso_cg +min_modify discrete_factor 10.0 line_search 0 +minimize 1.0e-10 1.0e-10 10000 1000 diff --git a/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo b/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo new file mode 100644 index 0000000000..5db44522e1 --- /dev/null +++ b/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo @@ -0,0 +1,54 @@ +# bfo in a 3d periodic box + +units metal +dimension 3 +boundary p p f +atom_style spin + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice sc 3.96 +region box block 0.0 34.0 0.0 34.0 0.0 1.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 1.0 +set group all spin/random 11 2.50 + +pair_style hybrid/overlay spin/exchange 6.0 spin/magelec 4.5 spin/dmi 4.5 +pair_coeff * * spin/exchange exchange 6.0 -0.01575 0.0 1.965 +#pair_coeff * * spin/magelec magelec 4.5 0.000109 1.0 1.0 1.0 +pair_coeff * * spin/magelec magelec 4.5 0.00109 1.0 1.0 1.0 +pair_coeff * * spin/dmi dmi 4.5 0.00005 1.0 1.0 1.0 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin anisotropy 0.0000033 0.0 0.0 1.0 +fix_modify 1 energy yes + +timestep 0.0001 + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo 50 +thermo_style custom step time v_magnorm v_emag v_tmag temp etotal +thermo_modify format float %20.15g + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] + +min_style spin/oso_lbfgs +min_modify discrete_factor 10.0 line_search 1 +minimize 1.0e-15 1.0e-10 10000 1000 diff --git a/src/SPIN/min_spin.cpp b/src/SPIN/min_spin.cpp index 9849ba9946..f56c9f0d96 100644 --- a/src/SPIN/min_spin.cpp +++ b/src/SPIN/min_spin.cpp @@ -80,12 +80,12 @@ void MinSpin::setup_style() int MinSpin::modify_param(int narg, char **arg) { if (strcmp(arg[0],"alpha_damp") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + if (narg < 2) error->all(FLERR,"Illegal min_modify command"); alpha_damp = force->numeric(FLERR,arg[1]); return 2; } if (strcmp(arg[0],"discrete_factor") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + if (narg < 2) error->all(FLERR,"Illegal min_modify command"); discrete_factor = force->numeric(FLERR,arg[1]); return 2; } diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 843f1e48f1..e43c51e3af 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -133,12 +133,10 @@ void MinSpinOSO_CG::setup_style() int MinSpinOSO_CG::modify_param(int narg, char **arg) { if (strcmp(arg[0],"line_search") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + if (narg < 2) error->all(FLERR,"Illegal min_modify command"); use_line_search = force->numeric(FLERR,arg[1]); - if (nreplica > 1 && use_line_search) error->all(FLERR,"Illegal fix_modify command, cannot use NEB and line search together"); - return 2; } if (strcmp(arg[0],"discrete_factor") == 0) { @@ -250,9 +248,9 @@ int MinSpinOSO_CG::iterate(int maxiter) neval++; } - //// energy tolerance criterion - //// only check after DELAYSTEP elapsed since velocties reset to 0 - //// sync across replicas if running multi-replica minimization + // energy tolerance criterion + // only check after DELAYSTEP elapsed since velocties reset to 0 + // sync across replicas if running multi-replica minimization if (update->etol > 0.0 && ntimestep-last_negative > DELAYSTEP) { if (update->multireplica == 0) { @@ -680,4 +678,4 @@ double MinSpinOSO_CG::evaluate_dt() dtmax = MY_2PI/(discrete_factor*sqrt(fmaxsqall)); return dtmax; -} \ No newline at end of file +} diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index eba62f296f..0bd128367f 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -145,16 +145,14 @@ int MinSpinOSO_LBFGS::modify_param(int narg, char **arg) { if (strcmp(arg[0],"line_search") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + if (narg < 2) error->all(FLERR,"Illegal min_modify command"); use_line_search = force->numeric(FLERR,arg[1]); - if (nreplica > 1 && use_line_search) - error->all(FLERR,"Illegal fix_modify command, cannot use NEB and line search together"); - + error->all(FLERR,"Illegal min_modify command, cannot use NEB and line search together"); return 2; } if (strcmp(arg[0],"discrete_factor") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + if (narg < 2) error->all(FLERR,"Illegal min_modify command"); double discrete_factor; discrete_factor = force->numeric(FLERR,arg[1]); maxepsrot = MY_2PI / (10 * discrete_factor); @@ -266,9 +264,9 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) neval++; } - //// energy tolerance criterion - //// only check after DELAYSTEP elapsed since velocties reset to 0 - //// sync across replicas if running multi-replica minimization + // energy tolerance criterion + // only check after DELAYSTEP elapsed since velocties reset to 0 + // sync across replicas if running multi-replica minimization if (update->etol > 0.0 && ntimestep-last_negative > DELAYSTEP) { if (update->multireplica == 0) { @@ -802,4 +800,4 @@ double MinSpinOSO_LBFGS::maximum_rotation(double *p) else alpha = 1.0; return alpha; -} \ No newline at end of file +} From f1c3b9d0bf3fd4f27711e81eb11dbb70d79da5fb Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 23 Jul 2019 11:24:52 -0600 Subject: [PATCH 058/237] Commit2 JT 072319 - corrected some mistakes in doc files - modified oso examples to match new line options --- doc/src/min_modify.txt | 10 +++++----- doc/src/min_spin.txt | 5 +++-- doc/src/neb_spin.txt | 4 ++-- examples/SPIN/spinmin/in.spinmin_cg.bfo | 2 +- examples/SPIN/spinmin/in.spinmin_lbfgs.bfo | 2 +- src/SPIN/neb_spin.cpp | 2 +- 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index da7b593d16..c59e2b474b 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -13,7 +13,7 @@ min_modify command :h3 min_modify keyword values ... :pre one or more keyword/value pairs may be listed :ulb,l -keyword = {dmax} or {line} or {alpha_damp} or {discrete_factor} or {spin_cubic} or {spin_none} +keyword = {dmax} or {line} or {alpha_damp} or {discrete_factor} {dmax} value = max max = maximum distance for line search to move (distance units) {line} value = {backtrack} or {quadratic} or {forcezero} or {spin_cubic} or {spin_none} @@ -81,9 +81,9 @@ quantities. Default values are {alpha_damp} = 1.0 and {discrete_factor} = 10.0. The choice of a line search algorithm for the {spin_oso_cg} and -{spin_oso_lbfgs} can be specified via the {line} keyword. -The {spin_cubic} and {spin_none} only make sense when those two -when one of those two minimization styles is declared. +{spin_oso_lbfgs} styles can be specified via the {line} keyword. +The {spin_cubic} and {spin_none} only make sense when one of those +two minimization styles is declared. The {spin_cubic} keyword activates the line search procedure when the {spin_oso_cg} algorithm is used. @@ -93,7 +93,7 @@ the {spin_oso_lbfgs} algorithm is used. [Restrictions:] The line search procedure of styles {spin_oso_cg} and {spin_oso_lbfgs} cannot be used for magnetic -NEB calculations. See "neb/spin"_neb_spin.html for more +GNEB calculations. See "neb/spin"_neb_spin.html for more explanation. [Related commands:] diff --git a/doc/src/min_spin.txt b/doc/src/min_spin.txt index 6883a4197c..2a85427c56 100644 --- a/doc/src/min_spin.txt +++ b/doc/src/min_spin.txt @@ -18,7 +18,7 @@ min_style spin_oso_lbfgs :pre [Examples:] min_style spin_oso_lbfgs -min_modify discrete_factor 10.0 line_search 0 :pre +min_modify discrete_factor 10.0 line spin_none :pre [Description:] @@ -62,7 +62,8 @@ Style {spin_oso_lbfgs} defines an orthogonal spin optimization (LBFGS) algorithm. By default, style {spin_oso_lbfgs} uses a line search procedure. The "min_modify"_min_modify.html command can be used to -deactivate the line search procedure. +deactivate the line search procedure, and to modify the +discretization factor {discrete_factor}. For more information about styles {spin_oso_cg} and {spin_oso_lbfgs}, see their implementation reported in "(Ivanov)"_#Ivanov1. diff --git a/doc/src/neb_spin.txt b/doc/src/neb_spin.txt index 46478b1219..27e835276e 100644 --- a/doc/src/neb_spin.txt +++ b/doc/src/neb_spin.txt @@ -60,8 +60,8 @@ processors per replica. See the "Howto replica"_Howto_replica.html doc page for further discussion. NOTE: As explained below, a GNEB calculation performs a damped dynamics -minimization across all the replicas. The "spin"_min_spin.html -style minimizer has to be defined in your input script. +minimization across all the replicas. One of the "spin"_min_spin.html +style minimizers has to be defined in your input script. When a GNEB calculation is performed, it is assumed that each replica is running the same system, though LAMMPS does not check for this. diff --git a/examples/SPIN/spinmin/in.spinmin_cg.bfo b/examples/SPIN/spinmin/in.spinmin_cg.bfo index cd6ec485ad..901b04e5fd 100644 --- a/examples/SPIN/spinmin/in.spinmin_cg.bfo +++ b/examples/SPIN/spinmin/in.spinmin_cg.bfo @@ -50,5 +50,5 @@ compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] min_style spin/oso_cg -min_modify discrete_factor 10.0 line_search 0 +min_modify discrete_factor 10.0 line spin_cubic minimize 1.0e-10 1.0e-10 10000 1000 diff --git a/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo b/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo index 5db44522e1..4edd1a053e 100644 --- a/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo +++ b/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo @@ -50,5 +50,5 @@ compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] min_style spin/oso_lbfgs -min_modify discrete_factor 10.0 line_search 1 +min_modify discrete_factor 10.0 line spin_none minimize 1.0e-15 1.0e-10 10000 1000 diff --git a/src/SPIN/neb_spin.cpp b/src/SPIN/neb_spin.cpp index 12d1d2a956..4fa1f4467b 100644 --- a/src/SPIN/neb_spin.cpp +++ b/src/SPIN/neb_spin.cpp @@ -650,7 +650,7 @@ int NEBSpin::initial_rotation(double *spi, double *sploc, double fraction) kcrossy = kz*spix - kx*spiz; kcrossz = kx*spiy - ky*spix; - kdots = kx*spix + ky*spiz + kz*spiz; + kdots = kx*spix + ky*spiy + kz*spiz; omega = acos(sidotsf); omega *= fraction; From 15d791d0e3ff82b05fd5012daea2e6a9e41643a4 Mon Sep 17 00:00:00 2001 From: casievers Date: Tue, 23 Jul 2019 18:41:31 -0700 Subject: [PATCH 059/237] debugging gjf tally --- src/fix_langevin.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 7d5c382488..82366be4dd 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -673,9 +673,12 @@ void FixLangevin::post_force_untemplated if (Tp_TALLY) { if (Tp_GJF && update->ntimestep != update->beginstep){ - fdrag[0] = gamma1*gjffac*v[i][0]; - fdrag[1] = gamma1*gjffac*v[i][1]; - fdrag[2] = gamma1*gjffac*v[i][2]; + fdrag[0] = gamma1*gjffac*gjffac*v[i][0]; + fdrag[1] = gamma1*gjffac*gjffac*v[i][1]; + fdrag[2] = gamma1*gjffac*gjffac*v[i][2]; + fran[0] *= gjffac; + fran[1] *= gjffac; + fran[2] *= gjffac; } else if (Tp_GJF && update->ntimestep == update->beginstep){ fdrag[0] = 0.0; @@ -902,14 +905,8 @@ void FixLangevin::end_of_step() v[i][2] = lv[i][2]; } } - if (tallyflag && hsflag){ - energy_onestep += gjffac*(flangevin[i][0] * lv[i][0] + - flangevin[i][1] * lv[i][1] + flangevin[i][2] * lv[i][2]); - } - else if (tallyflag){ - energy_onestep += flangevin[i][0] * v[i][0] + flangevin[i][1] * v[i][1] + - flangevin[i][2] * v[i][2]; - } + energy_onestep += flangevin[i][0] * v[i][0] + flangevin[i][1] * v[i][1] + + flangevin[i][2] * v[i][2]; } if (tallyflag) { energy += energy_onestep * update->dt; @@ -985,8 +982,11 @@ double FixLangevin::compute_scalar() } // convert midstep energy back to previous fullstep energy - - double energy_me = energy - 0.5*energy_onestep*update->dt; + double energy_me; + if (gjfflag) + energy_me = energy - energy_onestep*update->dt; + else + energy_me = energy - 0.5*energy_onestep*update->dt; double energy_all; MPI_Allreduce(&energy_me,&energy_all,1,MPI_DOUBLE,MPI_SUM,world); From 25653e67f8a041890f1ff6ff933a0fe2f84250b6 Mon Sep 17 00:00:00 2001 From: casievers Date: Wed, 24 Jul 2019 16:05:25 -0700 Subject: [PATCH 060/237] Tally works and example readmes addes --- examples/gjf/README.md | 13 +++++++++++++ examples/python/gjf_python/README.md | 18 ++++++++++++++++++ src/fix_langevin.cpp | 5 ----- 3 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 examples/gjf/README.md create mode 100644 examples/python/gjf_python/README.md diff --git a/examples/gjf/README.md b/examples/gjf/README.md new file mode 100644 index 0000000000..e285ab8510 --- /dev/null +++ b/examples/gjf/README.md @@ -0,0 +1,13 @@ +# LAMMPS GJF-2GJ THERMOSTAT EXAMPLE W/ PYTHON + +## GJF-2GJ THERMOSTAT + +This directory contains the ingredients to run an NVT simulation using the GJF-2GJ thermostat. + +Example: +``` +NP=4 #number of processors +mpirun -np $NP lmp_mpi -in.argon -out.argon +``` + +## Required LAMMPS packages: MOLECULE package diff --git a/examples/python/gjf_python/README.md b/examples/python/gjf_python/README.md new file mode 100644 index 0000000000..707289f02d --- /dev/null +++ b/examples/python/gjf_python/README.md @@ -0,0 +1,18 @@ +# LAMMPS GJF-2GJ THERMOSTAT EXAMPLE W/ PYTHON + +## GJF-2GJ THERMOSTAT + +This directory contains a python script to run NVT simulations using the GJF-2GJ thermostat. +The script will vary the timestep and write thermodynamic output to screen. +This script has True/False options to change how you would like to dump/write your output. + +Example: +``` +NP=4 #number of processors +mpirun -np $NP python gjf.py +``` + +## Required LAMMPS packages: MOLECULE package +## LAMMPS COMPILE MODE: SHLIB +## LAMMPS OPTIONAL INSTALL: make install-python +## Required Python packages: mpi4py diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 82366be4dd..4fcf7c6a1d 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -174,11 +174,6 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : // no need to set peratom_flag, b/c data is for internal use only if (gjfflag) { - //int mem = 6*atom->nmax*sizeof(double); - //if (hsflag) mem += 3*atom->nmax*sizeof(double); -// - //comm->maxexchange_fix = MAX(comm->maxexchange_fix, 0); - //comm->maxexchange_fix += MAX(1000, mem); nvalues = 3; grow_arrays(atom->nmax); From f9ed12be4f0ff547661a6dffe420b67c76655379 Mon Sep 17 00:00:00 2001 From: alxvov Date: Wed, 24 Jul 2019 23:21:07 +0000 Subject: [PATCH 061/237] modify line for spin_cubic, spin_none. edit docs a bit. --- doc/src/min_modify.txt | 12 ++-- doc/src/min_spin.txt | 17 ++++-- doc/src/minimize.txt | 8 +-- doc/src/neb_spin.txt | 6 +- examples/SPIN/spinmin/in.spinmin_cg.bfo | 8 +-- examples/SPIN/spinmin/in.spinmin_lbfgs.bfo | 6 +- src/MAKE/Makefile.serial | 2 +- src/SPIN/min_spin_oso_cg.cpp | 64 +++++++++++----------- src/SPIN/min_spin_oso_cg.h | 4 +- src/SPIN/min_spin_oso_lbfgs.cpp | 48 +++++++--------- src/SPIN/min_spin_oso_lbfgs.h | 2 +- 11 files changed, 89 insertions(+), 88 deletions(-) diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index c59e2b474b..9c4d7c8fcb 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -84,12 +84,12 @@ The choice of a line search algorithm for the {spin_oso_cg} and {spin_oso_lbfgs} styles can be specified via the {line} keyword. The {spin_cubic} and {spin_none} only make sense when one of those two minimization styles is declared. - -The {spin_cubic} keyword activates the line search procedure when -the {spin_oso_cg} algorithm is used. - -The {spin_none} keyword deactivates the line search procedure when -the {spin_oso_lbfgs} algorithm is used. +The {spin_cubic} performs the line search based on a cubic interpolation +of the energy along the search direction. The {spin_none} keyword +deactivates the line search procedure. +The {spin_none} is a default value for {line} keyword apart from the case when +single-replica calculations are performed with {spin_oso_lbfgs} that +uses {spin_cubic} line search. [Restrictions:] The line search procedure of styles {spin_oso_cg} and {spin_oso_lbfgs} cannot be used for magnetic diff --git a/doc/src/min_spin.txt b/doc/src/min_spin.txt index 2a85427c56..77dc008b3e 100644 --- a/doc/src/min_spin.txt +++ b/doc/src/min_spin.txt @@ -18,7 +18,7 @@ min_style spin_oso_lbfgs :pre [Examples:] min_style spin_oso_lbfgs -min_modify discrete_factor 10.0 line spin_none :pre +min_modify line spin_none discrete_factor 10.0 :pre [Description:] @@ -55,12 +55,21 @@ Style {spin_oso_cg} defines an orthogonal spin optimization (OSO) combined to a conjugate gradient (CG) algorithm. The "min_modify"_min_modify.html command can be used to couple the {spin_oso_cg} to a line search procedure, and to modify the -discretization factor {discrete_factor}. +discretization factor {discrete_factor}. +By defualt, the style {spin_oso_cg} does not employ line search procedure and +and uses the adaptive time-step technique in the same way as style {spin}. Style {spin_oso_lbfgs} defines an orthogonal spin optimization (OSO) combined to a limited-memory Broyden-Fletcher-Goldfarb-Shanno -(LBFGS) algorithm. -By default, style {spin_oso_lbfgs} uses a line search procedure. +(L-BFGS) algorithm. +By default, style {spin_oso_lbfgs} uses a line search procedure +based on cubic interpolation for +a single-replica calculation, and it does not use line search procedure +for a multireplica calculation (such as in case of GNEB calculation). +If the line search procedure is not used then the discrete factor defines +the maximum root mean squared rotation angle of spins by equation {pi/(5*Kappa)}. +The default value for Kappa is 10. + The "min_modify"_min_modify.html command can be used to deactivate the line search procedure, and to modify the discretization factor {discrete_factor}. diff --git a/doc/src/minimize.txt b/doc/src/minimize.txt index 1dc28acdef..1de925d6c8 100644 --- a/doc/src/minimize.txt +++ b/doc/src/minimize.txt @@ -106,10 +106,10 @@ the number of total force evaluations exceeds {maxeval} :ul NOTE: the "minimization style"_min_style.html {spin}, {spin_oso_cg}, and {spin_oso_lbfgs} replace the force tolerance {ftol} by a torque tolerance. -The minimization procedure stops if the 2-norm (length) of the -global torque vector (defined as the cross product between the -spins and their precession vectors omega) is less than {ftol}, -or if any of the other criteria are met. +The minimization procedure stops if the 2-norm (length) of the torque vector on atom +(defined as the cross product between the +atomic spin and its precession vectors omega) is less than {ftol}, +or if any of the other criteria are met. Torque have the same units as the energy. NOTE: You can also use the "fix halt"_fix_halt.html command to specify a general criterion for exiting a minimization, that is a calculation diff --git a/doc/src/neb_spin.txt b/doc/src/neb_spin.txt index 27e835276e..2fdfda8c66 100644 --- a/doc/src/neb_spin.txt +++ b/doc/src/neb_spin.txt @@ -59,7 +59,7 @@ performance speed-up you would see with one or more physical processors per replica. See the "Howto replica"_Howto_replica.html doc page for further discussion. -NOTE: As explained below, a GNEB calculation performs a damped dynamics +NOTE: As explained below, a GNEB calculation performs a minimization across all the replicas. One of the "spin"_min_spin.html style minimizers has to be defined in your input script. @@ -170,8 +170,8 @@ command is issued. :line A NEB calculation proceeds in two stages, each of which is a -minimization procedure, performed via damped dynamics. To enable -this, you must first define a damped spin dynamics +minimization procedure. To enable +this, you must first define a "min_style"_min_style.html, using either the {spin}, {spin_oso_cg}, or {spin_oso_lbfgs} style (see "min_spin"_min_spin.html for more information). diff --git a/examples/SPIN/spinmin/in.spinmin_cg.bfo b/examples/SPIN/spinmin/in.spinmin_cg.bfo index 901b04e5fd..776079edb8 100644 --- a/examples/SPIN/spinmin/in.spinmin_cg.bfo +++ b/examples/SPIN/spinmin/in.spinmin_cg.bfo @@ -42,13 +42,13 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo 50 +thermo 100 thermo_style custom step time v_magnorm v_emag v_tmag temp etotal thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] -min_style spin/oso_cg -min_modify discrete_factor 10.0 line spin_cubic -minimize 1.0e-10 1.0e-10 10000 1000 +min_style spin_oso_cg +# min_modify line spin_none discrete_factor 10.0 +minimize 1.0e-10 1.0e-7 1000 1000 diff --git a/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo b/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo index 4edd1a053e..ca600f1c2b 100644 --- a/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo +++ b/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo @@ -49,6 +49,6 @@ thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] -min_style spin/oso_lbfgs -min_modify discrete_factor 10.0 line spin_none -minimize 1.0e-15 1.0e-10 10000 1000 +min_style spin_oso_lbfgs +min_modify line spin_cubic discrete_factor 10.0 +minimize 1.0e-15 1.0e-7 10000 1000 diff --git a/src/MAKE/Makefile.serial b/src/MAKE/Makefile.serial index 5954d97761..8628d2bb73 100644 --- a/src/MAKE/Makefile.serial +++ b/src/MAKE/Makefile.serial @@ -7,7 +7,7 @@ SHELL = /bin/sh # specify flags and libraries needed for your compiler CC = g++ -CCFLAGS = -g -O3 +CCFLAGS = -g -O3 -Wall SHFLAGS = -fPIC DEPFLAGS = -M diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index e43c51e3af..2bdc00d8ed 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -63,7 +63,7 @@ static const char cite_minstyle_spin_oso_cg[] = /* ---------------------------------------------------------------------- */ MinSpinOSO_CG::MinSpinOSO_CG(LAMMPS *lmp) : - Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL) + Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL), sp_copy(NULL) { if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_cg); nlocal_max = 0; @@ -99,6 +99,13 @@ void MinSpinOSO_CG::init() Min::init(); + if (linestyle == 3 && nreplica == 1){ + use_line_search = 1; + } + else{ + use_line_search = 0; + } + dts = dt = update->dt; last_negative = update->ntimestep; @@ -132,13 +139,6 @@ void MinSpinOSO_CG::setup_style() int MinSpinOSO_CG::modify_param(int narg, char **arg) { - if (strcmp(arg[0],"line_search") == 0) { - if (narg < 2) error->all(FLERR,"Illegal min_modify command"); - use_line_search = force->numeric(FLERR,arg[1]); - if (nreplica > 1 && use_line_search) - error->all(FLERR,"Illegal fix_modify command, cannot use NEB and line search together"); - return 2; - } if (strcmp(arg[0],"discrete_factor") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); discrete_factor = force->numeric(FLERR,arg[1]); @@ -181,7 +181,6 @@ int MinSpinOSO_CG::iterate(int maxiter) double der_e_cur_tmp = 0.0; if (nlocal_max < nlocal) { - nlocal_max = nlocal; local_iter = 0; nlocal_max = nlocal; memory->grow(g_old,3*nlocal_max,"min/spin/oso/cg:g_old"); @@ -205,8 +204,9 @@ int MinSpinOSO_CG::iterate(int maxiter) if (use_line_search) { // here we need to do line search - if (local_iter == 0) + if (local_iter == 0){ calc_gradient(); + } calc_search_direction(); der_e_cur = 0.0; @@ -219,7 +219,7 @@ int MinSpinOSO_CG::iterate(int maxiter) } for (int i = 0; i < nlocal; i++) for (int j = 0; j < 3; j++) - sp_copy[i][j] = sp[i][j]; + sp_copy[i][j] = sp[i][j]; eprevious = ecurrent; der_e_pr = der_e_cur; @@ -228,24 +228,15 @@ int MinSpinOSO_CG::iterate(int maxiter) else{ // here we don't do line search - // but use cutoff rotation angle // if gneb calc., nreplica > 1 // then calculate gradients and advance spins // of intermediate replicas only - - if (nreplica > 1) { - if(ireplica != 0 && ireplica != nreplica-1) calc_gradient(); calc_search_direction(); advance_spins(); - } else{ - calc_gradient(); - calc_search_direction(); - advance_spins(); - } + neval++; eprevious = ecurrent; ecurrent = energy_force(0); - neval++; } // energy tolerance criterion @@ -336,10 +327,18 @@ void MinSpinOSO_CG::calc_search_direction() double g2_global = 0.0; double g2old_global = 0.0; + double factor = 1.0; + + // for multiple replica do not move end points + if (nreplica > 1) + if (ireplica == 0 || ireplica == nreplica - 1) + factor = 0.0; + + if (local_iter == 0 || local_iter % 5 == 0){ // steepest descent direction for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = -g_cur[i]; - g_old[i] = g_cur[i]; + p_s[i] = -g_cur[i] * factor; + g_old[i] = g_cur[i] * factor; } } else { // conjugate direction for (int i = 0; i < 3 * nlocal; i++) { @@ -354,9 +353,9 @@ void MinSpinOSO_CG::calc_search_direction() MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,world); // Sum over all replicas. Good for GNEB. - if (update->multireplica == 1) { - g2 = g2_global; - g2old = g2old_global; + if (nreplica > 1) { + g2 = g2_global * factor; + g2old = g2old_global * factor; MPI_Allreduce(&g2,&g2_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } @@ -364,8 +363,8 @@ void MinSpinOSO_CG::calc_search_direction() else beta = g2_global / g2old_global; // calculate conjugate direction for (int i = 0; i < 3 * nlocal; i++) { - p_s[i] = (beta * p_s[i] - g_cur[i]); - g_old[i] = g_cur[i]; + p_s[i] = (beta * p_s[i] - g_cur[i]) * factor; + g_old[i] = g_cur[i] * factor; } } @@ -380,8 +379,6 @@ void MinSpinOSO_CG::advance_spins() { int nlocal = atom->nlocal; double **sp = atom->sp; - double **fm = atom->fm; - double tdampx, tdampy, tdampz; double rot_mat[9]; // exponential of matrix made of search direction double s_new[3]; @@ -477,7 +474,7 @@ void MinSpinOSO_CG::rodrigues_rotation(const double *upp_tr, double *out) A = cos(theta); B = sin(theta); - D = 1 - A; + D = 1.0 - A; x = upp_tr[0]/theta; y = upp_tr[1]/theta; z = upp_tr[2]/theta; @@ -529,7 +526,7 @@ void MinSpinOSO_CG::make_step(double c, double *energy_and_der) double rot_mat[9]; // exponential of matrix made of search direction double s_new[3]; double **sp = atom->sp; - double der_e_cur_tmp = 0.0;; + double der_e_cur_tmp = 0.0; for (int i = 0; i < nlocal; i++) { @@ -629,7 +626,8 @@ int MinSpinOSO_CG::awc(double der_phi_0, double phi_0, double der_phi_j, double double delta = 0.1; double sigma = 0.9; - if ((phi_j<=phi_0+eps*fabs(phi_0)) && ((2.0*delta-1.0) * der_phi_0>=der_phi_j>=sigma*der_phi_0)) + if ((phi_j<=phi_0+eps*fabs(phi_0)) && + ((2.0*delta-1.0) * der_phi_0>=der_phi_j>=sigma*der_phi_0)) return 1; else return 0; diff --git a/src/SPIN/min_spin_oso_cg.h b/src/SPIN/min_spin_oso_cg.h index e50d1a69db..41253f440f 100644 --- a/src/SPIN/min_spin_oso_cg.h +++ b/src/SPIN/min_spin_oso_cg.h @@ -13,7 +13,7 @@ #ifdef MINIMIZE_CLASS -MinimizeStyle(spin/oso_cg, MinSpinOSO_CG) +MinimizeStyle(spin_oso_cg, MinSpinOSO_CG) #else @@ -39,8 +39,8 @@ class MinSpinOSO_CG: public Min { int ireplica,nreplica; // for neb double *spvec; // variables for atomic dof, as 1d vector double *fmvec; // variables for atomic dof, as 1d vector - double *g_cur; // current gradient vector double *g_old; // gradient vector at previous step + double *g_cur; // current gradient vector double *p_s; // search direction vector double **sp_copy; // copy of the spins int local_iter; // for neb diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index 0bd128367f..6aaeb7ca23 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -107,6 +107,13 @@ void MinSpinOSO_LBFGS::init() Min::init(); + if (linestyle != 4 && nreplica == 1){ + use_line_search = 1; + } + else{ + use_line_search = 0; + } + last_negative = update->ntimestep; // allocate tables @@ -143,14 +150,6 @@ void MinSpinOSO_LBFGS::setup_style() int MinSpinOSO_LBFGS::modify_param(int narg, char **arg) { - - if (strcmp(arg[0],"line_search") == 0) { - if (narg < 2) error->all(FLERR,"Illegal min_modify command"); - use_line_search = force->numeric(FLERR,arg[1]); - if (nreplica > 1 && use_line_search) - error->all(FLERR,"Illegal min_modify command, cannot use NEB and line search together"); - return 2; - } if (strcmp(arg[0],"discrete_factor") == 0) { if (narg < 2) error->all(FLERR,"Illegal min_modify command"); double discrete_factor; @@ -221,8 +220,11 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) if (use_line_search) { // here we need to do line search - if (local_iter == 0) + if (local_iter == 0){ + eprevious = ecurrent; + ecurrent = energy_force(0); calc_gradient(); + } calc_search_direction(); der_e_cur = 0.0; @@ -248,19 +250,11 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) // if gneb calc., nreplica > 1 // then calculate gradients and advance spins // of intermediate replicas only - - if (nreplica > 1) { - if(ireplica != 0 && ireplica != nreplica-1) - calc_gradient(); - calc_search_direction(); - advance_spins(); - } else{ - calc_gradient(); - calc_search_direction(); - advance_spins(); - } eprevious = ecurrent; ecurrent = energy_force(0); + calc_gradient(); + calc_search_direction(); + advance_spins(); neval++; } @@ -398,7 +392,7 @@ void MinSpinOSO_LBFGS::calc_search_direction() } MPI_Allreduce(&dyds, &dyds_global, 1, MPI_DOUBLE, MPI_SUM, world); - if (update->multireplica == 1) { + if (nreplica > 1) { dyds_global *= factor; dyds = dyds_global; MPI_Allreduce(&dyds, &dyds_global, 1,MPI_DOUBLE,MPI_SUM,universe->uworld); @@ -437,7 +431,7 @@ void MinSpinOSO_LBFGS::calc_search_direction() sq += ds[c_ind][i] * q[i]; } MPI_Allreduce(&sq,&sq_global,1,MPI_DOUBLE,MPI_SUM,world); - if (update->multireplica == 1) { + if (nreplica > 1) { sq_global *= factor; sq = sq_global; MPI_Allreduce(&sq,&sq_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); @@ -460,7 +454,7 @@ void MinSpinOSO_LBFGS::calc_search_direction() yy += dy[m_index][i] * dy[m_index][i]; } MPI_Allreduce(&yy,&yy_global,1,MPI_DOUBLE,MPI_SUM,world); - if (update->multireplica == 1) { + if (nreplica > 1) { yy_global *= factor; yy = yy_global; MPI_Allreduce(&yy,&yy_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); @@ -493,7 +487,7 @@ void MinSpinOSO_LBFGS::calc_search_direction() } MPI_Allreduce(&yr,&yr_global,1,MPI_DOUBLE,MPI_SUM,world); - if (update->multireplica == 1) { + if (nreplica > 1) { yr_global *= factor; yr = yr_global; MPI_Allreduce(&yr,&yr_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); @@ -668,7 +662,7 @@ void MinSpinOSO_LBFGS::make_step(double c, double *energy_and_der) double rot_mat[9]; // exponential of matrix made of search direction double s_new[3]; double **sp = atom->sp; - double der_e_cur_tmp = 0.0;; + double der_e_cur_tmp = 0.0; for (int i = 0; i < nlocal; i++) { @@ -784,12 +778,12 @@ double MinSpinOSO_LBFGS::maximum_rotation(double *p) for (int i = 0; i < 3 * nlocal; i++) norm2 += p[i] * p[i]; MPI_Allreduce(&norm2,&norm2_global,1,MPI_DOUBLE,MPI_SUM,world); - if (update->multireplica == 1) { + if (nreplica > 1) { norm2 = norm2_global; MPI_Allreduce(&norm2,&norm2_global,1,MPI_DOUBLE,MPI_SUM,universe->uworld); } MPI_Allreduce(&nlocal,&ntotal,1,MPI_INT,MPI_SUM,world); - if (update->multireplica == 1) { + if (nreplica > 1) { nlocal = ntotal; MPI_Allreduce(&nlocal,&ntotal,1,MPI_INT,MPI_SUM,universe->uworld); } diff --git a/src/SPIN/min_spin_oso_lbfgs.h b/src/SPIN/min_spin_oso_lbfgs.h index d74898aa8c..3071bacc35 100644 --- a/src/SPIN/min_spin_oso_lbfgs.h +++ b/src/SPIN/min_spin_oso_lbfgs.h @@ -13,7 +13,7 @@ #ifdef MINIMIZE_CLASS -MinimizeStyle(spin/oso_lbfgs, MinSpinOSO_LBFGS) +MinimizeStyle(spin_oso_lbfgs, MinSpinOSO_LBFGS) #else From 4a80edd75f5fb659fa1a9574642f16262fcd2dec Mon Sep 17 00:00:00 2001 From: casievers Date: Fri, 19 Jul 2019 13:36:57 -0700 Subject: [PATCH 062/237] updated fix_langevin and made example --- examples/gjf/argon.lmp | 886 ++++++++++++++++++++++++++++++++++ examples/gjf/ff-argon.lmp | 20 + examples/gjf/in.argon | 162 +++++++ examples/gjf/out.argon | 249 ++++++++++ examples/gjf/trajectory.0.dcd | Bin 0 -> 439092 bytes src/fix_langevin.cpp | 272 +++++++++-- src/fix_langevin.h | 7 +- 7 files changed, 1550 insertions(+), 46 deletions(-) create mode 100644 examples/gjf/argon.lmp create mode 100644 examples/gjf/ff-argon.lmp create mode 100644 examples/gjf/in.argon create mode 100644 examples/gjf/out.argon create mode 100644 examples/gjf/trajectory.0.dcd diff --git a/examples/gjf/argon.lmp b/examples/gjf/argon.lmp new file mode 100644 index 0000000000..00214b4c54 --- /dev/null +++ b/examples/gjf/argon.lmp @@ -0,0 +1,886 @@ +LAMMPS description + + 864 atoms + 0 bonds + 0 angles + 0 dihedrals + 0 impropers + + 1 atom types + 0 bond types + 0 angle types + 0 dihedral types + 0 improper types + + + 0.0000000 32.146000 xlo xhi + 0.0000000 32.146000 ylo yhi + 0.0000000 32.146000 zlo zhi + + Atoms + + 1 1 1 0.0000000 0.0000000 2.6790000 2.6790000 + 2 2 1 0.0000000 0.0000000 2.6790000 8.0360000 + 3 3 1 0.0000000 0.0000000 2.6790000 13.3940000 + 4 4 1 0.0000000 0.0000000 2.6790000 18.7520000 + 5 5 1 0.0000000 0.0000000 2.6790000 24.1090000 + 6 6 1 0.0000000 0.0000000 2.6790000 29.4670000 + 7 7 1 0.0000000 0.0000000 8.0360000 2.6790000 + 8 8 1 0.0000000 0.0000000 8.0360000 8.0360000 + 9 9 1 0.0000000 0.0000000 8.0360000 13.3940000 + 10 10 1 0.0000000 0.0000000 8.0360000 18.7520000 + 11 11 1 0.0000000 0.0000000 8.0360000 24.1090000 + 12 12 1 0.0000000 0.0000000 8.0360000 29.4670000 + 13 13 1 0.0000000 0.0000000 13.3940000 2.6790000 + 14 14 1 0.0000000 0.0000000 13.3940000 8.0360000 + 15 15 1 0.0000000 0.0000000 13.3940000 13.3940000 + 16 16 1 0.0000000 0.0000000 13.3940000 18.7520000 + 17 17 1 0.0000000 0.0000000 13.3940000 24.1090000 + 18 18 1 0.0000000 0.0000000 13.3940000 29.4670000 + 19 19 1 0.0000000 0.0000000 18.7520000 2.6790000 + 20 20 1 0.0000000 0.0000000 18.7520000 8.0360000 + 21 21 1 0.0000000 0.0000000 18.7520000 13.3940000 + 22 22 1 0.0000000 0.0000000 18.7520000 18.7520000 + 23 23 1 0.0000000 0.0000000 18.7520000 24.1090000 + 24 24 1 0.0000000 0.0000000 18.7520000 29.4670000 + 25 25 1 0.0000000 0.0000000 24.1090000 2.6790000 + 26 26 1 0.0000000 0.0000000 24.1090000 8.0360000 + 27 27 1 0.0000000 0.0000000 24.1090000 13.3940000 + 28 28 1 0.0000000 0.0000000 24.1090000 18.7520000 + 29 29 1 0.0000000 0.0000000 24.1090000 24.1090000 + 30 30 1 0.0000000 0.0000000 24.1090000 29.4670000 + 31 31 1 0.0000000 0.0000000 29.4670000 2.6790000 + 32 32 1 0.0000000 0.0000000 29.4670000 8.0360000 + 33 33 1 0.0000000 0.0000000 29.4670000 13.3940000 + 34 34 1 0.0000000 0.0000000 29.4670000 18.7520000 + 35 35 1 0.0000000 0.0000000 29.4670000 24.1090000 + 36 36 1 0.0000000 0.0000000 29.4670000 29.4670000 + 37 37 1 0.0000000 5.3580000 2.6790000 2.6790000 + 38 38 1 0.0000000 5.3580000 2.6790000 8.0360000 + 39 39 1 0.0000000 5.3580000 2.6790000 13.3940000 + 40 40 1 0.0000000 5.3580000 2.6790000 18.7520000 + 41 41 1 0.0000000 5.3580000 2.6790000 24.1090000 + 42 42 1 0.0000000 5.3580000 2.6790000 29.4670000 + 43 43 1 0.0000000 5.3580000 8.0360000 2.6790000 + 44 44 1 0.0000000 5.3580000 8.0360000 8.0360000 + 45 45 1 0.0000000 5.3580000 8.0360000 13.3940000 + 46 46 1 0.0000000 5.3580000 8.0360000 18.7520000 + 47 47 1 0.0000000 5.3580000 8.0360000 24.1090000 + 48 48 1 0.0000000 5.3580000 8.0360000 29.4670000 + 49 49 1 0.0000000 5.3580000 13.3940000 2.6790000 + 50 50 1 0.0000000 5.3580000 13.3940000 8.0360000 + 51 51 1 0.0000000 5.3580000 13.3940000 13.3940000 + 52 52 1 0.0000000 5.3580000 13.3940000 18.7520000 + 53 53 1 0.0000000 5.3580000 13.3940000 24.1090000 + 54 54 1 0.0000000 5.3580000 13.3940000 29.4670000 + 55 55 1 0.0000000 5.3580000 18.7520000 2.6790000 + 56 56 1 0.0000000 5.3580000 18.7520000 8.0360000 + 57 57 1 0.0000000 5.3580000 18.7520000 13.3940000 + 58 58 1 0.0000000 5.3580000 18.7520000 18.7520000 + 59 59 1 0.0000000 5.3580000 18.7520000 24.1090000 + 60 60 1 0.0000000 5.3580000 18.7520000 29.4670000 + 61 61 1 0.0000000 5.3580000 24.1090000 2.6790000 + 62 62 1 0.0000000 5.3580000 24.1090000 8.0360000 + 63 63 1 0.0000000 5.3580000 24.1090000 13.3940000 + 64 64 1 0.0000000 5.3580000 24.1090000 18.7520000 + 65 65 1 0.0000000 5.3580000 24.1090000 24.1090000 + 66 66 1 0.0000000 5.3580000 24.1090000 29.4670000 + 67 67 1 0.0000000 5.3580000 29.4670000 2.6790000 + 68 68 1 0.0000000 5.3580000 29.4670000 8.0360000 + 69 69 1 0.0000000 5.3580000 29.4670000 13.3940000 + 70 70 1 0.0000000 5.3580000 29.4670000 18.7520000 + 71 71 1 0.0000000 5.3580000 29.4670000 24.1090000 + 72 72 1 0.0000000 5.3580000 29.4670000 29.4670000 + 73 73 1 0.0000000 10.7150000 2.6790000 2.6790000 + 74 74 1 0.0000000 10.7150000 2.6790000 8.0360000 + 75 75 1 0.0000000 10.7150000 2.6790000 13.3940000 + 76 76 1 0.0000000 10.7150000 2.6790000 18.7520000 + 77 77 1 0.0000000 10.7150000 2.6790000 24.1090000 + 78 78 1 0.0000000 10.7150000 2.6790000 29.4670000 + 79 79 1 0.0000000 10.7150000 8.0360000 2.6790000 + 80 80 1 0.0000000 10.7150000 8.0360000 8.0360000 + 81 81 1 0.0000000 10.7150000 8.0360000 13.3940000 + 82 82 1 0.0000000 10.7150000 8.0360000 18.7520000 + 83 83 1 0.0000000 10.7150000 8.0360000 24.1090000 + 84 84 1 0.0000000 10.7150000 8.0360000 29.4670000 + 85 85 1 0.0000000 10.7150000 13.3940000 2.6790000 + 86 86 1 0.0000000 10.7150000 13.3940000 8.0360000 + 87 87 1 0.0000000 10.7150000 13.3940000 13.3940000 + 88 88 1 0.0000000 10.7150000 13.3940000 18.7520000 + 89 89 1 0.0000000 10.7150000 13.3940000 24.1090000 + 90 90 1 0.0000000 10.7150000 13.3940000 29.4670000 + 91 91 1 0.0000000 10.7150000 18.7520000 2.6790000 + 92 92 1 0.0000000 10.7150000 18.7520000 8.0360000 + 93 93 1 0.0000000 10.7150000 18.7520000 13.3940000 + 94 94 1 0.0000000 10.7150000 18.7520000 18.7520000 + 95 95 1 0.0000000 10.7150000 18.7520000 24.1090000 + 96 96 1 0.0000000 10.7150000 18.7520000 29.4670000 + 97 97 1 0.0000000 10.7150000 24.1090000 2.6790000 + 98 98 1 0.0000000 10.7150000 24.1090000 8.0360000 + 99 99 1 0.0000000 10.7150000 24.1090000 13.3940000 + 100 100 1 0.0000000 10.7150000 24.1090000 18.7520000 + 101 101 1 0.0000000 10.7150000 24.1090000 24.1090000 + 102 102 1 0.0000000 10.7150000 24.1090000 29.4670000 + 103 103 1 0.0000000 10.7150000 29.4670000 2.6790000 + 104 104 1 0.0000000 10.7150000 29.4670000 8.0360000 + 105 105 1 0.0000000 10.7150000 29.4670000 13.3940000 + 106 106 1 0.0000000 10.7150000 29.4670000 18.7520000 + 107 107 1 0.0000000 10.7150000 29.4670000 24.1090000 + 108 108 1 0.0000000 10.7150000 29.4670000 29.4670000 + 109 109 1 0.0000000 16.0730000 2.6790000 2.6790000 + 110 110 1 0.0000000 16.0730000 2.6790000 8.0360000 + 111 111 1 0.0000000 16.0730000 2.6790000 13.3940000 + 112 112 1 0.0000000 16.0730000 2.6790000 18.7520000 + 113 113 1 0.0000000 16.0730000 2.6790000 24.1090000 + 114 114 1 0.0000000 16.0730000 2.6790000 29.4670000 + 115 115 1 0.0000000 16.0730000 8.0360000 2.6790000 + 116 116 1 0.0000000 16.0730000 8.0360000 8.0360000 + 117 117 1 0.0000000 16.0730000 8.0360000 13.3940000 + 118 118 1 0.0000000 16.0730000 8.0360000 18.7520000 + 119 119 1 0.0000000 16.0730000 8.0360000 24.1090000 + 120 120 1 0.0000000 16.0730000 8.0360000 29.4670000 + 121 121 1 0.0000000 16.0730000 13.3940000 2.6790000 + 122 122 1 0.0000000 16.0730000 13.3940000 8.0360000 + 123 123 1 0.0000000 16.0730000 13.3940000 13.3940000 + 124 124 1 0.0000000 16.0730000 13.3940000 18.7520000 + 125 125 1 0.0000000 16.0730000 13.3940000 24.1090000 + 126 126 1 0.0000000 16.0730000 13.3940000 29.4670000 + 127 127 1 0.0000000 16.0730000 18.7520000 2.6790000 + 128 128 1 0.0000000 16.0730000 18.7520000 8.0360000 + 129 129 1 0.0000000 16.0730000 18.7520000 13.3940000 + 130 130 1 0.0000000 16.0730000 18.7520000 18.7520000 + 131 131 1 0.0000000 16.0730000 18.7520000 24.1090000 + 132 132 1 0.0000000 16.0730000 18.7520000 29.4670000 + 133 133 1 0.0000000 16.0730000 24.1090000 2.6790000 + 134 134 1 0.0000000 16.0730000 24.1090000 8.0360000 + 135 135 1 0.0000000 16.0730000 24.1090000 13.3940000 + 136 136 1 0.0000000 16.0730000 24.1090000 18.7520000 + 137 137 1 0.0000000 16.0730000 24.1090000 24.1090000 + 138 138 1 0.0000000 16.0730000 24.1090000 29.4670000 + 139 139 1 0.0000000 16.0730000 29.4670000 2.6790000 + 140 140 1 0.0000000 16.0730000 29.4670000 8.0360000 + 141 141 1 0.0000000 16.0730000 29.4670000 13.3940000 + 142 142 1 0.0000000 16.0730000 29.4670000 18.7520000 + 143 143 1 0.0000000 16.0730000 29.4670000 24.1090000 + 144 144 1 0.0000000 16.0730000 29.4670000 29.4670000 + 145 145 1 0.0000000 21.4310000 2.6790000 2.6790000 + 146 146 1 0.0000000 21.4310000 2.6790000 8.0360000 + 147 147 1 0.0000000 21.4310000 2.6790000 13.3940000 + 148 148 1 0.0000000 21.4310000 2.6790000 18.7520000 + 149 149 1 0.0000000 21.4310000 2.6790000 24.1090000 + 150 150 1 0.0000000 21.4310000 2.6790000 29.4670000 + 151 151 1 0.0000000 21.4310000 8.0360000 2.6790000 + 152 152 1 0.0000000 21.4310000 8.0360000 8.0360000 + 153 153 1 0.0000000 21.4310000 8.0360000 13.3940000 + 154 154 1 0.0000000 21.4310000 8.0360000 18.7520000 + 155 155 1 0.0000000 21.4310000 8.0360000 24.1090000 + 156 156 1 0.0000000 21.4310000 8.0360000 29.4670000 + 157 157 1 0.0000000 21.4310000 13.3940000 2.6790000 + 158 158 1 0.0000000 21.4310000 13.3940000 8.0360000 + 159 159 1 0.0000000 21.4310000 13.3940000 13.3940000 + 160 160 1 0.0000000 21.4310000 13.3940000 18.7520000 + 161 161 1 0.0000000 21.4310000 13.3940000 24.1090000 + 162 162 1 0.0000000 21.4310000 13.3940000 29.4670000 + 163 163 1 0.0000000 21.4310000 18.7520000 2.6790000 + 164 164 1 0.0000000 21.4310000 18.7520000 8.0360000 + 165 165 1 0.0000000 21.4310000 18.7520000 13.3940000 + 166 166 1 0.0000000 21.4310000 18.7520000 18.7520000 + 167 167 1 0.0000000 21.4310000 18.7520000 24.1090000 + 168 168 1 0.0000000 21.4310000 18.7520000 29.4670000 + 169 169 1 0.0000000 21.4310000 24.1090000 2.6790000 + 170 170 1 0.0000000 21.4310000 24.1090000 8.0360000 + 171 171 1 0.0000000 21.4310000 24.1090000 13.3940000 + 172 172 1 0.0000000 21.4310000 24.1090000 18.7520000 + 173 173 1 0.0000000 21.4310000 24.1090000 24.1090000 + 174 174 1 0.0000000 21.4310000 24.1090000 29.4670000 + 175 175 1 0.0000000 21.4310000 29.4670000 2.6790000 + 176 176 1 0.0000000 21.4310000 29.4670000 8.0360000 + 177 177 1 0.0000000 21.4310000 29.4670000 13.3940000 + 178 178 1 0.0000000 21.4310000 29.4670000 18.7520000 + 179 179 1 0.0000000 21.4310000 29.4670000 24.1090000 + 180 180 1 0.0000000 21.4310000 29.4670000 29.4670000 + 181 181 1 0.0000000 26.7880000 2.6790000 2.6790000 + 182 182 1 0.0000000 26.7880000 2.6790000 8.0360000 + 183 183 1 0.0000000 26.7880000 2.6790000 13.3940000 + 184 184 1 0.0000000 26.7880000 2.6790000 18.7520000 + 185 185 1 0.0000000 26.7880000 2.6790000 24.1090000 + 186 186 1 0.0000000 26.7880000 2.6790000 29.4670000 + 187 187 1 0.0000000 26.7880000 8.0360000 2.6790000 + 188 188 1 0.0000000 26.7880000 8.0360000 8.0360000 + 189 189 1 0.0000000 26.7880000 8.0360000 13.3940000 + 190 190 1 0.0000000 26.7880000 8.0360000 18.7520000 + 191 191 1 0.0000000 26.7880000 8.0360000 24.1090000 + 192 192 1 0.0000000 26.7880000 8.0360000 29.4670000 + 193 193 1 0.0000000 26.7880000 13.3940000 2.6790000 + 194 194 1 0.0000000 26.7880000 13.3940000 8.0360000 + 195 195 1 0.0000000 26.7880000 13.3940000 13.3940000 + 196 196 1 0.0000000 26.7880000 13.3940000 18.7520000 + 197 197 1 0.0000000 26.7880000 13.3940000 24.1090000 + 198 198 1 0.0000000 26.7880000 13.3940000 29.4670000 + 199 199 1 0.0000000 26.7880000 18.7520000 2.6790000 + 200 200 1 0.0000000 26.7880000 18.7520000 8.0360000 + 201 201 1 0.0000000 26.7880000 18.7520000 13.3940000 + 202 202 1 0.0000000 26.7880000 18.7520000 18.7520000 + 203 203 1 0.0000000 26.7880000 18.7520000 24.1090000 + 204 204 1 0.0000000 26.7880000 18.7520000 29.4670000 + 205 205 1 0.0000000 26.7880000 24.1090000 2.6790000 + 206 206 1 0.0000000 26.7880000 24.1090000 8.0360000 + 207 207 1 0.0000000 26.7880000 24.1090000 13.3940000 + 208 208 1 0.0000000 26.7880000 24.1090000 18.7520000 + 209 209 1 0.0000000 26.7880000 24.1090000 24.1090000 + 210 210 1 0.0000000 26.7880000 24.1090000 29.4670000 + 211 211 1 0.0000000 26.7880000 29.4670000 2.6790000 + 212 212 1 0.0000000 26.7880000 29.4670000 8.0360000 + 213 213 1 0.0000000 26.7880000 29.4670000 13.3940000 + 214 214 1 0.0000000 26.7880000 29.4670000 18.7520000 + 215 215 1 0.0000000 26.7880000 29.4670000 24.1090000 + 216 216 1 0.0000000 26.7880000 29.4670000 29.4670000 + 217 217 1 0.0000000 2.6790000 5.3580000 2.6790000 + 218 218 1 0.0000000 2.6790000 5.3580000 8.0360000 + 219 219 1 0.0000000 2.6790000 5.3580000 13.3940000 + 220 220 1 0.0000000 2.6790000 5.3580000 18.7520000 + 221 221 1 0.0000000 2.6790000 5.3580000 24.1090000 + 222 222 1 0.0000000 2.6790000 5.3580000 29.4670000 + 223 223 1 0.0000000 2.6790000 10.7150000 2.6790000 + 224 224 1 0.0000000 2.6790000 10.7150000 8.0360000 + 225 225 1 0.0000000 2.6790000 10.7150000 13.3940000 + 226 226 1 0.0000000 2.6790000 10.7150000 18.7520000 + 227 227 1 0.0000000 2.6790000 10.7150000 24.1090000 + 228 228 1 0.0000000 2.6790000 10.7150000 29.4670000 + 229 229 1 0.0000000 2.6790000 16.0730000 2.6790000 + 230 230 1 0.0000000 2.6790000 16.0730000 8.0360000 + 231 231 1 0.0000000 2.6790000 16.0730000 13.3940000 + 232 232 1 0.0000000 2.6790000 16.0730000 18.7520000 + 233 233 1 0.0000000 2.6790000 16.0730000 24.1090000 + 234 234 1 0.0000000 2.6790000 16.0730000 29.4670000 + 235 235 1 0.0000000 2.6790000 21.4310000 2.6790000 + 236 236 1 0.0000000 2.6790000 21.4310000 8.0360000 + 237 237 1 0.0000000 2.6790000 21.4310000 13.3940000 + 238 238 1 0.0000000 2.6790000 21.4310000 18.7520000 + 239 239 1 0.0000000 2.6790000 21.4310000 24.1090000 + 240 240 1 0.0000000 2.6790000 21.4310000 29.4670000 + 241 241 1 0.0000000 2.6790000 26.7880000 2.6790000 + 242 242 1 0.0000000 2.6790000 26.7880000 8.0360000 + 243 243 1 0.0000000 2.6790000 26.7880000 13.3940000 + 244 244 1 0.0000000 2.6790000 26.7880000 18.7520000 + 245 245 1 0.0000000 2.6790000 26.7880000 24.1090000 + 246 246 1 0.0000000 2.6790000 26.7880000 29.4670000 + 247 247 1 0.0000000 2.6790000 32.1460000 2.6790000 + 248 248 1 0.0000000 2.6790000 32.1460000 8.0360000 + 249 249 1 0.0000000 2.6790000 32.1460000 13.3940000 + 250 250 1 0.0000000 2.6790000 32.1460000 18.7520000 + 251 251 1 0.0000000 2.6790000 32.1460000 24.1090000 + 252 252 1 0.0000000 2.6790000 32.1460000 29.4670000 + 253 253 1 0.0000000 8.0360000 5.3580000 2.6790000 + 254 254 1 0.0000000 8.0360000 5.3580000 8.0360000 + 255 255 1 0.0000000 8.0360000 5.3580000 13.3940000 + 256 256 1 0.0000000 8.0360000 5.3580000 18.7520000 + 257 257 1 0.0000000 8.0360000 5.3580000 24.1090000 + 258 258 1 0.0000000 8.0360000 5.3580000 29.4670000 + 259 259 1 0.0000000 8.0360000 10.7150000 2.6790000 + 260 260 1 0.0000000 8.0360000 10.7150000 8.0360000 + 261 261 1 0.0000000 8.0360000 10.7150000 13.3940000 + 262 262 1 0.0000000 8.0360000 10.7150000 18.7520000 + 263 263 1 0.0000000 8.0360000 10.7150000 24.1090000 + 264 264 1 0.0000000 8.0360000 10.7150000 29.4670000 + 265 265 1 0.0000000 8.0360000 16.0730000 2.6790000 + 266 266 1 0.0000000 8.0360000 16.0730000 8.0360000 + 267 267 1 0.0000000 8.0360000 16.0730000 13.3940000 + 268 268 1 0.0000000 8.0360000 16.0730000 18.7520000 + 269 269 1 0.0000000 8.0360000 16.0730000 24.1090000 + 270 270 1 0.0000000 8.0360000 16.0730000 29.4670000 + 271 271 1 0.0000000 8.0360000 21.4310000 2.6790000 + 272 272 1 0.0000000 8.0360000 21.4310000 8.0360000 + 273 273 1 0.0000000 8.0360000 21.4310000 13.3940000 + 274 274 1 0.0000000 8.0360000 21.4310000 18.7520000 + 275 275 1 0.0000000 8.0360000 21.4310000 24.1090000 + 276 276 1 0.0000000 8.0360000 21.4310000 29.4670000 + 277 277 1 0.0000000 8.0360000 26.7880000 2.6790000 + 278 278 1 0.0000000 8.0360000 26.7880000 8.0360000 + 279 279 1 0.0000000 8.0360000 26.7880000 13.3940000 + 280 280 1 0.0000000 8.0360000 26.7880000 18.7520000 + 281 281 1 0.0000000 8.0360000 26.7880000 24.1090000 + 282 282 1 0.0000000 8.0360000 26.7880000 29.4670000 + 283 283 1 0.0000000 8.0360000 32.1460000 2.6790000 + 284 284 1 0.0000000 8.0360000 32.1460000 8.0360000 + 285 285 1 0.0000000 8.0360000 32.1460000 13.3940000 + 286 286 1 0.0000000 8.0360000 32.1460000 18.7520000 + 287 287 1 0.0000000 8.0360000 32.1460000 24.1090000 + 288 288 1 0.0000000 8.0360000 32.1460000 29.4670000 + 289 289 1 0.0000000 13.3940000 5.3580000 2.6790000 + 290 290 1 0.0000000 13.3940000 5.3580000 8.0360000 + 291 291 1 0.0000000 13.3940000 5.3580000 13.3940000 + 292 292 1 0.0000000 13.3940000 5.3580000 18.7520000 + 293 293 1 0.0000000 13.3940000 5.3580000 24.1090000 + 294 294 1 0.0000000 13.3940000 5.3580000 29.4670000 + 295 295 1 0.0000000 13.3940000 10.7150000 2.6790000 + 296 296 1 0.0000000 13.3940000 10.7150000 8.0360000 + 297 297 1 0.0000000 13.3940000 10.7150000 13.3940000 + 298 298 1 0.0000000 13.3940000 10.7150000 18.7520000 + 299 299 1 0.0000000 13.3940000 10.7150000 24.1090000 + 300 300 1 0.0000000 13.3940000 10.7150000 29.4670000 + 301 301 1 0.0000000 13.3940000 16.0730000 2.6790000 + 302 302 1 0.0000000 13.3940000 16.0730000 8.0360000 + 303 303 1 0.0000000 13.3940000 16.0730000 13.3940000 + 304 304 1 0.0000000 13.3940000 16.0730000 18.7520000 + 305 305 1 0.0000000 13.3940000 16.0730000 24.1090000 + 306 306 1 0.0000000 13.3940000 16.0730000 29.4670000 + 307 307 1 0.0000000 13.3940000 21.4310000 2.6790000 + 308 308 1 0.0000000 13.3940000 21.4310000 8.0360000 + 309 309 1 0.0000000 13.3940000 21.4310000 13.3940000 + 310 310 1 0.0000000 13.3940000 21.4310000 18.7520000 + 311 311 1 0.0000000 13.3940000 21.4310000 24.1090000 + 312 312 1 0.0000000 13.3940000 21.4310000 29.4670000 + 313 313 1 0.0000000 13.3940000 26.7880000 2.6790000 + 314 314 1 0.0000000 13.3940000 26.7880000 8.0360000 + 315 315 1 0.0000000 13.3940000 26.7880000 13.3940000 + 316 316 1 0.0000000 13.3940000 26.7880000 18.7520000 + 317 317 1 0.0000000 13.3940000 26.7880000 24.1090000 + 318 318 1 0.0000000 13.3940000 26.7880000 29.4670000 + 319 319 1 0.0000000 13.3940000 32.1460000 2.6790000 + 320 320 1 0.0000000 13.3940000 32.1460000 8.0360000 + 321 321 1 0.0000000 13.3940000 32.1460000 13.3940000 + 322 322 1 0.0000000 13.3940000 32.1460000 18.7520000 + 323 323 1 0.0000000 13.3940000 32.1460000 24.1090000 + 324 324 1 0.0000000 13.3940000 32.1460000 29.4670000 + 325 325 1 0.0000000 18.7520000 5.3580000 2.6790000 + 326 326 1 0.0000000 18.7520000 5.3580000 8.0360000 + 327 327 1 0.0000000 18.7520000 5.3580000 13.3940000 + 328 328 1 0.0000000 18.7520000 5.3580000 18.7520000 + 329 329 1 0.0000000 18.7520000 5.3580000 24.1090000 + 330 330 1 0.0000000 18.7520000 5.3580000 29.4670000 + 331 331 1 0.0000000 18.7520000 10.7150000 2.6790000 + 332 332 1 0.0000000 18.7520000 10.7150000 8.0360000 + 333 333 1 0.0000000 18.7520000 10.7150000 13.3940000 + 334 334 1 0.0000000 18.7520000 10.7150000 18.7520000 + 335 335 1 0.0000000 18.7520000 10.7150000 24.1090000 + 336 336 1 0.0000000 18.7520000 10.7150000 29.4670000 + 337 337 1 0.0000000 18.7520000 16.0730000 2.6790000 + 338 338 1 0.0000000 18.7520000 16.0730000 8.0360000 + 339 339 1 0.0000000 18.7520000 16.0730000 13.3940000 + 340 340 1 0.0000000 18.7520000 16.0730000 18.7520000 + 341 341 1 0.0000000 18.7520000 16.0730000 24.1090000 + 342 342 1 0.0000000 18.7520000 16.0730000 29.4670000 + 343 343 1 0.0000000 18.7520000 21.4310000 2.6790000 + 344 344 1 0.0000000 18.7520000 21.4310000 8.0360000 + 345 345 1 0.0000000 18.7520000 21.4310000 13.3940000 + 346 346 1 0.0000000 18.7520000 21.4310000 18.7520000 + 347 347 1 0.0000000 18.7520000 21.4310000 24.1090000 + 348 348 1 0.0000000 18.7520000 21.4310000 29.4670000 + 349 349 1 0.0000000 18.7520000 26.7880000 2.6790000 + 350 350 1 0.0000000 18.7520000 26.7880000 8.0360000 + 351 351 1 0.0000000 18.7520000 26.7880000 13.3940000 + 352 352 1 0.0000000 18.7520000 26.7880000 18.7520000 + 353 353 1 0.0000000 18.7520000 26.7880000 24.1090000 + 354 354 1 0.0000000 18.7520000 26.7880000 29.4670000 + 355 355 1 0.0000000 18.7520000 32.1460000 2.6790000 + 356 356 1 0.0000000 18.7520000 32.1460000 8.0360000 + 357 357 1 0.0000000 18.7520000 32.1460000 13.3940000 + 358 358 1 0.0000000 18.7520000 32.1460000 18.7520000 + 359 359 1 0.0000000 18.7520000 32.1460000 24.1090000 + 360 360 1 0.0000000 18.7520000 32.1460000 29.4670000 + 361 361 1 0.0000000 24.1090000 5.3580000 2.6790000 + 362 362 1 0.0000000 24.1090000 5.3580000 8.0360000 + 363 363 1 0.0000000 24.1090000 5.3580000 13.3940000 + 364 364 1 0.0000000 24.1090000 5.3580000 18.7520000 + 365 365 1 0.0000000 24.1090000 5.3580000 24.1090000 + 366 366 1 0.0000000 24.1090000 5.3580000 29.4670000 + 367 367 1 0.0000000 24.1090000 10.7150000 2.6790000 + 368 368 1 0.0000000 24.1090000 10.7150000 8.0360000 + 369 369 1 0.0000000 24.1090000 10.7150000 13.3940000 + 370 370 1 0.0000000 24.1090000 10.7150000 18.7520000 + 371 371 1 0.0000000 24.1090000 10.7150000 24.1090000 + 372 372 1 0.0000000 24.1090000 10.7150000 29.4670000 + 373 373 1 0.0000000 24.1090000 16.0730000 2.6790000 + 374 374 1 0.0000000 24.1090000 16.0730000 8.0360000 + 375 375 1 0.0000000 24.1090000 16.0730000 13.3940000 + 376 376 1 0.0000000 24.1090000 16.0730000 18.7520000 + 377 377 1 0.0000000 24.1090000 16.0730000 24.1090000 + 378 378 1 0.0000000 24.1090000 16.0730000 29.4670000 + 379 379 1 0.0000000 24.1090000 21.4310000 2.6790000 + 380 380 1 0.0000000 24.1090000 21.4310000 8.0360000 + 381 381 1 0.0000000 24.1090000 21.4310000 13.3940000 + 382 382 1 0.0000000 24.1090000 21.4310000 18.7520000 + 383 383 1 0.0000000 24.1090000 21.4310000 24.1090000 + 384 384 1 0.0000000 24.1090000 21.4310000 29.4670000 + 385 385 1 0.0000000 24.1090000 26.7880000 2.6790000 + 386 386 1 0.0000000 24.1090000 26.7880000 8.0360000 + 387 387 1 0.0000000 24.1090000 26.7880000 13.3940000 + 388 388 1 0.0000000 24.1090000 26.7880000 18.7520000 + 389 389 1 0.0000000 24.1090000 26.7880000 24.1090000 + 390 390 1 0.0000000 24.1090000 26.7880000 29.4670000 + 391 391 1 0.0000000 24.1090000 32.1460000 2.6790000 + 392 392 1 0.0000000 24.1090000 32.1460000 8.0360000 + 393 393 1 0.0000000 24.1090000 32.1460000 13.3940000 + 394 394 1 0.0000000 24.1090000 32.1460000 18.7520000 + 395 395 1 0.0000000 24.1090000 32.1460000 24.1090000 + 396 396 1 0.0000000 24.1090000 32.1460000 29.4670000 + 397 397 1 0.0000000 29.4670000 5.3580000 2.6790000 + 398 398 1 0.0000000 29.4670000 5.3580000 8.0360000 + 399 399 1 0.0000000 29.4670000 5.3580000 13.3940000 + 400 400 1 0.0000000 29.4670000 5.3580000 18.7520000 + 401 401 1 0.0000000 29.4670000 5.3580000 24.1090000 + 402 402 1 0.0000000 29.4670000 5.3580000 29.4670000 + 403 403 1 0.0000000 29.4670000 10.7150000 2.6790000 + 404 404 1 0.0000000 29.4670000 10.7150000 8.0360000 + 405 405 1 0.0000000 29.4670000 10.7150000 13.3940000 + 406 406 1 0.0000000 29.4670000 10.7150000 18.7520000 + 407 407 1 0.0000000 29.4670000 10.7150000 24.1090000 + 408 408 1 0.0000000 29.4670000 10.7150000 29.4670000 + 409 409 1 0.0000000 29.4670000 16.0730000 2.6790000 + 410 410 1 0.0000000 29.4670000 16.0730000 8.0360000 + 411 411 1 0.0000000 29.4670000 16.0730000 13.3940000 + 412 412 1 0.0000000 29.4670000 16.0730000 18.7520000 + 413 413 1 0.0000000 29.4670000 16.0730000 24.1090000 + 414 414 1 0.0000000 29.4670000 16.0730000 29.4670000 + 415 415 1 0.0000000 29.4670000 21.4310000 2.6790000 + 416 416 1 0.0000000 29.4670000 21.4310000 8.0360000 + 417 417 1 0.0000000 29.4670000 21.4310000 13.3940000 + 418 418 1 0.0000000 29.4670000 21.4310000 18.7520000 + 419 419 1 0.0000000 29.4670000 21.4310000 24.1090000 + 420 420 1 0.0000000 29.4670000 21.4310000 29.4670000 + 421 421 1 0.0000000 29.4670000 26.7880000 2.6790000 + 422 422 1 0.0000000 29.4670000 26.7880000 8.0360000 + 423 423 1 0.0000000 29.4670000 26.7880000 13.3940000 + 424 424 1 0.0000000 29.4670000 26.7880000 18.7520000 + 425 425 1 0.0000000 29.4670000 26.7880000 24.1090000 + 426 426 1 0.0000000 29.4670000 26.7880000 29.4670000 + 427 427 1 0.0000000 29.4670000 32.1460000 2.6790000 + 428 428 1 0.0000000 29.4670000 32.1460000 8.0360000 + 429 429 1 0.0000000 29.4670000 32.1460000 13.3940000 + 430 430 1 0.0000000 29.4670000 32.1460000 18.7520000 + 431 431 1 0.0000000 29.4670000 32.1460000 24.1090000 + 432 432 1 0.0000000 29.4670000 32.1460000 29.4670000 + 433 433 1 0.0000000 2.6790000 2.6790000 5.3580000 + 434 434 1 0.0000000 2.6790000 2.6790000 10.7150000 + 435 435 1 0.0000000 2.6790000 2.6790000 16.0730000 + 436 436 1 0.0000000 2.6790000 2.6790000 21.4310000 + 437 437 1 0.0000000 2.6790000 2.6790000 26.7880000 + 438 438 1 0.0000000 2.6790000 2.6790000 32.1460000 + 439 439 1 0.0000000 2.6790000 8.0360000 5.3580000 + 440 440 1 0.0000000 2.6790000 8.0360000 10.7150000 + 441 441 1 0.0000000 2.6790000 8.0360000 16.0730000 + 442 442 1 0.0000000 2.6790000 8.0360000 21.4310000 + 443 443 1 0.0000000 2.6790000 8.0360000 26.7880000 + 444 444 1 0.0000000 2.6790000 8.0360000 32.1460000 + 445 445 1 0.0000000 2.6790000 13.3940000 5.3580000 + 446 446 1 0.0000000 2.6790000 13.3940000 10.7150000 + 447 447 1 0.0000000 2.6790000 13.3940000 16.0730000 + 448 448 1 0.0000000 2.6790000 13.3940000 21.4310000 + 449 449 1 0.0000000 2.6790000 13.3940000 26.7880000 + 450 450 1 0.0000000 2.6790000 13.3940000 32.1460000 + 451 451 1 0.0000000 2.6790000 18.7520000 5.3580000 + 452 452 1 0.0000000 2.6790000 18.7520000 10.7150000 + 453 453 1 0.0000000 2.6790000 18.7520000 16.0730000 + 454 454 1 0.0000000 2.6790000 18.7520000 21.4310000 + 455 455 1 0.0000000 2.6790000 18.7520000 26.7880000 + 456 456 1 0.0000000 2.6790000 18.7520000 32.1460000 + 457 457 1 0.0000000 2.6790000 24.1090000 5.3580000 + 458 458 1 0.0000000 2.6790000 24.1090000 10.7150000 + 459 459 1 0.0000000 2.6790000 24.1090000 16.0730000 + 460 460 1 0.0000000 2.6790000 24.1090000 21.4310000 + 461 461 1 0.0000000 2.6790000 24.1090000 26.7880000 + 462 462 1 0.0000000 2.6790000 24.1090000 32.1460000 + 463 463 1 0.0000000 2.6790000 29.4670000 5.3580000 + 464 464 1 0.0000000 2.6790000 29.4670000 10.7150000 + 465 465 1 0.0000000 2.6790000 29.4670000 16.0730000 + 466 466 1 0.0000000 2.6790000 29.4670000 21.4310000 + 467 467 1 0.0000000 2.6790000 29.4670000 26.7880000 + 468 468 1 0.0000000 2.6790000 29.4670000 32.1460000 + 469 469 1 0.0000000 8.0360000 2.6790000 5.3580000 + 470 470 1 0.0000000 8.0360000 2.6790000 10.7150000 + 471 471 1 0.0000000 8.0360000 2.6790000 16.0730000 + 472 472 1 0.0000000 8.0360000 2.6790000 21.4310000 + 473 473 1 0.0000000 8.0360000 2.6790000 26.7880000 + 474 474 1 0.0000000 8.0360000 2.6790000 32.1460000 + 475 475 1 0.0000000 8.0360000 8.0360000 5.3580000 + 476 476 1 0.0000000 8.0360000 8.0360000 10.7150000 + 477 477 1 0.0000000 8.0360000 8.0360000 16.0730000 + 478 478 1 0.0000000 8.0360000 8.0360000 21.4310000 + 479 479 1 0.0000000 8.0360000 8.0360000 26.7880000 + 480 480 1 0.0000000 8.0360000 8.0360000 32.1460000 + 481 481 1 0.0000000 8.0360000 13.3940000 5.3580000 + 482 482 1 0.0000000 8.0360000 13.3940000 10.7150000 + 483 483 1 0.0000000 8.0360000 13.3940000 16.0730000 + 484 484 1 0.0000000 8.0360000 13.3940000 21.4310000 + 485 485 1 0.0000000 8.0360000 13.3940000 26.7880000 + 486 486 1 0.0000000 8.0360000 13.3940000 32.1460000 + 487 487 1 0.0000000 8.0360000 18.7520000 5.3580000 + 488 488 1 0.0000000 8.0360000 18.7520000 10.7150000 + 489 489 1 0.0000000 8.0360000 18.7520000 16.0730000 + 490 490 1 0.0000000 8.0360000 18.7520000 21.4310000 + 491 491 1 0.0000000 8.0360000 18.7520000 26.7880000 + 492 492 1 0.0000000 8.0360000 18.7520000 32.1460000 + 493 493 1 0.0000000 8.0360000 24.1090000 5.3580000 + 494 494 1 0.0000000 8.0360000 24.1090000 10.7150000 + 495 495 1 0.0000000 8.0360000 24.1090000 16.0730000 + 496 496 1 0.0000000 8.0360000 24.1090000 21.4310000 + 497 497 1 0.0000000 8.0360000 24.1090000 26.7880000 + 498 498 1 0.0000000 8.0360000 24.1090000 32.1460000 + 499 499 1 0.0000000 8.0360000 29.4670000 5.3580000 + 500 500 1 0.0000000 8.0360000 29.4670000 10.7150000 + 501 501 1 0.0000000 8.0360000 29.4670000 16.0730000 + 502 502 1 0.0000000 8.0360000 29.4670000 21.4310000 + 503 503 1 0.0000000 8.0360000 29.4670000 26.7880000 + 504 504 1 0.0000000 8.0360000 29.4670000 32.1460000 + 505 505 1 0.0000000 13.3940000 2.6790000 5.3580000 + 506 506 1 0.0000000 13.3940000 2.6790000 10.7150000 + 507 507 1 0.0000000 13.3940000 2.6790000 16.0730000 + 508 508 1 0.0000000 13.3940000 2.6790000 21.4310000 + 509 509 1 0.0000000 13.3940000 2.6790000 26.7880000 + 510 510 1 0.0000000 13.3940000 2.6790000 32.1460000 + 511 511 1 0.0000000 13.3940000 8.0360000 5.3580000 + 512 512 1 0.0000000 13.3940000 8.0360000 10.7150000 + 513 513 1 0.0000000 13.3940000 8.0360000 16.0730000 + 514 514 1 0.0000000 13.3940000 8.0360000 21.4310000 + 515 515 1 0.0000000 13.3940000 8.0360000 26.7880000 + 516 516 1 0.0000000 13.3940000 8.0360000 32.1460000 + 517 517 1 0.0000000 13.3940000 13.3940000 5.3580000 + 518 518 1 0.0000000 13.3940000 13.3940000 10.7150000 + 519 519 1 0.0000000 13.3940000 13.3940000 16.0730000 + 520 520 1 0.0000000 13.3940000 13.3940000 21.4310000 + 521 521 1 0.0000000 13.3940000 13.3940000 26.7880000 + 522 522 1 0.0000000 13.3940000 13.3940000 32.1460000 + 523 523 1 0.0000000 13.3940000 18.7520000 5.3580000 + 524 524 1 0.0000000 13.3940000 18.7520000 10.7150000 + 525 525 1 0.0000000 13.3940000 18.7520000 16.0730000 + 526 526 1 0.0000000 13.3940000 18.7520000 21.4310000 + 527 527 1 0.0000000 13.3940000 18.7520000 26.7880000 + 528 528 1 0.0000000 13.3940000 18.7520000 32.1460000 + 529 529 1 0.0000000 13.3940000 24.1090000 5.3580000 + 530 530 1 0.0000000 13.3940000 24.1090000 10.7150000 + 531 531 1 0.0000000 13.3940000 24.1090000 16.0730000 + 532 532 1 0.0000000 13.3940000 24.1090000 21.4310000 + 533 533 1 0.0000000 13.3940000 24.1090000 26.7880000 + 534 534 1 0.0000000 13.3940000 24.1090000 32.1460000 + 535 535 1 0.0000000 13.3940000 29.4670000 5.3580000 + 536 536 1 0.0000000 13.3940000 29.4670000 10.7150000 + 537 537 1 0.0000000 13.3940000 29.4670000 16.0730000 + 538 538 1 0.0000000 13.3940000 29.4670000 21.4310000 + 539 539 1 0.0000000 13.3940000 29.4670000 26.7880000 + 540 540 1 0.0000000 13.3940000 29.4670000 32.1460000 + 541 541 1 0.0000000 18.7520000 2.6790000 5.3580000 + 542 542 1 0.0000000 18.7520000 2.6790000 10.7150000 + 543 543 1 0.0000000 18.7520000 2.6790000 16.0730000 + 544 544 1 0.0000000 18.7520000 2.6790000 21.4310000 + 545 545 1 0.0000000 18.7520000 2.6790000 26.7880000 + 546 546 1 0.0000000 18.7520000 2.6790000 32.1460000 + 547 547 1 0.0000000 18.7520000 8.0360000 5.3580000 + 548 548 1 0.0000000 18.7520000 8.0360000 10.7150000 + 549 549 1 0.0000000 18.7520000 8.0360000 16.0730000 + 550 550 1 0.0000000 18.7520000 8.0360000 21.4310000 + 551 551 1 0.0000000 18.7520000 8.0360000 26.7880000 + 552 552 1 0.0000000 18.7520000 8.0360000 32.1460000 + 553 553 1 0.0000000 18.7520000 13.3940000 5.3580000 + 554 554 1 0.0000000 18.7520000 13.3940000 10.7150000 + 555 555 1 0.0000000 18.7520000 13.3940000 16.0730000 + 556 556 1 0.0000000 18.7520000 13.3940000 21.4310000 + 557 557 1 0.0000000 18.7520000 13.3940000 26.7880000 + 558 558 1 0.0000000 18.7520000 13.3940000 32.1460000 + 559 559 1 0.0000000 18.7520000 18.7520000 5.3580000 + 560 560 1 0.0000000 18.7520000 18.7520000 10.7150000 + 561 561 1 0.0000000 18.7520000 18.7520000 16.0730000 + 562 562 1 0.0000000 18.7520000 18.7520000 21.4310000 + 563 563 1 0.0000000 18.7520000 18.7520000 26.7880000 + 564 564 1 0.0000000 18.7520000 18.7520000 32.1460000 + 565 565 1 0.0000000 18.7520000 24.1090000 5.3580000 + 566 566 1 0.0000000 18.7520000 24.1090000 10.7150000 + 567 567 1 0.0000000 18.7520000 24.1090000 16.0730000 + 568 568 1 0.0000000 18.7520000 24.1090000 21.4310000 + 569 569 1 0.0000000 18.7520000 24.1090000 26.7880000 + 570 570 1 0.0000000 18.7520000 24.1090000 32.1460000 + 571 571 1 0.0000000 18.7520000 29.4670000 5.3580000 + 572 572 1 0.0000000 18.7520000 29.4670000 10.7150000 + 573 573 1 0.0000000 18.7520000 29.4670000 16.0730000 + 574 574 1 0.0000000 18.7520000 29.4670000 21.4310000 + 575 575 1 0.0000000 18.7520000 29.4670000 26.7880000 + 576 576 1 0.0000000 18.7520000 29.4670000 32.1460000 + 577 577 1 0.0000000 24.1090000 2.6790000 5.3580000 + 578 578 1 0.0000000 24.1090000 2.6790000 10.7150000 + 579 579 1 0.0000000 24.1090000 2.6790000 16.0730000 + 580 580 1 0.0000000 24.1090000 2.6790000 21.4310000 + 581 581 1 0.0000000 24.1090000 2.6790000 26.7880000 + 582 582 1 0.0000000 24.1090000 2.6790000 32.1460000 + 583 583 1 0.0000000 24.1090000 8.0360000 5.3580000 + 584 584 1 0.0000000 24.1090000 8.0360000 10.7150000 + 585 585 1 0.0000000 24.1090000 8.0360000 16.0730000 + 586 586 1 0.0000000 24.1090000 8.0360000 21.4310000 + 587 587 1 0.0000000 24.1090000 8.0360000 26.7880000 + 588 588 1 0.0000000 24.1090000 8.0360000 32.1460000 + 589 589 1 0.0000000 24.1090000 13.3940000 5.3580000 + 590 590 1 0.0000000 24.1090000 13.3940000 10.7150000 + 591 591 1 0.0000000 24.1090000 13.3940000 16.0730000 + 592 592 1 0.0000000 24.1090000 13.3940000 21.4310000 + 593 593 1 0.0000000 24.1090000 13.3940000 26.7880000 + 594 594 1 0.0000000 24.1090000 13.3940000 32.1460000 + 595 595 1 0.0000000 24.1090000 18.7520000 5.3580000 + 596 596 1 0.0000000 24.1090000 18.7520000 10.7150000 + 597 597 1 0.0000000 24.1090000 18.7520000 16.0730000 + 598 598 1 0.0000000 24.1090000 18.7520000 21.4310000 + 599 599 1 0.0000000 24.1090000 18.7520000 26.7880000 + 600 600 1 0.0000000 24.1090000 18.7520000 32.1460000 + 601 601 1 0.0000000 24.1090000 24.1090000 5.3580000 + 602 602 1 0.0000000 24.1090000 24.1090000 10.7150000 + 603 603 1 0.0000000 24.1090000 24.1090000 16.0730000 + 604 604 1 0.0000000 24.1090000 24.1090000 21.4310000 + 605 605 1 0.0000000 24.1090000 24.1090000 26.7880000 + 606 606 1 0.0000000 24.1090000 24.1090000 32.1460000 + 607 607 1 0.0000000 24.1090000 29.4670000 5.3580000 + 608 608 1 0.0000000 24.1090000 29.4670000 10.7150000 + 609 609 1 0.0000000 24.1090000 29.4670000 16.0730000 + 610 610 1 0.0000000 24.1090000 29.4670000 21.4310000 + 611 611 1 0.0000000 24.1090000 29.4670000 26.7880000 + 612 612 1 0.0000000 24.1090000 29.4670000 32.1460000 + 613 613 1 0.0000000 29.4670000 2.6790000 5.3580000 + 614 614 1 0.0000000 29.4670000 2.6790000 10.7150000 + 615 615 1 0.0000000 29.4670000 2.6790000 16.0730000 + 616 616 1 0.0000000 29.4670000 2.6790000 21.4310000 + 617 617 1 0.0000000 29.4670000 2.6790000 26.7880000 + 618 618 1 0.0000000 29.4670000 2.6790000 32.1460000 + 619 619 1 0.0000000 29.4670000 8.0360000 5.3580000 + 620 620 1 0.0000000 29.4670000 8.0360000 10.7150000 + 621 621 1 0.0000000 29.4670000 8.0360000 16.0730000 + 622 622 1 0.0000000 29.4670000 8.0360000 21.4310000 + 623 623 1 0.0000000 29.4670000 8.0360000 26.7880000 + 624 624 1 0.0000000 29.4670000 8.0360000 32.1460000 + 625 625 1 0.0000000 29.4670000 13.3940000 5.3580000 + 626 626 1 0.0000000 29.4670000 13.3940000 10.7150000 + 627 627 1 0.0000000 29.4670000 13.3940000 16.0730000 + 628 628 1 0.0000000 29.4670000 13.3940000 21.4310000 + 629 629 1 0.0000000 29.4670000 13.3940000 26.7880000 + 630 630 1 0.0000000 29.4670000 13.3940000 32.1460000 + 631 631 1 0.0000000 29.4670000 18.7520000 5.3580000 + 632 632 1 0.0000000 29.4670000 18.7520000 10.7150000 + 633 633 1 0.0000000 29.4670000 18.7520000 16.0730000 + 634 634 1 0.0000000 29.4670000 18.7520000 21.4310000 + 635 635 1 0.0000000 29.4670000 18.7520000 26.7880000 + 636 636 1 0.0000000 29.4670000 18.7520000 32.1460000 + 637 637 1 0.0000000 29.4670000 24.1090000 5.3580000 + 638 638 1 0.0000000 29.4670000 24.1090000 10.7150000 + 639 639 1 0.0000000 29.4670000 24.1090000 16.0730000 + 640 640 1 0.0000000 29.4670000 24.1090000 21.4310000 + 641 641 1 0.0000000 29.4670000 24.1090000 26.7880000 + 642 642 1 0.0000000 29.4670000 24.1090000 32.1460000 + 643 643 1 0.0000000 29.4670000 29.4670000 5.3580000 + 644 644 1 0.0000000 29.4670000 29.4670000 10.7150000 + 645 645 1 0.0000000 29.4670000 29.4670000 16.0730000 + 646 646 1 0.0000000 29.4670000 29.4670000 21.4310000 + 647 647 1 0.0000000 29.4670000 29.4670000 26.7880000 + 648 648 1 0.0000000 29.4670000 29.4670000 32.1460000 + 649 649 1 0.0000000 0.0000000 5.3580000 5.3580000 + 650 650 1 0.0000000 0.0000000 5.3580000 10.7150000 + 651 651 1 0.0000000 0.0000000 5.3580000 16.0730000 + 652 652 1 0.0000000 0.0000000 5.3580000 21.4310000 + 653 653 1 0.0000000 0.0000000 5.3580000 26.7880000 + 654 654 1 0.0000000 0.0000000 5.3580000 32.1460000 + 655 655 1 0.0000000 0.0000000 10.7150000 5.3580000 + 656 656 1 0.0000000 0.0000000 10.7150000 10.7150000 + 657 657 1 0.0000000 0.0000000 10.7150000 16.0730000 + 658 658 1 0.0000000 0.0000000 10.7150000 21.4310000 + 659 659 1 0.0000000 0.0000000 10.7150000 26.7880000 + 660 660 1 0.0000000 0.0000000 10.7150000 32.1460000 + 661 661 1 0.0000000 0.0000000 16.0730000 5.3580000 + 662 662 1 0.0000000 0.0000000 16.0730000 10.7150000 + 663 663 1 0.0000000 0.0000000 16.0730000 16.0730000 + 664 664 1 0.0000000 0.0000000 16.0730000 21.4310000 + 665 665 1 0.0000000 0.0000000 16.0730000 26.7880000 + 666 666 1 0.0000000 0.0000000 16.0730000 32.1460000 + 667 667 1 0.0000000 0.0000000 21.4310000 5.3580000 + 668 668 1 0.0000000 0.0000000 21.4310000 10.7150000 + 669 669 1 0.0000000 0.0000000 21.4310000 16.0730000 + 670 670 1 0.0000000 0.0000000 21.4310000 21.4310000 + 671 671 1 0.0000000 0.0000000 21.4310000 26.7880000 + 672 672 1 0.0000000 0.0000000 21.4310000 32.1460000 + 673 673 1 0.0000000 0.0000000 26.7880000 5.3580000 + 674 674 1 0.0000000 0.0000000 26.7880000 10.7150000 + 675 675 1 0.0000000 0.0000000 26.7880000 16.0730000 + 676 676 1 0.0000000 0.0000000 26.7880000 21.4310000 + 677 677 1 0.0000000 0.0000000 26.7880000 26.7880000 + 678 678 1 0.0000000 0.0000000 26.7880000 32.1460000 + 679 679 1 0.0000000 0.0000000 32.1460000 5.3580000 + 680 680 1 0.0000000 0.0000000 32.1460000 10.7150000 + 681 681 1 0.0000000 0.0000000 32.1460000 16.0730000 + 682 682 1 0.0000000 0.0000000 32.1460000 21.4310000 + 683 683 1 0.0000000 0.0000000 32.1460000 26.7880000 + 684 684 1 0.0000000 0.0000000 32.1460000 32.1460000 + 685 685 1 0.0000000 5.3580000 5.3580000 5.3580000 + 686 686 1 0.0000000 5.3580000 5.3580000 10.7150000 + 687 687 1 0.0000000 5.3580000 5.3580000 16.0730000 + 688 688 1 0.0000000 5.3580000 5.3580000 21.4310000 + 689 689 1 0.0000000 5.3580000 5.3580000 26.7880000 + 690 690 1 0.0000000 5.3580000 5.3580000 32.1460000 + 691 691 1 0.0000000 5.3580000 10.7150000 5.3580000 + 692 692 1 0.0000000 5.3580000 10.7150000 10.7150000 + 693 693 1 0.0000000 5.3580000 10.7150000 16.0730000 + 694 694 1 0.0000000 5.3580000 10.7150000 21.4310000 + 695 695 1 0.0000000 5.3580000 10.7150000 26.7880000 + 696 696 1 0.0000000 5.3580000 10.7150000 32.1460000 + 697 697 1 0.0000000 5.3580000 16.0730000 5.3580000 + 698 698 1 0.0000000 5.3580000 16.0730000 10.7150000 + 699 699 1 0.0000000 5.3580000 16.0730000 16.0730000 + 700 700 1 0.0000000 5.3580000 16.0730000 21.4310000 + 701 701 1 0.0000000 5.3580000 16.0730000 26.7880000 + 702 702 1 0.0000000 5.3580000 16.0730000 32.1460000 + 703 703 1 0.0000000 5.3580000 21.4310000 5.3580000 + 704 704 1 0.0000000 5.3580000 21.4310000 10.7150000 + 705 705 1 0.0000000 5.3580000 21.4310000 16.0730000 + 706 706 1 0.0000000 5.3580000 21.4310000 21.4310000 + 707 707 1 0.0000000 5.3580000 21.4310000 26.7880000 + 708 708 1 0.0000000 5.3580000 21.4310000 32.1460000 + 709 709 1 0.0000000 5.3580000 26.7880000 5.3580000 + 710 710 1 0.0000000 5.3580000 26.7880000 10.7150000 + 711 711 1 0.0000000 5.3580000 26.7880000 16.0730000 + 712 712 1 0.0000000 5.3580000 26.7880000 21.4310000 + 713 713 1 0.0000000 5.3580000 26.7880000 26.7880000 + 714 714 1 0.0000000 5.3580000 26.7880000 32.1460000 + 715 715 1 0.0000000 5.3580000 32.1460000 5.3580000 + 716 716 1 0.0000000 5.3580000 32.1460000 10.7150000 + 717 717 1 0.0000000 5.3580000 32.1460000 16.0730000 + 718 718 1 0.0000000 5.3580000 32.1460000 21.4310000 + 719 719 1 0.0000000 5.3580000 32.1460000 26.7880000 + 720 720 1 0.0000000 5.3580000 32.1460000 32.1460000 + 721 721 1 0.0000000 10.7150000 5.3580000 5.3580000 + 722 722 1 0.0000000 10.7150000 5.3580000 10.7150000 + 723 723 1 0.0000000 10.7150000 5.3580000 16.0730000 + 724 724 1 0.0000000 10.7150000 5.3580000 21.4310000 + 725 725 1 0.0000000 10.7150000 5.3580000 26.7880000 + 726 726 1 0.0000000 10.7150000 5.3580000 32.1460000 + 727 727 1 0.0000000 10.7150000 10.7150000 5.3580000 + 728 728 1 0.0000000 10.7150000 10.7150000 10.7150000 + 729 729 1 0.0000000 10.7150000 10.7150000 16.0730000 + 730 730 1 0.0000000 10.7150000 10.7150000 21.4310000 + 731 731 1 0.0000000 10.7150000 10.7150000 26.7880000 + 732 732 1 0.0000000 10.7150000 10.7150000 32.1460000 + 733 733 1 0.0000000 10.7150000 16.0730000 5.3580000 + 734 734 1 0.0000000 10.7150000 16.0730000 10.7150000 + 735 735 1 0.0000000 10.7150000 16.0730000 16.0730000 + 736 736 1 0.0000000 10.7150000 16.0730000 21.4310000 + 737 737 1 0.0000000 10.7150000 16.0730000 26.7880000 + 738 738 1 0.0000000 10.7150000 16.0730000 32.1460000 + 739 739 1 0.0000000 10.7150000 21.4310000 5.3580000 + 740 740 1 0.0000000 10.7150000 21.4310000 10.7150000 + 741 741 1 0.0000000 10.7150000 21.4310000 16.0730000 + 742 742 1 0.0000000 10.7150000 21.4310000 21.4310000 + 743 743 1 0.0000000 10.7150000 21.4310000 26.7880000 + 744 744 1 0.0000000 10.7150000 21.4310000 32.1460000 + 745 745 1 0.0000000 10.7150000 26.7880000 5.3580000 + 746 746 1 0.0000000 10.7150000 26.7880000 10.7150000 + 747 747 1 0.0000000 10.7150000 26.7880000 16.0730000 + 748 748 1 0.0000000 10.7150000 26.7880000 21.4310000 + 749 749 1 0.0000000 10.7150000 26.7880000 26.7880000 + 750 750 1 0.0000000 10.7150000 26.7880000 32.1460000 + 751 751 1 0.0000000 10.7150000 32.1460000 5.3580000 + 752 752 1 0.0000000 10.7150000 32.1460000 10.7150000 + 753 753 1 0.0000000 10.7150000 32.1460000 16.0730000 + 754 754 1 0.0000000 10.7150000 32.1460000 21.4310000 + 755 755 1 0.0000000 10.7150000 32.1460000 26.7880000 + 756 756 1 0.0000000 10.7150000 32.1460000 32.1460000 + 757 757 1 0.0000000 16.0730000 5.3580000 5.3580000 + 758 758 1 0.0000000 16.0730000 5.3580000 10.7150000 + 759 759 1 0.0000000 16.0730000 5.3580000 16.0730000 + 760 760 1 0.0000000 16.0730000 5.3580000 21.4310000 + 761 761 1 0.0000000 16.0730000 5.3580000 26.7880000 + 762 762 1 0.0000000 16.0730000 5.3580000 32.1460000 + 763 763 1 0.0000000 16.0730000 10.7150000 5.3580000 + 764 764 1 0.0000000 16.0730000 10.7150000 10.7150000 + 765 765 1 0.0000000 16.0730000 10.7150000 16.0730000 + 766 766 1 0.0000000 16.0730000 10.7150000 21.4310000 + 767 767 1 0.0000000 16.0730000 10.7150000 26.7880000 + 768 768 1 0.0000000 16.0730000 10.7150000 32.1460000 + 769 769 1 0.0000000 16.0730000 16.0730000 5.3580000 + 770 770 1 0.0000000 16.0730000 16.0730000 10.7150000 + 771 771 1 0.0000000 16.0730000 16.0730000 16.0730000 + 772 772 1 0.0000000 16.0730000 16.0730000 21.4310000 + 773 773 1 0.0000000 16.0730000 16.0730000 26.7880000 + 774 774 1 0.0000000 16.0730000 16.0730000 32.1460000 + 775 775 1 0.0000000 16.0730000 21.4310000 5.3580000 + 776 776 1 0.0000000 16.0730000 21.4310000 10.7150000 + 777 777 1 0.0000000 16.0730000 21.4310000 16.0730000 + 778 778 1 0.0000000 16.0730000 21.4310000 21.4310000 + 779 779 1 0.0000000 16.0730000 21.4310000 26.7880000 + 780 780 1 0.0000000 16.0730000 21.4310000 32.1460000 + 781 781 1 0.0000000 16.0730000 26.7880000 5.3580000 + 782 782 1 0.0000000 16.0730000 26.7880000 10.7150000 + 783 783 1 0.0000000 16.0730000 26.7880000 16.0730000 + 784 784 1 0.0000000 16.0730000 26.7880000 21.4310000 + 785 785 1 0.0000000 16.0730000 26.7880000 26.7880000 + 786 786 1 0.0000000 16.0730000 26.7880000 32.1460000 + 787 787 1 0.0000000 16.0730000 32.1460000 5.3580000 + 788 788 1 0.0000000 16.0730000 32.1460000 10.7150000 + 789 789 1 0.0000000 16.0730000 32.1460000 16.0730000 + 790 790 1 0.0000000 16.0730000 32.1460000 21.4310000 + 791 791 1 0.0000000 16.0730000 32.1460000 26.7880000 + 792 792 1 0.0000000 16.0730000 32.1460000 32.1460000 + 793 793 1 0.0000000 21.4310000 5.3580000 5.3580000 + 794 794 1 0.0000000 21.4310000 5.3580000 10.7150000 + 795 795 1 0.0000000 21.4310000 5.3580000 16.0730000 + 796 796 1 0.0000000 21.4310000 5.3580000 21.4310000 + 797 797 1 0.0000000 21.4310000 5.3580000 26.7880000 + 798 798 1 0.0000000 21.4310000 5.3580000 32.1460000 + 799 799 1 0.0000000 21.4310000 10.7150000 5.3580000 + 800 800 1 0.0000000 21.4310000 10.7150000 10.7150000 + 801 801 1 0.0000000 21.4310000 10.7150000 16.0730000 + 802 802 1 0.0000000 21.4310000 10.7150000 21.4310000 + 803 803 1 0.0000000 21.4310000 10.7150000 26.7880000 + 804 804 1 0.0000000 21.4310000 10.7150000 32.1460000 + 805 805 1 0.0000000 21.4310000 16.0730000 5.3580000 + 806 806 1 0.0000000 21.4310000 16.0730000 10.7150000 + 807 807 1 0.0000000 21.4310000 16.0730000 16.0730000 + 808 808 1 0.0000000 21.4310000 16.0730000 21.4310000 + 809 809 1 0.0000000 21.4310000 16.0730000 26.7880000 + 810 810 1 0.0000000 21.4310000 16.0730000 32.1460000 + 811 811 1 0.0000000 21.4310000 21.4310000 5.3580000 + 812 812 1 0.0000000 21.4310000 21.4310000 10.7150000 + 813 813 1 0.0000000 21.4310000 21.4310000 16.0730000 + 814 814 1 0.0000000 21.4310000 21.4310000 21.4310000 + 815 815 1 0.0000000 21.4310000 21.4310000 26.7880000 + 816 816 1 0.0000000 21.4310000 21.4310000 32.1460000 + 817 817 1 0.0000000 21.4310000 26.7880000 5.3580000 + 818 818 1 0.0000000 21.4310000 26.7880000 10.7150000 + 819 819 1 0.0000000 21.4310000 26.7880000 16.0730000 + 820 820 1 0.0000000 21.4310000 26.7880000 21.4310000 + 821 821 1 0.0000000 21.4310000 26.7880000 26.7880000 + 822 822 1 0.0000000 21.4310000 26.7880000 32.1460000 + 823 823 1 0.0000000 21.4310000 32.1460000 5.3580000 + 824 824 1 0.0000000 21.4310000 32.1460000 10.7150000 + 825 825 1 0.0000000 21.4310000 32.1460000 16.0730000 + 826 826 1 0.0000000 21.4310000 32.1460000 21.4310000 + 827 827 1 0.0000000 21.4310000 32.1460000 26.7880000 + 828 828 1 0.0000000 21.4310000 32.1460000 32.1460000 + 829 829 1 0.0000000 26.7880000 5.3580000 5.3580000 + 830 830 1 0.0000000 26.7880000 5.3580000 10.7150000 + 831 831 1 0.0000000 26.7880000 5.3580000 16.0730000 + 832 832 1 0.0000000 26.7880000 5.3580000 21.4310000 + 833 833 1 0.0000000 26.7880000 5.3580000 26.7880000 + 834 834 1 0.0000000 26.7880000 5.3580000 32.1460000 + 835 835 1 0.0000000 26.7880000 10.7150000 5.3580000 + 836 836 1 0.0000000 26.7880000 10.7150000 10.7150000 + 837 837 1 0.0000000 26.7880000 10.7150000 16.0730000 + 838 838 1 0.0000000 26.7880000 10.7150000 21.4310000 + 839 839 1 0.0000000 26.7880000 10.7150000 26.7880000 + 840 840 1 0.0000000 26.7880000 10.7150000 32.1460000 + 841 841 1 0.0000000 26.7880000 16.0730000 5.3580000 + 842 842 1 0.0000000 26.7880000 16.0730000 10.7150000 + 843 843 1 0.0000000 26.7880000 16.0730000 16.0730000 + 844 844 1 0.0000000 26.7880000 16.0730000 21.4310000 + 845 845 1 0.0000000 26.7880000 16.0730000 26.7880000 + 846 846 1 0.0000000 26.7880000 16.0730000 32.1460000 + 847 847 1 0.0000000 26.7880000 21.4310000 5.3580000 + 848 848 1 0.0000000 26.7880000 21.4310000 10.7150000 + 849 849 1 0.0000000 26.7880000 21.4310000 16.0730000 + 850 850 1 0.0000000 26.7880000 21.4310000 21.4310000 + 851 851 1 0.0000000 26.7880000 21.4310000 26.7880000 + 852 852 1 0.0000000 26.7880000 21.4310000 32.1460000 + 853 853 1 0.0000000 26.7880000 26.7880000 5.3580000 + 854 854 1 0.0000000 26.7880000 26.7880000 10.7150000 + 855 855 1 0.0000000 26.7880000 26.7880000 16.0730000 + 856 856 1 0.0000000 26.7880000 26.7880000 21.4310000 + 857 857 1 0.0000000 26.7880000 26.7880000 26.7880000 + 858 858 1 0.0000000 26.7880000 26.7880000 32.1460000 + 859 859 1 0.0000000 26.7880000 32.1460000 5.3580000 + 860 860 1 0.0000000 26.7880000 32.1460000 10.7150000 + 861 861 1 0.0000000 26.7880000 32.1460000 16.0730000 + 862 862 1 0.0000000 26.7880000 32.1460000 21.4310000 + 863 863 1 0.0000000 26.7880000 32.1460000 26.7880000 + 864 864 1 0.0000000 26.7880000 32.1460000 32.1460000 + diff --git a/examples/gjf/ff-argon.lmp b/examples/gjf/ff-argon.lmp new file mode 100644 index 0000000000..b6f7bc931a --- /dev/null +++ b/examples/gjf/ff-argon.lmp @@ -0,0 +1,20 @@ +############################# +#Atoms types - mass - charge# +############################# +#@ 1 atom types #!THIS LINE IS NECESSARY DON'T SPEND HOURS FINDING THAT OUT!# + +variable Ar equal 1 + +############# +#Atom Masses# +############# + +mass ${Ar} 39.903 + +########################### +#Pair Potentials - Tersoff# +########################### + +pair_style lj/cubic +pair_coeff * * 0.0102701 3.42 + diff --git a/examples/gjf/in.argon b/examples/gjf/in.argon new file mode 100644 index 0000000000..271882c665 --- /dev/null +++ b/examples/gjf/in.argon @@ -0,0 +1,162 @@ +###############################mm +# Atom style - charge/vdw/bonded# +################################# +atom_style full + +############################################## +#Units Metal : eV - ps - angstrom - bar# +# Real : kcal/mol - fs - angstrom - atm# +############################################## +units metal + +############ +#Run number# +############ +variable run_no equal 0 # is it a restart? +variable res_no equal ${run_no}-1 # restart file number + +####################################### +#Random Seeds and Domain Decomposition# +####################################### +variable iseed0 equal 2357 +variable iseed1 equal 26488 +variable iseed2 equal 10669 +processors * * * + +########### +#Data File# +########### +variable inpfile string argon.lmp +variable resfile string final_restart.${res_no} +variable ff_file string ff-argon.lmp + +########## +#Run Type# +########## +variable minimise equal 0 #Energy Minimization +variable md equal 1 #Plain MD + +############################### +#Molecular Dynamics Parameters# +############################### +variable run_no equal 0 # is it a restart? + +variable ens equal 9 # ensemble (0=nve, 1=nvt, 2=npt, 3=ber, 4=lang, 5=stoc, 6=vres, 7=stoch, 8=gjf) +variable ts equal 0.120 # simulation timestep (time units) +variable nequil equal 0 # number of equilibration steps +variable nsteps equal 200000 # number of MD steps +#variable nsteps equal 20 # number of MD steps + +variable temp_s equal 10 # starting temperature +variable temp_f equal 10 # final simulation temperature +variable trel equal 1 # thermostat relaxation time +variable tscale equal 1 # thermostat relaxation freq - vel rescaling only +variable deltat equal 1 # maximum temperature change - vel rescaling only + +variable npttype string iso # type of NPT (iso, aniso, tri, z...) +variable pres equal 1.01325 # pressure (NPT runs only) +variable prel equal 1.0 # barostat relaxation time + +neighbor 1 bin + +################### +#Output Parameters# +################### +variable ntraj equal 1000 # trajectory output frequency - all system +variable ntraj_s equal -100 # trajectory output frequency - solute only +variable nthermo equal 200 # thermodynamic data output frequency + +################################ +#Energy Minimization Parameters# +################################ +variable mtraj equal 1 # trajectory output frequency - all system +variable etol equal 1e-5 # % change in energy +variable ftol equal 1e-5 # max force threshold (force units) +variable maxiter equal 10000 # max # of iterations + +######################## +#3D Periodic Simulation# +######################## +boundary p p p + +############################# +#Reading the input structure# +############################# +if "${run_no} == 0" then "read_data ${inpfile}" else "read_restart ${resfile}" + +############# +#Force Field# +############# +include ${ff_file} + +###################### +#Thermodynamic Output# +###################### +variable str_basic string 'step time pe temp press' + +#MD ensemble (0=nve, 1=nvt, 2=npt, 3=ber, 4=lang, 5=stoc, 6=vres) +variable str_ens string ' ' +if "${ens} == 0" then "variable str_ens string 'etotal'" +if "${ens} == 2" then "variable str_ens string 'vol pxx pyy pzz cella cellb cellc cellakpha cellbeta cellgamma'" + +#Variable for a gulp friend output +if "${ens} >= 0" then "thermo_style custom time temp pe etotal press vol cpu" & + "thermo ${nthermo}" & + "thermo_modify flush yes" + +##################### +#Energy Minimization# +##################### +if "${minimise} <= 0 || ${run_no} > 0" then "jump SELF end_minimise" + print "Doing CG minimisation" + dump mdcd all dcd ${mtraj} min.dcd + dump_modify mdcd unwrap yes + min_style cg + min_modify line quadratic + minimize ${etol} ${ftol} ${maxiter} ${maxiter} + reset_timestep 0 + undump mdcd +label end_minimise + +################ +#Timestep in ps# +################ +timestep ${ts} + +############## +#Restart file# +############## +restart 100000 restart.1 restart.2 + +################### +#Trajectory output# +################### +#dump xyz all atom 1000 silicon.lammpstrj + +if "${ntraj} > 0" then & + "dump 1 all dcd ${ntraj} trajectory.${run_no}.dcd" & + "dump_modify 1 unwrap yes" + +fix mom all momentum 1 linear 1 1 1 + +############################################################### +#Ensembles (0=nve,1=nvt, 2=npt, 3=ber, 4=lang, 5=stoc, 6=vres)# +############################################################### +if "${md} > 0" then 'print "Setting up the ensembles"' & + 'if "${run_no} == 0" then "velocity all create ${temp_s} ${iseed0} mom yes dist gaussian"' & + 'if "${ens} == 0" then "fix nve all nve"' & + 'if "${ens} == 1" then "fix nvt all nvt temp ${temp_s} ${temp_f} ${trel} tchain 5"' & + 'if "${ens} == 2" then "fix npt all npt temp ${temp_s} ${temp_f} ${trel} ${npttype} ${pres} ${pres} ${prel} tchain 5 pchain 5 mtk yes"' & + 'if "${ens} == 3" then "fix nve all nve" "fix ber all temp/berendsen ${temp_s} ${temp_f} ${trel}"' & + 'if "${ens} == 4" then "fix nve all nve" "fix lang all langevin ${temp_s} ${temp_f} ${trel} ${iseed1} tally yes zero yes"' & + 'if "${ens} == 5" then "fix nve all nve" "fix stoch all temp/csvr ${temp_s} ${temp_f} ${trel} ${iseed1}"' & + 'if "${ens} == 6" then "fix nve all nve" "fix stoch all temp/csld ${temp_s} ${temp_f} ${trel} ${iseed1}"' & + 'if "${ens} == 7" then "fix nve all nve" "fix vres all temp/rescale ${tscale} ${temp_s} ${temp_f} ${tmin} ${tmax}"' & + 'if "${ens} == 8" then "fix nve all nve" "fix lang all langevin ${temp_s} ${temp_f} ${trel} ${iseed1} gjf yes"' & + 'if "${ens} == 9" then "fix nve all nve" "fix lang all langevin ${temp_s} ${temp_f} ${trel} ${iseed1} gjf yes halfstep yes"' + +if "${md} > 0" then "print 'Doing Molecular dynamics'" & + "run ${nsteps}" & + "write_restart final_restart.${run_no}" + + diff --git a/examples/gjf/out.argon b/examples/gjf/out.argon new file mode 100644 index 0000000000..8dda569157 --- /dev/null +++ b/examples/gjf/out.argon @@ -0,0 +1,249 @@ +LAMMPS (1 Feb 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +Reading data file ... + orthogonal box = (0 0 0) to (32.146 32.146 32.146) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 864 atoms +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors +Setting up the ensembles +WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) +WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) +WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) +WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) +Doing Molecular dynamics +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.94072 + ghost atom cutoff = 6.94072 + binsize = 3.47036, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cubic, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Setting up Verlet run ... + Unit style : metal + Current step : 0 + Time step : 0.12 +Per MPI rank memory allocation (min/avg/max) = 6.847 | 6.847 | 6.847 Mbytes +Time Temp PotEng TotEng Press Volume CPU + 0 10 -56.207655 -55.09214 33.340921 33218.561 0 + 24 10.156356 -55.092888 -53.959932 339.40964 33218.561 0.082175482 + 48 9.6121006 -55.07262 -54.000376 344.56765 33218.561 0.19529325 + 72 9.8187467 -55.16687 -54.071574 318.85979 33218.561 0.29643488 + 96 9.5421385 -55.151229 -54.086789 322.8842 33218.561 0.38801357 + 120 10.295035 -55.12919 -53.980763 332.00171 33218.561 0.47607262 + 144 10.331608 -55.09907 -53.946563 339.28896 33218.561 0.57389224 + 168 10.154698 -55.058246 -53.925475 349.03253 33218.561 0.65481471 + 192 9.858198 -55.127583 -54.027886 330.09298 33218.561 0.74437734 + 216 9.6658918 -55.10812 -54.029875 334.28383 33218.561 0.8278495 + 240 9.6801591 -55.102386 -54.02255 336.27242 33218.561 0.91167379 + 264 10.685658 -55.046238 -53.854237 355.0448 33218.561 1.0023789 + 288 10.387727 -55.08427 -53.925504 343.87247 33218.561 1.0960371 + 312 10.231132 -55.120428 -53.97913 333.22463 33218.561 1.2382998 + 336 10.20896 -55.075142 -53.936317 344.88438 33218.561 1.3420489 + 360 9.7876538 -55.165008 -54.07318 319.14962 33218.561 1.42782 + 384 9.9872551 -55.13881 -54.024717 327.82471 33218.561 1.5417666 + 408 9.5362734 -55.063733 -53.999947 346.50545 33218.561 1.6328366 + 432 10.262638 -55.126608 -53.981796 332.16342 33218.561 1.7242996 + 456 9.9228239 -55.122119 -54.015214 332.26261 33218.561 1.8124888 + 480 9.7026324 -55.17057 -54.088227 317.84818 33218.561 1.900233 + 504 10.028762 -55.082465 -53.963741 343.04257 33218.561 1.989605 + 528 9.8227851 -55.121222 -54.025476 332.42857 33218.561 2.0708802 + 552 10.208672 -55.100242 -53.961449 338.68109 33218.561 2.1527217 + 576 10.180849 -55.124065 -53.988376 331.29516 33218.561 2.238126 + 600 9.6467252 -55.119533 -54.043427 332.43109 33218.561 2.323443 + 624 10.041885 -55.173802 -54.053614 318.48579 33218.561 2.4046151 + 648 10.151597 -55.111725 -53.979299 334.66227 33218.561 2.4902161 + 672 9.7719111 -55.060111 -53.970039 348.55249 33218.561 2.5800372 + 696 10.476688 -55.088109 -53.919419 342.94922 33218.561 2.6731395 + 720 10.517805 -55.113604 -53.940327 335.47342 33218.561 2.760651 + 744 10.006466 -55.045085 -53.928848 353.53813 33218.561 2.8537894 + 768 10.201492 -55.081598 -53.943606 343.3206 33218.561 2.9404115 + 792 10.117738 -55.077806 -53.949157 345.31093 33218.561 3.030765 + 816 10.362288 -55.11635 -53.960421 333.9045 33218.561 3.1177356 + 840 10.204164 -55.097619 -53.959329 338.82717 33218.561 3.2091886 + 864 10.147722 -55.101372 -53.969378 338.19682 33218.561 3.3003742 + 888 9.9265037 -55.111394 -54.004077 334.08116 33218.561 3.395341 + 912 10.206403 -55.132181 -53.993642 328.89904 33218.561 3.4882881 + 936 10.28639 -55.093317 -53.945855 340.61244 33218.561 3.5764735 + 960 9.8028822 -55.078802 -53.985276 343.5904 33218.561 3.7056267 + 984 10.492755 -55.121321 -53.950839 334.62697 33218.561 3.8055611 + 1008 10.621569 -55.088588 -53.903736 343.33166 33218.561 3.9144807 + 1032 10.006729 -55.113459 -53.997193 334.43025 33218.561 4.0189888 + 1056 10.099853 -55.068035 -53.941381 347.42158 33218.561 4.1391664 + 1080 10.254232 -55.066685 -53.92281 347.15777 33218.561 4.2443953 + 1104 9.9495142 -55.13686 -54.026977 327.63107 33218.561 4.3368342 + 1128 10.377108 -55.08846 -53.930878 344.13083 33218.561 4.4287748 + 1152 10.036981 -55.114643 -53.995003 334.88053 33218.561 4.526868 + 1176 10.144779 -55.097125 -53.965459 339.698 33218.561 4.6614049 + 1200 10.075844 -55.14695 -54.022974 326.05911 33218.561 4.799835 + 1224 10.183695 -55.121716 -53.98571 332.75772 33218.561 4.8908897 + 1248 10.581369 -55.027954 -53.847587 359.06251 33218.561 4.9839788 + 1272 10.158269 -55.105173 -53.972003 337.52964 33218.561 5.0918646 + 1296 9.8776072 -55.064085 -53.962223 347.15648 33218.561 5.2291209 + 1320 10.38161 -55.118366 -53.960282 335.17767 33218.561 5.3570446 + 1344 9.9528146 -55.141937 -54.031685 326.27117 33218.561 5.4584705 + 1368 9.8024326 -55.117808 -54.024332 332.99835 33218.561 5.5557818 + 1392 10.35447 -55.110235 -53.955179 336.80412 33218.561 5.6467392 + 1416 10.199061 -55.105641 -53.96792 337.36785 33218.561 5.7476527 + 1440 9.6868779 -55.087316 -54.00673 340.9166 33218.561 5.8432207 + 1464 10.093238 -55.049436 -53.92352 352.27563 33218.561 5.9471521 + 1488 9.7578808 -55.123935 -54.035429 329.93926 33218.561 6.0495014 + 1512 10.099979 -55.205426 -54.078758 309.26166 33218.561 6.1612976 + 1536 10.172944 -55.087106 -53.952299 342.93395 33218.561 6.2506202 + 1560 10.51771 -55.107635 -53.934369 340.1967 33218.561 6.3379856 + 1584 10.044994 -55.101362 -53.980828 339.03163 33218.561 6.4362567 + 1608 9.624758 -55.146246 -54.07259 324.32486 33218.561 6.5385845 + 1632 9.9135215 -55.097278 -53.99141 338.69162 33218.561 6.6452786 + 1656 9.863681 -55.070523 -53.970214 345.84608 33218.561 6.7518212 + 1680 10.138513 -55.127065 -53.996099 330.40757 33218.561 6.8775188 + 1704 10.382237 -55.070572 -53.912417 347.074 33218.561 7.0126448 + 1728 10.72487 -55.081147 -53.884771 345.83623 33218.561 7.1384216 + 1752 9.829431 -55.131041 -54.034553 328.57652 33218.561 7.2616419 + 1776 9.9135662 -55.100556 -53.994682 336.52238 33218.561 7.4193201 + 1800 10.41873 -55.097116 -53.934891 340.24798 33218.561 7.5570544 + 1824 10.151782 -55.03231 -53.899864 357.3654 33218.561 7.6872905 + 1848 10.42307 -55.043808 -53.881099 355.71677 33218.561 7.7933885 + 1872 10.276862 -55.085016 -53.938616 344.46273 33218.561 7.8887472 + 1896 9.7681373 -55.146507 -54.056857 324.84323 33218.561 7.9977923 + 1920 9.6624824 -55.103214 -54.025349 336.06397 33218.561 8.090235 + 1944 10.153504 -55.049175 -53.916536 352.36339 33218.561 8.1923703 + 1968 10.191954 -55.098741 -53.961813 338.8667 33218.561 8.3320906 + 1992 9.92167 -55.117079 -54.010302 332.96497 33218.561 8.4774437 + 2016 9.5737281 -55.091141 -54.023178 339.41837 33218.561 8.6149527 + 2040 10.600908 -55.092717 -53.91017 342.71852 33218.561 8.7639523 + 2064 9.9214513 -55.099904 -53.993151 337.46799 33218.561 8.898087 + 2088 9.9256258 -55.082224 -53.975005 342.85042 33218.561 9.0130784 + 2112 10.345379 -55.112923 -53.95888 335.81471 33218.561 9.1422766 + 2136 9.8876649 -55.079254 -53.97627 343.05764 33218.561 9.2885707 + 2160 10.04492 -55.074876 -53.95435 344.82419 33218.561 9.3876103 + 2184 10.028705 -55.063961 -53.945244 347.70549 33218.561 9.500967 + 2208 10.412572 -55.136316 -53.974778 329.8188 33218.561 9.5900362 + 2232 10.404205 -55.09913 -53.938525 339.77542 33218.561 9.7048353 + 2256 9.5694135 -55.139021 -54.071538 326.37473 33218.561 9.8045958 + 2280 10.244745 -55.134529 -53.991713 329.19392 33218.561 9.8968908 + 2304 9.9129922 -55.116192 -54.010382 333.14326 33218.561 9.9818651 + 2328 10.167027 -55.08241 -53.948263 343.08135 33218.561 10.068683 + 2352 10.262045 -55.144327 -53.999581 327.40876 33218.561 10.155937 + 2376 10.520934 -55.073147 -53.899521 347.6998 33218.561 10.246316 + 2400 9.9628692 -55.122001 -54.010628 331.25369 33218.561 10.336833 + 2424 10.565531 -55.157113 -53.978512 325.14897 33218.561 10.452039 + 2448 10.03709 -55.096409 -53.976756 338.29607 33218.561 10.537936 + 2472 9.384311 -55.141821 -54.094987 324.23247 33218.561 10.628689 + 2496 9.8019362 -55.105685 -54.012264 335.97239 33218.561 10.717287 + 2520 10.31114 -55.078831 -53.928608 345.42395 33218.561 10.818756 + 2544 10.407237 -55.148382 -53.987439 325.94421 33218.561 10.910801 + 2568 10.257967 -55.041348 -53.897056 355.73261 33218.561 11.004221 + 2592 9.8425807 -55.139428 -54.041474 328.28096 33218.561 11.101295 + 2616 10.140697 -55.100238 -53.969028 338.76319 33218.561 11.192211 + 2640 9.7102818 -55.136288 -54.053091 326.7053 33218.561 11.280277 + 2664 10.120372 -55.128779 -53.999836 330.71707 33218.561 11.369001 + 2688 10.232537 -55.120614 -53.979159 333.35087 33218.561 11.464652 + 2712 10.032526 -55.094761 -53.975618 339.97984 33218.561 11.559387 + 2736 9.8791 -55.121998 -54.01997 332.32556 33218.561 11.649679 + 2760 9.891483 -55.120919 -54.017509 331.32614 33218.561 11.742604 + 2784 10.201053 -55.165525 -54.027582 320.39272 33218.561 11.85274 + 2808 10.238648 -55.096449 -53.954312 340.06316 33218.561 11.939782 + 2832 9.8692851 -55.068632 -53.967699 346.77535 33218.561 12.036655 + 2856 10.179976 -55.128413 -53.992822 331.5662 33218.561 12.123227 + 2880 9.7656315 -55.1468 -54.057429 324.02612 33218.561 12.213117 + 2904 9.7991628 -55.049191 -53.95608 352.45738 33218.561 12.326761 + 2928 10.581767 -55.093293 -53.912881 341.37292 33218.561 12.417633 + 2952 10.546144 -55.07452 -53.898081 347.02025 33218.561 12.52701 + 2976 9.8306008 -55.14762 -54.051002 323.45715 33218.561 12.633522 + 3000 10.033532 -55.076433 -53.957178 345.36812 33218.561 12.72627 + 3024 10.046266 -55.085775 -53.965099 342.47786 33218.561 12.816242 + 3048 10.176777 -55.133013 -53.997778 329.04144 33218.561 12.903175 + 3072 9.9778064 -55.143787 -54.030748 326.75284 33218.561 13.014329 + 3096 10.516223 -55.110144 -53.937043 336.802 33218.561 13.104673 + 3120 9.6561157 -55.138699 -54.061544 325.6652 33218.561 13.207371 + 3144 10.237043 -55.060968 -53.91901 349.44011 33218.561 13.303442 + 3168 9.9704264 -55.123073 -54.010857 332.19725 33218.561 13.391877 + 3192 10.493307 -55.144402 -53.973858 327.15485 33218.561 13.482857 + 3216 10.022171 -55.141782 -54.023794 326.08249 33218.561 13.574484 + 3240 9.6957248 -55.137865 -54.056292 326.04858 33218.561 13.671408 + 3264 9.9685299 -55.124301 -54.012297 331.9015 33218.561 13.760186 + 3288 10.413707 -55.153604 -53.99194 324.32939 33218.561 13.877604 + 3312 10.022953 -55.103422 -53.985346 337.52066 33218.561 13.977562 + 3336 10.044478 -55.110297 -53.98982 334.48379 33218.561 14.065563 + 3360 9.8593734 -55.130623 -54.030795 327.71748 33218.561 14.15952 + 3384 9.9269422 -55.107979 -54.000613 335.18173 33218.561 14.258064 + 3408 10.288049 -55.092276 -53.944629 340.71484 33218.561 14.36211 + 3432 9.9702156 -55.08732 -53.975128 341.72171 33218.561 14.452123 + 3456 10.246178 -55.091669 -53.948692 341.62844 33218.561 14.555775 + 3480 10.559292 -55.086917 -53.909012 343.70626 33218.561 14.645718 + 3504 10.652207 -55.050897 -53.862628 354.46979 33218.561 14.797422 + 3528 9.9835266 -55.0557 -53.942023 350.74747 33218.561 14.895716 + 3552 10.240934 -55.123217 -53.980825 332.26434 33218.561 15.023796 + 3576 10.406519 -55.093536 -53.932674 341.54029 33218.561 15.203252 + 3600 10.406733 -55.095168 -53.934282 341.22192 33218.561 15.303986 + 3624 9.9877484 -55.154231 -54.040083 323.55633 33218.561 15.398883 + 3648 10.391829 -55.110208 -53.950984 337.09219 33218.561 15.49042 + 3672 10.368995 -55.069591 -53.912914 346.82649 33218.561 15.582259 + 3696 10.362939 -55.109012 -53.953011 337.32216 33218.561 15.679316 + 3720 10.465254 -55.136214 -53.968799 331.22288 33218.561 15.773303 + 3744 9.8238226 -55.10114 -54.005278 338.12616 33218.561 15.86905 + 3768 10.205504 -55.101263 -53.962824 339.04196 33218.561 15.960072 + 3792 9.9589987 -55.118883 -54.007942 332.84318 33218.561 16.047055 + 3816 10.253382 -55.117513 -53.973732 334.42101 33218.561 16.148412 + 3840 10.262393 -55.069549 -53.924764 349.084 33218.561 16.235391 + 3864 9.7367167 -55.078288 -53.992142 342.48207 33218.561 16.329112 + 3888 10.171202 -55.134701 -54.000088 329.5847 33218.561 16.415353 + 3912 10.01925 -55.145139 -54.027477 326.65074 33218.561 16.526334 + 3936 10.053638 -55.038151 -53.916653 355.74893 33218.561 16.618524 + 3960 10.044055 -55.058382 -53.937953 349.01834 33218.561 16.712577 + 3984 10.382422 -55.099216 -53.941041 339.28099 33218.561 16.79941 + 4008 9.97927 -55.09284 -53.979637 339.07225 33218.561 16.904198 + 4032 9.6782319 -55.126143 -54.046522 329.0201 33218.561 16.991454 + 4056 9.6593809 -55.123677 -54.046159 329.89833 33218.561 17.097172 + 4080 10.442896 -55.141149 -53.976229 327.9899 33218.561 17.189364 + 4104 9.9571109 -55.08588 -53.975149 341.3746 33218.561 17.294147 + 4128 10.44943 -55.087946 -53.922296 343.09435 33218.561 17.387357 + 4152 10.040581 -55.171939 -54.051897 317.85348 33218.561 17.500905 + 4176 10.089442 -55.128713 -54.00322 330.29121 33218.561 17.588891 + 4200 10.316156 -55.123219 -53.972436 333.59382 33218.561 17.679254 + 4224 10.177245 -55.095671 -53.960384 339.34498 33218.561 17.770569 + 4248 9.7129183 -55.135335 -54.051844 328.25125 33218.561 17.857728 + 4272 10.231838 -55.099554 -53.958177 339.64015 33218.561 17.944226 + 4296 9.9737677 -55.117885 -54.005297 333.07248 33218.561 18.034105 + 4320 10.004955 -55.116155 -54.000088 333.52271 33218.561 18.129644 + 4344 9.5938901 -55.133824 -54.063612 327.84171 33218.561 18.215476 + 4368 9.8954562 -55.131603 -54.02775 329.0813 33218.561 18.306539 + 4392 10.439732 -55.100379 -53.935812 339.81679 33218.561 18.395651 + 4416 9.934513 -55.08449 -53.97628 341.74441 33218.561 18.484506 + 4440 10.025998 -55.136771 -54.018356 327.73718 33218.561 18.593946 + 4464 9.9304451 -55.101817 -53.994061 338.1801 33218.561 18.684011 + 4488 10.344371 -55.085856 -53.931926 342.91721 33218.561 18.782399 + 4512 10.033193 -55.091778 -53.972561 339.85728 33218.561 18.879666 + 4536 9.2361614 -55.169375 -54.139067 316.67597 33218.561 18.983667 + 4560 9.5786289 -55.179976 -54.111465 314.76415 33218.561 19.079009 + 4584 10.071651 -55.107218 -53.98371 336.10364 33218.561 19.163975 + 4608 9.9873098 -55.109348 -53.995249 336.03665 33218.561 19.25635 + 4632 10.143888 -55.119423 -53.987857 333.74978 33218.561 19.346658 + 4656 9.7506264 -55.114772 -54.027075 332.98271 33218.561 19.435425 + 4680 9.9616769 -55.096054 -53.984814 339.20499 33218.561 19.55562 + 4704 10.271313 -55.074522 -53.928742 345.87397 33218.561 19.642652 + 4728 9.9172336 -55.098805 -53.992523 338.06318 33218.561 19.734557 + 4752 9.9556222 -55.12128 -54.010716 332.66408 33218.561 19.83859 + 4776 10.197593 -55.095293 -53.957736 339.50067 33218.561 19.947471 + 4800 10.145085 -55.108467 -53.976768 336.05115 33218.561 20.044183 + 4824 10.205523 -55.147376 -54.008934 325.56559 33218.561 20.144393 + 4848 9.8900281 -55.121598 -54.01835 331.17401 33218.561 20.243197 + 4872 10.03655 -55.100936 -53.981343 337.6777 33218.561 20.336043 + 4896 9.8120635 -55.087507 -53.992957 341.42438 33218.561 20.425498 + 4920 10.615354 -55.093335 -53.909176 342.30776 33218.561 20.519318 + 4944 10.374366 -55.06455 -53.907274 351.10607 33218.561 20.612312 + 4968 10.677474 -55.147807 -53.956718 327.85703 33218.561 20.719371 + 4992 10.558882 -55.145253 -53.967393 327.427 33218.561 20.818726 + 5016 9.4097946 -55.150835 -54.101158 321.62641 33218.561 20.914472 diff --git a/examples/gjf/trajectory.0.dcd b/examples/gjf/trajectory.0.dcd new file mode 100644 index 0000000000000000000000000000000000000000..47927e9909cfcfc86ceb2568ba1660efed5834f2 GIT binary patch literal 439092 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 z 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

YmD()?v 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

k(3eUSN@wI2>xvLzU?kG7;9mTIr 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

n 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,"Illegal fix langevin command"); iarg += 2; + } else if (strcmp(arg[iarg],"halfstep") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command"); + if (gjfflag == 0) error->all(FLERR,"GJF must be set"); + if (tallyflag == 0) error->warning(FLERR,"Careful, tally is untested"); + if (strcmp(arg[iarg+1],"no") == 0) hsflag = 0; + else if (strcmp(arg[iarg+1],"yes") == 0) hsflag = 1; + else error->all(FLERR,"Illegal fix langevin command"); + iarg += 2; } else error->all(FLERR,"Illegal fix langevin command"); } @@ -155,6 +164,8 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : flangevin = NULL; flangevin_allocated = 0; franprev = NULL; + wildcard = NULL; + lv = NULL; tforce = NULL; maxatom1 = maxatom2 = 0; @@ -163,6 +174,12 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : // no need to set peratom_flag, b/c data is for internal use only if (gjfflag) { + int mem = 6*atom->nmax*sizeof(double); + if (hsflag) mem += 3*atom->nmax*sizeof(double); + + comm->maxexchange_fix = MAX(comm->maxexchange_fix, 0); + comm->maxexchange_fix += MAX(1000, mem); + nvalues = 3; grow_arrays(atom->nmax); atom->add_callback(0); @@ -174,6 +191,14 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : franprev[i][0] = 0.0; franprev[i][1] = 0.0; franprev[i][2] = 0.0; + wildcard[i][0] = 0.0; + wildcard[i][1] = 0.0; + wildcard[i][2] = 0.0; + if (hsflag) { + lv[i][0] = 0.0; + lv[i][1] = 0.0; + lv[i][2] = 0.0; + } } } @@ -194,6 +219,8 @@ FixLangevin::~FixLangevin() if (gjfflag) { memory->destroy(franprev); + memory->destroy(wildcard); + if (hsflag) memory->destroy(lv); atom->delete_callback(id,0); } } @@ -203,6 +230,8 @@ FixLangevin::~FixLangevin() int FixLangevin::setmask() { int mask = 0; + //if (gjfflag) mask |= INITIAL_INTEGRATE; + if (gjfflag) mask |= POST_INTEGRATE; mask |= POST_FORCE; mask |= POST_FORCE_RESPA; mask |= END_OF_STEP; @@ -258,13 +287,11 @@ void FixLangevin::init() error->one(FLERR,"Fix langevin angmom requires extended particles"); } - // set force prefactors - if (!atom->rmass) { for (int i = 1; i <= atom->ntypes; i++) { gfactor1[i] = -atom->mass[i] / t_period / force->ftm2v; gfactor2[i] = sqrt(atom->mass[i]) * - sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / + sqrt(2.0*force->boltz/t_period/update->dt/force->mvv2e) / force->ftm2v; gfactor1[i] *= 1.0/ratio[i]; gfactor2[i] *= 1.0/sqrt(ratio[i]); @@ -277,7 +304,7 @@ void FixLangevin::init() if (strstr(update->integrate_style,"respa")) nlevels_respa = ((Respa *) update->integrate)->nlevels; - if (gjfflag) gjffac = 1.0/(1.0+update->dt/2.0/t_period); + if (gjfflag) gjffac = 1.0/sqrt(1.0+update->dt/2.0/t_period); } @@ -292,6 +319,94 @@ void FixLangevin::setup(int vflag) post_force_respa(vflag,nlevels_respa-1,0); ((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1); } + if (gjfflag && hsflag) { + + double dt = update->dt; + + // update v of atoms in group + + double **v = atom->v; + double *rmass = atom->rmass; + int *type = atom->type; + int nlocal = atom->nlocal; + if (igroup == atom->firstgroup) nlocal = atom->nfirst; + + double boltz = force->boltz; + double mvv2e = force->mvv2e; + double ftm2v = force->ftm2v; + + double gamma2; + + for (int i = 0; i < nlocal; i++) { + if (rmass) { + gamma2 = sqrt(rmass[i]) * sqrt(2.0*boltz/t_period/dt/mvv2e) / ftm2v; + gamma2 *= 1.0/sqrt(ratio[type[i]]) * tsqrt; + } else { + gamma2 = gfactor2[type[i]] * tsqrt; + } + + franprev[i][0] = gamma2*random->gaussian(); + franprev[i][1] = gamma2*random->gaussian(); + franprev[i][2] = gamma2*random->gaussian(); + wildcard[i][0] = v[i][0]; + wildcard[i][1] = v[i][1]; + wildcard[i][2] = v[i][2]; + } + } +} + +/* ---------------------------------------------------------------------- + allow for both per-type and per-atom mass +------------------------------------------------------------------------- */ + +void FixLangevin::post_integrate() +{ + double dtfm; + double dt = update->dt; + double dtf = 0.5 * dt * force->ftm2v; + + // update v of atoms in group + + double **x = atom->x; + double **v = atom->v; + double **f = atom->f; + double *rmass = atom->rmass; + double *mass = atom->mass; + int *type = atom->type; + int *mask = atom->mask; + int nlocal = atom->nlocal; + if (igroup == atom->firstgroup) nlocal = atom->nfirst; + + if (rmass) { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + dtfm = dtf / rmass[i]; + x[i][0] += -dt * v[i][0]; + x[i][1] += -dt * v[i][1]; + x[i][2] += -dt * v[i][2]; + v[i][0] = gjffac * (wildcard[i][0] + dtfm * franprev[i][0] + dtfm * f[i][0]); + v[i][1] = gjffac * (wildcard[i][1] + dtfm * franprev[i][1] + dtfm * f[i][1]); + v[i][2] = gjffac * (wildcard[i][2] + dtfm * franprev[i][2] + dtfm * f[i][2]); + x[i][0] += gjffac * dt * v[i][0]; + x[i][1] += gjffac * dt * v[i][1]; + x[i][2] += gjffac * dt * v[i][2]; + } + + } else { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + dtfm = dtf / mass[type[i]]; + x[i][0] += -dt * v[i][0]; + x[i][1] += -dt * v[i][1]; + x[i][2] += -dt * v[i][2]; + v[i][0] = gjffac * (wildcard[i][0] + dtfm * franprev[i][0] + dtfm * f[i][0]); + v[i][1] = gjffac * (wildcard[i][1] + dtfm * franprev[i][1] + dtfm * f[i][1]); + v[i][2] = gjffac * (wildcard[i][2] + dtfm * franprev[i][2] + dtfm * f[i][2]); + x[i][0] += gjffac * dt * v[i][0]; + x[i][1] += gjffac * dt * v[i][1]; + x[i][2] += gjffac * dt * v[i][2]; + } + } } /* ---------------------------------------------------------------------- */ @@ -477,9 +592,8 @@ void FixLangevin::post_force_templated() // sum random force over all atoms in group // subtract sum/count from each atom in group - double fdrag[3],fran[3],fsum[3],fsumall[3]; + double fdrag[3],fran[3],fsum[3],fsumall[3], rantemp[3]; bigint count; - double fswap; double boltz = force->boltz; double dt = update->dt; @@ -513,7 +627,7 @@ void FixLangevin::post_force_templated() if (Tp_TSTYLEATOM) tsqrt = sqrt(tforce[i]); if (Tp_RMASS) { gamma1 = -rmass[i] / t_period / ftm2v; - gamma2 = sqrt(rmass[i]) * sqrt(24.0*boltz/t_period/dt/mvv2e) / ftm2v; + gamma2 = sqrt(rmass[i]) * sqrt(2.0*boltz/t_period/dt/mvv2e) / ftm2v; gamma1 *= 1.0/ratio[type[i]]; gamma2 *= 1.0/sqrt(ratio[type[i]]) * tsqrt; } else { @@ -521,9 +635,9 @@ void FixLangevin::post_force_templated() gamma2 = gfactor2[type[i]] * tsqrt; } - fran[0] = gamma2*(random->uniform()-0.5); - fran[1] = gamma2*(random->uniform()-0.5); - fran[2] = gamma2*(random->uniform()-0.5); + fran[0] = gamma2*random->gaussian(); + fran[1] = gamma2*random->gaussian(); + fran[2] = gamma2*random->gaussian(); if (Tp_BIAS) { temperature->remove_bias(i,v[i]); @@ -541,25 +655,20 @@ void FixLangevin::post_force_templated() } if (Tp_GJF) { - fswap = 0.5*(fran[0]+franprev[i][0]); - franprev[i][0] = fran[0]; - fran[0] = fswap; - fswap = 0.5*(fran[1]+franprev[i][1]); - franprev[i][1] = fran[1]; - fran[1] = fswap; - fswap = 0.5*(fran[2]+franprev[i][2]); - franprev[i][2] = fran[2]; - fran[2] = fswap; + wildcard[i][0] = f[i][0]; + wildcard[i][1] = f[i][1]; + wildcard[i][2] = f[i][2]; - fdrag[0] *= gjffac; - fdrag[1] *= gjffac; - fdrag[2] *= gjffac; - fran[0] *= gjffac; - fran[1] *= gjffac; - fran[2] *= gjffac; - f[i][0] *= gjffac; - f[i][1] *= gjffac; - f[i][2] *= gjffac; + rantemp[0] = fran[0]; + rantemp[1] = fran[1]; + rantemp[2] = fran[2]; + fran[0] = franprev[i][0]; + fran[1] = franprev[i][1]; + fran[2] = franprev[i][2]; + + fdrag[0] *= -2*t_period*(2*gjffac-1/gjffac-1)/dt; + fdrag[1] *= -2*t_period*(2*gjffac-1/gjffac-1)/dt; + fdrag[2] *= -2*t_period*(2*gjffac-1/gjffac-1)/dt; } f[i][0] += fdrag[0] + fran[0]; @@ -567,6 +676,11 @@ void FixLangevin::post_force_templated() f[i][2] += fdrag[2] + fran[2]; if (Tp_TALLY) { + if (Tp_GJF){ + fdrag[0] = gamma1*gjffac*v[i][0]; + fdrag[1] = gamma1*gjffac*v[i][1]; + fdrag[2] = gamma1*gjffac*v[i][2]; + } flangevin[i][0] = fdrag[0] + fran[0]; flangevin[i][1] = fdrag[1] + fran[1]; flangevin[i][2] = fdrag[2] + fran[2]; @@ -577,6 +691,19 @@ void FixLangevin::post_force_templated() fsum[1] += fran[1]; fsum[2] += fran[2]; } + + if (Tp_GJF) + { + franprev[i][0] = rantemp[0]; + franprev[i][1] = rantemp[1]; + franprev[i][2] = rantemp[2]; + + if (hsflag){ + lv[i][0] = v[i][0]; + lv[i][1] = v[i][1]; + lv[i][2] = v[i][2]; + } + } } } @@ -641,9 +768,9 @@ void FixLangevin::compute_target() input->variable->compute_atom(tvar,igroup,tforce,1,0); for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) - if (tforce[i] < 0.0) - error->one(FLERR, - "Fix langevin variable returned negative temperature"); + if (tforce[i] < 0.0) + error->one(FLERR, + "Fix langevin variable returned negative temperature"); } modify->addstep_compute(update->ntimestep + 1); } @@ -756,20 +883,41 @@ void FixLangevin::angmom_thermostat() void FixLangevin::end_of_step() { - if (!tallyflag) return; + if (!tallyflag && !gjfflag) return; double **v = atom->v; + double **f = atom->f; int *mask = atom->mask; int nlocal = atom->nlocal; energy_onestep = 0.0; - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) - energy_onestep += flangevin[i][0]*v[i][0] + flangevin[i][1]*v[i][1] + - flangevin[i][2]*v[i][2]; - - energy += energy_onestep*update->dt; + if (mask[i] & groupbit) { + if (gjfflag){ + f[i][0] = wildcard[i][0]; + f[i][1] = wildcard[i][1]; + f[i][2] = wildcard[i][2]; + wildcard[i][0] = v[i][0]; + wildcard[i][1] = v[i][1]; + wildcard[i][2] = v[i][2]; + if (hsflag){ + v[i][0] = lv[i][0]; + v[i][1] = lv[i][1]; + v[i][2] = lv[i][2]; + } + } + if (tallyflag && hsflag){ + energy_onestep += gjffac*(flangevin[i][0] * lv[i][0] + + flangevin[i][1] * lv[i][1] + flangevin[i][2] * lv[i][2]); + } + else if (tallyflag){ + energy_onestep += flangevin[i][0] * v[i][0] + flangevin[i][1] * v[i][1] + + flangevin[i][2] * v[i][2]; + } + } + if (tallyflag) { + energy += energy_onestep * update->dt; + } } /* ---------------------------------------------------------------------- */ @@ -869,7 +1017,8 @@ void *FixLangevin::extract(const char *str, int &dim) double FixLangevin::memory_usage() { double bytes = 0.0; - if (gjfflag) bytes += atom->nmax*3 * sizeof(double); + if (gjfflag) bytes += atom->nmax*3*2 * sizeof(double); + if (gjfflag) if (hsflag) bytes += atom->nmax*3 * sizeof(double); if (tallyflag) bytes += atom->nmax*3 * sizeof(double); if (tforce) bytes += atom->nmax * sizeof(double); return bytes; @@ -882,6 +1031,8 @@ double FixLangevin::memory_usage() void FixLangevin::grow_arrays(int nmax) { memory->grow(franprev,nmax,3,"fix_langevin:franprev"); + memory->grow(wildcard,nmax,3,"fix_langevin:wildcard"); + if (hsflag) memory->grow(lv,nmax,3,"fix_langevin:lv"); } /* ---------------------------------------------------------------------- @@ -890,8 +1041,17 @@ void FixLangevin::grow_arrays(int nmax) void FixLangevin::copy_arrays(int i, int j, int /*delflag*/) { - for (int m = 0; m < nvalues; m++) - franprev[j][m] = franprev[i][m]; + franprev[j][0] = franprev[i][0]; + franprev[j][1] = franprev[i][1]; + franprev[j][2] = franprev[i][2]; + wildcard[j][0] = wildcard[i][0]; + wildcard[j][1] = wildcard[i][1]; + wildcard[j][2] = wildcard[i][2]; + if (hsflag) { + lv[j][0] = lv[i][0]; + lv[j][1] = lv[i][1]; + lv[j][2] = lv[i][2]; + } } /* ---------------------------------------------------------------------- @@ -900,8 +1060,19 @@ void FixLangevin::copy_arrays(int i, int j, int /*delflag*/) int FixLangevin::pack_exchange(int i, double *buf) { - for (int m = 0; m < nvalues; m++) buf[m] = franprev[i][m]; - return nvalues; + int n = 0; + buf[n++] = franprev[i][0]; + buf[n++] = franprev[i][1]; + buf[n++] = franprev[i][2]; + buf[n++] = wildcard[i][0]; + buf[n++] = wildcard[i][1]; + buf[n++] = wildcard[i][2]; + if (hsflag){ + buf[n++] = lv[i][0]; + buf[n++] = lv[i][1]; + buf[n++] = lv[i][2]; + } + return n; } /* ---------------------------------------------------------------------- @@ -910,6 +1081,17 @@ int FixLangevin::pack_exchange(int i, double *buf) int FixLangevin::unpack_exchange(int nlocal, double *buf) { - for (int m = 0; m < nvalues; m++) franprev[nlocal][m] = buf[m]; - return nvalues; + int n = 0; + franprev[nlocal][0] = buf[n++]; + franprev[nlocal][1] = buf[n++]; + franprev[nlocal][2] = buf[n++]; + wildcard[nlocal][0] = buf[n++]; + wildcard[nlocal][1] = buf[n++]; + wildcard[nlocal][2] = buf[n++]; + if (hsflag){ + lv[nlocal][0] = buf[n++]; + lv[nlocal][1] = buf[n++]; + lv[nlocal][2] = buf[n++]; + } + return n; } diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 4b5570ac2e..461d4e5140 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -31,6 +31,8 @@ class FixLangevin : public Fix { int setmask(); void init(); void setup(int); + //virtual void initial_integrate(int); + virtual void post_integrate(); virtual void post_force(int); void post_force_respa(int, int, int); virtual void end_of_step(); @@ -46,7 +48,7 @@ class FixLangevin : public Fix { int unpack_exchange(int, double *); protected: - int gjfflag,oflag,tallyflag,zeroflag,tbiasflag; + int gjfflag,oflag,tallyflag,zeroflag,tbiasflag,hsflag; int flangevin_allocated; double ascale; double t_start,t_stop,t_period,t_target; @@ -63,6 +65,9 @@ class FixLangevin : public Fix { double **flangevin; double *tforce; double **franprev; + double **lv; //lucas velocity or half-step velocity + double **wildcard; + int nvalues; char *id_temp; From e38072f365d40a915328b9656b0a27d5ac1ef4ed Mon Sep 17 00:00:00 2001 From: casievers Date: Fri, 19 Jul 2019 13:51:36 -0700 Subject: [PATCH 063/237] added lammps python example --- examples/python/gjf_python/argon.lmp | 886 +++++++++++++++++++++ examples/python/gjf_python/ff-argon.lmp | 20 + examples/python/gjf_python/gjf.py | 180 +++++ examples/python/gjf_python/lammps_tools.py | 78 ++ 4 files changed, 1164 insertions(+) create mode 100644 examples/python/gjf_python/argon.lmp create mode 100644 examples/python/gjf_python/ff-argon.lmp create mode 100644 examples/python/gjf_python/gjf.py create mode 100644 examples/python/gjf_python/lammps_tools.py diff --git a/examples/python/gjf_python/argon.lmp b/examples/python/gjf_python/argon.lmp new file mode 100644 index 0000000000..00214b4c54 --- /dev/null +++ b/examples/python/gjf_python/argon.lmp @@ -0,0 +1,886 @@ +LAMMPS description + + 864 atoms + 0 bonds + 0 angles + 0 dihedrals + 0 impropers + + 1 atom types + 0 bond types + 0 angle types + 0 dihedral types + 0 improper types + + + 0.0000000 32.146000 xlo xhi + 0.0000000 32.146000 ylo yhi + 0.0000000 32.146000 zlo zhi + + Atoms + + 1 1 1 0.0000000 0.0000000 2.6790000 2.6790000 + 2 2 1 0.0000000 0.0000000 2.6790000 8.0360000 + 3 3 1 0.0000000 0.0000000 2.6790000 13.3940000 + 4 4 1 0.0000000 0.0000000 2.6790000 18.7520000 + 5 5 1 0.0000000 0.0000000 2.6790000 24.1090000 + 6 6 1 0.0000000 0.0000000 2.6790000 29.4670000 + 7 7 1 0.0000000 0.0000000 8.0360000 2.6790000 + 8 8 1 0.0000000 0.0000000 8.0360000 8.0360000 + 9 9 1 0.0000000 0.0000000 8.0360000 13.3940000 + 10 10 1 0.0000000 0.0000000 8.0360000 18.7520000 + 11 11 1 0.0000000 0.0000000 8.0360000 24.1090000 + 12 12 1 0.0000000 0.0000000 8.0360000 29.4670000 + 13 13 1 0.0000000 0.0000000 13.3940000 2.6790000 + 14 14 1 0.0000000 0.0000000 13.3940000 8.0360000 + 15 15 1 0.0000000 0.0000000 13.3940000 13.3940000 + 16 16 1 0.0000000 0.0000000 13.3940000 18.7520000 + 17 17 1 0.0000000 0.0000000 13.3940000 24.1090000 + 18 18 1 0.0000000 0.0000000 13.3940000 29.4670000 + 19 19 1 0.0000000 0.0000000 18.7520000 2.6790000 + 20 20 1 0.0000000 0.0000000 18.7520000 8.0360000 + 21 21 1 0.0000000 0.0000000 18.7520000 13.3940000 + 22 22 1 0.0000000 0.0000000 18.7520000 18.7520000 + 23 23 1 0.0000000 0.0000000 18.7520000 24.1090000 + 24 24 1 0.0000000 0.0000000 18.7520000 29.4670000 + 25 25 1 0.0000000 0.0000000 24.1090000 2.6790000 + 26 26 1 0.0000000 0.0000000 24.1090000 8.0360000 + 27 27 1 0.0000000 0.0000000 24.1090000 13.3940000 + 28 28 1 0.0000000 0.0000000 24.1090000 18.7520000 + 29 29 1 0.0000000 0.0000000 24.1090000 24.1090000 + 30 30 1 0.0000000 0.0000000 24.1090000 29.4670000 + 31 31 1 0.0000000 0.0000000 29.4670000 2.6790000 + 32 32 1 0.0000000 0.0000000 29.4670000 8.0360000 + 33 33 1 0.0000000 0.0000000 29.4670000 13.3940000 + 34 34 1 0.0000000 0.0000000 29.4670000 18.7520000 + 35 35 1 0.0000000 0.0000000 29.4670000 24.1090000 + 36 36 1 0.0000000 0.0000000 29.4670000 29.4670000 + 37 37 1 0.0000000 5.3580000 2.6790000 2.6790000 + 38 38 1 0.0000000 5.3580000 2.6790000 8.0360000 + 39 39 1 0.0000000 5.3580000 2.6790000 13.3940000 + 40 40 1 0.0000000 5.3580000 2.6790000 18.7520000 + 41 41 1 0.0000000 5.3580000 2.6790000 24.1090000 + 42 42 1 0.0000000 5.3580000 2.6790000 29.4670000 + 43 43 1 0.0000000 5.3580000 8.0360000 2.6790000 + 44 44 1 0.0000000 5.3580000 8.0360000 8.0360000 + 45 45 1 0.0000000 5.3580000 8.0360000 13.3940000 + 46 46 1 0.0000000 5.3580000 8.0360000 18.7520000 + 47 47 1 0.0000000 5.3580000 8.0360000 24.1090000 + 48 48 1 0.0000000 5.3580000 8.0360000 29.4670000 + 49 49 1 0.0000000 5.3580000 13.3940000 2.6790000 + 50 50 1 0.0000000 5.3580000 13.3940000 8.0360000 + 51 51 1 0.0000000 5.3580000 13.3940000 13.3940000 + 52 52 1 0.0000000 5.3580000 13.3940000 18.7520000 + 53 53 1 0.0000000 5.3580000 13.3940000 24.1090000 + 54 54 1 0.0000000 5.3580000 13.3940000 29.4670000 + 55 55 1 0.0000000 5.3580000 18.7520000 2.6790000 + 56 56 1 0.0000000 5.3580000 18.7520000 8.0360000 + 57 57 1 0.0000000 5.3580000 18.7520000 13.3940000 + 58 58 1 0.0000000 5.3580000 18.7520000 18.7520000 + 59 59 1 0.0000000 5.3580000 18.7520000 24.1090000 + 60 60 1 0.0000000 5.3580000 18.7520000 29.4670000 + 61 61 1 0.0000000 5.3580000 24.1090000 2.6790000 + 62 62 1 0.0000000 5.3580000 24.1090000 8.0360000 + 63 63 1 0.0000000 5.3580000 24.1090000 13.3940000 + 64 64 1 0.0000000 5.3580000 24.1090000 18.7520000 + 65 65 1 0.0000000 5.3580000 24.1090000 24.1090000 + 66 66 1 0.0000000 5.3580000 24.1090000 29.4670000 + 67 67 1 0.0000000 5.3580000 29.4670000 2.6790000 + 68 68 1 0.0000000 5.3580000 29.4670000 8.0360000 + 69 69 1 0.0000000 5.3580000 29.4670000 13.3940000 + 70 70 1 0.0000000 5.3580000 29.4670000 18.7520000 + 71 71 1 0.0000000 5.3580000 29.4670000 24.1090000 + 72 72 1 0.0000000 5.3580000 29.4670000 29.4670000 + 73 73 1 0.0000000 10.7150000 2.6790000 2.6790000 + 74 74 1 0.0000000 10.7150000 2.6790000 8.0360000 + 75 75 1 0.0000000 10.7150000 2.6790000 13.3940000 + 76 76 1 0.0000000 10.7150000 2.6790000 18.7520000 + 77 77 1 0.0000000 10.7150000 2.6790000 24.1090000 + 78 78 1 0.0000000 10.7150000 2.6790000 29.4670000 + 79 79 1 0.0000000 10.7150000 8.0360000 2.6790000 + 80 80 1 0.0000000 10.7150000 8.0360000 8.0360000 + 81 81 1 0.0000000 10.7150000 8.0360000 13.3940000 + 82 82 1 0.0000000 10.7150000 8.0360000 18.7520000 + 83 83 1 0.0000000 10.7150000 8.0360000 24.1090000 + 84 84 1 0.0000000 10.7150000 8.0360000 29.4670000 + 85 85 1 0.0000000 10.7150000 13.3940000 2.6790000 + 86 86 1 0.0000000 10.7150000 13.3940000 8.0360000 + 87 87 1 0.0000000 10.7150000 13.3940000 13.3940000 + 88 88 1 0.0000000 10.7150000 13.3940000 18.7520000 + 89 89 1 0.0000000 10.7150000 13.3940000 24.1090000 + 90 90 1 0.0000000 10.7150000 13.3940000 29.4670000 + 91 91 1 0.0000000 10.7150000 18.7520000 2.6790000 + 92 92 1 0.0000000 10.7150000 18.7520000 8.0360000 + 93 93 1 0.0000000 10.7150000 18.7520000 13.3940000 + 94 94 1 0.0000000 10.7150000 18.7520000 18.7520000 + 95 95 1 0.0000000 10.7150000 18.7520000 24.1090000 + 96 96 1 0.0000000 10.7150000 18.7520000 29.4670000 + 97 97 1 0.0000000 10.7150000 24.1090000 2.6790000 + 98 98 1 0.0000000 10.7150000 24.1090000 8.0360000 + 99 99 1 0.0000000 10.7150000 24.1090000 13.3940000 + 100 100 1 0.0000000 10.7150000 24.1090000 18.7520000 + 101 101 1 0.0000000 10.7150000 24.1090000 24.1090000 + 102 102 1 0.0000000 10.7150000 24.1090000 29.4670000 + 103 103 1 0.0000000 10.7150000 29.4670000 2.6790000 + 104 104 1 0.0000000 10.7150000 29.4670000 8.0360000 + 105 105 1 0.0000000 10.7150000 29.4670000 13.3940000 + 106 106 1 0.0000000 10.7150000 29.4670000 18.7520000 + 107 107 1 0.0000000 10.7150000 29.4670000 24.1090000 + 108 108 1 0.0000000 10.7150000 29.4670000 29.4670000 + 109 109 1 0.0000000 16.0730000 2.6790000 2.6790000 + 110 110 1 0.0000000 16.0730000 2.6790000 8.0360000 + 111 111 1 0.0000000 16.0730000 2.6790000 13.3940000 + 112 112 1 0.0000000 16.0730000 2.6790000 18.7520000 + 113 113 1 0.0000000 16.0730000 2.6790000 24.1090000 + 114 114 1 0.0000000 16.0730000 2.6790000 29.4670000 + 115 115 1 0.0000000 16.0730000 8.0360000 2.6790000 + 116 116 1 0.0000000 16.0730000 8.0360000 8.0360000 + 117 117 1 0.0000000 16.0730000 8.0360000 13.3940000 + 118 118 1 0.0000000 16.0730000 8.0360000 18.7520000 + 119 119 1 0.0000000 16.0730000 8.0360000 24.1090000 + 120 120 1 0.0000000 16.0730000 8.0360000 29.4670000 + 121 121 1 0.0000000 16.0730000 13.3940000 2.6790000 + 122 122 1 0.0000000 16.0730000 13.3940000 8.0360000 + 123 123 1 0.0000000 16.0730000 13.3940000 13.3940000 + 124 124 1 0.0000000 16.0730000 13.3940000 18.7520000 + 125 125 1 0.0000000 16.0730000 13.3940000 24.1090000 + 126 126 1 0.0000000 16.0730000 13.3940000 29.4670000 + 127 127 1 0.0000000 16.0730000 18.7520000 2.6790000 + 128 128 1 0.0000000 16.0730000 18.7520000 8.0360000 + 129 129 1 0.0000000 16.0730000 18.7520000 13.3940000 + 130 130 1 0.0000000 16.0730000 18.7520000 18.7520000 + 131 131 1 0.0000000 16.0730000 18.7520000 24.1090000 + 132 132 1 0.0000000 16.0730000 18.7520000 29.4670000 + 133 133 1 0.0000000 16.0730000 24.1090000 2.6790000 + 134 134 1 0.0000000 16.0730000 24.1090000 8.0360000 + 135 135 1 0.0000000 16.0730000 24.1090000 13.3940000 + 136 136 1 0.0000000 16.0730000 24.1090000 18.7520000 + 137 137 1 0.0000000 16.0730000 24.1090000 24.1090000 + 138 138 1 0.0000000 16.0730000 24.1090000 29.4670000 + 139 139 1 0.0000000 16.0730000 29.4670000 2.6790000 + 140 140 1 0.0000000 16.0730000 29.4670000 8.0360000 + 141 141 1 0.0000000 16.0730000 29.4670000 13.3940000 + 142 142 1 0.0000000 16.0730000 29.4670000 18.7520000 + 143 143 1 0.0000000 16.0730000 29.4670000 24.1090000 + 144 144 1 0.0000000 16.0730000 29.4670000 29.4670000 + 145 145 1 0.0000000 21.4310000 2.6790000 2.6790000 + 146 146 1 0.0000000 21.4310000 2.6790000 8.0360000 + 147 147 1 0.0000000 21.4310000 2.6790000 13.3940000 + 148 148 1 0.0000000 21.4310000 2.6790000 18.7520000 + 149 149 1 0.0000000 21.4310000 2.6790000 24.1090000 + 150 150 1 0.0000000 21.4310000 2.6790000 29.4670000 + 151 151 1 0.0000000 21.4310000 8.0360000 2.6790000 + 152 152 1 0.0000000 21.4310000 8.0360000 8.0360000 + 153 153 1 0.0000000 21.4310000 8.0360000 13.3940000 + 154 154 1 0.0000000 21.4310000 8.0360000 18.7520000 + 155 155 1 0.0000000 21.4310000 8.0360000 24.1090000 + 156 156 1 0.0000000 21.4310000 8.0360000 29.4670000 + 157 157 1 0.0000000 21.4310000 13.3940000 2.6790000 + 158 158 1 0.0000000 21.4310000 13.3940000 8.0360000 + 159 159 1 0.0000000 21.4310000 13.3940000 13.3940000 + 160 160 1 0.0000000 21.4310000 13.3940000 18.7520000 + 161 161 1 0.0000000 21.4310000 13.3940000 24.1090000 + 162 162 1 0.0000000 21.4310000 13.3940000 29.4670000 + 163 163 1 0.0000000 21.4310000 18.7520000 2.6790000 + 164 164 1 0.0000000 21.4310000 18.7520000 8.0360000 + 165 165 1 0.0000000 21.4310000 18.7520000 13.3940000 + 166 166 1 0.0000000 21.4310000 18.7520000 18.7520000 + 167 167 1 0.0000000 21.4310000 18.7520000 24.1090000 + 168 168 1 0.0000000 21.4310000 18.7520000 29.4670000 + 169 169 1 0.0000000 21.4310000 24.1090000 2.6790000 + 170 170 1 0.0000000 21.4310000 24.1090000 8.0360000 + 171 171 1 0.0000000 21.4310000 24.1090000 13.3940000 + 172 172 1 0.0000000 21.4310000 24.1090000 18.7520000 + 173 173 1 0.0000000 21.4310000 24.1090000 24.1090000 + 174 174 1 0.0000000 21.4310000 24.1090000 29.4670000 + 175 175 1 0.0000000 21.4310000 29.4670000 2.6790000 + 176 176 1 0.0000000 21.4310000 29.4670000 8.0360000 + 177 177 1 0.0000000 21.4310000 29.4670000 13.3940000 + 178 178 1 0.0000000 21.4310000 29.4670000 18.7520000 + 179 179 1 0.0000000 21.4310000 29.4670000 24.1090000 + 180 180 1 0.0000000 21.4310000 29.4670000 29.4670000 + 181 181 1 0.0000000 26.7880000 2.6790000 2.6790000 + 182 182 1 0.0000000 26.7880000 2.6790000 8.0360000 + 183 183 1 0.0000000 26.7880000 2.6790000 13.3940000 + 184 184 1 0.0000000 26.7880000 2.6790000 18.7520000 + 185 185 1 0.0000000 26.7880000 2.6790000 24.1090000 + 186 186 1 0.0000000 26.7880000 2.6790000 29.4670000 + 187 187 1 0.0000000 26.7880000 8.0360000 2.6790000 + 188 188 1 0.0000000 26.7880000 8.0360000 8.0360000 + 189 189 1 0.0000000 26.7880000 8.0360000 13.3940000 + 190 190 1 0.0000000 26.7880000 8.0360000 18.7520000 + 191 191 1 0.0000000 26.7880000 8.0360000 24.1090000 + 192 192 1 0.0000000 26.7880000 8.0360000 29.4670000 + 193 193 1 0.0000000 26.7880000 13.3940000 2.6790000 + 194 194 1 0.0000000 26.7880000 13.3940000 8.0360000 + 195 195 1 0.0000000 26.7880000 13.3940000 13.3940000 + 196 196 1 0.0000000 26.7880000 13.3940000 18.7520000 + 197 197 1 0.0000000 26.7880000 13.3940000 24.1090000 + 198 198 1 0.0000000 26.7880000 13.3940000 29.4670000 + 199 199 1 0.0000000 26.7880000 18.7520000 2.6790000 + 200 200 1 0.0000000 26.7880000 18.7520000 8.0360000 + 201 201 1 0.0000000 26.7880000 18.7520000 13.3940000 + 202 202 1 0.0000000 26.7880000 18.7520000 18.7520000 + 203 203 1 0.0000000 26.7880000 18.7520000 24.1090000 + 204 204 1 0.0000000 26.7880000 18.7520000 29.4670000 + 205 205 1 0.0000000 26.7880000 24.1090000 2.6790000 + 206 206 1 0.0000000 26.7880000 24.1090000 8.0360000 + 207 207 1 0.0000000 26.7880000 24.1090000 13.3940000 + 208 208 1 0.0000000 26.7880000 24.1090000 18.7520000 + 209 209 1 0.0000000 26.7880000 24.1090000 24.1090000 + 210 210 1 0.0000000 26.7880000 24.1090000 29.4670000 + 211 211 1 0.0000000 26.7880000 29.4670000 2.6790000 + 212 212 1 0.0000000 26.7880000 29.4670000 8.0360000 + 213 213 1 0.0000000 26.7880000 29.4670000 13.3940000 + 214 214 1 0.0000000 26.7880000 29.4670000 18.7520000 + 215 215 1 0.0000000 26.7880000 29.4670000 24.1090000 + 216 216 1 0.0000000 26.7880000 29.4670000 29.4670000 + 217 217 1 0.0000000 2.6790000 5.3580000 2.6790000 + 218 218 1 0.0000000 2.6790000 5.3580000 8.0360000 + 219 219 1 0.0000000 2.6790000 5.3580000 13.3940000 + 220 220 1 0.0000000 2.6790000 5.3580000 18.7520000 + 221 221 1 0.0000000 2.6790000 5.3580000 24.1090000 + 222 222 1 0.0000000 2.6790000 5.3580000 29.4670000 + 223 223 1 0.0000000 2.6790000 10.7150000 2.6790000 + 224 224 1 0.0000000 2.6790000 10.7150000 8.0360000 + 225 225 1 0.0000000 2.6790000 10.7150000 13.3940000 + 226 226 1 0.0000000 2.6790000 10.7150000 18.7520000 + 227 227 1 0.0000000 2.6790000 10.7150000 24.1090000 + 228 228 1 0.0000000 2.6790000 10.7150000 29.4670000 + 229 229 1 0.0000000 2.6790000 16.0730000 2.6790000 + 230 230 1 0.0000000 2.6790000 16.0730000 8.0360000 + 231 231 1 0.0000000 2.6790000 16.0730000 13.3940000 + 232 232 1 0.0000000 2.6790000 16.0730000 18.7520000 + 233 233 1 0.0000000 2.6790000 16.0730000 24.1090000 + 234 234 1 0.0000000 2.6790000 16.0730000 29.4670000 + 235 235 1 0.0000000 2.6790000 21.4310000 2.6790000 + 236 236 1 0.0000000 2.6790000 21.4310000 8.0360000 + 237 237 1 0.0000000 2.6790000 21.4310000 13.3940000 + 238 238 1 0.0000000 2.6790000 21.4310000 18.7520000 + 239 239 1 0.0000000 2.6790000 21.4310000 24.1090000 + 240 240 1 0.0000000 2.6790000 21.4310000 29.4670000 + 241 241 1 0.0000000 2.6790000 26.7880000 2.6790000 + 242 242 1 0.0000000 2.6790000 26.7880000 8.0360000 + 243 243 1 0.0000000 2.6790000 26.7880000 13.3940000 + 244 244 1 0.0000000 2.6790000 26.7880000 18.7520000 + 245 245 1 0.0000000 2.6790000 26.7880000 24.1090000 + 246 246 1 0.0000000 2.6790000 26.7880000 29.4670000 + 247 247 1 0.0000000 2.6790000 32.1460000 2.6790000 + 248 248 1 0.0000000 2.6790000 32.1460000 8.0360000 + 249 249 1 0.0000000 2.6790000 32.1460000 13.3940000 + 250 250 1 0.0000000 2.6790000 32.1460000 18.7520000 + 251 251 1 0.0000000 2.6790000 32.1460000 24.1090000 + 252 252 1 0.0000000 2.6790000 32.1460000 29.4670000 + 253 253 1 0.0000000 8.0360000 5.3580000 2.6790000 + 254 254 1 0.0000000 8.0360000 5.3580000 8.0360000 + 255 255 1 0.0000000 8.0360000 5.3580000 13.3940000 + 256 256 1 0.0000000 8.0360000 5.3580000 18.7520000 + 257 257 1 0.0000000 8.0360000 5.3580000 24.1090000 + 258 258 1 0.0000000 8.0360000 5.3580000 29.4670000 + 259 259 1 0.0000000 8.0360000 10.7150000 2.6790000 + 260 260 1 0.0000000 8.0360000 10.7150000 8.0360000 + 261 261 1 0.0000000 8.0360000 10.7150000 13.3940000 + 262 262 1 0.0000000 8.0360000 10.7150000 18.7520000 + 263 263 1 0.0000000 8.0360000 10.7150000 24.1090000 + 264 264 1 0.0000000 8.0360000 10.7150000 29.4670000 + 265 265 1 0.0000000 8.0360000 16.0730000 2.6790000 + 266 266 1 0.0000000 8.0360000 16.0730000 8.0360000 + 267 267 1 0.0000000 8.0360000 16.0730000 13.3940000 + 268 268 1 0.0000000 8.0360000 16.0730000 18.7520000 + 269 269 1 0.0000000 8.0360000 16.0730000 24.1090000 + 270 270 1 0.0000000 8.0360000 16.0730000 29.4670000 + 271 271 1 0.0000000 8.0360000 21.4310000 2.6790000 + 272 272 1 0.0000000 8.0360000 21.4310000 8.0360000 + 273 273 1 0.0000000 8.0360000 21.4310000 13.3940000 + 274 274 1 0.0000000 8.0360000 21.4310000 18.7520000 + 275 275 1 0.0000000 8.0360000 21.4310000 24.1090000 + 276 276 1 0.0000000 8.0360000 21.4310000 29.4670000 + 277 277 1 0.0000000 8.0360000 26.7880000 2.6790000 + 278 278 1 0.0000000 8.0360000 26.7880000 8.0360000 + 279 279 1 0.0000000 8.0360000 26.7880000 13.3940000 + 280 280 1 0.0000000 8.0360000 26.7880000 18.7520000 + 281 281 1 0.0000000 8.0360000 26.7880000 24.1090000 + 282 282 1 0.0000000 8.0360000 26.7880000 29.4670000 + 283 283 1 0.0000000 8.0360000 32.1460000 2.6790000 + 284 284 1 0.0000000 8.0360000 32.1460000 8.0360000 + 285 285 1 0.0000000 8.0360000 32.1460000 13.3940000 + 286 286 1 0.0000000 8.0360000 32.1460000 18.7520000 + 287 287 1 0.0000000 8.0360000 32.1460000 24.1090000 + 288 288 1 0.0000000 8.0360000 32.1460000 29.4670000 + 289 289 1 0.0000000 13.3940000 5.3580000 2.6790000 + 290 290 1 0.0000000 13.3940000 5.3580000 8.0360000 + 291 291 1 0.0000000 13.3940000 5.3580000 13.3940000 + 292 292 1 0.0000000 13.3940000 5.3580000 18.7520000 + 293 293 1 0.0000000 13.3940000 5.3580000 24.1090000 + 294 294 1 0.0000000 13.3940000 5.3580000 29.4670000 + 295 295 1 0.0000000 13.3940000 10.7150000 2.6790000 + 296 296 1 0.0000000 13.3940000 10.7150000 8.0360000 + 297 297 1 0.0000000 13.3940000 10.7150000 13.3940000 + 298 298 1 0.0000000 13.3940000 10.7150000 18.7520000 + 299 299 1 0.0000000 13.3940000 10.7150000 24.1090000 + 300 300 1 0.0000000 13.3940000 10.7150000 29.4670000 + 301 301 1 0.0000000 13.3940000 16.0730000 2.6790000 + 302 302 1 0.0000000 13.3940000 16.0730000 8.0360000 + 303 303 1 0.0000000 13.3940000 16.0730000 13.3940000 + 304 304 1 0.0000000 13.3940000 16.0730000 18.7520000 + 305 305 1 0.0000000 13.3940000 16.0730000 24.1090000 + 306 306 1 0.0000000 13.3940000 16.0730000 29.4670000 + 307 307 1 0.0000000 13.3940000 21.4310000 2.6790000 + 308 308 1 0.0000000 13.3940000 21.4310000 8.0360000 + 309 309 1 0.0000000 13.3940000 21.4310000 13.3940000 + 310 310 1 0.0000000 13.3940000 21.4310000 18.7520000 + 311 311 1 0.0000000 13.3940000 21.4310000 24.1090000 + 312 312 1 0.0000000 13.3940000 21.4310000 29.4670000 + 313 313 1 0.0000000 13.3940000 26.7880000 2.6790000 + 314 314 1 0.0000000 13.3940000 26.7880000 8.0360000 + 315 315 1 0.0000000 13.3940000 26.7880000 13.3940000 + 316 316 1 0.0000000 13.3940000 26.7880000 18.7520000 + 317 317 1 0.0000000 13.3940000 26.7880000 24.1090000 + 318 318 1 0.0000000 13.3940000 26.7880000 29.4670000 + 319 319 1 0.0000000 13.3940000 32.1460000 2.6790000 + 320 320 1 0.0000000 13.3940000 32.1460000 8.0360000 + 321 321 1 0.0000000 13.3940000 32.1460000 13.3940000 + 322 322 1 0.0000000 13.3940000 32.1460000 18.7520000 + 323 323 1 0.0000000 13.3940000 32.1460000 24.1090000 + 324 324 1 0.0000000 13.3940000 32.1460000 29.4670000 + 325 325 1 0.0000000 18.7520000 5.3580000 2.6790000 + 326 326 1 0.0000000 18.7520000 5.3580000 8.0360000 + 327 327 1 0.0000000 18.7520000 5.3580000 13.3940000 + 328 328 1 0.0000000 18.7520000 5.3580000 18.7520000 + 329 329 1 0.0000000 18.7520000 5.3580000 24.1090000 + 330 330 1 0.0000000 18.7520000 5.3580000 29.4670000 + 331 331 1 0.0000000 18.7520000 10.7150000 2.6790000 + 332 332 1 0.0000000 18.7520000 10.7150000 8.0360000 + 333 333 1 0.0000000 18.7520000 10.7150000 13.3940000 + 334 334 1 0.0000000 18.7520000 10.7150000 18.7520000 + 335 335 1 0.0000000 18.7520000 10.7150000 24.1090000 + 336 336 1 0.0000000 18.7520000 10.7150000 29.4670000 + 337 337 1 0.0000000 18.7520000 16.0730000 2.6790000 + 338 338 1 0.0000000 18.7520000 16.0730000 8.0360000 + 339 339 1 0.0000000 18.7520000 16.0730000 13.3940000 + 340 340 1 0.0000000 18.7520000 16.0730000 18.7520000 + 341 341 1 0.0000000 18.7520000 16.0730000 24.1090000 + 342 342 1 0.0000000 18.7520000 16.0730000 29.4670000 + 343 343 1 0.0000000 18.7520000 21.4310000 2.6790000 + 344 344 1 0.0000000 18.7520000 21.4310000 8.0360000 + 345 345 1 0.0000000 18.7520000 21.4310000 13.3940000 + 346 346 1 0.0000000 18.7520000 21.4310000 18.7520000 + 347 347 1 0.0000000 18.7520000 21.4310000 24.1090000 + 348 348 1 0.0000000 18.7520000 21.4310000 29.4670000 + 349 349 1 0.0000000 18.7520000 26.7880000 2.6790000 + 350 350 1 0.0000000 18.7520000 26.7880000 8.0360000 + 351 351 1 0.0000000 18.7520000 26.7880000 13.3940000 + 352 352 1 0.0000000 18.7520000 26.7880000 18.7520000 + 353 353 1 0.0000000 18.7520000 26.7880000 24.1090000 + 354 354 1 0.0000000 18.7520000 26.7880000 29.4670000 + 355 355 1 0.0000000 18.7520000 32.1460000 2.6790000 + 356 356 1 0.0000000 18.7520000 32.1460000 8.0360000 + 357 357 1 0.0000000 18.7520000 32.1460000 13.3940000 + 358 358 1 0.0000000 18.7520000 32.1460000 18.7520000 + 359 359 1 0.0000000 18.7520000 32.1460000 24.1090000 + 360 360 1 0.0000000 18.7520000 32.1460000 29.4670000 + 361 361 1 0.0000000 24.1090000 5.3580000 2.6790000 + 362 362 1 0.0000000 24.1090000 5.3580000 8.0360000 + 363 363 1 0.0000000 24.1090000 5.3580000 13.3940000 + 364 364 1 0.0000000 24.1090000 5.3580000 18.7520000 + 365 365 1 0.0000000 24.1090000 5.3580000 24.1090000 + 366 366 1 0.0000000 24.1090000 5.3580000 29.4670000 + 367 367 1 0.0000000 24.1090000 10.7150000 2.6790000 + 368 368 1 0.0000000 24.1090000 10.7150000 8.0360000 + 369 369 1 0.0000000 24.1090000 10.7150000 13.3940000 + 370 370 1 0.0000000 24.1090000 10.7150000 18.7520000 + 371 371 1 0.0000000 24.1090000 10.7150000 24.1090000 + 372 372 1 0.0000000 24.1090000 10.7150000 29.4670000 + 373 373 1 0.0000000 24.1090000 16.0730000 2.6790000 + 374 374 1 0.0000000 24.1090000 16.0730000 8.0360000 + 375 375 1 0.0000000 24.1090000 16.0730000 13.3940000 + 376 376 1 0.0000000 24.1090000 16.0730000 18.7520000 + 377 377 1 0.0000000 24.1090000 16.0730000 24.1090000 + 378 378 1 0.0000000 24.1090000 16.0730000 29.4670000 + 379 379 1 0.0000000 24.1090000 21.4310000 2.6790000 + 380 380 1 0.0000000 24.1090000 21.4310000 8.0360000 + 381 381 1 0.0000000 24.1090000 21.4310000 13.3940000 + 382 382 1 0.0000000 24.1090000 21.4310000 18.7520000 + 383 383 1 0.0000000 24.1090000 21.4310000 24.1090000 + 384 384 1 0.0000000 24.1090000 21.4310000 29.4670000 + 385 385 1 0.0000000 24.1090000 26.7880000 2.6790000 + 386 386 1 0.0000000 24.1090000 26.7880000 8.0360000 + 387 387 1 0.0000000 24.1090000 26.7880000 13.3940000 + 388 388 1 0.0000000 24.1090000 26.7880000 18.7520000 + 389 389 1 0.0000000 24.1090000 26.7880000 24.1090000 + 390 390 1 0.0000000 24.1090000 26.7880000 29.4670000 + 391 391 1 0.0000000 24.1090000 32.1460000 2.6790000 + 392 392 1 0.0000000 24.1090000 32.1460000 8.0360000 + 393 393 1 0.0000000 24.1090000 32.1460000 13.3940000 + 394 394 1 0.0000000 24.1090000 32.1460000 18.7520000 + 395 395 1 0.0000000 24.1090000 32.1460000 24.1090000 + 396 396 1 0.0000000 24.1090000 32.1460000 29.4670000 + 397 397 1 0.0000000 29.4670000 5.3580000 2.6790000 + 398 398 1 0.0000000 29.4670000 5.3580000 8.0360000 + 399 399 1 0.0000000 29.4670000 5.3580000 13.3940000 + 400 400 1 0.0000000 29.4670000 5.3580000 18.7520000 + 401 401 1 0.0000000 29.4670000 5.3580000 24.1090000 + 402 402 1 0.0000000 29.4670000 5.3580000 29.4670000 + 403 403 1 0.0000000 29.4670000 10.7150000 2.6790000 + 404 404 1 0.0000000 29.4670000 10.7150000 8.0360000 + 405 405 1 0.0000000 29.4670000 10.7150000 13.3940000 + 406 406 1 0.0000000 29.4670000 10.7150000 18.7520000 + 407 407 1 0.0000000 29.4670000 10.7150000 24.1090000 + 408 408 1 0.0000000 29.4670000 10.7150000 29.4670000 + 409 409 1 0.0000000 29.4670000 16.0730000 2.6790000 + 410 410 1 0.0000000 29.4670000 16.0730000 8.0360000 + 411 411 1 0.0000000 29.4670000 16.0730000 13.3940000 + 412 412 1 0.0000000 29.4670000 16.0730000 18.7520000 + 413 413 1 0.0000000 29.4670000 16.0730000 24.1090000 + 414 414 1 0.0000000 29.4670000 16.0730000 29.4670000 + 415 415 1 0.0000000 29.4670000 21.4310000 2.6790000 + 416 416 1 0.0000000 29.4670000 21.4310000 8.0360000 + 417 417 1 0.0000000 29.4670000 21.4310000 13.3940000 + 418 418 1 0.0000000 29.4670000 21.4310000 18.7520000 + 419 419 1 0.0000000 29.4670000 21.4310000 24.1090000 + 420 420 1 0.0000000 29.4670000 21.4310000 29.4670000 + 421 421 1 0.0000000 29.4670000 26.7880000 2.6790000 + 422 422 1 0.0000000 29.4670000 26.7880000 8.0360000 + 423 423 1 0.0000000 29.4670000 26.7880000 13.3940000 + 424 424 1 0.0000000 29.4670000 26.7880000 18.7520000 + 425 425 1 0.0000000 29.4670000 26.7880000 24.1090000 + 426 426 1 0.0000000 29.4670000 26.7880000 29.4670000 + 427 427 1 0.0000000 29.4670000 32.1460000 2.6790000 + 428 428 1 0.0000000 29.4670000 32.1460000 8.0360000 + 429 429 1 0.0000000 29.4670000 32.1460000 13.3940000 + 430 430 1 0.0000000 29.4670000 32.1460000 18.7520000 + 431 431 1 0.0000000 29.4670000 32.1460000 24.1090000 + 432 432 1 0.0000000 29.4670000 32.1460000 29.4670000 + 433 433 1 0.0000000 2.6790000 2.6790000 5.3580000 + 434 434 1 0.0000000 2.6790000 2.6790000 10.7150000 + 435 435 1 0.0000000 2.6790000 2.6790000 16.0730000 + 436 436 1 0.0000000 2.6790000 2.6790000 21.4310000 + 437 437 1 0.0000000 2.6790000 2.6790000 26.7880000 + 438 438 1 0.0000000 2.6790000 2.6790000 32.1460000 + 439 439 1 0.0000000 2.6790000 8.0360000 5.3580000 + 440 440 1 0.0000000 2.6790000 8.0360000 10.7150000 + 441 441 1 0.0000000 2.6790000 8.0360000 16.0730000 + 442 442 1 0.0000000 2.6790000 8.0360000 21.4310000 + 443 443 1 0.0000000 2.6790000 8.0360000 26.7880000 + 444 444 1 0.0000000 2.6790000 8.0360000 32.1460000 + 445 445 1 0.0000000 2.6790000 13.3940000 5.3580000 + 446 446 1 0.0000000 2.6790000 13.3940000 10.7150000 + 447 447 1 0.0000000 2.6790000 13.3940000 16.0730000 + 448 448 1 0.0000000 2.6790000 13.3940000 21.4310000 + 449 449 1 0.0000000 2.6790000 13.3940000 26.7880000 + 450 450 1 0.0000000 2.6790000 13.3940000 32.1460000 + 451 451 1 0.0000000 2.6790000 18.7520000 5.3580000 + 452 452 1 0.0000000 2.6790000 18.7520000 10.7150000 + 453 453 1 0.0000000 2.6790000 18.7520000 16.0730000 + 454 454 1 0.0000000 2.6790000 18.7520000 21.4310000 + 455 455 1 0.0000000 2.6790000 18.7520000 26.7880000 + 456 456 1 0.0000000 2.6790000 18.7520000 32.1460000 + 457 457 1 0.0000000 2.6790000 24.1090000 5.3580000 + 458 458 1 0.0000000 2.6790000 24.1090000 10.7150000 + 459 459 1 0.0000000 2.6790000 24.1090000 16.0730000 + 460 460 1 0.0000000 2.6790000 24.1090000 21.4310000 + 461 461 1 0.0000000 2.6790000 24.1090000 26.7880000 + 462 462 1 0.0000000 2.6790000 24.1090000 32.1460000 + 463 463 1 0.0000000 2.6790000 29.4670000 5.3580000 + 464 464 1 0.0000000 2.6790000 29.4670000 10.7150000 + 465 465 1 0.0000000 2.6790000 29.4670000 16.0730000 + 466 466 1 0.0000000 2.6790000 29.4670000 21.4310000 + 467 467 1 0.0000000 2.6790000 29.4670000 26.7880000 + 468 468 1 0.0000000 2.6790000 29.4670000 32.1460000 + 469 469 1 0.0000000 8.0360000 2.6790000 5.3580000 + 470 470 1 0.0000000 8.0360000 2.6790000 10.7150000 + 471 471 1 0.0000000 8.0360000 2.6790000 16.0730000 + 472 472 1 0.0000000 8.0360000 2.6790000 21.4310000 + 473 473 1 0.0000000 8.0360000 2.6790000 26.7880000 + 474 474 1 0.0000000 8.0360000 2.6790000 32.1460000 + 475 475 1 0.0000000 8.0360000 8.0360000 5.3580000 + 476 476 1 0.0000000 8.0360000 8.0360000 10.7150000 + 477 477 1 0.0000000 8.0360000 8.0360000 16.0730000 + 478 478 1 0.0000000 8.0360000 8.0360000 21.4310000 + 479 479 1 0.0000000 8.0360000 8.0360000 26.7880000 + 480 480 1 0.0000000 8.0360000 8.0360000 32.1460000 + 481 481 1 0.0000000 8.0360000 13.3940000 5.3580000 + 482 482 1 0.0000000 8.0360000 13.3940000 10.7150000 + 483 483 1 0.0000000 8.0360000 13.3940000 16.0730000 + 484 484 1 0.0000000 8.0360000 13.3940000 21.4310000 + 485 485 1 0.0000000 8.0360000 13.3940000 26.7880000 + 486 486 1 0.0000000 8.0360000 13.3940000 32.1460000 + 487 487 1 0.0000000 8.0360000 18.7520000 5.3580000 + 488 488 1 0.0000000 8.0360000 18.7520000 10.7150000 + 489 489 1 0.0000000 8.0360000 18.7520000 16.0730000 + 490 490 1 0.0000000 8.0360000 18.7520000 21.4310000 + 491 491 1 0.0000000 8.0360000 18.7520000 26.7880000 + 492 492 1 0.0000000 8.0360000 18.7520000 32.1460000 + 493 493 1 0.0000000 8.0360000 24.1090000 5.3580000 + 494 494 1 0.0000000 8.0360000 24.1090000 10.7150000 + 495 495 1 0.0000000 8.0360000 24.1090000 16.0730000 + 496 496 1 0.0000000 8.0360000 24.1090000 21.4310000 + 497 497 1 0.0000000 8.0360000 24.1090000 26.7880000 + 498 498 1 0.0000000 8.0360000 24.1090000 32.1460000 + 499 499 1 0.0000000 8.0360000 29.4670000 5.3580000 + 500 500 1 0.0000000 8.0360000 29.4670000 10.7150000 + 501 501 1 0.0000000 8.0360000 29.4670000 16.0730000 + 502 502 1 0.0000000 8.0360000 29.4670000 21.4310000 + 503 503 1 0.0000000 8.0360000 29.4670000 26.7880000 + 504 504 1 0.0000000 8.0360000 29.4670000 32.1460000 + 505 505 1 0.0000000 13.3940000 2.6790000 5.3580000 + 506 506 1 0.0000000 13.3940000 2.6790000 10.7150000 + 507 507 1 0.0000000 13.3940000 2.6790000 16.0730000 + 508 508 1 0.0000000 13.3940000 2.6790000 21.4310000 + 509 509 1 0.0000000 13.3940000 2.6790000 26.7880000 + 510 510 1 0.0000000 13.3940000 2.6790000 32.1460000 + 511 511 1 0.0000000 13.3940000 8.0360000 5.3580000 + 512 512 1 0.0000000 13.3940000 8.0360000 10.7150000 + 513 513 1 0.0000000 13.3940000 8.0360000 16.0730000 + 514 514 1 0.0000000 13.3940000 8.0360000 21.4310000 + 515 515 1 0.0000000 13.3940000 8.0360000 26.7880000 + 516 516 1 0.0000000 13.3940000 8.0360000 32.1460000 + 517 517 1 0.0000000 13.3940000 13.3940000 5.3580000 + 518 518 1 0.0000000 13.3940000 13.3940000 10.7150000 + 519 519 1 0.0000000 13.3940000 13.3940000 16.0730000 + 520 520 1 0.0000000 13.3940000 13.3940000 21.4310000 + 521 521 1 0.0000000 13.3940000 13.3940000 26.7880000 + 522 522 1 0.0000000 13.3940000 13.3940000 32.1460000 + 523 523 1 0.0000000 13.3940000 18.7520000 5.3580000 + 524 524 1 0.0000000 13.3940000 18.7520000 10.7150000 + 525 525 1 0.0000000 13.3940000 18.7520000 16.0730000 + 526 526 1 0.0000000 13.3940000 18.7520000 21.4310000 + 527 527 1 0.0000000 13.3940000 18.7520000 26.7880000 + 528 528 1 0.0000000 13.3940000 18.7520000 32.1460000 + 529 529 1 0.0000000 13.3940000 24.1090000 5.3580000 + 530 530 1 0.0000000 13.3940000 24.1090000 10.7150000 + 531 531 1 0.0000000 13.3940000 24.1090000 16.0730000 + 532 532 1 0.0000000 13.3940000 24.1090000 21.4310000 + 533 533 1 0.0000000 13.3940000 24.1090000 26.7880000 + 534 534 1 0.0000000 13.3940000 24.1090000 32.1460000 + 535 535 1 0.0000000 13.3940000 29.4670000 5.3580000 + 536 536 1 0.0000000 13.3940000 29.4670000 10.7150000 + 537 537 1 0.0000000 13.3940000 29.4670000 16.0730000 + 538 538 1 0.0000000 13.3940000 29.4670000 21.4310000 + 539 539 1 0.0000000 13.3940000 29.4670000 26.7880000 + 540 540 1 0.0000000 13.3940000 29.4670000 32.1460000 + 541 541 1 0.0000000 18.7520000 2.6790000 5.3580000 + 542 542 1 0.0000000 18.7520000 2.6790000 10.7150000 + 543 543 1 0.0000000 18.7520000 2.6790000 16.0730000 + 544 544 1 0.0000000 18.7520000 2.6790000 21.4310000 + 545 545 1 0.0000000 18.7520000 2.6790000 26.7880000 + 546 546 1 0.0000000 18.7520000 2.6790000 32.1460000 + 547 547 1 0.0000000 18.7520000 8.0360000 5.3580000 + 548 548 1 0.0000000 18.7520000 8.0360000 10.7150000 + 549 549 1 0.0000000 18.7520000 8.0360000 16.0730000 + 550 550 1 0.0000000 18.7520000 8.0360000 21.4310000 + 551 551 1 0.0000000 18.7520000 8.0360000 26.7880000 + 552 552 1 0.0000000 18.7520000 8.0360000 32.1460000 + 553 553 1 0.0000000 18.7520000 13.3940000 5.3580000 + 554 554 1 0.0000000 18.7520000 13.3940000 10.7150000 + 555 555 1 0.0000000 18.7520000 13.3940000 16.0730000 + 556 556 1 0.0000000 18.7520000 13.3940000 21.4310000 + 557 557 1 0.0000000 18.7520000 13.3940000 26.7880000 + 558 558 1 0.0000000 18.7520000 13.3940000 32.1460000 + 559 559 1 0.0000000 18.7520000 18.7520000 5.3580000 + 560 560 1 0.0000000 18.7520000 18.7520000 10.7150000 + 561 561 1 0.0000000 18.7520000 18.7520000 16.0730000 + 562 562 1 0.0000000 18.7520000 18.7520000 21.4310000 + 563 563 1 0.0000000 18.7520000 18.7520000 26.7880000 + 564 564 1 0.0000000 18.7520000 18.7520000 32.1460000 + 565 565 1 0.0000000 18.7520000 24.1090000 5.3580000 + 566 566 1 0.0000000 18.7520000 24.1090000 10.7150000 + 567 567 1 0.0000000 18.7520000 24.1090000 16.0730000 + 568 568 1 0.0000000 18.7520000 24.1090000 21.4310000 + 569 569 1 0.0000000 18.7520000 24.1090000 26.7880000 + 570 570 1 0.0000000 18.7520000 24.1090000 32.1460000 + 571 571 1 0.0000000 18.7520000 29.4670000 5.3580000 + 572 572 1 0.0000000 18.7520000 29.4670000 10.7150000 + 573 573 1 0.0000000 18.7520000 29.4670000 16.0730000 + 574 574 1 0.0000000 18.7520000 29.4670000 21.4310000 + 575 575 1 0.0000000 18.7520000 29.4670000 26.7880000 + 576 576 1 0.0000000 18.7520000 29.4670000 32.1460000 + 577 577 1 0.0000000 24.1090000 2.6790000 5.3580000 + 578 578 1 0.0000000 24.1090000 2.6790000 10.7150000 + 579 579 1 0.0000000 24.1090000 2.6790000 16.0730000 + 580 580 1 0.0000000 24.1090000 2.6790000 21.4310000 + 581 581 1 0.0000000 24.1090000 2.6790000 26.7880000 + 582 582 1 0.0000000 24.1090000 2.6790000 32.1460000 + 583 583 1 0.0000000 24.1090000 8.0360000 5.3580000 + 584 584 1 0.0000000 24.1090000 8.0360000 10.7150000 + 585 585 1 0.0000000 24.1090000 8.0360000 16.0730000 + 586 586 1 0.0000000 24.1090000 8.0360000 21.4310000 + 587 587 1 0.0000000 24.1090000 8.0360000 26.7880000 + 588 588 1 0.0000000 24.1090000 8.0360000 32.1460000 + 589 589 1 0.0000000 24.1090000 13.3940000 5.3580000 + 590 590 1 0.0000000 24.1090000 13.3940000 10.7150000 + 591 591 1 0.0000000 24.1090000 13.3940000 16.0730000 + 592 592 1 0.0000000 24.1090000 13.3940000 21.4310000 + 593 593 1 0.0000000 24.1090000 13.3940000 26.7880000 + 594 594 1 0.0000000 24.1090000 13.3940000 32.1460000 + 595 595 1 0.0000000 24.1090000 18.7520000 5.3580000 + 596 596 1 0.0000000 24.1090000 18.7520000 10.7150000 + 597 597 1 0.0000000 24.1090000 18.7520000 16.0730000 + 598 598 1 0.0000000 24.1090000 18.7520000 21.4310000 + 599 599 1 0.0000000 24.1090000 18.7520000 26.7880000 + 600 600 1 0.0000000 24.1090000 18.7520000 32.1460000 + 601 601 1 0.0000000 24.1090000 24.1090000 5.3580000 + 602 602 1 0.0000000 24.1090000 24.1090000 10.7150000 + 603 603 1 0.0000000 24.1090000 24.1090000 16.0730000 + 604 604 1 0.0000000 24.1090000 24.1090000 21.4310000 + 605 605 1 0.0000000 24.1090000 24.1090000 26.7880000 + 606 606 1 0.0000000 24.1090000 24.1090000 32.1460000 + 607 607 1 0.0000000 24.1090000 29.4670000 5.3580000 + 608 608 1 0.0000000 24.1090000 29.4670000 10.7150000 + 609 609 1 0.0000000 24.1090000 29.4670000 16.0730000 + 610 610 1 0.0000000 24.1090000 29.4670000 21.4310000 + 611 611 1 0.0000000 24.1090000 29.4670000 26.7880000 + 612 612 1 0.0000000 24.1090000 29.4670000 32.1460000 + 613 613 1 0.0000000 29.4670000 2.6790000 5.3580000 + 614 614 1 0.0000000 29.4670000 2.6790000 10.7150000 + 615 615 1 0.0000000 29.4670000 2.6790000 16.0730000 + 616 616 1 0.0000000 29.4670000 2.6790000 21.4310000 + 617 617 1 0.0000000 29.4670000 2.6790000 26.7880000 + 618 618 1 0.0000000 29.4670000 2.6790000 32.1460000 + 619 619 1 0.0000000 29.4670000 8.0360000 5.3580000 + 620 620 1 0.0000000 29.4670000 8.0360000 10.7150000 + 621 621 1 0.0000000 29.4670000 8.0360000 16.0730000 + 622 622 1 0.0000000 29.4670000 8.0360000 21.4310000 + 623 623 1 0.0000000 29.4670000 8.0360000 26.7880000 + 624 624 1 0.0000000 29.4670000 8.0360000 32.1460000 + 625 625 1 0.0000000 29.4670000 13.3940000 5.3580000 + 626 626 1 0.0000000 29.4670000 13.3940000 10.7150000 + 627 627 1 0.0000000 29.4670000 13.3940000 16.0730000 + 628 628 1 0.0000000 29.4670000 13.3940000 21.4310000 + 629 629 1 0.0000000 29.4670000 13.3940000 26.7880000 + 630 630 1 0.0000000 29.4670000 13.3940000 32.1460000 + 631 631 1 0.0000000 29.4670000 18.7520000 5.3580000 + 632 632 1 0.0000000 29.4670000 18.7520000 10.7150000 + 633 633 1 0.0000000 29.4670000 18.7520000 16.0730000 + 634 634 1 0.0000000 29.4670000 18.7520000 21.4310000 + 635 635 1 0.0000000 29.4670000 18.7520000 26.7880000 + 636 636 1 0.0000000 29.4670000 18.7520000 32.1460000 + 637 637 1 0.0000000 29.4670000 24.1090000 5.3580000 + 638 638 1 0.0000000 29.4670000 24.1090000 10.7150000 + 639 639 1 0.0000000 29.4670000 24.1090000 16.0730000 + 640 640 1 0.0000000 29.4670000 24.1090000 21.4310000 + 641 641 1 0.0000000 29.4670000 24.1090000 26.7880000 + 642 642 1 0.0000000 29.4670000 24.1090000 32.1460000 + 643 643 1 0.0000000 29.4670000 29.4670000 5.3580000 + 644 644 1 0.0000000 29.4670000 29.4670000 10.7150000 + 645 645 1 0.0000000 29.4670000 29.4670000 16.0730000 + 646 646 1 0.0000000 29.4670000 29.4670000 21.4310000 + 647 647 1 0.0000000 29.4670000 29.4670000 26.7880000 + 648 648 1 0.0000000 29.4670000 29.4670000 32.1460000 + 649 649 1 0.0000000 0.0000000 5.3580000 5.3580000 + 650 650 1 0.0000000 0.0000000 5.3580000 10.7150000 + 651 651 1 0.0000000 0.0000000 5.3580000 16.0730000 + 652 652 1 0.0000000 0.0000000 5.3580000 21.4310000 + 653 653 1 0.0000000 0.0000000 5.3580000 26.7880000 + 654 654 1 0.0000000 0.0000000 5.3580000 32.1460000 + 655 655 1 0.0000000 0.0000000 10.7150000 5.3580000 + 656 656 1 0.0000000 0.0000000 10.7150000 10.7150000 + 657 657 1 0.0000000 0.0000000 10.7150000 16.0730000 + 658 658 1 0.0000000 0.0000000 10.7150000 21.4310000 + 659 659 1 0.0000000 0.0000000 10.7150000 26.7880000 + 660 660 1 0.0000000 0.0000000 10.7150000 32.1460000 + 661 661 1 0.0000000 0.0000000 16.0730000 5.3580000 + 662 662 1 0.0000000 0.0000000 16.0730000 10.7150000 + 663 663 1 0.0000000 0.0000000 16.0730000 16.0730000 + 664 664 1 0.0000000 0.0000000 16.0730000 21.4310000 + 665 665 1 0.0000000 0.0000000 16.0730000 26.7880000 + 666 666 1 0.0000000 0.0000000 16.0730000 32.1460000 + 667 667 1 0.0000000 0.0000000 21.4310000 5.3580000 + 668 668 1 0.0000000 0.0000000 21.4310000 10.7150000 + 669 669 1 0.0000000 0.0000000 21.4310000 16.0730000 + 670 670 1 0.0000000 0.0000000 21.4310000 21.4310000 + 671 671 1 0.0000000 0.0000000 21.4310000 26.7880000 + 672 672 1 0.0000000 0.0000000 21.4310000 32.1460000 + 673 673 1 0.0000000 0.0000000 26.7880000 5.3580000 + 674 674 1 0.0000000 0.0000000 26.7880000 10.7150000 + 675 675 1 0.0000000 0.0000000 26.7880000 16.0730000 + 676 676 1 0.0000000 0.0000000 26.7880000 21.4310000 + 677 677 1 0.0000000 0.0000000 26.7880000 26.7880000 + 678 678 1 0.0000000 0.0000000 26.7880000 32.1460000 + 679 679 1 0.0000000 0.0000000 32.1460000 5.3580000 + 680 680 1 0.0000000 0.0000000 32.1460000 10.7150000 + 681 681 1 0.0000000 0.0000000 32.1460000 16.0730000 + 682 682 1 0.0000000 0.0000000 32.1460000 21.4310000 + 683 683 1 0.0000000 0.0000000 32.1460000 26.7880000 + 684 684 1 0.0000000 0.0000000 32.1460000 32.1460000 + 685 685 1 0.0000000 5.3580000 5.3580000 5.3580000 + 686 686 1 0.0000000 5.3580000 5.3580000 10.7150000 + 687 687 1 0.0000000 5.3580000 5.3580000 16.0730000 + 688 688 1 0.0000000 5.3580000 5.3580000 21.4310000 + 689 689 1 0.0000000 5.3580000 5.3580000 26.7880000 + 690 690 1 0.0000000 5.3580000 5.3580000 32.1460000 + 691 691 1 0.0000000 5.3580000 10.7150000 5.3580000 + 692 692 1 0.0000000 5.3580000 10.7150000 10.7150000 + 693 693 1 0.0000000 5.3580000 10.7150000 16.0730000 + 694 694 1 0.0000000 5.3580000 10.7150000 21.4310000 + 695 695 1 0.0000000 5.3580000 10.7150000 26.7880000 + 696 696 1 0.0000000 5.3580000 10.7150000 32.1460000 + 697 697 1 0.0000000 5.3580000 16.0730000 5.3580000 + 698 698 1 0.0000000 5.3580000 16.0730000 10.7150000 + 699 699 1 0.0000000 5.3580000 16.0730000 16.0730000 + 700 700 1 0.0000000 5.3580000 16.0730000 21.4310000 + 701 701 1 0.0000000 5.3580000 16.0730000 26.7880000 + 702 702 1 0.0000000 5.3580000 16.0730000 32.1460000 + 703 703 1 0.0000000 5.3580000 21.4310000 5.3580000 + 704 704 1 0.0000000 5.3580000 21.4310000 10.7150000 + 705 705 1 0.0000000 5.3580000 21.4310000 16.0730000 + 706 706 1 0.0000000 5.3580000 21.4310000 21.4310000 + 707 707 1 0.0000000 5.3580000 21.4310000 26.7880000 + 708 708 1 0.0000000 5.3580000 21.4310000 32.1460000 + 709 709 1 0.0000000 5.3580000 26.7880000 5.3580000 + 710 710 1 0.0000000 5.3580000 26.7880000 10.7150000 + 711 711 1 0.0000000 5.3580000 26.7880000 16.0730000 + 712 712 1 0.0000000 5.3580000 26.7880000 21.4310000 + 713 713 1 0.0000000 5.3580000 26.7880000 26.7880000 + 714 714 1 0.0000000 5.3580000 26.7880000 32.1460000 + 715 715 1 0.0000000 5.3580000 32.1460000 5.3580000 + 716 716 1 0.0000000 5.3580000 32.1460000 10.7150000 + 717 717 1 0.0000000 5.3580000 32.1460000 16.0730000 + 718 718 1 0.0000000 5.3580000 32.1460000 21.4310000 + 719 719 1 0.0000000 5.3580000 32.1460000 26.7880000 + 720 720 1 0.0000000 5.3580000 32.1460000 32.1460000 + 721 721 1 0.0000000 10.7150000 5.3580000 5.3580000 + 722 722 1 0.0000000 10.7150000 5.3580000 10.7150000 + 723 723 1 0.0000000 10.7150000 5.3580000 16.0730000 + 724 724 1 0.0000000 10.7150000 5.3580000 21.4310000 + 725 725 1 0.0000000 10.7150000 5.3580000 26.7880000 + 726 726 1 0.0000000 10.7150000 5.3580000 32.1460000 + 727 727 1 0.0000000 10.7150000 10.7150000 5.3580000 + 728 728 1 0.0000000 10.7150000 10.7150000 10.7150000 + 729 729 1 0.0000000 10.7150000 10.7150000 16.0730000 + 730 730 1 0.0000000 10.7150000 10.7150000 21.4310000 + 731 731 1 0.0000000 10.7150000 10.7150000 26.7880000 + 732 732 1 0.0000000 10.7150000 10.7150000 32.1460000 + 733 733 1 0.0000000 10.7150000 16.0730000 5.3580000 + 734 734 1 0.0000000 10.7150000 16.0730000 10.7150000 + 735 735 1 0.0000000 10.7150000 16.0730000 16.0730000 + 736 736 1 0.0000000 10.7150000 16.0730000 21.4310000 + 737 737 1 0.0000000 10.7150000 16.0730000 26.7880000 + 738 738 1 0.0000000 10.7150000 16.0730000 32.1460000 + 739 739 1 0.0000000 10.7150000 21.4310000 5.3580000 + 740 740 1 0.0000000 10.7150000 21.4310000 10.7150000 + 741 741 1 0.0000000 10.7150000 21.4310000 16.0730000 + 742 742 1 0.0000000 10.7150000 21.4310000 21.4310000 + 743 743 1 0.0000000 10.7150000 21.4310000 26.7880000 + 744 744 1 0.0000000 10.7150000 21.4310000 32.1460000 + 745 745 1 0.0000000 10.7150000 26.7880000 5.3580000 + 746 746 1 0.0000000 10.7150000 26.7880000 10.7150000 + 747 747 1 0.0000000 10.7150000 26.7880000 16.0730000 + 748 748 1 0.0000000 10.7150000 26.7880000 21.4310000 + 749 749 1 0.0000000 10.7150000 26.7880000 26.7880000 + 750 750 1 0.0000000 10.7150000 26.7880000 32.1460000 + 751 751 1 0.0000000 10.7150000 32.1460000 5.3580000 + 752 752 1 0.0000000 10.7150000 32.1460000 10.7150000 + 753 753 1 0.0000000 10.7150000 32.1460000 16.0730000 + 754 754 1 0.0000000 10.7150000 32.1460000 21.4310000 + 755 755 1 0.0000000 10.7150000 32.1460000 26.7880000 + 756 756 1 0.0000000 10.7150000 32.1460000 32.1460000 + 757 757 1 0.0000000 16.0730000 5.3580000 5.3580000 + 758 758 1 0.0000000 16.0730000 5.3580000 10.7150000 + 759 759 1 0.0000000 16.0730000 5.3580000 16.0730000 + 760 760 1 0.0000000 16.0730000 5.3580000 21.4310000 + 761 761 1 0.0000000 16.0730000 5.3580000 26.7880000 + 762 762 1 0.0000000 16.0730000 5.3580000 32.1460000 + 763 763 1 0.0000000 16.0730000 10.7150000 5.3580000 + 764 764 1 0.0000000 16.0730000 10.7150000 10.7150000 + 765 765 1 0.0000000 16.0730000 10.7150000 16.0730000 + 766 766 1 0.0000000 16.0730000 10.7150000 21.4310000 + 767 767 1 0.0000000 16.0730000 10.7150000 26.7880000 + 768 768 1 0.0000000 16.0730000 10.7150000 32.1460000 + 769 769 1 0.0000000 16.0730000 16.0730000 5.3580000 + 770 770 1 0.0000000 16.0730000 16.0730000 10.7150000 + 771 771 1 0.0000000 16.0730000 16.0730000 16.0730000 + 772 772 1 0.0000000 16.0730000 16.0730000 21.4310000 + 773 773 1 0.0000000 16.0730000 16.0730000 26.7880000 + 774 774 1 0.0000000 16.0730000 16.0730000 32.1460000 + 775 775 1 0.0000000 16.0730000 21.4310000 5.3580000 + 776 776 1 0.0000000 16.0730000 21.4310000 10.7150000 + 777 777 1 0.0000000 16.0730000 21.4310000 16.0730000 + 778 778 1 0.0000000 16.0730000 21.4310000 21.4310000 + 779 779 1 0.0000000 16.0730000 21.4310000 26.7880000 + 780 780 1 0.0000000 16.0730000 21.4310000 32.1460000 + 781 781 1 0.0000000 16.0730000 26.7880000 5.3580000 + 782 782 1 0.0000000 16.0730000 26.7880000 10.7150000 + 783 783 1 0.0000000 16.0730000 26.7880000 16.0730000 + 784 784 1 0.0000000 16.0730000 26.7880000 21.4310000 + 785 785 1 0.0000000 16.0730000 26.7880000 26.7880000 + 786 786 1 0.0000000 16.0730000 26.7880000 32.1460000 + 787 787 1 0.0000000 16.0730000 32.1460000 5.3580000 + 788 788 1 0.0000000 16.0730000 32.1460000 10.7150000 + 789 789 1 0.0000000 16.0730000 32.1460000 16.0730000 + 790 790 1 0.0000000 16.0730000 32.1460000 21.4310000 + 791 791 1 0.0000000 16.0730000 32.1460000 26.7880000 + 792 792 1 0.0000000 16.0730000 32.1460000 32.1460000 + 793 793 1 0.0000000 21.4310000 5.3580000 5.3580000 + 794 794 1 0.0000000 21.4310000 5.3580000 10.7150000 + 795 795 1 0.0000000 21.4310000 5.3580000 16.0730000 + 796 796 1 0.0000000 21.4310000 5.3580000 21.4310000 + 797 797 1 0.0000000 21.4310000 5.3580000 26.7880000 + 798 798 1 0.0000000 21.4310000 5.3580000 32.1460000 + 799 799 1 0.0000000 21.4310000 10.7150000 5.3580000 + 800 800 1 0.0000000 21.4310000 10.7150000 10.7150000 + 801 801 1 0.0000000 21.4310000 10.7150000 16.0730000 + 802 802 1 0.0000000 21.4310000 10.7150000 21.4310000 + 803 803 1 0.0000000 21.4310000 10.7150000 26.7880000 + 804 804 1 0.0000000 21.4310000 10.7150000 32.1460000 + 805 805 1 0.0000000 21.4310000 16.0730000 5.3580000 + 806 806 1 0.0000000 21.4310000 16.0730000 10.7150000 + 807 807 1 0.0000000 21.4310000 16.0730000 16.0730000 + 808 808 1 0.0000000 21.4310000 16.0730000 21.4310000 + 809 809 1 0.0000000 21.4310000 16.0730000 26.7880000 + 810 810 1 0.0000000 21.4310000 16.0730000 32.1460000 + 811 811 1 0.0000000 21.4310000 21.4310000 5.3580000 + 812 812 1 0.0000000 21.4310000 21.4310000 10.7150000 + 813 813 1 0.0000000 21.4310000 21.4310000 16.0730000 + 814 814 1 0.0000000 21.4310000 21.4310000 21.4310000 + 815 815 1 0.0000000 21.4310000 21.4310000 26.7880000 + 816 816 1 0.0000000 21.4310000 21.4310000 32.1460000 + 817 817 1 0.0000000 21.4310000 26.7880000 5.3580000 + 818 818 1 0.0000000 21.4310000 26.7880000 10.7150000 + 819 819 1 0.0000000 21.4310000 26.7880000 16.0730000 + 820 820 1 0.0000000 21.4310000 26.7880000 21.4310000 + 821 821 1 0.0000000 21.4310000 26.7880000 26.7880000 + 822 822 1 0.0000000 21.4310000 26.7880000 32.1460000 + 823 823 1 0.0000000 21.4310000 32.1460000 5.3580000 + 824 824 1 0.0000000 21.4310000 32.1460000 10.7150000 + 825 825 1 0.0000000 21.4310000 32.1460000 16.0730000 + 826 826 1 0.0000000 21.4310000 32.1460000 21.4310000 + 827 827 1 0.0000000 21.4310000 32.1460000 26.7880000 + 828 828 1 0.0000000 21.4310000 32.1460000 32.1460000 + 829 829 1 0.0000000 26.7880000 5.3580000 5.3580000 + 830 830 1 0.0000000 26.7880000 5.3580000 10.7150000 + 831 831 1 0.0000000 26.7880000 5.3580000 16.0730000 + 832 832 1 0.0000000 26.7880000 5.3580000 21.4310000 + 833 833 1 0.0000000 26.7880000 5.3580000 26.7880000 + 834 834 1 0.0000000 26.7880000 5.3580000 32.1460000 + 835 835 1 0.0000000 26.7880000 10.7150000 5.3580000 + 836 836 1 0.0000000 26.7880000 10.7150000 10.7150000 + 837 837 1 0.0000000 26.7880000 10.7150000 16.0730000 + 838 838 1 0.0000000 26.7880000 10.7150000 21.4310000 + 839 839 1 0.0000000 26.7880000 10.7150000 26.7880000 + 840 840 1 0.0000000 26.7880000 10.7150000 32.1460000 + 841 841 1 0.0000000 26.7880000 16.0730000 5.3580000 + 842 842 1 0.0000000 26.7880000 16.0730000 10.7150000 + 843 843 1 0.0000000 26.7880000 16.0730000 16.0730000 + 844 844 1 0.0000000 26.7880000 16.0730000 21.4310000 + 845 845 1 0.0000000 26.7880000 16.0730000 26.7880000 + 846 846 1 0.0000000 26.7880000 16.0730000 32.1460000 + 847 847 1 0.0000000 26.7880000 21.4310000 5.3580000 + 848 848 1 0.0000000 26.7880000 21.4310000 10.7150000 + 849 849 1 0.0000000 26.7880000 21.4310000 16.0730000 + 850 850 1 0.0000000 26.7880000 21.4310000 21.4310000 + 851 851 1 0.0000000 26.7880000 21.4310000 26.7880000 + 852 852 1 0.0000000 26.7880000 21.4310000 32.1460000 + 853 853 1 0.0000000 26.7880000 26.7880000 5.3580000 + 854 854 1 0.0000000 26.7880000 26.7880000 10.7150000 + 855 855 1 0.0000000 26.7880000 26.7880000 16.0730000 + 856 856 1 0.0000000 26.7880000 26.7880000 21.4310000 + 857 857 1 0.0000000 26.7880000 26.7880000 26.7880000 + 858 858 1 0.0000000 26.7880000 26.7880000 32.1460000 + 859 859 1 0.0000000 26.7880000 32.1460000 5.3580000 + 860 860 1 0.0000000 26.7880000 32.1460000 10.7150000 + 861 861 1 0.0000000 26.7880000 32.1460000 16.0730000 + 862 862 1 0.0000000 26.7880000 32.1460000 21.4310000 + 863 863 1 0.0000000 26.7880000 32.1460000 26.7880000 + 864 864 1 0.0000000 26.7880000 32.1460000 32.1460000 + diff --git a/examples/python/gjf_python/ff-argon.lmp b/examples/python/gjf_python/ff-argon.lmp new file mode 100644 index 0000000000..b6f7bc931a --- /dev/null +++ b/examples/python/gjf_python/ff-argon.lmp @@ -0,0 +1,20 @@ +############################# +#Atoms types - mass - charge# +############################# +#@ 1 atom types #!THIS LINE IS NECESSARY DON'T SPEND HOURS FINDING THAT OUT!# + +variable Ar equal 1 + +############# +#Atom Masses# +############# + +mass ${Ar} 39.903 + +########################### +#Pair Potentials - Tersoff# +########################### + +pair_style lj/cubic +pair_coeff * * 0.0102701 3.42 + diff --git a/examples/python/gjf_python/gjf.py b/examples/python/gjf_python/gjf.py new file mode 100644 index 0000000000..37fc28bb79 --- /dev/null +++ b/examples/python/gjf_python/gjf.py @@ -0,0 +1,180 @@ +"""Made by Charlie Sievers Ph.D. Candidate, UC Davis, Donadio Lab 2019""" + +from mpi4py import MPI +from lammps import lammps +import lammps_tools as lt +import numpy as np + +comm = MPI.COMM_WORLD +rank = comm.Get_rank() + +""" LAMMPS VARIABLES """ + +# new file or restart +run_no = 0 + +# data files +infile = "argon.lmp" +restart_file = "final_restart.{}".format(run_no) +ff_file = "ff-argon.lmp" +outfile = "output.dat" + +# write final_restart +write_final_restart = False + +# random numbers +seed0 = 2357 +seed1 = 26588 +seed2 = 10669 + +# MD Parameters +# number of steps +nsteps = 50000 +# timestep +# dt = 0.001 +# starting simulation temp +temp_start = 10 +# final simulation temp +temp_final = 10 +# relaxation time +trel = 1 +# trajectory frequency +ntraj = 0 + +# Ensemble 0 = GJF u, 1 = GJF v, 2 = Nose-Hoover, 3 = Langevin, 4 = BDP (Currently all NVT) +ensemble = 0 + +# Output Parameters +nthermo = 200 +nout = int(nsteps / nthermo) # Important + +# output to screen and log file? +lammps_output = False +# Lammps Thermo +thermo = False + +python_output = True + +# Write output to file? +write_output = False + +if write_output is True: + data = open("{}".format(outfile), "w") + +if python_output is True: + if rank == 0: + print("dt, temp, ke, fke, pe, fpe") + +for j in range(20): + + # timestep + dt = 0.005*(j+1) + + if lammps_output is True: + lmp = lammps() + else: + lmp = lammps(cmdargs=["-screen", "none", "-log", "none"]) + + lmp.command("atom_style full") + lmp.command("units metal") + lmp.command("processors * * *") + lmp.command("neighbor 1 bin") + lmp.command("boundary p p p") + + if run_no is 0: + lmp.command("read_data {}".format(infile)) + else: + lmp.command("read_restart final_restart".format(run_no-1)) + + if thermo is True: + lmp.command("thermo_style custom time temp pe ke press vol cpu") + lmp.command("thermo {}".format(nthermo)) + lmp.command("thermo_modify flush yes") + + lmp.file("{}".format(ff_file)) + lmp.command("timestep {}".format(dt)) + + # get_per_atom_compute example with dim of two and within a group + # lmp.command("region rand block 5 20 5 20 5 20") + # lmp.command("group rand region rand") + # lmp.command("compute x rand property/atom x y") + # test = get_per_atom_compute(comm, lmp, "x", 2, group="rand") + + lmp.command("compute ke all ke/atom") + + lmp.command("compute pe all pe") + + if ntraj != 0: + lmp.command("dump 1 all dcd {} trajectory.dcd".format(ntraj)) + lmp.command("dump_modify 1 unwrap yes") + + if run_no == 0: + lmp.command("velocity all create {} {} mom yes dist gaussian".format(temp_start, seed0)) + lmp.command("fix nve all nve") + + if ensemble == 0: + # gjf u + lmp.command("fix lang all langevin {} {} {} {} gjf yes halfstep yes".format( + temp_start, temp_final, trel, seed1)) + elif ensemble == 1: + # gjf v + lmp.command("fix lang all langevin {} {} {} {} gjf yes".format( + temp_start, temp_final, trel, seed1)) + elif ensemble == 2: + # NH + lmp.command("fix nvt all nvt temp {} {} {}".format( + temp_start, temp_final, trel)) + elif ensemble == 3: + # lang + lmp.command("fix lang all langevin {} {} {} {} tally yes zero yes".format( + temp_start, temp_final, trel, seed1)) + elif ensemble == 4: + # BDP + lmp.command("fix stoch all temp/csvr {} {} {} {}".format( + temp_start, temp_final, trel, seed1)) + + natoms = lmp.extract_global("natoms", 0) + nlocal = lmp.extract_global("nlocal", 0) + ke_sum = lt.get_per_atom_compute(comm, lmp, "ke") + ke_2 = ke_sum**2 + pe_sum = 0 + pe_2 = 0 + temp_sum = 0 + + for i in range(nout): + nlocal = lmp.extract_global("nlocal", 0) + lmp.command("run {} pre no post no".format(nthermo)) + temp = lmp.extract_compute("thermo_temp", 0, 0) + ke = lt.get_per_atom_compute(comm, lmp, "ke") + pe = lmp.extract_compute("pe", 0, 0) + ke_sum += ke + ke_2 += ke**2 + pe_sum += pe + pe_2 += pe**2 + temp_sum += temp + + if python_output is True: + if rank == 0: + print("Time: {:.6f}, Temp: {:.6f}, KE: {:.6f}, PE: {:.6f}".format( + i*nthermo*dt, temp, ke.sum(), pe)) + + if write_final_restart is True: + lmp.command("write_restart {}".format(restart_file)) + + if rank == 0: + ke = ke_sum.sum() / (nout + 1) + fke = (np.sqrt((ke_2 - ke_sum ** 2 / (nout + 1)) / (nout + 1))).sum() + pe = pe_sum / nout + fpe = np.sqrt((pe_2 - pe_sum ** 2 / nout) / nout) + temp = temp_sum / nout + + if python_output is True: + print(dt, temp, ke, fke, pe, fpe) + + if write_output is True: + data.write("{:.6f} {:.6f} {:.6f} {:.6f} {:.6f} {:.6f}\n".format( + dt, temp, ke, fke, pe, fpe)) + data.flush() + +if write_output is True: + data.close() diff --git a/examples/python/gjf_python/lammps_tools.py b/examples/python/gjf_python/lammps_tools.py new file mode 100644 index 0000000000..f9f25eaa28 --- /dev/null +++ b/examples/python/gjf_python/lammps_tools.py @@ -0,0 +1,78 @@ +"""Made by Charlie Sievers Ph.D. Candidate, UC Davis, Donadio Lab 2019""" + +from mpi4py import MPI +import numpy as np +import ctypes as ctypes + +""" USEFULL LAMMPS FUNCTION """ + + +def get_nlocal(lmp): + + nlocal = lmp.extract_global("nlocal", 0) + + return nlocal + + +def get_aid(lmp, group=None): + + if group is None: + c_aid = lmp.extract_atom("id", 0) + ptr = ctypes.cast(c_aid, ctypes.POINTER(ctypes.c_int32 * get_nlocal(lmp))) + aid = np.frombuffer(ptr.contents, dtype=np.int32) + else: + try: + c_aid = lmp.extract_variable("aid", group, 1) + ptr = ctypes.cast(c_aid, ctypes.POINTER(ctypes.c_double * get_nlocal(lmp))) + aid = np.frombuffer(ptr.contents, dtype=np.double) + except ValueError: + lmp.command("variable aid atom id") + aid = get_aid(lmp, group) + + return aid + + +def get_per_atom_compute(comm, lmp, name, dim=1, dtype="double", group=None): + laid = get_aid(lmp, group) + nlocal = get_nlocal(lmp) + ngroup = comm.allgather(laid) + type = dim + if dim > 1: + type = 2 + for array in ngroup: + try: + aid = np.concatenate((aid, array)) + except UnboundLocalError: + aid = array + if dtype == "double": + mem_type = ctypes.c_double + elif dtype == "integer": + mem_type = ctypes.c_int + elif dtype == "bigint": + mem_type = ctypes.c_int32 + else: + print("{} not implemented".format(dtype)) + return + + tmp = lmp.extract_compute(name, 1, type) + if type == 1: + ptr = ctypes.cast(tmp, ctypes.POINTER(mem_type * nlocal)) + else: + ptr = ctypes.cast(tmp[0], ctypes.POINTER(mem_type * nlocal * dim)) + lcompute = comm.allgather(np.frombuffer(ptr.contents).reshape((-1, dim))) + for array in lcompute: + try: + compute = np.concatenate((compute, array)) + except UnboundLocalError: + compute = array + + aid = np.expand_dims(aid, axis=1) + + compute = np.concatenate((aid, compute), axis=-1) + compute = compute[compute[..., 0] != 0] + compute = compute[compute[..., 0].argsort()][..., 1:] + + if dim == 1: + compute = np.squeeze(compute, axis=-1) + + return compute \ No newline at end of file From e0454ce5809dac84d953d4ea1349546d6ce6c9c4 Mon Sep 17 00:00:00 2001 From: casievers Date: Fri, 19 Jul 2019 17:21:01 -0700 Subject: [PATCH 064/237] updated gjf in fix_langevin --- src/fix_langevin.cpp | 39 +++++++++++---------------------------- src/fix_langevin.h | 2 +- 2 files changed, 12 insertions(+), 29 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 0db60c14cf..e530a4615d 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -174,11 +174,11 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : // no need to set peratom_flag, b/c data is for internal use only if (gjfflag) { - int mem = 6*atom->nmax*sizeof(double); - if (hsflag) mem += 3*atom->nmax*sizeof(double); - - comm->maxexchange_fix = MAX(comm->maxexchange_fix, 0); - comm->maxexchange_fix += MAX(1000, mem); + //int mem = 6*atom->nmax*sizeof(double); + //if (hsflag) mem += 3*atom->nmax*sizeof(double); +// + //comm->maxexchange_fix = MAX(comm->maxexchange_fix, 0); + //comm->maxexchange_fix += MAX(1000, mem); nvalues = 3; grow_arrays(atom->nmax); @@ -230,7 +230,6 @@ FixLangevin::~FixLangevin() int FixLangevin::setmask() { int mask = 0; - //if (gjfflag) mask |= INITIAL_INTEGRATE; if (gjfflag) mask |= POST_INTEGRATE; mask |= POST_FORCE; mask |= POST_FORCE_RESPA; @@ -319,35 +318,19 @@ void FixLangevin::setup(int vflag) post_force_respa(vflag,nlevels_respa-1,0); ((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1); } - if (gjfflag && hsflag) { + if (gjfflag) { - double dt = update->dt; // update v of atoms in group - - double **v = atom->v; - double *rmass = atom->rmass; - int *type = atom->type; + double ** v = atom->v; + double **f = atom->f; int nlocal = atom->nlocal; if (igroup == atom->firstgroup) nlocal = atom->nfirst; - double boltz = force->boltz; - double mvv2e = force->mvv2e; - double ftm2v = force->ftm2v; - - double gamma2; - for (int i = 0; i < nlocal; i++) { - if (rmass) { - gamma2 = sqrt(rmass[i]) * sqrt(2.0*boltz/t_period/dt/mvv2e) / ftm2v; - gamma2 *= 1.0/sqrt(ratio[type[i]]) * tsqrt; - } else { - gamma2 = gfactor2[type[i]] * tsqrt; - } - - franprev[i][0] = gamma2*random->gaussian(); - franprev[i][1] = gamma2*random->gaussian(); - franprev[i][2] = gamma2*random->gaussian(); + f[i][0] = wildcard[i][0]; + f[i][1] = wildcard[i][1]; + f[i][2] = wildcard[i][2]; wildcard[i][0] = v[i][0]; wildcard[i][1] = v[i][1]; wildcard[i][2] = v[i][2]; diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 461d4e5140..888734de04 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -65,7 +65,7 @@ class FixLangevin : public Fix { double **flangevin; double *tforce; double **franprev; - double **lv; //lucas velocity or half-step velocity + double **lv; //2GJ velocity or half-step velocity double **wildcard; int nvalues; From f4da63287042207967a76897717eb3712925ff32 Mon Sep 17 00:00:00 2001 From: casievers Date: Mon, 22 Jul 2019 13:48:02 -0700 Subject: [PATCH 065/237] recent change to gjf tally (not working) --- examples/gjf/out.argon | 249 ---------------------------------- examples/gjf/trajectory.0.dcd | Bin 439092 -> 0 bytes src/fix_langevin.cpp | 7 +- 3 files changed, 6 insertions(+), 250 deletions(-) delete mode 100644 examples/gjf/out.argon delete mode 100644 examples/gjf/trajectory.0.dcd diff --git a/examples/gjf/out.argon b/examples/gjf/out.argon deleted file mode 100644 index 8dda569157..0000000000 --- a/examples/gjf/out.argon +++ /dev/null @@ -1,249 +0,0 @@ -LAMMPS (1 Feb 2019) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) - using 1 OpenMP thread(s) per MPI task -Reading data file ... - orthogonal box = (0 0 0) to (32.146 32.146 32.146) - 1 by 2 by 2 MPI processor grid - reading atoms ... - 864 atoms -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 0 0 - special bond factors coul: 0 0 0 - 0 = max # of 1-2 neighbors - 0 = max # of 1-3 neighbors - 0 = max # of 1-4 neighbors - 1 = max # of special neighbors -Setting up the ensembles -WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) -WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) -WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) -WARNING: Careful, tally is untested (src/fix_langevin.cpp:145) -Doing Molecular dynamics -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 6.94072 - ghost atom cutoff = 6.94072 - binsize = 3.47036, bins = 10 10 10 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cubic, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/3d/newton - bin: standard -Setting up Verlet run ... - Unit style : metal - Current step : 0 - Time step : 0.12 -Per MPI rank memory allocation (min/avg/max) = 6.847 | 6.847 | 6.847 Mbytes -Time Temp PotEng TotEng Press Volume CPU - 0 10 -56.207655 -55.09214 33.340921 33218.561 0 - 24 10.156356 -55.092888 -53.959932 339.40964 33218.561 0.082175482 - 48 9.6121006 -55.07262 -54.000376 344.56765 33218.561 0.19529325 - 72 9.8187467 -55.16687 -54.071574 318.85979 33218.561 0.29643488 - 96 9.5421385 -55.151229 -54.086789 322.8842 33218.561 0.38801357 - 120 10.295035 -55.12919 -53.980763 332.00171 33218.561 0.47607262 - 144 10.331608 -55.09907 -53.946563 339.28896 33218.561 0.57389224 - 168 10.154698 -55.058246 -53.925475 349.03253 33218.561 0.65481471 - 192 9.858198 -55.127583 -54.027886 330.09298 33218.561 0.74437734 - 216 9.6658918 -55.10812 -54.029875 334.28383 33218.561 0.8278495 - 240 9.6801591 -55.102386 -54.02255 336.27242 33218.561 0.91167379 - 264 10.685658 -55.046238 -53.854237 355.0448 33218.561 1.0023789 - 288 10.387727 -55.08427 -53.925504 343.87247 33218.561 1.0960371 - 312 10.231132 -55.120428 -53.97913 333.22463 33218.561 1.2382998 - 336 10.20896 -55.075142 -53.936317 344.88438 33218.561 1.3420489 - 360 9.7876538 -55.165008 -54.07318 319.14962 33218.561 1.42782 - 384 9.9872551 -55.13881 -54.024717 327.82471 33218.561 1.5417666 - 408 9.5362734 -55.063733 -53.999947 346.50545 33218.561 1.6328366 - 432 10.262638 -55.126608 -53.981796 332.16342 33218.561 1.7242996 - 456 9.9228239 -55.122119 -54.015214 332.26261 33218.561 1.8124888 - 480 9.7026324 -55.17057 -54.088227 317.84818 33218.561 1.900233 - 504 10.028762 -55.082465 -53.963741 343.04257 33218.561 1.989605 - 528 9.8227851 -55.121222 -54.025476 332.42857 33218.561 2.0708802 - 552 10.208672 -55.100242 -53.961449 338.68109 33218.561 2.1527217 - 576 10.180849 -55.124065 -53.988376 331.29516 33218.561 2.238126 - 600 9.6467252 -55.119533 -54.043427 332.43109 33218.561 2.323443 - 624 10.041885 -55.173802 -54.053614 318.48579 33218.561 2.4046151 - 648 10.151597 -55.111725 -53.979299 334.66227 33218.561 2.4902161 - 672 9.7719111 -55.060111 -53.970039 348.55249 33218.561 2.5800372 - 696 10.476688 -55.088109 -53.919419 342.94922 33218.561 2.6731395 - 720 10.517805 -55.113604 -53.940327 335.47342 33218.561 2.760651 - 744 10.006466 -55.045085 -53.928848 353.53813 33218.561 2.8537894 - 768 10.201492 -55.081598 -53.943606 343.3206 33218.561 2.9404115 - 792 10.117738 -55.077806 -53.949157 345.31093 33218.561 3.030765 - 816 10.362288 -55.11635 -53.960421 333.9045 33218.561 3.1177356 - 840 10.204164 -55.097619 -53.959329 338.82717 33218.561 3.2091886 - 864 10.147722 -55.101372 -53.969378 338.19682 33218.561 3.3003742 - 888 9.9265037 -55.111394 -54.004077 334.08116 33218.561 3.395341 - 912 10.206403 -55.132181 -53.993642 328.89904 33218.561 3.4882881 - 936 10.28639 -55.093317 -53.945855 340.61244 33218.561 3.5764735 - 960 9.8028822 -55.078802 -53.985276 343.5904 33218.561 3.7056267 - 984 10.492755 -55.121321 -53.950839 334.62697 33218.561 3.8055611 - 1008 10.621569 -55.088588 -53.903736 343.33166 33218.561 3.9144807 - 1032 10.006729 -55.113459 -53.997193 334.43025 33218.561 4.0189888 - 1056 10.099853 -55.068035 -53.941381 347.42158 33218.561 4.1391664 - 1080 10.254232 -55.066685 -53.92281 347.15777 33218.561 4.2443953 - 1104 9.9495142 -55.13686 -54.026977 327.63107 33218.561 4.3368342 - 1128 10.377108 -55.08846 -53.930878 344.13083 33218.561 4.4287748 - 1152 10.036981 -55.114643 -53.995003 334.88053 33218.561 4.526868 - 1176 10.144779 -55.097125 -53.965459 339.698 33218.561 4.6614049 - 1200 10.075844 -55.14695 -54.022974 326.05911 33218.561 4.799835 - 1224 10.183695 -55.121716 -53.98571 332.75772 33218.561 4.8908897 - 1248 10.581369 -55.027954 -53.847587 359.06251 33218.561 4.9839788 - 1272 10.158269 -55.105173 -53.972003 337.52964 33218.561 5.0918646 - 1296 9.8776072 -55.064085 -53.962223 347.15648 33218.561 5.2291209 - 1320 10.38161 -55.118366 -53.960282 335.17767 33218.561 5.3570446 - 1344 9.9528146 -55.141937 -54.031685 326.27117 33218.561 5.4584705 - 1368 9.8024326 -55.117808 -54.024332 332.99835 33218.561 5.5557818 - 1392 10.35447 -55.110235 -53.955179 336.80412 33218.561 5.6467392 - 1416 10.199061 -55.105641 -53.96792 337.36785 33218.561 5.7476527 - 1440 9.6868779 -55.087316 -54.00673 340.9166 33218.561 5.8432207 - 1464 10.093238 -55.049436 -53.92352 352.27563 33218.561 5.9471521 - 1488 9.7578808 -55.123935 -54.035429 329.93926 33218.561 6.0495014 - 1512 10.099979 -55.205426 -54.078758 309.26166 33218.561 6.1612976 - 1536 10.172944 -55.087106 -53.952299 342.93395 33218.561 6.2506202 - 1560 10.51771 -55.107635 -53.934369 340.1967 33218.561 6.3379856 - 1584 10.044994 -55.101362 -53.980828 339.03163 33218.561 6.4362567 - 1608 9.624758 -55.146246 -54.07259 324.32486 33218.561 6.5385845 - 1632 9.9135215 -55.097278 -53.99141 338.69162 33218.561 6.6452786 - 1656 9.863681 -55.070523 -53.970214 345.84608 33218.561 6.7518212 - 1680 10.138513 -55.127065 -53.996099 330.40757 33218.561 6.8775188 - 1704 10.382237 -55.070572 -53.912417 347.074 33218.561 7.0126448 - 1728 10.72487 -55.081147 -53.884771 345.83623 33218.561 7.1384216 - 1752 9.829431 -55.131041 -54.034553 328.57652 33218.561 7.2616419 - 1776 9.9135662 -55.100556 -53.994682 336.52238 33218.561 7.4193201 - 1800 10.41873 -55.097116 -53.934891 340.24798 33218.561 7.5570544 - 1824 10.151782 -55.03231 -53.899864 357.3654 33218.561 7.6872905 - 1848 10.42307 -55.043808 -53.881099 355.71677 33218.561 7.7933885 - 1872 10.276862 -55.085016 -53.938616 344.46273 33218.561 7.8887472 - 1896 9.7681373 -55.146507 -54.056857 324.84323 33218.561 7.9977923 - 1920 9.6624824 -55.103214 -54.025349 336.06397 33218.561 8.090235 - 1944 10.153504 -55.049175 -53.916536 352.36339 33218.561 8.1923703 - 1968 10.191954 -55.098741 -53.961813 338.8667 33218.561 8.3320906 - 1992 9.92167 -55.117079 -54.010302 332.96497 33218.561 8.4774437 - 2016 9.5737281 -55.091141 -54.023178 339.41837 33218.561 8.6149527 - 2040 10.600908 -55.092717 -53.91017 342.71852 33218.561 8.7639523 - 2064 9.9214513 -55.099904 -53.993151 337.46799 33218.561 8.898087 - 2088 9.9256258 -55.082224 -53.975005 342.85042 33218.561 9.0130784 - 2112 10.345379 -55.112923 -53.95888 335.81471 33218.561 9.1422766 - 2136 9.8876649 -55.079254 -53.97627 343.05764 33218.561 9.2885707 - 2160 10.04492 -55.074876 -53.95435 344.82419 33218.561 9.3876103 - 2184 10.028705 -55.063961 -53.945244 347.70549 33218.561 9.500967 - 2208 10.412572 -55.136316 -53.974778 329.8188 33218.561 9.5900362 - 2232 10.404205 -55.09913 -53.938525 339.77542 33218.561 9.7048353 - 2256 9.5694135 -55.139021 -54.071538 326.37473 33218.561 9.8045958 - 2280 10.244745 -55.134529 -53.991713 329.19392 33218.561 9.8968908 - 2304 9.9129922 -55.116192 -54.010382 333.14326 33218.561 9.9818651 - 2328 10.167027 -55.08241 -53.948263 343.08135 33218.561 10.068683 - 2352 10.262045 -55.144327 -53.999581 327.40876 33218.561 10.155937 - 2376 10.520934 -55.073147 -53.899521 347.6998 33218.561 10.246316 - 2400 9.9628692 -55.122001 -54.010628 331.25369 33218.561 10.336833 - 2424 10.565531 -55.157113 -53.978512 325.14897 33218.561 10.452039 - 2448 10.03709 -55.096409 -53.976756 338.29607 33218.561 10.537936 - 2472 9.384311 -55.141821 -54.094987 324.23247 33218.561 10.628689 - 2496 9.8019362 -55.105685 -54.012264 335.97239 33218.561 10.717287 - 2520 10.31114 -55.078831 -53.928608 345.42395 33218.561 10.818756 - 2544 10.407237 -55.148382 -53.987439 325.94421 33218.561 10.910801 - 2568 10.257967 -55.041348 -53.897056 355.73261 33218.561 11.004221 - 2592 9.8425807 -55.139428 -54.041474 328.28096 33218.561 11.101295 - 2616 10.140697 -55.100238 -53.969028 338.76319 33218.561 11.192211 - 2640 9.7102818 -55.136288 -54.053091 326.7053 33218.561 11.280277 - 2664 10.120372 -55.128779 -53.999836 330.71707 33218.561 11.369001 - 2688 10.232537 -55.120614 -53.979159 333.35087 33218.561 11.464652 - 2712 10.032526 -55.094761 -53.975618 339.97984 33218.561 11.559387 - 2736 9.8791 -55.121998 -54.01997 332.32556 33218.561 11.649679 - 2760 9.891483 -55.120919 -54.017509 331.32614 33218.561 11.742604 - 2784 10.201053 -55.165525 -54.027582 320.39272 33218.561 11.85274 - 2808 10.238648 -55.096449 -53.954312 340.06316 33218.561 11.939782 - 2832 9.8692851 -55.068632 -53.967699 346.77535 33218.561 12.036655 - 2856 10.179976 -55.128413 -53.992822 331.5662 33218.561 12.123227 - 2880 9.7656315 -55.1468 -54.057429 324.02612 33218.561 12.213117 - 2904 9.7991628 -55.049191 -53.95608 352.45738 33218.561 12.326761 - 2928 10.581767 -55.093293 -53.912881 341.37292 33218.561 12.417633 - 2952 10.546144 -55.07452 -53.898081 347.02025 33218.561 12.52701 - 2976 9.8306008 -55.14762 -54.051002 323.45715 33218.561 12.633522 - 3000 10.033532 -55.076433 -53.957178 345.36812 33218.561 12.72627 - 3024 10.046266 -55.085775 -53.965099 342.47786 33218.561 12.816242 - 3048 10.176777 -55.133013 -53.997778 329.04144 33218.561 12.903175 - 3072 9.9778064 -55.143787 -54.030748 326.75284 33218.561 13.014329 - 3096 10.516223 -55.110144 -53.937043 336.802 33218.561 13.104673 - 3120 9.6561157 -55.138699 -54.061544 325.6652 33218.561 13.207371 - 3144 10.237043 -55.060968 -53.91901 349.44011 33218.561 13.303442 - 3168 9.9704264 -55.123073 -54.010857 332.19725 33218.561 13.391877 - 3192 10.493307 -55.144402 -53.973858 327.15485 33218.561 13.482857 - 3216 10.022171 -55.141782 -54.023794 326.08249 33218.561 13.574484 - 3240 9.6957248 -55.137865 -54.056292 326.04858 33218.561 13.671408 - 3264 9.9685299 -55.124301 -54.012297 331.9015 33218.561 13.760186 - 3288 10.413707 -55.153604 -53.99194 324.32939 33218.561 13.877604 - 3312 10.022953 -55.103422 -53.985346 337.52066 33218.561 13.977562 - 3336 10.044478 -55.110297 -53.98982 334.48379 33218.561 14.065563 - 3360 9.8593734 -55.130623 -54.030795 327.71748 33218.561 14.15952 - 3384 9.9269422 -55.107979 -54.000613 335.18173 33218.561 14.258064 - 3408 10.288049 -55.092276 -53.944629 340.71484 33218.561 14.36211 - 3432 9.9702156 -55.08732 -53.975128 341.72171 33218.561 14.452123 - 3456 10.246178 -55.091669 -53.948692 341.62844 33218.561 14.555775 - 3480 10.559292 -55.086917 -53.909012 343.70626 33218.561 14.645718 - 3504 10.652207 -55.050897 -53.862628 354.46979 33218.561 14.797422 - 3528 9.9835266 -55.0557 -53.942023 350.74747 33218.561 14.895716 - 3552 10.240934 -55.123217 -53.980825 332.26434 33218.561 15.023796 - 3576 10.406519 -55.093536 -53.932674 341.54029 33218.561 15.203252 - 3600 10.406733 -55.095168 -53.934282 341.22192 33218.561 15.303986 - 3624 9.9877484 -55.154231 -54.040083 323.55633 33218.561 15.398883 - 3648 10.391829 -55.110208 -53.950984 337.09219 33218.561 15.49042 - 3672 10.368995 -55.069591 -53.912914 346.82649 33218.561 15.582259 - 3696 10.362939 -55.109012 -53.953011 337.32216 33218.561 15.679316 - 3720 10.465254 -55.136214 -53.968799 331.22288 33218.561 15.773303 - 3744 9.8238226 -55.10114 -54.005278 338.12616 33218.561 15.86905 - 3768 10.205504 -55.101263 -53.962824 339.04196 33218.561 15.960072 - 3792 9.9589987 -55.118883 -54.007942 332.84318 33218.561 16.047055 - 3816 10.253382 -55.117513 -53.973732 334.42101 33218.561 16.148412 - 3840 10.262393 -55.069549 -53.924764 349.084 33218.561 16.235391 - 3864 9.7367167 -55.078288 -53.992142 342.48207 33218.561 16.329112 - 3888 10.171202 -55.134701 -54.000088 329.5847 33218.561 16.415353 - 3912 10.01925 -55.145139 -54.027477 326.65074 33218.561 16.526334 - 3936 10.053638 -55.038151 -53.916653 355.74893 33218.561 16.618524 - 3960 10.044055 -55.058382 -53.937953 349.01834 33218.561 16.712577 - 3984 10.382422 -55.099216 -53.941041 339.28099 33218.561 16.79941 - 4008 9.97927 -55.09284 -53.979637 339.07225 33218.561 16.904198 - 4032 9.6782319 -55.126143 -54.046522 329.0201 33218.561 16.991454 - 4056 9.6593809 -55.123677 -54.046159 329.89833 33218.561 17.097172 - 4080 10.442896 -55.141149 -53.976229 327.9899 33218.561 17.189364 - 4104 9.9571109 -55.08588 -53.975149 341.3746 33218.561 17.294147 - 4128 10.44943 -55.087946 -53.922296 343.09435 33218.561 17.387357 - 4152 10.040581 -55.171939 -54.051897 317.85348 33218.561 17.500905 - 4176 10.089442 -55.128713 -54.00322 330.29121 33218.561 17.588891 - 4200 10.316156 -55.123219 -53.972436 333.59382 33218.561 17.679254 - 4224 10.177245 -55.095671 -53.960384 339.34498 33218.561 17.770569 - 4248 9.7129183 -55.135335 -54.051844 328.25125 33218.561 17.857728 - 4272 10.231838 -55.099554 -53.958177 339.64015 33218.561 17.944226 - 4296 9.9737677 -55.117885 -54.005297 333.07248 33218.561 18.034105 - 4320 10.004955 -55.116155 -54.000088 333.52271 33218.561 18.129644 - 4344 9.5938901 -55.133824 -54.063612 327.84171 33218.561 18.215476 - 4368 9.8954562 -55.131603 -54.02775 329.0813 33218.561 18.306539 - 4392 10.439732 -55.100379 -53.935812 339.81679 33218.561 18.395651 - 4416 9.934513 -55.08449 -53.97628 341.74441 33218.561 18.484506 - 4440 10.025998 -55.136771 -54.018356 327.73718 33218.561 18.593946 - 4464 9.9304451 -55.101817 -53.994061 338.1801 33218.561 18.684011 - 4488 10.344371 -55.085856 -53.931926 342.91721 33218.561 18.782399 - 4512 10.033193 -55.091778 -53.972561 339.85728 33218.561 18.879666 - 4536 9.2361614 -55.169375 -54.139067 316.67597 33218.561 18.983667 - 4560 9.5786289 -55.179976 -54.111465 314.76415 33218.561 19.079009 - 4584 10.071651 -55.107218 -53.98371 336.10364 33218.561 19.163975 - 4608 9.9873098 -55.109348 -53.995249 336.03665 33218.561 19.25635 - 4632 10.143888 -55.119423 -53.987857 333.74978 33218.561 19.346658 - 4656 9.7506264 -55.114772 -54.027075 332.98271 33218.561 19.435425 - 4680 9.9616769 -55.096054 -53.984814 339.20499 33218.561 19.55562 - 4704 10.271313 -55.074522 -53.928742 345.87397 33218.561 19.642652 - 4728 9.9172336 -55.098805 -53.992523 338.06318 33218.561 19.734557 - 4752 9.9556222 -55.12128 -54.010716 332.66408 33218.561 19.83859 - 4776 10.197593 -55.095293 -53.957736 339.50067 33218.561 19.947471 - 4800 10.145085 -55.108467 -53.976768 336.05115 33218.561 20.044183 - 4824 10.205523 -55.147376 -54.008934 325.56559 33218.561 20.144393 - 4848 9.8900281 -55.121598 -54.01835 331.17401 33218.561 20.243197 - 4872 10.03655 -55.100936 -53.981343 337.6777 33218.561 20.336043 - 4896 9.8120635 -55.087507 -53.992957 341.42438 33218.561 20.425498 - 4920 10.615354 -55.093335 -53.909176 342.30776 33218.561 20.519318 - 4944 10.374366 -55.06455 -53.907274 351.10607 33218.561 20.612312 - 4968 10.677474 -55.147807 -53.956718 327.85703 33218.561 20.719371 - 4992 10.558882 -55.145253 -53.967393 327.427 33218.561 20.818726 - 5016 9.4097946 -55.150835 -54.101158 321.62641 33218.561 20.914472 diff --git a/examples/gjf/trajectory.0.dcd b/examples/gjf/trajectory.0.dcd deleted file mode 100644 index 47927e9909cfcfc86ceb2568ba1660efed5834f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439092 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 z 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

YmD()?v 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

k(3eUSN@wI2>xvLzU?kG7;9mTIr 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

n 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 != update->beginstep){ fdrag[0] = gamma1*gjffac*v[i][0]; fdrag[1] = gamma1*gjffac*v[i][1]; fdrag[2] = gamma1*gjffac*v[i][2]; } + else if (Tp_GJF && update->ntimestep == update->beginstep){ + fdrag[0] = 0.0; + fdrag[1] = 0.0; + fdrag[2] = 0.0; + } flangevin[i][0] = fdrag[0] + fran[0]; flangevin[i][1] = fdrag[1] + fran[1]; flangevin[i][2] = fdrag[2] + fran[2]; From 3ae8d5ea702eae92d1645608b2e75abcb119fcc6 Mon Sep 17 00:00:00 2001 From: casievers Date: Tue, 23 Jul 2019 18:41:31 -0700 Subject: [PATCH 066/237] debugging gjf tally --- src/fix_langevin.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 3aa8a8e6ff..33f5c3d2d9 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -660,9 +660,12 @@ void FixLangevin::post_force_templated() if (Tp_TALLY) { if (Tp_GJF && update->ntimestep != update->beginstep){ - fdrag[0] = gamma1*gjffac*v[i][0]; - fdrag[1] = gamma1*gjffac*v[i][1]; - fdrag[2] = gamma1*gjffac*v[i][2]; + fdrag[0] = gamma1*gjffac*gjffac*v[i][0]; + fdrag[1] = gamma1*gjffac*gjffac*v[i][1]; + fdrag[2] = gamma1*gjffac*gjffac*v[i][2]; + fran[0] *= gjffac; + fran[1] *= gjffac; + fran[2] *= gjffac; } else if (Tp_GJF && update->ntimestep == update->beginstep){ fdrag[0] = 0.0; @@ -894,14 +897,8 @@ void FixLangevin::end_of_step() v[i][2] = lv[i][2]; } } - if (tallyflag && hsflag){ - energy_onestep += gjffac*(flangevin[i][0] * lv[i][0] + - flangevin[i][1] * lv[i][1] + flangevin[i][2] * lv[i][2]); - } - else if (tallyflag){ - energy_onestep += flangevin[i][0] * v[i][0] + flangevin[i][1] * v[i][1] + - flangevin[i][2] * v[i][2]; - } + energy_onestep += flangevin[i][0] * v[i][0] + flangevin[i][1] * v[i][1] + + flangevin[i][2] * v[i][2]; } if (tallyflag) { energy += energy_onestep * update->dt; @@ -977,8 +974,11 @@ double FixLangevin::compute_scalar() } // convert midstep energy back to previous fullstep energy - - double energy_me = energy - 0.5*energy_onestep*update->dt; + double energy_me; + if (gjfflag) + energy_me = energy - energy_onestep*update->dt; + else + energy_me = energy - 0.5*energy_onestep*update->dt; double energy_all; MPI_Allreduce(&energy_me,&energy_all,1,MPI_DOUBLE,MPI_SUM,world); From b97e856bf29d87059a8236230ff5591af2748838 Mon Sep 17 00:00:00 2001 From: casievers Date: Wed, 24 Jul 2019 16:05:25 -0700 Subject: [PATCH 067/237] Tally works and example readmes addes --- examples/gjf/README.md | 13 +++++++++++++ examples/python/gjf_python/README.md | 18 ++++++++++++++++++ src/fix_langevin.cpp | 5 ----- 3 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 examples/gjf/README.md create mode 100644 examples/python/gjf_python/README.md diff --git a/examples/gjf/README.md b/examples/gjf/README.md new file mode 100644 index 0000000000..e285ab8510 --- /dev/null +++ b/examples/gjf/README.md @@ -0,0 +1,13 @@ +# LAMMPS GJF-2GJ THERMOSTAT EXAMPLE W/ PYTHON + +## GJF-2GJ THERMOSTAT + +This directory contains the ingredients to run an NVT simulation using the GJF-2GJ thermostat. + +Example: +``` +NP=4 #number of processors +mpirun -np $NP lmp_mpi -in.argon -out.argon +``` + +## Required LAMMPS packages: MOLECULE package diff --git a/examples/python/gjf_python/README.md b/examples/python/gjf_python/README.md new file mode 100644 index 0000000000..707289f02d --- /dev/null +++ b/examples/python/gjf_python/README.md @@ -0,0 +1,18 @@ +# LAMMPS GJF-2GJ THERMOSTAT EXAMPLE W/ PYTHON + +## GJF-2GJ THERMOSTAT + +This directory contains a python script to run NVT simulations using the GJF-2GJ thermostat. +The script will vary the timestep and write thermodynamic output to screen. +This script has True/False options to change how you would like to dump/write your output. + +Example: +``` +NP=4 #number of processors +mpirun -np $NP python gjf.py +``` + +## Required LAMMPS packages: MOLECULE package +## LAMMPS COMPILE MODE: SHLIB +## LAMMPS OPTIONAL INSTALL: make install-python +## Required Python packages: mpi4py diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 33f5c3d2d9..bfd170262e 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -174,11 +174,6 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : // no need to set peratom_flag, b/c data is for internal use only if (gjfflag) { - //int mem = 6*atom->nmax*sizeof(double); - //if (hsflag) mem += 3*atom->nmax*sizeof(double); -// - //comm->maxexchange_fix = MAX(comm->maxexchange_fix, 0); - //comm->maxexchange_fix += MAX(1000, mem); nvalues = 3; grow_arrays(atom->nmax); From 13f4fe186be64b10ed387f716dcf6cfb91a904c7 Mon Sep 17 00:00:00 2001 From: casievers Date: Wed, 24 Jul 2019 16:30:02 -0700 Subject: [PATCH 068/237] Updated examples/gjf/README.md --- examples/gjf/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/gjf/README.md b/examples/gjf/README.md index e285ab8510..79ef4cd2e1 100644 --- a/examples/gjf/README.md +++ b/examples/gjf/README.md @@ -1,4 +1,4 @@ -# LAMMPS GJF-2GJ THERMOSTAT EXAMPLE W/ PYTHON +# LAMMPS GJF-2GJ THERMOSTAT EXAMPLE ## GJF-2GJ THERMOSTAT From 14d38596050af99f9b3bbeef49bf229b18031b41 Mon Sep 17 00:00:00 2001 From: casievers Date: Wed, 24 Jul 2019 20:08:00 -0700 Subject: [PATCH 069/237] Added GJF-2GJ authors --- src/fix_langevin.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index bfd170262e..ea0929a236 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -14,6 +14,8 @@ /* ---------------------------------------------------------------------- Contributing authors: Carolyn Phillips (U Mich), reservoir energy tally Aidan Thompson (SNL) GJF formulation + Charles Sievers (UC Davis) GJF-2GJ Implementation + Niels Gronbech-Jensen (UC Davis) GJF-2GJ Formulation ------------------------------------------------------------------------- */ #include From cc96ea1ded97f45f394bc9abec28b5e649a3368b Mon Sep 17 00:00:00 2001 From: casievers Date: Thu, 25 Jul 2019 15:23:01 -0700 Subject: [PATCH 070/237] added respa compatability, and simplified examples --- .gitignore | 3 + examples/gjf/README.md | 2 +- examples/gjf/in.argon | 162 -------------------------------------- examples/gjf/in.gjf.vfull | 23 ++++++ examples/gjf/in.gjf.vhalf | 23 ++++++ 5 files changed, 50 insertions(+), 163 deletions(-) delete mode 100644 examples/gjf/in.argon create mode 100644 examples/gjf/in.gjf.vfull create mode 100644 examples/gjf/in.gjf.vhalf diff --git a/.gitignore b/.gitignore index f9dda49da6..3e4ebcda98 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,6 @@ Thumbs.db /Makefile /cmake_install.cmake /lmp + +#python example +/example/python/gjf_python diff --git a/examples/gjf/README.md b/examples/gjf/README.md index 79ef4cd2e1..e6886cb2dd 100644 --- a/examples/gjf/README.md +++ b/examples/gjf/README.md @@ -7,7 +7,7 @@ This directory contains the ingredients to run an NVT simulation using the GJF-2 Example: ``` NP=4 #number of processors -mpirun -np $NP lmp_mpi -in.argon -out.argon +mpirun -np $NP lmp_mpi -in.gjf.vhalf ``` ## Required LAMMPS packages: MOLECULE package diff --git a/examples/gjf/in.argon b/examples/gjf/in.argon deleted file mode 100644 index 271882c665..0000000000 --- a/examples/gjf/in.argon +++ /dev/null @@ -1,162 +0,0 @@ -###############################mm -# Atom style - charge/vdw/bonded# -################################# -atom_style full - -############################################## -#Units Metal : eV - ps - angstrom - bar# -# Real : kcal/mol - fs - angstrom - atm# -############################################## -units metal - -############ -#Run number# -############ -variable run_no equal 0 # is it a restart? -variable res_no equal ${run_no}-1 # restart file number - -####################################### -#Random Seeds and Domain Decomposition# -####################################### -variable iseed0 equal 2357 -variable iseed1 equal 26488 -variable iseed2 equal 10669 -processors * * * - -########### -#Data File# -########### -variable inpfile string argon.lmp -variable resfile string final_restart.${res_no} -variable ff_file string ff-argon.lmp - -########## -#Run Type# -########## -variable minimise equal 0 #Energy Minimization -variable md equal 1 #Plain MD - -############################### -#Molecular Dynamics Parameters# -############################### -variable run_no equal 0 # is it a restart? - -variable ens equal 9 # ensemble (0=nve, 1=nvt, 2=npt, 3=ber, 4=lang, 5=stoc, 6=vres, 7=stoch, 8=gjf) -variable ts equal 0.120 # simulation timestep (time units) -variable nequil equal 0 # number of equilibration steps -variable nsteps equal 200000 # number of MD steps -#variable nsteps equal 20 # number of MD steps - -variable temp_s equal 10 # starting temperature -variable temp_f equal 10 # final simulation temperature -variable trel equal 1 # thermostat relaxation time -variable tscale equal 1 # thermostat relaxation freq - vel rescaling only -variable deltat equal 1 # maximum temperature change - vel rescaling only - -variable npttype string iso # type of NPT (iso, aniso, tri, z...) -variable pres equal 1.01325 # pressure (NPT runs only) -variable prel equal 1.0 # barostat relaxation time - -neighbor 1 bin - -################### -#Output Parameters# -################### -variable ntraj equal 1000 # trajectory output frequency - all system -variable ntraj_s equal -100 # trajectory output frequency - solute only -variable nthermo equal 200 # thermodynamic data output frequency - -################################ -#Energy Minimization Parameters# -################################ -variable mtraj equal 1 # trajectory output frequency - all system -variable etol equal 1e-5 # % change in energy -variable ftol equal 1e-5 # max force threshold (force units) -variable maxiter equal 10000 # max # of iterations - -######################## -#3D Periodic Simulation# -######################## -boundary p p p - -############################# -#Reading the input structure# -############################# -if "${run_no} == 0" then "read_data ${inpfile}" else "read_restart ${resfile}" - -############# -#Force Field# -############# -include ${ff_file} - -###################### -#Thermodynamic Output# -###################### -variable str_basic string 'step time pe temp press' - -#MD ensemble (0=nve, 1=nvt, 2=npt, 3=ber, 4=lang, 5=stoc, 6=vres) -variable str_ens string ' ' -if "${ens} == 0" then "variable str_ens string 'etotal'" -if "${ens} == 2" then "variable str_ens string 'vol pxx pyy pzz cella cellb cellc cellakpha cellbeta cellgamma'" - -#Variable for a gulp friend output -if "${ens} >= 0" then "thermo_style custom time temp pe etotal press vol cpu" & - "thermo ${nthermo}" & - "thermo_modify flush yes" - -##################### -#Energy Minimization# -##################### -if "${minimise} <= 0 || ${run_no} > 0" then "jump SELF end_minimise" - print "Doing CG minimisation" - dump mdcd all dcd ${mtraj} min.dcd - dump_modify mdcd unwrap yes - min_style cg - min_modify line quadratic - minimize ${etol} ${ftol} ${maxiter} ${maxiter} - reset_timestep 0 - undump mdcd -label end_minimise - -################ -#Timestep in ps# -################ -timestep ${ts} - -############## -#Restart file# -############## -restart 100000 restart.1 restart.2 - -################### -#Trajectory output# -################### -#dump xyz all atom 1000 silicon.lammpstrj - -if "${ntraj} > 0" then & - "dump 1 all dcd ${ntraj} trajectory.${run_no}.dcd" & - "dump_modify 1 unwrap yes" - -fix mom all momentum 1 linear 1 1 1 - -############################################################### -#Ensembles (0=nve,1=nvt, 2=npt, 3=ber, 4=lang, 5=stoc, 6=vres)# -############################################################### -if "${md} > 0" then 'print "Setting up the ensembles"' & - 'if "${run_no} == 0" then "velocity all create ${temp_s} ${iseed0} mom yes dist gaussian"' & - 'if "${ens} == 0" then "fix nve all nve"' & - 'if "${ens} == 1" then "fix nvt all nvt temp ${temp_s} ${temp_f} ${trel} tchain 5"' & - 'if "${ens} == 2" then "fix npt all npt temp ${temp_s} ${temp_f} ${trel} ${npttype} ${pres} ${pres} ${prel} tchain 5 pchain 5 mtk yes"' & - 'if "${ens} == 3" then "fix nve all nve" "fix ber all temp/berendsen ${temp_s} ${temp_f} ${trel}"' & - 'if "${ens} == 4" then "fix nve all nve" "fix lang all langevin ${temp_s} ${temp_f} ${trel} ${iseed1} tally yes zero yes"' & - 'if "${ens} == 5" then "fix nve all nve" "fix stoch all temp/csvr ${temp_s} ${temp_f} ${trel} ${iseed1}"' & - 'if "${ens} == 6" then "fix nve all nve" "fix stoch all temp/csld ${temp_s} ${temp_f} ${trel} ${iseed1}"' & - 'if "${ens} == 7" then "fix nve all nve" "fix vres all temp/rescale ${tscale} ${temp_s} ${temp_f} ${tmin} ${tmax}"' & - 'if "${ens} == 8" then "fix nve all nve" "fix lang all langevin ${temp_s} ${temp_f} ${trel} ${iseed1} gjf yes"' & - 'if "${ens} == 9" then "fix nve all nve" "fix lang all langevin ${temp_s} ${temp_f} ${trel} ${iseed1} gjf yes halfstep yes"' - -if "${md} > 0" then "print 'Doing Molecular dynamics'" & - "run ${nsteps}" & - "write_restart final_restart.${run_no}" - - diff --git a/examples/gjf/in.gjf.vfull b/examples/gjf/in.gjf.vfull new file mode 100644 index 0000000000..19420e22ca --- /dev/null +++ b/examples/gjf/in.gjf.vfull @@ -0,0 +1,23 @@ +# GJF-2GJ thermostat + +units metal +atom_style full + +boundary p p p +read_data argon.lmp + +include ff-argon.lmp + +velocity all create 10 2357 mom yes dist gaussian + +neighbor 1 bin + +timestep 0.1 + +fix nve all nve +fix lang all langevin 10 10 1 26488 gjf vfull + +thermo 200 +run 50000 + + diff --git a/examples/gjf/in.gjf.vhalf b/examples/gjf/in.gjf.vhalf new file mode 100644 index 0000000000..74e2089595 --- /dev/null +++ b/examples/gjf/in.gjf.vhalf @@ -0,0 +1,23 @@ +# GJF-2GJ thermostat + +units metal +atom_style full + +boundary p p p +read_data argon.lmp + +include ff-argon.lmp + +velocity all create 10 2357 mom yes dist gaussian + +neighbor 1 bin + +timestep 0.1 + +fix nve all nve +fix lang all langevin 10 10 1 26488 gjf vhalf + +thermo 200 +run 50000 + + From 883f6d1e8d6eb18e7ab520a1a7845ec41f31607a Mon Sep 17 00:00:00 2001 From: julient31 Date: Fri, 26 Jul 2019 09:06:43 -0600 Subject: [PATCH 071/237] Commit1 JT 072619 - corrected warnings in cg and lbfgs - removed unused variables in spin/dipole pair styles --- src/SPIN/min_spin_oso_cg.cpp | 6 ++++-- src/SPIN/min_spin_oso_lbfgs.cpp | 12 ++++++------ src/SPIN/min_spin_oso_lbfgs.h | 20 ++++++++++---------- src/SPIN/pair_spin_dipole_cut.cpp | 2 +- src/SPIN/pair_spin_dipole_long.cpp | 5 +---- 5 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 2bdc00d8ed..1c91fa1500 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -512,7 +512,8 @@ void MinSpinOSO_CG::rodrigues_rotation(const double *upp_tr, double *out) void MinSpinOSO_CG::vm3(const double *m, const double *v, double *out) { for(int i = 0; i < 3; i++){ - out[i] *= 0.0; + //out[i] *= 0.0; + out[i] = 0.0; for(int j = 0; j < 3; j++) out[i] += *(m + 3 * j + i) * v[j]; } @@ -627,7 +628,8 @@ int MinSpinOSO_CG::awc(double der_phi_0, double phi_0, double der_phi_j, double double sigma = 0.9; if ((phi_j<=phi_0+eps*fabs(phi_0)) && - ((2.0*delta-1.0) * der_phi_0>=der_phi_j>=sigma*der_phi_0)) + ((2.0*delta-1.0) * der_phi_0>=der_phi_j) && + (der_phi_j>=sigma*der_phi_0)) return 1; else return 0; diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index 6aaeb7ca23..b9315d706e 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -63,7 +63,7 @@ static const char cite_minstyle_spin_oso_lbfgs[] = /* ---------------------------------------------------------------------- */ MinSpinOSO_LBFGS::MinSpinOSO_LBFGS(LAMMPS *lmp) : - Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL), ds(NULL), dy(NULL), rho(NULL), sp_copy(NULL) + Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL), rho(NULL), ds(NULL), dy(NULL), sp_copy(NULL) { if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_lbfgs); nlocal_max = 0; @@ -345,7 +345,6 @@ void MinSpinOSO_LBFGS::calc_search_direction() double sq_global = 0.0; double yy_global = 0.0; double yr_global = 0.0; - double beta_global = 0.0; int m_index = local_iter % num_mem; // memory index int c_ind = 0; @@ -520,8 +519,6 @@ void MinSpinOSO_LBFGS::advance_spins() { int nlocal = atom->nlocal; double **sp = atom->sp; - double **fm = atom->fm; - double tdampx, tdampy, tdampz; double rot_mat[9]; // exponential of matrix made of search direction double s_new[3]; @@ -648,7 +645,8 @@ void MinSpinOSO_LBFGS::rodrigues_rotation(const double *upp_tr, double *out) void MinSpinOSO_LBFGS::vm3(const double *m, const double *v, double *out) { for(int i = 0; i < 3; i++){ - out[i] *= 0.0; + //out[i] *= 0.0; + out[i] = 0.0; for(int j = 0; j < 3; j++) out[i] += *(m + 3 * j + i) * v[j]; } @@ -762,7 +760,9 @@ int MinSpinOSO_LBFGS::awc(double der_phi_0, double phi_0, double der_phi_j, doub double delta = 0.1; double sigma = 0.9; - if ((phi_j<=phi_0+eps*fabs(phi_0)) && ((2.0*delta-1.0) * der_phi_0>=der_phi_j>=sigma*der_phi_0)) + if ((phi_j<=phi_0+eps*fabs(phi_0)) && + ((2.0*delta-1.0) * der_phi_0>=der_phi_j) && + (der_phi_j>=sigma*der_phi_0)) return 1; else return 0; diff --git a/src/SPIN/min_spin_oso_lbfgs.h b/src/SPIN/min_spin_oso_lbfgs.h index 3071bacc35..204f6bf058 100644 --- a/src/SPIN/min_spin_oso_lbfgs.h +++ b/src/SPIN/min_spin_oso_lbfgs.h @@ -34,14 +34,13 @@ class MinSpinOSO_LBFGS: public Min { void reset_vectors(); int iterate(int); private: - int ireplica,nreplica; // for neb + int ireplica,nreplica; // for neb double *spvec; // variables for atomic dof, as 1d vector double *fmvec; // variables for atomic dof, as 1d vector - double *g_cur; // current gradient vector - double *g_old; // gradient vector at previous step + double *g_old; // gradient vector at previous step + double *g_cur; // current gradient vector double *p_s; // search direction vector - double **sp_copy; // copy of the spins - int local_iter; // for neb + int local_iter; // for neb int nlocal_max; // max value of nlocal (for size of lists) void advance_spins(); @@ -54,14 +53,15 @@ class MinSpinOSO_LBFGS: public Min { int awc(double, double, double, double); void make_step(double, double *); double max_torque(); - double der_e_cur; // current derivative along search dir. - double der_e_pr; // previous derivative along search dir. - int use_line_search; // use line search or not. + double der_e_cur; // current derivative along search dir. + double der_e_pr; // previous derivative along search dir. + int use_line_search; // use line search or not. double maxepsrot; - double **ds; // change in rotation matrix between two iterations, da - double **dy; // change in gradients between two iterations, dg double *rho; // estimation of curvature + double **ds; // change in rotation matrix between two iterations, da + double **dy; // change in gradients between two iterations, dg + double **sp_copy; // copy of the spins int num_mem; // number of stored steps bigint last_negative; }; diff --git a/src/SPIN/pair_spin_dipole_cut.cpp b/src/SPIN/pair_spin_dipole_cut.cpp index 4ff198488a..e6b9a59ad9 100644 --- a/src/SPIN/pair_spin_dipole_cut.cpp +++ b/src/SPIN/pair_spin_dipole_cut.cpp @@ -323,7 +323,7 @@ void PairSpinDipoleCut::compute(int eflag, int vflag) void PairSpinDipoleCut::compute_single_pair(int ii, double fmi[3]) { int j,jnum,itype,jtype,ntypes; - int *ilist,*jlist,*numneigh,**firstneigh; + int *jlist,*numneigh,**firstneigh; double rsq,rinv,r2inv,r3inv,local_cut2; double xi[3],rij[3],eij[3],spi[4],spj[4]; diff --git a/src/SPIN/pair_spin_dipole_long.cpp b/src/SPIN/pair_spin_dipole_long.cpp index e3575a6a07..febc6f924c 100644 --- a/src/SPIN/pair_spin_dipole_long.cpp +++ b/src/SPIN/pair_spin_dipole_long.cpp @@ -355,10 +355,9 @@ void PairSpinDipoleLong::compute(int eflag, int vflag) void PairSpinDipoleLong::compute_single_pair(int ii, double fmi[3]) { - //int i,j,jj,jnum,itype,jtype; int j,jj,jnum,itype,jtype,ntypes; int k,locflag; - int *ilist,*jlist,*numneigh,**firstneigh; + int *jlist,*numneigh,**firstneigh; double r,rinv,r2inv,rsq,grij,expm2,t,erfc; double local_cut2,pre1,pre2,pre3; double bij[4],xi[3],rij[3],eij[3],spi[4],spj[4]; @@ -368,7 +367,6 @@ void PairSpinDipoleLong::compute_single_pair(int ii, double fmi[3]) double **sp = atom->sp; double **fm_long = atom->fm_long; - ilist = list->ilist; numneigh = list->numneigh; firstneigh = list->firstneigh; @@ -406,7 +404,6 @@ void PairSpinDipoleLong::compute_single_pair(int ii, double fmi[3]) // computation of the exchange interaction // loop over neighbors of atom i - //i = ilist[ii]; xi[0] = x[ii][0]; xi[1] = x[ii][1]; xi[2] = x[ii][2]; From 7e5c293a233b7f8e5b7095559452b92fb4c7eddd Mon Sep 17 00:00:00 2001 From: alxvov Date: Fri, 26 Jul 2019 16:30:38 +0000 Subject: [PATCH 072/237] delete comment. Add line option --- src/SPIN/min_spin_oso_cg.cpp | 1 - src/SPIN/min_spin_oso_lbfgs.cpp | 3 +-- src/min.cpp | 2 ++ 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 1c91fa1500..f95bffb947 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -512,7 +512,6 @@ void MinSpinOSO_CG::rodrigues_rotation(const double *upp_tr, double *out) void MinSpinOSO_CG::vm3(const double *m, const double *v, double *out) { for(int i = 0; i < 3; i++){ - //out[i] *= 0.0; out[i] = 0.0; for(int j = 0; j < 3; j++) out[i] += *(m + 3 * j + i) * v[j]; diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index b9315d706e..ce459586bf 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -645,7 +645,6 @@ void MinSpinOSO_LBFGS::rodrigues_rotation(const double *upp_tr, double *out) void MinSpinOSO_LBFGS::vm3(const double *m, const double *v, double *out) { for(int i = 0; i < 3; i++){ - //out[i] *= 0.0; out[i] = 0.0; for(int j = 0; j < 3; j++) out[i] += *(m + 3 * j + i) * v[j]; @@ -760,7 +759,7 @@ int MinSpinOSO_LBFGS::awc(double der_phi_0, double phi_0, double der_phi_j, doub double delta = 0.1; double sigma = 0.9; - if ((phi_j<=phi_0+eps*fabs(phi_0)) && + if ((phi_j<=phi_0+eps*fabs(phi_0)) && ((2.0*delta-1.0) * der_phi_0>=der_phi_j) && (der_phi_j>=sigma*der_phi_0)) return 1; diff --git a/src/min.cpp b/src/min.cpp index 2a42a444a0..a903fa98d8 100644 --- a/src/min.cpp +++ b/src/min.cpp @@ -653,6 +653,8 @@ void Min::modify_params(int narg, char **arg) if (strcmp(arg[iarg+1],"backtrack") == 0) linestyle = 0; else if (strcmp(arg[iarg+1],"quadratic") == 0) linestyle = 1; else if (strcmp(arg[iarg+1],"forcezero") == 0) linestyle = 2; + else if (strcmp(arg[iarg+1],"spin_cubic") == 0) linestyle = 3; + else if (strcmp(arg[iarg+1],"spin_none") == 0) linestyle = 4; else error->all(FLERR,"Illegal min_modify command"); iarg += 2; } else { From c5b7a36eebe3f8a886c902d53d71486920ecea2d Mon Sep 17 00:00:00 2001 From: julient31 Date: Fri, 26 Jul 2019 17:33:49 -0600 Subject: [PATCH 073/237] Commit JT 072619 - added a min_style option for norm type (euclidean or Max) - adapted and tested spin minimizers - adapted (net tested) regular minimizers --- src/SPIN/min_spin.cpp | 90 +++++-------------------------- src/SPIN/min_spin.h | 2 - src/SPIN/min_spin_oso_cg.cpp | 94 +++++++++++++-------------------- src/SPIN/min_spin_oso_cg.h | 72 ++++++++++++------------- src/SPIN/min_spin_oso_lbfgs.cpp | 61 ++++++++------------- src/SPIN/min_spin_oso_lbfgs.h | 74 +++++++++++++------------- src/min.cpp | 74 ++++++++++++++++++++++++++ src/min.h | 14 +++-- src/min_cg.cpp | 12 ++++- src/min_fire.cpp | 12 ++++- src/min_hftn.cpp | 4 ++ src/min_quickmin.cpp | 12 ++++- src/min_sd.cpp | 3 +- 13 files changed, 266 insertions(+), 258 deletions(-) diff --git a/src/SPIN/min_spin.cpp b/src/SPIN/min_spin.cpp index f56c9f0d96..d229927c29 100644 --- a/src/SPIN/min_spin.cpp +++ b/src/SPIN/min_spin.cpp @@ -119,7 +119,7 @@ void MinSpin::reset_vectors() int MinSpin::iterate(int maxiter) { bigint ntimestep; - double fmdotfm; + double fmdotfm,fmsq,fmsqall; int flag,flagall; for (int iter = 0; iter < maxiter; iter++) { @@ -166,8 +166,20 @@ int MinSpin::iterate(int maxiter) // magnetic torque tolerance criterion // sync across replicas if running multi-replica minimization + fmdotfm = fmsq = fmsqall = 0.0; if (update->ftol > 0.0) { - fmdotfm = max_torque(); + if (normstyle == 1) { // max torque norm + fmsq = max_torque(); + fmsqall = fmsq; + if (update->multireplica == 0) + MPI_Allreduce(&fmsq,&fmsqall,1,MPI_INT,MPI_MAX,universe->uworld); + } else { // Euclidean torque norm + fmsq = total_torque(); + fmsqall = fmsq; + if (update->multireplica == 0) + MPI_Allreduce(&fmsq,&fmsqall,1,MPI_INT,MPI_SUM,universe->uworld); + } + fmdotfm = fmsqall*fmsqall; if (update->multireplica == 0) { if (fmdotfm < update->ftol*update->ftol) return FTOL; } else { @@ -297,77 +309,3 @@ void MinSpin::advance_spins(double dts) // because no need for simplecticity } } - -/* ---------------------------------------------------------------------- - compute and return ||mag. torque||_2^2 -------------------------------------------------------------------------- */ - -double MinSpin::fmnorm_sqr() -{ - int nlocal = atom->nlocal; - double tx,ty,tz; - double **sp = atom->sp; - double **fm = atom->fm; - - // calc. magnetic torques - - double local_norm2_sqr = 0.0; - for (int i = 0; i < nlocal; i++) { - tx = (fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]); - ty = (fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]); - tz = (fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]); - - local_norm2_sqr += tx*tx + ty*ty + tz*tz; - } - - // no extra atom calc. for spins - - if (nextra_atom) - error->all(FLERR,"extra atom option not available yet"); - - double norm2_sqr = 0.0; - MPI_Allreduce(&local_norm2_sqr,&norm2_sqr,1,MPI_DOUBLE,MPI_SUM,world); - - return norm2_sqr; -} - -/* ---------------------------------------------------------------------- - compute and return max_i||mag. torque_i||_2 -------------------------------------------------------------------------- */ - -double MinSpin::max_torque() -{ - double fmsq,fmaxsqone,fmaxsqloc,fmaxsqall; - int nlocal = atom->nlocal; - double hbar = force->hplanck/MY_2PI; - double tx,ty,tz; - double **sp = atom->sp; - double **fm = atom->fm; - - fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; - for (int i = 0; i < nlocal; i++) { - tx = fm[i][1] * sp[i][2] - fm[i][2] * sp[i][1]; - ty = fm[i][2] * sp[i][0] - fm[i][0] * sp[i][2]; - tz = fm[i][0] * sp[i][1] - fm[i][1] * sp[i][0]; - fmsq = tx * tx + ty * ty + tz * tz; - fmaxsqone = MAX(fmaxsqone,fmsq); - } - - // finding max fm on this replica - - fmaxsqloc = fmaxsqone; - MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); - - // finding max fm over all replicas, if necessary - // this communicator would be invalid for multiprocess replicas - - fmaxsqall = fmaxsqloc; - if (update->multireplica == 1) { - fmaxsqall = fmaxsqloc; - MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); - } - - // multiply it by hbar so that units are in eV - - return sqrt(fmaxsqall) * hbar; -} diff --git a/src/SPIN/min_spin.h b/src/SPIN/min_spin.h index d6d49203d5..f2df81e58c 100644 --- a/src/SPIN/min_spin.h +++ b/src/SPIN/min_spin.h @@ -35,8 +35,6 @@ class MinSpin : public Min { int iterate(int); double evaluate_dt(); void advance_spins(double); - double fmnorm_sqr(); - double max_torque(); private: diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 1c91fa1500..16a95c5c02 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -29,6 +29,7 @@ #include "universe.h" #include "atom.h" #include "citeme.h" +#include "comm.h" #include "force.h" #include "update.h" #include "output.h" @@ -99,6 +100,13 @@ void MinSpinOSO_CG::init() Min::init(); + // warning if line_search combined to gneb + + if ((nreplica >= 1) && (linestyle != 4) && (comm->me == 0)) + error->warning(FLERR,"Line search incompatible gneb"); + + // set back use_line_search to 0 if more than one replica + if (linestyle == 3 && nreplica == 1){ use_line_search = 1; } @@ -175,7 +183,7 @@ int MinSpinOSO_CG::iterate(int maxiter) { int nlocal = atom->nlocal; bigint ntimestep; - double fmdotfm; + double fmdotfm,fmsq,fmsqall; int flag, flagall; double **sp = atom->sp; double der_e_cur_tmp = 0.0; @@ -261,8 +269,20 @@ int MinSpinOSO_CG::iterate(int maxiter) // magnetic torque tolerance criterion // sync across replicas if running multi-replica minimization + fmdotfm = fmsq = fmsqall = 0.0; if (update->ftol > 0.0) { - fmdotfm = max_torque(); + if (normstyle == 1) { // max torque norm + fmsq = max_torque(); + fmsqall = fmsq; + if (update->multireplica == 0) + MPI_Allreduce(&fmsq,&fmsqall,1,MPI_INT,MPI_MAX,universe->uworld); + } else { // Euclidean torque norm + fmsq = total_torque(); + fmsqall = fmsq; + if (update->multireplica == 0) + MPI_Allreduce(&fmsq,&fmsqall,1,MPI_INT,MPI_SUM,universe->uworld); + } + fmdotfm = fmsqall*fmsqall; if (update->multireplica == 0) { if (fmdotfm < update->ftol*update->ftol) return FTOL; } else { @@ -353,6 +373,7 @@ void MinSpinOSO_CG::calc_search_direction() MPI_Allreduce(&g2old,&g2old_global,1,MPI_DOUBLE,MPI_SUM,world); // Sum over all replicas. Good for GNEB. + if (nreplica > 1) { g2 = g2_global * factor; g2old = g2old_global * factor; @@ -361,7 +382,9 @@ void MinSpinOSO_CG::calc_search_direction() } if (fabs(g2_global) < 1.0e-60) beta = 0.0; else beta = g2_global / g2old_global; + // calculate conjugate direction + for (int i = 0; i < 3 * nlocal; i++) { p_s[i] = (beta * p_s[i] - g_cur[i]) * factor; g_old[i] = g_cur[i] * factor; @@ -379,7 +402,7 @@ void MinSpinOSO_CG::advance_spins() { int nlocal = atom->nlocal; double **sp = atom->sp; - double rot_mat[9]; // exponential of matrix made of search direction + double rot_mat[9]; // exponential of matrix made of search direction double s_new[3]; // loop on all spins on proc. @@ -394,47 +417,6 @@ void MinSpinOSO_CG::advance_spins() } } -/* ---------------------------------------------------------------------- - compute and return max_i||mag. torque_i||_2 -------------------------------------------------------------------------- */ - -double MinSpinOSO_CG::max_torque() -{ - double fmsq,fmaxsqone,fmaxsqloc,fmaxsqall; - int nlocal = atom->nlocal; - double factor; - double hbar = force->hplanck/MY_2PI; - - if (use_line_search) factor = 1.0; - else factor = hbar; - - // finding max fm on this proc. - - fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; - for (int i = 0; i < nlocal; i++) { - fmsq = 0.0; - for (int j = 0; j < 3; j++) - fmsq += g_cur[3 * i + j] * g_cur[3 * i + j]; - fmaxsqone = MAX(fmaxsqone,fmsq); - } - - // finding max fm on this replica - - fmaxsqloc = fmaxsqone; - MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); - - // finding max fm over all replicas, if necessary - // this communicator would be invalid for multiprocess replicas - - fmaxsqall = fmaxsqloc; - if (update->multireplica == 1) { - fmaxsqall = fmaxsqloc; - MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); - } - - return sqrt(fmaxsqall) * factor; -} - /* ---------------------------------------------------------------------- calculate 3x3 matrix exponential using Rodrigues' formula (R. Murray, Z. Li, and S. Shankar Sastry, @@ -456,15 +438,14 @@ void MinSpinOSO_CG::rodrigues_rotation(const double *upp_tr, double *out) fabs(upp_tr[1]) < 1.0e-40 && fabs(upp_tr[2]) < 1.0e-40){ - // if upp_tr is zero, return unity matrix - for(int k = 0; k < 3; k++){ - for(int m = 0; m < 3; m++){ - if (m == k) - out[3 * k + m] = 1.0; - else - out[3 * k + m] = 0.0; + // if upp_tr is zero, return unity matrix + + for(int k = 0; k < 3; k++){ + for(int m = 0; m < 3; m++){ + if (m == k) out[3 * k + m] = 1.0; + else out[3 * k + m] = 0.0; + } } - } return; } @@ -512,13 +493,14 @@ void MinSpinOSO_CG::rodrigues_rotation(const double *upp_tr, double *out) void MinSpinOSO_CG::vm3(const double *m, const double *v, double *out) { for(int i = 0; i < 3; i++){ - //out[i] *= 0.0; out[i] = 0.0; - for(int j = 0; j < 3; j++) - out[i] += *(m + 3 * j + i) * v[j]; + for(int j = 0; j < 3; j++) out[i] += *(m + 3 * j + i) * v[j]; } } +/* ---------------------------------------------------------------------- + advance spins +------------------------------------------------------------------------- */ void MinSpinOSO_CG::make_step(double c, double *energy_and_der) { @@ -586,7 +568,7 @@ int MinSpinOSO_CG::calc_and_make_step(double a, double b, int index) } return 1; } - else{ + else { double r,f0,f1,df0,df1; r = b - a; f0 = eprevious; diff --git a/src/SPIN/min_spin_oso_cg.h b/src/SPIN/min_spin_oso_cg.h index 41253f440f..30d9adf066 100644 --- a/src/SPIN/min_spin_oso_cg.h +++ b/src/SPIN/min_spin_oso_cg.h @@ -25,44 +25,44 @@ MinimizeStyle(spin_oso_cg, MinSpinOSO_CG) namespace LAMMPS_NS { class MinSpinOSO_CG: public Min { - public: - MinSpinOSO_CG(class LAMMPS *); - virtual ~MinSpinOSO_CG(); - void init(); - void setup_style(); - int modify_param(int, char **); - void reset_vectors(); - int iterate(int); - private: - double dt; // global timestep - double dts; // spin timestep - int ireplica,nreplica; // for neb - double *spvec; // variables for atomic dof, as 1d vector - double *fmvec; // variables for atomic dof, as 1d vector - double *g_old; // gradient vector at previous step - double *g_cur; // current gradient vector - double *p_s; // search direction vector - double **sp_copy; // copy of the spins - int local_iter; // for neb - int nlocal_max; // max value of nlocal (for size of lists) - double discrete_factor; // factor for spin timestep evaluation + public: + MinSpinOSO_CG(class LAMMPS *); + virtual ~MinSpinOSO_CG(); + void init(); + void setup_style(); + void reset_vectors(); + int modify_param(int, char **); + int iterate(int); - double evaluate_dt(); - void advance_spins(); - void calc_gradient(); - void calc_search_direction(); - double maximum_rotation(double *); - void vm3(const double *, const double *, double *); - void rodrigues_rotation(const double *, double *); - int calc_and_make_step(double, double, int); - int awc(double, double, double, double); - void make_step(double, double *); - double max_torque(); - double der_e_cur; // current derivative along search dir. - double der_e_pr; // previous derivative along search dir. - int use_line_search; // use line search or not. + private: + int local_iter; // for neb + int nlocal_max; // max value of nlocal (for size of lists) + int use_line_search; // use line search or not. + int ireplica,nreplica; // for neb + double dt; // global timestep + double dts; // spin timestep + double discrete_factor; // factor for spin timestep evaluation + double der_e_cur; // current derivative along search dir. + double der_e_pr; // previous derivative along search dir. + double *spvec; // variables for atomic dof, as 1d vector + double *fmvec; // variables for atomic dof, as 1d vector + double *g_old; // gradient vector at previous step + double *g_cur; // current gradient vector + double *p_s; // search direction vector + double **sp_copy; // copy of the spins - bigint last_negative; + void advance_spins(); + void calc_gradient(); + void calc_search_direction(); + void vm3(const double *, const double *, double *); + void rodrigues_rotation(const double *, double *); + void make_step(double, double *); + int calc_and_make_step(double, double, int); + int awc(double, double, double, double); + double evaluate_dt(); + double maximum_rotation(double *); + + bigint last_negative; }; } diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index b9315d706e..2913ef4101 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -26,9 +26,9 @@ #include #include #include "min_spin_oso_lbfgs.h" -#include "universe.h" #include "atom.h" #include "citeme.h" +#include "comm.h" #include "force.h" #include "update.h" #include "output.h" @@ -107,6 +107,13 @@ void MinSpinOSO_LBFGS::init() Min::init(); + // warning if line_search combined to gneb + + if ((nreplica >= 1) && (linestyle != 4) && (comm->me == 0)) + error->warning(FLERR,"Line search incompatible gneb"); + + // set back use_line_search to 0 if more than one replica + if (linestyle != 4 && nreplica == 1){ use_line_search = 1; } @@ -188,7 +195,7 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) { int nlocal = atom->nlocal; bigint ntimestep; - double fmdotfm; + double fmdotfm,fmsq,fmsqall; int flag, flagall; double **sp = atom->sp; double der_e_cur_tmp = 0.0; @@ -280,8 +287,20 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) // magnetic torque tolerance criterion // sync across replicas if running multi-replica minimization + fmdotfm = fmsq = fmsqall = 0.0; if (update->ftol > 0.0) { - fmdotfm = max_torque(); + if (normstyle == 1) { // max torque norm + fmsq = max_torque(); + fmsqall = fmsq; + if (update->multireplica == 0) + MPI_Allreduce(&fmsq,&fmsqall,1,MPI_INT,MPI_MAX,universe->uworld); + } else { // Euclidean torque norm + fmsq = total_torque(); + fmsqall = fmsq; + if (update->multireplica == 0) + MPI_Allreduce(&fmsq,&fmsqall,1,MPI_INT,MPI_SUM,universe->uworld); + } + fmdotfm = fmsqall*fmsqall; if (update->multireplica == 0) { if (fmdotfm < update->ftol*update->ftol) return FTOL; } else { @@ -534,42 +553,6 @@ void MinSpinOSO_LBFGS::advance_spins() } } -/* ---------------------------------------------------------------------- - compute and return max_i||mag. torque_i||_2 -------------------------------------------------------------------------- */ - -double MinSpinOSO_LBFGS::max_torque() -{ - double fmsq,fmaxsqone,fmaxsqloc,fmaxsqall; - int nlocal = atom->nlocal; - - // finding max fm on this proc. - - fmsq = fmaxsqone = fmaxsqloc = fmaxsqall = 0.0; - for (int i = 0; i < nlocal; i++) { - fmsq = 0.0; - for (int j = 0; j < 3; j++) - fmsq += g_cur[3 * i + j] * g_cur[3 * i + j]; - fmaxsqone = MAX(fmaxsqone,fmsq); - } - - // finding max fm on this replica - - fmaxsqloc = fmaxsqone; - MPI_Allreduce(&fmaxsqone,&fmaxsqloc,1,MPI_DOUBLE,MPI_MAX,world); - - // finding max fm over all replicas, if necessary - // this communicator would be invalid for multiprocess replicas - - fmaxsqall = fmaxsqloc; - if (update->multireplica == 1) { - fmaxsqall = fmaxsqloc; - MPI_Allreduce(&fmaxsqloc,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,universe->uworld); - } - - return sqrt(fmaxsqall); -} - /* ---------------------------------------------------------------------- calculate 3x3 matrix exponential using Rodrigues' formula (R. Murray, Z. Li, and S. Shankar Sastry, diff --git a/src/SPIN/min_spin_oso_lbfgs.h b/src/SPIN/min_spin_oso_lbfgs.h index 204f6bf058..9bd36afa8b 100644 --- a/src/SPIN/min_spin_oso_lbfgs.h +++ b/src/SPIN/min_spin_oso_lbfgs.h @@ -25,45 +25,45 @@ MinimizeStyle(spin_oso_lbfgs, MinSpinOSO_LBFGS) namespace LAMMPS_NS { class MinSpinOSO_LBFGS: public Min { - public: - MinSpinOSO_LBFGS(class LAMMPS *); - virtual ~MinSpinOSO_LBFGS(); - void init(); - void setup_style(); - int modify_param(int, char **); - void reset_vectors(); - int iterate(int); - private: - int ireplica,nreplica; // for neb - double *spvec; // variables for atomic dof, as 1d vector - double *fmvec; // variables for atomic dof, as 1d vector - double *g_old; // gradient vector at previous step - double *g_cur; // current gradient vector - double *p_s; // search direction vector - int local_iter; // for neb - int nlocal_max; // max value of nlocal (for size of lists) + public: + MinSpinOSO_LBFGS(class LAMMPS *); + virtual ~MinSpinOSO_LBFGS(); + void init(); + void setup_style(); + int modify_param(int, char **); + void reset_vectors(); + int iterate(int); - void advance_spins(); - void calc_gradient(); - void calc_search_direction(); - double maximum_rotation(double *); - void vm3(const double *, const double *, double *); - void rodrigues_rotation(const double *, double *); - int calc_and_make_step(double, double, int); - int awc(double, double, double, double); - void make_step(double, double *); - double max_torque(); - double der_e_cur; // current derivative along search dir. - double der_e_pr; // previous derivative along search dir. - int use_line_search; // use line search or not. - double maxepsrot; + private: + int local_iter; // for neb + int use_line_search; // use line search or not. + int nlocal_max; // max value of nlocal (for size of lists) + int ireplica,nreplica; // for neb + double der_e_cur; // current derivative along search dir. + double der_e_pr; // previous derivative along search dir. + double maxepsrot; + double *spvec; // variables for atomic dof, as 1d vector + double *fmvec; // variables for atomic dof, as 1d vector + double *g_old; // gradient vector at previous step + double *g_cur; // current gradient vector + double *p_s; // search direction vector - double *rho; // estimation of curvature - double **ds; // change in rotation matrix between two iterations, da - double **dy; // change in gradients between two iterations, dg - double **sp_copy; // copy of the spins - int num_mem; // number of stored steps - bigint last_negative; + void advance_spins(); + void calc_gradient(); + void calc_search_direction(); + void vm3(const double *, const double *, double *); + void rodrigues_rotation(const double *, double *); + void make_step(double, double *); + int calc_and_make_step(double, double, int); + int awc(double, double, double, double); + double maximum_rotation(double *); + + double *rho; // estimation of curvature + double **ds; // change in rotation matrix between two iterations, da + double **dy; // change in gradients between two iterations, dg + double **sp_copy; // copy of the spins + int num_mem; // number of stored steps + bigint last_negative; }; } diff --git a/src/min.cpp b/src/min.cpp index 2a42a444a0..e476b1abc8 100644 --- a/src/min.cpp +++ b/src/min.cpp @@ -42,10 +42,12 @@ #include "output.h" #include "thermo.h" #include "timer.h" +#include "math_const.h" #include "memory.h" #include "error.h" using namespace LAMMPS_NS; +using namespace MathConst; /* ---------------------------------------------------------------------- */ @@ -54,6 +56,7 @@ Min::Min(LAMMPS *lmp) : Pointers(lmp) dmax = 0.1; searchflag = 0; linestyle = 1; + normstyle = 0; elist_global = elist_atom = NULL; vlist_global = vlist_atom = NULL; @@ -653,6 +656,14 @@ void Min::modify_params(int narg, char **arg) if (strcmp(arg[iarg+1],"backtrack") == 0) linestyle = 0; else if (strcmp(arg[iarg+1],"quadratic") == 0) linestyle = 1; else if (strcmp(arg[iarg+1],"forcezero") == 0) linestyle = 2; + else if (strcmp(arg[iarg+1],"spin_cubic") == 0) linestyle = 3; + else if (strcmp(arg[iarg+1],"spin_none") == 0) linestyle = 4; + else error->all(FLERR,"Illegal min_modify command"); + iarg += 2; + } else if (strcmp(arg[iarg],"norm") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal min_modify command"); + if (strcmp(arg[iarg+1],"euclidean") == 0) normstyle = 0; + else if (strcmp(arg[iarg+1],"max") == 0) normstyle = 1; else error->all(FLERR,"Illegal min_modify command"); iarg += 2; } else { @@ -816,6 +827,69 @@ double Min::fnorm_inf() return norm_inf; } +/* ---------------------------------------------------------------------- + compute and return sum_i||mag. torque_i||_2 (in eV) +------------------------------------------------------------------------- */ + +double Min::total_torque() +{ + double fmsq,ftotsqone,ftotsqall; + int nlocal = atom->nlocal; + double hbar = force->hplanck/MY_2PI; + double tx,ty,tz; + double **sp = atom->sp; + double **fm = atom->fm; + + fmsq = ftotsqone = ftotsqall = 0.0; + for (int i = 0; i < nlocal; i++) { + tx = fm[i][1] * sp[i][2] - fm[i][2] * sp[i][1]; + ty = fm[i][2] * sp[i][0] - fm[i][0] * sp[i][2]; + tz = fm[i][0] * sp[i][1] - fm[i][1] * sp[i][0]; + fmsq = tx * tx + ty * ty + tz * tz; + ftotsqone += fmsq; + } + + // summing all fmsqtot on this replica + + MPI_Allreduce(&ftotsqone,&ftotsqall,1,MPI_DOUBLE,MPI_SUM,world); + + // multiply it by hbar so that units are in eV + + return sqrt(ftotsqall) * hbar; +} + +/* ---------------------------------------------------------------------- + compute and return max_i ||mag. torque_i|| (in eV) +------------------------------------------------------------------------- */ + +double Min::max_torque() +{ + double fmsq,fmaxsqone,fmaxsqall; + int nlocal = atom->nlocal; + double hbar = force->hplanck/MY_2PI; + double tx,ty,tz; + double **sp = atom->sp; + double **fm = atom->fm; + + fmsq = fmaxsqone = fmaxsqall = 0.0; + for (int i = 0; i < nlocal; i++) { + tx = fm[i][1] * sp[i][2] - fm[i][2] * sp[i][1]; + ty = fm[i][2] * sp[i][0] - fm[i][0] * sp[i][2]; + tz = fm[i][0] * sp[i][1] - fm[i][1] * sp[i][0]; + fmsq = tx * tx + ty * ty + tz * tz; + fmaxsqone = MAX(fmaxsqone,fmsq); + } + + // finding max fm on this replica + + fmaxsqall = fmaxsqone; + MPI_Allreduce(&fmaxsqone,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,world); + + // multiply it by hbar so that units are in eV + + return sqrt(fmaxsqall) * hbar; +} + /* ---------------------------------------------------------------------- possible stop conditions ------------------------------------------------------------------------- */ diff --git a/src/min.h b/src/min.h index a63254231c..e18d0dd677 100644 --- a/src/min.h +++ b/src/min.h @@ -42,6 +42,10 @@ class Min : protected Pointers { double fnorm_sqr(); double fnorm_inf(); + // methods for spin minimizers + double max_torque(); + double total_torque(); + virtual void init_style() {} virtual void setup_style() = 0; virtual void reset_vectors() = 0; @@ -56,8 +60,11 @@ class Min : protected Pointers { int virial_style; // compute virial explicitly or implicitly int external_force_clear; // clear forces locally or externally - double dmax; // max dist to move any atom in one step - int linestyle; // 0 = backtrack, 1 = quadratic, 2 = forcezero + double dmax; // max dist to move any atom in one step + int linestyle; // 0 = backtrack, 1 = quadratic, 2 = forcezero + // 3 = spin_cubic, 4 = spin_none + + int normstyle; // 0 = Euclidean norm, 1 = inf. norm int nelist_global,nelist_atom; // # of PE,virial computes to check int nvlist_global,nvlist_atom; @@ -102,9 +109,6 @@ class Min : protected Pointers { double energy_force(int); void force_clear(); - double compute_force_norm_sqr(); - double compute_force_norm_inf(); - void ev_setup(); void ev_set(bigint); diff --git a/src/min_cg.cpp b/src/min_cg.cpp index 20e8cc30dd..9801e57f4d 100644 --- a/src/min_cg.cpp +++ b/src/min_cg.cpp @@ -37,7 +37,7 @@ MinCG::MinCG(LAMMPS *lmp) : MinLineSearch(lmp) {} int MinCG::iterate(int maxiter) { int i,m,n,fail,ntimestep; - double beta,gg,dot[2],dotall[2]; + double beta,gg,dot[2],dotall[2],fmax,fmaxall; double *fatom,*gatom,*hatom; // nlimit = max # of CG iterations before restarting @@ -87,10 +87,12 @@ int MinCG::iterate(int maxiter) // force tolerance criterion + fmax = fmaxall = 0.0; dot[0] = dot[1] = 0.0; for (i = 0; i < nvec; i++) { dot[0] += fvec[i]*fvec[i]; dot[1] += fvec[i]*g[i]; + fmax = MAX(fmax,fvec[i]*fvec[i]); } if (nextra_atom) for (m = 0; m < nextra_atom; m++) { @@ -100,16 +102,22 @@ int MinCG::iterate(int maxiter) for (i = 0; i < n; i++) { dot[0] += fatom[i]*fatom[i]; dot[1] += fatom[i]*gatom[i]; + fmax = MAX(fmax,fatom[i]*fatom[i]); } } MPI_Allreduce(dot,dotall,2,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&fmax,&fmaxall,2,MPI_DOUBLE,MPI_MAX,world); if (nextra_global) for (i = 0; i < nextra_global; i++) { dotall[0] += fextra[i]*fextra[i]; dotall[1] += fextra[i]*gextra[i]; } - if (dotall[0] < update->ftol*update->ftol) return FTOL; + if (normstyle == 1) { // max force norm + if (fmax < update->ftol*update->ftol) return FTOL; + } else { // Euclidean force norm + if (dotall[0] < update->ftol*update->ftol) return FTOL; + } // update new search direction h from new f = -Grad(x) and old g // this is Polak-Ribieri formulation diff --git a/src/min_fire.cpp b/src/min_fire.cpp index a50071d562..a0a3bce8ba 100644 --- a/src/min_fire.cpp +++ b/src/min_fire.cpp @@ -80,7 +80,7 @@ void MinFire::reset_vectors() int MinFire::iterate(int maxiter) { bigint ntimestep; - double vmax,vdotf,vdotfall,vdotv,vdotvall,fdotf,fdotfall; + double vmax,vdotf,vdotfall,vdotv,vdotvall,fdotf,fdotfloc,fdotfall; double scale1,scale2; double dtvone,dtv,dtf,dtfm; int flag,flagall; @@ -250,7 +250,15 @@ int MinFire::iterate(int maxiter) // sync across replicas if running multi-replica minimization if (update->ftol > 0.0) { - fdotf = fnorm_sqr(); + if (normstyle == 1) { // max force norm + fdotf = fnorm_inf(); + fdotfloc = fdotf; + MPI_Allreduce(&fdotfloc,&fdotf,1,MPI_INT,MPI_MAX,universe->uworld); + } else { // Euclidean force norm + fdotf = fnorm_sqr(); + fdotfloc = fdotf; + MPI_Allreduce(&fdotfloc,&fdotf,1,MPI_INT,MPI_SUM,universe->uworld); + } if (update->multireplica == 0) { if (fdotf < update->ftol*update->ftol) return FTOL; } else { diff --git a/src/min_hftn.cpp b/src/min_hftn.cpp index 0c834fbeb4..9f8695f151 100644 --- a/src/min_hftn.cpp +++ b/src/min_hftn.cpp @@ -20,6 +20,7 @@ #include #include #include "atom.h" +#include "error.h" #include "fix_minimize.h" #include "min_hftn.h" #include "modify.h" @@ -111,6 +112,9 @@ void MinHFTN::init() { Min::init(); + if (normstyle == 1) + error->all(FLERR,"Incorrect min_modify option"); + for (int i = 1; i < NUM_HFTN_ATOM_BASED_VECTORS; i++) { if (_daExtraGlobal[i] != NULL) delete [] _daExtraGlobal[i]; diff --git a/src/min_quickmin.cpp b/src/min_quickmin.cpp index 8b48816355..d6507cfcde 100644 --- a/src/min_quickmin.cpp +++ b/src/min_quickmin.cpp @@ -76,7 +76,7 @@ void MinQuickMin::reset_vectors() int MinQuickMin::iterate(int maxiter) { bigint ntimestep; - double vmax,vdotf,vdotfall,fdotf,fdotfall,scale; + double vmax,vdotf,vdotfall,fdotf,fdotfloc,fdotfall,scale; double dtvone,dtv,dtf,dtfm; int flag,flagall; @@ -216,7 +216,15 @@ int MinQuickMin::iterate(int maxiter) // sync across replicas if running multi-replica minimization if (update->ftol > 0.0) { - fdotf = fnorm_sqr(); + if (normstyle == 1) { // max force norm + fdotf = fnorm_inf(); + fdotfloc = fdotf; + MPI_Allreduce(&fdotfloc,&fdotf,1,MPI_INT,MPI_MAX,universe->uworld); + } else { // Euclidean force norm + fdotf = fnorm_sqr(); + fdotfloc = fdotf; + MPI_Allreduce(&fdotfloc,&fdotf,1,MPI_INT,MPI_SUM,universe->uworld); + } if (update->multireplica == 0) { if (fdotf < update->ftol*update->ftol) return FTOL; } else { diff --git a/src/min_sd.cpp b/src/min_sd.cpp index 5d44437ca0..60386df82c 100644 --- a/src/min_sd.cpp +++ b/src/min_sd.cpp @@ -79,7 +79,8 @@ int MinSD::iterate(int maxiter) // force tolerance criterion - fdotf = fnorm_sqr(); + if (normstyle == 1) fdotf = fnorm_inf(); // max force norm + else fdotf = fnorm_sqr(); // Euclidean force norm if (fdotf < update->ftol*update->ftol) return FTOL; // set new search direction h to f = -Grad(x) From 1364329432bef1809811b4e188e02520091ed825 Mon Sep 17 00:00:00 2001 From: julient31 Date: Fri, 26 Jul 2019 17:54:04 -0600 Subject: [PATCH 074/237] Commit JT 072619 - draft doc of norm option (doc/src/min_modify.txt) --- doc/src/min_modify.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index 9c4d7c8fcb..ecd4795a8f 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -18,6 +18,8 @@ keyword = {dmax} or {line} or {alpha_damp} or {discrete_factor} max = maximum distance for line search to move (distance units) {line} value = {backtrack} or {quadratic} or {forcezero} or {spin_cubic} or {spin_none} backtrack,quadratic,forcezero,spin_cubic,spin_none = style of linesearch to use + {norm} value = {euclidean} or {max} + euclidean,max = style of norm to use {alpha_damp} value = damping damping = fictitious Gilbert damping for spin minimization (adim) {discrete_factor} value = factor @@ -69,6 +71,14 @@ difference of two large values (energy before and energy after) and that difference may be smaller than machine epsilon even if atoms could move in the gradient direction to reduce forces further. +The choice of a norm can be modified for the min styles {fire}, +{quickmin}, {sd}, {spin}, {spin_oso_cg} and {spin_oso_lbfgs} +using the {norm} keyword. +The default {euclidean} norm computes the 2-norm (length) of the +global force vector. The {max} norm computes the maximum value +of the 2-norms of all forces in the system. + + Keywords {alpha_damp} and {discrete_factor} only make sense when a "min_spin"_min_spin.html command is declared. Keyword {alpha_damp} defines an analog of a magnetic Gilbert From 9609c75073130b19856c3bc0e64068e72254e507 Mon Sep 17 00:00:00 2001 From: alxvov Date: Tue, 30 Jul 2019 11:16:40 +0000 Subject: [PATCH 075/237] Use descent condition, and no line search as a default option for all oso --- examples/SPIN/spinmin/in.spinmin_cg.bfo | 2 +- examples/SPIN/spinmin/in.spinmin_lbfgs.bfo | 4 ++-- src/SPIN/min_spin_oso_cg.cpp | 14 ++++---------- src/SPIN/min_spin_oso_cg.h | 2 +- src/SPIN/min_spin_oso_lbfgs.cpp | 21 ++++++--------------- src/SPIN/min_spin_oso_lbfgs.h | 2 +- 6 files changed, 15 insertions(+), 30 deletions(-) diff --git a/examples/SPIN/spinmin/in.spinmin_cg.bfo b/examples/SPIN/spinmin/in.spinmin_cg.bfo index 776079edb8..8c288763c4 100644 --- a/examples/SPIN/spinmin/in.spinmin_cg.bfo +++ b/examples/SPIN/spinmin/in.spinmin_cg.bfo @@ -51,4 +51,4 @@ dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3 min_style spin_oso_cg # min_modify line spin_none discrete_factor 10.0 -minimize 1.0e-10 1.0e-7 1000 1000 +minimize 1.0e-10 1.0e-10 10000 10000 diff --git a/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo b/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo index ca600f1c2b..6a9104cc9c 100644 --- a/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo +++ b/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo @@ -50,5 +50,5 @@ compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] min_style spin_oso_lbfgs -min_modify line spin_cubic discrete_factor 10.0 -minimize 1.0e-15 1.0e-7 10000 1000 +# min_modify line spin_cubic discrete_factor 10.0 +minimize 1.0e-15 1.0e-10 10000 1000 diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_oso_cg.cpp index 16a95c5c02..f1f2f72436 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_oso_cg.cpp @@ -561,7 +561,7 @@ int MinSpinOSO_CG::calc_and_make_step(double a, double b, int index) der_e_cur = e_and_d[1]; index++; - if (awc(der_e_pr,eprevious,e_and_d[1],e_and_d[0]) || index == 10){ + if (adescent(eprevious,e_and_d[0]) || index == 5){ MPI_Bcast(&b,1,MPI_DOUBLE,0,world); for (int i = 0; i < 3 * nlocal; i++) { p_s[i] = b * p_s[i]; @@ -598,20 +598,14 @@ int MinSpinOSO_CG::calc_and_make_step(double a, double b, int index) } /* ---------------------------------------------------------------------- - Approximate Wolfe conditions: - William W. Hager and Hongchao Zhang - SIAM J. optim., 16(1), 170-192. (23 pages) + Approximate descent ------------------------------------------------------------------------- */ -int MinSpinOSO_CG::awc(double der_phi_0, double phi_0, double der_phi_j, double phi_j){ +int MinSpinOSO_CG::adescent(double phi_0, double phi_j){ double eps = 1.0e-6; - double delta = 0.1; - double sigma = 0.9; - if ((phi_j<=phi_0+eps*fabs(phi_0)) && - ((2.0*delta-1.0) * der_phi_0>=der_phi_j) && - (der_phi_j>=sigma*der_phi_0)) + if (phi_j<=phi_0+eps*fabs(phi_0)) return 1; else return 0; diff --git a/src/SPIN/min_spin_oso_cg.h b/src/SPIN/min_spin_oso_cg.h index 30d9adf066..d6dc7c03d0 100644 --- a/src/SPIN/min_spin_oso_cg.h +++ b/src/SPIN/min_spin_oso_cg.h @@ -58,7 +58,7 @@ class MinSpinOSO_CG: public Min { void rodrigues_rotation(const double *, double *); void make_step(double, double *); int calc_and_make_step(double, double, int); - int awc(double, double, double, double); + int adescent(double, double); double evaluate_dt(); double maximum_rotation(double *); diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_oso_lbfgs.cpp index f850879d1a..8623a8bb29 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_oso_lbfgs.cpp @@ -73,10 +73,7 @@ MinSpinOSO_LBFGS::MinSpinOSO_LBFGS(LAMMPS *lmp) : nreplica = universe->nworlds; ireplica = universe->iworld; - if (nreplica > 1) - use_line_search = 0; // no line search for NEB - else - use_line_search = 1; + use_line_search = 0; // no line search as default option for LBFGS maxepsrot = MY_2PI / (100.0); @@ -114,7 +111,7 @@ void MinSpinOSO_LBFGS::init() // set back use_line_search to 0 if more than one replica - if (linestyle != 4 && nreplica == 1){ + if (linestyle == 3 && nreplica == 1){ use_line_search = 1; } else{ @@ -694,7 +691,7 @@ int MinSpinOSO_LBFGS::calc_and_make_step(double a, double b, int index) der_e_cur = e_and_d[1]; index++; - if (awc(der_e_pr,eprevious,e_and_d[1],e_and_d[0]) || index == 5){ + if (adescent(eprevious,e_and_d[0]) || index == 5){ MPI_Bcast(&b,1,MPI_DOUBLE,0,world); for (int i = 0; i < 3 * nlocal; i++) { p_s[i] = b * p_s[i]; @@ -731,20 +728,14 @@ int MinSpinOSO_LBFGS::calc_and_make_step(double a, double b, int index) } /* ---------------------------------------------------------------------- - Approximate Wolfe conditions: - William W. Hager and Hongchao Zhang - SIAM J. optim., 16(1), 170-192. (23 pages) + Approximate descent ------------------------------------------------------------------------- */ -int MinSpinOSO_LBFGS::awc(double der_phi_0, double phi_0, double der_phi_j, double phi_j){ +int MinSpinOSO_LBFGS::adescent(double phi_0, double phi_j){ double eps = 1.0e-6; - double delta = 0.1; - double sigma = 0.9; - if ((phi_j<=phi_0+eps*fabs(phi_0)) && - ((2.0*delta-1.0) * der_phi_0>=der_phi_j) && - (der_phi_j>=sigma*der_phi_0)) + if (phi_j<=phi_0+eps*fabs(phi_0)) return 1; else return 0; diff --git a/src/SPIN/min_spin_oso_lbfgs.h b/src/SPIN/min_spin_oso_lbfgs.h index 9bd36afa8b..68fa10921e 100644 --- a/src/SPIN/min_spin_oso_lbfgs.h +++ b/src/SPIN/min_spin_oso_lbfgs.h @@ -55,7 +55,7 @@ class MinSpinOSO_LBFGS: public Min { void rodrigues_rotation(const double *, double *); void make_step(double, double *); int calc_and_make_step(double, double, int); - int awc(double, double, double, double); + int adescent(double, double); double maximum_rotation(double *); double *rho; // estimation of curvature From aa3c44ad4af471e3c4cc65734f3abe43179d3b27 Mon Sep 17 00:00:00 2001 From: alxvov Date: Tue, 30 Jul 2019 12:02:10 +0000 Subject: [PATCH 076/237] modify documentation a bit --- doc/src/min_modify.txt | 6 +++--- doc/src/min_spin.txt | 11 +++++------ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index ecd4795a8f..35a02c47c3 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -97,9 +97,9 @@ two minimization styles is declared. The {spin_cubic} performs the line search based on a cubic interpolation of the energy along the search direction. The {spin_none} keyword deactivates the line search procedure. -The {spin_none} is a default value for {line} keyword apart from the case when -single-replica calculations are performed with {spin_oso_lbfgs} that -uses {spin_cubic} line search. +The {spin_none} is a default value for {line} keyword for both {spin_oso_lbfgs} +and {spin_oso_cg}. Convergence of {spin_oso_lbfgs} can be more robust if +{spin_cubic} line search is used. [Restrictions:] The line search procedure of styles {spin_oso_cg} and {spin_oso_lbfgs} cannot be used for magnetic diff --git a/doc/src/min_spin.txt b/doc/src/min_spin.txt index 77dc008b3e..20c4cde1d7 100644 --- a/doc/src/min_spin.txt +++ b/doc/src/min_spin.txt @@ -18,7 +18,7 @@ min_style spin_oso_lbfgs :pre [Examples:] min_style spin_oso_lbfgs -min_modify line spin_none discrete_factor 10.0 :pre +min_modify line spin_cubic discrete_factor 10.0 :pre [Description:] @@ -62,16 +62,15 @@ and uses the adaptive time-step technique in the same way as style {spin}. Style {spin_oso_lbfgs} defines an orthogonal spin optimization (OSO) combined to a limited-memory Broyden-Fletcher-Goldfarb-Shanno (L-BFGS) algorithm. -By default, style {spin_oso_lbfgs} uses a line search procedure -based on cubic interpolation for -a single-replica calculation, and it does not use line search procedure -for a multireplica calculation (such as in case of GNEB calculation). +By default, style {spin_oso_lbfgs} does not employ line search procedure. If the line search procedure is not used then the discrete factor defines the maximum root mean squared rotation angle of spins by equation {pi/(5*Kappa)}. The default value for Kappa is 10. +The {spin_cubic} line search can improve +the convergence of the {spin_oso_lbfgs} algorithm. The "min_modify"_min_modify.html command can be used to -deactivate the line search procedure, and to modify the +activate the line search procedure, and to modify the discretization factor {discrete_factor}. For more information about styles {spin_oso_cg} and {spin_oso_lbfgs}, From 74fa4f741571be0bb060462691d76651d10394e8 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 30 Jul 2019 08:58:12 -0600 Subject: [PATCH 077/237] Commit JT 073019 - modified doc doc/src/min_modify.txt - tested lattice minimizers with norm styles --- doc/src/min_modify.txt | 19 +++++++++++-------- doc/src/min_spin.txt | 10 +++++----- doc/src/min_style.txt | 3 +-- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index 35a02c47c3..2056655d40 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -13,7 +13,7 @@ min_modify command :h3 min_modify keyword values ... :pre one or more keyword/value pairs may be listed :ulb,l -keyword = {dmax} or {line} or {alpha_damp} or {discrete_factor} +keyword = {dmax} or {line} or {norm} or {alpha_damp} or {discrete_factor} {dmax} value = max max = maximum distance for line search to move (distance units) {line} value = {backtrack} or {quadratic} or {forcezero} or {spin_cubic} or {spin_none} @@ -71,13 +71,12 @@ difference of two large values (energy before and energy after) and that difference may be smaller than machine epsilon even if atoms could move in the gradient direction to reduce forces further. -The choice of a norm can be modified for the min styles {fire}, -{quickmin}, {sd}, {spin}, {spin_oso_cg} and {spin_oso_lbfgs} -using the {norm} keyword. +The choice of a norm can be modified for the min styles {cg}, {sd}, +{quickmin}, {fire}, {spin}, {spin_oso_cg} and {spin_oso_lbfgs} using +the {norm} keyword. The default {euclidean} norm computes the 2-norm (length) of the global force vector. The {max} norm computes the maximum value -of the 2-norms of all forces in the system. - +of the 2-norms across all forces in the system. Keywords {alpha_damp} and {discrete_factor} only make sense when a "min_spin"_min_spin.html command is declared. @@ -88,7 +87,6 @@ Keyword {discrete_factor} defines a discretization factor for the adaptive timestep used in the {spin} minimization. See "min_spin"_min_spin.html for more information about those quantities. -Default values are {alpha_damp} = 1.0 and {discrete_factor} = 10.0. The choice of a line search algorithm for the {spin_oso_cg} and {spin_oso_lbfgs} styles can be specified via the {line} keyword. @@ -112,4 +110,9 @@ explanation. [Default:] -The option defaults are dmax = 0.1 and line = quadratic. +The option defaults are dmax = 0.1, line = quadratic and norm = +euclidean. + +For the {spin}, {spin_oso_cg} and {spin_oso_lbfgs} styles, the +option defaults are alpha_damp = 1.0, discrete_factor = 10.0, +line = spin_none, and norm = euclidean. diff --git a/doc/src/min_spin.txt b/doc/src/min_spin.txt index 20c4cde1d7..575db2dc74 100644 --- a/doc/src/min_spin.txt +++ b/doc/src/min_spin.txt @@ -56,7 +56,7 @@ Style {spin_oso_cg} defines an orthogonal spin optimization The "min_modify"_min_modify.html command can be used to couple the {spin_oso_cg} to a line search procedure, and to modify the discretization factor {discrete_factor}. -By defualt, the style {spin_oso_cg} does not employ line search procedure and +By default, style {spin_oso_cg} does not employ the line search procedure and uses the adaptive time-step technique in the same way as style {spin}. Style {spin_oso_lbfgs} defines an orthogonal spin optimization @@ -66,8 +66,8 @@ By default, style {spin_oso_lbfgs} does not employ line search procedure. If the line search procedure is not used then the discrete factor defines the maximum root mean squared rotation angle of spins by equation {pi/(5*Kappa)}. The default value for Kappa is 10. -The {spin_cubic} line search can improve -the convergence of the {spin_oso_lbfgs} algorithm. +The {spin_cubic} line search can improve the convergence of the +{spin_oso_lbfgs} algorithm. The "min_modify"_min_modify.html command can be used to activate the line search procedure, and to modify the @@ -95,8 +95,8 @@ freedom for a frozen lattice configuration. [Default:] -The option defaults are {alpha_damp} = 1.0 and {discrete_factor} = -10.0. +The option defaults are {alpha_damp} = 1.0, {discrete_factor} = +10.0, {line} = spin_none and {norm} = euclidean. :line diff --git a/doc/src/min_style.txt b/doc/src/min_style.txt index 081ec17889..7c40fd4947 100644 --- a/doc/src/min_style.txt +++ b/doc/src/min_style.txt @@ -11,8 +11,7 @@ min_style command :h3 min_style style :pre -style = {cg} or {hftn} or {sd} or {quickmin} or {fire} or {spin} -or {spin_oso_cg} or {spin_oso_lbfgs} :ul +style = {cg} or {hftn} or {sd} or {quickmin} or {fire} or {spin} or {spin_oso_cg} or {spin_oso_lbfgs} :ul [Examples:] From f4e3186abf95e0b0d6efd165c84a693ca295f448 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 30 Jul 2019 13:10:27 -0600 Subject: [PATCH 078/237] Commit JT 073019 - modified the false_positive file to correct errors - improved the doc page of fix nve/spin --- doc/src/fix_nve_spin.txt | 15 +++++++++++---- doc/src/min_modify.txt | 3 +-- doc/utils/sphinx-config/false_positives.txt | 5 +++++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/doc/src/fix_nve_spin.txt b/doc/src/fix_nve_spin.txt index 7b382bb6ad..30df484e54 100644 --- a/doc/src/fix_nve_spin.txt +++ b/doc/src/fix_nve_spin.txt @@ -27,10 +27,16 @@ fix 1 all nve/spin lattice no :pre Perform a symplectic integration for the spin or spin-lattice system. -The {lattice} keyword defines if the spins are integrated on a lattice -of fixed atoms (lattice = no), or if atoms are moving (lattice = yes). +The {lattice} keyword defines whether the spins are integrated on a +fixed or moving lattice. -By default (lattice = yes), a spin-lattice integration is performed. +If {lattice}=yes, the equations of motion of the atoms are integrated, +and a combined spin and lattice calculation is performed. +This is the default option. + +If {lattice}=no, the equations of motion of the atoms are not +integrated. The lattice degrees of freedom are frozen, and a +spin dynamics only calculation is performed. The {nve/spin} fix applies a Suzuki-Trotter decomposition to the equations of motion of the spin lattice system, following the scheme: @@ -63,7 +69,8 @@ instead of "array" is also valid. "atom_style spin"_atom_style.html, "fix nve"_fix_nve.html -[Default:] none +[Default:] By default (lattice = yes), a spin-lattice integration is +performed. :line diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index 2056655d40..857c3551aa 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -110,8 +110,7 @@ explanation. [Default:] -The option defaults are dmax = 0.1, line = quadratic and norm = -euclidean. +The option defaults are dmax = 0.1, line = quadratic and norm = euclidean. For the {spin}, {spin_oso_cg} and {spin_oso_lbfgs} styles, the option defaults are alpha_damp = 1.0, discrete_factor = 10.0, diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 1dea229393..417738998e 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -273,6 +273,7 @@ Broadwell Broglie brownian brownw +Broyden Bryantsev Btarget btype @@ -981,6 +982,7 @@ gmask Gmask gneb GNEB +Goldfarb googlemail Gordan GPa @@ -1395,6 +1397,7 @@ Laupretre lavenderblush lawngreen lB +lbfgs lbl LBtype lcbop @@ -2030,6 +2033,7 @@ Orsi ortho orthonormal orthorhombic +oso ot Otype Ouldridge @@ -2493,6 +2497,7 @@ setvel sfftw Sg Shan +Shanno shapex shapey shapez From 55a7200246e5f3253d3f964e086a2cee8ba24048 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Wed, 7 Aug 2019 12:13:49 -0700 Subject: [PATCH 079/237] updates to src/fix_langevin.cpp --- src/fix_langevin.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 723f4be2e4..ea0929a236 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -18,10 +18,11 @@ Niels Gronbech-Jensen (UC Davis) GJF-2GJ Formulation ------------------------------------------------------------------------- */ -#include "fix_langevin.h" #include #include #include +#include +#include "fix_langevin.h" #include "math_extra.h" #include "atom.h" #include "atom_vec_ellipsoid.h" @@ -29,6 +30,8 @@ #include "update.h" #include "modify.h" #include "compute.h" +#include "domain.h" +#include "region.h" #include "respa.h" #include "comm.h" #include "input.h" From ef3f382f61f436540fe6fc980f6fd40b876c793a Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Wed, 7 Aug 2019 17:27:35 -0700 Subject: [PATCH 080/237] fixed tbias --- examples/python/gjf_python/README.md | 18 - examples/python/gjf_python/argon.lmp | 886 --------------------- examples/python/gjf_python/ff-argon.lmp | 20 - examples/python/gjf_python/gjf.py | 180 ----- examples/python/gjf_python/lammps_tools.py | 78 -- src/fix_langevin.cpp | 142 +++- src/fix_langevin.h | 1 + 7 files changed, 117 insertions(+), 1208 deletions(-) delete mode 100644 examples/python/gjf_python/README.md delete mode 100644 examples/python/gjf_python/argon.lmp delete mode 100644 examples/python/gjf_python/ff-argon.lmp delete mode 100644 examples/python/gjf_python/gjf.py delete mode 100644 examples/python/gjf_python/lammps_tools.py diff --git a/examples/python/gjf_python/README.md b/examples/python/gjf_python/README.md deleted file mode 100644 index 707289f02d..0000000000 --- a/examples/python/gjf_python/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# LAMMPS GJF-2GJ THERMOSTAT EXAMPLE W/ PYTHON - -## GJF-2GJ THERMOSTAT - -This directory contains a python script to run NVT simulations using the GJF-2GJ thermostat. -The script will vary the timestep and write thermodynamic output to screen. -This script has True/False options to change how you would like to dump/write your output. - -Example: -``` -NP=4 #number of processors -mpirun -np $NP python gjf.py -``` - -## Required LAMMPS packages: MOLECULE package -## LAMMPS COMPILE MODE: SHLIB -## LAMMPS OPTIONAL INSTALL: make install-python -## Required Python packages: mpi4py diff --git a/examples/python/gjf_python/argon.lmp b/examples/python/gjf_python/argon.lmp deleted file mode 100644 index 00214b4c54..0000000000 --- a/examples/python/gjf_python/argon.lmp +++ /dev/null @@ -1,886 +0,0 @@ -LAMMPS description - - 864 atoms - 0 bonds - 0 angles - 0 dihedrals - 0 impropers - - 1 atom types - 0 bond types - 0 angle types - 0 dihedral types - 0 improper types - - - 0.0000000 32.146000 xlo xhi - 0.0000000 32.146000 ylo yhi - 0.0000000 32.146000 zlo zhi - - Atoms - - 1 1 1 0.0000000 0.0000000 2.6790000 2.6790000 - 2 2 1 0.0000000 0.0000000 2.6790000 8.0360000 - 3 3 1 0.0000000 0.0000000 2.6790000 13.3940000 - 4 4 1 0.0000000 0.0000000 2.6790000 18.7520000 - 5 5 1 0.0000000 0.0000000 2.6790000 24.1090000 - 6 6 1 0.0000000 0.0000000 2.6790000 29.4670000 - 7 7 1 0.0000000 0.0000000 8.0360000 2.6790000 - 8 8 1 0.0000000 0.0000000 8.0360000 8.0360000 - 9 9 1 0.0000000 0.0000000 8.0360000 13.3940000 - 10 10 1 0.0000000 0.0000000 8.0360000 18.7520000 - 11 11 1 0.0000000 0.0000000 8.0360000 24.1090000 - 12 12 1 0.0000000 0.0000000 8.0360000 29.4670000 - 13 13 1 0.0000000 0.0000000 13.3940000 2.6790000 - 14 14 1 0.0000000 0.0000000 13.3940000 8.0360000 - 15 15 1 0.0000000 0.0000000 13.3940000 13.3940000 - 16 16 1 0.0000000 0.0000000 13.3940000 18.7520000 - 17 17 1 0.0000000 0.0000000 13.3940000 24.1090000 - 18 18 1 0.0000000 0.0000000 13.3940000 29.4670000 - 19 19 1 0.0000000 0.0000000 18.7520000 2.6790000 - 20 20 1 0.0000000 0.0000000 18.7520000 8.0360000 - 21 21 1 0.0000000 0.0000000 18.7520000 13.3940000 - 22 22 1 0.0000000 0.0000000 18.7520000 18.7520000 - 23 23 1 0.0000000 0.0000000 18.7520000 24.1090000 - 24 24 1 0.0000000 0.0000000 18.7520000 29.4670000 - 25 25 1 0.0000000 0.0000000 24.1090000 2.6790000 - 26 26 1 0.0000000 0.0000000 24.1090000 8.0360000 - 27 27 1 0.0000000 0.0000000 24.1090000 13.3940000 - 28 28 1 0.0000000 0.0000000 24.1090000 18.7520000 - 29 29 1 0.0000000 0.0000000 24.1090000 24.1090000 - 30 30 1 0.0000000 0.0000000 24.1090000 29.4670000 - 31 31 1 0.0000000 0.0000000 29.4670000 2.6790000 - 32 32 1 0.0000000 0.0000000 29.4670000 8.0360000 - 33 33 1 0.0000000 0.0000000 29.4670000 13.3940000 - 34 34 1 0.0000000 0.0000000 29.4670000 18.7520000 - 35 35 1 0.0000000 0.0000000 29.4670000 24.1090000 - 36 36 1 0.0000000 0.0000000 29.4670000 29.4670000 - 37 37 1 0.0000000 5.3580000 2.6790000 2.6790000 - 38 38 1 0.0000000 5.3580000 2.6790000 8.0360000 - 39 39 1 0.0000000 5.3580000 2.6790000 13.3940000 - 40 40 1 0.0000000 5.3580000 2.6790000 18.7520000 - 41 41 1 0.0000000 5.3580000 2.6790000 24.1090000 - 42 42 1 0.0000000 5.3580000 2.6790000 29.4670000 - 43 43 1 0.0000000 5.3580000 8.0360000 2.6790000 - 44 44 1 0.0000000 5.3580000 8.0360000 8.0360000 - 45 45 1 0.0000000 5.3580000 8.0360000 13.3940000 - 46 46 1 0.0000000 5.3580000 8.0360000 18.7520000 - 47 47 1 0.0000000 5.3580000 8.0360000 24.1090000 - 48 48 1 0.0000000 5.3580000 8.0360000 29.4670000 - 49 49 1 0.0000000 5.3580000 13.3940000 2.6790000 - 50 50 1 0.0000000 5.3580000 13.3940000 8.0360000 - 51 51 1 0.0000000 5.3580000 13.3940000 13.3940000 - 52 52 1 0.0000000 5.3580000 13.3940000 18.7520000 - 53 53 1 0.0000000 5.3580000 13.3940000 24.1090000 - 54 54 1 0.0000000 5.3580000 13.3940000 29.4670000 - 55 55 1 0.0000000 5.3580000 18.7520000 2.6790000 - 56 56 1 0.0000000 5.3580000 18.7520000 8.0360000 - 57 57 1 0.0000000 5.3580000 18.7520000 13.3940000 - 58 58 1 0.0000000 5.3580000 18.7520000 18.7520000 - 59 59 1 0.0000000 5.3580000 18.7520000 24.1090000 - 60 60 1 0.0000000 5.3580000 18.7520000 29.4670000 - 61 61 1 0.0000000 5.3580000 24.1090000 2.6790000 - 62 62 1 0.0000000 5.3580000 24.1090000 8.0360000 - 63 63 1 0.0000000 5.3580000 24.1090000 13.3940000 - 64 64 1 0.0000000 5.3580000 24.1090000 18.7520000 - 65 65 1 0.0000000 5.3580000 24.1090000 24.1090000 - 66 66 1 0.0000000 5.3580000 24.1090000 29.4670000 - 67 67 1 0.0000000 5.3580000 29.4670000 2.6790000 - 68 68 1 0.0000000 5.3580000 29.4670000 8.0360000 - 69 69 1 0.0000000 5.3580000 29.4670000 13.3940000 - 70 70 1 0.0000000 5.3580000 29.4670000 18.7520000 - 71 71 1 0.0000000 5.3580000 29.4670000 24.1090000 - 72 72 1 0.0000000 5.3580000 29.4670000 29.4670000 - 73 73 1 0.0000000 10.7150000 2.6790000 2.6790000 - 74 74 1 0.0000000 10.7150000 2.6790000 8.0360000 - 75 75 1 0.0000000 10.7150000 2.6790000 13.3940000 - 76 76 1 0.0000000 10.7150000 2.6790000 18.7520000 - 77 77 1 0.0000000 10.7150000 2.6790000 24.1090000 - 78 78 1 0.0000000 10.7150000 2.6790000 29.4670000 - 79 79 1 0.0000000 10.7150000 8.0360000 2.6790000 - 80 80 1 0.0000000 10.7150000 8.0360000 8.0360000 - 81 81 1 0.0000000 10.7150000 8.0360000 13.3940000 - 82 82 1 0.0000000 10.7150000 8.0360000 18.7520000 - 83 83 1 0.0000000 10.7150000 8.0360000 24.1090000 - 84 84 1 0.0000000 10.7150000 8.0360000 29.4670000 - 85 85 1 0.0000000 10.7150000 13.3940000 2.6790000 - 86 86 1 0.0000000 10.7150000 13.3940000 8.0360000 - 87 87 1 0.0000000 10.7150000 13.3940000 13.3940000 - 88 88 1 0.0000000 10.7150000 13.3940000 18.7520000 - 89 89 1 0.0000000 10.7150000 13.3940000 24.1090000 - 90 90 1 0.0000000 10.7150000 13.3940000 29.4670000 - 91 91 1 0.0000000 10.7150000 18.7520000 2.6790000 - 92 92 1 0.0000000 10.7150000 18.7520000 8.0360000 - 93 93 1 0.0000000 10.7150000 18.7520000 13.3940000 - 94 94 1 0.0000000 10.7150000 18.7520000 18.7520000 - 95 95 1 0.0000000 10.7150000 18.7520000 24.1090000 - 96 96 1 0.0000000 10.7150000 18.7520000 29.4670000 - 97 97 1 0.0000000 10.7150000 24.1090000 2.6790000 - 98 98 1 0.0000000 10.7150000 24.1090000 8.0360000 - 99 99 1 0.0000000 10.7150000 24.1090000 13.3940000 - 100 100 1 0.0000000 10.7150000 24.1090000 18.7520000 - 101 101 1 0.0000000 10.7150000 24.1090000 24.1090000 - 102 102 1 0.0000000 10.7150000 24.1090000 29.4670000 - 103 103 1 0.0000000 10.7150000 29.4670000 2.6790000 - 104 104 1 0.0000000 10.7150000 29.4670000 8.0360000 - 105 105 1 0.0000000 10.7150000 29.4670000 13.3940000 - 106 106 1 0.0000000 10.7150000 29.4670000 18.7520000 - 107 107 1 0.0000000 10.7150000 29.4670000 24.1090000 - 108 108 1 0.0000000 10.7150000 29.4670000 29.4670000 - 109 109 1 0.0000000 16.0730000 2.6790000 2.6790000 - 110 110 1 0.0000000 16.0730000 2.6790000 8.0360000 - 111 111 1 0.0000000 16.0730000 2.6790000 13.3940000 - 112 112 1 0.0000000 16.0730000 2.6790000 18.7520000 - 113 113 1 0.0000000 16.0730000 2.6790000 24.1090000 - 114 114 1 0.0000000 16.0730000 2.6790000 29.4670000 - 115 115 1 0.0000000 16.0730000 8.0360000 2.6790000 - 116 116 1 0.0000000 16.0730000 8.0360000 8.0360000 - 117 117 1 0.0000000 16.0730000 8.0360000 13.3940000 - 118 118 1 0.0000000 16.0730000 8.0360000 18.7520000 - 119 119 1 0.0000000 16.0730000 8.0360000 24.1090000 - 120 120 1 0.0000000 16.0730000 8.0360000 29.4670000 - 121 121 1 0.0000000 16.0730000 13.3940000 2.6790000 - 122 122 1 0.0000000 16.0730000 13.3940000 8.0360000 - 123 123 1 0.0000000 16.0730000 13.3940000 13.3940000 - 124 124 1 0.0000000 16.0730000 13.3940000 18.7520000 - 125 125 1 0.0000000 16.0730000 13.3940000 24.1090000 - 126 126 1 0.0000000 16.0730000 13.3940000 29.4670000 - 127 127 1 0.0000000 16.0730000 18.7520000 2.6790000 - 128 128 1 0.0000000 16.0730000 18.7520000 8.0360000 - 129 129 1 0.0000000 16.0730000 18.7520000 13.3940000 - 130 130 1 0.0000000 16.0730000 18.7520000 18.7520000 - 131 131 1 0.0000000 16.0730000 18.7520000 24.1090000 - 132 132 1 0.0000000 16.0730000 18.7520000 29.4670000 - 133 133 1 0.0000000 16.0730000 24.1090000 2.6790000 - 134 134 1 0.0000000 16.0730000 24.1090000 8.0360000 - 135 135 1 0.0000000 16.0730000 24.1090000 13.3940000 - 136 136 1 0.0000000 16.0730000 24.1090000 18.7520000 - 137 137 1 0.0000000 16.0730000 24.1090000 24.1090000 - 138 138 1 0.0000000 16.0730000 24.1090000 29.4670000 - 139 139 1 0.0000000 16.0730000 29.4670000 2.6790000 - 140 140 1 0.0000000 16.0730000 29.4670000 8.0360000 - 141 141 1 0.0000000 16.0730000 29.4670000 13.3940000 - 142 142 1 0.0000000 16.0730000 29.4670000 18.7520000 - 143 143 1 0.0000000 16.0730000 29.4670000 24.1090000 - 144 144 1 0.0000000 16.0730000 29.4670000 29.4670000 - 145 145 1 0.0000000 21.4310000 2.6790000 2.6790000 - 146 146 1 0.0000000 21.4310000 2.6790000 8.0360000 - 147 147 1 0.0000000 21.4310000 2.6790000 13.3940000 - 148 148 1 0.0000000 21.4310000 2.6790000 18.7520000 - 149 149 1 0.0000000 21.4310000 2.6790000 24.1090000 - 150 150 1 0.0000000 21.4310000 2.6790000 29.4670000 - 151 151 1 0.0000000 21.4310000 8.0360000 2.6790000 - 152 152 1 0.0000000 21.4310000 8.0360000 8.0360000 - 153 153 1 0.0000000 21.4310000 8.0360000 13.3940000 - 154 154 1 0.0000000 21.4310000 8.0360000 18.7520000 - 155 155 1 0.0000000 21.4310000 8.0360000 24.1090000 - 156 156 1 0.0000000 21.4310000 8.0360000 29.4670000 - 157 157 1 0.0000000 21.4310000 13.3940000 2.6790000 - 158 158 1 0.0000000 21.4310000 13.3940000 8.0360000 - 159 159 1 0.0000000 21.4310000 13.3940000 13.3940000 - 160 160 1 0.0000000 21.4310000 13.3940000 18.7520000 - 161 161 1 0.0000000 21.4310000 13.3940000 24.1090000 - 162 162 1 0.0000000 21.4310000 13.3940000 29.4670000 - 163 163 1 0.0000000 21.4310000 18.7520000 2.6790000 - 164 164 1 0.0000000 21.4310000 18.7520000 8.0360000 - 165 165 1 0.0000000 21.4310000 18.7520000 13.3940000 - 166 166 1 0.0000000 21.4310000 18.7520000 18.7520000 - 167 167 1 0.0000000 21.4310000 18.7520000 24.1090000 - 168 168 1 0.0000000 21.4310000 18.7520000 29.4670000 - 169 169 1 0.0000000 21.4310000 24.1090000 2.6790000 - 170 170 1 0.0000000 21.4310000 24.1090000 8.0360000 - 171 171 1 0.0000000 21.4310000 24.1090000 13.3940000 - 172 172 1 0.0000000 21.4310000 24.1090000 18.7520000 - 173 173 1 0.0000000 21.4310000 24.1090000 24.1090000 - 174 174 1 0.0000000 21.4310000 24.1090000 29.4670000 - 175 175 1 0.0000000 21.4310000 29.4670000 2.6790000 - 176 176 1 0.0000000 21.4310000 29.4670000 8.0360000 - 177 177 1 0.0000000 21.4310000 29.4670000 13.3940000 - 178 178 1 0.0000000 21.4310000 29.4670000 18.7520000 - 179 179 1 0.0000000 21.4310000 29.4670000 24.1090000 - 180 180 1 0.0000000 21.4310000 29.4670000 29.4670000 - 181 181 1 0.0000000 26.7880000 2.6790000 2.6790000 - 182 182 1 0.0000000 26.7880000 2.6790000 8.0360000 - 183 183 1 0.0000000 26.7880000 2.6790000 13.3940000 - 184 184 1 0.0000000 26.7880000 2.6790000 18.7520000 - 185 185 1 0.0000000 26.7880000 2.6790000 24.1090000 - 186 186 1 0.0000000 26.7880000 2.6790000 29.4670000 - 187 187 1 0.0000000 26.7880000 8.0360000 2.6790000 - 188 188 1 0.0000000 26.7880000 8.0360000 8.0360000 - 189 189 1 0.0000000 26.7880000 8.0360000 13.3940000 - 190 190 1 0.0000000 26.7880000 8.0360000 18.7520000 - 191 191 1 0.0000000 26.7880000 8.0360000 24.1090000 - 192 192 1 0.0000000 26.7880000 8.0360000 29.4670000 - 193 193 1 0.0000000 26.7880000 13.3940000 2.6790000 - 194 194 1 0.0000000 26.7880000 13.3940000 8.0360000 - 195 195 1 0.0000000 26.7880000 13.3940000 13.3940000 - 196 196 1 0.0000000 26.7880000 13.3940000 18.7520000 - 197 197 1 0.0000000 26.7880000 13.3940000 24.1090000 - 198 198 1 0.0000000 26.7880000 13.3940000 29.4670000 - 199 199 1 0.0000000 26.7880000 18.7520000 2.6790000 - 200 200 1 0.0000000 26.7880000 18.7520000 8.0360000 - 201 201 1 0.0000000 26.7880000 18.7520000 13.3940000 - 202 202 1 0.0000000 26.7880000 18.7520000 18.7520000 - 203 203 1 0.0000000 26.7880000 18.7520000 24.1090000 - 204 204 1 0.0000000 26.7880000 18.7520000 29.4670000 - 205 205 1 0.0000000 26.7880000 24.1090000 2.6790000 - 206 206 1 0.0000000 26.7880000 24.1090000 8.0360000 - 207 207 1 0.0000000 26.7880000 24.1090000 13.3940000 - 208 208 1 0.0000000 26.7880000 24.1090000 18.7520000 - 209 209 1 0.0000000 26.7880000 24.1090000 24.1090000 - 210 210 1 0.0000000 26.7880000 24.1090000 29.4670000 - 211 211 1 0.0000000 26.7880000 29.4670000 2.6790000 - 212 212 1 0.0000000 26.7880000 29.4670000 8.0360000 - 213 213 1 0.0000000 26.7880000 29.4670000 13.3940000 - 214 214 1 0.0000000 26.7880000 29.4670000 18.7520000 - 215 215 1 0.0000000 26.7880000 29.4670000 24.1090000 - 216 216 1 0.0000000 26.7880000 29.4670000 29.4670000 - 217 217 1 0.0000000 2.6790000 5.3580000 2.6790000 - 218 218 1 0.0000000 2.6790000 5.3580000 8.0360000 - 219 219 1 0.0000000 2.6790000 5.3580000 13.3940000 - 220 220 1 0.0000000 2.6790000 5.3580000 18.7520000 - 221 221 1 0.0000000 2.6790000 5.3580000 24.1090000 - 222 222 1 0.0000000 2.6790000 5.3580000 29.4670000 - 223 223 1 0.0000000 2.6790000 10.7150000 2.6790000 - 224 224 1 0.0000000 2.6790000 10.7150000 8.0360000 - 225 225 1 0.0000000 2.6790000 10.7150000 13.3940000 - 226 226 1 0.0000000 2.6790000 10.7150000 18.7520000 - 227 227 1 0.0000000 2.6790000 10.7150000 24.1090000 - 228 228 1 0.0000000 2.6790000 10.7150000 29.4670000 - 229 229 1 0.0000000 2.6790000 16.0730000 2.6790000 - 230 230 1 0.0000000 2.6790000 16.0730000 8.0360000 - 231 231 1 0.0000000 2.6790000 16.0730000 13.3940000 - 232 232 1 0.0000000 2.6790000 16.0730000 18.7520000 - 233 233 1 0.0000000 2.6790000 16.0730000 24.1090000 - 234 234 1 0.0000000 2.6790000 16.0730000 29.4670000 - 235 235 1 0.0000000 2.6790000 21.4310000 2.6790000 - 236 236 1 0.0000000 2.6790000 21.4310000 8.0360000 - 237 237 1 0.0000000 2.6790000 21.4310000 13.3940000 - 238 238 1 0.0000000 2.6790000 21.4310000 18.7520000 - 239 239 1 0.0000000 2.6790000 21.4310000 24.1090000 - 240 240 1 0.0000000 2.6790000 21.4310000 29.4670000 - 241 241 1 0.0000000 2.6790000 26.7880000 2.6790000 - 242 242 1 0.0000000 2.6790000 26.7880000 8.0360000 - 243 243 1 0.0000000 2.6790000 26.7880000 13.3940000 - 244 244 1 0.0000000 2.6790000 26.7880000 18.7520000 - 245 245 1 0.0000000 2.6790000 26.7880000 24.1090000 - 246 246 1 0.0000000 2.6790000 26.7880000 29.4670000 - 247 247 1 0.0000000 2.6790000 32.1460000 2.6790000 - 248 248 1 0.0000000 2.6790000 32.1460000 8.0360000 - 249 249 1 0.0000000 2.6790000 32.1460000 13.3940000 - 250 250 1 0.0000000 2.6790000 32.1460000 18.7520000 - 251 251 1 0.0000000 2.6790000 32.1460000 24.1090000 - 252 252 1 0.0000000 2.6790000 32.1460000 29.4670000 - 253 253 1 0.0000000 8.0360000 5.3580000 2.6790000 - 254 254 1 0.0000000 8.0360000 5.3580000 8.0360000 - 255 255 1 0.0000000 8.0360000 5.3580000 13.3940000 - 256 256 1 0.0000000 8.0360000 5.3580000 18.7520000 - 257 257 1 0.0000000 8.0360000 5.3580000 24.1090000 - 258 258 1 0.0000000 8.0360000 5.3580000 29.4670000 - 259 259 1 0.0000000 8.0360000 10.7150000 2.6790000 - 260 260 1 0.0000000 8.0360000 10.7150000 8.0360000 - 261 261 1 0.0000000 8.0360000 10.7150000 13.3940000 - 262 262 1 0.0000000 8.0360000 10.7150000 18.7520000 - 263 263 1 0.0000000 8.0360000 10.7150000 24.1090000 - 264 264 1 0.0000000 8.0360000 10.7150000 29.4670000 - 265 265 1 0.0000000 8.0360000 16.0730000 2.6790000 - 266 266 1 0.0000000 8.0360000 16.0730000 8.0360000 - 267 267 1 0.0000000 8.0360000 16.0730000 13.3940000 - 268 268 1 0.0000000 8.0360000 16.0730000 18.7520000 - 269 269 1 0.0000000 8.0360000 16.0730000 24.1090000 - 270 270 1 0.0000000 8.0360000 16.0730000 29.4670000 - 271 271 1 0.0000000 8.0360000 21.4310000 2.6790000 - 272 272 1 0.0000000 8.0360000 21.4310000 8.0360000 - 273 273 1 0.0000000 8.0360000 21.4310000 13.3940000 - 274 274 1 0.0000000 8.0360000 21.4310000 18.7520000 - 275 275 1 0.0000000 8.0360000 21.4310000 24.1090000 - 276 276 1 0.0000000 8.0360000 21.4310000 29.4670000 - 277 277 1 0.0000000 8.0360000 26.7880000 2.6790000 - 278 278 1 0.0000000 8.0360000 26.7880000 8.0360000 - 279 279 1 0.0000000 8.0360000 26.7880000 13.3940000 - 280 280 1 0.0000000 8.0360000 26.7880000 18.7520000 - 281 281 1 0.0000000 8.0360000 26.7880000 24.1090000 - 282 282 1 0.0000000 8.0360000 26.7880000 29.4670000 - 283 283 1 0.0000000 8.0360000 32.1460000 2.6790000 - 284 284 1 0.0000000 8.0360000 32.1460000 8.0360000 - 285 285 1 0.0000000 8.0360000 32.1460000 13.3940000 - 286 286 1 0.0000000 8.0360000 32.1460000 18.7520000 - 287 287 1 0.0000000 8.0360000 32.1460000 24.1090000 - 288 288 1 0.0000000 8.0360000 32.1460000 29.4670000 - 289 289 1 0.0000000 13.3940000 5.3580000 2.6790000 - 290 290 1 0.0000000 13.3940000 5.3580000 8.0360000 - 291 291 1 0.0000000 13.3940000 5.3580000 13.3940000 - 292 292 1 0.0000000 13.3940000 5.3580000 18.7520000 - 293 293 1 0.0000000 13.3940000 5.3580000 24.1090000 - 294 294 1 0.0000000 13.3940000 5.3580000 29.4670000 - 295 295 1 0.0000000 13.3940000 10.7150000 2.6790000 - 296 296 1 0.0000000 13.3940000 10.7150000 8.0360000 - 297 297 1 0.0000000 13.3940000 10.7150000 13.3940000 - 298 298 1 0.0000000 13.3940000 10.7150000 18.7520000 - 299 299 1 0.0000000 13.3940000 10.7150000 24.1090000 - 300 300 1 0.0000000 13.3940000 10.7150000 29.4670000 - 301 301 1 0.0000000 13.3940000 16.0730000 2.6790000 - 302 302 1 0.0000000 13.3940000 16.0730000 8.0360000 - 303 303 1 0.0000000 13.3940000 16.0730000 13.3940000 - 304 304 1 0.0000000 13.3940000 16.0730000 18.7520000 - 305 305 1 0.0000000 13.3940000 16.0730000 24.1090000 - 306 306 1 0.0000000 13.3940000 16.0730000 29.4670000 - 307 307 1 0.0000000 13.3940000 21.4310000 2.6790000 - 308 308 1 0.0000000 13.3940000 21.4310000 8.0360000 - 309 309 1 0.0000000 13.3940000 21.4310000 13.3940000 - 310 310 1 0.0000000 13.3940000 21.4310000 18.7520000 - 311 311 1 0.0000000 13.3940000 21.4310000 24.1090000 - 312 312 1 0.0000000 13.3940000 21.4310000 29.4670000 - 313 313 1 0.0000000 13.3940000 26.7880000 2.6790000 - 314 314 1 0.0000000 13.3940000 26.7880000 8.0360000 - 315 315 1 0.0000000 13.3940000 26.7880000 13.3940000 - 316 316 1 0.0000000 13.3940000 26.7880000 18.7520000 - 317 317 1 0.0000000 13.3940000 26.7880000 24.1090000 - 318 318 1 0.0000000 13.3940000 26.7880000 29.4670000 - 319 319 1 0.0000000 13.3940000 32.1460000 2.6790000 - 320 320 1 0.0000000 13.3940000 32.1460000 8.0360000 - 321 321 1 0.0000000 13.3940000 32.1460000 13.3940000 - 322 322 1 0.0000000 13.3940000 32.1460000 18.7520000 - 323 323 1 0.0000000 13.3940000 32.1460000 24.1090000 - 324 324 1 0.0000000 13.3940000 32.1460000 29.4670000 - 325 325 1 0.0000000 18.7520000 5.3580000 2.6790000 - 326 326 1 0.0000000 18.7520000 5.3580000 8.0360000 - 327 327 1 0.0000000 18.7520000 5.3580000 13.3940000 - 328 328 1 0.0000000 18.7520000 5.3580000 18.7520000 - 329 329 1 0.0000000 18.7520000 5.3580000 24.1090000 - 330 330 1 0.0000000 18.7520000 5.3580000 29.4670000 - 331 331 1 0.0000000 18.7520000 10.7150000 2.6790000 - 332 332 1 0.0000000 18.7520000 10.7150000 8.0360000 - 333 333 1 0.0000000 18.7520000 10.7150000 13.3940000 - 334 334 1 0.0000000 18.7520000 10.7150000 18.7520000 - 335 335 1 0.0000000 18.7520000 10.7150000 24.1090000 - 336 336 1 0.0000000 18.7520000 10.7150000 29.4670000 - 337 337 1 0.0000000 18.7520000 16.0730000 2.6790000 - 338 338 1 0.0000000 18.7520000 16.0730000 8.0360000 - 339 339 1 0.0000000 18.7520000 16.0730000 13.3940000 - 340 340 1 0.0000000 18.7520000 16.0730000 18.7520000 - 341 341 1 0.0000000 18.7520000 16.0730000 24.1090000 - 342 342 1 0.0000000 18.7520000 16.0730000 29.4670000 - 343 343 1 0.0000000 18.7520000 21.4310000 2.6790000 - 344 344 1 0.0000000 18.7520000 21.4310000 8.0360000 - 345 345 1 0.0000000 18.7520000 21.4310000 13.3940000 - 346 346 1 0.0000000 18.7520000 21.4310000 18.7520000 - 347 347 1 0.0000000 18.7520000 21.4310000 24.1090000 - 348 348 1 0.0000000 18.7520000 21.4310000 29.4670000 - 349 349 1 0.0000000 18.7520000 26.7880000 2.6790000 - 350 350 1 0.0000000 18.7520000 26.7880000 8.0360000 - 351 351 1 0.0000000 18.7520000 26.7880000 13.3940000 - 352 352 1 0.0000000 18.7520000 26.7880000 18.7520000 - 353 353 1 0.0000000 18.7520000 26.7880000 24.1090000 - 354 354 1 0.0000000 18.7520000 26.7880000 29.4670000 - 355 355 1 0.0000000 18.7520000 32.1460000 2.6790000 - 356 356 1 0.0000000 18.7520000 32.1460000 8.0360000 - 357 357 1 0.0000000 18.7520000 32.1460000 13.3940000 - 358 358 1 0.0000000 18.7520000 32.1460000 18.7520000 - 359 359 1 0.0000000 18.7520000 32.1460000 24.1090000 - 360 360 1 0.0000000 18.7520000 32.1460000 29.4670000 - 361 361 1 0.0000000 24.1090000 5.3580000 2.6790000 - 362 362 1 0.0000000 24.1090000 5.3580000 8.0360000 - 363 363 1 0.0000000 24.1090000 5.3580000 13.3940000 - 364 364 1 0.0000000 24.1090000 5.3580000 18.7520000 - 365 365 1 0.0000000 24.1090000 5.3580000 24.1090000 - 366 366 1 0.0000000 24.1090000 5.3580000 29.4670000 - 367 367 1 0.0000000 24.1090000 10.7150000 2.6790000 - 368 368 1 0.0000000 24.1090000 10.7150000 8.0360000 - 369 369 1 0.0000000 24.1090000 10.7150000 13.3940000 - 370 370 1 0.0000000 24.1090000 10.7150000 18.7520000 - 371 371 1 0.0000000 24.1090000 10.7150000 24.1090000 - 372 372 1 0.0000000 24.1090000 10.7150000 29.4670000 - 373 373 1 0.0000000 24.1090000 16.0730000 2.6790000 - 374 374 1 0.0000000 24.1090000 16.0730000 8.0360000 - 375 375 1 0.0000000 24.1090000 16.0730000 13.3940000 - 376 376 1 0.0000000 24.1090000 16.0730000 18.7520000 - 377 377 1 0.0000000 24.1090000 16.0730000 24.1090000 - 378 378 1 0.0000000 24.1090000 16.0730000 29.4670000 - 379 379 1 0.0000000 24.1090000 21.4310000 2.6790000 - 380 380 1 0.0000000 24.1090000 21.4310000 8.0360000 - 381 381 1 0.0000000 24.1090000 21.4310000 13.3940000 - 382 382 1 0.0000000 24.1090000 21.4310000 18.7520000 - 383 383 1 0.0000000 24.1090000 21.4310000 24.1090000 - 384 384 1 0.0000000 24.1090000 21.4310000 29.4670000 - 385 385 1 0.0000000 24.1090000 26.7880000 2.6790000 - 386 386 1 0.0000000 24.1090000 26.7880000 8.0360000 - 387 387 1 0.0000000 24.1090000 26.7880000 13.3940000 - 388 388 1 0.0000000 24.1090000 26.7880000 18.7520000 - 389 389 1 0.0000000 24.1090000 26.7880000 24.1090000 - 390 390 1 0.0000000 24.1090000 26.7880000 29.4670000 - 391 391 1 0.0000000 24.1090000 32.1460000 2.6790000 - 392 392 1 0.0000000 24.1090000 32.1460000 8.0360000 - 393 393 1 0.0000000 24.1090000 32.1460000 13.3940000 - 394 394 1 0.0000000 24.1090000 32.1460000 18.7520000 - 395 395 1 0.0000000 24.1090000 32.1460000 24.1090000 - 396 396 1 0.0000000 24.1090000 32.1460000 29.4670000 - 397 397 1 0.0000000 29.4670000 5.3580000 2.6790000 - 398 398 1 0.0000000 29.4670000 5.3580000 8.0360000 - 399 399 1 0.0000000 29.4670000 5.3580000 13.3940000 - 400 400 1 0.0000000 29.4670000 5.3580000 18.7520000 - 401 401 1 0.0000000 29.4670000 5.3580000 24.1090000 - 402 402 1 0.0000000 29.4670000 5.3580000 29.4670000 - 403 403 1 0.0000000 29.4670000 10.7150000 2.6790000 - 404 404 1 0.0000000 29.4670000 10.7150000 8.0360000 - 405 405 1 0.0000000 29.4670000 10.7150000 13.3940000 - 406 406 1 0.0000000 29.4670000 10.7150000 18.7520000 - 407 407 1 0.0000000 29.4670000 10.7150000 24.1090000 - 408 408 1 0.0000000 29.4670000 10.7150000 29.4670000 - 409 409 1 0.0000000 29.4670000 16.0730000 2.6790000 - 410 410 1 0.0000000 29.4670000 16.0730000 8.0360000 - 411 411 1 0.0000000 29.4670000 16.0730000 13.3940000 - 412 412 1 0.0000000 29.4670000 16.0730000 18.7520000 - 413 413 1 0.0000000 29.4670000 16.0730000 24.1090000 - 414 414 1 0.0000000 29.4670000 16.0730000 29.4670000 - 415 415 1 0.0000000 29.4670000 21.4310000 2.6790000 - 416 416 1 0.0000000 29.4670000 21.4310000 8.0360000 - 417 417 1 0.0000000 29.4670000 21.4310000 13.3940000 - 418 418 1 0.0000000 29.4670000 21.4310000 18.7520000 - 419 419 1 0.0000000 29.4670000 21.4310000 24.1090000 - 420 420 1 0.0000000 29.4670000 21.4310000 29.4670000 - 421 421 1 0.0000000 29.4670000 26.7880000 2.6790000 - 422 422 1 0.0000000 29.4670000 26.7880000 8.0360000 - 423 423 1 0.0000000 29.4670000 26.7880000 13.3940000 - 424 424 1 0.0000000 29.4670000 26.7880000 18.7520000 - 425 425 1 0.0000000 29.4670000 26.7880000 24.1090000 - 426 426 1 0.0000000 29.4670000 26.7880000 29.4670000 - 427 427 1 0.0000000 29.4670000 32.1460000 2.6790000 - 428 428 1 0.0000000 29.4670000 32.1460000 8.0360000 - 429 429 1 0.0000000 29.4670000 32.1460000 13.3940000 - 430 430 1 0.0000000 29.4670000 32.1460000 18.7520000 - 431 431 1 0.0000000 29.4670000 32.1460000 24.1090000 - 432 432 1 0.0000000 29.4670000 32.1460000 29.4670000 - 433 433 1 0.0000000 2.6790000 2.6790000 5.3580000 - 434 434 1 0.0000000 2.6790000 2.6790000 10.7150000 - 435 435 1 0.0000000 2.6790000 2.6790000 16.0730000 - 436 436 1 0.0000000 2.6790000 2.6790000 21.4310000 - 437 437 1 0.0000000 2.6790000 2.6790000 26.7880000 - 438 438 1 0.0000000 2.6790000 2.6790000 32.1460000 - 439 439 1 0.0000000 2.6790000 8.0360000 5.3580000 - 440 440 1 0.0000000 2.6790000 8.0360000 10.7150000 - 441 441 1 0.0000000 2.6790000 8.0360000 16.0730000 - 442 442 1 0.0000000 2.6790000 8.0360000 21.4310000 - 443 443 1 0.0000000 2.6790000 8.0360000 26.7880000 - 444 444 1 0.0000000 2.6790000 8.0360000 32.1460000 - 445 445 1 0.0000000 2.6790000 13.3940000 5.3580000 - 446 446 1 0.0000000 2.6790000 13.3940000 10.7150000 - 447 447 1 0.0000000 2.6790000 13.3940000 16.0730000 - 448 448 1 0.0000000 2.6790000 13.3940000 21.4310000 - 449 449 1 0.0000000 2.6790000 13.3940000 26.7880000 - 450 450 1 0.0000000 2.6790000 13.3940000 32.1460000 - 451 451 1 0.0000000 2.6790000 18.7520000 5.3580000 - 452 452 1 0.0000000 2.6790000 18.7520000 10.7150000 - 453 453 1 0.0000000 2.6790000 18.7520000 16.0730000 - 454 454 1 0.0000000 2.6790000 18.7520000 21.4310000 - 455 455 1 0.0000000 2.6790000 18.7520000 26.7880000 - 456 456 1 0.0000000 2.6790000 18.7520000 32.1460000 - 457 457 1 0.0000000 2.6790000 24.1090000 5.3580000 - 458 458 1 0.0000000 2.6790000 24.1090000 10.7150000 - 459 459 1 0.0000000 2.6790000 24.1090000 16.0730000 - 460 460 1 0.0000000 2.6790000 24.1090000 21.4310000 - 461 461 1 0.0000000 2.6790000 24.1090000 26.7880000 - 462 462 1 0.0000000 2.6790000 24.1090000 32.1460000 - 463 463 1 0.0000000 2.6790000 29.4670000 5.3580000 - 464 464 1 0.0000000 2.6790000 29.4670000 10.7150000 - 465 465 1 0.0000000 2.6790000 29.4670000 16.0730000 - 466 466 1 0.0000000 2.6790000 29.4670000 21.4310000 - 467 467 1 0.0000000 2.6790000 29.4670000 26.7880000 - 468 468 1 0.0000000 2.6790000 29.4670000 32.1460000 - 469 469 1 0.0000000 8.0360000 2.6790000 5.3580000 - 470 470 1 0.0000000 8.0360000 2.6790000 10.7150000 - 471 471 1 0.0000000 8.0360000 2.6790000 16.0730000 - 472 472 1 0.0000000 8.0360000 2.6790000 21.4310000 - 473 473 1 0.0000000 8.0360000 2.6790000 26.7880000 - 474 474 1 0.0000000 8.0360000 2.6790000 32.1460000 - 475 475 1 0.0000000 8.0360000 8.0360000 5.3580000 - 476 476 1 0.0000000 8.0360000 8.0360000 10.7150000 - 477 477 1 0.0000000 8.0360000 8.0360000 16.0730000 - 478 478 1 0.0000000 8.0360000 8.0360000 21.4310000 - 479 479 1 0.0000000 8.0360000 8.0360000 26.7880000 - 480 480 1 0.0000000 8.0360000 8.0360000 32.1460000 - 481 481 1 0.0000000 8.0360000 13.3940000 5.3580000 - 482 482 1 0.0000000 8.0360000 13.3940000 10.7150000 - 483 483 1 0.0000000 8.0360000 13.3940000 16.0730000 - 484 484 1 0.0000000 8.0360000 13.3940000 21.4310000 - 485 485 1 0.0000000 8.0360000 13.3940000 26.7880000 - 486 486 1 0.0000000 8.0360000 13.3940000 32.1460000 - 487 487 1 0.0000000 8.0360000 18.7520000 5.3580000 - 488 488 1 0.0000000 8.0360000 18.7520000 10.7150000 - 489 489 1 0.0000000 8.0360000 18.7520000 16.0730000 - 490 490 1 0.0000000 8.0360000 18.7520000 21.4310000 - 491 491 1 0.0000000 8.0360000 18.7520000 26.7880000 - 492 492 1 0.0000000 8.0360000 18.7520000 32.1460000 - 493 493 1 0.0000000 8.0360000 24.1090000 5.3580000 - 494 494 1 0.0000000 8.0360000 24.1090000 10.7150000 - 495 495 1 0.0000000 8.0360000 24.1090000 16.0730000 - 496 496 1 0.0000000 8.0360000 24.1090000 21.4310000 - 497 497 1 0.0000000 8.0360000 24.1090000 26.7880000 - 498 498 1 0.0000000 8.0360000 24.1090000 32.1460000 - 499 499 1 0.0000000 8.0360000 29.4670000 5.3580000 - 500 500 1 0.0000000 8.0360000 29.4670000 10.7150000 - 501 501 1 0.0000000 8.0360000 29.4670000 16.0730000 - 502 502 1 0.0000000 8.0360000 29.4670000 21.4310000 - 503 503 1 0.0000000 8.0360000 29.4670000 26.7880000 - 504 504 1 0.0000000 8.0360000 29.4670000 32.1460000 - 505 505 1 0.0000000 13.3940000 2.6790000 5.3580000 - 506 506 1 0.0000000 13.3940000 2.6790000 10.7150000 - 507 507 1 0.0000000 13.3940000 2.6790000 16.0730000 - 508 508 1 0.0000000 13.3940000 2.6790000 21.4310000 - 509 509 1 0.0000000 13.3940000 2.6790000 26.7880000 - 510 510 1 0.0000000 13.3940000 2.6790000 32.1460000 - 511 511 1 0.0000000 13.3940000 8.0360000 5.3580000 - 512 512 1 0.0000000 13.3940000 8.0360000 10.7150000 - 513 513 1 0.0000000 13.3940000 8.0360000 16.0730000 - 514 514 1 0.0000000 13.3940000 8.0360000 21.4310000 - 515 515 1 0.0000000 13.3940000 8.0360000 26.7880000 - 516 516 1 0.0000000 13.3940000 8.0360000 32.1460000 - 517 517 1 0.0000000 13.3940000 13.3940000 5.3580000 - 518 518 1 0.0000000 13.3940000 13.3940000 10.7150000 - 519 519 1 0.0000000 13.3940000 13.3940000 16.0730000 - 520 520 1 0.0000000 13.3940000 13.3940000 21.4310000 - 521 521 1 0.0000000 13.3940000 13.3940000 26.7880000 - 522 522 1 0.0000000 13.3940000 13.3940000 32.1460000 - 523 523 1 0.0000000 13.3940000 18.7520000 5.3580000 - 524 524 1 0.0000000 13.3940000 18.7520000 10.7150000 - 525 525 1 0.0000000 13.3940000 18.7520000 16.0730000 - 526 526 1 0.0000000 13.3940000 18.7520000 21.4310000 - 527 527 1 0.0000000 13.3940000 18.7520000 26.7880000 - 528 528 1 0.0000000 13.3940000 18.7520000 32.1460000 - 529 529 1 0.0000000 13.3940000 24.1090000 5.3580000 - 530 530 1 0.0000000 13.3940000 24.1090000 10.7150000 - 531 531 1 0.0000000 13.3940000 24.1090000 16.0730000 - 532 532 1 0.0000000 13.3940000 24.1090000 21.4310000 - 533 533 1 0.0000000 13.3940000 24.1090000 26.7880000 - 534 534 1 0.0000000 13.3940000 24.1090000 32.1460000 - 535 535 1 0.0000000 13.3940000 29.4670000 5.3580000 - 536 536 1 0.0000000 13.3940000 29.4670000 10.7150000 - 537 537 1 0.0000000 13.3940000 29.4670000 16.0730000 - 538 538 1 0.0000000 13.3940000 29.4670000 21.4310000 - 539 539 1 0.0000000 13.3940000 29.4670000 26.7880000 - 540 540 1 0.0000000 13.3940000 29.4670000 32.1460000 - 541 541 1 0.0000000 18.7520000 2.6790000 5.3580000 - 542 542 1 0.0000000 18.7520000 2.6790000 10.7150000 - 543 543 1 0.0000000 18.7520000 2.6790000 16.0730000 - 544 544 1 0.0000000 18.7520000 2.6790000 21.4310000 - 545 545 1 0.0000000 18.7520000 2.6790000 26.7880000 - 546 546 1 0.0000000 18.7520000 2.6790000 32.1460000 - 547 547 1 0.0000000 18.7520000 8.0360000 5.3580000 - 548 548 1 0.0000000 18.7520000 8.0360000 10.7150000 - 549 549 1 0.0000000 18.7520000 8.0360000 16.0730000 - 550 550 1 0.0000000 18.7520000 8.0360000 21.4310000 - 551 551 1 0.0000000 18.7520000 8.0360000 26.7880000 - 552 552 1 0.0000000 18.7520000 8.0360000 32.1460000 - 553 553 1 0.0000000 18.7520000 13.3940000 5.3580000 - 554 554 1 0.0000000 18.7520000 13.3940000 10.7150000 - 555 555 1 0.0000000 18.7520000 13.3940000 16.0730000 - 556 556 1 0.0000000 18.7520000 13.3940000 21.4310000 - 557 557 1 0.0000000 18.7520000 13.3940000 26.7880000 - 558 558 1 0.0000000 18.7520000 13.3940000 32.1460000 - 559 559 1 0.0000000 18.7520000 18.7520000 5.3580000 - 560 560 1 0.0000000 18.7520000 18.7520000 10.7150000 - 561 561 1 0.0000000 18.7520000 18.7520000 16.0730000 - 562 562 1 0.0000000 18.7520000 18.7520000 21.4310000 - 563 563 1 0.0000000 18.7520000 18.7520000 26.7880000 - 564 564 1 0.0000000 18.7520000 18.7520000 32.1460000 - 565 565 1 0.0000000 18.7520000 24.1090000 5.3580000 - 566 566 1 0.0000000 18.7520000 24.1090000 10.7150000 - 567 567 1 0.0000000 18.7520000 24.1090000 16.0730000 - 568 568 1 0.0000000 18.7520000 24.1090000 21.4310000 - 569 569 1 0.0000000 18.7520000 24.1090000 26.7880000 - 570 570 1 0.0000000 18.7520000 24.1090000 32.1460000 - 571 571 1 0.0000000 18.7520000 29.4670000 5.3580000 - 572 572 1 0.0000000 18.7520000 29.4670000 10.7150000 - 573 573 1 0.0000000 18.7520000 29.4670000 16.0730000 - 574 574 1 0.0000000 18.7520000 29.4670000 21.4310000 - 575 575 1 0.0000000 18.7520000 29.4670000 26.7880000 - 576 576 1 0.0000000 18.7520000 29.4670000 32.1460000 - 577 577 1 0.0000000 24.1090000 2.6790000 5.3580000 - 578 578 1 0.0000000 24.1090000 2.6790000 10.7150000 - 579 579 1 0.0000000 24.1090000 2.6790000 16.0730000 - 580 580 1 0.0000000 24.1090000 2.6790000 21.4310000 - 581 581 1 0.0000000 24.1090000 2.6790000 26.7880000 - 582 582 1 0.0000000 24.1090000 2.6790000 32.1460000 - 583 583 1 0.0000000 24.1090000 8.0360000 5.3580000 - 584 584 1 0.0000000 24.1090000 8.0360000 10.7150000 - 585 585 1 0.0000000 24.1090000 8.0360000 16.0730000 - 586 586 1 0.0000000 24.1090000 8.0360000 21.4310000 - 587 587 1 0.0000000 24.1090000 8.0360000 26.7880000 - 588 588 1 0.0000000 24.1090000 8.0360000 32.1460000 - 589 589 1 0.0000000 24.1090000 13.3940000 5.3580000 - 590 590 1 0.0000000 24.1090000 13.3940000 10.7150000 - 591 591 1 0.0000000 24.1090000 13.3940000 16.0730000 - 592 592 1 0.0000000 24.1090000 13.3940000 21.4310000 - 593 593 1 0.0000000 24.1090000 13.3940000 26.7880000 - 594 594 1 0.0000000 24.1090000 13.3940000 32.1460000 - 595 595 1 0.0000000 24.1090000 18.7520000 5.3580000 - 596 596 1 0.0000000 24.1090000 18.7520000 10.7150000 - 597 597 1 0.0000000 24.1090000 18.7520000 16.0730000 - 598 598 1 0.0000000 24.1090000 18.7520000 21.4310000 - 599 599 1 0.0000000 24.1090000 18.7520000 26.7880000 - 600 600 1 0.0000000 24.1090000 18.7520000 32.1460000 - 601 601 1 0.0000000 24.1090000 24.1090000 5.3580000 - 602 602 1 0.0000000 24.1090000 24.1090000 10.7150000 - 603 603 1 0.0000000 24.1090000 24.1090000 16.0730000 - 604 604 1 0.0000000 24.1090000 24.1090000 21.4310000 - 605 605 1 0.0000000 24.1090000 24.1090000 26.7880000 - 606 606 1 0.0000000 24.1090000 24.1090000 32.1460000 - 607 607 1 0.0000000 24.1090000 29.4670000 5.3580000 - 608 608 1 0.0000000 24.1090000 29.4670000 10.7150000 - 609 609 1 0.0000000 24.1090000 29.4670000 16.0730000 - 610 610 1 0.0000000 24.1090000 29.4670000 21.4310000 - 611 611 1 0.0000000 24.1090000 29.4670000 26.7880000 - 612 612 1 0.0000000 24.1090000 29.4670000 32.1460000 - 613 613 1 0.0000000 29.4670000 2.6790000 5.3580000 - 614 614 1 0.0000000 29.4670000 2.6790000 10.7150000 - 615 615 1 0.0000000 29.4670000 2.6790000 16.0730000 - 616 616 1 0.0000000 29.4670000 2.6790000 21.4310000 - 617 617 1 0.0000000 29.4670000 2.6790000 26.7880000 - 618 618 1 0.0000000 29.4670000 2.6790000 32.1460000 - 619 619 1 0.0000000 29.4670000 8.0360000 5.3580000 - 620 620 1 0.0000000 29.4670000 8.0360000 10.7150000 - 621 621 1 0.0000000 29.4670000 8.0360000 16.0730000 - 622 622 1 0.0000000 29.4670000 8.0360000 21.4310000 - 623 623 1 0.0000000 29.4670000 8.0360000 26.7880000 - 624 624 1 0.0000000 29.4670000 8.0360000 32.1460000 - 625 625 1 0.0000000 29.4670000 13.3940000 5.3580000 - 626 626 1 0.0000000 29.4670000 13.3940000 10.7150000 - 627 627 1 0.0000000 29.4670000 13.3940000 16.0730000 - 628 628 1 0.0000000 29.4670000 13.3940000 21.4310000 - 629 629 1 0.0000000 29.4670000 13.3940000 26.7880000 - 630 630 1 0.0000000 29.4670000 13.3940000 32.1460000 - 631 631 1 0.0000000 29.4670000 18.7520000 5.3580000 - 632 632 1 0.0000000 29.4670000 18.7520000 10.7150000 - 633 633 1 0.0000000 29.4670000 18.7520000 16.0730000 - 634 634 1 0.0000000 29.4670000 18.7520000 21.4310000 - 635 635 1 0.0000000 29.4670000 18.7520000 26.7880000 - 636 636 1 0.0000000 29.4670000 18.7520000 32.1460000 - 637 637 1 0.0000000 29.4670000 24.1090000 5.3580000 - 638 638 1 0.0000000 29.4670000 24.1090000 10.7150000 - 639 639 1 0.0000000 29.4670000 24.1090000 16.0730000 - 640 640 1 0.0000000 29.4670000 24.1090000 21.4310000 - 641 641 1 0.0000000 29.4670000 24.1090000 26.7880000 - 642 642 1 0.0000000 29.4670000 24.1090000 32.1460000 - 643 643 1 0.0000000 29.4670000 29.4670000 5.3580000 - 644 644 1 0.0000000 29.4670000 29.4670000 10.7150000 - 645 645 1 0.0000000 29.4670000 29.4670000 16.0730000 - 646 646 1 0.0000000 29.4670000 29.4670000 21.4310000 - 647 647 1 0.0000000 29.4670000 29.4670000 26.7880000 - 648 648 1 0.0000000 29.4670000 29.4670000 32.1460000 - 649 649 1 0.0000000 0.0000000 5.3580000 5.3580000 - 650 650 1 0.0000000 0.0000000 5.3580000 10.7150000 - 651 651 1 0.0000000 0.0000000 5.3580000 16.0730000 - 652 652 1 0.0000000 0.0000000 5.3580000 21.4310000 - 653 653 1 0.0000000 0.0000000 5.3580000 26.7880000 - 654 654 1 0.0000000 0.0000000 5.3580000 32.1460000 - 655 655 1 0.0000000 0.0000000 10.7150000 5.3580000 - 656 656 1 0.0000000 0.0000000 10.7150000 10.7150000 - 657 657 1 0.0000000 0.0000000 10.7150000 16.0730000 - 658 658 1 0.0000000 0.0000000 10.7150000 21.4310000 - 659 659 1 0.0000000 0.0000000 10.7150000 26.7880000 - 660 660 1 0.0000000 0.0000000 10.7150000 32.1460000 - 661 661 1 0.0000000 0.0000000 16.0730000 5.3580000 - 662 662 1 0.0000000 0.0000000 16.0730000 10.7150000 - 663 663 1 0.0000000 0.0000000 16.0730000 16.0730000 - 664 664 1 0.0000000 0.0000000 16.0730000 21.4310000 - 665 665 1 0.0000000 0.0000000 16.0730000 26.7880000 - 666 666 1 0.0000000 0.0000000 16.0730000 32.1460000 - 667 667 1 0.0000000 0.0000000 21.4310000 5.3580000 - 668 668 1 0.0000000 0.0000000 21.4310000 10.7150000 - 669 669 1 0.0000000 0.0000000 21.4310000 16.0730000 - 670 670 1 0.0000000 0.0000000 21.4310000 21.4310000 - 671 671 1 0.0000000 0.0000000 21.4310000 26.7880000 - 672 672 1 0.0000000 0.0000000 21.4310000 32.1460000 - 673 673 1 0.0000000 0.0000000 26.7880000 5.3580000 - 674 674 1 0.0000000 0.0000000 26.7880000 10.7150000 - 675 675 1 0.0000000 0.0000000 26.7880000 16.0730000 - 676 676 1 0.0000000 0.0000000 26.7880000 21.4310000 - 677 677 1 0.0000000 0.0000000 26.7880000 26.7880000 - 678 678 1 0.0000000 0.0000000 26.7880000 32.1460000 - 679 679 1 0.0000000 0.0000000 32.1460000 5.3580000 - 680 680 1 0.0000000 0.0000000 32.1460000 10.7150000 - 681 681 1 0.0000000 0.0000000 32.1460000 16.0730000 - 682 682 1 0.0000000 0.0000000 32.1460000 21.4310000 - 683 683 1 0.0000000 0.0000000 32.1460000 26.7880000 - 684 684 1 0.0000000 0.0000000 32.1460000 32.1460000 - 685 685 1 0.0000000 5.3580000 5.3580000 5.3580000 - 686 686 1 0.0000000 5.3580000 5.3580000 10.7150000 - 687 687 1 0.0000000 5.3580000 5.3580000 16.0730000 - 688 688 1 0.0000000 5.3580000 5.3580000 21.4310000 - 689 689 1 0.0000000 5.3580000 5.3580000 26.7880000 - 690 690 1 0.0000000 5.3580000 5.3580000 32.1460000 - 691 691 1 0.0000000 5.3580000 10.7150000 5.3580000 - 692 692 1 0.0000000 5.3580000 10.7150000 10.7150000 - 693 693 1 0.0000000 5.3580000 10.7150000 16.0730000 - 694 694 1 0.0000000 5.3580000 10.7150000 21.4310000 - 695 695 1 0.0000000 5.3580000 10.7150000 26.7880000 - 696 696 1 0.0000000 5.3580000 10.7150000 32.1460000 - 697 697 1 0.0000000 5.3580000 16.0730000 5.3580000 - 698 698 1 0.0000000 5.3580000 16.0730000 10.7150000 - 699 699 1 0.0000000 5.3580000 16.0730000 16.0730000 - 700 700 1 0.0000000 5.3580000 16.0730000 21.4310000 - 701 701 1 0.0000000 5.3580000 16.0730000 26.7880000 - 702 702 1 0.0000000 5.3580000 16.0730000 32.1460000 - 703 703 1 0.0000000 5.3580000 21.4310000 5.3580000 - 704 704 1 0.0000000 5.3580000 21.4310000 10.7150000 - 705 705 1 0.0000000 5.3580000 21.4310000 16.0730000 - 706 706 1 0.0000000 5.3580000 21.4310000 21.4310000 - 707 707 1 0.0000000 5.3580000 21.4310000 26.7880000 - 708 708 1 0.0000000 5.3580000 21.4310000 32.1460000 - 709 709 1 0.0000000 5.3580000 26.7880000 5.3580000 - 710 710 1 0.0000000 5.3580000 26.7880000 10.7150000 - 711 711 1 0.0000000 5.3580000 26.7880000 16.0730000 - 712 712 1 0.0000000 5.3580000 26.7880000 21.4310000 - 713 713 1 0.0000000 5.3580000 26.7880000 26.7880000 - 714 714 1 0.0000000 5.3580000 26.7880000 32.1460000 - 715 715 1 0.0000000 5.3580000 32.1460000 5.3580000 - 716 716 1 0.0000000 5.3580000 32.1460000 10.7150000 - 717 717 1 0.0000000 5.3580000 32.1460000 16.0730000 - 718 718 1 0.0000000 5.3580000 32.1460000 21.4310000 - 719 719 1 0.0000000 5.3580000 32.1460000 26.7880000 - 720 720 1 0.0000000 5.3580000 32.1460000 32.1460000 - 721 721 1 0.0000000 10.7150000 5.3580000 5.3580000 - 722 722 1 0.0000000 10.7150000 5.3580000 10.7150000 - 723 723 1 0.0000000 10.7150000 5.3580000 16.0730000 - 724 724 1 0.0000000 10.7150000 5.3580000 21.4310000 - 725 725 1 0.0000000 10.7150000 5.3580000 26.7880000 - 726 726 1 0.0000000 10.7150000 5.3580000 32.1460000 - 727 727 1 0.0000000 10.7150000 10.7150000 5.3580000 - 728 728 1 0.0000000 10.7150000 10.7150000 10.7150000 - 729 729 1 0.0000000 10.7150000 10.7150000 16.0730000 - 730 730 1 0.0000000 10.7150000 10.7150000 21.4310000 - 731 731 1 0.0000000 10.7150000 10.7150000 26.7880000 - 732 732 1 0.0000000 10.7150000 10.7150000 32.1460000 - 733 733 1 0.0000000 10.7150000 16.0730000 5.3580000 - 734 734 1 0.0000000 10.7150000 16.0730000 10.7150000 - 735 735 1 0.0000000 10.7150000 16.0730000 16.0730000 - 736 736 1 0.0000000 10.7150000 16.0730000 21.4310000 - 737 737 1 0.0000000 10.7150000 16.0730000 26.7880000 - 738 738 1 0.0000000 10.7150000 16.0730000 32.1460000 - 739 739 1 0.0000000 10.7150000 21.4310000 5.3580000 - 740 740 1 0.0000000 10.7150000 21.4310000 10.7150000 - 741 741 1 0.0000000 10.7150000 21.4310000 16.0730000 - 742 742 1 0.0000000 10.7150000 21.4310000 21.4310000 - 743 743 1 0.0000000 10.7150000 21.4310000 26.7880000 - 744 744 1 0.0000000 10.7150000 21.4310000 32.1460000 - 745 745 1 0.0000000 10.7150000 26.7880000 5.3580000 - 746 746 1 0.0000000 10.7150000 26.7880000 10.7150000 - 747 747 1 0.0000000 10.7150000 26.7880000 16.0730000 - 748 748 1 0.0000000 10.7150000 26.7880000 21.4310000 - 749 749 1 0.0000000 10.7150000 26.7880000 26.7880000 - 750 750 1 0.0000000 10.7150000 26.7880000 32.1460000 - 751 751 1 0.0000000 10.7150000 32.1460000 5.3580000 - 752 752 1 0.0000000 10.7150000 32.1460000 10.7150000 - 753 753 1 0.0000000 10.7150000 32.1460000 16.0730000 - 754 754 1 0.0000000 10.7150000 32.1460000 21.4310000 - 755 755 1 0.0000000 10.7150000 32.1460000 26.7880000 - 756 756 1 0.0000000 10.7150000 32.1460000 32.1460000 - 757 757 1 0.0000000 16.0730000 5.3580000 5.3580000 - 758 758 1 0.0000000 16.0730000 5.3580000 10.7150000 - 759 759 1 0.0000000 16.0730000 5.3580000 16.0730000 - 760 760 1 0.0000000 16.0730000 5.3580000 21.4310000 - 761 761 1 0.0000000 16.0730000 5.3580000 26.7880000 - 762 762 1 0.0000000 16.0730000 5.3580000 32.1460000 - 763 763 1 0.0000000 16.0730000 10.7150000 5.3580000 - 764 764 1 0.0000000 16.0730000 10.7150000 10.7150000 - 765 765 1 0.0000000 16.0730000 10.7150000 16.0730000 - 766 766 1 0.0000000 16.0730000 10.7150000 21.4310000 - 767 767 1 0.0000000 16.0730000 10.7150000 26.7880000 - 768 768 1 0.0000000 16.0730000 10.7150000 32.1460000 - 769 769 1 0.0000000 16.0730000 16.0730000 5.3580000 - 770 770 1 0.0000000 16.0730000 16.0730000 10.7150000 - 771 771 1 0.0000000 16.0730000 16.0730000 16.0730000 - 772 772 1 0.0000000 16.0730000 16.0730000 21.4310000 - 773 773 1 0.0000000 16.0730000 16.0730000 26.7880000 - 774 774 1 0.0000000 16.0730000 16.0730000 32.1460000 - 775 775 1 0.0000000 16.0730000 21.4310000 5.3580000 - 776 776 1 0.0000000 16.0730000 21.4310000 10.7150000 - 777 777 1 0.0000000 16.0730000 21.4310000 16.0730000 - 778 778 1 0.0000000 16.0730000 21.4310000 21.4310000 - 779 779 1 0.0000000 16.0730000 21.4310000 26.7880000 - 780 780 1 0.0000000 16.0730000 21.4310000 32.1460000 - 781 781 1 0.0000000 16.0730000 26.7880000 5.3580000 - 782 782 1 0.0000000 16.0730000 26.7880000 10.7150000 - 783 783 1 0.0000000 16.0730000 26.7880000 16.0730000 - 784 784 1 0.0000000 16.0730000 26.7880000 21.4310000 - 785 785 1 0.0000000 16.0730000 26.7880000 26.7880000 - 786 786 1 0.0000000 16.0730000 26.7880000 32.1460000 - 787 787 1 0.0000000 16.0730000 32.1460000 5.3580000 - 788 788 1 0.0000000 16.0730000 32.1460000 10.7150000 - 789 789 1 0.0000000 16.0730000 32.1460000 16.0730000 - 790 790 1 0.0000000 16.0730000 32.1460000 21.4310000 - 791 791 1 0.0000000 16.0730000 32.1460000 26.7880000 - 792 792 1 0.0000000 16.0730000 32.1460000 32.1460000 - 793 793 1 0.0000000 21.4310000 5.3580000 5.3580000 - 794 794 1 0.0000000 21.4310000 5.3580000 10.7150000 - 795 795 1 0.0000000 21.4310000 5.3580000 16.0730000 - 796 796 1 0.0000000 21.4310000 5.3580000 21.4310000 - 797 797 1 0.0000000 21.4310000 5.3580000 26.7880000 - 798 798 1 0.0000000 21.4310000 5.3580000 32.1460000 - 799 799 1 0.0000000 21.4310000 10.7150000 5.3580000 - 800 800 1 0.0000000 21.4310000 10.7150000 10.7150000 - 801 801 1 0.0000000 21.4310000 10.7150000 16.0730000 - 802 802 1 0.0000000 21.4310000 10.7150000 21.4310000 - 803 803 1 0.0000000 21.4310000 10.7150000 26.7880000 - 804 804 1 0.0000000 21.4310000 10.7150000 32.1460000 - 805 805 1 0.0000000 21.4310000 16.0730000 5.3580000 - 806 806 1 0.0000000 21.4310000 16.0730000 10.7150000 - 807 807 1 0.0000000 21.4310000 16.0730000 16.0730000 - 808 808 1 0.0000000 21.4310000 16.0730000 21.4310000 - 809 809 1 0.0000000 21.4310000 16.0730000 26.7880000 - 810 810 1 0.0000000 21.4310000 16.0730000 32.1460000 - 811 811 1 0.0000000 21.4310000 21.4310000 5.3580000 - 812 812 1 0.0000000 21.4310000 21.4310000 10.7150000 - 813 813 1 0.0000000 21.4310000 21.4310000 16.0730000 - 814 814 1 0.0000000 21.4310000 21.4310000 21.4310000 - 815 815 1 0.0000000 21.4310000 21.4310000 26.7880000 - 816 816 1 0.0000000 21.4310000 21.4310000 32.1460000 - 817 817 1 0.0000000 21.4310000 26.7880000 5.3580000 - 818 818 1 0.0000000 21.4310000 26.7880000 10.7150000 - 819 819 1 0.0000000 21.4310000 26.7880000 16.0730000 - 820 820 1 0.0000000 21.4310000 26.7880000 21.4310000 - 821 821 1 0.0000000 21.4310000 26.7880000 26.7880000 - 822 822 1 0.0000000 21.4310000 26.7880000 32.1460000 - 823 823 1 0.0000000 21.4310000 32.1460000 5.3580000 - 824 824 1 0.0000000 21.4310000 32.1460000 10.7150000 - 825 825 1 0.0000000 21.4310000 32.1460000 16.0730000 - 826 826 1 0.0000000 21.4310000 32.1460000 21.4310000 - 827 827 1 0.0000000 21.4310000 32.1460000 26.7880000 - 828 828 1 0.0000000 21.4310000 32.1460000 32.1460000 - 829 829 1 0.0000000 26.7880000 5.3580000 5.3580000 - 830 830 1 0.0000000 26.7880000 5.3580000 10.7150000 - 831 831 1 0.0000000 26.7880000 5.3580000 16.0730000 - 832 832 1 0.0000000 26.7880000 5.3580000 21.4310000 - 833 833 1 0.0000000 26.7880000 5.3580000 26.7880000 - 834 834 1 0.0000000 26.7880000 5.3580000 32.1460000 - 835 835 1 0.0000000 26.7880000 10.7150000 5.3580000 - 836 836 1 0.0000000 26.7880000 10.7150000 10.7150000 - 837 837 1 0.0000000 26.7880000 10.7150000 16.0730000 - 838 838 1 0.0000000 26.7880000 10.7150000 21.4310000 - 839 839 1 0.0000000 26.7880000 10.7150000 26.7880000 - 840 840 1 0.0000000 26.7880000 10.7150000 32.1460000 - 841 841 1 0.0000000 26.7880000 16.0730000 5.3580000 - 842 842 1 0.0000000 26.7880000 16.0730000 10.7150000 - 843 843 1 0.0000000 26.7880000 16.0730000 16.0730000 - 844 844 1 0.0000000 26.7880000 16.0730000 21.4310000 - 845 845 1 0.0000000 26.7880000 16.0730000 26.7880000 - 846 846 1 0.0000000 26.7880000 16.0730000 32.1460000 - 847 847 1 0.0000000 26.7880000 21.4310000 5.3580000 - 848 848 1 0.0000000 26.7880000 21.4310000 10.7150000 - 849 849 1 0.0000000 26.7880000 21.4310000 16.0730000 - 850 850 1 0.0000000 26.7880000 21.4310000 21.4310000 - 851 851 1 0.0000000 26.7880000 21.4310000 26.7880000 - 852 852 1 0.0000000 26.7880000 21.4310000 32.1460000 - 853 853 1 0.0000000 26.7880000 26.7880000 5.3580000 - 854 854 1 0.0000000 26.7880000 26.7880000 10.7150000 - 855 855 1 0.0000000 26.7880000 26.7880000 16.0730000 - 856 856 1 0.0000000 26.7880000 26.7880000 21.4310000 - 857 857 1 0.0000000 26.7880000 26.7880000 26.7880000 - 858 858 1 0.0000000 26.7880000 26.7880000 32.1460000 - 859 859 1 0.0000000 26.7880000 32.1460000 5.3580000 - 860 860 1 0.0000000 26.7880000 32.1460000 10.7150000 - 861 861 1 0.0000000 26.7880000 32.1460000 16.0730000 - 862 862 1 0.0000000 26.7880000 32.1460000 21.4310000 - 863 863 1 0.0000000 26.7880000 32.1460000 26.7880000 - 864 864 1 0.0000000 26.7880000 32.1460000 32.1460000 - diff --git a/examples/python/gjf_python/ff-argon.lmp b/examples/python/gjf_python/ff-argon.lmp deleted file mode 100644 index b6f7bc931a..0000000000 --- a/examples/python/gjf_python/ff-argon.lmp +++ /dev/null @@ -1,20 +0,0 @@ -############################# -#Atoms types - mass - charge# -############################# -#@ 1 atom types #!THIS LINE IS NECESSARY DON'T SPEND HOURS FINDING THAT OUT!# - -variable Ar equal 1 - -############# -#Atom Masses# -############# - -mass ${Ar} 39.903 - -########################### -#Pair Potentials - Tersoff# -########################### - -pair_style lj/cubic -pair_coeff * * 0.0102701 3.42 - diff --git a/examples/python/gjf_python/gjf.py b/examples/python/gjf_python/gjf.py deleted file mode 100644 index 37fc28bb79..0000000000 --- a/examples/python/gjf_python/gjf.py +++ /dev/null @@ -1,180 +0,0 @@ -"""Made by Charlie Sievers Ph.D. Candidate, UC Davis, Donadio Lab 2019""" - -from mpi4py import MPI -from lammps import lammps -import lammps_tools as lt -import numpy as np - -comm = MPI.COMM_WORLD -rank = comm.Get_rank() - -""" LAMMPS VARIABLES """ - -# new file or restart -run_no = 0 - -# data files -infile = "argon.lmp" -restart_file = "final_restart.{}".format(run_no) -ff_file = "ff-argon.lmp" -outfile = "output.dat" - -# write final_restart -write_final_restart = False - -# random numbers -seed0 = 2357 -seed1 = 26588 -seed2 = 10669 - -# MD Parameters -# number of steps -nsteps = 50000 -# timestep -# dt = 0.001 -# starting simulation temp -temp_start = 10 -# final simulation temp -temp_final = 10 -# relaxation time -trel = 1 -# trajectory frequency -ntraj = 0 - -# Ensemble 0 = GJF u, 1 = GJF v, 2 = Nose-Hoover, 3 = Langevin, 4 = BDP (Currently all NVT) -ensemble = 0 - -# Output Parameters -nthermo = 200 -nout = int(nsteps / nthermo) # Important - -# output to screen and log file? -lammps_output = False -# Lammps Thermo -thermo = False - -python_output = True - -# Write output to file? -write_output = False - -if write_output is True: - data = open("{}".format(outfile), "w") - -if python_output is True: - if rank == 0: - print("dt, temp, ke, fke, pe, fpe") - -for j in range(20): - - # timestep - dt = 0.005*(j+1) - - if lammps_output is True: - lmp = lammps() - else: - lmp = lammps(cmdargs=["-screen", "none", "-log", "none"]) - - lmp.command("atom_style full") - lmp.command("units metal") - lmp.command("processors * * *") - lmp.command("neighbor 1 bin") - lmp.command("boundary p p p") - - if run_no is 0: - lmp.command("read_data {}".format(infile)) - else: - lmp.command("read_restart final_restart".format(run_no-1)) - - if thermo is True: - lmp.command("thermo_style custom time temp pe ke press vol cpu") - lmp.command("thermo {}".format(nthermo)) - lmp.command("thermo_modify flush yes") - - lmp.file("{}".format(ff_file)) - lmp.command("timestep {}".format(dt)) - - # get_per_atom_compute example with dim of two and within a group - # lmp.command("region rand block 5 20 5 20 5 20") - # lmp.command("group rand region rand") - # lmp.command("compute x rand property/atom x y") - # test = get_per_atom_compute(comm, lmp, "x", 2, group="rand") - - lmp.command("compute ke all ke/atom") - - lmp.command("compute pe all pe") - - if ntraj != 0: - lmp.command("dump 1 all dcd {} trajectory.dcd".format(ntraj)) - lmp.command("dump_modify 1 unwrap yes") - - if run_no == 0: - lmp.command("velocity all create {} {} mom yes dist gaussian".format(temp_start, seed0)) - lmp.command("fix nve all nve") - - if ensemble == 0: - # gjf u - lmp.command("fix lang all langevin {} {} {} {} gjf yes halfstep yes".format( - temp_start, temp_final, trel, seed1)) - elif ensemble == 1: - # gjf v - lmp.command("fix lang all langevin {} {} {} {} gjf yes".format( - temp_start, temp_final, trel, seed1)) - elif ensemble == 2: - # NH - lmp.command("fix nvt all nvt temp {} {} {}".format( - temp_start, temp_final, trel)) - elif ensemble == 3: - # lang - lmp.command("fix lang all langevin {} {} {} {} tally yes zero yes".format( - temp_start, temp_final, trel, seed1)) - elif ensemble == 4: - # BDP - lmp.command("fix stoch all temp/csvr {} {} {} {}".format( - temp_start, temp_final, trel, seed1)) - - natoms = lmp.extract_global("natoms", 0) - nlocal = lmp.extract_global("nlocal", 0) - ke_sum = lt.get_per_atom_compute(comm, lmp, "ke") - ke_2 = ke_sum**2 - pe_sum = 0 - pe_2 = 0 - temp_sum = 0 - - for i in range(nout): - nlocal = lmp.extract_global("nlocal", 0) - lmp.command("run {} pre no post no".format(nthermo)) - temp = lmp.extract_compute("thermo_temp", 0, 0) - ke = lt.get_per_atom_compute(comm, lmp, "ke") - pe = lmp.extract_compute("pe", 0, 0) - ke_sum += ke - ke_2 += ke**2 - pe_sum += pe - pe_2 += pe**2 - temp_sum += temp - - if python_output is True: - if rank == 0: - print("Time: {:.6f}, Temp: {:.6f}, KE: {:.6f}, PE: {:.6f}".format( - i*nthermo*dt, temp, ke.sum(), pe)) - - if write_final_restart is True: - lmp.command("write_restart {}".format(restart_file)) - - if rank == 0: - ke = ke_sum.sum() / (nout + 1) - fke = (np.sqrt((ke_2 - ke_sum ** 2 / (nout + 1)) / (nout + 1))).sum() - pe = pe_sum / nout - fpe = np.sqrt((pe_2 - pe_sum ** 2 / nout) / nout) - temp = temp_sum / nout - - if python_output is True: - print(dt, temp, ke, fke, pe, fpe) - - if write_output is True: - data.write("{:.6f} {:.6f} {:.6f} {:.6f} {:.6f} {:.6f}\n".format( - dt, temp, ke, fke, pe, fpe)) - data.flush() - -if write_output is True: - data.close() diff --git a/examples/python/gjf_python/lammps_tools.py b/examples/python/gjf_python/lammps_tools.py deleted file mode 100644 index f9f25eaa28..0000000000 --- a/examples/python/gjf_python/lammps_tools.py +++ /dev/null @@ -1,78 +0,0 @@ -"""Made by Charlie Sievers Ph.D. Candidate, UC Davis, Donadio Lab 2019""" - -from mpi4py import MPI -import numpy as np -import ctypes as ctypes - -""" USEFULL LAMMPS FUNCTION """ - - -def get_nlocal(lmp): - - nlocal = lmp.extract_global("nlocal", 0) - - return nlocal - - -def get_aid(lmp, group=None): - - if group is None: - c_aid = lmp.extract_atom("id", 0) - ptr = ctypes.cast(c_aid, ctypes.POINTER(ctypes.c_int32 * get_nlocal(lmp))) - aid = np.frombuffer(ptr.contents, dtype=np.int32) - else: - try: - c_aid = lmp.extract_variable("aid", group, 1) - ptr = ctypes.cast(c_aid, ctypes.POINTER(ctypes.c_double * get_nlocal(lmp))) - aid = np.frombuffer(ptr.contents, dtype=np.double) - except ValueError: - lmp.command("variable aid atom id") - aid = get_aid(lmp, group) - - return aid - - -def get_per_atom_compute(comm, lmp, name, dim=1, dtype="double", group=None): - laid = get_aid(lmp, group) - nlocal = get_nlocal(lmp) - ngroup = comm.allgather(laid) - type = dim - if dim > 1: - type = 2 - for array in ngroup: - try: - aid = np.concatenate((aid, array)) - except UnboundLocalError: - aid = array - if dtype == "double": - mem_type = ctypes.c_double - elif dtype == "integer": - mem_type = ctypes.c_int - elif dtype == "bigint": - mem_type = ctypes.c_int32 - else: - print("{} not implemented".format(dtype)) - return - - tmp = lmp.extract_compute(name, 1, type) - if type == 1: - ptr = ctypes.cast(tmp, ctypes.POINTER(mem_type * nlocal)) - else: - ptr = ctypes.cast(tmp[0], ctypes.POINTER(mem_type * nlocal * dim)) - lcompute = comm.allgather(np.frombuffer(ptr.contents).reshape((-1, dim))) - for array in lcompute: - try: - compute = np.concatenate((compute, array)) - except UnboundLocalError: - compute = array - - aid = np.expand_dims(aid, axis=1) - - compute = np.concatenate((aid, compute), axis=-1) - compute = compute[compute[..., 0] != 0] - compute = compute[compute[..., 0].argsort()][..., 1:] - - if dim == 1: - compute = np.squeeze(compute, axis=-1) - - return compute \ No newline at end of file diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index ea0929a236..36671ba6a4 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -18,11 +18,10 @@ Niels Gronbech-Jensen (UC Davis) GJF-2GJ Formulation ------------------------------------------------------------------------- */ +#include "fix_langevin.h" #include #include #include -#include -#include "fix_langevin.h" #include "math_extra.h" #include "atom.h" #include "atom_vec_ellipsoid.h" @@ -30,8 +29,6 @@ #include "update.h" #include "modify.h" #include "compute.h" -#include "domain.h" -#include "region.h" #include "respa.h" #include "comm.h" #include "input.h" @@ -55,7 +52,8 @@ enum{CONSTANT,EQUAL,ATOM}; FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), gjfflag(0), gfactor1(NULL), gfactor2(NULL), ratio(NULL), tstr(NULL), - flangevin(NULL), tforce(NULL), franprev(NULL), id_temp(NULL), random(NULL) + flangevin(NULL), tforce(NULL), franprev(NULL), id_temp(NULL), random(NULL), + lv(NULL), wildcard(NULL), bias(NULL) { if (narg < 7) error->all(FLERR,"Illegal fix langevin command"); @@ -112,7 +110,10 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : } else if (strcmp(arg[iarg],"gjf") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command"); if (strcmp(arg[iarg+1],"no") == 0) gjfflag = 0; - else if (strcmp(arg[iarg+1],"yes") == 0) gjfflag = 1; + else if (strcmp(arg[iarg+1],"yes") == 0) + error->all(FLERR,"GJF yes keyword is deprecated.\nPlease use vhalf or vfull."); + else if (strcmp(arg[iarg+1],"vfull") == 0) {gjfflag = 1; hsflag = 0;} + else if (strcmp(arg[iarg+1],"vhalf") == 0) {gjfflag = 1; hsflag = 1;} else error->all(FLERR,"Illegal fix langevin command"); iarg += 2; } else if (strcmp(arg[iarg],"omega") == 0) { @@ -141,14 +142,6 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : else if (strcmp(arg[iarg+1],"yes") == 0) zeroflag = 1; else error->all(FLERR,"Illegal fix langevin command"); iarg += 2; - } else if (strcmp(arg[iarg],"halfstep") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command"); - if (gjfflag == 0) error->all(FLERR,"GJF must be set"); - if (tallyflag == 0) error->warning(FLERR,"Careful, tally is untested"); - if (strcmp(arg[iarg+1],"no") == 0) hsflag = 0; - else if (strcmp(arg[iarg+1],"yes") == 0) hsflag = 1; - else error->all(FLERR,"Illegal fix langevin command"); - iarg += 2; } else error->all(FLERR,"Illegal fix langevin command"); } @@ -168,6 +161,7 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : franprev = NULL; wildcard = NULL; lv = NULL; + bias = NULL; tforce = NULL; maxatom1 = maxatom2 = 0; @@ -218,6 +212,7 @@ FixLangevin::~FixLangevin() memory->destroy(franprev); memory->destroy(wildcard); if (hsflag) memory->destroy(lv); + if (temperature && temperature->tempbias) memory->destroy(bias); atom->delete_callback(id,0); } } @@ -300,6 +295,9 @@ void FixLangevin::init() if (strstr(update->integrate_style,"respa")) nlevels_respa = ((Respa *) update->integrate)->nlevels; + if (strstr(update->integrate_style,"respa")) + error->one(FLERR,"Fix langevin gjf not implemented with respa capabilities"); + if (gjfflag) gjffac = 1.0/sqrt(1.0+update->dt/2.0/t_period); } @@ -331,6 +329,11 @@ void FixLangevin::setup(int vflag) wildcard[i][0] = v[i][0]; wildcard[i][1] = v[i][1]; wildcard[i][2] = v[i][2]; + if (tbiasflag == BIAS) { + bias[i][0] = 0.0; + bias[i][1] = 0.0; + bias[i][2] = 0.0; + } } } } @@ -357,34 +360,95 @@ void FixLangevin::post_integrate() int nlocal = atom->nlocal; if (igroup == atom->firstgroup) nlocal = atom->nfirst; + if (tbiasflag == BIAS) { + double b[3] = {0.0, 0.0, 0.0}; + for (int i = 0; i < nlocal; i++) { + bias[i][0] = v[i][0]; + bias[i][1] = v[i][1]; + bias[i][2] = v[i][2]; + v[i][0] = wildcard[i][0]; + v[i][1] = wildcard[i][1]; + v[i][2] = wildcard[i][2]; + } + temperature->compute_scalar(); + for (int i = 0; i < nlocal; i++) { + temperature->remove_bias(i, v[i]); + wildcard[i][0] = v[i][0]; + wildcard[i][1] = v[i][1]; + wildcard[i][2] = v[i][2]; + if (wildcard[i][0] == 0.0) franprev[i][0] = 0.0; + if (wildcard[i][1] == 0.0) franprev[i][1] = 0.0; + if (wildcard[i][2] == 0.0) franprev[i][2] = 0.0; + temperature->restore_bias(i, v[i]); + b[0] = v[i][0] - wildcard[i][0]; + b[1] = v[i][1] - wildcard[i][1]; + b[2] = v[i][2] - wildcard[i][2]; + v[i][0] = bias[i][0]; + v[i][1] = bias[i][1]; + v[i][2] = bias[i][2]; + bias[i][0] = b[0]; + bias[i][1] = b[1]; + bias[i][2] = b[2]; + } + } if (rmass) { for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { dtfm = dtf / rmass[i]; - x[i][0] += -dt * v[i][0]; - x[i][1] += -dt * v[i][1]; - x[i][2] += -dt * v[i][2]; + x[i][0] -= dt * v[i][0]; + x[i][1] -= dt * v[i][1]; + x[i][2] -= dt * v[i][2]; v[i][0] = gjffac * (wildcard[i][0] + dtfm * franprev[i][0] + dtfm * f[i][0]); v[i][1] = gjffac * (wildcard[i][1] + dtfm * franprev[i][1] + dtfm * f[i][1]); v[i][2] = gjffac * (wildcard[i][2] + dtfm * franprev[i][2] + dtfm * f[i][2]); + if (tbiasflag == BIAS) + for (int j = 0; j < 3; j++) { + if (wildcard[i][j] == 0) { + v[i][j] /= gjffac; + } + v[i][j] += bias[i][j]; + if (wildcard[i][j] == 0){ + v[i][j] /= gjffac; + } + } x[i][0] += gjffac * dt * v[i][0]; x[i][1] += gjffac * dt * v[i][1]; x[i][2] += gjffac * dt * v[i][2]; + if (tbiasflag == BIAS) + for (int j = 0; j < 3; j++) { + if (wildcard[i][j] == 0) + v[i][j] *= gjffac; + } } } else { for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { dtfm = dtf / mass[type[i]]; - x[i][0] += -dt * v[i][0]; - x[i][1] += -dt * v[i][1]; - x[i][2] += -dt * v[i][2]; + x[i][0] -= dt * v[i][0]; + x[i][1] -= dt * v[i][1]; + x[i][2] -= dt * v[i][2]; v[i][0] = gjffac * (wildcard[i][0] + dtfm * franprev[i][0] + dtfm * f[i][0]); v[i][1] = gjffac * (wildcard[i][1] + dtfm * franprev[i][1] + dtfm * f[i][1]); v[i][2] = gjffac * (wildcard[i][2] + dtfm * franprev[i][2] + dtfm * f[i][2]); + if (tbiasflag == BIAS) + for (int j = 0; j < 3; j++) { + if (wildcard[i][j] == 0) { + v[i][j] /= gjffac; + } + v[i][j] += bias[i][j]; + if (wildcard[i][j] == 0){ + v[i][j] /= gjffac; + } + } x[i][0] += gjffac * dt * v[i][0]; x[i][1] += gjffac * dt * v[i][1]; x[i][2] += gjffac * dt * v[i][2]; + if (tbiasflag == BIAS) + for (int j = 0; j < 3; j++) { + if (wildcard[i][j] == 0) + v[i][j] *= gjffac; + } } } } @@ -657,9 +721,17 @@ void FixLangevin::post_force_templated() if (Tp_TALLY) { if (Tp_GJF && update->ntimestep != update->beginstep){ - fdrag[0] = gamma1*gjffac*gjffac*v[i][0]; - fdrag[1] = gamma1*gjffac*gjffac*v[i][1]; - fdrag[2] = gamma1*gjffac*gjffac*v[i][2]; + if (Tp_BIAS) { + temperature->remove_bias(i,v[i]); + fdrag[0] = gamma1*gjffac*gjffac*v[i][0]; + fdrag[1] = gamma1*gjffac*gjffac*v[i][1]; + fdrag[2] = gamma1*gjffac*gjffac*v[i][2]; + temperature->restore_bias(i,v[i]); + } else { + fdrag[0] = gamma1*gjffac*gjffac*v[i][0]; + fdrag[1] = gamma1*gjffac*gjffac*v[i][1]; + fdrag[2] = gamma1*gjffac*gjffac*v[i][2]; + } fran[0] *= gjffac; fran[1] *= gjffac; fran[2] *= gjffac; @@ -894,8 +966,9 @@ void FixLangevin::end_of_step() v[i][2] = lv[i][2]; } } - energy_onestep += flangevin[i][0] * v[i][0] + flangevin[i][1] * v[i][1] + - flangevin[i][2] * v[i][2]; + if (tallyflag) + energy_onestep += flangevin[i][0] * v[i][0] + flangevin[i][1] * v[i][1] + + flangevin[i][2] * v[i][2]; } if (tallyflag) { energy += energy_onestep * update->dt; @@ -953,7 +1026,7 @@ int FixLangevin::modify_param(int narg, char **arg) double FixLangevin::compute_scalar() { - if (!tallyflag || !flangevin_allocated) return 0.0; + if (!tallyflag && !flangevin_allocated) return 0.0; // capture the very first energy transfer to thermal reservoir @@ -1004,6 +1077,7 @@ double FixLangevin::memory_usage() double bytes = 0.0; if (gjfflag) bytes += atom->nmax*3*2 * sizeof(double); if (gjfflag) if (hsflag) bytes += atom->nmax*3 * sizeof(double); + if (gjfflag && tbiasflag == BIAS) bytes += atom->nmax*3 * sizeof(double); if (tallyflag) bytes += atom->nmax*3 * sizeof(double); if (tforce) bytes += atom->nmax * sizeof(double); return bytes; @@ -1018,6 +1092,7 @@ void FixLangevin::grow_arrays(int nmax) memory->grow(franprev,nmax,3,"fix_langevin:franprev"); memory->grow(wildcard,nmax,3,"fix_langevin:wildcard"); if (hsflag) memory->grow(lv,nmax,3,"fix_langevin:lv"); + if (tbiasflag == BIAS) memory->grow(bias,nmax,3,"fix_langevin:bias"); } /* ---------------------------------------------------------------------- @@ -1037,6 +1112,11 @@ void FixLangevin::copy_arrays(int i, int j, int /*delflag*/) lv[j][1] = lv[i][1]; lv[j][2] = lv[i][2]; } + if (tbiasflag == BIAS){ + bias[j][0] = bias[i][0]; + bias[j][1] = bias[i][1]; + bias[j][2] = bias[i][2]; + } } /* ---------------------------------------------------------------------- @@ -1057,6 +1137,11 @@ int FixLangevin::pack_exchange(int i, double *buf) buf[n++] = lv[i][1]; buf[n++] = lv[i][2]; } + if (tbiasflag == BIAS){ + buf[n++] = bias[i][0]; + buf[n++] = bias[i][1]; + buf[n++] = bias[i][2]; + } return n; } @@ -1078,5 +1163,10 @@ int FixLangevin::unpack_exchange(int nlocal, double *buf) lv[nlocal][1] = buf[n++]; lv[nlocal][2] = buf[n++]; } + if (tbiasflag == BIAS){ + bias[nlocal][0] = buf[n++]; + bias[nlocal][1] = buf[n++]; + bias[nlocal][2] = buf[n++]; + } return n; } diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 888734de04..1f9954153f 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -67,6 +67,7 @@ class FixLangevin : public Fix { double **franprev; double **lv; //2GJ velocity or half-step velocity double **wildcard; + double **bias; int nvalues; From 39050265c279ac662e5921ebb1afaa9ab26faeea Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Sun, 11 Aug 2019 20:23:57 -0700 Subject: [PATCH 081/237] Added gjf zero flag functionality and tbias functionality --- src/fix_langevin.cpp | 160 ++++++++++++++++++++++++++----------------- src/fix_langevin.h | 1 + 2 files changed, 99 insertions(+), 62 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 36671ba6a4..3dedce1b18 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -239,6 +239,8 @@ void FixLangevin::init() if (ascale && !atom->ellipsoid_flag) error->all(FLERR,"Fix langevin angmom requires atom style ellipsoid"); + if (gjfflag && zeroflag && tallyflag) + error->warning(FLERR,"Fix langevin gjf zero and tally were all set"); // check variable if (tstr) { @@ -315,24 +317,29 @@ void FixLangevin::setup(int vflag) } if (gjfflag) { - // update v of atoms in group double ** v = atom->v; double **f = atom->f; int nlocal = atom->nlocal; if (igroup == atom->firstgroup) nlocal = atom->nfirst; + double b[3] = {0.0,0.0,0.0}; for (int i = 0; i < nlocal; i++) { f[i][0] = wildcard[i][0]; f[i][1] = wildcard[i][1]; f[i][2] = wildcard[i][2]; + b[0] = v[i][0]; + b[1] = v[i][1]; + b[2] = v[i][2]; + if (tbiasflag == BIAS) temperature->remove_bias(i,v[i]); wildcard[i][0] = v[i][0]; wildcard[i][1] = v[i][1]; wildcard[i][2] = v[i][2]; if (tbiasflag == BIAS) { - bias[i][0] = 0.0; - bias[i][1] = 0.0; - bias[i][2] = 0.0; + temperature->restore_bias(i,v[i]); + bias[i][0] = b[0] - wildcard[i][0]; + bias[i][1] = b[1] - wildcard[i][1]; + bias[i][2] = b[2] - wildcard[i][2]; } } } @@ -360,37 +367,17 @@ void FixLangevin::post_integrate() int nlocal = atom->nlocal; if (igroup == atom->firstgroup) nlocal = atom->nfirst; - if (tbiasflag == BIAS) { - double b[3] = {0.0, 0.0, 0.0}; - for (int i = 0; i < nlocal; i++) { - bias[i][0] = v[i][0]; - bias[i][1] = v[i][1]; - bias[i][2] = v[i][2]; - v[i][0] = wildcard[i][0]; - v[i][1] = wildcard[i][1]; - v[i][2] = wildcard[i][2]; - } - temperature->compute_scalar(); - for (int i = 0; i < nlocal; i++) { - temperature->remove_bias(i, v[i]); - wildcard[i][0] = v[i][0]; - wildcard[i][1] = v[i][1]; - wildcard[i][2] = v[i][2]; - if (wildcard[i][0] == 0.0) franprev[i][0] = 0.0; - if (wildcard[i][1] == 0.0) franprev[i][1] = 0.0; - if (wildcard[i][2] == 0.0) franprev[i][2] = 0.0; - temperature->restore_bias(i, v[i]); - b[0] = v[i][0] - wildcard[i][0]; - b[1] = v[i][1] - wildcard[i][1]; - b[2] = v[i][2] - wildcard[i][2]; - v[i][0] = bias[i][0]; - v[i][1] = bias[i][1]; - v[i][2] = bias[i][2]; - bias[i][0] = b[0]; - bias[i][1] = b[1]; - bias[i][2] = b[2]; - } + // zero option + double vsum[3],vsumall[3]; + bigint count; + + if (zeroflag) { + vsum[0] = vsum[1] = vsum[2] = 0.0; + count = group->count(igroup); + if (count == 0) + error->all(FLERR,"Cannot zero Langevin force of 0 atoms"); } + if (rmass) { for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { @@ -404,11 +391,7 @@ void FixLangevin::post_integrate() if (tbiasflag == BIAS) for (int j = 0; j < 3; j++) { if (wildcard[i][j] == 0) { - v[i][j] /= gjffac; - } - v[i][j] += bias[i][j]; - if (wildcard[i][j] == 0){ - v[i][j] /= gjffac; + v[i][j] /= gjffac * gjffac; } } x[i][0] += gjffac * dt * v[i][0]; @@ -418,6 +401,8 @@ void FixLangevin::post_integrate() for (int j = 0; j < 3; j++) { if (wildcard[i][j] == 0) v[i][j] *= gjffac; + v[i][j] += bias[i][j]; + x[i][j] += dt * bias[i][j]; } } @@ -434,11 +419,7 @@ void FixLangevin::post_integrate() if (tbiasflag == BIAS) for (int j = 0; j < 3; j++) { if (wildcard[i][j] == 0) { - v[i][j] /= gjffac; - } - v[i][j] += bias[i][j]; - if (wildcard[i][j] == 0){ - v[i][j] /= gjffac; + v[i][j] /= gjffac*gjffac; } } x[i][0] += gjffac * dt * v[i][0]; @@ -446,11 +427,32 @@ void FixLangevin::post_integrate() x[i][2] += gjffac * dt * v[i][2]; if (tbiasflag == BIAS) for (int j = 0; j < 3; j++) { - if (wildcard[i][j] == 0) - v[i][j] *= gjffac; + if (wildcard[i][j] == 0) + v[i][j] *= gjffac; + v[i][j] += bias[i][j]; + x[i][j] += dt * bias[i][j]; } + if (zeroflag){ + vsum[0] += gjffac * dtfm * franprev[i][0]; + vsum[1] += gjffac * dtfm * franprev[i][1]; + vsum[2] += gjffac * dtfm * franprev[i][2]; + } } } + + if (zeroflag) { + MPI_Allreduce(vsum,vsumall,3,MPI_DOUBLE,MPI_SUM,world); + vsumall[0] /= count; + vsumall[1] /= count; + vsumall[2] /= count; + for (int i = 0; i < nlocal; i++) { + if (mask[i] & groupbit) { + v[i][0] -= vsumall[0]; + v[i][1] -= vsumall[1]; + v[i][2] -= vsumall[2]; + } + } + } } /* ---------------------------------------------------------------------- */ @@ -664,26 +666,34 @@ void FixLangevin::post_force_templated() flangevin_allocated = 1; } - if (Tp_BIAS) temperature->compute_scalar(); + if (Tp_BIAS && !gjfflag) temperature->compute_scalar(); + else if (Tp_BIAS && update->ntimestep == update->beginstep && gjfflag) temperature->compute_scalar(); for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { if (Tp_TSTYLEATOM) tsqrt = sqrt(tforce[i]); if (Tp_RMASS) { gamma1 = -rmass[i] / t_period / ftm2v; - gamma2 = sqrt(rmass[i]) * sqrt(2.0*boltz/t_period/dt/mvv2e) / ftm2v; - gamma1 *= 1.0/ratio[type[i]]; - gamma2 *= 1.0/sqrt(ratio[type[i]]) * tsqrt; + gamma2 = sqrt(rmass[i]) * sqrt(2.0 * boltz / t_period / dt / mvv2e) / ftm2v; + gamma1 *= 1.0 / ratio[type[i]]; + gamma2 *= 1.0 / sqrt(ratio[type[i]]) * tsqrt; } else { gamma1 = gfactor1[type[i]]; gamma2 = gfactor2[type[i]] * tsqrt; } - fran[0] = gamma2*random->gaussian(); - fran[1] = gamma2*random->gaussian(); - fran[2] = gamma2*random->gaussian(); + if (!gjfflag) { + fran[0] = gamma2 * random->uniform(); + fran[1] = gamma2 * random->uniform(); + fran[2] = gamma2 * random->uniform(); + } else { + fran[0] = gamma2 * random->gaussian(); + fran[1] = gamma2 * random->gaussian(); + fran[2] = gamma2 * random->gaussian(); + } if (Tp_BIAS) { + double b[3] = {0.0,0.0,0.0}; temperature->remove_bias(i,v[i]); fdrag[0] = gamma1*v[i][0]; fdrag[1] = gamma1*v[i][1]; @@ -693,9 +703,9 @@ void FixLangevin::post_force_templated() if (v[i][2] == 0.0) fran[2] = 0.0; temperature->restore_bias(i,v[i]); } else { - fdrag[0] = gamma1*v[i][0]; - fdrag[1] = gamma1*v[i][1]; - fdrag[2] = gamma1*v[i][2]; + fdrag[0] = gamma1*v[i][0];// - gjffac*(dtf / mass[type[i]])*gamma1*franprev[i][0]; + fdrag[1] = gamma1*v[i][1];// - gjffac*(dtf / mass[type[i]])*gamma1*franprev[i][1]; + fdrag[2] = gamma1*v[i][2];// - gjffac*(dtf / mass[type[i]])*gamma1*franprev[i][2]; } if (Tp_GJF) { @@ -706,13 +716,14 @@ void FixLangevin::post_force_templated() rantemp[0] = fran[0]; rantemp[1] = fran[1]; rantemp[2] = fran[2]; + fran[0] = franprev[i][0]; fran[1] = franprev[i][1]; fran[2] = franprev[i][2]; - fdrag[0] *= -2*t_period*(2*gjffac-1/gjffac-1)/dt; - fdrag[1] *= -2*t_period*(2*gjffac-1/gjffac-1)/dt; - fdrag[2] *= -2*t_period*(2*gjffac-1/gjffac-1)/dt; + fdrag[0] *= -2*t_period*((2*gjffac)-(1.0/gjffac)-1.0)/dt; + fdrag[1] *= -2*t_period*((2*gjffac)-(1.0/gjffac)-1.0)/dt; + fdrag[2] *= -2*t_period*((2*gjffac)-(1.0/gjffac)-1.0)/dt; } f[i][0] += fdrag[0] + fran[0]; @@ -747,9 +758,16 @@ void FixLangevin::post_force_templated() } if (Tp_ZERO) { - fsum[0] += fran[0]; - fsum[1] += fran[1]; - fsum[2] += fran[2]; + if (!gjfflag){ + fsum[0] += fran[0]; + fsum[1] += fran[1]; + fsum[2] += fran[2]; + } + else { + fsum[0] += franprev[i][0]; + fsum[1] += franprev[i][1]; + fsum[2] += franprev[i][2]; + } } if (Tp_GJF) @@ -762,6 +780,11 @@ void FixLangevin::post_force_templated() lv[i][0] = v[i][0]; lv[i][1] = v[i][1]; lv[i][2] = v[i][2]; + if (tbiasflag == BIAS) { + lv[i][0] += bias[i][0]; + lv[i][1] += bias[i][1]; + lv[i][2] += bias[i][2]; + } } } } @@ -949,17 +972,30 @@ void FixLangevin::end_of_step() double **f = atom->f; int *mask = atom->mask; int nlocal = atom->nlocal; + double b[3] = {0.0,0.0,0.0}; + + if (gjfflag && tbiasflag == BIAS) temperature->compute_scalar(); energy_onestep = 0.0; for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { if (gjfflag){ + b[0] = v[i][0]; + b[1] = v[i][1]; + b[2] = v[i][2]; f[i][0] = wildcard[i][0]; f[i][1] = wildcard[i][1]; f[i][2] = wildcard[i][2]; + if (tbiasflag == BIAS) temperature->remove_bias(i,v[i]); wildcard[i][0] = v[i][0]; wildcard[i][1] = v[i][1]; wildcard[i][2] = v[i][2]; + if (tbiasflag == BIAS) { + bias[i][0] = b[0] - v[i][0]; + bias[i][1] = b[1] - v[i][1]; + bias[i][2] = b[2] - v[i][2]; + temperature->restore_bias(i, v[i]); + } if (hsflag){ v[i][0] = lv[i][0]; v[i][1] = lv[i][1]; diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 1f9954153f..9cd1ecb66a 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -68,6 +68,7 @@ class FixLangevin : public Fix { double **lv; //2GJ velocity or half-step velocity double **wildcard; double **bias; + double cm[3]; int nvalues; From 8078ac38493eb08d56f9c377c905ce7725ca6f00 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Mon, 12 Aug 2019 15:32:13 -0700 Subject: [PATCH 082/237] cleaned up src files --- src/fix_langevin.cpp | 36 ++++++++++++++++++++++-------------- src/fix_langevin.h | 3 +-- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 3dedce1b18..c2e56881b7 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -240,7 +240,8 @@ void FixLangevin::init() error->all(FLERR,"Fix langevin angmom requires atom style ellipsoid"); if (gjfflag && zeroflag && tallyflag) - error->warning(FLERR,"Fix langevin gjf zero and tally were all set"); + error->warning(FLERR, + "Fix langevin: gjf, zero, and tally were all set correct energy tallying is not guaranteed"); // check variable if (tstr) { @@ -283,9 +284,14 @@ void FixLangevin::init() if (!atom->rmass) { for (int i = 1; i <= atom->ntypes; i++) { gfactor1[i] = -atom->mass[i] / t_period / force->ftm2v; - gfactor2[i] = sqrt(atom->mass[i]) * - sqrt(2.0*force->boltz/t_period/update->dt/force->mvv2e) / - force->ftm2v; + if (gjfflag) + gfactor2[i] = sqrt(atom->mass[i]) * + sqrt(2.0*force->boltz/t_period/update->dt/force->mvv2e) / + force->ftm2v; + else + gfactor2[i] = sqrt(atom->mass[i]) * + sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / + force->ftm2v; gfactor1[i] *= 1.0/ratio[i]; gfactor2[i] *= 1.0/sqrt(ratio[i]); } @@ -674,7 +680,10 @@ void FixLangevin::post_force_templated() if (Tp_TSTYLEATOM) tsqrt = sqrt(tforce[i]); if (Tp_RMASS) { gamma1 = -rmass[i] / t_period / ftm2v; - gamma2 = sqrt(rmass[i]) * sqrt(2.0 * boltz / t_period / dt / mvv2e) / ftm2v; + if (gjfflag) + gamma2 = sqrt(rmass[i]) * sqrt(2.0 * boltz / t_period / dt / mvv2e) / ftm2v; + else + gamma2 = sqrt(rmass[i]) * sqrt(24.0 * boltz / t_period / dt / mvv2e) / ftm2v; gamma1 *= 1.0 / ratio[type[i]]; gamma2 *= 1.0 / sqrt(ratio[type[i]]) * tsqrt; } else { @@ -682,18 +691,17 @@ void FixLangevin::post_force_templated() gamma2 = gfactor2[type[i]] * tsqrt; } - if (!gjfflag) { - fran[0] = gamma2 * random->uniform(); - fran[1] = gamma2 * random->uniform(); - fran[2] = gamma2 * random->uniform(); - } else { + if (gjfflag) { fran[0] = gamma2 * random->gaussian(); fran[1] = gamma2 * random->gaussian(); fran[2] = gamma2 * random->gaussian(); + } else { + fran[0] = gamma2 * random->uniform(); + fran[1] = gamma2 * random->uniform(); + fran[2] = gamma2 * random->uniform(); } if (Tp_BIAS) { - double b[3] = {0.0,0.0,0.0}; temperature->remove_bias(i,v[i]); fdrag[0] = gamma1*v[i][0]; fdrag[1] = gamma1*v[i][1]; @@ -703,9 +711,9 @@ void FixLangevin::post_force_templated() if (v[i][2] == 0.0) fran[2] = 0.0; temperature->restore_bias(i,v[i]); } else { - fdrag[0] = gamma1*v[i][0];// - gjffac*(dtf / mass[type[i]])*gamma1*franprev[i][0]; - fdrag[1] = gamma1*v[i][1];// - gjffac*(dtf / mass[type[i]])*gamma1*franprev[i][1]; - fdrag[2] = gamma1*v[i][2];// - gjffac*(dtf / mass[type[i]])*gamma1*franprev[i][2]; + fdrag[0] = gamma1*v[i][0]; + fdrag[1] = gamma1*v[i][1]; + fdrag[2] = gamma1*v[i][2]; } if (Tp_GJF) { diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 9cd1ecb66a..939b161c35 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -67,8 +67,7 @@ class FixLangevin : public Fix { double **franprev; double **lv; //2GJ velocity or half-step velocity double **wildcard; - double **bias; - double cm[3]; + double **bias; //Bias velocity int nvalues; From f2068ece84baf0cf3b5fa0f28cba819b905ea814 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Tue, 13 Aug 2019 16:06:17 -0700 Subject: [PATCH 083/237] restored regular langevin functionality --- src/fix_langevin.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index c2e56881b7..d323453cdb 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -680,7 +680,7 @@ void FixLangevin::post_force_templated() if (Tp_TSTYLEATOM) tsqrt = sqrt(tforce[i]); if (Tp_RMASS) { gamma1 = -rmass[i] / t_period / ftm2v; - if (gjfflag) + if (Tp_GJF) gamma2 = sqrt(rmass[i]) * sqrt(2.0 * boltz / t_period / dt / mvv2e) / ftm2v; else gamma2 = sqrt(rmass[i]) * sqrt(24.0 * boltz / t_period / dt / mvv2e) / ftm2v; @@ -691,14 +691,14 @@ void FixLangevin::post_force_templated() gamma2 = gfactor2[type[i]] * tsqrt; } - if (gjfflag) { + if (Tp_GJF) { fran[0] = gamma2 * random->gaussian(); fran[1] = gamma2 * random->gaussian(); fran[2] = gamma2 * random->gaussian(); } else { - fran[0] = gamma2 * random->uniform(); - fran[1] = gamma2 * random->uniform(); - fran[2] = gamma2 * random->uniform(); + fran[0] = gamma2 * (random->uniform()-0.5); + fran[1] = gamma2 * (random->uniform()-0.5); + fran[2] = gamma2 * (random->uniform()-0.5); } if (Tp_BIAS) { @@ -766,7 +766,7 @@ void FixLangevin::post_force_templated() } if (Tp_ZERO) { - if (!gjfflag){ + if (!Tp_GJF){ fsum[0] += fran[0]; fsum[1] += fran[1]; fsum[2] += fran[2]; From 37a046cf1eadee8d20fcfbaa6b744680bdbb0f68 Mon Sep 17 00:00:00 2001 From: "Jibril B. Coulibaly" <43829860+jibril-b-coulibaly@users.noreply.github.com> Date: Wed, 14 Aug 2019 17:39:56 -0500 Subject: [PATCH 084/237] Update pair_granular.cpp Modified PairGranular::single function to return the total normal force into argument fforce. This was done for pair styles gran/* but not for the granular pari_style, resulting in the variable fforce being uninitialized. --- src/GRANULAR/pair_granular.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index b87e64a456..2813035ebb 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -1630,7 +1630,11 @@ double PairGranular::single(int i, int j, int itype, int jtype, magtortwist = -Mtcrit * signtwist; // eq 34 } } - + + // set force and return no energy + + fforce = Fntot*rinv; + // set single_extra quantities svector[0] = fs1; From cc14103f28f65a8610780f6e1f73676214e95cca Mon Sep 17 00:00:00 2001 From: "Jibril B. Coulibaly" Date: Fri, 16 Aug 2019 15:22:15 -0500 Subject: [PATCH 085/237] Bug fixes in granular pair style: - correct formula for tangent forces in style with no history in compute() and in single() functions - remove tangent history update in the single() function - implement correct output for tangent, normal and rolling forces in single() function - correct typos in documentation --- doc/src/pair_granular.txt | 8 +++---- src/GRANULAR/pair_granular.cpp | 42 +++++++++++++++------------------- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/doc/src/pair_granular.txt b/doc/src/pair_granular.txt index f16cd9fe0b..ccfe805b67 100644 --- a/doc/src/pair_granular.txt +++ b/doc/src/pair_granular.txt @@ -100,7 +100,7 @@ on particle {i} due to contact with particle {j} is given by: \mathbf\{F\}_\{ne, Hooke\} = k_N \delta_\{ij\} \mathbf\{n\} \end\{equation\} -Where \(\delta = R_i + R_j - \|\mathbf\{r\}_\{ij\}\|\) is the particle +Where \(\delta_\{ij\} = R_i + R_j - \|\mathbf\{r\}_\{ij\}\|\) is the particle overlap, \(R_i, R_j\) are the particle radii, \(\mathbf\{r\}_\{ij\} = \mathbf\{r\}_i - \mathbf\{r\}_j\) is the vector separating the two particle centers (note the i-j ordering so that \(F_\{ne\}\) is @@ -411,8 +411,8 @@ option by an additional factor of {a}, the radius of the contact region. The tan \mathbf\{F\}_t = -min(\mu_t F_\{n0\}, \|-k_t a \mathbf\{\xi\} + \mathbf\{F\}_\mathrm\{t,damp\}\|) \mathbf\{t\} \end\{equation\} -Here, {a} is the radius of the contact region, given by \(a = \delta -R\) for all normal contact models, except for {jkr}, where it is given +Here, {a} is the radius of the contact region, given by \(a =\sqrt\{R\delta\}\) + for all normal contact models, except for {jkr}, where it is given implicitly by \(\delta = a^2/R - 2\sqrt\{\pi \gamma a/E\}\), see discussion above. To match the Mindlin solution, one should set \(k_t = 8G\), where \(G\) is the shear modulus, related to Young's modulus @@ -680,7 +680,7 @@ The single() function of these pair styles returns 0.0 for the energy of a pairwise interaction, since energy is not conserved in these dissipative potentials. It also returns only the normal component of the pairwise interaction force. However, the single() function also -calculates 10 extra pairwise quantities. The first 3 are the +calculates 12 extra pairwise quantities. The first 3 are the components of the tangential force between particles I and J, acting on particle I. The 4th is the magnitude of this tangential force. The next 3 (5-7) are the components of the rolling torque acting on diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 2813035ebb..334c6a471e 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -391,6 +391,7 @@ void PairGranular::compute(int eflag, int vflag) } else { Fncrit = fabs(Fntot); } + Fscrit = tangential_coeffs[itype][jtype][2] * Fncrit; //------------------------------ // tangential forces @@ -446,7 +447,6 @@ void PairGranular::compute(int eflag, int vflag) fs3 = -k_tangential*history[2] - damp_tangential*vtr3; // rescale frictional displacements and forces if needed - Fscrit = tangential_coeffs[itype][jtype][2] * Fncrit; fs = sqrt(fs1*fs1 + fs2*fs2 + fs3*fs3); if (fs > Fscrit) { shrmag = sqrt(history[0]*history[0] + history[1]*history[1] + @@ -464,8 +464,8 @@ void PairGranular::compute(int eflag, int vflag) } else fs1 = fs2 = fs3 = 0.0; } } else { // classic pair gran/hooke (no history) - fs = meff*damp_tangential*vrel; - if (vrel != 0.0) Ft = MIN(Fne,fs) / vrel; + fs = damp_tangential*vrel; // From documentation: F_{t,damp} = - \eta_t v_{t,rel}, no need for extra `meff` + if (vrel != 0.0) Ft = MIN(Fscrit,fs) / vrel; // From documentation: critical force `Fscrit` used, not elastic normal force `Fne` else Ft = 0.0; fs1 = -Ft*vtr1; fs2 = -Ft*vtr2; @@ -635,7 +635,7 @@ void PairGranular::compute(int eflag, int vflag) torque[j][2] -= torroll3; } } - if (evflag) ev_tally_xyz(i,j,nlocal,0, + if (evflag) ev_tally_xyz(i,j,nlocal,0,//Should `newton_pair` passed instead of 0 ? 0.0,0.0,fx,fy,fz,delx,dely,delz); } } @@ -1451,11 +1451,13 @@ double PairGranular::single(int i, int j, int itype, int jtype, } if (damping_model[itype][jtype] == VELOCITY) { - damp_normal = normal_coeffs[itype][jtype][1]; + damp_normal = 1; + } else if (damping_model[itype][jtype] == MASS_VELOCITY) { + damp_normal = meff; } else if (damping_model[itype][jtype] == VISCOELASTIC) { - damp_normal = normal_coeffs[itype][jtype][1]*a*meff; + damp_normal = a*meff; } else if (damping_model[itype][jtype] == TSUJI) { - damp_normal = normal_coeffs[itype][jtype][1]*sqrt(meff*knfac); + damp_normal = sqrt(meff*knfac); } damp_normal_prefactor = normal_coeffs[itype][jtype][1]*damp_normal; @@ -1473,6 +1475,7 @@ double PairGranular::single(int i, int j, int itype, int jtype, if (neighprev >= jnum) neighprev = 0; if (jlist[neighprev] == j) break; } + // the `history` pointer must not be modified here in single() function. already calculated in the compute() function. If modified here it changes the pair forces that have friction/twisting/rolling and history effects ! history = &allhistory[size_history*neighprev]; } @@ -1506,6 +1509,7 @@ double PairGranular::single(int i, int j, int itype, int jtype, } else { Fncrit = fabs(Fntot); } + Fscrit = tangential_coeffs[itype][jtype][2] * Fncrit; //------------------------------ // tangential forces @@ -1518,13 +1522,6 @@ double PairGranular::single(int i, int j, int itype, int jtype, k_tangential *= a; } else if (tangential_model[itype][jtype] == TANGENTIAL_MINDLIN_RESCALE) { k_tangential *= a; - // on unloading, rescale the shear displacements - if (a < history[3]) { - double factor = a/history[3]; - history[0] *= factor; - history[1] *= factor; - history[2] *= factor; - } } shrmag = sqrt(history[0]*history[0] + history[1]*history[1] + @@ -1535,28 +1532,26 @@ double PairGranular::single(int i, int j, int itype, int jtype, fs2 = -k_tangential*history[1] - damp_tangential*vtr2; fs3 = -k_tangential*history[2] - damp_tangential*vtr3; - // rescale frictional displacements and forces if needed - Fscrit = tangential_coeffs[itype][jtype][2] * Fncrit; + // rescale frictional forces if needed fs = sqrt(fs1*fs1 + fs2*fs2 + fs3*fs3); if (fs > Fscrit) { if (shrmag != 0.0) { - history[0] = -1.0/k_tangential*(Fscrit*fs1/fs + damp_tangential*vtr1); - history[1] = -1.0/k_tangential*(Fscrit*fs2/fs + damp_tangential*vtr2); - history[2] = -1.0/k_tangential*(Fscrit*fs3/fs + damp_tangential*vtr3); fs1 *= Fscrit/fs; fs2 *= Fscrit/fs; fs3 *= Fscrit/fs; - } else fs1 = fs2 = fs3 = 0.0; + fs *= Fscrit/fs; // saves the correct value of `fs` to svector + } else fs1 = fs2 = fs3 = fs = 0.0; // saves the correct of `fs` value to svector } // classic pair gran/hooke (no history) } else { - fs = meff*damp_tangential*vrel; - if (vrel != 0.0) Ft = MIN(Fne,fs) / vrel; + fs = damp_tangential*vrel; + if (vrel != 0.0) Ft = MIN(Fscrit,fs) / vrel; else Ft = 0.0; fs1 = -Ft*vtr1; fs2 = -Ft*vtr2; fs3 = -Ft*vtr3; + fs = Ft*vrel; // saves the correct value of `fs` to svector } //**************************************** @@ -1601,7 +1596,8 @@ double PairGranular::single(int i, int j, int itype, int jtype, fr1 *= Frcrit/fr; fr2 *= Frcrit/fr; fr3 *= Frcrit/fr; - } else fr1 = fr2 = fr3 = 0.0; + fr *= Frcrit/fr; // saves the correct value of `fr` to svector + } else fr1 = fr2 = fr3 = fr = 0.0; // saves the correct value of `fr` to svector } } From a5acf1655bd05de4d13921d25fb647f1d5d29ab3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 16 Aug 2019 17:30:37 -0400 Subject: [PATCH 086/237] resolve small formatting glitch Text blocks must all be flush on the left side or else sphinx gets confused since indenting is part of the syntax. --- doc/src/pair_granular.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/pair_granular.txt b/doc/src/pair_granular.txt index ccfe805b67..9fcc4dbe48 100644 --- a/doc/src/pair_granular.txt +++ b/doc/src/pair_granular.txt @@ -412,7 +412,7 @@ option by an additional factor of {a}, the radius of the contact region. The tan \end\{equation\} Here, {a} is the radius of the contact region, given by \(a =\sqrt\{R\delta\}\) - for all normal contact models, except for {jkr}, where it is given +for all normal contact models, except for {jkr}, where it is given implicitly by \(\delta = a^2/R - 2\sqrt\{\pi \gamma a/E\}\), see discussion above. To match the Mindlin solution, one should set \(k_t = 8G\), where \(G\) is the shear modulus, related to Young's modulus From c71e869a33cdec0c855763a0ce60928cf1149975 Mon Sep 17 00:00:00 2001 From: alxvov Date: Wed, 21 Aug 2019 14:02:34 +0000 Subject: [PATCH 087/237] define params in creator as init is called after modify --- src/SPIN/min_spin.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/SPIN/min_spin.cpp b/src/SPIN/min_spin.cpp index c8e0020ef8..947e281b42 100644 --- a/src/SPIN/min_spin.cpp +++ b/src/SPIN/min_spin.cpp @@ -41,15 +41,15 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -MinSpin::MinSpin(LAMMPS *lmp) : Min(lmp) {} +MinSpin::MinSpin(LAMMPS *lmp) : Min(lmp) { + alpha_damp = 1.0; + discrete_factor = 10.0; +} /* ---------------------------------------------------------------------- */ void MinSpin::init() { - alpha_damp = 1.0; - discrete_factor = 10.0; - Min::init(); dts = dt = update->dt; From 52a51ea470dbd9f844db003af0153e3dad33c493 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Wed, 21 Aug 2019 19:14:08 -0700 Subject: [PATCH 088/237] Simplified GJF formalism --- src/fix_langevin.cpp | 762 ++++++++++++++++++------------------------- src/fix_langevin.h | 135 +++----- 2 files changed, 371 insertions(+), 526 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index d323453cdb..b8144fc5f3 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -2,20 +2,16 @@ LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator http://lammps.sandia.gov, Sandia National Laboratories Steve Plimpton, sjplimp@sandia.gov - Copyright (2003) Sandia Corporation. Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains certain rights in this software. This software is distributed under the GNU General Public License. - See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- Contributing authors: Carolyn Phillips (U Mich), reservoir energy tally Aidan Thompson (SNL) GJF formulation - Charles Sievers (UC Davis) GJF-2GJ Implementation - Niels Gronbech-Jensen (UC Davis) GJF-2GJ Formulation ------------------------------------------------------------------------- */ #include "fix_langevin.h" @@ -50,10 +46,9 @@ enum{CONSTANT,EQUAL,ATOM}; /* ---------------------------------------------------------------------- */ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), - gjfflag(0), gfactor1(NULL), gfactor2(NULL), ratio(NULL), tstr(NULL), - flangevin(NULL), tforce(NULL), franprev(NULL), id_temp(NULL), random(NULL), - lv(NULL), wildcard(NULL), bias(NULL) + Fix(lmp, narg, arg), + gjfflag(0), gfactor1(NULL), gfactor2(NULL), ratio(NULL), tstr(NULL), + flangevin(NULL), tforce(NULL), franprev(NULL), id_temp(NULL), random(NULL), lv(NULL) { if (narg < 7) error->all(FLERR,"Illegal fix langevin command"); @@ -98,7 +93,6 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : oflag = 0; tallyflag = 0; zeroflag = 0; - hsflag = 0; int iarg = 7; while (iarg < narg) { @@ -110,10 +104,7 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : } else if (strcmp(arg[iarg],"gjf") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command"); if (strcmp(arg[iarg+1],"no") == 0) gjfflag = 0; - else if (strcmp(arg[iarg+1],"yes") == 0) - error->all(FLERR,"GJF yes keyword is deprecated.\nPlease use vhalf or vfull."); - else if (strcmp(arg[iarg+1],"vfull") == 0) {gjfflag = 1; hsflag = 0;} - else if (strcmp(arg[iarg+1],"vhalf") == 0) {gjfflag = 1; hsflag = 1;} + else if (strcmp(arg[iarg+1],"yes") == 0) gjfflag = 1; else error->all(FLERR,"Illegal fix langevin command"); iarg += 2; } else if (strcmp(arg[iarg],"omega") == 0) { @@ -159,9 +150,7 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : flangevin = NULL; flangevin_allocated = 0; franprev = NULL; - wildcard = NULL; lv = NULL; - bias = NULL; tforce = NULL; maxatom1 = maxatom2 = 0; @@ -170,26 +159,19 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : // no need to set peratom_flag, b/c data is for internal use only if (gjfflag) { - - nvalues = 3; grow_arrays(atom->nmax); atom->add_callback(0); - // initialize franprev to zero + // initialize franprev to zero int nlocal = atom->nlocal; for (int i = 0; i < nlocal; i++) { franprev[i][0] = 0.0; franprev[i][1] = 0.0; franprev[i][2] = 0.0; - wildcard[i][0] = 0.0; - wildcard[i][1] = 0.0; - wildcard[i][2] = 0.0; - if (hsflag) { - lv[i][0] = 0.0; - lv[i][1] = 0.0; - lv[i][2] = 0.0; - } + lv[i][0] = 0.0; + lv[i][1] = 0.0; + lv[i][2] = 0.0; } } @@ -210,9 +192,7 @@ FixLangevin::~FixLangevin() if (gjfflag) { memory->destroy(franprev); - memory->destroy(wildcard); - if (hsflag) memory->destroy(lv); - if (temperature && temperature->tempbias) memory->destroy(bias); + memory->destroy(lv); atom->delete_callback(id,0); } } @@ -222,7 +202,8 @@ FixLangevin::~FixLangevin() int FixLangevin::setmask() { int mask = 0; - if (gjfflag) mask |= POST_INTEGRATE; + if (gjfflag) mask |= INITIAL_INTEGRATE; + if (gjfflag) mask |= INITIAL_INTEGRATE_RESPA; mask |= POST_FORCE; mask |= POST_FORCE_RESPA; mask |= END_OF_STEP; @@ -234,14 +215,26 @@ int FixLangevin::setmask() void FixLangevin::init() { + if (gjfflag){ + if (t_period*2 == update->dt) + error->all(FLERR,"Fix langevin gjf cannot have t_period equal to dt/2 at the start"); + + // warn if any integrate fix comes after this one + int before = 1; + int flag = 0; + for (int i = 0; i < modify->nfix; i++) { + if (strcmp(id,modify->fix[i]->id) == 0) before = 0; + else if ((modify->fmask[i] && strcmp(modify->fix[i]->style,"nve")==0) && before) flag = 1; + } + if (flag && comm->me == 0) + error->all(FLERR,"Fix langevin gjf should come before fix nve"); + } + if (oflag && !atom->sphere_flag) error->all(FLERR,"Fix langevin omega requires atom style sphere"); if (ascale && !atom->ellipsoid_flag) error->all(FLERR,"Fix langevin angmom requires atom style ellipsoid"); - if (gjfflag && zeroflag && tallyflag) - error->warning(FLERR, - "Fix langevin: gjf, zero, and tally were all set correct energy tallying is not guaranteed"); // check variable if (tstr) { @@ -281,17 +274,19 @@ void FixLangevin::init() error->one(FLERR,"Fix langevin angmom requires extended particles"); } + // set force prefactors + if (!atom->rmass) { for (int i = 1; i <= atom->ntypes; i++) { gfactor1[i] = -atom->mass[i] / t_period / force->ftm2v; - if (gjfflag) + if (!gjfflag) gfactor2[i] = sqrt(atom->mass[i]) * - sqrt(2.0*force->boltz/t_period/update->dt/force->mvv2e) / - force->ftm2v; + sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / + force->ftm2v; else gfactor2[i] = sqrt(atom->mass[i]) * - sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / - force->ftm2v; + sqrt(2.0*force->boltz/t_period/update->dt/force->mvv2e) / + force->ftm2v; gfactor1[i] *= 1.0/ratio[i]; gfactor2[i] *= 1.0/sqrt(ratio[i]); } @@ -303,17 +298,57 @@ void FixLangevin::init() if (strstr(update->integrate_style,"respa")) nlevels_respa = ((Respa *) update->integrate)->nlevels; - if (strstr(update->integrate_style,"respa")) - error->one(FLERR,"Fix langevin gjf not implemented with respa capabilities"); - - if (gjfflag) gjffac = 1.0/sqrt(1.0+update->dt/2.0/t_period); - + if (gjfflag) gjfa = (1.0-update->dt/2.0/t_period)/(1.0+update->dt/2.0/t_period); + if (gjfflag) gjfsib = sqrt(1.0+update->dt/2.0/t_period); } /* ---------------------------------------------------------------------- */ void FixLangevin::setup(int vflag) { + if (gjfflag){ + double dtfm; + double dt = update->dt; + double **v = atom->v; + double **f = atom->f; + int *mask = atom->mask; + int nlocal = atom->nlocal; + double *rmass = atom->rmass; + double *mass = atom->mass; + int *type = atom->type; + if (rmass) { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + dtfm = 0.5 * dt / rmass[i]; + v[i][0] -= dtfm * f[i][0]; + v[i][1] -= dtfm * f[i][1]; + v[i][2] -= dtfm * f[i][2]; + if (tbiasflag) + temperature->remove_bias(i,v[i]); + v[i][0] /= gjfa*gjfsib*gjfsib; + v[i][1] /= gjfa*gjfsib*gjfsib; + v[i][2] /= gjfa*gjfsib*gjfsib; + if (tbiasflag) + temperature->restore_bias(i,v[i]); + } + + } else { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + dtfm = 0.5 * dt / mass[type[i]]; + v[i][0] -= dtfm * f[i][0]; + v[i][1] -= dtfm * f[i][1]; + v[i][2] -= dtfm * f[i][2]; + if (tbiasflag) + temperature->remove_bias(i,v[i]); + v[i][0] /= gjfa*gjfsib*gjfsib; + v[i][1] /= gjfa*gjfsib*gjfsib; + v[i][2] /= gjfa*gjfsib*gjfsib; + if (tbiasflag) + temperature->restore_bias(i,v[i]); + } + } + } if (strstr(update->integrate_style,"verlet")) post_force(vflag); else { @@ -321,144 +356,67 @@ void FixLangevin::setup(int vflag) post_force_respa(vflag,nlevels_respa-1,0); ((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1); } - if (gjfflag) { - - // update v of atoms in group - double ** v = atom->v; + if (gjfflag){ + double dtfm; + double dt = update->dt; double **f = atom->f; + double **v = atom->v; + int *mask = atom->mask; int nlocal = atom->nlocal; - if (igroup == atom->firstgroup) nlocal = atom->nfirst; - double b[3] = {0.0,0.0,0.0}; - - for (int i = 0; i < nlocal; i++) { - f[i][0] = wildcard[i][0]; - f[i][1] = wildcard[i][1]; - f[i][2] = wildcard[i][2]; - b[0] = v[i][0]; - b[1] = v[i][1]; - b[2] = v[i][2]; - if (tbiasflag == BIAS) temperature->remove_bias(i,v[i]); - wildcard[i][0] = v[i][0]; - wildcard[i][1] = v[i][1]; - wildcard[i][2] = v[i][2]; - if (tbiasflag == BIAS) { - temperature->restore_bias(i,v[i]); - bias[i][0] = b[0] - wildcard[i][0]; - bias[i][1] = b[1] - wildcard[i][1]; - bias[i][2] = b[2] - wildcard[i][2]; - } + double *rmass = atom->rmass; + double *mass = atom->mass; + int *type = atom->type; + if (rmass) { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + dtfm = 0.5 * dt / rmass[i]; + v[i][0] += dtfm * f[i][0]; + v[i][1] += dtfm * f[i][1]; + v[i][2] += dtfm * f[i][2]; + lv[i][0] = f[i][0]; + lv[i][1] = f[i][1]; + lv[i][2] = f[i][2]; + } +// + } else { + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) { + dtfm = 0.5 * dt / mass[type[i]]; + v[i][0] += dtfm * f[i][0]; + v[i][1] += dtfm * f[i][1]; + v[i][2] += dtfm * f[i][2]; + lv[i][0] = v[i][0]; + lv[i][1] = v[i][1]; + lv[i][2] = v[i][2]; + } } } } -/* ---------------------------------------------------------------------- - allow for both per-type and per-atom mass -------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- */ -void FixLangevin::post_integrate() +void FixLangevin::initial_integrate_respa(int vflag, int ilevel, int /* iloop */){ + if (ilevel == respa_level-1) initial_integrate(vflag); +} + +/* ---------------------------------------------------------------------- */ + +void FixLangevin::initial_integrate(int /* vflag */) { - double dtfm; - double dt = update->dt; - double dtf = 0.5 * dt * force->ftm2v; - - // update v of atoms in group - - double **x = atom->x; double **v = atom->v; double **f = atom->f; - double *rmass = atom->rmass; - double *mass = atom->mass; - int *type = atom->type; int *mask = atom->mask; int nlocal = atom->nlocal; - if (igroup == atom->firstgroup) nlocal = atom->nfirst; - // zero option - double vsum[3],vsumall[3]; - bigint count; - - if (zeroflag) { - vsum[0] = vsum[1] = vsum[2] = 0.0; - count = group->count(igroup); - if (count == 0) - error->all(FLERR,"Cannot zero Langevin force of 0 atoms"); - } - - if (rmass) { - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - dtfm = dtf / rmass[i]; - x[i][0] -= dt * v[i][0]; - x[i][1] -= dt * v[i][1]; - x[i][2] -= dt * v[i][2]; - v[i][0] = gjffac * (wildcard[i][0] + dtfm * franprev[i][0] + dtfm * f[i][0]); - v[i][1] = gjffac * (wildcard[i][1] + dtfm * franprev[i][1] + dtfm * f[i][1]); - v[i][2] = gjffac * (wildcard[i][2] + dtfm * franprev[i][2] + dtfm * f[i][2]); - if (tbiasflag == BIAS) - for (int j = 0; j < 3; j++) { - if (wildcard[i][j] == 0) { - v[i][j] /= gjffac * gjffac; - } - } - x[i][0] += gjffac * dt * v[i][0]; - x[i][1] += gjffac * dt * v[i][1]; - x[i][2] += gjffac * dt * v[i][2]; - if (tbiasflag == BIAS) - for (int j = 0; j < 3; j++) { - if (wildcard[i][j] == 0) - v[i][j] *= gjffac; - v[i][j] += bias[i][j]; - x[i][j] += dt * bias[i][j]; - } - } - - } else { - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - dtfm = dtf / mass[type[i]]; - x[i][0] -= dt * v[i][0]; - x[i][1] -= dt * v[i][1]; - x[i][2] -= dt * v[i][2]; - v[i][0] = gjffac * (wildcard[i][0] + dtfm * franprev[i][0] + dtfm * f[i][0]); - v[i][1] = gjffac * (wildcard[i][1] + dtfm * franprev[i][1] + dtfm * f[i][1]); - v[i][2] = gjffac * (wildcard[i][2] + dtfm * franprev[i][2] + dtfm * f[i][2]); - if (tbiasflag == BIAS) - for (int j = 0; j < 3; j++) { - if (wildcard[i][j] == 0) { - v[i][j] /= gjffac*gjffac; - } - } - x[i][0] += gjffac * dt * v[i][0]; - x[i][1] += gjffac * dt * v[i][1]; - x[i][2] += gjffac * dt * v[i][2]; - if (tbiasflag == BIAS) - for (int j = 0; j < 3; j++) { - if (wildcard[i][j] == 0) - v[i][j] *= gjffac; - v[i][j] += bias[i][j]; - x[i][j] += dt * bias[i][j]; - } - if (zeroflag){ - vsum[0] += gjffac * dtfm * franprev[i][0]; - vsum[1] += gjffac * dtfm * franprev[i][1]; - vsum[2] += gjffac * dtfm * franprev[i][2]; - } - } - } - - if (zeroflag) { - MPI_Allreduce(vsum,vsumall,3,MPI_DOUBLE,MPI_SUM,world); - vsumall[0] /= count; - vsumall[1] /= count; - vsumall[2] /= count; - for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) { - v[i][0] -= vsumall[0]; - v[i][1] -= vsumall[1]; - v[i][2] -= vsumall[2]; - } + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit){ + f[i][0] /= gjfa; + f[i][1] /= gjfa; + f[i][2] /= gjfa; + v[i][0] = lv[i][0]; + v[i][1] = lv[i][1]; + v[i][2] = lv[i][2]; } - } } /* ---------------------------------------------------------------------- */ @@ -479,124 +437,124 @@ void FixLangevin::post_force(int /*vflag*/) if (zeroflag) post_force_templated<1,1,1,1,1,1>(); else post_force_templated<1,1,1,1,1,0>(); else - if (zeroflag) post_force_templated<1,1,1,1,0,1>(); - else post_force_templated<1,1,1,1,0,0>(); + if (zeroflag) post_force_templated<1,1,1,1,0,1>(); + else post_force_templated<1,1,1,1,0,0>(); else - if (rmass) - if (zeroflag) post_force_templated<1,1,1,0,1,1>(); - else post_force_templated<1,1,1,0,1,0>(); - else - if (zeroflag) post_force_templated<1,1,1,0,0,1>(); - else post_force_templated<1,1,1,0,0,0>(); + if (rmass) + if (zeroflag) post_force_templated<1,1,1,0,1,1>(); + else post_force_templated<1,1,1,0,1,0>(); + else + if (zeroflag) post_force_templated<1,1,1,0,0,1>(); + else post_force_templated<1,1,1,0,0,0>(); else - if (tbiasflag == BIAS) - if (rmass) - if (zeroflag) post_force_templated<1,1,0,1,1,1>(); - else post_force_templated<1,1,0,1,1,0>(); - else - if (zeroflag) post_force_templated<1,1,0,1,0,1>(); - else post_force_templated<1,1,0,1,0,0>(); + if (tbiasflag == BIAS) + if (rmass) + if (zeroflag) post_force_templated<1,1,0,1,1,1>(); + else post_force_templated<1,1,0,1,1,0>(); else - if (rmass) - if (zeroflag) post_force_templated<1,1,0,0,1,1>(); - else post_force_templated<1,1,0,0,1,0>(); - else - if (zeroflag) post_force_templated<1,1,0,0,0,1>(); - else post_force_templated<1,1,0,0,0,0>(); + if (zeroflag) post_force_templated<1,1,0,1,0,1>(); + else post_force_templated<1,1,0,1,0,0>(); + else + if (rmass) + if (zeroflag) post_force_templated<1,1,0,0,1,1>(); + else post_force_templated<1,1,0,0,1,0>(); + else + if (zeroflag) post_force_templated<1,1,0,0,0,1>(); + else post_force_templated<1,1,0,0,0,0>(); else - if (tallyflag) - if (tbiasflag == BIAS) - if (rmass) - if (zeroflag) post_force_templated<1,0,1,1,1,1>(); - else post_force_templated<1,0,1,1,1,0>(); - else - if (zeroflag) post_force_templated<1,0,1,1,0,1>(); - else post_force_templated<1,0,1,1,0,0>(); + if (tallyflag) + if (tbiasflag == BIAS) + if (rmass) + if (zeroflag) post_force_templated<1,0,1,1,1,1>(); + else post_force_templated<1,0,1,1,1,0>(); else - if (rmass) - if (zeroflag) post_force_templated<1,0,1,0,1,1>(); - else post_force_templated<1,0,1,0,1,0>(); - else - if (zeroflag) post_force_templated<1,0,1,0,0,1>(); - else post_force_templated<1,0,1,0,0,0>(); + if (zeroflag) post_force_templated<1,0,1,1,0,1>(); + else post_force_templated<1,0,1,1,0,0>(); else - if (tbiasflag == BIAS) - if (rmass) - if (zeroflag) post_force_templated<1,0,0,1,1,1>(); - else post_force_templated<1,0,0,1,1,0>(); - else - if (zeroflag) post_force_templated<1,0,0,1,0,1>(); - else post_force_templated<1,0,0,1,0,0>(); - else - if (rmass) - if (zeroflag) post_force_templated<1,0,0,0,1,1>(); - else post_force_templated<1,0,0,0,1,0>(); - else - if (zeroflag) post_force_templated<1,0,0,0,0,1>(); - else post_force_templated<1,0,0,0,0,0>(); + if (rmass) + if (zeroflag) post_force_templated<1,0,1,0,1,1>(); + else post_force_templated<1,0,1,0,1,0>(); + else + if (zeroflag) post_force_templated<1,0,1,0,0,1>(); + else post_force_templated<1,0,1,0,0,0>(); + else + if (tbiasflag == BIAS) + if (rmass) + if (zeroflag) post_force_templated<1,0,0,1,1,1>(); + else post_force_templated<1,0,0,1,1,0>(); + else + if (zeroflag) post_force_templated<1,0,0,1,0,1>(); + else post_force_templated<1,0,0,1,0,0>(); + else + if (rmass) + if (zeroflag) post_force_templated<1,0,0,0,1,1>(); + else post_force_templated<1,0,0,0,1,0>(); + else + if (zeroflag) post_force_templated<1,0,0,0,0,1>(); + else post_force_templated<1,0,0,0,0,0>(); else - if (gjfflag) - if (tallyflag) - if (tbiasflag == BIAS) - if (rmass) - if (zeroflag) post_force_templated<0,1,1,1,1,1>(); - else post_force_templated<0,1,1,1,1,0>(); - else - if (zeroflag) post_force_templated<0,1,1,1,0,1>(); - else post_force_templated<0,1,1,1,0,0>(); + if (gjfflag) + if (tallyflag) + if (tbiasflag == BIAS) + if (rmass) + if (zeroflag) post_force_templated<0,1,1,1,1,1>(); + else post_force_templated<0,1,1,1,1,0>(); else - if (rmass) - if (zeroflag) post_force_templated<0,1,1,0,1,1>(); - else post_force_templated<0,1,1,0,1,0>(); - else - if (zeroflag) post_force_templated<0,1,1,0,0,1>(); - else post_force_templated<0,1,1,0,0,0>(); + if (zeroflag) post_force_templated<0,1,1,1,0,1>(); + else post_force_templated<0,1,1,1,0,0>(); else - if (tbiasflag == BIAS) - if (rmass) - if (zeroflag) post_force_templated<0,1,0,1,1,1>(); - else post_force_templated<0,1,0,1,1,0>(); - else - if (zeroflag) post_force_templated<0,1,0,1,0,1>(); - else post_force_templated<0,1,0,1,0,0>(); - else - if (rmass) - if (zeroflag) post_force_templated<0,1,0,0,1,1>(); - else post_force_templated<0,1,0,0,1,0>(); - else - if (zeroflag) post_force_templated<0,1,0,0,0,1>(); - else post_force_templated<0,1,0,0,0,0>(); + if (rmass) + if (zeroflag) post_force_templated<0,1,1,0,1,1>(); + else post_force_templated<0,1,1,0,1,0>(); + else + if (zeroflag) post_force_templated<0,1,1,0,0,1>(); + else post_force_templated<0,1,1,0,0,0>(); else - if (tallyflag) - if (tbiasflag == BIAS) - if (rmass) - if (zeroflag) post_force_templated<0,0,1,1,1,1>(); - else post_force_templated<0,0,1,1,1,0>(); - else - if (zeroflag) post_force_templated<0,0,1,1,0,1>(); - else post_force_templated<0,0,1,1,0,0>(); - else - if (rmass) - if (zeroflag) post_force_templated<0,0,1,0,1,1>(); - else post_force_templated<0,0,1,0,1,0>(); - else - if (zeroflag) post_force_templated<0,0,1,0,0,1>(); - else post_force_templated<0,0,1,0,0,0>(); + if (tbiasflag == BIAS) + if (rmass) + if (zeroflag) post_force_templated<0,1,0,1,1,1>(); + else post_force_templated<0,1,0,1,1,0>(); else - if (tbiasflag == BIAS) - if (rmass) - if (zeroflag) post_force_templated<0,0,0,1,1,1>(); - else post_force_templated<0,0,0,1,1,0>(); - else - if (zeroflag) post_force_templated<0,0,0,1,0,1>(); - else post_force_templated<0,0,0,1,0,0>(); - else - if (rmass) - if (zeroflag) post_force_templated<0,0,0,0,1,1>(); - else post_force_templated<0,0,0,0,1,0>(); - else - if (zeroflag) post_force_templated<0,0,0,0,0,1>(); - else post_force_templated<0,0,0,0,0,0>(); + if (zeroflag) post_force_templated<0,1,0,1,0,1>(); + else post_force_templated<0,1,0,1,0,0>(); + else + if (rmass) + if (zeroflag) post_force_templated<0,1,0,0,1,1>(); + else post_force_templated<0,1,0,0,1,0>(); + else + if (zeroflag) post_force_templated<0,1,0,0,0,1>(); + else post_force_templated<0,1,0,0,0,0>(); + else + if (tallyflag) + if (tbiasflag == BIAS) + if (rmass) + if (zeroflag) post_force_templated<0,0,1,1,1,1>(); + else post_force_templated<0,0,1,1,1,0>(); + else + if (zeroflag) post_force_templated<0,0,1,1,0,1>(); + else post_force_templated<0,0,1,1,0,0>(); + else + if (rmass) + if (zeroflag) post_force_templated<0,0,1,0,1,1>(); + else post_force_templated<0,0,1,0,1,0>(); + else + if (zeroflag) post_force_templated<0,0,1,0,0,1>(); + else post_force_templated<0,0,1,0,0,0>(); + else + if (tbiasflag == BIAS) + if (rmass) + if (zeroflag) post_force_templated<0,0,0,1,1,1>(); + else post_force_templated<0,0,0,1,1,0>(); + else + if (zeroflag) post_force_templated<0,0,0,1,0,1>(); + else post_force_templated<0,0,0,1,0,0>(); + else + if (rmass) + if (zeroflag) post_force_templated<0,0,0,0,1,1>(); + else post_force_templated<0,0,0,0,1,0>(); + else + if (zeroflag) post_force_templated<0,0,0,0,0,1>(); + else post_force_templated<0,0,0,0,0,0>(); } /* ---------------------------------------------------------------------- */ @@ -611,7 +569,7 @@ void FixLangevin::post_force_respa(int vflag, int ilevel, int /*iloop*/) ------------------------------------------------------------------------- */ template < int Tp_TSTYLEATOM, int Tp_GJF, int Tp_TALLY, - int Tp_BIAS, int Tp_RMASS, int Tp_ZERO > + int Tp_BIAS, int Tp_RMASS, int Tp_ZERO > void FixLangevin::post_force_templated() { double gamma1,gamma2; @@ -644,8 +602,9 @@ void FixLangevin::post_force_templated() // sum random force over all atoms in group // subtract sum/count from each atom in group - double fdrag[3],fran[3],fsum[3],fsumall[3], rantemp[3]; + double fdrag[3],fran[3],fsum[3],fsumall[3]; bigint count; + double fswap; double boltz = force->boltz; double dt = update->dt; @@ -672,33 +631,33 @@ void FixLangevin::post_force_templated() flangevin_allocated = 1; } - if (Tp_BIAS && !gjfflag) temperature->compute_scalar(); - else if (Tp_BIAS && update->ntimestep == update->beginstep && gjfflag) temperature->compute_scalar(); + if (Tp_BIAS) temperature->compute_scalar(); for (int i = 0; i < nlocal; i++) { if (mask[i] & groupbit) { if (Tp_TSTYLEATOM) tsqrt = sqrt(tforce[i]); if (Tp_RMASS) { gamma1 = -rmass[i] / t_period / ftm2v; - if (Tp_GJF) - gamma2 = sqrt(rmass[i]) * sqrt(2.0 * boltz / t_period / dt / mvv2e) / ftm2v; + if (!Tp_GJF) + gamma2 = sqrt(rmass[i]) * sqrt(24.0*boltz/t_period/dt/mvv2e) / ftm2v; else - gamma2 = sqrt(rmass[i]) * sqrt(24.0 * boltz / t_period / dt / mvv2e) / ftm2v; - gamma1 *= 1.0 / ratio[type[i]]; - gamma2 *= 1.0 / sqrt(ratio[type[i]]) * tsqrt; + gamma2 = sqrt(rmass[i]) * sqrt(2.0*boltz/t_period/dt/mvv2e) / ftm2v; + gamma1 *= 1.0/ratio[type[i]]; + gamma2 *= 1.0/sqrt(ratio[type[i]]) * tsqrt; } else { gamma1 = gfactor1[type[i]]; gamma2 = gfactor2[type[i]] * tsqrt; } - if (Tp_GJF) { - fran[0] = gamma2 * random->gaussian(); - fran[1] = gamma2 * random->gaussian(); - fran[2] = gamma2 * random->gaussian(); - } else { - fran[0] = gamma2 * (random->uniform()-0.5); - fran[1] = gamma2 * (random->uniform()-0.5); - fran[2] = gamma2 * (random->uniform()-0.5); + if (!Tp_GJF){ + fran[0] = gamma2*(random->uniform()-0.5); + fran[1] = gamma2*(random->uniform()-0.5); + fran[2] = gamma2*(random->uniform()-0.5); + } + else{ + fran[0] = gamma2*random->gaussian(); + fran[1] = gamma2*random->gaussian(); + fran[2] = gamma2*random->gaussian(); } if (Tp_BIAS) { @@ -717,21 +676,35 @@ void FixLangevin::post_force_templated() } if (Tp_GJF) { - wildcard[i][0] = f[i][0]; - wildcard[i][1] = f[i][1]; - wildcard[i][2] = f[i][2]; + if (Tp_BIAS) + temperature->remove_bias(i,v[i]); + lv[i][0] = gjfsib*v[i][0]; + lv[i][1] = gjfsib*v[i][1]; + lv[i][2] = gjfsib*v[i][2]; + if (Tp_BIAS) + temperature->restore_bias(i,v[i]); + if (Tp_BIAS) + temperature->restore_bias(i,lv[i]); - rantemp[0] = fran[0]; - rantemp[1] = fran[1]; - rantemp[2] = fran[2]; + fswap = 0.5*(fran[0]+franprev[i][0]); + franprev[i][0] = fran[0]; + fran[0] = fswap; + fswap = 0.5*(fran[1]+franprev[i][1]); + franprev[i][1] = fran[1]; + fran[1] = fswap; + fswap = 0.5*(fran[2]+franprev[i][2]); + franprev[i][2] = fran[2]; + fran[2] = fswap; - fran[0] = franprev[i][0]; - fran[1] = franprev[i][1]; - fran[2] = franprev[i][2]; - - fdrag[0] *= -2*t_period*((2*gjffac)-(1.0/gjffac)-1.0)/dt; - fdrag[1] *= -2*t_period*((2*gjffac)-(1.0/gjffac)-1.0)/dt; - fdrag[2] *= -2*t_period*((2*gjffac)-(1.0/gjffac)-1.0)/dt; + fdrag[0] *= gjfa; + fdrag[1] *= gjfa; + fdrag[2] *= gjfa; + fran[0] *= gjfa; + fran[1] *= gjfa; + fran[2] *= gjfa; + f[i][0] *= gjfa; + f[i][1] *= gjfa; + f[i][2] *= gjfa; } f[i][0] += fdrag[0] + fran[0]; @@ -739,61 +712,15 @@ void FixLangevin::post_force_templated() f[i][2] += fdrag[2] + fran[2]; if (Tp_TALLY) { - if (Tp_GJF && update->ntimestep != update->beginstep){ - if (Tp_BIAS) { - temperature->remove_bias(i,v[i]); - fdrag[0] = gamma1*gjffac*gjffac*v[i][0]; - fdrag[1] = gamma1*gjffac*gjffac*v[i][1]; - fdrag[2] = gamma1*gjffac*gjffac*v[i][2]; - temperature->restore_bias(i,v[i]); - } else { - fdrag[0] = gamma1*gjffac*gjffac*v[i][0]; - fdrag[1] = gamma1*gjffac*gjffac*v[i][1]; - fdrag[2] = gamma1*gjffac*gjffac*v[i][2]; - } - fran[0] *= gjffac; - fran[1] *= gjffac; - fran[2] *= gjffac; - } - else if (Tp_GJF && update->ntimestep == update->beginstep){ - fdrag[0] = 0.0; - fdrag[1] = 0.0; - fdrag[2] = 0.0; - } flangevin[i][0] = fdrag[0] + fran[0]; flangevin[i][1] = fdrag[1] + fran[1]; flangevin[i][2] = fdrag[2] + fran[2]; } if (Tp_ZERO) { - if (!Tp_GJF){ - fsum[0] += fran[0]; - fsum[1] += fran[1]; - fsum[2] += fran[2]; - } - else { - fsum[0] += franprev[i][0]; - fsum[1] += franprev[i][1]; - fsum[2] += franprev[i][2]; - } - } - - if (Tp_GJF) - { - franprev[i][0] = rantemp[0]; - franprev[i][1] = rantemp[1]; - franprev[i][2] = rantemp[2]; - - if (hsflag){ - lv[i][0] = v[i][0]; - lv[i][1] = v[i][1]; - lv[i][2] = v[i][2]; - if (tbiasflag == BIAS) { - lv[i][0] += bias[i][0]; - lv[i][1] += bias[i][1]; - lv[i][2] += bias[i][2]; - } - } + fsum[0] += fran[0]; + fsum[1] += fran[1]; + fsum[2] += fran[2]; } } } @@ -977,46 +904,34 @@ void FixLangevin::end_of_step() if (!tallyflag && !gjfflag) return; double **v = atom->v; - double **f = atom->f; int *mask = atom->mask; int nlocal = atom->nlocal; - double b[3] = {0.0,0.0,0.0}; - - if (gjfflag && tbiasflag == BIAS) temperature->compute_scalar(); energy_onestep = 0.0; - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) { - if (gjfflag){ - b[0] = v[i][0]; - b[1] = v[i][1]; - b[2] = v[i][2]; - f[i][0] = wildcard[i][0]; - f[i][1] = wildcard[i][1]; - f[i][2] = wildcard[i][2]; - if (tbiasflag == BIAS) temperature->remove_bias(i,v[i]); - wildcard[i][0] = v[i][0]; - wildcard[i][1] = v[i][1]; - wildcard[i][2] = v[i][2]; - if (tbiasflag == BIAS) { - bias[i][0] = b[0] - v[i][0]; - bias[i][1] = b[1] - v[i][1]; - bias[i][2] = b[2] - v[i][2]; - temperature->restore_bias(i, v[i]); - } - if (hsflag){ - v[i][0] = lv[i][0]; - v[i][1] = lv[i][1]; - v[i][2] = lv[i][2]; - } + + if (gjfflag){ + double tmp[3]; + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit){ + tmp[0] = v[i][0]; + tmp[1] = v[i][1]; + tmp[2] = v[i][2]; + v[i][0] = lv[i][0]; + v[i][1] = lv[i][1]; + v[i][2] = lv[i][2]; + lv[i][0] = tmp[0]; + lv[i][1] = tmp[1]; + lv[i][2] = tmp[2]; } - if (tallyflag) - energy_onestep += flangevin[i][0] * v[i][0] + flangevin[i][1] * v[i][1] + - flangevin[i][2] * v[i][2]; - } - if (tallyflag) { - energy += energy_onestep * update->dt; } + + if (tallyflag) + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + energy_onestep += flangevin[i][0]*v[i][0] + flangevin[i][1]*v[i][1] + + flangevin[i][2]*v[i][2]; + + energy += energy_onestep*update->dt; } /* ---------------------------------------------------------------------- */ @@ -1033,8 +948,8 @@ void FixLangevin::reset_dt() if (atom->mass) { for (int i = 1; i <= atom->ntypes; i++) { gfactor2[i] = sqrt(atom->mass[i]) * - sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / - force->ftm2v; + sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / + force->ftm2v; gfactor2[i] *= 1.0/sqrt(ratio[i]); } } @@ -1070,7 +985,7 @@ int FixLangevin::modify_param(int narg, char **arg) double FixLangevin::compute_scalar() { - if (!tallyflag && !flangevin_allocated) return 0.0; + if (!tallyflag || !flangevin_allocated) return 0.0; // capture the very first energy transfer to thermal reservoir @@ -1083,16 +998,13 @@ double FixLangevin::compute_scalar() for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) energy_onestep += flangevin[i][0]*v[i][0] + flangevin[i][1]*v[i][1] + - flangevin[i][2]*v[i][2]; + flangevin[i][2]*v[i][2]; energy = 0.5*energy_onestep*update->dt; } // convert midstep energy back to previous fullstep energy - double energy_me; - if (gjfflag) - energy_me = energy - energy_onestep*update->dt; - else - energy_me = energy - 0.5*energy_onestep*update->dt; + + double energy_me = energy - 0.5*energy_onestep*update->dt; double energy_all; MPI_Allreduce(&energy_me,&energy_all,1,MPI_DOUBLE,MPI_SUM,world); @@ -1119,9 +1031,7 @@ void *FixLangevin::extract(const char *str, int &dim) double FixLangevin::memory_usage() { double bytes = 0.0; - if (gjfflag) bytes += atom->nmax*3*2 * sizeof(double); - if (gjfflag) if (hsflag) bytes += atom->nmax*3 * sizeof(double); - if (gjfflag && tbiasflag == BIAS) bytes += atom->nmax*3 * sizeof(double); + if (gjfflag) bytes += atom->nmax*6 * sizeof(double); if (tallyflag) bytes += atom->nmax*3 * sizeof(double); if (tforce) bytes += atom->nmax * sizeof(double); return bytes; @@ -1134,9 +1044,7 @@ double FixLangevin::memory_usage() void FixLangevin::grow_arrays(int nmax) { memory->grow(franprev,nmax,3,"fix_langevin:franprev"); - memory->grow(wildcard,nmax,3,"fix_langevin:wildcard"); - if (hsflag) memory->grow(lv,nmax,3,"fix_langevin:lv"); - if (tbiasflag == BIAS) memory->grow(bias,nmax,3,"fix_langevin:bias"); + memory->grow(lv,nmax,3,"fix_langevin:lv"); } /* ---------------------------------------------------------------------- @@ -1148,19 +1056,9 @@ void FixLangevin::copy_arrays(int i, int j, int /*delflag*/) franprev[j][0] = franprev[i][0]; franprev[j][1] = franprev[i][1]; franprev[j][2] = franprev[i][2]; - wildcard[j][0] = wildcard[i][0]; - wildcard[j][1] = wildcard[i][1]; - wildcard[j][2] = wildcard[i][2]; - if (hsflag) { - lv[j][0] = lv[i][0]; - lv[j][1] = lv[i][1]; - lv[j][2] = lv[i][2]; - } - if (tbiasflag == BIAS){ - bias[j][0] = bias[i][0]; - bias[j][1] = bias[i][1]; - bias[j][2] = bias[i][2]; - } + lv[j][0] = lv[i][0]; + lv[j][1] = lv[i][1]; + lv[j][2] = lv[i][2]; } /* ---------------------------------------------------------------------- @@ -1173,19 +1071,9 @@ int FixLangevin::pack_exchange(int i, double *buf) buf[n++] = franprev[i][0]; buf[n++] = franprev[i][1]; buf[n++] = franprev[i][2]; - buf[n++] = wildcard[i][0]; - buf[n++] = wildcard[i][1]; - buf[n++] = wildcard[i][2]; - if (hsflag){ - buf[n++] = lv[i][0]; - buf[n++] = lv[i][1]; - buf[n++] = lv[i][2]; - } - if (tbiasflag == BIAS){ - buf[n++] = bias[i][0]; - buf[n++] = bias[i][1]; - buf[n++] = bias[i][2]; - } + buf[n++] = lv[i][0]; + buf[n++] = lv[i][1]; + buf[n++] = lv[i][2]; return n; } @@ -1199,18 +1087,8 @@ int FixLangevin::unpack_exchange(int nlocal, double *buf) franprev[nlocal][0] = buf[n++]; franprev[nlocal][1] = buf[n++]; franprev[nlocal][2] = buf[n++]; - wildcard[nlocal][0] = buf[n++]; - wildcard[nlocal][1] = buf[n++]; - wildcard[nlocal][2] = buf[n++]; - if (hsflag){ - lv[nlocal][0] = buf[n++]; - lv[nlocal][1] = buf[n++]; - lv[nlocal][2] = buf[n++]; - } - if (tbiasflag == BIAS){ - bias[nlocal][0] = buf[n++]; - bias[nlocal][1] = buf[n++]; - bias[nlocal][2] = buf[n++]; - } + lv[nlocal][0] = buf[n++]; + lv[nlocal][1] = buf[n++]; + lv[nlocal][2] = buf[n++]; return n; -} +} \ No newline at end of file diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 939b161c35..8b8c1cd6c8 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -2,12 +2,10 @@ 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. ------------------------------------------------------------------------- */ @@ -24,68 +22,64 @@ FixStyle(langevin,FixLangevin) namespace LAMMPS_NS { -class FixLangevin : public Fix { - public: - FixLangevin(class LAMMPS *, int, char **); - virtual ~FixLangevin(); - int setmask(); - void init(); - void setup(int); - //virtual void initial_integrate(int); - virtual void post_integrate(); - virtual void post_force(int); - void post_force_respa(int, int, int); - virtual void end_of_step(); - void reset_target(double); - void reset_dt(); - int modify_param(int, char **); - virtual double compute_scalar(); - double memory_usage(); - virtual void *extract(const char *, int &); - void grow_arrays(int); - void copy_arrays(int, int, int); - int pack_exchange(int, double *); - int unpack_exchange(int, double *); + class FixLangevin : public Fix { + public: + FixLangevin(class LAMMPS *, int, char **); + virtual ~FixLangevin(); + int setmask(); + void init(); + void setup(int); + void initial_integrate_respa(int, int, int); + virtual void initial_integrate(int); + virtual void post_force(int); + void post_force_respa(int, int, int); + virtual void end_of_step(); + void reset_target(double); + void reset_dt(); + int modify_param(int, char **); + virtual double compute_scalar(); + double memory_usage(); + virtual void *extract(const char *, int &); + void grow_arrays(int); + void copy_arrays(int, int, int); + int pack_exchange(int, double *); + int unpack_exchange(int, double *); - protected: - int gjfflag,oflag,tallyflag,zeroflag,tbiasflag,hsflag; - int flangevin_allocated; - double ascale; - double t_start,t_stop,t_period,t_target; - double *gfactor1,*gfactor2,*ratio; - double energy,energy_onestep; - double tsqrt; - int tstyle,tvar; - double gjffac; - char *tstr; + protected: + int gjfflag,oflag,tallyflag,zeroflag,tbiasflag; + int flangevin_allocated; + double ascale; + double t_start,t_stop,t_period,t_target; + double *gfactor1,*gfactor2,*ratio; + double energy,energy_onestep; + double tsqrt; + int tstyle,tvar; + double gjfa, gjfsib; //gjf a and gjf sqrt inverse b + char *tstr; - class AtomVecEllipsoid *avec; + class AtomVecEllipsoid *avec; - int maxatom1,maxatom2; - double **flangevin; - double *tforce; - double **franprev; - double **lv; //2GJ velocity or half-step velocity - double **wildcard; - double **bias; //Bias velocity + int maxatom1,maxatom2; + double **flangevin; + double *tforce; + double **franprev; + double **lv; //half step velocity - int nvalues; + char *id_temp; + class Compute *temperature; - char *id_temp; - class Compute *temperature; + int nlevels_respa; + class RanMars *random; + int seed; - int nlevels_respa; - class RanMars *random; - int seed; + template < int Tp_TSTYLEATOM, int Tp_GJF, int Tp_TALLY, + int Tp_BIAS, int Tp_RMASS, int Tp_ZERO > + void post_force_templated(); - template < int Tp_TSTYLEATOM, int Tp_GJF, int Tp_TALLY, - int Tp_BIAS, int Tp_RMASS, int Tp_ZERO > - void post_force_templated(); - - void omega_thermostat(); - void angmom_thermostat(); - void compute_target(); -}; + void omega_thermostat(); + void angmom_thermostat(); + void compute_target(); + }; } @@ -93,62 +87,35 @@ class FixLangevin : public Fix { #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: Fix langevin period must be > 0.0 - The time window for temperature relaxation must be > 0 - E: Fix langevin omega requires atom style sphere - Self-explanatory. - E: Fix langevin angmom requires atom style ellipsoid - Self-explanatory. - E: Variable name for fix langevin does not exist - Self-explanatory. - E: Variable for fix langevin is invalid style - It must be an equal-style variable. - E: Fix langevin omega requires extended particles - One of the particles has radius 0.0. - E: Fix langevin angmom requires extended particles - This fix option cannot be used with point particles. - E: Cannot zero Langevin force of 0 atoms - The group has zero atoms, so you cannot request its force be zeroed. - E: Fix langevin variable returned negative temperature - Self-explanatory. - E: Could not find fix_modify temperature ID - The compute ID for computing temperature does not exist. - E: Fix_modify temperature ID does not compute temperature - The compute ID assigned to the fix must compute temperature. - W: Group for fix_modify temp != fix group - The fix_modify command is specifying a temperature computation that computes a temperature on a different group of atoms than the fix itself operates on. This is probably not what you want to do. - */ From 801c1656533e65234d97ef2d996c57afce76a80e Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Wed, 21 Aug 2019 20:11:43 -0700 Subject: [PATCH 089/237] Added onsite GJF formalism --- src/fix_langevin.cpp | 49 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index b8144fc5f3..6971b145ec 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -90,6 +90,7 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : for (int i = 1; i <= atom->ntypes; i++) ratio[i] = 1.0; ascale = 0.0; gjfflag = 0; + fsflag = 0; oflag = 0; tallyflag = 0; zeroflag = 0; @@ -103,8 +104,11 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg],"gjf") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command"); - if (strcmp(arg[iarg+1],"no") == 0) gjfflag = 0; - else if (strcmp(arg[iarg+1],"yes") == 0) gjfflag = 1; + if (strcmp(arg[iarg+1],"no") == 0) {gjfflag = 0; fsflag = 0;} + else if (strcmp(arg[iarg+1],"yes") == 0) + error->all(FLERR,"Fix langevin gjf yes is outdated, please use vhalf or vfull"); + else if (strcmp(arg[iarg+1],"vhalf") == 0) {gjfflag = 1; fsflag = 0;} + else if (strcmp(arg[iarg+1],"vfull") == 0) {gjfflag = 1; fsflag = 1;} else error->all(FLERR,"Illegal fix langevin command"); iarg += 2; } else if (strcmp(arg[iarg],"omega") == 0) { @@ -431,7 +435,7 @@ void FixLangevin::post_force(int /*vflag*/) if (tstyle == ATOM) if (gjfflag) - if (tallyflag) + if (tallyflag || fsflag) if (tbiasflag == BIAS) if (rmass) if (zeroflag) post_force_templated<1,1,1,1,1,1>(); @@ -462,7 +466,7 @@ void FixLangevin::post_force(int /*vflag*/) if (zeroflag) post_force_templated<1,1,0,0,0,1>(); else post_force_templated<1,1,0,0,0,0>(); else - if (tallyflag) + if (tallyflag || fsflag) if (tbiasflag == BIAS) if (rmass) if (zeroflag) post_force_templated<1,0,1,1,1,1>(); @@ -494,7 +498,7 @@ void FixLangevin::post_force(int /*vflag*/) else post_force_templated<1,0,0,0,0,0>(); else if (gjfflag) - if (tallyflag) + if (tallyflag || fsflag) if (tbiasflag == BIAS) if (rmass) if (zeroflag) post_force_templated<0,1,1,1,1,1>(); @@ -525,7 +529,7 @@ void FixLangevin::post_force(int /*vflag*/) if (zeroflag) post_force_templated<0,1,0,0,0,1>(); else post_force_templated<0,1,0,0,0,0>(); else - if (tallyflag) + if (tallyflag || fsflag) if (tbiasflag == BIAS) if (rmass) if (zeroflag) post_force_templated<0,0,1,1,1,1>(); @@ -906,6 +910,13 @@ void FixLangevin::end_of_step() double **v = atom->v; int *mask = atom->mask; int nlocal = atom->nlocal; + double ftm2v = force->ftm2v; + double gamma1; double dtfm; + double dt = update->dt; + double *mass = atom->mass; + double *rmass = atom->rmass; + double **f = atom->f; + int *type = atom->type; energy_onestep = 0.0; @@ -916,9 +927,27 @@ void FixLangevin::end_of_step() tmp[0] = v[i][0]; tmp[1] = v[i][1]; tmp[2] = v[i][2]; - v[i][0] = lv[i][0]; - v[i][1] = lv[i][1]; - v[i][2] = lv[i][2]; + if (!fsflag){ + v[i][0] = lv[i][0]; + v[i][1] = lv[i][1]; + v[i][2] = lv[i][2]; + } + else{ + if (atom->rmass) { + dtfm = 0.5 * dt / rmass[i]; + gamma1 = -rmass[i] / t_period / ftm2v; + gamma1 *= 1.0/ratio[type[i]]; + } else { + dtfm = 0.5 * dt / mass[type[i]]; + gamma1 = gfactor1[type[i]]; + } + v[i][0] = flangevin[i][0] - franprev[i][0] + gjfa * (gjfsib/2 + gamma1/gjfsib) * lv[i][0] + + gjfsib*gjfsib*(dtfm * f[i][0] + v[i][0])/2; + v[i][1] = flangevin[i][1] - franprev[i][1] + gjfa * (gjfsib/2 + gamma1/gjfsib) * lv[i][1] + + gjfsib*gjfsib*(dtfm * f[i][1] + v[i][1])/2; + v[i][2] = flangevin[i][2] - franprev[i][2] + gjfa * (gjfsib/2 + gamma1/gjfsib) * lv[i][2] + + gjfsib*gjfsib*(dtfm * f[i][2] + v[i][2])/2; + } lv[i][0] = tmp[0]; lv[i][1] = tmp[1]; lv[i][2] = tmp[2]; @@ -1032,7 +1061,7 @@ double FixLangevin::memory_usage() { double bytes = 0.0; if (gjfflag) bytes += atom->nmax*6 * sizeof(double); - if (tallyflag) bytes += atom->nmax*3 * sizeof(double); + if (tallyflag || fsflag) bytes += atom->nmax*3 * sizeof(double); if (tforce) bytes += atom->nmax * sizeof(double); return bytes; } From ceeb7da5911c47c7b7eda617a172954bc04a1134 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Wed, 21 Aug 2019 20:47:17 -0700 Subject: [PATCH 090/237] Added onsite GJF formalism --- src/fix_langevin.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 8b8c1cd6c8..5abfa53288 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -46,7 +46,7 @@ namespace LAMMPS_NS { int unpack_exchange(int, double *); protected: - int gjfflag,oflag,tallyflag,zeroflag,tbiasflag; + int gjfflag,fsflag,oflag,tallyflag,zeroflag,tbiasflag; int flangevin_allocated; double ascale; double t_start,t_stop,t_period,t_target; From 8ec4e3fc9164fb21a2ceadf5211b3abe7987690f Mon Sep 17 00:00:00 2001 From: julient31 Date: Thu, 22 Aug 2019 10:48:58 -0600 Subject: [PATCH 091/237] Commit JT 082219 - modified min spin names (removed oso from spin/cg and spin/lbfgs) - modified associated option name (from spin_oso_cg to spin/cg, same for lbfgs) - modified .gitignore, doc pages, and examples accordingly --- doc/src/min_modify.txt | 14 ++-- doc/src/min_spin.txt | 26 +++---- doc/src/min_style.txt | 10 +-- doc/src/minimize.txt | 2 +- doc/src/neb_spin.txt | 4 +- examples/SPIN/spinmin/in.spinmin_cg.bfo | 2 +- examples/SPIN/spinmin/in.spinmin_lbfgs.bfo | 2 +- src/.gitignore | 8 +-- .../{min_spin_oso_cg.cpp => min_spin_cg.cpp} | 58 +++++++-------- src/SPIN/{min_spin_oso_cg.h => min_spin_cg.h} | 12 ++-- ..._spin_oso_lbfgs.cpp => min_spin_lbfgs.cpp} | 70 +++++++++---------- ...{min_spin_oso_lbfgs.h => min_spin_lbfgs.h} | 12 ++-- 12 files changed, 110 insertions(+), 110 deletions(-) rename src/SPIN/{min_spin_oso_cg.cpp => min_spin_cg.cpp} (91%) rename src/SPIN/{min_spin_oso_cg.h => min_spin_cg.h} (90%) rename src/SPIN/{min_spin_oso_lbfgs.cpp => min_spin_lbfgs.cpp} (90%) rename src/SPIN/{min_spin_oso_lbfgs.h => min_spin_lbfgs.h} (90%) diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index 857c3551aa..22ee232467 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -72,7 +72,7 @@ that difference may be smaller than machine epsilon even if atoms could move in the gradient direction to reduce forces further. The choice of a norm can be modified for the min styles {cg}, {sd}, -{quickmin}, {fire}, {spin}, {spin_oso_cg} and {spin_oso_lbfgs} using +{quickmin}, {fire}, {spin}, {spin/cg} and {spin/lbfgs} using the {norm} keyword. The default {euclidean} norm computes the 2-norm (length) of the global force vector. The {max} norm computes the maximum value @@ -88,19 +88,19 @@ adaptive timestep used in the {spin} minimization. See "min_spin"_min_spin.html for more information about those quantities. -The choice of a line search algorithm for the {spin_oso_cg} and -{spin_oso_lbfgs} styles can be specified via the {line} keyword. +The choice of a line search algorithm for the {spin/cg} and +{spin/lbfgs} styles can be specified via the {line} keyword. The {spin_cubic} and {spin_none} only make sense when one of those two minimization styles is declared. The {spin_cubic} performs the line search based on a cubic interpolation of the energy along the search direction. The {spin_none} keyword deactivates the line search procedure. -The {spin_none} is a default value for {line} keyword for both {spin_oso_lbfgs} -and {spin_oso_cg}. Convergence of {spin_oso_lbfgs} can be more robust if +The {spin_none} is a default value for {line} keyword for both {spin/lbfgs} +and {spin/cg}. Convergence of {spin/lbfgs} can be more robust if {spin_cubic} line search is used. [Restrictions:] The line search procedure of styles -{spin_oso_cg} and {spin_oso_lbfgs} cannot be used for magnetic +{spin/cg} and {spin/lbfgs} cannot be used for magnetic GNEB calculations. See "neb/spin"_neb_spin.html for more explanation. @@ -112,6 +112,6 @@ explanation. The option defaults are dmax = 0.1, line = quadratic and norm = euclidean. -For the {spin}, {spin_oso_cg} and {spin_oso_lbfgs} styles, the +For the {spin}, {spin/cg} and {spin/lbfgs} styles, the option defaults are alpha_damp = 1.0, discrete_factor = 10.0, line = spin_none, and norm = euclidean. diff --git a/doc/src/min_spin.txt b/doc/src/min_spin.txt index 575db2dc74..ba034cfbb9 100644 --- a/doc/src/min_spin.txt +++ b/doc/src/min_spin.txt @@ -6,18 +6,18 @@ :line min_style spin command :h3 -min_style spin_oso_cg command :h3 -min_style spin_oso_lbfgs command :h3 +min_style spin/cg command :h3 +min_style spin/lbfgs command :h3 [Syntax:] min_style spin -min_style spin_oso_cg -min_style spin_oso_lbfgs :pre +min_style spin/cg +min_style spin/lbfgs :pre [Examples:] -min_style spin_oso_lbfgs +min_style spin/lbfgs min_modify line spin_cubic discrete_factor 10.0 :pre [Description:] @@ -51,35 +51,35 @@ definition of this timestep. {discrete_factor} can be defined with the "min_modify"_min_modify.html command. -Style {spin_oso_cg} defines an orthogonal spin optimization +Style {spin/cg} defines an orthogonal spin optimization (OSO) combined to a conjugate gradient (CG) algorithm. The "min_modify"_min_modify.html command can be used to -couple the {spin_oso_cg} to a line search procedure, and to modify the +couple the {spin/cg} to a line search procedure, and to modify the discretization factor {discrete_factor}. -By default, style {spin_oso_cg} does not employ the line search procedure +By default, style {spin/cg} does not employ the line search procedure and uses the adaptive time-step technique in the same way as style {spin}. -Style {spin_oso_lbfgs} defines an orthogonal spin optimization +Style {spin/lbfgs} defines an orthogonal spin optimization (OSO) combined to a limited-memory Broyden-Fletcher-Goldfarb-Shanno (L-BFGS) algorithm. -By default, style {spin_oso_lbfgs} does not employ line search procedure. +By default, style {spin/lbfgs} does not employ line search procedure. If the line search procedure is not used then the discrete factor defines the maximum root mean squared rotation angle of spins by equation {pi/(5*Kappa)}. The default value for Kappa is 10. The {spin_cubic} line search can improve the convergence of the -{spin_oso_lbfgs} algorithm. +{spin/lbfgs} algorithm. The "min_modify"_min_modify.html command can be used to activate the line search procedure, and to modify the discretization factor {discrete_factor}. -For more information about styles {spin_oso_cg} and {spin_oso_lbfgs}, +For more information about styles {spin/cg} and {spin/lbfgs}, see their implementation reported in "(Ivanov)"_#Ivanov1. NOTE: All the {spin} styles replace the force tolerance by a torque tolerance. See "minimize"_minimize.html for more explanation. -NOTE: The {spin_oso_cg} and {spin_oso_lbfgs} styles can be used +NOTE: The {spin/cg} and {spin/lbfgs} styles can be used for magnetic NEB calculations only if the line search procedure is deactivated. See "neb/spin"_neb_spin.html for more explanation. diff --git a/doc/src/min_style.txt b/doc/src/min_style.txt index 7c40fd4947..9613da7b13 100644 --- a/doc/src/min_style.txt +++ b/doc/src/min_style.txt @@ -11,7 +11,7 @@ min_style command :h3 min_style style :pre -style = {cg} or {hftn} or {sd} or {quickmin} or {fire} or {spin} or {spin_oso_cg} or {spin_oso_lbfgs} :ul +style = {cg} or {hftn} or {sd} or {quickmin} or {fire} or {spin} or {spin/cg} or {spin/lbfgs} :ul [Examples:] @@ -65,21 +65,21 @@ a minimization. Style {spin} is a damped spin dynamics with an adaptive timestep. -Style {spin_oso_cg} uses an orthogonal spin optimization (OSO) +Style {spin/cg} uses an orthogonal spin optimization (OSO) combined to a conjugate gradient (CG) approach to minimize spin configurations. -Style {spin_oso_lbfgs} uses an orthogonal spin optimization (OSO) +Style {spin/lbfgs} uses an orthogonal spin optimization (OSO) combined to a limited-memory Broyden-Fletcher-Goldfarb-Shanno (LBFGS) approach to minimize spin configurations. See the "min/spin"_min_spin.html doc page for more information -about the {spin}, {spin_oso_cg} and {spin_oso_lbfgs} styles. +about the {spin}, {spin/cg} and {spin/lbfgs} styles. Either the {quickmin} and {fire} styles are useful in the context of nudged elastic band (NEB) calculations via the "neb"_neb.html command. -Either the {spin}, {spin_oso_cg} and {spin_oso_lbfgs} styles are useful +Either the {spin}, {spin/cg} and {spin/lbfgs} styles are useful in the context of magnetic geodesic nudged elastic band (GNEB) calculations via the "neb/spin"_neb_spin.html command. diff --git a/doc/src/minimize.txt b/doc/src/minimize.txt index 1de925d6c8..bfdc02bedf 100644 --- a/doc/src/minimize.txt +++ b/doc/src/minimize.txt @@ -104,7 +104,7 @@ the number of outer iterations or timesteps exceeds {maxiter} the number of total force evaluations exceeds {maxeval} :ul NOTE: the "minimization style"_min_style.html {spin}, -{spin_oso_cg}, and {spin_oso_lbfgs} replace +{spin/cg}, and {spin/lbfgs} replace the force tolerance {ftol} by a torque tolerance. The minimization procedure stops if the 2-norm (length) of the torque vector on atom (defined as the cross product between the diff --git a/doc/src/neb_spin.txt b/doc/src/neb_spin.txt index 2fdfda8c66..b64df39219 100644 --- a/doc/src/neb_spin.txt +++ b/doc/src/neb_spin.txt @@ -173,7 +173,7 @@ A NEB calculation proceeds in two stages, each of which is a minimization procedure. To enable this, you must first define a "min_style"_min_style.html, using either the {spin}, -{spin_oso_cg}, or {spin_oso_lbfgs} style (see +{spin/cg}, or {spin/lbfgs} style (see "min_spin"_min_spin.html for more information). The other styles cannot be used, since they relax the lattice degrees of freedom instead of the spins. @@ -359,7 +359,7 @@ This command can only be used if LAMMPS was built with the SPIN package. See the "Build package"_Build_package.html doc page for more info. -The line search procedures of the {spin_oso_cg} and {spin_oso_lbfgs} +The line search procedures of the {spin/cg} and {spin/lbfgs} minimization styles cannot be used in a GNEB calculation. :line diff --git a/examples/SPIN/spinmin/in.spinmin_cg.bfo b/examples/SPIN/spinmin/in.spinmin_cg.bfo index 8c288763c4..9d57399a56 100644 --- a/examples/SPIN/spinmin/in.spinmin_cg.bfo +++ b/examples/SPIN/spinmin/in.spinmin_cg.bfo @@ -49,6 +49,6 @@ thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] -min_style spin_oso_cg +min_style spin/cg # min_modify line spin_none discrete_factor 10.0 minimize 1.0e-10 1.0e-10 10000 10000 diff --git a/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo b/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo index 6a9104cc9c..a73b863b11 100644 --- a/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo +++ b/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo @@ -49,6 +49,6 @@ thermo_modify format float %20.15g compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] -min_style spin_oso_lbfgs +min_style spin/lbfgs # min_modify line spin_cubic discrete_factor 10.0 minimize 1.0e-15 1.0e-10 10000 1000 diff --git a/src/.gitignore b/src/.gitignore index 595276853c..5848874d94 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -161,10 +161,10 @@ /fix_setforce_spin.h /min_spin.cpp /min_spin.h -/min_spin_oso_cg.cpp -/min_spin_oso_cg.h -/min_spin_oso_lbfgs.cpp -/min_spin_oso_lbfgs.h +/min_spin_cg.cpp +/min_spin_cg.h +/min_spin_lbfgs.cpp +/min_spin_lbfgs.h /neb_spin.cpp /neb_spin.h /pair_spin.cpp diff --git a/src/SPIN/min_spin_oso_cg.cpp b/src/SPIN/min_spin_cg.cpp similarity index 91% rename from src/SPIN/min_spin_oso_cg.cpp rename to src/SPIN/min_spin_cg.cpp index f1f2f72436..322915c0f3 100644 --- a/src/SPIN/min_spin_oso_cg.cpp +++ b/src/SPIN/min_spin_cg.cpp @@ -25,7 +25,7 @@ #include #include #include -#include "min_spin_oso_cg.h" +#include "min_spin_cg.h" #include "universe.h" #include "atom.h" #include "citeme.h" @@ -44,8 +44,8 @@ using namespace LAMMPS_NS; using namespace MathConst; -static const char cite_minstyle_spin_oso_cg[] = - "min_style spin/oso_cg command:\n\n" +static const char cite_minstyle_spin_cg[] = + "min_style spin/cg command:\n\n" "@article{ivanov2019fast,\n" "title={Fast and Robust Algorithm for the Minimisation of the Energy of " "Spin Systems},\n" @@ -63,10 +63,10 @@ static const char cite_minstyle_spin_oso_cg[] = /* ---------------------------------------------------------------------- */ -MinSpinOSO_CG::MinSpinOSO_CG(LAMMPS *lmp) : +MinSpinCG::MinSpinCG(LAMMPS *lmp) : Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL), sp_copy(NULL) { - if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_cg); + if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_cg); nlocal_max = 0; // nreplica = number of partitions @@ -81,7 +81,7 @@ MinSpinOSO_CG::MinSpinOSO_CG(LAMMPS *lmp) : /* ---------------------------------------------------------------------- */ -MinSpinOSO_CG::~MinSpinOSO_CG() +MinSpinCG::~MinSpinCG() { memory->destroy(g_old); memory->destroy(g_cur); @@ -92,7 +92,7 @@ MinSpinOSO_CG::~MinSpinOSO_CG() /* ---------------------------------------------------------------------- */ -void MinSpinOSO_CG::init() +void MinSpinCG::init() { local_iter = 0; der_e_cur = 0.0; @@ -120,16 +120,16 @@ void MinSpinOSO_CG::init() // allocate tables nlocal_max = atom->nlocal; - memory->grow(g_old,3*nlocal_max,"min/spin/oso/cg:g_old"); - memory->grow(g_cur,3*nlocal_max,"min/spin/oso/cg:g_cur"); - memory->grow(p_s,3*nlocal_max,"min/spin/oso/cg:p_s"); + memory->grow(g_old,3*nlocal_max,"min/spin/cg:g_old"); + memory->grow(g_cur,3*nlocal_max,"min/spin/cg:g_cur"); + memory->grow(p_s,3*nlocal_max,"min/spin/cg:p_s"); if (use_line_search) - memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/cg:sp_copy"); + memory->grow(sp_copy,nlocal_max,3,"min/spin/cg:sp_copy"); } /* ---------------------------------------------------------------------- */ -void MinSpinOSO_CG::setup_style() +void MinSpinCG::setup_style() { double **v = atom->v; int nlocal = atom->nlocal; @@ -137,7 +137,7 @@ void MinSpinOSO_CG::setup_style() // check if the atom/spin style is defined if (!atom->sp_flag) - error->all(FLERR,"min/spin_oso_cg requires atom/spin style"); + error->all(FLERR,"min spin/cg requires atom/spin style"); for (int i = 0; i < nlocal; i++) v[i][0] = v[i][1] = v[i][2] = 0.0; @@ -145,7 +145,7 @@ void MinSpinOSO_CG::setup_style() /* ---------------------------------------------------------------------- */ -int MinSpinOSO_CG::modify_param(int narg, char **arg) +int MinSpinCG::modify_param(int narg, char **arg) { if (strcmp(arg[0],"discrete_factor") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); @@ -160,7 +160,7 @@ int MinSpinOSO_CG::modify_param(int narg, char **arg) called after atoms have migrated ------------------------------------------------------------------------- */ -void MinSpinOSO_CG::reset_vectors() +void MinSpinCG::reset_vectors() { // atomic dof @@ -179,7 +179,7 @@ void MinSpinOSO_CG::reset_vectors() minimization via orthogonal spin optimisation ------------------------------------------------------------------------- */ -int MinSpinOSO_CG::iterate(int maxiter) +int MinSpinCG::iterate(int maxiter) { int nlocal = atom->nlocal; bigint ntimestep; @@ -191,11 +191,11 @@ int MinSpinOSO_CG::iterate(int maxiter) if (nlocal_max < nlocal) { local_iter = 0; nlocal_max = nlocal; - memory->grow(g_old,3*nlocal_max,"min/spin/oso/cg:g_old"); - memory->grow(g_cur,3*nlocal_max,"min/spin/oso/cg:g_cur"); - memory->grow(p_s,3*nlocal_max,"min/spin/oso/cg:p_s"); + memory->grow(g_old,3*nlocal_max,"min/spin/cg:g_old"); + memory->grow(g_cur,3*nlocal_max,"min/spin/cg:g_cur"); + memory->grow(p_s,3*nlocal_max,"min/spin/cg:p_s"); if (use_line_search) - memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/cg:sp_copy"); + memory->grow(sp_copy,nlocal_max,3,"min/spin/cg:sp_copy"); } for (int iter = 0; iter < maxiter; iter++) { @@ -309,7 +309,7 @@ int MinSpinOSO_CG::iterate(int maxiter) calculate gradients ---------------------------------------------------------------------- */ -void MinSpinOSO_CG::calc_gradient() +void MinSpinCG::calc_gradient() { int nlocal = atom->nlocal; double **sp = atom->sp; @@ -337,7 +337,7 @@ void MinSpinOSO_CG::calc_gradient() Optimization' Second Edition, 2006 (p. 121) ---------------------------------------------------------------------- */ -void MinSpinOSO_CG::calc_search_direction() +void MinSpinCG::calc_search_direction() { int nlocal = atom->nlocal; double g2old = 0.0; @@ -398,7 +398,7 @@ void MinSpinOSO_CG::calc_search_direction() rotation of spins along the search direction ---------------------------------------------------------------------- */ -void MinSpinOSO_CG::advance_spins() +void MinSpinCG::advance_spins() { int nlocal = atom->nlocal; double **sp = atom->sp; @@ -429,7 +429,7 @@ void MinSpinOSO_CG::advance_spins() [-y, -z, 0]] ------------------------------------------------------------------------- */ -void MinSpinOSO_CG::rodrigues_rotation(const double *upp_tr, double *out) +void MinSpinCG::rodrigues_rotation(const double *upp_tr, double *out) { double theta,A,B,D,x,y,z; double s1,s2,s3,a1,a2,a3; @@ -490,7 +490,7 @@ void MinSpinOSO_CG::rodrigues_rotation(const double *upp_tr, double *out) m -- 3x3 matrix , v -- 3-d vector ------------------------------------------------------------------------- */ -void MinSpinOSO_CG::vm3(const double *m, const double *v, double *out) +void MinSpinCG::vm3(const double *m, const double *v, double *out) { for(int i = 0; i < 3; i++){ out[i] = 0.0; @@ -502,7 +502,7 @@ void MinSpinOSO_CG::vm3(const double *m, const double *v, double *out) advance spins ------------------------------------------------------------------------- */ -void MinSpinOSO_CG::make_step(double c, double *energy_and_der) +void MinSpinCG::make_step(double c, double *energy_and_der) { double p_scaled[3]; int nlocal = atom->nlocal; @@ -549,7 +549,7 @@ void MinSpinOSO_CG::make_step(double c, double *energy_and_der) using the cubic interpolation ------------------------------------------------------------------------- */ -int MinSpinOSO_CG::calc_and_make_step(double a, double b, int index) +int MinSpinCG::calc_and_make_step(double a, double b, int index) { double e_and_d[2] = {0.0,0.0}; double alpha,c1,c2,c3; @@ -601,7 +601,7 @@ int MinSpinOSO_CG::calc_and_make_step(double a, double b, int index) Approximate descent ------------------------------------------------------------------------- */ -int MinSpinOSO_CG::adescent(double phi_0, double phi_j){ +int MinSpinCG::adescent(double phi_0, double phi_j){ double eps = 1.0e-6; @@ -615,7 +615,7 @@ int MinSpinOSO_CG::adescent(double phi_0, double phi_j){ evaluate max timestep ---------------------------------------------------------------------- */ -double MinSpinOSO_CG::evaluate_dt() +double MinSpinCG::evaluate_dt() { double dtmax; double fmsq; diff --git a/src/SPIN/min_spin_oso_cg.h b/src/SPIN/min_spin_cg.h similarity index 90% rename from src/SPIN/min_spin_oso_cg.h rename to src/SPIN/min_spin_cg.h index d6dc7c03d0..0eed7a61e6 100644 --- a/src/SPIN/min_spin_oso_cg.h +++ b/src/SPIN/min_spin_cg.h @@ -13,21 +13,21 @@ #ifdef MINIMIZE_CLASS -MinimizeStyle(spin_oso_cg, MinSpinOSO_CG) +MinimizeStyle(spin/cg, MinSpinCG) #else -#ifndef LMP_MIN_SPIN_OSO_CG_H -#define LMP_MIN_SPIN_OSO_CG_H +#ifndef LMP_MIN_SPIN_CG_H +#define LMP_MIN_SPIN_CG_H #include "min.h" namespace LAMMPS_NS { -class MinSpinOSO_CG: public Min { +class MinSpinCG: public Min { public: - MinSpinOSO_CG(class LAMMPS *); - virtual ~MinSpinOSO_CG(); + MinSpinCG(class LAMMPS *); + virtual ~MinSpinCG(); void init(); void setup_style(); void reset_vectors(); diff --git a/src/SPIN/min_spin_oso_lbfgs.cpp b/src/SPIN/min_spin_lbfgs.cpp similarity index 90% rename from src/SPIN/min_spin_oso_lbfgs.cpp rename to src/SPIN/min_spin_lbfgs.cpp index 8623a8bb29..891dec5c93 100644 --- a/src/SPIN/min_spin_oso_lbfgs.cpp +++ b/src/SPIN/min_spin_lbfgs.cpp @@ -25,7 +25,7 @@ #include #include #include -#include "min_spin_oso_lbfgs.h" +#include "min_spin_lbfgs.h" #include "atom.h" #include "citeme.h" #include "comm.h" @@ -43,8 +43,8 @@ using namespace LAMMPS_NS; using namespace MathConst; -static const char cite_minstyle_spin_oso_lbfgs[] = - "min_style spin/oso_lbfgs command:\n\n" +static const char cite_minstyle_spin_lbfgs[] = + "min_style spin/lbfgs command:\n\n" "@article{ivanov2019fast,\n" "title={Fast and Robust Algorithm for the Minimisation of the Energy of " "Spin Systems},\n" @@ -62,10 +62,10 @@ static const char cite_minstyle_spin_oso_lbfgs[] = /* ---------------------------------------------------------------------- */ -MinSpinOSO_LBFGS::MinSpinOSO_LBFGS(LAMMPS *lmp) : +MinSpinLBFGS::MinSpinLBFGS(LAMMPS *lmp) : Min(lmp), g_old(NULL), g_cur(NULL), p_s(NULL), rho(NULL), ds(NULL), dy(NULL), sp_copy(NULL) { - if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_oso_lbfgs); + if (lmp->citeme) lmp->citeme->add(cite_minstyle_spin_lbfgs); nlocal_max = 0; // nreplica = number of partitions @@ -81,7 +81,7 @@ MinSpinOSO_LBFGS::MinSpinOSO_LBFGS(LAMMPS *lmp) : /* ---------------------------------------------------------------------- */ -MinSpinOSO_LBFGS::~MinSpinOSO_LBFGS() +MinSpinLBFGS::~MinSpinLBFGS() { memory->destroy(g_old); memory->destroy(g_cur); @@ -95,7 +95,7 @@ MinSpinOSO_LBFGS::~MinSpinOSO_LBFGS() /* ---------------------------------------------------------------------- */ -void MinSpinOSO_LBFGS::init() +void MinSpinLBFGS::init() { num_mem = 3; local_iter = 0; @@ -123,20 +123,20 @@ void MinSpinOSO_LBFGS::init() // allocate tables nlocal_max = atom->nlocal; - memory->grow(g_old,3*nlocal_max,"min/spin/oso/lbfgs:g_old"); - memory->grow(g_cur,3*nlocal_max,"min/spin/oso/lbfgs:g_cur"); - memory->grow(p_s,3*nlocal_max,"min/spin/oso/lbfgs:p_s"); - memory->grow(rho,num_mem,"min/spin/oso/lbfgs:rho"); - memory->grow(ds,num_mem,3*nlocal_max,"min/spin/oso/lbfgs:ds"); - memory->grow(dy,num_mem,3*nlocal_max,"min/spin/oso/lbfgs:dy"); + memory->grow(g_old,3*nlocal_max,"min/spin/lbfgs:g_old"); + memory->grow(g_cur,3*nlocal_max,"min/spin/lbfgs:g_cur"); + memory->grow(p_s,3*nlocal_max,"min/spin/lbfgs:p_s"); + memory->grow(rho,num_mem,"min/spin/lbfgs:rho"); + memory->grow(ds,num_mem,3*nlocal_max,"min/spin/lbfgs:ds"); + memory->grow(dy,num_mem,3*nlocal_max,"min/spin/lbfgs:dy"); if (use_line_search) - memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/lbfgs:sp_copy"); + memory->grow(sp_copy,nlocal_max,3,"min/spin/lbfgs:sp_copy"); } /* ---------------------------------------------------------------------- */ -void MinSpinOSO_LBFGS::setup_style() +void MinSpinLBFGS::setup_style() { double **v = atom->v; int nlocal = atom->nlocal; @@ -144,7 +144,7 @@ void MinSpinOSO_LBFGS::setup_style() // check if the atom/spin style is defined if (!atom->sp_flag) - error->all(FLERR,"min/spin_oso_lbfgs requires atom/spin style"); + error->all(FLERR,"min spin/lbfgs requires atom/spin style"); for (int i = 0; i < nlocal; i++) v[i][0] = v[i][1] = v[i][2] = 0.0; @@ -152,7 +152,7 @@ void MinSpinOSO_LBFGS::setup_style() /* ---------------------------------------------------------------------- */ -int MinSpinOSO_LBFGS::modify_param(int narg, char **arg) +int MinSpinLBFGS::modify_param(int narg, char **arg) { if (strcmp(arg[0],"discrete_factor") == 0) { if (narg < 2) error->all(FLERR,"Illegal min_modify command"); @@ -169,7 +169,7 @@ int MinSpinOSO_LBFGS::modify_param(int narg, char **arg) called after atoms have migrated ------------------------------------------------------------------------- */ -void MinSpinOSO_LBFGS::reset_vectors() +void MinSpinLBFGS::reset_vectors() { // atomic dof @@ -188,7 +188,7 @@ void MinSpinOSO_LBFGS::reset_vectors() minimization via damped spin dynamics ------------------------------------------------------------------------- */ -int MinSpinOSO_LBFGS::iterate(int maxiter) +int MinSpinLBFGS::iterate(int maxiter) { int nlocal = atom->nlocal; bigint ntimestep; @@ -200,14 +200,14 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) if (nlocal_max < nlocal) { nlocal_max = nlocal; local_iter = 0; - memory->grow(g_old,3*nlocal_max,"min/spin/oso/lbfgs:g_old"); - memory->grow(g_cur,3*nlocal_max,"min/spin/oso/lbfgs:g_cur"); - memory->grow(p_s,3*nlocal_max,"min/spin/oso/lbfgs:p_s"); - memory->grow(rho,num_mem,"min/spin/oso/lbfgs:rho"); - memory->grow(ds,num_mem,3*nlocal_max,"min/spin/oso/lbfgs:ds"); - memory->grow(dy,num_mem,3*nlocal_max,"min/spin/oso/lbfgs:dy"); + memory->grow(g_old,3*nlocal_max,"min/spin/lbfgs:g_old"); + memory->grow(g_cur,3*nlocal_max,"min/spin/lbfgs:g_cur"); + memory->grow(p_s,3*nlocal_max,"min/spin/lbfgs:p_s"); + memory->grow(rho,num_mem,"min/spin/lbfgs:rho"); + memory->grow(ds,num_mem,3*nlocal_max,"min/spin/lbfgs:ds"); + memory->grow(dy,num_mem,3*nlocal_max,"min/spin/lbfgs:dy"); if (use_line_search) - memory->grow(sp_copy,nlocal_max,3,"min/spin/oso/lbfgs:sp_copy"); + memory->grow(sp_copy,nlocal_max,3,"min/spin/lbfgs:sp_copy"); } for (int iter = 0; iter < maxiter; iter++) { @@ -324,7 +324,7 @@ int MinSpinOSO_LBFGS::iterate(int maxiter) calculate gradients ---------------------------------------------------------------------- */ -void MinSpinOSO_LBFGS::calc_gradient() +void MinSpinLBFGS::calc_gradient() { int nlocal = atom->nlocal; double **sp = atom->sp; @@ -347,7 +347,7 @@ void MinSpinOSO_LBFGS::calc_gradient() Optimization' Second Edition, 2006 (p. 177) ---------------------------------------------------------------------- */ -void MinSpinOSO_LBFGS::calc_search_direction() +void MinSpinLBFGS::calc_search_direction() { int nlocal = atom->nlocal; @@ -531,7 +531,7 @@ void MinSpinOSO_LBFGS::calc_search_direction() rotation of spins along the search direction ---------------------------------------------------------------------- */ -void MinSpinOSO_LBFGS::advance_spins() +void MinSpinLBFGS::advance_spins() { int nlocal = atom->nlocal; double **sp = atom->sp; @@ -562,7 +562,7 @@ void MinSpinOSO_LBFGS::advance_spins() [-y, -z, 0]] ------------------------------------------------------------------------- */ -void MinSpinOSO_LBFGS::rodrigues_rotation(const double *upp_tr, double *out) +void MinSpinLBFGS::rodrigues_rotation(const double *upp_tr, double *out) { double theta,A,B,D,x,y,z; double s1,s2,s3,a1,a2,a3; @@ -622,7 +622,7 @@ void MinSpinOSO_LBFGS::rodrigues_rotation(const double *upp_tr, double *out) m -- 3x3 matrix , v -- 3-d vector ------------------------------------------------------------------------- */ -void MinSpinOSO_LBFGS::vm3(const double *m, const double *v, double *out) +void MinSpinLBFGS::vm3(const double *m, const double *v, double *out) { for(int i = 0; i < 3; i++){ out[i] = 0.0; @@ -632,7 +632,7 @@ void MinSpinOSO_LBFGS::vm3(const double *m, const double *v, double *out) } -void MinSpinOSO_LBFGS::make_step(double c, double *energy_and_der) +void MinSpinLBFGS::make_step(double c, double *energy_and_der) { double p_scaled[3]; int nlocal = atom->nlocal; @@ -679,7 +679,7 @@ void MinSpinOSO_LBFGS::make_step(double c, double *energy_and_der) using the cubic interpolation ------------------------------------------------------------------------- */ -int MinSpinOSO_LBFGS::calc_and_make_step(double a, double b, int index) +int MinSpinLBFGS::calc_and_make_step(double a, double b, int index) { double e_and_d[2] = {0.0,0.0}; double alpha,c1,c2,c3; @@ -731,7 +731,7 @@ int MinSpinOSO_LBFGS::calc_and_make_step(double a, double b, int index) Approximate descent ------------------------------------------------------------------------- */ -int MinSpinOSO_LBFGS::adescent(double phi_0, double phi_j){ +int MinSpinLBFGS::adescent(double phi_0, double phi_j){ double eps = 1.0e-6; @@ -741,7 +741,7 @@ int MinSpinOSO_LBFGS::adescent(double phi_0, double phi_j){ return 0; } -double MinSpinOSO_LBFGS::maximum_rotation(double *p) +double MinSpinLBFGS::maximum_rotation(double *p) { double norm2,norm2_global,scaling,alpha; int nlocal = atom->nlocal; diff --git a/src/SPIN/min_spin_oso_lbfgs.h b/src/SPIN/min_spin_lbfgs.h similarity index 90% rename from src/SPIN/min_spin_oso_lbfgs.h rename to src/SPIN/min_spin_lbfgs.h index 68fa10921e..cead605b32 100644 --- a/src/SPIN/min_spin_oso_lbfgs.h +++ b/src/SPIN/min_spin_lbfgs.h @@ -13,21 +13,21 @@ #ifdef MINIMIZE_CLASS -MinimizeStyle(spin_oso_lbfgs, MinSpinOSO_LBFGS) +MinimizeStyle(spin/lbfgs, MinSpinLBFGS) #else -#ifndef LMP_MIN_SPIN_OSO_LBFGS_H -#define LMP_MIN_SPIN_OSO_LBFGS_H +#ifndef LMP_MIN_SPIN_LBFGS_H +#define LMP_MIN_SPIN_LBFGS_H #include "min.h" namespace LAMMPS_NS { -class MinSpinOSO_LBFGS: public Min { +class MinSpinLBFGS: public Min { public: - MinSpinOSO_LBFGS(class LAMMPS *); - virtual ~MinSpinOSO_LBFGS(); + MinSpinLBFGS(class LAMMPS *); + virtual ~MinSpinLBFGS(); void init(); void setup_style(); int modify_param(int, char **); From 3736fc27584a226b8b972792db2360297f085347 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Thu, 22 Aug 2019 19:08:01 -0700 Subject: [PATCH 092/237] fix gjf on site velocity --- src/fix_langevin.cpp | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 6971b145ec..c14541dee4 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -716,9 +716,21 @@ void FixLangevin::post_force_templated() f[i][2] += fdrag[2] + fran[2]; if (Tp_TALLY) { + if (Tp_GJF && update->ntimestep != update->beginstep){ + fdrag[0] = gamma1*lv[i][0]/gjfsib/gjfsib; + fdrag[1] = gamma1*lv[i][1]/gjfsib/gjfsib; + fdrag[2] = gamma1*lv[i][2]/gjfsib/gjfsib; + fswap = (2*fran[0] - franprev[i][0])/gjfsib; + fran[0] = fswap; + fswap = (2*fran[1] - franprev[i][1])/gjfsib; + fran[1] = fswap; + fswap = (2*fran[2] - franprev[i][2])/gjfsib; + fran[2] = fswap; + } flangevin[i][0] = fdrag[0] + fran[0]; flangevin[i][1] = fdrag[1] + fran[1]; flangevin[i][2] = fdrag[2] + fran[2]; + } if (Tp_ZERO) { @@ -935,18 +947,18 @@ void FixLangevin::end_of_step() else{ if (atom->rmass) { dtfm = 0.5 * dt / rmass[i]; - gamma1 = -rmass[i] / t_period / ftm2v; - gamma1 *= 1.0/ratio[type[i]]; } else { dtfm = 0.5 * dt / mass[type[i]]; - gamma1 = gfactor1[type[i]]; } - v[i][0] = flangevin[i][0] - franprev[i][0] + gjfa * (gjfsib/2 + gamma1/gjfsib) * lv[i][0] - + gjfsib*gjfsib*(dtfm * f[i][0] + v[i][0])/2; - v[i][1] = flangevin[i][1] - franprev[i][1] + gjfa * (gjfsib/2 + gamma1/gjfsib) * lv[i][1] - + gjfsib*gjfsib*(dtfm * f[i][1] + v[i][1])/2; - v[i][2] = flangevin[i][2] - franprev[i][2] + gjfa * (gjfsib/2 + gamma1/gjfsib) * lv[i][2] - + gjfsib*gjfsib*(dtfm * f[i][2] + v[i][2])/2; + v[i][0] = 0.5 * gjfsib*gjfsib*(v[i][0] + dtfm * f[i][0] / gjfa) + + dtfm * 0.5 * (gjfsib * flangevin[i][0] - franprev[i][0]) + + (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * lv[i][0]; + v[i][1] = 0.5 * gjfsib*gjfsib*(v[i][1] + dtfm * f[i][1] / gjfa) + + dtfm * 0.5 * (gjfsib * flangevin[i][1] - franprev[i][1]) + + (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * lv[i][1]; + v[i][2] = 0.5 * gjfsib*gjfsib*(v[i][2] + dtfm * f[i][2] / gjfa) + + dtfm * 0.5 * (gjfsib * flangevin[i][2] - franprev[i][2]) + + (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * lv[i][2]; } lv[i][0] = tmp[0]; lv[i][1] = tmp[1]; From ed02c25cfc6ced2c8a2b50341c3875d0e9eaa969 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Thu, 22 Aug 2019 22:36:48 -0600 Subject: [PATCH 093/237] bond/react: bug in 'max_rxn' option fix one-line bug in 'max_rxn' option of bond/react --- src/USER-MISC/fix_bond_react.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index 05dc54c57e..852362018f 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -1209,7 +1209,7 @@ void FixBondReact::superimpose_algorithm() rxn_by_proc[j] = -1; // corresponds to ghostly int itemp = 0; for (int j = 0; j < nprocs; j++) - for (int k = 0; k < local_rxn_count[j]; k++) + for (int k = 0; k < local_rxncounts[j]; k++) rxn_by_proc[itemp++] = j; std::random_shuffle(&rxn_by_proc[0],&rxn_by_proc[delta_rxn]); for (int j = 0; j < nprocs; j++) From 8b7c0e13b3596cae14b5e5ef657a8ca46c6db424 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Fri, 23 Aug 2019 18:34:43 -0700 Subject: [PATCH 094/237] updated onsite velocity --- src/fix_langevin.cpp | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index c14541dee4..7734989e35 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -716,15 +716,15 @@ void FixLangevin::post_force_templated() f[i][2] += fdrag[2] + fran[2]; if (Tp_TALLY) { - if (Tp_GJF && update->ntimestep != update->beginstep){ + if (Tp_GJF){ fdrag[0] = gamma1*lv[i][0]/gjfsib/gjfsib; fdrag[1] = gamma1*lv[i][1]/gjfsib/gjfsib; fdrag[2] = gamma1*lv[i][2]/gjfsib/gjfsib; - fswap = (2*fran[0] - franprev[i][0])/gjfsib; + fswap = (2*fran[0]/gjfa - franprev[i][0])/gjfsib; fran[0] = fswap; - fswap = (2*fran[1] - franprev[i][1])/gjfsib; + fswap = (2*fran[1]/gjfa - franprev[i][1])/gjfsib; fran[1] = fswap; - fswap = (2*fran[2] - franprev[i][2])/gjfsib; + fswap = (2*fran[2]/gjfa - franprev[i][2])/gjfsib; fran[2] = fswap; } flangevin[i][0] = fdrag[0] + fran[0]; @@ -922,8 +922,7 @@ void FixLangevin::end_of_step() double **v = atom->v; int *mask = atom->mask; int nlocal = atom->nlocal; - double ftm2v = force->ftm2v; - double gamma1; double dtfm; + double dtfm; double dt = update->dt; double *mass = atom->mass; double *rmass = atom->rmass; @@ -932,6 +931,20 @@ void FixLangevin::end_of_step() energy_onestep = 0.0; + if (tallyflag){ + if (gjfflag){ + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + energy_onestep += flangevin[i][0]*lv[i][0] + flangevin[i][1]*lv[i][1] + + flangevin[i][2]*lv[i][2]; + } + else + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + energy_onestep += flangevin[i][0]*v[i][0] + flangevin[i][1]*v[i][1] + + flangevin[i][2]*v[i][2]; +} + if (gjfflag){ double tmp[3]; for (int i = 0; i < nlocal; i++) @@ -946,9 +959,9 @@ void FixLangevin::end_of_step() } else{ if (atom->rmass) { - dtfm = 0.5 * dt / rmass[i]; + dtfm = force->ftm2v * 0.5 * dt / rmass[i]; } else { - dtfm = 0.5 * dt / mass[type[i]]; + dtfm = force->ftm2v * 0.5 * dt / mass[type[i]]; } v[i][0] = 0.5 * gjfsib*gjfsib*(v[i][0] + dtfm * f[i][0] / gjfa) + dtfm * 0.5 * (gjfsib * flangevin[i][0] - franprev[i][0]) + @@ -966,12 +979,6 @@ void FixLangevin::end_of_step() } } - if (tallyflag) - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) - energy_onestep += flangevin[i][0]*v[i][0] + flangevin[i][1]*v[i][1] + - flangevin[i][2]*v[i][2]; - energy += energy_onestep*update->dt; } From f1563ed9885ecd1ad9e5b914a320969a7ea44504 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 27 Aug 2019 17:44:04 -0600 Subject: [PATCH 095/237] Commit JT 082719 - correcting min_modify.txt --- doc/src/min_modify.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index 22ee232467..06c1f7514f 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -99,9 +99,10 @@ The {spin_none} is a default value for {line} keyword for both {spin/lbfgs} and {spin/cg}. Convergence of {spin/lbfgs} can be more robust if {spin_cubic} line search is used. -[Restrictions:] The line search procedure of styles -{spin/cg} and {spin/lbfgs} cannot be used for magnetic -GNEB calculations. See "neb/spin"_neb_spin.html for more +[Restrictions:] + +The line search procedure of styles {spin/cg} and {spin/lbfgs} cannot be +used for magnetic GNEB calculations. See "neb/spin"_neb_spin.html for more explanation. [Related commands:] From c981dd7cf4999ff9e1f01ed76c8c0375e8f93545 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sat, 31 Aug 2019 22:51:06 -0600 Subject: [PATCH 096/237] another one-liner: incorrect string assigment does not affect any current features --- src/USER-MISC/fix_bond_react.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index 852362018f..9c4d819f5d 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -207,7 +207,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : iarg++; - rxn_name[rxn] = arg[iarg++]; + strcpy(rxn_name[rxn],arg[iarg++]); int igroup = group->find(arg[iarg++]); if (igroup == -1) error->all(FLERR,"Could not find fix group ID"); From 86c21264b951b64713125f77767f1d74c19b87de Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 1 Sep 2019 23:09:01 -0600 Subject: [PATCH 097/237] correct string assignment, take 2 --- src/USER-MISC/fix_bond_react.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index 9c4d819f5d..b38a3468c2 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -207,7 +207,9 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : iarg++; - strcpy(rxn_name[rxn],arg[iarg++]); + int n = strlen(arg[iarg]) + 1; + if (n > MAXLINE) error->all(FLERR,"Reaction name (react-ID) is too long (limit: 256 characters)"); + strncpy(rxn_name[rxn],arg[iarg++],n); int igroup = group->find(arg[iarg++]); if (igroup == -1) error->all(FLERR,"Could not find fix group ID"); From 50af20d194ee86de6f873ab48493d81c72d79389 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 1 Sep 2019 23:31:31 -0600 Subject: [PATCH 098/237] bond/react: remember reaction counts allow restart files to restore cumutative reaction counts --- doc/src/fix_bond_react.txt | 9 ++++--- src/USER-MISC/fix_bond_react.cpp | 42 ++++++++++++++++++++++++++++++++ src/USER-MISC/fix_bond_react.h | 9 +++++++ 3 files changed, 56 insertions(+), 4 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index 3f428e2103..5aff35787d 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -392,10 +392,11 @@ local command. [Restart, fix_modify, output, run start/stop, minimize info:] -No information about this fix is written to "binary restart -files"_restart.html, aside from internally-created per-atom -properties. None of the "fix_modify"_fix_modify.html options are -relevant to this fix. +Cumulative reaction counts for each reaction are written to "binary +restart files"_restart.html. These values are associated with the +reaction name (react-ID). Additionally, internally-created per-atom +properties are stored to allow for smooth restarts. None of the +"fix_modify"_fix_modify.html options are relevant to this fix. This fix computes one statistic for each {react} argument that it stores in a global vector, of length 'number of react arguments', that diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index b38a3468c2..07f009360a 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -87,6 +87,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : MPI_Comm_size(world,&nprocs); newton_bond = force->newton_bond; + restart_global = 1; attempted_rxn = 0; force_reneighbor = 1; next_reneighbor = -1; @@ -388,6 +389,10 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : id_fix3 = NULL; statted_id = NULL; custom_exclude_flag = 0; + + // used to store restart info + set = new Set[nreacts]; + memset(set,0,nreacts*sizeof(Set)); } /* ---------------------------------------------------------------------- */ @@ -471,6 +476,7 @@ FixBondReact::~FixBondReact() delete [] statted_id; delete [] guess_branch; delete [] pioneer_count; + delete [] set; if (group) { char **newarg; @@ -3100,6 +3106,42 @@ void FixBondReact::unpack_reverse_comm(int n, int *list, double *buf) } } +/* ---------------------------------------------------------------------- + write Set data to restart file +------------------------------------------------------------------------- */ + +void FixBondReact::write_restart(FILE *fp) +{ + set[0].nreacts = nreacts; + for (int i = 0; i < nreacts; i++) { + set[i].reaction_count_total = reaction_count_total[i]; + int n = strlen(rxn_name[i]) + 1; + strncpy(set[i].rxn_name,rxn_name[i],n); + } + + if (me == 0) { + int size = nreacts*sizeof(Set); + fwrite(&size,sizeof(int),1,fp); + fwrite(set,sizeof(Set),nreacts,fp); + } +} + +/* ---------------------------------------------------------------------- + use selected state info from restart file to restart the Fix +------------------------------------------------------------------------- */ + +void FixBondReact::restart(char *buf) +{ + Set *set_restart = (Set *) buf; + for (int i = 0; i < set_restart[0].nreacts; i++) { + for (int j = 0; j < nreacts; j++) { + if (strcmp(set_restart[i].rxn_name,rxn_name[j]) == 0) { + reaction_count_total[j] = set_restart[i].reaction_count_total; + } + } + } +} + /* ---------------------------------------------------------------------- memory usage of local atom-based arrays ------------------------------------------------------------------------- */ diff --git a/src/USER-MISC/fix_bond_react.h b/src/USER-MISC/fix_bond_react.h index 1ac8d624a9..2be20cf8ec 100644 --- a/src/USER-MISC/fix_bond_react.h +++ b/src/USER-MISC/fix_bond_react.h @@ -170,6 +170,15 @@ class FixBondReact : public Fix { void unlimit_bond(); void limit_bond(int); void dedup_mega_gloves(int); //dedup global mega_glove + virtual void write_restart(FILE *); + virtual void restart(char *buf); + + struct Set { + int nreacts; + char rxn_name[256]; + int reaction_count_total; + }; + Set *set; // DEBUG From bb1cb2e5a833943178b6e5752a8ea066669f1e0e Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 5 Sep 2019 10:23:52 -0600 Subject: [PATCH 099/237] Add transpose for ulisttot --- src/KOKKOS/sna_kokkos.h | 3 ++- src/KOKKOS/sna_kokkos_impl.h | 17 ++++++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/KOKKOS/sna_kokkos.h b/src/KOKKOS/sna_kokkos.h index 2dbfdcb47c..1e83a621f0 100644 --- a/src/KOKKOS/sna_kokkos.h +++ b/src/KOKKOS/sna_kokkos.h @@ -129,7 +129,8 @@ inline int twojmax, diagonalstyle; t_sna_2d blist; - t_sna_2c_cpu ulisttot; + t_sna_2c ulisttot; + t_sna_2c_cpu ulisttot_lr; t_sna_2c zlist; t_sna_3c ulist; diff --git a/src/KOKKOS/sna_kokkos_impl.h b/src/KOKKOS/sna_kokkos_impl.h index 36765e9cd6..2f63a8353b 100644 --- a/src/KOKKOS/sna_kokkos_impl.h +++ b/src/KOKKOS/sna_kokkos_impl.h @@ -225,7 +225,8 @@ void SNAKokkos::grow_rij(int newnatom, int newnmax) dedr = t_sna_3d("sna:dedr",natom,nmax,3); blist = t_sna_2d("sna:blist",natom,idxb_max); - ulisttot = t_sna_2c_cpu("sna:ulisttot",natom,idxu_max); + ulisttot = t_sna_2c("sna:ulisttot",natom,idxu_max); + ulisttot_lr = t_sna_2c_cpu("sna:ulisttot_lr",natom,idxu_max); zlist = t_sna_2c("sna:zlist",natom,idxz_max); ulist = t_sna_3c("sna:ulist",natom,nmax,idxu_max); @@ -281,6 +282,11 @@ void SNAKokkos::compute_ui(const typename Kokkos::TeamPolicy::value) + ulisttot_lr = ulisttot; + else + Kokkos::deep_copy(ulisttot_lr,ulisttot); } template @@ -400,8 +406,6 @@ void SNAKokkos::compute_yi(const typename Kokkos::TeamPolicy::compute_yi(const typename Kokkos::TeamPolicy::compute_yi(const typename Kokkos::TeamPolicy::memory_usage() bytes += natom * idxu_max * sizeof(double) * 2; // ulist bytes += natom * idxu_max * sizeof(double) * 2; // ulisttot + bytes += natom * idxu_max * sizeof(double) * 2; // ulisttot_lr bytes += natom * idxu_max * 3 * sizeof(double) * 2; // dulist bytes += natom * idxz_max * sizeof(double) * 2; // zlist From 49b5825e8da3fc7caea9fe9cc28a655664e101dc Mon Sep 17 00:00:00 2001 From: jrgissing Date: Thu, 5 Sep 2019 23:50:57 -0600 Subject: [PATCH 100/237] bond/react docs tweak: address a common mistake no atom of a small molecule should be specified as an edge atom --- doc/src/fix_bond_react.txt | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index 5aff35787d..3fe3d8547e 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -186,19 +186,22 @@ reacting atoms. Some atoms in the pre-reacted template that are not reacting may have missing topology with respect to the simulation. For example, the -pre-reacted template may contain an atom that would connect to the -rest of a long polymer chain. These are referred to as edge atoms, and -are also specified in the map file. When the pre-reaction template -contains edge atoms, not all atoms, bonds, charges, etc. specified in -the reaction templates will be updated. Specifically, topology that -involves only atoms that are 'too near' to template edges will not be -updated. The definition of 'too near the edge' depends on which -interactions are defined in the simulation. If the simulation has -defined dihedrals, atoms within two bonds of edge atoms are considered -'too near the edge.' If the simulation defines angles, but not -dihedrals, atoms within one bond of edge atoms are considered 'too -near the edge.' If just bonds are defined, only edge atoms are -considered 'too near the edge.' +pre-reacted template may contain an atom that, in the simulation, is +currently connected to the rest of a long polymer chain. These are +referred to as edge atoms, and are also specified in the map file. +When the pre-reaction template contains edge atoms, not all atoms, +bonds, charges, etc. specified in the reaction templates will be +updated. Specifically, topology that involves only atoms that are 'too +near' to template edges will not be updated. The definition of 'too +near the edge' depends on which interactions are defined in the +simulation. If the simulation has defined dihedrals, atoms within two +bonds of edge atoms are considered 'too near the edge.' If the +simulation defines angles, but not dihedrals, atoms within one bond of +edge atoms are considered 'too near the edge.' If just bonds are +defined, only edge atoms are considered 'too near the edge.' + +NOTE: Small molecules, i.e. ones that have all their atoms contained +within the reaction templates, never have edge atoms. Note that some care must be taken when a building a molecule template for a given simulation. All atom types in the pre-reacted template From 0235b1a286209bd11fc9087357cfd88fc6269223 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Fri, 6 Sep 2019 00:18:24 -0600 Subject: [PATCH 101/237] bond/react: move MAXLINE to header --- src/USER-MISC/fix_bond_react.cpp | 1 - src/USER-MISC/fix_bond_react.h | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index 07f009360a..6b61a7b84d 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -56,7 +56,6 @@ static const char cite_fix_bond_react[] = #define BIG 1.0e20 #define DELTA 16 -#define MAXLINE 256 #define MAXGUESS 20 // max # of guesses allowed by superimpose algorithm #define MAXCONARGS 5 // max # of arguments for any type of constraint diff --git a/src/USER-MISC/fix_bond_react.h b/src/USER-MISC/fix_bond_react.h index 2be20cf8ec..169409c3aa 100644 --- a/src/USER-MISC/fix_bond_react.h +++ b/src/USER-MISC/fix_bond_react.h @@ -26,6 +26,8 @@ FixStyle(bond/react,FixBondReact) #include "fix.h" +#define MAXLINE 256 + namespace LAMMPS_NS { class FixBondReact : public Fix { @@ -175,7 +177,7 @@ class FixBondReact : public Fix { struct Set { int nreacts; - char rxn_name[256]; + char rxn_name[MAXLINE]; int reaction_count_total; }; Set *set; From 9b955a6c1cfbca201d731abc710d1d36e0e49eda Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 6 Sep 2019 14:49:14 -0600 Subject: [PATCH 102/237] Some tweaks --- src/KOKKOS/pair_snap_kokkos_impl.h | 3 +++ src/KOKKOS/sna_kokkos.h | 29 ++++++++++++++++++++++++++--- src/KOKKOS/sna_kokkos_impl.h | 19 +++++++++++-------- 3 files changed, 40 insertions(+), 11 deletions(-) diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index 95afcc5ec7..c2b56ebf21 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -234,6 +234,9 @@ void PairSNAPKokkos::compute(int eflag_in, int vflag_in) typename Kokkos::TeamPolicy policy_ui(((inum+team_size-1)/team_size)*max_neighs,team_size,ui_vector_length); Kokkos::parallel_for("ComputeUi",policy_ui,*this); + //Ulisttot transpose + snaKK.transpose_ulisttot(); + //Compute bispectrum if (quadraticflag || eflag) { //ComputeZi diff --git a/src/KOKKOS/sna_kokkos.h b/src/KOKKOS/sna_kokkos.h index 1e83a621f0..e1c8d56a18 100644 --- a/src/KOKKOS/sna_kokkos.h +++ b/src/KOKKOS/sna_kokkos.h @@ -53,12 +53,32 @@ public: typedef Kokkos::View t_sna_1c; typedef Kokkos::View > t_sna_1c_atomic; typedef Kokkos::View t_sna_2c; - typedef Kokkos::View t_sna_2c_cpu; + typedef Kokkos::View t_sna_2c_lr; typedef Kokkos::View t_sna_3c; typedef Kokkos::View t_sna_4c; typedef Kokkos::View t_sna_3c3; typedef Kokkos::View t_sna_5c; +// Helper class to get ulisttot_r + +template +class UlisttotHelper { +public: + inline + static void transpose(T1 &ulisttot_lr, const T2 &ulisttot) { + Kokkos::deep_copy(ulisttot_lr,ulisttot); + } +}; + +template +class UlisttotHelper { +public: + inline + static void transpose(T1 &ulisttot_lr, const T2 &ulisttot) { + ulisttot_lr = ulisttot; + } +}; + inline SNAKokkos() {}; KOKKOS_INLINE_FUNCTION @@ -80,6 +100,9 @@ inline int ncoeff; +inline + void transpose_ulisttot(); + // functions for bispectrum coefficients KOKKOS_INLINE_FUNCTION void pre_ui(const typename Kokkos::TeamPolicy::member_type& team, int); // ForceSNAP @@ -130,11 +153,11 @@ inline t_sna_2d blist; t_sna_2c ulisttot; - t_sna_2c_cpu ulisttot_lr; + t_sna_2c_lr ulisttot_lr; t_sna_2c zlist; t_sna_3c ulist; - t_sna_2c ylist; + t_sna_2c_lr ylist; // derivatives of data t_sna_4c dulist; diff --git a/src/KOKKOS/sna_kokkos_impl.h b/src/KOKKOS/sna_kokkos_impl.h index 2f63a8353b..1eb4d0d764 100644 --- a/src/KOKKOS/sna_kokkos_impl.h +++ b/src/KOKKOS/sna_kokkos_impl.h @@ -226,11 +226,12 @@ void SNAKokkos::grow_rij(int newnatom, int newnmax) blist = t_sna_2d("sna:blist",natom,idxb_max); ulisttot = t_sna_2c("sna:ulisttot",natom,idxu_max); - ulisttot_lr = t_sna_2c_cpu("sna:ulisttot_lr",natom,idxu_max); + if (!Kokkos::Impl::is_same::value) + ulisttot_lr = t_sna_2c_lr("sna:ulisttot_lr",natom,idxu_max); zlist = t_sna_2c("sna:zlist",natom,idxz_max); ulist = t_sna_3c("sna:ulist",natom,nmax,idxu_max); - ylist = t_sna_2c("sna:ylist",natom,idxu_max); + ylist = t_sna_2c_lr("sna:ylist",natom,idxu_max); dulist = t_sna_4c("sna:dulist",natom,nmax,idxu_max); } @@ -282,11 +283,6 @@ void SNAKokkos::compute_ui(const typename Kokkos::TeamPolicy::value) - ulisttot_lr = ulisttot; - else - Kokkos::deep_copy(ulisttot_lr,ulisttot); } template @@ -788,6 +784,12 @@ void SNAKokkos::compute_uarray(const typename Kokkos::TeamPolicy +void SNAKokkos::transpose_ulisttot() +{ + UlisttotHelper::transpose(ulisttot_lr,ulisttot); +} + /* ---------------------------------------------------------------------- compute derivatives of Wigner U-functions for one neighbor see comments in compute_uarray() @@ -1320,7 +1322,8 @@ double SNAKokkos::memory_usage() bytes += natom * idxu_max * sizeof(double) * 2; // ulist bytes += natom * idxu_max * sizeof(double) * 2; // ulisttot - bytes += natom * idxu_max * sizeof(double) * 2; // ulisttot_lr + if (!Kokkos::Impl::is_same::value) + bytes += natom * idxu_max * sizeof(double) * 2; // ulisttot_lr bytes += natom * idxu_max * 3 * sizeof(double) * 2; // dulist bytes += natom * idxz_max * sizeof(double) * 2; // zlist From 48ea1eecb6fa3494db772069de1529baa7542ea1 Mon Sep 17 00:00:00 2001 From: alxvov Date: Sun, 8 Sep 2019 15:51:54 +0300 Subject: [PATCH 103/237] make as in master --- src/MAKE/Makefile.serial | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MAKE/Makefile.serial b/src/MAKE/Makefile.serial index 8628d2bb73..5954d97761 100644 --- a/src/MAKE/Makefile.serial +++ b/src/MAKE/Makefile.serial @@ -7,7 +7,7 @@ SHELL = /bin/sh # specify flags and libraries needed for your compiler CC = g++ -CCFLAGS = -g -O3 -Wall +CCFLAGS = -g -O3 SHFLAGS = -fPIC DEPFLAGS = -M From 2e0fcac74418d2c23093814dbb411bf5baf01c9a Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 8 Sep 2019 21:11:24 -0600 Subject: [PATCH 104/237] bond/react: define MAXLINE take 2 --- src/USER-MISC/fix_bond_react.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/USER-MISC/fix_bond_react.h b/src/USER-MISC/fix_bond_react.h index 169409c3aa..e5452cb226 100644 --- a/src/USER-MISC/fix_bond_react.h +++ b/src/USER-MISC/fix_bond_react.h @@ -26,12 +26,13 @@ FixStyle(bond/react,FixBondReact) #include "fix.h" -#define MAXLINE 256 - namespace LAMMPS_NS { class FixBondReact : public Fix { public: + + enum {MAXLINE=256}; + FixBondReact(class LAMMPS *, int, char **); ~FixBondReact(); int setmask(); From 450f437d9f2f5f99ddaf56926d78cee9a1702489 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 8 Sep 2019 22:59:59 -0600 Subject: [PATCH 105/237] bond/react:another edge atom clarification --- doc/src/fix_bond_react.txt | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index 3fe3d8547e..ff5c14c1bd 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -188,17 +188,19 @@ Some atoms in the pre-reacted template that are not reacting may have missing topology with respect to the simulation. For example, the pre-reacted template may contain an atom that, in the simulation, is currently connected to the rest of a long polymer chain. These are -referred to as edge atoms, and are also specified in the map file. -When the pre-reaction template contains edge atoms, not all atoms, -bonds, charges, etc. specified in the reaction templates will be -updated. Specifically, topology that involves only atoms that are 'too -near' to template edges will not be updated. The definition of 'too -near the edge' depends on which interactions are defined in the -simulation. If the simulation has defined dihedrals, atoms within two -bonds of edge atoms are considered 'too near the edge.' If the -simulation defines angles, but not dihedrals, atoms within one bond of -edge atoms are considered 'too near the edge.' If just bonds are -defined, only edge atoms are considered 'too near the edge.' +referred to as edge atoms, and are also specified in the map file. All +pre-reaction template atoms should be linked to a bonding atom, via at +least one path that does not involve edge atoms. When the pre-reaction +template contains edge atoms, not all atoms, bonds, charges, etc. +specified in the reaction templates will be updated. Specifically, +topology that involves only atoms that are 'too near' to template +edges will not be updated. The definition of 'too near the edge' +depends on which interactions are defined in the simulation. If the +simulation has defined dihedrals, atoms within two bonds of edge atoms +are considered 'too near the edge.' If the simulation defines angles, +but not dihedrals, atoms within one bond of edge atoms are considered +'too near the edge.' If just bonds are defined, only edge atoms are +considered 'too near the edge.' NOTE: Small molecules, i.e. ones that have all their atoms contained within the reaction templates, never have edge atoms. From 8c113f5fdb4177c5478299d3f53e549490b38c03 Mon Sep 17 00:00:00 2001 From: "tanmoy.7989" Date: Mon, 9 Sep 2019 01:51:04 -0700 Subject: [PATCH 106/237] added LD potential and wrote html-style doc --- doc/src/Eqs/pair_local_density_energy.jpg | Bin 0 -> 3045 bytes doc/src/Eqs/pair_local_density_energy.tex | 11 + .../pair_local_density_energy_implement.jpg | Bin 0 -> 7981 bytes .../pair_local_density_energy_implement.tex | 9 + .../Eqs/pair_local_density_energy_multi.jpg | Bin 0 -> 3464 bytes .../Eqs/pair_local_density_energy_multi.tex | 9 + .../Eqs/pair_local_density_indicator_func.jpg | Bin 0 -> 9062 bytes .../Eqs/pair_local_density_indicator_func.tex | 16 + doc/src/Eqs/pair_local_density_ld.jpg | Bin 0 -> 3098 bytes doc/src/Eqs/pair_local_density_ld.tex | 10 + .../Eqs/pair_local_density_ld_implement.jpg | Bin 0 -> 4300 bytes .../Eqs/pair_local_density_ld_implement.tex | 10 + doc/src/Eqs/pair_local_density_ld_multi.jpg | Bin 0 -> 3443 bytes doc/src/Eqs/pair_local_density_ld_multi.tex | 10 + doc/src/pair_local_density.txt | 207 ++ .../benzene_water/benzene_water.data | 1406 +++++++++ .../benzene_water/benzene_water.in | 62 + .../benzene_water.localdensity.table | 2024 +++++++++++++ .../benzene_water/benzene_water.pair.table | 2024 +++++++++++++ .../benzene_water/log.04Sep19.g++.1 | 267 ++ .../methanol_implicit_water/log.04Sep19.g++.1 | 226 ++ .../methanol_implicit_water.data | 2525 +++++++++++++++++ .../methanol_implicit_water.in | 68 + ...methanol_implicit_water.localdensity.table | 509 ++++ .../methanol_implicit_water.pair.table | 1012 +++++++ src/USER-MISC/README | 1 + src/USER-MISC/pair_local_density.cpp | 871 ++++++ src/USER-MISC/pair_local_density.h | 88 + 28 files changed, 11365 insertions(+) create mode 100644 doc/src/Eqs/pair_local_density_energy.jpg create mode 100644 doc/src/Eqs/pair_local_density_energy.tex create mode 100644 doc/src/Eqs/pair_local_density_energy_implement.jpg create mode 100644 doc/src/Eqs/pair_local_density_energy_implement.tex create mode 100644 doc/src/Eqs/pair_local_density_energy_multi.jpg create mode 100644 doc/src/Eqs/pair_local_density_energy_multi.tex create mode 100644 doc/src/Eqs/pair_local_density_indicator_func.jpg create mode 100644 doc/src/Eqs/pair_local_density_indicator_func.tex create mode 100644 doc/src/Eqs/pair_local_density_ld.jpg create mode 100644 doc/src/Eqs/pair_local_density_ld.tex create mode 100644 doc/src/Eqs/pair_local_density_ld_implement.jpg create mode 100644 doc/src/Eqs/pair_local_density_ld_implement.tex create mode 100644 doc/src/Eqs/pair_local_density_ld_multi.jpg create mode 100644 doc/src/Eqs/pair_local_density_ld_multi.tex create mode 100644 doc/src/pair_local_density.txt create mode 100644 examples/USER/misc/local_density/benzene_water/benzene_water.data create mode 100644 examples/USER/misc/local_density/benzene_water/benzene_water.in create mode 100644 examples/USER/misc/local_density/benzene_water/benzene_water.localdensity.table create mode 100644 examples/USER/misc/local_density/benzene_water/benzene_water.pair.table create mode 100644 examples/USER/misc/local_density/benzene_water/log.04Sep19.g++.1 create mode 100644 examples/USER/misc/local_density/methanol_implicit_water/log.04Sep19.g++.1 create mode 100644 examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.data create mode 100644 examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.in create mode 100644 examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.localdensity.table create mode 100644 examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.pair.table create mode 100644 src/USER-MISC/pair_local_density.cpp create mode 100644 src/USER-MISC/pair_local_density.h diff --git a/doc/src/Eqs/pair_local_density_energy.jpg b/doc/src/Eqs/pair_local_density_energy.jpg new file mode 100644 index 0000000000000000000000000000000000000000..68e44ce9d95ec0592ddc3236076f0067e7cc981c GIT binary patch literal 3045 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 literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/pair_local_density_energy_implement.tex b/doc/src/Eqs/pair_local_density_energy_implement.tex new file mode 100644 index 0000000000..4b1f1c3df2 --- /dev/null +++ b/doc/src/Eqs/pair_local_density_energy_implement.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} + +$$ +U_{LD} = \sum_k U_{LD}^{(k)} = \sum_i \left[ \sum_k a_\alpha^{(k)} F^{(k)} \left(\rho_i^{(k)}\right) \right] +$$ + +\end{document} diff --git a/doc/src/Eqs/pair_local_density_energy_multi.jpg b/doc/src/Eqs/pair_local_density_energy_multi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..df9dbfa5c82b24e491275c21aaac682f065be945 GIT binary patch literal 3464 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 hyGg{?P^;4iO6~vv literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/pair_local_density_energy_multi.tex b/doc/src/Eqs/pair_local_density_energy_multi.tex new file mode 100644 index 0000000000..4ca0b7e8b9 --- /dev/null +++ b/doc/src/Eqs/pair_local_density_energy_multi.tex @@ -0,0 +1,9 @@ +\documentclass[12pt]{article} + +\begin{document} + +$$ +U_{LD} = \sum_i a_\alpha F(\rho_i) +$$ + +\end{document} diff --git a/doc/src/Eqs/pair_local_density_indicator_func.jpg b/doc/src/Eqs/pair_local_density_indicator_func.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e038b2884d004d115ae30456c126c2492600665c GIT binary patch literal 9062 zcmdUUWl&trw)P$dXRyE!Tn8s4SaA2?NpQE|?ry<-2!!BnK|+uO*8suYeQ+m%pn=Q# zo^!6%t-9~|>Yg88?|OFcs@>JqPp#Ffdp+xZ_I?$>dm$q)1AssP0D5?U`vpJ}Ku1MI zLq$PHLqo&BK*xj-VneX7AS90na0w|$sVFH($;qi9Ug!L0)vr|!6+!m$Pc6a9{vN!_$ZHPIK)v2)Qr(+ zod`LD5_8e%B&s{0FUL+`Tqe%J7??zliAhN585o(ES-5$g^YZZvNJ>e|$jZsTc=cLc zLsLsz$JEUHjfJI^wTr8pyN9QjcgWk&u<(e;D0tGlvFBYra{_)u8CWjfCYvN0 zn1icyVh~$tRZpPr8Lydk52&}W!p4q%57nb#kj4Qd8*yJN)1nGX*oy{8cR%aM$O|rS zJ@?D6hrZbUNeFU}Lij)4Z;X!=f)W*$Dc0!Ay9lJb#snVW0pL&Mn&x6CglhlC&_FFk zU_VuE7Vs5u&o48*6JjG6dKb_#ht`z91on^W8Y?)ZpITV5KAF>+C!}R1j!aQ?7O_YQ z9R^*!#vfVcX%It!QgmavIKXhsUMIdtB9DmyotaaI9O2juw35!suiN;!sJBejHI(bV zN}&+oDqCcd!#i=V#29uO_CEx?E1=t&IxY7=Xe;B62-TO?hPH|Gh(b`!R)2g{MP!cfiS{&Kk}_a~Q&bY7cRo z23)W(l?f!D55>IrHLt#$Hz+q}d&+EBmAWU&Hi`y4QMr?^`10FNFJNc7O0r7$Qrooh z(xc1K(z`eO=&*obh^B#Hq4@<#G~_U$-p8@11@r&T^?z1HR+Y?K<*kozu1!|fVF^BA zDu_Yia2)K$DQtD4K3AtKY9VUC#ozgIJrd{3N*yAgobhvMQBKQrXr72BW}6!Bt%_2; zW|gEre$ICuU3kNkbm)}jKR@`DEY4s36`T;_+QXqwPpFDUf}r5)e*b0kyA}5r0n#FN z*9GQp72U;?FZ@q>Pr~B&tXD#Lo8Np`E!)WY4;K{M5n+ix=@M!7@?ZV`qM{a!r;Cx>+}hOj3@^)L!|vF(#_w z<~^Q9Dk^F9JK*fo>FVD>tNJ#tu>_eiR&l1H>ud%6Zw<*MS z^~Z(3O}~4g``y&>^qE`{iw;8vSdirX=!p{Gw1R_^zK*3Wr1xEDe(_rc`Opnnzy1Z#+U zfJC7(U4yaD+8uh>R~$e8j>W2n^!7cf_o5uNVap=6HLb)O&3rmp7hfj zuSM20aYScxSUsyj9tx(3o{2U)$JN`Jzy5DXk-G=HUCG3^>-8g^k1V>SHr{(1dx!e;zvZ2z1yO1UzxAr;*OLqKeGUvHv_j5 z{r-DQ$4OU^v`rEGOMx4)35W9`C%NhKhSo91w=R$1TFhs#YQ{Y@Yv3%3srUAY?*cZo^L&sUj{ zXd6^sHlx+PjRbs`9{G(EkdP{B3pBpaGi>G6)YG#(B4LSk8GBl7{+(AwXHIJ*f~HS^BI-^H^bVr zQ;Wg#q&^}cfo-+mEX$-VGgESr37|49y-pmRNwqe3LK;_Mf9y-Y-jr&qSD*c+QL0t9 zPvl@&jzn|`**8C{MOcE4CKQq@l`gZ|!nHyOTr*XA=%z@WI)u?_lf0C-=PlvGj?jvU zI|GfWNfQEU+5*`TPipsX{CMb6j$bvrJk=2c`Go`@$b(e9lMXmNi>$I}g6{#X=CKX+ zXtkPHSQ_-59MrIwF83F;8-*qKO%&^g>02A)9KD{W#_zP#Yd`xGc3^N-u0B7fBmPdo zwSopv@HiQ8&r}^&x_TA3O8_qQL@IVJkr^zvAR%I^02?ad#|_lxGCs@YnC8e6&rBTXk`|Gjn^r?5H_>g z8y`STl{1D2YUK@Z;cyP)_V*I^B5!0%1iq+0ja)KN4HRT*e-bB0(NOhlf*Y~65;lMQ zwy-)&Nj!E#<5U*RJKtT{`~?|e3dw={>yaa%J0cV{jT6mWg<2~w=$pROMlolQAGwJU zZ?{p8q9*@&Db*BQ7bVudv}UekUrjzZR5Y~7MDM1Rooyya;peAzCBIQcla_Wd{dN-T zp)dja)TnYOPNyTMS(bOiHgJn6PCOzM6QoZM5NZlnT3-iEQIEQcqffqx7~$#O(-D+& z`QoK2v&BfGNyi7vz%io4Z%(jpICXD>6(4gue|xk&ry&FqqmYIg^iR%dOWWEre&vYq zs`+H$;4DURTh>91B;QU5N@B14aT&@T%``0=i9GYU`pQT$Gy3R2y!`;g_({M;P#PHy zQ{iGs!OsO{1dW;nB^`-fRLZW^WJ-3u+#knX+2>6%;5Z`ilAGC~lY&m`Ey`NiJQ*CS zXG-Wh+{rOZ12(xwBJlS~<8qCS*M{tMGX=yc#@CmmY+ZuB4uXUz-%e+~k7i@93mrQ$ zX_z?Ym4vx}NetyI*;5N*nLPr*G_g+J>yESC()m>E&9`RTc$8ZctSB-zNSUG32ReJ+ z6vS6p8t%^cKfjF4v7R0sKn>5upx14{%WXwn9kP_<1!^q6hYLddXnn+Lz{-rx|GaF$MYfi>O16*_b>_w8FUB zr$ogcwR9G3NHb;>+1b@FWi!jr8Do5BuczaxjNK4z6qnA|J^ZwzXY$w!h602)is4qT zBglyi-)FdcFLy1bgM@fxiT?F5pceb{wAV0j)k##sPIZVDB0*UKW-Q zmF{Rv%O7!0&GtU7sIWVzfX|Pk=LB=Sje=p82?wsKqS1WB zt+~}d**F~ES8A?*bvK^6LX{wz?3%WfPZXbPxCakqHFu!z6+I{w{q4|G)2v&lXE3k5 zN9yZy{)A=I{%|7q9iWaFvFjTY`Fd8tw4!`U8J!X*_z~-CpXH`v7zO6%theOBxYWT+ z;OtAoBKg8wfw6Jl^z_u&#X;|ye#MNN+jf8G%s4HZWl0qDwGk6B;H_a8!6VPz!jU#D zDyo`s_1rOFL_Xq5{7h{s-UuTHf*WqsaH>ALB^ZyVPu#boE+LzEnOiyjxtS-gINVpz zys#k4Ml8GeU5po;gYEdT+Vpa|0&p20Ks@EYO&3P~_VwVY+cR7DVY+?ApT2hYfQSLr zJ<#6JcDdyGP8IddyK4kVKt1(DKDk$b>4z0zm&|^S`P!YlKt7cSN{UI!t%+~*#Pa8U zl+T$h9J9<^dZ&WpJ~HOBW9;f?VV}BZBMfoGKhByez4#QN9K0=RHhyN&TrWA=|HI36 z<>LG8Ghv(2eNojh+d9^CpVGwXy%oo>brMp3JYKa1xjsG;H0o8SZvgM>Y=uvr$H#Eo zS_wEYMFI(csohDLziHsKtEaoKQyu_G>e>2b>bLRaM%T=Xfwn!h9#Pa4xZ)$UUFZJj z(toJj!ASp*XA&2zr$nc~FiqT}1xNFR;99RyF8^`}8M~A`sEKu)uS_%Icup9M_q~bu z$FJChni!{aWa%$D+8Q@~(rvY`^2RggO2X>TQ!9ir%bmRh5vEy7 zPQ5S2>b~ge%Gr&=t7S?s&cM(ofY);ATGQm|`|x!U))|U|xSdGdgM}o_Y!5s{))iW@ z^=^fbppTsg;qiKf{ia&bv!P#h@dxgmI3jP=n}%RZHuG%!DkkYAYg`3oF(IYY!BTq6M%nU`US+N0e&K0Lffp#cf50#fmI#U2-qm(CT(Qi4 z#BKM8Z0^|BO;CFyjik@L-m;xmY<75>(H=*}+ob+np+tx|M^A6g%0tt(nAO1oYk+N> zl5-X%zKQ%qaOUZnu-=kqsNRmi$z+wYLmh>JvXAFDy#_0}+3zXrT9jkBJYyPQ2o)#F zKPBrVg{V~}Ay4e{vY<(X;D1>^uo?X*WLb~3jyB_)eVJNUQp=elBt=|5DuAPGBk||m zlCw^qa{FZ(Kh2DrFu%Iv%Zcyv%iF%TE@wP_HX>v#Do{^*uJsnDd3k#vv300XNTPSM zn{T_AdL~c9{0{EmmdU6}fJ}tTO1O}DgJ7Pi=Sl;L?bezWd`gM}p!-Q>e5QnLZ)R61 z!|_5w4#Y1iu9+9+!27?v% zTiWJnK)ps{`)RrBCA5?Nbe@vpQ9M74()`|RitVVHJipbCl{RLt^k>)88~&VbS}bk# zD=}XWrmUf95)_SByfyseMcQFcv{5UypU3xyG(TD=T9VncTRhqhoU^eN$jy`&1+YF< zA7^)CrnBT3Qcy-mXSLW^`#pR)d#6?Lf(bl)zJg=WyH16b?^&gnFyP1Xv2Ct~gs6tR zk_IefnsK7yi$B(}_HoCaF1cB^ahp43>8>ES}`>u0}M}Y7}JPb#l#I8 z?zu<2z0TDs1Im4S-CP_4Tr7!jKmL-su%zxRhLeIcDVMTYec`Feaf#CilOO%556SKu z7*LBZ+B|B$Xdh{b%^vI@y}42!J$X(=f@tmyvz(_z#MmT5{m zzI_V`6k4D-k``9eJAATx;F>~6_8#!lxd%?8W~a_1E(%vFzb)iWRf9yfz(?Oud zv%%P=@mSWQu_?hIW^xjAVE`o#L6%+9RdtNb&8M)neoxokiFuZDPb73NB>0 z66O5?s@7D|X&Be3;x);C641Vqkg1k^L(*Q25j!+QJGN zo2M%^!EKd6vgMVrvHjjz>-@;(vE0d<#9UmKjyG}NEqFQRK5#*tsn)?&Uy&1Vslj4| zJgh@62iAGR+1hFgd|1y~yq>(ZE)%Mi$Ur#tAXZK)%l3}ud*&6=n<6R>5hPybj#2rG zStw2-G|eO3@sP#BxMKR2w;rV~+&ZpD5&Ei(gLonE;>5JwTWRw`>n!r7`f0n^;Y?aE z8=uigFggHveh?JMKg3MLA)sjl|PZ>qLk~Bd7WdH)r=X&oPRn0fXQCx0a#)U}7nUV!1Ayx3phX z{o02Bg*7E8w+ia6j$lvm!LLZdG8u8ZHc`rrG=vD&o`UGx^XQahlZmhzfjPS8M8t8O zB@H{Ai@4rrHmppwH&XSX#g;RCT*E&_8HJkQy{9~}g_m4%V_DMG+Ih7;NglsMxt^6T z`nJ36fv_@j0>zLqfu5!{K;>jQ zvCenY$!mJedFM7i!?W7*e0@f#Y0_cs*~;F9il30uH1#ZgkKYtj{9?$p7Wgx{|0BWw zBZ*MQ=c-nBRv?F%T~CzcASL9z$9ZiJ1kP@NXRdJjQ=))BqVGSz+Sx384=^fJ-UELZ zC>v+~CQ$1A>jlbxh@MC!htv(82A0XoXg_I9_+>gs(7qtY=h7Dar-lAw!7OCaTI|V0 z>-5QL-BIP7U>xz@>J6VjpVyOrO`QEpf^4Oa-pqF040j7ySt~BT1TASWl}L_8{3pMv zxQRR_sw`s_baW=e!AjIJrz*4h(q`kUqAIl3w^-D`|OI|~D;bkPx68o;3=lm!JP9Z_*)px^0 z6V+#BWQ?$*RcEhCc;K@-KU4Mbr&1wODffWFEU$t&!xh5*Dk7-C+izUOfMq$pYFFnL zoBe|iv|Tb1&+#-{Rx<3>fmj90rmw#FnpU@WN}Yh!MaX9GuVqQ-bU47uq&c}B=%%E&G%oBi&7WOTd{9NL7U*xJesF*ArCP$n9Yix& zvP3#qrk}j!MI6#~r6u?8X?S-#lljCm$#S!Y!1xT4-(3fCTxxpg;RYWZ2&wx~#U0t} z{8VF_{?t9@rC`yWYMsTib`sMpc`27YRKm{Jl?pFP=7$ z`R#zcqr@Zuab!wy!vDI7|BBT$L#-qa4C^$C$(zYiaZ~(Uka+L<16VF}eq=|r5>Dn% zbGK1?x`RcE3qGeuo9zoxZ^yV%6Ct}%Kj=CiHF4LmpWAV*vnQ@^gvr~9d}qk?HGMhs zh@b^F&(GRKoz)&P!M7vCvF`WuTO*r5Q8FK#k=T`SJF+Psr#s-h_dy~hr);qmGG9N& z{$_e}$SdC<5IZ&hlPWd;Lat&g9hMXq=rXD4_4lCkSNQyIV>AiY7sx71dkt`_b-i>| z>b|~LYj|%wTSdA~ll5V-H|p>q*ge!6A;JbL-5xW+3(76E6SmKhF2sfQ!-P9ov7;BZ z1Y6%V%7$`RP;M;C622FRjuHNi_)zR%cX%QDdDZ9TUgPt^0C$GkQ}*0q*;-uMWiofY z>rI4dc28+QCs$>_=xKStDo^%9JtqezE2?MQ)lXKX(aJ$cw!~WP9ShCZFyx0yt8Fi7 z#;^T2n>T?%1MBBg!xd|%Yb~P6Q%9s*KcLO<73IuvKG5PIIRjZjGqdpiC{3zTK8EW~ zrl_+N{t$tLI2aT2E2Kp*s!1B~a_G27mpM_YPZq9SS-|yUZmdsyAw=EAenpO*Pj}M` z_*h?t%LI#J@dh^YgEX6ClLwmQQXHG$Kln{lM4zb-%kOr=1?SfaF0ElHN8*U5P#OCI zD+YW6sh~(itwAby6cAKJGcFc~R(`N@Kn{~L34O%-B(t9oa9N=(pL9QwwXuUXOX7D2 z5qbm9SYG`5sqv3s{8##X^L(pDyQQV6*chUTMOH9|AFeA&g8=7&8m&VM4=EfB^&sGeE$Mj1b6ScJyH!fWR3!#pHFE zxUAfv$N+A1TxKy$T=(e<9_tSq5(*xHcxD#fV|@Gq$4^K~Ny}gqm6TOf)lTc_8yFfH zo1C?=wX;9x;OKeb;w7Ay_vN7AkkGL3h{*UG2{#jyl2fwo+|AC(&C4$+DJ?61SV5?) zs;eh9G?JQ{TROYCU-pn+z3v?t92y=O9UGsRo%{58eqnKGd1Z5JduR9Ccj_MPCl?3+ z|BiLI{|@#yF8CoA0|WwwK!0+97{U$>hC>*|?Q3uz^8`j|YYWSl~NNsw9@>FRoRmKAv0W z370i%944v@YptGPulq9D^W}p)R(j9n`q{zNbVp#vME1tU+T*!rTuVwVJ%x{{0bgsl z{Gn!rQc=}0W&S!dBgKuI6qVsN)d#;aouLD-xj};;oKfX;fYpM+oAqMawV75JR$R&9j8km8Y-@H^%h0+00w>=EPL-k~y(v;f48IxQ zw>53qU|MLb_e3kys9g}sFH)MuaeByR2e8uT2COVyC{AOYCt9*SlIk9QTVht>*K9^y zpbh;I)_13NbxY5lXTIz>hzM=GB`>zL#mRGQ(}NMXs^|#DsiMb)0!OhVcmonAwr&yStIH5TAlAA_sv|C#Z z64QR$+d7^EiN{;WkEQ_2QYG~v1lK4%n~}up1wq9Ec_4p>IIjeQ{bmv6%IzDV!)Qt|<&N_XB_S^THyts?b z(BX%K)p(LAZ1tPugvCK$6SCUD*2qlyt~KZdP2@&o)Lip>ymHI#dwju1hg8M(dp(ri z#p~;8imwnND`jrVx+-6_MRF|_@3F@SFQ@+y6ZeXb-)GZ7(6&mKsRj2_0I5e)kqb^f zB4@#Q3)!DYX*&DtvX9)KG3@QjoYY~zdB^Xeck0Q7yjxC}de)`fvL<(BQo3=KU`;Qu z*%?-ger8WJ;f(>GFL;#aEwyub&6k+Y)+J^*BI)km>#t9|(qYNrF)b7G{2h)$71jQ5 z-n4!2q{c5UAuuJE^-K4!HEo}Ms(OvQ!1X{k%BKE~WKXL^O!KkCh4AekpETSKVlAN_ z8il5A*f2IY3aW2oMFXToRwz;f#*)eKSFpD;Oz+J^b`70w@{-b4z79D!D7aXpqJ@x3 z3Lk;ljw)IF2K0v8$N{fzOZB8&%cDS*@G)p(!e=>7q|QW{(0$dZB_=>qH>Ft4-cBI8 zyfK%}de59&&)LLaEDn_BZ|v5tc_xyin(g!13-0PxR-)j;Ha5c*A9tTx#4tw@Z1wi3 zK^nVdvlt7eR!j3C(#`CZXIht2)p8QTWKBa#rUcK+_ce3oNyWISGGHiR%s$$-2D2*Ln&*o;i6{tHm^YSi&sT-wBLhLSxMgi# zLvcmBU(KHkBhNLk%3f(2CdoMK)dA7kh;2JU5t|=X@0ubV&|SMj2V$-0z$PZ9Q+&3T zb}ab8KEq+pBtI^Y0>OFUR@^d#=a#2{@{*?7B-&^a<||Sid&FD$dsr^+YA)~7wO=tY z-Cd1aTI&^O2Qwfes1utHA7gLsEW2uoj5n?x%e)tnco6OBK1m1og`vXcp-SI2CYS}oNQS~_GNz~W54Iv`b`kJDSTHG=$Ln%{pJagh#m*NR}|TEe9 zRaFXmBcv`?Ea&9I^0|NTNjzO4Wx+h~dSi$cSRreU1%1r+oZAf>))8@6ZFC zpd_DSBg>e&A`p!QLtQI=nj$+s5OqV)@uEw|B{g~BWIl-_3ioUafSGIB?pSzmQUUIK zUG?Q$>rV?toqKTIyu~AHWWPYIY;5<^u>-jJvJQG`vMiL>ilkTIzyP)SK?m}Lb_K(G zEFzbKSEbjHZ8-zXs1iZX{8GjtoC=h%(AZS(D0u7($PvQH7>a*2d^UNAsyOOz)8socZn9`=LieFe!mkmAGa;h0Y(D(&( z=m4mu@GPmN^+^_`Z}m&v>#h9fZwx9btp-EYaIq1Ke5k=MCyDJ^l+Hde9wJQqHdF;X z-TZxBo7b!4@Pqvi7q#Vh`A9^CYwX2#8n$|Qg!5}ARxYM)c!4Sjj-~{2w_N##NvS$x zm|s3mJu!1V-tJ0ae@OK^L+efUM;RYYPZX*-m2FDjzU0Z-d^W4w=Va>kXu17xoBo`p z%=5kjkvbgiT=DG?q*<0cOBFPGB?fe--x8|tM{t^=OigsYEF)etPSdizIU`;xh5aY^IzBY#rT_Zo#;fbFmC_a`v!#hg5z|XRMCWvP-Z~HAdNVpto zZNU`ICtP_TG*TO49^^!9!H=a$^PgI!c+tY#@bZGW~RzBOr__#8?a*h{M{AnqesvRX?H=rR1VXo#7;j{1-L7s zYVu5U2-jzH{<(~bCNZV-t9CvQZtS?=x^opCm(l^8ciG362bq%VzS#LvT$r9Hf*d%r z!$TQhWH|+ZRp(+A*?+^s(#QV^321&C literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/pair_local_density_ld.tex b/doc/src/Eqs/pair_local_density_ld.tex new file mode 100644 index 0000000000..1affa67cd3 --- /dev/null +++ b/doc/src/Eqs/pair_local_density_ld.tex @@ -0,0 +1,10 @@ +\documentclass[12pt]{article} + +\begin{document} + + +$$ +\rho_i = \sum_{j \neq i} \varphi(r_{ij}) +$$ + +\end{document} diff --git a/doc/src/Eqs/pair_local_density_ld_implement.jpg b/doc/src/Eqs/pair_local_density_ld_implement.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e8b98125a2b9f4cb3532792431ceded0b74ce9f4 GIT binary patch literal 4300 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 O-M>TWf0!FYp8OB0fU_h3 literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/pair_local_density_ld_implement.tex b/doc/src/Eqs/pair_local_density_ld_implement.tex new file mode 100644 index 0000000000..85ee8bad21 --- /dev/null +++ b/doc/src/Eqs/pair_local_density_ld_implement.tex @@ -0,0 +1,10 @@ +\documentstyle[12pt]{article} + +\begin{document} + + +$$ +\rho_i^{(k)} = \sum_j b_\beta^{(k)} \varphi^{(k)} (r_{ij}) +$$ + +\end{document} diff --git a/doc/src/Eqs/pair_local_density_ld_multi.jpg b/doc/src/Eqs/pair_local_density_ld_multi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..feef991d498dca5d2ab0e8fa5ee54b275c7b73d9 GIT binary patch literal 3443 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 O{_`IHyZ@~*d*UDCeI%d& literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/pair_local_density_ld_multi.tex b/doc/src/Eqs/pair_local_density_ld_multi.tex new file mode 100644 index 0000000000..c441288c5d --- /dev/null +++ b/doc/src/Eqs/pair_local_density_ld_multi.tex @@ -0,0 +1,10 @@ +\documentclass[12pt]{article} + +\begin{document} + + +$$ +\rho_i = \sum_{j \neq i} b_\beta \varphi(r_{ij}) +$$ + +\end{document} diff --git a/doc/src/pair_local_density.txt b/doc/src/pair_local_density.txt new file mode 100644 index 0000000000..8cba705664 --- /dev/null +++ b/doc/src/pair_local_density.txt @@ -0,0 +1,207 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +pair_style local/density command :h3 + +[Syntax:] + +pair_style style arg :pre + +style = {local/density} +arg = name of file containing tabulated values of local density and the potential :ul + +[Examples:] + +pair_style local/density benzene_water.localdensity.table :pre + +pair_style hybrid/overlay table spline 500 local/density +pair_coeff * * local/density benzene_water.localdensity.table :pre + +[Description:] + +The local density (LD) potential is a new potential style that is, in some +sense,a generalization of embedded atom models (EAM). The name "local density +potential" arises from the fact that it assigns an energy to an atom depending +on the number of neighboring atoms of given type around it within a predefined +spherical volume (i.e., within a cutoff). The bottom-up coarse-graining (CG) +literature sugggests that such potentials can be widely useful in capturing +effective multibody forces in a computationally efficient manner so as to +improve the quality of CG models of implicit solvation"(Sanyal1)"_#Sanyal1 and +phase-segregation in liquid mixtures"(Sanyal2)"_#Sanyal2, and provide guidelines +to determine the extent of manybody correlations present in a CG +model."(Rosenberger)"_#Rosenberger The LD potential in LAMMPS is primarily +intended to be used as a corrective potential over traditional pair potentials +in bottom-up CG models, i.e., as a hybrid pair style with +other explicit pair interaction terms (e.g., table spline, Lennard Jones, etc.). +Because the LD potential is not a pair potential per se, it is implemented +simply as a single auxiliary file with all specifications that will be read +upon initialization. + +NOTE: Thus when used as the only interaction in the system, there is no +corresponding pair_coeff command and when used with other pair styles using the +hybrid/overlay option, the corresponding pair_coeff command must be supplied +* * as placeholders for the atomtypes. + +:line + +[System with a single CG atom type:] + +A system of a single atom type (e.g., LJ argon) with a single local density (LD) +potential would have an energy given by: + +:c,image(Eqs/pair_local_density_energy.jpg) + +where rho_i is the LD at atom i and F(rho) is similar in spirit to the +embedding function used in EAM potentials. The LD at atom i is given by the sum + +:c,image(Eqs/pair_local_density_ld.jpg) + +where phi is an indicator function that is one at r=0 and zero beyond a cutoff +distance R2. The choice of the functional form of phi is somewhat arbitrary, +but the following piecewise cubic function has proven sufficiently general: +"(Sanyal1)"_#Sanyal1, "(Sanyal2)"_#Sanyal2 "(Rosenberger)"_#Rosenberger + +:c,image(Eqs/pair_local_density_indicator_func.jpg) + +The constants {c} are chosen so that the indicator function smoothly +interpolates between 1 and 0 between the distances R1 and R2, which are +called the inner and outer cutoffs, respectively. Thus phi satisfies +phi(R1) = 1, phi(R2) = dphi/dr @ (r=R1) = dphi/dr @ (r=R2) = 0. The embedding +function F(rho) may or may not have a closed-form expression. To maintain +generality, it is practically represented with a spline-interpolated table +over a predetermined range of rho. Outside of that range it simply adopts zero +values at the endpoints. + +It can be shown that the total force between two atoms due to the LD potential +takes the form of a pair force, which motivates its designation as a LAMMPS +pair style. Please see "(Sanyal1)"_#Sanyal1 for details of the derivation. + +:line + +[Systems with arbitrary numbers of atom types:] + +The potential is easily generalized to systems involving multiple atom types: + +:c,image(Eqs/pair_local_density_energy_multi.jpg) + +with the LD expressed as + +:c,image(Eqs/pair_local_density_ld_multi.jpg) + +where alpha gives the type of atom i, beta the type of atom j, and the +coefficients a and b filter for atom types as specified by the user. a is +called the central atom filter as it determines to which atoms the +potential applies; a_alpha = 1 if the LD potential applies to atom type alpha +else zero. On the other hand, b is called the neighbor atom filter because it +specifies which atom types to use in the calculation of the LD; b_beta = 1 if +atom type beta contributes to the LD and zero otherwise. + +NOTE: Note that the potentials need not be symmetric with respect to atom types, +which is the reason for two distinct sets of coefficients a and b. An atom type +may contribute to the LD but not the potential, or to the potential but not the +LD. Such decisions are made by the user and should (ideally) be motivated on +physical grounds for the problem at hand. + +:line + +[General form for implementation in LAMMPS:] + +Of course, a system with many atom types may have many different possible LD +potentials, each with their own atom type filters, cutoffs, and embedding +functions. The most general form of this potential as implemented in the +pair_style local/density is: + +:c,image(Eqs/pair_local_density_energy_implement.jpg) + +where, k is an index that spans the (arbitrary) number of applied LD potentials +N_LD. Each LD is calculated as before with: + +:c,image(Eqs/pair_local_density_ld_implement.jpg) + +The superscript on the indicator function phi simply indicates that it is +associated with specific values of the cutoff distances R1(k) and R2(k). In +summary, there may be N_LD distinct LD potentials. With each potential type (k), +one must specify: + +the inner and outer cutoffs as R1 and R2 +the central type filter a(k), where k = 1,2,...N_LD +the neighbor type filter b(k), where k = 1,2,...N_LD +the LD potential function F(k)(rho), typically as a table that is later spline-interpolated :ul + +:line + +[Tabulated input file format:] + +Line 1: comment or blank (ignored) +Line 2: comment or blank (ignored) +Line 3: N_LD N_rho (# of LD potentials and # of tabulated values, single space separated) +Line 4: blank (ignored) +Line 5: R1(k) R2(k) (lower and upper cutoffs, single space separated) +Line 6: central-types (central atom types, single space separated) +Line 7: neighbor-types (neighbor atom types single space separated) +Line 8: rho_min rho_max drho (min, max and diff. in tabulated rho values, single space separated) +Line 9: F(k)(rho_min + 0.drho) +Line 10: F(k)(rho_min + 1.drho) +Line 11: F(k)(rho_min + 2.drho) +............ +Line 9+N_rho: F(k)(rho_min + N_rho . drho) +Line 10+N_rho: blank (ignored) :ul + +Block 2 :ul + +Block 3 :ul + +Block N_LD :ul + +Lines 5 to 9+N_rho constitute the first block. Thus the input file is separated +(by blank lines) into N_LD blocks each representing a separate LD potential and +each specifying its own upper and lower cutoffs, central and neighbor atoms, +and potential. In general, blank lines anywhere are ignored. + +:line + +[Mixing, shift, table, tail correction, restart, info]: +This pair style does not support automatic mixing. For atom type pairs alpha, +beta and alpha != beta, even if LD potentials of type (alpha, alpha) and +(beta, beta) are provided, you will need to explicitly provide LD potential +types (alpha, beta) and (beta, alpha) if need be (Here, the notation (alpha, +beta) means that alpha is the central atom to which the LD potential is applied +and beta is the neighbor atom which contributes to the LD potential on alpha). + +This pair style does not support the "pair_modify"_pair_modify.html +shift, table, and tail options. + +The local/density pair style does not write its information to "binary restart +files"_restart.html, since it is stored in tabulated potential files. +Thus, you need to re-specify the pair_style and pair_coeff commands in +an input script that reads a restart file. + +:line + +[Restrictions:] + +The local/density pair style is a part of the USER-MISC package. It is only +enabled if LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +[Related commands:] + +"pair_coeff"_pair_coeff.html + +[Default:] none + +:line + + +:link(Sanyal1) +[(Sanyal1)] Sanyal and Shell, Journal of Chemical Physics, 2016, 145 (3), 034109. +:link(Sanyal2) +[(Sanyal2)] Sanyal and Shell, Journal of Physical Chemistry B, 122 (21), 5678-5693. + +:link(Rosenberger) +[(Rosenberger)] Rosenberger, Sanyal, Shell and van der Vegt, Journal of Chemical Physics, 2019, 151 (4), 044111. diff --git a/examples/USER/misc/local_density/benzene_water/benzene_water.data b/examples/USER/misc/local_density/benzene_water/benzene_water.data new file mode 100644 index 0000000000..96a969670e --- /dev/null +++ b/examples/USER/misc/local_density/benzene_water/benzene_water.data @@ -0,0 +1,1406 @@ +LAMMPS data file for 380 CG benzene, 1000 CG water particles + + 1380 atoms + 0 bonds + 0 angles + 0 dihedrals + 0 impropers + + 2 atom types + 0 bond types + 0 angle types + 0 dihedral types + 0 improper types + +-1.2865e+01 1.2865e+01 xlo xhi +-1.2865e+01 1.2865e+01 ylo yhi +-6.4829e+01 6.4829e+01 zlo zhi + +Masses + + 1 78.1100 + 2 18.0100 + +Atoms + + 1 1 1 1.13167e+01 1.36833e+00 3.59100e+01 + 2 2 1 -2.54005e+00 -6.77848e+00 6.31800e+01 + 3 3 1 3.45833e+00 2.99833e+00 1.77200e+01 + 4 4 1 -5.29338e+00 -3.98015e+00 1.79183e+01 + 5 5 1 3.53500e+00 1.13833e+01 4.63833e+01 + 6 6 1 7.65167e+00 -6.10150e-01 6.08133e+01 + 7 7 1 -3.04172e+00 -1.08435e+01 1.49817e+01 + 8 8 1 9.06000e+00 -6.93348e+00 4.72967e+01 + 9 9 1 1.24400e+01 1.15750e+01 2.26183e+01 + 10 10 1 1.03467e+01 1.12017e+01 5.86533e+01 + 11 11 1 -4.09672e+00 1.20333e+01 2.08300e+01 + 12 12 1 -3.49338e+00 -6.45682e+00 3.52333e+00 + 13 13 1 -3.49672e+00 -7.83515e+00 1.11433e+01 + 14 14 1 3.23833e+00 1.86500e+00 -5.10695e+01 + 15 15 1 -7.12672e+00 -1.15385e+01 9.44333e+00 + 16 16 1 1.28000e+00 1.09700e+01 -1.65118e+00 + 17 17 1 1.55667e+00 5.65000e-01 3.40117e+01 + 18 18 1 1.18500e+01 7.30667e+00 1.88083e+01 + 19 19 1 -4.35005e+00 7.33833e+00 3.27417e+01 + 20 20 1 -1.12884e+01 1.08583e+01 2.75500e+00 + 21 21 1 3.66167e+00 2.29500e+00 -5.68778e+01 + 22 22 1 5.64667e+00 6.78000e+00 4.53733e+01 + 23 23 1 -9.83384e-01 1.08800e+01 5.10883e+01 + 24 24 1 -1.24467e+01 5.65500e+00 -6.30578e+01 + 25 25 1 -4.58384e-01 -5.32848e+00 1.37250e+01 + 26 26 1 -1.17084e+01 -8.37515e+00 3.66933e+01 + 27 27 1 -1.12351e+01 7.00000e-01 4.80717e+01 + 28 28 1 1.93833e+00 1.73333e+00 1.49667e+00 + 29 29 1 1.50000e-02 5.44000e+00 3.67267e+01 + 30 30 1 8.41000e+00 8.69833e+00 3.12633e+01 + 31 31 1 8.89667e+00 2.18167e+00 -5.41712e+01 + 32 32 1 -1.19317e+01 -1.04301e+01 5.96933e+01 + 33 33 1 -7.92838e+00 6.11000e+00 5.62183e+01 + 34 34 1 2.62500e+00 8.58833e+00 2.83100e+01 + 35 35 1 9.49333e+00 -6.19682e+00 -5.17362e+01 + 36 36 1 5.28833e+00 -1.16185e+01 -4.91667e-01 + 37 37 1 -1.21617e+01 7.89333e+00 5.02417e+01 + 38 38 1 -6.30505e+00 9.31333e+00 -5.45045e+01 + 39 39 1 1.12983e+01 -1.00685e+01 5.51300e+01 + 40 40 1 2.81167e+00 3.13167e+00 4.17517e+01 + 41 41 1 -4.16838e+00 -9.73848e+00 4.89217e+01 + 42 42 1 1.22867e+01 -7.32515e+00 4.27650e+01 + 43 43 1 -7.50672e+00 2.53333e+00 1.66650e+01 + 44 44 1 -1.12217e+01 1.13417e+01 5.47200e+01 + 45 45 1 -9.60172e+00 -9.51682e+00 4.82750e+01 + 46 46 1 -1.18901e+01 -1.20668e+01 3.19283e+01 + 47 47 1 1.00783e+01 1.19033e+01 4.53333e-01 + 48 48 1 3.54167e+00 -6.03848e+00 -5.03478e+01 + 49 49 1 -2.29505e+00 -2.32015e+00 -6.16662e+01 + 50 50 1 7.35000e-01 -1.04018e+01 2.42833e+00 + 51 51 1 2.46616e-01 3.92500e+00 6.83667e+00 + 52 52 1 -1.05717e+01 2.61833e+00 2.64150e+01 + 53 53 1 -3.49838e+00 4.16833e+00 1.78833e+00 + 54 54 1 -2.40672e+00 6.29667e+00 1.09083e+01 + 55 55 1 -7.88838e+00 -5.84682e+00 1.22167e+01 + 56 56 1 1.55500e+00 9.39333e+00 3.31100e+01 + 57 57 1 -1.17101e+01 -1.28285e+01 4.31983e+01 + 58 58 1 1.21983e+01 1.27183e+01 -5.94678e+01 + 59 59 1 -7.46667e-01 -4.92182e+00 7.68167e+00 + 60 60 1 2.23667e+00 8.75000e+00 1.86100e+01 + 61 61 1 3.24833e+00 -7.14515e+00 -6.15512e+01 + 62 62 1 -7.86718e-01 6.28500e+00 -5.06795e+01 + 63 63 1 -6.28172e+00 -1.20368e+01 6.18483e+01 + 64 64 1 8.39949e-01 -4.31182e+00 2.17383e+01 + 65 65 1 3.80000e+00 -6.14515e+00 6.23500e+01 + 66 66 1 6.28167e+00 1.08817e+01 3.28833e+00 + 67 67 1 -1.27034e+01 -5.98182e+00 2.27400e+01 + 68 68 1 -1.21101e+01 -6.90182e+00 7.41667e+00 + 69 69 1 -1.03867e+01 -3.20182e+00 1.73550e+01 + 70 70 1 -1.42005e+00 1.09500e+00 3.86350e+01 + 71 71 1 -9.33005e+00 2.74833e+00 5.28317e+01 + 72 72 1 -9.21838e+00 -6.13848e+00 2.62017e+01 + 73 73 1 -1.19451e+01 -2.99015e+00 -5.66378e+01 + 74 74 1 1.75500e+00 1.11067e+01 2.39233e+01 + 75 75 1 1.58333e+00 -2.41848e+00 4.22083e+01 + 76 76 1 -5.46667e-01 -8.76848e+00 2.95750e+01 + 77 77 1 8.46667e+00 3.83000e+00 -5.95028e+01 + 78 78 1 6.73282e-01 -2.40515e+00 -5.34112e+01 + 79 79 1 3.56167e+00 4.83000e+00 2.25267e+01 + 80 80 1 -9.36172e+00 7.33667e+00 5.85500e+00 + 81 81 1 -1.02467e+01 5.32167e+00 4.56667e+01 + 82 82 1 9.01500e+00 -1.23868e+01 3.27317e+01 + 83 83 1 -7.55838e+00 8.65500e+00 3.66283e+01 + 84 84 1 8.31000e+00 1.27917e+01 -5.29962e+01 + 85 85 1 -3.28338e+00 3.13183e-01 2.05767e+01 + 86 86 1 -6.25838e+00 -1.15285e+01 3.60800e+01 + 87 87 1 -6.80172e+00 -2.18483e-01 3.76283e+01 + 88 88 1 -1.17067e+01 3.50000e-01 6.86500e+00 + 89 89 1 -7.09838e+00 1.20850e+01 1.55517e+01 + 90 90 1 -1.00534e+01 1.19750e+01 2.68033e+01 + 91 91 1 1.27950e+01 1.76167e+00 5.73433e+01 + 92 92 1 7.60500e+00 9.70333e+00 2.12967e+01 + 93 93 1 -7.38672e+00 5.61667e-01 -5.88578e+01 + 94 94 1 5.85333e+00 6.97000e+00 3.74850e+01 + 95 95 1 2.45000e+00 -5.00348e+00 2.80667e+00 + 96 96 1 -4.18333e-01 7.94850e-01 2.59500e+01 + 97 97 1 -3.78338e+00 7.33667e+00 5.61667e+00 + 98 98 1 7.72500e+00 1.59500e+00 2.01500e+01 + 99 99 1 8.74500e+00 9.07167e+00 -4.69278e+01 + 100 100 1 -2.94338e+00 2.91333e+00 5.77383e+01 + 101 101 1 -3.24338e+00 -3.33330e-02 -5.61162e+01 + 102 102 1 5.59833e+00 -4.42848e+00 5.76200e+01 + 103 103 1 1.04667e+00 -9.24515e+00 5.10550e+01 + 104 104 1 -4.37672e+00 7.81517e-01 6.34100e+01 + 105 105 1 -1.25034e+01 -6.78848e+00 5.11700e+01 + 106 106 1 2.33330e-02 -4.50182e+00 5.87117e+01 + 107 107 1 -1.24284e+01 1.16067e+01 1.57150e+01 + 108 108 1 1.43495e+00 -9.82848e+00 5.69350e+01 + 109 109 1 1.91333e+00 -5.52848e+00 3.47633e+01 + 110 110 1 2.61616e-01 -6.07848e+00 -5.67595e+01 + 111 111 1 6.13833e+00 -6.87015e+00 3.08283e+01 + 112 112 1 -7.20838e+00 6.06667e+00 -5.00228e+01 + 113 113 1 -7.28005e+00 -1.19602e+01 -5.05812e+01 + 114 114 1 -1.13534e+01 1.22733e+01 -5.41962e+01 + 115 115 1 1.06233e+01 -2.53682e+00 3.90083e+01 + 116 116 1 6.65833e+00 -4.72015e+00 7.56333e+00 + 117 117 1 -6.83005e+00 5.55667e+00 -6.42045e+01 + 118 118 1 -2.36672e+00 -1.22518e+01 -6.48178e+01 + 119 119 1 -5.24838e+00 -1.42667e+00 2.66817e+01 + 120 120 1 2.16167e+00 1.06000e+01 5.53217e+01 + 121 121 1 4.57333e+00 -2.99348e+00 1.17383e+01 + 122 122 1 6.76833e+00 2.61667e-01 4.27167e+01 + 123 123 1 -6.77838e+00 -4.25182e+00 5.03767e+01 + 124 124 1 1.24517e+01 -7.96817e-01 -5.15728e+01 + 125 125 1 2.84333e+00 -5.85182e+00 2.58333e+01 + 126 126 1 8.41667e+00 -9.71848e+00 3.96833e+01 + 127 127 1 6.57667e+00 -7.96515e+00 1.33400e+01 + 128 128 1 1.09900e+01 -4.06182e+00 5.68800e+01 + 129 129 1 -5.07838e+00 7.13667e+00 -1.98528e+01 + 130 130 1 2.58333e-01 -1.07068e+01 4.64467e+01 + 131 131 1 -8.13338e+00 -8.46817e-01 2.22617e+01 + 132 132 1 2.53167e+00 8.81167e+00 4.19650e+01 + 133 133 1 6.13333e+00 -9.78483e-01 2.48083e+01 + 134 134 1 7.60833e+00 -1.13718e+01 4.97700e+01 + 135 135 1 -6.00338e+00 4.18667e+00 4.08367e+01 + 136 136 1 -6.24505e+00 1.27683e+01 3.12800e+01 + 137 137 1 -1.03751e+01 9.64167e+00 1.05033e+01 + 138 138 1 1.03583e+01 -6.16015e+00 6.28883e+01 + 139 139 1 3.58167e+00 -1.01085e+01 -5.40362e+01 + 140 140 1 -9.88005e+00 8.06667e-01 -4.82545e+01 + 141 141 1 -2.32672e+00 -3.64682e+00 -7.49513e-01 + 142 142 1 -4.98333e-01 -2.78515e+00 2.95483e+01 + 143 143 1 1.14167e+00 6.22000e+00 5.85350e+01 + 144 144 1 -2.03505e+00 -8.84015e+00 1.96617e+01 + 145 145 1 1.10817e+01 -1.26682e+00 2.30250e+01 + 146 146 1 1.01333e+00 -1.09348e+00 1.69400e+01 + 147 147 1 -2.07505e+00 6.90667e+00 4.10650e+01 + 148 148 1 7.50500e+00 -6.81682e+00 3.53917e+01 + 149 149 1 3.66833e+00 -9.79515e+00 7.41500e+00 + 150 150 1 7.56333e+00 4.77333e+00 1.54983e+01 + 151 151 1 6.31333e+00 -1.07802e+01 -5.85278e+01 + 152 152 1 1.09167e+01 1.04850e+01 2.72550e+01 + 153 153 1 3.46667e+00 3.47500e+00 6.29217e+01 + 154 154 1 3.94167e+00 -6.31817e-01 6.43667e+00 + 155 155 1 -4.56338e+00 6.62833e+00 4.51317e+01 + 156 156 1 -1.03467e+01 -1.58015e+00 1.18817e+01 + 157 157 1 -2.38005e+00 -2.67515e+00 3.45367e+01 + 158 158 1 -3.91718e-01 4.89833e+00 3.10600e+01 + 159 159 1 -6.46338e+00 4.46500e+00 2.95883e+01 + 160 160 1 -9.10672e+00 -9.11682e+00 5.45550e+01 + 161 161 1 9.00333e+00 9.02167e+00 -4.21951e+00 + 162 162 1 -2.01338e+00 4.48667e+00 6.29967e+01 + 163 163 1 -1.19851e+01 -1.00935e+01 -6.46545e+01 + 164 164 1 -3.26505e+00 -5.20848e+00 3.97233e+01 + 165 165 1 -7.88384e-01 1.18817e+01 -5.17195e+01 + 166 166 1 -1.05584e+01 4.20167e+00 3.65000e+01 + 167 167 1 6.73667e+00 -5.37182e+00 2.17150e+01 + 168 168 1 9.24000e+00 -1.05015e+00 4.80400e+01 + 169 169 1 3.44833e+00 -6.55848e+00 1.72233e+01 + 170 170 1 1.13383e+01 3.78333e+00 9.67500e+00 + 171 171 1 -1.25551e+01 -1.10935e+01 5.13333e+00 + 172 172 1 2.19500e+00 -6.97348e+00 4.04667e+01 + 173 173 1 -1.27333e+00 -1.10385e+01 2.53350e+01 + 174 174 1 5.52167e+00 -1.32515e+00 3.14533e+01 + 175 175 1 8.07667e+00 -1.83348e+00 -5.80478e+01 + 176 176 1 8.67333e+00 -1.02018e+01 2.00083e+01 + 177 177 1 -1.59000e+00 5.92833e+00 2.66067e+01 + 178 178 1 -6.14838e+00 -1.06667e-01 3.13567e+01 + 179 179 1 -8.64505e+00 4.73500e+00 1.10800e+01 + 180 180 1 -8.68384e-01 1.22800e+01 5.99517e+01 + 181 181 1 -1.03967e+01 -2.55682e+00 2.96850e+01 + 182 182 1 -1.17784e+01 3.15167e+00 1.99750e+01 + 183 183 1 -8.21005e+00 -1.00568e+01 4.05383e+01 + 184 184 1 7.79000e+00 -9.15348e+00 3.68833e+00 + 185 185 1 7.55333e+00 -9.54182e+00 5.98867e+01 + 186 186 1 -1.11672e+00 1.51333e+00 4.74200e+01 + 187 187 1 -1.04284e+01 3.73000e+00 -1.90951e+00 + 188 188 1 -9.98672e+00 7.42333e+00 -5.88145e+01 + 189 189 1 1.14917e+01 1.69333e+00 5.24250e+01 + 190 190 1 9.18000e+00 4.07500e+00 4.02733e+01 + 191 191 1 -1.01167e+01 -4.44015e+00 4.04817e+01 + 192 192 1 2.08500e+00 -1.47182e+00 -5.95578e+01 + 193 193 1 1.17050e+01 6.66000e+00 1.31600e+01 + 194 194 1 -4.07172e+00 -1.16768e+01 5.46117e+01 + 195 195 1 -2.48838e+00 1.06033e+01 3.61717e+01 + 196 196 1 -1.08584e+01 -2.80848e+00 5.31700e+01 + 197 197 1 1.16333e+00 -1.16735e+01 -5.79945e+01 + 198 198 1 8.07000e+00 1.03083e+01 1.65617e+01 + 199 199 1 -1.09384e+01 7.82167e+00 3.11617e+01 + 200 200 1 -6.49172e+00 1.09500e+01 4.12067e+01 + 201 201 1 1.09100e+01 -1.15500e+00 2.98300e+01 + 202 202 1 2.23833e+00 -1.12552e+01 6.28117e+01 + 203 203 1 4.25667e+00 -1.13168e+01 3.41067e+01 + 204 204 1 -6.55838e+00 4.17000e+00 2.22950e+01 + 205 205 1 -1.22117e+01 -1.14485e+01 1.06617e+01 + 206 206 1 -9.55838e+00 9.14333e+00 6.09967e+01 + 207 207 1 1.19483e+01 1.00883e+01 6.40100e+01 + 208 208 1 9.67500e+00 -1.13501e+01 1.50117e+01 + 209 209 1 -2.24338e+00 9.01833e+00 1.57817e+01 + 210 210 1 9.67333e+00 1.06200e+01 8.67167e+00 + 211 211 1 5.55167e+00 7.27167e+00 -5.70878e+01 + 212 212 1 4.45500e+00 7.97833e+00 5.08950e+01 + 213 213 1 -6.90505e+00 -1.01318e+01 2.52033e+01 + 214 214 1 -1.36338e+00 -9.39848e+00 3.53433e+01 + 215 215 1 -1.05901e+01 4.32500e+00 -5.29012e+01 + 216 216 1 1.24717e+01 2.32833e+00 1.88667e+00 + 217 217 1 -3.94505e+00 8.05167e+00 6.02567e+01 + 218 218 1 1.28167e+01 4.57667e+00 6.12767e+01 + 219 219 1 -4.95172e+00 -5.78348e+00 2.97567e+01 + 220 220 1 1.25833e+00 1.00850e+01 6.88667e+00 + 221 221 1 -8.97338e+00 -7.86348e+00 3.21150e+01 + 222 222 1 7.88667e+00 5.52000e+00 7.05000e-01 + 223 223 1 1.27983e+01 8.15167e+00 -5.09212e+01 + 224 224 1 3.83333e+00 6.09167e+00 -4.79295e+01 + 225 225 1 -1.11667e-01 -4.16817e-01 1.03400e+01 + 226 226 1 1.07550e+01 7.84333e+00 3.53817e+01 + 227 227 1 -2.76838e+00 -6.56515e+00 5.41733e+01 + 228 228 1 8.26667e+00 9.40833e+00 -6.14178e+01 + 229 229 1 -7.21172e+00 1.13300e+01 5.11817e+01 + 230 230 1 -8.28838e+00 1.19667e+00 5.89717e+01 + 231 231 1 -2.09672e+00 -8.67682e+00 -5.22595e+01 + 232 232 1 -5.16838e+00 3.45000e+00 3.51083e+01 + 233 233 1 -5.17505e+00 4.76833e+00 -5.53045e+01 + 234 234 1 4.43167e+00 -4.74015e+00 4.74850e+01 + 235 235 1 3.95167e+00 -7.18170e-02 -2.84178e+01 + 236 236 1 3.85000e+00 3.06667e+00 2.82967e+01 + 237 237 1 -1.09784e+01 -2.53015e+00 3.50133e+01 + 238 238 1 3.62500e+00 6.34000e+00 -6.19212e+01 + 239 239 1 -1.06184e+01 -8.57348e+00 -5.71662e+01 + 240 240 1 6.00000e-01 -1.13335e+01 1.06100e+01 + 241 241 1 -8.44838e+00 7.62333e+00 1.64667e+01 + 242 242 1 -9.15672e+00 1.01167e+01 -6.37628e+01 + 243 243 1 -1.06505e+00 -2.52182e+00 -4.86678e+01 + 244 244 1 5.72833e+00 -5.72682e+00 -5.63145e+01 + 245 245 1 -6.58338e+00 -5.25015e+00 -5.87128e+01 + 246 246 1 7.71333e+00 -1.10068e+01 2.48433e+01 + 247 247 1 -2.44505e+00 1.11683e+01 4.52900e+01 + 248 248 1 -5.54172e+00 1.11900e+01 -2.25618e+00 + 249 249 1 1.17017e+01 5.46333e+00 2.39833e+01 + 250 250 1 -1.59500e+00 3.05167e+00 -6.08212e+01 + 251 251 1 7.33333e-01 8.61667e+00 6.36383e+01 + 252 252 1 2.23833e+00 3.36517e-01 5.79667e+01 + 253 253 1 -5.28172e+00 -4.06515e+00 -5.27795e+01 + 254 254 1 5.98333e-01 -7.68515e+00 -3.44951e+00 + 255 255 1 1.06717e+01 8.53167e+00 -5.61395e+01 + 256 256 1 -8.46505e+00 -9.96348e+00 -1.99785e+00 + 257 257 1 5.19333e+00 7.36500e+00 9.51667e+00 + 258 258 1 -5.94338e+00 -1.00101e+01 4.38000e+01 + 259 259 1 -8.62172e+00 -6.77515e+00 1.48167e+00 + 260 260 1 -1.09651e+01 -2.77682e+00 3.29833e+00 + 261 261 1 8.24333e+00 -1.05768e+01 -6.36662e+01 + 262 262 1 6.66833e+00 -1.73682e+00 -5.19778e+01 + 263 263 1 7.96333e+00 4.28167e+00 6.48033e+01 + 264 264 1 4.67000e+00 6.05000e-01 -6.28412e+01 + 265 265 1 3.20833e+00 7.52833e+00 1.41017e+01 + 266 266 1 8.49000e+00 -5.60348e+00 5.22600e+01 + 267 267 1 -6.09338e+00 -1.95682e+00 7.50833e+00 + 268 268 1 7.17167e+00 7.17500e+00 -5.15578e+01 + 269 269 1 -4.20672e+00 9.96333e+00 9.71333e+00 + 270 270 1 1.26950e+01 6.89167e+00 5.61933e+01 + 271 271 1 -4.09672e+00 2.40000e+00 5.24567e+01 + 272 272 1 1.10533e+01 -6.43348e+00 3.18467e+01 + 273 273 1 -8.97838e+00 1.10650e+01 2.09467e+01 + 274 274 1 -1.27505e+00 5.84833e+00 2.05150e+01 + 275 275 1 1.13717e+01 5.53333e-01 -6.22962e+01 + 276 276 1 7.04167e+00 -1.61348e+00 2.27833e+00 + 277 277 1 9.14500e+00 8.91500e+00 4.77283e+01 + 278 278 1 -1.07734e+01 -5.61348e+00 6.09833e+01 + 279 279 1 -9.55005e+00 9.78183e-01 4.21433e+01 + 280 280 1 6.32500e+00 -4.59682e+00 4.25767e+01 + 281 281 1 6.93167e+00 9.66333e+00 6.36833e+01 + 282 282 1 -4.51172e+00 2.25333e+00 8.89667e+00 + 283 283 1 -1.62505e+00 9.82333e+00 -5.69978e+01 + 284 284 1 9.66667e+00 -5.19182e+00 2.66767e+01 + 285 285 1 7.51500e+00 6.41333e+00 5.90400e+01 + 286 286 1 1.17567e+01 -2.47515e+00 4.43750e+01 + 287 287 1 3.52167e+00 2.86517e-01 5.17950e+01 + 288 288 1 2.56500e+00 1.18833e+01 3.76950e+01 + 289 289 1 4.74500e+00 4.52500e+00 5.53550e+01 + 290 290 1 9.29500e+00 1.02767e+01 5.32383e+01 + 291 291 1 9.82333e+00 -6.84182e+00 -6.04762e+01 + 292 292 1 4.22167e+00 -1.27585e+01 -4.91712e+01 + 293 293 1 3.87000e+00 6.36667e-01 4.66350e+01 + 294 294 1 5.22333e+00 -1.01318e+01 4.35450e+01 + 295 295 1 4.66333e+00 2.66167e+00 1.15517e+01 + 296 296 1 7.18500e+00 2.78500e+00 5.46833e+00 + 297 297 1 -1.18451e+01 8.21000e+00 3.99900e+01 + 298 298 1 6.81167e+00 7.91500e+00 2.58367e+01 + 299 299 1 8.34833e+00 9.49000e+00 4.07533e+01 + 300 300 1 -2.28005e+00 1.05200e+01 1.56667e+00 + 301 301 1 -8.17172e+00 1.09267e+01 4.66433e+01 + 302 302 1 -1.25601e+01 2.05667e+00 -5.71462e+01 + 303 303 1 -1.13001e+01 -9.11182e+00 1.54983e+01 + 304 304 1 -1.15301e+01 -4.64348e+00 -6.17728e+01 + 305 305 1 4.30000e+00 -1.12985e+01 2.85467e+01 + 306 306 1 9.61167e+00 3.30667e+00 -4.85445e+01 + 307 307 1 4.86000e+00 1.18850e+01 1.22533e+01 + 308 308 1 -1.09667e+00 1.83330e-02 -1.18012e+01 + 309 309 1 1.00683e+01 4.57333e+00 2.88000e+01 + 310 310 1 3.12833e+00 -1.24468e+01 1.67350e+01 + 311 311 1 3.05833e+00 1.16183e+01 -6.17128e+01 + 312 312 1 -2.86672e+00 -6.10182e+00 2.35583e+01 + 313 313 1 7.53500e+00 2.00000e-02 5.54433e+01 + 314 314 1 -1.41005e+00 1.18017e+01 3.03900e+01 + 315 315 1 -6.77005e+00 -6.68483e-01 1.35049e+00 + 316 316 1 1.15483e+01 -9.90682e+00 2.74800e+01 + 317 317 1 -6.81005e+00 1.46333e+00 4.77233e+01 + 318 318 1 -7.04505e+00 -4.14348e+00 6.47683e+01 + 319 319 1 -4.44172e+00 9.97000e+00 2.53533e+01 + 320 320 1 6.26167e+00 4.66670e-02 3.76633e+01 + 321 321 1 -7.18838e+00 -8.39015e+00 1.86550e+01 + 322 322 1 1.23800e+01 -1.23135e+01 4.93233e+01 + 323 323 1 -6.50510e-02 6.13833e+00 4.72633e+01 + 324 324 1 -1.09534e+01 -5.99682e+00 -5.09095e+01 + 325 325 1 -1.08917e+01 -9.63848e+00 2.19983e+01 + 326 326 1 -1.16505e+00 -1.31000e+00 5.40950e+01 + 327 327 1 8.61500e+00 5.27667e+00 5.23883e+01 + 328 328 1 2.62000e+00 6.57167e+00 2.86167e+00 + 329 329 1 -1.62172e+00 2.99833e+00 1.49850e+01 + 330 330 1 -4.20338e+00 1.43667e+00 -5.05678e+01 + 331 331 1 -1.63338e+00 -8.63483e-01 4.38667e+00 + 332 332 1 -2.99505e+00 -1.15952e+01 5.73833e+00 + 333 333 1 -8.51505e+00 7.22500e+00 2.58650e+01 + 334 334 1 1.00183e+01 -5.50182e+00 1.79333e+01 + 335 335 1 4.59000e+00 1.15700e+01 5.96317e+01 + 336 336 1 1.12150e+01 -4.89348e+00 1.17950e+01 + 337 337 1 -5.72172e+00 6.76500e+00 5.01783e+01 + 338 338 1 -8.14338e+00 3.48833e+00 3.82667e+00 + 339 339 1 -6.27672e+00 -2.42182e+00 5.54567e+01 + 340 340 1 -8.89005e+00 -4.91848e+00 4.48850e+01 + 341 341 1 1.07617e+01 -9.76182e+00 -5.52695e+01 + 342 342 1 -3.48672e+00 8.29833e+00 5.51450e+01 + 343 343 1 -6.81505e+00 7.57167e+00 7.86667e-01 + 344 344 1 3.36833e+00 -4.70015e+00 5.35033e+01 + 345 345 1 1.19017e+01 6.61517e-01 1.58133e+01 + 346 346 1 -6.74005e+00 -1.26752e+01 3.16167e+00 + 347 347 1 -7.87672e+00 1.25567e+01 5.74817e+01 + 348 348 1 -1.48338e+00 -5.62348e+00 4.49317e+01 + 349 349 1 -1.62833e+00 7.82000e+00 -6.08678e+01 + 350 350 1 -9.30005e+00 4.05000e-01 -6.37712e+01 + 351 351 1 -1.15751e+01 1.26117e+01 3.70600e+01 + 352 352 1 6.68167e+00 -1.15435e+01 5.50633e+01 + 353 353 1 -4.12172e+00 -1.37515e+00 4.25467e+01 + 354 354 1 1.13083e+01 6.89167e+00 4.68167e+00 + 355 355 1 -8.20005e+00 -9.47348e+00 -6.21212e+01 + 356 356 1 3.63500e+00 1.00733e+01 -5.40245e+01 + 357 357 1 -2.60005e+00 -8.37848e+00 -6.05162e+01 + 358 358 1 1.25900e+01 -1.51848e+00 6.28550e+01 + 359 359 1 8.73167e+00 -1.04252e+01 9.58833e+00 + 360 360 1 7.08667e+00 -2.11182e+00 1.61733e+01 + 361 361 1 -8.21005e+00 -6.48483e-01 -5.36795e+01 + 362 362 1 -1.16967e+01 2.42333e+00 3.17633e+01 + 363 363 1 6.76167e+00 -3.25015e+00 -6.34778e+01 + 364 364 1 -8.35000e-01 -3.41015e+00 4.92800e+01 + 365 365 1 -5.81838e+00 1.20017e+01 -6.03645e+01 + 366 366 1 9.25167e+00 -1.27385e+01 4.43900e+01 + 367 367 1 3.53667e+00 -1.03485e+01 2.17783e+01 + 368 368 1 -6.36505e+00 -5.73848e+00 3.58900e+01 + 369 369 1 -4.67005e+00 -1.07385e+01 -5.62328e+01 + 370 370 1 5.56000e+00 4.32833e+00 3.27267e+01 + 371 371 1 -4.15005e+00 -7.68182e+00 5.88083e+01 + 372 372 1 9.83833e+00 3.96167e+00 4.64567e+01 + 373 373 1 -6.84005e+00 -7.32182e+00 6.94667e+00 + 374 374 1 -4.53672e+00 -1.13000e+00 1.38617e+01 + 375 375 1 6.95000e-01 -1.69015e+00 6.39450e+01 + 376 376 1 3.63333e-01 5.22833e+00 -5.47112e+01 + 377 377 1 8.84000e+00 -4.84830e-02 1.13333e+01 + 378 378 1 -3.03172e+00 -9.20348e+00 -6.08333e-01 + 379 379 1 4.58333e-01 5.75167e+00 5.28617e+01 + 380 380 1 -2.17005e+00 -1.07718e+01 4.02383e+01 + 381 381 2 -1.02401e+01 -1.19015e+00 -1.80678e+01 + 382 382 2 1.18700e+01 -4.44015e+00 2.02154e-01 + 383 383 2 7.30000e+00 -2.06015e+00 -4.37478e+01 + 384 384 2 9.95000e+00 1.46000e+00 -4.43378e+01 + 385 385 2 -1.18801e+01 -1.24802e+01 -2.76578e+01 + 386 386 2 -6.80051e-01 9.39000e+00 -3.69778e+01 + 387 387 2 -8.28005e+00 2.09850e-01 -1.21578e+01 + 388 388 2 -2.45005e+00 -1.06901e+01 -2.57978e+01 + 389 389 2 -1.05501e+01 1.10200e+01 -3.73578e+01 + 390 390 2 -1.15801e+01 1.18700e+01 -1.38078e+01 + 391 391 2 9.62000e+00 -3.18015e+00 -3.03078e+01 + 392 392 2 8.11000e+00 -4.45015e+00 -4.69678e+01 + 393 393 2 9.05000e+00 1.22100e+01 -3.89378e+01 + 394 394 2 9.60000e-01 3.10000e+00 -4.21785e+00 + 395 395 2 1.08100e+01 4.27000e+00 -2.98378e+01 + 396 396 2 -1.22701e+01 -1.11202e+01 -1.15978e+01 + 397 397 2 -4.00005e+00 -1.15901e+01 -3.85878e+01 + 398 398 2 -8.06005e+00 6.25000e+00 -2.85378e+01 + 399 399 2 8.85000e+00 3.72000e+00 -2.46178e+01 + 400 400 2 7.00000e-01 9.29000e+00 -1.56378e+01 + 401 401 2 1.20200e+01 1.25000e+01 -1.54078e+01 + 402 402 2 5.53000e+00 1.21000e+00 -2.16978e+01 + 403 403 2 -1.03005e+00 -8.76015e+00 -4.32778e+01 + 404 404 2 6.74000e+00 -3.00150e-01 -4.71478e+01 + 405 405 2 6.26000e+00 -4.50150e-01 -1.13078e+01 + 406 406 2 2.20000e+00 -1.15302e+01 -2.55578e+01 + 407 407 2 2.51000e+00 8.13000e+00 -3.50578e+01 + 408 408 2 9.66000e+00 -5.00150e-01 -4.46785e+00 + 409 409 2 -7.00510e-02 -1.03102e+01 -8.19785e+00 + 410 410 2 -5.22005e+00 -2.46015e+00 -3.54878e+01 + 411 411 2 -3.00005e+00 5.00000e-01 -8.86785e+00 + 412 412 2 4.50000e+00 -6.97015e+00 -2.34178e+01 + 413 413 2 7.21000e+00 -2.67015e+00 -9.79785e+00 + 414 414 2 6.64000e+00 7.30000e-01 -1.68478e+01 + 415 415 2 5.07000e+00 -7.89015e+00 -4.75178e+01 + 416 416 2 -9.74005e+00 -6.40015e+00 -4.25378e+01 + 417 417 2 -4.11005e+00 7.84000e+00 -4.61278e+01 + 418 418 2 3.85000e+00 -1.70015e+00 -4.32778e+01 + 419 419 2 5.79000e+00 -2.86015e+00 -4.06785e+00 + 420 420 2 -4.76005e+00 1.16800e+01 -4.70378e+01 + 421 421 2 -6.68005e+00 -5.66015e+00 -2.77785e+00 + 422 422 2 -5.40051e-01 1.46000e+00 -7.06785e+00 + 423 423 2 8.80000e+00 1.26600e+01 -4.33578e+01 + 424 424 2 -4.34005e+00 1.36000e+00 -2.45078e+01 + 425 425 2 3.14000e+00 -7.38015e+00 -6.37785e+00 + 426 426 2 -3.12005e+00 6.33000e+00 -4.18478e+01 + 427 427 2 -5.80051e-01 8.01000e+00 -4.53878e+01 + 428 428 2 5.12000e+00 -2.50015e+00 -1.82578e+01 + 429 429 2 9.03000e+00 -2.18015e+00 -4.62178e+01 + 430 430 2 -2.10051e-01 -8.00015e+00 -4.92778e+01 + 431 431 2 1.15900e+01 -1.53015e+00 -3.57478e+01 + 432 432 2 2.39949e-01 7.50000e+00 -2.59378e+01 + 433 433 2 -1.60005e+00 6.63000e+00 -2.77785e+00 + 434 434 2 -1.25301e+01 -2.96015e+00 -2.55478e+01 + 435 435 2 8.62000e+00 -2.89015e+00 -2.06278e+01 + 436 436 2 4.57000e+00 8.15000e+00 -3.08778e+01 + 437 437 2 -8.50005e+00 1.06900e+01 -2.59678e+01 + 438 438 2 6.05000e+00 9.46000e+00 -7.65785e+00 + 439 439 2 8.38000e+00 -1.12802e+01 -3.71678e+01 + 440 440 2 -9.42005e+00 7.86000e+00 -1.77478e+01 + 441 441 2 -5.09005e+00 4.14000e+00 -4.29678e+01 + 442 442 2 5.73000e+00 -6.57015e+00 -1.60000e-01 + 443 443 2 1.03800e+01 -9.55015e+00 -3.29778e+01 + 444 444 2 8.68000e+00 -3.54015e+00 -3.51478e+01 + 445 445 2 -4.30051e-01 8.66000e+00 -8.42785e+00 + 446 446 2 -9.07005e+00 4.91000e+00 -1.08878e+01 + 447 447 2 -1.86005e+00 3.42000e+00 -2.34778e+01 + 448 448 2 9.43000e+00 -1.23802e+01 -1.31278e+01 + 449 449 2 5.28000e+00 9.97000e+00 -3.92178e+01 + 450 450 2 -4.80051e-01 7.00000e+00 -1.61578e+01 + 451 451 2 4.70000e-01 1.61000e+00 -4.71278e+01 + 452 452 2 1.15100e+01 1.17600e+01 -4.89878e+01 + 453 453 2 -7.41005e+00 -9.70150e-01 -1.63978e+01 + 454 454 2 -1.49005e+00 8.88000e+00 -4.25878e+01 + 455 455 2 -5.37005e+00 -1.14101e+01 -3.46378e+01 + 456 456 2 -1.18701e+01 1.08000e+00 -2.70278e+01 + 457 457 2 -6.47005e+00 -5.11015e+00 -7.43785e+00 + 458 458 2 7.03000e+00 7.11000e+00 -2.72078e+01 + 459 459 2 1.10000e+01 7.53000e+00 -1.49078e+01 + 460 460 2 -1.07005e+00 1.04100e+01 -4.65978e+01 + 461 461 2 -1.15201e+01 -8.59015e+00 -3.35178e+01 + 462 462 2 -5.20005e+00 2.88000e+00 -6.38785e+00 + 463 463 2 5.55000e+00 -5.10015e+00 -2.66078e+01 + 464 464 2 1.27700e+01 -1.09702e+01 -1.42678e+01 + 465 465 2 8.68000e+00 8.71000e+00 -1.45678e+01 + 466 466 2 5.20000e+00 -8.00150e-01 -2.55978e+01 + 467 467 2 1.15700e+01 -9.75015e+00 -5.44785e+00 + 468 468 2 -1.05801e+01 1.11600e+01 -9.07785e+00 + 469 469 2 2.18000e+00 -5.93015e+00 -3.15678e+01 + 470 470 2 4.14000e+00 5.64000e+00 -1.93578e+01 + 471 471 2 -1.13901e+01 9.20000e-01 -3.38078e+01 + 472 472 2 2.72000e+00 1.16400e+01 -7.09785e+00 + 473 473 2 -2.81005e+00 8.78000e+00 -9.77785e+00 + 474 474 2 1.70000e+00 6.18000e+00 -1.81278e+01 + 475 475 2 -5.05005e+00 5.20000e-01 -2.05478e+01 + 476 476 2 -6.93005e+00 -2.13015e+00 -8.39785e+00 + 477 477 2 2.92000e+00 3.99000e+00 -2.49378e+01 + 478 478 2 9.71000e+00 9.98000e+00 -2.88578e+01 + 479 479 2 -1.11001e+01 1.09600e+01 -2.64978e+01 + 480 480 2 9.31000e+00 -7.59015e+00 -1.97378e+01 + 481 481 2 -5.28005e+00 2.27000e+00 -3.52678e+01 + 482 482 2 -7.72005e+00 4.92000e+00 -4.35978e+01 + 483 483 2 -8.05005e+00 -6.37015e+00 -2.84178e+01 + 484 484 2 1.03200e+01 -7.74015e+00 -7.07785e+00 + 485 485 2 -5.72005e+00 -8.61015e+00 -2.02378e+01 + 486 486 2 -6.69005e+00 1.60000e+00 -2.56478e+01 + 487 487 2 -3.87005e+00 1.08500e+01 -2.98078e+01 + 488 488 2 9.28000e+00 -2.47015e+00 -2.45978e+01 + 489 489 2 1.19900e+01 7.50000e+00 -3.40078e+01 + 490 490 2 -5.56005e+00 1.20400e+01 -7.66785e+00 + 491 491 2 1.03900e+01 2.91000e+00 -3.20785e+00 + 492 492 2 1.10000e-01 1.28600e+01 -3.82278e+01 + 493 493 2 -4.63005e+00 -6.61015e+00 -4.37785e+00 + 494 494 2 6.90000e+00 3.45000e+00 -4.07778e+01 + 495 495 2 -6.37005e+00 -2.56015e+00 -4.10678e+01 + 496 496 2 -2.85005e+00 1.10700e+01 -2.23378e+01 + 497 497 2 5.43000e+00 -3.95015e+00 -4.26978e+01 + 498 498 2 -1.01601e+01 -2.33015e+00 -4.94785e+00 + 499 499 2 -2.95005e+00 8.48000e+00 -3.40878e+01 + 500 500 2 -1.22001e+01 7.83000e+00 -4.14878e+01 + 501 501 2 4.71000e+00 1.29000e+00 -4.80378e+01 + 502 502 2 1.17200e+01 -2.11015e+00 -1.28878e+01 + 503 503 2 1.27600e+01 -8.82015e+00 1.56000e+00 + 504 504 2 3.32000e+00 7.90000e-01 -3.13278e+01 + 505 505 2 -1.23901e+01 -1.04802e+01 -1.78678e+01 + 506 506 2 -3.10005e+00 -4.33015e+00 -3.52278e+01 + 507 507 2 2.74000e+00 7.60000e-01 -1.43778e+01 + 508 508 2 7.04000e+00 -1.01001e+01 -1.53678e+01 + 509 509 2 -3.70051e-01 -4.50015e+00 -4.33478e+01 + 510 510 2 -5.64005e+00 -4.24015e+00 -1.01078e+01 + 511 511 2 -5.51005e+00 -5.73015e+00 -2.35878e+01 + 512 512 2 -6.07005e+00 1.19600e+01 -2.83378e+01 + 513 513 2 5.23000e+00 -9.65015e+00 -2.77878e+01 + 514 514 2 -4.86005e+00 -4.43015e+00 -1.38178e+01 + 515 515 2 -9.23005e+00 -7.50015e+00 -3.28178e+01 + 516 516 2 -2.64005e+00 6.85000e+00 -3.89578e+01 + 517 517 2 7.41000e+00 8.35000e+00 -2.18478e+01 + 518 518 2 -1.21801e+01 -3.40150e-01 -2.50785e+00 + 519 519 2 1.04600e+01 -1.03602e+01 -9.28785e+00 + 520 520 2 1.23200e+01 3.38000e+00 -4.49778e+01 + 521 521 2 4.50000e-01 6.30000e+00 -3.54678e+01 + 522 522 2 1.10700e+01 8.86000e+00 -4.16678e+01 + 523 523 2 1.21700e+01 1.13400e+01 -4.44178e+01 + 524 524 2 -1.00301e+01 3.39000e+00 -2.36078e+01 + 525 525 2 -1.20601e+01 7.42000e+00 -4.59378e+01 + 526 526 2 -3.86005e+00 2.49850e-01 -2.71785e+00 + 527 527 2 -9.63005e+00 -2.27015e+00 -9.29785e+00 + 528 528 2 -5.66005e+00 7.33000e+00 -6.95785e+00 + 529 529 2 1.20500e+01 -5.85015e+00 -3.46578e+01 + 530 530 2 1.12900e+01 7.96000e+00 -6.60785e+00 + 531 531 2 1.01000e+00 -1.15201e+01 -1.08678e+01 + 532 532 2 -6.66005e+00 -1.22701e+01 -9.75785e+00 + 533 533 2 -7.33005e+00 -6.88015e+00 -5.25785e+00 + 534 534 2 1.57000e+00 3.16000e+00 -2.94278e+01 + 535 535 2 -1.21901e+01 1.18500e+01 -5.40785e+00 + 536 536 2 -1.19601e+01 9.12000e+00 -1.77378e+01 + 537 537 2 -9.90051e-01 5.90000e+00 -5.75785e+00 + 538 538 2 3.77000e+00 -3.80150e-01 -2.30978e+01 + 539 539 2 1.06000e+01 4.62000e+00 -4.24878e+01 + 540 540 2 -8.17005e+00 1.20000e-01 -7.74785e+00 + 541 541 2 2.22000e+00 -6.10150e-01 -1.80678e+01 + 542 542 2 -1.15201e+01 -8.19015e+00 -1.68478e+01 + 543 543 2 1.26900e+01 3.15000e+00 -8.55785e+00 + 544 544 2 -9.58005e+00 -1.09602e+01 -1.11978e+01 + 545 545 2 -1.23201e+01 -1.27501e+01 -1.30785e+00 + 546 546 2 -3.28005e+00 9.89000e+00 -4.48378e+01 + 547 547 2 7.10000e-01 -3.64015e+00 -1.29778e+01 + 548 548 2 -7.31005e+00 1.25000e+01 -1.33678e+01 + 549 549 2 6.30000e+00 4.32000e+00 -2.75478e+01 + 550 550 2 2.89000e+00 8.11000e+00 -2.19978e+01 + 551 551 2 7.55000e+00 2.34000e+00 -4.32278e+01 + 552 552 2 -1.21701e+01 -1.13501e+01 1.01000e+00 + 553 553 2 -1.27601e+01 3.82000e+00 -2.30478e+01 + 554 554 2 -1.20901e+01 -8.15015e+00 -9.79785e+00 + 555 555 2 -2.96005e+00 -1.25502e+01 -3.39578e+01 + 556 556 2 -9.18005e+00 9.07000e+00 -7.85785e+00 + 557 557 2 -7.59005e+00 8.80000e+00 -1.57878e+01 + 558 558 2 1.06500e+01 1.14900e+01 -2.64178e+01 + 559 559 2 9.34000e+00 1.79000e+00 -7.52785e+00 + 560 560 2 -1.09301e+01 -6.58015e+00 -2.95978e+01 + 561 561 2 2.58000e+00 -8.78015e+00 -4.64478e+01 + 562 562 2 -7.20005e+00 2.79000e+00 -1.08878e+01 + 563 563 2 7.20000e-01 1.09300e+01 -3.50578e+01 + 564 564 2 2.79000e+00 6.91000e+00 -3.93778e+01 + 565 565 2 -8.80051e-01 4.51000e+00 -2.94678e+01 + 566 566 2 -9.72005e+00 1.23400e+01 -4.31578e+01 + 567 567 2 9.10000e+00 1.01200e+01 -2.40378e+01 + 568 568 2 2.03000e+00 -8.77015e+00 -8.25785e+00 + 569 569 2 2.02000e+00 3.47000e+00 -1.71578e+01 + 570 570 2 5.03000e+00 5.90000e-01 -1.65785e+00 + 571 571 2 3.14000e+00 1.23700e+01 -4.44678e+01 + 572 572 2 -8.38005e+00 1.75000e+00 -5.17785e+00 + 573 573 2 -7.30005e+00 -6.94015e+00 -4.39378e+01 + 574 574 2 2.27000e+00 4.98000e+00 -9.04785e+00 + 575 575 2 7.60000e+00 -1.21001e+01 -2.85785e+00 + 576 576 2 1.08000e+01 7.32000e+00 -1.21878e+01 + 577 577 2 1.00700e+01 -9.64015e+00 -4.04978e+01 + 578 578 2 -6.48005e+00 5.91000e+00 -2.47078e+01 + 579 579 2 2.88000e+00 -6.88015e+00 -1.23778e+01 + 580 580 2 9.11000e+00 -5.79015e+00 -5.55785e+00 + 581 581 2 9.63000e+00 6.09000e+00 -2.57578e+01 + 582 582 2 7.96000e+00 3.77000e+00 -1.84178e+01 + 583 583 2 -1.53005e+00 -1.80150e-01 -4.56785e+00 + 584 584 2 -1.02601e+01 -6.04015e+00 -2.00078e+01 + 585 585 2 8.03000e+00 2.93000e+00 -3.03778e+01 + 586 586 2 6.30000e-01 1.79000e+00 -3.18078e+01 + 587 587 2 2.02000e+00 4.07000e+00 -3.35778e+01 + 588 588 2 6.45000e+00 7.77000e+00 -4.37678e+01 + 589 589 2 -2.30000e-01 5.55000e+00 -2.36278e+01 + 590 590 2 4.37000e+00 -4.19015e+00 -2.05278e+01 + 591 591 2 -1.17201e+01 9.47000e+00 -3.29378e+01 + 592 592 2 -9.60005e+00 3.94000e+00 -4.20078e+01 + 593 593 2 -9.29005e+00 7.65000e+00 -3.84378e+01 + 594 594 2 -3.06005e+00 -5.49015e+00 -2.83178e+01 + 595 595 2 -9.15005e+00 1.10500e+01 -1.78278e+01 + 596 596 2 3.24000e+00 5.36000e+00 -1.26178e+01 + 597 597 2 -7.20051e-01 6.48000e+00 -1.36278e+01 + 598 598 2 -6.00051e-01 -1.09201e+01 -1.91378e+01 + 599 599 2 2.52000e+00 4.33000e+00 -4.03778e+01 + 600 600 2 -4.49005e+00 -1.25101e+01 -2.27278e+01 + 601 601 2 7.37000e+00 4.90000e+00 -6.15785e+00 + 602 602 2 -1.19401e+01 7.11000e+00 -2.30278e+01 + 603 603 2 1.08300e+01 8.90000e-01 -3.94978e+01 + 604 604 2 -6.28005e+00 -1.86015e+00 -2.40678e+01 + 605 605 2 3.83000e+00 -9.94015e+00 -9.88785e+00 + 606 606 2 -1.20901e+01 1.07600e+01 -1.99178e+01 + 607 607 2 1.19000e+00 1.22200e+01 -2.84678e+01 + 608 608 2 9.01000e+00 -1.15602e+01 -2.31778e+01 + 609 609 2 3.50000e+00 7.86000e+00 -4.19378e+01 + 610 610 2 2.65000e+00 2.12000e+00 -8.10785e+00 + 611 611 2 -1.04005e+00 3.91000e+00 -4.63778e+01 + 612 612 2 6.18000e+00 4.80000e+00 -2.32078e+01 + 613 613 2 1.14100e+01 -1.01402e+01 -3.58178e+01 + 614 614 2 2.72000e+00 -4.66015e+00 -2.25578e+01 + 615 615 2 8.70000e+00 -5.46015e+00 3.04000e+00 + 616 616 2 2.33000e+00 -1.15701e+01 -1.87178e+01 + 617 617 2 -1.02501e+01 -7.67015e+00 -2.37785e+00 + 618 618 2 -7.88005e+00 5.97000e+00 -1.55678e+01 + 619 619 2 -1.16901e+01 -9.82015e+00 -4.29178e+01 + 620 620 2 -3.32005e+00 9.77000e+00 -4.82378e+01 + 621 621 2 -1.32005e+00 2.96000e+00 -3.71978e+01 + 622 622 2 6.33000e+00 -2.59015e+00 -2.19778e+01 + 623 623 2 -2.20005e+00 -1.19401e+01 -3.66278e+01 + 624 624 2 -1.87005e+00 2.94000e+00 -1.51178e+01 + 625 625 2 -2.30005e+00 5.61000e+00 -3.62678e+01 + 626 626 2 -2.33005e+00 5.10000e-01 -2.79178e+01 + 627 627 2 8.58000e+00 9.27000e+00 -1.83578e+01 + 628 628 2 5.96000e+00 -7.48015e+00 -7.07785e+00 + 629 629 2 9.85000e+00 1.16600e+01 -7.90785e+00 + 630 630 2 8.07000e+00 1.23300e+01 -2.57078e+01 + 631 631 2 -9.99005e+00 1.16300e+01 -1.15878e+01 + 632 632 2 -9.30005e+00 -8.81015e+00 -2.51778e+01 + 633 633 2 8.51000e+00 -8.90015e+00 -3.82878e+01 + 634 634 2 8.00000e-01 7.20000e-01 -4.30378e+01 + 635 635 2 1.22500e+01 1.08000e+01 -3.74878e+01 + 636 636 2 -2.84005e+00 -1.06701e+01 -4.09478e+01 + 637 637 2 -3.89005e+00 4.39000e+00 -4.01078e+01 + 638 638 2 2.29949e-01 -1.09015e+00 -2.49778e+01 + 639 639 2 5.00000e+00 6.95000e+00 -1.04678e+01 + 640 640 2 -1.15701e+01 -1.22902e+01 -7.52785e+00 + 641 641 2 7.02000e+00 -4.20150e-01 -1.96478e+01 + 642 642 2 -1.00301e+01 5.23000e+00 -1.87578e+01 + 643 643 2 -2.97005e+00 -1.23002e+01 -1.86978e+01 + 644 644 2 7.93000e+00 5.27000e+00 -4.37978e+01 + 645 645 2 -5.48005e+00 4.75000e+00 -4.51785e+00 + 646 646 2 -8.82005e+00 1.06000e+00 -2.82778e+01 + 647 647 2 -9.41005e+00 5.16000e+00 -3.96778e+01 + 648 648 2 4.60000e-01 -1.03702e+01 -4.58178e+01 + 649 649 2 6.96000e+00 -9.00000e-02 -3.29778e+01 + 650 650 2 6.64000e+00 -1.47015e+00 -2.11785e+00 + 651 651 2 -5.25005e+00 -2.20015e+00 -2.66878e+01 + 652 652 2 -2.59005e+00 2.66000e+00 -2.61378e+01 + 653 653 2 -9.07005e+00 7.51000e+00 -3.36785e+00 + 654 654 2 -9.16005e+00 -3.34015e+00 -2.84178e+01 + 655 655 2 6.03000e+00 -6.19015e+00 -1.97178e+01 + 656 656 2 1.17400e+01 -1.11302e+01 -3.02778e+01 + 657 657 2 9.60000e-01 -1.71015e+00 -3.95978e+01 + 658 658 2 6.73000e+00 -1.25201e+01 -1.38078e+01 + 659 659 2 7.33000e+00 6.32000e+00 -1.42178e+01 + 660 660 2 -4.75005e+00 -9.13015e+00 -4.77878e+01 + 661 661 2 7.23000e+00 9.68000e+00 -2.90978e+01 + 662 662 2 5.48000e+00 -1.19502e+01 -1.96878e+01 + 663 663 2 -7.24005e+00 3.12000e+00 -8.09785e+00 + 664 664 2 -5.98005e+00 6.25000e+00 -1.35478e+01 + 665 665 2 -1.14301e+01 -1.24401e+01 -3.88078e+01 + 666 666 2 6.07000e+00 1.07900e+01 -9.95785e+00 + 667 667 2 2.61000e+00 3.80000e-01 -4.62878e+01 + 668 668 2 -8.67005e+00 1.40000e-01 -1.99878e+01 + 669 669 2 3.14000e+00 -2.13015e+00 -3.74978e+01 + 670 670 2 -1.11201e+01 -9.32015e+00 -4.72978e+01 + 671 671 2 -9.30005e+00 -3.70015e+00 -1.29478e+01 + 672 672 2 8.48000e+00 -1.10801e+01 -3.40578e+01 + 673 673 2 -8.44005e+00 9.15000e+00 -2.02478e+01 + 674 674 2 2.37000e+00 -2.69015e+00 -2.45878e+01 + 675 675 2 -3.97005e+00 1.09500e+01 -3.52278e+01 + 676 676 2 1.28100e+01 -4.70150e-01 -1.86178e+01 + 677 677 2 9.96000e+00 -5.23015e+00 -2.47878e+01 + 678 678 2 -8.50051e-01 -7.20150e-01 -2.20178e+01 + 679 679 2 9.92000e+00 5.61000e+00 -6.68785e+00 + 680 680 2 2.42000e+00 -7.88015e+00 -1.72078e+01 + 681 681 2 -3.49005e+00 -4.03015e+00 -3.82478e+01 + 682 682 2 -1.22201e+01 -7.25015e+00 -1.34378e+01 + 683 683 2 -6.83005e+00 2.98000e+00 -3.06378e+01 + 684 684 2 -3.34005e+00 7.80000e-01 -3.68078e+01 + 685 685 2 -6.59005e+00 8.55000e+00 -2.74378e+01 + 686 686 2 7.10000e+00 6.20000e+00 -3.98978e+01 + 687 687 2 -1.70051e-01 -8.45015e+00 -2.37078e+01 + 688 688 2 2.24000e+00 1.20800e+01 -1.55578e+01 + 689 689 2 -8.98005e+00 1.21400e+01 -4.01678e+01 + 690 690 2 8.91000e+00 1.21300e+01 -1.76078e+01 + 691 691 2 -3.01005e+00 2.85000e+00 -3.16785e+00 + 692 692 2 5.26000e+00 9.91000e+00 -2.90785e+00 + 693 693 2 -5.15005e+00 -1.08301e+01 -1.85578e+01 + 694 694 2 -7.97005e+00 8.15000e+00 -5.65785e+00 + 695 695 2 -1.10501e+01 2.84000e+00 -3.79278e+01 + 696 696 2 2.69000e+00 -6.44015e+00 -3.78078e+01 + 697 697 2 5.02000e+00 -1.22202e+01 -2.24478e+01 + 698 698 2 -4.99005e+00 8.94000e+00 -5.03078e+01 + 699 699 2 3.48000e+00 5.17000e+00 -4.26785e+00 + 700 700 2 1.28600e+01 7.50000e+00 -4.42785e+00 + 701 701 2 -3.10005e+00 -7.26015e+00 -2.04078e+01 + 702 702 2 -6.65005e+00 -6.77015e+00 -3.06678e+01 + 703 703 2 7.00000e+00 2.51000e+00 -2.60478e+01 + 704 704 2 1.12400e+01 -1.05402e+01 -4.60678e+01 + 705 705 2 -3.08005e+00 -6.02015e+00 -4.00378e+01 + 706 706 2 -3.04005e+00 1.09400e+01 -1.94078e+01 + 707 707 2 -9.71005e+00 -1.79015e+00 -3.73978e+01 + 708 708 2 -8.50051e-01 -1.10801e+01 -3.25878e+01 + 709 709 2 -4.03005e+00 -1.26402e+01 -1.38178e+01 + 710 710 2 -9.22005e+00 -5.31015e+00 -3.25785e+00 + 711 711 2 -9.44005e+00 8.12000e+00 -1.12078e+01 + 712 712 2 3.47000e+00 9.01000e+00 -3.75778e+01 + 713 713 2 1.04600e+01 1.10000e+01 -1.05078e+01 + 714 714 2 -1.23501e+01 -7.88015e+00 -7.27846e-01 + 715 715 2 1.21100e+01 9.24000e+00 -2.20978e+01 + 716 716 2 -8.80005e+00 -8.25015e+00 -1.71778e+01 + 717 717 2 7.08000e+00 9.73000e+00 -2.56478e+01 + 718 718 2 5.51000e+00 1.11300e+01 -4.16778e+01 + 719 719 2 8.10000e+00 4.03000e+00 -1.57578e+01 + 720 720 2 8.01000e+00 2.00000e-01 -2.65878e+01 + 721 721 2 5.08000e+00 6.98000e+00 -1.56878e+01 + 722 722 2 6.43000e+00 -5.08015e+00 -8.45785e+00 + 723 723 2 1.20000e+01 7.06000e+00 -6.97846e-01 + 724 724 2 1.63000e+00 3.40000e+00 -2.26578e+01 + 725 725 2 1.28600e+01 -6.33015e+00 -2.59578e+01 + 726 726 2 1.27500e+01 -7.20150e-01 -2.30278e+01 + 727 727 2 6.13000e+00 2.62000e+00 -7.27785e+00 + 728 728 2 7.99000e+00 -1.16001e+01 -5.86785e+00 + 729 729 2 -1.70005e+00 3.16000e+00 -3.24778e+01 + 730 730 2 1.94000e+00 4.31000e+00 -3.65778e+01 + 731 731 2 -6.13005e+00 1.44000e+00 -4.29278e+01 + 732 732 2 -3.47005e+00 -6.59015e+00 -4.82478e+01 + 733 733 2 -8.05005e+00 3.96000e+00 -1.98578e+01 + 734 734 2 -1.06901e+01 -4.22015e+00 -4.02678e+01 + 735 735 2 -2.24005e+00 6.01000e+00 -3.25678e+01 + 736 736 2 -8.06005e+00 5.65000e+00 -7.65785e+00 + 737 737 2 -2.80005e+00 -1.05015e+00 -2.41578e+01 + 738 738 2 1.27700e+01 1.20000e+01 -3.05078e+01 + 739 739 2 1.14000e+01 -1.07002e+01 -2.40678e+01 + 740 740 2 -6.30005e+00 -9.66015e+00 -2.26978e+01 + 741 741 2 -1.12101e+01 -1.24015e+00 -4.09378e+01 + 742 742 2 6.13000e+00 -3.27015e+00 -3.65878e+01 + 743 743 2 6.32000e+00 -9.45015e+00 -1.95678e+01 + 744 744 2 -1.60051e-01 -1.15302e+01 -4.05178e+01 + 745 745 2 1.27900e+01 -1.01001e+01 -2.08178e+01 + 746 746 2 1.08400e+01 9.10000e+00 -3.59278e+01 + 747 747 2 -2.06005e+00 1.04300e+01 -5.77785e+00 + 748 748 2 1.62000e+00 1.08300e+01 -3.90078e+01 + 749 749 2 6.25000e+00 4.78000e+00 -3.80785e+00 + 750 750 2 2.81000e+00 1.17800e+01 -1.96678e+01 + 751 751 2 6.04000e+00 -5.27015e+00 -1.68778e+01 + 752 752 2 -6.79005e+00 -1.05701e+01 -7.19785e+00 + 753 753 2 -1.11401e+01 -4.56015e+00 -3.40778e+01 + 754 754 2 -1.18301e+01 2.02000e+00 -1.30578e+01 + 755 755 2 1.23800e+01 -2.53015e+00 -3.33785e+00 + 756 756 2 -8.15005e+00 1.76000e+00 -1.56378e+01 + 757 757 2 -1.11005e+00 6.80000e-01 -4.50278e+01 + 758 758 2 4.73000e+00 5.12000e+00 -4.18278e+01 + 759 759 2 -2.02005e+00 -1.72015e+00 -7.05785e+00 + 760 760 2 1.50000e-01 4.00000e+00 -7.44785e+00 + 761 761 2 1.06000e+01 2.02000e+00 -2.55078e+01 + 762 762 2 7.05000e+00 1.09100e+01 -2.11578e+01 + 763 763 2 -8.35005e+00 1.01400e+01 -2.30678e+01 + 764 764 2 4.99490e-02 8.79000e+00 -1.16078e+01 + 765 765 2 1.17900e+01 2.90000e-01 -9.09785e+00 + 766 766 2 -1.26001e+01 -6.16015e+00 -2.28978e+01 + 767 767 2 1.43000e+00 -3.64015e+00 -8.97785e+00 + 768 768 2 -1.21005e+00 -6.90015e+00 -4.58378e+01 + 769 769 2 -4.04005e+00 9.17000e+00 -3.94178e+01 + 770 770 2 5.08000e+00 1.06300e+01 -4.47878e+01 + 771 771 2 9.87000e+00 -7.72015e+00 -2.37878e+01 + 772 772 2 -7.38005e+00 1.23100e+01 -4.55678e+01 + 773 773 2 2.00000e-01 1.11600e+01 -4.26678e+01 + 774 774 2 -8.37005e+00 8.86000e+00 -3.42478e+01 + 775 775 2 6.17000e+00 -3.24015e+00 -2.49178e+01 + 776 776 2 1.36000e+00 -1.21402e+01 -5.64785e+00 + 777 777 2 3.67000e+00 -7.73015e+00 1.27000e+00 + 778 778 2 -9.19005e+00 1.09100e+01 -3.24578e+01 + 779 779 2 -2.78005e+00 8.95000e+00 -1.60078e+01 + 780 780 2 -8.90051e-01 -1.44015e+00 -3.71478e+01 + 781 781 2 -1.30005e+00 -1.03015e+00 -4.21178e+01 + 782 782 2 -1.23701e+01 5.71000e+00 -3.97578e+01 + 783 783 2 8.25000e+00 1.50000e+00 -1.45785e+00 + 784 784 2 -9.14005e+00 -1.08702e+01 -3.91478e+01 + 785 785 2 1.04300e+01 -1.23902e+01 -1.96978e+01 + 786 786 2 -4.73005e+00 4.30000e+00 -2.30178e+01 + 787 787 2 -2.74005e+00 -1.05001e+01 -1.26378e+01 + 788 788 2 7.75000e+00 -7.46015e+00 -4.72978e+01 + 789 789 2 -3.03005e+00 -7.99015e+00 -2.59178e+01 + 790 790 2 3.84000e+00 -4.20150e-01 -8.67785e+00 + 791 791 2 1.26400e+01 -3.81015e+00 -2.07378e+01 + 792 792 2 4.72000e+00 6.90000e+00 -3.37778e+01 + 793 793 2 -7.79005e+00 -3.59015e+00 -3.57778e+01 + 794 794 2 1.26300e+01 -1.01015e+00 -2.79678e+01 + 795 795 2 9.70000e+00 -1.19702e+01 -4.81878e+01 + 796 796 2 -1.00701e+01 -7.60015e+00 -3.69478e+01 + 797 797 2 -9.60051e-01 -8.36015e+00 -1.45878e+01 + 798 798 2 -8.08005e+00 -9.04015e+00 -4.69378e+01 + 799 799 2 1.27100e+01 5.83000e+00 -4.38678e+01 + 800 800 2 -4.50051e-01 -8.05015e+00 -2.09678e+01 + 801 801 2 3.01000e+00 1.26200e+01 -3.05578e+01 + 802 802 2 6.30000e+00 -1.17202e+01 -9.99785e+00 + 803 803 2 1.25500e+01 -6.49015e+00 -3.19785e+00 + 804 804 2 -2.21005e+00 -2.20015e+00 -1.54978e+01 + 805 805 2 -9.43005e+00 1.25500e+01 -2.88778e+01 + 806 806 2 3.69000e+00 1.01000e+00 -4.30178e+01 + 807 807 2 -4.56005e+00 -4.40015e+00 -4.19378e+01 + 808 808 2 -7.98005e+00 -9.66015e+00 -1.30278e+01 + 809 809 2 -7.92005e+00 -2.68015e+00 -4.48278e+01 + 810 810 2 -1.53005e+00 1.20400e+01 -2.99278e+01 + 811 811 2 -4.38005e+00 4.80000e+00 -2.86878e+01 + 812 812 2 2.96000e+00 -1.24502e+01 -3.46578e+01 + 813 813 2 -3.59005e+00 -4.98015e+00 -3.22878e+01 + 814 814 2 -5.10000e-05 -9.81015e+00 -3.02778e+01 + 815 815 2 4.00000e-01 7.06000e+00 -4.14878e+01 + 816 816 2 2.73000e+00 -9.17015e+00 -3.83278e+01 + 817 817 2 -6.80051e-01 -1.11102e+01 -1.42478e+01 + 818 818 2 1.95000e+00 1.11100e+01 -1.10478e+01 + 819 819 2 -1.17701e+01 -1.13201e+01 -3.29378e+01 + 820 820 2 -7.46005e+00 8.15000e+00 -4.11278e+01 + 821 821 2 1.14600e+01 2.16000e+00 -2.81678e+01 + 822 822 2 1.06400e+01 7.01000e+00 -3.76678e+01 + 823 823 2 6.58000e+00 -8.35015e+00 -9.55785e+00 + 824 824 2 1.15300e+01 -3.76015e+00 -3.27978e+01 + 825 825 2 -1.14101e+01 8.67000e+00 -3.55278e+01 + 826 826 2 7.66000e+00 -6.75015e+00 -3.67178e+01 + 827 827 2 2.67000e+00 -4.84015e+00 -2.62978e+01 + 828 828 2 1.05300e+01 -3.00015e+00 -5.10785e+00 + 829 829 2 -6.91005e+00 -1.27002e+01 -5.49785e+00 + 830 830 2 9.65000e+00 -2.01015e+00 -2.75178e+01 + 831 831 2 -6.01005e+00 1.04800e+01 -1.92878e+01 + 832 832 2 -1.00000e-02 -6.29015e+00 -3.64778e+01 + 833 833 2 -8.67005e+00 8.78000e+00 -4.62278e+01 + 834 834 2 1.14000e+01 1.12000e+01 -4.01878e+01 + 835 835 2 1.03300e+01 1.23000e+00 -1.58678e+01 + 836 836 2 -4.48005e+00 1.05000e+01 -4.18278e+01 + 837 837 2 9.81000e+00 7.99000e+00 -2.07478e+01 + 838 838 2 -3.68005e+00 3.80000e-01 -4.32378e+01 + 839 839 2 -4.05005e+00 -7.78015e+00 -3.11778e+01 + 840 840 2 8.21000e+00 4.10000e+00 -1.10478e+01 + 841 841 2 -1.25501e+01 -6.83015e+00 -3.90178e+01 + 842 842 2 9.30000e+00 7.50000e-01 -2.89078e+01 + 843 843 2 9.16000e+00 -5.87015e+00 -1.68478e+01 + 844 844 2 9.30000e-01 1.13800e+01 -1.76878e+01 + 845 845 2 3.99490e-02 -5.77015e+00 -2.57578e+01 + 846 846 2 -1.24301e+01 5.84000e+00 -2.91278e+01 + 847 847 2 2.19000e+00 2.20000e+00 -1.98678e+01 + 848 848 2 -6.86005e+00 3.31000e+00 -2.76578e+01 + 849 849 2 1.10000e+00 -6.56015e+00 -4.71878e+01 + 850 850 2 -1.27401e+01 -7.63015e+00 -3.61978e+01 + 851 851 2 -1.20501e+01 -1.26302e+01 -2.33878e+01 + 852 852 2 -2.60051e-01 -5.60150e-01 -3.31778e+01 + 853 853 2 -6.92005e+00 -4.20015e+00 -1.87878e+01 + 854 854 2 -5.40005e+00 -6.71015e+00 -2.62178e+01 + 855 855 2 8.15000e+00 1.64000e+00 -4.99785e+00 + 856 856 2 4.54000e+00 8.30000e+00 -2.76978e+01 + 857 857 2 8.66000e+00 -4.68015e+00 -3.25278e+01 + 858 858 2 -2.03005e+00 1.09400e+01 -1.12778e+01 + 859 859 2 8.89000e+00 -2.00150e-01 -4.18778e+01 + 860 860 2 -1.20901e+01 -3.23015e+00 -3.11978e+01 + 861 861 2 -7.00051e-01 -5.50015e+00 -2.99478e+01 + 862 862 2 -4.61005e+00 -1.14101e+01 -4.29878e+01 + 863 863 2 -5.63005e+00 -8.90015e+00 -1.47578e+01 + 864 864 2 -1.24301e+01 -4.10150e-01 -1.15678e+01 + 865 865 2 -5.87005e+00 -1.59015e+00 -4.35178e+01 + 866 866 2 -2.84005e+00 1.97000e+00 -2.13278e+01 + 867 867 2 4.68000e+00 9.45000e+00 -1.30678e+01 + 868 868 2 6.07000e+00 4.58000e+00 -1.26478e+01 + 869 869 2 -6.25005e+00 1.25100e+01 -3.86078e+01 + 870 870 2 1.22200e+01 1.19000e+00 -4.32785e+00 + 871 871 2 7.40000e+00 7.12000e+00 -3.44978e+01 + 872 872 2 1.97000e+00 -9.06015e+00 -2.00678e+01 + 873 873 2 9.82000e+00 -6.00015e+00 -2.90785e+00 + 874 874 2 2.06000e+00 1.85000e+00 -3.85178e+01 + 875 875 2 -1.07501e+01 -1.11202e+01 -2.52578e+01 + 876 876 2 -5.22005e+00 -1.05015e+00 -1.82478e+01 + 877 877 2 -1.17101e+01 -4.16015e+00 -2.10785e+00 + 878 878 2 1.28200e+01 -2.56015e+00 -3.80578e+01 + 879 879 2 1.21200e+01 -8.23015e+00 -4.18278e+01 + 880 880 2 -2.13005e+00 1.12600e+01 -1.46478e+01 + 881 881 2 -1.27301e+01 -5.60150e-01 -3.07178e+01 + 882 882 2 1.12900e+01 -3.57015e+00 -4.55378e+01 + 883 883 2 9.40000e-01 2.86000e+00 -2.65378e+01 + 884 884 2 9.10000e-01 2.58000e+00 -1.47378e+01 + 885 885 2 8.11000e+00 9.24000e+00 -1.15878e+01 + 886 886 2 5.44000e+00 -1.22102e+01 -4.28678e+01 + 887 887 2 -1.03801e+01 -1.20015e+00 -1.29678e+01 + 888 888 2 -1.05101e+01 5.12000e+00 -1.58278e+01 + 889 889 2 -8.91005e+00 -9.64015e+00 -8.87785e+00 + 890 890 2 1.27300e+01 1.07400e+01 -2.44778e+01 + 891 891 2 -6.96005e+00 2.40000e-01 -2.22778e+01 + 892 892 2 1.43000e+00 -8.06015e+00 -3.46778e+01 + 893 893 2 -1.28601e+01 -9.01015e+00 -2.89978e+01 + 894 894 2 4.39000e+00 -6.70015e+00 -4.51378e+01 + 895 895 2 6.22000e+00 8.14000e+00 -1.85178e+01 + 896 896 2 5.07000e+00 -1.81015e+00 -3.44078e+01 + 897 897 2 -1.83005e+00 1.18000e+00 -3.44078e+01 + 898 898 2 -4.00051e-01 -6.12015e+00 -4.07778e+01 + 899 899 2 9.24000e+00 1.57000e+00 -3.70478e+01 + 900 900 2 8.35000e+00 -1.02601e+01 -3.06978e+01 + 901 901 2 -6.83005e+00 -9.64015e+00 -4.26878e+01 + 902 902 2 1.00500e+01 1.97000e+00 -3.21878e+01 + 903 903 2 -6.39005e+00 1.23200e+01 -3.60778e+01 + 904 904 2 -4.32005e+00 -6.10015e+00 -1.15078e+01 + 905 905 2 -9.38005e+00 -1.03401e+01 -1.55778e+01 + 906 906 2 -9.78005e+00 -4.53015e+00 -4.59878e+01 + 907 907 2 6.63000e+00 -9.02015e+00 -4.33578e+01 + 908 908 2 -5.47005e+00 -1.11001e+01 -1.18378e+01 + 909 909 2 -4.23005e+00 -3.30150e-01 -1.50178e+01 + 910 910 2 -2.72005e+00 -1.80015e+00 -2.67778e+01 + 911 911 2 3.22000e+00 -6.21015e+00 -2.87578e+01 + 912 912 2 -3.01005e+00 -4.83015e+00 -4.43478e+01 + 913 913 2 -9.62005e+00 2.77000e+00 -3.02578e+01 + 914 914 2 -4.70051e-01 5.45000e+00 -1.04378e+01 + 915 915 2 -9.65005e+00 -1.23401e+01 -3.15278e+01 + 916 916 2 -8.23005e+00 -1.25001e+01 -1.92778e+01 + 917 917 2 -4.00000e-02 -2.91015e+00 -2.72778e+01 + 918 918 2 -4.21005e+00 7.16000e+00 -4.32785e+00 + 919 919 2 5.65000e+00 2.44000e+00 -3.19578e+01 + 920 920 2 -1.13005e+00 -4.74015e+00 -7.96785e+00 + 921 921 2 -5.99005e+00 -4.96015e+00 -3.85978e+01 + 922 922 2 6.67000e+00 -8.93015e+00 -4.50785e+00 + 923 923 2 1.03900e+01 -1.09602e+01 -4.35978e+01 + 924 924 2 7.40000e-01 -5.83015e+00 -1.76578e+01 + 925 925 2 1.10500e+01 5.22000e+00 -4.02785e+00 + 926 926 2 -4.67005e+00 6.76000e+00 -3.48578e+01 + 927 927 2 -4.06005e+00 -7.36015e+00 -3.59978e+01 + 928 928 2 -7.56005e+00 -1.09101e+01 -3.29778e+01 + 929 929 2 9.93000e+00 -6.33015e+00 -4.86578e+01 + 930 930 2 8.49000e+00 -7.14015e+00 -4.11078e+01 + 931 931 2 6.35000e+00 -5.46015e+00 -3.90978e+01 + 932 932 2 -4.37005e+00 2.49000e+00 -1.04578e+01 + 933 933 2 -1.35005e+00 4.67000e+00 -1.73078e+01 + 934 934 2 -9.18005e+00 -4.94015e+00 -1.04078e+01 + 935 935 2 -1.07101e+01 7.08000e+00 -2.57578e+01 + 936 936 2 -2.55005e+00 8.94000e+00 -2.43278e+01 + 937 937 2 -4.50005e+00 -7.45015e+00 -4.43778e+01 + 938 938 2 -1.16201e+01 -1.15701e+01 -4.55678e+01 + 939 939 2 -6.16005e+00 3.70000e-01 -2.87578e+01 + 940 940 2 5.89000e+00 1.28500e+01 -4.66078e+01 + 941 941 2 -4.83005e+00 -9.13015e+00 -9.38785e+00 + 942 942 2 -9.47005e+00 8.59000e+00 -2.92078e+01 + 943 943 2 2.77000e+00 -2.98015e+00 -2.46785e+00 + 944 944 2 7.66000e+00 -1.27401e+01 -2.93078e+01 + 945 945 2 1.39000e+00 -2.53015e+00 -4.22878e+01 + 946 946 2 7.71000e+00 -7.65015e+00 -2.27785e+00 + 947 947 2 2.82000e+00 1.15600e+01 -2.49278e+01 + 948 948 2 -3.37005e+00 -8.64015e+00 -2.27778e+01 + 949 949 2 -1.00601e+01 -6.51015e+00 -2.69378e+01 + 950 950 2 9.63000e+00 -9.00150e-01 -1.62785e+00 + 951 951 2 -7.22005e+00 -2.84015e+00 -1.44478e+01 + 952 952 2 -1.25801e+01 -6.22015e+00 -4.31278e+01 + 953 953 2 4.36000e+00 1.05000e+00 -1.82578e+01 + 954 954 2 7.00000e-02 -8.98015e+00 -3.88878e+01 + 955 955 2 1.15200e+01 7.68000e+00 -1.83078e+01 + 956 956 2 -1.16901e+01 3.75000e+00 -1.09578e+01 + 957 957 2 -6.34005e+00 -4.38015e+00 -2.76678e+01 + 958 958 2 -3.98005e+00 -1.57015e+00 -2.99878e+01 + 959 959 2 1.05000e+00 8.30000e+00 -1.98278e+01 + 960 960 2 1.27800e+01 -5.87015e+00 -1.64878e+01 + 961 961 2 -8.68005e+00 -1.27902e+01 -2.36778e+01 + 962 962 2 -5.28005e+00 7.20000e+00 -1.09378e+01 + 963 963 2 4.05000e+00 -3.07015e+00 -3.22978e+01 + 964 964 2 1.08000e+01 -8.53015e+00 -1.14078e+01 + 965 965 2 7.93000e+00 1.35000e+00 -1.02078e+01 + 966 966 2 4.58000e+00 1.10700e+01 -2.68578e+01 + 967 967 2 9.62000e+00 -9.25015e+00 -1.37778e+01 + 968 968 2 -7.58005e+00 -9.15015e+00 -3.10078e+01 + 969 969 2 -1.04601e+01 -7.89015e+00 -4.02578e+01 + 970 970 2 -6.66005e+00 7.36000e+00 -4.47778e+01 + 971 971 2 1.67000e+00 -1.00901e+01 -1.53178e+01 + 972 972 2 -2.82005e+00 -4.40015e+00 -1.95678e+01 + 973 973 2 1.27000e+01 1.26200e+01 -1.80078e+01 + 974 974 2 1.33000e+00 4.96000e+00 -4.40378e+01 + 975 975 2 -1.90005e+00 -1.21701e+01 -1.05778e+01 + 976 976 2 -5.54005e+00 9.34000e+00 -3.18078e+01 + 977 977 2 1.91000e+00 7.41000e+00 -4.42478e+01 + 978 978 2 1.99000e+00 -5.06015e+00 -4.50778e+01 + 979 979 2 1.17700e+01 -4.11015e+00 -2.89178e+01 + 980 980 2 -8.63005e+00 -6.07015e+00 -3.51578e+01 + 981 981 2 -1.16601e+01 -4.60150e-01 1.21540e-02 + 982 982 2 -5.00005e+00 -1.37015e+00 -3.30178e+01 + 983 983 2 3.30000e-01 1.12000e+00 -4.02878e+01 + 984 984 2 -3.85005e+00 3.72000e+00 -1.95178e+01 + 985 985 2 -3.54005e+00 -9.70150e-01 -7.00000e-02 + 986 986 2 4.20000e-01 1.24300e+01 -4.53478e+01 + 987 987 2 7.08000e+00 8.52000e+00 -4.13178e+01 + 988 988 2 -9.98005e+00 -4.13015e+00 -2.54578e+01 + 989 989 2 -7.37005e+00 1.75000e+00 -1.82378e+01 + 990 990 2 -1.41005e+00 -1.25901e+01 -7.03785e+00 + 991 991 2 2.74000e+00 -1.18702e+01 -3.75978e+01 + 992 992 2 -9.36005e+00 -4.60015e+00 -3.09878e+01 + 993 993 2 9.35000e+00 5.00000e-01 -4.71178e+01 + 994 994 2 -6.30051e-01 9.02000e+00 -2.89378e+01 + 995 995 2 1.03400e+01 -2.73015e+00 -3.90578e+01 + 996 996 2 6.01000e+00 -1.07302e+01 -2.45378e+01 + 997 997 2 -1.51005e+00 1.02200e+01 -2.67578e+01 + 998 998 2 2.08000e+00 8.18000e+00 -1.35678e+01 + 999 999 2 5.55000e+00 -7.76015e+00 -3.44178e+01 + 1000 1000 2 8.31000e+00 1.69000e+00 -2.04178e+01 + 1001 1001 2 -2.91005e+00 2.55000e+00 -2.97778e+01 + 1002 1002 2 -6.77005e+00 -7.46015e+00 -1.13278e+01 + 1003 1003 2 1.15000e+00 8.40000e-01 -2.33078e+01 + 1004 1004 2 3.18000e+00 7.08000e+00 -5.99785e+00 + 1005 1005 2 2.98000e+00 -1.11015e+00 -4.87846e-01 + 1006 1006 2 7.15000e+00 -7.78015e+00 -2.72578e+01 + 1007 1007 2 1.24200e+01 -1.26402e+01 -9.67785e+00 + 1008 1008 2 3.37000e+00 -1.00101e+01 -5.33785e+00 + 1009 1009 2 -6.43005e+00 -6.57015e+00 -3.65478e+01 + 1010 1010 2 -1.08005e+00 9.30000e+00 -1.83478e+01 + 1011 1011 2 8.58000e+00 6.30000e-01 -2.32778e+01 + 1012 1012 2 -7.16005e+00 -3.40015e+00 -3.25378e+01 + 1013 1013 2 8.62000e+00 -7.70150e-01 -3.55478e+01 + 1014 1014 2 -1.22101e+01 1.21700e+01 -4.15378e+01 + 1015 1015 2 1.14300e+01 5.08000e+00 -3.24678e+01 + 1016 1016 2 -3.49005e+00 4.98000e+00 -7.18785e+00 + 1017 1017 2 -7.44005e+00 2.90000e+00 -2.27978e+01 + 1018 1018 2 7.38000e+00 -9.39015e+00 -2.23278e+01 + 1019 1019 2 9.37000e+00 5.51000e+00 -1.97478e+01 + 1020 1020 2 4.52000e+00 -4.92015e+00 -1.04678e+01 + 1021 1021 2 8.72000e+00 -1.18002e+01 -4.09278e+01 + 1022 1022 2 6.08000e+00 1.27000e+01 -1.71478e+01 + 1023 1023 2 -6.33005e+00 -3.07015e+00 -2.50785e+00 + 1024 1024 2 -8.52005e+00 1.31000e+00 -4.15478e+01 + 1025 1025 2 5.08000e+00 1.04800e+01 -1.83978e+01 + 1026 1026 2 -4.56005e+00 7.99000e+00 -2.91778e+01 + 1027 1027 2 -8.84005e+00 -8.17015e+00 -2.27178e+01 + 1028 1028 2 1.20700e+01 -4.29015e+00 -4.14378e+01 + 1029 1029 2 1.26300e+01 1.00700e+01 -7.30785e+00 + 1030 1030 2 -7.65005e+00 4.16000e+00 -3.32278e+01 + 1031 1031 2 4.78000e+00 -5.28015e+00 -2.62785e+00 + 1032 1032 2 1.94000e+00 1.20600e+01 -2.23178e+01 + 1033 1033 2 -9.70005e+00 -1.01601e+01 -1.89678e+01 + 1034 1034 2 3.22000e+00 7.98500e-02 -3.42778e+01 + 1035 1035 2 -3.64005e+00 -1.03702e+01 -3.18678e+01 + 1036 1036 2 -4.18005e+00 -3.23015e+00 -2.31478e+01 + 1037 1037 2 1.01200e+01 -5.73015e+00 -2.73678e+01 + 1038 1038 2 2.79000e+00 9.32000e+00 -3.24878e+01 + 1039 1039 2 -3.78005e+00 -4.30015e+00 -5.36785e+00 + 1040 1040 2 5.24000e+00 3.20000e+00 -1.97878e+01 + 1041 1041 2 3.69000e+00 -9.14015e+00 -2.49378e+01 + 1042 1042 2 -1.01601e+01 2.90000e-01 -3.14878e+01 + 1043 1043 2 -6.30051e-01 3.77000e+00 -2.25785e+00 + 1044 1044 2 -8.43005e+00 4.49000e+00 -4.05785e+00 + 1045 1045 2 7.68000e+00 9.71000e+00 -3.36078e+01 + 1046 1046 2 2.81000e+00 -2.05015e+00 -1.06978e+01 + 1047 1047 2 -2.77005e+00 1.09800e+01 -3.77278e+01 + 1048 1048 2 6.80000e+00 -7.85015e+00 -2.46778e+01 + 1049 1049 2 2.05000e+00 -1.04002e+01 -3.32878e+01 + 1050 1050 2 1.01600e+01 -6.96015e+00 -3.19678e+01 + 1051 1051 2 1.27900e+01 -6.94015e+00 -3.15278e+01 + 1052 1052 2 -2.05005e+00 -8.86015e+00 -9.30785e+00 + 1053 1053 2 1.90000e-01 4.58000e+00 -3.88778e+01 + 1054 1054 2 -1.26801e+01 1.55000e+00 -2.43978e+01 + 1055 1055 2 -2.67005e+00 -4.99015e+00 -2.56178e+01 + 1056 1056 2 -1.14701e+01 -1.07015e+00 -1.54878e+01 + 1057 1057 2 8.07000e+00 -1.05201e+01 -8.31785e+00 + 1058 1058 2 -7.99005e+00 -7.19015e+00 -3.91778e+01 + 1059 1059 2 -1.12701e+01 -3.12015e+00 1.60000e-01 + 1060 1060 2 4.00000e-01 1.15300e+01 -1.32178e+01 + 1061 1061 2 -8.80005e+00 -3.04015e+00 -2.33078e+01 + 1062 1062 2 -3.06005e+00 -9.80015e+00 -4.50578e+01 + 1063 1063 2 4.20000e-01 -3.07015e+00 -3.41378e+01 + 1064 1064 2 -8.61005e+00 4.16000e+00 -4.62378e+01 + 1065 1065 2 1.26200e+01 -9.77015e+00 -2.81785e+00 + 1066 1066 2 -4.55005e+00 -1.90000e-01 -4.04678e+01 + 1067 1067 2 -6.48005e+00 -9.43015e+00 -2.65378e+01 + 1068 1068 2 -9.83005e+00 -7.96015e+00 -5.16785e+00 + 1069 1069 2 -4.91005e+00 2.67000e+00 -1.72978e+01 + 1070 1070 2 -4.20005e+00 9.96000e+00 -1.23978e+01 + 1071 1071 2 -1.12701e+01 2.22000e+00 -4.34178e+01 + 1072 1072 2 1.10100e+01 -1.15901e+01 -2.74678e+01 + 1073 1073 2 -1.04701e+01 5.56000e+00 -3.23778e+01 + 1074 1074 2 -1.17701e+01 -2.99015e+00 -4.50078e+01 + 1075 1075 2 -5.49005e+00 -8.12015e+00 -6.77785e+00 + 1076 1076 2 7.91000e+00 6.75000e+00 -1.01278e+01 + 1077 1077 2 8.49000e+00 -5.10150e-01 -1.32178e+01 + 1078 1078 2 -8.14005e+00 -7.00015e+00 -9.06785e+00 + 1079 1079 2 2.20000e+00 -7.65015e+00 -4.14578e+01 + 1080 1080 2 -1.01401e+01 5.40000e-01 -3.90078e+01 + 1081 1081 2 -2.80051e-01 8.31000e+00 -3.34378e+01 + 1082 1082 2 -1.15601e+01 3.85000e+00 -2.75978e+01 + 1083 1083 2 1.56000e+00 -1.30015e+00 -6.98785e+00 + 1084 1084 2 -5.71005e+00 -1.25001e+01 -3.14578e+01 + 1085 1085 2 -9.17005e+00 4.27000e+00 -3.67078e+01 + 1086 1086 2 7.41000e+00 1.11300e+01 -3.70878e+01 + 1087 1087 2 6.80000e+00 -2.40150e-01 -7.47785e+00 + 1088 1088 2 9.06000e+00 5.95000e+00 -2.85278e+01 + 1089 1089 2 1.06500e+01 -1.01502e+01 -1.81578e+01 + 1090 1090 2 1.00200e+01 -5.51015e+00 -3.66678e+01 + 1091 1091 2 3.99490e-02 -5.61015e+00 -2.28578e+01 + 1092 1092 2 9.72000e+00 1.12200e+01 -2.15078e+01 + 1093 1093 2 -2.21005e+00 6.87000e+00 -2.98178e+01 + 1094 1094 2 6.18000e+00 3.10000e+00 -1.44785e+00 + 1095 1095 2 -4.20051e-01 9.27000e+00 -3.84785e+00 + 1096 1096 2 -1.24501e+01 3.40000e+00 -3.34778e+01 + 1097 1097 2 -1.24601e+01 6.69000e+00 -3.71378e+01 + 1098 1098 2 -1.04301e+01 -4.22015e+00 -1.54278e+01 + 1099 1099 2 1.28300e+01 1.02500e+01 -1.14078e+01 + 1100 1100 2 8.23000e+00 4.15000e+00 -2.16678e+01 + 1101 1101 2 -2.18005e+00 -2.20015e+00 -3.21378e+01 + 1102 1102 2 5.11000e+00 1.08900e+01 -3.35978e+01 + 1103 1103 2 -5.55005e+00 -1.97015e+00 -5.71785e+00 + 1104 1104 2 -1.20301e+01 9.79000e+00 -2.89578e+01 + 1105 1105 2 9.79000e+00 -1.04401e+01 -2.58785e+00 + 1106 1106 2 -3.37005e+00 -6.63015e+00 -7.63785e+00 + 1107 1107 2 -1.09601e+01 -9.80015e+00 -7.11785e+00 + 1108 1108 2 -4.28005e+00 3.20000e-01 -6.24785e+00 + 1109 1109 2 2.84000e+00 1.05500e+01 -4.15078e+01 + 1110 1110 2 -5.60051e-01 1.23400e+01 -2.32178e+01 + 1111 1111 2 7.34000e+00 7.80000e+00 -3.12078e+01 + 1112 1112 2 1.02700e+01 8.30000e-01 -1.13778e+01 + 1113 1113 2 3.64000e+00 9.60000e+00 -9.75785e+00 + 1114 1114 2 -2.11005e+00 6.50000e+00 -4.75478e+01 + 1115 1115 2 -1.12501e+01 -5.70150e-01 -4.36178e+01 + 1116 1116 2 1.19600e+01 -8.26015e+00 -4.74978e+01 + 1117 1117 2 -1.11701e+01 -4.74015e+00 -3.74678e+01 + 1118 1118 2 -6.98005e+00 6.76000e+00 -3.31478e+01 + 1119 1119 2 -9.92005e+00 -4.97015e+00 -6.03785e+00 + 1120 1120 2 -8.02005e+00 7.10000e-01 -4.48078e+01 + 1121 1121 2 -1.01001e+01 1.24400e+01 -2.11978e+01 + 1122 1122 2 -6.31005e+00 5.71000e+00 -3.06578e+01 + 1123 1123 2 -7.32005e+00 3.10000e-01 -3.40578e+01 + 1124 1124 2 -8.78005e+00 1.27600e+01 -1.57278e+01 + 1125 1125 2 -1.16101e+01 8.41000e+00 -9.17785e+00 + 1126 1126 2 3.18000e+00 -4.59015e+00 -4.15378e+01 + 1127 1127 2 -9.44005e+00 1.12700e+01 -4.70785e+00 + 1128 1128 2 -5.88005e+00 -5.37015e+00 -1.63578e+01 + 1129 1129 2 2.80000e+00 9.60000e-01 -3.70785e+00 + 1130 1130 2 9.65000e+00 -2.18015e+00 -1.81778e+01 + 1131 1131 2 7.36000e+00 -1.04802e+01 -4.76578e+01 + 1132 1132 2 2.03000e+00 -3.68015e+00 -1.88478e+01 + 1133 1133 2 3.70000e-01 1.14100e+01 -8.54785e+00 + 1134 1134 2 -2.20051e-01 -7.72015e+00 -3.26078e+01 + 1135 1135 2 2.97000e+00 -2.37015e+00 -4.59478e+01 + 1136 1136 2 -5.10051e-01 4.37000e+00 -4.20478e+01 + 1137 1137 2 -3.46005e+00 -7.82015e+00 -1.35078e+01 + 1138 1138 2 1.17800e+01 1.18200e+01 -3.30278e+01 + 1139 1139 2 1.05800e+01 -5.78015e+00 -3.96778e+01 + 1140 1140 2 -7.71005e+00 -9.80150e-01 -4.34785e+00 + 1141 1141 2 -8.35005e+00 -3.20015e+00 -3.92678e+01 + 1142 1142 2 -2.25005e+00 -7.65015e+00 -3.79678e+01 + 1143 1143 2 -1.17201e+01 7.49000e+00 -3.11078e+01 + 1144 1144 2 -4.11005e+00 -8.31015e+00 -4.13378e+01 + 1145 1145 2 -1.07001e+01 1.09000e+01 -2.14785e+00 + 1146 1146 2 6.04000e+00 3.30000e-01 -4.43578e+01 + 1147 1147 2 -3.80005e+00 -1.16701e+01 -8.45785e+00 + 1148 1148 2 -5.57005e+00 -6.30150e-01 -4.66878e+01 + 1149 1149 2 3.59000e+00 -1.26302e+01 -9.33785e+00 + 1150 1150 2 -9.70051e-01 2.09850e-01 -1.90578e+01 + 1151 1151 2 9.07000e+00 -5.67015e+00 -1.21078e+01 + 1152 1152 2 -6.91005e+00 -1.20402e+01 -2.15278e+01 + 1153 1153 2 1.18200e+01 -6.17015e+00 -4.55878e+01 + 1154 1154 2 6.86000e+00 -9.62015e+00 -4.05178e+01 + 1155 1155 2 -6.63005e+00 9.75000e+00 -3.91578e+01 + 1156 1156 2 -5.20005e+00 -3.97015e+00 -3.00378e+01 + 1157 1157 2 -6.48005e+00 1.10400e+01 -1.12778e+01 + 1158 1158 2 -9.27005e+00 9.88000e+00 -1.37078e+01 + 1159 1159 2 4.33000e+00 4.60000e+00 -1.69178e+01 + 1160 1160 2 1.12500e+01 -6.43015e+00 2.29000e+00 + 1161 1161 2 1.11200e+01 2.43000e+00 -1.36878e+01 + 1162 1162 2 2.28000e+00 -4.94015e+00 -6.01785e+00 + 1163 1163 2 5.08000e+00 4.06000e+00 -3.41278e+01 + 1164 1164 2 4.96000e+00 2.79000e+00 -1.46078e+01 + 1165 1165 2 1.02700e+01 -9.74015e+00 -2.14278e+01 + 1166 1166 2 5.36000e+00 -1.12802e+01 -3.90478e+01 + 1167 1167 2 1.17000e+01 -4.50150e-01 -4.32178e+01 + 1168 1168 2 1.17800e+01 2.21000e+00 -4.15778e+01 + 1169 1169 2 -1.68005e+00 -9.77015e+00 -4.74678e+01 + 1170 1170 2 4.07000e+00 -1.16801e+01 -1.57978e+01 + 1171 1171 2 9.34000e+00 1.13100e+01 -3.50978e+01 + 1172 1172 2 -8.90051e-01 -5.39015e+00 -3.38878e+01 + 1173 1173 2 -5.80005e+00 -1.16001e+01 -1.58078e+01 + 1174 1174 2 1.21800e+01 5.74000e+00 -2.48078e+01 + 1175 1175 2 9.45000e+00 -3.94015e+00 -1.01785e+00 + 1176 1176 2 5.05000e+00 -6.65015e+00 -3.06478e+01 + 1177 1177 2 4.74000e+00 -1.20001e+01 -6.57785e+00 + 1178 1178 2 9.17000e+00 -5.24015e+00 -2.20178e+01 + 1179 1179 2 -4.99005e+00 -2.71015e+00 -2.04078e+01 + 1180 1180 2 5.55000e+00 -9.30150e-01 -3.77878e+01 + 1181 1181 2 4.31000e+00 1.87000e+00 -4.02478e+01 + 1182 1182 2 1.22100e+01 4.41000e+00 -3.56178e+01 + 1183 1183 2 5.39000e+00 -1.04602e+01 -1.21478e+01 + 1184 1184 2 -2.90005e+00 -9.10150e-01 -4.62178e+01 + 1185 1185 2 8.83000e+00 3.44000e+00 -3.89978e+01 + 1186 1186 2 3.74000e+00 9.80000e-01 -1.18778e+01 + 1187 1187 2 -1.17501e+01 6.50000e+00 -1.37478e+01 + 1188 1188 2 -8.12005e+00 -9.72015e+00 -3.68278e+01 + 1189 1189 2 6.79000e+00 5.28000e+00 -3.06178e+01 + 1190 1190 2 7.38000e+00 -4.65015e+00 8.60000e-01 + 1191 1191 2 1.62000e+00 9.24000e+00 -2.43778e+01 + 1192 1192 2 4.04000e+00 -4.11015e+00 -3.91378e+01 + 1193 1193 2 -5.89005e+00 -7.40150e-01 -1.29078e+01 + 1194 1194 2 -6.16005e+00 4.30000e-01 -3.14878e+01 + 1195 1195 2 6.25000e+00 -4.14015e+00 -3.08078e+01 + 1196 1196 2 1.03700e+01 -7.90150e-01 -2.17078e+01 + 1197 1197 2 3.93000e+00 2.71000e+00 -5.74785e+00 + 1198 1198 2 -1.99005e+00 3.41000e+00 -4.40178e+01 + 1199 1199 2 1.22800e+01 -9.61015e+00 -2.62478e+01 + 1200 1200 2 -3.81005e+00 9.46000e+00 -7.36785e+00 + 1201 1201 2 -7.51005e+00 1.02700e+01 -3.02278e+01 + 1202 1202 2 1.05600e+01 5.31000e+00 -1.60578e+01 + 1203 1203 2 -6.57005e+00 -3.28015e+00 -4.78478e+01 + 1204 1204 2 4.37000e+00 4.84000e+00 -3.72978e+01 + 1205 1205 2 7.88000e+00 6.40000e+00 -3.71178e+01 + 1206 1206 2 2.22000e+00 -6.26015e+00 -9.75785e+00 + 1207 1207 2 4.85000e+00 2.39000e+00 -2.42778e+01 + 1208 1208 2 -1.13501e+01 4.77000e+00 -4.62778e+01 + 1209 1209 2 1.26600e+01 -6.29015e+00 -7.86785e+00 + 1210 1210 2 4.69000e+00 4.00000e+00 -9.68785e+00 + 1211 1211 2 3.99000e+00 -8.63015e+00 -4.32778e+01 + 1212 1212 2 7.98000e+00 -8.36015e+00 -1.73778e+01 + 1213 1213 2 2.51000e+00 -4.42015e+00 -3.59478e+01 + 1214 1214 2 5.68000e+00 1.10600e+01 -2.35278e+01 + 1215 1215 2 -4.52005e+00 -7.48015e+00 -1.76978e+01 + 1216 1216 2 -1.03201e+01 -7.23015e+00 -4.57478e+01 + 1217 1217 2 -3.90051e-01 -9.95015e+00 -3.59978e+01 + 1218 1218 2 5.72000e+00 -1.04002e+01 -3.64478e+01 + 1219 1219 2 2.20000e-01 -1.32015e+00 -1.43878e+01 + 1220 1220 2 5.23000e+00 1.27000e+00 -3.60778e+01 + 1221 1221 2 -9.19005e+00 -1.06502e+01 -4.19378e+01 + 1222 1222 2 6.55000e+00 -6.27015e+00 -1.14978e+01 + 1223 1223 2 -2.72005e+00 -9.18015e+00 -3.43078e+01 + 1224 1224 2 -1.02501e+01 9.68000e+00 -4.08078e+01 + 1225 1225 2 -2.08005e+00 -9.04015e+00 -1.71978e+01 + 1226 1226 2 5.19000e+00 6.56000e+00 -7.65785e+00 + 1227 1227 2 -3.50051e-01 -6.16015e+00 -1.26578e+01 + 1228 1228 2 5.80000e-01 7.88000e+00 -6.00785e+00 + 1229 1229 2 -5.18005e+00 8.11000e+00 -4.26578e+01 + 1230 1230 2 -2.22005e+00 -4.89015e+00 -1.44978e+01 + 1231 1231 2 -9.07005e+00 -1.15502e+01 -4.63378e+01 + 1232 1232 2 1.24200e+01 1.95000e+00 -1.75978e+01 + 1233 1233 2 1.09800e+01 2.54000e+00 -2.14078e+01 + 1234 1234 2 -2.41005e+00 5.48000e+00 -2.65078e+01 + 1235 1235 2 7.17000e+00 1.18700e+01 -3.18178e+01 + 1236 1236 2 6.20000e-01 1.06500e+01 -3.09878e+01 + 1237 1237 2 7.90000e+00 -4.16015e+00 -4.09778e+01 + 1238 1238 2 -1.13701e+01 -1.62015e+00 -3.50378e+01 + 1239 1239 2 2.73000e+00 -1.08802e+01 -2.82178e+01 + 1240 1240 2 -2.52005e+00 -1.91015e+00 -3.96678e+01 + 1241 1241 2 -7.49005e+00 1.17000e+00 -3.91478e+01 + 1242 1242 2 2.32000e+00 -5.24015e+00 -1.45778e+01 + 1243 1243 2 9.11000e+00 -7.30150e-01 -3.12078e+01 + 1244 1244 2 4.66000e+00 -7.22015e+00 -1.56878e+01 + 1245 1245 2 5.32000e+00 -4.00150e-01 -5.00785e+00 + 1246 1246 2 -8.10051e-01 -2.62015e+00 -2.98778e+01 + 1247 1247 2 -1.08101e+01 7.68000e+00 -6.23785e+00 + 1248 1248 2 7.19000e+00 -7.80015e+00 -3.14078e+01 + 1249 1249 2 9.90000e+00 3.92000e+00 -8.91785e+00 + 1250 1250 2 -1.01005e+00 1.27600e+01 -2.62278e+01 + 1251 1251 2 -1.79005e+00 -5.91015e+00 -1.03678e+01 + 1252 1252 2 -1.61005e+00 -1.14201e+01 -2.87878e+01 + 1253 1253 2 -8.35005e+00 -1.69015e+00 -3.05978e+01 + 1254 1254 2 -1.01001e+01 -7.20015e+00 -1.16878e+01 + 1255 1255 2 1.12300e+01 -8.67015e+00 -1.58878e+01 + 1256 1256 2 7.40000e+00 -1.76015e+00 -1.65678e+01 + 1257 1257 2 -5.20005e+00 -1.09802e+01 -2.84278e+01 + 1258 1258 2 1.08800e+01 7.74000e+00 -2.96078e+01 + 1259 1259 2 4.80000e+00 -7.70015e+00 -3.99778e+01 + 1260 1260 2 1.49000e+00 -1.30150e-01 -3.65178e+01 + 1261 1261 2 -5.56005e+00 -9.87015e+00 -3.67178e+01 + 1262 1262 2 -9.83005e+00 -1.10602e+01 -3.49778e+01 + 1263 1263 2 -1.12001e+01 2.48000e+00 -1.58478e+01 + 1264 1264 2 -3.41005e+00 7.12000e+00 -1.40078e+01 + 1265 1265 2 1.17200e+01 4.81000e+00 -1.86578e+01 + 1266 1266 2 -1.22001e+01 2.82000e+00 -3.06378e+01 + 1267 1267 2 -9.60005e+00 1.10100e+01 -4.71878e+01 + 1268 1268 2 -9.04005e+00 5.10000e-01 -2.50878e+01 + 1269 1269 2 -5.96005e+00 -2.01500e-02 -3.72478e+01 + 1270 1270 2 1.27800e+01 -4.50015e+00 -1.37178e+01 + 1271 1271 2 9.00000e-02 7.49000e+00 -3.86678e+01 + 1272 1272 2 5.99000e+00 -8.09015e+00 -1.35178e+01 + 1273 1273 2 1.13100e+01 -5.61015e+00 -1.87778e+01 + 1274 1274 2 1.18700e+01 -1.06102e+01 -3.84478e+01 + 1275 1275 2 3.53000e+00 -6.05015e+00 -3.39678e+01 + 1276 1276 2 -6.20005e+00 3.51000e+00 -1.48878e+01 + 1277 1277 2 1.16400e+01 3.59000e+00 -3.85778e+01 + 1278 1278 2 1.14000e+01 -1.27701e+01 -3.58478e+01 + 1279 1279 2 -2.54005e+00 1.25300e+01 -4.23378e+01 + 1280 1280 2 -7.68005e+00 -6.93015e+00 -1.92678e+01 + 1281 1281 2 7.61000e+00 -1.63015e+00 -3.97078e+01 + 1282 1282 2 -3.45005e+00 3.35000e+00 -1.30978e+01 + 1283 1283 2 -4.44005e+00 -1.16402e+01 -4.82978e+01 + 1284 1284 2 -1.70000e-01 8.37000e+00 -2.26178e+01 + 1285 1285 2 9.78000e+00 6.78000e+00 -4.03278e+01 + 1286 1286 2 -6.58005e+00 3.79000e+00 -3.93778e+01 + 1287 1287 2 3.43000e+00 -1.06901e+01 -4.47078e+01 + 1288 1288 2 1.14100e+01 -1.26901e+01 -3.53785e+00 + 1289 1289 2 -2.10005e+00 -1.11701e+01 -2.25678e+01 + 1290 1290 2 -7.97005e+00 1.01400e+01 -3.68178e+01 + 1291 1291 2 -2.11005e+00 1.94000e+00 -3.94678e+01 + 1292 1292 2 4.75000e+00 1.07900e+01 -2.96878e+01 + 1293 1293 2 6.04000e+00 -1.28401e+01 -3.54278e+01 + 1294 1294 2 9.83000e+00 8.26000e+00 -3.22478e+01 + 1295 1295 2 9.44000e+00 -7.93015e+00 -2.88678e+01 + 1296 1296 2 1.16000e+01 -2.78015e+00 -7.80785e+00 + 1297 1297 2 1.06900e+01 -1.21402e+01 -5.94785e+00 + 1298 1298 2 3.51000e+00 9.25000e+00 -1.65078e+01 + 1299 1299 2 -8.50005e+00 4.88000e+00 -2.61678e+01 + 1300 1300 2 3.34000e+00 -1.03902e+01 -3.07978e+01 + 1301 1301 2 5.18000e+00 6.88000e+00 -2.16178e+01 + 1302 1302 2 -1.24001e+01 6.40000e+00 -1.09778e+01 + 1303 1303 2 -7.55005e+00 -6.93015e+00 -1.49378e+01 + 1304 1304 2 -1.18301e+01 8.58000e+00 -2.16785e+00 + 1305 1305 2 -1.11601e+01 4.20000e+00 -6.70785e+00 + 1306 1306 2 -7.07005e+00 8.69000e+00 -9.76785e+00 + 1307 1307 2 1.06600e+01 4.55000e+00 -1.20878e+01 + 1308 1308 2 2.64000e+00 -1.64015e+00 -1.54978e+01 + 1309 1309 2 2.99000e+00 2.74000e+00 -4.49278e+01 + 1310 1310 2 9.29000e+00 -7.03015e+00 -4.50078e+01 + 1311 1311 2 4.29000e+00 7.97000e+00 -4.54078e+01 + 1312 1312 2 -1.12701e+01 -8.00015e+00 -2.14078e+01 + 1313 1313 2 -8.40005e+00 -5.54015e+00 -2.24478e+01 + 1314 1314 2 -6.09005e+00 4.48000e+00 -3.67478e+01 + 1315 1315 2 9.15000e+00 5.23000e+00 -3.37778e+01 + 1316 1316 2 -4.68005e+00 -4.82015e+00 -4.66478e+01 + 1317 1317 2 7.52000e+00 1.57000e+00 -1.43878e+01 + 1318 1318 2 -2.77005e+00 1.19000e+00 -1.69778e+01 + 1319 1319 2 9.14000e+00 -1.53015e+00 -8.01785e+00 + 1320 1320 2 6.97000e+00 -3.24015e+00 -2.83078e+01 + 1321 1321 2 1.91000e+00 7.59000e+00 -9.15785e+00 + 1322 1322 2 6.85000e+00 4.06000e+00 -3.62578e+01 + 1323 1323 2 1.27000e+00 -3.27015e+00 -3.15078e+01 + 1324 1324 2 4.35000e+00 9.50000e+00 -5.44785e+00 + 1325 1325 2 -7.14005e+00 -6.48015e+00 -4.66478e+01 + 1326 1326 2 8.30000e-01 -1.06015e+00 -4.33785e+00 + 1327 1327 2 2.71000e+00 -1.11202e+01 -2.20978e+01 + 1328 1328 2 -9.59005e+00 -3.70015e+00 -1.81878e+01 + 1329 1329 2 -8.48005e+00 -1.03702e+01 -2.84678e+01 + 1330 1330 2 -9.11005e+00 9.59000e+00 -4.33878e+01 + 1331 1331 2 1.62000e+00 5.40000e+00 -1.84785e+00 + 1332 1332 2 -4.00051e-01 -3.22015e+00 -2.13578e+01 + 1333 1333 2 8.34000e+00 -3.06015e+00 -1.43378e+01 + 1334 1334 2 -8.45005e+00 7.58000e+00 -2.39178e+01 + 1335 1335 2 8.81000e+00 9.65000e+00 -4.30678e+01 + 1336 1336 2 2.17000e+00 -9.83015e+00 -1.26478e+01 + 1337 1337 2 -4.31005e+00 7.43000e+00 -2.58078e+01 + 1338 1338 2 8.92000e+00 8.37000e+00 -7.99785e+00 + 1339 1339 2 6.05000e+00 -3.75015e+00 -1.30278e+01 + 1340 1340 2 5.74000e+00 1.21100e+01 -4.43785e+00 + 1341 1341 2 3.20000e+00 5.57000e+00 -3.14378e+01 + 1342 1342 2 -5.08005e+00 -1.37015e+00 -1.01078e+01 + 1343 1343 2 -9.90051e-01 -1.26302e+01 -1.64878e+01 + 1344 1344 2 -1.15001e+01 -3.89015e+00 -8.07785e+00 + 1345 1345 2 -2.06005e+00 -5.76015e+00 -1.73478e+01 + 1346 1346 2 -1.24001e+01 1.08600e+01 -4.71578e+01 + 1347 1347 2 -3.59005e+00 5.39000e+00 -9.73785e+00 + 1348 1348 2 6.91000e+00 -4.28015e+00 -5.88785e+00 + 1349 1349 2 -9.64005e+00 6.56000e+00 -2.14178e+01 + 1350 1350 2 9.69000e+00 1.12200e+01 -1.51878e+01 + 1351 1351 2 1.14500e+01 -1.74015e+00 5.60000e-01 + 1352 1352 2 -6.61005e+00 1.20500e+01 -4.26078e+01 + 1353 1353 2 6.52000e+00 1.06600e+01 -1.45078e+01 + 1354 1354 2 1.03600e+01 -2.89015e+00 -4.28278e+01 + 1355 1355 2 9.30000e-01 -7.60015e+00 -2.89778e+01 + 1356 1356 2 7.04000e+00 -1.12002e+01 -4.48378e+01 + 1357 1357 2 7.40000e-01 4.14000e+00 -1.25878e+01 + 1358 1358 2 8.00000e-02 -4.35015e+00 -3.89678e+01 + 1359 1359 2 7.31000e+00 6.91000e+00 -2.43078e+01 + 1360 1360 2 -1.00401e+01 -3.51015e+00 -4.29978e+01 + 1361 1361 2 -1.75005e+00 -2.26015e+00 -1.81178e+01 + 1362 1362 2 1.12700e+01 -1.67015e+00 -1.57278e+01 + 1363 1363 2 1.01500e+01 2.95000e+00 -3.49478e+01 + 1364 1364 2 -1.22001e+01 9.13000e+00 -1.48778e+01 + 1365 1365 2 -9.12005e+00 2.42000e+00 -3.46778e+01 + 1366 1366 2 2.96000e+00 6.12000e+00 -2.66378e+01 + 1367 1367 2 -5.30005e+00 9.71000e+00 -1.68678e+01 + 1368 1368 2 9.84000e+00 -3.46015e+00 -1.09178e+01 + 1369 1369 2 3.99000e+00 4.59000e+00 -2.89778e+01 + 1370 1370 2 9.78000e+00 1.10400e+01 -3.14178e+01 + 1371 1371 2 1.03500e+01 -5.34015e+00 -1.44278e+01 + 1372 1372 2 -3.43005e+00 -9.17015e+00 -2.84178e+01 + 1373 1373 2 4.45000e+00 -3.71015e+00 -1.52778e+01 + 1374 1374 2 1.57000e+00 -7.99015e+00 -2.61278e+01 + 1375 1375 2 5.46000e+00 -2.57015e+00 -4.72978e+01 + 1376 1376 2 -1.14501e+01 1.47000e+00 -6.54785e+00 + 1377 1377 2 6.75000e+00 -5.59015e+00 -4.47678e+01 + 1378 1378 2 -5.04005e+00 -1.10502e+01 -2.49178e+01 + 1379 1379 2 -1.02401e+01 -9.00150e-01 -2.25278e+01 + 1380 1380 2 4.23000e+00 -7.94015e+00 -2.07378e+01 + diff --git a/examples/USER/misc/local_density/benzene_water/benzene_water.in b/examples/USER/misc/local_density/benzene_water/benzene_water.in new file mode 100644 index 0000000000..01fb3f27e5 --- /dev/null +++ b/examples/USER/misc/local_density/benzene_water/benzene_water.in @@ -0,0 +1,62 @@ +# LAMMPS input file for 26.5% benzene mole fraction solution +# with 380 benzene and 1000 water molecules, +# using all possible local density potentials +# between benzene and water +# +# Author: Tanmoy Sanyal, Shell Group, UC Santa Barbara +# +# Refer: Sanyal and Shell, JPC-B, 2018, 122 (21), 5678-5693 + + + +# Initialize simulation box +dimension 3 +boundary p p p +units real +atom_style molecular + +# Set potential styles +pair_style hybrid/overlay table spline 500 local/density + +# Read molecule data and set initial velocities +read_data benzene_water.data +velocity all create 3.0000e+02 16611 rot yes dist gaussian + +# Assign potentials +pair_coeff 1 1 table benzene_water.pair.table PairBB +pair_coeff 1 2 table benzene_water.pair.table PairWW +pair_coeff 2 2 table benzene_water.pair.table PairBW +pair_coeff * * local/density benzene_water.localdensity.table + +# Recentering during minimization and equilibration +fix recentering all recenter 0.0 0.0 0.0 units box + +# Thermostat & time integration +timestep 2.0 +thermo 100 +thermo_style custom temp ke pe etotal ebond eangle edihed evdwl + +# Minimization +minimize 1.e-4 0.0 10000 10000 + +# Set up integration parameters +fix timeintegration all nve +fix thermostat all langevin 3.0000e+02 3.0000e+02 1.0000e+02 81890 + +# Equilibration (for realistic results, run for 5000000 steps) +reset_timestep 0 +run 5000 + +# Turn off recentering during production phase +unfix recentering + +# Setup trajectory output +dump myDump all custom 100 benzene_water.lammpstrj.gz id type x y z element +dump_modify myDump element B W +dump_modify myDump sort id + +# Production (for realistic results, run for 10000000 steps) +reset_timestep 0 +run 1000 + + diff --git a/examples/USER/misc/local_density/benzene_water/benzene_water.localdensity.table b/examples/USER/misc/local_density/benzene_water/benzene_water.localdensity.table new file mode 100644 index 0000000000..b0d63dbbbf --- /dev/null +++ b/examples/USER/misc/local_density/benzene_water/benzene_water.localdensity.table @@ -0,0 +1,2024 @@ +# local density potentials: (B,B), (W,W), (B,W), (W,B) + +4 500 + + 6.5000000e+00 7.5000000e+00 +1 +1 + 0.0000000e+00 2.0000000e+01 4.0080160e-02 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5200000e+00 + 1.5199986e+00 + 1.5199680e+00 + 1.5198579e+00 + 1.5196169e+00 + 1.5191936e+00 + 1.5185367e+00 + 1.5175950e+00 + 1.5163171e+00 + 1.5146518e+00 + 1.5125477e+00 + 1.5099534e+00 + 1.5068178e+00 + 1.5030895e+00 + 1.4987171e+00 + 1.4936494e+00 + 1.4878351e+00 + 1.4812228e+00 + 1.4737622e+00 + 1.4654545e+00 + 1.4563786e+00 + 1.4466198e+00 + 1.4362633e+00 + 1.4253943e+00 + 1.4140983e+00 + 1.4024604e+00 + 1.3905658e+00 + 1.3785000e+00 + 1.3663480e+00 + 1.3541953e+00 + 1.3421270e+00 + 1.3302284e+00 + 1.3185849e+00 + 1.3072816e+00 + 1.2964039e+00 + 1.2860369e+00 + 1.2762309e+00 + 1.2669431e+00 + 1.2581156e+00 + 1.2496902e+00 + 1.2416089e+00 + 1.2338138e+00 + 1.2262466e+00 + 1.2188495e+00 + 1.2115643e+00 + 1.2043330e+00 + 1.1970976e+00 + 1.1898000e+00 + 1.1823821e+00 + 1.1747860e+00 + 1.1669536e+00 + 1.1588268e+00 + 1.1503476e+00 + 1.1414684e+00 + 1.1321937e+00 + 1.1225435e+00 + 1.1125380e+00 + 1.1021975e+00 + 1.0915422e+00 + 1.0805923e+00 + 1.0693679e+00 + 1.0578893e+00 + 1.0461766e+00 + 1.0342501e+00 + 1.0221300e+00 + 1.0098365e+00 + 9.9738976e-01 + 9.8481000e-01 + 9.7211742e-01 + 9.5933222e-01 + 9.4647351e-01 + 9.3354993e-01 + 9.2056435e-01 + 9.0751957e-01 + 8.9441841e-01 + 8.8126366e-01 + 8.6805815e-01 + 8.5480466e-01 + 8.4150602e-01 + 8.2816503e-01 + 8.1478448e-01 + 8.0136720e-01 + 7.8791599e-01 + 7.7443365e-01 + 7.6092300e-01 + 7.4738683e-01 + 7.3382796e-01 + 7.2024905e-01 + 7.0664998e-01 + 6.9302788e-01 + 6.7937983e-01 + 6.6570286e-01 + 6.5199403e-01 + 6.3825039e-01 + 6.2446900e-01 + 6.1064690e-01 + 5.9678114e-01 + 5.8286879e-01 + 5.6890688e-01 + 5.5489248e-01 + 5.4082263e-01 + 5.2669439e-01 + 5.1250480e-01 + 4.9825093e-01 + 4.8392987e-01 + 4.6954274e-01 + 4.5509728e-01 + 4.4060182e-01 + 4.2606471e-01 + 4.1149429e-01 + 3.9689892e-01 + 3.8228692e-01 + 3.6766665e-01 + 3.5304645e-01 + 3.3843467e-01 + 3.2383965e-01 + 3.0926972e-01 + 2.9473325e-01 + 2.8023857e-01 + 2.6579402e-01 + 2.5140795e-01 + 2.3708871e-01 + 2.2284155e-01 + 2.0866274e-01 + 1.9454685e-01 + 1.8048847e-01 + 1.6648220e-01 + 1.5252263e-01 + 1.3860435e-01 + 1.2472194e-01 + 1.1087000e-01 + 9.7043120e-02 + 8.3235888e-02 + 6.9442895e-02 + 5.5658731e-02 + 4.1877986e-02 + 2.8095251e-02 + 1.4305116e-02 + 5.0217173e-04 +-1.3318314e-02 +-2.7157364e-02 +-4.1014743e-02 +-5.4890212e-02 +-6.8783535e-02 +-8.2694474e-02 +-9.6622792e-02 +-1.1056825e-01 +-1.2453061e-01 +-1.3850964e-01 +-1.5250510e-01 +-1.6651674e-01 +-1.8054434e-01 +-1.9458766e-01 +-2.0864645e-01 +-2.2272049e-01 +-2.3680953e-01 +-2.5091268e-01 +-2.6502202e-01 +-2.7912541e-01 +-2.9321059e-01 +-3.0726536e-01 +-3.2127748e-01 +-3.3523473e-01 +-3.4912488e-01 +-3.6293570e-01 +-3.7665496e-01 +-3.9027045e-01 +-4.0376992e-01 +-4.1714117e-01 +-4.3037195e-01 +-4.4345004e-01 +-4.5636322e-01 +-4.6909926e-01 +-4.8164636e-01 +-4.9400348e-01 +-5.0618082e-01 +-5.1818912e-01 +-5.3003911e-01 +-5.4174151e-01 +-5.5330707e-01 +-5.6474652e-01 +-5.7607059e-01 +-5.8729001e-01 +-5.9841552e-01 +-6.0945785e-01 +-6.2042773e-01 +-6.3133589e-01 +-6.4219308e-01 +-6.5301001e-01 +-6.6379743e-01 +-6.7456590e-01 +-6.8531068e-01 +-6.9599928e-01 +-7.0659631e-01 +-7.1706635e-01 +-7.2737402e-01 +-7.3748391e-01 +-7.4736063e-01 +-7.5696876e-01 +-7.6627291e-01 +-7.7523768e-01 +-7.8382768e-01 +-7.9200749e-01 +-7.9974172e-01 +-8.0699496e-01 +-8.1373183e-01 +-8.1991691e-01 +-8.2551482e-01 +-8.3050467e-01 +-8.3491291e-01 +-8.3877558e-01 +-8.4212871e-01 +-8.4500834e-01 +-8.4745052e-01 +-8.4949128e-01 +-8.5116667e-01 +-8.5251273e-01 +-8.5356549e-01 +-8.5436100e-01 +-8.5493529e-01 +-8.5532441e-01 +-8.5556440e-01 +-8.5569130e-01 +-8.5574115e-01 +-8.5574998e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 +-8.5575000e-01 + + 2.5000000e+00 3.5000000e+00 +2 +2 + 0.0000000e+00 6.0000000e+00 1.2024048e-02 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0462000e+00 + 2.0460657e+00 + 2.0446594e+00 + 2.0403895e+00 + 2.0316620e+00 + 2.0168831e+00 + 1.9944587e+00 + 1.9627949e+00 + 1.9202980e+00 + 1.8654077e+00 + 1.7985181e+00 + 1.7230065e+00 + 1.6425015e+00 + 1.5606319e+00 + 1.4810262e+00 + 1.4073131e+00 + 1.3431214e+00 + 1.2920798e+00 + 1.2569864e+00 + 1.2358842e+00 + 1.2251262e+00 + 1.2210637e+00 + 1.2200475e+00 + 1.2184289e+00 + 1.2125589e+00 + 1.1987885e+00 + 1.1735526e+00 + 1.1361263e+00 + 1.0892520e+00 + 1.0358822e+00 + 9.7896980e-01 + 9.2146751e-01 + 8.6632806e-01 + 8.1650421e-01 + 7.7494869e-01 + 7.4388695e-01 + 7.2232357e-01 + 7.0837184e-01 + 7.0014504e-01 + 6.9575642e-01 + 6.9331925e-01 + 6.9094679e-01 + 6.8675230e-01 + 6.7890996e-01 + 6.6694075e-01 + 6.5168297e-01 + 6.3402998e-01 + 6.1487512e-01 + 5.9511173e-01 + 5.7563315e-01 + 5.5733272e-01 + 5.4110376e-01 + 5.2756220e-01 + 5.1637106e-01 + 5.0698887e-01 + 4.9887416e-01 + 4.9148546e-01 + 4.8428132e-01 + 4.7672025e-01 + 4.6826081e-01 + 4.5839485e-01 + 4.4712673e-01 + 4.3486244e-01 + 4.2201868e-01 + 4.0901218e-01 + 3.9625966e-01 + 3.8417784e-01 + 3.7318344e-01 + 3.6369286e-01 + 3.5593854e-01 + 3.4965997e-01 + 3.4451493e-01 + 3.4016124e-01 + 3.3625667e-01 + 3.3245903e-01 + 3.2842610e-01 + 3.2381569e-01 + 3.1831627e-01 + 3.1195884e-01 + 3.0498880e-01 + 2.9765482e-01 + 2.9020560e-01 + 2.8288981e-01 + 2.7595615e-01 + 2.6965328e-01 + 2.6422884e-01 + 2.5975489e-01 + 2.5593343e-01 + 2.5241954e-01 + 2.4886832e-01 + 2.4493489e-01 + 2.4027433e-01 + 2.3454175e-01 + 2.2739225e-01 + 2.1853384e-01 + 2.0811604e-01 + 1.9650791e-01 + 1.8408007e-01 + 1.7120316e-01 + 1.5824783e-01 + 1.4558470e-01 + 1.3358442e-01 + 1.2261513e-01 + 1.1286044e-01 + 1.0419542e-01 + 9.6465750e-02 + 8.9517133e-02 + 8.3195263e-02 + 7.7345836e-02 + 7.1814548e-02 + 6.6447095e-02 + 6.1107588e-02 + 5.5777274e-02 + 5.0483296e-02 + 4.5252904e-02 + 4.0113348e-02 + 3.5091878e-02 + 3.0215745e-02 + 2.5512199e-02 + 2.1008131e-02 + 1.6715617e-02 + 1.2626961e-02 + 8.7330951e-03 + 5.0249487e-03 + 1.4934524e-03 +-1.8704635e-03 +-5.0758685e-03 +-8.1318323e-03 +-1.1043079e-02 +-1.3793016e-02 +-1.6358529e-02 +-1.8716498e-02 +-2.0843807e-02 +-2.2717336e-02 +-2.4313969e-02 +-2.5610588e-02 +-2.6585188e-02 +-2.7244724e-02 +-2.7627095e-02 +-2.7771713e-02 +-2.7717987e-02 +-2.7505328e-02 +-2.7173148e-02 +-2.6760858e-02 +-2.6307867e-02 +-2.5841384e-02 +-2.5342224e-02 +-2.4780181e-02 +-2.4125047e-02 +-2.3346614e-02 +-2.2414676e-02 +-2.1299025e-02 +-1.9969454e-02 +-1.8398136e-02 +-1.6599321e-02 +-1.4623294e-02 +-1.2521505e-02 +-1.0345403e-02 +-8.1464389e-03 +-5.9760622e-03 +-3.8857229e-03 +-1.9268610e-03 +-1.3832164e-04 + 1.4782888e-03 + 2.9282133e-03 + 4.2166947e-03 + 5.3489760e-03 + 6.3303000e-03 + 7.1659097e-03 + 7.8610481e-03 + 8.4198995e-03 + 8.8332749e-03 + 9.0828227e-03 + 9.1500123e-03 + 9.0163131e-03 + 8.6631948e-03 + 8.0721268e-03 + 7.2245785e-03 + 6.1021765e-03 + 4.7263503e-03 + 3.2107872e-03 + 1.6822100e-03 + 2.6734188e-04 +-9.0709423e-04 +-1.7143753e-03 +-2.0277783e-03 +-1.7205802e-03 +-6.8297710e-04 + 1.0366865e-03 + 3.3037777e-03 + 5.9827919e-03 + 8.9382246e-03 + 1.2034571e-02 + 1.5136327e-02 + 1.8107989e-02 + 2.0814846e-02 + 2.3201015e-02 + 2.5355075e-02 + 2.7381061e-02 + 2.9383010e-02 + 3.1464956e-02 + 3.3730934e-02 + 3.6284981e-02 + 3.9231132e-02 + 4.2657484e-02 + 4.6539348e-02 + 5.0803371e-02 + 5.5376010e-02 + 6.0183720e-02 + 6.5152959e-02 + 7.0210181e-02 + 7.5281844e-02 + 8.0295485e-02 + 8.5234073e-02 + 9.0161482e-02 + 9.5147990e-02 + 1.0026387e-01 + 1.0557941e-01 + 1.1116488e-01 + 1.1709056e-01 + 1.2342672e-01 + 1.3023047e-01 + 1.3748721e-01 + 1.4515813e-01 + 1.5320437e-01 + 1.6158708e-01 + 1.7026744e-01 + 1.7920658e-01 + 1.8836566e-01 + 1.9770732e-01 + 2.0723997e-01 + 2.1702545e-01 + 2.2712865e-01 + 2.3761445e-01 + 2.4854771e-01 + 2.5999332e-01 + 2.7201616e-01 + 2.8468110e-01 + 2.9803349e-01 + 3.1203651e-01 + 3.2663170e-01 + 3.4176062e-01 + 3.5736482e-01 + 3.7338585e-01 + 3.8976527e-01 + 4.0644463e-01 + 4.2336952e-01 + 4.4056834e-01 + 4.5814698e-01 + 4.7621428e-01 + 4.9487913e-01 + 5.1425038e-01 + 5.3443688e-01 + 5.5554751e-01 + 5.7769109e-01 + 6.0087457e-01 + 6.2477197e-01 + 6.4898945e-01 + 6.7313316e-01 + 6.9680926e-01 + 7.1962391e-01 + 7.4118326e-01 + 7.6109347e-01 + 7.7900642e-01 + 7.9523128e-01 + 8.1056985e-01 + 8.2583586e-01 + 8.4184302e-01 + 8.5940505e-01 + 8.7933568e-01 + 9.0244863e-01 + 9.2955610e-01 + 9.6082471e-01 + 9.9477338e-01 + 1.0296620e+00 + 1.0637504e+00 + 1.0952986e+00 + 1.1225663e+00 + 1.1438135e+00 + 1.1573000e+00 + 1.1615947e+00 + 1.1585131e+00 + 1.1518130e+00 + 1.1452779e+00 + 1.1426915e+00 + 1.1478376e+00 + 1.1644998e+00 + 1.1964617e+00 + 1.2474884e+00 + 1.3187459e+00 + 1.4061740e+00 + 1.5050862e+00 + 1.6107957e+00 + 1.7186160e+00 + 1.8238603e+00 + 1.9218422e+00 + 2.0078748e+00 + 2.0778069e+00 + 2.1317113e+00 + 2.1716651e+00 + 2.1997574e+00 + 2.2180771e+00 + 2.2287133e+00 + 2.2337551e+00 + 2.2352915e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + 2.2354000e+00 + + 4.5000000e+00 5.5000000e+00 +1 +2 + 0.0000000e+00 2.0000000e+01 4.0080160e-02 +-4.5439333e-01 +-4.5217352e-01 +-4.4584312e-01 +-4.3589567e-01 +-4.2282471e-01 +-4.0712378e-01 +-3.8928644e-01 +-3.6980622e-01 +-3.4917666e-01 +-3.2789131e-01 +-3.0644372e-01 +-2.8532742e-01 +-2.6503595e-01 +-2.4606287e-01 +-2.2890171e-01 +-2.1404601e-01 +-2.0198933e-01 +-1.9322519e-01 +-1.8817750e-01 +-1.8674377e-01 +-1.8858102e-01 +-1.9334503e-01 +-2.0069158e-01 +-2.1027643e-01 +-2.2175537e-01 +-2.3478417e-01 +-2.4901861e-01 +-2.6411447e-01 +-2.7972752e-01 +-2.9551355e-01 +-3.1112832e-01 +-3.2622761e-01 +-3.4046720e-01 +-3.5350288e-01 +-3.6499040e-01 +-3.7460270e-01 +-3.8228379e-01 +-3.8819407e-01 +-3.9249997e-01 +-3.9536792e-01 +-3.9696436e-01 +-3.9745571e-01 +-3.9700841e-01 +-3.9578890e-01 +-3.9396360e-01 +-3.9169894e-01 +-3.8916137e-01 +-3.8651730e-01 +-3.8393317e-01 +-3.8157542e-01 +-3.7961047e-01 +-3.7820477e-01 +-3.7752265e-01 +-3.7763665e-01 +-3.7849337e-01 +-3.8003026e-01 +-3.8218478e-01 +-3.8489440e-01 +-3.8809657e-01 +-3.9172876e-01 +-3.9572843e-01 +-4.0003303e-01 +-4.0458004e-01 +-4.0930690e-01 +-4.1415108e-01 +-4.1905005e-01 +-4.2394126e-01 +-4.2876217e-01 +-4.3345025e-01 +-4.3794302e-01 +-4.4219923e-01 +-4.4622885e-01 +-4.5004938e-01 +-4.5367833e-01 +-4.5713320e-01 +-4.6043152e-01 +-4.6359079e-01 +-4.6662853e-01 +-4.6956224e-01 +-4.7240943e-01 +-4.7518762e-01 +-4.7791432e-01 +-4.8060703e-01 +-4.8328327e-01 +-4.8596055e-01 +-4.8865638e-01 +-4.9138828e-01 +-4.9417165e-01 +-4.9701271e-01 +-4.9991507e-01 +-5.0288236e-01 +-5.0591822e-01 +-5.0902626e-01 +-5.1221011e-01 +-5.1547341e-01 +-5.1881977e-01 +-5.2225283e-01 +-5.2577622e-01 +-5.2939355e-01 +-5.3310847e-01 +-5.3692459e-01 +-5.4084554e-01 +-5.4487496e-01 +-5.4901646e-01 +-5.5327164e-01 +-5.5762480e-01 +-5.6205157e-01 +-5.6652752e-01 +-5.7102819e-01 +-5.7552916e-01 +-5.8000598e-01 +-5.8443421e-01 +-5.8878941e-01 +-5.9304715e-01 +-5.9718298e-01 +-6.0117246e-01 +-6.0499116e-01 +-6.0861463e-01 +-6.1201843e-01 +-6.1517813e-01 +-6.1806928e-01 +-6.2066863e-01 +-6.2297441e-01 +-6.2500366e-01 +-6.2677405e-01 +-6.2830323e-01 +-6.2960887e-01 +-6.3070863e-01 +-6.3162019e-01 +-6.3236119e-01 +-6.3294931e-01 +-6.3340221e-01 +-6.3373756e-01 +-6.3397301e-01 +-6.3412623e-01 +-6.3421489e-01 +-6.3425665e-01 +-6.3426917e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 +-6.3427000e-01 + + 4.5000000e+00 5.5000000e+00 +2 +1 + 0.0000000e+00 2.0000000e+01 4.0080160e-02 +-6.9546667e-02 +-6.9188143e-02 +-6.8087841e-02 +-6.6208660e-02 +-6.3513504e-02 +-5.9965274e-02 +-5.5526872e-02 +-5.0161199e-02 +-4.3831156e-02 +-3.6499647e-02 +-2.8129571e-02 +-1.8683832e-02 +-8.1253303e-03 + 3.5830320e-03 + 1.6478353e-02 + 3.0597732e-02 + 4.5978266e-02 + 6.2657054e-02 + 8.0655930e-02 + 9.9881386e-02 + 1.2018721e-01 + 1.4142692e-01 + 1.6345403e-01 + 1.8612206e-01 + 2.0928452e-01 + 2.3279493e-01 + 2.5650681e-01 + 2.8027368e-01 + 3.0394904e-01 + 3.2738642e-01 + 3.5043934e-01 + 3.7296131e-01 + 3.9480584e-01 + 4.1582646e-01 + 4.3587668e-01 + 4.5481768e-01 + 4.7263181e-01 + 4.8939812e-01 + 5.0519838e-01 + 5.2011434e-01 + 5.3422776e-01 + 5.4762041e-01 + 5.6037402e-01 + 5.7257037e-01 + 5.8429121e-01 + 5.9561831e-01 + 6.0663340e-01 + 6.1741826e-01 + 6.2805465e-01 + 6.3862431e-01 + 6.4920901e-01 + 6.5989050e-01 + 6.7074956e-01 + 6.8182350e-01 + 6.9309002e-01 + 7.0452250e-01 + 7.1609432e-01 + 7.2777886e-01 + 7.3954950e-01 + 7.5137962e-01 + 7.6324259e-01 + 7.7511180e-01 + 7.8696063e-01 + 7.9876245e-01 + 8.1049065e-01 + 8.2211860e-01 + 8.3361969e-01 + 8.4496729e-01 + 8.5613478e-01 + 8.6709556e-01 + 8.7782560e-01 + 8.8830714e-01 + 8.9852336e-01 + 9.0845742e-01 + 9.1809248e-01 + 9.2741172e-01 + 9.3639829e-01 + 9.4503537e-01 + 9.5330612e-01 + 9.6119370e-01 + 9.6868129e-01 + 9.7575205e-01 + 9.8238915e-01 + 9.8857575e-01 + 9.9429502e-01 + 9.9953012e-01 + 1.0042642e+00 + 1.0084875e+00 + 1.0122215e+00 + 1.0154963e+00 + 1.0183421e+00 + 1.0207889e+00 + 1.0228669e+00 + 1.0246062e+00 + 1.0260369e+00 + 1.0271893e+00 + 1.0280933e+00 + 1.0287791e+00 + 1.0292770e+00 + 1.0296169e+00 + 1.0298290e+00 + 1.0299435e+00 + 1.0299904e+00 + 1.0299999e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + 1.0300000e+00 + diff --git a/examples/USER/misc/local_density/benzene_water/benzene_water.pair.table b/examples/USER/misc/local_density/benzene_water/benzene_water.pair.table new file mode 100644 index 0000000000..348bccfa0e --- /dev/null +++ b/examples/USER/misc/local_density/benzene_water/benzene_water.pair.table @@ -0,0 +1,2024 @@ + +PairBB +N 500 R 2.00000e-02 1.32500e+01 + +1 2.00000e-02 2.96754e+01 5.54271e+00 +2 4.65130e-02 2.95284e+01 5.54271e+00 +3 7.30261e-02 2.93814e+01 5.54271e+00 +4 9.95391e-02 2.92345e+01 5.54271e+00 +5 1.26052e-01 2.90875e+01 5.54271e+00 +6 1.52565e-01 2.89406e+01 5.54271e+00 +7 1.79078e-01 2.87936e+01 5.54271e+00 +8 2.05591e-01 2.86467e+01 5.54271e+00 +9 2.32104e-01 2.84997e+01 5.54271e+00 +10 2.58617e-01 2.83528e+01 5.54271e+00 +11 2.85130e-01 2.82058e+01 5.54271e+00 +12 3.11643e-01 2.80589e+01 5.54271e+00 +13 3.38156e-01 2.79119e+01 5.54271e+00 +14 3.64669e-01 2.77650e+01 5.54271e+00 +15 3.91182e-01 2.76180e+01 5.54271e+00 +16 4.17695e-01 2.74710e+01 5.54271e+00 +17 4.44208e-01 2.73241e+01 5.54271e+00 +18 4.70721e-01 2.71771e+01 5.54271e+00 +19 4.97234e-01 2.70302e+01 5.54271e+00 +20 5.23747e-01 2.68832e+01 5.54271e+00 +21 5.50261e-01 2.67363e+01 5.54271e+00 +22 5.76774e-01 2.65893e+01 5.54271e+00 +23 6.03287e-01 2.64424e+01 5.54271e+00 +24 6.29800e-01 2.62954e+01 5.54271e+00 +25 6.56313e-01 2.61485e+01 5.54271e+00 +26 6.82826e-01 2.60015e+01 5.54271e+00 +27 7.09339e-01 2.58546e+01 5.54271e+00 +28 7.35852e-01 2.57076e+01 5.54271e+00 +29 7.62365e-01 2.55606e+01 5.54271e+00 +30 7.88878e-01 2.54137e+01 5.54271e+00 +31 8.15391e-01 2.52667e+01 5.54271e+00 +32 8.41904e-01 2.51198e+01 5.54271e+00 +33 8.68417e-01 2.49728e+01 5.54271e+00 +34 8.94930e-01 2.48259e+01 5.54271e+00 +35 9.21443e-01 2.46789e+01 5.54271e+00 +36 9.47956e-01 2.45320e+01 5.54271e+00 +37 9.74469e-01 2.43850e+01 5.54271e+00 +38 1.00098e+00 2.42381e+01 5.54271e+00 +39 1.02749e+00 2.40911e+01 5.54271e+00 +40 1.05401e+00 2.39441e+01 5.54271e+00 +41 1.08052e+00 2.37972e+01 5.54271e+00 +42 1.10703e+00 2.36502e+01 5.54271e+00 +43 1.13355e+00 2.35033e+01 5.54271e+00 +44 1.16006e+00 2.33563e+01 5.54271e+00 +45 1.18657e+00 2.32094e+01 5.54271e+00 +46 1.21309e+00 2.30624e+01 5.54271e+00 +47 1.23960e+00 2.29155e+01 5.54271e+00 +48 1.26611e+00 2.27685e+01 5.54271e+00 +49 1.29263e+00 2.26216e+01 5.54271e+00 +50 1.31914e+00 2.24746e+01 5.54271e+00 +51 1.34565e+00 2.23277e+01 5.54271e+00 +52 1.37216e+00 2.21807e+01 5.54271e+00 +53 1.39868e+00 2.20337e+01 5.54271e+00 +54 1.42519e+00 2.18868e+01 5.54271e+00 +55 1.45170e+00 2.17398e+01 5.54271e+00 +56 1.47822e+00 2.15929e+01 5.54271e+00 +57 1.50473e+00 2.14459e+01 5.54271e+00 +58 1.53124e+00 2.12990e+01 5.54271e+00 +59 1.55776e+00 2.11520e+01 5.54271e+00 +60 1.58427e+00 2.10051e+01 5.54271e+00 +61 1.61078e+00 2.08581e+01 5.54271e+00 +62 1.63729e+00 2.07112e+01 5.54271e+00 +63 1.66381e+00 2.05642e+01 5.54271e+00 +64 1.69032e+00 2.04173e+01 5.54271e+00 +65 1.71683e+00 2.02703e+01 5.54271e+00 +66 1.74335e+00 2.01233e+01 5.54271e+00 +67 1.76986e+00 1.99764e+01 5.54271e+00 +68 1.79637e+00 1.98294e+01 5.54271e+00 +69 1.82289e+00 1.96825e+01 5.54271e+00 +70 1.84940e+00 1.95355e+01 5.54271e+00 +71 1.87591e+00 1.93886e+01 5.54271e+00 +72 1.90242e+00 1.92416e+01 5.54271e+00 +73 1.92894e+00 1.90947e+01 5.54271e+00 +74 1.95545e+00 1.89477e+01 5.54271e+00 +75 1.98196e+00 1.88008e+01 5.54271e+00 +76 2.00848e+00 1.86538e+01 5.54271e+00 +77 2.03499e+00 1.85069e+01 5.54271e+00 +78 2.06150e+00 1.83599e+01 5.54271e+00 +79 2.08802e+00 1.82129e+01 5.54271e+00 +80 2.11453e+00 1.80660e+01 5.54271e+00 +81 2.14104e+00 1.79190e+01 5.54271e+00 +82 2.16756e+00 1.77721e+01 5.54271e+00 +83 2.19407e+00 1.76251e+01 5.54271e+00 +84 2.22058e+00 1.74782e+01 5.54271e+00 +85 2.24709e+00 1.73312e+01 5.54271e+00 +86 2.27361e+00 1.71843e+01 5.54271e+00 +87 2.30012e+00 1.70373e+01 5.54271e+00 +88 2.32663e+00 1.68904e+01 5.54271e+00 +89 2.35315e+00 1.67434e+01 5.54271e+00 +90 2.37966e+00 1.65965e+01 5.54271e+00 +91 2.40617e+00 1.64495e+01 5.54271e+00 +92 2.43269e+00 1.63025e+01 5.54271e+00 +93 2.45920e+00 1.61556e+01 5.54271e+00 +94 2.48571e+00 1.60086e+01 5.54271e+00 +95 2.51222e+00 1.58617e+01 5.54271e+00 +96 2.53874e+00 1.57147e+01 5.54271e+00 +97 2.56525e+00 1.55678e+01 5.54271e+00 +98 2.59176e+00 1.54208e+01 5.54271e+00 +99 2.61828e+00 1.52739e+01 5.54271e+00 +100 2.64479e+00 1.51269e+01 5.54271e+00 +101 2.67130e+00 1.49800e+01 5.54271e+00 +102 2.69782e+00 1.48330e+01 5.54271e+00 +103 2.72433e+00 1.46861e+01 5.54271e+00 +104 2.75084e+00 1.45391e+01 5.54271e+00 +105 2.77735e+00 1.43921e+01 5.54271e+00 +106 2.80387e+00 1.42452e+01 5.54271e+00 +107 2.83038e+00 1.40982e+01 5.54271e+00 +108 2.85689e+00 1.39513e+01 5.54271e+00 +109 2.88341e+00 1.38043e+01 5.54271e+00 +110 2.90992e+00 1.36574e+01 5.54271e+00 +111 2.93643e+00 1.35104e+01 5.54271e+00 +112 2.96295e+00 1.33635e+01 5.54271e+00 +113 2.98946e+00 1.32165e+01 5.54271e+00 +114 3.01597e+00 1.30696e+01 5.54271e+00 +115 3.04248e+00 1.29226e+01 5.54271e+00 +116 3.06900e+00 1.27757e+01 5.54271e+00 +117 3.09551e+00 1.26287e+01 5.54271e+00 +118 3.12202e+00 1.24817e+01 5.54271e+00 +119 3.14854e+00 1.23348e+01 5.54271e+00 +120 3.17505e+00 1.21878e+01 5.54271e+00 +121 3.20156e+00 1.20409e+01 5.54271e+00 +122 3.22808e+00 1.18939e+01 5.54271e+00 +123 3.25459e+00 1.17470e+01 5.54273e+00 +124 3.28110e+00 1.16000e+01 5.54277e+00 +125 3.30762e+00 1.14531e+01 5.54280e+00 +126 3.33413e+00 1.13061e+01 5.54285e+00 +127 3.36064e+00 1.11591e+01 5.54289e+00 +128 3.38715e+00 1.10122e+01 5.54295e+00 +129 3.41367e+00 1.08652e+01 5.54300e+00 +130 3.44018e+00 1.07183e+01 5.54306e+00 +131 3.46669e+00 1.05713e+01 5.54313e+00 +132 3.49321e+00 1.04243e+01 5.54320e+00 +133 3.51972e+00 1.02774e+01 5.54328e+00 +134 3.54623e+00 1.01304e+01 5.54336e+00 +135 3.57275e+00 9.98342e+00 5.54343e+00 +136 3.59926e+00 9.83645e+00 5.54350e+00 +137 3.62577e+00 9.68947e+00 5.54356e+00 +138 3.65228e+00 9.54250e+00 5.54361e+00 +139 3.67880e+00 9.39552e+00 5.54366e+00 +140 3.70531e+00 9.24854e+00 5.54370e+00 +141 3.73182e+00 9.10156e+00 5.54373e+00 +142 3.75834e+00 8.95458e+00 5.54375e+00 +143 3.78485e+00 8.80759e+00 5.54376e+00 +144 3.81136e+00 8.66061e+00 5.54377e+00 +145 3.83788e+00 8.51363e+00 5.54377e+00 +146 3.86439e+00 8.36665e+00 5.54377e+00 +147 3.89090e+00 8.21967e+00 5.54375e+00 +148 3.91741e+00 8.07268e+00 5.54373e+00 +149 3.94393e+00 7.92570e+00 5.54370e+00 +150 3.97044e+00 7.77872e+00 5.54367e+00 +151 3.99695e+00 7.63175e+00 5.54363e+00 +152 4.02347e+00 7.48477e+00 5.54359e+00 +153 4.04998e+00 7.33779e+00 5.54356e+00 +154 4.07649e+00 7.19081e+00 5.54353e+00 +155 4.10301e+00 7.04384e+00 5.54350e+00 +156 4.12952e+00 6.89686e+00 5.54348e+00 +157 4.15603e+00 6.74989e+00 5.54346e+00 +158 4.18255e+00 6.60292e+00 5.54344e+00 +159 4.20906e+00 6.45594e+00 5.54343e+00 +160 4.23557e+00 6.30897e+00 5.54342e+00 +161 4.26208e+00 6.16200e+00 5.54341e+00 +162 4.28860e+00 6.01503e+00 5.54341e+00 +163 4.31511e+00 5.86805e+00 5.54341e+00 +164 4.34162e+00 5.72108e+00 5.54341e+00 +165 4.36814e+00 5.57411e+00 5.54341e+00 +166 4.39465e+00 5.42714e+00 5.54342e+00 +167 4.42116e+00 5.28016e+00 5.54323e+00 +168 4.44768e+00 5.13329e+00 5.53372e+00 +169 4.47419e+00 4.98686e+00 5.50998e+00 +170 4.50070e+00 4.84124e+00 5.47202e+00 +171 4.52721e+00 4.69682e+00 5.41984e+00 +172 4.55373e+00 4.55398e+00 5.35343e+00 +173 4.58024e+00 4.41308e+00 5.27279e+00 +174 4.60675e+00 4.27451e+00 5.17793e+00 +175 4.63327e+00 4.13864e+00 5.06884e+00 +176 4.65978e+00 4.00585e+00 4.94553e+00 +177 4.68629e+00 3.87652e+00 4.80799e+00 +178 4.71281e+00 3.75103e+00 4.65623e+00 +179 4.73932e+00 3.62975e+00 4.49024e+00 +180 4.76583e+00 3.51305e+00 4.31003e+00 +181 4.79234e+00 3.40133e+00 4.11559e+00 +182 4.81886e+00 3.29495e+00 3.90693e+00 +183 4.84537e+00 3.19429e+00 3.68404e+00 +184 4.87188e+00 3.09971e+00 3.45062e+00 +185 4.89840e+00 3.01120e+00 3.22791e+00 +186 4.92491e+00 2.92842e+00 3.01927e+00 +187 4.95142e+00 2.85098e+00 2.82473e+00 +188 4.97794e+00 2.77851e+00 2.64426e+00 +189 5.00445e+00 2.71064e+00 2.47788e+00 +190 5.03096e+00 2.64699e+00 2.32559e+00 +191 5.05747e+00 2.58720e+00 2.18738e+00 +192 5.08399e+00 2.53088e+00 2.06325e+00 +193 5.11050e+00 2.47767e+00 1.95321e+00 +194 5.13701e+00 2.42718e+00 1.85725e+00 +195 5.16353e+00 2.37906e+00 1.77537e+00 +196 5.19004e+00 2.33292e+00 1.70758e+00 +197 5.21655e+00 2.28839e+00 1.65387e+00 +198 5.24307e+00 2.24510e+00 1.61425e+00 +199 5.26958e+00 2.20267e+00 1.58871e+00 +200 5.29609e+00 2.16073e+00 1.57725e+00 +201 5.32261e+00 2.11895e+00 1.57397e+00 +202 5.34912e+00 2.07729e+00 1.56868e+00 +203 5.37563e+00 2.03579e+00 1.56122e+00 +204 5.40214e+00 1.99452e+00 1.55158e+00 +205 5.42866e+00 1.95354e+00 1.53975e+00 +206 5.45517e+00 1.91289e+00 1.52575e+00 +207 5.48168e+00 1.87265e+00 1.50957e+00 +208 5.50820e+00 1.83287e+00 1.49121e+00 +209 5.53471e+00 1.79360e+00 1.47067e+00 +210 5.56122e+00 1.75490e+00 1.44795e+00 +211 5.58774e+00 1.71684e+00 1.42305e+00 +212 5.61425e+00 1.67946e+00 1.39597e+00 +213 5.64076e+00 1.64283e+00 1.36671e+00 +214 5.66727e+00 1.60701e+00 1.33528e+00 +215 5.69379e+00 1.57205e+00 1.30166e+00 +216 5.72030e+00 1.53801e+00 1.26587e+00 +217 5.74681e+00 1.50494e+00 1.22792e+00 +218 5.77333e+00 1.47290e+00 1.18886e+00 +219 5.79984e+00 1.44191e+00 1.14919e+00 +220 5.82635e+00 1.41197e+00 1.10891e+00 +221 5.85287e+00 1.38311e+00 1.06803e+00 +222 5.87938e+00 1.35534e+00 1.02654e+00 +223 5.90589e+00 1.32868e+00 9.84442e-01 +224 5.93240e+00 1.30315e+00 9.41738e-01 +225 5.95892e+00 1.27875e+00 8.98427e-01 +226 5.98543e+00 1.25551e+00 8.54508e-01 +227 6.01194e+00 1.23345e+00 8.09983e-01 +228 6.03846e+00 1.21257e+00 7.64850e-01 +229 6.06497e+00 1.19290e+00 7.19111e-01 +230 6.09148e+00 1.17444e+00 6.72764e-01 +231 6.11800e+00 1.15723e+00 6.25811e-01 +232 6.14451e+00 1.14126e+00 5.78250e-01 +233 6.17102e+00 1.12657e+00 5.30082e-01 +234 6.19754e+00 1.11316e+00 4.82247e-01 +235 6.22405e+00 1.10095e+00 4.39648e-01 +236 6.25056e+00 1.08979e+00 4.02990e-01 +237 6.27707e+00 1.07953e+00 3.72273e-01 +238 6.30359e+00 1.07000e+00 3.47498e-01 +239 6.33010e+00 1.06105e+00 3.28665e-01 +240 6.35661e+00 1.05252e+00 3.15774e-01 +241 6.38313e+00 1.04425e+00 3.08824e-01 +242 6.40964e+00 1.03609e+00 3.07815e-01 +243 6.43615e+00 1.02788e+00 3.12748e-01 +244 6.46267e+00 1.01945e+00 3.23623e-01 +245 6.48918e+00 1.01066e+00 3.40440e-01 +246 6.51569e+00 1.00135e+00 3.63198e-01 +247 6.54220e+00 9.91353e-01 3.91897e-01 +248 6.56872e+00 9.80516e-01 4.26538e-01 +249 6.59523e+00 9.68683e-01 4.67121e-01 +250 6.62174e+00 9.55694e-01 5.13646e-01 +251 6.64826e+00 9.41422e-01 5.62501e-01 +252 6.67477e+00 9.25897e-01 6.07985e-01 +253 6.70128e+00 9.09213e-01 6.50027e-01 +254 6.72780e+00 8.91459e-01 6.88626e-01 +255 6.75431e+00 8.72728e-01 7.23783e-01 +256 6.78082e+00 8.53111e-01 7.55497e-01 +257 6.80733e+00 8.32698e-01 7.83768e-01 +258 6.83385e+00 8.11581e-01 8.08597e-01 +259 6.86036e+00 7.89851e-01 8.29984e-01 +260 6.88687e+00 7.67601e-01 8.47928e-01 +261 6.91339e+00 7.44920e-01 8.62429e-01 +262 6.93990e+00 7.21900e-01 8.73488e-01 +263 6.96641e+00 6.98632e-01 8.81104e-01 +264 6.99293e+00 6.75209e-01 8.85278e-01 +265 7.01944e+00 6.51720e-01 8.86010e-01 +266 7.04595e+00 6.28258e-01 8.83299e-01 +267 7.07246e+00 6.04913e-01 8.77168e-01 +268 7.09898e+00 5.81769e-01 8.68269e-01 +269 7.12549e+00 5.58894e-01 8.56896e-01 +270 7.15200e+00 5.36353e-01 8.43051e-01 +271 7.17852e+00 5.14212e-01 8.26732e-01 +272 7.20503e+00 4.92536e-01 8.07941e-01 +273 7.23154e+00 4.71392e-01 7.86676e-01 +274 7.25806e+00 4.50844e-01 7.62938e-01 +275 7.28457e+00 4.30958e-01 7.36728e-01 +276 7.31108e+00 4.11800e-01 7.08044e-01 +277 7.33760e+00 3.93435e-01 6.76887e-01 +278 7.36411e+00 3.75929e-01 6.43257e-01 +279 7.39062e+00 3.59347e-01 6.07154e-01 +280 7.41713e+00 3.43756e-01 5.68578e-01 +281 7.44365e+00 3.29220e-01 5.27528e-01 +282 7.47016e+00 3.15805e-01 4.84006e-01 +283 7.49667e+00 3.03577e-01 4.38011e-01 +284 7.52319e+00 2.92596e-01 3.90579e-01 +285 7.54970e+00 2.82832e-01 3.46637e-01 +286 7.57621e+00 2.74178e-01 3.06826e-01 +287 7.60273e+00 2.66526e-01 2.71144e-01 +288 7.62924e+00 2.59764e-01 2.39591e-01 +289 7.65575e+00 2.53785e-01 2.12169e-01 +290 7.68226e+00 2.48477e-01 1.88875e-01 +291 7.70878e+00 2.43733e-01 1.69712e-01 +292 7.73529e+00 2.39442e-01 1.54678e-01 +293 7.76180e+00 2.35494e-01 1.43773e-01 +294 7.78832e+00 2.31781e-01 1.36998e-01 +295 7.81483e+00 2.28193e-01 1.34353e-01 +296 7.84134e+00 2.24621e-01 1.35837e-01 +297 7.86786e+00 2.20954e-01 1.41451e-01 +298 7.89437e+00 2.17084e-01 1.51194e-01 +299 7.92088e+00 2.12900e-01 1.65067e-01 +300 7.94739e+00 2.08294e-01 1.83070e-01 +301 7.97391e+00 2.03177e-01 2.02650e-01 +302 8.00042e+00 1.97568e-01 2.20114e-01 +303 8.02693e+00 1.91524e-01 2.35430e-01 +304 8.05345e+00 1.85103e-01 2.48600e-01 +305 8.07996e+00 1.78361e-01 2.59623e-01 +306 8.10647e+00 1.71355e-01 2.68499e-01 +307 8.13299e+00 1.64142e-01 2.75228e-01 +308 8.15950e+00 1.56780e-01 2.79809e-01 +309 8.18601e+00 1.49324e-01 2.82244e-01 +310 8.21253e+00 1.41832e-01 2.82532e-01 +311 8.23904e+00 1.34361e-01 2.80673e-01 +312 8.26555e+00 1.26968e-01 2.76667e-01 +313 8.29206e+00 1.19710e-01 2.70514e-01 +314 8.31858e+00 1.12643e-01 2.62214e-01 +315 8.34509e+00 1.05825e-01 2.51767e-01 +316 8.37160e+00 9.93116e-02 2.39174e-01 +317 8.39812e+00 9.31609e-02 2.24523e-01 +318 8.42463e+00 8.74039e-02 2.09904e-01 +319 8.45114e+00 8.20225e-02 1.96191e-01 +320 8.47766e+00 7.69927e-02 1.83383e-01 +321 8.50417e+00 7.22904e-02 1.71481e-01 +322 8.53068e+00 6.78917e-02 1.60484e-01 +323 8.55719e+00 6.37726e-02 1.50393e-01 +324 8.58371e+00 5.99089e-02 1.41208e-01 +325 8.61022e+00 5.62769e-02 1.32928e-01 +326 8.63673e+00 5.28523e-02 1.25554e-01 +327 8.66325e+00 4.96112e-02 1.19085e-01 +328 8.68976e+00 4.65297e-02 1.13522e-01 +329 8.71627e+00 4.35836e-02 1.08865e-01 +330 8.74279e+00 4.07490e-02 1.05113e-01 +331 8.76930e+00 3.80019e-02 1.02266e-01 +332 8.79581e+00 3.53182e-02 1.00326e-01 +333 8.82232e+00 3.26740e-02 9.92905e-02 +334 8.84884e+00 3.00463e-02 9.89592e-02 +335 8.87535e+00 2.74286e-02 9.84553e-02 +336 8.90186e+00 2.48280e-02 9.76771e-02 +337 8.92838e+00 2.22516e-02 9.66246e-02 +338 8.95489e+00 1.97068e-02 9.52978e-02 +339 8.98140e+00 1.72008e-02 9.36967e-02 +340 9.00792e+00 1.47409e-02 9.18212e-02 +341 9.03443e+00 1.23343e-02 8.96715e-02 +342 9.06094e+00 9.98837e-03 8.72474e-02 +343 9.08745e+00 7.71034e-03 8.45490e-02 +344 9.11397e+00 5.50750e-03 8.15763e-02 +345 9.14048e+00 3.38710e-03 7.83293e-02 +346 9.16699e+00 1.35643e-03 7.48079e-02 +347 9.19351e+00 -5.77246e-04 7.10123e-02 +348 9.22002e+00 -2.40665e-03 6.69424e-02 +349 9.24653e+00 -4.12451e-03 6.25981e-02 +350 9.27305e+00 -5.72356e-03 5.79795e-02 +351 9.29956e+00 -7.19788e-03 5.32533e-02 +352 9.32607e+00 -8.54838e-03 4.86402e-02 +353 9.35259e+00 -9.77809e-03 4.41414e-02 +354 9.37910e+00 -1.08900e-02 3.97567e-02 +355 9.40561e+00 -1.18872e-02 3.54862e-02 +356 9.43212e+00 -1.27727e-02 3.13299e-02 +357 9.45864e+00 -1.35495e-02 2.72877e-02 +358 9.48515e+00 -1.42207e-02 2.33598e-02 +359 9.51166e+00 -1.47892e-02 1.95461e-02 +360 9.53818e+00 -1.52582e-02 1.58465e-02 +361 9.56469e+00 -1.56305e-02 1.22612e-02 +362 9.59120e+00 -1.59093e-02 8.79000e-03 +363 9.61772e+00 -1.60976e-02 5.43303e-03 +364 9.64423e+00 -1.61984e-02 2.19025e-03 +365 9.67074e+00 -1.62148e-02 -9.38343e-04 +366 9.69725e+00 -1.61497e-02 -3.95274e-03 +367 9.72377e+00 -1.60062e-02 -6.85619e-03 +368 9.75028e+00 -1.57865e-02 -9.71165e-03 +369 9.77679e+00 -1.54914e-02 -1.25433e-02 +370 9.80331e+00 -1.51216e-02 -1.53513e-02 +371 9.82982e+00 -1.46776e-02 -1.81355e-02 +372 9.85633e+00 -1.41601e-02 -2.08959e-02 +373 9.88285e+00 -1.35698e-02 -2.36326e-02 +374 9.90936e+00 -1.29072e-02 -2.63455e-02 +375 9.93587e+00 -1.21730e-02 -2.90347e-02 +376 9.96238e+00 -1.13678e-02 -3.17001e-02 +377 9.98890e+00 -1.04923e-02 -3.43417e-02 +378 1.00154e+01 -9.54702e-03 -3.69596e-02 +379 1.00419e+01 -8.53267e-03 -3.95538e-02 +380 1.00684e+01 -7.44985e-03 -4.21242e-02 +381 1.00949e+01 -6.29920e-03 -4.46708e-02 +382 1.01215e+01 -5.08134e-03 -4.71937e-02 +383 1.01480e+01 -3.79691e-03 -4.96928e-02 +384 1.01745e+01 -2.44682e-03 -5.21153e-02 +385 1.02010e+01 -1.03610e-03 -5.42507e-02 +386 1.02275e+01 4.27146e-04 -5.60773e-02 +387 1.02540e+01 1.93473e-03 -5.75952e-02 +388 1.02805e+01 3.47846e-03 -5.88043e-02 +389 1.03071e+01 5.05016e-03 -5.97046e-02 +390 1.03336e+01 6.64163e-03 -6.02961e-02 +391 1.03601e+01 8.24469e-03 -6.05788e-02 +392 1.03866e+01 9.85116e-03 -6.05528e-02 +393 1.04131e+01 1.14528e-02 -6.02180e-02 +394 1.04396e+01 1.30416e-02 -5.95744e-02 +395 1.04661e+01 1.46091e-02 -5.86220e-02 +396 1.04926e+01 1.61473e-02 -5.73609e-02 +397 1.05192e+01 1.76480e-02 -5.57909e-02 +398 1.05457e+01 1.91030e-02 -5.39122e-02 +399 1.05722e+01 2.05040e-02 -5.17248e-02 +400 1.05987e+01 2.18430e-02 -4.92285e-02 +401 1.06252e+01 2.31130e-02 -4.65786e-02 +402 1.06517e+01 2.43132e-02 -4.39628e-02 +403 1.06782e+01 2.54445e-02 -4.13815e-02 +404 1.07047e+01 2.65078e-02 -3.88346e-02 +405 1.07313e+01 2.75040e-02 -3.63222e-02 +406 1.07578e+01 2.84341e-02 -3.38442e-02 +407 1.07843e+01 2.92989e-02 -3.14008e-02 +408 1.08108e+01 3.00995e-02 -2.89918e-02 +409 1.08373e+01 3.08366e-02 -2.66173e-02 +410 1.08638e+01 3.15112e-02 -2.42772e-02 +411 1.08903e+01 3.21242e-02 -2.19716e-02 +412 1.09169e+01 3.26766e-02 -1.97005e-02 +413 1.09434e+01 3.31691e-02 -1.74639e-02 +414 1.09699e+01 3.36029e-02 -1.52617e-02 +415 1.09964e+01 3.39787e-02 -1.30940e-02 +416 1.10229e+01 3.42975e-02 -1.09607e-02 +417 1.10494e+01 3.45602e-02 -8.86038e-03 +418 1.10759e+01 3.47674e-02 -6.76636e-03 +419 1.11024e+01 3.49190e-02 -4.66929e-03 +420 1.11290e+01 3.50150e-02 -2.56919e-03 +421 1.11555e+01 3.50552e-02 -4.66037e-04 +422 1.11820e+01 3.50396e-02 1.64016e-03 +423 1.12085e+01 3.49682e-02 3.74939e-03 +424 1.12350e+01 3.48408e-02 5.86167e-03 +425 1.12615e+01 3.46574e-02 7.97700e-03 +426 1.12880e+01 3.44178e-02 1.00954e-02 +427 1.13145e+01 3.41220e-02 1.22168e-02 +428 1.13411e+01 3.37699e-02 1.43412e-02 +429 1.13676e+01 3.33615e-02 1.64687e-02 +430 1.13941e+01 3.28967e-02 1.85993e-02 +431 1.14206e+01 3.23753e-02 2.07328e-02 +432 1.14471e+01 3.17972e-02 2.28695e-02 +433 1.14736e+01 3.11625e-02 2.50091e-02 +434 1.15001e+01 3.04713e-02 2.71135e-02 +435 1.15267e+01 2.97264e-02 2.90428e-02 +436 1.15532e+01 2.89329e-02 3.07843e-02 +437 1.15797e+01 2.80957e-02 3.23380e-02 +438 1.16062e+01 2.72198e-02 3.37039e-02 +439 1.16327e+01 2.63102e-02 3.48820e-02 +440 1.16592e+01 2.53718e-02 3.58722e-02 +441 1.16857e+01 2.44097e-02 3.66746e-02 +442 1.17122e+01 2.34288e-02 3.72892e-02 +443 1.17388e+01 2.24341e-02 3.77159e-02 +444 1.17653e+01 2.14305e-02 3.79549e-02 +445 1.17918e+01 2.04231e-02 3.80060e-02 +446 1.18183e+01 1.94169e-02 3.78693e-02 +447 1.18448e+01 1.84167e-02 3.75448e-02 +448 1.18713e+01 1.74277e-02 3.70325e-02 +449 1.18978e+01 1.64547e-02 3.63323e-02 +450 1.19243e+01 1.55028e-02 3.54443e-02 +451 1.19509e+01 1.45756e-02 3.45225e-02 +452 1.19774e+01 1.36710e-02 3.37366e-02 +453 1.20039e+01 1.27854e-02 3.30865e-02 +454 1.20304e+01 1.19153e-02 3.25724e-02 +455 1.20569e+01 1.10571e-02 3.21942e-02 +456 1.20834e+01 1.02070e-02 3.19519e-02 +457 1.21099e+01 9.36157e-03 3.18455e-02 +458 1.21365e+01 8.51716e-03 3.18750e-02 +459 1.21630e+01 7.67016e-03 3.20405e-02 +460 1.21895e+01 6.81698e-03 3.23418e-02 +461 1.22160e+01 5.95400e-03 3.27791e-02 +462 1.22425e+01 5.07763e-03 3.33523e-02 +463 1.22690e+01 4.18426e-03 3.40614e-02 +464 1.22955e+01 3.27029e-03 3.49065e-02 +465 1.23220e+01 2.33211e-03 3.58874e-02 +466 1.23486e+01 1.36612e-03 3.70043e-02 +467 1.23751e+01 3.68802e-04 3.82258e-02 +468 1.24016e+01 -6.57430e-04 3.91065e-02 +469 1.24281e+01 -1.70057e-03 3.95013e-02 +470 1.24546e+01 -2.74773e-03 3.94102e-02 +471 1.24811e+01 -3.78604e-03 3.88331e-02 +472 1.25076e+01 -4.80261e-03 3.77702e-02 +473 1.25341e+01 -5.78455e-03 3.62213e-02 +474 1.25607e+01 -6.71899e-03 3.41866e-02 +475 1.25872e+01 -7.59304e-03 3.16659e-02 +476 1.26137e+01 -8.39381e-03 2.86593e-02 +477 1.26402e+01 -9.10843e-03 2.51668e-02 +478 1.26667e+01 -9.72401e-03 2.11883e-02 +479 1.26932e+01 -1.02277e-02 1.67240e-02 +480 1.27197e+01 -1.06065e-02 1.17738e-02 +481 1.27463e+01 -1.08477e-02 6.33760e-03 +482 1.27728e+01 -1.09383e-02 4.15532e-04 +483 1.27993e+01 -1.08654e-02 -5.99245e-03 +484 1.28258e+01 -1.06180e-02 -1.25906e-02 +485 1.28523e+01 -1.02053e-02 -1.83901e-02 +486 1.28788e+01 -9.65056e-03 -2.33115e-02 +487 1.29053e+01 -8.97697e-03 -2.73546e-02 +488 1.29318e+01 -8.20782e-03 -3.05195e-02 +489 1.29584e+01 -7.36640e-03 -3.28063e-02 +490 1.29849e+01 -6.47599e-03 -3.42149e-02 +491 1.30114e+01 -5.55988e-03 -3.47452e-02 +492 1.30379e+01 -4.64135e-03 -3.43974e-02 +493 1.30644e+01 -3.74368e-03 -3.31714e-02 +494 1.30909e+01 -2.89016e-03 -3.10672e-02 +495 1.31174e+01 -2.10407e-03 -2.80848e-02 +496 1.31439e+01 -1.40869e-03 -2.42242e-02 +497 1.31705e+01 -8.27316e-04 -1.94855e-02 +498 1.31970e+01 -3.83218e-04 -1.38685e-02 +499 1.32235e+01 -9.96852e-05 -7.37335e-03 +500 1.32500e+01 0.00000e+00 0.00000e+00 + + + +PairWW +N 500 R 2.00000e-02 1.01250e+01 + +1 2.00000e-02 8.94382e+01 2.97884e+01 +2 4.02505e-02 8.88350e+01 2.97884e+01 +3 6.05010e-02 8.82317e+01 2.97884e+01 +4 8.07515e-02 8.76285e+01 2.97884e+01 +5 1.01002e-01 8.70253e+01 2.97884e+01 +6 1.21253e-01 8.64220e+01 2.97884e+01 +7 1.41503e-01 8.58188e+01 2.97884e+01 +8 1.61754e-01 8.52156e+01 2.97884e+01 +9 1.82004e-01 8.46124e+01 2.97884e+01 +10 2.02255e-01 8.40091e+01 2.97884e+01 +11 2.22505e-01 8.34059e+01 2.97884e+01 +12 2.42756e-01 8.28027e+01 2.97884e+01 +13 2.63006e-01 8.21994e+01 2.97884e+01 +14 2.83257e-01 8.15962e+01 2.97884e+01 +15 3.03507e-01 8.09930e+01 2.97884e+01 +16 3.23758e-01 8.03898e+01 2.97884e+01 +17 3.44008e-01 7.97865e+01 2.97884e+01 +18 3.64259e-01 7.91833e+01 2.97884e+01 +19 3.84509e-01 7.85801e+01 2.97884e+01 +20 4.04760e-01 7.79768e+01 2.97884e+01 +21 4.25010e-01 7.73736e+01 2.97884e+01 +22 4.45261e-01 7.67704e+01 2.97884e+01 +23 4.65511e-01 7.61672e+01 2.97884e+01 +24 4.85762e-01 7.55639e+01 2.97884e+01 +25 5.06012e-01 7.49607e+01 2.97884e+01 +26 5.26263e-01 7.43575e+01 2.97884e+01 +27 5.46513e-01 7.37542e+01 2.97884e+01 +28 5.66764e-01 7.31510e+01 2.97884e+01 +29 5.87014e-01 7.25478e+01 2.97884e+01 +30 6.07265e-01 7.19446e+01 2.97884e+01 +31 6.27515e-01 7.13413e+01 2.97884e+01 +32 6.47766e-01 7.07381e+01 2.97884e+01 +33 6.68016e-01 7.01349e+01 2.97884e+01 +34 6.88267e-01 6.95316e+01 2.97884e+01 +35 7.08517e-01 6.89284e+01 2.97884e+01 +36 7.28768e-01 6.83252e+01 2.97884e+01 +37 7.49018e-01 6.77219e+01 2.97884e+01 +38 7.69269e-01 6.71187e+01 2.97884e+01 +39 7.89519e-01 6.65155e+01 2.97884e+01 +40 8.09770e-01 6.59123e+01 2.97884e+01 +41 8.30020e-01 6.53090e+01 2.97884e+01 +42 8.50271e-01 6.47058e+01 2.97884e+01 +43 8.70521e-01 6.41026e+01 2.97884e+01 +44 8.90772e-01 6.34993e+01 2.97884e+01 +45 9.11022e-01 6.28961e+01 2.97884e+01 +46 9.31273e-01 6.22929e+01 2.97884e+01 +47 9.51523e-01 6.16897e+01 2.97884e+01 +48 9.71774e-01 6.10864e+01 2.97884e+01 +49 9.92024e-01 6.04832e+01 2.97884e+01 +50 1.01227e+00 5.98800e+01 2.97884e+01 +51 1.03253e+00 5.92767e+01 2.97884e+01 +52 1.05278e+00 5.86735e+01 2.97884e+01 +53 1.07303e+00 5.80703e+01 2.97884e+01 +54 1.09328e+00 5.74671e+01 2.97884e+01 +55 1.11353e+00 5.68638e+01 2.97884e+01 +56 1.13378e+00 5.62606e+01 2.97884e+01 +57 1.15403e+00 5.56574e+01 2.97884e+01 +58 1.17428e+00 5.50541e+01 2.97884e+01 +59 1.19453e+00 5.44509e+01 2.97884e+01 +60 1.21478e+00 5.38477e+01 2.97884e+01 +61 1.23503e+00 5.32445e+01 2.97884e+01 +62 1.25528e+00 5.26412e+01 2.97884e+01 +63 1.27553e+00 5.20380e+01 2.97884e+01 +64 1.29578e+00 5.14348e+01 2.97884e+01 +65 1.31603e+00 5.08315e+01 2.97884e+01 +66 1.33628e+00 5.02283e+01 2.97884e+01 +67 1.35653e+00 4.96251e+01 2.97884e+01 +68 1.37678e+00 4.90218e+01 2.97884e+01 +69 1.39703e+00 4.84186e+01 2.97884e+01 +70 1.41728e+00 4.78154e+01 2.97884e+01 +71 1.43754e+00 4.72122e+01 2.97884e+01 +72 1.45779e+00 4.66089e+01 2.97884e+01 +73 1.47804e+00 4.60057e+01 2.97884e+01 +74 1.49829e+00 4.54025e+01 2.97884e+01 +75 1.51854e+00 4.47992e+01 2.97884e+01 +76 1.53879e+00 4.41960e+01 2.97884e+01 +77 1.55904e+00 4.35928e+01 2.97884e+01 +78 1.57929e+00 4.29896e+01 2.97884e+01 +79 1.59954e+00 4.23863e+01 2.97884e+01 +80 1.61979e+00 4.17831e+01 2.97884e+01 +81 1.64004e+00 4.11799e+01 2.97884e+01 +82 1.66029e+00 4.05766e+01 2.97884e+01 +83 1.68054e+00 3.99734e+01 2.97884e+01 +84 1.70079e+00 3.93702e+01 2.97884e+01 +85 1.72104e+00 3.87670e+01 2.97884e+01 +86 1.74129e+00 3.81637e+01 2.97884e+01 +87 1.76154e+00 3.75605e+01 2.97884e+01 +88 1.78179e+00 3.69573e+01 2.97884e+01 +89 1.80204e+00 3.63540e+01 2.97884e+01 +90 1.82229e+00 3.57508e+01 2.97884e+01 +91 1.84255e+00 3.51476e+01 2.97884e+01 +92 1.86280e+00 3.45444e+01 2.97884e+01 +93 1.88305e+00 3.39411e+01 2.97884e+01 +94 1.90330e+00 3.33379e+01 2.97884e+01 +95 1.92355e+00 3.27347e+01 2.97884e+01 +96 1.94380e+00 3.21314e+01 2.97884e+01 +97 1.96405e+00 3.15282e+01 2.97884e+01 +98 1.98430e+00 3.09250e+01 2.97884e+01 +99 2.00455e+00 3.03217e+01 2.97884e+01 +100 2.02480e+00 2.97185e+01 2.97884e+01 +101 2.04505e+00 2.91153e+01 2.97884e+01 +102 2.06530e+00 2.85121e+01 2.97884e+01 +103 2.08555e+00 2.79088e+01 2.97884e+01 +104 2.10580e+00 2.73056e+01 2.97884e+01 +105 2.12605e+00 2.67024e+01 2.97884e+01 +106 2.14630e+00 2.60991e+01 2.97884e+01 +107 2.16655e+00 2.54959e+01 2.97884e+01 +108 2.18680e+00 2.48927e+01 2.97884e+01 +109 2.20705e+00 2.42895e+01 2.97884e+01 +110 2.22730e+00 2.36862e+01 2.97884e+01 +111 2.24756e+00 2.30830e+01 2.97884e+01 +112 2.26781e+00 2.24798e+01 2.97884e+01 +113 2.28806e+00 2.18765e+01 2.97884e+01 +114 2.30831e+00 2.12733e+01 2.97884e+01 +115 2.32856e+00 2.06701e+01 2.97884e+01 +116 2.34881e+00 2.00669e+01 2.97884e+01 +117 2.36906e+00 1.94636e+01 2.97884e+01 +118 2.38931e+00 1.88604e+01 2.97884e+01 +119 2.40956e+00 1.82572e+01 2.97884e+01 +120 2.42981e+00 1.76539e+01 2.97884e+01 +121 2.45006e+00 1.70507e+01 2.97884e+01 +122 2.47031e+00 1.64475e+01 2.97884e+01 +123 2.49056e+00 1.58442e+01 2.97884e+01 +124 2.51081e+00 1.52410e+01 2.97884e+01 +125 2.53106e+00 1.46378e+01 2.97884e+01 +126 2.55131e+00 1.40346e+01 2.97884e+01 +127 2.57156e+00 1.34313e+01 2.97884e+01 +128 2.59181e+00 1.28281e+01 2.97884e+01 +129 2.61206e+00 1.22249e+01 2.97884e+01 +130 2.63231e+00 1.16216e+01 2.97884e+01 +131 2.65257e+00 1.10184e+01 2.97884e+01 +132 2.67282e+00 1.04152e+01 2.97884e+01 +133 2.69307e+00 9.81196e+00 2.97884e+01 +134 2.71332e+00 9.20886e+00 2.97593e+01 +135 2.73357e+00 8.60757e+00 2.96037e+01 +136 2.75382e+00 8.01079e+00 2.93137e+01 +137 2.77407e+00 7.42124e+00 2.88892e+01 +138 2.79432e+00 6.84165e+00 2.83304e+01 +139 2.81457e+00 6.27474e+00 2.76371e+01 +140 2.83482e+00 5.72323e+00 2.68094e+01 +141 2.85507e+00 5.18984e+00 2.58474e+01 +142 2.87532e+00 4.67729e+00 2.47509e+01 +143 2.89557e+00 4.18831e+00 2.35199e+01 +144 2.91582e+00 3.72562e+00 2.21546e+01 +145 2.93607e+00 3.29193e+00 2.06549e+01 +146 2.95632e+00 2.88998e+00 1.90207e+01 +147 2.97657e+00 2.52248e+00 1.72522e+01 +148 2.99682e+00 2.19216e+00 1.53492e+01 +149 3.01707e+00 1.90173e+00 1.33118e+01 +150 3.03732e+00 1.65393e+00 1.11400e+01 +151 3.05758e+00 1.45045e+00 8.98475e+00 +152 3.07783e+00 1.28887e+00 7.00237e+00 +153 3.09808e+00 1.16568e+00 5.19285e+00 +154 3.11833e+00 1.07738e+00 3.55619e+00 +155 3.13858e+00 1.02048e+00 2.09239e+00 +156 3.15883e+00 9.91473e-01 8.01457e-01 +157 3.17908e+00 9.86856e-01 -3.16620e-01 +158 3.19933e+00 1.00313e+00 -1.26184e+00 +159 3.21958e+00 1.03679e+00 -2.03419e+00 +160 3.23983e+00 1.08435e+00 -2.63368e+00 +161 3.26008e+00 1.14229e+00 -3.06031e+00 +162 3.28033e+00 1.20713e+00 -3.31409e+00 +163 3.30058e+00 1.27535e+00 -3.39500e+00 +164 3.32083e+00 1.34346e+00 -3.30305e+00 +165 3.34108e+00 1.40796e+00 -3.03823e+00 +166 3.36133e+00 1.46535e+00 -2.60056e+00 +167 3.38158e+00 1.51215e+00 -2.00188e+00 +168 3.40183e+00 1.54654e+00 -1.40352e+00 +169 3.42208e+00 1.56934e+00 -8.56575e-01 +170 3.44233e+00 1.58158e+00 -3.61034e-01 +171 3.46259e+00 1.58431e+00 8.31010e-02 +172 3.48284e+00 1.57856e+00 4.75829e-01 +173 3.50309e+00 1.56538e+00 8.17150e-01 +174 3.52334e+00 1.54581e+00 1.10706e+00 +175 3.54359e+00 1.52089e+00 1.34557e+00 +176 3.56384e+00 1.49166e+00 1.53267e+00 +177 3.58409e+00 1.45916e+00 1.66837e+00 +178 3.60434e+00 1.42444e+00 1.75266e+00 +179 3.62459e+00 1.38853e+00 1.78554e+00 +180 3.64484e+00 1.35247e+00 1.76701e+00 +181 3.66509e+00 1.31731e+00 1.69708e+00 +182 3.68534e+00 1.28408e+00 1.57574e+00 +183 3.70559e+00 1.25384e+00 1.40299e+00 +184 3.72584e+00 1.22753e+00 1.19517e+00 +185 3.74609e+00 1.20528e+00 1.00677e+00 +186 3.76634e+00 1.18660e+00 8.42197e-01 +187 3.78659e+00 1.17101e+00 7.01434e-01 +188 3.80684e+00 1.15803e+00 5.84485e-01 +189 3.82709e+00 1.14718e+00 4.91351e-01 +190 3.84734e+00 1.13797e+00 4.22030e-01 +191 3.86760e+00 1.12992e+00 3.76524e-01 +192 3.88785e+00 1.12256e+00 3.54831e-01 +193 3.90810e+00 1.11539e+00 3.56953e-01 +194 3.92835e+00 1.10794e+00 3.82889e-01 +195 3.94860e+00 1.09972e+00 4.32638e-01 +196 3.96885e+00 1.09026e+00 5.06202e-01 +197 3.98910e+00 1.07906e+00 6.03580e-01 +198 4.00935e+00 1.06565e+00 7.24772e-01 +199 4.02960e+00 1.04955e+00 8.69778e-01 +200 4.04985e+00 1.03026e+00 1.03860e+00 +201 4.07010e+00 1.00745e+00 1.21153e+00 +202 4.09035e+00 9.81304e-01 1.36829e+00 +203 4.11060e+00 9.52145e-01 1.50886e+00 +204 4.13085e+00 9.20303e-01 1.63325e+00 +205 4.15110e+00 8.86105e-01 1.74147e+00 +206 4.17135e+00 8.49881e-01 1.83350e+00 +207 4.19160e+00 8.11956e-01 1.90936e+00 +208 4.21185e+00 7.72659e-01 1.96903e+00 +209 4.23210e+00 7.32317e-01 2.01253e+00 +210 4.25235e+00 6.91259e-01 2.03984e+00 +211 4.27261e+00 6.49811e-01 2.05098e+00 +212 4.29286e+00 6.08301e-01 2.04593e+00 +213 4.31311e+00 5.67058e-01 2.02471e+00 +214 4.33336e+00 5.26408e-01 1.98730e+00 +215 4.35361e+00 4.86679e-01 1.93372e+00 +216 4.37386e+00 4.48200e-01 1.86395e+00 +217 4.39411e+00 4.11294e-01 1.77895e+00 +218 4.41436e+00 3.76159e-01 1.69136e+00 +219 4.43461e+00 3.42783e-01 1.60520e+00 +220 4.45486e+00 3.11137e-01 1.52046e+00 +221 4.47511e+00 2.81193e-01 1.43714e+00 +222 4.49536e+00 2.52922e-01 1.35524e+00 +223 4.51561e+00 2.26295e-01 1.27476e+00 +224 4.53586e+00 2.01283e-01 1.19571e+00 +225 4.55611e+00 1.77858e-01 1.11807e+00 +226 4.57636e+00 1.55991e-01 1.04185e+00 +227 4.59661e+00 1.35652e-01 9.67052e-01 +228 4.61686e+00 1.16814e-01 8.93674e-01 +229 4.63711e+00 9.94480e-02 8.21717e-01 +230 4.65736e+00 8.35245e-02 7.51181e-01 +231 4.67762e+00 6.90149e-02 6.82064e-01 +232 4.69787e+00 5.58906e-02 6.14369e-01 +233 4.71812e+00 4.41228e-02 5.48093e-01 +234 4.73837e+00 3.36825e-02 4.83277e-01 +235 4.75862e+00 2.45388e-02 4.20047e-01 +236 4.77887e+00 1.66594e-02 3.58416e-01 +237 4.79912e+00 1.00118e-02 2.98383e-01 +238 4.81937e+00 4.56379e-03 2.39947e-01 +239 4.83962e+00 2.82945e-04 1.83109e-01 +240 4.85987e+00 -2.86308e-03 1.27868e-01 +241 4.88012e+00 -4.90663e-03 7.42254e-02 +242 4.90037e+00 -5.88007e-03 2.21805e-02 +243 4.92062e+00 -5.81574e-03 -2.82668e-02 +244 4.94087e+00 -4.74602e-03 -7.71163e-02 +245 4.96112e+00 -2.70324e-03 -1.24368e-01 +246 4.98137e+00 2.80232e-04 -1.70022e-01 +247 5.00162e+00 4.17205e-03 -2.14079e-01 +248 5.02187e+00 8.93985e-03 -2.56537e-01 +249 5.04212e+00 1.45513e-02 -2.97398e-01 +250 5.06237e+00 2.09740e-02 -3.36661e-01 +251 5.08263e+00 2.81652e-02 -3.72774e-01 +252 5.10288e+00 3.60397e-02 -4.04144e-01 +253 5.12313e+00 4.45014e-02 -4.30773e-01 +254 5.14338e+00 5.34544e-02 -4.52658e-01 +255 5.16363e+00 6.28025e-02 -4.69802e-01 +256 5.18388e+00 7.24498e-02 -4.82203e-01 +257 5.20413e+00 8.23003e-02 -4.89862e-01 +258 5.22438e+00 9.22578e-02 -4.92779e-01 +259 5.24463e+00 1.02226e-01 -4.90954e-01 +260 5.26488e+00 1.12110e-01 -4.84386e-01 +261 5.28513e+00 1.21812e-01 -4.73076e-01 +262 5.30538e+00 1.31238e-01 -4.57024e-01 +263 5.32563e+00 1.40290e-01 -4.36230e-01 +264 5.34588e+00 1.48874e-01 -4.10693e-01 +265 5.36613e+00 1.56892e-01 -3.80414e-01 +266 5.38638e+00 1.64249e-01 -3.45393e-01 +267 5.40663e+00 1.70849e-01 -3.06021e-01 +268 5.42688e+00 1.76653e-01 -2.67562e-01 +269 5.44713e+00 1.81703e-01 -2.31667e-01 +270 5.46738e+00 1.86053e-01 -1.98335e-01 +271 5.48764e+00 1.89753e-01 -1.67568e-01 +272 5.50789e+00 1.92857e-01 -1.39366e-01 +273 5.52814e+00 1.95415e-01 -1.13727e-01 +274 5.54839e+00 1.97480e-01 -9.06523e-02 +275 5.56864e+00 1.99104e-01 -7.01418e-02 +276 5.58889e+00 2.00338e-01 -5.21954e-02 +277 5.60914e+00 2.01235e-01 -3.68132e-02 +278 5.62939e+00 2.01847e-01 -2.39950e-02 +279 5.64964e+00 2.02224e-01 -1.37410e-02 +280 5.66989e+00 2.02420e-01 -6.05108e-03 +281 5.69014e+00 2.02487e-01 -9.25278e-04 +282 5.71039e+00 2.02475e-01 1.63640e-03 +283 5.73064e+00 2.02438e-01 1.63397e-03 +284 5.75089e+00 2.02423e-01 -2.80048e-04 +285 5.77114e+00 2.02447e-01 -1.94516e-03 +286 5.79139e+00 2.02499e-01 -3.19019e-03 +287 5.81164e+00 2.02573e-01 -4.01515e-03 +288 5.83189e+00 2.02659e-01 -4.42003e-03 +289 5.85214e+00 2.02749e-01 -4.40484e-03 +290 5.87239e+00 2.02835e-01 -3.96958e-03 +291 5.89265e+00 2.02907e-01 -3.11424e-03 +292 5.91290e+00 2.02958e-01 -1.83883e-03 +293 5.93315e+00 2.02979e-01 -1.43346e-04 +294 5.95340e+00 2.02961e-01 1.97221e-03 +295 5.97365e+00 2.02896e-01 4.50785e-03 +296 5.99390e+00 2.02776e-01 7.46355e-03 +297 6.01415e+00 2.02591e-01 1.08393e-02 +298 6.03440e+00 2.02334e-01 1.46352e-02 +299 6.05465e+00 2.01995e-01 1.88511e-02 +300 6.07490e+00 2.01567e-01 2.34871e-02 +301 6.09515e+00 2.01043e-01 2.83464e-02 +302 6.11540e+00 2.00419e-01 3.32284e-02 +303 6.13565e+00 1.99697e-01 3.81329e-02 +304 6.15590e+00 1.98875e-01 4.30601e-02 +305 6.17615e+00 1.97953e-01 4.80098e-02 +306 6.19640e+00 1.96930e-01 5.29822e-02 +307 6.21665e+00 1.95807e-01 5.79772e-02 +308 6.23690e+00 1.94582e-01 6.29948e-02 +309 6.25715e+00 1.93255e-01 6.80351e-02 +310 6.27740e+00 1.91826e-01 7.30979e-02 +311 6.29766e+00 1.90294e-01 7.81834e-02 +312 6.31791e+00 1.88659e-01 8.32915e-02 +313 6.33816e+00 1.86921e-01 8.84221e-02 +314 6.35841e+00 1.85078e-01 9.35755e-02 +315 6.37866e+00 1.83131e-01 9.87514e-02 +316 6.39891e+00 1.81078e-01 1.03950e-01 +317 6.41916e+00 1.78921e-01 1.09153e-01 +318 6.43941e+00 1.76659e-01 1.14117e-01 +319 6.45966e+00 1.74301e-01 1.18766e-01 +320 6.47991e+00 1.71851e-01 1.23099e-01 +321 6.50016e+00 1.69317e-01 1.27118e-01 +322 6.52041e+00 1.66705e-01 1.30822e-01 +323 6.54066e+00 1.64021e-01 1.34210e-01 +324 6.56091e+00 1.61272e-01 1.37284e-01 +325 6.58116e+00 1.58463e-01 1.40042e-01 +326 6.60141e+00 1.55602e-01 1.42485e-01 +327 6.62166e+00 1.52694e-01 1.44614e-01 +328 6.64191e+00 1.49747e-01 1.46427e-01 +329 6.66216e+00 1.46766e-01 1.47925e-01 +330 6.68241e+00 1.43758e-01 1.49108e-01 +331 6.70267e+00 1.40729e-01 1.49976e-01 +332 6.72292e+00 1.37686e-01 1.50529e-01 +333 6.74317e+00 1.34635e-01 1.50767e-01 +334 6.76342e+00 1.31581e-01 1.50789e-01 +335 6.78367e+00 1.28527e-01 1.50921e-01 +336 6.80392e+00 1.25468e-01 1.51190e-01 +337 6.82417e+00 1.22402e-01 1.51595e-01 +338 6.84442e+00 1.19327e-01 1.52136e-01 +339 6.86467e+00 1.16240e-01 1.52814e-01 +340 6.88492e+00 1.13137e-01 1.53628e-01 +341 6.90517e+00 1.10017e-01 1.54578e-01 +342 6.92542e+00 1.06876e-01 1.55664e-01 +343 6.94567e+00 1.03711e-01 1.56887e-01 +344 6.96592e+00 1.00521e-01 1.58245e-01 +345 6.98617e+00 9.73014e-02 1.59740e-01 +346 7.00642e+00 9.40502e-02 1.61372e-01 +347 7.02667e+00 9.07647e-02 1.63139e-01 +348 7.04692e+00 8.74420e-02 1.65043e-01 +349 7.06717e+00 8.40794e-02 1.67083e-01 +350 7.08742e+00 8.06741e-02 1.69260e-01 +351 7.10768e+00 7.72249e-02 1.71336e-01 +352 7.12793e+00 7.37370e-02 1.73074e-01 +353 7.14818e+00 7.02175e-02 1.74472e-01 +354 7.16843e+00 6.66730e-02 1.75531e-01 +355 7.18868e+00 6.31106e-02 1.76250e-01 +356 7.20893e+00 5.95370e-02 1.76630e-01 +357 7.22918e+00 5.59592e-02 1.76671e-01 +358 7.24943e+00 5.23840e-02 1.76373e-01 +359 7.26968e+00 4.88182e-02 1.75735e-01 +360 7.28993e+00 4.52688e-02 1.74758e-01 +361 7.31018e+00 4.17426e-02 1.73442e-01 +362 7.33043e+00 3.82465e-02 1.71786e-01 +363 7.35068e+00 3.47874e-02 1.69791e-01 +364 7.37093e+00 3.13721e-02 1.67457e-01 +365 7.39118e+00 2.80075e-02 1.64784e-01 +366 7.41143e+00 2.47005e-02 1.61771e-01 +367 7.43168e+00 2.14578e-02 1.58440e-01 +368 7.45193e+00 1.82836e-02 1.55062e-01 +369 7.47218e+00 1.51774e-02 1.51721e-01 +370 7.49243e+00 1.21385e-02 1.48419e-01 +371 7.51269e+00 9.16606e-03 1.45155e-01 +372 7.53294e+00 6.25935e-03 1.41928e-01 +373 7.55319e+00 3.41758e-03 1.38740e-01 +374 7.57344e+00 6.40000e-04 1.35589e-01 +375 7.59369e+00 -2.07416e-03 1.32476e-01 +376 7.61394e+00 -4.72568e-03 1.29401e-01 +377 7.63419e+00 -7.31531e-03 1.26365e-01 +378 7.65444e+00 -9.84383e-03 1.23366e-01 +379 7.67469e+00 -1.23120e-02 1.20405e-01 +380 7.69494e+00 -1.47206e-02 1.17482e-01 +381 7.71519e+00 -1.70704e-02 1.14597e-01 +382 7.73544e+00 -1.93621e-02 1.11750e-01 +383 7.75569e+00 -2.15966e-02 1.08940e-01 +384 7.77594e+00 -2.37743e-02 1.06100e-01 +385 7.79619e+00 -2.58919e-02 1.03001e-01 +386 7.81644e+00 -2.79441e-02 9.96253e-02 +387 7.83669e+00 -2.99250e-02 9.59734e-02 +388 7.85694e+00 -3.18292e-02 9.20451e-02 +389 7.87719e+00 -3.36511e-02 8.78405e-02 +390 7.89744e+00 -3.53850e-02 8.33595e-02 +391 7.91770e+00 -3.70253e-02 7.86021e-02 +392 7.93795e+00 -3.85666e-02 7.35683e-02 +393 7.95820e+00 -4.00031e-02 6.82582e-02 +394 7.97845e+00 -4.13292e-02 6.26717e-02 +395 7.99870e+00 -4.25395e-02 5.68088e-02 +396 8.01895e+00 -4.36282e-02 5.06695e-02 +397 8.03920e+00 -4.45898e-02 4.42538e-02 +398 8.05945e+00 -4.54186e-02 3.75618e-02 +399 8.07970e+00 -4.61092e-02 3.05934e-02 +400 8.09995e+00 -4.66558e-02 2.33486e-02 +401 8.12020e+00 -4.70552e-02 1.61643e-02 +402 8.14045e+00 -4.73132e-02 9.38066e-03 +403 8.16070e+00 -4.74379e-02 2.99764e-03 +404 8.18095e+00 -4.74373e-02 -2.98473e-03 +405 8.20120e+00 -4.73197e-02 -8.56645e-03 +406 8.22145e+00 -4.70931e-02 -1.37475e-02 +407 8.24170e+00 -4.67656e-02 -1.85279e-02 +408 8.26195e+00 -4.63454e-02 -2.29077e-02 +409 8.28220e+00 -4.58405e-02 -2.68868e-02 +410 8.30245e+00 -4.52591e-02 -3.04653e-02 +411 8.32271e+00 -4.46093e-02 -3.36431e-02 +412 8.34296e+00 -4.38993e-02 -3.64203e-02 +413 8.36321e+00 -4.31370e-02 -3.87968e-02 +414 8.38346e+00 -4.23307e-02 -4.07727e-02 +415 8.40371e+00 -4.14884e-02 -4.23479e-02 +416 8.42396e+00 -4.06182e-02 -4.35225e-02 +417 8.44421e+00 -3.97283e-02 -4.43172e-02 +418 8.46446e+00 -3.88239e-02 -4.50049e-02 +419 8.48471e+00 -3.79057e-02 -4.56703e-02 +420 8.50496e+00 -3.69743e-02 -4.63133e-02 +421 8.52521e+00 -3.60301e-02 -4.69339e-02 +422 8.54546e+00 -3.50736e-02 -4.75322e-02 +423 8.56571e+00 -3.41052e-02 -4.81081e-02 +424 8.58596e+00 -3.31253e-02 -4.86616e-02 +425 8.60621e+00 -3.21345e-02 -4.91928e-02 +426 8.62646e+00 -3.11331e-02 -4.97016e-02 +427 8.64671e+00 -3.01217e-02 -5.01880e-02 +428 8.66696e+00 -2.91006e-02 -5.06520e-02 +429 8.68721e+00 -2.80704e-02 -5.10937e-02 +430 8.70746e+00 -2.70314e-02 -5.15130e-02 +431 8.72772e+00 -2.59842e-02 -5.19100e-02 +432 8.74797e+00 -2.49292e-02 -5.22846e-02 +433 8.76822e+00 -2.38668e-02 -5.26368e-02 +434 8.78847e+00 -2.27976e-02 -5.29357e-02 +435 8.80872e+00 -2.17239e-02 -5.30803e-02 +436 8.82897e+00 -2.06489e-02 -5.30626e-02 +437 8.84922e+00 -1.95759e-02 -5.28827e-02 +438 8.86947e+00 -1.85082e-02 -5.25406e-02 +439 8.88972e+00 -1.74490e-02 -5.20363e-02 +440 8.90997e+00 -1.64018e-02 -5.13697e-02 +441 8.93022e+00 -1.53696e-02 -5.05410e-02 +442 8.95047e+00 -1.43559e-02 -4.95500e-02 +443 8.97072e+00 -1.33639e-02 -4.83968e-02 +444 8.99097e+00 -1.23969e-02 -4.70814e-02 +445 9.01122e+00 -1.14581e-02 -4.56037e-02 +446 9.03147e+00 -1.05510e-02 -4.39639e-02 +447 9.05172e+00 -9.67866e-03 -4.21618e-02 +448 9.07197e+00 -8.84448e-03 -4.01975e-02 +449 9.09222e+00 -8.05171e-03 -3.80710e-02 +450 9.11247e+00 -7.30366e-03 -3.57822e-02 +451 9.13273e+00 -6.60234e-03 -3.35176e-02 +452 9.15298e+00 -5.94474e-03 -3.14642e-02 +453 9.17323e+00 -5.32658e-03 -2.96221e-02 +454 9.19348e+00 -4.74359e-03 -2.79913e-02 +455 9.21373e+00 -4.19148e-03 -2.65718e-02 +456 9.23398e+00 -3.66597e-03 -2.53636e-02 +457 9.25423e+00 -3.16280e-03 -2.43666e-02 +458 9.27448e+00 -2.67767e-03 -2.35810e-02 +459 9.29473e+00 -2.20632e-03 -2.30066e-02 +460 9.31498e+00 -1.74446e-03 -2.26435e-02 +461 9.33523e+00 -1.28781e-03 -2.24918e-02 +462 9.35548e+00 -8.32093e-04 -2.25513e-02 +463 9.37573e+00 -3.73033e-04 -2.28220e-02 +464 9.39598e+00 9.36493e-05 -2.33041e-02 +465 9.41623e+00 5.72233e-04 -2.39975e-02 +466 9.43648e+00 1.06700e-03 -2.49021e-02 +467 9.45673e+00 1.58215e-03 -2.59847e-02 +468 9.47698e+00 2.11737e-03 -2.68103e-02 +469 9.49723e+00 2.66535e-03 -2.72445e-02 +470 9.51748e+00 3.21816e-03 -2.72874e-02 +471 9.53774e+00 3.76787e-03 -2.69390e-02 +472 9.55799e+00 4.30657e-03 -2.61993e-02 +473 9.57824e+00 4.82633e-03 -2.50682e-02 +474 9.59849e+00 5.31922e-03 -2.35458e-02 +475 9.61874e+00 5.77732e-03 -2.16321e-02 +476 9.63899e+00 6.19270e-03 -1.93271e-02 +477 9.65924e+00 6.55744e-03 -1.66308e-02 +478 9.67949e+00 6.86362e-03 -1.35431e-02 +479 9.69974e+00 7.10331e-03 -1.00641e-02 +480 9.71999e+00 7.26859e-03 -6.19383e-03 +481 9.74024e+00 7.35153e-03 -1.93221e-03 +482 9.76049e+00 7.34420e-03 2.72074e-03 +483 9.78074e+00 7.23869e-03 7.76500e-03 +484 9.80099e+00 7.02817e-03 1.29555e-02 +485 9.82124e+00 6.71866e-03 1.74943e-02 +486 9.84149e+00 6.32445e-03 2.13200e-02 +487 9.86174e+00 5.85999e-03 2.44325e-02 +488 9.88199e+00 5.33972e-03 2.68319e-02 +489 9.90224e+00 4.77809e-03 2.85182e-02 +490 9.92249e+00 4.18952e-03 2.94913e-02 +491 9.94275e+00 3.58847e-03 2.97513e-02 +492 9.96300e+00 2.98938e-03 2.92982e-02 +493 9.98325e+00 2.40668e-03 2.81319e-02 +494 1.00035e+01 1.85482e-03 2.62525e-02 +495 1.00237e+01 1.34824e-03 2.36599e-02 +496 1.00440e+01 9.01386e-04 2.03542e-02 +497 1.00642e+01 5.28692e-04 1.63354e-02 +498 1.00845e+01 2.44602e-04 1.16034e-02 +499 1.01047e+01 6.35574e-05 6.15826e-03 +500 1.01250e+01 0.00000e+00 0.00000e+00 + + + +PairBW +N 500 R 2.00000e-02 7.00000e+00 + +1 2.00000e-02 7.51383e+01 2.97885e+01 +2 3.39880e-02 7.47216e+01 2.97885e+01 +3 4.79760e-02 7.43049e+01 2.97885e+01 +4 6.19639e-02 7.38882e+01 2.97885e+01 +5 7.59519e-02 7.34715e+01 2.97885e+01 +6 8.99399e-02 7.30549e+01 2.97885e+01 +7 1.03928e-01 7.26382e+01 2.97885e+01 +8 1.17916e-01 7.22215e+01 2.97885e+01 +9 1.31904e-01 7.18048e+01 2.97885e+01 +10 1.45892e-01 7.13881e+01 2.97885e+01 +11 1.59880e-01 7.09714e+01 2.97885e+01 +12 1.73868e-01 7.05548e+01 2.97885e+01 +13 1.87856e-01 7.01381e+01 2.97885e+01 +14 2.01844e-01 6.97214e+01 2.97885e+01 +15 2.15832e-01 6.93047e+01 2.97885e+01 +16 2.29820e-01 6.88880e+01 2.97885e+01 +17 2.43808e-01 6.84714e+01 2.97885e+01 +18 2.57796e-01 6.80547e+01 2.97885e+01 +19 2.71784e-01 6.76380e+01 2.97885e+01 +20 2.85772e-01 6.72213e+01 2.97885e+01 +21 2.99760e-01 6.68046e+01 2.97885e+01 +22 3.13747e-01 6.63879e+01 2.97885e+01 +23 3.27735e-01 6.59713e+01 2.97885e+01 +24 3.41723e-01 6.55546e+01 2.97885e+01 +25 3.55711e-01 6.51379e+01 2.97885e+01 +26 3.69699e-01 6.47212e+01 2.97885e+01 +27 3.83687e-01 6.43045e+01 2.97885e+01 +28 3.97675e-01 6.38879e+01 2.97885e+01 +29 4.11663e-01 6.34712e+01 2.97885e+01 +30 4.25651e-01 6.30545e+01 2.97885e+01 +31 4.39639e-01 6.26378e+01 2.97885e+01 +32 4.53627e-01 6.22211e+01 2.97885e+01 +33 4.67615e-01 6.18045e+01 2.97885e+01 +34 4.81603e-01 6.13878e+01 2.97885e+01 +35 4.95591e-01 6.09711e+01 2.97885e+01 +36 5.09579e-01 6.05544e+01 2.97885e+01 +37 5.23567e-01 6.01377e+01 2.97885e+01 +38 5.37555e-01 5.97210e+01 2.97885e+01 +39 5.51543e-01 5.93044e+01 2.97885e+01 +40 5.65531e-01 5.88877e+01 2.97885e+01 +41 5.79519e-01 5.84710e+01 2.97885e+01 +42 5.93507e-01 5.80543e+01 2.97885e+01 +43 6.07495e-01 5.76376e+01 2.97885e+01 +44 6.21483e-01 5.72210e+01 2.97885e+01 +45 6.35471e-01 5.68043e+01 2.97885e+01 +46 6.49459e-01 5.63876e+01 2.97885e+01 +47 6.63447e-01 5.59709e+01 2.97885e+01 +48 6.77435e-01 5.55542e+01 2.97885e+01 +49 6.91423e-01 5.51375e+01 2.97885e+01 +50 7.05411e-01 5.47209e+01 2.97885e+01 +51 7.19399e-01 5.43042e+01 2.97885e+01 +52 7.33387e-01 5.38875e+01 2.97885e+01 +53 7.47375e-01 5.34708e+01 2.97885e+01 +54 7.61363e-01 5.30541e+01 2.97885e+01 +55 7.75351e-01 5.26375e+01 2.97885e+01 +56 7.89339e-01 5.22208e+01 2.97885e+01 +57 8.03327e-01 5.18041e+01 2.97885e+01 +58 8.17315e-01 5.13874e+01 2.97885e+01 +59 8.31303e-01 5.09707e+01 2.97885e+01 +60 8.45291e-01 5.05540e+01 2.97885e+01 +61 8.59279e-01 5.01374e+01 2.97885e+01 +62 8.73267e-01 4.97207e+01 2.97885e+01 +63 8.87255e-01 4.93040e+01 2.97885e+01 +64 9.01242e-01 4.88873e+01 2.97885e+01 +65 9.15230e-01 4.84706e+01 2.97885e+01 +66 9.29218e-01 4.80540e+01 2.97885e+01 +67 9.43206e-01 4.76373e+01 2.97885e+01 +68 9.57194e-01 4.72206e+01 2.97885e+01 +69 9.71182e-01 4.68039e+01 2.97885e+01 +70 9.85170e-01 4.63872e+01 2.97885e+01 +71 9.99158e-01 4.59706e+01 2.97885e+01 +72 1.01315e+00 4.55539e+01 2.97885e+01 +73 1.02713e+00 4.51372e+01 2.97885e+01 +74 1.04112e+00 4.47205e+01 2.97885e+01 +75 1.05511e+00 4.43038e+01 2.97885e+01 +76 1.06910e+00 4.38871e+01 2.97885e+01 +77 1.08309e+00 4.34705e+01 2.97885e+01 +78 1.09707e+00 4.30538e+01 2.97885e+01 +79 1.11106e+00 4.26371e+01 2.97885e+01 +80 1.12505e+00 4.22204e+01 2.97885e+01 +81 1.13904e+00 4.18037e+01 2.97885e+01 +82 1.15303e+00 4.13871e+01 2.97885e+01 +83 1.16701e+00 4.09704e+01 2.97885e+01 +84 1.18100e+00 4.05537e+01 2.97885e+01 +85 1.19499e+00 4.01370e+01 2.97885e+01 +86 1.20898e+00 3.97203e+01 2.97885e+01 +87 1.22297e+00 3.93036e+01 2.97885e+01 +88 1.23695e+00 3.88870e+01 2.97885e+01 +89 1.25094e+00 3.84703e+01 2.97885e+01 +90 1.26493e+00 3.80536e+01 2.97885e+01 +91 1.27892e+00 3.76369e+01 2.97885e+01 +92 1.29291e+00 3.72202e+01 2.97885e+01 +93 1.30689e+00 3.68036e+01 2.97885e+01 +94 1.32088e+00 3.63869e+01 2.97885e+01 +95 1.33487e+00 3.59702e+01 2.97885e+01 +96 1.34886e+00 3.55535e+01 2.97885e+01 +97 1.36285e+00 3.51368e+01 2.97885e+01 +98 1.37683e+00 3.47202e+01 2.97885e+01 +99 1.39082e+00 3.43035e+01 2.97885e+01 +100 1.40481e+00 3.38868e+01 2.97885e+01 +101 1.41880e+00 3.34701e+01 2.97885e+01 +102 1.43279e+00 3.30534e+01 2.97885e+01 +103 1.44677e+00 3.26367e+01 2.97885e+01 +104 1.46076e+00 3.22201e+01 2.97885e+01 +105 1.47475e+00 3.18034e+01 2.97885e+01 +106 1.48874e+00 3.13867e+01 2.97885e+01 +107 1.50273e+00 3.09700e+01 2.97885e+01 +108 1.51671e+00 3.05533e+01 2.97885e+01 +109 1.53070e+00 3.01367e+01 2.97885e+01 +110 1.54469e+00 2.97200e+01 2.97885e+01 +111 1.55868e+00 2.93033e+01 2.97885e+01 +112 1.57267e+00 2.88866e+01 2.97885e+01 +113 1.58665e+00 2.84699e+01 2.97885e+01 +114 1.60064e+00 2.80532e+01 2.97885e+01 +115 1.61463e+00 2.76366e+01 2.97885e+01 +116 1.62862e+00 2.72199e+01 2.97885e+01 +117 1.64261e+00 2.68032e+01 2.97885e+01 +118 1.65659e+00 2.63865e+01 2.97885e+01 +119 1.67058e+00 2.59698e+01 2.97885e+01 +120 1.68457e+00 2.55532e+01 2.97885e+01 +121 1.69856e+00 2.51365e+01 2.97885e+01 +122 1.71255e+00 2.47198e+01 2.97885e+01 +123 1.72653e+00 2.43031e+01 2.97885e+01 +124 1.74052e+00 2.38864e+01 2.97885e+01 +125 1.75451e+00 2.34698e+01 2.97885e+01 +126 1.76850e+00 2.30531e+01 2.97885e+01 +127 1.78248e+00 2.26364e+01 2.97885e+01 +128 1.79647e+00 2.22197e+01 2.97885e+01 +129 1.81046e+00 2.18030e+01 2.97885e+01 +130 1.82445e+00 2.13863e+01 2.97885e+01 +131 1.83844e+00 2.09697e+01 2.97885e+01 +132 1.85242e+00 2.05530e+01 2.97885e+01 +133 1.86641e+00 2.01363e+01 2.97885e+01 +134 1.88040e+00 1.97196e+01 2.97885e+01 +135 1.89439e+00 1.93029e+01 2.97885e+01 +136 1.90838e+00 1.88863e+01 2.97885e+01 +137 1.92236e+00 1.84696e+01 2.97885e+01 +138 1.93635e+00 1.80529e+01 2.97885e+01 +139 1.95034e+00 1.76362e+01 2.97885e+01 +140 1.96433e+00 1.72195e+01 2.97885e+01 +141 1.97832e+00 1.68028e+01 2.97885e+01 +142 1.99230e+00 1.63862e+01 2.97885e+01 +143 2.00629e+00 1.59695e+01 2.97885e+01 +144 2.02028e+00 1.55528e+01 2.97885e+01 +145 2.03427e+00 1.51361e+01 2.97885e+01 +146 2.04826e+00 1.47194e+01 2.97885e+01 +147 2.06224e+00 1.43028e+01 2.97885e+01 +148 2.07623e+00 1.38861e+01 2.97885e+01 +149 2.09022e+00 1.34694e+01 2.97885e+01 +150 2.10421e+00 1.30527e+01 2.97885e+01 +151 2.11820e+00 1.26360e+01 2.97885e+01 +152 2.13218e+00 1.22193e+01 2.97885e+01 +153 2.14617e+00 1.18027e+01 2.97885e+01 +154 2.16016e+00 1.13860e+01 2.97885e+01 +155 2.17415e+00 1.09693e+01 2.97884e+01 +156 2.18814e+00 1.05526e+01 2.97883e+01 +157 2.20212e+00 1.01360e+01 2.97882e+01 +158 2.21611e+00 9.71928e+00 2.97881e+01 +159 2.23010e+00 9.30260e+00 2.97881e+01 +160 2.24409e+00 8.88593e+00 2.97880e+01 +161 2.25808e+00 8.46925e+00 2.97880e+01 +162 2.27206e+00 8.05258e+00 2.97880e+01 +163 2.28605e+00 7.63590e+00 2.97880e+01 +164 2.30004e+00 7.21923e+00 2.97879e+01 +165 2.31403e+00 6.80256e+00 2.97879e+01 +166 2.32802e+00 6.38588e+00 2.97879e+01 +167 2.34200e+00 5.96927e+00 2.97676e+01 +168 2.35599e+00 5.55359e+00 2.96489e+01 +169 2.36998e+00 5.14031e+00 2.94242e+01 +170 2.38397e+00 4.73091e+00 2.90935e+01 +171 2.39796e+00 4.32688e+00 2.86569e+01 +172 2.41194e+00 3.92970e+00 2.81142e+01 +173 2.42593e+00 3.54085e+00 2.74656e+01 +174 2.43992e+00 3.16182e+00 2.67109e+01 +175 2.45391e+00 2.79409e+00 2.58503e+01 +176 2.46790e+00 2.43913e+00 2.48837e+01 +177 2.48188e+00 2.09843e+00 2.38111e+01 +178 2.49587e+00 1.77349e+00 2.26325e+01 +179 2.50986e+00 1.46576e+00 2.13479e+01 +180 2.52385e+00 1.17675e+00 1.99573e+01 +181 2.53784e+00 9.07935e-01 1.84607e+01 +182 2.55182e+00 6.60792e-01 1.68581e+01 +183 2.56581e+00 4.36807e-01 1.51495e+01 +184 2.57980e+00 2.37080e-01 1.34226e+01 +185 2.59379e+00 6.08637e-02 1.17882e+01 +186 2.60778e+00 -9.31403e-02 1.02467e+01 +187 2.62176e+00 -2.26231e-01 8.79811e+00 +188 2.63575e+00 -3.39709e-01 7.44237e+00 +189 2.64974e+00 -4.34872e-01 6.17953e+00 +190 2.66373e+00 -5.13020e-01 5.00957e+00 +191 2.67772e+00 -5.75452e-01 3.93249e+00 +192 2.69170e+00 -6.23468e-01 2.94830e+00 +193 2.70569e+00 -6.58367e-01 2.05700e+00 +194 2.71968e+00 -6.81448e-01 1.25859e+00 +195 2.73367e+00 -6.94011e-01 5.53061e-01 +196 2.74766e+00 -6.97354e-01 -5.95806e-02 +197 2.76164e+00 -6.92777e-01 -5.79336e-01 +198 2.77563e+00 -6.81579e-01 -1.00620e+00 +199 2.78962e+00 -6.65060e-01 -1.34019e+00 +200 2.80361e+00 -6.44516e-01 -1.58367e+00 +201 2.81760e+00 -6.20923e-01 -1.78620e+00 +202 2.83158e+00 -5.94645e-01 -1.96751e+00 +203 2.84557e+00 -5.65979e-01 -2.12762e+00 +204 2.85956e+00 -5.35222e-01 -2.26652e+00 +205 2.87355e+00 -5.02670e-01 -2.38420e+00 +206 2.88754e+00 -4.68620e-01 -2.48067e+00 +207 2.90152e+00 -4.33369e-01 -2.55594e+00 +208 2.91551e+00 -3.97214e-01 -2.60998e+00 +209 2.92950e+00 -3.60452e-01 -2.64282e+00 +210 2.94349e+00 -3.23378e-01 -2.65445e+00 +211 2.95747e+00 -2.86290e-01 -2.64486e+00 +212 2.97146e+00 -2.49484e-01 -2.61407e+00 +213 2.98545e+00 -2.13258e-01 -2.56206e+00 +214 2.99944e+00 -1.77907e-01 -2.48884e+00 +215 3.01343e+00 -1.43729e-01 -2.39441e+00 +216 3.02741e+00 -1.11020e-01 -2.27877e+00 +217 3.04140e+00 -8.00665e-02 -2.14583e+00 +218 3.05539e+00 -5.09814e-02 -2.01314e+00 +219 3.06938e+00 -2.37360e-02 -1.88280e+00 +220 3.08337e+00 1.70256e-03 -1.75480e+00 +221 3.09735e+00 2.53672e-02 -1.62916e+00 +222 3.11134e+00 4.72908e-02 -1.50587e+00 +223 3.12533e+00 6.75062e-02 -1.38492e+00 +224 3.13932e+00 8.60463e-02 -1.26633e+00 +225 3.15331e+00 1.02944e-01 -1.15009e+00 +226 3.16729e+00 1.18232e-01 -1.03619e+00 +227 3.18128e+00 1.31943e-01 -9.24647e-01 +228 3.19527e+00 1.44111e-01 -8.15452e-01 +229 3.20926e+00 1.54767e-01 -7.08608e-01 +230 3.22325e+00 1.63946e-01 -6.04113e-01 +231 3.23723e+00 1.71679e-01 -5.01968e-01 +232 3.25122e+00 1.78000e-01 -4.02173e-01 +233 3.26521e+00 1.82941e-01 -3.04727e-01 +234 3.27920e+00 1.86541e-01 -2.10906e-01 +235 3.29319e+00 1.88867e-01 -1.22592e-01 +236 3.30717e+00 1.89996e-01 -3.98024e-02 +237 3.32116e+00 1.90006e-01 3.74622e-02 +238 3.33515e+00 1.88974e-01 1.09202e-01 +239 3.34914e+00 1.86977e-01 1.75417e-01 +240 3.36313e+00 1.84092e-01 2.36108e-01 +241 3.37711e+00 1.80398e-01 2.91274e-01 +242 3.39110e+00 1.75970e-01 3.40915e-01 +243 3.40509e+00 1.70886e-01 3.85032e-01 +244 3.41908e+00 1.65224e-01 4.23624e-01 +245 3.43307e+00 1.59060e-01 4.56691e-01 +246 3.44705e+00 1.52473e-01 4.84233e-01 +247 3.46104e+00 1.45539e-01 5.06251e-01 +248 3.47503e+00 1.38336e-01 5.22745e-01 +249 3.48902e+00 1.30941e-01 5.33713e-01 +250 3.50301e+00 1.23430e-01 5.39270e-01 +251 3.51699e+00 1.15863e-01 5.42677e-01 +252 3.53098e+00 1.08252e-01 5.45441e-01 +253 3.54497e+00 1.00606e-01 5.47559e-01 +254 3.55896e+00 9.29361e-02 5.49033e-01 +255 3.57295e+00 8.52497e-02 5.49863e-01 +256 3.58693e+00 7.75562e-02 5.50047e-01 +257 3.60092e+00 6.98646e-02 5.49587e-01 +258 3.61491e+00 6.21839e-02 5.48483e-01 +259 3.62890e+00 5.45233e-02 5.46734e-01 +260 3.64289e+00 4.68915e-02 5.44340e-01 +261 3.65687e+00 3.92978e-02 5.41301e-01 +262 3.67086e+00 3.17511e-02 5.37618e-01 +263 3.68485e+00 2.42605e-02 5.33290e-01 +264 3.69884e+00 1.68348e-02 5.28318e-01 +265 3.71283e+00 9.48329e-03 5.22701e-01 +266 3.72681e+00 2.21481e-03 5.16439e-01 +267 3.74080e+00 -4.96183e-03 5.09637e-01 +268 3.75479e+00 -1.20430e-02 5.02841e-01 +269 3.76878e+00 -1.90297e-02 4.96131e-01 +270 3.78277e+00 -2.59231e-02 4.89508e-01 +271 3.79675e+00 -3.27245e-02 4.82970e-01 +272 3.81074e+00 -3.94351e-02 4.76519e-01 +273 3.82473e+00 -4.60560e-02 4.70153e-01 +274 3.83872e+00 -5.25885e-02 4.63874e-01 +275 3.85271e+00 -5.90337e-02 4.57680e-01 +276 3.86669e+00 -6.53929e-02 4.51572e-01 +277 3.88068e+00 -7.16673e-02 4.45551e-01 +278 3.89467e+00 -7.78580e-02 4.39615e-01 +279 3.90866e+00 -8.39663e-02 4.33766e-01 +280 3.92265e+00 -8.99934e-02 4.28002e-01 +281 3.93663e+00 -9.59405e-02 4.22325e-01 +282 3.95062e+00 -1.01809e-01 4.16733e-01 +283 3.96461e+00 -1.07599e-01 4.11228e-01 +284 3.97860e+00 -1.13313e-01 4.05557e-01 +285 3.99259e+00 -1.18942e-01 3.99290e-01 +286 4.00657e+00 -1.24480e-01 3.92417e-01 +287 4.02056e+00 -1.29918e-01 3.84940e-01 +288 4.03455e+00 -1.35247e-01 3.76858e-01 +289 4.04854e+00 -1.40458e-01 3.68172e-01 +290 4.06253e+00 -1.45544e-01 3.58880e-01 +291 4.07651e+00 -1.50495e-01 3.48985e-01 +292 4.09050e+00 -1.55304e-01 3.38484e-01 +293 4.10449e+00 -1.59962e-01 3.27379e-01 +294 4.11848e+00 -1.64460e-01 3.15669e-01 +295 4.13246e+00 -1.68790e-01 3.03355e-01 +296 4.14645e+00 -1.72944e-01 2.90436e-01 +297 4.16044e+00 -1.76913e-01 2.76912e-01 +298 4.17443e+00 -1.80688e-01 2.62784e-01 +299 4.18842e+00 -1.84261e-01 2.48051e-01 +300 4.20240e+00 -1.87625e-01 2.32724e-01 +301 4.21639e+00 -1.90772e-01 2.17283e-01 +302 4.23038e+00 -1.93704e-01 2.01985e-01 +303 4.24437e+00 -1.96423e-01 1.86829e-01 +304 4.25836e+00 -1.98931e-01 1.71815e-01 +305 4.27234e+00 -2.01230e-01 1.56943e-01 +306 4.28633e+00 -2.03323e-01 1.42213e-01 +307 4.30032e+00 -2.05210e-01 1.27626e-01 +308 4.31431e+00 -2.06894e-01 1.13180e-01 +309 4.32830e+00 -2.08377e-01 9.88768e-02 +310 4.34228e+00 -2.09661e-01 8.47157e-02 +311 4.35627e+00 -2.10747e-01 7.06968e-02 +312 4.37026e+00 -2.11639e-01 5.68200e-02 +313 4.38425e+00 -2.12338e-01 4.30854e-02 +314 4.39824e+00 -2.12845e-01 2.94929e-02 +315 4.41222e+00 -2.13163e-01 1.60426e-02 +316 4.42621e+00 -2.13294e-01 2.73450e-03 +317 4.44020e+00 -2.13240e-01 -1.04284e-02 +318 4.45419e+00 -2.13004e-01 -2.34265e-02 +319 4.46818e+00 -2.12586e-01 -3.62567e-02 +320 4.48216e+00 -2.11990e-01 -4.89188e-02 +321 4.49615e+00 -2.11218e-01 -6.14128e-02 +322 4.51014e+00 -2.10273e-01 -7.37388e-02 +323 4.52413e+00 -2.09156e-01 -8.58968e-02 +324 4.53812e+00 -2.07870e-01 -9.78868e-02 +325 4.55210e+00 -2.06418e-01 -1.09709e-01 +326 4.56609e+00 -2.04802e-01 -1.21363e-01 +327 4.58008e+00 -2.03024e-01 -1.32848e-01 +328 4.59407e+00 -2.01086e-01 -1.44166e-01 +329 4.60806e+00 -1.98991e-01 -1.55316e-01 +330 4.62204e+00 -1.96742e-01 -1.66298e-01 +331 4.63603e+00 -1.94340e-01 -1.77111e-01 +332 4.65002e+00 -1.91788e-01 -1.87757e-01 +333 4.66401e+00 -1.89088e-01 -1.98235e-01 +334 4.67800e+00 -1.86243e-01 -2.08492e-01 +335 4.69198e+00 -1.83257e-01 -2.18424e-01 +336 4.70597e+00 -1.80134e-01 -2.28027e-01 +337 4.71996e+00 -1.76879e-01 -2.37302e-01 +338 4.73395e+00 -1.73497e-01 -2.46250e-01 +339 4.74794e+00 -1.69991e-01 -2.54869e-01 +340 4.76192e+00 -1.66368e-01 -2.63160e-01 +341 4.77591e+00 -1.62631e-01 -2.71122e-01 +342 4.78990e+00 -1.58785e-01 -2.78757e-01 +343 4.80389e+00 -1.54834e-01 -2.86063e-01 +344 4.81788e+00 -1.50783e-01 -2.93041e-01 +345 4.83186e+00 -1.46637e-01 -2.99691e-01 +346 4.84585e+00 -1.42401e-01 -3.06013e-01 +347 4.85984e+00 -1.38078e-01 -3.12006e-01 +348 4.87383e+00 -1.33674e-01 -3.17671e-01 +349 4.88782e+00 -1.29192e-01 -3.23008e-01 +350 4.90180e+00 -1.24639e-01 -3.28019e-01 +351 4.91579e+00 -1.20017e-01 -3.32802e-01 +352 4.92978e+00 -1.15329e-01 -3.37422e-01 +353 4.94377e+00 -1.10578e-01 -3.41876e-01 +354 4.95776e+00 -1.05765e-01 -3.46167e-01 +355 4.97174e+00 -1.00894e-01 -3.50292e-01 +356 4.98573e+00 -9.59664e-02 -3.54254e-01 +357 4.99972e+00 -9.09843e-02 -3.58050e-01 +358 5.01371e+00 -8.59503e-02 -3.61683e-01 +359 5.02770e+00 -8.08667e-02 -3.65150e-01 +360 5.04168e+00 -7.57357e-02 -3.68454e-01 +361 5.05567e+00 -7.05596e-02 -3.71592e-01 +362 5.06966e+00 -6.53408e-02 -3.74567e-01 +363 5.08365e+00 -6.00815e-02 -3.77377e-01 +364 5.09764e+00 -5.47841e-02 -3.80022e-01 +365 5.11162e+00 -4.94508e-02 -3.82503e-01 +366 5.12561e+00 -4.40840e-02 -3.84819e-01 +367 5.13960e+00 -3.86861e-02 -3.86857e-01 +368 5.15359e+00 -3.32669e-02 -3.87771e-01 +369 5.16758e+00 -2.78439e-02 -3.87387e-01 +370 5.18156e+00 -2.24354e-02 -3.85706e-01 +371 5.19555e+00 -1.70595e-02 -3.82729e-01 +372 5.20954e+00 -1.17343e-02 -3.78454e-01 +373 5.22353e+00 -6.47792e-03 -3.72882e-01 +374 5.23752e+00 -1.30859e-03 -3.66012e-01 +375 5.25150e+00 3.75557e-03 -3.57846e-01 +376 5.26549e+00 8.69644e-03 -3.48382e-01 +377 5.27948e+00 1.34959e-02 -3.37622e-01 +378 5.29347e+00 1.81357e-02 -3.25564e-01 +379 5.30745e+00 2.25978e-02 -3.12209e-01 +380 5.32144e+00 2.68640e-02 -2.97557e-01 +381 5.33543e+00 3.09161e-02 -2.81607e-01 +382 5.34942e+00 3.47361e-02 -2.64361e-01 +383 5.36341e+00 3.83058e-02 -2.45817e-01 +384 5.37739e+00 4.16089e-02 -2.26496e-01 +385 5.39138e+00 4.46444e-02 -2.07598e-01 +386 5.40537e+00 4.74189e-02 -1.89169e-01 +387 5.41936e+00 4.99388e-02 -1.71211e-01 +388 5.43335e+00 5.22108e-02 -1.53723e-01 +389 5.44733e+00 5.42415e-02 -1.36705e-01 +390 5.46132e+00 5.60375e-02 -1.20158e-01 +391 5.47531e+00 5.76053e-02 -1.04081e-01 +392 5.48930e+00 5.89514e-02 -8.84740e-02 +393 5.50329e+00 6.00826e-02 -7.33374e-02 +394 5.51727e+00 6.10053e-02 -5.86710e-02 +395 5.53126e+00 6.17262e-02 -4.44749e-02 +396 5.54525e+00 6.22517e-02 -3.07490e-02 +397 5.55924e+00 6.25886e-02 -1.74934e-02 +398 5.57323e+00 6.27433e-02 -4.70807e-03 +399 5.58721e+00 6.27225e-02 7.60702e-03 +400 5.60120e+00 6.25327e-02 1.94503e-02 +401 5.61519e+00 6.21817e-02 3.05831e-02 +402 5.62918e+00 6.16812e-02 4.08330e-02 +403 5.64317e+00 6.10435e-02 5.01999e-02 +404 5.65715e+00 6.02810e-02 5.86840e-02 +405 5.67114e+00 5.94059e-02 6.62851e-02 +406 5.68513e+00 5.84307e-02 7.30034e-02 +407 5.69912e+00 5.73677e-02 7.88387e-02 +408 5.71311e+00 5.62292e-02 8.37911e-02 +409 5.72709e+00 5.50277e-02 8.78606e-02 +410 5.74108e+00 5.37754e-02 9.10472e-02 +411 5.75507e+00 5.24846e-02 9.33509e-02 +412 5.76906e+00 5.11679e-02 9.47717e-02 +413 5.78305e+00 4.98374e-02 9.53096e-02 +414 5.79703e+00 4.85056e-02 9.49645e-02 +415 5.81102e+00 4.71848e-02 9.37366e-02 +416 5.82501e+00 4.58874e-02 9.16257e-02 +417 5.83900e+00 4.46255e-02 8.87199e-02 +418 5.85299e+00 4.34050e-02 8.58142e-02 +419 5.86697e+00 4.22238e-02 8.30983e-02 +420 5.88096e+00 4.10794e-02 8.05724e-02 +421 5.89495e+00 3.99689e-02 7.82364e-02 +422 5.90894e+00 3.88897e-02 7.60904e-02 +423 5.92293e+00 3.78393e-02 7.41343e-02 +424 5.93691e+00 3.68149e-02 7.23682e-02 +425 5.95090e+00 3.58138e-02 7.07920e-02 +426 5.96489e+00 3.48335e-02 6.94057e-02 +427 5.97888e+00 3.38712e-02 6.82094e-02 +428 5.99287e+00 3.29244e-02 6.72030e-02 +429 6.00685e+00 3.19903e-02 6.63865e-02 +430 6.02084e+00 3.10663e-02 6.57600e-02 +431 6.03483e+00 3.01497e-02 6.53234e-02 +432 6.04882e+00 2.92379e-02 6.50768e-02 +433 6.06281e+00 2.83282e-02 6.50201e-02 +434 6.07679e+00 2.74183e-02 6.50695e-02 +435 6.09078e+00 2.65085e-02 6.50011e-02 +436 6.10477e+00 2.56005e-02 6.48029e-02 +437 6.11876e+00 2.46961e-02 6.44747e-02 +438 6.13275e+00 2.37973e-02 6.40165e-02 +439 6.14673e+00 2.29058e-02 6.34285e-02 +440 6.16072e+00 2.20235e-02 6.27105e-02 +441 6.17471e+00 2.11520e-02 6.18626e-02 +442 6.18870e+00 2.02934e-02 6.08847e-02 +443 6.20269e+00 1.94493e-02 5.97769e-02 +444 6.21667e+00 1.86217e-02 5.85392e-02 +445 6.23066e+00 1.78123e-02 5.71716e-02 +446 6.24465e+00 1.70229e-02 5.56740e-02 +447 6.25864e+00 1.62553e-02 5.40465e-02 +448 6.27263e+00 1.55115e-02 5.22891e-02 +449 6.28661e+00 1.47931e-02 5.04017e-02 +450 6.30060e+00 1.41020e-02 4.83846e-02 +451 6.31459e+00 1.34396e-02 4.63409e-02 +452 6.32858e+00 1.28053e-02 4.43579e-02 +453 6.34257e+00 1.21984e-02 4.24357e-02 +454 6.35655e+00 1.16179e-02 4.05742e-02 +455 6.37054e+00 1.10630e-02 3.87735e-02 +456 6.38453e+00 1.05329e-02 3.70334e-02 +457 6.39852e+00 1.00266e-02 3.53541e-02 +458 6.41251e+00 9.54350e-03 3.37356e-02 +459 6.42649e+00 9.08258e-03 3.21778e-02 +460 6.44048e+00 8.64301e-03 3.06807e-02 +461 6.45447e+00 8.22397e-03 2.92443e-02 +462 6.46846e+00 7.82459e-03 2.78687e-02 +463 6.48244e+00 7.44403e-03 2.65539e-02 +464 6.49643e+00 7.08144e-03 2.52997e-02 +465 6.51042e+00 6.73597e-03 2.41063e-02 +466 6.52441e+00 6.40676e-03 2.29736e-02 +467 6.53840e+00 6.09297e-03 2.19024e-02 +468 6.55238e+00 5.79370e-03 2.08997e-02 +469 6.56637e+00 5.50795e-03 1.99677e-02 +470 6.58036e+00 5.23475e-03 1.91064e-02 +471 6.59435e+00 4.97310e-03 1.83158e-02 +472 6.60834e+00 4.72202e-03 1.75958e-02 +473 6.62232e+00 4.48051e-03 1.69465e-02 +474 6.63631e+00 4.24760e-03 1.63679e-02 +475 6.65030e+00 4.02228e-03 1.58599e-02 +476 6.66429e+00 3.80357e-03 1.54226e-02 +477 6.67828e+00 3.59048e-03 1.50560e-02 +478 6.69226e+00 3.38203e-03 1.47600e-02 +479 6.70625e+00 3.17723e-03 1.45348e-02 +480 6.72024e+00 2.97508e-03 1.43801e-02 +481 6.73423e+00 2.77460e-03 1.42962e-02 +482 6.74822e+00 2.57480e-03 1.42829e-02 +483 6.76220e+00 2.37469e-03 1.43403e-02 +484 6.77619e+00 2.17343e-03 1.44248e-02 +485 6.79018e+00 1.97168e-03 1.44017e-02 +486 6.80417e+00 1.77107e-03 1.42615e-02 +487 6.81816e+00 1.57325e-03 1.40041e-02 +488 6.83214e+00 1.37984e-03 1.36297e-02 +489 6.84613e+00 1.19249e-03 1.31381e-02 +490 6.86012e+00 1.01284e-03 1.25294e-02 +491 6.87411e+00 8.42516e-04 1.18035e-02 +492 6.88810e+00 6.83168e-04 1.09605e-02 +493 6.90208e+00 5.36431e-04 1.00004e-02 +494 6.91607e+00 4.03943e-04 8.92318e-03 +495 6.93006e+00 2.87343e-04 7.72880e-03 +496 6.94405e+00 1.88268e-04 6.41730e-03 +497 6.95804e+00 1.08359e-04 4.98867e-03 +498 6.97202e+00 4.92516e-05 3.44291e-03 +499 6.98601e+00 1.25860e-05 1.78002e-03 +500 7.00000e+00 0.00000e+00 0.00000e+00 + + + +NonBondNull +N 500 R 0.0000000001 10.0 + +1 0.0000e+00 0.0000e+00 0.0000e+00 +2 2.0040e-02 0.0000e+00 0.0000e+00 +3 4.0080e-02 0.0000e+00 0.0000e+00 +4 6.0120e-02 0.0000e+00 0.0000e+00 +5 8.0160e-02 0.0000e+00 0.0000e+00 +6 1.0020e-01 0.0000e+00 0.0000e+00 +7 1.2024e-01 0.0000e+00 0.0000e+00 +8 1.4028e-01 0.0000e+00 0.0000e+00 +9 1.6032e-01 0.0000e+00 0.0000e+00 +10 1.8036e-01 0.0000e+00 0.0000e+00 +11 2.0040e-01 0.0000e+00 0.0000e+00 +12 2.2044e-01 0.0000e+00 0.0000e+00 +13 2.4048e-01 0.0000e+00 0.0000e+00 +14 2.6052e-01 0.0000e+00 0.0000e+00 +15 2.8056e-01 0.0000e+00 0.0000e+00 +16 3.0060e-01 0.0000e+00 0.0000e+00 +17 3.2064e-01 0.0000e+00 0.0000e+00 +18 3.4068e-01 0.0000e+00 0.0000e+00 +19 3.6072e-01 0.0000e+00 0.0000e+00 +20 3.8076e-01 0.0000e+00 0.0000e+00 +21 4.0080e-01 0.0000e+00 0.0000e+00 +22 4.2084e-01 0.0000e+00 0.0000e+00 +23 4.4088e-01 0.0000e+00 0.0000e+00 +24 4.6092e-01 0.0000e+00 0.0000e+00 +25 4.8096e-01 0.0000e+00 0.0000e+00 +26 5.0100e-01 0.0000e+00 0.0000e+00 +27 5.2104e-01 0.0000e+00 0.0000e+00 +28 5.4108e-01 0.0000e+00 0.0000e+00 +29 5.6112e-01 0.0000e+00 0.0000e+00 +30 5.8116e-01 0.0000e+00 0.0000e+00 +31 6.0120e-01 0.0000e+00 0.0000e+00 +32 6.2124e-01 0.0000e+00 0.0000e+00 +33 6.4128e-01 0.0000e+00 0.0000e+00 +34 6.6132e-01 0.0000e+00 0.0000e+00 +35 6.8136e-01 0.0000e+00 0.0000e+00 +36 7.0140e-01 0.0000e+00 0.0000e+00 +37 7.2144e-01 0.0000e+00 0.0000e+00 +38 7.4148e-01 0.0000e+00 0.0000e+00 +39 7.6152e-01 0.0000e+00 0.0000e+00 +40 7.8156e-01 0.0000e+00 0.0000e+00 +41 8.0160e-01 0.0000e+00 0.0000e+00 +42 8.2164e-01 0.0000e+00 0.0000e+00 +43 8.4168e-01 0.0000e+00 0.0000e+00 +44 8.6172e-01 0.0000e+00 0.0000e+00 +45 8.8176e-01 0.0000e+00 0.0000e+00 +46 9.0180e-01 0.0000e+00 0.0000e+00 +47 9.2184e-01 0.0000e+00 0.0000e+00 +48 9.4188e-01 0.0000e+00 0.0000e+00 +49 9.6192e-01 0.0000e+00 0.0000e+00 +50 9.8196e-01 0.0000e+00 0.0000e+00 +51 1.0020e+00 0.0000e+00 0.0000e+00 +52 1.0220e+00 0.0000e+00 0.0000e+00 +53 1.0421e+00 0.0000e+00 0.0000e+00 +54 1.0621e+00 0.0000e+00 0.0000e+00 +55 1.0822e+00 0.0000e+00 0.0000e+00 +56 1.1022e+00 0.0000e+00 0.0000e+00 +57 1.1222e+00 0.0000e+00 0.0000e+00 +58 1.1423e+00 0.0000e+00 0.0000e+00 +59 1.1623e+00 0.0000e+00 0.0000e+00 +60 1.1824e+00 0.0000e+00 0.0000e+00 +61 1.2024e+00 0.0000e+00 0.0000e+00 +62 1.2224e+00 0.0000e+00 0.0000e+00 +63 1.2425e+00 0.0000e+00 0.0000e+00 +64 1.2625e+00 0.0000e+00 0.0000e+00 +65 1.2826e+00 0.0000e+00 0.0000e+00 +66 1.3026e+00 0.0000e+00 0.0000e+00 +67 1.3226e+00 0.0000e+00 0.0000e+00 +68 1.3427e+00 0.0000e+00 0.0000e+00 +69 1.3627e+00 0.0000e+00 0.0000e+00 +70 1.3828e+00 0.0000e+00 0.0000e+00 +71 1.4028e+00 0.0000e+00 0.0000e+00 +72 1.4228e+00 0.0000e+00 0.0000e+00 +73 1.4429e+00 0.0000e+00 0.0000e+00 +74 1.4629e+00 0.0000e+00 0.0000e+00 +75 1.4830e+00 0.0000e+00 0.0000e+00 +76 1.5030e+00 0.0000e+00 0.0000e+00 +77 1.5230e+00 0.0000e+00 0.0000e+00 +78 1.5431e+00 0.0000e+00 0.0000e+00 +79 1.5631e+00 0.0000e+00 0.0000e+00 +80 1.5832e+00 0.0000e+00 0.0000e+00 +81 1.6032e+00 0.0000e+00 0.0000e+00 +82 1.6232e+00 0.0000e+00 0.0000e+00 +83 1.6433e+00 0.0000e+00 0.0000e+00 +84 1.6633e+00 0.0000e+00 0.0000e+00 +85 1.6834e+00 0.0000e+00 0.0000e+00 +86 1.7034e+00 0.0000e+00 0.0000e+00 +87 1.7234e+00 0.0000e+00 0.0000e+00 +88 1.7435e+00 0.0000e+00 0.0000e+00 +89 1.7635e+00 0.0000e+00 0.0000e+00 +90 1.7836e+00 0.0000e+00 0.0000e+00 +91 1.8036e+00 0.0000e+00 0.0000e+00 +92 1.8236e+00 0.0000e+00 0.0000e+00 +93 1.8437e+00 0.0000e+00 0.0000e+00 +94 1.8637e+00 0.0000e+00 0.0000e+00 +95 1.8838e+00 0.0000e+00 0.0000e+00 +96 1.9038e+00 0.0000e+00 0.0000e+00 +97 1.9238e+00 0.0000e+00 0.0000e+00 +98 1.9439e+00 0.0000e+00 0.0000e+00 +99 1.9639e+00 0.0000e+00 0.0000e+00 +100 1.9840e+00 0.0000e+00 0.0000e+00 +101 2.0040e+00 0.0000e+00 0.0000e+00 +102 2.0240e+00 0.0000e+00 0.0000e+00 +103 2.0441e+00 0.0000e+00 0.0000e+00 +104 2.0641e+00 0.0000e+00 0.0000e+00 +105 2.0842e+00 0.0000e+00 0.0000e+00 +106 2.1042e+00 0.0000e+00 0.0000e+00 +107 2.1242e+00 0.0000e+00 0.0000e+00 +108 2.1443e+00 0.0000e+00 0.0000e+00 +109 2.1643e+00 0.0000e+00 0.0000e+00 +110 2.1844e+00 0.0000e+00 0.0000e+00 +111 2.2044e+00 0.0000e+00 0.0000e+00 +112 2.2244e+00 0.0000e+00 0.0000e+00 +113 2.2445e+00 0.0000e+00 0.0000e+00 +114 2.2645e+00 0.0000e+00 0.0000e+00 +115 2.2846e+00 0.0000e+00 0.0000e+00 +116 2.3046e+00 0.0000e+00 0.0000e+00 +117 2.3246e+00 0.0000e+00 0.0000e+00 +118 2.3447e+00 0.0000e+00 0.0000e+00 +119 2.3647e+00 0.0000e+00 0.0000e+00 +120 2.3848e+00 0.0000e+00 0.0000e+00 +121 2.4048e+00 0.0000e+00 0.0000e+00 +122 2.4248e+00 0.0000e+00 0.0000e+00 +123 2.4449e+00 0.0000e+00 0.0000e+00 +124 2.4649e+00 0.0000e+00 0.0000e+00 +125 2.4850e+00 0.0000e+00 0.0000e+00 +126 2.5050e+00 0.0000e+00 0.0000e+00 +127 2.5251e+00 0.0000e+00 0.0000e+00 +128 2.5451e+00 0.0000e+00 0.0000e+00 +129 2.5651e+00 0.0000e+00 0.0000e+00 +130 2.5852e+00 0.0000e+00 0.0000e+00 +131 2.6052e+00 0.0000e+00 0.0000e+00 +132 2.6253e+00 0.0000e+00 0.0000e+00 +133 2.6453e+00 0.0000e+00 0.0000e+00 +134 2.6653e+00 0.0000e+00 0.0000e+00 +135 2.6854e+00 0.0000e+00 0.0000e+00 +136 2.7054e+00 0.0000e+00 0.0000e+00 +137 2.7255e+00 0.0000e+00 0.0000e+00 +138 2.7455e+00 0.0000e+00 0.0000e+00 +139 2.7655e+00 0.0000e+00 0.0000e+00 +140 2.7856e+00 0.0000e+00 0.0000e+00 +141 2.8056e+00 0.0000e+00 0.0000e+00 +142 2.8257e+00 0.0000e+00 0.0000e+00 +143 2.8457e+00 0.0000e+00 0.0000e+00 +144 2.8657e+00 0.0000e+00 0.0000e+00 +145 2.8858e+00 0.0000e+00 0.0000e+00 +146 2.9058e+00 0.0000e+00 0.0000e+00 +147 2.9259e+00 0.0000e+00 0.0000e+00 +148 2.9459e+00 0.0000e+00 0.0000e+00 +149 2.9659e+00 0.0000e+00 0.0000e+00 +150 2.9860e+00 0.0000e+00 0.0000e+00 +151 3.0060e+00 0.0000e+00 0.0000e+00 +152 3.0261e+00 0.0000e+00 0.0000e+00 +153 3.0461e+00 0.0000e+00 0.0000e+00 +154 3.0661e+00 0.0000e+00 0.0000e+00 +155 3.0862e+00 0.0000e+00 0.0000e+00 +156 3.1062e+00 0.0000e+00 0.0000e+00 +157 3.1263e+00 0.0000e+00 0.0000e+00 +158 3.1463e+00 0.0000e+00 0.0000e+00 +159 3.1663e+00 0.0000e+00 0.0000e+00 +160 3.1864e+00 0.0000e+00 0.0000e+00 +161 3.2064e+00 0.0000e+00 0.0000e+00 +162 3.2265e+00 0.0000e+00 0.0000e+00 +163 3.2465e+00 0.0000e+00 0.0000e+00 +164 3.2665e+00 0.0000e+00 0.0000e+00 +165 3.2866e+00 0.0000e+00 0.0000e+00 +166 3.3066e+00 0.0000e+00 0.0000e+00 +167 3.3267e+00 0.0000e+00 0.0000e+00 +168 3.3467e+00 0.0000e+00 0.0000e+00 +169 3.3667e+00 0.0000e+00 0.0000e+00 +170 3.3868e+00 0.0000e+00 0.0000e+00 +171 3.4068e+00 0.0000e+00 0.0000e+00 +172 3.4269e+00 0.0000e+00 0.0000e+00 +173 3.4469e+00 0.0000e+00 0.0000e+00 +174 3.4669e+00 0.0000e+00 0.0000e+00 +175 3.4870e+00 0.0000e+00 0.0000e+00 +176 3.5070e+00 0.0000e+00 0.0000e+00 +177 3.5271e+00 0.0000e+00 0.0000e+00 +178 3.5471e+00 0.0000e+00 0.0000e+00 +179 3.5671e+00 0.0000e+00 0.0000e+00 +180 3.5872e+00 0.0000e+00 0.0000e+00 +181 3.6072e+00 0.0000e+00 0.0000e+00 +182 3.6273e+00 0.0000e+00 0.0000e+00 +183 3.6473e+00 0.0000e+00 0.0000e+00 +184 3.6673e+00 0.0000e+00 0.0000e+00 +185 3.6874e+00 0.0000e+00 0.0000e+00 +186 3.7074e+00 0.0000e+00 0.0000e+00 +187 3.7275e+00 0.0000e+00 0.0000e+00 +188 3.7475e+00 0.0000e+00 0.0000e+00 +189 3.7675e+00 0.0000e+00 0.0000e+00 +190 3.7876e+00 0.0000e+00 0.0000e+00 +191 3.8076e+00 0.0000e+00 0.0000e+00 +192 3.8277e+00 0.0000e+00 0.0000e+00 +193 3.8477e+00 0.0000e+00 0.0000e+00 +194 3.8677e+00 0.0000e+00 0.0000e+00 +195 3.8878e+00 0.0000e+00 0.0000e+00 +196 3.9078e+00 0.0000e+00 0.0000e+00 +197 3.9279e+00 0.0000e+00 0.0000e+00 +198 3.9479e+00 0.0000e+00 0.0000e+00 +199 3.9679e+00 0.0000e+00 0.0000e+00 +200 3.9880e+00 0.0000e+00 0.0000e+00 +201 4.0080e+00 0.0000e+00 0.0000e+00 +202 4.0281e+00 0.0000e+00 0.0000e+00 +203 4.0481e+00 0.0000e+00 0.0000e+00 +204 4.0681e+00 0.0000e+00 0.0000e+00 +205 4.0882e+00 0.0000e+00 0.0000e+00 +206 4.1082e+00 0.0000e+00 0.0000e+00 +207 4.1283e+00 0.0000e+00 0.0000e+00 +208 4.1483e+00 0.0000e+00 0.0000e+00 +209 4.1683e+00 0.0000e+00 0.0000e+00 +210 4.1884e+00 0.0000e+00 0.0000e+00 +211 4.2084e+00 0.0000e+00 0.0000e+00 +212 4.2285e+00 0.0000e+00 0.0000e+00 +213 4.2485e+00 0.0000e+00 0.0000e+00 +214 4.2685e+00 0.0000e+00 0.0000e+00 +215 4.2886e+00 0.0000e+00 0.0000e+00 +216 4.3086e+00 0.0000e+00 0.0000e+00 +217 4.3287e+00 0.0000e+00 0.0000e+00 +218 4.3487e+00 0.0000e+00 0.0000e+00 +219 4.3687e+00 0.0000e+00 0.0000e+00 +220 4.3888e+00 0.0000e+00 0.0000e+00 +221 4.4088e+00 0.0000e+00 0.0000e+00 +222 4.4289e+00 0.0000e+00 0.0000e+00 +223 4.4489e+00 0.0000e+00 0.0000e+00 +224 4.4689e+00 0.0000e+00 0.0000e+00 +225 4.4890e+00 0.0000e+00 0.0000e+00 +226 4.5090e+00 0.0000e+00 0.0000e+00 +227 4.5291e+00 0.0000e+00 0.0000e+00 +228 4.5491e+00 0.0000e+00 0.0000e+00 +229 4.5691e+00 0.0000e+00 0.0000e+00 +230 4.5892e+00 0.0000e+00 0.0000e+00 +231 4.6092e+00 0.0000e+00 0.0000e+00 +232 4.6293e+00 0.0000e+00 0.0000e+00 +233 4.6493e+00 0.0000e+00 0.0000e+00 +234 4.6693e+00 0.0000e+00 0.0000e+00 +235 4.6894e+00 0.0000e+00 0.0000e+00 +236 4.7094e+00 0.0000e+00 0.0000e+00 +237 4.7295e+00 0.0000e+00 0.0000e+00 +238 4.7495e+00 0.0000e+00 0.0000e+00 +239 4.7695e+00 0.0000e+00 0.0000e+00 +240 4.7896e+00 0.0000e+00 0.0000e+00 +241 4.8096e+00 0.0000e+00 0.0000e+00 +242 4.8297e+00 0.0000e+00 0.0000e+00 +243 4.8497e+00 0.0000e+00 0.0000e+00 +244 4.8697e+00 0.0000e+00 0.0000e+00 +245 4.8898e+00 0.0000e+00 0.0000e+00 +246 4.9098e+00 0.0000e+00 0.0000e+00 +247 4.9299e+00 0.0000e+00 0.0000e+00 +248 4.9499e+00 0.0000e+00 0.0000e+00 +249 4.9699e+00 0.0000e+00 0.0000e+00 +250 4.9900e+00 0.0000e+00 0.0000e+00 +251 5.0100e+00 0.0000e+00 0.0000e+00 +252 5.0301e+00 0.0000e+00 0.0000e+00 +253 5.0501e+00 0.0000e+00 0.0000e+00 +254 5.0701e+00 0.0000e+00 0.0000e+00 +255 5.0902e+00 0.0000e+00 0.0000e+00 +256 5.1102e+00 0.0000e+00 0.0000e+00 +257 5.1303e+00 0.0000e+00 0.0000e+00 +258 5.1503e+00 0.0000e+00 0.0000e+00 +259 5.1703e+00 0.0000e+00 0.0000e+00 +260 5.1904e+00 0.0000e+00 0.0000e+00 +261 5.2104e+00 0.0000e+00 0.0000e+00 +262 5.2305e+00 0.0000e+00 0.0000e+00 +263 5.2505e+00 0.0000e+00 0.0000e+00 +264 5.2705e+00 0.0000e+00 0.0000e+00 +265 5.2906e+00 0.0000e+00 0.0000e+00 +266 5.3106e+00 0.0000e+00 0.0000e+00 +267 5.3307e+00 0.0000e+00 0.0000e+00 +268 5.3507e+00 0.0000e+00 0.0000e+00 +269 5.3707e+00 0.0000e+00 0.0000e+00 +270 5.3908e+00 0.0000e+00 0.0000e+00 +271 5.4108e+00 0.0000e+00 0.0000e+00 +272 5.4309e+00 0.0000e+00 0.0000e+00 +273 5.4509e+00 0.0000e+00 0.0000e+00 +274 5.4709e+00 0.0000e+00 0.0000e+00 +275 5.4910e+00 0.0000e+00 0.0000e+00 +276 5.5110e+00 0.0000e+00 0.0000e+00 +277 5.5311e+00 0.0000e+00 0.0000e+00 +278 5.5511e+00 0.0000e+00 0.0000e+00 +279 5.5711e+00 0.0000e+00 0.0000e+00 +280 5.5912e+00 0.0000e+00 0.0000e+00 +281 5.6112e+00 0.0000e+00 0.0000e+00 +282 5.6313e+00 0.0000e+00 0.0000e+00 +283 5.6513e+00 0.0000e+00 0.0000e+00 +284 5.6713e+00 0.0000e+00 0.0000e+00 +285 5.6914e+00 0.0000e+00 0.0000e+00 +286 5.7114e+00 0.0000e+00 0.0000e+00 +287 5.7315e+00 0.0000e+00 0.0000e+00 +288 5.7515e+00 0.0000e+00 0.0000e+00 +289 5.7715e+00 0.0000e+00 0.0000e+00 +290 5.7916e+00 0.0000e+00 0.0000e+00 +291 5.8116e+00 0.0000e+00 0.0000e+00 +292 5.8317e+00 0.0000e+00 0.0000e+00 +293 5.8517e+00 0.0000e+00 0.0000e+00 +294 5.8717e+00 0.0000e+00 0.0000e+00 +295 5.8918e+00 0.0000e+00 0.0000e+00 +296 5.9118e+00 0.0000e+00 0.0000e+00 +297 5.9319e+00 0.0000e+00 0.0000e+00 +298 5.9519e+00 0.0000e+00 0.0000e+00 +299 5.9719e+00 0.0000e+00 0.0000e+00 +300 5.9920e+00 0.0000e+00 0.0000e+00 +301 6.0120e+00 0.0000e+00 0.0000e+00 +302 6.0321e+00 0.0000e+00 0.0000e+00 +303 6.0521e+00 0.0000e+00 0.0000e+00 +304 6.0721e+00 0.0000e+00 0.0000e+00 +305 6.0922e+00 0.0000e+00 0.0000e+00 +306 6.1122e+00 0.0000e+00 0.0000e+00 +307 6.1323e+00 0.0000e+00 0.0000e+00 +308 6.1523e+00 0.0000e+00 0.0000e+00 +309 6.1723e+00 0.0000e+00 0.0000e+00 +310 6.1924e+00 0.0000e+00 0.0000e+00 +311 6.2124e+00 0.0000e+00 0.0000e+00 +312 6.2325e+00 0.0000e+00 0.0000e+00 +313 6.2525e+00 0.0000e+00 0.0000e+00 +314 6.2725e+00 0.0000e+00 0.0000e+00 +315 6.2926e+00 0.0000e+00 0.0000e+00 +316 6.3126e+00 0.0000e+00 0.0000e+00 +317 6.3327e+00 0.0000e+00 0.0000e+00 +318 6.3527e+00 0.0000e+00 0.0000e+00 +319 6.3727e+00 0.0000e+00 0.0000e+00 +320 6.3928e+00 0.0000e+00 0.0000e+00 +321 6.4128e+00 0.0000e+00 0.0000e+00 +322 6.4329e+00 0.0000e+00 0.0000e+00 +323 6.4529e+00 0.0000e+00 0.0000e+00 +324 6.4729e+00 0.0000e+00 0.0000e+00 +325 6.4930e+00 0.0000e+00 0.0000e+00 +326 6.5130e+00 0.0000e+00 0.0000e+00 +327 6.5331e+00 0.0000e+00 0.0000e+00 +328 6.5531e+00 0.0000e+00 0.0000e+00 +329 6.5731e+00 0.0000e+00 0.0000e+00 +330 6.5932e+00 0.0000e+00 0.0000e+00 +331 6.6132e+00 0.0000e+00 0.0000e+00 +332 6.6333e+00 0.0000e+00 0.0000e+00 +333 6.6533e+00 0.0000e+00 0.0000e+00 +334 6.6733e+00 0.0000e+00 0.0000e+00 +335 6.6934e+00 0.0000e+00 0.0000e+00 +336 6.7134e+00 0.0000e+00 0.0000e+00 +337 6.7335e+00 0.0000e+00 0.0000e+00 +338 6.7535e+00 0.0000e+00 0.0000e+00 +339 6.7735e+00 0.0000e+00 0.0000e+00 +340 6.7936e+00 0.0000e+00 0.0000e+00 +341 6.8136e+00 0.0000e+00 0.0000e+00 +342 6.8337e+00 0.0000e+00 0.0000e+00 +343 6.8537e+00 0.0000e+00 0.0000e+00 +344 6.8737e+00 0.0000e+00 0.0000e+00 +345 6.8938e+00 0.0000e+00 0.0000e+00 +346 6.9138e+00 0.0000e+00 0.0000e+00 +347 6.9339e+00 0.0000e+00 0.0000e+00 +348 6.9539e+00 0.0000e+00 0.0000e+00 +349 6.9739e+00 0.0000e+00 0.0000e+00 +350 6.9940e+00 0.0000e+00 0.0000e+00 +351 7.0140e+00 0.0000e+00 0.0000e+00 +352 7.0341e+00 0.0000e+00 0.0000e+00 +353 7.0541e+00 0.0000e+00 0.0000e+00 +354 7.0741e+00 0.0000e+00 0.0000e+00 +355 7.0942e+00 0.0000e+00 0.0000e+00 +356 7.1142e+00 0.0000e+00 0.0000e+00 +357 7.1343e+00 0.0000e+00 0.0000e+00 +358 7.1543e+00 0.0000e+00 0.0000e+00 +359 7.1743e+00 0.0000e+00 0.0000e+00 +360 7.1944e+00 0.0000e+00 0.0000e+00 +361 7.2144e+00 0.0000e+00 0.0000e+00 +362 7.2345e+00 0.0000e+00 0.0000e+00 +363 7.2545e+00 0.0000e+00 0.0000e+00 +364 7.2745e+00 0.0000e+00 0.0000e+00 +365 7.2946e+00 0.0000e+00 0.0000e+00 +366 7.3146e+00 0.0000e+00 0.0000e+00 +367 7.3347e+00 0.0000e+00 0.0000e+00 +368 7.3547e+00 0.0000e+00 0.0000e+00 +369 7.3747e+00 0.0000e+00 0.0000e+00 +370 7.3948e+00 0.0000e+00 0.0000e+00 +371 7.4148e+00 0.0000e+00 0.0000e+00 +372 7.4349e+00 0.0000e+00 0.0000e+00 +373 7.4549e+00 0.0000e+00 0.0000e+00 +374 7.4749e+00 0.0000e+00 0.0000e+00 +375 7.4950e+00 0.0000e+00 0.0000e+00 +376 7.5150e+00 0.0000e+00 0.0000e+00 +377 7.5351e+00 0.0000e+00 0.0000e+00 +378 7.5551e+00 0.0000e+00 0.0000e+00 +379 7.5752e+00 0.0000e+00 0.0000e+00 +380 7.5952e+00 0.0000e+00 0.0000e+00 +381 7.6152e+00 0.0000e+00 0.0000e+00 +382 7.6353e+00 0.0000e+00 0.0000e+00 +383 7.6553e+00 0.0000e+00 0.0000e+00 +384 7.6754e+00 0.0000e+00 0.0000e+00 +385 7.6954e+00 0.0000e+00 0.0000e+00 +386 7.7154e+00 0.0000e+00 0.0000e+00 +387 7.7355e+00 0.0000e+00 0.0000e+00 +388 7.7555e+00 0.0000e+00 0.0000e+00 +389 7.7756e+00 0.0000e+00 0.0000e+00 +390 7.7956e+00 0.0000e+00 0.0000e+00 +391 7.8156e+00 0.0000e+00 0.0000e+00 +392 7.8357e+00 0.0000e+00 0.0000e+00 +393 7.8557e+00 0.0000e+00 0.0000e+00 +394 7.8758e+00 0.0000e+00 0.0000e+00 +395 7.8958e+00 0.0000e+00 0.0000e+00 +396 7.9158e+00 0.0000e+00 0.0000e+00 +397 7.9359e+00 0.0000e+00 0.0000e+00 +398 7.9559e+00 0.0000e+00 0.0000e+00 +399 7.9760e+00 0.0000e+00 0.0000e+00 +400 7.9960e+00 0.0000e+00 0.0000e+00 +401 8.0160e+00 0.0000e+00 0.0000e+00 +402 8.0361e+00 0.0000e+00 0.0000e+00 +403 8.0561e+00 0.0000e+00 0.0000e+00 +404 8.0762e+00 0.0000e+00 0.0000e+00 +405 8.0962e+00 0.0000e+00 0.0000e+00 +406 8.1162e+00 0.0000e+00 0.0000e+00 +407 8.1363e+00 0.0000e+00 0.0000e+00 +408 8.1563e+00 0.0000e+00 0.0000e+00 +409 8.1764e+00 0.0000e+00 0.0000e+00 +410 8.1964e+00 0.0000e+00 0.0000e+00 +411 8.2164e+00 0.0000e+00 0.0000e+00 +412 8.2365e+00 0.0000e+00 0.0000e+00 +413 8.2565e+00 0.0000e+00 0.0000e+00 +414 8.2766e+00 0.0000e+00 0.0000e+00 +415 8.2966e+00 0.0000e+00 0.0000e+00 +416 8.3166e+00 0.0000e+00 0.0000e+00 +417 8.3367e+00 0.0000e+00 0.0000e+00 +418 8.3567e+00 0.0000e+00 0.0000e+00 +419 8.3768e+00 0.0000e+00 0.0000e+00 +420 8.3968e+00 0.0000e+00 0.0000e+00 +421 8.4168e+00 0.0000e+00 0.0000e+00 +422 8.4369e+00 0.0000e+00 0.0000e+00 +423 8.4569e+00 0.0000e+00 0.0000e+00 +424 8.4770e+00 0.0000e+00 0.0000e+00 +425 8.4970e+00 0.0000e+00 0.0000e+00 +426 8.5170e+00 0.0000e+00 0.0000e+00 +427 8.5371e+00 0.0000e+00 0.0000e+00 +428 8.5571e+00 0.0000e+00 0.0000e+00 +429 8.5772e+00 0.0000e+00 0.0000e+00 +430 8.5972e+00 0.0000e+00 0.0000e+00 +431 8.6172e+00 0.0000e+00 0.0000e+00 +432 8.6373e+00 0.0000e+00 0.0000e+00 +433 8.6573e+00 0.0000e+00 0.0000e+00 +434 8.6774e+00 0.0000e+00 0.0000e+00 +435 8.6974e+00 0.0000e+00 0.0000e+00 +436 8.7174e+00 0.0000e+00 0.0000e+00 +437 8.7375e+00 0.0000e+00 0.0000e+00 +438 8.7575e+00 0.0000e+00 0.0000e+00 +439 8.7776e+00 0.0000e+00 0.0000e+00 +440 8.7976e+00 0.0000e+00 0.0000e+00 +441 8.8176e+00 0.0000e+00 0.0000e+00 +442 8.8377e+00 0.0000e+00 0.0000e+00 +443 8.8577e+00 0.0000e+00 0.0000e+00 +444 8.8778e+00 0.0000e+00 0.0000e+00 +445 8.8978e+00 0.0000e+00 0.0000e+00 +446 8.9178e+00 0.0000e+00 0.0000e+00 +447 8.9379e+00 0.0000e+00 0.0000e+00 +448 8.9579e+00 0.0000e+00 0.0000e+00 +449 8.9780e+00 0.0000e+00 0.0000e+00 +450 8.9980e+00 0.0000e+00 0.0000e+00 +451 9.0180e+00 0.0000e+00 0.0000e+00 +452 9.0381e+00 0.0000e+00 0.0000e+00 +453 9.0581e+00 0.0000e+00 0.0000e+00 +454 9.0782e+00 0.0000e+00 0.0000e+00 +455 9.0982e+00 0.0000e+00 0.0000e+00 +456 9.1182e+00 0.0000e+00 0.0000e+00 +457 9.1383e+00 0.0000e+00 0.0000e+00 +458 9.1583e+00 0.0000e+00 0.0000e+00 +459 9.1784e+00 0.0000e+00 0.0000e+00 +460 9.1984e+00 0.0000e+00 0.0000e+00 +461 9.2184e+00 0.0000e+00 0.0000e+00 +462 9.2385e+00 0.0000e+00 0.0000e+00 +463 9.2585e+00 0.0000e+00 0.0000e+00 +464 9.2786e+00 0.0000e+00 0.0000e+00 +465 9.2986e+00 0.0000e+00 0.0000e+00 +466 9.3186e+00 0.0000e+00 0.0000e+00 +467 9.3387e+00 0.0000e+00 0.0000e+00 +468 9.3587e+00 0.0000e+00 0.0000e+00 +469 9.3788e+00 0.0000e+00 0.0000e+00 +470 9.3988e+00 0.0000e+00 0.0000e+00 +471 9.4188e+00 0.0000e+00 0.0000e+00 +472 9.4389e+00 0.0000e+00 0.0000e+00 +473 9.4589e+00 0.0000e+00 0.0000e+00 +474 9.4790e+00 0.0000e+00 0.0000e+00 +475 9.4990e+00 0.0000e+00 0.0000e+00 +476 9.5190e+00 0.0000e+00 0.0000e+00 +477 9.5391e+00 0.0000e+00 0.0000e+00 +478 9.5591e+00 0.0000e+00 0.0000e+00 +479 9.5792e+00 0.0000e+00 0.0000e+00 +480 9.5992e+00 0.0000e+00 0.0000e+00 +481 9.6192e+00 0.0000e+00 0.0000e+00 +482 9.6393e+00 0.0000e+00 0.0000e+00 +483 9.6593e+00 0.0000e+00 0.0000e+00 +484 9.6794e+00 0.0000e+00 0.0000e+00 +485 9.6994e+00 0.0000e+00 0.0000e+00 +486 9.7194e+00 0.0000e+00 0.0000e+00 +487 9.7395e+00 0.0000e+00 0.0000e+00 +488 9.7595e+00 0.0000e+00 0.0000e+00 +489 9.7796e+00 0.0000e+00 0.0000e+00 +490 9.7996e+00 0.0000e+00 0.0000e+00 +491 9.8196e+00 0.0000e+00 0.0000e+00 +492 9.8397e+00 0.0000e+00 0.0000e+00 +493 9.8597e+00 0.0000e+00 0.0000e+00 +494 9.8798e+00 0.0000e+00 0.0000e+00 +495 9.8998e+00 0.0000e+00 0.0000e+00 +496 9.9198e+00 0.0000e+00 0.0000e+00 +497 9.9399e+00 0.0000e+00 0.0000e+00 +498 9.9599e+00 0.0000e+00 0.0000e+00 +499 9.9800e+00 0.0000e+00 0.0000e+00 +500 1.0000e+01 0.0000e+00 0.0000e+00 + + diff --git a/examples/USER/misc/local_density/benzene_water/log.04Sep19.g++.1 b/examples/USER/misc/local_density/benzene_water/log.04Sep19.g++.1 new file mode 100644 index 0000000000..928906edbd --- /dev/null +++ b/examples/USER/misc/local_density/benzene_water/log.04Sep19.g++.1 @@ -0,0 +1,267 @@ +LAMMPS (7 Aug 2019) +# LAMMPS input file for 26.5% benzene mole fraction solution +# with 380 benzene and 1000 water molecules, +# using all possible local density potentials +# between benzene and water +# +# Author: Tanmoy Sanyal, Shell Group, UC Santa Barbara +# +# Refer: Sanyal and Shell, JPC-B, 2018, 122 (21), 5678-5693 + + + +# Initialize simulation box +dimension 3 +boundary p p p +units real +atom_style molecular + +# Set potential styles +pair_style hybrid/overlay table spline 500 local/density + +# Read molecule data and set initial velocities +read_data benzene_water.data + orthogonal box = (-12.865 -12.865 -64.829) to (12.865 12.865 64.829) + 1 by 1 by 8 MPI processor grid + reading atoms ... + 1380 atoms + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.000566959 secs + read_data CPU = 0.00661397 secs +velocity all create 3.0000e+02 16611 rot yes dist gaussian + +# Assign potentials +pair_coeff 1 1 table benzene_water.pair.table PairBB +WARNING: 33 of 500 force values in table are inconsistent with -dE/dr. + Should only be flagged at inflection points (../pair_table.cpp:483) +WARNING: 150 of 500 distance values in table with relative error + over 1e-06 to re-computed values (../pair_table.cpp:492) +pair_coeff 1 2 table benzene_water.pair.table PairWW +WARNING: 61 of 500 force values in table are inconsistent with -dE/dr. + Should only be flagged at inflection points (../pair_table.cpp:483) +WARNING: 90 of 500 distance values in table with relative error + over 1e-06 to re-computed values (../pair_table.cpp:492) +pair_coeff 2 2 table benzene_water.pair.table PairBW +WARNING: 108 of 500 force values in table are inconsistent with -dE/dr. + Should only be flagged at inflection points (../pair_table.cpp:483) +WARNING: 135 of 500 distance values in table with relative error + over 1e-06 to re-computed values (../pair_table.cpp:492) +pair_coeff * * local/density benzene_water.localdensity.table + +# Recentering during minimization and equilibration +fix recentering all recenter 0.0 0.0 0.0 units box + +# Thermostat & time integration +timestep 2.0 +thermo 100 +thermo_style custom temp ke pe etotal ebond eangle edihed evdwl + +# Minimization +minimize 1.e-4 0.0 10000 10000 +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:168) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 15.25 + ghost atom cutoff = 15.25 + binsize = 7.625, bins = 4 4 18 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair table, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair local/density, perpetual, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 8.061 | 8.32 | 8.674 Mbytes +Temp KinEng PotEng TotEng E_bond E_angle E_dihed E_vdwl + 300 1233.1611 4162.3053 5395.4665 0 0 0 4162.3053 + 300 1233.1611 2275.526 3508.6871 0 0 0 2275.526 +Loop time of 0.352822 on 8 procs for 40 steps with 1380 atoms + +71.3% CPU use with 8 MPI tasks x no OpenMP threads + +Minimization stats: + Stopping criterion = linesearch alpha is zero + Energy initial, next-to-last, final = + 4162.30533361 2208.86525108 2275.52597861 + Force two-norm initial, final = 259.364 69.3915 + Force max component initial, final = 22.2077 8.31436 + Final line search alpha, max atom move = 2.90022e-12 2.41135e-11 + Iterations, force evaluations = 40 110 + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.053192 | 0.23903 | 0.32779 | 17.2 | 67.75 +Bond | 9.0599e-06 | 1.6302e-05 | 2.5272e-05 | 0.0 | 0.00 +Neigh | 0.00044513 | 0.0023614 | 0.0063851 | 5.1 | 0.67 +Comm | 0.015469 | 0.090432 | 0.20295 | 20.0 | 25.63 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 0.02098 | | | 5.95 + +Nlocal: 172.5 ave 348 max 72 min +Histogram: 5 0 0 0 0 0 0 0 1 2 +Nghost: 2193.62 ave 4352 max 932 min +Histogram: 3 0 0 2 0 0 2 0 0 1 +Neighs: 9700.5 ave 20535 max 3685 min +Histogram: 5 0 0 0 0 0 0 1 0 2 + +Total # of neighbors = 77604 +Ave neighs/atom = 56.2348 +Ave special neighs/atom = 0 +Neighbor list builds = 2 +Dangerous builds = 0 + +# Set up integration parameters +fix timeintegration all nve +fix thermostat all langevin 3.0000e+02 3.0000e+02 1.0000e+02 81890 + +# Equilibration (for realistic results, run for 5000000 steps) +reset_timestep 0 +run 5000 +WARNING: Fix recenter should come after all other integration fixes (../fix_recenter.cpp:131) +Per MPI rank memory allocation (min/avg/max) = 6.936 | 7.195 | 7.552 Mbytes +Temp KinEng PotEng TotEng E_bond E_angle E_dihed E_vdwl + 300 1233.1611 2866.9109 4100.0721 0 0 0 2866.9109 + 273.33541 1123.5553 3983.2007 5106.756 0 0 0 3983.2007 + 293.68078 1207.1857 3319.6601 4526.8458 0 0 0 3319.6601 + 314.21462 1291.5908 3389.2178 4680.8086 0 0 0 3389.2178 + 323.77563 1330.8917 3332.9828 4663.8745 0 0 0 3332.9828 + 302.5902 1243.8082 3461.7692 4705.5774 0 0 0 3461.7692 + 295.39324 1214.2249 3411.5727 4625.7976 0 0 0 3411.5727 + 320.52341 1317.5234 3453.1931 4770.7164 0 0 0 3453.1931 + 312.00777 1282.5195 3403.3443 4685.8638 0 0 0 3403.3443 + 307.96774 1265.9128 3429.7809 4695.6937 0 0 0 3429.7809 + 294.75922 1211.6187 3388.8404 4600.4591 0 0 0 3388.8404 + 311.24567 1279.3869 3514.9603 4794.3472 0 0 0 3514.9603 + 306.6152 1260.3531 3447.2011 4707.5542 0 0 0 3447.2011 + 305.23306 1254.6718 3375.5092 4630.181 0 0 0 3375.5092 + 321.62889 1322.0675 3460.2581 4782.3256 0 0 0 3460.2581 + 316.37725 1300.4804 3437.0312 4737.5116 0 0 0 3437.0312 + 322.90522 1327.3139 3389.1262 4716.44 0 0 0 3389.1262 + 307.57893 1264.3146 3359.8491 4624.1637 0 0 0 3359.8491 + 302.22607 1242.3115 3406.1711 4648.4826 0 0 0 3406.1711 + 302.73997 1244.4239 3220.2582 4464.6821 0 0 0 3220.2582 + 303.66194 1248.2137 3318.4629 4566.6765 0 0 0 3318.4629 + 308.73862 1269.0815 3369.5894 4638.671 0 0 0 3369.5894 + 315.60294 1297.2976 3411.2405 4708.5381 0 0 0 3411.2405 + 310.0113 1274.3129 3360.1054 4634.4183 0 0 0 3360.1054 + 302.36229 1242.8714 3326.9845 4569.8559 0 0 0 3326.9845 + 317.78659 1306.2735 3355.4976 4661.7711 0 0 0 3355.4976 + 302.50479 1243.4571 3317.6846 4561.1417 0 0 0 3317.6846 + 304.29249 1250.8056 3423.5068 4674.3124 0 0 0 3423.5068 + 305.99948 1257.8222 3432.9395 4690.7617 0 0 0 3432.9395 + 309.93363 1273.9937 3393.657 4667.6506 0 0 0 3393.657 + 316.14884 1299.5415 3463.0636 4762.6051 0 0 0 3463.0636 + 300.38817 1234.7567 3309.2495 4544.0062 0 0 0 3309.2495 + 311.05735 1278.6128 3304.4418 4583.0546 0 0 0 3304.4418 + 311.11872 1278.865 3291.1891 4570.0542 0 0 0 3291.1891 + 315.74338 1297.8749 3341.3063 4639.1812 0 0 0 3341.3063 + 297.5658 1223.1552 3316.3862 4539.5414 0 0 0 3316.3862 + 311.79033 1281.6257 3357.4556 4639.0813 0 0 0 3357.4556 + 310.93666 1278.1167 3414.7694 4692.8861 0 0 0 3414.7694 + 307.37298 1263.468 3337.3889 4600.8569 0 0 0 3337.3889 + 298.84185 1228.4005 3329.6173 4558.0178 0 0 0 3329.6173 + 310.54684 1276.5143 3351.0852 4627.5995 0 0 0 3351.0852 + 300.0871 1233.5191 3302.2315 4535.7506 0 0 0 3302.2315 + 304.69078 1252.4427 3324.2508 4576.6935 0 0 0 3324.2508 + 313.50714 1288.6827 3330.4088 4619.0915 0 0 0 3330.4088 + 329.80018 1355.6559 3301.86 4657.5159 0 0 0 3301.86 + 304.57609 1251.9713 3365.2938 4617.2652 0 0 0 3365.2938 + 308.73584 1269.0701 3344.4155 4613.4856 0 0 0 3344.4155 + 306.90951 1261.5629 3304.4698 4566.0327 0 0 0 3304.4698 + 308.85761 1269.5707 3392.1511 4661.7218 0 0 0 3392.1511 + 302.78788 1244.6208 3317.0849 4561.7057 0 0 0 3317.0849 + 321.68092 1322.2813 3321.5755 4643.8568 0 0 0 3321.5755 +Loop time of 16.3061 on 8 procs for 5000 steps with 1380 atoms + +Performance: 52.986 ns/day, 0.453 hours/ns, 306.634 timesteps/s +69.6% CPU use with 8 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.1872 | 10.542 | 14.607 | 116.7 | 64.65 +Bond | 0.00044084 | 0.00069669 | 0.00095081 | 0.0 | 0.00 +Neigh | 0.026948 | 0.15225 | 0.44344 | 42.0 | 0.93 +Comm | 0.63452 | 4.2953 | 9.49 | 133.9 | 26.34 +Output | 0.0016391 | 0.012378 | 0.050919 | 13.9 | 0.08 +Modify | 0.45894 | 1.2107 | 4.4629 | 116.4 | 7.42 +Other | | 0.09292 | | | 0.57 + +Nlocal: 172.5 ave 380 max 70 min +Histogram: 5 0 0 0 0 0 0 1 1 1 +Nghost: 2213 ave 4440 max 903 min +Histogram: 3 0 0 2 0 0 2 0 0 1 +Neighs: 10042.5 ave 24051 max 3500 min +Histogram: 5 0 0 0 0 0 0 1 1 1 + +Total # of neighbors = 80340 +Ave neighs/atom = 58.2174 +Ave special neighs/atom = 0 +Neighbor list builds = 123 +Dangerous builds = 1 + +# Turn off recentering during production phase +unfix recentering + +# Setup trajectory output +dump myDump all custom 100 benzene_water.lammpstrj.gz id type x y z element +dump_modify myDump element B W +dump_modify myDump sort id + +# Production (for realistic results, run for 10000000 steps) +reset_timestep 0 +run 1000 +Per MPI rank memory allocation (min/avg/max) = 8.232 | 8.492 | 8.851 Mbytes +Temp KinEng PotEng TotEng E_bond E_angle E_dihed E_vdwl + 321.68092 1322.2813 3784.0834 5106.3647 0 0 0 3784.0834 + 310.59763 1276.7231 3318.3283 4595.0513 0 0 0 3318.3283 + 303.39445 1247.1141 3324.1191 4571.2332 0 0 0 3324.1191 + 311.37275 1279.9092 3305.0901 4584.9993 0 0 0 3305.0901 + 311.29071 1279.572 3248.216 4527.788 0 0 0 3248.216 + 314.53456 1292.906 3283.4563 4576.3623 0 0 0 3283.4563 + 316.52595 1301.0916 3258.9171 4560.0087 0 0 0 3258.9171 + 318.92447 1310.9509 3235.6256 4546.5765 0 0 0 3235.6256 + 311.79212 1281.6331 3308.099 4589.7321 0 0 0 3308.099 + 305.52477 1255.8709 3267.6907 4523.5616 0 0 0 3267.6907 + 301.07457 1237.5782 3206.3997 4443.9779 0 0 0 3206.3997 +Loop time of 4.44139 on 8 procs for 1000 steps with 1380 atoms + +Performance: 38.907 ns/day, 0.617 hours/ns, 225.155 timesteps/s +60.8% CPU use with 8 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.656 | 2.5078 | 3.5775 | 57.7 | 56.46 +Bond | 0.00013375 | 0.0001854 | 0.0002377 | 0.0 | 0.00 +Neigh | 0.0048757 | 0.029188 | 0.090432 | 18.9 | 0.66 +Comm | 0.51836 | 1.4427 | 2.6285 | 56.9 | 32.48 +Output | 0.083084 | 0.089199 | 0.10333 | 2.3 | 2.01 +Modify | 0.0087376 | 0.019705 | 0.038437 | 8.4 | 0.44 +Other | | 0.3526 | | | 7.94 + +Nlocal: 172.5 ave 388 max 69 min +Histogram: 5 0 0 0 0 0 0 2 0 1 +Nghost: 2207.88 ave 4429 max 896 min +Histogram: 3 0 0 2 0 0 2 0 0 1 +Neighs: 10094.1 ave 24847 max 3403 min +Histogram: 5 0 0 0 0 0 1 1 0 1 + +Total # of neighbors = 80753 +Ave neighs/atom = 58.5167 +Ave special neighs/atom = 0 +Neighbor list builds = 23 +Dangerous builds = 0 + + +Total wall time: 0:00:21 diff --git a/examples/USER/misc/local_density/methanol_implicit_water/log.04Sep19.g++.1 b/examples/USER/misc/local_density/methanol_implicit_water/log.04Sep19.g++.1 new file mode 100644 index 0000000000..618e994946 --- /dev/null +++ b/examples/USER/misc/local_density/methanol_implicit_water/log.04Sep19.g++.1 @@ -0,0 +1,226 @@ +LAMMPS (7 Aug 2019) +# LAMMPS input file for 50.0% methanol mole fraction solution +# with 2500 methanol molecules in implicit water. +# +# +# Author: David Rosenberger, van der Vegt Group, TU Darmstadt +# +# Refer: Rosenberger, Sanyal, Shell, van der Vegt, J. Chem. Theory Comput. 15, 2881-2895 (2019) + + +# Initialize simulation box +dimension 3 +boundary p p p +units real +atom_style molecular + +# Set potential styles +pair_style hybrid/overlay table spline 500 local/density + +# Read molecule data and set initial velocities +read_data methanol_implicit_water.data + orthogonal box = (-31.123 -31.123 -31.123) to (31.123 31.123 31.123) + 2 by 2 by 2 MPI processor grid + reading atoms ... + 2500 atoms + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.00063014 secs + read_data CPU = 0.00599909 secs +velocity all create 3.0000e+02 12142 rot yes dist gaussian + +# Assign potentials +pair_coeff 1 1 table methanol_implicit_water.pair.table PairMM +WARNING: 93 of 500 force values in table are inconsistent with -dE/dr. + Should only be flagged at inflection points (../pair_table.cpp:483) +WARNING: 254 of 500 distance values in table with relative error + over 1e-06 to re-computed values (../pair_table.cpp:492) +pair_coeff * * local/density methanol_implicit_water.localdensity.table + + + + +#Recentering during minimization and equilibration +fix recentering all recenter 0.0 0.0 0.0 units box + +#Thermostat & time integration +timestep 1.0 +thermo 100 +thermo_style custom etotal ke pe temp evdwl + +#minimization +minimize 1.e-4 0.0 1000 1000 +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:168) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 17 + ghost atom cutoff = 17 + binsize = 8.5, bins = 8 8 8 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair table, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard + (2) pair local/density, perpetual, copy from (1) + attributes: half, newton on + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 7.411 | 7.411 | 7.412 Mbytes +TotEng KinEng PotEng Temp E_vdwl + 1470.3564 2234.7133 -764.35689 300 -764.35689 + 46.496766 2234.7133 -2188.2165 300 -2188.2165 + 7.9030246 2234.7133 -2226.8103 300 -2226.8103 +Loop time of 0.463996 on 8 procs for 121 steps with 2500 atoms + +91.4% CPU use with 8 MPI tasks x no OpenMP threads + +Minimization stats: + Stopping criterion = linesearch alpha is zero + Energy initial, next-to-last, final = + -764.356892369 -2227.85589084 -2226.81026984 + Force two-norm initial, final = 134.911 3.83896 + Force max component initial, final = 14.1117 1.07422 + Final line search alpha, max atom move = 5.06747e-10 5.44356e-10 + Iterations, force evaluations = 121 154 + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.41442 | 0.41976 | 0.42434 | 0.5 | 90.47 +Bond | 1.1683e-05 | 2.0713e-05 | 3.5048e-05 | 0.0 | 0.00 +Neigh | 0.0084722 | 0.0090862 | 0.010038 | 0.5 | 1.96 +Comm | 0.022712 | 0.028157 | 0.034072 | 1.9 | 6.07 +Output | 3.1948e-05 | 3.6925e-05 | 6.6996e-05 | 0.0 | 0.01 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 0.006937 | | | 1.50 + +Nlocal: 312.5 ave 333 max 299 min +Histogram: 2 2 0 0 1 0 2 0 0 1 +Nghost: 2546 ave 2580 max 2517 min +Histogram: 1 1 0 3 0 1 0 0 0 2 +Neighs: 33215.4 ave 37251 max 29183 min +Histogram: 1 0 0 1 2 2 0 1 0 1 + +Total # of neighbors = 265723 +Ave neighs/atom = 106.289 +Ave special neighs/atom = 0 +Neighbor list builds = 6 +Dangerous builds = 0 + +#set up integration parameters +fix timeintegration all nve +fix thermostat all langevin 3.0000e+02 3.0000e+02 1.0000e+02 59915 + +#Equilibration (for realistic results, run for 2000000 steps) +reset_timestep 0 +thermo 200 +thermo_style custom etotal ke pe temp evdwl + +#run equilibration +run 2000 +WARNING: Fix recenter should come after all other integration fixes (../fix_recenter.cpp:131) +Per MPI rank memory allocation (min/avg/max) = 6.286 | 6.286 | 6.287 Mbytes +TotEng KinEng PotEng Temp E_vdwl + 177.26822 2234.7133 -2057.4451 300 -2057.4451 + 736.24287 2151.2608 -1415.0179 288.79688 -1415.0179 + 963.07617 2090.6433 -1127.5671 280.65926 -1127.5671 + 1148.9049 2173.1327 -1024.2279 291.73309 -1024.2279 + 1303.6409 2279.8586 -976.21767 306.06055 -976.21767 + 1355.42 2281.0383 -925.61826 306.21892 -925.61826 + 1394.5206 2276.2093 -881.68863 305.57064 -881.68863 + 1346.9764 2215.2973 -868.32091 297.3935 -868.32091 + 1381.3654 2248.8061 -867.44063 301.89189 -867.44063 + 1315.8059 2189.3193 -873.51332 293.90606 -873.51332 + 1314.4456 2209.7431 -895.29752 296.64787 -895.29752 +Loop time of 6.38989 on 8 procs for 2000 steps with 2500 atoms + +Performance: 27.043 ns/day, 0.887 hours/ns, 312.994 timesteps/s +80.5% CPU use with 8 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 5.2693 | 5.3572 | 5.457 | 2.1 | 83.84 +Bond | 0.00028825 | 0.00033835 | 0.00039148 | 0.0 | 0.01 +Neigh | 0.0296 | 0.032337 | 0.035071 | 0.9 | 0.51 +Comm | 0.64679 | 0.73397 | 0.80847 | 5.2 | 11.49 +Output | 0.00033498 | 0.00051582 | 0.0015228 | 0.0 | 0.01 +Modify | 0.16395 | 0.18919 | 0.21056 | 3.9 | 2.96 +Other | | 0.07636 | | | 1.19 + +Nlocal: 312.5 ave 337 max 295 min +Histogram: 2 2 0 1 0 0 0 1 1 1 +Nghost: 2551.62 ave 2582 max 2525 min +Histogram: 2 1 0 0 1 1 1 0 1 1 +Neighs: 33241.8 ave 37659 max 29705 min +Histogram: 2 0 0 2 2 0 0 0 1 1 + +Total # of neighbors = 265934 +Ave neighs/atom = 106.374 +Ave special neighs/atom = 0 +Neighbor list builds = 21 +Dangerous builds = 0 + +#turn off recentering during production run +unfix recentering + + +#setup trajectory output +dump myDump all custom 100 methanol_implicit_water.lammpstrj.gz id type x y z element +dump_modify myDump element M +dump_modify myDump sort id + +#run production (for realistic results, run for 10000000 steps) +reset_timestep 0 +thermo 1000 +thermo_style custom etotal ke pe temp evdwl +run 10000 +Per MPI rank memory allocation (min/avg/max) = 7.588 | 7.589 | 7.589 Mbytes +TotEng KinEng PotEng Temp E_vdwl + 1442.5428 2209.7431 -767.20027 296.64787 -767.20027 + 1391.8624 2262.6889 -870.82656 303.7556 -870.82656 + 1375.914 2244.6176 -868.7036 301.3296 -868.7036 + 1345.9064 2227.2324 -881.32599 298.99573 -881.32599 + 1379.2334 2278.1156 -898.88222 305.82657 -898.88222 + 1389.7928 2255.8062 -866.01341 302.83163 -866.01341 + 1380.4549 2258.2108 -877.75582 303.15443 -877.75582 + 1380.8489 2256.9432 -876.09428 302.98426 -876.09428 + 1326.5151 2225.7408 -899.22577 298.79549 -899.22577 + 1376.6025 2253.0128 -876.41028 302.45662 -876.41028 + 1331.0008 2218.1033 -887.10258 297.77019 -887.10258 +Loop time of 25.4591 on 8 procs for 10000 steps with 2500 atoms + +Performance: 33.937 ns/day, 0.707 hours/ns, 392.787 timesteps/s +89.3% CPU use with 8 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 21.635 | 21.916 | 22.237 | 3.9 | 86.08 +Bond | 0.0011308 | 0.0013149 | 0.0016932 | 0.5 | 0.01 +Neigh | 0.14593 | 0.15675 | 0.16667 | 1.9 | 0.62 +Comm | 1.3789 | 1.7502 | 1.9558 | 13.7 | 6.87 +Output | 0.34664 | 0.82927 | 1.2013 | 32.8 | 3.26 +Modify | 0.24904 | 0.25842 | 0.26907 | 1.2 | 1.02 +Other | | 0.5475 | | | 2.15 + +Nlocal: 312.5 ave 327 max 298 min +Histogram: 2 0 0 1 1 0 1 1 1 1 +Nghost: 2575 ave 2601 max 2559 min +Histogram: 2 0 3 1 0 0 0 0 1 1 +Neighs: 33223.2 ave 35920 max 30303 min +Histogram: 1 1 1 1 0 1 0 0 0 3 + +Total # of neighbors = 265786 +Ave neighs/atom = 106.314 +Ave special neighs/atom = 0 +Neighbor list builds = 103 +Dangerous builds = 0 + + +Total wall time: 0:00:32 diff --git a/examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.data b/examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.data new file mode 100644 index 0000000000..1dd9eccc7c --- /dev/null +++ b/examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.data @@ -0,0 +1,2525 @@ +LAMMPS Description + + 2500 atoms + 0 bonds + 0 angles + 0 dihedrals + 0 impropers + + 1 atom types + 0 bond types + 0 angle types + 0 dihedral types + 0 improper types + +-3.1123e+01 3.1123e+01 xlo xhi +-3.1123e+01 3.1123e+01 ylo yhi +-3.1123e+01 3.1123e+01 zlo zhi + +Masses + + 1 32.0000 + +Atoms + + 1 1 1 -1.20055e+01 1.00800e+01 5.26000e+00 + 2 2 1 -5.60545e+00 2.34700e+01 3.10400e+01 + 3 3 1 1.33900e+01 1.50700e+01 -1.56654e+01 + 4 4 1 -3.57545e+00 -1.71754e+01 -7.17545e+00 + 5 5 1 1.09000e+01 1.67100e+01 -2.57554e+01 + 6 6 1 1.96400e+01 -6.07545e+00 -2.72454e+01 + 7 7 1 -7.56545e+00 -1.92354e+01 -2.37154e+01 + 8 8 1 -5.72545e+00 -2.45654e+01 -2.34154e+01 + 9 9 1 -1.71655e+01 2.46700e+01 1.76300e+01 + 10 10 1 8.06000e+00 4.73000e+00 -7.34545e+00 + 11 11 1 2.32300e+01 -2.01054e+01 1.78600e+01 + 12 12 1 -2.05955e+01 1.44500e+01 -6.35545e+00 + 13 13 1 1.80700e+01 2.19800e+01 -4.22545e+00 + 14 14 1 -1.26355e+01 -2.92545e+00 -2.09154e+01 + 15 15 1 -2.05255e+01 -2.12254e+01 -2.21454e+01 + 16 16 1 6.69000e+00 2.60700e+01 1.22700e+01 + 17 17 1 1.08600e+01 -2.00054e+01 -2.82854e+01 + 18 18 1 -1.89255e+01 3.30000e-01 1.15200e+01 + 19 19 1 1.85400e+01 1.31900e+01 -7.98545e+00 + 20 20 1 -1.49055e+01 1.45900e+01 -2.19354e+01 + 21 21 1 1.91400e+01 -2.43054e+01 -2.54454e+01 + 22 22 1 1.04200e+01 -2.94954e+01 -2.95654e+01 + 23 23 1 -7.37545e+00 2.08500e+01 2.58700e+01 + 24 24 1 1.25600e+01 2.80000e-01 -1.38054e+01 + 25 25 1 -2.11055e+01 1.01500e+01 3.10000e+01 + 26 26 1 2.78800e+01 -1.10254e+01 1.86300e+01 + 27 27 1 2.17000e+00 -3.01454e+01 1.67700e+01 + 28 28 1 2.76700e+01 1.44600e+01 -1.37954e+01 + 29 29 1 2.15200e+01 -3.45545e+00 4.45000e+00 + 30 30 1 -8.15545e+00 1.89500e+01 -2.73954e+01 + 31 31 1 -5.89545e+00 -1.45954e+01 2.62100e+01 + 32 32 1 2.29600e+01 -1.23154e+01 2.91800e+01 + 33 33 1 4.87000e+00 -2.65754e+01 8.54000e+00 + 34 34 1 1.93000e+00 -1.43554e+01 1.85200e+01 + 35 35 1 -2.78355e+01 -2.84754e+01 -2.38454e+01 + 36 36 1 3.08000e+00 -2.54354e+01 1.99500e+01 + 37 37 1 2.12700e+01 -6.71545e+00 1.28000e+00 + 38 38 1 -3.45545e+00 -2.41754e+01 1.49600e+01 + 39 39 1 2.54700e+01 1.63000e+01 6.99000e+00 + 40 40 1 -1.80855e+01 2.44800e+01 4.97000e+00 + 41 41 1 1.28400e+01 -1.15446e-01 -2.87954e+01 + 42 42 1 -7.86545e+00 2.17000e+00 1.67100e+01 + 43 43 1 2.42300e+01 -8.29545e+00 2.04200e+01 + 44 44 1 -4.35545e+00 4.68000e+00 2.66200e+01 + 45 45 1 -1.53655e+01 -1.15154e+01 1.35000e+00 + 46 46 1 -2.67255e+01 -2.33054e+01 -3.01254e+01 + 47 47 1 1.13800e+01 -3.05554e+01 -2.18054e+01 + 48 48 1 2.05100e+01 1.55100e+01 -6.31545e+00 + 49 49 1 -7.45545e+00 2.28000e+00 -2.04754e+01 + 50 50 1 -6.11545e+00 2.97900e+01 -2.21154e+01 + 51 51 1 -1.21355e+01 2.64200e+01 1.95100e+01 + 52 52 1 1.78800e+01 1.04000e+00 2.19500e+01 + 53 53 1 -1.64755e+01 1.01300e+01 1.40700e+01 + 54 54 1 -1.92955e+01 -2.53654e+01 -2.21754e+01 + 55 55 1 2.55800e+01 -2.55154e+01 3.60000e-01 + 56 56 1 1.79800e+01 1.51100e+01 2.99700e+01 + 57 57 1 2.65400e+01 2.17200e+01 2.76100e+01 + 58 58 1 -3.43545e+00 9.65000e+00 2.66700e+01 + 59 59 1 -1.77455e+01 3.02400e+01 1.95100e+01 + 60 60 1 2.93400e+01 3.01500e+01 -7.77545e+00 + 61 61 1 1.95600e+01 -1.14354e+01 -2.76154e+01 + 62 62 1 2.69600e+01 -1.91054e+01 1.92300e+01 + 63 63 1 -2.29855e+01 1.28800e+01 2.24600e+01 + 64 64 1 2.91000e+01 -9.55446e-01 1.35600e+01 + 65 65 1 2.06800e+01 -1.73545e+00 -1.27454e+01 + 66 66 1 -5.86545e+00 -1.14854e+01 1.16000e+01 + 67 67 1 2.67700e+01 -2.98654e+01 -1.12545e+00 + 68 68 1 -1.23655e+01 -2.27554e+01 -2.15654e+01 + 69 69 1 -4.60545e+00 2.12800e+01 -7.00000e-02 + 70 70 1 -5.55450e-01 -7.06545e+00 1.73000e+01 + 71 71 1 -5.79545e+00 -1.63354e+01 -2.29654e+01 + 72 72 1 4.00000e-02 1.56000e+00 1.93200e+01 + 73 73 1 3.02400e+01 -1.67854e+01 -2.48154e+01 + 74 74 1 -3.09355e+01 1.86700e+01 -1.22454e+01 + 75 75 1 -1.19955e+01 -8.34545e+00 2.04400e+01 + 76 76 1 3.89000e+00 -2.16854e+01 1.56300e+01 + 77 77 1 2.14900e+01 -1.14254e+01 8.10000e-01 + 78 78 1 2.74400e+01 1.13900e+01 -2.49545e+00 + 79 79 1 -2.99545e+00 -1.55154e+01 -1.94554e+01 + 80 80 1 2.07000e+00 9.21000e+00 -1.05154e+01 + 81 81 1 6.50000e-01 2.59100e+01 -2.39854e+01 + 82 82 1 -1.04255e+01 1.96100e+01 8.64000e+00 + 83 83 1 8.40000e+00 -1.56954e+01 8.10000e-01 + 84 84 1 7.39000e+00 -2.82254e+01 -4.90545e+00 + 85 85 1 1.14500e+01 -1.95054e+01 -7.24545e+00 + 86 86 1 2.47300e+01 -4.21545e+00 -1.81254e+01 + 87 87 1 1.06900e+01 1.46200e+01 -1.34754e+01 + 88 88 1 6.61000e+00 2.26100e+01 -1.62454e+01 + 89 89 1 1.64000e+01 2.74400e+01 8.31000e+00 + 90 90 1 -6.37545e+00 -4.54457e-02 -4.79545e+00 + 91 91 1 2.96500e+01 -2.74154e+01 -1.73854e+01 + 92 92 1 1.20600e+01 9.85000e+00 -6.06545e+00 + 93 93 1 2.11300e+01 4.90000e-01 9.35000e+00 + 94 94 1 -2.94255e+01 -2.17554e+01 -1.88354e+01 + 95 95 1 9.67000e+00 -1.47154e+01 -1.30854e+01 + 96 96 1 -1.04355e+01 1.95200e+01 3.58000e+00 + 97 97 1 1.39600e+01 -7.77545e+00 2.75700e+01 + 98 98 1 1.22700e+01 4.36000e+00 -7.43545e+00 + 99 99 1 -3.38545e+00 1.87500e+01 2.47000e+01 + 100 100 1 -1.34055e+01 -2.84054e+01 -2.52554e+01 + 101 101 1 1.13900e+01 -7.85545e+00 1.70300e+01 + 102 102 1 -4.00000e-01 2.16200e+01 -1.14954e+01 + 103 103 1 6.01000e+00 -5.74545e+00 -3.00854e+01 + 104 104 1 -1.96655e+01 -1.18854e+01 -2.29854e+01 + 105 105 1 2.12000e+00 -2.43654e+01 2.36400e+01 + 106 106 1 -2.53545e+00 -2.06554e+01 2.50000e+00 + 107 107 1 -3.06555e+01 -1.93654e+01 2.53600e+01 + 108 108 1 2.62600e+01 1.55000e+01 -3.03054e+01 + 109 109 1 -1.65055e+01 -5.86545e+00 -5.13545e+00 + 110 110 1 -1.66055e+01 -2.46754e+01 -1.04554e+01 + 111 111 1 -2.04545e+00 2.36200e+01 3.02600e+01 + 112 112 1 7.06000e+00 2.82900e+01 -2.83545e+00 + 113 113 1 2.48200e+01 -2.12545e+00 -2.29854e+01 + 114 114 1 -2.89655e+01 2.78300e+01 6.81000e+00 + 115 115 1 1.70900e+01 1.87200e+01 1.21000e+01 + 116 116 1 -1.67855e+01 4.83000e+00 1.19600e+01 + 117 117 1 2.31900e+01 -2.17554e+01 -2.28054e+01 + 118 118 1 1.88400e+01 1.95000e+01 2.83400e+01 + 119 119 1 -9.95545e+00 1.46300e+01 -3.17545e+00 + 120 120 1 1.72000e+01 -2.67354e+01 -2.82654e+01 + 121 121 1 2.95000e+00 -1.74354e+01 1.54900e+01 + 122 122 1 8.31000e+00 -3.22545e+00 -2.01254e+01 + 123 123 1 2.75400e+01 6.82000e+00 1.73800e+01 + 124 124 1 2.94000e+01 2.36900e+01 2.82500e+01 + 125 125 1 1.44600e+01 -4.81545e+00 5.55000e+00 + 126 126 1 -2.36545e+00 3.55000e+00 -1.71154e+01 + 127 127 1 1.93600e+01 1.67700e+01 2.56200e+01 + 128 128 1 -9.42545e+00 2.30900e+01 -1.49154e+01 + 129 129 1 3.28000e+00 -2.20454e+01 -7.81545e+00 + 130 130 1 -9.65545e+00 1.68700e+01 -8.51545e+00 + 131 131 1 -2.03155e+01 2.34000e+01 -1.09754e+01 + 132 132 1 2.63100e+01 -8.29545e+00 -4.80545e+00 + 133 133 1 1.92100e+01 -2.67954e+01 1.41700e+01 + 134 134 1 4.99000e+00 1.44600e+01 2.29400e+01 + 135 135 1 4.54000e+00 1.01600e+01 3.10900e+01 + 136 136 1 -2.98255e+01 -1.41354e+01 6.76000e+00 + 137 137 1 -1.96355e+01 9.70000e+00 -1.20254e+01 + 138 138 1 4.51000e+00 -2.61354e+01 4.06000e+00 + 139 139 1 2.83500e+01 -9.33545e+00 2.76000e+00 + 140 140 1 1.62900e+01 -2.42454e+01 -9.21545e+00 + 141 141 1 1.90800e+01 6.11000e+00 3.07600e+01 + 142 142 1 6.91000e+00 1.34300e+01 -1.55654e+01 + 143 143 1 -1.40455e+01 6.54000e+00 -1.42654e+01 + 144 144 1 -2.58055e+01 -1.85754e+01 -5.04545e+00 + 145 145 1 -1.53545e+00 -6.00000e-02 -1.42154e+01 + 146 146 1 2.66500e+01 -1.94754e+01 2.72900e+01 + 147 147 1 2.43000e+00 9.24000e+00 -2.74854e+01 + 148 148 1 1.48300e+01 1.95700e+01 -9.12545e+00 + 149 149 1 -9.55450e-01 9.74000e+00 3.86000e+00 + 150 150 1 -2.44755e+01 2.04500e+01 2.88900e+01 + 151 151 1 1.95300e+01 -2.43854e+01 -2.16545e+00 + 152 152 1 -1.09455e+01 2.69200e+01 3.77000e+00 + 153 153 1 1.53800e+01 -3.76545e+00 3.07900e+01 + 154 154 1 1.67600e+01 1.62700e+01 3.40000e-01 + 155 155 1 8.93000e+00 1.94500e+01 -1.11354e+01 + 156 156 1 -6.31545e+00 1.26100e+01 -4.73545e+00 + 157 157 1 2.10000e+00 -1.34854e+01 7.48000e+00 + 158 158 1 -2.89155e+01 -1.09154e+01 -6.11545e+00 + 159 159 1 2.63300e+01 1.57700e+01 1.93100e+01 + 160 160 1 -2.52545e+00 -3.48545e+00 3.57000e+00 + 161 161 1 1.42800e+01 -7.95446e-01 -9.53545e+00 + 162 162 1 1.22800e+01 -2.67154e+01 -2.48654e+01 + 163 163 1 8.20000e+00 2.65600e+01 2.05400e+01 + 164 164 1 -1.84545e+00 -2.55854e+01 2.31200e+01 + 165 165 1 -7.61545e+00 2.56100e+01 -2.44854e+01 + 166 166 1 2.30000e+01 -1.11754e+01 5.15000e+00 + 167 167 1 -1.33545e+00 -2.37554e+01 2.01200e+01 + 168 168 1 -9.42545e+00 -5.70545e+00 -1.97854e+01 + 169 169 1 -1.70855e+01 1.65100e+01 2.09000e+01 + 170 170 1 1.31000e+00 1.66400e+01 2.15700e+01 + 171 171 1 -1.45055e+01 1.04700e+01 -1.30545e+00 + 172 172 1 9.88000e+00 1.13000e+01 -1.25354e+01 + 173 173 1 1.04600e+01 -2.47354e+01 -1.17545e+00 + 174 174 1 -1.69545e+00 1.84100e+01 5.75000e+00 + 175 175 1 2.24600e+01 -1.59354e+01 1.91400e+01 + 176 176 1 -8.75545e+00 1.22500e+01 1.82900e+01 + 177 177 1 4.01000e+00 -2.14754e+01 2.28400e+01 + 178 178 1 -1.66955e+01 6.24554e-01 5.77000e+00 + 179 179 1 -1.31655e+01 9.33000e+00 -2.86754e+01 + 180 180 1 1.70300e+01 -2.79654e+01 2.25900e+01 + 181 181 1 1.10000e+01 2.78400e+01 -3.04854e+01 + 182 182 1 -7.71545e+00 -5.27545e+00 6.51000e+00 + 183 183 1 -2.44855e+01 -2.84954e+01 2.70500e+01 + 184 184 1 -1.43555e+01 2.45000e+00 2.09200e+01 + 185 185 1 2.78600e+01 -2.01545e+00 4.68000e+00 + 186 186 1 2.29200e+01 -1.75654e+01 2.57100e+01 + 187 187 1 3.00000e+00 -1.10454e+01 -1.75545e+00 + 188 188 1 3.09800e+01 -7.41545e+00 -1.94054e+01 + 189 189 1 1.22700e+01 5.92000e+00 1.33000e+00 + 190 190 1 -2.61355e+01 1.75800e+01 -2.44754e+01 + 191 191 1 1.57000e+01 1.72800e+01 1.98700e+01 + 192 192 1 7.09000e+00 -1.20054e+01 -1.01054e+01 + 193 193 1 6.83000e+00 2.39000e+01 3.05700e+01 + 194 194 1 3.03100e+01 -7.11545e+00 -1.39254e+01 + 195 195 1 -2.43255e+01 -1.14554e+01 2.51400e+01 + 196 196 1 -1.70855e+01 -2.04954e+01 -1.11354e+01 + 197 197 1 -2.27255e+01 2.68300e+01 -2.55254e+01 + 198 198 1 2.93800e+01 -1.77545e+00 -1.87754e+01 + 199 199 1 -2.14545e+00 -2.81654e+01 1.86900e+01 + 200 200 1 6.96000e+00 1.00100e+01 2.71700e+01 + 201 201 1 -1.53255e+01 5.22000e+00 8.90000e-01 + 202 202 1 1.84900e+01 2.95800e+01 -2.82254e+01 + 203 203 1 -2.42255e+01 -2.38054e+01 8.18000e+00 + 204 204 1 2.15000e+00 1.13700e+01 2.53400e+01 + 205 205 1 -1.88355e+01 -3.03254e+01 -2.76954e+01 + 206 206 1 1.58300e+01 -2.00654e+01 1.22200e+01 + 207 207 1 -2.68655e+01 3.56000e+00 -2.15054e+01 + 208 208 1 8.45000e+00 -1.15446e-01 2.97500e+01 + 209 209 1 -2.89555e+01 9.44000e+00 -5.89545e+00 + 210 210 1 -7.37545e+00 -1.25154e+01 -3.03654e+01 + 211 211 1 -2.91155e+01 -2.54654e+01 1.57700e+01 + 212 212 1 -2.90555e+01 -1.25545e+00 -3.02554e+01 + 213 213 1 -9.68545e+00 1.88500e+01 -1.45554e+01 + 214 214 1 2.84200e+01 -1.89154e+01 -3.01554e+01 + 215 215 1 9.65000e+00 -6.89545e+00 2.45500e+01 + 216 216 1 -2.42755e+01 -1.45154e+01 -1.51054e+01 + 217 217 1 -1.12155e+01 1.82700e+01 1.68400e+01 + 218 218 1 -2.43255e+01 -2.32854e+01 2.69500e+01 + 219 219 1 2.04900e+01 -3.00754e+01 -9.01545e+00 + 220 220 1 2.49500e+01 -1.10254e+01 -9.03545e+00 + 221 221 1 -1.34455e+01 1.81900e+01 -6.45445e-01 + 222 222 1 1.57400e+01 2.45800e+01 1.83100e+01 + 223 223 1 -2.14155e+01 9.58000e+00 1.14600e+01 + 224 224 1 1.68200e+01 -7.32545e+00 -2.60754e+01 + 225 225 1 2.89500e+01 1.17700e+01 9.22000e+00 + 226 226 1 1.03000e+00 1.80600e+01 -2.96054e+01 + 227 227 1 1.92900e+01 2.09600e+01 -1.11654e+01 + 228 228 1 1.32400e+01 1.29500e+01 -2.67054e+01 + 229 229 1 2.60400e+01 1.60700e+01 3.47000e+00 + 230 230 1 5.60000e+00 1.22900e+01 -2.65954e+01 + 231 231 1 1.96100e+01 1.44800e+01 1.66200e+01 + 232 232 1 3.03000e+00 1.65900e+01 -2.13454e+01 + 233 233 1 3.11100e+01 1.77400e+01 3.69000e+00 + 234 234 1 2.03700e+01 1.44100e+01 -7.25445e-01 + 235 235 1 2.51400e+01 -5.76545e+00 2.88700e+01 + 236 236 1 5.56000e+00 -3.17545e+00 -4.09545e+00 + 237 237 1 1.46000e+01 -2.76354e+01 -2.15354e+01 + 238 238 1 -2.10000e-01 3.08100e+01 -2.98545e+00 + 239 239 1 2.19600e+01 9.17000e+00 2.89400e+01 + 240 240 1 -3.02555e+01 1.78900e+01 -2.30654e+01 + 241 241 1 -1.64855e+01 3.58000e+00 7.26000e+00 + 242 242 1 2.94800e+01 -3.02254e+01 7.30000e+00 + 243 243 1 -1.79655e+01 2.97600e+01 4.83000e+00 + 244 244 1 -2.35655e+01 1.11300e+01 2.88000e+01 + 245 245 1 5.73000e+00 -7.06545e+00 -9.55545e+00 + 246 246 1 -2.15155e+01 -2.51054e+01 2.76900e+01 + 247 247 1 2.63900e+01 1.94100e+01 1.39500e+01 + 248 248 1 -1.89855e+01 1.64200e+01 7.29000e+00 + 249 249 1 1.73800e+01 -1.07054e+01 -5.63545e+00 + 250 250 1 -8.08545e+00 -9.68545e+00 1.06000e+00 + 251 251 1 2.44200e+01 2.75200e+01 -1.28654e+01 + 252 252 1 -1.02655e+01 -1.51554e+01 -2.30954e+01 + 253 253 1 -1.41155e+01 -7.46545e+00 1.69800e+01 + 254 254 1 1.96000e+01 -1.03754e+01 2.81800e+01 + 255 255 1 -2.89545e+00 -2.15354e+01 -3.06545e+00 + 256 256 1 2.18400e+01 -2.93854e+01 4.10000e+00 + 257 257 1 -1.09955e+01 1.53800e+01 2.07500e+01 + 258 258 1 2.11900e+01 2.80600e+01 1.14500e+01 + 259 259 1 8.66000e+00 1.14900e+01 1.67500e+01 + 260 260 1 -1.59255e+01 -1.73954e+01 7.80000e+00 + 261 261 1 -1.97755e+01 -2.67754e+01 -3.04854e+01 + 262 262 1 -8.69545e+00 -1.61554e+01 2.01900e+01 + 263 263 1 2.66100e+01 5.44000e+00 2.13300e+01 + 264 264 1 -1.24055e+01 -2.69254e+01 -1.21354e+01 + 265 265 1 -2.18655e+01 -1.06854e+01 1.32700e+01 + 266 266 1 -1.08055e+01 3.52000e+00 -2.70054e+01 + 267 267 1 1.15800e+01 -2.67154e+01 1.77900e+01 + 268 268 1 -1.47955e+01 -2.53754e+01 -2.37354e+01 + 269 269 1 -1.29055e+01 6.56000e+00 -2.51054e+01 + 270 270 1 2.06000e+01 2.95900e+01 -3.10854e+01 + 271 271 1 1.76300e+01 1.65700e+01 9.29000e+00 + 272 272 1 2.33000e+00 -1.81554e+01 -1.51354e+01 + 273 273 1 -2.61955e+01 -3.96545e+00 1.46500e+01 + 274 274 1 -2.81455e+01 -1.76545e+00 6.58000e+00 + 275 275 1 -2.35545e+00 1.43200e+01 2.95400e+01 + 276 276 1 9.70000e+00 -2.13854e+01 1.55500e+01 + 277 277 1 -1.59455e+01 5.44000e+00 2.09100e+01 + 278 278 1 1.19000e+00 1.47700e+01 1.14500e+01 + 279 279 1 -2.93755e+01 6.87000e+00 1.19600e+01 + 280 280 1 -9.41545e+00 1.63700e+01 3.09200e+01 + 281 281 1 7.25000e+00 8.46000e+00 2.04000e+00 + 282 282 1 -1.22455e+01 -2.06954e+01 6.37000e+00 + 283 283 1 2.22900e+01 3.00700e+01 2.53900e+01 + 284 284 1 -8.90545e+00 2.02200e+01 -2.36954e+01 + 285 285 1 -3.06755e+01 -2.74854e+01 3.35000e+00 + 286 286 1 2.61000e+01 1.75600e+01 2.89100e+01 + 287 287 1 -1.28255e+01 -1.38545e+00 -2.94754e+01 + 288 288 1 -1.61755e+01 -1.09545e+00 -2.48654e+01 + 289 289 1 -9.85545e+00 -1.40054e+01 -1.51054e+01 + 290 290 1 1.39000e+01 4.77000e+00 5.77000e+00 + 291 291 1 -1.84755e+01 1.66600e+01 2.86300e+01 + 292 292 1 -1.42655e+01 3.02500e+01 1.89000e+00 + 293 293 1 7.72000e+00 7.29000e+00 -1.14254e+01 + 294 294 1 -6.12545e+00 3.54000e+00 1.30100e+01 + 295 295 1 -2.31555e+01 -2.60545e+00 -2.92554e+01 + 296 296 1 2.89800e+01 2.88700e+01 3.04100e+01 + 297 297 1 2.43600e+01 -7.75446e-01 1.21200e+01 + 298 298 1 -2.73355e+01 3.07000e+00 1.39800e+01 + 299 299 1 1.19000e+01 -2.84754e+01 -1.70754e+01 + 300 300 1 1.30300e+01 2.12200e+01 2.86600e+01 + 301 301 1 -4.75545e+00 2.55000e+00 2.20700e+01 + 302 302 1 -1.79355e+01 2.91500e+01 9.04000e+00 + 303 303 1 -2.77855e+01 1.29400e+01 -2.89554e+01 + 304 304 1 1.97200e+01 1.70300e+01 -2.76954e+01 + 305 305 1 -9.37545e+00 -2.93254e+01 2.23400e+01 + 306 306 1 2.52500e+01 2.64600e+01 2.63400e+01 + 307 307 1 2.64400e+01 -1.30545e+00 -1.25754e+01 + 308 308 1 2.91000e+01 -2.27754e+01 -2.74854e+01 + 309 309 1 -1.26955e+01 -2.56454e+01 2.03000e+00 + 310 310 1 1.32000e+00 9.31000e+00 1.39100e+01 + 311 311 1 -4.90000e-01 -7.72545e+00 -7.09545e+00 + 312 312 1 1.04000e+00 -2.77545e+00 -2.27254e+01 + 313 313 1 1.72900e+01 -6.57545e+00 -1.28754e+01 + 314 314 1 -2.89355e+01 6.59000e+00 2.80200e+01 + 315 315 1 -1.10855e+01 2.34900e+01 1.62000e+01 + 316 316 1 -1.64055e+01 -9.88545e+00 2.38500e+01 + 317 317 1 1.27300e+01 -8.04545e+00 -2.20554e+01 + 318 318 1 -3.01855e+01 6.00000e+00 -1.65545e+00 + 319 319 1 -5.89545e+00 -5.75446e-01 1.14200e+01 + 320 320 1 2.35700e+01 -2.12354e+01 2.71900e+01 + 321 321 1 2.05800e+01 -2.24154e+01 -1.20354e+01 + 322 322 1 1.61300e+01 -2.61854e+01 8.20000e+00 + 323 323 1 -7.84545e+00 2.75100e+01 2.51500e+01 + 324 324 1 -2.06755e+01 -1.37554e+01 -1.83254e+01 + 325 325 1 2.29700e+01 3.05500e+01 -1.26545e+00 + 326 326 1 1.23300e+01 -1.86554e+01 -1.91554e+01 + 327 327 1 1.38100e+01 2.07000e+00 -2.25445e-01 + 328 328 1 5.98000e+00 6.22000e+00 1.08900e+01 + 329 329 1 -2.29155e+01 2.31900e+01 -2.93054e+01 + 330 330 1 -1.92255e+01 2.32100e+01 -1.67354e+01 + 331 331 1 -2.95255e+01 -1.81854e+01 -1.54154e+01 + 332 332 1 -2.24755e+01 3.28000e+00 2.39100e+01 + 333 333 1 -1.91655e+01 2.93700e+01 2.58000e+01 + 334 334 1 -2.39855e+01 3.13000e+00 -3.13545e+00 + 335 335 1 -2.30055e+01 -3.57545e+00 -3.14545e+00 + 336 336 1 3.03200e+01 -2.05654e+01 -2.30254e+01 + 337 337 1 2.81000e+01 -1.28854e+01 -6.35445e-01 + 338 338 1 5.79000e+00 -7.01545e+00 1.42700e+01 + 339 339 1 1.50700e+01 1.92100e+01 1.57000e+01 + 340 340 1 -1.69255e+01 -2.18754e+01 2.23400e+01 + 341 341 1 -1.14155e+01 1.39700e+01 1.26600e+01 + 342 342 1 2.81900e+01 -2.97654e+01 -1.48454e+01 + 343 343 1 2.59800e+01 7.38000e+00 -2.26954e+01 + 344 344 1 9.13000e+00 -2.89254e+01 1.98400e+01 + 345 345 1 -1.40055e+01 1.45000e+01 9.41000e+00 + 346 346 1 -2.69455e+01 1.15200e+01 -9.94545e+00 + 347 347 1 1.20400e+01 3.00600e+01 -1.36545e+00 + 348 348 1 2.90000e+00 2.30400e+01 2.66700e+01 + 349 349 1 1.48900e+01 9.89000e+00 -1.42154e+01 + 350 350 1 -1.34955e+01 1.81000e+01 4.59000e+00 + 351 351 1 5.16000e+00 -4.54545e+00 -1.74354e+01 + 352 352 1 -1.68555e+01 -2.70545e+00 -2.86654e+01 + 353 353 1 -1.52655e+01 -2.50554e+01 -8.15445e-01 + 354 354 1 -2.33755e+01 -1.99254e+01 -1.92254e+01 + 355 355 1 1.37900e+01 1.21100e+01 -9.66545e+00 + 356 356 1 2.97700e+01 7.78000e+00 -1.27054e+01 + 357 357 1 1.58700e+01 -1.82754e+01 -1.08054e+01 + 358 358 1 -3.77545e+00 2.01800e+01 -1.69154e+01 + 359 359 1 -1.89545e+00 -4.41545e+00 8.80000e+00 + 360 360 1 -1.71455e+01 -1.48854e+01 1.34500e+01 + 361 361 1 1.00400e+01 -1.40054e+01 -2.72054e+01 + 362 362 1 -9.92545e+00 2.28400e+01 2.09300e+01 + 363 363 1 -2.93355e+01 -1.18154e+01 -1.52554e+01 + 364 364 1 1.02600e+01 -1.37154e+01 -7.84545e+00 + 365 365 1 7.91000e+00 1.78800e+01 2.18400e+01 + 366 366 1 3.08000e+00 -2.03654e+01 2.70900e+01 + 367 367 1 -2.78545e+00 -2.92454e+01 2.87000e+01 + 368 368 1 1.61000e+00 -8.31545e+00 -2.40754e+01 + 369 369 1 -1.31255e+01 -1.38354e+01 -2.65054e+01 + 370 370 1 1.84000e+00 -2.36754e+01 2.78500e+01 + 371 371 1 2.81600e+01 -2.74354e+01 -9.37545e+00 + 372 372 1 2.83900e+01 2.14800e+01 -1.45354e+01 + 373 373 1 1.78000e+01 2.32000e+01 -8.50545e+00 + 374 374 1 -1.59155e+01 7.13000e+00 -2.66554e+01 + 375 375 1 2.97300e+01 2.19400e+01 -2.70354e+01 + 376 376 1 6.18000e+00 2.33000e+01 -1.20554e+01 + 377 377 1 -8.86545e+00 -2.58354e+01 -2.72754e+01 + 378 378 1 -5.01545e+00 -2.90954e+01 2.74000e+00 + 379 379 1 -1.64755e+01 -1.01554e+01 -2.39654e+01 + 380 380 1 3.07500e+01 1.17300e+01 -1.84654e+01 + 381 381 1 -1.40755e+01 1.85000e+01 2.21800e+01 + 382 382 1 2.21300e+01 2.73100e+01 2.76000e+01 + 383 383 1 1.48000e+01 -1.10654e+01 -1.30354e+01 + 384 384 1 2.03200e+01 2.32000e+00 -2.70545e+00 + 385 385 1 2.44600e+01 2.27900e+01 1.36000e+00 + 386 386 1 -3.13545e+00 -1.61154e+01 6.87000e+00 + 387 387 1 1.57500e+01 1.15900e+01 1.98200e+01 + 388 388 1 1.22700e+01 2.71800e+01 2.28300e+01 + 389 389 1 1.32300e+01 2.62300e+01 -1.31554e+01 + 390 390 1 1.71700e+01 -1.90654e+01 -3.10454e+01 + 391 391 1 3.65000e+00 2.84500e+01 -4.05445e-01 + 392 392 1 5.36000e+00 -1.36254e+01 -6.50545e+00 + 393 393 1 2.73000e+01 -2.25054e+01 1.75800e+01 + 394 394 1 2.47400e+01 -1.51854e+01 3.05000e+01 + 395 395 1 -1.65555e+01 1.74200e+01 -1.17854e+01 + 396 396 1 1.17700e+01 -1.60545e+00 -1.42545e+00 + 397 397 1 -2.81055e+01 1.98400e+01 -6.14545e+00 + 398 398 1 -1.39055e+01 2.89000e+01 2.26300e+01 + 399 399 1 -9.55545e+00 -6.10545e+00 2.81600e+01 + 400 400 1 9.96000e+00 -1.67454e+01 2.24900e+01 + 401 401 1 -1.40355e+01 -1.66154e+01 2.04000e+01 + 402 402 1 -4.74545e+00 1.50000e-01 -1.89254e+01 + 403 403 1 -1.74255e+01 2.13500e+01 2.41800e+01 + 404 404 1 3.10200e+01 -2.70754e+01 -5.74545e+00 + 405 405 1 -1.11855e+01 -1.30545e+00 -1.69854e+01 + 406 406 1 1.95300e+01 2.47300e+01 -2.55754e+01 + 407 407 1 2.55900e+01 -1.43754e+01 2.60300e+01 + 408 408 1 -2.59155e+01 1.75500e+01 -2.95954e+01 + 409 409 1 1.74000e+01 -1.65554e+01 3.45000e+00 + 410 410 1 -1.09055e+01 -1.05254e+01 -2.94654e+01 + 411 411 1 2.39500e+01 1.00900e+01 -8.27545e+00 + 412 412 1 -2.39255e+01 1.56200e+01 -9.03545e+00 + 413 413 1 2.03600e+01 8.71000e+00 -1.41545e+00 + 414 414 1 -5.93545e+00 1.80400e+01 -1.24254e+01 + 415 415 1 -2.29055e+01 -2.88854e+01 9.03000e+00 + 416 416 1 3.34000e+00 -1.36054e+01 -9.39545e+00 + 417 417 1 2.39300e+01 -2.87054e+01 2.77600e+01 + 418 418 1 -2.04655e+01 -2.44454e+01 2.12000e+00 + 419 419 1 1.83100e+01 -1.29754e+01 1.98000e+00 + 420 420 1 2.04400e+01 -2.71954e+01 2.11300e+01 + 421 421 1 -2.02255e+01 6.04000e+00 1.85100e+01 + 422 422 1 1.11600e+01 1.35900e+01 2.02700e+01 + 423 423 1 -1.86545e+00 -2.87754e+01 -2.98545e+00 + 424 424 1 -4.90545e+00 -1.79154e+01 2.02000e+01 + 425 425 1 -4.58545e+00 7.26000e+00 2.01000e+00 + 426 426 1 -2.60255e+01 8.34000e+00 -1.23754e+01 + 427 427 1 3.96000e+00 1.41600e+01 -5.36545e+00 + 428 428 1 7.55000e+00 2.75300e+01 5.51000e+00 + 429 429 1 -9.11545e+00 2.47200e+01 2.81500e+01 + 430 430 1 -5.67545e+00 -4.90545e+00 -1.82254e+01 + 431 431 1 3.08800e+01 -2.53754e+01 -2.98054e+01 + 432 432 1 -1.29255e+01 -1.05854e+01 -2.38254e+01 + 433 433 1 -1.84755e+01 6.93000e+00 1.51900e+01 + 434 434 1 -1.75545e+00 -3.14545e+00 -1.25654e+01 + 435 435 1 1.74550e-01 -1.92654e+01 5.84000e+00 + 436 436 1 -4.75450e-01 -1.91254e+01 -5.50545e+00 + 437 437 1 2.87300e+01 1.62000e+01 -1.62654e+01 + 438 438 1 2.37500e+01 7.45543e-02 -1.90654e+01 + 439 439 1 3.02500e+01 1.41600e+01 1.30000e+01 + 440 440 1 1.28000e+01 9.87000e+00 -2.23054e+01 + 441 441 1 1.92500e+01 -2.02054e+01 2.67000e+01 + 442 442 1 1.18000e+01 -4.72545e+00 -2.83554e+01 + 443 443 1 1.79900e+01 -3.03454e+01 4.59000e+00 + 444 444 1 -2.33255e+01 1.14200e+01 2.49000e+00 + 445 445 1 2.68200e+01 1.52600e+01 -4.15445e-01 + 446 446 1 2.51000e+01 -9.06545e+00 2.62500e+01 + 447 447 1 3.36000e+00 -2.23754e+01 -1.52054e+01 + 448 448 1 -1.67255e+01 -1.59354e+01 8.90000e-01 + 449 449 1 -9.29545e+00 -2.35654e+01 7.09000e+00 + 450 450 1 -1.52255e+01 3.45543e-02 2.90200e+01 + 451 451 1 -2.24955e+01 -9.39545e+00 5.71000e+00 + 452 452 1 5.22000e+00 -1.71954e+01 9.30000e-01 + 453 453 1 -2.45555e+01 1.88000e+00 1.85600e+01 + 454 454 1 1.07300e+01 -2.77545e+00 4.40000e+00 + 455 455 1 -2.38155e+01 -6.46545e+00 -6.15445e-01 + 456 456 1 2.52500e+01 -2.39954e+01 2.03900e+01 + 457 457 1 -2.41155e+01 -2.30000e-01 1.48500e+01 + 458 458 1 -3.08355e+01 2.68300e+01 2.30000e-01 + 459 459 1 -2.82055e+01 -2.22254e+01 8.23000e+00 + 460 460 1 1.31600e+01 -2.17254e+01 8.13000e+00 + 461 461 1 -1.11255e+01 5.62000e+00 1.06900e+01 + 462 462 1 -1.74545e+00 1.12400e+01 3.30000e-01 + 463 463 1 -1.32255e+01 1.10500e+01 2.50300e+01 + 464 464 1 2.86500e+01 9.85000e+00 -2.96854e+01 + 465 465 1 -2.61655e+01 -1.54654e+01 -3.08354e+01 + 466 466 1 -7.26545e+00 7.11000e+00 2.40500e+01 + 467 467 1 2.22600e+01 -1.61854e+01 -1.93354e+01 + 468 468 1 1.85900e+01 -1.38545e+00 1.08900e+01 + 469 469 1 2.00300e+01 2.43100e+01 9.93000e+00 + 470 470 1 1.22700e+01 -1.39754e+01 8.80000e+00 + 471 471 1 -2.46955e+01 -2.68554e+01 3.00400e+01 + 472 472 1 2.93600e+01 -2.97654e+01 1.18900e+01 + 473 473 1 -2.76455e+01 -2.70854e+01 -2.44545e+00 + 474 474 1 -1.95355e+01 -8.05545e+00 2.08800e+01 + 475 475 1 5.95000e+00 -1.98545e+00 -2.96254e+01 + 476 476 1 2.15100e+01 -9.19545e+00 1.19600e+01 + 477 477 1 -1.02355e+01 5.13000e+00 2.42400e+01 + 478 478 1 -9.86545e+00 1.27600e+01 2.26100e+01 + 479 479 1 -1.99555e+01 6.75000e+00 -2.85654e+01 + 480 480 1 -2.07655e+01 -5.00000e-02 1.75000e+01 + 481 481 1 6.77000e+00 -9.94545e+00 6.86000e+00 + 482 482 1 -2.11355e+01 4.20000e+00 -3.07154e+01 + 483 483 1 -1.97655e+01 9.81000e+00 2.64700e+01 + 484 484 1 2.95100e+01 2.67900e+01 1.49600e+01 + 485 485 1 2.58000e+01 -9.81545e+00 5.40000e-01 + 486 486 1 1.46900e+01 7.72000e+00 2.60300e+01 + 487 487 1 -2.50755e+01 -5.87545e+00 4.08000e+00 + 488 488 1 -2.81855e+01 2.86900e+01 1.53700e+01 + 489 489 1 -8.22545e+00 -3.08554e+01 5.10000e-01 + 490 490 1 -7.20545e+00 2.89100e+01 4.08000e+00 + 491 491 1 -2.52255e+01 7.34000e+00 -2.59954e+01 + 492 492 1 2.58600e+01 2.45000e+00 1.89100e+01 + 493 493 1 3.85000e+00 -1.36354e+01 2.35700e+01 + 494 494 1 3.12000e+00 2.66900e+01 2.98800e+01 + 495 495 1 -2.96545e+00 8.27000e+00 -1.59054e+01 + 496 496 1 2.89800e+01 -2.45954e+01 2.05600e+01 + 497 497 1 2.92000e+00 7.00000e-02 2.50000e+00 + 498 498 1 2.49900e+01 1.01400e+01 2.70900e+01 + 499 499 1 -1.99255e+01 1.31000e+00 -9.63545e+00 + 500 500 1 1.27400e+01 2.97200e+01 8.57000e+00 + 501 501 1 -5.96545e+00 1.38200e+01 7.49000e+00 + 502 502 1 -4.25450e-01 2.88700e+01 1.29500e+01 + 503 503 1 1.77100e+01 9.09000e+00 -1.08454e+01 + 504 504 1 2.65000e+01 2.37300e+01 -2.66154e+01 + 505 505 1 -4.97545e+00 -8.12545e+00 6.45000e+00 + 506 506 1 -1.89545e+00 -1.05954e+01 1.38300e+01 + 507 507 1 -2.32755e+01 -1.24054e+01 -2.51554e+01 + 508 508 1 -2.03455e+01 1.95400e+01 5.54555e-01 + 509 509 1 -1.87055e+01 -2.44545e+00 -7.80545e+00 + 510 510 1 -1.62655e+01 1.81000e+00 2.53000e+01 + 511 511 1 1.13900e+01 4.05000e+00 -2.75954e+01 + 512 512 1 1.46600e+01 2.17900e+01 -1.27754e+01 + 513 513 1 1.09600e+01 -1.75854e+01 9.21000e+00 + 514 514 1 -1.32755e+01 -1.69545e+00 2.07300e+01 + 515 515 1 1.65700e+01 2.75100e+01 3.93000e+00 + 516 516 1 -2.74545e+00 6.74000e+00 -1.89754e+01 + 517 517 1 2.89300e+01 -1.68854e+01 2.91400e+01 + 518 518 1 -1.70455e+01 1.08200e+01 -2.84854e+01 + 519 519 1 2.81300e+01 -1.75754e+01 -1.51754e+01 + 520 520 1 1.29400e+01 1.58700e+01 -2.23954e+01 + 521 521 1 -2.60955e+01 2.69500e+01 2.81700e+01 + 522 522 1 2.00700e+01 2.40000e+01 2.02600e+01 + 523 523 1 7.57000e+00 1.79900e+01 2.93500e+01 + 524 524 1 2.33200e+01 -2.37754e+01 2.93500e+01 + 525 525 1 1.45100e+01 -1.07654e+01 -2.40754e+01 + 526 526 1 3.01100e+01 2.91500e+01 -1.24154e+01 + 527 527 1 2.87500e+01 -2.30954e+01 8.52000e+00 + 528 528 1 2.74200e+01 1.06700e+01 1.29100e+01 + 529 529 1 -2.04155e+01 -1.74154e+01 1.11000e+01 + 530 530 1 1.76800e+01 2.73600e+01 -7.27545e+00 + 531 531 1 -1.40755e+01 -8.53545e+00 -1.49954e+01 + 532 532 1 -4.75450e-01 -2.23654e+01 1.21600e+01 + 533 533 1 -1.85755e+01 -3.09054e+01 -7.11545e+00 + 534 534 1 -4.04545e+00 -8.68545e+00 -2.96354e+01 + 535 535 1 -3.00955e+01 1.40200e+01 8.11000e+00 + 536 536 1 -3.27545e+00 1.66000e+00 -1.11154e+01 + 537 537 1 1.00000e-01 1.86000e+01 2.47000e+01 + 538 538 1 -1.43855e+01 -1.03454e+01 1.11200e+01 + 539 539 1 2.18800e+01 2.18500e+01 -1.71545e+00 + 540 540 1 -1.57355e+01 2.43200e+01 -8.55445e-01 + 541 541 1 2.01900e+01 3.43000e+00 -1.32554e+01 + 542 542 1 -1.60955e+01 -2.98154e+01 -1.02254e+01 + 543 543 1 1.96200e+01 -8.30545e+00 5.50000e+00 + 544 544 1 -3.05055e+01 1.32400e+01 1.78700e+01 + 545 545 1 1.14200e+01 -1.06154e+01 2.71600e+01 + 546 546 1 2.59000e+01 -2.91754e+01 -2.44054e+01 + 547 547 1 4.14550e-01 -1.12254e+01 3.00300e+01 + 548 548 1 8.18000e+00 8.37000e+00 1.42800e+01 + 549 549 1 -2.51055e+01 2.48200e+01 1.47000e+01 + 550 550 1 1.31000e+01 1.17800e+01 -1.95754e+01 + 551 551 1 -3.19545e+00 2.55000e+01 -1.26954e+01 + 552 552 1 1.22000e+01 -2.83054e+01 8.42000e+00 + 553 553 1 2.11600e+01 3.07600e+01 -2.38554e+01 + 554 554 1 1.59900e+01 2.79400e+01 -2.96954e+01 + 555 555 1 1.07700e+01 1.52700e+01 -9.12545e+00 + 556 556 1 -1.75855e+01 -5.97545e+00 1.28900e+01 + 557 557 1 -1.47545e+00 1.00900e+01 1.14400e+01 + 558 558 1 -1.22455e+01 4.09000e+00 -9.83545e+00 + 559 559 1 1.75500e+01 1.88000e+00 5.86000e+00 + 560 560 1 -3.55450e-01 2.34554e-01 -2.00954e+01 + 561 561 1 2.66700e+01 1.76100e+01 -9.32545e+00 + 562 562 1 -2.30655e+01 -3.85545e+00 2.84900e+01 + 563 563 1 -6.48545e+00 2.81700e+01 1.76000e+01 + 564 564 1 -2.14055e+01 -1.05554e+01 2.00900e+01 + 565 565 1 -2.52755e+01 4.94000e+00 1.02700e+01 + 566 566 1 -2.19555e+01 1.76700e+01 1.14400e+01 + 567 567 1 -1.05555e+01 -2.12654e+01 -9.36545e+00 + 568 568 1 -8.30545e+00 -1.93054e+01 -1.38254e+01 + 569 569 1 -1.63255e+01 2.43100e+01 -2.64854e+01 + 570 570 1 -2.49545e+00 2.02300e+01 -3.77545e+00 + 571 571 1 1.87100e+01 1.25400e+01 -1.27254e+01 + 572 572 1 -1.75655e+01 6.80000e+00 -1.47454e+01 + 573 573 1 2.63700e+01 7.22000e+00 1.02500e+01 + 574 574 1 1.80000e+01 -2.35054e+01 -1.76954e+01 + 575 575 1 -9.35545e+00 -1.99954e+01 9.56000e+00 + 576 576 1 -8.74545e+00 1.64000e+00 -7.30545e+00 + 577 577 1 7.71000e+00 -1.07654e+01 1.64800e+01 + 578 578 1 1.09800e+01 1.85200e+01 2.61300e+01 + 579 579 1 -2.69155e+01 3.01900e+01 -3.06654e+01 + 580 580 1 -1.99955e+01 5.70000e+00 2.30800e+01 + 581 581 1 3.10700e+01 -1.47954e+01 -8.96545e+00 + 582 582 1 -1.66755e+01 -2.57754e+01 2.67800e+01 + 583 583 1 5.69000e+00 -1.98454e+01 3.64000e+00 + 584 584 1 2.77500e+01 -2.04554e+01 3.60000e+00 + 585 585 1 -2.16255e+01 2.71500e+01 -1.80654e+01 + 586 586 1 -2.74755e+01 -1.06454e+01 1.80400e+01 + 587 587 1 3.50000e+00 -9.61545e+00 4.09000e+00 + 588 588 1 -1.81155e+01 1.59600e+01 -1.95154e+01 + 589 589 1 1.68000e+00 -9.85545e+00 2.14100e+01 + 590 590 1 -3.55545e+00 2.87200e+01 -4.00545e+00 + 591 591 1 -1.32055e+01 4.39000e+00 4.34000e+00 + 592 592 1 4.92000e+00 -3.09554e+01 -2.68454e+01 + 593 593 1 -1.74655e+01 2.24200e+01 -7.87545e+00 + 594 594 1 2.36300e+01 -1.40054e+01 2.30000e+01 + 595 595 1 1.08200e+01 3.77000e+00 -1.16554e+01 + 596 596 1 -1.35055e+01 -2.10545e+00 4.95000e+00 + 597 597 1 -3.05655e+01 1.78300e+01 -4.61545e+00 + 598 598 1 -1.23545e+00 -2.85554e+01 -1.36254e+01 + 599 599 1 2.72500e+01 -1.60254e+01 7.30000e+00 + 600 600 1 3.09200e+01 5.50000e+00 -6.47545e+00 + 601 601 1 -1.38455e+01 3.30000e-01 -2.02254e+01 + 602 602 1 2.68100e+01 -2.85954e+01 4.36000e+00 + 603 603 1 -2.45450e-01 2.54800e+01 2.10400e+01 + 604 604 1 -2.80755e+01 -3.34545e+00 1.84000e+01 + 605 605 1 -5.39545e+00 2.30500e+01 1.57800e+01 + 606 606 1 -2.07155e+01 -3.73545e+00 1.53300e+01 + 607 607 1 1.76000e+00 2.72000e+00 6.36000e+00 + 608 608 1 2.62000e+00 -2.62054e+01 -2.20254e+01 + 609 609 1 -3.50545e+00 1.01500e+01 1.85100e+01 + 610 610 1 -5.25545e+00 5.98000e+00 -2.97854e+01 + 611 611 1 1.28200e+01 7.30000e-01 -2.31054e+01 + 612 612 1 -2.39355e+01 2.55900e+01 -1.56654e+01 + 613 613 1 -2.08755e+01 -7.82545e+00 2.61000e+01 + 614 614 1 -7.10545e+00 2.26700e+01 -2.63554e+01 + 615 615 1 3.90000e+00 1.39200e+01 -1.97254e+01 + 616 616 1 -1.54855e+01 7.14000e+00 -2.03545e+00 + 617 617 1 -1.84555e+01 2.95200e+01 -8.85445e-01 + 618 618 1 2.05100e+01 1.95000e+01 -6.02545e+00 + 619 619 1 -1.38055e+01 1.63900e+01 -5.08545e+00 + 620 620 1 -2.94055e+01 -1.93254e+01 -3.06154e+01 + 621 621 1 -1.30655e+01 9.23000e+00 1.84600e+01 + 622 622 1 2.30300e+01 1.45600e+01 -1.08254e+01 + 623 623 1 -1.00555e+01 -1.60545e+00 3.15000e+00 + 624 624 1 -1.58755e+01 -1.29454e+01 4.13000e+00 + 625 625 1 -2.62555e+01 -2.20154e+01 1.29700e+01 + 626 626 1 -1.34545e+00 2.46000e+01 -4.83545e+00 + 627 627 1 -1.29355e+01 3.01200e+01 7.81000e+00 + 628 628 1 1.00600e+01 1.26500e+01 5.26000e+00 + 629 629 1 -1.47255e+01 3.52000e+00 -2.99545e+00 + 630 630 1 5.66000e+00 2.47900e+01 -2.31454e+01 + 631 631 1 2.53900e+01 8.69000e+00 3.24000e+00 + 632 632 1 5.19000e+00 -7.15545e+00 -1.33854e+01 + 633 633 1 -2.68545e+00 2.10500e+01 -2.04954e+01 + 634 634 1 -1.87155e+01 -2.45654e+01 1.92200e+01 + 635 635 1 2.81300e+01 2.16100e+01 1.61800e+01 + 636 636 1 1.21000e+00 7.50000e+00 6.15000e+00 + 637 637 1 -1.67755e+01 -1.76654e+01 2.61600e+01 + 638 638 1 -1.38355e+01 -6.44545e+00 2.39300e+01 + 639 639 1 -2.01555e+01 5.67000e+00 1.24000e+00 + 640 640 1 -1.48155e+01 -9.78545e+00 5.60000e+00 + 641 641 1 1.01800e+01 -1.13954e+01 -1.16954e+01 + 642 642 1 1.79700e+01 1.09100e+01 -2.26654e+01 + 643 643 1 -5.72545e+00 -2.59545e+00 -8.40545e+00 + 644 644 1 1.77200e+01 1.58800e+01 -2.35254e+01 + 645 645 1 -3.48545e+00 -1.54554e+01 1.22200e+01 + 646 646 1 -5.53545e+00 2.99900e+01 -2.73354e+01 + 647 647 1 -2.94455e+01 -1.34545e+00 2.15500e+01 + 648 648 1 9.38000e+00 2.98000e+01 1.61000e+00 + 649 649 1 5.42000e+00 -3.00854e+01 6.68000e+00 + 650 650 1 8.67000e+00 2.33500e+01 1.96200e+01 + 651 651 1 2.31300e+01 7.53000e+00 1.82300e+01 + 652 652 1 2.79900e+01 3.06200e+01 -1.83754e+01 + 653 653 1 1.12500e+01 -3.60545e+00 -1.06854e+01 + 654 654 1 -2.97455e+01 2.35800e+01 -3.00754e+01 + 655 655 1 2.25800e+01 -1.73954e+01 1.30000e-01 + 656 656 1 -1.73955e+01 -2.25454e+01 2.59700e+01 + 657 657 1 -2.61155e+01 -3.06454e+01 1.25200e+01 + 658 658 1 -1.72055e+01 -2.85754e+01 2.18000e+00 + 659 659 1 2.90700e+01 1.95600e+01 7.56000e+00 + 660 660 1 -2.58055e+01 1.37300e+01 8.66000e+00 + 661 661 1 2.49200e+01 2.41000e+00 2.48900e+01 + 662 662 1 -2.18355e+01 3.05300e+01 2.09600e+01 + 663 663 1 -2.47355e+01 3.00300e+01 1.53000e+01 + 664 664 1 2.40400e+01 -2.17954e+01 2.37000e+00 + 665 665 1 2.59500e+01 -1.59754e+01 -2.85454e+01 + 666 666 1 -1.17755e+01 2.06800e+01 2.55000e+01 + 667 667 1 -1.49055e+01 7.41000e+00 1.29000e+01 + 668 668 1 2.95500e+01 -1.49545e+00 -6.22545e+00 + 669 669 1 7.46000e+00 -2.13454e+01 -1.76254e+01 + 670 670 1 -2.96555e+01 2.09200e+01 1.47900e+01 + 671 671 1 -1.65655e+01 2.12300e+01 -1.65545e+00 + 672 672 1 -2.89855e+01 1.87700e+01 -1.71454e+01 + 673 673 1 4.12000e+00 -1.85454e+01 1.96400e+01 + 674 674 1 -3.04755e+01 2.53900e+01 1.27600e+01 + 675 675 1 -2.39355e+01 -3.64545e+00 -2.18954e+01 + 676 676 1 -1.00455e+01 1.44900e+01 -2.21154e+01 + 677 677 1 2.45200e+01 -1.49354e+01 1.07100e+01 + 678 678 1 -2.39855e+01 3.84554e-01 7.77000e+00 + 679 679 1 -2.48545e+00 -1.37654e+01 2.75800e+01 + 680 680 1 -2.63155e+01 -2.60754e+01 6.73000e+00 + 681 681 1 2.33600e+01 -2.46554e+01 1.66700e+01 + 682 682 1 7.46000e+00 2.80700e+01 2.88800e+01 + 683 683 1 -5.25545e+00 3.07300e+01 7.55000e+00 + 684 684 1 -3.80545e+00 3.76000e+00 -4.12545e+00 + 685 685 1 -1.11655e+01 8.13000e+00 2.16600e+01 + 686 686 1 2.17900e+01 1.76700e+01 -2.50954e+01 + 687 687 1 -1.70855e+01 2.98800e+01 -1.71654e+01 + 688 688 1 -7.03545e+00 -9.05446e-01 -1.56254e+01 + 689 689 1 -2.51955e+01 -8.29545e+00 -5.49545e+00 + 690 690 1 2.02700e+01 -2.12554e+01 -2.88154e+01 + 691 691 1 -1.52655e+01 -5.77545e+00 9.77000e+00 + 692 692 1 -2.56545e+00 1.46500e+01 -5.20545e+00 + 693 693 1 -3.03955e+01 -2.04454e+01 1.40800e+01 + 694 694 1 3.30000e+00 1.69800e+01 2.69200e+01 + 695 695 1 1.46900e+01 -2.63754e+01 1.59900e+01 + 696 696 1 -8.65545e+00 -9.62545e+00 1.48700e+01 + 697 697 1 -6.15450e-01 2.33300e+01 -1.61754e+01 + 698 698 1 -8.43545e+00 1.00000e-01 -1.17254e+01 + 699 699 1 4.30000e+00 3.09800e+01 -2.01854e+01 + 700 700 1 1.71700e+01 -1.84545e+00 -3.61545e+00 + 701 701 1 2.92100e+01 -1.00254e+01 -2.25454e+01 + 702 702 1 -3.74545e+00 -3.08354e+01 -1.70954e+01 + 703 703 1 8.03000e+00 5.45000e+00 -1.85545e+00 + 704 704 1 -4.86545e+00 -6.28545e+00 -1.19454e+01 + 705 705 1 2.72300e+01 -1.43545e+00 2.27200e+01 + 706 706 1 -2.45555e+01 -1.85754e+01 2.59000e+01 + 707 707 1 -2.90155e+01 -4.22545e+00 -1.71454e+01 + 708 708 1 -5.39545e+00 1.58400e+01 1.72300e+01 + 709 709 1 3.57000e+00 1.84000e+00 -7.42545e+00 + 710 710 1 -1.52755e+01 -2.71954e+01 -1.42754e+01 + 711 711 1 -4.61545e+00 -2.66454e+01 -8.20545e+00 + 712 712 1 2.75600e+01 2.16700e+01 2.00700e+01 + 713 713 1 -1.33355e+01 8.37000e+00 2.57000e+00 + 714 714 1 2.83400e+01 -2.83454e+01 2.88800e+01 + 715 715 1 2.32100e+01 -1.98754e+01 -9.54545e+00 + 716 716 1 2.03100e+01 5.04000e+00 -2.43654e+01 + 717 717 1 -1.65355e+01 2.64100e+01 -2.33154e+01 + 718 718 1 2.68900e+01 -2.62254e+01 -1.23754e+01 + 719 719 1 -1.35055e+01 3.10600e+01 2.99000e+01 + 720 720 1 2.48400e+01 2.93900e+01 -1.69154e+01 + 721 721 1 -2.08655e+01 -2.48545e+00 -1.31454e+01 + 722 722 1 -1.07655e+01 2.09300e+01 -2.96354e+01 + 723 723 1 2.55400e+01 -3.65545e+00 -1.40545e+00 + 724 724 1 1.48000e+00 2.83100e+01 1.73900e+01 + 725 725 1 3.00000e+00 -5.11545e+00 -2.86754e+01 + 726 726 1 -2.96355e+01 3.10300e+01 -1.82754e+01 + 727 727 1 -7.90545e+00 -1.92754e+01 4.30000e+00 + 728 728 1 -2.88555e+01 1.29200e+01 1.14000e+01 + 729 729 1 -2.32155e+01 -8.52545e+00 1.69800e+01 + 730 730 1 2.15100e+01 -2.88254e+01 -2.88354e+01 + 731 731 1 7.80000e-01 -1.48254e+01 -2.56545e+00 + 732 732 1 9.81000e+00 9.40000e-01 1.91500e+01 + 733 733 1 3.03200e+01 -5.07545e+00 2.99800e+01 + 734 734 1 -2.58955e+01 -2.96454e+01 1.99700e+01 + 735 735 1 -1.06655e+01 -1.31854e+01 9.69000e+00 + 736 736 1 2.73600e+01 2.24600e+01 7.84000e+00 + 737 737 1 5.56000e+00 -2.04454e+01 -2.77854e+01 + 738 738 1 1.06900e+01 2.17300e+01 -9.87545e+00 + 739 739 1 2.46500e+01 2.64200e+01 1.55000e+01 + 740 740 1 -1.05855e+01 3.08500e+01 5.69000e+00 + 741 741 1 -4.13545e+00 -1.61654e+01 -3.07654e+01 + 742 742 1 -2.92545e+00 1.47000e+00 1.48500e+01 + 743 743 1 1.92000e+00 4.17000e+00 3.10000e+00 + 744 744 1 1.22000e+01 -2.02254e+01 3.18000e+00 + 745 745 1 2.19000e+01 -3.03454e+01 -1.52454e+01 + 746 746 1 1.14000e+01 3.05600e+01 -9.02545e+00 + 747 747 1 -9.92545e+00 -6.28545e+00 -2.97754e+01 + 748 748 1 1.63000e+01 1.13500e+01 1.56400e+01 + 749 749 1 -1.75155e+01 -3.00554e+01 -2.44054e+01 + 750 750 1 -2.15455e+01 -6.18545e+00 -1.52054e+01 + 751 751 1 4.49000e+00 6.81000e+00 -2.82654e+01 + 752 752 1 2.74500e+01 -8.52545e+00 9.82000e+00 + 753 753 1 2.99000e+01 -2.36354e+01 -1.90254e+01 + 754 754 1 5.93000e+00 1.31600e+01 3.01700e+01 + 755 755 1 7.90000e-01 -2.71154e+01 -1.67054e+01 + 756 756 1 -5.91545e+00 -2.70554e+01 -3.06354e+01 + 757 757 1 -7.52545e+00 2.10400e+01 -1.77545e+00 + 758 758 1 -1.91455e+01 -3.74545e+00 6.79000e+00 + 759 759 1 -7.91545e+00 -3.90545e+00 -2.67154e+01 + 760 760 1 1.83300e+01 -1.64154e+01 1.82400e+01 + 761 761 1 1.45900e+01 -7.51545e+00 -6.34545e+00 + 762 762 1 7.13000e+00 1.50100e+01 -2.33954e+01 + 763 763 1 -9.00000e-02 2.91200e+01 -1.11154e+01 + 764 764 1 -9.35545e+00 4.60000e-01 2.02600e+01 + 765 765 1 1.95600e+01 -2.82154e+01 -1.45445e-01 + 766 766 1 2.67100e+01 -2.13454e+01 -2.36454e+01 + 767 767 1 2.79000e+01 -6.48545e+00 -8.01545e+00 + 768 768 1 -2.26455e+01 9.89000e+00 -2.26545e+00 + 769 769 1 2.57200e+01 3.03900e+01 1.70100e+01 + 770 770 1 -1.39555e+01 -1.40954e+01 1.21500e+01 + 771 771 1 -1.84545e+00 -2.53854e+01 -3.00654e+01 + 772 772 1 1.67700e+01 -2.17054e+01 4.98000e+00 + 773 773 1 -2.23655e+01 1.90000e+00 1.24555e-01 + 774 774 1 8.11000e+00 -4.54545e+00 2.97200e+01 + 775 775 1 -2.30755e+01 -2.51254e+01 -9.09545e+00 + 776 776 1 -1.89755e+01 -2.03554e+01 -2.62854e+01 + 777 777 1 1.42800e+01 5.69000e+00 1.66100e+01 + 778 778 1 5.75000e+00 -2.22154e+01 -2.47854e+01 + 779 779 1 3.68000e+00 1.92900e+01 5.11000e+00 + 780 780 1 5.02000e+00 -1.63545e+00 -1.43954e+01 + 781 781 1 2.81400e+01 -1.44654e+01 -2.13454e+01 + 782 782 1 -7.80545e+00 -8.52545e+00 -1.54254e+01 + 783 783 1 -5.98545e+00 1.21500e+01 3.39000e+00 + 784 784 1 -2.95455e+01 -9.05545e+00 -2.71354e+01 + 785 785 1 1.67300e+01 9.35000e+00 -1.89654e+01 + 786 786 1 1.34500e+01 -2.69354e+01 -5.72545e+00 + 787 787 1 -7.15450e-01 -2.11854e+01 -1.45054e+01 + 788 788 1 -1.95545e+00 -2.54354e+01 -2.03554e+01 + 789 789 1 1.75600e+01 -9.86545e+00 -6.15445e-01 + 790 790 1 1.76900e+01 2.64000e+00 -1.00954e+01 + 791 791 1 1.61600e+01 -1.85254e+01 -3.68545e+00 + 792 792 1 -8.15450e-01 -2.06854e+01 -3.07354e+01 + 793 793 1 -6.44545e+00 -1.38545e+00 2.09000e+01 + 794 794 1 1.81400e+01 -2.26545e+00 -1.59254e+01 + 795 795 1 -2.27055e+01 -2.51654e+01 1.59400e+01 + 796 796 1 -2.80455e+01 1.37200e+01 -2.06654e+01 + 797 797 1 -1.39055e+01 -3.04154e+01 -1.64054e+01 + 798 798 1 4.95000e+00 -2.37154e+01 1.27000e+00 + 799 799 1 2.04000e+01 -1.30254e+01 1.61000e+01 + 800 800 1 2.22900e+01 -8.35446e-01 1.82900e+01 + 801 801 1 7.38000e+00 -1.75954e+01 1.31000e+01 + 802 802 1 1.78000e+00 5.18000e+00 -1.75654e+01 + 803 803 1 7.60000e+00 -2.95054e+01 -1.84254e+01 + 804 804 1 -1.40755e+01 -2.21545e+00 -1.32854e+01 + 805 805 1 -1.82255e+01 -2.61154e+01 -1.77754e+01 + 806 806 1 2.90900e+01 1.41200e+01 -1.05654e+01 + 807 807 1 -1.21755e+01 -5.92545e+00 4.63000e+00 + 808 808 1 1.95600e+01 -2.08054e+01 8.21000e+00 + 809 809 1 -1.06155e+01 1.07900e+01 -8.48545e+00 + 810 810 1 -3.10155e+01 1.46400e+01 -1.38354e+01 + 811 811 1 -3.08455e+01 -2.07954e+01 3.50000e-01 + 812 812 1 1.41800e+01 -2.23054e+01 1.98800e+01 + 813 813 1 -1.66755e+01 8.61000e+00 3.98000e+00 + 814 814 1 4.64000e+00 1.84100e+01 1.58100e+01 + 815 815 1 2.63500e+01 -2.00454e+01 -8.08545e+00 + 816 816 1 -2.67955e+01 -2.96354e+01 -5.10545e+00 + 817 817 1 -2.87855e+01 2.06300e+01 2.67200e+01 + 818 818 1 1.72600e+01 1.47600e+01 2.11100e+01 + 819 819 1 -1.90955e+01 1.01900e+01 -7.13545e+00 + 820 820 1 1.74700e+01 -2.27954e+01 -2.96354e+01 + 821 821 1 2.04200e+01 1.81700e+01 7.25000e+00 + 822 822 1 2.56100e+01 1.20600e+01 -2.81954e+01 + 823 823 1 -1.22545e+00 -1.17454e+01 1.82400e+01 + 824 824 1 2.46000e+01 5.40000e+00 -1.21545e+00 + 825 825 1 -1.85755e+01 -2.50354e+01 -1.36954e+01 + 826 826 1 -3.05450e-01 1.67500e+01 -2.46954e+01 + 827 827 1 2.71300e+01 2.57100e+01 4.10000e+00 + 828 828 1 3.00500e+01 1.01700e+01 -2.15654e+01 + 829 829 1 -9.69545e+00 2.29900e+01 -9.75545e+00 + 830 830 1 -2.55355e+01 2.33900e+01 5.50000e+00 + 831 831 1 -6.00000e-02 -2.47554e+01 5.73000e+00 + 832 832 1 4.26000e+00 3.25000e+00 -2.06354e+01 + 833 833 1 -2.55555e+01 2.70700e+01 1.94200e+01 + 834 834 1 -1.70955e+01 1.96800e+01 4.74000e+00 + 835 835 1 -2.75450e-01 2.94000e+01 -2.70554e+01 + 836 836 1 1.88900e+01 -5.30545e+00 -1.14545e+00 + 837 837 1 -2.16355e+01 1.87500e+01 2.57300e+01 + 838 838 1 -1.09055e+01 3.08000e+00 1.66200e+01 + 839 839 1 2.32400e+01 6.01000e+00 2.72800e+01 + 840 840 1 -2.73955e+01 -2.33954e+01 -2.11554e+01 + 841 841 1 1.64600e+01 2.05000e+01 -2.98754e+01 + 842 842 1 -2.36855e+01 7.41000e+00 2.58900e+01 + 843 843 1 -1.84855e+01 1.43000e+00 -1.69454e+01 + 844 844 1 -2.99655e+01 7.06000e+00 2.49000e+00 + 845 845 1 9.18000e+00 1.78200e+01 -4.78545e+00 + 846 846 1 2.19100e+01 9.99000e+00 1.01000e+01 + 847 847 1 1.57100e+01 -2.31254e+01 2.71300e+01 + 848 848 1 -2.80000e-01 -2.96954e+01 -3.05854e+01 + 849 849 1 1.59900e+01 1.12900e+01 -6.47545e+00 + 850 850 1 1.05100e+01 2.41300e+01 -1.89554e+01 + 851 851 1 2.11700e+01 7.85000e+00 -1.25854e+01 + 852 852 1 -2.56555e+01 -1.17554e+01 2.18000e+01 + 853 853 1 2.80600e+01 -1.98354e+01 -2.07154e+01 + 854 854 1 1.18700e+01 2.22800e+01 -2.55445e-01 + 855 855 1 -1.34855e+01 7.60000e-01 1.71900e+01 + 856 856 1 1.43600e+01 2.37900e+01 -1.96454e+01 + 857 857 1 -1.97955e+01 2.16100e+01 -2.32254e+01 + 858 858 1 1.41200e+01 1.66900e+01 3.03700e+01 + 859 859 1 -1.79545e+00 -2.90654e+01 -2.35554e+01 + 860 860 1 -1.13255e+01 1.75200e+01 -2.80154e+01 + 861 861 1 -2.88355e+01 2.46000e+01 2.39900e+01 + 862 862 1 1.97600e+01 -6.65545e+00 -7.10545e+00 + 863 863 1 5.09000e+00 -2.69554e+01 2.26100e+01 + 864 864 1 3.20000e-01 5.71000e+00 -2.14154e+01 + 865 865 1 1.68200e+01 9.00000e+00 7.96000e+00 + 866 866 1 2.20500e+01 -2.45854e+01 2.46900e+01 + 867 867 1 2.62200e+01 2.93000e+00 -2.86654e+01 + 868 868 1 1.29700e+01 5.96000e+00 -3.78545e+00 + 869 869 1 -1.24255e+01 -1.23545e+00 -9.95545e+00 + 870 870 1 -2.88545e+00 -1.78154e+01 2.82000e+01 + 871 871 1 1.99700e+01 2.69500e+01 -1.09354e+01 + 872 872 1 2.86700e+01 1.32700e+01 1.89000e+01 + 873 873 1 6.25000e+00 -4.94545e+00 2.54900e+01 + 874 874 1 -1.42255e+01 1.27300e+01 2.09400e+01 + 875 875 1 -8.01545e+00 2.40600e+01 1.49000e+00 + 876 876 1 1.18400e+01 2.80500e+01 1.39200e+01 + 877 877 1 1.32600e+01 -1.15454e+01 1.64800e+01 + 878 878 1 -1.98555e+01 1.07300e+01 2.13700e+01 + 879 879 1 -7.69545e+00 -2.35754e+01 -2.07054e+01 + 880 880 1 -2.34055e+01 -1.46454e+01 5.79000e+00 + 881 881 1 2.70800e+01 -2.36754e+01 4.17000e+00 + 882 882 1 -5.90545e+00 -1.90754e+01 8.67000e+00 + 883 883 1 -2.18055e+01 2.26500e+01 -5.52545e+00 + 884 884 1 2.55800e+01 3.01100e+01 2.81000e+00 + 885 885 1 2.18400e+01 2.24800e+01 3.01600e+01 + 886 886 1 2.83000e+00 -7.92545e+00 1.59000e+00 + 887 887 1 -2.92545e+00 -1.97454e+01 2.52900e+01 + 888 888 1 -6.65450e-01 -4.10545e+00 -6.75445e-01 + 889 889 1 1.63800e+01 1.46300e+01 -1.94654e+01 + 890 890 1 -4.66545e+00 2.16400e+01 -1.36354e+01 + 891 891 1 1.57400e+01 1.32000e+01 7.26000e+00 + 892 892 1 7.34000e+00 2.44100e+01 -2.61054e+01 + 893 893 1 -2.23655e+01 4.46000e+00 1.57900e+01 + 894 894 1 -1.74155e+01 -1.36454e+01 2.11300e+01 + 895 895 1 2.47100e+01 -2.35754e+01 -1.25454e+01 + 896 896 1 -1.39455e+01 1.40100e+01 -1.17554e+01 + 897 897 1 3.20000e+00 2.32900e+01 5.08000e+00 + 898 898 1 -1.32255e+01 3.04000e+01 1.72700e+01 + 899 899 1 -2.27755e+01 7.74000e+00 -9.11545e+00 + 900 900 1 8.29000e+00 1.89400e+01 1.46900e+01 + 901 901 1 2.11800e+01 1.82100e+01 3.03500e+01 + 902 902 1 -1.20055e+01 -1.62254e+01 4.27000e+00 + 903 903 1 -2.01155e+01 1.97800e+01 -1.69754e+01 + 904 904 1 1.26900e+01 -1.53554e+01 1.66100e+01 + 905 905 1 1.52500e+01 -3.04854e+01 2.55500e+01 + 906 906 1 1.04100e+01 -1.88854e+01 -2.32545e+00 + 907 907 1 -8.36545e+00 8.42000e+00 2.07000e+00 + 908 908 1 -2.21055e+01 6.18000e+00 7.89000e+00 + 909 909 1 -2.00055e+01 2.57000e+01 2.60500e+01 + 910 910 1 5.73000e+00 9.65000e+00 -1.30554e+01 + 911 911 1 -2.87155e+01 2.93500e+01 -7.50545e+00 + 912 912 1 -1.70855e+01 -1.41354e+01 -2.04254e+01 + 913 913 1 -8.51545e+00 -2.27054e+01 1.13100e+01 + 914 914 1 -6.12545e+00 5.60000e-01 -2.92354e+01 + 915 915 1 -9.92545e+00 1.07900e+01 1.47500e+01 + 916 916 1 -2.14755e+01 7.70000e-01 -2.56254e+01 + 917 917 1 -2.61655e+01 -6.59545e+00 -1.56454e+01 + 918 918 1 1.69200e+01 -9.54545e+00 7.69000e+00 + 919 919 1 -2.96455e+01 -6.82545e+00 -4.45445e-01 + 920 920 1 7.70000e+00 2.35800e+01 8.64000e+00 + 921 921 1 -1.89355e+01 -2.64854e+01 1.00600e+01 + 922 922 1 8.63000e+00 -4.52545e+00 2.12200e+01 + 923 923 1 1.85200e+01 -2.09354e+01 1.71700e+01 + 924 924 1 -1.05855e+01 1.97000e+00 -1.34954e+01 + 925 925 1 -2.45450e-01 2.50000e+00 1.13500e+01 + 926 926 1 -2.19455e+01 -1.23254e+01 2.26000e+00 + 927 927 1 1.73100e+01 -2.87854e+01 -8.09545e+00 + 928 928 1 -9.80545e+00 -1.91754e+01 -1.96754e+01 + 929 929 1 5.13000e+00 2.59000e+00 -2.63054e+01 + 930 930 1 -1.36055e+01 -3.00545e+00 1.50300e+01 + 931 931 1 2.08000e+00 8.30000e-01 -4.49545e+00 + 932 932 1 -1.18755e+01 -1.92254e+01 1.31500e+01 + 933 933 1 -2.14955e+01 1.59400e+01 2.03500e+01 + 934 934 1 -1.24055e+01 8.16000e+00 -4.96545e+00 + 935 935 1 1.06300e+01 2.54200e+01 2.95600e+01 + 936 936 1 -1.43555e+01 -1.00954e+01 -1.96654e+01 + 937 937 1 2.55700e+01 1.30900e+01 -7.05545e+00 + 938 938 1 -9.40545e+00 1.52300e+01 -1.17754e+01 + 939 939 1 2.07000e+00 -1.80154e+01 2.38400e+01 + 940 940 1 1.35200e+01 1.98300e+01 9.96000e+00 + 941 941 1 1.26000e+01 -2.00545e+00 2.65500e+01 + 942 942 1 1.57800e+01 3.20000e-01 1.49200e+01 + 943 943 1 8.67000e+00 2.64500e+01 2.57800e+01 + 944 944 1 -2.87255e+01 6.67000e+00 -1.01454e+01 + 945 945 1 2.09000e+00 -6.12545e+00 1.28300e+01 + 946 946 1 -1.72055e+01 3.74000e+00 -2.08054e+01 + 947 947 1 7.30000e-01 5.72000e+00 1.05500e+01 + 948 948 1 1.87800e+01 -1.56954e+01 6.46000e+00 + 949 949 1 2.29600e+01 7.80000e+00 1.42500e+01 + 950 950 1 -1.22155e+01 2.73400e+01 -2.88554e+01 + 951 951 1 2.31700e+01 -2.62154e+01 1.19000e+01 + 952 952 1 1.03100e+01 -1.60000e-01 9.87000e+00 + 953 953 1 -1.98255e+01 -2.82954e+01 -1.11754e+01 + 954 954 1 -2.43955e+01 2.30200e+01 1.73300e+01 + 955 955 1 1.25500e+01 2.75200e+01 1.11000e+00 + 956 956 1 -1.93755e+01 -1.81545e+00 2.59900e+01 + 957 957 1 -5.22545e+00 -3.06054e+01 -5.32545e+00 + 958 958 1 2.97700e+01 7.90000e-01 -1.60854e+01 + 959 959 1 2.39500e+01 1.57600e+01 -4.82545e+00 + 960 960 1 -2.60255e+01 -3.23545e+00 -1.64545e+00 + 961 961 1 -1.26955e+01 1.36900e+01 4.35000e+00 + 962 962 1 -2.22855e+01 3.62000e+00 -1.51554e+01 + 963 963 1 2.19700e+01 -1.61654e+01 -1.01954e+01 + 964 964 1 -2.62755e+01 -2.78854e+01 1.59200e+01 + 965 965 1 2.05700e+01 1.65800e+01 2.56000e+00 + 966 966 1 -9.24545e+00 -1.81545e+00 8.19000e+00 + 967 967 1 -1.08355e+01 -1.22454e+01 -1.90554e+01 + 968 968 1 -2.10155e+01 -1.71854e+01 2.33100e+01 + 969 969 1 -4.40545e+00 -1.28545e+00 -2.22354e+01 + 970 970 1 -2.95955e+01 -2.89854e+01 2.22400e+01 + 971 971 1 -1.23545e+00 -1.16854e+01 -8.34545e+00 + 972 972 1 -5.23545e+00 2.34600e+01 -1.72654e+01 + 973 973 1 4.94000e+00 1.87600e+01 2.43200e+01 + 974 974 1 3.38000e+00 -1.51054e+01 -1.41154e+01 + 975 975 1 -1.13545e+00 -7.63545e+00 -2.21454e+01 + 976 976 1 3.03600e+01 -9.91545e+00 2.22000e+01 + 977 977 1 -1.91155e+01 1.56500e+01 1.66300e+01 + 978 978 1 1.80000e-01 -1.22554e+01 -2.78354e+01 + 979 979 1 2.98200e+01 9.37000e+00 -2.63054e+01 + 980 980 1 -2.21055e+01 1.12100e+01 -2.69754e+01 + 981 981 1 -1.97755e+01 2.71200e+01 -1.33354e+01 + 982 982 1 1.85600e+01 1.34200e+01 -2.74954e+01 + 983 983 1 -1.23855e+01 2.49800e+01 -2.42354e+01 + 984 984 1 -3.07055e+01 1.71400e+01 2.51800e+01 + 985 985 1 -4.55545e+00 2.39900e+01 -3.79545e+00 + 986 986 1 1.50800e+01 -4.60545e+00 2.17300e+01 + 987 987 1 2.77000e+00 2.25600e+01 -1.43354e+01 + 988 988 1 1.11500e+01 1.90200e+01 2.17000e+01 + 989 989 1 -1.50955e+01 -2.01254e+01 -2.39954e+01 + 990 990 1 -2.00855e+01 -9.66545e+00 -6.45445e-01 + 991 991 1 -1.12355e+01 -3.49545e+00 -2.59054e+01 + 992 992 1 1.78200e+01 -2.85254e+01 -1.17354e+01 + 993 993 1 1.49400e+01 2.33100e+01 6.58000e+00 + 994 994 1 -1.35755e+01 -2.12554e+01 2.61600e+01 + 995 995 1 -1.43355e+01 1.27500e+01 2.98700e+01 + 996 996 1 7.60000e+00 2.72200e+01 -1.06654e+01 + 997 997 1 1.05800e+01 -1.24545e+00 2.28500e+01 + 998 998 1 -9.75545e+00 -1.28354e+01 -2.62254e+01 + 999 999 1 1.35300e+01 -1.82854e+01 -1.85445e-01 + 1000 1000 1 -2.73255e+01 -9.72545e+00 -1.83654e+01 + 1001 1001 1 -2.62455e+01 2.21000e+00 6.39000e+00 + 1002 1002 1 -1.63055e+01 -2.37854e+01 -2.70754e+01 + 1003 1003 1 -1.53455e+01 1.39600e+01 -2.74654e+01 + 1004 1004 1 -2.53055e+01 -2.03545e+00 -1.12454e+01 + 1005 1005 1 1.17700e+01 -1.07254e+01 -3.07454e+01 + 1006 1006 1 2.68000e+01 -1.58354e+01 -2.09545e+00 + 1007 1007 1 1.25600e+01 2.70700e+01 -1.67654e+01 + 1008 1008 1 -1.61455e+01 -1.69154e+01 -1.00854e+01 + 1009 1009 1 -2.49255e+01 5.11000e+00 1.98500e+01 + 1010 1010 1 -2.36655e+01 -3.90545e+00 2.43500e+01 + 1011 1011 1 2.48800e+01 3.00700e+01 2.03400e+01 + 1012 1012 1 -7.26545e+00 8.69000e+00 -4.91545e+00 + 1013 1013 1 2.09200e+01 -1.20754e+01 7.82000e+00 + 1014 1014 1 -2.99455e+01 1.00200e+01 -1.02054e+01 + 1015 1015 1 -2.55450e-01 1.73300e+01 -7.60545e+00 + 1016 1016 1 -2.06755e+01 -1.50454e+01 1.81000e+01 + 1017 1017 1 3.59000e+00 1.30000e+01 -1.02545e+00 + 1018 1018 1 -2.40255e+01 2.49000e+00 -7.18545e+00 + 1019 1019 1 3.36000e+00 -1.65054e+01 -3.67545e+00 + 1020 1020 1 5.94000e+00 1.08700e+01 2.11000e+01 + 1021 1021 1 -2.57655e+01 -1.58954e+01 -2.13654e+01 + 1022 1022 1 2.23000e+00 -3.17545e+00 1.96000e+01 + 1023 1023 1 1.04000e+01 2.22300e+01 -2.37054e+01 + 1024 1024 1 2.26300e+01 -1.31654e+01 -6.14545e+00 + 1025 1025 1 -1.51055e+01 1.65000e+01 -2.97354e+01 + 1026 1026 1 -2.26855e+01 2.22200e+01 -1.29354e+01 + 1027 1027 1 3.36000e+00 -1.28545e+00 2.29500e+01 + 1028 1028 1 2.56000e+00 2.79200e+01 2.62800e+01 + 1029 1029 1 -4.36545e+00 -2.65854e+01 7.22000e+00 + 1030 1030 1 -2.84545e+00 1.65100e+01 -2.26254e+01 + 1031 1031 1 2.32000e+01 -1.32154e+01 -2.84954e+01 + 1032 1032 1 -8.86545e+00 -2.37545e+00 -2.08954e+01 + 1033 1033 1 -8.97545e+00 1.54400e+01 1.53500e+01 + 1034 1034 1 -6.10545e+00 2.95200e+01 -9.73545e+00 + 1035 1035 1 2.72900e+01 1.09400e+01 -1.93154e+01 + 1036 1036 1 -2.34555e+01 9.18000e+00 2.05800e+01 + 1037 1037 1 2.19700e+01 2.38100e+01 2.61000e+01 + 1038 1038 1 -1.90455e+01 -1.09454e+01 1.64900e+01 + 1039 1039 1 -3.03545e+00 1.71200e+01 9.06000e+00 + 1040 1040 1 1.82500e+01 -1.27354e+01 1.23800e+01 + 1041 1041 1 -2.30545e+00 2.76400e+01 -2.39054e+01 + 1042 1042 1 2.08100e+01 -2.43654e+01 -1.94154e+01 + 1043 1043 1 -8.10545e+00 1.92300e+01 2.09100e+01 + 1044 1044 1 -5.39545e+00 1.39000e+01 1.16600e+01 + 1045 1045 1 1.01600e+01 -1.52854e+01 3.01400e+01 + 1046 1046 1 -2.71355e+01 8.22000e+00 2.57900e+01 + 1047 1047 1 2.96900e+01 -2.41154e+01 -2.46545e+00 + 1048 1048 1 -1.00655e+01 -9.79545e+00 -2.15454e+01 + 1049 1049 1 -3.45450e-01 1.84000e+00 -1.05545e+00 + 1050 1050 1 -1.83955e+01 -6.44545e+00 1.66600e+01 + 1051 1051 1 -8.90545e+00 -1.22854e+01 -1.09545e+00 + 1052 1052 1 1.03000e+01 -9.80545e+00 -2.40254e+01 + 1053 1053 1 -5.98545e+00 -6.05446e-01 3.53000e+00 + 1054 1054 1 -1.29545e+00 -1.17854e+01 -1.91954e+01 + 1055 1055 1 2.24600e+01 -2.43554e+01 4.04000e+00 + 1056 1056 1 2.25700e+01 -1.15254e+01 -1.14854e+01 + 1057 1057 1 2.37700e+01 2.57800e+01 7.02000e+00 + 1058 1058 1 -1.00555e+01 -1.56754e+01 -8.85545e+00 + 1059 1059 1 -1.59455e+01 -4.21545e+00 -8.91545e+00 + 1060 1060 1 -1.47055e+01 -3.00654e+01 -9.45445e-01 + 1061 1061 1 3.35000e+00 3.07100e+01 9.95000e+00 + 1062 1062 1 1.20200e+01 1.68500e+01 7.34000e+00 + 1063 1063 1 1.58800e+01 -1.48354e+01 -2.13354e+01 + 1064 1064 1 -1.31955e+01 -7.00545e+00 -1.86154e+01 + 1065 1065 1 -7.14545e+00 9.28000e+00 1.67900e+01 + 1066 1066 1 9.12000e+00 -1.33754e+01 1.43400e+01 + 1067 1067 1 2.16600e+01 2.71600e+01 -1.82854e+01 + 1068 1068 1 -2.66155e+01 -2.60954e+01 1.99700e+01 + 1069 1069 1 1.76700e+01 -2.89554e+01 1.68700e+01 + 1070 1070 1 2.13200e+01 -1.56545e+00 -2.68754e+01 + 1071 1071 1 -2.15555e+01 1.34300e+01 2.70000e+01 + 1072 1072 1 -1.14155e+01 -7.99545e+00 -1.43545e+00 + 1073 1073 1 -1.17955e+01 2.21800e+01 -4.90545e+00 + 1074 1074 1 2.94500e+01 1.89100e+01 -2.87554e+01 + 1075 1075 1 -2.83255e+01 -4.55446e-01 1.13500e+01 + 1076 1076 1 -2.38655e+01 -8.82545e+00 -9.63545e+00 + 1077 1077 1 2.05700e+01 -3.71545e+00 1.50900e+01 + 1078 1078 1 2.98000e+00 2.13000e+01 2.25900e+01 + 1079 1079 1 -2.91055e+01 -2.59754e+01 -1.70154e+01 + 1080 1080 1 -4.35545e+00 -7.09545e+00 2.29300e+01 + 1081 1081 1 2.75300e+01 7.59000e+00 -1.56754e+01 + 1082 1082 1 -2.56545e+00 1.80100e+01 -1.01954e+01 + 1083 1083 1 -9.68545e+00 -1.66254e+01 -2.83545e+00 + 1084 1084 1 1.85200e+01 -7.94545e+00 2.19600e+01 + 1085 1085 1 -2.00000e-01 2.24100e+01 7.12000e+00 + 1086 1086 1 -6.62545e+00 6.54000e+00 9.47000e+00 + 1087 1087 1 -5.43545e+00 -2.14554e+01 6.49000e+00 + 1088 1088 1 6.29000e+00 3.08100e+01 3.02400e+01 + 1089 1089 1 -2.94955e+01 1.74100e+01 8.89000e+00 + 1090 1090 1 -8.23545e+00 6.58000e+00 1.39400e+01 + 1091 1091 1 -1.35555e+01 2.16600e+01 5.16000e+00 + 1092 1092 1 -9.14545e+00 1.60200e+01 4.40000e-01 + 1093 1093 1 -8.15545e+00 -1.24254e+01 7.25000e+00 + 1094 1094 1 1.40900e+01 1.93500e+01 -2.25854e+01 + 1095 1095 1 9.80000e+00 -3.03454e+01 1.54400e+01 + 1096 1096 1 -8.60545e+00 1.26500e+01 2.68500e+01 + 1097 1097 1 -3.06955e+01 -4.63545e+00 1.50800e+01 + 1098 1098 1 -1.30055e+01 2.63100e+01 -1.96354e+01 + 1099 1099 1 1.82800e+01 2.41200e+01 -1.40354e+01 + 1100 1100 1 5.84000e+00 2.69600e+01 1.57000e+00 + 1101 1101 1 -1.52155e+01 -9.95545e+00 -6.42545e+00 + 1102 1102 1 1.80000e+00 2.09400e+01 -3.26545e+00 + 1103 1103 1 -8.03545e+00 -2.68854e+01 6.96000e+00 + 1104 1104 1 2.96600e+01 -1.03854e+01 6.72000e+00 + 1105 1105 1 2.66600e+01 1.22400e+01 5.26000e+00 + 1106 1106 1 -2.29855e+01 -1.75545e+00 1.18900e+01 + 1107 1107 1 -7.95450e-01 4.65000e+00 -1.40154e+01 + 1108 1108 1 -1.35455e+01 1.87000e+00 -1.66754e+01 + 1109 1109 1 -2.44355e+01 2.45500e+01 1.00700e+01 + 1110 1110 1 -1.95155e+01 1.45600e+01 -2.61954e+01 + 1111 1111 1 -2.09755e+01 2.31300e+01 -2.03654e+01 + 1112 1112 1 -3.06355e+01 -2.77654e+01 2.50000e+01 + 1113 1113 1 -9.68545e+00 -1.50854e+01 2.91400e+01 + 1114 1114 1 -1.53955e+01 -5.63545e+00 -2.35554e+01 + 1115 1115 1 1.47300e+01 -1.57154e+01 2.41200e+01 + 1116 1116 1 -6.91545e+00 9.32000e+00 6.79000e+00 + 1117 1117 1 1.21000e+01 -5.20545e+00 2.04000e+01 + 1118 1118 1 -1.58955e+01 2.15600e+01 -1.78654e+01 + 1119 1119 1 -1.50855e+01 2.90500e+01 -1.32454e+01 + 1120 1120 1 2.35000e+00 -1.46854e+01 -2.41954e+01 + 1121 1121 1 1.15500e+01 -7.48545e+00 3.01200e+01 + 1122 1122 1 -2.68055e+01 1.03000e+01 -1.56054e+01 + 1123 1123 1 2.68200e+01 -7.20545e+00 -2.67054e+01 + 1124 1124 1 -1.02555e+01 -5.85545e+00 -2.32854e+01 + 1125 1125 1 -1.19855e+01 9.60000e-01 2.91200e+01 + 1126 1126 1 1.93000e+00 9.92000e+00 1.07200e+01 + 1127 1127 1 6.47000e+00 -2.91154e+01 -9.32545e+00 + 1128 1128 1 -2.70855e+01 1.60300e+01 4.92000e+00 + 1129 1129 1 -1.09155e+01 -1.70754e+01 2.43600e+01 + 1130 1130 1 -2.20155e+01 1.57900e+01 -2.98545e+00 + 1131 1131 1 6.18000e+00 -2.06545e+00 3.32000e+00 + 1132 1132 1 8.10000e-01 -2.72054e+01 -2.70554e+01 + 1133 1133 1 9.20000e-01 -1.91854e+01 7.30000e-01 + 1134 1134 1 2.53100e+01 -3.12545e+00 -9.90545e+00 + 1135 1135 1 -4.83545e+00 3.03400e+01 1.11200e+01 + 1136 1136 1 -9.66545e+00 -4.44545e+00 2.05100e+01 + 1137 1137 1 -8.25545e+00 2.78900e+01 9.54000e+00 + 1138 1138 1 -3.02255e+01 8.95000e+00 1.79800e+01 + 1139 1139 1 -9.05450e-01 2.78500e+01 -1.60254e+01 + 1140 1140 1 2.01900e+01 -1.76254e+01 -2.33854e+01 + 1141 1141 1 -9.76545e+00 6.95000e+00 1.73800e+01 + 1142 1142 1 -2.16255e+01 -1.05654e+01 -2.90054e+01 + 1143 1143 1 1.81000e+00 -1.70545e+00 -8.16545e+00 + 1144 1144 1 -1.01555e+01 3.94000e+00 2.78000e+00 + 1145 1145 1 -2.09655e+01 -2.69254e+01 5.72000e+00 + 1146 1146 1 -1.45855e+01 -8.55545e+00 3.07700e+01 + 1147 1147 1 1.76400e+01 2.09800e+01 8.76000e+00 + 1148 1148 1 -9.71545e+00 2.40800e+01 -2.04054e+01 + 1149 1149 1 -2.03655e+01 -4.60545e+00 -5.47545e+00 + 1150 1150 1 -1.24545e+00 1.58700e+01 1.73700e+01 + 1151 1151 1 -1.50255e+01 -2.53054e+01 1.11700e+01 + 1152 1152 1 2.66800e+01 9.10000e+00 2.08700e+01 + 1153 1153 1 1.90000e+01 -2.89254e+01 3.09500e+01 + 1154 1154 1 7.07000e+00 -2.37954e+01 -3.81545e+00 + 1155 1155 1 9.82000e+00 4.13000e+00 1.34500e+01 + 1156 1156 1 2.01700e+01 -2.53654e+01 2.88300e+01 + 1157 1157 1 2.50000e+01 -3.96545e+00 2.12300e+01 + 1158 1158 1 2.91900e+01 1.49500e+01 2.74900e+01 + 1159 1159 1 4.15000e+00 -1.30254e+01 -1.76454e+01 + 1160 1160 1 1.40300e+01 2.93200e+01 -2.58754e+01 + 1161 1161 1 -3.40545e+00 2.22600e+01 7.75000e+00 + 1162 1162 1 1.35700e+01 -1.43754e+01 1.32000e+00 + 1163 1163 1 3.07300e+01 -9.04545e+00 1.80700e+01 + 1164 1164 1 4.63000e+00 -1.04154e+01 -3.00954e+01 + 1165 1165 1 -4.78545e+00 8.20000e+00 -1.17054e+01 + 1166 1166 1 -2.87855e+01 2.35000e+00 -2.81554e+01 + 1167 1167 1 -4.12545e+00 -2.72754e+01 -1.05545e+00 + 1168 1168 1 -8.40545e+00 -2.71454e+01 -8.45545e+00 + 1169 1169 1 -6.04545e+00 2.33500e+01 2.28200e+01 + 1170 1170 1 -2.93355e+01 3.67000e+00 9.81000e+00 + 1171 1171 1 -2.73255e+01 -4.35446e-01 2.78900e+01 + 1172 1172 1 -1.07855e+01 -1.55054e+01 1.60900e+01 + 1173 1173 1 -2.40555e+01 -2.96454e+01 2.31700e+01 + 1174 1174 1 2.52700e+01 -1.54154e+01 -1.83754e+01 + 1175 1175 1 -1.99355e+01 1.33500e+01 1.41200e+01 + 1176 1176 1 -1.43755e+01 6.89000e+00 6.60000e+00 + 1177 1177 1 2.97000e+01 -1.23554e+01 -4.87545e+00 + 1178 1178 1 2.16100e+01 1.40000e+01 8.82000e+00 + 1179 1179 1 1.28000e+00 2.95100e+01 -2.22054e+01 + 1180 1180 1 1.64600e+01 -2.85054e+01 -2.52654e+01 + 1181 1181 1 8.26000e+00 -2.49554e+01 -2.28954e+01 + 1182 1182 1 -2.87755e+01 3.27000e+00 2.23800e+01 + 1183 1183 1 -1.45655e+01 2.91300e+01 -5.05545e+00 + 1184 1184 1 -2.24455e+01 3.03500e+01 -1.49754e+01 + 1185 1185 1 -2.41755e+01 -1.34354e+01 -1.07354e+01 + 1186 1186 1 -2.17655e+01 4.17000e+00 -2.49754e+01 + 1187 1187 1 2.64100e+01 -1.12154e+01 1.51000e+01 + 1188 1188 1 1.90600e+01 -1.56654e+01 -8.03545e+00 + 1189 1189 1 -3.03255e+01 5.45000e+00 -1.93654e+01 + 1190 1190 1 -1.24855e+01 -1.19554e+01 2.66900e+01 + 1191 1191 1 1.82600e+01 -1.62354e+01 1.29600e+01 + 1192 1192 1 2.36100e+01 2.55000e+00 -2.15354e+01 + 1193 1193 1 2.24300e+01 -2.74254e+01 -1.22454e+01 + 1194 1194 1 2.09000e+00 -8.95446e-01 1.01900e+01 + 1195 1195 1 2.50900e+01 3.08900e+01 -9.69545e+00 + 1196 1196 1 3.90000e-01 2.11100e+01 -7.11545e+00 + 1197 1197 1 -7.51545e+00 5.62000e+00 5.75000e+00 + 1198 1198 1 -1.05355e+01 -2.71054e+01 -5.46545e+00 + 1199 1199 1 1.17700e+01 2.64400e+01 1.76800e+01 + 1200 1200 1 1.45700e+01 2.40600e+01 1.23900e+01 + 1201 1201 1 2.74300e+01 -1.06954e+01 -1.88554e+01 + 1202 1202 1 -3.06355e+01 -2.31554e+01 2.87000e+00 + 1203 1203 1 -1.75855e+01 -1.78545e+00 1.82700e+01 + 1204 1204 1 1.64900e+01 1.16000e+01 -2.45445e-01 + 1205 1205 1 -3.00055e+01 5.86000e+00 7.13000e+00 + 1206 1206 1 8.50000e-01 1.08300e+01 -4.04545e+00 + 1207 1207 1 1.49800e+01 -1.22654e+01 4.13000e+00 + 1208 1208 1 -3.05555e+01 -2.14554e+01 2.91700e+01 + 1209 1209 1 -3.04455e+01 2.29500e+01 1.58000e+00 + 1210 1210 1 -4.17545e+00 -7.76545e+00 2.85500e+01 + 1211 1211 1 2.73600e+01 -2.28154e+01 3.01200e+01 + 1212 1212 1 -1.46655e+01 8.46000e+00 -8.55545e+00 + 1213 1213 1 -2.76355e+01 2.95200e+01 1.80000e+00 + 1214 1214 1 -7.43545e+00 1.79300e+01 6.63000e+00 + 1215 1215 1 1.25000e+01 7.50000e+00 -2.59954e+01 + 1216 1216 1 2.33100e+01 3.07300e+01 -2.62454e+01 + 1217 1217 1 2.35500e+01 1.85100e+01 4.60000e-01 + 1218 1218 1 2.40800e+01 1.52700e+01 2.36400e+01 + 1219 1219 1 -2.29455e+01 1.75300e+01 -2.68954e+01 + 1220 1220 1 -1.03755e+01 2.62100e+01 -1.71654e+01 + 1221 1221 1 -1.09455e+01 1.91200e+01 -4.40545e+00 + 1222 1222 1 2.29100e+01 1.17000e+01 -3.07554e+01 + 1223 1223 1 -1.93955e+01 -4.83545e+00 1.91400e+01 + 1224 1224 1 2.35800e+01 -1.17554e+01 -2.14154e+01 + 1225 1225 1 1.89600e+01 -1.31545e+00 2.81100e+01 + 1226 1226 1 1.84700e+01 9.87000e+00 -2.68954e+01 + 1227 1227 1 -7.63545e+00 2.01400e+01 1.05700e+01 + 1228 1228 1 2.05500e+01 -1.89654e+01 1.49900e+01 + 1229 1229 1 2.50800e+01 2.00200e+01 -3.09154e+01 + 1230 1230 1 -2.55055e+01 -2.91554e+01 -1.80054e+01 + 1231 1231 1 -2.60555e+01 2.04900e+01 1.19800e+01 + 1232 1232 1 8.69000e+00 6.50000e-01 -6.15445e-01 + 1233 1233 1 -3.04355e+01 2.12800e+01 1.07800e+01 + 1234 1234 1 -8.75450e-01 -1.57454e+01 1.69400e+01 + 1235 1235 1 2.31500e+01 2.55500e+01 -3.03854e+01 + 1236 1236 1 -2.64355e+01 -4.92545e+00 2.79000e+01 + 1237 1237 1 -3.10555e+01 -3.05254e+01 2.99500e+01 + 1238 1238 1 7.28000e+00 -1.03954e+01 1.96000e+00 + 1239 1239 1 1.31600e+01 3.08000e+01 2.88100e+01 + 1240 1240 1 8.43000e+00 1.37400e+01 2.37000e+01 + 1241 1241 1 -2.45655e+01 -2.82254e+01 -1.38054e+01 + 1242 1242 1 2.23500e+01 1.20400e+01 -2.52154e+01 + 1243 1243 1 -1.13055e+01 2.94700e+01 -2.34554e+01 + 1244 1244 1 1.42000e+01 1.84700e+01 -3.98545e+00 + 1245 1245 1 -2.57455e+01 1.20800e+01 2.46700e+01 + 1246 1246 1 -2.54545e+00 1.07400e+01 -1.06654e+01 + 1247 1247 1 1.30000e+00 -9.58545e+00 9.84000e+00 + 1248 1248 1 -2.05450e-01 8.12000e+00 1.78300e+01 + 1249 1249 1 1.82400e+01 -5.30545e+00 2.98900e+01 + 1250 1250 1 8.80000e+00 -5.03545e+00 -1.25254e+01 + 1251 1251 1 -8.12545e+00 2.29100e+01 6.17000e+00 + 1252 1252 1 -1.43955e+01 -1.83454e+01 1.56700e+01 + 1253 1253 1 1.54550e-01 4.05000e+00 2.83800e+01 + 1254 1254 1 -1.01755e+01 1.48800e+01 -1.84254e+01 + 1255 1255 1 -3.01955e+01 1.21900e+01 2.75400e+01 + 1256 1256 1 -2.24155e+01 -2.04054e+01 1.07400e+01 + 1257 1257 1 -7.95450e-01 7.63000e+00 -2.43154e+01 + 1258 1258 1 7.49000e+00 1.42800e+01 -1.17254e+01 + 1259 1259 1 2.67800e+01 -2.37454e+01 -5.73545e+00 + 1260 1260 1 -1.73455e+01 2.41000e+00 1.87500e+01 + 1261 1261 1 1.66700e+01 5.47000e+00 -7.55445e-01 + 1262 1262 1 -6.52545e+00 9.75000e+00 -2.09554e+01 + 1263 1263 1 1.55400e+01 -2.70554e+01 3.27000e+00 + 1264 1264 1 2.31100e+01 6.80000e-01 3.87000e+00 + 1265 1265 1 3.03400e+01 6.25000e+00 -2.31354e+01 + 1266 1266 1 -1.78655e+01 2.25700e+01 1.35500e+01 + 1267 1267 1 -2.65755e+01 -1.62554e+01 -1.13154e+01 + 1268 1268 1 -2.25455e+01 1.12200e+01 -7.16545e+00 + 1269 1269 1 -2.87155e+01 2.26100e+01 -2.44954e+01 + 1270 1270 1 -7.82545e+00 -2.82754e+01 1.84100e+01 + 1271 1271 1 -2.50055e+01 2.50000e-01 3.08200e+01 + 1272 1272 1 2.83200e+01 -4.15545e+00 -1.56354e+01 + 1273 1273 1 -2.44155e+01 2.09200e+01 3.29000e+00 + 1274 1274 1 -2.12545e+00 2.61000e+00 2.84000e+00 + 1275 1275 1 2.50800e+01 2.72000e+01 -3.26545e+00 + 1276 1276 1 6.85000e+00 2.26400e+01 1.57300e+01 + 1277 1277 1 1.83500e+01 -1.60454e+01 2.84400e+01 + 1278 1278 1 1.68000e+00 -2.44854e+01 -2.49854e+01 + 1279 1279 1 -8.83545e+00 4.42000e+00 -2.40354e+01 + 1280 1280 1 5.50000e+00 1.74000e+00 1.85500e+01 + 1281 1281 1 1.48400e+01 -4.32545e+00 1.73000e+01 + 1282 1282 1 -1.45955e+01 9.93000e+00 -2.15554e+01 + 1283 1283 1 8.01000e+00 -3.74545e+00 -1.56954e+01 + 1284 1284 1 3.06600e+01 2.03500e+01 2.24900e+01 + 1285 1285 1 -7.10545e+00 1.06700e+01 2.35400e+01 + 1286 1286 1 -2.15455e+01 -1.65054e+01 -4.38545e+00 + 1287 1287 1 1.11100e+01 -2.09954e+01 2.81300e+01 + 1288 1288 1 -1.97255e+01 -1.16654e+01 -1.24654e+01 + 1289 1289 1 2.62000e+01 9.76000e+00 -1.32154e+01 + 1290 1290 1 -1.73545e+00 5.58000e+00 -9.53545e+00 + 1291 1291 1 2.91000e+01 -2.55254e+01 1.65000e+00 + 1292 1292 1 -2.10855e+01 -1.08154e+01 -1.64154e+01 + 1293 1293 1 -1.22055e+01 2.74200e+01 1.55300e+01 + 1294 1294 1 1.92600e+01 1.97500e+01 1.65400e+01 + 1295 1295 1 -1.12255e+01 -1.49154e+01 -3.00154e+01 + 1296 1296 1 -8.70545e+00 -1.87754e+01 2.60700e+01 + 1297 1297 1 -2.77955e+01 2.73700e+01 1.16300e+01 + 1298 1298 1 -8.67545e+00 -2.86154e+01 9.80000e+00 + 1299 1299 1 2.06200e+01 -1.66545e+00 -5.23545e+00 + 1300 1300 1 6.88000e+00 -2.02554e+01 1.68800e+01 + 1301 1301 1 -7.88545e+00 2.10800e+01 -1.85154e+01 + 1302 1302 1 1.15500e+01 1.84300e+01 1.21700e+01 + 1303 1303 1 -1.55255e+01 3.67000e+00 2.86100e+01 + 1304 1304 1 1.34100e+01 -7.45545e+00 1.40100e+01 + 1305 1305 1 -2.78855e+01 1.95600e+01 2.06200e+01 + 1306 1306 1 2.93000e+00 2.05100e+01 9.99000e+00 + 1307 1307 1 2.38000e+01 -2.87254e+01 2.34600e+01 + 1308 1308 1 -1.98255e+01 -6.64545e+00 -1.80954e+01 + 1309 1309 1 -1.68545e+00 -4.41545e+00 -1.97854e+01 + 1310 1310 1 1.00900e+01 1.72800e+01 -1.37545e+00 + 1311 1311 1 4.50000e+00 1.21600e+01 1.72500e+01 + 1312 1312 1 -2.96055e+01 -7.49545e+00 -5.04545e+00 + 1313 1313 1 -4.00000e-02 -1.02054e+01 4.04555e-01 + 1314 1314 1 -2.60545e+00 -2.91554e+01 -2.68854e+01 + 1315 1315 1 1.46600e+01 4.32000e+00 -2.52954e+01 + 1316 1316 1 -8.85450e-01 3.00600e+01 2.73800e+01 + 1317 1317 1 -4.71545e+00 -2.15754e+01 1.78400e+01 + 1318 1318 1 1.87700e+01 1.60600e+01 -1.37554e+01 + 1319 1319 1 2.86800e+01 -1.42954e+01 -2.97854e+01 + 1320 1320 1 -2.41355e+01 -1.40000e-01 -2.20854e+01 + 1321 1321 1 2.70000e+01 -3.08354e+01 2.40000e+01 + 1322 1322 1 5.53000e+00 2.84800e+01 8.47000e+00 + 1323 1323 1 1.92400e+01 -2.68154e+01 5.05000e+00 + 1324 1324 1 -1.00855e+01 8.16000e+00 -1.23254e+01 + 1325 1325 1 -1.67255e+01 1.58400e+01 -1.65254e+01 + 1326 1326 1 -1.14855e+01 -1.41554e+01 2.04555e-01 + 1327 1327 1 -2.57355e+01 2.68000e+00 -1.80454e+01 + 1328 1328 1 1.54600e+01 -1.10545e+00 2.28800e+01 + 1329 1329 1 -2.01545e+00 2.45543e-02 9.87000e+00 + 1330 1330 1 -5.73545e+00 1.60200e+01 1.00000e+00 + 1331 1331 1 -2.17255e+01 -1.65054e+01 2.93900e+01 + 1332 1332 1 9.11000e+00 9.02000e+00 -1.73754e+01 + 1333 1333 1 1.94000e+01 -2.29454e+01 3.30000e+00 + 1334 1334 1 -2.68055e+01 -2.85454e+01 4.70000e-01 + 1335 1335 1 -2.23255e+01 3.60000e+00 5.51000e+00 + 1336 1336 1 -2.68545e+00 -6.08545e+00 -2.61554e+01 + 1337 1337 1 1.82200e+01 -2.44354e+01 2.11700e+01 + 1338 1338 1 -2.52855e+01 4.91000e+00 -2.98054e+01 + 1339 1339 1 -5.54502e-02 -1.61554e+01 -7.07545e+00 + 1340 1340 1 -9.59545e+00 -6.91545e+00 1.68700e+01 + 1341 1341 1 8.53000e+00 -1.81554e+01 -2.45854e+01 + 1342 1342 1 -1.65855e+01 1.83100e+01 -2.55554e+01 + 1343 1343 1 -6.75450e-01 1.21800e+01 2.05600e+01 + 1344 1344 1 -2.00555e+01 2.84800e+01 1.59600e+01 + 1345 1345 1 -1.37155e+01 -4.76545e+00 -2.87254e+01 + 1346 1346 1 2.24100e+01 2.80000e+01 -6.95545e+00 + 1347 1347 1 1.02300e+01 2.56500e+01 1.18700e+01 + 1348 1348 1 2.48000e+00 -2.16054e+01 -2.21254e+01 + 1349 1349 1 1.07000e+00 -3.03254e+01 2.18300e+01 + 1350 1350 1 -8.84545e+00 -2.36354e+01 -7.66545e+00 + 1351 1351 1 2.82700e+01 2.10900e+01 2.87000e+00 + 1352 1352 1 -7.27545e+00 -1.47545e+00 2.85700e+01 + 1353 1353 1 2.51400e+01 -2.30054e+01 -1.99354e+01 + 1354 1354 1 2.86400e+01 -2.08754e+01 -1.24754e+01 + 1355 1355 1 2.77500e+01 2.50300e+01 -6.24545e+00 + 1356 1356 1 1.76700e+01 2.62000e+00 1.11100e+01 + 1357 1357 1 -3.89545e+00 -2.50554e+01 -1.63454e+01 + 1358 1358 1 2.25700e+01 2.63000e+01 -5.55445e-01 + 1359 1359 1 3.28000e+00 -1.79554e+01 -2.42454e+01 + 1360 1360 1 -2.11555e+01 9.32000e+00 1.47800e+01 + 1361 1361 1 1.29600e+01 7.30000e-01 2.65000e+00 + 1362 1362 1 3.62000e+00 3.75000e+00 2.84900e+01 + 1363 1363 1 -2.78545e+00 -1.18154e+01 2.25000e+01 + 1364 1364 1 1.62500e+01 -2.71754e+01 -3.28545e+00 + 1365 1365 1 1.52200e+01 4.35000e+00 1.24400e+01 + 1366 1366 1 -2.30255e+01 2.09100e+01 2.08600e+01 + 1367 1367 1 2.50100e+01 -1.61654e+01 -7.28545e+00 + 1368 1368 1 1.02200e+01 2.32300e+01 2.33900e+01 + 1369 1369 1 4.18000e+00 -1.85854e+01 -2.06954e+01 + 1370 1370 1 -1.20555e+01 -1.84854e+01 2.90300e+01 + 1371 1371 1 -1.29755e+01 1.50000e+00 8.78000e+00 + 1372 1372 1 -2.24555e+01 2.90200e+01 -6.40545e+00 + 1373 1373 1 -2.56155e+01 1.86300e+01 1.62300e+01 + 1374 1374 1 3.05000e+01 4.09000e+00 1.28100e+01 + 1375 1375 1 -3.05955e+01 -2.56554e+01 8.23000e+00 + 1376 1376 1 1.52900e+01 -2.37654e+01 1.41500e+01 + 1377 1377 1 -7.61545e+00 -1.86754e+01 -3.04754e+01 + 1378 1378 1 -5.24545e+00 -5.01545e+00 -1.49454e+01 + 1379 1379 1 2.32500e+01 -5.39545e+00 -2.61554e+01 + 1380 1380 1 1.54900e+01 -8.66545e+00 -3.08854e+01 + 1381 1381 1 -2.93455e+01 1.23000e+00 -1.76754e+01 + 1382 1382 1 -2.66355e+01 2.40700e+01 -4.80545e+00 + 1383 1383 1 -1.67545e+00 2.76000e+01 -2.96754e+01 + 1384 1384 1 7.36000e+00 -2.52454e+01 1.53300e+01 + 1385 1385 1 -3.05155e+01 -1.02754e+01 -2.40000e-01 + 1386 1386 1 1.41000e+00 1.22500e+01 -3.07354e+01 + 1387 1387 1 8.98000e+00 5.26000e+00 -1.91954e+01 + 1388 1388 1 -2.44155e+01 -2.34854e+01 -2.40854e+01 + 1389 1389 1 1.58600e+01 -1.29154e+01 1.99500e+01 + 1390 1390 1 -1.16155e+01 -2.14054e+01 3.08900e+01 + 1391 1391 1 1.64000e+00 -5.25446e-01 -2.91654e+01 + 1392 1392 1 -1.77155e+01 -2.02545e+00 -2.80545e+00 + 1393 1393 1 1.56700e+01 2.98800e+01 1.19000e+01 + 1394 1394 1 -2.85055e+01 -2.77854e+01 -1.35854e+01 + 1395 1395 1 -5.99545e+00 -2.12254e+01 2.82500e+01 + 1396 1396 1 -1.14755e+01 -2.07454e+01 -1.72254e+01 + 1397 1397 1 -1.83755e+01 -2.65054e+01 -2.68854e+01 + 1398 1398 1 -5.75545e+00 2.25800e+01 -9.33545e+00 + 1399 1399 1 1.88600e+01 2.96600e+01 -1.55954e+01 + 1400 1400 1 7.17000e+00 1.58900e+01 -8.83545e+00 + 1401 1401 1 1.85000e+01 -2.96854e+01 9.04000e+00 + 1402 1402 1 -2.46955e+01 -8.65545e+00 2.26500e+01 + 1403 1403 1 -1.50155e+01 3.49000e+00 -2.47354e+01 + 1404 1404 1 1.59600e+01 -1.99054e+01 -2.29454e+01 + 1405 1405 1 -1.52655e+01 -2.72754e+01 -1.95254e+01 + 1406 1406 1 2.81400e+01 -6.78545e+00 -1.79254e+01 + 1407 1407 1 1.13500e+01 -2.52354e+01 2.80900e+01 + 1408 1408 1 2.43400e+01 1.78400e+01 -1.58454e+01 + 1409 1409 1 4.11000e+00 5.12000e+00 -9.44545e+00 + 1410 1410 1 -2.84455e+01 -2.36254e+01 2.51800e+01 + 1411 1411 1 -6.58545e+00 -5.48545e+00 1.04300e+01 + 1412 1412 1 2.46000e+01 -1.86654e+01 -1.22554e+01 + 1413 1413 1 1.96800e+01 1.02000e+00 -2.29354e+01 + 1414 1414 1 1.58000e+01 3.21000e+00 -1.33954e+01 + 1415 1415 1 -2.54855e+01 1.72800e+01 2.10800e+01 + 1416 1416 1 -8.96545e+00 -1.12854e+01 -1.20654e+01 + 1417 1417 1 -2.55855e+01 2.90500e+01 -1.07754e+01 + 1418 1418 1 6.82000e+00 -5.76545e+00 3.40000e+00 + 1419 1419 1 1.19700e+01 2.27900e+01 1.53600e+01 + 1420 1420 1 -2.71455e+01 -2.21054e+01 -7.87545e+00 + 1421 1421 1 -2.35055e+01 -2.62354e+01 -2.71954e+01 + 1422 1422 1 -3.15450e-01 -1.59654e+01 2.18700e+01 + 1423 1423 1 -2.15545e+00 1.36000e+00 2.51500e+01 + 1424 1424 1 2.95000e+01 5.83000e+00 3.06900e+01 + 1425 1425 1 -2.77955e+01 -7.22545e+00 1.81400e+01 + 1426 1426 1 5.66000e+00 1.03200e+01 4.93000e+00 + 1427 1427 1 -1.17955e+01 2.91900e+01 1.12900e+01 + 1428 1428 1 3.03400e+01 1.56600e+01 6.13000e+00 + 1429 1429 1 4.76000e+00 1.50000e+00 -3.09354e+01 + 1430 1430 1 -2.98055e+01 3.84000e+00 3.08000e+00 + 1431 1431 1 2.81000e+01 1.01000e+00 -2.16454e+01 + 1432 1432 1 8.44000e+00 -2.26554e+01 7.18000e+00 + 1433 1433 1 -1.92255e+01 1.91800e+01 -1.38354e+01 + 1434 1434 1 -2.72545e+00 3.76000e+00 6.15000e+00 + 1435 1435 1 -5.31545e+00 -6.36545e+00 1.79200e+01 + 1436 1436 1 -1.65855e+01 -1.03854e+01 -1.60654e+01 + 1437 1437 1 -8.48545e+00 -2.06554e+01 1.59800e+01 + 1438 1438 1 9.08000e+00 -1.06054e+01 -1.71754e+01 + 1439 1439 1 -2.77655e+01 3.05000e+00 -4.41545e+00 + 1440 1440 1 -2.73855e+01 -1.84854e+01 2.10200e+01 + 1441 1441 1 2.11700e+01 1.71900e+01 2.03200e+01 + 1442 1442 1 -2.85455e+01 -1.29354e+01 5.20000e-01 + 1443 1443 1 9.27000e+00 4.44000e+00 2.38000e+00 + 1444 1444 1 2.99100e+01 -2.52254e+01 1.20600e+01 + 1445 1445 1 1.07800e+01 5.29000e+00 -2.39254e+01 + 1446 1446 1 -2.69655e+01 -4.26545e+00 -1.37154e+01 + 1447 1447 1 -1.88555e+01 -2.78754e+01 1.63800e+01 + 1448 1448 1 2.68300e+01 1.41100e+01 -4.10545e+00 + 1449 1449 1 -2.54655e+01 8.94000e+00 1.65800e+01 + 1450 1450 1 2.57000e+01 2.98000e+00 -1.72354e+01 + 1451 1451 1 1.63900e+01 1.26200e+01 2.63700e+01 + 1452 1452 1 1.80000e+01 -3.35545e+00 -1.94054e+01 + 1453 1453 1 -1.36755e+01 1.11600e+01 1.02400e+01 + 1454 1454 1 -2.18755e+01 8.11000e+00 3.74000e+00 + 1455 1455 1 -1.13355e+01 -3.07854e+01 2.62500e+01 + 1456 1456 1 2.85100e+01 -1.07054e+01 -1.50454e+01 + 1457 1457 1 -2.42455e+01 -1.50054e+01 9.99000e+00 + 1458 1458 1 2.29400e+01 -1.85754e+01 5.08000e+00 + 1459 1459 1 2.79000e+00 1.87000e+00 -1.52654e+01 + 1460 1460 1 8.59000e+00 2.16100e+01 -1.11545e+00 + 1461 1461 1 3.06400e+01 1.56000e+01 -2.82754e+01 + 1462 1462 1 2.90200e+01 4.76000e+00 -1.55054e+01 + 1463 1463 1 -2.68655e+01 3.05500e+01 7.44000e+00 + 1464 1464 1 -2.80055e+01 -2.97654e+01 2.77000e+01 + 1465 1465 1 -3.89545e+00 -1.19154e+01 8.57000e+00 + 1466 1466 1 -1.93255e+01 -5.51545e+00 -2.19454e+01 + 1467 1467 1 -2.81355e+01 1.08600e+01 8.30000e-01 + 1468 1468 1 3.08600e+01 -9.65446e-01 4.12000e+00 + 1469 1469 1 1.21700e+01 -4.20545e+00 1.78000e+00 + 1470 1470 1 -1.26155e+01 -1.33354e+01 6.65000e+00 + 1471 1471 1 -2.58255e+01 -2.85446e-01 -2.59554e+01 + 1472 1472 1 2.11200e+01 -3.52545e+00 -2.31454e+01 + 1473 1473 1 3.10100e+01 -2.64654e+01 -2.11554e+01 + 1474 1474 1 -3.07455e+01 -1.61954e+01 -2.99354e+01 + 1475 1475 1 -2.30155e+01 -2.37554e+01 4.54000e+00 + 1476 1476 1 -7.23545e+00 -1.50854e+01 2.84000e+00 + 1477 1477 1 -1.31455e+01 -4.22545e+00 1.47000e+00 + 1478 1478 1 2.54000e+00 -1.49754e+01 2.18000e+00 + 1479 1479 1 1.93800e+01 -4.28545e+00 2.47900e+01 + 1480 1480 1 -6.91545e+00 -1.81154e+01 -8.33545e+00 + 1481 1481 1 2.33800e+01 1.22000e+00 2.12200e+01 + 1482 1482 1 2.05800e+01 -1.87154e+01 -6.41545e+00 + 1483 1483 1 -2.41455e+01 -1.60654e+01 1.88000e+00 + 1484 1484 1 3.01700e+01 6.60000e-01 2.89300e+01 + 1485 1485 1 1.28400e+01 -1.17545e+00 1.81700e+01 + 1486 1486 1 -2.60555e+01 2.76000e+00 -2.46454e+01 + 1487 1487 1 -2.97655e+01 2.22000e+01 -1.39354e+01 + 1488 1488 1 1.58100e+01 -6.28545e+00 -1.80654e+01 + 1489 1489 1 1.60700e+01 -1.10554e+01 -1.97354e+01 + 1490 1490 1 6.40000e+00 -2.41054e+01 1.90600e+01 + 1491 1491 1 -1.89555e+01 1.25300e+01 -3.85545e+00 + 1492 1492 1 1.75800e+01 -2.83154e+01 -1.87654e+01 + 1493 1493 1 -2.08755e+01 -2.32854e+01 -1.21754e+01 + 1494 1494 1 5.58000e+00 2.48700e+01 -1.92554e+01 + 1495 1495 1 1.69200e+01 8.12000e+00 2.30200e+01 + 1496 1496 1 -2.92855e+01 -1.69854e+01 -1.30545e+00 + 1497 1497 1 -1.79355e+01 -1.59954e+01 3.01700e+01 + 1498 1498 1 2.72000e+01 1.58000e+00 1.43700e+01 + 1499 1499 1 -1.02555e+01 -2.76654e+01 -1.96654e+01 + 1500 1500 1 1.85700e+01 5.66000e+00 -9.36545e+00 + 1501 1501 1 1.65900e+01 -1.92654e+01 2.48700e+01 + 1502 1502 1 -2.51455e+01 2.89500e+01 -2.78754e+01 + 1503 1503 1 2.94400e+01 -3.07554e+01 2.04300e+01 + 1504 1504 1 -1.79255e+01 -2.11954e+01 1.23600e+01 + 1505 1505 1 1.75700e+01 1.38300e+01 -3.63545e+00 + 1506 1506 1 1.13700e+01 2.15200e+01 -3.89545e+00 + 1507 1507 1 1.87000e+00 1.23200e+01 -1.58554e+01 + 1508 1508 1 3.08200e+01 2.98000e+01 -2.49154e+01 + 1509 1509 1 -2.88545e+00 -2.08454e+01 -1.77854e+01 + 1510 1510 1 1.08800e+01 -8.35446e-01 -7.86545e+00 + 1511 1511 1 -5.21545e+00 -2.56154e+01 -1.21754e+01 + 1512 1512 1 -4.67545e+00 3.07900e+01 -1.38254e+01 + 1513 1513 1 -1.64455e+01 6.80000e-01 1.38100e+01 + 1514 1514 1 5.68000e+00 -1.29254e+01 -2.46754e+01 + 1515 1515 1 -4.96545e+00 -2.91054e+01 1.56600e+01 + 1516 1516 1 6.77000e+00 4.10000e-01 -4.15545e+00 + 1517 1517 1 4.76000e+00 2.04000e+00 1.24200e+01 + 1518 1518 1 2.79800e+01 8.84000e+00 2.44000e+01 + 1519 1519 1 -1.38855e+01 2.35500e+01 -3.09554e+01 + 1520 1520 1 2.18300e+01 1.30700e+01 -3.72545e+00 + 1521 1521 1 -2.79555e+01 -1.13154e+01 -2.42154e+01 + 1522 1522 1 2.06000e+01 2.88200e+01 1.49900e+01 + 1523 1523 1 2.38100e+01 -1.20054e+01 -2.90545e+00 + 1524 1524 1 -1.47655e+01 2.92600e+01 2.69500e+01 + 1525 1525 1 1.49600e+01 1.57400e+01 -1.20954e+01 + 1526 1526 1 -1.12555e+01 -2.66054e+01 -1.04545e+00 + 1527 1527 1 7.90000e-01 4.46000e+00 1.45900e+01 + 1528 1528 1 1.45400e+01 -1.87154e+01 6.87000e+00 + 1529 1529 1 -3.04155e+01 -1.64854e+01 -1.95454e+01 + 1530 1530 1 8.22000e+00 7.55000e+00 -2.76754e+01 + 1531 1531 1 1.25200e+01 -8.13545e+00 -2.74154e+01 + 1532 1532 1 -7.49545e+00 -1.35054e+01 1.53200e+01 + 1533 1533 1 2.27200e+01 -9.25545e+00 -2.45754e+01 + 1534 1534 1 -4.53545e+00 2.77400e+01 1.33200e+01 + 1535 1535 1 -1.54655e+01 1.99700e+01 -2.09454e+01 + 1536 1536 1 2.48000e+01 3.04100e+01 -2.17154e+01 + 1537 1537 1 -2.87055e+01 -6.18545e+00 1.00500e+01 + 1538 1538 1 1.12900e+01 -1.90454e+01 1.90300e+01 + 1539 1539 1 -3.06455e+01 -2.83545e+00 -1.44545e+00 + 1540 1540 1 1.51500e+01 2.34800e+01 -2.37854e+01 + 1541 1541 1 -2.08545e+00 -8.29545e+00 -3.08545e+00 + 1542 1542 1 1.73900e+01 -1.90545e+00 -2.46154e+01 + 1543 1543 1 -2.77055e+01 9.11000e+00 -2.80854e+01 + 1544 1544 1 2.66600e+01 2.45543e-02 6.20000e-01 + 1545 1545 1 -2.72655e+01 -8.48545e+00 2.61300e+01 + 1546 1546 1 -1.34555e+01 -2.83554e+01 1.05900e+01 + 1547 1547 1 -2.00000e-01 -6.89545e+00 4.35000e+00 + 1548 1548 1 -9.25450e-01 -8.54457e-02 -4.14545e+00 + 1549 1549 1 1.75200e+01 2.65900e+01 1.41100e+01 + 1550 1550 1 3.03000e+01 1.00700e+01 2.05800e+01 + 1551 1551 1 -1.91655e+01 8.91000e+00 -2.45154e+01 + 1552 1552 1 -2.31255e+01 -9.17545e+00 2.97100e+01 + 1553 1553 1 1.08100e+01 1.95400e+01 3.43000e+00 + 1554 1554 1 2.20800e+01 -9.46545e+00 -6.60545e+00 + 1555 1555 1 2.31300e+01 4.44000e+00 -2.96554e+01 + 1556 1556 1 -1.89655e+01 -8.46545e+00 6.72000e+00 + 1557 1557 1 4.94000e+00 6.56000e+00 -1.76054e+01 + 1558 1558 1 1.71100e+01 7.20000e-01 -2.68054e+01 + 1559 1559 1 -2.74555e+01 -1.92854e+01 -2.24354e+01 + 1560 1560 1 -1.61855e+01 2.48900e+01 1.00400e+01 + 1561 1561 1 3.03700e+01 1.24100e+01 3.09600e+01 + 1562 1562 1 -4.92545e+00 3.08100e+01 2.62300e+01 + 1563 1563 1 -1.76455e+01 -6.90545e+00 -2.77554e+01 + 1564 1564 1 2.82600e+01 1.01100e+01 -8.34545e+00 + 1565 1565 1 1.62000e+01 1.23000e+00 2.99800e+01 + 1566 1566 1 6.69000e+00 2.24000e+01 -2.06454e+01 + 1567 1567 1 -1.78545e+00 1.05100e+01 -2.12754e+01 + 1568 1568 1 2.66100e+01 2.75000e+00 5.30000e+00 + 1569 1569 1 3.40000e-01 -1.28654e+01 2.56100e+01 + 1570 1570 1 -8.55545e+00 2.39400e+01 1.16800e+01 + 1571 1571 1 -2.62655e+01 -7.96545e+00 1.40600e+01 + 1572 1572 1 -2.60545e+00 -3.08754e+01 -8.15545e+00 + 1573 1573 1 1.22300e+01 -7.18545e+00 -2.58545e+00 + 1574 1574 1 1.84200e+01 2.43300e+01 2.76300e+01 + 1575 1575 1 -1.70255e+01 2.54000e+01 -9.83545e+00 + 1576 1576 1 5.24000e+00 -1.26154e+01 4.71000e+00 + 1577 1577 1 -2.03955e+01 -2.28354e+01 2.39000e+01 + 1578 1578 1 7.95000e+00 1.88000e+00 -2.23554e+01 + 1579 1579 1 1.20300e+01 1.16500e+01 1.64200e+01 + 1580 1580 1 3.77000e+00 1.29500e+01 -1.02054e+01 + 1581 1581 1 -1.52855e+01 5.40000e+00 1.59200e+01 + 1582 1582 1 -3.74545e+00 -1.10454e+01 -1.17354e+01 + 1583 1583 1 1.98300e+01 6.12000e+00 1.98200e+01 + 1584 1584 1 2.34800e+01 -9.65446e-01 -3.02254e+01 + 1585 1585 1 -2.81555e+01 -3.09954e+01 -1.11154e+01 + 1586 1586 1 -1.21755e+01 8.48000e+00 -1.63254e+01 + 1587 1587 1 5.45000e+00 -2.57454e+01 -2.84354e+01 + 1588 1588 1 -8.35450e-01 2.95700e+01 2.00800e+01 + 1589 1589 1 -1.70155e+01 3.07400e+01 1.48900e+01 + 1590 1590 1 2.66700e+01 6.20000e+00 2.85600e+01 + 1591 1591 1 -2.57545e+00 -7.61545e+00 -1.02954e+01 + 1592 1592 1 -5.99545e+00 -1.89454e+01 -1.93254e+01 + 1593 1593 1 -2.85655e+01 1.30300e+01 -2.47754e+01 + 1594 1594 1 -1.45155e+01 1.99300e+01 1.53800e+01 + 1595 1595 1 -2.46855e+01 7.21000e+00 3.50000e-01 + 1596 1596 1 8.31000e+00 -2.67854e+01 2.38700e+01 + 1597 1597 1 9.66000e+00 -2.59454e+01 -1.82454e+01 + 1598 1598 1 2.92700e+01 -2.84954e+01 1.51600e+01 + 1599 1599 1 -3.80000e-01 -1.51154e+01 -3.11054e+01 + 1600 1600 1 1.98200e+01 4.89000e+00 1.49500e+01 + 1601 1601 1 -2.04155e+01 -1.71545e+00 3.06700e+01 + 1602 1602 1 -3.07655e+01 2.68300e+01 2.67200e+01 + 1603 1603 1 2.74300e+01 -2.62454e+01 -2.88254e+01 + 1604 1604 1 -2.24055e+01 1.53300e+01 6.27000e+00 + 1605 1605 1 2.97300e+01 -4.96545e+00 -1.12354e+01 + 1606 1606 1 1.42600e+01 2.47900e+01 -8.94545e+00 + 1607 1607 1 2.24900e+01 2.34200e+01 -2.09654e+01 + 1608 1608 1 1.46500e+01 1.71400e+01 -2.68454e+01 + 1609 1609 1 -2.03955e+01 1.82400e+01 3.87000e+00 + 1610 1610 1 1.19800e+01 -3.02554e+01 1.25800e+01 + 1611 1611 1 1.19800e+01 1.11700e+01 2.91900e+01 + 1612 1612 1 7.75000e+00 -1.56654e+01 -9.53545e+00 + 1613 1613 1 -2.52455e+01 2.43000e+01 -8.13545e+00 + 1614 1614 1 -1.71155e+01 1.35600e+01 3.84000e+00 + 1615 1615 1 2.86600e+01 2.86800e+01 8.92000e+00 + 1616 1616 1 2.67800e+01 -5.75545e+00 -2.23854e+01 + 1617 1617 1 4.38000e+00 -1.76154e+01 3.09500e+01 + 1618 1618 1 -7.82545e+00 -2.04954e+01 2.01500e+01 + 1619 1619 1 8.66000e+00 -1.79454e+01 -2.93754e+01 + 1620 1620 1 -2.34755e+01 -2.72545e+00 1.80000e+00 + 1621 1621 1 -2.70155e+01 -8.46545e+00 1.86000e+00 + 1622 1622 1 4.81000e+00 -1.63454e+01 2.79400e+01 + 1623 1623 1 4.81000e+00 -1.03754e+01 1.32800e+01 + 1624 1624 1 -2.32655e+01 -1.20854e+01 1.74200e+01 + 1625 1625 1 -6.55545e+00 -8.16545e+00 -2.37154e+01 + 1626 1626 1 8.79000e+00 9.42000e+00 8.93000e+00 + 1627 1627 1 2.23600e+01 -2.22054e+01 -1.53454e+01 + 1628 1628 1 -1.11555e+01 -1.12854e+01 -7.46545e+00 + 1629 1629 1 2.50000e+00 2.64800e+01 -3.91545e+00 + 1630 1630 1 -4.41545e+00 -2.98545e+00 -2.97554e+01 + 1631 1631 1 3.05200e+01 -2.45554e+01 -1.20054e+01 + 1632 1632 1 -1.66355e+01 -2.21054e+01 -1.94554e+01 + 1633 1633 1 -2.36355e+01 1.41500e+01 1.81700e+01 + 1634 1634 1 -2.45155e+01 -1.69754e+01 1.71600e+01 + 1635 1635 1 -2.95755e+01 1.17400e+01 3.97000e+00 + 1636 1636 1 2.13000e+00 -3.82545e+00 -1.17454e+01 + 1637 1637 1 2.86900e+01 8.00000e+00 -4.36545e+00 + 1638 1638 1 -1.06355e+01 8.99000e+00 2.63700e+01 + 1639 1639 1 1.57400e+01 2.78900e+01 1.69200e+01 + 1640 1640 1 3.36000e+00 1.19500e+01 2.95000e+00 + 1641 1641 1 -2.88855e+01 -2.07454e+01 -2.66654e+01 + 1642 1642 1 3.06300e+01 1.91900e+01 2.86800e+01 + 1643 1643 1 1.14200e+01 1.02000e+01 2.56500e+01 + 1644 1644 1 2.19800e+01 -1.06354e+01 2.36100e+01 + 1645 1645 1 -2.14755e+01 -2.36354e+01 -1.65354e+01 + 1646 1646 1 -2.27055e+01 1.97900e+01 1.76000e+01 + 1647 1647 1 1.57200e+01 1.69700e+01 4.48000e+00 + 1648 1648 1 -1.17055e+01 -3.03154e+01 -1.11454e+01 + 1649 1649 1 -1.62155e+01 -2.05454e+01 5.13000e+00 + 1650 1650 1 2.87600e+01 2.79000e+00 -1.25354e+01 + 1651 1651 1 -2.29455e+01 2.12500e+01 -2.54545e+00 + 1652 1652 1 -6.25545e+00 -4.54457e-02 2.57700e+01 + 1653 1653 1 1.64400e+01 7.53000e+00 1.30800e+01 + 1654 1654 1 -3.08755e+01 3.10800e+01 1.62800e+01 + 1655 1655 1 -2.93055e+01 1.99700e+01 -1.01545e+00 + 1656 1656 1 2.69000e+01 -4.22545e+00 1.00900e+01 + 1657 1657 1 6.80000e-01 1.83100e+01 -1.45254e+01 + 1658 1658 1 2.47600e+01 2.00300e+01 7.76000e+00 + 1659 1659 1 -1.32755e+01 -1.23154e+01 1.95500e+01 + 1660 1660 1 -1.66755e+01 -2.67545e+00 -1.92454e+01 + 1661 1661 1 2.83400e+01 2.42300e+01 2.28400e+01 + 1662 1662 1 -1.34545e+00 -8.85446e-01 5.79000e+00 + 1663 1663 1 3.12000e+00 -2.94254e+01 1.60000e+00 + 1664 1664 1 -1.74555e+01 1.34554e-01 -1.27554e+01 + 1665 1665 1 -1.48055e+01 8.94000e+00 2.93200e+01 + 1666 1666 1 -2.17255e+01 -6.96545e+00 1.42200e+01 + 1667 1667 1 1.14000e+00 1.01200e+01 -1.96554e+01 + 1668 1668 1 -2.87055e+01 2.00900e+01 5.09000e+00 + 1669 1669 1 -9.08545e+00 -1.79154e+01 -2.66554e+01 + 1670 1670 1 2.02900e+01 -1.20454e+01 2.05500e+01 + 1671 1671 1 2.18000e+00 -2.89954e+01 5.86000e+00 + 1672 1672 1 -8.70545e+00 -3.00254e+01 1.39900e+01 + 1673 1673 1 2.22500e+01 1.91000e+01 2.63800e+01 + 1674 1674 1 1.01500e+01 -3.94545e+00 -3.21545e+00 + 1675 1675 1 -4.59545e+00 1.41000e+01 -1.34154e+01 + 1676 1676 1 2.31400e+01 -2.66754e+01 -2.36054e+01 + 1677 1677 1 1.40600e+01 3.06300e+01 -1.40354e+01 + 1678 1678 1 -1.36355e+01 2.42000e+00 1.24400e+01 + 1679 1679 1 -6.27545e+00 1.02000e+00 -2.53054e+01 + 1680 1680 1 -1.05255e+01 -2.85254e+01 3.09000e+00 + 1681 1681 1 -2.36155e+01 -2.09154e+01 1.90000e+00 + 1682 1682 1 2.96000e+00 -2.36654e+01 1.21100e+01 + 1683 1683 1 -3.84545e+00 2.00500e+01 2.03700e+01 + 1684 1684 1 1.79000e+01 -1.94054e+01 2.24555e-01 + 1685 1685 1 2.68400e+01 -1.18554e+01 2.33000e+01 + 1686 1686 1 -2.32255e+01 -2.49354e+01 2.06000e+01 + 1687 1687 1 -1.65755e+01 -1.20554e+01 -8.62545e+00 + 1688 1688 1 -1.45255e+01 2.88600e+01 -2.33154e+01 + 1689 1689 1 -3.11155e+01 -2.48545e+00 9.69000e+00 + 1690 1690 1 -2.71655e+01 -6.05446e-01 2.37300e+01 + 1691 1691 1 1.52300e+01 1.15900e+01 3.03100e+01 + 1692 1692 1 2.18100e+01 1.28700e+01 2.53400e+01 + 1693 1693 1 -3.04655e+01 -1.09554e+01 1.56200e+01 + 1694 1694 1 2.21700e+01 -2.25754e+01 2.19100e+01 + 1695 1695 1 -9.03545e+00 -1.94754e+01 -1.95445e-01 + 1696 1696 1 1.14000e+00 2.77000e+00 2.48000e+01 + 1697 1697 1 -2.68455e+01 9.32000e+00 8.59000e+00 + 1698 1698 1 -1.69545e+00 -2.40000e-01 -2.68254e+01 + 1699 1699 1 -2.77755e+01 -1.15254e+01 -1.01654e+01 + 1700 1700 1 1.38700e+01 1.28300e+01 -2.89545e+00 + 1701 1701 1 -7.25545e+00 1.20800e+01 -1.57545e+00 + 1702 1702 1 -7.68545e+00 5.20000e+00 -1.40545e+00 + 1703 1703 1 -9.31545e+00 3.06100e+01 -1.94754e+01 + 1704 1704 1 1.32000e+01 1.46900e+01 2.29600e+01 + 1705 1705 1 -1.37955e+01 1.86200e+01 -7.62545e+00 + 1706 1706 1 -1.41855e+01 1.32700e+01 -1.64754e+01 + 1707 1707 1 -1.27555e+01 2.60900e+01 9.00000e-02 + 1708 1708 1 -1.30545e+00 -2.62854e+01 3.06000e+00 + 1709 1709 1 -2.20155e+01 -1.63054e+01 -2.18254e+01 + 1710 1710 1 4.50000e-01 1.39800e+01 2.90000e-01 + 1711 1711 1 2.34300e+01 1.29200e+01 4.60000e+00 + 1712 1712 1 -3.67545e+00 -2.49654e+01 2.83700e+01 + 1713 1713 1 -2.96255e+01 2.45000e+00 1.82900e+01 + 1714 1714 1 1.85400e+01 4.56000e+00 -1.70754e+01 + 1715 1715 1 -3.35545e+00 -1.08254e+01 2.93000e+00 + 1716 1716 1 -2.48855e+01 2.05500e+01 -9.42545e+00 + 1717 1717 1 3.85000e+00 9.60000e+00 -1.61545e+00 + 1718 1718 1 2.91200e+01 1.33000e+00 1.88600e+01 + 1719 1719 1 9.92000e+00 2.34800e+01 -1.54554e+01 + 1720 1720 1 -7.38545e+00 -2.75554e+01 -4.71545e+00 + 1721 1721 1 -2.39355e+01 5.92000e+00 2.89000e+01 + 1722 1722 1 1.89900e+01 2.93600e+01 2.80000e-01 + 1723 1723 1 6.93000e+00 -2.36354e+01 -1.43054e+01 + 1724 1724 1 -1.52055e+01 -1.33254e+01 3.00400e+01 + 1725 1725 1 5.12000e+00 -3.20000e-01 9.10000e+00 + 1726 1726 1 -3.42545e+00 2.61500e+01 -8.03545e+00 + 1727 1727 1 1.98900e+01 2.10000e-01 1.46300e+01 + 1728 1728 1 -1.99955e+01 7.15000e+00 -2.25545e+00 + 1729 1729 1 -2.91155e+01 -2.40154e+01 -2.44154e+01 + 1730 1730 1 9.70000e+00 3.50000e+00 5.96000e+00 + 1731 1731 1 -2.07955e+01 2.33200e+01 1.66300e+01 + 1732 1732 1 -4.36545e+00 -2.73545e+00 1.53300e+01 + 1733 1733 1 1.41200e+01 -2.18954e+01 -1.66254e+01 + 1734 1734 1 1.62700e+01 2.50000e+00 1.92000e+01 + 1735 1735 1 1.51600e+01 5.36000e+00 -1.06254e+01 + 1736 1736 1 -2.73555e+01 -3.05354e+01 4.44000e+00 + 1737 1737 1 -1.79955e+01 -6.05545e+00 2.48400e+01 + 1738 1738 1 -1.02855e+01 1.24600e+01 -2.74054e+01 + 1739 1739 1 -1.38255e+01 2.27800e+01 2.15900e+01 + 1740 1740 1 9.18000e+00 7.36000e+00 2.98400e+01 + 1741 1741 1 -1.91955e+01 2.61800e+01 1.23900e+01 + 1742 1742 1 -6.84545e+00 1.89700e+01 3.08600e+01 + 1743 1743 1 -2.95355e+01 1.44300e+01 -6.99545e+00 + 1744 1744 1 -1.59855e+01 -1.29954e+01 2.50400e+01 + 1745 1745 1 -2.82455e+01 5.59000e+00 1.66100e+01 + 1746 1746 1 4.36000e+00 -2.61354e+01 -1.73254e+01 + 1747 1747 1 -2.25955e+01 1.88600e+01 -6.65545e+00 + 1748 1748 1 -4.39545e+00 -1.98854e+01 1.16500e+01 + 1749 1749 1 1.05000e+00 -2.95754e+01 -1.94554e+01 + 1750 1750 1 -3.02545e+00 2.13900e+01 -6.92545e+00 + 1751 1751 1 -6.22545e+00 -1.83554e+01 1.71600e+01 + 1752 1752 1 9.04000e+00 -2.38954e+01 3.16000e+00 + 1753 1753 1 -8.15450e-01 -1.62554e+01 -1.29454e+01 + 1754 1754 1 -2.88545e+00 4.42000e+00 1.03700e+01 + 1755 1755 1 3.06800e+01 9.07000e+00 7.36000e+00 + 1756 1756 1 1.63700e+01 -5.24545e+00 2.57500e+01 + 1757 1757 1 -1.07355e+01 1.26800e+01 1.24000e+00 + 1758 1758 1 -8.50545e+00 7.03000e+00 -1.50954e+01 + 1759 1759 1 -2.33555e+01 1.59000e+01 1.11000e+00 + 1760 1760 1 4.19000e+00 2.44300e+01 -2.80554e+01 + 1761 1761 1 -3.34545e+00 2.25500e+01 2.98000e+00 + 1762 1762 1 1.35700e+01 2.91000e+01 -1.98454e+01 + 1763 1763 1 1.53300e+01 -7.55545e+00 -1.02954e+01 + 1764 1764 1 2.85800e+01 5.54000e+00 -2.70854e+01 + 1765 1765 1 -9.74545e+00 -2.82654e+01 2.81400e+01 + 1766 1766 1 -3.81545e+00 -1.32554e+01 -1.43654e+01 + 1767 1767 1 3.30000e+00 2.41900e+01 9.53000e+00 + 1768 1768 1 -1.14255e+01 -9.70545e+00 2.23000e+00 + 1769 1769 1 -2.86355e+01 -1.84545e+00 -2.06554e+01 + 1770 1770 1 -2.18855e+01 -2.86054e+01 -2.02154e+01 + 1771 1771 1 8.26000e+00 -3.07954e+01 1.06000e+01 + 1772 1772 1 7.53000e+00 -9.08545e+00 -1.98354e+01 + 1773 1773 1 -1.70755e+01 -4.99545e+00 3.01500e+01 + 1774 1774 1 -2.21355e+01 2.24000e+01 1.30400e+01 + 1775 1775 1 -2.49255e+01 -1.88254e+01 -3.08554e+01 + 1776 1776 1 -6.45545e+00 -1.08954e+01 2.41300e+01 + 1777 1777 1 1.57400e+01 -1.70954e+01 2.07200e+01 + 1778 1778 1 1.69000e+00 2.24900e+01 -2.66254e+01 + 1779 1779 1 3.02000e+01 -1.99254e+01 6.06000e+00 + 1780 1780 1 5.23000e+00 1.18600e+01 1.38700e+01 + 1781 1781 1 -5.57545e+00 1.03600e+01 -3.04054e+01 + 1782 1782 1 9.38000e+00 -2.27054e+01 1.98600e+01 + 1783 1783 1 2.24600e+01 -9.80545e+00 -1.87354e+01 + 1784 1784 1 1.33000e+00 2.51700e+01 1.48000e+01 + 1785 1785 1 -2.19545e+00 1.76300e+01 1.03000e+00 + 1786 1786 1 4.41000e+00 -1.57554e+01 8.60000e+00 + 1787 1787 1 -3.65545e+00 -1.65254e+01 -1.05954e+01 + 1788 1788 1 2.06400e+01 -2.08454e+01 -1.50545e+00 + 1789 1789 1 -1.91655e+01 -7.55446e-01 1.34000e+00 + 1790 1790 1 7.03000e+00 4.34000e+00 2.31400e+01 + 1791 1791 1 -8.03545e+00 1.66900e+01 2.56700e+01 + 1792 1792 1 1.31000e+00 2.58300e+01 -1.16454e+01 + 1793 1793 1 2.75100e+01 1.70600e+01 -1.94054e+01 + 1794 1794 1 6.36000e+00 -2.27454e+01 2.77300e+01 + 1795 1795 1 -2.83955e+01 -1.29545e+00 2.78000e+00 + 1796 1796 1 -2.81055e+01 -2.63054e+01 2.82500e+01 + 1797 1797 1 2.63400e+01 2.95800e+01 -2.66254e+01 + 1798 1798 1 1.85800e+01 -1.47554e+01 -1.18054e+01 + 1799 1799 1 8.02000e+00 -1.05354e+01 2.18500e+01 + 1800 1800 1 -2.45545e+00 -2.12254e+01 8.88000e+00 + 1801 1801 1 -3.10155e+01 5.32000e+00 1.99100e+01 + 1802 1802 1 -7.67545e+00 1.10900e+01 -1.26654e+01 + 1803 1803 1 -2.46755e+01 -2.32654e+01 -1.22754e+01 + 1804 1804 1 3.08600e+01 1.10700e+01 -1.43554e+01 + 1805 1805 1 1.30700e+01 2.13600e+01 -2.70554e+01 + 1806 1806 1 9.51000e+00 1.08100e+01 -2.53354e+01 + 1807 1807 1 -2.38555e+01 -2.18854e+01 -2.18545e+00 + 1808 1808 1 2.57300e+01 -1.44954e+01 1.93400e+01 + 1809 1809 1 1.43400e+01 -2.36854e+01 1.12000e+00 + 1810 1810 1 1.81000e+00 3.04900e+01 -5.95545e+00 + 1811 1811 1 -1.11355e+01 3.05200e+01 -9.25445e-01 + 1812 1812 1 3.05600e+01 -3.06354e+01 -2.11654e+01 + 1813 1813 1 -2.48055e+01 2.22000e+00 -1.32554e+01 + 1814 1814 1 -3.04255e+01 -1.96545e+00 -1.23054e+01 + 1815 1815 1 4.77000e+00 -2.84554e+01 2.78800e+01 + 1816 1816 1 8.55000e+00 8.48000e+00 -2.27254e+01 + 1817 1817 1 1.22000e+00 4.09000e+00 -2.91754e+01 + 1818 1818 1 1.60900e+01 -2.36754e+01 -2.17954e+01 + 1819 1819 1 1.25600e+01 -2.36554e+01 3.11200e+01 + 1820 1820 1 2.43200e+01 -5.06545e+00 1.65600e+01 + 1821 1821 1 -2.29555e+01 -1.51354e+01 -2.87054e+01 + 1822 1822 1 1.31900e+01 1.56500e+01 1.35300e+01 + 1823 1823 1 -2.48255e+01 -1.26254e+01 -2.00354e+01 + 1824 1824 1 2.04100e+01 1.19000e+01 1.38400e+01 + 1825 1825 1 -1.45855e+01 -2.58954e+01 2.38500e+01 + 1826 1826 1 1.96400e+01 -2.16354e+01 -7.91545e+00 + 1827 1827 1 2.93500e+01 3.09100e+01 2.08000e+00 + 1828 1828 1 2.19800e+01 -1.88854e+01 2.93400e+01 + 1829 1829 1 3.00600e+01 -2.33354e+01 -7.52545e+00 + 1830 1830 1 1.15000e+00 2.05800e+01 -1.81354e+01 + 1831 1831 1 -3.07155e+01 2.68900e+01 1.89300e+01 + 1832 1832 1 -6.05545e+00 -2.78354e+01 -1.58854e+01 + 1833 1833 1 -8.00545e+00 2.74700e+01 -3.01054e+01 + 1834 1834 1 7.56000e+00 -1.52054e+01 1.76200e+01 + 1835 1835 1 -3.26545e+00 2.01500e+01 -2.85654e+01 + 1836 1836 1 -2.33955e+01 1.04900e+01 7.06000e+00 + 1837 1837 1 -1.82055e+01 -1.22554e+01 -4.73545e+00 + 1838 1838 1 -1.06855e+01 -2.07354e+01 -4.46545e+00 + 1839 1839 1 2.55300e+01 1.32900e+01 1.11100e+01 + 1840 1840 1 1.99000e+00 7.20000e+00 3.03900e+01 + 1841 1841 1 2.26000e+01 1.91900e+01 -1.98554e+01 + 1842 1842 1 1.48400e+01 4.81000e+00 -2.91054e+01 + 1843 1843 1 -2.27355e+01 -3.97545e+00 -1.79154e+01 + 1844 1844 1 -6.75545e+00 -2.63254e+01 1.22500e+01 + 1845 1845 1 -2.25545e+00 7.32000e+00 -5.79545e+00 + 1846 1846 1 6.93000e+00 -1.14954e+01 -4.44545e+00 + 1847 1847 1 -2.13355e+01 -1.31954e+01 1.00500e+01 + 1848 1848 1 2.36000e+00 4.67000e+00 -2.53354e+01 + 1849 1849 1 -1.24255e+01 2.50000e+01 8.10000e+00 + 1850 1850 1 2.95900e+01 -3.98545e+00 1.92900e+01 + 1851 1851 1 1.98700e+01 -1.35454e+01 -3.01054e+01 + 1852 1852 1 7.64000e+00 9.90000e-01 -1.00754e+01 + 1853 1853 1 1.67400e+01 -1.20054e+01 2.89200e+01 + 1854 1854 1 2.92900e+01 2.52100e+01 -1.95545e+00 + 1855 1855 1 4.12000e+00 2.91900e+01 -1.05854e+01 + 1856 1856 1 3.06400e+01 -7.13545e+00 2.72300e+01 + 1857 1857 1 1.52000e+00 2.06400e+01 2.87000e+01 + 1858 1858 1 -1.88155e+01 2.93000e+01 -2.53054e+01 + 1859 1859 1 6.03000e+00 -7.67545e+00 1.95300e+01 + 1860 1860 1 -7.43545e+00 -1.26754e+01 -2.09854e+01 + 1861 1861 1 2.34000e+01 3.45543e-02 -6.77545e+00 + 1862 1862 1 2.49000e+01 6.30000e-01 -2.50854e+01 + 1863 1863 1 -8.19545e+00 -2.41254e+01 2.86400e+01 + 1864 1864 1 -3.17545e+00 -1.48454e+01 -5.54454e-02 + 1865 1865 1 1.80000e+00 -1.53654e+01 -2.06554e+01 + 1866 1866 1 -2.71055e+01 -1.58254e+01 -1.68554e+01 + 1867 1867 1 -1.73255e+01 2.01900e+01 -3.01854e+01 + 1868 1868 1 2.31000e+00 1.48900e+01 1.55000e+01 + 1869 1869 1 -2.63155e+01 -1.84054e+01 -2.65054e+01 + 1870 1870 1 1.16500e+01 -1.27254e+01 -1.52554e+01 + 1871 1871 1 1.99000e+01 -2.55854e+01 -1.05954e+01 + 1872 1872 1 2.02600e+01 -1.19054e+01 -4.04545e+00 + 1873 1873 1 1.49800e+01 -2.81454e+01 2.97800e+01 + 1874 1874 1 1.21400e+01 2.44200e+01 3.65000e+00 + 1875 1875 1 -2.07455e+01 -1.38154e+01 2.71100e+01 + 1876 1876 1 3.37000e+00 -1.81754e+01 4.71000e+00 + 1877 1877 1 8.08000e+00 1.78600e+01 -2.91354e+01 + 1878 1878 1 2.11900e+01 -2.18545e+00 -5.54454e-02 + 1879 1879 1 1.13000e+01 -1.82354e+01 2.53100e+01 + 1880 1880 1 -2.82355e+01 -8.15545e+00 -2.25154e+01 + 1881 1881 1 3.62000e+00 -5.63545e+00 9.16000e+00 + 1882 1882 1 2.37200e+01 1.51100e+01 2.88000e+01 + 1883 1883 1 -3.09255e+01 3.44554e-01 1.57700e+01 + 1884 1884 1 -3.62545e+00 -2.58054e+01 -2.72354e+01 + 1885 1885 1 -2.44355e+01 -2.76054e+01 1.30300e+01 + 1886 1886 1 2.56000e+00 2.93100e+01 -3.03954e+01 + 1887 1887 1 -1.86955e+01 2.21000e+00 -2.85854e+01 + 1888 1888 1 -3.07155e+01 -8.16545e+00 -8.80545e+00 + 1889 1889 1 -4.60545e+00 -2.91154e+01 -2.13354e+01 + 1890 1890 1 -2.35545e+00 2.54000e+00 -3.10154e+01 + 1891 1891 1 2.05900e+01 -3.65545e+00 1.89700e+01 + 1892 1892 1 8.71000e+00 -2.86354e+01 -2.54154e+01 + 1893 1893 1 1.60800e+01 7.41000e+00 3.89000e+00 + 1894 1894 1 1.96000e+01 1.34800e+01 -1.69854e+01 + 1895 1895 1 -1.29955e+01 2.16500e+01 -3.25445e-01 + 1896 1896 1 -3.13545e+00 -7.74545e+00 1.12000e+00 + 1897 1897 1 9.01000e+00 1.55900e+01 -1.81954e+01 + 1898 1898 1 4.96000e+00 -2.77654e+01 -2.57254e+01 + 1899 1899 1 -9.26545e+00 1.02500e+01 9.56000e+00 + 1900 1900 1 -7.26545e+00 -6.39545e+00 -5.34545e+00 + 1901 1901 1 -8.15450e-01 -1.13954e+01 -3.65545e+00 + 1902 1902 1 -1.22255e+01 -6.31545e+00 -7.46545e+00 + 1903 1903 1 -8.90545e+00 8.60000e-01 -2.73545e+00 + 1904 1904 1 1.80900e+01 -1.51754e+01 2.36300e+01 + 1905 1905 1 -2.37455e+01 2.67400e+01 -3.03545e+00 + 1906 1906 1 4.96000e+00 2.27700e+01 1.90600e+01 + 1907 1907 1 -4.51545e+00 7.45000e+00 1.57200e+01 + 1908 1908 1 2.18300e+01 4.21000e+00 -1.95254e+01 + 1909 1909 1 1.48700e+01 2.49500e+01 3.10600e+01 + 1910 1910 1 -1.76955e+01 1.99900e+01 1.83000e+01 + 1911 1911 1 3.28000e+00 6.04000e+00 -1.39854e+01 + 1912 1912 1 2.54500e+01 1.38100e+01 1.50700e+01 + 1913 1913 1 -1.14955e+01 9.34000e+00 -2.00054e+01 + 1914 1914 1 1.09200e+01 -9.79545e+00 2.17000e+00 + 1915 1915 1 -3.86545e+00 -6.40000e-01 -1.37545e+00 + 1916 1916 1 2.03300e+01 1.21600e+01 -2.04954e+01 + 1917 1917 1 -2.61555e+01 1.71900e+01 2.44600e+01 + 1918 1918 1 2.29600e+01 2.06100e+01 -1.39354e+01 + 1919 1919 1 1.48300e+01 1.49100e+01 1.75400e+01 + 1920 1920 1 -1.94255e+01 2.50500e+01 -4.63545e+00 + 1921 1921 1 3.03200e+01 -1.15454e+01 2.81700e+01 + 1922 1922 1 1.70400e+01 1.24200e+01 1.15200e+01 + 1923 1923 1 3.02500e+01 -2.19254e+01 2.39000e+01 + 1924 1924 1 3.02400e+01 -1.73154e+01 1.37000e+00 + 1925 1925 1 1.00100e+01 1.27400e+01 -2.20154e+01 + 1926 1926 1 -1.79655e+01 -2.97354e+01 2.93100e+01 + 1927 1927 1 1.01300e+01 -1.85754e+01 -1.69154e+01 + 1928 1928 1 8.40000e+00 -1.65154e+01 5.28000e+00 + 1929 1929 1 -2.71155e+01 -8.74545e+00 -1.22754e+01 + 1930 1930 1 1.58400e+01 -8.65545e+00 1.64700e+01 + 1931 1931 1 7.56000e+00 -8.85446e-01 6.43000e+00 + 1932 1932 1 -2.41655e+01 -5.34545e+00 7.88000e+00 + 1933 1933 1 1.39300e+01 -2.99754e+01 2.44000e+00 + 1934 1934 1 1.13200e+01 1.60500e+01 2.57000e+00 + 1935 1935 1 2.03000e+00 -2.57545e+00 -1.56654e+01 + 1936 1936 1 -2.04455e+01 2.36100e+01 7.76000e+00 + 1937 1937 1 2.95500e+01 -1.37154e+01 1.50400e+01 + 1938 1938 1 -2.16055e+01 2.99500e+01 4.46000e+00 + 1939 1939 1 -3.03955e+01 -4.15446e-01 2.61400e+01 + 1940 1940 1 -2.34355e+01 -2.28754e+01 -3.09354e+01 + 1941 1941 1 1.64200e+01 1.99600e+01 -2.62554e+01 + 1942 1942 1 -1.17655e+01 -9.23545e+00 7.75000e+00 + 1943 1943 1 -1.71555e+01 1.70100e+01 2.54900e+01 + 1944 1944 1 8.81000e+00 -5.64545e+00 1.35000e+01 + 1945 1945 1 -2.47555e+01 1.61700e+01 -1.36554e+01 + 1946 1946 1 -1.51955e+01 1.95300e+01 9.64000e+00 + 1947 1947 1 1.59800e+01 -2.79154e+01 -1.48954e+01 + 1948 1948 1 -8.41545e+00 -9.28545e+00 4.69000e+00 + 1949 1949 1 -2.63655e+01 -2.26554e+01 5.27000e+00 + 1950 1950 1 1.18700e+01 9.90000e+00 3.56000e+00 + 1951 1951 1 9.72000e+00 -1.33954e+01 -1.32545e+00 + 1952 1952 1 -3.27545e+00 2.30500e+01 -2.52554e+01 + 1953 1953 1 1.68000e+00 -9.73545e+00 2.54100e+01 + 1954 1954 1 1.22000e+01 -1.00854e+01 -8.43545e+00 + 1955 1955 1 -5.12545e+00 -2.15754e+01 -3.08454e+01 + 1956 1956 1 -1.16155e+01 4.18000e+00 3.05800e+01 + 1957 1957 1 -5.97545e+00 -3.65545e+00 1.95000e+00 + 1958 1958 1 -1.16555e+01 -2.84354e+01 1.98200e+01 + 1959 1959 1 -1.25450e-01 -1.62554e+01 -1.67954e+01 + 1960 1960 1 5.17000e+00 2.73700e+01 1.76000e+01 + 1961 1961 1 1.93400e+01 -7.74545e+00 -2.24654e+01 + 1962 1962 1 -2.76255e+01 1.03200e+01 1.40700e+01 + 1963 1963 1 9.31000e+00 2.93300e+01 -2.68554e+01 + 1964 1964 1 6.33000e+00 2.38000e+00 -1.32554e+01 + 1965 1965 1 -3.95450e-01 -1.06454e+01 -1.53554e+01 + 1966 1966 1 -7.78545e+00 2.65900e+01 -1.11954e+01 + 1967 1967 1 -2.74855e+01 -4.14545e+00 -2.66454e+01 + 1968 1968 1 -2.07545e+00 2.96000e+01 -1.99654e+01 + 1969 1969 1 2.73200e+01 -1.79545e+00 1.72800e+01 + 1970 1970 1 -7.36545e+00 -2.59054e+01 2.56700e+01 + 1971 1971 1 1.44100e+01 -8.40545e+00 5.22000e+00 + 1972 1972 1 1.74300e+01 -6.83545e+00 1.36100e+01 + 1973 1973 1 1.25700e+01 3.01100e+01 -5.02545e+00 + 1974 1974 1 1.20800e+01 1.93600e+01 -2.96854e+01 + 1975 1975 1 1.43400e+01 -1.70754e+01 -1.51654e+01 + 1976 1976 1 9.77000e+00 -1.04154e+01 1.18100e+01 + 1977 1977 1 2.09600e+01 2.26000e+01 6.16000e+00 + 1978 1978 1 -4.53545e+00 -1.37154e+01 1.93300e+01 + 1979 1979 1 -2.56955e+01 -1.49754e+01 -7.24545e+00 + 1980 1980 1 6.91000e+00 -2.01054e+01 8.62000e+00 + 1981 1981 1 6.60000e-01 -2.69654e+01 2.73000e+01 + 1982 1982 1 7.24000e+00 -1.74354e+01 2.61700e+01 + 1983 1983 1 -6.18545e+00 -6.34545e+00 1.40100e+01 + 1984 1984 1 1.84200e+01 -2.35154e+01 1.08500e+01 + 1985 1985 1 -4.68545e+00 5.50000e+00 1.90200e+01 + 1986 1986 1 2.73900e+01 -1.26154e+01 4.85000e+00 + 1987 1987 1 1.76600e+01 2.40400e+01 2.99000e+00 + 1988 1988 1 3.10300e+01 2.32500e+01 -2.21454e+01 + 1989 1989 1 2.64800e+01 2.22900e+01 -2.23054e+01 + 1990 1990 1 -2.34555e+01 -2.90854e+01 -3.45545e+00 + 1991 1991 1 -3.25450e-01 2.49600e+01 1.00600e+01 + 1992 1992 1 -1.48455e+01 1.64200e+01 1.79000e+00 + 1993 1993 1 -1.97555e+01 -1.69154e+01 -1.58254e+01 + 1994 1994 1 2.25800e+01 2.01900e+01 -1.00354e+01 + 1995 1995 1 7.03000e+00 -7.93545e+00 2.75800e+01 + 1996 1996 1 2.61700e+01 1.89500e+01 -2.62254e+01 + 1997 1997 1 2.57600e+01 -2.80054e+01 -1.73254e+01 + 1998 1998 1 2.38600e+01 -6.79545e+00 -9.84545e+00 + 1999 1999 1 -2.02855e+01 -7.06545e+00 -2.49054e+01 + 2000 2000 1 1.55000e+01 2.52700e+01 -5.18545e+00 + 2001 2001 1 9.38000e+00 -3.01454e+01 -1.22754e+01 + 2002 2002 1 1.67300e+01 -1.63545e+00 1.77300e+01 + 2003 2003 1 1.42900e+01 1.59000e+00 8.88000e+00 + 2004 2004 1 7.16000e+00 2.06500e+01 -7.35545e+00 + 2005 2005 1 -2.31355e+01 1.57000e+01 2.97700e+01 + 2006 2006 1 9.60000e-01 0.00000e+00 2.84200e+01 + 2007 2007 1 -1.25355e+01 2.19200e+01 1.05700e+01 + 2008 2008 1 -2.66855e+01 1.78300e+01 -2.22545e+00 + 2009 2009 1 -1.85955e+01 3.22000e+00 3.37000e+00 + 2010 2010 1 -1.24955e+01 -1.88054e+01 -1.19054e+01 + 2011 2011 1 -1.47955e+01 -2.00545e+00 2.37800e+01 + 2012 2012 1 2.50500e+01 4.61000e+00 -2.53454e+01 + 2013 2013 1 -1.83555e+01 2.35600e+01 -3.04354e+01 + 2014 2014 1 2.85400e+01 1.81300e+01 1.61500e+01 + 2015 2015 1 2.32900e+01 -5.97545e+00 -2.15854e+01 + 2016 2016 1 -1.87655e+01 3.02800e+01 -2.00054e+01 + 2017 2017 1 1.10000e+00 -3.08154e+01 -1.45654e+01 + 2018 2018 1 -1.78755e+01 -2.83854e+01 2.23400e+01 + 2019 2019 1 1.19100e+01 -2.59545e+00 7.91000e+00 + 2020 2020 1 -4.85545e+00 2.71800e+01 2.19100e+01 + 2021 2021 1 -6.45545e+00 2.12000e+01 3.40000e+00 + 2022 2022 1 -2.36545e+00 5.05000e+00 2.37000e+01 + 2023 2023 1 6.80000e-01 8.18000e+00 2.51600e+01 + 2024 2024 1 1.80500e+01 2.31300e+01 1.50600e+01 + 2025 2025 1 -7.94545e+00 1.49100e+01 -2.70954e+01 + 2026 2026 1 1.11700e+01 -1.87254e+01 -1.29954e+01 + 2027 2027 1 -8.25450e-01 2.56200e+01 2.79500e+01 + 2028 2028 1 3.59000e+00 -4.72545e+00 -7.09545e+00 + 2029 2029 1 2.32000e+01 2.44900e+01 -1.04354e+01 + 2030 2030 1 -5.54545e+00 1.77300e+01 -5.34545e+00 + 2031 2031 1 3.02200e+01 -5.01545e+00 -4.03545e+00 + 2032 2032 1 -1.78155e+01 1.89700e+01 -5.57545e+00 + 2033 2033 1 1.47700e+01 -2.67654e+01 1.15400e+01 + 2034 2034 1 -1.26755e+01 1.70800e+01 -1.56954e+01 + 2035 2035 1 8.63000e+00 -2.20454e+01 -1.19354e+01 + 2036 2036 1 -5.15545e+00 2.39700e+01 -2.24154e+01 + 2037 2037 1 1.43100e+01 -2.16954e+01 -1.14554e+01 + 2038 2038 1 6.99000e+00 2.69900e+01 -3.00154e+01 + 2039 2039 1 -1.13755e+01 -2.58545e+00 -2.58545e+00 + 2040 2040 1 1.22700e+01 2.54000e+00 2.67800e+01 + 2041 2041 1 -1.28255e+01 -2.78254e+01 -7.86545e+00 + 2042 2042 1 7.27000e+00 -2.33654e+01 -8.92545e+00 + 2043 2043 1 7.17000e+00 -1.83354e+01 -1.38454e+01 + 2044 2044 1 2.39100e+01 1.19000e+01 1.78300e+01 + 2045 2045 1 1.35900e+01 -1.81754e+01 -3.01954e+01 + 2046 2046 1 9.58000e+00 8.60000e-01 -1.77854e+01 + 2047 2047 1 9.52000e+00 1.84300e+01 -2.15454e+01 + 2048 2048 1 -1.43155e+01 -1.23154e+01 1.54300e+01 + 2049 2049 1 2.70700e+01 -1.22954e+01 -2.60154e+01 + 2050 2050 1 6.80000e-01 1.70600e+01 -3.29545e+00 + 2051 2051 1 -1.21355e+01 2.91200e+01 -9.16545e+00 + 2052 2052 1 -7.75450e-01 -2.64454e+01 -7.64545e+00 + 2053 2053 1 -9.75545e+00 -1.33545e+00 2.53700e+01 + 2054 2054 1 -2.86555e+01 2.32500e+01 1.70300e+01 + 2055 2055 1 2.19000e+00 2.17100e+01 -2.10154e+01 + 2056 2056 1 -1.20755e+01 -2.79554e+01 5.93000e+00 + 2057 2057 1 1.01900e+01 -2.79254e+01 -9.08545e+00 + 2058 2058 1 -3.11055e+01 -1.17754e+01 -1.14154e+01 + 2059 2059 1 1.69300e+01 2.03400e+01 1.88900e+01 + 2060 2060 1 -7.33545e+00 1.88000e+00 2.96000e+01 + 2061 2061 1 2.85300e+01 -6.66545e+00 -1.00545e+00 + 2062 2062 1 2.62200e+01 -2.34454e+01 -9.50545e+00 + 2063 2063 1 -3.05855e+01 -2.74654e+01 1.83700e+01 + 2064 2064 1 -2.94655e+01 -2.34154e+01 -5.62545e+00 + 2065 2065 1 1.90500e+01 -8.45446e-01 -8.28545e+00 + 2066 2066 1 2.85200e+01 -1.74554e+01 1.17500e+01 + 2067 2067 1 -2.64155e+01 2.37800e+01 -1.20954e+01 + 2068 2068 1 -2.37545e+00 8.58000e+00 -2.78054e+01 + 2069 2069 1 1.80100e+01 2.56400e+01 -1.37545e+00 + 2070 2070 1 2.57900e+01 -2.86454e+01 1.77800e+01 + 2071 2071 1 5.15000e+00 -2.00254e+01 -2.20545e+00 + 2072 2072 1 1.10700e+01 -1.46854e+01 -2.26454e+01 + 2073 2073 1 -8.66545e+00 1.08200e+01 -1.73954e+01 + 2074 2074 1 -3.35545e+00 -4.00545e+00 2.67700e+01 + 2075 2075 1 -2.27455e+01 -6.93545e+00 -2.78854e+01 + 2076 2076 1 1.13200e+01 2.36200e+01 -2.85054e+01 + 2077 2077 1 -8.56545e+00 2.74600e+01 1.28100e+01 + 2078 2078 1 -1.54502e-02 -5.60545e+00 2.47000e+01 + 2079 2079 1 -2.41555e+01 -1.92454e+01 7.48000e+00 + 2080 2080 1 -2.50355e+01 -1.97254e+01 -1.54554e+01 + 2081 2081 1 5.65000e+00 -3.75545e+00 1.28300e+01 + 2082 2082 1 -1.14455e+01 3.06300e+01 -4.63545e+00 + 2083 2083 1 3.55000e+00 1.54200e+01 -2.48454e+01 + 2084 2084 1 3.05900e+01 -2.41954e+01 2.82500e+01 + 2085 2085 1 -2.97355e+01 -2.04154e+01 -1.18354e+01 + 2086 2086 1 6.53000e+00 -1.63254e+01 -3.25545e+00 + 2087 2087 1 9.06000e+00 1.56400e+01 1.58000e+01 + 2088 2088 1 1.17000e+00 -8.96545e+00 -1.21954e+01 + 2089 2089 1 4.94000e+00 -2.69454e+01 -1.30554e+01 + 2090 2090 1 1.97800e+01 -2.66654e+01 -4.77545e+00 + 2091 2091 1 1.31000e+01 -1.49754e+01 1.20700e+01 + 2092 2092 1 -2.88555e+01 -1.57754e+01 1.48000e+01 + 2093 2093 1 -1.94755e+01 4.45000e+00 -6.58545e+00 + 2094 2094 1 9.20000e+00 -7.27545e+00 1.02800e+01 + 2095 2095 1 4.80000e-01 1.89200e+01 1.45700e+01 + 2096 2096 1 -3.08555e+01 -5.53545e+00 4.66000e+00 + 2097 2097 1 4.57000e+00 -3.32545e+00 -2.22154e+01 + 2098 2098 1 1.27500e+01 6.44000e+00 -1.40754e+01 + 2099 2099 1 8.02000e+00 -1.87854e+01 -1.02454e+01 + 2100 2100 1 -1.15155e+01 2.06900e+01 1.36400e+01 + 2101 2101 1 1.18800e+01 -3.37545e+00 -2.28754e+01 + 2102 2102 1 3.94000e+00 -1.76854e+01 -1.08254e+01 + 2103 2103 1 -5.65450e-01 2.76000e+01 -1.79545e+00 + 2104 2104 1 2.75200e+01 2.15500e+01 -8.93545e+00 + 2105 2105 1 3.04500e+01 1.47400e+01 -2.27754e+01 + 2106 2106 1 -1.63255e+01 -8.52545e+00 -8.55445e-01 + 2107 2107 1 7.47000e+00 -3.00554e+01 -3.15445e-01 + 2108 2108 1 2.31700e+01 -1.50754e+01 -2.44754e+01 + 2109 2109 1 -5.01545e+00 2.60500e+01 2.80700e+01 + 2110 2110 1 -2.36555e+01 2.71800e+01 4.25000e+00 + 2111 2111 1 -2.24655e+01 -2.84354e+01 -2.44154e+01 + 2112 2112 1 2.01000e+01 1.62700e+01 -1.81854e+01 + 2113 2113 1 2.88000e+01 -1.67454e+01 -4.98545e+00 + 2114 2114 1 -1.19755e+01 2.51500e+01 2.37500e+01 + 2115 2115 1 -1.86755e+01 1.69600e+01 -2.33154e+01 + 2116 2116 1 2.29200e+01 4.36000e+00 -9.64545e+00 + 2117 2117 1 2.17300e+01 -8.76545e+00 -1.43545e+00 + 2118 2118 1 2.71400e+01 5.12000e+00 -6.03545e+00 + 2119 2119 1 -2.31955e+01 -2.47854e+01 1.00000e-01 + 2120 2120 1 -2.95545e+00 1.65500e+01 -1.80854e+01 + 2121 2121 1 -2.26855e+01 -2.84054e+01 1.88100e+01 + 2122 2122 1 2.04600e+01 -2.16054e+01 -2.07254e+01 + 2123 2123 1 2.18000e+01 -1.33954e+01 -1.54854e+01 + 2124 2124 1 7.84000e+00 6.74000e+00 6.42000e+00 + 2125 2125 1 1.10200e+01 -2.15054e+01 1.12900e+01 + 2126 2126 1 1.82400e+01 -3.02454e+01 -3.60545e+00 + 2127 2127 1 -5.94545e+00 -2.37254e+01 -3.84545e+00 + 2128 2128 1 1.50000e-01 1.46000e+01 -1.05654e+01 + 2129 2129 1 -2.47155e+01 -2.19254e+01 1.81400e+01 + 2130 2130 1 2.25800e+01 -3.43545e+00 1.14600e+01 + 2131 2131 1 1.60900e+01 -6.55545e+00 -3.51545e+00 + 2132 2132 1 -1.30555e+01 1.45300e+01 2.48500e+01 + 2133 2133 1 2.04000e+01 -3.07854e+01 -1.85054e+01 + 2134 2134 1 2.14000e+00 4.89000e+00 -3.42545e+00 + 2135 2135 1 -1.59355e+01 -4.77545e+00 4.40000e+00 + 2136 2136 1 -2.39555e+01 -2.18154e+01 -2.70254e+01 + 2137 2137 1 -2.99355e+01 -9.11545e+00 8.53000e+00 + 2138 2138 1 1.27400e+01 8.34000e+00 -1.55545e+00 + 2139 2139 1 -8.23545e+00 -1.94545e+00 1.56700e+01 + 2140 2140 1 -2.61655e+01 1.48100e+01 -6.21545e+00 + 2141 2141 1 -7.85545e+00 -2.40754e+01 1.73600e+01 + 2142 2142 1 1.39800e+01 -1.20254e+01 -3.61545e+00 + 2143 2143 1 -5.71545e+00 -2.49454e+01 1.97700e+01 + 2144 2144 1 1.57900e+01 -6.54545e+00 7.10000e-01 + 2145 2145 1 -1.38855e+01 6.23000e+00 -2.18454e+01 + 2146 2146 1 2.05700e+01 -1.73154e+01 2.29700e+01 + 2147 2147 1 -9.67545e+00 -2.51454e+01 2.14100e+01 + 2148 2148 1 -2.59155e+01 -1.03854e+01 -1.21545e+00 + 2149 2149 1 2.55500e+01 -1.68654e+01 -2.29854e+01 + 2150 2150 1 -1.94545e+00 7.36000e+00 7.76000e+00 + 2151 2151 1 2.77600e+01 -2.71754e+01 -4.53545e+00 + 2152 2152 1 2.33000e+01 -1.20754e+01 1.34100e+01 + 2153 2153 1 7.83000e+00 -1.38454e+01 -1.72554e+01 + 2154 2154 1 -4.38545e+00 2.66100e+01 4.43000e+00 + 2155 2155 1 9.25000e+00 -7.59545e+00 -7.34545e+00 + 2156 2156 1 -2.07855e+01 -2.41654e+01 -2.82554e+01 + 2157 2157 1 2.10900e+01 9.25000e+00 -1.73554e+01 + 2158 2158 1 -2.85955e+01 -1.83054e+01 -8.89545e+00 + 2159 2159 1 -1.56155e+01 2.67000e+01 1.29000e+01 + 2160 2160 1 1.15600e+01 7.25000e+00 1.26700e+01 + 2161 2161 1 2.93900e+01 2.68900e+01 -2.36554e+01 + 2162 2162 1 -3.04855e+01 1.95100e+01 1.82900e+01 + 2163 2163 1 -1.34455e+01 1.69200e+01 -2.49754e+01 + 2164 2164 1 -6.33545e+00 -1.03454e+01 -6.15545e+00 + 2165 2165 1 1.97200e+01 2.69700e+01 7.71000e+00 + 2166 2166 1 -3.70545e+00 2.78800e+01 7.84000e+00 + 2167 2167 1 -8.54502e-02 2.54900e+01 2.50000e+00 + 2168 2168 1 -1.83555e+01 6.30000e+00 5.46000e+00 + 2169 2169 1 -1.85155e+01 -1.24545e+00 2.16200e+01 + 2170 2170 1 -1.71655e+01 1.69700e+01 1.28700e+01 + 2171 2171 1 -4.07545e+00 1.21900e+01 -1.84354e+01 + 2172 2172 1 -2.35855e+01 -2.82154e+01 -7.83545e+00 + 2173 2173 1 2.30100e+01 2.81600e+01 3.03000e+00 + 2174 2174 1 -1.63855e+01 2.55500e+01 2.39600e+01 + 2175 2175 1 -4.06545e+00 9.53000e+00 2.19200e+01 + 2176 2176 1 -2.03655e+01 1.22000e+00 -2.19354e+01 + 2177 2177 1 4.84000e+00 -3.08254e+01 -1.68854e+01 + 2178 2178 1 -2.51055e+01 8.94000e+00 -3.04754e+01 + 2179 2179 1 -2.49545e+00 1.49800e+01 2.18200e+01 + 2180 2180 1 2.43100e+01 2.40000e+00 1.10700e+01 + 2181 2181 1 -7.97545e+00 -1.15654e+01 1.98200e+01 + 2182 2182 1 1.63900e+01 -4.84545e+00 -8.47545e+00 + 2183 2183 1 2.44500e+01 2.87600e+01 8.10000e+00 + 2184 2184 1 5.77000e+00 1.44000e+00 4.37000e+00 + 2185 2185 1 2.32800e+01 -4.40545e+00 -1.30354e+01 + 2186 2186 1 -1.29955e+01 2.17000e+01 -2.71854e+01 + 2187 2187 1 2.88200e+01 3.39000e+00 7.64000e+00 + 2188 2188 1 -1.98755e+01 -2.04454e+01 -1.80454e+01 + 2189 2189 1 5.00000e-02 1.46200e+01 -2.02754e+01 + 2190 2190 1 2.56900e+01 -2.12754e+01 2.28500e+01 + 2191 2191 1 1.74500e+01 -2.21354e+01 -4.48545e+00 + 2192 2192 1 1.29900e+01 -1.38554e+01 -1.82754e+01 + 2193 2193 1 1.03100e+01 -2.64354e+01 -1.21454e+01 + 2194 2194 1 -1.58155e+01 7.74000e+00 2.49300e+01 + 2195 2195 1 -1.53255e+01 -2.13854e+01 -8.20545e+00 + 2196 2196 1 5.70000e-01 1.83600e+01 -4.60000e-01 + 2197 2197 1 -2.31855e+01 7.40000e-01 3.36000e+00 + 2198 2198 1 7.31000e+00 -2.01754e+01 2.04200e+01 + 2199 2199 1 2.66500e+01 -1.04354e+01 2.96000e+01 + 2200 2200 1 2.17300e+01 -7.93545e+00 2.90000e+01 + 2201 2201 1 1.74700e+01 -5.86545e+00 3.58000e+00 + 2202 2202 1 -1.95055e+01 -2.37954e+01 -7.48545e+00 + 2203 2203 1 2.19900e+01 4.25000e+00 1.76200e+01 + 2204 2204 1 1.33700e+01 3.98000e+00 -1.72654e+01 + 2205 2205 1 2.51700e+01 5.42000e+00 1.53700e+01 + 2206 2206 1 6.64000e+00 1.21600e+01 9.82000e+00 + 2207 2207 1 -3.07655e+01 2.28500e+01 -4.59545e+00 + 2208 2208 1 -2.04155e+01 -2.57854e+01 -2.01545e+00 + 2209 2209 1 -4.85545e+00 -2.14545e+00 -1.15654e+01 + 2210 2210 1 1.77600e+01 5.91000e+00 2.59500e+01 + 2211 2211 1 -1.93155e+01 2.72000e+00 2.92800e+01 + 2212 2212 1 2.19800e+01 -1.82154e+01 -2.92854e+01 + 2213 2213 1 -1.22655e+01 -2.49954e+01 2.87100e+01 + 2214 2214 1 2.77900e+01 2.06000e+00 -8.24545e+00 + 2215 2215 1 6.11000e+00 1.84700e+01 -1.98454e+01 + 2216 2216 1 2.88500e+01 6.79000e+00 6.02000e+00 + 2217 2217 1 -5.63545e+00 -1.86554e+01 -7.05445e-01 + 2218 2218 1 8.77000e+00 1.27800e+01 -1.90545e+00 + 2219 2219 1 2.22000e+01 5.48000e+00 -5.16545e+00 + 2220 2220 1 -1.39855e+01 1.47700e+01 1.61500e+01 + 2221 2221 1 -1.50955e+01 -1.78154e+01 -2.10154e+01 + 2222 2222 1 -3.07855e+01 -1.27554e+01 3.76000e+00 + 2223 2223 1 -9.31545e+00 -8.39545e+00 2.36300e+01 + 2224 2224 1 2.58000e+00 9.75000e+00 2.13500e+01 + 2225 2225 1 -8.46545e+00 4.01000e+00 -1.66454e+01 + 2226 2226 1 2.34200e+01 7.60000e-01 -2.94545e+00 + 2227 2227 1 1.39800e+01 -2.31754e+01 -2.60254e+01 + 2228 2228 1 1.50400e+01 -9.73545e+00 2.36500e+01 + 2229 2229 1 2.65000e+01 -2.80554e+01 -2.11254e+01 + 2230 2230 1 -1.13755e+01 -2.31354e+01 -2.27545e+00 + 2231 2231 1 -2.71955e+01 1.26500e+01 -1.35454e+01 + 2232 2232 1 5.72000e+00 1.92700e+01 -2.32154e+01 + 2233 2233 1 -1.72555e+01 -2.06954e+01 -5.10545e+00 + 2234 2234 1 -5.07545e+00 9.12000e+00 1.16500e+01 + 2235 2235 1 7.25000e+00 -2.46054e+01 1.10900e+01 + 2236 2236 1 1.20200e+01 -1.41154e+01 2.65100e+01 + 2237 2237 1 1.35400e+01 9.46000e+00 7.16000e+00 + 2238 2238 1 3.68000e+00 -1.28545e+00 -6.55445e-01 + 2239 2239 1 3.09900e+01 -1.59954e+01 -1.34554e+01 + 2240 2240 1 -1.40355e+01 1.10100e+01 -2.57554e+01 + 2241 2241 1 -1.68355e+01 -7.64545e+00 2.46000e+00 + 2242 2242 1 -2.50855e+01 -1.48054e+01 -3.83545e+00 + 2243 2243 1 -1.13155e+01 -2.56154e+01 1.31800e+01 + 2244 2244 1 -2.40545e+00 7.92000e+00 -2.27545e+00 + 2245 2245 1 -3.07755e+01 2.34900e+01 5.98000e+00 + 2246 2246 1 -1.02545e+00 -1.31054e+01 1.03600e+01 + 2247 2247 1 -7.86545e+00 5.83000e+00 2.04200e+01 + 2248 2248 1 -1.41455e+01 3.01800e+01 -1.95454e+01 + 2249 2249 1 -7.88545e+00 2.85500e+01 -3.47545e+00 + 2250 2250 1 -1.93155e+01 2.83000e+00 -1.33554e+01 + 2251 2251 1 7.63000e+00 9.13000e+00 -4.21545e+00 + 2252 2252 1 2.52600e+01 6.34000e+00 -1.04354e+01 + 2253 2253 1 -2.79755e+01 1.45000e+01 3.04800e+01 + 2254 2254 1 -2.62455e+01 2.93000e+00 2.42900e+01 + 2255 2255 1 -7.65450e-01 2.45700e+01 -1.92954e+01 + 2256 2256 1 -1.85255e+01 -2.04254e+01 3.01400e+01 + 2257 2257 1 -1.25055e+01 2.11800e+01 -1.34354e+01 + 2258 2258 1 -2.52855e+01 7.09000e+00 4.40000e+00 + 2259 2259 1 -1.70655e+01 2.59200e+01 -1.84254e+01 + 2260 2260 1 -2.33655e+01 -1.67554e+01 -9.26545e+00 + 2261 2261 1 -2.01555e+01 -1.41854e+01 -2.11545e+00 + 2262 2262 1 -2.50155e+01 7.65000e+00 1.25400e+01 + 2263 2263 1 6.50000e+00 2.95500e+01 -2.35954e+01 + 2264 2264 1 5.98000e+00 -8.04545e+00 -2.56054e+01 + 2265 2265 1 5.15000e+00 8.46000e+00 -2.49454e+01 + 2266 2266 1 2.84000e+01 -6.63545e+00 1.77500e+01 + 2267 2267 1 -5.64545e+00 3.92000e+00 -1.43854e+01 + 2268 2268 1 -2.21655e+01 1.44900e+01 1.03900e+01 + 2269 2269 1 -9.59545e+00 1.05500e+01 -2.36854e+01 + 2270 2270 1 -1.55555e+01 -9.39545e+00 -1.12854e+01 + 2271 2271 1 2.46100e+01 -2.92854e+01 1.39100e+01 + 2272 2272 1 8.20000e+00 -2.14554e+01 3.05500e+01 + 2273 2273 1 -2.97055e+01 2.72000e+01 -2.16754e+01 + 2274 2274 1 1.96200e+01 1.12300e+01 5.52000e+00 + 2275 2275 1 9.16000e+00 2.60500e+01 8.70000e-01 + 2276 2276 1 -2.63255e+01 2.93500e+01 2.36800e+01 + 2277 2277 1 2.01500e+01 -7.54545e+00 -3.03154e+01 + 2278 2278 1 2.15800e+01 1.10100e+01 -1.37154e+01 + 2279 2279 1 1.60600e+01 1.62900e+01 -6.28545e+00 + 2280 2280 1 2.44400e+01 2.08900e+01 -1.73154e+01 + 2281 2281 1 2.57800e+01 -2.01254e+01 -1.41545e+00 + 2282 2282 1 -2.97855e+01 -1.21954e+01 -1.93354e+01 + 2283 2283 1 1.71600e+01 2.50100e+01 -2.17354e+01 + 2284 2284 1 5.39000e+00 1.79700e+01 -2.49545e+00 + 2285 2285 1 -1.08655e+01 2.85400e+01 -1.34254e+01 + 2286 2286 1 -7.19545e+00 1.48300e+01 -7.88545e+00 + 2287 2287 1 1.72700e+01 -1.07854e+01 -1.59954e+01 + 2288 2288 1 2.15500e+01 -8.76545e+00 -1.46154e+01 + 2289 2289 1 2.66500e+01 1.21600e+01 -2.25254e+01 + 2290 2290 1 6.80000e+00 6.22000e+00 1.83100e+01 + 2291 2291 1 -1.35455e+01 2.96200e+01 -2.66054e+01 + 2292 2292 1 -1.39055e+01 -1.74954e+01 -5.57545e+00 + 2293 2293 1 2.06400e+01 2.82000e+00 2.55400e+01 + 2294 2294 1 -2.44855e+01 1.94000e+01 6.83000e+00 + 2295 2295 1 1.15600e+01 1.48000e+01 -4.48545e+00 + 2296 2296 1 8.18000e+00 2.76700e+01 -1.54754e+01 + 2297 2297 1 9.80000e+00 2.74000e+00 -5.06545e+00 + 2298 2298 1 3.56000e+00 1.53300e+01 -2.91654e+01 + 2299 2299 1 2.17000e+00 -1.74545e+00 5.63000e+00 + 2300 2300 1 -6.45450e-01 3.72000e+00 -5.17545e+00 + 2301 2301 1 -2.98155e+01 -1.32054e+01 1.90600e+01 + 2302 2302 1 -3.95545e+00 3.16000e+00 -2.20654e+01 + 2303 2303 1 1.52900e+01 2.05500e+01 -1.49545e+00 + 2304 2304 1 -1.15055e+01 4.39000e+00 1.96600e+01 + 2305 2305 1 -2.42655e+01 -7.97545e+00 -2.41654e+01 + 2306 2306 1 2.00300e+01 -1.21154e+01 -2.10854e+01 + 2307 2307 1 6.78000e+00 1.43400e+01 2.62000e+00 + 2308 2308 1 8.85000e+00 1.95900e+01 9.39000e+00 + 2309 2309 1 -9.07545e+00 -5.23545e+00 2.84555e-01 + 2310 2310 1 2.30700e+01 2.66600e+01 -2.57454e+01 + 2311 2311 1 1.74600e+01 2.92800e+01 2.92200e+01 + 2312 2312 1 -2.60255e+01 -1.14354e+01 8.13000e+00 + 2313 2313 1 2.55400e+01 -2.49454e+01 2.55600e+01 + 2314 2314 1 2.10100e+01 -1.44954e+01 2.69300e+01 + 2315 2315 1 -2.56755e+01 6.68000e+00 -1.53854e+01 + 2316 2316 1 1.20600e+01 1.34700e+01 9.81000e+00 + 2317 2317 1 -1.93755e+01 -6.32545e+00 -1.33545e+00 + 2318 2318 1 -1.05545e+00 -1.87454e+01 -2.48154e+01 + 2319 2319 1 -2.76755e+01 -1.79154e+01 4.79000e+00 + 2320 2320 1 6.57000e+00 -1.90654e+01 -5.63545e+00 + 2321 2321 1 2.22700e+01 2.37800e+01 -6.41545e+00 + 2322 2322 1 -2.48955e+01 2.29100e+01 2.62000e+01 + 2323 2323 1 -1.57655e+01 3.22000e+00 -6.73545e+00 + 2324 2324 1 -2.66655e+01 2.06600e+01 -1.38154e+01 + 2325 2325 1 2.17300e+01 1.53200e+01 -2.11554e+01 + 2326 2326 1 -2.27855e+01 3.01500e+01 -9.53545e+00 + 2327 2327 1 1.93200e+01 4.51000e+00 4.18000e+00 + 2328 2328 1 1.66200e+01 2.72500e+01 -1.27254e+01 + 2329 2329 1 1.94600e+01 -3.77545e+00 7.76000e+00 + 2330 2330 1 2.50700e+01 -2.72454e+01 -7.29545e+00 + 2331 2331 1 -1.34955e+01 2.47200e+01 -6.81545e+00 + 2332 2332 1 1.91000e+00 1.09700e+01 -2.27754e+01 + 2333 2333 1 2.96000e+00 -5.73545e+00 -2.78545e+00 + 2334 2334 1 6.41000e+00 1.15000e+01 -9.14545e+00 + 2335 2335 1 2.45200e+01 -2.56754e+01 8.44000e+00 + 2336 2336 1 3.00000e+01 2.69700e+01 -2.80354e+01 + 2337 2337 1 1.34100e+01 -6.46545e+00 -1.32954e+01 + 2338 2338 1 -1.64155e+01 -9.25545e+00 2.04200e+01 + 2339 2339 1 1.32700e+01 1.66900e+01 -8.65445e-01 + 2340 2340 1 -2.66655e+01 -9.05545e+00 3.00700e+01 + 2341 2341 1 2.17500e+01 -6.26545e+00 2.30300e+01 + 2342 2342 1 -9.50545e+00 -2.70545e+00 -7.15545e+00 + 2343 2343 1 2.51800e+01 -5.48545e+00 3.46000e+00 + 2344 2344 1 -9.18545e+00 -2.29954e+01 -2.56154e+01 + 2345 2345 1 -8.55450e-01 -4.34545e+00 -2.99954e+01 + 2346 2346 1 -2.12955e+01 2.80000e+01 2.33800e+01 + 2347 2347 1 2.24800e+01 1.81300e+01 1.25800e+01 + 2348 2348 1 -2.14545e+00 -1.05545e+00 -7.82545e+00 + 2349 2349 1 2.31700e+01 -6.76545e+00 8.48000e+00 + 2350 2350 1 1.79900e+01 3.02200e+01 1.96900e+01 + 2351 2351 1 1.62700e+01 2.79700e+01 2.25100e+01 + 2352 2352 1 3.00000e+00 2.26700e+01 -3.05354e+01 + 2353 2353 1 -2.52555e+01 7.48000e+00 -2.07454e+01 + 2354 2354 1 -4.48545e+00 1.45400e+01 -9.90545e+00 + 2355 2355 1 2.74300e+01 1.22800e+01 2.38100e+01 + 2356 2356 1 2.70600e+01 2.74200e+01 -4.40000e-01 + 2357 2357 1 2.43000e+01 -2.43754e+01 -2.64954e+01 + 2358 2358 1 3.00000e-02 2.67500e+01 -7.40545e+00 + 2359 2359 1 -1.84555e+01 7.94000e+00 8.91000e+00 + 2360 2360 1 2.84300e+01 -6.44545e+00 1.38300e+01 + 2361 2361 1 1.16900e+01 2.56100e+01 -2.33854e+01 + 2362 2362 1 2.43500e+01 -2.25054e+01 1.37700e+01 + 2363 2363 1 -5.72545e+00 -1.51454e+01 -4.23545e+00 + 2364 2364 1 7.14000e+00 -1.69554e+01 -2.03754e+01 + 2365 2365 1 8.78000e+00 2.72300e+01 1.63000e+01 + 2366 2366 1 -2.32455e+01 2.37700e+01 -3.20000e-01 + 2367 2367 1 5.13000e+00 5.12000e+00 -4.98545e+00 + 2368 2368 1 2.50700e+01 2.53000e+01 1.15700e+01 + 2369 2369 1 2.01800e+01 9.82000e+00 -7.58545e+00 + 2370 2370 1 1.95800e+01 -2.11545e+00 -2.97354e+01 + 2371 2371 1 -1.66155e+01 -2.80454e+01 6.57000e+00 + 2372 2372 1 2.09200e+01 -2.55754e+01 -1.48554e+01 + 2373 2373 1 1.04300e+01 -2.01754e+01 -2.27754e+01 + 2374 2374 1 1.27700e+01 -2.05454e+01 1.56900e+01 + 2375 2375 1 -2.27555e+01 2.99200e+01 1.09000e+00 + 2376 2376 1 1.13700e+01 -2.28454e+01 -8.52545e+00 + 2377 2377 1 1.64000e+01 2.79000e+00 2.51700e+01 + 2378 2378 1 -2.21255e+01 2.82500e+01 8.29000e+00 + 2379 2379 1 2.01700e+01 1.14600e+01 2.05800e+01 + 2380 2380 1 7.60000e-01 1.95000e+01 1.92900e+01 + 2381 2381 1 2.45000e+00 -3.77545e+00 2.80000e+00 + 2382 2382 1 -2.22155e+01 -2.76854e+01 -1.62254e+01 + 2383 2383 1 -4.60545e+00 -2.18545e+00 8.36000e+00 + 2384 2384 1 1.74400e+01 5.72000e+00 -2.16454e+01 + 2385 2385 1 -1.91355e+01 1.19600e+01 9.58000e+00 + 2386 2386 1 -3.02545e+00 -8.32545e+00 1.10400e+01 + 2387 2387 1 -2.87155e+01 2.05000e+00 -1.14454e+01 + 2388 2388 1 -2.03755e+01 -4.75545e+00 1.07900e+01 + 2389 2389 1 4.50000e+00 -2.02754e+01 1.12000e+01 + 2390 2390 1 -1.96655e+01 -2.01954e+01 1.81300e+01 + 2391 2391 1 1.72000e+00 -2.16754e+01 3.50000e+00 + 2392 2392 1 -1.57555e+01 1.90900e+01 2.89600e+01 + 2393 2393 1 1.55600e+01 2.06100e+01 2.57500e+01 + 2394 2394 1 6.97000e+00 -2.16654e+01 2.38000e+01 + 2395 2395 1 -2.48545e+00 -1.44545e+00 -1.68654e+01 + 2396 2396 1 -3.06545e+00 2.52600e+01 2.52100e+01 + 2397 2397 1 3.32000e+00 -3.94545e+00 2.62800e+01 + 2398 2398 1 1.88600e+01 9.49000e+00 1.72100e+01 + 2399 2399 1 6.42000e+00 2.79300e+01 -6.67545e+00 + 2400 2400 1 5.25000e+00 -1.34954e+01 1.53800e+01 + 2401 2401 1 1.66900e+01 -2.41354e+01 -1.38754e+01 + 2402 2402 1 -2.30155e+01 -1.76754e+01 -9.35445e-01 + 2403 2403 1 2.81000e+00 5.18000e+00 1.86400e+01 + 2404 2404 1 -2.76855e+01 -1.80545e+00 -7.64545e+00 + 2405 2405 1 1.40400e+01 -1.42254e+01 -2.59354e+01 + 2406 2406 1 2.13000e+01 7.99000e+00 -2.88654e+01 + 2407 2407 1 4.02000e+00 5.24000e+00 1.40900e+01 + 2408 2408 1 1.12100e+01 4.18000e+00 9.61000e+00 + 2409 2409 1 2.87000e+00 2.76600e+01 2.08300e+01 + 2410 2410 1 -9.44545e+00 3.06100e+01 -2.84154e+01 + 2411 2411 1 2.43000e+01 -2.27545e+00 7.06000e+00 + 2412 2412 1 -1.56855e+01 2.43900e+01 2.71800e+01 + 2413 2413 1 -1.99855e+01 2.12400e+01 2.83900e+01 + 2414 2414 1 -3.07955e+01 -2.84054e+01 -2.28545e+00 + 2415 2415 1 1.16200e+01 1.43600e+01 2.65300e+01 + 2416 2416 1 -2.83055e+01 2.40000e+00 2.97400e+01 + 2417 2417 1 6.02000e+00 3.05500e+01 1.41000e+01 + 2418 2418 1 1.39900e+01 -1.74254e+01 2.70700e+01 + 2419 2419 1 1.45900e+01 2.33000e+01 -1.56854e+01 + 2420 2420 1 7.22000e+00 1.47900e+01 2.71200e+01 + 2421 2421 1 -1.65545e+00 9.43000e+00 3.00000e+01 + 2422 2422 1 2.05000e+01 2.14800e+01 2.82000e+00 + 2423 2423 1 -1.36955e+01 -1.38254e+01 -7.32545e+00 + 2424 2424 1 2.80600e+01 -3.98545e+00 1.47000e+00 + 2425 2425 1 -8.25545e+00 3.03100e+01 -1.52754e+01 + 2426 2426 1 2.63000e+01 2.34900e+01 -3.08354e+01 + 2427 2427 1 1.47100e+01 -1.81545e+00 -1.96354e+01 + 2428 2428 1 2.92100e+01 3.91000e+00 -1.43545e+00 + 2429 2429 1 3.02900e+01 -1.98454e+01 -3.98545e+00 + 2430 2430 1 -5.95545e+00 3.73000e+00 -8.50545e+00 + 2431 2431 1 -1.69155e+01 6.19000e+00 3.04300e+01 + 2432 2432 1 -1.04055e+01 1.15000e+01 -3.07454e+01 + 2433 2433 1 1.34000e+00 -2.81854e+01 1.17800e+01 + 2434 2434 1 4.70000e-01 2.57000e+00 -9.66545e+00 + 2435 2435 1 9.77000e+00 -9.08545e+00 -9.75445e-01 + 2436 2436 1 2.26500e+01 -1.37545e+00 2.27500e+01 + 2437 2437 1 -7.61545e+00 -1.60554e+01 1.28600e+01 + 2438 2438 1 -1.38655e+01 -2.36254e+01 6.92000e+00 + 2439 2439 1 -5.26545e+00 2.66800e+01 -1.54454e-02 + 2440 2440 1 2.10800e+01 -3.02654e+01 1.74900e+01 + 2441 2441 1 -9.28545e+00 5.37000e+00 2.83200e+01 + 2442 2442 1 -2.09955e+01 -1.78854e+01 -2.83754e+01 + 2443 2443 1 -2.33855e+01 2.21600e+01 -2.41954e+01 + 2444 2444 1 1.70000e+00 -2.10454e+01 9.08000e+00 + 2445 2445 1 5.41000e+00 3.10100e+01 2.12800e+01 + 2446 2446 1 -1.89545e+00 -2.22454e+01 -2.46154e+01 + 2447 2447 1 -2.23855e+01 1.60600e+01 -1.73054e+01 + 2448 2448 1 0.00000e+00 1.14000e+01 8.34000e+00 + 2449 2449 1 -2.38055e+01 1.22900e+01 -1.24254e+01 + 2450 2450 1 -9.13545e+00 2.80100e+01 -8.04545e+00 + 2451 2451 1 -2.53955e+01 5.66000e+00 -9.85545e+00 + 2452 2452 1 1.24000e+00 -1.46454e+01 1.38000e+01 + 2453 2453 1 1.55800e+01 -1.92054e+01 -6.92545e+00 + 2454 2454 1 -2.39055e+01 2.14500e+01 9.28000e+00 + 2455 2455 1 9.10000e+00 -2.29654e+01 -2.76054e+01 + 2456 2456 1 1.47400e+01 -1.52654e+01 -5.68545e+00 + 2457 2457 1 2.52000e+01 -2.98754e+01 -3.01254e+01 + 2458 2458 1 -5.72545e+00 1.19700e+01 1.52700e+01 + 2459 2459 1 -2.35855e+01 1.24400e+01 -1.93554e+01 + 2460 2460 1 -2.15655e+01 -1.56254e+01 1.42700e+01 + 2461 2461 1 1.30000e+00 8.94000e+00 -1.39054e+01 + 2462 2462 1 2.11000e+00 2.45800e+01 -6.85445e-01 + 2463 2463 1 -1.42255e+01 -1.86154e+01 -8.55445e-01 + 2464 2464 1 -2.48955e+01 -2.38154e+01 -1.70054e+01 + 2465 2465 1 1.53500e+01 -3.53545e+00 1.22400e+01 + 2466 2466 1 -1.49055e+01 3.45000e+00 -2.90454e+01 + 2467 2467 1 -1.21545e+00 -3.08154e+01 9.53000e+00 + 2468 2468 1 -2.10855e+01 1.01900e+01 -2.01354e+01 + 2469 2469 1 -1.79155e+01 -1.39654e+01 -2.76854e+01 + 2470 2470 1 -2.26855e+01 2.89000e+00 -1.96254e+01 + 2471 2471 1 -2.71655e+01 -1.89354e+01 1.59700e+01 + 2472 2472 1 4.56000e+00 1.10000e-01 2.60200e+01 + 2473 2473 1 1.43100e+01 -1.03854e+01 1.00700e+01 + 2474 2474 1 -2.18755e+01 2.62700e+01 -3.00554e+01 + 2475 2475 1 2.33700e+01 -2.06454e+01 -4.30545e+00 + 2476 2476 1 7.68000e+00 5.30000e-01 1.42800e+01 + 2477 2477 1 9.41000e+00 4.83000e+00 -1.61654e+01 + 2478 2478 1 1.92100e+01 6.84000e+00 6.71000e+00 + 2479 2479 1 1.35600e+01 -2.63654e+01 2.47600e+01 + 2480 2480 1 6.48000e+00 5.47000e+00 -3.05754e+01 + 2481 2481 1 1.68800e+01 -1.59254e+01 -2.66554e+01 + 2482 2482 1 7.69000e+00 2.89600e+01 -1.85754e+01 + 2483 2483 1 -2.06055e+01 1.30400e+01 -2.26654e+01 + 2484 2484 1 7.78000e+00 1.75100e+01 -1.57754e+01 + 2485 2485 1 7.59000e+00 -9.68545e+00 3.03100e+01 + 2486 2486 1 -3.04655e+01 -2.75554e+01 -2.73554e+01 + 2487 2487 1 -2.33255e+01 2.94500e+01 -2.39954e+01 + 2488 2488 1 1.32100e+01 2.24900e+01 1.94500e+01 + 2489 2489 1 2.46500e+01 -2.09354e+01 6.67000e+00 + 2490 2490 1 -2.42555e+01 1.60800e+01 1.39400e+01 + 2491 2491 1 -2.91855e+01 -8.43545e+00 2.32500e+01 + 2492 2492 1 2.81900e+01 3.17000e+00 2.42000e+01 + 2493 2493 1 -2.47355e+01 1.11400e+01 -2.31454e+01 + 2494 2494 1 -2.98455e+01 6.67000e+00 2.34500e+01 + 2495 2495 1 1.05700e+01 4.19000e+00 2.24900e+01 + 2496 2496 1 2.57900e+01 7.07000e+00 -2.83454e+01 + 2497 2497 1 -5.55545e+00 1.41600e+01 2.53600e+01 + 2498 2498 1 -1.19855e+01 -2.52754e+01 -2.81154e+01 + 2499 2499 1 2.19000e+00 -3.04154e+01 2.90800e+01 + 2500 2500 1 5.98000e+00 -2.65154e+01 -5.44540e-03 + diff --git a/examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.in b/examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.in new file mode 100644 index 0000000000..ef92fbe655 --- /dev/null +++ b/examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.in @@ -0,0 +1,68 @@ +# LAMMPS input file for 50.0% methanol mole fraction solution +# with 2500 methanol molecules in implicit water. +# +# +# Author: David Rosenberger, van der Vegt Group, TU Darmstadt +# +# Refer: Rosenberger, Sanyal, Shell, van der Vegt, J. Chem. Theory Comput. 15, 2881-2895 (2019) + + +# Initialize simulation box +dimension 3 +boundary p p p +units real +atom_style molecular + +# Set potential styles +pair_style hybrid/overlay table spline 500 local/density + +# Read molecule data and set initial velocities +read_data methanol_implicit_water.data +velocity all create 3.0000e+02 12142 rot yes dist gaussian + +# Assign potentials +pair_coeff 1 1 table methanol_implicit_water.pair.table PairMM +pair_coeff * * local/density methanol_implicit_water.localdensity.table + + + + +#Recentering during minimization and equilibration +fix recentering all recenter 0.0 0.0 0.0 units box + +#Thermostat & time integration +timestep 1.0 +thermo 100 +thermo_style custom etotal ke pe temp evdwl + +#minimization +minimize 1.e-4 0.0 1000 1000 + +#set up integration parameters +fix timeintegration all nve +fix thermostat all langevin 3.0000e+02 3.0000e+02 1.0000e+02 59915 + +#Equilibration (for realistic results, run for 2000000 steps) +reset_timestep 0 +thermo 200 +thermo_style custom etotal ke pe temp evdwl + +#run equilibration +run 2000 + +#turn off recentering during production run +unfix recentering + + +#setup trajectory output +dump myDump all custom 100 methanol_implicit_water.lammpstrj.gz id type x y z element +dump_modify myDump element M +dump_modify myDump sort id + +#run production (for realistic results, run for 10000000 steps) +reset_timestep 0 +thermo 1000 +thermo_style custom etotal ke pe temp evdwl +run 10000 + + diff --git a/examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.localdensity.table b/examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.localdensity.table new file mode 100644 index 0000000000..b9b4a082bc --- /dev/null +++ b/examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.localdensity.table @@ -0,0 +1,509 @@ +#LOCAL DENSITY POTENTIALS + +1 500 + + 5.3000000e+00 6.3000000e+00 +1 +1 + 0.0000000e+00 2.6000000e+01 5.2104208e-02 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4810000e-01 + 1.4807157e-01 + 1.4782582e-01 + 1.4711763e-01 + 1.4570179e-01 + 1.4333312e-01 + 1.3976643e-01 + 1.3478059e-01 + 1.2856173e-01 + 1.2163552e-01 + 1.1453802e-01 + 1.0780525e-01 + 1.0197328e-01 + 9.7575837e-02 + 9.4875548e-02 + 9.3613063e-02 + 9.3469690e-02 + 9.4126738e-02 + 9.5265515e-02 + 9.6567329e-02 + 9.7735007e-02 + 9.8575495e-02 + 9.8927186e-02 + 9.8628481e-02 + 9.7517779e-02 + 9.5433481e-02 + 9.2235018e-02 + 8.8072568e-02 + 8.3308496e-02 + 7.8309990e-02 + 7.3444241e-02 + 6.9078438e-02 + 6.5577180e-02 + 6.3110699e-02 + 6.1523109e-02 + 6.0627357e-02 + 6.0236386e-02 + 6.0163144e-02 + 6.0220573e-02 + 6.0233006e-02 + 6.0072080e-02 + 5.9621717e-02 + 5.8765838e-02 + 5.7388366e-02 + 5.5373224e-02 + 5.2623498e-02 + 4.9261717e-02 + 4.5550390e-02 + 4.1754290e-02 + 3.8138193e-02 + 3.4966871e-02 + 3.2501662e-02 + 3.0825931e-02 + 2.9762256e-02 + 2.9112455e-02 + 2.8678347e-02 + 2.8261751e-02 + 2.7664487e-02 + 2.6737788e-02 + 2.5509284e-02 + 2.4045951e-02 + 2.2414767e-02 + 2.0682707e-02 + 1.8916748e-02 + 1.7179645e-02 + 1.5493687e-02 + 1.3858641e-02 + 1.2274032e-02 + 1.0739385e-02 + 9.2542252e-03 + 7.8179601e-03 + 6.4255437e-03 + 5.0662231e-03 + 3.7288715e-03 + 2.4023618e-03 + 1.0755673e-03 +-2.6263394e-04 +-1.6141074e-03 +-2.9522803e-03 +-4.2451362e-03 +-5.4606586e-03 +-6.5668312e-03 +-7.5316377e-03 +-8.3294239e-03 +-8.9860017e-03 +-9.5521117e-03 +-1.0078658e-02 +-1.0616544e-02 +-1.1216675e-02 +-1.1929199e-02 +-1.2782684e-02 +-1.3781467e-02 +-1.4928602e-02 +-1.6227139e-02 +-1.7680132e-02 +-1.9290577e-02 +-2.1031059e-02 +-2.2793537e-02 +-2.4456753e-02 +-2.5899451e-02 +-2.7000374e-02 +-2.7638267e-02 +-2.7719868e-02 +-2.7344330e-02 +-2.6691680e-02 +-2.5942229e-02 +-2.5276286e-02 +-2.4874159e-02 +-2.4909370e-02 +-2.5403835e-02 +-2.6230347e-02 +-2.7255409e-02 +-2.8345523e-02 +-2.9367192e-02 +-3.0187085e-02 +-3.0712590e-02 +-3.0944560e-02 +-3.0896910e-02 +-3.0583557e-02 +-3.0018416e-02 +-2.9215405e-02 +-2.8195478e-02 +-2.7020910e-02 +-2.5768997e-02 +-2.4517057e-02 +-2.3342408e-02 +-2.2322368e-02 +-2.1532406e-02 +-2.1015034e-02 +-2.0784355e-02 +-2.0853543e-02 +-2.1235771e-02 +-2.1944214e-02 +-2.2991215e-02 +-2.4278363e-02 +-2.5486458e-02 +-2.6270119e-02 +-2.6283964e-02 +-2.5182614e-02 +-2.2620686e-02 +-1.8367122e-02 +-1.2765600e-02 +-6.3400224e-03 + 3.8564733e-04 + 6.8874449e-03 + 1.2641406e-02 + 1.7151899e-02 + 2.0334733e-02 + 2.2416173e-02 + 2.3630118e-02 + 2.4210466e-02 + 2.4391115e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + 2.4405000e-02 + diff --git a/examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.pair.table b/examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.pair.table new file mode 100644 index 0000000000..b74fe398e8 --- /dev/null +++ b/examples/USER/misc/local_density/methanol_implicit_water/methanol_implicit_water.pair.table @@ -0,0 +1,1012 @@ + +PairMM +N 500 R 2.00000e-02 1.50000e+01 + +1 2.00000e-02 9.19945e+01 2.97871e+01 +2 5.00200e-02 9.11003e+01 2.97871e+01 +3 8.00401e-02 9.02061e+01 2.97871e+01 +4 1.10060e-01 8.93119e+01 2.97871e+01 +5 1.40080e-01 8.84177e+01 2.97871e+01 +6 1.70100e-01 8.75235e+01 2.97871e+01 +7 2.00120e-01 8.66293e+01 2.97871e+01 +8 2.30140e-01 8.57350e+01 2.97871e+01 +9 2.60160e-01 8.48408e+01 2.97871e+01 +10 2.90180e-01 8.39466e+01 2.97871e+01 +11 3.20200e-01 8.30524e+01 2.97871e+01 +12 3.50220e-01 8.21582e+01 2.97871e+01 +13 3.80240e-01 8.12640e+01 2.97871e+01 +14 4.10261e-01 8.03698e+01 2.97871e+01 +15 4.40281e-01 7.94756e+01 2.97871e+01 +16 4.70301e-01 7.85814e+01 2.97871e+01 +17 5.00321e-01 7.76872e+01 2.97871e+01 +18 5.30341e-01 7.67929e+01 2.97871e+01 +19 5.60361e-01 7.58987e+01 2.97871e+01 +20 5.90381e-01 7.50045e+01 2.97871e+01 +21 6.20401e-01 7.41103e+01 2.97871e+01 +22 6.50421e-01 7.32161e+01 2.97871e+01 +23 6.80441e-01 7.23219e+01 2.97871e+01 +24 7.10461e-01 7.14277e+01 2.97871e+01 +25 7.40481e-01 7.05335e+01 2.97871e+01 +26 7.70501e-01 6.96393e+01 2.97871e+01 +27 8.00521e-01 6.87450e+01 2.97871e+01 +28 8.30541e-01 6.78508e+01 2.97871e+01 +29 8.60561e-01 6.69566e+01 2.97871e+01 +30 8.90581e-01 6.60624e+01 2.97871e+01 +31 9.20601e-01 6.51682e+01 2.97871e+01 +32 9.50621e-01 6.42740e+01 2.97871e+01 +33 9.80641e-01 6.33798e+01 2.97871e+01 +34 1.01066e+00 6.24856e+01 2.97871e+01 +35 1.04068e+00 6.15914e+01 2.97871e+01 +36 1.07070e+00 6.06972e+01 2.97871e+01 +37 1.10072e+00 5.98029e+01 2.97871e+01 +38 1.13074e+00 5.89087e+01 2.97871e+01 +39 1.16076e+00 5.80145e+01 2.97871e+01 +40 1.19078e+00 5.71203e+01 2.97871e+01 +41 1.22080e+00 5.62261e+01 2.97871e+01 +42 1.25082e+00 5.53319e+01 2.97871e+01 +43 1.28084e+00 5.44377e+01 2.97871e+01 +44 1.31086e+00 5.35435e+01 2.97871e+01 +45 1.34088e+00 5.26493e+01 2.97871e+01 +46 1.37090e+00 5.17551e+01 2.97871e+01 +47 1.40092e+00 5.08608e+01 2.97871e+01 +48 1.43094e+00 4.99666e+01 2.97871e+01 +49 1.46096e+00 4.90724e+01 2.97871e+01 +50 1.49098e+00 4.81782e+01 2.97871e+01 +51 1.52100e+00 4.72840e+01 2.97871e+01 +52 1.55102e+00 4.63898e+01 2.97871e+01 +53 1.58104e+00 4.54956e+01 2.97871e+01 +54 1.61106e+00 4.46014e+01 2.97871e+01 +55 1.64108e+00 4.37072e+01 2.97871e+01 +56 1.67110e+00 4.28130e+01 2.97871e+01 +57 1.70112e+00 4.19187e+01 2.97871e+01 +58 1.73114e+00 4.10245e+01 2.97871e+01 +59 1.76116e+00 4.01303e+01 2.97871e+01 +60 1.79118e+00 3.92361e+01 2.97871e+01 +61 1.82120e+00 3.83419e+01 2.97871e+01 +62 1.85122e+00 3.74477e+01 2.97871e+01 +63 1.88124e+00 3.65535e+01 2.97871e+01 +64 1.91126e+00 3.56593e+01 2.97871e+01 +65 1.94128e+00 3.47651e+01 2.97871e+01 +66 1.97130e+00 3.38709e+01 2.97871e+01 +67 2.00132e+00 3.29766e+01 2.97871e+01 +68 2.03134e+00 3.20824e+01 2.97871e+01 +69 2.06136e+00 3.11882e+01 2.97871e+01 +70 2.09138e+00 3.02940e+01 2.97871e+01 +71 2.12140e+00 2.93998e+01 2.97871e+01 +72 2.15142e+00 2.85056e+01 2.97871e+01 +73 2.18144e+00 2.76114e+01 2.97871e+01 +74 2.21146e+00 2.67172e+01 2.97871e+01 +75 2.24148e+00 2.58230e+01 2.97871e+01 +76 2.27150e+00 2.49288e+01 2.97871e+01 +77 2.30152e+00 2.40345e+01 2.97871e+01 +78 2.33154e+00 2.31403e+01 2.97871e+01 +79 2.36156e+00 2.22461e+01 2.97871e+01 +80 2.39158e+00 2.13519e+01 2.97871e+01 +81 2.42160e+00 2.04577e+01 2.97871e+01 +82 2.45162e+00 1.95635e+01 2.97871e+01 +83 2.48164e+00 1.86693e+01 2.97871e+01 +84 2.51166e+00 1.77751e+01 2.97871e+01 +85 2.54168e+00 1.68809e+01 2.97871e+01 +86 2.57170e+00 1.59867e+01 2.97871e+01 +87 2.60172e+00 1.50924e+01 2.97871e+01 +88 2.63174e+00 1.41982e+01 2.97871e+01 +89 2.66176e+00 1.33040e+01 2.97871e+01 +90 2.69178e+00 1.24098e+01 2.97871e+01 +91 2.72180e+00 1.15156e+01 2.97871e+01 +92 2.75182e+00 1.06214e+01 2.97869e+01 +93 2.78184e+00 9.72719e+00 2.97870e+01 +94 2.81186e+00 8.83299e+00 2.97872e+01 +95 2.84188e+00 7.94090e+00 2.95697e+01 +96 2.87190e+00 7.06217e+00 2.88975e+01 +97 2.90192e+00 6.21045e+00 2.77704e+01 +98 2.93194e+00 5.39938e+00 2.61886e+01 +99 2.96196e+00 4.64263e+00 2.41520e+01 +100 2.99198e+00 3.95385e+00 2.16606e+01 +101 3.02200e+00 3.34529e+00 1.89044e+01 +102 3.05202e+00 2.81637e+00 1.63756e+01 +103 3.08204e+00 2.35957e+00 1.40993e+01 +104 3.11206e+00 1.96731e+00 1.20757e+01 +105 3.14208e+00 1.63202e+00 1.03046e+01 +106 3.17210e+00 1.34610e+00 8.78617e+00 +107 3.20212e+00 1.10205e+00 7.50421e+00 +108 3.23214e+00 8.94281e-01 6.35707e+00 +109 3.26216e+00 7.19196e-01 5.32692e+00 +110 3.29218e+00 5.73281e-01 4.41377e+00 +111 3.32220e+00 4.53023e-01 3.61760e+00 +112 3.35222e+00 3.54909e-01 2.93842e+00 +113 3.38224e+00 2.75435e-01 2.37392e+00 +114 3.41226e+00 2.11828e-01 1.86993e+00 +115 3.44228e+00 1.62787e-01 1.40363e+00 +116 3.47230e+00 1.27177e-01 9.75004e-01 +117 3.50232e+00 1.03870e-01 5.84063e-01 +118 3.53234e+00 9.17332e-02 2.30805e-01 +119 3.56236e+00 8.96354e-02 -8.47700e-02 +120 3.59238e+00 9.62368e-02 -3.41692e-01 +121 3.62240e+00 1.09350e-01 -5.18612e-01 +122 3.65242e+00 1.26574e-01 -6.15527e-01 +123 3.68244e+00 1.45506e-01 -6.32440e-01 +124 3.71246e+00 1.63745e-01 -5.69349e-01 +125 3.74248e+00 1.78889e-01 -4.26254e-01 +126 3.77251e+00 1.88729e-01 -2.28844e-01 +127 3.80253e+00 1.92736e-01 -3.99828e-02 +128 3.83255e+00 1.91244e-01 1.37465e-01 +129 3.86257e+00 1.84597e-01 3.03500e-01 +130 3.89259e+00 1.73136e-01 4.58121e-01 +131 3.92261e+00 1.57205e-01 6.01329e-01 +132 3.95263e+00 1.37160e-01 7.30471e-01 +133 3.98265e+00 1.13658e-01 8.29879e-01 +134 4.01267e+00 8.76572e-02 8.96980e-01 +135 4.04269e+00 6.01267e-02 9.31775e-01 +136 4.07271e+00 3.20367e-02 9.34263e-01 +137 4.10273e+00 4.35682e-03 9.04444e-01 +138 4.13275e+00 -2.19459e-02 8.43457e-01 +139 4.16277e+00 -4.62335e-02 7.74951e-01 +140 4.19279e+00 -6.84930e-02 7.08340e-01 +141 4.22281e+00 -8.87812e-02 6.43625e-01 +142 4.25283e+00 -1.07155e-01 5.80805e-01 +143 4.28285e+00 -1.23672e-01 5.19881e-01 +144 4.31287e+00 -1.38388e-01 4.60852e-01 +145 4.34289e+00 -1.51360e-01 4.03717e-01 +146 4.37291e+00 -1.62646e-01 3.48474e-01 +147 4.40293e+00 -1.72302e-01 2.95121e-01 +148 4.43295e+00 -1.80384e-01 2.43661e-01 +149 4.46297e+00 -1.86950e-01 1.94092e-01 +150 4.49299e+00 -1.92056e-01 1.46414e-01 +151 4.52301e+00 -1.95763e-01 1.01113e-01 +152 4.55303e+00 -1.98162e-01 5.93143e-02 +153 4.58305e+00 -1.99360e-01 2.10616e-02 +154 4.61307e+00 -1.99462e-01 -1.36446e-02 +155 4.64309e+00 -1.98576e-01 -4.48045e-02 +156 4.67311e+00 -1.96808e-01 -7.24180e-02 +157 4.70313e+00 -1.94262e-01 -9.67717e-02 +158 4.73315e+00 -1.91013e-01 -1.19452e-01 +159 4.76317e+00 -1.87105e-01 -1.40703e-01 +160 4.79319e+00 -1.82580e-01 -1.60523e-01 +161 4.82321e+00 -1.77481e-01 -1.78913e-01 +162 4.85323e+00 -1.71852e-01 -1.95873e-01 +163 4.88325e+00 -1.65735e-01 -2.11359e-01 +164 4.91327e+00 -1.59186e-01 -2.24534e-01 +165 4.94329e+00 -1.52281e-01 -2.35084e-01 +166 4.97331e+00 -1.45098e-01 -2.43010e-01 +167 5.00333e+00 -1.37717e-01 -2.48312e-01 +168 5.03335e+00 -1.30215e-01 -2.50989e-01 +169 5.06337e+00 -1.22673e-01 -2.51043e-01 +170 5.09339e+00 -1.15153e-01 -2.50013e-01 +171 5.12341e+00 -1.07660e-01 -2.49271e-01 +172 5.15343e+00 -1.00184e-01 -2.48818e-01 +173 5.18345e+00 -9.27178e-02 -2.48655e-01 +174 5.21347e+00 -8.52520e-02 -2.48780e-01 +175 5.24349e+00 -7.77781e-02 -2.49195e-01 +176 5.27351e+00 -7.02942e-02 -2.49037e-01 +177 5.30353e+00 -6.28510e-02 -2.46424e-01 +178 5.33355e+00 -5.55241e-02 -2.41290e-01 +179 5.36357e+00 -4.83892e-02 -2.33634e-01 +180 5.39359e+00 -4.15219e-02 -2.23458e-01 +181 5.42361e+00 -3.49980e-02 -2.10761e-01 +182 5.45363e+00 -2.88902e-02 -1.96059e-01 +183 5.48365e+00 -2.32177e-02 -1.82031e-01 +184 5.51367e+00 -1.79505e-02 -1.69060e-01 +185 5.54369e+00 -1.30568e-02 -1.57145e-01 +186 5.57371e+00 -8.50494e-03 -1.46287e-01 +187 5.60373e+00 -4.26314e-03 -1.36487e-01 +188 5.63375e+00 -2.99795e-04 -1.27712e-01 +189 5.66377e+00 3.40924e-03 -1.19447e-01 +190 5.69379e+00 6.87508e-03 -1.11509e-01 +191 5.72381e+00 1.01075e-02 -1.03898e-01 +192 5.75383e+00 1.31164e-02 -9.66146e-02 +193 5.78385e+00 1.59115e-02 -8.96578e-02 +194 5.81387e+00 1.85027e-02 -8.30284e-02 +195 5.84389e+00 2.09020e-02 -7.69319e-02 +196 5.87391e+00 2.31288e-02 -7.15406e-02 +197 5.90393e+00 2.52043e-02 -6.68545e-02 +198 5.93395e+00 2.71498e-02 -6.28736e-02 +199 5.96397e+00 2.89863e-02 -5.95979e-02 +200 5.99399e+00 3.07351e-02 -5.70274e-02 +201 6.02401e+00 3.24185e-02 -5.53056e-02 +202 6.05403e+00 3.40672e-02 -5.47288e-02 +203 6.08405e+00 3.57159e-02 -5.53060e-02 +204 6.11407e+00 3.73993e-02 -5.70373e-02 +205 6.14409e+00 3.91520e-02 -5.99226e-02 +206 6.17411e+00 4.10086e-02 -6.39619e-02 +207 6.20413e+00 4.29997e-02 -6.84095e-02 +208 6.23415e+00 4.50810e-02 -6.96340e-02 +209 6.26417e+00 4.71434e-02 -6.71518e-02 +210 6.29419e+00 4.90757e-02 -6.09627e-02 +211 6.32421e+00 5.07666e-02 -5.10669e-02 +212 6.35423e+00 5.21047e-02 -3.74643e-02 +213 6.38425e+00 5.29795e-02 -2.03798e-02 +214 6.41427e+00 5.33308e-02 -3.19178e-03 +215 6.44429e+00 5.31815e-02 1.29657e-02 +216 6.47431e+00 5.25626e-02 2.80925e-02 +217 6.50433e+00 5.15051e-02 4.21888e-02 +218 6.53435e+00 5.00399e-02 5.52546e-02 +219 6.56437e+00 4.81979e-02 6.72903e-02 +220 6.59439e+00 4.60085e-02 7.84476e-02 +221 6.62441e+00 4.34955e-02 8.88459e-02 +222 6.65443e+00 4.06818e-02 9.84851e-02 +223 6.68445e+00 3.75901e-02 1.07365e-01 +224 6.71447e+00 3.42431e-02 1.15487e-01 +225 6.74449e+00 3.06638e-02 1.22849e-01 +226 6.77451e+00 2.68771e-02 1.29179e-01 +227 6.80453e+00 2.29237e-02 1.33943e-01 +228 6.83455e+00 1.88510e-02 1.37127e-01 +229 6.86457e+00 1.47064e-02 1.38733e-01 +230 6.89459e+00 1.05373e-02 1.38759e-01 +231 6.92461e+00 6.39110e-03 1.37205e-01 +232 6.95463e+00 2.31403e-03 1.34290e-01 +233 6.98465e+00 -1.66868e-03 1.31007e-01 +234 7.01467e+00 -5.54918e-03 1.27480e-01 +235 7.04469e+00 -9.32014e-03 1.23709e-01 +236 7.07471e+00 -1.29742e-02 1.19694e-01 +237 7.10473e+00 -1.65041e-02 1.15435e-01 +238 7.13475e+00 -1.99024e-02 1.10910e-01 +239 7.16477e+00 -2.31572e-02 1.05819e-01 +240 7.19479e+00 -2.62492e-02 1.00067e-01 +241 7.22481e+00 -2.91586e-02 9.36550e-02 +242 7.25483e+00 -3.18656e-02 8.65822e-02 +243 7.28485e+00 -3.43504e-02 7.88488e-02 +244 7.31487e+00 -3.65931e-02 7.04591e-02 +245 7.34489e+00 -3.85827e-02 6.22193e-02 +246 7.37491e+00 -4.03362e-02 5.47266e-02 +247 7.40493e+00 -4.18760e-02 4.79808e-02 +248 7.43495e+00 -4.32245e-02 4.19821e-02 +249 7.46497e+00 -4.44041e-02 3.67304e-02 +250 7.49499e+00 -4.54373e-02 3.22257e-02 +251 7.52501e+00 -4.63434e-02 2.81128e-02 +252 7.55503e+00 -4.71224e-02 2.37374e-02 +253 7.58505e+00 -4.77659e-02 1.90852e-02 +254 7.61507e+00 -4.82655e-02 1.41564e-02 +255 7.64509e+00 -4.86130e-02 8.95088e-03 +256 7.67511e+00 -4.88002e-02 3.46862e-03 +257 7.70513e+00 -4.88193e-02 -2.16133e-03 +258 7.73515e+00 -4.86748e-02 -7.38361e-03 +259 7.76517e+00 -4.83807e-02 -1.21345e-02 +260 7.79519e+00 -4.79510e-02 -1.64140e-02 +261 7.82521e+00 -4.73999e-02 -2.02221e-02 +262 7.85523e+00 -4.67416e-02 -2.35587e-02 +263 7.88525e+00 -4.59901e-02 -2.64574e-02 +264 7.91527e+00 -4.51529e-02 -2.93326e-02 +265 7.94529e+00 -4.42279e-02 -3.23085e-02 +266 7.97531e+00 -4.32121e-02 -3.53849e-02 +267 8.00533e+00 -4.21024e-02 -3.85620e-02 +268 8.03535e+00 -4.08958e-02 -4.18397e-02 +269 8.06537e+00 -3.95893e-02 -4.52148e-02 +270 8.09539e+00 -3.81847e-02 -4.82641e-02 +271 8.12541e+00 -3.66978e-02 -5.06928e-02 +272 8.15543e+00 -3.51473e-02 -5.25007e-02 +273 8.18545e+00 -3.35518e-02 -5.36880e-02 +274 8.21547e+00 -3.19301e-02 -5.42545e-02 +275 8.24549e+00 -3.03006e-02 -5.42004e-02 +276 8.27551e+00 -2.86797e-02 -5.38072e-02 +277 8.30553e+00 -2.70684e-02 -5.35644e-02 +278 8.33555e+00 -2.54621e-02 -5.34807e-02 +279 8.36557e+00 -2.38558e-02 -5.35562e-02 +280 8.39559e+00 -2.22450e-02 -5.37909e-02 +281 8.42561e+00 -2.06246e-02 -5.41848e-02 +282 8.45563e+00 -1.89910e-02 -5.45876e-02 +283 8.48565e+00 -1.73536e-02 -5.43905e-02 +284 8.51567e+00 -1.57321e-02 -5.35288e-02 +285 8.54569e+00 -1.41464e-02 -5.20025e-02 +286 8.57571e+00 -1.26165e-02 -4.98117e-02 +287 8.60573e+00 -1.11623e-02 -4.69563e-02 +288 8.63575e+00 -9.80364e-03 -4.34980e-02 +289 8.66577e+00 -8.54900e-03 -4.01388e-02 +290 8.69579e+00 -7.39073e-03 -3.70767e-02 +291 8.72581e+00 -6.31993e-03 -3.43119e-02 +292 8.75583e+00 -5.32767e-03 -3.18442e-02 +293 8.78585e+00 -4.40503e-03 -2.96736e-02 +294 8.81587e+00 -3.54310e-03 -2.77981e-02 +295 8.84589e+00 -2.73537e-03 -2.60045e-02 +296 8.87591e+00 -1.98236e-03 -2.41530e-02 +297 8.90593e+00 -1.28581e-03 -2.22435e-02 +298 8.93595e+00 -6.47440e-04 -2.02762e-02 +299 8.96597e+00 -6.90006e-05 -1.82510e-02 +300 8.99599e+00 4.47772e-04 -1.61678e-02 +301 9.02601e+00 9.01672e-04 -1.40883e-02 +302 9.05603e+00 1.29469e-03 -1.21134e-02 +303 9.08605e+00 1.63002e-03 -1.02444e-02 +304 9.11607e+00 1.91083e-03 -8.48151e-03 +305 9.14609e+00 2.14031e-03 -6.82462e-03 +306 9.17611e+00 2.32164e-03 -5.27374e-03 +307 9.20613e+00 2.45778e-03 -3.79164e-03 +308 9.23615e+00 2.54847e-03 -2.23608e-03 +309 9.26617e+00 2.59116e-03 -5.93158e-04 +310 9.29619e+00 2.58321e-03 1.13714e-03 +311 9.32621e+00 2.52201e-03 2.95480e-03 +312 9.35623e+00 2.40493e-03 4.85983e-03 +313 9.38625e+00 2.22951e-03 6.81084e-03 +314 9.41627e+00 2.00031e-03 8.37517e-03 +315 9.44629e+00 1.73168e-03 9.43770e-03 +316 9.47631e+00 1.43869e-03 9.99843e-03 +317 9.50633e+00 1.13640e-03 1.00573e-02 +318 9.53635e+00 8.39868e-04 9.61445e-03 +319 9.56637e+00 5.64157e-04 8.67672e-03 +320 9.59639e+00 3.18325e-04 7.75710e-03 +321 9.62641e+00 9.50596e-05 7.17332e-03 +322 9.65643e+00 -1.15722e-04 6.92537e-03 +323 9.68645e+00 -3.24101e-04 7.01327e-03 +324 9.71647e+00 -5.40160e-04 7.43701e-03 +325 9.74649e+00 -7.73980e-04 8.19658e-03 +326 9.77651e+00 -1.03304e-03 8.99735e-03 +327 9.80653e+00 -1.30999e-03 9.38361e-03 +328 9.83655e+00 -1.59223e-03 9.35021e-03 +329 9.86657e+00 -1.86718e-03 8.89715e-03 +330 9.89659e+00 -2.12222e-03 8.02442e-03 +331 9.92661e+00 -2.34476e-03 6.73203e-03 +332 9.95663e+00 -2.52320e-03 5.17469e-03 +333 9.98665e+00 -2.65869e-03 3.90930e-03 +334 1.00167e+01 -2.76134e-03 2.98596e-03 +335 1.00467e+01 -2.84139e-03 2.40466e-03 +336 1.00767e+01 -2.90913e-03 2.16541e-03 +337 1.01067e+01 -2.97483e-03 2.26820e-03 +338 1.01368e+01 -3.04855e-03 2.66546e-03 +339 1.01668e+01 -3.13277e-03 2.89884e-03 +340 1.01968e+01 -3.21981e-03 2.85342e-03 +341 1.02268e+01 -3.30130e-03 2.52919e-03 +342 1.02568e+01 -3.36887e-03 1.92616e-03 +343 1.02869e+01 -3.41416e-03 1.04432e-03 +344 1.03169e+01 -3.42879e-03 -1.09405e-04 +345 1.03469e+01 -3.40928e-03 -1.12840e-03 +346 1.03769e+01 -3.36477e-03 -1.77503e-03 +347 1.04069e+01 -3.30644e-03 -2.04930e-03 +348 1.04370e+01 -3.24546e-03 -1.95122e-03 +349 1.04670e+01 -3.19301e-03 -1.48077e-03 +350 1.04970e+01 -3.16028e-03 -6.37969e-04 +351 1.05270e+01 -3.15596e-03 3.01993e-04 +352 1.05570e+01 -3.17534e-03 9.38012e-04 +353 1.05871e+01 -3.20920e-03 1.26668e-03 +354 1.06171e+01 -3.24831e-03 1.28800e-03 +355 1.06471e+01 -3.28345e-03 1.00196e-03 +356 1.06771e+01 -3.30540e-03 4.08580e-04 +357 1.07071e+01 -3.30566e-03 -3.78073e-04 +358 1.07372e+01 -3.28485e-03 -9.70614e-04 +359 1.07672e+01 -3.24964e-03 -1.33712e-03 +360 1.07972e+01 -3.20683e-03 -1.47760e-03 +361 1.08272e+01 -3.16319e-03 -1.39204e-03 +362 1.08572e+01 -3.12551e-03 -1.08046e-03 +363 1.08873e+01 -3.10045e-03 -5.74729e-04 +364 1.09173e+01 -3.08983e-03 -1.58731e-04 +365 1.09473e+01 -3.08935e-03 1.00508e-04 +366 1.09773e+01 -3.09430e-03 2.02989e-04 +367 1.10073e+01 -3.09997e-03 1.48712e-04 +368 1.10374e+01 -3.10166e-03 -6.23237e-05 +369 1.10674e+01 -3.09466e-03 -4.27258e-04 +370 1.10974e+01 -3.07597e-03 -8.08158e-04 +371 1.11274e+01 -3.04674e-03 -1.12894e-03 +372 1.11574e+01 -3.00879e-03 -1.38962e-03 +373 1.11875e+01 -2.96391e-03 -1.59017e-03 +374 1.12175e+01 -2.91392e-03 -1.73062e-03 +375 1.12475e+01 -2.86061e-03 -1.81095e-03 +376 1.12775e+01 -2.80553e-03 -1.85938e-03 +377 1.13075e+01 -2.74890e-03 -1.91463e-03 +378 1.13376e+01 -2.69051e-03 -1.97693e-03 +379 1.13676e+01 -2.63013e-03 -2.04629e-03 +380 1.13976e+01 -2.56758e-03 -2.12270e-03 +381 1.14276e+01 -2.50262e-03 -2.20617e-03 +382 1.14576e+01 -2.43503e-03 -2.29944e-03 +383 1.14877e+01 -2.36437e-03 -2.41127e-03 +384 1.15177e+01 -2.29006e-03 -2.54235e-03 +385 1.15477e+01 -2.21153e-03 -2.69266e-03 +386 1.15777e+01 -2.12820e-03 -2.86220e-03 +387 1.16077e+01 -2.03949e-03 -3.05099e-03 +388 1.16378e+01 -1.94486e-03 -3.25094e-03 +389 1.16678e+01 -1.84492e-03 -3.39558e-03 +390 1.16978e+01 -1.74169e-03 -3.47012e-03 +391 1.17278e+01 -1.63728e-03 -3.47457e-03 +392 1.17578e+01 -1.53378e-03 -3.40893e-03 +393 1.17879e+01 -1.43331e-03 -3.27320e-03 +394 1.18179e+01 -1.33796e-03 -3.06968e-03 +395 1.18479e+01 -1.24867e-03 -2.89115e-03 +396 1.18779e+01 -1.16364e-03 -2.78593e-03 +397 1.19079e+01 -1.08067e-03 -2.75402e-03 +398 1.19380e+01 -9.97552e-04 -2.79543e-03 +399 1.19680e+01 -9.12094e-04 -2.91016e-03 +400 1.19980e+01 -8.22092e-04 -3.09820e-03 +401 1.20280e+01 -7.25645e-04 -3.32741e-03 +402 1.20580e+01 -6.22319e-04 -3.55632e-03 +403 1.20881e+01 -5.12128e-04 -3.78474e-03 +404 1.21181e+01 -3.95087e-04 -4.01269e-03 +405 1.21481e+01 -2.71211e-04 -4.24016e-03 +406 1.21781e+01 -1.40513e-04 -4.46715e-03 +407 1.22081e+01 -3.33537e-06 -4.64603e-03 +408 1.22382e+01 1.36445e-04 -4.63274e-03 +409 1.22682e+01 2.72793e-04 -4.41741e-03 +410 1.22982e+01 3.99645e-04 -4.00005e-03 +411 1.23282e+01 5.10935e-04 -3.38066e-03 +412 1.23582e+01 6.00598e-04 -2.55924e-03 +413 1.23883e+01 6.62774e-04 -1.58184e-03 +414 1.24183e+01 6.97865e-04 -8.01087e-04 +415 1.24483e+01 7.13576e-04 -2.90631e-04 +416 1.24783e+01 7.18019e-04 -5.04698e-05 +417 1.25083e+01 7.19311e-04 -8.06022e-05 +418 1.25384e+01 7.25563e-04 -3.81028e-04 +419 1.25684e+01 7.44874e-04 -9.42536e-04 +420 1.25984e+01 7.81298e-04 -1.44902e-03 +421 1.26284e+01 8.29767e-04 -1.74498e-03 +422 1.26584e+01 8.83961e-04 -1.83043e-03 +423 1.26885e+01 9.37559e-04 -1.70535e-03 +424 1.27185e+01 9.84244e-04 -1.36976e-03 +425 1.27485e+01 1.01769e-03 -8.23649e-04 +426 1.27785e+01 1.03293e-03 -2.08014e-04 +427 1.28085e+01 1.03120e-03 3.06031e-04 +428 1.28386e+01 1.01558e-03 7.18094e-04 +429 1.28686e+01 9.89109e-04 1.02818e-03 +430 1.28986e+01 9.54864e-04 1.23627e-03 +431 1.29286e+01 9.15903e-04 1.34239e-03 +432 1.29586e+01 8.75242e-04 1.35306e-03 +433 1.29887e+01 8.35426e-04 1.28692e-03 +434 1.30187e+01 7.98731e-04 1.14515e-03 +435 1.30487e+01 7.67428e-04 9.27723e-04 +436 1.30787e+01 7.43788e-04 6.34655e-04 +437 1.31087e+01 7.30081e-04 2.65942e-04 +438 1.31388e+01 7.28458e-04 -1.52323e-04 +439 1.31688e+01 7.37694e-04 -4.34209e-04 +440 1.31988e+01 7.52798e-04 -5.43256e-04 +441 1.32288e+01 7.68582e-04 -4.79464e-04 +442 1.32588e+01 7.79856e-04 -2.42834e-04 +443 1.32889e+01 7.81432e-04 1.66636e-04 +444 1.33189e+01 7.68136e-04 7.42231e-04 +445 1.33489e+01 7.37388e-04 1.28546e-03 +446 1.33789e+01 6.92203e-04 1.70409e-03 +447 1.34089e+01 6.36322e-04 1.99810e-03 +448 1.34390e+01 5.73484e-04 2.16751e-03 +449 1.34690e+01 5.07431e-04 2.21231e-03 +450 1.34990e+01 4.41904e-04 2.13250e-03 +451 1.35290e+01 3.79886e-04 2.00628e-03 +452 1.35590e+01 3.21019e-04 1.92274e-03 +453 1.35891e+01 2.64017e-04 1.88196e-03 +454 1.36191e+01 2.07597e-04 1.88396e-03 +455 1.36491e+01 1.50476e-04 1.92873e-03 +456 1.36791e+01 9.13683e-05 2.01627e-03 +457 1.37091e+01 2.90559e-05 2.13758e-03 +458 1.37392e+01 -3.70569e-05 2.26836e-03 +459 1.37692e+01 -1.07218e-04 2.40726e-03 +460 1.37992e+01 -1.81670e-04 2.55428e-03 +461 1.38292e+01 -2.60658e-04 2.70943e-03 +462 1.38592e+01 -3.44426e-04 2.87270e-03 +463 1.38893e+01 -4.33097e-04 3.01891e-03 +464 1.39193e+01 -5.23690e-04 2.98077e-03 +465 1.39493e+01 -6.09910e-04 2.72751e-03 +466 1.39793e+01 -6.85298e-04 2.25913e-03 +467 1.40093e+01 -7.43395e-04 1.57563e-03 +468 1.40394e+01 -7.77746e-04 6.77007e-04 +469 1.40694e+01 -7.81926e-04 -4.21254e-04 +470 1.40994e+01 -7.54850e-04 -1.32019e-03 +471 1.41294e+01 -7.06409e-04 -1.84461e-03 +472 1.41594e+01 -6.47847e-04 -1.99453e-03 +473 1.41895e+01 -5.90405e-04 -1.76993e-03 +474 1.42195e+01 -5.45328e-04 -1.17081e-03 +475 1.42495e+01 -5.23857e-04 -1.97186e-04 +476 1.42795e+01 -5.33670e-04 7.88500e-04 +477 1.43095e+01 -5.67444e-04 1.39908e-03 +478 1.43396e+01 -6.13917e-04 1.63446e-03 +479 1.43696e+01 -6.61823e-04 1.49463e-03 +480 1.43996e+01 -6.99900e-04 9.79593e-04 +481 1.44296e+01 -7.16883e-04 8.93484e-05 +482 1.44596e+01 -7.02817e-04 -9.98994e-04 +483 1.44897e+01 -6.59607e-04 -1.83371e-03 +484 1.45197e+01 -5.95483e-04 -2.39236e-03 +485 1.45497e+01 -5.18732e-04 -2.67493e-03 +486 1.45797e+01 -4.37642e-04 -2.68144e-03 +487 1.46097e+01 -3.60501e-04 -2.41188e-03 +488 1.46398e+01 -2.95370e-04 -1.91209e-03 +489 1.46698e+01 -2.44915e-04 -1.46649e-03 +490 1.46998e+01 -2.06289e-04 -1.12409e-03 +491 1.47298e+01 -1.76392e-04 -8.84885e-04 +492 1.47598e+01 -1.52128e-04 -7.48875e-04 +493 1.47899e+01 -1.30397e-04 -7.16060e-04 +494 1.48199e+01 -1.08115e-04 -7.81211e-04 +495 1.48499e+01 -8.38208e-05 -8.25705e-04 +496 1.48799e+01 -5.92393e-05 -8.00320e-04 +497 1.49099e+01 -3.64687e-05 -7.05058e-04 +498 1.49400e+01 -1.76068e-05 -5.39917e-04 +499 1.49700e+01 -4.75133e-06 -3.04897e-04 +500 1.50000e+01 0.00000e+00 0.00000e+00 + + + +NonBondNull +N 500 R 0.0000000001 10.0 + +1 0.0000e+00 0.0000e+00 0.0000e+00 +2 2.0040e-02 0.0000e+00 0.0000e+00 +3 4.0080e-02 0.0000e+00 0.0000e+00 +4 6.0120e-02 0.0000e+00 0.0000e+00 +5 8.0160e-02 0.0000e+00 0.0000e+00 +6 1.0020e-01 0.0000e+00 0.0000e+00 +7 1.2024e-01 0.0000e+00 0.0000e+00 +8 1.4028e-01 0.0000e+00 0.0000e+00 +9 1.6032e-01 0.0000e+00 0.0000e+00 +10 1.8036e-01 0.0000e+00 0.0000e+00 +11 2.0040e-01 0.0000e+00 0.0000e+00 +12 2.2044e-01 0.0000e+00 0.0000e+00 +13 2.4048e-01 0.0000e+00 0.0000e+00 +14 2.6052e-01 0.0000e+00 0.0000e+00 +15 2.8056e-01 0.0000e+00 0.0000e+00 +16 3.0060e-01 0.0000e+00 0.0000e+00 +17 3.2064e-01 0.0000e+00 0.0000e+00 +18 3.4068e-01 0.0000e+00 0.0000e+00 +19 3.6072e-01 0.0000e+00 0.0000e+00 +20 3.8076e-01 0.0000e+00 0.0000e+00 +21 4.0080e-01 0.0000e+00 0.0000e+00 +22 4.2084e-01 0.0000e+00 0.0000e+00 +23 4.4088e-01 0.0000e+00 0.0000e+00 +24 4.6092e-01 0.0000e+00 0.0000e+00 +25 4.8096e-01 0.0000e+00 0.0000e+00 +26 5.0100e-01 0.0000e+00 0.0000e+00 +27 5.2104e-01 0.0000e+00 0.0000e+00 +28 5.4108e-01 0.0000e+00 0.0000e+00 +29 5.6112e-01 0.0000e+00 0.0000e+00 +30 5.8116e-01 0.0000e+00 0.0000e+00 +31 6.0120e-01 0.0000e+00 0.0000e+00 +32 6.2124e-01 0.0000e+00 0.0000e+00 +33 6.4128e-01 0.0000e+00 0.0000e+00 +34 6.6132e-01 0.0000e+00 0.0000e+00 +35 6.8136e-01 0.0000e+00 0.0000e+00 +36 7.0140e-01 0.0000e+00 0.0000e+00 +37 7.2144e-01 0.0000e+00 0.0000e+00 +38 7.4148e-01 0.0000e+00 0.0000e+00 +39 7.6152e-01 0.0000e+00 0.0000e+00 +40 7.8156e-01 0.0000e+00 0.0000e+00 +41 8.0160e-01 0.0000e+00 0.0000e+00 +42 8.2164e-01 0.0000e+00 0.0000e+00 +43 8.4168e-01 0.0000e+00 0.0000e+00 +44 8.6172e-01 0.0000e+00 0.0000e+00 +45 8.8176e-01 0.0000e+00 0.0000e+00 +46 9.0180e-01 0.0000e+00 0.0000e+00 +47 9.2184e-01 0.0000e+00 0.0000e+00 +48 9.4188e-01 0.0000e+00 0.0000e+00 +49 9.6192e-01 0.0000e+00 0.0000e+00 +50 9.8196e-01 0.0000e+00 0.0000e+00 +51 1.0020e+00 0.0000e+00 0.0000e+00 +52 1.0220e+00 0.0000e+00 0.0000e+00 +53 1.0421e+00 0.0000e+00 0.0000e+00 +54 1.0621e+00 0.0000e+00 0.0000e+00 +55 1.0822e+00 0.0000e+00 0.0000e+00 +56 1.1022e+00 0.0000e+00 0.0000e+00 +57 1.1222e+00 0.0000e+00 0.0000e+00 +58 1.1423e+00 0.0000e+00 0.0000e+00 +59 1.1623e+00 0.0000e+00 0.0000e+00 +60 1.1824e+00 0.0000e+00 0.0000e+00 +61 1.2024e+00 0.0000e+00 0.0000e+00 +62 1.2224e+00 0.0000e+00 0.0000e+00 +63 1.2425e+00 0.0000e+00 0.0000e+00 +64 1.2625e+00 0.0000e+00 0.0000e+00 +65 1.2826e+00 0.0000e+00 0.0000e+00 +66 1.3026e+00 0.0000e+00 0.0000e+00 +67 1.3226e+00 0.0000e+00 0.0000e+00 +68 1.3427e+00 0.0000e+00 0.0000e+00 +69 1.3627e+00 0.0000e+00 0.0000e+00 +70 1.3828e+00 0.0000e+00 0.0000e+00 +71 1.4028e+00 0.0000e+00 0.0000e+00 +72 1.4228e+00 0.0000e+00 0.0000e+00 +73 1.4429e+00 0.0000e+00 0.0000e+00 +74 1.4629e+00 0.0000e+00 0.0000e+00 +75 1.4830e+00 0.0000e+00 0.0000e+00 +76 1.5030e+00 0.0000e+00 0.0000e+00 +77 1.5230e+00 0.0000e+00 0.0000e+00 +78 1.5431e+00 0.0000e+00 0.0000e+00 +79 1.5631e+00 0.0000e+00 0.0000e+00 +80 1.5832e+00 0.0000e+00 0.0000e+00 +81 1.6032e+00 0.0000e+00 0.0000e+00 +82 1.6232e+00 0.0000e+00 0.0000e+00 +83 1.6433e+00 0.0000e+00 0.0000e+00 +84 1.6633e+00 0.0000e+00 0.0000e+00 +85 1.6834e+00 0.0000e+00 0.0000e+00 +86 1.7034e+00 0.0000e+00 0.0000e+00 +87 1.7234e+00 0.0000e+00 0.0000e+00 +88 1.7435e+00 0.0000e+00 0.0000e+00 +89 1.7635e+00 0.0000e+00 0.0000e+00 +90 1.7836e+00 0.0000e+00 0.0000e+00 +91 1.8036e+00 0.0000e+00 0.0000e+00 +92 1.8236e+00 0.0000e+00 0.0000e+00 +93 1.8437e+00 0.0000e+00 0.0000e+00 +94 1.8637e+00 0.0000e+00 0.0000e+00 +95 1.8838e+00 0.0000e+00 0.0000e+00 +96 1.9038e+00 0.0000e+00 0.0000e+00 +97 1.9238e+00 0.0000e+00 0.0000e+00 +98 1.9439e+00 0.0000e+00 0.0000e+00 +99 1.9639e+00 0.0000e+00 0.0000e+00 +100 1.9840e+00 0.0000e+00 0.0000e+00 +101 2.0040e+00 0.0000e+00 0.0000e+00 +102 2.0240e+00 0.0000e+00 0.0000e+00 +103 2.0441e+00 0.0000e+00 0.0000e+00 +104 2.0641e+00 0.0000e+00 0.0000e+00 +105 2.0842e+00 0.0000e+00 0.0000e+00 +106 2.1042e+00 0.0000e+00 0.0000e+00 +107 2.1242e+00 0.0000e+00 0.0000e+00 +108 2.1443e+00 0.0000e+00 0.0000e+00 +109 2.1643e+00 0.0000e+00 0.0000e+00 +110 2.1844e+00 0.0000e+00 0.0000e+00 +111 2.2044e+00 0.0000e+00 0.0000e+00 +112 2.2244e+00 0.0000e+00 0.0000e+00 +113 2.2445e+00 0.0000e+00 0.0000e+00 +114 2.2645e+00 0.0000e+00 0.0000e+00 +115 2.2846e+00 0.0000e+00 0.0000e+00 +116 2.3046e+00 0.0000e+00 0.0000e+00 +117 2.3246e+00 0.0000e+00 0.0000e+00 +118 2.3447e+00 0.0000e+00 0.0000e+00 +119 2.3647e+00 0.0000e+00 0.0000e+00 +120 2.3848e+00 0.0000e+00 0.0000e+00 +121 2.4048e+00 0.0000e+00 0.0000e+00 +122 2.4248e+00 0.0000e+00 0.0000e+00 +123 2.4449e+00 0.0000e+00 0.0000e+00 +124 2.4649e+00 0.0000e+00 0.0000e+00 +125 2.4850e+00 0.0000e+00 0.0000e+00 +126 2.5050e+00 0.0000e+00 0.0000e+00 +127 2.5251e+00 0.0000e+00 0.0000e+00 +128 2.5451e+00 0.0000e+00 0.0000e+00 +129 2.5651e+00 0.0000e+00 0.0000e+00 +130 2.5852e+00 0.0000e+00 0.0000e+00 +131 2.6052e+00 0.0000e+00 0.0000e+00 +132 2.6253e+00 0.0000e+00 0.0000e+00 +133 2.6453e+00 0.0000e+00 0.0000e+00 +134 2.6653e+00 0.0000e+00 0.0000e+00 +135 2.6854e+00 0.0000e+00 0.0000e+00 +136 2.7054e+00 0.0000e+00 0.0000e+00 +137 2.7255e+00 0.0000e+00 0.0000e+00 +138 2.7455e+00 0.0000e+00 0.0000e+00 +139 2.7655e+00 0.0000e+00 0.0000e+00 +140 2.7856e+00 0.0000e+00 0.0000e+00 +141 2.8056e+00 0.0000e+00 0.0000e+00 +142 2.8257e+00 0.0000e+00 0.0000e+00 +143 2.8457e+00 0.0000e+00 0.0000e+00 +144 2.8657e+00 0.0000e+00 0.0000e+00 +145 2.8858e+00 0.0000e+00 0.0000e+00 +146 2.9058e+00 0.0000e+00 0.0000e+00 +147 2.9259e+00 0.0000e+00 0.0000e+00 +148 2.9459e+00 0.0000e+00 0.0000e+00 +149 2.9659e+00 0.0000e+00 0.0000e+00 +150 2.9860e+00 0.0000e+00 0.0000e+00 +151 3.0060e+00 0.0000e+00 0.0000e+00 +152 3.0261e+00 0.0000e+00 0.0000e+00 +153 3.0461e+00 0.0000e+00 0.0000e+00 +154 3.0661e+00 0.0000e+00 0.0000e+00 +155 3.0862e+00 0.0000e+00 0.0000e+00 +156 3.1062e+00 0.0000e+00 0.0000e+00 +157 3.1263e+00 0.0000e+00 0.0000e+00 +158 3.1463e+00 0.0000e+00 0.0000e+00 +159 3.1663e+00 0.0000e+00 0.0000e+00 +160 3.1864e+00 0.0000e+00 0.0000e+00 +161 3.2064e+00 0.0000e+00 0.0000e+00 +162 3.2265e+00 0.0000e+00 0.0000e+00 +163 3.2465e+00 0.0000e+00 0.0000e+00 +164 3.2665e+00 0.0000e+00 0.0000e+00 +165 3.2866e+00 0.0000e+00 0.0000e+00 +166 3.3066e+00 0.0000e+00 0.0000e+00 +167 3.3267e+00 0.0000e+00 0.0000e+00 +168 3.3467e+00 0.0000e+00 0.0000e+00 +169 3.3667e+00 0.0000e+00 0.0000e+00 +170 3.3868e+00 0.0000e+00 0.0000e+00 +171 3.4068e+00 0.0000e+00 0.0000e+00 +172 3.4269e+00 0.0000e+00 0.0000e+00 +173 3.4469e+00 0.0000e+00 0.0000e+00 +174 3.4669e+00 0.0000e+00 0.0000e+00 +175 3.4870e+00 0.0000e+00 0.0000e+00 +176 3.5070e+00 0.0000e+00 0.0000e+00 +177 3.5271e+00 0.0000e+00 0.0000e+00 +178 3.5471e+00 0.0000e+00 0.0000e+00 +179 3.5671e+00 0.0000e+00 0.0000e+00 +180 3.5872e+00 0.0000e+00 0.0000e+00 +181 3.6072e+00 0.0000e+00 0.0000e+00 +182 3.6273e+00 0.0000e+00 0.0000e+00 +183 3.6473e+00 0.0000e+00 0.0000e+00 +184 3.6673e+00 0.0000e+00 0.0000e+00 +185 3.6874e+00 0.0000e+00 0.0000e+00 +186 3.7074e+00 0.0000e+00 0.0000e+00 +187 3.7275e+00 0.0000e+00 0.0000e+00 +188 3.7475e+00 0.0000e+00 0.0000e+00 +189 3.7675e+00 0.0000e+00 0.0000e+00 +190 3.7876e+00 0.0000e+00 0.0000e+00 +191 3.8076e+00 0.0000e+00 0.0000e+00 +192 3.8277e+00 0.0000e+00 0.0000e+00 +193 3.8477e+00 0.0000e+00 0.0000e+00 +194 3.8677e+00 0.0000e+00 0.0000e+00 +195 3.8878e+00 0.0000e+00 0.0000e+00 +196 3.9078e+00 0.0000e+00 0.0000e+00 +197 3.9279e+00 0.0000e+00 0.0000e+00 +198 3.9479e+00 0.0000e+00 0.0000e+00 +199 3.9679e+00 0.0000e+00 0.0000e+00 +200 3.9880e+00 0.0000e+00 0.0000e+00 +201 4.0080e+00 0.0000e+00 0.0000e+00 +202 4.0281e+00 0.0000e+00 0.0000e+00 +203 4.0481e+00 0.0000e+00 0.0000e+00 +204 4.0681e+00 0.0000e+00 0.0000e+00 +205 4.0882e+00 0.0000e+00 0.0000e+00 +206 4.1082e+00 0.0000e+00 0.0000e+00 +207 4.1283e+00 0.0000e+00 0.0000e+00 +208 4.1483e+00 0.0000e+00 0.0000e+00 +209 4.1683e+00 0.0000e+00 0.0000e+00 +210 4.1884e+00 0.0000e+00 0.0000e+00 +211 4.2084e+00 0.0000e+00 0.0000e+00 +212 4.2285e+00 0.0000e+00 0.0000e+00 +213 4.2485e+00 0.0000e+00 0.0000e+00 +214 4.2685e+00 0.0000e+00 0.0000e+00 +215 4.2886e+00 0.0000e+00 0.0000e+00 +216 4.3086e+00 0.0000e+00 0.0000e+00 +217 4.3287e+00 0.0000e+00 0.0000e+00 +218 4.3487e+00 0.0000e+00 0.0000e+00 +219 4.3687e+00 0.0000e+00 0.0000e+00 +220 4.3888e+00 0.0000e+00 0.0000e+00 +221 4.4088e+00 0.0000e+00 0.0000e+00 +222 4.4289e+00 0.0000e+00 0.0000e+00 +223 4.4489e+00 0.0000e+00 0.0000e+00 +224 4.4689e+00 0.0000e+00 0.0000e+00 +225 4.4890e+00 0.0000e+00 0.0000e+00 +226 4.5090e+00 0.0000e+00 0.0000e+00 +227 4.5291e+00 0.0000e+00 0.0000e+00 +228 4.5491e+00 0.0000e+00 0.0000e+00 +229 4.5691e+00 0.0000e+00 0.0000e+00 +230 4.5892e+00 0.0000e+00 0.0000e+00 +231 4.6092e+00 0.0000e+00 0.0000e+00 +232 4.6293e+00 0.0000e+00 0.0000e+00 +233 4.6493e+00 0.0000e+00 0.0000e+00 +234 4.6693e+00 0.0000e+00 0.0000e+00 +235 4.6894e+00 0.0000e+00 0.0000e+00 +236 4.7094e+00 0.0000e+00 0.0000e+00 +237 4.7295e+00 0.0000e+00 0.0000e+00 +238 4.7495e+00 0.0000e+00 0.0000e+00 +239 4.7695e+00 0.0000e+00 0.0000e+00 +240 4.7896e+00 0.0000e+00 0.0000e+00 +241 4.8096e+00 0.0000e+00 0.0000e+00 +242 4.8297e+00 0.0000e+00 0.0000e+00 +243 4.8497e+00 0.0000e+00 0.0000e+00 +244 4.8697e+00 0.0000e+00 0.0000e+00 +245 4.8898e+00 0.0000e+00 0.0000e+00 +246 4.9098e+00 0.0000e+00 0.0000e+00 +247 4.9299e+00 0.0000e+00 0.0000e+00 +248 4.9499e+00 0.0000e+00 0.0000e+00 +249 4.9699e+00 0.0000e+00 0.0000e+00 +250 4.9900e+00 0.0000e+00 0.0000e+00 +251 5.0100e+00 0.0000e+00 0.0000e+00 +252 5.0301e+00 0.0000e+00 0.0000e+00 +253 5.0501e+00 0.0000e+00 0.0000e+00 +254 5.0701e+00 0.0000e+00 0.0000e+00 +255 5.0902e+00 0.0000e+00 0.0000e+00 +256 5.1102e+00 0.0000e+00 0.0000e+00 +257 5.1303e+00 0.0000e+00 0.0000e+00 +258 5.1503e+00 0.0000e+00 0.0000e+00 +259 5.1703e+00 0.0000e+00 0.0000e+00 +260 5.1904e+00 0.0000e+00 0.0000e+00 +261 5.2104e+00 0.0000e+00 0.0000e+00 +262 5.2305e+00 0.0000e+00 0.0000e+00 +263 5.2505e+00 0.0000e+00 0.0000e+00 +264 5.2705e+00 0.0000e+00 0.0000e+00 +265 5.2906e+00 0.0000e+00 0.0000e+00 +266 5.3106e+00 0.0000e+00 0.0000e+00 +267 5.3307e+00 0.0000e+00 0.0000e+00 +268 5.3507e+00 0.0000e+00 0.0000e+00 +269 5.3707e+00 0.0000e+00 0.0000e+00 +270 5.3908e+00 0.0000e+00 0.0000e+00 +271 5.4108e+00 0.0000e+00 0.0000e+00 +272 5.4309e+00 0.0000e+00 0.0000e+00 +273 5.4509e+00 0.0000e+00 0.0000e+00 +274 5.4709e+00 0.0000e+00 0.0000e+00 +275 5.4910e+00 0.0000e+00 0.0000e+00 +276 5.5110e+00 0.0000e+00 0.0000e+00 +277 5.5311e+00 0.0000e+00 0.0000e+00 +278 5.5511e+00 0.0000e+00 0.0000e+00 +279 5.5711e+00 0.0000e+00 0.0000e+00 +280 5.5912e+00 0.0000e+00 0.0000e+00 +281 5.6112e+00 0.0000e+00 0.0000e+00 +282 5.6313e+00 0.0000e+00 0.0000e+00 +283 5.6513e+00 0.0000e+00 0.0000e+00 +284 5.6713e+00 0.0000e+00 0.0000e+00 +285 5.6914e+00 0.0000e+00 0.0000e+00 +286 5.7114e+00 0.0000e+00 0.0000e+00 +287 5.7315e+00 0.0000e+00 0.0000e+00 +288 5.7515e+00 0.0000e+00 0.0000e+00 +289 5.7715e+00 0.0000e+00 0.0000e+00 +290 5.7916e+00 0.0000e+00 0.0000e+00 +291 5.8116e+00 0.0000e+00 0.0000e+00 +292 5.8317e+00 0.0000e+00 0.0000e+00 +293 5.8517e+00 0.0000e+00 0.0000e+00 +294 5.8717e+00 0.0000e+00 0.0000e+00 +295 5.8918e+00 0.0000e+00 0.0000e+00 +296 5.9118e+00 0.0000e+00 0.0000e+00 +297 5.9319e+00 0.0000e+00 0.0000e+00 +298 5.9519e+00 0.0000e+00 0.0000e+00 +299 5.9719e+00 0.0000e+00 0.0000e+00 +300 5.9920e+00 0.0000e+00 0.0000e+00 +301 6.0120e+00 0.0000e+00 0.0000e+00 +302 6.0321e+00 0.0000e+00 0.0000e+00 +303 6.0521e+00 0.0000e+00 0.0000e+00 +304 6.0721e+00 0.0000e+00 0.0000e+00 +305 6.0922e+00 0.0000e+00 0.0000e+00 +306 6.1122e+00 0.0000e+00 0.0000e+00 +307 6.1323e+00 0.0000e+00 0.0000e+00 +308 6.1523e+00 0.0000e+00 0.0000e+00 +309 6.1723e+00 0.0000e+00 0.0000e+00 +310 6.1924e+00 0.0000e+00 0.0000e+00 +311 6.2124e+00 0.0000e+00 0.0000e+00 +312 6.2325e+00 0.0000e+00 0.0000e+00 +313 6.2525e+00 0.0000e+00 0.0000e+00 +314 6.2725e+00 0.0000e+00 0.0000e+00 +315 6.2926e+00 0.0000e+00 0.0000e+00 +316 6.3126e+00 0.0000e+00 0.0000e+00 +317 6.3327e+00 0.0000e+00 0.0000e+00 +318 6.3527e+00 0.0000e+00 0.0000e+00 +319 6.3727e+00 0.0000e+00 0.0000e+00 +320 6.3928e+00 0.0000e+00 0.0000e+00 +321 6.4128e+00 0.0000e+00 0.0000e+00 +322 6.4329e+00 0.0000e+00 0.0000e+00 +323 6.4529e+00 0.0000e+00 0.0000e+00 +324 6.4729e+00 0.0000e+00 0.0000e+00 +325 6.4930e+00 0.0000e+00 0.0000e+00 +326 6.5130e+00 0.0000e+00 0.0000e+00 +327 6.5331e+00 0.0000e+00 0.0000e+00 +328 6.5531e+00 0.0000e+00 0.0000e+00 +329 6.5731e+00 0.0000e+00 0.0000e+00 +330 6.5932e+00 0.0000e+00 0.0000e+00 +331 6.6132e+00 0.0000e+00 0.0000e+00 +332 6.6333e+00 0.0000e+00 0.0000e+00 +333 6.6533e+00 0.0000e+00 0.0000e+00 +334 6.6733e+00 0.0000e+00 0.0000e+00 +335 6.6934e+00 0.0000e+00 0.0000e+00 +336 6.7134e+00 0.0000e+00 0.0000e+00 +337 6.7335e+00 0.0000e+00 0.0000e+00 +338 6.7535e+00 0.0000e+00 0.0000e+00 +339 6.7735e+00 0.0000e+00 0.0000e+00 +340 6.7936e+00 0.0000e+00 0.0000e+00 +341 6.8136e+00 0.0000e+00 0.0000e+00 +342 6.8337e+00 0.0000e+00 0.0000e+00 +343 6.8537e+00 0.0000e+00 0.0000e+00 +344 6.8737e+00 0.0000e+00 0.0000e+00 +345 6.8938e+00 0.0000e+00 0.0000e+00 +346 6.9138e+00 0.0000e+00 0.0000e+00 +347 6.9339e+00 0.0000e+00 0.0000e+00 +348 6.9539e+00 0.0000e+00 0.0000e+00 +349 6.9739e+00 0.0000e+00 0.0000e+00 +350 6.9940e+00 0.0000e+00 0.0000e+00 +351 7.0140e+00 0.0000e+00 0.0000e+00 +352 7.0341e+00 0.0000e+00 0.0000e+00 +353 7.0541e+00 0.0000e+00 0.0000e+00 +354 7.0741e+00 0.0000e+00 0.0000e+00 +355 7.0942e+00 0.0000e+00 0.0000e+00 +356 7.1142e+00 0.0000e+00 0.0000e+00 +357 7.1343e+00 0.0000e+00 0.0000e+00 +358 7.1543e+00 0.0000e+00 0.0000e+00 +359 7.1743e+00 0.0000e+00 0.0000e+00 +360 7.1944e+00 0.0000e+00 0.0000e+00 +361 7.2144e+00 0.0000e+00 0.0000e+00 +362 7.2345e+00 0.0000e+00 0.0000e+00 +363 7.2545e+00 0.0000e+00 0.0000e+00 +364 7.2745e+00 0.0000e+00 0.0000e+00 +365 7.2946e+00 0.0000e+00 0.0000e+00 +366 7.3146e+00 0.0000e+00 0.0000e+00 +367 7.3347e+00 0.0000e+00 0.0000e+00 +368 7.3547e+00 0.0000e+00 0.0000e+00 +369 7.3747e+00 0.0000e+00 0.0000e+00 +370 7.3948e+00 0.0000e+00 0.0000e+00 +371 7.4148e+00 0.0000e+00 0.0000e+00 +372 7.4349e+00 0.0000e+00 0.0000e+00 +373 7.4549e+00 0.0000e+00 0.0000e+00 +374 7.4749e+00 0.0000e+00 0.0000e+00 +375 7.4950e+00 0.0000e+00 0.0000e+00 +376 7.5150e+00 0.0000e+00 0.0000e+00 +377 7.5351e+00 0.0000e+00 0.0000e+00 +378 7.5551e+00 0.0000e+00 0.0000e+00 +379 7.5752e+00 0.0000e+00 0.0000e+00 +380 7.5952e+00 0.0000e+00 0.0000e+00 +381 7.6152e+00 0.0000e+00 0.0000e+00 +382 7.6353e+00 0.0000e+00 0.0000e+00 +383 7.6553e+00 0.0000e+00 0.0000e+00 +384 7.6754e+00 0.0000e+00 0.0000e+00 +385 7.6954e+00 0.0000e+00 0.0000e+00 +386 7.7154e+00 0.0000e+00 0.0000e+00 +387 7.7355e+00 0.0000e+00 0.0000e+00 +388 7.7555e+00 0.0000e+00 0.0000e+00 +389 7.7756e+00 0.0000e+00 0.0000e+00 +390 7.7956e+00 0.0000e+00 0.0000e+00 +391 7.8156e+00 0.0000e+00 0.0000e+00 +392 7.8357e+00 0.0000e+00 0.0000e+00 +393 7.8557e+00 0.0000e+00 0.0000e+00 +394 7.8758e+00 0.0000e+00 0.0000e+00 +395 7.8958e+00 0.0000e+00 0.0000e+00 +396 7.9158e+00 0.0000e+00 0.0000e+00 +397 7.9359e+00 0.0000e+00 0.0000e+00 +398 7.9559e+00 0.0000e+00 0.0000e+00 +399 7.9760e+00 0.0000e+00 0.0000e+00 +400 7.9960e+00 0.0000e+00 0.0000e+00 +401 8.0160e+00 0.0000e+00 0.0000e+00 +402 8.0361e+00 0.0000e+00 0.0000e+00 +403 8.0561e+00 0.0000e+00 0.0000e+00 +404 8.0762e+00 0.0000e+00 0.0000e+00 +405 8.0962e+00 0.0000e+00 0.0000e+00 +406 8.1162e+00 0.0000e+00 0.0000e+00 +407 8.1363e+00 0.0000e+00 0.0000e+00 +408 8.1563e+00 0.0000e+00 0.0000e+00 +409 8.1764e+00 0.0000e+00 0.0000e+00 +410 8.1964e+00 0.0000e+00 0.0000e+00 +411 8.2164e+00 0.0000e+00 0.0000e+00 +412 8.2365e+00 0.0000e+00 0.0000e+00 +413 8.2565e+00 0.0000e+00 0.0000e+00 +414 8.2766e+00 0.0000e+00 0.0000e+00 +415 8.2966e+00 0.0000e+00 0.0000e+00 +416 8.3166e+00 0.0000e+00 0.0000e+00 +417 8.3367e+00 0.0000e+00 0.0000e+00 +418 8.3567e+00 0.0000e+00 0.0000e+00 +419 8.3768e+00 0.0000e+00 0.0000e+00 +420 8.3968e+00 0.0000e+00 0.0000e+00 +421 8.4168e+00 0.0000e+00 0.0000e+00 +422 8.4369e+00 0.0000e+00 0.0000e+00 +423 8.4569e+00 0.0000e+00 0.0000e+00 +424 8.4770e+00 0.0000e+00 0.0000e+00 +425 8.4970e+00 0.0000e+00 0.0000e+00 +426 8.5170e+00 0.0000e+00 0.0000e+00 +427 8.5371e+00 0.0000e+00 0.0000e+00 +428 8.5571e+00 0.0000e+00 0.0000e+00 +429 8.5772e+00 0.0000e+00 0.0000e+00 +430 8.5972e+00 0.0000e+00 0.0000e+00 +431 8.6172e+00 0.0000e+00 0.0000e+00 +432 8.6373e+00 0.0000e+00 0.0000e+00 +433 8.6573e+00 0.0000e+00 0.0000e+00 +434 8.6774e+00 0.0000e+00 0.0000e+00 +435 8.6974e+00 0.0000e+00 0.0000e+00 +436 8.7174e+00 0.0000e+00 0.0000e+00 +437 8.7375e+00 0.0000e+00 0.0000e+00 +438 8.7575e+00 0.0000e+00 0.0000e+00 +439 8.7776e+00 0.0000e+00 0.0000e+00 +440 8.7976e+00 0.0000e+00 0.0000e+00 +441 8.8176e+00 0.0000e+00 0.0000e+00 +442 8.8377e+00 0.0000e+00 0.0000e+00 +443 8.8577e+00 0.0000e+00 0.0000e+00 +444 8.8778e+00 0.0000e+00 0.0000e+00 +445 8.8978e+00 0.0000e+00 0.0000e+00 +446 8.9178e+00 0.0000e+00 0.0000e+00 +447 8.9379e+00 0.0000e+00 0.0000e+00 +448 8.9579e+00 0.0000e+00 0.0000e+00 +449 8.9780e+00 0.0000e+00 0.0000e+00 +450 8.9980e+00 0.0000e+00 0.0000e+00 +451 9.0180e+00 0.0000e+00 0.0000e+00 +452 9.0381e+00 0.0000e+00 0.0000e+00 +453 9.0581e+00 0.0000e+00 0.0000e+00 +454 9.0782e+00 0.0000e+00 0.0000e+00 +455 9.0982e+00 0.0000e+00 0.0000e+00 +456 9.1182e+00 0.0000e+00 0.0000e+00 +457 9.1383e+00 0.0000e+00 0.0000e+00 +458 9.1583e+00 0.0000e+00 0.0000e+00 +459 9.1784e+00 0.0000e+00 0.0000e+00 +460 9.1984e+00 0.0000e+00 0.0000e+00 +461 9.2184e+00 0.0000e+00 0.0000e+00 +462 9.2385e+00 0.0000e+00 0.0000e+00 +463 9.2585e+00 0.0000e+00 0.0000e+00 +464 9.2786e+00 0.0000e+00 0.0000e+00 +465 9.2986e+00 0.0000e+00 0.0000e+00 +466 9.3186e+00 0.0000e+00 0.0000e+00 +467 9.3387e+00 0.0000e+00 0.0000e+00 +468 9.3587e+00 0.0000e+00 0.0000e+00 +469 9.3788e+00 0.0000e+00 0.0000e+00 +470 9.3988e+00 0.0000e+00 0.0000e+00 +471 9.4188e+00 0.0000e+00 0.0000e+00 +472 9.4389e+00 0.0000e+00 0.0000e+00 +473 9.4589e+00 0.0000e+00 0.0000e+00 +474 9.4790e+00 0.0000e+00 0.0000e+00 +475 9.4990e+00 0.0000e+00 0.0000e+00 +476 9.5190e+00 0.0000e+00 0.0000e+00 +477 9.5391e+00 0.0000e+00 0.0000e+00 +478 9.5591e+00 0.0000e+00 0.0000e+00 +479 9.5792e+00 0.0000e+00 0.0000e+00 +480 9.5992e+00 0.0000e+00 0.0000e+00 +481 9.6192e+00 0.0000e+00 0.0000e+00 +482 9.6393e+00 0.0000e+00 0.0000e+00 +483 9.6593e+00 0.0000e+00 0.0000e+00 +484 9.6794e+00 0.0000e+00 0.0000e+00 +485 9.6994e+00 0.0000e+00 0.0000e+00 +486 9.7194e+00 0.0000e+00 0.0000e+00 +487 9.7395e+00 0.0000e+00 0.0000e+00 +488 9.7595e+00 0.0000e+00 0.0000e+00 +489 9.7796e+00 0.0000e+00 0.0000e+00 +490 9.7996e+00 0.0000e+00 0.0000e+00 +491 9.8196e+00 0.0000e+00 0.0000e+00 +492 9.8397e+00 0.0000e+00 0.0000e+00 +493 9.8597e+00 0.0000e+00 0.0000e+00 +494 9.8798e+00 0.0000e+00 0.0000e+00 +495 9.8998e+00 0.0000e+00 0.0000e+00 +496 9.9198e+00 0.0000e+00 0.0000e+00 +497 9.9399e+00 0.0000e+00 0.0000e+00 +498 9.9599e+00 0.0000e+00 0.0000e+00 +499 9.9800e+00 0.0000e+00 0.0000e+00 +500 1.0000e+01 0.0000e+00 0.0000e+00 + + diff --git a/src/USER-MISC/README b/src/USER-MISC/README index 442feedf87..3b96f3685d 100644 --- a/src/USER-MISC/README +++ b/src/USER-MISC/README @@ -84,6 +84,7 @@ pair_style lebedeva/z, Zbigniew Koziol (National Center for Nuclear Research), s pair_style lennard/mdf, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15 pair_style list, Axel Kohlmeyer (Temple U), akohlmey at gmail.com, 1 Jun 13 pair_style lj/mdf, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15 +pair_style local/density, Tanmoy Sanyal (tanmoy dot 7989 at gmail.com) and M. Scott Shell (UCSB), and David Rosenberger (TU Darmstadt), 9 Sept 19 pair_style kolmogorov/crespi/full, Wengen Ouyang (Tel Aviv University), w.g.ouyang at gmail dot com, 30 Mar 18 pair_style kolmogorov/crespi/z, Jaap Kroes (Radboud U), jaapkroes at gmail dot com, 28 Feb 17 pair_style meam/spline, Alexander Stukowski (LLNL), alex at stukowski.com, 1 Feb 12 diff --git a/src/USER-MISC/pair_local_density.cpp b/src/USER-MISC/pair_local_density.cpp new file mode 100644 index 0000000000..883075c80e --- /dev/null +++ b/src/USER-MISC/pair_local_density.cpp @@ -0,0 +1,871 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing authors: + Tanmoy Sanyal, M.Scott Shell, UC Santa Barbara + David Rosenberger, TU Darmstadt +------------------------------------------------------------------------- */ + +#include "pair_local_density.h" +#include +#include +#include +#include +#include +#include "atom.h" +#include "force.h" +#include "comm.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "memory.h" +#include "error.h" +#include "domain.h" + +using namespace LAMMPS_NS; + +#define MAXLINE 1024 + +/* ---------------------------------------------------------------------- */ + +PairLocalDensity::PairLocalDensity(LAMMPS *lmp) : Pair(lmp) +{ + restartinfo = 0; + one_coeff = 1; + single_enable = 1; + + // stuff read from tabulated file + nLD = 0; + nrho = 0; + rho_min = NULL; + rho_max = NULL; + a = NULL; + b = NULL; + c0 = NULL; + c2 = NULL; + c4 = NULL; + c6 = NULL; + uppercut = NULL; + lowercut = NULL; + uppercutsq = NULL; + lowercutsq = NULL; + frho = NULL; + rho = NULL; + + // splined arrays + frho_spline = NULL; + + // per-atom arrays + nmax = 0; + fp = NULL; + localrho = NULL; + + // set comm size needed by this pair + comm_forward = 1; + comm_reverse = 1; +} + +/* ---------------------------------------------------------------------- + check if allocated, since class can be destructed when incomplete +------------------------------------------------------------------------- */ + +PairLocalDensity::~PairLocalDensity() +{ + + memory->destroy(localrho); + memory->destroy(fp); + + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + } + + memory->destroy(frho_spline); + + memory->destroy(rho_min); + memory->destroy(rho_max); + memory->destroy(delta_rho); + memory->destroy(c0); + memory->destroy(c2); + memory->destroy(c4); + memory->destroy(c6); + memory->destroy(uppercut); + memory->destroy(lowercut); + memory->destroy(uppercutsq); + memory->destroy(lowercutsq); + memory->destroy(frho); + memory->destroy(rho); + + memory->destroy(a); + memory->destroy(b); +} + +/* ---------------------------------------------------------------------- */ + +void PairLocalDensity::compute(int eflag, int vflag) +{ + + int i,j,ii,jj,m,k,inum,jnum,itype,jtype; + double xtmp,ytmp,ztmp,delx,dely,delz,rsq; + double rsqinv, phi, uLD, dphi, evdwl,fpair; + double p, *coeff; + int *ilist,*jlist,*numneigh,**firstneigh; + + phi = uLD = evdwl = fpair = rsqinv = 0.0; + + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = eflag_global = eflag_atom = 0; + + /* localrho = LD at each atom + fp = derivative of embedding energy at each atom for each LD potential + uLD = embedding energy of each atom due to each LD potential*/ + + // grow LD and fp arrays if necessary + // need to be atom->nmax in length + + if (atom->nmax > nmax) { + memory->destroy(localrho); + memory->destroy(fp); + nmax = atom->nmax; + memory->create(localrho, nLD, nmax, "pairLD:localrho"); + memory->create(fp, nLD, nmax, "pairLD:fp"); + } + + double **x = atom->x; + double **f = atom->f; + int *type = atom->type; + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // zero out LD and fp + + if (newton_pair) { + m = nlocal + atom->nghost; + for (k = 0; k < nLD; k++) { + for (i = 0; i < m; i++) { + localrho[k][i] = 0.0; + fp[k][i] = 0.0; + } + } + } + else { + for (k = 0; k < nLD; k++){ + for (i = 0; i < nlocal; i++) { + localrho[k][i] = 0.0; + fp[k][i] = 0.0; + } + } + } + + // loop over neighs of central atoms and types of LDs + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + 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]; + j &= NEIGHMASK; + jtype = type[j]; + + // calculate distance-squared between i,j atom-types + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + + // calculating LDs based on central and neigh filters + + for (k = 0; k < nLD; k++) { + if (rsq < lowercutsq[k]) { + phi = 1.0; + } + else if (rsq > uppercutsq[k]) { + phi = 0.0; + } + else { + phi = c0[k] + rsq * (c2[k] + rsq * (c4[k] + c6[k]*rsq)); + } + localrho[k][i] += (phi * b[k][jtype]); + + /*checking for both i,j is necessary + since a half neighbor list is processed.*/ + + if (newton_pair || jreverse_comm_pair(this); + + // + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + itype = type[i]; + uLD = 0.0; + + for (k = 0; k < nLD; k++) { + + /*skip over this loop if the LD potential + is not intendend for central atomtype */ + if (!(a[k][itype])) continue; + + // linear extrapolation at rho_min and rho_max + + if (localrho[k][i] <= rho_min[k]) { + coeff = frho_spline[k][0]; + fp[k][i] = coeff[2]; + uLD += a[k][itype] * ( coeff[6] + fp[k][i]*(localrho[k][i] - rho_min[k]) ); + } + else if (localrho[k][i] >= rho_max[k]) { + coeff = frho_spline[k][nrho-2]; + fp[k][i] = coeff[0] + coeff[1] + coeff[2]; + uLD += a[k][itype] * ( (coeff[3] + coeff[4] + coeff[5] + coeff[6]) + fp[k][i]*(localrho[k][i] - rho_max[k]) ); + } + else { + p = (localrho[k][i] - rho_min[k]) / delta_rho[k]; + m = static_cast (p); + m = MAX(0, MIN(m, nrho-2)); + p -= m; + p = MIN(p, 1.0); + coeff = frho_spline[k][m]; + fp[k][i] = (coeff[0]*p + coeff[1])*p + coeff[2]; + uLD += a[k][itype] * (((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]); + } + } + + if (eflag) { + if (eflag_global) eng_vdwl += uLD; + if (eflag_atom) eatom[i] += uLD; + } + } + + // communicate LD and fp to all procs + + comm->forward_comm_pair(this); + + // compute forces on each atom + // loop over neighbors of my atoms + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + 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]; + j &= NEIGHMASK; + jtype = type[j]; + + // calculate square of distance between i,j atoms + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + + // calculate force between two atoms + fpair = 0.0; + if (rsq < cutforcesq) { // global cutoff check + rsqinv = 1.0/rsq; + for (k = 0; k < nLD; k++) { + if (rsq >= lowercutsq[k] && rsq < uppercutsq[k]) { + dphi = rsq * (2.0*c2[k] + rsq * (4.0*c4[k] + 6.0*c6[k]*rsq)); + fpair += -(a[k][itype]*b[k][jtype]*fp[k][i] + a[k][jtype]*b[k][itype]*fp[k][j]) * dphi; + } + } + fpair *= rsqinv; + + 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; + } + + /*eng_vdwl has already been completely built, + so no need to add anything here*/ + + if (eflag) evdwl = 0.0; + + if (evflag) ev_tally(i,j,nlocal,newton_pair, + evdwl,0.0,fpair,delx,dely,delz); + } + + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairLocalDensity::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(cutsq,n+1,n+1,"pair:cutsq"); + + 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; +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairLocalDensity::settings(int narg, char **arg) +{ + if (narg > 0) error->all(FLERR,"Illegal pair_style command"); +} + +/* ---------------------------------------------------------------------- + set coeffs for all type pairs + read tabulated LD input file +------------------------------------------------------------------------- */ + +void PairLocalDensity::coeff(int narg, char **arg) +{ + int i, j; + if (!allocated) allocate(); + + if (narg != 3) error->all(FLERR,"Incorrect args for pair coefficients"); + + // insure I,J args are * * + + if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) + error->all(FLERR,"Incorrect args for pair coefficients"); + + // parse LD file + + parse_file(arg[2]); + + + // clear setflag since coeff() called once with I,J = * * + + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) + setflag[i][j] = 0; + + // set setflag for all i,j type pairs + + int count = 0; + for (i = 1; i <= atom->ntypes; i++) { + for (j = i; j <= atom->ntypes; j++) { + setflag[i][j] = 1; + count++; + } + } + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairLocalDensity::init_style() +{ + // spline rho and frho arrays + // request half neighbor list + + array2spline(); + + // half neighbor request + neighbor->request(this); +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairLocalDensity::init_one(int i, int j) +{ + // single global cutoff = max of all uppercuts read in from LD file + + cutmax = 0.0; + for (int k = 0; k < nLD; k++) + cutmax = MAX(cutmax,uppercut[k]); + + cutforcesq = cutmax*cutmax; + + return cutmax; +} + + +/*-------------------------------------------------------------------------- + pair_write functionality for this pair style that gives just a snap-shot + of the LD potential without doing an actual MD run + ---------------------------------------------------------------------------*/ + +double PairLocalDensity::single(int i, int j, int itype, int jtype, double rsq, + double factor_coul, double factor_lj, + double &fforce) +{ + int m, k, index; + double rsqinv, p, uLD; + double *coeff, **LD; + double dFdrho, phi, dphi; + + uLD = dFdrho = dphi = 0.0; + + memory->create(LD, nLD, 3, "pairLD:LD"); + for (k = 0; k < nLD; k++) { + LD[k][1] = 0.0; // itype:- 1 + LD[k][2] = 0.0; // jtype:- 2 + } + + rsqinv = 1.0/rsq; + for (k = 0; k < nLD; k++) { + if (rsq < lowercutsq[k]) { + phi = 1.0; + } + else if (rsq > uppercutsq[k]) { + phi = 0.0; + } + else { + phi = c0[k] + rsq * (c2[k] + rsq * (c4[k] + c6[k]*rsq)); + } + LD[k][1] += (phi * b[k][jtype]); + LD[k][2] += (phi * b[k][itype]); + } + + for (k = 0; k < nLD; k++) { + if (a[k][itype]) index = 1; + if (a[k][jtype]) index = 2; + + if (LD[k][index] <= rho_min[k]) { + coeff = frho_spline[k][0]; + dFdrho = coeff[2]; + uLD += a[k][itype] * ( coeff[6] + dFdrho*(LD[k][index] - rho_min[k]) ); + } + else if (LD[k][index] >= rho_max[k]) { + coeff = frho_spline[k][nrho-1]; + dFdrho = coeff[0] + coeff[1] + coeff[2]; + uLD += a[k][itype] * ( (coeff[3] + coeff[4] + coeff[5] + coeff[6]) + dFdrho*(LD[k][index] - rho_max[k]) ); + } + else { + p = (LD[k][index] - rho_min[k]) / delta_rho[k]; + m = static_cast (p); + m = MAX(0, MIN(m, nrho-2)); + p -= m; + p = MIN(p, 1.0); + coeff = frho_spline[k][m]; + dFdrho = (coeff[0]*p + coeff[1])*p + coeff[2]; + uLD += a[k][itype] * (((coeff[3]*p + coeff[4])*p + coeff[5])*p + coeff[6]); + } + + if (rsq < lowercutsq[k]) { + dphi = 0.0; + } + else if (rsq > uppercutsq[k]) { + dphi = 0.0; + } + else { + dphi = rsq * (2.0*c2[k] + rsq * (4.0*c4[k] + 6.0*c6[k]*rsq)); + } + fforce += -(a[k][itype]*b[k][jtype]*dFdrho + a[k][jtype]*b[k][itype]*dFdrho) * dphi *rsqinv; + } + memory->destroy(LD); + + return uLD; +} + +/*-------------------------------------------------------------------- + spline the array frho read in from the file to create + frho_spline +---------------------------------------------------------------------- */ + +void PairLocalDensity::array2spline() { + memory->destroy(frho_spline); + memory->create(frho_spline, nLD, nrho, 7, "pairLD:frho_spline"); + + for (int k = 0; k < nLD; k++) + interpolate_cbspl(nrho, delta_rho[k], frho[k], frho_spline[k]); + +} + +/* ---------------------------------------------------------------------- + (one-dimensional) cubic spline interpolation sub-routine, + which determines the coeffs for a clamped cubic spline + given tabulated data + ------------------------------------------------------------------------*/ + +void PairLocalDensity::interpolate_cbspl(int n, double delta, + double *f, double **spline) +{ +/* inputs: + n number of interpolating points + + f array containing function values to + be interpolated; f[i] is the function + value corresponding to x[i] + ('x' refers to the independent var) + + delta difference in tabulated values of x + + outputs: (packaged as columns of the coeff matrix) + coeff_b coeffs of linear terms + coeff_c coeffs of quadratic terms + coeff_d coeffs of cubic terms + spline matrix that collects b,c,d + + + other parameters: + fpa derivative of function at x=a + fpb derivative of function at x=b +*/ + + double *dl, *dd, *du; + double *coeff_b, *coeff_c, *coeff_d; + double fpa, fpb; + + int i; + + coeff_b = new double [n]; + coeff_c = new double [n]; + coeff_d = new double [n]; + dl = new double [n]; + dd = new double [n]; + du = new double [n]; + + // initialize values + for ( i = 0; i= 0; i-- ) + coeff_c[i] -= coeff_c[i+1] * du[i]; + + for ( i = 0; i < n-1; i++ ) { + coeff_d[i] = ( coeff_c[i+1] - coeff_c[i] ) / ( 3.0 * delta ); + coeff_b[i] = ( f[i+1] - f[i] ) / delta - delta * ( coeff_c[i+1] + 2.0*coeff_c[i] ) / 3.0; + } + + // normalize + for ( i = 0; i < n-1; i++ ) { + coeff_b[i] = coeff_b[i] * delta ; + coeff_c[i] = coeff_c[i] * delta*delta ; + coeff_d[i] = coeff_d[i] * delta*delta*delta; + } + + //copy to coefficient matrix + for ( i = 0; i < n; i++) { + spline[i][3] = coeff_d[i]; + spline[i][4] = coeff_c[i]; + spline[i][5] = coeff_b[i]; + spline[i][6] = f[i]; + spline[i][2] = spline[i][5]/delta; + spline[i][1] = 2.0*spline[i][4]/delta; + spline[i][0] = 3.0*spline[i][3]/delta; + } + + delete [] coeff_b; + delete [] coeff_c; + delete [] coeff_d; + delete [] du; + delete [] dd; + delete [] dl; +} + +/* ---------------------------------------------------------------------- + read potential values from tabulated LD input file +------------------------------------------------------------------------- */ + +void PairLocalDensity::parse_file(char *filename) { + + int k, n; + int me = comm->me; + FILE *fptr; + char line[MAXLINE]; + double ratio, lc2, uc2, denom; + + + if (me == 0) { + fptr = fopen(filename, "r"); + if (fptr == NULL) { + char str[128]; + sprintf(str,"Cannot open Local Density potential file %s",filename); + error->one(FLERR,str); + } + } + + double *ftmp; // tmp var to extract the complete 2D frho array from file + + // broadcast number of LD potentials and number of (rho,frho) pairs + if (me == 0) { + + // first 2 comment lines ignored + fgets(line,MAXLINE,fptr); + fgets(line,MAXLINE,fptr); + + // extract number of potentials and number of (frho, rho) points + fgets(line,MAXLINE,fptr); + sscanf(line, "%d %d", &nLD, &nrho); + fgets(line,MAXLINE,fptr); + } + + MPI_Bcast(&nLD,1,MPI_INT,0,world); + MPI_Bcast(&nrho,1,MPI_INT,0,world); + + // setting up all arrays to be read from files and broadcasted + memory->create(uppercut, nLD, "pairLD:uppercut"); + memory->create(lowercut, nLD, "pairLD:lowercut"); + memory->create(uppercutsq, nLD, "pairLD:uppercutsq"); + memory->create(lowercutsq, nLD, "pairLD:lowercutsq"); + memory->create(c0, nLD, "pairLD:c0"); + memory->create(c2, nLD, "pairLD:c2"); + memory->create(c4, nLD, "pairLD:c4"); + memory->create(c6, nLD, "pairLD:c6"); + memory->create(rho_min, nLD, "pairLD:rho_min"); + memory->create(rho_max, nLD, "pairLD:rho_max"); + memory->create(delta_rho, nLD,"pairLD:delta_rho"); + memory->create(ftmp, nrho*nLD, "pairLD:ftmp"); + + // setting up central and neighbor atom filters + memory->create(a, nLD, atom->ntypes+1 , "pairLD:a"); + memory->create(b, nLD, atom->ntypes+1, "pairLD:b"); + if (me == 0) { + for (n = 1; n <= atom->ntypes; n++){ + for (k = 0; k < nLD; k++) { + a[k][n] = 0; + b[k][n] = 0; + } + } + } + + // read file block by block + + if (me == 0) { + for (k = 0; k < nLD; k++) { + + // parse upper and lower cut values + if (fgets(line,MAXLINE,fptr)==NULL) break; + sscanf(line, "%lf %lf", &lowercut[k], &uppercut[k]); + + // parse and broadcast central atom filter + fgets(line, MAXLINE, fptr); + char *tmp = strtok(line, " /t/n/r/f"); + while (tmp != NULL) { + a[k][atoi(tmp)] = 1; + tmp = strtok(NULL, " /t/n/r/f"); + } + + // parse neighbor atom filter + fgets(line, MAXLINE, fptr); + tmp = strtok(line, " /t/n/r/f"); + while (tmp != NULL) { + b[k][atoi(tmp)] = 1; + tmp = strtok(NULL, " /t/n/r/f"); + } + + // parse min, max and delta rho values + fgets(line, MAXLINE, fptr); + sscanf(line, "%lf %lf %lf", &rho_min[k], &rho_max[k], &delta_rho[k]); + // recompute delta_rho from scratch for precision + delta_rho[k] = (rho_max[k] - rho_min[k]) / (nrho - 1); + + // parse tabulated frho values from each line into temporary array + for (n = 0; n < nrho; n++) { + fgets(line,MAXLINE,fptr); + sscanf(line, "%lf", &ftmp[k*nrho + n]); + } + + // ignore blank line at the end of every block + fgets(line,MAXLINE,fptr); + + // set coefficients for local density indicator function + uc2 = uppercut[k] * uppercut[k]; + uppercutsq[k] = uc2; + lc2 = lowercut[k] * lowercut[k]; + lowercutsq[k] = lc2; + ratio = lc2/uc2; + denom = 1.0 - ratio; + denom = denom*denom*denom; + c0[k] = (1 - 3.0 * ratio) / denom; + c2[k] = (6.0 * ratio) / (uc2 * denom); + c4[k] = -(3.0 + 3.0*ratio) / (uc2*uc2 * denom); + c6[k] = 2.0 / (uc2*uc2*uc2 * denom); + } + } + + // Broadcast all parsed arrays + MPI_Bcast(&lowercut[0], nLD, MPI_DOUBLE, 0, world); + MPI_Bcast(&uppercut[0], nLD, MPI_DOUBLE, 0, world); + MPI_Bcast(&lowercutsq[0], nLD, MPI_DOUBLE, 0, world); + MPI_Bcast(&uppercutsq[0], nLD, MPI_DOUBLE, 0, world); + MPI_Bcast(&c0[0], nLD, MPI_DOUBLE, 0, world); + MPI_Bcast(&c2[0], nLD, MPI_DOUBLE, 0, world); + MPI_Bcast(&c4[0], nLD, MPI_DOUBLE, 0, world); + MPI_Bcast(&c6[0], nLD, MPI_DOUBLE, 0, world); + for (k = 0; k < nLD; k++) { + MPI_Bcast(&a[k][1], atom->ntypes, MPI_INT, 0, world); + MPI_Bcast(&b[k][1], atom->ntypes, MPI_INT, 0, world); + } + MPI_Bcast(&rho_min[0], nLD, MPI_DOUBLE, 0, world); + MPI_Bcast(&rho_max[0], nLD, MPI_DOUBLE, 0, world); + MPI_Bcast(&delta_rho[0], nLD, MPI_DOUBLE, 0, world); + MPI_Bcast(&ftmp[0], nLD*nrho, MPI_DOUBLE, 0, world); + + if (me == 0) fclose(fptr); + + // set up rho and frho arrays + memory->create(rho, nLD, nrho, "pairLD:rho"); + memory->create(frho, nLD, nrho, "pairLD:frho"); + + for (k = 0; k < nLD; k++) { + for (n = 0; n < nrho; n++) { + rho[k][n] = rho_min[k] + n*delta_rho[k]; + frho[k][n] = ftmp[k*nrho + n]; + } + } + + // delete temporary array + memory->destroy(ftmp); +} + +/* ---------------------------------------------------------------------- + communication routines +------------------------------------------------------------------------- */ + +int PairLocalDensity::pack_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) { + int i,j,k; + int m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + for (k = 0; k < nLD; k++) { + buf[m++] = fp[k][j]; + } + } + + return nLD; +} + +/* ---------------------------------------------------------------------- */ + +void PairLocalDensity::unpack_comm(int n, int first, double *buf) { + + int i,k,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + for (k = 0; k < nLD; k++) { + fp[k][i] = buf[m++]; + } + } +} + +/* ---------------------------------------------------------------------- */ + +int PairLocalDensity::pack_reverse_comm(int n, int first, double *buf) { + + int i,k,m,last; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + for (k = 0; k < nLD; k++) { + buf[m++] = localrho[k][i]; + } + } + return nLD; +} + +/* ---------------------------------------------------------------------- */ + +void PairLocalDensity::unpack_reverse_comm(int n, int *list, double *buf) { + + int i,j,k; + int m; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + for (k = 0; k < nLD; k++) { + localrho[k][j] += buf[m++]; + } + } +} + +/* ---------------------------------------------------------------------- + memory usage of local atom-based arrays +------------------------------------------------------------------------- */ + +double PairLocalDensity::memory_usage() +{ + double bytes = maxeatom * sizeof(double); + bytes += maxvatom*6 * sizeof(double); + bytes += 2 * (nmax*nLD) * sizeof(double); + return bytes; +} + diff --git a/src/USER-MISC/pair_local_density.h b/src/USER-MISC/pair_local_density.h new file mode 100644 index 0000000000..77aab1399b --- /dev/null +++ b/src/USER-MISC/pair_local_density.h @@ -0,0 +1,88 @@ +/* -*- 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. +------------------------------------------------------------------------- + pair_LocalDensity written by: + Tanmoy Sanyal and M. Scott Shell from UC Santa Barbara + David Rosenberger: TU Darmstadt +-------------------------------------------------------------------------*/ + + +#ifdef PAIR_CLASS + +PairStyle(local/density,PairLocalDensity) + +#else + +#ifndef LMP_PAIR_LOCAL_DENSITY_H +#define LMP_PAIR_LOCAL_DENSITY_H + +#include "pair.h" + + +namespace LAMMPS_NS { + +class PairLocalDensity : public Pair { + public: + PairLocalDensity(class LAMMPS *); + virtual ~PairLocalDensity(); + virtual void compute(int, int); + void settings(int, char **); + virtual void coeff(int, char **); + void init_style(); + double init_one(int, int); + double single(int, int, int, int, double, double, double, double &); + + virtual int pack_comm(int, int *, double *, int, int *); + virtual void unpack_comm(int, int, double *); + int pack_reverse_comm(int, int, double *); + void unpack_reverse_comm(int, int *, double *); + double memory_usage(); + + + protected: + //------------------------------------------------------------------------ + //This information is read from the tabulated input file + + int nLD, nrho; // number of LD types + int **a, **b; // central and neigh atom filters + double *uppercut, *lowercut; // upper and lower cutoffs + double *uppercutsq, *lowercutsq; // square of above cutoffs + double *c0, *c2, *c4, *c6; // coeffs for indicator function + double *rho_min, *rho_max, *delta_rho; // min, max & grid-size for LDs + double **rho, **frho; // LD and LD function tables + + //------------------------------------------------------------------------ + + double ***frho_spline; // splined LD potentials + double cutmax; // max cutoff for all elements + double cutforcesq; // square of global upper cutoff + + int nmax; // max size of per-atom arrays + double **localrho; // per-atom LD + double **fp; // per-atom LD potential function derivative + + void allocate(); + + // read tabulated input file + void parse_file(char *); + + // convert array to spline + void array2spline(); + + // cubic spline interpolation + void interpolate_cbspl(int, double, double *, double **); +}; + +} + +#endif +#endif From e7d8165a46b7541f466b1b448376f8944f7f1872 Mon Sep 17 00:00:00 2001 From: "tanmoy.7989" Date: Mon, 9 Sep 2019 02:16:30 -0700 Subject: [PATCH 107/237] fixed spelling mistakes reported by sphix --- doc/src/pair_local_density.txt | 4 ++-- doc/utils/sphinx-config/false_positives.txt | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/doc/src/pair_local_density.txt b/doc/src/pair_local_density.txt index 8cba705664..f9a410c3be 100644 --- a/doc/src/pair_local_density.txt +++ b/doc/src/pair_local_density.txt @@ -29,7 +29,7 @@ sense,a generalization of embedded atom models (EAM). The name "local density potential" arises from the fact that it assigns an energy to an atom depending on the number of neighboring atoms of given type around it within a predefined spherical volume (i.e., within a cutoff). The bottom-up coarse-graining (CG) -literature sugggests that such potentials can be widely useful in capturing +literature suggests that such potentials can be widely useful in capturing effective multibody forces in a computationally efficient manner so as to improve the quality of CG models of implicit solvation"(Sanyal1)"_#Sanyal1 and phase-segregation in liquid mixtures"(Sanyal2)"_#Sanyal2, and provide guidelines @@ -45,7 +45,7 @@ upon initialization. NOTE: Thus when used as the only interaction in the system, there is no corresponding pair_coeff command and when used with other pair styles using the hybrid/overlay option, the corresponding pair_coeff command must be supplied -* * as placeholders for the atomtypes. +* * as placeholders for the atom types. :line diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 6d5112b4c7..ce7bdfd763 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -304,7 +304,7 @@ Cates Cavium Cawkwell cbecker -ccache +ccachepiecewise ccmake ccNspecies CCu @@ -622,6 +622,7 @@ Doye dpd DPD dpdTheta +dphi DPhil dr dR @@ -2137,6 +2138,7 @@ picograms picosecond picoseconds pid +piecewise Pieniazek Pieter pimd @@ -2417,6 +2419,7 @@ Rodrigues Rohart Ronchetti Rosati +Rosenberger Rossky rosybrown rotationally @@ -2456,6 +2459,7 @@ Sandia sandybrown Sanitizer sanitizers +Sanyal sc scafacos SCAFACOS @@ -2480,6 +2484,7 @@ Scripta sdk sdpd SDPD +se seagreen Secor sectoring @@ -2573,6 +2578,7 @@ Snodin Sodani Soderlind solvated +solvation Sorensen soundspeed Souza @@ -2931,6 +2937,7 @@ vectorial vectorization Vectorization vectorized +Vegt vel Verlag verlet From 22fde86fd07867eec33784272bcfd6141bd54ece Mon Sep 17 00:00:00 2001 From: "tanmoy.7989" Date: Mon, 9 Sep 2019 02:27:54 -0700 Subject: [PATCH 108/237] possible spelling mistake report from Sphinx for unidentified word ccache; added this to the false_positives.txt file --- doc/utils/sphinx-config/false_positives.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index ce7bdfd763..992723da76 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -304,6 +304,7 @@ Cates Cavium Cawkwell cbecker +ccache ccachepiecewise ccmake ccNspecies From cd846e1bbb754da6599b69b683f061fa7b72b1e4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 10 Sep 2019 09:18:38 -0400 Subject: [PATCH 109/237] add ITEM: UNITS line to native text format dumps --- src/dump_atom.cpp | 2 ++ src/dump_custom.cpp | 1 + src/dump_local.cpp | 1 + 3 files changed, 4 insertions(+) diff --git a/src/dump_atom.cpp b/src/dump_atom.cpp index e2e77cfb77..4c7e465bcf 100644 --- a/src/dump_atom.cpp +++ b/src/dump_atom.cpp @@ -209,6 +209,7 @@ void DumpAtom::header_binary_triclinic(bigint ndump) void DumpAtom::header_item(bigint ndump) { + fprintf(fp,"ITEM: UNITS %s\n",update->unit_style); fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF ATOMS\n"); @@ -224,6 +225,7 @@ void DumpAtom::header_item(bigint ndump) void DumpAtom::header_item_triclinic(bigint ndump) { + fprintf(fp,"ITEM: UNITS %s\n",update->unit_style); fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF ATOMS\n"); diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index ce83e442c9..c96bd44358 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -420,6 +420,7 @@ void DumpCustom::header_binary_triclinic(bigint ndump) void DumpCustom::header_item(bigint ndump) { + fprintf(fp,"ITEM: UNITS %s\n",update->unit_style); fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF ATOMS\n"); diff --git a/src/dump_local.cpp b/src/dump_local.cpp index 9f021a7b6a..fb64012cf1 100644 --- a/src/dump_local.cpp +++ b/src/dump_local.cpp @@ -256,6 +256,7 @@ int DumpLocal::modify_param(int narg, char **arg) void DumpLocal::write_header(bigint ndump) { if (me == 0) { + fprintf(fp,"ITEM: UNITS %s\n",update->unit_style); fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF %s\n",label); From 15d2e1b260d9addc544e6d90505b8b1ebc024d1a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 10 Sep 2019 09:36:17 -0400 Subject: [PATCH 110/237] consistent formatting --- src/dump_atom.cpp | 4 ++-- src/dump_custom.cpp | 2 +- src/dump_local.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/dump_atom.cpp b/src/dump_atom.cpp index 4c7e465bcf..8f09b93f1a 100644 --- a/src/dump_atom.cpp +++ b/src/dump_atom.cpp @@ -209,7 +209,7 @@ void DumpAtom::header_binary_triclinic(bigint ndump) void DumpAtom::header_item(bigint ndump) { - fprintf(fp,"ITEM: UNITS %s\n",update->unit_style); + fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF ATOMS\n"); @@ -225,7 +225,7 @@ void DumpAtom::header_item(bigint ndump) void DumpAtom::header_item_triclinic(bigint ndump) { - fprintf(fp,"ITEM: UNITS %s\n",update->unit_style); + fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF ATOMS\n"); diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index c96bd44358..3de0e6fb3b 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -420,7 +420,7 @@ void DumpCustom::header_binary_triclinic(bigint ndump) void DumpCustom::header_item(bigint ndump) { - fprintf(fp,"ITEM: UNITS %s\n",update->unit_style); + fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF ATOMS\n"); diff --git a/src/dump_local.cpp b/src/dump_local.cpp index fb64012cf1..7cdc3ea16f 100644 --- a/src/dump_local.cpp +++ b/src/dump_local.cpp @@ -256,7 +256,7 @@ int DumpLocal::modify_param(int narg, char **arg) void DumpLocal::write_header(bigint ndump) { if (me == 0) { - fprintf(fp,"ITEM: UNITS %s\n",update->unit_style); + fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF %s\n",label); From 4bbe4c73aa27c15d2408fcd2009e0bfd87b130be Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 10 Sep 2019 09:38:44 -0400 Subject: [PATCH 111/237] whitespace cleanup --- tools/binary2txt.cpp | 78 ++++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/tools/binary2txt.cpp b/tools/binary2txt.cpp index e0778fbf3c..119e9e3574 100644 --- a/tools/binary2txt.cpp +++ b/tools/binary2txt.cpp @@ -99,9 +99,9 @@ int main(int narg, char **arg) // detect end-of-file if (feof(fp)) { - fclose(fp); - fclose(fptxt); - break; + fclose(fp); + fclose(fptxt); + break; } fread(&natoms,sizeof(bigint),1,fp); @@ -114,13 +114,13 @@ int main(int narg, char **arg) fread(&zlo,sizeof(double),1,fp); fread(&zhi,sizeof(double),1,fp); if (triclinic) { - fread(&xy,sizeof(double),1,fp); - fread(&xz,sizeof(double),1,fp); - fread(&yz,sizeof(double),1,fp); + fread(&xy,sizeof(double),1,fp); + fread(&xz,sizeof(double),1,fp); + fread(&yz,sizeof(double),1,fp); } fread(&size_one,sizeof(int),1,fp); fread(&nchunk,sizeof(int),1,fp); - + fprintf(fptxt,"ITEM: TIMESTEP\n"); fprintf(fptxt,BIGINT_FORMAT "\n",ntimestep); fprintf(fptxt,"ITEM: NUMBER OF ATOMS\n"); @@ -128,26 +128,26 @@ int main(int narg, char **arg) m = 0; for (int idim = 0; idim < 3; idim++) { - for (int iside = 0; iside < 2; iside++) { - if (boundary[idim][iside] == 0) boundstr[m++] = 'p'; - else if (boundary[idim][iside] == 1) boundstr[m++] = 'f'; - else if (boundary[idim][iside] == 2) boundstr[m++] = 's'; - else if (boundary[idim][iside] == 3) boundstr[m++] = 'm'; - } - boundstr[m++] = ' '; + for (int iside = 0; iside < 2; iside++) { + if (boundary[idim][iside] == 0) boundstr[m++] = 'p'; + else if (boundary[idim][iside] == 1) boundstr[m++] = 'f'; + else if (boundary[idim][iside] == 2) boundstr[m++] = 's'; + else if (boundary[idim][iside] == 3) boundstr[m++] = 'm'; + } + boundstr[m++] = ' '; } boundstr[8] = '\0'; - + if (!triclinic) { - fprintf(fptxt,"ITEM: BOX BOUNDS %s\n",boundstr); - fprintf(fptxt,"%g %g\n",xlo,xhi); - fprintf(fptxt,"%g %g\n",ylo,yhi); - fprintf(fptxt,"%g %g\n",zlo,zhi); + fprintf(fptxt,"ITEM: BOX BOUNDS %s\n",boundstr); + fprintf(fptxt,"%g %g\n",xlo,xhi); + fprintf(fptxt,"%g %g\n",ylo,yhi); + fprintf(fptxt,"%g %g\n",zlo,zhi); } else { - fprintf(fptxt,"ITEM: BOX BOUNDS %s xy xz yz\n",boundstr); - fprintf(fptxt,"%g %g %g\n",xlo,xhi,xy); - fprintf(fptxt,"%g %g %g\n",ylo,yhi,xz); - fprintf(fptxt,"%g %g %g\n",zlo,zhi,yz); + fprintf(fptxt,"ITEM: BOX BOUNDS %s xy xz yz\n",boundstr); + fprintf(fptxt,"%g %g %g\n",xlo,xhi,xy); + fprintf(fptxt,"%g %g %g\n",ylo,yhi,xz); + fprintf(fptxt,"%g %g %g\n",zlo,zhi,yz); } fprintf(fptxt,"ITEM: ATOMS\n"); @@ -156,25 +156,25 @@ int main(int narg, char **arg) // loop over processor chunks in file for (i = 0; i < nchunk; i++) { - fread(&n,sizeof(int),1,fp); + fread(&n,sizeof(int),1,fp); - // extend buffer to fit chunk size - - if (n > maxbuf) { - if (buf) delete [] buf; - buf = new double[n]; - maxbuf = n; - } + // extend buffer to fit chunk size - // read chunk and write as size_one values per line + if (n > maxbuf) { + if (buf) delete [] buf; + buf = new double[n]; + maxbuf = n; + } - fread(buf,sizeof(double),n,fp); - n /= size_one; - m = 0; - for (j = 0; j < n; j++) { - for (k = 0; k < size_one; k++) fprintf(fptxt,"%g ",buf[m++]); - fprintf(fptxt,"\n"); - } + // read chunk and write as size_one values per line + + fread(buf,sizeof(double),n,fp); + n /= size_one; + m = 0; + for (j = 0; j < n; j++) { + for (k = 0; k < size_one; k++) fprintf(fptxt,"%g ",buf[m++]); + fprintf(fptxt,"\n"); + } } printf(" " BIGINT_FORMAT,ntimestep); From 3b54eb65387306fe889a1e210ad7c353bd6880ad Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Tue, 10 Sep 2019 15:41:09 -0700 Subject: [PATCH 112/237] finalized fix_langevin --- src/fix_langevin.cpp | 65 ++++++++++++++++++++++++++++---------------- src/fix_langevin.h | 1 - 2 files changed, 42 insertions(+), 24 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 7734989e35..2ed9d9477f 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -12,6 +12,9 @@ /* ---------------------------------------------------------------------- Contributing authors: Carolyn Phillips (U Mich), reservoir energy tally Aidan Thompson (SNL) GJF formulation + Charles Sievers & Niels Gronbech-Jensen (UC Davis) + updated GJF formulation and included + statistically correct 2GJ velocity ------------------------------------------------------------------------- */ #include "fix_langevin.h" @@ -207,7 +210,6 @@ int FixLangevin::setmask() { int mask = 0; if (gjfflag) mask |= INITIAL_INTEGRATE; - if (gjfflag) mask |= INITIAL_INTEGRATE_RESPA; mask |= POST_FORCE; mask |= POST_FORCE_RESPA; mask |= END_OF_STEP; @@ -302,6 +304,9 @@ void FixLangevin::init() if (strstr(update->integrate_style,"respa")) nlevels_respa = ((Respa *) update->integrate)->nlevels; + if (strstr(update->integrate_style,"respa") && gjfflag) + error->all(FLERR,"Fix langevin gjf and respa are not compatible"); + if (gjfflag) gjfa = (1.0-update->dt/2.0/t_period)/(1.0+update->dt/2.0/t_period); if (gjfflag) gjfsib = sqrt(1.0+update->dt/2.0/t_period); } @@ -377,9 +382,9 @@ void FixLangevin::setup(int vflag) v[i][0] += dtfm * f[i][0]; v[i][1] += dtfm * f[i][1]; v[i][2] += dtfm * f[i][2]; - lv[i][0] = f[i][0]; - lv[i][1] = f[i][1]; - lv[i][2] = f[i][2]; + lv[i][0] = v[i][0]; + lv[i][1] = v[i][1]; + lv[i][2] = v[i][2]; } // } else { @@ -399,12 +404,6 @@ void FixLangevin::setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixLangevin::initial_integrate_respa(int vflag, int ilevel, int /* iloop */){ - if (ilevel == respa_level-1) initial_integrate(vflag); -} - -/* ---------------------------------------------------------------------- */ - void FixLangevin::initial_integrate(int /* vflag */) { double **v = atom->v; @@ -715,6 +714,12 @@ void FixLangevin::post_force_templated() f[i][1] += fdrag[1] + fran[1]; f[i][2] += fdrag[2] + fran[2]; + if (Tp_ZERO) { + fsum[0] += fran[0]; + fsum[1] += fran[1]; + fsum[2] += fran[2]; + } + if (Tp_TALLY) { if (Tp_GJF){ fdrag[0] = gamma1*lv[i][0]/gjfsib/gjfsib; @@ -733,11 +738,6 @@ void FixLangevin::post_force_templated() } - if (Tp_ZERO) { - fsum[0] += fran[0]; - fsum[1] += fran[1]; - fsum[2] += fran[2]; - } } } @@ -934,16 +934,21 @@ void FixLangevin::end_of_step() if (tallyflag){ if (gjfflag){ for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) + if (mask[i] & groupbit) { + if (tbiasflag) + temperature->remove_bias(i, lv[i]); energy_onestep += flangevin[i][0]*lv[i][0] + flangevin[i][1]*lv[i][1] + flangevin[i][2]*lv[i][2]; + if (tbiasflag) + temperature->restore_bias(i, lv[i]); + } } else for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) energy_onestep += flangevin[i][0]*v[i][0] + flangevin[i][1]*v[i][1] + flangevin[i][2]*v[i][2]; -} + } if (gjfflag){ double tmp[3]; @@ -1043,11 +1048,25 @@ double FixLangevin::compute_scalar() if (update->ntimestep == update->beginstep) { energy_onestep = 0.0; - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) - energy_onestep += flangevin[i][0]*v[i][0] + flangevin[i][1]*v[i][1] + - flangevin[i][2]*v[i][2]; - energy = 0.5*energy_onestep*update->dt; + if (!gjfflag){ + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + energy_onestep += flangevin[i][0]*v[i][0] + flangevin[i][1]*v[i][1] + + flangevin[i][2]*v[i][2]; + energy = 0.5*energy_onestep*update->dt; + } + else{ + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit){ + if (tbiasflag) + temperature->remove_bias(i, lv[i]); + energy_onestep += flangevin[i][0]*lv[i][0] + flangevin[i][1]*lv[i][1] + + flangevin[i][2]*lv[i][2]; + if (tbiasflag) + temperature->restore_bias(i, lv[i]); + } + energy = -0.5*energy_onestep*update->dt; + } } // convert midstep energy back to previous fullstep energy @@ -1139,4 +1158,4 @@ int FixLangevin::unpack_exchange(int nlocal, double *buf) lv[nlocal][1] = buf[n++]; lv[nlocal][2] = buf[n++]; return n; -} \ No newline at end of file +} diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 5abfa53288..2ef1489273 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -29,7 +29,6 @@ namespace LAMMPS_NS { int setmask(); void init(); void setup(int); - void initial_integrate_respa(int, int, int); virtual void initial_integrate(int); virtual void post_force(int); void post_force_respa(int, int, int); From e34b7840d580afba067642d3f74b8386cf736354 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Tue, 10 Sep 2019 15:53:32 -0700 Subject: [PATCH 113/237] Updated documentation and added MD results --- doc/src/fix_langevin.txt | 53 +++++++++++++----- .../argon_kinetic_energy.pdf | Bin 0 -> 57606 bytes .../argon_kinetic_energy_fluctuations.pdf | Bin 0 -> 57374 bytes .../argon_potential_energy.pdf | Bin 0 -> 56655 bytes .../argon_potential_energy_fluctuations.pdf | Bin 0 -> 54630 bytes .../guaiacol_kinetic_energy.pdf | Bin 0 -> 43676 bytes .../guaiacol_kinetic_energy_fluctuations.pdf | Bin 0 -> 43786 bytes .../guaiacol_potential_energy.pdf | Bin 0 -> 43634 bytes ...guaiacol_potential_energy_fluctuations.pdf | Bin 0 -> 43267 bytes 9 files changed, 40 insertions(+), 13 deletions(-) create mode 100644 examples/gjf/molecular_dynamics_results/argon_kinetic_energy.pdf create mode 100644 examples/gjf/molecular_dynamics_results/argon_kinetic_energy_fluctuations.pdf create mode 100644 examples/gjf/molecular_dynamics_results/argon_potential_energy.pdf create mode 100644 examples/gjf/molecular_dynamics_results/argon_potential_energy_fluctuations.pdf create mode 100644 examples/gjf/molecular_dynamics_results/guaiacol_kinetic_energy.pdf create mode 100644 examples/gjf/molecular_dynamics_results/guaiacol_kinetic_energy_fluctuations.pdf create mode 100644 examples/gjf/molecular_dynamics_results/guaiacol_potential_energy.pdf create mode 100644 examples/gjf/molecular_dynamics_results/guaiacol_potential_energy_fluctuations.pdf diff --git a/doc/src/fix_langevin.txt b/doc/src/fix_langevin.txt index 861eed4a6f..1e50b3a8ba 100644 --- a/doc/src/fix_langevin.txt +++ b/doc/src/fix_langevin.txt @@ -217,6 +217,10 @@ the particles. As described below, this energy can then be printed out or added to the potential energy of the system to monitor energy conservation. +NOTE: this accumulated energy does NOT include kinetic energy removed +by the {zero} flag. LAMMPS will print a warning when both options are +active. + The keyword {zero} can be used to eliminate drift due to the thermostat. Because the random forces on different atoms are independent, they do not sum exactly to zero. As a result, this fix @@ -232,21 +236,34 @@ The keyword {gjf} can be used to run the "Gronbech-Jensen/Farago described in the papers cited below, the purpose of this method is to enable longer timesteps to be used (up to the numerical stability limit of the integrator), while still producing the correct Boltzmann -distribution of atom positions. It is implemented within LAMMPS, by -changing how the random force is applied so that it is composed of -the average of two random forces representing half-contributions from -the previous and current time intervals. +distribution of atom positions. -In common with all methods based on Verlet integration, the -discretized velocities generated by this method in conjunction with -velocity-Verlet time integration are not exactly conjugate to the -positions. As a result the temperature (computed from the discretized -velocities) will be systematically lower than the target temperature, -by a small amount which grows with the timestep. Nonetheless, the -distribution of atom positions will still be consistent with the +The current implementation provides the user with the option to output +the velocity in one of two forms: {vfull} or {vhalf}, which replaces +the outdated option {yes}. The {gjf} option {vfull} outputs the on-site +velocity given in "Gronbech-Jensen/Farago"_#Gronbech-Jensen; this velocity +is shown to be systematically lower than the target temperature by a small +amount, which grows quadratically with the timestep. +The {gjf} option {vhalf} outputs the 2GJ half-step velocity given in +"Gronbech Jensen/Gronbech-Jensen"_#2Gronbech-Jensen; this velocity is shown +to not have any linear statistical errors for any stable time step. +An overview of statistically correct Boltzmann and Maxwell-Boltzmann +sampling of true on-site and true half-step velocities is given in +"Gronbech-Jensen_#1Gronbech-Jensen. +Regardless of the choice of output velocity, the sampling of the configurational +distribution of atom positions is the same, and linearly consistent with the target temperature. -As an example of using the {gjf} keyword, for molecules containing C-H +An example of a reason why to use the {gjf} keyword is the freedom to take a larger time step, +up to the stability limit, while maintaining robust statistics. It is crucial to +recall that while the equilibrium statistics is appropriately sampled, the correct dynamics +of the trajectories may not be for large time steps, as is the case for all thermostats. +All thermostats provide good statistics and dynamics for small time steps. +The 2GJ half-step velocity {vhalf} samples the correct velocity distribution for the {gjf} trajectory. +Results of simulations using the {gjf} option with both {vfull} and {vhalf} compared to +other available thermostats are shown in the LAMMPS directory: examples/gjf. + +As an example of why to use the {gjf} keyword, for molecules containing C-H bonds, configurational properties generated with dt = 2.5 fs and tdamp = 100 fs are indistinguishable from dt = 0.5 fs. Because the velocity distribution systematically decreases with increasing timestep, the @@ -255,6 +272,7 @@ velocity distribution, such as the velocity auto-correlation function (VACF). In this example, the velocity distribution at dt = 2.5fs generates an average temperature of 220 K, instead of 300 K. + :line Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are @@ -312,7 +330,8 @@ This fix can ramp its target temperature over multiple runs, using the This fix is not invoked during "energy minimization"_minimize.html. -[Restrictions:] none +[Restrictions:] For {gjf} do not choose damp=dt/2. {gjf} is not compatible +with run_style respa. [Related commands:] @@ -337,3 +356,11 @@ types, tally = no, zero = no, gjf = no. [(Gronbech-Jensen)] Gronbech-Jensen and Farago, Mol Phys, 111, 983 (2013); Gronbech-Jensen, Hayre, and Farago, Comp Phys Comm, 185, 524 (2014) + +:link(2Gronbech-Jensen) +[(Gronbech-Jensen)] Gronbech Jensen and Gronbech-Jensen, Mol Phys, 117, 2511 +(2019) + +:link(1Gronbech-Jensen) +[(Gronbech-Jensen)] Gronbech-Jensen, Mol Phys (2019); +https://doi.org/10.1080/00268976.2019.1662506 diff --git a/examples/gjf/molecular_dynamics_results/argon_kinetic_energy.pdf b/examples/gjf/molecular_dynamics_results/argon_kinetic_energy.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6943609f33f30f3ab2fbfd5dc4bcf4a904c9d30b GIT binary patch literal 57606 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 literal 0 HcmV?d00001 diff --git a/examples/gjf/molecular_dynamics_results/argon_kinetic_energy_fluctuations.pdf b/examples/gjf/molecular_dynamics_results/argon_kinetic_energy_fluctuations.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4a95d23fd12f51e6aaa6c5ddbc927b06e2e4d566 GIT binary patch literal 57374 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 literal 0 HcmV?d00001 diff --git a/examples/gjf/molecular_dynamics_results/argon_potential_energy_fluctuations.pdf b/examples/gjf/molecular_dynamics_results/argon_potential_energy_fluctuations.pdf new file mode 100644 index 0000000000000000000000000000000000000000..833bc8d468cfa78d993e226dd964bc2938a819cb GIT binary patch literal 54630 zcmagGWpo_N(k-YKGc&fBnHeoci<#A8$zo=-#j=>eVrFJ$2FqfLnb{ioobS%NGjHCS zA5~cu5g8eo71e9+>J>?;EFsCr%ES&&Ik0!VcT#+lJ2Nl@&jDlsI+$3)3kU$2<<0Fu zE|x&f57B2Jv!s=+i@DQBYisOcE@5u!U}g>!5`uSjaWXfygZBWO>5o>~j;d!JXj0T) z=gxVipHhhQK}VsA<$Cq>cm$lX;dVOp7d#|K^$g@P2jnC+EI<{rwSSSoGHIxBC8A{P>V!c%S&^VK3#?cpoKY z&80=(!TLsD;4J24`ek?916uSwm_zvD-R}M5&8H=E>FphNG{>*NAoj(^O zeaSkl`o$_6dAwCKZMom49g#Anze7TEzU{nt&m*;{^!T*MoR@Iaws^)|mc}GR~?uT&((?LHYRT;p*K2^hosc#u?9>2&>kf>@H zSWs29+;5&`LfwLE^y3B-p_;OzGSw0}yxp~(P@|@V8JCJRn0*NtHRX(&N`h5IVw**!OnNkuzwWfSyhWs!A^qGOvw+*^5oU4k1xw)ov!^I=GnA;x^FI& zd7$Oy3N@tV;M-}zGSqfEncj;#Zhq*~X_Vhfr&o6OQG(mL@|qOYmK^$W8)8pz>{q1)X@-Fu$J$&r z(t2sf&9x95$JiKa(N5tq*-*e)f>n!nEfk6Mir~Idfnqeq8%#KGbM{9UwQB~c7Z~kz zY6go?w_E2(Pa?boU9MQ_WVenmiPT79DeuiYSw_5Sh=jc+Cm1sfQTHoQU^9He4W(ZEex`O5rVFaS6dClsi$vt9S z+B&z06|k)u?!pn~$&lzuqdSc>AI?H6yN_?BgEjEpSgR}%xO;s&7`7WNM}j*=5VXRJ z$&plIq{)+dT*8tJ@|h?5cHnbL_k{+qV6UE}Wc*Qyp#Zv&^8kLe=K#ST(OgvzuXmr|yee3n%ly_*0i>)4SO77NwGC&> zl^SVqezF%XDQR1xzKWc0bR6oaKye8`BI>J-{>ROc(INqbM0=pRLmXI8d5W z-!%jM92ie~gAAvg1wc2sm=+N`wo%^C7YL9jfsifTB|N$o(bZsb*iuPQz{YNvfw(MXE=g&8sYmp4h7_xQ)HLfqV;d@`!g+-QH5X zXOlH8=|fk5YtueSw@7>j9x0S2{((UmY;-ZPop;>rLUMGewd&i-n55oudf)~ zSU#BhBvuYLur!j(eTazcrAVnTU7900o@T0p%4H2!<)k17I!BNyt>qIn|Zrp$NyfKTkUZ~>ph#F zcNfuUqhDtW@rd68;G;vz#P>O<{>$X%W6gL@1(o_Qs8kLea1sL}@%-O62GP4$?QfF| zqL@C=@*`bT-=|^e380wa;I&CqXXQd%KpwQD^FEWz1S-%d0?!J=+BhKWBbo7 zQk|a3zHLzBY@*JWAg?kvuZd*42jBLB=B|f(49K|y?B4q?v5?3`-nP>de%FzCJWE8+ zw>Iw&CH>!a_d+^QN1mXD-Ez9t-XG_wEv$W>@BWlmZx8&jd_UTJ@V^?Zmo|`eYa=5x zr-KFi;o8MCF5Y&t2HTGn5Y};8D?D$W?m*Bt%pL6(w%y)y-&3AhHGBe*&x7NOpnplT z6Lr)Ueww+}9&Ph-Iv2BM*Kt}wlu0a`e}#zgWdt$)>kTgR%xWBrbq@kXD5X;)`?*nM z$9fdMTDY-Sc8&$yXC}o71(ENe5}2gF1Jg8#L{u&?-J6M5vC##qEFaq%e25?t6y zF8PquNBQ6)G$WO4-Ko; zWTGR|Jmh5HrAP#7E0gu7F+5DO@(^*g@Licpa$Rj@RDM~$ zzam701g9{740TUTy46QJJbUP)Xh~j5fqzEX9>k@U?;2j!B#>Mf%*e&TCrcQ8pS7jJ z@2^sX{tm>!#IKZ0^$;bHp_)CcfKauBV^gO#39U%_NXH9?mrQK{-+a>8&2% zk}wLHMi&W*mmE>^qrc&e;kES`@(%;wDgB&rgJM2LczSCNmI?)t>Qa&- zhFl3jihSCYhICxy_q4)9n4DGkOcOXZy51vIVrMb}rEsDopfiq09mgntu8K?2C^MG| zgJj-5YY%v|7TLmG*Y(muZ%KRKY`uD)wDxt!b(kiNM2VdhsaSqLD>X&-_X}DFZsxh@ z3)PKYhNO#;DcS-k^YY*3WBhTMsWioR$a_S6(-iF!=1~9*$*)TY`kqXtru%9eLmNLj z*1%3gSdS`AYxY{TxK+prGcm zk>8=)RlqDc?rs*T_UBs?Hx=F9Ti+{&&K<(kq^h~8*9c%}TT*j%pv~hJ50AD&oW}XK zd9OLVyVATap|`yVnhk25E5IX(vgyS_TvW;{pINr#v?;!{E^(fVF2i?Sa}}Soxe^`Q z6oL-$X%{f8(Pt9F67a_?f^T_(HDhxFlrG{w2iLuR=s2CurP;FPak~e z>)CJ#+sRNX*dA0=GjLBc3i%z#{(MHU>(`F4?}ZgHtpO1co5iAO!U1i)DBxM0xJsGd z-<3`s%f|>3w4sE6J@@lda>aaGmk8GA!7Jlr=080!V!!#obK4csg z$hldGr$owMmd!_sMVa8n@$b2SSlRG(E?!$`pSS92O)7M#y5p9}?rL>6hXVX`=8;%t zSD}DU2gRhQF6qi)j?(R=62$MPn1WAm(K72vh{eAUhTeeE`9^i}r3*vVWIVS^`ft%w zeF{s*7yC}g#0_9|wPgxR>&+$*Micf^*rf>O5xe!$Z$>*%(YHrkG*hU+tC;i`CUY2F z@lYiRza?O)gOpP=b}mC`Im?1)`^`tUw#ybvL`rL*q2NjVuxsMz2z?BWvPA>O&>Ed* zQ)!29W)3D1g{IUhuk}fjORB**Wqo7E;_Gq07wEX|Swf*CnRdVwn(u?bD2rD@yOt)v zjLiy~=g^#(%}GrdtEJq&OS#hSMYIfUK$y^fZ}@dqcvI-ak$o~YyI4glj>Bj!&!M!c z%c(3rW*@*&xFzMfQpY=Rb{56n@*c<+^$Tg4J2@p!Re>afc0{_0D(gyZ-domx#h*lt zMyFwcuL)O)SKCAzZx5wCod~mt$XL=^zhOtQuusiTw`i$$%wsGq8agSGk06QGF1)g_ z*|%;nm*ebreGlTYTfF|TQ;b$-i@q?sz6Hey7D~TlS zK{9IG2|O#Sv0ByP&=T1U5oq&PcRZdR9|Zlk5m*}+fJ{p5bK&&DC`AJ zc$EpDdRGlSx8kp54_mLQn#ryta#HfIEE$!5hpA(b-YQ$1Q*ByMb+c9{9|wo7Y%EZC z=)g$UBoL55NX3vyUriA##ljQoHs|-QNRFkcK6F^|qhLt$7=Ar85!&Yw$_DRie&`Cv zj5GfPKJgF_-q&!3q6A2*j)46TqEg+H!$3Z9I>-WgV|)d3ka5h&=b(o+2R_H`K(#<0 z4BxC`$i*cW7G?>1acNQ>B61jGTpIilxdCOv+ztnX_}vvx?*V+HaRJ%2D4fLDA{5Q+ z203cdK9RkWVY8cWgKLuCXrM3b$Oup9Q6(PUUl*I-AE$-A(ywX6tH|}tL%NU<%w2bn zo**-@E|=ljhR_&FaO(?pGFW|e*2kO^h_Occ<6Yj+wK;2PI%0%~ytPlVSK@~(`e{OX53ea$ER zILLA*X}uV^oSvY#qs^ca62e*6?obwE;Bve>4iRXZ#LTBI(}4iw%T%YhKCM&CH&RDu z<||Fw&_SA!bHydJphA&j8F!P6t7I#?;k$$m%s)hqr;B6r%a=~aW` z`eDS9jCxLw%W(2Luy)ysMXPB{;@uXjy09$37qq3R{{0We?ye)-TevHx$bPNpoJ=8u zTn}E`F_nA1VqCqVi8-CI;TEDdYZ7I;7Zs$Z3<6rBVpzl~9Y&B^`1fsmt(nwHhEFsW zV~ZoGEJtSG%E?BtXFt;m5uGbsNIp^+m zi8C`~Rx3Q!YA}+{m`#D0UYdV9DmMm8tavYyl}0s~(bHf8L{~Jx`U0Q`_ZoO!AH2<$|GkO}N0I$*MB&GRZed9qorI2Wq6VT= zxeku6xyuiG>6LCtfzG%Oj^Em&URakXe1FG<^N&7jMX-tc>ZM$R`jAl>F@>AG1bBqU z1oa6<3HktkB7?Y~%RzRg9WzVZ>h>x^5S3>|YIQHR^`H2LU z4Sa&LSiT~Q-Av5Q_K;4?3rqqQ4tP`gsZbHn{uzUCN-jx49`W@Mpeh+q(NK~3hSi}$ z97nw!fmMTKP&^2Kt>Hyzr2cW}-|_V5WsVVlt)fe6kllf#;j32roP2oOZxWhHQ*TA5 zak<@~MT$RI4lYwP2yY!)SRhR^wr$pAg-mS%WfvVbPX=*8oZGUZX-gbs^$#x6CxOjaZFLJ@zYN{!FCN<^$F9A?* z&oE8-+$(o&&DLJ)-VR=ZvXD==Xd5AdDYe%2#=}p%&@pw!=sPwDu!C-#J_rhy$CUiRjE{7j$KaAH#f3i1ESp^x zk2I!7l}qb9PO%t0B*a7y*gTRnosy)oR=&X8Q|T^O3=aDh#c4V6T_QZJVv77(kSWCI zfCZkwPLa@5d7myqg0{&jeJ!O|)+6c1^k*-xnO|c6JeN^qf3T zLN4K7V#=~OGPAk{xC~o}@9nT8UBp8PNAYQIm^r6MW3(@ymaR9`T?AgfK@SAyh*MKP zxJ93GNJdxa@|=E_E<>iQ4i{RoTtrwZ*0VgSEQ-~y&OoWG<;^OJeOqrHyvcH@BdlQ5l~*HK=+!qSf+gwA3czJP}+Kl09`g2aQ&qe=#q3{i7c zQFq@8E~I3C9r59zbT{&@-nhx@n;3**`o;b@XPNq93CgrE9TTkXk#qbkb zMiS@WTGZG2rGtivU9Np*^uBUR@zR0pS|es=aHNsqO4*E8o(`_$SSRgoaGyDg9JGVW zYE9gSZW)W?k8~9aemL+(SHyF$`Hovk&}qbopH8?i=19tI!sE|U?V}%Qvtng7KCTOL zeSIY2##xoPb|(<01Pu!0QzWxxe<8G^(0NXt?ZKz_Jqf9)`Qfk%wlj=nUH!wM)Ld@! zx`~lrjvr_GRPU?+xPLLK#lzqZ{~^NM;iZ)j{TwiJoy$qnaLbq>`orM~Hy=nN!KR_y zGpbzZ@I!?|TlU(*(b& z!Wt|zef>pKrNx!(dQg7~(Rh^U*6kE=3ik z)s*af=66=zrZ-Sn`4Pl;Rxo^i@^tcjDx;OM0jb*M*RF8Arn@kTt_$)MyQJ`&-eo+} zwm$|=t1X`{M$Fevok1rHa6_@iRXaydKJ2I_=Nn4Q-nYe#lLt(e94hN@(dxh<9GrG0a6GGwq z5^xXF7H?Q?%O}eCk{%!8UJM6=E>f(#la+(YVgjZD{*{{LDlO+>OePciQCnJ~Rzr$H zBP*`xtC=7J;Su3g@*`aK+GLkz5+$l-;dd<}#9c@j`=)C2ys@trmRX9IEDe}inFt#d ze547%*_T`hEVLc!P|6DkijPMwfdmnaTy@kgj%__QGu&G(Lz)IJP&qGd^DsR#7@7#k z_mIu_(LUvhH9j8Q&56BlF7!S#gco>-%_e7^vkm;ac0cQVdB^$thUZyQwT$b)&e!Hp zE6})KqgIYA3=`{nw}=T1g7?1-;|0(_7eGN9`{|x_Y#HjUo10Nxj^owNSZ~IN6QNn) z3wC2eG3DuYpHDk>G2<}iDBVQ)Z>y|kw)lV|UMGc?0%j+S+S%s<;{A{Hzu-)nshCQW zu=3oRi?iCuCaWGeA( z=I9fwq%8!KgE*W){I=%u>0^{jPaH@;1%uxYAZ`%#HiM%HLlV$GVG30ViT2%BL}C8t z_6{#1b=g)fHg~%*hhBHPE@u5umsWWd8t9KlT{wxKNZI}SbK{LhB8#d(!rJ#{u( zs;qUdx;e#?uiyO<*b+Jd>nC?zVKi?rA8(~7`NtW#h2-3ctm{0=n^z_h(aWmk%GPqhaE`wlDa2Q(Tx{6Y-h|c!6ouaLV zbK@p!r2>5xd-s00Ija_L2O`GIOzqu#)~V%~+#3uB#5K(68Q>futS*_d!1=QKx$BR? zP)E7jr*enN#M40}CafYM9{l=^>e`a5fLgg|PaeUchGmhD{9wkxYEnQt^}UPheeOXc z%nDP2ZWna`J?2BiAd#8Ie#bMf-ZG>bG@`9+j6xL#-wu^t5`5(XGwE72u0ad z7BMR_Tsm>QIg*2vF&NXt9|k6I84S@RLe<&~TEN7>Q93s_)8_)j*8Uh1bUK;k?9y$8 z4{EWD(Tt843n+;jZj3TD?(8XgMq~Mwea-CNn07w%9@CD+6}QZ-_@@b5PP_9BlArc~3YUb%!I zbrBq)u;=v@L|Hs{mL*)b$F2}rpO61aF!O;!M&k_N0(W=j4}jBaO)3GAi)UvJp=}*c zkN8DCcoU=>cbo3=O#Wkc=k1``9Iw=!4Ef#-vZ zjV{0DjcI{#!294b?kjKlOZBYxpJO=`B{1e8jf*Ij$0FMbpFiiFFBe)me4zdBmd0@8=G1^fYR0?>(Sj=emaC-q?JRvUM7loEw{@Y!r616tz-O z<@_s_o?CU+OdGK=4Sm-N8jINGKlH=4o!YGa3!?H2#f?80(%80Dx>2cKj>VYL1ie&W zD8yaMNxtL=rOWo4c-E12_oGf;x^wP`-&<_zk4XCbGG~9&LONqjcjF3Zk%jT{_Zorw zsmf7s?E7>CH814iRl5_*emOFU198b2*6bSr6dvxur0w|GMETlOP1TcoBO;WX%qdqlk9B-~sUP#bCATY!cO4&7_ zwx?>`M*dKYGU|z~&lJwL?wX;V0)<6OETvsQ?w*q;nE^E>C&oOk6gHNUM~n7X0+iF* zT(ugUX#6dGnx3L&7kEcS;sFi=-kU74l&H~jQZ3(}rbZ-*(WB!}fTTtw1fqsYNirbY z%fvAa2DgGdhYN*;LkPO`NULt(b%duEm58{w5QOJz9uU4Dp8IuU1un3pf|{EB zLnrTnuV0xyEc8gbE=1Hy6vviwi-NqPFtLkLHxNOf2LgtF8++TFyk%63N$V3ewr5y; zv=Ia5Hr}d!mQ_taySA3a=TWd&BC8F&ZS_cGP9KlccCrp!gWe2x@(wt^fgmW{*{tm<%fy|YfAz~RkCN|^Sa=vLVyedX`* zZAT)zl>aswl-}tyYJk3XF-;CLH$SO+ACd*j@11VhBYp-n-tA(VCj1Ecvu<4y_Xb`h z&l0$myEJVJFz|(!@-g6i729cqPzU_7nWHHr%Nf7tB&lN1y)Ssa-h?YBf+mOvL!&2D zU}2nL+}2@Jx6}AC-Jz3nsVvc7enL%5M&_jmiKGoM8Idz7v4JnN2dJ21S@+RtWkv^- zD(0tDkYoC>*dN1_wh~R($2ejJrU(fDa1^?taxggH!tfLbUYJf3Tv+9B>v*z3kuwtm z(yvv;VevIFA?$cqg%uyS>&c+_lH)xJ@v0zg4E>k zWnYdpgWx|6om`bce@qM|*-1OPTP^JqqP}?s@<5mH4GvOuL%j{A?;j<=hs{%7c=rzu z)oydrNmL z)0NDholvpk?XIE_`cS7Gao}kl7QcE(&bzeQ&h2Ecpia*)mVdo!yDzZ4-EA<$Aa4MY8pzy zk`B1TFO2u<;A^@g$NQuYXGJMoVA&H}7=RFh`_+CjKTJ1mZJ&o{9WQH}oACz-d0P9% zM~{wKW-bZ?Z?MH@f+YoTqG{mp1O2Iyh(3X{9`splsgn<(QOZEf;IlYODhs8AMJ5h0 zW!n&{pmTsjFypJB?_PrPBfE&z`%&ZWXgfTB=f#@={!8m}8%9h%+A`qg17pLhXHZ|I7{7TF(qOb8QEn z`1FgdFuM4|BQ)~#u*sok*4f{4#@YI|PL5YLAr{yNC_(3=tf8S5MPBV(4-(yRyDoJnL{ zS44wWZq)$6gf=J=8ulIocMAM<8MQU(nIQ5N%gVDL`FtROzyQfbVhTt3%CzWFIBNPH zI|pkHso6Eyh1^u+8t~;2_Q~={js!@OUc|oq@>@I-O+m;9v_VI5CLQ@Yv~qKHye2A&SF|S&Co_`0(b#ChSC_u5`&AumMUkkk;VV1B2l8&1HwG~p%~aOn}9wBM?1!(f!@ z5R^3TE7xC7K=l(V2%&4K9fNa70KW+qZ?l)_P$%=Ih_VsG*XTtzzlPQzm6KXqW{kvZ zvXGvE<)w#HkAP2LLMR`(LJAWfD#Am);E&ajk#d$MjCC=yhn^=zvn}dBRS?67$5k&D zq$r45mY~uSd(DMI$yB5{v)41bSrern9-a=vVIgG;`IP>pH;`i^iq6bLkbE>QZO=k) zphvn4Mi)~kntRgdD?-kGdqSYnW*q$=aG&(Hteis5R90XXkO{N{#rxNEfZ- zZFdPeNQn+OsKV$DjualkpgW@VF{Zq9R?EY#8c-D95I5ogj#uD?hjS4e+57w+mqfwE zgT0xbuQ`5yRy`ItBbMDgqM`kk%emO^FN-gB!8 zVlkoDT?zabebfNfa-K_IuwiVoYFiH)WH^iVSd2!@SZ4(^mqs%a;4VF)}H^R&Ely{LnzE5dGf`TvSe7NMrKw@rePEfx3`8`Dn1s z#}V^l`xGT&y&0seP5xBUDmx#6>cLr#+e-?xfZ3Zc6Ad#(kx^5skcBS_v&Y0w7^j;{ ziR~LeI9_}?EnU9t&wn=U5tk&HuHW1Bv5ro8?bf(IfDPCUSYAu z1{}O%zmZ{z9oq4Q(9<5Bc2|^K)`SqC@$qAS<=Iepm8-&O`*F*SpUO{qp@mQlfMl~W zLn=Tsa-EGx$VHo$DWHrYh}QeU7b(d43x|Vi;G*Q}xC=e)a1yP=v%k7A_-X>sgKOkU zgdW?72&sEd^ai?az9SI^-GH_DVi8SG{UPd}nnV=fe~Aq`6b9Jmh>)(}cMDphaJ;^* zx`WY;*7bLO_=yg#51KS&E~_83nU(JT9o~gU_()$fvK}k!+ourps+_oa4G|iJ1MV6- z9fG(}O}&xYxlk#Lfv#|tp0nr|=FD+)@bP)A1WDgM1su)Wd%07%7z_HsY0UzrdwU~i zYr5sv;3KPB^~_#$*NnN)EH)b2_v8tBWUwBB`^@M!w0$tRTSV|sDv*tTh>h_u%)M>p zC|;R9uw(sRweqYk$GY<1bj{k^263|LrF5wV#SJg=q4L1mE|&M2X&yISn2+b2!KQk1 zAU3l61xuLrq77+e|9+MEwbcI3l#_Bl4e4o1@Omo8dLW#~zJ}hvEPnk7WAaw*gFH+j zx0&=2zRhO*ROPxGwtQ}b0E6z?ltUL>XZ3K4C>COg%${9(h?mH52lG7zh!_AM-;b{{ z-w%+%xOCTBGsvb+z=G-f3HiExH`V|>dviD@O*kDrx0lI{)qeNO{;luf&(fKq z#fE-QU%9!cp6_rv;E`6qxswg5GTgCN`h_)6q*)*`zksv7lo`;t)%38`J33XJTs0l- zIru;9`FH;*-+Vjo?tY8SV@^%eysPiI69mr`>fOn7n0I6IzhUlvTXuMV;qJEcg&nd) zn}7Qg=N_HG^yLH@G4t&k_~f_N?TEnK0f#Rd2PAB-qdD*TCvsM}nbYL7zudcQY1ykZ zBSlHivrJj+MCqCF;iyUr_vcUcI0Yszd*T zCA;5Za4?B{@eV0>{leUc&x{jW0(c7h>#DgLZB#I>1jAk{H#2Uj%;jsCQh7gb9NF{INqX4HqHx(k-ZwXfxld z8d09RFn_B)bW0Nqr3LwwJR}!wubIIJLs$a-YsFOS)@`&6fEG;oR+3jM00fi*41tXv zNP*Q6>|EeL`q@MDVD~v}EuWmVE#{Dr!?FwXo{W)0N_LU*3w!Q1sYh4jE=F8^g{u~c* zrkCh-9q%}X3+p8zmAIz{H!-vZ<>9TMSLF6gwQZo!7m|JJ$v#}h7qS; z^vV1Xp_Z>8vS1!v^@=NdUujrtYvp%_P5E06r~C6BGER528G6|3JNac=EH}q21Unq_ z{Hqqq1rF;J#2>zHAqDMzZYZgwR~51$XUuPWu%`|O*W2J+yG_VG1K67D);w@fPwAK&`M1OIR37QO)nag2>317 z?Zj0U9+Y3<4t@_$li-q>$5DksxM@-}-J7up&+Jo~ipyu|K2bQ_XxhJ7Um%Oop0ITv zj{8FpW=R?Zgq$OKpg%XoZ=<9z5&G|Z;`c!lqamz1ezV-(88n22cv?l2XzZCKg}G=j zkUnzE=h;hD!<*Zi{ZB>A$JO6Ln!nXEe_K{| z7B2R`>c2N^|5at9=ILk-WL7o?{d0CQw|4=u|66hM+1%N|)ydS{8OZgoK-|IJce#D(wf!zPN7ZL(8fAVmVQg!(#`1waC<;(`p z`ZxBEv86ujSpN<5uc72eX#d)Lh*|$NQBz|D^8DwL9mx7O$j=`&Lx0PL{wKhHy!|J_ ze^=sv4auyetN>*FZ|lF~{U5DW6@V;EENuU6|Nl|V#QHzwOo|_?%q;r1q{;s8^q3{g z-KS$u zXtWw;YCQm{a5B?Rm1HqzgQwKrD}nwM8W7rx7F zV9KvSkbN#%fB=p>EzI+iUOjY-@qq_$TvPzE7NBR_!U9t2Q38D7wNo%HtwegL{{EaP zz^r|Zp<9{CdFkCho{U?Z0vZhd(;}CE9~I6X_;=O%K|Hp1$g$fbTDCA&HtamO{0g$& zfoj|P;(hw|(bN>G-+B1jQ+OR5*-`Dv8|jqW1yPWBda0CKpaLHl^G-FHbg;b#n)&(1 zOnERC%rwJ^1FAgRNVZRyc;}JV;9#)d2Y5T2kiR|gT4sZJ6oGz!g^ZLjDMDLLwc0xz zv3S0!SA8;JrT^ZqupQwcKYiPP7{h`SQ0R5_;z|~>kP=TVWL0ee#r@P80!w>eMlQWf6?GC!VwN6m%(B;|Fl(9Y634-2N z`)zqqGS&Ti#8@*Y%6taAg3S=yUU2j{7?)gljzA_Ba0VkJ!T@$hhz%fENPsjdL^1@E zG`N)rWSywc3K+a7>k7av*xC_nA<%0EQZb0j5n2yYvj@o$0Wm;I1U{@+js>t0XayT| ziHemkS{8?0h>|9@gi4?T>nSd(%!3IrC>|MynjrEtLsf!H7hIMnt}J*sNNwWD3c*W1rNv(IIL${zR>^uuJawn&S*Lf8$C3oRp>aX`Z;)=0M|r50kv z_>`XzdAJ8}htScl1y_&Fp0f(F8D%-DJ>aAtX`AZGql0b(^CAeP*ZI=KhqMdcpU|Ip zGnQnin>r3o2ht`8g)|vRVN0QgiVu4L`xb)M$DtBfqU1srhUz(>XF^*Wvm)9dLrA5V zh$$0Bf%BPyHmxC0O~#r`pGuIblQeOZ&rHe*S6jqDsfr>8Xh?~YAguhIh6+_`Yq zXhv5m6*;Pzqx?aNFE;utGbIR$uVm&8&<1adL}~ zno-+y!!)AJz9kh$IcNKDe$6j!?Fz}IT;6_x5uXCjj3;^o!EajMvar{&4H?cDR2feg zNVI9Sp|tE8j%%L#e-5PE=$rZuhgt8M)=w3!?>APKGH$wcpZW5q>({Jfw=1?!-y`3X zy->Zd!U%?Ygm)r8thl(*w1@aEqMaOWw@h6{?ZQxdQ`gSR6mMo}Pti^xO%)&@;#}e^ zFycDRe%Wpzbc$y(V~R5LaLij!UrXB6IeDH?SdKn$8?YN#UlCk=Yk8qZkwb}>`ZoN% zIPm~~8o?kUrCKvyv${Fq!Q{gFqF9JeC{id|2&2obtK66Q(fAGg&Fy*pX8H2qdHF>N zk_WN^?hw8ZQW8=FMhJlo4jsxBvcDJ5+a5&1JZDIuw}1^U_A2fcDgeicsE_sRjLXEp zQ9*U;*`n^@=iv^?X!1!ye4t%Ac4Tfu>RU9n9JagUsMO%6MJa_(-k(xF$)#v9XxIOi zjM9k$771dL5MX&zxH*+R%&p6X@1E|!@18TU>m}Ep{&Z^GD;=M%iZkrh{z6AgKti;M z`W}hVSGp%(b!*t_z6ZIS*dG3pa4yYze9_X1k>(%I5UtB{7rhIuhcKOSV zv+?pY&e|63sWE@#@1&zBGAM(!5$dh$Hb7G5Ib$jlX#2On(|_BK6OG=CzW8xkaJsvK zy4?PRz4mgR+aOnlE>-ERwJN&n_qJ`{b)Cf80qvw$FUKXvqs<96?Z0j;sN|~DbQxLJ zU+fQwwTh{1cQQ`tBHIqyV%eUpThv!tuceR~%-)%d?|j`+qWqO`vZ?K>`LsT9A9B|D z*w*wi~T96K#XlnW`=Q%Dsu}{Ojg+&C@OoW8E)CC|0p%u?=h`b)B-+ z)>4bb$A!m%__68xoyXqIXIVdo*Ot3C?fmBf(GY_$Ld2Ma9sVN^$~Kjvc7w*hwk!Il zPx6o3xSMk$Qp;AAF`(j-e`4^VCOSr#t^+hKP)$V>7c6i&m6Zgg_KT>8d zXnlm_A?3Z=8GaDN+ZQz4g?x4ie}QNVl_(G(G* zaK^jOZPa~Qdi@wkZaRJnD>H*P$KCH*Y$){VTO>|6pQejYTf^_Utg4!-jq$*gYJ;m* zr_!~~msjznsh`zRZ>Fca`PA@AblGLXm2ZoW z%NC`bx2L(wM$`2XpxCe$apw1=r)s5ssOi#addUXKW2s81>8Piub+6jn!OQWel=@4;-A3|3VcBJ|DfT&xcjf{1ER}_ zi;EdMo0|by|HbjyMv1v1N7nK^%;|9|nj{(r;d|E3B5 zf^czT7h_uo(7(LI`F{w>f5G;@2><^H#Qz}x%&M*?F8}bEziwDQ_=Ek&J^@ztAC6?q zKA4M@izlP>U##tH`auAU?Op!%`Ur~kAI6~%&-{1J|9aAq)6w}XL9gm*XX0S{!B!m9 z?XCXVbAa_VbiXas1Q();evE@?};;c6UMC5q} z#!%O6{LV3~Op~D|#XDc--Ccmf$+LqB@Bx`kHT0d24gpAH&ypAtP{>b(n0+g6%HxDXLEp26urUM6Q%29If*N(k{f2y_ZZskNkBdDY<|$;w zV{hT`&u$W*%|TWl)Yub9Bl^LC&1r$mN=|0xPJfew=0C~tAyjpBbhI_M`%8maK5`Vu ztO;cMmpC#@Xnt@=78dw_$mZW1a|MwaHm-~N)Q#7{wAc_C4r2NCf1vhn^i zDhH5kgfU0q?kqjX1@!No8{xB{P$IG`M1meMc7+K)zt)xx<3Je zyTby4ySoQ>2)=L+?yztO?oM!bx8UyX&cfZ@{j%>q59jSX)*Q3D$Ecb$M^$y#*G!^@ z_EM%6X6DX6I9b2aQ0NVPWz=U=FS?3&E_* zk8Qp_`Y+qC{;#9|Ut0OUs}BFiPrg?9|NZ2DMV23IJe-_g>;1pnX0HQ5N7eL0=!5?- zBbBH7Kgf6_8OQFKD|JXWzX_velu-C#@71*JXdM6qR>ht@TFD}BhUmAxLT2B^%GbdUkDHs94O6L3S+{FK*^f@I{8P^v zY=P(^UiN6Aw%76LeS%tqP4TGs|LM#6$ctkcZU=5eMYI^0R^G8y;-Wl~h%`SB1aUx9 ze&RW48sQpW*Om3&ww$hRbD}G6DqGW)^7HSyGNC(8A%rT*(4It0t!wjy#J(a8@2XnF zHC#Bli|Fiy7TN3z#cIICrbvFXAW_SQ(EQ$}Cb@ZmGy78iRUBGTWXwm6!16G#;fyRs4X z)Lz*-3=+OMCo6z-=#OYTF>QP?b{!`-AsAx{yz1oyORI`)=^ZSR4IvlHe~R@EYuLx& zr^a?k{2Ckbp)5|W>}(C*@|n&BU*98(%*WX0bcYqPeUGbhXlwt(JLPvzSQA-{12Kl1 z#1T2dJO>I&HqLsE(1R5w$<8cp0LOhiG2^7zbupJDqI))u{~eyM5lAV?iG&F)iDJhg z_Jf7FFTUGCzg-p!^hZSOWaY)g66!#%i{D87Xi+*M$xZ;=eAAci9obzYG%2k~B1^-s zgDG{c|Bl&jAHh9Y8R11TP6k)DIx<#}en$59P4fa-9)MRsCq?s&!6SbV>#ifX^7Ezz zbOZ06-YNC@b86c80_wO>^iJMVy*3{xK77AbAbC%kI?O<2u53aYM*8g%k&BE!Ru1z0 zjQ;zjT?rAyXXzcka!@?X$nPg1sqr$~=GG_89P*4e6zM@0qzlI8G_{d}WNXsnJsUNm z6$toCCGEr-oaaMx?u#@v@5F)g9k^=>-(0Q|GU-@*GS?6f!kZKI_0e}fZSk}b9G!nB z&@X~3IbaxmuVZ92wq(W36nfI*GEcM}7!!Yk&1if$^6c{2k?JFQg^<=2q3{W%1x*o}&;JfCRfGT0?Kk0Zc+rAcUTxqfb(C6f!y=mdn22 z++m#Bo*sMjuexu4uc-cW?XxHMn0pOWNgW~ANLQ_-rKvQ1EQhy}O^vG39|P~OYEM|^ zQ51}7DIrpca}|k2wVgTu4KPCFLchPuSEwv!jCLZ5Tyc@84ul93=8f}Ha?BOsp;VE&U!IWS$WVRm%qLI%j5YrwrNs<#wc*$g5+*8l} z7rL5EeWecTrWA{EnsT5zR;#40rg}qO$4~=V2OSE~l&%s>Tn$>h>!Ai5E18LYQwLO4Qu_YW(q}g}wz;mPwXx&^ zt8#}Ldb2#@MDL#V&%bf4ZhoUUsJQF-`ic$t-Dc_jx& zNIU#!83Jv%gt_m;`tk2^BJ2oSn}&N1@dj^j9qkodBc7t9DqWcY;k}V{uPbyL=0fL% zny#vjk}B7ZPajhILdCG;Gz&Bu_TQF``Dihds@*hFOnp@~&)!VK?RKHkI`zM*m>m>J zs@e!+s88BcCwcL8_(7p3bvsQR@HO3PCuK#j7n|;W>AiU}RxT|&K9Z1Ncn!??54}EC z>KgSoVU^~J##t?GkI@bzO}JZOi_7RW?Q;0f)rtMCikBD#bA($ups~B%`~Y|?J7WUM zkj~ooLAC6^M|g_M7zq=kVttibYZoOo=@|>IAe^KpNc)SOUM)4J!CQC?d!HlsAQyH`YjX3$>T};(~4TFh5 zY}U;3or~tB9fP0Jha0VaSIvjQT0kn9rlbpJY^GbIM)VCv21aZcRyH3AI%-(Gdfj!F zT=+^}-dc4{)9O&uSlQ@DJA93ZcGzFiyK!XM34dKsyU1%D(`dQ13dz`OGxDuu4p;Y! zMzjqcf;w2@W#`J>VCk)^O~Y$~86vX&96Bz_j=BFl=wK`SsftHbNQxHY_S?Li!%{7n zHlPJ+AG6HiGfK21_!A9eP8ll6&)F)pUpsT|($oiTv3=#|EMr}}zj_@#r6M8_;IvE- z*uW5SEO+8N+pbcwN?4z3fLTK>XXTF}(<8Wvc3Pt2$($=0pugvA@-E|U@*W>z5E(b( zY->HAD_JMyms#(c^$NYsII!?(Jg|7uA9xkoz2QE5fctE53-k=n&2hn7SJ|j;J2x(F z1@h-@3?5xki?=k#}?8b-3%Ru=M|&wAFt9pDbVCih8` z5|6~zbJ5Y6H;zM92YQ{hiF{R?X2%@*{pky}0l4Q2{n}lb67UwHDFDMCiG3KppCDqj zI*jXDy(7RqJ4Bxs;mMD(=2IJ8YV)d3WW;#@gLG<>C7w;L_ku89xcBH(=r`|voS z*s~k&L9}{K%p2~xTzvR__A!uxyY*DjYl&kN^Ya>SS^NG}t7*J=K zk0LK*b0M{;&}tr|?=&NI7FZ$}iVFlh?R$wG7jIlLpqwE90PsSn^K5RQ!vT!yPLG}{ zB(KLn$aIUqr!g7;J*5K)XWO5nM&aJm^KTgAm~5G`KvtZN#r}+(xDyY%o=gw&Z?_y2 zoLSF6R_W#t9&y!+R=?-R0(|6st9)($01;mFdXH8s2H%8KndSdlE9*|BmXWp+Po9!y zf3Qf%aVXA73+U2F7GWcwty6@YDib085FVDLO2@>1w^wX)AQ2NYU!kE6x$IyOV29R`%EGxE zm}osaZGBz>t(iH{FxB0Db@k?R`fFfcc|bl=!9W3YRAY{<3OfvbAuukmXEw}>%6@NL zn$KU65D6~JE}YlF!@POBu}z$~57g(a93BQhPlvKjEAv9sM$&$uW+!rpYl` zx>$*AwtCXi20d)>v2!r<)caC^a+ z8akwWJ({FM@=ogXsZ)&2o%tCya&)VgS^2w$*ag{A9;x4HtvY)#ir~bIJ!|e`@)u@V z%rS>_d^Jj(d?xQS^%|Aw@LmoImfx<{@wB?dnCEips0;PB_+dGYS z2aUB!*`8ehUq~{y-fb8knGM{xsP9x!4un27r}@nm)tj6>Xbl4zAyxB>hU6y$W+-?& zo(NOx++WRkR7_%b2PMOs(!OM% zI`_WHa@zde*=_5=BWi(sEFuJd!^-{+S`2aFY|YuZ#!hnLx@1>R4~MYWGsGkRd*}m- zPn`G3mVe`i5OId@S#``&a+ho8BnZM-(Kj(Og*=i%rVE*qYuYd_*@YD%s^EGHa7xVK z^$J}_Grdwx0ANTP^pVI{ucv!Y!zl237AxLNua@U-<{H*dXJ*AwhI?xpKbi;~3XK9A zN)MV6aUElP~=QEs!x zH`heu^9~fwqfwi_WHf!VA6 z>L-B4E5bjKrJ5aarp%Q06)`qPmoMgF&rX{Adq+e&$LYbeE+?~dXH{=Bey zF2PObiHHc-M@}eT-yw0%ej|gJ%MW3v$njsZdq$Y-7PeEW4$-5^WG~hyLNu){MN^v9 zo>q(e+WVSK9E0bjWHwn?OeBVt^&n{*cOu*+4_#=n>Z-ZWbN`3BE+`q!P?!RGi zoQG zah0OtK2VRs(VUedN-88i&sBMc?k*+2?}XRUm4Q8fqUiOa!27)ud!W?*z3*CoL)EK^ zZtIOOPwbXG5EeFDDZ=`YZ->>`eiU_sBkGGtHfQ(4aiVuSepjT9am1Jr%!d%B5b2Ta^nltL@_`zp- z*=3{ORpPXH2PO-!f^mmP-BILC+ufuOQn;y@-gh9AJ=`?oh64ST1z-34;+bAe`YXwd z=EMHe6}7A09shNeCY&kHX8-tBvMueG%?rRe+whJqp$_4frrBe@Hk7U*ZKx^l8n2QA zkwMByVEhu`92jyz%eb)#pBt%@TEBBo9nWwX{kzVxdwxX;865?B4c!_B12MS5vOc`{ zi?8ws$7G8o6TxB>W8TH%ODn@$1Lsni`(%2ECI5c( z8I%9i&xv5B%u4cX?Y(yt`=jwk(Kuwohg*jbUncTjOZ0rNl3u--2tE#z1m6Wa@-O*P zh!a)bD^l%x2u_4IIB>ZEY`p!@Z*JT{+4XLnD}R3p2{H_Rn$&U4@C89UP#Y8#TZP^t z{DUz#@K@^f4LF%f(%t=YCud2{$A=S-oC2H|sW&cP-(zQ_}^NU@wXQR-bBI&om z*XLN|j!2!z+%z8np5LxFA}GYPzowe5<8JW2P%y5_s;=1wJCgr8ACxk65cCSn&fTPF zQRG@}?0>>UXplC zp}eZvye0I|34=+X_us?;>$W0XhG79S=wPt7Xuz%tLuDQd?+i(r@tbo}6mCKc)Vf>C zn6}WyX4Mt?U0mTPYl~G>S06Wtk!8+$7CN*ZK(_;8%k+eMaIBo-9ebBNf55k$70P)}+jlLsuv+J8l5tCgQ-$=BrKMhX57&#f<9&yK#DWyaixwY3k;wCFU{(J4l2 zCnx8H3QB%J_7lQn2-`+Erex6@v^XznV_=I48+u_7D<`Y2`X$^|B=cw#1|HQ!M0oR>?5*NReKC$(F}8)K+bT z6}YUa67HJ1vc&a7FiOqe_$T1hYFK$4m$F~Y{%a%C*&aCA5f^Z8k(NbnJmKU4T>6%V zUK<7M#!8bW;p%1^8xVq1nv9oKjbmW5b^Se9RvIFcDX;t|&>f*{B2i!CT%v8Rt?!Za zWQaGTID;9GuKYh{13lsr-Ltj1eyGzoDZ>BUBrZNDk(iea8L)LRr$XU4?Tf0E*}Oct zx7+hVKHX4$5v14>kKC=d#9{Kda@5)$Xl)}Ke*v7B2I5#QA5F*CfUah1j?bhza81HS zEA-lRZN@v>^@)jQaI9VI*jrQ(zfLkHXp%RsJ{|-lFTt*0?35)}Ejg!8gw&`MD7*2P zM9;LkS+Ir;S%(asnx;a9!9Yf0Z4J<#t_(^WYXGS)0STV>0{m{8RgohZ2J`qT(SA6U z|McEG?zbq+`#{-O4g}vSriwwX5{eQ8ZQ8G>r%W{cV~brQXobg>2JhnJYc68SD%qW) z#p$85gC)jS81E+D5$)~(yPK`B{(;&LqeV1=!96rRiI*`g!a) zL)+nrG#$_S0+)5EOpPT1r6GV#8LW0RWn3jjK(}~!+p11T$vFNujU=D*%66zmoxotk zY^=I!m47zKP4F&*ZY{;k()!@IQnaD1<#kP2C7HGrihz&@~|Jgt8Wn-kNJVi@Gi z{HDlHed&JwcnUwgjO8cPJ7)?iaZ~3i@omQQ z&d8ui<;W~VYFCJCd;R2TQULGOtnZA&qTcLUKF=VgMK9q*^sW-Jq@CSVYVNZYAUzm_ ze0(5TnTpwLVNNZ>wuc)H52(ZBJ_{uBvTI!O(*7l>ub6X)vqOGbc(H;2}GAt&^J z3E6OTY+Y5*-&+I=IC@PZ>7j|IZBIEEdU#kfX_I#gbj`BFqUUTPW|T7EX(!eyPy4pDxd9|Z8>1EbF^9M~&ggl`)f~wZw5AMDx`$pIH*PO&a_Mkv` zy{qo=(@!EjpC2e>Go?RT-DW-z+_!U{-3VJCX5Vxi>B131$$q_c6H#8B)HJ1-q`4lLg+xX!;T5 zS^Q<8;vD4N4*{9Y+{?MH+0Vk{#CJt~TT-qdHb*oa#N@!tYx)bbWelc6b$hF37agjm z%+-nW!>nDO0m7Y)EuW!#C*OTW$G-M(*CD~;=%ufi+Q8@gL;v9onin9u_wef3i=r#s zuFs02?b+;E|GN6h`z`&A?=Ab;>8<$f@GUk6y}gFa7PScWHW1g)FO~)vWZG+KSXra# z26X$zw+-4x+J5Y{*!B%X=v|^!+Aoe*Vt34#{ zt<&st035-L!8heIId4agzuPVnO9YJGP%j2_o_en)|GqRd$l3m?J9Wq}(K1h2w0^%{EMK`dk*+tTi0vMCU3jSe zpcyvMOO>x1A)RwqGC0~dp>pXaR@UFy2G{Qs1#j@+kr|$XCHK=(CZ$`z=mUbnqaOSB zo#;0D3O9rOZmS&*qGVm$V07zXCI1=GZphzS)Bfko#GmRxEX~wmN1=buw2PkVn@%K@ zedajzPAQBp<>O#~;BiAcHTFR(rRb)N{4gpWbuVY{tqzgOd2CH!BraZZ@;4{!ny&h|MC)vNE#@lnl@s|2VUBqU+`xe>yP!; z+g8a(Bhka@branlPluJHNy^MT6oUsu6=L4~e+N?%K3k_a$9CI))p_TL>;}(^w}kZ~Hx5 zg@pbwR&Lfc(O@TH3gQ4d+d#G-i6NlD?57F6+dh@G9NWUIhL*?e-FT*85_%KScjdNx z?i@LUCLCM2NiJIfbho_6odKpzoE@uP)&M9Y=2H{MdwE|APs;gJqkKUP>K31=_%65( zqUwt?@VW15cOQm~;H<-`*7~8H#mAMQ`xM5=#nL;YLNa42B12@n4Z#l1LG|XQ<+4%- zCB3(2ifPyCd@!ds(0lXsl8YN47|nUngem>&EmLN1q#MJL%;CQ;v+z62xCUW`Zc?F&N@z&Q2MckJ} zDcWYCIP3g)`Z1k{kaU3(onkH^5O?p@L>R^gp2s#v z3dhxfM`qN|JOqT~s+W%Me$TAtrmJH(xx2#3Zx%{yN>902a5)&KP$$;E*bro(kG8>) zn^Ye-d)8F#kx4sIk5C=i{zBhNXNPDYJMnj^%Tb}Wu<~Rue*bu&OME)Y6SM647{jOr z)qz+u(O>fkrzDW_LH^41STuI~Q|i$n($!RXBrZ#~x(SB=VyX$OY6V*jxJt!&)o2r5!Qc({>dkBu<^p1nA!*oe zqt=g|RvsHlO)99Z>k5U~nJehoUpLay=r3PXe{wu6sEJofU4+CQ=X!x(rI}kPxV_+! ziAn6!%_Q%OWdYJS8GKUPGGw>RSb`9IpL2V$he{f^`-Sete{n z8KD^GvLH!B>{mhzNe^lj!fy&nQH`WOW4`0}buGBVjF zXgn5a{niHdl@15<$2Y&dH!Upp;`j~@uljK5F2ay3?HoK@(dVR|npQ>?{6(ZyPEhju zcg80@|7^KN87BVfl81R+r{sdsJ#h@ystUWaQHa=BRY)T@kC%?LHT{ELAjlU%S39~(<|Nc7()WQap*KRiLf8{PULXTHb)e_4&kem`@D;5)5=yQDHC;s) zwU)HL3fA6l{jy>|XWGo@zv=~fsr7#tb5rj?=2U-`33P=oi=vzvbYuQ5dDlk>A`%u- z9kJad-)Yo`5Ea=?HyvH-YRP2JG98(oY{A|cruYoT2zc=bs5=XcX?C4|x`Nn|qUeD}OtEldhOm5Vku82zC38=nu*u z#W>e!IR$)AXxgHS#P}BYlLVMTy9R4hlnzaHmr5Eab;O<;2qb}!gm0{X*(pFQ{P>pmvYe9cQ%=HBM;tBfQ8A>jI~clHhKGElrLar-Mm4$*Tv@95P~?tF zm)H*OvqUbJI?SyAvtyRys8>0%3a;?Zi4!c`;8$p8oC+Ng_|btPt9Vuj$Hu}Sbf#r` z;o+XB-)huIWT&16$Al)Asm<=XwbW<$MY1ZCLcc9Khz-zfk7DIYjS;Ozo0A!;?c+*# zp?r|+4Snx?-n4UWJ--xVLtDXmVZeYFA;-4dG5Ia7x6BxQy8N8*b6~*h!*BaF6!C0zBEesRgX-)$pHtP2wS@O7#VSM`%kgqmsGFxm0J9&A><1S4a z2va!Hx{Cg8tqv0h4^%#~Z6>!0jCau%WM03HZp~Uq&PjX79(cT<1Jl1->Kgw)4gUTXow-za%LZlIbWJc4OabCLx~}*Ac@h>uk$o&GeUkI^Of% z#($51ul|==%0r=g<=vX2VHbhZVr$)004WE)oP1~N>kX0YY=O4Vpz-E& zL+J_~(d2d;=I7<^*Xn|%O1M?W;1c~7c2m|Td3cLz?`bBNrmg%21VQShny#1HJ*xNk z+3aN^9XDqi@H|=OS`s-YFCr6B{Juorq--FR&lfo{`(bY$`K*!1a*uG<8)YNou+XIn!~UhuaysW$I!Z)1vrbKFDh`a#kbxoF#V?n;X%qM*+@LxR$U zymt5_#icJjoNVkdHP^jERJ67E=S`ARq<*SB%6c`PVCk+9o%c>_^Mj2~(IBcyLUw71 z56+?Jjql`>uF$(XMxghnXU6?%()(h2zRunEA+Rw)BOXI_=O@)r;cmI0*8K;Ypm!MXni zW$0Y>#Fcx~z-WIk$0qNQ^_^L=Sz0jEn|Bp#NCP-GaHgh7EtR^s$- zn`mfZK~a8w62Q#6I59rz)_-yB+^(@0X?q!?Et&U=5$9$xUj+?5AN2S13@3c)Xdv1# zodYEIbqhhW2^7O)-S&w`lFNjfsR_xE)mdReIU=3asm+qp!CVKiW)=K%F`}jq0HI7KDPLT_I@tZC#)>k=-phEV@NUJx8$3 z-Gw3rPN{Na@A%!}SQiY%^E_fQdZ^+j6CzAvxv66WxQTfol+{r8%20U`;urWm=s>j? z=B&C<$Fw0Iky_?xy714I6de(q)7a*JT&E{uYlsTkj(6{9Uijacq<~%O>^+{jNFTe= z`FBw74D}&jl)!oy z3?YBrW61H#HZBmW4^pY&XQK+8h5 z_z#Hjnt|i^um_PF%_i=0{-%627zF_80@GM4tutggCucR`)6jYa_(Yb3KQ{ z+j~SBN$CiXQaX`#&{j#1d$i3!yb9-}_~S*kGhLYaa}uuWY4o4mQ|#?%DqGMwyX~Zi zz^w$_{P=mO;mOYc*PoEydDmIr2|~3#kCnDRuLC6_%YXg#?`fA_Mwz|w4UOwACf7Gy z#OCN0_4T{LU)eZ{WkMa=@l4gI zTj0!7XAw(Q}CIHzH(W5fmV&aLJ zWfq5{2>YYfd?RdLin1%*W`r-hiVIldD|$%SK6Hc4=!RK<_U1U<{>jkNwxVsg0YM=0 ziN{(=ieq0?O)C;XQ1VrzOM#L3r+MDvGATwdct*9FGZIdv>lAJE?+?wE1@1gh>sxSF z+>MNh!0IqA2QB?ZwZZoJQ+F6Nr|Y0WoQ#pJGt|6=$?)5_TqD=2O(HR(`EvhiDojbp zS;NKnA4dD-wxR7SkUccccjzd-Y$nPG zZTzOU#>N@kyolzgGZ&MNZtCRe%<+v_{c?tv3fnj~c{|D*W+L@pGXbe6|M~!b6>GaO z^)F=W&b75dP^EvO0hjP^;4peTbXJ-yd?xTGoNm0f1bE=TusC!1;>F2_?*>I$T$x0B z9FUwtp!O|f$dl{tA=*_JOAbZ)p)3518C$dxfC1*61cFb8?grRiv#28-K*g|b$u|>i zl9YdcP?r@jp>B#1N;UrXQn_1T7 zmO(w$I)hr^O+wlX<6y-eH5nXGPJ&f|SOHOi{^L=!#~C`psX#jKS)yb8K7L^Qsxj@q zs6Td%AmW)?k)Hxg1W_O!kqPJrZDmaQGrf61HWB6%29Jo^V$sU`IMdE+*pb?cZ)F-a z-PDFgsgXt`+{d?|;m8=?Peu`#sCRm0=!kvR@9v1$8q)zx+vzbS@*O`S8iPTxK2Oxa zPFl+c^%0<>7s(+=gdiWYKNt}bD&K4h<$WybFd`h1gkq7KmhP`#vo&OoDIY~Dh`ZdeOHK->j6j!=VI1lYjgP$bC28Lg7R`7NU zY%S(oiO(TzbQ}QAcX6Y5TRNdEkA#A^yM)g;?^)1$*I>I$sNa?cZ+DtRb({& z0iH<|>Xx+duBuL{hV=P#ZPS&8zsyAupHGH#S`TE>iYee>g zAM7|9#a?rCQ?Awt(d-QGxVRZ%k)k0=2PBu!W&FLJJ)jY~eui|2tJj#vlLQRei{u&e zz`<^vryyX`)4O!+Rj8jcoGeUh#xhK|hSkBus!vdS{UxVC;u)j~e&W9ntZ?{Z?nkj1 zQW?s^T$alNmnCbtO*8NuWYU>a4GoQef^`XHC5h`rA6lyNbKjQU&Ks_*+r$YwYD{|q`_x;hZoPpYM zV(j?2C{r=@2;SYOaF+9~kp_NK*cKyR{3JbEQ9Dle&n@Hp6Y#ah+S*n}JP zo94BM8G`Gl{YKq#k*XViY3~8A^APlM*0wO)2FPiFI{C}v&Xazz6F~!+Vhj(^!|>Sg zLl{<(sw$*;D|jAq8gUL4rwa!*it3BKi>L56*+e@6F5jr-0m(Ec>vCvy@Mh7XTvx2l-Y>GCzym{vBd;Kk&Fo^NoNycudY-)tRH-3D%M<#gvBiSE3xUN5d7mKWK=+9FsyPQKfEB2+~A^O!P2F zqz9@PJwM6~96F2*=&{MMfJgcXuev~U(R7L08tPkE54xIATau8}wJ>)vyR+Ic0sKnL ztzLg`3giT2!4;!cf9Ptw2=TyLwJGAo;6}G!(sjVL{MYo?Ok=8amG=$~$EjMj0HyS# zsBtou-v)+g0sZRUnQ8ga5QlDtdy0<<(Sl5KEW=tuED@1II^pj9dl`}@aEjxp6$3T) zl5Nc5>4W2BQ4ZiFV@}o7yLI5v#+f_zH!LtTj3bBEMha7o?y^$!tbDzMFQ82sWWX2qOwY$^KkKqApu0(beB4={H<85Zgd3^ z4(1`TOeW%;1~GN)fg@YSHUG)Pt8`xFvY@Uj^|;}e)kip3pIJNHqcLnU&zy67W|xo;`39hL>HzOPl=qTirH{>3#+Gj-+YJ~igNGg@eLqWqJBXm z%*MEi#44vs{^;+Oa^pkvVhIrcJ5CgcM9=5_?*O84a7VzL;MyWFbq!7?%8f8}fwH!n znf@pAUkYb}x8-FEM=E)GJl2G$@0@y1+_mP0yU-6`!7y*g0H_Isig(o?ap|Oky9GJ& zhs8esdk}^{j(9%6+l)EXctQ|&|9mT*iF=Y8S;BC8gROb6&HaZZb$G>g7Zf(EE1)PH z5FlmtYOGk?bRZX9g0ggHN$-TB(z3bXRHPspskf2PegN};ECzwV%iaH5o>sDUVdy`) zIA(eh{X6cnZ@KT|W>5%(MSF%ELX3YZS6uo?XDY9W{t-EF2Xp&#wDEtBpgTqLW3Mxz zj-&=QpE8az-0<+rB%~`5B9bS^$yNANvEHav`EJ=S5QF2a%%l|gl+ONxl1-`xr+Ufx zf%sN7IO1unTJnPpuNfpjFB3zIV;s4Ry)7&ov3y+?61ywFHv75lORqf$XasUXQG9GQ zA$SCniWEBF)%Y0Zl`b&lLz+JJxB2qeu?9HkbNTJVr|su>dF>x+B%vdWC=RPc z!jM|QGd*?wc0BB9@F2IpqJJTx z&ZsEWDZZft^K=fr%b6osx;T6N{>DIOAIJ#1Q+=VFAK=UI$ajT2hhgixUY(IUzb^0g z?!CjpV@bpTuk3ZR6)cVCx1pnVlvb7&qfbbBpI=!*^sJ{}ut`hxoN-2>NvWzmUW?>e zNvK6ekaxcBTeHXqv9vcd!Wb6)*=H&+QZ-eSr8B>@a8WH0W^Vd{`-Ce-(G$tKJ}Gs-&rQU*=L)S+-twsM=B1q-Lg?T@Kxl?NP^zcv)9ecBz_Nu2H&FdZ}@# z(p4f@=A-c*_mbg(O53TIR+{#lMm~|520sBmp_}H(fnt$0`=;fDYIJ^@wrRPs_@?Bf zb&E5h&yj83iS4e0>5><7#3TdU4hofEQH{jR?+3ELNm4!s|DFt;dYr#hza_oz(f*y) zPP~D7Z-CGG^pH!1Qt2D`b0~F*6qBlr7p2Gs63P5Qf!Y&tG2|o^<@&&RdhfB92HkG2 zWOs0PL&Kd8(=LuxsGmsEWt0YfiG)afm;0)*^rn+xETW^9&QVWhqnVcEtV5;UEZp0J z7@&2M@0F<(1cR4lop3aScY=h(-p(MWb_Am}nf$0W2}diip*#RrY0YGg!UC_kqO}aK zo1qtEpNH|bbxC#9v%q~)Y(HM2iaZ%|>lYJ)&Y5*f_9RGsFYdl!@@>QYN?pM#0DZf2 z+2+A;bFZJEdo;JVt(F!5E6R`qee@?IU1A1zsRkET1shT?UrX9{nf~S5D@E2D+0Te5 z)F;qg497Cfvx0Gb26;~~`7s}v*X5r}>Y#);(Fqu;kv)RV#1F&YWcs~roTQE4GxRp8 z#nBom3KI|E6&;^FH$z)FubY}Jc1x&+2#Gaypmk^l>cQ;zkeggQ6M#~H?7hymw&&xS zH`!eSUn3Vt1nGT4s58P99z$QJ{r=q#yM;qkYgS+bzx!5CVRkx^ z&1&+ox4z6U2HtU(oXyJkc^F&5Xx>n`zAuY~@O&FFQ^(`uk~|KMF0W4u;VyW`@ALq1 z9#1Jl@uqC;o352*1j!RlSH%Qb`VzZ|Z{z2H>jpes>uu*&?^3om=>bl)Nw$<-TiaEw z=-L=@%H!{FZ9!yh-21 zPE~8>-&yoo+46d5JdRj;ANY_Zdgw^r}APmG=N>W^gO)4pV)kGuEE zuFg}gAzzQnm5r==7qBeDYLeK7r0cw}hV~K-{0wA3l+I2rBctO*2BF!b zSGb4!=WGEli9%`ekIk2lkrJFAMfE0=dph*K`P;HUgp`~td2wlp9~lK~7&v0Cq8(e& zc)wq33E0Jx;xvSu3RunN?|Ktd5DV?3uDZXYRZUWlP7Du-gch3pr*DJL5cIeb`qP5k z-{_xmBKl?U#SLzN^3h#eTd`Q89%t0`2bGbIfSV|n z5os!vdcX)~I|mnrwpA`}%wb&i&-=mBktm)vXb=r<&N+7>ZJQNF*%P8jSjtEhC4sL{QB=Y&1>@gd{2vm}`h=ya%yxVNnMAsO_!@bb$)(E%G+;%VI zFPhf)o@Ab~TTohJS`=HRu1xJNF<+a%gvz9{*wvz@-q4RxewL7Vylb zpD_(9NxMJ6s1W5fZ+|_Cr7yqtgP*pgZk|4RD;&bcjA#=k1ZAw}dBEOGZ+!o*t4xd{ ziwy;2>cCTYb~&)y02}2(#%2C503&*TEWijv9goD`vOUCYLN)4gUH&V$X#y`KQa|HK zCbYNQ(Ipqc7sSnCs4t1b^LJ~{Z-2bgU{axI;an{2FNa4BQ^Bp9JG$W(mcEsld#><* zg!`ktZjF}#OcPt%4e%t1;(B;?l_E zRQEyU-&&t(jGCBDZ;mhF`30;F{O1A3|1I*mYZLT zXfahP(*A#py#sV*&AO-^+qP}nHafO#+qP}HW7~Ge>7-+u9p3b}_dee~_v~~3f2=Xr zNY$)*SJkXJ#u_X2%;(jnCzU8!7D6apg`m*P^J13JPE-oD5|dMCrF7dpwo$abl#h=C zp9Ggg@bRH@R6m^nY}s|WTL~}DX%{#>EGs=MK5(9NK<<=vXh#kTEPl52vXpD(wKY_* zr8D%1{RS0zMY-5%{s=UkyNGysF$Ic|PUf1l`EaI@EA2=I?lO6{BCie4r+o=Lz!VN9!SN110y(#Qf z?_2KbnD=)k@nCkz`rSKJLLA$+_kDRF2k(+Cd90h(1GKiQJ_|%BNxT6k`xd8!*x9)u z+x~Xwqnhup_N&bHroWRpH1Ig54%y?q;?2Og6_-6e;P(+<2-b$J z-}*gyKUqAmZfw=M1*i;;+7}KWxX0e#j*0<4#!p`rZ3%k@u}>MQ%Hj>5yNOY_W(a!a zf8kTSg-rEn|E80UVzGn*`Eg?0PEDU`7kkatEqI6iZBWjY-ZY^sewJr{Wms;BSG(gB zuR(I@=vgR5R4Al%9A^h6V?<5`Kcj#Pp64-1VpE)O3pNv5|0w}mWpT`LRby<=v;gdA zatPfbP}yo+yV^k-sbs_ZshYyEv+Nq6Saf)6QnpJ@yYX3#e1#l%0~E zysfdOcRnKUV(Trr&Y);9~F9z9s#`8z*MOrNYPE$?@mzXl$pJA6dz76 zME2uO>k~fpleOy4KrZiW?9wE$U}{{+(qZ;J5gjvTWn}R)0XC{L#tXpSmjI8|7a)OY zUdnmgxr5Qq84HgZulP=tYDu1Ias5sv>1$F1U^Lb08Q%NnvOGwj@hcFkM$F+zck8~T z?nHQ#TbQ9$LA+jVhRl9u>9;d*V4l<)Eh8PO;HNO6aOEare|URj;QuIXYNsUlul`pE~amIkhmBb}%qIi<+!vqhcNo z{5Y@dN=xxBXT%DA3}OCj#z)U zV6>-(VwP?t?S#A-l{&N%a%dd#y*fHCDM>e%m7cnuuZDxUo`aUAy@8{Nh-oEVIZZuL zIjh&xKt)DIQqcp)B4L5<9;v?d}tE-ri?jh2bbW@6KG$&CZ6LsWy5QjLL$bXsPkEgfB}iq>=p zCnux^G?mcV>Fq#+>T)pYk?Dx|QJF}!OceXkff{L9*g+=oVj()F9bCA;<6p@l@ zmecOt5smDm9t*dV#zCUCk&ddahlPo(sj6owClmkAR9#&Kt$2JLWhFIbT}=hXGFL%s zZA~9T9obmcCKeic#0M-aET#A^?+8{J!gVYx%^Y4cv4AC>l~i=y%tS<0^i2G`T%F7| z0=CvdmRcrGYBJ_73f@|p^-PSUZtJDQL=-DeVvKlW6p`5>T+U z64O)F^ev|3qiCk$%cw(UN2>Ujw&c_}$K8mU>`4Au_Q19i#K zYZ{VOP7S6slp5KFQ<1W@G@`kv)Q!7$sRx+ENBgED!KIjuhK@Cpjf;*{i48I1(A5qW z2lXM7m3wDWNNC@4ZJ@Q7Ivd!yeRdMFyRu0mTu4*aL{CH`A_|tPMG-m2Pn;IbMt>xi zCezg&9(ELc?qsmqu3qL(R z4W*Nd-J>rmXt=fTmYpuTrZMg?>;%;q*@%2(8j`w|jjWfMt(2bHXsKeVE~IJNU$``h zhN9KD06l<4YJz1%M7?KZT3m(_YC=AotZE!GQbtY(Cv2phn4!_ZVdP;UyPDeBM|GyecN895z=H0L*{ctjbJ0;!>~=H%qqa7416C{4`VXcHkl zr%p8}Y)2QHr=)~~i+58_R=HjX3K?}*HGxJqKBZNU;sf-Mr;CuQ zo0_A>&0S06Dq4W)mz;%xscPP|WJW56Rtz=#QLv@n3| z$h13nDt!yp$ds5?Oe?Ae(9lTHh!AB*CodZOq>!o)~vV<0BBjV9QtzUS##v>`c-?G*aA znzFa2gFU0|h55_bQXC$?bGs_tXhgm41HsxRn;TGB=_3wbtZd%BgyGC2%$C>4+zXED zU)I~4;`lr)O#_ybbsrrc_9sfIlH!-2$K8uHN<@Rw+nhySuS;o}My~wtk9skq%TwJq zD|;OWFTm&>ajd*tC@lAfleXx2b{D;8eWNjc)HxTZ-gS5NcTcG@cG;dsG4+qRpmy&D zz&;D_?YBAN`+KdzBQQ-k00sXb~vplIp;6OX|{RnBjTGJRxc%Ix|<&Fe!XvFmHChT(-%+5`(5=f zYe7#Ker1g%_djnYd?K*T9zJe+eH$N!kG(!NuK7EUa`GNdXoBo7Ctp5mJDKBRD?9d{ zeVoiB(`k~%h0sh5$si>q2pEx5;~^rFMUkOHQ0o0flo3GZMTQ>`_J;tz2^NekI3nd+ zo^v9Vqrxr=VhXZISqByFg7vc!P_%_&_V!*yD|^9x9Nc8H(cfikzy5r^{J8YG+T!k2 z>v&1}eux^Av!WtbE_Ih;Yr(N(?Ahw_E52cwoFBLIK5<4|CgSSi?a5?Mnhlno=i(<~ z=hfI4?qX*UdR*&I!=JtPMT4C+TIA^Re7?@t_0!|CKkU4mW>^}Z9$|qq>9}2Ye3Tkj ze3m{;4nkkZ#OIF@TN-kpA1^+{hpT19<@k=Vb(jxo(5-5J2un}0*QS5#tTA&vWUa~4 z^?7UDzb*9vPo2?TU|!q$7;^00%MD>g*0Onexxq-YYcd+vsg9gt_f99M2)HT!h5;zi zpCe)21Fr;tUoM9s-H}a3CyHGA{h6L0l3|TW!lXhub~GYS1cvHey~vwsa=`zR3tIuj z8npVG3xuZtM}v76y)B=zMkbciqS*H3b!LtPtE=K)Jy;w80WSdXaxZlDtvS(ox zOePjX3Q}KO*K~0xC525o1$Hsg?t%IMfJf*#X)kdvX)jqX(G3*$Gr#Nr2mL<%*z9=H zKIAR)Er&<+IU&F3a`Q{@?I;FUr<4Xm0wrNYHDe9sE%?4-Ll%z^9@#eeHt9AYe1ctq zU7}q)`1s2B3PbjhkaevAY|O}Y&d?qGn5j&84)#tr;0rcTsriudfPTord?mBg9N1~@8w*vX zg^^zWroK?;Ee{Q_D*uh#o=I3;cm}-x9_>V` zqgHOW^U3$pKghj*u-{$1Xma0}tQ|OtT9XPQPf#oSV^f$dbVH68D$wn?8l6 z_fN!iBc8%}_bz0;)wgPFy&GcW> zUq3WL=;C+YEfkc@GH22Cpfu1Eo*}Cxt0gguPfJ=Hx7b&Psh@1;OYtJI>Jm~C$`sO- zk|XnzUye^wS3;(gCm2oYC8Z~<8mDs9zUD1+}8cqv}061px(B~2LOK)$G^#}pw0 zvlwtI)wd8}T}&L%;Vv_vW%1|F1^H`yf-#7N zQqazJBqd4=2MLaD(KT%Yq)(HA5L^0(=6(;_Iv9<(dW1YPpUw06z-TE`au#Wsovo_)`?F5}E*gM5l&cRN2Y}}c4 zVBVf}YxC92JIv5optAhfncCK9n-T|tbVFoT>KT(!+L^PhH7XJWggFY|^=8Fn9VSiF{UKcfXIz8rps z8mYAA{%lLFK&fs9yWmckm34axqrWHSm*$rgQSj3c({d2g7$>Ve&s;RG=KHX;rdIM+ zH0}^6CY-ddjqU*7*#>65nV?=$#Kmr2-WRt&JnplZ`LuBJvQ0!1Nk%l6l9+OLbaZyS zJIs80BM!V&;{BlO-Q#$Sj7Cx_9nDPtb&m!=Z%fQ5XyWsbFmY{$nE!oB}{^mMr z`-yPR1D`?6q)b5>Zz}F!1x*02asSkM6E#nkc3d$wT_@pevi#o0A!Q-$CIJJJ^ zc1$bWhY&iqHv;ahbA*&6?1VIwJTtm*H*~Hyoo-*VipHxo@8{0dl?< zs8&i=#11wx-Ozg#*^E4Oe@d-LDAf|bD_oSfSg_MZuXg#?ASNC4P8#E?HdNECA22P+ zvPt*)hSLODiS3zVj2@=CD_-8Me*&BIg2 zb|-rEc2P{*{6S=LQW|SN9JslMIY4~&jngpAh1k^(V^(b&m_U(q^nY4d|1xm?@sBcn zWe8#amxuM=mA3y;!>a7)V)Bm@e=Bok1yy8)gs3Gcy)cpC2iT%$cSXtTrpT}P<{uzsv)!@i=C9J<23qzn7w|s~w45A&D`;8&C8m`i;9&hX z87<m(BKX8SS6z^zSm-e`HC1zmY%jUJecjaSGri~?IeXuR&z>~d<;X_oiN+D&(F zK=eT(Dibj%G$xD3k1LVCJC1P3o5kgF|2O1j7Y1QAZ*#?bUSB&!(`*Kx-^eBi9Zzih z1hdgh;>>FeR?M=8scP4Lk|9OR3z+0j(i`kL(;{Bu)# z61v-C93SYW-|T+-gMG04m3V#6btrE zI03Nt8NzODIZt?q>N;Fr0WJMSb~*iTI80E?JdS8B1y>#U zxJYG6R6^L$N7o0VR?Yp_{IQ6FgcC*8nSdDWL(hGPcHgf|Hi1LbVV;5$(uV0@ zKH`&hUa82%t`WDX6EL8|^gIEPA9|Q`b9(gLO`mnaIFik|(xKG4j=6tj>}~AF>|BU@ zWAie?Jn^J*(A@Ub(7zm(+TO@cCTxJ)MI;D|dyCHTi7CHAK>_!8&zk6|l91{5G4llZ zSa9~2>i8;g(wp!I0uO( zND2XjKRAm=`9LYRBV3NM>Udn9kI;tUiznAmcI|XKeiRE`EdWBIZiuVre{E+do9!ugU*9w`0ShK{rXUajfd+vUzJ5K(2&!pgMdgy5`GOTiHTl_U zn7Fy1Qu=v?5B}I>gUQlRdXZn&LYt<_#nY^l#@#{nc~DMONQ>%67 zyuOJ-!yjF$7G257qf<@Kzd*vK0z#g)f|v8HrS3AeXZh!;mBCu?aaA;*HQ|L-q_lYmQBnqy_=w!Us9Yc`w5t$M6W;35)0~{JxWpO9}oi=W#+rGgY zad(CQ*bPgx-E`luF&@4kHV%+(p@^kp&+3wgNy3TyV+3WeI5%IQcmc^7j5pdfU$t1^ zwE#~Pd5-NKD;Lzti-#+euTM7_vLj8Dkp-hWfSYSeY;k^e=SA!uYCRf`7X~hZi#i5(xXi2ph1yk;(kau)m^j^VQvo=cQC0AT> zF4z*gAdoU5aXTa>7(-=9XO6!XXGj_@qz6oKl%n>ar^BaXPr;@d zO;@MX7=q_NoNK#sdp|Y2t`VPSX(O(rVNb;DWVX9(dYV!_u{{MChJ2;l3E$Nk))SACCZ)r5xe|icN2~Iv3G2WV! z4kEp_t?F^aYUAsWGP?IdXkIihfx)QtKblQ zTLf<{_()0%3KV@mK}EIsuJ0k5#SGzMZX|@7RMrfOt*fM%ivsaufRlr@5bR~_n6VM| zSOngp6ts*N1$jPMvWd;ZTNazSy(LDbaF(gGbuH+?=CMSN(^sI=67|f^%9^-fV*G(N z#b&oS%)cEaN2GrI3=o@T0X~kj%F1f}`c#gHBBs&*o0RPUSuol3Z7XGvNq=anMv{NK zxyUqP+Hqov9X6J#(-0-s*H+*t4*8xn{iw1uKxxMnFDP~I=4D1&t7fZPuo5aUqDW`_d6q>W5* z*Mxb6TmsvL>RV!|GHEs;lV3mj)5uN5;Qkn`KYQJXUk=J*LPd4Gv$0$677zNO4Lk*1*fMfIBW zHKF;H^a2J)z>bTXm)liL1Hr{s1M(Fp&K0R=Iag`wX>DNVCW+<&xAq;-HeUy8H# zCxKmfM3nhoEx^Q;+gKFL;%FelH04-WNLm)0(FTk%ocao#^B@Y}BTd|5*y4db4G>~T zBpwkUzyN48CztUG7I%_Bc|ZEi?gVN%59W0HuLETahI|sjp}%9mJ$)$R(DjI(;Ns8$ zW=2tly}o@qv|W9b-k)&L?B-!b9)T@IGX_n*nm>Iq;?R96;(TxW)BHO~CN)J^)yF4? zwhwq1_?s6Te3vLY0w+W{E`^i(wO{z4urEwl*arpNwoB9kHwO=lc~6w1`|~G$nD}P@ zPQqvIV3F-t{8%tc@o^lyJN(`2Rs6x7O#I=Ub*<#B{v8JaC)$JSpRF7;WX%N|5B5&% z%~2nFksfb0G~n_P%mqx}KmzUrn*j51^jUt@oOerraBO%?1sKWuGx-w&1Ob56%@*El zV(f#iLNRVIe+Pw`tI0F?vVj9XrG?!(0gN)Xu{ zB!Z)Y8Z&~_KTts+wjj6*ivQlIv+cn`K>R~yESd&^eLde6+#Y}fP#XY(RFLLKP`7=n z+kXs=&o^8bp->r=5~|)5B193yuv__hVUf^t%75(P^Kty8SI2i_Y0a@40963Q4NOM} zDL056iT*e1o_?;$qI2H(wd#eMC!!%UL$gUDIw+e34971M^T^h{C7zgBC4c#r0<(#G_|*a&r0Z zPvc!z%)UQ9t%s@pNb`%4l6Gof+(8u!`e_Phx+}qfG{b&R#gGIkZ=wP_`?JZ|$i%Wh zR!7Y{(o4_tZeG54TQcqArR{$D0M!X^oBxpx=Y5b2C-H<5-1A%@4ihyTt3P~7H9riu znq4W8;2n~L60~giB~IW(p1?zd(xdjhapRaF%M%p?Hi04OXxNp$16M%J^axYtEXl9-VTA6;|bG~M43Tz?+6$ot$^)r*f6$&c}FS!;@ec0%c6%y1nsXJPX-EYBJ^P+9+G?@-qMZ5mKJTY7R zv<%IBf{tBDHusR-x7Gd2t=l~ik~j)v66eq9E>0Wqc&ej7^F5)1DS@ndv+Z{tH5Kt0 zM-<9lRXm}kjj>Pbdl%(R-6*;9ei5t4q!xo5`%u)v+N-5bA_iizirFLr)A|0HIz};u z%mD)xj^YUkA%TZE47B^RQWDY|He$f?KpzsTtBq-t`cw>$B>l#QO{+E@(QVcXtEdZC zq!zv6A#!)yPfz-DM@gb$9H$c@WrKV0IR##U0sin{G0Qt zjX~@gh84}JX0O`qLG7eG(gCa+NBIEPRcbg|ed@LPP3u|St&%MjcUZ)QV27Et8Iu{4 zOZ03UsS(fR8YeLKR%FMiZ24MwwyN9d?Cn;H_-e?vWcsFQ>1EM-YM+pCN|k;Pr`i_m z9;@DHDd}C(k_#~<#nf@#;2m=+Dkh>=YX=bXAIQ1sKBPtoZvMIHK zi&lEHzx^KQpbS~mj=nTKg|yD(w^R5STbpFB!Ebs|UesD>{(5G=snXY8aAs8l+@xpU z|E;a{*-Eadf4l*$^6OeOwv#d z4LJtI`vbWOj_LvF6o#0D*sD8mFNI^Mjv|av9{Or%C|d$Z*EBH0v<5863KrV!NbaF$ z>WO(~z-yDT408QPUJkmKHrD5oYY-ZkzX)htp`i>n)aWe=Q%2c&UI*}$#?Ik3PG4y^ zRsE`orf?Cj`j_QDG?$7T`{he|{qXxAq2W{LR$HEL$fDgChxDG0&qsz$q}^tFuTLXX zh;Mm%2B&)yNc5?zrB|s98{5bWN=5gEjY$tXi?Vy9$epe`t4JN09SxW4_6{^d7@TTCM9eiw>9obNtu8o8g_V09a96p6e2WG3hZZ zR%dRUY}Jvaz)@C5#S(}hq53n_v6UY%q>h~z+rI-(I&JWXmz$dCC+r_Is6s=Ml!@$? z9_*I?+=ydeshRO~q-#goULt2VTAgxQbr!a?OZk}eKeDBN?5Ve&oUIZi9ps^>g~v=#eusn7R8c zsZD~vEJdYpLd!DKSS1lbMLL?RiJF3mOs~miKD1k+0jGeRb5?+>E`ph?Fji2vQQJxg zivD=kt%%c7Dw41P!`eZ{F!>AJ)oIEPw?v=SiKq7kGoF9`kF z7pu?2gk}6rbA}wU1a#VddXFevw_RByuIxh|o#6swRm|T_=Cf|ciPv?zgX)E?<;FX8 z@pe=>zqVJ*FU5W}6YlHtTjfM28~8-$L6Ya<#jLmOGxu)8ty*@qUa+ByJqQj|uwiME^ig4pr6}x5Uyaju7aJ!^YEV9ei2W+%Sb?4Z zqr0RT?j|0}oo>!LW;RV_D@DtNiDV(06_SA|%$_K8TKTDBnj<&4Li%&(is^L55D5+q zc;;jF0T?DZgsVENxqLXXd9zTUPJt$2taQoB9PV>E8DPD7uc?^Y7rrcURgZ?O|^3#!IoySvPIdqFeAc z{t?0q9`7nRDLq>^;wO2v(zAXY=wbM_8|{17duMqCU088+^>^t&Yhlshs^{XpJMU0v z?a4e2P!l%+3y2N$-wfMSg>*99ag^gw@8JNruf({mdgfMQbQ9su)_ z$8O4%rjR zXRQB1VWd#2e${2_gCWw>582n02RnBNRTy&gJw}n$pm~$ql5bTwS~htBosk0!&lITP z3hz3UoeQd@aw}AH7dIJ8Xsec${D2^(aZaty0TWz~<4yW8l3SybbOPWaD$iga$f=dJ z<#B-}EC~q@uvZ&&5W2LQ9Tp_x4{2yRcyv+aCti)tJ}Q6V8N?$sq6j)A)4hd1T5P!{ zyba}TP*57kK^}RD4n1lyifNXhv92*vvfl&1FQ8>Zg4bVW=41NHK;(KoVjUZCHM=bc&74r3BH?+C~LDYSEO}fTMI?;y%ePIt0Xat9`PpTqWQ~wBR*~?=11LG(uuH?nc;V-gc-LHny`< zW5*r=z1>=HM+A!23k;#IOf*>cLTDXJeyLP|!p@sRe48Q}mP(676dJ2o8m@aW*LPa+ z-v;Lc&dkG9gEeTw5(k^-`@ca;Ld}vmmEF$gR-3;pc*BVPd!K5!{M3%Sq$5jFB&T zF|ZsRb)H3dJ0kGZI?pP0N2n!>27he>zu|g{@|8omuU;C#I9yj<4c{{T(Ev||9j)6q zZhYWH&a5i9u~7n(s2_imY3LqruD^;?x{AQmDO8D5%M7aPo9@8EVC5Uw_ZZAEYND3F zREF!@N2cC#TT$3CQ$j5*6juze&?f8)Va_61sZ9csuRy?tjvQ*Vgl9wd?d4f}3X!6` z2Q+KVg4F=ge*?k+CPvtV*#c_6G#&Uipb-NQ8o7ipHiRrN;^A3M-hQ_9@ApPK3BNb2 z#v{g23EuJ3!}FH{_&3dtn=eGQE1DU2Gi~rPrDwHK@}=g!#aV~z16(Gz{dd~p-2ynC zJ3Rdm^w+P>ea;Qw+dR@qxe5$~WZh5%G-OozI&X>o_9k`IZ^UI{ML%)P3wan}x}}=Y z>O$}crYL9=+5roN23@e80EWGEiP`nMXlHsxa$>Itk!zpGYi@QN{rY3$GTP_zFjE59 zEA6RF%hRY@kZc*FQlyqeny@uW7=yJ{Rl>vUIYYznVXJ$Mn9R>1m!PO+Dn(yylM@rLQ~aPE~9=}l+1yN_>vkY~76WD5z*zyV=#Bok*M z8ic1EfQ$?qAqDzt0AAHagQSQxyRPUHstANZp8#=5S^XNn+n<=;iBEX;q8=mRiIYw` z&<)8Hk*3#%&;@GQgZMtc8XR<#h_OYuZjzV9wF#mdsmMr$stPg3-PGMzPY2sf$}N(D z#JQ9yXY2Mr&zyDoJ_JNd8$bn}YB+uC#JR?@1+XOV5x4WSpEtHr#vga4N7miG$Uai< zRr_R?*Y3bRC%yu|gt{%P1M2W-%;;BYT51ttS`ksx@0`(k0P!OabPO=l7S>O?3_O107D#5lP=tN3D4iZJjI&tbp@VI zvi&IIaMv7umpx3s=JRSEI;+_cJ`3-VLX#A2Uxl{MNZZIoe=*L!42cb$nB$zO0 z=idR9*U8u4e)>>OtOW|2!6#_y1YPPg6)il-$w{g*R&U(olTuUv{JAku*S(msCQ^bN zO*!6U?%Fbs*Z_|pq^S0t-WbPUNMj~@^JjoYP9_43TG@M`U^>A}0YR;2$MH#IE4slv4;;}FgWRks@1Ry6&DY)?y6Vm~38rb8s(PK#wNfj|JH!eqztoTGY7jD=O z4&+mBDiqx$Y%Cjvv5&NV0&39H$oG5 zv{cJTT@0_^xk|OO_JbpeNB{G7l`DI=N!a97~5T75B1{&)3S{#cqB@#v%$t0cKi}+3F-H_RpQM` zVgmP1&-bfrIFO{7--2^j%J}o=RuLFYPKe*<`pOY@Jh7A6Mob$igt5|q!)W9>jokF_ za4P{1C335g6yVfn-btK=h}egMbK<$IXexZzecfhi!FecZ(w1xS1YVrV?AR`In_t@@ zJJTQ7XQll%D0BuZW7KC+`qc@2525_=Ks`lh{7|k&M23nO>J7TmU$K%ft$|xpO|lh{ zm>6NA%G1UIe9cgP;W}0m0H~=CobMxSRoLHR`%}y5L$?Krie5{%1^t3a_2-6Q9LXfC zEA8J2avKqW4OL^oka*KC{Iv`*32Sx`*x^-f+aDMr1$2ow0@j6o^_$1{;O8^GLA%!~ zeeIw>1wAGU(5}@BSQOrtER|qhM2N+jx`_h0#b!d6<)F*~4X_?bI*Sw;WtzOACk&Rn z1J}3=EuXGTq|>4h8SpIRr9{I|+(B9fR6KnA8{^6day^}awB$BgZ_D)$6t(SQf5D`|IXh*8KcP#4YFA;%6J{tZ^<_{X3Wku*iz^2VvhDOXGWm`9OwOxj};S+P~j z0nir!NB92h^*1yLH?ksK5`S$xFMv013N9OR9kLwAG!%``r+zM)vXW}I{puH?OVH)e z1T4toz!B#7(-LrXanSB5^;Y}ip>^7T(9L!wN3mTapPEeYR6cDSg^Qz)o5n@isB^-Y zmGos|?KD%R$CrzS=`wj+8xJS#I6yD_#tu}j8g47FT;h9s<7j+N4x9a2S7kN3C_5K& z<|)gVLK+IySx&lF+d_ghQ=89a=-~ck83Zl${a0$AVFyeuvWtXNO#DWYO5)^>Y9+!59BXmI zrUC&uB(X{&0+=|qFH@^bGHebYhdYj|CFdKRtr^SZU{HpSDhY~urqBRuz1i7sy`hPTmq`wPi(=L!=+oG z0NIa|m4!A1%h5DM3|I&5S6%mcz zCJ^b{Ii2*a_?L%P-`=4LUKZDooy(OIzMJ2%sW6+**fggK))qv&ynL{e=r^X{;ft8D zUFfS?Y5EFp4b`LDQIm=(INBylKfmqkY-LR~NUb*RVz{HiI#myV%cYL%v#G;W3n5F% zNkIy`P9Try#x2Z*C9GFM3$GI#L-kR@LG>3v5szg96;&`ya3W|pl$Dg#3_+jH0fkQs z&FMDBvv}^c#adLyYoK&@f=y`cCq8JnSg0r4GL7a1y89V><}G zfN}fA`J5j29i?6z*~iyp@_IgJ2grY(YwHNA+!$pHZi3ALBXsRDQFfKzeiYHB_gup| zEr?T@e(%eE-hVIM+l>dB1TgS#5Gz;tzJw#Oe#MEfmgP$%NedNC%cr%*mc)F*zl1puL8rBeKDcQ0W3#ykgNrDDQ|Np7?E0qLwkhK$77mOgS-oqxI-W&|gHS zTY{)+y-Gm0n^FvTLb#7#cZNjKByPL`(&M+6^r3Vu?~~b22bY5po0e+3y3fq4b~_fG%^Mk)V&lE^SuvPb@JD^xndHZ8P9}#} z=rXOc??jk=@<4W8MA|SDDVKJr;kF;tXfVNnii(TiZ}JD2Ae50o0hAFcnoRrFUHj*> z8){TnoeJQXNX1pLgJH6rH-K)LhtCX};Gok=3=}F&1N)?pdJDNCgGVSSmCDiSJOd;5KJ~4QUpt@0gun4r3Mf!O-+zYo0wPzTA{QL^>}K&RKjD&?qPh?C+8C)>MSLi?89FoUQG(K=3&iX+mKfRbz_*#Dz;yAc4ij0`BBylbk5yC zQ&2XyL6~b`x|6npuAq8|C}KSeC6>obAt72=|6o4@u4PJ;TYEg2%8BEijCdt7XHs7m zZ^vIIj;?D>`Mg9%X4TWO}ecCgIXz*GtmS_FJ0|VYzuLia73SemF#Mm7l zfzM#X&JjLbd^umX664He)zn^n(>GZHG}8`@M;@Sah46J;f!89#EjELw9moylb6fB&WAsEwaU1^9VQ5;WkfCHl~jGx_QWgO z1}UO(tn(US_g7Y0krIe64KC{{l zOlcWJjy#kco5#b}SX7R@l-cZ}g_Ljx)pU>o5^Q8GzfVpFgVEJP=C;oKJD=!d9`Y$r z;v)jv#4RNK$TuGtx&THA-)4Gck6UF?2r0_OW`V9(a(byz>{fcr1RZbd@y;ujIR3A1 zyGIkFC#EoVnDA5qDK0wRZWF^EH-R^1swmP0^Y~#Zj3Rtm)H^8LrC6*{->$fgD^(HD zq#Q-Bw=Ru-cWuk8Sa4uF>1Ivsx~L-uutdAXDux+3VEQwqctH=gpOSnrXdm|oWReVg zG4N3PrhOnDOF3vgi$jaN5h85@5i?sY!jYb-K<)uAE&Z^t>xkvFn9FlzFl&_hBz%z@IOu852h@hF>BL zB9c{K3@g`H%P}D2ER_Ec0qNL`rs_8t`4J{4m&6%Lt)EeI3{}-Hw21pmSYozkCTQY( z2x(Fyn3g_mI}MT+Tp8&SR?VL`&B+r=GPoX-k0gh3PB1kIW1)kwE#{%Sd_#Cg#0{}k zF*cB~OB^y`vx&BdoNBXdV-aaCMez-x97efBS#+d0Iz~o515vk7qfn>N3W}|iB@}DW ztNYa}9h2cg8!XErbV@k!=S7{VI#ZG7gA5@K6-0tUgX(Z;7H+Sj*A&m$_-5|+ncWmF z;2lL(g2@A?RUAaGZS(Xv5gkr0y`edDQKpd7ee)2JVnTkA~d)1}P`h8PkH+%QYfyYMYb-vn3{jD!aS`NF; zaYGt=g!O*B28&9ylyf?_8V@y&|8{w_bDY2bagDo&RLT~|ydRO?oLR-pxo%XKDpXx7 zAxH68Sqwd$bhSiAR5eFs_8DVfvq@0w(NurrR?e>W`*C%4qV(zrjb-#M=|$+X38#TD zJIP5DfKHDe2mag7u6KGoE|iu-^KLY~&#_2{INp(%q^)g~S_+mb#gc6N9j%hh*We5B_!mp&}ixu%gRl5S>-0oq*HbDu+mOtpw zPtIsb0 z^9!g?96$}A2mBBM;C~6>?Ck6B>s%EZkmR;IZ_DxabRTn_ONrN)l4wcNG$!T0mp_vdwkt-A+%S0T3U8f@)psG8eg z1-Sj|Gq~GenCoDe%b>XHp!nCj+u*44U@d_*W;P zvuB~RSE2OBq4ejW+Z(WU=b`kcq3kY$pR2I^VmF^)v0Qd*{{gH1!;=0XYZ)2XS^o>G zX8eQa{!iZai*t1`boQ_}A)xqlYI+ z@ty}{creiLyItkDK|ZGho-pE}qkR#=)YC)~h1Z6w-XzF`PR zf%Ww=H;}CVx;7p3A1(Ar5Owqo9DLtYE73E0>&Nr~>Q4rWGU~Y$9+l@MzK+c0%JNBT zQ7ZjFYNaLG7t1imOOdH-6S0YJ%8QpIOzzS~5w`o(;AV*SYOqPBAr_&w{5U~r^1e|S zuNG;S{V7bV3B?gtt1^r*8RX&%Xv<=c^dFY^&t>_GoM&SG7dOxJXEFZg0{_jx|6}>& z3~avE`u|?nzi4Wff3)}~OwITOq0=&PauP5yaIz3^FtPvdEH%Ry|NJ*g{nh2)SZcO^ zLDQ;V!=qQ1FtIQ*cZOp53QjNRYW5daPr%Cl#XA2DP&51i?*CxjViwjWOaxzS_Mdy| zZ-Dx*ihs@YpEn9K<6n*b$x|~DFmtf|nU2N(`?l#$^Kw>RLLKRKy4sZVj|V4!FftxN zKum;yK=Y8CBRMdM20V#gxR!xPl_21ertFspA%H3=NiIbxFG=li7Ku#Ilt8oT2ND{V z!dI7~Eu<|`jW@NBc*(IdHKA=#{XDysyS%!5zqng{%67Wq)o8MJpyVpRq63?$Ojm@& z9mn=KVYM1B)StTIK(rT2Rhg*>|1D{CVl>lrV8Y1nfnV!!P{M3F>dkWZ65jz#u(p+v zOIwN}xosK}DYH{ztXo6EHcB^PqEZ&;8Bz!5^*X=T{4u}J^L>8T=Qpp<_w}0hjA^pe zfXTmZ;D6D$XHCQR#P6(;9mf(>)XGqFZu!%P{~GMBsLRZ7ECA;mvI|SDVu#ZJjeBsm(Qd zN6I66b!4kre*8)0iD#e4x_6AH(bSMUmdxGK#(Uai&O0J9Pv)x6A!bRYU)P^7$dC*S zSge_jwtL|H`_ZY=5!W!UC+A1-q9GYtn^rn_C*I0*7hIKF`jD$Poh9?Ha5mM2t8;hM zBWHa~k4eW76ULh+yc{dICBlp1lJDr};r&nCv9EW%4Zj$012J_D7e1skzj9aEvs-FNBB#U8b&ziH4q3JZA{ntU=z-&@!pR^|W=T}63HtN}PVwHH0-nyr0S^D{%uxxSXWTuTAJeBl zeO=~pJx#v-p;bu6>tMNepnui5L3RA4w$v0eo}=fiW@hhi&pKr>t&Gy<%bTS#tT4u#pf;0eahRH2pmvcdMRSK_LyP=AI*@Fsb^>_guj~IcV>=#bL zLAk$M_Rf2NN3;~Nm=slaraCw)rqcjcb{*vD(!uCA=?k{8UDNPgL_=>%Iy@&`9A*M+3$xA1arcR{j%XGU$(IOrx%#J)e76>* zq{~!?haWjd-{+`iY~R|T>!7N$)qr;r=PIh?HLVp{%9X;-5iGR(K4{QCSYP!;=sC7c z%~XzU7AMuz=CoIiZP}mvwMbPK8ur!bk?MDM;JcJn*YYBhPoNTLYntJR0i)rh-mmTj zoEn)Wo6D6apA=6DUyQ_g_R&1zJTP#M(1>HWq$c9)@>^2+M@~7G1 zyDr8&Te3k#L63#K`sPsly=l4rbK7=&N`7$XBa;Um)j_|`u?J?@#of>Nsiu+R{MSK$ zWq(1@ztZbhTxpiI>Wtl1j>DpCk?W%Ft#zd<5 zRvEW523~=zf~eEJd7Xk6+LTnx21~~x)x?M2zIt-KH>@L1)OAf@qia%-r_sXcB9^o$ zn+@G)mr9dL)=|!QH(q-*;jkV)Q5yEMQ{v&vnSsTE#-k2rhuA$SKh&Q!950kbNS=kb z2{rP5NifA_iwwor32m8}uI%KEg6EfSTjYY%t(p`0MjQuOIRi9kIn*}WZ2H^UvGeVH z>Bp*$4O)e^@_%eg6^SteIk9z?d9=EBlmX5FH>0M->x6Jie^U?0e{*iKx|Y~NMMdfj zy??o%yZeR~(^PrLGvtOtZ2E6$npY+r4+b?{mu@I@AKH$t9`VqKi$_8~4uDFCJDR69 z=Nh#8MJh`|uzP=1INTLA-9ii+=Y*Tq3XIGC$Yzi!E=gqO-mm)!m>r}dmQBo1@xhk8 zq_mUGHNBl6$c)m+(=EDbzAdZnUg6yh<3~QcJFTzcuu-eEf7UqwJTbGj6~(P=$eocq zUU$W_z4pcW`U}Fr5wX&)#|htxVvuPThgxi-vQ}jcVE87#hlkcx2myTK*n1x_!bG4I zff2W+4V$Se!&4Jjm3=jhT?u~b*6oseC*G8nTKoIniSIQTsPX}&`ncV%5BXIzuM{`_f)8EItrIJ|C9sTcs z5R&dD*y@RbjntVjs;h$CC%{pKC z<^qgpQOo;@ao<}vvCS);*}M;#cV=ibZqb@SnA(ChGo**okfBt%(Wfg4Y)}zy80=4R zbVYd3Sm6w22;{ktXdDti_!wG7FoLKEG{FXq#rPN@oFn{M>==a8J{v2@Akm`OpPNz; zg!4@~v1l9yE%Nh~Mc~YEpD_l7CZdRF6b6GMqS0O`lmYbm9J!b}7=D%(ZKXHj@ZzWy zUTe{RxiQ#5GzBm@@B5utOlkxLa_aLuqzhyOA%o6lLiLaQ<$N8Q;XcU6Bd`l-+@1qW zs-g~CtlQC|Bbh8}I0E|-i?gtBvN!&$E~Fiw4Pg|EMu$K{EJS90DhLn&p!Vp91r2%+ zLivTFAVNNBXe^oldCR35h=p*=r5aRI;E_w?uxJ1>;mb6P0^?k&ffzhA%Ox6?KtMzL zzC>H7E!6j0Fp2BrER4fh+pJ;t0#v4|;YnEBgR& z|1~!@%OA>>STF@r>dJ_LjuynNx-gk+h$LM&nYJNxCIaeBk)7M_LwF-h31loC2T}6@feU!Cg2HXu>T*jkidttp%10`LkM8;XbenG&)U%j_8%VMiPr!C literal 0 HcmV?d00001 diff --git a/examples/gjf/molecular_dynamics_results/guaiacol_kinetic_energy.pdf b/examples/gjf/molecular_dynamics_results/guaiacol_kinetic_energy.pdf new file mode 100644 index 0000000000000000000000000000000000000000..364313fdd3cf7268b2471b33097b43e8e7ede54f GIT binary patch literal 43676 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 W#E;UCLkLA20T?zjvy7@N_WuF7YQtmz literal 0 HcmV?d00001 diff --git a/examples/gjf/molecular_dynamics_results/guaiacol_kinetic_energy_fluctuations.pdf b/examples/gjf/molecular_dynamics_results/guaiacol_kinetic_energy_fluctuations.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e2ddfc7ea50f2e480f5a30da638f8f461b87d8af GIT binary patch literal 43786 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 literal 0 HcmV?d00001 diff --git a/examples/gjf/molecular_dynamics_results/guaiacol_potential_energy_fluctuations.pdf b/examples/gjf/molecular_dynamics_results/guaiacol_potential_energy_fluctuations.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a9d9badf72899b7ea1ebbe931a4855435656e36b GIT binary patch literal 43267 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�!B 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 M05@(ZX)6Q%AFAg=K>z>% literal 0 HcmV?d00001 From 3df5321e0045dfd934a5c1dedf4d5c54b1845b42 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Tue, 10 Sep 2019 16:56:31 -0700 Subject: [PATCH 114/237] Fixed extraneous paragraph in doc/src/fix_langevin.tct --- doc/src/fix_langevin.txt | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/doc/src/fix_langevin.txt b/doc/src/fix_langevin.txt index 1e50b3a8ba..c681b315f1 100644 --- a/doc/src/fix_langevin.txt +++ b/doc/src/fix_langevin.txt @@ -263,16 +263,6 @@ The 2GJ half-step velocity {vhalf} samples the correct velocity distribution for Results of simulations using the {gjf} option with both {vfull} and {vhalf} compared to other available thermostats are shown in the LAMMPS directory: examples/gjf. -As an example of why to use the {gjf} keyword, for molecules containing C-H -bonds, configurational properties generated with dt = 2.5 fs and tdamp -= 100 fs are indistinguishable from dt = 0.5 fs. Because the velocity -distribution systematically decreases with increasing timestep, the -method should not be used to generate properties that depend on the -velocity distribution, such as the velocity auto-correlation function -(VACF). In this example, the velocity distribution at dt = 2.5fs -generates an average temperature of 220 K, instead of 300 K. - - :line Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are From 90296b76e38eb8c9fe28101b33e0b2eb8b99c57f Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Tue, 10 Sep 2019 17:11:49 -0700 Subject: [PATCH 115/237] Added a readme to the md results folder --- examples/gjf/molecular_dynamics_results/README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 examples/gjf/molecular_dynamics_results/README.md diff --git a/examples/gjf/molecular_dynamics_results/README.md b/examples/gjf/molecular_dynamics_results/README.md new file mode 100644 index 0000000000..cd3fe81b53 --- /dev/null +++ b/examples/gjf/molecular_dynamics_results/README.md @@ -0,0 +1,5 @@ +# LAMMPS GJF-2GJ THERMOSTAT EXAMPLE + +## GJF-2GJ THERMOSTAT + +This directory contain a series of graphs, which contain the results from numermous molecular dynamics simulations. All simulations are run in the NVT ensemble. Two systems are reported, guaiacol and argon. The damping parameter and the timestep are varied. Also the temperature is varied for argon. GJF U is the half-step velocity and GJF V is the onsite velocity. GJF U and GJF V represent exactly the same configurational statistics. From 7aab3797b33537284bff940291121652ba756bf5 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Tue, 10 Sep 2019 17:14:44 -0700 Subject: [PATCH 116/237] Updated MD results readme --- examples/gjf/molecular_dynamics_results/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/gjf/molecular_dynamics_results/README.md b/examples/gjf/molecular_dynamics_results/README.md index cd3fe81b53..70f80e3e56 100644 --- a/examples/gjf/molecular_dynamics_results/README.md +++ b/examples/gjf/molecular_dynamics_results/README.md @@ -1,5 +1,5 @@ -# LAMMPS GJF-2GJ THERMOSTAT EXAMPLE +# LAMMPS GJF-2GJ MOLECULAR DYNAMICS RESULTS ## GJF-2GJ THERMOSTAT -This directory contain a series of graphs, which contain the results from numermous molecular dynamics simulations. All simulations are run in the NVT ensemble. Two systems are reported, guaiacol and argon. The damping parameter and the timestep are varied. Also the temperature is varied for argon. GJF U is the half-step velocity and GJF V is the onsite velocity. GJF U and GJF V represent exactly the same configurational statistics. +This directory contains a series of graphs, which display the results from numermous molecular dynamics simulations. All simulations are run in the NVT ensemble. Two systems are reported, guaiacol and argon. The damping parameter and the timestep are varied. Also the temperature is varied for argon. GJF U is the half-step velocity (vhalf) and GJF V is the onsite velocity (vfull). GJF U and GJF V represent exactly the same configurational statistics. From 1e8e34f33d6544c8667ea6b7a6263f129e5ff74a Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Tue, 10 Sep 2019 17:34:49 -0700 Subject: [PATCH 117/237] appended fix_langevin.txt documentation --- doc/src/fix_langevin.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/src/fix_langevin.txt b/doc/src/fix_langevin.txt index c681b315f1..382c2360d9 100644 --- a/doc/src/fix_langevin.txt +++ b/doc/src/fix_langevin.txt @@ -263,6 +263,13 @@ The 2GJ half-step velocity {vhalf} samples the correct velocity distribution for Results of simulations using the {gjf} option with both {vfull} and {vhalf} compared to other available thermostats are shown in the LAMMPS directory: examples/gjf. +This updated implementation of the {gjf} thermostat includes the choice between +outputting either the on-site {vfull} or half-step {vhalf} velocity. The on-site +velocity has been updated to be the GJF on-site velocity, and the half-step +velocity is the statistically correct 2GJ velocity. The implementation +also takes advantage of Gaussian distributed random numbers in order to achieve +correct fluctuations. + :line Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are From ae1054a243786775a417f0fd44712f2df86d4e21 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 11 Sep 2019 14:17:53 -0400 Subject: [PATCH 118/237] change formatting so that sphinx is happier --- doc/src/pair_local_density.txt | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/doc/src/pair_local_density.txt b/doc/src/pair_local_density.txt index f9a410c3be..8703bf11ff 100644 --- a/doc/src/pair_local_density.txt +++ b/doc/src/pair_local_density.txt @@ -142,21 +142,21 @@ Line 2: comment or blank (ignored) Line 3: N_LD N_rho (# of LD potentials and # of tabulated values, single space separated) Line 4: blank (ignored) Line 5: R1(k) R2(k) (lower and upper cutoffs, single space separated) -Line 6: central-types (central atom types, single space separated) -Line 7: neighbor-types (neighbor atom types single space separated) -Line 8: rho_min rho_max drho (min, max and diff. in tabulated rho values, single space separated) -Line 9: F(k)(rho_min + 0.drho) -Line 10: F(k)(rho_min + 1.drho) -Line 11: F(k)(rho_min + 2.drho) -............ +Line 6: central-types (central atom types, single space separated) +Line 7: neighbor-types (neighbor atom types single space separated) +Line 8: rho_min rho_max drho (min, max and diff. in tabulated rho values, single space separated) +Line 9: F(k)(rho_min + 0.drho) +Line 10: F(k)(rho_min + 1.drho) +Line 11: F(k)(rho_min + 2.drho) +... Line 9+N_rho: F(k)(rho_min + N_rho . drho) -Line 10+N_rho: blank (ignored) :ul +Line 10+N_rho: blank (ignored) :pre -Block 2 :ul +Block 2 :pre -Block 3 :ul +Block 3 :pre -Block N_LD :ul +Block N_LD :pre Lines 5 to 9+N_rho constitute the first block. Thus the input file is separated (by blank lines) into N_LD blocks each representing a separate LD potential and From 1631ecb3fecd44c83ee8d1f6d54c6c1009c15e16 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 11 Sep 2019 14:18:27 -0400 Subject: [PATCH 119/237] integrate pair style local density into manual builds --- doc/src/Commands_pair.txt | 1 + doc/src/lammps.book | 1 + doc/src/pair_style.txt | 1 + doc/src/pairs.txt | 1 + 4 files changed, 4 insertions(+) diff --git a/doc/src/Commands_pair.txt b/doc/src/Commands_pair.txt index 47d4c40d8e..e6ebd21987 100644 --- a/doc/src/Commands_pair.txt +++ b/doc/src/Commands_pair.txt @@ -166,6 +166,7 @@ OPT. "lj/smooth/linear (o)"_pair_lj_smooth_linear.html, "lj/switch3/coulgauss/long"_pair_lj_switch3_coulgauss.html, "lj96/cut (go)"_pair_lj96.html, +"local/density"_pair_local_density.html, "lubricate (o)"_pair_lubricate.html, "lubricate/poly (o)"_pair_lubricate.html, "lubricateU"_pair_lubricateU.html, diff --git a/doc/src/lammps.book b/doc/src/lammps.book index 3c856bde19..9868c8f299 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -611,6 +611,7 @@ pair_lj_smooth.html pair_lj_smooth_linear.html pair_fep_soft.html pair_lj_switch3_coulgauss.html +pair_local_density.html pair_lubricate.html pair_lubricateU.html pair_mdf.html diff --git a/doc/src/pair_style.txt b/doc/src/pair_style.txt index 1b8e6d46ec..7ba982cd2d 100644 --- a/doc/src/pair_style.txt +++ b/doc/src/pair_style.txt @@ -228,6 +228,7 @@ accelerated styles exist. "lj/smooth/linear"_pair_lj_smooth_linear.html - linear smoothed LJ potential "lj/switch3/coulgauss"_pair_lj_switch3_coulgauss - smoothed LJ vdW potential with Gaussian electrostatics "lj96/cut"_pair_lj96.html - Lennard-Jones 9/6 potential +"local/density"_pair_local_density.html - generalized basic local density potential "lubricate"_pair_lubricate.html - hydrodynamic lubrication forces "lubricate/poly"_pair_lubricate.html - hydrodynamic lubrication forces with polydispersity "lubricateU"_pair_lubricateU.html - hydrodynamic lubrication forces for Fast Lubrication Dynamics diff --git a/doc/src/pairs.txt b/doc/src/pairs.txt index f36a87dea3..1f8f130e48 100644 --- a/doc/src/pairs.txt +++ b/doc/src/pairs.txt @@ -66,6 +66,7 @@ Pair Styles :h1 pair_lj_smooth pair_lj_smooth_linear pair_lj_switch3_coulgauss + pair_local_density pair_lubricate pair_lubricateU pair_mdf From e413aaf2172c44a7d81f3204917073a782704ed4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 12 Sep 2019 14:37:42 -0400 Subject: [PATCH 120/237] add support for optionally including unit information in standard dump files --- src/COMPRESS/dump_atom_gz.cpp | 19 +++++++++---------- src/COMPRESS/dump_custom_gz.cpp | 19 +++++++++---------- src/dump.cpp | 11 +++++++++++ src/dump.h | 2 ++ src/dump_atom.cpp | 10 ++++++++-- src/dump_custom.cpp | 9 ++++++++- src/dump_local.cpp | 5 ++++- 7 files changed, 51 insertions(+), 24 deletions(-) diff --git a/src/COMPRESS/dump_atom_gz.cpp b/src/COMPRESS/dump_atom_gz.cpp index ef7e6583be..78f2c6d4f7 100644 --- a/src/COMPRESS/dump_atom_gz.cpp +++ b/src/COMPRESS/dump_atom_gz.cpp @@ -108,27 +108,26 @@ void DumpAtomGZ::openfile() void DumpAtomGZ::write_header(bigint ndump) { if ((multiproc) || (!multiproc && me == 0)) { + if (unit_flag && !unit_count) { + ++unit_count; + gzprintf(gzFp,"ITEM: UNITS\n%s\n",update->unit_style); + } + gzprintf(gzFp,"ITEM: TIMESTEP\n"); + gzprintf(gzFp,BIGINT_FORMAT "\n",update->ntimestep); + gzprintf(gzFp,"ITEM: NUMBER OF ATOMS\n"); + gzprintf(gzFp,BIGINT_FORMAT "\n",ndump); if (domain->triclinic == 0) { - gzprintf(gzFp,"ITEM: TIMESTEP\n"); - gzprintf(gzFp,BIGINT_FORMAT "\n",update->ntimestep); - gzprintf(gzFp,"ITEM: NUMBER OF ATOMS\n"); - gzprintf(gzFp,BIGINT_FORMAT "\n",ndump); gzprintf(gzFp,"ITEM: BOX BOUNDS %s\n",boundstr); gzprintf(gzFp,"%g %g\n",boxxlo,boxxhi); gzprintf(gzFp,"%g %g\n",boxylo,boxyhi); gzprintf(gzFp,"%g %g\n",boxzlo,boxzhi); - gzprintf(gzFp,"ITEM: ATOMS %s\n",columns); } else { - gzprintf(gzFp,"ITEM: TIMESTEP\n"); - gzprintf(gzFp,BIGINT_FORMAT "\n",update->ntimestep); - gzprintf(gzFp,"ITEM: NUMBER OF ATOMS\n"); - gzprintf(gzFp,BIGINT_FORMAT "\n",ndump); gzprintf(gzFp,"ITEM: BOX BOUNDS xy xz yz %s\n",boundstr); gzprintf(gzFp,"%g %g %g\n",boxxlo,boxxhi,boxxy); gzprintf(gzFp,"%g %g %g\n",boxylo,boxyhi,boxxz); gzprintf(gzFp,"%g %g %g\n",boxzlo,boxzhi,boxyz); - gzprintf(gzFp,"ITEM: ATOMS %s\n",columns); } + gzprintf(gzFp,"ITEM: ATOMS %s\n",columns); } } diff --git a/src/COMPRESS/dump_custom_gz.cpp b/src/COMPRESS/dump_custom_gz.cpp index 9c30f4742f..7eb77cb697 100644 --- a/src/COMPRESS/dump_custom_gz.cpp +++ b/src/COMPRESS/dump_custom_gz.cpp @@ -108,27 +108,26 @@ void DumpCustomGZ::openfile() void DumpCustomGZ::write_header(bigint ndump) { if ((multiproc) || (!multiproc && me == 0)) { + if (unit_flag && !unit_count) { + ++unit_count; + gzprintf(gzFp,"ITEM: UNITS\n%s\n",update->unit_style); + } + gzprintf(gzFp,"ITEM: TIMESTEP\n"); + gzprintf(gzFp,BIGINT_FORMAT "\n",update->ntimestep); + gzprintf(gzFp,"ITEM: NUMBER OF ATOMS\n"); + gzprintf(gzFp,BIGINT_FORMAT "\n",ndump); if (domain->triclinic == 0) { - gzprintf(gzFp,"ITEM: TIMESTEP\n"); - gzprintf(gzFp,BIGINT_FORMAT "\n",update->ntimestep); - gzprintf(gzFp,"ITEM: NUMBER OF ATOMS\n"); - gzprintf(gzFp,BIGINT_FORMAT "\n",ndump); gzprintf(gzFp,"ITEM: BOX BOUNDS %s\n",boundstr); gzprintf(gzFp,"%-1.16g %-1.16g\n",boxxlo,boxxhi); gzprintf(gzFp,"%-1.16g %-1.16g\n",boxylo,boxyhi); gzprintf(gzFp,"%-1.16g %-1.16g\n",boxzlo,boxzhi); - gzprintf(gzFp,"ITEM: ATOMS %s\n",columns); } else { - gzprintf(gzFp,"ITEM: TIMESTEP\n"); - gzprintf(gzFp,BIGINT_FORMAT "\n",update->ntimestep); - gzprintf(gzFp,"ITEM: NUMBER OF ATOMS\n"); - gzprintf(gzFp,BIGINT_FORMAT "\n",ndump); gzprintf(gzFp,"ITEM: BOX BOUNDS xy xz yz %s\n",boundstr); gzprintf(gzFp,"%-1.16g %-1.16g %-1.16g\n",boxxlo,boxxhi,boxxy); gzprintf(gzFp,"%-1.16g %-1.16g %-1.16g\n",boxylo,boxyhi,boxxz); gzprintf(gzFp,"%-1.16g %-1.16g %-1.16g\n",boxzlo,boxzhi,boxyz); - gzprintf(gzFp,"ITEM: ATOMS %s\n",columns); } + gzprintf(gzFp,"ITEM: ATOMS %s\n",columns); } } diff --git a/src/dump.cpp b/src/dump.cpp index 57a8decbb0..e995644a36 100644 --- a/src/dump.cpp +++ b/src/dump.cpp @@ -87,6 +87,8 @@ Dump::Dump(LAMMPS *lmp, int /*narg*/, char **arg) : Pointers(lmp) buffer_flag = 0; padflag = 0; pbcflag = 0; + unit_flag = 0; + unit_count = 0; delay_flag = 0; maxfiles = -1; @@ -545,6 +547,8 @@ void Dump::openfile() if (singlefile_opened) return; if (multifile == 0) singlefile_opened = 1; + unit_count = 0; + // if one file per timestep, replace '*' with current timestep char *filecurrent = filename; @@ -1119,6 +1123,13 @@ void Dump::modify_params(int narg, char **arg) } iarg += 2; + } else if (strcmp(arg[iarg],"units") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal dump_modify command"); + if (strcmp(arg[iarg+1],"yes") == 0) unit_flag = 1; + else if (strcmp(arg[iarg+1],"no") == 0) unit_flag = 0; + else error->all(FLERR,"Illegal dump_modify command"); + iarg += 2; + } else { int n = modify_param(narg-iarg,&arg[iarg]); if (n == 0) error->all(FLERR,"Illegal dump_modify command"); diff --git a/src/dump.h b/src/dump.h index bc7fd2d5a5..43855c9362 100644 --- a/src/dump.h +++ b/src/dump.h @@ -75,6 +75,8 @@ class Dump : protected Pointers { int sortcol; // 0 to sort on ID, 1-N on columns int sortcolm1; // sortcol - 1 int sortorder; // ASCEND or DESCEND + int unit_flag; // 1 if dump should contain unit information + int unit_count; // # of times the unit information was written int delay_flag; // 1 if delay output until delaystep bigint delaystep; diff --git a/src/dump_atom.cpp b/src/dump_atom.cpp index 8f09b93f1a..d5eba98078 100644 --- a/src/dump_atom.cpp +++ b/src/dump_atom.cpp @@ -209,7 +209,10 @@ void DumpAtom::header_binary_triclinic(bigint ndump) void DumpAtom::header_item(bigint ndump) { - fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); + if (unit_flag && !unit_count) { + ++unit_count; + fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); + } fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF ATOMS\n"); @@ -225,7 +228,10 @@ void DumpAtom::header_item(bigint ndump) void DumpAtom::header_item_triclinic(bigint ndump) { - fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); + if (unit_flag && !unit_count) { + ++unit_count; + fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); + } fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF ATOMS\n"); diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index 3de0e6fb3b..a99151f890 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -420,7 +420,10 @@ void DumpCustom::header_binary_triclinic(bigint ndump) void DumpCustom::header_item(bigint ndump) { - fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); + if (unit_flag && !unit_count) { + ++unit_count; + fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); + } fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF ATOMS\n"); @@ -436,6 +439,10 @@ void DumpCustom::header_item(bigint ndump) void DumpCustom::header_item_triclinic(bigint ndump) { + if (unit_flag && !unit_count) { + ++unit_count; + fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); + } fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF ATOMS\n"); diff --git a/src/dump_local.cpp b/src/dump_local.cpp index 7cdc3ea16f..52a222eaeb 100644 --- a/src/dump_local.cpp +++ b/src/dump_local.cpp @@ -256,7 +256,10 @@ int DumpLocal::modify_param(int narg, char **arg) void DumpLocal::write_header(bigint ndump) { if (me == 0) { - fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); + if (unit_flag && !unit_count) { + ++unit_count; + fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); + } fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF %s\n",label); From b9af05d7f4938623b2d865407dc8ab41006d4720 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 12 Sep 2019 14:38:09 -0400 Subject: [PATCH 121/237] add dump style local/gz to COMPRESS packages --- src/COMPRESS/dump_local_gz.cpp | 171 +++++++++++++++++++++++++++++++++ src/COMPRESS/dump_local_gz.h | 57 +++++++++++ src/dump_local.h | 6 +- 3 files changed, 231 insertions(+), 3 deletions(-) create mode 100644 src/COMPRESS/dump_local_gz.cpp create mode 100644 src/COMPRESS/dump_local_gz.h diff --git a/src/COMPRESS/dump_local_gz.cpp b/src/COMPRESS/dump_local_gz.cpp new file mode 100644 index 0000000000..801547543a --- /dev/null +++ b/src/COMPRESS/dump_local_gz.cpp @@ -0,0 +1,171 @@ +/* ---------------------------------------------------------------------- + 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 "dump_local_gz.h" +#include "domain.h" +#include "error.h" +#include "update.h" + +#include + +using namespace LAMMPS_NS; + +DumpLocalGZ::DumpLocalGZ(LAMMPS *lmp, int narg, char **arg) : + DumpLocal(lmp, narg, arg) +{ + gzFp = NULL; + + if (!compressed) + error->all(FLERR,"Dump local/gz only writes compressed files"); +} + + +/* ---------------------------------------------------------------------- */ + +DumpLocalGZ::~DumpLocalGZ() +{ + if (gzFp) gzclose(gzFp); + gzFp = NULL; + fp = NULL; +} + + +/* ---------------------------------------------------------------------- + generic opening of a dump file + ASCII or binary or gzipped + some derived classes override this function +------------------------------------------------------------------------- */ + +void DumpLocalGZ::openfile() +{ + // single file, already opened, so just return + + if (singlefile_opened) return; + if (multifile == 0) singlefile_opened = 1; + + // if one file per timestep, replace '*' with current timestep + + char *filecurrent = filename; + if (multiproc) filecurrent = multiname; + + if (multifile) { + char *filestar = filecurrent; + filecurrent = new char[strlen(filestar) + 16]; + char *ptr = strchr(filestar,'*'); + *ptr = '\0'; + if (padflag == 0) + sprintf(filecurrent,"%s" BIGINT_FORMAT "%s", + filestar,update->ntimestep,ptr+1); + else { + char bif[8],pad[16]; + strcpy(bif,BIGINT_FORMAT); + sprintf(pad,"%%s%%0%d%s%%s",padflag,&bif[1]); + sprintf(filecurrent,pad,filestar,update->ntimestep,ptr+1); + } + *ptr = '*'; + if (maxfiles > 0) { + if (numfiles < maxfiles) { + nameslist[numfiles] = new char[strlen(filecurrent)+1]; + strcpy(nameslist[numfiles],filecurrent); + ++numfiles; + } else { + remove(nameslist[fileidx]); + delete[] nameslist[fileidx]; + nameslist[fileidx] = new char[strlen(filecurrent)+1]; + strcpy(nameslist[fileidx],filecurrent); + fileidx = (fileidx + 1) % maxfiles; + } + } + } + + // each proc with filewriter = 1 opens a file + + if (filewriter) { + if (append_flag) { + gzFp = gzopen(filecurrent,"ab9"); + } else { + gzFp = gzopen(filecurrent,"wb9"); + } + + if (gzFp == NULL) error->one(FLERR,"Cannot open dump file"); + } else gzFp = NULL; + + // delete string with timestep replaced + + if (multifile) delete [] filecurrent; +} + +void DumpLocalGZ::write_header(bigint ndump) +{ + if ((multiproc) || (!multiproc && me == 0)) { + if (unit_flag && !unit_count) { + ++unit_count; + gzprintf(gzFp,"ITEM: UNITS\n%s\n",update->unit_style); + } + gzprintf(gzFp,"ITEM: TIMESTEP\n"); + gzprintf(gzFp,BIGINT_FORMAT "\n",update->ntimestep); + gzprintf(gzFp,"ITEM: NUMBER OF ATOMS\n"); + gzprintf(gzFp,BIGINT_FORMAT "\n",ndump); + if (domain->triclinic == 0) { + gzprintf(gzFp,"ITEM: BOX BOUNDS %s\n",boundstr); + gzprintf(gzFp,"%-1.16g %-1.16g\n",boxxlo,boxxhi); + gzprintf(gzFp,"%-1.16g %-1.16g\n",boxylo,boxyhi); + gzprintf(gzFp,"%-1.16g %-1.16g\n",boxzlo,boxzhi); + } else { + gzprintf(gzFp,"ITEM: BOX BOUNDS xy xz yz %s\n",boundstr); + gzprintf(gzFp,"%-1.16g %-1.16g %-1.16g\n",boxxlo,boxxhi,boxxy); + gzprintf(gzFp,"%-1.16g %-1.16g %-1.16g\n",boxylo,boxyhi,boxxz); + gzprintf(gzFp,"%-1.16g %-1.16g %-1.16g\n",boxzlo,boxzhi,boxyz); + } + gzprintf(gzFp,"ITEM: %s %s\n",label,columns); + } +} + +/* ---------------------------------------------------------------------- */ + +void DumpLocalGZ::write_data(int n, double *mybuf) +{ + if (buffer_flag == 1) { + gzwrite(gzFp,mybuf,sizeof(char)*n); + + } else { + int i,j; + int m = 0; + for (i = 0; i < n; i++) { + for (j = 0; j < size_one; j++) { + if (vtype[j] == INT) + gzprintf(gzFp,vformat[j],static_cast (mybuf[m])); + else gzprintf(gzFp,vformat[j],mybuf[m]); + m++; + } + gzprintf(gzFp,"\n"); + } + } +} + +/* ---------------------------------------------------------------------- */ + +void DumpLocalGZ::write() +{ + DumpLocal::write(); + if (filewriter) { + if (multifile) { + gzclose(gzFp); + gzFp = NULL; + } else { + if (flush_flag) + gzflush(gzFp,Z_SYNC_FLUSH); + } + } +} + diff --git a/src/COMPRESS/dump_local_gz.h b/src/COMPRESS/dump_local_gz.h new file mode 100644 index 0000000000..cc788863de --- /dev/null +++ b/src/COMPRESS/dump_local_gz.h @@ -0,0 +1,57 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef DUMP_CLASS + +DumpStyle(local/gz,DumpLocalGZ) + +#else + +#ifndef LMP_DUMP_LOCAL_GZ_H +#define LMP_DUMP_LOCAL_GZ_H + +#include "dump_local.h" +#include + +namespace LAMMPS_NS { + +class DumpLocalGZ : public DumpLocal { + public: + DumpLocalGZ(class LAMMPS *, int, char **); + virtual ~DumpLocalGZ(); + + protected: + gzFile gzFp; // file pointer for the compressed output stream + + virtual void openfile(); + virtual void write_header(bigint); + virtual void write_data(int, double *); + virtual void write(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Dump local/gz only writes compressed files + +The dump local/gz output file name must have a .gz suffix. + +E: Cannot open dump file + +Self-explanatory. + +*/ diff --git a/src/dump_local.h b/src/dump_local.h index 91381ba1ec..9b15082995 100644 --- a/src/dump_local.h +++ b/src/dump_local.h @@ -29,7 +29,7 @@ class DumpLocal : public Dump { DumpLocal(LAMMPS *, int, char **); virtual ~DumpLocal(); - private: + protected: int nevery; // dump frequency to check Fix against char *label; // string for dump file header @@ -55,11 +55,11 @@ class DumpLocal : public Dump { void init_style(); int modify_param(int, char **); - void write_header(bigint); + virtual void write_header(bigint); int count(); void pack(tagint *); int convert_string(int, double *); - void write_data(int, double *); + virtual void write_data(int, double *); void parse_fields(int, char **); int add_compute(char *); From 0c52a7ed7067e8271397d2f7587709ae9cb7ca6f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 12 Sep 2019 15:23:15 -0400 Subject: [PATCH 122/237] update documentation --- doc/src/dump.txt | 3 ++- doc/src/dump_modify.txt | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/doc/src/dump.txt b/doc/src/dump.txt index ff1b2dc3a6..0d08fdf471 100644 --- a/doc/src/dump.txt +++ b/doc/src/dump.txt @@ -21,7 +21,8 @@ dump ID group-ID style N file args :pre ID = user-assigned name for the dump :ulb,l group-ID = ID of the group of atoms to be dumped :l -style = {atom} or {atom/gz} or {atom/mpiio} or {cfg} or {cfg/gz} or {cfg/mpiio} or {custom} or {custom/gz} or {custom/mpiio} or {dcd} or {h5md} or {image} or {local} or {molfile} or {movie} or {netcdf} or {netcdf/mpiio} or {vtk} or {xtc} or {xyz} or {xyz/gz} or {xyz/mpiio} :l +style = {atom} or {atom/gz} or {atom/mpiio} or {cfg} or {cfg/gz} or +{cfg/mpiio} or {custom} or {custom/gz} or {custom/mpiio} or {dcd} or {h5md} or {image} or {local} or {local/gz} or {molfile} or {movie} or {netcdf} or {netcdf/mpiio} or {vtk} or {xtc} or {xyz} or {xyz/gz} or {xyz/mpiio} :l N = dump every this many timesteps :l file = name of file to write dump info to :l args = list of arguments for a particular style :l diff --git a/doc/src/dump_modify.txt b/doc/src/dump_modify.txt index 6be0d26463..11427b100e 100644 --- a/doc/src/dump_modify.txt +++ b/doc/src/dump_modify.txt @@ -50,6 +50,7 @@ keyword = {append} or {at} or {buffer} or {delay} or {element} or {every} or {fi {sfactor} arg = coordinate scaling factor (> 0.0) {thermo} arg = {yes} or {no} {tfactor} arg = time scaling factor (> 0.0) + {units} arg = {yes} or {no} {sort} arg = {off} or {id} or N or -N off = no sorting of per-atom lines within a snapshot id = sort per-atom lines by atom ID @@ -620,6 +621,21 @@ threshold criterion is met. Otherwise it is not met. :line +The {units} keyword only applies to the dump {atom}, {custom}, and +{local} styles (and their COMPRESS package versions {atom/gz}, +{custom/gz} and {local/gz}). If set to {yes}, each dump file will contain +two extra lines at the very beginning with: + +ITEM: UNITS +\ :pre + +This will output the current selected "units"_units.html style +to the dump file and thus allows visualization and post-processing +tools to determine the choice of units of the data in the dump file. +The default setting is {no}. + +:line + The {unwrap} keyword only applies to the dump {dcd} and {xtc} styles. If set to {yes}, coordinates will be written "unwrapped" by the image flags for each atom. Unwrapped means that if the atom has passed through @@ -924,6 +940,7 @@ scale = yes sort = off for dump styles {atom}, {custom}, {cfg}, and {local} sort = id for dump styles {dcd}, {xtc}, and {xyz} thresh = none +units = no unwrap = no :ul acolor = * red/green/blue/yellow/aqua/cyan From be38ef0eb09a9156a85afb014ed1268610685076 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 12 Sep 2019 15:26:02 -0400 Subject: [PATCH 123/237] make native dump reader compatible with dump files containing ITEM: UNITS --- src/reader_native.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/reader_native.cpp b/src/reader_native.cpp index fba613bdd3..a4b188be5f 100644 --- a/src/reader_native.cpp +++ b/src/reader_native.cpp @@ -56,12 +56,19 @@ int ReaderNative::read_time(bigint &ntimestep) char *eof = fgets(line,MAXLINE,fp); if (eof == NULL) return 1; + // skip over unit information, if present. + + if (strstr(line,"ITEM: UNITS") == line) + read_lines(2); + if (strstr(line,"ITEM: TIMESTEP") != line) error->one(FLERR,"Dump file is incorrectly formatted"); + read_lines(1); int rv = sscanf(line,BIGINT_FORMAT,&ntimestep); if (rv != 1) error->one(FLERR,"Dump file is incorrectly formatted"); + return 0; } From a948a34f8a4397053bc71dda4d909e6cef5584f2 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Thu, 12 Sep 2019 16:34:15 -0700 Subject: [PATCH 124/237] added false positive, removed graphs from examples, updated langevin kokkos, improved diff readability in langevin --- .gitignore | 3 - doc/utils/sphinx-config/false_positives.txt | 1 + .../gjf/molecular_dynamics_results/README.md | 5 - .../argon_kinetic_energy.pdf | Bin 57606 -> 0 bytes .../argon_kinetic_energy_fluctuations.pdf | Bin 57374 -> 0 bytes .../argon_potential_energy.pdf | Bin 56655 -> 0 bytes .../argon_potential_energy_fluctuations.pdf | Bin 54630 -> 0 bytes .../guaiacol_kinetic_energy.pdf | Bin 43676 -> 0 bytes .../guaiacol_kinetic_energy_fluctuations.pdf | Bin 43786 -> 0 bytes .../guaiacol_potential_energy.pdf | Bin 43634 -> 0 bytes ...guaiacol_potential_energy_fluctuations.pdf | Bin 43267 -> 0 bytes src/KOKKOS/fix_langevin_kokkos.cpp | 178 ++++++++++++-- src/KOKKOS/fix_langevin_kokkos.h | 51 ++++ src/fix_langevin.cpp | 232 +++++++++--------- src/fix_langevin.h | 141 +++++++---- 15 files changed, 420 insertions(+), 191 deletions(-) delete mode 100644 examples/gjf/molecular_dynamics_results/README.md delete mode 100644 examples/gjf/molecular_dynamics_results/argon_kinetic_energy.pdf delete mode 100644 examples/gjf/molecular_dynamics_results/argon_kinetic_energy_fluctuations.pdf delete mode 100644 examples/gjf/molecular_dynamics_results/argon_potential_energy.pdf delete mode 100644 examples/gjf/molecular_dynamics_results/argon_potential_energy_fluctuations.pdf delete mode 100644 examples/gjf/molecular_dynamics_results/guaiacol_kinetic_energy.pdf delete mode 100644 examples/gjf/molecular_dynamics_results/guaiacol_kinetic_energy_fluctuations.pdf delete mode 100644 examples/gjf/molecular_dynamics_results/guaiacol_potential_energy.pdf delete mode 100644 examples/gjf/molecular_dynamics_results/guaiacol_potential_energy_fluctuations.pdf diff --git a/.gitignore b/.gitignore index 3e4ebcda98..f9dda49da6 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,3 @@ Thumbs.db /Makefile /cmake_install.cmake /lmp - -#python example -/example/python/gjf_python diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 6d5112b4c7..e99d690153 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -2269,6 +2269,7 @@ qoffload qopenmp qoverride qtb +quadratically quadrupolar Quant quartic diff --git a/examples/gjf/molecular_dynamics_results/README.md b/examples/gjf/molecular_dynamics_results/README.md deleted file mode 100644 index 70f80e3e56..0000000000 --- a/examples/gjf/molecular_dynamics_results/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# LAMMPS GJF-2GJ MOLECULAR DYNAMICS RESULTS - -## GJF-2GJ THERMOSTAT - -This directory contains a series of graphs, which display the results from numermous molecular dynamics simulations. All simulations are run in the NVT ensemble. Two systems are reported, guaiacol and argon. The damping parameter and the timestep are varied. Also the temperature is varied for argon. GJF U is the half-step velocity (vhalf) and GJF V is the onsite velocity (vfull). GJF U and GJF V represent exactly the same configurational statistics. diff --git a/examples/gjf/molecular_dynamics_results/argon_kinetic_energy.pdf b/examples/gjf/molecular_dynamics_results/argon_kinetic_energy.pdf deleted file mode 100644 index 6943609f33f30f3ab2fbfd5dc4bcf4a904c9d30b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57606 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 diff --git a/examples/gjf/molecular_dynamics_results/argon_kinetic_energy_fluctuations.pdf b/examples/gjf/molecular_dynamics_results/argon_kinetic_energy_fluctuations.pdf deleted file mode 100644 index 4a95d23fd12f51e6aaa6c5ddbc927b06e2e4d566..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57374 zcmagFb8se6*S8znxZ~swC${d`n%Ficwr$(S#I|i?l1wm}*mfrRW}f%?>b!rPQ>UuC z_ugy&y4TuWy=%2DN<}dV1{Ov(1j^xq+k>;RyMp=QQ3Q4%Gtl1n8v-96kV)3e&cekK z$nn>t3}lk9vT-qU`diu)t9 z`R?FNXh8fF-txluwQJ~O<9+AA0ov$|H0Sr_=g~*o>&1Z^=<0Js>0?)8<;>`_%HSth zuR1J#`03}LuJ;=sPtfnyUpEdO9R`=);kxoi?>7!!9sG>ISRSETrnV&-AdVj|F)`EX z5cwIQu-~RWysYbNqr(`9=4E9t_|=F6w_4N$lVn*7ECH^9%| zCnu9`zSCch)wSiiyP_-N(^LqSbbG{h8d$J8c6F z5Wqf=y?p;pRt85XrsTGR;d>OJeE7wIlC!agjbPLCY|lcj76AXyn}^s)-vps+>1LYU zdKc+>xUiiNFijYB*TJdaYl}*iDB9Y~jlFTe`n(8l=g4<}Zw;=HlRU)n+NhqB45`Z* z7kZkbARE1vONcZG-)(WF{bT86pc}x4!*YNhZ|>F6ts9*l1(Z*JojOR{L;vJVpvRm7IVCDaqN7aFLpntEASM8>ou63m+BkNEq%R!rZ?QPm?E< zkpNIoyaE?y8(z9N7=I)R_XrvjB^)Eo%Q;iH8SW>R{WX$o3w0D2>}GQVB~FST$6SP^ z@RUye!`tP?lr5ZhX(>S-ZE&xf7v;pozk@6|PLxM@J7FA+-;zvm4~rkw5+!k`NOH(z z2ZeAr*155xA7YS16aela)VXm3v&u>3EKEqw5l#=`B*5p!5DliQS#8UvRRRJR-nOYP z+*lh&f~jY@Ak7Jg05A9fG$7&Rqu`XZvUVKlwQK&ZtqTqsNN7#d5VG6dps8~kL!4a7 zRiCEZ$4;0E23O|V$38!Dz!@${M#g(YVj~`mU=tJUstHxfsjT^qo)A8|xp+JXT7c8R z2k&r{;gTlLE_()Nv$qI9(Ow*v*xSQjr2bJA%T_OqZIVY=xnbMa;?qe+IijnA z@94M2|Evd3K8f)~6jvDf=oMR7rRXTic%p;22zDILGh9k|5T5|n>BtAk2+G<|iqHX0 zp6Zgcl&$k9L0pKKet5zxvD8yMT1=F%F=9lZ9+@&4xI`e@OR6RV0QYookpbXkZc&f` z9}~nio*?EsoXgbYpAPGL@rQ_JW`Px8A7^i5(^2U%qn<7 zd%$YikhPF@SQKbh43J{UB2BKYWIi!F$v}w-n-&p4jM4ftot!6X4?}6 zCc>3W%nYR%V*v+j%FdrAKZ#NN!5sf%6-_zL9HAnlpJP&>=xi+joJR13 z>H|QBT^YNrz&K0YOj|Lm^}D*;4`aj#b>j$zx+cVi)Nr98>xR@CZ5wcOE#!s+4`rKJ zNUmXkYjcsP4fZ}V8{LBw{P4(ZVGC^*?=HFI0X zir_M5j*WulL9nrAc1>AJt;l9<%Rt-hSbQh#a&QFiAe{{kw>D4|U1|>45*MTsn?*Kz zqII4zqXy)#1cmzo;mrRS&Iy(L4)Zm<+utr|Lo$~o63)Vd^w_>3tff&i0*5_&;91g2 zbzRp|OW?#Ss&X@^h~wcpB-raJ%#cSUb-8ylSdh9StZoJF%sc6kP&zZKpW49Cd}2?1 zv5S24@fBRVqYwd{|H?(LPy8g*3-_Q;cf3p74Q1nd$B4~ zI)ZI{x_>(|ZA2bx8COO5F$q$fiW&&`0T+H~Cg&IzwS%ozzTB*#$aQ*ReZ9m(^*)8Kmf#{fmql^f>5{E26z)QNkh^hZ~-gyrHU;K2D8H=cssqq#2VkYxTM zV=dn z+~NvpDZ;=gVAdGi3CUwgNdrlvy6{CmFPpdvr7%#epui&@ADof;r(&421-V1HyCm)c zOkXP#;7;9#=BpHj!!r_?JlJQK(=TJ=8T_LUPzAF))m5r}-Mhv2=rKwj58=lfq7^2D zQ{ZA8;jb@d0e$|cQ1H}H2^G8fu|O~uh(wmYrpL$vzxd@L=*YBHIC=2#k*eQB1GWC{ zP#r>?TdtnF^^I3NV|&M0@k^(y^~jP`S(JY;N^5*7z{^*Z1o%xOGAiA}`E#O~TO?pB+w251BB3J8__%(&7h+7iByAL&kOC8(Y|{ zIcH}M@q$+M*H5s3OPye~gdN}RWH@nG2CJylKY`lZ`N}TMR+%Mt75p2-2=1ghoBC*S zkdBCCx${9%yjGtfz(u-sL8Y3-p#Fd&l#msr`LGg#b?r<~G-(jTPlriC^w_W^Ei_Qm zlrFVU>Ao02Wl3KV(2l`!86sMjAT0)$y`>XhG|Bv3$nq?X-;w!X{->PauRHa$`S#<6%{;iC0I$v zXIh(w>bPv^Bw3b;Mg#;$7`CoN9q0!5Qo%B{?TsRu6g9)4L_D>fnZX=J)H3L0nyCS8 zX$__+VYD^`L*X<(@(8SB6b}hHn@HI{bg{A(h&&d#Y!5Az6$#(212oso&ieaokOE2) zG@o}KA%((tWbX?l(MZrZHsV>mPmT?{4Lkwy)N*TxFs{P}Mr6BfWaVC5A|Y_<0DW$2 zww1C{4w{c3X@V=r(0-d%-dhyS9nzwo?bI+(>^62rW{F;*K~3rLYe!TIRaKRy>olz1 zg4}Xq;$Y#m7yImx%kycSGFdeZ~UYrXWWX$YN?<|V$SKz2YpL~O!F4pP7tdh`_ zqd*AJDC+Y3y|Mlnd)jAdNo;mH8xWtnN6Jv*$*Pds_Q(i-tF7%(HN739-Zh(vK75+e zS8@G!JuT^*s2tZg|Deh)$CA@MiGBl$!)PT)vn_u^2kL*JfWxG;h2$`lLHjXCX(i!G zn8YFzyiHHc3hhnYVn2xmynRUTla9TAKpcif!N@+-rTiko|ss2)k+mZ+Fw;qn-^NGm&#;bQ)Wqhb#z5mf2Q~O%yj#+mHP_tVT=u%9&A@0Of=x40#zW_(rM~ zLp{-048F8|tG(nQz*ZKij9LdZQ;BIJ(EWVWO=?22(R>B&mOC+DB`G`x4`~;UW)Ss6$ zPJ$q*TmJ7*O3e<3^Ep3N%`RKt&_YVC@PlB2gKM2FZ9KST(Fz%q?pK8qyPR4Ooz(EZ zhTe(5RiC?xd>7ba? z4LL4{?4Su!WTcCgEmf5yfbNjNZ&zH9jlE-8N}>(YrOc73%;CgRa(dCOge%HX*quX~ z;rT-4Nf9<#czrGhuRTG968gnHj}r?2Wg!(v4kmHaBn#h{S%h^(*@wksarVv_09zHE31ypr$AXoe7_zOLypJ8 zc1EEDudGS}3oWG(5|T(N0dnTFA*1RropnBB;IwCEAJ1n9TWFkN}cmM9SCzG+D% z8_**T<**jW>mq^=-Ay*ui!+ca`l|igQC0-aT1~k?$5Xaw(q0SToJR?baAmCZ^OQa< zbS633xZ;CTA+{7c_}WsG4tfM_DozN(yRr{C;k%_4DIC4ozK%8>sl=>DrGE?U1Tf{CGcsr&~AU@HXx)Nmq(x7JjaH<%luxkHW6GYn?_aaXs3-YjLP zorwDy?^5`My(U1i>WfCgSVUy;&k@XJrFAVGjP*qjh%yaX z^W3rCxOOVRb%m$vRI1u#x9g2u<8s0^rGttPuDP$9iC-w3#e3QM#-%ouwlpcCsqw#kkBHo}Z%E6GC~np5TE!lcpJ{;6 z0zkMNgjdzbJkb!20~NMt2*HI%dEzS3xgAQ)z2f7^lO4SX;iU<+Y8^8^6=?)n;`Gdp z_nBz}$0U{dj)14`BttZ8E)m+#+7uLH2?xZYB2Elw^JyZKed<&6l}7*J7>$LW=h&RJ`X)9|O;g z!aR@<0U5c+>gG`cAO>w7y&p&p0{c@Z@dI%Xh4EkG0vM3?`p|83Va0Idpp|{Ph&uTG-Kt@`|62F2U0Ku>Ohvgp!OFwzI48*)B$wonUq@BgStF*N zCCMEO{`MJ4!&iO2+WyP_JQJe&rOk&kfq=%X{nP$wnu{#O{6y*V^u4>FErHCrJ-L(Y z-K<3S-8x6X|H-}E`I0^uJ(mR>m6c>tN`=Ui zo>$$dX1e*Sg_iK5Rx9T4n?80m+HkiFeTSefMTC*OMJCv3myelxu{7ostFZGrm_ zVWo-m7^sH4NsSe>yVM4|pr6kPA|G~2J2Z0{z!eS8(dtxjZZZVpyXIb6gd!fmh4fYC zgV~D)_B}PlBYiY-B$7{vjrM`ytkH3-?H9*fCbA_A*wTTB`QZ5M-*jAs=R$>4;&_vhZszYD2!X{6xt5`2IhN{@ ztD1D2=rv)YvI%sBFH$j$k-I}8+-=dau5p`O7nUPhwJgMs$Mvm1?v;SyDluN+dmpiv z=~+u%9Dab(KoncG7~Lw%Iop%S&ny(9d{DH;NSV>u$2p`uGrBSf={Z|w7ey%81lr?^ zmHVlRz{yE8l9r@;6$cB(%c{7X#@LV>OLB0^JN*-4@6eK0cbnMSo&5qr_wKpx?H&f)F*go4Wj)#H5|9FEkP zloz=m2Oi0Du>{0P$=~gmru$rLU>yo#tWzm4B@j1!UyrzQLGx*|SU8ue`UdbA`+nqF zmJzUvboV|e_z8U&E@>eY7Zy^m@+@n2xmzW)Ox8Gi(a)Ifw zvE?37zz4g8*f4S-7_)E%kL2*oGU|HT^ER0C8?0=qVKKfo%$(Wo4rek%Mp3jZDjFd` z$t>Iy$U|Ga6?%RH#6U3bzd}*YmOuc-W*WS;9f-?QKjUimC+wlqX8t)L-C+@ZO#n09 zCn1*G6cX@|wH=aRYNgC>xm&&G7?}s>gw9nf)CzQOxQ;5zS(v|nHjRY27V;ocXaH|K zot*f#CPWktPsO#0{;hvXe!$N^J1=%wZKof|_QkTbH;5q%LuM2of@Or}Js+xQo46XK-d zX6q8UsaR%qK=Qz7cLq{xK=gzm`8`^@87_Is${V!WNaFp3*VTIy@m$h(-o#0AtA~L zwL4O8$Q`W<$DRsMOV*r*JM&>7x6x+6X~tZv1HpcH<;V@nLQ#GkPShW0O~Wm1F2&Td zS*R$m6+L=LA^d6F+Clh0Qg~>|LZ9+3Ybj@-Y1WfbRXpaGubl}D-nq)HjC~j$5PBi} zQk!g|Hg;IAiOj0Njq|Z-g;Ey-la2M2hZ53qW!{^NIEnNOsVWeOVj?gN$tK{Eie4fZ zTyf~UWvLO5^|m%{+HfaFv$Yx-_0E)UxL9H^DCwjwAHhL1;0YRO4K{mGAH@CfrvfP? zTYtpCsOVs?|2pm#iz))UxtT`xoEC&cly_Q}KPlp|ZA)j=_&QKcJu~sVzrDLtD#dBn z#QveP;L+gd4kO2D_h!2AklRqq-d_!i<76f%AK4J5{+P?BE>TMPt^9EyJ?z^R zz{SA4zKIf5uF+Od2PV@-XT`ibk0tJAvUSFysovJ4cF|-a@H#SzJ35iKLu5bqy7J~{ zH=xz_u5y}Y+4JC}5dHLHd;L&FyS+8md}n>|79KEz)^5x1W^T0pt@+v}*6sls4`{GD z@1T|C=t}wp zmPVt7(VehBHx5F;dcHX$Uk+qnCw)Z2TqrW{Qm)O<>k1 z*)2hI_A8d^bv}28nuL%@E7deL-D{eMMf#AQ%5|Y;J1gtIPh2B!82_}o9=v&1Z%y{c zt~xqt|87;E9WX)QyxQN+uhApO6Ypw`WPHow*;@?EHLbZBtV5prQQHy_?Pl9mZ@J1z zcQm^fQ+uxUm8ZRFVtgV;&aFS1d_gUE35v?uZD$1sNp);Vdx!3kAuz1}&VeP;aNaYu z>2z}~42QmFjm>qqKbse_K4*C%w`2cnr+mf6Vvc8{{lTmTM!m*mwQNd-{a#|ywS%wD z-d_K>BUcWWvE(K{;cPbMj_OO~@lqcr5XFv0<3SyR>7viq*~8zcHrMIk`?x$1G1zwE z$ur_tWl9C&Z;2`S^3MMB)f77WEsj~69S^2RkeC0vzVc3aN>#rSjYeqkH(V5qw#=5E zj1+E+q@{6I#~@ru5hubtVR2lLl8a0#gBTWp@cZT6_P|UG~}Q1#1#0XAM^XQKR5Kpv~R5Pb$s*?Tw$X>rXi`E4lCkrVaJ7rB+E2_ zL?RAu?!xQaw3tvA(&>|w1)P}CLEAp<*Q#LWe4S)~X!C$HNy|lolf*Mb+Ev%4In@QJ zLXFw`V^<$!NqbrIOt?QARVoIDE?e4&^GC(CJn-TQZnE)Uwuf zqYKNU1k5-#4QzK0vGS;r$N=i03FwkL zqDcH|zvUgf4eTEEh89aRwB2ze-|d~6PUNEq_wW5L4})a*?vOt>tNTm5S8X z2en-9HTY=AUo7VwoJvQ}((Bv#Nd#J&*zvSDN|?#&25d7fSnKC$2p{>Vg)Qv=u_CY| z)ESxcwY?XcobegfI_i(w;%>$1YN~Kw^_(!349K|I$B$;k#oTM)czoCk_CXq3K@BL} z`9ZAt?Mmj$>u5#jF}sqE?YzS`Gl!nNF;AxAut>isz4E$LJxjr8y`S=y7<63$f#8B$-tcR zpphTmPr-U%N^#;1h*Ss*krV7)V1wRIT?35wUdU=$dJdNlSl&&DU>YoS1B`|?ryFab zGfN~Z8RrnA5-!na(Ibo$-c|?agNG9g$j^_IYtVP9hY{_f4TwN@sc+Ya_a~65T+h&@ zDM=kLeFd|S@gLhbvh%&h>zm-?L@K=P!K0A;`2~#wMArs-g{_9DSrv_3+=jvY{TdH; zUz=dTWH4~g1CgT0AMaa!LV{6$Tluv`Cy156-FoN%?vw%z}FrO z+B7=3?%YPfF97M_8al(e*w;c+xX+8t=*d^5^8VnRlqv8yvi8}9uOBKD!75RO^GMlO zy@ulLpOk)sQV4)dK@g@p&_vDy8cQrQU>Cu=mZRMsIiKTTix4`QA*fpzAxs-{Wr~!O z)rc|^ci4ubfQ!NFCDXKn!Iz@3Ez@ZP)07-8@Q5LKGKU^_yTExRMdZnn{vqZG@!7AR zULie}7O`N3e(_V32M~!ARc1igOs}1qA}~V1su=REFBl`7Lm?!TJ1CJg`v=nmWL9wt zX-C3IHNoc+3;Z3c*kcPd`eH~J0R4+eJ-lWey{QFeD>{^x2drH^JXTC}*piLNme6%8 zfbT7Ker~KC54VETm z@|JC;lDpCcVu8IsAj5ZF+f>4VU0~*W_Q6Ev!*(MFEsGWJH%J4oTgH%Qy5U1i+s#kPCY*FYZwXgj^h4dJPA3k%WkJG~O znuc^+6ek_ZX&orlXLAZ+Sh_hc1KN!b?F}i7)hvGG&WQ$NRsV%0N!OJAD>iYP>;J z#+HOaEqmWI%_>XWiR$T~-7+cp4aAy9)sbW(?i9o~MY6$PBA1kt8DMFl^6@N<_wAcZ zcB?U7VeDFsW_E>sEul8;pv33{nqW0&{093%BG*okX#`32BcxABtmaBSw|P?TNyRvr z-8c3%X*z64>PiBZ{6yU70IxkAu^aggQv-h>Bs zt~4aA5ua=EVXpidKfu`;7P#RrLP-1T0o^xD#5hvY1%CjdC1^F(fj2E`qPUy5ZD=*sM4uA-_^Rz1K#oR;N5)nyT?7o`pxt8D&lkFxHxBKZ}q&#?_t!*k2>?a7b@77 zX$6~i;vS1&4Z15>&Q<>U4NrgHKMTa|-AWr|wjyT3^8zCdZaIGCsM>>9U9TB8;=PdhCcjk&dN$}tg0lT- zX~{o7${@34r1{2YcK}Ez85(T^H@>}?8J+}n28~I%bBVij8J=GRu7WW!-{DD+7T$4v zzS<)LCSRkyP+vv z8MSJ0(m?K3aIObatC+0Zi*kInwW_-ZR_V+dgiC+_>dYXHhmkE{B2uv#MjRJ~kaEgO#q ze9MoosmKWpp2y1Grub5*1=B1pJV}L}hiP~62ysH>`y$DsOcv40z)OSti9s`EmV9dF z>-*D98Q;zs)R?t6J=Lg)A35it$fI1OamUY?6u9i6<*$s-7?Er&Cuap6*-wk}fc<;q z(wLIJzA~BzHFqPb`c&atbA+4U$BIB#dQ}GR*49F5WVE-!nMk5o|q~?QU+~Dx#E63 z-h8bYcDvIfhz!#=ff)9Xerg4>3SXB`sIM{Q~6x3!s6)?ik!w3#%Jn=_FOGGqC>k7%z zBe76DxREll(CaP+w_ARn7hX!6xAc+I5t>f@(F{$J0NWRdSR{_7u^5yT!lbc?JKvkr z+E#E77G-XhMFC*;G?sH*mWTy zR!Ls^YASe2e>*8YS3=AQ|69*n)|Hrowbb0Q49++)UsWQPIs4O*6fjXFOef()PG$s) z?8o&z*f@T@hLFK9mnCc673Ax znptf*DD#$jlIUHV+?9V;8mRrCm}rU_^#U#WaZ zk?yXTLRf;Cb+6#+UXe zhcPQG3K`NIm?ng=gw)501ZkzNtZ_%rJtkElC$r{&0A}@w!bZ`$N-H`lFam+F?#Aj9 zMH^dkc#7wGc)oIY=Wn7rFHsaZKRqL?#<7PnH1%pN&6Mxk|NgV*#BO+5rK=<|aOCH~ ztN+Btl-`X>7Rk?g6#0ydL{1t>E((ng zR)$@hoPZ0dE)_}wAt{0(34@6L_k9Afl6e*=u6D=y%nKNL;U>+nbaCwyDq=S6$-gIcRvoj7*`2uBY~a` zOfn(hybl6C4(x#y5`L?<2yKDSKTd5p`P4D&*nb%PhaU_Xp|A!V5}u3{l>RJq%(w`O zzeXaAeQscImOn(JZyILccYPYp0r$z32ZI$}jk28HxqGnia>L-7-t&BCSzyUh;FlsIsQy3c_c_=zGGm_v2@v8a1SrnFFoG@}HFUa@uyk zF|}A15d6qIxwaYoi*ItxC)sPEiew}L&!b{pq9H5lFggvCr4*M}d|Wd!_;!T<9FNF- z+)yeg(Z3U7Jg5`y@QjMY{S)Wo0}dS4w`+e75`_TvZVCbgQD+AZCG(A*G^sch>Uk$2 zcq=;DpzaszV>fZ7Mwi)rQEqj`O8%ao#zrc{Pf9F}a=Z*+t#O%1&FW{Z=A*5~=>Wfb zY^jK?!gXP7ng9dXpZi({xxxl-+V2WgbkRg90(uc&^VNxN`xh6R!51qUZDjto?tZ5W zj~uTe;dy6n~emiaS`; zXck8EZK(NSWtTx0j?B>LQ}7rD?AkbW=_UPn>LM(Y+o}O=Q9nS8ozm6v!;1etTyga`6ej?$yuAT!&b9Fu+*WLiys^<3SovQ*clUs|uzEW^bk)zJcM220Sc< z?^i5+0BmO=mGKPwXlJkJ1eBJf^VCSBNgABqXOEtE7ebdBVlBtXy9vjIS|uLZ$w%ET zwI`+go{s_&Q<&|u+Nkm_m+VwiPO^g!DD-6Z``zT#z<;nQSdxFs!0 zOg{rgdJAUVGDU$hX-QM|rk_O2^*ql88>`7RL2*G;)7ETo(m5ZQ37V}mSy-Hqtklw0 zBRO59S=^^i(I^Y|St&tls0&aFl}u%n1cvu5lT=DF=$LOJ-31UZWZLBKMU>x|w-d`5 zh)rs@s7ez^gEIoguec-N$FYB#Dkd*LC(?~jg}IQmQcjR#4%G^*BeqR?6E8;oGO>ut zk_`euT?S=mLDrm{vak9Mc_JXq^+vR4l1{Vb1T;hcY zBB^aHgTgV(6y{e0PuOn~NN>?3sejMn&D@e=(EpwdHpz%!KOcbJ!g*xM zA&%PT_y#jF{u``JzZo>+loWIIivrJ0nAJ8RhVXP7kD{2V&$(0g4^)o~c#Uzp>%AAB6ZJl#Hh)fGkTf>ZOqYx_)c@t{N9g4C(gr05B9!Hs$)j-Bv?P@e9g0}t0pF5lc8DjXw2+|l35}6jFO1`i4rJ4+BYgs9mACqFKj@iO>K0Z+A;)Wc`mI7>x_eg9 zXp%fzU{DDqVIUABp%I;s^vM6_%KWo=&+9IDP+Wk+qR;j}Q;CCv3?I89Hv|SZt?In< z$+j?k9xOz2#to+i4C3DuOKVA}N4}Dx?<;6Xa2GbX6gF%kyW86xn%Fe17$9LdgP8z1 z-Uze3ZvIQD{)0_(9*&mBkU+a3)Fw~x^_UGSVTMjK;oUt{C?Oz6SRB?E0*`3BgP3Ui z4=CHhhSUvAZJ>@u><$TF`l*ywd2n}yAUF$4P^Tqba@P}5_T$`RHfrj-Za@ocRa^;; z|4gU?nfOh2YLpo9JAYNvXAFYt=E(z{_oa+M=+kOl%KqCWq()xm$0MW$4l#rAnVo{x zTE55j=?qtMknnTh9$>Pw{cbp~m@Wak5@jgq)`rCx!ENCM6regn-?N@oYQvncykDjFD5x`(NrD@y|t!7q_&U8o0WUuchuXDd#Q>s81 z4MB9f$4aw@>V#)kf*KKf)6jt(Zu--s>Zi48o31L97PEnpAOi1y55lk?Rlm+GPPckp zNqNoTYw4L}FM5+I9#m>sr9%8Y9K^FONcK2k*Vjo%+nuPEAEtun5Osvdk#fJA8qP~N zz0rC(9H4sC_pTu0YaMD(Tx73$-B;h=gfOM)n&&+S$T27Y{2r$Io>5;v*S`#~_+;9V?QT5ZI!F5~)|Vdk zdFT0n4)C1_mep*o&mvcU7O8lx`#AsonZA&2+kPE}v(z0Kn_vt=k62C#qT+;rp!M`cqhqc+Yods_mB3+Z8KEtAOU;W>DarW=v zg&~4;mP`RB!l7&$9vYh@LU0r!LXa{I;uGGkPCo`<=fPWV689>sT{ZakTV{8Q#{ZMKur=SzIDma)p+0RggESc!$4uw&BNtwS0E;#N8$7l^YBLF8ve~0 zD(ov_K!F0ITqMJllPdCOWVc{}3VB*c>69SFx0a3{qH~Xf%jbeC8Kxkx9M93 zN^`r;sBT`IV9XGqgSv3j9>lAUtbULP89BXfMJyJTMo0?^EDWV1;x}W_ zi2UI}XG~iq+b*V_ri}dsyPu@VzKZ6SpV~v82@N zj_PVmQIm88u_iv+4=t2ZyPFYp^P58S=L^N7cHPJp&;(%)(nzwG@BPN50PaYSX>v1# zxGvtVn&5>cNrEQn3+2VJ9&-@P+}$%ZkHdY26Z(a3)^vC>xIxx(ok^QI3S7k32z{y>HEym}7f%o?v)}CBAvpp5ky(mkxf1eCEE@*^~K4)4-(#Smv^{aeZ%~dnHo`)wIP(EE3Pm#A1J!(69O8 zpiS2&%+)t75*4kE@$@K2t^%oA2L+^68=_Af8ePbW;lF?r2^k80%`iC0n>UY)U>J)2 znJyuaaT>Ez+*L4Hu%-6S;NueY^GN#SPt_+Z<1hMI1T#C+|ANqeYybG^f6(;5l7)kl zh5cXmzXt37f~!?M9n64CibfXy**cloxd7Sz2eei;bGCPNGBI-oa{iA&)ZWhJZ@)9} zADsP{#FjHNwK5X1_W}@ta=E4VeJ3<`M2Nyg}4=+>`he6T!1=%ory^R znN-a@T!4B&CQ*AEdnXkKBNH>=Kh|5+nFYx8pTi3X0GY%+TqIRo{&L>`>63J3MPT_C z`(NLZe|0SX6X-vo#NW{Vqfu350doIW@>jv~KUGy#HXzHtAeH~3;{Ryz{|5MVpLJSTvUWLC!Qyd*o5)(i86=My5Rl{+&mGwTR^?U88ZFSA!%6GLB zOz|xUYS2X!Jb=AW6YKJ9KoL1_%bJ-9~I64M2bq&2p;Pv)Z~3C4Qm(+E1(d*sG4kV zxX$LW?2xW&A|st@zYt$*7O$Hij+1kMPJRZIyfFT z|8vu%@?y+Fmog-`6X78{ci)T@$BYwDXP+hxPN`*^X_AcnPwThMc{NiH0PK-MJDaGfH&qR+*%n6VV5eH)3J7)!4c5Gsb4MIz zqn|Xqi}VFC`uyC+89d*bk?xr5H9yFHvM&tulsR?zs?J-ABN#|7jm>5zeo$Ig`c-Ut z8VMzR&h-5W?Q^dmWHmD}M4yx2k8=}xtfq9F0v{4-*%itcsF}cMiV)(zyyK6{`2`lw zFV`B&($xUWHx#7UE)6?w&krU_4oP7r=mp_>rh~?UFy7m3S(8}j9M9_YarB1-Q8&tN zM^>0j%LN5Vq_8qiFkbmhLv>?+Gkh8zJ?YB8!_bE_0KXzMiO;FV?I9nLlU*g}P zgSw>|fi`^2ApNco(Q*V!qS5mZl7$u!anvE*gavM>l6%Q_?c+cpTh$~te1V-2Dwp0^3 zKYU{k#x~B?H`+j*o;b+wLy#cTVgN{-YZ0Mn04Wd>kwpw~9&oW}N;G^PPIH7rjNKjx zcyP8}5+?cp)^4y`__n@^-h#dq<9w1ql8Ow*0lP6Gi|?~vzW#i50f3@Rz!{1iDK&zw zPenIMSEDMi8e~cDj0YEfunTJk*VelUQI8Tpm{% zW07#0=s_kQznJKfs6(Ggp+n>&^-=KF1gy~gy<5>Yw@M{jY`d<9FHll6B_~1uw|jeW{}+rB;Q>Os}_)eq~n855E(#*~c7 zYQwm)%PY8APf)=T-y4T@?3Cb@F86DV4-^coz3jhc;$E<*Cs3;+h5N`=d8eud2P z%)CzVP7R-tt|`J5-7vw_?xO6_>`uK5z1(dBl9HIxY3f|{T%G|=g9f|MYyMpg@~V(@ z$ymvVVOhncxeX=VmdUzFSc?Nwa@JC|*1?>rH8r&|v4t$IUfvZb09Ai z8>|-EivuP-Eo&M1nOl>xtGBBQD4o8jh;U!4MAXpCka$=Gx-`0r*syrN=)AbBsE25x zsB|KLR;_kVEL=UDuz(Mp00+&3)Y-oHab{gQc=v1vdiR2!Me|SX*@}Jre(~sJMYK-0 znjJMh4guaK;%5j-Pw~D?#hp&G%RcC0Tx;-a?BM{-VZ^o8lhIoYXktK3z_dtWpH_&0 zWQ8P}z;R5E`xm|F9i4HI#r%n^k#q=UP?ls)TFyy4s7 zS8q0BHWw$84(E@cw{Erz3;6QDg$m8pW;qwF?w0NQj?*YBLMw^ot5LDh2qT(Grk zg)D`t4qemQ%Yy--W+8>`cDe}-c*}lEG|TgK3jXrozNY5vbEULO*Jpo z=k>9Nfb;hJhx}KUEoVrVwe{ncTR^hDn)dQk#g-ia@ERLVj7iAUpk`pV$yV&|rn&n!>`NIwKWJ}PdT&(Px!i*iA$ ze!aErvfjzloRgML6CWKPk#mXbm`U+K@%+J_D5rUzxkZj5j(GN-h}ePZUAsY>_pN(j z50uj5A1t}ePoSJcT-Q5;PXw14u)ND|pe&lx3n2}8>}DP^9-GI% zX4CN|@aP0mKRxflACgmQzjBUD#!R54rE+Duc;5&O1YU=QU<7lkI`X&F?aicDR8?$@ z`X*LtUpLzqueQIwDJPbiRB&nWc%^%_p9j51Ea10h{Lwk{Hao7rv}!-Lt$qKqTOQc~ z=5_d@^~$jE(Bicp`I(Lb5(fTqLEqu=slCQ`?6vVe4N;7sEimTJ`EL4daJHL60WD9R zQ6fZ9Q?VY)Qa+vT<0M1Q#N%3}I7SwL!|sDtZe;lb+A@Mv$=#q6@6Fm$7| zL*T*pJ^R(*ZZPKfO#VqeAu~e2#S`l7#+BU4_+axf;P&-@V!=N$^dA)XlI;JjhX3mB zzja>{T~b(BNYBB@kdWzLt*`ap$NWzT{1+V@{!cLQSKm8*NpmJb25B=xhcEU2uYTA1 zPnrCmnDDO%7uIvsv$Qe!mrES}3rPM$w*Qs&|6d{g4*)PII_W$9!!v))Fn;la^;dc* zGwUxyl7?U8V&>>ZC-GNnI~aTcfS$GE-&S8I#qQM%miz%a#!#)4z1_A1Cv-;=fPkzfx5(aedW&QOf@!gy2Agqu)>lee{25kVlOi{`DbyGh0U+dqU=aA@l$Bh<_UV9fihM1FnBI zcE&FN{i4yo8!HPJ;r|m)|1|!eBmNKb|8ys(XY~b%|C>{OWk56e3*-MBA@mQ3(=oAg z5YjPo{nINeAty7(msd-E1(TV9ptXsm(bu3D1pj)!BOwRlS5W>N3XcCaVG!1{l`t|h zF?A$lXa2%d#jp8O`P%~UZ!I+ImvII`XA@O3!@v31IKEauR?qd{5)&iqSMl%Kd^!Es z+A#kc=>IV*|9RKpzvASpmw)2q-y#zs3l}^4SAYMvu-R*e@kE_p7Vw@JJ3Av?CQU`O z1BsF8@!Kv)4UjG}Wq*VLijDRtzc|2`=!pfD_%XaEB*FN-sYp;jKo8i8H;UtI< zNVH2`!_&e7k)~}yA5jMmx%Tric|G9Qiuw8F=H}%r3y;IWTIQjL^(5Er7;Sa{B7r7o zj!xavK~UXl6soLUdXS3Sty$dBgXqt-NH&S@7YU zEDz5vFRY=&sG-HcMTWu14|)iw$%p`sakWE+CD- zACI%vJN=^e^3&o&@D&*s#BQX~Ym|<0lalamzLkXAdv+J_H6nmfBrCRMev-xb&HpgwL8dZh>vGI(a@> zCZ^mjes@!XFXXawRk;A+q5G{ojay=@NjeJCpN704q`;T3@*=K;$-pnmYOoudQ@p?* zipOqw&|ge8e&rKQYTmMSvS;!u*7in#6l)N*iD%no$$OiE+mT+6_0^Sbq=457VVG1EN~BH+>QIY z4LU{03Cnhw0P}iZt>V8QXfv@sijXZ0F9Bs)G3CqZhU^I{I4WN^))?>hk@5+nanrnwlzzebl(@-h#2C1fmFcM1SKOgdWm#9SW>~^7HzIFr;kg zv8Ek;I?DWviqQ4TU<<2{i~lNxj*2tdQIK-`BR1}R6-y|>b@d4iKS&TmEZ{2WAe=hw+YSfGx&3_A3d2>A(Q|`>Ch~K9i1#X5`g2?;(=BYd?$43kY0x zZw)vyO(>wbte~o>soRL7<%~RW{j6rO=4-DN{VRW>SLdjAmyt`$**X2IVB&l9=*D&pf%9@y(^)#bM7)w!$k4Pv%%(^Ip%_6d2W85s>ThyNXDL^BE=oyqXpz2inTcRMhyrCDVqS#73C z4~uK*)&pmH#YH_TimF;lv!yhppqaX<*N!5!IminN3Z@RVJMYV= zsi{g;LW-zqyjM%V!D!Z3l!R@4q+>Ku(Uw%H&?&E9nhI)chx(;#TBw18E!+s0!X(Zs z0W75Cn-dvm^!O>y*S9?^jJADRo8J0Fh^t`z&XfGq003OeAwaJ8*f#;JM=4e~m z`Frm%zst7o%tjN-=}Ty-xX%l2dXRm-O=xKXXi6ttwe^4}5cn#uz8&hUm8dHH(j|OH zvJetYpbf@eU8af5S#eOseP;XIO^(W_t}7bAy560h$XV%(bUs-0-03C;vHo+o=|~b8 zTGMl@>UU$oKVKp!TK|q+H++)=b3x5P-TRdkW+BT3Fv`$^usOfPPteRz^1d1K`j*1r zNR44Wg1wrUt0`I!lB@a5me{5l-n8TGl+arAaHD+jmLf>;T(P868lIz^MdF{Dt>F92 z27fMF2@hYg(w>&UM!MFl7ZDiU0yUiWyqMAl_7+7 z(P;;%d?nBWf6jUQdr<7Lke9us{lXc*v1*k$C?*@!3goTh_TFcZJ1C}AGw3lRZe4F3 z%(qsbL%+Pk32^aGndK^{GzwW=doa^qe_$eLgro{vK09fUr)d#& zjc@VEe@8szI-h-$IiJ1i41M$&*teTFNBM9#hI~X77CdBrDQwemSsj$C25=Kw8#ubg z=d7(Nhi=WFG zZ?B|HfCQ#MAH1Z2pK-hal*yH@LVM3VV$MOsOYOqU5}55?gJa@v@{RB+ZjU^@-beGP zBATgvyeWiij9sE6m5hZ_yD3pi>n3C8%=gY~bC1Jvg%PHpkUFGS{=zC+bJ@j(D64T! zDD*443!1D*JVYr7#4i|N-dqR@FGY_YqaYq25a7KCpiT&B>u%S5rIp%Mr@)(h+g--k zL?2Sn5Mh#AnC87?XxLJ~i|ckA1O%}Vj2dG- zG8XB$7(KhkjrF`E;Dvz1{mv!k8FS0WTXTEz!Gpj`CpPwj& zNBb8O@g#9Dua6f$d+wR#EBfOgmwVDu#{pPm|O=~gH(9fApGFXE>34j+!5F-#(F+&9m6ybXRPLhm{nd2Xq4p2sC zF$GkY<2}%@+7Gga-yid;Ko>7!$&d73 zsiNvrVXHu6h5l$vHMvVd+ke?QcpF$al)9H(9WVB{kcUf7i6MS+P1Z=|2?yUgx^KA8 zug%_HFAw$<()oCKN$+fy=WOHV9Fa&F=bkc!IbjyJ%TkDpk-(&F?{oPkPS0c}epQ@H z)O|Y^Lm`I%KfmeRxM#3t-6k)`6es*M_m`|0VFc{J*FD%k+`DXKTTL2*6>6JhIPCY6R;&oS7CWZY_2y+|V$-|(gn|A#ijJ~U zj-$toW7cthiRLTM_FiX#`$$|?j*yi6G4OcYNjT` zuCm+lM5{ywEy9p21!n2KI*yKv8WRvxBqV)z{f{)o2smT4%G>-r!9QNscZ+X!s%I0@ z-3GWk!RS2Nw;_BaHc-G3ViXb8=icR~B+XQno9q)v&HbuT6>}@r#5*~)!Qs^*dihxj z*6R&iY@~hiz!6#SS4FJ+$c%DYaWje7F4z*90RkifdNZ0c;WF0{@65T}!a&?Afl(j1hq5SkQU=OuLe+#{4HJKt%eb&*eREA<_WTL#EnK zFHF>W=KkBD9m6?*y`GGd#q4pXY3G?i=g#A3p!`7^u52>PXOP#5CvMj~s%$k3=AH@U zCv3KGJHeZ?%3-y>{ESheSMC&ktDtOM#*jjv)@FIbpp)ep5pu5GG{giy3g^<9>ZZLa znrWRk_nePM`hvMiyr}>Ez*A$Wmx1apFdyByT~I%XLGy0 zt)RtbCc*^I!=gCs=q8VjMeDEXLWUW+G3Ei}dL0Ogg;}By)jMdQh`jAB+Eaph&sDG* zs;TA5Q@rt&Abzo2xth}V6qLOWHxZkq)XFe{CXOK;3;|w@pIC3LV?*OrgH;hL`Z*cl zrTpQxzz_)R=p`t$NQN9FxQxd4BX4FUr|5rDR(_E)TB5F1p$se(s!za-GTVM*O$ik4 z&YDiw}EwhQ`m#0-&^|C1dWBQbf#+?R0l_%C{>pP)E4V9N%2y z6VBO@InLqb#z?H*tdIL$#o4vE&X2#Ho!ub7Hi$7A#PVPA=QOsM8fwd7lNhdkb3iI7 z`g3CAyxwC!J(TqFDmE@>uCr^L7~lr95lrVJ@bU~(mA$$Px1!%nT<1M6Y;$$;^C)X;o7Muk?(* z-JZv*t}BBVtoP8|v_H28Z%uZZh#bkO-Q(M1n!Js_NB3@;GVReTo^))L>}i_kH9;18 ztadIAo$X(nbZi;y`PMYns4hq@Y}UZ6e>q$cUk>XGMjaY`h<%WIqYFgIZ=pO}e#mtM z=nO1gN4&Mav3pZ|f`0OTGJj(Gq~Cz22nu)sYR%X0=1UN_y^oAaTWoU?=3G$iqyC||%!hSKJFfSrh&iHG zJGLulBmPu!Ih>qGg%F1Y855-t!Ec-{ClhWxi&}hSeYXCUf84WZ(RKV0;he-fXv6pO z_C@*xy_G;T#_>8P5RGdQ5%vmJ z>n$bWAlfJV9~YVwY)&RlyFw!MAnqK0_i_?A`5Ca`)}3}C&;$}?A52y=*KJ`O&$|*c z+TsDbqS_M52!l;)iBzN&DF`no5W|{5fq~K|nuBbF}ZmJI=!_v-^2RZtxU`e*KaWih8aQ5aBzd~-as~uR0;|*WC z`BbC!*@K?;1Er|}ZrC0lXY%z98HLy&x7%?Xe$(7IO$jgg-Qe8{#Y3X!a_Ltt%@|^N z(4$iicU%*2|3%m%tCf$|Ls58H$hW!eCf&yiClN93cqntC;1C39KeXaNt#>qMqZ*uJ z6Xuj(C)LIL6=7TPHi~I-e?(6TCPz^Z%9Jb5BC%|OIgVW{>sEuo#1{szo1yOR4h^^x zFxE}Axp|32SrTG?%r3u%mkL}%=Fp^kGQavk9^wgHXFW{AjtX3|Z zNUoDOx&NfNJ3iLy^oHqLG4%z=i(@T{p9iW&MK~xDD77dj;;HcU#|-l4*QzMG;2abs7oFOtUTNtZA0}J6pb3 zk>YW8nEo`_673a*X{8^N!~kCEwk{?^{d;XU3^X==#Mo7yA+ZS+x)<}AGnSk&puG(3 zY|!yK8+v!YogJ;#sPb5URp#fq#X%5tR1rArq|Kh6*gggqPAd>>1iGzah4HGj#JiJ5FBLv zqlJK*DKak{kH;C7>!7oB$&e!g=Ik~xav33{EaEy&-s+y-d*-%ph2b#W`qI0j&|I-CbkRAH$)BEdI*tJtig*+)y&=9(XC*ELX%jcjSIaS+8wvTHQAFL!?TX!U;VG zUR0V#c~5s{YR!1*%%E;{{D_>^j!|96BGty!R7lKuRTPX;We(AR2h(F zVqbKup>iaQWiNdfg+0Qu;C`PwfLnb>yV76RKe=Ss9hBo$D!th;J#1!wZ;={m7lwxT z1ts!Eq`!nRvnoHP889Ncd=0Z<2C}{`34n8Yh9$2) zAhW=t?Tmo})^_AiipRj|7US+%keDF_!m!@D+N-QxMz7r$GCIy}UnSZ(yzTlatsI_s zf)_l-TrG0yf%kqoHPD79d|>V&@-&7#7q(ns(8lVAVfiPT#MB^QDXPrDGR&aV=IZCm zlXV@FrP(ixyF{_Mu(FBQwHEJU&t@;7Z!aI1S{zK-+ADO-qM}Iwb;HBZr9ZkNF&1 zVv4N7xxx9FWLQ~gQU|Y$5i*7}X-^qK-1U2tc*jO)SSIWg>4xiHvqiKymHw2_h~7U5q1>A!`pL0G&%#a5SlzQ?SGrmceWrxul^BiH%5wrB})86NVM+0$XT#WI+hTy8>ljt zU@5bZOm`mr+}a!sPA0p)VjvSkzBawbiGOT+cjuUimDV^=ZDxCz z<*mJ!0_B?u4nb1yADKPWB`EFND|giWXzV^-3s(Q=4B_rgBwJ;jl1sL}ex7|gai=HG z^dmT9;y_A@)-trqx1$mdHI2Aj6e& z9QhP~&b#`)Q9?YR*R{C@efJKw6^Z4=yYKb{Cy;AeM@h#6lZct*kCQwm>yP=Nk*f`o z1F5H~+ti?l;jum*y8DusVR{7jmPx0>I#6Rb9sRa5GX9YIa11`IKbS>tyRO3=pTgRJ z=S}O5;V=$oYPVow9}my(L$GMbvIls5h4W>KwC8`O+c-%$6{9*_UNk-CsmDz6w97^s zuZ3RYo5f6|3Qq2|jFS?VE<}&Rq_+=_rJ=!xt-+A&l`d zogCBq5W~rJ?yqMURa)(sg}vQTpYSwki}|IeEo4|b5=K$2`wMg1h;*ZK`^zQ)fHg1x zTKlSN?DP{~+nW%fce(CI#%(+6*%hxDXy(n*o+gCYjx^9P)>6Nl2Dd*Cxg_2t z&Ui+yVOtru!Qg}Une3V2hMG%AE_O3cATH|qWgO8N%LlObdniv|d-r?f>F&pf)?Sb++-0Pf9G}e-25$Eo>siR;0m&19KX7vU_8Hn6 zZ8LPy-1&C$rgKMU+vAzz+2u*#_V6pO5iG}sTT29C;sp$+WR|*dsdqj@eEN_vUQmxKy z_`za|_V^|1rNu|iv&3!40n51PINA6jaldmhF*4qb z6UCB?n6~BO8lFQ3#2eq-nqB_c*WaztcZv(9^dPWXH*jaX5x_qMQR_(u;G))+Gq{fW zxq@y33FOYo{izd##5&yvO?N!O&?|P^iz$9SF>7P_adz>%*=}J0_W(EI z&+DTEeXhGs0j@dUMcC5%6*HA|#UUUN(%f(*sE{Kdr~k|%m5aeCRze!2Ow1V=Lg3A& z>=Gm1OrL#Yuv`hp!RP*vZ4ew3riYqo)Cc_#FvLvV>@A8H3H~Uh(gS|1dWML{oKjC> zf(;rq+>P&wIPK74#GSan=DERce5vw?Cr}yqqj%`?6Icyx;3$VQhfl1*CV6jmA%{Tj zS$5U2JkhV6Lz(!O;TG!HGCYQep0gggzXTrkVfhMVCqAj~#;IJ3XPSzazc~iVCZTiO zEI!IyOR$2ym&*gibsur`sZIFrv|DY0KNx}=40t7(rvR4E??Sp=%hD9uPHl&>=nIcn zsI-@0e~?f#^zHOXsj4k>SVzl#lGfIUMzim-eM?aHokB^a4q1z#tW6r5%3f)KX-#KF zV1!EHxa|2sK^gNPW0>Sv7*r2tiT-t7$;&-O*8|n15_4zY-PJ?a22f_X}U)zN*q@X*VSsMhQ)a*w*Wd0ZGNNY56jj z$6M*S!h5v`_JLoqJ%@h1E{kImnRinYO(>nqsZUp=97P%-EbNcGo|+H+i~)g`MLOoH zq!96D+Ydbv!_Nif;=uBEnr%<}uR@wm0ORQI;UVt*5?-@9D;ZEu1xZ7b%2E}ZwNExe zQG=yCJT9-B3!hg_u~BzxE$EMK8Y%pqfaP0}npdaJu=&DKV*{34!_}ZBu;iqZWbu<2;2e23jEVBMZ8)-Oiufj(nLYY5*8Xe23V(=s1aDl*V*m~u~c}mOdtt%bH=-%sc%Qu3ZO7q9o2giE)U4WAbc1Z62;ECl2R6>6Bv9Penyl`pLDijjM|1;;|w3GMR z9KwP^k*Zo?<->9h(VT)(R5jy9{_M6fqr$%MBd{af7EY^TwwNTs7L zkov|BA_P_-{DA`}#!_@SU*N#zcztTAMnBC(aE?peSImcQuB^Ww@4J7E3m>@arI#_J zib<;MY_e7KxOsxolErm85_`nvO_UCU@Z9Bp|%NY#K>m_qhvwB$(>T= zY+qa3|I%oj$>SU)vKRaEJGBH@n__RE`$dNb*TG{Ewe7`R_jI{=kc8w<=iU;go4K06 zun#*?TYdS+U1^Ah4HrFHXS2bxf?6xdRE13!KRG@;;&3a%h-g#7O30hS`nH$v1_CaY zgJ1oUce}8T28@(MYM*);z3T?=nP|hH41XV^+G3QFj37Y8%J!yw09Jl!&bnAX<^Q`9R$?yTg(x>x0}jZ9;Q!>yfuA@6DPgwfQF z&L8khwR0n9ca%>vLmlK|$6E+}d^-Ompdf?$q?V%W1Clpo4yQmFjxeN7_O)Rd>!(1- z$%;V@Gl8Wdg(DDsqN@H*VFslZR6h^hhU9}_Mr`$T)}>Nb^$`8Or{)Q}t$c%xFO>d6 z72u;#AKOuYJv81i_Z{TekQd^WiUwFd00btchP~+I>g6*QJr23BE@y|=MG;i>HIsri! z&hzn`j44fZf*SXNF}kvj8QNx7<2Bx!aoIHf!Q++uEyH!?P30{`wGVs5uD}=@&WBt_VaPq!wbpuD@Bou`s+KIpMsl^n$-q|1j20Jx=QBwU=>kwnT4RRMe7nr)?pD-R+@l-CVW$uh&zT#1#HNwYB>E-YQij$n8An5x+==LBXha0TWWmX!uaWxW2 z`x}@5KSI(5){~MiER18E?M~m3FQwP<4|K3*2A;f(bcf?}k4f9PZrl4=WdGdMNg5dN z!)oKk{;A$%xMw2TOIvPQ5GTJxweoq4tm@mtN|fqY!PPWz*9>J$2H~f)fhRV82k`fKzbr1)Z5DB2K)Z-@cEJz-&_~Z-Yb3^ z*QCqgB|gS5eP!dpq|!5es4pPykl%b^m@p6x8wl(t}u(kBc|6| zOA1BKT51F8rS!%p0QnE0qJs6wt~%fH)WbgAA!aA^Hhzl^kK@ltAC;Frr)sO!w=p=P z12F*yg?0Lg;JweZ>sIfRTVu%Ak4MhaMz+^-F7f6fxXAiJc1spDZLd%HNa;aUuey_W zlgNzEx);wr4@B`@@F5<>27)x51f5#FP4R4mae7mqG!YTxqs7{nd#^g1DNCpVBXa7E zln2MY8-&3#rBfHmO;h82v0QI|P=g#~N1de4_~-_43ZB=>)KUiT)BsWxUhaTsJfW0y z{Xc#S$Gv=!rKOoE#pztScV($$CA&zigR|H8qC7S20>*eDBF&mZ8c}j$l;KCzi^~j3 zl`&y>`|M`tNe_T#TPjHP3!~ood)m{K>ybX8sl_E}3RNtXg@x6MLuC0!Ps3*Fy-a6L zGAf-N1h|wCL*`_m0^wF3Sb~VqU%Y5gZq)eL8(~BGXG))_+#6tdh^_PchFp8a^Lh9P zRF`BLS^Mvd4`rFZ=%;V@$cB`Hl|xSW?7=f7xaH|%fp)TZAGSP?I3<(?qf3R3U?o%> zj>?z%BMXNeiSkNuUs%kuMIE8`N)ztr)#X#Ofi~nggnQhhFAAb&3y*H^ItlgO)#pJk zec7L)cp_&|?i#1aKS|zyW#ng0!N~mdUtpT0$o%$f&ddS#dQjVxX=_aXM|uz4_E?kM zg-5ju%|1aB&IQA~Z?C)BDY(zH*6?&kd2d+5 zayw7Lyz-$t|DI_A9csh{^+tDw2+r&M+O2;nHNC;PvZ>=#B=#j}>?* zOAP0c#~Xn|g2T)J+6UTC;K;-y4$@-1%**0MI3h%cR&ZuuQtTxe6C8T@SZKM7^Y6Wn zB_LD)>>)H-@)@pK_|0lY=PEvn0*LYfrQIUzy=XF#k-8eYl4ovd6Ea3g(SZ2;6&dZH z?`cF6v03*KZolRo)*?gzodM=<3r|2xUOINUB?RgY*o->{+01 zXiHJ0g3%)E>@d6YyKA|=jV&d{Z-XrX@US_Hs-sw0U<-_#;F?ljYOB7A3ui5$)6W~8 zeetQq(7N0eFt%ax5Iv%!1bE%*ht06SeF%qww=Gl>sG?u17FAQHcXJm#Ime%*==UHZ z78DyKdl2E#Y@P-XcD;|A`l+4Ag+F9aeBYQLk_$#@O$im_KXVvqP5h61vkS?5dP40_fM-TR!$Bou7w zBZt!IJF{)_+K`vK*qOz`!NVSD0Iodzw)(!~=?Z|n*drV~pn7#MW&swIuf(W0`w+k< z9M{eVKqo{VM2)H*F&YW#{n%#jwf~BAjVCJoO!W*)}G0{TqFGJWigU7z^gWsB0 zB?G!e?nnTjwQY=+scGyL^#Qnx58DMI>udOG5naLa9`PF?{giuXt_GWe9tX4+;KPLS zE=*CSu$P#yO2Db~98RGX%F)5qGB~&inWs2C@_@Sqf)oFtw$8o%;gtT%gY8}G1m0H^Wi@M&|0-o-SoMF7Pn-a!@ehci_>LPyE;9-TL`3qK40GB zG&@E<7vb;=>{fpK6~7;-hr>^AK(RMzjb|GG0Dw?Ay0M&cr@3OS6}f8(%KN5TOkFGR zA%g2>;g$?wdQDUM_3IDIn+vsK*2m_Clj<@d4RZ=}GI3WwZ6bi(qR~#oh$SDS!a6TX zqtEtgl!DX&cPy_siA+KR-M8s8FDF38z?{|Q6#SXB(5%uTFXqXb~WbF^>Pa4hi0txd+_xI|W8;{K& zJAs^a6UO?(k^Xb>c<0F<7KSDSQPQ_NXV+L_|@$}4I1xRt1Zi54~Mq))#K zabqu^Z+-LXOmLf|j24z$QRkha1@b(<5&@k1YU6jYI5>J6yiIUYH5!L+QsOFII5@I} zO7*wsB01smli)DFxJxby06dDQcw}Axe1`0lIk^4Mqu0UqudYLQ)ac;) z)8J#fXRu+YF?UC4fV=OhgUntnTRk}tsTJ#YwC2OQ%3aB!V4Ip6Gr9B1ht4`5L!UV= zai&#)IJlWdLBI?=a`FpUj%4Y<<6S~qQ&3}F#Ibi;7pD-dNq2TaUKr)r<3kP-_r0Rs z!;lT>-y8q8dr*Iq6{~`e<2bQ60Y0!n(S`!%afM!c=@F(eK1#J}ubA4U>io zYRsYVoX5*hYQ^03Szh1UT-)FW29DVqo(ug+y~i8R7OJud9u5)B%GF@xuz zl@3+qv&k?N(@XE_QR*VNzyN^*A2G(z)nif{h(Vw3lr#j)9pHkX7sQ89qvKJnhvET_ zLPHW}(GbJd^BQ1cO6z4Gc**+EFpYyF6YF!j8C5V=F2+|G8=P*)r}KCUzQK4d1z@t9 zeZ6_-Gi+z~L*9_3x5pAZ4&72IMjnsY&LPd{iILWP@fdhxHu(j@H;@%w=LY;U4+Lr4 z6%5F#3-xSM-#qe0u$6JQl?QpF=cv?06Y&J^-M%)egDW2N^$3m{-P;%5qc%r>y68K2 z)Ik8~pgl5T*D4c65ddKBF{GA$M297EL`#Wox-PN;A`$k0Ty^Dq#7!a>6VgRolw2Q{ zKIo1b7C9C#qK|h&P4s|7E0|@GB$wlVwcgST76MDWU)*ZQ5?&P&%^=M?!1W4_;A! zctD-UEPq`8jL(Z>6iV2KhM4 zPF4|M2;B0!W+0e2?6hx=BqzwTkadrD=~gbkq%Hu`zO>c*+qqCBhBECG{fmAAI2z0X zy%KF-3BFgJ*Fw5~r1u>XkGWw(5zIN45fFON1`%J%Ex@RF#&(EAN1mp9b4_VqXQw)BqNRqyQ2q(3R=Tw6sAkHMSNJm&kT2qjY z%B^$TJ8`a;@6bZ1o?Y6~?ly$%3*uuWfT1!iT^s^xx#?YBup@Lj*&ky_o=l(mQo#re zHn&FSLg2L2=q=v|f5E^ggL5>BJt$^p>0#Jp(&W-%y`lAo1m;hEc`z8k4<=EW1Jf`I zd?rlykYq`h4|li4EK1+xcks3kv)l zxKkVBK#mq>fGJ$>&WLOFp~sohak?%~C>I-4ZXiL4nwYrpIk4pQRE6G#f{jdnFJNe7 z$W@QaG@h|A1qxgZE$kHUJ-3>$xU1(XW#+I)2xEoQFHkgHd`iPtREdRaY)@{C1YEIE z>v-X0?;8gC8I4_%rY%nWzd z!?u+{jL8Xc4Ox&)Tz!UY^E5qCgYcxI94%v^Q;m$)Z(s*O=MM8~238XigVD2K@z^4) zy5e8GE$+1zJfC$I<5_1kPl;+y(N75RUl&mXW z@;rHU7bER=Fl9qWoVTSVGiQnjS}bNo88LS4C(de9<6W=^9^ZcM;C|;u>u*?BePNeQ znn#BqlATnxx#)o?ei))8cS8z23m^+>=|RrwmU)5 zAzg3_QgJ~fOkNFKf*T)XA`KxIA57_L5ft+$H@pf|q-C@>P}&Z_9`3|}VYnHGjActi zYUafSXkr*?iF6!!&VaMM#!N6__zL!jVhB*W7S3LXLXH+)qtv4~as6?-Q?#)D7h~@L zUD>n#eRiCVZQHhO+v%iZ+qP}nwr$(CosN@9-+TY_yYH-b=ABii)~ToVQ?;vhopsJx zh0ix|F!3>j4?~RsNkoZi;}JE{=nxC1kX*V11~hJb#7Ko#75$K6nb)S}4EA!Qkx347}K_Fu- zKfH|FZ&WU}&bpG)VD@&A?_q0GJczGg+Zo&Q&iymgY@ouUtbg5Few>3L3B75>)^3Y8 zzywC>q)?{v+%!j{ro4AFc!uPrUDv-=wCt5-f1$O0@v|DKUU>Tq!j9bs3mau#iV93Z zD6Je0qpv1v(OxUOh4icqR#`WM0Mi?v3>Dct?->{pZX|YFIV9$SvfvRu`PET}QgLug+BeJI^P3 z7v}5C7qs>XvMkec`mnQz>x#mLm?_e^FCz^vme1mw6jh&q7Gsd@!(^15cy*%8{EC7b}Y zx3)jcYt4<`3t3B_!f&dVq-)j0I&nmu2ZS$@3@R@8apDk(M-s6L5eWf=@g9PV#w*9} zXU^drLY_BCsifDztU}x=K~PPrxcD=+M~>iwqg7M>rt5q_X`P5;TRxAuZhL|q z?A%N*oi-8!nCxe*wJlG|+Yp1A1rxBf!*ZQ&5`B&#!HaA#9hPNX*5h~j))x{P$!V-r zX5jAENY|HR3eU?L1;xJjl zyL!ArNx#5n^a+8xus?o7J4tlSr%;iK*U*c9PJwT8?r=)%A|1$m^oldw4zV73r>x#2 z-&940R00$)vr5PZTB=hYw)VwqeQvQ5R7<~8TdmRUjoJs%ATz2B~ z1aBFpl9C3KMJ_i>7}y>qU>|=XsXd))d;h7gsthF=AS(v7Hf_Cw;7$h@%DCJBmqf_ z-MtZHYbpQbSpRA+O*Td9s%+)kMclZG_8zXgbPzjfepb)B{Sus5!D&6$&mguR%cTs<5mM(_9_HMJXVLLNcWOH?Iq=v?=U6@mv=dyLw*TYRGxxCU@Rdvjw15bL9{3WRGS~q zX7gg?9n&JfWBu?->4|wsF02m8qUZ?%#ao-qjR7iU%2w*HF85#mG43m zN_)DcLx1h9$Oc6 zq_xDe?eZ>dtbZ$9haoBq_Kn#0tnAQ}B14PT70iiGvK?{^wyNzDpO?Y)y5&C3o>Qs9 zLA=ZU)eqxgOlNDm?!&EK)xNI@&k@fF&oR#++H#Lx?Y*wOt|8QZawlpK55qx3yCPbq zf$HF(XBRI(+ySur_#5O~@@KO#rmcb7>V_K@%6WK3&0U~S)rPfZi1b6VedyAA^X(RkDO7@1O>R7$VKxrh0zjV^Hu`;CQ8cy~y`wXVj71A9`9i#_~71) z*xJ@I!oXcVynuzIq}@{$V%o#X4X*(a{Rv8@o49e_^8IDnMm3x`=p+w`Wi`J`&kXK- zHGk+b1D~D6NUy3xTP;hWMLRrRxFi5qv<6P5k?qbXrj?->WG*5jm(1?`K4K|vbtM}U z4K@xY4(I7fW2d$^2GDfoc)uJ{kj|rfwMSZfRB-4(Uc28uQQNxj?|0Bb<8CIC%T&`EEoIm_cH{9}JuBRv1k{oId^uVdmPhLfXuvBH zjCk2CMH>g~W>x86L^h0*FHy+=)LehY<%pi%L?7;C!VvF!p4&EuiOd-^eJA6KlGYIV zvim)2p~s_&K{S9>y!PxK86V54<>NpW(DwTu94Ykkx*g<(^G*YJAQ9{?JKK6oYt;12 zfK_iR}* z(LU_b`E&8;e28=V5r_f+=X4^C=nDVUF)!)kjV#KwXlvjzjCBd2e1=fi?o*W937h{r zkFR&m4Jre){b4&5^;`%Nc*v9Y{8Zw%bEiagOGo4-w0Xg$C? z_F#AuXUrDtgS0;B+!0+@HMjhfeGf@e<^|64Mt&&qC>74eo6VK*EA*avn%}FKp-bq~ zJf^GeUD&yW&*Yet5c;SIEL_1Tm6M;d?j&RsZOm|GP9dPJ0KBvRc?Ph1+#gz|xUY;Z zaIL$HCO6%SJ4%!;KJD(w$(WG*twfl^IsOdmysG=vQs{#EU!-Nm45y$x&Oh9joB(^r zxznbxr}aeMr7YhnKB74W7Yn8qf8S`K8x>)M06S)R? z%?cT=a}L@)`!$VIwKB1dUer}D$@V8X<_5C&=xX!D@G!9EiG$o>h!HOaUA0upRemUM zaj`L+A$iHjaGF9}A*Pe9EQf)XlAFGIt&NJCkgy`JPJgu_Wp1_b{=R>FykfUJiMW!6 zTv9y^D;+gEF@>&~h{tu;FKuri?|ZgteQ$0iZ!oawc@Ul5UXrn{-mHEf(w@<-UZOJf zwmjKL)Yv$%FuhJ1k}ys+aUz0}in_dxxKb+tBfY(bs*Pf^fsTG1Nn1Guy)BQxVkssOj}SQ~p$Q;(81oT0#xynG;%2Aa>M3WOpgM(AgFEkrCtHsUIX*?+d4%F{y{1y`!2CS@dKrZjeN zP#E1#FeplEm6iaTHA*bf=pRd>5}#;mbt$bJ zOH)gUN6cpK=4xnSp`|i6bX2pmGSX7=k{B3kXc_2uA3J!c*%)Xwm4}pO4PH8!8XMPQ zVs-a=sGAFDORJb@ofWPZRGg>WC$vjiPckxGL#PNXJbg)Ym89G=D>_W1hSpYU$*FTv z9^FV-3}v@{sZT06q|HcetJ?G*WRh+S_<{(0rZqOY?g#$va!iD=Y*# ztT#Iv9w=HQUQjt!6O`<~Ly)V^&7B1q9Y@vd-^;Ja%~f8lFG5yBG+w{!lT>8rGZVbu zpR1QdJQ_YoN1w5J^~bM9 zcoDKsfx*a#xN>SVt*OO8K8&1_q%#l6HK}?cY+N(RIE|B%m63yKG66Z$Tstc>Nii$I zQX%g z)6>Yo(NyBp!(8VotbkY?dG_8MVm>J-3AtJaqnTpTKw^|4Q_-SKJr-R>Q6+|(y4=Hc zccP*26eN)m6~!odS;M{`Wk|CgqEb@&mflrTLSffTtnQ}ML=4G zr6dY+a&!_xI}4M?TbN&9EABnxByd%Iw05u_qCTu1(a1P3X)6O!H7!FiC8^#_*+|Vp z!>G4!ar_8XvwjY;4~4`qE$>)mKv-5%mKM5qlFIVgB8m$OF<1jJ28=)la$n5#gDqx z!OEzKT8|z>QrP8Wa?rNEEIgl}PjOsocQy5=aQ%Gp7M5aDS&@m?d*1t49Y{Fiy$Th7 zHs41vYCv(a;ql_c1ZA|kd`bxKm~;xJib>s~A@KzBAqq_`iAeH+2Bjq>L%pQxfU(kK zl4RWaFbiB-9S=@GT2;oo*pRS~>vVOWrB`Y}Z2rSnQiGulqZhNd=?%h*+I%7Y#>{=HxcKX3OaXEc%#g#(G zUw6=A`w(&MQ9K#2tx${<2bU$0%UmXrb4_mf)dM$lzIG(-E zuWBFTI(hG0Zg(i#O_%AK8+CN@x?N)qQwx)F^1c?XA4A*1vreVBowlJm>wIm~^43w5 zSpKqK=RRb&uJHP^!(Fs}YDwPd++nBNH-ygJ{a(Fo;Yoj%^~LfzeZ_uk?7`7bmho11 z^>uzVk)L07#pboWp^iW@ZcrB!n3^IkfIt$H@>5bQKxi!QXP`is8Xp0L7|5*9;3M3@ zzz>DoKmxx*BEH2Hdm=ea3lr=F@(__w7B!_az+PrNvX&t9?(XY|67Jy7#eH^5og>EX zr}n4KkIkp8PG_%bi_PFo>hkn9tCBRW%w5{`C6}Vr2bJ|5y+cb`PbROyfvRDtQS0l^ z;ly}}<_Ic|^L1qJos|>qdN+Y&*}6?5?v}leeD})r;zTJ%2HX@3m4B%sru_F zY5%lpF56QeMmyZsj{W*FY3RwQz1n<>!**2MmAB%tR?VnPuNmGZr&rABW$panWMvC& z?oKPw>yC@_^`?&ZgW*!-Nidkol==?mw9ftMa=@s!qy-t%`c2%P-xIs1d~4!idRv;!3Jt>Dfdn7U+3)N*u%c1F{UDiCxw5 zUa5w9d`}s$WS~ueOJ#1r+++yqR9mRc;Q6xoQ|5bg+fRbhTo!QebfGX2YM#3J91%zx zU4yRK46lLNCuIUfB2tCGw}jS=rFsw&m?UGMr2#JNNpxaagl{9&qtzp{Bh%s?eK4QX zadcCVFN$}FcTBEf?IiMw^WQ7FaP$RiRPhrb2?)JHgB0VBJ67+cd^pq>TWL+^IHPPQt z%rpph8~a9rR4Sol=Spt-gxIa>%K*KDIcDipNto+GYb^`j;ad6EYTe`_e=IBBYuaH8 zs!1+y$8;NIn4h$1c!GSv&cNbq;a3w}8)sG(WFsHgaaEZ#aydY_S{5Dg)RE6QrP-8y zQ*Y+)p6UXUXNMV<(oL9_2wBPq$tDXO)XV0F%0dIPB%|lk3fn ztWvymr*}XK&hDL8-QeuQM-J_0KDT9RNo@^jZHK+0CWAV#{I)d^bcq%X6X{PGm9F?m zKea<_!z%ThHIrgFl4012v2}>-Y8oKEn&bvp(0w?Lcw#q1szud+W}|ql-LCpa zOQVZO&sRr)UPs>*dnKrSmdCdAm2(;z3O;lKm4lCS2ylAhGBtB^P*vTS)po)rSQ=TkY18O5~Mj?QD(=8!p6>a z2tvFO0ch6Lcp(|0naKEb$bnQ0KX9;VL3c1_;k^_SKgI9E6M zQ|`GP$yeIi`*_rvWNG5Vve=D~<>>I_@C1zTy)i=+nA_M5XcJ&q`~n%Xu*f2snSJz>61`|s#4c{^Pf2d!n5uq| zQ48(V$RDT$%=dIvtBrcw&9%=*RxsFX4h)ZZviG`ykm}4kMs77-FUL8P{8Mhi+g0pf z|KjHKqsaI1xT_s>!lOcGC}Sm&AsLVc&>JPFPU8PqA<*Aqi2Xj3gFO`aZ zt6tcA+(u5Vz~}>GOB*Jn){RiX3zvF9DIG5*ehGcwR=Qd318|2YkPO4A&*OXelb>vV zGNs56K|XgCEQnSsXb8yzOJ#=;sHb}Z=JfixU4dd{HUE(Hs}fixqw&~|_nYK9&V=0V zQ=x9Jt}t!qO@5SVtG+V~nVYX_-f6sCsDnJ3YvoIOMokbp{$4ZQsv|NxAA%Oq;@`oE zcN97udsRywSK=L~a?D%VDwzEEvUJ`j$$j#+isuOJn~1~*oMLgclu=_5jEWpl5j(X} zJ~AYuW)aN7jjfDHjx100SRKH)Uf@KTQg7JlR5AR(Za_xFv0NGBLJgsNxn^=gK+##W*lX&@2 zBD+h1DS5d2m~A*2Rn2Bj6rd{G(Dkj!8^xw{%!}&rzR@r5UXfn=cIndf3cC78GW3_T z`oHRf{ENW(mp{rt&q&AmKOENoM%w;wF|0~-#Aezz5f{Wf8nD40*(HQ zAEHM*YVwUS z{g?I4ZDswg@vr?|hVI`!e{27@&%bTD@0$K^@Bftir;Y!l{$1{$*8Mw0_svZGTl>G> zA=tkA@c(T6-+ukQ_usz#>)Lnv{}}$4C-t|~f3uhWH6;Ik@w5M%0sa?(_U}mj1;73W zLCelek4MeK_6@sbVq*R#-ZFe^!u-E6Xj#8$um3P;8NaQ67__Y4G~oX*XxZ8RfzUF4 ze`NoaEr!R&{9ia)CZ=zm?LRo$zt8EvakT%|UHLB@?f)p_{8gR#9~|x9;Z*n^^Sc8q z3~b+b{y*VpJ2{;_l!ccV?a$9Uj}|*R;7>dH{cV#j-&%F~_sRzMLrO$Pc#SFBfHB6_nc)xBC z(eOmXtZ{ly#a+Ewss!{U8!<_zrCEq(+E8TykjAlHfebgG+oNu#4ou$gJj`XdDz>dx zf&pZ+IL~EnUW?)a;IvrIZ4@0m8p8I_TYh$|qdM*rU@cGSt}J+RSAo6ih@wrQAaVd}-*FvD5#FnrDjw(|rp-g8p9I8U6A#&bj%;)#Gb0|LM@Or~burjrAp> zi)GDu;XQ&mY%}dY+OJQ$@mk?+^=kCB;8Ex~a>T}Nv!V-e`I{)RyM^e4_D<*KSY)37 zlxv-HAUpQU-5X;AJQ-vsS8w#-$%XaxjW2#$6Z;a#2H|>mT^@AHi;Zi<8?bCgQXg>J4|CD)_Y+<;Ar~<(X{uL5Lpa>3;KtN6mz9LVZ zDa=itvP@VWY43Sw7lPLt0hbTCCkaSYNatYh*_3TGYe1HqG@FB@jsQN^B+}Uvv@blC zISLkwc@9G<>o5@mcUTr%Jj+euuD)T20$N1iT#hdk9OWlQz}l^+Ely<%7eBEcUXyKf-vKzGtcaK$o@hmq4Ns<<_uLW+h?! zn>KZ3^m{Udgw7CyEhq;@_OZCRRj@y%=JUDQ&MB|37{=_|KZg=}b8w3J4#MmlFgAmm z@>vG*JLRHtf0|Ibp-=m@a^qkNU+d$J0c?)vv0?b>3~Fmz=b4@?+k6l_0ImhV;8Slf zqORsR0>L;_gJ}7^8Z?xh|4ayynBhJ_q6jRu;=|T{Ym4GL7h}S>6b0M)RJ94g(x=vz zb=Kx1zyO%m0-?5cf<849G)f4hn6+VRhv1IxpLnT49|;}vX~Q-lT?_Q`?;3R8&DUmZ zOKaacdBqZ14COLG@<`s#f3`1*>?}4HU1rs0uptOy*r`OE6?vd^@xt_w^*5^=s=p=Z zfVU<-zyr0q7>9KVH{lNY}^cKyCh*clRxTH9HwJzZI&rNP1 zl`cW=GT&(jcy&OyXM=_9>A$smr`rnHCO|h}DkXJ};T%<+pflpC4{#0d%;cV^JZ`$f zczLUe*FJ9B;)gj9Zq5lb0eQFrc>rw-p!p4&b=a$?6-0Rp{M@v2dBC<67#+X+%;e>N zF`T_ed*l2Ju^W=KB1WPv#1aQ|0CI=H7{5Be)#owhG5u#BygB?W4i*x3EdJ2(&RpA2 zJKOmKoI*v2A1zga32HNpgx~r&U*{xwCcJoO9W>twG*g(Ca+|gW%rOVo7ZNK%;-VEY(Z!wZiNPDog4fS=0%DOKty4&@HUR8JuV>RV1I%GCc_a-w|# z`3PdX7G-H@sSaq?&55QRx~qM)^Fr^BV^zZWF!cVA4fO_x6*ps`d%SzHZm;zY?EUtw zH%KF!Pzq^9@T@Dk!5>zIcDT)5U)wm+A0wv z5Jky5K8!5U?jNR`K}q?J6D|$q=blEqZm>j#FkE#YmwJ@3$?Jgm_NZe(sdC4N?AEbU8>yB0cJN?1T8*;YAHc zmIS|gD(43Axd$uYmM!4QopF?a`P&HQtg+`)%tVobmaUto88@iNR*X&c4HN$g=HLvc zfca^9;=exYBR#O#t3R_Ty-v-#rsoTn~;esjiav35vOcm4TrSdp$Ch zwhH5r=iaC&sCXSIX>uo|kww32MwiK*kWM$(R4%xTH?IIIru;nT(G>*Di44aK2K45zz`)AbX!_;j{) zZ^GCHi|Y;pi0+Wj1aD>)Cnc|g2zVfACa)B@QHC6Vr?(hDkkuHF8))t42o$2#aUT$A zV{=5C#85;Tku9RJGPX+VMi_jVh0i%@6UJMQSnuPIT+X9=%@U#@_V$*Gk-`%?kHtIA ztO&=5t-yT&8BtULV+M*d{QH9blJu zb^m=a=8jLeAxwDEi&c;t#TG-rU&2SgSq1#Y8zK`ATB+X zC&ZnSj4|mRVORBEQmG?1ukeqT)XLQ}^%c zum$*$kD&nz^5d2J-Zh|xJSc|(W`Atkw>)EP+8A5sG^y>{jCzOk7xD)8dwQV+k5|dN z0R@ly9x;sVc71tcT{!~7n(Z&#eVo|i0|4Qe!ByC!339oyO&r0bvO4pG8@}n z`{IRJ-t5`+{mSb1ubPDxf&n!HBgewI!`-`?$?o6P;|=d;)y{tag@FZ2v(Cf9x&0d6 zjb*iQS?E5#nOr^rB@hK_WTnKyx&JP(@?GFHdvG_%JYlP6*Ot#7=&kMuO$J^K9GC6{hv4l=TK)%kQH1hAyzaEzq^rd>zw2s=N6ldVKnmu#hhNww>xuQvKO=Miyb>^xI{N8?05;t5E}%Gr1X5zaI>7lg zlG(ZWJXd zQ(?rq6(1a@kX`|CKPIx60t9W9bzVQ@ZXY6q!h_4G=<57_{VQz?1`$H3Tv$$z6(b~< zA}3=R=t6zXFEO3hfI7rGV6Bc_ZmfacZk~us-i@t>_c_3qkMQ&ZStJaRec6#;bs*2U zF$-kLy;d--Y9oEhI6t#W@~u06y+a(rT#iiF16%gaK7*-CH_dcF20bI~qB!7OMT((h z^p>#a;K~+0$wJGRO2lQH7-4z}TnlKHTu!o13o-;pbuK&tobNUf08PY##Qla2HW$*2 z^}R>>$zlJKaauj^cF`?z(m2D~nTSJ9SQLcocMn1-s>H0Y%?h@BU~7o>bwqDS+HW@D zfV9})G(q!lJxJfa!aoBsp@Du!*>uzi(-LB`oEIede15(r0}JKN>?SlUj|90&`gI%^ zfe{TBdn?FyxQ4ES6JbVL3vF*x#ZFcemF{WluZQ?A$}jm}abI_<;#y9n(92q%ccNT( z2sH8AvAmx)kCYA8Xmv0l9sS(EamXA*du%ib4OEmS>Uxa93ylHe~;Z3RSqqMK&(E)I80|;z7bGDtKvub{D zbU18IctKxeM<4ZZGZ>d*Hc{*I{`q|MdoNq+C-Qsm~7C&h{!ux)F>H=4mrVC~1FMo@5P#oVF8N@B@bjTZfuTWM(_>Fn!egsq!*Iak4vu)ay{upfz|zLvgAng+ThIn6QDH!lx4y!1Lg`|F87QLsgPHynPJZaY z46h0T_#v<&j3h_E46vhsv7aD+>gflH`S9D~?ETAdezRj+aV$mta;?HVCR?n4l8WmC zTrwi=U1%`r>(FX@xwRbDz)(HDN|B@?ar#3&g2Qu9#iAR_xpwfyve&vk=21La@tU8iBLOg*6lk0A(uvJD5aq~VGNKFVm zL1|<+g!ESpVOBUWR2N#*%AEelZ(oc|#1zB#p;NZFYN43? zr0bUWHN`oB-uj|s$f*%wUMdeit?T{Vs<<6j(9XKe#`PS#fBrVY9@Kc5rX9z9)Qt+R z=&&BV61L>L-p6@6E}M1TKj0nBY&IC~YP-pMN0|y{sy+hFa(mhTYCCVTUvH|GUaRd5 z>uC1D#vn$v$3P{YeV9!;13eXqr@t_;laiyI$6m}_q!$WweB~MGDQge{lT5jP&<{P! z*-|oBS^+kDkfhkbyTiN1V?jeQCTzOhp^;-YX+nB}L8)zB)Ln|6{Bx91-qvCzc`RIY zI16w$J5Smy{Q_>?pZ;~Xz~}%2bK#cF>}!?3@60!5Yn!Syp)SU4U}SUU0&>3SU7(_;m9S%V@HS5|FRo`xlukzf&y(~pPp z$bbq;<#Z#-S3)RUqFFl&KOkc3bbXdMEiwix?fzly-5Mf!UD9!C^|FCG74Ij=>0N8~ zwkGYeQKYc#?y^%UNbh$A=F14V7Iv@E(HlzCSV{vTnh~vmm>pA;M2NZk8F&9~T{z*cFEoV2T~i)m&#i z0BTd9*4Vb5y`;op$KE;^I>G0+P!kn~O*NW}Zwt1{T9d;IXg|54LrWC+b437ymwyLA zt1X_@piil@(?DS$nloYLE7WrZGXpb*JOk55VGY(sLVD-ITlQU1A_^AFhk zylH->u9A_X;t8gM;0<&NO*SLvLgRtkN>RVb`8a>T4|Jnw9DE2cox% z!$F7Jyaufu&%$=s0JdUqB!@txWV*OFo*o*ZZxyxjb(JSTWd=`=6PDJ<#Yz9qNl;CJjo^xJz*=Y4L;;~!Qv zuA9oVDNgXpL==2~dYpu6Hj$cyU3?MMeBncSZq4%5d}^^F64e!bKqxCd$>J%2+}6>8 zs^+X?WBIHTY0@eHeXBZW7rbY47@BweyGJ>73G!{OvZNo^58V+g-z;Zcp`W7421zpP z4JnOXuR&fWtz|}ok>7rFajpY+=EPpokxSpyRs`MlDzr*GlrrZfnKT05GK!~;RT>Y_ z*_}SvRhXo;M>+!!%%>guOzzXQCrFOC{Z zd^7aK?7-lWfa<*h6AF|dCM^_Llm_9&Y-b)zUrb}efwcZCNlzS0FV(&6)gLkDVl(q)Pmm#gkF~Yc@0MeKTV~| zlS@tN-2mGK!lFhGiklBzexBAYXb1%Kvgrm8(zRQvL)W{VpJys(;)<|UCznqHu?X2U zq@!ogMBtOU9I;D&M|gIX`j|ETMkbX?sT$)f_duDH-a%7oKVZPPE!Uoy%?GqU|8G$= zfI%#OfgisYP*D{ag^)u^V^Y`M)82@d#60M)!#2dPp7e8?2aZllP9ok{9MDw z$bk=P;v|p9f0~j{2ey`|kuE?w+nA?TN?|4Wb)zt~r*2a1wxpy~t(Cu$?*6h1&j@o( z{}r{b*Bu@fgVrA~iFd%o3}X}aTQ4-Rss^G%;sCtd2z^XkCu8!ThoJ|WCJ=*Ylsr%2&(8lyCm*BohFc;=7EuAfLp4*W`_Kg9?L zc+pH0>PY!YoJ#^#9OBRK-^(A%?y;(fmzkKO$Jz6Ie5Z_@Xs;8w9;1HXf*w?)3|0W~ zbVNU0R=OD>7M^8=0Hpcgq38?5PDa-JIHzL6GYRn^@1Iywf)j$#Z@ALr&66rRZGXCm ztoY`)pezHm;|+!EU&aZBGMdEj{}PNzlP{;I?OV^iM2~VbFa6k{DODaRoOP01fd&+@ z)K(x@P7q84Id3s~QU3)fg+k}7v_<#s^q%VBcs3uf>pB1c@6{&x4{&nRW{4^Jgy zxsPYUg~b@n6e8rwg()W5SsLbg$0fIOsB;BM$`GFT*^(hQpv5$^*c+qo4b~d>>dl)u zfPtp8^{~{PPUvob2+^<&H*Bc8ws(M6 zcN@bxpY12ZI1#hd4Zl4b8tnolEQM-c*YNsyjR!V*s;9+Rg#;1A>U+x9urRRKDS3;g znKhj(aP}4O^9pwJCd!|`6%-Ygp)c)s45y{1pPv3UT;WMAfP^E-(16uaBQ9ol1agD%Fi+3C_5=hvQIc7g1|&2qp&ie8a@yu z2#pbQN(t_Ojt6m_yudo_G4zps(s)lL8$6mApdp#|AM%c{#p=F zPZ;^x^#nq%56eB!Idowb)2M?fVQ3_|$_VWgOF>Ji3_W}$*>L{a0MWVZ@@|`*8=M6D z{^Qqt2~3gtu^surPM%h1tUO`gBYoLL#HN*UV51c&jHWis@qVu~Yl$Elp<&G!KfXTk zcH)Bns0SLNt#6o`($na zFL2Bhg%ipHs22U4V9_T@W!Rlz`q-Pvlok4}_&137(+emo>hTtRA`2rl6#3~Cp!A`e z9eDc+GC)?^dSrt}uFdU&gW zKc_3h{O zMo%5^ZI8}I_{tEC5Hdv~bEfP#>^MrMf7uc3U#i(!Yf|)8(b2E~$IgS%1aSWfM6#wh zllB|AbOgq4^37Y<&6zLY98D-%>F836PE^Xc4C2z}9bxU=pp)+hug;;zDri0hIFh%u zhFqe>ax(8f+KKRMjlUP&&Hu1iYfs)%MNzsw{Jbq!oD9d-tDH`VMK+zNDR=8`vY0PL z)YQ<$O=h-v@@IjqUUs!B-e=cOVsw8m!AH;cYVWMFGS?3$P1I8{e;JEWVm(i7O!u@ji;|Kk5L`A$%5~oPw8KT0+!3pRYg|k%=L;?V7_!gTQ}=L=V^t@{VMc zN{-nU53^&)UUEp5x539$^Rb(&J??y|)8>S0g`K$kR7y$#GsQ`u`+0@vaX$E@<8?U5 z>Lu#-bO%kcHU7aOT{^s)+}-<|f9b4ks@^Jw8MfjvpjJhrPS|6hb9mauO@F6?rE~RH zy@bXnMN#|hugUre_IJ%At+BT~urlY5>tGrVnjofQspAQQjuDV~sP&7j1_d3s3;t?R zIrq!7nwr7-Vf%^utYGMMXg%0t1#=L@1NTn(DQxL+_&gd_qE{yy=ihPsp^#xX-kiBY zaT0u~>n_rcH%S+#_QgyP1Be1oS4}3du~Sm zoX<9=Ovgg5a`8%X^?Va`Gt-qzm@qVgn_1giBojh0<8Z!{rg62LKKUuU!Ax3j4N>Z|;;WSUv<(vS_oDRXx(P%4M!Q;Srzr^`g-{PK z|7e!HVf1L-&p_e!@#Aq?-p9(%6q>cCtK~v)#SX`p`8#B)j2`9g&%=A>-Nux@>SbSA3=QW8GHocOEP#hwy(SbD zbyZ12Ke7{7e?f;6?4S~~z*2={jQrH9*`PkNX4V4*#3gtbH*6hjT0WU&L?fy*G>3r% z7*iIHl}wqZZOI%-yFR-AtFZHqr}F*(ct(`UAu_{}tgLgK;T%G;lN~ZMkL?&oX2_PE z>{&ul_AEQ2%&a6Ckz^m665snYK7Gpf_x)WD|6K3;TJLL|$NTblzU~`UXvH7pD(^F| zH|4*o(VkNfZXDAU-mWI8%4224egB;sLyhb-hGHM=8;|16?^bAqC$>?yqGcZLiT<3cnSJwwgGhgF z!F$%U>8oz+IuuDF`@tE!`5e|ISvOeVt(l8dn`QRHu0dNzK9#ac`{MISq_=vjAr}{t zM6f~kBp#g?o8cKJ*-&Muaap7ZqyDH9*O@oJ7%zJQ!(~KnYVxqtIGy_?Wx&;=hWfsj zF1)|sfRr%xy*tLYj9e~jZ%u63ek-);TWa$)w04-+styyWY0Z`>B893b;D;}CK<0c}63OS-ei&^UJu^_8ij-)>6`=23t=Kj6O znA~wL7LMXnjDogwDb1Ot2%49c1?$0S?#}COT@$j71XUnSFIvcz% zvxHMJXdAT2eRo1*Xg_DZ0Ucd~82fvtIGmWUpPCcBDr}HNq5#OnU&knxtQk*H_(o{6 z`4l2k(2#m}Q2jxIe;P@z`AY4y-`;jhr+aIl_)=Wu`_bz4_$tK)B5Opdpmd<72$QXe z8@er^aGr0CYGWYK;qEzgt_KU9cPd43QEn_~eUHOj=yxGao6^?;2_5HV++FStq+<;Bo7^?o~tJ zd$sNH5UF$Od+7{?@5EefCq6H27cDe=elhKvDekv8d+r-+GO|n*xfn%%!O{o+%59d^ z`y_}hQRL>Lz>xLis~pTpgPP5nQ`49Yfk!M{L*~`|)TqO8jlWm_8LFBXQlM3OkKCo9V%>$)3v7@KkL*iVcxrq$Puj@t5z zXFp_*tAr*pWy^SkK%Jx%-@cZ;{%rR{{t6o}v2T^*N*Ot&jNPti=8z=#nd$ogkn{9M zHzZfS5!+@fI~wE z3aE=TU9z&%{RbYGNUQc&FjX<URm>XSbuCC*D}jCPu~rX^^$r<5lLZZ77w;cE0a(m zs`XQ;;f+GE&KFj7ufE2?1G48;pEX>?OgEt?EG&Av@UIT0IPPXMrY7|U)&dJu>i+GWWV%6{(qZZoByR6J%lpC4W zIH<4ZN?NsA_|dc1GSjtaXODLIa#eQ@aZ7ER34JidE9p;@)JhK_iaO168w<^I1t4zz z0kRJp6|?&Vmr`gVlJNo884d7lN9oSwmaNIY4T1G`xTti7vwJnfCp*n3BdZGd7@s?4 z##}2_8Wfz(KG4P)@Oe=Pf6Z)UBpGWudQkE}ztYjcsGcH(zeUJ*!ZYHl%sy?v#FfpM zwK*IAgR|cXREg3^5hQOimJ6RhD-*0K>N(}4=_jW$ycDgp9MwrqUd6B}$BDm@bz#O= zHQ+TBE^e*2AQq3!PyHaNV)pv_wP>bEw#(bRLT$w^AU*`^c#y;VjT<6cxn0k4(cQ}7 z7?osFfmhm|ub7X(4R+|VXqd{6u=?@)Is366nI`&lgrDR(sF-9D+~{(oh}fGHFK~$) zB6VVt=p``^IRi0-)tItT*l+WQ*bz$Ni{$tVjq*n(h;hUL|ErO~p>MY(vTR*Xo~@&f z-faAEP$goZTDP~b(mQvX&kI!KRbQHo7fp-8Z*J3XHL@q-q`lNZwbkU~&&espw6WC< zSWvAmsJ4{cXo#d}`S$QeqpjDZtGMI*af68)Z?TRf5)a8Go{&q_l1t>1`?!F-aUk!j zptLJnn;Tb`Zu70LJzGr~&%T8Ld8>fD9YA}PtUI-=JA14<{;WIAtUF8Mcv*3Lt2q7> z>rSTUq&)AwT0^0 zYJ8d=_NG|7A58AQp>P6b4KTOYuv!k*W>|9zurLAK1}y(V!2#m;9~2y5p#MdJBOrhB z%>O3We^I^YU+vl9ES!OM?M!eMG8W(a0(jt`JiI%RVN8?53ow<;igzn(oHXecBfHk) zbGxsR`Ej7e;>sACOSazl3Hs2uE8>f{lRY5(l5Q*MZpU}x{pX-fpKCb{ny-+VG`{k9 zQ*NBD`1P?3=1uJC$?eg*j>~%tm#&aCHo!{HznjEkUih^?xD_kw?BoC9+k2gy8)kb= zjJJrJ?h%KZ)h|o8tBP~r?_`Lk-b$?0%-ug-C2;PeT(T8w{MF)W8T**>%os)Xd$k6% z(%1uCF-U}0sr@~E4jDe1{W;ol?^Uf=Ph@J8$D{@HC{WQwTCG%_0j@qo4sgfQ|7D2@ z)AF7C7l!@f{)GvPad?4$FV~OdQ!%jz)>`$ib^XqQ!+(_ciGo7`h+aS#jRq685f~*b z@_&=y5P;tPO@aee{zZZ#e<9!6!0?2wD_B@tTHz?*K;uGEH!Z)*0>B6n;eX@b5Q1QU z0Hp))wuLYlAj=7R>No!V-SErPpBn`R{a)xN4GsmvP)LG1*8h9k)Fpc1t__`OYj9b4 zujmI+JmS&%GJ^fwd1@;DwYyo0Oo74pm>!-Wyuz^r1@J{B-X{1Nf1Y~@8YvoC33~JW z)Vy*w?7D;gM+5H+Nfh7HlhMEO^kPa*%!b%RSBGA4!hx#?_qN;i{+7q0S5M7$2ESf) zH7$$UDS8r&R@bAzs75j)&mO%}9)|VNXp%H)i+Gm{rat{lUy@*058W=%;tZmw7T30z z6m47Ub3g5Jmq>uelA%$F74WQB;`D5H=9y^njO>-7q!RvdNtFSR1Ty;p+^Bx!OZ*9? zX(t-Yrc(TR0bT3V3mOkY7qj=`MAAb|+B;euQWVay6z9ET+{2(>1H{{L4QuZGEalhWUJnUX}6d zQxudbl(}V0dLwVtP8&6I@tY5Pn;H@|<@jVqv23eJywj$9ML2h2@D>Hvc$RU)90eP( z?y1~c5Z{^i%O2VK={D2%j~1?m32OJ>G-swxusWmPvM_~M)m)`1(cLR@*Qz~dL?;x+ z7Jfi2dHO)Wi1vWfi0a^#zS}Bjgl&qXD>wu+qdVH_F|raq+tLue66Qf9r!=scM^bJWc5YRdkrVQ(%P;-&fbwQ1|P5 zkGvyK%V+dp{964{ zT-HE1F-6N@kJv5FYZdjr@2P>!XbqRRQJ%&v#hI-~A@uRKv_i%5Aa!e@Ne}+}mWaf1 zK+=wFk~8qE%*!<6UmD9_hpp(pwtXb#*#gpR2)Vn(?LNPWX&Q zLYPu3=d*>@G++IOJ3^`6l{e0;UmLg}NSCEi)^I8IO1<;qqJB50y~Fw{!*UjeL(tl# z>`r)5zDf;Bp8t$x*g&iGlupazDGv9f8V`4wj0!^;^N?1daLtyGmRD2fy9Z@PTBqDg z6!z|-RL=6zRqn?p`=~F`E4&(j?fWf$ZS6BHT*lm6{Mr&bb~Ei+tl@5(e?CI_c>`w$Hmd-X)u2&kyumV)78v zsSS_W0JA&$wa|6@kHu2qbh&w3(ItC_d%Tn@O=s~UB1?9 z(15S$=i05Sj_TZ!R-06AElBG#eB{_GHgJ0FwH;md*_A1NoenBXt~X}6Wpw0@9gDD) zr0p)5SyIYm+fUWJ8;eC9NT9XG=QL%z&lc|a{(HwP-BdIUNjiTb3YevS9$Re-V^z(U*lFanA;ec9x+w#kH z5(cDlDy2(&Keie}whKzSzwg(O_O0jRu{VWQhMTAfjrZ8CnImVMniEV}=-V&xe>z{= zd0Pp~*unCS5oN^g(5Z~~k{E`*q|B8`?}CrY$-cHIN2Fwoyw=zjHPXD zo!%yXl6^4#R9yrHo$u^IebsF$Lywq+zi1+hi^-(NA{)*}Pd$WqO=iZA82T7dimZ&7 zF;5CnHdu9O#*z)_jr!GY=qxT8Bim$a-UQI3;D`|J8 zgv>^LV^EE%XokL24nL=%V>y~e+jC5|U}3(0-kr^2q!ruR?Sj+3T4j+>2HqdfvE|Dc)AB*(0h^6xqw2uYwX^ps z?6%@Pdhtgy{2XeQyz!|ry{q>RN(S1=&doeE!?G~HMkDT}FkU$ozw7w4L;3m5LJOD6 zS-aCg`}M#{ROQat!ml5VUZuIi5qGDIOQ0wT?aR7Pj)TFY4~J&o1Cj5c85D~66`KJn zyC1O`560F)(9s;j`_B`C?vYTO$KJ$DRTHdj;p}3KbpV1cK`2}h0XE>d>}qXi4u+!S zpfF(rUa-2Wi8Ias4xVIhM=Jk zVPQB50o8**xPialC4b!=cz&CH#g+PC!(XE&1Y5rXuxr*hI}3v1^Lya0=8QFWH3LF* zAk_bEkao5(!C`^?PXX!oJm8@W5XggJKa_n!%2;zkp5j+t$-)D8k)OE>81_@uCncqJ zRrI&@$GzisMCk5pfdRCVFhE-RPXZ$m2%tR-_=gRFgh7EZ5)#7Qdp08{^W9|#ys_-}uKas+|xAO0d> zD1tKiPa6_~I@B)`3OQ6435c{0)fGN8_Xyy^bZE>-VUfdq2&4bCzBp$S;IiaQK~ThM zT6+RV3lP6*V6iwr2>at8Dmq}WV8X%G01GL~fc3!_O&~D96_hF56ah8En44LciPA0Z(+qP|UV%rl=j6L(d-#&Z)IA@);?$xNex~sZ> zblqL6FERyDaXKb?78tVOwvWNWn;ZYb?03*QO$O?v+7r-E6YG>|Z0bu(pQUWlD zTiUpoI{mF}3|&k`O^xkMOac7-FwQPcriQjK9>CW*o3S<%j=49NRFm#UBdk>`6_r4m z{$f+CU_(d)4chfdypIZ>OG5qt*XPW0MSHCJR2_V_W!el} z^75BXTplFc{JC?NOHR6lvE2Ond8txGs$)+TmOnG?(i98jWz)(mW9^lX9dfaUUbk>( z9+oU4;^bXCa@A9MP?_!)F!A_!)KY2~C|4Lumenn$r4T{*# z@yr<-{+&C=1WLE-(#yD)-u9LwC*Rg#|C@D2ezmo2shMdDfc!r1;?+reXX(l;FTa^= zUDixXlg&-& zaD8uJy_fCDbOVDtWp~k|b!v$XS|x^_!VEo++dk}^nWZYd)Fv@kNCT%;HK|8*_*Sm**h9@#-?R$bs?W#uYNtH`I z01XzEOVe?VK_YgPLd|l}O)tAv_Pz-9$oqAsZc(UDf|yIrjuOx;JLV^d|KV01g86H> z;1?LmH;Gl@a6(lCU<`73ct0ak5S+J`JaQv6(;~{(S5Ov@blBYr1pT%>6Dl^0a<-J5 zwY#AQu_8jG5?X!u;>D3|A@mvB>VWZ==vBbc7UVC{!)3%u=psYZid$YQVmDxZZ&BHN z^d~Ejp1b`z=PKyr!JJG%D&A^xoPwEJ@=;Pk6;z9mo`0fR zaw8Wd=fASEof>i(?{NqjHbw2*@J!CFD(J^i^5Z&N5Z|G!q;KzWOW_5&2hX*2I zr4-ZzvY`k`IuH8meD15u9Ml5)6jY&{DR>EEZsR~qoAvIgKL&-pyz52R@B@N(hh`+%lY*|_m3MIG@ju$ z=tPc4d#RV<;Fs3wJLdr5;ODGeVZeod*BapIYLHOXo!Z@!sH$r;V1K}U z5f7yFD?lxi*9PR8oN}v}Jb>lKZ&8;+Rs0N~>S~9G26{R>*dS^Ji%X|y6c+BCFN)8M zARr>;Zw0k z>ZW(KVZ!|j_-s-14f<(NQ92>^Wz{TARKonsHQbqiL4#7&ARYYIJ6w~XgR$VB?>>XV z(r_A7Rbqq_j-^I}-?UQMStv=oA6Fk#;hImPG&^988ux?{%@biY!5EizLXT(cSG^5ACPj-t` zU>XN&w_&(x5yr|O#_qr;3NDxi;>z&#@zKT*b~YQdOfJI|WW75kHp1UL=ioA)gI7jg zkn{LT_5OA?W4K4_Cd;@pKRgWV_2?zf$*Yk9A1oQd4WP@}M-VD6$VBcUVHb}OjF5KD z6US(wilqnF=rNJSppBd1e_hedhxAi-qBuJMc9rxy=f1Z?yga5pxO zhmm^-x2Nt6xPTqlIh~4WqZE}*;kSbrF7H7f-N5%PAIFY9i7P7^yzL|h*W(xgN7-#+ zZ!!ni(oR&#^mAw@CbnrL=C=;n{JJ$^Z?xaG0ka>IUB`{MOsf%<`GKXYMr*?5Z@nJ; zhM@!MU^__gq$aetg3=&qNIKR>;K%pjTNuso_JLB43N-5y{JD1Np@me!>+8q*li=pj zVO)Jj&i5JIRO*Ll)ekNP?3k)ScrOXJC5t=0?h1xHsyxPNZNwr{&vBRqk=|#5VffXl zNa}E==)`nE-Y*9{KGA_^<0p^!#vJJaElMUz*wY;sQ0gyl-Y26nh3D4W1ZlPB4wg(|SOJ9c&3VV^E`B?5jNC z;8x8zb=ew3a9(M}US>nLfkpcsqPppdaNlq5iiEI3d8fG6Y;;Br{n^f!{e;?(dJ6b2 z4`+fpQB3WlX7|8eCLvB>|73r)X4}7IK)LzZ7tTCDQR@Hv zmK#$uQ84^D@Gze?vlTofs5~@OyH~7vf)%H#a34pZ@+eesG0{wgxRK$ATRTH!L5t0N z=;G`U!Fl-NT>IR%Jhn#96L+23F_t#Mfs)loTXQy4RdEd3xqO(LfYa42k#WodwA@gW z#rS}I=8?ToKRDWaMn%eGrrZSh37=6S%j^|*MLL2qfxQUismlQY{cJPDMgv!)Wh=%a z8Ca>R&~9maJkfRsxKRM8QDf@N31oFd?iV#N`-h0?6>(a%w|P!zGTTnIgn)Wh=3~d#QVfcnY6zs zLJE0N%5ZgAtc=PlcS9@ow@N^uHTpNJKXi~R(9*uF6qCIYzHu&j&W#FWC#i!o9f0P| zbs0GRtMLNMq(*M1miuk*w<=`h0ehN`!Q;XEKRaHi?#vJ$lXTy;4?RI7sZ;x($$ zxIQT6R?ihp1%2~Yby-May3)i*ie06d>*((##7e;sn~!%-i58jYytlM~|Qj$vbkP)3+10<%LpBNmZFj zquhlVb=9$gcfI(pr`&WSs!(A_XL#=~ydT*~Xm9U09&E!Zo$Bb@>YcAG=F=b8XCsl^W zlP0KnavX_%b`jT98k6z3i*&Hcnp&XU(@C4=x6?TxJHohFc-8- z=q#T|8Swxsts)u=@Fp|qz^b9qAh1?nhEYaDf4ok=X*0T+91XQ%J*85hX0T9eLgTBQ zL`$399-Y`w_SR4%Zvk5H*Z~K+(xO%bOsWg;%K>#=pu*7M9%3AW{CEqRGpMAddAdc3 zy8R;HT~|0p(C+JO)C298^w1`5ph=bfV=~a|Y}-G84>nEbB&lZv8B+L$?1D_)5Q9M| zn*wnw9S2>ktwaMj<`W}_XPrtpu@w?DCWfj)PZKm0fylyrrHK>rL@?xG{6y(va<%DW z=m^#toxG&~q!X6GWkb!%<-5E;;-pYcC&^8@h+HQn>t#xi(RGFHPYA4;ugc{2Re_uH zHTiWSTNsMhnq%d_JOLvc=3v;$@v&@c(4nw1M)fo+5<%FT-kIhc-=KaC!w zWM+(m)P;wu1_YuT7)bCndOd-Jhy2Tn6UQ}i*l1?vrljUR44LCSjEsi4gyNraA zUFup8VD;7(YNierTKqde( zDsm;SlBX!mNlSf?A48PWUl1$pD=5_$lIfjxE9(3oFDoqUDW%uwt^JdV` zJ!i03nI>3_McVi~5OIFy@P^%93Z_Vg4@*eH&_pI0-jamRh!oGJfxkh6RO@7#gXCmn zzCd7KfcPY&+tLFqJl91$TuP%-$jG89_C%@nkyq z6OB>PL0dJlX?^ub(<;eEkHuM5fJK>7?6j0TALIasdbAA?b+ToXPs_U8h;rSVQA{Im z!+Z-e=VDP=ir?!@MJMO)jC)=WdXFEIcP)h2NT+R23LCQiW@F@+vJ$o-hyKV;ov^CN z6U`>Ix1YSn4o}J@T1Pr1R|+stD_HE)}V7$n{^EG=pAAH73|fHh3z%=@vGgtk7ZSWdY6qm?MCuLKK{o20bBHOSCsDcYVVBjY#N3@imsU4JmMx1iwt?9w@NXead~tnKa7v;luHD zhZtF;mm^5`9v{vyZAet*s|Bw#NEkkWJ&3fe42IgcM5Qv&CiRj@-*bCh>MbA_;%K6qY8ilU!k0M)P9A&_# z?M_BDnyyM~qG$N8QXJ7{qF3|F)RG7Z2VCM|(o>qOjBjR!sB7q3|2 z0h|+Fw=mL~IDFB8>0-r{VuO_cb- zKjKnQSz#JG1d>vXEoGx^$#Y{8@OBB}YC!$;|Na2F89-3g%DDhuM~qz=VH$((vhjyK zwIB=Y8b&fO*lE;(hsm_Hk^~M$ysQ>HvS!Ad$suR_i|A@BdCjc7w51deU0d0Y zDrWQqlg(~+3G5#>zjUM&mqL~2wcd?epT?}N=U#0|Pxkq+% z_!Q{hJLylFajT^M!fedwooBFHFtuHm33E4L>Dj5NC-F|7HuGGexxfEoQ@U`&k^PO* zNcIQqTaEUEJ%}Sd$(e}LXZ241<68gw`0mE@=8uq2UY);NSw#mGZ#lu@NoxHRNvMX&(!AMwPhVF#w+AbqT2 z6xb_>VO4O)cw$`Bz+dG{0QwXt%&BlO46uGv+oKgz&tGRF2wyKDLaHd|iYD{ixX?FKTW{9SRGS@^5Cqat!g!e&a^MzdxgwHzC`b^bPaYCHqxE zX$p4(x;*=&t$&zNn41<2Hx(w7{8;wnaF<|XElHqf3mqd@ttaLNF24N{cEuBkAOi5cUzKJB z#@DO=5hf135Y_HN*(v2s(=}lrrXpod0ZYrs1Yz#@AXBDL9$2PknfDQ z%&CH}vG5zO5+zQ?B!wDSQ+c>pkT> zbtMqQ`yXLyq-At7^dsH$Wy%2+a2&yAjI3mNW7l-0H&*I;of5Db6=Jv&1haC{45`q;)bAb#|g!eIXVBC&{;&O!uI6bWGe@rk=|n z1=Q&(O!w+ctg9#tduEfdD^GWjuY^*q)IZx+7>Qebkx&R;)db?KV%+@VJDF6I9PLu- z_3T%1V$?4M9iO5UZi}@PBgLHbR&m&6ectt~o69BL9@uIIYH;c-VhoU!p&ffU-+jca zqcyEu+_j3pd08(xtl;}=kngZy^?>8fj`6jM#MPx*8^94QVlcoa227AhN3*0_HE$zV zEWqw%tkZ)|)tALM^p|nyz))-roCK_^1Kq7+n7VUTB%?}+0V_=^`{Dj)>l<5^@ZH>n z^=@>!2q%U$itkzpR)468y+o~n9LCmr055SC@VGm2)>!s@wQTdq`FLOvx)NtEzr&hC z;p?s8FJC~licHmdG_AXdq$XWM5NN3R^*V*K$Zmj-EjSYCEgDdXO1a|=$wIZGX{k^P zY1H#n^lB(ae{_Z!`bvfB2C6-<6VWJ03N#g0O6w?5<1`9-EfLuC>N1MvhU$V;aO)ZA zjRCObvjeRgK$=(W)LlLY8qAEsQaDvzuM{BCAS*>r8?%;(qB_RbO)bWm&v3wvMKe^8 z%{a7=BCmJRBDE>d&D8Nn#rJwtA~$K!{~n@?_oX(ulPY`KB}$BzZg$~WoVrEvu(jIs zv@xPU>CpsoNzGf@DFApkD+z29>WK0wBMjtLUn*>1zF}+hp0(ugUjGJN*9yeh%Fc(x zkdceth%9AvHGPdXnsMPu>}U$LM1~Z5V#9783IcWw@}tWBpc^ca;mKEava)j5O-UhGCu?QQY0aFK8k5QpFJU_haxFPHvS2|4 zT7$D$X7L4>g|Qe9!#H+Vu+;2x)l728qq=wta2u6E8bM|~k={LBPjpBmPIK8JC57Z{ zPJ89M7jPZ4D&B*;Ob+HZ;ywUAF3i)qO7;jqk=QjkCeEYeBmL2abA$g-kbN#RN)#jG zqNM1Gw2S!id|jc?+K*YI$-jVZywAx-6yM2(7%MI<@-Yc_NN-Po5f~{!Rxgl;9S0v$ z{JQ@q7yA~S(>D0w1X!cBO;)5ZtCL5Q$}dCU2F>J+k>4+-m9R+*DU!#l@zf#ncD^w> zQR+8TFbsn}p^I=s^ER2lY6`u_2wt6y{SkZ_W{eLmr(#&;3-uI_TvW#B@o8%u(CmsPTejJ=`aJ;hk0^SC&F67}LCH~xThPnEEx_>)=Ifd1BH zisoi4CtOj^`BVi^-;vhv%phU65TlxO@A8hdU!AN|pJxu#a!dmCTzE`4u&;&BqeClF zNnrQv04nFfa&gP!ilE0eDwVOQxvmwf6u?5XsO+=Ed6w&^^4P@ky?^Cc&67!aEgPgQ zu&u!$VqJF&YLdBmuGKwhWX60oP0L>pvIjEHbCwHOnPi@X`D-`d-vE|F= zA64VZyIC15c)*q<#+wCY_7Nc?MwEtg)O}Y|38Lj1nG*Y^F;pcs{Y~8Qb^#pMOn6ap zT=ILO^;2S2OuA=d7U$$f-;bTC4#^g-@3}xLWz6(4sD5bCLlAq5Y`7N4*>3Zw>Oq3M zmy)(1T|h?MHqm3!)=O*PSF1@ipg265y;#2u}Xfv zz*L;iCS`v!k3fI^$5Ax-w_j!bhp;HfJ5ojt62@37GGuZ(OCj(@xX!bfUPuscOy&2t zss+@b+3fa~ISrkL!pT>Ew!5%yAO?RkA;2M{wg_Fe6fwVK;*n?|t3{yLJMG-x&z)KK z6yJ^5$Im?}GO5aDZst*p{f()BOAmpzr#yy%o1;vBaCqAiyw8+Zs_e3!FvU!@=*@du1ghCvO8At zv(CA_i3~qFUBt_z1Uo%ec#(VFr-W6RK?mGu@L_G;_k`GA<#UdkJ{V4 zXz;-wU1@v{bjIX@?NJJOXmYyOd60Vp+1!z1JG3|=H)Pi7f(P}2cj3Oz&ECGWC~Lun zF%qckiFNp?$$~4Xup1zv?^UVoDHcbtbc>rxQ?;`MQPf^Xnaa@4*Y?&7w2sLa4f&)# zIUyS0uy@Hk$33dyb*G70bWahOW89F_3VAXG5s~#ny&_*w&cgkEJ8a_q_ARi${!I%_ z+%n-jYE9;0GumUA(#5-aYmzdw?)B3*1!ZmGK`bqU*il>(q{>@yob-rGt%E+aFlEZQ z0liW2=Lfuw@UWH&fX+R_qqlFW@@;WOfkwZgn%WNs8VW3LJ#|v8zARG4YkM+7IL}y5 zx>j5*g(J@V0Osr{RdqxwhF?7N7vk7ekyEJ+RElbfj|u!GC{L)Svv0v$cw)LZ?FBAdX^N}2D9g1yc3 zRG8#E@^sjM(k(8;PB@p57b4^jInRANwi1A;0{NAVpI(DcWmaD#bE6x%PFar7Eqs~J zBB=nQ$;h2ozDWadrwXap$K79YPGxq;gwpcCBw8T3Y-L`E5r}7)OXYOPq!l;z*1lXz z$~0hq7Pr=UmtON}+wye!#%?Fr#TAwJ`v7@q6ZO~VzeMl4*2N({ZE(=tGFlTP{j`=r zb(+%jhM11NB$HRp@$tls()5!~9d57Q-13`nTfQCN$dzWDz6_Ic-)wFN&1}~p)7tVm z(XavUwNt;|Gy?Bok8w32=9lyCTMUT_uEik; zQrEs{B?2i}a<>ERpF!LdgIv%mhU|!*g4dp-$o;;+y{W6m#3fsvYKQb_^Av+72cmA5 zX%h*3Hen@BH9N;3rXpm8VQK@Ex`D2Yc&e&_j4v-OeiQmnb57yI`tL2e`RE+{l z+sAQal~7|>R>j#LNwNJ7jC-6;oLU1CjX!$`;UOso{CEcj)oBhih2X0Oh8esA2q%>^ z#D{`FIHhI>tm6R#S6aBg&G~C52hB};OonvynF?LIn%Xw7xZ8*~@965B4UuTHpz-i~ zDt*;fY{e)U+M!e%1H32V%Yv!0>wVaP;6F11E)3KIahxwP4-J8B1=b;@o1eS5vD!GI zmd>@)KO}$^DFN1a-0EXbl!dAO^=iU!un@qkZe89f8F0@u5jr2R)1u zYRo$Vo>2W{gjeruPt?Y!qte-XA~LMkInGj>MpqcZTPnlta-@5*Kq1$|3&ijh&mp$$ zrbo<8^BRY?eZUzCwab*=0-)&Quc05u(^PPwb!IGVI8}g+ibOra6fKjn1d(0MLOlcQ z)JLka8w@&OU1*#X=H#e{gXg=1CN>nhok9;`DW!hUoIRN|P_z^tIRx1K8G^4Ngiliaz((&f`UQipz(#SI1&$2hfSa3WbV#qSVek>;x(+(hC51OP(Gwqr zYU^`U@2_U71@Qyn+^CqOC#wa&&Hz4bGz#Za-e+zhD71=CcIs=bQkll0#hOAKY9$%y zSk!xsL)G4fNN%tuD_1Ze4dr8Y>QLeQtW6;D{*;DkC~h*I z=4xk1Ox8=&FhWFdb2Biwxr0uIs%xYT`#_hSssUs2v~|$X2D-rSGnI^-Pu`MMfx&1d z)a-^$)Rf2&y(#fXt^s#!Rl@Vs1he(jtb+b36=#Xaso(x=3gX~okeNW5KdAtw@ezJVTx+G0gxOzyu55Ynh^5^jPcaczIZi!ytjq5d+lIt0yp3RF9ez;S13MADP z4Hp-CeLiN;TU(8?l2K&0n#pX|GE=O^;QW0=v({OPi(T$i5)ow3v#}E}w_994nGO-F z?t4^U+7Kv!5#jR3SjF{Brrf_^t+A`+{yPyGdCCrqojf@O<{gfl)$-hJHW&I>&b7_$ zEY+-p+8??kn4`_DUfz+&Q^eQqkc*iG=|p!^BmRCqMK5_l4JX zKHW{tzHQ*q{4qzLPNSt^*)aydQP%>>MA>d)DaGIo%sdc|hE($`Ot1=CF80kj@J+xL z$x58Q-#9^`$sk_6SqbH|@yt+l5XL#a*2(Q_{FuRscTp`X)&uhjcZ3KVN;CYMD z{jBNWo}p;>CC- z6V5jMyhDJ?wiAZ{C1&tt@$%#vLJmg@Fcin*-ifU{)wYJy3W5(ENvtUXtO)GJJ^k6~ zn`KjRaQFlo_lP|?tSJc@$9p{0;QWc#`9)k`B9~XEASY4^yt*KsmXStvN zmR3Bl!I@jrp@;&G4jiC=VcFRW{6%g#eT4W{{A{rBv*}G7QBQ#{+WbbyDGmt{lXC^@ zs^fVNe0j)YmOw+2Rno-)D~=1&Z}#MnNqg!8T?Eo{l*PRgdJ!jXoj2EXgVV#*J&R5u?H?AZqYoli{Tq+BbI`F{(+I~noKRRz z@JS>B&{*S_sSi&|5zph4{R8G~vqT}IcK5Q4zJb>FNyne&mg)))yah}$LSASS>xXMg z17EMrQKr1GB9`+k!it9ehL1unEJWogq8ZF@^<`IEuGl`*$lN;OdD65XC=GBmvGLE1Z#KLj3@9$++?IbTL>(^b-!!<% z3ZVF?tLmi18Hal9_Vf!8DoKF2bLyB}1w+HlhK)$C^4Wz~CSMmV>aV8|R00J57(&MG zQ^o4J0nAPBpgQr(V>y!5)&rPAnnCHL^ghQy`i+`m@(IDQh|>pHk%_Q;&b=xGUs+8d zDubstL^1_Jk~z7ejltbh=$yb)jX3jieSt$%f?=n5i9OiRP+SIq*&NxOT*O3silD zC`Sq$o!Qbz$Z6_H?Fbr;2)IHT@)`^jxL9`@Mw1KDqm~7e6U|*l!gBqz@pW>cM1dfT~YlfZSE)vZcoZ(f@!PkY2 z+*)c;wg5gXG?JS^)5YZ|FJ5X{@-4F-IFG5{4;4BGjvg!N^6FdxK9yUIJXTmd(>fRG zw}oCDIo_V(40`&LgaE!6vFIvSy}(9hUQ#bw7~#vj50Qf=S%xz7c3VZaAnIOy;VrmC zoLv7Y8}o5-J9Svcg$Z2i5$(UIOM{!x+~^GvwsZ_L9q1FNtf;_$@2$cMkNXnxX(~#*sLIQEgIS*lU&=2?(s`5RHozTO=|GIY!X{e-@FARl5u|9#|K+90rGorSZy++mcBo2+8%C z9x0#G`1_5Vb(3LNMrMo$YI9TTp8RXIu5xq-!HA~=4|>czECDVxjUc;7`Wb`uP=|P1QGKhv83t!m&dr{RE36Xq%vz{OsNh^K6OUL@e0i(F;D2p?G00 ziNs=cq!8~D@WnqRIMMrI7vI;+0gq{ewP4#R3wz2zXV0PhBsOHOn5G>HC*#U{4Am3Z zs|c+IZPm9$?jvnr?ZFDn9%CE2Kzw8X2NJl~2DaV?q#JWZfPs~D$fW z=%7YVK=c^w)jG$Vg1DV|ArNj!Qb&pPAK;%=8xArhl(n!g#@ii9y|UN&A=nGZXYG2N(=ujJKABQO>q2U~-VKoR>XzvD~7_FB;BX3d;choZ^8yus$kaasKcH&NTHa zDJ|^7oZ=MPN7t^YLatD)b1aiJHtba70!^p0*uv*qS0#rcOYj%5!RFQxC4BtLOHtdV zjiu(2ZVW}91Rhcj3oM?-3|*uK;004RMI)i~;G&+8~Fg2x|nnv0Z`yLTLKO@4m!oYFsZ+Y#cZUVq%D(!WrSartv}x z9?%6mT-0wK2<2bm)P>IJAW=a>Hr7le4S76a9X!AIvJ}gx;J1i6P-YFyc(ARnba2x} zD|TW=k`bERZRy1mq%SiSU6T8 znCpkU3%CKu&-Y5Mw{-a3VKdUM3S&y1((ZfSjy^Kxyj=P$5**A4+B*noCu#OgC_{_e zBO@LqvL-UY>^~77`4IjJ!}elqRGwt|kXgrL@1;?`eZH$ilhu5}9S z?nnS{F8oVW9%!zbX%H$D4IJB)JR>u@#gIrB#(C88|GghAdjQG&EL_7jA`R+ul< zN9;|m&zi%}m@nQ;*Q@HB=gtywLOmja{sLAlpr)e`{aC*X0z3#X6xGI`iiAPlZ-Gx( zFIb0FdDRj13OupqprB0X5DX;#E zb+Z1krk^hL{(ZAgcX(%>g4G>R7MK}dJK25L3t3rBdvojAXto)o>)yN)&VJK%mwMKf zJgp2p5zvbwpm%ux4PtkH(q3q!p1J%AvTsB{#~6YkcCvvO=AAHc!bShIPlu%si9p|W zVxB*s?zsvrLZa^FC_C$i7AMaEBu&Ovh|H8PJuLRVAWBzBxH~;H)#r)rYv+6ee`ESR z=*NB+9gyVSz8~7_O;`Jo)dpdY{IS*Wc9V1E+8xn<4C$+4h=(yNpFV%7t;>#px!f@> znCIv}?~40)7WjJk?tQKE`#9|LexB=+7ZSXAi}oeV)us)R53-AYaeU7Ce(L+Wjoba4 zy7`{xzn`xA`6uXh2$nY_lCYsX0~2(dTZfuVd?b(ODDtJoN$FN_;g8-us6(`7(09*Dwj= zB|P`JEBHFRF$l+J_j8GKJ!hLa3%s9mx+XLqQ-f9*1xWIztNmwSS9Id*7DxBgN?b zQO@f82@SaFy^M1X(A4du4%)KaTQg4`Hg^Pe2rDk3zv%{&{=#h-(DY67<#KJxDlMDZ zcIVGQe59dM-!2}nqi{|SP9HnH54hcS1rJhD`Yp>5_F+vaGyeh z@MKNI&&g+jbsp-Hxc`R)S(H{PqvP`ZFgl-Smf^z_BHI7G9O>HkF>eTpWskXy=u({m zDq+81+vm9HF~AqXM7i01P*_-F&VBdQMVzt;E5w0B>OBctXqNT~pOTRAyAx&g9ZcLJ zhuHkjCjZ}+Mk{QCa5bVmt9|fb4GcOh-DTZ9pNIFkbFIV2kT&Mzp1Yi%jAq25)AHv^U@wnRUhjg#QGO$n*J${l=_C<(0FRPHlHIJ8B|9iw(d@p&x;X*CR z@zV^T)&}*x&z3!4Jr7V3)aJbtQ6ME7G8FLJIU@_Hv}VRuJAm(9vuM~rAl=Cs8WdN$ zzZqgw*-5REsekHe^=+Sc&Kg?i*eL+VaXxtQzLR||6ZZ8P*Xe)xt-ad7!I;{a{0~p_ zZ|fhu^B<@4U(LkI!OHbd{jbCPe{nxmema-}7!(Z6|5G}d+PMH&{>uYZGIh3hbuu<} z2C)BEAYyOl@>lN+_{SanOB9tgHL)}lw)X&NGyWBDa4`eenV5B9{&GeC$IicT|Lpza zm?}8g8!MZ-0JQ%$Ma2OODyAMT09^osh`o)yld^-Mu_@pmOvIT9!115y`S}41VjeCM z$}WFtsQ=MPI5WdA{qy~=ZHd1)rvEzn4=DcEwf|sLRG0vq|AnZiumG6;dG-(f7tQp) zr~N+;{%5xT?cslS;{TXrkXMieF#V&x{?Bs$WAFbHtt<;*q-SLQzw!Ss99yRUA=%3P z-DL)$e?(imf6HSKHFdKzHdT@k{{QFS=A^o-D6eCL&Gm5f%%czk$R2S#p#h6LlIUQH z5mNpNAfdtJZld7gXvkD*CMx~F5@E!~VrZ~Ifkvy)_ect(1B#+z$J^1?&^I+~4?CHk zW173`r){h2<~Kg8oj?j7fnb9!8o>Un1sZ6-F9&o`P^X5UL9md35j24N_sz_}Bwj>8 zetq=tWn`2~jy660ruR4L+NAAMAa`E*_Ddk<5Fv#Cf)QJ0=k+DWJO)WtZW_U6{sx9DOOJOIIY`-WPtUxE7Y|p&N z8`88#MJf~M_?dEP=_OkRh!HJAfBKZXz$SuO3=R8t#61WQRPr!aw-Z9tE0;wskVmQc zQ6yM|lu;@2YP#j|*|^!;U6b;w5fe@FknDcAhs@k#Gh8eqrhlD%su(btrfr5r!gUSa z^|j{8iN$N*`YwU5@+aT8=ez11`PE#mP;{>5uFX|7Lk|Yf6RB1fep7FXDp0d6gy8Xh zwfqeL=pG!Xc_;gUAk;=Largj^0ygUE%ElQu&zhd*jN?5o(0;Nnli4@EPbsEA z0ErYji>cUgX<6wH(dlV8gtR%6&u66X!+tKynTa9V?7V)=yO1+g#j|AS;0TMZ5Z(Zd zczP3lBi}5GMFdqW=JdnuYn~-%MGO(6x9N5(Co-r zF?7Rf25|=3^=S>DYlc@mcnD+t*avtHzU^2#%yw+GU~P!2(Ov$RL-70LcOKo;J7_n7 zhy%{IM&3ldFn)M`1iNvBqkRf2isMf z#6$swWJ+>0d1*W`;dMDK=?=l4f|HWuUZe?h-ZuP!QUllV~Hs_u@m!r@6ee@A_QQsNi z+5TqrXXt|OA_*rGrxynsM-?ZHb(9S|(=Kx&^EmUAb*$M!3$_JJ>safwMUOEhlS3ynfbs60PfAMw|UyX5jlZJVbT+=M7ZX&%lhfteNo3gvG{0{~V2K_q4n*x5t zyqdh?K8ZeUzsdf2z=lDTP}V?sL1aOnVXk4(zA;H>a}^Yr1yrj-7P0Vs&iWw%xHhwr$&XI<{?gY}>Z=rSJQFzWr_;`)Adv zs#!H^j5V)wV$2a~#ih9oCEeD^`bk*x0}~RaGUm3Syy`V|^>UGg9QHo0VUK**^k+&K z?r^p6Ou#xohw7Y4k@}PhPn}#HOwF?X>sCPDN`IQUmVxI`klC(5-9+K~K|@6e^`=wT zxhH3uR`oidO{Q(~0si5~E6FQ81b47Ya0mS3l7kajTY%?0;_1+5Imwx8v$Bhqi!&&-zOayBf16nJ@XWAicqBj);4CsCIv_kR zDlP0ToGdJvtVX3?wQ3ZjSMoTsE*ZRgwgbI;LBpt-RCl&w*RWqQ zI$0T`)1z)nfs2KQv-$lq6uGx#U#jv>r^R_6bTPgy_%-fukn%9{TIaie|4BTv)T<~QKRfX@?(excYA4j zR--s0w`TDQA3bWPZAKKIR`lCBxJF>)U zai^Q=o~qC5V-Er69lsxbzdCO@K{~IkAGhABrRu9|FHco&X;tix-Q?XgwW*$Us_1Fh z>LQp%8%EbN6xVi0RGEp+7o8NG_+mz<9dw+yH=Sp$46QD9ZCZNI0!4xhK=9zAV7Ge@ zKgyX`@LLY(t!v#*Di(SV~iUx}Q9_o#DoadZdWG!Y*VCjvF8?4#2 z9kPDkx)*duE<2WE%x`%DWg}p}-WhtryUc>+T6PWdEIlTD&wgl}`Wf~!cVTTIw6TE2 z)LqJb^VnxL6K4X4nm7H^<1XSMHLdQCvE*dz1ZqY)d$zOJjlf{wb$BRRFo&uGPiy_& zOlDb)>$-BYX zZXPMLEJao+Z^irk*Q?Ye9d~Cri@K9_A;!@`&4RR_iO*HCePEL%lawO$A}691qLUHN z5$kR>cLP_W5y`W=fnDSujgN`bW!YZNuN}tvBmGzA)2FGt5*x*x>@N!smWPH%d$Z1_ zmxV=P8)com55DiYuLgHRvBzh!PqK;Gk-W|xP;WObB$mGpHXj3SU;lS3_(z8Rg92ZY z{XhElukQX^_a)KA1qB84?2QcZ>HpRGTK{SDS91T)68JAV*#F;P;IF=S{F3JM__UIy zhW20T|6l#C_1|Ukf5(J>MYy1zgPw)8@xNSR|6f4z--P&IDgQsu;vWE@Rdm#M_=jiy z4nz0F4_05?A{SE!S8B1pTHD^>OVaCEIsEPQH7WXkh(imS_V1ei9Z5t| zRar)vQqk2?-`e7fR;-n+O#jJ*L;o*b{I|*ct@zJm{wtFXJ^NSP7k2!=Qt4>LOq%uM ze;>T$8NhZ%2!D;v@{@BS-y|b zrTg+sd|Fj}hW{c*A=NL4q@#oW2QmM8j-9EEgS8z#!+&t{Kdbns!{1eCe4*xF+@!~6 zVr0kv|0Cz04*&Zq|J#uN970CV@(Tz57x(*0#bo>!yZ>n+@DFlR)3dPRQ!}u$e@%~_ z37?ID^~-<7zrx1UfZxj4!su%uwETbl+yS4J?koKMb$W+?yU+^i*@zjL8k;!avoL&t zsN$E+RQ~o*`?nUF>1%LWekWs9Q^UWBp;*7HF0JSCZ;76c>8tp6Kfc`iYd;wN4e9?8 z5&u;DXQlrY5no67CnEkW(&IC-GqHUg@BbAbdmS*EN=6^NA6$nSsqEd~K;qye?7F9~ zR6tyO$Mu^LLZF8|SJSqmfTMh%RqUEWbcwCFR3aK!LRrPYim2bC&2Na^~+TB5j8HRM%&M8 zj+Qo9P$lLxjfqOwX%B75P%W3lUwJC_9S3%!yA=6`{lWM2$f#=pAJ6mBwBK*&BzfCV za93Dcf+0&pJ@m;cic37FxV3^_i3r;3U0faE=7+@tnBei-+dWKul`&&}Lb(n{ys@aN znOp9>T9HC7F9h3^udQ)-5G zV{56I-z!kC*=yo?Kr!AfpD(hcG3*bmLnqfy#s$|KmX^qJVoObwkss@OG&kg)z81NU z@fh`y8KO&ddtfu+_VB6vRED&h(%>U)hP)G;Eln|bDFH~{mFZOY7$FUrHfz#rc2B%w zZJ}sr1KfgmgsUxXt?_%Ye0FtH(w+G1d&Hf70r8|QZNvI{aH34}hO7$5Cd_0Z+W?yk z4bo?Y6hR~<=Qveyv}H+(r@A$*G&Tml?PY%mSNXR+&BBo$7(RjF zhP2{KlWUtZxd=Mw zc5X_L-JtPif4@ z&(Tf+p>C&%v1b16%!Hk>xi@E0IR8x}-15w4GtM3LBI0+!iW(v8d(2fEw-!B!D3O$p z^Z~kMg&8Jf{o-Ro!I-*b7GIi3{G0jA%Sca}yl(p5TunpMtV~s4_48Np1d1@_2rBgvT__LYbC$lRfQjq0 z8Bsqy)G6*II|_bdu;;V#FvSPsX9<4pbHBfwXrHfrHut zpT4?^Doq7B6@`_}awJXLh!Jbs88c1WfKip>as^G>xKWk;@?+bXQ*y_Kk+sb-mX=fS z=*C{{S1W27_p(v1ZX@2KT0FbuOd9v}QLiN<-ksW}wlh(!2Ll@Sua@Nfv{gS_CCBQO zlM`txVAm@u$;vdf74MogT;&}dr)&2YZn*Vr6B}|0Ell^3_0^4R)s57p*R>sOpJz&I z|762}?T_AO&!Hr#Q&xXHj}vI5raaE0+%W!A?XEt(q15d7&)aY2-;-?Cqv2uZUb*rf z$*Wn8s#c|czRqBWu(X=3wY8F3YDx;qN_Xw)6&|k4`GqfFj*jv`wchgK-^``u69pC} z^#^Wl(ik*c*J&Fpo*U}JrcJ25m;1mm|CH|s8VwA5{+`g$*49?4)6r6E%qy=xLPfl< zAo@&%D6d6bxXJtDm#5>dW;vX%0_CbqML|mof14>u&4a_XVlu^qDP5x zvz)@hQYYpoQTQ9O&!q2ofGh=UWMv9)N-1bF=0BVpX64ys;!){s(r8vAoxX}uC@MPHfM#1 z`};!2oTt}S=9Y?A@s{eXYWqFg)-}WaHQ`f$YmB>3ZmKon0^^c({h?M-iwal8+Q`8r zA#aTnHEe4Jv8jV&XXAu@{oVZB>you$WW{ju`0PZU<3-o%9QPczij%8|QHfh({o%*H z*hiXuDI1`2{Y1W$MUz`D$4bai zmFsOry&Hka*K;$D?MB_1*O&DmFt8$>}l%7D>c5<*OO{xQj_1-gX)|8L}s22_D?J7qZ%hTq>)ZV?; zsaM$j?Ic`8pH%2xPw2C^yXxSF1l~PQ164JvjV_&sx7=g*G7egF*T)N38_U)EF1$q{ z;tp+*O?66t;L;gzo(2SDRTGR9o#L31fc}WZ-A`nDKatYY7C7gVZOF03ge98;j#o*jbuOUB*S&m6EP(KA;4&nHCBrcYWOFy@B6D=P)2W1*}NM;xR041{+kiMD%H( z)$L!?=<|ZCafJy<8wQ^);-yFcfm5(kA%31?z$S0%o&34e$vz_fso;Vf_mOC_DFX0x zm@U5qrOdbVGF`(GTHVW*E$H^pS$sKi`($&cMUzl4!IJ1Hg7JQkAQ|E}Oy2y^OB{g3 zRM9jKey50Bo4z;jj3h_lH+Vk`!soV`Yq^B9 zfUZ%FGzW|H`^+rF;3iS;q;F>Ls<{tT(3)XUJh^~S6fFEz0Li0WxNrdPkIUxPVeYwa zVdCn1%AY-@TD8`^%ZdOQtO6#AB~~X6gK5dHRcHdwBvJDN%Kta=GyK+YYJ4L^HWv~S z*CLAJ+ufGjJI-SmPmpC0L;(siI~fb~5|i>XdLuf^rHTpHR>8Dt+lc4=Ncy@p3V(hh zhaP?nQIc9Aw$#}H%LP1?hkZxK{r-3f!K|0Fm=hd!~_xX#KHa}BR&$2M7-$!cL9H#ht-4XyRGqBlw^+q zHfIoked8*Wlh6_#I1-#R()Qe|;xw)8XH4&Rj=b4= zD>*Y!zbt5E4*V4v6Az$^ot^C%uvx~$B8BAFh=`1b&2r5?v_Fa-qJiU|GmVRe#>{kW z2jK{N?Ka_TD__hjdzM3=f+S=ks)bBm*hg)`a10SOI=j<|ZYa}p?T0Mdv9KO3X{PeZ zfK7ZkJ6=)I9cu!^zq@|KXvx$2AYDFr#Am=p0OuD!_yDRi#Wp@9in`ldvyG-nw`u*O zO-35K^=>{<51ZWeZJvySth&|8f_ICv?snJ^b=g$G#3IJ<5h^g4KmY84QNHK;+_6Wa z3DLJ<=<7;n#P8*3bIwK?(lqE^XpY&<2M^ryX(CJsK>>ZC%x6#U+=gAUL0p53oK1_^ zw0iDt+cnD7WEo4S38|F^vQC$cGPHNx7T5511&~w5qs^Mhm5IIP6~fbp6R_4LAo`@K z+zkY8&azvR8q(uh${mEE5#58q>_o38|ov!Spp9?Gm+ilCW( z@?xEI)yWtzkKFY3yeQsBZTN)roZw(Z!`@j{@c-C}JHIsc>Q6UK6nP^QJ;bGimTHfdp_= z1x45CF+-b~H`j?Ec`=Hl<<`a~Culyqbd$WaE>Et48>50MFFVgwHW=s0c@$M1o3! zp2sd6u`)%B$Fe4{(s{>B!3VR%4qzS8f9exAWSeG0k9O}&U${I2J4M`&((gcV(Xx6$ z`ecs|@64m@FelP)cL#0x*9@(|S%VpEq1FUw;zxJA{-`(ac=yPURBWl(!fC=Z#k$9= z_MGo~^>mEg+g#d^wnVpd*`hTAP4twx%6@=*anWA0-Zov;J+*lJus*1JZhJ=ZBG(yW zy?MOVc*c2Cd<%aod&7F8|3L7-^G@QO)Inn7r;I@L3osRErc-Rz3PC%7aTN%aBVQwA zg0}2++a}OUzN){9tJZN5eu|u;#{LcuWesf&a|zjnDg))&s}mp_&;|Y8i`M%Iog6^f z8xy8jqHIMWi|wV<{NX!Sjc^crsaM=xR*W@o^TRC}LfL*eV^%J9H&Kx<1iT@%&$Nyb zp^zUAlc>=lf;t%?h!VnKY&D= zsZ%Z&>qM;k!i#o5h6#ofpKLf=#H~Cjn@TT#8{n;40Ub%=1DjG1#4A=ivYw5qA*$ zsu4NyX~IU#FV;mf?1kRE4Bu4~wB+YE-rcT{y!ar`UWeUdD#}044}!1!9M_b!h4MkQ z84w^jMpY`VtapT)!MpH!C9lY|+lBI>+EWaABwxFNlDmDat*F>c1HU=KO%q1p4Z}Fz z!QE=mg(cTSpuy1(F@54|R}Wl2N?|wpqX?dl*|CQNOLf(F<_Xzf??5XZ?YX-p=2&+u zo%gk$B~1^q0Y=*WD_5RHVOR&V9y?o9uLgsOE(~I}K;7M;8L$VUottQL zaOKUBP!Qyn);%gp_8d3(?>jX|A<2K%6f-)pGC4WR%%wZH(RNgdmNhkwEd*%ng(M1| zvok^+?g-P?VMEqb!z96l@h_QzTnJsw?BD6r&>73IJZsMP)mFo;VNt|$GOe47?$Fyh zP%%H4;F)wqq4lif$wHDsm1}>j=ta@9o$d!z_L(#63WL*H1)Edj-RkpIfMMVg1HAxi z1<+sDudQQLCKCd;1AAbu+&>6zpG?W=XN)uy0iv$*h>>QRUFcVAi)?+&B;e$VW_;0> z^Wdu0w`8ZZ!31LhI9d97=(NpVjs4M3n7A-gx5P(;CKSpaMygkd*;4iHYelN@=1Btn zL?p9za?tmVLZCsk7nY^NKRFKf_l;WBXIT=+XxB%e83aswr>}LKBYGnt(k)B|*Pj~g z>BG+79goPj#iO|$>H4}=Mn)%0npB)~Bj>fcF{ANj*$#+0>chFjW;N{+l&tY?NBMf; zFohNBi;B~hfcakcKItBIG=|mDoP!Tjjp{uq9*CF56MxD)(0+>C2S9#VlzYwb#PRx0?hd+3PPhn-f0Q*U4Q1#l_a)0n{gX!~mVPD*5YiK;#I(r*Bx$uRyeh&D@%g zqHJ@GO@Jx;x)t~PYB4hDCN5(V>u(dhU+pH;>y11uT_5+O{v`ZADi|QNL*|Q`p6&*L ziia4q0j1RT0?b}26_w^BJwf_RFDc|fGY2f*9AlF2x(S5M8w5@T&q21fI3ibZF-PA~ zv{zQZK6LAef_U@NyInBy8`3Wtq*zIC&+EQdMD?FgKY&SeI6QEPqzy?uEcd#Q4<4kc zFa*I1P5=7cRSe=bh$+ikXZp_KjnS^giuL+B`c#9Aut3qyw&GeT-PDL=cNsGVqzjDb z9dhIxeD{EijFx*9N4?tH$Fwse`#aN1Xki*0M^wrdo4vg!d!w<(t2Xdypr-$bwgSf# zC<4tC?&P=Xwy?rU;5CEma%HaVq?Vlz8hfdCEB(Gjlax#7+^HZnwaCIChx=fB5`Da5 zM6%X^5IAiszWgYRjCMb6#dV_bOt<7?<%3NiT3I;SeZLV2HTzWF>XD7dRpO7q@cSr# zl2A2$hmNR^1`~sgC<4U>?jIh%piTx17a6oMdtg{3hxO{|10HJ?+p| z&>NY$VO}H&PlOc?JgqFd)H=s_2)=oGM>M9R%hR3%+U9dJ*_H|rSR2VayXuCzd~ewc z+(nOH6MWF-z5XV~8p0+^(G( z=wEAjJY9sWtLHm<_GIX<=(VMO#V%c}#Up5M;2S!JlxcHpPFXVG^~=OcZ13l=i=6KK zo+iR=z`-s{HbNr8g``XJM=L8g#v+Bw)XQzRm%5mCzTGlPWgxNllQ)-Qht{s2aJxR8 z_D{~aU-jr6Do3d9Oj(&n^CG?<)9CtFb8}nowAjagP>j!}?uZ+S3go%Zf+> zD?iFt_8$3u{HBn;eZ-#>32o>lTwT-xJwDhKP2P+ zDfOO%@ny_!hMrRD6d&6$F;nAQ-sl!2%W}2s$Da~}MX5f)4-R?MoKP`QTvm*`S zc^+;jy%|j2X$6KLtY9Ilygm~rE*O#P0C>E29;}0VPQ8e=jdsAa8cT8kiTJD2J&-8^ z>CFD^fV>E9UB{!;^NJLmpHf!T{dqKV`q+#TLISanJbYqJ6U4*6+b+4N_QY86 z4J4ABh96cm*E2t>R^gAjB{zkK)ZN7un-0hn3!t2t*rSBmvAMa|jlmBqoh-1|=!?^_ z8r%f7277wQ#&ZnFC~T$_wyKfcw&tX&S{id6HZJ%kX$PPdBJG(9+S<4s&Qp2L$idB~ zXO}g_Lj$D|*`^+u{rwb)lwIh@BhQaJ2b_WrbSuQmEAX;(utAUv(Mf5iITqh~ZFfLd zM441kv{k|mFb7BH8_=~a7! zGdGzmq<)d~n3Agw$lAG1&3aaH77^2pz9Q`!AzagcdAEb1ntskq^e*w{9fGUgzIWR* z3GK#G$sSJa-T5^T0izNfmh@_;iNUXKIq#pb(Ut{8_F$D%dYhQJb zoqpnKd*LJWO_$)ex=eq-xNhe>yMVMn&AeIIafXsy69pQ^S?KprVh7EH2C=OO#DoH!@({k6SEo58!vnHGXC8O%<~x3jS()t&Xg%r*4`B3;Sbia$XVQF z?&Qq--8XK5&3wG6u9?r@$qDbWI#yh)p^SEjny|?Mnb%Yo#!JXLz0`*)_U0|{R#;8p zt3w^#?_r$79Ru%Cr@J42wDy8rP%ooAWpJuK(Xe~on9f2c4+x*wcmgN4Z=a#Ph&RI) z&77_$Z@YGMcHN(wo*$ohZx5d)pJ<=>`H5ZhMAz`8kPaZ}d$|Y{tDz+Wm3uMu;;)LY zP@H6=(2uyCFUu zQ+E@?wMNU{dF&bY>QT;aD6tk9!b2^jC{7?8$K=e-UhMTBrJWFm&dOzH?0%4gc8ETK z=EYXi1Ye2*jq&~mCqMKSRjoPcu`o+)d(_1Ua_8ISRiCdhB&5N1H=k%nXxkRNPU9jE z`1=4zmBDr>usr29Rn|=bFee9_%huQ~p9Hgf3Biip&pdf@y+5dWQnRUU5ob9DKkYR^ z1$au&w*sZpulodtx<(evU5APJTU8>uKZ9WnZr#xX<5H%)nTe&ga9KWmkhp)sFuwHI zgj%E^HS3)>!36a!YZ;4b9jf3uMc?%OSzqXa05UL-Nco>iOSo!JDN8V+M zRrMHG^H?Yb8Uvf*$G*DlM>a+?X865EaKBv{b32hA>8Rr&V06fIo|Vjr{u)l7mHoVi zzoHF;nAOSHJB^PDxaImFq?o6_sWB+!)n1cRdyG5MZ?+_B#I((~M^KZ}%z_~-LDo7=LR5dAMQ@JaxFl`wO2y{?s zoR7V7q-2QBvW6)RML`W<7Dyo?rKm{(_)Pp7pHpR{Xra+CP^*qUIpZzd;i2q9|E@?_()qpdu;QMvj|% zVKNDbyGf178t{!!{;5<(8=WQ;p5%X5go(fm8kF48R?-r03rW7r-ygsKo zntCR2N7m#NTm^1jX))K`l5*D)emq$}q~K-lfjd&(M@Vx=0tM?nP+%mo4eed}=-S0o z^pNJ0^92t_^`<6DV|9ne*?v|u`cGT7gj3hHvu&%xh@r`^1Pd)ZUS99@PC(y7>Ac?Y zYA@C68p&eQN#BVZ?^Djk_LXhD+oS2Dlmj+)zn7_?5Z`%W^Y6*mz#}5T41CP~Cs%q? z{y_M?^<->WHkKyd8p?6eO&;EpZ}|mJgB2w`))!YiVggQO{wsd8!*_>x1H@10EUcI- zQf={tt(#ZDzqG0yobj1{8_ul!^7>)0K5Hf@;wDfmlWQmuT%7g!og_FDHlD~LxZemi zBw=1As?p;x{aMegL#Bu|d;@+x;Us0WO~B+uhWSOtZIH4p1glRdw_w2fw7WoVLmHpJ zovCQm&yg5UGRjT;fJgwy#L6E5AuV_hx$ej2Pze0*j^A(d-t<)zVey_3kF;5`NgS)2)Z zHWF=d!i;%@gWy}Vv7=u^5N*s$oUCNrl(WDa(a02)2@lPJ^I*bSXUCq?Du~9cNGa}lUYw+WfZ9qHtBhT@dnjwoh{@v>So*gQ-b=s##NkhfA@40CW5ww3*70@FZa$mhU)ab^pH$@q2;f}=;`O*v#jHpaM_@hD36Qe6LV`pT zu(Rk3VwgNowu}0KGYbX`$rn^cuSMQG3qtF+>p(QBdsn0%Vh^wB0~SZHTp%4a)%D(m zrzKhilw;C8OR~UcMjR+qe#VCVn&D~<`8C6to2evW>A>ER%reF7fTN;~FeURs=8%w; zH#w~{qcd&g7SbuancL-TO71DrRghfbPdF8<_kzLuaJ7G@HVtNr+)^^-oHnvvSboZo zd#cn+y=&Iu-a=BDxZ2I#%^jAwj;yxo$ggp%d;xb6lUH*G(I@CzWUV@kZ)-E@ufMp8bFyYGBEc~f;&b!&Y?S}nl|)$!ZjgZC5F8-tRW zYo^C+91c@z!>@`?1oAs@psrr64P$+(6>7wkaoG1CxwD2y`hlR>%3MQ{j=(Y7_H$SLnb z(J?YcX{mFuuwY!qbDl@mkms8PsM99poCp3OK4Yz&LB%RFwz-%;oTOp z!VJWMFJmwNkr`ZTHY-=It=95qK_8nkkWzV^V-nTnPa+=ibL zijrt6|EfKU&?TUwy(3*3}_Yv$wMq#!Ai+0rORukl{)_3&iUb$!-v6BzZFX96sO!aMpg+?4<*d#f`;Zxn5=R;d5mTChfS?j$Ma#f)Cs!oYSKNfcREv}n z;pCQt~ek+@4scp_G84n@bwqbTy=xMs3w)uwf4V%sfc0RVJ&i&Vi}%#+nq*Zi+UU*W&cOCeTmS?d%~b4hZ*PDGqTS z0-}Tc8#}Led*s3S7m)3{os(%g+wV;+?^*(;oB-T{V^xB*~oPv^QFhI+7#X z#NAf2s-I`BW!TSstj8BP<66~P)L+vH2Lkw5DW)Sl2fE(&mN$umxtlC&f4fVcC{`WU z-)c;5I4_~)NtR`N4ns%wC!R3oZt?-|5#V;+#Zw^ob>#7>r7_Y zZ44x?v4hLJS@7M$ zy3A6F&(yvgOE0BbkUmmr}pQTY?S1XidXxM|6x?d zXZedqKY2+0HOO8E`6~Qa*`F%)uE*Ue(O+owyy8FdAn#7q-(Pq(SWRj{XBh~UH?tlr z`fH;H&*V;=$u@QM_Xl&l{6YQI;ob1Zyd}g|cjGhP7suz(x}*i-AaQX7hT#duW#}bE zPVcs}`se3mrROHF={Od~$NsqVUtBx1i!MZ1Tt=%)=E>2Z-AwGpBSPmpC7zz4g)I&b zMA@Y?IZ3&fYc?B#Qs35YpSUGCuDci+5*(SI{f;+>r8FPKVYNG$<;K&fgnBN*krDrs z{3PiA>qn|oVa)N=1$>`q{ttXvVg4)$pP)y9T1d`$-oPklAo6}IM|O2^S2NU-A;CYd zBfm^sdBeC*i*h9Iez<}$%o7ObaR^UrA&Vc52s7|uCk)|cAmBihP(a!#LuLYvn8A18 zv@Jm~rPBB~Bnoqs9I>TP-e9+4;d2W)>?@gz?e**n{T zX%eW8%-cNjk+#Ee9wFF9^G~=1xg)wCt*_}_usyn8L@$Z*!mMA>HjgfeKkg0jEnp5o z2&}XQW`megX2~ARKEZwzEy3uFtv;D`f^+VaJ-I*4$F!$CH!R_7emgd&+^e#T>2}gD z@<8~s{}BH$9oC<`rQLQ3^b(B2e0a`sTmKGB-&BTA$d~6k?$EfsgI}_>w+zqZQN7AJJbrj}0qIl~78zn4$a z<1PCq8@p)A(eXeaBAUS_Kju*&J5yDp=!MUH=bPx9 zDpXU^1{kx1h#!3dQzJOt`r}<_Frx?uQXf6!B1m#TO^bTDvnR#tfx@$&;#4OPA%imQ zqQeO21m;hJ@H;`5T>~thv$87fM?R06iV7GqDwi=BpEP}SsC#5oZ1pg@J)?d^O?g@o zy#kyW2d_(nad*5SC06aRfJ{1?6J|++K#wtcQ+$-G;ukEQ$wg zh&d3df!4LtSzu+dR5k=)&)#hp3N5eUsz-JQ&%4)8gbtAH8Mzp2^4lL!U4W0^%Q`be zo5NnB!zO^F)37?0YL(#=FG0BQpaeMybu1xNvM0?B&^+fLK6`b0n1a~tY9fKo;l zB8wngq`SszzP@?b=i|n8RrALw^XEA7sC+xPalHm81q3=+$F!f0Y*7=7W|HZo$Pkod z@`_A7q1us_Bf^*XKyTdMWpEPsI9mV`4GCn95lCjOv+52_?tu$iRK7E8ZULvpTL;nm z2L2~kB4QdXkxGp!>8*gIK3txX{f`(h068{dHW=9-IsEfoj81D{2ir8kq*LD7xxedPs3DeHYvMu zPTvz{DmsZ2H4;KKNST**9ERQeg|7H1AOpN`r3w9(2!7na0p+_b$*00TGev~qJnG!@ z0tBA0?F>L8`*|Kt>&NtUw?OVD##Vn`PXeEYNxn|nS-<|+{$!W$08sb_kM7y85rtol z0j3?fu%lSA6sHdNPav=`l%aC*z#YP)<|UmPPWpP&KXN-?zZcCr3R)Pb4fD;14*2l2 zk4W0Lc5Od{^bV=1A4Lv!zQ{Hprb(*8gK}JLgw%)v1KI)B!70_KtiCBp%hVCzNX81) z-(reoJS%pB!z1D^*-6#l5!EH5FcB0@8^nNvfgxOneg;3v&7~6DNw6;KEJXJLPdcRz za>Yr)6(;!RH-dPTIJI8~)!d2ip3erK;TzIs z9n_kaPfDC9F3YxVwJKHA$6SWM0N`L5U0{HG!KIxJ@6td)H1bKC$-Ie3mS7kj4TH?b z9ec$&S(T|dJ(ePSc905JL!v9Swq38Y=~X1+$PV)U!8|56*tvlIj(?6nM~7daxLLx_ z^zkPi$zUV&@Y(#Drx0-XseC8zUiCjjD1+5g!4SaV!!r2%cj&aBx?lfJ{UkQgZf9IV zgL0C840|dYpGH?MtmYIt4AdeHHX~+aFM7Q& zPR*>$bjXa6yr>jF=M(UGAg?AyCAvUERHD8(jZFdi>V%%D2FlS2rU=5iM#HlQirhiu zK7U&%PJ*%kMHK<|mh0u1qb<99224dIGRiiS_h7BSNM&Xp1q@^GM+huDD#2JlUavXIZOR|dXt{T>0YE+{zEY=)s-G{-ez&^ zx%?aP&;UP9tQ0IvJe1VWYI$KE`{K~_U8=rdJ^3~jEE@^)Gdxhhj+(~^)>}Nh5Ysj) zXg!cYwRd<8`wGN)Z@}e6hzm@9)rKv9vGbkeI8W<=9MW0-ET!5L7{}Rot)Fl{ECyE) zG7`?H7~ePRA%?{dJ`HT80+9h#vP(mNGiWH^|mG3 zdeKIc5h;1;azSn4ejdL8@!h+S_?3WASQz9!{Z* zc23LAlbM*lL9>qplPR`Shwe$&kZ+YX9AeFU;K2DC_&I&WhzjS>^zYlgLar%)nvT%n zZh_u}q3Z7TTbDtFWR0e&S%!LT9RN>E*4N00E|fSHSS(%JBjNjgiR#bGxgA zOW&>N5vNT8c({1iXzqagiHi9*c_P4gGzy6Aucdl8`VoL(4qb8&WKN2(Mzz$2v&=dG zYW423Joy7N-Y*W($l+d$^a`%VrE{Klj1bjyH7z&+{_G}5c5wR0v+NK8ENB2{2xmoaO`h$ty(fgX^+koE$&IP=y^oY8~byt5cP;p-Wwh|~)q*Be-b`&0ug+is) zCRZ(|dViF6R(FBxaF-vwBu`j3zcQ5-575oM#F@!uj{*Z!UJF$57U~k<7@p@54orwR za`*WW0w@p+dYn%PsfbqsbQfsOHv4;{oVI5V*rXzs)RGIby4ZuTef(1o$cDc4`LS%h zLT|u}de`S86yOUDLYy%dJd)@ec=j{-1@^CiHD2fLpfKX9`B*jlh6-c%qdm}(I=_vgXbhdXMi?kBAp_7!UruGsc(H3(Jglf=l7}eN( zfY{NQoYLBGu0YTyu&_d|r?#a`HLIdPUHE`EvHU;O==}zrAMeQUmfCw1@kPSw*A_)!6o7 zIyyyJ9No=+r%tfXPmrt8pooo`5U`*@hweYb^h z^JmaT-B&e7nC?ZGr^+R)bMh^4Ft#3#AWwV-9 z8fWu*1s@ogheS3hjwi$LV+ug~FD3xuAb{Ij3~S|#pLj(7JnX{!#6Bw1LgxN)VR&71 z5?07klY=X|KgBmt7#2z6uE8vd<0W%9FqU^+bj7_xN|eAHr;myOU{8L47;ldoOUy-Y zTnp&y#X0XqvBYGKX6iRhk6w{8nsGMBb#Hrhg;X*@!ycYDaW&}lanciImtdX7jD&-Q z!EJqSS7BOtHKgq8CHG$y22ukJfdlG~qF@yHJX!ue=x2T@OqN83tLx3LO;3AoxCK)m-&Jj zvI?M5iQ#QP@kx6iw8z^)Qz9cT!KBI zg7;o7)LR|kF@0VQ6YxNvtw-gM5*Ix8mh!Ff*CJe~P}7S0oLm1k`X1!M*$o+0Wu++S zOm|!^U7qfCWg8jm=;0Naw3UD(U5us(L(NOe;PB$tvsr!0-X@}znFQSDd^PXisnk2o zjBn(@R?ZDI4s8m{_oL8*2Aa^9k6F>$s1^fTArD1d1uxzTF+zYUyKZA&QK@1a zP)ya7-pQz9YV<4hdl+dIyPfs)UPx>B3KtEwsh-nLoAmh&iK7Om@u-CF!{1X_jUGa& zMUkD*MD%=HESM_A9JrYl6C67P^)g(edV$?Qy&+)QGPNzyKJss0U(bQ*s|JAcnBH<^ znO4eGoUlb+tKHSFuYRfVnPcrj;-UhaVE4<%*{7kYb86G%82MOw?VeE-# zAwC|if#b823lZp1Zatl{jZ`)FZ}A8pd5;G7!rl?8pZHxrs)x(#-o=X5eHq%`*a%zV zP75+6@DSD7mYyS>u6LoIy@~FXsi;(Isy~hO={1cwM%cA;YDQ3o91RX_>b-jpuE};u zs1gqNAShAO)|}&j+X>A3x@$0Nsb;slBHpmQe?DTp^{jI~#F`%GcqiHK0NpTkjp;Kd{A^+AG%( zmG>OCsu!bs#QWEi==sAr5V`C78L5S_c_Pz`g#_~?^NZ=VDp#S~h=av6kniT3b8jlQ zl?TyjvuRx>AEnPq_QHF@@^hg)d0k|BfoMN42ju7#B9IIQh_F-lu+rH3cs3QgG{(c{ zAgoheZ@gRt=lo5Fw^oC*xavO;fpLtr!{sv0PPkGU;h1ukIdjk8)bL6PdHU05`QtZX zip1Ju^P{lB-F5aWYNTRXOG+t!2=+qP}n&PQZ4>C8|aEx4QrGMa>l&~^QUpLYz=i!>N>u##D5B>b* zDv3f`U)zz(-A`s@Y@tu-Xy=a78zyrd(3O)5p=wx?(@USPz|Mv{3Bki7v8*;3v;C4g zk9OdeVCQ<&qse{)D-rl&(6kcbm4IXeL>U5gHCSqk2h-q-nhR=gjUjBP)n|Ywr4Hj7 zWlG$lUw15dp5l5N15C{#u)Q|JyQo*Z&lxpi@BalezThhIx&yQ`A6Z5OZUHwN56Q+` z^Eo69)(7(HIdmDr*4--~S$H`)Q9*}{tLNa#jq>!le`~i0mM|O3#nROd#kK)?j$%#> z#&c_*$)UiWY5_Xv>U^c+sA8J+a&>VUnEBVs$0N@sxs<2dPBJBEjOD89+Sx<9_lkwB z=$3x3LnK>T^|@Ie=z6$}@aGTYsQnpg3*klw&)h-*a$&ZcKAlG{GuK304^2f?F8;T^12pEHV>KS3SMZP7! z$}yQ9LLRX^bBwbyu?Sc||z4#@@7BkHHq^-7xtznyxpa{z%cRkt9wwFBcs(XH1 z*`!j?G&`Q#V-7Y1y|Ip;Rx$rz%h^wA0c%a32MAu%daEahvQ$(~y?btrU3DO-I6i>( z1ljO>D2>zVjPYb|y4&m^LA0pyGF^=zv-%*;vM_o{i{2IG25cLjb>BXpspd_VUSK0b!_e=^@5T70gTP8U(C}1PMbA`aVbzeII3X;qsOvszlcO*So9Wiu zcBIOIB^vxJbyL?9(X`hUGp_4KN?FKWfM22>s)*S=HZVcWft&aPukoaknm25*!>iCL z<3n-xtm-4ha4bIs=j}Xzx~ubub;#TO%&*y=lS`gCvKgR$^JM(914ULIomo^x-!qF-Tk zDO!YR1UZuo9heV8F-v$mH4vppcf49PP1!oN?J=W%*tuf6@<`{aGsSEQLz~w8cmy5kR{_p&=GSZ+U1wCAe?8qGr7$Pc6UmDjNroya%a*l!oEQ9{R1&a zC~f%O+U#RdAg&AOJ0g23bdRR<&NOh$?ryV@Cogfp*ukYgoGZC1@QNL=3+}$?edmVC zC4zM^fiO=L>*c+JbGzLG%Y)`6wAK1K(PQms$~y6-#U)hdcbOUs@@-1W z?AT9(C%!i!Q~%H%(jy*EYEEEPsBDj_V$qFAbeB%{_xqjBr6y6fM$S@T)kgp;9B}Ir zmt%x-wX&RvsSzPfGQIE*BFUPD&`2nW&^&pw4sNd zolo|-H~o4Vngjb=6}f!a(RhHix|R(2i^q*Cw?O{JFzo92cA(+YZEh-dxDlwd^&>sp zN|?R&D@EdtmBS$Z9vW#U;*aZ6Ep5~89Bdh><)s;68Dcg!J@z`<)Vc&SCr)_-<0!0i z=o2oTY@zS2152ywI;P+FL|baPzDtzf3HZ?)uyYB0H7JL(43>D$9IhS82INZFjAe z7=UF*H@|Lme z#7XT?6#VFfFx3=-1pkefu{+v?PVR~WMQ=w|3lQksBTampHTIZ;{A7PFjoU`+%~^NI zSVzus)m`qsJAA^JAumrxIM$Q+&CAcs@Nqq97>p?{5^!l4kgOIMBkVpNoJ8=0Nj;>@ zJD-Dr@;t8;*)Z7gBMb*M*9>Gz9$lo~o!~XmccO1YOQ&81z&@JRelIkcsClvb_*@Vs zm}n=DSkmV#nVfc;m#y$2+^{C#lVX`CY>Lfd?GtF?r?J@waebEF+%52KfNCV;tfLP; zoP79%tnoqI@}--pcoT#xnFYxL5a(=4?da+(u3;bk)191h?{5dFyPWNLaCPp8>}AsH%&-(q zMVkz>MS6EY41D>X`G6mtW({>GAnnO6 zc!G}F?aHMEP2no8SVwDn4G*G~U%Ikq6xuCuDHLpR{C2cfa^~r54st@Z3^cP`c7w4YxLx_iTuMnoq!`w8WN+yZ>L zSpvxDtFBDKNq1|`v-F!emg_>wSngbc$*;~4qu+>$UInUKJZ!wx-SE%3WuUTdetk6> zRQ|M8B-Yp}J6-gS6E~=@)JdSB8PSH*l#Gu_upTLErWBbN1u844P-UTNac)NZ+ z@$PvrTcAvAOfDI}cZ*m%9u`LoIRbsSgq#u4d)H?bAt4xnin5A`YP>I$3@|cT0FWXd z0`>t(8jMIP)FaU&lTebZ08BI?qAIF1bX_$K6=O+_8aieg7k+gq&t^kzvXO{g>#l@c^`lZ+x;7@C@T8!I}J5^VLMYd zqe}XpEHy+wNqiPwM^jVdZ}+FC2M!KSW}tth(1eYJj)m%GHn5S>vvPAdzn@nhP|n6D z)J~|6mF63wO;9l|76g%y^!FQ^XwE^UP>YAtL`@EB$;BgJBIRfxvrv+9dh=6^(hM^P z2h*e*j*X0j)0jUmt%weoYKTF}pcze;wWbRjuVtvd6a!QSjCqD7fQd0wHuTUg1`^mMBKzHvmkKIF{e^mOUD`W#gG;Ywrs^=x8f z_3HHN3(~Y@~aSxi%Uhs|r?Pyg6U_1%_HO|zJu?|sHWogi8Vsv401wOcT!&&i8F3l zx$8q!nSz%bNliS{=;`Ov8}JB7 z*}a^f$5T&d6KCBP+t&}oBN8YK4i}J%s3EB-bsC7gjnijRFJBbh2EmkKeuS zPcOHW!^TZd$UteOV)fj-_3v*Vcw(oAuC0sT3pe?+P@9lWPC`+4Fq3vNu@}=(n;eXe zR|nRQ`-7DwPf|7l3ef_o#YUM1g;e^7q$Fj@Va8;_$*HHHqGV;Yz6TFBlQGsg>JQe= zCcd8c3rqgkvmZAb1Z&Y}ZV^5Jt3&IbU=mp(rlMw{732GW70oI}Rv|JnHlCUs8OcsE zm86LpA8#b45itDu6~3c^&0EFE&QZwKJdK`rdQNsbwiMtjR#??!6M;Ur_&q4tc^TIN?Nzh=y!58Lp!gkD#60!myDV zqQYR|-N>%*=Kflr+3s2&5WYfhb^{Ga_8({u9BwZUUp0!9j)<@lu1QOqtF^x~7u=If zG3pP*L^7e)X{G2OqNb*ABr0aJ=o$S*9D!;?OiMNiy7D_QHV{ zcDI%Rb#-zxNz`?WoMcAcnsP^Z_ucY#{{gT$3Dr&S7fB=>EVkR}2-F++5NqD9cfUJg zwCK+6kKLprRJVQ8GqfCwpPR|=O81nr2PkJIrU~9%$H~v|OAKtxW|JXZ zPb=-q;%6LpL0wL?PjB%xHCM-`OGgQCnY_4+4su= z6JaoGpu$s4S3a&qSLKB8xL8`&4aRCd+Abx((8mJ%;JrOh9mfiWuV)`7k2k&El8REb zr#fF$_huIAY~FvT(zIBA1Xboo#lVBZcD|La4WMa0U#@(J_iag-xP##yyY9Ze5i4Sn zYA&4pwwI=q!G$JKPS= zt!N+NI{6%LY_%)eZ;k4f0ovPW0aKboRKlbjyzhl;Xs|a3tW&A(C&4K$>yKMiJdF$` zR(gtSUI*+p74GldUV~dFmgF5S9rt{@!RXvwuT@)?ZtTyUA1tp^mF!0*o-BQMnJ*u$ zoOijUWn|G?TWvPLIo*Z`D4t|wApSpm$Doz6593WaB+Ogl4pq{@(+k;ooW99Pu4#<{ zGoxhKna%YeO4~=oOHhu9J779AF=YrGdvsnIuSC8ruqnQK;!a+zzg*t7Jv3!`Y_+iF zICa>++urXTWzKeg~!buT$yAK_k{096Fn;hDRiO$X<^YxHLHE@5|i9z_L%*FC-Mja@!q z9rJds8mF|azg!$i?lfHW5fFh;DK1zNHpU*|+d?S=>cb--ib2(lRRDeqI@3Oj_}78?;i(MNh~U>A7$uFGB$KGdG$ z%2(n&#I}vt+mk*4Kk>8#Pz8X7b&{#3xl}bmJw=H0sV}j-PEYuE?X2J78DUDr?gokr zFnxWYXU3RJP|S4`oseJEj;K_Lb&83ysk+?iuAq zR}ZVbT~J4iMlWO1B$J@_TNR}S%A$_2Hgrjv=;6z=43CVmw7Q|%Cz}6SYcO@p87XSe zQz(WbIG;TOzixr1;LwlV4c`&*2S0mnoo%fNA1OXYA|Vw9yJq40R2-vTc(NK}yT`aF z6GoK_;u*R<#uJkTH_8PqzFYIMV;}2XyT@yhDN|;e6yS_^AawSMDiv)q+wT-5FIoAs)Vbsa(Rk4!x6yu z-f1!)qVEAXRmx1irMJbj`~0H%V}1;Zw;-UO+}{U$#R&=?Zv!@5AnhA*=i#tz@1=9X zLp}JKPlFtAt-cIx9F5;eH)A%6@xV=<51N5aoLEO0n+{YAnv^!@|YFEF=~f{|i!ydy*_2ih%S?h7%U>S)LYI#A33xZrLIXjRG z42?XJ z9sGjMK;}=ck^#cBpRh`GDmw^^1c@^hs#Cg_Q z?YaW4rvB{YOcX2fcFnB>{U{1sC|J7!Ma5OBnU%KZ9a!gxVDE$l4G4fbj;QME`9$Xn z#WVd@MX9^(dglwn-E`Kdn$>h?1_ec;^87doeY;P9wWj0o%*HIBmDHzQIOEKS9fDhj zbw;I~^uY8vR3EY>A}dRJA$oAgzSSC?!#H^>9c3)CJ1{(r#3H2rsRdZ3nA{~*{j_-5 zdDi=5>Vo*U?plHLD;<nIx zSq&RE>9!Ze1McnycTihMb@B_njLm_3?3yTvweqO*N1myYy_4}jcKl78RTU6X(-8kRarO^i^KUjN6vIEA8-Ign8UAUK5HYiNa1=Dv zx5s1rBza2d|3~33UguxXU1qvZ*T#PkI{&2w`J>$U7oqbHhWG!8S=(dXhxbkB%5wlG zLGa5xI==Exf~RSg(ggVK>c&`eJ`2z5Ews=C3GQ>hG&edbUYDyZ7s$sX{}cM2<91@L zUI}ph?h&`edc7?1m!IZ<#kd=ohqZXy%h&IG65!okjI~6o+t+|T-=QB~al-cA{(W!j zs)f3SuRZ8qAU%m75r&>YQ|u9<^49RD?p5=IuTif5Qm_1brvG9>|L2YJPru5) zQLbz(f5^0Ee`F?~pO&9K6CvZjSjnF^+&^tJuD~5B9*#;2D1%)NSL@=wu@HD)>FEqZ zzlwkP646eihu9+*32X;WPQ)irEwo8XPMlgK@GWRoK|&E~ULk@8D{fbeI#yV-+E<}w z76SFBaJ_;#m|3#G?3E`YB~6{m$JwpS<<;fe#oh8lro$DtI-8F?`)VEr&9ihBMFuqX z$eG&-i`Pvr-?$AYs%^0Hc$PZKU4qKo(D=$2g@O02j?NwB*chPSQ)}-xWfHPMC;G6( z)M#mtq@g#%8KK>M=E;rgt;4T3Wn;;`w>_A*ZbD<_gPYr^#T?EqE*w^Tl`bvB3!NAJ z)$n!~oQwLGY*-XG(QxnzboJ*J_&yD|#_lQ=tO5dfGrr!JuoUz<-sQWMb)BQ4BAA!{ z0^-u`d!(|mikpzxfTav)?J8NW{Vj>5s#}(B4xP8(?uT?WW=kd}h^h@jmh(6=$dD@l zUPLLVRilgm5?CZU@PHXiZFHFt9#f8O?#zBTDSm#flh9ffV-EfA)`GH*hNm?eta{yO z$XHAlQliZDKMM1R+C!sKr;1+s%NmBj$9sg<7k&`!WmF_0OIa;=QAl*=>UEvK;KtYG z7g^=%4U}WviL!7m3<@G??ICHG=Uxo65Kzrfv4kxRSnQhY78~S0;@*@#hPev2Q+ZRp zYrcxTrnri~7Q4#7#x`B<;@0wZzoY`g;||v~MnKnYAx%a2plzXikYpoGh5MjPh58_T zP`!)4=DTWmLT?Fxdw4*nogcxP*-YQ>Jk-h#nk6k6cah+r#q5w-yvf{`?aJSTK58Dk zW3F_e!biaF^56JAQr@84r0jaPN4}&ky{9gD#=mI}2qV+tr^S(RjFkcQiO=`qACT=v zxXe}TZlKp?E(Z*4MOhqvTJ5F(a?O(ZEu6HLkE0`3iNH05!!1<69kZb(HDyj?=CO)x z(<7qg-dJoRFXWMO`l{tA@|w1~9)=(Jxul(&_4%>sBDR8KW5X#@J@4FL;^25=xUd!; zSMSrGW+z{@%By6fY4pLjZn;F?8N)dut|YeME=5>sT&}wy$GwVesKd0}%a?yRH*TVdn-nJa(Cn%68>y zMA6pXA!(cW_t1s=XXss;_hfbjsl{#R_%Aee&1_Ow6mSR-d)5Gt;&c98K09C6wq;yU z^`e~f&Rr{m%G7|FNWj=7;XSI2Fm0toOxfgQN`p4Q_=2j2RKe7QAgeu%a#L8&9SDB< zGVgYy&}g_*TnZOm6Jmo2N_*iUief?doNDu%3B^zu5^uNqcz!~C^l>-ol%VMEWqh2v zbjq~@m#M?l(VQ6c)nZC@2@iU4OVUP^wa_pFkV`!`UL8Vi@@J8mIx7xOQO(uls9V~D zjTD6n5s&htmMD|JBm8VgI)LQ`M;+daB>Q#YuUnrBBG43D5Wy!F&ArHNm3+Uomm;jFWb& zmV?S$c*yPvH&7;yq^0Z7lZk1EMXGxn5q+-VnpKLMMDvV&DDMgb_bnddKpM=O2!>JK&lV&E6U8t&A7&cYx5l)*j(V`HFR|{-&QkGJKdHtGW zVx-Yhu}dSFaX8JpNwzU5X9f1w&JB?hWt(86BjmrPx`nUe&6vF2)Ze*_W&#ugz#T$- z*ecV2-$4P@yeqmR-oyf>?PWp}4w(Vd##J@Wx1;p8f z{X#t??T+8&3OIPV<5O^D;K4z`;sgishVx#3>9LI~Txc>F4>}LwjIpP&H(m9)N|d8S z^Xs^O*=gliJA9M_&?#uErsxd4gucjQnG=7nN4?z@KyHMM7UG{*LaU?KVF)-;8HNFX zr>NSkz(-TSNMj^$d#f+hv)A3|dWdtS{SQgnzZ?t<^bG$_!~a$HCw2LM&cYQ$#3khf zDaDK}osAvM4E6t!$^D(#K{5PO?eMo+LR#NY!NyA8`tO?mNXb7*`TtJI>Hl!^|IW!- z*`WS72LAqI{7m5gZ2zeF^NoS^&m@?cS^jSu)Sotg`Z2RH{d@aUX88p9|JgqMe4kkU zze=BC0@lxQ|CB%5)BV-!uik&vK>efjKYRXZ`_F#=III8q|KCUb=NbOvTc+4HB@e_7G|%Pa9;qy2Z_{xc>2 zAAR?hetpFiuae;O9pnd$MUnb}-EK7MMR*kAGE*;juCQhi!q0=~LJ6w{79ib@~t6!spO`mT7;l z<^HPp*J9+KYdOY$$SMB0wELU@3+w0g`oHJso-Urs!uOBk>(B00Zp^e*1+24Tcqy?W zNizP9U$M!9$*AGgxSdbBeL|Xb+zJ(mxq%SBW)`KsH z@!H8J_pvDmh$A)fT@PtmIt~QIm6QIF^J8dT>VviA;tTFw7qXQ}-g5&y-N-iYnb-P&g{{fgJRQj@gc<fr9TXL) zCTOofE`04!NCbQ`B1n}PDh%O{5|o7>WKb86X@&>h?@TXRICpyNlL2kHUmP1NA79wT|Sx1YpqV**R6|!o6n0}tH-|3nSSeGa+k6)azF#ZxCC*#oOUYo0hv_ zvZ;$#Ohu>!_jr)Fv9W3OUqGv28sB2z_&9?H^DmB>xuA_asLTa%4RA+6HpYH9Gkxm_ z63(i$x%+E_qa!g%%eY+{>*hFx8d?%BdNPZv5$^{1RO$M7vApkmmqy z|3e|y8f`V|{)cWp@1BR9=27Hi(WDE954_|;7?&xVXUY!Ct4C3g_C`zDU7HL#8-k$O z^?aBqqdVf|7RXjzu149l<$5UV9<>m`Lp+N!%2DiIcZiY_=#~Z(d<7U>rqI#!)(r2> zL;uM4G?BxkN&m?Yehelc5pmI3-}LP^@J>v9sbcyV2U}gPFSLCz+tiQT@ggGe9QJ4} z8J=S>fI)_cw1;KR6~lFKYtE`TpJT2Kx6V7zeLfvWPL0syzGEGMtK6|;D8RN34%T2{ zGe}H`4dbS`%x=dc5xW1>uFEj~EAcyqPfQhJv}ssWL4rta8Wss{TvKY=IO?JNq2wV% zBdch0$2zO0+M`l7RaL^)Db>ZR*O6?lfiQAl+E2cKnJ-L`BAmEXGu(9Hgx6Mn>YO1u z{8i*zRW%S!xjDYjUo&bjk9PR4u_JBz=B}k)*?7RV&`>nIiRci7gr)lVxs2G-qz>Z& zx4>qA_*AAMUdCWEzpJwGka6Whim@8h#lgkuw`p)^nl{kRmu1j%`g^O&z_SV1LlL`) zbq;G##vqTBmss6NoBf!ZtvesE1~$1=QcK?zH`vAVDt+pYSA9Duxtx$oK1EyN?8wGm z%kzPRX?Hbk#T$+7B~RottRX5Bb1}H`V6>Sky@pG^vCntxsaDsX=pDX#eW5glTdzgG zFrkc1Sp%XipTj3} zB}`&o?RX@gGTHR=+NfMEb_}`(#03O};BUW0xI%6*Gv0!Fr)fCw9e=(g2NC036j>Oh z1{Kx`HC^T!21d}FL|^RFahOszqJlhDYhf=^YEZC<=UK+m&)1?yOI1|Au1*gHmXSzX zVKdZMmNJlkFAp)aHC4mrB4jiKP)>(kF3G@3cXVkBB#_Q77SuRZj2AqsFvM++C2pR6 zRc_=+_S}0#@7OF|wN*5sgjAI^SJT~~kZ#9Km7EDf&Zq~j2JQp3)vPV;tVF3gCGekR zgC;B7C$SW8-7V)UqfkOfukl_K(xbspaT%v>K{;3p51z+%5T^kf8D~4u(!mIv$r(RS zSP5AyhyQ-uEvDvP6W;K<}nsplmi@WPHqwx}{Z>)AI2lPo}72os1-PwG0-3?_^$=SBP zLzRC3m;dgU8_KcaX83vb6_@4R*OWBt7}KH*pEhf**Qy>T*C>Pfy&QX8~||g z)e62-g^B*b;!>Y_3o98|c*=yM^GqfL(@_z>kM}Okb{kV4_32Vo@dK6)8dPJpb{CHs zcT&@r&1m@tP=zHwXCc`EKcVJt0 zMhS8o<#udud_wz(y8`>TeGoz zyVKJZ+Sjy^`wJBg9yr}59}DN%XJ|*i$=3C;>*zZ4&-jFXs|ZjbqHiH=T+b=C&6j9) z&F|oapDkdfwPe{nUtr-R#Vd{h-0SPo7e79l4RAb=#(ETY$4mSZ`L;d3T74<`@*UC@ z+JiJ6Xwqq+MeYHp1nB!0y4$hnZYFs51%5BZLqKsLdj zw~Pi`Cr+>uQWh4qg~H(621`M%m|RdL*v~+Kl-<4E;vU9iFPs6L{%Ai0LJuc@(8fj{ZAX>AXGg^YR0UKmIxZ&zf z*dTiLBE=T{L`f-$S2k2?Q#zWr{_QE921q_kT`cLyEnCF=eerAq`$NBQhte?X#!1m; zPU23MRNGMt+vP`F^m6U?d{v>c;c z8ING`HbtOFVU9nio!rs>VTOMZ86Q|%&D$z&Go$KrV_iU{K=xOFXFgZ9)Gm*&+ZpxG za+0KhOWS7U;v1S&Gs;ck6Jj+E&?uUWH{2ffzRU}O&C*}LdQu>qnt5GZ+PCPNOY?3u zm2|Q*0>Zj8BH`MI6NB>OObfczluYsWaK|dq)0^CGicaSZ+5lQ7W|yE(7a=@JKD0hJ zOQQQ%G&DJP!+tYOJIlDNh8$bpl|i`Sa)3$YUMGck8IQC6gI{uQ=g5KYTX95WPz$=l11 z^?F9Q{Jxh3J4Qnr%iCEm{4S8EPxS5&gSY1U0W2O>i++9>8xa(#HE^^2Q{#C)V$eqZ zJ~w(DOL7_&E6gWx!3cArM=w+v!CC}udo|Rk$1E}(^!Y}~{cV0bG5E{K4Nc<=C-T9X z0QFU;2QVV1<7MHbtQve1HqlrBs#r8LRwb$x82F?j-tqXrIG0Jypz0noOO`|D7Qz+Z z0rr7yOlL$P4w*PwkG_i#${~Ss2O~J6dGrnuf`$l=23!SoF!dLxlvN}_5>%-4h~9cR z9!fmri|UL>5J>PJ2#PTT4%1qur~CpV{YFm9cj#s({WD_+yu-J*X$R8HdT*U=G3T3^ z+Ama1ZyEWw8Mh`M#2*J`bIrf(p({IYCuCihjkPFz@O<7+N?DJW>5TBcJ^8MEp`>(F z>c3#qovkg;H4du4QdlZE&Ykr7M(cOr_|(+B>c81cwuQ`)<>4l3w5NVJ^gH?4OZ8IE zTj`S6FY>W@NRDBZ6qd%QY-MKM@(R0?xHHKW7GbWRzH+6qu(B}wNDE715PUJ;1q>_( z`gSsNOHZt^1e!{#yNfKf9CnisdF_b!EI%0KeRn@GUCzHHg)@@ZQA_B+_@?$2E}?~J z?VPMfE<;j6N-oz9YK^;G5|c%k3E&0uvmAsjWdVJGo@zB0=p7>p%EzxE=+ItEO-XH< z5K#iv75~eHUiJzA#TE2$2Z*ZRz0BLoSvW>tGbO7$teP}6T$t^CZz-ZIN0YV1wKQW! zSCTty;_e8R>^qOg${{SMN|v>|==;rxN%A}s4AnR`_gQRjik2F$wKc@?kVAY|jCCzmirzrcCs8Xc&Gn zf`c!1b}Vo3y1ofaof?p{vEU9g3Gftw+`3xiAVVvLYB^B$jvW>Ga8uvvm?T{^8k8p+ z?-dEleXeDo6s+yHz>RQ$<@X8bRkhz?QBzz^OIVGr1oy!_&`qrM%EHZtv)Ie`C%P64 zrD*GfA8*BE&h73#PyQD!yt9Ef*1=!Ganm*08 z&3{2b_%v&whA1n;DX0Au+QFc!G?G@~Xd8bF2mVze9wglZl4%1nphqA(2KHF-2!1<# z|F9V_zuo$%%@8uw#DG~P?JDK{`Ph}b@R3O_V|q_%cJi#ngvDEdkfs&7RhqTFN4Q3o zZ@qbdPS>zyP3rGp-xUJ92*C?7pw9=+n=WxWHZ3mA^j7@4-Kr*uklT*(cKPh3>FD=( z9Wz0x=j3rhRytjuo~0D&fzthq5>wq%JxELPQs-iniFzNqjrve!eeZmwN;2j2crgV% z5s`mT;$tfP{yui>IM;#$k$hC-7OgNb>KnU%RKr3ENm4AdcW68t%FQXm6r-8cVL{V^ zytP3|>o7d7TK!bIK11*kgD|xrf9m0IvRG_RjMB$NNgJu=e>-L~T-9}3#1Im|!D}qI zzPBACG{gUMpN7>rRGj#&{AMOkArT$cQ+p{2C?WkbS;D zDl7g>tRjp&GAxA(o9_IQctu7IN&9vhnCb_N1lhiAKN8(C!jv!wxGs#SB{}_m4PV6Q z7XW$}{r5h752oOD09lC?St|(X7hj2PC@wh1+6`0?4=9aC6X(GAxRH`$6XBd|7Rr*N zbjG2`JRZs>Y{ds0UUL=9#nF$q^jGy9W7q9)h~z5^%au2vPcE@)^f)@uF&t%LXM!a7ney781HzQu47Lr$e?5l?r!0>%w;w7C(%)U>aMs+v;8Y6+OAkz3M0k z7r#>ey25HQwQhi_mm(|2T!vHU?QE;n5{=zN%dOoa(DE)C{EIh(X_Or<(lMrxNJ<+sQ#d*&e2;HyZQ3GMWz#RigUl2#TA zt4rsUN|AA-K6k{)IpkC+bS=La2V|pTF?u2sm7Hm`;>j`8h=km?&vz5rM5VnAo+ts^ zCSFT%-&QKwX~f2Ezl=MJm`v3V#s{SSpF+D?fmKC%ca#iht!pT-3Y>UZ`=ypwiC(pZL`6ll(PLgFa6LXrwG@F?j#oCO*H7T%KNySX6U@R<4x5%SOw^ z68!KE-rWWeTky!D1wb49@|MUZXv!6?JPOW^t7|?lW5inassmOJBS$_ie*4%PZ)HiG zOV&Mxjfsyuy>BEiz57uqc2e)oM>+dGo%p;jD?C_kxxa6+L~&QHnHJizC*khD%Jt`~ z$1|m;O_u9-8#6J&-~%&$QRAvt4~9);k2Y~d?In-yOFf#0>80A~u0nR(N9=Ftft(_b z)=#?;6-5_=K2_GS2Js=xz~0v~lwz$E4?%qI=7_A*%Ya&|4)J=_AinEea5Lia?vUOj zv9ap2>3)q8)~&uv6(DvFm0-c*>p}tHidd)cYZh8q)_bZxi=oJ;vE+hdZSd;=);rR^ z(4$u6Ozj1Q*xw0(-{Kf#R}jW7H3ZOEpeIMi(>Z#=NDd7-IQD;cibCx3rN<_YStkIn z2d{HUK)@tK*PbJ$=PLZNlz0%EkXhB7-<26!TKQX*EbskrK-X$o4qA>`d? zL*qgbqjX|}=XW`{Ktb)+mM=~NPMww8(qn$oBf8=s$rt(yM16s?>82x8Y2dI7HdKj* z4ged%fE_BCr<&4-?SUcS;kO+69S_y$>6(ibOS(6Nk$2gHKZEifZP&H!j|5O0+ovk~w zO!kVyC90-e3Me-L_7vBmniw}E6%VO*e2|t?Fmarto%Z(w?0?C0a4kMrZW3@d4Cucwf0?MbRb z#7XXMiLJs5GaTh6#&T8eNf8MWjGQqzDxbVLNKW`j%fW&RRcW)THw-R2J=;T%-`Kt| zZ9*Ge8s$bZhbjL};6D(S=@7qH zFbE|mh`DJY}@MC^KN0Tx}^dDe7R`up328mUa2K!m{j?m#wjniPDZ- zdAo@46g^UYldQ$215dX?rz-r)le|F3;~FJM{5+2#FIlhQ|Cm;wbg;;1@V&+H*}0q@ zXWib5Z?r(W^D8tZr@qhFSYnH0e+9{PHQ6>Q%gZW&^J5&=6oN+}J+GxNx_LX1Z6;Bkd}^TC%>MlVG=T zteD=aj{`EM8PjUQTC=T{LjwgOr`Dq(#6*H8j3uJDiw2J+Pqud>JuVZe$J;!c68$3K@G84R9GNYF|w=}Z22(;Cl&7x4l7 zR6F^{iRO6r5EkJBURk;W2Kd%PtLN{at4E znvzx{GU62iG*OKaYfCv*bQz~_fxgKp{0U%^HGmb$7Ivn0umxGSm>ruXp9GsJPjuFH zF?V~D%4q!u?UOMcuiwtOF{AJcD7^fdux>fx3O!O6Qg;Ryh>V&R6?K!HcAWp!GznX-By;jIaHQc=Mc%HMjK!;b*hb&G0%!8zus0@8^Ps?gzQs&`TJ%iGn&^B^11=*l% ziS~RV%4}Y1KZ45u19cK!MDai&hCZ(S`Ba!;ZW91GN(%V>gvCv9K2ZiEc3UP}g0yI9 z2?=%xGaK}(00lBn9R$aP99d`SObHp-Y2$nOchg`&J54hlLX43?CaYD#Ad&X4Q21Sr zkPX?X8g=zj@^HF)NbVx7G~WAV-~UzEbw)L{bz4B`B~-y1fe3=`{fyemR-PCOx=(CRdv|^8Ba{%nJs8{_JXDi(JbW<%8;)S~ z|6Zf2shE{+23~8$Pbdaom7%>hsMC9i0X5Y5ps&|%ca*&Kv)QF^Tgy1xP?gf4fvhrxJ%&*!ke$5kZUi-{Npa= zh3bU0+2Kd!H~g|rZFr7JxE+4()ZnE~4@}wT^m1ZQazj?;Uex#V?8A%98)u>zV-gvP7Ihet7z0$!Ul-|r9dR1tG z^zEV*lW*`Njz9&0f=S0GW=VOgy34MyN|sf(bZ%blFHXx-JAQf+?o$6?`h@J06yMt9N-%FM1W$9~We)#N?h~5YfJ@ zIq07wz?m5%XWi(rc;iRui=%$tC#SgD-Rs>yZl$Q1{$(LLzDu1*&p#bk-haigJL=Zi zs)x~IwzZS5iri;Ei6p(ne`-+%lnwY*7JNZnA}e{%ErvR`1Xoo(^&tgho=nGBId4WM zSg6j{Jh_-%IUYj@6ufTlsPZhe>B4gE^SnB-z}TS2L7F7+P4*b8ON)Ocep_Wb0;j6L z&?yq#X)e&`I~j$;lgnkS3MCsu^7NQmmTW$ve%HAKS1XI#!_#I(JZ;9Dc~V|?wRCA?Oed4Cb|oW@}mbF-eV?vF}%q z>JSgB%rUoe8;MdU0rOGckgtAU)pj|(HKs39`94JM#-B<(ma3DnoWG2NT1|vWlZAco zhOCM#YdHhrh4nt?tOvgieMeC?J6g!|_kWI3@N^>{hq``V=B4}9fqRH zKEHo5PdlPN=#r-8UF$O2hw5pBCK9+-amVTQ8Q!BLuj1V-m7}^@ljijbPlg^UJF(i> zWJPvXUcu&jEgUP=D4rF*>5m>lA>>=Tg(dFvQDZa-rvV^JxfoxMXR|cd%Mp!OX$iMm zHv$q_qHFGhomaG--nbGmc(22HN$15oa^T?@12A>!eSYP@gj7c)-OXD6x4J2fg{FyP z{7F2M;^X&noRo_y+nuI2w!;Fk%aa3f+cv>Eg7d^r!{={Ek2K8LY|0!lrgRl7_*JOX z`Awg##&&$K6sSKHIDqaZRZTbd6uAD4%{&vR;nty9E;#FvQnx-=!K#|A+6To-bXvIe z8G?fzll^bBNIsCG;O>f?$in%qgEqu*~YDpDe z1Mb`_`Is&CoycZeX7hy?tpL3F*N8!J;p<7V+T$5t4@_$RS!5Z)&0S}E{7GC?TP_19 zR*Xjune%cw=fP7KaTefx?)iYjO8!#(!e?R#;9_aqjQcxO?htNJKjeh84Bbt>jtdXH zn6mx-XZuf5A{hoIf&&yBTE1#7#SWI^XE*d739AMq)_{K6G|072Uh(_^2Y2x@FTXz# z@6-Y&sOx@@J>RD7*%;p18q%IORj>S_X|`VETxGWI-35MP3Pd(7!_6b&eE;Fz6XXIR zHS9J1)5a(BWg8bNP9ETd-D>D|qZqB{jN=kXBaS3!l~demU;i zoSPfZTFw zUx==A{`4Gm>K|~#mPeHX0!9r6WzERv9Cf)S7*3h0X@ezK;$lk{i$NIGdB+q4I3(Fo zFkQK5Cz-vFDACNQ68gR?oQpG^Ult&#@U!6RhYCTL-07W%u8N zMS?jMMH?H5@1Ab8&j)=8eD@r0xSAr%O?e;JYP%so*S1qOD_hCh=B!g~kSN9XRsaH* zdng#ITLvw9Y?c_EX&_%KpY{XXfqnY;iwt+wMwwYhZTi10N7!RpPZ4Zps{DPY{zkJ^t?@Fq%zltW zq)80IO-?J+$>{jhVsYn=O&zPtkXKXTAgNG`>TQg=q=?Y6&|8PVb*jCyxQOu6xB!l_cbF(e?q%W3*e1oqN|{C3w4CXyOzAI-rUuGg zYj(cT@lXbg^P=Z_OK}69Q$rU}6%KPfLa%i~4bqJ#`J3OY^=!J23o#G+1bkv8r@Km~ zH35y+4K%Xvu`4cP;;tMW5ui5X9p1w}V{JR6jp`pHw|laGH=GL$ShXBjXz!&ca15ix zv|hO$3-C-xD167vVJ8=1P|RywFvf4}(1^mMA7LrLkE}Z|zRPkniqwose!(bO-IUu5 zv)bj@^7tXUlvTAP*5QP|f8!JYnN^FM&RFDVSflI$Qma&4OandEmEU z;^IZ*4;A5_o=!_jLd3?TX#c(OhJ?n}@#^#Hc>yXw(^I)0N^cl3jNJVCZJLy@!r5`} zQ!t@Lqqtx;P%rAXW3#KU z;!~@Ou8)}SOkMKrc$&Msjt^>h&cz^entbB4?y1AsbNp5QP5~S&LNVi7v?} z9o@@kypD&PEJDtNB-6#ysWHA`^57Z|42hvj4P})J5dbmfFl$LPv4j-S#nQ>ri_rVB z<#3K4Yucg{q*pi;ZcQhv#ij)aF%03MGpGNH-ikquVUb@8*n|pMr&nM=lk510hgR<& zdj7Ue>J4W+v4w)@tIje}-_0!Rogq&VT9Vg|@c!9LBGc!5gQ}NFgckN%O1Yn3_i{`v z<>jb{@9aj(a(6AIo_0T{y)%y@FuK@v&DRo9R|~Z7<1Cven=5|C?Q+eL0SjcnG#T)n z9RH0RKSz$AA)B*4+uSsNPKoCD1PktazS=uS?wuyf{tO<^pZ)%=U$YFT(FknF0XCEa zgRUUzDu4}zz_It7Kg|(!v7dhe7Ib9@e-i9}5sLRn#xxc*0`^-SNaIU`L3^l_2Ufwu z2`ByEfjtuYuK{<=WfOCd71qn!8Gj7~0V_aY3UClwN{8s|<^+Nu&p?!*Xlalc5#vSh z2bt=gIYr}NV|@w#hT0Rp{t9L4h4pd9UjKLGw}@3rR|N`&pui{y7z(BFwUM@9@JZVJ zujg+Kr_{gDZ(-v_klpXB_ej%wEB&I7I}_ZnpkEt24^lMs!aET!)8vgb-uf?*>?toS zhJdHp|B>bXvS~ZirHLOwN_&aXW}U-3?b&Rv%6GZ;;YnJ~RhyZBrwaf6={^ z{x`GR*9(iIQQwtlI)VRQAZ0k577qvd2ZO`mC|XK;7wFo5FbE8(Oj}?-hCrcc;rC%Q zV~?i452MYcQQZ$>C>p!{0ER#*(~fK3T$mDcPe!m0`^Vak!N5x3Kh{7(_IT|3=0f0* zy|O!qAr9^X0*CHtq4)bCP_RGZA;HK$vH#=zkWj=Q>muQZKh7D6K>g{5+|z{b&jkgB zAIupBh9VF8!N3UQ!SjQGVSD0@eer01e>`6pt@ID>jrKhDDsTT>B?OG7lsJH)PzNzu zk^o-DQ6&7J*etwqyM zoX6t{G)2QdEo5*FhX>Iz*lQ;PUC>348Un0@fP$4_ILsxCG90B0hC0C!SeoL6_QTOi gUW4ubclk$J;!U9aDgA0fI4vs#n}oz^lQV4p1H;F&zW@LL diff --git a/examples/gjf/molecular_dynamics_results/argon_potential_energy_fluctuations.pdf b/examples/gjf/molecular_dynamics_results/argon_potential_energy_fluctuations.pdf deleted file mode 100644 index 833bc8d468cfa78d993e226dd964bc2938a819cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54630 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 diff --git a/examples/gjf/molecular_dynamics_results/guaiacol_kinetic_energy.pdf b/examples/gjf/molecular_dynamics_results/guaiacol_kinetic_energy.pdf deleted file mode 100644 index 364313fdd3cf7268b2471b33097b43e8e7ede54f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43676 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 W#E;UCLkLA20T?zjvy7@N_WuF7YQtmz diff --git a/examples/gjf/molecular_dynamics_results/guaiacol_kinetic_energy_fluctuations.pdf b/examples/gjf/molecular_dynamics_results/guaiacol_kinetic_energy_fluctuations.pdf deleted file mode 100644 index e2ddfc7ea50f2e480f5a30da638f8f461b87d8af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43786 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 diff --git a/examples/gjf/molecular_dynamics_results/guaiacol_potential_energy_fluctuations.pdf b/examples/gjf/molecular_dynamics_results/guaiacol_potential_energy_fluctuations.pdf deleted file mode 100644 index a9d9badf72899b7ea1ebbe931a4855435656e36b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43267 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�!B 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 M05@(ZX)6Q%AFAg=K>z>% diff --git a/src/KOKKOS/fix_langevin_kokkos.cpp b/src/KOKKOS/fix_langevin_kokkos.cpp index 651f790a25..8ec51ffa71 100644 --- a/src/KOKKOS/fix_langevin_kokkos.cpp +++ b/src/KOKKOS/fix_langevin_kokkos.cpp @@ -11,20 +11,23 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "fix_langevin_kokkos.h" #include +#include +#include +#include "fix_langevin_kokkos.h" #include "atom_masks.h" #include "atom_kokkos.h" #include "force.h" -#include "group.h" #include "update.h" +#include "respa.h" #include "error.h" #include "memory_kokkos.h" +#include "group.h" +#include "random_mars.h" #include "compute.h" #include "comm.h" #include "modify.h" #include "input.h" -#include "region.h" #include "variable.h" using namespace LAMMPS_NS; @@ -61,7 +64,6 @@ FixLangevinKokkos::FixLangevinKokkos(LAMMPS *lmp, int narg, char **a k_ratio.template modify(); if(gjfflag){ - nvalues = 3; grow_arrays(atomKK->nmax); atom->add_callback(0); // initialize franprev to zero @@ -69,8 +71,12 @@ FixLangevinKokkos::FixLangevinKokkos(LAMMPS *lmp, int narg, char **a franprev[i][0] = 0.0; franprev[i][1] = 0.0; franprev[i][2] = 0.0; + lv[i][0] = 0.0; + lv[i][1] = 0.0; + lv[i][2] = 0.0; } k_franprev.template modify(); + k_lv.template modify(); } if(zeroflag){ k_fsumall = tdual_double_1d_3n("langevin:fsumall"); @@ -94,6 +100,7 @@ FixLangevinKokkos::~FixLangevinKokkos() memoryKK->destroy_kokkos(k_ratio,ratio); memoryKK->destroy_kokkos(k_flangevin,flangevin); if(gjfflag) memoryKK->destroy_kokkos(k_franprev,franprev); + if(gjfflag) memoryKK->destroy_kokkos(k_lv,lv); memoryKK->destroy_kokkos(k_tforce,tforce); } @@ -107,6 +114,11 @@ void FixLangevinKokkos::init() error->all(FLERR,"Fix langevin omega is not yet implemented with kokkos"); if(ascale) error->all(FLERR,"Fix langevin angmom is not yet implemented with kokkos"); + if(gjfflag && tbiasflag) + error->all(FLERR,"Fix langevin gjf + tbias is not yet implemented with kokkos"); + if(gjfflag && tbiasflag) + error->warning(FLERR,"Fix langevin gjf + kokkos is not implemented with random gaussians," + " this may cause errors in kinetic fluctuations"); // prefactors are modified in the init k_gfactor1.template modify(); @@ -121,6 +133,42 @@ void FixLangevinKokkos::grow_arrays(int nmax) memoryKK->grow_kokkos(k_franprev,franprev,nmax,3,"langevin:franprev"); d_franprev = k_franprev.template view(); h_franprev = k_franprev.template view(); + memoryKK->grow_kokkos(k_lv,lv,nmax,3,"langevin:lv"); + d_lv = k_lv.template view(); + h_lv = k_lv.template view(); +} + +/* ---------------------------------------------------------------------- + allow for both per-type and per-atom mass +------------------------------------------------------------------------- */ + +template +void FixLangevinKokkos::initial_integrate(int vflag) +{ + atomKK->sync(execution_space,datamask_read); + atomKK->modified(execution_space,datamask_modify); + + v = atomKK->k_v.view(); + f = atomKK->k_f.view(); + int nlocal = atomKK->nlocal; + if (igroup == atomKK->firstgroup) nlocal = atomKK->nfirst; + + FixLangevinKokkosInitialIntegrateFunctor functor(this); + Kokkos::parallel_for(nlocal,functor); +} + +template +KOKKOS_INLINE_FUNCTION +void FixLangevinKokkos::initial_integrate_item(int i) const +{ + if (mask[i] & groupbit) { + f(i,0) /= gjfa; + f(i,1) /= gjfa; + f(i,2) /= gjfa; + v(i,0) = d_lv(i,0); + v(i,1) = d_lv(i,1); + v(i,2) = d_lv(i,2); + } } /* ---------------------------------------------------------------------- */ @@ -140,6 +188,7 @@ void FixLangevinKokkos::post_force(int vflag) k_gfactor2.template sync(); k_ratio.template sync(); if(gjfflag) k_franprev.template sync(); + if(gjfflag) k_lv.template sync(); boltz = force->boltz; dt = update->dt; @@ -177,7 +226,7 @@ void FixLangevinKokkos::post_force(int vflag) atomKK->sync(temperature->execution_space,temperature->datamask_read); temperature->compute_scalar(); temperature->remove_bias_all(); // modifies velocities - // if temeprature compute is kokkosized host-devcie comm won't be needed + // if temeprature compute is kokkosized host-device comm won't be needed atomKK->modified(temperature->execution_space,temperature->datamask_modify); atomKK->sync(execution_space,temperature->datamask_modify); } @@ -481,6 +530,7 @@ void FixLangevinKokkos::post_force(int vflag) // set modify flags for the views modified in post_force functor if (gjfflag) k_franprev.template modify(); + if (gjfflag) k_lv.template modify(); if (tallyflag) k_flangevin.template modify(); // set total force to zero @@ -550,6 +600,10 @@ FSUM FixLangevinKokkos::post_force_item(int i) const } if (Tp_GJF) { + d_lv(i,0) = gjfsib*v(i,0); + d_lv(i,1) = gjfsib*v(i,1); + d_lv(i,2) = gjfsib*v(i,2); + fswap = 0.5*(fran[0]+d_franprev(i,0)); d_franprev(i,0) = fran[0]; fran[0] = fswap; @@ -560,15 +614,15 @@ FSUM FixLangevinKokkos::post_force_item(int i) const d_franprev(i,2) = fran[2]; fran[2] = fswap; - fdrag[0] *= gjffac; - fdrag[1] *= gjffac; - fdrag[2] *= gjffac; - fran[0] *= gjffac; - fran[1] *= gjffac; - fran[2] *= gjffac; - f(i,0) *= gjffac; - f(i,1) *= gjffac; - f(i,2) *= gjffac; + fdrag[0] *= gjfa; + fdrag[1] *= gjfa; + fdrag[2] *= gjfa; + fran[0] *= gjfa; + fran[1] *= gjfa; + fran[2] *= gjfa; + f(i,0) *= gjfa; + f(i,1) *= gjfa; + f(i,2) *= gjfa; } f(i,0) += fdrag[0] + fran[0]; @@ -576,6 +630,17 @@ FSUM FixLangevinKokkos::post_force_item(int i) const f(i,2) += fdrag[2] + fran[2]; if (Tp_TALLY) { + if (Tp_GJF){ + fdrag[0] = gamma1*d_lv(i,0)/gjfsib/gjfsib; + fdrag[1] = gamma1*d_lv(i,1)/gjfsib/gjfsib; + fdrag[2] = gamma1*d_lv(i,2)/gjfsib/gjfsib; + fswap = (2*fran[0]/gjfa - d_franprev(i,0))/gjfsib; + fran[0] = fswap; + fswap = (2*fran[1]/gjfa - d_franprev(i,1))/gjfsib; + fran[1] = fswap; + fswap = (2*fran[2]/gjfa - d_franprev(i,2))/gjfsib; + fran[2] = fswap; + } d_flangevin(i,0) = fdrag[0] + fran[0]; d_flangevin(i,1) = fdrag[1] + fran[1]; d_flangevin(i,2) = fdrag[2] + fran[2]; @@ -719,9 +784,10 @@ double FixLangevinKokkos::compute_energy_item(int i) const template void FixLangevinKokkos::end_of_step() { - if (!tallyflag) return; + if (!tallyflag && !gjfflag) return; v = atomKK->k_v.template view(); + f = atomKK->k_f.template view(); mask = atomKK->k_mask.template view(); atomKK->sync(execution_space,V_MASK | MASK_MASK); @@ -733,9 +799,81 @@ void FixLangevinKokkos::end_of_step() FixLangevinKokkosTallyEnergyFunctor tally_functor(this); Kokkos::parallel_reduce(nlocal,tally_functor,energy_onestep); + if (gjfflag){ + if (rmass.data()) { + FixLangevinKokkosEndOfStepFunctor functor(this); + Kokkos::parallel_for(nlocal,functor); + } else { + mass = atomKK->k_mass.view(); + FixLangevinKokkosEndOfStepFunctor functor(this); + Kokkos::parallel_for(nlocal,functor); + } + } + energy += energy_onestep*update->dt; } +template +KOKKOS_INLINE_FUNCTION +void FixLangevinKokkos::end_of_step_item(int i) const { + double tmp[3]; + if (mask[i] & groupbit) { + const double dtfm = force->ftm2v * 0.5 * dt / mass[type[i]]; + tmp[0] = v(i,0); + tmp[1] = v(i,1); + tmp[2] = v(i,2); + if (!fsflag){ + v(i,0) = d_lv(i,0); + v(i,1) = d_lv(i,1); + v(i,2) = d_lv(i,2); + } else { + v(i,0) = 0.5 * gjfsib * gjfsib * (v(i,0) + dtfm * f(i,0) / gjfa) + + dtfm * 0.5 * (gjfsib * d_flangevin(i,0) - d_franprev(i,0)) + + (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,0); + v(i,1) = 0.5 * gjfsib * gjfsib * (v(i,1) + dtfm * f(i,1) / gjfa) + + dtfm * 0.5 * (gjfsib * d_flangevin(i,0) - d_franprev(i,1)) + + (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,1); + v(i,2) = 0.5 * gjfsib * gjfsib * (v(i,2) + dtfm * f(i,2) / gjfa) + + dtfm * 0.5 * (gjfsib * d_flangevin(i,0) - d_franprev(i,2)) + + (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,2); + } + d_lv(i,0) = tmp[0]; + d_lv(i,1) = tmp[1]; + d_lv(i,2) = tmp[2]; + } +} + +template +KOKKOS_INLINE_FUNCTION +void FixLangevinKokkos::end_of_step_rmass_item(int i) const +{ + double tmp[3]; + if (mask[i] & groupbit) { + const double dtfm = force->ftm2v * 0.5 * dt / rmass[i]; + tmp[0] = v(i,0); + tmp[1] = v(i,1); + tmp[2] = v(i,2); + if (!fsflag){ + v(i,0) = d_lv(i,0); + v(i,1) = d_lv(i,1); + v(i,2) = d_lv(i,2); + } else { + v(i,0) = 0.5 * gjfsib * gjfsib * (v(i,0) + dtfm * f(i,0) / gjfa) + + dtfm * 0.5 * (gjfsib * d_flangevin(i,0) - d_franprev(i,0)) + + (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,0); + v(i,1) = 0.5 * gjfsib * gjfsib * (v(i,1) + dtfm * f(i,1) / gjfa) + + dtfm * 0.5 * (gjfsib * d_flangevin(i,1) - d_franprev(i,1)) + + (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,1); + v(i,2) = 0.5 * gjfsib * gjfsib * (v(i,2) + dtfm * f(i,2) / gjfa) + + dtfm * 0.5 * (gjfsib * d_flangevin(i,2) - d_franprev(i,2)) + + (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,2); + } + d_lv(i,0) = tmp[0]; + d_lv(i,1) = tmp[1]; + d_lv(i,2) = tmp[2]; + } +} + /* ---------------------------------------------------------------------- copy values within local atom-based array ------------------------------------------------------------------------- */ @@ -743,10 +881,15 @@ void FixLangevinKokkos::end_of_step() template void FixLangevinKokkos::copy_arrays(int i, int j, int delflag) { - for (int m = 0; m < nvalues; m++) - h_franprev(j,m) = h_franprev(i,m); + h_franprev(j,0) = h_franprev(i,0); + h_franprev(j,1) = h_franprev(i,1); + h_franprev(j,2) = h_franprev(i,2); + h_lv(j,0) = h_lv(i,0); + h_lv(j,1) = h_lv(i,1); + h_lv(j,2) = h_lv(i,2); k_franprev.template modify(); + k_lv.template modify(); } @@ -765,6 +908,7 @@ void FixLangevinKokkos::cleanup_copy() tforce = NULL; gjfflag = 0; franprev = NULL; + lv = NULL; id = style = NULL; vatom = NULL; } diff --git a/src/KOKKOS/fix_langevin_kokkos.h b/src/KOKKOS/fix_langevin_kokkos.h index 140fea81d6..4d27b34a7e 100644 --- a/src/KOKKOS/fix_langevin_kokkos.h +++ b/src/KOKKOS/fix_langevin_kokkos.h @@ -56,6 +56,9 @@ namespace LAMMPS_NS { template class FixLangevinKokkos; + template + class FixLangevinKokkosInitialIntegrateFunctor; + template class FixLangevinKokkosPostForceFunctor; @@ -72,6 +75,7 @@ namespace LAMMPS_NS { void cleanup_copy(); void init(); + void initial_integrate(int); void post_force(int); void reset_dt(); void grow_arrays(int); @@ -79,6 +83,12 @@ namespace LAMMPS_NS { double compute_scalar(); void end_of_step(); + KOKKOS_INLINE_FUNCTION + void initial_integrate_item(int) const; + + KOKKOS_INLINE_FUNCTION + void initial_integrate_rmass_item(int) const; + template KOKKOS_INLINE_FUNCTION @@ -90,14 +100,25 @@ namespace LAMMPS_NS { KOKKOS_INLINE_FUNCTION double compute_energy_item(int) const; + KOKKOS_INLINE_FUNCTION + void end_of_step_item(int) const; + + KOKKOS_INLINE_FUNCTION + void end_of_step_rmass_item(int) const; + private: class CommKokkos *commKK; typename ArrayTypes::t_float_1d rmass; + typename ArrayTypes::t_float_1d mass; typename ArrayTypes::tdual_double_2d k_franprev; typename ArrayTypes::t_double_2d d_franprev; HAT::t_double_2d h_franprev; + typename ArrayTypes::tdual_double_2d k_lv; + typename ArrayTypes::t_double_2d d_lv; + HAT::t_double_2d h_lv; + typename ArrayTypes::tdual_double_2d k_flangevin; typename ArrayTypes::t_double_2d d_flangevin; HAT::t_double_2d h_flangevin; @@ -130,6 +151,21 @@ namespace LAMMPS_NS { }; + template + struct FixLangevinKokkosInitialIntegrateFunctor { + typedef DeviceType device_type ; + FixLangevinKokkos c; + + FixLangevinKokkosInitialIntegrateFunctor(FixLangevinKokkos* c_ptr): + c(*c_ptr) {c.cleanup_copy();}; + + KOKKOS_INLINE_FUNCTION + void operator()(const int i) const { + c.initial_integrate_item(i); + } + }; + + template struct FixLangevinKokkosPostForceFunctor { @@ -207,6 +243,21 @@ namespace LAMMPS_NS { update += source; } }; + + template + struct FixLangevinKokkosEndOfStepFunctor { + typedef DeviceType device_type ; + FixLangevinKokkos c; + + FixLangevinKokkosEndOfStepFunctor(FixLangevinKokkos* c_ptr): + c(*c_ptr) {c.cleanup_copy();} + + KOKKOS_INLINE_FUNCTION + void operator()(const int i) const { + if (RMass) c.end_of_step_rmass_item(i); + else c.end_of_step_item(i); + } + }; } #endif diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 2ed9d9477f..62e31f567a 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -223,7 +223,7 @@ void FixLangevin::init() { if (gjfflag){ if (t_period*2 == update->dt) - error->all(FLERR,"Fix langevin gjf cannot have t_period equal to dt/2 at the start"); + error->all(FLERR,"Fix langevin gjf cannot have t_period equal to dt/2"); // warn if any integrate fix comes after this one int before = 1; @@ -440,124 +440,124 @@ void FixLangevin::post_force(int /*vflag*/) if (zeroflag) post_force_templated<1,1,1,1,1,1>(); else post_force_templated<1,1,1,1,1,0>(); else - if (zeroflag) post_force_templated<1,1,1,1,0,1>(); - else post_force_templated<1,1,1,1,0,0>(); + if (zeroflag) post_force_templated<1,1,1,1,0,1>(); + else post_force_templated<1,1,1,1,0,0>(); else - if (rmass) - if (zeroflag) post_force_templated<1,1,1,0,1,1>(); - else post_force_templated<1,1,1,0,1,0>(); + if (rmass) + if (zeroflag) post_force_templated<1,1,1,0,1,1>(); + else post_force_templated<1,1,1,0,1,0>(); + else + if (zeroflag) post_force_templated<1,1,1,0,0,1>(); + else post_force_templated<1,1,1,0,0,0>(); + else + if (tbiasflag == BIAS) + if (rmass) + if (zeroflag) post_force_templated<1,1,0,1,1,1>(); + else post_force_templated<1,1,0,1,1,0>(); + else + if (zeroflag) post_force_templated<1,1,0,1,0,1>(); + else post_force_templated<1,1,0,1,0,0>(); else - if (zeroflag) post_force_templated<1,1,1,0,0,1>(); - else post_force_templated<1,1,1,0,0,0>(); - else - if (tbiasflag == BIAS) - if (rmass) - if (zeroflag) post_force_templated<1,1,0,1,1,1>(); - else post_force_templated<1,1,0,1,1,0>(); + if (rmass) + if (zeroflag) post_force_templated<1,1,0,0,1,1>(); + else post_force_templated<1,1,0,0,1,0>(); + else + if (zeroflag) post_force_templated<1,1,0,0,0,1>(); + else post_force_templated<1,1,0,0,0,0>(); + else + if (tallyflag) + if (tbiasflag == BIAS) + if (rmass) + if (zeroflag) post_force_templated<1,0,1,1,1,1>(); + else post_force_templated<1,0,1,1,1,0>(); + else + if (zeroflag) post_force_templated<1,0,1,1,0,1>(); + else post_force_templated<1,0,1,1,0,0>(); else - if (zeroflag) post_force_templated<1,1,0,1,0,1>(); - else post_force_templated<1,1,0,1,0,0>(); + if (rmass) + if (zeroflag) post_force_templated<1,0,1,0,1,1>(); + else post_force_templated<1,0,1,0,1,0>(); + else + if (zeroflag) post_force_templated<1,0,1,0,0,1>(); + else post_force_templated<1,0,1,0,0,0>(); else - if (rmass) - if (zeroflag) post_force_templated<1,1,0,0,1,1>(); - else post_force_templated<1,1,0,0,1,0>(); - else - if (zeroflag) post_force_templated<1,1,0,0,0,1>(); - else post_force_templated<1,1,0,0,0,0>(); - else - if (tallyflag || fsflag) - if (tbiasflag == BIAS) - if (rmass) - if (zeroflag) post_force_templated<1,0,1,1,1,1>(); - else post_force_templated<1,0,1,1,1,0>(); + if (tbiasflag == BIAS) + if (rmass) + if (zeroflag) post_force_templated<1,0,0,1,1,1>(); + else post_force_templated<1,0,0,1,1,0>(); + else + if (zeroflag) post_force_templated<1,0,0,1,0,1>(); + else post_force_templated<1,0,0,1,0,0>(); else - if (zeroflag) post_force_templated<1,0,1,1,0,1>(); - else post_force_templated<1,0,1,1,0,0>(); - else - if (rmass) - if (zeroflag) post_force_templated<1,0,1,0,1,1>(); - else post_force_templated<1,0,1,0,1,0>(); - else - if (zeroflag) post_force_templated<1,0,1,0,0,1>(); - else post_force_templated<1,0,1,0,0,0>(); - else - if (tbiasflag == BIAS) - if (rmass) - if (zeroflag) post_force_templated<1,0,0,1,1,1>(); - else post_force_templated<1,0,0,1,1,0>(); - else - if (zeroflag) post_force_templated<1,0,0,1,0,1>(); - else post_force_templated<1,0,0,1,0,0>(); - else - if (rmass) - if (zeroflag) post_force_templated<1,0,0,0,1,1>(); - else post_force_templated<1,0,0,0,1,0>(); - else - if (zeroflag) post_force_templated<1,0,0,0,0,1>(); - else post_force_templated<1,0,0,0,0,0>(); + if (rmass) + if (zeroflag) post_force_templated<1,0,0,0,1,1>(); + else post_force_templated<1,0,0,0,1,0>(); + else + if (zeroflag) post_force_templated<1,0,0,0,0,1>(); + else post_force_templated<1,0,0,0,0,0>(); else - if (gjfflag) - if (tallyflag || fsflag) - if (tbiasflag == BIAS) - if (rmass) - if (zeroflag) post_force_templated<0,1,1,1,1,1>(); - else post_force_templated<0,1,1,1,1,0>(); + if (gjfflag) + if (tallyflag) + if (tbiasflag == BIAS) + if (rmass) + if (zeroflag) post_force_templated<0,1,1,1,1,1>(); + else post_force_templated<0,1,1,1,1,0>(); + else + if (zeroflag) post_force_templated<0,1,1,1,0,1>(); + else post_force_templated<0,1,1,1,0,0>(); else - if (zeroflag) post_force_templated<0,1,1,1,0,1>(); - else post_force_templated<0,1,1,1,0,0>(); + if (rmass) + if (zeroflag) post_force_templated<0,1,1,0,1,1>(); + else post_force_templated<0,1,1,0,1,0>(); + else + if (zeroflag) post_force_templated<0,1,1,0,0,1>(); + else post_force_templated<0,1,1,0,0,0>(); else - if (rmass) - if (zeroflag) post_force_templated<0,1,1,0,1,1>(); - else post_force_templated<0,1,1,0,1,0>(); + if (tbiasflag == BIAS) + if (rmass) + if (zeroflag) post_force_templated<0,1,0,1,1,1>(); + else post_force_templated<0,1,0,1,1,0>(); + else + if (zeroflag) post_force_templated<0,1,0,1,0,1>(); + else post_force_templated<0,1,0,1,0,0>(); + else + if (rmass) + if (zeroflag) post_force_templated<0,1,0,0,1,1>(); + else post_force_templated<0,1,0,0,1,0>(); + else + if (zeroflag) post_force_templated<0,1,0,0,0,1>(); + else post_force_templated<0,1,0,0,0,0>(); + else + if (tallyflag) + if (tbiasflag == BIAS) + if (rmass) + if (zeroflag) post_force_templated<0,0,1,1,1,1>(); + else post_force_templated<0,0,1,1,1,0>(); + else + if (zeroflag) post_force_templated<0,0,1,1,0,1>(); + else post_force_templated<0,0,1,1,0,0>(); + else + if (rmass) + if (zeroflag) post_force_templated<0,0,1,0,1,1>(); + else post_force_templated<0,0,1,0,1,0>(); + else + if (zeroflag) post_force_templated<0,0,1,0,0,1>(); + else post_force_templated<0,0,1,0,0,0>(); else - if (zeroflag) post_force_templated<0,1,1,0,0,1>(); - else post_force_templated<0,1,1,0,0,0>(); - else - if (tbiasflag == BIAS) - if (rmass) - if (zeroflag) post_force_templated<0,1,0,1,1,1>(); - else post_force_templated<0,1,0,1,1,0>(); - else - if (zeroflag) post_force_templated<0,1,0,1,0,1>(); - else post_force_templated<0,1,0,1,0,0>(); - else - if (rmass) - if (zeroflag) post_force_templated<0,1,0,0,1,1>(); - else post_force_templated<0,1,0,0,1,0>(); - else - if (zeroflag) post_force_templated<0,1,0,0,0,1>(); - else post_force_templated<0,1,0,0,0,0>(); - else - if (tallyflag || fsflag) - if (tbiasflag == BIAS) - if (rmass) - if (zeroflag) post_force_templated<0,0,1,1,1,1>(); - else post_force_templated<0,0,1,1,1,0>(); - else - if (zeroflag) post_force_templated<0,0,1,1,0,1>(); - else post_force_templated<0,0,1,1,0,0>(); - else - if (rmass) - if (zeroflag) post_force_templated<0,0,1,0,1,1>(); - else post_force_templated<0,0,1,0,1,0>(); - else - if (zeroflag) post_force_templated<0,0,1,0,0,1>(); - else post_force_templated<0,0,1,0,0,0>(); - else - if (tbiasflag == BIAS) - if (rmass) - if (zeroflag) post_force_templated<0,0,0,1,1,1>(); - else post_force_templated<0,0,0,1,1,0>(); - else - if (zeroflag) post_force_templated<0,0,0,1,0,1>(); - else post_force_templated<0,0,0,1,0,0>(); - else - if (rmass) - if (zeroflag) post_force_templated<0,0,0,0,1,1>(); - else post_force_templated<0,0,0,0,1,0>(); - else - if (zeroflag) post_force_templated<0,0,0,0,0,1>(); - else post_force_templated<0,0,0,0,0,0>(); + if (tbiasflag == BIAS) + if (rmass) + if (zeroflag) post_force_templated<0,0,0,1,1,1>(); + else post_force_templated<0,0,0,1,1,0>(); + else + if (zeroflag) post_force_templated<0,0,0,1,0,1>(); + else post_force_templated<0,0,0,1,0,0>(); + else + if (rmass) + if (zeroflag) post_force_templated<0,0,0,0,1,1>(); + else post_force_templated<0,0,0,0,1,0>(); + else + if (zeroflag) post_force_templated<0,0,0,0,0,1>(); + else post_force_templated<0,0,0,0,0,0>(); } /* ---------------------------------------------------------------------- */ @@ -572,7 +572,7 @@ void FixLangevin::post_force_respa(int vflag, int ilevel, int /*iloop*/) ------------------------------------------------------------------------- */ template < int Tp_TSTYLEATOM, int Tp_GJF, int Tp_TALLY, - int Tp_BIAS, int Tp_RMASS, int Tp_ZERO > + int Tp_BIAS, int Tp_RMASS, int Tp_ZERO > void FixLangevin::post_force_templated() { double gamma1,gamma2; @@ -802,9 +802,9 @@ void FixLangevin::compute_target() input->variable->compute_atom(tvar,igroup,tforce,1,0); for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) - if (tforce[i] < 0.0) - error->one(FLERR, - "Fix langevin variable returned negative temperature"); + if (tforce[i] < 0.0) + error->one(FLERR, + "Fix langevin variable returned negative temperature"); } modify->addstep_compute(update->ntimestep + 1); } @@ -1001,8 +1001,8 @@ void FixLangevin::reset_dt() if (atom->mass) { for (int i = 1; i <= atom->ntypes; i++) { gfactor2[i] = sqrt(atom->mass[i]) * - sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / - force->ftm2v; + sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / + force->ftm2v; gfactor2[i] *= 1.0/sqrt(ratio[i]); } } diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 2ef1489273..3ffccb3be1 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -2,10 +2,12 @@ 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. ------------------------------------------------------------------------- */ @@ -22,63 +24,63 @@ FixStyle(langevin,FixLangevin) namespace LAMMPS_NS { - class FixLangevin : public Fix { - public: - FixLangevin(class LAMMPS *, int, char **); - virtual ~FixLangevin(); - int setmask(); - void init(); - void setup(int); - virtual void initial_integrate(int); - virtual void post_force(int); - void post_force_respa(int, int, int); - virtual void end_of_step(); - void reset_target(double); - void reset_dt(); - int modify_param(int, char **); - virtual double compute_scalar(); - double memory_usage(); - virtual void *extract(const char *, int &); - void grow_arrays(int); - void copy_arrays(int, int, int); - int pack_exchange(int, double *); - int unpack_exchange(int, double *); +class FixLangevin : public Fix { + public: + FixLangevin(class LAMMPS *, int, char **); + virtual ~FixLangevin(); + int setmask(); + void init(); + void setup(int); + virtual void initial_integrate(int); + virtual void post_force(int); + void post_force_respa(int, int, int); + virtual void end_of_step(); + void reset_target(double); + void reset_dt(); + int modify_param(int, char **); + virtual double compute_scalar(); + double memory_usage(); + virtual void *extract(const char *, int &); + void grow_arrays(int); + void copy_arrays(int, int, int); + int pack_exchange(int, double *); + int unpack_exchange(int, double *); - protected: - int gjfflag,fsflag,oflag,tallyflag,zeroflag,tbiasflag; - int flangevin_allocated; - double ascale; - double t_start,t_stop,t_period,t_target; - double *gfactor1,*gfactor2,*ratio; - double energy,energy_onestep; - double tsqrt; - int tstyle,tvar; - double gjfa, gjfsib; //gjf a and gjf sqrt inverse b - char *tstr; + protected: + int gjfflag,fsflag,oflag,tallyflag,zeroflag,tbiasflag; + int flangevin_allocated; + double ascale; + double t_start,t_stop,t_period,t_target; + double *gfactor1,*gfactor2,*ratio; + double energy,energy_onestep; + double tsqrt; + int tstyle,tvar; + double gjfa, gjfsib; //gjf a and gjf sqrt inverse b + char *tstr; - class AtomVecEllipsoid *avec; + class AtomVecEllipsoid *avec; - int maxatom1,maxatom2; - double **flangevin; - double *tforce; - double **franprev; - double **lv; //half step velocity + int maxatom1,maxatom2; + double **flangevin; + double *tforce; + double **franprev; + double **lv; //half step velocity - char *id_temp; - class Compute *temperature; + char *id_temp; + class Compute *temperature; - int nlevels_respa; - class RanMars *random; - int seed; + int nlevels_respa; + class RanMars *random; + int seed; - template < int Tp_TSTYLEATOM, int Tp_GJF, int Tp_TALLY, - int Tp_BIAS, int Tp_RMASS, int Tp_ZERO > - void post_force_templated(); + template < int Tp_TSTYLEATOM, int Tp_GJF, int Tp_TALLY, + int Tp_BIAS, int Tp_RMASS, int Tp_ZERO > + void post_force_templated(); - void omega_thermostat(); - void angmom_thermostat(); - void compute_target(); - }; + void omega_thermostat(); + void angmom_thermostat(); + void compute_target(); +}; } @@ -86,35 +88,74 @@ namespace LAMMPS_NS { #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: Fix langevin period must be > 0.0 + The time window for temperature relaxation must be > 0 + E: Fix langevin omega requires atom style sphere + Self-explanatory. + E: Fix langevin angmom requires atom style ellipsoid + Self-explanatory. + E: Variable name for fix langevin does not exist + Self-explanatory. + E: Variable for fix langevin is invalid style + It must be an equal-style variable. + E: Fix langevin omega requires extended particles + One of the particles has radius 0.0. + E: Fix langevin angmom requires extended particles + This fix option cannot be used with point particles. + E: Cannot zero Langevin force of 0 atoms + The group has zero atoms, so you cannot request its force be zeroed. + E: Fix langevin variable returned negative temperature + Self-explanatory. + E: Could not find fix_modify temperature ID + The compute ID for computing temperature does not exist. + E: Fix_modify temperature ID does not compute temperature + The compute ID assigned to the fix must compute temperature. + +E: Fix langevin gjf cannot have period equal to dt/2 + +If the period is equal to dt/2 then division by zero can happen. + +E: Fix langevin gjf should come before fix nve + +Self-explanatory + +E: Fix langevin gjf and respa are not compatible + +Self-explanatory + W: Group for fix_modify temp != fix group + The fix_modify command is specifying a temperature computation that computes a temperature on a different group of atoms than the fix itself operates on. This is probably not what you want to do. + */ From c26b1d183905b7738091fb240d052084c709e50c Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Thu, 12 Sep 2019 16:50:42 -0700 Subject: [PATCH 125/237] fixed indentations in fix_langevin.cpp --- src/fix_langevin.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 62e31f567a..25b4f83c37 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -2,10 +2,12 @@ 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. ------------------------------------------------------------------------- */ @@ -49,9 +51,9 @@ enum{CONSTANT,EQUAL,ATOM}; /* ---------------------------------------------------------------------- */ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), - gjfflag(0), gfactor1(NULL), gfactor2(NULL), ratio(NULL), tstr(NULL), - flangevin(NULL), tforce(NULL), franprev(NULL), id_temp(NULL), random(NULL), lv(NULL) + Fix(lmp, narg, arg), + gjfflag(0), gfactor1(NULL), gfactor2(NULL), ratio(NULL), tstr(NULL), + flangevin(NULL), tforce(NULL), franprev(NULL), id_temp(NULL), random(NULL), lv(NULL) { if (narg < 7) error->all(FLERR,"Illegal fix langevin command"); @@ -169,7 +171,7 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : grow_arrays(atom->nmax); atom->add_callback(0); - // initialize franprev to zero + // initialize franprev to zero int nlocal = atom->nlocal; for (int i = 0; i < nlocal; i++) { @@ -737,7 +739,6 @@ void FixLangevin::post_force_templated() flangevin[i][2] = fdrag[2] + fran[2]; } - } } From 0a176d48d8c0b96ffa2425cd8d8b584c6c747f17 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 13 Sep 2019 11:59:55 -0400 Subject: [PATCH 126/237] clarify that each created file will have the ITEM: UNITS lines --- doc/src/dump_modify.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/dump_modify.txt b/doc/src/dump_modify.txt index 11427b100e..3aff21e43e 100644 --- a/doc/src/dump_modify.txt +++ b/doc/src/dump_modify.txt @@ -623,8 +623,8 @@ threshold criterion is met. Otherwise it is not met. The {units} keyword only applies to the dump {atom}, {custom}, and {local} styles (and their COMPRESS package versions {atom/gz}, -{custom/gz} and {local/gz}). If set to {yes}, each dump file will contain -two extra lines at the very beginning with: +{custom/gz} and {local/gz}). If set to {yes}, each individal dump +file will contain two extra lines at the very beginning with: ITEM: UNITS \ :pre From c37d00117886a2b240551d497e8d0d9709d12db9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 13 Sep 2019 16:13:16 -0400 Subject: [PATCH 127/237] fix stupid typo --- doc/src/dump_modify.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/dump_modify.txt b/doc/src/dump_modify.txt index 3aff21e43e..994e9fea3c 100644 --- a/doc/src/dump_modify.txt +++ b/doc/src/dump_modify.txt @@ -623,7 +623,7 @@ threshold criterion is met. Otherwise it is not met. The {units} keyword only applies to the dump {atom}, {custom}, and {local} styles (and their COMPRESS package versions {atom/gz}, -{custom/gz} and {local/gz}). If set to {yes}, each individal dump +{custom/gz} and {local/gz}). If set to {yes}, each individual dump file will contain two extra lines at the very beginning with: ITEM: UNITS From 09b67946312d3b5be87a7b9844731fb6d7b15916 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Fri, 13 Sep 2019 23:25:48 -0700 Subject: [PATCH 128/237] Updated fix langevin errors and warnings as well as associated doc files. Updated fix langevin kokkos errors and warnings as well as associated doc files --- doc/src/Errors_messages.txt | 16 + doc/src/Errors_warnings.txt | 4 + doc/src/fix_langevin.txt | 9 +- fix_langevin_kokkos.cpp | 916 ++++++++++++++++++++++++++++++++++++ fix_langevin_kokkos.h | 293 ++++++++++++ src/fix_langevin.cpp | 31 +- src/fix_langevin.h | 2 +- 7 files changed, 1249 insertions(+), 22 deletions(-) create mode 100644 fix_langevin_kokkos.cpp create mode 100644 fix_langevin_kokkos.h diff --git a/doc/src/Errors_messages.txt b/doc/src/Errors_messages.txt index c131b10ec6..33593d4d53 100644 --- a/doc/src/Errors_messages.txt +++ b/doc/src/Errors_messages.txt @@ -4791,6 +4791,22 @@ Self-explanatory. :dd This fix option cannot be used with point particles. :dd +{Fix langevin gjf and respa are not compatible} :dt + +Self-explanatory. :dd + +{Fix langevin gjf cannot have period equal to dt/2} :dt + +If the period is equal to dt/2 then division by zero will happen. :dd + +{Fix langevin gjf should come before fix nve} :dt + +Self-explanatory. :dd + +{Fix langevin gjf with tbias is not yet implemented with kokkos} :dt + +This option is not yet available. :dd + {Fix langevin omega is not yet implemented with kokkos} :dt This option is not yet available. :dd diff --git a/doc/src/Errors_warnings.txt b/doc/src/Errors_warnings.txt index 9f346ba8c1..fbd857f162 100644 --- a/doc/src/Errors_warnings.txt +++ b/doc/src/Errors_warnings.txt @@ -248,6 +248,10 @@ included one or more of the following: kspace, triclinic, a hybrid pair style, an eam pair style, or no "single" function for the pair style. :dd +{Fix langevin gjf using random gaussians is not implemented with kokkos} :dt + +This will most likely cause errors in kinetic fluctuations. + {Fix property/atom mol or charge w/out ghost communication} :dt A model typically needs these properties defined for ghost atoms. :dd diff --git a/doc/src/fix_langevin.txt b/doc/src/fix_langevin.txt index 382c2360d9..203ff2298c 100644 --- a/doc/src/fix_langevin.txt +++ b/doc/src/fix_langevin.txt @@ -351,13 +351,10 @@ types, tally = no, zero = no, gjf = no. :link(Gronbech-Jensen) [(Gronbech-Jensen)] Gronbech-Jensen and Farago, Mol Phys, 111, 983 -(2013); Gronbech-Jensen, Hayre, and Farago, Comp Phys Comm, -185, 524 (2014) +(2013); Gronbech-Jensen, Hayre, and Farago, Comp Phys Comm, 185, 524 (2014) :link(2Gronbech-Jensen) -[(Gronbech-Jensen)] Gronbech Jensen and Gronbech-Jensen, Mol Phys, 117, 2511 -(2019) +[(Gronbech-Jensen)] Gronbech Jensen and Gronbech-Jensen, Mol Phys, 117, 2511 (2019) :link(1Gronbech-Jensen) -[(Gronbech-Jensen)] Gronbech-Jensen, Mol Phys (2019); -https://doi.org/10.1080/00268976.2019.1662506 +[(Gronbech-Jensen)] Gronbech-Jensen, Mol Phys (2019); https://doi.org/10.1080/00268976.2019.1662506 diff --git a/fix_langevin_kokkos.cpp b/fix_langevin_kokkos.cpp new file mode 100644 index 0000000000..0618631581 --- /dev/null +++ b/fix_langevin_kokkos.cpp @@ -0,0 +1,916 @@ +/* ---------------------------------------------------------------------- + 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 "fix_langevin_kokkos.h" +#include +#include "atom_masks.h" +#include "atom_kokkos.h" +#include "force.h" +#include "group.h" +#include "update.h" +#include "error.h" +#include "memory_kokkos.h" +#include "compute.h" +#include "comm.h" +#include "modify.h" +#include "input.h" +#include "region.h" +#include "variable.h" + +using namespace LAMMPS_NS; +using namespace FixConst; + +enum{NOBIAS,BIAS}; +enum{CONSTANT,EQUAL,ATOM}; +#define SINERTIA 0.4 // moment of inertia prefactor for sphere +#define EINERTIA 0.2 // moment of inertia prefactor for ellipsoid + +/* ---------------------------------------------------------------------- */ + +template +FixLangevinKokkos::FixLangevinKokkos(LAMMPS *lmp, int narg, char **arg) : + FixLangevin(lmp, narg, arg),rand_pool(seed + comm->me) +{ + kokkosable = 1; + atomKK = (AtomKokkos *) atom; + int ntypes = atomKK->ntypes; + + // allocate per-type arrays for force prefactors + memoryKK->create_kokkos(k_gfactor1,gfactor1,ntypes+1,"langevin:gfactor1"); + memoryKK->create_kokkos(k_gfactor2,gfactor2,ntypes+1,"langevin:gfactor2"); + memoryKK->create_kokkos(k_ratio,ratio,ntypes+1,"langevin:ratio"); + d_gfactor1 = k_gfactor1.template view(); + h_gfactor1 = k_gfactor1.template view(); + d_gfactor2 = k_gfactor2.template view(); + h_gfactor2 = k_gfactor2.template view(); + d_ratio = k_ratio.template view(); + h_ratio = k_ratio.template view(); + + // optional args + for (int i = 1; i <= ntypes; i++) ratio[i] = 1.0; + k_ratio.template modify(); + + if(gjfflag){ + grow_arrays(atomKK->nmax); + atom->add_callback(0); + // initialize franprev to zero + for (int i = 0; i < atomKK->nlocal; i++) { + franprev[i][0] = 0.0; + franprev[i][1] = 0.0; + franprev[i][2] = 0.0; + lv[i][0] = 0.0; + lv[i][1] = 0.0; + lv[i][2] = 0.0; + } + k_franprev.template modify(); + k_lv.template modify(); + } + if(zeroflag){ + k_fsumall = tdual_double_1d_3n("langevin:fsumall"); + h_fsumall = k_fsumall.template view(); + d_fsumall = k_fsumall.template view(); + } + + execution_space = ExecutionSpaceFromDevice::space; + datamask_read = V_MASK | F_MASK | MASK_MASK | RMASS_MASK | TYPE_MASK; + datamask_modify = F_MASK; + +} + +/* ---------------------------------------------------------------------- */ + +template +FixLangevinKokkos::~FixLangevinKokkos() +{ + memoryKK->destroy_kokkos(k_gfactor1,gfactor1); + memoryKK->destroy_kokkos(k_gfactor2,gfactor2); + memoryKK->destroy_kokkos(k_ratio,ratio); + memoryKK->destroy_kokkos(k_flangevin,flangevin); + if(gjfflag) memoryKK->destroy_kokkos(k_franprev,franprev); + if(gjfflag) memoryKK->destroy_kokkos(k_lv,lv); + memoryKK->destroy_kokkos(k_tforce,tforce); +} + +/* ---------------------------------------------------------------------- */ + +template +void FixLangevinKokkos::init() +{ + FixLangevin::init(); + if(oflag) + error->all(FLERR,"Fix langevin omega is not yet implemented with kokkos"); + if(ascale) + error->all(FLERR,"Fix langevin angmom is not yet implemented with kokkos"); + if(gjfflag && tbiasflag) + error->all(FLERR,"Fix langevin gjf + tbias is not yet implemented with kokkos"); + if(gjfflag && tbiasflag) + error->warning(FLERR,"Fix langevin gjf + kokkos is not implemented with random gaussians"); + + // prefactors are modified in the init + k_gfactor1.template modify(); + k_gfactor2.template modify(); +} + +/* ---------------------------------------------------------------------- */ + +template +void FixLangevinKokkos::grow_arrays(int nmax) +{ + memoryKK->grow_kokkos(k_franprev,franprev,nmax,3,"langevin:franprev"); + d_franprev = k_franprev.template view(); + h_franprev = k_franprev.template view(); + memoryKK->grow_kokkos(k_lv,lv,nmax,3,"langevin:lv"); + d_lv = k_lv.template view(); + h_lv = k_lv.template view(); +} + +/* ---------------------------------------------------------------------- */ + +template +void FixLangevinKokkos::initial_integrate(int vflag) +{ + atomKK->sync(execution_space,datamask_read); + atomKK->modified(execution_space,datamask_modify); + + v = atomKK->k_v.view(); + f = atomKK->k_f.view(); + int nlocal = atomKK->nlocal; + if (igroup == atomKK->firstgroup) nlocal = atomKK->nfirst; + + FixLangevinKokkosInitialIntegrateFunctor functor(this); + Kokkos::parallel_for(nlocal,functor); +} + +template +KOKKOS_INLINE_FUNCTION +void FixLangevinKokkos::initial_integrate_item(int i) const +{ + if (mask[i] & groupbit) { + f(i,0) /= gjfa; + f(i,1) /= gjfa; + f(i,2) /= gjfa; + v(i,0) = d_lv(i,0); + v(i,1) = d_lv(i,1); + v(i,2) = d_lv(i,2); + } +} + +/* ---------------------------------------------------------------------- */ + +template +void FixLangevinKokkos::post_force(int vflag) +{ + // sync the device views which might have been modified on host + atomKK->sync(execution_space,datamask_read); + rmass = atomKK->k_rmass.view(); + f = atomKK->k_f.template view(); + v = atomKK->k_v.template view(); + type = atomKK->k_type.template view(); + mask = atomKK->k_mask.template view(); + + k_gfactor1.template sync(); + k_gfactor2.template sync(); + k_ratio.template sync(); + if(gjfflag) k_franprev.template sync(); + if(gjfflag) k_lv.template sync(); + + boltz = force->boltz; + dt = update->dt; + mvv2e = force->mvv2e; + ftm2v = force->ftm2v; + fran_prop_const = sqrt(24.0*boltz/t_period/dt/mvv2e); + + compute_target(); // modifies tforce vector, hence sync here + k_tforce.template sync(); + + double fsum[3],fsumall[3]; + bigint count; + int nlocal = atomKK->nlocal; + + if (zeroflag) { + fsum[0] = fsum[1] = fsum[2] = 0.0; + count = group->count(igroup); + if (count == 0) + error->all(FLERR,"Cannot zero Langevin force of 0 atoms"); + } + + // reallocate flangevin if necessary + if (tallyflag) { + if (nlocal > maxatom1) { + memoryKK->destroy_kokkos(k_flangevin,flangevin); + maxatom1 = atomKK->nmax; + memoryKK->create_kokkos(k_flangevin,flangevin,maxatom1,3,"langevin:flangevin"); + d_flangevin = k_flangevin.template view(); + h_flangevin = k_flangevin.template view(); + } + } + + // account for bias velocity + if(tbiasflag == BIAS){ + atomKK->sync(temperature->execution_space,temperature->datamask_read); + temperature->compute_scalar(); + temperature->remove_bias_all(); // modifies velocities + // if temeprature compute is kokkosized host-device comm won't be needed + atomKK->modified(temperature->execution_space,temperature->datamask_modify); + atomKK->sync(execution_space,temperature->datamask_modify); + } + + // compute langevin force in parallel on the device + FSUM s_fsum; + if (tstyle == ATOM) + if (gjfflag) + if (tallyflag) + if (tbiasflag == BIAS) + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (tbiasflag == BIAS) + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (tallyflag) + if (tbiasflag == BIAS) + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (tbiasflag == BIAS) + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (gjfflag) + if (tallyflag) + if (tbiasflag == BIAS) + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (tbiasflag == BIAS) + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (tallyflag) + if (tbiasflag == BIAS) + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (tbiasflag == BIAS) + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (rmass.data()) + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + else + if (zeroflag) { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); + } else { + FixLangevinKokkosPostForceFunctor post_functor(this); + Kokkos::parallel_for(nlocal,post_functor); + } + + + if(tbiasflag == BIAS){ + atomKK->sync(temperature->execution_space,temperature->datamask_read); + temperature->restore_bias_all(); // modifies velocities + atomKK->modified(temperature->execution_space,temperature->datamask_modify); + atomKK->sync(execution_space,temperature->datamask_modify); + } + + // set modify flags for the views modified in post_force functor + if (gjfflag) k_franprev.template modify(); + if (gjfflag) k_lv.template modify(); + if (tallyflag) k_flangevin.template modify(); + + // set total force to zero + if (zeroflag) { + fsum[0] = s_fsum.fx; fsum[1] = s_fsum.fy; fsum[2] = s_fsum.fz; + MPI_Allreduce(fsum,fsumall,3,MPI_DOUBLE,MPI_SUM,world); + h_fsumall(0) = fsumall[0]/count; + h_fsumall(1) = fsumall[1]/count; + h_fsumall(2) = fsumall[2]/count; + k_fsumall.template modify(); + k_fsumall.template sync(); + // set total force zero in parallel on the device + FixLangevinKokkosZeroForceFunctor zero_functor(this); + Kokkos::parallel_for(nlocal,zero_functor); + } + // f is modified by both post_force and zero_force functors + atomKK->modified(execution_space,datamask_modify); + + // thermostat omega and angmom + // if (oflag) omega_thermostat(); + // if (ascale) angmom_thermostat(); + +} + +/* ---------------------------------------------------------------------- */ + +template +template +KOKKOS_INLINE_FUNCTION +FSUM FixLangevinKokkos::post_force_item(int i) const +{ + FSUM fsum; + double fdrag[3],fran[3]; + double gamma1,gamma2; + double fswap; + double tsqrt_t = tsqrt; + + if (mask[i] & groupbit) { + rand_type rand_gen = rand_pool.get_state(); + if(Tp_TSTYLEATOM) tsqrt_t = sqrt(d_tforce[i]); + if(Tp_RMASS){ + gamma1 = -rmass[i] / t_period / ftm2v; + gamma2 = sqrt(rmass[i]) * fran_prop_const / ftm2v; + gamma1 *= 1.0/d_ratio[type[i]]; + gamma2 *= 1.0/sqrt(d_ratio[type[i]]) * tsqrt_t; + } else { + gamma1 = d_gfactor1[type[i]]; + gamma2 = d_gfactor2[type[i]] * tsqrt_t; + } + + fran[0] = gamma2 * (rand_gen.drand() - 0.5); //(random->uniform()-0.5); + fran[1] = gamma2 * (rand_gen.drand() - 0.5); //(random->uniform()-0.5); + fran[2] = gamma2 * (rand_gen.drand() - 0.5); //(random->uniform()-0.5); + + if(Tp_BIAS){ + fdrag[0] = gamma1*v(i,0); + fdrag[1] = gamma1*v(i,1); + fdrag[2] = gamma1*v(i,2); + if (v(i,0) == 0.0) fran[0] = 0.0; + if (v(i,1) == 0.0) fran[1] = 0.0; + if (v(i,2) == 0.0) fran[2] = 0.0; + } else { + fdrag[0] = gamma1*v(i,0); + fdrag[1] = gamma1*v(i,1); + fdrag[2] = gamma1*v(i,2); + } + + if (Tp_GJF) { + d_lv(i,0) = gjfsib*v(i,0); + d_lv(i,1) = gjfsib*v(i,1); + d_lv(i,2) = gjfsib*v(i,2); + + fswap = 0.5*(fran[0]+d_franprev(i,0)); + d_franprev(i,0) = fran[0]; + fran[0] = fswap; + fswap = 0.5*(fran[1]+d_franprev(i,1)); + d_franprev(i,1) = fran[1]; + fran[1] = fswap; + fswap = 0.5*(fran[2]+d_franprev(i,2)); + d_franprev(i,2) = fran[2]; + fran[2] = fswap; + + fdrag[0] *= gjfa; + fdrag[1] *= gjfa; + fdrag[2] *= gjfa; + fran[0] *= gjfa; + fran[1] *= gjfa; + fran[2] *= gjfa; + f(i,0) *= gjfa; + f(i,1) *= gjfa; + f(i,2) *= gjfa; + } + + f(i,0) += fdrag[0] + fran[0]; + f(i,1) += fdrag[1] + fran[1]; + f(i,2) += fdrag[2] + fran[2]; + + if (Tp_TALLY) { + if (Tp_GJF){ + fdrag[0] = gamma1*d_lv(i,0)/gjfsib/gjfsib; + fdrag[1] = gamma1*d_lv(i,1)/gjfsib/gjfsib; + fdrag[2] = gamma1*d_lv(i,2)/gjfsib/gjfsib; + fswap = (2*fran[0]/gjfa - d_franprev(i,0))/gjfsib; + fran[0] = fswap; + fswap = (2*fran[1]/gjfa - d_franprev(i,1))/gjfsib; + fran[1] = fswap; + fswap = (2*fran[2]/gjfa - d_franprev(i,2))/gjfsib; + fran[2] = fswap; + } + d_flangevin(i,0) = fdrag[0] + fran[0]; + d_flangevin(i,1) = fdrag[1] + fran[1]; + d_flangevin(i,2) = fdrag[2] + fran[2]; + } + + if (Tp_ZERO) { + fsum.fx = fran[0]; + fsum.fy = fran[1]; + fsum.fz = fran[2]; + } + rand_pool.free_state(rand_gen); + } + + return fsum; +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +void FixLangevinKokkos::zero_force_item(int i) const +{ + if (mask[i] & groupbit) { + f(i,0) -= d_fsumall[0]; + f(i,1) -= d_fsumall[1]; + f(i,2) -= d_fsumall[2]; + } + +} + +/* ---------------------------------------------------------------------- + set current t_target and t_sqrt + ------------------------------------------------------------------------- */ + +template +void FixLangevinKokkos::compute_target() +{ + atomKK->sync(Host, MASK_MASK); + mask = atomKK->k_mask.template view(); + int nlocal = atomKK->nlocal; + + double delta = update->ntimestep - update->beginstep; + if (delta != 0.0) delta /= update->endstep - update->beginstep; + + // if variable temp, evaluate variable, wrap with clear/add + // reallocate tforce array if necessary + + if (tstyle == CONSTANT) { + t_target = t_start + delta * (t_stop-t_start); + tsqrt = sqrt(t_target); + } else { + modify->clearstep_compute(); + if (tstyle == EQUAL) { + t_target = input->variable->compute_equal(tvar); + if (t_target < 0.0) + error->one(FLERR,"Fix langevin variable returned negative temperature"); + tsqrt = sqrt(t_target); + } else { + if (atom->nmax > maxatom2) { + maxatom2 = atom->nmax; + memoryKK->destroy_kokkos(k_tforce,tforce); + memoryKK->create_kokkos(k_tforce,tforce,maxatom2,"langevin:tforce"); + d_tforce = k_tforce.template view(); + h_tforce = k_tforce.template view(); + } + input->variable->compute_atom(tvar,igroup,tforce,1,0); // tforce is modified on host + k_tforce.template modify(); + for (int i = 0; i < nlocal; i++) + if (mask[i] & groupbit) + if (h_tforce[i] < 0.0) + error->one(FLERR, + "Fix langevin variable returned negative temperature"); + } + modify->addstep_compute(update->ntimestep + 1); + } +} + +/* ---------------------------------------------------------------------- */ + +template +void FixLangevinKokkos::reset_dt() +{ + if (atomKK->mass) { + for (int i = 1; i <= atomKK->ntypes; i++) { + h_gfactor2[i] = sqrt(atomKK->mass[i]) * + sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / + force->ftm2v; + h_gfactor2[i] *= 1.0/sqrt(h_ratio[i]); + } + k_gfactor2.template modify(); + } + +} + +/* ---------------------------------------------------------------------- */ + +template +double FixLangevinKokkos::compute_scalar() +{ + if (!tallyflag || flangevin == NULL) return 0.0; + + v = atomKK->k_v.template view(); + mask = atomKK->k_mask.template view(); + + // capture the very first energy transfer to thermal reservoir + + if (update->ntimestep == update->beginstep) { + energy_onestep = 0.0; + atomKK->sync(execution_space,V_MASK | MASK_MASK); + int nlocal = atomKK->nlocal; + k_flangevin.template sync(); + FixLangevinKokkosTallyEnergyFunctor scalar_functor(this); + Kokkos::parallel_reduce(nlocal,scalar_functor,energy_onestep); + energy = 0.5*energy_onestep*update->dt; + } + + // convert midstep energy back to previous fullstep energy + double energy_me = energy - 0.5*energy_onestep*update->dt; + double energy_all; + MPI_Allreduce(&energy_me,&energy_all,1,MPI_DOUBLE,MPI_SUM,world); + return -energy_all; +} + +/* ---------------------------------------------------------------------- */ + +template +KOKKOS_INLINE_FUNCTION +double FixLangevinKokkos::compute_energy_item(int i) const +{ + double energy; + if (mask[i] & groupbit) + energy = d_flangevin(i,0)*v(i,0) + d_flangevin(i,1)*v(i,1) + + d_flangevin(i,2)*v(i,2); + return energy; +} + +/* ---------------------------------------------------------------------- + tally energy transfer to thermal reservoir + ------------------------------------------------------------------------- */ + +template +void FixLangevinKokkos::end_of_step() +{ + if (!tallyflag && !gjfflag) return; + + v = atomKK->k_v.template view(); + f = atomKK->k_f.template view(); + mask = atomKK->k_mask.template view(); + + atomKK->sync(execution_space,V_MASK | MASK_MASK); + int nlocal = atomKK->nlocal; + + energy_onestep = 0.0; + + k_flangevin.template sync(); + FixLangevinKokkosTallyEnergyFunctor tally_functor(this); + Kokkos::parallel_reduce(nlocal,tally_functor,energy_onestep); + + if (gjfflag){ + if (rmass.data()) { + FixLangevinKokkosEndOfStepFunctor functor(this); + Kokkos::parallel_for(nlocal,functor); + } else { + mass = atomKK->k_mass.view(); + FixLangevinKokkosEndOfStepFunctor functor(this); + Kokkos::parallel_for(nlocal,functor); + } + } + + energy += energy_onestep*update->dt; +} + +template +KOKKOS_INLINE_FUNCTION +void FixLangevinKokkos::end_of_step_item(int i) const { + double tmp[3]; + if (mask[i] & groupbit) { + const double dtfm = force->ftm2v * 0.5 * dt / mass[type[i]]; + tmp[0] = v(i,0); + tmp[1] = v(i,1); + tmp[2] = v(i,2); + if (!fsflag){ + v(i,0) = d_lv(i,0); + v(i,1) = d_lv(i,1); + v(i,2) = d_lv(i,2); + } else { + v(i,0) = 0.5 * gjfsib * gjfsib * (v(i,0) + dtfm * f(i,0) / gjfa) + + dtfm * 0.5 * (gjfsib * d_flangevin(i,0) - d_franprev(i,0)) + + (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,0); + v(i,1) = 0.5 * gjfsib * gjfsib * (v(i,1) + dtfm * f(i,1) / gjfa) + + dtfm * 0.5 * (gjfsib * d_flangevin(i,0) - d_franprev(i,1)) + + (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,1); + v(i,2) = 0.5 * gjfsib * gjfsib * (v(i,2) + dtfm * f(i,2) / gjfa) + + dtfm * 0.5 * (gjfsib * d_flangevin(i,0) - d_franprev(i,2)) + + (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,2); + } + d_lv(i,0) = tmp[0]; + d_lv(i,1) = tmp[1]; + d_lv(i,2) = tmp[2]; + } +} + +template +KOKKOS_INLINE_FUNCTION +void FixLangevinKokkos::end_of_step_rmass_item(int i) const +{ + double tmp[3]; + if (mask[i] & groupbit) { + const double dtfm = force->ftm2v * 0.5 * dt / rmass[i]; + tmp[0] = v(i,0); + tmp[1] = v(i,1); + tmp[2] = v(i,2); + if (!fsflag){ + v(i,0) = d_lv(i,0); + v(i,1) = d_lv(i,1); + v(i,2) = d_lv(i,2); + } else { + v(i,0) = 0.5 * gjfsib * gjfsib * (v(i,0) + dtfm * f(i,0) / gjfa) + + dtfm * 0.5 * (gjfsib * d_flangevin(i,0) - d_franprev(i,0)) + + (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,0); + v(i,1) = 0.5 * gjfsib * gjfsib * (v(i,1) + dtfm * f(i,1) / gjfa) + + dtfm * 0.5 * (gjfsib * d_flangevin(i,1) - d_franprev(i,1)) + + (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,1); + v(i,2) = 0.5 * gjfsib * gjfsib * (v(i,2) + dtfm * f(i,2) / gjfa) + + dtfm * 0.5 * (gjfsib * d_flangevin(i,2) - d_franprev(i,2)) + + (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,2); + } + d_lv(i,0) = tmp[0]; + d_lv(i,1) = tmp[1]; + d_lv(i,2) = tmp[2]; + } +} + +/* ---------------------------------------------------------------------- + copy values within local atom-based array + ------------------------------------------------------------------------- */ + +template +void FixLangevinKokkos::copy_arrays(int i, int j, int delflag) +{ + h_franprev(j,0) = h_franprev(i,0); + h_franprev(j,1) = h_franprev(i,1); + h_franprev(j,2) = h_franprev(i,2); + h_lv(j,0) = h_lv(i,0); + h_lv(j,1) = h_lv(i,1); + h_lv(j,2) = h_lv(i,2); + + k_franprev.template modify(); + k_lv.template modify(); + +} + +/* ---------------------------------------------------------------------- */ + +template +void FixLangevinKokkos::cleanup_copy() +{ + random = NULL; + tstr = NULL; + gfactor1 = NULL; + gfactor2 = NULL; + ratio = NULL; + id_temp = NULL; + flangevin = NULL; + tforce = NULL; + gjfflag = 0; + franprev = NULL; + lv = NULL; + id = style = NULL; + vatom = NULL; +} + +namespace LAMMPS_NS { +template class FixLangevinKokkos; +#ifdef KOKKOS_ENABLE_CUDA +template class FixLangevinKokkos; +#endif +} + diff --git a/fix_langevin_kokkos.h b/fix_langevin_kokkos.h new file mode 100644 index 0000000000..a6d467dfd7 --- /dev/null +++ b/fix_langevin_kokkos.h @@ -0,0 +1,293 @@ +/* -*- 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 FIX_CLASS + +FixStyle(langevin/kk,FixLangevinKokkos) +FixStyle(langevin/kk/device,FixLangevinKokkos) +FixStyle(langevin/kk/host,FixLangevinKokkos) + +#else + +#ifndef LMP_FIX_LANGEVIN_KOKKOS_H +#define LMP_FIX_LANGEVIN_KOKKOS_H + +#include "fix_langevin.h" +#include "kokkos_type.h" +#include "Kokkos_Random.hpp" +#include "comm_kokkos.h" + +namespace LAMMPS_NS { + + struct s_FSUM { + double fx, fy, fz; + KOKKOS_INLINE_FUNCTION + s_FSUM() { + fx = fy = fz = 0.0; + } + KOKKOS_INLINE_FUNCTION + s_FSUM& operator+=(const s_FSUM &rhs){ + fx += rhs.fx; + fy += rhs.fy; + fz += rhs.fz; + return *this; + } + + KOKKOS_INLINE_FUNCTION + volatile s_FSUM& operator+=(const volatile s_FSUM &rhs) volatile { + fx += rhs.fx; + fy += rhs.fy; + fz += rhs.fz; + return *this; + } + }; + typedef s_FSUM FSUM; + + template + class FixLangevinKokkos; + + template + class FixLangevinKokkosInitialIntegrateFunctor; + + template + class FixLangevinKokkosPostForceFunctor; + + template class FixLangevinKokkosZeroForceFunctor; + + template class FixLangevinKokkosTallyEnergyFunctor; + + template + class FixLangevinKokkos : public FixLangevin { + public: + FixLangevinKokkos(class LAMMPS *, int, char **); + ~FixLangevinKokkos(); + + void cleanup_copy(); + void init(); + void initial_integrate(int); + void post_force(int); + void reset_dt(); + void grow_arrays(int); + void copy_arrays(int i, int j, int delflag); + double compute_scalar(); + void end_of_step(); + + KOKKOS_INLINE_FUNCTION + void initial_integrate_item(int) const; + + KOKKOS_INLINE_FUNCTION + void initial_integrate_rmass_item(int) const; + + template + KOKKOS_INLINE_FUNCTION + FSUM post_force_item(int) const; + + KOKKOS_INLINE_FUNCTION + void zero_force_item(int) const; + + KOKKOS_INLINE_FUNCTION + double compute_energy_item(int) const; + + KOKKOS_INLINE_FUNCTION + void end_of_step_item(int) const; + + KOKKOS_INLINE_FUNCTION + void end_of_step_rmass_item(int) const; + + private: + class CommKokkos *commKK; + + typename ArrayTypes::t_float_1d rmass; + typename ArrayTypes::t_float_1d mass; + typename ArrayTypes::tdual_double_2d k_franprev; + typename ArrayTypes::t_double_2d d_franprev; + HAT::t_double_2d h_franprev; + + typename ArrayTypes::tdual_double_2d k_lv; + typename ArrayTypes::t_double_2d d_lv; + HAT::t_double_2d h_lv; + + typename ArrayTypes::tdual_double_2d k_flangevin; + typename ArrayTypes::t_double_2d d_flangevin; + HAT::t_double_2d h_flangevin; + + typename ArrayTypes::tdual_double_1d k_tforce; + typename ArrayTypes::t_double_1d d_tforce; + HAT::t_double_1d h_tforce; + + typename ArrayTypes::t_v_array v; + typename ArrayTypes::t_f_array f; + typename ArrayTypes::t_int_1d type; + typename ArrayTypes::t_int_1d mask; + + typename ArrayTypes::tdual_double_1d k_gfactor1, k_gfactor2, k_ratio; + typename ArrayTypes::t_double_1d d_gfactor1, d_gfactor2, d_ratio; + HAT::t_double_1d h_gfactor1, h_gfactor2, h_ratio; + + typedef Kokkos::DualView + tdual_double_1d_3n; + tdual_double_1d_3n k_fsumall; + typename tdual_double_1d_3n::t_dev d_fsumall; + typename tdual_double_1d_3n::t_host h_fsumall; + + double boltz,dt,mvv2e,ftm2v,fran_prop_const; + + void compute_target(); + + Kokkos::Random_XorShift64_Pool rand_pool; + typedef typename Kokkos::Random_XorShift64_Pool::generator_type rand_type; + + }; + + template + struct FixLangevinKokkosInitialIntegrateFunctor { + typedef DeviceType device_type ; + FixLangevinKokkos c; + + FixLangevinKokkosInitialIntegrateFunctor(FixLangevinKokkos* c_ptr): + c(*c_ptr) {c.cleanup_copy();}; + + KOKKOS_INLINE_FUNCTION + void operator()(const int i) const { + c.initial_integrate_item(i); + } + }; + + + template + struct FixLangevinKokkosPostForceFunctor { + + typedef DeviceType device_type; + typedef FSUM value_type; + FixLangevinKokkos c; + + FixLangevinKokkosPostForceFunctor(FixLangevinKokkos* c_ptr): + c(*c_ptr) {} + ~FixLangevinKokkosPostForceFunctor(){c.cleanup_copy();} + + KOKKOS_INLINE_FUNCTION + void operator()(const int i) const { + c.template post_force_item(i); + } + + KOKKOS_INLINE_FUNCTION + void operator()(const int i, value_type &fsum) const { + + fsum += c.template post_force_item(i); + } + + KOKKOS_INLINE_FUNCTION + static void init(volatile value_type &update) { + update.fx = 0.0; + update.fy = 0.0; + update.fz = 0.0; + } + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type &update, + const volatile value_type &source) { + update.fx += source.fx; + update.fy += source.fy; + update.fz += source.fz; + } + + }; + + template + struct FixLangevinKokkosZeroForceFunctor { + typedef DeviceType device_type ; + FixLangevinKokkos c; + + FixLangevinKokkosZeroForceFunctor(FixLangevinKokkos* c_ptr): + c(*c_ptr) {c.cleanup_copy();} + + KOKKOS_INLINE_FUNCTION + void operator()(const int i) const { + c.zero_force_item(i); + } + }; + + template + struct FixLangevinKokkosTallyEnergyFunctor { + typedef DeviceType device_type ; + FixLangevinKokkos c; + typedef double value_type; + FixLangevinKokkosTallyEnergyFunctor(FixLangevinKokkos* c_ptr): + c(*c_ptr) {c.cleanup_copy();} + + KOKKOS_INLINE_FUNCTION + void operator()(const int i, value_type &energy) const { + energy += c.compute_energy_item(i); + } + KOKKOS_INLINE_FUNCTION + static void init(volatile value_type &update) { + update = 0.0; + } + KOKKOS_INLINE_FUNCTION + static void join(volatile value_type &update, + const volatile value_type &source) { + update += source; + } + }; + + template + struct FixLangevinKokkosEndOfStepFunctor { + typedef DeviceType device_type ; + FixLangevinKokkos c; + + FixLangevinKokkosEndOfStepFunctor(FixLangevinKokkos* c_ptr): + c(*c_ptr) {c.cleanup_copy();} + + KOKKOS_INLINE_FUNCTION + void operator()(const int i) const { + if (RMass) c.end_of_step_rmass_item(i); + else c.end_of_step_item(i); + } + }; +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Fix langevin omega is not yet implemented with kokkos + +This option is not yet available. + +E: Fix langevin angmom is not yet implemented with kokkos + +This option is not yet available. + +E: Cannot zero Langevin force of 0 atoms + +The group has zero atoms, so you cannot request its force +be zeroed. + +E: Fix langevin variable returned negative temperature + +Self-explanatory. + +E: Fix langevin gjf with tbias is not yet implemented with kokkos + +This option is not yet available. + +W: Fix langevin gjf using random gaussians is not implemented with kokkos + +This will most likely cause errors in kinetic fluctuations. + +*/ diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 25b4f83c37..2d58f67a99 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include "math_extra.h" #include "atom.h" #include "atom_vec_ellipsoid.h" @@ -53,7 +54,7 @@ enum{CONSTANT,EQUAL,ATOM}; FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), gjfflag(0), gfactor1(NULL), gfactor2(NULL), ratio(NULL), tstr(NULL), - flangevin(NULL), tforce(NULL), franprev(NULL), id_temp(NULL), random(NULL), lv(NULL) + flangevin(NULL), tforce(NULL), franprev(NULL), lv(NULL), id_temp(NULL), random(NULL) { if (narg < 7) error->all(FLERR,"Illegal fix langevin command"); @@ -232,7 +233,7 @@ void FixLangevin::init() int flag = 0; for (int i = 0; i < modify->nfix; i++) { if (strcmp(id,modify->fix[i]->id) == 0) before = 0; - else if ((modify->fmask[i] && strcmp(modify->fix[i]->style,"nve")==0) && before) flag = 1; + else if ((modify->fmask[i] && utils::strmatch(modify->fix[i]->style,"^nve")) && before) flag = 1; } if (flag && comm->me == 0) error->all(FLERR,"Fix langevin gjf should come before fix nve"); @@ -287,13 +288,13 @@ void FixLangevin::init() if (!atom->rmass) { for (int i = 1; i <= atom->ntypes; i++) { gfactor1[i] = -atom->mass[i] / t_period / force->ftm2v; - if (!gjfflag) + if (gjfflag) gfactor2[i] = sqrt(atom->mass[i]) * - sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / + sqrt(2.0*force->boltz/t_period/update->dt/force->mvv2e) / force->ftm2v; else gfactor2[i] = sqrt(atom->mass[i]) * - sqrt(2.0*force->boltz/t_period/update->dt/force->mvv2e) / + sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / force->ftm2v; gfactor1[i] *= 1.0/ratio[i]; gfactor2[i] *= 1.0/sqrt(ratio[i]); @@ -306,7 +307,7 @@ void FixLangevin::init() if (strstr(update->integrate_style,"respa")) nlevels_respa = ((Respa *) update->integrate)->nlevels; - if (strstr(update->integrate_style,"respa") && gjfflag) + if (utils::strmatch(update->integrate_style,"^respa") && gjfflag) error->all(FLERR,"Fix langevin gjf and respa are not compatible"); if (gjfflag) gjfa = (1.0-update->dt/2.0/t_period)/(1.0+update->dt/2.0/t_period); @@ -643,10 +644,10 @@ void FixLangevin::post_force_templated() if (Tp_TSTYLEATOM) tsqrt = sqrt(tforce[i]); if (Tp_RMASS) { gamma1 = -rmass[i] / t_period / ftm2v; - if (!Tp_GJF) - gamma2 = sqrt(rmass[i]) * sqrt(24.0*boltz/t_period/dt/mvv2e) / ftm2v; - else + if (Tp_GJF) gamma2 = sqrt(rmass[i]) * sqrt(2.0*boltz/t_period/dt/mvv2e) / ftm2v; + else + gamma2 = sqrt(rmass[i]) * sqrt(24.0*boltz/t_period/dt/mvv2e) / ftm2v; gamma1 *= 1.0/ratio[type[i]]; gamma2 *= 1.0/sqrt(ratio[type[i]]) * tsqrt; } else { @@ -654,16 +655,16 @@ void FixLangevin::post_force_templated() gamma2 = gfactor2[type[i]] * tsqrt; } - if (!Tp_GJF){ - fran[0] = gamma2*(random->uniform()-0.5); - fran[1] = gamma2*(random->uniform()-0.5); - fran[2] = gamma2*(random->uniform()-0.5); - } - else{ + if (Tp_GJF){ fran[0] = gamma2*random->gaussian(); fran[1] = gamma2*random->gaussian(); fran[2] = gamma2*random->gaussian(); } + else{ + fran[0] = gamma2*(random->uniform()-0.5); + fran[1] = gamma2*(random->uniform()-0.5); + fran[2] = gamma2*(random->uniform()-0.5); + } if (Tp_BIAS) { temperature->remove_bias(i,v[i]); diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 3ffccb3be1..349a9d2dd9 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -142,7 +142,7 @@ The compute ID assigned to the fix must compute temperature. E: Fix langevin gjf cannot have period equal to dt/2 -If the period is equal to dt/2 then division by zero can happen. +If the period is equal to dt/2 then division by zero will happen. E: Fix langevin gjf should come before fix nve From 0366a5aae9b00db923ed7eb6ab6c84a146aebc03 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Sat, 14 Sep 2019 00:13:05 -0700 Subject: [PATCH 129/237] Fix langevin changed to utils.h --- doc/src/fix_langevin.txt | 4 +++- src/fix_langevin.cpp | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/src/fix_langevin.txt b/doc/src/fix_langevin.txt index 203ff2298c..8dd143bdb7 100644 --- a/doc/src/fix_langevin.txt +++ b/doc/src/fix_langevin.txt @@ -327,7 +327,9 @@ This fix can ramp its target temperature over multiple runs, using the This fix is not invoked during "energy minimization"_minimize.html. -[Restrictions:] For {gjf} do not choose damp=dt/2. {gjf} is not compatible +[Restrictions:] + +For {gjf} do not choose damp=dt/2. {gjf} is not compatible with run_style respa. [Related commands:] diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 2d58f67a99..cd77883c76 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -23,7 +23,6 @@ #include #include #include -#include #include "math_extra.h" #include "atom.h" #include "atom_vec_ellipsoid.h" @@ -39,6 +38,7 @@ #include "memory.h" #include "error.h" #include "group.h" +#include "utils.h" using namespace LAMMPS_NS; using namespace FixConst; From c1eff7d5761f9f54536066d8912a4416d3c8c7fa Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Sat, 14 Sep 2019 11:02:42 -0700 Subject: [PATCH 130/237] fix misplaced fix_langevin_kokkos --- fix_langevin_kokkos.cpp | 916 ----------------------------- fix_langevin_kokkos.h | 293 --------- src/KOKKOS/fix_langevin_kokkos.cpp | 16 +- src/KOKKOS/fix_langevin_kokkos.h | 8 + 4 files changed, 13 insertions(+), 1220 deletions(-) delete mode 100644 fix_langevin_kokkos.cpp delete mode 100644 fix_langevin_kokkos.h diff --git a/fix_langevin_kokkos.cpp b/fix_langevin_kokkos.cpp deleted file mode 100644 index 0618631581..0000000000 --- a/fix_langevin_kokkos.cpp +++ /dev/null @@ -1,916 +0,0 @@ -/* ---------------------------------------------------------------------- - 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 "fix_langevin_kokkos.h" -#include -#include "atom_masks.h" -#include "atom_kokkos.h" -#include "force.h" -#include "group.h" -#include "update.h" -#include "error.h" -#include "memory_kokkos.h" -#include "compute.h" -#include "comm.h" -#include "modify.h" -#include "input.h" -#include "region.h" -#include "variable.h" - -using namespace LAMMPS_NS; -using namespace FixConst; - -enum{NOBIAS,BIAS}; -enum{CONSTANT,EQUAL,ATOM}; -#define SINERTIA 0.4 // moment of inertia prefactor for sphere -#define EINERTIA 0.2 // moment of inertia prefactor for ellipsoid - -/* ---------------------------------------------------------------------- */ - -template -FixLangevinKokkos::FixLangevinKokkos(LAMMPS *lmp, int narg, char **arg) : - FixLangevin(lmp, narg, arg),rand_pool(seed + comm->me) -{ - kokkosable = 1; - atomKK = (AtomKokkos *) atom; - int ntypes = atomKK->ntypes; - - // allocate per-type arrays for force prefactors - memoryKK->create_kokkos(k_gfactor1,gfactor1,ntypes+1,"langevin:gfactor1"); - memoryKK->create_kokkos(k_gfactor2,gfactor2,ntypes+1,"langevin:gfactor2"); - memoryKK->create_kokkos(k_ratio,ratio,ntypes+1,"langevin:ratio"); - d_gfactor1 = k_gfactor1.template view(); - h_gfactor1 = k_gfactor1.template view(); - d_gfactor2 = k_gfactor2.template view(); - h_gfactor2 = k_gfactor2.template view(); - d_ratio = k_ratio.template view(); - h_ratio = k_ratio.template view(); - - // optional args - for (int i = 1; i <= ntypes; i++) ratio[i] = 1.0; - k_ratio.template modify(); - - if(gjfflag){ - grow_arrays(atomKK->nmax); - atom->add_callback(0); - // initialize franprev to zero - for (int i = 0; i < atomKK->nlocal; i++) { - franprev[i][0] = 0.0; - franprev[i][1] = 0.0; - franprev[i][2] = 0.0; - lv[i][0] = 0.0; - lv[i][1] = 0.0; - lv[i][2] = 0.0; - } - k_franprev.template modify(); - k_lv.template modify(); - } - if(zeroflag){ - k_fsumall = tdual_double_1d_3n("langevin:fsumall"); - h_fsumall = k_fsumall.template view(); - d_fsumall = k_fsumall.template view(); - } - - execution_space = ExecutionSpaceFromDevice::space; - datamask_read = V_MASK | F_MASK | MASK_MASK | RMASS_MASK | TYPE_MASK; - datamask_modify = F_MASK; - -} - -/* ---------------------------------------------------------------------- */ - -template -FixLangevinKokkos::~FixLangevinKokkos() -{ - memoryKK->destroy_kokkos(k_gfactor1,gfactor1); - memoryKK->destroy_kokkos(k_gfactor2,gfactor2); - memoryKK->destroy_kokkos(k_ratio,ratio); - memoryKK->destroy_kokkos(k_flangevin,flangevin); - if(gjfflag) memoryKK->destroy_kokkos(k_franprev,franprev); - if(gjfflag) memoryKK->destroy_kokkos(k_lv,lv); - memoryKK->destroy_kokkos(k_tforce,tforce); -} - -/* ---------------------------------------------------------------------- */ - -template -void FixLangevinKokkos::init() -{ - FixLangevin::init(); - if(oflag) - error->all(FLERR,"Fix langevin omega is not yet implemented with kokkos"); - if(ascale) - error->all(FLERR,"Fix langevin angmom is not yet implemented with kokkos"); - if(gjfflag && tbiasflag) - error->all(FLERR,"Fix langevin gjf + tbias is not yet implemented with kokkos"); - if(gjfflag && tbiasflag) - error->warning(FLERR,"Fix langevin gjf + kokkos is not implemented with random gaussians"); - - // prefactors are modified in the init - k_gfactor1.template modify(); - k_gfactor2.template modify(); -} - -/* ---------------------------------------------------------------------- */ - -template -void FixLangevinKokkos::grow_arrays(int nmax) -{ - memoryKK->grow_kokkos(k_franprev,franprev,nmax,3,"langevin:franprev"); - d_franprev = k_franprev.template view(); - h_franprev = k_franprev.template view(); - memoryKK->grow_kokkos(k_lv,lv,nmax,3,"langevin:lv"); - d_lv = k_lv.template view(); - h_lv = k_lv.template view(); -} - -/* ---------------------------------------------------------------------- */ - -template -void FixLangevinKokkos::initial_integrate(int vflag) -{ - atomKK->sync(execution_space,datamask_read); - atomKK->modified(execution_space,datamask_modify); - - v = atomKK->k_v.view(); - f = atomKK->k_f.view(); - int nlocal = atomKK->nlocal; - if (igroup == atomKK->firstgroup) nlocal = atomKK->nfirst; - - FixLangevinKokkosInitialIntegrateFunctor functor(this); - Kokkos::parallel_for(nlocal,functor); -} - -template -KOKKOS_INLINE_FUNCTION -void FixLangevinKokkos::initial_integrate_item(int i) const -{ - if (mask[i] & groupbit) { - f(i,0) /= gjfa; - f(i,1) /= gjfa; - f(i,2) /= gjfa; - v(i,0) = d_lv(i,0); - v(i,1) = d_lv(i,1); - v(i,2) = d_lv(i,2); - } -} - -/* ---------------------------------------------------------------------- */ - -template -void FixLangevinKokkos::post_force(int vflag) -{ - // sync the device views which might have been modified on host - atomKK->sync(execution_space,datamask_read); - rmass = atomKK->k_rmass.view(); - f = atomKK->k_f.template view(); - v = atomKK->k_v.template view(); - type = atomKK->k_type.template view(); - mask = atomKK->k_mask.template view(); - - k_gfactor1.template sync(); - k_gfactor2.template sync(); - k_ratio.template sync(); - if(gjfflag) k_franprev.template sync(); - if(gjfflag) k_lv.template sync(); - - boltz = force->boltz; - dt = update->dt; - mvv2e = force->mvv2e; - ftm2v = force->ftm2v; - fran_prop_const = sqrt(24.0*boltz/t_period/dt/mvv2e); - - compute_target(); // modifies tforce vector, hence sync here - k_tforce.template sync(); - - double fsum[3],fsumall[3]; - bigint count; - int nlocal = atomKK->nlocal; - - if (zeroflag) { - fsum[0] = fsum[1] = fsum[2] = 0.0; - count = group->count(igroup); - if (count == 0) - error->all(FLERR,"Cannot zero Langevin force of 0 atoms"); - } - - // reallocate flangevin if necessary - if (tallyflag) { - if (nlocal > maxatom1) { - memoryKK->destroy_kokkos(k_flangevin,flangevin); - maxatom1 = atomKK->nmax; - memoryKK->create_kokkos(k_flangevin,flangevin,maxatom1,3,"langevin:flangevin"); - d_flangevin = k_flangevin.template view(); - h_flangevin = k_flangevin.template view(); - } - } - - // account for bias velocity - if(tbiasflag == BIAS){ - atomKK->sync(temperature->execution_space,temperature->datamask_read); - temperature->compute_scalar(); - temperature->remove_bias_all(); // modifies velocities - // if temeprature compute is kokkosized host-device comm won't be needed - atomKK->modified(temperature->execution_space,temperature->datamask_modify); - atomKK->sync(execution_space,temperature->datamask_modify); - } - - // compute langevin force in parallel on the device - FSUM s_fsum; - if (tstyle == ATOM) - if (gjfflag) - if (tallyflag) - if (tbiasflag == BIAS) - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (tbiasflag == BIAS) - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (tallyflag) - if (tbiasflag == BIAS) - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (tbiasflag == BIAS) - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (gjfflag) - if (tallyflag) - if (tbiasflag == BIAS) - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (tbiasflag == BIAS) - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (tallyflag) - if (tbiasflag == BIAS) - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (tbiasflag == BIAS) - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (rmass.data()) - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - else - if (zeroflag) { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_reduce(nlocal,post_functor,s_fsum); - } else { - FixLangevinKokkosPostForceFunctor post_functor(this); - Kokkos::parallel_for(nlocal,post_functor); - } - - - if(tbiasflag == BIAS){ - atomKK->sync(temperature->execution_space,temperature->datamask_read); - temperature->restore_bias_all(); // modifies velocities - atomKK->modified(temperature->execution_space,temperature->datamask_modify); - atomKK->sync(execution_space,temperature->datamask_modify); - } - - // set modify flags for the views modified in post_force functor - if (gjfflag) k_franprev.template modify(); - if (gjfflag) k_lv.template modify(); - if (tallyflag) k_flangevin.template modify(); - - // set total force to zero - if (zeroflag) { - fsum[0] = s_fsum.fx; fsum[1] = s_fsum.fy; fsum[2] = s_fsum.fz; - MPI_Allreduce(fsum,fsumall,3,MPI_DOUBLE,MPI_SUM,world); - h_fsumall(0) = fsumall[0]/count; - h_fsumall(1) = fsumall[1]/count; - h_fsumall(2) = fsumall[2]/count; - k_fsumall.template modify(); - k_fsumall.template sync(); - // set total force zero in parallel on the device - FixLangevinKokkosZeroForceFunctor zero_functor(this); - Kokkos::parallel_for(nlocal,zero_functor); - } - // f is modified by both post_force and zero_force functors - atomKK->modified(execution_space,datamask_modify); - - // thermostat omega and angmom - // if (oflag) omega_thermostat(); - // if (ascale) angmom_thermostat(); - -} - -/* ---------------------------------------------------------------------- */ - -template -template -KOKKOS_INLINE_FUNCTION -FSUM FixLangevinKokkos::post_force_item(int i) const -{ - FSUM fsum; - double fdrag[3],fran[3]; - double gamma1,gamma2; - double fswap; - double tsqrt_t = tsqrt; - - if (mask[i] & groupbit) { - rand_type rand_gen = rand_pool.get_state(); - if(Tp_TSTYLEATOM) tsqrt_t = sqrt(d_tforce[i]); - if(Tp_RMASS){ - gamma1 = -rmass[i] / t_period / ftm2v; - gamma2 = sqrt(rmass[i]) * fran_prop_const / ftm2v; - gamma1 *= 1.0/d_ratio[type[i]]; - gamma2 *= 1.0/sqrt(d_ratio[type[i]]) * tsqrt_t; - } else { - gamma1 = d_gfactor1[type[i]]; - gamma2 = d_gfactor2[type[i]] * tsqrt_t; - } - - fran[0] = gamma2 * (rand_gen.drand() - 0.5); //(random->uniform()-0.5); - fran[1] = gamma2 * (rand_gen.drand() - 0.5); //(random->uniform()-0.5); - fran[2] = gamma2 * (rand_gen.drand() - 0.5); //(random->uniform()-0.5); - - if(Tp_BIAS){ - fdrag[0] = gamma1*v(i,0); - fdrag[1] = gamma1*v(i,1); - fdrag[2] = gamma1*v(i,2); - if (v(i,0) == 0.0) fran[0] = 0.0; - if (v(i,1) == 0.0) fran[1] = 0.0; - if (v(i,2) == 0.0) fran[2] = 0.0; - } else { - fdrag[0] = gamma1*v(i,0); - fdrag[1] = gamma1*v(i,1); - fdrag[2] = gamma1*v(i,2); - } - - if (Tp_GJF) { - d_lv(i,0) = gjfsib*v(i,0); - d_lv(i,1) = gjfsib*v(i,1); - d_lv(i,2) = gjfsib*v(i,2); - - fswap = 0.5*(fran[0]+d_franprev(i,0)); - d_franprev(i,0) = fran[0]; - fran[0] = fswap; - fswap = 0.5*(fran[1]+d_franprev(i,1)); - d_franprev(i,1) = fran[1]; - fran[1] = fswap; - fswap = 0.5*(fran[2]+d_franprev(i,2)); - d_franprev(i,2) = fran[2]; - fran[2] = fswap; - - fdrag[0] *= gjfa; - fdrag[1] *= gjfa; - fdrag[2] *= gjfa; - fran[0] *= gjfa; - fran[1] *= gjfa; - fran[2] *= gjfa; - f(i,0) *= gjfa; - f(i,1) *= gjfa; - f(i,2) *= gjfa; - } - - f(i,0) += fdrag[0] + fran[0]; - f(i,1) += fdrag[1] + fran[1]; - f(i,2) += fdrag[2] + fran[2]; - - if (Tp_TALLY) { - if (Tp_GJF){ - fdrag[0] = gamma1*d_lv(i,0)/gjfsib/gjfsib; - fdrag[1] = gamma1*d_lv(i,1)/gjfsib/gjfsib; - fdrag[2] = gamma1*d_lv(i,2)/gjfsib/gjfsib; - fswap = (2*fran[0]/gjfa - d_franprev(i,0))/gjfsib; - fran[0] = fswap; - fswap = (2*fran[1]/gjfa - d_franprev(i,1))/gjfsib; - fran[1] = fswap; - fswap = (2*fran[2]/gjfa - d_franprev(i,2))/gjfsib; - fran[2] = fswap; - } - d_flangevin(i,0) = fdrag[0] + fran[0]; - d_flangevin(i,1) = fdrag[1] + fran[1]; - d_flangevin(i,2) = fdrag[2] + fran[2]; - } - - if (Tp_ZERO) { - fsum.fx = fran[0]; - fsum.fy = fran[1]; - fsum.fz = fran[2]; - } - rand_pool.free_state(rand_gen); - } - - return fsum; -} - -/* ---------------------------------------------------------------------- */ - -template -KOKKOS_INLINE_FUNCTION -void FixLangevinKokkos::zero_force_item(int i) const -{ - if (mask[i] & groupbit) { - f(i,0) -= d_fsumall[0]; - f(i,1) -= d_fsumall[1]; - f(i,2) -= d_fsumall[2]; - } - -} - -/* ---------------------------------------------------------------------- - set current t_target and t_sqrt - ------------------------------------------------------------------------- */ - -template -void FixLangevinKokkos::compute_target() -{ - atomKK->sync(Host, MASK_MASK); - mask = atomKK->k_mask.template view(); - int nlocal = atomKK->nlocal; - - double delta = update->ntimestep - update->beginstep; - if (delta != 0.0) delta /= update->endstep - update->beginstep; - - // if variable temp, evaluate variable, wrap with clear/add - // reallocate tforce array if necessary - - if (tstyle == CONSTANT) { - t_target = t_start + delta * (t_stop-t_start); - tsqrt = sqrt(t_target); - } else { - modify->clearstep_compute(); - if (tstyle == EQUAL) { - t_target = input->variable->compute_equal(tvar); - if (t_target < 0.0) - error->one(FLERR,"Fix langevin variable returned negative temperature"); - tsqrt = sqrt(t_target); - } else { - if (atom->nmax > maxatom2) { - maxatom2 = atom->nmax; - memoryKK->destroy_kokkos(k_tforce,tforce); - memoryKK->create_kokkos(k_tforce,tforce,maxatom2,"langevin:tforce"); - d_tforce = k_tforce.template view(); - h_tforce = k_tforce.template view(); - } - input->variable->compute_atom(tvar,igroup,tforce,1,0); // tforce is modified on host - k_tforce.template modify(); - for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit) - if (h_tforce[i] < 0.0) - error->one(FLERR, - "Fix langevin variable returned negative temperature"); - } - modify->addstep_compute(update->ntimestep + 1); - } -} - -/* ---------------------------------------------------------------------- */ - -template -void FixLangevinKokkos::reset_dt() -{ - if (atomKK->mass) { - for (int i = 1; i <= atomKK->ntypes; i++) { - h_gfactor2[i] = sqrt(atomKK->mass[i]) * - sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / - force->ftm2v; - h_gfactor2[i] *= 1.0/sqrt(h_ratio[i]); - } - k_gfactor2.template modify(); - } - -} - -/* ---------------------------------------------------------------------- */ - -template -double FixLangevinKokkos::compute_scalar() -{ - if (!tallyflag || flangevin == NULL) return 0.0; - - v = atomKK->k_v.template view(); - mask = atomKK->k_mask.template view(); - - // capture the very first energy transfer to thermal reservoir - - if (update->ntimestep == update->beginstep) { - energy_onestep = 0.0; - atomKK->sync(execution_space,V_MASK | MASK_MASK); - int nlocal = atomKK->nlocal; - k_flangevin.template sync(); - FixLangevinKokkosTallyEnergyFunctor scalar_functor(this); - Kokkos::parallel_reduce(nlocal,scalar_functor,energy_onestep); - energy = 0.5*energy_onestep*update->dt; - } - - // convert midstep energy back to previous fullstep energy - double energy_me = energy - 0.5*energy_onestep*update->dt; - double energy_all; - MPI_Allreduce(&energy_me,&energy_all,1,MPI_DOUBLE,MPI_SUM,world); - return -energy_all; -} - -/* ---------------------------------------------------------------------- */ - -template -KOKKOS_INLINE_FUNCTION -double FixLangevinKokkos::compute_energy_item(int i) const -{ - double energy; - if (mask[i] & groupbit) - energy = d_flangevin(i,0)*v(i,0) + d_flangevin(i,1)*v(i,1) + - d_flangevin(i,2)*v(i,2); - return energy; -} - -/* ---------------------------------------------------------------------- - tally energy transfer to thermal reservoir - ------------------------------------------------------------------------- */ - -template -void FixLangevinKokkos::end_of_step() -{ - if (!tallyflag && !gjfflag) return; - - v = atomKK->k_v.template view(); - f = atomKK->k_f.template view(); - mask = atomKK->k_mask.template view(); - - atomKK->sync(execution_space,V_MASK | MASK_MASK); - int nlocal = atomKK->nlocal; - - energy_onestep = 0.0; - - k_flangevin.template sync(); - FixLangevinKokkosTallyEnergyFunctor tally_functor(this); - Kokkos::parallel_reduce(nlocal,tally_functor,energy_onestep); - - if (gjfflag){ - if (rmass.data()) { - FixLangevinKokkosEndOfStepFunctor functor(this); - Kokkos::parallel_for(nlocal,functor); - } else { - mass = atomKK->k_mass.view(); - FixLangevinKokkosEndOfStepFunctor functor(this); - Kokkos::parallel_for(nlocal,functor); - } - } - - energy += energy_onestep*update->dt; -} - -template -KOKKOS_INLINE_FUNCTION -void FixLangevinKokkos::end_of_step_item(int i) const { - double tmp[3]; - if (mask[i] & groupbit) { - const double dtfm = force->ftm2v * 0.5 * dt / mass[type[i]]; - tmp[0] = v(i,0); - tmp[1] = v(i,1); - tmp[2] = v(i,2); - if (!fsflag){ - v(i,0) = d_lv(i,0); - v(i,1) = d_lv(i,1); - v(i,2) = d_lv(i,2); - } else { - v(i,0) = 0.5 * gjfsib * gjfsib * (v(i,0) + dtfm * f(i,0) / gjfa) + - dtfm * 0.5 * (gjfsib * d_flangevin(i,0) - d_franprev(i,0)) + - (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,0); - v(i,1) = 0.5 * gjfsib * gjfsib * (v(i,1) + dtfm * f(i,1) / gjfa) + - dtfm * 0.5 * (gjfsib * d_flangevin(i,0) - d_franprev(i,1)) + - (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,1); - v(i,2) = 0.5 * gjfsib * gjfsib * (v(i,2) + dtfm * f(i,2) / gjfa) + - dtfm * 0.5 * (gjfsib * d_flangevin(i,0) - d_franprev(i,2)) + - (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,2); - } - d_lv(i,0) = tmp[0]; - d_lv(i,1) = tmp[1]; - d_lv(i,2) = tmp[2]; - } -} - -template -KOKKOS_INLINE_FUNCTION -void FixLangevinKokkos::end_of_step_rmass_item(int i) const -{ - double tmp[3]; - if (mask[i] & groupbit) { - const double dtfm = force->ftm2v * 0.5 * dt / rmass[i]; - tmp[0] = v(i,0); - tmp[1] = v(i,1); - tmp[2] = v(i,2); - if (!fsflag){ - v(i,0) = d_lv(i,0); - v(i,1) = d_lv(i,1); - v(i,2) = d_lv(i,2); - } else { - v(i,0) = 0.5 * gjfsib * gjfsib * (v(i,0) + dtfm * f(i,0) / gjfa) + - dtfm * 0.5 * (gjfsib * d_flangevin(i,0) - d_franprev(i,0)) + - (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,0); - v(i,1) = 0.5 * gjfsib * gjfsib * (v(i,1) + dtfm * f(i,1) / gjfa) + - dtfm * 0.5 * (gjfsib * d_flangevin(i,1) - d_franprev(i,1)) + - (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,1); - v(i,2) = 0.5 * gjfsib * gjfsib * (v(i,2) + dtfm * f(i,2) / gjfa) + - dtfm * 0.5 * (gjfsib * d_flangevin(i,2) - d_franprev(i,2)) + - (gjfsib * gjfa * 0.5 + dt * 0.25 / t_period / gjfsib) * d_lv(i,2); - } - d_lv(i,0) = tmp[0]; - d_lv(i,1) = tmp[1]; - d_lv(i,2) = tmp[2]; - } -} - -/* ---------------------------------------------------------------------- - copy values within local atom-based array - ------------------------------------------------------------------------- */ - -template -void FixLangevinKokkos::copy_arrays(int i, int j, int delflag) -{ - h_franprev(j,0) = h_franprev(i,0); - h_franprev(j,1) = h_franprev(i,1); - h_franprev(j,2) = h_franprev(i,2); - h_lv(j,0) = h_lv(i,0); - h_lv(j,1) = h_lv(i,1); - h_lv(j,2) = h_lv(i,2); - - k_franprev.template modify(); - k_lv.template modify(); - -} - -/* ---------------------------------------------------------------------- */ - -template -void FixLangevinKokkos::cleanup_copy() -{ - random = NULL; - tstr = NULL; - gfactor1 = NULL; - gfactor2 = NULL; - ratio = NULL; - id_temp = NULL; - flangevin = NULL; - tforce = NULL; - gjfflag = 0; - franprev = NULL; - lv = NULL; - id = style = NULL; - vatom = NULL; -} - -namespace LAMMPS_NS { -template class FixLangevinKokkos; -#ifdef KOKKOS_ENABLE_CUDA -template class FixLangevinKokkos; -#endif -} - diff --git a/fix_langevin_kokkos.h b/fix_langevin_kokkos.h deleted file mode 100644 index a6d467dfd7..0000000000 --- a/fix_langevin_kokkos.h +++ /dev/null @@ -1,293 +0,0 @@ -/* -*- 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 FIX_CLASS - -FixStyle(langevin/kk,FixLangevinKokkos) -FixStyle(langevin/kk/device,FixLangevinKokkos) -FixStyle(langevin/kk/host,FixLangevinKokkos) - -#else - -#ifndef LMP_FIX_LANGEVIN_KOKKOS_H -#define LMP_FIX_LANGEVIN_KOKKOS_H - -#include "fix_langevin.h" -#include "kokkos_type.h" -#include "Kokkos_Random.hpp" -#include "comm_kokkos.h" - -namespace LAMMPS_NS { - - struct s_FSUM { - double fx, fy, fz; - KOKKOS_INLINE_FUNCTION - s_FSUM() { - fx = fy = fz = 0.0; - } - KOKKOS_INLINE_FUNCTION - s_FSUM& operator+=(const s_FSUM &rhs){ - fx += rhs.fx; - fy += rhs.fy; - fz += rhs.fz; - return *this; - } - - KOKKOS_INLINE_FUNCTION - volatile s_FSUM& operator+=(const volatile s_FSUM &rhs) volatile { - fx += rhs.fx; - fy += rhs.fy; - fz += rhs.fz; - return *this; - } - }; - typedef s_FSUM FSUM; - - template - class FixLangevinKokkos; - - template - class FixLangevinKokkosInitialIntegrateFunctor; - - template - class FixLangevinKokkosPostForceFunctor; - - template class FixLangevinKokkosZeroForceFunctor; - - template class FixLangevinKokkosTallyEnergyFunctor; - - template - class FixLangevinKokkos : public FixLangevin { - public: - FixLangevinKokkos(class LAMMPS *, int, char **); - ~FixLangevinKokkos(); - - void cleanup_copy(); - void init(); - void initial_integrate(int); - void post_force(int); - void reset_dt(); - void grow_arrays(int); - void copy_arrays(int i, int j, int delflag); - double compute_scalar(); - void end_of_step(); - - KOKKOS_INLINE_FUNCTION - void initial_integrate_item(int) const; - - KOKKOS_INLINE_FUNCTION - void initial_integrate_rmass_item(int) const; - - template - KOKKOS_INLINE_FUNCTION - FSUM post_force_item(int) const; - - KOKKOS_INLINE_FUNCTION - void zero_force_item(int) const; - - KOKKOS_INLINE_FUNCTION - double compute_energy_item(int) const; - - KOKKOS_INLINE_FUNCTION - void end_of_step_item(int) const; - - KOKKOS_INLINE_FUNCTION - void end_of_step_rmass_item(int) const; - - private: - class CommKokkos *commKK; - - typename ArrayTypes::t_float_1d rmass; - typename ArrayTypes::t_float_1d mass; - typename ArrayTypes::tdual_double_2d k_franprev; - typename ArrayTypes::t_double_2d d_franprev; - HAT::t_double_2d h_franprev; - - typename ArrayTypes::tdual_double_2d k_lv; - typename ArrayTypes::t_double_2d d_lv; - HAT::t_double_2d h_lv; - - typename ArrayTypes::tdual_double_2d k_flangevin; - typename ArrayTypes::t_double_2d d_flangevin; - HAT::t_double_2d h_flangevin; - - typename ArrayTypes::tdual_double_1d k_tforce; - typename ArrayTypes::t_double_1d d_tforce; - HAT::t_double_1d h_tforce; - - typename ArrayTypes::t_v_array v; - typename ArrayTypes::t_f_array f; - typename ArrayTypes::t_int_1d type; - typename ArrayTypes::t_int_1d mask; - - typename ArrayTypes::tdual_double_1d k_gfactor1, k_gfactor2, k_ratio; - typename ArrayTypes::t_double_1d d_gfactor1, d_gfactor2, d_ratio; - HAT::t_double_1d h_gfactor1, h_gfactor2, h_ratio; - - typedef Kokkos::DualView - tdual_double_1d_3n; - tdual_double_1d_3n k_fsumall; - typename tdual_double_1d_3n::t_dev d_fsumall; - typename tdual_double_1d_3n::t_host h_fsumall; - - double boltz,dt,mvv2e,ftm2v,fran_prop_const; - - void compute_target(); - - Kokkos::Random_XorShift64_Pool rand_pool; - typedef typename Kokkos::Random_XorShift64_Pool::generator_type rand_type; - - }; - - template - struct FixLangevinKokkosInitialIntegrateFunctor { - typedef DeviceType device_type ; - FixLangevinKokkos c; - - FixLangevinKokkosInitialIntegrateFunctor(FixLangevinKokkos* c_ptr): - c(*c_ptr) {c.cleanup_copy();}; - - KOKKOS_INLINE_FUNCTION - void operator()(const int i) const { - c.initial_integrate_item(i); - } - }; - - - template - struct FixLangevinKokkosPostForceFunctor { - - typedef DeviceType device_type; - typedef FSUM value_type; - FixLangevinKokkos c; - - FixLangevinKokkosPostForceFunctor(FixLangevinKokkos* c_ptr): - c(*c_ptr) {} - ~FixLangevinKokkosPostForceFunctor(){c.cleanup_copy();} - - KOKKOS_INLINE_FUNCTION - void operator()(const int i) const { - c.template post_force_item(i); - } - - KOKKOS_INLINE_FUNCTION - void operator()(const int i, value_type &fsum) const { - - fsum += c.template post_force_item(i); - } - - KOKKOS_INLINE_FUNCTION - static void init(volatile value_type &update) { - update.fx = 0.0; - update.fy = 0.0; - update.fz = 0.0; - } - KOKKOS_INLINE_FUNCTION - static void join(volatile value_type &update, - const volatile value_type &source) { - update.fx += source.fx; - update.fy += source.fy; - update.fz += source.fz; - } - - }; - - template - struct FixLangevinKokkosZeroForceFunctor { - typedef DeviceType device_type ; - FixLangevinKokkos c; - - FixLangevinKokkosZeroForceFunctor(FixLangevinKokkos* c_ptr): - c(*c_ptr) {c.cleanup_copy();} - - KOKKOS_INLINE_FUNCTION - void operator()(const int i) const { - c.zero_force_item(i); - } - }; - - template - struct FixLangevinKokkosTallyEnergyFunctor { - typedef DeviceType device_type ; - FixLangevinKokkos c; - typedef double value_type; - FixLangevinKokkosTallyEnergyFunctor(FixLangevinKokkos* c_ptr): - c(*c_ptr) {c.cleanup_copy();} - - KOKKOS_INLINE_FUNCTION - void operator()(const int i, value_type &energy) const { - energy += c.compute_energy_item(i); - } - KOKKOS_INLINE_FUNCTION - static void init(volatile value_type &update) { - update = 0.0; - } - KOKKOS_INLINE_FUNCTION - static void join(volatile value_type &update, - const volatile value_type &source) { - update += source; - } - }; - - template - struct FixLangevinKokkosEndOfStepFunctor { - typedef DeviceType device_type ; - FixLangevinKokkos c; - - FixLangevinKokkosEndOfStepFunctor(FixLangevinKokkos* c_ptr): - c(*c_ptr) {c.cleanup_copy();} - - KOKKOS_INLINE_FUNCTION - void operator()(const int i) const { - if (RMass) c.end_of_step_rmass_item(i); - else c.end_of_step_item(i); - } - }; -} - -#endif -#endif - -/* ERROR/WARNING messages: - -E: Fix langevin omega is not yet implemented with kokkos - -This option is not yet available. - -E: Fix langevin angmom is not yet implemented with kokkos - -This option is not yet available. - -E: Cannot zero Langevin force of 0 atoms - -The group has zero atoms, so you cannot request its force -be zeroed. - -E: Fix langevin variable returned negative temperature - -Self-explanatory. - -E: Fix langevin gjf with tbias is not yet implemented with kokkos - -This option is not yet available. - -W: Fix langevin gjf using random gaussians is not implemented with kokkos - -This will most likely cause errors in kinetic fluctuations. - -*/ diff --git a/src/KOKKOS/fix_langevin_kokkos.cpp b/src/KOKKOS/fix_langevin_kokkos.cpp index 8ec51ffa71..0618631581 100644 --- a/src/KOKKOS/fix_langevin_kokkos.cpp +++ b/src/KOKKOS/fix_langevin_kokkos.cpp @@ -11,23 +11,20 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include -#include -#include #include "fix_langevin_kokkos.h" +#include #include "atom_masks.h" #include "atom_kokkos.h" #include "force.h" +#include "group.h" #include "update.h" -#include "respa.h" #include "error.h" #include "memory_kokkos.h" -#include "group.h" -#include "random_mars.h" #include "compute.h" #include "comm.h" #include "modify.h" #include "input.h" +#include "region.h" #include "variable.h" using namespace LAMMPS_NS; @@ -117,8 +114,7 @@ void FixLangevinKokkos::init() if(gjfflag && tbiasflag) error->all(FLERR,"Fix langevin gjf + tbias is not yet implemented with kokkos"); if(gjfflag && tbiasflag) - error->warning(FLERR,"Fix langevin gjf + kokkos is not implemented with random gaussians," - " this may cause errors in kinetic fluctuations"); + error->warning(FLERR,"Fix langevin gjf + kokkos is not implemented with random gaussians"); // prefactors are modified in the init k_gfactor1.template modify(); @@ -138,9 +134,7 @@ void FixLangevinKokkos::grow_arrays(int nmax) h_lv = k_lv.template view(); } -/* ---------------------------------------------------------------------- - allow for both per-type and per-atom mass -------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- */ template void FixLangevinKokkos::initial_integrate(int vflag) diff --git a/src/KOKKOS/fix_langevin_kokkos.h b/src/KOKKOS/fix_langevin_kokkos.h index 4d27b34a7e..a6d467dfd7 100644 --- a/src/KOKKOS/fix_langevin_kokkos.h +++ b/src/KOKKOS/fix_langevin_kokkos.h @@ -282,4 +282,12 @@ E: Fix langevin variable returned negative temperature Self-explanatory. +E: Fix langevin gjf with tbias is not yet implemented with kokkos + +This option is not yet available. + +W: Fix langevin gjf using random gaussians is not implemented with kokkos + +This will most likely cause errors in kinetic fluctuations. + */ From 971f4763e3fbbba60ac8b0dcc494e171dea001ee Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Mon, 16 Sep 2019 16:36:50 -0700 Subject: [PATCH 131/237] removed text referencing removed graphs --- doc/src/fix_langevin.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/src/fix_langevin.txt b/doc/src/fix_langevin.txt index 8dd143bdb7..0aa65be0f5 100644 --- a/doc/src/fix_langevin.txt +++ b/doc/src/fix_langevin.txt @@ -260,7 +260,6 @@ recall that while the equilibrium statistics is appropriately sampled, the corre of the trajectories may not be for large time steps, as is the case for all thermostats. All thermostats provide good statistics and dynamics for small time steps. The 2GJ half-step velocity {vhalf} samples the correct velocity distribution for the {gjf} trajectory. -Results of simulations using the {gjf} option with both {vfull} and {vhalf} compared to other available thermostats are shown in the LAMMPS directory: examples/gjf. This updated implementation of the {gjf} thermostat includes the choice between From 66ddcd86a31e85b0f4f569dd27a7911755857448 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 17 Sep 2019 02:50:37 -0700 Subject: [PATCH 132/237] USER-INTEL: Explictly disabling G2S opts to improve lj/cut, eam, and dpd performance. Removing -fno-alias flag from Makefiles due to issues with 2019 compilers and adding explicit _noalias qualifier for some variables to compensate. --- src/MAKE/OPTIONS/Makefile.intel_cpu | 2 +- src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi | 2 +- src/MAKE/OPTIONS/Makefile.intel_cpu_mpich | 2 +- src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi | 2 +- src/MAKE/OPTIONS/Makefile.knl | 2 +- src/USER-INTEL/npair_full_bin_ghost_intel.cpp | 12 ++++++------ src/USER-INTEL/npair_intel.cpp | 10 +++++----- src/USER-INTEL/pair_dpd_intel.cpp | 2 +- src/USER-INTEL/pair_eam_intel.cpp | 10 +++++----- src/USER-INTEL/pair_lj_cut_intel.cpp | 2 +- 10 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu b/src/MAKE/OPTIONS/Makefile.intel_cpu index 831b16d854..c2691b8cdb 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu @@ -9,7 +9,7 @@ SHELL = /bin/sh CC = mpiicpc OPTFLAGS = -xHost -O2 -fp-model fast=2 -no-prec-div -qoverride-limits \ -qopt-zmm-usage=high -CCFLAGS = -qopenmp -qno-offload -fno-alias -ansi-alias -restrict \ +CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) SHFLAGS = -fPIC DEPFLAGS = -M diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi b/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi index 926518f354..90f5ff9e3d 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi @@ -9,7 +9,7 @@ SHELL = /bin/sh CC = mpiicpc OPTFLAGS = -xHost -O2 -fp-model fast=2 -no-prec-div -qoverride-limits \ -qopt-zmm-usage=high -CCFLAGS = -qopenmp -qno-offload -fno-alias -ansi-alias -restrict \ +CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) SHFLAGS = -fPIC DEPFLAGS = -M diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich b/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich index 61934b69b4..21e481d377 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich @@ -9,7 +9,7 @@ SHELL = /bin/sh CC = mpicxx -cxx=icc OPTFLAGS = -xHost -O2 -fp-model fast=2 -no-prec-div -qoverride-limits \ -qopt-zmm-usage=high -CCFLAGS = -qopenmp -qno-offload -fno-alias -ansi-alias -restrict \ +CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) SHFLAGS = -fPIC DEPFLAGS = -M diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi b/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi index ee26443f7d..9cbb8e3344 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi @@ -10,7 +10,7 @@ export OMPI_CXX = icc CC = mpicxx OPTFLAGS = -xHost -O2 -fp-model fast=2 -no-prec-div -qoverride-limits \ -qopt-zmm-usage=high -CCFLAGS = -qopenmp -qno-offload -fno-alias -ansi-alias -restrict \ +CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) SHFLAGS = -fPIC DEPFLAGS = -M diff --git a/src/MAKE/OPTIONS/Makefile.knl b/src/MAKE/OPTIONS/Makefile.knl index 8e266a4fce..c8536a7258 100644 --- a/src/MAKE/OPTIONS/Makefile.knl +++ b/src/MAKE/OPTIONS/Makefile.knl @@ -8,7 +8,7 @@ SHELL = /bin/sh CC = mpiicpc OPTFLAGS = -xMIC-AVX512 -O2 -fp-model fast=2 -no-prec-div -qoverride-limits -CCFLAGS = -qopenmp -qno-offload -fno-alias -ansi-alias -restrict \ +CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) SHFLAGS = -fPIC DEPFLAGS = -M diff --git a/src/USER-INTEL/npair_full_bin_ghost_intel.cpp b/src/USER-INTEL/npair_full_bin_ghost_intel.cpp index e1e09fd3da..00b032d495 100644 --- a/src/USER-INTEL/npair_full_bin_ghost_intel.cpp +++ b/src/USER-INTEL/npair_full_bin_ghost_intel.cpp @@ -150,8 +150,8 @@ void NPairFullBinGhostIntel::fbi(const int offload, NeighList * list, const int nlocal = atom->nlocal; #ifndef _LMP_INTEL_OFFLOAD - int * const mask = atom->mask; - tagint * const molecule = atom->molecule; + int * _noalias const mask = atom->mask; + tagint * _noalias const molecule = atom->molecule; #endif int moltemplate; @@ -162,7 +162,7 @@ void NPairFullBinGhostIntel::fbi(const int offload, NeighList * list, "Can't use moltemplate with npair style full/bin/ghost/intel."); int tnum; - int *overflow; + int * _noalias overflow; #ifdef _LMP_INTEL_OFFLOAD double *timer_compute; if (offload) { @@ -200,7 +200,7 @@ void NPairFullBinGhostIntel::fbi(const int offload, NeighList * list, const int mbinx = this->mbinx; const int mbiny = this->mbiny; const int mbinz = this->mbinz; - const int * const stencilxyz = &this->stencilxyz[0][0]; + const int * _noalias const stencilxyz = &this->stencilxyz[0][0]; int sb = 1; if (special_flag[1] == 0) { @@ -295,7 +295,7 @@ void NPairFullBinGhostIntel::fbi(const int offload, NeighList * list, int pack_offset = maxnbors; int ct = (ifrom + tid * 2) * maxnbors; - int *neighptr = intel_list + ct; + int * _noalias neighptr = intel_list + ct; const int obound = pack_offset + maxnbors * 2; const int toffs = tid * ncache_stride; @@ -370,7 +370,7 @@ void NPairFullBinGhostIntel::fbi(const int offload, NeighList * list, int n = maxnbors; int n2 = n * 2; - int *neighptr2 = neighptr; + int * _noalias neighptr2 = neighptr; const flt_t * _noalias cutsq; if (i < nlocal) cutsq = cutneighsq; else cutsq = cutneighghostsq; diff --git a/src/USER-INTEL/npair_intel.cpp b/src/USER-INTEL/npair_intel.cpp index ad9ec6e7d3..a82d3f29e5 100644 --- a/src/USER-INTEL/npair_intel.cpp +++ b/src/USER-INTEL/npair_intel.cpp @@ -154,12 +154,12 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, const int nlocal = atom->nlocal; #ifndef _LMP_INTEL_OFFLOAD - int * const mask = atom->mask; - tagint * const molecule = atom->molecule; + int * _noalias const mask = atom->mask; + tagint * _noalias const molecule = atom->molecule; #endif int tnum; - int *overflow; + int * _noalias overflow; #ifdef _LMP_INTEL_OFFLOAD double *timer_compute; if (offload) { @@ -298,8 +298,8 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, const int obound = maxnbors * 3; #endif int ct = (ifrom + tid * 2) * maxnbors; - int *neighptr = intel_list + ct; - int *neighptr2; + int * _noalias neighptr = intel_list + ct; + int * _noalias neighptr2; if (THREE) neighptr2 = neighptr; const int toffs = tid * ncache_stride; diff --git a/src/USER-INTEL/pair_dpd_intel.cpp b/src/USER-INTEL/pair_dpd_intel.cpp index 4ebdce9a96..690496d546 100644 --- a/src/USER-INTEL/pair_dpd_intel.cpp +++ b/src/USER-INTEL/pair_dpd_intel.cpp @@ -283,7 +283,7 @@ void PairDPDIntel::eval(const int offload, const int vflag, } #if defined(LMP_SIMD_COMPILER) - #pragma vector aligned + #pragma vector aligned nog2s #pragma simd reduction(+:fxtmp, fytmp, fztmp, fwtmp, sevdwl, \ sv0, sv1, sv2, sv3, sv4, sv5) #endif diff --git a/src/USER-INTEL/pair_eam_intel.cpp b/src/USER-INTEL/pair_eam_intel.cpp index 32d7e74cbc..984823f07e 100644 --- a/src/USER-INTEL/pair_eam_intel.cpp +++ b/src/USER-INTEL/pair_eam_intel.cpp @@ -305,7 +305,7 @@ void PairEAMIntel::eval(const int offload, const int vflag, acc_t rhoi = (acc_t)0.0; int ej = 0; #if defined(LMP_SIMD_COMPILER) - #pragma vector aligned + #pragma vector aligned nog2s #pragma ivdep #endif for (int jj = 0; jj < jnum; jj++) { @@ -324,7 +324,7 @@ void PairEAMIntel::eval(const int offload, const int vflag, } #if defined(LMP_SIMD_COMPILER) - #pragma vector aligned + #pragma vector aligned nog2s #pragma simd reduction(+:rhoi) #endif for (int jj = 0; jj < ej; jj++) { @@ -411,7 +411,7 @@ void PairEAMIntel::eval(const int offload, const int vflag, if (EFLAG) tevdwl = (acc_t)0.0; #if defined(LMP_SIMD_COMPILER) - #pragma vector aligned + #pragma vector aligned nog2s #pragma simd reduction(+:tevdwl) #endif for (int ii = iifrom; ii < iito; ++ii) { @@ -485,7 +485,7 @@ void PairEAMIntel::eval(const int offload, const int vflag, int ej = 0; #if defined(LMP_SIMD_COMPILER) - #pragma vector aligned + #pragma vector aligned nog2s #pragma ivdep #endif for (int jj = 0; jj < jnum; jj++) { @@ -507,7 +507,7 @@ void PairEAMIntel::eval(const int offload, const int vflag, } #if defined(LMP_SIMD_COMPILER) - #pragma vector aligned + #pragma vector aligned nog2s #pragma simd reduction(+:fxtmp, fytmp, fztmp, fwtmp, sevdwl, \ sv0, sv1, sv2, sv3, sv4, sv5) #endif diff --git a/src/USER-INTEL/pair_lj_cut_intel.cpp b/src/USER-INTEL/pair_lj_cut_intel.cpp index 39db9c7333..f6f83b752a 100644 --- a/src/USER-INTEL/pair_lj_cut_intel.cpp +++ b/src/USER-INTEL/pair_lj_cut_intel.cpp @@ -236,7 +236,7 @@ void PairLJCutIntel::eval(const int offload, const int vflag, if (vflag==1) sv0 = sv1 = sv2 = sv3 = sv4 = sv5 = (acc_t)0; #if defined(LMP_SIMD_COMPILER) - #pragma vector aligned + #pragma vector aligned nog2s #pragma simd reduction(+:fxtmp, fytmp, fztmp, fwtmp, sevdwl, \ sv0, sv1, sv2, sv3, sv4, sv5) #endif From b2c6244b793ff95fcc160457c6e39f9160e89a10 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 17 Sep 2019 08:24:40 -0400 Subject: [PATCH 133/237] fix typos --- src/USER-DIFFRACTION/compute_saed.cpp | 2 +- src/USER-DIFFRACTION/compute_xrd.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/USER-DIFFRACTION/compute_saed.cpp b/src/USER-DIFFRACTION/compute_saed.cpp index 971d9bd380..3ae25f223c 100644 --- a/src/USER-DIFFRACTION/compute_saed.cpp +++ b/src/USER-DIFFRACTION/compute_saed.cpp @@ -510,7 +510,7 @@ void ComputeSAED::compute_vector() if (me == 0 && echo) { if (screen) - fprintf(screen," 100%% \nTime ellapsed during compute_saed = %0.2f sec using %0.2f Mbytes/processor\n-----\n", t2-t0, bytes/1024.0/1024.0); + fprintf(screen," 100%% \nTime elapsed during compute_saed = %0.2f sec using %0.2f Mbytes/processor\n-----\n", t2-t0, bytes/1024.0/1024.0); } delete [] xlocal; diff --git a/src/USER-DIFFRACTION/compute_xrd.cpp b/src/USER-DIFFRACTION/compute_xrd.cpp index f48951f1ff..7f69449282 100644 --- a/src/USER-DIFFRACTION/compute_xrd.cpp +++ b/src/USER-DIFFRACTION/compute_xrd.cpp @@ -513,7 +513,7 @@ void ComputeXRD::compute_array() if (me == 0 && echo) { if (screen) - fprintf(screen," 100%% \nTime ellapsed during compute_xrd = %0.2f sec using %0.2f Mbytes/processor\n-----\n", t2-t0, bytes/1024.0/1024.0); + fprintf(screen," 100%% \nTime elapsed during compute_xrd = %0.2f sec using %0.2f Mbytes/processor\n-----\n", t2-t0, bytes/1024.0/1024.0); } delete [] scratch; From 0c9697a68537d431116fb8b57caf4bcbfc947c01 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 17 Sep 2019 08:33:25 -0400 Subject: [PATCH 134/237] documentation whitespace cleanup --- doc/src/Build_development.txt | 2 +- doc/src/Howto_spins.txt | 16 +- doc/src/Speed_kokkos.txt | 88 +++++------ doc/src/Tools.txt | 4 +- doc/src/compute.txt | 4 +- doc/src/compute_coord_atom.txt | 2 +- doc/src/compute_hma.txt | 36 ++--- doc/src/compute_orientorder_atom.txt | 12 +- doc/src/compute_sna_atom.txt | 2 +- doc/src/compute_spin.txt | 12 +- doc/src/dynamical_matrix.txt | 2 +- doc/src/fix.txt | 4 +- doc/src/fix_controller.txt | 1 - doc/src/fix_neb_spin.txt | 22 +-- doc/src/fix_precession_spin.txt | 14 +- doc/src/fix_rigid_meso.txt | 2 +- doc/src/fix_setforce.txt | 14 +- doc/src/kspace_style.txt | 10 +- doc/src/min_modify.txt | 10 +- doc/src/min_spin.txt | 22 +-- doc/src/min_style.txt | 10 +- doc/src/minimize.txt | 6 +- doc/src/neb_spin.txt | 128 +++++++-------- doc/src/package.txt | 200 ++++++++++++------------ doc/src/pair_e3b.txt | 4 +- doc/src/pair_granular.txt | 2 +- doc/src/pair_kolmogorov_crespi_full.txt | 4 +- doc/src/pair_mm3_switch3_coulgauss.txt | 2 +- doc/src/pair_oxdna2.txt | 4 +- doc/src/pair_snap.txt | 4 +- doc/src/pair_spin_dipole.txt | 24 +-- doc/src/pair_spin_dmi.txt | 4 +- doc/src/pair_spin_neel.txt | 2 +- 33 files changed, 336 insertions(+), 337 deletions(-) diff --git a/doc/src/Build_development.txt b/doc/src/Build_development.txt index 16a3d3d20e..bd3897fba6 100644 --- a/doc/src/Build_development.txt +++ b/doc/src/Build_development.txt @@ -50,7 +50,7 @@ Code Coverage and Testing :h4,link(testing) We do extensive regression testing of the LAMMPS code base on a continuous basis. Some of the logic to do this has been added to the CMake build so -developers can run the tests directly on their workstation. +developers can run the tests directly on their workstation. NOTE: this is incomplete and only represents a small subset of tests that we run diff --git a/doc/src/Howto_spins.txt b/doc/src/Howto_spins.txt index 80b2a54fe4..c4bdc502ce 100644 --- a/doc/src/Howto_spins.txt +++ b/doc/src/Howto_spins.txt @@ -43,19 +43,19 @@ langevin/spin"_fix_langevin_spin.html. It allows to either dissipate the thermal energy of the Langevin thermostat, or to perform a relaxation of the magnetic configuration toward an equilibrium state. -The command "fix setforce/spin"_fix_setforce.html allows to set the -components of the magnetic precession vectors (while erasing and -replacing the previously computed magnetic precession vectors on -the atom). -This command can be used to freeze the magnetic moment of certain -atoms in the simulation by zeroing their precession vector. +The command "fix setforce/spin"_fix_setforce.html allows to set the +components of the magnetic precession vectors (while erasing and +replacing the previously computed magnetic precession vectors on +the atom). +This command can be used to freeze the magnetic moment of certain +atoms in the simulation by zeroing their precession vector. The command "fix nve/spin"_fix_nve_spin.html can be used to -perform a symplectic integration of the combined dynamics of spins +perform a symplectic integration of the combined dynamics of spins and atomic motions. The minimization style "min/spin"_min_spin.html can be applied -to the spins to perform a minimization of the spin configuration. +to the spins to perform a minimization of the spin configuration. All the computed magnetic properties can be output by two main diff --git a/doc/src/Speed_kokkos.txt b/doc/src/Speed_kokkos.txt index 99d29864dc..66f8fab8d9 100644 --- a/doc/src/Speed_kokkos.txt +++ b/doc/src/Speed_kokkos.txt @@ -46,14 +46,14 @@ software version 7.5 or later must be installed on your system. See the discussion for the "GPU package"_Speed_gpu.html for details of how to check and do this. -NOTE: Kokkos with CUDA currently implicitly assumes that the MPI library -is CUDA-aware. This is not always the case, especially when using -pre-compiled MPI libraries provided by a Linux distribution. This is not -a problem when using only a single GPU with a single MPI rank. When -running with multiple MPI ranks, you may see segmentation faults without -CUDA-aware MPI support. These can be avoided by adding the flags "-pk -kokkos cuda/aware off"_Run_options.html to the LAMMPS command line or by -using the command "package kokkos cuda/aware off"_package.html in the +NOTE: Kokkos with CUDA currently implicitly assumes that the MPI library +is CUDA-aware. This is not always the case, especially when using +pre-compiled MPI libraries provided by a Linux distribution. This is not +a problem when using only a single GPU with a single MPI rank. When +running with multiple MPI ranks, you may see segmentation faults without +CUDA-aware MPI support. These can be avoided by adding the flags "-pk +kokkos cuda/aware off"_Run_options.html to the LAMMPS command line or by +using the command "package kokkos cuda/aware off"_package.html in the input file. [Building LAMMPS with the KOKKOS package:] @@ -110,10 +110,10 @@ Makefile.kokkos_mpi_only) will give better performance than the OpenMP back end (i.e. Makefile.kokkos_omp) because some of the overhead to make the code thread-safe is removed. -NOTE: Use the "-pk kokkos" "command-line switch"_Run_options.html to -change the default "package kokkos"_package.html options. See its doc -page for details and default settings. Experimenting with its options -can provide a speed-up for specific calculations. For example: +NOTE: Use the "-pk kokkos" "command-line switch"_Run_options.html to +change the default "package kokkos"_package.html options. See its doc +page for details and default settings. Experimenting with its options +can provide a speed-up for specific calculations. For example: mpirun -np 16 lmp_kokkos_mpi_only -k on -sf kk -pk kokkos newton on neigh half comm no -in in.lj # Newton on, Half neighbor list, non-threaded comm :pre @@ -183,15 +183,15 @@ tasks/node. The "-k on t Nt" command-line switch sets the number of threads/task as Nt. The product of these two values should be N, i.e. 256 or 264. -NOTE: The default for the "package kokkos"_package.html command when -running on KNL is to use "half" neighbor lists and set the Newton flag -to "on" for both pairwise and bonded interactions. This will typically -be best for many-body potentials. For simpler pair-wise potentials, it -may be faster to use a "full" neighbor list with Newton flag to "off". -Use the "-pk kokkos" "command-line switch"_Run_options.html to change -the default "package kokkos"_package.html options. See its doc page for -details and default settings. Experimenting with its options can provide -a speed-up for specific calculations. For example: +NOTE: The default for the "package kokkos"_package.html command when +running on KNL is to use "half" neighbor lists and set the Newton flag +to "on" for both pairwise and bonded interactions. This will typically +be best for many-body potentials. For simpler pair-wise potentials, it +may be faster to use a "full" neighbor list with Newton flag to "off". +Use the "-pk kokkos" "command-line switch"_Run_options.html to change +the default "package kokkos"_package.html options. See its doc page for +details and default settings. Experimenting with its options can provide +a speed-up for specific calculations. For example: mpirun -np 64 lmp_kokkos_phi -k on t 4 -sf kk -pk kokkos comm host -in in.reax # Newton on, half neighbor list, threaded comm mpirun -np 64 lmp_kokkos_phi -k on t 4 -sf kk -pk kokkos newton off neigh full comm no -in in.lj # Newton off, full neighbor list, non-threaded comm :pre @@ -206,19 +206,19 @@ supports. [Running on GPUs:] -Use the "-k" "command-line switch"_Run_options.html to specify the -number of GPUs per node. Typically the -np setting of the mpirun command -should set the number of MPI tasks/node to be equal to the number of -physical GPUs on the node. You can assign multiple MPI tasks to the same -GPU with the KOKKOS package, but this is usually only faster if some -portions of the input script have not been ported to use Kokkos. In this -case, also packing/unpacking communication buffers on the host may give -speedup (see the KOKKOS "package"_package.html command). Using CUDA MPS +Use the "-k" "command-line switch"_Run_options.html to specify the +number of GPUs per node. Typically the -np setting of the mpirun command +should set the number of MPI tasks/node to be equal to the number of +physical GPUs on the node. You can assign multiple MPI tasks to the same +GPU with the KOKKOS package, but this is usually only faster if some +portions of the input script have not been ported to use Kokkos. In this +case, also packing/unpacking communication buffers on the host may give +speedup (see the KOKKOS "package"_package.html command). Using CUDA MPS is recommended in this scenario. -Using a CUDA-aware MPI library is highly recommended. CUDA-aware MPI use can be -avoided by using "-pk kokkos cuda/aware no"_package.html. As above for -multi-core CPUs (and no GPU), if N is the number of physical cores/node, +Using a CUDA-aware MPI library is highly recommended. CUDA-aware MPI use can be +avoided by using "-pk kokkos cuda/aware no"_package.html. As above for +multi-core CPUs (and no GPU), if N is the number of physical cores/node, then the number of MPI tasks/node should not exceed N. -k on g Ng :pre @@ -229,18 +229,18 @@ one or more nodes, each with two GPUs: mpirun -np 2 lmp_kokkos_cuda_openmpi -k on g 2 -sf kk -in in.lj # 1 node, 2 MPI tasks/node, 2 GPUs/node mpirun -np 32 -ppn 2 lmp_kokkos_cuda_openmpi -k on g 2 -sf kk -in in.lj # 16 nodes, 2 MPI tasks/node, 2 GPUs/node (32 GPUs total) :pre -NOTE: The default for the "package kokkos"_package.html command when -running on GPUs is to use "full" neighbor lists and set the Newton flag -to "off" for both pairwise and bonded interactions, along with threaded -communication. When running on Maxwell or Kepler GPUs, this will -typically be best. For Pascal GPUs, using "half" neighbor lists and -setting the Newton flag to "on" may be faster. For many pair styles, -setting the neighbor binsize equal to twice the CPU default value will -give speedup, which is the default when running on GPUs. Use the "-pk -kokkos" "command-line switch"_Run_options.html to change the default -"package kokkos"_package.html options. See its doc page for details and -default settings. Experimenting with its options can provide a speed-up -for specific calculations. For example: +NOTE: The default for the "package kokkos"_package.html command when +running on GPUs is to use "full" neighbor lists and set the Newton flag +to "off" for both pairwise and bonded interactions, along with threaded +communication. When running on Maxwell or Kepler GPUs, this will +typically be best. For Pascal GPUs, using "half" neighbor lists and +setting the Newton flag to "on" may be faster. For many pair styles, +setting the neighbor binsize equal to twice the CPU default value will +give speedup, which is the default when running on GPUs. Use the "-pk +kokkos" "command-line switch"_Run_options.html to change the default +"package kokkos"_package.html options. See its doc page for details and +default settings. Experimenting with its options can provide a speed-up +for specific calculations. For example: mpirun -np 2 lmp_kokkos_cuda_openmpi -k on g 2 -sf kk -pk kokkos newton on neigh half binsize 2.8 -in in.lj # Newton on, half neighbor list, set binsize = neighbor ghost cutoff :pre diff --git a/doc/src/Tools.txt b/doc/src/Tools.txt index eb7b6d81b8..cd01187805 100644 --- a/doc/src/Tools.txt +++ b/doc/src/Tools.txt @@ -515,13 +515,13 @@ Ernst Mach Institute in Germany (georg.ganzenmueller at emi.fhg.de). spin tool :h4,link(spin) The spin sub-directory contains a C file interpolate.c which can -be compiled and used to perform a cubic polynomial interpolation of +be compiled and used to perform a cubic polynomial interpolation of the MEP following a GNEB calculation. See the README file in tools/spin/interpolate_gneb for more details. This tool was written by the SPIN package author, Julien -Tranchida at Sandia National Labs (jtranch at sandia.gov, and by Aleksei +Tranchida at Sandia National Labs (jtranch at sandia.gov, and by Aleksei Ivanov, at University of Iceland (ali5 at hi.is). :line diff --git a/doc/src/compute.txt b/doc/src/compute.txt index 214fbdefc4..b54d2d2e7b 100644 --- a/doc/src/compute.txt +++ b/doc/src/compute.txt @@ -244,7 +244,7 @@ compute"_Commands_compute.html doc page are followed by one or more of "plasticity/atom"_compute_plasticity_atom.html - Peridynamic plasticity for each atom "pressure"_compute_pressure.html - total pressure and pressure tensor "pressure/cylinder"_compute_pressure_cylinder.html - pressure tensor in cylindrical coordinates -"pressure/uef"_compute_pressure_uef.html - pressure tensor in the reference frame of an applied flow field +"pressure/uef"_compute_pressure_uef.html - pressure tensor in the reference frame of an applied flow field "property/atom"_compute_property_atom.html - convert atom attributes to per-atom vectors/arrays "property/chunk"_compute_property_chunk.html - extract various per-chunk attributes "property/local"_compute_property_local.html - convert local attributes to localvectors/arrays @@ -284,7 +284,7 @@ compute"_Commands_compute.html doc page are followed by one or more of "stress/mop"_compute_stress_mop.html - normal components of the local stress tensor using the method of planes "stress/mop/profile"_compute_stress_mop.html - profile of the normal components of the local stress tensor using the method of planes "stress/tally"_compute_tally.html - -"tdpd/cc/atom"_compute_tdpd_cc_atom.html - per-atom chemical concentration of a specified species for each tDPD particle +"tdpd/cc/atom"_compute_tdpd_cc_atom.html - per-atom chemical concentration of a specified species for each tDPD particle "temp"_compute_temp.html - temperature of group of atoms "temp/asphere"_compute_temp_asphere.html - temperature of aspherical particles "temp/body"_compute_temp_body.html - temperature of body particles diff --git a/doc/src/compute_coord_atom.txt b/doc/src/compute_coord_atom.txt index af0be4be56..e4d57a5dc5 100644 --- a/doc/src/compute_coord_atom.txt +++ b/doc/src/compute_coord_atom.txt @@ -47,7 +47,7 @@ neighboring atoms, unless selected by type, type range, or group option, are included in the coordination number tally. The optional {group} keyword allows to specify from which group atoms -contribute to the coordination number. Default setting is group 'all'. +contribute to the coordination number. Default setting is group 'all'. The {typeN} keywords allow specification of which atom types contribute to each coordination number. One coordination number is diff --git a/doc/src/compute_hma.txt b/doc/src/compute_hma.txt index 4ab355abd7..289138eaa8 100644 --- a/doc/src/compute_hma.txt +++ b/doc/src/compute_hma.txt @@ -34,7 +34,7 @@ compute 2 all hma 1 u cv :pre Define a computation that calculates the properties of a solid (potential energy, pressure or heat capacity), using the harmonically-mapped averaging -(HMA) method. +(HMA) method. This command yields much higher precision than the equivalent compute commands ("compute pe"_compute_pe.html, "compute pressure"_compute_pressure.html, etc.) commands during a canonical simulation of an atomic crystal. Specifically, @@ -52,7 +52,7 @@ restricted to simulations in the NVT ensemble. While this compute may be used with any potential in LAMMPS, it will provide inaccurate results for potentials that do not go to 0 at the truncation distance; "pair_lj_smooth_linear"_pair_lj_smooth_linear.html and Ewald summation should -work fine, while "pair_lj"_pair_lj.html will perform poorly unless +work fine, while "pair_lj"_pair_lj.html will perform poorly unless the potential is shifted (via "pair_modify"_pair_modify.html shift) or the cutoff is large. Furthermore, computation of the heat capacity with this compute is restricted to those that implement the single_hessian method in Pair. Implementing single_hessian in additional pair styles is simple. @@ -64,8 +64,8 @@ the list of pair styles that currently implement pair_hessian: :ule In this method, the analytically known harmonic behavior of a crystal is removed from the traditional ensemble -averages, which leads to an accurate and precise measurement of the anharmonic contributions without contamination -by noise produced by the already-known harmonic behavior. +averages, which leads to an accurate and precise measurement of the anharmonic contributions without contamination +by noise produced by the already-known harmonic behavior. A detailed description of this method can be found in ("Moustafa"_#hma-Moustafa). The potential energy is computed by the formula: \begin\{equation\} @@ -74,9 +74,9 @@ A detailed description of this method can be found in ("Moustafa"_#hma-Moustafa) where \(N\) is the number of atoms in the system, \(k_B\) is Boltzmann's constant, \(T\) is the temperature, \(d\) is the -dimensionality of the system (2 or 3 for 2d/3d), \(F\bullet\Delta r\) is the sum of dot products of the -atomic force vectors and displacement (from lattice sites) vectors, and \(U\) is the sum of -pair, bond, angle, dihedral, improper, kspace (long-range), and fix energies. +dimensionality of the system (2 or 3 for 2d/3d), \(F\bullet\Delta r\) is the sum of dot products of the +atomic force vectors and displacement (from lattice sites) vectors, and \(U\) is the sum of +pair, bond, angle, dihedral, improper, kspace (long-range), and fix energies. The pressure is computed by the formula: @@ -118,30 +118,30 @@ When using this keyword, the compute must be first active (it must be included via a "thermo_style custom"_thermo_style.html command) while the atoms are still at their lattice sites (before equilibration). -The temp-ID specified with compute hma command should be same as the fix-ID of Nose-Hoover ("fix nvt"_fix_nh.html) or -Berendsen ("fix temp/berendsen"_fix_temp_berendsen.html) thermostat used for the simulation. While using this command, Langevin thermostat -("fix langevin"_fix_langevin.html) -should be avoided as its extra forces interfere with the HMA implementation. +The temp-ID specified with compute hma command should be same as the fix-ID of Nose-Hoover ("fix nvt"_fix_nh.html) or +Berendsen ("fix temp/berendsen"_fix_temp_berendsen.html) thermostat used for the simulation. While using this command, Langevin thermostat +("fix langevin"_fix_langevin.html) +should be avoided as its extra forces interfere with the HMA implementation. - -NOTE: Compute hma command should be used right after the energy minimization, when the atoms are at their lattice sites. + +NOTE: Compute hma command should be used right after the energy minimization, when the atoms are at their lattice sites. The simulation should not be started before this command has been used in the input script. The following example illustrates the placement of this command in the input script: -min_style cg -minimize 1e-35 1e-15 50000 500000 +min_style cg +minimize 1e-35 1e-15 50000 500000 compute 1 all hma thermostatid u -fix thermostatid all nvt temp 600.0 600.0 100.0 :pre +fix thermostatid all nvt temp 600.0 600.0 100.0 :pre NOTE: Compute hma should be used when the atoms of the solid do not diffuse. Diffusion will reduce the precision in the potential energy computation. - + NOTE: The "fix_modify energy yes"_fix_modify.html command must also be specified if a fix is to contribute potential energy to this command. An example input script that uses this compute is included in @@ -180,5 +180,5 @@ this compute. :line :link(hma-Moustafa) -[(Moustafa)] Sabry G. Moustafa, Andrew J. Schultz, and David A. Kofke, {Very fast averaging of thermal properties of crystals by molecular simulation}, +[(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)"_https://link.aps.org/doi/10.1103/PhysRevE.92.043303 diff --git a/doc/src/compute_orientorder_atom.txt b/doc/src/compute_orientorder_atom.txt index da14c866bd..d59033f179 100644 --- a/doc/src/compute_orientorder_atom.txt +++ b/doc/src/compute_orientorder_atom.txt @@ -76,14 +76,14 @@ parameters up to {Q}12 for a range of commonly encountered high-symmetry structures are given in Table I of "Mickel et al."_#Mickel, and these can be reproduced with this compute -The optional keyword {wl} will output the third-order invariants {Wl} +The optional keyword {wl} will output the third-order invariants {Wl} (see Eq. 1.4 in "Steinhardt"_#Steinhardt) for the same degrees as for the {Ql} parameters. For the FCC crystal with {nnn} =12, {W}4 = -sqrt(14/143).(49/4096)/Pi^1.5 = -0.0006722136... -The optional keyword {wl/hat} will output the normalized third-order -invariants {Wlhat} (see Eq. 2.2 in "Steinhardt"_#Steinhardt) -for the same degrees as for the {Ql} parameters. For the FCC crystal +The optional keyword {wl/hat} will output the normalized third-order +invariants {Wlhat} (see Eq. 2.2 in "Steinhardt"_#Steinhardt) +for the same degrees as for the {Ql} parameters. For the FCC crystal with {nnn} =12, {W}4hat = -7/3*sqrt(2/429) = -0.159317...The numerical values of {Wlhat} for a range of commonly encountered high-symmetry structures are given in Table I of "Steinhardt"_#Steinhardt, and these @@ -127,9 +127,9 @@ range 0 <= {Ql} <= 1. If the keyword {wl} is set to yes, then the {Wl} values for each atom will be added to the output array, which are real numbers. -If the keyword {wl/hat} is set to yes, then the {Wl_hat} +If the keyword {wl/hat} is set to yes, then the {Wl_hat} values for each atom will be added to the output array, which are real numbers. - + If the keyword {components} is set, then the real and imaginary parts of each component of (normalized) {Ybar_lm} will be added to the output array in the following order: Re({Ybar_-m}) Im({Ybar_-m}) diff --git a/doc/src/compute_sna_atom.txt b/doc/src/compute_sna_atom.txt index 518d28aec9..eab32d8757 100644 --- a/doc/src/compute_sna_atom.txt +++ b/doc/src/compute_sna_atom.txt @@ -196,7 +196,7 @@ for j1 in range(0,twojmax+1): if (j>=j1): print j1/2.,j2/2.,j/2. :pre NOTE: the {diagonal} keyword allowing other possible choices -for the number of bispectrum components was removed in 2019, +for the number of bispectrum components was removed in 2019, since all potentials use the value of 3, corresponding to the above set of bispectrum components. diff --git a/doc/src/compute_spin.txt b/doc/src/compute_spin.txt index d27e402972..0824a70dd0 100644 --- a/doc/src/compute_spin.txt +++ b/doc/src/compute_spin.txt @@ -40,14 +40,14 @@ The simplest way to output the results of the compute spin calculation is to define some of the quantities as variables, and to use the thermo and thermo_style commands, for example: -compute out_mag all spin :pre +compute out_mag all spin :pre -variable mag_z equal c_out_mag\[3\] -variable mag_norm equal c_out_mag\[4\] -variable temp_mag equal c_out_mag\[6\] :pre +variable mag_z equal c_out_mag\[3\] +variable mag_norm equal c_out_mag\[4\] +variable temp_mag equal c_out_mag\[6\] :pre -thermo 10 -thermo_style custom step v_mag_z v_mag_norm v_temp_mag :pre +thermo 10 +thermo_style custom step v_mag_z v_mag_norm v_temp_mag :pre This series of commands evaluates the total magnetization along z, the norm of the total magnetization, and the magnetic temperature. Three variables are diff --git a/doc/src/dynamical_matrix.txt b/doc/src/dynamical_matrix.txt index 6291bdec52..f207297e9f 100644 --- a/doc/src/dynamical_matrix.txt +++ b/doc/src/dynamical_matrix.txt @@ -52,4 +52,4 @@ provided by Pair's single_hessian. [Default:] -The default settings are file = "dynmat.dyn", binary = no +The default settings are file = "dynmat.dyn", binary = no diff --git a/doc/src/fix.txt b/doc/src/fix.txt index 1dd9cc9f1b..3fc0067e1a 100644 --- a/doc/src/fix.txt +++ b/doc/src/fix.txt @@ -221,7 +221,7 @@ accelerated styles exist. "heat"_fix_heat.html - add/subtract momentum-conserving heat "hyper/global"_fix_hyper_global.html - global hyperdynamics "hyper/local"_fix_hyper_local.html - local hyperdynamics -"imd"_fix_imd.html - implements the “Interactive MD” (IMD) protocol +"imd"_fix_imd.html - implements the “Interactive MD” (IMD) protocol "indent"_fix_indent.html - impose force due to an indenter "ipi"_fix_ipi.html - enable LAMMPS to run as a client for i-PI path-integral simulations "langevin"_fix_langevin.html - Langevin temperature control @@ -327,7 +327,7 @@ accelerated styles exist. "rigid/nvt/small"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NVT integration "rigid/small"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NVE integration "rx"_fix_rx.html - -"saed/vtk"_fix_saed_vtk.html - +"saed/vtk"_fix_saed_vtk.html - "setforce"_fix_setforce.html - set the force on each atom "shake"_fix_shake.html - SHAKE constraints on bonds and/or angles "shardlow"_fix_shardlow.html - integration of DPD equations of motion using the Shardlow splitting diff --git a/doc/src/fix_controller.txt b/doc/src/fix_controller.txt index 7458f1bcfa..45eb646b8e 100644 --- a/doc/src/fix_controller.txt +++ b/doc/src/fix_controller.txt @@ -31,7 +31,6 @@ cvar = name of control variable :l [Examples:] - fix 1 all controller 100 1.0 0.5 0.0 0.0 c_thermo_temp 1.5 tcontrol fix 1 all controller 100 0.2 0.5 0 100.0 v_pxxwall 1.01325 xwall fix 1 all controller 10000 0.2 0.5 0 2000 v_avpe -3.785 tcontrol :pre diff --git a/doc/src/fix_neb_spin.txt b/doc/src/fix_neb_spin.txt index 89420f451c..e62d297270 100644 --- a/doc/src/fix_neb_spin.txt +++ b/doc/src/fix_neb_spin.txt @@ -24,18 +24,18 @@ fix 1 active neb/spin 1.0 [Description:] Add nudging forces to spins in the group for a multi-replica -simulation run via the "neb/spin"_neb_spin.html command to perform a -geodesic nudged elastic band (GNEB) calculation for finding the +simulation run via the "neb/spin"_neb_spin.html command to perform a +geodesic nudged elastic band (GNEB) calculation for finding the transition state. -Hi-level explanations of GNEB are given with the -"neb/spin"_neb_spin.html command and on the -"Howto replica"_Howto_replica.html doc page. -The fix neb/spin command must be used with the "neb/spin" command and -defines how inter-replica nudging forces are computed. A GNEB -calculation is divided in two stages. In the first stage n replicas -are relaxed toward a MEP until convergence. In the second stage, the -climbing image scheme is enabled, so that the replica having the highest -energy relaxes toward the saddle point (i.e. the point of highest energy +Hi-level explanations of GNEB are given with the +"neb/spin"_neb_spin.html command and on the +"Howto replica"_Howto_replica.html doc page. +The fix neb/spin command must be used with the "neb/spin" command and +defines how inter-replica nudging forces are computed. A GNEB +calculation is divided in two stages. In the first stage n replicas +are relaxed toward a MEP until convergence. In the second stage, the +climbing image scheme is enabled, so that the replica having the highest +energy relaxes toward the saddle point (i.e. the point of highest energy along the MEP), and a second relaxation is performed. The nudging forces are calculated as explained in diff --git a/doc/src/fix_precession_spin.txt b/doc/src/fix_precession_spin.txt index 708b2bd7aa..040a3086d3 100644 --- a/doc/src/fix_precession_spin.txt +++ b/doc/src/fix_precession_spin.txt @@ -21,7 +21,7 @@ style = {zeeman} or {anisotropy} or {cubic} :l {anisotropy} args = K x y z K = intensity of the magnetic anisotropy (in eV) x y z = vector direction of the anisotropy :pre - {cubic} args = K1 K2c n1x n1y n1x n2x n2y n2z n3x n3y n3z + {cubic} args = K1 K2c n1x n1y n1x n2x n2y n2z n3x n3y n3z K1 and K2c = intensity of the magnetic anisotropy (in eV) n1x to n3z = three direction vectors of the cubic anisotropy :pre :ule @@ -55,24 +55,24 @@ with n defining the direction of the anisotropy, and K (in eV) its intensity. If K>0, an easy axis is defined, and if K<0, an easy plane is defined. Style {cubic} is used to simulate a cubic anisotropy, with three -possible easy axis for the magnetic spins in the defined group: +possible easy axis for the magnetic spins in the defined group: :c,image(Eqs/fix_spin_cubic.jpg) -with K1 and K2c (in eV) the intensity coefficients and +with K1 and K2c (in eV) the intensity coefficients and n1, n2 and n3 defining the three anisotropic directions -defined by the command (from n1x to n3z). -For n1 = (100), n2 = (010), and n3 = (001), K1 < 0 defines an +defined by the command (from n1x to n3z). +For n1 = (100), n2 = (010), and n3 = (001), K1 < 0 defines an iron type anisotropy (easy axis along the (001)-type cube edges), and K1 > 0 defines a nickel type anisotropy (easy axis -along the (111)-type cube diagonals). +along the (111)-type cube diagonals). K2^c > 0 also defines easy axis along the (111)-type cube diagonals. See chapter 2 of "(Skomski)"_#Skomski1 for more details on cubic anisotropies. In all cases, the choice of (x y z) only imposes the vector -directions for the forces. Only the direction of the vector is +directions for the forces. Only the direction of the vector is important; it's length is ignored (the entered vectors are normalized). diff --git a/doc/src/fix_rigid_meso.txt b/doc/src/fix_rigid_meso.txt index 0819fdb2fb..a9c68b2c04 100644 --- a/doc/src/fix_rigid_meso.txt +++ b/doc/src/fix_rigid_meso.txt @@ -44,7 +44,7 @@ fix 1 rods rigid/meso molecule fix 1 spheres rigid/meso single force 1 off off on fix 1 particles rigid/meso molecule force 1*5 off off off force 6*10 off off on fix 2 spheres rigid/meso group 3 sphere1 sphere2 sphere3 torque * off off off :pre - + [Description:] Treat one or more sets of mesoscopic SPH/SDPD particles as independent diff --git a/doc/src/fix_setforce.txt b/doc/src/fix_setforce.txt index 63713d87c2..5ee289ec5c 100644 --- a/doc/src/fix_setforce.txt +++ b/doc/src/fix_setforce.txt @@ -67,15 +67,15 @@ to it. :line -Style {spin} suffix sets the components of the magnetic precession -vectors instead of the mechanical forces. This also erases all -previously computed magnetic precession vectors on the atom, though +Style {spin} suffix sets the components of the magnetic precession +vectors instead of the mechanical forces. This also erases all +previously computed magnetic precession vectors on the atom, though additional magnetic fixes could add new forces. -This command can be used to freeze the magnetic moment of certain -atoms in the simulation by zeroing their precession vector. +This command can be used to freeze the magnetic moment of certain +atoms in the simulation by zeroing their precession vector. -All options defined above remain valid, they just apply to the magnetic +All options defined above remain valid, they just apply to the magnetic precession vectors instead of the forces. :line @@ -132,7 +132,7 @@ forces to any value besides zero when performing a minimization. Use the "fix addforce"_fix_addforce.html command if you want to apply a non-zero force to atoms during a minimization. -[Restrictions:] +[Restrictions:] The fix {setforce/spin} only makes sense when LAMMPS was built with the SPIN package. diff --git a/doc/src/kspace_style.txt b/doc/src/kspace_style.txt index 98ec1e64e6..04b845acaa 100644 --- a/doc/src/kspace_style.txt +++ b/doc/src/kspace_style.txt @@ -116,10 +116,10 @@ used without a cutoff, i.e. they become full long-range potentials. The {ewald/disp} style can also be used with point-dipoles, see "(Toukmaji)"_#Toukmaji. -The {ewald/dipole} style adds long-range standard Ewald summations +The {ewald/dipole} style adds long-range standard Ewald summations for dipole-dipole interactions, see "(Toukmaji)"_#Toukmaji. -The {ewald/dipole/spin} style adds long-range standard Ewald +The {ewald/dipole/spin} style adds long-range standard Ewald summations for magnetic dipole-dipole interactions between magnetic spins. @@ -142,11 +142,11 @@ The optional {smallq} argument defines the cutoff for the absolute charge value which determines whether a particle is considered charged or not. Its default value is 1.0e-5. -The {pppm/dipole} style invokes a particle-particle particle-mesh solver +The {pppm/dipole} style invokes a particle-particle particle-mesh solver for dipole-dipole interactions, following the method of "(Cerda)"_#Cerda2008. -The {pppm/dipole/spin} style invokes a particle-particle particle-mesh solver -for magnetic dipole-dipole interactions between magnetic spins. +The {pppm/dipole/spin} style invokes a particle-particle particle-mesh solver +for magnetic dipole-dipole interactions between magnetic spins. The {pppm/tip4p} style is identical to the {pppm} style except that it adds a charge at the massless 4th site in each TIP4P water molecule. diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index d342e8bf01..434f7d05e6 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -17,7 +17,7 @@ keyword = {dmax} or {line} or {alpha_damp} or {discrete_factor} {dmax} value = max max = maximum distance for line search to move (distance units) {line} value = {backtrack} or {quadratic} or {forcezero} - backtrack,quadratic,forcezero = style of linesearch to use + backtrack,quadratic,forcezero = style of linesearch to use {alpha_damp} value = damping damping = fictitious Gilbert damping for spin minimization (adim) {discrete_factor} value = factor @@ -70,14 +70,14 @@ that difference may be smaller than machine epsilon even if atoms could move in the gradient direction to reduce forces further. Keywords {alpha_damp} and {discrete_factor} only make sense when -a "min_spin"_min_spin.html command is declared. +a "min_spin"_min_spin.html command is declared. Keyword {alpha_damp} defines an analog of a magnetic Gilbert damping. It defines a relaxation rate toward an equilibrium for -a given magnetic system. +a given magnetic system. Keyword {discrete_factor} defines a discretization factor for the -adaptive timestep used in the {spin} minimization. +adaptive timestep used in the {spin} minimization. See "min_spin"_min_spin.html for more information about those -quantities. +quantities. Default values are {alpha_damp} = 1.0 and {discrete_factor} = 10.0. [Restrictions:] none diff --git a/doc/src/min_spin.txt b/doc/src/min_spin.txt index 890e324aca..2a0f0e5397 100644 --- a/doc/src/min_spin.txt +++ b/doc/src/min_spin.txt @@ -13,7 +13,7 @@ min_style spin :pre [Examples:] -min_style spin :pre +min_style spin :pre [Description:] @@ -27,36 +27,36 @@ timestep, according to: with lambda a damping coefficient (similar to a Gilbert damping). -Lambda can be defined by setting the {alpha_damp} keyword with the -"min_modify"_min_modify.html command. +Lambda can be defined by setting the {alpha_damp} keyword with the +"min_modify"_min_modify.html command. The minimization procedure solves this equation using an -adaptive timestep. The value of this timestep is defined -by the largest precession frequency that has to be solved in the +adaptive timestep. The value of this timestep is defined +by the largest precession frequency that has to be solved in the system: :c,image(Eqs/min_spin_timestep.jpg) with {|omega|_{max}} the norm of the largest precession frequency in the system (across all processes, and across all replicas if a -spin/neb calculation is performed). +spin/neb calculation is performed). -Kappa defines a discretization factor {discrete_factor} for the -definition of this timestep. +Kappa defines a discretization factor {discrete_factor} for the +definition of this timestep. {discrete_factor} can be defined with the "min_modify"_min_modify.html command. NOTE: The {spin} style replaces the force tolerance by a torque -tolerance. See "minimize"_minimize.html for more explanation. +tolerance. See "minimize"_minimize.html for more explanation. -[Restrictions:] +[Restrictions:] This minimization procedure is only applied to spin degrees of freedom for a frozen lattice configuration. [Related commands:] -"min_style"_min_style.html, "minimize"_minimize.html, +"min_style"_min_style.html, "minimize"_minimize.html, "min_modify"_min_modify.html [Default:] diff --git a/doc/src/min_style.txt b/doc/src/min_style.txt index e27682cf97..7c8aa0ae29 100644 --- a/doc/src/min_style.txt +++ b/doc/src/min_style.txt @@ -62,7 +62,7 @@ the velocity non-parallel to the current force vector. The velocity of each atom is initialized to 0.0 by this style, at the beginning of a minimization. -Style {spin} is a damped spin dynamics with an adaptive +Style {spin} is a damped spin dynamics with an adaptive timestep. See the "min/spin"_min_spin.html doc page for more information. @@ -74,10 +74,10 @@ defined via the "timestep"_timestep.html command. Often they will converge more quickly if you use a timestep about 10x larger than you would normally use for dynamics simulations. -NOTE: The {quickmin}, {fire}, {hftn}, and {cg/kk} styles do not yet -support the use of the "fix box/relax"_fix_box_relax.html command or -minimizations involving the electron radius in "eFF"_pair_eff.html -models. +NOTE: The {quickmin}, {fire}, {hftn}, and {cg/kk} styles do not yet +support the use of the "fix box/relax"_fix_box_relax.html command or +minimizations involving the electron radius in "eFF"_pair_eff.html +models. :line diff --git a/doc/src/minimize.txt b/doc/src/minimize.txt index 42315705e5..b109235ecc 100644 --- a/doc/src/minimize.txt +++ b/doc/src/minimize.txt @@ -106,9 +106,9 @@ the number of total force evaluations exceeds {maxeval} :ul NOTE: the "minimization style"_min_style.html {spin} replaces the force tolerance {ftol} by a torque tolerance. -The minimization procedure stops if the 2-norm (length) of the -global torque vector (defined as the cross product between the -spins and their precession vectors omega) is less than {ftol}, +The minimization procedure stops if the 2-norm (length) of the +global torque vector (defined as the cross product between the +spins and their precession vectors omega) is less than {ftol}, or if any of the other criteria are met. NOTE: You can also use the "fix halt"_fix_halt.html command to specify diff --git a/doc/src/neb_spin.txt b/doc/src/neb_spin.txt index 7dbd924cd2..e72ec63b06 100644 --- a/doc/src/neb_spin.txt +++ b/doc/src/neb_spin.txt @@ -45,7 +45,7 @@ and last are the end points of the transition path. GNEB is a method for finding both the spin configurations and height of the energy barrier associated with a transition state, e.g. spins to perform a collective rotation from one energy basin to -another. +another. The implementation in LAMMPS follows the discussion in the following paper: "(BessarabA)"_#BessarabA. @@ -61,33 +61,33 @@ doc page for further discussion. NOTE: As explained below, a GNEB calculation performs a damped dynamics minimization across all the replicas. The "spin"_min_spin.html -style minimizer has to be defined in your input script. +style minimizer has to be defined in your input script. When a GNEB calculation is performed, it is assumed that each replica is running the same system, though LAMMPS does not check for this. -I.e. the simulation domain, the number of magnetic atoms, the -interaction potentials, and the starting configuration when the neb +I.e. the simulation domain, the number of magnetic atoms, the +interaction potentials, and the starting configuration when the neb command is issued should be the same for every replica. In a GNEB calculation each replica is connected to other replicas by inter-replica nudging forces. These forces are imposed by the "fix -neb/spin"_fix_neb_spin.html command, which must be used in conjunction -with the neb command. +neb/spin"_fix_neb_spin.html command, which must be used in conjunction +with the neb command. The group used to define the fix neb/spin command defines the -GNEB magnetic atoms which are the only ones that inter-replica springs -are applied to. +GNEB magnetic atoms which are the only ones that inter-replica springs +are applied to. If the group does not include all magnetic atoms, then non-GNEB -magnetic atoms have no inter-replica springs and the torques they feel -and their precession motion is computed in the usual way due only -to other magnetic atoms within their replica. -Conceptually, the non-GNEB atoms provide a background force field for -the GNEB atoms. -Their magnetic spins can be allowed to evolve during the GNEB +magnetic atoms have no inter-replica springs and the torques they feel +and their precession motion is computed in the usual way due only +to other magnetic atoms within their replica. +Conceptually, the non-GNEB atoms provide a background force field for +the GNEB atoms. +Their magnetic spins can be allowed to evolve during the GNEB minimization procedure. The initial spin configuration for each of the replicas can be specified in different manners via the {file-style} setting, as -discussed below. Only atomic spins whose initial coordinates should +discussed below. Only atomic spins whose initial coordinates should differ from the current configuration need to be specified. Conceptually, the initial and final configurations for the first @@ -106,21 +106,21 @@ closer to the MEP and read them in. :line For a {file-style} setting of {final}, a filename is specified which -contains atomic and spin coordinates for zero or more atoms, in the -format described below. -For each atom that appears in the file, the new coordinates are -assigned to that atom in the final replica. Each intermediate replica -also assigns a new spin to that atom in an interpolated manner. -This is done by using the current direction of the spin at the starting -point and the read-in direction as the final point. -The "angular distance" between them is calculated, and the new direction +contains atomic and spin coordinates for zero or more atoms, in the +format described below. +For each atom that appears in the file, the new coordinates are +assigned to that atom in the final replica. Each intermediate replica +also assigns a new spin to that atom in an interpolated manner. +This is done by using the current direction of the spin at the starting +point and the read-in direction as the final point. +The "angular distance" between them is calculated, and the new direction is assigned to be a fraction of the angular distance. -NOTE: The "angular distance" between the starting and final point is -evaluated in the geodesic sense, as described in -"(BessarabA)"_#BessarabA. +NOTE: The "angular distance" between the starting and final point is +evaluated in the geodesic sense, as described in +"(BessarabA)"_#BessarabA. -NOTE: The angular interpolation between the starting and final point +NOTE: The angular interpolation between the starting and final point is achieved using Rodrigues formula: :c,image(Eqs/neb_spin_rodrigues_formula.jpg) @@ -130,7 +130,7 @@ omega_i^nu is a rotation angle defined as: :c,image(Eqs/neb_spin_angle.jpg) -with nu the image number, Q the total number of images, and +with nu the image number, Q the total number of images, and omega_i the total rotation between the initial and final spins. k_i defines a rotation axis such as: @@ -139,16 +139,16 @@ k_i defines a rotation axis such as: if the initial and final spins are not aligned. If the initial and final spins are aligned, then their cross product is null, and the expression above does not apply. -If they point toward the same direction, the intermediate images +If they point toward the same direction, the intermediate images conserve the same orientation. If the initial and final spins are aligned, but point toward opposite directions, an arbitrary rotation vector belonging to -the plane perpendicular to initial and final spins is chosen. +the plane perpendicular to initial and final spins is chosen. In this case, a warning message is displayed. For a {file-style} setting of {each}, a filename is specified which is -assumed to be unique to each replica. -See the "neb"_neb.html documentation page for more information about this +assumed to be unique to each replica. +See the "neb"_neb.html documentation page for more information about this option. For a {file-style} setting of {none}, no filename is specified. Each @@ -173,7 +173,7 @@ A NEB calculation proceeds in two stages, each of which is a minimization procedure, performed via damped dynamics. To enable this, you must first define a damped spin dynamics "min_style"_min_style.html, using the {spin} style (see -"min_spin"_min_spin.html for more information). +"min_spin"_min_spin.html for more information). The other styles cannot be used, since they relax the lattice degrees of freedom instead of the spins. @@ -195,9 +195,9 @@ damped dynamics is like a single timestep in a dynamics replica and its normalized distance along the reaction path (reaction coordinate RD) will be printed to the screen and log file every {Nevery} timesteps. The RD is 0 and 1 for the first and last replica. -For intermediate replicas, it is the cumulative angular distance -(normalized by the total cumulative angular distance) between adjacent -replicas, where "distance" is defined as the length of the 3N-vector of +For intermediate replicas, it is the cumulative angular distance +(normalized by the total cumulative angular distance) between adjacent +replicas, where "distance" is defined as the length of the 3N-vector of the geodesic distances in spin coordinates, with N the number of GNEB spins involved (see equation (13) in "(BessarabA)"_#BessarabA). These outputs allow you to monitor NEB's progress in @@ -207,11 +207,11 @@ of {Nevery}. In the first stage of GNEB, the set of replicas should converge toward a minimum energy path (MEP) of conformational states that transition over a barrier. The MEP for a transition is defined as a sequence of -3N-dimensional spin states, each of which has a potential energy -gradient parallel to the MEP itself. -The configuration of highest energy along a MEP corresponds to a saddle -point. The replica states will also be roughly equally spaced along -the MEP due to the inter-replica nudging force added by the +3N-dimensional spin states, each of which has a potential energy +gradient parallel to the MEP itself. +The configuration of highest energy along a MEP corresponds to a saddle +point. The replica states will also be roughly equally spaced along +the MEP due to the inter-replica nudging force added by the "fix neb"_fix_neb.html command. In the second stage of GNEB, the replica with the highest energy is @@ -234,12 +234,12 @@ An atom map must be defined which it is not by default for "atom_style atomic"_atom_style.html problems. The "atom_modify map"_atom_modify.html command can be used to do this. -An initial value can be defined for the timestep. Although, the {spin} -minimization algorithm is an adaptive timestep methodology, so that -this timestep is likely to evolve during the calculation. +An initial value can be defined for the timestep. Although, the {spin} +minimization algorithm is an adaptive timestep methodology, so that +this timestep is likely to evolve during the calculation. The minimizers in LAMMPS operate on all spins in your system, even -non-GNEB atoms, as defined above. +non-GNEB atoms, as defined above. :line @@ -257,7 +257,7 @@ ID2 g2 x2 y2 z2 sx2 sy2 sz2 ... IDN gN yN zN sxN syN szN :pre -The fields are the atom ID, the norm of the associated magnetic spin, +The fields are the atom ID, the norm of the associated magnetic spin, followed by the {x,y,z} coordinates and the {sx,sy,sz} spin coordinates. The lines can be listed in any order. Additional trailing information on the line is OK, such as a comment. @@ -290,22 +290,22 @@ reaction coordinate and potential energy of each replica. The "maximum torque per replica" is the two-norm of the 3N-length vector given by the cross product of a spin by its -precession vector omega, in each replica, maximized across replicas, +precession vector omega, in each replica, maximized across replicas, which is what the {ttol} setting is checking against. In this case, N is all the atoms in each replica. The "maximum torque per atom" is the maximum torque component of any atom in any replica. The potential -gradients are the two-norm of the 3N-length magnetic precession vector -solely due to the interaction potential i.e. without adding in -inter-replica forces, and projected along the path tangent (as detailed +gradients are the two-norm of the 3N-length magnetic precession vector +solely due to the interaction potential i.e. without adding in +inter-replica forces, and projected along the path tangent (as detailed in Appendix D of "(BessarabA)"_#BessarabA). The "reaction coordinate" (RD) for each replica is the two-norm of the 3N-length vector of geodesic distances between its spins and the preceding -replica's spins (see equation (13) of "(BessarabA)"_#BessarabA), added to -the RD of the preceding replica. The RD of the first replica RD1 = 0.0; -the RD of the final replica RDN = RDT, the total reaction coordinate. -The normalized RDs are divided by RDT, so that they form a monotonically -increasing sequence from zero to one. When computing RD, N only includes +replica's spins (see equation (13) of "(BessarabA)"_#BessarabA), added to +the RD of the preceding replica. The RD of the first replica RD1 = 0.0; +the RD of the final replica RDN = RDT, the total reaction coordinate. +The normalized RDs are divided by RDT, so that they form a monotonically +increasing sequence from zero to one. When computing RD, N only includes the spins being operated on by the fix neb/spin command. The forward (reverse) energy barrier is the potential energy of the @@ -313,17 +313,17 @@ highest replica minus the energy of the first (last) replica. Supplementary information for all replicas can be printed out to the screen and master log.lammps file by adding the verbose keyword. This -information include the following. -The "GradVidottan" are the projections of the potential gradient for -the replica i on its tangent vector (as detailed in Appendix D of +information include the following. +The "GradVidottan" are the projections of the potential gradient for +the replica i on its tangent vector (as detailed in Appendix D of "(BessarabA)"_#BessarabA). -The "DNi" are the non normalized geodesic distances (see equation (13) -of "(BessarabA)"_#BessarabA), between a replica i and the next replica +The "DNi" are the non normalized geodesic distances (see equation (13) +of "(BessarabA)"_#BessarabA), between a replica i and the next replica i+1. For the last replica, this distance is not defined and a "NAN" -value is the corresponding output. +value is the corresponding output. When a NEB calculation does not converge properly, the supplementary -information can help understanding what is going wrong. +information can help understanding what is going wrong. When running on multiple partitions, LAMMPS produces additional log files for each partition, e.g. log.lammps.0, log.lammps.1, etc. For a @@ -346,9 +346,9 @@ restart the calculation from an intermediate point with altered parameters. A c file script in provided in the tool/spin/interpolate_gneb -directory, that interpolates the MEP given the information provided +directory, that interpolates the MEP given the information provided by the verbose output option (as detailed in Appendix D of -"(BessarabA)"_#BessarabA). +"(BessarabA)"_#BessarabA). :line diff --git a/doc/src/package.txt b/doc/src/package.txt index edd409a842..4ecb5d96d0 100644 --- a/doc/src/package.txt +++ b/doc/src/package.txt @@ -423,115 +423,115 @@ processes/threads used for LAMMPS. :line -The {kokkos} style invokes settings associated with the use of the -KOKKOS package. +The {kokkos} style invokes settings associated with the use of the +KOKKOS package. -All of the settings are optional keyword/value pairs. Each has a default -value as listed below. +All of the settings are optional keyword/value pairs. Each has a default +value as listed below. -The {neigh} keyword determines how neighbor lists are built. A value of -{half} uses a thread-safe variant of half-neighbor lists, the same as -used by most pair styles in LAMMPS, which is the default when running on -CPUs (i.e. the Kokkos CUDA back end is not enabled). +The {neigh} keyword determines how neighbor lists are built. A value of +{half} uses a thread-safe variant of half-neighbor lists, the same as +used by most pair styles in LAMMPS, which is the default when running on +CPUs (i.e. the Kokkos CUDA back end is not enabled). -A value of {full} uses a full neighbor lists and is the default when -running on GPUs. This performs twice as much computation as the {half} -option, however that is often a win because it is thread-safe and -doesn't require atomic operations in the calculation of pair forces. For -that reason, {full} is the default setting for GPUs. However, when -running on CPUs, a {half} neighbor list is the default because it are -often faster, just as it is for non-accelerated pair styles. Similarly, -the {neigh/qeq} keyword determines how neighbor lists are built for "fix -qeq/reax/kk"_fix_qeq_reax.html. If not explicitly set, the value of +A value of {full} uses a full neighbor lists and is the default when +running on GPUs. This performs twice as much computation as the {half} +option, however that is often a win because it is thread-safe and +doesn't require atomic operations in the calculation of pair forces. For +that reason, {full} is the default setting for GPUs. However, when +running on CPUs, a {half} neighbor list is the default because it are +often faster, just as it is for non-accelerated pair styles. Similarly, +the {neigh/qeq} keyword determines how neighbor lists are built for "fix +qeq/reax/kk"_fix_qeq_reax.html. If not explicitly set, the value of {neigh/qeq} will match {neigh}. -If the {neigh/thread} keyword is set to {off}, then the KOKKOS package -threads only over atoms. However, for small systems, this may not expose -enough parallelism to keep a GPU busy. When this keyword is set to {on}, -the KOKKOS package threads over both atoms and neighbors of atoms. When -using {neigh/thread} {on}, a full neighbor list must also be used. Using -{neigh/thread} {on} may be slower for large systems, so this this option -is turned on by default only when there are 16K atoms or less owned by -an MPI rank and when using a full neighbor list. Not all KOKKOS-enabled -potentials support this keyword yet, and only thread over atoms. Many -simple pair-wise potentials such as Lennard-Jones do support threading +If the {neigh/thread} keyword is set to {off}, then the KOKKOS package +threads only over atoms. However, for small systems, this may not expose +enough parallelism to keep a GPU busy. When this keyword is set to {on}, +the KOKKOS package threads over both atoms and neighbors of atoms. When +using {neigh/thread} {on}, a full neighbor list must also be used. Using +{neigh/thread} {on} may be slower for large systems, so this this option +is turned on by default only when there are 16K atoms or less owned by +an MPI rank and when using a full neighbor list. Not all KOKKOS-enabled +potentials support this keyword yet, and only thread over atoms. Many +simple pair-wise potentials such as Lennard-Jones do support threading over both atoms and neighbors. -The {newton} keyword sets the Newton flags for pairwise and bonded -interactions to {off} or {on}, the same as the "newton"_newton.html -command allows. The default for GPUs is {off} because this will almost -always give better performance for the KOKKOS package. This means more -computation is done, but less communication. However, when running on -CPUs a value of {on} is the default since it can often be faster, just -as it is for non-accelerated pair styles +The {newton} keyword sets the Newton flags for pairwise and bonded +interactions to {off} or {on}, the same as the "newton"_newton.html +command allows. The default for GPUs is {off} because this will almost +always give better performance for the KOKKOS package. This means more +computation is done, but less communication. However, when running on +CPUs a value of {on} is the default since it can often be faster, just +as it is for non-accelerated pair styles -The {binsize} keyword sets the size of bins used to bin atoms in -neighbor list builds. The same value can be set by the "neigh_modify -binsize"_neigh_modify.html command. Making it an option in the package -kokkos command allows it to be set from the command line. The default -value for CPUs is 0.0, which means the LAMMPS default will be used, -which is bins = 1/2 the size of the pairwise cutoff + neighbor skin -distance. This is fine when neighbor lists are built on the CPU. For GPU -builds, a 2x larger binsize equal to the pairwise cutoff + neighbor skin -is often faster, which is the default. Note that if you use a -longer-than-usual pairwise cutoff, e.g. to allow for a smaller fraction -of KSpace work with a "long-range Coulombic solver"_kspace_style.html -because the GPU is faster at performing pairwise interactions, then this -rule of thumb may give too large a binsize and the default should be -overridden with a smaller value. +The {binsize} keyword sets the size of bins used to bin atoms in +neighbor list builds. The same value can be set by the "neigh_modify +binsize"_neigh_modify.html command. Making it an option in the package +kokkos command allows it to be set from the command line. The default +value for CPUs is 0.0, which means the LAMMPS default will be used, +which is bins = 1/2 the size of the pairwise cutoff + neighbor skin +distance. This is fine when neighbor lists are built on the CPU. For GPU +builds, a 2x larger binsize equal to the pairwise cutoff + neighbor skin +is often faster, which is the default. Note that if you use a +longer-than-usual pairwise cutoff, e.g. to allow for a smaller fraction +of KSpace work with a "long-range Coulombic solver"_kspace_style.html +because the GPU is faster at performing pairwise interactions, then this +rule of thumb may give too large a binsize and the default should be +overridden with a smaller value. -The {comm} and {comm/exchange} and {comm/forward} and {comm/reverse} -keywords determine whether the host or device performs the packing and -unpacking of data when communicating per-atom data between processors. -"Exchange" communication happens only on timesteps that neighbor lists -are rebuilt. The data is only for atoms that migrate to new processors. -"Forward" communication happens every timestep. "Reverse" communication -happens every timestep if the {newton} option is on. The data is for -atom coordinates and any other atom properties that needs to be updated +The {comm} and {comm/exchange} and {comm/forward} and {comm/reverse} +keywords determine whether the host or device performs the packing and +unpacking of data when communicating per-atom data between processors. +"Exchange" communication happens only on timesteps that neighbor lists +are rebuilt. The data is only for atoms that migrate to new processors. +"Forward" communication happens every timestep. "Reverse" communication +happens every timestep if the {newton} option is on. The data is for +atom coordinates and any other atom properties that needs to be updated for ghost atoms owned by each processor. -The {comm} keyword is simply a short-cut to set the same value for both +The {comm} keyword is simply a short-cut to set the same value for both the {comm/exchange} and {comm/forward} and {comm/reverse} keywords. -The value options for all 3 keywords are {no} or {host} or {device}. A -value of {no} means to use the standard non-KOKKOS method of -packing/unpacking data for the communication. A value of {host} means to -use the host, typically a multi-core CPU, and perform the -packing/unpacking in parallel with threads. A value of {device} means to -use the device, typically a GPU, to perform the packing/unpacking +The value options for all 3 keywords are {no} or {host} or {device}. A +value of {no} means to use the standard non-KOKKOS method of +packing/unpacking data for the communication. A value of {host} means to +use the host, typically a multi-core CPU, and perform the +packing/unpacking in parallel with threads. A value of {device} means to +use the device, typically a GPU, to perform the packing/unpacking operation. -The optimal choice for these keywords depends on the input script and -the hardware used. The {no} value is useful for verifying that the -Kokkos-based {host} and {device} values are working correctly. It is the +The optimal choice for these keywords depends on the input script and +the hardware used. The {no} value is useful for verifying that the +Kokkos-based {host} and {device} values are working correctly. It is the default when running on CPUs since it is usually the fastest. -When running on CPUs or Xeon Phi, the {host} and {device} values work -identically. When using GPUs, the {device} value is the default since it -will typically be optimal if all of your styles used in your input -script are supported by the KOKKOS package. In this case data can stay -on the GPU for many timesteps without being moved between the host and -GPU, if you use the {device} value. If your script uses styles (e.g. -fixes) which are not yet supported by the KOKKOS package, then data has -to be move between the host and device anyway, so it is typically faster -to let the host handle communication, by using the {host} value. Using -{host} instead of {no} will enable use of multiple threads to -pack/unpack communicated data. When running small systems on a GPU, -performing the exchange pack/unpack on the host CPU can give speedup +When running on CPUs or Xeon Phi, the {host} and {device} values work +identically. When using GPUs, the {device} value is the default since it +will typically be optimal if all of your styles used in your input +script are supported by the KOKKOS package. In this case data can stay +on the GPU for many timesteps without being moved between the host and +GPU, if you use the {device} value. If your script uses styles (e.g. +fixes) which are not yet supported by the KOKKOS package, then data has +to be move between the host and device anyway, so it is typically faster +to let the host handle communication, by using the {host} value. Using +{host} instead of {no} will enable use of multiple threads to +pack/unpack communicated data. When running small systems on a GPU, +performing the exchange pack/unpack on the host CPU can give speedup since it reduces the number of CUDA kernel launches. -The {cuda/aware} keyword chooses whether CUDA-aware MPI will be used. When -this keyword is set to {on}, buffers in GPU memory are passed directly -through MPI send/receive calls. This reduces overhead of first copying -the data to the host CPU. However CUDA-aware MPI is not supported on all -systems, which can lead to segmentation faults and would require using a -value of {off}. If LAMMPS can safely detect that CUDA-aware MPI is not -available (currently only possible with OpenMPI v2.0.0 or later), then -the {cuda/aware} keyword is automatically set to {off} by default. When -the {cuda/aware} keyword is set to {off} while any of the {comm} -keywords are set to {device}, the value for these {comm} keywords will -be automatically changed to {host}. This setting has no effect if not -running on GPUs. CUDA-aware MPI is available for OpenMPI 1.8 (or later +The {cuda/aware} keyword chooses whether CUDA-aware MPI will be used. When +this keyword is set to {on}, buffers in GPU memory are passed directly +through MPI send/receive calls. This reduces overhead of first copying +the data to the host CPU. However CUDA-aware MPI is not supported on all +systems, which can lead to segmentation faults and would require using a +value of {off}. If LAMMPS can safely detect that CUDA-aware MPI is not +available (currently only possible with OpenMPI v2.0.0 or later), then +the {cuda/aware} keyword is automatically set to {off} by default. When +the {cuda/aware} keyword is set to {off} while any of the {comm} +keywords are set to {device}, the value for these {comm} keywords will +be automatically changed to {host}. This setting has no effect if not +running on GPUs. CUDA-aware MPI is available for OpenMPI 1.8 (or later versions), Mvapich2 1.9 (or later) when the "MV2_USE_CUDA" environment variable is set to "1", CrayMPI, and IBM Spectrum MPI when the "-gpu" flag is used. @@ -641,16 +641,16 @@ not used, you must invoke the package intel command in your input script or via the "-pk intel" "command-line switch"_Run_options.html. -For the KOKKOS package, the option defaults for GPUs are neigh = full, -neigh/qeq = full, newton = off, binsize for GPUs = 2x LAMMPS default -value, comm = device, cuda/aware = on. When LAMMPS can safely detect -that CUDA-aware MPI is not available, the default value of cuda/aware -becomes "off". For CPUs or Xeon Phis, the option defaults are neigh = -half, neigh/qeq = half, newton = on, binsize = 0.0, and comm = no. The -option neigh/thread = on when there are 16K atoms or less on an MPI -rank, otherwise it is "off". These settings are made automatically by -the required "-k on" "command-line switch"_Run_options.html. You can -change them by using the package kokkos command in your input script or +For the KOKKOS package, the option defaults for GPUs are neigh = full, +neigh/qeq = full, newton = off, binsize for GPUs = 2x LAMMPS default +value, comm = device, cuda/aware = on. When LAMMPS can safely detect +that CUDA-aware MPI is not available, the default value of cuda/aware +becomes "off". For CPUs or Xeon Phis, the option defaults are neigh = +half, neigh/qeq = half, newton = on, binsize = 0.0, and comm = no. The +option neigh/thread = on when there are 16K atoms or less on an MPI +rank, otherwise it is "off". These settings are made automatically by +the required "-k on" "command-line switch"_Run_options.html. You can +change them by using the package kokkos command in your input script or via the "-pk kokkos command-line switch"_Run_options.html. For the OMP package, the default is Nthreads = 0 and the option diff --git a/doc/src/pair_e3b.txt b/doc/src/pair_e3b.txt index 6d1f992ca1..832b4719c3 100644 --- a/doc/src/pair_e3b.txt +++ b/doc/src/pair_e3b.txt @@ -20,8 +20,8 @@ If the {preset} keyword is given, no others are needed. Otherwise, all are mandatory except for {neigh}. The {neigh} keyword is always optional. :l {preset} arg = {2011} or {2015} = which set of predefined parameters to use - 2011 = use the potential parameters from "(Tainter 2011)"_#Tainter2011 - 2015 = use the potential parameters from "(Tainter 2015)"_#Tainter2015 + 2011 = use the potential parameters from "(Tainter 2011)"_#Tainter2011 + 2015 = use the potential parameters from "(Tainter 2015)"_#Tainter2015 {Ea} arg = three-body energy for type A hydrogen bonding interactions (energy units) {Eb} arg = three-body energy for type B hydrogen bonding interactions (energy units) {Ec} arg = three-body energy for type C hydrogen bonding interactions (energy units) diff --git a/doc/src/pair_granular.txt b/doc/src/pair_granular.txt index f16cd9fe0b..d46bea2343 100644 --- a/doc/src/pair_granular.txt +++ b/doc/src/pair_granular.txt @@ -790,4 +790,4 @@ alternative contact force models during inelastic collisions. Powder Technology, 233, 30-46. :link(WaltonPC) -[(Otis R. Walton)] Walton, O.R., Personal Communication +[(Otis R. Walton)] Walton, O.R., Personal Communication diff --git a/doc/src/pair_kolmogorov_crespi_full.txt b/doc/src/pair_kolmogorov_crespi_full.txt index 5a2623ed89..b42027aada 100644 --- a/doc/src/pair_kolmogorov_crespi_full.txt +++ b/doc/src/pair_kolmogorov_crespi_full.txt @@ -43,8 +43,8 @@ when the tapper function is turned off. The formula of taper function can be found in pair style "ilp/graphene/hbn"_pair_ilp_graphene_hbn.html. NOTE: This potential (ILP) is intended for interlayer interactions between two -different layers of graphene. To perform a realistic simulation, this potential -must be used in combination with intralayer potential, such as +different layers of graphene. To perform a realistic simulation, this potential +must be used in combination with intralayer potential, such as "AIREBO"_pair_airebo.html or "Tersoff"_pair_tersoff.html potential. To keep the intralayer properties unaffected, the interlayer interaction within the same layers should be avoided. Hence, each atom has to have a layer diff --git a/doc/src/pair_mm3_switch3_coulgauss.txt b/doc/src/pair_mm3_switch3_coulgauss.txt index 3e0e24150e..86e6a0d1d9 100644 --- a/doc/src/pair_mm3_switch3_coulgauss.txt +++ b/doc/src/pair_mm3_switch3_coulgauss.txt @@ -68,7 +68,7 @@ gamma (distance) :ul [Mixing, shift, table, tail correction, restart, rRESPA info]: -Mixing rules are fixed for this style as defined above. +Mixing rules are fixed for this style as defined above. Shifting the potential energy is not necessary because the switching function ensures that the potential is zero at the cut-off. diff --git a/doc/src/pair_oxdna2.txt b/doc/src/pair_oxdna2.txt index 3e462f384d..35e59ac9f5 100644 --- a/doc/src/pair_oxdna2.txt +++ b/doc/src/pair_oxdna2.txt @@ -27,8 +27,8 @@ args = list of arguments for these particular styles :ul {oxdna2/stk} args = seq T xi kappa 6.0 0.4 0.9 0.32 0.6 1.3 0 0.8 0.9 0 0.95 0.9 0 0.95 2.0 0.65 2.0 0.65 seq = seqav (for average sequence stacking strength) or seqdep (for sequence-dependent stacking strength) T = temperature (oxDNA units, 0.1 = 300 K) - xi = temperature-independent coefficient in stacking strength - kappa = coefficient of linear temperature dependence in stacking strength + xi = temperature-independent coefficient in stacking strength + kappa = coefficient of linear temperature dependence in stacking strength {oxdna2/hbond} args = seq eps 8.0 0.4 0.75 0.34 0.7 1.5 0 0.7 1.5 0 0.7 1.5 0 0.7 0.46 3.141592653589793 0.7 4.0 1.5707963267948966 0.45 4.0 1.5707963267948966 0.45 seq = seqav (for average sequence base-pairing strength) or seqdep (for sequence-dependent base-pairing strength) eps = 1.0678 (between base pairs A-T and C-G) or 0 (all other pairs) diff --git a/doc/src/pair_snap.txt b/doc/src/pair_snap.txt index 1fba74a188..37d1a1ed18 100644 --- a/doc/src/pair_snap.txt +++ b/doc/src/pair_snap.txt @@ -50,7 +50,7 @@ the SNAP potential files themselves. Only a single pair_coeff command is used with the {snap} style which specifies a SNAP coefficient file followed by a SNAP parameter file and then N additional arguments specifying the mapping of SNAP -elements to LAMMPS atom types, where N is the number of +elements to LAMMPS atom types, where N is the number of LAMMPS atom types: SNAP coefficient file @@ -79,7 +79,7 @@ The name of the SNAP coefficient file usually ends in the ".snapcoeff" extension. It may contain coefficients for many SNAP elements. The only requirement is that it contain at least those element names appearing in the -LAMMPS mapping list. +LAMMPS mapping list. The name of the SNAP parameter file usually ends in the ".snapparam" extension. It contains a small number of parameters that define the overall form of the SNAP potential. diff --git a/doc/src/pair_spin_dipole.txt b/doc/src/pair_spin_dipole.txt index 0d6471e07f..d903a3f07d 100644 --- a/doc/src/pair_spin_dipole.txt +++ b/doc/src/pair_spin_dipole.txt @@ -11,7 +11,7 @@ pair_style spin/dipole/long command :h3 [Syntax:] -pair_style spin/dipole/cut cutoff +pair_style spin/dipole/cut cutoff pair_style spin/dipole/long cutoff :pre cutoff = global cutoff for magnetic dipole energy and forces @@ -21,7 +21,7 @@ cutoff = global cutoff for magnetic dipole energy and forces [Examples:] pair_style spin/dipole/cut 10.0 -pair_coeff * * 10.0 +pair_coeff * * 10.0 pair_coeff 2 3 8.0 :pre pair_style spin/dipole/long 9.0 @@ -32,24 +32,24 @@ pair_coeff 2 3 1.0 1.0 2.5 4.0 :pre [Description:] Style {spin/dipole/cut} computes a short-range dipole-dipole -interaction between pairs of magnetic particles that each -have a magnetic spin. +interaction between pairs of magnetic particles that each +have a magnetic spin. The magnetic dipole-dipole interactions are computed by the -following formulas for the magnetic energy, magnetic precession +following formulas for the magnetic energy, magnetic precession vector omega and mechanical force between particles I and J. :c,image(Eqs/pair_spin_dipole.jpg) -where si and sj are the spin on two magnetic particles, -r is their separation distance, and the vector e = (Ri - Rj)/|Ri - Rj| -is the direction vector between the two particles. +where si and sj are the spin on two magnetic particles, +r is their separation distance, and the vector e = (Ri - Rj)/|Ri - Rj| +is the direction vector between the two particles. Style {spin/dipole/long} computes long-range magnetic dipole-dipole interaction. A "kspace_style"_kspace_style.html must be defined to -use this pair style. Currently, "kspace_style +use this pair style. Currently, "kspace_style ewald/dipole/spin"_kspace_style.html and "kspace_style -pppm/dipole/spin"_kspace_style.html support long-range magnetic +pppm/dipole/spin"_kspace_style.html support long-range magnetic dipole-dipole interactions. :line @@ -68,8 +68,8 @@ to be specified in an input script that reads a restart file. [Restrictions:] The {spin/dipole/cut} and {spin/dipole/long} styles are part of -the SPIN package. They are only enabled if LAMMPS was built with that -package. See the "Build package"_Build_package.html doc page for more +the SPIN package. They are only enabled if LAMMPS was built with that +package. See the "Build package"_Build_package.html doc page for more info. Using dipole/spin pair styles with {electron} "units"_units.html is not diff --git a/doc/src/pair_spin_dmi.txt b/doc/src/pair_spin_dmi.txt index 9ddff8a8dc..cca20d1136 100644 --- a/doc/src/pair_spin_dmi.txt +++ b/doc/src/pair_spin_dmi.txt @@ -15,11 +15,11 @@ pair_style spin/dmi cutoff :pre cutoff = global cutoff pair (distance in metal units) :ulb,l :ule - + [Examples:] pair_style spin/dmi 4.0 -pair_coeff * * dmi 2.6 0.001 1.0 0.0 0.0 +pair_coeff * * dmi 2.6 0.001 1.0 0.0 0.0 pair_coeff 1 2 dmi 4.0 0.00109 0.0 0.0 1.0 :pre [Description:] diff --git a/doc/src/pair_spin_neel.txt b/doc/src/pair_spin_neel.txt index 009ef7947d..b255f23a09 100644 --- a/doc/src/pair_spin_neel.txt +++ b/doc/src/pair_spin_neel.txt @@ -15,7 +15,7 @@ pair_style spin/neel cutoff :pre cutoff = global cutoff pair (distance in metal units) :ulb,l :ule - + [Examples:] pair_style spin/neel 4.0 From 27f9ae1017003ff19a074ef33e4bbc387997c278 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 17 Sep 2019 08:37:32 -0400 Subject: [PATCH 135/237] evil tab removal --- src/USER-MISC/pair_ilp_graphene_hbn.h | 2 +- src/USER-MISC/pair_kolmogorov_crespi_full.h | 2 +- src/kspace.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/USER-MISC/pair_ilp_graphene_hbn.h b/src/USER-MISC/pair_ilp_graphene_hbn.h index ec6146fa33..5ca8eb64a7 100644 --- a/src/USER-MISC/pair_ilp_graphene_hbn.h +++ b/src/USER-MISC/pair_ilp_graphene_hbn.h @@ -48,7 +48,7 @@ class PairILPGrapheneHBN : public Pair { MyPage *ipage; // neighbor list pages int *ILP_numneigh; // # of pair neighbors for each atom int **ILP_firstneigh; // ptr to 1st neighbor of each atom - int tap_flag; // flag to turn on/off taper function + int tap_flag; // flag to turn on/off taper function struct Param { double z0,alpha,epsilon,C,delta,d,sR,reff,C6,S; diff --git a/src/USER-MISC/pair_kolmogorov_crespi_full.h b/src/USER-MISC/pair_kolmogorov_crespi_full.h index d2971e3fbc..c579788110 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_full.h +++ b/src/USER-MISC/pair_kolmogorov_crespi_full.h @@ -48,7 +48,7 @@ class PairKolmogorovCrespiFull : public Pair { MyPage *ipage; // neighbor list pages int *KC_numneigh; // # of pair neighbors for each atom int **KC_firstneigh; // ptr to 1st neighbor of each atom - int tap_flag; // flag to turn on/off taper function + int tap_flag; // flag to turn on/off taper function struct Param { diff --git a/src/kspace.h b/src/kspace.h index c04a0db989..60df2345fd 100644 --- a/src/kspace.h +++ b/src/kspace.h @@ -44,7 +44,7 @@ class KSpace : protected Pointers { int dispersionflag; // 1 if a LJ/dispersion solver int tip4pflag; // 1 if a TIP4P solver int dipoleflag; // 1 if a dipole solver - int spinflag; // 1 if a spin solver + int spinflag; // 1 if a spin solver int differentiation_flag; int neighrequest_flag; // used to avoid obsolete construction // of neighbor lists From 7f037b6c3053d36ba51c2426a1f006abbf7be083 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 17 Sep 2019 12:05:04 -0400 Subject: [PATCH 136/237] some more whitespace cleanup --- src/KOKKOS/npair_kokkos.h | 4 ++-- src/KOKKOS/pair_gran_hooke_history_kokkos.h | 8 ++++---- src/KSPACE/ewald_dipole.h | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/KOKKOS/npair_kokkos.h b/src/KOKKOS/npair_kokkos.h index 2a3994f584..7650bf3350 100644 --- a/src/KOKKOS/npair_kokkos.h +++ b/src/KOKKOS/npair_kokkos.h @@ -443,7 +443,7 @@ struct NPairKokkosBuildFunctorSize { const size_t sharedsize; NPairKokkosBuildFunctorSize(const NeighborKokkosExecute &_c, - const size_t _sharedsize): c(_c), sharedsize(_sharedsize) {}; + const size_t _sharedsize): c(_c), sharedsize(_sharedsize) {}; KOKKOS_INLINE_FUNCTION void operator() (const int & i) const { @@ -467,7 +467,7 @@ struct NPairKokkosBuildFunctorSize { const size_t sharedsize; NPairKokkosBuildFunctorSize(const NeighborKokkosExecute &_c, - const size_t _sharedsize): c(_c), sharedsize(_sharedsize) {}; + const size_t _sharedsize): c(_c), sharedsize(_sharedsize) {}; KOKKOS_INLINE_FUNCTION void operator() (const int & i) const { diff --git a/src/KOKKOS/pair_gran_hooke_history_kokkos.h b/src/KOKKOS/pair_gran_hooke_history_kokkos.h index 8d1778e091..e40353d970 100644 --- a/src/KOKKOS/pair_gran_hooke_history_kokkos.h +++ b/src/KOKKOS/pair_gran_hooke_history_kokkos.h @@ -61,13 +61,13 @@ class PairGranHookeHistoryKokkos : public PairGranHookeHistory { template KOKKOS_INLINE_FUNCTION void ev_tally_xyz(EV_FLOAT &ev, int i, int j, - F_FLOAT fx, F_FLOAT fy, F_FLOAT fz, - X_FLOAT delx, X_FLOAT dely, X_FLOAT delz) const; + F_FLOAT fx, F_FLOAT fy, F_FLOAT fz, + X_FLOAT delx, X_FLOAT dely, X_FLOAT delz) const; template KOKKOS_INLINE_FUNCTION void ev_tally_xyz_atom(EV_FLOAT &ev, int i, int j, - F_FLOAT fx, F_FLOAT fy, F_FLOAT fz, - X_FLOAT delx, X_FLOAT dely, X_FLOAT delz) const; + F_FLOAT fx, F_FLOAT fy, F_FLOAT fz, + X_FLOAT delx, X_FLOAT dely, X_FLOAT delz) const; protected: typename AT::t_x_array_randomread x; diff --git a/src/KSPACE/ewald_dipole.h b/src/KSPACE/ewald_dipole.h index 741756487b..c8dd18565c 100644 --- a/src/KSPACE/ewald_dipole.h +++ b/src/KSPACE/ewald_dipole.h @@ -34,10 +34,10 @@ class EwaldDipole : public Ewald { protected: double musum,musqsum,mu2; - double **tk; // field for torque - double **vc; // virial per k + double **tk; // field for torque + double **vc; // virial per k - void musum_musq(); + void musum_musq(); double rms_dipole(int, double, bigint); virtual void eik_dot_r(); void slabcorr(); From 5cf0a5bf6d30fd87d093a909aec5febc93c9ce99 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 17 Sep 2019 09:31:51 -0700 Subject: [PATCH 137/237] USER-INTEL: Reverting whitespace in Makefiles from last changes. --- src/MAKE/OPTIONS/Makefile.intel_cpu | 2 +- src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi | 2 +- src/MAKE/OPTIONS/Makefile.intel_cpu_mpich | 2 +- src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi | 2 +- src/MAKE/OPTIONS/Makefile.knl | 9 ++++----- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu b/src/MAKE/OPTIONS/Makefile.intel_cpu index dd3e11ca1d..57e25e30cd 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu @@ -9,7 +9,7 @@ SHELL = /bin/sh CC = mpiicpc OPTFLAGS = -xHost -O2 -fp-model fast=2 -no-prec-div -qoverride-limits \ -qopt-zmm-usage=high -CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ +CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) \ -I$(MKLROOT)/include SHFLAGS = -fPIC diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi b/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi index 3dc8449d14..1731203cb0 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi @@ -9,7 +9,7 @@ SHELL = /bin/sh CC = mpiicpc OPTFLAGS = -xHost -O2 -fp-model fast=2 -no-prec-div -qoverride-limits \ -qopt-zmm-usage=high -CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ +CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) \ -I$(MKLROOT)/include SHFLAGS = -fPIC diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich b/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich index a59b7d1d3a..9419537006 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich @@ -9,7 +9,7 @@ SHELL = /bin/sh CC = mpicxx -cxx=icc OPTFLAGS = -xHost -O2 -fp-model fast=2 -no-prec-div -qoverride-limits \ -qopt-zmm-usage=high -CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ +CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) \ -I$(MKLROOT)/include SHFLAGS = -fPIC diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi b/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi index e285102426..c983943f5e 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi @@ -10,7 +10,7 @@ export OMPI_CXX = icc CC = mpicxx OPTFLAGS = -xHost -O2 -fp-model fast=2 -no-prec-div -qoverride-limits \ -qopt-zmm-usage=high -CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ +CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) \ -I$(MKLROOT)/include SHFLAGS = -fPIC diff --git a/src/MAKE/OPTIONS/Makefile.knl b/src/MAKE/OPTIONS/Makefile.knl index 7ad806c100..a361e9e258 100644 --- a/src/MAKE/OPTIONS/Makefile.knl +++ b/src/MAKE/OPTIONS/Makefile.knl @@ -8,15 +8,15 @@ SHELL = /bin/sh CC = mpiicpc OPTFLAGS = -xMIC-AVX512 -O2 -fp-model fast=2 -no-prec-div -qoverride-limits -CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ +CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) \ -I$(MKLROOT)/include SHFLAGS = -fPIC DEPFLAGS = -M LINK = mpiicpc -LINKFLAGS = -qopenmp $(OPTFLAGS) -LIB = -ltbbmalloc +LINKFLAGS = -qopenmp $(OPTFLAGS) -L$(MKLROOT)/lib/intel64/ +LIB = -ltbbmalloc -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core SIZE = size ARCHIVE = ar @@ -55,8 +55,7 @@ MPI_LIB = FFT_INC = -DFFT_MKL -DFFT_SINGLE FFT_PATH = -FFT_LIB = -L$(MKLROOT)/lib/intel64/ -lmkl_intel_ilp64 \ - -lmkl_sequential -lmkl_core +FFT_LIB = # JPEG and/or PNG library # see discussion in Section 2.2 (step 7) of manual From 8ff6122560d2e6f83035cd6b3dbd70f82c86f348 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 17 Sep 2019 14:48:11 -0400 Subject: [PATCH 138/237] correct documentation of improper style fourier --- doc/src/improper_fourier.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/src/improper_fourier.txt b/doc/src/improper_fourier.txt index 1b569b3894..f4f59ed636 100644 --- a/doc/src/improper_fourier.txt +++ b/doc/src/improper_fourier.txt @@ -16,7 +16,7 @@ improper_style fourier :pre [Examples:] improper_style fourier -improper_coeff 1 100.0 180.0 :pre +improper_coeff 1 100.0 0.0 1.0 0.5 1 :pre [Description:] @@ -24,12 +24,12 @@ The {fourier} improper style uses the following potential: :c,image(Eqs/improper_fourier.jpg) -where K is the force constant and omega is the angle between the IL -axis and the IJK plane: +where K is the force constant, C0, C1, C2 are dimensionless coefficients, +and omega is the angle between the IL axis and the IJK plane: :c,image(JPG/umbrella.jpg) -If all parameter (see bellow) is not zero, the all the three possible angles will taken in account. +If all parameter (see below) is not zero, the all the three possible angles will taken in account. The following coefficients must be defined for each improper type via the "improper_coeff"_improper_coeff.html command as in the example @@ -38,10 +38,10 @@ above, or in the data file or restart files read by the commands: K (energy) -C0 (real) -C1 (real) -C2 (real) -all (integer >= 0) :ul +C0 (unitless) +C1 (unitless) +C2 (unitless) +all (0 or 1, optional) :ul :line From d4d5f241ebe1e49bbb2c3ae16dbc9fc217b2a75c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 17 Sep 2019 14:48:58 -0400 Subject: [PATCH 139/237] use improper style fourier instead of non-existing style opls --- examples/USER/drude/toluene/data.toluene | 8 +- examples/USER/drude/toluene/in.toluene.lang | 4 +- examples/USER/drude/toluene/in.toluene.nh | 4 +- .../toluene/log.27Nov18.toluene.lang.g++.1 | 14 - .../toluene/log.27Nov18.toluene.lang.g++.4 | 14 - .../toluene/log.27Nov18.toluene.nh.g++.1 | 14 - .../toluene/log.27Nov18.toluene.nh.g++.4 | 14 - .../toluene/log.7Aug19.toluene.lang.g++.1 | 254 +++++++++++++++++ .../toluene/log.7Aug19.toluene.lang.g++.4 | 254 +++++++++++++++++ .../drude/toluene/log.7Aug19.toluene.nh.g++.1 | 262 ++++++++++++++++++ .../drude/toluene/log.7Aug19.toluene.nh.g++.4 | 262 ++++++++++++++++++ 11 files changed, 1040 insertions(+), 64 deletions(-) delete mode 100644 examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.1 delete mode 100644 examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.4 delete mode 100644 examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.1 delete mode 100644 examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.4 create mode 100644 examples/USER/drude/toluene/log.7Aug19.toluene.lang.g++.1 create mode 100644 examples/USER/drude/toluene/log.7Aug19.toluene.lang.g++.4 create mode 100644 examples/USER/drude/toluene/log.7Aug19.toluene.nh.g++.1 create mode 100644 examples/USER/drude/toluene/log.7Aug19.toluene.nh.g++.4 diff --git a/examples/USER/drude/toluene/data.toluene b/examples/USER/drude/toluene/data.toluene index 48d44016d7..d67af7c311 100644 --- a/examples/USER/drude/toluene/data.toluene +++ b/examples/USER/drude/toluene/data.toluene @@ -79,10 +79,10 @@ Dihedral Coeffs Improper Coeffs - 1 0.0000 2.1999 0.0000 0.0000 # CAO-CAO-CAT-CTT - 2 0.0000 2.1999 0.0000 0.0000 # CAT-CAM-CAO-HAT - 3 0.0000 2.1999 0.0000 0.0000 # CAO-CAP-CAM-HAT - 4 0.0000 2.1999 0.0000 0.0000 # CAM-CAM-CAP-HAT + 1 2.1999 0.0000 0.0000 -1.0000 0 # CAO-CAO-CAT-CTT + 2 2.1999 0.0000 0.0000 -1.0000 0 # CAT-CAM-CAO-HAT + 3 2.1999 0.0000 0.0000 -1.0000 0 # CAO-CAP-CAM-HAT + 4 2.1999 0.0000 0.0000 -1.0000 0 # CAM-CAM-CAP-HAT Atoms diff --git a/examples/USER/drude/toluene/in.toluene.lang b/examples/USER/drude/toluene/in.toluene.lang index 8f00c24a4b..ba40a3bcde 100644 --- a/examples/USER/drude/toluene/in.toluene.lang +++ b/examples/USER/drude/toluene/in.toluene.lang @@ -7,7 +7,7 @@ atom_style full bond_style harmonic angle_style harmonic dihedral_style opls -improper_style opls +improper_style fourier special_bonds lj/coul 0.0 0.0 0.5 pair_style lj/cut/thole/long 2.600 8.0 8.0 @@ -109,7 +109,7 @@ fix fNPH all nve compute cTEMP all temp/drude -thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] +thermo_style custom step etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] thermo 50 timestep 0.5 diff --git a/examples/USER/drude/toluene/in.toluene.nh b/examples/USER/drude/toluene/in.toluene.nh index 05b35ca919..7a5aecc579 100644 --- a/examples/USER/drude/toluene/in.toluene.nh +++ b/examples/USER/drude/toluene/in.toluene.nh @@ -7,7 +7,7 @@ atom_style full bond_style harmonic angle_style harmonic dihedral_style opls -improper_style opls +improper_style fourier special_bonds lj/coul 0.0 0.0 0.5 pair_style lj/cut/thole/long 2.600 8.0 8.0 @@ -115,7 +115,7 @@ fix fINVERSE all drude/transform/inverse fix fMOMENTUM all momentum 100 linear 1 1 1 -thermo_style custom step cpu etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] +thermo_style custom step etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] thermo 50 timestep 0.5 diff --git a/examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.1 b/examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.1 deleted file mode 100644 index 08cc2f0f5c..0000000000 --- a/examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.1 +++ /dev/null @@ -1,14 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 250 toluene system for drude polarizability example (Langevin) - -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -improper_style opls -ERROR: Unknown improper style opls (src/force.cpp:634) -Last command: improper_style opls diff --git a/examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.4 b/examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.4 deleted file mode 100644 index 08cc2f0f5c..0000000000 --- a/examples/USER/drude/toluene/log.27Nov18.toluene.lang.g++.4 +++ /dev/null @@ -1,14 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 250 toluene system for drude polarizability example (Langevin) - -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -improper_style opls -ERROR: Unknown improper style opls (src/force.cpp:634) -Last command: improper_style opls diff --git a/examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.1 b/examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.1 deleted file mode 100644 index a6807f8ee1..0000000000 --- a/examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.1 +++ /dev/null @@ -1,14 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 250 toluene system for drude polarizability example (Nose-Hoover) - -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -improper_style opls -ERROR: Unknown improper style opls (src/force.cpp:634) -Last command: improper_style opls diff --git a/examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.4 b/examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.4 deleted file mode 100644 index a6807f8ee1..0000000000 --- a/examples/USER/drude/toluene/log.27Nov18.toluene.nh.g++.4 +++ /dev/null @@ -1,14 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 250 toluene system for drude polarizability example (Nose-Hoover) - -units real -boundary p p p - -atom_style full -bond_style harmonic -angle_style harmonic -dihedral_style opls -improper_style opls -ERROR: Unknown improper style opls (src/force.cpp:634) -Last command: improper_style opls diff --git a/examples/USER/drude/toluene/log.7Aug19.toluene.lang.g++.1 b/examples/USER/drude/toluene/log.7Aug19.toluene.lang.g++.1 new file mode 100644 index 0000000000..71ffdb0c8c --- /dev/null +++ b/examples/USER/drude/toluene/log.7Aug19.toluene.lang.g++.1 @@ -0,0 +1,254 @@ +LAMMPS (7 Aug 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:93) + using 1 OpenMP thread(s) per MPI task +# 250 toluene system for drude polarizability example (Langevin) + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +improper_style fourier +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style lj/cut/thole/long 2.600 8.0 8.0 +pair_modify mix geometric tail yes +kspace_style pppm 1.0e-4 + +read_data data.toluene extra/special/per/atom 1 + orthogonal box = (-18.2908 -18.1636 -18.223) to (18.3357 18.1621 18.3287) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 5500 atoms + scanning bonds ... + 4 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 8 = max dihedrals/atom + scanning impropers ... + 2 = max impropers/atom + reading bonds ... + 5500 bonds + reading angles ... + 6000 angles + reading dihedrals ... + 6000 dihedrals + reading impropers ... + 1500 impropers + 5 = max # of 1-2 neighbors + 10 = max # of 1-3 neighbors + 16 = max # of 1-4 neighbors + 20 = max # of special neighbors + special bonds CPU = 0.00199628 secs + read_data CPU = 0.0169649 secs + +comm_modify vel yes + +group gTOLUENE molecule 1:250 +5500 atoms in group gTOLUENE +group gCORES type 1 2 3 4 5 6 7 +3750 atoms in group gCORES +group gDRUDES type 8 9 10 11 12 +1750 atoms in group gDRUDES + +pair_coeff 1 1 0.069998 3.550000 1.620000 # CAT CAT +pair_coeff 1 2 0.069998 3.550000 1.620000 # CAT CAO +pair_coeff 1 3 0.069998 3.550000 1.620000 # CAT CAM +pair_coeff 1 4 0.069998 3.550000 1.620000 # CAT CAP +pair_coeff 1 5 0.067968 3.524911 1.620000 # CAT CTT +pair_coeff 1 6 0.045825 2.931041 0.000000 # CAT HAT +pair_coeff 1 7 0.045825 2.931041 0.000000 # CAT HT +pair_coeff 2 2 0.069998 3.550000 1.620000 # CAO CAO +pair_coeff 2 3 0.069998 3.550000 1.620000 # CAO CAM +pair_coeff 2 4 0.069998 3.550000 1.620000 # CAO CAP +pair_coeff 2 5 0.067968 3.524911 1.620000 # CAO CTT +pair_coeff 2 6 0.045825 2.931041 0.000000 # CAO HAT +pair_coeff 2 7 0.045825 2.931041 0.000000 # CAO HT +pair_coeff 3 3 0.069998 3.550000 1.620000 # CAM CAM +pair_coeff 3 4 0.069998 3.550000 1.620000 # CAM CAP +pair_coeff 3 5 0.067968 3.524911 1.620000 # CAM CTT +pair_coeff 3 6 0.045825 2.931041 0.000000 # CAM HAT +pair_coeff 3 7 0.045825 2.931041 0.000000 # CAM HT +pair_coeff 4 4 0.069998 3.550000 1.620000 # CAP CAP +pair_coeff 4 5 0.067968 3.524911 1.620000 # CAP CTT +pair_coeff 4 6 0.045825 2.931041 0.000000 # CAP HAT +pair_coeff 4 7 0.045825 2.931041 0.000000 # CAP HT +pair_coeff 5 5 0.065997 3.500000 1.620000 # CTT CTT +pair_coeff 5 6 0.044496 2.910326 0.000000 # CTT HAT +pair_coeff 5 7 0.044496 2.910326 0.000000 # CTT HT +pair_coeff 6 6 0.029999 2.420000 0.000000 # HAT HAT +pair_coeff 6 7 0.029999 2.420000 0.000000 # HAT HT +pair_coeff 7 7 0.029999 2.420000 0.000000 # HT HT +pair_coeff 1 8 0.000000 0.000000 1.620000 # CAT D_CAT +pair_coeff 1 9 0.000000 0.000000 1.620000 # CAT D_CAO +pair_coeff 1 10 0.000000 0.000000 1.620000 # CAT D_CAM +pair_coeff 1 11 0.000000 0.000000 1.620000 # CAT D_CAP +pair_coeff 1 12 0.000000 0.000000 1.620000 # CAT D_CTT +pair_coeff 2 8 0.000000 0.000000 1.620000 # CAO D_CAT +pair_coeff 2 9 0.000000 0.000000 1.620000 # CAO D_CAO +pair_coeff 2 10 0.000000 0.000000 1.620000 # CAO D_CAM +pair_coeff 2 11 0.000000 0.000000 1.620000 # CAO D_CAP +pair_coeff 2 12 0.000000 0.000000 1.620000 # CAO D_CTT +pair_coeff 3 8 0.000000 0.000000 1.620000 # CAM D_CAT +pair_coeff 3 9 0.000000 0.000000 1.620000 # CAM D_CAO +pair_coeff 3 10 0.000000 0.000000 1.620000 # CAM D_CAM +pair_coeff 3 11 0.000000 0.000000 1.620000 # CAM D_CAP +pair_coeff 3 12 0.000000 0.000000 1.620000 # CAM D_CTT +pair_coeff 4 8 0.000000 0.000000 1.620000 # CAP D_CAT +pair_coeff 4 9 0.000000 0.000000 1.620000 # CAP D_CAO +pair_coeff 4 10 0.000000 0.000000 1.620000 # CAP D_CAM +pair_coeff 4 11 0.000000 0.000000 1.620000 # CAP D_CAP +pair_coeff 4 12 0.000000 0.000000 1.620000 # CAP D_CTT +pair_coeff 5 8 0.000000 0.000000 1.620000 # CTT D_CAT +pair_coeff 5 9 0.000000 0.000000 1.620000 # CTT D_CAO +pair_coeff 5 10 0.000000 0.000000 1.620000 # CTT D_CAM +pair_coeff 5 11 0.000000 0.000000 1.620000 # CTT D_CAP +pair_coeff 5 12 0.000000 0.000000 1.620000 # CTT D_CTT +pair_coeff 8 8 0.000000 0.000000 1.620000 # D_CAT D_CAT +pair_coeff 8 9 0.000000 0.000000 1.620000 # D_CAT D_CAO +pair_coeff 8 10 0.000000 0.000000 1.620000 # D_CAT D_CAM +pair_coeff 8 11 0.000000 0.000000 1.620000 # D_CAT D_CAP +pair_coeff 8 12 0.000000 0.000000 1.620000 # D_CAT D_CTT +pair_coeff 9 9 0.000000 0.000000 1.620000 # D_CAO D_CAO +pair_coeff 9 10 0.000000 0.000000 1.620000 # D_CAO D_CAM +pair_coeff 9 11 0.000000 0.000000 1.620000 # D_CAO D_CAP +pair_coeff 9 12 0.000000 0.000000 1.620000 # D_CAO D_CTT +pair_coeff 10 10 0.000000 0.000000 1.620000 # D_CAM D_CAM +pair_coeff 10 11 0.000000 0.000000 1.620000 # D_CAM D_CAP +pair_coeff 10 12 0.000000 0.000000 1.620000 # D_CAM D_CTT +pair_coeff 11 11 0.000000 0.000000 1.620000 # D_CAP D_CAP +pair_coeff 11 12 0.000000 0.000000 1.620000 # D_CAP D_CTT +pair_coeff 12 12 0.000000 0.000000 1.620000 # D_CTT D_CTT + +neighbor 2.0 bin + +variable vTEMP equal 260.0 +variable vTEMP_D equal 1.0 +variable vPRESS equal 1.0 + +velocity gCORES create ${vTEMP} 12345 +velocity gCORES create 260 12345 +velocity gDRUDES create ${vTEMP_D} 12345 +velocity gDRUDES create 1 12345 + +fix fDRUDE all drude C C C C C N N D D D D D + +fix fSHAKE gCORES shake 0.0001 20 0 b 4 6 7 8 + 1250 = # of size 2 clusters + 0 = # of size 3 clusters + 250 = # of size 4 clusters + 0 = # of frozen angles + find clusters CPU = 0.000807762 secs + +fix fLANG all langevin/drude ${vTEMP} 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes +fix fLANG all langevin/drude 260 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes +fix fLANG all langevin/drude 260 100.0 200611 1 20.0 260514 zero yes +fix fNPH all nve + +compute cTEMP all temp/drude + +thermo_style custom step etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] +thermo 50 + +timestep 0.5 +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:323) + G vector (1/distance) = 0.382011 + grid = 40 40 40 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0325934 + estimated relative force accuracy = 9.8154e-05 + using double precision FFTW3 + 3d grid and FFT values/proc = 103823 64000 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 19 +New max number of 1-2 to 1-4 neighbors: 20 (+1) +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 = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut/thole/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 42.06 | 42.06 | 42.06 Mbytes +Step TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] + 0 11086.347 2910.7282 202.07402 8175.6191 6565.4851 20.333365 1.0706727e-06 -3299.85 4972.8631 1306116.6 -1306199.8 40273.68 48631.318 314.89553 3.1777821 + 50 4782.1702 4728.7435 328.28767 53.426722 1812.2203 685.37824 683.70917 -3277.1645 797.34329 1305983.2 -1306631.2 16874.358 48631.318 448.52419 116.25477 + 100 2906.0879 3699.8031 256.85465 -793.7152 978.15364 778.36908 862.30899 -3270.1722 468.44888 1306096.8 -1306707.6 15631.384 48631.318 382.26408 35.748403 + 150 2089.0918 3593.0499 249.44342 -1503.9581 751.32283 803.47802 668.4757 -3277.5983 128.17444 1306138.5 -1306716.3 15193.04 48631.318 384.75632 10.892446 + 200 1547.3302 3248.639 225.53309 -1701.3089 699.65977 814.31164 692.83227 -3276.3957 -66.671816 1306160.9 -1306725.9 13787.676 48631.318 351.28242 3.8458668 + 250 1177.9323 3095.949 214.93276 -1918.0167 688.87262 842.44531 615.89218 -3278.4465 -210.06178 1306154.3 -1306731 8808.5835 48631.318 335.8115 1.8330994 + 300 895.90313 2870.3451 199.27046 -1974.442 734.95873 858.58147 624.00862 -3278.6022 -342.01951 1306163.6 -1306735 3388.4841 48631.318 311.56815 1.2987715 + 350 669.25785 2764.9587 191.95413 -2095.7009 662.44028 860.79714 602.69567 -3278.776 -376.37081 1306172.3 -1306738.8 8494.9184 48631.318 300.19414 1.1358594 + 400 531.21609 2722.6775 189.01881 -2191.4614 684.34049 868.77818 576.86096 -3280.1649 -459.66591 1306160 -1306741.6 6726.3087 48631.318 295.59622 1.1315427 + 450 427.05425 2611.7588 181.3184 -2184.7046 719.2042 891.88178 591.2282 -3279.339 -534.65069 1306172.2 -1306745.2 2398.5394 48631.318 283.56126 1.0726045 + 500 310.44891 2556.0967 177.45412 -2245.6477 720.86526 841.50195 586.3417 -3279.3029 -539.81715 1306169.5 -1306744.8 3028.595 48631.318 277.52314 1.0406334 + 550 207.83114 2531.3051 175.73299 -2323.4739 674.71188 855.2132 555.53227 -3280.0378 -553.93222 1306171.9 -1306746.9 4609.4408 48631.318 274.80629 1.0748601 + 600 88.81557 2459.9059 170.77619 -2371.0903 692.4485 834.47484 550.85905 -3280.9086 -595.31802 1306171.4 -1306744 2107.9995 48631.318 267.06312 1.0301965 + 650 75.616307 2416.9747 167.79573 -2341.3584 703.57186 869.98959 564.81201 -3280.7522 -619.8016 1306168 -1306747.2 1236.4829 48631.318 262.3542 1.0968447 + 700 49.832719 2415.7344 167.70963 -2365.9017 683.61663 882.67915 555.23571 -3280.7778 -615.06862 1306159.9 -1306751.4 2985.7048 48631.318 262.23095 1.0762424 + 750 41.513638 2427.218 168.50687 -2385.7044 698.87619 863.2938 564.58197 -3280.0156 -637.29964 1306160.1 -1306755.3 1653.117 48631.318 263.49803 1.0451977 + 800 109.53032 2481.9041 172.30339 -2372.3738 697.22709 897.36555 561.28745 -3280.6784 -651.29564 1306155 -1306751.3 1219.8761 48631.318 269.43698 1.0647792 + 850 98.142203 2502.3132 173.72026 -2404.171 696.5382 878.83293 566.44302 -3280.2837 -663.94587 1306155.6 -1306757.4 1122.7487 48631.318 271.67716 1.030267 + 900 62.992675 2409.7324 167.29295 -2346.7397 722.00541 896.64662 560.66083 -3279.4915 -644.05458 1306153.6 -1306756.1 1604.295 48631.318 261.58656 1.0609836 + 950 5.6677468 2403.5067 166.86073 -2397.839 725.07222 891.00249 556.81977 -3279.7848 -672.66389 1306141 -1306759.2 1019.1694 48631.318 260.91187 1.0562387 + 1000 38.526968 2444.97 169.73928 -2406.4431 704.72993 920.68493 534.59035 -3281.2673 -667.78091 1306141.1 -1306758.5 486.79846 48631.318 265.39928 1.098473 + 1050 21.698026 2388.6306 165.82798 -2366.9326 712.15539 934.39244 546.92027 -3281.1469 -654.7449 1306137.4 -1306761.9 1556.1256 48631.318 259.28203 1.0760765 + 1100 -26.971225 2433.8428 168.96678 -2460.814 710.11081 881.19212 524.51547 -3281.7925 -667.53202 1306137.1 -1306764.4 1203.8971 48631.318 264.20441 1.0706085 + 1150 -49.171269 2375.9688 164.94895 -2425.14 729.78127 918.79575 518.21967 -3281.6542 -675.7239 1306130.4 -1306765 229.44016 48631.318 257.89845 1.086519 + 1200 -53.421342 2422.0091 168.14524 -2475.4304 710.67274 884.2589 523.32524 -3282.2275 -674.49333 1306130.9 -1306767.9 -131.09655 48631.318 262.91124 1.0804821 + 1250 -58.534776 2394.4031 166.22873 -2452.9378 680.27486 909.58096 532.81959 -3281.5551 -653.13731 1306127 -1306767.9 546.96357 48631.318 259.92916 1.0424914 + 1300 -24.151217 2431.9902 168.83817 -2456.1414 681.27127 919.39245 536.41899 -3281.3717 -661.90875 1306121.6 -1306771.5 1455.7512 48631.318 264.00712 1.0630558 + 1350 -38.973062 2438.6194 169.2984 -2477.5925 707.96118 912.62518 519.44533 -3281.6739 -687.67183 1306126.1 -1306774.4 -1470.4442 48631.318 264.70225 1.1091537 + 1400 11.896539 2384.5407 165.54404 -2372.6442 719.03374 950.93261 550.5639 -3280.4581 -663.4921 1306122 -1306771.3 465.12854 48631.318 258.83564 1.0785364 + 1450 -13.118691 2436.6246 169.15991 -2449.7433 661.04397 933.07103 561.29537 -3280.6997 -672.68495 1306123.9 -1306775.7 -108.46564 48631.318 264.50636 1.0718787 + 1500 -38.151755 2417.4849 167.83116 -2455.6367 688.81484 892.35701 565.29013 -3279.6716 -662.1817 1306116.9 -1306777.2 517.89634 48631.318 262.44549 1.0338083 + 1550 -71.663334 2405.7016 167.01311 -2477.3649 681.78925 876.31247 559.003 -3280.451 -649.16641 1306112.8 -1306777.7 925.49349 48631.318 261.148 1.0609731 + 1600 -13.900431 2419.481 167.96973 -2433.3814 718.46559 909.67964 559.06779 -3280.8163 -667.6092 1306108 -1306780.2 13.95808 48631.318 262.63632 1.080229 + 1650 -16.403222 2431.075 168.77464 -2447.4783 710.99509 907.65662 551.60307 -3279.8852 -661.52624 1306104.5 -1306780.8 726.89923 48631.318 263.91553 1.0489963 + 1700 -18.555086 2438.2062 169.26971 -2456.7613 665.90475 943.02217 542.86579 -3280.9017 -657.99229 1306108 -1306777.7 801.41078 48631.318 264.67663 1.0750708 + 1750 -6.9249446 2443.9707 169.6699 -2450.8956 733.23573 890.06857 560.83229 -3280.362 -670.93883 1306098.3 -1306782.1 47.037748 48631.318 265.30892 1.0661143 + 1800 -21.686222 2434.3375 169.00113 -2456.0237 729.35297 899.9733 561.59516 -3280.4727 -680.98901 1306096.5 -1306782 495.63617 48631.318 264.25723 1.0723683 + 1850 -72.916947 2408.8254 167.22998 -2481.7423 683.24984 904.13282 549.97726 -3279.6699 -652.63212 1306099.2 -1306786 -120.61674 48631.318 261.48504 1.0659808 + 1900 -55.4099 2415.455 167.69023 -2470.8649 700.4473 904.72264 565.5266 -3280.4533 -673.23082 1306099.6 -1306787.4 202.15936 48631.318 262.20353 1.0709756 + 1950 -79.877997 2409.2307 167.25812 -2489.1087 695.9536 894.4541 564.7034 -3279.3581 -680.33472 1306100.8 -1306785.3 213.72828 48631.318 261.52921 1.0658433 + 2000 -102.20457 2399.4263 166.57746 -2501.6309 689.67819 894.58596 565.53233 -3280.7595 -680.39032 1306096.4 -1306786.6 1113.7499 48631.318 260.46311 1.0647045 +Loop time of 68.4185 on 1 procs for 2000 steps with 5500 atoms + +Performance: 1.263 ns/day, 19.005 hours/ns, 29.232 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 48.825 | 48.825 | 48.825 | 0.0 | 71.36 +Bond | 2.8852 | 2.8852 | 2.8852 | 0.0 | 4.22 +Kspace | 13.795 | 13.795 | 13.795 | 0.0 | 20.16 +Neigh | 1.0731 | 1.0731 | 1.0731 | 0.0 | 1.57 +Comm | 0.27067 | 0.27067 | 0.27067 | 0.0 | 0.40 +Output | 0.0031168 | 0.0031168 | 0.0031168 | 0.0 | 0.00 +Modify | 1.5207 | 1.5207 | 1.5207 | 0.0 | 2.22 +Other | | 0.04541 | | | 0.07 + +Nlocal: 5500 ave 5500 max 5500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 13157 ave 13157 max 13157 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 1.33822e+06 ave 1.33822e+06 max 1.33822e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 1338215 +Ave neighs/atom = 243.312 +Ave special neighs/atom = 15.6364 +Neighbor list builds = 32 +Dangerous builds = 0 +Total wall time: 0:01:08 diff --git a/examples/USER/drude/toluene/log.7Aug19.toluene.lang.g++.4 b/examples/USER/drude/toluene/log.7Aug19.toluene.lang.g++.4 new file mode 100644 index 0000000000..df7d58ac88 --- /dev/null +++ b/examples/USER/drude/toluene/log.7Aug19.toluene.lang.g++.4 @@ -0,0 +1,254 @@ +LAMMPS (7 Aug 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:93) + using 1 OpenMP thread(s) per MPI task +# 250 toluene system for drude polarizability example (Langevin) + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +improper_style fourier +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style lj/cut/thole/long 2.600 8.0 8.0 +pair_modify mix geometric tail yes +kspace_style pppm 1.0e-4 + +read_data data.toluene extra/special/per/atom 1 + orthogonal box = (-18.2908 -18.1636 -18.223) to (18.3357 18.1621 18.3287) + 2 by 1 by 2 MPI processor grid + reading atoms ... + 5500 atoms + scanning bonds ... + 4 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 8 = max dihedrals/atom + scanning impropers ... + 2 = max impropers/atom + reading bonds ... + 5500 bonds + reading angles ... + 6000 angles + reading dihedrals ... + 6000 dihedrals + reading impropers ... + 1500 impropers + 5 = max # of 1-2 neighbors + 10 = max # of 1-3 neighbors + 16 = max # of 1-4 neighbors + 20 = max # of special neighbors + special bonds CPU = 0.000747919 secs + read_data CPU = 0.0168228 secs + +comm_modify vel yes + +group gTOLUENE molecule 1:250 +5500 atoms in group gTOLUENE +group gCORES type 1 2 3 4 5 6 7 +3750 atoms in group gCORES +group gDRUDES type 8 9 10 11 12 +1750 atoms in group gDRUDES + +pair_coeff 1 1 0.069998 3.550000 1.620000 # CAT CAT +pair_coeff 1 2 0.069998 3.550000 1.620000 # CAT CAO +pair_coeff 1 3 0.069998 3.550000 1.620000 # CAT CAM +pair_coeff 1 4 0.069998 3.550000 1.620000 # CAT CAP +pair_coeff 1 5 0.067968 3.524911 1.620000 # CAT CTT +pair_coeff 1 6 0.045825 2.931041 0.000000 # CAT HAT +pair_coeff 1 7 0.045825 2.931041 0.000000 # CAT HT +pair_coeff 2 2 0.069998 3.550000 1.620000 # CAO CAO +pair_coeff 2 3 0.069998 3.550000 1.620000 # CAO CAM +pair_coeff 2 4 0.069998 3.550000 1.620000 # CAO CAP +pair_coeff 2 5 0.067968 3.524911 1.620000 # CAO CTT +pair_coeff 2 6 0.045825 2.931041 0.000000 # CAO HAT +pair_coeff 2 7 0.045825 2.931041 0.000000 # CAO HT +pair_coeff 3 3 0.069998 3.550000 1.620000 # CAM CAM +pair_coeff 3 4 0.069998 3.550000 1.620000 # CAM CAP +pair_coeff 3 5 0.067968 3.524911 1.620000 # CAM CTT +pair_coeff 3 6 0.045825 2.931041 0.000000 # CAM HAT +pair_coeff 3 7 0.045825 2.931041 0.000000 # CAM HT +pair_coeff 4 4 0.069998 3.550000 1.620000 # CAP CAP +pair_coeff 4 5 0.067968 3.524911 1.620000 # CAP CTT +pair_coeff 4 6 0.045825 2.931041 0.000000 # CAP HAT +pair_coeff 4 7 0.045825 2.931041 0.000000 # CAP HT +pair_coeff 5 5 0.065997 3.500000 1.620000 # CTT CTT +pair_coeff 5 6 0.044496 2.910326 0.000000 # CTT HAT +pair_coeff 5 7 0.044496 2.910326 0.000000 # CTT HT +pair_coeff 6 6 0.029999 2.420000 0.000000 # HAT HAT +pair_coeff 6 7 0.029999 2.420000 0.000000 # HAT HT +pair_coeff 7 7 0.029999 2.420000 0.000000 # HT HT +pair_coeff 1 8 0.000000 0.000000 1.620000 # CAT D_CAT +pair_coeff 1 9 0.000000 0.000000 1.620000 # CAT D_CAO +pair_coeff 1 10 0.000000 0.000000 1.620000 # CAT D_CAM +pair_coeff 1 11 0.000000 0.000000 1.620000 # CAT D_CAP +pair_coeff 1 12 0.000000 0.000000 1.620000 # CAT D_CTT +pair_coeff 2 8 0.000000 0.000000 1.620000 # CAO D_CAT +pair_coeff 2 9 0.000000 0.000000 1.620000 # CAO D_CAO +pair_coeff 2 10 0.000000 0.000000 1.620000 # CAO D_CAM +pair_coeff 2 11 0.000000 0.000000 1.620000 # CAO D_CAP +pair_coeff 2 12 0.000000 0.000000 1.620000 # CAO D_CTT +pair_coeff 3 8 0.000000 0.000000 1.620000 # CAM D_CAT +pair_coeff 3 9 0.000000 0.000000 1.620000 # CAM D_CAO +pair_coeff 3 10 0.000000 0.000000 1.620000 # CAM D_CAM +pair_coeff 3 11 0.000000 0.000000 1.620000 # CAM D_CAP +pair_coeff 3 12 0.000000 0.000000 1.620000 # CAM D_CTT +pair_coeff 4 8 0.000000 0.000000 1.620000 # CAP D_CAT +pair_coeff 4 9 0.000000 0.000000 1.620000 # CAP D_CAO +pair_coeff 4 10 0.000000 0.000000 1.620000 # CAP D_CAM +pair_coeff 4 11 0.000000 0.000000 1.620000 # CAP D_CAP +pair_coeff 4 12 0.000000 0.000000 1.620000 # CAP D_CTT +pair_coeff 5 8 0.000000 0.000000 1.620000 # CTT D_CAT +pair_coeff 5 9 0.000000 0.000000 1.620000 # CTT D_CAO +pair_coeff 5 10 0.000000 0.000000 1.620000 # CTT D_CAM +pair_coeff 5 11 0.000000 0.000000 1.620000 # CTT D_CAP +pair_coeff 5 12 0.000000 0.000000 1.620000 # CTT D_CTT +pair_coeff 8 8 0.000000 0.000000 1.620000 # D_CAT D_CAT +pair_coeff 8 9 0.000000 0.000000 1.620000 # D_CAT D_CAO +pair_coeff 8 10 0.000000 0.000000 1.620000 # D_CAT D_CAM +pair_coeff 8 11 0.000000 0.000000 1.620000 # D_CAT D_CAP +pair_coeff 8 12 0.000000 0.000000 1.620000 # D_CAT D_CTT +pair_coeff 9 9 0.000000 0.000000 1.620000 # D_CAO D_CAO +pair_coeff 9 10 0.000000 0.000000 1.620000 # D_CAO D_CAM +pair_coeff 9 11 0.000000 0.000000 1.620000 # D_CAO D_CAP +pair_coeff 9 12 0.000000 0.000000 1.620000 # D_CAO D_CTT +pair_coeff 10 10 0.000000 0.000000 1.620000 # D_CAM D_CAM +pair_coeff 10 11 0.000000 0.000000 1.620000 # D_CAM D_CAP +pair_coeff 10 12 0.000000 0.000000 1.620000 # D_CAM D_CTT +pair_coeff 11 11 0.000000 0.000000 1.620000 # D_CAP D_CAP +pair_coeff 11 12 0.000000 0.000000 1.620000 # D_CAP D_CTT +pair_coeff 12 12 0.000000 0.000000 1.620000 # D_CTT D_CTT + +neighbor 2.0 bin + +variable vTEMP equal 260.0 +variable vTEMP_D equal 1.0 +variable vPRESS equal 1.0 + +velocity gCORES create ${vTEMP} 12345 +velocity gCORES create 260 12345 +velocity gDRUDES create ${vTEMP_D} 12345 +velocity gDRUDES create 1 12345 + +fix fDRUDE all drude C C C C C N N D D D D D + +fix fSHAKE gCORES shake 0.0001 20 0 b 4 6 7 8 + 1250 = # of size 2 clusters + 0 = # of size 3 clusters + 250 = # of size 4 clusters + 0 = # of frozen angles + find clusters CPU = 0.000355244 secs + +fix fLANG all langevin/drude ${vTEMP} 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes +fix fLANG all langevin/drude 260 100.0 200611 ${vTEMP_D} 20.0 260514 zero yes +fix fLANG all langevin/drude 260 100.0 200611 1 20.0 260514 zero yes +fix fNPH all nve + +compute cTEMP all temp/drude + +thermo_style custom step etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] +thermo 50 + +timestep 0.5 +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:323) + G vector (1/distance) = 0.382011 + grid = 40 40 40 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0325934 + estimated relative force accuracy = 9.8154e-05 + using double precision FFTW3 + 3d grid and FFT values/proc = 34263 16000 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 19 +New max number of 1-2 to 1-4 neighbors: 20 (+1) +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 = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut/thole/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 18 | 18 | 18 Mbytes +Step TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] + 0 11086.347 2910.7282 202.07402 8175.6191 6565.4851 20.333365 1.0706727e-06 -3299.85 4972.8631 1306116.6 -1306199.8 40273.68 48631.318 314.89553 3.1777821 + 50 4712.9507 4669.1606 324.15119 43.790082 1798.561 670.61319 690.16967 -3276.9493 811.643 1305983.2 -1306633.5 17164.771 48631.318 442.24313 116.13094 + 100 2865.9139 3726.4166 258.70226 -860.50272 968.87546 749.70761 860.70151 -3270.7784 427.14745 1306104.7 -1306700.9 15017.273 48631.318 385.10628 35.845353 + 150 1982.6673 3535.974 245.481 -1553.3068 764.86116 768.15837 658.70182 -3278.7906 108.49859 1306136.5 -1306711.2 16495.352 48631.318 378.64023 10.723986 + 200 1440.0277 3240.5932 224.97452 -1800.5656 687.71813 791.29356 643.82915 -3276.9293 -99.549986 1306172.9 -1306719.8 13234.476 48631.318 350.46321 3.7468464 + 250 1103.2915 3018.496 209.55567 -1915.2045 677.97905 825.32748 642.78891 -3278.0801 -226.1853 1306168.5 -1306725.5 8774.9103 48631.318 327.36313 1.8722119 + 300 789.07159 2827.1716 196.27319 -2038.1 735.96101 852.72545 589.14167 -3280.0357 -374.66018 1306169 -1306730.2 2259.1028 48631.318 306.85585 1.3262598 + 350 599.10023 2732.3739 189.69197 -2133.2737 677.67006 863.22888 565.41674 -3280.5231 -403.28794 1306177.4 -1306733.2 7989.222 48631.318 296.64126 1.1534418 + 400 428.26436 2591.2884 179.89727 -2163.0241 676.18745 849.24505 612.34065 -3277.4703 -457.85799 1306173.6 -1306739.1 7282.1438 48631.318 281.34719 1.0502762 + 450 307.26859 2534.2468 175.93722 -2226.9782 712.17636 853.98862 578.01327 -3279.7731 -533.87422 1306179.7 -1306737.2 1897.9643 48631.318 275.11317 1.0980929 + 500 234.60959 2495.1082 173.22007 -2260.4987 707.43541 878.25753 547.08402 -3281.2756 -549.04991 1306176.5 -1306739.5 2683.0639 48631.318 270.85452 1.0984718 + 550 203.34751 2445.6535 169.78673 -2242.306 669.03724 892.85034 599.20664 -3279.0757 -559.81157 1306175.9 -1306740.4 4512.9992 48631.318 265.49465 1.0628812 + 600 205.63573 2526.5892 175.4056 -2320.9535 685.64073 887.97693 557.42296 -3280.0332 -597.34755 1306167.8 -1306742.5 2999.5823 48631.318 274.29935 1.064682 + 650 176.23031 2526.3124 175.38638 -2350.0821 714.15285 895.42115 540.39191 -3280.8567 -636.27783 1306165.7 -1306748.6 871.68316 48631.318 274.2807 1.0442089 + 700 106.97524 2441.1059 169.47101 -2334.1306 697.16018 905.51407 564.71847 -3279.6208 -631.62324 1306159.4 -1306749.6 1953.8241 48631.318 264.98935 1.0771037 + 750 76.695104 2435.6635 169.09318 -2358.9684 672.01039 934.63351 545.64024 -3281.1075 -629.89722 1306152.4 -1306752.6 3044.0155 48631.318 264.39002 1.0932471 + 800 57.614075 2456.928 170.56945 -2399.3139 720.76364 898.68013 534.10051 -3281.5897 -659.64354 1306145.5 -1306757.1 1691.9503 48631.318 266.72089 1.0622697 + 850 -44.931126 2390.0608 165.92727 -2434.9919 708.70192 888.26851 537.13087 -3281.355 -665.17283 1306137.8 -1306760.3 123.07165 48631.318 259.45151 1.0516426 + 900 -96.878205 2358.862 163.76133 -2455.7403 672.98976 868.41571 546.69492 -3280.6939 -636.80102 1306134.5 -1306760.9 1955.7005 48631.318 256.05598 1.05337 + 950 -80.012575 2374.4497 164.84349 -2454.4623 679.59722 880.35157 548.35372 -3280.6061 -643.44517 1306125.8 -1306764.5 1510.9809 48631.318 257.72442 1.1017392 + 1000 -21.440874 2440.6729 169.44096 -2462.1138 718.56593 868.65109 555.54643 -3279.8516 -686.71673 1306126.6 -1306765 -1148.6212 48631.318 264.92977 1.1019339 + 1050 16.46903 2382.6961 165.41598 -2366.2271 712.51245 913.35848 579.81678 -3280.0559 -657.12122 1306129.3 -1306764 1004.5778 48631.318 258.64076 1.0684155 + 1100 35.847247 2483.1985 172.39325 -2447.3513 685.05704 889.42278 553.73166 -3280.0177 -663.67201 1306134.3 -1306766.2 699.1824 48631.318 269.56773 1.0838094 + 1150 -4.9817843 2431.4725 168.80223 -2436.4543 720.51056 868.17547 569.09902 -3280.5829 -677.99865 1306133.1 -1306768.7 435.19118 48631.318 263.96966 1.0303202 + 1200 -23.907197 2443.6035 169.64441 -2467.5107 684.96437 887.58483 549.43666 -3280.3144 -679.46182 1306137.2 -1306766.9 367.11148 48631.318 265.28645 1.0344036 + 1250 -16.904671 2389.9447 165.91921 -2406.8494 722.06959 902.90076 568.35616 -3280.6829 -683.32029 1306132.9 -1306769.1 76.759445 48631.318 259.41697 1.0908431 + 1300 -1.7822102 2410.2768 167.33074 -2412.0591 706.98675 904.31941 551.23506 -3280.7552 -651.51211 1306127.3 -1306769.6 1659.1113 48631.318 261.64093 1.0701648 + 1350 -3.569473 2446.3901 169.83786 -2449.9595 686.13971 894.85839 558.36242 -3279.9941 -664.59508 1306129 -1306773.7 783.32881 48631.318 265.5696 1.0709072 + 1400 -33.385576 2400.262 166.63547 -2433.6476 709.5808 890.68408 571.13105 -3280.1428 -674.51247 1306123.4 -1306773.8 -751.38571 48631.318 260.54522 1.080234 + 1450 -11.215152 2405.5409 167.00196 -2416.756 703.72038 913.21131 552.64196 -3280.9831 -649.19774 1306120.3 -1306776.4 1817.2174 48631.318 261.14741 1.031193 + 1500 -25.974102 2435.8375 169.10527 -2461.8116 689.93174 900.70619 552.63711 -3280.1497 -671.17989 1306124 -1306777.8 -98.941796 48631.318 264.45069 1.0190784 + 1550 -76.496407 2394.8126 166.25716 -2471.309 706.96953 886.06919 549.9101 -3280.8434 -659.57745 1306105.9 -1306779.7 -7.0989994 48631.318 259.95403 1.0772144 + 1600 -79.549932 2395.1114 166.2779 -2474.6614 684.11692 888.93332 562.94522 -3280.1665 -665.21744 1306114.4 -1306779.6 320.58515 48631.318 260.00641 1.0425978 + 1650 -99.702003 2360.5652 163.87957 -2460.2672 706.21244 900.9253 540.36599 -3280.2308 -655.96077 1306109.7 -1306781.3 307.35487 48631.318 256.23383 1.0666637 + 1700 -69.422658 2372.1727 164.68541 -2441.5954 676.79347 913.90473 581.60658 -3279.997 -670.33218 1306115.7 -1306779.3 -204.22848 48631.318 257.50963 1.0434075 + 1750 -80.889897 2425.3592 168.37782 -2506.2491 672.88937 911.52373 523.74733 -3280.4796 -673.90027 1306122 -1306782 965.12568 48631.318 263.26491 1.1001595 + 1800 -82.419368 2361.798 163.96515 -2444.2173 716.51571 882.9729 577.92505 -3278.9279 -671.67438 1306111.6 -1306782.6 -44.954517 48631.318 256.36957 1.0636692 + 1850 -93.715705 2373.3359 164.76616 -2467.0516 713.02466 907.03621 563.38626 -3280.2576 -693.30963 1306104.6 -1306781.5 -979.95945 48631.318 257.62543 1.0628288 + 1900 -73.60945 2449.5873 170.05983 -2523.1967 683.65116 893.94251 539.90847 -3281.4318 -680.16358 1306108 -1306787.1 598.18213 48631.318 265.91405 1.0766352 + 1950 -66.068291 2437.3691 169.21159 -2503.4374 672.5168 877.42934 573.56499 -3279.885 -668.54185 1306109.2 -1306787.7 733.05074 48631.318 264.61409 1.0224258 + 2000 -91.043979 2374.4077 164.84057 -2465.4516 692.13299 909.46192 574.60109 -3279.837 -672.33599 1306102.4 -1306791.8 -665.61581 48631.318 257.76275 1.0263294 +Loop time of 23.7656 on 4 procs for 2000 steps with 5500 atoms + +Performance: 3.636 ns/day, 6.602 hours/ns, 84.155 timesteps/s +94.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 11.918 | 13.096 | 14.137 | 27.0 | 55.10 +Bond | 0.74012 | 0.76511 | 0.79225 | 2.9 | 3.22 +Kspace | 6.7821 | 7.8285 | 9.0172 | 35.4 | 32.94 +Neigh | 0.37249 | 0.37262 | 0.37278 | 0.0 | 1.57 +Comm | 0.70503 | 0.7188 | 0.72807 | 1.1 | 3.02 +Output | 0.0018752 | 0.0047592 | 0.013386 | 7.2 | 0.02 +Modify | 0.91164 | 0.91644 | 0.92123 | 0.5 | 3.86 +Other | | 0.06335 | | | 0.27 + +Nlocal: 1375 ave 1381 max 1368 min +Histogram: 1 0 0 0 0 1 1 0 0 1 +Nghost: 7803.75 ave 7856 max 7755 min +Histogram: 1 0 0 0 1 1 0 0 0 1 +Neighs: 334465 ave 349504 max 315867 min +Histogram: 1 0 0 1 0 0 0 0 1 1 + +Total # of neighbors = 1337859 +Ave neighs/atom = 243.247 +Ave special neighs/atom = 15.6364 +Neighbor list builds = 32 +Dangerous builds = 0 +Total wall time: 0:00:23 diff --git a/examples/USER/drude/toluene/log.7Aug19.toluene.nh.g++.1 b/examples/USER/drude/toluene/log.7Aug19.toluene.nh.g++.1 new file mode 100644 index 0000000000..be5d856d1e --- /dev/null +++ b/examples/USER/drude/toluene/log.7Aug19.toluene.nh.g++.1 @@ -0,0 +1,262 @@ +LAMMPS (7 Aug 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:93) + using 1 OpenMP thread(s) per MPI task +# 250 toluene system for drude polarizability example (Nose-Hoover) + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +improper_style fourier +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style lj/cut/thole/long 2.600 8.0 8.0 +pair_modify mix geometric tail yes +kspace_style pppm 1.0e-4 + +read_data data.toluene extra/special/per/atom 1 + orthogonal box = (-18.2908 -18.1636 -18.223) to (18.3357 18.1621 18.3287) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 5500 atoms + scanning bonds ... + 4 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 8 = max dihedrals/atom + scanning impropers ... + 2 = max impropers/atom + reading bonds ... + 5500 bonds + reading angles ... + 6000 angles + reading dihedrals ... + 6000 dihedrals + reading impropers ... + 1500 impropers + 5 = max # of 1-2 neighbors + 10 = max # of 1-3 neighbors + 16 = max # of 1-4 neighbors + 20 = max # of special neighbors + special bonds CPU = 0.0019815 secs + read_data CPU = 0.0168803 secs + +comm_modify vel yes + +group gTOLUENE molecule 1:250 +5500 atoms in group gTOLUENE +group gCORES type 1 2 3 4 5 6 7 +3750 atoms in group gCORES +group gDRUDES type 8 9 10 11 12 +1750 atoms in group gDRUDES + +pair_coeff 1 1 0.069998 3.550000 1.620000 # CAT CAT +pair_coeff 1 2 0.069998 3.550000 1.620000 # CAT CAO +pair_coeff 1 3 0.069998 3.550000 1.620000 # CAT CAM +pair_coeff 1 4 0.069998 3.550000 1.620000 # CAT CAP +pair_coeff 1 5 0.067968 3.524911 1.620000 # CAT CTT +pair_coeff 1 6 0.045825 2.931041 0.000000 # CAT HAT +pair_coeff 1 7 0.045825 2.931041 0.000000 # CAT HT +pair_coeff 2 2 0.069998 3.550000 1.620000 # CAO CAO +pair_coeff 2 3 0.069998 3.550000 1.620000 # CAO CAM +pair_coeff 2 4 0.069998 3.550000 1.620000 # CAO CAP +pair_coeff 2 5 0.067968 3.524911 1.620000 # CAO CTT +pair_coeff 2 6 0.045825 2.931041 0.000000 # CAO HAT +pair_coeff 2 7 0.045825 2.931041 0.000000 # CAO HT +pair_coeff 3 3 0.069998 3.550000 1.620000 # CAM CAM +pair_coeff 3 4 0.069998 3.550000 1.620000 # CAM CAP +pair_coeff 3 5 0.067968 3.524911 1.620000 # CAM CTT +pair_coeff 3 6 0.045825 2.931041 0.000000 # CAM HAT +pair_coeff 3 7 0.045825 2.931041 0.000000 # CAM HT +pair_coeff 4 4 0.069998 3.550000 1.620000 # CAP CAP +pair_coeff 4 5 0.067968 3.524911 1.620000 # CAP CTT +pair_coeff 4 6 0.045825 2.931041 0.000000 # CAP HAT +pair_coeff 4 7 0.045825 2.931041 0.000000 # CAP HT +pair_coeff 5 5 0.065997 3.500000 1.620000 # CTT CTT +pair_coeff 5 6 0.044496 2.910326 0.000000 # CTT HAT +pair_coeff 5 7 0.044496 2.910326 0.000000 # CTT HT +pair_coeff 6 6 0.029999 2.420000 0.000000 # HAT HAT +pair_coeff 6 7 0.029999 2.420000 0.000000 # HAT HT +pair_coeff 7 7 0.029999 2.420000 0.000000 # HT HT +pair_coeff 1 8 0.000000 0.000000 1.620000 # CAT D_CAT +pair_coeff 1 9 0.000000 0.000000 1.620000 # CAT D_CAO +pair_coeff 1 10 0.000000 0.000000 1.620000 # CAT D_CAM +pair_coeff 1 11 0.000000 0.000000 1.620000 # CAT D_CAP +pair_coeff 1 12 0.000000 0.000000 1.620000 # CAT D_CTT +pair_coeff 2 8 0.000000 0.000000 1.620000 # CAO D_CAT +pair_coeff 2 9 0.000000 0.000000 1.620000 # CAO D_CAO +pair_coeff 2 10 0.000000 0.000000 1.620000 # CAO D_CAM +pair_coeff 2 11 0.000000 0.000000 1.620000 # CAO D_CAP +pair_coeff 2 12 0.000000 0.000000 1.620000 # CAO D_CTT +pair_coeff 3 8 0.000000 0.000000 1.620000 # CAM D_CAT +pair_coeff 3 9 0.000000 0.000000 1.620000 # CAM D_CAO +pair_coeff 3 10 0.000000 0.000000 1.620000 # CAM D_CAM +pair_coeff 3 11 0.000000 0.000000 1.620000 # CAM D_CAP +pair_coeff 3 12 0.000000 0.000000 1.620000 # CAM D_CTT +pair_coeff 4 8 0.000000 0.000000 1.620000 # CAP D_CAT +pair_coeff 4 9 0.000000 0.000000 1.620000 # CAP D_CAO +pair_coeff 4 10 0.000000 0.000000 1.620000 # CAP D_CAM +pair_coeff 4 11 0.000000 0.000000 1.620000 # CAP D_CAP +pair_coeff 4 12 0.000000 0.000000 1.620000 # CAP D_CTT +pair_coeff 5 8 0.000000 0.000000 1.620000 # CTT D_CAT +pair_coeff 5 9 0.000000 0.000000 1.620000 # CTT D_CAO +pair_coeff 5 10 0.000000 0.000000 1.620000 # CTT D_CAM +pair_coeff 5 11 0.000000 0.000000 1.620000 # CTT D_CAP +pair_coeff 5 12 0.000000 0.000000 1.620000 # CTT D_CTT +pair_coeff 8 8 0.000000 0.000000 1.620000 # D_CAT D_CAT +pair_coeff 8 9 0.000000 0.000000 1.620000 # D_CAT D_CAO +pair_coeff 8 10 0.000000 0.000000 1.620000 # D_CAT D_CAM +pair_coeff 8 11 0.000000 0.000000 1.620000 # D_CAT D_CAP +pair_coeff 8 12 0.000000 0.000000 1.620000 # D_CAT D_CTT +pair_coeff 9 9 0.000000 0.000000 1.620000 # D_CAO D_CAO +pair_coeff 9 10 0.000000 0.000000 1.620000 # D_CAO D_CAM +pair_coeff 9 11 0.000000 0.000000 1.620000 # D_CAO D_CAP +pair_coeff 9 12 0.000000 0.000000 1.620000 # D_CAO D_CTT +pair_coeff 10 10 0.000000 0.000000 1.620000 # D_CAM D_CAM +pair_coeff 10 11 0.000000 0.000000 1.620000 # D_CAM D_CAP +pair_coeff 10 12 0.000000 0.000000 1.620000 # D_CAM D_CTT +pair_coeff 11 11 0.000000 0.000000 1.620000 # D_CAP D_CAP +pair_coeff 11 12 0.000000 0.000000 1.620000 # D_CAP D_CTT +pair_coeff 12 12 0.000000 0.000000 1.620000 # D_CTT D_CTT + + +neighbor 2.0 bin + +variable vTEMP equal 260.0 +variable vTEMP_D equal 1.0 +variable vPRESS equal 1.0 + +velocity gCORES create ${vTEMP} 12345 +velocity gCORES create 260 12345 +velocity gDRUDES create ${vTEMP_D} 12345 +velocity gDRUDES create 1 12345 + +fix fDRUDE all drude C C C C C N N D D D D D + +fix fSHAKE gCORES shake 0.0001 20 0 b 4 6 7 8 + 1250 = # of size 2 clusters + 0 = # of size 3 clusters + 250 = # of size 4 clusters + 0 = # of frozen angles + find clusters CPU = 0.000715256 secs + +compute cTEMP_CORE gCORES temp/com +compute cTEMP all temp/drude + +fix fDIRECT all drude/transform/direct +fix fNVT1 gCORES nvt temp ${vTEMP} ${vTEMP} 100.0 +fix fNVT1 gCORES nvt temp 260 ${vTEMP} 100.0 +fix fNVT1 gCORES nvt temp 260 260 100.0 +fix fNVT2 gDRUDES nvt temp ${vTEMP_D} ${vTEMP_D} 20.0 +fix fNVT2 gDRUDES nvt temp 1 ${vTEMP_D} 20.0 +fix fNVT2 gDRUDES nvt temp 1 1 20.0 +fix fINVERSE all drude/transform/inverse + +fix fMOMENTUM all momentum 100 linear 1 1 1 + +thermo_style custom step etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] +thermo 50 + +timestep 0.5 +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:323) + G vector (1/distance) = 0.382011 + grid = 40 40 40 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0325934 + estimated relative force accuracy = 9.8154e-05 + using double precision FFTW3 + 3d grid and FFT values/proc = 103823 64000 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 19 +New max number of 1-2 to 1-4 neighbors: 20 (+1) +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 = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut/thole/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 42.06 | 42.06 | 42.06 Mbytes +Step TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] + 0 11086.347 2910.7282 202.07402 8175.6191 6565.4851 20.333365 1.0706727e-06 -3299.85 4972.8631 1306116.6 -1306199.8 40273.68 48631.318 314.89553 3.1777821 + 50 3563.3755 4630.6343 321.47655 -1067.2588 735.72049 604.78665 689.14827 -3277.411 815.58183 1306088.7 -1306723.8 17813.424 48631.318 503.827 0.0087118192 + 100 3327.4724 4395.1107 305.12559 -1067.6382 597.93176 651.62645 945.4151 -3267.2851 584.58833 1306135.9 -1306715.8 17407.337 48631.318 478.20171 0.0075985539 + 150 3036.9065 4740.2304 329.08513 -1703.3239 558.64983 619.91284 658.80687 -3278.7837 285.12462 1306173 -1306720 18448.248 48631.318 515.75286 0.0063215188 + 200 2697.958 4559.3445 316.52733 -1861.3864 522.09334 593.89129 754.61446 -3273.49 87.660461 1306183.9 -1306730 17888.936 48631.318 496.07143 0.0068706164 + 250 2348.7568 4410.585 306.19988 -2061.8283 506.05007 575.35171 715.55054 -3276.3261 -18.364473 1306177.3 -1306741.4 11592.05 48631.318 479.88562 0.0071741032 + 300 2019.8258 4040.1415 280.48226 -2020.3157 604.3077 641.66689 693.93801 -3278.5312 -115.73641 1306183.2 -1306749.1 3631.3628 48631.318 439.57995 0.0069886387 + 350 1699.5166 3944.9851 273.87613 -2245.4685 452.07416 638.0653 658.79117 -3279.6053 -157.07584 1306196.9 -1306754.6 13544.368 48631.318 429.22694 0.0062868111 + 400 1399.2929 3726.098 258.68014 -2326.8051 457.91943 621.44726 639.39903 -3279.2395 -188.85914 1306185.4 -1306762.8 10792.274 48631.318 405.41134 0.0059340078 + 450 1120.5249 3518.345 244.25712 -2397.8201 519.48856 584.65789 646.36689 -3278.6685 -289.59913 1306184.1 -1306764.2 2755.5598 48631.318 382.80716 0.0055707485 + 500 868.0166 3359.8794 233.25583 -2491.8628 460.7393 581.49563 581.01731 -3281.5544 -252.20169 1306184.3 -1306765.7 6120.3639 48631.318 365.56528 0.0058756154 + 550 637.01567 3214.9521 223.19441 -2577.9364 431.81483 578.87411 540.94047 -3281.5337 -266.36075 1306182.8 -1306764.5 8622.4334 48631.318 349.79661 0.0058589653 + 600 418.04086 3113.4064 216.14472 -2695.3655 430.45935 538.68157 522.24598 -3283.456 -311.87901 1306174.3 -1306765.8 7068.9273 48631.318 338.74797 0.0059567598 + 650 218.5966 2930.8439 203.47052 -2712.2473 514.47294 514.28379 551.52551 -3282.0904 -405.37401 1306164.5 -1306769.5 -13.553736 48631.318 318.88482 0.0052667842 + 700 45.22721 2830.1443 196.47956 -2784.917 451.11156 498.26423 541.18835 -3282.1427 -375.95313 1306157.1 -1306774.4 3947.6276 48631.318 307.92741 0.0068019029 + 750 -114.28621 2798.3153 194.26988 -2912.6016 412.753 503.2878 481.32173 -3284.3411 -393.53984 1306147 -1306779.1 7143.3414 48631.318 304.46466 0.0061596717 + 800 -263.63817 2694.8084 187.08403 -2958.4466 455.67914 487.49754 476.8659 -3284.3133 -451.9578 1306145 -1306787.2 1185.9502 48631.318 293.20288 0.0058203332 + 850 -397.71592 2559.1921 177.66902 -2956.9081 458.83317 481.2262 478.31241 -3284.068 -437.26503 1306138.6 -1306792.6 346.80209 48631.318 278.44745 0.0054921692 + 900 -515.1823 2544.8753 176.67509 -3060.0576 395.00163 457.58988 446.68352 -3285.485 -423.56221 1306145 -1306795.3 3712.8598 48631.318 276.88864 0.0074054008 + 950 -617.28259 2451.1723 170.16987 -3068.4549 383.64277 446.59877 434.4624 -3285.1348 -391.59344 1306142.3 -1306798.7 5429.2488 48631.318 266.69431 0.0057487316 + 1000 -703.15534 2334.837 162.09342 -3037.9923 424.34948 462.21112 451.80809 -3284.3803 -426.53369 1306133.9 -1306799.3 1137.6145 48631.318 254.03675 0.0053914731 + 1050 -771.1763 2303.837 159.94128 -3075.0133 426.21409 436.50718 435.09987 -3285.1939 -411.14054 1306125.6 -1306802.1 1636.9383 48631.318 250.66295 0.0069342505 + 1100 -822.72236 2283.4196 158.52382 -3106.142 376.67684 447.77729 418.45768 -3286.5919 -377.48204 1306118.9 -1306803.8 4760.5163 48631.318 248.44119 0.0074025012 + 1150 -857.06075 2259.0717 156.8335 -3116.1324 400.31523 431.65981 457.68066 -3285.1977 -430.47723 1306115.8 -1306805.9 3194.5161 48631.318 245.79223 0.007063589 + 1200 -875.50848 2238.2637 155.38893 -3113.7722 445.38524 460.97125 432.10511 -3285.4238 -472.46606 1306114.7 -1306809 -653.49784 48631.318 243.52819 0.0071448738 + 1250 -880.37572 2294.6889 159.30618 -3175.0646 411.35427 444.73793 420.06468 -3286.0366 -458.05371 1306104.4 -1306811.5 945.80793 48631.318 249.66481 0.011853487 + 1300 -871.31064 2284.2298 158.58007 -3155.5405 404.97412 441.75285 426.34477 -3285.4859 -424.79609 1306094.9 -1306813.2 4406.6196 48631.318 248.48563 0.084424118 + 1350 -816.70005 2325.9264 161.47481 -3142.6265 696.80296 442.50053 431.19923 -3285.7859 -450.2699 1305836.2 -1306813.3 593.8098 48631.318 251.40749 2.9297319 + 1400 -794.25335 2263.5101 157.14163 -3057.7635 645.65165 466.22086 446.22268 -3285.1821 -420.65317 1305903.7 -1306813.8 1386.3633 48631.318 245.20554 1.8916154 + 1450 -776.10866 2287.6575 158.81803 -3063.7661 427.03477 479.10627 439.67495 -3285.9537 -395.13186 1306087.6 -1306816.1 2936.7806 48631.318 248.87167 0.061343245 + 1500 -725.48181 2371.413 164.63266 -3096.8948 390.03204 464.30903 446.91959 -3284.7809 -393.16613 1306095.4 -1306815.6 3544.25 48631.318 258.01286 0.011586563 + 1550 -671.4904 2315.9297 160.7808 -2987.4201 457.04935 500.25282 464.76203 -3284.9311 -400.98103 1306091.7 -1306815.3 2052.6339 48631.318 251.97726 0.0094517862 + 1600 -618.83633 2449.0918 170.02543 -3067.9281 425.47487 474.65876 471.99171 -3284.3677 -430.32107 1306091.3 -1306816.6 441.15682 48631.318 266.46311 0.014260935 + 1650 -567.82245 2425.2238 168.36842 -2993.0462 421.01953 511.27133 463.22065 -3285.038 -377.24066 1306088.4 -1306814.7 5198.8565 48631.318 263.83185 0.074738268 + 1700 -502.4486 2441.8554 169.52305 -2944.304 642.39962 512.90234 490.38297 -3283.9751 -417.39288 1305929.1 -1306817.7 1141.4411 48631.318 264.52393 2.043674 + 1750 -459.52196 2499.0746 173.49543 -2958.5966 679.38259 505.31787 484.77659 -3284.6272 -384.27736 1305861.6 -1306820.8 1527.2046 48631.318 270.10074 3.1869342 + 1800 -471.14403 2476.2266 171.90923 -2947.3706 442.47741 530.45656 474.03057 -3284.0954 -371.95117 1306084.3 -1306822.6 3392.2533 48631.318 269.36446 0.10416401 + 1850 -462.80763 2536.7112 176.10831 -2999.5188 437.08241 525.07462 474.0838 -3283.7906 -422.23719 1306091.6 -1306821.3 1629.8629 48631.318 275.99502 0.016806806 + 1900 -469.89289 2468.9765 171.4059 -2938.8694 446.77624 531.61059 496.01046 -3284.2338 -395.15325 1306085.7 -1306819.6 3119.5402 48631.318 268.62645 0.014601992 + 1950 -491.08007 2445.5966 169.78278 -2936.6767 457.80452 527.23373 470.18125 -3283.9608 -391.86377 1306101.9 -1306818 1122.5275 48631.318 266.08018 0.018911601 + 2000 -518.40811 2418.7208 167.91696 -2937.1289 415.93135 536.5973 480.44651 -3283.7881 -363.72783 1306096.2 -1306818.7 4475.7317 48631.318 263.09007 0.13504326 +Loop time of 70.696 on 1 procs for 2000 steps with 5500 atoms + +Performance: 1.222 ns/day, 19.638 hours/ns, 28.290 timesteps/s +97.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 | 48.367 | 48.367 | 48.367 | 0.0 | 68.42 +Bond | 2.9191 | 2.9191 | 2.9191 | 0.0 | 4.13 +Kspace | 14.266 | 14.266 | 14.266 | 0.0 | 20.18 +Neigh | 1.5262 | 1.5262 | 1.5262 | 0.0 | 2.16 +Comm | 0.27841 | 0.27841 | 0.27841 | 0.0 | 0.39 +Output | 0.0035572 | 0.0035572 | 0.0035572 | 0.0 | 0.01 +Modify | 3.2856 | 3.2856 | 3.2856 | 0.0 | 4.65 +Other | | 0.05018 | | | 0.07 + +Nlocal: 5500 ave 5500 max 5500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 15317 ave 15317 max 15317 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 1.30285e+06 ave 1.30285e+06 max 1.30285e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 1302849 +Ave neighs/atom = 236.882 +Ave special neighs/atom = 15.6364 +Neighbor list builds = 44 +Dangerous builds = 0 +Total wall time: 0:01:10 diff --git a/examples/USER/drude/toluene/log.7Aug19.toluene.nh.g++.4 b/examples/USER/drude/toluene/log.7Aug19.toluene.nh.g++.4 new file mode 100644 index 0000000000..8d58260754 --- /dev/null +++ b/examples/USER/drude/toluene/log.7Aug19.toluene.nh.g++.4 @@ -0,0 +1,262 @@ +LAMMPS (7 Aug 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:93) + using 1 OpenMP thread(s) per MPI task +# 250 toluene system for drude polarizability example (Nose-Hoover) + +units real +boundary p p p + +atom_style full +bond_style harmonic +angle_style harmonic +dihedral_style opls +improper_style fourier +special_bonds lj/coul 0.0 0.0 0.5 + +pair_style lj/cut/thole/long 2.600 8.0 8.0 +pair_modify mix geometric tail yes +kspace_style pppm 1.0e-4 + +read_data data.toluene extra/special/per/atom 1 + orthogonal box = (-18.2908 -18.1636 -18.223) to (18.3357 18.1621 18.3287) + 2 by 1 by 2 MPI processor grid + reading atoms ... + 5500 atoms + scanning bonds ... + 4 = max bonds/atom + scanning angles ... + 6 = max angles/atom + scanning dihedrals ... + 8 = max dihedrals/atom + scanning impropers ... + 2 = max impropers/atom + reading bonds ... + 5500 bonds + reading angles ... + 6000 angles + reading dihedrals ... + 6000 dihedrals + reading impropers ... + 1500 impropers + 5 = max # of 1-2 neighbors + 10 = max # of 1-3 neighbors + 16 = max # of 1-4 neighbors + 20 = max # of special neighbors + special bonds CPU = 0.000718355 secs + read_data CPU = 0.0167146 secs + +comm_modify vel yes + +group gTOLUENE molecule 1:250 +5500 atoms in group gTOLUENE +group gCORES type 1 2 3 4 5 6 7 +3750 atoms in group gCORES +group gDRUDES type 8 9 10 11 12 +1750 atoms in group gDRUDES + +pair_coeff 1 1 0.069998 3.550000 1.620000 # CAT CAT +pair_coeff 1 2 0.069998 3.550000 1.620000 # CAT CAO +pair_coeff 1 3 0.069998 3.550000 1.620000 # CAT CAM +pair_coeff 1 4 0.069998 3.550000 1.620000 # CAT CAP +pair_coeff 1 5 0.067968 3.524911 1.620000 # CAT CTT +pair_coeff 1 6 0.045825 2.931041 0.000000 # CAT HAT +pair_coeff 1 7 0.045825 2.931041 0.000000 # CAT HT +pair_coeff 2 2 0.069998 3.550000 1.620000 # CAO CAO +pair_coeff 2 3 0.069998 3.550000 1.620000 # CAO CAM +pair_coeff 2 4 0.069998 3.550000 1.620000 # CAO CAP +pair_coeff 2 5 0.067968 3.524911 1.620000 # CAO CTT +pair_coeff 2 6 0.045825 2.931041 0.000000 # CAO HAT +pair_coeff 2 7 0.045825 2.931041 0.000000 # CAO HT +pair_coeff 3 3 0.069998 3.550000 1.620000 # CAM CAM +pair_coeff 3 4 0.069998 3.550000 1.620000 # CAM CAP +pair_coeff 3 5 0.067968 3.524911 1.620000 # CAM CTT +pair_coeff 3 6 0.045825 2.931041 0.000000 # CAM HAT +pair_coeff 3 7 0.045825 2.931041 0.000000 # CAM HT +pair_coeff 4 4 0.069998 3.550000 1.620000 # CAP CAP +pair_coeff 4 5 0.067968 3.524911 1.620000 # CAP CTT +pair_coeff 4 6 0.045825 2.931041 0.000000 # CAP HAT +pair_coeff 4 7 0.045825 2.931041 0.000000 # CAP HT +pair_coeff 5 5 0.065997 3.500000 1.620000 # CTT CTT +pair_coeff 5 6 0.044496 2.910326 0.000000 # CTT HAT +pair_coeff 5 7 0.044496 2.910326 0.000000 # CTT HT +pair_coeff 6 6 0.029999 2.420000 0.000000 # HAT HAT +pair_coeff 6 7 0.029999 2.420000 0.000000 # HAT HT +pair_coeff 7 7 0.029999 2.420000 0.000000 # HT HT +pair_coeff 1 8 0.000000 0.000000 1.620000 # CAT D_CAT +pair_coeff 1 9 0.000000 0.000000 1.620000 # CAT D_CAO +pair_coeff 1 10 0.000000 0.000000 1.620000 # CAT D_CAM +pair_coeff 1 11 0.000000 0.000000 1.620000 # CAT D_CAP +pair_coeff 1 12 0.000000 0.000000 1.620000 # CAT D_CTT +pair_coeff 2 8 0.000000 0.000000 1.620000 # CAO D_CAT +pair_coeff 2 9 0.000000 0.000000 1.620000 # CAO D_CAO +pair_coeff 2 10 0.000000 0.000000 1.620000 # CAO D_CAM +pair_coeff 2 11 0.000000 0.000000 1.620000 # CAO D_CAP +pair_coeff 2 12 0.000000 0.000000 1.620000 # CAO D_CTT +pair_coeff 3 8 0.000000 0.000000 1.620000 # CAM D_CAT +pair_coeff 3 9 0.000000 0.000000 1.620000 # CAM D_CAO +pair_coeff 3 10 0.000000 0.000000 1.620000 # CAM D_CAM +pair_coeff 3 11 0.000000 0.000000 1.620000 # CAM D_CAP +pair_coeff 3 12 0.000000 0.000000 1.620000 # CAM D_CTT +pair_coeff 4 8 0.000000 0.000000 1.620000 # CAP D_CAT +pair_coeff 4 9 0.000000 0.000000 1.620000 # CAP D_CAO +pair_coeff 4 10 0.000000 0.000000 1.620000 # CAP D_CAM +pair_coeff 4 11 0.000000 0.000000 1.620000 # CAP D_CAP +pair_coeff 4 12 0.000000 0.000000 1.620000 # CAP D_CTT +pair_coeff 5 8 0.000000 0.000000 1.620000 # CTT D_CAT +pair_coeff 5 9 0.000000 0.000000 1.620000 # CTT D_CAO +pair_coeff 5 10 0.000000 0.000000 1.620000 # CTT D_CAM +pair_coeff 5 11 0.000000 0.000000 1.620000 # CTT D_CAP +pair_coeff 5 12 0.000000 0.000000 1.620000 # CTT D_CTT +pair_coeff 8 8 0.000000 0.000000 1.620000 # D_CAT D_CAT +pair_coeff 8 9 0.000000 0.000000 1.620000 # D_CAT D_CAO +pair_coeff 8 10 0.000000 0.000000 1.620000 # D_CAT D_CAM +pair_coeff 8 11 0.000000 0.000000 1.620000 # D_CAT D_CAP +pair_coeff 8 12 0.000000 0.000000 1.620000 # D_CAT D_CTT +pair_coeff 9 9 0.000000 0.000000 1.620000 # D_CAO D_CAO +pair_coeff 9 10 0.000000 0.000000 1.620000 # D_CAO D_CAM +pair_coeff 9 11 0.000000 0.000000 1.620000 # D_CAO D_CAP +pair_coeff 9 12 0.000000 0.000000 1.620000 # D_CAO D_CTT +pair_coeff 10 10 0.000000 0.000000 1.620000 # D_CAM D_CAM +pair_coeff 10 11 0.000000 0.000000 1.620000 # D_CAM D_CAP +pair_coeff 10 12 0.000000 0.000000 1.620000 # D_CAM D_CTT +pair_coeff 11 11 0.000000 0.000000 1.620000 # D_CAP D_CAP +pair_coeff 11 12 0.000000 0.000000 1.620000 # D_CAP D_CTT +pair_coeff 12 12 0.000000 0.000000 1.620000 # D_CTT D_CTT + + +neighbor 2.0 bin + +variable vTEMP equal 260.0 +variable vTEMP_D equal 1.0 +variable vPRESS equal 1.0 + +velocity gCORES create ${vTEMP} 12345 +velocity gCORES create 260 12345 +velocity gDRUDES create ${vTEMP_D} 12345 +velocity gDRUDES create 1 12345 + +fix fDRUDE all drude C C C C C N N D D D D D + +fix fSHAKE gCORES shake 0.0001 20 0 b 4 6 7 8 + 1250 = # of size 2 clusters + 0 = # of size 3 clusters + 250 = # of size 4 clusters + 0 = # of frozen angles + find clusters CPU = 0.000344038 secs + +compute cTEMP_CORE gCORES temp/com +compute cTEMP all temp/drude + +fix fDIRECT all drude/transform/direct +fix fNVT1 gCORES nvt temp ${vTEMP} ${vTEMP} 100.0 +fix fNVT1 gCORES nvt temp 260 ${vTEMP} 100.0 +fix fNVT1 gCORES nvt temp 260 260 100.0 +fix fNVT2 gDRUDES nvt temp ${vTEMP_D} ${vTEMP_D} 20.0 +fix fNVT2 gDRUDES nvt temp 1 ${vTEMP_D} 20.0 +fix fNVT2 gDRUDES nvt temp 1 1 20.0 +fix fINVERSE all drude/transform/inverse + +fix fMOMENTUM all momentum 100 linear 1 1 1 + +thermo_style custom step etotal ke temp pe ebond eangle edihed eimp evdwl ecoul elong press vol c_cTEMP[1] c_cTEMP[2] +thermo 50 + +timestep 0.5 +run 2000 +PPPM initialization ... + using 12-bit tables for long-range coulomb (src/kspace.cpp:323) + G vector (1/distance) = 0.382011 + grid = 40 40 40 + stencil order = 5 + estimated absolute RMS force accuracy = 0.0325934 + estimated relative force accuracy = 9.8154e-05 + using double precision FFTW3 + 3d grid and FFT values/proc = 34263 16000 +Rebuild special list taking Drude particles into account +Old max number of 1-2 to 1-4 neighbors: 19 +New max number of 1-2 to 1-4 neighbors: 20 (+1) +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 = 8 8 8 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut/thole/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 18 | 18 | 18 Mbytes +Step TotEng KinEng Temp PotEng E_bond E_angle E_dihed E_impro E_vdwl E_coul E_long Press Volume c_cTEMP[1] c_cTEMP[2] + 0 11086.347 2910.7282 202.07402 8175.6191 6565.4851 20.333365 1.0706727e-06 -3299.85 4972.8631 1306116.6 -1306199.8 40273.68 48631.318 314.89553 3.1777821 + 50 3563.376 4630.6343 321.47655 -1067.2583 735.72048 604.78665 689.14826 -3277.411 815.58183 1306088.7 -1306723.8 17813.425 48631.318 503.827 0.0087118179 + 100 3327.4722 4395.1107 305.12559 -1067.6385 597.93175 651.62645 945.4151 -3267.2851 584.58833 1306135.9 -1306715.8 17407.335 48631.318 478.2017 0.0075985638 + 150 3036.9065 4740.2304 329.08513 -1703.3238 558.64983 619.91284 658.80686 -3278.7837 285.12462 1306173 -1306720 18448.248 48631.318 515.75286 0.0063215227 + 200 2697.9581 4559.3445 316.52734 -1861.3864 522.09335 593.8913 754.61446 -3273.49 87.660464 1306183.9 -1306730 17888.937 48631.318 496.07143 0.006870622 + 250 2348.7563 4410.585 306.19988 -2061.8288 506.05006 575.35172 715.55055 -3276.3261 -18.364482 1306177.3 -1306741.4 11592.049 48631.318 479.88562 0.0071741023 + 300 2019.8256 4040.1415 280.48225 -2020.3159 604.30771 641.66688 693.93802 -3278.5312 -115.73639 1306183.2 -1306749.1 3631.3625 48631.318 439.57995 0.0069886424 + 350 1699.5169 3944.9851 273.87613 -2245.4682 452.07416 638.06529 658.79116 -3279.6053 -157.07584 1306196.9 -1306754.6 13544.368 48631.318 429.22695 0.0062868216 + 400 1399.2927 3726.098 258.68014 -2326.8053 457.91943 621.44727 639.39905 -3279.2395 -188.85912 1306185.4 -1306762.8 10792.273 48631.318 405.41133 0.0059340084 + 450 1120.5246 3518.345 244.25712 -2397.8204 519.48859 584.6579 646.36688 -3278.6685 -289.59912 1306184.1 -1306764.2 2755.5597 48631.318 382.80717 0.005570751 + 500 868.01643 3359.8794 233.25583 -2491.863 460.73928 581.49568 581.01732 -3281.5544 -252.20168 1306184.3 -1306765.7 6120.364 48631.318 365.56528 0.0058756204 + 550 637.01646 3214.9521 223.19441 -2577.9356 431.81484 578.87415 540.94046 -3281.5337 -266.36074 1306182.8 -1306764.5 8622.4353 48631.318 349.79661 0.0058589476 + 600 418.04028 3113.4063 216.14471 -2695.3661 430.45936 538.68158 522.24597 -3283.456 -311.87897 1306174.3 -1306765.8 7068.9275 48631.318 338.74796 0.0059567639 + 650 218.59562 2930.8439 203.47052 -2712.2482 514.47296 514.2838 551.52551 -3282.0904 -405.37401 1306164.5 -1306769.5 -13.554086 48631.318 318.88481 0.0052667849 + 700 45.227739 2830.1443 196.47957 -2784.9165 451.11157 498.26426 541.18833 -3282.1427 -375.95321 1306157.1 -1306774.4 3947.6268 48631.318 307.92741 0.0068018884 + 750 -114.28676 2798.3154 194.26988 -2912.6022 412.75298 503.28782 481.32167 -3284.3411 -393.53987 1306147 -1306779.1 7143.3424 48631.318 304.46466 0.0061596613 + 800 -263.63827 2694.8085 187.08403 -2958.4468 455.67916 487.49754 476.86576 -3284.3133 -451.95784 1306145 -1306787.2 1185.9474 48631.318 293.20289 0.0058203323 + 850 -397.71592 2559.1922 177.66903 -2956.9082 458.83313 481.22619 478.31233 -3284.068 -437.26509 1306138.6 -1306792.6 346.80221 48631.318 278.44747 0.0054921238 + 900 -515.18134 2544.8753 176.67509 -3060.0567 395.0016 457.5898 446.68361 -3285.485 -423.56234 1306145.1 -1306795.3 3712.8594 48631.318 276.88864 0.0074054726 + 950 -617.28607 2451.1721 170.16985 -3068.4582 383.6428 446.59872 434.46241 -3285.1348 -391.59326 1306142.3 -1306798.7 5429.2191 48631.318 266.69429 0.0057487961 + 1000 -703.15541 2334.8366 162.09339 -3037.992 424.34957 462.21115 451.80811 -3284.3803 -426.53346 1306133.9 -1306799.3 1137.6144 48631.318 254.03671 0.0053915025 + 1050 -771.17572 2303.8364 159.94123 -3075.0121 426.21406 436.50744 435.10013 -3285.1938 -411.13999 1306125.6 -1306802.1 1636.9467 48631.318 250.66288 0.0069341736 + 1100 -822.72317 2283.421 158.52392 -3106.1442 376.67703 447.77728 418.45763 -3286.5919 -377.48075 1306118.9 -1306803.8 4760.4718 48631.318 248.44134 0.0074024122 + 1150 -857.06061 2259.0725 156.83355 -3116.1331 400.31517 431.65949 457.68078 -3285.1977 -430.47775 1306115.8 -1306805.9 3194.5159 48631.318 245.79231 0.007063706 + 1200 -875.50971 2238.2632 155.38889 -3113.7729 445.38534 460.97161 432.10511 -3285.4238 -472.46582 1306114.7 -1306809 -653.49627 48631.318 243.52813 0.0071446561 + 1250 -880.37609 2294.689 159.30619 -3175.0651 411.35498 444.73774 420.06429 -3286.0366 -458.05353 1306104.4 -1306811.5 945.79687 48631.318 249.66483 0.011854196 + 1300 -871.31122 2284.2295 158.58005 -3155.5407 404.97869 441.75305 426.34479 -3285.4859 -424.79602 1306094.8 -1306813.2 4406.6128 48631.318 248.4856 0.084411062 + 1350 -816.69657 2325.9211 161.47444 -3142.6176 696.85542 442.50059 431.19981 -3285.7859 -450.27129 1305836.1 -1306813.3 593.86622 48631.318 251.40736 2.9289249 + 1400 -794.25213 2263.5122 157.14177 -3057.7643 645.6531 466.2204 446.22253 -3285.1821 -420.65316 1305903.7 -1306813.8 1386.3481 48631.318 245.20568 1.8917548 + 1450 -776.1076 2287.6591 158.81814 -3063.7667 427.0331 479.10417 439.67675 -3285.9536 -395.13308 1306087.6 -1306816.1 2936.7117 48631.318 248.87185 0.061341392 + 1500 -725.48032 2371.4108 164.63251 -3096.8911 390.03135 464.30817 446.91941 -3284.7808 -393.16302 1306095.4 -1306815.6 3544.3635 48631.318 258.01262 0.011585228 + 1550 -671.48696 2315.9233 160.78035 -2987.4102 457.04771 500.26018 464.7623 -3284.931 -400.98142 1306091.7 -1306815.3 2052.6204 48631.318 251.97656 0.0094518433 + 1600 -618.82679 2449.0893 170.02525 -3067.9161 425.47171 474.66369 471.99137 -3284.3677 -430.3224 1306091.3 -1306816.6 441.31257 48631.318 266.46283 0.014263201 + 1650 -567.82233 2425.2281 168.36872 -2993.0504 421.02008 511.26686 463.22202 -3285.0378 -377.24205 1306088.4 -1306814.7 5198.6214 48631.318 263.83232 0.074728934 + 1700 -502.46013 2441.8437 169.52224 -2944.3039 642.39863 512.90005 490.39655 -3283.975 -417.39351 1305929.1 -1306817.7 1141.2401 48631.318 264.52268 2.0436397 + 1750 -459.52135 2499.0847 173.49613 -2958.606 679.34078 505.30943 484.78276 -3284.6269 -384.28217 1305861.7 -1306820.8 1527.0852 48631.318 270.10144 3.1876179 + 1800 -471.14322 2476.2445 171.91047 -2947.3877 442.48278 530.4566 474.0343 -3284.0957 -371.97492 1306084.3 -1306822.6 3392.0306 48631.318 269.36641 0.1041603 + 1850 -462.80151 2536.7173 176.10873 -2999.5188 437.07855 525.05914 474.07725 -3283.7908 -422.22641 1306091.6 -1306821.3 1630.1204 48631.318 275.99568 0.016808725 + 1900 -469.8785 2468.9596 171.40473 -2938.8381 446.7879 531.6128 496.02681 -3284.2335 -395.17163 1306085.7 -1306819.6 3119.2384 48631.318 268.62462 0.014603394 + 1950 -491.07182 2445.6794 169.78853 -2936.7512 457.80204 527.21208 470.1608 -3283.9622 -391.90163 1306101.9 -1306818 1122.0978 48631.318 266.08919 0.018903661 + 2000 -518.41243 2418.604 167.90885 -2937.0165 415.92605 536.62844 480.48912 -3283.7876 -363.72641 1306096.2 -1306818.7 4474.8778 48631.318 263.07743 0.13492637 +Loop time of 22.3198 on 4 procs for 2000 steps with 5500 atoms + +Performance: 3.871 ns/day, 6.200 hours/ns, 89.606 timesteps/s +98.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 11.452 | 12.249 | 12.556 | 13.2 | 54.88 +Bond | 0.71352 | 0.72923 | 0.74557 | 1.3 | 3.27 +Kspace | 5.7189 | 6.0293 | 6.8195 | 18.6 | 27.01 +Neigh | 0.44028 | 0.44044 | 0.44065 | 0.0 | 1.97 +Comm | 0.39667 | 0.40817 | 0.41558 | 1.1 | 1.83 +Output | 0.0019479 | 0.0032187 | 0.0068657 | 3.7 | 0.01 +Modify | 2.413 | 2.4256 | 2.4347 | 0.5 | 10.87 +Other | | 0.0349 | | | 0.16 + +Nlocal: 1375 ave 1407 max 1349 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Nghost: 8082.5 ave 8114 max 8047 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Neighs: 325715 ave 343636 max 314954 min +Histogram: 1 1 0 1 0 0 0 0 0 1 + +Total # of neighbors = 1302860 +Ave neighs/atom = 236.884 +Ave special neighs/atom = 15.6364 +Neighbor list builds = 44 +Dangerous builds = 0 +Total wall time: 0:00:22 From aba472df3b0b48af8b8c367f2bfa184b4b466fc7 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Tue, 17 Sep 2019 12:25:07 -0700 Subject: [PATCH 140/237] removed excess line in langevin docs --- doc/src/fix_langevin.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/src/fix_langevin.txt b/doc/src/fix_langevin.txt index 0aa65be0f5..8d489a27d1 100644 --- a/doc/src/fix_langevin.txt +++ b/doc/src/fix_langevin.txt @@ -260,7 +260,6 @@ recall that while the equilibrium statistics is appropriately sampled, the corre of the trajectories may not be for large time steps, as is the case for all thermostats. All thermostats provide good statistics and dynamics for small time steps. The 2GJ half-step velocity {vhalf} samples the correct velocity distribution for the {gjf} trajectory. -other available thermostats are shown in the LAMMPS directory: examples/gjf. This updated implementation of the {gjf} thermostat includes the choice between outputting either the on-site {vfull} or half-step {vhalf} velocity. The on-site From df3fad3b491d8ba9d1c596890b39003d5eb2b682 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 18 Sep 2019 14:35:12 -0400 Subject: [PATCH 141/237] output number of processors when reporting a mismatch on reading a restart --- src/read_restart.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/read_restart.cpp b/src/read_restart.cpp index 3d2e2b6592..62ce209b90 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -734,8 +734,12 @@ void ReadRestart::header(int incompatible) } else if (flag == NPROCS) { nprocs_file = read_int(); - if (nprocs_file != comm->nprocs && me == 0) - error->warning(FLERR,"Restart file used different # of processors"); + if (nprocs_file != comm->nprocs && me == 0) { + char msg[128]; + snprintf(msg,128,"Restart file used different # of processors: %d vs. %d", + nprocs_file,comm->nprocs); + error->warning(FLERR,msg); + } // don't set procgrid, warn if different From 2ea11b3195ece92f1ca1f4cea395cd90c31e5e87 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 18 Sep 2019 15:50:26 -0400 Subject: [PATCH 142/237] implement test for C++11 and document it --- cmake/CMakeLists.txt | 9 ++++++++- doc/src/Build_settings.txt | 23 +++++++++++++++++++++++ src/MAKE/Makefile.mpi | 6 +++--- src/MAKE/Makefile.serial | 6 +++--- src/lmptype.h | 7 +++++++ 5 files changed, 44 insertions(+), 7 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 91fb930be2..ed9825a830 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -52,10 +52,17 @@ check_for_autogen_files(${LAMMPS_SOURCE_DIR}) include(CheckCCompilerFlag) include(CheckIncludeFileCXX) -if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") +if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -restrict") endif() +option(DISABLE_CXX11_REQUIREMENT "Disable check that requires C++11 for compiling LAMMPS" OFF) +if(DISABLE_CXX11_REQUIREMENT) + add_definitions(-DLAMMPS_CXX98) +else() + set(CMAKE_CXX_STANDARD 11) +endif() + # GNU compiler features if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") option(ENABLE_COVERAGE "Enable code coverage" OFF) diff --git a/doc/src/Build_settings.txt b/doc/src/Build_settings.txt index 287cd39ff6..baff537e3b 100644 --- a/doc/src/Build_settings.txt +++ b/doc/src/Build_settings.txt @@ -12,6 +12,7 @@ Optional build settings :h3 LAMMPS can be built with several optional settings. Each sub-section explain how to do this for building both with CMake and make. +"C++11 standard compliance test"_#cxx11 when building all of LAMMPS "FFT library"_#fft for use with the "kspace_style pppm"_kspace_style.html command "Size of LAMMPS data types"_#size "Read or write compressed files"_#gzip @@ -23,6 +24,28 @@ explain how to do this for building both with CMake and make. :line +C++11 standard compliance test :h4(cxx11) + +The LAMMPS developers plan to transition to make the C++11 standard the +minimum requirement for compiling LAMMPS. Currently this only applies to +some packages like KOKKOS while the rest aims to be compatible with the C++98 +standard. Most currently used compilers are compatible with C++11; some need +to set extra flags to switch. To determine the impact of requiring C++11, +we have added a simple compliance test to the source code, that will cause +the compilation to abort, if C++11 compliance is not available or enabled. +To bypass this check, you need to change a setting in the makefile or +when calling CMake. + +[CMake variable]: + +-D DISABLE_CXX11_REQUIREMENT=yes + +[Makefile.machine setting]: + +LMP_INC = -DLAMMPS_CXX98 + +:line + FFT library :h4,link(fft) When the KSPACE package is included in a LAMMPS build, the diff --git a/src/MAKE/Makefile.mpi b/src/MAKE/Makefile.mpi index f30220da3d..3be2e20f95 100644 --- a/src/MAKE/Makefile.mpi +++ b/src/MAKE/Makefile.mpi @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual -LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 +LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 # -DLAMMPS_CXX98 # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts diff --git a/src/MAKE/Makefile.serial b/src/MAKE/Makefile.serial index 5954d97761..86ddd05053 100644 --- a/src/MAKE/Makefile.serial +++ b/src/MAKE/Makefile.serial @@ -26,12 +26,12 @@ SHLIBFLAGS = -shared # if you change any -D setting, do full re-compile after "make clean" # LAMMPS ifdef settings -# see possible settings in Section 2.2 (step 4) of manual +# see possible settings in Section 3.5 of the manual -LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 +LMP_INC = -DLAMMPS_GZIP -DLAMMPS_MEMALIGN=64 # -DLAMMPS_CXX98 # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts diff --git a/src/lmptype.h b/src/lmptype.h index 65e46535fc..b220538190 100644 --- a/src/lmptype.h +++ b/src/lmptype.h @@ -28,6 +28,13 @@ #ifndef LMP_LMPTYPE_H #define LMP_LMPTYPE_H +// C++11 check +#ifndef LAMMPS_CXX98 +#if __cplusplus <= 199711L + #error LAMMPS is planning to transition to C++11. Do disable this error please use a C++11 compliant compiler, enable C++11 (or later) compliance, or define LAMMPS_CXX98 in your makefile +#endif +#endif + #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS #endif From e847777e43d424470ece7ea6e1affd86b39085ee Mon Sep 17 00:00:00 2001 From: Mary Alice Cusentino Date: Wed, 18 Sep 2019 14:34:20 -0600 Subject: [PATCH 143/237] Added W-Be example to example/snap folder --- examples/snap/WBe_Wood_PRB2019.snap | 1 + examples/snap/WBe_Wood_PRB2019.snapcoeff | 1 + examples/snap/WBe_Wood_PRB2019.snapparam | 1 + examples/snap/in.snap.WBe.PRB2019 | 48 ++++++ examples/snap/log.18Sep19.snap.WBeSNAP.g++.1 | 154 +++++++++++++++++++ examples/snap/log.18Sep19.snap.WBeSNAP.g++.4 | 154 +++++++++++++++++++ potentials/WBe_Wood_PRB2019.snap | 15 ++ potentials/WBe_Wood_PRB2019.snapcoeff | 117 ++++++++++++++ potentials/WBe_Wood_PRB2019.snapparam | 11 ++ 9 files changed, 502 insertions(+) create mode 120000 examples/snap/WBe_Wood_PRB2019.snap create mode 120000 examples/snap/WBe_Wood_PRB2019.snapcoeff create mode 120000 examples/snap/WBe_Wood_PRB2019.snapparam create mode 100644 examples/snap/in.snap.WBe.PRB2019 create mode 100644 examples/snap/log.18Sep19.snap.WBeSNAP.g++.1 create mode 100644 examples/snap/log.18Sep19.snap.WBeSNAP.g++.4 create mode 100644 potentials/WBe_Wood_PRB2019.snap create mode 100644 potentials/WBe_Wood_PRB2019.snapcoeff create mode 100644 potentials/WBe_Wood_PRB2019.snapparam diff --git a/examples/snap/WBe_Wood_PRB2019.snap b/examples/snap/WBe_Wood_PRB2019.snap new file mode 120000 index 0000000000..35454e3eb8 --- /dev/null +++ b/examples/snap/WBe_Wood_PRB2019.snap @@ -0,0 +1 @@ +../../potentials/WBe_Wood_PRB2019.snap \ No newline at end of file diff --git a/examples/snap/WBe_Wood_PRB2019.snapcoeff b/examples/snap/WBe_Wood_PRB2019.snapcoeff new file mode 120000 index 0000000000..b734e52610 --- /dev/null +++ b/examples/snap/WBe_Wood_PRB2019.snapcoeff @@ -0,0 +1 @@ +../../potentials/WBe_Wood_PRB2019.snapcoeff \ No newline at end of file diff --git a/examples/snap/WBe_Wood_PRB2019.snapparam b/examples/snap/WBe_Wood_PRB2019.snapparam new file mode 120000 index 0000000000..8f3530ffd6 --- /dev/null +++ b/examples/snap/WBe_Wood_PRB2019.snapparam @@ -0,0 +1 @@ +../../potentials/WBe_Wood_PRB2019.snapparam \ No newline at end of file diff --git a/examples/snap/in.snap.WBe.PRB2019 b/examples/snap/in.snap.WBe.PRB2019 new file mode 100644 index 0000000000..1e25bbb6a6 --- /dev/null +++ b/examples/snap/in.snap.WBe.PRB2019 @@ -0,0 +1,48 @@ +# Demonstrate SNAP W-Be potential + +# Initialize simulation + +variable nsteps index 100 +variable nrep equal 4 +variable a equal 3.1803 +units metal + +# generate the box and atom positions using a BCC lattice + +variable nx equal ${nrep} +variable ny equal ${nrep} +variable nz equal ${nrep} + +boundary p p p + +lattice bcc $a +region box block 0 ${nx} 0 ${ny} 0 ${nz} +create_box 2 box +create_atoms 1 box +mass 1 183.84 +mass 2 9.012182 + +set group all type/fraction 2 0.05 3590153 # Change 5% of W to He +group tungsten type 1 +group beryllium type 2 +# choose potential + +include WBe_Wood_PRB2019.snap + +# Setup output + +thermo 10 +thermo_modify norm yes + +# Set up NVE run + +timestep 0.5e-3 +neighbor 1.0 bin +neigh_modify once no every 1 delay 0 check yes + +# Run MD + +velocity all create 300.0 4928459 +fix 1 all nve +run ${nsteps} + diff --git a/examples/snap/log.18Sep19.snap.WBeSNAP.g++.1 b/examples/snap/log.18Sep19.snap.WBeSNAP.g++.1 new file mode 100644 index 0000000000..2b889e036b --- /dev/null +++ b/examples/snap/log.18Sep19.snap.WBeSNAP.g++.1 @@ -0,0 +1,154 @@ +LAMMPS (7 Aug 2019) +# Demonstrate SNAP W-Be potential + +# Initialize simulation + +variable nsteps index 100 +variable nrep equal 4 +variable a equal 3.1803 +units metal + +# generate the box and atom positions using a BCC lattice + +variable nx equal ${nrep} +variable nx equal 4 +variable ny equal ${nrep} +variable ny equal 4 +variable nz equal ${nrep} +variable nz equal 4 + +boundary p p p + +lattice bcc $a +lattice bcc 3.1803 +Lattice spacing in x,y,z = 3.1803 3.1803 3.1803 +region box block 0 ${nx} 0 ${ny} 0 ${nz} +region box block 0 4 0 ${ny} 0 ${nz} +region box block 0 4 0 4 0 ${nz} +region box block 0 4 0 4 0 4 +create_box 2 box +Created orthogonal box = (0 0 0) to (12.7212 12.7212 12.7212) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 128 atoms + create_atoms CPU = 0.000234842 secs +mass 1 183.84 +mass 2 9.012182 + +set group all type/fraction 2 0.05 3590153 # Change 5% of W to He + 5 settings made for type/fraction +group tungsten type 1 +123 atoms in group tungsten +group beryllium type 2 +5 atoms in group beryllium +# choose potential + +include WBe_Wood_PRB2019.snap +# Definition of SNAP+ZBL potential. +variable zblcutinner equal 4 +variable zblcutouter equal 4.8 +variable zblz1 equal 74 +variable zblz2 equal 4 + +# Specify hybrid with SNAP and ZBL + +pair_style hybrid/overlay zbl ${zblcutinner} ${zblcutouter} snap +pair_style hybrid/overlay zbl 4 ${zblcutouter} snap +pair_style hybrid/overlay zbl 4 4.8 snap +pair_coeff 1 1 zbl ${zblz1} ${zblz1} +pair_coeff 1 1 zbl 74 ${zblz1} +pair_coeff 1 1 zbl 74 74 +pair_coeff 1 2 zbl ${zblz1} ${zblz2} +pair_coeff 1 2 zbl 74 ${zblz2} +pair_coeff 1 2 zbl 74 4 +pair_coeff 2 2 zbl ${zblz2} ${zblz2} +pair_coeff 2 2 zbl 4 ${zblz2} +pair_coeff 2 2 zbl 4 4 +pair_coeff * * snap WBe_Wood_PRB2019.snapcoeff WBe_Wood_PRB2019.snapparam W Be +SNAP Element = W, Radius 0.5, Weight 1 +SNAP Element = Be, Radius 0.417932, Weight 0.959049 +SNAP keyword rcutfac 4.8123 +SNAP keyword twojmax 8 +SNAP keyword rfac0 0.99363 +SNAP keyword rmin0 0 +SNAP keyword bzeroflag 1 +SNAP keyword quadraticflag 0 + + +# Setup output + +thermo 10 +thermo_modify norm yes + +# Set up NVE run + +timestep 0.5e-3 +neighbor 1.0 bin +neigh_modify once no every 1 delay 0 check yes + +# Run MD + +velocity all create 300.0 4928459 +fix 1 all nve +run ${nsteps} +run 100 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.8123 + ghost atom cutoff = 5.8123 + binsize = 2.90615, bins = 5 5 5 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair zbl, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair snap, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.268 | 4.268 | 4.268 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 300 -8.5980876 0 -8.5596125 -35284.855 + 10 299.29029 -8.5979965 0 -8.5596125 -35299.259 + 20 288.99334 -8.5966759 0 -8.5596124 -35004.093 + 30 269.91027 -8.5942284 0 -8.5596123 -34447.077 + 40 243.57361 -8.5908505 0 -8.5596121 -33687.105 + 50 212.21385 -8.5868284 0 -8.5596119 -32821.864 + 60 178.77144 -8.5825391 0 -8.5596116 -31971.17 + 70 146.71854 -8.578428 0 -8.5596113 -31245.51 + 80 119.50956 -8.5749383 0 -8.5596111 -30724.137 + 90 99.872785 -8.5724197 0 -8.559611 -30440.244 + 100 89.604584 -8.5711027 0 -8.5596109 -30392.805 +Loop time of 3.16831 on 1 procs for 100 steps with 128 atoms + +Performance: 1.364 ns/day, 17.602 hours/ns, 31.563 timesteps/s +199.5% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 3.1672 | 3.1672 | 3.1672 | 0.0 | 99.97 +Neigh | 0.00030208 | 0.00030208 | 0.00030208 | 0.0 | 0.01 +Comm | 0.00029612 | 0.00029612 | 0.00029612 | 0.0 | 0.01 +Output | 0.00019813 | 0.00019813 | 0.00019813 | 0.0 | 0.01 +Modify | 0.00014448 | 0.00014448 | 0.00014448 | 0.0 | 0.00 +Other | | 0.0001433 | | | 0.00 + +Nlocal: 128 ave 128 max 128 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 727 ave 727 max 727 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 3710 ave 3710 max 3710 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 7420 ave 7420 max 7420 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 7420 +Ave neighs/atom = 57.9688 +Neighbor list builds = 1 +Dangerous builds = 0 + +Total wall time: 0:00:03 diff --git a/examples/snap/log.18Sep19.snap.WBeSNAP.g++.4 b/examples/snap/log.18Sep19.snap.WBeSNAP.g++.4 new file mode 100644 index 0000000000..d8cdae6810 --- /dev/null +++ b/examples/snap/log.18Sep19.snap.WBeSNAP.g++.4 @@ -0,0 +1,154 @@ +LAMMPS (7 Aug 2019) +# Demonstrate SNAP W-Be potential + +# Initialize simulation + +variable nsteps index 100 +variable nrep equal 4 +variable a equal 3.1803 +units metal + +# generate the box and atom positions using a BCC lattice + +variable nx equal ${nrep} +variable nx equal 4 +variable ny equal ${nrep} +variable ny equal 4 +variable nz equal ${nrep} +variable nz equal 4 + +boundary p p p + +lattice bcc $a +lattice bcc 3.1803 +Lattice spacing in x,y,z = 3.1803 3.1803 3.1803 +region box block 0 ${nx} 0 ${ny} 0 ${nz} +region box block 0 4 0 ${ny} 0 ${nz} +region box block 0 4 0 4 0 ${nz} +region box block 0 4 0 4 0 4 +create_box 2 box +Created orthogonal box = (0 0 0) to (12.7212 12.7212 12.7212) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 128 atoms + create_atoms CPU = 0.000317097 secs +mass 1 183.84 +mass 2 9.012182 + +set group all type/fraction 2 0.05 3590153 # Change 5% of W to He + 5 settings made for type/fraction +group tungsten type 1 +123 atoms in group tungsten +group beryllium type 2 +5 atoms in group beryllium +# choose potential + +include WBe_Wood_PRB2019.snap +# Definition of SNAP+ZBL potential. +variable zblcutinner equal 4 +variable zblcutouter equal 4.8 +variable zblz1 equal 74 +variable zblz2 equal 4 + +# Specify hybrid with SNAP and ZBL + +pair_style hybrid/overlay zbl ${zblcutinner} ${zblcutouter} snap +pair_style hybrid/overlay zbl 4 ${zblcutouter} snap +pair_style hybrid/overlay zbl 4 4.8 snap +pair_coeff 1 1 zbl ${zblz1} ${zblz1} +pair_coeff 1 1 zbl 74 ${zblz1} +pair_coeff 1 1 zbl 74 74 +pair_coeff 1 2 zbl ${zblz1} ${zblz2} +pair_coeff 1 2 zbl 74 ${zblz2} +pair_coeff 1 2 zbl 74 4 +pair_coeff 2 2 zbl ${zblz2} ${zblz2} +pair_coeff 2 2 zbl 4 ${zblz2} +pair_coeff 2 2 zbl 4 4 +pair_coeff * * snap WBe_Wood_PRB2019.snapcoeff WBe_Wood_PRB2019.snapparam W Be +SNAP Element = W, Radius 0.5, Weight 1 +SNAP Element = Be, Radius 0.417932, Weight 0.959049 +SNAP keyword rcutfac 4.8123 +SNAP keyword twojmax 8 +SNAP keyword rfac0 0.99363 +SNAP keyword rmin0 0 +SNAP keyword bzeroflag 1 +SNAP keyword quadraticflag 0 + + +# Setup output + +thermo 10 +thermo_modify norm yes + +# Set up NVE run + +timestep 0.5e-3 +neighbor 1.0 bin +neigh_modify once no every 1 delay 0 check yes + +# Run MD + +velocity all create 300.0 4928459 +fix 1 all nve +run ${nsteps} +run 100 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.8123 + ghost atom cutoff = 5.8123 + binsize = 2.90615, bins = 5 5 5 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair zbl, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair snap, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.167 | 4.167 | 4.167 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 300 -8.5980876 0 -8.5596125 -35284.855 + 10 296.24946 -8.5976065 0 -8.5596124 -35140.29 + 20 282.27904 -8.5958147 0 -8.5596123 -34710.3 + 30 259.54978 -8.5928995 0 -8.5596121 -34060.43 + 40 230.41412 -8.5891626 0 -8.5596119 -33258.275 + 50 197.85135 -8.5849861 0 -8.5596116 -32389.527 + 60 165.21732 -8.5808005 0 -8.5596113 -31550.426 + 70 135.94024 -8.5770455 0 -8.5596111 -30839.006 + 80 113.06617 -8.5741117 0 -8.5596109 -30339.177 + 90 98.542347 -8.572249 0 -8.5596109 -30094.29 + 100 92.524343 -8.5714774 0 -8.5596111 -30091.988 +Loop time of 0.813674 on 4 procs for 100 steps with 128 atoms + +Performance: 5.309 ns/day, 4.520 hours/ns, 122.899 timesteps/s +99.7% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.79079 | 0.79788 | 0.80888 | 0.8 | 98.06 +Neigh | 7.1049e-05 | 8.0049e-05 | 9.2983e-05 | 0.0 | 0.01 +Comm | 0.0041246 | 0.01515 | 0.022235 | 5.5 | 1.86 +Output | 0.000144 | 0.00017095 | 0.00024796 | 0.0 | 0.02 +Modify | 4.4823e-05 | 5.8889e-05 | 7.2718e-05 | 0.0 | 0.01 +Other | | 0.000338 | | | 0.04 + +Nlocal: 32 ave 37 max 28 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Nghost: 431 ave 435 max 426 min +Histogram: 1 0 0 0 0 1 1 0 0 1 +Neighs: 927 ave 1071 max 821 min +Histogram: 1 0 1 0 1 0 0 0 0 1 +FullNghs: 1854 ave 2144 max 1624 min +Histogram: 1 0 0 1 1 0 0 0 0 1 + +Total # of neighbors = 7416 +Ave neighs/atom = 57.9375 +Neighbor list builds = 1 +Dangerous builds = 0 + +Total wall time: 0:00:00 diff --git a/potentials/WBe_Wood_PRB2019.snap b/potentials/WBe_Wood_PRB2019.snap new file mode 100644 index 0000000000..6c32256a19 --- /dev/null +++ b/potentials/WBe_Wood_PRB2019.snap @@ -0,0 +1,15 @@ +# DATE: 2019-09-18 CONTRIBUTOR: Mary Alice Cusentino mcusent@sandia.gov CITATION: M.A. Wood, M.A. Cusentino, B.D. Wirth, and A.P. Thompson, "Data-driven material models for atomistic simulation", Physical Review B 99, 184305 (2019) +# Definition of SNAP+ZBL potential. +variable zblcutinner equal 4 +variable zblcutouter equal 4.8 +variable zblz1 equal 74 +variable zblz2 equal 4 + +# Specify hybrid with SNAP and ZBL + +pair_style hybrid/overlay zbl ${zblcutinner} ${zblcutouter} snap +pair_coeff 1 1 zbl ${zblz1} ${zblz1} +pair_coeff 1 2 zbl ${zblz1} ${zblz2} +pair_coeff 2 2 zbl ${zblz2} ${zblz2} +pair_coeff * * snap WBe_Wood_PRB2019.snapcoeff WBe_Wood_PRB2019.snapparam W Be + diff --git a/potentials/WBe_Wood_PRB2019.snapcoeff b/potentials/WBe_Wood_PRB2019.snapcoeff new file mode 100644 index 0000000000..c72baabd74 --- /dev/null +++ b/potentials/WBe_Wood_PRB2019.snapcoeff @@ -0,0 +1,117 @@ +# LAMMPS SNAP coefficients for WBe + +2 56 +W 0.5 1 + -0.000000000000 # B[0] + -0.001487061994 # B[1, 0, 0, 0] + 0.075808306870 # B[2, 1, 0, 1] + 0.538735683870 # B[3, 1, 1, 2] + -0.074148039366 # B[4, 2, 0, 2] + 0.602629813770 # B[5, 2, 1, 3] + -0.147022424344 # B[6, 2, 2, 2] + 0.117756828488 # B[7, 2, 2, 4] + -0.026490439049 # B[8, 3, 0, 3] + -0.035162708767 # B[9, 3, 1, 4] + 0.064315385091 # B[10, 3, 2, 3] + -0.131936948089 # B[11, 3, 2, 5] + -0.021272860272 # B[12, 3, 3, 4] + -0.091171134054 # B[13, 3, 3, 6] + -0.024396224398 # B[14, 4, 0, 4] + -0.059813132803 # B[15, 4, 1, 5] + 0.069585393203 # B[16, 4, 2, 4] + -0.085344044181 # B[17, 4, 2, 6] + -0.155425254597 # B[18, 4, 3, 5] + -0.117031758367 # B[19, 4, 3, 7] + -0.040956258020 # B[20, 4, 4, 4] + -0.084465000389 # B[21, 4, 4, 6] + -0.020367513630 # B[22, 4, 4, 8] + -0.010730484318 # B[23, 5, 0, 5] + -0.054777575658 # B[24, 5, 1, 6] + 0.050742893747 # B[25, 5, 2, 5] + -0.004686334611 # B[26, 5, 2, 7] + -0.116372907121 # B[27, 5, 3, 6] + 0.005542497708 # B[28, 5, 3, 8] + -0.126526795635 # B[29, 5, 4, 5] + -0.080163926221 # B[30, 5, 4, 7] + -0.082426250179 # B[31, 5, 5, 6] + -0.010558777281 # B[32, 5, 5, 8] + -0.001939058038 # B[33, 6, 0, 6] + -0.027907949962 # B[34, 6, 1, 7] + 0.049483908476 # B[35, 6, 2, 6] + 0.005103754385 # B[36, 6, 2, 8] + -0.054751505141 # B[37, 6, 3, 7] + -0.055556071011 # B[38, 6, 4, 6] + -0.006026917619 # B[39, 6, 4, 8] + -0.060889030109 # B[40, 6, 5, 7] + -0.029977673973 # B[41, 6, 6, 6] + -0.014987527280 # B[42, 6, 6, 8] + -0.006697686658 # B[43, 7, 0, 7] + 0.017369624409 # B[44, 7, 1, 8] + 0.047864358817 # B[45, 7, 2, 7] + -0.001989812679 # B[46, 7, 3, 8] + 0.000153530925 # B[47, 7, 4, 7] + -0.003862356345 # B[48, 7, 5, 8] + -0.009754314198 # B[49, 7, 6, 7] + 0.000777958970 # B[50, 7, 7, 8] + -0.003031424287 # B[51, 8, 0, 8] + 0.015612715209 # B[52, 8, 2, 8] + 0.003210129646 # B[53, 8, 4, 8] + -0.013088799947 # B[54, 8, 6, 8] + 0.001465970755 # B[55, 8, 8, 8] +Be 0.417932 0.959049 + 0.000000000000 # B[0] + -0.000112143918 # B[1, 0, 0, 0] + 0.002449805180 # B[2, 1, 0, 1] + 0.189705916830 # B[3, 1, 1, 2] + -0.019967429692 # B[4, 2, 0, 2] + 0.286015704682 # B[5, 2, 1, 3] + 0.072864063124 # B[6, 2, 2, 2] + 0.108748154196 # B[7, 2, 2, 4] + -0.005203284351 # B[8, 3, 0, 3] + 0.043948598532 # B[9, 3, 1, 4] + 0.105425889093 # B[10, 3, 2, 3] + 0.060460134045 # B[11, 3, 2, 5] + -0.003406205141 # B[12, 3, 3, 4] + 0.002306765306 # B[13, 3, 3, 6] + -0.003845115174 # B[14, 4, 0, 4] + 0.029471162073 # B[15, 4, 1, 5] + 0.054901130330 # B[16, 4, 2, 4] + 0.010910192753 # B[17, 4, 2, 6] + 0.033885210622 # B[18, 4, 3, 5] + 0.008053439551 # B[19, 4, 3, 7] + -0.001432298168 # B[20, 4, 4, 4] + 0.017478027729 # B[21, 4, 4, 6] + -0.003402034990 # B[22, 4, 4, 8] + -0.002655339820 # B[23, 5, 0, 5] + 0.012668749892 # B[24, 5, 1, 6] + 0.037521561888 # B[25, 5, 2, 5] + -0.000682693314 # B[26, 5, 2, 7] + 0.008525913627 # B[27, 5, 3, 6] + 0.008977936348 # B[28, 5, 3, 8] + 0.006922732235 # B[29, 5, 4, 5] + 0.003031883044 # B[30, 5, 4, 7] + -0.000345577975 # B[31, 5, 5, 6] + -0.001041600679 # B[32, 5, 5, 8] + -0.001407625493 # B[33, 6, 0, 6] + 0.004211558640 # B[34, 6, 1, 7] + 0.014450875461 # B[35, 6, 2, 6] + -0.007033326252 # B[36, 6, 2, 8] + 0.004998742185 # B[37, 6, 3, 7] + -0.002824617682 # B[38, 6, 4, 6] + 0.003831871934 # B[39, 6, 4, 8] + -0.005700892700 # B[40, 6, 5, 7] + 0.000184422409 # B[41, 6, 6, 6] + 0.001592696824 # B[42, 6, 6, 8] + -0.000804927645 # B[43, 7, 0, 7] + 0.008465358642 # B[44, 7, 1, 8] + 0.005460531160 # B[45, 7, 2, 7] + -0.000639605094 # B[46, 7, 3, 8] + -0.002403948393 # B[47, 7, 4, 7] + -0.001267042453 # B[48, 7, 5, 8] + 0.003836940623 # B[49, 7, 6, 7] + 0.002333141437 # B[50, 7, 7, 8] + -0.000665360637 # B[51, 8, 0, 8] + -0.003460637865 # B[52, 8, 2, 8] + -0.001598726043 # B[53, 8, 4, 8] + 0.001478744304 # B[54, 8, 6, 8] + 0.000806643203 # B[55, 8, 8, 8] diff --git a/potentials/WBe_Wood_PRB2019.snapparam b/potentials/WBe_Wood_PRB2019.snapparam new file mode 100644 index 0000000000..e4fc4b4459 --- /dev/null +++ b/potentials/WBe_Wood_PRB2019.snapparam @@ -0,0 +1,11 @@ +# required +rcutfac 4.8123 +twojmax 8 + +# optional + +rfac0 0.99363 +rmin0 0 +bzeroflag 1 +quadraticflag 0 + From 5dba4b66c8964a362d7944e461eda820743ba605 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 18 Sep 2019 16:49:48 -0400 Subject: [PATCH 144/237] add warning banner to the LAMMPS output and refer to the C++11 issue on github --- doc/src/Build_settings.txt | 2 +- src/lammps.cpp | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/doc/src/Build_settings.txt b/doc/src/Build_settings.txt index baff537e3b..c40a91d781 100644 --- a/doc/src/Build_settings.txt +++ b/doc/src/Build_settings.txt @@ -24,7 +24,7 @@ explain how to do this for building both with CMake and make. :line -C++11 standard compliance test :h4(cxx11) +C++11 standard compliance test :h4,link(cxx11) The LAMMPS developers plan to transition to make the C++11 standard the minimum requirement for compiling LAMMPS. Currently this only applies to diff --git a/src/lammps.cpp b/src/lammps.cpp index 5ddc1600a4..d58c04e998 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -444,6 +444,19 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : if ((universe->me == 0) && !helpflag) { if (screen) fprintf(screen,"LAMMPS (%s)\n",universe->version); if (logfile) fprintf(logfile,"LAMMPS (%s)\n",universe->version); +#if defined(LAMMPS_CXX98) + const char warning[] = "\nWARNING-WARNING-WARNING-WARNING-WARNING\n" + "This LAMMPS executable was compiled using C++98 compatibility.\n" + "Please report the compiler info below at https://github.com/lammps/lammps/issues/1659\n"; + const char *infobuf = Info::get_compiler_info(); + if (screen) + fprintf(screen,"%s%s\nWARNING-WARNING-WARNING-WARNING-WARNING\n\n", + warning,infobuf); + if (logfile) + fprintf(logfile,"%s%s\nWARNING-WARNING-WARNING-WARNING-WARNING\n\n", + warning,infobuf); + delete[] infobuf; +#endif } // universe is one or more worlds, as setup by partition switch From b049b59015d12a7f45239cf814145698c97c04f9 Mon Sep 17 00:00:00 2001 From: "tanmoy.7989" Date: Thu, 19 Sep 2019 00:25:22 -0700 Subject: [PATCH 145/237] revised documentation and added a citation trigger in .cpp file --- doc/src/pair_local_density.txt | 2 +- src/USER-MISC/pair_local_density.cpp | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/doc/src/pair_local_density.txt b/doc/src/pair_local_density.txt index 8703bf11ff..4def63c5fc 100644 --- a/doc/src/pair_local_density.txt +++ b/doc/src/pair_local_density.txt @@ -24,7 +24,7 @@ pair_coeff * * local/density benzene_water.localdensity.table :pre [Description:] -The local density (LD) potential is a new potential style that is, in some +The local density (LD) potential is a mean-field manybody potential, and, in some sense,a generalization of embedded atom models (EAM). The name "local density potential" arises from the fact that it assigns an energy to an atom depending on the number of neighboring atoms of given type around it within a predefined diff --git a/src/USER-MISC/pair_local_density.cpp b/src/USER-MISC/pair_local_density.cpp index 883075c80e..9057b061b0 100644 --- a/src/USER-MISC/pair_local_density.cpp +++ b/src/USER-MISC/pair_local_density.cpp @@ -32,11 +32,29 @@ #include "memory.h" #include "error.h" #include "domain.h" +#include "citeme.h" using namespace LAMMPS_NS; #define MAXLINE 1024 +static const char cite_pair_local_density[] = + "pair_style local/density command:\n\n" + "@Article{Sanyal16,\n" + " author = {T.Sanyal and M.Scott Shell},\n" + " title = {Coarse-grained models using local-density potentials optimized with the relative entropy: Application to implicit solvation},\n" + " journal = {J.~Chem.~Phys.},\n" + " year = 2016,\n" + " DOI = doi.org/10.1063/1.4958629" + "}\n\n" + "@Article{Sanyal18,\n" + " author = {T.Sanyal and M.Scott Shell},\n" + " title = {Transferable coarse-grained models of liquid-liquid equilibrium using local density potentials optimized with the relative entropy},\n" + " journal = {J.~Phys.~Chem. B},\n" + " year = 2018,\n" + " DOI = doi.org/10.1021/acs.jpcb.7b12446" + "}\n\n"; + /* ---------------------------------------------------------------------- */ PairLocalDensity::PairLocalDensity(LAMMPS *lmp) : Pair(lmp) @@ -74,6 +92,9 @@ PairLocalDensity::PairLocalDensity(LAMMPS *lmp) : Pair(lmp) // set comm size needed by this pair comm_forward = 1; comm_reverse = 1; + + // cite publication + if (lmp->citeme) lmp->citeme->add(cite_pair_local_density); } /* ---------------------------------------------------------------------- From c26c8aca4fd953c74bf1621f4362c03936b6f898 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 19 Sep 2019 07:34:27 -0400 Subject: [PATCH 146/237] get rid of (evil) tabs and trailing whitespace in bundled Pizza.py components --- tools/python/pizza/cfg.py | 70 +++++++-------- tools/python/pizza/dump.py | 160 +++++++++++++++++----------------- tools/python/pizza/gnu.py | 66 +++++++------- tools/python/pizza/log.py | 46 +++++----- tools/python/pizza/pdbfile.py | 28 +++--- tools/python/pizza/xyz.py | 24 ++--- 6 files changed, 197 insertions(+), 197 deletions(-) diff --git a/tools/python/pizza/cfg.py b/tools/python/pizza/cfg.py index 8cefd38acd..bbd930ea3c 100644 --- a/tools/python/pizza/cfg.py +++ b/tools/python/pizza/cfg.py @@ -3,7 +3,7 @@ # # Copyright (2005) 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 +# certain rights in this software. This software is distributed under # the GNU General Public License. # cfg tool @@ -11,14 +11,14 @@ oneline = "Convert LAMMPS snapshots to AtomEye CFG format" docstr = """ -c = cfg(d) d = object containing atom coords (dump, data) +c = cfg(d) d = object containing atom coords (dump, data) c.one() write all snapshots to tmp.cfg c.one("new") write all snapshots to new.cfg c.many() write snapshots to tmp0000.cfg, tmp0001.cfg, etc c.many("new") write snapshots to new0000.cfg, new0001.cfg, etc -c.single(N) write snapshot for timestep N to tmp.cfg -c.single(N,"file") write snapshot for timestep N to file.cfg +c.single(N) write snapshot for timestep N to tmp.cfg +c.single(N,"file") write snapshot for timestep N to file.cfg """ # History @@ -46,7 +46,7 @@ class cfg: def __init__(self,data): self.data = data - + # -------------------------------------------------------------------- def one(self,*args): @@ -68,16 +68,16 @@ class cfg: print >>f,"Number of particles = %d " % len(atoms) print >>f,"# Timestep %d \n#\nA = 1.0 Angstrom" % time print >>f,"H0(1,1) = %20.10f A " % xlen - print >>f,"H0(1,2) = 0.0 A " - print >>f,"H0(1,3) = 0.0 A " - print >>f,"H0(2,1) = 0.0 A " + print >>f,"H0(1,2) = 0.0 A " + print >>f,"H0(1,3) = 0.0 A " + print >>f,"H0(2,1) = 0.0 A " print >>f,"H0(2,2) = %20.10f A " % ylen - print >>f,"H0(2,3) = 0.0 A " - print >>f,"H0(3,1) = 0.0 A " - print >>f,"H0(3,2) = 0.0 A " + print >>f,"H0(2,3) = 0.0 A " + print >>f,"H0(3,1) = 0.0 A " + print >>f,"H0(3,2) = 0.0 A " print >>f,"H0(3,3) = %20.10f A " % zlen print >>f,"#" - + for atom in atoms: itype = int(atom[1]) xfrac = (atom[2]-box[0])/xlen @@ -85,14 +85,14 @@ class cfg: zfrac = (atom[4]-box[2])/zlen # print >>f,"1.0 %d %15.10f %15.10f %15.10f %15.10f %15.10f %15.10f " % (itype,xfrac,yfrac,zfrac,atom[5],atom[6],atom[7]) print >>f,"1.0 %d %15.10f %15.10f %15.10f 0.0 0.0 0.0 " % (itype,xfrac,yfrac,zfrac) - + print time, sys.stdout.flush() n += 1 - + f.close() print "\nwrote %d snapshots to %s in CFG format" % (n,file) - + # -------------------------------------------------------------------- def many(self,*args): @@ -104,7 +104,7 @@ class cfg: which,time,flag = self.data.iterator(flag) if flag == -1: break time,box,atoms,bonds,tris,lines = self.data.viz(which) - + if n < 10: file = root + "000" + str(n) elif n < 100: @@ -112,7 +112,7 @@ class cfg: elif n < 1000: file = root + "0" + str(n) else: - file = root + str(n) + file = root + str(n) file += ".cfg" f = open(file,"w") @@ -123,16 +123,16 @@ class cfg: print >>f,"Number of particles = %d " % len(atoms) print >>f,"# Timestep %d \n#\nA = 1.0 Angstrom" % time print >>f,"H0(1,1) = %20.10f A " % xlen - print >>f,"H0(1,2) = 0.0 A " - print >>f,"H0(1,3) = 0.0 A " - print >>f,"H0(2,1) = 0.0 A " + print >>f,"H0(1,2) = 0.0 A " + print >>f,"H0(1,3) = 0.0 A " + print >>f,"H0(2,1) = 0.0 A " print >>f,"H0(2,2) = %20.10f A " % ylen - print >>f,"H0(2,3) = 0.0 A " - print >>f,"H0(3,1) = 0.0 A " - print >>f,"H0(3,2) = 0.0 A " + print >>f,"H0(2,3) = 0.0 A " + print >>f,"H0(3,1) = 0.0 A " + print >>f,"H0(3,2) = 0.0 A " print >>f,"H0(3,3) = %20.10f A " % zlen print >>f,"#" - + for atom in atoms: itype = int(atom[1]) xfrac = (atom[2]-box[0])/xlen @@ -140,14 +140,14 @@ class cfg: zfrac = (atom[4]-box[2])/zlen # print >>f,"1.0 %d %15.10f %15.10f %15.10f %15.10f %15.10f %15.10f " % (itype,xfrac,yfrac,zfrac,atom[5],atom[6],atom[7]) print >>f,"1.0 %d %15.10f %15.10f %15.10f 0.0 0.0 0.0 " % (itype,xfrac,yfrac,zfrac) - + print time, sys.stdout.flush() f.close() n += 1 - + print "\nwrote %s snapshots in CFG format" % n - + # -------------------------------------------------------------------- def single(self,time,*args): @@ -166,16 +166,16 @@ class cfg: print >>f,"Number of particles = %d " % len(atoms) print >>f,"# Timestep %d \n#\nA = 1.0 Angstrom" % time print >>f,"H0(1,1) = %20.10f A " % xlen - print >>f,"H0(1,2) = 0.0 A " - print >>f,"H0(1,3) = 0.0 A " - print >>f,"H0(2,1) = 0.0 A " + print >>f,"H0(1,2) = 0.0 A " + print >>f,"H0(1,3) = 0.0 A " + print >>f,"H0(2,1) = 0.0 A " print >>f,"H0(2,2) = %20.10f A " % ylen - print >>f,"H0(2,3) = 0.0 A " - print >>f,"H0(3,1) = 0.0 A " - print >>f,"H0(3,2) = 0.0 A " + print >>f,"H0(2,3) = 0.0 A " + print >>f,"H0(3,1) = 0.0 A " + print >>f,"H0(3,2) = 0.0 A " print >>f,"H0(3,3) = %20.10f A " % zlen print >>f,"#" - + for atom in atoms: itype = int(atom[1]) xfrac = (atom[2]-box[0])/xlen @@ -183,5 +183,5 @@ class cfg: zfrac = (atom[4]-box[2])/zlen # print >>f,"1.0 %d %15.10f %15.10f %15.10f %15.10f %15.10f %15.10f " % (itype,xfrac,yfrac,zfrac,atom[5],atom[6],atom[7]) print >>f,"1.0 %d %15.10f %15.10f %15.10f 0.0 0.0 0.0 " % (itype,xfrac,yfrac,zfrac) - + f.close() diff --git a/tools/python/pizza/dump.py b/tools/python/pizza/dump.py index 8098a2c4b7..1c6eb5edfd 100644 --- a/tools/python/pizza/dump.py +++ b/tools/python/pizza/dump.py @@ -3,7 +3,7 @@ # # Copyright (2005) 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 +# certain rights in this software. This software is distributed under # the GNU General Public License. # dump tool @@ -12,15 +12,15 @@ oneline = "Read, write, manipulate dump files and particle attributes" docstr = """ d = dump("dump.one") read in one or more dump files -d = dump("dump.1 dump.2.gz") can be gzipped -d = dump("dump.*") wildcard expands to multiple files -d = dump("dump.*",0) two args = store filenames, but don't read +d = dump("dump.1 dump.2.gz") can be gzipped +d = dump("dump.*") wildcard expands to multiple files +d = dump("dump.*",0) two args = store filenames, but don't read incomplete and duplicate snapshots are deleted atoms will be unscaled if stored in files as scaled - self-describing column names assigned + self-describing column names assigned -time = d.next() read next snapshot from dump files +time = d.next() read next snapshot from dump files used with 2-argument constructor to allow reading snapshots one-at-a-time snapshot will be skipped only if another snapshot has same time stamp @@ -31,21 +31,21 @@ time = d.next() read next snapshot from dump files d.map(1,"id",3,"x") assign names to columns (1-N) not needed if dump file is self-describing - -d.tselect.all() select all timesteps -d.tselect.one(N) select only timestep N -d.tselect.none() deselect all timesteps -d.tselect.skip(M) select every Mth step + +d.tselect.all() select all timesteps +d.tselect.one(N) select only timestep N +d.tselect.none() deselect all timesteps +d.tselect.skip(M) select every Mth step d.tselect.test("$t >= 100 and $t < 10000") select matching timesteps -d.delete() delete non-selected timesteps +d.delete() delete non-selected timesteps selecting a timestep also selects all atoms in the timestep skip() and test() only select from currently selected timesteps test() uses a Python Boolean expression with $t for timestep value Python comparison syntax: == != < > <= >= and or -d.aselect.all() select all atoms in all steps -d.aselect.all(N) select all atoms in one step +d.aselect.all() select all atoms in all steps +d.aselect.all(N) select all atoms in one step d.aselect.test("$id > 100 and $type == 2") select match atoms in all steps d.aselect.test("$id > 100 and $type == 2",N) select matching atoms in one step @@ -56,24 +56,24 @@ d.aselect.test("$id > 100 and $type == 2",N) select matching atoms in one step Python comparison syntax: == != < > <= >= and or $name must end with a space -d.write("file") write selected steps/atoms to dump file -d.write("file",head,app) write selected steps/atoms to dump file -d.scatter("tmp") write selected steps/atoms to multiple files +d.write("file") write selected steps/atoms to dump file +d.write("file",head,app) write selected steps/atoms to dump file +d.scatter("tmp") write selected steps/atoms to multiple files write() can be specified with 2 additional flags head = 0/1 for no/yes snapshot header, app = 0/1 for write vs append scatter() files are given timestep suffix: e.g. tmp.0, tmp.100, etc -d.scale() scale x,y,z to 0-1 for all timesteps -d.scale(100) scale atom coords for timestep N -d.unscale() unscale x,y,z to box size to all timesteps -d.unscale(1000) unscale atom coords for timestep N -d.wrap() wrap x,y,z into periodic box via ix,iy,iz -d.unwrap() unwrap x,y,z out of box via ix,iy,iz -d.owrap("other") wrap x,y,z to same image as another atom -d.sort() sort atoms by atom ID in all selected steps -d.sort("x") sort atoms by column value in all steps -d.sort(1000) sort atoms in timestep N +d.scale() scale x,y,z to 0-1 for all timesteps +d.scale(100) scale atom coords for timestep N +d.unscale() unscale x,y,z to box size to all timesteps +d.unscale(1000) unscale atom coords for timestep N +d.wrap() wrap x,y,z into periodic box via ix,iy,iz +d.unwrap() unwrap x,y,z out of box via ix,iy,iz +d.owrap("other") wrap x,y,z to same image as another atom +d.sort() sort atoms by atom ID in all selected steps +d.sort("x") sort atoms by column value in all steps +d.sort(1000) sort atoms in timestep N scale(), unscale(), wrap(), unwrap(), owrap() operate on all steps and atoms wrap(), unwrap(), owrap() require ix,iy,iz be defined @@ -85,8 +85,8 @@ d.sort(1000) sort atoms in timestep N m1,m2 = d.minmax("type") find min/max values for a column d.set("$ke = $vx * $vx + $vy * $vy") set a column to a computed value d.setv("type",vector) set a column to a vector of values -d.spread("ke",N,"color") 2nd col = N ints spread over 1st col -d.clone(1000,"color") clone timestep N values to other steps +d.spread("ke",N,"color") 2nd col = N ints spread over 1st col +d.clone(1000,"color") clone timestep N values to other steps minmax() operates on selected timesteps and atoms set() operates on selected timesteps and atoms @@ -107,17 +107,17 @@ d.clone(1000,"color") clone timestep N values to other steps values at every timestep are set to value at timestep N for that atom ID useful for propagating a color map -t = d.time() return vector of selected timestep values +t = d.time() return vector of selected timestep values fx,fy,... = d.atom(100,"fx","fy",...) return vector(s) for atom ID N fx,fy,... = d.vecs(1000,"fx","fy",...) return vector(s) for timestep N atom() returns vectors with one value for each selected timestep vecs() returns vectors with one value for each selected atom in the timestep -index,time,flag = d.iterator(0/1) loop over dump snapshots +index,time,flag = d.iterator(0/1) loop over dump snapshots time,box,atoms,bonds,tris,lines = d.viz(index) return list of viz objects -d.atype = "color" set column returned as "type" by viz -d.extra(obj) extract bond/tri/line info from obj +d.atype = "color" set column returned as "type" by viz +d.extra(obj) extract bond/tri/line info from obj iterator() loops over selected timesteps iterator() called with arg = 0 first time, with arg = 1 on subsequent calls @@ -137,7 +137,7 @@ d.extra(obj) extract bond/tri/line info from obj if extra() used to define lines, else NULL atype is column name viz() will return as atom type (def = "type") extra() extracts bonds/tris/lines from obj each time viz() is called - obj can be data object for bonds, cdata object for tris and lines, + obj can be data object for bonds, cdata object for tris and lines, bdump object for bonds, tdump object for tris, ldump object for lines. mdump object for tris """ @@ -227,7 +227,7 @@ class dump: for word in words: self.flist += glob.glob(word) if len(self.flist) == 0 and len(list) == 1: raise StandardError,"no dump file specified" - + if len(list) == 1: self.increment = 0 self.read_all() @@ -270,7 +270,7 @@ class dump: self.tselect.all() # print column assignments - + if len(self.names): print "assigned columns:",self.names2str() else: @@ -304,15 +304,15 @@ class dump: snap = self.read_snapshot(f) if not snap: self.nextfile += 1 - if self.nextfile == len(self.flist): return -1 + if self.nextfile == len(self.flist): return -1 f.close() - self.eof = 0 - continue + self.eof = 0 + continue self.eof = f.tell() f.close() try: self.findtime(snap.time) - continue + continue except: break # select the new snapshot with all its atoms @@ -334,7 +334,7 @@ class dump: # assign column names (file must be self-describing) # set scale_original to 0/1/-1 for unscaled/scaled/unknown # convert xs,xu to x in names - + def read_snapshot(self,f): try: snap = Snap() @@ -351,7 +351,7 @@ class dump: else: snap.boxstr = words[1].strip() if "xy" in snap.boxstr: snap.triclinic = 1 else: snap.triclinic = 0 - + words = f.readline().split() if len(words) == 2: snap.xlo,snap.xhi,snap.xy = float(words[0]),float(words[1]),0.0 @@ -372,7 +372,7 @@ class dump: else: snap.zlo,snap.zhi,snap.yz = \ float(words[0]),float(words[1]),float(words[2]) - + item = f.readline() if len(self.names) == 0: self.scale_original = -1 @@ -401,7 +401,7 @@ class dump: else: self.names[words[i]] = i if xflag == 0 and yflag == 0 and zflag == 0: self.scale_original = 0 if xflag == 1 and yflag == 1 and zflag == 1: self.scale_original = 1 - + if snap.natoms: words = f.readline().split() ncol = len(words) @@ -424,7 +424,7 @@ class dump: # -------------------------------------------------------------------- # map atom column names - + def map(self,*pairs): if len(pairs) % 2 != 0: raise StandardError, "dump map() requires pairs of mappings" @@ -509,7 +509,7 @@ class dump: atoms[:,y] = (atoms[:,y] - snap.ylo)*h1inv + \ (atoms[:,z] - snap.zlo)*h3inv atoms[:,z] = (atoms[:,z] - snap.zlo)*h2inv - + # -------------------------------------------------------------------- # unscale coords from 0-1 to box size for all snapshots or just one # use 6 params as h-matrix to treat orthogonal or triclinic boxes @@ -564,7 +564,7 @@ class dump: atoms[:,x] = snap.xlo + atoms[:,x]*h0 + atoms[:,y]*h5 + atoms[:,z]*h4 atoms[:,y] = snap.ylo + atoms[:,y]*h1 + atoms[:,z]*h3 atoms[:,z] = snap.zlo + atoms[:,z]*h2 - + # -------------------------------------------------------------------- # wrap coords from outside box to inside @@ -577,7 +577,7 @@ class dump: ix = self.names["ix"] iy = self.names["iy"] iz = self.names["iz"] - + for snap in self.snaps: xprd = snap.xhi - snap.xlo yprd = snap.yhi - snap.ylo @@ -599,7 +599,7 @@ class dump: ix = self.names["ix"] iy = self.names["iy"] iz = self.names["iz"] - + for snap in self.snaps: xprd = snap.xhi - snap.xlo yprd = snap.yhi - snap.ylo @@ -612,10 +612,10 @@ class dump: # -------------------------------------------------------------------- # wrap coords to same image as atom ID stored in "other" column # if dynamic extra lines or triangles defined, owrap them as well - + def owrap(self,other): print "Wrapping to other ..." - + id = self.names["id"] x = self.names["x"] y = self.names["y"] @@ -641,10 +641,10 @@ class dump: # should bonds also be owrapped ? if self.lineflag == 2 or self.triflag == 2: self.objextra.owrap(snap.time,xprd,yprd,zprd,ids,atoms,iother,ix,iy,iz) - + # -------------------------------------------------------------------- # convert column names assignment to a string, in column order - + def names2str(self): pairs = self.names.items() values = self.names.values() @@ -697,7 +697,7 @@ class dump: else: id = -1 if "type" in self.names: type = self.names["type"] else: type = -1 - + for snap in self.snaps: if not snap.tselect: continue print snap.time, @@ -719,7 +719,7 @@ class dump: print >>f,snap.ylo,snap.yhi print >>f,snap.zlo,snap.zhi print >>f,"ITEM: ATOMS",namestr - + atoms = snap.atoms nvalues = len(atoms[0]) for i in xrange(snap.natoms): @@ -743,7 +743,7 @@ class dump: if not snap.tselect: continue print snap.time, sys.stdout.flush() - + file = root + "." + str(snap.time) f = open(file,"w") print >>f,"ITEM: TIMESTEP" @@ -761,7 +761,7 @@ class dump: print >>f,snap.ylo,snap.yhi print >>f,snap.zlo,snap.zhi print >>f,"ITEM: ATOMS",namestr - + atoms = snap.atoms nvalues = len(atoms[0]) for i in xrange(snap.natoms): @@ -803,7 +803,7 @@ class dump: lhs = list[0][1:] if not self.names.has_key(lhs): self.newcolumn(lhs) - + for item in list: name = item[1:] column = self.names[name] @@ -815,7 +815,7 @@ class dump: if not snap.tselect: continue for i in xrange(snap.natoms): if snap.aselect[i]: exec ceq - + # -------------------------------------------------------------------- # set a column value via an input vec for all selected snapshots/atoms @@ -835,7 +835,7 @@ class dump: if snap.aselect[i]: atoms[i][icol] = vec[m] m += 1 - + # -------------------------------------------------------------------- # clone value in col across selected timesteps for atoms with same ID @@ -901,7 +901,7 @@ class dump: columns.append(self.names[name]) values.append(self.nselect * [0]) ncol = len(columns) - + id = self.names["id"] m = 0 for snap in self.snaps: @@ -917,13 +917,13 @@ class dump: if len(list) == 1: return values[0] else: return values - + # -------------------------------------------------------------------- # extract vector(s) of values for selected atoms at chosen timestep def vecs(self,n,*list): snap = self.snaps[self.findtime(n)] - + if len(list) == 0: raise StandardError, "no columns specified" columns = [] @@ -978,7 +978,7 @@ class dump: del self.snaps[i] else: i += 1 - + # -------------------------------------------------------------------- # iterate over selected snapshots @@ -990,12 +990,12 @@ class dump: self.iterate = i return i,self.snaps[i].time,1 return 0,0,-1 - + # -------------------------------------------------------------------- # return list of atoms to viz for snapshot isnap # if called with flag, then index is timestep, so convert to snapshot index # augment with bonds, tris, lines if extra() was invoked - + def viz(self,index,flag=0): if not flag: isnap = index else: @@ -1019,7 +1019,7 @@ class dump: # create atom list needed by viz from id,type,x,y,z # need Numeric/Numpy mode here - + atoms = [] for i in xrange(snap.natoms): if not snap.aselect[i]: continue @@ -1059,7 +1059,7 @@ class dump: if self.triflag == 1: tris = self.trilist elif self.triflag == 2: tmp1,tmp2,tmp3,tmp4,tris,tmp5 = self.objextra.viz(time,1) - + # create list of lines from static or dynamic tri list # if dynamic, could eliminate lines for unselected atoms @@ -1070,7 +1070,7 @@ class dump: tmp1,tmp2,tmp3,tmp4,tmp5,lines = self.objextra.viz(time,1) return time,box,atoms,bonds,tris,lines - + # -------------------------------------------------------------------- def findtime(self,n): @@ -1115,7 +1115,7 @@ class dump: def extra(self,arg): # data object, grab bonds statically - + if type(arg) is types.InstanceType and ".data" in str(arg.__class__): self.bondflag = 0 try: @@ -1132,7 +1132,7 @@ class dump: raise StandardError,"could not extract bonds from data object" # cdata object, grab tris and lines statically - + elif type(arg) is types.InstanceType and ".cdata" in str(arg.__class__): self.triflag = self.lineflag = 0 try: @@ -1147,32 +1147,32 @@ class dump: raise StandardError,"could not extract tris/lines from cdata object" # mdump object, grab tris dynamically - + elif type(arg) is types.InstanceType and ".mdump" in str(arg.__class__): self.triflag = 2 self.objextra = arg # bdump object, grab bonds dynamically - + elif type(arg) is types.InstanceType and ".bdump" in str(arg.__class__): self.bondflag = 2 self.objextra = arg # ldump object, grab lines dynamically - + elif type(arg) is types.InstanceType and ".ldump" in str(arg.__class__): self.lineflag = 2 self.objextra = arg # tdump object, grab tris dynamically - + elif type(arg) is types.InstanceType and ".tdump" in str(arg.__class__): self.triflag = 2 self.objextra = arg else: raise StandardError,"unrecognized argument to dump.extra()" - + # -------------------------------------------------------------------- def compare_atom(self,a,b): @@ -1181,7 +1181,7 @@ class dump: elif a[0] > b[0]: return 1 else: - return 0 + return 0 # -------------------------------------------------------------------- # one snapshot @@ -1196,7 +1196,7 @@ class tselect: def __init__(self,data): self.data = data - + # -------------------------------------------------------------------- def all(self): @@ -1243,7 +1243,7 @@ class tselect: data.nselect -= 1 data.aselect.all() print "%d snapshots selected out of %d" % (data.nselect,data.nsnaps) - + # -------------------------------------------------------------------- def test(self,teststr): @@ -1289,7 +1289,7 @@ class aselect: data = self.data # replace all $var with snap.atoms references and compile test string - + pattern = "\$\w*" list = re.findall(pattern,teststr) for item in list: diff --git a/tools/python/pizza/gnu.py b/tools/python/pizza/gnu.py index f6f0167330..d99ab3811d 100644 --- a/tools/python/pizza/gnu.py +++ b/tools/python/pizza/gnu.py @@ -3,7 +3,7 @@ # # Copyright (2005) 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 +# certain rights in this software. This software is distributed under # the GNU General Public License. # gnu tool @@ -11,12 +11,12 @@ oneline = "Create plots via GnuPlot plotting program" docstr = """ -g = gnu() start up GnuPlot -g.stop() shut down GnuPlot process - +g = gnu() start up GnuPlot +g.stop() shut down GnuPlot process + g.plot(a) plot vector A against linear index -g.plot(a,b) plot B against A -g.plot(a,b,c,d,...) plot B against A, D against C, etc +g.plot(a,b) plot B against A +g.plot(a,b,c,d,...) plot B against A, D against C, etc g.mplot(M,N,S,"file",a,b,...) multiple plots saved to file0000.eps, etc each plot argument can be a tuple, list, or Numeric/NumPy vector @@ -29,21 +29,21 @@ g.mplot(M,N,S,"file",a,b,...) multiple plots saved to file0000.eps, etc g("plot 'file.dat' using 2:3 with lines") execute string in GnuPlot -g.enter() enter GnuPlot shell +g.enter() enter GnuPlot shell gnuplot> plot sin(x) with lines type commands directly to GnuPlot -gnuplot> exit, quit exit GnuPlot shell - +gnuplot> exit, quit exit GnuPlot shell + g.export("data",range(100),a,...) create file with columns of numbers all vectors must be of equal length could plot from file with GnuPlot command: plot 'data' using 1:2 with lines -g.select(N) figure N becomes the current plot - +g.select(N) figure N becomes the current plot + subsequent commands apply to this plot -g.hide(N) delete window for figure N -g.save("file") save current plot as file.eps +g.hide(N) delete window for figure N +g.save("file") save current plot as file.eps Set attributes for current plot: @@ -94,7 +94,7 @@ except: PIZZA_GNUTERM = "x11" # Class definition class gnu: - + # -------------------------------------------------------------------- def __init__(self): @@ -102,7 +102,7 @@ class gnu: self.file = "tmp.gnu" self.figures = [] self.select(1) - + # -------------------------------------------------------------------- def stop(self): @@ -114,7 +114,7 @@ class gnu: def __call__(self,command): self.GNUPLOT.write(command + '\n') self.GNUPLOT.flush() - + # -------------------------------------------------------------------- def enter(self): @@ -152,7 +152,7 @@ class gnu: if i: partial_vecs.append(vec[:i]) else: partial_vecs.append([0]) self.plot(*partial_vecs) - + if n < 10: newfile = file + "000" + str(n) elif n < 100: newfile = file + "00" + str(n) elif n < 1000: newfile = file + "0" + str(n) @@ -160,7 +160,7 @@ class gnu: self.save(newfile) n += 1 - + # -------------------------------------------------------------------- # write list of equal-length vectors to filename @@ -201,7 +201,7 @@ class gnu: # do not continue until plot file is written out # else script could go forward and change data file # use tmp.done as semaphore to indicate plot is finished - + def save(self,file): self.__call__("set terminal postscript enhanced solid lw 2 color portrait") cmd = "set output '%s.eps'" % file @@ -212,7 +212,7 @@ class gnu: while not os.path.exists("tmp.done"): continue self.__call__("set output") self.select(self.current) - + # -------------------------------------------------------------------- # restore default attributes by creating a new fig object @@ -221,7 +221,7 @@ class gnu: fig.ncurves = self.figures[self.current-1].ncurves self.figures[self.current-1] = fig self.draw() - + # -------------------------------------------------------------------- def aspect(self,value): @@ -245,12 +245,12 @@ class gnu: else: self.figures[self.current-1].ylimit = (values[0],values[1]) self.draw() - + # -------------------------------------------------------------------- def label(self,x,y,text): self.figures[self.current-1].labels.append((x,y,text)) - self.figures[self.current-1].nlabels += 1 + self.figures[self.current-1].nlabels += 1 self.draw() # -------------------------------------------------------------------- @@ -259,7 +259,7 @@ class gnu: self.figures[self.current-1].nlabel = 0 self.figures[self.current-1].labels = [] self.draw() - + # -------------------------------------------------------------------- def title(self,*strings): @@ -276,13 +276,13 @@ class gnu: def xtitle(self,label): self.figures[self.current-1].xtitle = label self.draw() - + # -------------------------------------------------------------------- def ytitle(self,label): self.figures[self.current-1].ytitle = label self.draw() - + # -------------------------------------------------------------------- def xlog(self): @@ -291,7 +291,7 @@ class gnu: else: self.figures[self.current-1].xlog = 1 self.draw() - + # -------------------------------------------------------------------- def ylog(self): @@ -300,7 +300,7 @@ class gnu: else: self.figures[self.current-1].ylog = 1 self.draw() - + # -------------------------------------------------------------------- def curve(self,num,color): @@ -316,10 +316,10 @@ class gnu: def draw(self): fig = self.figures[self.current-1] if not fig.ncurves: return - + cmd = 'set size ratio ' + str(1.0/float(fig.aspect)) self.__call__(cmd) - + cmd = 'set title ' + '"' + fig.title + '"' self.__call__(cmd) cmd = 'set xlabel ' + '"' + fig.xtitle + '"' @@ -331,11 +331,11 @@ class gnu: else: self.__call__("unset logscale x") if fig.ylog: self.__call__("set logscale y") else: self.__call__("unset logscale y") - if fig.xlimit: + if fig.xlimit: cmd = 'set xr [' + str(fig.xlimit[0]) + ':' + str(fig.xlimit[1]) + ']' self.__call__(cmd) else: self.__call__("set xr [*:*]") - if fig.ylimit: + if fig.ylimit: cmd = 'set yr [' + str(fig.ylimit[0]) + ':' + str(fig.ylimit[1]) + ']' self.__call__(cmd) else: self.__call__("set yr [*:*]") @@ -365,7 +365,7 @@ class figure: def __init__(self): self.ncurves = 0 - self.colors = [] + self.colors = [] self.title = "" self.xtitle = "" self.ytitle = "" diff --git a/tools/python/pizza/log.py b/tools/python/pizza/log.py index aeca1d8d82..a255af2030 100644 --- a/tools/python/pizza/log.py +++ b/tools/python/pizza/log.py @@ -3,7 +3,7 @@ # # Copyright (2005) 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 +# certain rights in this software. This software is distributed under # the GNU General Public License. # log tool @@ -28,7 +28,7 @@ nvec = l.nvec # of vectors of thermo info nlen = l.nlen length of each vectors names = l.names list of vector names t,pe,... = l.get("Time","KE",...) return one or more vectors of values -l.write("file.txt") write all vectors to a file +l.write("file.txt") write all vectors to a file l.write("file.txt","Time","PE",...) write listed vectors to a file get and write allow abbreviated (uniquely) vector names @@ -89,7 +89,7 @@ class log: # -------------------------------------------------------------------- # read all thermo from all files - + def read_all(self): self.read_header(self.flist[0]) if self.nvec == 0: raise StandardError,"log file has no values" @@ -100,7 +100,7 @@ class log: print # sort entries by timestep, cull duplicates - + self.data.sort(self.compare) self.cull() self.nlen = len(self.data) @@ -133,9 +133,9 @@ class log: else: count = 0 for i in range(self.nvec): - if self.names[i].find(key) == 0: - count += 1 - index = i + if self.names[i].find(key) == 0: + count += 1 + index = i if count == 1: map.append(index) else: @@ -161,9 +161,9 @@ class log: else: count = 0 for i in range(self.nvec): - if self.names[i].find(key) == 0: - count += 1 - index = i + if self.names[i].find(key) == 0: + count += 1 + index = i if count == 1: map.append(index) else: @@ -226,7 +226,7 @@ class log: keywords.insert(0,"Step") i = 0 for keyword in keywords: - self.names.append(keyword) + self.names.append(keyword) self.ptr[keyword] = i i += 1 @@ -236,7 +236,7 @@ class log: line = txt[s1:s2] words = line.split() for i in range(len(words)): - self.names.append(words[i]) + self.names.append(words[i]) self.ptr[words[i]] = i self.nvec = len(self.names) @@ -275,43 +275,43 @@ class log: if s1 >= 0 and s2 >= 0 and s1 < s2: # found s1,s2 with s1 before s2 if self.style == 2: - s1 = txt.find("\n",s1) + 1 + s1 = txt.find("\n",s1) + 1 elif s1 >= 0 and s2 >= 0 and s2 < s1: # found s1,s2 with s2 before s1 s1 = 0 elif s1 == -1 and s2 >= 0: # found s2, but no s1 - last = 1 + last = 1 s1 = 0 elif s1 >= 0 and s2 == -1: # found s1, but no s2 last = 1 if self.style == 1: s2 = txt.rfind("\n--",s1) + 1 else: - s1 = txt.find("\n",s1) + 1 + s1 = txt.find("\n",s1) + 1 s2 = txt.rfind("\n",s1) + 1 - eof -= len(txt) - s2 + eof -= len(txt) - s2 elif s1 == -1 and s2 == -1: # found neither # could be end-of-file section - # or entire read was one chunk + # or entire read was one chunk if txt.find("Loop time of",start) == start: # end of file, so exit - eof -= len(txt) - start # reset eof to "Loop" - break + eof -= len(txt) - start # reset eof to "Loop" + break - last = 1 # entire read is a chunk + last = 1 # entire read is a chunk s1 = 0 if self.style == 1: s2 = txt.rfind("\n--",s1) + 1 else: s2 = txt.rfind("\n",s1) + 1 - eof -= len(txt) - s2 - if s1 == s2: break + eof -= len(txt) - s2 + if s1 == s2: break chunk = txt[s1:s2-1] start = s2 # split chunk into entries # parse each entry for numeric fields, append to data - + if self.style == 1: sections = chunk.split("\n--") pat1 = re.compile("Step\s*(\S*)\s") diff --git a/tools/python/pizza/pdbfile.py b/tools/python/pizza/pdbfile.py index 1713ada043..9b2238cbd6 100644 --- a/tools/python/pizza/pdbfile.py +++ b/tools/python/pizza/pdbfile.py @@ -3,7 +3,7 @@ # # Copyright (2005) 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 +# certain rights in this software. This software is distributed under # the GNU General Public License. # pdb tool @@ -22,7 +22,7 @@ p = pdbfile("3CRO",d) read in single PDB file with snapshot data if only one 4-char file specified and it is not found, it will be downloaded from http://www.rcsb.org as 3CRO.pdb d arg is object with atom coordinates (dump, data) - + p.one() write all output as one big PDB file to tmp.pdb p.one("mine") write to mine.pdb p.many() write one PDB file per snapshot: tmp0000.pdb, ... @@ -36,7 +36,7 @@ p.single(N,"new") write as new.pdb if one file in str arg and d: one new PDB file per snapshot using input PDB file as template multiple input PDB files with a d is not allowed - + index,time,flag = p.iterator(0) index,time,flag = p.iterator(1) @@ -87,7 +87,7 @@ class pdbfile: # flist = full list of all PDB input file names # append .pdb if needed - + if filestr: list = filestr.split() flist = [] @@ -107,7 +107,7 @@ class pdbfile: raise StandardError, "no input PDB file(s)" # grab PDB file from http://rcsb.org if not a local file - + if len(self.files) == 1 and len(self.files[0]) == 8: try: open(self.files[0],'r').close() @@ -117,7 +117,7 @@ class pdbfile: urllib.urlretrieve(fetchstr,self.files[0]) if self.data and len(self.files): self.read_template(self.files[0]) - + # -------------------------------------------------------------------- # write a single large PDB file for concatenating all input data or files # if data exists: @@ -135,7 +135,7 @@ class pdbfile: f = open(file,'w') # use template PDB file with each snapshot - + if self.data: n = flag = 0 while 1: @@ -153,7 +153,7 @@ class pdbfile: print >>f,"END" print file, sys.stdout.flush() - + f.close() print "\nwrote %d datasets to %s in PDB format" % (n,file) @@ -189,7 +189,7 @@ class pdbfile: f = open(file,'w') self.convert(f,which) f.close() - + print time, sys.stdout.flush() n += 1 @@ -206,13 +206,13 @@ class pdbfile: else: file = root + str(n) file += ".pdb" - + f = open(file,'w') f.write(open(infile,'r').read()) f.close() print file, sys.stdout.flush() - + n += 1 print "\nwrote %d datasets to %s*.pdb in PDB format" % (n,root) @@ -239,7 +239,7 @@ class pdbfile: self.convert(f,which) else: f.write(open(self.files[time],'r').read()) - + f.close() # -------------------------------------------------------------------- @@ -258,8 +258,8 @@ class pdbfile: # -------------------------------------------------------------------- # read a PDB file and store ATOM lines - - def read_template(self,file): + + def read_template(self,file): lines = open(file,'r').readlines() self.atomlines = {} for line in lines: diff --git a/tools/python/pizza/xyz.py b/tools/python/pizza/xyz.py index 66699ab5fa..92b681540a 100644 --- a/tools/python/pizza/xyz.py +++ b/tools/python/pizza/xyz.py @@ -3,7 +3,7 @@ # # Copyright (2005) 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 +# certain rights in this software. This software is distributed under # the GNU General Public License. # xyz tool @@ -11,14 +11,14 @@ oneline = "Convert LAMMPS snapshots to XYZ format" docstr = """ -x = xyz(d) d = object containing atom coords (dump, data) +x = xyz(d) d = object containing atom coords (dump, data) x.one() write all snapshots to tmp.xyz x.one("new") write all snapshots to new.xyz x.many() write snapshots to tmp0000.xyz, tmp0001.xyz, etc x.many("new") write snapshots to new0000.xyz, new0001.xyz, etc -x.single(N) write snapshot for timestep N to tmp.xyz -x.single(N,"file") write snapshot for timestep N to file.xyz +x.single(N) write snapshot for timestep N to tmp.xyz +x.single(N,"file") write snapshot for timestep N to file.xyz """ # History @@ -41,7 +41,7 @@ class xyz: def __init__(self,data): self.data = data - + # -------------------------------------------------------------------- def one(self,*args): @@ -61,14 +61,14 @@ class xyz: for atom in atoms: itype = int(atom[1]) print >>f,itype,atom[2],atom[3],atom[4] - + print time, sys.stdout.flush() n += 1 - + f.close() print "\nwrote %d snapshots to %s in XYZ format" % (n,file) - + # -------------------------------------------------------------------- def many(self,*args): @@ -80,7 +80,7 @@ class xyz: which,time,flag = self.data.iterator(flag) if flag == -1: break time,box,atoms,bonds,tris,lines = self.data.viz(which) - + if n < 10: file = root + "000" + str(n) elif n < 100: @@ -88,7 +88,7 @@ class xyz: elif n < 1000: file = root + "0" + str(n) else: - file = root + str(n) + file = root + str(n) file += ".xyz" f = open(file,"w") print >>f,len(atoms) @@ -100,9 +100,9 @@ class xyz: sys.stdout.flush() f.close() n += 1 - + print "\nwrote %s snapshots in XYZ format" % n - + # -------------------------------------------------------------------- def single(self,time,*args): From 5c74782c8499c975123ee70d8dc4a886537309c6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 19 Sep 2019 11:54:24 -0400 Subject: [PATCH 147/237] step version for next patch release --- doc/lammps.1 | 2 +- doc/src/Manual.txt | 4 ++-- src/version.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/lammps.1 b/doc/lammps.1 index ac19749dd6..f332a8a549 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,4 +1,4 @@ -.TH LAMMPS "7 August 2019" "2019-08-07" +.TH LAMMPS "19 September 2019" "2019-09-19" .SH NAME .B LAMMPS \- Molecular Dynamics Simulator. diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index c63137ef6f..95f1ffe4bb 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -1,7 +1,7 @@ LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -7 Aug 2019 version :c,h2 +19 Sep 2019 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/src/version.h b/src/version.h index 7387a3a1a4..d9dcc6de0f 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "7 Aug 2019" +#define LAMMPS_VERSION "19 Sep 2019" From 415698d57045dce227c820c665a823329709caa6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 19 Sep 2019 13:53:54 -0400 Subject: [PATCH 148/237] update examples/README --- examples/README | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/README b/examples/README index 46148aea8b..68a2317ffc 100644 --- a/examples/README +++ b/examples/README @@ -99,12 +99,11 @@ pour: pouring of granular particles into a 3d box, then chute flow prd: parallel replica dynamics of vacancy diffusion in bulk Si python: use of PYTHON package to invoke Python code from input script qeq: use of QEQ package for charge equilibration -reax: RDX and TATB models using the ReaxFF +reax: RDX and TATB and several other models using ReaxFF rigid: rigid bodies modeled as independent or coupled shear: sideways shear applied to 2d solid, with and without a void -snap: use of SNAP potential for Ta +snap: examples for using several bundled SNAP potentials srd: stochastic rotation dynamics (SRD) particles as solvent -snap: NVE dynamics for BCC tantalum crystal using SNAP potential steinhardt: Steinhardt-Nelson Q_l and W_l parameters usng orientorder/atom streitz: Streitz-Mintmire potential for Al2O3 tad: temperature-accelerated dynamics of vacancy diffusion in bulk Si From 95f59f5bf198e65aed91e93a0dbcd1f852354a9a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 19 Sep 2019 13:58:30 -0400 Subject: [PATCH 149/237] cosmetic changes --- doc/src/fix_bond_react.txt | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index ff5c14c1bd..4f4506944f 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -412,8 +412,8 @@ These is 1 quantity for each react argument: (1) cumulative # of reactions occurred :ul -No parameter of this fix can be used with the {start/stop} keywords of -the "run"_run.html command. This fix is not invoked during "energy +No parameter of this fix can be used with the {start/stop} keywords +of the "run"_run.html command. This fix is not invoked during "energy minimization"_minimize.html. When fix bond/react is 'unfixed,' all internally-created groups are @@ -423,18 +423,20 @@ all other fixes that use any group created by fix bond/react. [Restrictions:] This fix is part of the USER-MISC package. It is only enabled if -LAMMPS was built with that package. See the "Build -package"_Build_package.html doc page for more info. +LAMMPS was built with that package. See the +"Build package"_Build_package.html doc page for more info. [Related commands:] -"fix bond/create"_fix_bond_create.html, "fix -bond/break"_fix_bond_break.html, "fix bond/swap"_fix_bond_swap.html, +"fix bond/create"_fix_bond_create.html, +"fix bond/break"_fix_bond_break.html, +"fix bond/swap"_fix_bond_swap.html, "dump local"_dump.html, "special_bonds"_special_bonds.html [Default:] -The option defaults are stabilization = no, prob = 1.0, stabilize_steps = 60, update_edges = none +The option defaults are stabilization = no, prob = 1.0, stabilize_steps = 60, +update_edges = none :line From 077647b4e2a58be582ac8c9da3cb75f688a71c05 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 19 Sep 2019 14:54:48 -0400 Subject: [PATCH 150/237] whitespace cleanup --- doc/src/fix_controller.txt | 1 - doc/src/fix_rigid_meso.txt | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/src/fix_controller.txt b/doc/src/fix_controller.txt index 7458f1bcfa..45eb646b8e 100644 --- a/doc/src/fix_controller.txt +++ b/doc/src/fix_controller.txt @@ -31,7 +31,6 @@ cvar = name of control variable :l [Examples:] - fix 1 all controller 100 1.0 0.5 0.0 0.0 c_thermo_temp 1.5 tcontrol fix 1 all controller 100 0.2 0.5 0 100.0 v_pxxwall 1.01325 xwall fix 1 all controller 10000 0.2 0.5 0 2000 v_avpe -3.785 tcontrol :pre diff --git a/doc/src/fix_rigid_meso.txt b/doc/src/fix_rigid_meso.txt index 0819fdb2fb..a9c68b2c04 100644 --- a/doc/src/fix_rigid_meso.txt +++ b/doc/src/fix_rigid_meso.txt @@ -44,7 +44,7 @@ fix 1 rods rigid/meso molecule fix 1 spheres rigid/meso single force 1 off off on fix 1 particles rigid/meso molecule force 1*5 off off off force 6*10 off off on fix 2 spheres rigid/meso group 3 sphere1 sphere2 sphere3 torque * off off off :pre - + [Description:] Treat one or more sets of mesoscopic SPH/SDPD particles as independent From b7d9337da4e3e9370584eb7f360e7490c9a6786a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 19 Sep 2019 15:13:53 -0400 Subject: [PATCH 151/237] remove a tab --- doc/src/pair_granular.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/pair_granular.txt b/doc/src/pair_granular.txt index f16cd9fe0b..d46bea2343 100644 --- a/doc/src/pair_granular.txt +++ b/doc/src/pair_granular.txt @@ -790,4 +790,4 @@ alternative contact force models during inelastic collisions. Powder Technology, 233, 30-46. :link(WaltonPC) -[(Otis R. Walton)] Walton, O.R., Personal Communication +[(Otis R. Walton)] Walton, O.R., Personal Communication From 3fd43224b3615b310c3d435657e9b15b2b9d622f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 19 Sep 2019 15:17:52 -0400 Subject: [PATCH 152/237] update comments in example inputs --- examples/snap/in.snap.Mo_Chen | 14 +++++++------- examples/snap/in.snap.Ta06A | 12 ++++++------ examples/snap/in.snap.W.2940 | 14 +++++++------- examples/snap/in.snap.WBe.PRB2019 | 18 +++++++++--------- examples/snap/in.snap.hybrid.WSNAP.HePair | 20 ++++++++++---------- 5 files changed, 39 insertions(+), 39 deletions(-) diff --git a/examples/snap/in.snap.Mo_Chen b/examples/snap/in.snap.Mo_Chen index 007bce2462..bb9fb0900d 100644 --- a/examples/snap/in.snap.Mo_Chen +++ b/examples/snap/in.snap.Mo_Chen @@ -1,11 +1,11 @@ -# Demonstrate SNAP Ta potential +# Demonstrate SNAP Mo potential # Initialize simulation variable nsteps index 100 variable nrep equal 4 variable a equal 3.160 -units metal +units metal # generate the box and atom positions using a BCC lattice @@ -13,12 +13,12 @@ variable nx equal ${nrep} variable ny equal ${nrep} variable nz equal ${nrep} -boundary p p p +boundary p p p lattice bcc $a -region box block 0 ${nx} 0 ${ny} 0 ${nz} -create_box 1 box -create_atoms 1 box +region box block 0 ${nx} 0 ${ny} 0 ${nz} +create_box 1 box +create_atoms 1 box mass 1 183.84 @@ -28,7 +28,7 @@ include Mo_Chen_PRM2017.snap # Setup output -thermo 10 +thermo 10 thermo_modify norm yes # Set up NVE run diff --git a/examples/snap/in.snap.Ta06A b/examples/snap/in.snap.Ta06A index 38a24b8c06..0ca5275e97 100644 --- a/examples/snap/in.snap.Ta06A +++ b/examples/snap/in.snap.Ta06A @@ -5,7 +5,7 @@ variable nsteps index 100 variable nrep equal 4 variable a equal 3.316 -units metal +units metal # generate the box and atom positions using a BCC lattice @@ -13,12 +13,12 @@ variable nx equal ${nrep} variable ny equal ${nrep} variable nz equal ${nrep} -boundary p p p +boundary p p p lattice bcc $a -region box block 0 ${nx} 0 ${ny} 0 ${nz} -create_box 1 box -create_atoms 1 box +region box block 0 ${nx} 0 ${ny} 0 ${nz} +create_box 1 box +create_atoms 1 box mass 1 180.88 @@ -28,7 +28,7 @@ include Ta06A.snap # Setup output -thermo 10 +thermo 10 thermo_modify norm yes # Set up NVE run diff --git a/examples/snap/in.snap.W.2940 b/examples/snap/in.snap.W.2940 index e1abf861e6..7e59b5198e 100644 --- a/examples/snap/in.snap.W.2940 +++ b/examples/snap/in.snap.W.2940 @@ -1,11 +1,11 @@ -# Demonstrate SNAP Ta potential +# Demonstrate SNAP W potential # Initialize simulation variable nsteps index 100 variable nrep equal 4 variable a equal 3.1803 -units metal +units metal # generate the box and atom positions using a BCC lattice @@ -13,12 +13,12 @@ variable nx equal ${nrep} variable ny equal ${nrep} variable nz equal ${nrep} -boundary p p p +boundary p p p lattice bcc $a -region box block 0 ${nx} 0 ${ny} 0 ${nz} -create_box 1 box -create_atoms 1 box +region box block 0 ${nx} 0 ${ny} 0 ${nz} +create_box 1 box +create_atoms 1 box mass 1 183.84 @@ -28,7 +28,7 @@ include W_2940_2017_2.snap # Setup output -thermo 10 +thermo 10 thermo_modify norm yes # Set up NVE run diff --git a/examples/snap/in.snap.WBe.PRB2019 b/examples/snap/in.snap.WBe.PRB2019 index 1e25bbb6a6..6b342ea56f 100644 --- a/examples/snap/in.snap.WBe.PRB2019 +++ b/examples/snap/in.snap.WBe.PRB2019 @@ -5,7 +5,7 @@ variable nsteps index 100 variable nrep equal 4 variable a equal 3.1803 -units metal +units metal # generate the box and atom positions using a BCC lattice @@ -13,25 +13,25 @@ variable nx equal ${nrep} variable ny equal ${nrep} variable nz equal ${nrep} -boundary p p p +boundary p p p lattice bcc $a -region box block 0 ${nx} 0 ${ny} 0 ${nz} -create_box 2 box -create_atoms 1 box +region box block 0 ${nx} 0 ${ny} 0 ${nz} +create_box 2 box +create_atoms 1 box mass 1 183.84 mass 2 9.012182 -set group all type/fraction 2 0.05 3590153 # Change 5% of W to He -group tungsten type 1 -group beryllium type 2 +set group all type/fraction 2 0.05 3590153 # Change 5% of W to He +group tungsten type 1 +group beryllium type 2 # choose potential include WBe_Wood_PRB2019.snap # Setup output -thermo 10 +thermo 10 thermo_modify norm yes # Set up NVE run diff --git a/examples/snap/in.snap.hybrid.WSNAP.HePair b/examples/snap/in.snap.hybrid.WSNAP.HePair index 1f16fa64a2..1092c28119 100644 --- a/examples/snap/in.snap.hybrid.WSNAP.HePair +++ b/examples/snap/in.snap.hybrid.WSNAP.HePair @@ -1,11 +1,11 @@ -# Demonstrate SNAP Ta potential +# Demonstrate SNAP W with tabulated He-He and W-He using hybrid pair style # Initialize simulation variable nsteps index 100 variable nrep equal 4 variable a equal 3.1803 -units metal +units metal # generate the box and atom positions using a BCC lattice @@ -13,25 +13,25 @@ variable nx equal ${nrep} variable ny equal ${nrep} variable nz equal ${nrep} -boundary p p p +boundary p p p lattice bcc $a -region box block 0 ${nx} 0 ${ny} 0 ${nz} -create_box 2 box -create_atoms 1 box +region box block 0 ${nx} 0 ${ny} 0 ${nz} +create_box 2 box +create_atoms 1 box mass 1 183.84 mass 2 4.0026 -set group all type/fraction 2 0.05 3590153 # Change 5% of W to He -group tungsten type 1 -group helium type 2 +set group all type/fraction 2 0.05 3590153 # Change 5% of W to He +group tungsten type 1 +group helium type 2 # choose potential include W_2940_2017_2_He_JW2013.snap # Setup output -thermo 10 +thermo 10 thermo_modify norm yes # Set up NVE run From d7a87929161ff7ef499ce90df18b9d1a14c92c7e Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Thu, 19 Sep 2019 14:23:58 -0600 Subject: [PATCH 153/237] cmake: allow to build against an external libkokkos --- cmake/Modules/Packages/KOKKOS.cmake | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/cmake/Modules/Packages/KOKKOS.cmake b/cmake/Modules/Packages/KOKKOS.cmake index cc1e051629..d0f67243cf 100644 --- a/cmake/Modules/Packages/KOKKOS.cmake +++ b/cmake/Modules/Packages/KOKKOS.cmake @@ -1,15 +1,21 @@ if(PKG_KOKKOS) - set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos) - set(LAMMPS_LIB_KOKKOS_BIN_DIR ${LAMMPS_LIB_BINARY_DIR}/kokkos) - add_definitions(-DLMP_KOKKOS) - add_subdirectory(${LAMMPS_LIB_KOKKOS_SRC_DIR} ${LAMMPS_LIB_KOKKOS_BIN_DIR}) - - set(Kokkos_INCLUDE_DIRS ${LAMMPS_LIB_KOKKOS_SRC_DIR}/core/src - ${LAMMPS_LIB_KOKKOS_SRC_DIR}/containers/src - ${LAMMPS_LIB_KOKKOS_SRC_DIR}/algorithms/src - ${LAMMPS_LIB_KOKKOS_BIN_DIR}) - include_directories(${Kokkos_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS kokkos) + option(EXTERNAL_KOKKOS "Build against external kokkos library") + if(EXTERNAL_KOKKOS) + find_package(Kokkos REQUIRED) + list(APPEND LAMMPS_LINK_LIBS Kokkos::kokkos) + else() + set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos) + set(LAMMPS_LIB_KOKKOS_BIN_DIR ${LAMMPS_LIB_BINARY_DIR}/kokkos) + add_definitions(-DLMP_KOKKOS) + add_subdirectory(${LAMMPS_LIB_KOKKOS_SRC_DIR} ${LAMMPS_LIB_KOKKOS_BIN_DIR}) + + set(Kokkos_INCLUDE_DIRS ${LAMMPS_LIB_KOKKOS_SRC_DIR}/core/src + ${LAMMPS_LIB_KOKKOS_SRC_DIR}/containers/src + ${LAMMPS_LIB_KOKKOS_SRC_DIR}/algorithms/src + ${LAMMPS_LIB_KOKKOS_BIN_DIR}) + include_directories(${Kokkos_INCLUDE_DIRS}) + list(APPEND LAMMPS_LINK_LIBS kokkos) + endif() set(KOKKOS_PKG_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/KOKKOS) set(KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/kokkos.cpp From cf1c31cd3d8212fcd01af201043e3d02f9a2b961 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Fri, 20 Sep 2019 14:42:04 -0700 Subject: [PATCH 154/237] Added third order, added documentation, took out extraneous lines, added documentation figures. --- doc/src/JPG/dynamical_matrix_dynmat.jpg | Bin 0 -> 17099 bytes .../JPG/dynamical_matrix_force_constant.jpg | Bin 0 -> 19836 bytes doc/src/JPG/dynamical_matrix_phonons.jpg | Bin 0 -> 26387 bytes doc/src/JPG/third_order_force_constant.png | Bin 0 -> 24223 bytes doc/src/dynamical_matrix.txt | 25 +- doc/src/third_order.txt | 62 ++ src/USER-PHONON/Install.sh | 2 + src/USER-PHONON/dynamical_matrix.cpp | 9 +- src/USER-PHONON/third_order.cpp | 573 ++++++++++++++++++ src/USER-PHONON/third_order.h | 76 +++ 10 files changed, 735 insertions(+), 12 deletions(-) create mode 100644 doc/src/JPG/dynamical_matrix_dynmat.jpg create mode 100644 doc/src/JPG/dynamical_matrix_force_constant.jpg create mode 100644 doc/src/JPG/dynamical_matrix_phonons.jpg create mode 100644 doc/src/JPG/third_order_force_constant.png create mode 100644 doc/src/third_order.txt create mode 100644 src/USER-PHONON/third_order.cpp create mode 100644 src/USER-PHONON/third_order.h diff --git a/doc/src/JPG/dynamical_matrix_dynmat.jpg b/doc/src/JPG/dynamical_matrix_dynmat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6c6adae72c2205d646c490036c1e64483334483c GIT binary patch literal 17099 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 literal 0 HcmV?d00001 diff --git a/doc/src/JPG/dynamical_matrix_force_constant.jpg b/doc/src/JPG/dynamical_matrix_force_constant.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1a0e50d14fa9325b32c7647a0edb33443189583 GIT binary patch literal 19836 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 Cu+csM literal 0 HcmV?d00001 diff --git a/doc/src/JPG/dynamical_matrix_phonons.jpg b/doc/src/JPG/dynamical_matrix_phonons.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a6d3a36d77afac80ed4ac990eeb0b4cf4e5c16c GIT binary patch literal 26387 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 EUsmRKl>h($ literal 0 HcmV?d00001 diff --git a/doc/src/JPG/third_order_force_constant.png b/doc/src/JPG/third_order_force_constant.png new file mode 100644 index 0000000000000000000000000000000000000000..f6171ccf097e9df5fee54241d1bc2f142de2d398 GIT binary patch literal 24223 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 s0Oimage_check(); domain->box_too_small_check(); neighbor->build(1); - neighbor->ncalls = 0; - neighbor->every = 2; // build every this many steps - neighbor->delay = 1; - neighbor->ago = 0; - neighbor->ndanger = 0; // compute all forces external_force_clear = 0; @@ -273,7 +268,7 @@ void DynamicalMatrix::calculateMatrix() local_idx = atom->map(i); if (gm[i-1] < 0) continue; - for (bigint alpha=0; alpha<3; alpha++){ + for (int alpha=0; alpha<3; alpha++){ displace_atom(local_idx, alpha, 1); update_force(); for (bigint j=1; j<=natoms; j++){ @@ -291,7 +286,7 @@ void DynamicalMatrix::calculateMatrix() local_jdx = atom->map(j); if (local_idx >= 0 && local_jdx >= 0 && local_jdx < nlocal && gm[j-1] >= 0){ - for (bigint beta=0; beta<3; beta++){ + for (int beta=0; beta<3; beta++){ if (atom->rmass_flag == 1) imass = sqrt(m[local_idx] * m[local_jdx]); else diff --git a/src/USER-PHONON/third_order.cpp b/src/USER-PHONON/third_order.cpp new file mode 100644 index 0000000000..7a3e9a4b51 --- /dev/null +++ b/src/USER-PHONON/third_order.cpp @@ -0,0 +1,573 @@ +// +// Created by charlie sievers on 7/5/18. +// + + +#include +#include +#include "third_order.h" +#include "atom.h" +#include "complex" +#include "domain.h" +#include "comm.h" +#include "group.h" +#include "force.h" +#include "memory.h" +#include "math_extra.h" +#include "bond.h" +#include "angle.h" +#include "dihedral.h" +#include "improper.h" +#include "kspace.h" +#include "update.h" +#include "neighbor.h" +#include "pair.h" +#include "timer.h" +#include "finish.h" +#include + + +using namespace LAMMPS_NS; +enum{REGULAR,BALLISTICO}; + +/* ---------------------------------------------------------------------- */ + +ThirdOrder::ThirdOrder(LAMMPS *lmp) : Pointers(lmp), fp(NULL) +{ + external_force_clear = 1; +} + +/* ---------------------------------------------------------------------- */ + +ThirdOrder::~ThirdOrder() +{ + if (fp && me == 0) fclose(fp); + fp = NULL; + memory->destroy(groupmap); +} + +/* ---------------------------------------------------------------------- + setup without output or one-time post-init setup + flag = 0 = just force calculation + flag = 1 = reneighbor and force calculation +------------------------------------------------------------------------- */ + +void ThirdOrder::setup() +{ + // setup domain, communication and neighboring + // acquire ghosts + // build neighbor lists + if (triclinic) domain->x2lamda(atom->nlocal); + domain->pbc(); + domain->reset_box(); + comm->setup(); + if (neighbor->style) neighbor->setup_bins(); + comm->exchange(); + comm->borders(); + if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); + domain->image_check(); + domain->box_too_small_check(); + neighbor->build(1); + + // compute all forces + external_force_clear = 0; + eflag=0; + vflag=0; + update_force(); + + if (gcount == atom->natoms) + for (bigint i=0; inatoms; i++) + groupmap[i] = i; + else + create_groupmap(); +} + +/* ---------------------------------------------------------------------- */ + +void ThirdOrder::command(int narg, char **arg) +{ + MPI_Comm_rank(world,&me); + + if (domain->box_exist == 0) + error->all(FLERR,"Dynamical_matrix command before simulation box is defined"); + if (narg < 2) error->all(FLERR,"Illegal dynamical_matrix command"); + + lmp->init(); + + // orthogonal vs triclinic simulation box + + triclinic = domain->triclinic; + + if (force->pair && force->pair->compute_flag) pair_compute_flag = 1; + else pair_compute_flag = 0; + if (force->kspace && force->kspace->compute_flag) kspace_compute_flag = 1; + else kspace_compute_flag = 0; + + // group and style + + igroup = group->find(arg[0]); + if (igroup == -1) error->all(FLERR,"Could not find dynamical matrix group ID"); + groupbit = group->bitmask[igroup]; + gcount = group->count(igroup); + dynlen = (gcount)*3; + memory->create(groupmap,atom->natoms,"total_group_map:totalgm"); + update->setupflag = 1; + + int style = -1; + if (strcmp(arg[1],"regular") == 0) style = REGULAR; + else if (strcmp(arg[1],"ballistico") == 0) style = BALLISTICO; + else error->all(FLERR,"Illegal Dynamical Matrix command"); + + // set option defaults + + binaryflag = 0; + scaleflag = 0; + compressed = 0; + file_flag = 0; + file_opened = 0; + conversion = 1; + + // read options from end of input line + if (style == REGULAR) options(narg-3,&arg[3]); //COME BACK + else if (style == BALLISTICO) options(narg-3,&arg[3]); //COME BACK + else if (comm->me == 0 && screen) fprintf(screen,"Illegal Dynamical Matrix command\n"); + del = force->numeric(FLERR, arg[2]); + + if (atom->map_style == 0) + error->all(FLERR,"Dynamical_matrix command requires an atom map, see atom_modify"); + + // move atoms by 3-vector or specified variable(s) + + if (style == REGULAR) { + setup(); + timer->init(); + timer->barrier_start(); + calculateMatrix(); + timer->barrier_stop(); + } + + if (style == BALLISTICO) { + setup(); + convert_units(update->unit_style); + conversion = conv_energy/conv_distance/conv_distance; + timer->init(); + timer->barrier_start(); + calculateMatrix(); + timer->barrier_stop(); + } + + Finish finish(lmp); + finish.end(1); +} + +/* ---------------------------------------------------------------------- + parse optional parameters +------------------------------------------------------------------------- */ + +void ThirdOrder::options(int narg, char **arg) +{ + if (narg < 0) error->all(FLERR,"Illegal dynamical_matrix command"); + int iarg = 0; + const char *filename = "third_order.dat"; + std::stringstream fss; + + while (iarg < narg) { + if (strcmp(arg[iarg],"file") == 0) { + if (iarg+2 > narg) error->all(FLERR, "Illegal dynamical_matrix command"); + fss << arg[iarg + 1]; + filename = fss.str().c_str(); + file_flag = 1; + iarg += 2; + } + else if (strcmp(arg[iarg],"binary") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal dynamical_matrix command"); + if (strcmp(arg[iarg+1],"gzip") == 0) { + compressed = 1; + } + else if (strcmp(arg[iarg+1],"yes") == 0) { + binaryflag = 1; + } + iarg += 2; + } else error->all(FLERR,"Illegal dynamical_matrix command"); + } + if (file_flag == 1 and me == 0) { + openfile(filename); + } +} + +/* ---------------------------------------------------------------------- + generic opening of a file + ASCII or binary or gzipped + some derived classes override this function +------------------------------------------------------------------------- */ + +void ThirdOrder::openfile(const char* filename) +{ + // if file already opened, return + if (file_opened) return; + + if (compressed) { +#ifdef LAMMPS_GZIP + char gzip[128]; + sprintf(gzip,"gzip -6 > %s",filename); +#ifdef _WIN32 + fp = _popen(gzip,"wb"); +#else + fp = popen(gzip,"w"); +#endif +#else + error->one(FLERR,"Cannot open gzipped file"); +#endif + } else if (binaryflag) { + fp = fopen(filename,"wb"); + } else { + fp = fopen(filename,"w"); + } + + if (fp == NULL) error->one(FLERR,"Cannot open dump file"); + + file_opened = 1; +} + +/* ---------------------------------------------------------------------- + create dynamical matrix +------------------------------------------------------------------------- */ + +void ThirdOrder::calculateMatrix() +{ + int local_idx; // local index + int local_jdx; // second local index + int local_kdx; // third local index + int nlocal = atom->nlocal; + bigint natoms = atom->natoms; + bigint *gm = groupmap; + double **f = atom->f; + + double *dynmat = new double[3*dynlen]; + double *fdynmat = new double[3*dynlen]; + memset(&dynmat[0],0,dynlen*sizeof(double)); + memset(&fdynmat[0],0,dynlen*sizeof(double)); + + if (comm->me == 0 && screen) { + fprintf(screen,"Calculating Third Order ...\n"); + fprintf(screen," Total # of atoms = " BIGINT_FORMAT "\n", natoms); + fprintf(screen," Atoms in group = " BIGINT_FORMAT "\n", gcount); + fprintf(screen," Total third order elements = " BIGINT_FORMAT "\n", (dynlen*dynlen*dynlen) ); + } + + update->nsteps = 0; + int prog = 0; + for (bigint i=1; i<=natoms; i++){ + local_idx = atom->map(i); + for (int alpha=0; alpha<3; alpha++){ + for (bigint j=1; j<=natoms; j++){ + local_jdx = atom->map(j); + for (int beta=0; beta<3; beta++){ + displace_atom(local_idx, alpha, 1); + displace_atom(local_jdx, beta, 1); + update_force(); + for (bigint k=1; k<=natoms; k++){ + local_kdx = atom->map(k); + for (int gamma=0; gamma<3; gamma++){ + if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 + && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 + && local_kdx < nlocal) { + dynmat[gm[k-1]*3+gamma] += f[local_kdx][gamma]; + } + } + } + displace_atom(local_jdx, beta, -2); + update_force(); + for (bigint k=1; k<=natoms; k++){ + local_kdx = atom->map(k); + for (int gamma=0; gamma<3; gamma++){ + if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 + && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 + && local_kdx < nlocal) { + dynmat[gm[k-1]*3+gamma] -= f[local_kdx][gamma]; + } + } + } + displace_atom(local_jdx, beta, 1); + displace_atom(local_idx,alpha,-2); + displace_atom(local_jdx, beta, 1); + update_force(); + for (bigint k=1; k<=natoms; k++){ + local_kdx = atom->map(k); + for (int gamma=0; gamma<3; gamma++){ + if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 + && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 + && local_kdx < nlocal) { + dynmat[gm[k-1]*3+gamma] -= f[local_kdx][gamma]; + } + } + } + displace_atom(local_jdx, beta, -2); + update_force(); + for (bigint k=1; k<=natoms; k++){ + local_kdx = atom->map(k); + for (int gamma=0; gamma<3; gamma++){ + if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 + && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 + && local_kdx < nlocal) { + dynmat[gm[k-1]*3+gamma] += f[local_kdx][gamma]; + dynmat[gm[k-1]*3+gamma] /= (4 * del * del); + } + } + } + displace_atom(local_jdx, beta, 1); + displace_atom(local_idx, alpha, 1); + MPI_Reduce(dynmat,fdynmat,3*dynlen,MPI_DOUBLE,MPI_SUM,0,world); + if (me == 0){ + writeMatrix(fdynmat, gm[i-1], alpha, gm[j-1], beta); + } + memset(&dynmat[0],0,dynlen*sizeof(double)); + } + } + } + if (comm->me == 0 && screen) { + int p = 10 * gm[i-1] / gcount; + if (p > prog) { + prog = p; + fprintf(screen," %d%%",p*10); + fflush(screen); + } + } + } + + delete [] dynmat; + delete [] fdynmat; + + if (screen && me ==0 ) fprintf(screen,"Finished Calculating Third Order Tensor\n"); + +} + +/* ---------------------------------------------------------------------- + write dynamical matrix +------------------------------------------------------------------------- */ + +void ThirdOrder::writeMatrix(double *dynmat, bigint i, int a, bigint j, int b) +{ + if (me != 0) + return; + + double norm; + if (!binaryflag && fp) { + clearerr(fp); + for (int k = 0; k < gcount; k++){ + norm = pow(dynmat[k*3], 2)+ + pow(dynmat[k*3+1], 2)+ + pow(dynmat[k*3+2], 2); + if (norm > 1.0e-16) + fprintf(fp, + "%llu %d %llu %d %llu %7.8f %7.8f %7.8f\n", + i+1, a + 1, j+1, b + 1, groupmap[k]+1, + dynmat[k*3] * conversion, + dynmat[k*3+1] * conversion, + dynmat[k*3+2] * conversion); + } + } + else if (binaryflag && fp){ + clearerr(fp); + fwrite(&dynmat[0], sizeof(double), dynlen, fp); + } + if (ferror(fp)) error->one(FLERR,"Error writing to file"); + +} + +/* ---------------------------------------------------------------------- + Displace atoms + ---------------------------------------------------------------------- */ + +void ThirdOrder::displace_atom(int local_idx, int direction, int magnitude) +{ + if (local_idx < 0) return; + + double **x = atom->x; + int *sametag = atom->sametag; + int j = local_idx; + + x[local_idx][direction] += del*magnitude; + + while (sametag[j] >= 0){ + j = sametag[j]; + x[j][direction] += del*magnitude; + } +} + +/* ---------------------------------------------------------------------- + evaluate potential energy and forces + may migrate atoms due to reneighboring + return new energy, which should include nextra_global dof + return negative gradient stored in atom->f + return negative gradient for nextra_global dof in fextra +------------------------------------------------------------------------- */ + +void ThirdOrder::update_force() +{ + force_clear(); + + if (pair_compute_flag) { + force->pair->compute(eflag,vflag); + timer->stamp(Timer::PAIR); + } + if (atom->molecular) { + if (force->bond) force->bond->compute(eflag,vflag); + if (force->angle) force->angle->compute(eflag,vflag); + if (force->dihedral) force->dihedral->compute(eflag,vflag); + if (force->improper) force->improper->compute(eflag,vflag); + timer->stamp(Timer::BOND); + } + if (kspace_compute_flag) { + force->kspace->compute(eflag,vflag); + timer->stamp(Timer::KSPACE); + } + if (force->newton) { + comm->reverse_comm(); + timer->stamp(Timer::COMM); + } + ++ update->nsteps; +} + +/* ---------------------------------------------------------------------- + clear force on own & ghost atoms + clear other arrays as needed +------------------------------------------------------------------------- */ + +void ThirdOrder::force_clear() +{ + if (external_force_clear) return; + + // clear global force array + // if either newton flag is set, also include ghosts + + size_t nbytes = sizeof(double) * atom->nlocal; + if (force->newton) nbytes += sizeof(double) * atom->nghost; + + if (nbytes) { + memset(&atom->f[0][0],0,3*nbytes); + } +} + +/* ---------------------------------------------------------------------- */ + +void ThirdOrder::convert_units(const char *style) +{ + // physical constants from: + // http://physics.nist.gov/cuu/Constants/Table/allascii.txt + // using thermochemical calorie = 4.184 J + + if (strcmp(style,"lj") == 0) { + error->all(FLERR,"Conversion Not Set"); + //conversion = 1; // lj -> 10 J/mol + + } else if (strcmp(style,"real") == 0) { + conv_energy = 418.4; // kcal/mol -> 10 J/mol + conv_mass = 1; // g/mol -> g/mol + conv_distance = 1; // angstrom -> angstrom + + } else if (strcmp(style,"metal") == 0) { + conv_energy = 9648.5; // eV -> 10 J/mol + conv_mass = 1; // g/mol -> g/mol + conv_distance = 1; // angstrom -> angstrom + + } else if (strcmp(style,"si") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Multiplication by Large Float"); + conv_energy = 6.022E22; // J -> 10 J/mol + conv_mass = 6.022E26; // kg -> g/mol + conv_distance = 1E-10; // meter -> angstrom + + } else if (strcmp(style,"cgs") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Multiplication by Large Float"); + conv_energy = 6.022E12; // Erg -> 10 J/mol + conv_mass = 6.022E23; // g -> g/mol + conv_distance = 1E-7; // centimeter -> angstrom + + } else if (strcmp(style,"electron") == 0) { + conv_energy = 262550; // Hartree -> 10 J/mol + conv_mass = 1; // amu -> g/mol + conv_distance = 0.529177249; // bohr -> angstrom + + } else if (strcmp(style,"micro") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Untested Conversion"); + conv_energy = 6.022E10; // picogram-micrometer^2/microsecond^2 -> 10 J/mol + conv_mass = 6.022E11; // pg -> g/mol + conv_distance = 1E-4; // micrometer -> angstrom + + } else if (strcmp(style,"nano") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Untested Conversion"); + conv_energy = 6.022E4; // attogram-nanometer^2/nanosecond^2 -> 10 J/mol + conv_mass = 6.022E5; // ag -> g/mol + conv_distance = 0.1; // angstrom -> angstrom + + } else error->all(FLERR,"Units Type Conversion Not Found"); + +} + +/* ---------------------------------------------------------------------- */ + +void ThirdOrder::create_groupmap() +{ + //Create a group map which maps atom order onto group + // groupmap[global atom index-1] = output column/row + + int local_idx; // local index + int gid = 0; //group index + int nlocal = atom->nlocal; + int *mask = atom->mask; + bigint natoms = atom->natoms; + int *recv = new int[comm->nprocs]; + int *displs = new int[comm->nprocs]; + bigint *temp_groupmap = new bigint[natoms]; + + //find number of local atoms in the group (final_gid) + for (bigint i=1; i<=natoms; i++){ + local_idx = atom->map(i); + if ((local_idx >= 0) && (local_idx < nlocal) && mask[local_idx] & groupbit) + gid += 1; // gid at the end of loop is final_Gid + } + //create an array of length final_gid + bigint *sub_groupmap = new bigint[gid]; + + gid = 0; + //create a map between global atom id and group atom id for each proc + for (bigint i=1; i<=natoms; i++){ + local_idx = atom->map(i); + if ((local_idx >= 0) && (local_idx < nlocal) && mask[local_idx] & groupbit){ + sub_groupmap[gid] = i; + gid += 1; + } + } + + //populate arrays for Allgatherv + for (int i=0; inprocs; i++){ + recv[i] = 0; + } + recv[comm->me] = gid; + MPI_Allreduce(recv,displs,comm->nprocs,MPI_INT,MPI_SUM,world); + for (int i=0; inprocs; i++){ + recv[i]=displs[i]; + if (i>0) displs[i] = displs[i-1]+recv[i-1]; + else displs[i] = 0; + } + + //combine subgroup maps into total temporary groupmap + MPI_Allgatherv(sub_groupmap,gid,MPI_LMP_BIGINT,temp_groupmap,recv,displs,MPI_LMP_BIGINT,world); + std::sort(temp_groupmap,temp_groupmap+gcount); + + //populate member groupmap based on temp groupmap + bigint j = 0; + for (bigint i=1; i<=natoms; i++){ + // flag groupmap contents that are in temp_groupmap + if (j < gcount && i == temp_groupmap[j]) + groupmap[i-1] = j++; + else + groupmap[i-1] = -1; + } + + //free that memory! + delete[] recv; + delete[] displs; + delete[] sub_groupmap; + delete[] temp_groupmap; +} diff --git a/src/USER-PHONON/third_order.h b/src/USER-PHONON/third_order.h new file mode 100644 index 0000000000..0123d62fa9 --- /dev/null +++ b/src/USER-PHONON/third_order.h @@ -0,0 +1,76 @@ +// +// Created by charlie sievers on 7/5/18. +// + + +#ifdef COMMAND_CLASS + +CommandStyle(third_order,ThirdOrder) + +#else + +#ifndef LMP_THIRD_ORDER_H +#define LMP_THIRD_ORDER_H + +#include "pointers.h" + +namespace LAMMPS_NS { + + class ThirdOrder : protected Pointers { + public: + ThirdOrder(class LAMMPS *); + virtual ~ThirdOrder(); + void command(int, char **); + void setup(); + + protected: + int eflag,vflag; // flags for energy/virial computation + int external_force_clear; // clear forces locally or externally + + + int triclinic; // 0 if domain is orthog, 1 if triclinic + int pairflag; + + int pair_compute_flag; // 0 if pair->compute is skipped + int kspace_compute_flag; // 0 if kspace->compute is skipped + + int nvec; // local atomic dof = length of xvec + + void update_force(); + void force_clear(); + virtual void openfile(const char* filename); + + + private: + void options(int, char **); + void create_groupmap(); + void calculateMatrix(); + void convert_units(const char *style); + void displace_atom(int local_idx, int direction, int magnitude); + void writeMatrix(double *, bigint, int, bigint, int); + + double conversion; + double conv_energy; + double conv_distance; + double conv_mass; + double del; + int igroup,groupbit; + bigint dynlen; + int scaleflag; + int me; + bigint gcount; // number of atoms in group + bigint *groupmap; + + int compressed; // 1 if dump file is written compressed, 0 no + int binaryflag; // 1 if dump file is written binary, 0 no + int file_opened; // 1 if openfile method has been called, 0 no + int file_flag; // 1 custom file name, 0 dynmat.dat + + FILE *fp; + }; +} + + +#endif //LMP_THIRD_ORDER_H +#endif + From 74d6e528089f965369bcc1c206fce70a2b9158db Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Fri, 20 Sep 2019 15:51:05 -0700 Subject: [PATCH 155/237] Fixed compilation issues --- src/USER-PHONON/third_order.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/USER-PHONON/third_order.cpp b/src/USER-PHONON/third_order.cpp index 7a3e9a4b51..1e1b2ebf71 100644 --- a/src/USER-PHONON/third_order.cpp +++ b/src/USER-PHONON/third_order.cpp @@ -2,18 +2,17 @@ // Created by charlie sievers on 7/5/18. // - #include -#include +#include +#include #include "third_order.h" #include "atom.h" -#include "complex" #include "domain.h" #include "comm.h" +#include "error.h" #include "group.h" #include "force.h" #include "memory.h" -#include "math_extra.h" #include "bond.h" #include "angle.h" #include "dihedral.h" @@ -25,6 +24,8 @@ #include "timer.h" #include "finish.h" #include +#include "complex" + using namespace LAMMPS_NS; @@ -89,8 +90,8 @@ void ThirdOrder::command(int narg, char **arg) MPI_Comm_rank(world,&me); if (domain->box_exist == 0) - error->all(FLERR,"Dynamical_matrix command before simulation box is defined"); - if (narg < 2) error->all(FLERR,"Illegal dynamical_matrix command"); + error->all(FLERR,"third_order command before simulation box is defined"); + if (narg < 2) error->all(FLERR,"Illegal third_order command"); lmp->init(); @@ -134,7 +135,7 @@ void ThirdOrder::command(int narg, char **arg) del = force->numeric(FLERR, arg[2]); if (atom->map_style == 0) - error->all(FLERR,"Dynamical_matrix command requires an atom map, see atom_modify"); + error->all(FLERR,"third_order command requires an atom map, see atom_modify"); // move atoms by 3-vector or specified variable(s) @@ -166,21 +167,21 @@ void ThirdOrder::command(int narg, char **arg) void ThirdOrder::options(int narg, char **arg) { - if (narg < 0) error->all(FLERR,"Illegal dynamical_matrix command"); + if (narg < 0) error->all(FLERR,"Illegal third_order command"); int iarg = 0; const char *filename = "third_order.dat"; std::stringstream fss; while (iarg < narg) { if (strcmp(arg[iarg],"file") == 0) { - if (iarg+2 > narg) error->all(FLERR, "Illegal dynamical_matrix command"); + if (iarg+2 > narg) error->all(FLERR, "Illegal third_order command"); fss << arg[iarg + 1]; filename = fss.str().c_str(); file_flag = 1; iarg += 2; } else if (strcmp(arg[iarg],"binary") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal dynamical_matrix command"); + if (iarg + 2 > narg) error->all(FLERR, "Illegal third_order command"); if (strcmp(arg[iarg+1],"gzip") == 0) { compressed = 1; } @@ -188,7 +189,7 @@ void ThirdOrder::options(int narg, char **arg) binaryflag = 1; } iarg += 2; - } else error->all(FLERR,"Illegal dynamical_matrix command"); + } else error->all(FLERR,"Illegal third_order command"); } if (file_flag == 1 and me == 0) { openfile(filename); From 2da6083df20f0fda2c5e2b6ae97306ad014cbeaa Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 23 Sep 2019 11:47:19 -0400 Subject: [PATCH 156/237] fully integrate third_order command into manual and READMEs --- doc/src/Commands_all.txt | 1 + doc/src/Packages_details.txt | 8 +++++--- doc/src/commands_list.txt | 1 + doc/src/lammps.book | 1 + src/USER-PHONON/README | 6 +++--- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/doc/src/Commands_all.txt b/doc/src/Commands_all.txt index d0d7657c07..ecd21e42e7 100644 --- a/doc/src/Commands_all.txt +++ b/doc/src/Commands_all.txt @@ -124,6 +124,7 @@ An alphabetic list of all general LAMMPS commands. "thermo"_thermo.html, "thermo_modify"_thermo_modify.html, "thermo_style"_thermo_style.html, +"third_order"_third_order.html, "timer"_timer.html, "timestep"_timestep.html, "uncompute"_uncompute.html, diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index eead133add..fc30c045cf 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -1746,11 +1746,12 @@ USER-PHONON package :link(PKG-USER-PHONON),h4 A "fix phonon"_fix_phonon.html command that calculates dynamical matrices, which can then be used to compute phonon dispersion relations, directly from molecular dynamics simulations. -And a "dynamical_matrix" command to compute the dynamical matrix -from finite differences. +And a "dynamical_matrix"_dynamical_matrix.html as well as a +"third_order"_third_order.html command to compute the dynamical matrix +and third order tensor from finite differences. [Authors:] Ling-Ti Kong (Shanghai Jiao Tong University) for "fix phonon" -and Charlie Sievers (UC Davis) for "dynamical_matrix" +and Charlie Sievers (UC Davis) for "dynamical_matrix" and "third_order" [Supporting info:] @@ -1759,6 +1760,7 @@ src/USER-PHONON: filenames -> commands src/USER-PHONON/README "fix phonon"_fix_phonon.html "dynamical_matrix"_dynamical_matrix.html +"third_order"_third_order.html examples/USER/phonon :ul :line diff --git a/doc/src/commands_list.txt b/doc/src/commands_list.txt index a5c9b568ed..714aedefed 100644 --- a/doc/src/commands_list.txt +++ b/doc/src/commands_list.txt @@ -108,6 +108,7 @@ Commands :h1 thermo thermo_modify thermo_style + third_order timer timestep uncompute diff --git a/doc/src/lammps.book b/doc/src/lammps.book index 9868c8f299..eec7520fdc 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -217,6 +217,7 @@ temper_npt.html thermo.html thermo_modify.html thermo_style.html +third_order.html timer.html timestep.html uncompute.html diff --git a/src/USER-PHONON/README b/src/USER-PHONON/README index b554eacd5e..d5ed666c0c 100644 --- a/src/USER-PHONON/README +++ b/src/USER-PHONON/README @@ -3,11 +3,11 @@ matrices from finite temperature MD simulations, which can then be used to compute phonon dispersion relations, directly from molecular dynamics simulations. -It also contains a command to compute the dynamical matrix at -pre-optimized positions through finite differences. +It also contains commands to compute the dynamical matrix and third +order tensor at pre-optimized positions through finite differences. See the doc page for the fix phonon command or the dynamical_matrix -command for detailed usage instructions. +or third_order commands for detailed usage instructions. Use of this package requires building LAMMPS with FFT suppport, as described in doc/Section_start.html. From 03de73f66f5c9a3a5b47ce5b2dbf3330efe0eddc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 23 Sep 2019 11:54:26 -0400 Subject: [PATCH 157/237] rename "ballistico" keyword to "eskm" to match dynamical_matrix --- doc/src/third_order.txt | 16 ++++++++-------- src/USER-PHONON/third_order.cpp | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/src/third_order.txt b/doc/src/third_order.txt index 00fc67fabf..9636ec830e 100644 --- a/doc/src/third_order.txt +++ b/doc/src/third_order.txt @@ -13,7 +13,7 @@ third_order command :h3 third_order group-ID style delta args keyword value ... :pre group-ID = ID of group of atoms to displace :ulb,l -style = {regular} or {ballistico} :l +style = {regular} or {eskm} :l delta = finite different displacement length (distance units) :l one or more keyword/arg pairs may be appended :l keyword = {file} or {binary} @@ -24,9 +24,9 @@ one or more keyword/arg pairs may be appended :l [Examples:] third_order 1 regular 0.000001 -third_order 1 ballistico 0.000001 +third_order 1 eskm 0.000001 third_order 3 regular 0.00004 file third_order.dat -third_order 5 ballistico 0.00000001 file third_order.dat binary yes :pre +third_order 5 eskm 0.00000001 file third_order.dat binary yes :pre [Description:] @@ -38,11 +38,11 @@ where Phi is the third order force constant tensor. The output of the command is the tensor, three elements at a time. The three elements correspond to the three gamma elements for a specific i/alpha/j/beta/k. -The initial five numbers are i, alpha, j, beta, and k respectively. +The initial five numbers are i, alpha, j, beta, and k respectively. -If the style ballistico is selected, the tensor will be of the energy units system -10 J/mol. These units conform to eskm style from the dynamical_matrix command, which -will provide ease for operations using both dynamical matrices with third order tensors. +If the style eskm is selected, the tensor will be using energy units of 10 J/mol. +These units conform to eskm style from the dynamical_matrix command, which +will simplify operations using dynamical matrices with third order tensors. [Restrictions:] @@ -59,4 +59,4 @@ package"_Build_package.html doc page for more info. [Default:] -The default settings are file = "third_order.dat", binary = no +The default settings are file = "third_order.dat", binary = no diff --git a/src/USER-PHONON/third_order.cpp b/src/USER-PHONON/third_order.cpp index 1e1b2ebf71..4b884e00d7 100644 --- a/src/USER-PHONON/third_order.cpp +++ b/src/USER-PHONON/third_order.cpp @@ -116,7 +116,7 @@ void ThirdOrder::command(int narg, char **arg) int style = -1; if (strcmp(arg[1],"regular") == 0) style = REGULAR; - else if (strcmp(arg[1],"ballistico") == 0) style = BALLISTICO; + else if (strcmp(arg[1],"eskm") == 0) style = BALLISTICO; else error->all(FLERR,"Illegal Dynamical Matrix command"); // set option defaults From fddc164d5b8529e6544574631d42dee8e3a8e94d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 23 Sep 2019 11:54:46 -0400 Subject: [PATCH 158/237] register a couple more false positives to clear doc test --- doc/utils/sphinx-config/false_positives.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index fd4612bf78..da0bbc47d4 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -780,6 +780,7 @@ erotate Ertas ervel Espanol +eskm esu esub esw @@ -2125,6 +2126,7 @@ ph Phillpot phiphi phonon +phonons phophorous phosphide Phs From 0abbc590065ef1a298a38c3020d927e4943e20ac Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 23 Sep 2019 12:11:34 -0400 Subject: [PATCH 159/237] multiple changes to integrate into LAMMPS more smoothly - indentation at 2 blanks - use BIGINT_FORMAT consistently - use MathSpecial::square() instead of pow(x,2) --- src/USER-PHONON/third_order.cpp | 759 ++++++++++++++++---------------- src/USER-PHONON/third_order.h | 82 ++-- 2 files changed, 421 insertions(+), 420 deletions(-) diff --git a/src/USER-PHONON/third_order.cpp b/src/USER-PHONON/third_order.cpp index 4b884e00d7..7764287337 100644 --- a/src/USER-PHONON/third_order.cpp +++ b/src/USER-PHONON/third_order.cpp @@ -2,10 +2,10 @@ // Created by charlie sievers on 7/5/18. // +#include "third_order.h" #include #include #include -#include "third_order.h" #include "atom.h" #include "domain.h" #include "comm.h" @@ -23,28 +23,28 @@ #include "pair.h" #include "timer.h" #include "finish.h" +#include "math_special.h" #include -#include "complex" - - +#include using namespace LAMMPS_NS; +using namespace MathSpecial; enum{REGULAR,BALLISTICO}; /* ---------------------------------------------------------------------- */ ThirdOrder::ThirdOrder(LAMMPS *lmp) : Pointers(lmp), fp(NULL) { - external_force_clear = 1; + external_force_clear = 1; } /* ---------------------------------------------------------------------- */ ThirdOrder::~ThirdOrder() { - if (fp && me == 0) fclose(fp); - fp = NULL; - memory->destroy(groupmap); + if (fp && me == 0) fclose(fp); + fp = NULL; + memory->destroy(groupmap); } /* ---------------------------------------------------------------------- @@ -55,110 +55,110 @@ ThirdOrder::~ThirdOrder() void ThirdOrder::setup() { - // setup domain, communication and neighboring - // acquire ghosts - // build neighbor lists - if (triclinic) domain->x2lamda(atom->nlocal); - domain->pbc(); - domain->reset_box(); - comm->setup(); - if (neighbor->style) neighbor->setup_bins(); - comm->exchange(); - comm->borders(); - if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); - domain->image_check(); - domain->box_too_small_check(); - neighbor->build(1); + // setup domain, communication and neighboring + // acquire ghosts + // build neighbor lists + if (triclinic) domain->x2lamda(atom->nlocal); + domain->pbc(); + domain->reset_box(); + comm->setup(); + if (neighbor->style) neighbor->setup_bins(); + comm->exchange(); + comm->borders(); + if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); + domain->image_check(); + domain->box_too_small_check(); + neighbor->build(1); - // compute all forces - external_force_clear = 0; - eflag=0; - vflag=0; - update_force(); + // compute all forces + external_force_clear = 0; + eflag=0; + vflag=0; + update_force(); - if (gcount == atom->natoms) - for (bigint i=0; inatoms; i++) - groupmap[i] = i; - else - create_groupmap(); + if (gcount == atom->natoms) + for (bigint i=0; inatoms; i++) + groupmap[i] = i; + else + create_groupmap(); } /* ---------------------------------------------------------------------- */ void ThirdOrder::command(int narg, char **arg) { - MPI_Comm_rank(world,&me); + MPI_Comm_rank(world,&me); - if (domain->box_exist == 0) - error->all(FLERR,"third_order command before simulation box is defined"); - if (narg < 2) error->all(FLERR,"Illegal third_order command"); + if (domain->box_exist == 0) + error->all(FLERR,"third_order command before simulation box is defined"); + if (narg < 2) error->all(FLERR,"Illegal third_order command"); - lmp->init(); + lmp->init(); - // orthogonal vs triclinic simulation box + // orthogonal vs triclinic simulation box - triclinic = domain->triclinic; + triclinic = domain->triclinic; - if (force->pair && force->pair->compute_flag) pair_compute_flag = 1; - else pair_compute_flag = 0; - if (force->kspace && force->kspace->compute_flag) kspace_compute_flag = 1; - else kspace_compute_flag = 0; + if (force->pair && force->pair->compute_flag) pair_compute_flag = 1; + else pair_compute_flag = 0; + if (force->kspace && force->kspace->compute_flag) kspace_compute_flag = 1; + else kspace_compute_flag = 0; - // group and style + // group and style - igroup = group->find(arg[0]); - if (igroup == -1) error->all(FLERR,"Could not find dynamical matrix group ID"); - groupbit = group->bitmask[igroup]; - gcount = group->count(igroup); - dynlen = (gcount)*3; - memory->create(groupmap,atom->natoms,"total_group_map:totalgm"); - update->setupflag = 1; + igroup = group->find(arg[0]); + if (igroup == -1) error->all(FLERR,"Could not find dynamical matrix group ID"); + groupbit = group->bitmask[igroup]; + gcount = group->count(igroup); + dynlen = (gcount)*3; + memory->create(groupmap,atom->natoms,"total_group_map:totalgm"); + update->setupflag = 1; - int style = -1; - if (strcmp(arg[1],"regular") == 0) style = REGULAR; - else if (strcmp(arg[1],"eskm") == 0) style = BALLISTICO; - else error->all(FLERR,"Illegal Dynamical Matrix command"); + int style = -1; + if (strcmp(arg[1],"regular") == 0) style = REGULAR; + else if (strcmp(arg[1],"eskm") == 0) style = BALLISTICO; + else error->all(FLERR,"Illegal Dynamical Matrix command"); - // set option defaults + // set option defaults - binaryflag = 0; - scaleflag = 0; - compressed = 0; - file_flag = 0; - file_opened = 0; - conversion = 1; + binaryflag = 0; + scaleflag = 0; + compressed = 0; + file_flag = 0; + file_opened = 0; + conversion = 1; - // read options from end of input line - if (style == REGULAR) options(narg-3,&arg[3]); //COME BACK - else if (style == BALLISTICO) options(narg-3,&arg[3]); //COME BACK - else if (comm->me == 0 && screen) fprintf(screen,"Illegal Dynamical Matrix command\n"); - del = force->numeric(FLERR, arg[2]); + // read options from end of input line + if (style == REGULAR) options(narg-3,&arg[3]); //COME BACK + else if (style == BALLISTICO) options(narg-3,&arg[3]); //COME BACK + else if (comm->me == 0 && screen) fprintf(screen,"Illegal Dynamical Matrix command\n"); + del = force->numeric(FLERR, arg[2]); - if (atom->map_style == 0) - error->all(FLERR,"third_order command requires an atom map, see atom_modify"); + if (atom->map_style == 0) + error->all(FLERR,"third_order command requires an atom map, see atom_modify"); - // move atoms by 3-vector or specified variable(s) + // move atoms by 3-vector or specified variable(s) - if (style == REGULAR) { - setup(); - timer->init(); - timer->barrier_start(); - calculateMatrix(); - timer->barrier_stop(); - } + if (style == REGULAR) { + setup(); + timer->init(); + timer->barrier_start(); + calculateMatrix(); + timer->barrier_stop(); + } - if (style == BALLISTICO) { - setup(); - convert_units(update->unit_style); - conversion = conv_energy/conv_distance/conv_distance; - timer->init(); - timer->barrier_start(); - calculateMatrix(); - timer->barrier_stop(); - } + if (style == BALLISTICO) { + setup(); + convert_units(update->unit_style); + conversion = conv_energy/conv_distance/conv_distance; + timer->init(); + timer->barrier_start(); + calculateMatrix(); + timer->barrier_stop(); + } - Finish finish(lmp); - finish.end(1); + Finish finish(lmp); + finish.end(1); } /* ---------------------------------------------------------------------- @@ -167,33 +167,31 @@ void ThirdOrder::command(int narg, char **arg) void ThirdOrder::options(int narg, char **arg) { - if (narg < 0) error->all(FLERR,"Illegal third_order command"); - int iarg = 0; - const char *filename = "third_order.dat"; - std::stringstream fss; + if (narg < 0) error->all(FLERR,"Illegal third_order command"); + int iarg = 0; + const char *filename = "third_order.dat"; + std::stringstream fss; - while (iarg < narg) { - if (strcmp(arg[iarg],"file") == 0) { - if (iarg+2 > narg) error->all(FLERR, "Illegal third_order command"); - fss << arg[iarg + 1]; - filename = fss.str().c_str(); - file_flag = 1; - iarg += 2; - } - else if (strcmp(arg[iarg],"binary") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal third_order command"); - if (strcmp(arg[iarg+1],"gzip") == 0) { - compressed = 1; - } - else if (strcmp(arg[iarg+1],"yes") == 0) { - binaryflag = 1; - } - iarg += 2; - } else error->all(FLERR,"Illegal third_order command"); - } - if (file_flag == 1 and me == 0) { - openfile(filename); - } + while (iarg < narg) { + if (strcmp(arg[iarg],"file") == 0) { + if (iarg+2 > narg) error->all(FLERR, "Illegal third_order command"); + fss << arg[iarg + 1]; + filename = fss.str().c_str(); + file_flag = 1; + iarg += 2; + } else if (strcmp(arg[iarg],"binary") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal third_order command"); + if (strcmp(arg[iarg+1],"gzip") == 0) { + compressed = 1; + } else if (strcmp(arg[iarg+1],"yes") == 0) { + binaryflag = 1; + } + iarg += 2; + } else error->all(FLERR,"Illegal third_order command"); + } + if (file_flag == 1 and me == 0) { + openfile(filename); + } } /* ---------------------------------------------------------------------- @@ -204,12 +202,12 @@ void ThirdOrder::options(int narg, char **arg) void ThirdOrder::openfile(const char* filename) { - // if file already opened, return - if (file_opened) return; + // if file already opened, return + if (file_opened) return; - if (compressed) { + if (compressed) { #ifdef LAMMPS_GZIP - char gzip[128]; + char gzip[128]; sprintf(gzip,"gzip -6 > %s",filename); #ifdef _WIN32 fp = _popen(gzip,"wb"); @@ -217,17 +215,17 @@ void ThirdOrder::openfile(const char* filename) fp = popen(gzip,"w"); #endif #else - error->one(FLERR,"Cannot open gzipped file"); + error->one(FLERR,"Cannot open gzipped file"); #endif - } else if (binaryflag) { - fp = fopen(filename,"wb"); - } else { - fp = fopen(filename,"w"); - } + } else if (binaryflag) { + fp = fopen(filename,"wb"); + } else { + fp = fopen(filename,"w"); + } - if (fp == NULL) error->one(FLERR,"Cannot open dump file"); + if (fp == NULL) error->one(FLERR,"Cannot open dump file"); - file_opened = 1; + file_opened = 1; } /* ---------------------------------------------------------------------- @@ -236,111 +234,112 @@ void ThirdOrder::openfile(const char* filename) void ThirdOrder::calculateMatrix() { - int local_idx; // local index - int local_jdx; // second local index - int local_kdx; // third local index - int nlocal = atom->nlocal; - bigint natoms = atom->natoms; - bigint *gm = groupmap; - double **f = atom->f; + int local_idx; // local index + int local_jdx; // second local index + int local_kdx; // third local index + int nlocal = atom->nlocal; + bigint natoms = atom->natoms; + bigint *gm = groupmap; + double **f = atom->f; - double *dynmat = new double[3*dynlen]; - double *fdynmat = new double[3*dynlen]; - memset(&dynmat[0],0,dynlen*sizeof(double)); - memset(&fdynmat[0],0,dynlen*sizeof(double)); + double *dynmat = new double[3*dynlen]; + double *fdynmat = new double[3*dynlen]; + memset(&dynmat[0],0,dynlen*sizeof(double)); + memset(&fdynmat[0],0,dynlen*sizeof(double)); + if (comm->me == 0 && screen) { + fprintf(screen,"Calculating Third Order ...\n"); + fprintf(screen," Total # of atoms = " BIGINT_FORMAT "\n", natoms); + fprintf(screen," Atoms in group = " BIGINT_FORMAT "\n", gcount); + fprintf(screen," Total third order elements = " + BIGINT_FORMAT "\n", (dynlen*dynlen*dynlen) ); + } + + update->nsteps = 0; + int prog = 0; + for (bigint i=1; i<=natoms; i++){ + local_idx = atom->map(i); + for (int alpha=0; alpha<3; alpha++){ + for (bigint j=1; j<=natoms; j++){ + local_jdx = atom->map(j); + for (int beta=0; beta<3; beta++){ + displace_atom(local_idx, alpha, 1); + displace_atom(local_jdx, beta, 1); + update_force(); + for (bigint k=1; k<=natoms; k++){ + local_kdx = atom->map(k); + for (int gamma=0; gamma<3; gamma++){ + if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 + && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 + && local_kdx < nlocal) { + dynmat[gm[k-1]*3+gamma] += f[local_kdx][gamma]; + } + } + } + displace_atom(local_jdx, beta, -2); + update_force(); + for (bigint k=1; k<=natoms; k++){ + local_kdx = atom->map(k); + for (int gamma=0; gamma<3; gamma++){ + if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 + && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 + && local_kdx < nlocal) { + dynmat[gm[k-1]*3+gamma] -= f[local_kdx][gamma]; + } + } + } + displace_atom(local_jdx, beta, 1); + displace_atom(local_idx,alpha,-2); + displace_atom(local_jdx, beta, 1); + update_force(); + for (bigint k=1; k<=natoms; k++){ + local_kdx = atom->map(k); + for (int gamma=0; gamma<3; gamma++){ + if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 + && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 + && local_kdx < nlocal) { + dynmat[gm[k-1]*3+gamma] -= f[local_kdx][gamma]; + } + } + } + displace_atom(local_jdx, beta, -2); + update_force(); + for (bigint k=1; k<=natoms; k++){ + local_kdx = atom->map(k); + for (int gamma=0; gamma<3; gamma++){ + if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 + && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 + && local_kdx < nlocal) { + dynmat[gm[k-1]*3+gamma] += f[local_kdx][gamma]; + dynmat[gm[k-1]*3+gamma] /= (4 * del * del); + } + } + } + displace_atom(local_jdx, beta, 1); + displace_atom(local_idx, alpha, 1); + MPI_Reduce(dynmat,fdynmat,3*dynlen,MPI_DOUBLE,MPI_SUM,0,world); + if (me == 0){ + writeMatrix(fdynmat, gm[i-1], alpha, gm[j-1], beta); + } + memset(&dynmat[0],0,dynlen*sizeof(double)); + } + } + } if (comm->me == 0 && screen) { - fprintf(screen,"Calculating Third Order ...\n"); - fprintf(screen," Total # of atoms = " BIGINT_FORMAT "\n", natoms); - fprintf(screen," Atoms in group = " BIGINT_FORMAT "\n", gcount); - fprintf(screen," Total third order elements = " BIGINT_FORMAT "\n", (dynlen*dynlen*dynlen) ); + int p = 10 * gm[i-1] / gcount; + if (p > prog) { + prog = p; + fprintf(screen," %d%%",p*10); + fflush(screen); + } } + } - update->nsteps = 0; - int prog = 0; - for (bigint i=1; i<=natoms; i++){ - local_idx = atom->map(i); - for (int alpha=0; alpha<3; alpha++){ - for (bigint j=1; j<=natoms; j++){ - local_jdx = atom->map(j); - for (int beta=0; beta<3; beta++){ - displace_atom(local_idx, alpha, 1); - displace_atom(local_jdx, beta, 1); - update_force(); - for (bigint k=1; k<=natoms; k++){ - local_kdx = atom->map(k); - for (int gamma=0; gamma<3; gamma++){ - if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 - && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 - && local_kdx < nlocal) { - dynmat[gm[k-1]*3+gamma] += f[local_kdx][gamma]; - } - } - } - displace_atom(local_jdx, beta, -2); - update_force(); - for (bigint k=1; k<=natoms; k++){ - local_kdx = atom->map(k); - for (int gamma=0; gamma<3; gamma++){ - if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 - && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 - && local_kdx < nlocal) { - dynmat[gm[k-1]*3+gamma] -= f[local_kdx][gamma]; - } - } - } - displace_atom(local_jdx, beta, 1); - displace_atom(local_idx,alpha,-2); - displace_atom(local_jdx, beta, 1); - update_force(); - for (bigint k=1; k<=natoms; k++){ - local_kdx = atom->map(k); - for (int gamma=0; gamma<3; gamma++){ - if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 - && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 - && local_kdx < nlocal) { - dynmat[gm[k-1]*3+gamma] -= f[local_kdx][gamma]; - } - } - } - displace_atom(local_jdx, beta, -2); - update_force(); - for (bigint k=1; k<=natoms; k++){ - local_kdx = atom->map(k); - for (int gamma=0; gamma<3; gamma++){ - if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 - && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 - && local_kdx < nlocal) { - dynmat[gm[k-1]*3+gamma] += f[local_kdx][gamma]; - dynmat[gm[k-1]*3+gamma] /= (4 * del * del); - } - } - } - displace_atom(local_jdx, beta, 1); - displace_atom(local_idx, alpha, 1); - MPI_Reduce(dynmat,fdynmat,3*dynlen,MPI_DOUBLE,MPI_SUM,0,world); - if (me == 0){ - writeMatrix(fdynmat, gm[i-1], alpha, gm[j-1], beta); - } - memset(&dynmat[0],0,dynlen*sizeof(double)); - } - } - } - if (comm->me == 0 && screen) { - int p = 10 * gm[i-1] / gcount; - if (p > prog) { - prog = p; - fprintf(screen," %d%%",p*10); - fflush(screen); - } - } - } - - delete [] dynmat; - delete [] fdynmat; - - if (screen && me ==0 ) fprintf(screen,"Finished Calculating Third Order Tensor\n"); + delete [] dynmat; + delete [] fdynmat; + if (screen && me ==0 ) + fprintf(screen,"Finished Calculating Third Order Tensor\n"); } /* ---------------------------------------------------------------------- @@ -349,30 +348,30 @@ void ThirdOrder::calculateMatrix() void ThirdOrder::writeMatrix(double *dynmat, bigint i, int a, bigint j, int b) { - if (me != 0) - return; + if (me != 0) + return; - double norm; - if (!binaryflag && fp) { - clearerr(fp); - for (int k = 0; k < gcount; k++){ - norm = pow(dynmat[k*3], 2)+ - pow(dynmat[k*3+1], 2)+ - pow(dynmat[k*3+2], 2); - if (norm > 1.0e-16) - fprintf(fp, - "%llu %d %llu %d %llu %7.8f %7.8f %7.8f\n", - i+1, a + 1, j+1, b + 1, groupmap[k]+1, - dynmat[k*3] * conversion, - dynmat[k*3+1] * conversion, - dynmat[k*3+2] * conversion); - } + double norm; + if (!binaryflag && fp) { + clearerr(fp); + for (int k = 0; k < gcount; k++){ + norm = square(dynmat[k*3])+ + square(dynmat[k*3+1])+ + square(dynmat[k*3+2]); + if (norm > 1.0e-16) + fprintf(fp, + BIGINT_FORMAT " %d " BIGINT_FORMAT " %d " BIGINT_FORMAT + " %7.8f %7.8f %7.8f\n", + i+1, a + 1, j+1, b + 1, groupmap[k]+1, + dynmat[k*3] * conversion, + dynmat[k*3+1] * conversion, + dynmat[k*3+2] * conversion); } - else if (binaryflag && fp){ - clearerr(fp); - fwrite(&dynmat[0], sizeof(double), dynlen, fp); - } - if (ferror(fp)) error->one(FLERR,"Error writing to file"); + } else if (binaryflag && fp){ + clearerr(fp); + fwrite(&dynmat[0], sizeof(double), dynlen, fp); + } + if (ferror(fp)) error->one(FLERR,"Error writing to file"); } @@ -382,18 +381,18 @@ void ThirdOrder::writeMatrix(double *dynmat, bigint i, int a, bigint j, int b) void ThirdOrder::displace_atom(int local_idx, int direction, int magnitude) { - if (local_idx < 0) return; + if (local_idx < 0) return; - double **x = atom->x; - int *sametag = atom->sametag; - int j = local_idx; + double **x = atom->x; + int *sametag = atom->sametag; + int j = local_idx; - x[local_idx][direction] += del*magnitude; + x[local_idx][direction] += del*magnitude; - while (sametag[j] >= 0){ - j = sametag[j]; - x[j][direction] += del*magnitude; - } + while (sametag[j] >= 0){ + j = sametag[j]; + x[j][direction] += del*magnitude; + } } /* ---------------------------------------------------------------------- @@ -406,28 +405,28 @@ void ThirdOrder::displace_atom(int local_idx, int direction, int magnitude) void ThirdOrder::update_force() { - force_clear(); + force_clear(); - if (pair_compute_flag) { - force->pair->compute(eflag,vflag); - timer->stamp(Timer::PAIR); - } - if (atom->molecular) { - if (force->bond) force->bond->compute(eflag,vflag); - if (force->angle) force->angle->compute(eflag,vflag); - if (force->dihedral) force->dihedral->compute(eflag,vflag); - if (force->improper) force->improper->compute(eflag,vflag); - timer->stamp(Timer::BOND); - } - if (kspace_compute_flag) { - force->kspace->compute(eflag,vflag); - timer->stamp(Timer::KSPACE); - } - if (force->newton) { - comm->reverse_comm(); - timer->stamp(Timer::COMM); - } - ++ update->nsteps; + if (pair_compute_flag) { + force->pair->compute(eflag,vflag); + timer->stamp(Timer::PAIR); + } + if (atom->molecular) { + if (force->bond) force->bond->compute(eflag,vflag); + if (force->angle) force->angle->compute(eflag,vflag); + if (force->dihedral) force->dihedral->compute(eflag,vflag); + if (force->improper) force->improper->compute(eflag,vflag); + timer->stamp(Timer::BOND); + } + if (kspace_compute_flag) { + force->kspace->compute(eflag,vflag); + timer->stamp(Timer::KSPACE); + } + if (force->newton) { + comm->reverse_comm(); + timer->stamp(Timer::COMM); + } + ++ update->nsteps; } /* ---------------------------------------------------------------------- @@ -437,71 +436,71 @@ void ThirdOrder::update_force() void ThirdOrder::force_clear() { - if (external_force_clear) return; + if (external_force_clear) return; - // clear global force array - // if either newton flag is set, also include ghosts + // clear global force array + // if either newton flag is set, also include ghosts - size_t nbytes = sizeof(double) * atom->nlocal; - if (force->newton) nbytes += sizeof(double) * atom->nghost; + size_t nbytes = sizeof(double) * atom->nlocal; + if (force->newton) nbytes += sizeof(double) * atom->nghost; - if (nbytes) { - memset(&atom->f[0][0],0,3*nbytes); - } + if (nbytes) { + memset(&atom->f[0][0],0,3*nbytes); + } } /* ---------------------------------------------------------------------- */ void ThirdOrder::convert_units(const char *style) { - // physical constants from: - // http://physics.nist.gov/cuu/Constants/Table/allascii.txt - // using thermochemical calorie = 4.184 J + // physical constants from: + // http://physics.nist.gov/cuu/Constants/Table/allascii.txt + // using thermochemical calorie = 4.184 J - if (strcmp(style,"lj") == 0) { - error->all(FLERR,"Conversion Not Set"); - //conversion = 1; // lj -> 10 J/mol + if (strcmp(style,"lj") == 0) { + error->all(FLERR,"Conversion Not Set"); + //conversion = 1; // lj -> 10 J/mol - } else if (strcmp(style,"real") == 0) { - conv_energy = 418.4; // kcal/mol -> 10 J/mol - conv_mass = 1; // g/mol -> g/mol - conv_distance = 1; // angstrom -> angstrom + } else if (strcmp(style,"real") == 0) { + conv_energy = 418.4; // kcal/mol -> 10 J/mol + conv_mass = 1; // g/mol -> g/mol + conv_distance = 1; // angstrom -> angstrom - } else if (strcmp(style,"metal") == 0) { - conv_energy = 9648.5; // eV -> 10 J/mol - conv_mass = 1; // g/mol -> g/mol - conv_distance = 1; // angstrom -> angstrom + } else if (strcmp(style,"metal") == 0) { + conv_energy = 9648.5; // eV -> 10 J/mol + conv_mass = 1; // g/mol -> g/mol + conv_distance = 1; // angstrom -> angstrom - } else if (strcmp(style,"si") == 0) { - if (comm->me) error->warning(FLERR,"Conversion Warning: Multiplication by Large Float"); - conv_energy = 6.022E22; // J -> 10 J/mol - conv_mass = 6.022E26; // kg -> g/mol - conv_distance = 1E-10; // meter -> angstrom + } else if (strcmp(style,"si") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Multiplication by Large Float"); + conv_energy = 6.022E22; // J -> 10 J/mol + conv_mass = 6.022E26; // kg -> g/mol + conv_distance = 1E-10; // meter -> angstrom - } else if (strcmp(style,"cgs") == 0) { - if (comm->me) error->warning(FLERR,"Conversion Warning: Multiplication by Large Float"); - conv_energy = 6.022E12; // Erg -> 10 J/mol - conv_mass = 6.022E23; // g -> g/mol - conv_distance = 1E-7; // centimeter -> angstrom + } else if (strcmp(style,"cgs") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Multiplication by Large Float"); + conv_energy = 6.022E12; // Erg -> 10 J/mol + conv_mass = 6.022E23; // g -> g/mol + conv_distance = 1E-7; // centimeter -> angstrom - } else if (strcmp(style,"electron") == 0) { - conv_energy = 262550; // Hartree -> 10 J/mol - conv_mass = 1; // amu -> g/mol - conv_distance = 0.529177249; // bohr -> angstrom + } else if (strcmp(style,"electron") == 0) { + conv_energy = 262550; // Hartree -> 10 J/mol + conv_mass = 1; // amu -> g/mol + conv_distance = 0.529177249; // bohr -> angstrom - } else if (strcmp(style,"micro") == 0) { - if (comm->me) error->warning(FLERR,"Conversion Warning: Untested Conversion"); - conv_energy = 6.022E10; // picogram-micrometer^2/microsecond^2 -> 10 J/mol - conv_mass = 6.022E11; // pg -> g/mol - conv_distance = 1E-4; // micrometer -> angstrom + } else if (strcmp(style,"micro") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Untested Conversion"); + conv_energy = 6.022E10; // picogram-micrometer^2/microsecond^2 -> 10 J/mol + conv_mass = 6.022E11; // pg -> g/mol + conv_distance = 1E-4; // micrometer -> angstrom - } else if (strcmp(style,"nano") == 0) { - if (comm->me) error->warning(FLERR,"Conversion Warning: Untested Conversion"); - conv_energy = 6.022E4; // attogram-nanometer^2/nanosecond^2 -> 10 J/mol - conv_mass = 6.022E5; // ag -> g/mol - conv_distance = 0.1; // angstrom -> angstrom + } else if (strcmp(style,"nano") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Untested Conversion"); + conv_energy = 6.022E4; // attogram-nanometer^2/nanosecond^2 -> 10 J/mol + conv_mass = 6.022E5; // ag -> g/mol + conv_distance = 0.1; // angstrom -> angstrom - } else error->all(FLERR,"Units Type Conversion Not Found"); + } else error->all(FLERR,"Units Type Conversion Not Found"); } @@ -509,66 +508,68 @@ void ThirdOrder::convert_units(const char *style) void ThirdOrder::create_groupmap() { - //Create a group map which maps atom order onto group - // groupmap[global atom index-1] = output column/row + //Create a group map which maps atom order onto group + // groupmap[global atom index-1] = output column/row - int local_idx; // local index - int gid = 0; //group index - int nlocal = atom->nlocal; - int *mask = atom->mask; - bigint natoms = atom->natoms; - int *recv = new int[comm->nprocs]; - int *displs = new int[comm->nprocs]; - bigint *temp_groupmap = new bigint[natoms]; + int local_idx; // local index + int gid = 0; //group index + int nlocal = atom->nlocal; + int *mask = atom->mask; + bigint natoms = atom->natoms; + int *recv = new int[comm->nprocs]; + int *displs = new int[comm->nprocs]; + bigint *temp_groupmap = new bigint[natoms]; - //find number of local atoms in the group (final_gid) - for (bigint i=1; i<=natoms; i++){ - local_idx = atom->map(i); - if ((local_idx >= 0) && (local_idx < nlocal) && mask[local_idx] & groupbit) - gid += 1; // gid at the end of loop is final_Gid + //find number of local atoms in the group (final_gid) + for (bigint i=1; i<=natoms; i++){ + local_idx = atom->map(i); + if ((local_idx >= 0) && (local_idx < nlocal) && mask[local_idx] & groupbit) + gid += 1; // gid at the end of loop is final_Gid + } + //create an array of length final_gid + bigint *sub_groupmap = new bigint[gid]; + + gid = 0; + //create a map between global atom id and group atom id for each proc + for (bigint i=1; i<=natoms; i++){ + local_idx = atom->map(i); + if ((local_idx >= 0) && (local_idx < nlocal) + && (mask[local_idx] & groupbit)){ + sub_groupmap[gid] = i; + gid += 1; } - //create an array of length final_gid - bigint *sub_groupmap = new bigint[gid]; + } - gid = 0; - //create a map between global atom id and group atom id for each proc - for (bigint i=1; i<=natoms; i++){ - local_idx = atom->map(i); - if ((local_idx >= 0) && (local_idx < nlocal) && mask[local_idx] & groupbit){ - sub_groupmap[gid] = i; - gid += 1; - } - } + //populate arrays for Allgatherv + for (int i=0; inprocs; i++){ + recv[i] = 0; + } + recv[comm->me] = gid; + MPI_Allreduce(recv,displs,comm->nprocs,MPI_INT,MPI_SUM,world); + for (int i=0; inprocs; i++){ + recv[i]=displs[i]; + if (i>0) displs[i] = displs[i-1]+recv[i-1]; + else displs[i] = 0; + } - //populate arrays for Allgatherv - for (int i=0; inprocs; i++){ - recv[i] = 0; - } - recv[comm->me] = gid; - MPI_Allreduce(recv,displs,comm->nprocs,MPI_INT,MPI_SUM,world); - for (int i=0; inprocs; i++){ - recv[i]=displs[i]; - if (i>0) displs[i] = displs[i-1]+recv[i-1]; - else displs[i] = 0; - } + //combine subgroup maps into total temporary groupmap + MPI_Allgatherv(sub_groupmap,gid,MPI_LMP_BIGINT, + temp_groupmap,recv,displs,MPI_LMP_BIGINT,world); + std::sort(temp_groupmap,temp_groupmap+gcount); - //combine subgroup maps into total temporary groupmap - MPI_Allgatherv(sub_groupmap,gid,MPI_LMP_BIGINT,temp_groupmap,recv,displs,MPI_LMP_BIGINT,world); - std::sort(temp_groupmap,temp_groupmap+gcount); + //populate member groupmap based on temp groupmap + bigint j = 0; + for (bigint i=1; i<=natoms; i++){ + // flag groupmap contents that are in temp_groupmap + if (j < gcount && i == temp_groupmap[j]) + groupmap[i-1] = j++; + else + groupmap[i-1] = -1; + } - //populate member groupmap based on temp groupmap - bigint j = 0; - for (bigint i=1; i<=natoms; i++){ - // flag groupmap contents that are in temp_groupmap - if (j < gcount && i == temp_groupmap[j]) - groupmap[i-1] = j++; - else - groupmap[i-1] = -1; - } - - //free that memory! - delete[] recv; - delete[] displs; - delete[] sub_groupmap; - delete[] temp_groupmap; + //free that memory! + delete[] recv; + delete[] displs; + delete[] sub_groupmap; + delete[] temp_groupmap; } diff --git a/src/USER-PHONON/third_order.h b/src/USER-PHONON/third_order.h index 0123d62fa9..83062b6b1f 100644 --- a/src/USER-PHONON/third_order.h +++ b/src/USER-PHONON/third_order.h @@ -16,58 +16,58 @@ CommandStyle(third_order,ThirdOrder) namespace LAMMPS_NS { - class ThirdOrder : protected Pointers { - public: - ThirdOrder(class LAMMPS *); - virtual ~ThirdOrder(); - void command(int, char **); - void setup(); + class ThirdOrder : protected Pointers { + public: + ThirdOrder(class LAMMPS *); + virtual ~ThirdOrder(); + void command(int, char **); + void setup(); - protected: - int eflag,vflag; // flags for energy/virial computation - int external_force_clear; // clear forces locally or externally + protected: + int eflag,vflag; // flags for energy/virial computation + int external_force_clear; // clear forces locally or externally - int triclinic; // 0 if domain is orthog, 1 if triclinic - int pairflag; + int triclinic; // 0 if domain is orthog, 1 if triclinic + int pairflag; - int pair_compute_flag; // 0 if pair->compute is skipped - int kspace_compute_flag; // 0 if kspace->compute is skipped + int pair_compute_flag; // 0 if pair->compute is skipped + int kspace_compute_flag; // 0 if kspace->compute is skipped - int nvec; // local atomic dof = length of xvec + int nvec; // local atomic dof = length of xvec - void update_force(); - void force_clear(); - virtual void openfile(const char* filename); + void update_force(); + void force_clear(); + virtual void openfile(const char* filename); - private: - void options(int, char **); - void create_groupmap(); - void calculateMatrix(); - void convert_units(const char *style); - void displace_atom(int local_idx, int direction, int magnitude); - void writeMatrix(double *, bigint, int, bigint, int); + private: + void options(int, char **); + void create_groupmap(); + void calculateMatrix(); + void convert_units(const char *style); + void displace_atom(int local_idx, int direction, int magnitude); + void writeMatrix(double *, bigint, int, bigint, int); - double conversion; - double conv_energy; - double conv_distance; - double conv_mass; - double del; - int igroup,groupbit; - bigint dynlen; - int scaleflag; - int me; - bigint gcount; // number of atoms in group - bigint *groupmap; + double conversion; + double conv_energy; + double conv_distance; + double conv_mass; + double del; + int igroup,groupbit; + bigint dynlen; + int scaleflag; + int me; + bigint gcount; // number of atoms in group + bigint *groupmap; - int compressed; // 1 if dump file is written compressed, 0 no - int binaryflag; // 1 if dump file is written binary, 0 no - int file_opened; // 1 if openfile method has been called, 0 no - int file_flag; // 1 custom file name, 0 dynmat.dat + int compressed; // 1 if dump file is written compressed, 0 no + int binaryflag; // 1 if dump file is written binary, 0 no + int file_opened; // 1 if openfile method has been called, 0 no + int file_flag; // 1 custom file name, 0 dynmat.dat - FILE *fp; - }; + FILE *fp; + }; } From 56e1a05287c34188eca387dfee62b935434096fd Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 23 Sep 2019 11:12:31 -0600 Subject: [PATCH 160/237] Commit JT 092319 - modified norm input in min_modify - corrected doc/src/min_modify.txt - added expression of the norms - added a min max method in src/min.h --- doc/src/Eqs/norm_max.jpg | Bin 0 -> 9471 bytes doc/src/Eqs/norm_max.tex | 15 ++++++++++ doc/src/Eqs/norm_two.jpg | Bin 0 -> 6048 bytes doc/src/Eqs/norm_two.tex | 15 ++++++++++ doc/src/min_modify.txt | 18 ++++++++---- src/MAKE/Makefile.serial | 2 +- src/min.cpp | 59 +++++++++++++++++++++++++++++++-------- src/min.h | 4 ++- src/min_cg.cpp | 12 ++++---- src/min_fire.cpp | 11 ++------ src/min_hftn.cpp | 2 +- src/min_quickmin.cpp | 11 ++------ src/min_sd.cpp | 6 ++-- 13 files changed, 109 insertions(+), 46 deletions(-) create mode 100644 doc/src/Eqs/norm_max.jpg create mode 100644 doc/src/Eqs/norm_max.tex create mode 100644 doc/src/Eqs/norm_two.jpg create mode 100644 doc/src/Eqs/norm_two.tex diff --git a/doc/src/Eqs/norm_max.jpg b/doc/src/Eqs/norm_max.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c10db9a53144cb3e889eb3c4315352d2ef0c85e8 GIT binary patch literal 9471 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 literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/norm_max.tex b/doc/src/Eqs/norm_max.tex new file mode 100644 index 0000000000..3b2198bdf0 --- /dev/null +++ b/doc/src/Eqs/norm_max.tex @@ -0,0 +1,15 @@ +\documentclass[preview]{standalone} +\usepackage{varwidth} +\usepackage[utf8x]{inputenc} +\usepackage{amsmath, amssymb, graphics, setspace} + +\begin{document} +\begin{varwidth}{50in} + \begin{equation} + % \left| \left| \vec{F} \right| \right|_2 + || \vec{F} ||_{max} + = {\rm max}\left(||\vec{F}_1||, \cdots, ||\vec{F}_N||\right) + \nonumber + \end{equation} +\end{varwidth} +\end{document} diff --git a/doc/src/Eqs/norm_two.jpg b/doc/src/Eqs/norm_two.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5554de32f96a3a16f855b7e5011aa999d3c2819c GIT binary patch literal 6048 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 Wbg?+l1j#1hE)v|+w|Del^uGZ4YjxcK literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/norm_two.tex b/doc/src/Eqs/norm_two.tex new file mode 100644 index 0000000000..d428081a49 --- /dev/null +++ b/doc/src/Eqs/norm_two.tex @@ -0,0 +1,15 @@ +\documentclass[preview]{standalone} +\usepackage{varwidth} +\usepackage[utf8x]{inputenc} +\usepackage{amsmath, amssymb, graphics, setspace} + +\begin{document} +\begin{varwidth}{50in} + \begin{equation} + % \left| \left| \vec{F} \right| \right|_2 + || \vec{F} ||_{2} + = \sqrt{\vec{F}_1+ \cdots + \vec{F}_N} + \nonumber + \end{equation} +\end{varwidth} +\end{document} diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index 06c1f7514f..b941a33559 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -18,8 +18,9 @@ keyword = {dmax} or {line} or {norm} or {alpha_damp} or {discrete_factor} max = maximum distance for line search to move (distance units) {line} value = {backtrack} or {quadratic} or {forcezero} or {spin_cubic} or {spin_none} backtrack,quadratic,forcezero,spin_cubic,spin_none = style of linesearch to use - {norm} value = {euclidean} or {max} - euclidean,max = style of norm to use + {norm} value = {two} or {max} + two = Euclidean two-norm (length of 3N vector) + max = max value of across all 3-vectors {alpha_damp} value = damping damping = fictitious Gilbert damping for spin minimization (adim) {discrete_factor} value = factor @@ -74,9 +75,16 @@ could move in the gradient direction to reduce forces further. The choice of a norm can be modified for the min styles {cg}, {sd}, {quickmin}, {fire}, {spin}, {spin/cg} and {spin/lbfgs} using the {norm} keyword. -The default {euclidean} norm computes the 2-norm (length) of the -global force vector. The {max} norm computes the maximum value -of the 2-norms across all forces in the system. +The default {two} norm computes the 2-norm (Euclidean length) of the +global force vector: + +:c,image(Eqs/norm_two.jpg) + +The {max} norm computes the length of the 3-vector force +for each atom (2-norm), and takes the maximum value of those accross +all atoms + +:c,image(Eqs/norm_max.jpg) Keywords {alpha_damp} and {discrete_factor} only make sense when a "min_spin"_min_spin.html command is declared. diff --git a/src/MAKE/Makefile.serial b/src/MAKE/Makefile.serial index 8628d2bb73..5954d97761 100644 --- a/src/MAKE/Makefile.serial +++ b/src/MAKE/Makefile.serial @@ -7,7 +7,7 @@ SHELL = /bin/sh # specify flags and libraries needed for your compiler CC = g++ -CCFLAGS = -g -O3 -Wall +CCFLAGS = -g -O3 SHFLAGS = -fPIC DEPFLAGS = -M diff --git a/src/min.cpp b/src/min.cpp index 31adf58525..33643d4837 100644 --- a/src/min.cpp +++ b/src/min.cpp @@ -49,6 +49,8 @@ using namespace LAMMPS_NS; using namespace MathConst; +enum{TWO,MAX} + /* ---------------------------------------------------------------------- */ Min::Min(LAMMPS *lmp) : Pointers(lmp) @@ -56,7 +58,7 @@ Min::Min(LAMMPS *lmp) : Pointers(lmp) dmax = 0.1; searchflag = 0; linestyle = 1; - normstyle = 0; + normstyle = TWO; elist_global = elist_atom = NULL; vlist_global = vlist_atom = NULL; @@ -662,8 +664,8 @@ void Min::modify_params(int narg, char **arg) iarg += 2; } else if (strcmp(arg[iarg],"norm") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal min_modify command"); - if (strcmp(arg[iarg+1],"euclidean") == 0) normstyle = 0; - else if (strcmp(arg[iarg+1],"max") == 0) normstyle = 1; + if (strcmp(arg[iarg+1],"two") == 0) normstyle = TWO; + else if (strcmp(arg[iarg+1],"max") == 0) normstyle = MAX; else error->all(FLERR,"Illegal min_modify command"); iarg += 2; } else { @@ -827,6 +829,41 @@ double Min::fnorm_inf() return norm_inf; } +/* ---------------------------------------------------------------------- + compute and return ||force||_max (inf norm per-vector) +------------------------------------------------------------------------- */ + +double Min::fnorm_max() +{ + int i,n; + double fdotf,*fatom; + + double local_norm_max = 0.0; + for (i = 0; i < nvec; i+=3) { + fdotf = fvec[i]*fvec[i]+fvec[i+1]*fvec[i+1]+fvec[i+2]*fvec[i+2]; + local_norm_max = MAX(fdotf,local_norm_max); + } + if (nextra_atom) { + for (int m = 0; m < nextra_atom; m++) { + fatom = fextra_atom[m]; + n = extra_nlen[m]; + for (i = 0; i < n; i+=3) + fdotf = fvec[i]*fvec[i]+fvec[i+1]*fvec[i+1]+fvec[i+2]*fvec[i+2]; + local_norm_max = MAX(fdotf,local_norm_max); + } + } + + double norm_max = 0.0; + MPI_Allreduce(&local_norm_max,&norm_max,1,MPI_DOUBLE,MPI_MAX,world); + + if (nextra_global) + for (i = 0; i < n; i+=3) + fdotf = fvec[i]*fvec[i]+fvec[i+1]*fvec[i+1]+fvec[i+2]*fvec[i+2]; + norm_max = MAX(fdotf,norm_max); + + return norm_max; +} + /* ---------------------------------------------------------------------- compute and return sum_i||mag. torque_i||_2 (in eV) ------------------------------------------------------------------------- */ @@ -842,10 +879,10 @@ double Min::total_torque() fmsq = ftotsqone = ftotsqall = 0.0; for (int i = 0; i < nlocal; i++) { - tx = fm[i][1] * sp[i][2] - fm[i][2] * sp[i][1]; - ty = fm[i][2] * sp[i][0] - fm[i][0] * sp[i][2]; - tz = fm[i][0] * sp[i][1] - fm[i][1] * sp[i][0]; - fmsq = tx * tx + ty * ty + tz * tz; + tx = fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]; + ty = fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]; + tz = fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]; + fmsq = tx*tx + ty*ty + tz*tz; ftotsqone += fmsq; } @@ -873,10 +910,10 @@ double Min::max_torque() fmsq = fmaxsqone = fmaxsqall = 0.0; for (int i = 0; i < nlocal; i++) { - tx = fm[i][1] * sp[i][2] - fm[i][2] * sp[i][1]; - ty = fm[i][2] * sp[i][0] - fm[i][0] * sp[i][2]; - tz = fm[i][0] * sp[i][1] - fm[i][1] * sp[i][0]; - fmsq = tx * tx + ty * ty + tz * tz; + tx = fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]; + ty = fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]; + tz = fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]; + fmsq = tx*tx + ty*ty + tz*tz; fmaxsqone = MAX(fmaxsqone,fmsq); } diff --git a/src/min.h b/src/min.h index e18d0dd677..ac7a3c1e9b 100644 --- a/src/min.h +++ b/src/min.h @@ -41,6 +41,7 @@ class Min : protected Pointers { virtual int modify_param(int, char **) {return 0;} double fnorm_sqr(); double fnorm_inf(); + double fnorm_max(); // methods for spin minimizers double max_torque(); @@ -64,7 +65,8 @@ class Min : protected Pointers { int linestyle; // 0 = backtrack, 1 = quadratic, 2 = forcezero // 3 = spin_cubic, 4 = spin_none - int normstyle; // 0 = Euclidean norm, 1 = inf. norm + int normstyle; // TWO or MAX flag for force norm evaluation + // int normstyle; // 0 = Euclidean norm, 1 = inf. norm int nelist_global,nelist_atom; // # of PE,virial computes to check int nvlist_global,nvlist_atom; diff --git a/src/min_cg.cpp b/src/min_cg.cpp index 2267a1ebb6..d98ec0ef97 100644 --- a/src/min_cg.cpp +++ b/src/min_cg.cpp @@ -35,7 +35,7 @@ MinCG::MinCG(LAMMPS *lmp) : MinLineSearch(lmp) {} int MinCG::iterate(int maxiter) { int i,m,n,fail,ntimestep; - double beta,gg,dot[2],dotall[2],fmax,fmaxall; + double beta,gg,dot[2],dotall[2],fmax; double *fatom,*gatom,*hatom; // nlimit = max # of CG iterations before restarting @@ -85,13 +85,12 @@ int MinCG::iterate(int maxiter) // force tolerance criterion - fmax = fmaxall = 0.0; dot[0] = dot[1] = 0.0; for (i = 0; i < nvec; i++) { dot[0] += fvec[i]*fvec[i]; dot[1] += fvec[i]*g[i]; - fmax = MAX(fmax,fvec[i]*fvec[i]); } + if (nextra_atom) for (m = 0; m < nextra_atom; m++) { fatom = fextra_atom[m]; @@ -104,16 +103,17 @@ int MinCG::iterate(int maxiter) } } MPI_Allreduce(dot,dotall,2,MPI_DOUBLE,MPI_SUM,world); - MPI_Allreduce(&fmax,&fmaxall,2,MPI_DOUBLE,MPI_MAX,world); if (nextra_global) for (i = 0; i < nextra_global; i++) { dotall[0] += fextra[i]*fextra[i]; dotall[1] += fextra[i]*gextra[i]; } - if (normstyle == 1) { // max force norm + fmax = 0.0; + if (normstyle == MAX) { // max force norm + fmax = fnorm_max(); if (fmax < update->ftol*update->ftol) return FTOL; - } else { // Euclidean force norm + } else { // Euclidean force 2-norm if (dotall[0] < update->ftol*update->ftol) return FTOL; } diff --git a/src/min_fire.cpp b/src/min_fire.cpp index 5b047ccd0e..dbb7f36148 100644 --- a/src/min_fire.cpp +++ b/src/min_fire.cpp @@ -250,15 +250,8 @@ int MinFire::iterate(int maxiter) // sync across replicas if running multi-replica minimization if (update->ftol > 0.0) { - if (normstyle == 1) { // max force norm - fdotf = fnorm_inf(); - fdotfloc = fdotf; - MPI_Allreduce(&fdotfloc,&fdotf,1,MPI_INT,MPI_MAX,universe->uworld); - } else { // Euclidean force norm - fdotf = fnorm_sqr(); - fdotfloc = fdotf; - MPI_Allreduce(&fdotfloc,&fdotf,1,MPI_INT,MPI_SUM,universe->uworld); - } + if (normstyle == MAX) fdotf = fnorm_inf(); // max force norm + else fdotf = fnorm_sqr(); // Euclidean force 2-norm if (update->multireplica == 0) { if (fdotf < update->ftol*update->ftol) return FTOL; } else { diff --git a/src/min_hftn.cpp b/src/min_hftn.cpp index 3c2cff9205..63432aab63 100644 --- a/src/min_hftn.cpp +++ b/src/min_hftn.cpp @@ -113,7 +113,7 @@ void MinHFTN::init() { Min::init(); - if (normstyle == 1) + if (normstyle == MAX) error->all(FLERR,"Incorrect min_modify option"); for (int i = 1; i < NUM_HFTN_ATOM_BASED_VECTORS; i++) { diff --git a/src/min_quickmin.cpp b/src/min_quickmin.cpp index 3450f7785e..6846aaba0a 100644 --- a/src/min_quickmin.cpp +++ b/src/min_quickmin.cpp @@ -215,15 +215,8 @@ int MinQuickMin::iterate(int maxiter) // sync across replicas if running multi-replica minimization if (update->ftol > 0.0) { - if (normstyle == 1) { // max force norm - fdotf = fnorm_inf(); - fdotfloc = fdotf; - MPI_Allreduce(&fdotfloc,&fdotf,1,MPI_INT,MPI_MAX,universe->uworld); - } else { // Euclidean force norm - fdotf = fnorm_sqr(); - fdotfloc = fdotf; - MPI_Allreduce(&fdotfloc,&fdotf,1,MPI_INT,MPI_SUM,universe->uworld); - } + if (normstyle == MAX) fdotfloc = fnorm_max(); // max force norm + else fdotf = fnorm_sqr(); // Euclidean force 2-norm if (update->multireplica == 0) { if (fdotf < update->ftol*update->ftol) return FTOL; } else { diff --git a/src/min_sd.cpp b/src/min_sd.cpp index dd59c9d2d6..3ded85990d 100644 --- a/src/min_sd.cpp +++ b/src/min_sd.cpp @@ -34,7 +34,7 @@ MinSD::MinSD(LAMMPS *lmp) : MinLineSearch(lmp) {} int MinSD::iterate(int maxiter) { int i,m,n,fail,ntimestep; - double fdotf; + double fdotf,fdotfloc; double *fatom,*hatom; // initialize working vectors @@ -77,8 +77,8 @@ int MinSD::iterate(int maxiter) // force tolerance criterion - if (normstyle == 1) fdotf = fnorm_inf(); // max force norm - else fdotf = fnorm_sqr(); // Euclidean force norm + if (normstyle == MAX) fdotf = fnorm_max(); // max force norm + else fdotf = fnorm_sqr(); // Euclidean force 2-norm if (fdotf < update->ftol*update->ftol) return FTOL; // set new search direction h to f = -Grad(x) From d0d2797b41f1810cddbd809d508d8286e8ae6f71 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Mon, 23 Sep 2019 11:46:16 -0700 Subject: [PATCH 161/237] Fixed conflicts --- src/fix_langevin.cpp | 1 + src/fix_langevin.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index cd77883c76..dc1b04c3d7 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -97,6 +97,7 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : ascale = 0.0; gjfflag = 0; fsflag = 0; + nvalues = 0; oflag = 0; tallyflag = 0; zeroflag = 0; diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 349a9d2dd9..b20c64f903 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -47,7 +47,7 @@ class FixLangevin : public Fix { int unpack_exchange(int, double *); protected: - int gjfflag,fsflag,oflag,tallyflag,zeroflag,tbiasflag; + int gjfflag,fsflag,nvalues,oflag,tallyflag,zeroflag,tbiasflag; int flangevin_allocated; double ascale; double t_start,t_stop,t_period,t_target; From a44f2cc3bbfd3ca9b6cbda34e5b3f0862c9dff15 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Mon, 23 Sep 2019 11:48:54 -0700 Subject: [PATCH 162/237] changed flag name in fix_langevin --- src/fix_langevin.cpp | 2 +- src/fix_langevin.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index dc1b04c3d7..dc2a237fa6 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -96,7 +96,7 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : for (int i = 1; i <= atom->ntypes; i++) ratio[i] = 1.0; ascale = 0.0; gjfflag = 0; - fsflag = 0; + osflag = 0; nvalues = 0; oflag = 0; tallyflag = 0; diff --git a/src/fix_langevin.h b/src/fix_langevin.h index b20c64f903..f3b396742d 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -47,7 +47,7 @@ class FixLangevin : public Fix { int unpack_exchange(int, double *); protected: - int gjfflag,fsflag,nvalues,oflag,tallyflag,zeroflag,tbiasflag; + int gjfflag,osflag,nvalues,oflag,tallyflag,zeroflag,tbiasflag; int flangevin_allocated; double ascale; double t_start,t_stop,t_period,t_target; From 9635d228c216e1d1b1a884adf1b8d42a40f396d2 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Mon, 23 Sep 2019 11:53:03 -0700 Subject: [PATCH 163/237] switched fsflag for nvalues to reuse old name --- src/fix_langevin.cpp | 15 +++++++-------- src/fix_langevin.h | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index dc2a237fa6..20c17982b9 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -96,8 +96,7 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : for (int i = 1; i <= atom->ntypes; i++) ratio[i] = 1.0; ascale = 0.0; gjfflag = 0; - osflag = 0; - nvalues = 0; + nvalues = 0; // flag for onsite velocity oflag = 0; tallyflag = 0; zeroflag = 0; @@ -111,11 +110,11 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg],"gjf") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command"); - if (strcmp(arg[iarg+1],"no") == 0) {gjfflag = 0; fsflag = 0;} + if (strcmp(arg[iarg+1],"no") == 0) {gjfflag = 0; nvalues = 0;} else if (strcmp(arg[iarg+1],"yes") == 0) error->all(FLERR,"Fix langevin gjf yes is outdated, please use vhalf or vfull"); - else if (strcmp(arg[iarg+1],"vhalf") == 0) {gjfflag = 1; fsflag = 0;} - else if (strcmp(arg[iarg+1],"vfull") == 0) {gjfflag = 1; fsflag = 1;} + else if (strcmp(arg[iarg+1],"vhalf") == 0) {gjfflag = 1; nvalues = 0;} + else if (strcmp(arg[iarg+1],"vfull") == 0) {gjfflag = 1; nvalues = 1;} else error->all(FLERR,"Illegal fix langevin command"); iarg += 2; } else if (strcmp(arg[iarg],"omega") == 0) { @@ -438,7 +437,7 @@ void FixLangevin::post_force(int /*vflag*/) if (tstyle == ATOM) if (gjfflag) - if (tallyflag || fsflag) + if (tallyflag || nvalues) if (tbiasflag == BIAS) if (rmass) if (zeroflag) post_force_templated<1,1,1,1,1,1>(); @@ -960,7 +959,7 @@ void FixLangevin::end_of_step() tmp[0] = v[i][0]; tmp[1] = v[i][1]; tmp[2] = v[i][2]; - if (!fsflag){ + if (!nvalues){ v[i][0] = lv[i][0]; v[i][1] = lv[i][1]; v[i][2] = lv[i][2]; @@ -1102,7 +1101,7 @@ double FixLangevin::memory_usage() { double bytes = 0.0; if (gjfflag) bytes += atom->nmax*6 * sizeof(double); - if (tallyflag || fsflag) bytes += atom->nmax*3 * sizeof(double); + if (tallyflag || nvalues) bytes += atom->nmax*3 * sizeof(double); if (tforce) bytes += atom->nmax * sizeof(double); return bytes; } diff --git a/src/fix_langevin.h b/src/fix_langevin.h index f3b396742d..24555a85a6 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -47,7 +47,7 @@ class FixLangevin : public Fix { int unpack_exchange(int, double *); protected: - int gjfflag,osflag,nvalues,oflag,tallyflag,zeroflag,tbiasflag; + int gjfflag,nvalues,oflag,tallyflag,zeroflag,tbiasflag; int flangevin_allocated; double ascale; double t_start,t_stop,t_period,t_target; From e51fc5a5bf3c55aca55c873332f2248df177c6b8 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Mon, 23 Sep 2019 11:54:27 -0700 Subject: [PATCH 164/237] remove comment to resolve conflict --- src/fix_langevin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 20c17982b9..bcea14bd06 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -96,7 +96,7 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : for (int i = 1; i <= atom->ntypes; i++) ratio[i] = 1.0; ascale = 0.0; gjfflag = 0; - nvalues = 0; // flag for onsite velocity + nvalues = 0; oflag = 0; tallyflag = 0; zeroflag = 0; From bc0ff0db618be4d1f8b33aa938aebbd5de7e6abc Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 23 Sep 2019 13:48:33 -0600 Subject: [PATCH 165/237] Commit2 JT 092319 - added enum to min.h (for norm choice) - completed doc min_modify - corrected torque tol issue in spin/min --- doc/src/min_modify.txt | 3 +++ examples/SPIN/spinmin/in.spinmin_lbfgs.bfo | 1 + src/SPIN/min_spin.cpp | 19 +++++-------------- src/SPIN/min_spin_cg.cpp | 20 +++++--------------- src/SPIN/min_spin_lbfgs.cpp | 20 +++++--------------- src/min.cpp | 2 -- src/min.h | 2 ++ 7 files changed, 21 insertions(+), 46 deletions(-) diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index b941a33559..b7c85a190b 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -86,6 +86,9 @@ all atoms :c,image(Eqs/norm_max.jpg) +For the min styles {spin}, {spin/cg} and {spin/lbfgs}, the force +norm is replaced by the spin-torque norm. + Keywords {alpha_damp} and {discrete_factor} only make sense when a "min_spin"_min_spin.html command is declared. Keyword {alpha_damp} defines an analog of a magnetic Gilbert diff --git a/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo b/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo index a73b863b11..56cd6b8fae 100644 --- a/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo +++ b/examples/SPIN/spinmin/in.spinmin_lbfgs.bfo @@ -51,4 +51,5 @@ dump 1 all custom 50 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3 min_style spin/lbfgs # min_modify line spin_cubic discrete_factor 10.0 +min_modify norm max minimize 1.0e-15 1.0e-10 10000 1000 diff --git a/src/SPIN/min_spin.cpp b/src/SPIN/min_spin.cpp index 947e281b42..5c7e7eee30 100644 --- a/src/SPIN/min_spin.cpp +++ b/src/SPIN/min_spin.cpp @@ -116,7 +116,7 @@ void MinSpin::reset_vectors() int MinSpin::iterate(int maxiter) { bigint ntimestep; - double fmdotfm,fmsq,fmsqall; + double fmdotfm,fmsq; int flag,flagall; for (int iter = 0; iter < maxiter; iter++) { @@ -163,20 +163,11 @@ int MinSpin::iterate(int maxiter) // magnetic torque tolerance criterion // sync across replicas if running multi-replica minimization - fmdotfm = fmsq = fmsqall = 0.0; + fmdotfm = fmsq = 0.0; if (update->ftol > 0.0) { - if (normstyle == 1) { // max torque norm - fmsq = max_torque(); - fmsqall = fmsq; - if (update->multireplica == 0) - MPI_Allreduce(&fmsq,&fmsqall,1,MPI_INT,MPI_MAX,universe->uworld); - } else { // Euclidean torque norm - fmsq = total_torque(); - fmsqall = fmsq; - if (update->multireplica == 0) - MPI_Allreduce(&fmsq,&fmsqall,1,MPI_INT,MPI_SUM,universe->uworld); - } - fmdotfm = fmsqall*fmsqall; + if (normstyle == MAX) fmsq = max_torque(); // max norm + else fmsq = total_torque(); // Euclidean 2-norm + fmdotfm = fmsq*fmsq; if (update->multireplica == 0) { if (fmdotfm < update->ftol*update->ftol) return FTOL; } else { diff --git a/src/SPIN/min_spin_cg.cpp b/src/SPIN/min_spin_cg.cpp index 322915c0f3..a87d3aaa36 100644 --- a/src/SPIN/min_spin_cg.cpp +++ b/src/SPIN/min_spin_cg.cpp @@ -60,7 +60,6 @@ static const char cite_minstyle_spin_cg[] = #define DELAYSTEP 5 - /* ---------------------------------------------------------------------- */ MinSpinCG::MinSpinCG(LAMMPS *lmp) : @@ -183,7 +182,7 @@ int MinSpinCG::iterate(int maxiter) { int nlocal = atom->nlocal; bigint ntimestep; - double fmdotfm,fmsq,fmsqall; + double fmdotfm,fmsq; int flag, flagall; double **sp = atom->sp; double der_e_cur_tmp = 0.0; @@ -269,20 +268,11 @@ int MinSpinCG::iterate(int maxiter) // magnetic torque tolerance criterion // sync across replicas if running multi-replica minimization - fmdotfm = fmsq = fmsqall = 0.0; + fmdotfm = fmsq = 0.0; if (update->ftol > 0.0) { - if (normstyle == 1) { // max torque norm - fmsq = max_torque(); - fmsqall = fmsq; - if (update->multireplica == 0) - MPI_Allreduce(&fmsq,&fmsqall,1,MPI_INT,MPI_MAX,universe->uworld); - } else { // Euclidean torque norm - fmsq = total_torque(); - fmsqall = fmsq; - if (update->multireplica == 0) - MPI_Allreduce(&fmsq,&fmsqall,1,MPI_INT,MPI_SUM,universe->uworld); - } - fmdotfm = fmsqall*fmsqall; + if (normstyle == MAX) fmsq = max_torque(); // max norm + else fmsq = total_torque(); // Euclidean 2-norm + fmdotfm = fmsq*fmsq; if (update->multireplica == 0) { if (fmdotfm < update->ftol*update->ftol) return FTOL; } else { diff --git a/src/SPIN/min_spin_lbfgs.cpp b/src/SPIN/min_spin_lbfgs.cpp index 891dec5c93..e161aa2a30 100644 --- a/src/SPIN/min_spin_lbfgs.cpp +++ b/src/SPIN/min_spin_lbfgs.cpp @@ -59,7 +59,6 @@ static const char cite_minstyle_spin_lbfgs[] = #define DELAYSTEP 5 - /* ---------------------------------------------------------------------- */ MinSpinLBFGS::MinSpinLBFGS(LAMMPS *lmp) : @@ -192,7 +191,7 @@ int MinSpinLBFGS::iterate(int maxiter) { int nlocal = atom->nlocal; bigint ntimestep; - double fmdotfm,fmsq,fmsqall; + double fmdotfm,fmsq; int flag, flagall; double **sp = atom->sp; double der_e_cur_tmp = 0.0; @@ -284,20 +283,11 @@ int MinSpinLBFGS::iterate(int maxiter) // magnetic torque tolerance criterion // sync across replicas if running multi-replica minimization - fmdotfm = fmsq = fmsqall = 0.0; + fmdotfm = fmsq = 0.0; if (update->ftol > 0.0) { - if (normstyle == 1) { // max torque norm - fmsq = max_torque(); - fmsqall = fmsq; - if (update->multireplica == 0) - MPI_Allreduce(&fmsq,&fmsqall,1,MPI_INT,MPI_MAX,universe->uworld); - } else { // Euclidean torque norm - fmsq = total_torque(); - fmsqall = fmsq; - if (update->multireplica == 0) - MPI_Allreduce(&fmsq,&fmsqall,1,MPI_INT,MPI_SUM,universe->uworld); - } - fmdotfm = fmsqall*fmsqall; + if (normstyle == MAX) fmsq = max_torque(); // max norm + else fmsq = total_torque(); // Euclidean 2-norm + fmdotfm = fmsq*fmsq; if (update->multireplica == 0) { if (fmdotfm < update->ftol*update->ftol) return FTOL; } else { diff --git a/src/min.cpp b/src/min.cpp index 33643d4837..23c3021010 100644 --- a/src/min.cpp +++ b/src/min.cpp @@ -49,8 +49,6 @@ using namespace LAMMPS_NS; using namespace MathConst; -enum{TWO,MAX} - /* ---------------------------------------------------------------------- */ Min::Min(LAMMPS *lmp) : Pointers(lmp) diff --git a/src/min.h b/src/min.h index ac7a3c1e9b..303e2123d8 100644 --- a/src/min.h +++ b/src/min.h @@ -43,6 +43,8 @@ class Min : protected Pointers { double fnorm_inf(); double fnorm_max(); + enum{TWO,MAX}; + // methods for spin minimizers double max_torque(); double total_torque(); From 34f81041461913ab6e2515a026aa4c493f5ddb5f Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 23 Sep 2019 13:52:48 -0600 Subject: [PATCH 166/237] Commit3 JT 092319 - corrected a typo in doc/src/min_modify.txt --- doc/src/min_modify.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index b7c85a190b..209e9e4a67 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -81,7 +81,7 @@ global force vector: :c,image(Eqs/norm_two.jpg) The {max} norm computes the length of the 3-vector force -for each atom (2-norm), and takes the maximum value of those accross +for each atom (2-norm), and takes the maximum value of those across all atoms :c,image(Eqs/norm_max.jpg) From 61f4a4c4989e5fa1df89bb570e9f017328ecf03d Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Mon, 23 Sep 2019 13:18:31 -0700 Subject: [PATCH 167/237] add back fsflag fix_langevin --- src/fix_langevin.cpp | 13 +++++++------ src/fix_langevin.h | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index bcea14bd06..2e114328ec 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -97,6 +97,7 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : ascale = 0.0; gjfflag = 0; nvalues = 0; + fsflag = 0; oflag = 0; tallyflag = 0; zeroflag = 0; @@ -110,11 +111,11 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg],"gjf") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command"); - if (strcmp(arg[iarg+1],"no") == 0) {gjfflag = 0; nvalues = 0;} + if (strcmp(arg[iarg+1],"no") == 0) {gjfflag = 0; fsflag = 0;} else if (strcmp(arg[iarg+1],"yes") == 0) error->all(FLERR,"Fix langevin gjf yes is outdated, please use vhalf or vfull"); - else if (strcmp(arg[iarg+1],"vhalf") == 0) {gjfflag = 1; nvalues = 0;} - else if (strcmp(arg[iarg+1],"vfull") == 0) {gjfflag = 1; nvalues = 1;} + else if (strcmp(arg[iarg+1],"vhalf") == 0) {gjfflag = 1; fsflag = 0;} + else if (strcmp(arg[iarg+1],"vfull") == 0) {gjfflag = 1; fsflag = 1;} else error->all(FLERR,"Illegal fix langevin command"); iarg += 2; } else if (strcmp(arg[iarg],"omega") == 0) { @@ -437,7 +438,7 @@ void FixLangevin::post_force(int /*vflag*/) if (tstyle == ATOM) if (gjfflag) - if (tallyflag || nvalues) + if (tallyflag || fsflag) if (tbiasflag == BIAS) if (rmass) if (zeroflag) post_force_templated<1,1,1,1,1,1>(); @@ -959,7 +960,7 @@ void FixLangevin::end_of_step() tmp[0] = v[i][0]; tmp[1] = v[i][1]; tmp[2] = v[i][2]; - if (!nvalues){ + if (!fsflag){ v[i][0] = lv[i][0]; v[i][1] = lv[i][1]; v[i][2] = lv[i][2]; @@ -1101,7 +1102,7 @@ double FixLangevin::memory_usage() { double bytes = 0.0; if (gjfflag) bytes += atom->nmax*6 * sizeof(double); - if (tallyflag || nvalues) bytes += atom->nmax*3 * sizeof(double); + if (tallyflag || fsflag) bytes += atom->nmax*3 * sizeof(double); if (tforce) bytes += atom->nmax * sizeof(double); return bytes; } diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 24555a85a6..28e98472f6 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -47,7 +47,7 @@ class FixLangevin : public Fix { int unpack_exchange(int, double *); protected: - int gjfflag,nvalues,oflag,tallyflag,zeroflag,tbiasflag; + int gjfflag,nvalues,fsflag,oflag,tallyflag,zeroflag,tbiasflag; int flangevin_allocated; double ascale; double t_start,t_stop,t_period,t_target; From 876a57209fbefdb6e689fa330030d6f4f3ad067f Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Mon, 23 Sep 2019 13:29:10 -0700 Subject: [PATCH 168/237] resolve fsflag conflict fix_langevin --- src/fix_langevin.cpp | 14 +++++++------- src/fix_langevin.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 2e114328ec..b5777cb5a4 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -97,10 +97,10 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : ascale = 0.0; gjfflag = 0; nvalues = 0; - fsflag = 0; oflag = 0; tallyflag = 0; zeroflag = 0; + osflag = 0; int iarg = 7; while (iarg < narg) { @@ -111,11 +111,11 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg],"gjf") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command"); - if (strcmp(arg[iarg+1],"no") == 0) {gjfflag = 0; fsflag = 0;} + if (strcmp(arg[iarg+1],"no") == 0) {gjfflag = 0; osflag = 0;} else if (strcmp(arg[iarg+1],"yes") == 0) error->all(FLERR,"Fix langevin gjf yes is outdated, please use vhalf or vfull"); - else if (strcmp(arg[iarg+1],"vhalf") == 0) {gjfflag = 1; fsflag = 0;} - else if (strcmp(arg[iarg+1],"vfull") == 0) {gjfflag = 1; fsflag = 1;} + else if (strcmp(arg[iarg+1],"vhalf") == 0) {gjfflag = 1; osflag = 0;} + else if (strcmp(arg[iarg+1],"vfull") == 0) {gjfflag = 1; osflag = 1;} else error->all(FLERR,"Illegal fix langevin command"); iarg += 2; } else if (strcmp(arg[iarg],"omega") == 0) { @@ -438,7 +438,7 @@ void FixLangevin::post_force(int /*vflag*/) if (tstyle == ATOM) if (gjfflag) - if (tallyflag || fsflag) + if (tallyflag || osflag) if (tbiasflag == BIAS) if (rmass) if (zeroflag) post_force_templated<1,1,1,1,1,1>(); @@ -960,7 +960,7 @@ void FixLangevin::end_of_step() tmp[0] = v[i][0]; tmp[1] = v[i][1]; tmp[2] = v[i][2]; - if (!fsflag){ + if (!osflag){ v[i][0] = lv[i][0]; v[i][1] = lv[i][1]; v[i][2] = lv[i][2]; @@ -1102,7 +1102,7 @@ double FixLangevin::memory_usage() { double bytes = 0.0; if (gjfflag) bytes += atom->nmax*6 * sizeof(double); - if (tallyflag || fsflag) bytes += atom->nmax*3 * sizeof(double); + if (tallyflag || osflag) bytes += atom->nmax*3 * sizeof(double); if (tforce) bytes += atom->nmax * sizeof(double); return bytes; } diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 28e98472f6..868b71a44d 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -47,7 +47,7 @@ class FixLangevin : public Fix { int unpack_exchange(int, double *); protected: - int gjfflag,nvalues,fsflag,oflag,tallyflag,zeroflag,tbiasflag; + int gjfflag,nvalues,osflag,oflag,tallyflag,zeroflag,tbiasflag; int flangevin_allocated; double ascale; double t_start,t_stop,t_period,t_target; From cf13284bf42124e8932196ae7a90695a81fc1b31 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Mon, 23 Sep 2019 13:31:50 -0700 Subject: [PATCH 169/237] change fsflag in fix_langevin_kokkos --- src/KOKKOS/fix_langevin_kokkos.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/KOKKOS/fix_langevin_kokkos.cpp b/src/KOKKOS/fix_langevin_kokkos.cpp index 0618631581..426bcb49e3 100644 --- a/src/KOKKOS/fix_langevin_kokkos.cpp +++ b/src/KOKKOS/fix_langevin_kokkos.cpp @@ -816,7 +816,7 @@ void FixLangevinKokkos::end_of_step_item(int i) const { tmp[0] = v(i,0); tmp[1] = v(i,1); tmp[2] = v(i,2); - if (!fsflag){ + if (!osflag){ v(i,0) = d_lv(i,0); v(i,1) = d_lv(i,1); v(i,2) = d_lv(i,2); @@ -847,7 +847,7 @@ void FixLangevinKokkos::end_of_step_rmass_item(int i) const tmp[0] = v(i,0); tmp[1] = v(i,1); tmp[2] = v(i,2); - if (!fsflag){ + if (!osflag){ v(i,0) = d_lv(i,0); v(i,1) = d_lv(i,1); v(i,2) = d_lv(i,2); From a0f0c2357883dc437d790e3264fa8f593ea91300 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 23 Sep 2019 14:32:39 -0600 Subject: [PATCH 170/237] Commit3 JT 092319 - corrected src/min.h merging conflict --- src/min.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/min.h b/src/min.h index 8bc6284b4b..e03b034147 100644 --- a/src/min.h +++ b/src/min.h @@ -39,7 +39,6 @@ class Min : protected Pointers { virtual bigint memory_usage() {return 0;} void modify_params(int, char **); virtual int modify_param(int, char **) {return 0;} -<<<<<<< HEAD double fnorm_sqr(); double fnorm_inf(); double fnorm_max(); @@ -49,10 +48,6 @@ class Min : protected Pointers { // methods for spin minimizers double max_torque(); double total_torque(); -======= - virtual double fnorm_sqr(); - virtual double fnorm_inf(); ->>>>>>> aa2b885783e471ed622e1402adeed67e3224aa53 virtual void init_style() {} virtual void setup_style() = 0; From af1e119a7cb940e9a3cab8c5a6a1583ea0856bfe Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 23 Sep 2019 17:30:16 -0600 Subject: [PATCH 171/237] Commit JT 092319 - initial commit - started correction restart pair_spin_neel.cpp --- src/SPIN/pair_spin_neel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SPIN/pair_spin_neel.cpp b/src/SPIN/pair_spin_neel.cpp index 355ba20f39..72d445a184 100644 --- a/src/SPIN/pair_spin_neel.cpp +++ b/src/SPIN/pair_spin_neel.cpp @@ -694,11 +694,11 @@ void PairSpinNeel::read_restart(FILE *fp) fread(&g1[i][j],sizeof(double),1,fp); fread(&g1_mech[i][j],sizeof(double),1,fp); fread(&g2[i][j],sizeof(double),1,fp); - fread(&g2[i][j],sizeof(double),1,fp); + fread(&g3[i][j],sizeof(double),1,fp); fread(&q1[i][j],sizeof(double),1,fp); fread(&q1_mech[i][j],sizeof(double),1,fp); fread(&q2[i][j],sizeof(double),1,fp); - fread(&q2[i][j],sizeof(double),1,fp); + fread(&q3[i][j],sizeof(double),1,fp); fread(&cut_spin_neel[i][j],sizeof(double),1,fp); } MPI_Bcast(&g1[i][j],1,MPI_DOUBLE,0,world); From 3f0d1cb270963d44fed5000372233f66bed79013 Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Tue, 24 Sep 2019 13:15:48 -0600 Subject: [PATCH 172/237] cmake: LMP_KOKKOS define is always needed --- cmake/Modules/Packages/KOKKOS.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Modules/Packages/KOKKOS.cmake b/cmake/Modules/Packages/KOKKOS.cmake index d0f67243cf..4134fed597 100644 --- a/cmake/Modules/Packages/KOKKOS.cmake +++ b/cmake/Modules/Packages/KOKKOS.cmake @@ -6,7 +6,6 @@ if(PKG_KOKKOS) else() set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos) set(LAMMPS_LIB_KOKKOS_BIN_DIR ${LAMMPS_LIB_BINARY_DIR}/kokkos) - add_definitions(-DLMP_KOKKOS) add_subdirectory(${LAMMPS_LIB_KOKKOS_SRC_DIR} ${LAMMPS_LIB_KOKKOS_BIN_DIR}) set(Kokkos_INCLUDE_DIRS ${LAMMPS_LIB_KOKKOS_SRC_DIR}/core/src @@ -16,6 +15,7 @@ if(PKG_KOKKOS) include_directories(${Kokkos_INCLUDE_DIRS}) list(APPEND LAMMPS_LINK_LIBS kokkos) endif() + add_definitions(-DLMP_KOKKOS) set(KOKKOS_PKG_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/KOKKOS) set(KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/kokkos.cpp From d9306a58656925e94f00fe27b7a2a387308f78c4 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 24 Sep 2019 13:58:56 -0600 Subject: [PATCH 173/237] Commit JT 092419 - added inf norm option --- doc/src/Eqs/norm_inf.jpg | Bin 0 -> 14859 bytes doc/src/Eqs/norm_inf.tex | 15 +++++++++++++++ doc/src/min_modify.txt | 8 +++++++- src/SPIN/min_spin.cpp | 6 ++++-- src/SPIN/min_spin_cg.cpp | 6 ++++-- src/SPIN/min_spin_lbfgs.cpp | 6 ++++-- src/min.cpp | 34 ++++++++++++++++++++++++++++++++++ src/min.h | 8 ++++---- src/min_cg.cpp | 10 +++++++--- src/min_fire.cpp | 7 +++++-- src/min_quickmin.cpp | 7 +++++-- src/min_sd.cpp | 7 +++++-- 12 files changed, 94 insertions(+), 20 deletions(-) create mode 100644 doc/src/Eqs/norm_inf.jpg create mode 100644 doc/src/Eqs/norm_inf.tex diff --git a/doc/src/Eqs/norm_inf.jpg b/doc/src/Eqs/norm_inf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..42a2afb3d299b7ef031d9def8fe7eb1de0b7d931 GIT binary patch literal 14859 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 > 0.0) { - if (normstyle == MAX) fmsq = max_torque(); // max norm - else fmsq = total_torque(); // Euclidean 2-norm + if (normstyle == MAX) fmsq = max_torque(); // max torque norm + else if (normstyle == INF) fmsq = inf_torque(); // inf torque norm + else if (normstyle == TWO) fmsq = total_torque(); // Euclidean torque 2-norm + else error->all(FLERR,"Illegal min_modify command"); fmdotfm = fmsq*fmsq; if (update->multireplica == 0) { if (fmdotfm < update->ftol*update->ftol) return FTOL; diff --git a/src/SPIN/min_spin_cg.cpp b/src/SPIN/min_spin_cg.cpp index a87d3aaa36..95bbcf437b 100644 --- a/src/SPIN/min_spin_cg.cpp +++ b/src/SPIN/min_spin_cg.cpp @@ -270,8 +270,10 @@ int MinSpinCG::iterate(int maxiter) fmdotfm = fmsq = 0.0; if (update->ftol > 0.0) { - if (normstyle == MAX) fmsq = max_torque(); // max norm - else fmsq = total_torque(); // Euclidean 2-norm + if (normstyle == MAX) fmsq = max_torque(); // max torque norm + else if (normstyle == INF) fmsq = inf_torque(); // inf torque norm + else if (normstyle == TWO) fmsq = total_torque(); // Euclidean torque 2-norm + else error->all(FLERR,"Illegal min_modify command"); fmdotfm = fmsq*fmsq; if (update->multireplica == 0) { if (fmdotfm < update->ftol*update->ftol) return FTOL; diff --git a/src/SPIN/min_spin_lbfgs.cpp b/src/SPIN/min_spin_lbfgs.cpp index e161aa2a30..db0dbbaa76 100644 --- a/src/SPIN/min_spin_lbfgs.cpp +++ b/src/SPIN/min_spin_lbfgs.cpp @@ -285,8 +285,10 @@ int MinSpinLBFGS::iterate(int maxiter) fmdotfm = fmsq = 0.0; if (update->ftol > 0.0) { - if (normstyle == MAX) fmsq = max_torque(); // max norm - else fmsq = total_torque(); // Euclidean 2-norm + if (normstyle == MAX) fmsq = max_torque(); // max torque norm + else if (normstyle == INF) fmsq = inf_torque(); // inf torque norm + else if (normstyle == TWO) fmsq = total_torque(); // Euclidean torque 2-norm + else error->all(FLERR,"Illegal min_modify command"); fmdotfm = fmsq*fmsq; if (update->multireplica == 0) { if (fmdotfm < update->ftol*update->ftol) return FTOL; diff --git a/src/min.cpp b/src/min.cpp index 1e56d4c466..b57dd44d4f 100644 --- a/src/min.cpp +++ b/src/min.cpp @@ -670,6 +670,7 @@ void Min::modify_params(int narg, char **arg) if (iarg+2 > narg) error->all(FLERR,"Illegal min_modify command"); if (strcmp(arg[iarg+1],"two") == 0) normstyle = TWO; else if (strcmp(arg[iarg+1],"max") == 0) normstyle = MAX; + else if (strcmp(arg[iarg+1],"inf") == 0) normstyle = INF; else error->all(FLERR,"Illegal min_modify command"); iarg += 2; } else { @@ -899,6 +900,39 @@ double Min::total_torque() return sqrt(ftotsqall) * hbar; } +/* ---------------------------------------------------------------------- + compute and return max_i ||mag. torque components|| (in eV) +------------------------------------------------------------------------- */ + +double Min::inf_torque() +{ + double fmsq,fmaxsqone,fmaxsqall; + int nlocal = atom->nlocal; + double hbar = force->hplanck/MY_2PI; + double tx,ty,tz; + double **sp = atom->sp; + double **fm = atom->fm; + + fmsq = fmaxsqone = fmaxsqall = 0.0; + for (int i = 0; i < nlocal; i++) { + tx = fm[i][1]*sp[i][2] - fm[i][2]*sp[i][1]; + ty = fm[i][2]*sp[i][0] - fm[i][0]*sp[i][2]; + tz = fm[i][0]*sp[i][1] - fm[i][1]*sp[i][0]; + fmaxsqone = MAX(fmaxsqone,tx*tx); + fmaxsqone = MAX(fmaxsqone,ty*ty); + fmaxsqone = MAX(fmaxsqone,tz*tz); + } + + // finding max fm on this replica + + fmaxsqall = fmaxsqone; + MPI_Allreduce(&fmaxsqone,&fmaxsqall,1,MPI_DOUBLE,MPI_MAX,world); + + // multiply it by hbar so that units are in eV + + return sqrt(fmaxsqall) * hbar; +} + /* ---------------------------------------------------------------------- compute and return max_i ||mag. torque_i|| (in eV) ------------------------------------------------------------------------- */ diff --git a/src/min.h b/src/min.h index e03b034147..61f9ce0bda 100644 --- a/src/min.h +++ b/src/min.h @@ -43,11 +43,12 @@ class Min : protected Pointers { double fnorm_inf(); double fnorm_max(); - enum{TWO,MAX}; + enum{TWO,MAX,INF}; // methods for spin minimizers - double max_torque(); double total_torque(); + double inf_torque(); + double max_torque(); virtual void init_style() {} virtual void setup_style() = 0; @@ -67,8 +68,7 @@ class Min : protected Pointers { int linestyle; // 0 = backtrack, 1 = quadratic, 2 = forcezero // 3 = spin_cubic, 4 = spin_none - int normstyle; // TWO or MAX flag for force norm evaluation - // int normstyle; // 0 = Euclidean norm, 1 = inf. norm + int normstyle; // TWO, MAX or INF flag for force norm evaluation int nelist_global,nelist_atom; // # of PE,virial computes to check int nvlist_global,nvlist_atom; diff --git a/src/min_cg.cpp b/src/min_cg.cpp index d98ec0ef97..80dde25f51 100644 --- a/src/min_cg.cpp +++ b/src/min_cg.cpp @@ -14,6 +14,7 @@ #include "min_cg.h" #include #include +#include "error.h" #include "update.h" #include "output.h" #include "timer.h" @@ -110,12 +111,15 @@ int MinCG::iterate(int maxiter) } fmax = 0.0; - if (normstyle == MAX) { // max force norm + if (normstyle == MAX) { // max force norm fmax = fnorm_max(); if (fmax < update->ftol*update->ftol) return FTOL; - } else { // Euclidean force 2-norm + } else if (normstyle == INF) { // infinite force norm + fmax = fnorm_inf(); + if (fmax < update->ftol*update->ftol) return FTOL; + } else if (normstyle == TWO) { // Euclidean force 2-norm if (dotall[0] < update->ftol*update->ftol) return FTOL; - } + } else error->all(FLERR,"Illegal min_modify command"); // update new search direction h from new f = -Grad(x) and old g // this is Polak-Ribieri formulation diff --git a/src/min_fire.cpp b/src/min_fire.cpp index dbb7f36148..e0cc2437d4 100644 --- a/src/min_fire.cpp +++ b/src/min_fire.cpp @@ -16,6 +16,7 @@ #include #include "universe.h" #include "atom.h" +#include "error.h" #include "force.h" #include "update.h" #include "output.h" @@ -250,8 +251,10 @@ int MinFire::iterate(int maxiter) // sync across replicas if running multi-replica minimization if (update->ftol > 0.0) { - if (normstyle == MAX) fdotf = fnorm_inf(); // max force norm - else fdotf = fnorm_sqr(); // Euclidean force 2-norm + if (normstyle == MAX) fdotf = fnorm_max(); // max force norm + else if (normstyle == INF) fdotf = fnorm_inf(); // inf force norm + else if (normstyle == TWO) fdotf = fnorm_sqr(); // Euclidean force 2-norm + else error->all(FLERR,"Illegal min_modify command"); if (update->multireplica == 0) { if (fdotf < update->ftol*update->ftol) return FTOL; } else { diff --git a/src/min_quickmin.cpp b/src/min_quickmin.cpp index 6846aaba0a..ef649b4dac 100644 --- a/src/min_quickmin.cpp +++ b/src/min_quickmin.cpp @@ -16,6 +16,7 @@ #include #include "universe.h" #include "atom.h" +#include "error.h" #include "force.h" #include "update.h" #include "output.h" @@ -215,8 +216,10 @@ int MinQuickMin::iterate(int maxiter) // sync across replicas if running multi-replica minimization if (update->ftol > 0.0) { - if (normstyle == MAX) fdotfloc = fnorm_max(); // max force norm - else fdotf = fnorm_sqr(); // Euclidean force 2-norm + if (normstyle == MAX) fdotfloc = fnorm_max(); // max force norm + else if (normstyle == INF) fdotfloc = fnorm_inf(); // inf force norm + else if (normstyle == TWO) fdotfloc = fnorm_sqr(); // Euclidean force 2-norm + else error->all(FLERR,"Illegal min_modify command"); if (update->multireplica == 0) { if (fdotf < update->ftol*update->ftol) return FTOL; } else { diff --git a/src/min_sd.cpp b/src/min_sd.cpp index 3ded85990d..8541b0ccdf 100644 --- a/src/min_sd.cpp +++ b/src/min_sd.cpp @@ -13,6 +13,7 @@ #include "min_sd.h" #include +#include "error.h" #include "update.h" #include "output.h" #include "timer.h" @@ -77,8 +78,10 @@ int MinSD::iterate(int maxiter) // force tolerance criterion - if (normstyle == MAX) fdotf = fnorm_max(); // max force norm - else fdotf = fnorm_sqr(); // Euclidean force 2-norm + if (normstyle == MAX) fdotf = fnorm_max(); // max force norm + else if (normstyle == INF) fdotf = fnorm_inf(); // infinite force norm + else if (normstyle == TWO) fdotf = fnorm_sqr(); // Euclidean force 2-norm + else error->all(FLERR,"Illegal min_modify command"); if (fdotf < update->ftol*update->ftol) return FTOL; // set new search direction h to f = -Grad(x) From 2fad4e0f974eb05e6e549304a150fe4369776a16 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 24 Sep 2019 14:50:55 -0600 Subject: [PATCH 174/237] Commit JT 092419 - corrected read_restart in exchange (same correct as in Neel) --- src/SPIN/pair_spin_exchange.cpp | 2 +- src/SPIN/pair_spin_neel.cpp | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/SPIN/pair_spin_exchange.cpp b/src/SPIN/pair_spin_exchange.cpp index cc28018ad0..7bc2b846a1 100644 --- a/src/SPIN/pair_spin_exchange.cpp +++ b/src/SPIN/pair_spin_exchange.cpp @@ -504,7 +504,7 @@ void PairSpinExchange::read_restart(FILE *fp) fread(&J1_mag[i][j],sizeof(double),1,fp); fread(&J1_mech[i][j],sizeof(double),1,fp); fread(&J2[i][j],sizeof(double),1,fp); - fread(&J2[i][j],sizeof(double),1,fp); + fread(&J3[i][j],sizeof(double),1,fp); fread(&cut_spin_exchange[i][j],sizeof(double),1,fp); } MPI_Bcast(&J1_mag[i][j],1,MPI_DOUBLE,0,world); diff --git a/src/SPIN/pair_spin_neel.cpp b/src/SPIN/pair_spin_neel.cpp index 72d445a184..017682593a 100644 --- a/src/SPIN/pair_spin_neel.cpp +++ b/src/SPIN/pair_spin_neel.cpp @@ -643,10 +643,8 @@ void PairSpinNeel::allocate() memory->create(q3,n+1,n+1,"pair/spin/soc/neel:q3"); memory->create(cutsq,n+1,n+1,"pair/spin/soc/neel:cutsq"); - } - /* ---------------------------------------------------------------------- proc 0 writes to restart file ------------------------------------------------------------------------- */ From a0974bc09dc544ebe1faf20afbfc0758e4a0ce98 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 24 Sep 2019 15:58:22 -0600 Subject: [PATCH 175/237] Commit JT 092419 - changed the nve/spin lattice option - from (yes/no) to (moving/frozen) - changed the doc and all examples --- doc/src/fix_nve_spin.txt | 20 ++++++++++++------- examples/SPIN/bfo/in.spin.bfo | 2 +- examples/SPIN/cobalt_fcc/in.spin.cobalt_fcc | 2 +- examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp | 2 +- .../SPIN/dipole_spin/in.spin.iron_dipole_cut | 2 +- .../dipole_spin/in.spin.iron_dipole_ewald | 2 +- .../SPIN/dipole_spin/in.spin.iron_dipole_pppm | 2 +- examples/SPIN/iron/in.spin.iron | 2 +- examples/SPIN/iron/in.spin.iron_cubic | 2 +- examples/SPIN/nickel/in.spin.nickel | 2 +- examples/SPIN/nickel/in.spin.nickel_cubic | 2 +- examples/SPIN/read_restart/in.spin.read_data | 2 +- examples/SPIN/read_restart/in.spin.restart | 2 +- .../SPIN/read_restart/in.spin.write_restart | 2 +- .../SPIN/setforce_spin/in.spinmin.setforce | 2 +- src/SPIN/fix_nve_spin.cpp | 5 +++++ 16 files changed, 32 insertions(+), 21 deletions(-) diff --git a/doc/src/fix_nve_spin.txt b/doc/src/fix_nve_spin.txt index 7b382bb6ad..8e6284639b 100644 --- a/doc/src/fix_nve_spin.txt +++ b/doc/src/fix_nve_spin.txt @@ -15,22 +15,26 @@ fix ID group-ID nve/spin keyword values :pre ID, group-ID are documented in "fix"_fix.html command :ulb,l nve/spin = style name of this fix command :l keyword = {lattice} :l - {lattice} value = {no} or {yes} :pre + {lattice} value = {moving} or {frozen} + moving = integrate both spin and atomic degress of freedom + frozen = integrate spins on a fixed lattice :pre :ule [Examples:] -fix 3 all nve/spin lattice yes -fix 1 all nve/spin lattice no :pre +fix 3 all nve/spin lattice moving +fix 1 all nve/spin lattice frozen :pre [Description:] Perform a symplectic integration for the spin or spin-lattice system. The {lattice} keyword defines if the spins are integrated on a lattice -of fixed atoms (lattice = no), or if atoms are moving (lattice = yes). - -By default (lattice = yes), a spin-lattice integration is performed. +of fixed atoms (lattice = frozen), or if atoms are moving +(lattice = moving). +The first case corresponds to a spin dynamics calculation, and +the second to a spin-lattice calculation. +By default a spin-lattice integration is performed (lattice = moving). The {nve/spin} fix applies a Suzuki-Trotter decomposition to the equations of motion of the spin lattice system, following the scheme: @@ -63,7 +67,9 @@ instead of "array" is also valid. "atom_style spin"_atom_style.html, "fix nve"_fix_nve.html -[Default:] none +[Default:] + +The option default is lattice = moving. :line diff --git a/examples/SPIN/bfo/in.spin.bfo b/examples/SPIN/bfo/in.spin.bfo index e3c88b0f06..2cd9200121 100644 --- a/examples/SPIN/bfo/in.spin.bfo +++ b/examples/SPIN/bfo/in.spin.bfo @@ -32,7 +32,7 @@ neigh_modify every 10 check yes delay 20 fix 1 all precession/spin anisotropy 0.0000033 0.0 0.0 1.0 fix 2 all langevin/spin 0.0 0.1 21 -fix 3 all nve/spin lattice no +fix 3 all nve/spin lattice frozen timestep 0.0002 diff --git a/examples/SPIN/cobalt_fcc/in.spin.cobalt_fcc b/examples/SPIN/cobalt_fcc/in.spin.cobalt_fcc index ea98eeba94..9193faa798 100644 --- a/examples/SPIN/cobalt_fcc/in.spin.cobalt_fcc +++ b/examples/SPIN/cobalt_fcc/in.spin.cobalt_fcc @@ -35,7 +35,7 @@ fix_modify 1 energy yes fix 2 all langevin/spin 0.0 0.0 21 -fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice moving timestep 0.0001 # compute and output options diff --git a/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp b/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp index 3f34838553..b9ede5f09c 100644 --- a/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp +++ b/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp @@ -37,7 +37,7 @@ neigh_modify every 10 check yes delay 20 fix 1 all precession/spin anisotropy 0.01 0.0 0.0 1.0 #fix 2 all langevin/spin 0.0 0.0 21 fix 2 all langevin/spin 0.0 0.1 21 -fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice moving timestep 0.0001 diff --git a/examples/SPIN/dipole_spin/in.spin.iron_dipole_cut b/examples/SPIN/dipole_spin/in.spin.iron_dipole_cut index a409fe0563..34f7fea0d3 100644 --- a/examples/SPIN/dipole_spin/in.spin.iron_dipole_cut +++ b/examples/SPIN/dipole_spin/in.spin.iron_dipole_cut @@ -33,7 +33,7 @@ fix 1 all precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1 fix_modify 1 energy yes fix 2 all langevin/spin 0.0 0.0 21 -fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice moving timestep 0.0001 # compute and output options diff --git a/examples/SPIN/dipole_spin/in.spin.iron_dipole_ewald b/examples/SPIN/dipole_spin/in.spin.iron_dipole_ewald index 58b44b55fe..f694bc5ddc 100644 --- a/examples/SPIN/dipole_spin/in.spin.iron_dipole_ewald +++ b/examples/SPIN/dipole_spin/in.spin.iron_dipole_ewald @@ -35,7 +35,7 @@ fix 1 all precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1 fix_modify 1 energy yes fix 2 all langevin/spin 0.0 0.0 21 -fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice moving timestep 0.0001 # compute and output options diff --git a/examples/SPIN/dipole_spin/in.spin.iron_dipole_pppm b/examples/SPIN/dipole_spin/in.spin.iron_dipole_pppm index 28d7e4a4bc..4175038ade 100644 --- a/examples/SPIN/dipole_spin/in.spin.iron_dipole_pppm +++ b/examples/SPIN/dipole_spin/in.spin.iron_dipole_pppm @@ -36,7 +36,7 @@ fix 1 all precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1 fix_modify 1 energy yes fix 2 all langevin/spin 0.0 0.0 21 -fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice moving timestep 0.0001 # compute and output options diff --git a/examples/SPIN/iron/in.spin.iron b/examples/SPIN/iron/in.spin.iron index bb1b0e1b4d..3468575493 100644 --- a/examples/SPIN/iron/in.spin.iron +++ b/examples/SPIN/iron/in.spin.iron @@ -33,7 +33,7 @@ neigh_modify every 10 check yes delay 20 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 fix 2 all langevin/spin 0.0 0.0 21 -fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice moving timestep 0.0001 # compute and output options diff --git a/examples/SPIN/iron/in.spin.iron_cubic b/examples/SPIN/iron/in.spin.iron_cubic index d4703a2959..859d9df0fa 100644 --- a/examples/SPIN/iron/in.spin.iron_cubic +++ b/examples/SPIN/iron/in.spin.iron_cubic @@ -31,7 +31,7 @@ fix 1 all precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1 fix_modify 1 energy yes fix 2 all langevin/spin 0.0 0.0 21 -fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice moving timestep 0.0001 # compute and output options diff --git a/examples/SPIN/nickel/in.spin.nickel b/examples/SPIN/nickel/in.spin.nickel index 0ed2fac410..caa1c940ae 100644 --- a/examples/SPIN/nickel/in.spin.nickel +++ b/examples/SPIN/nickel/in.spin.nickel @@ -33,7 +33,7 @@ neigh_modify every 10 check yes delay 20 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 fix 2 all langevin/spin 0.0 0.0 21 -fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice moving timestep 0.0001 # compute and output options diff --git a/examples/SPIN/nickel/in.spin.nickel_cubic b/examples/SPIN/nickel/in.spin.nickel_cubic index 3c97b284ae..76ea23689a 100644 --- a/examples/SPIN/nickel/in.spin.nickel_cubic +++ b/examples/SPIN/nickel/in.spin.nickel_cubic @@ -35,7 +35,7 @@ fix 1 all precession/spin cubic -0.0001 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1. fix_modify 1 energy yes fix 2 all langevin/spin 0.0 0.0 21 -fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice moving timestep 0.0001 # compute and output options diff --git a/examples/SPIN/read_restart/in.spin.read_data b/examples/SPIN/read_restart/in.spin.read_data index a450421699..e788ecf67e 100644 --- a/examples/SPIN/read_restart/in.spin.read_data +++ b/examples/SPIN/read_restart/in.spin.read_data @@ -20,7 +20,7 @@ neigh_modify every 1 check no delay 0 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 fix 2 all langevin/spin 0.0 0.0 21 -fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice moving timestep 0.0001 # define outputs and computes diff --git a/examples/SPIN/read_restart/in.spin.restart b/examples/SPIN/read_restart/in.spin.restart index 39157fdac4..ccce25b254 100644 --- a/examples/SPIN/read_restart/in.spin.restart +++ b/examples/SPIN/read_restart/in.spin.restart @@ -24,7 +24,7 @@ neigh_modify every 1 check no delay 0 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 fix 2 all langevin/spin 0.0 0.0 21 -fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice moving timestep 0.0001 # define outputs diff --git a/examples/SPIN/read_restart/in.spin.write_restart b/examples/SPIN/read_restart/in.spin.write_restart index 42f07fd316..c127101093 100644 --- a/examples/SPIN/read_restart/in.spin.write_restart +++ b/examples/SPIN/read_restart/in.spin.write_restart @@ -29,7 +29,7 @@ neigh_modify every 10 check yes delay 20 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 fix 2 all langevin/spin 100.0 0.01 21 -fix 3 all nve/spin lattice no +fix 3 all nve/spin lattice frozen timestep 0.0001 # compute and output options diff --git a/examples/SPIN/setforce_spin/in.spinmin.setforce b/examples/SPIN/setforce_spin/in.spinmin.setforce index 10d4df66ed..822768e0ef 100644 --- a/examples/SPIN/setforce_spin/in.spinmin.setforce +++ b/examples/SPIN/setforce_spin/in.spinmin.setforce @@ -35,7 +35,7 @@ fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 anisotropy 5e-05 0.0 0.0 1.0 fix_modify 1 energy yes fix 2 fixed_spin setforce/spin 0.0 0.0 0.0 fix 3 all langevin/spin 0.0 0.1 21 -fix 4 all nve/spin lattice no +fix 4 all nve/spin lattice frozen timestep 0.0001 diff --git a/src/SPIN/fix_nve_spin.cpp b/src/SPIN/fix_nve_spin.cpp index b1b466b5a4..9b4f1916ae 100644 --- a/src/SPIN/fix_nve_spin.cpp +++ b/src/SPIN/fix_nve_spin.cpp @@ -91,12 +91,17 @@ FixNVESpin::FixNVESpin(LAMMPS *lmp, int narg, char **arg) : // defining lattice_flag + // changing the lattice option, from (yes,no) -> (moving,frozen) + // for now, (yes,no) still works (to avoid user's confusions). + int iarg = 3; while (iarg < narg) { if (strcmp(arg[iarg],"lattice") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix/NVE/spin command"); if (strcmp(arg[iarg+1],"no") == 0) lattice_flag = 0; + else if (strcmp(arg[iarg+1],"frozen") == 0) lattice_flag = 0; else if (strcmp(arg[iarg+1],"yes") == 0) lattice_flag = 1; + else if (strcmp(arg[iarg+1],"moving") == 0) lattice_flag = 1; else error->all(FLERR,"Illegal fix/NVE/spin command"); iarg += 2; } else error->all(FLERR,"Illegal fix/NVE/spin command"); From a6a78208aab5341b18c5f303cc563980132a607e Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 24 Sep 2019 16:01:37 -0600 Subject: [PATCH 176/237] Commit3 JT 092419 - modified other doc files --- doc/src/fix_langevin_spin.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/fix_langevin_spin.txt b/doc/src/fix_langevin_spin.txt index e4065adad5..e5dccc5e57 100644 --- a/doc/src/fix_langevin_spin.txt +++ b/doc/src/fix_langevin_spin.txt @@ -50,7 +50,7 @@ As an example: fix 1 all precession/spin zeeman 0.01 0.0 0.0 1.0 fix 2 all langevin/spin 300.0 0.01 21 -fix 3 all nve/spin lattice yes :pre +fix 3 all nve/spin lattice moving :pre is correct, but defining a force/spin command after the langevin/spin command would give an error message. From bfacab7be7565f5ac8f21b21cf9f18ba3e47e3cc Mon Sep 17 00:00:00 2001 From: "Jibril B. Coulibaly" Date: Wed, 25 Sep 2019 08:55:33 -0500 Subject: [PATCH 177/237] remove non-compliant comments --- src/GRANULAR/pair_granular.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 334c6a471e..0b1a6eb09a 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -464,8 +464,8 @@ void PairGranular::compute(int eflag, int vflag) } else fs1 = fs2 = fs3 = 0.0; } } else { // classic pair gran/hooke (no history) - fs = damp_tangential*vrel; // From documentation: F_{t,damp} = - \eta_t v_{t,rel}, no need for extra `meff` - if (vrel != 0.0) Ft = MIN(Fscrit,fs) / vrel; // From documentation: critical force `Fscrit` used, not elastic normal force `Fne` + fs = damp_tangential*vrel; + if (vrel != 0.0) Ft = MIN(Fscrit,fs) / vrel; else Ft = 0.0; fs1 = -Ft*vtr1; fs2 = -Ft*vtr2; @@ -635,7 +635,7 @@ void PairGranular::compute(int eflag, int vflag) torque[j][2] -= torroll3; } } - if (evflag) ev_tally_xyz(i,j,nlocal,0,//Should `newton_pair` passed instead of 0 ? + if (evflag) ev_tally_xyz(i,j,nlocal,0, 0.0,0.0,fx,fy,fz,delx,dely,delz); } } @@ -1475,7 +1475,6 @@ double PairGranular::single(int i, int j, int itype, int jtype, if (neighprev >= jnum) neighprev = 0; if (jlist[neighprev] == j) break; } - // the `history` pointer must not be modified here in single() function. already calculated in the compute() function. If modified here it changes the pair forces that have friction/twisting/rolling and history effects ! history = &allhistory[size_history*neighprev]; } @@ -1539,8 +1538,8 @@ double PairGranular::single(int i, int j, int itype, int jtype, fs1 *= Fscrit/fs; fs2 *= Fscrit/fs; fs3 *= Fscrit/fs; - fs *= Fscrit/fs; // saves the correct value of `fs` to svector - } else fs1 = fs2 = fs3 = fs = 0.0; // saves the correct of `fs` value to svector + fs *= Fscrit/fs; + } else fs1 = fs2 = fs3 = fs = 0.0; } // classic pair gran/hooke (no history) @@ -1551,7 +1550,7 @@ double PairGranular::single(int i, int j, int itype, int jtype, fs1 = -Ft*vtr1; fs2 = -Ft*vtr2; fs3 = -Ft*vtr3; - fs = Ft*vrel; // saves the correct value of `fs` to svector + fs = Ft*vrel; } //**************************************** @@ -1596,8 +1595,8 @@ double PairGranular::single(int i, int j, int itype, int jtype, fr1 *= Frcrit/fr; fr2 *= Frcrit/fr; fr3 *= Frcrit/fr; - fr *= Frcrit/fr; // saves the correct value of `fr` to svector - } else fr1 = fr2 = fr3 = fr = 0.0; // saves the correct value of `fr` to svector + fr *= Frcrit/fr; + } else fr1 = fr2 = fr3 = fr = 0.0; } } From 107369518e19ae0eede5d4c2af181f438e3c2ccb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 25 Sep 2019 13:36:18 -0400 Subject: [PATCH 178/237] replace non-ASCII characters with their ASCII equivalents # Conflicts: # doc/src/fix_wall_stochastic.txt --- doc/src/fix.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/fix.txt b/doc/src/fix.txt index 3fc0067e1a..fd281bce83 100644 --- a/doc/src/fix.txt +++ b/doc/src/fix.txt @@ -188,7 +188,7 @@ accelerated styles exist. "box/relax"_fix_box_relax.html - relax box size during energy minimization "client/md"_fix_client_md.html - MD client for client/server simulations "cmap"_fix_cmap.html - enables CMAP cross-terms of the CHARMM force field -"colvars"_fix_colvars.html - interface to the collective variables “Colvars” library +"colvars"_fix_colvars.html - interface to the collective variables "Colvars" library "controller"_fix_controller.html - apply control loop feedback mechanism "deform"_fix_deform.html - change the simulation box size/shape "deposit"_fix_deposit.html - add new atoms above a surface @@ -221,7 +221,7 @@ accelerated styles exist. "heat"_fix_heat.html - add/subtract momentum-conserving heat "hyper/global"_fix_hyper_global.html - global hyperdynamics "hyper/local"_fix_hyper_local.html - local hyperdynamics -"imd"_fix_imd.html - implements the “Interactive MD” (IMD) protocol +"imd"_fix_imd.html - implements the "Interactive MD" (IMD) protocol "indent"_fix_indent.html - impose force due to an indenter "ipi"_fix_ipi.html - enable LAMMPS to run as a client for i-PI path-integral simulations "langevin"_fix_langevin.html - Langevin temperature control From a5db0463ecebacf7d465653c6bc2dcbceacac03d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 25 Sep 2019 13:36:57 -0400 Subject: [PATCH 179/237] list lines in doc source files with non-ASCII characters --- doc/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/Makefile b/doc/Makefile index 5c679440b8..a702d5d169 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -69,6 +69,7 @@ html: $(OBJECTS) $(ANCHORCHECK) sphinx-build $(SPHINXEXTRA) -b html -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) html ;\ echo "############################################" ;\ doc_anchor_check src/*.txt ;\ + env LC_ALL=C grep -n '[^ -~]' src/*.txt ;\ echo "############################################" ;\ deactivate ;\ ) From 5d88e125832b22de58f2aefe2f1cafa0c04dd51d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 25 Sep 2019 14:33:07 -0400 Subject: [PATCH 180/237] correct model comment and remove trailing whitespace --- examples/gcmc/CO2.txt | 14 +++++++------- examples/gcmc/H2O.txt | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/examples/gcmc/CO2.txt b/examples/gcmc/CO2.txt index 72e593e3f2..c9fb8616c2 100644 --- a/examples/gcmc/CO2.txt +++ b/examples/gcmc/CO2.txt @@ -12,15 +12,15 @@ Coords Types -1 1 -2 2 -3 2 +1 1 +2 2 +3 2 -Charges +Charges -1 0.7 -2 -0.35 -3 -0.35 +1 0.7 +2 -0.35 +3 -0.35 Bonds diff --git a/examples/gcmc/H2O.txt b/examples/gcmc/H2O.txt index b56f869693..e5a5e4fe93 100644 --- a/examples/gcmc/H2O.txt +++ b/examples/gcmc/H2O.txt @@ -1,4 +1,4 @@ -# CO2 molecule file. TraPPE model. +# Water molecule. SPC/E model. 3 atoms 2 bonds @@ -12,15 +12,15 @@ Coords Types -1 1 -2 2 -3 2 +1 1 +2 2 +3 2 -Charges +Charges 1 -0.8472 -2 0.4236 -3 0.4236 +2 0.4236 +3 0.4236 Bonds From 2be848e5df604d491e21fb11983c474652428f67 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 25 Sep 2019 15:41:45 -0600 Subject: [PATCH 181/237] Remove team from compute_yi --- src/KOKKOS/pair_snap_kokkos.h | 2 +- src/KOKKOS/pair_snap_kokkos_impl.h | 8 ++++---- src/KOKKOS/sna_kokkos.h | 2 +- src/KOKKOS/sna_kokkos_impl.h | 26 ++++++++++++++------------ 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/KOKKOS/pair_snap_kokkos.h b/src/KOKKOS/pair_snap_kokkos.h index 2193e9ff24..c37236df36 100644 --- a/src/KOKKOS/pair_snap_kokkos.h +++ b/src/KOKKOS/pair_snap_kokkos.h @@ -85,7 +85,7 @@ public: void operator() (TagPairSNAPComputeBi,const typename Kokkos::TeamPolicy::member_type& team) const; KOKKOS_INLINE_FUNCTION - void operator() (TagPairSNAPComputeYi,const typename Kokkos::TeamPolicy::member_type& team) const; + void operator() (TagPairSNAPComputeYi,const int& ii) const; KOKKOS_INLINE_FUNCTION void operator() (TagPairSNAPComputeDuidrj,const typename Kokkos::TeamPolicy::member_type& team) const; diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index 95afcc5ec7..df16309fc5 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -250,7 +250,8 @@ void PairSNAPKokkos::compute(int eflag_in, int vflag_in) Kokkos::parallel_for("ComputeBeta",policy_beta,*this); //ComputeYi - typename Kokkos::TeamPolicy policy_yi(chunk_size,yi_team_size,vector_length); + //typename Kokkos::TeamPolicy policy_yi(chunk_size,yi_team_size,vector_length); + typename Kokkos::RangePolicy policy_yi(0,chunk_size); Kokkos::parallel_for("ComputeYi",policy_yi,*this); //ComputeDuidrj @@ -529,10 +530,9 @@ void PairSNAPKokkos::operator() (TagPairSNAPComputeUi,const typename template KOKKOS_INLINE_FUNCTION -void PairSNAPKokkos::operator() (TagPairSNAPComputeYi,const typename Kokkos::TeamPolicy::member_type& team) const { - int ii = team.league_rank(); +void PairSNAPKokkos::operator() (TagPairSNAPComputeYi,const int &ii) const { SNAKokkos my_sna = snaKK; - my_sna.compute_yi(team,ii,d_beta); + my_sna.compute_yi(ii,d_beta); } template diff --git a/src/KOKKOS/sna_kokkos.h b/src/KOKKOS/sna_kokkos.h index 2dbfdcb47c..589b0ba971 100644 --- a/src/KOKKOS/sna_kokkos.h +++ b/src/KOKKOS/sna_kokkos.h @@ -90,7 +90,7 @@ inline KOKKOS_INLINE_FUNCTION void compute_zi(const typename Kokkos::TeamPolicy::member_type& team, int); // ForceSNAP KOKKOS_INLINE_FUNCTION - void compute_yi(const typename Kokkos::TeamPolicy::member_type& team, int, + void compute_yi(int, const Kokkos::View &beta); // ForceSNAP KOKKOS_INLINE_FUNCTION void compute_bi(const typename Kokkos::TeamPolicy::member_type& team, int); // ForceSNAP diff --git a/src/KOKKOS/sna_kokkos_impl.h b/src/KOKKOS/sna_kokkos_impl.h index 36765e9cd6..4eb3ae9a4e 100644 --- a/src/KOKKOS/sna_kokkos_impl.h +++ b/src/KOKKOS/sna_kokkos_impl.h @@ -386,25 +386,27 @@ void SNAKokkos::compute_zi(const typename Kokkos::TeamPolicy KOKKOS_INLINE_FUNCTION -void SNAKokkos::compute_yi(const typename Kokkos::TeamPolicy::member_type& team, int iatom, +void SNAKokkos::compute_yi(int iatom, const Kokkos::View &beta) { double betaj; const int ii = iatom; - { - Kokkos::parallel_for(Kokkos::TeamThreadRange(team,ylist.extent(1)), - [&] (const int& i) { + //{ + //Kokkos::parallel_for(Kokkos::TeamThreadRange(team,ylist.extent(1)), + // [&] (const int& i) { + for (int i = 0; i < ylist.extent(1); i++) { ylist(iatom,i).re = 0.0; ylist(iatom,i).im = 0.0; - }); - } + } + // }); + //} //int flopsum = 0; - Kokkos::parallel_for(Kokkos::TeamThreadRange(team,idxz_max), - [&] (const int& jjz) { - //for(int jjz = 0; jjz < idxz_max; jjz++) { + //Kokkos::parallel_for(Kokkos::TeamThreadRange(team,idxz_max), + // [&] (const int& jjz) { + for (int jjz = 0; jjz < idxz_max; jjz++) { const int j1 = idxz[jjz].j1; const int j2 = idxz[jjz].j2; const int j = idxz[jjz].j; @@ -474,12 +476,12 @@ void SNAKokkos::compute_yi(const typename Kokkos::TeamPolicy Date: Wed, 25 Sep 2019 16:15:25 -0600 Subject: [PATCH 182/237] WIP --- src/KOKKOS/pair_snap_kokkos_impl.h | 3 ++- src/KOKKOS/sna_kokkos.h | 3 ++- src/KOKKOS/sna_kokkos_impl.h | 35 ++++++++++++++++-------------- 3 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index df16309fc5..ed701393e4 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -250,8 +250,9 @@ void PairSNAPKokkos::compute(int eflag_in, int vflag_in) Kokkos::parallel_for("ComputeBeta",policy_beta,*this); //ComputeYi + int idxz_max = snaKK.idxz_max; //typename Kokkos::TeamPolicy policy_yi(chunk_size,yi_team_size,vector_length); - typename Kokkos::RangePolicy policy_yi(0,chunk_size); + typename Kokkos::RangePolicy policy_yi(0,chunk_size*idxz_max); Kokkos::parallel_for("ComputeYi",policy_yi,*this); //ComputeDuidrj diff --git a/src/KOKKOS/sna_kokkos.h b/src/KOKKOS/sna_kokkos.h index 589b0ba971..88cf963ee8 100644 --- a/src/KOKKOS/sna_kokkos.h +++ b/src/KOKKOS/sna_kokkos.h @@ -138,6 +138,8 @@ inline // derivatives of data t_sna_4c dulist; + int idxcg_max, idxu_max, idxz_max, idxb_max; + private: double rmin0, rfac0; @@ -145,7 +147,6 @@ private: // Same across all SNAKokkos Kokkos::View idxz; Kokkos::View idxb; - int idxcg_max, idxu_max, idxz_max, idxb_max; Kokkos::View idxcg_block; Kokkos::View idxu_block; Kokkos::View idxz_block; diff --git a/src/KOKKOS/sna_kokkos_impl.h b/src/KOKKOS/sna_kokkos_impl.h index 4eb3ae9a4e..60928a6515 100644 --- a/src/KOKKOS/sna_kokkos_impl.h +++ b/src/KOKKOS/sna_kokkos_impl.h @@ -386,27 +386,30 @@ void SNAKokkos::compute_zi(const typename Kokkos::TeamPolicy KOKKOS_INLINE_FUNCTION -void SNAKokkos::compute_yi(int iatom, +void SNAKokkos::compute_yi(int iter, const Kokkos::View &beta) { double betaj; - const int ii = iatom; + const int iatom = iter / idxz_max; + const int jjz = iter % idxz_max; + const int jju = idxz[jjz].jju; //{ //Kokkos::parallel_for(Kokkos::TeamThreadRange(team,ylist.extent(1)), // [&] (const int& i) { - for (int i = 0; i < ylist.extent(1); i++) { - ylist(iatom,i).re = 0.0; - ylist(iatom,i).im = 0.0; - } + //for (int i = 0; i < ylist.extent(1); i++) { + ylist(iatom,jju) = {0.0,0.0}; + // } // }); //} + + //int flopsum = 0; //Kokkos::parallel_for(Kokkos::TeamThreadRange(team,idxz_max), // [&] (const int& jjz) { - for (int jjz = 0; jjz < idxz_max; jjz++) { + //for (int jjz = 0; jjz < idxz_max; jjz++) { const int j1 = idxz[jjz].j1; const int j2 = idxz[jjz].j2; const int j = idxz[jjz].j; @@ -453,27 +456,27 @@ void SNAKokkos::compute_yi(int iatom, } // end loop over ib // apply to z(j1,j2,j,ma,mb) to unique element of y(j) - // find right y_list[jju] and beta(ii,jjb) entries + // find right y_list[jju] and beta(iatom,jjb) entries // multiply and divide by j+1 factors // account for multiplicity of 1, 2, or 3 - const int jju = idxz[jjz].jju; + //const int jju = idxz[jjz].jju; // pick out right beta value if (j >= j1) { const int jjb = idxb_block(j1,j2,j); if (j1 == j) { - if (j2 == j) betaj = 3*beta(ii,jjb); - else betaj = 2*beta(ii,jjb); - } else betaj = beta(ii,jjb); + if (j2 == j) betaj = 3*beta(iatom,jjb); + else betaj = 2*beta(iatom,jjb); + } else betaj = beta(iatom,jjb); } else if (j >= j2) { const int jjb = idxb_block(j,j2,j1); - if (j2 == j) betaj = 2*beta(ii,jjb)*(j1+1)/(j+1.0); - else betaj = beta(ii,jjb)*(j1+1)/(j+1.0); + if (j2 == j) betaj = 2*beta(iatom,jjb)*(j1+1)/(j+1.0); + else betaj = beta(iatom,jjb)*(j1+1)/(j+1.0); } else { const int jjb = idxb_block(j2,j,j1); - betaj = beta(ii,jjb)*(j1+1)/(j+1.0); + betaj = beta(iatom,jjb)*(j1+1)/(j+1.0); } //Kokkos::single(Kokkos::PerThread(team), [&] () { @@ -481,7 +484,7 @@ void SNAKokkos::compute_yi(int iatom, Kokkos::atomic_add(&(ylist(iatom,jju).im), betaj*ztmp_i); //}); - }//); // end loop over jjz + //}//); // end loop over jjz //printf("sum %i\n",flopsum); } From b771225f3d7435b942334bd611eba522d534179b Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Wed, 25 Sep 2019 17:19:27 -0700 Subject: [PATCH 183/237] Edit gjf option syntax within fix_langevin.txt --- doc/src/fix_langevin.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/src/fix_langevin.txt b/doc/src/fix_langevin.txt index 8d489a27d1..e77e676158 100644 --- a/doc/src/fix_langevin.txt +++ b/doc/src/fix_langevin.txt @@ -24,9 +24,10 @@ keyword = {angmom} or {omega} or {scale} or {tally} or {zero} :l {angmom} value = {no} or factor {no} = do not thermostat rotational degrees of freedom via the angular momentum factor = do thermostat rotational degrees of freedom via the angular momentum and apply numeric scale factor as discussed below - {gjf} value = {no} or {yes} + {gjf} value = {no} or {vfull} or {vhalf} {no} = use standard formulation - {yes} = use Gronbech-Jensen/Farago formulation + {vfull} = use Gronbech-Jensen/Farago formulation + {vhalf} = use 2GJ formulation {omega} value = {no} or {yes} {no} = do not thermostat rotational degrees of freedom via the angular velocity {yes} = do thermostat rotational degrees of freedom via the angular velocity From 5927f056c58e6d03fe3112ac497ed11973bd2ed2 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Wed, 25 Sep 2019 17:22:15 -0700 Subject: [PATCH 184/237] Removed redundant and out of scope gjf info from fix_langevin.txt --- doc/src/fix_langevin.txt | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/doc/src/fix_langevin.txt b/doc/src/fix_langevin.txt index e77e676158..07d8b274aa 100644 --- a/doc/src/fix_langevin.txt +++ b/doc/src/fix_langevin.txt @@ -255,20 +255,6 @@ Regardless of the choice of output velocity, the sampling of the configurational distribution of atom positions is the same, and linearly consistent with the target temperature. -An example of a reason why to use the {gjf} keyword is the freedom to take a larger time step, -up to the stability limit, while maintaining robust statistics. It is crucial to -recall that while the equilibrium statistics is appropriately sampled, the correct dynamics -of the trajectories may not be for large time steps, as is the case for all thermostats. -All thermostats provide good statistics and dynamics for small time steps. -The 2GJ half-step velocity {vhalf} samples the correct velocity distribution for the {gjf} trajectory. - -This updated implementation of the {gjf} thermostat includes the choice between -outputting either the on-site {vfull} or half-step {vhalf} velocity. The on-site -velocity has been updated to be the GJF on-site velocity, and the half-step -velocity is the statistically correct 2GJ velocity. The implementation -also takes advantage of Gaussian distributed random numbers in order to achieve -correct fluctuations. - :line Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are From ca159b7b201893e6be10a784f8ceedd47d08d802 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Wed, 25 Sep 2019 17:30:41 -0700 Subject: [PATCH 185/237] Fix langevin removed gjf special message and adapted whitespace style --- src/fix_langevin.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index b5777cb5a4..f805fddb4b 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -112,10 +112,14 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : } else if (strcmp(arg[iarg],"gjf") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command"); if (strcmp(arg[iarg+1],"no") == 0) {gjfflag = 0; osflag = 0;} - else if (strcmp(arg[iarg+1],"yes") == 0) - error->all(FLERR,"Fix langevin gjf yes is outdated, please use vhalf or vfull"); - else if (strcmp(arg[iarg+1],"vhalf") == 0) {gjfflag = 1; osflag = 0;} - else if (strcmp(arg[iarg+1],"vfull") == 0) {gjfflag = 1; osflag = 1;} + else if (strcmp(arg[iarg+1],"vfull") == 0) { + gjfflag = 1; + osflag = 1; + } + else if (strcmp(arg[iarg+1],"vhalf") == 0) { + gjfflag = 1; + osflag = 0; + } else error->all(FLERR,"Illegal fix langevin command"); iarg += 2; } else if (strcmp(arg[iarg],"omega") == 0) { From 67a284c28ada485fbd99dad05d96ea3c2478cef6 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 26 Sep 2019 11:44:12 -0600 Subject: [PATCH 186/237] Collapse loop in compute_zi --- src/KOKKOS/pair_snap_kokkos.h | 2 +- src/KOKKOS/pair_snap_kokkos_impl.h | 8 ++-- src/KOKKOS/sna_kokkos.h | 32 ++++--------- src/KOKKOS/sna_kokkos_impl.h | 76 +++++++++++++++--------------- 4 files changed, 52 insertions(+), 66 deletions(-) diff --git a/src/KOKKOS/pair_snap_kokkos.h b/src/KOKKOS/pair_snap_kokkos.h index 7f2a6a14d5..8586c4bdab 100644 --- a/src/KOKKOS/pair_snap_kokkos.h +++ b/src/KOKKOS/pair_snap_kokkos.h @@ -80,7 +80,7 @@ public: void operator() (TagPairSNAPComputeUi,const typename Kokkos::TeamPolicy::member_type& team) const; KOKKOS_INLINE_FUNCTION - void operator() (TagPairSNAPComputeZi,const typename Kokkos::TeamPolicy::member_type& team) const; + void operator() (TagPairSNAPComputeZi,const int& ii) const; KOKKOS_INLINE_FUNCTION void operator() (TagPairSNAPComputeBi,const typename Kokkos::TeamPolicy::member_type& team) const; diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index 0c4bc79c54..02c8554fa5 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -230,7 +230,8 @@ void PairSNAPKokkos::compute(int eflag_in, int vflag_in) //Compute bispectrum if (quadraticflag || eflag) { //ComputeZi - typename Kokkos::TeamPolicy policy_zi(chunk_size,team_size,vector_length); + int idxz_max = snaKK.idxz_max; + typename Kokkos::RangePolicy policy_zi(0,chunk_size*idxz_max); Kokkos::parallel_for("ComputeZi",policy_zi,*this); //ComputeBi @@ -540,10 +541,9 @@ void PairSNAPKokkos::operator() (TagPairSNAPComputeYi,const int& ii) template KOKKOS_INLINE_FUNCTION -void PairSNAPKokkos::operator() (TagPairSNAPComputeZi,const typename Kokkos::TeamPolicy::member_type& team) const { - int ii = team.league_rank(); +void PairSNAPKokkos::operator() (TagPairSNAPComputeZi,const int& ii) const { SNAKokkos my_sna = snaKK; - my_sna.compute_zi(team,ii); + my_sna.compute_zi(ii); } template diff --git a/src/KOKKOS/sna_kokkos.h b/src/KOKKOS/sna_kokkos.h index af16daf970..7aa154c3d5 100644 --- a/src/KOKKOS/sna_kokkos.h +++ b/src/KOKKOS/sna_kokkos.h @@ -29,27 +29,17 @@ typedef double SNAreal; //typedef struct { SNAreal re, im; } SNAcomplex; struct alignas(2*sizeof(SNAreal)) SNAcomplex{ - SNAreal re, im; + SNAreal re, im; - KOKKOS_INLINE_FUNCTION - SNAcomplex() : re(0),im(0) - {;} + KOKKOS_INLINE_FUNCTION + SNAcomplex() : re(0),im(0) + {} - KOKKOS_INLINE_FUNCTION - SNAcomplex(SNAreal real_in, SNAreal imag_in) - :re(real_in),im(imag_in) - {;} - -#ifdef __CUDACC__ - KOKKOS_INLINE_FUNCTION - SNAcomplex(double2 ref) - :re(ref.x),im(ref.y) - {;} - - operator double2() { return make_double2(re,im); } -#endif - -} ; + KOKKOS_INLINE_FUNCTION + SNAcomplex(SNAreal real_in, SNAreal imag_in) + :re(real_in),im(imag_in) + {} +}; //struct SNAKK_ZINDICES { // int j1, j2, j, ma1min, ma2max, mb1min, mb2max, na, nb, jju; @@ -125,8 +115,6 @@ inline inline void transpose_ulisttot(); -inline - void zero_yi(); // functions for bispectrum coefficients KOKKOS_INLINE_FUNCTION @@ -136,7 +124,7 @@ inline KOKKOS_INLINE_FUNCTION void compute_ui_orig(const typename Kokkos::TeamPolicy::member_type& team, int, int); // ForceSNAP KOKKOS_INLINE_FUNCTION - void compute_zi(const typename Kokkos::TeamPolicy::member_type& team, int); // ForceSNAP + void compute_zi(const int&); // ForceSNAP KOKKOS_INLINE_FUNCTION void zero_yi(const int&); KOKKOS_INLINE_FUNCTION diff --git a/src/KOKKOS/sna_kokkos_impl.h b/src/KOKKOS/sna_kokkos_impl.h index 38f7b16ed4..3e4ebc2e42 100644 --- a/src/KOKKOS/sna_kokkos_impl.h +++ b/src/KOKKOS/sna_kokkos_impl.h @@ -289,54 +289,52 @@ void SNAKokkos::compute_ui(const typename Kokkos::TeamPolicy KOKKOS_INLINE_FUNCTION -void SNAKokkos::compute_zi(const typename Kokkos::TeamPolicy::member_type& team, int iatom) +void SNAKokkos::compute_zi(const int& iter) { - Kokkos::parallel_for(Kokkos::TeamThreadRange(team,idxz_max), - [&] (const int& jjz) { - //for(int jjz = 0; jjz < idxz_max; jjz++) { - const int j1 = idxz(jjz,0); - const int j2 = idxz(jjz,1); - const int j = idxz(jjz,2); - const int ma1min = idxz(jjz,3); - const int ma2max = idxz(jjz,4); - const int mb1min = idxz(jjz,5); - const int mb2max = idxz(jjz,6); - const int na = idxz(jjz,7); - const int nb = idxz(jjz,8); + const int iatom = iter / idxz_max; + const int jjz = iter % idxz_max; - const double* cgblock = cglist.data() + idxcg_block(j1,j2,j); + const int j1 = idxz(jjz,0); + const int j2 = idxz(jjz,1); + const int j = idxz(jjz,2); + const int ma1min = idxz(jjz,3); + const int ma2max = idxz(jjz,4); + const int mb1min = idxz(jjz,5); + const int mb2max = idxz(jjz,6); + const int na = idxz(jjz,7); + const int nb = idxz(jjz,8); - zlist(iatom,jjz).re = 0.0; - zlist(iatom,jjz).im = 0.0; + const double* cgblock = cglist.data() + idxcg_block(j1,j2,j); - int jju1 = idxu_block[j1] + (j1+1)*mb1min; - int jju2 = idxu_block[j2] + (j2+1)*mb2max; - int icgb = mb1min*(j2+1) + mb2max; - for(int ib = 0; ib < nb; ib++) { + zlist(iatom,jjz).re = 0.0; + zlist(iatom,jjz).im = 0.0; - double suma1_r = 0.0; - double suma1_i = 0.0; + int jju1 = idxu_block[j1] + (j1+1)*mb1min; + int jju2 = idxu_block[j2] + (j2+1)*mb2max; + int icgb = mb1min*(j2+1) + mb2max; + for(int ib = 0; ib < nb; ib++) { - int ma1 = ma1min; - int ma2 = ma2max; - int icga = ma1min*(j2+1) + ma2max; - for(int ia = 0; ia < na; ia++) { - suma1_r += cgblock[icga] * (ulisttot(iatom,jju1+ma1).re * ulisttot(iatom,jju2+ma2).re - ulisttot(iatom,jju1+ma1).im * ulisttot(iatom,jju2+ma2).im); - suma1_i += cgblock[icga] * (ulisttot(iatom,jju1+ma1).re * ulisttot(iatom,jju2+ma2).im + ulisttot(iatom,jju1+ma1).im * ulisttot(iatom,jju2+ma2).re); - ma1++; - ma2--; - icga += j2; - } // end loop over ia + double suma1_r = 0.0; + double suma1_i = 0.0; - zlist(iatom,jjz).re += cgblock[icgb] * suma1_r; - zlist(iatom,jjz).im += cgblock[icgb] * suma1_i; + int ma1 = ma1min; + int ma2 = ma2max; + int icga = ma1min*(j2+1) + ma2max; + for(int ia = 0; ia < na; ia++) { + suma1_r += cgblock[icga] * (ulisttot(iatom,jju1+ma1).re * ulisttot(iatom,jju2+ma2).re - ulisttot(iatom,jju1+ma1).im * ulisttot(iatom,jju2+ma2).im); + suma1_i += cgblock[icga] * (ulisttot(iatom,jju1+ma1).re * ulisttot(iatom,jju2+ma2).im + ulisttot(iatom,jju1+ma1).im * ulisttot(iatom,jju2+ma2).re); + ma1++; + ma2--; + icga += j2; + } // end loop over ia - jju1 += j1+1; - jju2 -= j2+1; - icgb += j2; - } // end loop over ib + zlist(iatom,jjz).re += cgblock[icgb] * suma1_r; + zlist(iatom,jjz).im += cgblock[icgb] * suma1_i; - }); // end loop over jjz + jju1 += j1+1; + jju2 -= j2+1; + icgb += j2; + } // end loop over ib } /* ---------------------------------------------------------------------- From 8c4798b692c714c44a3eb335026321b82063ddb0 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Thu, 26 Sep 2019 12:39:55 -0700 Subject: [PATCH 187/237] added dynamical matrix python script --- .../dynamical_matrix_command/python/README.md | 12 ++++++ .../dynamical_matrix_command/python/dynmat.py | 42 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100755 examples/USER/phonon/dynamical_matrix_command/python/README.md create mode 100644 examples/USER/phonon/dynamical_matrix_command/python/dynmat.py diff --git a/examples/USER/phonon/dynamical_matrix_command/python/README.md b/examples/USER/phonon/dynamical_matrix_command/python/README.md new file mode 100755 index 0000000000..5b3c11febd --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/python/README.md @@ -0,0 +1,12 @@ +# LAMMPS LATTICE DYNAMICS COMMANDS + +## DYNAMICAL MATRIX CALCULATOR + +This directory contains the ingredients to calculate a dynamical matrix with python. + +Example: +``` +python dynmat.py +``` + +## Requires: MANYBODY and MOLECULE packages and the Python Library Interface diff --git a/examples/USER/phonon/dynamical_matrix_command/python/dynmat.py b/examples/USER/phonon/dynamical_matrix_command/python/dynmat.py new file mode 100644 index 0000000000..2a3a0b5a2f --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/python/dynmat.py @@ -0,0 +1,42 @@ +"""Made by Charlie Sievers Ph.D. Candidate, UC Davis, Donadio Lab 2019""" +# from mpi4py import MPI +from lammps import lammps +import numpy as np + +# comm = MPI.COMM_WORLD +# rank = comm.Get_rank() + +""" LAMMPS VARIABLES """ + +# data files +infile = "silicon_input_file.lmp" +ff_file = "ff-silicon.lmp" + +# full output useful for testing +lmp = lammps() + +# reduced output useful reducing IO for production runs +# lmp = lammps(cmdargs=["-screen", "none", "-log", "none"]) + +# lammps commands +lmp.command("atom_style full") +lmp.command("units metal") +lmp.command("processors * * *") +lmp.command("neighbor 1 bin") +lmp.command("boundary p p p") + +# read data and force field file +lmp.command("read_data {}".format(infile)) +lmp.file("{}".format(ff_file)) + +lmp.command("dynamical_matrix all eskm 0.000001 file dynmat.dat") + +dynmat = np.loadtxt("dynmat.dat") +dynlen = int(3*np.sqrt(len(dynmat)/3)) +dynmat = dynmat.reshape((dynlen, dynlen)) + +eigvals, eigvecs = np.linalg.eig(dynmat) + +# frequencies in THz +omegas = np.sqrt(np.abs(eigvals)) +print(omegas) From 12803b7dcfd8f04cd604e0ce1f6696391f34fa5e Mon Sep 17 00:00:00 2001 From: "Jibril B. Coulibaly" Date: Thu, 26 Sep 2019 16:01:24 -0500 Subject: [PATCH 188/237] add newton_pair flag to ev_tally_xyz function --- src/GRANULAR/pair_granular.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 0b1a6eb09a..43bcec5181 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -635,7 +635,7 @@ void PairGranular::compute(int eflag, int vflag) torque[j][2] -= torroll3; } } - if (evflag) ev_tally_xyz(i,j,nlocal,0, + if (evflag) ev_tally_xyz(i,j,nlocal,force->newton_pair, 0.0,0.0,fx,fy,fz,delx,dely,delz); } } From 23040a98f8e87b4b3bddc5cb66b221cba0040465 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sat, 28 Sep 2019 23:10:34 -0600 Subject: [PATCH 189/237] adds an angle constraint option for reacting molecules also, previously, reaction templates had to contain more than two atoms --- doc/src/fix_bond_react.txt | 17 +++-- src/USER-MISC/fix_bond_react.cpp | 112 ++++++++++++++++++++++++------- src/USER-MISC/fix_bond_react.h | 4 +- 3 files changed, 104 insertions(+), 29 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index 4f4506944f..fb8ed95afb 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -266,7 +266,7 @@ either 'none' or 'charges.' Further details are provided in the discussion of the 'update_edges' keyword. The fourth optional section begins with the keyword 'Constraints' and lists additional criteria that must be satisfied in order for the reaction to occur. Currently, -there is one type of constraint available, as discussed below. +there are two types of constraints available, as discussed below. A sample map file is given below: @@ -300,14 +300,23 @@ Equivalences :pre :line Any number of additional constraints may be specified in the -Constraints section of the map file. Currently there is one type of -additional constraint, of type 'distance', whose syntax is as follows: +Constraints section of the map file. The constraint of type 'distance' +has syntax as follows: distance {ID1} {ID2} {rmin} {rmax} :pre where 'distance' is the required keyword, {ID1} and {ID2} are pre-reaction atom IDs, and these two atoms must be separated by a -distance between {rmin} and {rmax} for the reaction to occur. This +distance between {rmin} and {rmax} for the reaction to occur. + +The constraint of type 'angle' has the following syntax: + +angle {ID1} {ID2} {ID3} {amin} {amax} :pre + +where 'angle' is the required keyword, {ID1}, {ID2} and {ID3} are +pre-reaction atom IDs, and these three atoms must form an angle +between {amin} and {amax} for the reaction to occur (where {ID2} is +the central atom). Angles must be specified in degrees. This constraint can be used to enforce a certain orientation between reacting molecules. diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index 6b61a7b84d..5bf6ed68b9 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -35,6 +35,7 @@ Contributing Author: Jacob Gissinger (jacob.gissinger@colorado.edu) #include "molecule.h" #include "group.h" #include "citeme.h" +#include "math_const.h" #include "memory.h" #include "error.h" @@ -42,6 +43,7 @@ Contributing Author: Jacob Gissinger (jacob.gissinger@colorado.edu) using namespace LAMMPS_NS; using namespace FixConst; +using namespace MathConst; static const char cite_fix_bond_react[] = "fix bond/react:\n\n" @@ -57,7 +59,7 @@ static const char cite_fix_bond_react[] = #define BIG 1.0e20 #define DELTA 16 #define MAXGUESS 20 // max # of guesses allowed by superimpose algorithm -#define MAXCONARGS 5 // max # of arguments for any type of constraint +#define MAXCONARGS 7 // max # of arguments for any type of constraint + rxnID // various statuses of superimpose algorithm: // ACCEPT: site successfully matched to pre-reacted template @@ -68,6 +70,9 @@ static const char cite_fix_bond_react[] = // RESTORE: restore mode, load most recent restore point enum{ACCEPT,REJECT,PROCEED,CONTINUE,GUESSFAIL,RESTORE}; +// types of available reaction constraints +enum{DISTANCE,ANGLE}; + /* ---------------------------------------------------------------------- */ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : @@ -94,6 +99,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : global_freq = 1; extvector = 0; rxnID = 0; + nconstraints = 0; status = PROCEED; nxspecial = NULL; @@ -169,8 +175,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : memory->create(limit_duration,nreacts,"bond/react:limit_duration"); memory->create(stabilize_steps_flag,nreacts,"bond/react:stabilize_steps_flag"); memory->create(update_edges_flag,nreacts,"bond/react:update_edges_flag"); - memory->create(nconstraints,nreacts,"bond/react:nconstraints"); - memory->create(constraints,nreacts,MAXCONARGS,"bond/react:constraints"); + memory->create(constraints,1,MAXCONARGS,"bond/react:constraints"); memory->create(iatomtype,nreacts,"bond/react:iatomtype"); memory->create(jatomtype,nreacts,"bond/react:jatomtype"); memory->create(ibonding,nreacts,"bond/react:ibonding"); @@ -188,7 +193,6 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : max_rxn[i] = INT_MAX; stabilize_steps_flag[i] = 0; update_edges_flag[i] = 0; - nconstraints[i] = 0; // set default limit duration to 60 timesteps limit_duration[i] = 60; reaction_count[i] = 0; @@ -1138,6 +1142,22 @@ void FixBondReact::superimpose_algorithm() glove[myjbonding-1][1] = created[lcl_inst][1][rxnID]; glove_counter++; + // special case, only two atoms in reaction templates + // then: bonding onemol_nxspecials guaranteed to be equal, and either 0 or 1 + if (glove_counter == onemol->natoms) { + tagint local_atom1 = atom->map(glove[myibonding-1][1]); + tagint local_atom2 = atom->map(glove[myjbonding-1][1]); + if ( (nxspecial[local_atom1][0] == onemol_nxspecial[myibonding-1][0] && + nxspecial[local_atom2][0] == nxspecial[local_atom1][0]) && + (nxspecial[local_atom1][0] == 0 || + xspecial[local_atom1][0] == atom->tag[local_atom2]) && + check_constraints() ) { + status = ACCEPT; + glove_ghostcheck(); + } else + status = REJECT; + } + avail_guesses = 0; for (int i = 0; i < max_natoms; i++) @@ -1617,21 +1637,50 @@ evaluate constraints: return 0 if any aren't satisfied int FixBondReact::check_constraints() { - tagint atom1,atom2; + tagint atom1,atom2,atom3; double delx,dely,delz,rsq; + double delx1,dely1,delz1,delx2,dely2,delz2; + double rsq1,rsq2,r1,r2,c; double **x = atom->x; - for (int i = 0; i < nconstraints[rxnID]; i++) { - if (constraints[rxnID][0] == 0) { // 'distance' type - atom1 = atom->map(glove[(int) constraints[rxnID][1]-1][1]); - atom2 = atom->map(glove[(int) constraints[rxnID][2]-1][1]); - delx = x[atom1][0] - x[atom2][0]; - dely = x[atom1][1] - x[atom2][1]; - delz = x[atom1][2] - x[atom2][2]; - domain->minimum_image(delx,dely,delz); // ghost location fix - rsq = delx*delx + dely*dely + delz*delz; - if (rsq < constraints[rxnID][3] || rsq > constraints[rxnID][4]) return 0; + for (int i = 0; i < nconstraints; i++) { + if (constraints[i][0] == rxnID) { + if (constraints[i][1] == DISTANCE) { + atom1 = atom->map(glove[(int) constraints[i][2]-1][1]); + atom2 = atom->map(glove[(int) constraints[i][3]-1][1]); + delx = x[atom1][0] - x[atom2][0]; + dely = x[atom1][1] - x[atom2][1]; + delz = x[atom1][2] - x[atom2][2]; + domain->minimum_image(delx,dely,delz); // ghost location fix + rsq = delx*delx + dely*dely + delz*delz; + if (rsq < constraints[i][4] || rsq > constraints[i][5]) return 0; + } else if (constraints[i][1] == ANGLE) { + atom1 = atom->map(glove[(int) constraints[i][2]-1][1]); + atom2 = atom->map(glove[(int) constraints[i][3]-1][1]); + atom3 = atom->map(glove[(int) constraints[i][4]-1][1]); + + // 1st bond + delx1 = x[atom1][0] - x[atom2][0]; + dely1 = x[atom1][1] - x[atom2][1]; + delz1 = x[atom1][2] - x[atom2][2]; + rsq1 = delx1*delx1 + dely1*dely1 + delz1*delz1; + r1 = sqrt(rsq1); + + // 2nd bond + delx2 = x[atom3][0] - x[atom2][0]; + dely2 = x[atom3][1] - x[atom2][1]; + delz2 = x[atom3][2] - x[atom2][2]; + rsq2 = delx2*delx2 + dely2*dely2 + delz2*delz2; + r2 = sqrt(rsq2); + + // angle (cos and sin) + c = delx1*delx2 + dely1*dely2 + delz1*delz2; + c /= r1*r2; + if (c > 1.0) c = 1.0; + if (c < -1.0) c = -1.0; + if (acos(c) < constraints[i][5] || acos(c) > constraints[i][6]) return 0; + } } } return 1; @@ -2757,13 +2806,20 @@ void FixBondReact::read(int myrxn) if (strspn(line," \t\n\r") == strlen(line)) continue; if (strstr(line,"edgeIDs")) sscanf(line,"%d",&nedge); - else if (strstr(line,"equivalences")) sscanf(line,"%d",&nequivalent); + else if (strstr(line,"equivalences")) { + sscanf(line,"%d",&nequivalent); + if (nequivalent != onemol->natoms) + error->one(FLERR,"Bond/react: Number of equivalences in map file must " + "equal number of atoms in reaction templates"); + } else if (strstr(line,"customIDs")) sscanf(line,"%d",&ncustom); else if (strstr(line,"deleteIDs")) sscanf(line,"%d",&ndelete); - else if (strstr(line,"constraints")) sscanf(line,"%d",&nconstraints[myrxn]); + else if (strstr(line,"constraints")) sscanf(line,"%d",&nconstr); else break; } + memory->grow(constraints,nconstraints+nconstr,MAXCONARGS,"bond/react:constraints"); + //count = NULL; // grab keyword and skip next line @@ -2874,18 +2930,28 @@ void FixBondReact::Constraints(char *line, int myrxn) double tmp[MAXCONARGS]; int n = strlen("distance") + 1; char *constraint_type = new char[n]; - for (int i = 0; i < nconstraints[myrxn]; i++) { + for (int i = 0; i < nconstr; i++) { readline(line); sscanf(line,"%s",constraint_type); + constraints[nconstraints][0] = myrxn; if (strcmp(constraint_type,"distance") == 0) { - constraints[myrxn][0] = 0; // 0 = 'distance' ...maybe use another enum eventually + constraints[nconstraints][1] = DISTANCE; sscanf(line,"%*s %lg %lg %lg %lg",&tmp[0],&tmp[1],&tmp[2],&tmp[3]); - constraints[myrxn][1] = tmp[0]; - constraints[myrxn][2] = tmp[1]; - constraints[myrxn][3] = tmp[2]*tmp[2]; // using square of distance - constraints[myrxn][4] = tmp[3]*tmp[3]; + constraints[nconstraints][2] = tmp[0]; + constraints[nconstraints][3] = tmp[1]; + constraints[nconstraints][4] = tmp[2]*tmp[2]; // using square of distance + constraints[nconstraints][5] = tmp[3]*tmp[3]; + } else if (strcmp(constraint_type,"angle") == 0) { + constraints[nconstraints][1] = ANGLE; + sscanf(line,"%*s %lg %lg %lg %lg %lg",&tmp[0],&tmp[1],&tmp[2],&tmp[3],&tmp[4]); + constraints[nconstraints][2] = tmp[0]; + constraints[nconstraints][3] = tmp[1]; + constraints[nconstraints][4] = tmp[2]; + constraints[nconstraints][5] = tmp[3]/180.0 * MY_PI; + constraints[nconstraints][6] = tmp[4]/180.0 * MY_PI; } else error->one(FLERR,"Bond/react: Illegal constraint type in 'Constraints' section of map file"); + nconstraints++; } delete [] constraint_type; } diff --git a/src/USER-MISC/fix_bond_react.h b/src/USER-MISC/fix_bond_react.h index e5452cb226..eda26f129d 100644 --- a/src/USER-MISC/fix_bond_react.h +++ b/src/USER-MISC/fix_bond_react.h @@ -64,7 +64,7 @@ class FixBondReact : public Fix { int custom_exclude_flag; int *stabilize_steps_flag; int *update_edges_flag; - int *nconstraints; + int nconstraints; double **constraints; int status; int *groupbits; @@ -108,7 +108,7 @@ class FixBondReact : public Fix { int *ibonding,*jbonding; int *closeneigh; // indicates if bonding atoms of a rxn are 1-2, 1-3, or 1-4 neighbors - int nedge,nequivalent,ncustom,ndelete; // number of edge, equivalent, custom atoms in mapping file + int nedge,nequivalent,ncustom,ndelete,nconstr; // # edge, equivalent, custom atoms in mapping file int attempted_rxn; // there was an attempt! int *local_rxn_count; int *ghostly_rxn_count; From 14933958f78d0e1fc174931349fba64b060e97fa Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 30 Sep 2019 14:55:33 +0000 Subject: [PATCH 190/237] change units --- doc/src/min_modify.txt | 6 +++--- doc/src/neb_spin.txt | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/src/min_modify.txt b/doc/src/min_modify.txt index 06c1f7514f..411f43f3b1 100644 --- a/doc/src/min_modify.txt +++ b/doc/src/min_modify.txt @@ -101,9 +101,9 @@ and {spin/cg}. Convergence of {spin/lbfgs} can be more robust if [Restrictions:] -The line search procedure of styles {spin/cg} and {spin/lbfgs} cannot be -used for magnetic GNEB calculations. See "neb/spin"_neb_spin.html for more -explanation. +For magnetic GNEB calculations, only {spin_none} value for {line} keyword can be used +when styles {spin/cg} and {spin/lbfgs} are employed. +See "neb/spin"_neb_spin.html for more explanation. [Related commands:] diff --git a/doc/src/neb_spin.txt b/doc/src/neb_spin.txt index b64df39219..0d093979a6 100644 --- a/doc/src/neb_spin.txt +++ b/doc/src/neb_spin.txt @@ -359,8 +359,8 @@ This command can only be used if LAMMPS was built with the SPIN package. See the "Build package"_Build_package.html doc page for more info. -The line search procedures of the {spin/cg} and {spin/lbfgs} -minimization styles cannot be used in a GNEB calculation. +For magnetic GNEB calculations, only {spin_none} value for {line} keyword can be used +when styles {spin/cg} and {spin/lbfgs} are employed. :line From 6cd460072be8be34963ef0b4289481b75eeaf1df Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 30 Sep 2019 11:01:41 -0400 Subject: [PATCH 191/237] add docs for dump_modify time yes. consolidate keywords --- doc/src/dump_modify.txt | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/doc/src/dump_modify.txt b/doc/src/dump_modify.txt index 994e9fea3c..63a3476d30 100644 --- a/doc/src/dump_modify.txt +++ b/doc/src/dump_modify.txt @@ -15,7 +15,7 @@ dump_modify dump-ID keyword values ... :pre dump-ID = ID of dump to modify :ulb,l one or more keyword/value pairs may be appended :l these keywords apply to various dump styles :l -keyword = {append} or {at} or {buffer} or {delay} or {element} or {every} or {fileper} or {first} or {flush} or {format} or {image} or {label} or {maxfiles} or {nfile} or {pad} or {precision} or {region} or {scale} or {sort} or {thresh} or {unwrap} :l +keyword = {append} or {at} or {buffer} or {delay} or {element} or {every} or {fileper} or {first} or {flush} or {format} or {image} or {label} or {maxfiles} or {nfile} or {pad} or {pbc} or {precision} or {region} or {refresh} or {scale} or {sfactor} or {sort} or {tfactor} or {thermo} or {thresh} or {time} or {units} or {unwrap} :l {append} arg = {yes} or {no} {at} arg = N N = index of frame written upon first dump @@ -30,10 +30,10 @@ keyword = {append} or {at} or {buffer} or {delay} or {element} or {every} or {fi {fileper} arg = Np Np = write one file for every this many processors {first} arg = {yes} or {no} + {flush} arg = {yes} or {no} {format} args = {line} string, {int} string, {float} string, M string, or {none} string = C-style format string M = integer from 1 to N, where N = # of per-atom quantities being output - {flush} arg = {yes} or {no} {image} arg = {yes} or {no} {label} arg = string string = character string (e.g. BONDS) to use in header of dump local file @@ -48,19 +48,20 @@ keyword = {append} or {at} or {buffer} or {delay} or {element} or {every} or {fi {refresh} arg = c_ID = compute ID that supports a refresh operation {scale} arg = {yes} or {no} {sfactor} arg = coordinate scaling factor (> 0.0) - {thermo} arg = {yes} or {no} - {tfactor} arg = time scaling factor (> 0.0) - {units} arg = {yes} or {no} {sort} arg = {off} or {id} or N or -N off = no sorting of per-atom lines within a snapshot id = sort per-atom lines by atom ID N = sort per-atom lines in ascending order by the Nth column -N = sort per-atom lines in descending order by the Nth column + {tfactor} arg = time scaling factor (> 0.0) + {thermo} arg = {yes} or {no} + {time} arg = {yes} or {no} {thresh} args = attribute operator value attribute = same attributes (x,fy,etotal,sxx,etc) used by dump custom style operator = "<" or "<=" or ">" or ">=" or "==" or "!=" or "|^" value = numeric value to compare to, or LAST these 3 args can be replaced by the word "none" to turn off thresholding + {units} arg = {yes} or {no} {unwrap} arg = {yes} or {no} :pre these keywords apply only to the {image} and {movie} "styles"_dump_image.html :l keyword = {acolor} or {adiam} or {amap} or {backcolor} or {bcolor} or {bdiam} or {boxcolor} or {color} or {bitrate} or {framerate} :l @@ -621,6 +622,22 @@ threshold criterion is met. Otherwise it is not met. :line +The {time} keyword only applies to the dump {atom}, {custom}, and +{local} styles (and their COMPRESS package versions {atom/gz}, +{custom/gz} and {local/gz}). If set to {yes}, each frame will will +contain two extra lines before the "ITEM: TIMESTEP" entry: + +ITEM: TIME +\ :pre + +This will output the current elapsed simulation time in current +time units equivalent to the "thermo keyword"_thermo_style.html {time}. +This is to simplify post-processing of trajectories using a variable time +step, e.g. when using "fix dt/reset"_fix_dt_reset.html. +The default setting is {no}. + +:line + The {units} keyword only applies to the dump {atom}, {custom}, and {local} styles (and their COMPRESS package versions {atom/gz}, {custom/gz} and {local/gz}). If set to {yes}, each individual dump From 01214de6bd1f54d34151bb1d312beb118797611a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 30 Sep 2019 11:03:22 -0400 Subject: [PATCH 192/237] add support for adding an ITEM: TIME output to some dump files --- src/COMPRESS/dump_atom_gz.cpp | 2 ++ src/COMPRESS/dump_custom_gz.cpp | 2 ++ src/COMPRESS/dump_local_gz.cpp | 2 ++ src/dump.cpp | 14 ++++++++++++++ src/dump.h | 2 ++ src/dump_atom.cpp | 6 +++++- src/dump_custom.cpp | 8 ++++++-- src/dump_local.cpp | 2 ++ 8 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/COMPRESS/dump_atom_gz.cpp b/src/COMPRESS/dump_atom_gz.cpp index 78f2c6d4f7..9be8d17b06 100644 --- a/src/COMPRESS/dump_atom_gz.cpp +++ b/src/COMPRESS/dump_atom_gz.cpp @@ -112,6 +112,8 @@ void DumpAtomGZ::write_header(bigint ndump) ++unit_count; gzprintf(gzFp,"ITEM: UNITS\n%s\n",update->unit_style); } + if (time_flag) gzprintf(gzFp,"ITEM: TIME\n%.16g\n",compute_time()); + gzprintf(gzFp,"ITEM: TIMESTEP\n"); gzprintf(gzFp,BIGINT_FORMAT "\n",update->ntimestep); gzprintf(gzFp,"ITEM: NUMBER OF ATOMS\n"); diff --git a/src/COMPRESS/dump_custom_gz.cpp b/src/COMPRESS/dump_custom_gz.cpp index 7eb77cb697..58ce98ad06 100644 --- a/src/COMPRESS/dump_custom_gz.cpp +++ b/src/COMPRESS/dump_custom_gz.cpp @@ -112,6 +112,8 @@ void DumpCustomGZ::write_header(bigint ndump) ++unit_count; gzprintf(gzFp,"ITEM: UNITS\n%s\n",update->unit_style); } + if (time_flag) gzprintf(gzFp,"ITEM: TIME\n%.16g\n",compute_time()); + gzprintf(gzFp,"ITEM: TIMESTEP\n"); gzprintf(gzFp,BIGINT_FORMAT "\n",update->ntimestep); gzprintf(gzFp,"ITEM: NUMBER OF ATOMS\n"); diff --git a/src/COMPRESS/dump_local_gz.cpp b/src/COMPRESS/dump_local_gz.cpp index 801547543a..c27c795f75 100644 --- a/src/COMPRESS/dump_local_gz.cpp +++ b/src/COMPRESS/dump_local_gz.cpp @@ -112,6 +112,8 @@ void DumpLocalGZ::write_header(bigint ndump) ++unit_count; gzprintf(gzFp,"ITEM: UNITS\n%s\n",update->unit_style); } + if (time_flag) gzprintf(gzFp,"ITEM: TIME\n%.16g\n",compute_time()); + gzprintf(gzFp,"ITEM: TIMESTEP\n"); gzprintf(gzFp,BIGINT_FORMAT "\n",update->ntimestep); gzprintf(gzFp,"ITEM: NUMBER OF ATOMS\n"); diff --git a/src/dump.cpp b/src/dump.cpp index e995644a36..83b74f1bbc 100644 --- a/src/dump.cpp +++ b/src/dump.cpp @@ -87,6 +87,7 @@ Dump::Dump(LAMMPS *lmp, int /*narg*/, char **arg) : Pointers(lmp) buffer_flag = 0; padflag = 0; pbcflag = 0; + time_flag = 0; unit_flag = 0; unit_count = 0; delay_flag = 0; @@ -1123,6 +1124,13 @@ void Dump::modify_params(int narg, char **arg) } iarg += 2; + } else if (strcmp(arg[iarg],"time") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal dump_modify command"); + if (strcmp(arg[iarg+1],"yes") == 0) time_flag = 1; + else if (strcmp(arg[iarg+1],"no") == 0) time_flag = 0; + else error->all(FLERR,"Illegal dump_modify command"); + iarg += 2; + } else if (strcmp(arg[iarg],"units") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal dump_modify command"); if (strcmp(arg[iarg+1],"yes") == 0) unit_flag = 1; @@ -1138,6 +1146,12 @@ void Dump::modify_params(int narg, char **arg) } } +/* ---------------------------------------------------------------------- */ + +double Dump::compute_time() +{ + return update->atime + (update->ntimestep - update->atimestep)*update->dt; +} /* ---------------------------------------------------------------------- return # of bytes of allocated memory ------------------------------------------------------------------------- */ diff --git a/src/dump.h b/src/dump.h index 43855c9362..17e9434faa 100644 --- a/src/dump.h +++ b/src/dump.h @@ -75,6 +75,7 @@ class Dump : protected Pointers { int sortcol; // 0 to sort on ID, 1-N on columns int sortcolm1; // sortcol - 1 int sortorder; // ASCEND or DESCEND + int time_flag; // 1 if output accumulated time int unit_flag; // 1 if dump should contain unit information int unit_count; // # of times the unit information was written int delay_flag; // 1 if delay output until delaystep @@ -145,6 +146,7 @@ class Dump : protected Pointers { virtual int convert_string(int, double *) {return 0;} virtual void write_data(int, double *) = 0; void pbc_allocate(); + double compute_time(); void sort(); #if defined(LMP_QSORT) diff --git a/src/dump_atom.cpp b/src/dump_atom.cpp index d5eba98078..401b47051d 100644 --- a/src/dump_atom.cpp +++ b/src/dump_atom.cpp @@ -15,9 +15,9 @@ #include #include "domain.h" #include "atom.h" -#include "update.h" #include "memory.h" #include "error.h" +#include "update.h" using namespace LAMMPS_NS; @@ -213,6 +213,8 @@ void DumpAtom::header_item(bigint ndump) ++unit_count; fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); } + if (time_flag) fprintf(fp,"ITEM: TIME\n%.16g\n",compute_time()); + fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF ATOMS\n"); @@ -232,6 +234,8 @@ void DumpAtom::header_item_triclinic(bigint ndump) ++unit_count; fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); } + if (time_flag) fprintf(fp,"ITEM: TIME\n%.16g\n",compute_time()); + fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF ATOMS\n"); diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index a99151f890..489067d90e 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -20,14 +20,14 @@ #include "region.h" #include "group.h" #include "input.h" -#include "variable.h" -#include "update.h" #include "modify.h" #include "compute.h" #include "fix.h" #include "fix_store.h" #include "memory.h" #include "error.h" +#include "update.h" +#include "variable.h" using namespace LAMMPS_NS; @@ -424,6 +424,8 @@ void DumpCustom::header_item(bigint ndump) ++unit_count; fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); } + if (time_flag) fprintf(fp,"ITEM: TIME\n%.16g\n",compute_time()); + fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF ATOMS\n"); @@ -443,6 +445,8 @@ void DumpCustom::header_item_triclinic(bigint ndump) ++unit_count; fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); } + if (time_flag) fprintf(fp,"ITEM: TIME\n%.16g\n",compute_time()); + fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF ATOMS\n"); diff --git a/src/dump_local.cpp b/src/dump_local.cpp index 52a222eaeb..21a96d1e8a 100644 --- a/src/dump_local.cpp +++ b/src/dump_local.cpp @@ -260,6 +260,8 @@ void DumpLocal::write_header(bigint ndump) ++unit_count; fprintf(fp,"ITEM: UNITS\n%s\n",update->unit_style); } + if (time_flag) fprintf(fp,"ITEM: TIME\n%.16g\n",compute_time()); + fprintf(fp,"ITEM: TIMESTEP\n"); fprintf(fp,BIGINT_FORMAT "\n",update->ntimestep); fprintf(fp,"ITEM: NUMBER OF %s\n",label); From bb4dc5980320aefaa9db48830762e923f5495b18 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 30 Sep 2019 16:33:07 -0400 Subject: [PATCH 193/237] fix typo --- doc/src/Howto_viscosity.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/Howto_viscosity.txt b/doc/src/Howto_viscosity.txt index ee070eba58..c87c8a3b84 100644 --- a/doc/src/Howto_viscosity.txt +++ b/doc/src/Howto_viscosity.txt @@ -83,7 +83,7 @@ variable d equal $p*$s # dump interval :pre # convert from LAMMPS real units to SI :pre -variable kB equal 1.3806504e-23 # \[J/K/] Boltzmann +variable kB equal 1.3806504e-23 # \[J/K\] Boltzmann variable atm2Pa equal 101325.0 variable A2m equal 1.0e-10 variable fs2s equal 1.0e-15 From 26427cc4cbd27ee99517492cc8578aa441a078ec Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Tue, 1 Oct 2019 11:40:21 -0600 Subject: [PATCH 194/237] Fixed error in neighbor distance check for box dimensions --- src/neighbor.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/neighbor.cpp b/src/neighbor.cpp index d38aed08c0..2c77a13258 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -1941,6 +1941,7 @@ int Neighbor::decide() conservative shrink procedure: compute distance each of 8 corners of box has moved since last reneighbor reduce skin distance by sum of 2 largest of the 8 values + if reduced skin distance is negative, set to zero new trigger = 1/2 of reduced skin distance for orthogonal box, only need 2 lo/hi corners for triclinic, need all 8 corners since deformations can displace all 8 @@ -1962,6 +1963,7 @@ int Neighbor::check_distance() delz = bboxhi[2] - boxhi_hold[2]; delta2 = sqrt(delx*delx + dely*dely + delz*delz); delta = 0.5 * (skin - (delta1+delta2)); + if (delta < 0.0) delta = 0.0; deltasq = delta*delta; } else { domain->box_corners(); @@ -1975,6 +1977,7 @@ int Neighbor::check_distance() else if (delta > delta2) delta2 = delta; } delta = 0.5 * (skin - (delta1+delta2)); + if (delta < 0.0) delta = 0.0; deltasq = delta*delta; } } else deltasq = triggersq; From 65807009438242851245d1a3d12ee5f12d56464e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 3 Oct 2019 17:21:20 +0200 Subject: [PATCH 195/237] print C++ standard in use message with help page and "info config" command --- src/info.cpp | 18 ++++++++++++++++++ src/info.h | 1 + src/lammps.cpp | 3 ++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/info.cpp b/src/info.cpp index caa2d6fdd0..4b4c9a6a75 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -281,6 +281,7 @@ void Info::command(int narg, char **arg) infobuf = get_compiler_info(); fprintf(out,"\nCompiler: %s with %s\n",infobuf,get_openmp_info()); delete[] infobuf; + fprintf(out,"C++ standard: %s\n",get_cxx_info()); fputs("\nActive compile time flags:\n\n",out); if (has_gzip_support()) fputs("-DLAMMPS_GZIP\n",out); @@ -1208,6 +1209,23 @@ const char *Info::get_openmp_info() #endif } +const char *Info::get_cxx_info() +{ +#if __cplusplus > 201703L + return (const char *)"newer than C++17"; +#elif __cplusplus == 201703L + return (const char *)"C++17"; +#elif __cplusplus == 201402L + return (const char *)"C++14"; +#elif __cplusplus == 201103L + return (const char *)"C++11"; +#elif __cplusplus == 199711L + return (const char *)"C++98"; +#else + return (const char *)"unknown"; +#endif +} + /* ---------------------------------------------------------------------- */ char **Info::get_variable_names(int &num) { diff --git a/src/info.h b/src/info.h index ff8f15676d..8ac931aa68 100644 --- a/src/info.h +++ b/src/info.h @@ -43,6 +43,7 @@ class Info : protected Pointers { static char *get_os_info(); static char *get_compiler_info(); static const char *get_openmp_info(); + static const char *get_cxx_info(); char **get_variable_names(int &num); diff --git a/src/lammps.cpp b/src/lammps.cpp index d58c04e998..b3f420b03d 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -1276,8 +1276,9 @@ void LAMMPS::print_config(FILE *fp) delete[] infobuf; infobuf = Info::get_compiler_info(); - fprintf(fp,"Compiler: %s with %s\n\n",infobuf,Info::get_openmp_info()); + fprintf(fp,"Compiler: %s with %s\n",infobuf,Info::get_openmp_info()); delete[] infobuf; + fprintf(fp,"C++ standard: %s\n\n",Info::get_cxx_info()); fputs("Active compile time flags:\n\n",fp); if (Info::has_gzip_support()) fputs("-DLAMMPS_GZIP\n",fp); From 747bfa31f26c5c10e549f36d46451989a9c5ccae Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 3 Oct 2019 18:31:42 +0200 Subject: [PATCH 196/237] apply changes suggested by Andrew Santos --- doc/src/pair_granular.txt | 14 +++++++------- src/GRANULAR/pair_granular.cpp | 27 ++++++++------------------- 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/doc/src/pair_granular.txt b/doc/src/pair_granular.txt index 9fcc4dbe48..718315b4fe 100644 --- a/doc/src/pair_granular.txt +++ b/doc/src/pair_granular.txt @@ -177,7 +177,7 @@ following general form: \end\{equation\} Here, \(\mathbf\{v\}_\{n,rel\} = (\mathbf\{v\}_j - \mathbf\{v\}_i) -\cdot \mathbf\{n\}\) is the component of relative velocity along +\cdot \mathbf\{n\} \mathbf\{n\}\) is the component of relative velocity along \(\mathbf\{n\}\). The optional {damping} keyword to the {pair_coeff} command followed by @@ -299,8 +299,8 @@ the normal damping \(\eta_n\) (see above): \eta_t = -x_\{\gamma,t\} \eta_n \end\{equation\} -The normal damping prefactor \(\eta_n\) is determined by the choice of -the {damping} keyword, as discussed above. Thus, the {damping} +The normal damping prefactor \(\eta_n\) is determined by the choice +of the {damping} keyword, as discussed above. Thus, the {damping} keyword also affects the tangential damping. The parameter \(x_\{\gamma,t\}\) is a scaling coefficient. Several works in the literature use \(x_\{\gamma,t\} = 1\) ("Marshall"_#Marshall2009, @@ -308,10 +308,10 @@ literature use \(x_\{\gamma,t\} = 1\) ("Marshall"_#Marshall2009, tangential velocity at the point of contact is given by \(\mathbf\{v\}_\{t, rel\} = \mathbf\{v\}_\{t\} - (R_i\Omega_i + R_j\Omega_j) \times \mathbf\{n\}\), where \(\mathbf\{v\}_\{t\} = -\mathbf\{v\}_r - \mathbf\{v\}_r\cdot\mathbf\{n\}\), \(\mathbf\{v\}_r = -\mathbf\{v\}_j - \mathbf\{v\}_i\). The direction of the applied force -is \(\mathbf\{t\} = -\mathbf\{v_\{t,rel\}\}/\|\mathbf\{v_\{t,rel\}\}\|\). +\mathbf\{v\}_r - \mathbf\{v\}_r\cdot\mathbf\{n\}\{n\}\), +\(\mathbf\{v\}_r = \mathbf\{v\}_j - \mathbf\{v\}_i\). +The direction of the applied force is \(\mathbf\{t\} = +\mathbf\{v_\{t,rel\}\}/\|\mathbf\{v_\{t,rel\}\}\|\) . The normal force value \(F_\{n0\}\) used to compute the critical force depends on the form of the contact model. For non-cohesive models diff --git a/src/GRANULAR/pair_granular.cpp b/src/GRANULAR/pair_granular.cpp index 43bcec5181..54f6b77d2f 100644 --- a/src/GRANULAR/pair_granular.cpp +++ b/src/GRANULAR/pair_granular.cpp @@ -305,7 +305,8 @@ void PairGranular::compute(int eflag, int vflag) delta = radsum - r; dR = delta*Reff; - if (normal_model[itype][jtype] == JKR) { + + if (normal_model[itype][jtype] == JKR) { touch[jj] = 1; R2=Reff*Reff; coh = normal_coeffs[itype][jtype][3]; @@ -1374,22 +1375,6 @@ double PairGranular::single(int i, int j, int itype, int jtype, vn2 = ny*vnnr; vn3 = nz*vnnr; - double *rmass = atom->rmass; - int *mask = atom->mask; - mi = rmass[i]; - mj = rmass[j]; - if (fix_rigid) { - if (mass_rigid[i] > 0.0) mi = mass_rigid[i]; - if (mass_rigid[j] > 0.0) mj = mass_rigid[j]; - } - - meff = mi*mj / (mi+mj); - if (mask[i] & freeze_group_bit) meff = mj; - if (mask[j] & freeze_group_bit) meff = mi; - - delta = radsum - r; - dR = delta*Reff; - // tangential component vt1 = vr1 - vn1; @@ -1407,6 +1392,9 @@ double PairGranular::single(int i, int j, int itype, int jtype, // if I or J part of rigid body, use body mass // if I or J is frozen, meff is other particle + double *rmass = atom->rmass; + int *mask = atom->mask; + mi = rmass[i]; mj = rmass[j]; if (fix_rigid) { @@ -1557,7 +1545,8 @@ double PairGranular::single(int i, int j, int itype, int jtype, // rolling resistance //**************************************** - if (roll_model[itype][jtype] != ROLL_NONE) { + if ((roll_model[itype][jtype] != ROLL_NONE) + || (twist_model[itype][jtype] != TWIST_NONE)) { relrot1 = omega[i][0] - omega[j][0]; relrot2 = omega[i][1] - omega[j][1]; relrot3 = omega[i][2] - omega[j][2]; @@ -1623,7 +1612,7 @@ double PairGranular::single(int i, int j, int itype, int jtype, Mtcrit = mu_twist*Fncrit; // critical torque (eq 44) if (fabs(magtortwist) > Mtcrit) { magtortwist = -Mtcrit * signtwist; // eq 34 - } + } else magtortwist = 0.0; } // set force and return no energy From d117ed2b147f2c73010328d567af4a2f7b9b7a23 Mon Sep 17 00:00:00 2001 From: alxvov Date: Thu, 3 Oct 2019 22:14:15 +0000 Subject: [PATCH 197/237] remove unnecessary operations. calloc only if rho is positive --- src/SPIN/min_spin_lbfgs.cpp | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/src/SPIN/min_spin_lbfgs.cpp b/src/SPIN/min_spin_lbfgs.cpp index db0dbbaa76..f86bdd5d48 100644 --- a/src/SPIN/min_spin_lbfgs.cpp +++ b/src/SPIN/min_spin_lbfgs.cpp @@ -372,9 +372,6 @@ void MinSpinLBFGS::calc_search_direction() factor = 1.0; } - q = (double *) calloc(3*nlocal, sizeof(double)); - alpha = (double *) calloc(num_mem, sizeof(double)); - if (local_iter == 0){ // steepest descent direction //if no line search then calculate maximum rotation @@ -387,10 +384,12 @@ void MinSpinLBFGS::calc_search_direction() for (int k = 0; k < num_mem; k++){ ds[k][i] = 0.0; dy[k][i] = 0.0; - rho[k] = 0.0; } } - } else { + for (int k = 0; k < num_mem; k++) + rho[k] = 0.0; + + } else { dyds = 0.0; for (int i = 0; i < 3 * nlocal; i++) { ds[m_index][i] = p_s[i]; @@ -410,15 +409,10 @@ void MinSpinLBFGS::calc_search_direction() if (rho[m_index] < 0.0){ local_iter = 0; - for (int k = 0; k < num_mem; k++){ - for (int i = 0; i < nlocal; i ++){ - ds[k][i] = 0.0; - dy[k][i] = 0.0; - } - } return calc_search_direction(); } - + q = (double *) calloc(3*nlocal, sizeof(double)); + alpha = (double *) calloc(num_mem, sizeof(double)); // set the q vector for (int i = 0; i < 3 * nlocal; i++) { @@ -511,12 +505,10 @@ void MinSpinLBFGS::calc_search_direction() p_s[i] = - factor * p_s[i] * scaling; g_old[i] = g_cur[i] * factor; } + free(q); + free(alpha); } - local_iter++; - free(q); - free(alpha); - } /* ---------------------------------------------------------------------- From 9fc32f5f3fcd9d6593c2e4f2280da4d7d57b879e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 5 Oct 2019 12:38:28 -0400 Subject: [PATCH 198/237] small update to naming conventions --- .github/CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 5a67c547df..3ff672a05d 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -68,7 +68,8 @@ How quickly your contribution will be integrated depends largely on how much eff Here is a checklist of steps you need to follow to submit a single file or user package for our consideration. Following these steps will save both you and us time. See existing files in packages in the source directory for examples. If you are uncertain, please ask on the lammps-users mailing list. * All source files you provide must compile with the most current version of LAMMPS with multiple configurations. In particular you need to test compiling LAMMPS from scratch with `-DLAMMPS_BIGBIG` set in addition to the default `-DLAMMPS_SMALLBIG` setting. Your code will need to work correctly in serial and in parallel using MPI. -* For consistency with the rest of LAMMPS and especially, if you want your contribution(s) to be added to main LAMMPS code or one of its standard packages, it needs to be written in a style compatible with other LAMMPS source files. This means: 2-character indentation per level, no tabs, no lines over 80 characters. I/O is done via the C-style stdio library, style class header files should not import any system headers outside of , STL containers should be avoided in headers, and forward declarations used where possible or needed. All added code should be placed into the LAMMPS_NS namespace or a sub-namespace; global or static variables should be avoided, as they conflict with the modular nature of LAMMPS and the C++ class structure. There MUST NOT be any "using namespace XXX;" statements in headers. In the implementation file (.cpp) system includes should be placed in angular brackets (<>) and for c-library functions the C++ style header files should be included ( instead of , or instead of ). This all is so the developers can more easily understand, integrate, and maintain your contribution and reduce conflicts with other parts of LAMMPS. This basically means that the code accesses data structures, performs its operations, and is formatted similar to other LAMMPS source files, including the use of the error class for error and warning messages. +* For consistency with the rest of LAMMPS and especially, if you want your contribution(s) to be added to main LAMMPS code or one of its standard packages, it needs to be written in a style compatible with other LAMMPS source files. This means: 2-character indentation per level, no tabs, no lines over 80 characters. I/O is done via the C-style stdio library, style class header files should not import any system headers, STL containers should be avoided in headers, and forward declarations used where possible or needed. All added code should be placed into the LAMMPS_NS namespace or a sub-namespace; global or static variables should be avoided, as they conflict with the modular nature of LAMMPS and the C++ class structure. There MUST NOT be any "using namespace XXX;" statements in headers. In the implementation file (.cpp) system includes should be placed in angular brackets (<>) and for c-library functions the C++ style header files should be included ( instead of , or instead of ). This all is so the developers can more easily understand, integrate, and maintain your contribution and reduce conflicts with other parts of LAMMPS. This basically means that the code accesses data structures, performs its operations, and is formatted similar to other LAMMPS source files, including the use of the error class for error and warning messages. +* Source, style name, and documentation file should follow the following naming convention: style names should be lowercase and words separated by a forward slash; for a new fix style 'foo/bar', the class should be named FixFooBar, the name of the source files should be 'fix_foo_bar.h' and 'fix_foo_bar.cpp' and the corresponding documentation should be in a file 'fix_foo_bar.txt'. * If you want your contribution to be added as a user-contributed feature, and it is a single file (actually a `.cpp` and `.h` file) it can be rapidly added to the USER-MISC directory. Include the one-line entry to add to the USER-MISC/README file in that directory, along with the 2 source files. You can do this multiple times if you wish to contribute several individual features. * If you want your contribution to be added as a user-contribution and it is several related features, it is probably best to make it a user package directory with a name like USER-FOO. In addition to your new files, the directory should contain a README text file. The README should contain your name and contact information and a brief description of what your new package does. If your files depend on other LAMMPS style files also being installed (e.g. because your file is a derived class from the other LAMMPS class), then an Install.sh file is also needed to check for those dependencies. See other README and Install.sh files in other USER directories as examples. Send us a tarball of this USER-FOO directory. * Your new source files need to have the LAMMPS copyright, GPL notice, and your name and email address at the top, like other user-contributed LAMMPS source files. They need to create a class that is inside the LAMMPS namespace. If the file is for one of the USER packages, including USER-MISC, then we are not as picky about the coding style (see above). I.e. the files do not need to be in the same stylistic format and syntax as other LAMMPS files, though that would be nice for developers as well as users who try to read your code. From 178ca78dd93a8665fe3fc1c07d30acac4766c6b9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 7 Oct 2019 18:57:28 +0200 Subject: [PATCH 199/237] add TODO comment for experimental and thus currently undocumented CMake option --- cmake/Modules/Packages/KOKKOS.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmake/Modules/Packages/KOKKOS.cmake b/cmake/Modules/Packages/KOKKOS.cmake index 4134fed597..428588ec9d 100644 --- a/cmake/Modules/Packages/KOKKOS.cmake +++ b/cmake/Modules/Packages/KOKKOS.cmake @@ -1,4 +1,7 @@ if(PKG_KOKKOS) + # TODO: this option needs to be documented when this works with a + # regular release version of KOKKOS, and a version compatibility check + # of external KOKKOS lib versus what the KOKKOS package needs is required. option(EXTERNAL_KOKKOS "Build against external kokkos library") if(EXTERNAL_KOKKOS) find_package(Kokkos REQUIRED) From 63c1ffd605c730c8d7c0b991d31f822834b62667 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Mon, 7 Oct 2019 19:41:17 -0700 Subject: [PATCH 200/237] Clean up langevin gjf documentation, fixed potential langevin gjf bugs --- src/fix_langevin.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index f805fddb4b..c12cdbaa26 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -240,7 +240,7 @@ void FixLangevin::init() if (strcmp(id,modify->fix[i]->id) == 0) before = 0; else if ((modify->fmask[i] && utils::strmatch(modify->fix[i]->style,"^nve")) && before) flag = 1; } - if (flag && comm->me == 0) + if (flag) error->all(FLERR,"Fix langevin gjf should come before fix nve"); } @@ -295,12 +295,12 @@ void FixLangevin::init() gfactor1[i] = -atom->mass[i] / t_period / force->ftm2v; if (gjfflag) gfactor2[i] = sqrt(atom->mass[i]) * - sqrt(2.0*force->boltz/t_period/update->dt/force->mvv2e) / - force->ftm2v; + sqrt(2.0*force->boltz/t_period/update->dt/force->mvv2e) / + force->ftm2v; else gfactor2[i] = sqrt(atom->mass[i]) * - sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / - force->ftm2v; + sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / + force->ftm2v; gfactor1[i] *= 1.0/ratio[i]; gfactor2[i] *= 1.0/sqrt(ratio[i]); } @@ -1007,12 +1007,21 @@ void FixLangevin::reset_dt() { if (atom->mass) { for (int i = 1; i <= atom->ntypes; i++) { - gfactor2[i] = sqrt(atom->mass[i]) * - sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / - force->ftm2v; + if (gjfflag) + gfactor2[i] = sqrt(atom->mass[i]) * + sqrt(2.0*force->boltz/t_period/update->dt/force->mvv2e) / + force->ftm2v; + else + gfactor2[i] = sqrt(atom->mass[i]) * + sqrt(24.0*force->boltz/t_period/update->dt/force->mvv2e) / + force->ftm2v; gfactor2[i] *= 1.0/sqrt(ratio[i]); } } + if (gjfflag) { + gjfa = (1.0-update->dt/2.0/t_period)/(1.0+update->dt/2.0/t_period); + gjfsib = sqrt(1.0+update->dt/2.0/t_period); + } } /* ---------------------------------------------------------------------- */ From ac82f78667be78cfb337eda9115a83705d1dbb63 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 8 Oct 2019 02:40:08 -0400 Subject: [PATCH 201/237] do not reset box (i.e. apply shrink-wrapping) for systems without atoms --- src/domain.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/domain.cpp b/src/domain.cpp index 372b264013..e894682556 100644 --- a/src/domain.cpp +++ b/src/domain.cpp @@ -352,6 +352,11 @@ void Domain::set_local_box() void Domain::reset_box() { // perform shrink-wrapping + + // nothing to do for empty systems + + if (atom->natoms == 0) return; + // compute extent of atoms on this proc // for triclinic, this is done in lamda space From 1f372e27e973607dc2155ec74d70214e746155cd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 8 Oct 2019 02:41:35 -0400 Subject: [PATCH 202/237] initialize/reset more unallocated pointer variables to NULL --- src/MANYBODY/pair_bop.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/MANYBODY/pair_bop.cpp b/src/MANYBODY/pair_bop.cpp index 6b7468558e..05ec27a9b4 100644 --- a/src/MANYBODY/pair_bop.cpp +++ b/src/MANYBODY/pair_bop.cpp @@ -61,6 +61,10 @@ PairBOP::PairBOP(LAMMPS *lmp) : Pair(lmp) manybody_flag = 1; ghostneigh = 1; + BOP_index = NULL; + BOP_index3 = NULL; + BOP_total = NULL; + BOP_total3 = NULL; map = NULL; pi_a = NULL; pro_delta = NULL; @@ -102,6 +106,8 @@ PairBOP::PairBOP(LAMMPS *lmp) : Pair(lmp) rij = NULL; neigh_index = NULL; neigh_index3 = NULL; + neigh_flag = NULL; + neigh_flag3 = NULL; cosAng = NULL; betaS = NULL; dBetaS = NULL; @@ -5798,6 +5804,12 @@ void PairBOP::memory_theta_destroy() memory->destroy(neigh_flag3); memory->destroy(neigh_index); memory->destroy(neigh_index3); + itypeSigBk = NULL; + itypePiBk = NULL; + neigh_flag = NULL; + neigh_flag3 = NULL; + neigh_index = NULL; + neigh_index3 = NULL; if(otfly==0) { memory->destroy(cosAng); memory->destroy(dcAng); From b8b07061d4023b5fe57eb41fe3ad2fc4b463df5f Mon Sep 17 00:00:00 2001 From: TOFarmer Date: Tue, 8 Oct 2019 10:46:27 +0100 Subject: [PATCH 203/237] Added function for creating an improper using single/improper --- src/create_bonds.cpp | 108 ++++++++++++++++++++++++++++++++++++++++++- src/create_bonds.h | 13 ++++++ 2 files changed, 119 insertions(+), 2 deletions(-) diff --git a/src/create_bonds.cpp b/src/create_bonds.cpp index 5b7c354595..437f5959db 100644 --- a/src/create_bonds.cpp +++ b/src/create_bonds.cpp @@ -12,7 +12,9 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing authors: Mike Salerno (NRL) added single methods + Contributing authors: + Mike Salerno (NRL) added single methods + Thomas Farmer (ISIS) added single/improper ------------------------------------------------------------------------- */ #include "create_bonds.h" @@ -31,7 +33,7 @@ using namespace LAMMPS_NS; -enum{MANY,SBOND,SANGLE,SDIHEDRAL}; +enum{MANY,SBOND,SANGLE,SDIHEDRAL,SIMPROPER}; /* ---------------------------------------------------------------------- */ @@ -100,6 +102,18 @@ void CreateBonds::command(int narg, char **arg) (datom2 == datom3) || (datom2 == datom4) || (datom3 == datom4)) error->all(FLERR,"Illegal create_bonds command"); iarg = 6; + } else if (strcmp(arg[0],"single/improper") == 0) { + style = SIMPROPER; + if (narg < 6) error->all(FLERR,"Illegal create_bonds command"); + dtype = force->inumeric(FLERR,arg[1]); + datom1 = force->tnumeric(FLERR,arg[2]); + datom2 = force->tnumeric(FLERR,arg[3]); + datom3 = force->tnumeric(FLERR,arg[4]); + datom4 = force->tnumeric(FLERR,arg[5]); + if ((datom1 == datom2) || (datom1 == datom3) || (datom1 == datom4) || + (datom2 == datom3) || (datom2 == datom4) || (datom3 == datom4)) + error->all(FLERR,"Illegal create_bonds command"); + iarg = 6; } else error->all(FLERR,"Illegal create_bonds command"); // optional args @@ -132,6 +146,9 @@ void CreateBonds::command(int narg, char **arg) } else if (style == SDIHEDRAL) { if (dtype <= 0 || dtype > atom->ndihedraltypes) error->all(FLERR,"Invalid dihedral type in create_bonds command"); + } else if (style == SIMPROPER) { + if (dtype <= 0 || dtype > atom->nimpropertypes) + error->all(FLERR,"Invalid improper type in create_bonds command"); } // invoke creation method @@ -140,6 +157,7 @@ void CreateBonds::command(int narg, char **arg) else if (style == SBOND) single_bond(); else if (style == SANGLE) single_angle(); else if (style == SDIHEDRAL) single_dihedral(); + else if (style == SIMPROPER) single_improper(); // trigger special list build @@ -512,3 +530,89 @@ void CreateBonds::single_dihedral() num_dihedral[m]++; } } + +/* ---------------------------------------------------------------------- */ + +void CreateBonds::single_improper() +{ + int m; + + // check that 4 atoms exist + + const int nlocal = atom->nlocal; + const int idx1 = atom->map(datom1); + const int idx2 = atom->map(datom2); + const int idx3 = atom->map(datom3); + const int idx4 = atom->map(datom4); + + int count = 0; + if ((idx1 >= 0) && (idx1 < nlocal)) count++; + if ((idx2 >= 0) && (idx2 < nlocal)) count++; + if ((idx3 >= 0) && (idx3 < nlocal)) count++; + if ((idx4 >= 0) && (idx4 < nlocal)) count++; + + int allcount; + MPI_Allreduce(&count,&allcount,1,MPI_INT,MPI_SUM,world); + if (allcount != 4) + error->all(FLERR,"Create_bonds single/improper atoms do not exist"); + + // create bond once or 4x if newton_bond set + + int *num_improper = atom->num_improper; + int **improper_type = atom->improper_type; + tagint **improper_atom1 = atom->improper_atom1; + tagint **improper_atom2 = atom->improper_atom2; + tagint **improper_atom3 = atom->improper_atom3; + tagint **improper_atom4 = atom->improper_atom4; + + if ((m = idx2) >= 0) { + if (num_improper[m] == atom->improper_per_atom) + error->one(FLERR, + "New improper exceeded impropers per atom in create_bonds"); + improper_type[m][num_improper[m]] = dtype; + improper_atom1[m][num_improper[m]] = datom1; + improper_atom2[m][num_improper[m]] = datom2; + improper_atom3[m][num_improper[m]] = datom3; + improper_atom4[m][num_improper[m]] = datom4; + num_improper[m]++; + } + atom->nimpropers++; + + if (force->newton_bond) return; + + if ((m = idx1) >= 0) { + if (num_improper[m] == atom->improper_per_atom) + error->one(FLERR, + "New improper exceeded impropers per atom in create_bonds"); + improper_type[m][num_improper[m]] = dtype; + improper_atom1[m][num_improper[m]] = datom1; + improper_atom2[m][num_improper[m]] = datom2; + improper_atom3[m][num_improper[m]] = datom3; + improper_atom4[m][num_improper[m]] = datom4; + num_improper[m]++; + } + + if ((m = idx3) >= 0) { + if (num_improper[m] == atom->improper_per_atom) + error->one(FLERR, + "New improper exceeded impropers per atom in create_bonds"); + improper_type[m][num_improper[m]] = dtype; + improper_atom1[m][num_improper[m]] = datom1; + improper_atom2[m][num_improper[m]] = datom2; + improper_atom3[m][num_improper[m]] = datom3; + improper_atom4[m][num_improper[m]] = datom4; + num_improper[m]++; + } + + if ((m = idx4) >= 0) { + if (num_improper[m] == atom->improper_per_atom) + error->one(FLERR, + "New improper exceeded impropers per atom in create_bonds"); + improper_type[m][num_improper[m]] = dtype; + improper_atom1[m][num_improper[m]] = datom1; + improper_atom2[m][num_improper[m]] = datom2; + improper_atom3[m][num_improper[m]] = datom3; + improper_atom4[m][num_improper[m]] = datom4; + num_improper[m]++; + } +} diff --git a/src/create_bonds.h b/src/create_bonds.h index 0c71242ed9..eea99b0113 100644 --- a/src/create_bonds.h +++ b/src/create_bonds.h @@ -39,6 +39,7 @@ class CreateBonds : protected Pointers { void single_bond(); void single_angle(); void single_dihedral(); + void single_improper(); }; } @@ -87,6 +88,10 @@ E: Invalid dihedral type in create_bonds command UNDOCUMENTED +E: Invalid improper type in create_bonds command + +UNDOCUMENTED + E: Create_bonds requires a pair style be defined Self-explanatory. @@ -135,4 +140,12 @@ E: New dihedral exceeded dihedrals per atom in create_bonds UNDOCUMENTED +E: Create_bonds single/improper atoms do not exist + +UNDOCUMENTED + +E: New improper exceeded impropers per atom in create_bonds + +UNDOCUMENTED + */ From cf11e4be3c32254043a7273aae1777c1ee561a13 Mon Sep 17 00:00:00 2001 From: TOFarmer Date: Tue, 8 Oct 2019 11:51:19 +0100 Subject: [PATCH 204/237] Added documentation for single/improper --- doc/src/create_bonds.txt | 67 ++++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 27 deletions(-) diff --git a/doc/src/create_bonds.txt b/doc/src/create_bonds.txt index abd1959e81..9b9a416eab 100644 --- a/doc/src/create_bonds.txt +++ b/doc/src/create_bonds.txt @@ -27,7 +27,10 @@ style = {many} or {single/bond} or {single/angle} or {single/dihedral} :ule,l aatom1,aatom2,aatom3 = atom IDs for three atoms in angle {single/dihedral} args = dtype datom1 datom2 datom3 datom4 dtype = bond type of new dihedral - datom1,datom2,datom3,datom4 = atom IDs for four atoms in dihedral :pre + datom1,datom2,datom3,datom4 = atom IDs for four atoms in dihedral + {single/improper} args = itype iatom1 iatom2 iatom3 iatom4 + itype = bond type of new improper + iatom1,iatom2,iatom3,iatom4 = atom IDs for four atoms in improper :pre zero or more keyword/value pairs may be appended :l keyword = {special} :l {special} value = {yes} or {no} :pre @@ -38,51 +41,54 @@ keyword = {special} :l create_bonds many all all 1 1.0 1.2 create_bonds many surf solvent 3 2.0 2.4 create_bonds single/bond 1 1 2 -create_bonds single/angle 5 52 98 107 special no :pre +create_bonds single/angle 5 52 98 107 special no +create_bonds single/dihedral 2 4 19 27 101 +create_bonds single/improper 3 23 26 31 57 :pre [Description:] Create bonds between pairs of atoms that meet a specified distance -criteria. Or create a single bond, angle, or dihedral between 2, 3, +criteria. Or create a single bond, angle, dihedral or improper between 2, 3, or 4 specified atoms. -The new bond (angle, dihedral) interactions will then be computed -during a simulation by the bond (angle, dihedral) potential defined by +The new bond (angle, dihedral, improper) interactions will then be computed +during a simulation by the bond (angle, dihedral, improper) potential defined by the "bond_style"_bond_style.html, "bond_coeff"_bond_coeff.html, "angle_style"_angle_style.html, "angle_coeff"_angle_coeff.html, "dihedral_style"_dihedral_style.html, -"dihedral_coeff"_dihedral_coeff.html commands. +"dihedral_coeff"_dihedral_coeff.html, "improper_style"_improper_style.html, +"improper_coeff"_improper_coeff.html commands. The {many} style is useful for adding bonds to a system, e.g. between nearest neighbors in a lattice of atoms, without having to enumerate all the bonds in the data file read by the "read_data"_read_data.html command. -The {single} styles are useful for adding bonds, angles, dihedrals +The {single} styles are useful for adding bonds, angles, dihedrals, impropers to a system incrementally, then continuing a simulation. -Note that this command does not auto-create any angle or dihedral +Note that this command does not auto-create any angle, dihedral or improper interactions when a bond is added. Nor does it auto-create any bonds -when an angle or dihedral is added. Or auto-create any angles when a -dihedral is added. Thus the flexibility of this command is limited. +when an angle, dihedral or improper is added. Or auto-create any angles when a +dihedral or improper is added. Thus the flexibility of this command is limited. It can be used several times to create different types of bond at different distances. But it cannot typically auto-create all the -bonds or angles or dihedral that would normally be defined in a data -file for a complex system of molecules. +bonds or angles or dihedrals or impropers that would normally be defined in a +data file for a complex system of molecules. -NOTE: If the system has no bonds (angles, dihedrals) to begin with, or -if more bonds per atom are being added than currently exist, then you +NOTE: If the system has no bonds (angles, dihedrals, impropers) to begin with, +or if more bonds per atom are being added than currently exist, then you must insure that the number of bond types and the maximum number of bonds per atom are set to large enough values. And similarly for -angles and dihedrals. Otherwise an error may occur when too many -bonds (angles, dihedrals) are added to an atom. If the +angles, dihedrals and impropers. Otherwise an error may occur when too many +bonds (angles, dihedrals, impropers) are added to an atom. If the "read_data"_read_data.html command is used to define the system, these parameters can be set via the "bond types" and "extra bond per atom" fields in the header section of the data file. If the "create_box"_create_box.html command is used to define the system, these 2 parameters can be set via its optional "bond/types" and -"extra/bond/per/atom" arguments. And similarly for angles and -dihedrals. See the doc pages for these 2 commands for details. +"extra/bond/per/atom" arguments. And similarly for angles, dihedrals and +impropers. See the doc pages for these 2 commands for details. :line @@ -137,18 +143,25 @@ ordered linearly within the angle; the central atom is {aatom2}. {Atype} must be a value between 1 and the number of angle types defined. -The {single/dihedral} style creates a single dihedral of type {btype} -between two atoms with IDs {batom1} and {batom2}. The ordering of the -atoms is the same as in the {Dihedrals} section of a data file read by -the "read_data"_read_data.html command. I.e. the 4 atoms are ordered -linearly within the dihedral. {Dtype} must be a value between 1 and +The {single/dihedral} style creates a single dihedral of type {dtype} +between four atoms with IDs {datom1}, {datom2}, {datom3}, and {datom4}. The +ordering of the atoms is the same as in the {Dihedrals} section of a data file +read by the "read_data"_read_data.html command. I.e. the 4 atoms are ordered +linearly within the dihedral. {dtype} must be a value between 1 and the number of dihedral types defined. +The {single/improper} style creates a single improper of type {itype} +between four atoms with IDs {iatom1}, {iatom2}, {iatom3}, and {iatom4}. The +ordering of the atoms is the same as in the {Impropers} section of a data file +read by the "read_data"_read_data.html command. I.e. the 4 atoms are ordered +linearly within the improper. {itype} must be a value between 1 and +the number of improper types defined. + :line The keyword {special} controls whether an internal list of special -bonds is created after one or more bonds, or a single angle or -dihedral is added to the system. +bonds is created after one or more bonds, or a single angle, dihedral or +improper is added to the system. The default value is {yes}. A value of {no} cannot be used with the {many} style. @@ -161,7 +174,7 @@ see the "special_bonds"_special_bonds.html command for details. Thus if you are adding a few bonds or a large list of angles all at the same time, by using this command repeatedly, it is more efficient to only trigger the internal list to be created once, after the last -bond (or angle, or dihedral) is added: +bond (or angle, or dihedral, or improper) is added: create_bonds single/bond 5 52 98 special no create_bonds single/bond 5 73 74 special no @@ -170,7 +183,7 @@ create_bonds single/bond 5 17 386 special no create_bonds single/bond 4 112 183 special yes :pre Note that you MUST insure the internal list is re-built after the last -bond (angle, dihedral) is added, before performing a simulation. +bond (angle, dihedral, improper) is added, before performing a simulation. Otherwise pairwise interactions will not be properly excluded or weighted. LAMMPS does NOT check that you have done this correctly. From ac8f2e431eca43eaba698fc33972f17f3f340482 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 8 Oct 2019 14:49:20 +0200 Subject: [PATCH 205/237] fix a few cut-n-paste issues --- doc/src/create_bonds.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/src/create_bonds.txt b/doc/src/create_bonds.txt index 9b9a416eab..9c073b6c55 100644 --- a/doc/src/create_bonds.txt +++ b/doc/src/create_bonds.txt @@ -23,13 +23,13 @@ style = {many} or {single/bond} or {single/angle} or {single/dihedral} :ule,l btype = bond type of new bond batom1,batom2 = atom IDs for two atoms in bond {single/angle} args = atype aatom1 aatom2 aatom3 - atype = bond type of new angle + atype = angle type of new angle aatom1,aatom2,aatom3 = atom IDs for three atoms in angle {single/dihedral} args = dtype datom1 datom2 datom3 datom4 - dtype = bond type of new dihedral + dtype = dihedral type of new dihedral datom1,datom2,datom3,datom4 = atom IDs for four atoms in dihedral {single/improper} args = itype iatom1 iatom2 iatom3 iatom4 - itype = bond type of new improper + itype = improper type of new improper iatom1,iatom2,iatom3,iatom4 = atom IDs for four atoms in improper :pre zero or more keyword/value pairs may be appended :l keyword = {special} :l @@ -177,7 +177,7 @@ to only trigger the internal list to be created once, after the last bond (or angle, or dihedral, or improper) is added: create_bonds single/bond 5 52 98 special no -create_bonds single/bond 5 73 74 special no +create_bonds single/bond 5 73 74 special no ... create_bonds single/bond 5 17 386 special no create_bonds single/bond 4 112 183 special yes :pre From 9b15f4e2dc4efb25730aff73e0d7ec453070e56c Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Tue, 8 Oct 2019 12:47:30 -0700 Subject: [PATCH 206/237] Added the change to langevin gjf documentation --- doc/src/fix_langevin.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/fix_langevin.txt b/doc/src/fix_langevin.txt index 07d8b274aa..49ecf96ff6 100644 --- a/doc/src/fix_langevin.txt +++ b/doc/src/fix_langevin.txt @@ -246,11 +246,11 @@ velocity given in "Gronbech-Jensen/Farago"_#Gronbech-Jensen; this velocity is shown to be systematically lower than the target temperature by a small amount, which grows quadratically with the timestep. The {gjf} option {vhalf} outputs the 2GJ half-step velocity given in -"Gronbech Jensen/Gronbech-Jensen"_#2Gronbech-Jensen; this velocity is shown -to not have any linear statistical errors for any stable time step. +"Gronbech Jensen/Gronbech-Jensen"_#2Gronbech-Jensen; for linear systems, +this velocity is shown to not have any statistical errors for any stable time step. An overview of statistically correct Boltzmann and Maxwell-Boltzmann sampling of true on-site and true half-step velocities is given in -"Gronbech-Jensen_#1Gronbech-Jensen. +"Gronbech-Jensen"_#1Gronbech-Jensen. Regardless of the choice of output velocity, the sampling of the configurational distribution of atom positions is the same, and linearly consistent with the target temperature. From 945f903683d4044817c7282cd7b473499efbc9d2 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Tue, 8 Oct 2019 18:02:21 -0600 Subject: [PATCH 207/237] added an examples/UNITS dir --- doc/src/Examples.txt | 1 + examples/README | 7 + examples/UNITS/README | 49 ++++++ examples/UNITS/in.ar.lj | 43 +++++ examples/UNITS/in.ar.metal | 98 +++++++++++ examples/UNITS/in.ar.real | 98 +++++++++++ examples/UNITS/log.ar.lj.8Oct19.g++.1 | 109 +++++++++++++ examples/UNITS/log.ar.lj.8Oct19.g++.4 | 109 +++++++++++++ examples/UNITS/log.ar.metal.8Oct19.g++.1 | 197 +++++++++++++++++++++++ examples/UNITS/log.ar.metal.8Oct19.g++.4 | 197 +++++++++++++++++++++++ examples/UNITS/log.ar.real.8Oct19.g++.1 | 197 +++++++++++++++++++++++ examples/UNITS/log.ar.real.8Oct19.g++.4 | 197 +++++++++++++++++++++++ 12 files changed, 1302 insertions(+) create mode 100644 examples/UNITS/README create mode 100644 examples/UNITS/in.ar.lj create mode 100644 examples/UNITS/in.ar.metal create mode 100644 examples/UNITS/in.ar.real create mode 100644 examples/UNITS/log.ar.lj.8Oct19.g++.1 create mode 100644 examples/UNITS/log.ar.lj.8Oct19.g++.4 create mode 100644 examples/UNITS/log.ar.metal.8Oct19.g++.1 create mode 100644 examples/UNITS/log.ar.metal.8Oct19.g++.4 create mode 100644 examples/UNITS/log.ar.real.8Oct19.g++.1 create mode 100644 examples/UNITS/log.ar.real.8Oct19.g++.4 diff --git a/doc/src/Examples.txt b/doc/src/Examples.txt index 36d0ac86f9..86617e13df 100644 --- a/doc/src/Examples.txt +++ b/doc/src/Examples.txt @@ -141,6 +141,7 @@ HEAT: compute thermal conductivity for LJ and water via fix ehex KAPPA: compute thermal conductivity via several methods MC: using LAMMPS in a Monte Carlo mode to relax the energy of a system SPIN: examples for features of the SPIN package +UNITS: examples that run the same simulation in lj, real, metal units USER: examples for USER packages and USER-contributed commands VISCOSITY: compute viscosity via several methods :tb(s=:) diff --git a/examples/README b/examples/README index 68a2317ffc..47463a85d8 100644 --- a/examples/README +++ b/examples/README @@ -76,6 +76,7 @@ ellipse: ellipsoidal particles in spherical solvent, 2d system flow: Couette and Poiseuille flow in a 2d channel friction: frictional contact of spherical asperities between 2d surfaces gcmc: Grand Canonical Monte Carlo (GCMC) via the fix gcmc command +gjf: use of fix langevin Gronbech-Jensen/Farago option granregion: use of fix wall/region/gran as boundary on granular particles hugoniostat: Hugoniostat shock dynamics hyper: global and local hyperdynamics of diffusion on Pt surface @@ -163,6 +164,12 @@ The MC directory has an example script for using LAMMPS as an energy-evaluation engine in a iterative Monte Carlo energy-relaxation loop. +The UNITS directory contains examples of input scripts modeling the +same Lennard-Jones liquid model, written in 3 different unit systems: +lj, real, and metal. So that you can see how to scale/unscale input +and output values read/written by LAMMPS to verify you are performing +the same simulation in different unit systems. + The USER directory contains subdirectories of user-provided example scripts for ser packages. See the README files in those directories for more info. See the doc/Section_start.html file for more info diff --git a/examples/UNITS/README b/examples/UNITS/README new file mode 100644 index 0000000000..0bc2607cc6 --- /dev/null +++ b/examples/UNITS/README @@ -0,0 +1,49 @@ +This directory has 3 scripts which show how to run the same problem +using the 3 most common units system used in LAMMPS: lj, real, and +metal units. As stated on the units command doc page: + +"Any simulation you perform for one choice of units can be duplicated +with any other unit setting LAMMPS supports. ... To perform the same +simulation in a different set of units you must change all the +unit-based input parameters in your input script and other input files +(data file, potential files, etc) correctly to the new units. And you +must correctly convert all output from the new units to the old units +when comparing to the original results. That is often not simple to +do." + +These examples are meant to illustrate how to do this for a simple +Lennard-Jones liquid (argon). All of the scripts have a set of +variables defined at the top which can be changed as command line +arguments (e.g. -v cutoff 3.0). All 3 scripts give identical output, +modulo round-offs due to the finite precision of the conversion +factors used, either internally in LAMMPS or in the scripts. If there +were run for a long time, the trajectories would diverge, but they +would still give statistically identical results. + +The LJ script is the simplest; it is similar to the bench/in.lj +script. + +The real and metal scripts each have a set of variables at the top +which define scale factors for converting quantities like distance, +energy, pressure from reduced LJ units to real or metal units. Once +these are defined the rest of the input script is very similar to the +LJ script. The approprate scale factor is applied to every input. +Output quantities are printed in both the native real/metal units and +unscaled back to LJ units. So that you can see the outputs are the +same if you examine the log files. Comments about this comparison +are at the bottom of the real and metal scripts. + +If you understand LJ reduced units (see Allen & Tildesley's Computer +Simulation of Liquids, Appendix B for a nice discussion), and you +study these scripts, you should be able to convert an input script in +one set of units to an identical input script in an alternate set of +units. Where "identical" means it runs the same simulation in a +statistical sense. For example you could easily define conversion +factors from real to metal units or vice versa, and use them to scale +inputs and outputs in one script to produce a script in alternate +units. + +You can find the full set of scale factors LAMMPS uses internally for +different unit systems it supports, at the top of the src/udpate.cpp +file. A couple of those values are used in the real and metal +scripts. diff --git a/examples/UNITS/in.ar.lj b/examples/UNITS/in.ar.lj new file mode 100644 index 0000000000..264ead8ab8 --- /dev/null +++ b/examples/UNITS/in.ar.lj @@ -0,0 +1,43 @@ +# Ar in lj units + +# simulation params in reduced units +# settable from command line +# epsilon = sigma = mass = 1.0 + +variable x index 5 +variable y index 5 +variable z index 5 +variable rhostar index 0.8842 +variable dt index 0.005 +variable cutoff index 2.5 +variable skin index 0.3 +variable tinitial index 1.0 +variable nthermo index 10 +variable nsteps index 100 + +# script + +units lj +atom_style atomic + +lattice fcc ${rhostar} +region box block 0 $x 0 $y 0 $z +create_box 1 box +create_atoms 1 box +mass 1 1.0 + +velocity all create ${tinitial} 12345 + +pair_style lj/cut ${cutoff} +pair_coeff 1 1 1.0 1.0 + +neighbor ${skin} bin +neigh_modify delay 0 every 20 check no + +fix 1 all nve + +timestep ${dt} + +thermo 10 + +run 100 diff --git a/examples/UNITS/in.ar.metal b/examples/UNITS/in.ar.metal new file mode 100644 index 0000000000..50f105530e --- /dev/null +++ b/examples/UNITS/in.ar.metal @@ -0,0 +1,98 @@ +# Ar in metal units + +# simulation params in reduced units +# settable from command line +# epsilon, sigma, mass set below + +variable x index 5 +variable y index 5 +variable z index 5 +variable rhostar index 0.8842 +variable dt index 0.005 +variable cutoff index 2.5 +variable skin index 0.3 +variable tinitial index 1.0 +variable nthermo index 10 +variable nsteps index 100 + +# physical constants from update.cpp + +variable kb index 8.617343e-5 # kB in eV/K +variable avogadro index 6.02214129e23 # Avogadro's number + +# Ar properties in metal units + +variable epskb index 117.7 # LJ epsilon/kB in degrees K +variable sigma index 3.504 # LJ sigma in Angstroms +variable epsilon equal ${epskb}*${kb} # LJ epsilon in eV +variable mass index 39.95 # mass in g/mole + +# scale factors + +# sigma = scale factor on distance, converts reduced distance to Angs +# epsilon = scale factor on energy, converts reduced energy to eV +# tmpscale = scale factor on temperature, converts reduced temp to degrees K +# tscale = scale factor on time, converts reduced time to ps +# formula is t = t* / sqrt(epsilon/mass/sigma^2), but need t in fs +# use epsilon (Joule), mass (kg/atom), sigma (meter) to get t in seconds +# pscale = scale factor on pressure, converts reduced pressure to bars +# formula is P = P* / (sigma^3/epsilon), but need P in atmospheres +# use sigma (meter), epsilon (Joule) to get P in nt/meter^2, convert to bars + +variable eVtoJoule index 1.602e-19 # convert eV to Joules +variable NtMtoAtm equal 1.0e-5 # convert Nt/meter^2 to bars + +variable tmpscale equal ${epskb} +variable epsilonJ equal ${epsilon}*${eVtoJoule} +variable massKgAtom equal ${mass}/1000.0/${avogadro} +variable sigmaM equal ${sigma}/1.0e10 +variable sigmaMsq equal ${sigmaM}*${sigmaM} +variable tscale equal 1.0e12/sqrt(${epsilonJ}/${massKgAtom}/${sigmaMsq}) +variable sigmaM3 equal ${sigmaM}*${sigmaM}*${sigmaM} +variable pscale equal ${NtMtoAtm}/(${sigmaM3}/(${epsilonJ})) + +# variables +# alat = lattice constant in Angs (at reduced density rhostar) +# temp = reduced temperature for output +# epair,emol,etotal = reduced epair,emol,etotal energies for output +# press = reduced pressure for output + +variable alat equal (4.0*${sigma}*${sigma}*${sigma}/${rhostar})^(1.0/3.0) +variable temp equal temp/${tmpscale} +variable epair equal epair/${epsilon} +variable emol equal emol/${epsilon} +variable etotal equal etotal/${epsilon} +variable press equal press/${pscale} + +# same script as in.ar.lj + +units metal +atom_style atomic + +lattice fcc ${alat} +region box block 0 $x 0 $y 0 $z +create_box 1 box +create_atoms 1 box +mass 1 ${mass} + +velocity all create $(v_tinitial*v_epskb) 12345 + +pair_style lj/cut $(v_cutoff*v_sigma) +pair_coeff 1 1 ${epsilon} ${sigma} + +neighbor $(v_skin*v_sigma) bin +neigh_modify delay 0 every 20 check no + +fix 1 all nve + +timestep $(v_dt*v_tscale) + +# columns 2,3,4 = temp,pe,press in metal units +# columns 5-9 = temp,energy.press in reduced units, compare to in.ar.lj +# need to include metal unit output to enable use of reduced variables + +thermo_style custom step temp pe press v_temp v_epair v_emol v_etotal v_press +thermo_modify norm yes +thermo ${nthermo} + +run ${nsteps} diff --git a/examples/UNITS/in.ar.real b/examples/UNITS/in.ar.real new file mode 100644 index 0000000000..ea9670e599 --- /dev/null +++ b/examples/UNITS/in.ar.real @@ -0,0 +1,98 @@ +# Ar in real units + +# simulation params in reduced units +# settable from command line +# epsilon, sigma, mass set below + +variable x index 5 +variable y index 5 +variable z index 5 +variable rhostar index 0.8842 +variable dt index 0.005 +variable cutoff index 2.5 +variable skin index 0.3 +variable tinitial index 1.0 +variable nthermo index 10 +variable nsteps index 100 + +# physical constants from update.cpp + +variable kb index 0.0019872067 # kB in Kcal/mole/K +variable avogadro index 6.02214129e23 # Avogadro's number + +# Ar properties in real units + +variable epskb index 117.7 # LJ epsilon/kB in degrees K +variable sigma index 3.504 # LJ sigma in Angstroms +variable epsilon equal ${epskb}*${kb} # LJ epsilon in Kcal/mole +variable mass index 39.95 # mass in g/mole + +# scale factors + +# sigma = scale factor on distance, converts reduced distance to Angs +# epsilon = scale factor on energy, converts reduced energy to Kcal/mole +# tmpscale = scale factor on temperature, converts reduced temp to degrees K +# tscale = scale factor on time, converts reduced time to fs +# formula is t = t* / sqrt(epsilon/mass/sigma^2), but need t in fs +# use epsilon (Joule/mole), mass (kg/mole), sigma (meter) to get t in seconds +# pscale = scale factor on pressure, converts reduced pressure to atmospheres +# formula is P = P* / (sigma^3/epsilon), but need P in atmospheres +# use sigma (meter), epsilon (Joule) to get P in nt/meter^2, convert to atms + +variable KcaltoJoule index 4.1868e3 # convert Kcals to Joules +variable NtMtoAtm equal 1.0/1.0135e5 # convert Nt/meter^2 to Atmospheres + +variable tmpscale equal ${epskb} +variable epsJmole equal ${epsilon}*${KcaltoJoule} +variable massKgmole equal ${mass}/1000.0 +variable sigmaM equal ${sigma}/1.0e10 +variable sigmaMsq equal ${sigmaM}*${sigmaM} +variable tscale equal 1.0e15/sqrt(${epsJmole}/${massKgmole}/${sigmaMsq}) +variable sigmaM3 equal ${sigmaM}*${sigmaM}*${sigmaM} +variable pscale equal ${NtMtoAtm}/(${sigmaM3}/(${epsJmole}/${avogadro})) + +# variables +# alat = lattice constant in Angs (at reduced density rhostar) +# temp = reduced temperature for output +# epair,emol,etotal = reduced epair,emol,etotal energies for output +# press = reduced pressure for output + +variable alat equal (4.0*${sigma}*${sigma}*${sigma}/${rhostar})^(1.0/3.0) +variable temp equal temp/${tmpscale} +variable epair equal epair/${epsilon} +variable emol equal emol/${epsilon} +variable etotal equal etotal/${epsilon} +variable press equal press/${pscale} + +# same script as in.ar.lj + +units real +atom_style atomic + +lattice fcc ${alat} +region box block 0 $x 0 $y 0 $z +create_box 1 box +create_atoms 1 box +mass 1 ${mass} + +velocity all create $(v_tinitial*v_epskb) 12345 + +pair_style lj/cut $(v_cutoff*v_sigma) +pair_coeff 1 1 ${epsilon} ${sigma} + +neighbor $(v_skin*v_sigma) bin +neigh_modify delay 0 every 20 check no + +fix 1 all nve + +timestep $(v_dt*v_tscale) + +# columns 2,3,4 = temp,pe,press in real units +# columns 5-9 = temp,energy.press in reduced units, compare to in.ar.lj +# need to include real unit output to enable use of reduced variables + +thermo_style custom step temp pe press v_temp v_epair v_emol v_etotal v_press +thermo_modify norm yes +thermo ${nthermo} + +run ${nsteps} diff --git a/examples/UNITS/log.ar.lj.8Oct19.g++.1 b/examples/UNITS/log.ar.lj.8Oct19.g++.1 new file mode 100644 index 0000000000..39c3143cf5 --- /dev/null +++ b/examples/UNITS/log.ar.lj.8Oct19.g++.1 @@ -0,0 +1,109 @@ +LAMMPS (19 Sep 2019) +# Ar in lj units + +# simulation params in reduced units +# settable from command line +# epsilon = sigma = mass = 1.0 + +variable x index 5 +variable y index 5 +variable z index 5 +variable rhostar index 0.8842 +variable dt index 0.005 +variable cutoff index 2.5 +variable skin index 0.3 +variable tinitial index 1.0 +variable nthermo index 10 +variable nsteps index 100 + +# script + +units lj +atom_style atomic + +lattice fcc ${rhostar} +lattice fcc 0.8842 +Lattice spacing in x,y,z = 1.65388 1.65388 1.65388 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.26938 8.26938 8.26938) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.000547171 secs +mass 1 1.0 + +velocity all create ${tinitial} 12345 +velocity all create 1.0 12345 + +pair_style lj/cut ${cutoff} +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 + +neighbor ${skin} bin +neighbor 0.3 bin +neigh_modify delay 0 every 20 check no + +fix 1 all nve + +timestep ${dt} +timestep 0.005 + +thermo 10 + +run 100 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.644 | 2.644 | 2.644 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1 -7.1026383 0 -5.6056383 -5.1224757 + 10 0.74213042 -6.7245488 0 -5.6135795 -3.1363153 + 20 0.36167746 -6.1681704 0 -5.6267393 -0.40461854 + 30 0.4684512 -6.3315744 0 -5.630303 -1.0390065 + 40 0.46774191 -6.3308002 0 -5.6305906 -1.077533 + 50 0.48323399 -6.3533122 0 -5.6299109 -1.1506287 + 60 0.49569105 -6.3711644 0 -5.6291149 -1.2296104 + 70 0.5208333 -6.4096336 0 -5.6299462 -1.4483636 + 80 0.53708431 -6.4345933 0 -5.6305781 -1.5945708 + 90 0.52618946 -6.4185937 0 -5.6308881 -1.5264055 + 100 0.52862701 -6.4231724 0 -5.6318178 -1.5714077 +Loop time of 0.065218 on 1 procs for 100 steps with 500 atoms + +Performance: 662394.104 tau/day, 1533.320 timesteps/s +99.9% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.053584 | 0.053584 | 0.053584 | 0.0 | 82.16 +Neigh | 0.0075939 | 0.0075939 | 0.0075939 | 0.0 | 11.64 +Comm | 0.0022638 | 0.0022638 | 0.0022638 | 0.0 | 3.47 +Output | 0.00021172 | 0.00021172 | 0.00021172 | 0.0 | 0.32 +Modify | 0.0011077 | 0.0011077 | 0.0011077 | 0.0 | 1.70 +Other | | 0.0004568 | | | 0.70 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1946 ave 1946 max 1946 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19572 ave 19572 max 19572 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19572 +Ave neighs/atom = 39.144 +Neighbor list builds = 5 +Dangerous builds not checked +Total wall time: 0:00:00 diff --git a/examples/UNITS/log.ar.lj.8Oct19.g++.4 b/examples/UNITS/log.ar.lj.8Oct19.g++.4 new file mode 100644 index 0000000000..dba5ffb66a --- /dev/null +++ b/examples/UNITS/log.ar.lj.8Oct19.g++.4 @@ -0,0 +1,109 @@ +LAMMPS (19 Sep 2019) +# Ar in lj units + +# simulation params in reduced units +# settable from command line +# epsilon = sigma = mass = 1.0 + +variable x index 5 +variable y index 5 +variable z index 5 +variable rhostar index 0.8842 +variable dt index 0.005 +variable cutoff index 2.5 +variable skin index 0.3 +variable tinitial index 1.0 +variable nthermo index 10 +variable nsteps index 100 + +# script + +units lj +atom_style atomic + +lattice fcc ${rhostar} +lattice fcc 0.8842 +Lattice spacing in x,y,z = 1.65388 1.65388 1.65388 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (8.26938 8.26938 8.26938) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.000570774 secs +mass 1 1.0 + +velocity all create ${tinitial} 12345 +velocity all create 1.0 12345 + +pair_style lj/cut ${cutoff} +pair_style lj/cut 2.5 +pair_coeff 1 1 1.0 1.0 + +neighbor ${skin} bin +neighbor 0.3 bin +neigh_modify delay 0 every 20 check no + +fix 1 all nve + +timestep ${dt} +timestep 0.005 + +thermo 10 + +run 100 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.609 | 2.609 | 2.609 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 1 -7.1026383 0 -5.6056383 -5.1224757 + 10 0.73621446 -6.7154544 0 -5.6133413 -3.089257 + 20 0.35775263 -6.1618707 0 -5.626315 -0.37875949 + 30 0.47139877 -6.3359656 0 -5.6302816 -1.1018761 + 40 0.46337135 -6.3247084 0 -5.6310415 -1.0985336 + 50 0.48738877 -6.360393 0 -5.630772 -1.2274707 + 60 0.50832261 -6.3913892 0 -5.6304302 -1.374293 + 70 0.50988271 -6.3936997 0 -5.6304053 -1.4112286 + 80 0.53931444 -6.4367444 0 -5.6293906 -1.6484686 + 90 0.55277272 -6.4563334 0 -5.6288326 -1.760598 + 100 0.54916776 -6.4507537 0 -5.6286495 -1.728837 +Loop time of 0.0237499 on 4 procs for 100 steps with 500 atoms + +Performance: 1818955.951 tau/day, 4210.546 timesteps/s +97.1% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0098808 | 0.011585 | 0.015043 | 1.9 | 48.78 +Neigh | 0.0015168 | 0.0017335 | 0.001997 | 0.4 | 7.30 +Comm | 0.005949 | 0.0097297 | 0.011739 | 2.3 | 40.97 +Output | 0.00019789 | 0.0002324 | 0.00032282 | 0.0 | 0.98 +Modify | 0.00021482 | 0.00025994 | 0.00031853 | 0.0 | 1.09 +Other | | 0.0002095 | | | 0.88 + +Nlocal: 125 ave 133 max 117 min +Histogram: 1 0 0 1 0 0 1 0 0 1 +Nghost: 1099 ave 1107 max 1091 min +Histogram: 1 0 0 1 0 0 1 0 0 1 +Neighs: 4909 ave 5493 max 4644 min +Histogram: 1 2 0 0 0 0 0 0 0 1 + +Total # of neighbors = 19636 +Ave neighs/atom = 39.272 +Neighbor list builds = 5 +Dangerous builds not checked +Total wall time: 0:00:00 diff --git a/examples/UNITS/log.ar.metal.8Oct19.g++.1 b/examples/UNITS/log.ar.metal.8Oct19.g++.1 new file mode 100644 index 0000000000..8bcf54f6ed --- /dev/null +++ b/examples/UNITS/log.ar.metal.8Oct19.g++.1 @@ -0,0 +1,197 @@ +LAMMPS (19 Sep 2019) +# Ar in metal units + +# simulation params in reduced units +# settable from command line +# epsilon, sigma, mass set below + +variable x index 5 +variable y index 5 +variable z index 5 +variable rhostar index 0.8842 +variable dt index 0.005 +variable cutoff index 2.5 +variable skin index 0.3 +variable tinitial index 1.0 +variable nthermo index 10 +variable nsteps index 100 + +# physical constants from update.cpp + +variable kb index 8.617343e-5 # kB in eV/K +variable avogadro index 6.02214129e23 # Avogadro's number + +# Ar properties in metal units + +variable epskb index 117.7 # LJ epsilon/kB in degrees K +variable sigma index 3.504 # LJ sigma in Angstroms +variable epsilon equal ${epskb}*${kb} # LJ epsilon in eV +variable epsilon equal 117.7*${kb} +variable epsilon equal 117.7*8.617343e-5 +variable mass index 39.95 # mass in g/mole + +# scale factors + +# sigma = scale factor on distance, converts reduced distance to Angs +# epsilon = scale factor on energy, converts reduced energy to eV +# tmpscale = scale factor on temperature, converts reduced temp to degrees K +# tscale = scale factor on time, converts reduced time to ps +# formula is t = t* / sqrt(epsilon/mass/sigma^2), but need t in fs +# use epsilon (Joule), mass (kg/atom), sigma (meter) to get t in seconds +# pscale = scale factor on pressure, converts reduced pressure to bars +# formula is P = P* / (sigma^3/epsilon), but need P in atmospheres +# use sigma (meter), epsilon (Joule) to get P in nt/meter^2, convert to bars + +variable eVtoJoule index 1.602e-19 # convert eV to Joules +variable NtMtoAtm equal 1.0e-5 # convert Nt/meter^2 to bars + +variable tmpscale equal ${epskb} +variable tmpscale equal 117.7 +variable epsilonJ equal ${epsilon}*${eVtoJoule} +variable epsilonJ equal 0.010142612711*${eVtoJoule} +variable epsilonJ equal 0.010142612711*1.602e-19 +variable massKgAtom equal ${mass}/1000.0/${avogadro} +variable massKgAtom equal 39.95/1000.0/${avogadro} +variable massKgAtom equal 39.95/1000.0/6.02214129e23 +variable sigmaM equal ${sigma}/1.0e10 +variable sigmaM equal 3.504/1.0e10 +variable sigmaMsq equal ${sigmaM}*${sigmaM} +variable sigmaMsq equal 3.504e-10*${sigmaM} +variable sigmaMsq equal 3.504e-10*3.504e-10 +variable tscale equal 1.0e12/sqrt(${epsilonJ}/${massKgAtom}/${sigmaMsq}) +variable tscale equal 1.0e12/sqrt(1.6248465563022e-21/${massKgAtom}/${sigmaMsq}) +variable tscale equal 1.0e12/sqrt(1.6248465563022e-21/6.6338529895236e-26/${sigmaMsq}) +variable tscale equal 1.0e12/sqrt(1.6248465563022e-21/6.6338529895236e-26/1.2278016e-19) +variable sigmaM3 equal ${sigmaM}*${sigmaM}*${sigmaM} +variable sigmaM3 equal 3.504e-10*${sigmaM}*${sigmaM} +variable sigmaM3 equal 3.504e-10*3.504e-10*${sigmaM} +variable sigmaM3 equal 3.504e-10*3.504e-10*3.504e-10 +variable pscale equal ${NtMtoAtm}/(${sigmaM3}/(${epsilonJ})) +variable pscale equal 1e-05/(${sigmaM3}/(${epsilonJ})) +variable pscale equal 1e-05/(4.3022168064e-29/(${epsilonJ})) +variable pscale equal 1e-05/(4.3022168064e-29/(1.6248465563022e-21)) + +# variables +# alat = lattice constant in Angs (at reduced density rhostar) +# temp = reduced temperature for output +# epair,emol,etotal = reduced epair,emol,etotal energies for output +# press = reduced pressure for output + +variable alat equal (4.0*${sigma}*${sigma}*${sigma}/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*${sigma}*${sigma}/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*3.504*${sigma}/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*3.504*3.504/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*3.504*3.504/0.8842)^(1.0/3.0) +variable temp equal temp/${tmpscale} +variable temp equal temp/117.7 +variable epair equal epair/${epsilon} +variable epair equal epair/0.010142612711 +variable emol equal emol/${epsilon} +variable emol equal emol/0.010142612711 +variable etotal equal etotal/${epsilon} +variable etotal equal etotal/0.010142612711 +variable press equal press/${pscale} +variable press equal press/377.676586146256 + +# same script as in.ar.lj + +units metal +atom_style atomic + +lattice fcc ${alat} +lattice fcc 5.79518437579763 +Lattice spacing in x,y,z = 5.79518 5.79518 5.79518 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (28.9759 28.9759 28.9759) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.000549078 secs +mass 1 ${mass} +mass 1 39.95 + +velocity all create $(v_tinitial*v_epskb) 12345 +velocity all create 117.70000000000000284 12345 + +pair_style lj/cut $(v_cutoff*v_sigma) +pair_style lj/cut 8.7599999999999997868 +pair_coeff 1 1 ${epsilon} ${sigma} +pair_coeff 1 1 0.010142612711 ${sigma} +pair_coeff 1 1 0.010142612711 3.504 + +neighbor $(v_skin*v_sigma) bin +neighbor 1.0511999999999999122 bin +neigh_modify delay 0 every 20 check no + +fix 1 all nve + +timestep $(v_dt*v_tscale) +timestep 0.011194658410003900315 + +# columns 2,3,4 = temp,pe,press in metal units +# columns 5-9 = temp,energy.press in reduced units, compare to in.ar.lj +# need to include metal unit output to enable use of reduced variables + +thermo_style custom step temp pe press v_temp v_epair v_emol v_etotal v_press +thermo_modify norm yes +thermo ${nthermo} +thermo 10 + +run ${nsteps} +run 100 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 9.8112 + ghost atom cutoff = 9.8112 + binsize = 4.9056, bins = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.644 | 2.644 | 2.644 Mbytes +Step Temp PotEng Press v_temp v_epair v_emol v_etotal v_press + 0 117.7 -0.07203931 -1934.8523 1 -7.1026383 0 -5.6056383 -5.12304 + 10 87.345225 -0.06820404 -1184.5618 0.74210047 -6.724504 0 -5.6135796 -3.1364449 + 20 42.569809 -0.062561408 -152.82812 0.36168062 -6.1681748 0 -5.6267389 -0.40465341 + 30 55.137637 -0.064219154 -392.49645 0.46845911 -6.3316185 0 -5.6303352 -1.0392396 + 40 55.053014 -0.064210828 -406.99941 0.46774014 -6.3307976 0 -5.6305906 -1.07764 + 50 56.87723 -0.064439241 -434.61958 0.483239 -6.3533177 0 -5.6299089 -1.1507718 + 60 58.344019 -0.064620383 -464.4684 0.4957011 -6.3711772 0 -5.6291126 -1.2298046 + 70 61.30301 -0.065010529 -547.09852 0.5208412 -6.4096433 0 -5.629944 -1.44859 + 80 63.214836 -0.065263563 -602.29599 0.53708442 -6.4345909 0 -5.6305755 -1.5947401 + 90 61.931826 -0.065101194 -576.5342 0.52618374 -6.4185823 0 -5.6308852 -1.5265288 + 100 62.221816 -0.065148028 -593.59878 0.52864755 -6.4231998 0 -5.6318144 -1.5717119 +Loop time of 0.04864 on 1 procs for 100 steps with 500 atoms + +Performance: 1988.524 ns/day, 0.012 hours/ns, 2055.921 timesteps/s +99.8% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.039802 | 0.039802 | 0.039802 | 0.0 | 81.83 +Neigh | 0.0057771 | 0.0057771 | 0.0057771 | 0.0 | 11.88 +Comm | 0.0015905 | 0.0015905 | 0.0015905 | 0.0 | 3.27 +Output | 0.00033736 | 0.00033736 | 0.00033736 | 0.0 | 0.69 +Modify | 0.00077343 | 0.00077343 | 0.00077343 | 0.0 | 1.59 +Other | | 0.0003595 | | | 0.74 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1946 ave 1946 max 1946 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19572 ave 19572 max 19572 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19572 +Ave neighs/atom = 39.144 +Neighbor list builds = 5 +Dangerous builds not checked +Total wall time: 0:00:00 diff --git a/examples/UNITS/log.ar.metal.8Oct19.g++.4 b/examples/UNITS/log.ar.metal.8Oct19.g++.4 new file mode 100644 index 0000000000..5a88231128 --- /dev/null +++ b/examples/UNITS/log.ar.metal.8Oct19.g++.4 @@ -0,0 +1,197 @@ +LAMMPS (19 Sep 2019) +# Ar in metal units + +# simulation params in reduced units +# settable from command line +# epsilon, sigma, mass set below + +variable x index 5 +variable y index 5 +variable z index 5 +variable rhostar index 0.8842 +variable dt index 0.005 +variable cutoff index 2.5 +variable skin index 0.3 +variable tinitial index 1.0 +variable nthermo index 10 +variable nsteps index 100 + +# physical constants from update.cpp + +variable kb index 8.617343e-5 # kB in eV/K +variable avogadro index 6.02214129e23 # Avogadro's number + +# Ar properties in metal units + +variable epskb index 117.7 # LJ epsilon/kB in degrees K +variable sigma index 3.504 # LJ sigma in Angstroms +variable epsilon equal ${epskb}*${kb} # LJ epsilon in eV +variable epsilon equal 117.7*${kb} +variable epsilon equal 117.7*8.617343e-5 +variable mass index 39.95 # mass in g/mole + +# scale factors + +# sigma = scale factor on distance, converts reduced distance to Angs +# epsilon = scale factor on energy, converts reduced energy to eV +# tmpscale = scale factor on temperature, converts reduced temp to degrees K +# tscale = scale factor on time, converts reduced time to ps +# formula is t = t* / sqrt(epsilon/mass/sigma^2), but need t in fs +# use epsilon (Joule), mass (kg/atom), sigma (meter) to get t in seconds +# pscale = scale factor on pressure, converts reduced pressure to bars +# formula is P = P* / (sigma^3/epsilon), but need P in atmospheres +# use sigma (meter), epsilon (Joule) to get P in nt/meter^2, convert to bars + +variable eVtoJoule index 1.602e-19 # convert eV to Joules +variable NtMtoAtm equal 1.0e-5 # convert Nt/meter^2 to bars + +variable tmpscale equal ${epskb} +variable tmpscale equal 117.7 +variable epsilonJ equal ${epsilon}*${eVtoJoule} +variable epsilonJ equal 0.010142612711*${eVtoJoule} +variable epsilonJ equal 0.010142612711*1.602e-19 +variable massKgAtom equal ${mass}/1000.0/${avogadro} +variable massKgAtom equal 39.95/1000.0/${avogadro} +variable massKgAtom equal 39.95/1000.0/6.02214129e23 +variable sigmaM equal ${sigma}/1.0e10 +variable sigmaM equal 3.504/1.0e10 +variable sigmaMsq equal ${sigmaM}*${sigmaM} +variable sigmaMsq equal 3.504e-10*${sigmaM} +variable sigmaMsq equal 3.504e-10*3.504e-10 +variable tscale equal 1.0e12/sqrt(${epsilonJ}/${massKgAtom}/${sigmaMsq}) +variable tscale equal 1.0e12/sqrt(1.6248465563022e-21/${massKgAtom}/${sigmaMsq}) +variable tscale equal 1.0e12/sqrt(1.6248465563022e-21/6.6338529895236e-26/${sigmaMsq}) +variable tscale equal 1.0e12/sqrt(1.6248465563022e-21/6.6338529895236e-26/1.2278016e-19) +variable sigmaM3 equal ${sigmaM}*${sigmaM}*${sigmaM} +variable sigmaM3 equal 3.504e-10*${sigmaM}*${sigmaM} +variable sigmaM3 equal 3.504e-10*3.504e-10*${sigmaM} +variable sigmaM3 equal 3.504e-10*3.504e-10*3.504e-10 +variable pscale equal ${NtMtoAtm}/(${sigmaM3}/(${epsilonJ})) +variable pscale equal 1e-05/(${sigmaM3}/(${epsilonJ})) +variable pscale equal 1e-05/(4.3022168064e-29/(${epsilonJ})) +variable pscale equal 1e-05/(4.3022168064e-29/(1.6248465563022e-21)) + +# variables +# alat = lattice constant in Angs (at reduced density rhostar) +# temp = reduced temperature for output +# epair,emol,etotal = reduced epair,emol,etotal energies for output +# press = reduced pressure for output + +variable alat equal (4.0*${sigma}*${sigma}*${sigma}/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*${sigma}*${sigma}/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*3.504*${sigma}/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*3.504*3.504/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*3.504*3.504/0.8842)^(1.0/3.0) +variable temp equal temp/${tmpscale} +variable temp equal temp/117.7 +variable epair equal epair/${epsilon} +variable epair equal epair/0.010142612711 +variable emol equal emol/${epsilon} +variable emol equal emol/0.010142612711 +variable etotal equal etotal/${epsilon} +variable etotal equal etotal/0.010142612711 +variable press equal press/${pscale} +variable press equal press/377.676586146256 + +# same script as in.ar.lj + +units metal +atom_style atomic + +lattice fcc ${alat} +lattice fcc 5.79518437579763 +Lattice spacing in x,y,z = 5.79518 5.79518 5.79518 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (28.9759 28.9759 28.9759) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.000674009 secs +mass 1 ${mass} +mass 1 39.95 + +velocity all create $(v_tinitial*v_epskb) 12345 +velocity all create 117.70000000000000284 12345 + +pair_style lj/cut $(v_cutoff*v_sigma) +pair_style lj/cut 8.7599999999999997868 +pair_coeff 1 1 ${epsilon} ${sigma} +pair_coeff 1 1 0.010142612711 ${sigma} +pair_coeff 1 1 0.010142612711 3.504 + +neighbor $(v_skin*v_sigma) bin +neighbor 1.0511999999999999122 bin +neigh_modify delay 0 every 20 check no + +fix 1 all nve + +timestep $(v_dt*v_tscale) +timestep 0.011194658410003900315 + +# columns 2,3,4 = temp,pe,press in metal units +# columns 5-9 = temp,energy.press in reduced units, compare to in.ar.lj +# need to include metal unit output to enable use of reduced variables + +thermo_style custom step temp pe press v_temp v_epair v_emol v_etotal v_press +thermo_modify norm yes +thermo ${nthermo} +thermo 10 + +run ${nsteps} +run 100 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 9.8112 + ghost atom cutoff = 9.8112 + binsize = 4.9056, bins = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.609 | 2.609 | 2.609 Mbytes +Step Temp PotEng Press v_temp v_epair v_emol v_etotal v_press + 0 117.7 -0.07203931 -1934.8523 1 -7.1026383 0 -5.6056383 -5.12304 + 10 86.648851 -0.06811179 -1166.7855 0.73618395 -6.7154088 0 -5.6133414 -3.0893774 + 20 42.107954 -0.062497536 -143.06615 0.35775662 -6.1618774 0 -5.6263157 -0.37880598 + 30 55.484504 -0.064263032 -416.20245 0.47140615 -6.3359445 0 -5.6302495 -1.1020075 + 40 54.538222 -0.064148334 -414.88071 0.46336637 -6.3246361 0 -5.6309766 -1.0985079 + 50 57.367693 -0.064511259 -463.67683 0.48740606 -6.3604182 0 -5.6307714 -1.2277087 + 60 59.828794 -0.064824938 -519.05997 0.50831601 -6.3913451 0 -5.630396 -1.3743504 + 70 60.014616 -0.064848979 -533.07604 0.50989478 -6.3937154 0 -5.6304029 -1.4114617 + 80 63.47861 -0.065285885 -622.71073 0.53932549 -6.4367917 0 -5.6294215 -1.6487936 + 90 65.060881 -0.065484011 -664.99883 0.55276874 -6.4563257 0 -5.6288309 -1.7607627 + 100 64.637033 -0.065427467 -653.00765 0.54916765 -6.4507508 0 -5.6286468 -1.7290128 +Loop time of 0.0258265 on 4 procs for 100 steps with 500 atoms + +Performance: 3745.060 ns/day, 0.006 hours/ns, 3871.990 timesteps/s +99.6% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.0090213 | 0.012419 | 0.015494 | 2.1 | 48.09 +Neigh | 0.0013709 | 0.0018765 | 0.0022483 | 0.7 | 7.27 +Comm | 0.0071132 | 0.010597 | 0.014538 | 2.6 | 41.03 +Output | 0.00039983 | 0.00042897 | 0.00049567 | 0.0 | 1.66 +Modify | 0.00024104 | 0.00028801 | 0.00031543 | 0.0 | 1.12 +Other | | 0.0002173 | | | 0.84 + +Nlocal: 125 ave 133 max 117 min +Histogram: 1 0 0 1 0 0 1 0 0 1 +Nghost: 1099 ave 1107 max 1091 min +Histogram: 1 0 0 1 0 0 1 0 0 1 +Neighs: 4908.75 ave 5492 max 4644 min +Histogram: 1 2 0 0 0 0 0 0 0 1 + +Total # of neighbors = 19635 +Ave neighs/atom = 39.27 +Neighbor list builds = 5 +Dangerous builds not checked +Total wall time: 0:00:00 diff --git a/examples/UNITS/log.ar.real.8Oct19.g++.1 b/examples/UNITS/log.ar.real.8Oct19.g++.1 new file mode 100644 index 0000000000..7c046ab965 --- /dev/null +++ b/examples/UNITS/log.ar.real.8Oct19.g++.1 @@ -0,0 +1,197 @@ +LAMMPS (19 Sep 2019) +# Ar in real units + +# simulation params in reduced units +# settable from command line +# epsilon, sigma, mass set below + +variable x index 5 +variable y index 5 +variable z index 5 +variable rhostar index 0.8842 +variable dt index 0.005 +variable cutoff index 2.5 +variable skin index 0.3 +variable tinitial index 1.0 +variable nthermo index 10 +variable nsteps index 100 + +# physical constants from update.cpp + +variable kb index 0.0019872067 # kB in Kcal/mole/K +variable avogadro index 6.02214129e23 # Avogadro's number + +# Ar properties in real units + +variable epskb index 117.7 # LJ epsilon/kB in degrees K +variable sigma index 3.504 # LJ sigma in Angstroms +variable epsilon equal ${epskb}*${kb} # LJ epsilon in Kcal/mole +variable epsilon equal 117.7*${kb} +variable epsilon equal 117.7*0.0019872067 +variable mass index 39.95 # mass in g/mole + +# scale factors + +# sigma = scale factor on distance, converts reduced distance to Angs +# epsilon = scale factor on energy, converts reduced energy to Kcal/mole +# tmpscale = scale factor on temperature, converts reduced temp to degrees K +# tscale = scale factor on time, converts reduced time to fs +# formula is t = t* / sqrt(epsilon/mass/sigma^2), but need t in fs +# use epsilon (Joule/mole), mass (kg/mole), sigma (meter) to get t in seconds +# pscale = scale factor on pressure, converts reduced pressure to atmospheres +# formula is P = P* / (sigma^3/epsilon), but need P in atmospheres +# use sigma (meter), epsilon (Joule) to get P in nt/meter^2, convert to atms + +variable KcaltoJoule index 4.1868e3 # convert Kcals to Joules +variable NtMtoAtm equal 1.0/1.0135e5 # convert Nt/meter^2 to Atmospheres + +variable tmpscale equal ${epskb} +variable tmpscale equal 117.7 +variable epsJmole equal ${epsilon}*${KcaltoJoule} +variable epsJmole equal 0.23389422859*${KcaltoJoule} +variable epsJmole equal 0.23389422859*4.1868e3 +variable massKgmole equal ${mass}/1000.0 +variable massKgmole equal 39.95/1000.0 +variable sigmaM equal ${sigma}/1.0e10 +variable sigmaM equal 3.504/1.0e10 +variable sigmaMsq equal ${sigmaM}*${sigmaM} +variable sigmaMsq equal 3.504e-10*${sigmaM} +variable sigmaMsq equal 3.504e-10*3.504e-10 +variable tscale equal 1.0e15/sqrt(${epsJmole}/${massKgmole}/${sigmaMsq}) +variable tscale equal 1.0e15/sqrt(979.268356260612/${massKgmole}/${sigmaMsq}) +variable tscale equal 1.0e15/sqrt(979.268356260612/0.03995/${sigmaMsq}) +variable tscale equal 1.0e15/sqrt(979.268356260612/0.03995/1.2278016e-19) +variable sigmaM3 equal ${sigmaM}*${sigmaM}*${sigmaM} +variable sigmaM3 equal 3.504e-10*${sigmaM}*${sigmaM} +variable sigmaM3 equal 3.504e-10*3.504e-10*${sigmaM} +variable sigmaM3 equal 3.504e-10*3.504e-10*3.504e-10 +variable pscale equal ${NtMtoAtm}/(${sigmaM3}/(${epsJmole}/${avogadro})) +variable pscale equal 9.86679822397632e-06/(${sigmaM3}/(${epsJmole}/${avogadro})) +variable pscale equal 9.86679822397632e-06/(4.3022168064e-29/(${epsJmole}/${avogadro})) +variable pscale equal 9.86679822397632e-06/(4.3022168064e-29/(979.268356260612/${avogadro})) +variable pscale equal 9.86679822397632e-06/(4.3022168064e-29/(979.268356260612/6.02214129e23)) + +# variables +# alat = lattice constant in Angs (at reduced density rhostar) +# temp = reduced temperature for output +# epair,emol,etotal = reduced epair,emol,etotal energies for output +# press = reduced pressure for output + +variable alat equal (4.0*${sigma}*${sigma}*${sigma}/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*${sigma}*${sigma}/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*3.504*${sigma}/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*3.504*3.504/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*3.504*3.504/0.8842)^(1.0/3.0) +variable temp equal temp/${tmpscale} +variable temp equal temp/117.7 +variable epair equal epair/${epsilon} +variable epair equal epair/0.23389422859 +variable emol equal emol/${epsilon} +variable emol equal emol/0.23389422859 +variable etotal equal etotal/${epsilon} +variable etotal equal etotal/0.23389422859 +variable press equal press/${pscale} +variable press equal press/372.936366301003 + +# same script as in.ar.lj + +units real +atom_style atomic + +lattice fcc ${alat} +lattice fcc 5.79518437579763 +Lattice spacing in x,y,z = 5.79518 5.79518 5.79518 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (28.9759 28.9759 28.9759) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.000550985 secs +mass 1 ${mass} +mass 1 39.95 + +velocity all create $(v_tinitial*v_epskb) 12345 +velocity all create 117.70000000000000284 12345 + +pair_style lj/cut $(v_cutoff*v_sigma) +pair_style lj/cut 8.7599999999999997868 +pair_coeff 1 1 ${epsilon} ${sigma} +pair_coeff 1 1 0.23389422859 ${sigma} +pair_coeff 1 1 0.23389422859 3.504 + +neighbor $(v_skin*v_sigma) bin +neighbor 1.0511999999999999122 bin +neigh_modify delay 0 every 20 check no + +fix 1 all nve + +timestep $(v_dt*v_tscale) +timestep 11.190297512378050371 + +# columns 2,3,4 = temp,pe,press in real units +# columns 5-9 = temp,energy.press in reduced units, compare to in.ar.lj +# need to include real unit output to enable use of reduced variables + +thermo_style custom step temp pe press v_temp v_epair v_emol v_etotal v_press +thermo_modify norm yes +thermo ${nthermo} +thermo 10 + +run ${nsteps} +run 100 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 9.8112 + ghost atom cutoff = 9.8112 + binsize = 4.9056, bins = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.644 | 2.644 | 2.644 Mbytes +Step Temp PotEng Press v_temp v_epair v_emol v_etotal v_press + 0 117.7 -1.6612661 -1909.5509 1 -7.1026383 0 -5.6056383 -5.1203128 + 10 87.369977 -1.5728967 -1169.6414 0.74231077 -6.7248204 0 -5.6135812 -3.1363029 + 20 42.567295 -1.4427006 -150.87379 0.36165926 -6.1681752 0 -5.6267713 -0.40455638 + 30 55.130978 -1.480902 -387.17817 0.46840253 -6.3315028 0 -5.6303042 -1.0381883 + 40 55.054202 -1.4807485 -401.72653 0.46775023 -6.3308469 0 -5.6306248 -1.0771986 + 50 56.873955 -1.4860029 -428.9126 0.48321117 -6.3533113 0 -5.6299442 -1.1500959 + 60 58.33701 -1.490161 -458.23636 0.49564154 -6.3710892 0 -5.6291138 -1.2287253 + 70 61.29671 -1.4991528 -539.72484 0.52078768 -6.4095331 0 -5.629914 -1.4472304 + 80 63.214984 -1.504992 -594.34987 0.53708567 -6.4344983 0 -5.630481 -1.5937032 + 90 61.936907 -1.5013008 -569.13985 0.5262269 -6.4187169 0 -5.6309552 -1.5261045 + 100 62.20662 -1.5023046 -585.49121 0.52851844 -6.4230083 0 -5.6318162 -1.5699494 +Loop time of 0.047307 on 1 procs for 100 steps with 500 atoms + +Performance: 2043.760 ns/day, 0.012 hours/ns, 2113.851 timesteps/s +98.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.038646 | 0.038646 | 0.038646 | 0.0 | 81.69 +Neigh | 0.0056832 | 0.0056832 | 0.0056832 | 0.0 | 12.01 +Comm | 0.0015347 | 0.0015347 | 0.0015347 | 0.0 | 3.24 +Output | 0.0003581 | 0.0003581 | 0.0003581 | 0.0 | 0.76 +Modify | 0.00075364 | 0.00075364 | 0.00075364 | 0.0 | 1.59 +Other | | 0.0003314 | | | 0.70 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1946 ave 1946 max 1946 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19572 ave 19572 max 19572 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19572 +Ave neighs/atom = 39.144 +Neighbor list builds = 5 +Dangerous builds not checked +Total wall time: 0:00:00 diff --git a/examples/UNITS/log.ar.real.8Oct19.g++.4 b/examples/UNITS/log.ar.real.8Oct19.g++.4 new file mode 100644 index 0000000000..d5c01eb22d --- /dev/null +++ b/examples/UNITS/log.ar.real.8Oct19.g++.4 @@ -0,0 +1,197 @@ +LAMMPS (19 Sep 2019) +# Ar in real units + +# simulation params in reduced units +# settable from command line +# epsilon, sigma, mass set below + +variable x index 5 +variable y index 5 +variable z index 5 +variable rhostar index 0.8842 +variable dt index 0.005 +variable cutoff index 2.5 +variable skin index 0.3 +variable tinitial index 1.0 +variable nthermo index 10 +variable nsteps index 100 + +# physical constants from update.cpp + +variable kb index 0.0019872067 # kB in Kcal/mole/K +variable avogadro index 6.02214129e23 # Avogadro's number + +# Ar properties in real units + +variable epskb index 117.7 # LJ epsilon/kB in degrees K +variable sigma index 3.504 # LJ sigma in Angstroms +variable epsilon equal ${epskb}*${kb} # LJ epsilon in Kcal/mole +variable epsilon equal 117.7*${kb} +variable epsilon equal 117.7*0.0019872067 +variable mass index 39.95 # mass in g/mole + +# scale factors + +# sigma = scale factor on distance, converts reduced distance to Angs +# epsilon = scale factor on energy, converts reduced energy to Kcal/mole +# tmpscale = scale factor on temperature, converts reduced temp to degrees K +# tscale = scale factor on time, converts reduced time to fs +# formula is t = t* / sqrt(epsilon/mass/sigma^2), but need t in fs +# use epsilon (Joule/mole), mass (kg/mole), sigma (meter) to get t in seconds +# pscale = scale factor on pressure, converts reduced pressure to atmospheres +# formula is P = P* / (sigma^3/epsilon), but need P in atmospheres +# use sigma (meter), epsilon (Joule) to get P in nt/meter^2, convert to atms + +variable KcaltoJoule index 4.1868e3 # convert Kcals to Joules +variable NtMtoAtm equal 1.0/1.0135e5 # convert Nt/meter^2 to Atmospheres + +variable tmpscale equal ${epskb} +variable tmpscale equal 117.7 +variable epsJmole equal ${epsilon}*${KcaltoJoule} +variable epsJmole equal 0.23389422859*${KcaltoJoule} +variable epsJmole equal 0.23389422859*4.1868e3 +variable massKgmole equal ${mass}/1000.0 +variable massKgmole equal 39.95/1000.0 +variable sigmaM equal ${sigma}/1.0e10 +variable sigmaM equal 3.504/1.0e10 +variable sigmaMsq equal ${sigmaM}*${sigmaM} +variable sigmaMsq equal 3.504e-10*${sigmaM} +variable sigmaMsq equal 3.504e-10*3.504e-10 +variable tscale equal 1.0e15/sqrt(${epsJmole}/${massKgmole}/${sigmaMsq}) +variable tscale equal 1.0e15/sqrt(979.268356260612/${massKgmole}/${sigmaMsq}) +variable tscale equal 1.0e15/sqrt(979.268356260612/0.03995/${sigmaMsq}) +variable tscale equal 1.0e15/sqrt(979.268356260612/0.03995/1.2278016e-19) +variable sigmaM3 equal ${sigmaM}*${sigmaM}*${sigmaM} +variable sigmaM3 equal 3.504e-10*${sigmaM}*${sigmaM} +variable sigmaM3 equal 3.504e-10*3.504e-10*${sigmaM} +variable sigmaM3 equal 3.504e-10*3.504e-10*3.504e-10 +variable pscale equal ${NtMtoAtm}/(${sigmaM3}/(${epsJmole}/${avogadro})) +variable pscale equal 9.86679822397632e-06/(${sigmaM3}/(${epsJmole}/${avogadro})) +variable pscale equal 9.86679822397632e-06/(4.3022168064e-29/(${epsJmole}/${avogadro})) +variable pscale equal 9.86679822397632e-06/(4.3022168064e-29/(979.268356260612/${avogadro})) +variable pscale equal 9.86679822397632e-06/(4.3022168064e-29/(979.268356260612/6.02214129e23)) + +# variables +# alat = lattice constant in Angs (at reduced density rhostar) +# temp = reduced temperature for output +# epair,emol,etotal = reduced epair,emol,etotal energies for output +# press = reduced pressure for output + +variable alat equal (4.0*${sigma}*${sigma}*${sigma}/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*${sigma}*${sigma}/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*3.504*${sigma}/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*3.504*3.504/${rhostar})^(1.0/3.0) +variable alat equal (4.0*3.504*3.504*3.504/0.8842)^(1.0/3.0) +variable temp equal temp/${tmpscale} +variable temp equal temp/117.7 +variable epair equal epair/${epsilon} +variable epair equal epair/0.23389422859 +variable emol equal emol/${epsilon} +variable emol equal emol/0.23389422859 +variable etotal equal etotal/${epsilon} +variable etotal equal etotal/0.23389422859 +variable press equal press/${pscale} +variable press equal press/372.936366301003 + +# same script as in.ar.lj + +units real +atom_style atomic + +lattice fcc ${alat} +lattice fcc 5.79518437579763 +Lattice spacing in x,y,z = 5.79518 5.79518 5.79518 +region box block 0 $x 0 $y 0 $z +region box block 0 5 0 $y 0 $z +region box block 0 5 0 5 0 $z +region box block 0 5 0 5 0 5 +create_box 1 box +Created orthogonal box = (0 0 0) to (28.9759 28.9759 28.9759) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.000664949 secs +mass 1 ${mass} +mass 1 39.95 + +velocity all create $(v_tinitial*v_epskb) 12345 +velocity all create 117.70000000000000284 12345 + +pair_style lj/cut $(v_cutoff*v_sigma) +pair_style lj/cut 8.7599999999999997868 +pair_coeff 1 1 ${epsilon} ${sigma} +pair_coeff 1 1 0.23389422859 ${sigma} +pair_coeff 1 1 0.23389422859 3.504 + +neighbor $(v_skin*v_sigma) bin +neighbor 1.0511999999999999122 bin +neigh_modify delay 0 every 20 check no + +fix 1 all nve + +timestep $(v_dt*v_tscale) +timestep 11.190297512378050371 + +# columns 2,3,4 = temp,pe,press in real units +# columns 5-9 = temp,energy.press in reduced units, compare to in.ar.lj +# need to include real unit output to enable use of reduced variables + +thermo_style custom step temp pe press v_temp v_epair v_emol v_etotal v_press +thermo_modify norm yes +thermo ${nthermo} +thermo 10 + +run ${nsteps} +run 100 +Neighbor list info ... + update every 20 steps, delay 0 steps, check no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 9.8112 + ghost atom cutoff = 9.8112 + binsize = 4.9056, bins = 6 6 6 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 2.609 | 2.609 | 2.609 Mbytes +Step Temp PotEng Press v_temp v_epair v_emol v_etotal v_press + 0 117.7 -1.6612661 -1909.5509 1 -7.1026383 0 -5.6056383 -5.1203128 + 10 86.674156 -1.5707707 -1152.1077 0.73639895 -6.715731 0 -5.6133417 -3.0892877 + 20 42.104452 -1.4412091 -141.16344 0.35772687 -6.1617986 0 -5.6262815 -0.37851883 + 30 55.478223 -1.4819221 -410.58592 0.47135278 -6.3358644 0 -5.6302493 -1.1009544 + 40 54.54231 -1.4793231 -409.58446 0.4634011 -6.3247524 0 -5.631041 -1.098269 + 50 57.354168 -1.4876242 -457.34719 0.48729115 -6.3602431 0 -5.6307682 -1.2263411 + 60 59.835295 -1.4949249 -512.38519 0.50837124 -6.391457 0 -5.6304252 -1.3739212 + 70 60.005554 -1.4954174 -525.858 0.50981779 -6.3935625 0 -5.6303653 -1.4100475 + 80 63.469566 -1.505493 -614.29111 0.53924865 -6.4366403 0 -5.6293851 -1.6471741 + 90 65.064012 -1.5100983 -656.32951 0.55279535 -6.4563301 0 -5.6287955 -1.7598968 + 100 64.63774 -1.5088033 -644.51211 0.54917366 -6.4507932 0 -5.6286803 -1.7282093 +Loop time of 0.0285767 on 4 procs for 100 steps with 500 atoms + +Performance: 3383.318 ns/day, 0.007 hours/ns, 3499.350 timesteps/s +99.7% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.012398 | 0.014826 | 0.016774 | 1.6 | 51.88 +Neigh | 0.001797 | 0.0021547 | 0.0025899 | 0.6 | 7.54 +Comm | 0.0079622 | 0.010444 | 0.013427 | 2.3 | 36.55 +Output | 0.00042987 | 0.00047708 | 0.00059676 | 0.0 | 1.67 +Modify | 0.00028896 | 0.00038844 | 0.00049448 | 0.0 | 1.36 +Other | | 0.0002864 | | | 1.00 + +Nlocal: 125 ave 133 max 117 min +Histogram: 1 0 0 1 0 0 1 0 0 1 +Nghost: 1099 ave 1107 max 1091 min +Histogram: 1 0 0 1 0 0 1 0 0 1 +Neighs: 4908.75 ave 5493 max 4644 min +Histogram: 1 2 0 0 0 0 0 0 0 1 + +Total # of neighbors = 19635 +Ave neighs/atom = 39.27 +Neighbor list builds = 5 +Dangerous builds not checked +Total wall time: 0:00:00 From f2840176b32147e5c9649457c461f99470cf5bd2 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Tue, 8 Oct 2019 18:14:32 -0600 Subject: [PATCH 208/237] clarified the README --- examples/UNITS/README | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/examples/UNITS/README b/examples/UNITS/README index 0bc2607cc6..3980b38688 100644 --- a/examples/UNITS/README +++ b/examples/UNITS/README @@ -33,15 +33,20 @@ unscaled back to LJ units. So that you can see the outputs are the same if you examine the log files. Comments about this comparison are at the bottom of the real and metal scripts. -If you understand LJ reduced units (see Allen & Tildesley's Computer -Simulation of Liquids, Appendix B for a nice discussion), and you -study these scripts, you should be able to convert an input script in -one set of units to an identical input script in an alternate set of -units. Where "identical" means it runs the same simulation in a -statistical sense. For example you could easily define conversion -factors from real to metal units or vice versa, and use them to scale -inputs and outputs in one script to produce a script in alternate -units. +These 3 scripts are provided, because converting from lj reduced units +to physical units (e.g. real or metal) or vice versa is the trickiest +case. Converting input scripts between 2 sets of physical units +(e.g. reak <--> metal) is much easier. But you can use the same ideas +as in these scripts; just define a set of scale/unscale factors. + +See Allen & Tildesley's Computer Simulation of Liquids, Appendix B for +a nice discussion of reduced units. It will explain the conversion +formulas used in the real and metal scripts. + +Hopefully, if you study these scripts, you should be able to convert +an input script of your own, written in one set of units, to an +identical input script in an alternate set of units. Where +"identical" means it runs the same simulation in a statistical sense. You can find the full set of scale factors LAMMPS uses internally for different unit systems it supports, at the top of the src/udpate.cpp From 4804acbb9b5a58a398f2d193052e6465c9a03b98 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Wed, 9 Oct 2019 21:17:39 -0600 Subject: [PATCH 209/237] angle constraint bugfix --- src/USER-MISC/fix_bond_react.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index 5bf6ed68b9..c34a7494d9 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -2814,14 +2814,12 @@ void FixBondReact::read(int myrxn) } else if (strstr(line,"customIDs")) sscanf(line,"%d",&ncustom); else if (strstr(line,"deleteIDs")) sscanf(line,"%d",&ndelete); - else if (strstr(line,"constraints")) sscanf(line,"%d",&nconstr); - else break; + else if (strstr(line,"constraints")) { + sscanf(line,"%d",&nconstr); + memory->grow(constraints,nconstraints+nconstr,MAXCONARGS,"bond/react:constraints"); + } else break; } - memory->grow(constraints,nconstraints+nconstr,MAXCONARGS,"bond/react:constraints"); - - //count = NULL; - // grab keyword and skip next line parse_keyword(0,line,keyword); From a1c49159a47613b198365b0771a6bb6c9a3c96f1 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Thu, 10 Oct 2019 18:32:16 -0600 Subject: [PATCH 210/237] Added invisible helper function to check values of Clebsch-Gordan coefficients --- src/SNAP/sna.cpp | 33 +++++++++++++++++++++++++++++++++ src/SNAP/sna.h | 1 + 2 files changed, 34 insertions(+) diff --git a/src/SNAP/sna.cpp b/src/SNAP/sna.cpp index 01d2d12b8f..27e0e96df2 100644 --- a/src/SNAP/sna.cpp +++ b/src/SNAP/sna.cpp @@ -283,6 +283,7 @@ void SNA::build_indexlist() void SNA::init() { init_clebsch_gordan(); + // print_clebsch_gordan(); init_rootpqarray(); } @@ -1515,6 +1516,38 @@ void SNA::init_clebsch_gordan() } } +/* ---------------------------------------------------------------------- + print out values of Clebsch-Gordan coefficients + format and notation follows VMK Table 8.11 +------------------------------------------------------------------------- */ + +void SNA::print_clebsch_gordan() +{ + int aa2, bb2, cc2; + for (int j = 0; j <= twojmax; j += 1) { + printf("c = %g\n",j/2.0); + printf("a alpha b beta C_{a alpha b beta}^{c alpha+beta}\n"); + for (int j1 = 0; j1 <= twojmax; j1++) + for (int j2 = 0; j2 <= j1; j2++) + if (j1-j2 <= j && j1+j2 >= j && (j1+j2+j)%2 == 0) { + int idxcg_count = idxcg_block[j1][j2][j]; + for (int m1 = 0; m1 <= j1; m1++) { + aa2 = 2*m1-j1; + for (int m2 = 0; m2 <= j2; m2++) { + bb2 = 2*m2-j2; + double cgtmp = cglist[idxcg_count]; + cc2 = aa2+bb2; + if (cc2 >= -j && cc2 <= j) + if (j1 != j2 || (aa2 > bb2 && aa2 >= -bb2) || (aa2 == bb2 && aa2 >= 0)) + printf("%4g %4g %4g %4g %10.6g\n", + j1/2.0,aa2/2.0,j2/2.0,bb2/2.0,cgtmp); + idxcg_count++; + } + } + } + } +} + /* ---------------------------------------------------------------------- pre-compute table of sqrt[p/m2], p, q = 1,twojmax the p = 0, q = 0 entries are allocated and skipped for convenience. diff --git a/src/SNAP/sna.h b/src/SNAP/sna.h index e6bf4e3f9e..5ea65fd84b 100644 --- a/src/SNAP/sna.h +++ b/src/SNAP/sna.h @@ -103,6 +103,7 @@ private: void create_twojmax_arrays(); void destroy_twojmax_arrays(); void init_clebsch_gordan(); + void print_clebsch_gordan(); void init_rootpqarray(); void zero_uarraytot(); void addself_uarraytot(double); From 7bf2b997851e39c9258b7444f3b879f21757c8f2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 11 Oct 2019 16:18:02 +0200 Subject: [PATCH 211/237] print warnings if force styles and topology data are inconsistent print a warning if there are bonds/angles/dihedrals/impropers in the bond topology, but no corresponding style defined. print an additional warning when special bonds scaling factors for this kind of interaction is not 1.0 and thus the neighbor list for pair styles may be affected, too. --- src/force.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/force.cpp b/src/force.cpp index 1a826b2843..dc55d04d23 100644 --- a/src/force.cpp +++ b/src/force.cpp @@ -196,6 +196,28 @@ void Force::init() if (angle) angle->init(); if (dihedral) dihedral->init(); if (improper) improper->init(); + + // print warnings if topology and force field are inconsistent + + if (comm->me == 0) { + if (!bond && (atom->nbonds > 0)) { + error->warning(FLERR,"Bonds are defined but no bond style is set"); + if ((special_lj[1] != 1.0) || (special_coul[1] != 1.0)) + error->warning(FLERR,"1-2 special neighbor interactions != 1.0"); + } + if (!angle && (atom->nangles > 0)) { + error->warning(FLERR,"Angles are defined but no angle style is set"); + if ((special_lj[2] != 1.0) || (special_coul[2] != 1.0)) + error->warning(FLERR,"1-3 special neighbor interactions != 1.0"); + } + if (!dihedral && (atom->ndihedrals > 0)) { + error->warning(FLERR,"Dihedrals are defined but no dihedral style is set"); + if ((special_lj[3] != 1.0) || (special_coul[3] != 1.0)) + error->warning(FLERR,"1-4 special neighbor interactions != 1.0"); + } + if (!improper && (atom->nimpropers > 0)) + error->warning(FLERR,"Impropers are defined but no improper style is set"); + } } /* ---------------------------------------------------------------------- */ From da56c7fc664859bfb46d2a6fc708f37e8b62cc48 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 11 Oct 2019 16:47:35 +0200 Subject: [PATCH 212/237] document freshly added warnings in header and manual --- doc/src/Errors_warnings.txt | 44 +++++++++++++++++++++++++++++++++++++ doc/src/min_spin.txt | 4 ++-- src/force.h | 44 +++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 2 deletions(-) diff --git a/doc/src/Errors_warnings.txt b/doc/src/Errors_warnings.txt index fbd857f162..8d77f84af3 100644 --- a/doc/src/Errors_warnings.txt +++ b/doc/src/Errors_warnings.txt @@ -31,6 +31,30 @@ Doc page with "ERROR messages"_Errors_messages.html :dlb +{1-2 special neighbor interactions != 1.0} :dt + +The topology contains bonds, but there is no bond style defined +and a 1-2 special neighbor scaling factor was not 1.0. This +means that pair style interactions may have scaled or missing +pairs in the neighbor list in expectation of interactions for +those pairs being computed from the bond style. :dd + +{1-3 special neighbor interactions != 1.0} :dt + +The topology contains angles, but there is no angle style defined +and a 1-3 special neighbor scaling factor was not 1.0. This +means that pair style interactions may have scaled or missing +pairs in the neighbor list in expectation of interactions for +those pairs being computed from the angle style. :dd + +{1-4 special neighbor interactions != 1.0} :dt + +The topology contains dihedrals, but there is no dihedral style defined +and a 1-4 special neighbor scaling factor was not 1.0. This +means that pair style interactions may have scaled or missing +pairs in the neighbor list in expectation of interactions for +those pairs being computed from the dihedral style. :dd + {Adjusting Coulombic cutoff for MSM, new cutoff = %g} :dt The adjust/cutoff command is turned on and the Coulombic cutoff has been @@ -47,6 +71,11 @@ too far away. :dd Self-explanatory. :dd +{Angles are defined but no angle style is set} :dt + +The topology contains angles, but there are no angle forces computed +since there was no angle_style command. :dd + {Atom style in data file differs from currently defined atom style} :dt Self-explanatory. :dd @@ -73,6 +102,11 @@ short or the bond has blown apart and an atom is too far away. :dd Self-explanatory. :dd +{Bonds are defined but no bond style is set} :dt + +The topology contains bonds, but there are no bond forces computed +since there was no bond_style command. :dd + {Bond/angle/dihedral extent > half of periodic box length} :dt This is a restriction because LAMMPS can be confused about which image @@ -186,6 +220,11 @@ to check your simulation geometry. :dd Self-explanatory. :dd +{Dihedrals are defined but no dihedral style is set} :dt + +The topology contains dihedrals, but there are no dihedral forces computed +since there was no dihedral_style command. :dd + {Dump dcd/xtc timestamp may be wrong with fix dt/reset} :dt If the fix changes the timestep, the dump dcd file will not @@ -352,6 +391,11 @@ to check your simulation geometry. :dd Self-explanatory. :dd +{Impropers are defined but no improper style is set} :dt + +The topology contains impropers, but there are no improper forces computed +since there was no improper_style command. :dd + {Inconsistent image flags} :dt The image flags for a pair on bonded atoms appear to be inconsistent. diff --git a/doc/src/min_spin.txt b/doc/src/min_spin.txt index f5bdf428bb..89766891c8 100644 --- a/doc/src/min_spin.txt +++ b/doc/src/min_spin.txt @@ -17,8 +17,8 @@ min_style spin/lbfgs :pre [Examples:] -min_style spin/lbfgs -min_modify line spin_cubic discrete_factor 10.0 :pre +min_style spin/lbfgs +min_modify line spin_cubic discrete_factor 10.0 :pre [Description:] diff --git a/src/force.h b/src/force.h index 26a3ecdfb8..2185a2e64d 100644 --- a/src/force.h +++ b/src/force.h @@ -226,4 +226,48 @@ A command with an argument that specifies an integer or range of integers is using a value that is less than 1 or greater than the maximum allowed limit. +W: Bonds are defined but no bond style is set + +The topology contains bonds, but there are no bond forces computed +since there was no bond_style command. + +W: Angles are defined but no angle style is set + +The topology contains angles, but there are no angle forces computed +since there was no angle_style command. + +W: Dihedrals are defined but no dihedral style is set + +The topology contains dihedrals, but there are no dihedral forces computed +since there was no dihedral_style command. + +W: Impropers are defined but no improper style is set + +The topology contains impropers, but there are no improper forces computed +since there was no improper_style command. + +W: 1-2 special neighbor interactions != 1.0 + +The topology contains bonds, but there is no bond style defined +and a 1-2 special neighbor scaling factor was not 1.0. This +means that pair style interactions may have scaled or missing +pairs in the neighbor list in expectation of interactions for +those pairs being computed from the bond style. + +W: 1-3 special neighbor interactions != 1.0 + +The topology contains angles, but there is no angle style defined +and a 1-3 special neighbor scaling factor was not 1.0. This +means that pair style interactions may have scaled or missing +pairs in the neighbor list in expectation of interactions for +those pairs being computed from the angle style. + +W: 1-4 special neighbor interactions != 1.0 + +The topology contains dihedrals, but there is no dihedral style defined +and a 1-4 special neighbor scaling factor was not 1.0. This +means that pair style interactions may have scaled or missing +pairs in the neighbor list in expectation of interactions for +those pairs being computed from the dihedral style. + */ From 29574eaa45619be3416f3b4c3bba8c39b1579b10 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 11 Oct 2019 17:19:47 +0200 Subject: [PATCH 213/237] added "likewise" as suggested by @sjplimp --- doc/src/Errors_warnings.txt | 48 ++++++++++++++++++------------------- src/force.cpp | 6 ++--- src/force.h | 6 ++--- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/doc/src/Errors_warnings.txt b/doc/src/Errors_warnings.txt index 8d77f84af3..749731fc4f 100644 --- a/doc/src/Errors_warnings.txt +++ b/doc/src/Errors_warnings.txt @@ -31,30 +31,6 @@ Doc page with "ERROR messages"_Errors_messages.html :dlb -{1-2 special neighbor interactions != 1.0} :dt - -The topology contains bonds, but there is no bond style defined -and a 1-2 special neighbor scaling factor was not 1.0. This -means that pair style interactions may have scaled or missing -pairs in the neighbor list in expectation of interactions for -those pairs being computed from the bond style. :dd - -{1-3 special neighbor interactions != 1.0} :dt - -The topology contains angles, but there is no angle style defined -and a 1-3 special neighbor scaling factor was not 1.0. This -means that pair style interactions may have scaled or missing -pairs in the neighbor list in expectation of interactions for -those pairs being computed from the angle style. :dd - -{1-4 special neighbor interactions != 1.0} :dt - -The topology contains dihedrals, but there is no dihedral style defined -and a 1-4 special neighbor scaling factor was not 1.0. This -means that pair style interactions may have scaled or missing -pairs in the neighbor list in expectation of interactions for -those pairs being computed from the dihedral style. :dd - {Adjusting Coulombic cutoff for MSM, new cutoff = %g} :dt The adjust/cutoff command is turned on and the Coulombic cutoff has been @@ -451,6 +427,30 @@ This library function cannot be used if atom IDs are not defined or are not consecutively numbered, or if no atom map is defined. See the atom_modify command for details about atom maps. :dd +{Likewise 1-2 special neighbor interactions != 1.0} :dt + +The topology contains bonds, but there is no bond style defined +and a 1-2 special neighbor scaling factor was not 1.0. This +means that pair style interactions may have scaled or missing +pairs in the neighbor list in expectation of interactions for +those pairs being computed from the bond style. :dd + +{Likewise 1-3 special neighbor interactions != 1.0} :dt + +The topology contains angles, but there is no angle style defined +and a 1-3 special neighbor scaling factor was not 1.0. This +means that pair style interactions may have scaled or missing +pairs in the neighbor list in expectation of interactions for +those pairs being computed from the angle style. :dd + +{Likewise 1-4 special neighbor interactions != 1.0} :dt + +The topology contains dihedrals, but there is no dihedral style defined +and a 1-4 special neighbor scaling factor was not 1.0. This +means that pair style interactions may have scaled or missing +pairs in the neighbor list in expectation of interactions for +those pairs being computed from the dihedral style. :dd + {Lost atoms via change_box: original %ld current %ld} :dt The command options you have used caused atoms to be lost. :dd diff --git a/src/force.cpp b/src/force.cpp index dc55d04d23..1cc6b3e01b 100644 --- a/src/force.cpp +++ b/src/force.cpp @@ -203,17 +203,17 @@ void Force::init() if (!bond && (atom->nbonds > 0)) { error->warning(FLERR,"Bonds are defined but no bond style is set"); if ((special_lj[1] != 1.0) || (special_coul[1] != 1.0)) - error->warning(FLERR,"1-2 special neighbor interactions != 1.0"); + error->warning(FLERR,"Likewise 1-2 special neighbor interactions != 1.0"); } if (!angle && (atom->nangles > 0)) { error->warning(FLERR,"Angles are defined but no angle style is set"); if ((special_lj[2] != 1.0) || (special_coul[2] != 1.0)) - error->warning(FLERR,"1-3 special neighbor interactions != 1.0"); + error->warning(FLERR,"Likewise 1-3 special neighbor interactions != 1.0"); } if (!dihedral && (atom->ndihedrals > 0)) { error->warning(FLERR,"Dihedrals are defined but no dihedral style is set"); if ((special_lj[3] != 1.0) || (special_coul[3] != 1.0)) - error->warning(FLERR,"1-4 special neighbor interactions != 1.0"); + error->warning(FLERR,"Likewise 1-4 special neighbor interactions != 1.0"); } if (!improper && (atom->nimpropers > 0)) error->warning(FLERR,"Impropers are defined but no improper style is set"); diff --git a/src/force.h b/src/force.h index 2185a2e64d..2dcbdbdd75 100644 --- a/src/force.h +++ b/src/force.h @@ -246,7 +246,7 @@ W: Impropers are defined but no improper style is set The topology contains impropers, but there are no improper forces computed since there was no improper_style command. -W: 1-2 special neighbor interactions != 1.0 +W: Likewise 1-2 special neighbor interactions != 1.0 The topology contains bonds, but there is no bond style defined and a 1-2 special neighbor scaling factor was not 1.0. This @@ -254,7 +254,7 @@ means that pair style interactions may have scaled or missing pairs in the neighbor list in expectation of interactions for those pairs being computed from the bond style. -W: 1-3 special neighbor interactions != 1.0 +W: Likewise 1-3 special neighbor interactions != 1.0 The topology contains angles, but there is no angle style defined and a 1-3 special neighbor scaling factor was not 1.0. This @@ -262,7 +262,7 @@ means that pair style interactions may have scaled or missing pairs in the neighbor list in expectation of interactions for those pairs being computed from the angle style. -W: 1-4 special neighbor interactions != 1.0 +W: Likewise 1-4 special neighbor interactions != 1.0 The topology contains dihedrals, but there is no dihedral style defined and a 1-4 special neighbor scaling factor was not 1.0. This From 346b3c53eec3ee01095ccb5e50ac4890060eeab9 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Fri, 11 Oct 2019 11:07:02 -0600 Subject: [PATCH 214/237] Added comm->me check --- src/SNAP/sna.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/SNAP/sna.cpp b/src/SNAP/sna.cpp index 27e0e96df2..1ba99c1caf 100644 --- a/src/SNAP/sna.cpp +++ b/src/SNAP/sna.cpp @@ -20,6 +20,7 @@ #include "math_const.h" #include "memory.h" #include "error.h" +#include "comm.h" using namespace std; using namespace LAMMPS_NS; @@ -283,7 +284,7 @@ void SNA::build_indexlist() void SNA::init() { init_clebsch_gordan(); - // print_clebsch_gordan(); + // print_clebsch_gordan(); init_rootpqarray(); } @@ -1523,6 +1524,8 @@ void SNA::init_clebsch_gordan() void SNA::print_clebsch_gordan() { + if (comm->me) return; + int aa2, bb2, cc2; for (int j = 0; j <= twojmax; j += 1) { printf("c = %g\n",j/2.0); From 94b80f9ac6ee02b9376fba17fa1e84578963d4e5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 13 Oct 2019 17:47:09 -0400 Subject: [PATCH 215/237] correct pppm/tip4p to give correct forces with tip4p with triclinic cells --- src/KSPACE/pppm_tip4p.cpp | 28 ++++++++++++++++++++-------- src/USER-OMP/pppm_omp.cpp | 2 +- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/KSPACE/pppm_tip4p.cpp b/src/KSPACE/pppm_tip4p.cpp index f664a0dca3..6e330112de 100644 --- a/src/KSPACE/pppm_tip4p.cpp +++ b/src/KSPACE/pppm_tip4p.cpp @@ -500,11 +500,21 @@ void PPPMTIP4P::find_M(int i, int &iH1, int &iH2, double *xM) // since local atoms are in lambda coordinates, but ghosts are not. int *sametag = atom->sametag; - double xo[3],xh1[3],xh2[3]; + double xo[3],xh1[3],xh2[3],xm[0]; + double *lo = domain->boxlo_lamda; + double *hi = domain->boxhi_lamda; + double *prd = domain->prd_lamda; + const int nlocal = atom->nlocal; - domain->lamda2x(x[i],xo); - domain->lamda2x(x[iH1],xh1); - domain->lamda2x(x[iH2],xh2); + for (int ii = 0; ii < 3; ++ii) { + xo[ii] = x[i][ii]; + xh1[ii] = x[iH1][ii]; + xh2[ii] = x[iH2][ii]; + } + + if (i < nlocal) domain->lamda2x(x[i],xo); + if (iH1 < nlocal) domain->lamda2x(x[iH1],xh1); + if (iH2 < nlocal) domain->lamda2x(x[iH2],xh2); double delx = xo[0] - xh1[0]; double dely = xo[1] - xh1[1]; @@ -513,6 +523,8 @@ void PPPMTIP4P::find_M(int i, int &iH1, int &iH2, double *xM) double rsq; int closest = iH1; + // no need to run lamda2x() here -> ghost atoms + while (sametag[iH1] >= 0) { iH1 = sametag[iH1]; delx = xo[0] - x[iH1][0]; @@ -561,13 +573,13 @@ void PPPMTIP4P::find_M(int i, int &iH1, int &iH2, double *xM) double dely2 = xh2[1] - xo[1]; double delz2 = xh2[2] - xo[2]; - xM[0] = xo[0] + alpha * 0.5 * (delx1 + delx2); - xM[1] = xo[1] + alpha * 0.5 * (dely1 + dely2); - xM[2] = xo[2] + alpha * 0.5 * (delz1 + delz2); + xm[0] = xo[0] + alpha * 0.5 * (delx1 + delx2); + xm[1] = xo[1] + alpha * 0.5 * (dely1 + dely2); + xm[2] = xo[2] + alpha * 0.5 * (delz1 + delz2); // ... and convert M to lamda space for PPPM - domain->x2lamda(xM,xM); + domain->x2lamda(xm,xM); } else { diff --git a/src/USER-OMP/pppm_omp.cpp b/src/USER-OMP/pppm_omp.cpp index 3ef3de1ab7..c6aaafaa31 100644 --- a/src/USER-OMP/pppm_omp.cpp +++ b/src/USER-OMP/pppm_omp.cpp @@ -48,7 +48,7 @@ using namespace MathSpecial; PPPMOMP::PPPMOMP(LAMMPS *lmp) : PPPM(lmp), ThrOMP(lmp, THR_KSPACE) { - triclinic_support = 0; + triclinic_support = 1; suffix_flag |= Suffix::OMP; } From be01cfffa33f3c91b882d31a9d649df48817e8ef Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 14 Oct 2019 07:53:24 -0400 Subject: [PATCH 216/237] fix typo and port find_M() code to USER-OMP version --- src/KSPACE/pppm_tip4p.cpp | 5 +---- src/USER-OMP/pppm_tip4p_omp.cpp | 24 ++++++++++++++++-------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/KSPACE/pppm_tip4p.cpp b/src/KSPACE/pppm_tip4p.cpp index 6e330112de..5a0ced3674 100644 --- a/src/KSPACE/pppm_tip4p.cpp +++ b/src/KSPACE/pppm_tip4p.cpp @@ -500,10 +500,7 @@ void PPPMTIP4P::find_M(int i, int &iH1, int &iH2, double *xM) // since local atoms are in lambda coordinates, but ghosts are not. int *sametag = atom->sametag; - double xo[3],xh1[3],xh2[3],xm[0]; - double *lo = domain->boxlo_lamda; - double *hi = domain->boxhi_lamda; - double *prd = domain->prd_lamda; + double xo[3],xh1[3],xh2[3],xm[3]; const int nlocal = atom->nlocal; for (int ii = 0; ii < 3; ++ii) { diff --git a/src/USER-OMP/pppm_tip4p_omp.cpp b/src/USER-OMP/pppm_tip4p_omp.cpp index d7c12613d9..1a2bcfc0a3 100644 --- a/src/USER-OMP/pppm_tip4p_omp.cpp +++ b/src/USER-OMP/pppm_tip4p_omp.cpp @@ -750,11 +750,18 @@ void PPPMTIP4POMP::find_M_thr(int i, int &iH1, int &iH2, dbl3_t &xM) // since local atoms are in lambda coordinates, but ghosts are not. int *sametag = atom->sametag; - double xo[3],xh1[3],xh2[3]; + double xo[3],xh1[3],xh2[3],xm[3]; + const int nlocal = atom->nlocal; - domain->lamda2x(x[i],xo); - domain->lamda2x(x[iH1],xh1); - domain->lamda2x(x[iH2],xh2); + for (int ii = 0; ii < 3; ++ii) { + xo[ii] = x[i][ii]; + xh1[ii] = x[iH1][ii]; + xh2[ii] = x[iH2][ii]; + } + + if (i < nlocal) domain->lamda2x(x[i],xo); + if (iH1 < nlocal) domain->lamda2x(x[iH1],xh1); + if (iH2 < nlocal) domain->lamda2x(x[iH2],xh2); double delx = xo[0] - xh1[0]; double dely = xo[1] - xh1[1]; @@ -763,6 +770,7 @@ void PPPMTIP4POMP::find_M_thr(int i, int &iH1, int &iH2, dbl3_t &xM) double rsq; int closest = iH1; + // no need to run lamda2x here -> ghost atoms while (sametag[iH1] >= 0) { iH1 = sametag[iH1]; delx = xo[0] - x[iH1][0]; @@ -811,13 +819,13 @@ void PPPMTIP4POMP::find_M_thr(int i, int &iH1, int &iH2, dbl3_t &xM) double dely2 = xh2[1] - xo[1]; double delz2 = xh2[2] - xo[2]; - xM.x = xo[0] + alpha * 0.5 * (delx1 + delx2); - xM.y = xo[1] + alpha * 0.5 * (dely1 + dely2); - xM.z = xo[2] + alpha * 0.5 * (delz1 + delz2); + xm[0] = xo[0] + alpha * 0.5 * (delx1 + delx2); + xm[1] = xo[1] + alpha * 0.5 * (dely1 + dely2); + xm[2] = xo[2] + alpha * 0.5 * (delz1 + delz2); // ... and convert M to lamda space for PPPM - domain->x2lamda((double *)&xM,(double *)&xM); + domain->x2lamda(xm,(double *)&xM); } else { From 25b114eeb479a136a7a50fa207e4b1f9887133a4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 13 Oct 2019 17:12:36 -0400 Subject: [PATCH 217/237] avoid compilation failure without installed packages --- src/force.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/force.cpp b/src/force.cpp index 1cc6b3e01b..cc121a5f80 100644 --- a/src/force.cpp +++ b/src/force.cpp @@ -21,6 +21,7 @@ #include "style_improper.h" #include "style_pair.h" #include "style_kspace.h" +#include "atom.h" #include "comm.h" #include "pair.h" #include "pair_hybrid.h" From 28c9255f99892f3e4032dad9c11d2dab314b5b7f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 14 Oct 2019 08:02:59 -0400 Subject: [PATCH 218/237] don't include USER-PLUMED in "most" preset --- cmake/presets/most.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/presets/most.cmake b/cmake/presets/most.cmake index 35ad7ba55c..2be17a1826 100644 --- a/cmake/presets/most.cmake +++ b/cmake/presets/most.cmake @@ -7,7 +7,7 @@ set(ALL_PACKAGES ASPHERE CLASS2 COLLOID CORESHELL DIPOLE PYTHON QEQ REPLICA RIGID SHOCK SRD VORONOI USER-CGDNA USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-FEP USER-MEAMC USER-MESO - USER-MISC USER-MOFFF USER-OMP USER-PLUMED USER-PHONON USER-REAXC + USER-MISC USER-MOFFF USER-OMP USER-PHONON USER-REAXC USER-SPH USER-SMD USER-UEF USER-YAFF) foreach(PKG ${ALL_PACKAGES}) From e04a18fc4f2d13f86407d3b50dcfe40cf9cfbda0 Mon Sep 17 00:00:00 2001 From: Giacomo Fiorin Date: Mon, 14 Oct 2019 14:59:34 -0400 Subject: [PATCH 219/237] Upgrade Lepton library to version 2019-06-02 --- lib/colvars/README | 3 + .../include/lepton/CompiledExpression.h | 11 +- .../lepton/include/lepton/CustomFunction.h | 32 ++++++ .../lepton/include/lepton/ExpressionProgram.h | 10 +- lib/colvars/lepton/include/lepton/Operation.h | 34 +++++- lib/colvars/lepton/src/CompiledExpression.cpp | 100 +++++++++++------- lib/colvars/lepton/src/ExpressionProgram.cpp | 7 +- lib/colvars/lepton/src/MSVC_erfc.h | 6 +- lib/colvars/lepton/src/Operation.cpp | 12 ++- lib/colvars/lepton/src/ParsedExpression.cpp | 10 ++ lib/colvars/lepton/src/Parser.cpp | 7 +- 11 files changed, 175 insertions(+), 57 deletions(-) diff --git a/lib/colvars/README b/lib/colvars/README index 087528748b..65821d68c7 100644 --- a/lib/colvars/README +++ b/lib/colvars/README @@ -50,6 +50,9 @@ settings in Makefile.common should work. Note: some Colvars functions use the Lepton mathematical expression parser, which is here included (no additional steps required). For more details, see: https://simtk.org/projects/lepton +Starting from 2019-06-02, Lepton requires C++11. Please see: + https://colvars.github.io/README-c++11.html + https://lammps.sandia.gov/doc/Build_settings.html#cxx11 ## Documentation diff --git a/lib/colvars/lepton/include/lepton/CompiledExpression.h b/lib/colvars/lepton/include/lepton/CompiledExpression.h index 67442e0cf5..c7e393e93b 100644 --- a/lib/colvars/lepton/include/lepton/CompiledExpression.h +++ b/lib/colvars/lepton/include/lepton/CompiledExpression.h @@ -9,7 +9,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2013-2016 Stanford University and the Authors. * + * Portions copyright (c) 2013-2019 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -52,9 +52,9 @@ class ParsedExpression; * A CompiledExpression is a highly optimized representation of an expression for cases when you want to evaluate * it many times as quickly as possible. You should treat it as an opaque object; none of the internal representation * is visible. - * + * * A CompiledExpression is created by calling createCompiledExpression() on a ParsedExpression. - * + * * WARNING: CompiledExpression is NOT thread safe. You should never access a CompiledExpression from two threads at * the same time. */ @@ -99,10 +99,11 @@ private: mutable std::vector workspace; mutable std::vector argValues; std::map dummyVariables; - void* jitCode; + double (*jitCode)(); #ifdef LEPTON_USE_JIT void generateJitCode(); - void generateSingleArgCall(asmjit::X86Compiler& c, asmjit::X86XmmVar& dest, asmjit::X86XmmVar& arg, double (*function)(double)); + void generateSingleArgCall(asmjit::X86Compiler& c, asmjit::X86Xmm& dest, asmjit::X86Xmm& arg, double (*function)(double)); + void generateTwoArgCall(asmjit::X86Compiler& c, asmjit::X86Xmm& dest, asmjit::X86Xmm& arg1, asmjit::X86Xmm& arg2, double (*function)(double, double)); std::vector constants; asmjit::JitRuntime runtime; #endif diff --git a/lib/colvars/lepton/include/lepton/CustomFunction.h b/lib/colvars/lepton/include/lepton/CustomFunction.h index 5c5586105f..fbb0ddd52a 100644 --- a/lib/colvars/lepton/include/lepton/CustomFunction.h +++ b/lib/colvars/lepton/include/lepton/CustomFunction.h @@ -72,6 +72,38 @@ public: virtual CustomFunction* clone() const = 0; }; +/** + * This class is an implementation of CustomFunction that does no computation. It just returns + * 0 for the value and derivatives. This is useful when using the parser to analyze expressions + * rather than to evaluate them. You can just create PlaceholderFunctions to represent any custom + * functions that may appear in expressions. + */ + +class LEPTON_EXPORT PlaceholderFunction : public CustomFunction { +public: + /** + * Create a Placeholder function. + * + * @param numArgs the number of arguments the function expects + */ + PlaceholderFunction(int numArgs) : numArgs(numArgs) { + } + int getNumArguments() const { + return numArgs; + } + double evaluate(const double* arguments) const { + return 0.0; + } + double evaluateDerivative(const double* arguments, const int* derivOrder) const { + return 0.0; + } + CustomFunction* clone() const { + return new PlaceholderFunction(numArgs); + }; +private: + int numArgs; +}; + } // namespace Lepton #endif /*LEPTON_CUSTOM_FUNCTION_H_*/ diff --git a/lib/colvars/lepton/include/lepton/ExpressionProgram.h b/lib/colvars/lepton/include/lepton/ExpressionProgram.h index 94d37f471d..a49a9094d0 100644 --- a/lib/colvars/lepton/include/lepton/ExpressionProgram.h +++ b/lib/colvars/lepton/include/lepton/ExpressionProgram.h @@ -9,7 +9,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2009 Stanford University and the Authors. * + * Portions copyright (c) 2009-2018 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -65,6 +65,14 @@ public: * Get an Operation in this program. */ const Operation& getOperation(int index) const; + /** + * Change an Operation in this program. + * + * The Operation must have been allocated on the heap with the "new" operator. + * The ExpressionProgram assumes ownership of it and will delete it when it + * is no longer needed. + */ + void setOperation(int index, Operation* operation); /** * Get the size of the stack needed to execute this program. This is the largest number of elements present * on the stack at any point during evaluation. diff --git a/lib/colvars/lepton/include/lepton/Operation.h b/lib/colvars/lepton/include/lepton/Operation.h index f7a8b78163..1ddde0b8c0 100644 --- a/lib/colvars/lepton/include/lepton/Operation.h +++ b/lib/colvars/lepton/include/lepton/Operation.h @@ -9,7 +9,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2009-2015 Stanford University and the Authors. * + * Portions copyright (c) 2009-2019 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -63,7 +63,7 @@ public: * can be used when processing or analyzing parsed expressions. */ enum Id {CONSTANT, VARIABLE, CUSTOM, ADD, SUBTRACT, MULTIPLY, DIVIDE, POWER, NEGATE, SQRT, EXP, LOG, - SIN, COS, SEC, CSC, TAN, COT, ASIN, ACOS, ATAN, SINH, COSH, TANH, ERF, ERFC, STEP, DELTA, SQUARE, CUBE, RECIPROCAL, + SIN, COS, SEC, CSC, TAN, COT, ASIN, ACOS, ATAN, ATAN2, SINH, COSH, TANH, ERF, ERFC, STEP, DELTA, SQUARE, CUBE, RECIPROCAL, ADD_CONSTANT, MULTIPLY_CONSTANT, POWER_CONSTANT, MIN, MAX, ABS, FLOOR, CEIL, SELECT}; /** * Get the name of this Operation. @@ -137,6 +137,7 @@ public: class Asin; class Acos; class Atan; + class Atan2; class Sinh; class Cosh; class Tanh; @@ -226,6 +227,11 @@ class LEPTON_EXPORT Operation::Custom : public Operation { public: Custom(const std::string& name, CustomFunction* function) : name(name), function(function), isDerivative(false), derivOrder(function->getNumArguments(), 0) { } + Custom(const std::string& name, CustomFunction* function, const std::vector& derivOrder) : name(name), function(function), isDerivative(false), derivOrder(derivOrder) { + for (int order : derivOrder) + if (order != 0) + isDerivative = true; + } Custom(const Custom& base, int derivIndex) : name(base.name), function(base.function->clone()), isDerivative(true), derivOrder(base.derivOrder) { derivOrder[derivIndex]++; } @@ -684,6 +690,28 @@ public: ExpressionTreeNode differentiate(const std::vector& children, const std::vector& childDerivs, const std::string& variable) const; }; +class LEPTON_EXPORT Operation::Atan2 : public Operation { +public: + Atan2() { + } + std::string getName() const { + return "atan2"; + } + Id getId() const { + return ATAN2; + } + int getNumArguments() const { + return 2; + } + Operation* clone() const { + return new Atan2(); + } + double evaluate(double* args, const std::map& variables) const { + return std::atan2(args[0], args[1]); + } + ExpressionTreeNode differentiate(const std::vector& children, const std::vector& childDerivs, const std::string& variable) const; +}; + class LEPTON_EXPORT Operation::Sinh : public Operation { public: Sinh() { @@ -989,7 +1017,7 @@ public: double evaluate(double* args, const std::map& variables) const { if (isIntPower) { // Integer powers can be computed much more quickly by repeated multiplication. - + int exponent = intValue; double base = args[0]; if (exponent < 0) { diff --git a/lib/colvars/lepton/src/CompiledExpression.cpp b/lib/colvars/lepton/src/CompiledExpression.cpp index 302f294ee2..1ad348b47d 100644 --- a/lib/colvars/lepton/src/CompiledExpression.cpp +++ b/lib/colvars/lepton/src/CompiledExpression.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2013-2016 Stanford University and the Authors. * + * Portions copyright (c) 2013-2019 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -84,17 +84,17 @@ CompiledExpression& CompiledExpression::operator=(const CompiledExpression& expr void CompiledExpression::compileExpression(const ExpressionTreeNode& node, vector >& temps) { if (findTempIndex(node, temps) != -1) return; // We have already processed a node identical to this one. - + // Process the child nodes. - + vector args; for (int i = 0; i < node.getChildren().size(); i++) { compileExpression(node.getChildren()[i], temps); args.push_back(findTempIndex(node.getChildren()[i], temps)); } - + // Process this node. - + if (node.getOperation().getId() == Operation::VARIABLE) { variableIndices[node.getOperation().getName()] = (int) workspace.size(); variableNames.insert(node.getOperation().getName()); @@ -108,7 +108,7 @@ void CompiledExpression::compileExpression(const ExpressionTreeNode& node, vecto arguments[stepIndex].push_back(0); // The value won't actually be used. We just need something there. else { // If the arguments are sequential, we can just pass a pointer to the first one. - + bool sequential = true; for (int i = 1; i < args.size(); i++) if (args[i] != args[i-1]+1) @@ -148,12 +148,12 @@ void CompiledExpression::setVariableLocations(map& variableLoca variablePointers = variableLocations; #ifdef LEPTON_USE_JIT // Rebuild the JIT code. - + if (workspace.size() > 0) generateJitCode(); #else // Make a list of all variables we will need to copy before evaluating the expression. - + variablesToCopy.clear(); for (map::const_iterator iter = variableIndices.begin(); iter != variableIndices.end(); ++iter) { map::iterator pointer = variablePointers.find(iter->first); @@ -165,13 +165,13 @@ void CompiledExpression::setVariableLocations(map& variableLoca double CompiledExpression::evaluate() const { #ifdef LEPTON_USE_JIT - return ((double (*)()) jitCode)(); + return jitCode(); #else for (int i = 0; i < variablesToCopy.size(); i++) *variablesToCopy[i].first = *variablesToCopy[i].second; // Loop over the operations and evaluate each one. - + for (int step = 0; step < operation.size(); step++) { const vector& args = arguments[step]; if (args.size() == 1) @@ -188,34 +188,36 @@ double CompiledExpression::evaluate() const { #ifdef LEPTON_USE_JIT static double evaluateOperation(Operation* op, double* args) { - map* dummyVariables = NULL; - return op->evaluate(args, *dummyVariables); + static map dummyVariables; + return op->evaluate(args, dummyVariables); } void CompiledExpression::generateJitCode() { - X86Compiler c(&runtime); - c.addFunc(kFuncConvHost, FuncBuilder0()); - vector workspaceVar(workspace.size()); + CodeHolder code; + code.init(runtime.getCodeInfo()); + X86Compiler c(&code); + c.addFunc(FuncSignature0()); + vector workspaceVar(workspace.size()); for (int i = 0; i < (int) workspaceVar.size(); i++) - workspaceVar[i] = c.newXmmVar(kX86VarTypeXmmSd); - X86GpVar argsPointer(c); + workspaceVar[i] = c.newXmmSd(); + X86Gp argsPointer = c.newIntPtr(); c.mov(argsPointer, imm_ptr(&argValues[0])); - + // Load the arguments into variables. - + for (set::const_iterator iter = variableNames.begin(); iter != variableNames.end(); ++iter) { map::iterator index = variableIndices.find(*iter); - X86GpVar variablePointer(c); + X86Gp variablePointer = c.newIntPtr(); c.mov(variablePointer, imm_ptr(&getVariableReference(index->first))); c.movsd(workspaceVar[index->second], x86::ptr(variablePointer, 0, 0)); } // Make a list of all constants that will be needed for evaluation. - + vector operationConstantIndex(operation.size(), -1); for (int step = 0; step < (int) operation.size(); step++) { // Find the constant value (if any) used by this operation. - + Operation& op = *operation[step]; double value; if (op.getId() == Operation::CONSTANT) @@ -232,9 +234,9 @@ void CompiledExpression::generateJitCode() { value = 1.0; else continue; - + // See if we already have a variable for this constant. - + for (int i = 0; i < (int) constants.size(); i++) if (value == constants[i]) { operationConstantIndex[step] = i; @@ -245,33 +247,33 @@ void CompiledExpression::generateJitCode() { constants.push_back(value); } } - + // Load constants into variables. - - vector constantVar(constants.size()); + + vector constantVar(constants.size()); if (constants.size() > 0) { - X86GpVar constantsPointer(c); + X86Gp constantsPointer = c.newIntPtr(); c.mov(constantsPointer, imm_ptr(&constants[0])); for (int i = 0; i < (int) constants.size(); i++) { - constantVar[i] = c.newXmmVar(kX86VarTypeXmmSd); + constantVar[i] = c.newXmmSd(); c.movsd(constantVar[i], x86::ptr(constantsPointer, 8*i, 0)); } } - + // Evaluate the operations. - + for (int step = 0; step < (int) operation.size(); step++) { Operation& op = *operation[step]; vector args = arguments[step]; if (args.size() == 1) { // One or more sequential arguments. Fill out the list. - + for (int i = 1; i < op.getNumArguments(); i++) args.push_back(args[0]+i); } - + // Generate instructions to execute this operation. - + switch (op.getId()) { case Operation::CONSTANT: c.movsd(workspaceVar[target[step]], constantVar[operationConstantIndex[step]]); @@ -292,6 +294,9 @@ void CompiledExpression::generateJitCode() { c.movsd(workspaceVar[target[step]], workspaceVar[args[0]]); c.divsd(workspaceVar[target[step]], workspaceVar[args[1]]); break; + case Operation::POWER: + generateTwoArgCall(c, workspaceVar[target[step]], workspaceVar[args[0]], workspaceVar[args[1]], pow); + break; case Operation::NEGATE: c.xorps(workspaceVar[target[step]], workspaceVar[target[step]]); c.subsd(workspaceVar[target[step]], workspaceVar[args[0]]); @@ -323,6 +328,9 @@ void CompiledExpression::generateJitCode() { case Operation::ATAN: generateSingleArgCall(c, workspaceVar[target[step]], workspaceVar[args[0]], atan); break; + case Operation::ATAN2: + generateTwoArgCall(c, workspaceVar[target[step]], workspaceVar[args[0]], workspaceVar[args[1]], atan2); + break; case Operation::SINH: generateSingleArgCall(c, workspaceVar[target[step]], workspaceVar[args[0]], sinh); break; @@ -374,12 +382,12 @@ void CompiledExpression::generateJitCode() { break; default: // Just invoke evaluateOperation(). - + for (int i = 0; i < (int) args.size(); i++) c.movsd(x86::ptr(argsPointer, 8*i, 0), workspaceVar[args[i]]); - X86GpVar fn(c, kVarTypeIntPtr); + X86Gp fn = c.newIntPtr(); c.mov(fn, imm_ptr((void*) evaluateOperation)); - X86CallNode* call = c.call(fn, kFuncConvHost, FuncBuilder2()); + CCFuncCall* call = c.call(fn, FuncSignature2()); call->setArg(0, imm_ptr(&op)); call->setArg(1, imm_ptr(&argValues[0])); call->setRet(0, workspaceVar[target[step]]); @@ -387,14 +395,24 @@ void CompiledExpression::generateJitCode() { } c.ret(workspaceVar[workspace.size()-1]); c.endFunc(); - jitCode = c.make(); + c.finalize(); + runtime.add(&jitCode, &code); } -void CompiledExpression::generateSingleArgCall(X86Compiler& c, X86XmmVar& dest, X86XmmVar& arg, double (*function)(double)) { - X86GpVar fn(c, kVarTypeIntPtr); +void CompiledExpression::generateSingleArgCall(X86Compiler& c, X86Xmm& dest, X86Xmm& arg, double (*function)(double)) { + X86Gp fn = c.newIntPtr(); c.mov(fn, imm_ptr((void*) function)); - X86CallNode* call = c.call(fn, kFuncConvHost, FuncBuilder1()); + CCFuncCall* call = c.call(fn, FuncSignature1()); call->setArg(0, arg); call->setRet(0, dest); } + +void CompiledExpression::generateTwoArgCall(X86Compiler& c, X86Xmm& dest, X86Xmm& arg1, X86Xmm& arg2, double (*function)(double, double)) { + X86Gp fn = c.newIntPtr(); + c.mov(fn, imm_ptr((void*) function)); + CCFuncCall* call = c.call(fn, FuncSignature2()); + call->setArg(0, arg1); + call->setArg(1, arg2); + call->setRet(0, dest); +} #endif diff --git a/lib/colvars/lepton/src/ExpressionProgram.cpp b/lib/colvars/lepton/src/ExpressionProgram.cpp index 65d3f0c79a..bbbae8533f 100644 --- a/lib/colvars/lepton/src/ExpressionProgram.cpp +++ b/lib/colvars/lepton/src/ExpressionProgram.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2009-2013 Stanford University and the Authors. * + * Portions copyright (c) 2009-2018 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -84,6 +84,11 @@ const Operation& ExpressionProgram::getOperation(int index) const { return *operations[index]; } +void ExpressionProgram::setOperation(int index, Operation* operation) { + delete operations[index]; + operations[index] = operation; +} + int ExpressionProgram::getStackSize() const { return stackSize; } diff --git a/lib/colvars/lepton/src/MSVC_erfc.h b/lib/colvars/lepton/src/MSVC_erfc.h index eadb20fdf8..c30a8ce542 100644 --- a/lib/colvars/lepton/src/MSVC_erfc.h +++ b/lib/colvars/lepton/src/MSVC_erfc.h @@ -3,15 +3,15 @@ /* * Up to version 11 (VC++ 2012), Microsoft does not support the - * standard C99 erf() and erfc() functions so we have to fake them here. + * standard C99 erf() and erfc() functions so we have to fake them here. * These were added in version 12 (VC++ 2013), which sets _MSC_VER=1800 * (VC11 has _MSC_VER=1700). */ -#if defined(_MSC_VER) +#if defined(_MSC_VER) #define M_PI 3.14159265358979323846264338327950288 -#if _MSC_VER <= 1700 // 1700 is VC11, 1800 is VC12 +#if _MSC_VER <= 1700 // 1700 is VC11, 1800 is VC12 /*************************** * erf.cpp * author: Steve Strand diff --git a/lib/colvars/lepton/src/Operation.cpp b/lib/colvars/lepton/src/Operation.cpp index 693dea2ede..78741c4814 100644 --- a/lib/colvars/lepton/src/Operation.cpp +++ b/lib/colvars/lepton/src/Operation.cpp @@ -7,7 +7,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2009-2015 Stanford University and the Authors. * + * Portions copyright (c) 2009-2019 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -202,6 +202,16 @@ ExpressionTreeNode Operation::Atan::differentiate(const std::vector& children, const std::vector& childDerivs, const std::string& variable) const { + return ExpressionTreeNode(new Operation::Divide(), + ExpressionTreeNode(new Operation::Subtract(), + ExpressionTreeNode(new Operation::Multiply(), children[1], childDerivs[0]), + ExpressionTreeNode(new Operation::Multiply(), children[0], childDerivs[1])), + ExpressionTreeNode(new Operation::Add(), + ExpressionTreeNode(new Operation::Square(), children[0]), + ExpressionTreeNode(new Operation::Square(), children[1]))); +} + ExpressionTreeNode Operation::Sinh::differentiate(const std::vector& children, const std::vector& childDerivs, const std::string& variable) const { return ExpressionTreeNode(new Operation::Multiply(), ExpressionTreeNode(new Operation::Cosh(), diff --git a/lib/colvars/lepton/src/ParsedExpression.cpp b/lib/colvars/lepton/src/ParsedExpression.cpp index 6effd06007..fd3b091d3c 100644 --- a/lib/colvars/lepton/src/ParsedExpression.cpp +++ b/lib/colvars/lepton/src/ParsedExpression.cpp @@ -271,6 +271,16 @@ ExpressionTreeNode ParsedExpression::substituteSimplerExpression(const Expressio return ExpressionTreeNode(new Operation::MultiplyConstant(-dynamic_cast(&node.getOperation())->getValue()), children[0].getChildren()[0]); break; } + case Operation::SQRT: + { + if (children[0].getOperation().getId() == Operation::SQUARE) // sqrt(square(x)) = abs(x) + return ExpressionTreeNode(new Operation::Abs(), children[0].getChildren()[0]); + } + case Operation::SQUARE: + { + if (children[0].getOperation().getId() == Operation::SQRT) // square(sqrt(x)) = x + return children[0].getChildren()[0]; + } default: { // If operation ID is not one of the above, diff --git a/lib/colvars/lepton/src/Parser.cpp b/lib/colvars/lepton/src/Parser.cpp index 6b19d7370d..e284add258 100644 --- a/lib/colvars/lepton/src/Parser.cpp +++ b/lib/colvars/lepton/src/Parser.cpp @@ -6,7 +6,7 @@ * Biological Structures at Stanford, funded under the NIH Roadmap for * * Medical Research, grant U54 GM072970. See https://simtk.org. * * * - * Portions copyright (c) 2009-2015 Stanford University and the Authors. * + * Portions copyright (c) 2009-2019 Stanford University and the Authors. * * Authors: Peter Eastman * * Contributors: * * * @@ -66,7 +66,7 @@ private: string Parser::trim(const string& expression) { // Remove leading and trailing spaces. - + int start, end; for (start = 0; start < (int) expression.size() && isspace(expression[start]); start++) ; @@ -313,6 +313,7 @@ Operation* Parser::getFunctionOperation(const std::string& name, const map Date: Mon, 14 Oct 2019 15:15:14 -0400 Subject: [PATCH 220/237] Add CMake recipe for USER-COLVARS, test C++11 before including Lepton --- cmake/CMakeLists.txt | 16 +++++-------- cmake/Modules/Packages/USER-COLVARS.cmake | 28 +++++++++++++++++++++++ 2 files changed, 34 insertions(+), 10 deletions(-) create mode 100644 cmake/Modules/Packages/USER-COLVARS.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index ed9825a830..af782d28ae 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -322,13 +322,14 @@ endif() include(Packages/KSPACE) include(Packages/PYTHON) include(Packages/VORONOI) -include(Packages/USER-SCAFACOS) -include(Packages/USER-PLUMED) +include(Packages/USER-COLVARS) include(Packages/USER-MOLFILE) include(Packages/USER-NETCDF) -include(Packages/USER-SMD) -include(Packages/USER-QUIP) +include(Packages/USER-PLUMED) include(Packages/USER-QMMM) +include(Packages/USER-QUIP) +include(Packages/USER-SCAFACOS) +include(Packages/USER-SMD) include(Packages/USER-VTK) include(Packages/KIM) include(Packages/LATTE) @@ -418,8 +419,7 @@ endforeach() ############################################## # add lib sources of (simple) enabled packages ############################################ -foreach(SIMPLE_LIB POEMS USER-ATC USER-AWPMD USER-COLVARS USER-H5MD - USER-QMMM) +foreach(SIMPLE_LIB POEMS USER-ATC USER-AWPMD USER-H5MD USER-QMMM) if(PKG_${SIMPLE_LIB}) string(REGEX REPLACE "^USER-" "" PKG_LIB "${SIMPLE_LIB}") string(TOLOWER "${PKG_LIB}" PKG_LIB) @@ -433,10 +433,6 @@ foreach(SIMPLE_LIB POEMS USER-ATC USER-AWPMD USER-COLVARS USER-H5MD target_include_directories(awpmd PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/awpmd/systems/interact ${LAMMPS_LIB_SOURCE_DIR}/awpmd/ivutils/include) elseif(PKG_LIB STREQUAL h5md) target_include_directories(h5md PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/h5md/include ${HDF5_INCLUDE_DIRS}) - elseif(PKG_LIB STREQUAL colvars) - target_compile_options(colvars PRIVATE -DLEPTON) - target_include_directories(colvars PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/colvars/lepton/include) - target_include_directories(colvars PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/colvars) else() target_include_directories(${PKG_LIB} PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/${PKG_LIB}) endif() diff --git a/cmake/Modules/Packages/USER-COLVARS.cmake b/cmake/Modules/Packages/USER-COLVARS.cmake new file mode 100644 index 0000000000..da806c3a4b --- /dev/null +++ b/cmake/Modules/Packages/USER-COLVARS.cmake @@ -0,0 +1,28 @@ +if(PKG_USER-COLVARS) + + set(COLVARS_SOURCE_DIR ${LAMMPS_LIB_SOURCE_DIR}/colvars) + + file(GLOB COLVARS_SOURCES ${COLVARS_SOURCE_DIR}/[^.]*.cpp) + + if(DEFINED CMAKE_CXX_STANDARD) + # The condition below should match most modern C++ standards + if((${CMAKE_CXX_STANDARD} GREATER 0) AND (${CMAKE_CXX_STANDARD} LESS 70)) + set(ENABLE_LEPTON ON) + set(LEPTON_DIR ${LAMMPS_LIB_SOURCE_DIR}/colvars/lepton) + file(GLOB LEPTON_SOURCES ${LEPTON_DIR}/src/[^.]*.cpp) + add_library(lepton STATIC ${LEPTON_SOURCES}) + target_include_directories(lepton PRIVATE ${LEPTON_DIR}/include) + endif() + endif() + + add_library(colvars STATIC ${COLVARS_SOURCES}) + target_include_directories(colvars PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/colvars) + list(APPEND LAMMPS_LINK_LIBS colvars) + + if(ENABLE_LEPTON) + list(APPEND LAMMPS_LINK_LIBS lepton) + target_compile_options(colvars PRIVATE -DLEPTON) + target_include_directories(colvars PUBLIC ${LEPTON_DIR}/include) + endif() + +endif() From b6af3c7ad0fb79ca37dc73ec5bb4c731e21c40b5 Mon Sep 17 00:00:00 2001 From: Giacomo Fiorin Date: Mon, 14 Oct 2019 15:50:19 -0400 Subject: [PATCH 221/237] Conventional make tweaks to handle Lepton C++11 requirement --- lib/colvars/Makefile.common | 20 ++++++++++++-------- lib/colvars/Makefile.g++ | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/colvars/Makefile.common b/lib/colvars/Makefile.common index 5958765077..db04a0cb08 100644 --- a/lib/colvars/Makefile.common +++ b/lib/colvars/Makefile.common @@ -52,25 +52,29 @@ LEPTON_SRCS = \ lepton/src/ParsedExpression.cpp lepton/src/ExpressionProgram.cpp \ lepton/src/Operation.cpp lepton/src/Parser.cpp -LEPTON_OBJS = \ - lepton/src/CompiledExpression.o lepton/src/ExpressionTreeNode.o \ - lepton/src/ParsedExpression.o lepton/src/ExpressionProgram.o \ - lepton/src/Operation.o lepton/src/Parser.o -COLVARS_OBJS = $(COLVARS_SRCS:.cpp=.o) $(LEPTON_OBJS) +# Allow to selectively turn off Lepton +ifeq ($(ENABLE_LEPTON),no) +LEPTON_INCFLAGS = +COLVARS_OBJS = $(COLVARS_SRCS:.cpp=.o) +else +LEPTON_INCFLAGS = -Ilepton/include -DLEPTON +COLVARS_OBJS = $(COLVARS_SRCS:.cpp=.o) $(LEPTON_SRCS:.cpp=.o) +endif + %.o: %.cpp - $(CXX) $(CXXFLAGS) $(COLVARS_INCFLAGS) -Ilepton/include -DLEPTON -c -o $@ $< + $(CXX) $(CXXFLAGS) $(COLVARS_INCFLAGS) $(LEPTON_INCFLAGS) -c -o $@ $< $(COLVARS_LIB): Makefile.deps $(COLVARS_OBJS) - $(AR) $(ARFLAGS) $(COLVARS_LIB) $(COLVARS_OBJS) $(LEPTON_OBJS) + $(AR) $(ARFLAGS) $(COLVARS_LIB) $(COLVARS_OBJS) Makefile.deps: $(COLVARS_SRCS) @echo > $@ @for src in $^ ; do \ obj=`basename $$src .cpp`.o ; \ - $(CXX) -MM $(COLVARS_INCFLAGS) -Ilepton/include -DLEPTON \ + $(CXX) -MM $(COLVARS_INCFLAGS) $(LEPTON_INCFLAGS) \ -MT '$$(COLVARS_OBJ_DIR)'$$obj $$src >> $@ ; \ done diff --git a/lib/colvars/Makefile.g++ b/lib/colvars/Makefile.g++ index 556e39d070..6fa5131d6f 100644 --- a/lib/colvars/Makefile.g++ +++ b/lib/colvars/Makefile.g++ @@ -6,7 +6,7 @@ COLVARS_LIB = libcolvars.a COLVARS_OBJ_DIR = CXX = g++ -CXXFLAGS = -O2 -g -Wall -fPIC -funroll-loops +CXXFLAGS = -std=c++0x -O2 -g -Wall -fPIC -funroll-loops AR = ar ARFLAGS = -rscv SHELL = /bin/sh From 9c5c33e869e4733bffb05a25a40f74f820a301a4 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Mon, 14 Oct 2019 14:39:45 -0700 Subject: [PATCH 222/237] Updated gjf examples --- examples/gjf/in.gjf.vfull | 4 ++-- examples/gjf/in.gjf.vhalf | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/gjf/in.gjf.vfull b/examples/gjf/in.gjf.vfull index 19420e22ca..40512ac37a 100644 --- a/examples/gjf/in.gjf.vfull +++ b/examples/gjf/in.gjf.vfull @@ -14,10 +14,10 @@ neighbor 1 bin timestep 0.1 -fix nve all nve fix lang all langevin 10 10 1 26488 gjf vfull +fix nve all nve thermo 200 -run 50000 +run 5000 diff --git a/examples/gjf/in.gjf.vhalf b/examples/gjf/in.gjf.vhalf index 74e2089595..63fb8bd467 100644 --- a/examples/gjf/in.gjf.vhalf +++ b/examples/gjf/in.gjf.vhalf @@ -14,10 +14,10 @@ neighbor 1 bin timestep 0.1 -fix nve all nve fix lang all langevin 10 10 1 26488 gjf vhalf +fix nve all nve thermo 200 -run 50000 +run 5000 From a517cffd8fe2b18968dffbf766cf7fc84ed2cec5 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Mon, 14 Oct 2019 14:41:03 -0700 Subject: [PATCH 223/237] Corrected differing syntax in fix_langevin.cpp --- src/fix_langevin.cpp | 48 ++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index c12cdbaa26..01952f786c 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -111,14 +111,17 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg],"gjf") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix langevin command"); - if (strcmp(arg[iarg+1],"no") == 0) {gjfflag = 0; osflag = 0;} + if (strcmp(arg[iarg+1],"no") == 0) { + gjfflag = 0; + osflag = 0; + } else if (strcmp(arg[iarg+1],"vfull") == 0) { - gjfflag = 1; - osflag = 1; + gjfflag = 1; + osflag = 1; } else if (strcmp(arg[iarg+1],"vhalf") == 0) { - gjfflag = 1; - osflag = 0; + gjfflag = 1; + osflag = 0; } else error->all(FLERR,"Illegal fix langevin command"); iarg += 2; @@ -229,7 +232,7 @@ int FixLangevin::setmask() void FixLangevin::init() { - if (gjfflag){ + if (gjfflag) { if (t_period*2 == update->dt) error->all(FLERR,"Fix langevin gjf cannot have t_period equal to dt/2"); @@ -323,7 +326,7 @@ void FixLangevin::init() void FixLangevin::setup(int vflag) { - if (gjfflag){ + if (gjfflag) { double dtfm; double dt = update->dt; double **v = atom->v; @@ -373,7 +376,7 @@ void FixLangevin::setup(int vflag) post_force_respa(vflag,nlevels_respa-1,0); ((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1); } - if (gjfflag){ + if (gjfflag) { double dtfm; double dt = update->dt; double **f = atom->f; @@ -420,7 +423,7 @@ void FixLangevin::initial_integrate(int /* vflag */) int nlocal = atom->nlocal; for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit){ + if (mask[i] & groupbit) { f[i][0] /= gjfa; f[i][1] /= gjfa; f[i][2] /= gjfa; @@ -660,12 +663,11 @@ void FixLangevin::post_force_templated() gamma2 = gfactor2[type[i]] * tsqrt; } - if (Tp_GJF){ + if (Tp_GJF) { fran[0] = gamma2*random->gaussian(); fran[1] = gamma2*random->gaussian(); fran[2] = gamma2*random->gaussian(); - } - else{ + } else { fran[0] = gamma2*(random->uniform()-0.5); fran[1] = gamma2*(random->uniform()-0.5); fran[2] = gamma2*(random->uniform()-0.5); @@ -729,7 +731,7 @@ void FixLangevin::post_force_templated() } if (Tp_TALLY) { - if (Tp_GJF){ + if (Tp_GJF) { fdrag[0] = gamma1*lv[i][0]/gjfsib/gjfsib; fdrag[1] = gamma1*lv[i][1]/gjfsib/gjfsib; fdrag[2] = gamma1*lv[i][2]/gjfsib/gjfsib; @@ -938,8 +940,8 @@ void FixLangevin::end_of_step() energy_onestep = 0.0; - if (tallyflag){ - if (gjfflag){ + if (tallyflag) { + if (gjfflag) { for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { if (tbiasflag) @@ -957,19 +959,18 @@ void FixLangevin::end_of_step() flangevin[i][2]*v[i][2]; } - if (gjfflag){ + if (gjfflag) { double tmp[3]; for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit){ + if (mask[i] & groupbit) { tmp[0] = v[i][0]; tmp[1] = v[i][1]; tmp[2] = v[i][2]; - if (!osflag){ + if (!osflag) { v[i][0] = lv[i][0]; v[i][1] = lv[i][1]; v[i][2] = lv[i][2]; - } - else{ + } else { if (atom->rmass) { dtfm = force->ftm2v * 0.5 * dt / rmass[i]; } else { @@ -1064,16 +1065,15 @@ double FixLangevin::compute_scalar() if (update->ntimestep == update->beginstep) { energy_onestep = 0.0; - if (!gjfflag){ + if (!gjfflag) { for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) energy_onestep += flangevin[i][0]*v[i][0] + flangevin[i][1]*v[i][1] + flangevin[i][2]*v[i][2]; energy = 0.5*energy_onestep*update->dt; - } - else{ + } else { for (int i = 0; i < nlocal; i++) - if (mask[i] & groupbit){ + if (mask[i] & groupbit) { if (tbiasflag) temperature->remove_bias(i, lv[i]); energy_onestep += flangevin[i][0]*lv[i][0] + flangevin[i][1]*lv[i][1] + From 623e8078e3b1a2b53d6e41efe318491c30adbf1c Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Mon, 14 Oct 2019 19:11:50 -0700 Subject: [PATCH 224/237] Fixed vfull tally bug --- src/fix_langevin.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index 01952f786c..f8f85fcf30 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -476,7 +476,7 @@ void FixLangevin::post_force(int /*vflag*/) if (zeroflag) post_force_templated<1,1,0,0,0,1>(); else post_force_templated<1,1,0,0,0,0>(); else - if (tallyflag) + if (tallyflag || osflag) if (tbiasflag == BIAS) if (rmass) if (zeroflag) post_force_templated<1,0,1,1,1,1>(); @@ -508,7 +508,7 @@ void FixLangevin::post_force(int /*vflag*/) else post_force_templated<1,0,0,0,0,0>(); else if (gjfflag) - if (tallyflag) + if (tallyflag || osflag) if (tbiasflag == BIAS) if (rmass) if (zeroflag) post_force_templated<0,1,1,1,1,1>(); @@ -539,7 +539,7 @@ void FixLangevin::post_force(int /*vflag*/) if (zeroflag) post_force_templated<0,1,0,0,0,1>(); else post_force_templated<0,1,0,0,0,0>(); else - if (tallyflag) + if (tallyflag || osflag) if (tbiasflag == BIAS) if (rmass) if (zeroflag) post_force_templated<0,0,1,1,1,1>(); From d53b882a5af41036f828ff816a29dda581609577 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Mon, 14 Oct 2019 19:28:20 -0700 Subject: [PATCH 225/237] Fixed vfull tally bug in KOKKOS --- src/KOKKOS/fix_langevin_kokkos.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/KOKKOS/fix_langevin_kokkos.cpp b/src/KOKKOS/fix_langevin_kokkos.cpp index 426bcb49e3..8818d60a11 100644 --- a/src/KOKKOS/fix_langevin_kokkos.cpp +++ b/src/KOKKOS/fix_langevin_kokkos.cpp @@ -205,7 +205,7 @@ void FixLangevinKokkos::post_force(int vflag) } // reallocate flangevin if necessary - if (tallyflag) { + if (tallyflag || osflag) { if (nlocal > maxatom1) { memoryKK->destroy_kokkos(k_flangevin,flangevin); maxatom1 = atomKK->nmax; @@ -229,7 +229,7 @@ void FixLangevinKokkos::post_force(int vflag) FSUM s_fsum; if (tstyle == ATOM) if (gjfflag) - if (tallyflag) + if (tallyflag || osflag) if (tbiasflag == BIAS) if (rmass.data()) if (zeroflag) { @@ -300,7 +300,7 @@ void FixLangevinKokkos::post_force(int vflag) Kokkos::parallel_for(nlocal,post_functor); } else - if (tallyflag) + if (tallyflag || osflag) if (tbiasflag == BIAS) if (rmass.data()) if (zeroflag) { @@ -372,7 +372,7 @@ void FixLangevinKokkos::post_force(int vflag) } else if (gjfflag) - if (tallyflag) + if (tallyflag || osflag) if (tbiasflag == BIAS) if (rmass.data()) if (zeroflag) { @@ -443,7 +443,7 @@ void FixLangevinKokkos::post_force(int vflag) Kokkos::parallel_for(nlocal,post_functor); } else - if (tallyflag) + if (tallyflag || osflag) if (tbiasflag == BIAS) if (rmass.data()) if (zeroflag) { @@ -525,7 +525,7 @@ void FixLangevinKokkos::post_force(int vflag) // set modify flags for the views modified in post_force functor if (gjfflag) k_franprev.template modify(); if (gjfflag) k_lv.template modify(); - if (tallyflag) k_flangevin.template modify(); + if (tallyflag || osflag) k_flangevin.template modify(); // set total force to zero if (zeroflag) { From 37456733bfd680374f43f6711494e3be3ab9488c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 15 Oct 2019 09:28:34 +0200 Subject: [PATCH 226/237] prefer local mpi.h file by using '#include "mpi.h"' instead of '#include ' --- src/STUBS/mpi.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/STUBS/mpi.c b/src/STUBS/mpi.c index f56d3616c8..a5a00f86a5 100644 --- a/src/STUBS/mpi.c +++ b/src/STUBS/mpi.c @@ -12,14 +12,13 @@ ------------------------------------------------------------------------ */ /* Single-processor "stub" versions of MPI routines */ -/* -I. in Makefile insures dummy mpi.h in this dir is included */ #include #include #include #include #include -#include +#include "mpi.h" #include "../version.h" /* data structure for double/int */ From e4bbfc992b000a916b21b7ac60fd5acd8e3b8b6b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 15 Oct 2019 16:22:08 +0200 Subject: [PATCH 227/237] Singularity definition files for compiling LAMMPS --- doc/src/Tools.txt | 10 ++++++++++ tools/singularity/README.md | 28 ++++++++++++++++++++++++++++ tools/singularity/centos7.def | 10 ++++++++++ tools/singularity/ubuntu18.04.def | 9 +++++++++ 4 files changed, 57 insertions(+) create mode 100644 tools/singularity/README.md create mode 100644 tools/singularity/centos7.def create mode 100644 tools/singularity/ubuntu18.04.def diff --git a/doc/src/Tools.txt b/doc/src/Tools.txt index 88d91751c8..dccdf77dee 100644 --- a/doc/src/Tools.txt +++ b/doc/src/Tools.txt @@ -87,6 +87,7 @@ Miscellaneous tools :h3 "emacs"_#emacs, "i-pi"_#ipi, "kate"_#kate, +"singularity"_#singularity_tool, "vim"_#vim :tb(c=5,ea=c,a=l) :line @@ -542,6 +543,15 @@ Ivanov, at University of Iceland (ali5 at hi.is). :line +singularity tool :h4,link(singularity_tool) + +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"_https://sylabs.io +container software. Contributions for additional variants are welcome. + +:line + vim tool :h4,link(vim) The files in the tools/vim directory are add-ons to the VIM editor diff --git a/tools/singularity/README.md b/tools/singularity/README.md new file mode 100644 index 0000000000..bc44590c56 --- /dev/null +++ b/tools/singularity/README.md @@ -0,0 +1,28 @@ +# Singularity container definitions for compiling/testing LAMMPS + +The *.def files in this folder can be used to build container images +for [Singularity](https://sylabs.io) suitable for compiling and testing +LAMMPS on a variety of OS variants with support for most standard packages +and building/spellchecking the manual. This allows to test and debug +LAMMPS code on different OS variants than what is locally installed 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. + +Here is a workflow for testing a compilation of LAMMPS with a CentOS 7.x container. + +``` +cd some/work/directory +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 +cmake ../cmake -C ../cmake/presets/most.cmake -DCMAKE_CXX_FLAGS="-O3 -g -fopenmp -std=c++11" +make +``` + +| Currently available: | | +| --- | --- | +| centos7.def | CentOS 7.x with EPEL enabled | +| ubuntu18.04.def | Ubuntu 18.04LTS with default MPI == OpenMPI | diff --git a/tools/singularity/centos7.def b/tools/singularity/centos7.def new file mode 100644 index 0000000000..c11357483b --- /dev/null +++ b/tools/singularity/centos7.def @@ -0,0 +1,10 @@ +BootStrap: library +From: centos:7 + +%post + yum -y install epel-release + yum -y update + yum -y install vim-enhanced ccache gcc-c++ gcc-gfortran clang gdb valgrind-openmpi make cmake cmake3 patch which file git libpng-devel libjpeg-devel openmpi-devel mpich-devel python-devel python-virtualenv fftw-devel voro++-devel eigen3-devel gsl-devel openblas-devel enchant + +%labels + Author akohlmey diff --git a/tools/singularity/ubuntu18.04.def b/tools/singularity/ubuntu18.04.def new file mode 100644 index 0000000000..46e3851d4f --- /dev/null +++ b/tools/singularity/ubuntu18.04.def @@ -0,0 +1,9 @@ +BootStrap: docker +From: ubuntu:18.04 + +%post + apt-get update -y + env DEBIAN_FRONTEND=noninteractive apt-get install -y make cmake git gcc g++ gfortran libfftw3-dev libjpeg-dev libpng-dev libblas-dev liblapack-dev mpi-default-bin mpi-default-dev libeigen3-dev libgsl-dev libopenblas-dev virtualenv python-dev enchant vim-nox ccache voro++-dev + +%labels + Author akohlmey From 645df22eb944d4b63548a047dbfd7e816b0cdcb6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 15 Oct 2019 16:36:50 +0200 Subject: [PATCH 228/237] fix incorrect order of commandline flags in example --- tools/singularity/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/singularity/README.md b/tools/singularity/README.md index bc44590c56..4541ce285b 100644 --- a/tools/singularity/README.md +++ b/tools/singularity/README.md @@ -18,7 +18,7 @@ mkdir build-centos7 cd build-centos7 sudo singularity build centos7.sif ../tools/singularity/centos7.def singularity shell centos7.sif -cmake ../cmake -C ../cmake/presets/most.cmake -DCMAKE_CXX_FLAGS="-O3 -g -fopenmp -std=c++11" +cmake -C ../cmake/presets/most.cmake -D CMAKE_CXX_FLAGS="-O3 -g -fopenmp -std=c++11" ../cmake make ``` From bfcab685ce19e99ab5b9d6772b033cf678cf2670 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 15 Oct 2019 17:28:35 +0200 Subject: [PATCH 229/237] add reference outputs to example input --- examples/gjf/log.15Oct19.gjf.vfull.g++.1 | 125 +++++++++++++++++++++++ examples/gjf/log.15Oct19.gjf.vfull.g++.4 | 125 +++++++++++++++++++++++ examples/gjf/log.15Oct19.gjf.vhalf.g++.1 | 125 +++++++++++++++++++++++ examples/gjf/log.15Oct19.gjf.vhalf.g++.4 | 125 +++++++++++++++++++++++ 4 files changed, 500 insertions(+) create mode 100644 examples/gjf/log.15Oct19.gjf.vfull.g++.1 create mode 100644 examples/gjf/log.15Oct19.gjf.vfull.g++.4 create mode 100644 examples/gjf/log.15Oct19.gjf.vhalf.g++.1 create mode 100644 examples/gjf/log.15Oct19.gjf.vhalf.g++.4 diff --git a/examples/gjf/log.15Oct19.gjf.vfull.g++.1 b/examples/gjf/log.15Oct19.gjf.vfull.g++.1 new file mode 100644 index 0000000000..e3e9cce124 --- /dev/null +++ b/examples/gjf/log.15Oct19.gjf.vfull.g++.1 @@ -0,0 +1,125 @@ +LAMMPS (19 Sep 2019) + using 1 OpenMP thread(s) per MPI task +# GJF-2GJ thermostat + +units metal +atom_style full + +boundary p p p +read_data argon.lmp + orthogonal box = (0 0 0) to (32.146 32.146 32.146) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 864 atoms + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.000150019 secs + read_data CPU = 0.001946 secs + +include ff-argon.lmp +############################# +#Atoms types - mass - charge# +############################# +#@ 1 atom types #!THIS LINE IS NECESSARY DON'T SPEND HOURS FINDING THAT OUT!# + +variable Ar equal 1 + +############# +#Atom Masses# +############# + +mass ${Ar} 39.903 +mass 1 39.903 + +########################### +#Pair Potentials - Tersoff# +########################### + +pair_style lj/cubic +pair_coeff * * 0.0102701 3.42 + + +velocity all create 10 2357 mom yes dist gaussian + +neighbor 1 bin + +timestep 0.1 + +fix lang all langevin 10 10 1 26488 gjf vfull +fix nve all nve + +thermo 200 +run 5000 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.94072 + ghost atom cutoff = 6.94072 + binsize = 3.47036, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cubic, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 6.875 | 6.875 | 6.875 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 11.080223 -56.207655 0 -54.97164 37.215524 + 200 8.2588471 -55.073602 0 -54.152316 339.80416 + 400 8.1427292 -55.072244 0 -54.16391 338.91883 + 600 8.7595618 -55.066739 0 -54.089596 344.25426 + 800 8.550633 -55.148315 0 -54.194479 318.9385 + 1000 8.5394337 -55.125709 0 -54.173122 326.59471 + 1200 8.565973 -55.114892 0 -54.159345 328.5193 + 1400 8.2092914 -55.109233 0 -54.193475 329.56161 + 1600 8.209495 -55.138161 0 -54.22238 321.39971 + 1800 8.4039924 -55.13355 0 -54.196072 322.64214 + 2000 8.4548937 -55.062994 0 -54.119838 343.29888 + 2200 8.3775139 -55.13364 0 -54.199116 323.63744 + 2400 8.537332 -55.163702 0 -54.21135 315.62864 + 2600 8.672488 -55.112054 0 -54.144625 330.1106 + 2800 8.3000218 -55.147275 0 -54.221396 318.73112 + 3000 8.3552421 -55.135164 0 -54.203124 323.53075 + 3200 8.4126798 -55.135753 0 -54.197306 321.48817 + 3400 8.4986413 -55.135408 0 -54.187372 323.42951 + 3600 8.38431 -55.103932 0 -54.16865 330.68929 + 3800 8.8262454 -55.103648 0 -54.119067 332.97779 + 4000 7.9658136 -55.120402 0 -54.231803 324.9595 + 4200 8.2265544 -55.129011 0 -54.211327 323.87069 + 4400 8.1253738 -55.153089 0 -54.246691 316.304 + 4600 8.2010823 -55.124053 0 -54.20921 325.98402 + 4800 8.5512149 -55.075877 0 -54.121976 338.30137 + 5000 8.4737659 -55.158604 0 -54.213343 316.22418 +Loop time of 2.73236 on 1 procs for 5000 steps with 864 atoms + +Performance: 15810.507 ns/day, 0.002 hours/ns, 1829.920 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.4262 | 1.4262 | 1.4262 | 0.0 | 52.20 +Bond | 0.00042836 | 0.00042836 | 0.00042836 | 0.0 | 0.02 +Neigh | 0.12819 | 0.12819 | 0.12819 | 0.0 | 4.69 +Comm | 0.058611 | 0.058611 | 0.058611 | 0.0 | 2.15 +Output | 0.00047283 | 0.00047283 | 0.00047283 | 0.0 | 0.02 +Modify | 1.0924 | 1.0924 | 1.0924 | 0.0 | 39.98 +Other | | 0.02605 | | | 0.95 + +Nlocal: 864 ave 864 max 864 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1593 ave 1593 max 1593 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18143 ave 18143 max 18143 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18143 +Ave neighs/atom = 20.9988 +Ave special neighs/atom = 0 +Neighbor list builds = 158 +Dangerous builds = 5 + + +Total wall time: 0:00:02 diff --git a/examples/gjf/log.15Oct19.gjf.vfull.g++.4 b/examples/gjf/log.15Oct19.gjf.vfull.g++.4 new file mode 100644 index 0000000000..95caed5dc9 --- /dev/null +++ b/examples/gjf/log.15Oct19.gjf.vfull.g++.4 @@ -0,0 +1,125 @@ +LAMMPS (19 Sep 2019) + using 1 OpenMP thread(s) per MPI task +# GJF-2GJ thermostat + +units metal +atom_style full + +boundary p p p +read_data argon.lmp + orthogonal box = (0 0 0) to (32.146 32.146 32.146) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 864 atoms + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.000556268 secs + read_data CPU = 0.003817 secs + +include ff-argon.lmp +############################# +#Atoms types - mass - charge# +############################# +#@ 1 atom types #!THIS LINE IS NECESSARY DON'T SPEND HOURS FINDING THAT OUT!# + +variable Ar equal 1 + +############# +#Atom Masses# +############# + +mass ${Ar} 39.903 +mass 1 39.903 + +########################### +#Pair Potentials - Tersoff# +########################### + +pair_style lj/cubic +pair_coeff * * 0.0102701 3.42 + + +velocity all create 10 2357 mom yes dist gaussian + +neighbor 1 bin + +timestep 0.1 + +fix lang all langevin 10 10 1 26488 gjf vfull +fix nve all nve + +thermo 200 +run 5000 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.94072 + ghost atom cutoff = 6.94072 + binsize = 3.47036, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cubic, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 6.808 | 6.808 | 6.808 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 11.080228 -56.207655 0 -54.971639 37.215541 + 200 8.4818184 -55.127334 0 -54.181174 324.96159 + 400 8.5960916 -55.09236 0 -54.133453 334.83136 + 600 8.1607556 -55.073136 0 -54.162791 339.035 + 800 8.8350489 -55.133382 0 -54.147819 324.48149 + 1000 8.5692704 -55.118463 0 -54.162548 327.26328 + 1200 8.4174147 -55.126297 0 -54.187322 324.4248 + 1400 8.6362603 -55.123075 0 -54.159688 326.7798 + 1600 8.222512 -55.153799 0 -54.236565 317.8147 + 1800 8.324523 -55.116698 0 -54.188085 327.35373 + 2000 7.9615959 -55.155825 0 -54.267697 315.37215 + 2200 8.495968 -55.083943 0 -54.136205 336.67775 + 2400 7.7926986 -55.044816 0 -54.175529 344.87758 + 2600 8.1551351 -55.069404 0 -54.159687 339.60901 + 2800 8.2593599 -55.084151 0 -54.162807 336.54935 + 3000 8.2860869 -55.110296 0 -54.185971 328.99074 + 3200 8.4074534 -55.123576 0 -54.185712 326.06823 + 3400 8.6694364 -55.128925 0 -54.161836 324.67512 + 3600 8.5718984 -55.129861 0 -54.173653 325.20586 + 3800 8.508102 -55.099093 0 -54.150001 333.91437 + 4000 8.2966658 -55.117782 0 -54.192276 327.13516 + 4200 8.7641728 -55.135792 0 -54.158136 324.00844 + 4400 8.8827909 -55.096369 0 -54.10548 335.08467 + 4600 8.7666577 -55.127213 0 -54.149279 326.15539 + 4800 8.6670762 -55.163395 0 -54.19657 316.48383 + 5000 8.1893094 -55.073756 0 -54.160226 337.95271 +Loop time of 0.870594 on 4 procs for 5000 steps with 864 atoms + +Performance: 49621.267 ns/day, 0.000 hours/ns, 5743.202 timesteps/s +96.5% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.33582 | 0.35125 | 0.3724 | 2.3 | 40.35 +Bond | 0.00030267 | 0.00031316 | 0.00033538 | 0.0 | 0.04 +Neigh | 0.034246 | 0.03479 | 0.035904 | 0.4 | 4.00 +Comm | 0.15068 | 0.17419 | 0.19191 | 3.6 | 20.01 +Output | 0.00044776 | 0.00054703 | 0.00083177 | 0.0 | 0.06 +Modify | 0.27679 | 0.28079 | 0.28849 | 0.9 | 32.25 +Other | | 0.02871 | | | 3.30 + +Nlocal: 216 ave 216 max 216 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 888.75 ave 899 max 876 min +Histogram: 1 0 1 0 0 0 0 0 0 2 +Neighs: 4536 ave 4737 max 4335 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 18144 +Ave neighs/atom = 21 +Ave special neighs/atom = 0 +Neighbor list builds = 178 +Dangerous builds = 11 + + +Total wall time: 0:00:00 diff --git a/examples/gjf/log.15Oct19.gjf.vhalf.g++.1 b/examples/gjf/log.15Oct19.gjf.vhalf.g++.1 new file mode 100644 index 0000000000..a87b20a887 --- /dev/null +++ b/examples/gjf/log.15Oct19.gjf.vhalf.g++.1 @@ -0,0 +1,125 @@ +LAMMPS (19 Sep 2019) + using 1 OpenMP thread(s) per MPI task +# GJF-2GJ thermostat + +units metal +atom_style full + +boundary p p p +read_data argon.lmp + orthogonal box = (0 0 0) to (32.146 32.146 32.146) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 864 atoms + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.000147804 secs + read_data CPU = 0.00194898 secs + +include ff-argon.lmp +############################# +#Atoms types - mass - charge# +############################# +#@ 1 atom types #!THIS LINE IS NECESSARY DON'T SPEND HOURS FINDING THAT OUT!# + +variable Ar equal 1 + +############# +#Atom Masses# +############# + +mass ${Ar} 39.903 +mass 1 39.903 + +########################### +#Pair Potentials - Tersoff# +########################### + +pair_style lj/cubic +pair_coeff * * 0.0102701 3.42 + + +velocity all create 10 2357 mom yes dist gaussian + +neighbor 1 bin + +timestep 0.1 + +fix lang all langevin 10 10 1 26488 gjf vhalf +fix nve all nve + +thermo 200 +run 5000 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.94072 + ghost atom cutoff = 6.94072 + binsize = 3.47036, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cubic, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 6.5 | 6.5 | 6.5 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 11.080223 -56.207655 0 -54.97164 37.215524 + 200 9.8808568 -55.073602 0 -53.971378 345.62207 + 400 9.8712816 -55.072244 0 -53.971088 345.11889 + 600 10.528988 -55.066739 0 -53.892214 350.60093 + 800 10.167171 -55.148315 0 -54.014152 324.73679 + 1000 10.029026 -55.125709 0 -54.006956 331.93766 + 1200 10.194424 -55.114892 0 -53.977688 334.36032 + 1400 9.3473846 -55.109233 0 -54.066518 333.64378 + 1600 9.7774071 -55.138161 0 -54.047477 327.02358 + 1800 9.9814275 -55.13355 0 -54.020107 328.30017 + 2000 10.2515 -55.062994 0 -53.919424 349.74304 + 2200 9.8126922 -55.13364 0 -54.039019 328.78521 + 2400 10.044314 -55.163702 0 -54.043244 321.03397 + 2600 10.543316 -55.112054 0 -53.935932 336.82099 + 2800 9.7874375 -55.147275 0 -54.055472 324.06626 + 3000 9.7703821 -55.135164 0 -54.045263 328.60665 + 3200 10.141958 -55.135753 0 -54.004402 327.69084 + 3400 10.160576 -55.135408 0 -54.00198 329.39063 + 3600 10.044652 -55.103932 0 -53.983436 336.64469 + 3800 10.662403 -55.103648 0 -53.914241 339.56382 + 4000 9.2921047 -55.120402 0 -54.083853 329.71671 + 4200 9.8744553 -55.129011 0 -54.027501 329.78147 + 4400 9.4085964 -55.153089 0 -54.103546 320.90673 + 4600 9.5463801 -55.124053 0 -54.05914 330.80941 + 4800 10.223884 -55.075877 0 -53.935387 344.30099 + 5000 9.6243338 -55.158604 0 -54.084996 320.3511 +Loop time of 2.29551 on 1 procs for 5000 steps with 864 atoms + +Performance: 18819.358 ns/day, 0.001 hours/ns, 2178.166 timesteps/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.4393 | 1.4393 | 1.4393 | 0.0 | 62.70 +Bond | 0.0004441 | 0.0004441 | 0.0004441 | 0.0 | 0.02 +Neigh | 0.12136 | 0.12136 | 0.12136 | 0.0 | 5.29 +Comm | 0.059342 | 0.059342 | 0.059342 | 0.0 | 2.59 +Output | 0.00046968 | 0.00046968 | 0.00046968 | 0.0 | 0.02 +Modify | 0.64937 | 0.64937 | 0.64937 | 0.0 | 28.29 +Other | | 0.02522 | | | 1.10 + +Nlocal: 864 ave 864 max 864 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1593 ave 1593 max 1593 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18143 ave 18143 max 18143 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18143 +Ave neighs/atom = 20.9988 +Ave special neighs/atom = 0 +Neighbor list builds = 158 +Dangerous builds = 5 + + +Total wall time: 0:00:02 diff --git a/examples/gjf/log.15Oct19.gjf.vhalf.g++.4 b/examples/gjf/log.15Oct19.gjf.vhalf.g++.4 new file mode 100644 index 0000000000..a70a67a89c --- /dev/null +++ b/examples/gjf/log.15Oct19.gjf.vhalf.g++.4 @@ -0,0 +1,125 @@ +LAMMPS (19 Sep 2019) + using 1 OpenMP thread(s) per MPI task +# GJF-2GJ thermostat + +units metal +atom_style full + +boundary p p p +read_data argon.lmp + orthogonal box = (0 0 0) to (32.146 32.146 32.146) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 864 atoms + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.000315903 secs + read_data CPU = 0.0653752 secs + +include ff-argon.lmp +############################# +#Atoms types - mass - charge# +############################# +#@ 1 atom types #!THIS LINE IS NECESSARY DON'T SPEND HOURS FINDING THAT OUT!# + +variable Ar equal 1 + +############# +#Atom Masses# +############# + +mass ${Ar} 39.903 +mass 1 39.903 + +########################### +#Pair Potentials - Tersoff# +########################### + +pair_style lj/cubic +pair_coeff * * 0.0102701 3.42 + + +velocity all create 10 2357 mom yes dist gaussian + +neighbor 1 bin + +timestep 0.1 + +fix lang all langevin 10 10 1 26488 gjf vhalf +fix nve all nve + +thermo 200 +run 5000 +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.94072 + ghost atom cutoff = 6.94072 + binsize = 3.47036, bins = 10 10 10 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cubic, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 6.433 | 6.433 | 6.433 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 11.080228 -56.207655 0 -54.971639 37.215541 + 200 9.8046716 -55.127334 0 -54.033608 329.70647 + 400 10.174622 -55.09236 0 -53.957366 340.49331 + 600 9.9812299 -55.073136 0 -53.959714 345.56477 + 800 10.512874 -55.133382 0 -53.960655 330.4996 + 1000 9.9587885 -55.118463 0 -54.007545 332.24728 + 1200 10.236607 -55.126297 0 -53.984388 330.94998 + 1400 10.134679 -55.123075 0 -53.992537 332.15441 + 1600 9.8934078 -55.153799 0 -54.050174 323.80795 + 1800 10.064966 -55.116698 0 -53.993936 333.59644 + 2000 9.6736107 -55.155825 0 -54.076719 321.5129 + 2200 10.264537 -55.083943 0 -53.938918 343.02135 + 2400 9.5640032 -55.044816 0 -53.977937 351.23099 + 2600 9.6581077 -55.069404 0 -53.992028 344.99996 + 2800 9.9622575 -55.084151 0 -53.972846 342.6574 + 3000 9.8724909 -55.110296 0 -54.009005 334.68094 + 3200 10.032027 -55.123576 0 -54.004488 331.89534 + 3400 10.221132 -55.128925 0 -53.988742 330.24082 + 3600 10.085802 -55.129861 0 -54.004774 330.63601 + 3800 10.098545 -55.099093 0 -53.972585 339.61905 + 4000 10.000257 -55.117782 0 -54.002238 333.24569 + 4200 10.20477 -55.135792 0 -53.997435 329.17565 + 4400 10.545132 -55.096369 0 -53.920044 341.04725 + 4600 10.376108 -55.127213 0 -53.969743 331.92825 + 4800 10.247392 -55.163395 0 -54.020283 322.15219 + 5000 9.7753102 -55.073756 0 -53.983305 343.64146 +Loop time of 1.19785 on 4 procs for 5000 steps with 864 atoms + +Performance: 36064.674 ns/day, 0.001 hours/ns, 4174.152 timesteps/s +88.6% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.36387 | 0.38652 | 0.44086 | 5.1 | 32.27 +Bond | 0.00028847 | 0.00030833 | 0.000338 | 0.0 | 0.03 +Neigh | 0.033934 | 0.034959 | 0.036917 | 0.6 | 2.92 +Comm | 0.39292 | 0.47821 | 0.52198 | 7.3 | 39.92 +Output | 0.00050343 | 0.0012343 | 0.0023338 | 1.9 | 0.10 +Modify | 0.1605 | 0.17963 | 0.19457 | 2.9 | 15.00 +Other | | 0.117 | | | 9.77 + +Nlocal: 216 ave 216 max 216 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 888.75 ave 899 max 876 min +Histogram: 1 0 1 0 0 0 0 0 0 2 +Neighs: 4536 ave 4737 max 4335 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 18144 +Ave neighs/atom = 21 +Ave special neighs/atom = 0 +Neighbor list builds = 178 +Dangerous builds = 11 + + +Total wall time: 0:00:01 From 681a0e12e3148bd3eb6d19f8152187367d44b19a Mon Sep 17 00:00:00 2001 From: Yaser Afshar Date: Tue, 15 Oct 2019 15:38:19 -0500 Subject: [PATCH 230/237] Set KIM pointer appropriately for Energy --- src/KIM/pair_kim.cpp | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index d935d994bd..43b444418a 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -740,19 +740,14 @@ void PairKIM::kim_init() kimerror = KIM_ComputeArguments_SetArgumentPointerInteger(pargs, KIM_COMPUTE_ARGUMENT_NAME_numberOfParticles, &lmps_local_tot_num_atoms); - if (KIM_SupportStatus_NotEqual(kim_model_support_for_energy, - KIM_SUPPORT_STATUS_notSupported)) - kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble(pargs, - KIM_COMPUTE_ARGUMENT_NAME_partialEnergy, - &(eng_vdwl)); + if (kimerror) error->all(FLERR,"Unable to set KIM argument pointer"); kimerror = KIM_ComputeArguments_SetCallbackPointer(pargs, KIM_COMPUTE_CALLBACK_NAME_GetNeighborList, KIM_LANGUAGE_NAME_cpp, reinterpret_cast(get_neigh), reinterpret_cast(this)); - - if (kimerror) error->all(FLERR,"Unable to register KIM pointers"); + if (kimerror) error->all(FLERR,"Unable to set KIM call back pointer"); } /* ---------------------------------------------------------------------- */ @@ -763,6 +758,26 @@ void PairKIM::set_argument_pointers() kimerror = KIM_ComputeArguments_SetArgumentPointerDouble( pargs, KIM_COMPUTE_ARGUMENT_NAME_coordinates, &(atom->x[0][0])); + // Set KIM pointer appropriately for Energy + if (KIM_SupportStatus_NotEqual(kim_model_support_for_energy, + KIM_SUPPORT_STATUS_notSupported)) + { + if (KIM_SupportStatus_Equal(kim_model_support_for_energy, + KIM_SUPPORT_STATUS_required) + || (eflag_global == 1)) + { + kimerror = kimerror || + KIM_ComputeArguments_SetArgumentPointerDouble( + pargs,KIM_COMPUTE_ARGUMENT_NAME_partialEnergy,&(eng_vdwl)); + } + else + { + kimerror = kimerror || + KIM_ComputeArguments_SetArgumentPointerDouble( + pargs,KIM_COMPUTE_ARGUMENT_NAME_partialEnergy, + reinterpret_cast(NULL)); + } + } // Set KIM pointer appropriately for particalEnergy if (KIM_SupportStatus_Equal(kim_model_support_for_particleEnergy, KIM_SUPPORT_STATUS_required) From b023e93ac25235862029af5f606940f88eb48c4b Mon Sep 17 00:00:00 2001 From: Evangelos Voyiatzis Date: Wed, 16 Oct 2019 10:19:06 +0200 Subject: [PATCH 231/237] Update compute_gyration_shape.cpp Correct for squaring the eigenvalues of the gyration tensor and simplifying the expressions for the shape parameters --- src/USER-MISC/compute_gyration_shape.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/USER-MISC/compute_gyration_shape.cpp b/src/USER-MISC/compute_gyration_shape.cpp index a0ee6089b7..8c660cfb9e 100644 --- a/src/USER-MISC/compute_gyration_shape.cpp +++ b/src/USER-MISC/compute_gyration_shape.cpp @@ -112,19 +112,15 @@ void ComputeGyrationShape::compute_vector() } // compute the shape parameters of the gyration tensor - double sq_eigen_x = MathSpecial::square(evalues[0]); - double sq_eigen_y = MathSpecial::square(evalues[1]); - double sq_eigen_z = MathSpecial::square(evalues[2]); - - double nominator = MathSpecial::square(sq_eigen_x) - + MathSpecial::square(sq_eigen_y) - + MathSpecial::square(sq_eigen_z); - double denominator = MathSpecial::square(sq_eigen_x+sq_eigen_y+sq_eigen_z); + double nominator = MathSpecial::square(evalues[0]) + + MathSpecial::square(evalues[1]) + + MathSpecial::square(evalues[2]); + double denominator = MathSpecial::square(evalues[0]+evalues[1]+evalues[2]); vector[0] = evalues[0]; vector[1] = evalues[1]; vector[2] = evalues[2]; - vector[3] = sq_eigen_z - 0.5*(sq_eigen_x + sq_eigen_y); - vector[4] = sq_eigen_y - sq_eigen_x; - vector[5] = 0.5*(3*nominator/denominator - 1.0); + vector[3] = evalues[0] - 0.5*(evalues[1] + evalues[2]); + vector[4] = evalues[1] - evalues[2]; + vector[5] = 1.5*nominator/denominator - 0.5; } From 2c9ae7ab4b999596415e763af1b53c9f6a284f9f Mon Sep 17 00:00:00 2001 From: Giacomo Fiorin Date: Wed, 16 Oct 2019 08:35:37 -0400 Subject: [PATCH 232/237] Add -DCOLVARS_LEPTON, track user's choice via DISABLE_CXX11_REQUIREMENT --- cmake/Modules/Packages/USER-COLVARS.cmake | 32 ++++++++++++++++------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/cmake/Modules/Packages/USER-COLVARS.cmake b/cmake/Modules/Packages/USER-COLVARS.cmake index da806c3a4b..b7fb91917c 100644 --- a/cmake/Modules/Packages/USER-COLVARS.cmake +++ b/cmake/Modules/Packages/USER-COLVARS.cmake @@ -4,22 +4,36 @@ if(PKG_USER-COLVARS) file(GLOB COLVARS_SOURCES ${COLVARS_SOURCE_DIR}/[^.]*.cpp) - if(DEFINED CMAKE_CXX_STANDARD) - # The condition below should match most modern C++ standards - if((${CMAKE_CXX_STANDARD} GREATER 0) AND (${CMAKE_CXX_STANDARD} LESS 70)) - set(ENABLE_LEPTON ON) - set(LEPTON_DIR ${LAMMPS_LIB_SOURCE_DIR}/colvars/lepton) - file(GLOB LEPTON_SOURCES ${LEPTON_DIR}/src/[^.]*.cpp) - add_library(lepton STATIC ${LEPTON_SOURCES}) - target_include_directories(lepton PRIVATE ${LEPTON_DIR}/include) + # Build Lepton by default + set(COLVARS_LEPTON_DEFAULT ON) + # but not if C++11 is disabled per user request + if(DEFINED DISABLE_CXX11_REQUIREMENT) + if(DISABLE_CXX11_REQUIREMENT) + set(COLVARS_LEPTON_DEFAULT OFF) endif() endif() + option(COLVARS_LEPTON "Build and link the Lepton library" ${COLVARS_LEPTON_DEFAULT}) + + # Verify that the user's choice is consistent + if(DEFINED DISABLE_CXX11_REQUIREMENT) + if((DISABLE_CXX11_REQUIREMENT) AND (COLVARS_LEPTON)) + message(FATAL_ERROR "Building the Lepton library requires C++11 or later.") + endif() + endif() + + if(COLVARS_LEPTON) + set(LEPTON_DIR ${LAMMPS_LIB_SOURCE_DIR}/colvars/lepton) + file(GLOB LEPTON_SOURCES ${LEPTON_DIR}/src/[^.]*.cpp) + add_library(lepton STATIC ${LEPTON_SOURCES}) + target_include_directories(lepton PRIVATE ${LEPTON_DIR}/include) + endif() + add_library(colvars STATIC ${COLVARS_SOURCES}) target_include_directories(colvars PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/colvars) list(APPEND LAMMPS_LINK_LIBS colvars) - if(ENABLE_LEPTON) + if(COLVARS_LEPTON) list(APPEND LAMMPS_LINK_LIBS lepton) target_compile_options(colvars PRIVATE -DLEPTON) target_include_directories(colvars PUBLIC ${LEPTON_DIR}/include) From 38c819c2811b7e25f4ca1e7c0bd82570b6fc698f Mon Sep 17 00:00:00 2001 From: Evangelos Voyiatzis Date: Wed, 16 Oct 2019 20:12:46 +0200 Subject: [PATCH 233/237] Update compute_gyration_shape.txt Addition of a textbook where the computed quantities are presented in more detail --- doc/src/compute_gyration_shape.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/src/compute_gyration_shape.txt b/doc/src/compute_gyration_shape.txt index 7c428aea8a..c16dfc02c4 100644 --- a/doc/src/compute_gyration_shape.txt +++ b/doc/src/compute_gyration_shape.txt @@ -84,3 +84,6 @@ package"_Build_package.html doc page for more info. :link(Theodorou) [(Theodorou)] Theodorou, Suter, Macromolecules, 18, 1206 (1985). +:link(Mattice) +[(Mattice)] Mattice, Suter, Conformational Theory of Large Molecules, Wiley, New York, 1994. + From 10031e91bd856d253a36e7d41ce8435ef55d3e12 Mon Sep 17 00:00:00 2001 From: Evangelos Voyiatzis Date: Wed, 16 Oct 2019 20:25:53 +0200 Subject: [PATCH 234/237] Update false_positives.txt Added the name of Mattice in the list --- doc/utils/sphinx-config/false_positives.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index bacce01a72..f145227f7a 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1582,6 +1582,7 @@ Materias mathbf matlab matplotlib +Mattice Mattox Mattson maxangle From 5200d60dd3be37df0246332dd52330722c387b90 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 21 Oct 2019 11:29:08 +0200 Subject: [PATCH 235/237] update singularity definition files --- tools/singularity/README.md | 2 ++ tools/singularity/centos7.def | 2 +- tools/singularity/centos8.def | 14 ++++++++++++++ tools/singularity/ubuntu16.04.def | 9 +++++++++ tools/singularity/ubuntu18.04.def | 2 +- 5 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 tools/singularity/centos8.def create mode 100644 tools/singularity/ubuntu16.04.def diff --git a/tools/singularity/README.md b/tools/singularity/README.md index 4541ce285b..84b26bc911 100644 --- a/tools/singularity/README.md +++ b/tools/singularity/README.md @@ -25,4 +25,6 @@ make | Currently available: | | | --- | --- | | centos7.def | CentOS 7.x with EPEL enabled | +| centos8.def | CentOS 8.x with EPEL enabled | +| ubuntu16.04.def | Ubuntu 16.04LTS with default MPI == OpenMPI | | ubuntu18.04.def | Ubuntu 18.04LTS with default MPI == OpenMPI | diff --git a/tools/singularity/centos7.def b/tools/singularity/centos7.def index c11357483b..8160105524 100644 --- a/tools/singularity/centos7.def +++ b/tools/singularity/centos7.def @@ -4,7 +4,7 @@ From: centos:7 %post yum -y install epel-release yum -y update - yum -y install vim-enhanced ccache gcc-c++ gcc-gfortran clang gdb valgrind-openmpi make cmake cmake3 patch which file git libpng-devel libjpeg-devel openmpi-devel mpich-devel python-devel python-virtualenv fftw-devel voro++-devel eigen3-devel gsl-devel openblas-devel enchant + yum -y install vim-enhanced ccache gcc-c++ gcc-gfortran clang gdb valgrind-openmpi make cmake cmake3 ninja-build patch which file git libpng-devel libjpeg-devel openmpi-devel mpich-devel python-devel python-virtualenv fftw-devel voro++-devel eigen3-devel gsl-devel openblas-devel enchant %labels Author akohlmey diff --git a/tools/singularity/centos8.def b/tools/singularity/centos8.def new file mode 100644 index 0000000000..6f006b3092 --- /dev/null +++ b/tools/singularity/centos8.def @@ -0,0 +1,14 @@ +BootStrap: docker +From: centos:8 + +%post + dnf -y install epel-release + dnf -y update + dnf -y install vim-enhanced ccache gcc-c++ gcc-gfortran clang gdb make cmake patch which file git libpng-devel libjpeg-devel openmpi-devel mpich-devel fftw-devel voro++-devel gsl-devel enchant platform-python-devel python3-virtualenv valgrind openblas + +#No match for argument: valgrind-openmpi +#No match for argument: ninja-build +#No match for argument: eigen3-devel + +%labels + Author akohlmey diff --git a/tools/singularity/ubuntu16.04.def b/tools/singularity/ubuntu16.04.def new file mode 100644 index 0000000000..2f7841bd4a --- /dev/null +++ b/tools/singularity/ubuntu16.04.def @@ -0,0 +1,9 @@ +BootStrap: docker +From: ubuntu:16.04 + +%post + apt-get update -y + env DEBIAN_FRONTEND=noninteractive apt-get install -y make cmake cmake-curses-gui ninja-build git ccache gcc g++ gfortran libfftw3-dev libjpeg-dev libpng12-dev libblas-dev liblapack-dev mpi-default-bin mpi-default-dev libeigen3-dev libgsl-dev libopenblas-dev virtualenv python-dev enchant vim-nox + +%labels + Author akohlmey diff --git a/tools/singularity/ubuntu18.04.def b/tools/singularity/ubuntu18.04.def index 46e3851d4f..c87daa8de5 100644 --- a/tools/singularity/ubuntu18.04.def +++ b/tools/singularity/ubuntu18.04.def @@ -3,7 +3,7 @@ From: ubuntu:18.04 %post apt-get update -y - env DEBIAN_FRONTEND=noninteractive apt-get install -y make cmake git gcc g++ gfortran libfftw3-dev libjpeg-dev libpng-dev libblas-dev liblapack-dev mpi-default-bin mpi-default-dev libeigen3-dev libgsl-dev libopenblas-dev virtualenv python-dev enchant vim-nox ccache voro++-dev + env DEBIAN_FRONTEND=noninteractive apt-get install -y make cmake cmake-curses-gui ninja-build git ccache gcc g++ gfortran libfftw3-dev libjpeg-dev libpng-dev libblas-dev liblapack-dev mpi-default-bin mpi-default-dev libeigen3-dev libgsl-dev libopenblas-dev virtualenv python-dev enchant vim-nox voro++-dev %labels Author akohlmey From 054766a380c53b6fbf3412890ceb57443d94bceb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 21 Oct 2019 14:54:30 +0200 Subject: [PATCH 236/237] include info about ready-to-use images uploaded to the singularity library --- tools/singularity/README.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/tools/singularity/README.md b/tools/singularity/README.md index 84b26bc911..d316e629f3 100644 --- a/tools/singularity/README.md +++ b/tools/singularity/README.md @@ -9,7 +9,13 @@ 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. -Here is a workflow for testing a compilation of LAMMPS with a CentOS 7.x container. +Ready-to-use container images built from 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 the key fingerprint: EEA103764C6C633EDC8AC428D9B44E93BF0C375A + +Here is a workflow for testing a compilation of LAMMPS with a locally +built CentOS 7.x singularity container. ``` cd some/work/directory @@ -22,6 +28,20 @@ cmake -C ../cmake/presets/most.cmake -D CMAKE_CXX_FLAGS="-O3 -g -fopenmp -std=c+ make ``` +And here is the equivalent workflow for testing a compilation of LAMMPS +using a pre-built Ubuntu 18.04LTS singularity container. + +``` +cd some/work/directory +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 +cmake -C ../cmake/presets/most.cmake ../cmake +make +``` + | Currently available: | | | --- | --- | | centos7.def | CentOS 7.x with EPEL enabled | From 648799ef5e674800cf5b5c0db42b68dc8aee5c5c Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Tue, 22 Oct 2019 11:19:55 -0400 Subject: [PATCH 237/237] Add PowerTools repo for CentOS8 Singularity definition Some packages were moved into a PowerTools repo in RHEL8/CentOS8. --- tools/singularity/centos8.def | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tools/singularity/centos8.def b/tools/singularity/centos8.def index 6f006b3092..b48979cab1 100644 --- a/tools/singularity/centos8.def +++ b/tools/singularity/centos8.def @@ -2,13 +2,12 @@ BootStrap: docker From: centos:8 %post - dnf -y install epel-release + dnf -y install epel-release dnf-utils + dnf config-manager --set-enabled PowerTools dnf -y update - dnf -y install vim-enhanced ccache gcc-c++ gcc-gfortran clang gdb make cmake patch which file git libpng-devel libjpeg-devel openmpi-devel mpich-devel fftw-devel voro++-devel gsl-devel enchant platform-python-devel python3-virtualenv valgrind openblas + dnf -y install vim-enhanced ccache gcc-c++ gcc-gfortran clang gdb make cmake patch which file git libpng-devel libjpeg-devel openmpi-devel mpich-devel fftw-devel voro++-devel gsl-devel enchant platform-python-devel python3-virtualenv valgrind openblas ninja-build eigen3-devel #No match for argument: valgrind-openmpi -#No match for argument: ninja-build -#No match for argument: eigen3-devel %labels Author akohlmey