From 588cce7e7e7b280f6f93b401a46626db83ba0799 Mon Sep 17 00:00:00 2001 From: alxvov Date: Thu, 27 Jun 2019 09:30:10 +0000 Subject: [PATCH 001/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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; + } } } @@ -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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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 f0679cff6d87b0133f05833309af9c5d44468a0f Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 23 Jul 2019 09:27:15 -0600 Subject: [PATCH 057/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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; + } } } @@ -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/165] 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/165] 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/165] 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 zYq?f#Ex#T*$w1bd7p!)W?5_4=H`i6}ZnTwjD+l@2+fIgsImyk%E|PGY891vPWom6_ ziLr2!PN{Cv>ye$TUt%qJlkH^iTs!${XD?BG-6hYbjZApdTIOh(L;FgB^FGX(Hdi3! z2KhymQ5=?4$k%A*PCr#((gkvk&FO*jP~Z^1*6gn%`Da_H zv`kQ-`X2$PwVRAofgf(A1R#L?;-S`o_-j4;3JF07@9l>X*ZomtJKZ)t>5Y5thq++y zW0^my@|myKOlIP;@44fLKfDjnXAnXUV^g~0d;`$pOaRR0_+#^YKj>opG3=)==UDyd zu?xV!$^bkgU)8DDANx2H*u&Ew7PkY)Q?UOY6U~_$a!`l)9CeqTx7(aMbSF#oo6g2r z(YW<75>hL2!P-p4abZwwi&3O=VQ`E%7#INXFj2=Z7VqscPHvQN>2z5ieI zF`6*ns(}HnEtsvhlQWWTWT{T3!oDND3?0*O{v~VUX3WdoXTXfF?9G$Yn&Lt?!fyi} z_cmbAs8kHRlZrpa8(3#%jqOY-`n0Cwrg|!R_f5sZe*77Espz;km3w|>cNB2mEP#EH z>S=Ji#q4V5Ja{gkcX2#31lZ$mGMn7h`8?PSW>yn>ImhSbWBm^Pvl+9kN|=Gm{zVsC zG5}#kvQrkT=|!kX*Bqbs{j&0~lz->OOuoK6 z4+;EU_2=i|5r3ZQaX#wr%twtubSZ4L5xL6;t|9Us>79s~_(2>$|Hw`|K*mH#kc|RePC7Zt`bOH?iK`TF#UGP(F5%m{uk* zl$gLf-Y9FMjk5cy3A(x(WgdI@hWG3fRVDN5P%b`hM!9*sQp$(Z+sNLL?N$X&3{+sL ztpZ;cC=m37T;fn>eYIgLt*8IZT#9cdYY=b zF^|*U59O!)k+wSk6+c+RSnH1vZ(r71{jkR}0Eg=a;>lI!WmctM#fE;T*1l-(?}xr) z{P3iYKXl#wU_vh0PwR&U!~781pBZJWomj2*!@~A{n6@Q~_g?k}XORQuHKi!vtn%R~ zZ09vIc`SLvEM`i3@mhPzEQUX$@fUkzQ6r);V@?#ZO`|YD7X{aNW^iUpu}0Cm z4ttKHqM2L6evy_LI}M}Y#B0`Ih{C>^{5pB#F>RR_H-Og`|NYZ;`cipKj%DAgeo`t{ z_h3d)ce)u58PJUEp`|@%;NuNQ=|z_0oB>a!F-w|!A>%2(H~XC5 z@8%(b*X`@&%4^oqiaFFn>1;gTPCv2bV!dJALEYo39=cOUPU=jy z`{_rnX{X=WZ@1^!HeGdDmz(JtJ$k9TTd%+FpKF74mg?%gx}F;5x$x%H%RlQK*VXfN z*45m0Nq6_tj?1Zk9oMDYZ|(WVkq4gd!|PnCJ}N-Jpyg!VYUZ!f%>YR-v_kO zt?2(o_pH@1-Q%uW&vnkrb!m~`b@fX9^egf>ccMrZ&VF+;H2b6_YPIpwx$kA%) zaV}BT_^2hKmr8aHQ%n1oYPsc~EHn41B<-M9jOA+Ce>PbrY*I@DE43t%e?0WkmEL|g ztTND@IMf9WMrVv9^AR89f|Zk8@VW_epmQBjZ#Nm0pPWyt?S$dcE*Q(#y4+*$rjH9+ z9&w`c)EVx-oZ#M)JuVAp+-dHDT7Pq9MoEYFIVXI);|P5%@{UhA1GC))3w}70i*Q9Q zXSc>}q8Cc#ggP6YVeu^#MYqGy&?5|PbHnh7J*mx?$eH}5WR?gSj|Oz3EK$Opd$&W4 zln5dp^L#gX#dAu$>&5-z6*?H%+6#W~bmmu=@#pY0mfQI}x}UX?-Sn4n2Il=$x>i!?W@Ihq z*I_!mt?B4y|1JI+GZDD2d$);y7Bcs9ZWgARlO;*aLPhN?H2O0Wqwi&+@fmtzj2YNw zl8pot&cJYgcxMftj!41@}J>Vvas-C21eD*!jT&EJRacdDl$>yeFpw4}8hTO;&t!mILK3(q@dSy!x)dtNjWT_g0{?feETN zBL6_HQJc+q4f_D}>==l&#erx!!Jiq@fmrjNvlfVkSv7iVo%V3v~ZETv7M#G*$z@+ z;v^OmTqJG+9TR7`f8!by+s70`-)lR9?{^eat)uvO(h*4qSl}Bn zpK9hz_oOd!6#beOfr#i9h(Nw4&+BA(c#PV7B7;gEWvJO6)>@fsdMFCDmXO0JjKY)z z@;h_s{?gEk$bH@E_hfg%({MeHzQHdAXhJ6B)sH;1NGw2G9xMM#PO^EgqwF(;(*r*okMo138=Z*F1F(gR zOrzo`wBbJYU+ZY>qgV5yp7S@?*=J~xhMPOmFn^FhigS;3BogrAWY_Z-)e3&H21j=ZxapY7_RYE_rSe1`5m68np}@9RvNHl zPa59wYy0^5sUA%RRmru^jJe$0bN;)DzN>X=nNQy9K0Q)<+MSSlqmN7AbY}Fdbi{z^ zPBMsr4$rUW9N1xO!a*d@L z#I+%tc81S;1L^jkMz)|QvpUnr8EnahEi*~d$qrs36Bog`+EY6fUj6Tp2kU-Z%vPvn zS9{huIws2jzZ2p%VU+m3X{XiGyd!lJl9p`%We1 zMup=7S(K39bljSeO9|9q{&Di)?U{X`&cw+5%);qT&lc}r|G6U9l2IARfa@OA!TTZj?F~k*9PmsO8 z?@E6#>kIZuoaBAJZ^v+?yd*1Q8;-R}8qOVQab%MgwN}#MRFCYSg3RSh<`#_0=4-Q2 z$m7)MN*10Rr-P7eTsup;5RcO-Lc6v4<>eIK?Dhr$QGEt!=`+0@gs&Dw7D#%zi<1zA7cs(JH(W}2k ziv5zMR}yo=xo_yf*@%=UWHCCqpjrtXS8H8S)RJp|A2<9v!4=j%WGX#aH<>~&a_w-K zbymXRY&fcTYM{&FpCCGl`>T;}qD2>XEp#23t-6`#CpQyg1L^(xhyI4PSr{^g+0tZo zzH?SPZJ5H#_L~vH-1R0>wNcv&sb^c2(SFILrj}!7q%j!UuOD2t?fleoRr19ATmv} znK^qS6K8gj`5e#8a{9;4_ELEHI-7XCxTNsf??m2-@2B8FYw7aVMLg{~O5%+U(jv-P z?9RH0?NkMt&#I6X%}p?Dd=(T<zC0Fy?XfLNl+mAj19yaH^WRegFm*B4EKhRyE27chCfAA+(dZq;eC1yTB>ynLf#(;@G z)6n)l=k%-!puJD8Zy8;_e;05zgU`d`+~lL9vp7t2l$u_4%vN@giMO2P4Ee3*WcQ&su#ZpsKEW1AvdsKnYPYlAXM!YAMl5hMFh+Ew_1E$`C69v&2%=h)|RupFO zPorQ1)Z^1oxtf{N4r#E`8eqe(b*jU;z$0A4p6BDff!_5^1;}2@Jnkl(-<#qhS&1Fw zkDa#S5#%B|o3_#?P=Q3=qc1J3kX0`fDB{}DDnWr|#eT5#3BairoNwz90Q(SsY$y!i zTnV!YzeZzv5%0?vqv>{!MrV*WzhD42#kl_1KqpHYbbMx7nViNvwK59GD zWf`827_RfaKcudyQ=g)n{^S4o4yQAUoISsCstap6na~@|q z($mwB+LIaG4f(9JjvmBcoYVB6>+^LU#>D3%(%n@Y?8)ZFwv)@%U70`PE`7hah=S{A z=nMt?8=D}sohgQ~-eu8Pfh3(j;wA-RK4&OQ&iW(tSrE=1@W+_G-0zTQY*Z43y%YAJ z!Sra9HQR#=;|$2MO2ZJY>z#X~p({U2ZMn|RPRhg8-~!aH#d=7;d^9+bkINPGGaXgQ z;Y^jN`l-aUNwPGmsutr8y7s!W2HndUjV|$7!GsR?0WQeY(fzlAJpKyu5!G7DGCxOVX#bSRb?y-O5ctyj_q zOO`q?Sm9OUF|Yae3NPy`8oA@7l|d;dq~D0+lHzkhs*^c?_SOlt+?|<4PTxGeh;}({ zSRFu5{dgsmF`SjMQ=;`ku4R1gsO!LcbVn`XHquucph5i!8tmJsLHcqH;_op3<}m$w z(VPv~lLaP>U&&L+Z>nJ zCu&h$qZ@LJD`tIj;U162CzrgXtt58wRg|=TZ zGs`sy9>STZ4I12w&%}DJTUYqL3ZJm2Ixma$$80o>Pw>?9tN{5xPDMUc17ubeGJ)^=e53$8r=8LVzC8h)%fi5 z*ee?aVSHYy$imjytf?Q&#OnPDubLwiUYU(dyu!Q`UT4e|UTYUByoNa^NzJ+%Y0a6E z&h}dAk*pDic)C8}3X2`CcwNf{IvZC^h;>2EAy?cICE`Yfaqct>^ZSQmR=>z&c_h}eUK=z)`bL01BktxfB^{)){Yr!lg`i{?$cW@s|N6QMX z@d4y4IZyF_pTqv#)k>C}DUv^G_+WH)1bPh9V?q=;nnzZ09D$y;NR5 zC#U8biT=fUd<>-jvA=~Bg#DCj6}~W~FYLEI6$7s4;@V1UDS22VZhSw-yvXH!rJu_$ zA1y{(OZwUp3A*EraYyL6W8Es`S1wdb&87U!Pw7$Njls*9m%UYw*9y+L2ARpU?ZvXm zYy|#l9*I7KSleYS$j_0v$yZC|)*^4XHjTorJ9B!D@paZ~7d^iD;^ z&^&D3VJ;S{%Vg(eALPBDH*kL{V#8UR8q!GG`&LL@8z0o1$-4Pja%7X3Yuw&aPR}oq z1_Qj&fWOz?7JAGcNMGSS_9#{r%e8gP&rOQJ#?|DocpSo4w2-1*mC`iA2kkr4cUD)A z;@!E}J<3*eFH7X*zuu_%kn_*Kng8oWFJwS-Y5J@}-YsD6OtnbPSnClzHxG-NT1qE! zb2T%WYaC6^t0TRB4tbo9x003f%4FS0UwocRKJJ(vQ%^AmIn`Vq7L>@C3EuE2jldFD z=IUnWB4|}p`8l#gmL2p%Ok2)ef7Zj}O%9#HP38WON{Q$B{kDpE;x_dCz01XdxK>i1 z4*Eo$FZQ3OBe)i8^W>Noezg!6@_O5+`@m;IBwU~H_nk;Dz?T-H_~(Z_{pN$AX%SF1 z(c@n8T%6n6TxJ#(OX3J}tc4Mn=|z9vw_MyN|5!=R%MeRG^jRcAtLkAWWnOj^`%G!2 zV!MFey2g=+Fw-N9JYa#3h5T7mB&h?K7aYfYbJjK^ALsJeS;{^smawLNI9i+Q^)6;I zwP$Yf`bIM1Mxpe(=8FqAIqywAYfRT%==(L2&+W<8n$ZX6#=LKGWbuFJq3iO7VrO3> zM?d=F%eDwy{h~v&wagQ5M33ZbW^u*%pdWK`*EG=MYb-h0dUo=qaiO@H`e56H2z=tt z4X?s^vj|%m+oVX$#Se3y?nVGP(8pu*5PGS(40QM{W3G%q@h;{I*Ga{PCV4n8ys3o-3u)S@ zM7n$M^Z6)(b2#Le`;re0vyxZC3gzGdA5_^LNxwdQo%_k{4z`r~yGvytKUZ}}N8(Lk zDke_PMbQFViOVmM56p?a6&Zn$IjQg-$U3g7x$L0R;JJaHpH5L|!dmh1j2yh5%g=vl ziS!=oi>W-G!>j4Bu}&_ZY0Tt^RjCB6;rkgIflCHGa*y-t))wM+xLmdc_;9v3g1Ir| zDBtt`;9w2kc&3Q50!rKvdQSy|1yG2D^LhTqW%; z7_ftqnE~u(hOj#**IZk|U6YP;?f1OSIe)8E_xs}SWuu&qOka#~5Ku~eQm_o6E^3^&aTXhF``Wxj)Ss#_%echl4QJPfmr8}Xuk9&$UF z%eAp(@*>6yiRR>IXQwdNg`UKbEu`9o3UR%}{I)h4yx^K`g%vr$JMAUoL$O?b>w$wG zH8@@`6;3B}F|t}~=28?(o7tXl4-Uud)+reI7abUm&E;owvCI%JOgJBo-dl{=%(ErC z95V@-Stx^&ys+T!FuXWrM6Y&vsA}6r)@>=3(O*1q$UY1WLXC)dk&DUXE_3de%eLuW zbb|9ff0u%o?tJdvw3XjJ7R!`V9=LcboLOi_Jj%*Nhl&=Gm{=;q%{?%Z+@cMy{{ZiY z(B^F<(yL7Vtm}z&&f%D{+lZ3Axy-0(E1#ErmvN6gFeWn$_c^ZGt<6P5*Vb}jN{JlW zItu&$*#n87*Y*BqL{DuY^{4PTwerDOJ{O<5reKFhE*5-=5j*mOO)mz(W}6mnfF1TN6WoH8|1VJ#I#!EvnG+>q0g@L(_v|5VF%Y= zt1&E_dCDs?(V2ZLf7XkU>I3cZ+p7TB-_hbPn=G7~UWLtFj>*@vc37RV8mF#nk@<iXY#U2|qAUG|taThB zuUCI|w45Agi=t7hVK_!_oo^Og-KyZa^O$USXoq>_L1@rkhej8eqq?LL2#l7SA8p73 zkmH-6MPy+Hid`yk{zHs(K5L7k{^W6<#^Yg4`Y7MiA9tKN-J2b-=w<-x4)NGsoQbXc zys=)i7;n*!wj%)Az2uC@IiB^a#GyGy<)N(u`d0=*-%W>^%UBPl8(OoPp23dv)6ELR zByvxiLNYPsXBGaLA1xV0c33{1*-5clx;ZlOY#sfE;Zd?|qAfno4u(&CEn2rGr{+j* zj{NCw!M3c2kb~Pzk0Ck7fmg_xu8x*~TXq<38Gx8BT0A&Qe#$^Db#|<{=#+Tt5`^dl z^f126!1<_3jPZ&U9AZxHupo@{X2wPoc{g%Qixx#oO?oyH?*^kwo)-JJWnvP2bDsL6 zvW>aGQ|Zt;K|XOg8HldaDsgXRlq}cV;Y+(f)SRV71HPY+<0`RY&{6rwJl~$oL2hUr z4~wz%?tLbg_w1O|9-yRWl^#RBPJ_YZ@{aIza*s)Z-WJ>51fnV5pFj}`>s%~Rh0{Js1^KD7P2XmKI; zS6UW`vd;8c*2%<$R;%)l~>O5hL!cZP1B7?@_+aD(N6EGMbkv!U zBc96lQ}~?T=KViCM(*(a%)b)|%L*-7XWkFBs<3?-`Ntae80XI3svbIi{|xdD{JHMO z$>tvp$XywP#S?iy&t%R!@5A+)8b;X$zLtq^aFOf*7z{k zaP&Y2V}z={F{Yu$khkHGq49=ch8g#JxSc(gZ5Xw|%D61CJb8fawdCX09o*h^?c4il z;10vcWp51HqjL?b|Nhv3*Nz#HIM;F$F1~%5p z)Jna8S%vQ=>*PpDjM&eLllHe_#l2smJRjspcN+UllUYNzP@>d>EaPH2ba{mDv|eC38lXyK0R{894qDj^gQOoJK+9ix^f$^U-hX20!K3k#GN&a93`A=m54j% zKp(CWmc5kN-xm;uakg|JV%&A&Tvq-1Pt?J2H<=>n(fu0 z`DGoBB=USAi{qmu{XOgTn0Hl+_j7fuMJJ&9V`fO-*Fpc5=hSJ;vR+5;P6K`fl4~5V z#nRz=<|5MlJX43a)0k5o$FpnJ!TfERJH3Za#WZ?yo@e2BNEW7j$->Jcbh>WL!mC5s zxJNc|Pj(jjII~ecgJ(VSvk)7^b8K}sV%p~50_%A3lj;85orTK^X3{s$LP_%+_DE-8 z(Df{A`7H~7kK|Z?l=)DxJhNu~W|wys5;>lCo=NZHiEKC5riFYwZXsJ()9w?cl!g zWTTs%v|?YCO;a2BKG8~EwzZNPMJl;xZ6}L&*vR3Xw({(Tqcl2YDYehpOJZ*a8R<;7 zPoz?^gRSLyoQ-@P<}69CI>^=`72>Zk!L#f#i5_1j4i^>3xvOBN4QsONOi;Cx4!Bfu zhj%Na`8NgZyD6~nuL@Dqz4-gu3VBBN+!nJ+xv;xjX8S9!1150kP0q282^L>b;AjVO zS~XaocQ2FK+>e-#E0?~*d4{^LQu@xQl&)#zqUu#8C7zWMf0F0)K0dJRPrfk23)=c# z7?|RXIdkaxIpm8Cbm-qL;J)-M`|nTr;L8+dDkl5jsJS;TW->qb3|T6&Rz-WgQMS+< zH80b>_=vd#JDF3>f4{ihhb)8-^8fZi>l!>0xaN)fbG*@JEWM4tm_;4ToU0w)$Q$g1 zN#{J#lr{R~6b>FrND#4@Uzxa#sU+e&a}2&rIfUoJvKnL#fO$N?|q{8N^EFHzlXyuSuy`%0H7- zY1p%ceB(m;bB3nkg?kD%7jtjCFBM<-F=#q-6nm$lU@pCJ+@l`i>ja-o#q-U~o*tiy z4Ru-L-s6Eo~;R@^QX(>1aer^E2Peb;U&d zn8#kAeE3=AWA6Dpk)YCJi}F}>+$ z9FvdAeRM!NILYLpwz6WnQryfer1uCLsjOxvE3P<7?^6!+Jl&7F%-xnb7D`FcS<8;P-q5=ao{>z!VRy6d1R*N;JWh(qneHM4Ff&ty8&tZ$geZfbIx##gAK+$^q=mq%ix$r`tG7k)FDXD(-lrv!f51xA8`ghx9WtBj?*=auLbia5}?hwVp51 z$NS+t|E})k32Xk_zO~-;8u7LGOgxSc$Ldw#sNPfqn~UKXGm5-nOAXQ=Fhlw%&!Q^G z_XdO`{SQ79jhWFEz-RBX2G>{9J9d-#?#>#t`oOQNsljgQ_P)-WQ#HB*ZbIex`Y53+x=45dyE?!|j`pFb{ z%}&L%pfuDl(A}8An%RCbz~A^>c1nZgN`8;X6y&(2VsRaEkG5&3{*-^enu=dM*V>lN zj3L(2_8nq9urA#$yYtXT%M23U>l+Mtm_0S0H4UD>eaXiQV;)j+SPwmrkA-wLmLH|l ztWN=sexi@+FrS~VbfWT{cUy~m1n@b!w3%L0U$Pw!*;Cqv+|oaJ*m@x!%lO)QKC4!I zHc$Ux?)$_7T;9*`-5?KrXOer|@VoJbwrO&gGj|Mo53My^jPGb{1BG!ISU@`X86l6uKdMYo*9XE3b~ypEyd1Z1(Jp*K>_`Nr}k1 zj(A#6iQ6^~P#4?dG}m|Ct}0=sP$6On`&+g;;sV!pu5;{>HPaqBbsSOZ!ffgN|G5?& zkZ0upH##b=M=G%~+a5`A>}#Q`f4ivz23V1qoJW3fl@j3pTTs^ln^kT>kkv(4$jNV>q>t_5^zbq}E*KLnT72SZsi2=-hP zn);JZnG=lr+8}H{!p~I&GxH$?&7DI~$aQ3khe3$HM|ZbVFbWi8A~*4MdjHo;8;q~L z0&(CP-HsLPZR2YslfU^iI03HfbT~a-M<<*Xp}~4gb7#*>^#nAv(lc{Fk4IJs2^`Bf9fGa^q8E;ui@WqE$KKZWB+SLCJM=p3~;Aw@lY22?3#^avMetA z__;j`fApfm>}fUzbG>)(4*OJoWx}#8nMHHJbf^H;lkMj++ZVF>iXW2IIy@piK+1f=klqV^70#jyq>}rNP%DjpqVi z5ZkW+`3DN%IFyd7reEMuo%x;P9A$v(@6zd4M>(PDBy&33i^ICkGV>(+VA`2tJvk87 z(rWM=SSjv}nTfs37YdI1cVn4b9N-I|XkWa0<&B}s*_Xld{Am*+ux^J2V;v)*;<{;3 zRvH>{{OtCX=RlquKhLG&!W6DSoW8(+M?O|uEI@6}`7z(}F^){g&@?+)@J%V9>pIH( zx^}X8kdyd3c9L6j6>wcn&(;J5e(4qTW}D!ujR`v0`Jw+CU(~ARk5^lm)w#q6u4Luh zi#2GogpO=O1pM9Tw(7)dyAc7$X{o5WDveorX>i?`hHUZ}TgY4<=v9Dj_Y2TycL9E- zp! z1NH!X@kWRJez;0+<(((=8@u^nL?f;ZlOv$^j6f0R#w@ax{+zpf_b`jHZ#sfGkMtrt zQ-f=}|9HK@ngZ6c3h?@DK59?*Ew0zNt5Kz~OJRXBkK z4lLq$8~r8(y~0BAYF{XF-iDxaY6#kELf|#)KgTS`seL;5AEZkvDuMnI=G~C{ij-`$ z*vj$5F&mdwaEwUIK@GZ*zRgjn9d?k7Tf(z+9~1SqN`<-9mBuVJLpGZ@Jl3)}}6U+?&Jw z@L$|>=abvZB|})GgLh0e{Fdfm5pyyJTxG8EF!CT_JkKYe;_y(R?nUmQs+~ezm;7LT z@&(@Cbdo@q@&3L^a^_T`bf3$tie5>Q-qwlh7bVsoV2mR0?{9htKJ3=v?qNNik-xCJp+{Q_J-(%qw=8Gg!4&eHADE|1_Tq34zE65) zh?2Kxc0-{~-b}Xgu0riQQK4Q^%|u;SeM084ub^LiqRgk4F?MpIl$vQJZXsRAACzeP z(h&_gKjzO+p~W;M_OjOT>P9e9hq690C zSTdG#(Mml&xFuj_{{%E3i+cYqb79D$e2&gRKsb5$C(MjkNG9ZT7H(QIf4jYjI<}RG zdebC@+HMA~XBF$lc4T3@>10}$Byn_$muenlW;UFVX+4!FzUu^Sx)Ot&l+ZO-;m$%Q z6n$sCH75k)SjRccI?$LjO`8Nbd%UCw)X*&&5`8NFoLn>x$6vM$nQxUD>HM^^5jqvRjy zDrTn?_<2i#cYl~5irm4W=_at(m|`yX-WU4%u^voc`~qKSmiwanFkjqR6hS5{0`X_a zFZYN9xR-v~BLXhp$tq{Emneznthdq-M)pfJHkEu*KEAU*&T=_@h^NTyWpMr4f#c66 zC%HDLlN^e&lpO96-bOVSX4e zlf9CCy|DGOF9xt5YRK*gSa?NX#!Ud&)@eBU@&6k)0f$&poRWi_az~ z8(JmPH!E;{58tb7=3cMzVQ!ZnKHu>{=1D*7S8?x^!u`|62%LKqf$f(xIQ5o$9FEVy zVPqFMe{JN)&%aW!m2>Hpt?3v(kZwlq2YNadpcVTRz7EfaYk598u2#z8!Ol`TyR%H| z>m=`6bYWe|S^74tls5M&MPoysCi^Dd@*`t@m1KL<1%00T#$$f?hn(kKMvwL%1kI83$zzh19Iadri z$3CoA?5S#EFMEoWa_OFvRO9}A1bcl)?6Hv`&RrwcD)1($LeiI;pm>o9F1wO%bn?gQ zC%)M7yB|J|rT2J+FNW^(#b*uoby2*QBC@APBQT>auWupiIP1Ajo0W!bozu|wDCaS< z`E~8mU|yGdr;`QDs9+6a0oh9Km#)WTRV z$m7p6!Czfj|0-7CV@DGVol2gOuI%{^%nB*zUYPxRPO~|m?TNra?rY;7lYuQ~ZRmvt z1>GYsc5)g9eqin83VTiW(x=JyO3693q&waFl?6ziQh>panQ8Ha{Uxk{SJ@uNTyV*F#RuTthzYyh8nJq=|Y*_2V*fO1wBt(8;+YC*|VClQJ_! zFK2#tf*swAix#ntzmUCW(^;E8titd6LQwO42&VCxBKp!@dpZP>3i5+XIUWz7@7~+6QHf}L{n%;6Q>qi%19JzeX4?pRz{40Q-W6l$WobOXO*AHNS z+}O8z*~Pu*Lb8?{oKMKHLkW^(q|diEy$9@@XwYAYjCV>jHC3TjL*^p!{aCOp1hzJz z==OuYeD2$xfG)-eG?bm9I?p7iRw;&B5GdbT5<9-K^tYuL1M0TV`YP7=?N+@15(M$Lz_%UaoDT zuFiY<|L}~XyIY8@vPfdDcwu?1a6GI}_xB#=$n-ap$m50bJ3V46U$aKF!idV|xp89c6QO-Q#_Ib#5F_T)03&mlaC!&{yBYF;bA1CrDm1fdlXNk0b!rFBs z=EMHRoYO9O@Ne2drZ6YE3w>wDis)yIWlnA)`@Gk;mBTd(<)xK7UCHEqcBkOT**vsa z)lBBnFZSmkPo#7U!^$T{T;7p~PrEwExe2B6gRfIQo*W{1%yzSLq4>SEnA9wh(OXyx zw+_QK)}dBz&Sx*JjT|Z|mGsu0=#UYP=ls6STd+^|a9jCzWRbkS>kiA4VMw{1f~I%K z10FEv*;=XW3G||~I2_v?Qqf{&F3Ooh9aF24x$3ODE5f1fmV#Q|tm$U9mB&11_?+R1 z7hA&6m0ra-b8?+0Y-Hz%5-C6C0WCSlS<8&5bu<@~6>X%>#Ug3<$rD9U;duLvJenDE zLi(7?zy9POk9cBKGYv`$jkt1|ee@>QGB~S5w)dy6Ffa^L|46}$i_E7!)j>vwmC9*y zZ3$8I04^}%W-9rnVeRG1y;6xj;fYsWI9F{Xm-mL8-RHJa@~lKcZ+f5=`M9D9MzkE4 zi(SkSeppf_XaDlTd0uDwz*H25u#VlSos=1V$+F$-^G;-LFMqC*KXXyT#ZrciES2Zv zK$Y~?wV{WxF8hX!JuF2PUqnYdGo&^#FZhuW1Hb3OGq$x%EG-hxL)@S4B;QKTaZ=f5 zoJ+Bi%MX};O%7|ST{!C8Frdd+UJp6hG`k83c}ni`MHnvRlfxoMIl7~zZ0N?d!vrrF z$jOHA{jvV^85+A5^pus$pxIt{a4-zkt5RUi_tT}E_w(Hn>DI*qPF@3S!olmat$+|qObZ#eZZ+SmBk(=Z1{hN6TEO_2ga?)I;%_@_%tJ&Xime+5` z=U1DHpeOBQUrvb_mU$v#CEXPo^1o61{~v6ndv1wbY3zYSa&STQQ*b;Yk6tZ$1GVMS ztSh;>A7RKLC;R>ZJ%BAc$b_cl@}tCq4vjFhv^8P?*OAxR6Zm>SsqA(4z@=Dni`!Dr ztOdF0FYToBgJS8~g!$br;qbFGqM0xKl@rWF-?KHhJT zEWPRlO%3`qc9G}h_Z{%Cjo2iY%8OoJxW;kjVO!>m&(346i>35-E|Gh`=s)GSVT?DT zoLu36*H)6OB4@YR106?)V=BF$(TY5@7}Qn{q?gIkV;ryeTx^Im;5R-;E$rHg?PhtY{~fmzIe&$GvqE$TKDz@#j?L5Pc*s*`i3Y zR(WG1&(*$NHsIv0JUU6*$;hGPb6fM=gPdl(ixI}%^i-BxNQZ8fQf-?jc9I)iy@-Cv zm$_)!tfh=otg?j4Q=wdnoy%tcL}{T}i9CEt&G;O@~d)IDcJ)TPgOd9HILER3@scyGvQ*YP2^!tGvC?9+JvROdgg1GdKID=bOs>MdW-+p4 zqaB7!41^PToE~AUsro9^frDeD`(is--wQ?44w36=Rg?XMW%202 z+VZLmm1sl`v2d&d`|ShpJ~$o|Lo(5i{T7!G#>rF@J36aYqc#0;zrJO_X<8L-XC0I2 zW9%@{KLCzL z+F|G6Kx`#1Hu3jN))lJYyf0d&40k|WVIXR6(!psn`6>P$3;8-4l|3pN217MW3wu>2 z!tKbP#zsr4*37C}NnUlD79Q_1uu7^}4~><)W=fpe&m3f9Jaiv2&^VaAoAkIfBj5U! zez(-Oyq_Jjm|el2*EddL>)W9#f8NF);_*X64Pqw7B+H2Kvoq zzV_lMQ6ICz^TGgJA5X4!Vg?p#D$)K|jO=@Dix=uZ42a`>sLDdUnN?8tix^gy|a)-zut)c z$K~)Z8+;xfi21+b;iJt&M{=4Dbz@{zb2}`UOrK_YJYBEMzb>XOYs z(toBcWKs~m7`2!~&uOn(^gjkfOU^-ixYi1ULufp1X)~bMTZJh@VkLp&+miG^6muLK zS&h#-`QoSd{yP`6LCg0+Q0H@;?460S$_fm77$udR?2wqX8hv=3kE%E>@p;U$i;-5P zb{M*YnYlgb{XCh0LUN;R_H#TGdj#-(i}a#*V?qYa>qTi^rO?w)|XyLdSf3r+M!)1 zdT*C#vA23A1|6=#zkkI^mmTDJvjX5#iyjYpa-XlM!t>s7;(g2>^)@jdoc!Qgjx(EC zN6dN@ClkHxVP6@5iq7Q0&(q6xs)~*-a;!#M^d3sT=O}WZ(=u`I0N>A!u`+VMEt>Lr zCV%2{u|E^-8df18EJpl8>@boX4yFt%LX(CD?x)2*pvM`P@v?S_o@ zwT$DvUM8EFM;huMS?6YIJYi@w+tuy#q)x7d2koys3q5BDe(i5?JiOG9-?)a`_gAHc z$U5H)^INwxSZr%-T&G)WsOa&*2&`6bmY*lqdXcdArjLEx)oM1U%GPEaVcc( z_r2ROa&xOr9F|HjGZ zJI7_!isN!XwBlD7FZDxX#rN%TS!$(~6LWMjC@oe>EO`drf*zh26&`+Yz)03Xn$1z- zUmtpKk~`w^6te9_^a8McbI(NukAGCm$WM?y0>v4auevzh!{dFBK|C5Caob&$thk5Tj zPk!gdnw&ZtfAjppbV?QuCuMOQ%EFmVbPe$Qz`t4!>b1y1tK0myD_Pja^Nr?4_I2)N zE$vDszAVq?zh`4*0lf*V>nnIZ9de%hVjMZgx~!3qeKgGE*;PCC?T*Vr!B>8sXXb%E z^#5?~YPGt(7;ZaB`h6u9!aQli$I zAg5G;^+Bwycc_%7zndVAxwmaTSI8y5axz|(QX{xRCM>8DllUrWvbtP`gwqqht3njt z%VgjmRrK~(NQoQI-RCH9{Vg-BPn1cO8SB1d6=VS_#W1;2+B4_c&a+(pY+Wfbu!!g~AqT6DY|^ntaLA6(DT?Rd@)6Kne-u{!JTTYQi@+#5BxS7|@V zAB(nlqwg0VuGjq#(TCpoS);K*5y4Dn4JvSIPU4zjI4F+{2 z@A#0lpRpP=U8cd1U94A?(78xnu?Ej#K65|#4?o|%kSqb~`{$J!EOjNX<*Pw&@{bi~ zc?J=rfs1tnj@m___W=6lcJOt!vF<)Bf?1&&d~C^l-S!b!(2-nKhg9V5NJZaXJkQ>h ziq~CJF)l6@o$^yK;XXO2*D3h2iTz?^AD6kN;YkHEOnytlgjMtlS*9Q{lV=?fny zJ%#7U`M|3@Y_iLT^}Bp{4PsWbZ2{{3l@ArqCD!+4?Wq_21|#TK;yH?4Rz7|omxn3j zr{;Ad#~4ShaY8^Xz;Sy=DGozdRh~estRm@>sj+ z{o&t3GV(BDGqc1R(c{S1vEqL6a;Qp1PP3NjgRR7kz07l`*orr~!s9*3GHz4KzIS}4 zKHACc6=Wbb*ocf*$*IXIajfqo4_;VG8u^IdPrArOCmVS<*j7U3wUhacY^7FDM|o(c zlG7jTrE6PDsZSqN+Av#bIk%nc$Y?K5W-6u6C|mXeI!OIQE1B9^DW~aa?6s^y0^TUl zcRrtsDHUS!vPv!`C=lDl1XD(t;#%t}c{aXEY%W*Go;u~S)`nS~-z#L}=t>FW=a;Ri z2E)xNX=70-m#0>U-l{^{^;2N8wnCoj%4H<~Z|4bBGM1mu{81uJ>3MwnSb;E4G9{%Z z@ZrDzeXUZC^Yeddcn-9Xyzf;X_!)gM>W4R0^87I5Fmv5LF?Yk3XNVWbAM&|rtY*IZ z3LiYE@J5=m7gq3WsL4?ublBhyL#Q`<)tI}HNx$L-AG9g)LB?SE8(*^)(2Lok8;;`%;mpF&z+=A#Te!Dx2n~)-p}XpqhI=bMR}m2idc~}1K3fVtqZV-* zdLdbpJ4ycHGiw3b2n^3+^`GXIUwSbaXn z$NJ`B&%u2Bm70$?ANgEo=3(x_JX|s4GIxuaa3Ag%cADE5x_7%~*tj^+psser(A4^s zYlz7xH{JC{$t`kECAaf$V%%P|J$b=<-%3+3T<>^I2R}WbC?%aKVG`U$4j4!S~+<$R?g3e7hgx6$Z?$*cPU{pMulpY zO3Zv`kIA!Dm_t6MU_KcOXBEaRwMR&aJsu3=+A&m#TVYBZPgY`*nF_tr`LzeRHay_K zQ!5ANmn&gg!TeLc&cfYFm?!Y_%b8F1Mv1Zs4sg^fvCKk+Bxfh=`BRCn?RZAVui5g! z9<|;pG3S*MiF-rQpXhv z%6~KRtdwifo5zB2k>_7N*XZru#P9n(6uXT&Y~^}wL}&7a;X3@>^cA67Vxehpc^M z9J{c#P)~=tdvw@M_Hf%V9cJ%gX6Zoouej)NErva!m)X1WMhlDA39!=Zm{+fZU6>v> zuhQRGhk4Vv+_z=u@wbg0kKgLpyTf(hb7qy;>9M#=0v7SC>%=)7(#euE=$3_kt>|UU z&%(@kWDwo5kb08q!@+dYG@+}JfB*MlHYWDUf*skL{O|N+)g~L%Iva15%!vM!N#`tC zlSJl9A0eBg=Q(f>x)~>AF?I*a2B7uoj2M!M88!Se&;(mAJ$%rnKj9o6V} zrss-h=80FyjIZ@WlSw|fPp&cdj4$*v=(2mDL5tdCyW2&w7c~M?CvmLfm~={;ik=JU zwXm=;t{$_4&FHrx6W5q$`eXJMpm~o1981f`&w0$p z^x$0VZX+I1f2C5s#Z*b=#!9hSUnR*~6v+KbADFEP_HFRP_XU2iIZW?& z3qMpw`6BBCGnUE7*piDodo}`{awCv&GZJ;Caot6hU|S2i8M9MiHa;CoI7T-wP9-m1 zfYtwU+~xc7?q?qAZZ4oFr~p4Fbd=AH*>mKml8OQs(OIjc#`#Wix`1x0am<*0R3`Sv zO%c`B1Y--UWKdtSC`Xu~Oa|k!${(2LhmtWqu;84vKaA_hDa=wXqBEG>LySb=X1`Pn zu1)@fbA%P=pB|p+7}AHoJH8hYPsn?&&c_EW9apCdaB3ZUOYU@*4?msd>0)PbYt~UB z>d?D&xT6fYX^Qim6gYCJQiRu5AI#+Dy)^Z*F9z!U@zT-{8s@6jEcHd9qaPX^qJQjO z1ap@o&^{*;i_b)0YwZYZ_{I6Eklt_GRJhelL!BR~m={HVaj!49bcbs{MFC9a79ib; z@6GW7`h2>`RPHy{=Q&HGab0Ba*iI69qlc`!!?jSF0|<7XNUEud%gb}H(9 zOv3=LbU3OCa6h2{zunKrfGcD{crO)h%g6I@tpxw0m$GV!Vis~r!ke9xh;H$+>ZuA( z|5c&yLr2s*paQI&@#PouolEG}^9{u}?v;CbhoVIpeY46?Jl??beDeeh?3xIxa*k6T zdVHVA++dC${R6WxBq|#nreq_nCK(L!aqY=|wWNPAaK1vlnQVyX8HKtt9aFp8CCISg z1nJ?Vl^Tv(@oJbPvs#kb``ZzdBIvj3>WC?>DxCl12*&{`EO-_Qmu{g@#?kXv6^d4u zLg9Wo6s!9rpnOUKj=g0*0r$bC921{4;A}EE8&N#Z|CEpo|3Nu)#b;v`d6g4WnT@$X zp=E9WP`VHo|D>t2!L?*8OBHG@na2BC`WYim%Hlthm}Gh5wpR7(Rqz8*2w|caW)?jE9otp0wkkTa)Wn0M0R7=29Nx-*CJPS3{Z+-!WSlf!4t zM4e8Kh`9-B#T$jXCtXrW-A&X3Iws2TQu38_Q$L!TB!M$d$@Ad}vizbF#($jPTi+Qa zd~a-5F;A5Kua50QaXKOt9!<#hI1$d!Q|4q)xkN5W}vMRy)-(`rslk6^VmVw)q z^5<+DNj7(qvRkEc<7bsjbXU;xZi;d{6IhN>z`c(j{?z&4+G&5(X+v)<$Llj3hhFm; zzj#K2%-a#nE8{x;WCW%(iNFm@KI>!nj0dIT@3CYVyK!u^PeRRPmo^x#)kNp57N{CeVt zoG@Sf+tm+26aVux`l0Vw^4^#D{pUrXJNFuWIFHq~j>Lkz2o!Ef!<~RM=1j1!@MbDJ zho)f{-N(Pp$isqg_76p~N8lmZZd0;p?gi-c+)=g$sAS0Dtm+Ry;Go zT2p%V8!9mSyaGw@$)1lgVXqm-F;BTA_mDHXSILzZ3Y==i@p-%{2AP@QV_waA{kB;`Igi z^pe*SSb)i;%nP4cfTRyD;uG0X`hV}tYjP2@EzXkFx|4W+F+o1}&Gwf}aDRje>|U85 zb1u2Yi@vxx#E))OALujKOL5y5Z@Cr<3}EeMas--^8Jw+VUU`Q|6zpLJ^@((Bx|fR0 zWKSb_?_?ZFgL}txJetXQ;w7EFKiFs4J0BYt6`-P70W$w)e`2zYtY!xHqI{KnrPk&5z^QV8D4rp?*4vYO!Jf2zDha)g&X#`pY zl82qZJdc&^UEuzAm}5HnbIs$JkcJMA$-_paq4Wat%75}b*;T+ELiU!F6=3^~0yN5OSbIBS*(@ha^>ae^autR)Tm$EaAk|IQbzagr0UPfAS9hg1eJI(qt~uBp&o%I)984UajrqQ;m-fiP zE-Afk}^}tPJ)0n0FHY!0XU+d-8@+2{HjhFT@iE{oH^X}Jjk5jE9 zy&@{CUE+xMZB^Lo6Ux142)1k1;FD)4yf=hmR@YE0dacLP1MH&NfoB}=)V=LFWQ z+4o5hd94-OnpznV>VzrZIiD|7!u_fvs%k4SYY_Kdbwe>QAe85wp{P;7zAle7_`!KB zkK^&Ug9#XPQI8}tmVG%!kJ&`8@9)`|wun7XoX2i{;d*~hHZF7CICfm2#zCI{b6j3A zPoXYvWTKvHZlX4I)5-Um@p7Vp(V@#c z&(1-4tsLC+q)&4K&(6s+jyX+VB**D{oa4_GkwpzjVy`V3)VKuk=+1tQe-p*iBT;M{ zI-)}!9n7b=k9F*s*|3S|X-e0_~w)AR#(__vFdI(s@uTb&# z#C_MmCcL)L9P}y4#`5``*VmH$?4FIWZMbjZyp>6Qu`S;d)ho`Y*A!~kFADWhC%s6| zL@9caDC-gvB|AG&rr4j73FS&0wsmC2gcC+jb0Wj#1p9i9*xNW1gNKBoAd+h^w@~ao z7>YNXSHFHuK8^BV)IJm$SHT2?hk__Ili^5;jC=YQdT}JmctW0ko_KW-%pe~$xK1v*4z`f#ZOWK8?T(^x;W%8Fg6`xc*UUDPC0|RVfPKOD zF42!xYDAAf=E+8xOYd1FqU=DwnA2Cr7)Gn+Z!wjSs-BMc*U7_r>*GjnAvnFn1gD&~M!F9^fEz4X?-r|-w@fA)J&?RS94V~N-7{qmeQpbBPj2y8ju-ab z2}8wFdMXFx(obP7`%jSvWUg`Z9%0xq#ei!`^g<48Bj*~@Ygx^U=WpTI#rJvVe0uR} z(3?5BNLH46B9Z3;F>_hp8^xU8ITq5oCcTy`=_?$mL9Ha_dXuLc5N0Mt_e-Ql8*-gC z;W(X0|Jn`qBj@p4C!$2EC3~=^H4N>9dEW_nNbS{DW|)*o12yw-FNa|+>-CMl=c083 z3z@f?*$M2!@cP6&ZU^#H+qrMOO`l_WrCh&5e_vG?e21ivRby}S5i^kkr7|l6kJ-H3)>dv^4s6vW%OxJ_@#$2dyGCrKXO~O z&7{xupE933@0-`;;K*}r$j(I@V+(mbw^*!n>}iap*Rnwh;?2l2wrMLa=ZeLNu8MYi zUOw((?e%Id&T6fB=2a=1$V>jm1!sIU(gnlci=O$vU5jNs^V8jaqZ5MMq7-~W*}mqo zF}F;{KIeUVJ{;GM8reUX3)74?GR>)6svjmVHi6vkp%i?I;d7)h7cbsd&B8r#lsw?J zKI8${F{hjU%KeAwIVG<*b9ERBd7rCV<>E$7=6X*e-$xH%@&M)(ml(0zoX@+ok!D-V zq*FU@Its&Zva1ogv3a-I&-CS_V5P5j;D(#hS6XnLKJ*A$2x-!m?R73Zuzs zhULP#cS~7Pi@EL0Uw+8@ZTSxaPMGJR%a5k=y;qqu4D!I~1aicmjo3z?MPX7)`Fm=) zOrr1d)JFOfn;S8#VIGohn9H&EWm2P^2fS=FxWk{T)5lzdwdMWUw@f1AJn^fTo?HX# z^P}^zs<6GdA1IU$Px)N9XwcKdh+E#wufNz%+BPVZvss>Sc|u?3^c0*-BcIr*y;#gC zmOPCY>OKua(R^-H|TS%>NP`|?VG=kN4&uCS7$8ai5RJTU7}IQEUE zCwCS3;t(t8$sF@L9oV=96;rL&q zy>(Pu*&DVUsQc8YQ7@W6sSC7yZd&Sw*WKL>3zcc7-ePsZ3Q2&vCqUf|lDZq#c4}CG zeE0mm^}c_6|9-R9tSK~vGbiVqz4x=P=elJl_ZGgBFQ(TlVW=I79|ps=3%Mk6F1t3D z;rRGi*}K{nC+TI&p)c>_MSA@fl7F#{m#%U4_{bdI;+^Du$lpD1H>1+9I9Wu_CG$Wa za{Us~u{Z-ymz3d?DMkk8*de}C5M)Ur*7l)q%TR`-zA@5nu`M%a$a9f5EVIbOf>82G z%i<)gqCG6n1Yy{YL`M$+;BoO~h&LnIHX82HcI2wK4Ya4GSUr znEg*quJOw&X6u&1f=?IkqS4akL@(_30yPH!~COlgeQE zb-#qf+wrx5s2Z7we$z6c@G8TBRnZb+wnu2kK)Cub2lf*AubK+?$K=TJob0f2XfS*d z$O#(B6_O|VMZaFf3#5vd2(`zQH>)sgJ-vtI$o?)dGgmHJ zrjD`4w)6DXDH1U_I1_~j%@{QLuuPyAvW|5iJa|4ol2;nwU5eP~I7uC9k4FJP=*aUK z?3Ic8f6+I0Cq|qX+2eT^a)RaPdFn~-j66{dQ>;XHae$L=09sDbz>S>4w6{TLIm{zoS6J~HExAzB`; zu*JpfAe?6{e==*{M@(k4UVBJB8ggj*K@HjJ_3`e9% z8wbof9srBUe4m{e@HuDZ^DtJNn73QLbQQ+$(vZL6^?#528oAx!wde;-qqni42K}C9 z!tEV%jn5yJIhAZt`Yniki;2h}Kb!p0jK4mT>ntXRyEcS-dE{Q5=pZ1+y5L7N$7DOa ztU&)Jk8^JpxlV60UR{otUZ?0)tjEuV*TeE&?S#kkl&7%!0j)$;nhS%#X!W5x0;c{i&d zytN?*L*CP8hZzZO(P9~557(N3coUk4ts673I+ota({b{L{OKI>n+{i*i#m*X$0=qk z4Nj23o9u9VLJ)8!5$V;K^V^^dQ~2Cio#TMcVFB#zPsGpB8R+9$2Gv`BUgQ}kw^@a@ z;}Y>DjlRM+%qt%dE7R!pTf_ga0k!ELG|~gBs zI#${rbAT=Vq2~h-JT666%gL_ad zekR~pbOuKDGs7d`u#9Wrh}OK1KE)@{UHu4$x|=cM%wgHwn%7SZpEKRa&AHRdx!H^* zk7A{U!WJza1><)!=7F^)pUC&Ael1q!lY8}j8-Vy)NZy`+rlT_Ojk(*0 zuf#~zQafBY$MfmR`~6o2fWvhgZi*cRq(_cm!k5 z2Mu=f^Bq)$JfOr0X4+$W+h9cAN}%hJykQ;s9G&9i;#7M+7Xz`eNg|r|&%}_`sx=RTzsc-)_b3CrC;W; zU4Pl~dXMG_Lkx|tPSiJA_3Gm7k|_PI^f-N5q=VsQtkQ5f@4Y^ER~y6MxAQNqjyb4r zy{?BrQ8>y_$!)T0rq>Sr(0L(l?-!KQuR7I9Khuz}pV{2`VvUir^`rYIx>cF9PH$VU zwf;EkB8OWgG7mIKCQQ-Ez292N4M~vbjz^@;eb#g6Xgu~!E8~Z;AKk2#hX;?4P0`6G z9kT4^4oR|@jIIP}7qnhUnLIwSC?+C;$E@}qgWT}TEh|Twkc6#106f8-PcK0 zV;O7Z#aEdDQC*ED&D40Cug2IFA*}0$u=k0co>T0r>`pHL>qtg#?m_>}zWm2(IKN_V zD)*#QKB+N{H34H4H54D1J=l~^oiXGcr-agxqef0mHLC4q|LQF@R(g<+e5l4Vr%+fd zW36Qj-(#Q}jV5X_BvFgp`5H9Q|L5M}7;>9V#d>sBaGz)5GP+{N=s3S5=eSCX!fP62 z{iZLv0l)sC!7kQB*06q6(o%~tuH5fFNya&pd)U?JF*vD(;tuOv949-o-u0aO5ZNP` zV_la_B>xT6@%Q%DK&|8b_KEM?UW+XD(02H2glVY}wd>P8O`iP9Nh40%nxNXpI#dB2 zIjn6cV!2;EnjGUF^7!0e{?eR#*=yj}B3QU#{pP~btYVrk-B zDvS1;Wh;C8nzS$dUv}-YjU_UP`9JONDlpAcfsy>aTYv%%LG&{2uz)JnET2A>%E$K# ze7{CM($WG?EK6l@7T=c+xy;SXFk)@`XiYkF6c&i|RbX9n<^=_FZ{F1p-i!Ruw$vMy ztNY=_A|K=*WiGDK4?|CSqgJjDru{?j8=0%Om$>iooO_*IyS)0ytlKJn?D_P=>QWzU zYfjh07GFee_Q$_`pYd1y;MHd&8tDAcZHGVVlY3nF$Oq$k`eC%Y55~+G0jsXeaysLS z`074L-NZa6asWLlL}2r=2s~dDfqBCGfWino4Pw@9p9s8Uy`TkaQN`RBA2}xyKXb$J zBP$#uS4UvAdnB&%b#)u_@44@KJ(+w}qez$rkSpM8$B?ZuvbKF^757BwPa648Bv!jJ zuX-zea=*!KJzy4ZN4ghmBT(`$vx+9BVNF3QGOg2auRb$v3(`>AJ{{PS2D?sasNjPKk6+SY?2-n@_v``N z!9D47WFZ5{V0B~G!n0Hayi7yAKFrz8PD73MbUAKH1$L#;mz@Sv{anCsvg2C`tXDja; zhpp7~ZYFmYDrJVEg#;#$vzTuu@4C3iUC&msts}joRTQXN!hQQ0%nuu87T2K)Je#M$ z*ipPs>RZBGM}gI^%H*z1nG8uX%aSn)^xvewxe5xDRW-}Na%HmVCij$*707es`)vFp z#fDOu=0R?e_gwL5=2V|zwzP!>2IVQRbg5Zl+9;5tHjDm*1srQBkZ(~cH>#QC=O@-b z$R3)wPnYo94~Mt=VI=R9CqsPk;jAxCzGPi&sW+ODJ*nmG`#TZ5mIE_qVRUaIG zPY&cXxtSPW+;C!+dw*Z7jP*f-W_}nG#|-x_{s^c&0$&QrM1J(cQnep0{2=pK$sc|N zeo(gbqbJRmpSeHUwerRL>QQhda~QrS0y#?}aFEyexu+3mefqz9hWE(s2wWj2Tu%{+ zT8U&7?~ont%lyj>=1M?30_a%;yq?pH%P-3 z=Tz)ZNu$Fm4U<2R8{&QUAtMbnFQ$<<;-1=%R4gG2@__eT%ok?Hze+{(>Et9`n7ew9 zj#5=FbiAkLAIZfP?;PgN(Zv8n5;zt4K~Kb!9Gc{ODY5PiIO( z4$7tEpdGp5A8*^*;J~o%Z$El%3h5ea}Vupvpt^Cw^{s>*L>Ef3C_aH=VQF z#e)MI8q$ZnbDI%TC4z(kJ{Xy0Gfjsf+R7yBTUdJlB1Su2g@zK`Z@* zsJa(x|uGs z`5YOIwdFK&C6q2kzIJsJoh)dZD92AHN=;+344RW5wr7&$c4C~28l@2}Gp8?HrhC!j zh`4Z``HdM^-v=g$=2?QA8%dvqU6Q!ybmIJ0Cnfxyw>vtbM-_5~tifFNcHlZu2^mdx zk!$efmz8L5PuE461B@d$XRN1W|D+?1PIbcYt&Yg=VTV`M9r1ahBa$mC5qQ%P9y&*6 z=JD%1N4T*6WfotTbb>jSLse+O-kKj}O4tnM*PK6IZb%Bx^*x#~5 zi=pQ<7*LW3mj@b@+|^=cWi7LuHAow+MGohJU8ivG^}7ZYE@{zg8Z+2B>Yy#t;P6fj z^zK>&?Bo7ll9v4wbWELQHd}oy>IZ9Zsu^=NBl$CJO&GGlgbXjv-QF7EP-4VdfBF=c zaNW&)xJqOdOa7sA+m~F@4il>98*!^KSr^t(3@-G2%wc}?6eH3uw;8-@ewgP^KEOBZf-3#O%h7Ba2*4h%CZuw&uT}k(su@_^x zAI8Nni*hVoSEdM9?}&imJDs;4?3b7s3EQrbNKT+rb}_kYKC9lG=QGQV8ODL>m}^f? z?=*V|t}@$x5jnzVy#GJtV*Fr7I!c@*Ylp2YEq0K)+nAME%~_(`TA=kd3zV!P7iVjU zcM)_CJ}ZYw-O1|B^rgeyAJdkRnGf>EdB+jhG?l;KHWE$8(yiA%5>IWT@Sbz28#`h6e=1tasOhGs~86PqRzh~3=_m;WJ7U@{}B^N%Oa&U`$<@~mEIW6P- zryv(C#<|F-qhwEGoFp&1gJjxvl1V+CndxSU#(||W=QsVzF60`GW^wya4!KACFyfvM zc6s|DgY(t9x$MFDn$JU(A2)i_A15g4d0HD_q>^gc8$q|EFlMbnENC= zmXT!~E3eXXRmgnPOU&k+lOo|{+Ditrrr@fTPAih-zntJ92b>T_=4)^#W_CVOqOMAb zI-}Jvlfh`SR*mnKLQ#8SD6BPV42#fWMJ*lHFVN!hEFIR=)S*^o9q#1O`5HjJ;Dr%0 z$fK=4!hQX_%n(jdxPJ>*xa;X3>_aZ326?%ToXyfoH%&6@ z7b-k_>`2Fe5>uL}uzfS@1s}*h)aBa!lp2HL$(55)i8`Rhtz7#5)@bPpNR_hXEzk?i>y;* zfEDv7|4JY)tdaf=Q^auz$G(3ZvGO~|n0n-8PAf5@K!sZEoLCYm=Q{$^G%#>{Ngl0(<0LHx@pIEJ(PGyC@*fo+ zW4_XaiG|E!xI=d4AlLbed2YzdOjxRLzhG_Q-gT9QdzVcL_bbN}$aHJv(dZN@?Uf|| z9z7~klt(4jTZ!mMCF|qN@aX6acsC6dpSyU^7X1#-f|A1j#uH9S%sn{O59kW!WVze9h4lCHwB~o zEj40av-e;d86KXWBjk0?r_)=h*21$;i}k#YcJS*7tsmnkxuyVmwk&R#(2xAgq(kJK zZqm^fpl~lB57PBIxf${*Co5RESG=K=%d^`{xd5efDppF{3T@=XPX`&SvqVTMORlrc zGA>DhJuelw%jfjr^}gt>;Qc<2TsPMyZ+`kCl+Wkz3-s${b3L5PwRNK?JlY?D`@G)+ zL+G!&mX1X)(lBrb`;DyA5&t6{3*Y79_PIPPo|uOyt`VRAlZzwTJe;$1l&xVZSu@s2 zM)hkgo|8Ju3%#>ghyrIV%K=9%;5CFE#JL<>c}(Av{ZOGi-SsU;Ai1eOet%4GN zpTbdr>x{nkkvM*znF%$b=%=M~Z!Q_MLus&%Psd_DtF7Cl?*FSS;rYewsTyWY%R4wyMFZfH!Oz<97B3l zr7tqij~ps9r@4-LINcvlesMk3m$}zXqR=Fo>l#b0aS9`m$FVh`=_Tyu81ZglI?BqW z=i>bFJlr3Zi!M|0(EKv_!7{G%r`wCg zIY)VVuDuv$x=7<~9b`*=XX#vAD%1N|AXY{0GtLqlZd>AHEZ5K6k2hZML+xFDST}@T zL@oRA-uc0X^_r3|5!hWV5*1j>apt%>#gpqqj$Kx3(=oYYI@}%U`V38HLlt{Fo9AKJ zX!<<)xizATdGBKO3*5@XntBe>+t^;xySA4d&K+cauXbW8>nQhPEzqw^IeNa#Qgx0c zb{(_C%_0l*sKL*QYu{Nj{P5Dn54*?vVS6Ea1rA4|71ylmGFa5MsQS1|n#F<6u zcoUP3;~{C-Gc6s<+H$VJYwG19o)LJIW^V|Ba@#({+;vm(H?wWuTwMkk2TeN zvS?)SS0C5Gw+ZiiUoA4%nb=?W7#k*=;QEq#i6_{*Gv0)q298^GE!=mhEZpBPUtWsM zn6}u$-TA3jel1UuAsk1iStrTo@5wUtXOhf+r$Y7xCAObbB6m6cjEkJ$xK7DDpHMu# z5rP~YS^NO@&+~abp3lc)7q#dXNY63HjV>WN%$`l2`Wt)T?-=oUjtN()nXvH(>$$_p z5Ay3VtI1ZLQ@HmhtGAV2y~rKp^XWf+#{HMa4YZ=E#pBXw#jR(OESZ!dtG_$qZJ-io zE4Rh6I2GAmC#;yn@sxG&({0qKd`u0?Cu%5LgyQ@qHTJe8Q#q02Y3(G`nxn;rC@n%m znL!<7!org#6z?&i{V?{gCmNA>pMCD+^Gwz zZbzVx679&rKHQ{2aw8R%_^MESM+mN_ao=NXDBhIPUrAoq$}$x9-)XUrWBj^}TnqNo zVtO+j+!tvvD&jHsVwn$ql%JI&-NMJ%gZ6>7e;;})ds(>u;e4ZL68jeJDcpCgu=u}z z#`&uo%A{$3cZbnVss1PyXRJQD}gQ+}VdK4JCYD zf$Z(#1&`%nIN6_my=vqKCpD7o(SKynXm4~Z4I}%Rim3_Y96jpFwuVLGJ;)QHVm>dq zHdp&>WL2y$6}1I2euNk1k|$byo*dSPY+PcmcU;pyQt7rg=H3fKMN8(r*3QQ5Z}nx$ zi+nM3^F&4${@z~f2Tsez*^~xS$edYKh$me+JF#Lib6Ux1Zf#UYlw%7-G0qb)Kgdh+ z_#4j8#(;N?WZuC-u{gxs>d9f)&f}@@CJWP?>r3lP1yXQ&I9$tzb4^N4%|9F2#f`=9 zYrcGCUh}b!;pjWkz?5yqE*q9V_*6sL%e?P|)}EMOi}lF<%nk3EgH=ncq;7n%M7?E=m3-Ny zs8n(RIoQFR;w6!P#NR|uU*B;2wob*yjX6kP)kr?l8~D)L2SxqEuyY-Ke>ThkpVdlK zx>C8?kQr6vn|e1&MU^($P`+#|8xI!9UuV3KS3*9~U_jL0S(tOFfy^f-c)1sIlOvg< zy}$sQn_1ZV!%8BG@?~g8Z?xh0{I$b?){nDr&7+ZYK2{{T{@#f8A=mlAfXd_(N7ij4 zo#RVI*V_x%FYtKgvd_988`G@Xh~t$asn7i43YEiA%ZfbU66P<>pcijgiNpjCN9Xu( zEVM|azdjpvuGW&0cEvJ;dnzlK8=l^XzRR2}WGLE5rH8*{5zj+~Tj8v?7?6~mjd1RU z9uF^+q;PNi;}(WnuJkJM_)BIrm77`la(uTZtP>-K{wb+m=9|3`Fh2|teN$0H{&Zrw zx)QmvK$`UBeXXS5&?6OJmE>M8)|NfP^X2>iZ{+j}M{~0QI)4AjH2M~Y|B}J4J#p%D z7<@h(aNHvs|MqMkhsV(q>Pb#El-HXo6&dZakwvLkgkx^D=F*B9o1PbIHzMqZcc}?Y%;~yFG-V*`M!|<#w{hr6NVV+!Dreqe&&80rr z5*3c(r3OT_&VtLk`f~YEf!ML{vUX4I2^Q($!28bSNzCd=B_reLDpF_P2I5a*R zW1Ordv-}@9GtGzjN#R&pV8EN=Y#e@QBgP+PQuQ zNv@JS_`_8A?axM!6;@L7^=~nE^gUl3pZ6r-ukrNUEi1$P*3lBz)&WI5f>30g$ee-E+@<(@u z(;qkJu-x5khr0uUaB5m2j%qSk!zqK?%xL*F*A_O*gHW$l0=l(fKF(M2J5}Q44!wBo z5&{v~AOY{cXJGsIGPvA5B#+zLVV*h&iXqGeCKpz+kNLdxl$9~pI3b34!JhOpE@m(I zrZPO(wO=}ur^})T?L@6a){8UgQZl30@@Vnw$Nc3rL2xDyHGtgKKc`F4z$sqrHrZnK zmHi&xo!_{{S;WlAPmTbPmAh#tc_wy0&ILu#xBcVA@SI{C_xD-X)G&UVO) z3&Jt-P`yTyUvo6$?b=wmk!OpByw)nudoZVGP|B zJU=OXeVw2T+?!{H`JcnmhU@Co{j<;L8hgdE`B#Z;`jXT85VcW8@RPhp)Z`Aael!zsiwSX>UgM;sa7R!~tcF zfrwM`ym=bo>{^B;nge1>f8yk0!Dx3h5$`Oy_wl(5KbS*pqOY)ue;{tPVa?B!ff3{! z+j9-({SvQT(z4r&?PEA|gLfvMzV&vlCx2P@_^PYK4H zd5L&=H3LU@{S@7c7Vo;`J-IfW+?$@kn;95$y$l{Z;>6m<9yjToT*mX0xskji`McX^ zqh&as8^b0B(w?j#3bV)h8WGaQjJdnx zBxtN14)o@AHHO|&zYMHzYsS>{Xla^ahoF5SSUWTk>qcgxOF$VO-ij8{*`xUhX4sIY zsvnqvCw^tHR>nw`2LCVrZq4)H6+*x2cRq*5#z=#Q_E>u}5H-Ct$X-VuZdY=ttKwzX zO$SU|AB0yY60zxW1}@n%-)CW*++R*_%Yy(kcG95H(Mk{g3tOtKInsuJ20!w;$%BP$=T}UTJZ(jtKwwzkmL}U;lr< z|KHF2=LYdf7<}RJh7A4C28nu?fM@!u%^SF`UeZ7xdGxnFEp&MrZ*~QJncJy$_a5enB^142+U5ftpkgFG4e;#l# z$+3-FSu;Dg&8D!6A7-`FpV;}kN9yo1J#Ob;yEsQ>cd>`NjsEcFCHfmD*6Kf8@YO%P zfB9nVR~l*Fjqb!n8oACrWz`>zRAbgg--jZ`t>_KT&#I&`KyX6#n|5 zk)QsFVz6VsdM=$icN63(^PHLtraxyJ_b&P}Ln%im6{8cRULBom|E!atAGK1rOhYFM z*U}Ej@@89{Y-HYGyMgSXyv23CE!Lma8zDHTuM5N-Sq@zh?_2_CK|Q(-8-FZB$~9H?yZ|(BIhGk#1cj)E1#AdeXdsAjI08UZ)CAI&=U zoNjb0@@FHs|9!P$_o^|=TCo~)e$(-DCIkanlRw^q z8A@--LE5O%pf|IVxIfTvjRuL$wVY#f&mfZf&K+2zchkb3?DJpi=*?mMKJ+)Ur?}^w zpU6KS&|q~k^D~^ZDEP_zr{`Lv?&7`!T{?^3()s8|HnFZ2+f8H^`|9xiTO!6S=4&jq zn6q1h<=$F!jHBb=o(B2c*G`CM_62`F-eiRTaU<$=V!h{!5jDmeG1c=iirtO49B)J+ z>vcJ`+2_mWa?S=LwCuAzmcgD2*6d$QVf~{5dz6cf2x1*=2VZ}oG!svQjj%WH>xcCD zOy&M`O?ofFS>tywq3Lnf_?yzllf@d~HzTs!nK1vf34NC_0xSMD%iO^V)bCg<2W`vb zf!YFnR0>S)XO_(`6u9hffm@wf<{--{zxm~dtKw&x~(5pobW;Y{(jhchTg`l^g|BxB`e{J zZcCY|`-;3&7&E7jFrW5V6mHy)z%w1!`!10PxJRerzu_pyn)E{Mv$V*Gz>5g-R^+M1 zkss)Pii}m=DEO2ozqlY0lm3asqAkpouEqUW{@wi-5$L)(0&^QO-_VV2IX~uACq*Ee z`^B~fW(-#1*O3uez`9to8j2h9s1uErLhMq4UfrPE#}_ywwnC@`!pQ9%l@&^tbO%P!-A1% zSZ7W{gVAZo=u1v=3*Xm7zJMI$HnNUOwx%P1zi-4q*8Q7sKVnHbx(?38qyxFASwENg z>U74<$VCY2bQ_~`(RDAgr!#Z$;Rk(iabzRf=AzbD=1DckMN9VNE-21HR=+&#&ZAq1 z%;VTS^fCJ80x@|QSIX?$TDfREA`gR8n4xP&&ha~cS3EN(9P*H~joA%8%r)$g$MeqI z-SfF9&d!Bv7p2^Ebdc=lEoGG2Q9gS)%GtWD<@!rUY59*zdNgp5WG{Q^H_=|k|7$B# zD>#W?D`zFa95_v%uSS(~;B+=;iu_KBrZeqWg+ zy)Tn%+x+oQtRFtuli|%|E|-lzCLZ@CALWY*9zJ+;gr1bMe%R#8%=UG@$T~=0<0L;6 z@g8c%`=x4aAFMpZER;ijXwlgh5vhK>2mF`|;g2<7p663vRC1y>^{p>64|pH-^+6Y% zKl5bych#6Zy2l3}+WW)G&ktq1KevQMqO=Y3Bgq^F^e1P-n!yVl8RDw+SX3t4Q7IBF z^TJ`%i4LZB5%^g}?@n;>^G|4t+#W^vD~1@p~1&>yuh0%o!fhko(CdcA6=6@nkJtzX&2jQ5&pQ&K9R;m@U^TN7rw2c;sqe;TI#NX6lw^gd2bC##T-4fp6z(J&XD_ng@- z9i_)oVNPaGDetisM{{v3qFgW4anO+`Hp@ zC9mQ=7o3Y(3vzMkI{7Bva|x^RFuUi?i`80p(I2Wt48}EGU#C}?zVhrkh7Z%1UT9w| zJ@#f*GF+`TuE&*uUT$lKbTq846n(K{(UKl*QY#v2sM_d172k9_KBv?zvD#hz%2hk{ zTd&`|FsC58hi}gI9*^@P^n-Wr(|5SH|6*motcxx;OWdYTd*b%COsW6U@7jflE$bQ@ zc~moWm!WRWn{U=HZ=*Eas+uCYjq$R=I#E7lB+Ay=NpfROl9V?j%E_5pIrp93#q7S{Uzlzu!vn5$R_18%1NS!>Ws1tW)ZcYkI zkaQod)NQPhG1chk-mZ}YNeObtm-!FOrgoe_M$)8_c=pR|7^jiA2i%(?UlBT7g)(2I8%x4Ax^O3_mfQy99tcc`I`(R=afrR z9WgLdiGTl6qCqmf-Xm0a|CCv6-=f8?W&}U-^E^tmbo=%b>E}?klqQ=O(tXXir*Y6}f zQqJTZZiZm!cQsUgYWNJK3u6znr^D3f>q}1YF8}*26w`Wg&iI)eBVFD02Sedef%Czx zOoi57p6L#(1DZ!(>pFYa%eIJc|Bz0QO;TJ~bo<(5{ zLVCRC`n9$eO>{c!K1*MSk^cQ>iI`u=_1^^zCUDMp@wyhLJhe!_ZA3BmN9zO_aksY# z6W-CMm`w(edvSfw8u9uF-Q07H%p{<9n``}`d?O0#8gb8-Zbj~6Rv5)SRpzSQ-e$xb zGLU1Nk@q-igxQ6Ack_%`xP5p;kU(P#IIF}4G z;WWSgKYm8{*7PL3c9HsvouwIhhcVmROHcN|#ND!hnbg~XL{oq>UhZ}Fm>G8Q<#`(`b3nGv} zUd4YVdA(R>h2A9>H#Qvy$T{G7Iz3y=q$FQ3HkR{?{mfBrz#K^DFF2FVylMKaaI3W> zcC?cWR|m1QR7&+DO6kmVF|%GdbXaH!H%&Q=sHH$pIwSqg^LKN8XFu7W`{DjLm*b1Q zP5fZ}jBI=k^S2G*XvHz6wqqp5{fWd9KD!Inr^99(`#N5yq3(%GIP-$M0p~Tgc6sQO zl#4G7zu>$DeOLW*(YLcomRWX`bNco&(z>(!ZqQD;RPP{T_R`&S#uC>TlR3StfO}jy z1o1P>twTrT79Nk8{WcBB`_oT0vYRia4~c@q=_sVmqI;0@#)(Drf>$SVsZGWC8R@8z zNIyUV8H}#!h^$S_?oZ&^LW&M;jUMjzuwT-yvY)nM+exD5op=aA4B*0VMh*~WDR`rZ5ugDj;DJoMWJam z@`InrdKQp9-4KZb>GYu$@-zF9MmIn6UWcb6#qtt1JCm0WCvQrZR9?R?sGg9E-%Gz> z$8Z-}-?_cqOJ^pyvz^?o(?N`XJ2P9vl6eM}SU$;;S@LG-!hVmv{VieIIs)+r$%BBs zN}S)%cK_@?dlkSx!;7H}z7u59&nM-W`SeH0CKE*p?u(=oNlgQ7fOb z5+#!3RWEw3;wz{yV6qb~vo^5HN`;gqtPkWnVo4!6#&K%29M3)dL*(OTsu4IM6odGD zTuh5Hn; zjlnxvbBbj@u0BO(wMvrX*7P^MV=re?vaJ4*B6rE9?8{f7z?E#}da@xul(0-tp~tmQ z1XNqi-exsw^-?3-i5|kfJe~ns_=RZ^ypJB1&(eff$l=);F$T<}7yeuL|=$}j9-@Rl>8qUm6W^L4TN|wV5lO$o*QAy~c!oufH zz#1pa?L*FiUq}8@VR5n=?W=^MOQTTkgR;gkS&cM~YvVaa+z8fU>mLoyd}YQe8H@@? zS)fA%yEAUOz|KKfvSJ zJU|D#D>_W>qr=B(bfxVlPqdVLW8cT{wlksZ0~z@fk2&T)M&k0v$oubH)U$A(N*3hZ zS>~F?lOsG##__98{<(Hsnv>i4;jEK{{3O{KeUx4!6+Ro-2kWQAiO-ya3{oM;h3BVJ zD6Uo}2TKNapHYpC9K)-8QDXx?r-*g*Gv<;{xvF7ZihQhv4l8**dy5f|>zVMI+^64r zo~H>$_TMnSv`pdN;+MkxQxyyMtGg`RT~?D3ncyT%3!4eU)}_+;4iY@Mvjp(Zm&PdY z*=UJI6%^?3tW-uHDV4Dv7RY-t0w=Gs*KoN%x;OS`pAy}!<-v_IMvY) zK{I@Ct0H-7-zc==aqL`ArZJyAQ%mR|w2DG#ch2?uUBasfK6i$(@2O8ZOgrgnyv6nI zw;c37L3dFQ$JG_&<@D^~JEr8^l3wB7oh0>uQofJq$c#@H=}V@2{W1#->&!8Ax+PX^ zwtzmx0*74uaqJU&%A%Ob&9T1!NFLMX|HgdsajzobcR2#~C&Teq>quyH`3 zz1@j))uyDQ!tQjmT9JlXGuaPyJ{P{H^Du(z24}9_$Gy+PfjRAD`J>LVqI`RCWgV(! zlMYhphLe0Nv_Qnja`-TqPUvcUR=Zf@%u);7IOm7nb^Q>W?~8X&*b5rxi-{}zvFhJQ z^!-EMJ;(R&!z1BoABk#Nk>muJ!~HfD?{w)n6L$%RGwIiKWB#-Ue|J~*EZC5*teb}~ zTj-kqn1}DDT;zhUgM8ZHA`$28<=^{ubP=_c=-!s78exflmX?W*Ec~{oJXcqlLA}@) zJumZ|Oz^{e_Nnff$2II7e<(TMaA+Qd@|ICJaUlu^J~HcqYr};{(x4{;>z$pBa{PC| z>vVi&KKR9NdAMCE4>P;vL3JY!A2_BSXp)DcUtHzq)vnS;<08Z8%)ZvQGkYJM+lO;+ASu)$o5+j30U|RuFQKIuXC)gy@gGdg|rJfRlwyW6t9SR#h4+kZL;)|Xh zyNl%Y`26{LNrTGQIA+zqb2BuyBue zv~V94p>Y41NskSmg)=#pNqUM@+Mc)M`XaV6tSqRlj-M`c>h%e+g3`{2YUlj zxi)&G#Pss3ak5m6!)?hjZe_1P5_{vftMNDI{#I+~U2mhqRX5gm?X|4oks-Wd#FVin zJgfH@Kc~{|TjL46j&uz3S=gQXBposo?iN$Y;X7HluXVO?-|{O-#@y1#PWPi?`6*dW zFVadzL!De_esS{@XZ+?f@Zn-54qjGbt%ag9=*>z&2_^=fg9pTR!* zv0A(vuEp$R_SoyRII@g2=XNHv8E3+-2JA;75-rt;5>;T8v+>!$xZzre7t`$nky>*Dbn0BaU1D=Za_FMD53T z_TEVEmBPJcbNU7wS-8huRk+_G1K*^Zg}dfOqQu-wktKiVVV;*LzdP#0snsz_AL4|0 zwN=O)r^3WLTtn7%M$UC5a(<|hurw6y--lq5Qz&Z^YRnz|-+E7ndQ(}a=Q*l%TML)@ z{OpG7aK=d1bJSzh=X&UY?-P{DW1O$Waf8P(*3-hh&vH6F*{{%z=P7QE!aZy0F>&xu zk<;apWdPmF$L6y~@LRI@XjK^ZTZMN+x!xVCL~)W66gO0uo2F*}SSVcUgrdgnP>idl z#-tdIu>tH~`^hyQ+1xezxDP=`WA`8}`p1~?Ws(V-uCYJO?lEexcE5YbW4Qiz{nWN_ zKS{>&1dnGmujer4h5w&**uN>w<*!2pVn1g%>zVYRsZ(*g7P+nI)^e*6xg-~IRUgBk z%cQ4F$=+-4`qHn?PpK9@4DAPm zd?T4Twpa=p3`hFRaEu>mz|Ak&khM)EyB>Xu#q8y8!9KV(sVEF#9<&8>u|E}xCfyq~ zJekMZj`<_+v(fFol?-L>^Y40IsB<$6eFDh4k&E2%t(8Q5FOp-EhGXB>Fr?KZcbS)s zO@B9%6NW-5EE&{0ue66zF6;A*~qdvaS-QpsIs!+AhcQ4KDZkG3LDx9pyvAQ*r_dW8Z>yF{f5ZH;pV+J(pNk3-gCi0=QNZj9& zr)$T3huQ`#=I7FJWPKTOyF^Ztdwtm?9G|`#kn<%AwZ>UXOXeEe4Ddw?`OWb!4RGLj zuIy+pwcF>*+bB=;aSlUulK~msv$67IBk^Fq?a6YU=szS369=Xtyh;uQ#&6jX zOE2E)aEv9lHDFjauJ36fxKt=V?Yz*F*I{FRj+1yi>z7%}(>mn5%*-QZj`K@va%Y># zk#%S!!SsYy>gWSK_e#p`(_?o`7Ai2W*=}=@Pu^6fC@2c;stCHdBE4P{G4p|r>z zj(~nU(YSmnt{HRCrL2yOr_Z!isTU?6*@>G!=;d6`T;MM)rCDaaT=Aec^AWv`7Y*>g zn+^XhO{MTcf!z7m3l4GNa6V^XO*$KEbDPLpk9@h^$_KB1@;vI(zHVqLt+o}5U5qEH@i@;1rlNf><`kc6EKQsWrTtAW)MXuIN^@rM z(900psG&6ZQ!J68p0Hs3`1YbySj5w_nb%M{IhILsS08-i^*ri3pAQenOXf6|dyjsL zRdf1DJ;E_S=#Jo=%)!@Mg4X?!ZN0qU{grv>O7g|mvXR@xUV2y;$i1@R^jU}DuuUp% zYP0BbZY(XY7s=UnURbK-=e0?Xi7&ITfjPy&UH-_HRi0?_kk@mn0j1yuN(c02eT15sg^Wz zD3*X*p7=3<-hyogWX;Y(Zo4|tdRl>eF7igylW-g)|9jIt8`>|{GGNXhdA`dV19|^8 zqu26q3v!e_n~1mSk1U)%9K*B2V0>?Y_t9+ZbZsbw?+e5+dKl`A3WHTdDmwS0XLCg} znYyb`O7_#+=*|6t3e4$#n~h(c8cS-OBI&f4|6gTc7+O0O{#Ja>RI4YJ)`gPt$`_~J zhojyTa)RUmcXF?^#JflujPpX}Zea-JUfF2B98_|wFRyZoWCMBdasfNxFd-E+{>s7P zO7&z_UV-fQ9*%9~Pmid{P4}UHb6`F3qZe}bm|@t*>-Kdm-tXjRtDLPbb67Zk_s0v? z?{{KYq5;9_*%^99z!)1da=JW?0M34f)c6&rjzW^k!byW0_Aj z;zqU-OOFCM|IG^r$%79GVGdN=9Ncz}m5$_M+$>kYbR`jyu9=A6Xhw^_4@$*$wj3wv zFQdoseF5v6HOMFSjFIX49PnaW5Z2byVBR14-QJa9$If`k^RQ(WkQ%>|>1V7-Z`xyW zOo{YuwYJCjhe7D!L&wll@@4jB{Cs{;f^+N<8OyAny$J~B_ZJT#2iGlLzE0-x&luR^zMP6yhAxS!KkIqJV1}`UKa%cvir9Uw(M!LclA0-4P8}c>p z>19hZ<3jy-xzD`jYR>|>eoDkwzW>DUX1vLdmjm-{@&Ax^7G6>3Vf&uJT6gUh!6pYp z6kGJU$68w&ySqE6!R`VE1C|6sF>@LDw3qWw@_Tlo{ki4z~?M;EN=r^7TvqErVX-rJ0{2Dl!MTl zV`bVKdu&-vF3&)(nU-s~MhbOOw|!Fols!iKEkom9^d$DnLD+9{m;C##Bo8>c6M3i@ z9loB*M&8{rRM5mqt()ZalIXdsOg_Rc8wpm->28uBzkk_dxmO6LO{aftZ#MSUSE&2G zKPUy(_ITAf2=z0QpeAqVS6!hVKwshY(e^M8T!vHR>Ds+zAAeVR-y##`T$UX&9xub+ zV|0jFpN%(8WoXtpUebN+G3$OXd3YVF9VO5BnEuW7^ccQyU|lPWxet28yvc^um@+I$ z+AoJzIbjF6lJgt%n6f+@k;*bewoZ`igPc%ZyA1vEnX9{!{zqP)=Jn&G^xu}a!@Tcy z8<;D-IR|pI4DPk!Oz9L%_Fsp7OR|v^WkJmBJ(5<~0&i=DVEb#<0qk?Qr}~Y$ z^jGfc?|`sqa-d6eaM+py|I=mI`XoV~k+?i1g~4@5qvraCu&>Zu{lu&`8c4#j$oX=O}}9a=8Q&@ zGyNGWarO>~KgQ36_d}~2&Hp>UXX*Kf6{BY zV84{su*ces!I*tI2{St6U}ih!iPw&kzNPl?_6b4lx6Gs0-$l8RkL|N{=M3|BgcmvX~s`G4gt2PBRDDHV2pa`Sx*5kiKxhGiHr#`Kg25@*J#P$1}vE z2@<-_30KAkV_9>4AIE3o_Db@Yar7sSvBv`I5KIZwVcRb9cS#)gw#G>e`QN<$p*XgW z_gi23WXI6&nZf*S^004rg&?+wyrc&`mE`Y!(T|zG$euYr^laYJF$;_wcSae;rYA^g zO()!*K#rR}%AMKt&-z*Lcvyn8IOKqy{{$nl4*Afh*|?$M_px8RyxD7q;UPnF~+v=Pu?)PZ|@9+I;?KO*R_yI$S)qU#3LRBY7$WHA{J)JR%3}P=?$gd!l7~`Tb&T73c;U6N%-xa%B+cdp&Hf`N9&!jn$?%cXd z#xQ0lN;i2fs#7&R$W(B;MeRR4O_gV)CGUy! z)W+UVoAfO(J@cPGGrUjVKU1!Ut*1Qhnbvbby^NCMjnkJlYLhW3r9;L)4%IUj{%Fw6 zII%%S3)#?hSHCOijoBSf{O{_n*r8ToSQkF`l{0pCVzzWY7mVwv!kHwxcDk~*{lXd5J2}xY?t%fAnEx=H zeB=s8yoz>4hq25tEOy4p&0+X(nzsS%E->O4Q0qrvOj8bqcsTe>-YK1((DJ~bT6gEZ*7 zITU)<#*fTo4X2?7k9+eh{&E;Sw9KB^5sF(n4fI1a%sFHJL~YipYa5~IM*s0+J+85~ z9J7!4e(c*E&d2@wu?LsuRSowu7kU}_#kB^!U&RcKd3wy@xzU`PdQ5mj2H2VX059l( z{)_#(>`C1)lQoDz?2&E9dQG^V{Ffg4HX6~1^I)=x=k9d)yy5E~=6O$bvchWy^S!WU zvj1uxE|#Y&qaO31hv#C`G&A(9Rkw9ElgFb==QSC}?L6m5w(OMn@t z{-%R*Yc2{)bFsd&8I9iNB8UHds)!DUES?{o$icQu=1MDa;jg3Dhwh#1Xu60`neljH zE;ie+R{k$tKWACX;+nA$&-o8sY9;gTxJq(&l^odQCTV@i9eTUVOIKI1@8v8vqEu4p zva57>-bR$Qon=UpqclrzCij{;N+tG%H+|tQ*=ro6`m+|&a47Q|_?$k>kshyaB^?#6 zlEkb#yDrV-gV9dXA300A(QXnq-bG#qIf-wsi!8LXkc*32Nl5dSa{e~YU~4Mq-?K=w zNCiH_y#&f=Kn(U8DPw69YBA=M!gB&HDioX7+w$Tr*9{EB& zCIE5s{V^tRhpJPqFR)m;`x>#3jOQybq0_%aMYsGQ!-c8wNQT4qH$YhTR)CO*TYdzZf6a7 zJUvFuv(RHVxkc99qxaJ_;AVpTdh%4Gv*5>C#Vw6 z9N&_OH8;p7`t!f5)2p-4ghMTv^SG28SCR=&K4jw0H<>8&&&1~<`WV-;Hqtr^4>cyl z@^vqgeenC03F~hrOgdDEORbCGF{2RUbLiw*Uxf6Yto0`sVakC*6nPXP=QjV%x_|tp zLX25jg#GJ^@Ng`%5xAgR6Mc?5S)Yz8#P^eY&QE%zYSKwJ$xf8Rn@gR8Z6uHx(bK*;O58nn zxgXL>(p9ZwL{%3#Q>~>0@O!ZMLo3;HjIN-Q&1F05CW8k#iBo@Ok>#`zYezaEKDCl< z9~(=ZSe4{FQpudYtz-zZ;aAVJ<@e4(c4axs0l3PAJMPk=eKS!STS;DugY-M(C|9Q2 zlY_UDj#12RXO`j`I|VAQP~sSCRJRW+(9>IqRc;C_^(m8m-T3_)O&{uKdK?E?WboTE zxs|L$n+FO+t)ye>x)MpR6i9AZCMz5M7Arsc8^0@f#!1K0ae7eam5C#n<8>o`%UWyZ zrZp&&F$W|Jd$OK>V z#hX2>*|_>+&s$&ok?VsM<9w0Pi1jySxsR>jM^45Mmc_m}3qOtp{-|@&A78d>nI#kj zZKxKV&yd$8@4NMnDEvXrrB5d`gCyUZ{p9zm_+2cKheB&B^4=-dO?3M{V zv+3h_$uqMRtjk*QyLa7$>oIhb71QT9&jg2B?@?BPd2o^BRMr;YXc03l?vd*?7vd4W zI}%Coy$j7jr zd4v8eGQ}VI(67oftlF%ZZSW=+(}Nr`pS$Q{0sd%Gh(p^75i-3HA4%`kuTT2NX`MXXZj4F~Ze0G% zy{I4QKY!FuKT+4@`S#QPv~#)LGul*-Pv1PxJ-x>VH$MH+ntB;M zG*8lWWo2nIVs>^7ja}tgf1^3ASzza`4Hu-R%?a3>t{zlBGsGV170V~TF+Ez(aRt~)f2_(GW%V28s+rMWQm=g zBIUm8MeUa?hl1m!+p9#`O#r545TMeA2(4noS zi|IPoiaG34IYl>9P#A(;>F>5^P>JU~^@BAS$j8+WSkv>+;CzY(5xyF18_ilD|J(y( z7^ZpC?|p;$lze=%V;J;v=mb}3FeRLSW{C#a#x*DFU9(yD>c!rd^mn0%;kwb7WI)5= z20Flva37<`KfPHSByUriLMG9}02AGbed7(N%XQ=uHS3udm|<4Mh((jgov?oQZoQuF zSOXU4F`t?YQ7@j+=@%RD(8_=MJ8`oz_M0})pi!C`qK)l3)q`+%NJ#L>9(Fb6fPM7SVa~?*FlSRN28FoCmP#V zkR4||{VaKhU2@!76Ta}*Rrf3;#L$fx%Q5!PBFvpx zglUWE{flJ&)#pNlbA0R9+Ere5RY_D!dr?_bvhIZJnft};_OuuL{C zw1N+v$9w-CiqMbb>^BC$Ei?e-y!3k4hH)@FXMixd20EGNVghi1M?^h&vadae|BZ&1x;}t=;7012;); z>n0uQxJ#iZ(f*P}EFTqUmi}8}+!dI5murD^=7v`CL*Z4fXUXrhS;L-yL%t}C=5@&@ z-(VMwYc;ee?x@ACN96E3(D(H<3;nl{ci3!V-b5B!k}3T9qW}%Ja-7eggUrPDMg}8) zbrGs`bd$#RZRIa5*EJ>XQX#XAB(H5HFZi>2%~8PXDZQTKmDuB44pyQ-!>i0z?dFdr zpM0^kM<8o@WQmG>QBo}mmAS?p+mAWZoL}$y&=(o0MXfj!{JH+y*UE$r%gN#wWHBd_ z@25u*Z1ak+@J%6hkWX33dCO)mdrr!Ckg43aL>y@+3a{2OYEf&M)!aemS*$Sni4_hH zw1~@0CB{s&;vCF=s0qH9Rx1!oSNY@Us6f;?$lfBZ<7--xeWhn+<)7?*$kXE84J|&l zB5OJN97c_#ugy6NOJU;mrE_aH=TvuoJ{QTs+83egcdk?S7om}*05932sN86j4rlbz zps7*rc^Re62!rIl;g~#$+{Ivy-wrPLyMrqhZ*oO$C%O;!YG7VTR_~eyH*PTtVO%(J zZs@V%8Chzrk$E`G>YQwV`#1yax{!yfWk%8ix?hj5&yB9VmF4p=;{{p0L^6#j^fGD` z>h%klUEEZuzW1*|emqW=f5_EeT$ds#j}0>Syiw+>UGX<-`cI=&aIkU0^uexhGxI#* zY&c%;ryt2c7vfd&abDr@-WHDI)&{&i$~**Lx^GX=Jy@3<#%nSdwR0h@@({fwmuu`? zytrwGe-htgyh6Q^4B>I|db5@&)Tvv@V-(O+6p<|1t8`MxZ0Erhlck7#1HFf*h+{=p zsLAJtG*e+J*}-`RC!~>W{84#12F+z|aeXo%tHO}%%Ih;qgVr3ozgZjcme*zZSOcmp zW_IymBX-5HXE2%L;cPPwH0FMMEnTyuSU0eC7T;{28K9e@j)U z*O46@{ga;+^PUHh3>jW+LI%!Zj|cLDr_W6v}>LUaaOHx*qgnn z*3K|i)nLJ=FgW}syVEKh3pt1O{>J{$FU-ZPWWc$<$)WyZz@=M8^vE5KdQH7^a45FjgH7!&428CuwkUHnYLI^7HaA zqVYS6Cx^eCb0g=;0INJW%*@5$2h1?-qfi&}J&Yc&RD1PNs=qEG z+xWsklJ2=k*)tEh@PYfMbI!7NLMyqsNrBBvEwX5*57W8+bYpiLw@j_ANEZ1$9|qCWR%fWOBVi0RWgjxT6`X=g}l?EgyT`HP795T z3CB2JG;pmw#x1V4uz2XLX6x8e z4kq(i%=h&#-GkQ@SWV7+)KLXij{YSclgPgp(Gz*p2g&p=zpUhs=6iUy!S{ANBMP3} zBVFbBgKxMNy~;;pPHr^b-!|diMY4<|xz}jH-o*&=@8#*wy-wz1P$7DBDuUh4LUjIG zh#OVt^YwO;xB0E)LLZ(xy>OD4*>3Wl4$FU|c_wt8`^(DZFmSdK+8YYo%2S{R=ZHz( z{?Kauaqhb>>L8vAJUxy^g0J@Q-w|QRjR}Al?ZdnNF$8(T(?2WW4!tq4rV3UI#bEgPS;T;H zW6sDC`XaeE4LuNzFM2IrHPXUoC42RF&qU0~f&;J3kv>_7=UL7*NA4$wa6a$L^$xjw zciZ={_GiXLGp;)d^wM~cUb+rTmb|!R`9*hpHob_idA95^!3oO0nB&9m`H}UmxW=>N zmy0#XGlXLS$7i?E%;;4v$0^oWU+mGN{Cv(6K}PgDX22)1gkvJ<`#Wj=AEt577c=Hv zx6SQh6Br1F|?4W+uy? zb}qPAM}>A87qnl^^KM7-gPcFwP6(${T!T6nG}wMfgNYo2diLU3Gv|qedF1c8-fvJq zzxrGw3fj^!%=6gme&ngAu!o4_P6zgeFYA_v;#&&!xMYQTWqqaEhg|+hqe8ubu11@7 z$@0B{PPXZjW)a3v&?hapXG*!jp-d6<%B*}R4`v;A6Y7Wx-XeY6v(|z2;IvE z*pqcugXI&$nbBfI%Zqfov&KH&$%wtqMue6#qQNaCFqb**FM;5i;fFExmB9fOQzJwx})AeCCDN~aLcV>eaU{*)O{+%tyd zIb*q-6D~hyFWmVsCUVZ`Vnppk?u)pW z7`4TW)qTwPS<#FuOY?BJh-cXc73wQ=FSq-uP-l?E|G^%Cf5?08;J&!7q{^EEsWSDr zLF#`uicxKpL@PID1*;HRk8`^}dj+n#;M59dxPGFqz#N8sye>bggroI5UaJ5)`@7RG zFp{5FeKPs83~0mmc8q&Cs}M6n+2=LcHxHYV+0$=x4H+ z)H~>n9MG74>Y7L7-ySJ4gKp{<_YAVEhd~^UvX^9|3QM@pjph4VGR76j)5z$u_Aqx0 z9gS_nQEnYwqo=w5e8#=*O1d-;v0rTu``+&JTAkIS;spa1@n>g7(f`~f5BFcvt!c-- z+h?wU4znMC>z%50N;P=zRQbivj;!wg@{Biz)Rp4mVwu?A2WzH9Ag?=fPRS*yTpCN= zy+7o{8gCpw5s3nFI*J9%r7hn`@@oH(!v=4j{YT>bbu!#j^6`WDzb~`C%TYb^l7)JmWg%$;LF1 z{gaAi@IY^z7+WxhbVtOj)wfDwN@^MRV@;dwFqsg5H zvU6;)DDHcq6FJR7zR#VR%u)TPg|u}0DZ^X%AZ-Bm15ugqAdFG<$!_$QW-VHHk#&AbS1CCHXuh zcX_)+p3R}>@o@xd&CNtgy#n;EXCumz5}8}k8<9agdpwzeitF=%#x^pf_Ybk$@!?qt zy_}{D4CREKiF>Crbuy{gV%+Rb$ZxluAk!Z^ZaT!lPU!%*Ws1&TAVvki(xl$qQr2 z!`i;)&%N^wP50Q!qFKLWUa1deB}Jl`??31=dBZR}c}TzB^jkiNJIP#v!{lnoqbY`4 zOYG;b61UbHZKg#c_*f=xHY`A$qc-xHYY@j;zG#yi37@ibJgdy!>Ke8(bxf%YXa4fv zDH0Yz-?}%IOWEIL>R9GhFNws)D)d@bEI{=Q4J0+V z;KlI>e2UG$$f^bSGQn9MG8cFYbAE%gk#N1APLF>+(qSWGTNg{8j3H!0BN3v_K+~W3 zIDVk69J%&Qip<_*W&>5Z!7<_?jI9Q)}V&i=5GTR-TF z%wkTuE&`b$B8RO@2#7g%A7Bn16jd1DoEy!;1X+V!f6Z^-rmv>Wz2gVe`pB z-#d|y)1i$daNZ9Y_Ft|vum6~s4D{i+^z~?Cd3A>O=Yb)pus;%caT)k=;w`ogu$B2P zKV?I6Z#49afP1%0wEV=p_;(HIY5gVloqXs$jfC&AOf-sPX3+KqvcB&! zUw?Z_J{&f;l(_rFlK;{NgA*dLnH;MPYe*j_w-oI=j!TWn4;Dp`P2xHHD2|_2Hc~CN zL}q^D`;3U-oRxtW!}BqEwvE(nUM9oIGnQ3hU7~{t?b|XV%-2D_{>Lvr_lC(7iJUf> z*jlRq;R_l_kT?0$aPr7k$v^JT#4O%#-!|8hUX{Lz>W~j=b3AEOmVqx1^HIB+wWRPq z={bq>MOp-Q-(s$PdAbHBG?i*COC*NA(X>~QIIQB|_dETtXeo-sA9C@X4-~x52h7bt zr3~Jms+Q86j+k$Y$zA3~U@pf2W1j*z7bVCc=9$*W4u*OgeQJMYv)_lgx?Sisb8*De zJ;7+QREJw`wsh zEb!c#AcN_5J2aJkuA$^#_UE8hj6$vKx?g7bJ7C#1`Vi?29CtSd-Ye*Xi%F1Cp)GM} z^fEl@s>7?}IdEuJhFJ?^rF}TPW_BS+U(dX0U*?~VWPeKHehHZ6h)>x;STse4CE@f8 zRg>9JMgC`^mOAp!%5*bgQI8C7$P`9i(q@<6b#9#{m<`F-_rGzLXrF?phfJlN&1AN1tZL zAo%{FNBei#PzPFYa$}MVGuffSh!8YUk}I5_jgD?*nEd{LZ1%9n@S!1yNY=slF&jNx z6zcIO_e%xxiD$2p{pg~{Xn*DxIWbqdFhL%5cR+AN7)sxe<0Efqe9QN*PLM144rJ;> zu)&;!;R|!{p6_$i-gtTEX%G7}=5CX7T-`1Q`)e!Ifo_QsSY`+9giv~Sm{aVZgK^8s z&~`f68}4JqnL_buwjP7Wt z;Kc{z<3b1Y_X&bpOTS@M4g#8Tk5M~GY{og^@cB^8IzmrhbNT`Ed7b<2lPBvOu?@`a zO;19#V>~B$UxvD!m?!?3dDir4E*`?yX~X-3Je{E=PEL6`V%&}pblJ@J$(n+?J@4ld zdJ^B+WBct8I4N~dUC&091`74i6rBtlWsiQNgYoYt=5(iLw z@8t7c$rmrQps!bTCgS{ zLAEz?f|nu$Z$gsbv6Mc_Ze(dKa!-B;*`{XhCyCbWDq5qx)`#QN;K7m{wy@&gATjJj(%V1A0>g^xd=xj%CpkJKK zuIa?Q`4E&f(?NMK8!p!^n0G2x!d>ad^bSHd)^;Ax$;O0jWy~BqC@tW?wM{5CzhsVc zZ|2C;qk1~!fb_a;Pai-KYTae7eShBP{VlAM@jfAk+p$du{^H;3UAG+6_{Dti0Oq6* zc0kthAo#4%p|FfO>`5Fq?$9&4fd1BTp{U1kV--D;706fiTN5uUoE+%f2|=G8I(RMS zI1uw2clO4KO6!0j`e6KXhq>YBauCmPsm9CwlAFN4S1F#}@jp2X}Lvp_KW`0~43Ujdzjn|O-Uc%gY zMS|Qe;QdT~wgInyx&8F#`dIM0Z@esE_S~7vq4?gCq3nQa=Ur9S$a?s4@{`k?zCJk$C_q)(uOF(WiGJ;*jXt&w}vjN%W~Gs=DG zl-}7VFMWQmkS@88)fujFo@u*k%&C$z6#}wH>7vqZRDbkZ(pDSyOQsKE?+Eg=0y}BvV*~=iC z59*{*d-KgWSl~$u8B;Be*jvQ2>ohWs zD%P%@RIvAS!huOnIMtN(hj3yY2RVOrHUApRO zX9QMq!s6ZZFp`aIT$Sfhjhs>OxC)LBoY0y-|1;0<>l}54^%2%Mk~MhIJPcdn!*DlW zgI(uXL+}X0gko~=cf)XVDEIm98cg#DhlMrhkJIVj85D*|jy#XxIZ0M}IQo(?-t{yL z(X2@aH4jJcROU&448x8)>{I<$^FLYEC4)7%%GW4<5X$pL4gK62=8uwnoI`OGHdc0c2tcT6a#dxU4k|$&lL-eTCgzlUY1Cl@L@x{)74G;8aFiVf- zYkB6-l^NAHm^a;=e}0V~sd_y=@y~YA7|@cn=t?b^p~cq@;GgSNms!@|m}^m=85eww zR(F|EXhrAFEwlZ6qU>d2tn8=QNL7j?7g#WpX?w#_c}>=SCv%j*HnDw*~|B<4zkBnC2x5KeD^BrzM0NaCDKva z#yN;`K@*vG&q1EkQMWO~B11iuh)?C7MqMU;X%@+%GcMw|5`X?pf81sT5<)G^$7asq zlwUHkfDEG}S*kM@$r)#nY!BA3m$Iha&>~Y8{}#goB?1?-PRjbg`9BqKyQ9E7zGn9X zW)|2mQ}-Vw0xp$FBi5Ox4^|>=qD3C{v&amd*}s4HTZ$6=kd;T)u%AE9KO@6v znOoS?8(sSPA=t+kFYW1VVV$%6O<%a#(j$}ahp)d_51!%2d{+A7+6SPh2W!O<0SMva zn$ZC`U-dulqaUny_@f-py^E>^;PZX5Tf14~jtO9|? z4Kwz(MIzQG3NvP~Usc#w-!Tf6;&~SRlfC{M$w~dCh38EA%WUIy4Y%QF5=KkG}xzamW zL!QNagaORj;^U={qu|qB3x%(V8IsJtt!RQKG7I^;$VBI zOt`Ngi#3hUZNw}r9nYE4S>qT&Ch<5~DgJ)yITO|{Bct_$EWudQ|77X*SY*OVAD*MX zG9mm7GjVU25cxY3NApcU3VAHnC7Simg7OY|gI4G8lsr^ujY7oFFT`SX5yH;V30KN& z=y^q$6HBk#ghHGr2epIz;kcjzTzFA{0mBOE;wxfLC!aI25F=R6INzlZKO>n*{fy7? zC_-)v)}*EuLgPfPVoM>+jf=2|+`!@x=3`Z3jiKUu?p^u&WFO52vXBi6v1&eZ4evD- z_u0*)%GTym(a%om9+8YKf}^PH>b{^HkD9*;0;u zbde$9u2Rs%Nv<)gJ;T*OBKdn|vt4Bt=sSJHoc7}?iGR{ew(WJ1iBlcrK(4*CIjWL6 zYnT(i$X;fQag&DDPEsz@MLv#nla8!$+*FZU+*c;HzQ3i;kTMCnQYKY$e~WT*nGEZv zz_{2_iL#}8(VE%RpMFbEeyzaRpq-Pj+!v;GK^T^xMhn{>%Hm zoF7Wg1|XU>muW$K?1dj{#WM%<1|6qg>A867hY{y|a5&Wu{uh0*XN(_WulmE*#TN&< z`C=aHSNQ||(J$5)!-ITbe(H(O{2C_wYH7mek69ROVCM8-@2+itw7}9~0xrAo4rYZ(sp(x6@n7@10>oA-?kambkls zj%{+G`81xG$~kLH?vqsrxai29WGBq^a7NJ| zuF(GC9zEQdzB6WIat&v;a>mW=E>QTXVC?UNh*2t38cbHC^M5@ubT1Y=W1O1`oi37H z3{_zyof*}>sW5S~3XO)S5W=-(rL`)I=ejV%$r%9$op5&wp9fdW8>2$dzA(&Y9m!ESkF3Dix~Dvb|C*4tHG%=VR#b4T4RZZ zTp3xAQyP4(yBxi|$SRH`+qgI!9=pOYo&P`XWf-33YS4B$*M!x=@x?a`^BaUAZM_B~ z6Y2QoYn~||jxc{cV!zY3t)=T^Jw06}IvKhC3$mvNWgt1m^9J-xrSGgJdt!q1aQZ>! z(Nm9dMgx3V>+Cy+KJSBM8oBPP5u`_z0eaM-$0f$B!)?A+-$VljZ`Q*mG#M9a7?G$n zp!o@MA_ti{)L_*~>J$;GdHKJRQUGnR8P{zfjQ zcO#?Y%DUbLGaUWMHSICu*$QTuf_*iS%r@ova~Gepe~cN{HhDN%{C_-Sa6NZ9SJ+OD z?sb%{hg`)up|xxr>MmPW(z!cYiO1u}yT>W8b+#3zBr744hNAShFRmVCj|LgJayG)e(1e=qE+`kr~?(qR@`x`afk_M3Xn@7Mq2{XC{=N znT1tcn^-u0K9A?Pd9DC$^Na9h49BJph3GYfzDSOBPrEtGl$&HO%F#JK%SF_5SXP|p zEH!_Z%3t5fTioDWcZ=&(lM?f4vuCD^j_;#%Hof|<7selIGxI1N{88|?7T4C2YuAuV zX-Yn>ix!*CGY|4Gy}4v%hK$HU+-(!Kk&mm3EI8dR#MEI$SXHNxXS!VH6cpm~bY?zt zol*AERWg`+eZk-^vn#a~Yr8h08ES>kJ*;p(mwiFZ4*hsZfzqMmVqa$6t>Fcz(;CqhIWK zXh0T({|?~#TFLc!pH9*E!FBKZB=#KaVn0A$CZ@V(VKYC!biS7p-HLG8s|fdb@0_n# zga|vXAL*|<`-E=BQ^_)SwO%yilBH!>s*Lk>!RSI4#2!)M)<+i{+2M+yInJo$POt5U z5L^ilXQqh;sqZ+(#c1%?Y9lhM8}W*q!_B*Ttmc`N{;dIT$QHP@&O;3MfSwujHgU|T z(VYHQ*38F}El})GsGp2gsPCLmsQ1Mx)V15`WYM)lvZ1eDCern1=$0Zz_Gt!uR^eG= zSA2AKfytS<4uLMXu#5~wDfjU|=tv^-(EmEe*Q3l_xJ{mLqY;hP8ByyaJzM$oCS7Jm zLK(-%(Pm7a$Z@S1eX$O?h;2d!!@-Q?Va)uwLjH_w!BW;C_Ow>0oyqR0N7Fexn;DSX zlBGIXhjuFZB6+UjUZTR7udbM5-3n{S7W@epJ{hcS>#d98QD){l-JrMY4*h+e`PyiRUa38I?Nnw&aE?hsqlEJ3)=aH z<2T<^5SbJQGJ6N7)4x?a9OGk*aN%bae#C&683trFH#Q zcSaSS(FBz_<6bQN%bdgi%%7+v5O&9i6yI|cb7qob-!3^7Qbge~ZW;vOVLE)&p zT!SI}d@4*eB7T?=c_uvyLkv*e<~dD2Gfqw?mlDSJMFv0fxEakun6*l$=lfiRx_1CS zs|1Dm5qZn$%s729)?J)J+KS_J2dT5nLC%hMm;L_EQYYIA85RX}-0vi>BD>c>i2;8r z;dP6yT=>C;5%|&z(7BXjyYh{knam(53GgT$u4|EW(U-oivcpG`L+F2TE?Pb9p z1*$LQ{wj}qsPrA!y%;3}lD0S@LTf;dc-bq%E zZ7x;Rt>sd8W@lXSkfRlyvVS4~`**U}^JM`3 zJxmtA1N%4=wV3V8GlOngyzr-c`8>}G?s6YYHIV?vP;)Nm%^lvTm?Hnchpoc^xI?0Lv7oOQTOD{doePXQeVU|VAoG*Z_Py=7+k^18}1wefp!w=>4HZmt#@LQfRTWLNwe*^Q?mB z3f3LY;l&*jbIr+Ea?B2Op$B>@_b~b*R4XY&jSKA48qa-)m5W@v>?GeGvp;u>i!5N4 z!k0bva>-AD+=CX$oy%)dU5Pu76zI>nV?`roOI!TeTSA|fE&%WNd4=-aXWv~dzFcIE z=tSN_f$U}Trb}~nG-kD7Pv+7r6m;XBj@Rn6DvN#T=kR4~A^LMppJgn9rI5azeVpe9 z6=Cyp-aoxsi*1pcENbN{j$d0#Mzc1uCs2WIHRu<;!1J(A3ij_<;ow>&YFGurV^09` z&ifSCf+jOC&wX= z9-OacaD1L^#zLNJj@ZX~#Qj`U2v(@=H!9S2%y@qDf?hqPQmy0|Fs**FG_69%ajioV zxt)8mUF6|Q45Da5t~=WW4LA38eBiDLHBOqNF1cWqD>kUFJrHL zv>wri449?*kF7M|`A_EdROgr!$@5vB)n4VCQB;?i(f5Rf;rimLgU+jqzTnoLev4qMP8j0oloP9M>_>Q=*5?7xh;1PLv??EpAsTm&{Y1D`+H#GNMCS7`{hD3bClIaFOJNV4tamet z?v_C|y67alnUUE*Dj3eGurAdZcZWFR1K;0<$Ij@zn)Ph1fo?1c!+6dU{>#`OHz^$7 zv_=T`Uq867YFmqaWo?XD9L4uHAP-+&^SpeL8Rw^P4K%@w-(=v|a}Eu^tWdAuuLWe_ z@ALi%e@o``x>1I$N|sjpjMA{NUOF1-pGeosi&$n1e08RSN`>^Z-0MDb!4qbd|NDgV z=g@HWtMGFh%gpI!;TRhmjz_Eogg6_}!$ODuS3UZ$XN>D7|uTzT~5Yu{m?7f6IsSUU2Cd z38#om^jcT|Yq6D(v>)=GXJTGfk*Kyc1C6#8K%3S`UON4haY}DA4jz3{SKBx3q!V(3BgR+p`%#vJ<5*kAnN zQv?=gWnx=2eQJ*zNeHc(W3G7NSt^OE$P9!}E5PEiMsjVz52;5kW?xPOem%`Vh&dlS zeHzMBZLyrY<&7N)%ov))p7<8@2ClM}O5}qM9`Ql*a?F{v&BWMq?=ay~L%H3EdCKR8 zV8Mm$=w_b@ZMy>cBI?UK=JU>DZgLCfNYs7Bv*kt11)gssF`X@v$2?p=p8HLU%0O^p z0RnwnGLNl9?v3z1g$0s{ykdL5GFtC~QIaeY} zy8EK_@<{wFB_DT*dEYJ#}fu#*fbPNweNCsk2f}ukNbRxE&_)F1n+GoHUqxNot(k&+ZO@wbF5R8k9AQ^q)Go0 z>0L4ezTYCzfjrdGcl2OZYa!_KTMCwYV@bzIwC3maWkWvp9%&>`w|W-P{hyt&mf}IBa>O#2-uozo-^zr|Fn%t5TFCBQ z#jm@$dG(Ip*OG>A3t@(3yHCj*nKGjUpo{a-@lpEDETF;d7u2oZHL-O5B+!P*VPAKvgy+-VZV4%0qTEhAzO!) zNYyspIK=A~I3N?d#}x29%|@PVDV5926YtnK5<9cV^A4bo@?ljTi+u(rRU$t~zOwI*5((ql<`H?r)+aK^>oNbgUPC#U zS0YcDd%pi=1orcF6y#4Q@xC3|n5FZtgdtOwDj zd87_=aPHem^)Wvsfqu_tgCY@iAQJ=o6`<)t8~OTyx#Z;da&Iz^$SDI!-uY*f050k7LR^4&k4yn`ajR`iWa`hw3M5FdMb+!}?zl^j{`mf0w(WWnv- z^qOrTvv4v5d&m#o%E`g*z7{N6xlaQWfsGG}^G$pB&`%fIko?_)Z1`O+gGbd^ z3AA=X>by{VyT}}BazkdZ;O`pr8@_YIu1-OiQ24oH`CjUKRou7y81; z-&G)QIB0adbTv8R_Q6ne4<&awDjW85m~UI_fJ8+)p>B_0EJ&o6FoyYzH_Pys^?n(| z99YlWp{O!OhlF6B4ad-T_W7Ws(*IcN40Cn6=`nwP4zr4QoxdNHvs>*^@+cH_d+N|M zmAS6L798+Nl!?s6-qJ7_UX7Upz9t*flP!216DMOAIl$$wAmkm@AvZD`L1qgA&n8I! z$QI}p8ia$TN%%;P(qW$k+jQ|V^R6RGCWpW~jXYgw4%(9+95g;b=InC9!h{ga)9SF0 zzPU=|!mIN2YhK8iYG03KL4FOtj2||iDb=j2N1%qOvjPE`k83)sHH@m#k_C(>v#shI)JeZvlktaFXX(IDK)5YoP1W73`{2<+Pngo|ti`a+PtsTcTqD*GeYU5h^L$v+CuL*%Gbp~vvgr~n-B)FCS%1N->; z8+t^_1a~ED=?(OFq=kKP1}3JK!LmWDgpFr!@W1}pY^g&pJ@cA*e|9|^AunIkmp3N} z-}}?g_$M8k^rbMajh55jZD42-2)}hYboiT&SLF3doMPm1DRYf^AJ)64#l~0UdFzs2 zes@H=^k8yy@=Xbs-Tvq> zmR#gg^1r_1E~`h2`wjXEnUn5F9?-2beXJKsk$fORvMSkON7X<)TtF{j81KXR_4i<{B1Eut=FphwR#H2o4K6Pwtg(x4z%m(xPqiNBZk`I_0W za{h-B>(|n6_*;vWYtqRoaPM_GS}e9G5i*g^w-H(#-<5&&_Ixg`M#-sOHu!TQ5DR8$ zVfBkV^5imPrA5lX7q(bJZhAS#$?CD>C8v?I-V!O@S6BnP$u+l$gYhGC$)A3=H77an&V8p0-j#x7r^+7qI`# zG6PStOHrv?l>D7)4f9NY_|~N-?oI~!rj?>yS(IFyXNx2A12La0SD$g2*xa8v@_VAl z2-%`aXFuHKd~w2$oV9`Xl_^ThLT!=Q*dLv5X|ZMxpO-cY*G>H*<;WCUyjc~5_D6IW zbUp)PK9}O~r6aQ9kuBa|<@LYA@qb<>9`O7BfBlTrN5vZac6hlAe4To+WlrOim0PS_ zDp^%Dlud4DxTJn&*j_8t@J~^K!86S)W#9?5!6u=;VZaAna`_q6Qw~l)W=OiT*QNET zwB+F~!7hJ>3{2VFV}U{A8(`>o$C6_9R|fN#HHOur0=u1QT-#u?;iI8b{cSGGlc#hW znH-V4aI#rSIqTeHx0bzD-pdoj}Vh*la`(Mqd` z1gSGdD~5mLq;6DIS}^->j2))?+mR<>Cc-Ku_CL47hGuH0Ym-Ohb9rIC1CGv9!)Z0M0mUFYmCeW7H|aS-x81>wnwZzS>rfAU56l^onLFN$2zSZ&+~NXT%^O50eaj?)ZzY9p6$QZBR7f+ zvO$O2U)W>tnO}dW!#O8Ce(>zAWHNI=3i)@^nDbSQ%wuIeocS}GZPa0iFFia*=v}DA ztgq*MhQ}}i+ANb^EqZgl@oau3>lgN97R%^Re8f3%6&(?Ynb_x(g~#_ZG2eoI#(m6@ zCjabIF$;h5Goks*9t4iB^|R^nIhctq2|PFI&Y!iCtYag(6E0+8+44fbau-;6bqRd(XVx@WKPw$krxYccFoN~Ho@X>dm=H8u7!Vwp-_thW>2 zKx^rG%|@!Xv6UEi8yOJUN@~%0kXYSH2F`F2e|xpOCu_B-wT(PZw2?{fWFDop_y*Vs zPTI&@vXFgxIY`^=4l;IHTj_AnS|;vxka?A?q}SEPGP=A{npL)wu6@jKw}ei(m&HqE|x#dOXbuO)-;ZLp>9=A9C_%4jBK)02Rsp*;fb_l;h<4&E?~_lDgBFYL`^p0phqMIUBNbqo6+{;F9C_kF{| zU{Nj{&l`}bDj*9rkM&+}@=?#jkV~IUky|)Uke^Dw#9YOruPwq+cNgm=ufs6OijKO9%zEBU zZZX@4VPqTo1sdTvG!4@(Gw140Dh?ht!kwSTcQRrN&mJbfVqWe+BRn!wxvpZZg@2~K zNkvkADz;3cU$LW+Svy9gu?}405&6fSsd&oI7xH_0kiWV-mATX83VhZZG4ZMqUHG%d zaj&ErV#Kr^M%*YcLGd^j39Fb(dyS67`gs^M%!Eyq>2+G3i~cK3_~&dcuAVnxBLBPR z8~Q06O{kKRi{5K;v3PuF{Sxl~gr zaXJUF-`-lj)wY&Xu;4=48{NxvT24NM! ze%j_9*t&>5#_FDMzUs+*RQe!U6Kpca3v(NIAz0}}w~#02Dlfd6ABJt2VVD-qX9!_9 z)rI%{xiB0V9ELtK!{|x~$E!MF7|D93uXz~8@Oc`L!E@7bWOVwn)=55b%^5O_>HKpw zGox#UVb1}cyZt2dcsdMod-Iv(=ZC)YInLuV#P6NOpa0H<9!Cjdu1pxF^ds}b?;YMN z48Q(Og~bvh(to64g*`dLFnSvK95nDU;!>s&7n12+OrwjXl@Z0`jQF^lS#A%F_)-nbkaA7Eaa6z%?;a)+0_vY>1QE&l1FJQJg%Eijx}dG3>u$cIELHu^>P4XPaJT zor{w;Z{j6og;t{Cw32loK}w&qm!?ykjA^fx!mv2`Q9&oKV|7xUIcBPJTIv5=E7j<7 z{7rtbOFtEc3Hij`_NW~|_o9kkl570ssPMdmbtTp&tMygE>!Tf}m9xXIU#tzDCF97mo_k~Lp<$h{ zT`0MUnRc-JSA~FfDzq}QN7_*Kri5x>-kHut?!8LGG#CoHylZRFh3mhLJD3kTSp(Bz z4L18}u=aHj9U;L;W@{k8Lc(Fu-EqyfTXU{G%t{pR024THghrlX&)Xmi4(0taLw(Ia{ z20bHO|1~*44(JYDC^nTxLN$(w&Ww%a-I3F4xjv)Z5^#ctyC=rJCmP$ufwsE znTQ&gNk0@F+GHAA88dO~8GAwRX2O?y<1@*bs87!EJ9(0q-`Pu%Gx+q&E)j^G3y!-WVO?i;r9n-Q?Qh&TTT|zn1&?YU6 z{D_h3a?anI_;JdJfIH;3Sx0x{{5&R?V?rXwkEZmuhSJX(L;v5CwzBC@C%JE@mfVkO zIl1waFF?NW<(Ad~IY40yLcG-;s0Rdf=fm z-ASkOQ2wo>+)8zndea=`#TzR*VC^X5T06@38k|QPo1ynGb3AsTAG{JXJNfy=2i|C) z^TdLVzBpP$4~XME$-^WCI<_~% zt4K4PNi;_wuhHEKWKgqwFsqL@+LU;s(I6jGxkVT9dmnTsySQB&4$Ycy)Z+U#<1zig zd&2RabBsDR4F}H{@##q#E*Fyr$)uxk7Fot~CIlPk()9U{lOgwRBKN@S;~nTEC-*vv zswp|5%r+9dTq&LX%#dGThHY9iSnes6({oGZb+Q7Fv~(-4_rZIvn`e3WV84pJJcoR+ zy(kP5E^^*H%*@wMWGe%9V|kC=yq2kG>urSj^fVk`CuLzQ`(nnY!H@i4jcX=MviXdb zah$h!AN_2Xhf50_BsrnIoKI28DZRC{3u6z~YNhAp?O3`BO8Como zUi8N5U0&$;%L}%>z46h}7ppfj|9TeluJv3mlbQL=>vFNpZhSRxEx`Nd(IPTMyl-k& zNyFTxX=q9&q(MvaAM;FzcH;ZSHR9Qi%zz`~w5qjM;>f7ye2V8eU%WJbohUc_xYw_1 zkKT>daNE`vXUL@$)pvm65y#iaAk4o`H_?6#QaFaTAe+7V7=5<{QWr#N3z)0wk-?A$vmU!t8i75k+U+;LC8$Xw#5q9&N^mG z4^EUn%)GvOS1*<&dg(}>@VU7fsV3$t{#L`Cb^Hm|1Cdj~PYMjeZv+vjee>C=3c}5Kj z3p-q%9gIsOHMrI<7~`5~fRJE3?HP=%!u~^!>0L{7I60fy(>LPrp+y25yUy|qLkF$A zd`kb|7iMwW+XHhQFfWc7Im=WSZ?g(P9fPsQE*QUaH2>pi{8fRk@eRlQWz19V5|4EY z=^<<#kB#J2x|L-jm7L7RRK9QH=^`W7*nLSh{$Va=B(u2F`El;9!c}W$=9)f{yi6Q< zQ%Mx#Wxces(26Q0PM+`4$^*3;wVl|z(8C@UdO?MbIpKK;aGi?Uznk+qcb!i!84rZGPvF$)(KlfU4Z!aKUi`n6ZM zZo8mxy&0r%T|lnUjZB9BNS&lMq)R$VD-HU_%7<*NTp+(wy|O)alR53o*Y#qb8sp0B z;a05TH48$Q3*;#+gVD>#*TlJc*m?FVl<3j)dpy0XoQF-!$S~t|8Xu1Q5;iHAlgB=+i)G>!>BAa_4_eY?w_}zMrdJz*FP**NaErZupTaQM zCJduvxsP@aM+eSfOEespx3HIpYw%L;RaFDnclUsOK-nf_KF`J1PI;)DOxBy@&z=i; z2x!w;zRhSar^G>OzqXf7=jiL-)<(t-Fh{M}aK}%6AGi;9WNyL<<|*!@b7?jGxi#1i$lpJV<4`L1#R=OvHXcvI z@mD6i*qeu+?6oV)pktkVd@s%Na5BAvXts8d;6$}Fv9ysso^52%s4nvNz8QuU@Z6=d z8CJhkp!sWaJfzq6*EMg{4QAeS)CgQy;tP+8?Afg5i)Y{2=XEa}jg{f3{Vg23_}{Mw zaDKgFgtv|iet9yDZ7#w5Huov(>5P0xhkFKHh{5E$cjcktz&t$Y{uvKnw37v~ZKbMD z8>v3rNw&n;NyFI=@*~F#qxjKBYmOuCCE_|=fh+#zSQ^Xq#%;2vEq(E8yEnX3d{Aeb zFCH%nM|{OFJnkEgwY)}yj)r4#=iM0EpZ$@q)6k|-8uk^C&2P`SbSiV69ZXQ(GQrA7 zPoy0^gxq`VB4?>N(^h6rY%gD?sAZqEjWnvLmd!e~j6bS?AJ3vnBNf}Nev>Vpp(z3}M<_mubP751X@cqaFfobRjN49C%6Ba%JS(5W1~ zjGRk*^<~eeC;Jw@n=qB<3g2h2zmoGt@;DQ2)XGEc-OTR{S4xL_YDu1IBmcxXivLDy zS$mtWqn`rR+7`>m*St2NJnIS|r`yL9L#@0qsizmtk7a)V_q|@fy>Y`Y9G`oIW9o)5 zBqq?s>>G}2<#>Iz8L@)zSs%iK)#Du$b^5D<&lzW{`sKM8C_6c(; zESNLBBT*Kr;-zsMYfRVl;*zA3szG$aUts%v?cet>Idw-i0L)Q(5;adPkvGnvzqiP4#yD_&>PJ(q=)W$eeHziv2L zv^^OL*U8poz*zfwMgQOAUP;pKRia$t__LGa(6J^7GLHMGh&%R3kK~-u#R2|Z)R;_X zt&wNvLph%=U7^9l7OU{$G2M|5=xTgO=X+~r7W1{JPU*0}8C}N)J$g*xoEFZtH^=C9 zt1>ZRHaTjZ$5!BYophxPGi#Z-{v}J@gDkaz{JTRxGuK6r_4512F*!IrLH=2tAiFrH zPJWOeT@P~X%VOTqAo8A^*ISQPdwOcgU(VeWPE7@-MV6-@^fqtn5Kj+dLzgdr% ze9rA-^tfE8!{vMAJ=?LbeG4HS#;!BZk+<<+B+2<1u$fJe1t?EZIz#uLFDbpRtcWgZ)-PTx&$|n%vKV{z4YBUa~RZ z1f4b;%v@LIC|s{`E*rW;;abwo%yk{-^dHCdGNB4*u@ap$;JvdhS1-zH4%nEk#{I8! zE+17PaGe^i$5b%v2}1dp0K}AVFSkR3vK_%Ft+fh@S)8jL=`mqcJeK%yUVqAdvsQZ8 z7PBs`$i{{rS!n8>jXK`h$nKJbr)1x+^-#FhWr8th(6M?*fj(_r?P4AH=! zbJmTntQ!pGeZ+aI_z(L9#_18y9<}&goY(u&H>zUp^y(}O%g=%>=P&1JTm!`_TrZGg z^k(nGo`L_5XDoVbA?2?XihGG0o=y#A&MUoa4!LNhXHKhYvApWe^Sf2UR>)0da&|2o-{VUT_ z-BGSy7>CZ``QZ{N+2@AvHS`-sry}A|F7|wADh-%}ykzij=5B`I-dLWK z)nV?(+~(4~QK4*M{_MUVp{SBg4r?kopb0JH3H@UCo_Qj@To}YP6$`I0f9I^Nw5?qt zi61-=%QNpc3id!f&B4Tg#?q5Hzq#Mt@nd}`?yV>H_fIaWEpH^dW)zC^Sx-zO=UDum z9z$pL><+P#Jwl!_ZWx{N%(LFabL~&Lc&Kh6yUD?=ec+Cr+e2acz_R02<_@>0C&|N^ zRnyiJ{p$1F@JT8&nfdQ6YAW}){gI*qcf41GV%X9Y%xKQ@x(H7Ds z_>a_oG8}JxLa|Rz-&{C(LytysT3^U)ayNXL5sDz*Cr$Q~6Rh4$wucqS{Ok0`IfkHW zZVIXm$;G7U&BXG1p>&z#j<$v5?`9gH*hTN#h88j+k7@3wJz=aLO2;GfyF0Om*}jR) z*jXqkv)!W+@Z^jea)@+G&G9cw9u z@FF?2!yPaDLr{>Ag7d!2*FN4qU!`OGQal7jjhm{;Dku`obRCe)xOkv#8( zXx{&dT-MWCNQ=RLWnzLmKG!54w~z1FKip?8Z6u8w7Ko+79ZnzUhcHjY7xKSr_B9m; z+rRQ=zB}%{qIa);Dvs!K;M%;EG%qNS&J*3x@8K?3bWTN8r(C2AZZ3(YKavx0>Cqq#wBL&CEmrWR} zl>A|363BX$Q+aZBHI3NL=lXZBg`DeJD&NR0_P9#_X=na>o8{u>!UpmWJ&%j(df-fB z)`BiE4|;nJ?k=;I6D@zs`NM7~yA=Wtcjjx?&xLz&Gda)a!h4q|hI9$VqCu(1IQt1F zD_O`KQ;8g{Nk{e}@^rjU4%>09^0%3+C|4r8c>hX2-$(s68)m8(%hY#n_6DUzG?Jj#erl=Wfu2VZ~8YkCIre@oJGa-G{l z@GO&D_7V2g*JvT{?i9+rT5fbLhvL_vRQyA}yX0;wnNYJp8aDO7x|Z}^($n#FLN3f} zG?xi{e=W#gcR9gv=`;Dt=o~z~QCITY{S<99?>9vlj@L`Y)k*Z6@;ZmCE|7A6-EcQM z6h3?CfqnG}E1fMRmE&H+>Tb*&BL90X1%IC9F#o_>`V23YtdDNk&vDX$*KOzX9JKFb zDgUnjBg=+zJggatc?XzZPcFM?L}Rfz|3}6?cE{g2p?Ec({hYPwuc>NnTiIjlON;oG3pn`!s)SGnPZ{)U4MavU%K#vyq;q`sy?bgYp8>tji z93$oWaU1A7$kR0;Ulzdn^@K9!kVJ}iRcm~$%iP-!T0C4yA9NM^%QBOxH=^31Fhh2_=xa+5dtj}P77;~#T z(+4-g4vRNvu>XJ-PA4)@lbl*aNsK()Z-+|{{LrU5xkB=HT@IJwQRQfHZp^&t*Z@4} z!2bB^Qu0Q1dcWWR9ovH9I)Y(qQxkEu6b$U^qQ-7nO0cuagpOrUYO^ zJiU8Lu8muekJCrVpsM7mssw>X94sL>;5)Ju-SUr0V?8-aa(|b$@#lwTpsQ6GcH6|t zr7U_39r-$w$h&>dz_j8r9G*Z9Xqpns>Eo;4pS?T|JV!2NPVvhqX{A#_^Obzu6CI4R zGx5`oT+*OOX|q#_QA3z({6LHGkJ53MUQ53dk#gm}4Xix;k;VMqS0(8@*Dix;ZHz=% z+G70`Ke)Kkdw4t(c@@gI&xnw<%%QHAy%N*DYte2ExxZ>WSNNAanzIeY_V>rRtvYP0 zo{4z=dq0djC=cl$TyZrJjXLTu?PEILSLf>)A1M}rNYUAV@i?zGfMV6 zumNraK<>xldpW)@Gs!(|ij_31Kt4(X++Xp83=e(-W&pYSRA z_-qxf%g@9~g^M=0*_~dk-Q+QO|L8`Ot7;M@^Z9cUCk3JE4=u_nW+K+1434}$Q>!cC z=Me;7@@s=eWH5)K6yLHUq~a-h{pi=5xkig?^)m3yybMd8Mao25Iw4*L!r>3Sgyg^0 zhLRio94To-=+jIKz^IK{EI3F`)}Q=ruPAwT%m%d&25_CD#pLlBxZju0OO-fr@5Uak z$AK`Ci`@1*1G6Ga;oU4+I*<##*(DI3H?*i=&Fm(=&Ku;vek`|znz`*Q$?;7i*B0HW z45OMv2*qFMvBM9^=H&hw@qTDcZnRO9IMKV8Z03hvd@ih}X5iIig{!e@gp3-m#CK&N z*75o3?URWOyq-0`M99Jp^mxu@jV6Kl$h<$lsmsu9E&01!wy5kIfUa8RYp>0K|MfE5 zSsEqFQf)BePaq!f-`lm6{>pb{=wlxvyE@t75byuJ!{V^MN+y11l#=_1mBq|$A5n!l z$PKhG)+Tc^ikxXmlr-<6q|29Cuk*q+M@czn6=LQEp+^OtRkEHEL=N=9 zt7xe=L&?kt`u>LSdB4E?^dV(*AI8f2Li!@#1;M@#eTC+ks6_tPm~}+vGcP;hq(3Z` ztmm}K!0xJCzw4r;4xgiIo&6C$M~ACB(~*CkK312bGH|$xz10ECtI&Zj9+RBQ&^9|l zo{@hX@|K>^W;%F$BiBj)V5Ou8DQl}lT%qMp_ zJsqnTmtk#QtOOrcqF;O<`o_lLX$0R#Jw2ES{Qi9YoZkM}LVmVcwM=|^TZ)crV&$gM z27`A5qDw0sJZogaE}i~d=SVqp*ajy#9?qS}UdIf+PA^_JzoYWWgX7Fne=LjDqVptj zn)KUN`w=7ank(_GdjQN>!%HUj{d^gD+e`d8j!M)#;g1_paY*O$xMfr+4vdVDo2hm% zkP|;$M~m`h8Ns|@`T>Sa*+JvLgrQcx*0ExT59FaI%Zw>*NS(I zczL{DjS2QDW^>V#@L7dEj7kq4>BO52IA@;COME&+f_PDs*bC#wj~{ zc*LmDh4qXbAxc~wtH#;u{J!<9g|`hx8tWMQrUvp}4MG6x(phF2o+|`mJ?qL#9tNQ) z&+%(mFf%YggN(X?sI3pe;Fiq$Sf)YhG!5KrnGHprvHpCXb#Xmm`&)zJ0rdBD3Pf6c z=4;hsUHY^JA8V6YtU})o&!1*D(qP;mW`*n``#6Qab1u(+-Unfdj~)j(-_~oZN8uqI zb~RwuUj}oeyYt*7M~fAA*;8sFtJqhMF^%JhxbPTZfmPT0G|eFYC>WCLL=@o#|X47x{Id z9-*W47^Ka_E3&@LD`%n;>jR!HnaJ9ig`wUV@O0<-%ETgv-|dCw97fVGQf|sVX0w`{0R2ZeA!LXZ8KACzLr}bgX;f#b$bV$SZC)d1C2Fo->zt zA*;SOvXs8K$e*9z+6O}mJyE>L8y?p^ahl)T-~_oVdK(Xue=^_7n#G_nXjvz)>qA#u zd>DM4!=QAbXJ{S0iHCNh%FQs?WwSOPO80zl7@6N%h;T? z534dVRpb=M7KY&>&)Y984a2YpVQBd$41R0LJd&~6TA6uPbD0zQCluo*gyHiuo_~+0 z^RWl_N9R&8sHYJHi;W0+XT-G&Mp*A5lQ1fcwK>)=F4JAnnCIdbQ!)P+{fs=jar%}D zd^4iL6LJf$jj*|9#F*`@{raV%_DLhEgpg?*YsBwrM!b4sgza&<;^va!DoaKAW=2@K z@_gWn5z&Ek8nAZs;4WQs4bl+2+64b0CVcQPVdMcahZ{{$4>w^IS;Y-&Oh_7GLeZUE z%pnU^{w{ebPu90*<>GM-Iy2I9af)XbHLI9#P|g3x^Ll05Jk;EphkAc(`w zg1fU`Q&23W=4RL)#b@MtiS*I)xhg7_m6OV3Yr_(G;?1n~!DcwWhOWoPW+=_)9#_d) zVN@w|G!!W3&HOYzW4(AbGontJMD8z@+@@xjcc%4pXXJ~XpiOd zQiD9>$}mJ;r*~;aI70QIc)v0ft#7eb=M>H?4AwGBnblPx4EagnC}OQ_ZB#ghTn@wa z&pfBS5{8rHF19xd$If;1eg)Bi!P=*Fei*#Vk$oWl@Lw(I*GBqO=acKUr5o2-KoruqC{vW@llEOu8#DrlDOn6?vzGpsjdE59r@_UAFGGTlv&&Fnw1D;FY$V;Ac3^1Xs z56_k8unC|iwLPEDa9gs&=W@|&IDL*}9h(>C;*4b;5^I{^LQW>k(uAz?w+xZd&MsG) zr5fsM<{J7<6NB%Rk1h+oE-?%})w%oA^W$9FSU)$cO=)8oP%+3bzRD=Wf<20q$GfW~ zZ*@?lEV_8!;I#JT#o5gp8Z2+@>K?zjP4^8yBa?e)pEc~QY46fC+{tCdiyg@sN8^&c zzWW-MM{F_dn`+kMZJd+Kl};Cuk5(}zxBI@x#s1(ogZa;Nmm2PI;-b~bK)Ms{tjQ{V z(90&8OdKbS-ae=#@t`@d3&f);Hk##A3<u2Bm!;d7V%tADak?@bm=4cOCil673J;ofpxIIJIQUiMkYzMqMLftl!QPv$U& zXF44->2hFx8P9{dPS1pO7`@-e`1d~3+t0t-@(I1(i?ZOvn&iS{?iH}&E= zacm|I@oQ^rvXJ?K{cOLpup=iE4Wj-Z&shAzQ7&Gvm634{a+AKKezhEAZ**I6P?p2w zmnBl%m-9ugIjp0KMfchaF7Lh2jAL-icg&-7@-_S>rQVI8OC)wA6zT& zhRN0&%{-VDx*!Y+=Wv`So9?oo?BEdA_&?BrOYXw12K~1KFJT~GPkycuUFp?JUYdtq z9FKN2&V#pA9vaaf*)PLhUTEJ!pa{?kqlBs$0>M>`qX zw7ulerFm;dsnl{+;Po~-%Ck!3*~wDz$ne4tGhghai|p_oPxNl)je16Ja*N?e{tgOS1bsiGNnb6P3b=xcUsNCW88s{jNo7hRE{nqm3qLSGM4wA+ml0jUP9PUlNa$K48 z=9*_yWiy`HnBzKKRA##q{BtM{4^uqKA4PwyBa+osbKy{jgogNyr>t9 zg-z&YTpf(*-|H$1@ibk}oTzxzuq7YfjlF)S$rp^y!nktTJon9pfn!-S zjz?)^9_pN7Eq^i{hA+f+zn zujY(C4zMOmKZ^Xt89OyX$;GXhL)TW42Fm&DvE=yQM>r=K^zi2%{*qrjENkkqkbC<} zP06?lX^T;`J#r|a65!?p0(;p?z2RV5kce|UXsz{nZ~B=8f=@Y zL8MnO9$wYsR1W8Z{_$wAL63f%TYk`r(3EB*N2(+}w7DBWM`YI^26ktOUID-Cz(WaC$!4Y}Im-wkR^Xu`f!@-lU& zGIN#u;yu1c)#?Pp{sq~h+jJ$rXYFPaYaI1??r}CAe%08^xla#<1mJG||7Mk+c$|rf zcgW0_r(g3g=b{c~t_{bMOKGKWb(*4Z_0W+|(I{NY`6fyhGs2rp(8`-le6JeCOUt4p z39zS|aWmHsB|Mi}t479QHQL-(W7K%QKV(qbb3Px+dD`(t5H_}>f2&ZB7o3+z$Hn6f z=gG6R^{6$>}zj@>#3~@*LR!9gmhB4{#Umu zVZY?uO?EPFj=glA+eSJkwUsmT+R03wExf9vK&Rg381vU0eS4ZAwyPO_erC@T$Ky`i zPh6!Jv1)U=eV2H`(k&cWM>s!lOg1yny*`5bgGXWbm*er3!D)~|X&A(DxtpUAdtT7b zIx!C^+w;(jW8rghd)rgFR&Ha$_TC+2^y@aV=T>uhxWi6tBJAbTWP2(9UBPT)1%9k3 zl|x<1r27qiUfv8>`}x3das*P&dE+|I3NB}puXbdAz?V?O6^G-JuqWy~GaB?^ICg_v z!>lw^iXulHZ^WA$M%@0$J$6DGHgHY8xOyH|-lXTeCb_gOCS2hCN^BiP?o2}e1k7@jGOJVWPvzS)RPX6!*+!aQS+jcqv&c5uyu?@_v5 z7Ug0)_Yubqk*_@4MxHdVmu|kcQu?l?^j&Tzhq9d{g!8Dmrvf>?e`J$miG;T?gBACc zJ{{@h?@Om|yeF#j<3W-S>RtB1XwF+7gXm}Eyw!>C)3R60p@<;wsiYs0>x@QKFJX3F zBX+4Tp?ELdQ1!^?eK)~j56=V6ny}HF*XXecp@BA1%f?=!%Gt^H8%|P7=&l^fp2Fc~ zSa8Y=wS7ut)PPcHzeItl^LUoj$_wV)W7ZwxgL{#l*sz27+$yq!+z&c0-;MUw>4DA- zhkq1vGVH^#gX@i);5011%RV!!H1;X5pW>$xvGSSsBE4yxGj?cWv4#<6DbpRYhvusQah_QAkSV_Xw0;#z0*)-=pCPs3G*djOWxu**+jqs*PYa5dD6~$bKyd;2wm| zn*<+wbX~;0qJkidt{#lm!#VCWBL{YZZguty^^9TORNHv8JD_KMLPzc*9xaNQWpf}K ztBy0*<~=>NR_yOiVefXf!gbyyg=;lB{h_@R2Gev`^&YDBe4g8v*x_##)*an6h^V;= zjm$Neewuw-+{6+J193?i|TNUw$4jAPbGw zlaq@lYfk1|(?{WY;sf)+A~=tQ)BiU-LB1;Er6gV}-K)}{;G>g(?g^qGGq{4+=s_

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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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/165] 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 8b7c0e13b3596cae14b5e5ef657a8ca46c6db424 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Fri, 23 Aug 2019 18:34:43 -0700 Subject: [PATCH 093/165] 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 094/165] 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 bb1cb2e5a833943178b6e5752a8ea066669f1e0e Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 5 Sep 2019 10:23:52 -0600 Subject: [PATCH 095/165] 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 9b955a6c1cfbca201d731abc710d1d36e0e49eda Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 6 Sep 2019 14:49:14 -0600 Subject: [PATCH 096/165] 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 097/165] 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 3b54eb65387306fe889a1e210ad7c353bd6880ad Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Tue, 10 Sep 2019 15:41:09 -0700 Subject: [PATCH 098/165] 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 099/165] 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 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 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 100/165] 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 101/165] 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 102/165] 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 103/165] 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 a948a34f8a4397053bc71dda4d909e6cef5584f2 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Thu, 12 Sep 2019 16:34:15 -0700 Subject: [PATCH 104/165] 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 105/165] 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 09b67946312d3b5be87a7b9844731fb6d7b15916 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Fri, 13 Sep 2019 23:25:48 -0700 Subject: [PATCH 106/165] 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 107/165] 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 108/165] 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 109/165] 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 aba472df3b0b48af8b8c367f2bfa184b4b466fc7 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Tue, 17 Sep 2019 12:25:07 -0700 Subject: [PATCH 110/165] 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 d7a87929161ff7ef499ce90df18b9d1a14c92c7e Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Thu, 19 Sep 2019 14:23:58 -0600 Subject: [PATCH 111/165] 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 112/165] 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 113/165] 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 114/165] 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 115/165] 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 116/165] 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 117/165] 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 118/165] 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 zcmb7pby!qg*Y{zVfuU#UmKZvurG%loyF|LBQ@UHa8|g+u2?YriL_tbYIs_3^8sQtf zpZmF==e@q`{jP6a`;W8t`mMG1I(wb9_F4Pp^UVqXQ5WaOm8U0HLD+|0YZf zbO;Cxz2y?4c>jZL<^fz38U#a!0RY;?)Bj@Q6A`-p*8pZ*#JxTMKXD{idhI_LiKP4~ zfNkPYA=lr7*6KOCBWD08z}L25gz_1yBUZ~ijZvwfyy5iU5CAdL$#tZ&9xCWck_lqn=wLvL|tYkt%*VQ&Mf zT7yHe&d)TJ-pQ~G!Oovv2*1lms!Pe=Vn80)ynTTOLHO2VCE$(H^tIT)iy-i=x_jHB za>7kSY0(<-bSNOp8<@awXgamL@V5j9c2Q7@a#D){qa18J9fe4OW3w`W_tZp0Amr$@ z&ba=~qB1$(kl+nsOIsT?DMe=HDT;8EBKn{GzeGe>2RBwku;CxnQ7aWqUldVWjTN)1 z5+2cHsY1;W*^dtL*_tXWbhlz+!kvdt2HU?wEqs`#o~HkU{3yK$#>O5V+BnTQs?8Ks zbp>8P z;Ad&{X0i2A(DtN#@r6P=`r${-@>@%!Dg-cfP5h8Y7fh=Vb`gB1Dg`BjB5|mL_a6oifZm@d>GJm&oSf!9n!C{99N(O~)?Ksl;svBhUbZI#N5v+c<2)yr`_APp9Z@!Wh zBXV^IUQ{c%7~TNmPLz#A3Ve(&1IsKHHz%vQ?|vEOuyU%4YHt6QSzk$EqtY$aZhSJb z9C!Hvg9dQ0b(_E2+qyfsl&u+Z+7;uAwYJK;taAsd;B5Z*aZS*`6itIlLxPuA6m`+I z9oEK*@B#7nxS(&@>P7oqsWzkD`js?e(qc9V$fxh}uYmnz)lTh%bmL0!!)2TE|;!ibjd_v$%iWqKsnBY(q-oOI5FH1(*e+Je?Z! z@N-9T3r3;iatN4PEN1k{#9#BhfYWMXstl7mQOB>Sy$?H*Uw4$Gb4564CVzf;azw&O zX`e}xg_l$(uPO)a)2aAr#j->r%ueWLO zb0tnqC1N+%h;6@S8)jg&P3c_rDR1rHwx+ulvev|SY9`P9BIo5CmdA|IdHt8WaE-la ztW<6oW4egD*5}79EQ%};n(kp>-WBTK{A8lI$`wbSw%mHuvRxgh`LNA>^3af5pMiBg zyq^y@!7ud0NHi|N--D-lsBuwDKYXqajX=N3`9-9R`qEL#$e-CS12wBC10kEkXts>( z!FoA8UOkiGp(#exJ`{8)?fIothJV`^aZaB(qE~~=|FOvEHF=kmnmEupAlpe4rMkhG z-}wen*cl7}wYqA~&h~$UzUUBIsJOT~tOtn8@)-3kn2= zsnrU`K8aRffPa*GOaOLQxO+7(%DfV;ONH;t{9B;EHVnJd?4Dw9mYb0^c{qM7nq(zv zxtRl--bL8DsMxvurU7wJrL^1 z0Kg%HFd}+h3}Oa8DJ{WfOuzIv!rH4-riK zGMNMaiia4Ipx?@mx)kxkZ5g=UW^DYTkteLl;(`5G`n`6{q8(ge!j;`v(0`;_9t*N_ zm{0*{U8ng4Os>YYpzR|wT~afNJ7XMYPaQ)RT#s~MZ}2m4>qM-1lsRe^ygYW7E&|nY zTa^=o-Nj?B1QuyScBKJUfX$kCG49Yr@ys+)M(Ef&itj@IRkzOdLP&fIbQD`!T2^IS zOE+#@P|w_bHjv%NXia1B5p(81$93 zP38zM34g(tjnpIpXObCX<+j>`o#H}%E?)__S<>@MXtCu`dq4y`)h25=ut^7%m{iHP z^GkG0TW({5(DrdYf~dnIr{6SdT7 zBJDLlmE!fytY)Um_CFW>dIcKa&PvOux18%Szg(QrRalsg5fUI5(@`$qW*J#$vubn87Rk-)cdqt`?w+QsbcVtu+qHwa1fB*qE z-w}&_+C+m9kDy-co-MbT?)0NOwRuDWgkG(nAg0zP53YwlChF?&Uior$?Xbp$h+gbP zywo9hxa)+y-@A7KnRYIs{7@+(k$Ivw@hGD#GG3|oZmHl$q3KgQ4!udoKx)0gff{9zRmpnC&2zgdosp%H8bY6#CbD2L6| zO{;!E;_l$whqJPY}%C##rkSBAjiIX^=W_Cm`LT0lc|aP3!XceZrMh&9g}uB#`m*FrzcwrXE7SJqcziTMrdn`LoMO24qON;pX%@N3k{Bb z{pr73RgBMjpG?AAP|GDCW~fX$h=oeS%pzi%qU~CDqW@snz)gFGWbW}y)%)JeO2wF~ znYq12ek=>9vb)ChQ#BPkmeN2R!@)$|xqDU{@n6W~rpru3=dXE7W>Xo81(49`KvZnX zdA-tspKeZ`rPuMt=ekx-tvH@bfST(T-8REl%kd}2 zJ5g!i=VRL=_vU7D3Z$S_b^Wef{4M8ld?J>RD`{eiVCM77x+%I?L$`>qMm0a$NBT=0 z#)GzNvY5QPvh#I;iw!?Gi*QP{>ZGGLUogm7>m5z35|+B(+Yfj)vrR^V^c(8$r7Ak<>!rl+;O+|I0o`UJ^J~}j^#bAuF%-kGI}!Q1)pU6bJhD174;mg zrwvGM&L^^YN6nKiRd2Y>a=SX30(6zqO_E!R0*!=>-&d0DN}n%u8W#>Fi-87=^ehXH zbM>@D7E*l1@RRqO$ z^ePSIxI~7(t%>ap{EqEacD3-!wVqwZFQ7nVdrZpoedi5z`|6f^+kI2J<)z*u? zx0@GRgbWm~HGOP;wfgZ$r#NFd{wVMR=X_F+uNisg!}iD%EWJ!xZ9chMRTGwYt&sQN^ZA`8OGr`BpvW%MAVOa~*|$K2&39b&lU=_>4U;9*;PIv6w#%^n-Wa^01HREYx zmZkfkfsko9c7YEOvf<{N6^-vKzd?kP+b)rWNovAyiTMFkxi0T)WYN|fdZ32?E+wGD zn1rAEX`>)y$w{QOag_b8e%yaJUf4=Q6SvBF_8jeTi8EmzRwhxu5fvEdYKR%=c&g-? zGitr+mwMOm0m~g*j;ML1yJqL=0VfxZ*e&k|7hUSS85$NfT3N~?mJ%CR{fS*m!cU10~cna5e6CeKiZCxkp-2aX}Z{~b( zRPnK5!wVrMxu_UcC1;{_yw>M!(0rjP<^8$!bMX2Y)!R7du66h?hWSEU4t2iC(2|lg z>h>P$h9ZHAKuh7fji=f=FM37l1a`I=eTIVGzf715!=OQXecqo0vG-@^ zs>lQ3!=}_vaXw|nKE+7QQNGrnAkjb9f@QmYv(>ow_W8g{GT+K3-GhvJIXZ#F*9Jd2 zVrx4`Vk5glocR3P{v(S;Q7PopS7fuXHdV0Ecu+k58nQ3KT@&D`m1yk_>u79Q_ng-o z7j~MY#5DKsSi<>9r7g$A-KY^nkDc(o>z*K5|S{clPYG233t^CH5OG-+)WKCvVGr*J`JA>uI)&Q?T|nl_DtIu*@T%Fq zj^{o0`O0K+v9ns9S3f*w+kRddb#P8C2Ai=_4Bgr26ubYbGB$-|%%hpYbAEQ>iCdIU zo86FAlVL^2Ma=9)5ersXcu}b!zsa3~kzePpw!XS-B~d%{zenU}O6p)xU}nc#N)nD& zjom2-wyqv0-{KQ`_31(8Z}l?8NRAdQC$fGDy{lqssV!tjoquP%pQMh;8=FAuQ!^o0 z7nQTY!zcR1sJ{U=7^+r*4#GeK|6R93mGtO&VNzNa?x^EE9S^eqP_t#?=gps z@NZT)dmB3S^3r4~Rj$u92?Sy2qM%GQ&$A!G=33AgZD_^X>p<>T@-mmnazxoR(mkTFr~%;J%lf3JKhM#>8izV$BbJ&wN&x0L`BVajN;S#^o`UJkul)>If< zfjt_2>0B-TrYxoO22>*s`+UqY+IQAOjVNWTp;ixpGhofpmV-rnYM`&0%z3;uD|5B1 zZhi;3A9MpSC5ObvUFk6`GUX!lE1rr4iaDt9K>`%Qq(KFZ3Nriz8`l#-*z?$-Tydt*;-l zO})3@iV58gBQ}q8AXOrx7*M>zStrB864MoWyF`Pa(p8bgrN_aU-+Y}->W5xvAR;g+ z_ZIJ~U+juh2eyY!COHeaitkK3I?>A;ApY|mv-*fxuez(gz6Jc!vghpY)_AP~ zv#t&|<;-K>ZuWO1Iez&MRB=#G~hU7nWSmz+4O_ZXpnpS^LZ`wc6b;>~BD(oHnZ5u6co(fZ>h zcH@dUZ*=?3 z9%YKlIEfZE$m9@Lejn+d#xMKiRL~@?RA5dtlRalVJ;K#p%)b1DS2@H=;4RCwUPy0i zgPdtF@>rV^ff)aQ`+2cimthb|NW<+-OB|h$qU>tHe_oEk6vpttp^`^wurx*Yin@^c z$(Gmed8zY;(UZKl_kES0$u@lZQdLN7>S?-oFs8v_m|(%}Mk`??97@WK=u?U3523Kx z#OL#$P$N$Fc#yU{FD+79*ptOMKQHfa;>_pOi?lXJE8#R%3e6_Az2+Mop|<{cbPK(s`o6F6GZ7{c z$(1X8;a5j66`m5Gs$-8yr3b~3qV5WnK!NA9AN7+#EY6s}laD*x4SlC$Y$%E{GKJM6 z<^40q93@y+)5TKrq|4=2vGNgGce@uBqtiWYRwiP1>{zWQgqb?W=Wzt%@(azqp4u^& zZs9FQd}xM+zwG>~2Ze`2$#Xs95v@obBp7n29b#Sw9q3mz%mHL=a&7&3j0^Z#QvvuR z2#E+xN+7Dy>{~klw#s`x^@HSicEacNPn*gm%%dnvj^_m{iJ#%g>y%O-v?cEHyrD~; zXW^F<;Uip*^DmIF@bM3%Ms9m2SrV4upLEt{KHJF_t9OEB0>16Nx(&skEt2!$Wm+hU zR&{y?nml(QrwaPuoX4%|sk%cci)lvAz5&Uf- z0ff}{GjDOp8pUSV0vLlndy5wjgm1!@7JSXFT%=?%H)Z3l1h+>v7w&;neil~09g{yd z$Q!*9IVWc$iqH@!f7?racK-&zRsKn2|HSrSuL+fb{@fM;=%_M1EKLdVPg4Z{^ZeI1 z@E=?xA`R{Dt`s6o3Jf6s1Fr}U#{zD}6~TZK9U+u1^j}~w2n`V~g#i9ijzj=T;1nrv z8rH2U01H8g1QTKbAe3@Nlzwn1YDOp`MUf7MMF&FC5n|D$C?Ud8suU3^P;ikRW@>-SKgR^v z4M6;%YQ`oHAPKU@6`4C&2*7xKerJtE7Qo(0@%rfBHj52odThc=>2}fiy-C=fxWvPE zp;W#xrX<=$nTekM`iC>#2E)78vul@Z(WDI-AbS81Ca8F;JtkYHUjv@KkF8ne@B@0n z^a#y-hBLe@PM$NRjcR%*p1$3C%|S?-vF)4tTFf5ZU7g{}uzOW5Sh1#2Bj!Sogb}j~ zR zx4Tu83+*^PQP^Of2Bw+8iIc>)Er;ke$j5h2&L%077{_tqz>rb~ah#K5FR$ZV4J6to z-c)Lr#6&Ks1mMj|U^5Js;q!60z{#TW@%?xMh`GPy_a#;*7)=+HPLN3xAn=Va!xh)U zV9y+aJwQ+VN5!iV2de<0Cmu3RKA+iMB)WiD*8?mk)%k)Gls_pHuF)*6O>`Q+KvKf3 zB7=n=Dl;=|MVLMw#XiWaJpW>#VU+O;pw(PbqALGJk!rPqsU3RqAk>8AYtyxaq`~-| z&A^L0fX(OV0L@iO@B0{JUYA58EwL%#ntJg4h!V*$zmK190HnVEJG65*Cvph=>bxrE z2WI*WbvLzd6qm;uACX4M?B=?r=m#uPt3>I$t`+4(;cu4d_*$-xC(oNGE@{KIe~+aU z4Op0CBA@j+ZLB1$H3CKk?D1`d!3G~MbXQ0v954ek`b2D9w&`RR-R1=4PG&iuZVcT~c{&{}tPvQ^RD0V=$bpL>K-Ufg2vWnzd2-6tvj}RD`#I z^uMAGwLd+GLGn}LXb%TNXkWn2_OUW;FzzE6-%{KF6;}_zQmgZlS9=;;J$CzUd;`Ze zrRVUg6|)D#_GW{W-S=z}2f}P&n%pUTesdW4K@$5b?pstw&4EG*>^p282x@_FXFO29U~`w5wNzdu3V4RG4<$KHOr^*5=W?`a{?D*Ja{ zT)W$|=2;Kqc<+k`QC>9_D?8eSVWvS0?IC8Mt(TKfS>fuUzPtbyyKeYF1{DBVc#ssf zH=U8E%sMA0INqp<{!|K%gu{u{K|3GjfMROUTPa` znlSNd0)L_?q3YD5mJ{_hlp%`zDpGg|g}ENzB3xIxu(Lk>bn7-EiN2F(rN7tSVNiw% z82GmrM=UrzjTB?i$o#phTF=KE z?gx+ja*~u16Mn13%U%i+yI21xo4FL*;#b)B@lvZ)D5(R*J@=UGOnSh0h&5Rq)PU^k z#=dB*{VOCfezl)_Dfs@s{N>kKMmps@23V612KvBLy+uIZYFV z-gaNS1P_wT4_rKSaV?Y8fNpa09Im*+uP<~IwcpbRO;1|IMK6cujSVJ=SPI7AKagmP z&u`@)tCsq7#w!rT`I>CWOh`EACs?F~GBP=Xg+T;gu{nhnxF*Y?AB&wrc$JF4-+IVJ zh8|)nd4yyXbC!s|s7%#Wk=7<9s??y(Hh z$Cw_Lj+H#y$tnC@ynY}i`5o+GemJF?^hlL&X;9(HQX!0oLEZCHQdHIy#_Q~Pfg_8O r8-NBKOgJd@i4pz=*P1QxQKqB83)JnyMCL#?s5{D^%;LeTo4Nl3fP04( 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 119/165] 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 120/165] 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 121/165] 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 122/165] 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 123/165] 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 124/165] 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 125/165] 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 126/165] 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 127/165] 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 128/165] 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 129/165] 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 130/165] 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 131/165] 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 132/165] 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 133/165] 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 134/165] 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 135/165] 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 136/165] 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 137/165] 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 138/165] 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 139/165] 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 140/165] 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 141/165] 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 142/165] 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 143/165] 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 144/165] 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 145/165] 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 146/165] 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 14933958f78d0e1fc174931349fba64b060e97fa Mon Sep 17 00:00:00 2001 From: alxvov Date: Mon, 30 Sep 2019 14:55:33 +0000 Subject: [PATCH 147/165] 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 148/165] 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 149/165] 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 150/165] 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 151/165] 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 152/165] 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 153/165] 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 154/165] 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 155/165] 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 156/165] 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 157/165] 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 158/165] 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 159/165] 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 160/165] 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 161/165] 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 162/165] 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 163/165] 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 164/165] 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 165/165] 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