From 8d523c0604d799ca88f02b0921191e14a21c1052 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Mon, 3 Apr 2023 17:21:11 -0600 Subject: [PATCH 001/204] enable fix rigid to support 2d enforcement internally --- src/RIGID/fix_rigid.cpp | 314 +++++++++++++++-------------- src/RIGID/fix_rigid.h | 2 +- src/RIGID/fix_rigid_small.cpp | 368 ++++++++++++++++++---------------- src/RIGID/fix_rigid_small.h | 3 +- src/fix.cpp | 1 - src/fix.h | 2 - src/fix_enforce2d.cpp | 36 +--- src/fix_enforce2d.h | 4 - 8 files changed, 361 insertions(+), 369 deletions(-) diff --git a/src/RIGID/fix_rigid.cpp b/src/RIGID/fix_rigid.cpp index df49d84439..0d6cbe86ee 100644 --- a/src/RIGID/fix_rigid.cpp +++ b/src/RIGID/fix_rigid.cpp @@ -68,7 +68,6 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : thermo_virial = 1; create_attribute = 1; dof_flag = 1; - enforce2d_flag = 1; centroidstressflag = CENTROID_NOTAVAIL; MPI_Comm_rank(world,&me); @@ -77,6 +76,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : // perform initial allocation of atom-based arrays // register with Atom class + dimension = domain->dimension; extended = orientflag = dorientflag = 0; body = nullptr; xcmimage = nullptr; @@ -301,7 +301,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : for (i = 0; i < nbody; i++) { fflag[i][0] = fflag[i][1] = fflag[i][2] = 1.0; tflag[i][0] = tflag[i][1] = tflag[i][2] = 1.0; - if (domain->dimension == 2) fflag[i][2] = tflag[i][0] = tflag[i][1] = 0.0; + if (dimension == 2) fflag[i][2] = tflag[i][0] = tflag[i][1] = 0.0; } // number of linear rigid bodies is counted later @@ -328,7 +328,6 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : pcouple = NONE; pstyle = ANISO; - dimension = domain->dimension; for (i = 0; i < 3; i++) { p_start[i] = p_stop[i] = p_period[i] = 0.0; @@ -353,7 +352,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : else if (strcmp(arg[iarg+4],"on") == 0) zflag = 1.0; else error->all(FLERR,"Illegal fix rigid command"); - if (domain->dimension == 2 && zflag == 1.0) + if (dimension == 2 && zflag == 1.0) error->all(FLERR,"Fix rigid z force cannot be on for 2d simulation"); int count = 0; @@ -384,7 +383,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : else if (strcmp(arg[iarg+4],"on") == 0) zflag = 1.0; else error->all(FLERR,"Illegal fix rigid command"); - if (domain->dimension == 2 && (xflag == 1.0 || yflag == 1.0)) + if (dimension == 2 && (xflag == 1.0 || yflag == 1.0)) error->all(FLERR,"Fix rigid xy torque cannot be on for 2d simulation"); int count = 0; @@ -434,7 +433,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : utils::numeric(FLERR,arg[iarg+3],false,lmp); p_flag[0] = p_flag[1] = p_flag[2] = 1; if (dimension == 2) { - p_start[2] = p_stop[2] = p_period[2] = 0.0; + p_start[2] = p_stop[2] = p_period[2] = 0.0; p_flag[2] = 0; } iarg += 4; @@ -450,7 +449,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : p_flag[0] = p_flag[1] = p_flag[2] = 1; if (dimension == 2) { p_start[2] = p_stop[2] = p_period[2] = 0.0; - p_flag[2] = 0; + p_flag[2] = 0; } iarg += 4; @@ -856,6 +855,10 @@ void FixRigid::setup(int vflag) torque[ibody][2] = all[ibody][2]; } + // enforce 2d body forces and torques + + if (dimension == 2) enforce2d(); + // zero langextra in case Langevin thermostat not used // no point to calling post_force() here since langextra // is only added to fcm/torque in final_integrate() @@ -936,6 +939,131 @@ void FixRigid::initial_integrate(int vflag) set_xv(); } +/* ---------------------------------------------------------------------- + remap xcm of each rigid body back into periodic simulation box + done during pre_neighbor so will be after call to pbc() + and after fix_deform::pre_exchange() may have flipped box + use domain->remap() in case xcm is far away from box + due to first-time definition of rigid body in setup_bodies_static() + or due to box flip + also adjust imagebody = rigid body image flags, due to xcm remap + also reset body xcmimage flags of all atoms in bodies + xcmimage flags are relative to xcm so that body can be unwrapped + if don't do this, would need xcm to move with true image flags + then a body could end up very far away from box + set_xv() will then compute huge displacements every step to + reset coords of all body atoms to be back inside the box, + ditto for triclinic box flip, which causes numeric problems +------------------------------------------------------------------------- */ + +void FixRigid::pre_neighbor() +{ + for (int ibody = 0; ibody < nbody; ibody++) + domain->remap(xcm[ibody],imagebody[ibody]); + image_shift(); +} + +/* ---------------------------------------------------------------------- */ + +void FixRigid::post_force(int /*vflag*/) +{ + if (langflag) apply_langevin_thermostat(); + if (earlyflag) compute_forces_and_torques(); +} + +/* ---------------------------------------------------------------------- */ + +void FixRigid::final_integrate() +{ + int ibody; + double dtfm; + + // compute forces and torques (after all post_force contributions) + // if 2d model, enforce2d() on body forces/torques + + if (!earlyflag) compute_forces_and_torques(); + if (dimension == 2) enforce2d(); + + // update vcm and angmom + // fflag,tflag = 0 for some dimensions in 2d + + for (ibody = 0; ibody < nbody; ibody++) { + + // update vcm by 1/2 step + + dtfm = dtf / masstotal[ibody]; + vcm[ibody][0] += dtfm * fcm[ibody][0] * fflag[ibody][0]; + vcm[ibody][1] += dtfm * fcm[ibody][1] * fflag[ibody][1]; + vcm[ibody][2] += dtfm * fcm[ibody][2] * fflag[ibody][2]; + + // update angular momentum by 1/2 step + + angmom[ibody][0] += dtf * torque[ibody][0] * tflag[ibody][0]; + angmom[ibody][1] += dtf * torque[ibody][1] * tflag[ibody][1]; + angmom[ibody][2] += dtf * torque[ibody][2] * tflag[ibody][2]; + + MathExtra::angmom_to_omega(angmom[ibody],ex_space[ibody],ey_space[ibody], + ez_space[ibody],inertia[ibody],omega[ibody]); + } + + // set velocity/rotation of atoms in rigid bodies + // virial is already setup from initial_integrate + + set_v(); +} + +/* ---------------------------------------------------------------------- */ + +void FixRigid::initial_integrate_respa(int vflag, int ilevel, int /*iloop*/) +{ + dtv = step_respa[ilevel]; + dtf = 0.5 * step_respa[ilevel] * force->ftm2v; + dtq = 0.5 * step_respa[ilevel]; + + if (ilevel == 0) initial_integrate(vflag); + else final_integrate(); +} + +/* ---------------------------------------------------------------------- */ + +void FixRigid::final_integrate_respa(int ilevel, int /*iloop*/) +{ + dtf = 0.5 * step_respa[ilevel] * force->ftm2v; + final_integrate(); +} + +/* ---------------------------------------------------------------------- + reset body xcmimage flags of atoms in bodies + xcmimage flags are relative to xcm so that body can be unwrapped + xcmimage = true image flag - imagebody flag +------------------------------------------------------------------------- */ + +void FixRigid::image_shift() +{ + int ibody; + imageint tdim,bdim,xdim[3]; + + imageint *image = atom->image; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) { + if (body[i] < 0) continue; + ibody = body[i]; + + tdim = image[i] & IMGMASK; + bdim = imagebody[ibody] & IMGMASK; + xdim[0] = IMGMAX + tdim - bdim; + tdim = (image[i] >> IMGBITS) & IMGMASK; + bdim = (imagebody[ibody] >> IMGBITS) & IMGMASK; + xdim[1] = IMGMAX + tdim - bdim; + tdim = image[i] >> IMG2BITS; + bdim = imagebody[ibody] >> IMG2BITS; + xdim[2] = IMGMAX + tdim - bdim; + + xcmimage[i] = (xdim[2] << IMG2BITS) | (xdim[1] << IMGBITS) | xdim[0]; + } +} + /* ---------------------------------------------------------------------- apply Langevin thermostat to all 6 DOF of rigid bodies computed by proc 0, broadcast to other procs @@ -991,31 +1119,6 @@ void FixRigid::apply_langevin_thermostat() MPI_Bcast(&langextra[0][0],6*nbody,MPI_DOUBLE,0,world); } -/* ---------------------------------------------------------------------- - called from FixEnforce2d post_force() for 2d problems - zero all body values that should be zero for 2d model -------------------------------------------------------------------------- */ - -void FixRigid::enforce2d() -{ - for (int ibody = 0; ibody < nbody; ibody++) { - xcm[ibody][2] = 0.0; - vcm[ibody][2] = 0.0; - fcm[ibody][2] = 0.0; - torque[ibody][0] = 0.0; - torque[ibody][1] = 0.0; - angmom[ibody][0] = 0.0; - angmom[ibody][1] = 0.0; - omega[ibody][0] = 0.0; - omega[ibody][1] = 0.0; - if (langflag && langextra) { - langextra[ibody][2] = 0.0; - langextra[ibody][3] = 0.0; - langextra[ibody][4] = 0.0; - } - } -} - /* ---------------------------------------------------------------------- */ void FixRigid::compute_forces_and_torques() @@ -1093,124 +1196,28 @@ void FixRigid::compute_forces_and_torques() } } -/* ---------------------------------------------------------------------- */ - -void FixRigid::post_force(int /*vflag*/) -{ - if (langflag) apply_langevin_thermostat(); - if (earlyflag) compute_forces_and_torques(); -} - -/* ---------------------------------------------------------------------- */ - -void FixRigid::final_integrate() -{ - int ibody; - double dtfm; - - if (!earlyflag) compute_forces_and_torques(); - - // update vcm and angmom - // fflag,tflag = 0 for some dimensions in 2d - - for (ibody = 0; ibody < nbody; ibody++) { - - // update vcm by 1/2 step - - dtfm = dtf / masstotal[ibody]; - vcm[ibody][0] += dtfm * fcm[ibody][0] * fflag[ibody][0]; - vcm[ibody][1] += dtfm * fcm[ibody][1] * fflag[ibody][1]; - vcm[ibody][2] += dtfm * fcm[ibody][2] * fflag[ibody][2]; - - // update angular momentum by 1/2 step - - angmom[ibody][0] += dtf * torque[ibody][0] * tflag[ibody][0]; - angmom[ibody][1] += dtf * torque[ibody][1] * tflag[ibody][1]; - angmom[ibody][2] += dtf * torque[ibody][2] * tflag[ibody][2]; - - MathExtra::angmom_to_omega(angmom[ibody],ex_space[ibody],ey_space[ibody], - ez_space[ibody],inertia[ibody],omega[ibody]); - } - - // set velocity/rotation of atoms in rigid bodies - // virial is already setup from initial_integrate - - set_v(); -} - -/* ---------------------------------------------------------------------- */ - -void FixRigid::initial_integrate_respa(int vflag, int ilevel, int /*iloop*/) -{ - dtv = step_respa[ilevel]; - dtf = 0.5 * step_respa[ilevel] * force->ftm2v; - dtq = 0.5 * step_respa[ilevel]; - - if (ilevel == 0) initial_integrate(vflag); - else final_integrate(); -} - -/* ---------------------------------------------------------------------- */ - -void FixRigid::final_integrate_respa(int ilevel, int /*iloop*/) -{ - dtf = 0.5 * step_respa[ilevel] * force->ftm2v; - final_integrate(); -} - /* ---------------------------------------------------------------------- - remap xcm of each rigid body back into periodic simulation box - done during pre_neighbor so will be after call to pbc() - and after fix_deform::pre_exchange() may have flipped box - use domain->remap() in case xcm is far away from box - due to first-time definition of rigid body in setup_bodies_static() - or due to box flip - also adjust imagebody = rigid body image flags, due to xcm remap - also reset body xcmimage flags of all atoms in bodies - xcmimage flags are relative to xcm so that body can be unwrapped - if don't do this, would need xcm to move with true image flags - then a body could end up very far away from box - set_xv() will then compute huge displacements every step to - reset coords of all body atoms to be back inside the box, - ditto for triclinic box flip, which causes numeric problems + called from FixEnforce2d post_force() for 2d problems + zero all body values that should be zero for 2d model ------------------------------------------------------------------------- */ -void FixRigid::pre_neighbor() +void FixRigid::enforce2d() { - for (int ibody = 0; ibody < nbody; ibody++) - domain->remap(xcm[ibody],imagebody[ibody]); - image_shift(); -} - -/* ---------------------------------------------------------------------- - reset body xcmimage flags of atoms in bodies - xcmimage flags are relative to xcm so that body can be unwrapped - xcmimage = true image flag - imagebody flag -------------------------------------------------------------------------- */ - -void FixRigid::image_shift() -{ - int ibody; - imageint tdim,bdim,xdim[3]; - - imageint *image = atom->image; - int nlocal = atom->nlocal; - - for (int i = 0; i < nlocal; i++) { - if (body[i] < 0) continue; - ibody = body[i]; - - tdim = image[i] & IMGMASK; - bdim = imagebody[ibody] & IMGMASK; - xdim[0] = IMGMAX + tdim - bdim; - tdim = (image[i] >> IMGBITS) & IMGMASK; - bdim = (imagebody[ibody] >> IMGBITS) & IMGMASK; - xdim[1] = IMGMAX + tdim - bdim; - tdim = image[i] >> IMG2BITS; - bdim = imagebody[ibody] >> IMG2BITS; - xdim[2] = IMGMAX + tdim - bdim; - - xcmimage[i] = (xdim[2] << IMG2BITS) | (xdim[1] << IMGBITS) | xdim[0]; + for (int ibody = 0; ibody < nbody; ibody++) { + xcm[ibody][2] = 0.0; + vcm[ibody][2] = 0.0; + fcm[ibody][2] = 0.0; + torque[ibody][0] = 0.0; + torque[ibody][1] = 0.0; + angmom[ibody][0] = 0.0; + angmom[ibody][1] = 0.0; + omega[ibody][0] = 0.0; + omega[ibody][1] = 0.0; + if (langflag && langextra) { + langextra[ibody][2] = 0.0; + langextra[ibody][3] = 0.0; + langextra[ibody][4] = 0.0; + } } } @@ -1280,7 +1287,7 @@ int FixRigid::dof(int tgroup) int n = 0; nlinear = 0; - if (domain->dimension == 3) { + if (dimension == 3) { for (int ibody = 0; ibody < nbody; ibody++) if (nall[ibody]+mall[ibody] == nrigid[ibody]) { n += 3*nall[ibody] + 6*mall[ibody] - 6; @@ -1290,7 +1297,7 @@ int FixRigid::dof(int tgroup) nlinear++; } } - } else if (domain->dimension == 2) { + } else if (dimension == 2) { for (int ibody = 0; ibody < nbody; ibody++) if (nall[ibody]+mall[ibody] == nrigid[ibody]) n += 2*nall[ibody] + 3*mall[ibody] - 3; @@ -1382,6 +1389,7 @@ void FixRigid::set_xv() // x = displacement from center-of-mass, based on body orientation // v = vcm + omega around center-of-mass + // enforce 2d x and v MathExtra::matvec(ex_space[ibody],ey_space[ibody], ez_space[ibody],displace[i],x[i]); @@ -1390,6 +1398,11 @@ void FixRigid::set_xv() v[i][1] = omega[ibody][2]*x[i][0] - omega[ibody][0]*x[i][2] + vcm[ibody][1]; v[i][2] = omega[ibody][0]*x[i][1] - omega[ibody][1]*x[i][0] + vcm[ibody][2]; + if (dimension == 2) { + x[i][2] = 0.0; + v[i][2] = 0.0; + } + // add center of mass to displacement // map back into periodic box via xbox,ybox,zbox // for triclinic, add in box tilt factors as well @@ -1541,10 +1554,15 @@ void FixRigid::set_v() v2 = v[i][2]; } + // compute new v + // enforce 2d v + v[i][0] = omega[ibody][1]*delta[2] - omega[ibody][2]*delta[1] + vcm[ibody][0]; v[i][1] = omega[ibody][2]*delta[0] - omega[ibody][0]*delta[2] + vcm[ibody][1]; v[i][2] = omega[ibody][0]*delta[1] - omega[ibody][1]*delta[0] + vcm[ibody][2]; + if (dimension == 2) v[i][2] = 0.0; + // virial = unwrapped coords dotted into body constraint force // body constraint force = implied force due to v change minus f external // assume f does not include forces internal to body diff --git a/src/RIGID/fix_rigid.h b/src/RIGID/fix_rigid.h index 1e94adec09..df0bcbda0c 100644 --- a/src/RIGID/fix_rigid.h +++ b/src/RIGID/fix_rigid.h @@ -50,7 +50,6 @@ class FixRigid : public Fix { void pre_neighbor() override; int dof(int) override; void deform(int) override; - void enforce2d() override; void reset_dt() override; void zero_momentum() override; void zero_rotation() override; @@ -147,6 +146,7 @@ class FixRigid : public Fix { void setup_bodies_dynamic(); void apply_langevin_thermostat(); void compute_forces_and_torques(); + void enforce2d(); void readfile(int, double *, double **, double **, double **, imageint *, int *); }; diff --git a/src/RIGID/fix_rigid_small.cpp b/src/RIGID/fix_rigid_small.cpp index 089c644f1e..4f678cb14c 100644 --- a/src/RIGID/fix_rigid_small.cpp +++ b/src/RIGID/fix_rigid_small.cpp @@ -72,7 +72,6 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : thermo_virial = 1; create_attribute = 1; dof_flag = 1; - enforce2d_flag = 1; stores_ids = 1; centroidstressflag = CENTROID_AVAIL; @@ -82,6 +81,7 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : // perform initial allocation of atom-based arrays // register with Atom class + dimension = domain->dimension; extended = orientflag = dorientflag = customflag = 0; bodyown = nullptr; bodytag = nullptr; @@ -258,8 +258,8 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : p_period[0] = p_period[1] = p_period[2] = utils::numeric(FLERR,arg[iarg+3],false,lmp); p_flag[0] = p_flag[1] = p_flag[2] = 1; - if (domain->dimension == 2) { - p_start[2] = p_stop[2] = p_period[2] = 0.0; + if (dimension == 2) { + p_start[2] = p_stop[2] = p_period[2] = 0.0; p_flag[2] = 0; } iarg += 4; @@ -273,9 +273,9 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : p_period[0] = p_period[1] = p_period[2] = utils::numeric(FLERR,arg[iarg+3],false,lmp); p_flag[0] = p_flag[1] = p_flag[2] = 1; - if (domain->dimension == 2) { + if (dimension == 2) { p_start[2] = p_stop[2] = p_period[2] = 0.0; - p_flag[2] = 0; + p_flag[2] = 0; } iarg += 4; @@ -383,7 +383,7 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : for (i = 0; i < 3; i++) if (p_flag[i]) pstat_flag = 1; - if (pcouple == XYZ || (domain->dimension == 2 && pcouple == XY)) pstyle = ISO; + if (pcouple == XYZ || (dimension == 2 && pcouple == XY)) pstyle = ISO; else pstyle = ANISO; // create rigid bodies based on molecule or custom ID @@ -690,6 +690,10 @@ void FixRigidSmall::setup(int vflag) } } + // enforce 2d body forces and torques + + if (dimension == 2) enforce2d(); + // reverse communicate fcm, torque of all bodies commflag = FORCE_TORQUE; @@ -780,6 +784,151 @@ void FixRigidSmall::initial_integrate(int vflag) set_xv(); } +/* ---------------------------------------------------------------------- + remap xcm of each rigid body back into periodic simulation box + done during pre_neighbor so will be after call to pbc() + and after fix_deform::pre_exchange() may have flipped box + use domain->remap() in case xcm is far away from box + due to first-time definition of rigid body in setup_bodies_static() + or due to box flip + also adjust imagebody = rigid body image flags, due to xcm remap + then communicate bodies so other procs will know of changes to body xcm + then adjust xcmimage flags of all atoms in bodies via image_shift() + for two effects + (1) change in true image flags due to pbc() call during exchange + (2) change in imagebody due to xcm remap + xcmimage flags are always -1,0,-1 so that body can be unwrapped + around in-box xcm and stay close to simulation box + if just inferred unwrapped from atom image flags, + then a body could end up very far away + when unwrapped by true image flags + then set_xv() will compute huge displacements every step to reset coords of + all the body atoms to be back inside the box, ditto for triclinic box flip + note: so just want to avoid that numeric problem? +------------------------------------------------------------------------- */ + +void FixRigidSmall::pre_neighbor() +{ + for (int ibody = 0; ibody < nlocal_body; ibody++) { + Body *b = &body[ibody]; + domain->remap(b->xcm,b->image); + } + + nghost_body = 0; + commflag = FULL_BODY; + comm->forward_comm(this); + reset_atom2body(); + //check(4); + + image_shift(); +} + +/* ---------------------------------------------------------------------- */ + +void FixRigidSmall::post_force(int /*vflag*/) +{ + if (langflag) apply_langevin_thermostat(); + if (earlyflag) compute_forces_and_torques(); +} + +/* ---------------------------------------------------------------------- */ + +void FixRigidSmall::final_integrate() +{ + double dtfm; + + //check(3); + + // compute forces and torques (after all post_force contributions) + // if 2d model, enforce2d() on body forces/torques + + if (!earlyflag) compute_forces_and_torques(); + if (dimension == 2) enforce2d(); + + // update vcm and angmom, recompute omega + + for (int ibody = 0; ibody < nlocal_body; ibody++) { + Body *b = &body[ibody]; + + // update vcm by 1/2 step + + dtfm = dtf / b->mass; + b->vcm[0] += dtfm * b->fcm[0]; + b->vcm[1] += dtfm * b->fcm[1]; + b->vcm[2] += dtfm * b->fcm[2]; + + // update angular momentum by 1/2 step + + b->angmom[0] += dtf * b->torque[0]; + b->angmom[1] += dtf * b->torque[1]; + b->angmom[2] += dtf * b->torque[2]; + + MathExtra::angmom_to_omega(b->angmom,b->ex_space,b->ey_space, + b->ez_space,b->inertia,b->omega); + } + + // forward communicate updated info of all bodies + + commflag = FINAL; + comm->forward_comm(this,10); + + // set velocity/rotation of atoms in rigid bodies + // virial is already setup from initial_integrate + + set_v(); +} + +/* ---------------------------------------------------------------------- */ + +void FixRigidSmall::initial_integrate_respa(int vflag, int ilevel, int /*iloop*/) +{ + dtv = step_respa[ilevel]; + dtf = 0.5 * step_respa[ilevel] * force->ftm2v; + dtq = 0.5 * step_respa[ilevel]; + + if (ilevel == 0) initial_integrate(vflag); + else final_integrate(); +} + +/* ---------------------------------------------------------------------- */ + +void FixRigidSmall::final_integrate_respa(int ilevel, int /*iloop*/) +{ + dtf = 0.5 * step_respa[ilevel] * force->ftm2v; + final_integrate(); +} + +/* ---------------------------------------------------------------------- + reset body xcmimage flags of atoms in bodies + xcmimage flags are relative to xcm so that body can be unwrapped + xcmimage = true image flag - imagebody flag +------------------------------------------------------------------------- */ + +void FixRigidSmall::image_shift() +{ + imageint tdim,bdim,xdim[3]; + + imageint *image = atom->image; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) { + if (atom2body[i] < 0) continue; + Body *b = &body[atom2body[i]]; + + tdim = image[i] & IMGMASK; + bdim = b->image & IMGMASK; + xdim[0] = IMGMAX + tdim - bdim; + tdim = (image[i] >> IMGBITS) & IMGMASK; + bdim = (b->image >> IMGBITS) & IMGMASK; + xdim[1] = IMGMAX + tdim - bdim; + tdim = image[i] >> IMG2BITS; + bdim = b->image >> IMG2BITS; + xdim[2] = IMGMAX + tdim - bdim; + + xcmimage[i] = (xdim[2] << IMG2BITS) | (xdim[1] << IMGBITS) | xdim[0]; + } +} + /* ---------------------------------------------------------------------- apply Langevin thermostat to all 6 DOF of rigid bodies I own unlike fix langevin, this stores extra force in extra arrays, @@ -845,52 +994,9 @@ void FixRigidSmall::apply_langevin_thermostat() // convert langevin torques from body frame back to space frame MathExtra::matvec(ex_space,ey_space,ez_space,tbody,&langextra[ibody][3]); - - // enforce 2d motion - - if (domain->dimension == 2) - langextra[ibody][2] = langextra[ibody][3] = langextra[ibody][4] = 0.0; } } -/* ---------------------------------------------------------------------- - called from FixEnforce post_force() for 2d problems - zero all body values that should be zero for 2d model -------------------------------------------------------------------------- */ - -void FixRigidSmall::enforce2d() -{ - Body *b; - - for (int ibody = 0; ibody < nlocal_body; ibody++) { - b = &body[ibody]; - b->xcm[2] = 0.0; - b->vcm[2] = 0.0; - b->fcm[2] = 0.0; - b->xgc[2] = 0.0; - b->torque[0] = 0.0; - b->torque[1] = 0.0; - b->angmom[0] = 0.0; - b->angmom[1] = 0.0; - b->omega[0] = 0.0; - b->omega[1] = 0.0; - if (langflag && langextra) { - langextra[ibody][2] = 0.0; - langextra[ibody][3] = 0.0; - langextra[ibody][4] = 0.0; - } - } -} - -/* ---------------------------------------------------------------------- */ - -void FixRigidSmall::post_force(int /*vflag*/) -{ - if (langflag) apply_langevin_thermostat(); - if (earlyflag) compute_forces_and_torques(); -} - - /* ---------------------------------------------------------------------- */ void FixRigidSmall::compute_forces_and_torques() @@ -988,136 +1094,32 @@ void FixRigidSmall::compute_forces_and_torques() } } -/* ---------------------------------------------------------------------- */ - -void FixRigidSmall::final_integrate() -{ - double dtfm; - - //check(3); - - if (!earlyflag) compute_forces_and_torques(); - - // update vcm and angmom, recompute omega - - for (int ibody = 0; ibody < nlocal_body; ibody++) { - Body *b = &body[ibody]; - - // update vcm by 1/2 step - - dtfm = dtf / b->mass; - b->vcm[0] += dtfm * b->fcm[0]; - b->vcm[1] += dtfm * b->fcm[1]; - b->vcm[2] += dtfm * b->fcm[2]; - - // update angular momentum by 1/2 step - - b->angmom[0] += dtf * b->torque[0]; - b->angmom[1] += dtf * b->torque[1]; - b->angmom[2] += dtf * b->torque[2]; - - MathExtra::angmom_to_omega(b->angmom,b->ex_space,b->ey_space, - b->ez_space,b->inertia,b->omega); - } - - // forward communicate updated info of all bodies - - commflag = FINAL; - comm->forward_comm(this,10); - - // set velocity/rotation of atoms in rigid bodies - // virial is already setup from initial_integrate - - set_v(); -} - -/* ---------------------------------------------------------------------- */ - -void FixRigidSmall::initial_integrate_respa(int vflag, int ilevel, int /*iloop*/) -{ - dtv = step_respa[ilevel]; - dtf = 0.5 * step_respa[ilevel] * force->ftm2v; - dtq = 0.5 * step_respa[ilevel]; - - if (ilevel == 0) initial_integrate(vflag); - else final_integrate(); -} - -/* ---------------------------------------------------------------------- */ - -void FixRigidSmall::final_integrate_respa(int ilevel, int /*iloop*/) -{ - dtf = 0.5 * step_respa[ilevel] * force->ftm2v; - final_integrate(); -} - /* ---------------------------------------------------------------------- - remap xcm of each rigid body back into periodic simulation box - done during pre_neighbor so will be after call to pbc() - and after fix_deform::pre_exchange() may have flipped box - use domain->remap() in case xcm is far away from box - due to first-time definition of rigid body in setup_bodies_static() - or due to box flip - also adjust imagebody = rigid body image flags, due to xcm remap - then communicate bodies so other procs will know of changes to body xcm - then adjust xcmimage flags of all atoms in bodies via image_shift() - for two effects - (1) change in true image flags due to pbc() call during exchange - (2) change in imagebody due to xcm remap - xcmimage flags are always -1,0,-1 so that body can be unwrapped - around in-box xcm and stay close to simulation box - if just inferred unwrapped from atom image flags, - then a body could end up very far away - when unwrapped by true image flags - then set_xv() will compute huge displacements every step to reset coords of - all the body atoms to be back inside the box, ditto for triclinic box flip - note: so just want to avoid that numeric problem? + called from FixEnforce post_force() for 2d problems + zero all body values that should be zero for 2d model ------------------------------------------------------------------------- */ -void FixRigidSmall::pre_neighbor() +void FixRigidSmall::enforce2d() { + Body *b; + for (int ibody = 0; ibody < nlocal_body; ibody++) { - Body *b = &body[ibody]; - domain->remap(b->xcm,b->image); - } - - nghost_body = 0; - commflag = FULL_BODY; - comm->forward_comm(this); - reset_atom2body(); - //check(4); - - image_shift(); -} - -/* ---------------------------------------------------------------------- - reset body xcmimage flags of atoms in bodies - xcmimage flags are relative to xcm so that body can be unwrapped - xcmimage = true image flag - imagebody flag -------------------------------------------------------------------------- */ - -void FixRigidSmall::image_shift() -{ - imageint tdim,bdim,xdim[3]; - - imageint *image = atom->image; - int nlocal = atom->nlocal; - - for (int i = 0; i < nlocal; i++) { - if (atom2body[i] < 0) continue; - Body *b = &body[atom2body[i]]; - - tdim = image[i] & IMGMASK; - bdim = b->image & IMGMASK; - xdim[0] = IMGMAX + tdim - bdim; - tdim = (image[i] >> IMGBITS) & IMGMASK; - bdim = (b->image >> IMGBITS) & IMGMASK; - xdim[1] = IMGMAX + tdim - bdim; - tdim = image[i] >> IMG2BITS; - bdim = b->image >> IMG2BITS; - xdim[2] = IMGMAX + tdim - bdim; - - xcmimage[i] = (xdim[2] << IMG2BITS) | (xdim[1] << IMGBITS) | xdim[0]; + b = &body[ibody]; + b->xcm[2] = 0.0; + b->vcm[2] = 0.0; + b->fcm[2] = 0.0; + b->xgc[2] = 0.0; + b->torque[0] = 0.0; + b->torque[1] = 0.0; + b->angmom[0] = 0.0; + b->angmom[1] = 0.0; + b->omega[0] = 0.0; + b->omega[1] = 0.0; + if (langflag && langextra) { + langextra[ibody][2] = 0.0; + langextra[ibody][3] = 0.0; + langextra[ibody][4] = 0.0; + } } } @@ -1200,7 +1202,7 @@ int FixRigidSmall::dof(int tgroup) int n = 0; nlinear = 0; - if (domain->dimension == 3) { + if (dimension == 3) { for (int ibody = 0; ibody < nlocal_body; ibody++) { if (counts[ibody][0]+counts[ibody][1] == counts[ibody][2]) { n += 3*counts[ibody][0] + 6*counts[ibody][1] - 6; @@ -1211,7 +1213,7 @@ int FixRigidSmall::dof(int tgroup) } } } - } else if (domain->dimension == 2) { + } else if (dimension == 2) { for (int ibody = 0; ibody < nlocal_body; ibody++) if (counts[ibody][0]+counts[ibody][1] == counts[ibody][2]) n += 2*counts[ibody][0] + 3*counts[ibody][1] - 3; @@ -1297,13 +1299,19 @@ void FixRigidSmall::set_xv() // x = displacement from center-of-mass, based on body orientation // v = vcm + omega around center-of-mass - + // enforce 2d x and v + MathExtra::matvec(b->ex_space,b->ey_space,b->ez_space,displace[i],x[i]); v[i][0] = b->omega[1]*x[i][2] - b->omega[2]*x[i][1] + b->vcm[0]; v[i][1] = b->omega[2]*x[i][0] - b->omega[0]*x[i][2] + b->vcm[1]; v[i][2] = b->omega[0]*x[i][1] - b->omega[1]*x[i][0] + b->vcm[2]; + if (dimension == 2) { + x[i][2] = 0.0; + v[i][2] = 0.0; + } + // add center of mass to displacement // map back into periodic box via xbox,ybox,zbox // for triclinic, add in box tilt factors as well @@ -1345,6 +1353,7 @@ void FixRigidSmall::set_xv() } // update the position of geometric center + for (int ibody = 0; ibody < nlocal_body + nghost_body; ibody++) { Body *b = &body[ibody]; MathExtra::matvec(b->ex_space,b->ey_space,b->ez_space, @@ -1462,10 +1471,15 @@ void FixRigidSmall::set_v() v2 = v[i][2]; } + // compute new v + // enforce 2d v + v[i][0] = b->omega[1]*delta[2] - b->omega[2]*delta[1] + b->vcm[0]; v[i][1] = b->omega[2]*delta[0] - b->omega[0]*delta[2] + b->vcm[1]; v[i][2] = b->omega[0]*delta[1] - b->omega[1]*delta[0] + b->vcm[2]; + if (dimension == 2) v[i][2] = 0.0; + // virial = unwrapped coords dotted into body constraint force // body constraint force = implied force due to v change minus f external // assume f does not include forces internal to body diff --git a/src/RIGID/fix_rigid_small.h b/src/RIGID/fix_rigid_small.h index b473026fdb..144b2aad70 100644 --- a/src/RIGID/fix_rigid_small.h +++ b/src/RIGID/fix_rigid_small.h @@ -56,7 +56,6 @@ class FixRigidSmall : public Fix { void pre_neighbor() override; int dof(int) override; void deform(int) override; - void enforce2d() override; void reset_dt() override; void zero_momentum() override; void zero_rotation() override; @@ -72,6 +71,7 @@ class FixRigidSmall : public Fix { double dtv, dtf, dtq; double *step_respa; int triclinic; + int dimension; char *inpfile; // file to read rigid body attributes from int setupflag; // 1 if body properties are setup, else 0 @@ -203,6 +203,7 @@ class FixRigidSmall : public Fix { void setup_bodies_dynamic(); void apply_langevin_thermostat(); void compute_forces_and_torques(); + void enforce2d(); void readfile(int, double **, int *); void grow_body(); void reset_atom2body(); diff --git a/src/fix.cpp b/src/fix.cpp index 9b50d872ea..372134f8eb 100644 --- a/src/fix.cpp +++ b/src/fix.cpp @@ -72,7 +72,6 @@ Fix::Fix(LAMMPS *lmp, int /*narg*/, char **arg) : dynamic = 0; dof_flag = 0; special_alter_flag = 0; - enforce2d_flag = 0; respa_level_support = 0; respa_level = -1; maxexchange = 0; diff --git a/src/fix.h b/src/fix.h index ea82c1677b..958ae05d95 100644 --- a/src/fix.h +++ b/src/fix.h @@ -72,7 +72,6 @@ class Fix : protected Pointers { int dynamic_group_allow; // 1 if can be used with dynamic group, else 0 int dof_flag; // 1 if has dof() method (not min_dof()) int special_alter_flag; // 1 if has special_alter() meth for spec lists - int enforce2d_flag; // 1 if has enforce2d method int respa_level_support; // 1 if fix supports fix_modify respa int respa_level; // which respa level to apply fix (1-Nrespa) int maxexchange; // max # of per-atom values for Comm::exchange() @@ -236,7 +235,6 @@ class Fix : protected Pointers { virtual void deform(int) {} virtual void reset_target(double) {} virtual void reset_dt() {} - virtual void enforce2d() {} virtual void read_data_header(char *) {} virtual void read_data_section(char *, int, char *, tagint) {} diff --git a/src/fix_enforce2d.cpp b/src/fix_enforce2d.cpp index c6816c2355..c13e2147a3 100644 --- a/src/fix_enforce2d.cpp +++ b/src/fix_enforce2d.cpp @@ -27,12 +27,9 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ FixEnforce2D::FixEnforce2D(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), - flist(nullptr) + Fix(lmp, narg, arg) { if (narg != 3) error->all(FLERR,"Illegal fix enforce2d command"); - - nfixlist = 0; } /* ---------------------------------------------------------------------- */ @@ -40,8 +37,6 @@ FixEnforce2D::FixEnforce2D(LAMMPS *lmp, int narg, char **arg) : FixEnforce2D::~FixEnforce2D() { if (copymode) return; - - delete [] flist; } /* ---------------------------------------------------------------------- */ @@ -61,29 +56,6 @@ void FixEnforce2D::init() { if (domain->dimension == 3) error->all(FLERR,"Cannot use fix enforce2d with 3d simulation"); - - // list of fixes with enforce2d methods - - nfixlist = 0; - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->enforce2d_flag) nfixlist++; - - if (nfixlist) { - int myindex = -1; - delete [] flist; - flist = new Fix*[nfixlist]; - nfixlist = 0; - for (int i = 0; i < modify->nfix; i++) { - if (modify->fix[i]->enforce2d_flag) { - if (myindex < 0) - flist[nfixlist++] = modify->fix[i]; - else - error->all(FLERR,"Fix enforce2d must be defined after fix {}", - modify->fix[i]->style); - } - if (modify->fix[i] == this) myindex = i; - } - } } /* ---------------------------------------------------------------------- */ @@ -153,12 +125,6 @@ void FixEnforce2D::post_force(int /*vflag*/) torque[i][1] = 0.0; } } - - // invoke other fixes that enforce 2d - // fix rigid variants - - for (int m = 0; m < nfixlist; m++) - flist[m]->enforce2d(); } /* ---------------------------------------------------------------------- */ diff --git a/src/fix_enforce2d.h b/src/fix_enforce2d.h index 4572785158..95429ba7dc 100644 --- a/src/fix_enforce2d.h +++ b/src/fix_enforce2d.h @@ -35,10 +35,6 @@ class FixEnforce2D : public Fix { void post_force(int) override; void post_force_respa(int, int, int) override; void min_post_force(int) override; - - protected: - int nfixlist; - class Fix **flist; }; } // namespace LAMMPS_NS From ac465baf80b388c8ad6837e89128857e542bbf94 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 3 Apr 2023 22:29:50 -0400 Subject: [PATCH 002/204] fix compilation issue with KOKKOS --- src/KOKKOS/fix_enforce2d_kokkos.cpp | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/src/KOKKOS/fix_enforce2d_kokkos.cpp b/src/KOKKOS/fix_enforce2d_kokkos.cpp index 11402e4568..24cf307827 100644 --- a/src/KOKKOS/fix_enforce2d_kokkos.cpp +++ b/src/KOKKOS/fix_enforce2d_kokkos.cpp @@ -17,15 +17,14 @@ ------------------------------------------------------------------------- */ #include "fix_enforce2d_kokkos.h" + #include "atom_masks.h" #include "atom_kokkos.h" #include "comm.h" #include "error.h" - using namespace LAMMPS_NS; - template FixEnforce2DKokkos::FixEnforce2DKokkos(LAMMPS *lmp, int narg, char **arg) : FixEnforce2D(lmp, narg, arg) @@ -34,21 +33,16 @@ FixEnforce2DKokkos::FixEnforce2DKokkos(LAMMPS *lmp, int narg, char * atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; - datamask_read = V_MASK | F_MASK | OMEGA_MASK | MASK_MASK - | TORQUE_MASK | ANGMOM_MASK; - - datamask_modify = V_MASK | F_MASK | OMEGA_MASK - | TORQUE_MASK | ANGMOM_MASK; + datamask_read = V_MASK | F_MASK | OMEGA_MASK | MASK_MASK | TORQUE_MASK | ANGMOM_MASK; + datamask_modify = V_MASK | F_MASK | OMEGA_MASK | TORQUE_MASK | ANGMOM_MASK; } - template void FixEnforce2DKokkos::setup(int vflag) { post_force(vflag); } - template void FixEnforce2DKokkos::post_force(int /*vflag*/) { @@ -66,7 +60,6 @@ void FixEnforce2DKokkos::post_force(int /*vflag*/) if (atomKK->torque_flag) torque = atomKK->k_torque.view(); - mask = atomKK->k_mask.view(); int nlocal = atomKK->nlocal; @@ -125,13 +118,6 @@ void FixEnforce2DKokkos::post_force(int /*vflag*/) copymode = 0; atomKK->modified(execution_space,datamask_modify); - - for (int m = 0; m < nfixlist; m++) { - atomKK->sync(flist[m]->execution_space,flist[m]->datamask_read); - flist[m]->enforce2d(); - atomKK->modified(flist[m]->execution_space,flist[m]->datamask_modify); - } - } From d2565bb1e2fcc2b210c09a0ff55a742dd6e2b635 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 3 Apr 2023 22:30:30 -0400 Subject: [PATCH 003/204] port changes to OPENMP --- src/OPENMP/fix_rigid_nh_omp.cpp | 65 ++++++++++++++------ src/OPENMP/fix_rigid_nh_omp.h | 4 +- src/OPENMP/fix_rigid_omp.cpp | 80 ++++++++++++++++-------- src/OPENMP/fix_rigid_omp.h | 4 +- src/OPENMP/fix_rigid_small_omp.cpp | 98 ++++++++++++++++++++---------- src/OPENMP/fix_rigid_small_omp.h | 4 +- 6 files changed, 175 insertions(+), 80 deletions(-) diff --git a/src/OPENMP/fix_rigid_nh_omp.cpp b/src/OPENMP/fix_rigid_nh_omp.cpp index 2f1b81fd5b..78dcd96f22 100644 --- a/src/OPENMP/fix_rigid_nh_omp.cpp +++ b/src/OPENMP/fix_rigid_nh_omp.cpp @@ -211,16 +211,31 @@ void FixRigidNHOMP::initial_integrate(int vflag) // set coords/orient and velocity/rotation of atoms in rigid bodies // from quarternion and omega - if (triclinic) - if (evflag) - set_xv_thr<1,1>(); - else - set_xv_thr<1,0>(); - else - if (evflag) - set_xv_thr<0,1>(); - else - set_xv_thr<0,0>(); + if (dimension == 2) { + if (triclinic) { + if (evflag) + set_xv_thr<1,1,2>(); + else + set_xv_thr<1,0,2>(); + } else { + if (evflag) + set_xv_thr<0,1,2>(); + else + set_xv_thr<0,0,2>(); + } + } else { + if (triclinic) { + if (evflag) + set_xv_thr<1,1,3>(); + else + set_xv_thr<1,0,3>(); + } else { + if (evflag) + set_xv_thr<0,1,3>(); + else + set_xv_thr<0,0,3>(); + } + } // remap simulation box by full step // redo KSpace coeffs since volume has changed @@ -503,13 +518,23 @@ void FixRigidNHOMP::final_integrate() // virial is already setup from initial_integrate // triclinic only matters for virial calculation. - if (evflag) - if (triclinic) - set_v_thr<1,1>(); + if (dimension == 2) { + if (evflag) + if (triclinic) + set_v_thr<1,1,2>(); + else + set_v_thr<0,1,2>(); else - set_v_thr<0,1>(); - else - set_v_thr<0,0>(); + set_v_thr<0,0,2>(); + } else { + if (evflag) + if (triclinic) + set_v_thr<1,1,3>(); + else + set_v_thr<0,1,3>(); + else + set_v_thr<0,0,3>(); + } // compute current temperature if (tcomputeflag) t_current = temperature->compute_scalar(); @@ -603,7 +628,7 @@ void FixRigidNHOMP::remap() NOTE: this needs to be kept in sync with FixRigidOMP ------------------------------------------------------------------------- */ -template +template void FixRigidNHOMP::set_xv_thr() { auto * _noalias const x = (dbl3_t *) atom->x[0]; @@ -665,6 +690,8 @@ void FixRigidNHOMP::set_xv_thr() v[i].y = omegai.z*x[i].x - omegai.x*x[i].z + vcmi.y; v[i].z = omegai.x*x[i].y - omegai.y*x[i].x + vcmi.z; + if (DIMENSION == 2) x[i].z = v[i].z = 0.0; + // add center of mass to displacement // map back into periodic box via xbox,ybox,zbox // for triclinic, add in box tilt factors as well @@ -803,7 +830,7 @@ void FixRigidNHOMP::set_xv_thr() NOTE: this needs to be kept in sync with FixRigidOMP ------------------------------------------------------------------------- */ -template +template void FixRigidNHOMP::set_v_thr() { auto * _noalias const x = (dbl3_t *) atom->x[0]; @@ -852,6 +879,8 @@ void FixRigidNHOMP::set_v_thr() v[i].y = omegai.z*delta[0] - omegai.x*delta[2] + vcmi.y; v[i].z = omegai.x*delta[1] - omegai.y*delta[0] + vcmi.z; + if (DIMENSION == 2) v[i].z = 0.0; + // virial = unwrapped coords dotted into body constraint force // body constraint force = implied force due to v change minus f external // assume f does not include forces internal to body diff --git a/src/OPENMP/fix_rigid_nh_omp.h b/src/OPENMP/fix_rigid_nh_omp.h index 6b70841058..dcd893b161 100644 --- a/src/OPENMP/fix_rigid_nh_omp.h +++ b/src/OPENMP/fix_rigid_nh_omp.h @@ -30,8 +30,8 @@ class FixRigidNHOMP : public FixRigidNH { virtual void compute_forces_and_torques(); private: // copied from FixRigidOMP - template void set_xv_thr(); - template void set_v_thr(); + template void set_xv_thr(); + template void set_v_thr(); }; } // namespace LAMMPS_NS diff --git a/src/OPENMP/fix_rigid_omp.cpp b/src/OPENMP/fix_rigid_omp.cpp index de381415a0..e2c6e653bc 100644 --- a/src/OPENMP/fix_rigid_omp.cpp +++ b/src/OPENMP/fix_rigid_omp.cpp @@ -16,33 +16,35 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ -#include "omp_compat.h" #include "fix_rigid_omp.h" -#include -#include #include "atom.h" #include "atom_vec_ellipsoid.h" #include "atom_vec_line.h" #include "atom_vec_tri.h" #include "comm.h" -#include "error.h" #include "domain.h" +#include "error.h" +#include "math_const.h" +#include "math_extra.h" +#include "rigid_const.h" + +#include +#include #if defined(_OPENMP) #include #endif - -#include "math_extra.h" -#include "math_const.h" -#include "rigid_const.h" +#include "omp_compat.h" using namespace LAMMPS_NS; using namespace FixConst; using namespace MathConst; using namespace RigidConst; -typedef struct { double x,y,z; } dbl3_t; +typedef struct { + double x, y, z; +} dbl3_t; /* ---------------------------------------------------------------------- */ @@ -92,16 +94,32 @@ void FixRigidOMP::initial_integrate(int vflag) // set coords/orient and velocity/rotation of atoms in rigid bodies // from quarternion and omega - if (triclinic) - if (evflag) - set_xv_thr<1,1>(); - else - set_xv_thr<1,0>(); - else - if (evflag) - set_xv_thr<0,1>(); - else - set_xv_thr<0,0>(); + if (dimension == 2) { + if (triclinic) { + if (evflag) + set_xv_thr<1,1,2>(); + else + set_xv_thr<1,0,2>(); + } else { + if (evflag) + set_xv_thr<0,1,2>(); + else + set_xv_thr<0,0,2>(); + } + } else { + + if (triclinic) { + if (evflag) + set_xv_thr<1,1,3>(); + else + set_xv_thr<1,0,3>(); + } else { + if (evflag) + set_xv_thr<0,1,3>(); + else + set_xv_thr<0,0,3>(); + } + } } /* ---------------------------------------------------------------------- */ @@ -306,13 +324,23 @@ void FixRigidOMP::final_integrate() // virial is already setup from initial_integrate // triclinic only matters for virial calculation. + if (dimension == 2) { if (evflag) if (triclinic) - set_v_thr<1,1>(); + set_v_thr<1,1,2>(); else - set_v_thr<0,1>(); + set_v_thr<0,1,2>(); else - set_v_thr<0,0>(); + set_v_thr<0,0,2>(); + } else { + if (evflag) + if (triclinic) + set_v_thr<1,1,3>(); + else + set_v_thr<0,1,3>(); + else + set_v_thr<0,0,3>(); + } } /* ---------------------------------------------------------------------- @@ -323,7 +351,7 @@ void FixRigidOMP::final_integrate() NOTE: this needs to be kept in sync with FixRigidNHOMP ------------------------------------------------------------------------- */ -template +template void FixRigidOMP::set_xv_thr() { auto * _noalias const x = (dbl3_t *) atom->x[0]; @@ -385,6 +413,8 @@ void FixRigidOMP::set_xv_thr() v[i].y = omegai.z*x[i].x - omegai.x*x[i].z + vcmi.y; v[i].z = omegai.x*x[i].y - omegai.y*x[i].x + vcmi.z; + if (DIMENSION == 2) x[i].z = v[i].z = 0.0; + // add center of mass to displacement // map back into periodic box via xbox,ybox,zbox // for triclinic, add in box tilt factors as well @@ -523,7 +553,7 @@ void FixRigidOMP::set_xv_thr() NOTE: this needs to be kept in sync with FixRigidNHOMP ------------------------------------------------------------------------- */ -template +template void FixRigidOMP::set_v_thr() { auto * _noalias const x = (dbl3_t *) atom->x[0]; @@ -572,6 +602,8 @@ void FixRigidOMP::set_v_thr() v[i].y = omegai.z*delta[0] - omegai.x*delta[2] + vcmi.y; v[i].z = omegai.x*delta[1] - omegai.y*delta[0] + vcmi.z; + if (DIMENSION == 2) v[i].z = 0.0; + // virial = unwrapped coords dotted into body constraint force // body constraint force = implied force due to v change minus f external // assume f does not include forces internal to body diff --git a/src/OPENMP/fix_rigid_omp.h b/src/OPENMP/fix_rigid_omp.h index 679dff7508..618ce5ddf7 100644 --- a/src/OPENMP/fix_rigid_omp.h +++ b/src/OPENMP/fix_rigid_omp.h @@ -35,8 +35,8 @@ class FixRigidOMP : public FixRigid { virtual void compute_forces_and_torques(); private: - template void set_xv_thr(); - template void set_v_thr(); + template void set_xv_thr(); + template void set_v_thr(); }; } // namespace LAMMPS_NS diff --git a/src/OPENMP/fix_rigid_small_omp.cpp b/src/OPENMP/fix_rigid_small_omp.cpp index e11b98b7e1..0eda964368 100644 --- a/src/OPENMP/fix_rigid_small_omp.cpp +++ b/src/OPENMP/fix_rigid_small_omp.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -16,31 +15,36 @@ Contributing author: Axel Kohlmeyer (Temple U) ------------------------------------------------------------------------- */ -#include "omp_compat.h" #include "fix_rigid_small_omp.h" -#include + #include "atom.h" #include "atom_vec_ellipsoid.h" #include "atom_vec_line.h" #include "atom_vec_tri.h" #include "comm.h" #include "domain.h" +#include "math_const.h" +#include "math_extra.h" +#include "rigid_const.h" + +#include + +#include "omp_compat.h" #if defined(_OPENMP) #include #endif -#include "math_extra.h" -#include "math_const.h" -#include "rigid_const.h" - using namespace LAMMPS_NS; using namespace FixConst; using namespace MathConst; using namespace RigidConst; -typedef struct { double x,y,z; } dbl3_t; +typedef struct { + double x, y, z; +} dbl3_t; +// clang-format off /* ---------------------------------------------------------------------- */ void FixRigidSmallOMP::initial_integrate(int vflag) @@ -94,16 +98,32 @@ void FixRigidSmallOMP::initial_integrate(int vflag) // set coords/orient and velocity/rotation of atoms in rigid bodies - if (triclinic) - if (evflag) - set_xv_thr<1,1>(); - else - set_xv_thr<1,0>(); - else - if (evflag) - set_xv_thr<0,1>(); - else - set_xv_thr<0,0>(); + if (dimension == 2) { + if (triclinic) { + if (evflag) + set_xv_thr<1,1,2>(); + else + set_xv_thr<1,0,2>(); + } else { + + if (evflag) + set_xv_thr<0,1,2>(); + else + set_xv_thr<0,0,2>(); + } + } else { + if (triclinic) { + if (evflag) + set_xv_thr<1,1,3>(); + else + set_xv_thr<1,0,3>(); + } else { + if (evflag) + set_xv_thr<0,1,3>(); + else + set_xv_thr<0,0,3>(); + } + } } /* ---------------------------------------------------------------------- */ @@ -218,6 +238,7 @@ void FixRigidSmallOMP::compute_forces_and_torques() void FixRigidSmallOMP::final_integrate() { if (!earlyflag) compute_forces_and_torques(); + if (dimension == 2) enforce2d(); // update vcm and angmom, recompute omega @@ -253,24 +274,34 @@ void FixRigidSmallOMP::final_integrate() // virial is already setup from initial_integrate // triclinic only matters for virial calculation. - if (evflag) - if (triclinic) - set_v_thr<1,1>(); + if (dimension == 2) { + if (evflag) { + if (triclinic) + set_v_thr<1,1,2>(); + else + set_v_thr<0,1,2>(); + } else { + set_v_thr<0,0,2>(); + } + } else { + if (evflag) + if (triclinic) + set_v_thr<1,1,3>(); + else + set_v_thr<0,1,3>(); else - set_v_thr<0,1>(); - else - set_v_thr<0,0>(); + set_v_thr<0,0,3>(); + } } - /* ---------------------------------------------------------------------- set space-frame coords and velocity of each atom in each rigid body set orientation and rotation of extended particles x = Q displace + Xcm, mapped back to periodic box v = Vcm + (W cross (x - Xcm)) -------------------------------------------------------------------------- */ + ------------------------------------------------------------------------- */ -template +template void FixRigidSmallOMP::set_xv_thr() { auto * _noalias const x = (dbl3_t *) atom->x[0]; @@ -329,6 +360,8 @@ void FixRigidSmallOMP::set_xv_thr() v[i].y = b.omega[2]*x[i].x - b.omega[0]*x[i].z + b.vcm[1]; v[i].z = b.omega[0]*x[i].y - b.omega[1]*x[i].x + b.vcm[2]; + if (DIMENSION == 2) x[i].z = v[i].z = 0.0; + // add center of mass to displacement // map back into periodic box via xbox,ybox,zbox // for triclinic, add in box tilt factors as well @@ -463,9 +496,9 @@ void FixRigidSmallOMP::set_xv_thr() set space-frame velocity of each atom in a rigid body set omega and angmom of extended particles v = Vcm + (W cross (x - Xcm)) -------------------------------------------------------------------------- */ + ------------------------------------------------------------------------- */ -template +template void FixRigidSmallOMP::set_v_thr() { auto * _noalias const x = (dbl3_t *) atom->x[0]; @@ -512,6 +545,8 @@ void FixRigidSmallOMP::set_v_thr() v[i].y = b.omega[2]*delta[0] - b.omega[0]*delta[2] + b.vcm[1]; v[i].z = b.omega[0]*delta[1] - b.omega[1]*delta[0] + b.vcm[2]; + if (DIMENSION == 2) v[i].z = 0.0; + // virial = unwrapped coords dotted into body constraint force // body constraint force = implied force due to v change minus f external // assume f does not include forces internal to body @@ -564,8 +599,8 @@ void FixRigidSmallOMP::set_v_thr() } } // end of parallel for - // second part of thread safe virial accumulation - // add global virial component after it was reduced across all threads + // second part of thread safe virial accumulation + // add global virial component after it was reduced across all threads if (EVFLAG) { if (vflag_global) { virial[0] += v0; @@ -624,4 +659,3 @@ void FixRigidSmallOMP::set_v_thr() } } } - diff --git a/src/OPENMP/fix_rigid_small_omp.h b/src/OPENMP/fix_rigid_small_omp.h index 3d8bca1a6d..1accb8a470 100644 --- a/src/OPENMP/fix_rigid_small_omp.h +++ b/src/OPENMP/fix_rigid_small_omp.h @@ -39,8 +39,8 @@ class FixRigidSmallOMP : public FixRigidSmall { virtual void compute_forces_and_torques(); private: - template void set_xv_thr(); - template void set_v_thr(); + template void set_xv_thr(); + template void set_v_thr(); }; } // namespace LAMMPS_NS From 56f760d0d8f7e4d41af2bc83b10314b37e3e7f36 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 3 Apr 2023 22:30:39 -0400 Subject: [PATCH 004/204] whitespace --- src/RIGID/fix_rigid.cpp | 6 +++--- src/RIGID/fix_rigid_small.cpp | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/RIGID/fix_rigid.cpp b/src/RIGID/fix_rigid.cpp index 0d6cbe86ee..11e5b5acf6 100644 --- a/src/RIGID/fix_rigid.cpp +++ b/src/RIGID/fix_rigid.cpp @@ -856,7 +856,7 @@ void FixRigid::setup(int vflag) } // enforce 2d body forces and torques - + if (dimension == 2) enforce2d(); // zero langextra in case Langevin thermostat not used @@ -980,10 +980,10 @@ void FixRigid::final_integrate() // compute forces and torques (after all post_force contributions) // if 2d model, enforce2d() on body forces/torques - + if (!earlyflag) compute_forces_and_torques(); if (dimension == 2) enforce2d(); - + // update vcm and angmom // fflag,tflag = 0 for some dimensions in 2d diff --git a/src/RIGID/fix_rigid_small.cpp b/src/RIGID/fix_rigid_small.cpp index 4f678cb14c..ccaae258fe 100644 --- a/src/RIGID/fix_rigid_small.cpp +++ b/src/RIGID/fix_rigid_small.cpp @@ -691,7 +691,7 @@ void FixRigidSmall::setup(int vflag) } // enforce 2d body forces and torques - + if (dimension == 2) enforce2d(); // reverse communicate fcm, torque of all bodies @@ -841,7 +841,7 @@ void FixRigidSmall::final_integrate() // compute forces and torques (after all post_force contributions) // if 2d model, enforce2d() on body forces/torques - + if (!earlyflag) compute_forces_and_torques(); if (dimension == 2) enforce2d(); @@ -1300,7 +1300,7 @@ void FixRigidSmall::set_xv() // x = displacement from center-of-mass, based on body orientation // v = vcm + omega around center-of-mass // enforce 2d x and v - + MathExtra::matvec(b->ex_space,b->ey_space,b->ez_space,displace[i],x[i]); v[i][0] = b->omega[1]*x[i][2] - b->omega[2]*x[i][1] + b->vcm[0]; @@ -1311,7 +1311,7 @@ void FixRigidSmall::set_xv() x[i][2] = 0.0; v[i][2] = 0.0; } - + // add center of mass to displacement // map back into periodic box via xbox,ybox,zbox // for triclinic, add in box tilt factors as well @@ -1353,7 +1353,7 @@ void FixRigidSmall::set_xv() } // update the position of geometric center - + for (int ibody = 0; ibody < nlocal_body + nghost_body; ibody++) { Body *b = &body[ibody]; MathExtra::matvec(b->ex_space,b->ey_space,b->ez_space, @@ -1473,13 +1473,13 @@ void FixRigidSmall::set_v() // compute new v // enforce 2d v - + v[i][0] = b->omega[1]*delta[2] - b->omega[2]*delta[1] + b->vcm[0]; v[i][1] = b->omega[2]*delta[0] - b->omega[0]*delta[2] + b->vcm[1]; v[i][2] = b->omega[0]*delta[1] - b->omega[1]*delta[0] + b->vcm[2]; if (dimension == 2) v[i][2] = 0.0; - + // virial = unwrapped coords dotted into body constraint force // body constraint force = implied force due to v change minus f external // assume f does not include forces internal to body From 6e09037aa38ba8f27bbc1f82e43bf73193367bde Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 4 Apr 2023 05:20:53 -0400 Subject: [PATCH 005/204] incremental improvements --- src/OPENMP/fix_rigid_omp.cpp | 15 ++++++++------- src/RIGID/fix_rigid.cpp | 3 +-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/OPENMP/fix_rigid_omp.cpp b/src/OPENMP/fix_rigid_omp.cpp index e2c6e653bc..0e27578b81 100644 --- a/src/OPENMP/fix_rigid_omp.cpp +++ b/src/OPENMP/fix_rigid_omp.cpp @@ -170,7 +170,7 @@ void FixRigidOMP::compute_forces_and_torques() } else if (rstyle == GROUP) { - // we likely have only a rather number of groups so we loops + // we likely have only a rather number of groups so we loop // over bodies and thread over all atoms for each of them. for (int ib = 0; ib < nbody; ++ib) { @@ -268,12 +268,12 @@ void FixRigidOMP::compute_forces_and_torques() #pragma omp parallel for LMP_DEFAULT_NONE schedule(static) #endif for (int ibody = 0; ibody < nbody; ibody++) { - fcm[ibody][0] = all[ibody][0] + langextra[ibody][0]; - fcm[ibody][1] = all[ibody][1] + langextra[ibody][1]; - fcm[ibody][2] = all[ibody][2] + langextra[ibody][2]; - torque[ibody][0] = all[ibody][3] + langextra[ibody][3]; - torque[ibody][1] = all[ibody][4] + langextra[ibody][4]; - torque[ibody][2] = all[ibody][5] + langextra[ibody][5]; + fcm[ibody][0] = all[ibody][0] + fflag[ibody][0]*langextra[ibody][0]; + fcm[ibody][1] = all[ibody][1] + fflag[ibody][1]*langextra[ibody][1]; + fcm[ibody][2] = all[ibody][2] + fflag[ibody][2]*langextra[ibody][2]; + torque[ibody][0] = all[ibody][3] + tflag[ibody][0]*langextra[ibody][3]; + torque[ibody][1] = all[ibody][4] + tflag[ibody][1]*langextra[ibody][4]; + torque[ibody][2] = all[ibody][5] + tflag[ibody][2]*langextra[ibody][5]; } // add gravity force to COM of each body @@ -295,6 +295,7 @@ void FixRigidOMP::compute_forces_and_torques() void FixRigidOMP::final_integrate() { if (!earlyflag) compute_forces_and_torques(); + if (dimension == 2) enforce2d(); // update vcm and angmom diff --git a/src/RIGID/fix_rigid.cpp b/src/RIGID/fix_rigid.cpp index 11e5b5acf6..fe15946ca8 100644 --- a/src/RIGID/fix_rigid.cpp +++ b/src/RIGID/fix_rigid.cpp @@ -503,8 +503,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : id_dilate = utils::strdup(arg[iarg+1]); int idilate = group->find(id_dilate); if (idilate == -1) - error->all(FLERR, - "Fix rigid npt/nph dilate group ID does not exist"); + error->all(FLERR, "Fix rigid npt/nph dilate group ID {} does not exist", id_dilate); } iarg += 2; From 777ba98764ea99527b54069e8c7d3a9584017615 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 4 Apr 2023 08:56:07 -0400 Subject: [PATCH 006/204] cosmetic --- src/OPENMP/fix_rigid_omp.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/OPENMP/fix_rigid_omp.cpp b/src/OPENMP/fix_rigid_omp.cpp index 0e27578b81..3287d569e2 100644 --- a/src/OPENMP/fix_rigid_omp.cpp +++ b/src/OPENMP/fix_rigid_omp.cpp @@ -79,13 +79,11 @@ void FixRigidOMP::initial_integrate(int vflag) // returns new normalized quaternion, also updated omega at 1/2 step // update ex,ey,ez to reflect new quaternion - MathExtra::angmom_to_omega(angmom[ibody],ex_space[ibody],ey_space[ibody], - ez_space[ibody],inertia[ibody],omega[ibody]); - MathExtra::richardson(quat[ibody],angmom[ibody],omega[ibody], - inertia[ibody],dtq); - MathExtra::q_to_exyz(quat[ibody], - ex_space[ibody],ey_space[ibody],ez_space[ibody]); - } // end of omp parallel for + MathExtra::angmom_to_omega(angmom[ibody], ex_space[ibody], ey_space[ibody], ez_space[ibody], + inertia[ibody], omega[ibody]); + MathExtra::richardson(quat[ibody], angmom[ibody], omega[ibody], inertia[ibody], dtq); + MathExtra::q_to_exyz(quat[ibody], ex_space[ibody], ey_space[ibody], ez_space[ibody]); + } // end of omp parallel for // virial setup before call to set_xv From fed3c02d0191078c5c75923973415f3f36454d08 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 4 Apr 2023 08:56:30 -0400 Subject: [PATCH 007/204] improve error messages and partially apply clang-format --- src/RIGID/fix_rigid.cpp | 467 +++++++++++++++++++++------------------- 1 file changed, 246 insertions(+), 221 deletions(-) diff --git a/src/RIGID/fix_rigid.cpp b/src/RIGID/fix_rigid.cpp index fe15946ca8..9264b0f3fb 100644 --- a/src/RIGID/fix_rigid.cpp +++ b/src/RIGID/fix_rigid.cpp @@ -1,4 +1,3 @@ -// clang-format off /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator https://www.lammps.org/, Sandia National Laboratories @@ -47,18 +46,16 @@ using namespace RigidConst; /* ---------------------------------------------------------------------- */ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), step_respa(nullptr), - inpfile(nullptr), nrigid(nullptr), mol2body(nullptr), body2mol(nullptr), - body(nullptr), displace(nullptr), masstotal(nullptr), xcm(nullptr), - vcm(nullptr), fcm(nullptr), inertia(nullptr), ex_space(nullptr), - ey_space(nullptr), ez_space(nullptr), angmom(nullptr), omega(nullptr), - torque(nullptr), quat(nullptr), imagebody(nullptr), fflag(nullptr), - tflag(nullptr), langextra(nullptr), sum(nullptr), all(nullptr), - remapflag(nullptr), xcmimage(nullptr), eflags(nullptr), orient(nullptr), - dorient(nullptr), id_dilate(nullptr), id_gravity(nullptr), random(nullptr), - avec_ellipsoid(nullptr), avec_line(nullptr), avec_tri(nullptr) + Fix(lmp, narg, arg), step_respa(nullptr), inpfile(nullptr), nrigid(nullptr), mol2body(nullptr), + body2mol(nullptr), body(nullptr), displace(nullptr), masstotal(nullptr), xcm(nullptr), + vcm(nullptr), fcm(nullptr), inertia(nullptr), ex_space(nullptr), ey_space(nullptr), + ez_space(nullptr), angmom(nullptr), omega(nullptr), torque(nullptr), quat(nullptr), + imagebody(nullptr), fflag(nullptr), tflag(nullptr), langextra(nullptr), sum(nullptr), + all(nullptr), remapflag(nullptr), xcmimage(nullptr), eflags(nullptr), orient(nullptr), + dorient(nullptr), id_dilate(nullptr), id_gravity(nullptr), random(nullptr), + avec_ellipsoid(nullptr), avec_line(nullptr), avec_tri(nullptr) { - int i,ibody; + int i, ibody; scalar_flag = 1; extscalar = 0; @@ -70,8 +67,8 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : dof_flag = 1; centroidstressflag = CENTROID_NOTAVAIL; - MPI_Comm_rank(world,&me); - MPI_Comm_size(world,&nprocs); + MPI_Comm_rank(world, &me); + MPI_Comm_size(world, &nprocs); // perform initial allocation of atom-based arrays // register with Atom class @@ -90,7 +87,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : // parse args for rigid body specification // set nbody and body[i] for each atom - if (narg < 4) error->all(FLERR,"Illegal fix rigid command"); + if (narg < 4) utils::missing_cmd_args(FLERR, std::string("fix ") + style, error); int iarg; mol2body = nullptr; @@ -100,7 +97,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : // nbody = 1 // all atoms in fix group are part of body - if (strcmp(arg[3],"single") == 0) { + if (strcmp(arg[3], "single") == 0) { rstyle = SINGLE; iarg = 4; nbody = 1; @@ -113,67 +110,68 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : if (mask[i] & groupbit) body[i] = 0; } - // each molecule in fix group is a rigid body - // maxmol = largest molecule ID - // ncount = # of atoms in each molecule (have to sum across procs) - // nbody = # of non-zero ncount values - // use nall as incremented ptr to set body[] values for each atom + // each molecule in fix group is a rigid body + // maxmol = largest molecule ID + // ncount = # of atoms in each molecule (have to sum across procs) + // nbody = # of non-zero ncount values + // use nall as incremented ptr to set body[] values for each atom - } else if (strcmp(arg[3],"molecule") == 0 || strcmp(arg[3],"custom") == 0) { + } else if ((strcmp(arg[3], "molecule") == 0) || (strcmp(arg[3], "custom") == 0)) { rstyle = MOLECULE; tagint *molecule; int *mask = atom->mask; int nlocal = atom->nlocal; - int custom_flag = strcmp(arg[3],"custom") == 0; + int custom_flag = strcmp(arg[3], "custom") == 0; if (custom_flag) { - if (narg < 5) error->all(FLERR,"Illegal fix rigid command"); + if (narg < 5) utils::missing_cmd_args(FLERR, fmt::format("fix {} custom"), error); // determine whether atom-style variable or atom property is used - if (utils::strmatch(arg[4],"^i_")) { - int is_double,cols; - int custom_index = atom->find_custom(arg[4]+2,is_double,cols); + if (utils::strmatch(arg[4], "^i_")) { + int is_double, cols; + int custom_index = atom->find_custom(arg[4] + 2, is_double, cols); if (custom_index == -1) - error->all(FLERR,"Fix rigid custom requires previously defined property/atom"); + error->all(FLERR, "Fix {} custom requires previously defined property/atom", style); else if (is_double) - error->all(FLERR,"Fix rigid custom requires integer-valued property/atom vector"); + error->all(FLERR, "Fix {} custom requires integer-valued property/atom vector", style); int minval = INT_MAX; int *value = atom->ivector[custom_index]; for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit) minval = MIN(minval,value[i]); + if (mask[i] & groupbit) minval = MIN(minval, value[i]); int vmin = minval; - MPI_Allreduce(&vmin,&minval,1,MPI_INT,MPI_MIN,world); + MPI_Allreduce(&vmin, &minval, 1, MPI_INT, MPI_MIN, world); molecule = new tagint[nlocal]; for (i = 0; i < nlocal; i++) if (mask[i] & groupbit) - molecule[i] = (tagint)(value[i] - minval + 1); + molecule[i] = (tagint) (value[i] - minval + 1); else molecule[i] = 0; - } else if (utils::strmatch(arg[4],"^v_")) { - int ivariable = input->variable->find(arg[4]+2); + } else if (utils::strmatch(arg[4], "^v_")) { + int ivariable = input->variable->find(arg[4] + 2); if (ivariable < 0) - error->all(FLERR,"Variable {} for fix rigid/small custom does not exist", arg[4]+2); + error->all(FLERR, "Variable {} for fix {} custom does not exist", arg[4] + 2, style); if (input->variable->atomstyle(ivariable) == 0) - error->all(FLERR,"Fix rigid custom variable {} is not atom-style variable", arg[4]+2); + error->all(FLERR, "Fix {} custom variable {} is not atom-style variable", style, + arg[4] + 2); auto value = new double[nlocal]; - input->variable->compute_atom(ivariable,0,value,1,0); + input->variable->compute_atom(ivariable, 0, value, 1, 0); int minval = INT_MAX; for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit) minval = MIN(minval,(int)value[i]); + if (mask[i] & groupbit) minval = MIN(minval, (int) value[i]); int vmin = minval; - MPI_Allreduce(&vmin,&minval,1,MPI_INT,MPI_MIN,world); + MPI_Allreduce(&vmin, &minval, 1, MPI_INT, MPI_MIN, world); molecule = new tagint[nlocal]; for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit) - molecule[i] = (tagint)((tagint)value[i] - minval + 1); + if (mask[i] & groupbit) molecule[i] = (tagint) ((tagint) value[i] - minval + 1); delete[] value; - } else error->all(FLERR,"Unsupported fix rigid custom property"); + } else + error->all(FLERR, "Unsupported fix {} custom property: {}", style, arg[4]); } else { if (atom->molecule_flag == 0) - error->all(FLERR,"Fix rigid molecule requires atom attribute molecule"); + error->all(FLERR, "Fix {} molecule requires atom attribute molecule", style); molecule = atom->molecule; } @@ -181,30 +179,31 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : tagint maxmol_tag = -1; for (i = 0; i < nlocal; i++) - if (mask[i] & groupbit) maxmol_tag = MAX(maxmol_tag,molecule[i]); + if (mask[i] & groupbit) maxmol_tag = MAX(maxmol_tag, molecule[i]); tagint itmp; - MPI_Allreduce(&maxmol_tag,&itmp,1,MPI_LMP_TAGINT,MPI_MAX,world); - if (itmp+1 > MAXSMALLINT) - error->all(FLERR,"Too many molecules for fix rigid"); + MPI_Allreduce(&maxmol_tag, &itmp, 1, MPI_LMP_TAGINT, MPI_MAX, world); + if (itmp + 1 > MAXSMALLINT) error->all(FLERR, "Too many molecules for fix {}", style); maxmol = (int) itmp; int *ncount; - memory->create(ncount,maxmol+1,"rigid:ncount"); + memory->create(ncount, maxmol + 1, "rigid:ncount"); for (i = 0; i <= maxmol; i++) ncount[i] = 0; for (i = 0; i < nlocal; i++) if (mask[i] & groupbit) ncount[molecule[i]]++; - memory->create(mol2body,maxmol+1,"rigid:mol2body"); - MPI_Allreduce(ncount,mol2body,maxmol+1,MPI_INT,MPI_SUM,world); + memory->create(mol2body, maxmol + 1, "rigid:mol2body"); + MPI_Allreduce(ncount, mol2body, maxmol + 1, MPI_INT, MPI_SUM, world); nbody = 0; for (i = 0; i <= maxmol; i++) - if (mol2body[i]) mol2body[i] = nbody++; - else mol2body[i] = -1; + if (mol2body[i]) + mol2body[i] = nbody++; + else + mol2body[i] = -1; - memory->create(body2mol,nbody,"rigid:body2mol"); + memory->create(body2mol, nbody, "rigid:body2mol"); nbody = 0; for (i = 0; i <= maxmol; i++) @@ -218,24 +217,24 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : memory->destroy(ncount); if (custom_flag) delete[] molecule; - // each listed group is a rigid body - // check if all listed groups exist - // an atom must belong to fix group and listed group to be in rigid body - // error if atom belongs to more than 1 rigid body + // each listed group is a rigid body + // check if all listed groups exist + // an atom must belong to fix group and listed group to be in rigid body + // error if atom belongs to more than 1 rigid body - } else if (strcmp(arg[3],"group") == 0) { - if (narg < 5) error->all(FLERR,"Illegal fix rigid command"); + } else if (strcmp(arg[3], "group") == 0) { + if (narg < 5) utils::missing_cmd_args(FLERR, fmt::format("fix {} group"), error); rstyle = GROUP; - nbody = utils::inumeric(FLERR,arg[4],false,lmp); - if (nbody <= 0) error->all(FLERR,"Illegal fix rigid command"); - if (narg < 5+nbody) error->all(FLERR,"Illegal fix rigid command"); - iarg = 5+nbody; + nbody = utils::inumeric(FLERR, arg[4], false, lmp); + if (nbody <= 0) error->all(FLERR, "Illegal fix {} number of groups {}", style, nbody); + if (narg < 5 + nbody) utils::missing_cmd_args(FLERR, fmt::format("fix {} group"), error); + iarg = 5 + nbody; int *igroups = new int[nbody]; for (ibody = 0; ibody < nbody; ibody++) { - igroups[ibody] = group->find(arg[5+ibody]); + igroups[ibody] = group->find(arg[5 + ibody]); if (igroups[ibody] == -1) - error->all(FLERR,"Could not find fix rigid group ID"); + error->all(FLERR, "Could not find fix {} group ID {}", style, arg[5 + ibody]); } int *mask = atom->mask; @@ -253,41 +252,41 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : } int flagall; - MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_SUM,world); - if (flagall) - error->all(FLERR,"One or more atoms belong to multiple rigid bodies"); + MPI_Allreduce(&flag, &flagall, 1, MPI_INT, MPI_SUM, world); + if (flagall) error->all(FLERR, "One or more atoms belong to multiple rigid bodies"); delete[] igroups; - } else error->all(FLERR,"Illegal fix rigid command"); + } else + error->all(FLERR, "Unknown fix {} mode {}", style, arg[3]); // error check on nbody - if (nbody == 0) error->all(FLERR,"No rigid bodies defined"); + if (nbody == 0) error->all(FLERR, "No rigid bodies defined"); // create all nbody-length arrays - memory->create(nrigid,nbody,"rigid:nrigid"); - memory->create(masstotal,nbody,"rigid:masstotal"); - memory->create(xcm,nbody,3,"rigid:xcm"); - memory->create(vcm,nbody,3,"rigid:vcm"); - memory->create(fcm,nbody,3,"rigid:fcm"); - memory->create(inertia,nbody,3,"rigid:inertia"); - memory->create(ex_space,nbody,3,"rigid:ex_space"); - memory->create(ey_space,nbody,3,"rigid:ey_space"); - memory->create(ez_space,nbody,3,"rigid:ez_space"); - memory->create(angmom,nbody,3,"rigid:angmom"); - memory->create(omega,nbody,3,"rigid:omega"); - memory->create(torque,nbody,3,"rigid:torque"); - memory->create(quat,nbody,4,"rigid:quat"); - memory->create(imagebody,nbody,"rigid:imagebody"); - memory->create(fflag,nbody,3,"rigid:fflag"); - memory->create(tflag,nbody,3,"rigid:tflag"); - memory->create(langextra,nbody,6,"rigid:langextra"); + memory->create(nrigid, nbody, "rigid:nrigid"); + memory->create(masstotal, nbody, "rigid:masstotal"); + memory->create(xcm, nbody, 3, "rigid:xcm"); + memory->create(vcm, nbody, 3, "rigid:vcm"); + memory->create(fcm, nbody, 3, "rigid:fcm"); + memory->create(inertia, nbody, 3, "rigid:inertia"); + memory->create(ex_space, nbody, 3, "rigid:ex_space"); + memory->create(ey_space, nbody, 3, "rigid:ey_space"); + memory->create(ez_space, nbody, 3, "rigid:ez_space"); + memory->create(angmom, nbody, 3, "rigid:angmom"); + memory->create(omega, nbody, 3, "rigid:omega"); + memory->create(torque, nbody, 3, "rigid:torque"); + memory->create(quat, nbody, 4, "rigid:quat"); + memory->create(imagebody, nbody, "rigid:imagebody"); + memory->create(fflag, nbody, 3, "rigid:fflag"); + memory->create(tflag, nbody, 3, "rigid:tflag"); + memory->create(langextra, nbody, 6, "rigid:langextra"); - memory->create(sum,nbody,6,"rigid:sum"); - memory->create(all,nbody,6,"rigid:all"); - memory->create(remapflag,nbody,4,"rigid:remapflag"); + memory->create(sum, nbody, 6, "rigid:sum"); + memory->create(all, nbody, 6, "rigid:all"); + memory->create(remapflag, nbody, 4, "rigid:remapflag"); // initialize force/torque flags to default = 1.0 // for 2d: fz, tx, ty = 0.0 @@ -335,102 +334,117 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : } while (iarg < narg) { - if (strcmp(arg[iarg],"force") == 0) { - if (iarg+5 > narg) error->all(FLERR,"Illegal fix rigid command"); + if (strcmp(arg[iarg], "force") == 0) { + if (iarg + 5 > narg) + utils::missing_cmd_args(FLERR, fmt::format("fix {} force", style), error); - int mlo,mhi; - utils::bounds(FLERR,arg[iarg+1],1,nbody,mlo,mhi,error); + int mlo, mhi; + utils::bounds(FLERR, arg[iarg + 1], 1, nbody, mlo, mhi, error); - double xflag,yflag,zflag; - if (strcmp(arg[iarg+2],"off") == 0) xflag = 0.0; - else if (strcmp(arg[iarg+2],"on") == 0) xflag = 1.0; - else error->all(FLERR,"Illegal fix rigid command"); - if (strcmp(arg[iarg+3],"off") == 0) yflag = 0.0; - else if (strcmp(arg[iarg+3],"on") == 0) yflag = 1.0; - else error->all(FLERR,"Illegal fix rigid command"); - if (strcmp(arg[iarg+4],"off") == 0) zflag = 0.0; - else if (strcmp(arg[iarg+4],"on") == 0) zflag = 1.0; - else error->all(FLERR,"Illegal fix rigid command"); + double xflag, yflag, zflag; + if (strcmp(arg[iarg + 2], "off") == 0) + xflag = 0.0; + else if (strcmp(arg[iarg + 2], "on") == 0) + xflag = 1.0; + else + error->all(FLERR, "Illegal fix {} command", style); + if (strcmp(arg[iarg + 3], "off") == 0) + yflag = 0.0; + else if (strcmp(arg[iarg + 3], "on") == 0) + yflag = 1.0; + else + error->all(FLERR, "Illegal fix {} command", style); + if (strcmp(arg[iarg + 4], "off") == 0) + zflag = 0.0; + else if (strcmp(arg[iarg + 4], "on") == 0) + zflag = 1.0; + else + error->all(FLERR, "Illegal fix {} command", style); - if (dimension == 2 && zflag == 1.0) - error->all(FLERR,"Fix rigid z force cannot be on for 2d simulation"); + if ((dimension == 2) && (zflag == 1.0)) + error->all(FLERR, "Fix rigid z force cannot be on for 2d simulation"); int count = 0; for (int m = mlo; m <= mhi; m++) { - fflag[m-1][0] = xflag; - fflag[m-1][1] = yflag; - fflag[m-1][2] = zflag; + fflag[m - 1][0] = xflag; + fflag[m - 1][1] = yflag; + fflag[m - 1][2] = zflag; count++; } - if (count == 0) error->all(FLERR,"Illegal fix rigid command"); + if (count == 0) error->all(FLERR, "Illegal fix {} command", style); iarg += 5; - } else if (strcmp(arg[iarg],"torque") == 0) { - if (iarg+5 > narg) error->all(FLERR,"Illegal fix rigid command"); + } else if (strcmp(arg[iarg], "torque") == 0) { + if (iarg + 5 > narg) error->all(FLERR, "Illegal fix {} command", style); - int mlo,mhi; - utils::bounds(FLERR,arg[iarg+1],1,nbody,mlo,mhi,error); + int mlo, mhi; + utils::bounds(FLERR, arg[iarg + 1], 1, nbody, mlo, mhi, error); - double xflag,yflag,zflag; - if (strcmp(arg[iarg+2],"off") == 0) xflag = 0.0; - else if (strcmp(arg[iarg+2],"on") == 0) xflag = 1.0; - else error->all(FLERR,"Illegal fix rigid command"); - if (strcmp(arg[iarg+3],"off") == 0) yflag = 0.0; - else if (strcmp(arg[iarg+3],"on") == 0) yflag = 1.0; - else error->all(FLERR,"Illegal fix rigid command"); - if (strcmp(arg[iarg+4],"off") == 0) zflag = 0.0; - else if (strcmp(arg[iarg+4],"on") == 0) zflag = 1.0; - else error->all(FLERR,"Illegal fix rigid command"); + double xflag, yflag, zflag; + if (strcmp(arg[iarg + 2], "off") == 0) + xflag = 0.0; + else if (strcmp(arg[iarg + 2], "on") == 0) + xflag = 1.0; + else + error->all(FLERR, "Illegal fix {} command", style); + if (strcmp(arg[iarg + 3], "off") == 0) + yflag = 0.0; + else if (strcmp(arg[iarg + 3], "on") == 0) + yflag = 1.0; + else + error->all(FLERR, "Illegal fix {} command", style); + if (strcmp(arg[iarg + 4], "off") == 0) + zflag = 0.0; + else if (strcmp(arg[iarg + 4], "on") == 0) + zflag = 1.0; + else + error->all(FLERR, "Illegal fix {} command", style); if (dimension == 2 && (xflag == 1.0 || yflag == 1.0)) - error->all(FLERR,"Fix rigid xy torque cannot be on for 2d simulation"); + error->all(FLERR, "Fix rigid xy torque cannot be on for 2d simulation"); int count = 0; for (int m = mlo; m <= mhi; m++) { - tflag[m-1][0] = xflag; - tflag[m-1][1] = yflag; - tflag[m-1][2] = zflag; + tflag[m - 1][0] = xflag; + tflag[m - 1][1] = yflag; + tflag[m - 1][2] = zflag; count++; } - if (count == 0) error->all(FLERR,"Illegal fix rigid command"); + if (count == 0) error->all(FLERR, "Illegal fix {} command", style); iarg += 5; - } else if (strcmp(arg[iarg],"langevin") == 0) { - if (iarg+5 > narg) error->all(FLERR,"Illegal fix rigid command"); - if (strcmp(style,"rigid") != 0 && strcmp(style,"rigid/nve") != 0 && - strcmp(style,"rigid/omp") != 0 && strcmp(style,"rigid/nve/omp") != 0) - error->all(FLERR,"Illegal fix rigid command"); + } else if (strcmp(arg[iarg], "langevin") == 0) { + if (iarg + 5 > narg) error->all(FLERR, "Illegal fix {} command", style); + if (strcmp(style, "rigid") != 0 && strcmp(style, "rigid/nve") != 0 && + strcmp(style, "rigid/omp") != 0 && strcmp(style, "rigid/nve/omp") != 0) + error->all(FLERR, "Illegal fix {} command", style); langflag = 1; - t_start = utils::numeric(FLERR,arg[iarg+1],false,lmp); - t_stop = utils::numeric(FLERR,arg[iarg+2],false,lmp); - t_period = utils::numeric(FLERR,arg[iarg+3],false,lmp); - seed = utils::inumeric(FLERR,arg[iarg+4],false,lmp); - if (t_period <= 0.0) - error->all(FLERR,"Fix rigid langevin period must be > 0.0"); - if (seed <= 0) error->all(FLERR,"Illegal fix rigid command"); + t_start = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + t_stop = utils::numeric(FLERR, arg[iarg + 2], false, lmp); + t_period = utils::numeric(FLERR, arg[iarg + 3], false, lmp); + seed = utils::inumeric(FLERR, arg[iarg + 4], false, lmp); + if (t_period <= 0.0) error->all(FLERR, "Fix rigid langevin period must be > 0.0"); + if (seed <= 0) error->all(FLERR, "Illegal fix {} command", style); iarg += 5; - } else if (strcmp(arg[iarg],"temp") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix rigid command"); - if (!utils::strmatch(style,"^rigid/n.t")) - error->all(FLERR,"Illegal fix rigid command"); + } else if (strcmp(arg[iarg], "temp") == 0) { + if (iarg + 4 > narg) error->all(FLERR, "Illegal fix {} command", style); + if (!utils::strmatch(style, "^rigid/n.t")) error->all(FLERR, "Illegal fix {} command", style); tstat_flag = 1; - t_start = utils::numeric(FLERR,arg[iarg+1],false,lmp); - t_stop = utils::numeric(FLERR,arg[iarg+2],false,lmp); - t_period = utils::numeric(FLERR,arg[iarg+3],false,lmp); + t_start = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + t_stop = utils::numeric(FLERR, arg[iarg + 2], false, lmp); + t_period = utils::numeric(FLERR, arg[iarg + 3], false, lmp); iarg += 4; - } else if (strcmp(arg[iarg],"iso") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix rigid command"); - if (!utils::strmatch(style,"^rigid/np.")) - error->all(FLERR,"Illegal fix rigid command"); + } else if (strcmp(arg[iarg], "iso") == 0) { + if (iarg + 4 > narg) error->all(FLERR, "Illegal fix {} command", style); + if (!utils::strmatch(style, "^rigid/np.")) error->all(FLERR, "Illegal fix {} command", style); pcouple = XYZ; - p_start[0] = p_start[1] = p_start[2] = utils::numeric(FLERR,arg[iarg+1],false,lmp); - p_stop[0] = p_stop[1] = p_stop[2] = utils::numeric(FLERR,arg[iarg+2],false,lmp); - p_period[0] = p_period[1] = p_period[2] = - utils::numeric(FLERR,arg[iarg+3],false,lmp); + p_start[0] = p_start[1] = p_start[2] = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + p_stop[0] = p_stop[1] = p_stop[2] = utils::numeric(FLERR, arg[iarg + 2], false, lmp); + p_period[0] = p_period[1] = p_period[2] = utils::numeric(FLERR, arg[iarg + 3], false, lmp); p_flag[0] = p_flag[1] = p_flag[2] = 1; if (dimension == 2) { p_start[2] = p_stop[2] = p_period[2] = 0.0; @@ -438,14 +452,12 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : } iarg += 4; - } else if (strcmp(arg[iarg],"aniso") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix rigid command"); - if (!utils::strmatch(style,"^rigid/np.")) - error->all(FLERR,"Illegal fix rigid command"); - p_start[0] = p_start[1] = p_start[2] = utils::numeric(FLERR,arg[iarg+1],false,lmp); - p_stop[0] = p_stop[1] = p_stop[2] = utils::numeric(FLERR,arg[iarg+2],false,lmp); - p_period[0] = p_period[1] = p_period[2] = - utils::numeric(FLERR,arg[iarg+3],false,lmp); + } else if (strcmp(arg[iarg], "aniso") == 0) { + if (iarg + 4 > narg) error->all(FLERR, "Illegal fix {} command", style); + if (!utils::strmatch(style, "^rigid/np.")) error->all(FLERR, "Illegal fix {} command", style); + p_start[0] = p_start[1] = p_start[2] = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + p_stop[0] = p_stop[1] = p_stop[2] = utils::numeric(FLERR, arg[iarg + 2], false, lmp); + p_period[0] = p_period[1] = p_period[2] = utils::numeric(FLERR, arg[iarg + 3], false, lmp); p_flag[0] = p_flag[1] = p_flag[2] = 1; if (dimension == 2) { p_start[2] = p_stop[2] = p_period[2] = 0.0; @@ -453,98 +465,111 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : } iarg += 4; - } else if (strcmp(arg[iarg],"x") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix rigid command"); - if (!utils::strmatch(style,"^rigid/np.")) - error->all(FLERR,"Illegal fix rigid command"); - p_start[0] = utils::numeric(FLERR,arg[iarg+1],false,lmp); - p_stop[0] = utils::numeric(FLERR,arg[iarg+2],false,lmp); - p_period[0] = utils::numeric(FLERR,arg[iarg+3],false,lmp); + } else if (strcmp(arg[iarg], "x") == 0) { + if (iarg + 4 > narg) error->all(FLERR, "Illegal fix {} command", style); + if (!utils::strmatch(style, "^rigid/np.")) error->all(FLERR, "Illegal fix {} command", style); + p_start[0] = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + p_stop[0] = utils::numeric(FLERR, arg[iarg + 2], false, lmp); + p_period[0] = utils::numeric(FLERR, arg[iarg + 3], false, lmp); p_flag[0] = 1; iarg += 4; - } else if (strcmp(arg[iarg],"y") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix rigid command"); - if (!utils::strmatch(style,"^rigid/np.")) - error->all(FLERR,"Illegal fix rigid command"); - p_start[1] = utils::numeric(FLERR,arg[iarg+1],false,lmp); - p_stop[1] = utils::numeric(FLERR,arg[iarg+2],false,lmp); - p_period[1] = utils::numeric(FLERR,arg[iarg+3],false,lmp); + } else if (strcmp(arg[iarg], "y") == 0) { + if (iarg + 4 > narg) error->all(FLERR, "Illegal fix {} command", style); + if (!utils::strmatch(style, "^rigid/np.")) error->all(FLERR, "Illegal fix {} command", style); + p_start[1] = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + p_stop[1] = utils::numeric(FLERR, arg[iarg + 2], false, lmp); + p_period[1] = utils::numeric(FLERR, arg[iarg + 3], false, lmp); p_flag[1] = 1; iarg += 4; - } else if (strcmp(arg[iarg],"z") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix rigid command"); - if (!utils::strmatch(style,"^rigid/np.")) - error->all(FLERR,"Illegal fix rigid command"); - p_start[2] = utils::numeric(FLERR,arg[iarg+1],false,lmp); - p_stop[2] = utils::numeric(FLERR,arg[iarg+2],false,lmp); - p_period[2] = utils::numeric(FLERR,arg[iarg+3],false,lmp); + } else if (strcmp(arg[iarg], "z") == 0) { + if (iarg + 4 > narg) error->all(FLERR, "Illegal fix {} command", style); + if (!utils::strmatch(style, "^rigid/np.")) error->all(FLERR, "Illegal fix {} command", style); + p_start[2] = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + p_stop[2] = utils::numeric(FLERR, arg[iarg + 2], false, lmp); + p_period[2] = utils::numeric(FLERR, arg[iarg + 3], false, lmp); p_flag[2] = 1; iarg += 4; - } else if (strcmp(arg[iarg],"couple") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix rigid command"); - if (strcmp(arg[iarg+1],"xyz") == 0) pcouple = XYZ; - else if (strcmp(arg[iarg+1],"xy") == 0) pcouple = XY; - else if (strcmp(arg[iarg+1],"yz") == 0) pcouple = YZ; - else if (strcmp(arg[iarg+1],"xz") == 0) pcouple = XZ; - else if (strcmp(arg[iarg+1],"none") == 0) pcouple = NONE; - else error->all(FLERR,"Illegal fix rigid command"); + } else if (strcmp(arg[iarg], "couple") == 0) { + if (iarg + 2 > narg) + utils::missing_cmd_args(FLERR, fmt::format("fix {} couple", style), error); + if (strcmp(arg[iarg + 1], "xyz") == 0) + pcouple = XYZ; + else if (strcmp(arg[iarg + 1], "xy") == 0) + pcouple = XY; + else if (strcmp(arg[iarg + 1], "yz") == 0) + pcouple = YZ; + else if (strcmp(arg[iarg + 1], "xz") == 0) + pcouple = XZ; + else if (strcmp(arg[iarg + 1], "none") == 0) + pcouple = NONE; + else + error->all(FLERR, "Unknown fix {} couple option ", style, arg[iarg + 1]); iarg += 2; - } else if (strcmp(arg[iarg],"dilate") == 0) { - if (iarg+2 > narg) - error->all(FLERR,"Illegal fix rigid npt/nph command"); - if (strcmp(arg[iarg+1],"all") == 0) allremap = 1; + } else if (strcmp(arg[iarg], "dilate") == 0) { + if (iarg + 2 > narg) + utils::missing_cmd_args(FLERR, fmt::format("fix {} dilate", style), error); + if (strcmp(arg[iarg + 1], "all") == 0) + allremap = 1; else { allremap = 0; delete[] id_dilate; - id_dilate = utils::strdup(arg[iarg+1]); + id_dilate = utils::strdup(arg[iarg + 1]); int idilate = group->find(id_dilate); if (idilate == -1) - error->all(FLERR, "Fix rigid npt/nph dilate group ID {} does not exist", id_dilate); + error->all(FLERR, "Fix {} dilate group ID {} does not exist", style, id_dilate); } iarg += 2; - } else if (strcmp(arg[iarg],"tparam") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix rigid command"); - if (!utils::strmatch(style,"^rigid/n.t")) - error->all(FLERR,"Illegal fix rigid command"); - t_chain = utils::inumeric(FLERR,arg[iarg+1],false,lmp); - t_iter = utils::inumeric(FLERR,arg[iarg+2],false,lmp); - t_order = utils::inumeric(FLERR,arg[iarg+3],false,lmp); + } else if (strcmp(arg[iarg], "tparam") == 0) { + if (iarg + 4 > narg) + utils::missing_cmd_args(FLERR, fmt::format("fix {} tparam", style), error); + if (!utils::strmatch(style, "^rigid/n.t")) + error->all(FLERR, "Illegal fix {} command option tparam", style); + t_chain = utils::inumeric(FLERR, arg[iarg + 1], false, lmp); + t_iter = utils::inumeric(FLERR, arg[iarg + 2], false, lmp); + t_order = utils::inumeric(FLERR, arg[iarg + 3], false, lmp); iarg += 4; - } else if (strcmp(arg[iarg],"pchain") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix rigid command"); - if (!utils::strmatch(style,"^rigid/np.")) - error->all(FLERR,"Illegal fix rigid command"); - p_chain = utils::inumeric(FLERR,arg[iarg+1],false,lmp); + } else if (strcmp(arg[iarg], "pchain") == 0) { + if (iarg + 2 > narg) + utils::missing_cmd_args(FLERR, fmt::format("fix {} pchain", style), error); + if (!utils::strmatch(style, "^rigid/np.")) + error->all(FLERR, "Illegal fix {} command option pchain", style); + p_chain = utils::inumeric(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"infile") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix rigid command"); + } else if (strcmp(arg[iarg], "infile") == 0) { + if (iarg + 2 > narg) + utils::missing_cmd_args(FLERR, fmt::format("fix {} infile", style), error); delete[] inpfile; - inpfile = utils::strdup(arg[iarg+1]); + inpfile = utils::strdup(arg[iarg + 1]); restart_file = 1; reinitflag = 0; iarg += 2; - } else if (strcmp(arg[iarg],"reinit") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix rigid command"); - reinitflag = utils::logical(FLERR,arg[iarg+1],false,lmp); + } else if (strcmp(arg[iarg], "reinit") == 0) { + if (iarg + 2 > narg) + utils::missing_cmd_args(FLERR, fmt::format("fix {} reinit", style), error); + reinitflag = utils::logical(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"gravity") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix rigid command"); + } else if (strcmp(arg[iarg], "gravity") == 0) { + if (iarg + 2 > narg) + utils::missing_cmd_args(FLERR, fmt::format("fix {} gravity", style), error); delete[] id_gravity; - id_gravity = utils::strdup(arg[iarg+1]); + id_gravity = utils::strdup(arg[iarg + 1]); iarg += 2; - } else error->all(FLERR,"Illegal fix rigid command"); + } else + error->all(FLERR, "Illegal fix {} command", style); } + // clang-format off + // set pstat_flag pstat_flag = 0; From 3ed6612f0828b795dc8b70e4649b7f4164d5d91b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 14 Apr 2023 23:20:22 -0400 Subject: [PATCH 008/204] correct comment --- src/OPENMP/fix_rigid_omp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OPENMP/fix_rigid_omp.cpp b/src/OPENMP/fix_rigid_omp.cpp index 3287d569e2..c9cfee07c6 100644 --- a/src/OPENMP/fix_rigid_omp.cpp +++ b/src/OPENMP/fix_rigid_omp.cpp @@ -168,7 +168,7 @@ void FixRigidOMP::compute_forces_and_torques() } else if (rstyle == GROUP) { - // we likely have only a rather number of groups so we loop + // we likely have a rather small number of groups so we loop // over bodies and thread over all atoms for each of them. for (int ib = 0; ib < nbody; ++ib) { From af76ffdfdacf2faaf4b6740c1e57993e28ad54e7 Mon Sep 17 00:00:00 2001 From: Vladislav Galigerov Date: Sun, 18 Jun 2023 17:08:49 +0300 Subject: [PATCH 009/204] ROCM aware OpenMPI support --- src/KOKKOS/kokkos.cpp | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 91ea6d37ac..7f3f9f0d10 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -43,8 +43,7 @@ #define GPU_AWARE_UNKNOWN static int have_gpu_aware = -1; -// TODO HIP: implement HIP-aware MPI support (UCX) detection -#if defined(KOKKOS_ENABLE_HIP) || defined(KOKKOS_ENABLE_SYCL) || defined(KOKKOS_ENABLE_OPENMPTARGET) +#if defined(KOKKOS_ENABLE_SYCL) || defined(KOKKOS_ENABLE_OPENMPTARGET) GPU_AWARE_UNKNOWN #elif defined(KOKKOS_ENABLE_CUDA) @@ -71,7 +70,28 @@ GPU_AWARE_UNKNOWN GPU_AWARE_UNKNOWN #endif // OPEN_MPI -#endif // KOKKOS_ENABLE_CUDA +#elif defined(KOKKOS_ENABLE_HIP) + +// OpenMPI supports detecting HIP-aware MPI as of version 5.0.0 +#if (OPEN_MPI) +#if (OMPI_MAJOR_VERSION >= 5) +#include +#if defined(OMPI_HAVE_MPI_EXT_ROCM) && OMPI_HAVE_MPI_EXT_ROCM +// May have rocm enabled: below we will check dynamically with MPIX_Query_rocm_support() +static int have_gpu_aware = 1; +#elif defined(OMPI_HAVE_MPI_EXT_ROCM) && !OMPI_HAVE_MPI_EXT_ROCM +static int have_gpu_aware = 0; +#else +GPU_AWARE_UNKNOWN +#endif // defined(OMPI_HAVE_MPI_EXT_ROCM) +#else // old OpenMPI +GPU_AWARE_UNKNOWN +#endif // (OMPI_MAJOR_VERSION >=5) +#else // unknown MPI library +GPU_AWARE_UNKNOWN +#endif // OPEN_MPI + +#endif // KOKKOS_ENABLE_CUDA & KOKKOS_ENABLE_HIP #endif // LMP_ENABLE_DEVICE @@ -236,8 +256,20 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) binsize = 0.0; #ifdef KOKKOS_ENABLE_CUDA - // TODO HIP: implement HIP-aware MPI testing gpu_aware_flag = 1; +#elif defined(KOKKOS_ENABLE_HIP) && defined(OMPI_HAVE_MPI_EXT_ROCM) && OMPI_HAVE_MPI_EXT_ROCM + if(have_gpu_aware == 1) + { + gpu_aware_flag = MPIX_Query_rocm_support(); + if(gpu_aware_flag && me == 0) + { + error->warning(FLERR,"ROCm-aware OpenMPI is supported and enabled (debug msg, remove it later)"); + } + } + else + { + gpu_aware_flag = 0; + } #else gpu_aware_flag = 0; #endif From 108c5fc41675e1a5fb92d8c38df350807a9a4f60 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 5 Jul 2023 14:59:35 -0400 Subject: [PATCH 010/204] improve error messages --- src/RIGID/fix_rigid_nh_small.cpp | 90 +++++++------------- src/RIGID/fix_rigid_small.cpp | 140 +++++++++++++++---------------- 2 files changed, 100 insertions(+), 130 deletions(-) diff --git a/src/RIGID/fix_rigid_nh_small.cpp b/src/RIGID/fix_rigid_nh_small.cpp index 95f4c8d693..7780a15011 100644 --- a/src/RIGID/fix_rigid_nh_small.cpp +++ b/src/RIGID/fix_rigid_nh_small.cpp @@ -57,71 +57,52 @@ FixRigidNHSmall::FixRigidNHSmall(LAMMPS *lmp, int narg, char **arg) : // error checks - if ((p_flag[0] == 1 && p_period[0] <= 0.0) || - (p_flag[1] == 1 && p_period[1] <= 0.0) || - (p_flag[2] == 1 && p_period[2] <= 0.0)) - error->all(FLERR,"Fix rigid/small npt/nph period must be > 0.0"); - - if (dimension == 2 && p_flag[2]) - error->all(FLERR,"Invalid fix rigid/small npt/nph command " - "for a 2d simulation"); + error->all(FLERR,"Invalid fix {} command for a 2d simulation", style); if (dimension == 2 && (pcouple == YZ || pcouple == XZ)) - error->all(FLERR,"Invalid fix rigid/small npt/nph command " - "for a 2d simulation"); + error->all(FLERR,"Invalid fix {} command for a 2d simulation", style); if (pcouple == XYZ && (p_flag[0] == 0 || p_flag[1] == 0)) - error->all(FLERR,"Invalid fix rigid/small npt/nph command " - "pressure settings"); + error->all(FLERR,"Invalid fix {} command pressure settings", style); if (pcouple == XYZ && dimension == 3 && p_flag[2] == 0) - error->all(FLERR,"Invalid fix rigid/small npt/nph command " - "pressure settings"); + error->all(FLERR,"Invalid fix {} command pressure settings", style); if (pcouple == XY && (p_flag[0] == 0 || p_flag[1] == 0)) - error->all(FLERR,"Invalid fix rigid/small npt/nph command " - "pressure settings"); + error->all(FLERR,"Invalid fix {} command pressure settings", style); if (pcouple == YZ && (p_flag[1] == 0 || p_flag[2] == 0)) - error->all(FLERR,"Invalid fix rigid/small npt/nph command " - "pressure settings"); + error->all(FLERR,"Invalid fix {} command pressure settings", style); if (pcouple == XZ && (p_flag[0] == 0 || p_flag[2] == 0)) - error->all(FLERR,"Invalid fix rigid/small npt/nph command " - "pressure settings"); + error->all(FLERR,"Invalid fix {} command pressure settings", style); // require periodicity in tensile dimension if (p_flag[0] && domain->xperiodic == 0) - error->all(FLERR, - "Cannot use fix rigid/small npt/nph on a " - "non-periodic dimension"); + error->all(FLERR, "Cannot use fix {} on a non-periodic dimension", style); if (p_flag[1] && domain->yperiodic == 0) - error->all(FLERR, - "Cannot use fix rigid/small npt/nph on a " - "non-periodic dimension"); + error->all(FLERR, "Cannot use fix {} on a non-periodic dimension", style); if (p_flag[2] && domain->zperiodic == 0) - error->all(FLERR, - "Cannot use fix rigid/small npt/nph on a " - "non-periodic dimension"); + error->all(FLERR, "Cannot use fix {} on a non-periodic dimension", style); if (pcouple == XYZ && dimension == 3 && (p_start[0] != p_start[1] || p_start[0] != p_start[2] || p_stop[0] != p_stop[1] || p_stop[0] != p_stop[2] || p_period[0] != p_period[1] || p_period[0] != p_period[2])) - error->all(FLERR,"Invalid fix rigid/small npt/nph command pressure settings"); + error->all(FLERR, "Invalid fix {} command pressure settings", style); if (pcouple == XYZ && dimension == 2 && (p_start[0] != p_start[1] || p_stop[0] != p_stop[1] || p_period[0] != p_period[1])) - error->all(FLERR,"Invalid fix rigid/small npt/nph command pressure settings"); + error->all(FLERR, "Invalid fix {} command pressure settings", style); if (pcouple == XY && (p_start[0] != p_start[1] || p_stop[0] != p_stop[1] || p_period[0] != p_period[1])) - error->all(FLERR,"Invalid fix rigid/small npt/nph command pressure settings"); + error->all(FLERR, "Invalid fix {} command pressure settings", style); if (pcouple == YZ && (p_start[1] != p_start[2] || p_stop[1] != p_stop[2] || p_period[1] != p_period[2])) - error->all(FLERR,"Invalid fix rigid/small npt/nph command pressure settings"); + error->all(FLERR, "Invalid fix {} command pressure settings", style); if (pcouple == XZ && (p_start[0] != p_start[2] || p_stop[0] != p_stop[2] || p_period[0] != p_period[2])) - error->all(FLERR,"Invalid fix rigid/small npt/nph command pressure settings"); + error->all(FLERR, "Invalid fix {} command pressure settings", style); if (p_flag[0]) box_change |= BOX_CHANGE_X; if (p_flag[1]) box_change |= BOX_CHANGE_Y; @@ -131,8 +112,7 @@ FixRigidNHSmall::FixRigidNHSmall(LAMMPS *lmp, int narg, char **arg) : (p_flag[0] && p_period[0] <= 0.0) || (p_flag[1] && p_period[1] <= 0.0) || (p_flag[2] && p_period[2] <= 0.0)) - error->all(FLERR,"Fix rigid/small nvt/npt/nph damping parameters " - "must be > 0.0"); + error->all(FLERR,"Fix {} damping parameters must be > 0.0", style); // memory allocation and initialization @@ -215,8 +195,7 @@ void FixRigidNHSmall::init() if (allremap == 0) { int idilate = group->find(id_dilate); - if (idilate == -1) - error->all(FLERR,"Fix rigid npt/nph dilate group ID does not exist"); + if (idilate == -1) error->all(FLERR,"Fix {} dilate group ID does not exist", style); dilate_group_bit = group->bitmask[idilate]; } @@ -255,7 +234,7 @@ void FixRigidNHSmall::init() if (tcomputeflag) { icompute = modify->find_compute(id_temp); if (icompute < 0) - error->all(FLERR,"Temperature ID for fix rigid nvt/npt/nph does not exist"); + error->all(FLERR,"Temperature ID {} for fix {} does not exist", id_temp, style); temperature = modify->compute[icompute]; } @@ -270,8 +249,8 @@ void FixRigidNHSmall::init() int *dimflag = (dynamic_cast(modify->fix[i]))->dimflag; if ((p_flag[0] && dimflag[0]) || (p_flag[1] && dimflag[1]) || (p_flag[2] && dimflag[2])) - error->all(FLERR,"Cannot use fix rigid npt/nph and fix deform on " - "same component of stress tensor"); + error->all(FLERR, "Cannot use fix {} and fix deform on the same stress tensor component", + style); } // set frequency @@ -293,7 +272,7 @@ void FixRigidNHSmall::init() icompute = modify->find_compute(id_press); if (icompute < 0) - error->all(FLERR,"Pressure ID for fix rigid npt/nph does not exist"); + error->all(FLERR,"Pressure ID {} for fix {} does not exist", id_press, style); pressure = modify->compute[icompute]; // detect if any rigid fixes exist so rigid bodies move on remap @@ -1315,27 +1294,23 @@ int FixRigidNHSmall::modify_param(int narg, char **arg) modify->delete_compute(id_temp); tcomputeflag = 0; } - delete [] id_temp; + delete[] id_temp; id_temp = utils::strdup(arg[1]); - int icompute = modify->find_compute(arg[1]); - if (icompute < 0) - error->all(FLERR,"Could not find fix_modify temperature ID"); - temperature = modify->compute[icompute]; + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) error->all(FLERR,"Could not find fix_modify temperature ID {}", id_temp); if (temperature->tempflag == 0) - error->all(FLERR, - "Fix_modify temperature ID does not compute temperature"); + error->all(FLERR, "Fix_modify temperature ID {} does not compute temperature", id_temp); if (temperature->igroup != 0 && comm->me == 0) error->warning(FLERR,"Temperature for fix modify is not for group all"); // reset id_temp of pressure to new temperature ID if (pstat_flag) { - icompute = modify->find_compute(id_press); - if (icompute < 0) - error->all(FLERR,"Pressure ID for fix modify does not exist"); - modify->compute[icompute]->reset_extra_compute_fix(id_temp); + auto icompute = modify->get_compute_by_id(id_press); + if (!icompute) error->all(FLERR,"Pressure ID {} for fix modify does not exist", id_press); + icompute->reset_extra_compute_fix(id_temp); } return 2; @@ -1347,15 +1322,14 @@ int FixRigidNHSmall::modify_param(int narg, char **arg) modify->delete_compute(id_press); pcomputeflag = 0; } - delete [] id_press; + delete[] id_press; id_press = utils::strdup(arg[1]); - int icompute = modify->find_compute(arg[1]); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify pressure ID"); - pressure = modify->compute[icompute]; + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR,"Could not find fix_modify pressure ID {}", id_press); if (pressure->pressflag == 0) - error->all(FLERR,"Fix_modify pressure ID does not compute pressure"); + error->all(FLERR,"Fix_modify pressure ID {} does not compute pressure", id_press); return 2; } diff --git a/src/RIGID/fix_rigid_small.cpp b/src/RIGID/fix_rigid_small.cpp index bf2eb69355..d8e6358ddb 100644 --- a/src/RIGID/fix_rigid_small.cpp +++ b/src/RIGID/fix_rigid_small.cpp @@ -100,10 +100,10 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : tagint *bodyID = nullptr; int nlocal = atom->nlocal; - if (narg < 4) error->all(FLERR,"Illegal fix rigid/small command"); + if (narg < 4) utils::missing_cmd_args(FLERR, fmt::format("fix {}", style), error); if (strcmp(arg[3],"molecule") == 0) { if (atom->molecule_flag == 0) - error->all(FLERR,"Fix rigid/small requires atom attribute molecule"); + error->all(FLERR,"Fix {} requires atom attribute molecule", style); bodyID = atom->molecule; } else if (strcmp(arg[3],"custom") == 0) { @@ -117,9 +117,9 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : int is_double,cols; int custom_index = atom->find_custom(arg[4]+2,is_double,cols); if (custom_index == -1) - error->all(FLERR,"Fix rigid/small custom requires previously defined property/atom"); + error->all(FLERR,"Fix {} custom requires previously defined property/atom", style); else if (is_double || cols) - error->all(FLERR,"Fix rigid/small custom requires integer-valued property/atom vector"); + error->all(FLERR,"Fix {} custom requires integer-valued property/atom vector", style); int minval = INT_MAX; int *value = atom->ivector[custom_index]; for (i = 0; i < nlocal; i++) @@ -135,10 +135,9 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : } else if (utils::strmatch(arg[4],"^v_")) { int ivariable = input->variable->find(arg[4]+2); if (ivariable < 0) - error->all(FLERR,"Variable {} for fix rigid/small custom does not exist", arg[4]+2); + error->all(FLERR,"Variable {} for fix {} custom does not exist", arg[4]+2, style); if (input->variable->atomstyle(ivariable) == 0) - error->all(FLERR,"Fix rigid/small custom variable {} is not atom-style variable", - arg[4]+2); + error->all(FLERR,"Fix {} custom variable {} is not atom-style variable", style, arg[4]+2); auto value = new double[nlocal]; input->variable->compute_atom(ivariable,0,value,1,0); int minval = INT_MAX; @@ -152,11 +151,11 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : bodyID[i] = (tagint)((tagint)value[i] - minval + 1); else bodyID[0] = 0; delete[] value; - } else error->all(FLERR,"Unsupported fix rigid custom property"); - } else error->all(FLERR,"Illegal fix rigid/small command"); + } else error->all(FLERR,"Unsupported fix {} custom property", style, arg[4]); + } else error->all(FLERR,"Unknown fix {} keyword {}", style, arg[3]); if (atom->map_style == Atom::MAP_NONE) - error->all(FLERR,"Fix rigid/small requires an atom map, see atom_modify"); + error->all(FLERR,"Fix {} requires an atom map, see atom_modify", style); // maxmol = largest bodyID # @@ -201,23 +200,21 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : while (iarg < narg) { if (strcmp(arg[iarg],"langevin") == 0) { - if (iarg+5 > narg) error->all(FLERR,"Illegal fix rigid/small command"); - if ((strcmp(style,"rigid/small") != 0) && - (strcmp(style,"rigid/nve/small") != 0) && - (strcmp(style,"rigid/nph/small") != 0)) - error->all(FLERR,"Illegal fix rigid/small command"); + if (iarg+5 > narg) error->all(FLERR,"Illegal fix {} command", style); + if (utils::strmatch(style, "^rigid/n.t/small")) + error->all(FLERR,"Illegal fix {} command", style); langflag = 1; t_start = utils::numeric(FLERR,arg[iarg+1],false,lmp); t_stop = utils::numeric(FLERR,arg[iarg+2],false,lmp); t_period = utils::numeric(FLERR,arg[iarg+3],false,lmp); seed = utils::inumeric(FLERR,arg[iarg+4],false,lmp); if (t_period <= 0.0) - error->all(FLERR,"Fix rigid/small langevin period must be > 0.0"); - if (seed <= 0) error->all(FLERR,"Illegal fix rigid/small command"); + error->all(FLERR,"Fix {} langevin period must be > 0.0", style); + if (seed <= 0) error->all(FLERR,"Illegal fix {} command", style); iarg += 5; } else if (strcmp(arg[iarg],"infile") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix rigid/small command"); + if (iarg+2 > narg) error->all(FLERR,"Illegal fix {} infile command", style); delete[] inpfile; inpfile = utils::strdup(arg[iarg+1]); restart_file = 1; @@ -225,23 +222,24 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : iarg += 2; } else if (strcmp(arg[iarg],"reinit") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix rigid/small command"); + if (iarg+2 > narg) error->all(FLERR,"Illegal fix {} reinit command", style); reinitflag = utils::logical(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"mol") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix rigid/small command"); + if (iarg+2 > narg) error->all(FLERR,"Illegal fix {} mol command", style); int imol = atom->find_molecule(arg[iarg+1]); - if (imol == -1) error->all(FLERR,"Molecule template ID for fix rigid/small does not exist"); + if (imol == -1) + error->all(FLERR,"Molecule template ID {} for fix {} does not exist", arg[iarg+1], style); onemols = &atom->molecules[imol]; nmol = onemols[0]->nset; restart_file = 1; iarg += 2; } else if (strcmp(arg[iarg],"temp") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix rigid/small command"); + if (iarg+4 > narg) error->all(FLERR, "Illegal fix {} temp command", style); if (!utils::strmatch(style,"^rigid/n.t/small")) - error->all(FLERR,"Illegal fix rigid command"); + error->all(FLERR, "Illegal fix {} temp", style); tstat_flag = 1; t_start = utils::numeric(FLERR,arg[iarg+1],false,lmp); t_stop = utils::numeric(FLERR,arg[iarg+2],false,lmp); @@ -249,9 +247,9 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : iarg += 4; } else if (strcmp(arg[iarg],"iso") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix rigid/small command"); + if (iarg+4 > narg) error->all(FLERR, "Illegal fix {} iso command", style); if (!utils::strmatch(style,"^rigid/np./small")) - error->all(FLERR,"Illegal fix rigid/small command"); + error->all(FLERR,"Illegal fix {} iso command", style); pcouple = XYZ; p_start[0] = p_start[1] = p_start[2] = utils::numeric(FLERR,arg[iarg+1],false,lmp); p_stop[0] = p_stop[1] = p_stop[2] = utils::numeric(FLERR,arg[iarg+2],false,lmp); @@ -266,9 +264,9 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : iarg += 4; } else if (strcmp(arg[iarg],"aniso") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix rigid/small command"); + if (iarg+4 > narg) error->all(FLERR,"Illegal fix {} ansio command", style); if (!utils::strmatch(style,"^rigid/np./small")) - error->all(FLERR,"Illegal fix rigid/small command"); + error->all(FLERR,"Illegal fix {} aniso command", style); p_start[0] = p_start[1] = p_start[2] = utils::numeric(FLERR,arg[iarg+1],false,lmp); p_stop[0] = p_stop[1] = p_stop[2] = utils::numeric(FLERR,arg[iarg+2],false,lmp); p_period[0] = p_period[1] = p_period[2] = @@ -281,9 +279,9 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : iarg += 4; } else if (strcmp(arg[iarg],"x") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix rigid/small command"); + if (iarg+4 > narg) error->all(FLERR,"Illegal fix {} x command", style); if (!utils::strmatch(style,"^rigid/np./small")) - error->all(FLERR,"Illegal fix rigid/small command"); + error->all(FLERR,"Illegal fix {} x command", style); p_start[0] = utils::numeric(FLERR,arg[iarg+1],false,lmp); p_stop[0] = utils::numeric(FLERR,arg[iarg+2],false,lmp); p_period[0] = utils::numeric(FLERR,arg[iarg+3],false,lmp); @@ -291,9 +289,9 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : iarg += 4; } else if (strcmp(arg[iarg],"y") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix rigid/small command"); + if (iarg+4 > narg) error->all(FLERR,"Illegal fix {} y command", style); if (!utils::strmatch(style,"^rigid/np./small")) - error->all(FLERR,"Illegal fix rigid/small command"); + error->all(FLERR,"Illegal fix {} y command", style); p_start[1] = utils::numeric(FLERR,arg[iarg+1],false,lmp); p_stop[1] = utils::numeric(FLERR,arg[iarg+2],false,lmp); p_period[1] = utils::numeric(FLERR,arg[iarg+3],false,lmp); @@ -301,9 +299,9 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : iarg += 4; } else if (strcmp(arg[iarg],"z") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix rigid/small command"); + if (iarg+4 > narg) error->all(FLERR,"Illegal fix {} z command", style); if (!utils::strmatch(style,"^rigid/np./small")) - error->all(FLERR,"Illegal fix rigid/small command"); + error->all(FLERR,"Illegal fix {} z command", style); p_start[2] = utils::numeric(FLERR,arg[iarg+1],false,lmp); p_stop[2] = utils::numeric(FLERR,arg[iarg+2],false,lmp); p_period[2] = utils::numeric(FLERR,arg[iarg+3],false,lmp); @@ -311,18 +309,18 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : iarg += 4; } else if (strcmp(arg[iarg],"couple") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix rigid/small command"); + if (iarg+2 > narg) error->all(FLERR,"Illegal fix {} couple command", style); if (strcmp(arg[iarg+1],"xyz") == 0) pcouple = XYZ; else if (strcmp(arg[iarg+1],"xy") == 0) pcouple = XY; else if (strcmp(arg[iarg+1],"yz") == 0) pcouple = YZ; else if (strcmp(arg[iarg+1],"xz") == 0) pcouple = XZ; else if (strcmp(arg[iarg+1],"none") == 0) pcouple = NONE; - else error->all(FLERR,"Illegal fix rigid/small command"); + else error->all(FLERR,"Illegal fix {} couple command", style); iarg += 2; } else if (strcmp(arg[iarg],"dilate") == 0) { if (iarg+2 > narg) - error->all(FLERR,"Illegal fix rigid/small nvt/npt/nph command"); + error->all(FLERR,"Illegal fix {} dilate command", style); if (strcmp(arg[iarg+1],"all") == 0) allremap = 1; else { allremap = 0; @@ -330,34 +328,33 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : id_dilate = utils::strdup(arg[iarg+1]); int idilate = group->find(id_dilate); if (idilate == -1) - error->all(FLERR,"Fix rigid/small nvt/npt/nph dilate group ID " - "does not exist"); + error->all(FLERR,"Fix {} dilate group ID {} does not exist", style, id_dilate); } iarg += 2; } else if (strcmp(arg[iarg],"tparam") == 0) { - if (iarg+4 > narg) error->all(FLERR,"Illegal fix rigid/small command"); + if (iarg+4 > narg) error->all(FLERR,"Illegal fix {} tparam command", style); if (!utils::strmatch(style,"^rigid/n.t/small")) - error->all(FLERR,"Illegal fix rigid/small command"); + error->all(FLERR,"Illegal fix {} tparam command", style); t_chain = utils::inumeric(FLERR,arg[iarg+1],false,lmp); t_iter = utils::inumeric(FLERR,arg[iarg+2],false,lmp); t_order = utils::inumeric(FLERR,arg[iarg+3],false,lmp); iarg += 4; } else if (strcmp(arg[iarg],"pchain") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix rigid/small command"); + if (iarg+2 > narg) error->all(FLERR,"Illegal fix {} pchain command", style); if (!utils::strmatch(style,"^rigid/np./small")) - error->all(FLERR,"Illegal fix rigid/small command"); + error->all(FLERR,"Illegal fix {} pchain command", style); p_chain = utils::inumeric(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"gravity") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix rigid/small command"); + if (iarg+2 > narg) error->all(FLERR,"Illegal fix {} gravity command", style); delete[] id_gravity; id_gravity = utils::strdup(arg[iarg+1]); iarg += 2; - } else error->all(FLERR,"Illegal fix rigid/small command"); + } else error->all(FLERR,"Unknown fix {} keyword {}", style, arg[iarg]); } // error check and further setup for Molecule template @@ -365,9 +362,9 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : if (onemols) { for (i = 0; i < nmol; i++) { if (onemols[i]->xflag == 0) - error->all(FLERR,"Fix rigid/small molecule must have coordinates"); + error->all(FLERR,"Fix {} molecule must have coordinates", style); if (onemols[i]->typeflag == 0) - error->all(FLERR,"Fix rigid/small molecule must have atom types"); + error->all(FLERR,"Fix {} molecule must have atom types", style); // fix rigid/small uses center, masstotal, COM, inertia of molecule @@ -532,15 +529,15 @@ void FixRigidSmall::init() int count = 0; for (auto &ifix : modify->get_fix_list()) if (ifix->rigid_flag) count++; - if (count > 1 && me == 0) error->warning(FLERR,"More than one fix rigid"); + if (count > 1 && me == 0) error->warning(FLERR, "More than one fix rigid command"); if (earlyflag) { bool rflag = false; for (auto &ifix : modify->get_fix_list()) { if (ifix->rigid_flag) rflag = true; if ((comm->me == 0) && rflag && (ifix->setmask() & POST_FORCE) && !ifix->rigid_flag) - error->warning(FLERR,"Fix {} with ID {} alters forces after fix rigid/small", - ifix->style, ifix->id); + error->warning(FLERR,"Fix {} with ID {} alters forces after fix {}", + ifix->style, ifix->id, style); } } @@ -569,9 +566,9 @@ void FixRigidSmall::init() if (id_gravity) { auto ifix = modify->get_fix_by_id(id_gravity); - if (!ifix) error->all(FLERR,"Fix rigid/small cannot find fix gravity ID {}", id_gravity); + if (!ifix) error->all(FLERR,"Fix {} cannot find fix gravity ID {}", style, id_gravity); if (!utils::strmatch(ifix->style,"^gravity")) - error->all(FLERR,"Fix rigid/small gravity fix ID {} is not a gravity fix style", id_gravity); + error->all(FLERR,"Fix {} gravity fix ID {} is not a gravity fix style", style, id_gravity); int tmp; gvec = (double *) ifix->extract("gvec", tmp); } @@ -630,7 +627,7 @@ void FixRigidSmall::setup(int vflag) double cutghost = MAX(neighbor->cutneighmax,comm->cutghostuser); if (maxextent > cutghost) - error->all(FLERR,"Rigid body extent > ghost cutoff - use comm_modify cutoff"); + error->all(FLERR,"Rigid body extent {} > ghost atom cutoff - use comm_modify cutoff", maxextent); //check(1); @@ -2123,8 +2120,7 @@ void FixRigidSmall::setup_bodies_static() inertia = body[ibody].inertia; ierror = MathEigen::jacobi3(tensor,inertia,evectors); - if (ierror) error->all(FLERR, - "Insufficient Jacobi rotations for rigid body"); + if (ierror) error->all(FLERR, "Insufficient Jacobi rotations for rigid body"); ex = body[ibody].ex_space; ex[0] = evectors[0][0]; @@ -2320,30 +2316,30 @@ void FixRigidSmall::setup_bodies_static() if (inertia[0] == 0.0) { if (fabs(itensor[ibody][0]) > TOLERANCE) - error->all(FLERR,"Fix rigid: Bad principal moments"); + error->all(FLERR,"Fix {}: Bad principal moments", style); } else { if (fabs((itensor[ibody][0]-inertia[0])/inertia[0]) > - TOLERANCE) error->all(FLERR,"Fix rigid: Bad principal moments"); + TOLERANCE) error->all(FLERR,"Fix {}: Bad principal moments", style); } if (inertia[1] == 0.0) { if (fabs(itensor[ibody][1]) > TOLERANCE) - error->all(FLERR,"Fix rigid: Bad principal moments"); + error->all(FLERR,"Fix {}: Bad principal moments", style); } else { if (fabs((itensor[ibody][1]-inertia[1])/inertia[1]) > - TOLERANCE) error->all(FLERR,"Fix rigid: Bad principal moments"); + TOLERANCE) error->all(FLERR,"Fix {}: Bad principal moments", style); } if (inertia[2] == 0.0) { if (fabs(itensor[ibody][2]) > TOLERANCE) - error->all(FLERR,"Fix rigid: Bad principal moments"); + error->all(FLERR,"Fix {}: Bad principal moments", style); } else { if (fabs((itensor[ibody][2]-inertia[2])/inertia[2]) > - TOLERANCE) error->all(FLERR,"Fix rigid: Bad principal moments"); + TOLERANCE) error->all(FLERR,"Fix {}: Bad principal moments", style); } norm = (inertia[0] + inertia[1] + inertia[2]) / 3.0; if (fabs(itensor[ibody][3]/norm) > TOLERANCE || fabs(itensor[ibody][4]/norm) > TOLERANCE || fabs(itensor[ibody][5]/norm) > TOLERANCE) - error->all(FLERR,"Fix rigid: Bad principal moments"); + error->all(FLERR,"Fix {}: Bad principal moments", style); } // clean up @@ -2492,10 +2488,10 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody) if (me == 0) { fp = fopen(inpfile,"r"); if (fp == nullptr) - error->one(FLERR,"Cannot open fix rigid/small file {}: {}", inpfile, utils::getsyserror()); + error->one(FLERR,"Cannot open fix {} file {}: {}", style, inpfile, utils::getsyserror()); while (true) { eof = fgets(line,MAXLINE,fp); - if (eof == nullptr) error->one(FLERR,"Unexpected end of fix rigid/small file"); + if (eof == nullptr) error->one(FLERR,"Unexpected end of fix {} file", style); start = &line[strspn(line," \t\n\v\f\r")]; if (*start != '\0' && *start != '#') break; } @@ -2510,14 +2506,14 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody) // generation when no infile was previously used. if (nlines == 0) return; - else if (nlines < 0) error->all(FLERR,"Fix rigid infile has incorrect format"); + else if (nlines < 0) error->all(FLERR,"Fix {} infile has incorrect format", style); auto buffer = new char[CHUNK*MAXLINE]; int nread = 0; while (nread < nlines) { nchunk = MIN(nlines-nread,CHUNK); eofflag = utils::read_lines_from_file(fp,nchunk,MAXLINE,buffer,me,world); - if (eofflag) error->all(FLERR,"Unexpected end of fix rigid/small file"); + if (eofflag) error->all(FLERR,"Unexpected end of fix {} file", style); buf = buffer; next = strchr(buf,'\n'); @@ -2526,7 +2522,7 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody) *next = '\n'; if (nwords != ATTRIBUTE_PERBODY) - error->all(FLERR,"Incorrect rigid body format in fix rigid/small file"); + error->all(FLERR,"Incorrect rigid body format in fix {} file", style); // loop over lines of rigid body attributes // tokenize the line into values @@ -2543,7 +2539,7 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody) tagint id = values.next_tagint(); if (id <= 0 || id > maxmol) - error->all(FLERR,"Invalid rigid body molecude ID {} in fix rigid/small file", id); + error->all(FLERR,"Invalid rigid body molecude ID {} in fix {} file", id, style); if (hash.find(id) == hash.end()) { buf = next + 1; @@ -2580,7 +2576,7 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody) array[m][3] = values.next_double(); } } catch (TokenizerException &e) { - error->all(FLERR, "Invalid fix rigid/small infile: {}", e.what()); + error->all(FLERR, "Invalid fix {} infile: {}", style, e.what()); } buf = next + 1; } @@ -2611,7 +2607,8 @@ void FixRigidSmall::write_restart_file(const char *file) auto outfile = std::string(file) + ".rigid"; fp = fopen(outfile.c_str(),"w"); if (fp == nullptr) - error->one(FLERR,"Cannot open fix rigid restart file {}: {}",outfile,utils::getsyserror()); + error->one(FLERR, "Cannot open fix {} restart file {}: {}", + style, outfile, utils::getsyserror()); fmt::print(fp,"# fix rigid mass, COM, inertia tensor info for " "{} bodies on timestep {}\n\n",nbody,update->ntimestep); @@ -3382,9 +3379,8 @@ void FixRigidSmall::reset_atom2body() if (bodytag[i]) { iowner = atom->map(bodytag[i]); if (iowner == -1) - error->one(FLERR,"Rigid body atoms {} {} missing on " - "proc {} at step {}",atom->tag[i], - bodytag[i],comm->me,update->ntimestep); + error->one(FLERR, "Rigid body atoms {} {} missing on proc {} at step {}", + atom->tag[i], bodytag[i], comm->me, update->ntimestep); atom2body[i] = bodyown[iowner]; } From bd1794f142a6ad1fde680f41b539772494874489 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Tue, 17 Oct 2023 12:59:10 -0600 Subject: [PATCH 011/204] Remove debug output --- src/KOKKOS/kokkos.cpp | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 9eee432969..0c9a028f28 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -266,18 +266,10 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) #ifdef KOKKOS_ENABLE_CUDA gpu_aware_flag = 1; #elif defined(KOKKOS_ENABLE_HIP) && defined(OMPI_HAVE_MPI_EXT_ROCM) && OMPI_HAVE_MPI_EXT_ROCM - if(have_gpu_aware == 1) - { + if (have_gpu_aware == 1) gpu_aware_flag = MPIX_Query_rocm_support(); - if(gpu_aware_flag && me == 0) - { - error->warning(FLERR,"ROCm-aware OpenMPI is supported and enabled (debug msg, remove it later)"); - } - } else - { gpu_aware_flag = 0; - } #else gpu_aware_flag = 0; #endif From 6b184e8079bb33310cd3bf441cff59f82a7305b9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 17 Oct 2023 19:39:31 -0400 Subject: [PATCH 012/204] copy-and-paste bugfix from @stanmoore1 --- src/balance.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/balance.cpp b/src/balance.cpp index 3bd083e2b9..6f28081f13 100644 --- a/src/balance.cpp +++ b/src/balance.cpp @@ -473,7 +473,7 @@ void Balance::options(int iarg, int narg, char **arg, int sortflag_default) } iarg += 2+nopt; - } else if (strcmp(arg[iarg+1],"sort") == 0) { + } else if (strcmp(arg[iarg],"sort") == 0) { if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "balance sort", error); sortflag = utils::logical(FLERR,arg[iarg+1],false,lmp); iarg += 2; From dbd5f93ed475333e61d5fa2914eb3345ffe27eba Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 17 Oct 2023 19:41:00 -0400 Subject: [PATCH 013/204] whitespace --- src/KOKKOS/npair_halffull_kokkos.h | 2 +- src/KOKKOS/npair_kokkos.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/KOKKOS/npair_halffull_kokkos.h b/src/KOKKOS/npair_halffull_kokkos.h index 98526c7fee..3eee19b8c3 100644 --- a/src/KOKKOS/npair_halffull_kokkos.h +++ b/src/KOKKOS/npair_halffull_kokkos.h @@ -16,7 +16,7 @@ // Trim off -// Newton, no triclinic +// Newton, no triclinic typedef NPairHalffullKokkos NPairKokkosHalffullNewtonDevice; NPairStyle(halffull/newton/kk/device, diff --git a/src/KOKKOS/npair_kokkos.cpp b/src/KOKKOS/npair_kokkos.cpp index f677b3a1bf..45ec83e90e 100644 --- a/src/KOKKOS/npair_kokkos.cpp +++ b/src/KOKKOS/npair_kokkos.cpp @@ -1354,7 +1354,7 @@ void NeighborKokkosExecute::build_ItemSizeGPU(typename Kokkos::TeamP other_x[MY_II + 2 * atoms_per_bin] = ztmp; other_x[MY_II + 3 * atoms_per_bin] = itype; other_x[MY_II + 4 * atoms_per_bin] = radi; - if (HalfNeigh && Newton && Tri) { + if (HalfNeigh && Newton && Tri) { itag = tag(i); other_x[MY_II + 5 * atoms_per_bin] = itag; } From ea69d77b790f28632d6ae345eca6b6a143f010bf Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 17 Oct 2023 20:02:01 -0400 Subject: [PATCH 014/204] fix issues with Qt library detection --- tools/lammps-gui/CMakeLists.txt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tools/lammps-gui/CMakeLists.txt b/tools/lammps-gui/CMakeLists.txt index edfeeb1128..e83db05fdd 100644 --- a/tools/lammps-gui/CMakeLists.txt +++ b/tools/lammps-gui/CMakeLists.txt @@ -110,14 +110,15 @@ endif() # we require Qt 5 and at least version 5.12 at that. if(NOT LAMMPS_GUI_USE_QT5) - find_package(Qt6 6.2 COMPONENTS Widgets Charts) + find_package(Qt6 6.2 QUIET COMPONENTS Widgets Charts) endif() if(NOT Qt6_FOUND) find_package(Qt5 5.12 REQUIRED COMPONENTS Widgets Charts) - set(QT_VERSION_MAJOR "5") + set(QT_VERSION_MAJOR 5) else() - set(QT_VERSION_MAJOR "6") + set(QT_VERSION_MAJOR 6) endif() +message(STATUS "Using Qt version ${Qt${QT_VERSION_MAJOR}_VERSION} for LAMMPS GUI") set(PROJECT_SOURCES main.cpp @@ -188,7 +189,7 @@ else() endif() target_include_directories(lammps-gui PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) target_compile_definitions(lammps-gui PRIVATE LAMMPS_GUI_VERSION="${PROJECT_VERSION}") -target_link_libraries(lammps-gui PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${VERSION_MAJOR}::Charts) +target_link_libraries(lammps-gui PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Charts) if(BUILD_OMP) find_package(OpenMP COMPONENTS CXX REQUIRED) target_link_libraries(lammps-gui PRIVATE OpenMP::OpenMP_CXX) From 4c980eec91457763153b530a45095aa066cc96d1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 17 Oct 2023 20:52:13 -0400 Subject: [PATCH 015/204] correct table formatting --- doc/src/variable.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/variable.rst b/doc/src/variable.rst index f1a316da1f..3407b48156 100644 --- a/doc/src/variable.rst +++ b/doc/src/variable.rst @@ -1183,7 +1183,7 @@ table: +--------+------------+------------------------------------------+ | vector | c_ID | global vector | | vector | c_ID[I] | column of global array | ----------+------------+------------------------------------------+ ++--------+------------+------------------------------------------+ | atom | c_ID | per-atom vector | | atom | c_ID[I] | column of per-atom array | +--------+------------+------------------------------------------+ @@ -1247,7 +1247,7 @@ and atom-style variables are listed in the following table: +--------+------------+------------------------------------------+ | vector | f_ID | global vector | | vector | f_ID[I] | column of global array | ----------+------------+------------------------------------------+ ++--------+------------+------------------------------------------+ | atom | f_ID | per-atom vector | | atom | f_ID[I] | column of per-atom array | +--------+------------+------------------------------------------+ From 87fdff5874cb02347832da8d9a02eadf71ef109b Mon Sep 17 00:00:00 2001 From: Ben Nebgen Date: Tue, 17 Oct 2023 23:41:52 -0600 Subject: [PATCH 016/204] No variable transfer --- src/ML-IAP/mliap_data.cpp | 4 ++++ src/ML-IAP/mliap_data.h | 1 + src/ML-IAP/mliap_model_python_couple.pyx | 4 +++- src/ML-IAP/mliap_unified.cpp | 9 +++++++-- src/ML-IAP/mliap_unified_couple.pyx | 17 +++++++++++------ 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/ML-IAP/mliap_data.cpp b/src/ML-IAP/mliap_data.cpp index 1c817bd3bd..954b12d795 100644 --- a/src/ML-IAP/mliap_data.cpp +++ b/src/ML-IAP/mliap_data.cpp @@ -23,6 +23,7 @@ #include "mliap_descriptor.h" #include "mliap_model.h" #include "neigh_list.h" +#include using namespace LAMMPS_NS; @@ -115,6 +116,9 @@ void MLIAPData::generate_neighdata(NeighList *list_in, int eflag_in, int vflag_i int **firstneigh = list->firstneigh; int nall = atom->nlocal + atom->nghost; + std::cout << "nall value data: " << nall << std::endl; + int nlocalunified = atom->nlocal + 1; + std::cout << "nlocal value data: " << nlocalunified << std::endl; ntotal = nall; // grow nmax gradforce, elems arrays if necessary diff --git a/src/ML-IAP/mliap_data.h b/src/ML-IAP/mliap_data.h index dc468b99cb..c17f14d1ad 100644 --- a/src/ML-IAP/mliap_data.h +++ b/src/ML-IAP/mliap_data.h @@ -60,6 +60,7 @@ class MLIAPData : protected Pointers { int ntotal; // total number of owned and ghost atoms on this proc int nlistatoms; // current number of atoms in local atom lists + int nlocalunified; int nlistatoms_max; // allocated size of descriptor array int natomneigh; // current number of atoms and ghosts in atom neighbor arrays int natomneigh_max; // allocated size of atom neighbor arrays diff --git a/src/ML-IAP/mliap_model_python_couple.pyx b/src/ML-IAP/mliap_model_python_couple.pyx index 1f5b739092..ef2857f544 100644 --- a/src/ML-IAP/mliap_model_python_couple.pyx +++ b/src/ML-IAP/mliap_model_python_couple.pyx @@ -18,6 +18,7 @@ cdef extern from "mliap_data.h" namespace "LAMMPS_NS": cdef cppclass MLIAPData: # Array shapes int nlistatoms + int nlocalunified int ndescriptors # Input data @@ -103,7 +104,8 @@ cdef public void MLIAPPY_compute_gradients(MLIAPModelPython * c_model, MLIAPData model = retrieve(c_model) n_d = data.ndescriptors - n_a = data.nlistatoms + #n_a = data.nlistatoms + n_a = data.nlocalunified # Make numpy arrays from pointers beta_np = np.asarray( &data.betas[0][0]) diff --git a/src/ML-IAP/mliap_unified.cpp b/src/ML-IAP/mliap_unified.cpp index a3727976de..4976112882 100644 --- a/src/ML-IAP/mliap_unified.cpp +++ b/src/ML-IAP/mliap_unified.cpp @@ -28,6 +28,7 @@ #include "pair_mliap.h" #include "python_compat.h" #include "utils.h" +#include using namespace LAMMPS_NS; @@ -194,6 +195,7 @@ MLIAPBuildUnified_t LAMMPS_NS::build_unified(char *unified_fname, MLIAPData *dat char *coefffilename) { lmp->python->init(); + std::cout << "nlocalunified at build_unified: " << data->nlocalunified << std::endl; PyGILState_STATE gstate = PyGILState_Ensure(); PyObject *pyMain = PyImport_AddModule("__main__"); @@ -267,15 +269,18 @@ void LAMMPS_NS::update_pair_energy(MLIAPData *data, double *eij) void LAMMPS_NS::update_pair_forces(MLIAPData *data, double *fij) { - const auto nlistatoms = data->nlistatoms; + //Bugfix: need to account for Null atoms in local atoms + //const auto nlistatoms = data->nlistatoms; + const auto nlocalunified = data->nlocalunified; double **f = data->f; + std::cout << "nlocal value: " << data->nlocalunified << std::endl; for (int ii = 0; ii < data->npairs; ii++) { int ii3 = ii * 3; int i = data->pair_i[ii]; int j = data->jatoms[ii]; // must not count any contribution where i is not a local atom - if (i < nlistatoms) { + if (i < nlocalunified) { f[i][0] += fij[ii3]; f[i][1] += fij[ii3 + 1]; f[i][2] += fij[ii3 + 2]; diff --git a/src/ML-IAP/mliap_unified_couple.pyx b/src/ML-IAP/mliap_unified_couple.pyx index 25852a1c5f..4fd360fc22 100644 --- a/src/ML-IAP/mliap_unified_couple.pyx +++ b/src/ML-IAP/mliap_unified_couple.pyx @@ -54,6 +54,7 @@ cdef extern from "mliap_data.h" namespace "LAMMPS_NS": int ntotal # total number of owned and ghost atoms on this proc int nlistatoms # current number of atoms in local atom lists + int nlocalunified int natomneigh # current number of atoms and ghosts in atom neighbor arrays int * numneighs # neighbors count for each atom int * iatoms # index of each atom @@ -144,7 +145,7 @@ cdef class MLIAPDataPy: def betas(self, value): if self.data.betas is NULL: raise ValueError("attempt to set NULL betas") - cdef double[:, :] betas_view = &self.data.betas[0][0] + cdef double[:, :] betas_view = &self.data.betas[0][0] cdef double[:, :] value_view = value betas_view[:] = value_view @@ -152,7 +153,7 @@ cdef class MLIAPDataPy: def descriptors(self, value): if self.data.descriptors is NULL: raise ValueError("attempt to set NULL descriptors") - cdef double[:, :] descriptors_view = &self.data.descriptors[0][0] + cdef double[:, :] descriptors_view = &self.data.descriptors[0][0] cdef double[:, :] value_view = value descriptors_view[:] = value_view @@ -160,7 +161,7 @@ cdef class MLIAPDataPy: def eatoms(self, value): if self.data.eatoms is NULL: raise ValueError("attempt to set NULL eatoms") - cdef double[:] eatoms_view = &self.data.eatoms[0] + cdef double[:] eatoms_view = &self.data.eatoms[0] cdef double[:] value_view = value eatoms_view[:] = value_view @@ -190,19 +191,19 @@ cdef class MLIAPDataPy: def gamma(self): if self.data.gamma is NULL: return None - return np.asarray( &self.data.gamma[0][0]) + return np.asarray( &self.data.gamma[0][0]) @property def gamma_row_index(self): if self.data.gamma_row_index is NULL: return None - return np.asarray( &self.data.gamma_row_index[0][0]) + return np.asarray( &self.data.gamma_row_index[0][0]) @property def gamma_col_index(self): if self.data.gamma_col_index is NULL: return None - return np.asarray( &self.data.gamma_col_index[0][0]) + return np.asarray( &self.data.gamma_col_index[0][0]) @property def egradient(self): @@ -226,6 +227,10 @@ cdef class MLIAPDataPy: @property def nlistatoms(self): return self.data.nlistatoms + + @property + def nlocalunified(self): + return self.data.nlocalunified @property def natomneigh(self): From 0f1026935727104e95617e6d000926474bac7810 Mon Sep 17 00:00:00 2001 From: Ben Nebgen Date: Tue, 17 Oct 2023 23:45:52 -0600 Subject: [PATCH 017/204] cleaning --- src/ML-IAP/mliap_data.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ML-IAP/mliap_data.cpp b/src/ML-IAP/mliap_data.cpp index 954b12d795..ae78d32d74 100644 --- a/src/ML-IAP/mliap_data.cpp +++ b/src/ML-IAP/mliap_data.cpp @@ -117,7 +117,7 @@ void MLIAPData::generate_neighdata(NeighList *list_in, int eflag_in, int vflag_i int nall = atom->nlocal + atom->nghost; std::cout << "nall value data: " << nall << std::endl; - int nlocalunified = atom->nlocal + 1; + int nlocalunified = atom->nlocal; std::cout << "nlocal value data: " << nlocalunified << std::endl; ntotal = nall; From 302e3be66978f81205d63a16b60d4eb5d9b5a34a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 18 Oct 2023 07:51:25 -0400 Subject: [PATCH 018/204] make sure itag is initialized --- src/OPENMP/npair_half_size_multi_old_newton_tri_omp.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/OPENMP/npair_half_size_multi_old_newton_tri_omp.cpp b/src/OPENMP/npair_half_size_multi_old_newton_tri_omp.cpp index 7faa210107..1c6d025fab 100644 --- a/src/OPENMP/npair_half_size_multi_old_newton_tri_omp.cpp +++ b/src/OPENMP/npair_half_size_multi_old_newton_tri_omp.cpp @@ -87,6 +87,7 @@ void NPairHalfSizeMultiOldNewtonTriOmp::build(NeighList *list) n = 0; neighptr = ipage.vget(); + itag = tag[i]; itype = type[i]; xtmp = x[i][0]; ytmp = x[i][1]; From 5cfd8b3c63d12051c988b1fe30c289d1d35a9bc5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 18 Oct 2023 07:56:50 -0400 Subject: [PATCH 019/204] silence coverity scan warning --- src/fix_property_atom.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fix_property_atom.cpp b/src/fix_property_atom.cpp index 3a53110839..9613523059 100644 --- a/src/fix_property_atom.cpp +++ b/src/fix_property_atom.cpp @@ -46,6 +46,7 @@ FixPropertyAtom::FixPropertyAtom(LAMMPS *lmp, int narg, char **arg) : rmass_flag = 0; temperature_flag = 0; heatflow_flag = 0; + nmax_old = 0; nvalue = 0; values_peratom = 0; @@ -212,7 +213,6 @@ void FixPropertyAtom::post_constructor() { // perform initial allocation of atom-based array - nmax_old = 0; grow_arrays(atom->nmax); } From a5f61c5d4405a8af7c9c6962936a21c0622864b2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 18 Oct 2023 07:59:22 -0400 Subject: [PATCH 020/204] address bugs and issues flagged by static code analysis with coverity scan --- src/fix_press_langevin.cpp | 30 +++++++++++++++++------------- src/fix_press_langevin.h | 7 +++---- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/fix_press_langevin.cpp b/src/fix_press_langevin.cpp index d8b90d8b49..2f6e765cd5 100644 --- a/src/fix_press_langevin.cpp +++ b/src/fix_press_langevin.cpp @@ -46,7 +46,8 @@ enum { ISO, ANISO, TRICLINIC }; /* ---------------------------------------------------------------------- */ FixPressLangevin::FixPressLangevin(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), id_press(nullptr), pflag(0), random(nullptr), irregular(nullptr) + Fix(lmp, narg, arg), id_temp(nullptr), id_press(nullptr), temperature(nullptr), + pressure(nullptr), irregular(nullptr), random(nullptr) { if (narg < 5) utils::missing_cmd_args(FLERR, "fix press/langevin", error); @@ -62,6 +63,9 @@ FixPressLangevin::FixPressLangevin(LAMMPS *lmp, int narg, char **arg) : allremap = 1; pre_exchange_flag = 0; flipflag = 1; + seed = 111111; + pflag = 0; + kspace_flag = 0; p_ltime = 0.0; @@ -239,7 +243,7 @@ FixPressLangevin::FixPressLangevin(LAMMPS *lmp, int narg, char **arg) : t_start = utils::numeric(FLERR, arg[iarg + 1], false, lmp); t_stop = utils::numeric(FLERR, arg[iarg + 2], false, lmp); seed = utils::numeric(FLERR, arg[iarg + 3], false, lmp); - if (seed <= 0.0) error->all(FLERR, "Fix press/langevin temp seed must be > 0"); + if (seed <= 0) error->all(FLERR, "Fix press/langevin temp seed must be > 0"); iarg += 4; } @@ -349,7 +353,7 @@ FixPressLangevin::FixPressLangevin(LAMMPS *lmp, int narg, char **arg) : // Kinetic contribution will be added by the fix style id_press = utils::strdup(std::string(id) + "_press"); - modify->add_compute(fmt::format("{} all pressure NULL virial", id_press)); + pressure = modify->add_compute(fmt::format("{} all pressure NULL virial", id_press)); pflag = 1; // p_fric is alpha coeff from GJF @@ -482,7 +486,7 @@ void FixPressLangevin::initial_integrate(int /* vflag */) if (delta != 0.0) delta /= update->endstep - update->beginstep; t_target = t_start + delta * (t_stop - t_start); - couple_beta(t_target); + couple_beta(); dt = update->dt; @@ -492,11 +496,12 @@ void FixPressLangevin::initial_integrate(int /* vflag */) displacement = dt * p_deriv[i] * gjfb[i]; displacement += 0.5 * dt * dt * f_piston[i] * gjfb[i] / p_mass[i]; displacement += 0.5 * dt * fran[i] * gjfb[i] / p_mass[i]; - dl = domain->boxhi[i] - domain->boxlo[i]; - if (i < 3) + if (i < 3) { + dl = domain->boxhi[i] - domain->boxlo[i]; dilation[i] = (dl + displacement) / dl; - else + } else { dilation[i] = displacement; + } } } } @@ -527,7 +532,7 @@ void FixPressLangevin::post_force(int /*vflag*/) } couple_pressure(); - couple_kinetic(t_target); + couple_kinetic(); for (int i = 0; i < 6; i++) { if (p_flag[i]) { @@ -594,10 +599,9 @@ void FixPressLangevin::couple_pressure() } /* ---------------------------------------------------------------------- */ -void FixPressLangevin::couple_kinetic(double t_target) +void FixPressLangevin::couple_kinetic() { double pk, volume; - nktv2p = force->nktv2p; // kinetic part @@ -607,7 +611,7 @@ void FixPressLangevin::couple_kinetic(double t_target) volume = domain->xprd * domain->yprd; pk = atom->natoms * force->boltz * t_target / volume; - pk *= nktv2p; + pk *= force->nktv2p; p_current[0] += pk; p_current[1] += pk; @@ -616,7 +620,7 @@ void FixPressLangevin::couple_kinetic(double t_target) /* ---------------------------------------------------------------------- */ -void FixPressLangevin::couple_beta(double t_target) +void FixPressLangevin::couple_beta() { double gamma[6]; int me = comm->me; @@ -812,7 +816,7 @@ int FixPressLangevin::modify_param(int narg, char **arg) id_press = utils::strdup(arg[1]); pressure = modify->get_compute_by_id(arg[1]); - if (pressure) error->all(FLERR, "Could not find fix_modify pressure compute ID: {}", arg[1]); + if (!pressure) error->all(FLERR, "Could not find fix_modify pressure compute ID: {}", arg[1]); if (pressure->pressflag == 0) error->all(FLERR, "Fix_modify pressure compute {} does not compute pressure", arg[1]); return 2; diff --git a/src/fix_press_langevin.h b/src/fix_press_langevin.h index fc9f39c434..868993b1f4 100644 --- a/src/fix_press_langevin.h +++ b/src/fix_press_langevin.h @@ -40,10 +40,9 @@ class FixPressLangevin : public Fix { int modify_param(int, char **) override; protected: - int dimension, which; + int dimension; int pstyle, pcouple, allremap; int p_flag[6]; // 1 if control P on this dim, 0 if not - double nktv2p; double t_start, t_stop, t_target; double p_fric[6], p_ltime; // Friction and Langevin charac. time double p_alpha[6]; @@ -68,8 +67,8 @@ class FixPressLangevin : public Fix { int seed; void couple_pressure(); - void couple_kinetic(double); - void couple_beta(double); + void couple_kinetic(); + void couple_beta(); void remap(); }; From 54ff01d86daa134e48feeef503da52b750cf9ffc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 18 Oct 2023 08:01:41 -0400 Subject: [PATCH 021/204] assign code owner to fix press/langevin --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f99a336dbb..9b316fbeb9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -135,6 +135,7 @@ src/timer.* @akohlmey src/utils.* @akohlmey @rbberger src/verlet.* @sjplimp @stanmoore1 src/math_eigen_impl.h @jewettaij +src/fix_press_langevin.* @Bibobu # tools tools/coding_standard/* @akohlmey @rbberger From 791f7d1d882fc4f994891e5cb59efaafd884c912 Mon Sep 17 00:00:00 2001 From: vladgl Date: Wed, 18 Oct 2023 22:14:42 +0300 Subject: [PATCH 022/204] Add dynamic check for CUDA --- src/KOKKOS/kokkos.cpp | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 0c9a028f28..787f75fd47 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -37,7 +37,7 @@ // for detecting GPU-aware MPI support: // the variable int have_gpu_aware -// - is 1 if GPU-aware MPI support is available +// - is 1 if GPU-aware MPI support is potentially available // - is 0 if GPU-aware MPI support is unavailable // - is -1 if GPU-aware MPI support is unknown @@ -48,24 +48,20 @@ GPU_AWARE_UNKNOWN #elif defined(KOKKOS_ENABLE_CUDA) // OpenMPI supports detecting GPU-aware MPI as of version 2.0.0 - #if (OPEN_MPI) #if (OMPI_MAJOR_VERSION >= 2) - #include - #if defined(MPIX_CUDA_AWARE_SUPPORT) && MPIX_CUDA_AWARE_SUPPORT +// May have CUDA-aware enabled: below we will check dynamically with MPIX_Query_cuda_support() static int have_gpu_aware = 1; #elif defined(MPIX_CUDA_AWARE_SUPPORT) && !MPIX_CUDA_AWARE_SUPPORT static int have_gpu_aware = 0; #else GPU_AWARE_UNKNOWN #endif // defined(MPIX_CUDA_AWARE_SUPPORT) - #else // old OpenMPI GPU_AWARE_UNKNOWN #endif // (OMPI_MAJOR_VERSION >=2) - #else // unknown MPI library GPU_AWARE_UNKNOWN #endif // OPEN_MPI @@ -76,10 +72,10 @@ GPU_AWARE_UNKNOWN #if (OPEN_MPI) #if (OMPI_MAJOR_VERSION >= 5) #include -#if defined(OMPI_HAVE_MPI_EXT_ROCM) && OMPI_HAVE_MPI_EXT_ROCM -// May have rocm enabled: below we will check dynamically with MPIX_Query_rocm_support() +#if defined(MPIX_ROCM_AWARE_SUPPORT ) && MPIX_ROCM_AWARE_SUPPORT +// May have ROCm-aware enabled: below we will check dynamically with MPIX_Query_rocm_support() static int have_gpu_aware = 1; -#elif defined(OMPI_HAVE_MPI_EXT_ROCM) && !OMPI_HAVE_MPI_EXT_ROCM +#elif defined(MPIX_ROCM_AWARE_SUPPORT) && !MPIX_ROCM_AWARE_SUPPORT static int have_gpu_aware = 0; #else GPU_AWARE_UNKNOWN @@ -263,13 +259,10 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) // default settings for package kokkos command binsize = 0.0; -#ifdef KOKKOS_ENABLE_CUDA - gpu_aware_flag = 1; -#elif defined(KOKKOS_ENABLE_HIP) && defined(OMPI_HAVE_MPI_EXT_ROCM) && OMPI_HAVE_MPI_EXT_ROCM - if (have_gpu_aware == 1) - gpu_aware_flag = MPIX_Query_rocm_support(); - else - gpu_aware_flag = 0; +#if defined(KOKKOS_ENABLE_CUDA) && defined(MPIX_CUDA_AWARE_SUPPORT) && MPIX_CUDA_AWARE_SUPPORT + gpu_aware_flag = MPIX_Query_cuda_support(); +#elif defined(KOKKOS_ENABLE_HIP) && defined(MPIX_ROCM_AWARE_SUPPORT) && MPIX_ROCM_AWARE_SUPPORT + gpu_aware_flag = MPIX_Query_rocm_support(); #else gpu_aware_flag = 0; #endif From 0501674724d64301fc4747e25a7953cbb9d1d625 Mon Sep 17 00:00:00 2001 From: Ben Nebgen Date: Wed, 18 Oct 2023 23:07:21 -0600 Subject: [PATCH 023/204] Commit before cleaning changes --- src/ML-IAP/compute_mliap.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ML-IAP/compute_mliap.cpp b/src/ML-IAP/compute_mliap.cpp index 4fa88abad1..3416b42dc0 100644 --- a/src/ML-IAP/compute_mliap.cpp +++ b/src/ML-IAP/compute_mliap.cpp @@ -36,7 +36,7 @@ #include "neighbor.h" #include "pair.h" #include "update.h" - +#include #include using namespace LAMMPS_NS; @@ -120,6 +120,7 @@ ComputeMLIAP::ComputeMLIAP(LAMMPS *lmp, int narg, char **arg) : map[i] = i-1; data = new MLIAPData(lmp, gradgradflag, map, model, descriptor); + std::cout << "nlocalunified in compute_mliap.cpp: " << data->nlocalunified << std::endl; size_array_rows = data->size_array_rows; size_array_cols = data->size_array_cols; From e188407566383559704673180fd66eabc7021b97 Mon Sep 17 00:00:00 2001 From: Ben Nebgen Date: Wed, 18 Oct 2023 23:17:25 -0600 Subject: [PATCH 024/204] Cleaned fix --- src/ML-IAP/compute_mliap.cpp | 3 +-- src/ML-IAP/mliap_data.cpp | 3 +-- src/ML-IAP/mliap_data.h | 2 +- src/ML-IAP/mliap_model_python_couple.pyx | 5 ++--- src/ML-IAP/mliap_unified.cpp | 6 ++---- src/ML-IAP/mliap_unified_couple.pyx | 18 +++++++++--------- 6 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/ML-IAP/compute_mliap.cpp b/src/ML-IAP/compute_mliap.cpp index 3416b42dc0..4fa88abad1 100644 --- a/src/ML-IAP/compute_mliap.cpp +++ b/src/ML-IAP/compute_mliap.cpp @@ -36,7 +36,7 @@ #include "neighbor.h" #include "pair.h" #include "update.h" -#include + #include using namespace LAMMPS_NS; @@ -120,7 +120,6 @@ ComputeMLIAP::ComputeMLIAP(LAMMPS *lmp, int narg, char **arg) : map[i] = i-1; data = new MLIAPData(lmp, gradgradflag, map, model, descriptor); - std::cout << "nlocalunified in compute_mliap.cpp: " << data->nlocalunified << std::endl; size_array_rows = data->size_array_rows; size_array_cols = data->size_array_cols; diff --git a/src/ML-IAP/mliap_data.cpp b/src/ML-IAP/mliap_data.cpp index ae78d32d74..b220939538 100644 --- a/src/ML-IAP/mliap_data.cpp +++ b/src/ML-IAP/mliap_data.cpp @@ -116,8 +116,7 @@ void MLIAPData::generate_neighdata(NeighList *list_in, int eflag_in, int vflag_i int **firstneigh = list->firstneigh; int nall = atom->nlocal + atom->nghost; - std::cout << "nall value data: " << nall << std::endl; - int nlocalunified = atom->nlocal; + nlocal = atom->nlocal; std::cout << "nlocal value data: " << nlocalunified << std::endl; ntotal = nall; diff --git a/src/ML-IAP/mliap_data.h b/src/ML-IAP/mliap_data.h index c17f14d1ad..9746b4da5e 100644 --- a/src/ML-IAP/mliap_data.h +++ b/src/ML-IAP/mliap_data.h @@ -60,7 +60,7 @@ class MLIAPData : protected Pointers { int ntotal; // total number of owned and ghost atoms on this proc int nlistatoms; // current number of atoms in local atom lists - int nlocalunified; + int nlocal; int nlistatoms_max; // allocated size of descriptor array int natomneigh; // current number of atoms and ghosts in atom neighbor arrays int natomneigh_max; // allocated size of atom neighbor arrays diff --git a/src/ML-IAP/mliap_model_python_couple.pyx b/src/ML-IAP/mliap_model_python_couple.pyx index ef2857f544..3beffc77bb 100644 --- a/src/ML-IAP/mliap_model_python_couple.pyx +++ b/src/ML-IAP/mliap_model_python_couple.pyx @@ -18,7 +18,7 @@ cdef extern from "mliap_data.h" namespace "LAMMPS_NS": cdef cppclass MLIAPData: # Array shapes int nlistatoms - int nlocalunified + int nlocal int ndescriptors # Input data @@ -104,8 +104,7 @@ cdef public void MLIAPPY_compute_gradients(MLIAPModelPython * c_model, MLIAPData model = retrieve(c_model) n_d = data.ndescriptors - #n_a = data.nlistatoms - n_a = data.nlocalunified + n_a = data.nlistatoms # Make numpy arrays from pointers beta_np = np.asarray( &data.betas[0][0]) diff --git a/src/ML-IAP/mliap_unified.cpp b/src/ML-IAP/mliap_unified.cpp index 4976112882..7bb89fe0b4 100644 --- a/src/ML-IAP/mliap_unified.cpp +++ b/src/ML-IAP/mliap_unified.cpp @@ -28,7 +28,6 @@ #include "pair_mliap.h" #include "python_compat.h" #include "utils.h" -#include using namespace LAMMPS_NS; @@ -195,7 +194,6 @@ MLIAPBuildUnified_t LAMMPS_NS::build_unified(char *unified_fname, MLIAPData *dat char *coefffilename) { lmp->python->init(); - std::cout << "nlocalunified at build_unified: " << data->nlocalunified << std::endl; PyGILState_STATE gstate = PyGILState_Ensure(); PyObject *pyMain = PyImport_AddModule("__main__"); @@ -271,7 +269,7 @@ void LAMMPS_NS::update_pair_forces(MLIAPData *data, double *fij) { //Bugfix: need to account for Null atoms in local atoms //const auto nlistatoms = data->nlistatoms; - const auto nlocalunified = data->nlocalunified; + const auto nlocalunified = data->nlocal; double **f = data->f; std::cout << "nlocal value: " << data->nlocalunified << std::endl; for (int ii = 0; ii < data->npairs; ii++) { @@ -280,7 +278,7 @@ void LAMMPS_NS::update_pair_forces(MLIAPData *data, double *fij) int j = data->jatoms[ii]; // must not count any contribution where i is not a local atom - if (i < nlocalunified) { + if (i < nlocal) { f[i][0] += fij[ii3]; f[i][1] += fij[ii3 + 1]; f[i][2] += fij[ii3 + 2]; diff --git a/src/ML-IAP/mliap_unified_couple.pyx b/src/ML-IAP/mliap_unified_couple.pyx index 4fd360fc22..63a414ecbb 100644 --- a/src/ML-IAP/mliap_unified_couple.pyx +++ b/src/ML-IAP/mliap_unified_couple.pyx @@ -54,7 +54,7 @@ cdef extern from "mliap_data.h" namespace "LAMMPS_NS": int ntotal # total number of owned and ghost atoms on this proc int nlistatoms # current number of atoms in local atom lists - int nlocalunified + int nlocal int natomneigh # current number of atoms and ghosts in atom neighbor arrays int * numneighs # neighbors count for each atom int * iatoms # index of each atom @@ -145,7 +145,7 @@ cdef class MLIAPDataPy: def betas(self, value): if self.data.betas is NULL: raise ValueError("attempt to set NULL betas") - cdef double[:, :] betas_view = &self.data.betas[0][0] + cdef double[:, :] betas_view = &self.data.betas[0][0] cdef double[:, :] value_view = value betas_view[:] = value_view @@ -153,7 +153,7 @@ cdef class MLIAPDataPy: def descriptors(self, value): if self.data.descriptors is NULL: raise ValueError("attempt to set NULL descriptors") - cdef double[:, :] descriptors_view = &self.data.descriptors[0][0] + cdef double[:, :] descriptors_view = &self.data.descriptors[0][0] cdef double[:, :] value_view = value descriptors_view[:] = value_view @@ -161,7 +161,7 @@ cdef class MLIAPDataPy: def eatoms(self, value): if self.data.eatoms is NULL: raise ValueError("attempt to set NULL eatoms") - cdef double[:] eatoms_view = &self.data.eatoms[0] + cdef double[:] eatoms_view = &self.data.eatoms[0] cdef double[:] value_view = value eatoms_view[:] = value_view @@ -191,19 +191,19 @@ cdef class MLIAPDataPy: def gamma(self): if self.data.gamma is NULL: return None - return np.asarray( &self.data.gamma[0][0]) + return np.asarray( &self.data.gamma[0][0]) @property def gamma_row_index(self): if self.data.gamma_row_index is NULL: return None - return np.asarray( &self.data.gamma_row_index[0][0]) + return np.asarray( &self.data.gamma_row_index[0][0]) @property def gamma_col_index(self): if self.data.gamma_col_index is NULL: return None - return np.asarray( &self.data.gamma_col_index[0][0]) + return np.asarray( &self.data.gamma_col_index[0][0]) @property def egradient(self): @@ -229,8 +229,8 @@ cdef class MLIAPDataPy: return self.data.nlistatoms @property - def nlocalunified(self): - return self.data.nlocalunified + def nlocal(self): + return self.data.nlocal @property def natomneigh(self): From 4602c8c8498cde69844c12bed96a1bd1b26d7771 Mon Sep 17 00:00:00 2001 From: Ben Nebgen Date: Wed, 18 Oct 2023 23:22:16 -0600 Subject: [PATCH 025/204] First null atom fix pass --- src/ML-IAP/mliap_unified.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ML-IAP/mliap_unified.cpp b/src/ML-IAP/mliap_unified.cpp index 7bb89fe0b4..043cbf873d 100644 --- a/src/ML-IAP/mliap_unified.cpp +++ b/src/ML-IAP/mliap_unified.cpp @@ -245,7 +245,8 @@ MLIAPBuildUnified_t LAMMPS_NS::build_unified(char *unified_fname, MLIAPData *dat void LAMMPS_NS::update_pair_energy(MLIAPData *data, double *eij) { double e_total = 0.0; - const auto nlistatoms = data->nlistatoms; + //const auto nlistatoms = data->nlistatoms; + const auto nlocal = data->nlocal; for (int ii = 0; ii < nlistatoms; ii++) data->eatoms[ii] = 0; for (int ii = 0; ii < data->npairs; ii++) { @@ -253,7 +254,7 @@ void LAMMPS_NS::update_pair_energy(MLIAPData *data, double *eij) double e = 0.5 * eij[ii]; // must not count any contribution where i is not a local atom - if (i < nlistatoms) { + if (i < nlocal) { data->eatoms[i] += e; e_total += e; } @@ -269,9 +270,9 @@ void LAMMPS_NS::update_pair_forces(MLIAPData *data, double *fij) { //Bugfix: need to account for Null atoms in local atoms //const auto nlistatoms = data->nlistatoms; - const auto nlocalunified = data->nlocal; + const auto nlocal = data->nlocal; double **f = data->f; - std::cout << "nlocal value: " << data->nlocalunified << std::endl; + std::cout << "nlocal value: " << nlocal << std::endl; for (int ii = 0; ii < data->npairs; ii++) { int ii3 = ii * 3; int i = data->pair_i[ii]; From bcc93c2dc560bd1b416d3f1795c39610815f72fb Mon Sep 17 00:00:00 2001 From: Ben Nebgen Date: Thu, 19 Oct 2023 00:19:02 -0600 Subject: [PATCH 026/204] Initial working Null atom fix --- src/ML-IAP/mliap_data.cpp | 2 +- src/ML-IAP/mliap_unified.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ML-IAP/mliap_data.cpp b/src/ML-IAP/mliap_data.cpp index b220939538..3fb06ee66d 100644 --- a/src/ML-IAP/mliap_data.cpp +++ b/src/ML-IAP/mliap_data.cpp @@ -117,7 +117,7 @@ void MLIAPData::generate_neighdata(NeighList *list_in, int eflag_in, int vflag_i int nall = atom->nlocal + atom->nghost; nlocal = atom->nlocal; - std::cout << "nlocal value data: " << nlocalunified << std::endl; + std::cout << "nlocal value data: " << nlocal << std::endl; ntotal = nall; // grow nmax gradforce, elems arrays if necessary diff --git a/src/ML-IAP/mliap_unified.cpp b/src/ML-IAP/mliap_unified.cpp index 043cbf873d..49c9660098 100644 --- a/src/ML-IAP/mliap_unified.cpp +++ b/src/ML-IAP/mliap_unified.cpp @@ -29,6 +29,8 @@ #include "python_compat.h" #include "utils.h" +#include + using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ @@ -245,7 +247,7 @@ MLIAPBuildUnified_t LAMMPS_NS::build_unified(char *unified_fname, MLIAPData *dat void LAMMPS_NS::update_pair_energy(MLIAPData *data, double *eij) { double e_total = 0.0; - //const auto nlistatoms = data->nlistatoms; + const auto nlistatoms = data->nlistatoms; const auto nlocal = data->nlocal; for (int ii = 0; ii < nlistatoms; ii++) data->eatoms[ii] = 0; From 0fc9b194dc36176e2eb2dd472cc50087c9e7e1da Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 19 Oct 2023 10:01:10 -0400 Subject: [PATCH 027/204] quote strings with special characters in keyword lists --- src/EXTRA-DUMP/dump_yaml.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/EXTRA-DUMP/dump_yaml.cpp b/src/EXTRA-DUMP/dump_yaml.cpp index 3ca5c59edf..6c21c24f77 100644 --- a/src/EXTRA-DUMP/dump_yaml.cpp +++ b/src/EXTRA-DUMP/dump_yaml.cpp @@ -24,6 +24,8 @@ using namespace LAMMPS_NS; +static constexpr char special_chars[] = "{}[],&:*#?|-<>=!%@\\"; + /* ---------------------------------------------------------------------- */ DumpYAML::DumpYAML(class LAMMPS *_lmp, int narg, char **args) : DumpCustom(_lmp, narg, args), thermo(false) @@ -67,7 +69,12 @@ void DumpYAML::write_header(bigint ndump) const auto &fields = th->get_fields(); thermo_data += "thermo:\n - keywords: [ "; - for (int i = 0; i < nfield; ++i) thermo_data += fmt::format("{}, ", keywords[i]); + for (int i = 0; i < nfield; ++i) { + if (keywords[i].find_first_of(special_chars) == std::string::npos) + thermo_data += fmt::format("{}, ", keywords[i]); + else + thermo_data += fmt::format("'{}', ", keywords[i]); + } thermo_data += "]\n - data: [ "; for (int i = 0; i < nfield; ++i) { @@ -107,7 +114,12 @@ void DumpYAML::write_header(bigint ndump) if (domain->triclinic) fmt::print(fp, " - [ {}, {}, {} ]\n", boxxy, boxxz, boxyz); fmt::print(fp, "keywords: [ "); - for (const auto &item : utils::split_words(columns)) fmt::print(fp, "{}, ", item); + for (const auto &item : utils::split_words(columns)) { + if (item.find_first_of(special_chars) == std::string::npos) + fmt::print(fp, "{}, ", item); + else + fmt::print(fp, "'{}', ", item); + } fputs(" ]\ndata:\n", fp); } else // reset so that the remainder of the output is not multi-proc filewriter = 0; From 62ea874d9df5727a97d90bf922291b0eebd103fc Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 19 Oct 2023 08:02:11 -0600 Subject: [PATCH 028/204] Add more error checks to Kokkos minimize --- src/KOKKOS/min_kokkos.cpp | 3 +++ src/min.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/KOKKOS/min_kokkos.cpp b/src/KOKKOS/min_kokkos.cpp index 4e1c3967ff..bbb9a0bd6e 100644 --- a/src/KOKKOS/min_kokkos.cpp +++ b/src/KOKKOS/min_kokkos.cpp @@ -59,6 +59,9 @@ void MinKokkos::init() { Min::init(); + if (!fix_minimize->kokkosable) + error->all(FLERR,"KOKKOS package requires fix minimize/kk"); + fix_minimize_kk = (FixMinimizeKokkos*) fix_minimize; } diff --git a/src/min.cpp b/src/min.cpp index 5a469a788b..acc7d17654 100644 --- a/src/min.cpp +++ b/src/min.cpp @@ -215,6 +215,9 @@ void Min::setup(int flag) } update->setupflag = 1; + if (lmp->kokkos) + error->all(FLERR,"KOKKOS package requires Kokkos-enabled min_style"); + // setup extra global dof due to fixes // cannot be done in init() b/c update init() is before modify init() From 2401cba84a5e9b07f50fe3a71a4cb6ec1048b025 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 19 Oct 2023 12:15:01 -0700 Subject: [PATCH 029/204] Fix bug in Kokkos SNAP on GPUs --- src/KOKKOS/pair_snap_kokkos_impl.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index 91f432dbaf..68303f9b33 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -63,10 +63,6 @@ PairSNAPKokkos::PairSNAPKokkos(LAMMPS *lmp datamask_read = EMPTY_MASK; datamask_modify = EMPTY_MASK; - k_cutsq = tdual_fparams("PairSNAPKokkos::cutsq",atom->ntypes+1,atom->ntypes+1); - auto d_cutsq = k_cutsq.template view(); - rnd_cutsq = d_cutsq; - host_flag = (execution_space == Host); } @@ -101,6 +97,8 @@ void PairSNAPKokkos::init_style() if (force->newton_pair == 0) error->all(FLERR,"Pair style SNAP requires newton pair on"); + + // neighbor list request for KOKKOS neighflag = lmp->kokkos->neighflag; @@ -546,6 +544,9 @@ void PairSNAPKokkos::allocate() int n = atom->ntypes; MemKK::realloc_kokkos(d_map,"PairSNAPKokkos::map",n+1); + + MemKK::realloc_kokkos(k_cutsq,"PairSNAPKokkos::cutsq",n+1,n+1); + rnd_cutsq = k_cutsq.template view(); } From 1de15c38bf9375a77768c7b4530fc999a2ebd8a8 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 19 Oct 2023 12:16:26 -0700 Subject: [PATCH 030/204] whitespace --- src/KOKKOS/pair_snap_kokkos_impl.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index 68303f9b33..7b9fda60db 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -97,8 +97,6 @@ void PairSNAPKokkos::init_style() if (force->newton_pair == 0) error->all(FLERR,"Pair style SNAP requires newton pair on"); - - // neighbor list request for KOKKOS neighflag = lmp->kokkos->neighflag; From d93d4f8b5cb62635b9068b3436d8eb50255caac2 Mon Sep 17 00:00:00 2001 From: Ben Nebgen Date: Thu, 19 Oct 2023 17:32:21 -0600 Subject: [PATCH 031/204] normal complete, kokkos in development --- src/KOKKOS/mliap_data_kokkos.cpp | 1 + src/KOKKOS/mliap_data_kokkos.h | 4 +++- src/KOKKOS/mliap_model_python_couple_kokkos.pyx | 1 + src/KOKKOS/mliap_unified_couple_kokkos.pyx | 5 +++++ src/KOKKOS/mliap_unified_kokkos.cpp | 10 +++++----- src/ML-IAP/mliap_data.cpp | 2 -- src/ML-IAP/mliap_unified_couple.pyx | 4 ++-- 7 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/KOKKOS/mliap_data_kokkos.cpp b/src/KOKKOS/mliap_data_kokkos.cpp index d0da48a282..e5b34ecaa0 100644 --- a/src/KOKKOS/mliap_data_kokkos.cpp +++ b/src/KOKKOS/mliap_data_kokkos.cpp @@ -85,6 +85,7 @@ void MLIAPDataKokkos::generate_neighdata(class NeighList *list_in, i // clear gradforce and elems arrays int nall = atom->nlocal + atom->nghost; + nlocal = atom->nlocal; ntotal = nall; if (gradgradflag > -1){ auto d_gradforce = k_gradforce.template view(); diff --git a/src/KOKKOS/mliap_data_kokkos.h b/src/KOKKOS/mliap_data_kokkos.h index de05545f67..92af3ca75c 100644 --- a/src/KOKKOS/mliap_data_kokkos.h +++ b/src/KOKKOS/mliap_data_kokkos.h @@ -118,6 +118,7 @@ public: egradient(nullptr), ntotal(base.ntotal), nlistatoms(base.nlistatoms), + nlocal(base.nlocal), natomneigh(base.natomneigh), numneighs(base.numneighs), iatoms(base.k_iatoms.d_view.data()), @@ -171,6 +172,7 @@ public: // Neighborlist stuff const int ntotal; const int nlistatoms; + const int nlocal; const int natomneigh; int *numneighs; int *iatoms; @@ -191,7 +193,7 @@ public: int dev; #ifdef LMP_KOKKOS_GPU - MLIAPDataKokkosDevice(MLIAPDataKokkos &base) : ndescriptors(-1),nparams(-1),nelements(-1),ntotal(-1),nlistatoms(-1),natomneigh(-1), + MLIAPDataKokkosDevice(MLIAPDataKokkos &base) : ndescriptors(-1),nparams(-1),nelements(-1),ntotal(-1),nlistatoms(-1),nlocal(-1),natomneigh(-1), nneigh_max(-1),npairs(-1) { // It cannot get here, but needed for compilation diff --git a/src/KOKKOS/mliap_model_python_couple_kokkos.pyx b/src/KOKKOS/mliap_model_python_couple_kokkos.pyx index 6dec8cdbfe..010830f7fd 100644 --- a/src/KOKKOS/mliap_model_python_couple_kokkos.pyx +++ b/src/KOKKOS/mliap_model_python_couple_kokkos.pyx @@ -25,6 +25,7 @@ cdef extern from "mliap_data_kokkos.h" namespace "LAMMPS_NS": cdef cppclass MLIAPDataKokkosDevice: # Array shapes int nlistatoms + int nlocal int ndescriptors # Input data diff --git a/src/KOKKOS/mliap_unified_couple_kokkos.pyx b/src/KOKKOS/mliap_unified_couple_kokkos.pyx index bd94b79eb4..0142c5eda2 100644 --- a/src/KOKKOS/mliap_unified_couple_kokkos.pyx +++ b/src/KOKKOS/mliap_unified_couple_kokkos.pyx @@ -59,6 +59,7 @@ cdef extern from "mliap_data_kokkos.h" namespace "LAMMPS_NS": int ntotal # total number of owned and ghost atoms on this proc int nlistatoms # current number of atoms in local atom lists + int nlocal int natomneigh # current number of atoms and ghosts in atom neighbor arrays int * numneighs # neighbors count for each atom int * iatoms # index of each atom @@ -290,6 +291,10 @@ cdef class MLIAPDataPy: @property def nlistatoms(self): return self.data.nlistatoms + + @property + def nlocal(self): + return self.data.nlocal @property def natomneigh(self): diff --git a/src/KOKKOS/mliap_unified_kokkos.cpp b/src/KOKKOS/mliap_unified_kokkos.cpp index deb9cbc346..612bc42dfe 100644 --- a/src/KOKKOS/mliap_unified_kokkos.cpp +++ b/src/KOKKOS/mliap_unified_kokkos.cpp @@ -294,7 +294,7 @@ void LAMMPS_NS::update_pair_energy(MLIAPDataKokkosDevice *data, double *eij) void LAMMPS_NS::update_pair_forces(MLIAPDataKokkosDevice *data, double *fij) { - const auto nlistatoms = data->nlistatoms; + const auto nlocal = data->nlocal; auto *f = data->f; auto pair_i = data->pair_i; auto j_atoms = data->jatoms; @@ -315,7 +315,7 @@ void LAMMPS_NS::update_pair_forces(MLIAPDataKokkosDevice *data, double *fij) int i = pair_i[ii]; int j = j_atoms[ii]; // must not count any contribution where i is not a local atom - if (i < nlistatoms) { + if (i < nlocal) { Kokkos::atomic_add(&f[i*3+0], fij[ii3+0]); Kokkos::atomic_add(&f[i*3+1], fij[ii3+1]); Kokkos::atomic_add(&f[i*3+2], fij[ii3+2]); @@ -378,12 +378,12 @@ void LAMMPS_NS::update_pair_forces(MLIAPDataKokkosDevice *data, double *fij) void LAMMPS_NS::update_atom_energy(MLIAPDataKokkosDevice *data, double *ei) { auto d_eatoms = data->eatoms; - const auto nlistatoms = data->nlistatoms; + const auto nlocal = data->nlocal; - Kokkos::parallel_reduce(nlistatoms, KOKKOS_LAMBDA(int i, double &local_sum){ + Kokkos::parallel_reduce(nlocal, KOKKOS_LAMBDA(int i, double &local_sum){ double e = ei[i]; // must not count any contribution where i is not a local atom - if (i < nlistatoms) { + if (i < nlocal) { d_eatoms[i] = e; local_sum += e; } diff --git a/src/ML-IAP/mliap_data.cpp b/src/ML-IAP/mliap_data.cpp index 3fb06ee66d..b40fefd3ba 100644 --- a/src/ML-IAP/mliap_data.cpp +++ b/src/ML-IAP/mliap_data.cpp @@ -23,7 +23,6 @@ #include "mliap_descriptor.h" #include "mliap_model.h" #include "neigh_list.h" -#include using namespace LAMMPS_NS; @@ -117,7 +116,6 @@ void MLIAPData::generate_neighdata(NeighList *list_in, int eflag_in, int vflag_i int nall = atom->nlocal + atom->nghost; nlocal = atom->nlocal; - std::cout << "nlocal value data: " << nlocal << std::endl; ntotal = nall; // grow nmax gradforce, elems arrays if necessary diff --git a/src/ML-IAP/mliap_unified_couple.pyx b/src/ML-IAP/mliap_unified_couple.pyx index 63a414ecbb..422b8bbcee 100644 --- a/src/ML-IAP/mliap_unified_couple.pyx +++ b/src/ML-IAP/mliap_unified_couple.pyx @@ -53,8 +53,8 @@ cdef extern from "mliap_data.h" namespace "LAMMPS_NS": # only neighbors strictly inside descriptor cutoff int ntotal # total number of owned and ghost atoms on this proc - int nlistatoms # current number of atoms in local atom lists - int nlocal + int nlistatoms # current number of non-NULL atoms in local atom lists + int nlocal # current number of NULL and normal atoms in local atom lists int natomneigh # current number of atoms and ghosts in atom neighbor arrays int * numneighs # neighbors count for each atom int * iatoms # index of each atom From 0f11a9dd70b8e839110b8c65554c3f0a91dc09ba Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 19 Oct 2023 23:21:18 -0400 Subject: [PATCH 032/204] require version newer than 2 Aug 2023 for LAMMPS GUI 1.5.9 --- tools/lammps-gui/lammpsgui.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/lammps-gui/lammpsgui.cpp b/tools/lammps-gui/lammpsgui.cpp index 11f2554b55..37b8aebf88 100644 --- a/tools/lammps-gui/lammpsgui.cpp +++ b/tools/lammps-gui/lammpsgui.cpp @@ -1432,12 +1432,12 @@ void LammpsGui::start_lammps() lammps.open(narg, args); lammpsstatus->show(); - // must have at least 2 August 2023 version of LAMMPS + // must have a version newer than the 2 August 2023 release of LAMMPS // TODO: must update this check before next feature release - if (lammps.version() < 20230802) { + if (lammps.version() <= 20230802) { QMessageBox::critical(this, "Incompatible LAMMPS Version", "LAMMPS-GUI version " LAMMPS_GUI_VERSION " requires\n" - "LAMMPS version 2 August 2023 or later"); + "a LAMMPS version more recent than 2 August 2023"); exit(1); } From 1300999c22c04ac1d0c552afc29122fc1c49cfed Mon Sep 17 00:00:00 2001 From: Evangelos Voyiatzis Date: Fri, 20 Oct 2023 13:24:08 +0300 Subject: [PATCH 033/204] Enable definition of cone region using equal variables --- src/region_cone.cpp | 273 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 250 insertions(+), 23 deletions(-) diff --git a/src/region_cone.cpp b/src/region_cone.cpp index 76bedf4c92..8eb140211d 100644 --- a/src/region_cone.cpp +++ b/src/region_cone.cpp @@ -19,17 +19,22 @@ #include "domain.h" #include "error.h" +#include "input.h" +#include "variable.h" #include #include using namespace LAMMPS_NS; +enum { CONSTANT, VARIABLE }; + static constexpr double BIG = 1.0e20; /* ---------------------------------------------------------------------- */ -RegCone::RegCone(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg), lo(0.0), hi(0.0) +RegCone::RegCone(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg), lo(0.0), hi(0.0), + c1str(nullptr), c2str(nullptr), rlostr(nullptr), rhistr(nullptr), lostr(nullptr), histr(nullptr) { options(narg - 9, &arg[9]); @@ -44,22 +49,133 @@ RegCone::RegCone(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg), lo axis = arg[2][0]; if (axis == 'x') { - c1 = yscale * utils::numeric(FLERR, arg[3], false, lmp); - c2 = zscale * utils::numeric(FLERR, arg[4], false, lmp); - radiuslo = yscale * utils::numeric(FLERR, arg[5], false, lmp); - radiushi = yscale * utils::numeric(FLERR, arg[6], false, lmp); + if (utils::strmatch(arg[3], "^v_")) { + c1str = utils::strdup(arg[3] + 2); + c1 = 0.0; + c1style = VARIABLE; + varshape = 1; + } else { + c1 = yscale * utils::numeric(FLERR, arg[3], false, lmp); + c1style = CONSTANT; + } + + if (utils::strmatch(arg[4], "^v_")) { + c2str = utils::strdup(arg[4] + 2); + c2 = 0.0; + c2style = VARIABLE; + varshape = 1; + } else { + c2 = zscale * utils::numeric(FLERR, arg[4], false, lmp); + c2style = CONSTANT; + } + + if (utils::strmatch(arg[5], "^v_")) { + rlostr = utils::strdup(arg[5] + 2); + radiuslo = 0.0; + rlostyle = VARIABLE; + varshape = 1; + } else { + radiuslo = yscale * utils::numeric(FLERR, arg[5], false, lmp); + rlostyle = CONSTANT; + } + + if (utils::strmatch(arg[6], "^v_")) { + rhistr = utils::strdup(arg[6] + 2); + radiushi = 0.0; + rhistyle = VARIABLE; + varshape = 1; + } else { + radiushi = yscale * utils::numeric(FLERR, arg[6], false, lmp); + rhistyle = CONSTANT; + } + } else if (axis == 'y') { - c1 = xscale * utils::numeric(FLERR, arg[3], false, lmp); - c2 = zscale * utils::numeric(FLERR, arg[4], false, lmp); - radiuslo = xscale * utils::numeric(FLERR, arg[5], false, lmp); - radiushi = xscale * utils::numeric(FLERR, arg[6], false, lmp); + + if (utils::strmatch(arg[3], "^v_")) { + c1str = utils::strdup(arg[3] + 2); + c1 = 0.0; + c1style = VARIABLE; + varshape = 1; + } else { + c1 = xscale * utils::numeric(FLERR, arg[3], false, lmp); + c1style = CONSTANT; + } + + if (utils::strmatch(arg[4], "^v_")) { + c2str = utils::strdup(arg[4] + 2); + c2 = 0.0; + c2style = VARIABLE; + varshape = 1; + } else { + c2 = zscale * utils::numeric(FLERR, arg[4], false, lmp); + c2style = CONSTANT; + } + + if (utils::strmatch(arg[5], "^v_")) { + rlostr = utils::strdup(arg[5] + 2); + radiuslo = 0.0; + rlostyle = VARIABLE; + varshape = 1; + } else { + radiuslo = xscale * utils::numeric(FLERR, arg[5], false, lmp); + rlostyle = CONSTANT; + } + + if (utils::strmatch(arg[6], "^v_")) { + rhistr = utils::strdup(arg[6] + 2); + radiushi = 0.0; + rhistyle = VARIABLE; + varshape = 1; + } else { + radiushi = xscale * utils::numeric(FLERR, arg[6], false, lmp); + rhistyle = CONSTANT; + } + } else if (axis == 'z') { - c1 = xscale * utils::numeric(FLERR, arg[3], false, lmp); - c2 = yscale * utils::numeric(FLERR, arg[4], false, lmp); - radiuslo = xscale * utils::numeric(FLERR, arg[5], false, lmp); - radiushi = xscale * utils::numeric(FLERR, arg[6], false, lmp); + + if (utils::strmatch(arg[3], "^v_")) { + c1str = utils::strdup(arg[3] + 2); + c1 = 0.0; + c1style = VARIABLE; + varshape = 1; + } else { + c1 = xscale * utils::numeric(FLERR, arg[3], false, lmp); + c1style = CONSTANT; + } + + if (utils::strmatch(arg[4], "^v_")) { + c2str = utils::strdup(arg[4] + 2); + c2 = 0.0; + c2style = VARIABLE; + varshape = 1; + } else { + c2 = yscale * utils::numeric(FLERR, arg[4], false, lmp); + c2style = CONSTANT; + } + + if (utils::strmatch(arg[5], "^v_")) { + rlostr = utils::strdup(arg[5] + 2); + radiuslo = 0.0; + rlostyle = VARIABLE; + varshape = 1; + } else { + radiuslo = xscale * utils::numeric(FLERR, arg[5], false, lmp); + rlostyle = CONSTANT; + } + + if (utils::strmatch(arg[6], "^v_")) { + rhistr = utils::strdup(arg[6] + 2); + radiushi = 0.0; + rhistyle = VARIABLE; + varshape = 1; + } else { + radiushi = xscale * utils::numeric(FLERR, arg[6], false, lmp); + rhistyle = CONSTANT; + } + } + lostyle = CONSTANT; if (strcmp(arg[7], "INF") == 0 || strcmp(arg[7], "EDGE") == 0) { if (domain->box_exist == 0) error->all(FLERR, "Cannot use region INF or EDGE when box does not exist"); @@ -87,6 +203,11 @@ RegCone::RegCone(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg), lo else lo = domain->boxlo_bound[2]; } + } else if (utils::strmatch(arg[7], "^v_")) { + lostr = utils::strdup(arg[7] + 2); + lo = 0.0; + lostyle = VARIABLE; + varshape = 1; } else { if (axis == 'x') lo = xscale * utils::numeric(FLERR, arg[7], false, lmp); if (axis == 'y') lo = yscale * utils::numeric(FLERR, arg[7], false, lmp); @@ -119,26 +240,32 @@ RegCone::RegCone(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg), lo else hi = domain->boxhi_bound[2]; } + } else if (utils::strmatch(arg[8], "^v_")) { + histr = utils::strdup(arg[8] + 2); + hi = 0.0; + histyle = VARIABLE; + varshape = 1; } else { if (axis == 'x') hi = xscale * utils::numeric(FLERR, arg[8], false, lmp); if (axis == 'y') hi = yscale * utils::numeric(FLERR, arg[8], false, lmp); if (axis == 'z') hi = zscale * utils::numeric(FLERR, arg[8], false, lmp); } + if (varshape) { + variable_check(); + RegCone::shape_update(); + } + // error check if (radiuslo < 0.0) error->all(FLERR, "Illegal radius in region cone command"); if (radiushi < 0.0) error->all(FLERR, "Illegal radius in region cone command"); if (radiuslo == 0.0 && radiushi == 0.0) error->all(FLERR, "Illegal radius in region cone command"); - if (hi == lo) error->all(FLERR, "Illegal cone length in region cone command"); + if (hi <= lo) error->all(FLERR, "Illegal cone length in region cone command"); // extent of cone - - if (radiuslo > radiushi) - maxradius = radiuslo; - else - maxradius = radiushi; + maxradius = ( (radiuslo > radiushi) ? radiuslo : radiushi); if (interior) { bboxflag = 1; @@ -174,10 +301,7 @@ RegCone::RegCone(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg), lo cmax = 3; contact = new Contact[cmax]; - if (interior) - tmax = 2; - else - tmax = 1; + tmax = (interior ? 2 : 1); } /* ---------------------------------------------------------------------- */ @@ -187,6 +311,14 @@ RegCone::~RegCone() delete[] contact; } +/* ---------------------------------------------------------------------- */ + +void RegCone::init() +{ + Region::init(); + if (varshape) variable_check(); +} + /* ---------------------------------------------------------------------- inside = 1 if x,y,z is inside or on surface inside = 0 if x,y,z is outside and not on surface @@ -622,6 +754,101 @@ int RegCone::surface_exterior(double *x, double cutoff) } } +/* ---------------------------------------------------------------------- + change region shape via variable evaluation +------------------------------------------------------------------------- */ + +void RegCone::shape_update() +{ + if (c1style == VARIABLE) c1 = input->variable->compute_equal(c1var); + if (c2style == VARIABLE) c2 = input->variable->compute_equal(c2var); + if (rlostyle == VARIABLE) { + radiuslo = input->variable->compute_equal(rlovar); + if (radiuslo < 0.0) error->one(FLERR, "Variable evaluation in region gave bad value"); + } + if (rhistyle == VARIABLE) { + radiushi = input->variable->compute_equal(rhivar); + if (radiushi < 0.0) error->one(FLERR, "Variable evaluation in region gave bad value"); + } + if (lostyle == VARIABLE) lo = input->variable->compute_equal(lovar); + if (histyle == VARIABLE) hi = input->variable->compute_equal(hivar); + + if (radiuslo == 0.0 && radiushi == 0.0) + error->all(FLERR, "dtion in region gave bad value"); + + if (axis == 'x') { + if (c1style == VARIABLE) c1 *= yscale; + if (c2style == VARIABLE) c2 *= zscale; + if (rlostyle == VARIABLE) radiuslo *= yscale; + if (rhistyle == VARIABLE) radiushi *= yscale; + if (lostyle == VARIABLE) lo *= xscale; + if (histyle == VARIABLE) hi *= xscale; + } else if (axis == 'y') { + if (c1style == VARIABLE) c1 *= xscale; + if (c2style == VARIABLE) c2 *= zscale; + if (rlostyle == VARIABLE) radiuslo *= xscale; + if (rhistyle == VARIABLE) radiushi *= xscale; + if (lostyle == VARIABLE) lo *= yscale; + if (histyle == VARIABLE) hi *= yscale; + } else { + if (c1style == VARIABLE) c1 *= xscale; + if (c2style == VARIABLE) c2 *= yscale; + if (rlostyle == VARIABLE) radiuslo *= xscale; + if (rhistyle == VARIABLE) radiushi *= xscale; + if (lostyle == VARIABLE) lo *= zscale; + if (histyle == VARIABLE) hi *= zscale; + } +} + +/* ---------------------------------------------------------------------- + error check on existence of variable +------------------------------------------------------------------------- */ + +void RegCone::variable_check() +{ + if (c1style == VARIABLE) { + c1var = input->variable->find(c1str); + if (c1var < 0) error->all(FLERR, "Variable {} for region cone does not exist", c1str); + if (!input->variable->equalstyle(c1var)) + error->all(FLERR, "Variable {} for region cone is invalid style", c1str); + } + + if (c2style == VARIABLE) { + c2var = input->variable->find(c2str); + if (c2var < 0) error->all(FLERR, "Variable {} for region cone does not exist", c2str); + if (!input->variable->equalstyle(c2var)) + error->all(FLERR, "Variable {} for region cone is invalid style", c2str); + } + + if (rlostyle == VARIABLE) { + rlovar = input->variable->find(rlostr); + if (rlovar < 0) error->all(FLERR, "Variable {} for region cone does not exist", rlostr); + if (!input->variable->equalstyle(rlovar)) + error->all(FLERR, "Variable {} for region cone is invalid style", rlostr); + } + + if (rhistyle == VARIABLE) { + rhivar = input->variable->find(rhistr); + if (rhivar < 0) error->all(FLERR, "Variable {} for region cone does not exist", rhistr); + if (!input->variable->equalstyle(rhivar)) + error->all(FLERR, "Variable {} for region cone is invalid style", rhistr); + } + + if (lostyle == VARIABLE) { + lovar = input->variable->find(lostr); + if (lovar < 0) error->all(FLERR, "Variable {} for region cone does not exist", lostr); + if (!input->variable->equalstyle(lovar)) + error->all(FLERR, "Variable {} for region cone is invalid style", lostr); + } + + if (histyle == VARIABLE) { + hivar = input->variable->find(histr); + if (hivar < 0) error->all(FLERR, "Variable {} for region cone does not exist", histr); + if (!input->variable->equalstyle(hivar)) + error->all(FLERR, "Variable {} for region cone is invalid style", histr); + } +} + /* ---------------------------------------------------------------------- */ double RegCone::closest(double *x, double *near, double *nearest, double dsq) From c180f3d8255429246538dea2b847418795846319 Mon Sep 17 00:00:00 2001 From: Evangelos Voyiatzis Date: Fri, 20 Oct 2023 13:31:48 +0300 Subject: [PATCH 034/204] Include method & variable definitions in region_cone.h --- src/region_cone.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/region_cone.h b/src/region_cone.h index 25fdcc9713..81288d26b8 100644 --- a/src/region_cone.h +++ b/src/region_cone.h @@ -28,9 +28,11 @@ class RegCone : public Region { public: RegCone(class LAMMPS *, int, char **); ~RegCone() override; + void init() override; int inside(double, double, double) override; int surface_interior(double *, double) override; int surface_exterior(double *, double) override; + void shape_update() override; private: char axis; @@ -39,7 +41,12 @@ class RegCone : public Region { double lo, hi; double maxradius; + int c1style, c2style, rlostyle, rhistyle, lostyle, histyle; + int c1var, c2var, rlovar, rhivar, lovar, hivar; + char *c1str, *c2str, *rlostr, *rhistr, *lostr, *histr; + double closest(double *, double *, double *, double); + void variable_check(); }; } // namespace LAMMPS_NS From b22d0afd9779a21a6f12f7a6c660de2fe63c2fd4 Mon Sep 17 00:00:00 2001 From: Evangelos Voyiatzis Date: Fri, 20 Oct 2023 13:41:00 +0300 Subject: [PATCH 035/204] Update region.rst --- doc/src/region.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/src/region.rst b/doc/src/region.rst index 36c7c799dc..9d2af01de1 100644 --- a/doc/src/region.rst +++ b/doc/src/region.rst @@ -24,6 +24,7 @@ Syntax c1,c2 = coords of cone axis in other 2 dimensions (distance units) radlo,radhi = cone radii at lo and hi end (distance units) lo,hi = bounds of cone in dim (distance units) + c1,c2,radlo,radhi,lo,hi can be a variable (see below) *cylinder* args = dim c1 c2 radius lo hi dim = *x* or *y* or *z* = axis of cylinder c1,c2 = coords of cylinder axis in other 2 dimensions (distance units) @@ -206,7 +207,8 @@ equal-style :doc:`variable `. Likewise, for style *sphere* and *ellipsoid* the x-, y-, and z- coordinates of the center of the sphere/ellipsoid can be specified as an equal-style variable. And for style *cylinder* the two center positions c1 and c2 for the location -of the cylinder axes can be specified as a equal-style variable. +of the cylinder axes can be specified as a equal-style variable. For style *cone* +all properties can be defined via equal-style variables. If the value is a variable, it should be specified as v_name, where name is the variable name. In this case, the variable will be From 61371bba5e7d05c9179a1c6e956b2e95122381af Mon Sep 17 00:00:00 2001 From: Evangelos Voyiatzis Date: Fri, 20 Oct 2023 13:44:35 +0300 Subject: [PATCH 036/204] remove whitespace from region_cone.cpp --- src/region_cone.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/region_cone.cpp b/src/region_cone.cpp index 8eb140211d..1a0f31563f 100644 --- a/src/region_cone.cpp +++ b/src/region_cone.cpp @@ -141,7 +141,7 @@ RegCone::RegCone(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg), lo } else { c1 = xscale * utils::numeric(FLERR, arg[3], false, lmp); c1style = CONSTANT; - } + } if (utils::strmatch(arg[4], "^v_")) { c2str = utils::strdup(arg[4] + 2); From ccbe907defc3dd7c808560a99430802f34ce0205 Mon Sep 17 00:00:00 2001 From: Evangelos Voyiatzis Date: Fri, 20 Oct 2023 14:24:45 +0300 Subject: [PATCH 037/204] avoid memory leak --- src/region_cone.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/region_cone.cpp b/src/region_cone.cpp index 1a0f31563f..64f0495dd6 100644 --- a/src/region_cone.cpp +++ b/src/region_cone.cpp @@ -308,6 +308,12 @@ RegCone::RegCone(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg), lo RegCone::~RegCone() { + delete[] c1str; + delete[] c2str; + delete[] rlostr; + delete[] rhistr; + delete[] lostr; + delete[] histr; delete[] contact; } From 291defb45378eb759470347c97610335a26c9efb Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Fri, 20 Oct 2023 12:57:19 -0600 Subject: [PATCH 038/204] update refs on fix srd doc page --- doc/src/fix_srd.rst | 51 +++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/doc/src/fix_srd.rst b/doc/src/fix_srd.rst index 8bfbcf2387..c15a566563 100644 --- a/doc/src/fix_srd.rst +++ b/doc/src/fix_srd.rst @@ -61,25 +61,30 @@ Description Treat a group of particles as stochastic rotation dynamics (SRD) particles that serve as a background solvent when interacting with big (colloidal) particles in groupbig-ID. The SRD formalism is described -in :ref:`(Hecht) `. The key idea behind using SRD particles as a -cheap coarse-grained solvent is that SRD particles do not interact -with each other, but only with the solute particles, which in LAMMPS -can be spheroids, ellipsoids, or line segments, or triangles, or rigid -bodies containing multiple spheroids or ellipsoids or line segments -or triangles. The collision and rotation properties of the model -imbue the SRD particles with fluid-like properties, including an -effective viscosity. Thus simulations with large solute particles can -be run more quickly, to measure solute properties like diffusivity -and viscosity in a background fluid. The usual LAMMPS fixes for such -simulations, such as :doc:`fix deform `, -:doc:`fix viscosity `, and :doc:`fix nvt/sllod `, -can be used in conjunction with the SRD model. +in :ref:`(Hecht) `. The same methodology is also called +multi-particle collision dynamics (MPCD) in the literature. -For more details on how the SRD model is implemented in LAMMPS, -:ref:`(Petersen) ` describes the implementation and usage of -pure SRD fluids. See the ``examples/srd`` directory for sample input -scripts using SRD particles for that and for mixture systems (solute -particles in an SRD fluid). +The key idea behind using SRD particles as a cheap coarse-grained +solvent is that SRD particles do not interact with each other, but +only with the solute particles, which in LAMMPS can be spheroids, +ellipsoids, or line segments, or triangles, or rigid bodies containing +multiple spheroids or ellipsoids or line segments or triangles. The +collision and rotation properties of the model imbue the SRD particles +with fluid-like properties, including an effective viscosity. Thus +simulations with large solute particles can be run more quickly, to +measure solute properties like diffusivity and viscosity in a +background fluid. The usual LAMMPS fixes for such simulations, such +as :doc:`fix deform `, :doc:`fix viscosity +`, and :doc:`fix nvt/sllod `, can be +used in conjunction with the SRD model. + +These 3 papers give more details on how the SRD model is implemented +in LAMMPS. :ref:`(Petersen) ` describes pure SRD fluid +systems. :ref:`(Bolintineanu1) ` describes models +where pure SRD fluids :ref:interact with boundary walls. +:ref:`(Bolintineanu2) :ref:` describes mixture models +where large colloidal particles are solvated by an SRD fluid. See the +``examples/srd`` :ref:directory for sample input scripts. This fix does two things: @@ -404,3 +409,13 @@ no, and rescale = yes. **(Petersen)** Petersen, Lechman, Plimpton, Grest, in' t Veld, Schunk, J Chem Phys, 132, 174106 (2010). + +.. _Bolintineanu1: + +**(Bolintineanu1)** +Bolintineanu, Lechman, Plimpton, Grest, Phys Rev E, 86, 066703 (2012). + +.. _Bolintineanu2: + +**(Bolintineanu2)** Bolintineanu, Grest, Lechman, Pierce, Plimpton, +Schunk, Comp Particle Mechanics, 1, 321-356 (2014). From 654a410b8c90840003c0dbaed27ae8672cccff27 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Fri, 20 Oct 2023 12:59:36 -0600 Subject: [PATCH 039/204] update refs on fix srd doc page --- doc/src/fix_srd.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/fix_srd.rst b/doc/src/fix_srd.rst index c15a566563..59044a6e3b 100644 --- a/doc/src/fix_srd.rst +++ b/doc/src/fix_srd.rst @@ -82,8 +82,8 @@ These 3 papers give more details on how the SRD model is implemented in LAMMPS. :ref:`(Petersen) ` describes pure SRD fluid systems. :ref:`(Bolintineanu1) ` describes models where pure SRD fluids :ref:interact with boundary walls. -:ref:`(Bolintineanu2) :ref:` describes mixture models -where large colloidal particles are solvated by an SRD fluid. See the +:ref:`(Bolintineanu2) ` describes mixture models where +large colloidal particles are solvated by an SRD fluid. See the ``examples/srd`` :ref:directory for sample input scripts. This fix does two things: From e1d876b7fe384868584ff5a34eca9a8aa5ac9a47 Mon Sep 17 00:00:00 2001 From: Ben Nebgen Date: Fri, 20 Oct 2023 18:41:46 -0600 Subject: [PATCH 040/204] kokkos working --- src/KOKKOS/pair_mliap_kokkos.cpp | 9 ++++++++- src/ML-IAP/pair_mliap.cpp | 3 ++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/KOKKOS/pair_mliap_kokkos.cpp b/src/KOKKOS/pair_mliap_kokkos.cpp index 2061de308b..41f1d0170b 100644 --- a/src/KOKKOS/pair_mliap_kokkos.cpp +++ b/src/KOKKOS/pair_mliap_kokkos.cpp @@ -31,6 +31,7 @@ #include "lammps.h" #include "kokkos.h" #include "pointers.h" +#include using namespace LAMMPS_NS; @@ -138,6 +139,7 @@ template void PairMLIAPKokkos::allocate() { int n = atom->ntypes; + std::cout << "cutsq size: " << n+1 << std::endl; memoryKK->destroy_kokkos(k_map, map); memoryKK->destroy_kokkos(k_cutsq, cutsq); memoryKK->destroy_kokkos(k_setflag, setflag); @@ -272,10 +274,15 @@ void PairMLIAPKokkos::coeff(int narg, char **arg) { model->init(); descriptor->init(); + std::cout << "atom ntypes: " << atom->ntypes << std::endl; + auto h_cutsq=k_cutsq.template view(); for (int itype=1; itype <= atom->ntypes; ++itype) for (int jtype=1; jtype <= atom->ntypes; ++jtype) - h_cutsq(itype,jtype) = descriptor->cutsq[map[itype]][map[jtype]]; + // do not set cuts for NULL atoms + if (map[itype] >= 0 && map[jtype] >=0) { + h_cutsq(itype,jtype) = descriptor->cutsq[map[itype]][map[jtype]]; + } k_cutsq.modify(); k_cutsq.sync(); constexpr int gradgradflag = -1; diff --git a/src/ML-IAP/pair_mliap.cpp b/src/ML-IAP/pair_mliap.cpp index 66e8b848cd..18f4054373 100644 --- a/src/ML-IAP/pair_mliap.cpp +++ b/src/ML-IAP/pair_mliap.cpp @@ -37,6 +37,7 @@ #include #include +#include using namespace LAMMPS_NS; @@ -120,7 +121,7 @@ void PairMLIAP::allocate() { allocated = 1; int n = atom->ntypes; - + std::cout << "cutsq size: " << n+1 << std::endl; memory->create(setflag,n+1,n+1,"pair:setflag"); memory->create(cutsq,n+1,n+1,"pair:cutsq"); memory->create(cutghost,n+1,n+1,"pair:cutghost"); From fd05acec2fc0fc8756a2e8564a45a276f8f2e3c2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 20 Oct 2023 20:54:05 -0400 Subject: [PATCH 041/204] fix spelling --- doc/src/compute.rst | 2 +- doc/src/compute_voronoi_atom.rst | 2 +- doc/src/fix.rst | 2 +- doc/src/fix_ave_histo.rst | 4 ++-- doc/src/thermo_style.rst | 2 +- doc/src/variable.rst | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/src/compute.rst b/doc/src/compute.rst index cc26d9acc9..6737203618 100644 --- a/doc/src/compute.rst +++ b/doc/src/compute.rst @@ -74,7 +74,7 @@ Global, per-atom, local, and per-grid quantities can also be of three for each atom, each local entity, or each grid cell. Note that a single compute can produce any combination of global, -per-atom, local, or per-grid values. Likewise it can prouduce any +per-atom, local, or per-grid values. Likewise it can produce any combination of scalar, vector, or array output for each style. The exception is that for per-atom, local, and per-grid output, either a vector or array can be produced, but not both. The doc page for each diff --git a/doc/src/compute_voronoi_atom.rst b/doc/src/compute_voronoi_atom.rst index 37e5386341..9607401ccd 100644 --- a/doc/src/compute_voronoi_atom.rst +++ b/doc/src/compute_voronoi_atom.rst @@ -232,4 +232,4 @@ Related commands Default """"""" -The default for the neighobrs keyword is no. +The default for the neighbors keyword is no. diff --git a/doc/src/fix.rst b/doc/src/fix.rst index 3dd7e224e7..0889fe281f 100644 --- a/doc/src/fix.rst +++ b/doc/src/fix.rst @@ -106,7 +106,7 @@ Global, per-atom, local, and per-grid quantities can also be of three for each atom, each local entity, or each grid cell. Note that a single fix can produce any combination of global, -per-atom, local, or per-grid values. Likewise it can prouduce any +per-atom, local, or per-grid values. Likewise it can produce any combination of scalar, vector, or array output for each style. The exception is that for per-atom, local, and per-grid output, either a vector or array can be produced, but not both. The doc page for each diff --git a/doc/src/fix_ave_histo.rst b/doc/src/fix_ave_histo.rst index 31e5476f9e..9699e4238c 100644 --- a/doc/src/fix_ave_histo.rst +++ b/doc/src/fix_ave_histo.rst @@ -106,7 +106,7 @@ attributes are per-atom vector values. See the page for individual generate. Note that a compute or fix can produce multiple kinds of data (global, -per-atom, local). If LAMMPS cannot unambiguosly determine which kind +per-atom, local). If LAMMPS cannot unambiguously determine which kind of data to use, the optional *kind* keyword discussed below can force the desired disambiguation. @@ -263,7 +263,7 @@ keyword is set to *vector*, then all input values must be global or per-atom or local vectors, or columns of global or per-atom or local arrays. -The *kind* keyword only needs to be used if any of the specfied input +The *kind* keyword only needs to be used if any of the specified input computes or fixes produce more than one kind of output (global, per-atom, local). If not, LAMMPS will determine the kind of data all the inputs produce and verify it is all the same kind. If not, an diff --git a/doc/src/thermo_style.rst b/doc/src/thermo_style.rst index c3c607a479..89a2c0b740 100644 --- a/doc/src/thermo_style.rst +++ b/doc/src/thermo_style.rst @@ -442,7 +442,7 @@ equal-style and vector-style variables can be referenced; the latter requires a bracketed term to specify the Ith element of the vector calculated by the variable. However, an equal-style variable can use an atom-style variable in its formula indexed by the ID of an -individual atom. This is a way to output a speciic atom's per-atom +individual atom. This is a way to output a specific atom's per-atom coordinates or other per-atom properties in thermo output. See the :doc:`variable ` command for details. Note that variables of style *equal* and *vector* and *atom* define a formula which can diff --git a/doc/src/variable.rst b/doc/src/variable.rst index 3407b48156..92a78ee3c1 100644 --- a/doc/src/variable.rst +++ b/doc/src/variable.rst @@ -1167,7 +1167,7 @@ variables), or global vectors of values. The latter can also be a column of a global array. Atom-style variables can use scalar values (same as for equal-style -varaibles), or per-atom vectors of values. The latter can also be a +variables), or per-atom vectors of values. The latter can also be a column of a per-atom array. The various allowed compute references in the variable formulas for @@ -1232,7 +1232,7 @@ variables), or global vectors of values. The latter can also be a column of a global array. Atom-style variables can use scalar values (same as for equal-style -varaibles), or per-atom vectors of values. The latter can also be a +variables), or per-atom vectors of values. The latter can also be a column of a per-atom array. The allowed fix references in variable formulas for equal-, vector-, From 1064c82c00c826f5159eef864b0716f40fdf81dc Mon Sep 17 00:00:00 2001 From: Ben Nebgen Date: Fri, 20 Oct 2023 18:56:20 -0600 Subject: [PATCH 042/204] Cleaned of print statements --- src/KOKKOS/pair_mliap_kokkos.cpp | 5 +---- src/ML-IAP/mliap_unified.cpp | 3 --- src/ML-IAP/pair_mliap.cpp | 3 +-- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/src/KOKKOS/pair_mliap_kokkos.cpp b/src/KOKKOS/pair_mliap_kokkos.cpp index 41f1d0170b..d991a93420 100644 --- a/src/KOKKOS/pair_mliap_kokkos.cpp +++ b/src/KOKKOS/pair_mliap_kokkos.cpp @@ -31,7 +31,6 @@ #include "lammps.h" #include "kokkos.h" #include "pointers.h" -#include using namespace LAMMPS_NS; @@ -139,7 +138,7 @@ template void PairMLIAPKokkos::allocate() { int n = atom->ntypes; - std::cout << "cutsq size: " << n+1 << std::endl; + memoryKK->destroy_kokkos(k_map, map); memoryKK->destroy_kokkos(k_cutsq, cutsq); memoryKK->destroy_kokkos(k_setflag, setflag); @@ -274,8 +273,6 @@ void PairMLIAPKokkos::coeff(int narg, char **arg) { model->init(); descriptor->init(); - std::cout << "atom ntypes: " << atom->ntypes << std::endl; - auto h_cutsq=k_cutsq.template view(); for (int itype=1; itype <= atom->ntypes; ++itype) for (int jtype=1; jtype <= atom->ntypes; ++jtype) diff --git a/src/ML-IAP/mliap_unified.cpp b/src/ML-IAP/mliap_unified.cpp index 49c9660098..de1d0bcb7d 100644 --- a/src/ML-IAP/mliap_unified.cpp +++ b/src/ML-IAP/mliap_unified.cpp @@ -29,8 +29,6 @@ #include "python_compat.h" #include "utils.h" -#include - using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ @@ -274,7 +272,6 @@ void LAMMPS_NS::update_pair_forces(MLIAPData *data, double *fij) //const auto nlistatoms = data->nlistatoms; const auto nlocal = data->nlocal; double **f = data->f; - std::cout << "nlocal value: " << nlocal << std::endl; for (int ii = 0; ii < data->npairs; ii++) { int ii3 = ii * 3; int i = data->pair_i[ii]; diff --git a/src/ML-IAP/pair_mliap.cpp b/src/ML-IAP/pair_mliap.cpp index 18f4054373..79efc1f156 100644 --- a/src/ML-IAP/pair_mliap.cpp +++ b/src/ML-IAP/pair_mliap.cpp @@ -37,7 +37,6 @@ #include #include -#include using namespace LAMMPS_NS; @@ -121,7 +120,7 @@ void PairMLIAP::allocate() { allocated = 1; int n = atom->ntypes; - std::cout << "cutsq size: " << n+1 << std::endl; + memory->create(setflag,n+1,n+1,"pair:setflag"); memory->create(cutsq,n+1,n+1,"pair:cutsq"); memory->create(cutghost,n+1,n+1,"pair:cutghost"); From 3d480a01a5d400d6451c1f5e0831de0b75ce3663 Mon Sep 17 00:00:00 2001 From: Yifan Li Date: Fri, 20 Oct 2023 23:41:06 -0400 Subject: [PATCH 043/204] add the missing dividing by np in compute t_prim --- src/REPLICA/fix_pimd_langevin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/REPLICA/fix_pimd_langevin.cpp b/src/REPLICA/fix_pimd_langevin.cpp index c091075f7c..a28bc9506b 100644 --- a/src/REPLICA/fix_pimd_langevin.cpp +++ b/src/REPLICA/fix_pimd_langevin.cpp @@ -1347,7 +1347,7 @@ void FixPIMDLangevin::compute_tote() void FixPIMDLangevin::compute_t_prim() { - t_prim = 1.5 * atom->natoms * np * force->boltz * temp - total_spring_energy; + t_prim = 1.5 * atom->natoms * np * force->boltz * temp - total_spring_energy / np; } /* ---------------------------------------------------------------------- */ From 80f72e7a1d560d0a555cea4048417d52e924199f Mon Sep 17 00:00:00 2001 From: Yifan Li Date: Sat, 21 Oct 2023 00:28:33 -0400 Subject: [PATCH 044/204] use times inverse_np instead --- src/REPLICA/fix_pimd_langevin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/REPLICA/fix_pimd_langevin.cpp b/src/REPLICA/fix_pimd_langevin.cpp index a28bc9506b..cffaf327e4 100644 --- a/src/REPLICA/fix_pimd_langevin.cpp +++ b/src/REPLICA/fix_pimd_langevin.cpp @@ -1347,7 +1347,7 @@ void FixPIMDLangevin::compute_tote() void FixPIMDLangevin::compute_t_prim() { - t_prim = 1.5 * atom->natoms * np * force->boltz * temp - total_spring_energy / np; + t_prim = 1.5 * atom->natoms * np * force->boltz * temp - total_spring_energy * inverse_np; } /* ---------------------------------------------------------------------- */ From a7fb81c68eaf0e29679c94872cc8f4d0d4be4ab6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 21 Oct 2023 06:28:14 -0400 Subject: [PATCH 045/204] must initialize deleted pointers to null since the following commands may fail --- src/force.cpp | 10 ++++++++++ src/update.cpp | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/src/force.cpp b/src/force.cpp index 14d48d1a73..67187f8dd6 100644 --- a/src/force.cpp +++ b/src/force.cpp @@ -336,6 +336,8 @@ void Force::create_bond(const std::string &style, int trysuffix) { delete[] bond_style; if (bond) delete bond; + bond_style = nullptr; + bond = nullptr; int sflag; bond = new_bond(style, trysuffix, sflag); @@ -404,6 +406,8 @@ void Force::create_angle(const std::string &style, int trysuffix) { delete[] angle_style; if (angle) delete angle; + angle_style = nullptr; + angle = nullptr; int sflag; angle = new_angle(style, trysuffix, sflag); @@ -472,6 +476,8 @@ void Force::create_dihedral(const std::string &style, int trysuffix) { delete[] dihedral_style; if (dihedral) delete dihedral; + dihedral_style = nullptr; + dihedral = nullptr; int sflag; dihedral = new_dihedral(style, trysuffix, sflag); @@ -540,6 +546,8 @@ void Force::create_improper(const std::string &style, int trysuffix) { delete[] improper_style; if (improper) delete improper; + improper_style = nullptr; + improper = nullptr; int sflag; improper = new_improper(style, trysuffix, sflag); @@ -608,6 +616,8 @@ void Force::create_kspace(const std::string &style, int trysuffix) { delete[] kspace_style; if (kspace) delete kspace; + kspace_style = nullptr; + kspace = nullptr; int sflag; kspace = new_kspace(style, trysuffix, sflag); diff --git a/src/update.cpp b/src/update.cpp index 04d3f7e1e6..1704e7c439 100644 --- a/src/update.cpp +++ b/src/update.cpp @@ -332,6 +332,8 @@ void Update::create_integrate(int narg, char **arg, int trysuffix) delete[] integrate_style; delete integrate; + integrate_style = nullptr; + integrate = nullptr; int sflag; @@ -400,6 +402,8 @@ void Update::create_minimize(int narg, char **arg, int trysuffix) delete[] minimize_style; delete minimize; + minimize_style = nullptr; + minimize = nullptr; // temporarily assign the style name without suffix (for error messages during creation) minimize_style = arg[0]; From 08edd193e20400d8686471d4bc713e4b6aee6eff Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 21 Oct 2023 06:28:35 -0400 Subject: [PATCH 046/204] programming style updates --- src/atom.cpp | 5 +---- src/update.cpp | 10 +++------- src/update.h | 22 +++++++++++----------- 3 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/atom.cpp b/src/atom.cpp index c4521a244e..c22556ff9d 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -89,7 +89,7 @@ are updated by the AtomVec class as needed. * * \param _lmp pointer to the base LAMMPS class */ -Atom::Atom(LAMMPS *_lmp) : Pointers(_lmp) +Atom::Atom(LAMMPS *_lmp) : Pointers(_lmp), atom_style(nullptr), avec(nullptr), avec_map(nullptr) { natoms = 0; nlocal = nghost = nmax = 0; @@ -272,9 +272,6 @@ Atom::Atom(LAMMPS *_lmp) : Pointers(_lmp) unique_tags = nullptr; reset_image_flag[0] = reset_image_flag[1] = reset_image_flag[2] = false; - atom_style = nullptr; - avec = nullptr; - avec_map = new AtomVecCreatorMap(); #define ATOM_CLASS diff --git a/src/update.cpp b/src/update.cpp index 1704e7c439..13ff7c872a 100644 --- a/src/update.cpp +++ b/src/update.cpp @@ -46,7 +46,9 @@ template static Min *minimize_creator(LAMMPS *lmp) /* ---------------------------------------------------------------------- */ -Update::Update(LAMMPS *lmp) : Pointers(lmp) +Update::Update(LAMMPS *lmp) : + Pointers(lmp), unit_style(nullptr), integrate(nullptr), integrate_style(nullptr), + minimize(nullptr), minimize_style(nullptr), integrate_map(nullptr), minimize_map(nullptr) { char *str; @@ -67,14 +69,8 @@ Update::Update(LAMMPS *lmp) : Pointers(lmp) dt_default = 1; dt = 0.0; - unit_style = nullptr; set_units("lj"); - integrate_style = nullptr; - integrate = nullptr; - minimize_style = nullptr; - minimize = nullptr; - integrate_map = new IntegrateCreatorMap(); #define INTEGRATE_CLASS diff --git a/src/update.h b/src/update.h index 7ed61ba296..3848eb3a1e 100644 --- a/src/update.h +++ b/src/update.h @@ -22,6 +22,17 @@ namespace LAMMPS_NS { class Update : protected Pointers { public: + Update(class LAMMPS *); + ~Update() override; + void init(); + void set_units(const char *); + void create_integrate(int, char **, int); + void create_minimize(int, char **, int); + void reset_timestep(int, char **); + void reset_timestep(bigint, bool); + void update_time(); + double memory_usage(); + double dt; // timestep double etol, ftol; // minimizer tolerances on energy/force bigint ntimestep; // current step (dynamics or min iterations) @@ -58,17 +69,6 @@ class Update : protected Pointers { IntegrateCreatorMap *integrate_map; MinimizeCreatorMap *minimize_map; - Update(class LAMMPS *); - ~Update() override; - void init(); - void set_units(const char *); - void create_integrate(int, char **, int); - void create_minimize(int, char **, int); - void reset_timestep(int, char **); - void reset_timestep(bigint, bool); - void update_time(); - double memory_usage(); - private: void new_integrate(char *, int, char **, int, int &); void new_minimize(char *, int, char **, int, int &); From b5a01e84e127cf89912c3e6017fe6e24ae6d6eb1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 22 Oct 2023 18:09:11 -0400 Subject: [PATCH 047/204] consolidate dump file field enumerators into reader.h header for consistency --- src/ADIOS/reader_adios.cpp | 5 -- src/MOLFILE/reader_molfile.cpp | 1 - src/read_dump.cpp | 137 ++++++++++++++++----------------- src/reader.h | 3 + src/reader_native.cpp | 5 -- src/reader_xyz.cpp | 2 - 6 files changed, 71 insertions(+), 82 deletions(-) diff --git a/src/ADIOS/reader_adios.cpp b/src/ADIOS/reader_adios.cpp index 362192479e..ec87bc26cc 100644 --- a/src/ADIOS/reader_adios.cpp +++ b/src/ADIOS/reader_adios.cpp @@ -30,11 +30,6 @@ using namespace LAMMPS_NS; -// also in read_dump.cpp - -enum { ID, TYPE, X, Y, Z, VX, VY, VZ, Q, IX, IY, IZ, FX, FY, FZ }; -enum { UNSET, NOSCALE_NOWRAP, NOSCALE_WRAP, SCALE_NOWRAP, SCALE_WRAP }; - #define SMALL 1.0e-6 namespace LAMMPS_NS { diff --git a/src/MOLFILE/reader_molfile.cpp b/src/MOLFILE/reader_molfile.cpp index 49ed347e84..441a152ad9 100644 --- a/src/MOLFILE/reader_molfile.cpp +++ b/src/MOLFILE/reader_molfile.cpp @@ -29,7 +29,6 @@ using namespace LAMMPS_NS; typedef MolfileInterface MFI; using namespace MathConst; -enum{ID,TYPE,X,Y,Z,VX,VY,VZ}; #define SMALL 1.0e-6 // true if the difference between two floats is "small". diff --git a/src/read_dump.cpp b/src/read_dump.cpp index 71ea0288e5..e4f31a712a 100644 --- a/src/read_dump.cpp +++ b/src/read_dump.cpp @@ -35,11 +35,7 @@ using namespace LAMMPS_NS; #define CHUNK 16384 -// also in reader_native.cpp - -enum{ID,TYPE,X,Y,Z,VX,VY,VZ,Q,IX,IY,IZ,FX,FY,FZ}; -enum{UNSET,NOSCALE_NOWRAP,NOSCALE_WRAP,SCALE_NOWRAP,SCALE_WRAP}; -enum{NOADD,YESADD,KEEPADD}; +enum { NOADD, YESADD, KEEPADD }; /* ---------------------------------------------------------------------- */ @@ -536,30 +532,30 @@ void ReadDump::header(int fieldinfo) int value = MAX(xflag,yflag); value = MAX(zflag,value); - if ((xflag != UNSET && xflag != value) || - (yflag != UNSET && yflag != value) || - (zflag != UNSET && zflag != value)) + if ((xflag != Reader::UNSET && xflag != value) || + (yflag != Reader::UNSET && yflag != value) || + (zflag != Reader::UNSET && zflag != value)) error->one(FLERR, "Read_dump xyz fields do not have consistent scaling/wrapping"); // set scaled/wrapped based on xyz flags - value = UNSET; - if (xflag != UNSET) value = xflag; - if (yflag != UNSET) value = yflag; - if (zflag != UNSET) value = zflag; + value = Reader::UNSET; + if (xflag != Reader::UNSET) value = xflag; + if (yflag != Reader::UNSET) value = yflag; + if (zflag != Reader::UNSET) value = zflag; - if (value == UNSET) { + if (value == Reader::UNSET) { scaled = wrapped = 0; - } else if (value == NOSCALE_NOWRAP) { + } else if (value == Reader::NOSCALE_NOWRAP) { scaled = wrapped = 0; - } else if (value == NOSCALE_WRAP) { + } else if (value == Reader::NOSCALE_WRAP) { scaled = 0; wrapped = 1; - } else if (value == SCALE_NOWRAP) { + } else if (value == Reader::SCALE_NOWRAP) { scaled = 1; wrapped = 0; - } else if (value == SCALE_WRAP) { + } else if (value == Reader::SCALE_WRAP) { scaled = wrapped = 1; } @@ -569,16 +565,16 @@ void ReadDump::header(int fieldinfo) if (scaled && triclinic == 1) { int flag = 0; - if (xflag == UNSET) flag = 1; - if (yflag == UNSET) flag = 1; - if (dimension == 3 && zflag == UNSET) flag = 1; + if (xflag == Reader::UNSET) flag = 1; + if (yflag == Reader::UNSET) flag = 1; + if (domain->dimension == 3 && zflag == Reader::UNSET) flag = 1; if (flag) error->one(FLERR,"All read_dump x,y,z fields must be specified for " "scaled, triclinic coords"); for (int i = 0; i < nfield; i++) { - if (fieldtype[i] == Y) yindex = i; - if (fieldtype[i] == Z) zindex = i; + if (fieldtype[i] == Reader::Y) yindex = i; + if (fieldtype[i] == Reader::Z) zindex = i; } } } @@ -864,43 +860,43 @@ void ReadDump::process_atoms() for (ifield = 1; ifield < nfield; ifield++) { switch (fieldtype[ifield]) { - case X: + case Reader::X: x[m][0] = xfield(i,ifield); break; - case Y: + case Reader::Y: x[m][1] = yfield(i,ifield); break; - case Z: + case Reader::Z: x[m][2] = zfield(i,ifield); break; - case VX: + case Reader::VX: v[m][0] = fields[i][ifield]; break; - case Q: + case Reader::Q: q[m] = fields[i][ifield]; break; - case VY: + case Reader::VY: v[m][1] = fields[i][ifield]; break; - case VZ: + case Reader::VZ: v[m][2] = fields[i][ifield]; break; - case IX: + case Reader::IX: xbox = static_cast (fields[i][ifield]); break; - case IY: + case Reader::IY: ybox = static_cast (fields[i][ifield]); break; - case IZ: + case Reader::IZ: zbox = static_cast (fields[i][ifield]); break; - case FX: + case Reader::FX: f[m][0] = fields[i][ifield]; break; - case FY: + case Reader::FY: f[m][1] = fields[i][ifield]; break; - case FZ: + case Reader::FZ: f[m][2] = fields[i][ifield]; break; } @@ -952,7 +948,7 @@ void ReadDump::process_atoms() int tflag = 0; for (ifield = 0; ifield < nfield; ifield++) - if (fieldtype[ifield] == TYPE) tflag = 1; + if (fieldtype[ifield] == Reader::TYPE) tflag = 1; if (!tflag) error->all(FLERR,"Cannot add atoms if dump file does not store atom type"); @@ -969,16 +965,16 @@ void ReadDump::process_atoms() one[0] = one[1] = one[2] = 0.0; for (ifield = 1; ifield < nfield; ifield++) { switch (fieldtype[ifield]) { - case TYPE: + case Reader::TYPE: itype = static_cast (fields[i][ifield]); break; - case X: + case Reader::X: one[0] = xfield(i,ifield); break; - case Y: + case Reader::Y: one[1] = yfield(i,ifield); break; - case Z: + case Reader::Z: one[2] = zfield(i,ifield); break; } @@ -1002,29 +998,29 @@ void ReadDump::process_atoms() for (ifield = 0; ifield < nfield; ifield++) { switch (fieldtype[ifield]) { - case ID: + case Reader::ID: if (addflag == KEEPADD) tag[m] = static_cast (fields[i][ifield]); break; - case VX: + case Reader::VX: v[m][0] = fields[i][ifield]; break; - case VY: + case Reader::VY: v[m][1] = fields[i][ifield]; break; - case VZ: + case Reader::VZ: v[m][2] = fields[i][ifield]; break; - case Q: + case Reader::Q: q[m] = fields[i][ifield]; break; - case IX: + case Reader::IX: xbox = static_cast (fields[i][ifield]); break; - case IY: + case Reader::IY: ybox = static_cast (fields[i][ifield]); break; - case IZ: + case Reader::IZ: zbox = static_cast (fields[i][ifield]); break; } @@ -1166,8 +1162,11 @@ int ReadDump::fields_and_keywords(int narg, char **arg) strcmp(arg[iarg+1],"keep") == 0)) break; nfield = 0; - fieldtype[nfield++] = ID; - if (iarg < narg) fieldtype[nfield++] = TYPE; + fieldtype[nfield++] = Reader::ID; + if (iarg < narg) { + if (comm->me == 0) utils::logmesg(lmp, "Adding 'type' field to requested per-atom fields"); + fieldtype[nfield++] = Reader::TYPE; + } // parse fields @@ -1175,7 +1174,7 @@ int ReadDump::fields_and_keywords(int narg, char **arg) while (iarg < narg) { int type = whichtype(arg[iarg]); if (type < 0) break; - if (type == Q && !atom->q_flag) + if (type == Reader::Q && !atom->q_flag) error->all(FLERR,"Read dump of atom property that isn't allocated"); fieldtype[nfield++] = type; iarg++; @@ -1183,13 +1182,13 @@ int ReadDump::fields_and_keywords(int narg, char **arg) // check for no fields - if (fieldtype[nfield-1] == ID || fieldtype[nfield-1] == TYPE) + if (fieldtype[nfield-1] == Reader::ID || fieldtype[nfield-1] == Reader::TYPE) error->all(FLERR,"Illegal read_dump command"); if (dimension == 2) { for (int i = 0; i < nfield; i++) - if (fieldtype[i] == Z || fieldtype[i] == VZ || - fieldtype[i] == IZ || fieldtype[i] == FZ) + if (fieldtype[i] == Reader::Z || fieldtype[i] == Reader::VZ || + fieldtype[i] == Reader::IZ || fieldtype[i] == Reader::FZ) error->all(FLERR,"Illegal read_dump command"); } @@ -1293,21 +1292,21 @@ int ReadDump::fields_and_keywords(int narg, char **arg) int ReadDump::whichtype(char *str) { int type = -1; - if (strcmp(str,"id") == 0) type = ID; - else if (strcmp(str,"type") == 0) type = TYPE; - else if (strcmp(str,"x") == 0) type = X; - else if (strcmp(str,"y") == 0) type = Y; - else if (strcmp(str,"z") == 0) type = Z; - else if (strcmp(str,"vx") == 0) type = VX; - else if (strcmp(str,"vy") == 0) type = VY; - else if (strcmp(str,"vz") == 0) type = VZ; - else if (strcmp(str,"q") == 0) type = Q; - else if (strcmp(str,"ix") == 0) type = IX; - else if (strcmp(str,"iy") == 0) type = IY; - else if (strcmp(str,"iz") == 0) type = IZ; - else if (strcmp(str,"fx") == 0) type = FX; - else if (strcmp(str,"fy") == 0) type = FY; - else if (strcmp(str,"fz") == 0) type = FZ; + if (strcmp(str,"id") == 0) type = Reader::ID; + else if (strcmp(str,"type") == 0) type = Reader::TYPE; + else if (strcmp(str,"x") == 0) type = Reader::X; + else if (strcmp(str,"y") == 0) type = Reader::Y; + else if (strcmp(str,"z") == 0) type = Reader::Z; + else if (strcmp(str,"vx") == 0) type = Reader::VX; + else if (strcmp(str,"vy") == 0) type = Reader::VY; + else if (strcmp(str,"vz") == 0) type = Reader::VZ; + else if (strcmp(str,"q") == 0) type = Reader::Q; + else if (strcmp(str,"ix") == 0) type = Reader::IX; + else if (strcmp(str,"iy") == 0) type = Reader::IY; + else if (strcmp(str,"iz") == 0) type = Reader::IZ; + else if (strcmp(str,"fx") == 0) type = Reader::FX; + else if (strcmp(str,"fy") == 0) type = Reader::FY; + else if (strcmp(str,"fz") == 0) type = Reader::FZ; return type; } diff --git a/src/reader.h b/src/reader.h index e8483b76cd..1dbd1253df 100644 --- a/src/reader.h +++ b/src/reader.h @@ -22,6 +22,9 @@ namespace LAMMPS_NS { class Reader : protected Pointers { public: + enum { ID, TYPE, X, Y, Z, VX, VY, VZ, Q, IX, IY, IZ, FX, FY, FZ }; + enum { UNSET, NOSCALE_NOWRAP, NOSCALE_WRAP, SCALE_NOWRAP, SCALE_WRAP }; + Reader(class LAMMPS *); ~Reader() override; diff --git a/src/reader_native.cpp b/src/reader_native.cpp index 3e7d01550d..92409389ef 100644 --- a/src/reader_native.cpp +++ b/src/reader_native.cpp @@ -26,11 +26,6 @@ using namespace LAMMPS_NS; #define MAXLINE 1024 // max line length in dump file -// also in read_dump.cpp - -enum{ID,TYPE,X,Y,Z,VX,VY,VZ,Q,IX,IY,IZ,FX,FY,FZ}; -enum{UNSET,NOSCALE_NOWRAP,NOSCALE_WRAP,SCALE_NOWRAP,SCALE_WRAP}; - /* ---------------------------------------------------------------------- */ ReaderNative::ReaderNative(LAMMPS *lmp) : Reader(lmp) diff --git a/src/reader_xyz.cpp b/src/reader_xyz.cpp index c11ec3a1a9..89257e9d36 100644 --- a/src/reader_xyz.cpp +++ b/src/reader_xyz.cpp @@ -25,8 +25,6 @@ using namespace LAMMPS_NS; #define MAXLINE 1024 // max line length in dump file -enum{ID,TYPE,X,Y,Z}; - /* ---------------------------------------------------------------------- */ ReaderXYZ::ReaderXYZ(LAMMPS *lmp) : Reader(lmp) From 1782008b28644241ff8619c6b37d82ef2170f2b7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 22 Oct 2023 18:09:56 -0400 Subject: [PATCH 048/204] programming style updates --- src/read_dump.cpp | 112 ++++++++++++++++++++------------------------- src/read_dump.h | 5 -- src/reader_xyz.cpp | 2 +- 3 files changed, 50 insertions(+), 69 deletions(-) diff --git a/src/read_dump.cpp b/src/read_dump.cpp index e4f31a712a..893895f6f1 100644 --- a/src/read_dump.cpp +++ b/src/read_dump.cpp @@ -26,7 +26,7 @@ #include "irregular.h" #include "memory.h" #include "reader.h" -#include "style_reader.h" // IWYU pragma: keep +#include "style_reader.h" // IWYU pragma: keep #include "update.h" #include @@ -39,29 +39,16 @@ enum { NOADD, YESADD, KEEPADD }; /* ---------------------------------------------------------------------- */ -ReadDump::ReadDump(LAMMPS *lmp) : Command(lmp) +ReadDump::ReadDump(LAMMPS *lmp) : + Command(lmp), files(nullptr), readerstyle(nullptr), fieldtype(nullptr), fieldlabel(nullptr), + fields(nullptr), buf(nullptr), nsnapatoms(nullptr), readers(nullptr) { - MPI_Comm_rank(world,&me); - MPI_Comm_size(world,&nprocs); - - dimension = domain->dimension; - triclinic = domain->triclinic; - nfile = 0; - files = nullptr; - nnew = maxnew = 0; nfield = 0; - fieldtype = nullptr; - fieldlabel = nullptr; - fields = nullptr; - buf = nullptr; - readerstyle = utils::strdup("native"); nreader = 0; - readers = nullptr; - nsnapatoms = nullptr; clustercomm = MPI_COMM_NULL; filereader = 0; parallel = 0; @@ -71,19 +58,19 @@ ReadDump::ReadDump(LAMMPS *lmp) : Command(lmp) ReadDump::~ReadDump() { - for (int i = 0; i < nfile; i++) delete [] files[i]; - delete [] files; - for (int i = 0; i < nfield; i++) delete [] fieldlabel[i]; - delete [] fieldlabel; - delete [] fieldtype; - delete [] readerstyle; + for (int i = 0; i < nfile; i++) delete[] files[i]; + delete[] files; + for (int i = 0; i < nfield; i++) delete[] fieldlabel[i]; + delete[] fieldlabel; + delete[] fieldtype; + delete[] readerstyle; memory->destroy(fields); memory->destroy(buf); for (int i = 0; i < nreader; i++) delete readers[i]; - delete [] readers; - delete [] nsnapatoms; + delete[] readers; + delete[] nsnapatoms; MPI_Comm_free(&clustercomm); } @@ -108,7 +95,7 @@ void ReadDump::command(int narg, char **arg) // find the snapshot and read/bcast/process header info - if (me == 0) utils::logmesg(lmp,"Scanning dump file ...\n"); + if (comm->me == 0) utils::logmesg(lmp,"Scanning dump file ...\n"); bigint ntimestep = seek(nstep,1); if (ntimestep < 0) @@ -123,7 +110,7 @@ void ReadDump::command(int narg, char **arg) // read in the snapshot and reset system - if (me == 0) utils::logmesg(lmp,"Reading snapshot from dump file ...\n"); + if (comm->me == 0) utils::logmesg(lmp,"Reading snapshot from dump file ...\n"); bigint natoms_prev = atom->natoms; atoms(); @@ -153,7 +140,7 @@ void ReadDump::command(int narg, char **arg) domain->print_box(" "); - if (me == 0) + if (comm->me == 0) utils::logmesg(lmp," {} atoms before read\n" " {} atoms in snapshot\n" " {} atoms purged\n" @@ -202,14 +189,14 @@ void ReadDump::setup_reader(int narg, char **arg) nreader = 1; firstfile = -1; MPI_Comm_dup(world,&clustercomm); - } else if (multiproc_nfile >= nprocs) { - firstfile = static_cast ((bigint) me * multiproc_nfile/nprocs); - int lastfile = static_cast ((bigint) (me+1) * multiproc_nfile/nprocs); + } else if (multiproc_nfile >= comm->nprocs) { + firstfile = static_cast ((bigint) comm->me * multiproc_nfile/comm->nprocs); + int lastfile = static_cast ((bigint) (comm->me+1) * multiproc_nfile/comm->nprocs); nreader = lastfile - firstfile; - MPI_Comm_split(world,me,0,&clustercomm); - } else if (multiproc_nfile < nprocs) { + MPI_Comm_split(world,comm->me,0,&clustercomm); + } else if (multiproc_nfile < comm->nprocs) { nreader = 1; - int icluster = static_cast ((bigint) me * multiproc_nfile/nprocs); + int icluster = static_cast ((bigint) comm->me * multiproc_nfile/comm->nprocs); firstfile = icluster; MPI_Comm_split(world,icluster,0,&clustercomm); } @@ -272,7 +259,7 @@ bigint ReadDump::seek(bigint nrequest, int exact) // proc 0 finds the timestep in its first reader - if (me == 0 || parallel) { + if (comm->me == 0 || parallel) { // exit file loop when dump timestep >= nrequest // or files exhausted @@ -323,7 +310,7 @@ bigint ReadDump::seek(bigint nrequest, int exact) if (multiproc && filereader) { for (int i = 0; i < nreader; i++) { - if (me == 0 && i == 0) continue; // proc 0, reader 0 already found it + if (comm->me == 0 && i == 0) continue; // proc 0, reader 0 already found it std::string multiname = files[currentfile]; multiname.replace(multiname.find('%'),1,fmt::format("{}",firstfile+i)); readers[i]->open_file(multiname); @@ -361,7 +348,7 @@ bigint ReadDump::next(bigint ncurrent, bigint nlast, int nevery, int nskip) // proc 0 finds the timestep in its first reader - if (me == 0 || parallel) { + if (comm->me == 0 || parallel) { // exit file loop when dump timestep matches all criteria // or files exhausted @@ -425,7 +412,7 @@ bigint ReadDump::next(bigint ncurrent, bigint nlast, int nevery, int nskip) if (multiproc && filereader) { for (int i = 0; i < nreader; i++) { - if (me == 0 && i == 0) continue; + if (comm->me == 0 && i == 0) continue; std::string multiname = files[currentfile]; multiname.replace(multiname.find('%'),1,fmt::format("{}",firstfile+i)); readers[i]->open_file(multiname); @@ -459,10 +446,9 @@ void ReadDump::header(int fieldinfo) if (filereader) { for (int i = 0; i < nreader; i++) - nsnapatoms[i] = readers[i]->read_header(box,boxinfo,triclinic_snap,fieldinfo, - nfield,fieldtype,fieldlabel, - scaleflag,wrapflag,fieldflag, - xflag,yflag,zflag); + nsnapatoms[i] + = readers[i]->read_header(box, boxinfo, triclinic_snap, fieldinfo, nfield, fieldtype, + fieldlabel, scaleflag, wrapflag, fieldflag, xflag, yflag, zflag); } if (!parallel) { @@ -518,8 +504,8 @@ void ReadDump::header(int fieldinfo) if (boxflag) { if (!boxinfo) error->all(FLERR,"No box information in dump, must use 'box no'"); - else if ((triclinic_snap && !triclinic) || - (!triclinic_snap && triclinic)) + else if ((triclinic_snap && !domain->triclinic) || + (!triclinic_snap && domain->triclinic)) error->one(FLERR,"Read_dump triclinic status does not match simulation"); } @@ -563,7 +549,7 @@ void ReadDump::header(int fieldinfo) // set yindex,zindex = column index of Y and Z fields in fields array // needed for unscaling to absolute coords in xfield(), yfield(), zfield() - if (scaled && triclinic == 1) { + if (scaled && domain->triclinic == 1) { int flag = 0; if (xflag == Reader::UNSET) flag = 1; if (yflag == Reader::UNSET) flag = 1; @@ -606,12 +592,12 @@ void ReadDump::atoms() // migrate old owned atoms to new procs based on atom IDs // not necessary if purged all old atoms or if only 1 proc - if (!purgeflag && nprocs > 1) migrate_old_atoms(); + if (!purgeflag && comm->nprocs > 1) migrate_old_atoms(); // migrate new snapshot atoms to same new procs based on atom IDs // not necessary if purged all old atoms or if only 1 proc - if (!purgeflag && nprocs > 1) migrate_new_atoms(); + if (!purgeflag && comm->nprocs > 1) migrate_new_atoms(); // must build map if not a molecular system // this will be needed to match new atoms to old atoms @@ -653,13 +639,13 @@ void ReadDump::atoms() domain->boxhi[0] = xhi; domain->boxlo[1] = ylo; domain->boxhi[1] = yhi; - if (dimension == 3) { + if (domain->dimension == 3) { domain->boxlo[2] = zlo; domain->boxhi[2] = zhi; } - if (triclinic) { + if (domain->triclinic) { domain->xy = xy; - if (dimension == 3) { + if (domain->dimension == 3) { domain->xz = xz; domain->yz = yz; } @@ -693,7 +679,7 @@ void ReadDump::read_atoms() // each reading proc reads one file and splits data across cluster // cluster can be all procs or a subset - if (!parallel && (!multiproc || multiproc_nfile < nprocs)) { + if (!parallel && (!multiproc || multiproc_nfile < comm->nprocs)) { nsnap = nsnapatoms[0]; if (filereader) { @@ -765,7 +751,7 @@ void ReadDump::read_atoms() // every proc is a filereader, reads one or more files // each proc keeps all data it reads, no communication required - } else if (multiproc_nfile >= nprocs || parallel) { + } else if (multiproc_nfile >= comm->nprocs || parallel) { bigint sum = 0; for (int i = 0; i < nreader; i++) sum += nsnapatoms[i]; @@ -1072,7 +1058,7 @@ void ReadDump::migrate_old_atoms() int *procassign; memory->create(procassign,nlocal,"read_dump:procassign"); for (int i = 0; i < nlocal; i++) - procassign[i] = tag[i] % nprocs; + procassign[i] = tag[i] % comm->nprocs; auto irregular = new Irregular(lmp); irregular->migrate_atoms(1,1,procassign); @@ -1094,7 +1080,7 @@ void ReadDump::migrate_new_atoms() memory->create(procassign,nnew,"read_dump:procassign"); for (int i = 0; i < nnew; i++) { mtag = static_cast (fields[i][0]); - procassign[i] = mtag % nprocs; + procassign[i] = mtag % comm->nprocs; } auto irregular = new Irregular(lmp); @@ -1132,12 +1118,12 @@ void ReadDump::migrate_atoms_by_coords() int nlocal = atom->nlocal; for (int i = 0; i < nlocal; i++) domain->remap(x[i],image[i]); - if (triclinic) domain->x2lamda(atom->nlocal); + if (domain->triclinic) domain->x2lamda(atom->nlocal); domain->reset_box(); auto irregular = new Irregular(lmp); irregular->migrate_atoms(1); delete irregular; - if (triclinic) domain->lamda2x(atom->nlocal); + if (domain->triclinic) domain->lamda2x(atom->nlocal); } /* ---------------------------------------------------------------------- @@ -1164,7 +1150,7 @@ int ReadDump::fields_and_keywords(int narg, char **arg) nfield = 0; fieldtype[nfield++] = Reader::ID; if (iarg < narg) { - if (comm->me == 0) utils::logmesg(lmp, "Adding 'type' field to requested per-atom fields"); + if (comm->me == 0) utils::logmesg(lmp, "Adding 'type' field to requested per-atom fields\n"); fieldtype[nfield++] = Reader::TYPE; } @@ -1185,7 +1171,7 @@ int ReadDump::fields_and_keywords(int narg, char **arg) if (fieldtype[nfield-1] == Reader::ID || fieldtype[nfield-1] == Reader::TYPE) error->all(FLERR,"Illegal read_dump command"); - if (dimension == 2) { + if (domain->dimension == 2) { for (int i = 0; i < nfield; i++) if (fieldtype[i] == Reader::Z || fieldtype[i] == Reader::VZ || fieldtype[i] == Reader::IZ || fieldtype[i] == Reader::FZ) @@ -1263,7 +1249,7 @@ int ReadDump::fields_and_keywords(int narg, char **arg) iarg += 2; } else if (strcmp(arg[iarg],"format") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal read_dump command"); - delete [] readerstyle; + delete[] readerstyle; readerstyle = utils::strdup(arg[iarg+1]); iarg += 2; break; @@ -1319,8 +1305,8 @@ int ReadDump::whichtype(char *str) double ReadDump::xfield(int i, int j) { if (!scaled) return fields[i][j]; - else if (!triclinic) return fields[i][j]*xprd + xlo; - else if (dimension == 2) + else if (!domain->triclinic) return fields[i][j]*xprd + xlo; + else if (domain->dimension == 2) return xprd*fields[i][j] + xy*fields[i][yindex] + xlo; return xprd*fields[i][j] + xy*fields[i][yindex] + xz*fields[i][zindex] + xlo; } @@ -1328,8 +1314,8 @@ double ReadDump::xfield(int i, int j) double ReadDump::yfield(int i, int j) { if (!scaled) return fields[i][j]; - else if (!triclinic) return fields[i][j]*yprd + ylo; - else if (dimension == 2) return yprd*fields[i][j] + ylo; + else if (!domain->triclinic) return fields[i][j]*yprd + ylo; + else if (domain->dimension == 2) return yprd*fields[i][j] + ylo; return yprd*fields[i][j] + yz*fields[i][zindex] + ylo; } diff --git a/src/read_dump.h b/src/read_dump.h index f9a9f0ba57..4676a1819d 100644 --- a/src/read_dump.h +++ b/src/read_dump.h @@ -41,8 +41,6 @@ class ReadDump : public Command { int fields_and_keywords(int, char **); private: - int me, nprocs; - char **files; // list of input dump files to process int nfile; // # of dump files to process (each may be parallel) int currentfile; // current open file (0 to nfile-1) @@ -60,9 +58,6 @@ class ReadDump : public Command { int filereader; // 1 if this proc reads from a dump file(s) int parallel; // 1 if parallel reading (e.g. via ADIOS2) - int dimension; // same as in Domain - int triclinic; - int boxflag; // overwrite simulation box with dump file box params int timestepflag; // overwrite simulation timestep with dump file timestep int replaceflag, addflag; // flags for processing dump snapshot atoms diff --git a/src/reader_xyz.cpp b/src/reader_xyz.cpp index 89257e9d36..c3e7d0ed99 100644 --- a/src/reader_xyz.cpp +++ b/src/reader_xyz.cpp @@ -38,7 +38,7 @@ ReaderXYZ::ReaderXYZ(LAMMPS *lmp) : Reader(lmp) ReaderXYZ::~ReaderXYZ() { - delete [] line; + delete[] line; memory->destroy(fieldindex); } From 731400e0044acb03fe124c70c49f309b562ce1a9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 22 Oct 2023 18:29:07 -0400 Subject: [PATCH 049/204] improve error messages for read_dump --- src/read_dump.cpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/read_dump.cpp b/src/read_dump.cpp index 893895f6f1..4a64a8be1d 100644 --- a/src/read_dump.cpp +++ b/src/read_dump.cpp @@ -82,7 +82,7 @@ void ReadDump::command(int narg, char **arg) if (domain->box_exist == 0) error->all(FLERR,"Read_dump command before simulation box is defined"); - if (narg < 2) error->all(FLERR,"Illegal read_dump command"); + if (narg < 2) utils::missing_cmd_args(FLERR, "read_dump", error); store_files(1,&arg[0]); bigint nstep = utils::bnumeric(FLERR,arg[1],false,lmp); @@ -512,7 +512,7 @@ void ReadDump::header(int fieldinfo) // error check on requested fields existing in dump file if (fieldflag < 0) - error->one(FLERR,"Read_dump field not found in dump file"); + error->one(FLERR,"One of the requested read_dump per-atom fields not found in dump file"); // all explicitly requested x,y,z must have consistent scaling & wrapping @@ -1161,7 +1161,7 @@ int ReadDump::fields_and_keywords(int narg, char **arg) int type = whichtype(arg[iarg]); if (type < 0) break; if (type == Reader::Q && !atom->q_flag) - error->all(FLERR,"Read dump of atom property that isn't allocated"); + error->all(FLERR,"Read dump of charge property that isn't supported by atom style"); fieldtype[nfield++] = type; iarg++; } @@ -1169,13 +1169,13 @@ int ReadDump::fields_and_keywords(int narg, char **arg) // check for no fields if (fieldtype[nfield-1] == Reader::ID || fieldtype[nfield-1] == Reader::TYPE) - error->all(FLERR,"Illegal read_dump command"); + error->all(FLERR,"Read_dump must use at least either 'id' or 'type' field"); if (domain->dimension == 2) { for (int i = 0; i < nfield; i++) if (fieldtype[i] == Reader::Z || fieldtype[i] == Reader::VZ || fieldtype[i] == Reader::IZ || fieldtype[i] == Reader::FZ) - error->all(FLERR,"Illegal read_dump command"); + error->all(FLERR,"Read_dump must not read z-dimension data with 2d system"); } for (int i = 0; i < nfield; i++) @@ -1198,40 +1198,40 @@ int ReadDump::fields_and_keywords(int narg, char **arg) while (iarg < narg) { if (strcmp(arg[iarg],"nfile") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal read_dump command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "read_dump nfile", error); multiproc_nfile = utils::inumeric(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"box") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal read_dump command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "read_dump box", error); boxflag = utils::logical(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"timestep") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal read_dump command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "read_dump timestep", error); timestepflag = utils::logical(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"replace") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal read_dump command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "read_dump replace", error); replaceflag = utils::logical(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"purge") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal read_dump command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "read_dump purge", error); purgeflag = utils::logical(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"trim") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal read_dump command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "read_dump trim", error); trimflag = utils::logical(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"add") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal read_dump command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "read_dump add", error); if (strcmp(arg[iarg+1],"yes") == 0) addflag = YESADD; else if (strcmp(arg[iarg+1],"no") == 0) addflag = NOADD; else if (strcmp(arg[iarg+1],"true") == 0) addflag = YESADD; else if (strcmp(arg[iarg+1],"false") == 0) addflag = NOADD; else if (strcmp(arg[iarg+1],"keep") == 0) addflag = KEEPADD; - else error->all(FLERR,"Illegal read_dump command"); + else error->all(FLERR,"Unknown read_dump add keyword {}", arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"label") == 0) { - if (iarg+3 > narg) error->all(FLERR,"Illegal read_dump command"); + if (iarg+3 > narg) utils::missing_cmd_args(FLERR, "read_dump label", error); int type = whichtype(arg[iarg+1]); int i; for (i = 0; i < nfield; i++) @@ -1240,20 +1240,20 @@ int ReadDump::fields_and_keywords(int narg, char **arg) fieldlabel[i] = utils::strdup(arg[iarg+2]); iarg += 3; } else if (strcmp(arg[iarg],"scaled") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal read_dump command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "read_dump scaled", error); scaleflag = utils::logical(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"wrapped") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal read_dump command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "read_dump wrapped", error); wrapflag = utils::logical(FLERR,arg[iarg+1],false,lmp); iarg += 2; } else if (strcmp(arg[iarg],"format") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal read_dump command"); + if (iarg+2 > narg) utils::missing_cmd_args(FLERR, "read_dump format", error); delete[] readerstyle; readerstyle = utils::strdup(arg[iarg+1]); iarg += 2; break; - } else error->all(FLERR,"Illegal read_dump command"); + } else error->all(FLERR,"Unknown read_dump keyword: {}",arg[iarg]); } if (multiproc == 0 && multiproc_nfile) From e518637d63b8ba185176004d80fe546ddc02a940 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 22 Oct 2023 20:00:33 -0400 Subject: [PATCH 050/204] avoid invalid escape warnings for regexp expressions with python 3.12 --- doc/utils/sphinx-config/LAMMPSLexer.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/doc/utils/sphinx-config/LAMMPSLexer.py b/doc/utils/sphinx-config/LAMMPSLexer.py index a7ba5d92a8..ee548dc602 100644 --- a/doc/utils/sphinx-config/LAMMPSLexer.py +++ b/doc/utils/sphinx-config/LAMMPSLexer.py @@ -76,12 +76,12 @@ class LAMMPSLexer(RegexLexer): include('conditionals'), include('keywords'), (r'#.*?\n', Comment), - ('"', String, 'string'), - ('\'', String, 'single_quote_string'), + (r'"', String, 'string'), + (r'\'', String, 'single_quote_string'), (r'[0-9]+:[0-9]+(:[0-9]+)?', Number), (r'[0-9]+(\.[0-9]+)?([eE]\-?[0-9]+)?', Number), - ('\$?\(', Name.Variable, 'expression'), - ('\$\{', Name.Variable, 'variable'), + (r'\$?\(', Name.Variable, 'expression'), + (r'\$\{', Name.Variable, 'variable'), (r'[\w_\.\[\]]+', Name), (r'\$[\w_]+', Name.Variable), (r'\s+', Whitespace), @@ -97,21 +97,21 @@ class LAMMPSLexer(RegexLexer): ] , 'variable' : [ - ('[^\}]+', Name.Variable), - ('\}', Name.Variable, '#pop'), + (r'[^\}]+', Name.Variable), + (r'\}', Name.Variable, '#pop'), ], 'string' : [ - ('[^"]+', String), - ('"', String, '#pop'), + (r'[^"]+', String), + (r'"', String, '#pop'), ], 'single_quote_string' : [ - ('[^\']+', String), - ('\'', String, '#pop'), + (r'[^\']+', String), + (r'\'', String, '#pop'), ], 'expression' : [ - ('[^\(\)]+', Name.Variable), - ('\(', Name.Variable, 'expression'), - ('\)', Name.Variable, '#pop'), + (r'[^\(\)]+', Name.Variable), + (r'\(', Name.Variable, 'expression'), + (r'\)', Name.Variable, '#pop'), ], 'modify_cmd' : [ (r'[\w_\-\.\[\]]+', Name.Variable.Identifier), From 22cc6bf0b3f2f864e20352e5fd3e73dae3ef256d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 22 Oct 2023 20:01:23 -0400 Subject: [PATCH 051/204] provide example python code for reading a YAML dump file --- doc/src/Howto_structured_data.rst | 39 +++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/doc/src/Howto_structured_data.rst b/doc/src/Howto_structured_data.rst index 3fe630a120..29c65a7a34 100644 --- a/doc/src/Howto_structured_data.rst +++ b/doc/src/Howto_structured_data.rst @@ -119,6 +119,45 @@ for example :doc:`dump yaml ` or :doc:`fix ave/time ` Depending on the kind of data being written, organization of the data or the specific syntax used may change, but the principles are very similar and all files should be readable with a suitable YAML parser. +A simple example for this is given below: + +.. code-block:: python + + import yaml + try: + from yaml import CSafeLoader as YamlLoader + except ImportError: + from yaml import SafeLoader as YamlLoader + + timesteps = [] + with open("dump.yaml", "r") as f: + data = yaml.load_all(f, Loader=YamlLoader) + + for d in data: + print('Processing timestep %d' % d['timestep']) + timesteps.append(d) + + print('Read %d timesteps from yaml dump' % len(timesteps)) + print('Second timestep: ', timesteps[1]['timestep']) + print('Box info: x: ' , timesteps[1]['box'][0], ' y:', timesteps[1]['box'][1], ' z:',timesteps[1]['box'][2]) + print('First 5 per-atom columns: ', timesteps[1]['keywords'][0:5]) + print('Corresponding 10th atom data: ', timesteps[1]['data'][9][0:5]) + +The corresponding output for a YAML dump command added to the "melt" example is: + +.. parsed-literal:: + + Processing timestep 0 + Processing timestep 50 + Processing timestep 100 + Processing timestep 150 + Processing timestep 200 + Processing timestep 250 + Read 6 timesteps from yaml dump + Second timestep: 50 + Box info: x: [0, 16.795961913825074] y: [0, 16.795961913825074] z: [0, 16.795961913825074] + First 5 per-atom columns: ['id', 'type', 'x', 'y', 'z'] + Corresponding 10th atom data: [10, 1, 4.43828, 0.968481, 0.108555] Processing scalar data with Python ---------------------------------- From 1e2416dfcca179db923e6eb081ed880d898198e2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 23 Oct 2023 14:57:27 -0400 Subject: [PATCH 052/204] make sure liblinalg is built before linking phana --- tools/phonon/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/phonon/CMakeLists.txt b/tools/phonon/CMakeLists.txt index 4cf70d57f3..37b7456252 100644 --- a/tools/phonon/CMakeLists.txt +++ b/tools/phonon/CMakeLists.txt @@ -121,5 +121,9 @@ if(USE_SPGLIB) target_link_libraries(phana PRIVATE SPGLIB::SYMSPG) endif() +# add dependency when using local linear algebra lib +if(NOT LAPACK_FOUND OR NOT BLAS_FOUND OR USE_INTERNAL_LINALG) + add_dependencies(phana linalg) +endif() target_link_libraries(phana PRIVATE tricubic ${LAPACK_LIBRARIES}) install(TARGETS phana EXPORT LAMMPS_Targets DESTINATION ${CMAKE_INSTALL_BINDIR}) From ceed4c7db8b6e20ba1dee0d75cd9278c4a72ea55 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 24 Oct 2023 07:51:54 -0400 Subject: [PATCH 053/204] for consistency with CMake 3.12+ we should set Python_EXECUTABLE instead of PYTHON_EXECUTABLE --- cmake/CMakeLists.txt | 24 ++++++++++++------------ cmake/Modules/Packages/PYTHON.cmake | 2 +- doc/src/Build_extras.rst | 4 ++-- doc/src/Howto_pylammps.rst | 2 +- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index b075fc8f8d..95d738d279 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -159,17 +159,20 @@ endif() ######################################################################## # User input options # ######################################################################## -# set path to python interpreter and thus enforcing python version when -# in a virtual environment and PYTHON_EXECUTABLE is not set on command line -if(DEFINED ENV{VIRTUAL_ENV} AND NOT PYTHON_EXECUTABLE) - if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") - set(PYTHON_EXECUTABLE "$ENV{VIRTUAL_ENV}/Scripts/python.exe") - else() - set(PYTHON_EXECUTABLE "$ENV{VIRTUAL_ENV}/bin/python") - endif() +# backward compatibility with CMake before 3.12 and older LAMMPS documentation +if (PYTHON_EXECUTABLE) set(Python_EXECUTABLE "${PYTHON_EXECUTABLE}") +endif() +# set path to python interpreter and thus enforcing python version when +# in a virtual environment and Python_EXECUTABLE is not set on command line +if(DEFINED ENV{VIRTUAL_ENV} AND NOT Python_EXECUTABLE) + if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + set(Python_EXECUTABLE "$ENV{VIRTUAL_ENV}/Scripts/python.exe") + else() + set(Python_EXECUTABLE "$ENV{VIRTUAL_ENV}/bin/python") + endif() message(STATUS "Running in virtual environment: $ENV{VIRTUAL_ENV}\n" - " Setting Python interpreter to: ${PYTHON_EXECUTABLE}") + " Setting Python interpreter to: ${Python_EXECUTABLE}") endif() set(LAMMPS_MACHINE "" CACHE STRING "Suffix to append to lmp binary (WON'T enable any features automatically") @@ -794,9 +797,6 @@ install( ############################################################################### if(BUILD_SHARED_LIBS) # backward compatibility - if(PYTHON_EXECUTABLE) - set(Python_EXECUTABLE ${PYTHON_EXECUTABLE}) - endif() find_package(Python COMPONENTS Interpreter) if(BUILD_IS_MULTI_CONFIG) set(MY_BUILD_DIR ${CMAKE_BINARY_DIR}/$) diff --git a/cmake/Modules/Packages/PYTHON.cmake b/cmake/Modules/Packages/PYTHON.cmake index 59260e39d5..e05edadbf3 100644 --- a/cmake/Modules/Packages/PYTHON.cmake +++ b/cmake/Modules/Packages/PYTHON.cmake @@ -1,6 +1,6 @@ if(NOT Python_INTERPRETER) - # backward compatibility + # backward compatibility with CMake before 3.12 and older LAMMPS documentation if(PYTHON_EXECUTABLE) set(Python_EXECUTABLE ${PYTHON_EXECUTABLE}) endif() diff --git a/doc/src/Build_extras.rst b/doc/src/Build_extras.rst index 393d7e1c20..7a7b5cf0d5 100644 --- a/doc/src/Build_extras.rst +++ b/doc/src/Build_extras.rst @@ -1056,12 +1056,12 @@ additional details. .. code-block:: bash - -D PYTHON_EXECUTABLE=path # path to Python executable to use + -D Python_EXECUTABLE=path # path to Python executable to use Without this setting, CMake will guess the default Python version on your system. To use a different Python version, you can either create a virtualenv, activate it and then run cmake. Or you can - set the PYTHON_EXECUTABLE variable to specify which Python + set the Python_EXECUTABLE variable to specify which Python interpreter should be used. Note note that you will also need to have the development headers installed for this version, e.g. python2-devel. diff --git a/doc/src/Howto_pylammps.rst b/doc/src/Howto_pylammps.rst index 2db61cd5bb..bce37d5ac7 100644 --- a/doc/src/Howto_pylammps.rst +++ b/doc/src/Howto_pylammps.rst @@ -133,7 +133,7 @@ to the location in the virtual environment with: .. code-block:: bash - cmake . -DPYTHON_EXECUTABLE=$(which python) + cmake . -DPython_EXECUTABLE=$(which python) # install LAMMPS package in virtualenv (testing) make install-python From 88644306cd93b3b541837c66bcc7d8e866261334 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 24 Oct 2023 10:39:19 -0400 Subject: [PATCH 054/204] add sanity check on path to LAMMPS python package folder --- python/install.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/python/install.py b/python/install.py index 853479e9f6..c3944bab3a 100644 --- a/python/install.py +++ b/python/install.py @@ -39,6 +39,12 @@ if args.package: sys.exit(1) else: args.package = os.path.abspath(args.package) + if ((os.path.basename(args.package) != "lammps") + and ((os.path.basename(os.path.dirname(args.package)) != "python"))): + print("\nERROR: LAMMPS package folder path %s does not end in %s\n" + % (args.package, os.path.join("python", "lammps"))) + parser.print_help() + sys.exit(1) if args.lib: if not os.path.exists(args.lib): From 5f2f120b4bc6de909d2d5b91e34ab85ed9a158e0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 24 Oct 2023 10:39:49 -0400 Subject: [PATCH 055/204] improve help and error messages --- python/install.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/python/install.py b/python/install.py index c3944bab3a..fd9f95f1bf 100644 --- a/python/install.py +++ b/python/install.py @@ -18,7 +18,7 @@ parser = ArgumentParser(prog='install.py', description='LAMMPS python package installer script') parser.add_argument("-p", "--package", required=True, - help="path to the LAMMPS Python package") + help="path to the LAMMPS Python package folder") parser.add_argument("-l", "--lib", required=True, help="path to the compiled LAMMPS shared library") parser.add_argument("-n", "--noinstall", action="store_true", default=False, @@ -34,7 +34,7 @@ args = parser.parse_args() if args.package: if not os.path.exists(args.package): - print("ERROR: LAMMPS package folder %s does not exist" % args.package) + print("\nERROR: LAMMPS package folder %s does not exist\n" % args.package) parser.print_help() sys.exit(1) else: @@ -48,7 +48,7 @@ if args.package: if args.lib: if not os.path.exists(args.lib): - print("ERROR: LAMMPS shared library %s does not exist" % args.lib) + print("\nERROR: LAMMPS shared library %s does not exist\n" % args.lib) parser.print_help() sys.exit(1) else: @@ -56,7 +56,7 @@ if args.lib: if args.wheeldir: if not os.path.exists(args.wheeldir): - print("ERROR: directory %s to store the wheel does not exist" % args.wheeldir) + print("\nERROR: directory %s to store the wheel does not exist\n" % args.wheeldir) parser.print_help() sys.exit(1) else: @@ -64,7 +64,7 @@ if args.wheeldir: if args.versionfile: if not os.path.exists(args.versionfile): - print("ERROR: LAMMPS version file at %s does not exist" % args.versionfile) + print("\nERROR: LAMMPS version file at %s does not exist\n" % args.versionfile) parser.print_help() sys.exit(1) else: From bd0c1795b47b741148d331c489a18daf28130396 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Tue, 24 Oct 2023 10:33:55 -0600 Subject: [PATCH 056/204] Fix harmless compiler warnings --- src/KOKKOS/kokkos.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 84a8f59dd0..be8823d8e2 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -137,13 +137,13 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) int set_flag = 0; char *str; - if (str = getenv("SLURM_LOCALID")) { + if ((str = getenv("SLURM_LOCALID"))) { int local_rank = atoi(str); device = local_rank % ngpus; if (device >= skip_gpu) device++; set_flag = 1; } - if (str = getenv("FLUX_TASK_LOCAL_ID")) { + if ((str = getenv("FLUX_TASK_LOCAL_ID"))) { if (ngpus > 0) { int local_rank = atoi(str); device = local_rank % ngpus; @@ -151,7 +151,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) set_flag = 1; } } - if (str = getenv("MPT_LRANK")) { + if ((str = getenv("MPT_LRANK"))) { if (ngpus > 0) { int local_rank = atoi(str); device = local_rank % ngpus; @@ -159,7 +159,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) set_flag = 1; } } - if (str = getenv("MV2_COMM_WORLD_LOCAL_RANK")) { + if ((str = getenv("MV2_COMM_WORLD_LOCAL_RANK"))) { if (ngpus > 0) { int local_rank = atoi(str); device = local_rank % ngpus; @@ -167,7 +167,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) set_flag = 1; } } - if (str = getenv("OMPI_COMM_WORLD_LOCAL_RANK")) { + if ((str = getenv("OMPI_COMM_WORLD_LOCAL_RANK"))) { if (ngpus > 0) { int local_rank = atoi(str); device = local_rank % ngpus; @@ -175,7 +175,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) set_flag = 1; } } - if (str = getenv("PMI_LOCAL_RANK")) { + if ((str = getenv("PMI_LOCAL_RANK"))) { if (ngpus > 0) { int local_rank = atoi(str); device = local_rank % ngpus; From c6c174469ca9c9a8f29ac1ed639b1536a742de7b Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Tue, 24 Oct 2023 12:32:02 -0600 Subject: [PATCH 057/204] Replace deprecated Kokkos code --- src/KOKKOS/transpose_helper_kokkos.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/KOKKOS/transpose_helper_kokkos.h b/src/KOKKOS/transpose_helper_kokkos.h index b09639c451..e3a4d86f9a 100644 --- a/src/KOKKOS/transpose_helper_kokkos.h +++ b/src/KOKKOS/transpose_helper_kokkos.h @@ -33,8 +33,8 @@ struct TransposeHelperKokkos { using t_view_src = t_view_src_; static_assert(std::is_same_v, "Value types do not match"); - static_assert(t_view_dst::Rank == 2, "Destination view rank != 2"); - static_assert(t_view_src::Rank == 2, "Source view rank != 2"); + static_assert(t_view_dst::rank == 2, "Destination view rank != 2"); + static_assert(t_view_src::rank == 2, "Source view rank != 2"); using dst_layout = typename t_view_dst::traits::array_layout; using src_layout = typename t_view_src::traits::array_layout; From 63e674cc3efcdbee590f7d8140626c7b4b056f08 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 24 Oct 2023 18:37:29 -0400 Subject: [PATCH 058/204] simplify and remove redundant or dead code --- src/SPIN/fix_nve_spin.cpp | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/src/SPIN/fix_nve_spin.cpp b/src/SPIN/fix_nve_spin.cpp index 297e81b424..bfc1543eed 100644 --- a/src/SPIN/fix_nve_spin.cpp +++ b/src/SPIN/fix_nve_spin.cpp @@ -58,8 +58,6 @@ static const char cite_fix_nve_spin[] = "doi={10.1016/j.jcp.2018.06.042}\n" "}\n\n"; -enum{NONE}; - /* ---------------------------------------------------------------------- */ FixNVESpin::FixNVESpin(LAMMPS *lmp, int narg, char **arg) : @@ -74,7 +72,6 @@ FixNVESpin::FixNVESpin(LAMMPS *lmp, int narg, char **arg) : if (narg < 4) error->all(FLERR,"Illegal fix/nve/spin command"); time_integrate = 1; - sector_flag = NONE; lattice_flag = 1; nlocal_max = 0; npairs = 0; @@ -88,14 +85,9 @@ FixNVESpin::FixNVESpin(LAMMPS *lmp, int narg, char **arg) : if (atom->map_style == Atom::MAP_NONE) error->all(FLERR,"Fix nve/spin requires an atom map, see atom_modify"); - // defining sector_flag + // define sector_flag - int nprocs_tmp = comm->nprocs; - if (nprocs_tmp == 1) { - sector_flag = 0; - } else if (nprocs_tmp >= 1) { - sector_flag = 1; - } else error->all(FLERR,"Illegal fix/nve/spin command"); + sector_flag = (comm->nprocs > 1) ? 1 : 0; // defining lattice_flag @@ -121,11 +113,6 @@ FixNVESpin::FixNVESpin(LAMMPS *lmp, int narg, char **arg) : if (!atom->sp_flag) error->all(FLERR,"Fix nve/spin requires atom/spin style"); - // check if sector_flag is correctly defined - - if (sector_flag == 0 && nprocs_tmp > 1) - error->all(FLERR,"Illegal fix/nve/spin command"); - // initialize the magnetic interaction flags pair_spin_flag = 0; @@ -378,8 +365,8 @@ void FixNVESpin::initial_integrate(int /*vflag*/) } } } - } else if (sector_flag == 0) { // serial seq. update - comm->forward_comm(); // comm. positions of ghost atoms + } else { // serial seq. update + comm->forward_comm(); // comm. positions of ghost atoms for (int i = 0; i < nlocal; i++) { // advance quarter s for nlocal if (mask[i] & groupbit) { ComputeInteractionsSpin(i); @@ -392,7 +379,7 @@ void FixNVESpin::initial_integrate(int /*vflag*/) AdvanceSingleSpin(i); } } - } else error->all(FLERR,"Illegal fix nve/spin command"); + } // update x for all particles @@ -610,7 +597,7 @@ void FixNVESpin::sectoring() nsectors = sec[0]*sec[1]*sec[2]; - if (sector_flag == 1 && nsectors != 8) + if (sector_flag && (nsectors != 8)) error->all(FLERR,"Illegal sectoring operation"); rsec[0] = rsx; @@ -694,7 +681,7 @@ void FixNVESpin::AdvanceSingleSpin(int i) // comm. sp[i] to atoms with same tag (for serial algo) - if (sector_flag == 0) { + if (!sector_flag) { if (sametag[i] >= 0) { j = sametag[i]; while (j >= 0) { From 8abe52c613decc5ae1acf2fd2d32247cde8ad64f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 24 Oct 2023 18:59:39 -0400 Subject: [PATCH 059/204] simplify/modernize access to computes and fixes and check dynamics casts --- src/BOCS/fix_bocs.cpp | 49 +++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/src/BOCS/fix_bocs.cpp b/src/BOCS/fix_bocs.cpp index 17bb1af002..d35facdc5a 100644 --- a/src/BOCS/fix_bocs.cpp +++ b/src/BOCS/fix_bocs.cpp @@ -487,33 +487,31 @@ void FixBocs::init() // ensure no conflict with fix deform - if (pstat_flag) - { - for (int i = 0; i < modify->nfix; i++) - if (strcmp(modify->fix[i]->style,"deform") == 0) { - int *dimflag = (dynamic_cast(modify->fix[i]))->dimflag; + if (pstat_flag) { + for (auto &ifix : modify->get_fix_by_style("^deform")) { + auto deform = dynamic_cast(ifix); + if (deform) { + int *dimflag = deform->dimflag; if ((p_flag[0] && dimflag[0]) || (p_flag[1] && dimflag[1]) || (p_flag[2] && dimflag[2]) || (p_flag[3] && dimflag[3]) || (p_flag[4] && dimflag[4]) || (p_flag[5] && dimflag[5])) - error->all(FLERR,"Cannot use fix bocs and fix deform on " - "same component of stress tensor"); + error->all(FLERR,"Cannot use fix bocs and fix deform on same component of stress tensor"); } + } } // set temperature and pressure ptrs - int icompute = modify->find_compute(id_temp); - if (icompute < 0) - error->all(FLERR,"Temperature ID for fix bocs does not exist"); - temperature = modify->compute[icompute]; + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) + error->all(FLERR,"Temperature compute ID {} for fix bocs does not exist", id_temp); if (temperature->tempbias) which = BIAS; else which = NOBIAS; if (pstat_flag) { - icompute = modify->find_compute(id_press); - if (icompute < 0) - error->all(FLERR,"Pressure ID for fix bocs does not exist"); - pressure = modify->compute[icompute]; + pressure = modify->get_compute_by_id(id_press); + if (!pressure) + error->all(FLERR,"Pressure compute ID {} for fix bocs does not exist", id_press); } @@ -521,23 +519,21 @@ void FixBocs::init() { if (p_match_flag) // MRD NJD { - if (pressure) + auto pressure_bocs = dynamic_cast(pressure); + if (pressure_bocs) { if (p_basis_type == BASIS_ANALYTIC) { - (dynamic_cast(pressure))->send_cg_info(p_basis_type, - N_p_match, p_match_coeffs, N_mol, vavg); + pressure_bocs->send_cg_info(p_basis_type, N_p_match, p_match_coeffs, N_mol, vavg); } else if (p_basis_type == BASIS_LINEAR_SPLINE || p_basis_type == BASIS_CUBIC_SPLINE) { - (dynamic_cast(pressure))->send_cg_info(p_basis_type, - splines, spline_length); + pressure_bocs->send_cg_info(p_basis_type, splines, spline_length); } } else { - error->all(FLERR,"Unable to find pressure. Are you sure you included" - " the compute bocsPress and fix_modify commands?"); + error->all(FLERR,"Unable to find compatible pressure compute"); } } } @@ -591,9 +587,12 @@ void FixBocs::init() else kspace_flag = 0; if (utils::strmatch(update->integrate_style,"^respa")) { - nlevels_respa = (dynamic_cast(update->integrate))->nlevels; - step_respa = (dynamic_cast(update->integrate))->step; - dto = 0.5*step_respa[0]; + auto respa = dynamic_cast(update->integrate); + if (respa) { + nlevels_respa = respa->nlevels; + step_respa = respa->step; + dto = 0.5*step_respa[0]; + } } // detect if any rigid fixes exist so rigid bodies move when box is remapped From 975cc9a0522f6d622b004af215721e584793c95e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 24 Oct 2023 19:05:48 -0400 Subject: [PATCH 060/204] simplify, avoid division by zero --- src/BODY/pair_body_rounded_polyhedron.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/BODY/pair_body_rounded_polyhedron.cpp b/src/BODY/pair_body_rounded_polyhedron.cpp index 9425707ef1..e261ff14d3 100644 --- a/src/BODY/pair_body_rounded_polyhedron.cpp +++ b/src/BODY/pair_body_rounded_polyhedron.cpp @@ -1699,9 +1699,10 @@ void PairBodyRoundedPolyhedron::rescale_cohesive_forces(double** x, num_unique_contacts++; } - xc[0] /= (double)num_unique_contacts; - xc[1] /= (double)num_unique_contacts; - xc[2] /= (double)num_unique_contacts; + const double dble_unique_contacts = (num_unique_contacts > 0) ? (double) num_unique_contacts : 1.0; + xc[0] /= dble_unique_contacts; + xc[1] /= dble_unique_contacts; + xc[2] /= dble_unique_contacts; contact_area = 0.0; for (int m = 0; m < num_contacts; m++) { @@ -1711,7 +1712,7 @@ void PairBodyRoundedPolyhedron::rescale_cohesive_forces(double** x, dz = contact_list[m].xi[2] - xc[2]; contact_area += (dx*dx + dy*dy + dz*dz); } - contact_area *= (MY_PI/(double)num_unique_contacts); + contact_area *= (MY_PI/dble_unique_contacts); } double j_a = contact_area / (num_unique_contacts * A_ua); From c123c7058b988c29ca44ec02492d90ec2a3de853 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 24 Oct 2023 19:08:00 -0400 Subject: [PATCH 061/204] remove dead code --- src/CG-DNA/mf_oxdna.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/CG-DNA/mf_oxdna.h b/src/CG-DNA/mf_oxdna.h index c583abf3ab..11995ee394 100644 --- a/src/CG-DNA/mf_oxdna.h +++ b/src/CG-DNA/mf_oxdna.h @@ -208,7 +208,6 @@ inline double MFOxdna::DF5(double x, double a, double x_ast, double b, double x_ } else { return 0.0; } - return 0; } /* ---------------------------------------------------------------------- From e5160b279a034db5b88e68e4f43922e0a46ac50f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 24 Oct 2023 23:12:17 -0400 Subject: [PATCH 062/204] avoid static code analysis warnings --- src/ASPHERE/compute_erotate_asphere.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/ASPHERE/compute_erotate_asphere.cpp b/src/ASPHERE/compute_erotate_asphere.cpp index 82249a1db5..95a323b4e3 100644 --- a/src/ASPHERE/compute_erotate_asphere.cpp +++ b/src/ASPHERE/compute_erotate_asphere.cpp @@ -47,8 +47,7 @@ void ComputeERotateAsphere::init() avec_line = dynamic_cast(atom->style_match("line")); avec_tri = dynamic_cast(atom->style_match("tri")); if (!avec_ellipsoid && !avec_line && !avec_tri) - error->all(FLERR,"Compute erotate/asphere requires " - "atom style ellipsoid or line or tri"); + error->all(FLERR,"Compute erotate/asphere requires atom style ellipsoid or line or tri"); // check that all particles are finite-size // no point particles allowed, spherical is OK @@ -79,12 +78,13 @@ double ComputeERotateAsphere::compute_scalar() { invoked_scalar = update->ntimestep; - AtomVecEllipsoid::Bonus *ebonus; + AtomVecEllipsoid::Bonus *ebonus = nullptr; if (avec_ellipsoid) ebonus = avec_ellipsoid->bonus; - AtomVecLine::Bonus *lbonus; + AtomVecLine::Bonus *lbonus = nullptr; if (avec_line) lbonus = avec_line->bonus; - AtomVecTri::Bonus *tbonus; + AtomVecTri::Bonus *tbonus = nullptr; if (avec_tri) tbonus = avec_tri->bonus; + int *ellipsoid = atom->ellipsoid; int *line = atom->line; int *tri = atom->tri; @@ -98,14 +98,14 @@ double ComputeERotateAsphere::compute_scalar() // no point particles since divide by inertia double length; - double *shape,*quat; - double wbody[3],inertia[3]; + double *shape, *quat; + double wbody[3], inertia[3]; double rot[3][3]; double erotate = 0.0; for (int i = 0; i < nlocal; i++) if (mask[i] & groupbit) { - if (ellipsoid && ellipsoid[i] >= 0) { + if (ellipsoid && ebonus && (ellipsoid[i] >= 0)) { shape = ebonus[ellipsoid[i]].shape; quat = ebonus[ellipsoid[i]].quat; @@ -126,13 +126,13 @@ double ComputeERotateAsphere::compute_scalar() erotate += inertia[0]*wbody[0]*wbody[0] + inertia[1]*wbody[1]*wbody[1] + inertia[2]*wbody[2]*wbody[2]; - } else if (line && line[i] >= 0) { + } else if (line && lbonus && (line[i] >= 0)) { length = lbonus[line[i]].length; erotate += (omega[i][0]*omega[i][0] + omega[i][1]*omega[i][1] + omega[i][2]*omega[i][2]) * length*length*rmass[i] / 12.0; - } else if (tri && tri[i] >= 0) { + } else if (tri && tbonus && (tri[i] >= 0)) { // principal moments of inertia From 020ef70300fd1ecc54a1e865ddcff807de6c96ad Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 24 Oct 2023 23:18:24 -0400 Subject: [PATCH 063/204] avoid double free on B array --- src/KSPACE/pppm_disp.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/KSPACE/pppm_disp.cpp b/src/KSPACE/pppm_disp.cpp index 7ab76ad62a..72424a7330 100644 --- a/src/KSPACE/pppm_disp.cpp +++ b/src/KSPACE/pppm_disp.cpp @@ -1374,6 +1374,7 @@ void PPPMDisp::init_coeffs() if (nsplit == 1) { delete[] B; + B = nullptr; function[3] = 0; function[2] = 0; function[1] = 1; @@ -1387,11 +1388,13 @@ void PPPMDisp::init_coeffs() //function[3] = 1; //function[2] = 0; delete[] B; // remove this when un-comment previous 2 lines + B = nullptr; } if (function[2] && (nsplit > 6)) { if (me == 0) utils::logmesg(lmp," Using 7 structure factors\n"); delete[] B; + B = nullptr; } if (function[3]) { From 20b386fc1ab04520650346fbc3b65af93d45b7d1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 25 Oct 2023 06:12:44 -0400 Subject: [PATCH 064/204] update CONTRIBUTING guidelines posted on GitHub --- .github/CONTRIBUTING.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index c7abfebf3a..891d1ad5e5 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -5,9 +5,9 @@ Thank you for considering to contribute to the LAMMPS software project. The following is a set of guidelines as well as explanations of policies and work flows for contributing to the LAMMPS molecular dynamics software project. These guidelines focus on submitting issues or pull requests on the LAMMPS GitHub project. Thus please also have a look at: -* [The guide for submitting new features in the LAMMPS manual](https://www.lammps.org/doc/Modify_contribute.html) -* [The guide on programming style and requirement in the LAMMPS manual](https://www.lammps.org/doc/Modify_style.html) -* [The GitHub tutorial in the LAMMPS manual](http://lammps.sandia.gov/doc/Howto_github.html) +* [The guide for submitting new features in the LAMMPS manual](https://docs.lammps.org/Modify_contribute.html) +* [The guide on programming style and requirement in the LAMMPS manual](https://docs.lammps.org/Modify_requirements.html) +* [The GitHub tutorial in the LAMMPS manual](http://docs.lammps.org/Howto_github.html) ## Table of Contents @@ -27,17 +27,17 @@ __ ## I don't want to read this whole thing I just have a question! -> **Note:** Please do not file an issue to ask a general question about LAMMPS, its features, how to use specific commands, or how perform simulations or analysis in LAMMPS. Instead post your question to either the ['lammps-users' mailing list](https://lammps.sandia.gov/mail.html) or the [LAMMPS Material Science Discourse forum](https://matsci.org/lammps). You do not need to be subscribed to post to the list (but a mailing list subscription avoids having your post delayed until it is approved by a mailing list moderator). Most posts to the mailing list receive a response within less than 24 hours. Before posting to the mailing list, please read the [mailing list guidelines](https://lammps.sandia.gov/guidelines.html). Following those guidelines will help greatly to get a helpful response. Always mention which LAMMPS version you are using. The LAMMPS forum was recently created as part of a larger effort to build a materials science community and have discussions not just about using LAMMPS. Thus the forum may be also used for discussions that would be off-topic for the mailing list. Those will just have to be posted to a more general category. +> **Note:** Please do not file an issue to ask a general question about LAMMPS, its features, how to use specific commands, or how perform simulations or analysis in LAMMPS. Instead post your question to the [LAMMPS Material Science Discourse forum](https://matsci.org/lammps). Before posting to the forum, please read the general [guidelines](https://www.lammps.org/guidelines.html) and the forum specific [suggestions](https://matsci.org/t/please-read-this-first-guidelines-and-suggestions-for-posting-lammps-questions/49913). Following those guidelines and suggestions will help greatly to get a helpful response. *Always* mention which LAMMPS version you are using. The MatSci website may be also used for discussions that would be off-topic for the LAMMPS categories. Those will just have to be posted to a different category. ## How Can I Contribute? There are several ways how you can actively contribute to the LAMMPS project: you can discuss compiling and using LAMMPS, and solving LAMMPS related problems with other LAMMPS users on the lammps-users mailing list or the forum, you can report bugs or suggest enhancements by creating issues on GitHub (or posting them to the lammps-users mailing list or posting in the LAMMPS Materials Science Discourse forum), and you can contribute by submitting pull requests on GitHub or e-mail your code -to one of the [LAMMPS core developers](https://lammps.sandia.gov/authors.html). As you may see from the aforementioned developer page, the LAMMPS software package includes the efforts of a very large number of contributors beyond the principal authors and maintainers. +to one of the [LAMMPS core developers](https://www.lammps.org/authors.html). As you may see from the aforementioned developer page, the LAMMPS software package includes the efforts of a very large number of contributors beyond the principal authors and maintainers. ### Discussing How To Use LAMMPS The LAMMPS mailing list is hosted at SourceForge. The mailing list began in 2005, and now includes tens of thousands of messages in thousands of threads. LAMMPS developers try to respond to posted questions in a timely manner, but there are no guarantees. Please consider that people live in different timezone and may not have time to answer e-mails outside of their work hours. -You can post to list by sending your email to lammps-users at lists.sourceforge.net (no subscription required), but before posting, please read the [mailing list guidelines](https://lammps.sandia.gov/guidelines.html) to maximize your chances to receive a helpful response. +You can post to list by sending your email to lammps-users at lists.sourceforge.net (no subscription required), but before posting, please read the [mailing list guidelines](https://www.lammps.org/guidelines.html) to maximize your chances to receive a helpful response. Anyone can browse/search previous questions/answers in the archives. You do not have to subscribe to the list to post questions, receive answers (to your questions), or browse/search the archives. You **do** need to subscribe to the list if you want emails for **all** the posts (as individual messages or in digest form), or to answer questions yourself. Feel free to sign up and help us out! Answering questions from fellow LAMMPS users is a great way to pay back the community for providing you a useful tool for free, and to pass on the advice you have received yourself to others. It improves your karma and helps you understand your own research better. @@ -47,7 +47,7 @@ The LAMMPS Materials Science Discourse forum was created recently to facilitate ### Reporting Bugs -While developers writing code for LAMMPS are careful to test their code, LAMMPS is such a large and complex software, that it is impossible to test for all combinations of features under all normal and not so normal circumstances. Thus bugs do happen, and if you suspect, that you have encountered one, please try to document it and report it as an [Issue](https://github.com/lammps/lammps/issues) on the LAMMPS GitHub project web page. However, before reporting a bug, you need to check whether this is something that may have already been corrected. The [Latest Features and Bug Fixes in LAMMPS](https://lammps.sandia.gov/bug.html) web page lists all significant changes to LAMMPS over the years. It also tells you what the current latest development version of LAMMPS is, and you should test whether your issue still applies to that version. +While developers writing code for LAMMPS are careful to test their code, LAMMPS is such a large and complex software, that it is impossible to test for all combinations of features under all normal and not so normal circumstances. Thus bugs do happen, and if you suspect, that you have encountered one, please try to document it and report it as an [Issue](https://github.com/lammps/lammps/issues) on the LAMMPS GitHub project web page. However, before reporting a bug, you need to check whether this is something that may have already been corrected. The [Latest Features and Bug Fixes in LAMMPS](https://www.lammps.org/bug.html) web page lists all significant changes to LAMMPS over the years. It also tells you what the current latest development version of LAMMPS is, and you should test whether your issue still applies to that version. When you click on the green "New Issue" button, you will be provided with a text field, where you can enter your message. That text field with contain a template with several headlines and some descriptions. Keep the headlines that are relevant to your reported potential bug and replace the descriptions with the information as suggested by the descriptions. You can also attach small text files (please add the file name extension `.txt` or it will be rejected), images, or small compressed text files (using gzip, do not use RAR or 7-ZIP or similar tools that are uncommon outside of Windows machines). In many cases, bugs are best illustrated by providing a small input deck (do **not** attach your entire production input, but remove everything that is not required to reproduce the issue, and scale down your system size, that the resulting calculation runs fast and can be run on small desktop quickly). @@ -65,9 +65,9 @@ To be able to submit an issue on GitHub, you have to register for an account (fo We encourage users to submit new features or modifications for LAMMPS. Instructions, guidelines, requirements, and recommendations are in the following sections of the LAMMPS manual: -* [The guide for submitting new features in the LAMMPS manual](https://lammps.sandia.gov/doc/Modify_contribute.html) -* [The guide on programming style and requirement in the LAMMPS manual](https://lammps.sandia.gov/doc/Modify_contribute.html) -* [The GitHub tutorial in the LAMMPS manual](http://lammps.sandia.gov/doc/Howto_github.html) +* [The guide for submitting new features in the LAMMPS manual](https://docs.lammps.org/Modify_contribute.html) +* [The guide on programming style and requirement in the LAMMPS manual](https://docs.lammps.org/Modify_requirements.html) +* [The GitHub tutorial in the LAMMPS manual](http://docs.lammps.org/Howto_github.html) ## GitHub Workflows @@ -85,7 +85,7 @@ For bug reports, the next step is that one of the core LAMMPS developers will se ### Pull Requests Pull requests are the **only** way that changes get made to the LAMMPS distribution. So also the LAMMPS core developers will submit pull requests for their own changes and discuss them on GitHub. Thus if you submit a pull request it will be treated in a similar fashion. When you submit a pull request you may opt to submit a "Draft" pull request. That means your changes are visible and will be subject to testing, but reviewers will not be (auto-)assigned and comments will take into account that this is not complete. On the other hand, this is a perfect way to ask the LAMMPS developers for comments on non-obvious changes and get feedback and possible suggestions for improvements or recommendations about what to avoid. -Immediately after the submission, the LAMMPS continuing integration server at ci.lammps.org will download your submitted branch and perform a number of tests: it will tests whether it compiles cleanly under various conditions, it will also do a check on whether your included documentation translates cleanly and run some unit tests and other checks. Whether these tests are successful or fail will be recorded. If a test fails, please inspect the corresponding output on the CI server and take the necessary steps, if needed, so that the code can compile cleanly again. The test will be re-run each time the pull request is updated with a push to the remote branch on GitHub. If you are unsure about what you need to change, ask a question in the discussion area of the pull request. +Immediately after the submission, the LAMMPS continuing integration server at https://ci.lammps.org will download your submitted branch and perform a number of tests: it will tests whether it compiles cleanly under various conditions, it will also do a check on whether your included documentation translates cleanly and run some unit tests and other checks. Whether these tests are successful or fail will be recorded. If a test fails, please inspect the corresponding output on the CI server and take the necessary steps, if needed, so that the code can compile cleanly again. The test will be re-run each time the pull request is updated with a push to the remote branch on GitHub. If you are unsure about what you need to change, ask a question in the discussion area of the pull request. Next a LAMMPS core developer will self-assign and do an overall technical assessment of the submission. If you submitted a draft pull request, this will not happen unless you mark it "ready for review". If you are not yet invited as a LAMMPS collaborator, and your contribution seems significant, you may also receive an invitation for collaboration on the LAMMPS repository. As part of the assessment, the pull request will be categorized with labels. There are two special labels: `needs_work` (indicates that work from the submitter of the pull request is needed) and `work_in_progress` (indicates, that the assigned LAMMPS developer will make changes, if not done by the contributor who made the submit). You may also receive comments and suggestions on the overall submission or specific details and on occasion specific requests for changes as part of the review. If permitted, also additional changes may be pushed into your pull request branch or a pull request may be filed in your LAMMPS fork on GitHub to include those changes. The LAMMPS developer may then decide to assign the pull request to another developer (e.g. when that developer is more knowledgeable about the submitted feature or enhancement or has written the modified code). It may also happen, that additional developers are requested to provide a review and approve the changes. For submissions, that may change the general behavior of LAMMPS, or where a possibility of unwanted side effects exists, additional tests may be requested by the assigned developer. From 23d4bfe1983847c9f8a3675d30d15abbb72f14f9 Mon Sep 17 00:00:00 2001 From: jbcouli Date: Wed, 25 Oct 2023 11:08:58 -0600 Subject: [PATCH 065/204] reset eflag=0 in fix wall/region --- src/fix_wall_region.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/fix_wall_region.cpp b/src/fix_wall_region.cpp index b243c82d92..da9ee757d9 100644 --- a/src/fix_wall_region.cpp +++ b/src/fix_wall_region.cpp @@ -244,6 +244,7 @@ void FixWallRegion::post_force(int vflag) // initilize ewall after region->prematch(), // so a dynamic region can access last timestep values + eflag = 0; ewall[0] = ewall[1] = ewall[2] = ewall[3] = 0.0; for (i = 0; i < nlocal; i++) From ea744ac8f9369d140be3b26bc9af7afcd844ceed Mon Sep 17 00:00:00 2001 From: jbcouli Date: Wed, 25 Oct 2023 11:17:24 -0600 Subject: [PATCH 066/204] fix typos --- doc/src/fix_ave_chunk.rst | 8 ++++---- src/fix_wall.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/src/fix_ave_chunk.rst b/doc/src/fix_ave_chunk.rst index 3c358c9aa5..adbfb43d72 100644 --- a/doc/src/fix_ave_chunk.rst +++ b/doc/src/fix_ave_chunk.rst @@ -541,10 +541,10 @@ Restrictions Related commands """""""""""""""" -:doc:`compute `, :doc:`fix ave/atom `, `fix -:doc:ave/histo `, :doc:`fix ave/time `, -:doc:`variable `, :doc:`fix ave/correlate -:doc:`, `fix ave/atogrid ` +:doc:`compute `, :doc:`fix ave/atom `, +:doc:`fix ave/histo `, :doc:`fix ave/time `, +:doc:`variable `, :doc:`fix ave/correlate `, +:doc:`fix ave/grid ` Default diff --git a/src/fix_wall.cpp b/src/fix_wall.cpp index 4c4406a34c..c4f3219622 100644 --- a/src/fix_wall.cpp +++ b/src/fix_wall.cpp @@ -344,7 +344,7 @@ void FixWall::post_force(int vflag) v_init(vflag); // energy intialize. - // eflag is used to track whether wall energies have been communitcated. + // eflag is used to track whether wall energies have been communicated. eflag = 0; for (int m = 0; m <= nwall; m++) ewall[m] = 0.0; From bb9f46824795424bb6cc7cbc331d8e20418061cd Mon Sep 17 00:00:00 2001 From: Ben Nebgen Date: Wed, 25 Oct 2023 14:38:28 -0600 Subject: [PATCH 067/204] Added fix to setting pair energies in kokkos --- src/KOKKOS/mliap_unified_kokkos.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/KOKKOS/mliap_unified_kokkos.cpp b/src/KOKKOS/mliap_unified_kokkos.cpp index 612bc42dfe..4c38e4f1d6 100644 --- a/src/KOKKOS/mliap_unified_kokkos.cpp +++ b/src/KOKKOS/mliap_unified_kokkos.cpp @@ -271,8 +271,8 @@ void LAMMPS_NS::update_pair_energy(MLIAPDataKokkosDevice *data, double *eij) { auto d_eatoms = data->eatoms; auto d_pair_i= data->pair_i; - const auto nlistatoms = data->nlistatoms; - Kokkos::parallel_for(nlistatoms, KOKKOS_LAMBDA(int ii){ + const auto nlocal = data->nlocal; + Kokkos::parallel_for(nlocal, KOKKOS_LAMBDA(int ii){ d_eatoms[ii] = 0; }); @@ -281,7 +281,7 @@ void LAMMPS_NS::update_pair_energy(MLIAPDataKokkosDevice *data, double *eij) double e = 0.5 * eij[ii]; // must not count any contribution where i is not a local atom - if (i < nlistatoms) { + if (i < nlocal) { Kokkos::atomic_add(&d_eatoms[i], e); local_sum += e; } From 47dd98dd345aaf2e2536abbd4ac1e3ff71e621c0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 25 Oct 2023 20:38:20 -0400 Subject: [PATCH 068/204] whitespace --- src/KOKKOS/pair_mliap_kokkos.cpp | 2 +- src/ML-IAP/pair_mliap.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/KOKKOS/pair_mliap_kokkos.cpp b/src/KOKKOS/pair_mliap_kokkos.cpp index d991a93420..a735763fb0 100644 --- a/src/KOKKOS/pair_mliap_kokkos.cpp +++ b/src/KOKKOS/pair_mliap_kokkos.cpp @@ -138,7 +138,7 @@ template void PairMLIAPKokkos::allocate() { int n = atom->ntypes; - + memoryKK->destroy_kokkos(k_map, map); memoryKK->destroy_kokkos(k_cutsq, cutsq); memoryKK->destroy_kokkos(k_setflag, setflag); diff --git a/src/ML-IAP/pair_mliap.cpp b/src/ML-IAP/pair_mliap.cpp index 79efc1f156..66e8b848cd 100644 --- a/src/ML-IAP/pair_mliap.cpp +++ b/src/ML-IAP/pair_mliap.cpp @@ -120,7 +120,7 @@ void PairMLIAP::allocate() { allocated = 1; int n = atom->ntypes; - + memory->create(setflag,n+1,n+1,"pair:setflag"); memory->create(cutsq,n+1,n+1,"pair:cutsq"); memory->create(cutghost,n+1,n+1,"pair:cutghost"); From ed4ae0a26c04dec85b29e6c7d551ad599bc06187 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 26 Oct 2023 04:44:05 -0400 Subject: [PATCH 069/204] find more misformatted references in ReST sources --- doc/Makefile | 4 ++++ doc/src/fix_srd.rst | 4 ++-- doc/src/improper_amoeba.rst | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/doc/Makefile b/doc/Makefile index 2a4edc70f3..b652c515e1 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -63,6 +63,7 @@ help: @echo " anchor_check scan for duplicate anchor labels" @echo " style_check check for complete and consistent style lists" @echo " package_check check for complete and consistent package lists" + @echo " role_check check for misformatted role keywords" @echo " spelling spell-check the manual" # ------------------------------------------ @@ -98,6 +99,7 @@ html: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) $(MATHJAX) env LC_ALL=C grep -n '[^ -~]' $(RSTDIR)/*.rst ;\ env LC_ALL=C grep -n ' :[a-z]\+`' $(RSTDIR)/*.rst ;\ env LC_ALL=C grep -n ' `[^`]\+<[a-z][^`]\+`[^_]' $(RSTDIR)/*.rst ;\ + env LC_ALL=C grep -n ':\(ref\|doc\):[^`]' $(RSTDIR)/*.rst ;\ $(PYTHON) $(BUILDDIR)/utils/check-styles.py -s ../src -d src ;\ echo "############################################" ;\ deactivate ;\ @@ -179,6 +181,7 @@ pdf: xmlgen $(VENV) $(SPHINXCONFIG)/conf.py $(ANCHORCHECK) env LC_ALL=C grep -n '[^ -~]' $(RSTDIR)/*.rst ;\ env LC_ALL=C grep -n ' :[a-z]\+`' $(RSTDIR)/*.rst ;\ env LC_ALL=C grep -n ' `[^`]\+<[a-z][^`]\+`[^_]' $(RSTDIR)/*.rst ;\ + env LC_ALL=C grep -n ':\(ref\|doc\):[^`]' $(RSTDIR)/*.rst ;\ $(PYTHON) utils/check-styles.py -s ../src -d src ;\ echo "############################################" ;\ deactivate ;\ @@ -227,6 +230,7 @@ char_check : role_check : @( env LC_ALL=C grep -n ' :[a-z]\+`' $(RSTDIR)/*.rst && exit 1 || : ) @( env LC_ALL=C grep -n ' `[^`]\+<[a-z][^`]\+`[^_]' $(RSTDIR)/*.rst && exit 1 || : ) + @( env LC_ALL=C grep -n ':\(ref\|doc\):[^`]' $(RSTDIR)/*.rst && exit 1 || : ) link_check : $(VENV) html @(\ diff --git a/doc/src/fix_srd.rst b/doc/src/fix_srd.rst index 59044a6e3b..dd080b0d3b 100644 --- a/doc/src/fix_srd.rst +++ b/doc/src/fix_srd.rst @@ -81,10 +81,10 @@ used in conjunction with the SRD model. These 3 papers give more details on how the SRD model is implemented in LAMMPS. :ref:`(Petersen) ` describes pure SRD fluid systems. :ref:`(Bolintineanu1) ` describes models -where pure SRD fluids :ref:interact with boundary walls. +where pure SRD fluids interact with boundary walls. :ref:`(Bolintineanu2) ` describes mixture models where large colloidal particles are solvated by an SRD fluid. See the -``examples/srd`` :ref:directory for sample input scripts. +``examples/srd`` directory for sample input scripts. This fix does two things: diff --git a/doc/src/improper_amoeba.rst b/doc/src/improper_amoeba.rst index 18c7f11080..1a93b0d32a 100644 --- a/doc/src/improper_amoeba.rst +++ b/doc/src/improper_amoeba.rst @@ -68,8 +68,8 @@ for more info. Related commands """""""""""""""" -:doc:`improper_coeff `, `improper_harmonic -:doc:` +:doc:`improper_coeff `, +:doc:`improper_harmonic ` Default """"""" From 1e533d649686c07906310dca9c25400e1d87446d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 26 Oct 2023 12:20:47 -0400 Subject: [PATCH 070/204] simplify --- tools/lammps-gui/chartviewer.cpp | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/tools/lammps-gui/chartviewer.cpp b/tools/lammps-gui/chartviewer.cpp index fbd888f1cd..f723562489 100644 --- a/tools/lammps-gui/chartviewer.cpp +++ b/tools/lammps-gui/chartviewer.cpp @@ -300,20 +300,7 @@ void ChartViewer::add_data(int step, double data) if (last_step < step) { last_step = step; series->append(step, data); - auto points = series->points(); - - qreal xmin = 1.0e100; - qreal xmax = -1.0e100; - qreal ymin = 1.0e100; - qreal ymax = -1.0e100; - for (auto &p : points) { - xmin = qMin(xmin, p.x()); - xmax = qMax(xmax, p.x()); - ymin = qMin(ymin, p.y()); - ymax = qMax(ymax, p.y()); - } - xaxis->setRange(xmin, xmax); - yaxis->setRange(ymin, ymax); + reset_zoom(); } } From 22c47a4e1b323ea65567bd1e79a4ba7115c1c43d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 26 Oct 2023 12:21:48 -0400 Subject: [PATCH 071/204] expand x or y range for charts if too small --- tools/lammps-gui/chartviewer.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/tools/lammps-gui/chartviewer.cpp b/tools/lammps-gui/chartviewer.cpp index f723562489..ff53602823 100644 --- a/tools/lammps-gui/chartviewer.cpp +++ b/tools/lammps-gui/chartviewer.cpp @@ -31,6 +31,8 @@ #include #include +#include + using namespace QtCharts; ChartWindow::ChartWindow(const QString &_filename, QWidget *parent) : @@ -86,9 +88,9 @@ int ChartWindow::get_step() const if (charts.size() > 0) { auto *v = charts[0]; if (v) - return (int)v->get_step(v->get_count() - 1); + return (int)v->get_step(v->get_count() - 1); else - return -1; + return -1; } else { return -1; } @@ -320,6 +322,20 @@ void ChartViewer::reset_zoom() ymin = qMin(ymin, p.y()); ymax = qMax(ymax, p.y()); } + + // avoid (nearly) empty ranges + double deltax = fabs((xmax - xmin) / ((xmax == 0.0) ? 1.0 : xmax)); + if (deltax < 1.0e-10) { + xmin -= 100.0*deltax; + xmax += 100.0*deltax; + } + + double deltay = fabs((ymax - ymin) / ((ymax == 0.0) ? 1.0 : ymax)); + if (deltay < 1.0e-10) { + ymin -= 100.0*deltay; + ymax += 100.0*deltay; + } + xaxis->setRange(xmin, xmax); yaxis->setRange(ymin, ymax); } From b6b8884bc65962a524de4cf08c8af0a9d8130117 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 26 Oct 2023 13:58:17 -0400 Subject: [PATCH 072/204] clear data buffer when querying LAMMPS for info, check return values, use symbolic constant --- tools/lammps-gui/codeeditor.cpp | 13 ++++++++----- tools/lammps-gui/imageviewer.cpp | 6 ++++-- tools/lammps-gui/lammpsgui.cpp | 8 ++++---- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/tools/lammps-gui/codeeditor.cpp b/tools/lammps-gui/codeeditor.cpp index e95f576be0..f644b7f5f0 100644 --- a/tools/lammps-gui/codeeditor.cpp +++ b/tools/lammps-gui/codeeditor.cpp @@ -424,12 +424,15 @@ void CodeEditor::setVarNameList() LammpsWrapper *lammps = &qobject_cast(parent())->lammps; int nvar = lammps->id_count("variable"); - char buffer[200]; + constexpr int BUFLEN = 256; + char buffer[BUFLEN]; for (int i = 0; i < nvar; ++i) { - lammps->variable_info(i, buffer, 200); - if (strlen(buffer) == 1) vars << QString("$%1").arg(buffer); - vars << QString("${%1}").arg(buffer); - vars << QString("v_%1").arg(buffer); + memset(buffer, 0, BUFLEN); + if (lammps->variable_info(i, buffer, BUFLEN)) { + if (strlen(buffer) == 1) vars << QString("$%1").arg(buffer); + vars << QString("${%1}").arg(buffer); + vars << QString("v_%1").arg(buffer); + } } #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) diff --git a/tools/lammps-gui/imageviewer.cpp b/tools/lammps-gui/imageviewer.cpp index 00b08f3f47..1d00dd7c1d 100644 --- a/tools/lammps-gui/imageviewer.cpp +++ b/tools/lammps-gui/imageviewer.cpp @@ -215,9 +215,11 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge combo->setToolTip("Select group to display"); combo->setObjectName("group"); int ngroup = lammps->id_count("group"); - char gname[64]; + constexpr int BUFLEN = 256; + char gname[BUFLEN]; for (int i = 0; i < ngroup; ++i) { - lammps->id_name("group", i, gname, 64); + memset(gname, 0, BUFLEN); + lammps->id_name("group", i, gname, BUFLEN); combo->addItem(gname); } diff --git a/tools/lammps-gui/lammpsgui.cpp b/tools/lammps-gui/lammpsgui.cpp index 37b8aebf88..4b0f7370dc 100644 --- a/tools/lammps-gui/lammpsgui.cpp +++ b/tools/lammps-gui/lammpsgui.cpp @@ -58,7 +58,7 @@ #endif static const QString blank(" "); -static constexpr int BUFLEN = 128; +static constexpr int BUFLEN = 256; LammpsGui::LammpsGui(QWidget *parent, const char *filename) : QMainWindow(parent), ui(new Ui::LammpsGui), highlighter(nullptr), capturer(nullptr), @@ -778,11 +778,11 @@ void LammpsGui::logupdate() if (varwindow) { int nvar = lammps.id_count("variable"); - char buffer[200]; + char buffer[BUFLEN]; QString varinfo("\n"); for (int i = 0; i < nvar; ++i) { - lammps.variable_info(i, buffer, 200); - varinfo += buffer; + memset(buffer, 0, BUFLEN); + if (lammps.variable_info(i, buffer, BUFLEN)) varinfo += buffer; } if (nvar == 0) varinfo += " (none) "; From eea3b1a7575fbf4c4da8e2f7f2bfb0c4b510a746 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Thu, 26 Oct 2023 13:59:36 -0600 Subject: [PATCH 073/204] Whitespace --- src/KOKKOS/pair_mliap_kokkos.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KOKKOS/pair_mliap_kokkos.cpp b/src/KOKKOS/pair_mliap_kokkos.cpp index a735763fb0..5739a8ea2e 100644 --- a/src/KOKKOS/pair_mliap_kokkos.cpp +++ b/src/KOKKOS/pair_mliap_kokkos.cpp @@ -277,7 +277,7 @@ void PairMLIAPKokkos::coeff(int narg, char **arg) { for (int itype=1; itype <= atom->ntypes; ++itype) for (int jtype=1; jtype <= atom->ntypes; ++jtype) // do not set cuts for NULL atoms - if (map[itype] >= 0 && map[jtype] >=0) { + if (map[itype] >= 0 && map[jtype] >= 0) { h_cutsq(itype,jtype) = descriptor->cutsq[map[itype]][map[jtype]]; } k_cutsq.modify(); From b1ffb70f7d62355efd7de688ef2193c2477315ca Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Thu, 26 Oct 2023 17:20:33 -0600 Subject: [PATCH 074/204] Logic tweak --- src/KOKKOS/kokkos.cpp | 61 +++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 787f75fd47..b190c7f6b6 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -37,7 +37,7 @@ // for detecting GPU-aware MPI support: // the variable int have_gpu_aware -// - is 1 if GPU-aware MPI support is potentially available +// - is 1 if GPU-aware MPI support is available // - is 0 if GPU-aware MPI support is unavailable // - is -1 if GPU-aware MPI support is unknown @@ -52,7 +52,6 @@ GPU_AWARE_UNKNOWN #if (OMPI_MAJOR_VERSION >= 2) #include #if defined(MPIX_CUDA_AWARE_SUPPORT) && MPIX_CUDA_AWARE_SUPPORT -// May have CUDA-aware enabled: below we will check dynamically with MPIX_Query_cuda_support() static int have_gpu_aware = 1; #elif defined(MPIX_CUDA_AWARE_SUPPORT) && !MPIX_CUDA_AWARE_SUPPORT static int have_gpu_aware = 0; @@ -72,8 +71,7 @@ GPU_AWARE_UNKNOWN #if (OPEN_MPI) #if (OMPI_MAJOR_VERSION >= 5) #include -#if defined(MPIX_ROCM_AWARE_SUPPORT ) && MPIX_ROCM_AWARE_SUPPORT -// May have ROCm-aware enabled: below we will check dynamically with MPIX_Query_rocm_support() +#if defined(MPIX_ROCM_AWARE_SUPPORT) && MPIX_ROCM_AWARE_SUPPORT static int have_gpu_aware = 1; #elif defined(MPIX_ROCM_AWARE_SUPPORT) && !MPIX_ROCM_AWARE_SUPPORT static int have_gpu_aware = 0; @@ -89,7 +87,7 @@ GPU_AWARE_UNKNOWN #endif // KOKKOS_ENABLE_CUDA & KOKKOS_ENABLE_HIP -#endif // LMP_ENABLE_DEVICE +#endif // LMP_KOKKOS_GPU using namespace LAMMPS_NS; @@ -259,10 +257,8 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) // default settings for package kokkos command binsize = 0.0; -#if defined(KOKKOS_ENABLE_CUDA) && defined(MPIX_CUDA_AWARE_SUPPORT) && MPIX_CUDA_AWARE_SUPPORT - gpu_aware_flag = MPIX_Query_cuda_support(); -#elif defined(KOKKOS_ENABLE_HIP) && defined(MPIX_ROCM_AWARE_SUPPORT) && MPIX_ROCM_AWARE_SUPPORT - gpu_aware_flag = MPIX_Query_rocm_support(); +#if defined(LMP_KOKKOS_GPU) + gpu_aware_flag = 1; #else gpu_aware_flag = 0; #endif @@ -299,12 +295,22 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) #ifdef LMP_KOKKOS_GPU // check and warn about GPU-aware MPI availability when using multiple MPI tasks - // change default only if we can safely detect that GPU-aware MPI is not available + // change default only if we can detect that GPU-aware MPI is not available int nmpi = 0; MPI_Comm_size(world,&nmpi); if (nmpi > 1) { + // runtime check for OpenMPI GPU-aware + +#if (OPEN_MPI) +#if (OMPI_MAJOR_VERSION >= 2) && defined(KOKKOS_ENABLE_CUDA) + have_gpu_aware = MPIX_Query_cuda_support(); +#elif (OMPI_MAJOR_VERSION >= 5) && defined(KOKKOS_ENABLE_HIP) + have_gpu_aware = MPIX_Query_rocm_support(); +#endif +#endif + #if defined(MPI_VERSION) && (MPI_VERSION > 2) // Check for IBM Spectrum MPI @@ -312,17 +318,17 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) char mpi_version[MPI_MAX_LIBRARY_VERSION_STRING]; MPI_Get_library_version(mpi_version, &len); if (strstr(&mpi_version[0], "Spectrum") != nullptr) { - gpu_aware_flag = 0; char* str; + have_gpu_aware = 0; if ((str = getenv("OMPI_MCA_pml_pami_enable_cuda"))) - if ((strcmp(str,"1") == 0)) { + if ((strcmp(str,"1") == 0)) have_gpu_aware = 1; - gpu_aware_flag = 1; - } - if (!gpu_aware_flag) + if (!have_gpu_aware) { if (me == 0) error->warning(FLERR,"The Spectrum MPI '-gpu' flag is not set. Disabling GPU-aware MPI"); + gpu_aware_flag = 0; + } } #endif @@ -332,27 +338,32 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) "use '-pk kokkos gpu/aware on' to override"); gpu_aware_flag = 0; } else if (have_gpu_aware == -1) { // maybe we are dealing with MPICH, MVAPICH2 or some derivative? - // MVAPICH2 + // MVAPICH2 #if defined(MPICH) && defined(MVAPICH2_VERSION) char* str; - gpu_aware_flag = 0; + have_gpu_aware = 0; if ((str = getenv("MV2_USE_CUDA"))) if ((strcmp(str,"1") == 0)) - gpu_aware_flag = 1; + have_gpu_aware = 1; - if (!gpu_aware_flag) + if (!have_gpu_aware) { if (me == 0) error->warning(FLERR,"MVAPICH2 'MV2_USE_CUDA' environment variable is not set. Disabling GPU-aware MPI"); + gpu_aware_flag = 0; + } // pure MPICH or some unsupported MPICH derivative #elif defined(MPICH) && !defined(MVAPICH2_VERSION) char* str; - gpu_aware_flag = 0; + have_gpu_aware = 0; if ((str = getenv("MPICH_GPU_SUPPORT_ENABLED"))) if ((strcmp(str,"1") == 0)) - gpu_aware_flag = 1; + have_gpu_aware = 1; - if (!gpu_aware_flag && me == 0) - error->warning(FLERR,"Detected MPICH. Disabling GPU-aware MPI"); + if (!have_gpu_aware) { + if (me == 0) + error->warning(FLERR,"Detected MPICH. Disabling GPU-aware MPI"); + gpu_aware_flag = 0; + } #else if (me == 0) error->warning(FLERR,"Kokkos with GPU-enabled backend assumes GPU-aware MPI is available," @@ -360,9 +371,9 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) " '-pk kokkos gpu/aware off' if getting segmentation faults"); #endif - } // if (-1 == have_gpu_aware) + } // if (have_gpu_aware == -1) } // nmpi > 0 -#endif // LMP_ENABLE_DEVICE +#endif // LMP_KOKKOS_GPU #ifdef KILL_KOKKOS_ON_SIGSEGV signal(SIGSEGV, my_signal_handler); From d33a8ea0c23dafca2f0e40fae20e5c2795d18ffc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 26 Oct 2023 20:48:20 -0400 Subject: [PATCH 075/204] whitespace --- .../mliap_model_python_couple_kokkos.pyx | 6 ++-- src/KOKKOS/mliap_unified_couple_kokkos.pyx | 32 +++++++++---------- src/ML-IAP/mliap_unified_couple.pyx | 30 ++++++++--------- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/KOKKOS/mliap_model_python_couple_kokkos.pyx b/src/KOKKOS/mliap_model_python_couple_kokkos.pyx index 010830f7fd..24a0e0897f 100644 --- a/src/KOKKOS/mliap_model_python_couple_kokkos.pyx +++ b/src/KOKKOS/mliap_model_python_couple_kokkos.pyx @@ -131,14 +131,14 @@ cdef create_array(device, void *pointer, shape,is_int): return numpy.asarray(pointer) else: return numpy.asarray(pointer) - + cdef public void MLIAPPYKokkos_compute_gradients(MLIAPModelPythonKokkosDevice * c_model, MLIAPDataKokkosDevice * data) with gil: dev=data.dev torch.cuda.nvtx.range_push("set data fields") - model = retrieve(c_model) + model = retrieve(c_model) n_d = data.ndescriptors n_a = data.nlistatoms @@ -149,7 +149,7 @@ cdef public void MLIAPPYKokkos_compute_gradients(MLIAPModelPythonKokkosDevice * beta_cp = create_array(dev, data.betas, (n_a, n_d), False) desc_cp = create_array(dev, data.descriptors, (n_a, n_d), False) torch.cuda.nvtx.range_pop() - + # Invoke python model on numpy arrays. torch.cuda.nvtx.range_push("call model") model(elem_cp,desc_cp,beta_cp,en_cp,dev==1) diff --git a/src/KOKKOS/mliap_unified_couple_kokkos.pyx b/src/KOKKOS/mliap_unified_couple_kokkos.pyx index 0142c5eda2..97d807ac33 100644 --- a/src/KOKKOS/mliap_unified_couple_kokkos.pyx +++ b/src/KOKKOS/mliap_unified_couple_kokkos.pyx @@ -134,14 +134,14 @@ cdef create_array(device, void *pointer, shape,is_int): return np.asarray(pointer) else: return np.asarray(pointer) - + # Cython implementation of MLIAPData # Automatically converts between C arrays and numpy when needed cdef class MLIAPDataPy: cdef MLIAPDataKokkosDevice * data - + def __cinit__(self): self.data = NULL @@ -158,7 +158,7 @@ cdef class MLIAPDataPy: ptr = eij.data.ptr except: ptr = eij.data_ptr() - update_pair_energy(self.data, ptr) + update_pair_energy(self.data, ptr) def update_pair_energy(self, eij): if self.data.dev==0: self.update_pair_energy_cpu(eij) @@ -178,7 +178,7 @@ cdef class MLIAPDataPy: ptr = fij.data.ptr except: ptr = fij.data_ptr() - update_pair_forces(self.data, ptr) + update_pair_forces(self.data, ptr) def update_pair_forces(self, fij): if self.data.dev==0: self.update_pair_forces_cpu(fij) @@ -190,11 +190,11 @@ cdef class MLIAPDataPy: return None return create_array(self.data.dev, self.data.f, [self.ntotal, 3],False) - + @property def size_gradforce(self): return self.data.size_gradforce - + @write_only_property def gradforce(self, value): if self.data.gradforce is NULL: @@ -203,7 +203,7 @@ cdef class MLIAPDataPy: cdef double[:, :] value_view = value gradforce_view[:] = value_view print("This code has not been tested or optimized for the GPU, if you are getting this warning optimize gradforce") - + @write_only_property def betas(self, value): if self.data.betas is NULL: @@ -281,7 +281,7 @@ cdef class MLIAPDataPy: @property def ntotal(self): return self.data.ntotal - + @property def elems(self): if self.data.elems is NULL: @@ -295,7 +295,7 @@ cdef class MLIAPDataPy: @property def nlocal(self): return self.data.nlocal - + @property def natomneigh(self): return self.data.natomneigh @@ -311,7 +311,7 @@ cdef class MLIAPDataPy: if self.data.iatoms is NULL: return None return create_array(self.data.dev, self.data.iatoms, [self.natomneigh],True) - + @property def ielems(self): if self.data.ielems is NULL: @@ -327,7 +327,7 @@ cdef class MLIAPDataPy: if self.data.pair_i is NULL: return None return create_array(self.data.dev, self.data.pair_i, [self.npairs],True) - + @property def pair_j(self): return self.jatoms @@ -337,7 +337,7 @@ cdef class MLIAPDataPy: if self.data.jatoms is NULL: return None return create_array(self.data.dev, self.data.jatoms, [self.npairs],True) - + @property def jelems(self): if self.data.jelems is NULL: @@ -388,13 +388,13 @@ cdef class MLIAPUnifiedInterfaceKokkos: self.model = NULL self.descriptor = NULL self.unified_impl = unified_impl - + def compute_gradients(self, data): self.unified_impl.compute_gradients(data) - + def compute_descriptors(self, data): self.unified_impl.compute_descriptors(data) - + def compute_forces(self, data): self.unified_impl.compute_forces(data) @@ -448,7 +448,7 @@ cdef public object mliap_unified_connect_kokkos(char *fname, MLIAPDummyModel * m if unified.element_types is None: raise ValueError("no element type set") - + cdef int nelements = len(unified.element_types) cdef char **elements = malloc(nelements * sizeof(char*)) diff --git a/src/ML-IAP/mliap_unified_couple.pyx b/src/ML-IAP/mliap_unified_couple.pyx index 422b8bbcee..3148b96b51 100644 --- a/src/ML-IAP/mliap_unified_couple.pyx +++ b/src/ML-IAP/mliap_unified_couple.pyx @@ -114,11 +114,11 @@ cdef class MLIAPDataPy: def __cinit__(self): self.data = NULL - + def update_pair_energy(self, eij): cdef double[:] eij_arr = eij update_pair_energy(self.data, &eij_arr[0]) - + def update_pair_forces(self, fij): cdef double[:, ::1] fij_arr = fij update_pair_forces(self.data, &fij_arr[0][0]) @@ -128,11 +128,11 @@ cdef class MLIAPDataPy: if self.data.f is NULL: return None return np.asarray( &self.data.f[0][0]) - + @property def size_gradforce(self): return self.data.size_gradforce - + @write_only_property def gradforce(self, value): if self.data.gradforce is NULL: @@ -140,7 +140,7 @@ cdef class MLIAPDataPy: cdef double[:, :] gradforce_view = &self.data.gradforce[0][0] cdef double[:, :] value_view = value gradforce_view[:] = value_view - + @write_only_property def betas(self, value): if self.data.betas is NULL: @@ -217,7 +217,7 @@ cdef class MLIAPDataPy: @property def ntotal(self): return self.data.ntotal - + @property def elems(self): if self.data.elems is NULL: @@ -231,7 +231,7 @@ cdef class MLIAPDataPy: @property def nlocal(self): return self.data.nlocal - + @property def natomneigh(self): return self.data.natomneigh @@ -247,13 +247,13 @@ cdef class MLIAPDataPy: if self.data.iatoms is NULL: return None return np.asarray( &self.data.iatoms[0]) - + @property def ielems(self): if self.data.ielems is NULL: return None return np.asarray( &self.data.ielems[0]) - + @property def npairs(self): return self.data.npairs @@ -263,7 +263,7 @@ cdef class MLIAPDataPy: if self.data.pair_i is NULL: return None return np.asarray( &self.data.pair_i[0]) - + @property def pair_j(self): return self.jatoms @@ -273,7 +273,7 @@ cdef class MLIAPDataPy: if self.data.jatoms is NULL: return None return np.asarray( &self.data.jatoms[0]) - + @property def jelems(self): if self.data.jelems is NULL: @@ -323,13 +323,13 @@ cdef class MLIAPUnifiedInterface: self.model = NULL self.descriptor = NULL self.unified_impl = unified_impl - + def compute_gradients(self, data): self.unified_impl.compute_gradients(data) - + def compute_descriptors(self, data): self.unified_impl.compute_descriptors(data) - + def compute_forces(self, data): self.unified_impl.compute_forces(data) @@ -384,7 +384,7 @@ cdef public object mliap_unified_connect(char *fname, MLIAPDummyModel * model, if unified.element_types is None: raise ValueError("no element type set") - + cdef int nelements = len(unified.element_types) cdef char **elements = malloc(nelements * sizeof(char*)) From b9283cfcf661418df817bc1b7a3d8455bc3b57c5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 27 Oct 2023 00:20:05 -0400 Subject: [PATCH 076/204] modernize --- purge-workflows.py | 24 ++++++++++++++++++++++++ src/fix_dt_reset.cpp | 2 +- src/fix_nve_limit.cpp | 7 ++----- src/neighbor.cpp | 18 ++++++------------ src/neighbor.h | 2 +- 5 files changed, 34 insertions(+), 19 deletions(-) create mode 100755 purge-workflows.py diff --git a/purge-workflows.py b/purge-workflows.py new file mode 100755 index 0000000000..00ebf35fa8 --- /dev/null +++ b/purge-workflows.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 + +from yaml import load +import subprocess +try: + from yaml import CLoader as Loader +except ImportError: + from yaml import Loader + +runs = subprocess.check_output('gh api repos/lammps/lammps/actions/runs',shell=True) +data = load(runs,Loader=Loader) +while data['total_count'] > 3: + print('remaining: ', data['total_count']) + num=1 + for d in data['workflow_runs']: + print(num, d['id'],d['name'],d['run_number']) + num += 1 + if num > 4: + subprocess.call('gh api -X DELETE repos/lammps/lammps/actions/runs/' + str(d['id']), shell=True) + #print('gh api -X DELETE repos/lammps/lammps/actions/runs/' + str(d['id'])) + else: + print('skip') + runs = subprocess.check_output('gh api repos/lammps/lammps/actions/runs',shell=True) + data = load(runs,Loader=Loader) diff --git a/src/fix_dt_reset.cpp b/src/fix_dt_reset.cpp index b56ae4f846..ba69d17718 100644 --- a/src/fix_dt_reset.cpp +++ b/src/fix_dt_reset.cpp @@ -195,7 +195,7 @@ void FixDtReset::end_of_step() update->dt_default = 0; if (respaflag) update->integrate->reset_dt(); if (force->pair) force->pair->reset_dt(); - for (int i = 0; i < modify->nfix; i++) modify->fix[i]->reset_dt(); + for (auto &ifix : modify->get_fix_list()) ifix->reset_dt(); output->reset_dt(); } diff --git a/src/fix_nve_limit.cpp b/src/fix_nve_limit.cpp index 331d50631b..53e9258ce5 100644 --- a/src/fix_nve_limit.cpp +++ b/src/fix_nve_limit.cpp @@ -71,12 +71,9 @@ void FixNVELimit::init() // warn if using fix shake, which will lead to invalid constraint forces - for (int i = 0; i < modify->nfix; i++) - if (utils::strmatch(modify->fix[i]->style,"^shake") - || utils::strmatch(modify->fix[i]->style,"^rattle")) { - if (comm->me == 0) + if ((comm->me == 0) && ((modify->get_fix_by_style("^shake").size() > 0) || + (modify->get_fix_by_style("^rattle").size() > 0))) error->warning(FLERR,"Should not use fix nve/limit with fix shake or fix rattle"); - } } /* ---------------------------------------------------------------------- diff --git a/src/neighbor.cpp b/src/neighbor.cpp index c6eea7e2f1..63e1494acd 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -143,7 +143,6 @@ pairclass(nullptr), pairnames(nullptr), pairmasks(nullptr) cutneighghostsq = nullptr; cuttype = nullptr; cuttypesq = nullptr; - fixchecklist = nullptr; // pairwise neighbor lists and associated data structs @@ -242,7 +241,6 @@ Neighbor::~Neighbor() memory->destroy(cutneighghostsq); delete[] cuttype; delete[] cuttypesq; - delete[] fixchecklist; for (int i = 0; i < nlist; i++) delete lists[i]; for (int i = 0; i < nbin; i++) delete neigh_bin[i]; @@ -497,19 +495,15 @@ void Neighbor::init() if (cut_respa[0]-skin < 0) cut_middle_inside_sq = 0.0; } - // fixchecklist = other classes that can induce reneighboring in decide() - restart_check = 0; if (output->restart_flag) restart_check = 1; - delete[] fixchecklist; - fixchecklist = nullptr; - fixchecklist = new int[modify->nfix]; + // fixchecklist = other classes that can induce reneighboring in decide() + fixchecklist.clear(); fix_check = 0; - for (i = 0; i < modify->nfix; i++) - if (modify->fix[i]->force_reneighbor) - fixchecklist[fix_check++] = i; + for (auto &ifix : modify->get_fix_list()) + if (ifix->force_reneighbor) fixchecklist.push_back(ifix); must_check = 0; if (restart_check || fix_check) must_check = 1; @@ -2298,8 +2292,8 @@ int Neighbor::decide() if (must_check) { bigint n = update->ntimestep; if (restart_check && n == output->next_restart) return 1; - for (int i = 0; i < fix_check; i++) - if (n == modify->fix[fixchecklist[i]]->next_reneighbor) return 1; + for (auto &ifix : fixchecklist) + if (n == ifix->next_reneighbor) return 1; } ago++; diff --git a/src/neighbor.h b/src/neighbor.h index 9c51361aa8..d696445d61 100644 --- a/src/neighbor.h +++ b/src/neighbor.h @@ -187,7 +187,7 @@ class Neighbor : protected Pointers { int must_check; // 1 if must check other classes to reneigh int restart_check; // 1 if restart enabled, 0 if no int fix_check; // # of fixes that induce reneigh - int *fixchecklist; // which fixes to check + std::vectorfixchecklist; // which fixes to check double triggersq; // trigger = build when atom moves this dist From 5a665c31f6baf42c9c6fd6c49ae797a5870feb3f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 27 Oct 2023 00:20:34 -0400 Subject: [PATCH 077/204] use better heuristics to avoid zero plot ranges --- tools/lammps-gui/chartviewer.cpp | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/tools/lammps-gui/chartviewer.cpp b/tools/lammps-gui/chartviewer.cpp index ff53602823..0150133954 100644 --- a/tools/lammps-gui/chartviewer.cpp +++ b/tools/lammps-gui/chartviewer.cpp @@ -324,16 +324,26 @@ void ChartViewer::reset_zoom() } // avoid (nearly) empty ranges - double deltax = fabs((xmax - xmin) / ((xmax == 0.0) ? 1.0 : xmax)); - if (deltax < 1.0e-10) { - xmin -= 100.0*deltax; - xmax += 100.0*deltax; + double deltax = xmax - xmin; + if ((deltax / ((xmax == 0.0) ? 1.0 : xmax)) < 1.0e-10) { + if ((xmin == 0.0) || (xmax == 0.0)) { + xmin = -0.025; + xmax = 0.025; + } else { + xmin -= 0.025 * fabs(xmin); + xmax += 0.025 * fabs(xmax); + } } - double deltay = fabs((ymax - ymin) / ((ymax == 0.0) ? 1.0 : ymax)); - if (deltay < 1.0e-10) { - ymin -= 100.0*deltay; - ymax += 100.0*deltay; + double deltay = ymax - ymin; + if ((deltay / ((ymax == 0.0) ? 1.0 : ymax)) < 1.0e-10) { + if ((ymin == 0.0) || (ymax == 0.0)) { + ymin = -0.025; + ymax = 0.025; + } else { + ymin -= 0.025 * fabs(ymin); + ymax += 0.025 * fabs(ymax); + } } xaxis->setRange(xmin, xmax); From dc9140dfa8ba417cacf83e02e460f60ed7ec14ce Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 27 Oct 2023 03:19:11 -0400 Subject: [PATCH 078/204] modernize --- src/GPU/fix_nh_gpu.cpp | 8 +--- src/INTEL/fix_nh_intel.cpp | 8 +--- src/KOKKOS/fix_nh_kokkos.cpp | 9 ++--- src/OPENMP/fix_nh_omp.cpp | 8 +--- src/fix_box_relax.cpp | 29 +++----------- src/fix_box_relax.h | 3 +- src/fix_nh.cpp | 74 +++++++++++++----------------------- src/fix_nh.h | 3 +- 8 files changed, 43 insertions(+), 99 deletions(-) diff --git a/src/GPU/fix_nh_gpu.cpp b/src/GPU/fix_nh_gpu.cpp index 9d4fbcc668..00df278ea8 100644 --- a/src/GPU/fix_nh_gpu.cpp +++ b/src/GPU/fix_nh_gpu.cpp @@ -129,9 +129,7 @@ void FixNHGPU::remap() } } - if (nrigid) - for (int i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(0); + for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -304,9 +302,7 @@ void FixNHGPU::remap() } } - if (nrigid) - for (int i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(1); + for (auto &ifix : rfix) ifix->deform(1); } /* ---------------------------------------------------------------------- diff --git a/src/INTEL/fix_nh_intel.cpp b/src/INTEL/fix_nh_intel.cpp index 2c05c3f6fa..688101ab13 100644 --- a/src/INTEL/fix_nh_intel.cpp +++ b/src/INTEL/fix_nh_intel.cpp @@ -138,9 +138,7 @@ void FixNHIntel::remap() } } - if (nrigid) - for (int i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(0); + for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -321,9 +319,7 @@ void FixNHIntel::remap() } } - if (nrigid) - for (int i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(1); + for (auto &ifix : rfix) ifix->deform(1); } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/fix_nh_kokkos.cpp b/src/KOKKOS/fix_nh_kokkos.cpp index 939b88889c..3d2d3ebb71 100644 --- a/src/KOKKOS/fix_nh_kokkos.cpp +++ b/src/KOKKOS/fix_nh_kokkos.cpp @@ -310,10 +310,9 @@ void FixNHKokkos::remap() // domain->x2lamda(x[i],x[i]); //} - if (nrigid) + if (rfix.size() > 0) error->all(FLERR,"Cannot (yet) use rigid bodies with fix nh and Kokkos"); - //for (i = 0; i < nrigid; i++) - // modify->fix[rfix[i]]->deform(0); + // for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -459,9 +458,7 @@ void FixNHKokkos::remap() // domain->lamda2x(x[i],x[i]); //} - //if (nrigid) - // for (i = 0; i < nrigid; i++) - // modify->fix[rfix[i]]->deform(1); + // for (auto &ifix : rfix) ifix->deform(1); } /* ---------------------------------------------------------------------- diff --git a/src/OPENMP/fix_nh_omp.cpp b/src/OPENMP/fix_nh_omp.cpp index aada50949e..a7fe2738ca 100644 --- a/src/OPENMP/fix_nh_omp.cpp +++ b/src/OPENMP/fix_nh_omp.cpp @@ -68,9 +68,7 @@ void FixNHOMP::remap() domain->x2lamda(x[i],x[i]); } - if (nrigid) - for (int i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(0); + for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -218,9 +216,7 @@ void FixNHOMP::remap() domain->lamda2x(x[i],x[i]); } - if (nrigid) - for (int i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(1); + for (auto &ifix : rfix) ifix->deform(1); } diff --git a/src/fix_box_relax.cpp b/src/fix_box_relax.cpp index fba050e89c..1f715a1dd4 100644 --- a/src/fix_box_relax.cpp +++ b/src/fix_box_relax.cpp @@ -319,9 +319,6 @@ FixBoxRelax::FixBoxRelax(LAMMPS *lmp, int narg, char **arg) : pflag = 1; dimension = domain->dimension; - nrigid = 0; - rfix = nullptr; - current_lifo = 0; } @@ -329,8 +326,6 @@ FixBoxRelax::FixBoxRelax(LAMMPS *lmp, int narg, char **arg) : FixBoxRelax::~FixBoxRelax() { - delete[] rfix; - // delete temperature and pressure if fix created them if (tflag) modify->delete_compute(id_temp); @@ -368,20 +363,10 @@ void FixBoxRelax::init() else kspace_flag = 0; // detect if any rigid fixes exist so rigid bodies move when box is remapped - // rfix[] = indices to each fix rigid - delete[] rfix; - nrigid = 0; - rfix = nullptr; - - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) nrigid++; - if (nrigid) { - rfix = new int[nrigid]; - nrigid = 0; - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) rfix[nrigid++] = i; - } + rfix.clear(); + for (auto &ifix : modify->get_fix_list()) + if (ifix->rigid_flag) rfix.push_back(ifix); // initial box dimensions @@ -638,9 +623,7 @@ void FixBoxRelax::remap() domain->x2lamda(x[i],x[i]); } - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(0); + for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -678,9 +661,7 @@ void FixBoxRelax::remap() domain->lamda2x(x[i],x[i]); } - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(1); + for (auto &ifix : rfix) ifix->deform(1); } /* ---------------------------------------------------------------------- */ diff --git a/src/fix_box_relax.h b/src/fix_box_relax.h index bedf7faef3..0870ed522d 100644 --- a/src/fix_box_relax.h +++ b/src/fix_box_relax.h @@ -68,8 +68,7 @@ class FixBoxRelax : public Fix { class Compute *temperature, *pressure; int tflag, pflag; - int nrigid; - int *rfix; + std::vector rfix; double sigma[6]; // scaled target stress double utsigma[3]; // weighting for upper-tri elements diff --git a/src/fix_nh.cpp b/src/fix_nh.cpp index 12272c3123..562ca51c29 100644 --- a/src/fix_nh.cpp +++ b/src/fix_nh.cpp @@ -53,12 +53,9 @@ enum{ISO,ANISO,TRICLINIC}; ---------------------------------------------------------------------- */ FixNH::FixNH(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), - rfix(nullptr), id_dilate(nullptr), irregular(nullptr), - id_temp(nullptr), id_press(nullptr), - eta(nullptr), eta_dot(nullptr), eta_dotdot(nullptr), - eta_mass(nullptr), etap(nullptr), etap_dot(nullptr), etap_dotdot(nullptr), - etap_mass(nullptr) + Fix(lmp, narg, arg), id_dilate(nullptr), irregular(nullptr), id_temp(nullptr), + id_press(nullptr), eta(nullptr), eta_dot(nullptr), eta_dotdot(nullptr), eta_mass(nullptr), + etap(nullptr), etap_dot(nullptr), etap_dotdot(nullptr), etap_mass(nullptr) { if (narg < 4) utils::missing_cmd_args(FLERR, std::string("fix ") + style, error); @@ -271,7 +268,7 @@ FixNH::FixNH(LAMMPS *lmp, int narg, char **arg) : if (strcmp(arg[iarg+1],"all") == 0) allremap = 1; else { allremap = 0; - delete [] id_dilate; + delete[] id_dilate; id_dilate = utils::strdup(arg[iarg+1]); int idilate = group->find(id_dilate); if (idilate == -1) @@ -564,9 +561,6 @@ FixNH::FixNH(LAMMPS *lmp, int narg, char **arg) : if (deviatoric_flag) size_vector += 1; } - nrigid = 0; - rfix = nullptr; - if (pre_exchange_flag) irregular = new Irregular(lmp); else irregular = nullptr; @@ -582,31 +576,29 @@ FixNH::~FixNH() { if (copymode) return; - delete [] id_dilate; - delete [] rfix; - + delete[] id_dilate; delete irregular; // delete temperature and pressure if fix created them if (tcomputeflag) modify->delete_compute(id_temp); - delete [] id_temp; + delete[] id_temp; if (tstat_flag) { - delete [] eta; - delete [] eta_dot; - delete [] eta_dotdot; - delete [] eta_mass; + delete[] eta; + delete[] eta_dot; + delete[] eta_dotdot; + delete[] eta_mass; } if (pstat_flag) { if (pcomputeflag) modify->delete_compute(id_press); - delete [] id_press; + delete[] id_press; if (mpchain) { - delete [] etap; - delete [] etap_dot; - delete [] etap_dotdot; - delete [] etap_mass; + delete[] etap; + delete[] etap_dot; + delete[] etap_dotdot; + delete[] etap_mass; } } } @@ -641,15 +633,17 @@ void FixNH::init() // ensure no conflict with fix deform if (pstat_flag) - for (int i = 0; i < modify->nfix; i++) - if (strcmp(modify->fix[i]->style,"deform") == 0) { - int *dimflag = (dynamic_cast(modify->fix[i]))->dimflag; + for (auto &ifix : modify->get_fix_by_style("^deform")) { + auto deform = dynamic_cast(ifix); + if (deform) { + int *dimflag = deform->dimflag; if ((p_flag[0] && dimflag[0]) || (p_flag[1] && dimflag[1]) || (p_flag[2] && dimflag[2]) || (p_flag[3] && dimflag[3]) || (p_flag[4] && dimflag[4]) || (p_flag[5] && dimflag[5])) error->all(FLERR,"Cannot use fix {} and fix deform on " "same component of stress tensor", style); } + } // set temperature and pressure ptrs @@ -718,20 +712,10 @@ void FixNH::init() } // detect if any rigid fixes exist so rigid bodies move when box is remapped - // rfix[] = indices to each fix rigid - delete [] rfix; - nrigid = 0; - rfix = nullptr; - - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) nrigid++; - if (nrigid) { - rfix = new int[nrigid]; - nrigid = 0; - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) rfix[nrigid++] = i; - } + rfix.clear(); + for (auto &ifix : modify->get_fix_list()) + if (ifix->rigid_flag) rfix.push_back(ifix); } /* ---------------------------------------------------------------------- @@ -1090,9 +1074,7 @@ void FixNH::remap() domain->x2lamda(x[i],x[i]); } - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(0); + for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -1237,9 +1219,7 @@ void FixNH::remap() domain->lamda2x(x[i],x[i]); } - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(1); + for (auto &ifix : rfix) ifix->deform(1); } /* ---------------------------------------------------------------------- @@ -1398,7 +1378,7 @@ int FixNH::modify_param(int narg, char **arg) modify->delete_compute(id_temp); tcomputeflag = 0; } - delete [] id_temp; + delete[] id_temp; id_temp = utils::strdup(arg[1]); temperature = modify->get_compute_by_id(arg[1]); @@ -1428,7 +1408,7 @@ int FixNH::modify_param(int narg, char **arg) modify->delete_compute(id_press); pcomputeflag = 0; } - delete [] id_press; + delete[] id_press; id_press = utils::strdup(arg[1]); pressure = modify->get_compute_by_id(arg[1]); diff --git a/src/fix_nh.h b/src/fix_nh.h index 3e406929b2..4741f3bac5 100644 --- a/src/fix_nh.h +++ b/src/fix_nh.h @@ -66,9 +66,8 @@ class FixNH : public Fix { double drag, tdrag_factor; // drag factor on particle thermostat double pdrag_factor; // drag factor on barostat int kspace_flag; // 1 if KSpace invoked, 0 if not - int nrigid; // number of rigid fixes int dilate_group_bit; // mask for dilation group - int *rfix; // indices of rigid fixes + std::vector rfix; // list of rigid fixes char *id_dilate; // group name to dilate class Irregular *irregular; // for migrating atoms after box flips From 6b4a1908203b226d13509c3b6bf0802b323ba6e0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 27 Oct 2023 03:51:19 -0400 Subject: [PATCH 079/204] must skip quit command death test with MPICH version 4.1 and later due to using threads --- unittest/commands/test_simple_commands.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/unittest/commands/test_simple_commands.cpp b/unittest/commands/test_simple_commands.cpp index 1c995603e1..79ea1c71ce 100644 --- a/unittest/commands/test_simple_commands.cpp +++ b/unittest/commands/test_simple_commands.cpp @@ -213,8 +213,11 @@ TEST_F(SimpleCommandsTest, Quit) END_HIDE_OUTPUT(); TEST_FAILURE(".*ERROR: Expected integer .*", command("quit xxx");); - // the following tests must be skipped with OpenMPI due to using threads + // the following tests must be skipped with OpenMPI or MPICH 4.1 and later due to using threads if (platform::mpi_vendor() == "Open MPI") GTEST_SKIP(); +#if defined(MPICH_NUMVERSION) + if (MPICH_NUMVERSION >= 40100000) GTEST_SKIP(); +#endif ASSERT_EXIT(command("quit"), ExitedWithCode(0), ""); ASSERT_EXIT(command("quit 9"), ExitedWithCode(9), ""); } From e431a972ad72aee6e0eb43cf2eee26882a4a93a7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 27 Oct 2023 09:26:58 -0400 Subject: [PATCH 080/204] Stop processing commands when "quit" is found instead of crashing. When using the library interface for processing commands, the "quit" command will terminate the application. Instead we intercept and just stop processing the command buffer and print a suitable message. Long-term, we perhaps may want to add a "QuitException" and throw that. --- src/library.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/library.cpp b/src/library.cpp index 7b0d8ef91b..9d542f86ae 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -702,6 +702,13 @@ void lammps_commands_string(void *handle, const char *str) continue; } } + // stop processing when quit command is found + if (words.size() && (words[0] == "quit")) { + if (lmp->comm->me == 0) + utils::logmesg(lmp, "Encountered a 'quit' command. Stopping ...\n"); + break; + } + lmp->input->one(cmd.c_str()); } } From d79aca60154e2abc4cd852b42f852ca0089ee8da Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 27 Oct 2023 11:08:02 -0400 Subject: [PATCH 081/204] fix bug in not listing all not compiled-in styles --- src/lammps.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lammps.cpp b/src/lammps.cpp index 6fc06521d1..c44933d59c 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -16,6 +16,7 @@ #include "style_angle.h" // IWYU pragma: keep #include "style_atom.h" // IWYU pragma: keep +#include "style_body.h" // IWYU pragma: keep #include "style_bond.h" // IWYU pragma: keep #include "style_command.h" // IWYU pragma: keep #include "style_compute.h" // IWYU pragma: keep @@ -27,6 +28,7 @@ #include "style_kspace.h" // IWYU pragma: keep #include "style_minimize.h" // IWYU pragma: keep #include "style_pair.h" // IWYU pragma: keep +#include "style_reader.h" // IWYU pragma: keep #include "style_region.h" // IWYU pragma: keep #include "accelerator_kokkos.h" @@ -1150,9 +1152,9 @@ const char *LAMMPS::match_style(const char *style, const char *name) check_for_match(bond,style,name); check_for_match(command,style,name); check_for_match(compute,style,name); + check_for_match(dihedral,style,name); check_for_match(dump,style,name); check_for_match(fix,style,name); - check_for_match(compute,style,name); check_for_match(improper,style,name); check_for_match(integrate,style,name); check_for_match(kspace,style,name); @@ -1163,6 +1165,8 @@ const char *LAMMPS::match_style(const char *style, const char *name) return nullptr; } +#undef check_for_match + /** \brief Return suffix for non-pair styles depending on pair_only_flag * * \return suffix or null pointer From 16dd61ca5f138fe8ddab162667bfe66de0da4f15 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Fri, 27 Oct 2023 09:48:26 -0600 Subject: [PATCH 082/204] Remove redundant compile-time checks --- src/KOKKOS/kokkos.cpp | 106 ++++++++++++------------------------------ 1 file changed, 31 insertions(+), 75 deletions(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index b190c7f6b6..ace1d0f575 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -33,62 +33,6 @@ #include // for getpid() #endif -#ifdef LMP_KOKKOS_GPU - -// for detecting GPU-aware MPI support: -// the variable int have_gpu_aware -// - is 1 if GPU-aware MPI support is available -// - is 0 if GPU-aware MPI support is unavailable -// - is -1 if GPU-aware MPI support is unknown - -#define GPU_AWARE_UNKNOWN static int have_gpu_aware = -1; - -#if defined(KOKKOS_ENABLE_SYCL) || defined(KOKKOS_ENABLE_OPENMPTARGET) -GPU_AWARE_UNKNOWN -#elif defined(KOKKOS_ENABLE_CUDA) - -// OpenMPI supports detecting GPU-aware MPI as of version 2.0.0 -#if (OPEN_MPI) -#if (OMPI_MAJOR_VERSION >= 2) -#include -#if defined(MPIX_CUDA_AWARE_SUPPORT) && MPIX_CUDA_AWARE_SUPPORT -static int have_gpu_aware = 1; -#elif defined(MPIX_CUDA_AWARE_SUPPORT) && !MPIX_CUDA_AWARE_SUPPORT -static int have_gpu_aware = 0; -#else -GPU_AWARE_UNKNOWN -#endif // defined(MPIX_CUDA_AWARE_SUPPORT) -#else // old OpenMPI -GPU_AWARE_UNKNOWN -#endif // (OMPI_MAJOR_VERSION >=2) -#else // unknown MPI library -GPU_AWARE_UNKNOWN -#endif // OPEN_MPI - -#elif defined(KOKKOS_ENABLE_HIP) - -// OpenMPI supports detecting HIP-aware MPI as of version 5.0.0 -#if (OPEN_MPI) -#if (OMPI_MAJOR_VERSION >= 5) -#include -#if defined(MPIX_ROCM_AWARE_SUPPORT) && MPIX_ROCM_AWARE_SUPPORT -static int have_gpu_aware = 1; -#elif defined(MPIX_ROCM_AWARE_SUPPORT) && !MPIX_ROCM_AWARE_SUPPORT -static int have_gpu_aware = 0; -#else -GPU_AWARE_UNKNOWN -#endif // defined(OMPI_HAVE_MPI_EXT_ROCM) -#else // old OpenMPI -GPU_AWARE_UNKNOWN -#endif // (OMPI_MAJOR_VERSION >=5) -#else // unknown MPI library -GPU_AWARE_UNKNOWN -#endif // OPEN_MPI - -#endif // KOKKOS_ENABLE_CUDA & KOKKOS_ENABLE_HIP - -#endif // LMP_KOKKOS_GPU - using namespace LAMMPS_NS; int KokkosLMP::is_finalized = 0; @@ -301,18 +245,35 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) MPI_Comm_size(world,&nmpi); if (nmpi > 1) { - // runtime check for OpenMPI GPU-aware - + // for detecting GPU-aware MPI support: + // the variable int have_gpu_aware + // - is 1 if GPU-aware MPI support is available + // - is 0 if GPU-aware MPI support is unavailable + // - is -1 if GPU-aware MPI support is unknown + + int have_gpu_aware = -1; + + // OpenMPI + #if (OPEN_MPI) + have_gpu_aware = 0; #if (OMPI_MAJOR_VERSION >= 2) && defined(KOKKOS_ENABLE_CUDA) - have_gpu_aware = MPIX_Query_cuda_support(); + have_gpu_aware = MPIX_Query_cuda_support(); #elif (OMPI_MAJOR_VERSION >= 5) && defined(KOKKOS_ENABLE_HIP) - have_gpu_aware = MPIX_Query_rocm_support(); -#endif + have_gpu_aware = MPIX_Query_rocm_support(); #endif + if (gpu_aware_flag == 1 && have_gpu_aware == 0) { + if (me == 0) + error->warning(FLERR,"Turning off GPU-aware MPI since it is not detected, " + "use '-pk kokkos gpu/aware on' to override"); + gpu_aware_flag = 0; + } +#endif + + // IBM Spectrum MPI + #if defined(MPI_VERSION) && (MPI_VERSION > 2) - // Check for IBM Spectrum MPI int len; char mpi_version[MPI_MAX_LIBRARY_VERSION_STRING]; @@ -332,12 +293,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) } #endif - if (gpu_aware_flag == 1 && have_gpu_aware == 0) { - if (me == 0) - error->warning(FLERR,"Turning off GPU-aware MPI since it is not detected, " - "use '-pk kokkos gpu/aware on' to override"); - gpu_aware_flag = 0; - } else if (have_gpu_aware == -1) { // maybe we are dealing with MPICH, MVAPICH2 or some derivative? + if (have_gpu_aware == -1) { // MVAPICH2 #if defined(MPICH) && defined(MVAPICH2_VERSION) char* str; @@ -351,7 +307,8 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) error->warning(FLERR,"MVAPICH2 'MV2_USE_CUDA' environment variable is not set. Disabling GPU-aware MPI"); gpu_aware_flag = 0; } - // pure MPICH or some unsupported MPICH derivative + // pure MPICH or some MPICH derivative + // check for Cray MPICH which has GPU-aware support #elif defined(MPICH) && !defined(MVAPICH2_VERSION) char* str; have_gpu_aware = 0; @@ -365,13 +322,12 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) gpu_aware_flag = 0; } #else - if (me == 0) - error->warning(FLERR,"Kokkos with GPU-enabled backend assumes GPU-aware MPI is available," - " but cannot determine if this is the case\n try" - " '-pk kokkos gpu/aware off' if getting segmentation faults"); - + if (me == 0) + error->warning(FLERR,"Kokkos with GPU-enabled backend assumes GPU-aware MPI is available," + " but cannot determine if this is the case\n try" + " '-pk kokkos gpu/aware off' if getting segmentation faults"); #endif - } // if (have_gpu_aware == -1) + } } // nmpi > 0 #endif // LMP_KOKKOS_GPU From 0ab687040211409e7080d917596755eac0145500 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Fri, 27 Oct 2023 10:31:24 -0600 Subject: [PATCH 083/204] Need to include MPI header --- src/KOKKOS/kokkos.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index ace1d0f575..41417c66ae 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -257,10 +257,13 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) #if (OPEN_MPI) have_gpu_aware = 0; -#if (OMPI_MAJOR_VERSION >= 2) && defined(KOKKOS_ENABLE_CUDA) +#if (OMPI_MAJOR_VERSION >= 2) +#include +#if defined(KOKKOS_ENABLE_CUDA) have_gpu_aware = MPIX_Query_cuda_support(); #elif (OMPI_MAJOR_VERSION >= 5) && defined(KOKKOS_ENABLE_HIP) have_gpu_aware = MPIX_Query_rocm_support(); +#endif #endif if (gpu_aware_flag == 1 && have_gpu_aware == 0) { From 784ae460a100a905e97fa04c139eca3fca6b1acd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 27 Oct 2023 13:18:19 -0400 Subject: [PATCH 084/204] only offer completion in context menu, if there is something to complete --- tools/lammps-gui/codeeditor.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/tools/lammps-gui/codeeditor.cpp b/tools/lammps-gui/codeeditor.cpp index f644b7f5f0..672c009c35 100644 --- a/tools/lammps-gui/codeeditor.cpp +++ b/tools/lammps-gui/codeeditor.cpp @@ -686,13 +686,15 @@ void CodeEditor::contextMenuEvent(QContextMenuEvent *event) // print augmented context menu if an entry was found auto *menu = createStandardContextMenu(); menu->addSeparator(); - auto action = menu->addAction(QString("Display available completions for '%1'").arg(help)); - action->setIcon(QIcon(":/icons/expand-text.png")); - connect(action, &QAction::triggered, this, &CodeEditor::runCompletion); + if (!help.isEmpty()) { + auto action = menu->addAction(QString("Display available completions for '%1'").arg(help)); + action->setIcon(QIcon(":/icons/expand-text.png")); + connect(action, &QAction::triggered, this, &CodeEditor::runCompletion); + } if (!page.isEmpty()) { menu->addSeparator(); - action = menu->addAction(QString("Reformat '%1' command").arg(help)); + auto action = menu->addAction(QString("Reformat '%1' command").arg(help)); action->setIcon(QIcon(":/icons/format-indent-less-3.png")); connect(action, &QAction::triggered, this, &CodeEditor::reformatCurrentLine); @@ -714,10 +716,10 @@ void CodeEditor::contextMenuEvent(QContextMenuEvent *event) connect(action2, &QAction::triggered, this, &CodeEditor::open_help); } } - auto action3 = menu->addAction(QString("LAMMPS Manual")); - action3->setIcon(QIcon(":/icons/help-browser.png")); - action3->setData(QString()); - connect(action3, &QAction::triggered, this, &CodeEditor::open_help); + auto action = menu->addAction(QString("LAMMPS Manual")); + action->setIcon(QIcon(":/icons/help-browser.png")); + action->setData(QString()); + connect(action, &QAction::triggered, this, &CodeEditor::open_help); menu->exec(event->globalPos()); delete menu; From 36690a861db743e5b36c2cf3435b789860feaf0a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 27 Oct 2023 16:33:24 -0400 Subject: [PATCH 085/204] correct and simplify --- src/neighbor.cpp | 19 +++++++++++-------- src/neighbor.h | 1 - 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/neighbor.cpp b/src/neighbor.cpp index 63e1494acd..46d46b7440 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -496,17 +496,17 @@ void Neighbor::init() } restart_check = 0; - if (output->restart_flag) restart_check = 1; + if (output->restart_flag) must_check = restart_check = 1; // fixchecklist = other classes that can induce reneighboring in decide() fixchecklist.clear(); - fix_check = 0; - for (auto &ifix : modify->get_fix_list()) - if (ifix->force_reneighbor) fixchecklist.push_back(ifix); - - must_check = 0; - if (restart_check || fix_check) must_check = 1; + for (auto &ifix : modify->get_fix_list()) { + if (ifix->force_reneighbor) { + fixchecklist.push_back(ifix); + must_check = 1; + } + } // set special_flag for 1-2, 1-3, 1-4 neighbors // flag[0] is not used, flag[1] = 1-2, flag[2] = 1-3, flag[3] = 1-4 @@ -2292,8 +2292,11 @@ int Neighbor::decide() if (must_check) { bigint n = update->ntimestep; if (restart_check && n == output->next_restart) return 1; - for (auto &ifix : fixchecklist) + fprintf(stderr, "step %ld num fixes: %d\n", update->ntimestep, fixchecklist.size()); + for (auto &ifix : fixchecklist) { + fprintf(stderr, " fix: %s %s next %ld\n", ifix->id, ifix->style, ifix->next_reneighbor); if (n == ifix->next_reneighbor) return 1; + } } ago++; diff --git a/src/neighbor.h b/src/neighbor.h index d696445d61..ed99ae0af1 100644 --- a/src/neighbor.h +++ b/src/neighbor.h @@ -186,7 +186,6 @@ class Neighbor : protected Pointers { int must_check; // 1 if must check other classes to reneigh int restart_check; // 1 if restart enabled, 0 if no - int fix_check; // # of fixes that induce reneigh std::vectorfixchecklist; // which fixes to check double triggersq; // trigger = build when atom moves this dist From e7fc2923a52e0af045cb797f88c3a7f5ab6e3c42 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Fri, 27 Oct 2023 14:59:51 -0600 Subject: [PATCH 086/204] whitespace --- src/KOKKOS/kokkos.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 41417c66ae..1116808c60 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -254,7 +254,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) int have_gpu_aware = -1; // OpenMPI - + #if (OPEN_MPI) have_gpu_aware = 0; #if (OMPI_MAJOR_VERSION >= 2) From 588be47b18f091f47347bf72d396e0b02c2cdf39 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 27 Oct 2023 17:02:21 -0400 Subject: [PATCH 087/204] remove dead code --- src/KOKKOS/pair_yukawa_colloid_kokkos.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/KOKKOS/pair_yukawa_colloid_kokkos.cpp b/src/KOKKOS/pair_yukawa_colloid_kokkos.cpp index 04eb5ab657..9303e0d435 100644 --- a/src/KOKKOS/pair_yukawa_colloid_kokkos.cpp +++ b/src/KOKKOS/pair_yukawa_colloid_kokkos.cpp @@ -255,7 +255,6 @@ compute_evdwl(const F_FLOAT& rsq, const int& i, const int&j, : params(itype,jtype).offset; // U = a * exp(-kappa*(r-(radi+radj))) / kappa - const F_FLOAT rinv = 1.0 / rr; const F_FLOAT screening = exp(-kappa*(rr-(radi+radj))); return aa / kappa * screening - offset; From 6c3206f2f63c0d69098e2c9135d85863e0a1356e Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 27 Oct 2023 15:36:22 -0600 Subject: [PATCH 088/204] Tweaks --- src/KOKKOS/kokkos.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 1116808c60..9670e2fbd5 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -33,6 +33,12 @@ #include // for getpid() #endif +#ifdef LMP_KOKKOS_GPU +#if (OPEN_MPI) && (OMPI_MAJOR_VERSION >= 2) +#include +#endif +#endif + using namespace LAMMPS_NS; int KokkosLMP::is_finalized = 0; @@ -256,23 +262,32 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) // OpenMPI #if (OPEN_MPI) - have_gpu_aware = 0; #if (OMPI_MAJOR_VERSION >= 2) -#include + #if defined(KOKKOS_ENABLE_CUDA) have_gpu_aware = MPIX_Query_cuda_support(); -#elif (OMPI_MAJOR_VERSION >= 5) && defined(KOKKOS_ENABLE_HIP) +#endif + +#if defined(KOKKOS_ENABLE_HIP) +#if (OMPI_MAJOR_VERSION >= 5) have_gpu_aware = MPIX_Query_rocm_support(); +#else + have_gpu_aware = 0; #endif #endif +#else + have_gpu_aware = 0; +#endif // OMPI_MAJOR_VERSION >= 2 + if (gpu_aware_flag == 1 && have_gpu_aware == 0) { if (me == 0) error->warning(FLERR,"Turning off GPU-aware MPI since it is not detected, " "use '-pk kokkos gpu/aware on' to override"); gpu_aware_flag = 0; } -#endif + +#endif // OPEN_MPI // IBM Spectrum MPI From d35c27167742bd457abc2a36a2fa95ca6b96312f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 27 Oct 2023 19:10:55 -0400 Subject: [PATCH 089/204] limit the maximum number of iterations so the LAMMPS simulation will not stall --- src/compute_cluster_atom.cpp | 9 +++++++-- src/compute_fragment_atom.cpp | 10 ++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/compute_cluster_atom.cpp b/src/compute_cluster_atom.cpp index ae44fbcd37..0d60b8b993 100644 --- a/src/compute_cluster_atom.cpp +++ b/src/compute_cluster_atom.cpp @@ -29,6 +29,7 @@ using namespace LAMMPS_NS; +static constexpr int MAXLOOP = 100; /* ---------------------------------------------------------------------- */ ComputeClusterAtom::ComputeClusterAtom(LAMMPS *lmp, int narg, char **arg) : @@ -136,9 +137,11 @@ void ComputeClusterAtom::compute_peratom() int change, done, anychange; - while (true) { + int counter = 0; + // stop after MAXLOOP iterations + while (counter < MAXLOOP) { comm->forward_comm(this); - + ++counter; change = 0; while (true) { done = 1; @@ -177,6 +180,8 @@ void ComputeClusterAtom::compute_peratom() MPI_Allreduce(&change, &anychange, 1, MPI_INT, MPI_MAX, world); if (!anychange) break; } + if ((comm->me == 0) && (counter >= MAXLOOP)) + error->warning(FLERR, "Compute cluster/atom did not converge after {} iterations", MAXLOOP); } /* ---------------------------------------------------------------------- */ diff --git a/src/compute_fragment_atom.cpp b/src/compute_fragment_atom.cpp index 035f554c8d..7e3f3437b6 100644 --- a/src/compute_fragment_atom.cpp +++ b/src/compute_fragment_atom.cpp @@ -31,7 +31,8 @@ using namespace LAMMPS_NS; -#define BIG 1.0e20 +static constexpr double BIG = 1.0e20; +static constexpr int MAXLOOP = 100; /* ---------------------------------------------------------------------- */ @@ -145,8 +146,11 @@ void ComputeFragmentAtom::compute_peratom() commflag = 1; - while (true) { + int counter = 0; + // stop after MAXLOOP iterations + while (counter < MAXLOOP) { comm->forward_comm(this); + ++counter; done = 1; // set markflag = 0 for all owned atoms, for new iteration @@ -223,6 +227,8 @@ void ComputeFragmentAtom::compute_peratom() MPI_Allreduce(&done,&alldone,1,MPI_INT,MPI_MIN,world); if (alldone) break; } + if ((comm->me == 0) && (counter >= MAXLOOP)) + error->warning(FLERR, "Compute fragment/atom did not converge after {} iterations", MAXLOOP); } /* ---------------------------------------------------------------------- */ From ef2b3a7d70409c37b3ea2f401f67c1a1def9f006 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 28 Oct 2023 05:25:05 -0400 Subject: [PATCH 090/204] remove accidentally committed file --- purge-workflows.py | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100755 purge-workflows.py diff --git a/purge-workflows.py b/purge-workflows.py deleted file mode 100755 index 00ebf35fa8..0000000000 --- a/purge-workflows.py +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env python3 - -from yaml import load -import subprocess -try: - from yaml import CLoader as Loader -except ImportError: - from yaml import Loader - -runs = subprocess.check_output('gh api repos/lammps/lammps/actions/runs',shell=True) -data = load(runs,Loader=Loader) -while data['total_count'] > 3: - print('remaining: ', data['total_count']) - num=1 - for d in data['workflow_runs']: - print(num, d['id'],d['name'],d['run_number']) - num += 1 - if num > 4: - subprocess.call('gh api -X DELETE repos/lammps/lammps/actions/runs/' + str(d['id']), shell=True) - #print('gh api -X DELETE repos/lammps/lammps/actions/runs/' + str(d['id'])) - else: - print('skip') - runs = subprocess.check_output('gh api repos/lammps/lammps/actions/runs',shell=True) - data = load(runs,Loader=Loader) From c5463e13f147eca8b9c89a1729b0afc2507f5513 Mon Sep 17 00:00:00 2001 From: Jacob Gissinger Date: Sat, 28 Oct 2023 13:22:10 -0400 Subject: [PATCH 091/204] output ninserted for fixes: deposit+pour --- src/GRANULAR/fix_pour.cpp | 12 +++++++++++- src/GRANULAR/fix_pour.h | 1 + src/fix_deposit.cpp | 6 ++++++ src/fix_deposit.h | 1 + 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/GRANULAR/fix_pour.cpp b/src/GRANULAR/fix_pour.cpp index f92bca5073..8a2470715d 100644 --- a/src/GRANULAR/fix_pour.cpp +++ b/src/GRANULAR/fix_pour.cpp @@ -57,7 +57,8 @@ FixPour::FixPour(LAMMPS *lmp, int narg, char **arg) : if (narg < 6) error->all(FLERR, "Illegal fix pour command"); if (lmp->kokkos) error->all(FLERR, "Cannot yet use fix pour with the KOKKOS package"); - + + scalar_flag = 1; time_depend = 1; if (!atom->radius_flag || !atom->rmass_flag) @@ -1030,6 +1031,15 @@ void FixPour::options(int narg, char **arg) } } +/* ---------------------------------------------------------------------- + output number of successful insertions +------------------------------------------------------------------------- */ + +double FixPour::compute_scalar() +{ + return ninserted; +} + /* ---------------------------------------------------------------------- */ void FixPour::reset_dt() diff --git a/src/GRANULAR/fix_pour.h b/src/GRANULAR/fix_pour.h index 4a6e4abdae..57db2541df 100644 --- a/src/GRANULAR/fix_pour.h +++ b/src/GRANULAR/fix_pour.h @@ -32,6 +32,7 @@ class FixPour : public Fix { void init() override; void setup_pre_exchange() override; void pre_exchange() override; + double compute_scalar() override; void reset_dt() override; void *extract(const char *, int &) override; diff --git a/src/fix_deposit.cpp b/src/fix_deposit.cpp index 35bc48fe89..ebcaf92beb 100644 --- a/src/fix_deposit.cpp +++ b/src/fix_deposit.cpp @@ -51,6 +51,7 @@ FixDeposit::FixDeposit(LAMMPS *lmp, int narg, char **arg) : { if (narg < 7) error->all(FLERR,"Illegal fix deposit command"); + scalar_flag = 1; restart_global = 1; time_depend = 1; @@ -816,6 +817,11 @@ void FixDeposit::options(int narg, char **arg) } } +double FixDeposit::compute_scalar() +{ + return ninserted; +} + /* ---------------------------------------------------------------------- pack entire state of Fix into one write ------------------------------------------------------------------------- */ diff --git a/src/fix_deposit.h b/src/fix_deposit.h index ba5078dbbe..2b866dc068 100644 --- a/src/fix_deposit.h +++ b/src/fix_deposit.h @@ -32,6 +32,7 @@ class FixDeposit : public Fix { void init() override; void setup_pre_exchange() override; void pre_exchange() override; + double compute_scalar() override; void write_restart(FILE *) override; void restart(char *) override; void *extract(const char *, int &) override; From db91f9413d7773e1bd4901ea4e89198fa3fa9bfe Mon Sep 17 00:00:00 2001 From: Jacob Gissinger Date: Sat, 28 Oct 2023 13:41:42 -0400 Subject: [PATCH 092/204] docs --- doc/src/fix_deposit.rst | 9 +++++---- doc/src/fix_pour.rst | 5 +++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/doc/src/fix_deposit.rst b/doc/src/fix_deposit.rst index 7d2d28bfa9..08711001c5 100644 --- a/doc/src/fix_deposit.rst +++ b/doc/src/fix_deposit.rst @@ -289,10 +289,11 @@ operation of the fix continues in an uninterrupted fashion. The fix will try to detect it and stop with an error. None of the :doc:`fix_modify ` options are relevant to this -fix. No global or per-atom quantities are stored by this fix for -access by various :doc:`output commands `. No parameter -of this fix can be used with the *start/stop* keywords of the -:doc:`run ` command. This fix is not invoked during :doc:`energy minimization `. +fix. This fix computes a global scalar, which can be accessed by various +output commands. The scalar is the cumulative number of insertions. The +scalar value calculated by this fix is “intensive”. No parameter of this +fix can be used with the *start/stop* keywords of the :doc:`run ` +command. This fix is not invoked during :doc:`energy minimization `. Restrictions """""""""""" diff --git a/doc/src/fix_pour.rst b/doc/src/fix_pour.rst index eca1f70c41..0ad369bf29 100644 --- a/doc/src/fix_pour.rst +++ b/doc/src/fix_pour.rst @@ -245,8 +245,9 @@ produce the same behavior if you adjust the fix pour parameters appropriately. None of the :doc:`fix_modify ` options are relevant to this -fix. No global or per-atom quantities are stored by this fix for -access by various :doc:`output commands `. No parameter +fix. This fix computes a global scalar, which can be accessed by various +output commands. The scalar is the cumulative number of insertions. The +scalar value calculated by this fix is “intensive”. No parameter of this fix can be used with the *start/stop* keywords of the :doc:`run ` command. This fix is not invoked during :doc:`energy minimization `. From 902c43e8c6e84fccd856cf8902a7dab129e4b740 Mon Sep 17 00:00:00 2001 From: Jacob Gissinger Date: Sat, 28 Oct 2023 13:45:55 -0400 Subject: [PATCH 093/204] formatting --- src/fix_deposit.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/fix_deposit.cpp b/src/fix_deposit.cpp index ebcaf92beb..d2bcb3e855 100644 --- a/src/fix_deposit.cpp +++ b/src/fix_deposit.cpp @@ -817,6 +817,10 @@ void FixDeposit::options(int narg, char **arg) } } +/* ---------------------------------------------------------------------- + output number of successful insertions +------------------------------------------------------------------------- */ + double FixDeposit::compute_scalar() { return ninserted; From 56d2a791af693effe5a25a2354dbac16d0ef358d Mon Sep 17 00:00:00 2001 From: Jacob Gissinger Date: Sat, 28 Oct 2023 14:01:39 -0400 Subject: [PATCH 094/204] whitespace --- src/GRANULAR/fix_pour.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GRANULAR/fix_pour.cpp b/src/GRANULAR/fix_pour.cpp index 8a2470715d..cc5f0567e8 100644 --- a/src/GRANULAR/fix_pour.cpp +++ b/src/GRANULAR/fix_pour.cpp @@ -57,7 +57,7 @@ FixPour::FixPour(LAMMPS *lmp, int narg, char **arg) : if (narg < 6) error->all(FLERR, "Illegal fix pour command"); if (lmp->kokkos) error->all(FLERR, "Cannot yet use fix pour with the KOKKOS package"); - + scalar_flag = 1; time_depend = 1; From c5c816e36074b704449abbcd073afb029e0d7de7 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Sat, 28 Oct 2023 20:14:53 -0600 Subject: [PATCH 095/204] Add another check --- src/KOKKOS/kokkos.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 9670e2fbd5..f702c8a2d1 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -265,13 +265,15 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) #if (OMPI_MAJOR_VERSION >= 2) #if defined(KOKKOS_ENABLE_CUDA) +#if defined(OMPI_HAVE_MPI_EXT_CUDA) && OMPI_HAVE_MPI_EXT_CUDA have_gpu_aware = MPIX_Query_cuda_support(); #endif +#endif #if defined(KOKKOS_ENABLE_HIP) -#if (OMPI_MAJOR_VERSION >= 5) +#if defined(OMPI_HAVE_MPI_EXT_ROCM) && OMPI_HAVE_MPI_EXT_ROCM have_gpu_aware = MPIX_Query_rocm_support(); -#else +#elif (OMPI_MAJOR_VERSION < 5) have_gpu_aware = 0; #endif #endif From 549ea506d4d8cd9a7e85aee85fe4fd59fc8aef62 Mon Sep 17 00:00:00 2001 From: Jacob Gissinger Date: Sun, 29 Oct 2023 15:46:55 -0400 Subject: [PATCH 096/204] add var keyword to fix_deposit borrowed from create_atoms --- src/fix_deposit.cpp | 88 +++++++++++++++++++++++++++++++++++++++++++-- src/fix_deposit.h | 6 +++- 2 files changed, 91 insertions(+), 3 deletions(-) diff --git a/src/fix_deposit.cpp b/src/fix_deposit.cpp index d2bcb3e855..7f11987ad7 100644 --- a/src/fix_deposit.cpp +++ b/src/fix_deposit.cpp @@ -20,6 +20,7 @@ #include "domain.h" #include "error.h" #include "fix.h" +#include "input.h" #include "lattice.h" #include "math_const.h" #include "math_extra.h" @@ -29,6 +30,7 @@ #include "random_park.h" #include "region.h" #include "update.h" +#include "variable.h" #include #include @@ -209,6 +211,10 @@ FixDeposit::~FixDeposit() delete [] idrigid; delete [] idshake; delete [] idregion; + delete [] vstr; + delete [] xstr; + delete [] ystr; + delete [] zstr; memory->destroy(coords); memory->destroy(imageflags); } @@ -361,6 +367,8 @@ void FixDeposit::pre_exchange() } while (iregion->match(coord[0],coord[1],coord[2]) == 0); } else error->all(FLERR,"Unknown particle distribution in fix deposit"); + if (varflag && vartest(coord[0],coord[1],coord[2]) == 0) continue; + // adjust vertical coord by offset if (dimension == 2) coord[1] += offset; @@ -583,8 +591,10 @@ void FixDeposit::pre_exchange() // warn if not successful b/c too many attempts - if (!success && comm->me == 0) - error->warning(FLERR,"Particle deposition was unsuccessful"); + if (warnflag && !success && comm->me == 0) { + error->warning(FLERR,"One or more particle depositions were unsuccessful"); + warnflag = 0; + } // reset global natoms,nbonds,etc // increment maxtag_all and maxmol_all if necessary @@ -661,6 +671,8 @@ void FixDeposit::options(int narg, char **arg) iregion = nullptr; idregion = nullptr; + varflag = 0; + vstr = xstr = ystr = zstr = nullptr; mode = ATOM; molfrac = nullptr; rigidflag = 0; @@ -680,6 +692,7 @@ void FixDeposit::options(int narg, char **arg) scaleflag = 1; targetflag = 0; orientflag = 0; + warnflag = 1; rx = 0.0; ry = 0.0; rz = 0.0; @@ -693,6 +706,27 @@ void FixDeposit::options(int narg, char **arg) idregion = utils::strdup(arg[iarg+1]); iarg += 2; + } else if (strcmp(arg[iarg], "var") == 0) { + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_atoms var", error); + delete[] vstr; + vstr = utils::strdup(arg[iarg + 1]); + varflag = 1; + iarg += 2; + } else if (strcmp(arg[iarg], "set") == 0) { + if (iarg + 3 > narg) utils::missing_cmd_args(FLERR, "create_atoms set", error); + if (strcmp(arg[iarg + 1], "x") == 0) { + delete[] xstr; + xstr = utils::strdup(arg[iarg + 2]); + } else if (strcmp(arg[iarg + 1], "y") == 0) { + delete[] ystr; + ystr = utils::strdup(arg[iarg + 2]); + } else if (strcmp(arg[iarg + 1], "z") == 0) { + delete[] zstr; + zstr = utils::strdup(arg[iarg + 2]); + } else + error->all(FLERR, "Unknown create_atoms set option {}", arg[iarg + 2]); + iarg += 3; + } else if (strcmp(arg[iarg],"mol") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal fix deposit command"); int imol = atom->find_molecule(arg[iarg+1]); @@ -815,6 +849,39 @@ void FixDeposit::options(int narg, char **arg) iarg += 4; } else error->all(FLERR,"Illegal fix deposit command"); } + + // error check and further setup for variable test + + if (!vstr && (xstr || ystr || zstr)) + error->all(FLERR, "Incomplete use of variables in create_atoms command"); + if (vstr && (!xstr && !ystr && !zstr)) + error->all(FLERR, "Incomplete use of variables in create_atoms command"); + + if (varflag) { + vvar = input->variable->find(vstr); + if (vvar < 0) error->all(FLERR, "Variable {} for create_atoms does not exist", vstr); + if (!input->variable->equalstyle(vvar)) + error->all(FLERR, "Variable for create_atoms is invalid style"); + + if (xstr) { + xvar = input->variable->find(xstr); + if (xvar < 0) error->all(FLERR, "Variable {} for create_atoms does not exist", xstr); + if (!input->variable->internalstyle(xvar)) + error->all(FLERR, "Variable for create_atoms is invalid style"); + } + if (ystr) { + yvar = input->variable->find(ystr); + if (yvar < 0) error->all(FLERR, "Variable {} for create_atoms does not exist", ystr); + if (!input->variable->internalstyle(yvar)) + error->all(FLERR, "Variable for create_atoms is invalid style"); + } + if (zstr) { + zvar = input->variable->find(zstr); + if (zvar < 0) error->all(FLERR, "Variable {} for create_atoms does not exist", zstr); + if (!input->variable->internalstyle(zvar)) + error->all(FLERR, "Variable for create_atoms is invalid style"); + } + } } /* ---------------------------------------------------------------------- @@ -908,3 +975,20 @@ void *FixDeposit::extract(const char *str, int &itype) return nullptr; } + +/* ---------------------------------------------------------------------- + test a generated atom position against variable evaluation + first set x,y,z values in internal variables +------------------------------------------------------------------------- */ + +int FixDeposit::vartest(double x, double y, double z) +{ + if (xstr) input->variable->internal_set(xvar, x); + if (ystr) input->variable->internal_set(yvar, y); + if (zstr) input->variable->internal_set(zvar, z); + + double value = input->variable->compute_equal(vvar); + + if (value == 0.0) return 0; + return 1; +} diff --git a/src/fix_deposit.h b/src/fix_deposit.h index 2b866dc068..5d2824fba3 100644 --- a/src/fix_deposit.h +++ b/src/fix_deposit.h @@ -40,7 +40,8 @@ class FixDeposit : public Fix { private: int ninsert, ntype, nfreq, seed; int globalflag, localflag, maxattempt, rateflag, scaleflag, targetflag; - int mode, rigidflag, shakeflag, idnext, distflag, orientflag; + int mode, rigidflag, shakeflag, idnext, distflag, orientflag, warnflag; + int varflag, vvar, xvar, yvar, zvar; double lo, hi, deltasq, nearsq, rate, sigma; double vxlo, vxhi, vylo, vyhi, vzlo, vzhi; double xlo, xhi, ylo, yhi, zlo, zhi, xmid, ymid, zmid; @@ -48,6 +49,8 @@ class FixDeposit : public Fix { class Region *iregion; char *idregion; char *idrigid, *idshake; + char *vstr, *xstr, *ystr, *zstr; + char *xstr_copy, *ystr_copy, *zstr_copy; class Molecule **onemols; int nmol, natom_max; @@ -64,6 +67,7 @@ class FixDeposit : public Fix { void find_maxid(); void options(int, char **); + int vartest(double, double, double); // evaluate a variable with new atom position }; } // namespace LAMMPS_NS From d4ee6f476c0c29dc91b3f7749c41495d1e742e8f Mon Sep 17 00:00:00 2001 From: Jacob Gissinger Date: Sun, 29 Oct 2023 16:13:12 -0400 Subject: [PATCH 097/204] var/set docs for fix_deposit --- doc/src/fix_deposit.rst | 48 ++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/doc/src/fix_deposit.rst b/doc/src/fix_deposit.rst index 08711001c5..72db67343e 100644 --- a/doc/src/fix_deposit.rst +++ b/doc/src/fix_deposit.rst @@ -17,12 +17,16 @@ Syntax * M = insert a single atom or molecule every M steps * seed = random # seed (positive integer) * one or more keyword/value pairs may be appended to args -* keyword = *region* or *id* or *global* or *local* or *near* or *gaussian* or *attempt* or *rate* or *vx* or *vy* or *vz* or *target* or *mol* or *molfrac* or *rigid* or *shake* or *orient* or *units* +* keyword = *region* or *var* or *set* or *id* or *global* or *local* or *near* or *gaussian* or *attempt* or *rate* or *vx* or *vy* or *vz* or *target* or *mol* or *molfrac* or *rigid* or *shake* or *orient* or *units* .. parsed-literal:: *region* value = region-ID region-ID = ID of region to use as insertion volume + *var* value = name = variable name to evaluate for test of atom creation + *set* values = dim name + dim = *x* or *y* or *z* + name = name of variable to set with x, y, or z atom position *id* value = *max* or *next* max = atom ID for new atom(s) is max ID of all current atoms plus one next = atom ID for new atom(s) increments by one for every deposition @@ -193,17 +197,19 @@ simulation that is "nearby" the chosen x,y position. In this context, particles is less than the *delta* setting. Once a trial x,y,z position has been selected, the insertion is only -performed if no current atom in the simulation is within a distance R -of any atom in the new particle, including the effect of periodic -boundary conditions if applicable. R is defined by the *near* -keyword. Note that the default value for R is 0.0, which will allow -atoms to strongly overlap if you are inserting where other atoms are -present. This distance test is performed independently for each atom -in an inserted molecule, based on the randomly rotated configuration -of the molecule. If this test fails, a new random position within the -insertion volume is chosen and another trial is made. Up to Q -attempts are made. If the particle is not successfully inserted, -LAMMPS prints a warning message. +performed if both the *near* and *var* keywords are satisfied (see below). +If either the *near* or the *var* keyword is not satisfied, a new random +position within the insertion volume is chosen and another trial is made. +Up to Q attempts are made. If one or more particle insertions are not +successful, LAMMPS prints a warning message. + +The *near* keyword ensures that no current atom in the simulation is within +a distance R of any atom in the new particle, including the effect of +periodic boundary conditions if applicable. Note that the default value +for R is 0.0, which will allow atoms to strongly overlap if you are +inserting where other atoms are present. This distance test is performed +independently for each atom in an inserted molecule, based on the randomly +rotated configuration of the molecule. .. note:: @@ -214,6 +220,24 @@ LAMMPS prints a warning message. existing particle. LAMMPS will issue a warning if R is smaller than this value, based on the radii of existing and inserted particles. +The *var* and *set* keywords can be used together to provide a criterion +for accepting or rejecting the addition of an individual atom, based on its +coordinates. The *name* specified for the *var* keyword is the name of an +:doc:`equal-style variable ` that should evaluate to a zero or +non-zero value based on one or two or three variables that will store the +*x*, *y*, or *z* coordinates of an atom (one variable per coordinate). If +used, these other variables must be :doc:`internal-style variables +` defined in the input script; their initial numeric value can be +anything. They must be internal-style variables, because this command +resets their values directly. The *set* keyword is used to identify the +names of these other variables, one variable for the *x*-coordinate of a +created atom, one for *y*, and one for *z*. When an atom is created, its +:math:`(x,y,z)` coordinates become the values for any *set* variable that +is defined. The *var* variable is then evaluated. If the returned value +is 0.0, the atom is not created. If it is non-zero, the atom is created. +For an example of how to use these keywords, see the +:doc:`create_atoms `command. + The *rate* option moves the insertion volume in the z direction (3d) or y direction (2d). This enables particles to be inserted from a successively higher height over time. Note that this parameter is From f3a7ec8c55e5ae5e81d799e49b34030575a421e2 Mon Sep 17 00:00:00 2001 From: Jacob Gissinger Date: Sun, 29 Oct 2023 16:19:11 -0400 Subject: [PATCH 098/204] copy/paste issues --- src/fix_deposit.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/fix_deposit.cpp b/src/fix_deposit.cpp index 7f11987ad7..6dea4a0932 100644 --- a/src/fix_deposit.cpp +++ b/src/fix_deposit.cpp @@ -707,13 +707,13 @@ void FixDeposit::options(int narg, char **arg) iarg += 2; } else if (strcmp(arg[iarg], "var") == 0) { - if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "create_atoms var", error); + if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "fix deposit var", error); delete[] vstr; vstr = utils::strdup(arg[iarg + 1]); varflag = 1; iarg += 2; } else if (strcmp(arg[iarg], "set") == 0) { - if (iarg + 3 > narg) utils::missing_cmd_args(FLERR, "create_atoms set", error); + if (iarg + 3 > narg) utils::missing_cmd_args(FLERR, "fix deposit set", error); if (strcmp(arg[iarg + 1], "x") == 0) { delete[] xstr; xstr = utils::strdup(arg[iarg + 2]); @@ -724,7 +724,7 @@ void FixDeposit::options(int narg, char **arg) delete[] zstr; zstr = utils::strdup(arg[iarg + 2]); } else - error->all(FLERR, "Unknown create_atoms set option {}", arg[iarg + 2]); + error->all(FLERR, "Unknown fix deposit set option {}", arg[iarg + 2]); iarg += 3; } else if (strcmp(arg[iarg],"mol") == 0) { @@ -853,33 +853,33 @@ void FixDeposit::options(int narg, char **arg) // error check and further setup for variable test if (!vstr && (xstr || ystr || zstr)) - error->all(FLERR, "Incomplete use of variables in create_atoms command"); + error->all(FLERR, "Incomplete use of variables in fix deposit command"); if (vstr && (!xstr && !ystr && !zstr)) - error->all(FLERR, "Incomplete use of variables in create_atoms command"); + error->all(FLERR, "Incomplete use of variables in fix deposit command"); if (varflag) { vvar = input->variable->find(vstr); - if (vvar < 0) error->all(FLERR, "Variable {} for create_atoms does not exist", vstr); + if (vvar < 0) error->all(FLERR, "Variable {} for fix deposit does not exist", vstr); if (!input->variable->equalstyle(vvar)) - error->all(FLERR, "Variable for create_atoms is invalid style"); + error->all(FLERR, "Variable for fix deposit is invalid style"); if (xstr) { xvar = input->variable->find(xstr); - if (xvar < 0) error->all(FLERR, "Variable {} for create_atoms does not exist", xstr); + if (xvar < 0) error->all(FLERR, "Variable {} for fix deposit does not exist", xstr); if (!input->variable->internalstyle(xvar)) - error->all(FLERR, "Variable for create_atoms is invalid style"); + error->all(FLERR, "Variable for fix deposit is invalid style"); } if (ystr) { yvar = input->variable->find(ystr); - if (yvar < 0) error->all(FLERR, "Variable {} for create_atoms does not exist", ystr); + if (yvar < 0) error->all(FLERR, "Variable {} for fix deposit does not exist", ystr); if (!input->variable->internalstyle(yvar)) - error->all(FLERR, "Variable for create_atoms is invalid style"); + error->all(FLERR, "Variable for fix deposit is invalid style"); } if (zstr) { zvar = input->variable->find(zstr); - if (zvar < 0) error->all(FLERR, "Variable {} for create_atoms does not exist", zstr); + if (zvar < 0) error->all(FLERR, "Variable {} for fix deposit does not exist", zstr); if (!input->variable->internalstyle(zvar)) - error->all(FLERR, "Variable for create_atoms is invalid style"); + error->all(FLERR, "Variable for fix deposit is invalid style"); } } } From 6056941688a89796b32847bd3d23ed5fea3fd595 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 30 Oct 2023 11:01:57 -0400 Subject: [PATCH 099/204] add pair_style nb3b/screened by Federica Lodesani --- doc/src/Commands_pair.rst | 1 + doc/src/pair_nb3b_harmonic.rst | 30 +- doc/src/pair_style.rst | 1 + examples/nb3b/PSiO.nb3b.screened | 1 + examples/nb3b/README.nb3b.screened | 41 + examples/nb3b/Table_NP.dat | 14997 ++++++++++++++++ examples/nb3b/data.NaPO3 | 6020 +++++++ examples/nb3b/in.nb3b.screened | 35 + examples/nb3b/log.30Oct23.nb3b.screened.g++.1 | 132 + examples/nb3b/log.30Oct23.nb3b.screened.g++.4 | 132 + src/.gitignore | 2 + src/MANYBODY/pair_nb3b_harmonic.cpp | 26 +- src/MANYBODY/pair_nb3b_harmonic.h | 7 +- src/MANYBODY/pair_nb3b_screened.cpp | 89 + src/MANYBODY/pair_nb3b_screened.h | 39 + 15 files changed, 21536 insertions(+), 17 deletions(-) create mode 120000 examples/nb3b/PSiO.nb3b.screened create mode 100644 examples/nb3b/README.nb3b.screened create mode 100644 examples/nb3b/Table_NP.dat create mode 100644 examples/nb3b/data.NaPO3 create mode 100644 examples/nb3b/in.nb3b.screened create mode 100644 examples/nb3b/log.30Oct23.nb3b.screened.g++.1 create mode 100644 examples/nb3b/log.30Oct23.nb3b.screened.g++.4 create mode 100644 src/MANYBODY/pair_nb3b_screened.cpp create mode 100644 src/MANYBODY/pair_nb3b_screened.h diff --git a/doc/src/Commands_pair.rst b/doc/src/Commands_pair.rst index 923c040aaf..1b98bbad47 100644 --- a/doc/src/Commands_pair.rst +++ b/doc/src/Commands_pair.rst @@ -221,6 +221,7 @@ OPT. * :doc:`multi/lucy ` * :doc:`multi/lucy/rx (k) ` * :doc:`nb3b/harmonic ` + * :doc:`nb3b/screened ` * :doc:`nm/cut (o) ` * :doc:`nm/cut/coul/cut (o) ` * :doc:`nm/cut/coul/long (o) ` diff --git a/doc/src/pair_nb3b_harmonic.rst b/doc/src/pair_nb3b_harmonic.rst index 203c707ec0..f4e254b40c 100644 --- a/doc/src/pair_nb3b_harmonic.rst +++ b/doc/src/pair_nb3b_harmonic.rst @@ -1,14 +1,20 @@ .. index:: pair_style nb3b/harmonic +.. index:: pair_style nb3b/screened pair_style nb3b/harmonic command ================================ +pair_style nb3b/screened command +================================ + Syntax """""" .. code-block:: LAMMPS - pair_style nb3b/harmonic + pair_style style + +* style = *nb3b/harmonic* or *nb3b/screened* Examples """""""" @@ -18,10 +24,14 @@ Examples pair_style nb3b/harmonic pair_coeff * * MgOH.nb3bharmonic Mg O H + pair_style nb3b/screened + pair_coeff * * PO.nb3b.screened P NULL O + pair_coeff * * SiOH.nb3b.screened Si O H + Description """"""""""" -This pair style computes a non-bonded 3-body harmonic potential for the +The pair style *nb3b/harmonic* computes a non-bonded 3-body harmonic potential for the energy E of a system of atoms as .. math:: @@ -33,7 +43,17 @@ prefactor. Note that the usual 1/2 factor is included in *K*\ . The form of the potential is identical to that used in angle_style *harmonic*, but in this case, the atoms do not need to be explicitly bonded. -Only a single pair_coeff command is used with this style which +Style *nb3b/screened* adds an additional exponentially decaying factor to +the harmonic term, given by + +.. math:: + + E = K (\theta - \theta_0)^2 \exp \left(- \frac{r_{ij}}{\rho_{ij}} - \frac{r_{ik}}{\rho_{ik}} \right) + +where :math:`\rho_ij` and :math:`\rho_ik` are the screening factors along +the two bonds. Note that the usual 1/2 factor is included in *K*. + +Only a single pair_coeff command is used with these styles which specifies a potential file with parameters for specified elements. These are mapped to LAMMPS atom types by specifying N additional arguments after the filename in the pair_coeff command, where N is the @@ -61,8 +81,8 @@ type 4 to the C element in the potential file. If a mapping value is specified as NULL, the mapping is not performed. This can be used when the potential is used as part of the *hybrid* pair style. The NULL values are placeholders for atom types that will be used with -other potentials. An example of a pair_coeff command for use with the -*hybrid* pair style is: +other potentials. Two examples of pair_coeff command for use with the +*hybrid* pair style are: .. code-block:: LAMMPS diff --git a/doc/src/pair_style.rst b/doc/src/pair_style.rst index 494a26aacf..9c3a65514a 100644 --- a/doc/src/pair_style.rst +++ b/doc/src/pair_style.rst @@ -298,6 +298,7 @@ accelerated styles exist. * :doc:`multi/lucy ` - DPD potential with density-dependent force * :doc:`multi/lucy/rx ` - reactive DPD potential with density-dependent force * :doc:`nb3b/harmonic ` - non-bonded 3-body harmonic potential +* :doc:`nb3b/screened ` - non-bonded 3-body screened harmonic potential * :doc:`nm/cut ` - N-M potential * :doc:`nm/cut/coul/cut ` - N-M potential with cutoff Coulomb * :doc:`nm/cut/coul/long ` - N-M potential with long-range Coulomb diff --git a/examples/nb3b/PSiO.nb3b.screened b/examples/nb3b/PSiO.nb3b.screened new file mode 120000 index 0000000000..e5b381f0a3 --- /dev/null +++ b/examples/nb3b/PSiO.nb3b.screened @@ -0,0 +1 @@ +../../potentials/PSiO.nb3b.screened \ No newline at end of file diff --git a/examples/nb3b/README.nb3b.screened b/examples/nb3b/README.nb3b.screened new file mode 100644 index 0000000000..c0859c035a --- /dev/null +++ b/examples/nb3b/README.nb3b.screened @@ -0,0 +1,41 @@ +Additional information for pair style nb3b/screened example. + +This input uses the BMP potential (Bertani, M., Menziani, M. C., +& Pedone, A. (2021). Improved empirical force field for multicomponent +oxide glasses and crystals. Physical Review Materials, 5(4), 045602). + +The interatomic potential is obtained by mixing coulombic interactions +with other two-body functions (modified Morse and Buckingham), with a +three-body interaction (screened harmonic function). + +The modified Morse is introduce with Tables and it is combined with +Buckingham and coul/dsf to complete the two-body force field. +The three-body interaction is computed with pair style nb3b/screened +only for P-O-P angle. With the pair_coeff command the atom types +involved in the three-body potential are specified: + +pair_coeff * * nb3b/screened PSiO.nb3b.screened P NULL O + +And they appear in the same order as in the data file: +type 1: P; +type 2: Na, not involved in the three body so indicated as NULL; +type 3: O. + +In the potential file PSiO.nb3b.screened there are the parameters of +all permutations of the required atom types. In the example, also +parameters for Si permutations appear but they are not employed in +the current case. + +# i j k K theta0 rho cutoff +O P P 65.0 109.47 1.0 3.3 +O P Si 120.0 109.47 1.0 0.000 +O P O 0.000 0.000 1.0 0.000 +O Si P 120.0 109.47 1.0 0.000 +O Si Si 25.0 109.47 1.0 3.3 +(...) + +The rho value must be always higher than 0.0. Cutoff and rho are extracted +only from symmetric interactions (e.g. O P P, O Si Si), because of that +you do not need to specify those values for the asymmetric interactions +(e.g. O P Si and O Si P). + diff --git a/examples/nb3b/Table_NP.dat b/examples/nb3b/Table_NP.dat new file mode 100644 index 0000000000..7e3efd836c --- /dev/null +++ b/examples/nb3b/Table_NP.dat @@ -0,0 +1,14997 @@ +Pair_P-O +N 4995 + +1 0.01 1.0000000e+24 1.2000000e+27 +2 0.012 1.1215665e+23 1.1215665e+26 +3 0.014 1.7638578e+22 1.5118781e+25 +4 0.016 3.5527137e+21 2.6645353e+24 +5 0.018 8.6443022e+20 5.7628681e+23 +6 0.02 2.4414063e+20 1.4648438e+23 +7 0.022 7.7790727e+19 4.2431306e+22 +8 0.024 2.7381996e+19 1.3690998e+22 +9 0.026 1.0479000e+19 4.8364614e+21 +10 0.028 4.3062935e+18 1.8455543e+21 +11 0.03 1.8816764e+18 7.5267057e+20 +12 0.032 8.6736174e+17 3.2526065e+20 +13 0.034 4.1903760e+17 1.4789562e+20 +14 0.036 2.1104253e+17 7.0347511e+19 +15 0.038 1.1030542e+17 3.4833290e+19 +16 0.04 5.9604645e+16 1.7881393e+19 +17 0.042 3.3190097e+16 9.4828847e+18 +18 0.044 1.8991877e+16 5.1796027e+18 +19 0.046 1.1140534e+16 2.9062263e+18 +20 0.048 6.6850576e+15 1.6712644e+18 +21 0.05 4.0960000e+15 9.8304000e+17 +22 0.052 2.5583495e+15 5.9038835e+17 +23 0.054 1.6265780e+15 3.6146177e+17 +24 0.056 1.0513412e+15 2.2528740e+17 +25 0.058 6.9002381e+14 1.4276355e+17 +26 0.06 4.5939366e+14 9.1878732e+16 +27 0.062 3.0995577e+14 5.9991439e+16 +28 0.064 2.1175824e+14 3.9704669e+16 +29 0.066 1.4637698e+14 2.6613996e+16 +30 0.068 1.0230410e+14 1.8053665e+16 +31 0.07 7.2247616e+13 1.2385306e+16 +32 0.072 5.1524056e+13 8.5873427e+15 +33 0.074 3.7086800e+13 6.0140757e+15 +34 0.076 2.6930033e+13 4.2521105e+15 +35 0.078 1.9718087e+13 3.0335518e+15 +36 0.08 1.4551915e+13 2.1827873e+15 +37 0.082 1.0820162e+13 1.5834384e+15 +38 0.084 8.1030509e+12 1.1575787e+15 +39 0.086 6.1096817e+12 8.5251373e+14 +40 0.088 4.6366887e+12 6.3227572e+14 +41 0.09 3.5407062e+12 4.7209415e+14 +42 0.092 2.7198570e+12 3.5476396e+14 +43 0.094 2.1011921e+12 2.6823729e+14 +44 0.096 1.6320941e+12 2.0401177e+14 +45 0.098 1.2743452e+12 1.5604227e+14 +46 0.1 1.0000000e+12 1.2000000e+14 +47 0.102 7.8849318e+11 9.2763903e+13 +48 0.104 6.2459705e+11 7.2068890e+13 +49 0.106 4.9696937e+11 5.6260683e+13 +50 0.108 3.9711376e+11 4.4123751e+13 +51 0.11 3.1863082e+11 3.4759726e+13 +52 0.112 2.5667510e+11 2.7500903e+13 +53 0.114 2.0755911e+11 2.1848327e+13 +54 0.116 1.6846285e+11 1.7427191e+13 +55 0.118 1.3721953e+11 1.3954528e+13 +56 0.12 1.1215666e+11 1.1215666e+13 +57 0.122 9.1977596e+10 9.0469762e+12 +58 0.124 7.5672800e+10 7.3231738e+12 +59 0.126 6.2453027e+10 5.9479069e+12 +60 0.128 5.1698793e+10 4.8467614e+12 +61 0.13 4.2921987e+10 3.9620292e+12 +62 0.132 3.5736571e+10 3.2487788e+12 +63 0.134 2.9836129e+10 2.6718918e+12 +64 0.136 2.4976592e+10 2.2038166e+12 +65 0.138 2.0962885e+10 1.8228592e+12 +66 0.14 1.7638582e+10 1.5118781e+12 +67 0.142 1.4877844e+10 1.2572822e+12 +68 0.144 1.2579119e+10 1.0482596e+12 +69 0.146 1.0660213e+10 8.7618161e+11 +70 0.148 9.0543985e+09 7.3414012e+11 +71 0.15 7.7073505e+09 6.1658775e+11 +72 0.152 6.5747191e+09 5.1905648e+11 +73 0.154 5.6201984e+09 4.3793726e+11 +74 0.156 4.8139898e+09 3.7030663e+11 +75 0.158 4.1315722e+09 3.1379003e+11 +76 0.16 3.5527174e+09 2.6645355e+11 +77 0.162 3.0606971e+09 2.2671805e+11 +78 0.164 2.6416448e+09 1.9329084e+11 +79 0.166 2.2840396e+09 1.6511105e+11 +80 0.168 1.9782875e+09 1.4130601e+11 +81 0.17 1.7163815e+09 1.2115611e+11 +82 0.172 1.4916250e+09 1.0406664e+11 +83 0.174 1.2984050e+09 8.9544952e+10 +84 0.176 1.1320075e+09 7.7182113e+10 +85 0.178 9.8846536e+08 6.6637904e+10 +86 0.18 8.6443356e+08 5.7628699e+10 +87 0.182 7.5708604e+08 4.9917561e+10 +88 0.184 6.6403086e+08 4.3306164e+10 +89 0.186 5.8323970e+08 3.7628176e+10 +90 0.188 5.1298955e+08 3.2743826e+10 +91 0.19 4.5181416e+08 2.8535447e+10 +92 0.192 3.9846362e+08 2.4903797e+10 +93 0.194 3.5187067e+08 2.1765021e+10 +94 0.196 3.1112251e+08 1.9048145e+10 +95 0.198 2.7543715e+08 1.6692992e+10 +96 0.2 2.4414363e+08 1.4648453e+10 +97 0.202 2.1666539e+08 1.2871050e+10 +98 0.204 1.9250616e+08 1.1323734e+10 +99 0.206 1.7123824e+08 9.9748885e+09 +100 0.208 1.5249240e+08 8.7974871e+09 +101 0.21 1.3594949e+08 7.7683942e+09 +102 0.212 1.2133324e+08 6.8677740e+09 +103 0.214 1.0840415e+08 6.0785955e+09 +104 0.216 9.6954366e+07 5.3862146e+09 +105 0.218 8.6803206e+07 4.7780219e+09 +106 0.22 7.7793435e+07 4.2431448e+09 +107 0.222 6.9788037e+07 3.7721956e+09 +108 0.224 6.2667469e+07 3.3570578e+09 +109 0.226 5.6327303e+07 2.9907048e+09 +110 0.228 5.0676205e+07 2.6670457e+09 +111 0.23 4.5634197e+07 2.3807941e+09 +112 0.232 4.1131166e+07 2.1273560e+09 +113 0.234 3.7105574e+07 1.9027342e+09 +114 0.236 3.3503349e+07 1.7034467e+09 +115 0.238 3.0276930e+07 1.5264567e+09 +116 0.24 2.7384433e+07 1.3691126e+09 +117 0.242 2.4788934e+07 1.2290965e+09 +118 0.244 2.2457853e+07 1.1043798e+09 +119 0.246 2.0362405e+07 9.9318533e+08 +120 0.248 1.8477140e+07 8.9395442e+08 +121 0.25 1.6779528e+07 8.0531856e+08 +122 0.252 1.5249607e+07 7.2607491e+08 +123 0.254 1.3869675e+07 6.5516523e+08 +124 0.256 1.2624014e+07 5.9165749e+08 +125 0.258 1.1498660e+07 5.3473001e+08 +126 0.26 1.0481193e+07 4.8365770e+08 +127 0.262 9.5605547e+06 4.3780006e+08 +128 0.264 8.7268950e+06 3.9659077e+08 +129 0.266 7.9714281e+06 3.5952866e+08 +130 0.268 7.2863127e+06 3.2616976e+08 +131 0.27 6.6645437e+06 2.9612046e+08 +132 0.272 6.0998582e+06 2.6903144e+08 +133 0.274 5.5866520e+06 2.4459243e+08 +134 0.276 5.1199063e+06 2.2252763e+08 +135 0.278 4.6951229e+06 2.0259162e+08 +136 0.28 4.3082669e+06 1.8456585e+08 +137 0.282 3.9557163e+06 1.6825557e+08 +138 0.284 3.6342172e+06 1.5348704e+08 +139 0.286 3.3408441e+06 1.4010516e+08 +140 0.288 3.0729648e+06 1.2797137e+08 +141 0.29 2.8282094e+06 1.1696179e+08 +142 0.292 2.6044424e+06 1.0696555e+08 +143 0.294 2.3997381e+06 9.7883372e+07 +144 0.296 2.2123590e+06 8.9626295e+07 +145 0.298 2.0407362e+06 8.2114523e+07 +146 0.3 1.8834520e+06 7.5276442e+07 +147 0.302 1.7392243e+06 6.9047731e+07 +148 0.304 1.6068935e+06 6.3370576e+07 +149 0.306 1.4854091e+06 5.8192979e+07 +150 0.308 1.3738198e+06 5.3468137e+07 +151 0.31 1.2712629e+06 4.9153895e+07 +152 0.312 1.1769559e+06 4.5212259e+07 +153 0.314 1.0901884e+06 4.1608962e+07 +154 0.316 1.0103152e+06 3.8313077e+07 +155 0.318 9.3674984e+05 3.5296676e+07 +156 0.32 8.6895905e+05 3.2534519e+07 +157 0.322 8.0645754e+05 3.0003783e+07 +158 0.324 7.4880345e+05 2.7683819e+07 +159 0.326 6.9559425e+05 2.5555930e+07 +160 0.328 6.4646301e+05 2.3603178e+07 +161 0.33 6.0107505e+05 2.1810208e+07 +162 0.332 5.5912496e+05 2.0163095e+07 +163 0.334 5.2033388e+05 1.8649199e+07 +164 0.336 4.8444703e+05 1.7257042e+07 +165 0.338 4.5123153e+05 1.5976195e+07 +166 0.34 4.2047439e+05 1.4797176e+07 +167 0.342 3.9198071e+05 1.3711361e+07 +168 0.344 3.6557206e+05 1.2710900e+07 +169 0.346 3.4108498e+05 1.1788644e+07 +170 0.348 3.1836970e+05 1.0938079e+07 +171 0.35 2.9728884e+05 1.0153268e+07 +172 0.352 2.7771641e+05 9.4287926e+06 +173 0.354 2.5953675e+05 8.7597111e+06 +174 0.356 2.4264366e+05 8.1415096e+06 +175 0.358 2.2693955e+05 7.5700648e+06 +176 0.36 2.1233475e+05 7.0416079e+06 +177 0.362 1.9874677e+05 6.5526923e+06 +178 0.364 1.8609972e+05 6.1001647e+06 +179 0.366 1.7432378e+05 5.6811386e+06 +180 0.368 1.6335460e+05 5.2929703e+06 +181 0.37 1.5313294e+05 4.9332376e+06 +182 0.372 1.4360418e+05 4.5997201e+06 +183 0.374 1.3471795e+05 4.2903813e+06 +184 0.376 1.2642779e+05 4.0033525e+06 +185 0.378 1.1869081e+05 3.7369184e+06 +186 0.38 1.1146743e+05 3.4895036e+06 +187 0.382 1.0472108e+05 3.2596606e+06 +188 0.384 9.8417967e+04 3.0460588e+06 +189 0.386 9.2526840e+04 2.8474745e+06 +190 0.388 8.7018810e+04 2.6627820e+06 +191 0.39 8.1867144e+04 2.4909450e+06 +192 0.392 7.7047098e+04 2.3310093e+06 +193 0.394 7.2535760e+04 2.1820959e+06 +194 0.396 6.8311908e+04 2.0433947e+06 +195 0.398 6.4355872e+04 1.9141588e+06 +196 0.4 6.0649422e+04 1.7936994e+06 +197 0.402 5.7175649e+04 1.6813806e+06 +198 0.404 5.3918865e+04 1.5766157e+06 +199 0.406 5.0864512e+04 1.4788629e+06 +200 0.408 4.7999073e+04 1.3876214e+06 +201 0.41 4.5309995e+04 1.3024286e+06 +202 0.412 4.2785613e+04 1.2228567e+06 +203 0.414 4.0415085e+04 1.1485100e+06 +204 0.416 3.8188334e+04 1.0790225e+06 +205 0.418 3.6095982e+04 1.0140553e+06 +206 0.42 3.4129309e+04 9.5329464e+05 +207 0.422 3.2280194e+04 8.9644986e+05 +208 0.424 3.0541078e+04 8.4325165e+05 +209 0.426 2.8904923e+04 7.9345038e+05 +210 0.428 2.7365167e+04 7.4681454e+05 +211 0.43 2.5915698e+04 7.0312938e+05 +212 0.432 2.4550816e+04 6.6219564e+05 +213 0.434 2.3265205e+04 6.2382833e+05 +214 0.436 2.2053906e+04 5.8785568e+05 +215 0.438 2.0912292e+04 5.5411812e+05 +216 0.44 1.9836043e+04 5.2246739e+05 +217 0.442 1.8821123e+04 4.9276565e+05 +218 0.444 1.7863766e+04 4.6488477e+05 +219 0.446 1.6960450e+04 4.3870552e+05 +220 0.448 1.6107884e+04 4.1411700e+05 +221 0.45 1.5302991e+04 3.9101596e+05 +222 0.452 1.4542893e+04 3.6930630e+05 +223 0.454 1.3824898e+04 3.4889848e+05 +224 0.456 1.3146487e+04 3.2970912e+05 +225 0.458 1.2505301e+04 3.1166047e+05 +226 0.46 1.1899133e+04 2.9468009e+05 +227 0.462 1.1325913e+04 2.7870041e+05 +228 0.464 1.0783706e+04 2.6365840e+05 +229 0.466 1.0270694e+04 2.4949525e+05 +230 0.468 9.7851757e+03 2.3615606e+05 +231 0.47 9.3255547e+03 2.2358960e+05 +232 0.472 8.8903341e+03 2.1174800e+05 +233 0.474 8.4781093e+03 2.0058656e+05 +234 0.476 8.0875623e+03 1.9006348e+05 +235 0.478 7.7174559e+03 1.8013972e+05 +236 0.48 7.3666283e+03 1.7077877e+05 +237 0.482 7.0339884e+03 1.6194648e+05 +238 0.484 6.7185113e+03 1.5361090e+05 +239 0.486 6.4192336e+03 1.4574213e+05 +240 0.488 6.1352502e+03 1.3831220e+05 +241 0.49 5.8657098e+03 1.3129491e+05 +242 0.492 5.6098119e+03 1.2466571e+05 +243 0.494 5.3668036e+03 1.1840163e+05 +244 0.496 5.1359764e+03 1.1248112e+05 +245 0.498 4.9166635e+03 1.0688400e+05 +246 0.5 4.7082374e+03 1.0159134e+05 +247 0.502 4.5101071e+03 9.6585398e+04 +248 0.504 4.3217158e+03 9.1849521e+04 +249 0.506 4.1425394e+03 8.7368091e+04 +250 0.508 3.9720836e+03 8.3126447e+04 +251 0.51 3.8098829e+03 7.9110830e+04 +252 0.512 3.6554982e+03 7.5308317e+04 +253 0.514 3.5085157e+03 7.1706774e+04 +254 0.516 3.3685448e+03 6.8294800e+04 +255 0.518 3.2352172e+03 6.5061683e+04 +256 0.52 3.1081855e+03 6.1997355e+04 +257 0.522 2.9871216e+03 5.9092350e+04 +258 0.524 2.8717159e+03 5.6337769e+04 +259 0.526 2.7616759e+03 5.3725239e+04 +260 0.528 2.6567255e+03 5.1246885e+04 +261 0.53 2.5566038e+03 4.8895296e+04 +262 0.532 2.4610644e+03 4.6663498e+04 +263 0.534 2.3698744e+03 4.4544923e+04 +264 0.536 2.2828134e+03 4.2533388e+04 +265 0.538 2.1996733e+03 4.0623069e+04 +266 0.54 2.1202573e+03 3.8808479e+04 +267 0.542 2.0443791e+03 3.7084450e+04 +268 0.544 1.9718624e+03 3.5446108e+04 +269 0.546 1.9025406e+03 3.3888860e+04 +270 0.548 1.8362558e+03 3.2408375e+04 +271 0.55 1.7728586e+03 3.1000569e+04 +272 0.552 1.7122076e+03 2.9661588e+04 +273 0.554 1.6541688e+03 2.8387797e+04 +274 0.556 1.5986153e+03 2.7175766e+04 +275 0.558 1.5454267e+03 2.6022256e+04 +276 0.56 1.4944893e+03 2.4924210e+04 +277 0.562 1.4456948e+03 2.3878740e+04 +278 0.564 1.3989411e+03 2.2883121e+04 +279 0.566 1.3541309e+03 2.1934775e+04 +280 0.568 1.3111721e+03 2.1031270e+04 +281 0.57 1.2699774e+03 2.0170304e+04 +282 0.572 1.2304640e+03 1.9349703e+04 +283 0.574 1.1925531e+03 1.8567412e+04 +284 0.576 1.1561701e+03 1.7821487e+04 +285 0.578 1.1212441e+03 1.7110088e+04 +286 0.58 1.0877079e+03 1.6431475e+04 +287 0.582 1.0554974e+03 1.5784005e+04 +288 0.584 1.0245521e+03 1.5166117e+04 +289 0.586 9.9481424e+02 1.4576339e+04 +290 0.588 9.6622897e+02 1.4013273e+04 +291 0.59 9.3874422e+02 1.3475599e+04 +292 0.592 9.1231048e+02 1.2962064e+04 +293 0.594 8.8688066e+02 1.2471482e+04 +294 0.596 8.6241000e+02 1.2002731e+04 +295 0.598 8.3885590e+02 1.1554744e+04 +296 0.6 8.1617785e+02 1.1126512e+04 +297 0.602 7.9433732e+02 1.0717080e+04 +298 0.604 7.7329761e+02 1.0325540e+04 +299 0.606 7.5302381e+02 9.9510306e+03 +300 0.608 7.3348267e+02 9.5927373e+03 +301 0.61 7.1464256e+02 9.2498855e+03 +302 0.612 6.9647333e+02 8.9217407e+03 +303 0.614 6.7894626e+02 8.6076059e+03 +304 0.616 6.6203401e+02 8.3068195e+03 +305 0.618 6.4571050e+02 8.0187534e+03 +306 0.62 6.2995091e+02 7.7428113e+03 +307 0.622 6.1473155e+02 7.4784268e+03 +308 0.624 6.0002986e+02 7.2250618e+03 +309 0.626 5.8582430e+02 6.9822055e+03 +310 0.628 5.7209436e+02 6.7493721e+03 +311 0.63 5.5882044e+02 6.5261002e+03 +312 0.632 5.4598387e+02 6.3119513e+03 +313 0.634 5.3356683e+02 6.1065083e+03 +314 0.636 5.2155230e+02 5.9093748e+03 +315 0.638 5.0992404e+02 5.7201738e+03 +316 0.64 4.9866656e+02 5.5385467e+03 +317 0.642 4.8776504e+02 5.3641523e+03 +318 0.644 4.7720534e+02 5.1966662e+03 +319 0.646 4.6697397e+02 5.0357795e+03 +320 0.648 4.5705802e+02 4.8811983e+03 +321 0.65 4.4744516e+02 4.7326428e+03 +322 0.652 4.3812361e+02 4.5898466e+03 +323 0.654 4.2908210e+02 4.4525561e+03 +324 0.656 4.2030988e+02 4.3205297e+03 +325 0.658 4.1179663e+02 4.1935373e+03 +326 0.66 4.0353252e+02 4.0713597e+03 +327 0.662 3.9550812e+02 3.9537881e+03 +328 0.664 3.8771443e+02 3.8406234e+03 +329 0.666 3.8014282e+02 3.7316760e+03 +330 0.668 3.7278503e+02 3.6267650e+03 +331 0.67 3.6563318e+02 3.5257179e+03 +332 0.672 3.5867970e+02 3.4283706e+03 +333 0.674 3.5191734e+02 3.3345660e+03 +334 0.676 3.4533917e+02 3.2441547e+03 +335 0.678 3.3893855e+02 3.1569940e+03 +336 0.68 3.3270912e+02 3.0729478e+03 +337 0.682 3.2664477e+02 2.9918861e+03 +338 0.684 3.2073967e+02 2.9136850e+03 +339 0.686 3.1498820e+02 2.8382261e+03 +340 0.688 3.0938501e+02 2.7653965e+03 +341 0.69 3.0392494e+02 2.6950881e+03 +342 0.692 2.9860304e+02 2.6271981e+03 +343 0.694 2.9341460e+02 2.5616278e+03 +344 0.696 2.8835505e+02 2.4982834e+03 +345 0.698 2.8342004e+02 2.4370750e+03 +346 0.7 2.7860538e+02 2.3779167e+03 +347 0.702 2.7390706e+02 2.3207266e+03 +348 0.704 2.6932122e+02 2.2654260e+03 +349 0.706 2.6484415e+02 2.2119402e+03 +350 0.708 2.6047229e+02 2.1601974e+03 +351 0.71 2.5620224e+02 2.1101290e+03 +352 0.712 2.5203070e+02 2.0616695e+03 +353 0.714 2.4795453e+02 2.0147561e+03 +354 0.716 2.4397069e+02 1.9693289e+03 +355 0.718 2.4007626e+02 1.9253304e+03 +356 0.72 2.3626845e+02 1.8827057e+03 +357 0.722 2.3254456e+02 1.8414021e+03 +358 0.724 2.2890200e+02 1.8013694e+03 +359 0.726 2.2533827e+02 1.7625593e+03 +360 0.728 2.2185098e+02 1.7249256e+03 +361 0.73 2.1843781e+02 1.6884242e+03 +362 0.732 2.1509655e+02 1.6530127e+03 +363 0.734 2.1182506e+02 1.6186505e+03 +364 0.736 2.0862128e+02 1.5852988e+03 +365 0.738 2.0548322e+02 1.5529203e+03 +366 0.74 2.0240897e+02 1.5214794e+03 +367 0.742 1.9939670e+02 1.4909417e+03 +368 0.744 1.9644462e+02 1.4612746e+03 +369 0.746 1.9355104e+02 1.4324465e+03 +370 0.748 1.9071430e+02 1.4044273e+03 +371 0.75 1.8793281e+02 1.3771880e+03 +372 0.752 1.8520504e+02 1.3507010e+03 +373 0.754 1.8252952e+02 1.3249395e+03 +374 0.756 1.7990482e+02 1.2998781e+03 +375 0.758 1.7732956e+02 1.2754921e+03 +376 0.76 1.7480242e+02 1.2517582e+03 +377 0.762 1.7232211e+02 1.2286536e+03 +378 0.764 1.6988740e+02 1.2061568e+03 +379 0.766 1.6749709e+02 1.1842468e+03 +380 0.768 1.6515003e+02 1.1629037e+03 +381 0.77 1.6284511e+02 1.1421083e+03 +382 0.772 1.6058125e+02 1.1218421e+03 +383 0.774 1.5835740e+02 1.1020873e+03 +384 0.776 1.5617257e+02 1.0828270e+03 +385 0.778 1.5402577e+02 1.0640447e+03 +386 0.78 1.5191608e+02 1.0457247e+03 +387 0.782 1.4984258e+02 1.0278519e+03 +388 0.784 1.4780438e+02 1.0104117e+03 +389 0.786 1.4580065e+02 9.9339015e+02 +390 0.788 1.4383055e+02 9.7677373e+02 +391 0.79 1.4189329e+02 9.6054951e+02 +392 0.792 1.3998810e+02 9.4470503e+02 +393 0.794 1.3811423e+02 9.2922831e+02 +394 0.796 1.3627095e+02 9.1410780e+02 +395 0.798 1.3445757e+02 8.9933239e+02 +396 0.8 1.3267340e+02 8.8489139e+02 +397 0.802 1.3091779e+02 8.7077450e+02 +398 0.804 1.2919009e+02 8.5697181e+02 +399 0.806 1.2748970e+02 8.4347376e+02 +400 0.808 1.2581600e+02 8.3027116e+02 +401 0.81 1.2416842e+02 8.1735514e+02 +402 0.812 1.2254639e+02 8.0471716e+02 +403 0.814 1.2094937e+02 7.9234898e+02 +404 0.816 1.1937682e+02 7.8024267e+02 +405 0.818 1.1782823e+02 7.6839058e+02 +406 0.82 1.1630310e+02 7.5678534e+02 +407 0.822 1.1480093e+02 7.4541982e+02 +408 0.824 1.1332126e+02 7.3428717e+02 +409 0.826 1.1186363e+02 7.2338077e+02 +410 0.828 1.1042759e+02 7.1269422e+02 +411 0.83 1.0901271e+02 7.0222137e+02 +412 0.832 1.0761857e+02 6.9195627e+02 +413 0.834 1.0624475e+02 6.8189317e+02 +414 0.836 1.0489086e+02 6.7202654e+02 +415 0.838 1.0355652e+02 6.6235100e+02 +416 0.84 1.0224134e+02 6.5286141e+02 +417 0.842 1.0094495e+02 6.4355275e+02 +418 0.844 9.9667008e+01 6.3442021e+02 +419 0.846 9.8407157e+01 6.2545913e+02 +420 0.848 9.7165060e+01 6.1666499e+02 +421 0.85 9.5940388e+01 6.0803343e+02 +422 0.852 9.4732821e+01 5.9956026e+02 +423 0.854 9.3542044e+01 5.9124140e+02 +424 0.856 9.2367755e+01 5.8307290e+02 +425 0.858 9.1209655e+01 5.7505097e+02 +426 0.86 9.0067456e+01 5.6717191e+02 +427 0.862 8.8940874e+01 5.5943217e+02 +428 0.864 8.7829636e+01 5.5182828e+02 +429 0.866 8.6733473e+01 5.4435691e+02 +430 0.868 8.5652123e+01 5.3701484e+02 +431 0.87 8.4585330e+01 5.2979891e+02 +432 0.872 8.3532845e+01 5.2270612e+02 +433 0.874 8.2494425e+01 5.1573352e+02 +434 0.876 8.1469832e+01 5.0887826e+02 +435 0.878 8.0458836e+01 5.0213758e+02 +436 0.88 7.9461208e+01 4.9550883e+02 +437 0.882 7.8476727e+01 4.8898941e+02 +438 0.884 7.7505179e+01 4.8257680e+02 +439 0.886 7.6546351e+01 4.7626858e+02 +440 0.888 7.5600036e+01 4.7006239e+02 +441 0.89 7.4666034e+01 4.6395593e+02 +442 0.892 7.3744148e+01 4.5794699e+02 +443 0.894 7.2834183e+01 4.5203342e+02 +444 0.896 7.1935952e+01 4.4621311e+02 +445 0.898 7.1049270e+01 4.4048405e+02 +446 0.9 7.0173956e+01 4.3484425e+02 +447 0.902 6.9309834e+01 4.2929182e+02 +448 0.904 6.8456732e+01 4.2382488e+02 +449 0.906 6.7614479e+01 4.1844165e+02 +450 0.908 6.6782911e+01 4.1314035e+02 +451 0.91 6.5961864e+01 4.0791929e+02 +452 0.912 6.5151181e+01 4.0277682e+02 +453 0.914 6.4350706e+01 3.9771133e+02 +454 0.916 6.3560285e+01 3.9272124e+02 +455 0.918 6.2779771e+01 3.8780504e+02 +456 0.92 6.2009017e+01 3.8296125e+02 +457 0.922 6.1247879e+01 3.7818844e+02 +458 0.924 6.0496217e+01 3.7348519e+02 +459 0.926 5.9753893e+01 3.6885016e+02 +460 0.928 5.9020772e+01 3.6428200e+02 +461 0.93 5.8296721e+01 3.5977945e+02 +462 0.932 5.7581611e+01 3.5534122e+02 +463 0.934 5.6875314e+01 3.5096611e+02 +464 0.936 5.6177705e+01 3.4665292e+02 +465 0.938 5.5488662e+01 3.4240050e+02 +466 0.94 5.4808064e+01 3.3820770e+02 +467 0.942 5.4135792e+01 3.3407344e+02 +468 0.944 5.3471731e+01 3.2999662e+02 +469 0.946 5.2815768e+01 3.2597622e+02 +470 0.948 5.2167790e+01 3.2201121e+02 +471 0.95 5.1527687e+01 3.1810059e+02 +472 0.952 5.0895352e+01 3.1424339e+02 +473 0.954 5.0270678e+01 3.1043867e+02 +474 0.956 4.9653563e+01 3.0668550e+02 +475 0.958 4.9043903e+01 3.0298299e+02 +476 0.96 4.8441597e+01 2.9933025e+02 +477 0.962 4.7846549e+01 2.9572642e+02 +478 0.964 4.7258660e+01 2.9217067e+02 +479 0.966 4.6677835e+01 2.8866218e+02 +480 0.968 4.6103980e+01 2.8520015e+02 +481 0.97 4.5537004e+01 2.8178380e+02 +482 0.972 4.4976815e+01 2.7841236e+02 +483 0.974 4.4423325e+01 2.7508510e+02 +484 0.976 4.3876446e+01 2.7180128e+02 +485 0.978 4.3336091e+01 2.6856019e+02 +486 0.98 4.2802177e+01 2.6536114e+02 +487 0.982 4.2274619e+01 2.6220345e+02 +488 0.984 4.1753336e+01 2.5908645e+02 +489 0.986 4.1238247e+01 2.5600949e+02 +490 0.988 4.0729272e+01 2.5297194e+02 +491 0.99 4.0226333e+01 2.4997317e+02 +492 0.992 3.9729354e+01 2.4701257e+02 +493 0.994 3.9238258e+01 2.4408956e+02 +494 0.996 3.8752971e+01 2.4120354e+02 +495 0.998 3.8273419e+01 2.3835394e+02 +496 1.0 3.7799531e+01 2.3554021e+02 +497 1.002 3.7331235e+01 2.3276180e+02 +498 1.004 3.6868461e+01 2.3001817e+02 +499 1.006 3.6411139e+01 2.2730880e+02 +500 1.008 3.5959203e+01 2.2463317e+02 +501 1.01 3.5512584e+01 2.2199078e+02 +502 1.012 3.5071218e+01 2.1938113e+02 +503 1.014 3.4635038e+01 2.1680374e+02 +504 1.016 3.4203982e+01 2.1425815e+02 +505 1.018 3.3777985e+01 2.1174387e+02 +506 1.02 3.3356986e+01 2.0926046e+02 +507 1.022 3.2940923e+01 2.0680746e+02 +508 1.024 3.2529736e+01 2.0438445e+02 +509 1.026 3.2123365e+01 2.0199099e+02 +510 1.028 3.1721753e+01 1.9962665e+02 +511 1.03 3.1324840e+01 1.9729103e+02 +512 1.032 3.0932569e+01 1.9498372e+02 +513 1.034 3.0544886e+01 1.9270432e+02 +514 1.036 3.0161734e+01 1.9045243e+02 +515 1.038 2.9783058e+01 1.8822768e+02 +516 1.04 2.9408805e+01 1.8602968e+02 +517 1.042 2.9038922e+01 1.8385807e+02 +518 1.044 2.8673356e+01 1.8171249e+02 +519 1.046 2.8312055e+01 1.7959257e+02 +520 1.048 2.7954969e+01 1.7749796e+02 +521 1.05 2.7602046e+01 1.7542833e+02 +522 1.052 2.7253239e+01 1.7338333e+02 +523 1.054 2.6908497e+01 1.7136262e+02 +524 1.056 2.6567772e+01 1.6936590e+02 +525 1.058 2.6231018e+01 1.6739282e+02 +526 1.06 2.5898186e+01 1.6544308e+02 +527 1.062 2.5569230e+01 1.6351637e+02 +528 1.064 2.5244105e+01 1.6161238e+02 +529 1.066 2.4922765e+01 1.5973081e+02 +530 1.068 2.4605167e+01 1.5787137e+02 +531 1.07 2.4291265e+01 1.5603376e+02 +532 1.072 2.3981017e+01 1.5421771e+02 +533 1.074 2.3674380e+01 1.5242293e+02 +534 1.076 2.3371312e+01 1.5064914e+02 +535 1.078 2.3071770e+01 1.4889607e+02 +536 1.08 2.2775714e+01 1.4716347e+02 +537 1.082 2.2483103e+01 1.4545106e+02 +538 1.084 2.2193896e+01 1.4375858e+02 +539 1.086 2.1908055e+01 1.4208578e+02 +540 1.088 2.1625540e+01 1.4043242e+02 +541 1.09 2.1346313e+01 1.3879824e+02 +542 1.092 2.1070335e+01 1.3718300e+02 +543 1.094 2.0797568e+01 1.3558646e+02 +544 1.096 2.0527976e+01 1.3400840e+02 +545 1.098 2.0261523e+01 1.3244856e+02 +546 1.1 1.9998170e+01 1.3090674e+02 +547 1.102 1.9737884e+01 1.2938270e+02 +548 1.104 1.9480628e+01 1.2787622e+02 +549 1.106 1.9226367e+01 1.2638708e+02 +550 1.108 1.8975068e+01 1.2491508e+02 +551 1.11 1.8726696e+01 1.2345999e+02 +552 1.112 1.8481217e+01 1.2202161e+02 +553 1.114 1.8238598e+01 1.2059974e+02 +554 1.116 1.7998807e+01 1.1919417e+02 +555 1.118 1.7761811e+01 1.1780470e+02 +556 1.12 1.7527578e+01 1.1643114e+02 +557 1.122 1.7296076e+01 1.1507329e+02 +558 1.124 1.7067274e+01 1.1373096e+02 +559 1.126 1.6841142e+01 1.1240397e+02 +560 1.128 1.6617648e+01 1.1109213e+02 +561 1.13 1.6396763e+01 1.0979525e+02 +562 1.132 1.6178457e+01 1.0851316e+02 +563 1.134 1.5962701e+01 1.0724568e+02 +564 1.136 1.5749465e+01 1.0599263e+02 +565 1.138 1.5538721e+01 1.0475385e+02 +566 1.14 1.5330440e+01 1.0352915e+02 +567 1.142 1.5124595e+01 1.0231837e+02 +568 1.144 1.4921158e+01 1.0112136e+02 +569 1.146 1.4720100e+01 9.9937933e+01 +570 1.148 1.4521397e+01 9.8767942e+01 +571 1.15 1.4325020e+01 9.7611224e+01 +572 1.152 1.4130943e+01 9.6467623e+01 +573 1.154 1.3939141e+01 9.5336985e+01 +574 1.156 1.3749587e+01 9.4219156e+01 +575 1.158 1.3562256e+01 9.3113986e+01 +576 1.16 1.3377122e+01 9.2021327e+01 +577 1.162 1.3194162e+01 9.0941032e+01 +578 1.164 1.3013350e+01 8.9872956e+01 +579 1.166 1.2834662e+01 8.8816958e+01 +580 1.168 1.2658074e+01 8.7772895e+01 +581 1.17 1.2483563e+01 8.6740629e+01 +582 1.172 1.2311104e+01 8.5720023e+01 +583 1.174 1.2140675e+01 8.4710942e+01 +584 1.176 1.1972253e+01 8.3713252e+01 +585 1.178 1.1805815e+01 8.2726821e+01 +586 1.18 1.1641338e+01 8.1751518e+01 +587 1.182 1.1478801e+01 8.0787216e+01 +588 1.184 1.1318182e+01 7.9833788e+01 +589 1.186 1.1159459e+01 7.8891108e+01 +590 1.188 1.1002610e+01 7.7959053e+01 +591 1.19 1.0847616e+01 7.7037500e+01 +592 1.192 1.0694453e+01 7.6126330e+01 +593 1.194 1.0543103e+01 7.5225422e+01 +594 1.196 1.0393545e+01 7.4334660e+01 +595 1.198 1.0245758e+01 7.3453928e+01 +596 1.2 1.0099723e+01 7.2583111e+01 +597 1.202 9.9554191e+00 7.1722095e+01 +598 1.204 9.8128278e+00 7.0870770e+01 +599 1.206 9.6719296e+00 7.0029025e+01 +600 1.208 9.5327054e+00 6.9196750e+01 +601 1.21 9.3951364e+00 6.8373838e+01 +602 1.212 9.2592039e+00 6.7560184e+01 +603 1.214 9.1248896e+00 6.6755681e+01 +604 1.216 8.9921751e+00 6.5960226e+01 +605 1.218 8.8610427e+00 6.5173717e+01 +606 1.22 8.7314744e+00 6.4396053e+01 +607 1.222 8.6034526e+00 6.3627133e+01 +608 1.224 8.4769601e+00 6.2866859e+01 +609 1.226 8.3519795e+00 6.2115133e+01 +610 1.228 8.2284939e+00 6.1371859e+01 +611 1.23 8.1064865e+00 6.0636942e+01 +612 1.232 7.9859406e+00 5.9910287e+01 +613 1.234 7.8668399e+00 5.9191802e+01 +614 1.236 7.7491681e+00 5.8481395e+01 +615 1.238 7.6329090e+00 5.7778974e+01 +616 1.24 7.5180469e+00 5.7084452e+01 +617 1.242 7.4045660e+00 5.6397738e+01 +618 1.244 7.2924508e+00 5.5718746e+01 +619 1.246 7.1816859e+00 5.5047388e+01 +620 1.248 7.0722562e+00 5.4383580e+01 +621 1.25 6.9641466e+00 5.3727237e+01 +622 1.252 6.8573423e+00 5.3078275e+01 +623 1.254 6.7518287e+00 5.2436613e+01 +624 1.256 6.6475911e+00 5.1802168e+01 +625 1.258 6.5446152e+00 5.1174860e+01 +626 1.26 6.4428869e+00 5.0554609e+01 +627 1.262 6.3423921e+00 4.9941338e+01 +628 1.264 6.2431170e+00 4.9334967e+01 +629 1.266 6.1450477e+00 4.8735421e+01 +630 1.268 6.0481708e+00 4.8142622e+01 +631 1.27 5.9524728e+00 4.7556497e+01 +632 1.272 5.8579404e+00 4.6976971e+01 +633 1.274 5.7645605e+00 4.6403971e+01 +634 1.276 5.6723202e+00 4.5837424e+01 +635 1.278 5.5812066e+00 4.5277258e+01 +636 1.28 5.4912070e+00 4.4723403e+01 +637 1.282 5.4023088e+00 4.4175789e+01 +638 1.284 5.3144997e+00 4.3634346e+01 +639 1.286 5.2277674e+00 4.3099007e+01 +640 1.288 5.1420997e+00 4.2569703e+01 +641 1.29 5.0574846e+00 4.2046367e+01 +642 1.292 4.9739103e+00 4.1528934e+01 +643 1.294 4.8913650e+00 4.1017339e+01 +644 1.296 4.8098371e+00 4.0511516e+01 +645 1.298 4.7293151e+00 4.0011402e+01 +646 1.3 4.6497877e+00 3.9516934e+01 +647 1.302 4.5712436e+00 3.9028049e+01 +648 1.304 4.4936718e+00 3.8544685e+01 +649 1.306 4.4170612e+00 3.8066783e+01 +650 1.308 4.3414011e+00 3.7594280e+01 +651 1.31 4.2666806e+00 3.7127119e+01 +652 1.312 4.1928891e+00 3.6665239e+01 +653 1.314 4.1200161e+00 3.6208583e+01 +654 1.316 4.0480513e+00 3.5757093e+01 +655 1.318 3.9769843e+00 3.5310712e+01 +656 1.32 3.9068051e+00 3.4869383e+01 +657 1.322 3.8375035e+00 3.4433051e+01 +658 1.324 3.7690696e+00 3.4001661e+01 +659 1.326 3.7014936e+00 3.3575159e+01 +660 1.328 3.6347657e+00 3.3153490e+01 +661 1.33 3.5688764e+00 3.2736602e+01 +662 1.332 3.5038162e+00 3.2324441e+01 +663 1.334 3.4395755e+00 3.1916956e+01 +664 1.336 3.3761453e+00 3.1514096e+01 +665 1.338 3.3135161e+00 3.1115808e+01 +666 1.34 3.2516790e+00 3.0722044e+01 +667 1.342 3.1906250e+00 3.0332753e+01 +668 1.344 3.1303451e+00 2.9947886e+01 +669 1.346 3.0708305e+00 2.9567394e+01 +670 1.348 3.0120726e+00 2.9191230e+01 +671 1.35 2.9540627e+00 2.8819345e+01 +672 1.352 2.8967924e+00 2.8451693e+01 +673 1.354 2.8402532e+00 2.8088228e+01 +674 1.356 2.7844367e+00 2.7728902e+01 +675 1.358 2.7293348e+00 2.7373671e+01 +676 1.36 2.6749393e+00 2.7022489e+01 +677 1.362 2.6212422e+00 2.6675313e+01 +678 1.364 2.5682354e+00 2.6332098e+01 +679 1.366 2.5159112e+00 2.5992800e+01 +680 1.368 2.4642617e+00 2.5657377e+01 +681 1.37 2.4132791e+00 2.5325785e+01 +682 1.372 2.3629560e+00 2.4997984e+01 +683 1.374 2.3132847e+00 2.4673931e+01 +684 1.376 2.2642578e+00 2.4353585e+01 +685 1.378 2.2158679e+00 2.4036905e+01 +686 1.38 2.1681078e+00 2.3723852e+01 +687 1.382 2.1209701e+00 2.3414384e+01 +688 1.384 2.0744479e+00 2.3108464e+01 +689 1.386 2.0285339e+00 2.2806051e+01 +690 1.388 1.9832213e+00 2.2507108e+01 +691 1.39 1.9385032e+00 2.2211596e+01 +692 1.392 1.8943727e+00 2.1919477e+01 +693 1.394 1.8508231e+00 2.1630715e+01 +694 1.396 1.8078476e+00 2.1345273e+01 +695 1.398 1.7654398e+00 2.1063113e+01 +696 1.4 1.7235930e+00 2.0784200e+01 +697 1.402 1.6823008e+00 2.0508499e+01 +698 1.404 1.6415569e+00 2.0235973e+01 +699 1.406 1.6013549e+00 1.9966589e+01 +700 1.408 1.5616885e+00 1.9700311e+01 +701 1.41 1.5225516e+00 1.9437105e+01 +702 1.412 1.4839380e+00 1.9176938e+01 +703 1.414 1.4458418e+00 1.8919777e+01 +704 1.416 1.4082569e+00 1.8665588e+01 +705 1.418 1.3711775e+00 1.8414338e+01 +706 1.42 1.3345976e+00 1.8165996e+01 +707 1.422 1.2985116e+00 1.7920529e+01 +708 1.424 1.2629136e+00 1.7677905e+01 +709 1.426 1.2277981e+00 1.7438095e+01 +710 1.428 1.1931594e+00 1.7201065e+01 +711 1.43 1.1589920e+00 1.6966787e+01 +712 1.432 1.1252904e+00 1.6735229e+01 +713 1.434 1.0920493e+00 1.6506362e+01 +714 1.436 1.0592632e+00 1.6280157e+01 +715 1.438 1.0269269e+00 1.6056583e+01 +716 1.44 9.9503515e-01 1.5835612e+01 +717 1.442 9.6358275e-01 1.5617216e+01 +718 1.444 9.3256459e-01 1.5401365e+01 +719 1.446 9.0197561e-01 1.5188033e+01 +720 1.448 8.7181080e-01 1.4977190e+01 +721 1.45 8.4206521e-01 1.4768811e+01 +722 1.452 8.1273393e-01 1.4562867e+01 +723 1.454 7.8381213e-01 1.4359332e+01 +724 1.456 7.5529502e-01 1.4158179e+01 +725 1.458 7.2717784e-01 1.3959383e+01 +726 1.46 6.9945593e-01 1.3762916e+01 +727 1.462 6.7212464e-01 1.3568754e+01 +728 1.464 6.4517939e-01 1.3376871e+01 +729 1.466 6.1861565e-01 1.3187242e+01 +730 1.468 5.9242894e-01 1.2999843e+01 +731 1.47 5.6661481e-01 1.2814647e+01 +732 1.472 5.4116890e-01 1.2631632e+01 +733 1.474 5.1608685e-01 1.2450773e+01 +734 1.476 4.9136438e-01 1.2272046e+01 +735 1.478 4.6699726e-01 1.2095428e+01 +736 1.48 4.4298128e-01 1.1920895e+01 +737 1.482 4.1931230e-01 1.1748425e+01 +738 1.484 3.9598622e-01 1.1577995e+01 +739 1.486 3.7299898e-01 1.1409582e+01 +740 1.488 3.5034657e-01 1.1243163e+01 +741 1.49 3.2802501e-01 1.1078718e+01 +742 1.492 3.0603039e-01 1.0916223e+01 +743 1.494 2.8435883e-01 1.0755658e+01 +744 1.496 2.6300649e-01 1.0597001e+01 +745 1.498 2.4196957e-01 1.0440231e+01 +746 1.5 2.2124432e-01 1.0285328e+01 +747 1.502 2.0082703e-01 1.0132269e+01 +748 1.504 1.8071403e-01 9.9810359e+00 +749 1.506 1.6090168e-01 9.8316074e+00 +750 1.508 1.4138641e-01 9.6839637e+00 +751 1.51 1.2216465e-01 9.5380851e+00 +752 1.512 1.0323290e-01 9.3939520e+00 +753 1.514 8.4587691e-02 9.2515450e+00 +754 1.516 6.6225584e-02 9.1108450e+00 +755 1.518 4.8143186e-02 8.9718331e+00 +756 1.52 3.0337139e-02 8.8344905e+00 +757 1.522 1.2804123e-02 8.6987988e+00 +758 1.524 -4.4591446e-03 8.5647395e+00 +759 1.526 -2.1455911e-02 8.4322946e+00 +760 1.528 -3.8189387e-02 8.3014461e+00 +761 1.53 -5.4662748e-02 8.1721763e+00 +762 1.532 -7.0879133e-02 8.0444676e+00 +763 1.534 -8.6841648e-02 7.9183027e+00 +764 1.536 -1.0255336e-01 7.7936645e+00 +765 1.538 -1.1801731e-01 7.6705358e+00 +766 1.54 -1.3323650e-01 7.5489000e+00 +767 1.542 -1.4821390e-01 7.4287404e+00 +768 1.544 -1.6295243e-01 7.3100405e+00 +769 1.546 -1.7745502e-01 7.1927842e+00 +770 1.548 -1.9172452e-01 7.0769553e+00 +771 1.55 -2.0576378e-01 6.9625378e+00 +772 1.552 -2.1957561e-01 6.8495162e+00 +773 1.554 -2.3316277e-01 6.7378747e+00 +774 1.556 -2.4652801e-01 6.6275981e+00 +775 1.558 -2.5967406e-01 6.5186710e+00 +776 1.56 -2.7260359e-01 6.4110783e+00 +777 1.562 -2.8531925e-01 6.3048053e+00 +778 1.564 -2.9782368e-01 6.1998371e+00 +779 1.566 -3.1011946e-01 6.0961591e+00 +780 1.568 -3.2220917e-01 5.9937570e+00 +781 1.57 -3.3409533e-01 5.8926163e+00 +782 1.572 -3.4578046e-01 5.7927231e+00 +783 1.574 -3.5726704e-01 5.6940634e+00 +784 1.576 -3.6855753e-01 5.5966233e+00 +785 1.578 -3.7965434e-01 5.5003891e+00 +786 1.58 -3.9055988e-01 5.4053474e+00 +787 1.582 -4.0127652e-01 5.3114848e+00 +788 1.584 -4.1180660e-01 5.2187880e+00 +789 1.586 -4.2215244e-01 5.1272440e+00 +790 1.588 -4.3231633e-01 5.0368398e+00 +791 1.59 -4.4230055e-01 4.9475627e+00 +792 1.592 -4.5210733e-01 4.8593998e+00 +793 1.594 -4.6173888e-01 4.7723388e+00 +794 1.596 -4.7119741e-01 4.6863673e+00 +795 1.598 -4.8048507e-01 4.6014729e+00 +796 1.6 -4.8960401e-01 4.5176435e+00 +797 1.602 -4.9855635e-01 4.4348672e+00 +798 1.604 -5.0734417e-01 4.3531321e+00 +799 1.606 -5.1596956e-01 4.2724264e+00 +800 1.608 -5.2443456e-01 4.1927385e+00 +801 1.61 -5.3274119e-01 4.1140571e+00 +802 1.612 -5.4089145e-01 4.0363706e+00 +803 1.614 -5.4888732e-01 3.9596678e+00 +804 1.616 -5.5673077e-01 3.8839377e+00 +805 1.618 -5.6442372e-01 3.8091693e+00 +806 1.62 -5.7196808e-01 3.7353516e+00 +807 1.622 -5.7936575e-01 3.6624740e+00 +808 1.624 -5.8661859e-01 3.5905257e+00 +809 1.626 -5.9372846e-01 3.5194962e+00 +810 1.628 -6.0069718e-01 3.4493752e+00 +811 1.63 -6.0752656e-01 3.3801524e+00 +812 1.632 -6.1421839e-01 3.3118175e+00 +813 1.634 -6.2077442e-01 3.2443604e+00 +814 1.636 -6.2719641e-01 3.1777713e+00 +815 1.638 -6.3348608e-01 3.1120402e+00 +816 1.64 -6.3964513e-01 3.0471574e+00 +817 1.642 -6.4567526e-01 2.9831133e+00 +818 1.644 -6.5157814e-01 2.9198982e+00 +819 1.646 -6.5735540e-01 2.8575028e+00 +820 1.648 -6.6300869e-01 2.7959178e+00 +821 1.65 -6.6853961e-01 2.7351338e+00 +822 1.652 -6.7394975e-01 2.6751418e+00 +823 1.654 -6.7924070e-01 2.6159328e+00 +824 1.656 -6.8441400e-01 2.5574977e+00 +825 1.658 -6.8947120e-01 2.4998278e+00 +826 1.66 -6.9441382e-01 2.4429142e+00 +827 1.662 -6.9924335e-01 2.3867485e+00 +828 1.664 -7.0396130e-01 2.3313219e+00 +829 1.666 -7.0856913e-01 2.2766260e+00 +830 1.668 -7.1306829e-01 2.2226526e+00 +831 1.67 -7.1746022e-01 2.1693932e+00 +832 1.672 -7.2174633e-01 2.1168397e+00 +833 1.674 -7.2592804e-01 2.0649840e+00 +834 1.676 -7.3000673e-01 2.0138181e+00 +835 1.678 -7.3398377e-01 1.9633341e+00 +836 1.68 -7.3786051e-01 1.9135241e+00 +837 1.682 -7.4163831e-01 1.8643803e+00 +838 1.684 -7.4531847e-01 1.8158952e+00 +839 1.686 -7.4890232e-01 1.7680610e+00 +840 1.688 -7.5239115e-01 1.7208704e+00 +841 1.69 -7.5578623e-01 1.6743159e+00 +842 1.692 -7.5908883e-01 1.6283901e+00 +843 1.694 -7.6230020e-01 1.5830858e+00 +844 1.696 -7.6542158e-01 1.5383959e+00 +845 1.698 -7.6845419e-01 1.4943131e+00 +846 1.7 -7.7139923e-01 1.4508305e+00 +847 1.702 -7.7425791e-01 1.4079412e+00 +848 1.704 -7.7703139e-01 1.3656382e+00 +849 1.706 -7.7972085e-01 1.3239148e+00 +850 1.708 -7.8232743e-01 1.2827642e+00 +851 1.71 -7.8485228e-01 1.2421798e+00 +852 1.712 -7.8729652e-01 1.2021551e+00 +853 1.714 -7.8966127e-01 1.1626834e+00 +854 1.716 -7.9194762e-01 1.1237584e+00 +855 1.718 -7.9415666e-01 1.0853738e+00 +856 1.72 -7.9628947e-01 1.0475231e+00 +857 1.722 -7.9834711e-01 1.0102003e+00 +858 1.724 -8.0033062e-01 9.7339903e-01 +859 1.726 -8.0224105e-01 9.3711334e-01 +860 1.728 -8.0407941e-01 9.0133718e-01 +861 1.73 -8.0584673e-01 8.6606457e-01 +862 1.732 -8.0754400e-01 8.3128964e-01 +863 1.734 -8.0917222e-01 7.9700654e-01 +864 1.736 -8.1073236e-01 7.6320953e-01 +865 1.738 -8.1222538e-01 7.2989289e-01 +866 1.74 -8.1365224e-01 6.9705099e-01 +867 1.742 -8.1501389e-01 6.6467825e-01 +868 1.744 -8.1631127e-01 6.3276916e-01 +869 1.746 -8.1754528e-01 6.0131827e-01 +870 1.748 -8.1871684e-01 5.7032017e-01 +871 1.75 -8.1982686e-01 5.3976953e-01 +872 1.752 -8.2087621e-01 5.0966108e-01 +873 1.754 -8.2186579e-01 4.7998959e-01 +874 1.756 -8.2279646e-01 4.5074991e-01 +875 1.758 -8.2366908e-01 4.2193693e-01 +876 1.76 -8.2448449e-01 3.9354560e-01 +877 1.762 -8.2524354e-01 3.6557092e-01 +878 1.764 -8.2594705e-01 3.3800797e-01 +879 1.766 -8.2659584e-01 3.1085185e-01 +880 1.768 -8.2719072e-01 2.8409773e-01 +881 1.77 -8.2773249e-01 2.5774084e-01 +882 1.772 -8.2822195e-01 2.3177645e-01 +883 1.774 -8.2865986e-01 2.0619990e-01 +884 1.776 -8.2904700e-01 1.8100655e-01 +885 1.778 -8.2938414e-01 1.5619184e-01 +886 1.78 -8.2967202e-01 1.3175126e-01 +887 1.782 -8.2991139e-01 1.0768032e-01 +888 1.784 -8.3010298e-01 8.3974615e-02 +889 1.786 -8.3024753e-01 6.0629767e-02 +890 1.788 -8.3034574e-01 3.7641455e-02 +891 1.79 -8.3039833e-01 1.5005403e-02 +892 1.792 -8.3040599e-01 -7.2826174e-03 +893 1.794 -8.3036943e-01 -2.9226788e-02 +894 1.796 -8.3028931e-01 -5.0831243e-02 +895 1.798 -8.3016633e-01 -7.2100073e-02 +896 1.8 -8.3000113e-01 -9.3037321e-02 +897 1.802 -8.2979440e-01 -1.1364699e-01 +898 1.804 -8.2954676e-01 -1.3393303e-01 +899 1.806 -8.2925888e-01 -1.5389935e-01 +900 1.808 -8.2893137e-01 -1.7354983e-01 +901 1.81 -8.2856489e-01 -1.9288828e-01 +902 1.812 -8.2816003e-01 -2.1191849e-01 +903 1.814 -8.2771741e-01 -2.3064421e-01 +904 1.816 -8.2723765e-01 -2.4906912e-01 +905 1.818 -8.2672134e-01 -2.6719689e-01 +906 1.82 -8.2616906e-01 -2.8503114e-01 +907 1.822 -8.2558140e-01 -3.0257544e-01 +908 1.824 -8.2495895e-01 -3.1983333e-01 +909 1.826 -8.2430226e-01 -3.3680830e-01 +910 1.828 -8.2361190e-01 -3.5350382e-01 +911 1.83 -8.2288843e-01 -3.6992331e-01 +912 1.832 -8.2213239e-01 -3.8607015e-01 +913 1.834 -8.2134433e-01 -4.0194769e-01 +914 1.836 -8.2052478e-01 -4.1755922e-01 +915 1.838 -8.1967427e-01 -4.3290803e-01 +916 1.84 -8.1879332e-01 -4.4799735e-01 +917 1.842 -8.1788245e-01 -4.6283037e-01 +918 1.844 -8.1694216e-01 -4.7741026e-01 +919 1.846 -8.1597297e-01 -4.9174014e-01 +920 1.848 -8.1497537e-01 -5.0582311e-01 +921 1.85 -8.1394984e-01 -5.1966222e-01 +922 1.852 -8.1289688e-01 -5.3326050e-01 +923 1.854 -8.1181696e-01 -5.4662093e-01 +924 1.856 -8.1071055e-01 -5.5974648e-01 +925 1.858 -8.0957813e-01 -5.7264007e-01 +926 1.86 -8.0842015e-01 -5.8530458e-01 +927 1.862 -8.0723706e-01 -5.9774287e-01 +928 1.864 -8.0602932e-01 -6.0995777e-01 +929 1.866 -8.0479738e-01 -6.2195208e-01 +930 1.868 -8.0354166e-01 -6.3372855e-01 +931 1.87 -8.0226261e-01 -6.4528992e-01 +932 1.872 -8.0096064e-01 -6.5663889e-01 +933 1.874 -7.9963619e-01 -6.6777812e-01 +934 1.876 -7.9828967e-01 -6.7871027e-01 +935 1.878 -7.9692149e-01 -6.8943793e-01 +936 1.88 -7.9553205e-01 -6.9996370e-01 +937 1.882 -7.9412176e-01 -7.1029012e-01 +938 1.884 -7.9269102e-01 -7.2041971e-01 +939 1.886 -7.9124021e-01 -7.3035498e-01 +940 1.888 -7.8976973e-01 -7.4009839e-01 +941 1.89 -7.8827995e-01 -7.4965238e-01 +942 1.892 -7.8677124e-01 -7.5901936e-01 +943 1.894 -7.8524399e-01 -7.6820171e-01 +944 1.896 -7.8369856e-01 -7.7720179e-01 +945 1.898 -7.8213531e-01 -7.8602194e-01 +946 1.9 -7.8055459e-01 -7.9466445e-01 +947 1.902 -7.7895676e-01 -8.0313160e-01 +948 1.904 -7.7734218e-01 -8.1142566e-01 +949 1.906 -7.7571118e-01 -8.1954883e-01 +950 1.908 -7.7406410e-01 -8.2750334e-01 +951 1.91 -7.7240127e-01 -8.3529134e-01 +952 1.912 -7.7072304e-01 -8.4291501e-01 +953 1.914 -7.6902972e-01 -8.5037645e-01 +954 1.916 -7.6732164e-01 -8.5767777e-01 +955 1.918 -7.6559912e-01 -8.6482107e-01 +956 1.92 -7.6386246e-01 -8.7180838e-01 +957 1.922 -7.6211198e-01 -8.7864174e-01 +958 1.924 -7.6034799e-01 -8.8532317e-01 +959 1.926 -7.5857079e-01 -8.9185465e-01 +960 1.928 -7.5678067e-01 -8.9823813e-01 +961 1.93 -7.5497794e-01 -9.0447557e-01 +962 1.932 -7.5316287e-01 -9.1056888e-01 +963 1.934 -7.5133576e-01 -9.1651996e-01 +964 1.936 -7.4949688e-01 -9.2233069e-01 +965 1.938 -7.4764653e-01 -9.2800291e-01 +966 1.94 -7.4578496e-01 -9.3353846e-01 +967 1.942 -7.4391246e-01 -9.3893916e-01 +968 1.944 -7.4202929e-01 -9.4420679e-01 +969 1.946 -7.4013572e-01 -9.4934313e-01 +970 1.948 -7.3823201e-01 -9.5434992e-01 +971 1.95 -7.3631841e-01 -9.5922890e-01 +972 1.952 -7.3439518e-01 -9.6398177e-01 +973 1.954 -7.3246256e-01 -9.6861022e-01 +974 1.956 -7.3052082e-01 -9.7311593e-01 +975 1.958 -7.2857018e-01 -9.7750056e-01 +976 1.96 -7.2661089e-01 -9.8176572e-01 +977 1.962 -7.2464320e-01 -9.8591303e-01 +978 1.964 -7.2266732e-01 -9.8994410e-01 +979 1.966 -7.2068350e-01 -9.9386050e-01 +980 1.968 -7.1869195e-01 -9.9766378e-01 +981 1.97 -7.1669292e-01 -1.0013555e+00 +982 1.972 -7.1468660e-01 -1.0049371e+00 +983 1.974 -7.1267324e-01 -1.0084103e+00 +984 1.976 -7.1065304e-01 -1.0117763e+00 +985 1.978 -7.0862620e-01 -1.0150368e+00 +986 1.98 -7.0659296e-01 -1.0181931e+00 +987 1.982 -7.0455350e-01 -1.0212468e+00 +988 1.984 -7.0250804e-01 -1.0241991e+00 +989 1.986 -7.0045677e-01 -1.0270516e+00 +990 1.988 -6.9839990e-01 -1.0298056e+00 +991 1.99 -6.9633761e-01 -1.0324625e+00 +992 1.992 -6.9427011e-01 -1.0350236e+00 +993 1.994 -6.9219758e-01 -1.0374903e+00 +994 1.996 -6.9012021e-01 -1.0398640e+00 +995 1.998 -6.8803819e-01 -1.0421458e+00 +996 2.0 -6.8595169e-01 -1.0443371e+00 +997 2.002 -6.8386090e-01 -1.0464392e+00 +998 2.004 -6.8176599e-01 -1.0484534e+00 +999 2.006 -6.7966714e-01 -1.0503808e+00 +1000 2.008 -6.7756452e-01 -1.0522228e+00 +1001 2.01 -6.7545831e-01 -1.0539805e+00 +1002 2.012 -6.7334866e-01 -1.0556552e+00 +1003 2.014 -6.7123574e-01 -1.0572480e+00 +1004 2.016 -6.6911972e-01 -1.0587602e+00 +1005 2.018 -6.6700075e-01 -1.0601928e+00 +1006 2.02 -6.6487900e-01 -1.0615470e+00 +1007 2.022 -6.6275462e-01 -1.0628240e+00 +1008 2.024 -6.6062776e-01 -1.0640249e+00 +1009 2.026 -6.5849857e-01 -1.0651508e+00 +1010 2.028 -6.5636720e-01 -1.0662028e+00 +1011 2.03 -6.5423380e-01 -1.0671819e+00 +1012 2.032 -6.5209852e-01 -1.0680893e+00 +1013 2.034 -6.4996149e-01 -1.0689260e+00 +1014 2.036 -6.4782286e-01 -1.0696930e+00 +1015 2.038 -6.4568277e-01 -1.0703914e+00 +1016 2.04 -6.4354134e-01 -1.0710222e+00 +1017 2.042 -6.4139872e-01 -1.0715864e+00 +1018 2.044 -6.3925504e-01 -1.0720851e+00 +1019 2.046 -6.3711043e-01 -1.0725191e+00 +1020 2.048 -6.3496501e-01 -1.0728894e+00 +1021 2.05 -6.3281891e-01 -1.0731971e+00 +1022 2.052 -6.3067226e-01 -1.0734430e+00 +1023 2.054 -6.2852518e-01 -1.0736282e+00 +1024 2.056 -6.2637779e-01 -1.0737535e+00 +1025 2.058 -6.2423020e-01 -1.0738198e+00 +1026 2.06 -6.2208255e-01 -1.0738281e+00 +1027 2.062 -6.1993493e-01 -1.0737792e+00 +1028 2.064 -6.1778747e-01 -1.0736740e+00 +1029 2.066 -6.1564027e-01 -1.0735135e+00 +1030 2.068 -6.1349345e-01 -1.0732984e+00 +1031 2.07 -6.1134711e-01 -1.0730296e+00 +1032 2.072 -6.0920137e-01 -1.0727080e+00 +1033 2.074 -6.0705632e-01 -1.0723344e+00 +1034 2.076 -6.0491206e-01 -1.0719096e+00 +1035 2.078 -6.0276871e-01 -1.0714344e+00 +1036 2.08 -6.0062636e-01 -1.0709096e+00 +1037 2.082 -5.9848511e-01 -1.0703360e+00 +1038 2.084 -5.9634505e-01 -1.0697145e+00 +1039 2.086 -5.9420628e-01 -1.0690457e+00 +1040 2.088 -5.9206889e-01 -1.0683304e+00 +1041 2.09 -5.8993299e-01 -1.0675694e+00 +1042 2.092 -5.8779865e-01 -1.0667634e+00 +1043 2.094 -5.8566596e-01 -1.0659132e+00 +1044 2.096 -5.8353502e-01 -1.0650195e+00 +1045 2.098 -5.8140591e-01 -1.0640830e+00 +1046 2.1 -5.7927872e-01 -1.0631044e+00 +1047 2.102 -5.7715352e-01 -1.0620844e+00 +1048 2.104 -5.7503041e-01 -1.0610238e+00 +1049 2.106 -5.7290946e-01 -1.0599231e+00 +1050 2.108 -5.7079074e-01 -1.0587831e+00 +1051 2.11 -5.6867435e-01 -1.0576044e+00 +1052 2.112 -5.6656035e-01 -1.0563877e+00 +1053 2.114 -5.6444882e-01 -1.0551337e+00 +1054 2.116 -5.6233984e-01 -1.0538429e+00 +1055 2.118 -5.6023348e-01 -1.0525161e+00 +1056 2.12 -5.5812980e-01 -1.0511538e+00 +1057 2.122 -5.5602888e-01 -1.0497566e+00 +1058 2.124 -5.5393080e-01 -1.0483253e+00 +1059 2.126 -5.5183560e-01 -1.0468603e+00 +1060 2.128 -5.4974338e-01 -1.0453622e+00 +1061 2.13 -5.4765418e-01 -1.0438318e+00 +1062 2.132 -5.4556807e-01 -1.0422695e+00 +1063 2.134 -5.4348512e-01 -1.0406759e+00 +1064 2.136 -5.4140539e-01 -1.0390515e+00 +1065 2.138 -5.3932893e-01 -1.0373970e+00 +1066 2.14 -5.3725582e-01 -1.0357129e+00 +1067 2.142 -5.3518610e-01 -1.0339998e+00 +1068 2.144 -5.3311984e-01 -1.0322581e+00 +1069 2.146 -5.3105709e-01 -1.0304884e+00 +1070 2.148 -5.2899790e-01 -1.0286913e+00 +1071 2.15 -5.2694234e-01 -1.0268672e+00 +1072 2.152 -5.2489045e-01 -1.0250167e+00 +1073 2.154 -5.2284229e-01 -1.0231402e+00 +1074 2.156 -5.2079791e-01 -1.0212383e+00 +1075 2.158 -5.1875735e-01 -1.0193115e+00 +1076 2.16 -5.1672068e-01 -1.0173602e+00 +1077 2.162 -5.1468793e-01 -1.0153850e+00 +1078 2.164 -5.1265915e-01 -1.0133862e+00 +1079 2.166 -5.1063440e-01 -1.0113645e+00 +1080 2.168 -5.0861371e-01 -1.0093201e+00 +1081 2.17 -5.0659713e-01 -1.0072536e+00 +1082 2.172 -5.0458471e-01 -1.0051655e+00 +1083 2.174 -5.0257649e-01 -1.0030562e+00 +1084 2.176 -5.0057250e-01 -1.0009261e+00 +1085 2.178 -4.9857280e-01 -9.9877561e-01 +1086 2.18 -4.9657741e-01 -9.9660523e-01 +1087 2.182 -4.9458639e-01 -9.9441535e-01 +1088 2.184 -4.9259976e-01 -9.9220640e-01 +1089 2.186 -4.9061758e-01 -9.8997877e-01 +1090 2.188 -4.8863986e-01 -9.8773289e-01 +1091 2.19 -4.8666666e-01 -9.8546914e-01 +1092 2.192 -4.8469800e-01 -9.8318793e-01 +1093 2.194 -4.8273392e-01 -9.8088964e-01 +1094 2.196 -4.8077445e-01 -9.7857466e-01 +1095 2.198 -4.7881963e-01 -9.7624337e-01 +1096 2.2 -4.7686949e-01 -9.7389614e-01 +1097 2.202 -4.7492405e-01 -9.7153335e-01 +1098 2.204 -4.7298336e-01 -9.6915535e-01 +1099 2.206 -4.7104744e-01 -9.6676252e-01 +1100 2.208 -4.6911632e-01 -9.6435520e-01 +1101 2.21 -4.6719003e-01 -9.6193374e-01 +1102 2.212 -4.6526860e-01 -9.5949850e-01 +1103 2.214 -4.6335205e-01 -9.5704982e-01 +1104 2.216 -4.6144041e-01 -9.5458802e-01 +1105 2.218 -4.5953370e-01 -9.5211345e-01 +1106 2.22 -4.5763196e-01 -9.4962643e-01 +1107 2.222 -4.5573520e-01 -9.4712728e-01 +1108 2.224 -4.5384346e-01 -9.4461633e-01 +1109 2.226 -4.5195675e-01 -9.4209389e-01 +1110 2.228 -4.5007509e-01 -9.3956027e-01 +1111 2.23 -4.4819851e-01 -9.3701578e-01 +1112 2.232 -4.4632703e-01 -9.3446072e-01 +1113 2.234 -4.4446068e-01 -9.3189539e-01 +1114 2.236 -4.4259946e-01 -9.2932008e-01 +1115 2.238 -4.4074340e-01 -9.2673508e-01 +1116 2.24 -4.3889253e-01 -9.2414069e-01 +1117 2.242 -4.3704685e-01 -9.2153718e-01 +1118 2.244 -4.3520638e-01 -9.1892482e-01 +1119 2.246 -4.3337115e-01 -9.1630391e-01 +1120 2.248 -4.3154117e-01 -9.1367470e-01 +1121 2.25 -4.2971646e-01 -9.1103747e-01 +1122 2.252 -4.2789703e-01 -9.0839247e-01 +1123 2.254 -4.2608289e-01 -9.0573997e-01 +1124 2.256 -4.2427407e-01 -9.0308023e-01 +1125 2.258 -4.2247058e-01 -9.0041350e-01 +1126 2.26 -4.2067242e-01 -8.9774002e-01 +1127 2.262 -4.1887962e-01 -8.9506004e-01 +1128 2.264 -4.1709219e-01 -8.9237381e-01 +1129 2.266 -4.1531013e-01 -8.8968156e-01 +1130 2.268 -4.1353346e-01 -8.8698353e-01 +1131 2.27 -4.1176220e-01 -8.8427995e-01 +1132 2.272 -4.0999635e-01 -8.8157106e-01 +1133 2.274 -4.0823592e-01 -8.7885707e-01 +1134 2.276 -4.0648092e-01 -8.7613821e-01 +1135 2.278 -4.0473137e-01 -8.7341469e-01 +1136 2.28 -4.0298727e-01 -8.7068674e-01 +1137 2.282 -4.0124863e-01 -8.6795457e-01 +1138 2.284 -3.9951545e-01 -8.6521839e-01 +1139 2.286 -3.9778775e-01 -8.6247840e-01 +1140 2.288 -3.9606554e-01 -8.5973481e-01 +1141 2.29 -3.9434882e-01 -8.5698783e-01 +1142 2.292 -3.9263759e-01 -8.5423763e-01 +1143 2.294 -3.9093187e-01 -8.5148444e-01 +1144 2.296 -3.8923166e-01 -8.4872843e-01 +1145 2.298 -3.8753696e-01 -8.4596979e-01 +1146 2.3 -3.8584778e-01 -8.4320872e-01 +1147 2.302 -3.8416412e-01 -8.4044540e-01 +1148 2.304 -3.8248600e-01 -8.3768000e-01 +1149 2.306 -3.8081341e-01 -8.3491271e-01 +1150 2.308 -3.7914635e-01 -8.3214370e-01 +1151 2.31 -3.7748483e-01 -8.2937315e-01 +1152 2.312 -3.7582886e-01 -8.2660123e-01 +1153 2.314 -3.7417843e-01 -8.2382810e-01 +1154 2.316 -3.7253354e-01 -8.2105394e-01 +1155 2.318 -3.7089421e-01 -8.1827890e-01 +1156 2.32 -3.6926043e-01 -8.1550314e-01 +1157 2.322 -3.6763220e-01 -8.1272683e-01 +1158 2.324 -3.6600952e-01 -8.0995012e-01 +1159 2.326 -3.6439240e-01 -8.0717316e-01 +1160 2.328 -3.6278083e-01 -8.0439611e-01 +1161 2.33 -3.6117482e-01 -8.0161911e-01 +1162 2.332 -3.5957435e-01 -7.9884232e-01 +1163 2.334 -3.5797945e-01 -7.9606586e-01 +1164 2.336 -3.5639009e-01 -7.9328990e-01 +1165 2.338 -3.5480629e-01 -7.9051456e-01 +1166 2.34 -3.5322803e-01 -7.8773998e-01 +1167 2.342 -3.5165533e-01 -7.8496631e-01 +1168 2.344 -3.5008817e-01 -7.8219367e-01 +1169 2.346 -3.4852655e-01 -7.7942219e-01 +1170 2.348 -3.4697048e-01 -7.7665201e-01 +1171 2.35 -3.4541994e-01 -7.7388325e-01 +1172 2.352 -3.4387494e-01 -7.7111603e-01 +1173 2.354 -3.4233548e-01 -7.6835048e-01 +1174 2.356 -3.4080154e-01 -7.6558673e-01 +1175 2.358 -3.3927313e-01 -7.6282488e-01 +1176 2.36 -3.3775024e-01 -7.6006506e-01 +1177 2.362 -3.3623287e-01 -7.5730739e-01 +1178 2.364 -3.3472101e-01 -7.5455197e-01 +1179 2.366 -3.3321466e-01 -7.5179891e-01 +1180 2.368 -3.3171381e-01 -7.4904834e-01 +1181 2.37 -3.3021846e-01 -7.4630035e-01 +1182 2.372 -3.2872861e-01 -7.4355504e-01 +1183 2.374 -3.2724424e-01 -7.4081254e-01 +1184 2.376 -3.2576535e-01 -7.3807293e-01 +1185 2.378 -3.2429195e-01 -7.3533632e-01 +1186 2.38 -3.2282401e-01 -7.3260281e-01 +1187 2.382 -3.2136153e-01 -7.2987250e-01 +1188 2.384 -3.1990451e-01 -7.2714547e-01 +1189 2.386 -3.1845295e-01 -7.2442183e-01 +1190 2.388 -3.1700682e-01 -7.2170167e-01 +1191 2.39 -3.1556614e-01 -7.1898508e-01 +1192 2.392 -3.1413088e-01 -7.1627214e-01 +1193 2.394 -3.1270105e-01 -7.1356295e-01 +1194 2.396 -3.1127663e-01 -7.1085759e-01 +1195 2.398 -3.0985761e-01 -7.0815615e-01 +1196 2.4 -3.0844400e-01 -7.0545871e-01 +1197 2.402 -3.0703578e-01 -7.0276534e-01 +1198 2.404 -3.0563294e-01 -7.0007614e-01 +1199 2.406 -3.0423547e-01 -6.9739118e-01 +1200 2.408 -3.0284337e-01 -6.9471054e-01 +1201 2.41 -3.0145662e-01 -6.9203429e-01 +1202 2.412 -3.0007523e-01 -6.8936250e-01 +1203 2.414 -2.9869917e-01 -6.8669526e-01 +1204 2.416 -2.9732844e-01 -6.8403263e-01 +1205 2.418 -2.9596304e-01 -6.8137468e-01 +1206 2.42 -2.9460294e-01 -6.7872149e-01 +1207 2.422 -2.9324815e-01 -6.7607311e-01 +1208 2.424 -2.9189865e-01 -6.7342962e-01 +1209 2.426 -2.9055443e-01 -6.7079108e-01 +1210 2.428 -2.8921548e-01 -6.6815755e-01 +1211 2.43 -2.8788179e-01 -6.6552911e-01 +1212 2.432 -2.8655336e-01 -6.6290580e-01 +1213 2.434 -2.8523017e-01 -6.6028769e-01 +1214 2.436 -2.8391221e-01 -6.5767483e-01 +1215 2.438 -2.8259946e-01 -6.5506729e-01 +1216 2.44 -2.8129193e-01 -6.5246513e-01 +1217 2.442 -2.7998960e-01 -6.4986839e-01 +1218 2.444 -2.7869246e-01 -6.4727714e-01 +1219 2.446 -2.7740049e-01 -6.4469141e-01 +1220 2.448 -2.7611369e-01 -6.4211128e-01 +1221 2.45 -2.7483204e-01 -6.3953678e-01 +1222 2.452 -2.7355553e-01 -6.3696798e-01 +1223 2.454 -2.7228416e-01 -6.3440490e-01 +1224 2.456 -2.7101791e-01 -6.3184762e-01 +1225 2.458 -2.6975677e-01 -6.2929616e-01 +1226 2.46 -2.6850072e-01 -6.2675058e-01 +1227 2.462 -2.6724976e-01 -6.2421092e-01 +1228 2.464 -2.6600388e-01 -6.2167723e-01 +1229 2.466 -2.6476305e-01 -6.1914955e-01 +1230 2.468 -2.6352727e-01 -6.1662791e-01 +1231 2.47 -2.6229653e-01 -6.1411237e-01 +1232 2.472 -2.6107082e-01 -6.1160295e-01 +1233 2.474 -2.5985012e-01 -6.0909971e-01 +1234 2.476 -2.5863442e-01 -6.0660267e-01 +1235 2.478 -2.5742370e-01 -6.0411187e-01 +1236 2.48 -2.5621796e-01 -6.0162736e-01 +1237 2.482 -2.5501719e-01 -5.9914916e-01 +1238 2.484 -2.5382136e-01 -5.9667730e-01 +1239 2.486 -2.5263048e-01 -5.9421184e-01 +1240 2.488 -2.5144451e-01 -5.9175278e-01 +1241 2.49 -2.5026346e-01 -5.8930018e-01 +1242 2.492 -2.4908731e-01 -5.8685405e-01 +1243 2.494 -2.4791604e-01 -5.8441443e-01 +1244 2.496 -2.4674965e-01 -5.8198135e-01 +1245 2.498 -2.4558811e-01 -5.7955483e-01 +1246 2.5 -2.4443142e-01 -5.7713491e-01 +1247 2.502 -2.4327957e-01 -5.7472161e-01 +1248 2.504 -2.4213253e-01 -5.7231496e-01 +1249 2.506 -2.4099030e-01 -5.6991497e-01 +1250 2.508 -2.3985287e-01 -5.6752169e-01 +1251 2.51 -2.3872021e-01 -5.6513513e-01 +1252 2.512 -2.3759232e-01 -5.6275531e-01 +1253 2.514 -2.3646918e-01 -5.6038225e-01 +1254 2.516 -2.3535079e-01 -5.5801599e-01 +1255 2.518 -2.3423712e-01 -5.5565654e-01 +1256 2.52 -2.3312816e-01 -5.5330391e-01 +1257 2.522 -2.3202390e-01 -5.5095814e-01 +1258 2.524 -2.3092432e-01 -5.4861923e-01 +1259 2.526 -2.2982941e-01 -5.4628721e-01 +1260 2.528 -2.2873917e-01 -5.4396210e-01 +1261 2.53 -2.2765356e-01 -5.4164391e-01 +1262 2.532 -2.2657259e-01 -5.3933265e-01 +1263 2.534 -2.2549623e-01 -5.3702835e-01 +1264 2.536 -2.2442447e-01 -5.3473103e-01 +1265 2.538 -2.2335730e-01 -5.3244068e-01 +1266 2.54 -2.2229470e-01 -5.3015734e-01 +1267 2.542 -2.2123666e-01 -5.2788100e-01 +1268 2.544 -2.2018317e-01 -5.2561169e-01 +1269 2.546 -2.1913421e-01 -5.2334942e-01 +1270 2.548 -2.1808977e-01 -5.2109420e-01 +1271 2.55 -2.1704983e-01 -5.1884603e-01 +1272 2.552 -2.1601438e-01 -5.1660494e-01 +1273 2.554 -2.1498341e-01 -5.1437093e-01 +1274 2.556 -2.1395689e-01 -5.1214401e-01 +1275 2.558 -2.1293483e-01 -5.0992419e-01 +1276 2.56 -2.1191719e-01 -5.0771147e-01 +1277 2.562 -2.1090397e-01 -5.0550587e-01 +1278 2.564 -2.0989516e-01 -5.0330740e-01 +1279 2.566 -2.0889074e-01 -5.0111606e-01 +1280 2.568 -2.0789069e-01 -4.9893185e-01 +1281 2.57 -2.0689501e-01 -4.9675478e-01 +1282 2.572 -2.0590367e-01 -4.9458487e-01 +1283 2.574 -2.0491666e-01 -4.9242211e-01 +1284 2.576 -2.0393398e-01 -4.9026651e-01 +1285 2.578 -2.0295559e-01 -4.8811807e-01 +1286 2.58 -2.0198150e-01 -4.8597679e-01 +1287 2.582 -2.0101168e-01 -4.8384269e-01 +1288 2.584 -2.0004612e-01 -4.8171576e-01 +1289 2.586 -1.9908481e-01 -4.7959600e-01 +1290 2.588 -1.9812774e-01 -4.7748342e-01 +1291 2.59 -1.9717487e-01 -4.7537803e-01 +1292 2.592 -1.9622622e-01 -4.7327981e-01 +1293 2.594 -1.9528175e-01 -4.7118877e-01 +1294 2.596 -1.9434146e-01 -4.6910491e-01 +1295 2.598 -1.9340533e-01 -4.6702824e-01 +1296 2.6 -1.9247334e-01 -4.6495874e-01 +1297 2.602 -1.9154549e-01 -4.6289643e-01 +1298 2.604 -1.9062175e-01 -4.6084129e-01 +1299 2.606 -1.8970212e-01 -4.5879334e-01 +1300 2.608 -1.8878657e-01 -4.5675256e-01 +1301 2.61 -1.8787510e-01 -4.5471895e-01 +1302 2.612 -1.8696769e-01 -4.5269252e-01 +1303 2.614 -1.8606433e-01 -4.5067325e-01 +1304 2.616 -1.8516499e-01 -4.4866115e-01 +1305 2.618 -1.8426968e-01 -4.4665621e-01 +1306 2.62 -1.8337836e-01 -4.4465843e-01 +1307 2.622 -1.8249104e-01 -4.4266781e-01 +1308 2.624 -1.8160769e-01 -4.4068433e-01 +1309 2.626 -1.8072830e-01 -4.3870800e-01 +1310 2.628 -1.7985285e-01 -4.3673881e-01 +1311 2.63 -1.7898134e-01 -4.3477675e-01 +1312 2.632 -1.7811374e-01 -4.3282182e-01 +1313 2.634 -1.7725004e-01 -4.3087401e-01 +1314 2.636 -1.7639024e-01 -4.2893332e-01 +1315 2.638 -1.7553431e-01 -4.2699974e-01 +1316 2.64 -1.7468223e-01 -4.2507326e-01 +1317 2.642 -1.7383401e-01 -4.2315388e-01 +1318 2.644 -1.7298961e-01 -4.2124159e-01 +1319 2.646 -1.7214904e-01 -4.1933638e-01 +1320 2.648 -1.7131226e-01 -4.1743824e-01 +1321 2.65 -1.7047928e-01 -4.1554716e-01 +1322 2.652 -1.6965007e-01 -4.1366314e-01 +1323 2.654 -1.6882462e-01 -4.1178617e-01 +1324 2.656 -1.6800292e-01 -4.0991624e-01 +1325 2.658 -1.6718495e-01 -4.0805334e-01 +1326 2.66 -1.6637070e-01 -4.0619746e-01 +1327 2.662 -1.6556016e-01 -4.0434859e-01 +1328 2.664 -1.6475330e-01 -4.0250672e-01 +1329 2.666 -1.6395013e-01 -4.0067184e-01 +1330 2.668 -1.6315061e-01 -3.9884395e-01 +1331 2.67 -1.6235475e-01 -3.9702302e-01 +1332 2.672 -1.6156252e-01 -3.9520906e-01 +1333 2.674 -1.6077391e-01 -3.9340204e-01 +1334 2.676 -1.5998890e-01 -3.9160196e-01 +1335 2.678 -1.5920749e-01 -3.8980881e-01 +1336 2.68 -1.5842966e-01 -3.8802257e-01 +1337 2.682 -1.5765540e-01 -3.8624323e-01 +1338 2.684 -1.5688469e-01 -3.8447079e-01 +1339 2.686 -1.5611751e-01 -3.8270523e-01 +1340 2.688 -1.5535386e-01 -3.8094653e-01 +1341 2.69 -1.5459372e-01 -3.7919469e-01 +1342 2.692 -1.5383708e-01 -3.7744970e-01 +1343 2.694 -1.5308392e-01 -3.7571153e-01 +1344 2.696 -1.5233423e-01 -3.7398018e-01 +1345 2.698 -1.5158799e-01 -3.7225563e-01 +1346 2.7 -1.5084520e-01 -3.7053787e-01 +1347 2.702 -1.5010584e-01 -3.6882690e-01 +1348 2.704 -1.4936989e-01 -3.6712268e-01 +1349 2.706 -1.4863734e-01 -3.6542522e-01 +1350 2.708 -1.4790818e-01 -3.6373449e-01 +1351 2.71 -1.4718240e-01 -3.6205048e-01 +1352 2.712 -1.4645998e-01 -3.6037318e-01 +1353 2.714 -1.4574090e-01 -3.5870258e-01 +1354 2.716 -1.4502516e-01 -3.5703865e-01 +1355 2.718 -1.4431274e-01 -3.5538140e-01 +1356 2.72 -1.4360363e-01 -3.5373079e-01 +1357 2.722 -1.4289781e-01 -3.5208681e-01 +1358 2.724 -1.4219528e-01 -3.5044946e-01 +1359 2.726 -1.4149601e-01 -3.4881872e-01 +1360 2.728 -1.4080000e-01 -3.4719456e-01 +1361 2.73 -1.4010723e-01 -3.4557698e-01 +1362 2.732 -1.3941769e-01 -3.4396596e-01 +1363 2.734 -1.3873136e-01 -3.4236148e-01 +1364 2.736 -1.3804824e-01 -3.4076354e-01 +1365 2.738 -1.3736830e-01 -3.3917210e-01 +1366 2.74 -1.3669154e-01 -3.3758717e-01 +1367 2.742 -1.3601795e-01 -3.3600871e-01 +1368 2.744 -1.3534751e-01 -3.3443672e-01 +1369 2.746 -1.3468020e-01 -3.3287119e-01 +1370 2.748 -1.3401602e-01 -3.3131208e-01 +1371 2.75 -1.3335495e-01 -3.2975939e-01 +1372 2.752 -1.3269697e-01 -3.2821310e-01 +1373 2.754 -1.3204209e-01 -3.2667320e-01 +1374 2.756 -1.3139028e-01 -3.2513966e-01 +1375 2.758 -1.3074153e-01 -3.2361247e-01 +1376 2.76 -1.3009582e-01 -3.2209162e-01 +1377 2.762 -1.2945316e-01 -3.2057709e-01 +1378 2.764 -1.2881351e-01 -3.1906886e-01 +1379 2.766 -1.2817688e-01 -3.1756691e-01 +1380 2.768 -1.2754324e-01 -3.1607122e-01 +1381 2.77 -1.2691259e-01 -3.1458179e-01 +1382 2.772 -1.2628491e-01 -3.1309859e-01 +1383 2.774 -1.2566019e-01 -3.1162160e-01 +1384 2.776 -1.2503842e-01 -3.1015081e-01 +1385 2.778 -1.2441958e-01 -3.0868621e-01 +1386 2.78 -1.2380367e-01 -3.0722776e-01 +1387 2.782 -1.2319067e-01 -3.0577546e-01 +1388 2.784 -1.2258056e-01 -3.0432929e-01 +1389 2.786 -1.2197334e-01 -3.0288923e-01 +1390 2.788 -1.2136900e-01 -3.0145527e-01 +1391 2.79 -1.2076752e-01 -3.0002738e-01 +1392 2.792 -1.2016889e-01 -2.9860554e-01 +1393 2.794 -1.1957309e-01 -2.9718975e-01 +1394 2.796 -1.1898012e-01 -2.9577997e-01 +1395 2.798 -1.1838997e-01 -2.9437621e-01 +1396 2.8 -1.1780262e-01 -2.9297842e-01 +1397 2.802 -1.1721805e-01 -2.9158661e-01 +1398 2.804 -1.1663627e-01 -2.9020074e-01 +1399 2.806 -1.1605724e-01 -2.8882081e-01 +1400 2.808 -1.1548098e-01 -2.8744679e-01 +1401 2.81 -1.1490745e-01 -2.8607867e-01 +1402 2.812 -1.1433666e-01 -2.8471643e-01 +1403 2.814 -1.1376858e-01 -2.8336004e-01 +1404 2.816 -1.1320322e-01 -2.8200950e-01 +1405 2.818 -1.1264054e-01 -2.8066478e-01 +1406 2.82 -1.1208055e-01 -2.7932586e-01 +1407 2.822 -1.1152323e-01 -2.7799273e-01 +1408 2.824 -1.1096858e-01 -2.7666537e-01 +1409 2.826 -1.1041657e-01 -2.7534376e-01 +1410 2.828 -1.0986720e-01 -2.7402788e-01 +1411 2.83 -1.0932045e-01 -2.7271771e-01 +1412 2.832 -1.0877632e-01 -2.7141324e-01 +1413 2.834 -1.0823480e-01 -2.7011445e-01 +1414 2.836 -1.0769586e-01 -2.6882131e-01 +1415 2.838 -1.0715951e-01 -2.6753381e-01 +1416 2.84 -1.0662572e-01 -2.6625193e-01 +1417 2.842 -1.0609450e-01 -2.6497566e-01 +1418 2.844 -1.0556582e-01 -2.6370497e-01 +1419 2.846 -1.0503967e-01 -2.6243984e-01 +1420 2.848 -1.0451605e-01 -2.6118026e-01 +1421 2.85 -1.0399495e-01 -2.5992621e-01 +1422 2.852 -1.0347635e-01 -2.5867767e-01 +1423 2.854 -1.0296023e-01 -2.5743462e-01 +1424 2.856 -1.0244660e-01 -2.5619704e-01 +1425 2.858 -1.0193544e-01 -2.5496492e-01 +1426 2.86 -1.0142674e-01 -2.5373823e-01 +1427 2.862 -1.0092049e-01 -2.5251696e-01 +1428 2.864 -1.0041667e-01 -2.5130109e-01 +1429 2.866 -9.9915278e-02 -2.5009060e-01 +1430 2.868 -9.9416303e-02 -2.4888546e-01 +1431 2.87 -9.8919733e-02 -2.4768568e-01 +1432 2.872 -9.8425557e-02 -2.4649121e-01 +1433 2.874 -9.7933764e-02 -2.4530205e-01 +1434 2.876 -9.7444345e-02 -2.4411818e-01 +1435 2.878 -9.6957288e-02 -2.4293958e-01 +1436 2.88 -9.6472583e-02 -2.4176622e-01 +1437 2.882 -9.5990220e-02 -2.4059810e-01 +1438 2.884 -9.5510187e-02 -2.3943519e-01 +1439 2.886 -9.5032475e-02 -2.3827747e-01 +1440 2.888 -9.4557074e-02 -2.3712493e-01 +1441 2.89 -9.4083972e-02 -2.3597755e-01 +1442 2.892 -9.3613160e-02 -2.3483531e-01 +1443 2.894 -9.3144628e-02 -2.3369818e-01 +1444 2.896 -9.2678364e-02 -2.3256616e-01 +1445 2.898 -9.2214360e-02 -2.3143922e-01 +1446 2.9 -9.1752604e-02 -2.3031735e-01 +1447 2.902 -9.1293087e-02 -2.2920052e-01 +1448 2.904 -9.0835798e-02 -2.2808872e-01 +1449 2.906 -9.0380729e-02 -2.2698194e-01 +1450 2.908 -8.9927867e-02 -2.2588014e-01 +1451 2.91 -8.9477205e-02 -2.2478331e-01 +1452 2.912 -8.9028731e-02 -2.2369144e-01 +1453 2.914 -8.8582436e-02 -2.2260451e-01 +1454 2.916 -8.8138309e-02 -2.2152249e-01 +1455 2.918 -8.7696342e-02 -2.2044537e-01 +1456 2.92 -8.7256525e-02 -2.1937314e-01 +1457 2.922 -8.6818847e-02 -2.1830577e-01 +1458 2.924 -8.6383298e-02 -2.1724324e-01 +1459 2.926 -8.5949870e-02 -2.1618554e-01 +1460 2.928 -8.5518553e-02 -2.1513265e-01 +1461 2.93 -8.5089337e-02 -2.1408455e-01 +1462 2.932 -8.4662212e-02 -2.1304122e-01 +1463 2.934 -8.4237169e-02 -2.1200264e-01 +1464 2.936 -8.3814198e-02 -2.1096880e-01 +1465 2.938 -8.3393290e-02 -2.0993968e-01 +1466 2.94 -8.2974436e-02 -2.0891526e-01 +1467 2.942 -8.2557626e-02 -2.0789553e-01 +1468 2.944 -8.2142851e-02 -2.0688045e-01 +1469 2.946 -8.1730101e-02 -2.0587002e-01 +1470 2.948 -8.1319368e-02 -2.0486423e-01 +1471 2.95 -8.0910641e-02 -2.0386304e-01 +1472 2.952 -8.0503912e-02 -2.0286644e-01 +1473 2.954 -8.0099172e-02 -2.0187442e-01 +1474 2.956 -7.9696412e-02 -2.0088696e-01 +1475 2.958 -7.9295622e-02 -1.9990403e-01 +1476 2.96 -7.8896793e-02 -1.9892563e-01 +1477 2.962 -7.8499916e-02 -1.9795173e-01 +1478 2.964 -7.8104983e-02 -1.9698232e-01 +1479 2.966 -7.7711984e-02 -1.9601737e-01 +1480 2.968 -7.7320910e-02 -1.9505688e-01 +1481 2.97 -7.6931753e-02 -1.9410082e-01 +1482 2.972 -7.6544504e-02 -1.9314918e-01 +1483 2.974 -7.6159154e-02 -1.9220193e-01 +1484 2.976 -7.5775693e-02 -1.9125907e-01 +1485 2.978 -7.5394114e-02 -1.9032057e-01 +1486 2.98 -7.5014408e-02 -1.8938641e-01 +1487 2.982 -7.4636566e-02 -1.8845659e-01 +1488 2.984 -7.4260579e-02 -1.8753108e-01 +1489 2.986 -7.3886439e-02 -1.8660986e-01 +1490 2.988 -7.3514137e-02 -1.8569292e-01 +1491 2.99 -7.3143664e-02 -1.8478024e-01 +1492 2.992 -7.2775013e-02 -1.8387180e-01 +1493 2.994 -7.2408174e-02 -1.8296759e-01 +1494 2.996 -7.2043140e-02 -1.8206759e-01 +1495 2.998 -7.1679901e-02 -1.8117177e-01 +1496 3.0 -7.1318450e-02 -1.8028014e-01 +1497 3.002 -7.0958778e-02 -1.7939266e-01 +1498 3.004 -7.0600876e-02 -1.7850932e-01 +1499 3.006 -7.0244738e-02 -1.7763011e-01 +1500 3.008 -6.9890353e-02 -1.7675500e-01 +1501 3.01 -6.9537715e-02 -1.7588399e-01 +1502 3.012 -6.9186815e-02 -1.7501704e-01 +1503 3.014 -6.8837644e-02 -1.7415416e-01 +1504 3.016 -6.8490195e-02 -1.7329531e-01 +1505 3.018 -6.8144460e-02 -1.7244049e-01 +1506 3.02 -6.7800431e-02 -1.7158968e-01 +1507 3.022 -6.7458099e-02 -1.7074286e-01 +1508 3.024 -6.7117457e-02 -1.6990001e-01 +1509 3.026 -6.6778496e-02 -1.6906112e-01 +1510 3.028 -6.6441209e-02 -1.6822617e-01 +1511 3.03 -6.6105589e-02 -1.6739514e-01 +1512 3.032 -6.5771626e-02 -1.6656803e-01 +1513 3.034 -6.5439314e-02 -1.6574480e-01 +1514 3.036 -6.5108645e-02 -1.6492545e-01 +1515 3.038 -6.4779610e-02 -1.6410997e-01 +1516 3.04 -6.4452202e-02 -1.6329832e-01 +1517 3.042 -6.4126414e-02 -1.6249051e-01 +1518 3.044 -6.3802238e-02 -1.6168650e-01 +1519 3.046 -6.3479665e-02 -1.6088629e-01 +1520 3.048 -6.3158690e-02 -1.6008986e-01 +1521 3.05 -6.2839303e-02 -1.5929720e-01 +1522 3.052 -6.2521499e-02 -1.5850828e-01 +1523 3.054 -6.2205268e-02 -1.5772310e-01 +1524 3.056 -6.1890604e-02 -1.5694163e-01 +1525 3.058 -6.1577499e-02 -1.5616386e-01 +1526 3.06 -6.1265946e-02 -1.5538977e-01 +1527 3.062 -6.0955937e-02 -1.5461936e-01 +1528 3.064 -6.0647466e-02 -1.5385260e-01 +1529 3.066 -6.0340524e-02 -1.5308948e-01 +1530 3.068 -6.0035106e-02 -1.5232998e-01 +1531 3.07 -5.9731202e-02 -1.5157408e-01 +1532 3.072 -5.9428807e-02 -1.5082178e-01 +1533 3.074 -5.9127913e-02 -1.5007306e-01 +1534 3.076 -5.8828512e-02 -1.4932790e-01 +1535 3.078 -5.8530599e-02 -1.4858628e-01 +1536 3.08 -5.8234165e-02 -1.4784819e-01 +1537 3.082 -5.7939204e-02 -1.4711362e-01 +1538 3.084 -5.7645708e-02 -1.4638255e-01 +1539 3.086 -5.7353671e-02 -1.4565496e-01 +1540 3.088 -5.7063086e-02 -1.4493084e-01 +1541 3.09 -5.6773945e-02 -1.4421018e-01 +1542 3.092 -5.6486243e-02 -1.4349296e-01 +1543 3.094 -5.6199971e-02 -1.4277917e-01 +1544 3.096 -5.5915124e-02 -1.4206878e-01 +1545 3.098 -5.5631694e-02 -1.4136179e-01 +1546 3.1 -5.5349674e-02 -1.4065818e-01 +1547 3.102 -5.5069059e-02 -1.3995794e-01 +1548 3.104 -5.4789840e-02 -1.3926105e-01 +1549 3.106 -5.4512012e-02 -1.3856750e-01 +1550 3.108 -5.4235568e-02 -1.3787727e-01 +1551 3.11 -5.3960501e-02 -1.3719034e-01 +1552 3.112 -5.3686805e-02 -1.3650671e-01 +1553 3.114 -5.3414472e-02 -1.3582636e-01 +1554 3.116 -5.3143497e-02 -1.3514927e-01 +1555 3.118 -5.2873873e-02 -1.3447544e-01 +1556 3.12 -5.2605593e-02 -1.3380484e-01 +1557 3.122 -5.2338651e-02 -1.3313746e-01 +1558 3.124 -5.2073041e-02 -1.3247329e-01 +1559 3.126 -5.1808756e-02 -1.3181231e-01 +1560 3.128 -5.1545790e-02 -1.3115451e-01 +1561 3.13 -5.1284136e-02 -1.3049988e-01 +1562 3.132 -5.1023788e-02 -1.2984840e-01 +1563 3.134 -5.0764740e-02 -1.2920006e-01 +1564 3.136 -5.0506986e-02 -1.2855484e-01 +1565 3.138 -5.0250519e-02 -1.2791273e-01 +1566 3.14 -4.9995333e-02 -1.2727371e-01 +1567 3.142 -4.9741422e-02 -1.2663778e-01 +1568 3.144 -4.9488780e-02 -1.2600492e-01 +1569 3.146 -4.9237400e-02 -1.2537511e-01 +1570 3.148 -4.8987277e-02 -1.2474834e-01 +1571 3.15 -4.8738405e-02 -1.2412460e-01 +1572 3.152 -4.8490777e-02 -1.2350388e-01 +1573 3.154 -4.8244387e-02 -1.2288615e-01 +1574 3.156 -4.7999230e-02 -1.2227142e-01 +1575 3.158 -4.7755300e-02 -1.2165965e-01 +1576 3.16 -4.7512590e-02 -1.2105085e-01 +1577 3.162 -4.7271094e-02 -1.2044499e-01 +1578 3.164 -4.7030808e-02 -1.1984207e-01 +1579 3.166 -4.6791724e-02 -1.1924207e-01 +1580 3.168 -4.6553838e-02 -1.1864498e-01 +1581 3.17 -4.6317142e-02 -1.1805078e-01 +1582 3.172 -4.6081632e-02 -1.1745947e-01 +1583 3.174 -4.5847302e-02 -1.1687102e-01 +1584 3.176 -4.5614146e-02 -1.1628543e-01 +1585 3.178 -4.5382159e-02 -1.1570268e-01 +1586 3.18 -4.5151334e-02 -1.1512276e-01 +1587 3.182 -4.4921666e-02 -1.1454566e-01 +1588 3.184 -4.4693149e-02 -1.1397137e-01 +1589 3.186 -4.4465779e-02 -1.1339986e-01 +1590 3.188 -4.4239548e-02 -1.1283114e-01 +1591 3.19 -4.4014452e-02 -1.1226518e-01 +1592 3.192 -4.3790485e-02 -1.1170198e-01 +1593 3.194 -4.3567642e-02 -1.1114152e-01 +1594 3.196 -4.3345918e-02 -1.1058378e-01 +1595 3.198 -4.3125305e-02 -1.1002877e-01 +1596 3.2 -4.2905801e-02 -1.0947646e-01 +1597 3.202 -4.2687398e-02 -1.0892684e-01 +1598 3.204 -4.2470092e-02 -1.0837990e-01 +1599 3.206 -4.2253877e-02 -1.0783562e-01 +1600 3.208 -4.2038747e-02 -1.0729401e-01 +1601 3.21 -4.1824699e-02 -1.0675503e-01 +1602 3.212 -4.1611725e-02 -1.0621869e-01 +1603 3.214 -4.1399822e-02 -1.0568497e-01 +1604 3.216 -4.1188984e-02 -1.0515385e-01 +1605 3.218 -4.0979205e-02 -1.0462533e-01 +1606 3.22 -4.0770481e-02 -1.0409939e-01 +1607 3.222 -4.0562806e-02 -1.0357602e-01 +1608 3.224 -4.0356175e-02 -1.0305522e-01 +1609 3.226 -4.0150583e-02 -1.0253696e-01 +1610 3.228 -3.9946025e-02 -1.0202124e-01 +1611 3.23 -3.9742497e-02 -1.0150804e-01 +1612 3.232 -3.9539992e-02 -1.0099735e-01 +1613 3.234 -3.9338506e-02 -1.0048917e-01 +1614 3.236 -3.9138033e-02 -9.9983475e-02 +1615 3.238 -3.8938570e-02 -9.9480259e-02 +1616 3.24 -3.8740111e-02 -9.8979509e-02 +1617 3.242 -3.8542650e-02 -9.8481216e-02 +1618 3.244 -3.8346184e-02 -9.7985366e-02 +1619 3.246 -3.8150707e-02 -9.7491949e-02 +1620 3.248 -3.7956215e-02 -9.7000953e-02 +1621 3.25 -3.7762702e-02 -9.6512368e-02 +1622 3.252 -3.7570164e-02 -9.6026182e-02 +1623 3.254 -3.7378595e-02 -9.5542384e-02 +1624 3.256 -3.7187993e-02 -9.5060963e-02 +1625 3.258 -3.6998350e-02 -9.4581907e-02 +1626 3.26 -3.6809663e-02 -9.4105207e-02 +1627 3.262 -3.6621928e-02 -9.3630850e-02 +1628 3.264 -3.6435138e-02 -9.3158826e-02 +1629 3.266 -3.6249291e-02 -9.2689125e-02 +1630 3.268 -3.6064380e-02 -9.2221735e-02 +1631 3.27 -3.5880402e-02 -9.1756645e-02 +1632 3.272 -3.5697352e-02 -9.1293845e-02 +1633 3.274 -3.5515225e-02 -9.0833324e-02 +1634 3.276 -3.5334017e-02 -9.0375072e-02 +1635 3.278 -3.5153724e-02 -8.9919078e-02 +1636 3.28 -3.4974340e-02 -8.9465331e-02 +1637 3.282 -3.4795861e-02 -8.9013821e-02 +1638 3.284 -3.4618283e-02 -8.8564537e-02 +1639 3.286 -3.4441601e-02 -8.8117469e-02 +1640 3.288 -3.4265811e-02 -8.7672606e-02 +1641 3.29 -3.4090909e-02 -8.7229939e-02 +1642 3.292 -3.3916890e-02 -8.6789457e-02 +1643 3.294 -3.3743750e-02 -8.6351149e-02 +1644 3.296 -3.3571484e-02 -8.5915006e-02 +1645 3.298 -3.3400089e-02 -8.5481017e-02 +1646 3.3 -3.3229559e-02 -8.5049172e-02 +1647 3.302 -3.3059890e-02 -8.4619461e-02 +1648 3.304 -3.2891079e-02 -8.4191874e-02 +1649 3.306 -3.2723122e-02 -8.3766401e-02 +1650 3.308 -3.2556012e-02 -8.3343032e-02 +1651 3.31 -3.2389748e-02 -8.2921757e-02 +1652 3.312 -3.2224324e-02 -8.2502566e-02 +1653 3.314 -3.2059736e-02 -8.2085450e-02 +1654 3.316 -3.1895981e-02 -8.1670398e-02 +1655 3.318 -3.1733053e-02 -8.1257402e-02 +1656 3.32 -3.1570950e-02 -8.0846450e-02 +1657 3.322 -3.1409666e-02 -8.0437534e-02 +1658 3.324 -3.1249198e-02 -8.0030643e-02 +1659 3.326 -3.1089542e-02 -7.9625769e-02 +1660 3.328 -3.0930694e-02 -7.9222901e-02 +1661 3.33 -3.0772649e-02 -7.8822031e-02 +1662 3.332 -3.0615405e-02 -7.8423148e-02 +1663 3.334 -3.0458956e-02 -7.8026244e-02 +1664 3.336 -3.0303298e-02 -7.7631308e-02 +1665 3.338 -3.0148429e-02 -7.7238332e-02 +1666 3.34 -2.9994344e-02 -7.6847307e-02 +1667 3.342 -2.9841038e-02 -7.6458222e-02 +1668 3.344 -2.9688509e-02 -7.6071069e-02 +1669 3.346 -2.9536753e-02 -7.5685838e-02 +1670 3.348 -2.9385765e-02 -7.5302521e-02 +1671 3.35 -2.9235542e-02 -7.4921108e-02 +1672 3.352 -2.9086079e-02 -7.4541590e-02 +1673 3.354 -2.8937374e-02 -7.4163959e-02 +1674 3.356 -2.8789422e-02 -7.3788205e-02 +1675 3.358 -2.8642220e-02 -7.3414318e-02 +1676 3.36 -2.8495764e-02 -7.3042292e-02 +1677 3.362 -2.8350049e-02 -7.2672115e-02 +1678 3.364 -2.8205074e-02 -7.2303780e-02 +1679 3.366 -2.8060833e-02 -7.1937278e-02 +1680 3.368 -2.7917324e-02 -7.1572600e-02 +1681 3.37 -2.7774541e-02 -7.1209738e-02 +1682 3.372 -2.7632483e-02 -7.0848682e-02 +1683 3.374 -2.7491146e-02 -7.0489424e-02 +1684 3.376 -2.7350524e-02 -7.0131955e-02 +1685 3.378 -2.7210617e-02 -6.9776267e-02 +1686 3.38 -2.7071418e-02 -6.9422351e-02 +1687 3.382 -2.6932926e-02 -6.9070199e-02 +1688 3.384 -2.6795136e-02 -6.8719802e-02 +1689 3.386 -2.6658046e-02 -6.8371153e-02 +1690 3.388 -2.6521651e-02 -6.8024241e-02 +1691 3.39 -2.6385947e-02 -6.7679060e-02 +1692 3.392 -2.6250933e-02 -6.7335600e-02 +1693 3.394 -2.6116604e-02 -6.6993855e-02 +1694 3.396 -2.5982957e-02 -6.6653814e-02 +1695 3.398 -2.5849988e-02 -6.6315470e-02 +1696 3.4 -2.5717694e-02 -6.5978816e-02 +1697 3.402 -2.5586071e-02 -6.5643842e-02 +1698 3.404 -2.5455117e-02 -6.5310541e-02 +1699 3.406 -2.5324828e-02 -6.4978904e-02 +1700 3.408 -2.5195200e-02 -6.4648924e-02 +1701 3.41 -2.5066231e-02 -6.4320593e-02 +1702 3.412 -2.4937917e-02 -6.3993902e-02 +1703 3.414 -2.4810254e-02 -6.3668845e-02 +1704 3.416 -2.4683240e-02 -6.3345412e-02 +1705 3.418 -2.4556872e-02 -6.3023596e-02 +1706 3.42 -2.4431145e-02 -6.2703389e-02 +1707 3.422 -2.4306057e-02 -6.2384783e-02 +1708 3.424 -2.4181605e-02 -6.2067772e-02 +1709 3.426 -2.4057785e-02 -6.1752346e-02 +1710 3.428 -2.3934594e-02 -6.1438499e-02 +1711 3.43 -2.3812030e-02 -6.1126222e-02 +1712 3.432 -2.3690088e-02 -6.0815508e-02 +1713 3.434 -2.3568767e-02 -6.0506350e-02 +1714 3.436 -2.3448062e-02 -6.0198740e-02 +1715 3.438 -2.3327971e-02 -5.9892670e-02 +1716 3.44 -2.3208490e-02 -5.9588133e-02 +1717 3.442 -2.3089617e-02 -5.9285122e-02 +1718 3.444 -2.2971349e-02 -5.8983628e-02 +1719 3.446 -2.2853682e-02 -5.8683646e-02 +1720 3.448 -2.2736613e-02 -5.8385167e-02 +1721 3.45 -2.2620140e-02 -5.8088184e-02 +1722 3.452 -2.2504259e-02 -5.7792690e-02 +1723 3.454 -2.2388968e-02 -5.7498678e-02 +1724 3.456 -2.2274264e-02 -5.7206140e-02 +1725 3.458 -2.2160143e-02 -5.6915069e-02 +1726 3.46 -2.2046603e-02 -5.6625458e-02 +1727 3.462 -2.1933640e-02 -5.6337301e-02 +1728 3.464 -2.1821252e-02 -5.6050589e-02 +1729 3.466 -2.1709437e-02 -5.5765316e-02 +1730 3.468 -2.1598190e-02 -5.5481475e-02 +1731 3.47 -2.1487510e-02 -5.5199059e-02 +1732 3.472 -2.1377393e-02 -5.4918061e-02 +1733 3.474 -2.1267837e-02 -5.4638474e-02 +1734 3.476 -2.1158838e-02 -5.4360291e-02 +1735 3.478 -2.1050395e-02 -5.4083506e-02 +1736 3.48 -2.0942503e-02 -5.3808111e-02 +1737 3.482 -2.0835161e-02 -5.3534099e-02 +1738 3.484 -2.0728366e-02 -5.3261465e-02 +1739 3.486 -2.0622114e-02 -5.2990200e-02 +1740 3.488 -2.0516404e-02 -5.2720300e-02 +1741 3.49 -2.0411232e-02 -5.2451756e-02 +1742 3.492 -2.0306596e-02 -5.2184562e-02 +1743 3.494 -2.0202493e-02 -5.1918712e-02 +1744 3.496 -2.0098920e-02 -5.1654199e-02 +1745 3.498 -1.9995875e-02 -5.1391016e-02 +1746 3.5 -1.9893356e-02 -5.1129158e-02 +1747 3.502 -1.9791358e-02 -5.0868616e-02 +1748 3.504 -1.9689880e-02 -5.0609386e-02 +1749 3.506 -1.9588920e-02 -5.0351461e-02 +1750 3.508 -1.9488473e-02 -5.0094833e-02 +1751 3.51 -1.9388539e-02 -4.9839498e-02 +1752 3.512 -1.9289115e-02 -4.9585448e-02 +1753 3.514 -1.9190197e-02 -4.9332677e-02 +1754 3.516 -1.9091783e-02 -4.9081180e-02 +1755 3.518 -1.8993871e-02 -4.8830949e-02 +1756 3.52 -1.8896458e-02 -4.8581978e-02 +1757 3.522 -1.8799542e-02 -4.8334262e-02 +1758 3.524 -1.8703121e-02 -4.8087793e-02 +1759 3.526 -1.8607190e-02 -4.7842567e-02 +1760 3.528 -1.8511749e-02 -4.7598577e-02 +1761 3.53 -1.8416795e-02 -4.7355816e-02 +1762 3.532 -1.8322325e-02 -4.7114280e-02 +1763 3.534 -1.8228337e-02 -4.6873960e-02 +1764 3.536 -1.8134829e-02 -4.6634853e-02 +1765 3.538 -1.8041797e-02 -4.6396952e-02 +1766 3.54 -1.7949240e-02 -4.6160250e-02 +1767 3.542 -1.7857155e-02 -4.5924742e-02 +1768 3.544 -1.7765540e-02 -4.5690423e-02 +1769 3.546 -1.7674393e-02 -4.5457285e-02 +1770 3.548 -1.7583710e-02 -4.5225324e-02 +1771 3.55 -1.7493491e-02 -4.4994533e-02 +1772 3.552 -1.7403732e-02 -4.4764908e-02 +1773 3.554 -1.7314430e-02 -4.4536441e-02 +1774 3.556 -1.7225585e-02 -4.4309128e-02 +1775 3.558 -1.7137193e-02 -4.4082962e-02 +1776 3.56 -1.7049252e-02 -4.3857938e-02 +1777 3.562 -1.6961761e-02 -4.3634051e-02 +1778 3.564 -1.6874715e-02 -4.3411295e-02 +1779 3.566 -1.6788115e-02 -4.3189663e-02 +1780 3.568 -1.6701956e-02 -4.2969151e-02 +1781 3.57 -1.6616237e-02 -4.2749754e-02 +1782 3.572 -1.6530956e-02 -4.2531464e-02 +1783 3.574 -1.6446111e-02 -4.2314278e-02 +1784 3.576 -1.6361698e-02 -4.2098190e-02 +1785 3.578 -1.6277717e-02 -4.1883194e-02 +1786 3.58 -1.6194165e-02 -4.1669284e-02 +1787 3.582 -1.6111039e-02 -4.1456456e-02 +1788 3.584 -1.6028338e-02 -4.1244704e-02 +1789 3.586 -1.5946060e-02 -4.1034023e-02 +1790 3.588 -1.5864202e-02 -4.0824407e-02 +1791 3.59 -1.5782762e-02 -4.0615852e-02 +1792 3.592 -1.5701737e-02 -4.0408351e-02 +1793 3.594 -1.5621127e-02 -4.0201900e-02 +1794 3.596 -1.5540929e-02 -3.9996493e-02 +1795 3.598 -1.5461141e-02 -3.9792126e-02 +1796 3.6 -1.5381760e-02 -3.9588793e-02 +1797 3.602 -1.5302785e-02 -3.9386489e-02 +1798 3.604 -1.5224213e-02 -3.9185209e-02 +1799 3.606 -1.5146043e-02 -3.8984948e-02 +1800 3.608 -1.5068273e-02 -3.8785700e-02 +1801 3.61 -1.4990900e-02 -3.8587462e-02 +1802 3.612 -1.4913922e-02 -3.8390227e-02 +1803 3.614 -1.4837338e-02 -3.8193990e-02 +1804 3.616 -1.4761146e-02 -3.7998748e-02 +1805 3.618 -1.4685343e-02 -3.7804494e-02 +1806 3.62 -1.4609927e-02 -3.7611225e-02 +1807 3.622 -1.4534897e-02 -3.7418934e-02 +1808 3.624 -1.4460251e-02 -3.7227618e-02 +1809 3.626 -1.4385986e-02 -3.7037271e-02 +1810 3.628 -1.4312101e-02 -3.6847888e-02 +1811 3.63 -1.4238594e-02 -3.6659466e-02 +1812 3.632 -1.4165462e-02 -3.6471998e-02 +1813 3.634 -1.4092705e-02 -3.6285480e-02 +1814 3.636 -1.4020320e-02 -3.6099908e-02 +1815 3.638 -1.3948305e-02 -3.5915277e-02 +1816 3.64 -1.3876658e-02 -3.5731582e-02 +1817 3.642 -1.3805378e-02 -3.5548818e-02 +1818 3.644 -1.3734462e-02 -3.5366981e-02 +1819 3.646 -1.3663909e-02 -3.5186067e-02 +1820 3.648 -1.3593717e-02 -3.5006069e-02 +1821 3.65 -1.3523885e-02 -3.4826985e-02 +1822 3.652 -1.3454409e-02 -3.4648809e-02 +1823 3.654 -1.3385289e-02 -3.4471538e-02 +1824 3.656 -1.3316522e-02 -3.4295165e-02 +1825 3.658 -1.3248107e-02 -3.4119688e-02 +1826 3.66 -1.3180043e-02 -3.3945101e-02 +1827 3.662 -1.3112326e-02 -3.3771400e-02 +1828 3.664 -1.3044957e-02 -3.3598581e-02 +1829 3.666 -1.2977932e-02 -3.3426639e-02 +1830 3.668 -1.2911249e-02 -3.3255569e-02 +1831 3.67 -1.2844909e-02 -3.3085369e-02 +1832 3.672 -1.2778907e-02 -3.2916032e-02 +1833 3.674 -1.2713244e-02 -3.2747555e-02 +1834 3.676 -1.2647917e-02 -3.2579934e-02 +1835 3.678 -1.2582924e-02 -3.2413164e-02 +1836 3.68 -1.2518263e-02 -3.2247241e-02 +1837 3.682 -1.2453934e-02 -3.2082161e-02 +1838 3.684 -1.2389934e-02 -3.1917919e-02 +1839 3.686 -1.2326262e-02 -3.1754512e-02 +1840 3.688 -1.2262916e-02 -3.1591935e-02 +1841 3.69 -1.2199894e-02 -3.1430183e-02 +1842 3.692 -1.2137194e-02 -3.1269254e-02 +1843 3.694 -1.2074816e-02 -3.1109143e-02 +1844 3.696 -1.2012757e-02 -3.0949845e-02 +1845 3.698 -1.1951016e-02 -3.0791357e-02 +1846 3.7 -1.1889591e-02 -3.0633675e-02 +1847 3.702 -1.1828481e-02 -3.0476794e-02 +1848 3.704 -1.1767684e-02 -3.0320711e-02 +1849 3.706 -1.1707198e-02 -3.0165421e-02 +1850 3.708 -1.1647021e-02 -3.0010921e-02 +1851 3.71 -1.1587153e-02 -2.9857206e-02 +1852 3.712 -1.1527592e-02 -2.9704273e-02 +1853 3.714 -1.1468336e-02 -2.9552118e-02 +1854 3.716 -1.1409383e-02 -2.9400737e-02 +1855 3.718 -1.1350732e-02 -2.9250125e-02 +1856 3.72 -1.1292382e-02 -2.9100280e-02 +1857 3.722 -1.1234331e-02 -2.8951197e-02 +1858 3.724 -1.1176577e-02 -2.8802873e-02 +1859 3.726 -1.1119119e-02 -2.8655303e-02 +1860 3.728 -1.1061955e-02 -2.8508484e-02 +1861 3.73 -1.1005084e-02 -2.8362413e-02 +1862 3.732 -1.0948505e-02 -2.8217084e-02 +1863 3.734 -1.0892215e-02 -2.8072495e-02 +1864 3.736 -1.0836214e-02 -2.7928642e-02 +1865 3.738 -1.0780500e-02 -2.7785522e-02 +1866 3.74 -1.0725072e-02 -2.7643130e-02 +1867 3.742 -1.0669927e-02 -2.7501462e-02 +1868 3.744 -1.0615065e-02 -2.7360517e-02 +1869 3.746 -1.0560485e-02 -2.7220288e-02 +1870 3.748 -1.0506184e-02 -2.7080774e-02 +1871 3.75 -1.0452161e-02 -2.6941970e-02 +1872 3.752 -1.0398415e-02 -2.6803873e-02 +1873 3.754 -1.0344945e-02 -2.6666479e-02 +1874 3.756 -1.0291749e-02 -2.6529785e-02 +1875 3.758 -1.0238826e-02 -2.6393788e-02 +1876 3.76 -1.0186173e-02 -2.6258483e-02 +1877 3.762 -1.0133791e-02 -2.6123867e-02 +1878 3.764 -1.0081678e-02 -2.5989937e-02 +1879 3.766 -1.0029831e-02 -2.5856690e-02 +1880 3.768 -9.9782503e-03 -2.5724121e-02 +1881 3.77 -9.9269341e-03 -2.5592228e-02 +1882 3.772 -9.8758810e-03 -2.5461007e-02 +1883 3.774 -9.8250896e-03 -2.5330455e-02 +1884 3.776 -9.7745587e-03 -2.5200569e-02 +1885 3.778 -9.7242869e-03 -2.5071344e-02 +1886 3.78 -9.6742729e-03 -2.4942778e-02 +1887 3.782 -9.6245154e-03 -2.4814867e-02 +1888 3.784 -9.5750130e-03 -2.4687608e-02 +1889 3.786 -9.5257645e-03 -2.4560998e-02 +1890 3.788 -9.4767686e-03 -2.4435034e-02 +1891 3.79 -9.4280239e-03 -2.4309712e-02 +1892 3.792 -9.3795293e-03 -2.4185029e-02 +1893 3.794 -9.3312834e-03 -2.4060981e-02 +1894 3.796 -9.2832850e-03 -2.3937567e-02 +1895 3.798 -9.2355327e-03 -2.3814782e-02 +1896 3.8 -9.1880254e-03 -2.3692623e-02 +1897 3.802 -9.1407618e-03 -2.3571087e-02 +1898 3.804 -9.0937407e-03 -2.3450171e-02 +1899 3.806 -9.0469607e-03 -2.3329871e-02 +1900 3.808 -9.0004208e-03 -2.3210186e-02 +1901 3.81 -8.9541196e-03 -2.3091111e-02 +1902 3.812 -8.9080559e-03 -2.2972644e-02 +1903 3.814 -8.8622286e-03 -2.2854781e-02 +1904 3.816 -8.8166364e-03 -2.2737520e-02 +1905 3.818 -8.7712781e-03 -2.2620856e-02 +1906 3.82 -8.7261526e-03 -2.2504789e-02 +1907 3.822 -8.6812586e-03 -2.2389313e-02 +1908 3.824 -8.6365949e-03 -2.2274427e-02 +1909 3.826 -8.5921605e-03 -2.2160128e-02 +1910 3.828 -8.5479540e-03 -2.2046412e-02 +1911 3.83 -8.5039744e-03 -2.1933276e-02 +1912 3.832 -8.4602205e-03 -2.1820718e-02 +1913 3.834 -8.4166912e-03 -2.1708735e-02 +1914 3.836 -8.3733852e-03 -2.1597323e-02 +1915 3.838 -8.3303015e-03 -2.1486480e-02 +1916 3.84 -8.2874389e-03 -2.1376203e-02 +1917 3.842 -8.2447963e-03 -2.1266489e-02 +1918 3.844 -8.2023726e-03 -2.1157336e-02 +1919 3.846 -8.1601666e-03 -2.1048740e-02 +1920 3.848 -8.1181772e-03 -2.0940698e-02 +1921 3.85 -8.0764034e-03 -2.0833208e-02 +1922 3.852 -8.0348440e-03 -2.0726268e-02 +1923 3.854 -7.9934980e-03 -2.0619873e-02 +1924 3.856 -7.9523642e-03 -2.0514022e-02 +1925 3.858 -7.9114415e-03 -2.0408712e-02 +1926 3.86 -7.8707290e-03 -2.0303940e-02 +1927 3.862 -7.8302254e-03 -2.0199703e-02 +1928 3.864 -7.7899298e-03 -2.0095999e-02 +1929 3.866 -7.7498411e-03 -1.9992824e-02 +1930 3.868 -7.7099582e-03 -1.9890177e-02 +1931 3.87 -7.6702800e-03 -1.9788054e-02 +1932 3.872 -7.6308056e-03 -1.9686453e-02 +1933 3.874 -7.5915339e-03 -1.9585372e-02 +1934 3.876 -7.5524638e-03 -1.9484807e-02 +1935 3.878 -7.5135943e-03 -1.9384756e-02 +1936 3.88 -7.4749244e-03 -1.9285216e-02 +1937 3.882 -7.4364531e-03 -1.9186185e-02 +1938 3.884 -7.3981793e-03 -1.9087660e-02 +1939 3.886 -7.3601021e-03 -1.8989639e-02 +1940 3.888 -7.3222204e-03 -1.8892120e-02 +1941 3.89 -7.2845333e-03 -1.8795098e-02 +1942 3.892 -7.2470397e-03 -1.8698573e-02 +1943 3.894 -7.2097387e-03 -1.8602541e-02 +1944 3.896 -7.1726292e-03 -1.8507000e-02 +1945 3.898 -7.1357104e-03 -1.8411948e-02 +1946 3.9 -7.0989811e-03 -1.8317382e-02 +1947 3.902 -7.0624405e-03 -1.8223300e-02 +1948 3.904 -7.0260876e-03 -1.8129698e-02 +1949 3.906 -6.9899214e-03 -1.8036576e-02 +1950 3.908 -6.9539410e-03 -1.7943929e-02 +1951 3.91 -6.9181454e-03 -1.7851757e-02 +1952 3.912 -6.8825336e-03 -1.7760056e-02 +1953 3.914 -6.8471048e-03 -1.7668824e-02 +1954 3.916 -6.8118580e-03 -1.7578058e-02 +1955 3.918 -6.7767923e-03 -1.7487757e-02 +1956 3.92 -6.7419067e-03 -1.7397918e-02 +1957 3.922 -6.7072003e-03 -1.7308539e-02 +1958 3.924 -6.6726722e-03 -1.7219617e-02 +1959 3.926 -6.6383215e-03 -1.7131150e-02 +1960 3.928 -6.6041473e-03 -1.7043135e-02 +1961 3.93 -6.5701487e-03 -1.6955571e-02 +1962 3.932 -6.5363247e-03 -1.6868455e-02 +1963 3.934 -6.5026746e-03 -1.6781785e-02 +1964 3.936 -6.4691973e-03 -1.6695558e-02 +1965 3.938 -6.4358920e-03 -1.6609773e-02 +1966 3.94 -6.4027579e-03 -1.6524427e-02 +1967 3.942 -6.3697940e-03 -1.6439517e-02 +1968 3.944 -6.3369996e-03 -1.6355043e-02 +1969 3.946 -6.3043736e-03 -1.6271000e-02 +1970 3.948 -6.2719153e-03 -1.6187388e-02 +1971 3.95 -6.2396238e-03 -1.6104204e-02 +1972 3.952 -6.2074982e-03 -1.6021445e-02 +1973 3.954 -6.1755377e-03 -1.5939111e-02 +1974 3.956 -6.1437415e-03 -1.5857197e-02 +1975 3.958 -6.1121086e-03 -1.5775704e-02 +1976 3.96 -6.0806384e-03 -1.5694627e-02 +1977 3.962 -6.0493298e-03 -1.5613966e-02 +1978 3.964 -6.0181822e-03 -1.5533717e-02 +1979 3.966 -5.9871947e-03 -1.5453880e-02 +1980 3.968 -5.9563664e-03 -1.5374451e-02 +1981 3.97 -5.9256966e-03 -1.5295430e-02 +1982 3.972 -5.8951844e-03 -1.5216812e-02 +1983 3.974 -5.8648291e-03 -1.5138598e-02 +1984 3.976 -5.8346298e-03 -1.5060784e-02 +1985 3.978 -5.8045857e-03 -1.4983369e-02 +1986 3.98 -5.7746960e-03 -1.4906350e-02 +1987 3.982 -5.7449600e-03 -1.4829726e-02 +1988 3.984 -5.7153769e-03 -1.4753494e-02 +1989 3.986 -5.6859458e-03 -1.4677652e-02 +1990 3.988 -5.6566660e-03 -1.4602200e-02 +1991 3.99 -5.6275367e-03 -1.4527133e-02 +1992 3.992 -5.5985572e-03 -1.4452452e-02 +1993 3.994 -5.5697267e-03 -1.4378153e-02 +1994 3.996 -5.5410444e-03 -1.4304234e-02 +1995 3.998 -5.5125095e-03 -1.4230695e-02 +1996 4.0 -5.4841213e-03 -1.4157532e-02 +1997 4.002 -5.4558791e-03 -1.4084744e-02 +1998 4.004 -5.4277821e-03 -1.4012329e-02 +1999 4.006 -5.3998295e-03 -1.3940285e-02 +2000 4.008 -5.3720207e-03 -1.3868610e-02 +2001 4.01 -5.3443549e-03 -1.3797303e-02 +2002 4.012 -5.3168313e-03 -1.3726361e-02 +2003 4.014 -5.2894492e-03 -1.3655783e-02 +2004 4.016 -5.2622079e-03 -1.3585566e-02 +2005 4.018 -5.2351067e-03 -1.3515709e-02 +2006 4.02 -5.2081448e-03 -1.3446211e-02 +2007 4.022 -5.1813216e-03 -1.3377068e-02 +2008 4.024 -5.1546363e-03 -1.3308280e-02 +2009 4.026 -5.1280882e-03 -1.3239845e-02 +2010 4.028 -5.1016767e-03 -1.3171760e-02 +2011 4.03 -5.0754010e-03 -1.3104025e-02 +2012 4.032 -5.0492604e-03 -1.3036637e-02 +2013 4.034 -5.0232542e-03 -1.2969594e-02 +2014 4.036 -4.9973818e-03 -1.2902895e-02 +2015 4.038 -4.9716424e-03 -1.2836538e-02 +2016 4.04 -4.9460354e-03 -1.2770521e-02 +2017 4.042 -4.9205601e-03 -1.2704842e-02 +2018 4.044 -4.8952158e-03 -1.2639501e-02 +2019 4.046 -4.8700018e-03 -1.2574494e-02 +2020 4.048 -4.8449176e-03 -1.2509821e-02 +2021 4.05 -4.8199623e-03 -1.2445480e-02 +2022 4.052 -4.7951354e-03 -1.2381468e-02 +2023 4.054 -4.7704362e-03 -1.2317785e-02 +2024 4.056 -4.7458641e-03 -1.2254428e-02 +2025 4.058 -4.7214183e-03 -1.2191396e-02 +2026 4.06 -4.6970983e-03 -1.2128688e-02 +2027 4.062 -4.6729034e-03 -1.2066301e-02 +2028 4.064 -4.6488329e-03 -1.2004234e-02 +2029 4.066 -4.6248862e-03 -1.1942486e-02 +2030 4.068 -4.6010627e-03 -1.1881054e-02 +2031 4.07 -4.5773618e-03 -1.1819937e-02 +2032 4.072 -4.5537828e-03 -1.1759134e-02 +2033 4.074 -4.5303250e-03 -1.1698643e-02 +2034 4.076 -4.5069880e-03 -1.1638462e-02 +2035 4.078 -4.4837710e-03 -1.1578590e-02 +2036 4.08 -4.4606734e-03 -1.1519025e-02 +2037 4.082 -4.4376947e-03 -1.1459766e-02 +2038 4.084 -4.4148341e-03 -1.1400810e-02 +2039 4.086 -4.3920912e-03 -1.1342157e-02 +2040 4.088 -4.3694653e-03 -1.1283806e-02 +2041 4.09 -4.3469558e-03 -1.1225753e-02 +2042 4.092 -4.3245621e-03 -1.1167998e-02 +2043 4.094 -4.3022836e-03 -1.1110540e-02 +2044 4.096 -4.2801198e-03 -1.1053377e-02 +2045 4.098 -4.2580699e-03 -1.0996507e-02 +2046 4.1 -4.2361335e-03 -1.0939928e-02 +2047 4.102 -4.2143100e-03 -1.0883641e-02 +2048 4.104 -4.1925988e-03 -1.0827642e-02 +2049 4.106 -4.1709992e-03 -1.0771930e-02 +2050 4.108 -4.1495109e-03 -1.0716504e-02 +2051 4.11 -4.1281330e-03 -1.0661363e-02 +2052 4.112 -4.1068652e-03 -1.0606505e-02 +2053 4.114 -4.0857068e-03 -1.0551928e-02 +2054 4.116 -4.0646573e-03 -1.0497632e-02 +2055 4.118 -4.0437161e-03 -1.0443614e-02 +2056 4.12 -4.0228827e-03 -1.0389874e-02 +2057 4.122 -4.0021564e-03 -1.0336409e-02 +2058 4.124 -3.9815369e-03 -1.0283219e-02 +2059 4.126 -3.9610234e-03 -1.0230302e-02 +2060 4.128 -3.9406155e-03 -1.0177656e-02 +2061 4.13 -3.9203126e-03 -1.0125281e-02 +2062 4.132 -3.9001142e-03 -1.0073175e-02 +2063 4.134 -3.8800197e-03 -1.0021336e-02 +2064 4.136 -3.8600286e-03 -9.9697632e-03 +2065 4.138 -3.8401405e-03 -9.9184553e-03 +2066 4.14 -3.8203547e-03 -9.8674109e-03 +2067 4.142 -3.8006707e-03 -9.8166286e-03 +2068 4.144 -3.7810880e-03 -9.7661070e-03 +2069 4.146 -3.7616061e-03 -9.7158448e-03 +2070 4.148 -3.7422244e-03 -9.6658407e-03 +2071 4.15 -3.7229425e-03 -9.6160934e-03 +2072 4.152 -3.7037599e-03 -9.5666015e-03 +2073 4.154 -3.6846759e-03 -9.5173638e-03 +2074 4.156 -3.6656902e-03 -9.4683790e-03 +2075 4.158 -3.6468023e-03 -9.4196457e-03 +2076 4.16 -3.6280115e-03 -9.3711627e-03 +2077 4.162 -3.6093174e-03 -9.3229287e-03 +2078 4.164 -3.5907196e-03 -9.2749424e-03 +2079 4.166 -3.5722175e-03 -9.2272025e-03 +2080 4.168 -3.5538106e-03 -9.1797079e-03 +2081 4.17 -3.5354985e-03 -9.1324572e-03 +2082 4.172 -3.5172807e-03 -9.0854492e-03 +2083 4.174 -3.4991566e-03 -9.0386826e-03 +2084 4.176 -3.4811258e-03 -8.9921562e-03 +2085 4.178 -3.4631878e-03 -8.9458689e-03 +2086 4.18 -3.4453421e-03 -8.8998193e-03 +2087 4.182 -3.4275883e-03 -8.8540063e-03 +2088 4.184 -3.4099259e-03 -8.8084286e-03 +2089 4.186 -3.3923545e-03 -8.7630850e-03 +2090 4.188 -3.3748735e-03 -8.7179744e-03 +2091 4.19 -3.3574824e-03 -8.6730955e-03 +2092 4.192 -3.3401809e-03 -8.6284472e-03 +2093 4.194 -3.3229685e-03 -8.5840283e-03 +2094 4.196 -3.3058446e-03 -8.5398375e-03 +2095 4.198 -3.2888090e-03 -8.4958739e-03 +2096 4.2 -3.2718610e-03 -8.4521360e-03 +2097 4.202 -3.2550003e-03 -8.4086230e-03 +2098 4.204 -3.2382264e-03 -8.3653334e-03 +2099 4.206 -3.2215388e-03 -8.3222664e-03 +2100 4.208 -3.2049371e-03 -8.2794206e-03 +2101 4.21 -3.1884210e-03 -8.2367949e-03 +2102 4.212 -3.1719898e-03 -8.1943883e-03 +2103 4.214 -3.1556433e-03 -8.1521996e-03 +2104 4.216 -3.1393809e-03 -8.1102277e-03 +2105 4.218 -3.1232022e-03 -8.0684715e-03 +2106 4.22 -3.1071069e-03 -8.0269299e-03 +2107 4.222 -3.0910944e-03 -7.9856017e-03 +2108 4.224 -3.0751643e-03 -7.9444859e-03 +2109 4.226 -3.0593163e-03 -7.9035815e-03 +2110 4.228 -3.0435498e-03 -7.8628872e-03 +2111 4.23 -3.0278646e-03 -7.8224021e-03 +2112 4.232 -3.0122601e-03 -7.7821251e-03 +2113 4.234 -2.9967359e-03 -7.7420551e-03 +2114 4.236 -2.9812917e-03 -7.7021910e-03 +2115 4.238 -2.9659270e-03 -7.6625318e-03 +2116 4.24 -2.9506415e-03 -7.6230765e-03 +2117 4.242 -2.9354346e-03 -7.5838239e-03 +2118 4.244 -2.9203060e-03 -7.5447731e-03 +2119 4.246 -2.9052554e-03 -7.5059231e-03 +2120 4.248 -2.8902822e-03 -7.4672727e-03 +2121 4.25 -2.8753862e-03 -7.4288210e-03 +2122 4.252 -2.8605668e-03 -7.3905670e-03 +2123 4.254 -2.8458238e-03 -7.3525096e-03 +2124 4.256 -2.8311566e-03 -7.3146479e-03 +2125 4.258 -2.8165650e-03 -7.2769808e-03 +2126 4.26 -2.8020486e-03 -7.2395073e-03 +2127 4.262 -2.7876069e-03 -7.2022265e-03 +2128 4.264 -2.7732395e-03 -7.1651373e-03 +2129 4.266 -2.7589462e-03 -7.1282388e-03 +2130 4.268 -2.7447265e-03 -7.0915300e-03 +2131 4.27 -2.7305800e-03 -7.0550100e-03 +2132 4.272 -2.7165063e-03 -7.0186777e-03 +2133 4.274 -2.7025051e-03 -6.9825322e-03 +2134 4.276 -2.6885760e-03 -6.9465725e-03 +2135 4.278 -2.6747187e-03 -6.9107978e-03 +2136 4.28 -2.6609327e-03 -6.8752069e-03 +2137 4.282 -2.6472178e-03 -6.8397991e-03 +2138 4.284 -2.6335734e-03 -6.8045734e-03 +2139 4.286 -2.6199993e-03 -6.7695287e-03 +2140 4.288 -2.6064952e-03 -6.7346643e-03 +2141 4.29 -2.5930606e-03 -6.6999792e-03 +2142 4.292 -2.5796951e-03 -6.6654724e-03 +2143 4.294 -2.5663986e-03 -6.6311430e-03 +2144 4.296 -2.5531705e-03 -6.5969902e-03 +2145 4.298 -2.5400105e-03 -6.5630130e-03 +2146 4.3 -2.5269183e-03 -6.5292105e-03 +2147 4.302 -2.5138935e-03 -6.4955819e-03 +2148 4.304 -2.5009358e-03 -6.4621262e-03 +2149 4.306 -2.4880449e-03 -6.4288426e-03 +2150 4.308 -2.4752204e-03 -6.3957301e-03 +2151 4.31 -2.4624619e-03 -6.3627879e-03 +2152 4.312 -2.4497691e-03 -6.3300152e-03 +2153 4.314 -2.4371417e-03 -6.2974110e-03 +2154 4.316 -2.4245793e-03 -6.2649745e-03 +2155 4.318 -2.4120817e-03 -6.2327048e-03 +2156 4.32 -2.3996484e-03 -6.2006011e-03 +2157 4.322 -2.3872792e-03 -6.1686626e-03 +2158 4.324 -2.3749736e-03 -6.1368882e-03 +2159 4.326 -2.3627315e-03 -6.1052774e-03 +2160 4.328 -2.3505524e-03 -6.0738291e-03 +2161 4.33 -2.3384361e-03 -6.0425426e-03 +2162 4.332 -2.3263822e-03 -6.0114170e-03 +2163 4.334 -2.3143903e-03 -5.9804515e-03 +2164 4.336 -2.3024602e-03 -5.9496453e-03 +2165 4.338 -2.2905916e-03 -5.9189976e-03 +2166 4.34 -2.2787841e-03 -5.8885075e-03 +2167 4.342 -2.2670375e-03 -5.8581743e-03 +2168 4.344 -2.2553513e-03 -5.8279971e-03 +2169 4.346 -2.2437254e-03 -5.7979751e-03 +2170 4.348 -2.2321593e-03 -5.7681076e-03 +2171 4.35 -2.2206529e-03 -5.7383938e-03 +2172 4.352 -2.2092057e-03 -5.7088328e-03 +2173 4.354 -2.1978174e-03 -5.6794239e-03 +2174 4.356 -2.1864879e-03 -5.6501663e-03 +2175 4.358 -2.1752167e-03 -5.6210592e-03 +2176 4.36 -2.1640035e-03 -5.5921018e-03 +2177 4.362 -2.1528482e-03 -5.5632935e-03 +2178 4.364 -2.1417503e-03 -5.5346333e-03 +2179 4.366 -2.1307095e-03 -5.5061207e-03 +2180 4.368 -2.1197257e-03 -5.4777547e-03 +2181 4.37 -2.1087984e-03 -5.4495346e-03 +2182 4.372 -2.0979274e-03 -5.4214598e-03 +2183 4.374 -2.0871125e-03 -5.3935294e-03 +2184 4.376 -2.0763532e-03 -5.3657427e-03 +2185 4.378 -2.0656494e-03 -5.3380990e-03 +2186 4.38 -2.0550007e-03 -5.3105976e-03 +2187 4.382 -2.0444069e-03 -5.2832376e-03 +2188 4.384 -2.0338677e-03 -5.2560185e-03 +2189 4.386 -2.0233828e-03 -5.2289393e-03 +2190 4.388 -2.0129518e-03 -5.2019996e-03 +2191 4.39 -2.0025747e-03 -5.1751984e-03 +2192 4.392 -1.9922510e-03 -5.1485352e-03 +2193 4.394 -1.9819804e-03 -5.1220092e-03 +2194 4.396 -1.9717628e-03 -5.0956197e-03 +2195 4.398 -1.9615979e-03 -5.0693660e-03 +2196 4.4 -1.9514853e-03 -5.0432474e-03 +2197 4.402 -1.9414248e-03 -5.0172632e-03 +2198 4.404 -1.9314161e-03 -4.9914127e-03 +2199 4.406 -1.9214590e-03 -4.9656953e-03 +2200 4.408 -1.9115533e-03 -4.9401102e-03 +2201 4.41 -1.9016985e-03 -4.9146568e-03 +2202 4.412 -1.8918945e-03 -4.8893343e-03 +2203 4.414 -1.8821411e-03 -4.8641422e-03 +2204 4.416 -1.8724379e-03 -4.8390798e-03 +2205 4.418 -1.8627847e-03 -4.8141464e-03 +2206 4.42 -1.8531812e-03 -4.7893412e-03 +2207 4.422 -1.8436272e-03 -4.7646638e-03 +2208 4.424 -1.8341225e-03 -4.7401133e-03 +2209 4.426 -1.8246667e-03 -4.7156892e-03 +2210 4.428 -1.8152596e-03 -4.6913908e-03 +2211 4.43 -1.8059011e-03 -4.6672175e-03 +2212 4.432 -1.7965907e-03 -4.6431686e-03 +2213 4.434 -1.7873283e-03 -4.6192435e-03 +2214 4.436 -1.7781136e-03 -4.5954416e-03 +2215 4.438 -1.7689464e-03 -4.5717621e-03 +2216 4.44 -1.7598265e-03 -4.5482046e-03 +2217 4.442 -1.7507535e-03 -4.5247683e-03 +2218 4.444 -1.7417273e-03 -4.5014526e-03 +2219 4.446 -1.7327477e-03 -4.4782569e-03 +2220 4.448 -1.7238142e-03 -4.4551807e-03 +2221 4.45 -1.7149269e-03 -4.4322232e-03 +2222 4.452 -1.7060853e-03 -4.4093840e-03 +2223 4.454 -1.6972892e-03 -4.3866623e-03 +2224 4.456 -1.6885385e-03 -4.3640575e-03 +2225 4.458 -1.6798329e-03 -4.3415691e-03 +2226 4.46 -1.6711722e-03 -4.3191965e-03 +2227 4.462 -1.6625561e-03 -4.2969391e-03 +2228 4.464 -1.6539844e-03 -4.2747962e-03 +2229 4.466 -1.6454568e-03 -4.2527674e-03 +2230 4.468 -1.6369732e-03 -4.2308519e-03 +2231 4.47 -1.6285333e-03 -4.2090493e-03 +2232 4.472 -1.6201369e-03 -4.1873589e-03 +2233 4.474 -1.6117838e-03 -4.1657801e-03 +2234 4.476 -1.6034737e-03 -4.1443125e-03 +2235 4.478 -1.5952065e-03 -4.1229554e-03 +2236 4.48 -1.5869818e-03 -4.1017083e-03 +2237 4.482 -1.5787996e-03 -4.0805705e-03 +2238 4.484 -1.5706595e-03 -4.0595416e-03 +2239 4.486 -1.5625613e-03 -4.0386209e-03 +2240 4.488 -1.5545049e-03 -4.0178079e-03 +2241 4.49 -1.5464900e-03 -3.9971021e-03 +2242 4.492 -1.5385165e-03 -3.9765030e-03 +2243 4.494 -1.5305840e-03 -3.9560098e-03 +2244 4.496 -1.5226923e-03 -3.9356222e-03 +2245 4.498 -1.5148414e-03 -3.9153396e-03 +2246 4.5 -1.5070309e-03 -3.8951614e-03 +2247 4.502 -1.4992607e-03 -3.8750871e-03 +2248 4.504 -1.4915305e-03 -3.8551161e-03 +2249 4.506 -1.4838402e-03 -3.8352480e-03 +2250 4.508 -1.4761894e-03 -3.8154822e-03 +2251 4.51 -1.4685782e-03 -3.7958182e-03 +2252 4.512 -1.4610061e-03 -3.7762554e-03 +2253 4.514 -1.4534731e-03 -3.7567934e-03 +2254 4.516 -1.4459789e-03 -3.7374315e-03 +2255 4.518 -1.4385233e-03 -3.7181694e-03 +2256 4.52 -1.4311061e-03 -3.6990065e-03 +2257 4.522 -1.4237272e-03 -3.6799422e-03 +2258 4.524 -1.4163863e-03 -3.6609761e-03 +2259 4.526 -1.4090832e-03 -3.6421077e-03 +2260 4.528 -1.4018178e-03 -3.6233364e-03 +2261 4.53 -1.3945898e-03 -3.6046618e-03 +2262 4.532 -1.3873991e-03 -3.5860834e-03 +2263 4.534 -1.3802454e-03 -3.5676006e-03 +2264 4.536 -1.3731286e-03 -3.5492131e-03 +2265 4.538 -1.3660485e-03 -3.5309202e-03 +2266 4.54 -1.3590049e-03 -3.5127215e-03 +2267 4.542 -1.3519975e-03 -3.4946165e-03 +2268 4.544 -1.3450263e-03 -3.4766048e-03 +2269 4.546 -1.3380911e-03 -3.4586859e-03 +2270 4.548 -1.3311915e-03 -3.4408592e-03 +2271 4.55 -1.3243276e-03 -3.4231243e-03 +2272 4.552 -1.3174990e-03 -3.4054808e-03 +2273 4.554 -1.3107056e-03 -3.3879281e-03 +2274 4.556 -1.3039472e-03 -3.3704659e-03 +2275 4.558 -1.2972237e-03 -3.3530935e-03 +2276 4.56 -1.2905348e-03 -3.3358107e-03 +2277 4.562 -1.2838804e-03 -3.3186168e-03 +2278 4.564 -1.2772602e-03 -3.3015115e-03 +2279 4.566 -1.2706743e-03 -3.2844944e-03 +2280 4.568 -1.2641222e-03 -3.2675648e-03 +2281 4.57 -1.2576039e-03 -3.2507225e-03 +2282 4.572 -1.2511193e-03 -3.2339669e-03 +2283 4.574 -1.2446680e-03 -3.2172975e-03 +2284 4.576 -1.2382500e-03 -3.2007141e-03 +2285 4.578 -1.2318651e-03 -3.1842161e-03 +2286 4.58 -1.2255131e-03 -3.1678030e-03 +2287 4.582 -1.2191938e-03 -3.1514745e-03 +2288 4.584 -1.2129071e-03 -3.1352301e-03 +2289 4.586 -1.2066529e-03 -3.1190693e-03 +2290 4.588 -1.2004308e-03 -3.1029918e-03 +2291 4.59 -1.1942408e-03 -3.0869971e-03 +2292 4.592 -1.1880828e-03 -3.0710848e-03 +2293 4.594 -1.1819564e-03 -3.0552545e-03 +2294 4.596 -1.1758617e-03 -3.0395057e-03 +2295 4.598 -1.1697984e-03 -3.0238380e-03 +2296 4.6 -1.1637663e-03 -3.0082511e-03 +2297 4.602 -1.1577653e-03 -2.9927444e-03 +2298 4.604 -1.1517953e-03 -2.9773176e-03 +2299 4.606 -1.1458560e-03 -2.9619703e-03 +2300 4.608 -1.1399473e-03 -2.9467020e-03 +2301 4.61 -1.1340691e-03 -2.9315124e-03 +2302 4.612 -1.1282212e-03 -2.9164010e-03 +2303 4.614 -1.1224035e-03 -2.9013674e-03 +2304 4.616 -1.1166157e-03 -2.8864113e-03 +2305 4.618 -1.1108578e-03 -2.8715323e-03 +2306 4.62 -1.1051295e-03 -2.8567299e-03 +2307 4.622 -1.0994308e-03 -2.8420037e-03 +2308 4.624 -1.0937615e-03 -2.8273534e-03 +2309 4.626 -1.0881213e-03 -2.8127786e-03 +2310 4.628 -1.0825103e-03 -2.7982789e-03 +2311 4.63 -1.0769282e-03 -2.7838539e-03 +2312 4.632 -1.0713748e-03 -2.7695031e-03 +2313 4.634 -1.0658501e-03 -2.7552263e-03 +2314 4.636 -1.0603539e-03 -2.7410231e-03 +2315 4.638 -1.0548860e-03 -2.7268930e-03 +2316 4.64 -1.0494462e-03 -2.7128357e-03 +2317 4.642 -1.0440346e-03 -2.6988509e-03 +2318 4.644 -1.0386508e-03 -2.6849381e-03 +2319 4.646 -1.0332948e-03 -2.6710969e-03 +2320 4.648 -1.0279664e-03 -2.6573271e-03 +2321 4.65 -1.0226654e-03 -2.6436282e-03 +2322 4.652 -1.0173918e-03 -2.6299999e-03 +2323 4.654 -1.0121454e-03 -2.6164418e-03 +2324 4.656 -1.0069260e-03 -2.6029536e-03 +2325 4.658 -1.0017335e-03 -2.5895348e-03 +2326 4.66 -9.9656780e-04 -2.5761852e-03 +2327 4.662 -9.9142872e-04 -2.5629044e-03 +2328 4.664 -9.8631614e-04 -2.5496920e-03 +2329 4.666 -9.8122991e-04 -2.5365476e-03 +2330 4.668 -9.7616990e-04 -2.5234710e-03 +2331 4.67 -9.7113598e-04 -2.5104618e-03 +2332 4.672 -9.6612801e-04 -2.4975196e-03 +2333 4.674 -9.6114586e-04 -2.4846440e-03 +2334 4.676 -9.5618939e-04 -2.4718349e-03 +2335 4.678 -9.5125847e-04 -2.4590917e-03 +2336 4.68 -9.4635298e-04 -2.4464141e-03 +2337 4.682 -9.4147277e-04 -2.4338019e-03 +2338 4.684 -9.3661773e-04 -2.4212547e-03 +2339 4.686 -9.3178771e-04 -2.4087721e-03 +2340 4.688 -9.2698260e-04 -2.3963538e-03 +2341 4.69 -9.2220225e-04 -2.3839995e-03 +2342 4.692 -9.1744656e-04 -2.3717089e-03 +2343 4.694 -9.1271538e-04 -2.3594816e-03 +2344 4.696 -9.0800859e-04 -2.3473173e-03 +2345 4.698 -9.0332606e-04 -2.3352157e-03 +2346 4.7 -8.9866768e-04 -2.3231765e-03 +2347 4.702 -8.9403332e-04 -2.3111992e-03 +2348 4.704 -8.8942284e-04 -2.2992837e-03 +2349 4.706 -8.8483614e-04 -2.2874296e-03 +2350 4.708 -8.8027308e-04 -2.2756366e-03 +2351 4.71 -8.7573355e-04 -2.2639044e-03 +2352 4.712 -8.7121743e-04 -2.2522325e-03 +2353 4.714 -8.6672458e-04 -2.2406209e-03 +2354 4.716 -8.6225490e-04 -2.2290691e-03 +2355 4.718 -8.5780827e-04 -2.2175768e-03 +2356 4.72 -8.5338456e-04 -2.2061437e-03 +2357 4.722 -8.4898365e-04 -2.1947695e-03 +2358 4.724 -8.4460544e-04 -2.1834540e-03 +2359 4.726 -8.4024980e-04 -2.1721967e-03 +2360 4.728 -8.3591661e-04 -2.1609975e-03 +2361 4.73 -8.3160577e-04 -2.1498560e-03 +2362 4.732 -8.2731715e-04 -2.1387719e-03 +2363 4.734 -8.2305065e-04 -2.1277449e-03 +2364 4.736 -8.1880613e-04 -2.1167747e-03 +2365 4.738 -8.1458351e-04 -2.1058611e-03 +2366 4.74 -8.1038265e-04 -2.0950037e-03 +2367 4.742 -8.0620346e-04 -2.0842022e-03 +2368 4.744 -8.0204581e-04 -2.0734565e-03 +2369 4.746 -7.9790959e-04 -2.0627661e-03 +2370 4.748 -7.9379471e-04 -2.0521308e-03 +2371 4.75 -7.8970103e-04 -2.0415503e-03 +2372 4.752 -7.8562847e-04 -2.0310243e-03 +2373 4.754 -7.8157690e-04 -2.0205526e-03 +2374 4.756 -7.7754622e-04 -2.0101348e-03 +2375 4.758 -7.7353633e-04 -1.9997707e-03 +2376 4.76 -7.6954710e-04 -1.9894600e-03 +2377 4.762 -7.6557845e-04 -1.9792025e-03 +2378 4.764 -7.6163026e-04 -1.9689978e-03 +2379 4.766 -7.5770242e-04 -1.9588458e-03 +2380 4.768 -7.5379484e-04 -1.9487460e-03 +2381 4.77 -7.4990741e-04 -1.9386983e-03 +2382 4.772 -7.4604001e-04 -1.9287024e-03 +2383 4.774 -7.4219256e-04 -1.9187580e-03 +2384 4.776 -7.3836495e-04 -1.9088648e-03 +2385 4.778 -7.3455707e-04 -1.8990227e-03 +2386 4.78 -7.3076882e-04 -1.8892312e-03 +2387 4.782 -7.2700011e-04 -1.8794902e-03 +2388 4.784 -7.2325083e-04 -1.8697994e-03 +2389 4.786 -7.1952088e-04 -1.8601586e-03 +2390 4.788 -7.1581016e-04 -1.8505675e-03 +2391 4.79 -7.1211858e-04 -1.8410257e-03 +2392 4.792 -7.0844602e-04 -1.8315332e-03 +2393 4.794 -7.0479241e-04 -1.8220896e-03 +2394 4.796 -7.0115763e-04 -1.8126946e-03 +2395 4.798 -6.9754160e-04 -1.8033481e-03 +2396 4.8 -6.9394421e-04 -1.7940498e-03 +2397 4.802 -6.9036537e-04 -1.7847993e-03 +2398 4.804 -6.8680498e-04 -1.7755966e-03 +2399 4.806 -6.8326295e-04 -1.7664413e-03 +2400 4.808 -6.7973918e-04 -1.7573332e-03 +2401 4.81 -6.7623359e-04 -1.7482720e-03 +2402 4.812 -6.7274606e-04 -1.7392575e-03 +2403 4.814 -6.6927653e-04 -1.7302895e-03 +2404 4.816 -6.6582488e-04 -1.7213677e-03 +2405 4.818 -6.6239102e-04 -1.7124918e-03 +2406 4.82 -6.5897488e-04 -1.7036618e-03 +2407 4.822 -6.5557635e-04 -1.6948772e-03 +2408 4.824 -6.5219534e-04 -1.6861379e-03 +2409 4.826 -6.4883176e-04 -1.6774437e-03 +2410 4.828 -6.4548553e-04 -1.6687943e-03 +2411 4.83 -6.4215656e-04 -1.6601895e-03 +2412 4.832 -6.3884475e-04 -1.6516290e-03 +2413 4.834 -6.3555001e-04 -1.6431126e-03 +2414 4.836 -6.3227227e-04 -1.6346401e-03 +2415 4.838 -6.2901142e-04 -1.6262113e-03 +2416 4.84 -6.2576739e-04 -1.6178260e-03 +2417 4.842 -6.2254009e-04 -1.6094839e-03 +2418 4.844 -6.1932943e-04 -1.6011847e-03 +2419 4.846 -6.1613532e-04 -1.5929284e-03 +2420 4.848 -6.1295769e-04 -1.5847146e-03 +2421 4.85 -6.0979644e-04 -1.5765431e-03 +2422 4.852 -6.0665149e-04 -1.5684138e-03 +2423 4.854 -6.0352275e-04 -1.5603264e-03 +2424 4.856 -6.0041015e-04 -1.5522806e-03 +2425 4.858 -5.9731360e-04 -1.5442763e-03 +2426 4.86 -5.9423302e-04 -1.5363133e-03 +2427 4.862 -5.9116832e-04 -1.5283914e-03 +2428 4.864 -5.8811943e-04 -1.5205102e-03 +2429 4.866 -5.8508625e-04 -1.5126697e-03 +2430 4.868 -5.8206872e-04 -1.5048696e-03 +2431 4.87 -5.7906675e-04 -1.4971097e-03 +2432 4.872 -5.7608026e-04 -1.4893899e-03 +2433 4.874 -5.7310916e-04 -1.4817098e-03 +2434 4.876 -5.7015339e-04 -1.4740693e-03 +2435 4.878 -5.6721286e-04 -1.4664681e-03 +2436 4.88 -5.6428749e-04 -1.4589062e-03 +2437 4.882 -5.6137721e-04 -1.4513833e-03 +2438 4.884 -5.5848193e-04 -1.4438991e-03 +2439 4.886 -5.5560159e-04 -1.4364535e-03 +2440 4.888 -5.5273609e-04 -1.4290463e-03 +2441 4.89 -5.4988538e-04 -1.4216772e-03 +2442 4.892 -5.4704936e-04 -1.4143462e-03 +2443 4.894 -5.4422797e-04 -1.4070529e-03 +2444 4.896 -5.4142112e-04 -1.3997973e-03 +2445 4.898 -5.3862875e-04 -1.3925790e-03 +2446 4.9 -5.3585078e-04 -1.3853980e-03 +2447 4.902 -5.3308714e-04 -1.3782540e-03 +2448 4.904 -5.3033774e-04 -1.3711468e-03 +2449 4.906 -5.2760252e-04 -1.3640762e-03 +2450 4.908 -5.2488141e-04 -1.3570421e-03 +2451 4.91 -5.2217433e-04 -1.3500442e-03 +2452 4.912 -5.1948121e-04 -1.3430825e-03 +2453 4.914 -5.1680198e-04 -1.3361566e-03 +2454 4.916 -5.1413656e-04 -1.3292664e-03 +2455 4.918 -5.1148489e-04 -1.3224117e-03 +2456 4.92 -5.0884689e-04 -1.3155924e-03 +2457 4.922 -5.0622250e-04 -1.3088082e-03 +2458 4.924 -5.0361163e-04 -1.3020590e-03 +2459 4.926 -5.0101424e-04 -1.2953446e-03 +2460 4.928 -4.9843023e-04 -1.2886648e-03 +2461 4.93 -4.9585955e-04 -1.2820195e-03 +2462 4.932 -4.9330213e-04 -1.2754084e-03 +2463 4.934 -4.9075790e-04 -1.2688314e-03 +2464 4.936 -4.8822678e-04 -1.2622883e-03 +2465 4.938 -4.8570872e-04 -1.2557789e-03 +2466 4.94 -4.8320365e-04 -1.2493031e-03 +2467 4.942 -4.8071149e-04 -1.2428606e-03 +2468 4.944 -4.7823218e-04 -1.2364514e-03 +2469 4.946 -4.7576566e-04 -1.2300752e-03 +2470 4.948 -4.7331186e-04 -1.2237319e-03 +2471 4.95 -4.7087071e-04 -1.2174213e-03 +2472 4.952 -4.6844215e-04 -1.2111432e-03 +2473 4.954 -4.6602612e-04 -1.2048975e-03 +2474 4.956 -4.6362254e-04 -1.1986840e-03 +2475 4.958 -4.6123136e-04 -1.1925025e-03 +2476 4.96 -4.5885251e-04 -1.1863529e-03 +2477 4.962 -4.5648593e-04 -1.1802350e-03 +2478 4.964 -4.5413155e-04 -1.1741487e-03 +2479 4.966 -4.5178931e-04 -1.1680937e-03 +2480 4.968 -4.4945915e-04 -1.1620699e-03 +2481 4.97 -4.4714101e-04 -1.1560772e-03 +2482 4.972 -4.4483482e-04 -1.1501154e-03 +2483 4.974 -4.4254053e-04 -1.1441843e-03 +2484 4.976 -4.4025806e-04 -1.1382838e-03 +2485 4.978 -4.3798737e-04 -1.1324137e-03 +2486 4.98 -4.3572839e-04 -1.1265739e-03 +2487 4.982 -4.3348106e-04 -1.1207642e-03 +2488 4.984 -4.3124531e-04 -1.1149845e-03 +2489 4.986 -4.2902110e-04 -1.1092345e-03 +2490 4.988 -4.2680835e-04 -1.1035142e-03 +2491 4.99 -4.2460702e-04 -1.0978234e-03 +2492 4.992 -4.2241704e-04 -1.0921619e-03 +2493 4.994 -4.2023836e-04 -1.0865296e-03 +2494 4.996 -4.1807090e-04 -1.0809263e-03 +2495 4.998 -4.1591463e-04 -1.0753520e-03 +2496 5.0 -4.1376948e-04 -1.0698064e-03 +2497 5.002 -4.1163539e-04 -1.0642893e-03 +2498 5.004 -4.0951230e-04 -1.0588007e-03 +2499 5.006 -4.0740016e-04 -1.0533405e-03 +2500 5.008 -4.0529892e-04 -1.0479083e-03 +2501 5.01 -4.0320851e-04 -1.0425042e-03 +2502 5.012 -4.0112888e-04 -1.0371279e-03 +2503 5.014 -3.9905998e-04 -1.0317794e-03 +2504 5.016 -3.9700175e-04 -1.0264584e-03 +2505 5.018 -3.9495413e-04 -1.0211649e-03 +2506 5.02 -3.9291707e-04 -1.0158986e-03 +2507 5.022 -3.9089052e-04 -1.0106595e-03 +2508 5.024 -3.8887442e-04 -1.0054474e-03 +2509 5.026 -3.8686871e-04 -1.0002622e-03 +2510 5.028 -3.8487335e-04 -9.9510375e-04 +2511 5.03 -3.8288828e-04 -9.8997188e-04 +2512 5.032 -3.8091344e-04 -9.8486646e-04 +2513 5.034 -3.7894879e-04 -9.7978736e-04 +2514 5.036 -3.7699428e-04 -9.7473446e-04 +2515 5.038 -3.7504984e-04 -9.6970760e-04 +2516 5.04 -3.7311543e-04 -9.6470667e-04 +2517 5.042 -3.7119099e-04 -9.5973152e-04 +2518 5.044 -3.6927649e-04 -9.5478202e-04 +2519 5.046 -3.6737185e-04 -9.4985804e-04 +2520 5.048 -3.6547704e-04 -9.4495945e-04 +2521 5.05 -3.6359200e-04 -9.4008612e-04 +2522 5.052 -3.6171668e-04 -9.3523791e-04 +2523 5.054 -3.5985103e-04 -9.3041470e-04 +2524 5.056 -3.5799500e-04 -9.2561636e-04 +2525 5.058 -3.5614854e-04 -9.2084276e-04 +2526 5.06 -3.5431161e-04 -9.1609378e-04 +2527 5.062 -3.5248415e-04 -9.1136928e-04 +2528 5.064 -3.5066612e-04 -9.0666914e-04 +2529 5.066 -3.4885746e-04 -9.0199323e-04 +2530 5.068 -3.4705813e-04 -8.9734144e-04 +2531 5.07 -3.4526808e-04 -8.9271363e-04 +2532 5.072 -3.4348726e-04 -8.8810968e-04 +2533 5.074 -3.4171562e-04 -8.8352947e-04 +2534 5.076 -3.3995313e-04 -8.7897288e-04 +2535 5.078 -3.3819972e-04 -8.7443978e-04 +2536 5.08 -3.3645535e-04 -8.6993006e-04 +2537 5.082 -3.3471998e-04 -8.6544359e-04 +2538 5.084 -3.3299356e-04 -8.6098025e-04 +2539 5.086 -3.3127605e-04 -8.5653993e-04 +2540 5.088 -3.2956739e-04 -8.5212250e-04 +2541 5.09 -3.2786754e-04 -8.4772785e-04 +2542 5.092 -3.2617646e-04 -8.4335586e-04 +2543 5.094 -3.2449410e-04 -8.3900641e-04 +2544 5.096 -3.2282042e-04 -8.3467939e-04 +2545 5.098 -3.2115537e-04 -8.3037468e-04 +2546 5.1 -3.1949891e-04 -8.2609217e-04 +2547 5.102 -3.1785099e-04 -8.2183174e-04 +2548 5.104 -3.1621156e-04 -8.1759328e-04 +2549 5.106 -3.1458060e-04 -8.1337667e-04 +2550 5.108 -3.1295804e-04 -8.0918181e-04 +2551 5.11 -3.1134386e-04 -8.0500857e-04 +2552 5.112 -3.0973799e-04 -8.0085686e-04 +2553 5.114 -3.0814041e-04 -7.9672655e-04 +2554 5.116 -3.0655107e-04 -7.9261754e-04 +2555 5.118 -3.0496993e-04 -7.8852972e-04 +2556 5.12 -3.0339694e-04 -7.8446297e-04 +2557 5.122 -3.0183206e-04 -7.8041720e-04 +2558 5.124 -3.0027526e-04 -7.7639229e-04 +2559 5.126 -2.9872648e-04 -7.7238813e-04 +2560 5.128 -2.9718569e-04 -7.6840462e-04 +2561 5.13 -2.9565285e-04 -7.6444165e-04 +2562 5.132 -2.9412791e-04 -7.6049912e-04 +2563 5.134 -2.9261084e-04 -7.5657691e-04 +2564 5.136 -2.9110159e-04 -7.5267493e-04 +2565 5.138 -2.8960013e-04 -7.4879307e-04 +2566 5.14 -2.8810641e-04 -7.4493123e-04 +2567 5.142 -2.8662039e-04 -7.4108930e-04 +2568 5.144 -2.8514203e-04 -7.3726718e-04 +2569 5.146 -2.8367131e-04 -7.3346477e-04 +2570 5.148 -2.8220816e-04 -7.2968197e-04 +2571 5.15 -2.8075257e-04 -7.2591868e-04 +2572 5.152 -2.7930447e-04 -7.2217479e-04 +2573 5.154 -2.7786385e-04 -7.1845020e-04 +2574 5.156 -2.7643066e-04 -7.1474483e-04 +2575 5.158 -2.7500486e-04 -7.1105856e-04 +2576 5.16 -2.7358641e-04 -7.0739129e-04 +2577 5.162 -2.7217528e-04 -7.0374294e-04 +2578 5.164 -2.7077143e-04 -7.0011340e-04 +2579 5.166 -2.6937482e-04 -6.9650258e-04 +2580 5.168 -2.6798541e-04 -6.9291038e-04 +2581 5.17 -2.6660316e-04 -6.8933670e-04 +2582 5.172 -2.6522805e-04 -6.8578145e-04 +2583 5.174 -2.6386003e-04 -6.8224454e-04 +2584 5.176 -2.6249906e-04 -6.7872586e-04 +2585 5.178 -2.6114511e-04 -6.7522532e-04 +2586 5.18 -2.5979814e-04 -6.7174284e-04 +2587 5.182 -2.5845813e-04 -6.6827832e-04 +2588 5.184 -2.5712502e-04 -6.6483166e-04 +2589 5.186 -2.5579879e-04 -6.6140277e-04 +2590 5.188 -2.5447940e-04 -6.5799157e-04 +2591 5.19 -2.5316681e-04 -6.5459796e-04 +2592 5.192 -2.5186099e-04 -6.5122185e-04 +2593 5.194 -2.5056191e-04 -6.4786314e-04 +2594 5.196 -2.4926953e-04 -6.4452176e-04 +2595 5.198 -2.4798381e-04 -6.4119761e-04 +2596 5.2 -2.4670473e-04 -6.3789060e-04 +2597 5.202 -2.4543224e-04 -6.3460064e-04 +2598 5.204 -2.4416631e-04 -6.3132765e-04 +2599 5.206 -2.4290692e-04 -6.2807154e-04 +2600 5.208 -2.4165402e-04 -6.2483222e-04 +2601 5.21 -2.4040758e-04 -6.2160960e-04 +2602 5.212 -2.3916757e-04 -6.1840360e-04 +2603 5.214 -2.3793395e-04 -6.1521414e-04 +2604 5.216 -2.3670670e-04 -6.1204112e-04 +2605 5.218 -2.3548578e-04 -6.0888446e-04 +2606 5.22 -2.3427115e-04 -6.0574409e-04 +2607 5.222 -2.3306279e-04 -6.0261990e-04 +2608 5.224 -2.3186066e-04 -5.9951183e-04 +2609 5.226 -2.3066473e-04 -5.9641979e-04 +2610 5.228 -2.2947497e-04 -5.9334369e-04 +2611 5.23 -2.2829135e-04 -5.9028346e-04 +2612 5.232 -2.2711383e-04 -5.8723900e-04 +2613 5.234 -2.2594238e-04 -5.8421025e-04 +2614 5.236 -2.2477697e-04 -5.8119711e-04 +2615 5.238 -2.2361758e-04 -5.7819952e-04 +2616 5.24 -2.2246417e-04 -5.7521738e-04 +2617 5.242 -2.2131670e-04 -5.7225062e-04 +2618 5.244 -2.2017515e-04 -5.6929916e-04 +2619 5.246 -2.1903949e-04 -5.6636292e-04 +2620 5.248 -2.1790969e-04 -5.6344183e-04 +2621 5.25 -2.1678572e-04 -5.6053579e-04 +2622 5.252 -2.1566754e-04 -5.5764475e-04 +2623 5.254 -2.1455513e-04 -5.5476861e-04 +2624 5.256 -2.1344845e-04 -5.5190730e-04 +2625 5.258 -2.1234749e-04 -5.4906075e-04 +2626 5.26 -2.1125220e-04 -5.4622888e-04 +2627 5.262 -2.1016256e-04 -5.4341162e-04 +2628 5.264 -2.0907854e-04 -5.4060888e-04 +2629 5.266 -2.0800012e-04 -5.3782060e-04 +2630 5.268 -2.0692725e-04 -5.3504669e-04 +2631 5.27 -2.0585992e-04 -5.3228709e-04 +2632 5.272 -2.0479810e-04 -5.2954172e-04 +2633 5.274 -2.0374175e-04 -5.2681051e-04 +2634 5.276 -2.0269084e-04 -5.2409339e-04 +2635 5.278 -2.0164536e-04 -5.2139028e-04 +2636 5.28 -2.0060527e-04 -5.1870110e-04 +2637 5.282 -1.9957055e-04 -5.1602580e-04 +2638 5.284 -1.9854116e-04 -5.1336429e-04 +2639 5.286 -1.9751708e-04 -5.1071651e-04 +2640 5.288 -1.9649829e-04 -5.0808238e-04 +2641 5.29 -1.9548474e-04 -5.0546184e-04 +2642 5.292 -1.9447643e-04 -5.0285481e-04 +2643 5.294 -1.9347332e-04 -5.0026123e-04 +2644 5.296 -1.9247538e-04 -4.9768102e-04 +2645 5.298 -1.9148258e-04 -4.9511412e-04 +2646 5.3 -1.9049491e-04 -4.9256046e-04 +2647 5.302 -1.8951233e-04 -4.9001996e-04 +2648 5.304 -1.8853482e-04 -4.8749257e-04 +2649 5.306 -1.8756235e-04 -4.8497821e-04 +2650 5.308 -1.8659490e-04 -4.8247682e-04 +2651 5.31 -1.8563244e-04 -4.7998833e-04 +2652 5.312 -1.8467494e-04 -4.7751267e-04 +2653 5.314 -1.8372238e-04 -4.7504978e-04 +2654 5.316 -1.8277473e-04 -4.7259959e-04 +2655 5.318 -1.8183197e-04 -4.7016204e-04 +2656 5.32 -1.8089407e-04 -4.6773706e-04 +2657 5.322 -1.7996101e-04 -4.6532458e-04 +2658 5.324 -1.7903277e-04 -4.6292455e-04 +2659 5.326 -1.7810931e-04 -4.6053689e-04 +2660 5.328 -1.7719061e-04 -4.5816155e-04 +2661 5.33 -1.7627665e-04 -4.5579846e-04 +2662 5.332 -1.7536741e-04 -4.5344755e-04 +2663 5.334 -1.7446286e-04 -4.5110877e-04 +2664 5.336 -1.7356297e-04 -4.4878205e-04 +2665 5.338 -1.7266772e-04 -4.4646733e-04 +2666 5.34 -1.7177709e-04 -4.4416455e-04 +2667 5.342 -1.7089105e-04 -4.4187364e-04 +2668 5.344 -1.7000959e-04 -4.3959455e-04 +2669 5.346 -1.6913267e-04 -4.3732721e-04 +2670 5.348 -1.6826027e-04 -4.3507157e-04 +2671 5.35 -1.6739237e-04 -4.3282755e-04 +2672 5.352 -1.6652895e-04 -4.3059512e-04 +2673 5.354 -1.6566998e-04 -4.2837419e-04 +2674 5.356 -1.6481545e-04 -4.2616472e-04 +2675 5.358 -1.6396532e-04 -4.2396664e-04 +2676 5.36 -1.6311957e-04 -4.2177990e-04 +2677 5.362 -1.6227819e-04 -4.1960444e-04 +2678 5.364 -1.6144115e-04 -4.1744019e-04 +2679 5.366 -1.6060842e-04 -4.1528711e-04 +2680 5.368 -1.5977999e-04 -4.1314514e-04 +2681 5.37 -1.5895584e-04 -4.1101420e-04 +2682 5.372 -1.5813593e-04 -4.0889426e-04 +2683 5.374 -1.5732025e-04 -4.0678526e-04 +2684 5.376 -1.5650878e-04 -4.0468713e-04 +2685 5.378 -1.5570150e-04 -4.0259982e-04 +2686 5.38 -1.5489837e-04 -4.0052327e-04 +2687 5.382 -1.5409939e-04 -3.9845744e-04 +2688 5.384 -1.5330454e-04 -3.9640225e-04 +2689 5.386 -1.5251378e-04 -3.9435767e-04 +2690 5.388 -1.5172710e-04 -3.9232364e-04 +2691 5.39 -1.5094448e-04 -3.9030009e-04 +2692 5.392 -1.5016589e-04 -3.8828698e-04 +2693 5.394 -1.4939132e-04 -3.8628425e-04 +2694 5.396 -1.4862075e-04 -3.8429185e-04 +2695 5.398 -1.4785415e-04 -3.8230973e-04 +2696 5.4 -1.4709150e-04 -3.8033783e-04 +2697 5.402 -1.4633279e-04 -3.7837609e-04 +2698 5.404 -1.4557799e-04 -3.7642448e-04 +2699 5.406 -1.4482709e-04 -3.7448293e-04 +2700 5.408 -1.4408005e-04 -3.7255140e-04 +2701 5.41 -1.4333687e-04 -3.7062982e-04 +2702 5.412 -1.4259753e-04 -3.6871816e-04 +2703 5.414 -1.4186199e-04 -3.6681636e-04 +2704 5.416 -1.4113025e-04 -3.6492436e-04 +2705 5.418 -1.4040229e-04 -3.6304212e-04 +2706 5.42 -1.3967808e-04 -3.6116959e-04 +2707 5.422 -1.3895761e-04 -3.5930672e-04 +2708 5.424 -1.3824085e-04 -3.5745346e-04 +2709 5.426 -1.3752779e-04 -3.5560975e-04 +2710 5.428 -1.3681840e-04 -3.5377555e-04 +2711 5.43 -1.3611268e-04 -3.5195081e-04 +2712 5.432 -1.3541059e-04 -3.5013549e-04 +2713 5.434 -1.3471213e-04 -3.4832952e-04 +2714 5.436 -1.3401727e-04 -3.4653287e-04 +2715 5.438 -1.3332599e-04 -3.4474549e-04 +2716 5.44 -1.3263828e-04 -3.4296732e-04 +2717 5.442 -1.3195412e-04 -3.4119833e-04 +2718 5.444 -1.3127348e-04 -3.3943846e-04 +2719 5.446 -1.3059636e-04 -3.3768766e-04 +2720 5.448 -1.2992272e-04 -3.3594590e-04 +2721 5.45 -1.2925257e-04 -3.3421312e-04 +2722 5.452 -1.2858586e-04 -3.3248927e-04 +2723 5.454 -1.2792260e-04 -3.3077432e-04 +2724 5.456 -1.2726276e-04 -3.2906821e-04 +2725 5.458 -1.2660632e-04 -3.2737090e-04 +2726 5.46 -1.2595327e-04 -3.2568234e-04 +2727 5.462 -1.2530359e-04 -3.2400250e-04 +2728 5.464 -1.2465726e-04 -3.2233131e-04 +2729 5.466 -1.2401426e-04 -3.2066875e-04 +2730 5.468 -1.2337458e-04 -3.1901476e-04 +2731 5.47 -1.2273819e-04 -3.1736930e-04 +2732 5.472 -1.2210509e-04 -3.1573233e-04 +2733 5.474 -1.2147526e-04 -3.1410380e-04 +2734 5.476 -1.2084867e-04 -3.1248367e-04 +2735 5.478 -1.2022532e-04 -3.1087190e-04 +2736 5.48 -1.1960518e-04 -3.0926843e-04 +2737 5.482 -1.1898824e-04 -3.0767324e-04 +2738 5.484 -1.1837448e-04 -3.0608628e-04 +2739 5.486 -1.1776389e-04 -3.0450750e-04 +2740 5.488 -1.1715645e-04 -3.0293686e-04 +2741 5.49 -1.1655214e-04 -3.0137433e-04 +2742 5.492 -1.1595094e-04 -2.9981985e-04 +2743 5.494 -1.1535285e-04 -2.9827339e-04 +2744 5.496 -1.1475784e-04 -2.9673491e-04 +2745 5.498 -1.1416591e-04 -2.9520436e-04 +2746 5.5 -1.1357702e-04 -2.9368170e-04 +2747 5.502 -1.1299117e-04 -2.9216690e-04 +2748 5.504 -1.1240835e-04 -2.9065991e-04 +2749 5.506 -1.1182853e-04 -2.8916070e-04 +2750 5.508 -1.1125170e-04 -2.8766921e-04 +2751 5.51 -1.1067785e-04 -2.8618542e-04 +2752 5.512 -1.1010695e-04 -2.8470928e-04 +2753 5.514 -1.0953900e-04 -2.8324076e-04 +2754 5.516 -1.0897399e-04 -2.8177981e-04 +2755 5.518 -1.0841188e-04 -2.8032639e-04 +2756 5.52 -1.0785267e-04 -2.7888047e-04 +2757 5.522 -1.0729635e-04 -2.7744201e-04 +2758 5.524 -1.0674290e-04 -2.7601097e-04 +2759 5.526 -1.0619230e-04 -2.7458731e-04 +2760 5.528 -1.0564455e-04 -2.7317099e-04 +2761 5.53 -1.0509962e-04 -2.7176197e-04 +2762 5.532 -1.0455749e-04 -2.7036023e-04 +2763 5.534 -1.0401817e-04 -2.6896571e-04 +2764 5.536 -1.0348163e-04 -2.6757838e-04 +2765 5.538 -1.0294785e-04 -2.6619821e-04 +2766 5.54 -1.0241683e-04 -2.6482516e-04 +2767 5.542 -1.0188855e-04 -2.6345919e-04 +2768 5.544 -1.0136299e-04 -2.6210027e-04 +2769 5.546 -1.0084014e-04 -2.6074835e-04 +2770 5.548 -1.0031999e-04 -2.5940341e-04 +2771 5.55 -9.9802522e-05 -2.5806541e-04 +2772 5.552 -9.9287724e-05 -2.5673430e-04 +2773 5.554 -9.8775581e-05 -2.5541006e-04 +2774 5.556 -9.8266079e-05 -2.5409265e-04 +2775 5.558 -9.7759206e-05 -2.5278204e-04 +2776 5.56 -9.7254946e-05 -2.5147818e-04 +2777 5.562 -9.6753288e-05 -2.5018105e-04 +2778 5.564 -9.6254218e-05 -2.4889061e-04 +2779 5.566 -9.5757721e-05 -2.4760683e-04 +2780 5.568 -9.5263786e-05 -2.4632967e-04 +2781 5.57 -9.4772398e-05 -2.4505909e-04 +2782 5.572 -9.4283545e-05 -2.4379507e-04 +2783 5.574 -9.3797214e-05 -2.4253757e-04 +2784 5.576 -9.3313391e-05 -2.4128655e-04 +2785 5.578 -9.2832063e-05 -2.4004199e-04 +2786 5.58 -9.2353218e-05 -2.3880384e-04 +2787 5.582 -9.1876844e-05 -2.3757209e-04 +2788 5.584 -9.1402926e-05 -2.3634668e-04 +2789 5.586 -9.0931453e-05 -2.3512759e-04 +2790 5.588 -9.0462411e-05 -2.3391480e-04 +2791 5.59 -8.9995789e-05 -2.3270825e-04 +2792 5.592 -8.9531574e-05 -2.3150794e-04 +2793 5.594 -8.9069753e-05 -2.3031381e-04 +2794 5.596 -8.8610315e-05 -2.2912584e-04 +2795 5.598 -8.8153246e-05 -2.2794400e-04 +2796 5.6 -8.7698535e-05 -2.2676825e-04 +2797 5.602 -8.7246169e-05 -2.2559857e-04 +2798 5.604 -8.6796136e-05 -2.2443492e-04 +2799 5.606 -8.6348425e-05 -2.2327727e-04 +2800 5.608 -8.5903023e-05 -2.2212559e-04 +2801 5.61 -8.5459919e-05 -2.2097986e-04 +2802 5.612 -8.5019100e-05 -2.1984003e-04 +2803 5.614 -8.4580555e-05 -2.1870608e-04 +2804 5.616 -8.4144272e-05 -2.1757798e-04 +2805 5.618 -8.3710239e-05 -2.1645570e-04 +2806 5.62 -8.3278445e-05 -2.1533921e-04 +2807 5.622 -8.2848878e-05 -2.1422848e-04 +2808 5.624 -8.2421527e-05 -2.1312347e-04 +2809 5.626 -8.1996381e-05 -2.1202417e-04 +2810 5.628 -8.1573427e-05 -2.1093053e-04 +2811 5.63 -8.1152655e-05 -2.0984254e-04 +2812 5.632 -8.0734053e-05 -2.0876016e-04 +2813 5.634 -8.0317610e-05 -2.0768336e-04 +2814 5.636 -7.9903316e-05 -2.0661211e-04 +2815 5.638 -7.9491158e-05 -2.0554639e-04 +2816 5.64 -7.9081127e-05 -2.0448617e-04 +2817 5.642 -7.8673210e-05 -2.0343141e-04 +2818 5.644 -7.8267397e-05 -2.0238210e-04 +2819 5.646 -7.7863678e-05 -2.0133819e-04 +2820 5.648 -7.7462041e-05 -2.0029967e-04 +2821 5.65 -7.7062476e-05 -1.9926651e-04 +2822 5.652 -7.6664971e-05 -1.9823868e-04 +2823 5.654 -7.6269517e-05 -1.9721615e-04 +2824 5.656 -7.5876103e-05 -1.9619889e-04 +2825 5.658 -7.5484718e-05 -1.9518688e-04 +2826 5.66 -7.5095352e-05 -1.9418009e-04 +2827 5.662 -7.4707995e-05 -1.9317849e-04 +2828 5.664 -7.4322635e-05 -1.9218205e-04 +2829 5.666 -7.3939263e-05 -1.9119076e-04 +2830 5.668 -7.3557868e-05 -1.9020458e-04 +2831 5.67 -7.3178441e-05 -1.8922349e-04 +2832 5.672 -7.2800971e-05 -1.8824746e-04 +2833 5.674 -7.2425448e-05 -1.8727646e-04 +2834 5.676 -7.2051862e-05 -1.8631047e-04 +2835 5.678 -7.1680203e-05 -1.8534946e-04 +2836 5.68 -7.1310461e-05 -1.8439341e-04 +2837 5.682 -7.0942626e-05 -1.8344229e-04 +2838 5.684 -7.0576688e-05 -1.8249607e-04 +2839 5.686 -7.0212638e-05 -1.8155474e-04 +2840 5.688 -6.9850466e-05 -1.8061826e-04 +2841 5.69 -6.9490162e-05 -1.7968661e-04 +2842 5.692 -6.9131717e-05 -1.7875977e-04 +2843 5.694 -6.8775120e-05 -1.7783771e-04 +2844 5.696 -6.8420363e-05 -1.7692040e-04 +2845 5.698 -6.8067435e-05 -1.7600783e-04 +2846 5.7 -6.7716328e-05 -1.7509996e-04 +2847 5.702 -6.7367032e-05 -1.7419677e-04 +2848 5.704 -6.7019538e-05 -1.7329825e-04 +2849 5.706 -6.6673836e-05 -1.7240435e-04 +2850 5.708 -6.6329917e-05 -1.7151507e-04 +2851 5.71 -6.5987773e-05 -1.7063038e-04 +2852 5.712 -6.5647393e-05 -1.6975025e-04 +2853 5.714 -6.5308769e-05 -1.6887465e-04 +2854 5.716 -6.4971891e-05 -1.6800358e-04 +2855 5.718 -6.4636751e-05 -1.6713699e-04 +2856 5.72 -6.4303340e-05 -1.6627488e-04 +2857 5.722 -6.3971649e-05 -1.6541722e-04 +2858 5.724 -6.3641669e-05 -1.6456397e-04 +2859 5.726 -6.3313390e-05 -1.6371513e-04 +2860 5.728 -6.2986805e-05 -1.6287067e-04 +2861 5.73 -6.2661905e-05 -1.6203056e-04 +2862 5.732 -6.2338680e-05 -1.6119478e-04 +2863 5.734 -6.2017123e-05 -1.6036332e-04 +2864 5.736 -6.1697224e-05 -1.5953615e-04 +2865 5.738 -6.1378975e-05 -1.5871324e-04 +2866 5.74 -6.1062368e-05 -1.5789457e-04 +2867 5.742 -6.0747394e-05 -1.5708013e-04 +2868 5.744 -6.0434045e-05 -1.5626989e-04 +2869 5.746 -6.0122312e-05 -1.5546383e-04 +2870 5.748 -5.9812187e-05 -1.5466193e-04 +2871 5.75 -5.9503661e-05 -1.5386416e-04 +2872 5.752 -5.9196727e-05 -1.5307051e-04 +2873 5.754 -5.8891376e-05 -1.5228095e-04 +2874 5.756 -5.8587601e-05 -1.5149546e-04 +2875 5.758 -5.8285392e-05 -1.5071403e-04 +2876 5.76 -5.7984742e-05 -1.4993662e-04 +2877 5.762 -5.7685643e-05 -1.4916323e-04 +2878 5.764 -5.7388086e-05 -1.4839382e-04 +2879 5.766 -5.7092065e-05 -1.4762838e-04 +2880 5.768 -5.6797570e-05 -1.4686690e-04 +2881 5.77 -5.6504595e-05 -1.4610933e-04 +2882 5.772 -5.6213130e-05 -1.4535568e-04 +2883 5.774 -5.5923169e-05 -1.4460591e-04 +2884 5.776 -5.5634704e-05 -1.4386002e-04 +2885 5.778 -5.5347727e-05 -1.4311796e-04 +2886 5.78 -5.5062230e-05 -1.4237974e-04 +2887 5.782 -5.4778205e-05 -1.4164532e-04 +2888 5.784 -5.4495646e-05 -1.4091469e-04 +2889 5.786 -5.4214544e-05 -1.4018783e-04 +2890 5.788 -5.3934892e-05 -1.3946472e-04 +2891 5.79 -5.3656682e-05 -1.3874534e-04 +2892 5.792 -5.3379908e-05 -1.3802967e-04 +2893 5.794 -5.3104561e-05 -1.3731769e-04 +2894 5.796 -5.2830635e-05 -1.3660939e-04 +2895 5.798 -5.2558121e-05 -1.3590473e-04 +2896 5.8 -5.2287014e-05 -1.3520372e-04 +2897 5.802 -5.2017304e-05 -1.3450631e-04 +2898 5.804 -5.1748986e-05 -1.3381251e-04 +2899 5.806 -5.1482052e-05 -1.3312228e-04 +2900 5.808 -5.1216494e-05 -1.3243561e-04 +2901 5.81 -5.0952307e-05 -1.3175249e-04 +2902 5.812 -5.0689482e-05 -1.3107289e-04 +2903 5.814 -5.0428013e-05 -1.3039679e-04 +2904 5.816 -5.0167893e-05 -1.2972418e-04 +2905 5.818 -4.9909114e-05 -1.2905504e-04 +2906 5.82 -4.9651670e-05 -1.2838936e-04 +2907 5.822 -4.9395554e-05 -1.2772710e-04 +2908 5.824 -4.9140759e-05 -1.2706826e-04 +2909 5.826 -4.8887279e-05 -1.2641282e-04 +2910 5.828 -4.8635106e-05 -1.2576077e-04 +2911 5.83 -4.8384234e-05 -1.2511207e-04 +2912 5.832 -4.8134655e-05 -1.2446672e-04 +2913 5.834 -4.7886364e-05 -1.2382470e-04 +2914 5.836 -4.7639354e-05 -1.2318599e-04 +2915 5.838 -4.7393618e-05 -1.2255057e-04 +2916 5.84 -4.7149150e-05 -1.2191844e-04 +2917 5.842 -4.6905942e-05 -1.2128956e-04 +2918 5.844 -4.6663989e-05 -1.2066393e-04 +2919 5.846 -4.6423285e-05 -1.2004152e-04 +2920 5.848 -4.6183821e-05 -1.1942232e-04 +2921 5.85 -4.5945593e-05 -1.1880632e-04 +2922 5.852 -4.5708594e-05 -1.1819350e-04 +2923 5.854 -4.5472817e-05 -1.1758383e-04 +2924 5.856 -4.5238256e-05 -1.1697731e-04 +2925 5.858 -4.5004906e-05 -1.1637392e-04 +2926 5.86 -4.4772759e-05 -1.1577365e-04 +2927 5.862 -4.4541809e-05 -1.1517646e-04 +2928 5.864 -4.4312051e-05 -1.1458236e-04 +2929 5.866 -4.4083478e-05 -1.1399133e-04 +2930 5.868 -4.3856083e-05 -1.1340334e-04 +2931 5.87 -4.3629862e-05 -1.1281838e-04 +2932 5.872 -4.3404808e-05 -1.1223644e-04 +2933 5.874 -4.3180914e-05 -1.1165751e-04 +2934 5.876 -4.2958176e-05 -1.1108155e-04 +2935 5.878 -4.2736586e-05 -1.1050857e-04 +2936 5.88 -4.2516140e-05 -1.0993855e-04 +2937 5.882 -4.2296830e-05 -1.0937147e-04 +2938 5.884 -4.2078652e-05 -1.0880731e-04 +2939 5.886 -4.1861599e-05 -1.0824606e-04 +2940 5.888 -4.1645666e-05 -1.0768770e-04 +2941 5.89 -4.1430846e-05 -1.0713223e-04 +2942 5.892 -4.1217135e-05 -1.0657962e-04 +2943 5.894 -4.1004526e-05 -1.0602986e-04 +2944 5.896 -4.0793013e-05 -1.0548294e-04 +2945 5.898 -4.0582592e-05 -1.0493884e-04 +2946 5.9 -4.0373256e-05 -1.0439754e-04 +2947 5.902 -4.0165000e-05 -1.0385904e-04 +2948 5.904 -3.9957818e-05 -1.0332331e-04 +2949 5.906 -3.9751705e-05 -1.0279035e-04 +2950 5.908 -3.9546655e-05 -1.0226014e-04 +2951 5.91 -3.9342663e-05 -1.0173266e-04 +2952 5.912 -3.9139723e-05 -1.0120790e-04 +2953 5.914 -3.8937829e-05 -1.0068585e-04 +2954 5.916 -3.8736977e-05 -1.0016649e-04 +2955 5.918 -3.8537161e-05 -9.9649811e-05 +2956 5.92 -3.8338376e-05 -9.9135797e-05 +2957 5.922 -3.8140617e-05 -9.8624434e-05 +2958 5.924 -3.7943877e-05 -9.8115709e-05 +2959 5.926 -3.7748152e-05 -9.7609608e-05 +2960 5.928 -3.7553437e-05 -9.7106117e-05 +2961 5.93 -3.7359726e-05 -9.6605224e-05 +2962 5.932 -3.7167014e-05 -9.6106914e-05 +2963 5.934 -3.6975296e-05 -9.5611174e-05 +2964 5.936 -3.6784568e-05 -9.5117991e-05 +2965 5.938 -3.6594823e-05 -9.4627353e-05 +2966 5.94 -3.6406057e-05 -9.4139245e-05 +2967 5.942 -3.6218264e-05 -9.3653655e-05 +2968 5.944 -3.6031440e-05 -9.3170569e-05 +2969 5.946 -3.5845580e-05 -9.2689975e-05 +2970 5.948 -3.5660679e-05 -9.2211861e-05 +2971 5.95 -3.5476731e-05 -9.1736212e-05 +2972 5.952 -3.5293732e-05 -9.1263017e-05 +2973 5.954 -3.5111677e-05 -9.0792263e-05 +2974 5.956 -3.4930562e-05 -9.0323936e-05 +2975 5.958 -3.4750380e-05 -8.9858026e-05 +2976 5.96 -3.4571128e-05 -8.9394519e-05 +2977 5.962 -3.4392800e-05 -8.8933402e-05 +2978 5.964 -3.4215393e-05 -8.8474664e-05 +2979 5.966 -3.4038900e-05 -8.8018293e-05 +2980 5.968 -3.3863318e-05 -8.7564275e-05 +2981 5.97 -3.3688641e-05 -8.7112599e-05 +2982 5.972 -3.3514866e-05 -8.6663253e-05 +2983 5.974 -3.3341987e-05 -8.6216225e-05 +2984 5.976 -3.3170000e-05 -8.5771502e-05 +2985 5.978 -3.2998899e-05 -8.5329074e-05 +2986 5.98 -3.2828682e-05 -8.4888927e-05 +2987 5.982 -3.2659342e-05 -8.4451051e-05 +2988 5.984 -3.2490876e-05 -8.4015434e-05 +2989 5.986 -3.2323279e-05 -8.3582063e-05 +2990 5.988 -3.2156546e-05 -8.3150928e-05 +2991 5.99 -3.1990674e-05 -8.2722017e-05 +2992 5.992 -3.1825657e-05 -8.2295318e-05 +2993 5.994 -3.1661491e-05 -8.1870820e-05 +2994 5.996 -3.1498172e-05 -8.1448512e-05 +2995 5.998 -3.1335695e-05 -8.1028382e-05 +2996 6.0 -3.1174057e-05 -8.0610419e-05 +2997 6.002 -3.1013252e-05 -8.0194612e-05 +2998 6.004 -3.0853277e-05 -7.9780949e-05 +2999 6.006 -3.0694127e-05 -7.9369421e-05 +3000 6.008 -3.0535798e-05 -7.8960015e-05 +3001 6.01 -3.0378286e-05 -7.8552721e-05 +3002 6.012 -3.0221586e-05 -7.8147528e-05 +3003 6.014 -3.0065694e-05 -7.7744425e-05 +3004 6.016 -2.9910607e-05 -7.7343401e-05 +3005 6.018 -2.9756319e-05 -7.6944446e-05 +3006 6.02 -2.9602828e-05 -7.6547548e-05 +3007 6.022 -2.9450128e-05 -7.6152698e-05 +3008 6.024 -2.9298215e-05 -7.5759885e-05 +3009 6.026 -2.9147087e-05 -7.5369097e-05 +3010 6.028 -2.8996738e-05 -7.4980326e-05 +3011 6.03 -2.8847164e-05 -7.4593559e-05 +3012 6.032 -2.8698362e-05 -7.4208788e-05 +3013 6.034 -2.8550328e-05 -7.3826002e-05 +3014 6.036 -2.8403057e-05 -7.3445190e-05 +3015 6.038 -2.8256546e-05 -7.3066342e-05 +3016 6.04 -2.8110790e-05 -7.2689448e-05 +3017 6.042 -2.7965786e-05 -7.2314499e-05 +3018 6.044 -2.7821531e-05 -7.1941483e-05 +3019 6.046 -2.7678019e-05 -7.1570392e-05 +3020 6.048 -2.7535248e-05 -7.1201214e-05 +3021 6.05 -2.7393213e-05 -7.0833941e-05 +3022 6.052 -2.7251911e-05 -7.0468563e-05 +3023 6.054 -2.7111338e-05 -7.0105069e-05 +3024 6.056 -2.6971489e-05 -6.9743450e-05 +3025 6.058 -2.6832363e-05 -6.9383696e-05 +3026 6.06 -2.6693953e-05 -6.9025798e-05 +3027 6.062 -2.6556258e-05 -6.8669746e-05 +3028 6.064 -2.6419273e-05 -6.8315531e-05 +3029 6.066 -2.6282995e-05 -6.7963143e-05 +3030 6.068 -2.6147419e-05 -6.7612572e-05 +3031 6.07 -2.6012543e-05 -6.7263810e-05 +3032 6.072 -2.5878363e-05 -6.6916847e-05 +3033 6.074 -2.5744875e-05 -6.6571673e-05 +3034 6.076 -2.5612075e-05 -6.6228280e-05 +3035 6.078 -2.5479960e-05 -6.5886658e-05 +3036 6.08 -2.5348527e-05 -6.5546798e-05 +3037 6.082 -2.5217772e-05 -6.5208692e-05 +3038 6.084 -2.5087691e-05 -6.4872329e-05 +3039 6.086 -2.4958282e-05 -6.4537701e-05 +3040 6.088 -2.4829539e-05 -6.4204800e-05 +3041 6.09 -2.4701461e-05 -6.3873616e-05 +3042 6.092 -2.4574044e-05 -6.3544139e-05 +3043 6.094 -2.4447284e-05 -6.3216363e-05 +3044 6.096 -2.4321177e-05 -6.2890277e-05 +3045 6.098 -2.4195721e-05 -6.2565873e-05 +3046 6.1 -2.4070913e-05 -6.2243143e-05 +3047 6.102 -2.3946748e-05 -6.1922077e-05 +3048 6.104 -2.3823223e-05 -6.1602667e-05 +3049 6.106 -2.3700336e-05 -6.1284905e-05 +3050 6.108 -2.3578082e-05 -6.0968782e-05 +3051 6.11 -2.3456460e-05 -6.0654289e-05 +3052 6.112 -2.3335464e-05 -6.0341419e-05 +3053 6.114 -2.3215093e-05 -6.0030163e-05 +3054 6.116 -2.3095342e-05 -5.9720512e-05 +3055 6.118 -2.2976210e-05 -5.9412458e-05 +3056 6.12 -2.2857692e-05 -5.9105993e-05 +3057 6.122 -2.2739785e-05 -5.8801109e-05 +3058 6.124 -2.2622486e-05 -5.8497798e-05 +3059 6.126 -2.2505793e-05 -5.8196052e-05 +3060 6.128 -2.2389701e-05 -5.7895861e-05 +3061 6.13 -2.2274208e-05 -5.7597220e-05 +3062 6.132 -2.2159311e-05 -5.7300118e-05 +3063 6.134 -2.2045007e-05 -5.7004549e-05 +3064 6.136 -2.1931292e-05 -5.6710505e-05 +3065 6.138 -2.1818164e-05 -5.6417978e-05 +3066 6.14 -2.1705619e-05 -5.6126959e-05 +3067 6.142 -2.1593655e-05 -5.5837442e-05 +3068 6.144 -2.1482268e-05 -5.5549417e-05 +3069 6.146 -2.1371456e-05 -5.5262879e-05 +3070 6.148 -2.1261216e-05 -5.4977819e-05 +3071 6.15 -2.1151544e-05 -5.4694229e-05 +3072 6.152 -2.1042438e-05 -5.4412102e-05 +3073 6.154 -2.0933894e-05 -5.4131430e-05 +3074 6.156 -2.0825911e-05 -5.3852205e-05 +3075 6.158 -2.0718485e-05 -5.3574422e-05 +3076 6.16 -2.0611612e-05 -5.3298071e-05 +3077 6.162 -2.0505291e-05 -5.3023145e-05 +3078 6.164 -2.0399519e-05 -5.2749638e-05 +3079 6.166 -2.0294292e-05 -5.2477541e-05 +3080 6.168 -2.0189608e-05 -5.2206848e-05 +3081 6.17 -2.0085464e-05 -5.1937551e-05 +3082 6.172 -1.9981857e-05 -5.1669644e-05 +3083 6.174 -1.9878784e-05 -5.1403118e-05 +3084 6.176 -1.9776243e-05 -5.1137967e-05 +3085 6.178 -1.9674231e-05 -5.0874184e-05 +3086 6.18 -1.9572746e-05 -5.0611761e-05 +3087 6.182 -1.9471783e-05 -5.0350692e-05 +3088 6.184 -1.9371342e-05 -5.0090970e-05 +3089 6.186 -1.9271419e-05 -4.9832587e-05 +3090 6.188 -1.9172011e-05 -4.9575537e-05 +3091 6.19 -1.9073116e-05 -4.9319813e-05 +3092 6.192 -1.8974731e-05 -4.9065408e-05 +3093 6.194 -1.8876853e-05 -4.8812316e-05 +3094 6.196 -1.8779480e-05 -4.8560529e-05 +3095 6.198 -1.8682610e-05 -4.8310040e-05 +3096 6.2 -1.8586239e-05 -4.8060844e-05 +3097 6.202 -1.8490366e-05 -4.7812933e-05 +3098 6.204 -1.8394987e-05 -4.7566301e-05 +3099 6.206 -1.8300100e-05 -4.7320941e-05 +3100 6.208 -1.8205702e-05 -4.7076847e-05 +3101 6.21 -1.8111792e-05 -4.6834012e-05 +3102 6.212 -1.8018365e-05 -4.6592429e-05 +3103 6.214 -1.7925421e-05 -4.6352093e-05 +3104 6.216 -1.7832956e-05 -4.6112996e-05 +3105 6.218 -1.7740968e-05 -4.5875133e-05 +3106 6.22 -1.7649455e-05 -4.5638496e-05 +3107 6.222 -1.7558413e-05 -4.5403080e-05 +3108 6.224 -1.7467842e-05 -4.5168879e-05 +3109 6.226 -1.7377737e-05 -4.4935885e-05 +3110 6.228 -1.7288097e-05 -4.4704094e-05 +3111 6.23 -1.7198920e-05 -4.4473498e-05 +3112 6.232 -1.7110202e-05 -4.4244091e-05 +3113 6.234 -1.7021943e-05 -4.4015868e-05 +3114 6.236 -1.6934138e-05 -4.3788822e-05 +3115 6.238 -1.6846787e-05 -4.3562947e-05 +3116 6.24 -1.6759886e-05 -4.3338237e-05 +3117 6.242 -1.6673433e-05 -4.3114687e-05 +3118 6.244 -1.6587426e-05 -4.2892289e-05 +3119 6.246 -1.6501863e-05 -4.2671039e-05 +3120 6.248 -1.6416741e-05 -4.2450930e-05 +3121 6.25 -1.6332059e-05 -4.2231956e-05 +3122 6.252 -1.6247813e-05 -4.2014112e-05 +3123 6.254 -1.6164001e-05 -4.1797391e-05 +3124 6.256 -1.6080622e-05 -4.1581789e-05 +3125 6.258 -1.5997673e-05 -4.1367298e-05 +3126 6.26 -1.5915152e-05 -4.1153914e-05 +3127 6.262 -1.5833057e-05 -4.0941631e-05 +3128 6.264 -1.5751385e-05 -4.0730442e-05 +3129 6.266 -1.5670135e-05 -4.0520343e-05 +3130 6.268 -1.5589303e-05 -4.0311328e-05 +3131 6.27 -1.5508889e-05 -4.0103391e-05 +3132 6.272 -1.5428889e-05 -3.9896526e-05 +3133 6.274 -1.5349302e-05 -3.9690729e-05 +3134 6.276 -1.5270125e-05 -3.9485993e-05 +3135 6.278 -1.5191357e-05 -3.9282313e-05 +3136 6.28 -1.5112995e-05 -3.9079684e-05 +3137 6.282 -1.5035038e-05 -3.8878099e-05 +3138 6.284 -1.4957482e-05 -3.8677555e-05 +3139 6.286 -1.4880327e-05 -3.8478045e-05 +3140 6.288 -1.4803569e-05 -3.8279565e-05 +3141 6.29 -1.4727208e-05 -3.8082108e-05 +3142 6.292 -1.4651240e-05 -3.7885670e-05 +3143 6.294 -1.4575664e-05 -3.7690245e-05 +3144 6.296 -1.4500479e-05 -3.7495828e-05 +3145 6.298 -1.4425680e-05 -3.7302413e-05 +3146 6.3 -1.4351268e-05 -3.7109997e-05 +3147 6.302 -1.4277240e-05 -3.6918573e-05 +3148 6.304 -1.4203593e-05 -3.6728136e-05 +3149 6.306 -1.4130327e-05 -3.6538682e-05 +3150 6.308 -1.4057438e-05 -3.6350205e-05 +3151 6.31 -1.3984925e-05 -3.6162700e-05 +3152 6.312 -1.3912786e-05 -3.5976163e-05 +3153 6.314 -1.3841020e-05 -3.5790588e-05 +3154 6.316 -1.3769623e-05 -3.5605969e-05 +3155 6.318 -1.3698595e-05 -3.5422304e-05 +3156 6.32 -1.3627934e-05 -3.5239585e-05 +3157 6.322 -1.3557636e-05 -3.5057809e-05 +3158 6.324 -1.3487702e-05 -3.4876971e-05 +3159 6.326 -1.3418128e-05 -3.4697065e-05 +3160 6.328 -1.3348913e-05 -3.4518088e-05 +3161 6.33 -1.3280055e-05 -3.4340034e-05 +3162 6.332 -1.3211552e-05 -3.4162898e-05 +3163 6.334 -1.3143403e-05 -3.3986676e-05 +3164 6.336 -1.3075605e-05 -3.3811363e-05 +3165 6.338 -1.3008157e-05 -3.3636954e-05 +3166 6.34 -1.2941056e-05 -3.3463445e-05 +3167 6.342 -1.2874302e-05 -3.3290831e-05 +3168 6.344 -1.2807892e-05 -3.3119107e-05 +3169 6.346 -1.2741825e-05 -3.2948269e-05 +3170 6.348 -1.2676099e-05 -3.2778312e-05 +3171 6.35 -1.2610711e-05 -3.2609232e-05 +3172 6.352 -1.2545661e-05 -3.2441024e-05 +3173 6.354 -1.2480947e-05 -3.2273684e-05 +3174 6.356 -1.2416566e-05 -3.2107207e-05 +3175 6.358 -1.2352517e-05 -3.1941588e-05 +3176 6.36 -1.2288799e-05 -3.1776824e-05 +3177 6.362 -1.2225409e-05 -3.1612910e-05 +3178 6.364 -1.2162347e-05 -3.1449841e-05 +3179 6.366 -1.2099610e-05 -3.1287614e-05 +3180 6.368 -1.2037196e-05 -3.1126223e-05 +3181 6.37 -1.1975104e-05 -3.0965665e-05 +3182 6.372 -1.1913333e-05 -3.0805935e-05 +3183 6.374 -1.1851880e-05 -3.0647029e-05 +3184 6.376 -1.1790744e-05 -3.0488943e-05 +3185 6.378 -1.1729923e-05 -3.0331672e-05 +3186 6.38 -1.1669417e-05 -3.0175212e-05 +3187 6.382 -1.1609222e-05 -3.0019559e-05 +3188 6.384 -1.1549338e-05 -2.9864710e-05 +3189 6.386 -1.1489763e-05 -2.9710659e-05 +3190 6.388 -1.1430495e-05 -2.9557402e-05 +3191 6.39 -1.1371533e-05 -2.9404936e-05 +3192 6.392 -1.1312875e-05 -2.9253257e-05 +3193 6.394 -1.1254519e-05 -2.9102360e-05 +3194 6.396 -1.1196465e-05 -2.8952241e-05 +3195 6.398 -1.1138710e-05 -2.8802897e-05 +3196 6.4 -1.1081252e-05 -2.8654323e-05 +3197 6.402 -1.1024092e-05 -2.8506516e-05 +3198 6.404 -1.0967226e-05 -2.8359471e-05 +3199 6.406 -1.0910653e-05 -2.8213184e-05 +3200 6.408 -1.0854373e-05 -2.8067652e-05 +3201 6.41 -1.0798382e-05 -2.7922871e-05 +3202 6.412 -1.0742681e-05 -2.7778836e-05 +3203 6.414 -1.0687266e-05 -2.7635545e-05 +3204 6.416 -1.0632138e-05 -2.7492992e-05 +3205 6.418 -1.0577294e-05 -2.7351175e-05 +3206 6.42 -1.0522733e-05 -2.7210090e-05 +3207 6.422 -1.0468453e-05 -2.7069732e-05 +3208 6.424 -1.0414453e-05 -2.6930098e-05 +3209 6.426 -1.0360732e-05 -2.6791185e-05 +3210 6.428 -1.0307288e-05 -2.6652988e-05 +3211 6.43 -1.0254120e-05 -2.6515504e-05 +3212 6.432 -1.0201226e-05 -2.6378729e-05 +3213 6.434 -1.0148604e-05 -2.6242659e-05 +3214 6.436 -1.0096255e-05 -2.6107292e-05 +3215 6.438 -1.0044175e-05 -2.5972623e-05 +3216 6.44 -9.9923636e-06 -2.5838648e-05 +3217 6.442 -9.9408197e-06 -2.5705364e-05 +3218 6.444 -9.8895417e-06 -2.5572768e-05 +3219 6.446 -9.8385282e-06 -2.5440856e-05 +3220 6.448 -9.7877778e-06 -2.5309625e-05 +3221 6.45 -9.7372892e-06 -2.5179070e-05 +3222 6.452 -9.6870611e-06 -2.5049189e-05 +3223 6.454 -9.6370920e-06 -2.4919978e-05 +3224 6.456 -9.5873807e-06 -2.4791433e-05 +3225 6.458 -9.5379259e-06 -2.4663551e-05 +3226 6.46 -9.4887261e-06 -2.4536329e-05 +3227 6.462 -9.4397801e-06 -2.4409763e-05 +3228 6.464 -9.3910866e-06 -2.4283850e-05 +3229 6.466 -9.3426443e-06 -2.4158587e-05 +3230 6.468 -9.2944518e-06 -2.4033969e-05 +3231 6.47 -9.2465080e-06 -2.3909995e-05 +3232 6.472 -9.1988114e-06 -2.3786660e-05 +3233 6.474 -9.1513609e-06 -2.3663961e-05 +3234 6.476 -9.1041552e-06 -2.3541895e-05 +3235 6.478 -9.0571929e-06 -2.3420459e-05 +3236 6.48 -9.0104729e-06 -2.3299649e-05 +3237 6.482 -8.9639939e-06 -2.3179462e-05 +3238 6.484 -8.9177547e-06 -2.3059896e-05 +3239 6.486 -8.8717539e-06 -2.2940946e-05 +3240 6.488 -8.8259905e-06 -2.2822609e-05 +3241 6.49 -8.7804631e-06 -2.2704883e-05 +3242 6.492 -8.7351705e-06 -2.2587764e-05 +3243 6.494 -8.6901116e-06 -2.2471250e-05 +3244 6.496 -8.6452851e-06 -2.2355336e-05 +3245 6.498 -8.6006899e-06 -2.2240021e-05 +3246 6.5 -8.5563246e-06 -2.2125300e-05 +3247 6.502 -8.5121883e-06 -2.2011171e-05 +3248 6.504 -8.4682796e-06 -2.1897630e-05 +3249 6.506 -8.4245974e-06 -2.1784676e-05 +3250 6.508 -8.3811405e-06 -2.1672304e-05 +3251 6.51 -8.3379078e-06 -2.1560511e-05 +3252 6.512 -8.2948980e-06 -2.1449295e-05 +3253 6.514 -8.2521102e-06 -2.1338653e-05 +3254 6.516 -8.2095431e-06 -2.1228582e-05 +3255 6.518 -8.1671955e-06 -2.1119078e-05 +3256 6.52 -8.1250664e-06 -2.1010140e-05 +3257 6.522 -8.0831546e-06 -2.0901763e-05 +3258 6.524 -8.0414589e-06 -2.0793945e-05 +3259 6.526 -7.9999784e-06 -2.0686684e-05 +3260 6.528 -7.9587118e-06 -2.0579975e-05 +3261 6.53 -7.9176581e-06 -2.0473817e-05 +3262 6.532 -7.8768162e-06 -2.0368207e-05 +3263 6.534 -7.8361849e-06 -2.0263142e-05 +3264 6.536 -7.7957633e-06 -2.0158618e-05 +3265 6.538 -7.7555501e-06 -2.0054634e-05 +3266 6.54 -7.7155444e-06 -1.9951186e-05 +3267 6.542 -7.6757450e-06 -1.9848271e-05 +3268 6.544 -7.6361509e-06 -1.9745888e-05 +3269 6.546 -7.5967611e-06 -1.9644032e-05 +3270 6.548 -7.5575745e-06 -1.9542702e-05 +3271 6.55 -7.5185900e-06 -1.9441895e-05 +3272 6.552 -7.4798065e-06 -1.9341608e-05 +3273 6.554 -7.4412232e-06 -1.9241838e-05 +3274 6.556 -7.4028388e-06 -1.9142582e-05 +3275 6.558 -7.3646525e-06 -1.9043839e-05 +3276 6.56 -7.3266631e-06 -1.8945605e-05 +3277 6.562 -7.2888698e-06 -1.8847877e-05 +3278 6.564 -7.2512713e-06 -1.8750654e-05 +3279 6.566 -7.2138668e-06 -1.8653932e-05 +3280 6.568 -7.1766552e-06 -1.8557710e-05 +3281 6.57 -7.1396356e-06 -1.8461983e-05 +3282 6.572 -7.1028070e-06 -1.8366751e-05 +3283 6.574 -7.0661683e-06 -1.8272009e-05 +3284 6.576 -7.0297186e-06 -1.8177756e-05 +3285 6.578 -6.9934570e-06 -1.8083990e-05 +3286 6.58 -6.9573823e-06 -1.7990707e-05 +3287 6.582 -6.9214938e-06 -1.7897905e-05 +3288 6.584 -6.8857904e-06 -1.7805582e-05 +3289 6.586 -6.8502712e-06 -1.7713735e-05 +3290 6.588 -6.8149351e-06 -1.7622362e-05 +3291 6.59 -6.7797814e-06 -1.7531461e-05 +3292 6.592 -6.7448090e-06 -1.7441028e-05 +3293 6.594 -6.7100170e-06 -1.7351062e-05 +3294 6.596 -6.6754044e-06 -1.7261559e-05 +3295 6.598 -6.6409704e-06 -1.7172519e-05 +3296 6.6 -6.6067140e-06 -1.7083938e-05 +3297 6.602 -6.5726344e-06 -1.6995813e-05 +3298 6.604 -6.5387305e-06 -1.6908144e-05 +3299 6.606 -6.5050015e-06 -1.6820926e-05 +3300 6.608 -6.4714465e-06 -1.6734158e-05 +3301 6.61 -6.4380646e-06 -1.6647838e-05 +3302 6.612 -6.4048548e-06 -1.6561964e-05 +3303 6.614 -6.3718164e-06 -1.6476532e-05 +3304 6.616 -6.3389484e-06 -1.6391541e-05 +3305 6.618 -6.3062500e-06 -1.6306988e-05 +3306 6.62 -6.2737202e-06 -1.6222871e-05 +3307 6.622 -6.2413582e-06 -1.6139188e-05 +3308 6.624 -6.2091631e-06 -1.6055937e-05 +3309 6.626 -6.1771341e-06 -1.5973116e-05 +3310 6.628 -6.1452704e-06 -1.5890721e-05 +3311 6.63 -6.1135710e-06 -1.5808752e-05 +3312 6.632 -6.0820351e-06 -1.5727206e-05 +3313 6.634 -6.0506619e-06 -1.5646080e-05 +3314 6.636 -6.0194505e-06 -1.5565372e-05 +3315 6.638 -5.9884001e-06 -1.5485081e-05 +3316 6.64 -5.9575099e-06 -1.5405204e-05 +3317 6.642 -5.9267790e-06 -1.5325739e-05 +3318 6.644 -5.8962067e-06 -1.5246684e-05 +3319 6.646 -5.8657920e-06 -1.5168037e-05 +3320 6.648 -5.8355342e-06 -1.5089795e-05 +3321 6.65 -5.8054326e-06 -1.5011957e-05 +3322 6.652 -5.7754862e-06 -1.4934521e-05 +3323 6.654 -5.7456942e-06 -1.4857484e-05 +3324 6.656 -5.7160559e-06 -1.4780844e-05 +3325 6.658 -5.6865706e-06 -1.4704600e-05 +3326 6.66 -5.6572373e-06 -1.4628749e-05 +3327 6.662 -5.6280553e-06 -1.4553289e-05 +3328 6.664 -5.5990239e-06 -1.4478219e-05 +3329 6.666 -5.5701422e-06 -1.4403535e-05 +3330 6.668 -5.5414095e-06 -1.4329237e-05 +3331 6.67 -5.5128250e-06 -1.4255323e-05 +3332 6.672 -5.4843879e-06 -1.4181789e-05 +3333 6.674 -5.4560976e-06 -1.4108635e-05 +3334 6.676 -5.4279531e-06 -1.4035858e-05 +3335 6.678 -5.3999539e-06 -1.3963457e-05 +3336 6.68 -5.3720991e-06 -1.3891429e-05 +3337 6.682 -5.3443879e-06 -1.3819772e-05 +3338 6.684 -5.3168197e-06 -1.3748485e-05 +3339 6.686 -5.2893937e-06 -1.3677566e-05 +3340 6.688 -5.2621092e-06 -1.3607013e-05 +3341 6.69 -5.2349654e-06 -1.3536824e-05 +3342 6.692 -5.2079617e-06 -1.3466996e-05 +3343 6.694 -5.1810972e-06 -1.3397529e-05 +3344 6.696 -5.1543713e-06 -1.3328421e-05 +3345 6.698 -5.1277833e-06 -1.3259668e-05 +3346 6.7 -5.1013324e-06 -1.3191271e-05 +3347 6.702 -5.0750180e-06 -1.3123226e-05 +3348 6.704 -5.0488393e-06 -1.3055532e-05 +3349 6.706 -5.0227956e-06 -1.2988187e-05 +3350 6.708 -4.9968863e-06 -1.2921190e-05 +3351 6.71 -4.9711106e-06 -1.2854538e-05 +3352 6.712 -4.9454679e-06 -1.2788231e-05 +3353 6.714 -4.9199575e-06 -1.2722265e-05 +3354 6.716 -4.8945786e-06 -1.2656639e-05 +3355 6.718 -4.8693307e-06 -1.2591352e-05 +3356 6.72 -4.8442130e-06 -1.2526402e-05 +3357 6.722 -4.8192249e-06 -1.2461787e-05 +3358 6.724 -4.7943656e-06 -1.2397505e-05 +3359 6.726 -4.7696346e-06 -1.2333554e-05 +3360 6.728 -4.7450312e-06 -1.2269934e-05 +3361 6.73 -4.7205547e-06 -1.2206642e-05 +3362 6.732 -4.6962044e-06 -1.2143676e-05 +3363 6.734 -4.6719797e-06 -1.2081035e-05 +3364 6.736 -4.6478801e-06 -1.2018717e-05 +3365 6.738 -4.6239047e-06 -1.1956721e-05 +3366 6.74 -4.6000530e-06 -1.1895044e-05 +3367 6.742 -4.5763243e-06 -1.1833685e-05 +3368 6.744 -4.5527180e-06 -1.1772643e-05 +3369 6.746 -4.5292335e-06 -1.1711916e-05 +3370 6.748 -4.5058701e-06 -1.1651502e-05 +3371 6.75 -4.4826273e-06 -1.1591400e-05 +3372 6.752 -4.4595043e-06 -1.1531608e-05 +3373 6.754 -4.4365006e-06 -1.1472124e-05 +3374 6.756 -4.4136156e-06 -1.1412947e-05 +3375 6.758 -4.3908486e-06 -1.1354076e-05 +3376 6.76 -4.3681991e-06 -1.1295508e-05 +3377 6.762 -4.3456664e-06 -1.1237242e-05 +3378 6.764 -4.3232499e-06 -1.1179276e-05 +3379 6.766 -4.3009491e-06 -1.1121610e-05 +3380 6.768 -4.2787633e-06 -1.1064241e-05 +3381 6.77 -4.2566919e-06 -1.1007168e-05 +3382 6.772 -4.2347344e-06 -1.0950390e-05 +3383 6.774 -4.2128902e-06 -1.0893904e-05 +3384 6.776 -4.1911586e-06 -1.0837710e-05 +3385 6.778 -4.1695392e-06 -1.0781805e-05 +3386 6.78 -4.1480312e-06 -1.0726189e-05 +3387 6.782 -4.1266342e-06 -1.0670860e-05 +3388 6.784 -4.1053476e-06 -1.0615816e-05 +3389 6.786 -4.0841708e-06 -1.0561056e-05 +3390 6.788 -4.0631032e-06 -1.0506579e-05 +3391 6.79 -4.0421443e-06 -1.0452383e-05 +3392 6.792 -4.0212935e-06 -1.0398466e-05 +3393 6.794 -4.0005502e-06 -1.0344827e-05 +3394 6.796 -3.9799140e-06 -1.0291465e-05 +3395 6.798 -3.9593842e-06 -1.0238378e-05 +3396 6.8 -3.9389603e-06 -1.0185565e-05 +3397 6.802 -3.9186417e-06 -1.0133025e-05 +3398 6.804 -3.8984280e-06 -1.0080755e-05 +3399 6.806 -3.8783185e-06 -1.0028756e-05 +3400 6.808 -3.8583128e-06 -9.9770240e-06 +3401 6.81 -3.8384102e-06 -9.9255592e-06 +3402 6.812 -3.8186104e-06 -9.8743599e-06 +3403 6.814 -3.7989126e-06 -9.8234247e-06 +3404 6.816 -3.7793165e-06 -9.7727523e-06 +3405 6.818 -3.7598214e-06 -9.7223412e-06 +3406 6.82 -3.7404270e-06 -9.6721902e-06 +3407 6.822 -3.7211325e-06 -9.6222979e-06 +3408 6.824 -3.7019376e-06 -9.5726629e-06 +3409 6.826 -3.6828417e-06 -9.5232839e-06 +3410 6.828 -3.6638443e-06 -9.4741597e-06 +3411 6.83 -3.6449449e-06 -9.4252889e-06 +3412 6.832 -3.6261430e-06 -9.3766701e-06 +3413 6.834 -3.6074380e-06 -9.3283022e-06 +3414 6.836 -3.5888296e-06 -9.2801837e-06 +3415 6.838 -3.5703171e-06 -9.2323135e-06 +3416 6.84 -3.5519002e-06 -9.1846902e-06 +3417 6.842 -3.5335782e-06 -9.1373125e-06 +3418 6.844 -3.5153508e-06 -9.0901792e-06 +3419 6.846 -3.4972173e-06 -9.0432891e-06 +3420 6.848 -3.4791774e-06 -8.9966408e-06 +3421 6.85 -3.4612306e-06 -8.9502332e-06 +3422 6.852 -3.4433764e-06 -8.9040649e-06 +3423 6.854 -3.4256142e-06 -8.8581348e-06 +3424 6.856 -3.4079437e-06 -8.8124416e-06 +3425 6.858 -3.3903643e-06 -8.7669841e-06 +3426 6.86 -3.3728756e-06 -8.7217611e-06 +3427 6.862 -3.3554771e-06 -8.6767714e-06 +3428 6.864 -3.3381683e-06 -8.6320137e-06 +3429 6.866 -3.3209489e-06 -8.5874869e-06 +3430 6.868 -3.3038182e-06 -8.5431898e-06 +3431 6.87 -3.2867759e-06 -8.4991212e-06 +3432 6.872 -3.2698216e-06 -8.4552799e-06 +3433 6.874 -3.2529547e-06 -8.4116648e-06 +3434 6.876 -3.2361748e-06 -8.3682746e-06 +3435 6.878 -3.2194814e-06 -8.3251083e-06 +3436 6.88 -3.2028742e-06 -8.2821646e-06 +3437 6.882 -3.1863526e-06 -8.2394425e-06 +3438 6.884 -3.1699163e-06 -8.1969407e-06 +3439 6.886 -3.1535647e-06 -8.1546582e-06 +3440 6.888 -3.1372975e-06 -8.1125937e-06 +3441 6.89 -3.1211142e-06 -8.0707463e-06 +3442 6.892 -3.1050144e-06 -8.0291147e-06 +3443 6.894 -3.0889976e-06 -7.9876978e-06 +3444 6.896 -3.0730634e-06 -7.9464946e-06 +3445 6.898 -3.0572115e-06 -7.9055040e-06 +3446 6.9 -3.0414413e-06 -7.8647247e-06 +3447 6.902 -3.0257524e-06 -7.8241559e-06 +3448 6.904 -3.0101445e-06 -7.7837963e-06 +3449 6.906 -2.9946171e-06 -7.7436448e-06 +3450 6.908 -2.9791698e-06 -7.7037005e-06 +3451 6.91 -2.9638022e-06 -7.6639623e-06 +3452 6.912 -2.9485138e-06 -7.6244290e-06 +3453 6.914 -2.9333043e-06 -7.5850997e-06 +3454 6.916 -2.9181733e-06 -7.5459732e-06 +3455 6.918 -2.9031203e-06 -7.5070485e-06 +3456 6.92 -2.8881450e-06 -7.4683247e-06 +3457 6.922 -2.8732469e-06 -7.4298006e-06 +3458 6.924 -2.8584256e-06 -7.3914752e-06 +3459 6.926 -2.8436808e-06 -7.3533475e-06 +3460 6.928 -2.8290121e-06 -7.3154164e-06 +3461 6.93 -2.8144190e-06 -7.2776811e-06 +3462 6.932 -2.7999012e-06 -7.2401404e-06 +3463 6.934 -2.7854583e-06 -7.2027933e-06 +3464 6.936 -2.7710899e-06 -7.1656389e-06 +3465 6.938 -2.7567957e-06 -7.1286761e-06 +3466 6.94 -2.7425751e-06 -7.0919040e-06 +3467 6.942 -2.7284279e-06 -7.0553216e-06 +3468 6.944 -2.7143537e-06 -7.0189279e-06 +3469 6.946 -2.7003521e-06 -6.9827219e-06 +3470 6.948 -2.6864227e-06 -6.9467027e-06 +3471 6.95 -2.6725651e-06 -6.9108692e-06 +3472 6.952 -2.6587791e-06 -6.8752207e-06 +3473 6.954 -2.6450641e-06 -6.8397560e-06 +3474 6.956 -2.6314199e-06 -6.8044742e-06 +3475 6.958 -2.6178461e-06 -6.7693744e-06 +3476 6.96 -2.6043423e-06 -6.7344557e-06 +3477 6.962 -2.5909082e-06 -6.6997171e-06 +3478 6.964 -2.5775433e-06 -6.6651577e-06 +3479 6.966 -2.5642474e-06 -6.6307766e-06 +3480 6.968 -2.5510201e-06 -6.5965728e-06 +3481 6.97 -2.5378610e-06 -6.5625455e-06 +3482 6.972 -2.5247698e-06 -6.5286937e-06 +3483 6.974 -2.5117461e-06 -6.4950165e-06 +3484 6.976 -2.4987896e-06 -6.4615130e-06 +3485 6.978 -2.4859000e-06 -6.4281823e-06 +3486 6.98 -2.4730768e-06 -6.3950236e-06 +3487 6.982 -2.4603198e-06 -6.3620359e-06 +3488 6.984 -2.4476285e-06 -6.3292184e-06 +3489 6.986 -2.4350028e-06 -6.2965701e-06 +3490 6.988 -2.4224421e-06 -6.2640903e-06 +3491 6.99 -2.4099463e-06 -6.2317780e-06 +3492 6.992 -2.3975149e-06 -6.1996324e-06 +3493 6.994 -2.3851477e-06 -6.1676526e-06 +3494 6.996 -2.3728442e-06 -6.1358378e-06 +3495 6.998 -2.3606042e-06 -6.1041870e-06 +3496 7.0 -2.3484273e-06 -6.0726996e-06 +3497 7.002 -2.3363133e-06 -6.0413745e-06 +3498 7.004 -2.3242617e-06 -6.0102111e-06 +3499 7.006 -2.3122723e-06 -5.9792084e-06 +3500 7.008 -2.3003448e-06 -5.9483656e-06 +3501 7.01 -2.2884788e-06 -5.9176819e-06 +3502 7.012 -2.2766740e-06 -5.8871565e-06 +3503 7.014 -2.2649300e-06 -5.8567886e-06 +3504 7.016 -2.2532467e-06 -5.8265773e-06 +3505 7.018 -2.2416236e-06 -5.7965218e-06 +3506 7.02 -2.2300605e-06 -5.7666214e-06 +3507 7.022 -2.2185570e-06 -5.7368752e-06 +3508 7.024 -2.2071129e-06 -5.7072824e-06 +3509 7.026 -2.1957278e-06 -5.6778423e-06 +3510 7.028 -2.1844014e-06 -5.6485541e-06 +3511 7.03 -2.1731335e-06 -5.6194169e-06 +3512 7.032 -2.1619237e-06 -5.5904301e-06 +3513 7.034 -2.1507717e-06 -5.5615927e-06 +3514 7.036 -2.1396772e-06 -5.5329041e-06 +3515 7.038 -2.1286399e-06 -5.5043635e-06 +3516 7.04 -2.1176596e-06 -5.4759702e-06 +3517 7.042 -2.1067360e-06 -5.4477232e-06 +3518 7.044 -2.0958687e-06 -5.4196220e-06 +3519 7.046 -2.0850574e-06 -5.3916658e-06 +3520 7.048 -2.0743019e-06 -5.3638537e-06 +3521 7.05 -2.0636019e-06 -5.3361851e-06 +3522 7.052 -2.0529571e-06 -5.3086593e-06 +3523 7.054 -2.0423671e-06 -5.2812754e-06 +3524 7.056 -2.0318319e-06 -5.2540328e-06 +3525 7.058 -2.0213509e-06 -5.2269307e-06 +3526 7.06 -2.0109240e-06 -5.1999684e-06 +3527 7.062 -2.0005510e-06 -5.1731452e-06 +3528 7.064 -1.9902314e-06 -5.1464603e-06 +3529 7.066 -1.9799650e-06 -5.1199131e-06 +3530 7.068 -1.9697516e-06 -5.0935029e-06 +3531 7.07 -1.9595909e-06 -5.0672288e-06 +3532 7.072 -1.9494826e-06 -5.0410903e-06 +3533 7.074 -1.9394265e-06 -5.0150867e-06 +3534 7.076 -1.9294222e-06 -4.9892171e-06 +3535 7.078 -1.9194695e-06 -4.9634811e-06 +3536 7.08 -1.9095682e-06 -4.9378777e-06 +3537 7.082 -1.8997179e-06 -4.9124065e-06 +3538 7.084 -1.8899185e-06 -4.8870666e-06 +3539 7.086 -1.8801696e-06 -4.8618574e-06 +3540 7.088 -1.8704709e-06 -4.8367783e-06 +3541 7.09 -1.8608224e-06 -4.8118285e-06 +3542 7.092 -1.8512235e-06 -4.7870075e-06 +3543 7.094 -1.8416742e-06 -4.7623144e-06 +3544 7.096 -1.8321742e-06 -4.7377488e-06 +3545 7.098 -1.8227232e-06 -4.7133099e-06 +3546 7.1 -1.8133209e-06 -4.6889970e-06 +3547 7.102 -1.8039671e-06 -4.6648095e-06 +3548 7.104 -1.7946616e-06 -4.6407468e-06 +3549 7.106 -1.7854040e-06 -4.6168083e-06 +3550 7.108 -1.7761942e-06 -4.5929932e-06 +3551 7.11 -1.7670320e-06 -4.5693010e-06 +3552 7.112 -1.7579170e-06 -4.5457309e-06 +3553 7.114 -1.7488490e-06 -4.5222825e-06 +3554 7.116 -1.7398277e-06 -4.4989550e-06 +3555 7.118 -1.7308531e-06 -4.4757478e-06 +3556 7.12 -1.7219247e-06 -4.4526604e-06 +3557 7.122 -1.7130423e-06 -4.4296920e-06 +3558 7.124 -1.7042058e-06 -4.4068422e-06 +3559 7.126 -1.6954149e-06 -4.3841101e-06 +3560 7.128 -1.6866693e-06 -4.3614954e-06 +3561 7.13 -1.6779688e-06 -4.3389973e-06 +3562 7.132 -1.6693132e-06 -4.3166153e-06 +3563 7.134 -1.6607023e-06 -4.2943487e-06 +3564 7.136 -1.6521358e-06 -4.2721969e-06 +3565 7.138 -1.6436134e-06 -4.2501595e-06 +3566 7.14 -1.6351351e-06 -4.2282357e-06 +3567 7.142 -1.6267004e-06 -4.2064250e-06 +3568 7.144 -1.6183093e-06 -4.1847268e-06 +3569 7.146 -1.6099614e-06 -4.1631405e-06 +3570 7.148 -1.6016566e-06 -4.1416656e-06 +3571 7.15 -1.5933947e-06 -4.1203014e-06 +3572 7.152 -1.5851754e-06 -4.0990475e-06 +3573 7.154 -1.5769984e-06 -4.0779032e-06 +3574 7.156 -1.5688637e-06 -4.0568680e-06 +3575 7.158 -1.5607709e-06 -4.0359412e-06 +3576 7.16 -1.5527198e-06 -4.0151225e-06 +3577 7.162 -1.5447103e-06 -3.9944111e-06 +3578 7.164 -1.5367421e-06 -3.9738065e-06 +3579 7.166 -1.5288150e-06 -3.9533082e-06 +3580 7.168 -1.5209288e-06 -3.9329157e-06 +3581 7.17 -1.5130833e-06 -3.9126284e-06 +3582 7.172 -1.5052782e-06 -3.8924457e-06 +3583 7.174 -1.4975134e-06 -3.8723671e-06 +3584 7.176 -1.4897887e-06 -3.8523921e-06 +3585 7.178 -1.4821038e-06 -3.8325201e-06 +3586 7.18 -1.4744586e-06 -3.8127506e-06 +3587 7.182 -1.4668527e-06 -3.7930831e-06 +3588 7.184 -1.4592862e-06 -3.7735171e-06 +3589 7.186 -1.4517586e-06 -3.7540520e-06 +3590 7.188 -1.4442699e-06 -3.7346873e-06 +3591 7.19 -1.4368198e-06 -3.7154224e-06 +3592 7.192 -1.4294081e-06 -3.6962570e-06 +3593 7.194 -1.4220347e-06 -3.6771904e-06 +3594 7.196 -1.4146993e-06 -3.6582222e-06 +3595 7.198 -1.4074017e-06 -3.6393518e-06 +3596 7.2 -1.4001418e-06 -3.6205788e-06 +3597 7.202 -1.3929194e-06 -3.6019026e-06 +3598 7.204 -1.3857341e-06 -3.5833227e-06 +3599 7.206 -1.3785860e-06 -3.5648387e-06 +3600 7.208 -1.3714747e-06 -3.5464500e-06 +3601 7.21 -1.3644001e-06 -3.5281562e-06 +3602 7.212 -1.3573620e-06 -3.5099567e-06 +3603 7.214 -1.3503603e-06 -3.4918511e-06 +3604 7.216 -1.3433946e-06 -3.4738389e-06 +3605 7.218 -1.3364648e-06 -3.4559197e-06 +3606 7.22 -1.3295708e-06 -3.4380928e-06 +3607 7.222 -1.3227124e-06 -3.4203579e-06 +3608 7.224 -1.3158893e-06 -3.4027145e-06 +3609 7.226 -1.3091015e-06 -3.3851621e-06 +3610 7.228 -1.3023486e-06 -3.3677003e-06 +3611 7.23 -1.2956306e-06 -3.3503285e-06 +3612 7.232 -1.2889473e-06 -3.3330463e-06 +3613 7.234 -1.2822984e-06 -3.3158533e-06 +3614 7.236 -1.2756838e-06 -3.2987490e-06 +3615 7.238 -1.2691033e-06 -3.2817329e-06 +3616 7.24 -1.2625568e-06 -3.2648046e-06 +3617 7.242 -1.2560440e-06 -3.2479635e-06 +3618 7.244 -1.2495649e-06 -3.2312094e-06 +3619 7.246 -1.2431192e-06 -3.2145417e-06 +3620 7.248 -1.2367067e-06 -3.1979600e-06 +3621 7.25 -1.2303273e-06 -3.1814638e-06 +3622 7.252 -1.2239808e-06 -3.1650527e-06 +3623 7.254 -1.2176670e-06 -3.1487262e-06 +3624 7.256 -1.2113858e-06 -3.1324840e-06 +3625 7.258 -1.2051370e-06 -3.1163255e-06 +3626 7.26 -1.1989204e-06 -3.1002504e-06 +3627 7.262 -1.1927359e-06 -3.0842582e-06 +3628 7.264 -1.1865833e-06 -3.0683485e-06 +3629 7.266 -1.1804625e-06 -3.0525209e-06 +3630 7.268 -1.1743732e-06 -3.0367749e-06 +3631 7.27 -1.1683153e-06 -3.0211102e-06 +3632 7.272 -1.1622887e-06 -3.0055262e-06 +3633 7.274 -1.1562932e-06 -2.9900227e-06 +3634 7.276 -1.1503286e-06 -2.9745991e-06 +3635 7.278 -1.1443947e-06 -2.9592551e-06 +3636 7.28 -1.1384915e-06 -2.9439902e-06 +3637 7.282 -1.1326187e-06 -2.9288040e-06 +3638 7.284 -1.1267762e-06 -2.9136962e-06 +3639 7.286 -1.1209639e-06 -2.8986664e-06 +3640 7.288 -1.1151815e-06 -2.8837140e-06 +3641 7.29 -1.1094290e-06 -2.8688388e-06 +3642 7.292 -1.1037061e-06 -2.8540403e-06 +3643 7.294 -1.0980128e-06 -2.8393182e-06 +3644 7.296 -1.0923488e-06 -2.8246720e-06 +3645 7.298 -1.0867140e-06 -2.8101013e-06 +3646 7.3 -1.0811083e-06 -2.7956058e-06 +3647 7.302 -1.0755315e-06 -2.7811851e-06 +3648 7.304 -1.0699835e-06 -2.7668387e-06 +3649 7.306 -1.0644641e-06 -2.7525664e-06 +3650 7.308 -1.0589732e-06 -2.7383677e-06 +3651 7.31 -1.0535106e-06 -2.7242422e-06 +3652 7.312 -1.0480762e-06 -2.7101896e-06 +3653 7.314 -1.0426698e-06 -2.6962095e-06 +3654 7.316 -1.0372913e-06 -2.6823015e-06 +3655 7.318 -1.0319406e-06 -2.6684652e-06 +3656 7.32 -1.0266174e-06 -2.6547003e-06 +3657 7.322 -1.0213217e-06 -2.6410065e-06 +3658 7.324 -1.0160533e-06 -2.6273832e-06 +3659 7.326 -1.0108121e-06 -2.6138302e-06 +3660 7.328 -1.0055980e-06 -2.6003472e-06 +3661 7.33 -1.0004107e-06 -2.5869337e-06 +3662 7.332 -9.9525019e-07 -2.5735893e-06 +3663 7.334 -9.9011629e-07 -2.5603138e-06 +3664 7.336 -9.8500889e-07 -2.5471068e-06 +3665 7.338 -9.7992782e-07 -2.5339679e-06 +3666 7.34 -9.7487297e-07 -2.5208968e-06 +3667 7.342 -9.6984419e-07 -2.5078932e-06 +3668 7.344 -9.6484135e-07 -2.4949566e-06 +3669 7.346 -9.5986432e-07 -2.4820867e-06 +3670 7.348 -9.5491296e-07 -2.4692832e-06 +3671 7.35 -9.4998714e-07 -2.4565457e-06 +3672 7.352 -9.4508673e-07 -2.4438740e-06 +3673 7.354 -9.4021160e-07 -2.4312676e-06 +3674 7.356 -9.3536162e-07 -2.4187263e-06 +3675 7.358 -9.3053665e-07 -2.4062496e-06 +3676 7.36 -9.2573658e-07 -2.3938373e-06 +3677 7.362 -9.2096126e-07 -2.3814891e-06 +3678 7.364 -9.1621058e-07 -2.3692045e-06 +3679 7.366 -9.1148440e-07 -2.3569833e-06 +3680 7.368 -9.0678260e-07 -2.3448251e-06 +3681 7.37 -9.0210506e-07 -2.3327297e-06 +3682 7.372 -8.9745164e-07 -2.3206966e-06 +3683 7.374 -8.9282223e-07 -2.3087257e-06 +3684 7.376 -8.8821670e-07 -2.2968164e-06 +3685 7.378 -8.8363493e-07 -2.2849686e-06 +3686 7.38 -8.7907678e-07 -2.2731819e-06 +3687 7.382 -8.7454216e-07 -2.2614560e-06 +3688 7.384 -8.7003092e-07 -2.2497906e-06 +3689 7.386 -8.6554295e-07 -2.2381854e-06 +3690 7.388 -8.6107814e-07 -2.2266401e-06 +3691 7.39 -8.5663635e-07 -2.2151542e-06 +3692 7.392 -8.5221748e-07 -2.2037277e-06 +3693 7.394 -8.4782140e-07 -2.1923601e-06 +3694 7.396 -8.4344800e-07 -2.1810511e-06 +3695 7.398 -8.3909716e-07 -2.1698004e-06 +3696 7.4 -8.3476876e-07 -2.1586078e-06 +3697 7.402 -8.3046269e-07 -2.1474730e-06 +3698 7.404 -8.2617883e-07 -2.1363955e-06 +3699 7.406 -8.2191707e-07 -2.1253752e-06 +3700 7.408 -8.1767729e-07 -2.1144118e-06 +3701 7.41 -8.1345939e-07 -2.1035049e-06 +3702 7.412 -8.0926324e-07 -2.0926542e-06 +3703 7.414 -8.0508873e-07 -2.0818596e-06 +3704 7.416 -8.0093576e-07 -2.0711206e-06 +3705 7.418 -7.9680421e-07 -2.0604370e-06 +3706 7.42 -7.9269398e-07 -2.0498085e-06 +3707 7.422 -7.8860494e-07 -2.0392349e-06 +3708 7.424 -7.8453700e-07 -2.0287158e-06 +3709 7.426 -7.8049004e-07 -2.0182509e-06 +3710 7.428 -7.7646396e-07 -2.0078401e-06 +3711 7.43 -7.7245865e-07 -1.9974829e-06 +3712 7.432 -7.6847399e-07 -1.9871792e-06 +3713 7.434 -7.6450989e-07 -1.9769286e-06 +3714 7.436 -7.6056624e-07 -1.9667309e-06 +3715 7.438 -7.5664294e-07 -1.9565857e-06 +3716 7.44 -7.5273987e-07 -1.9464930e-06 +3717 7.442 -7.4885693e-07 -1.9364523e-06 +3718 7.444 -7.4499402e-07 -1.9264633e-06 +3719 7.446 -7.4115104e-07 -1.9165259e-06 +3720 7.448 -7.3732788e-07 -1.9066398e-06 +3721 7.45 -7.3352445e-07 -1.8968047e-06 +3722 7.452 -7.2974063e-07 -1.8870203e-06 +3723 7.454 -7.2597633e-07 -1.8772863e-06 +3724 7.456 -7.2223145e-07 -1.8676026e-06 +3725 7.458 -7.1850589e-07 -1.8579688e-06 +3726 7.46 -7.1479955e-07 -1.8483848e-06 +3727 7.462 -7.1111232e-07 -1.8388501e-06 +3728 7.464 -7.0744411e-07 -1.8293647e-06 +3729 7.466 -7.0379483e-07 -1.8199281e-06 +3730 7.468 -7.0016437e-07 -1.8105403e-06 +3731 7.47 -6.9655263e-07 -1.8012009e-06 +3732 7.472 -6.9295953e-07 -1.7919096e-06 +3733 7.474 -6.8938496e-07 -1.7826663e-06 +3734 7.476 -6.8582883e-07 -1.7734706e-06 +3735 7.478 -6.8229105e-07 -1.7643224e-06 +3736 7.48 -6.7877151e-07 -1.7552214e-06 +3737 7.482 -6.7527013e-07 -1.7461673e-06 +3738 7.484 -6.7178681e-07 -1.7371600e-06 +3739 7.486 -6.6832146e-07 -1.7281991e-06 +3740 7.488 -6.6487399e-07 -1.7192844e-06 +3741 7.49 -6.6144429e-07 -1.7104157e-06 +3742 7.492 -6.5803229e-07 -1.7015927e-06 +3743 7.494 -6.5463789e-07 -1.6928153e-06 +3744 7.496 -6.5126100e-07 -1.6840832e-06 +3745 7.498 -6.4790153e-07 -1.6753960e-06 +3746 7.5 -6.4455939e-07 -1.6667537e-06 +3747 7.502 -6.4123448e-07 -1.6581560e-06 +3748 7.504 -6.3792673e-07 -1.6496026e-06 +3749 7.506 -6.3463604e-07 -1.6410934e-06 +3750 7.508 -6.3136233e-07 -1.6326280e-06 +3751 7.51 -6.2810550e-07 -1.6242063e-06 +3752 7.512 -6.2486548e-07 -1.6158281e-06 +3753 7.514 -6.2164216e-07 -1.6074930e-06 +3754 7.516 -6.1843548e-07 -1.5992010e-06 +3755 7.518 -6.1524533e-07 -1.5909517e-06 +3756 7.52 -6.1207164e-07 -1.5827450e-06 +3757 7.522 -6.0891432e-07 -1.5745806e-06 +3758 7.524 -6.0577329e-07 -1.5664584e-06 +3759 7.526 -6.0264846e-07 -1.5583780e-06 +3760 7.528 -5.9953975e-07 -1.5503393e-06 +3761 7.53 -5.9644707e-07 -1.5423421e-06 +3762 7.532 -5.9337035e-07 -1.5343861e-06 +3763 7.534 -5.9030950e-07 -1.5264712e-06 +3764 7.536 -5.8726444e-07 -1.5185971e-06 +3765 7.538 -5.8423509e-07 -1.5107636e-06 +3766 7.54 -5.8122136e-07 -1.5029706e-06 +3767 7.542 -5.7822318e-07 -1.4952177e-06 +3768 7.544 -5.7524046e-07 -1.4875048e-06 +3769 7.546 -5.7227313e-07 -1.4798317e-06 +3770 7.548 -5.6932111e-07 -1.4721982e-06 +3771 7.55 -5.6638431e-07 -1.4646040e-06 +3772 7.552 -5.6346267e-07 -1.4570491e-06 +3773 7.554 -5.6055609e-07 -1.4495331e-06 +3774 7.556 -5.5766451e-07 -1.4420559e-06 +3775 7.558 -5.5478784e-07 -1.4346172e-06 +3776 7.56 -5.5192601e-07 -1.4272169e-06 +3777 7.562 -5.4907895e-07 -1.4198548e-06 +3778 7.564 -5.4624657e-07 -1.4125307e-06 +3779 7.566 -5.4342880e-07 -1.4052443e-06 +3780 7.568 -5.4062557e-07 -1.3979955e-06 +3781 7.57 -5.3783679e-07 -1.3907842e-06 +3782 7.572 -5.3506241e-07 -1.3836100e-06 +3783 7.574 -5.3230233e-07 -1.3764728e-06 +3784 7.576 -5.2955649e-07 -1.3693725e-06 +3785 7.578 -5.2682482e-07 -1.3623087e-06 +3786 7.58 -5.2410723e-07 -1.3552814e-06 +3787 7.582 -5.2140367e-07 -1.3482904e-06 +3788 7.584 -5.1871405e-07 -1.3413354e-06 +3789 7.586 -5.1603830e-07 -1.3344163e-06 +3790 7.588 -5.1337636e-07 -1.3275329e-06 +3791 7.59 -5.1072814e-07 -1.3206850e-06 +3792 7.592 -5.0809359e-07 -1.3138724e-06 +3793 7.594 -5.0547263e-07 -1.3070950e-06 +3794 7.596 -5.0286519e-07 -1.3003525e-06 +3795 7.598 -5.0027120e-07 -1.2936448e-06 +3796 7.6 -4.9769059e-07 -1.2869717e-06 +3797 7.602 -4.9512329e-07 -1.2803330e-06 +3798 7.604 -4.9256923e-07 -1.2737286e-06 +3799 7.606 -4.9002835e-07 -1.2671582e-06 +3800 7.608 -4.8750058e-07 -1.2606217e-06 +3801 7.61 -4.8498584e-07 -1.2541190e-06 +3802 7.612 -4.8248408e-07 -1.2476497e-06 +3803 7.614 -4.7999522e-07 -1.2412139e-06 +3804 7.616 -4.7751920e-07 -1.2348113e-06 +3805 7.618 -4.7505595e-07 -1.2284416e-06 +3806 7.62 -4.7260541e-07 -1.2221049e-06 +3807 7.622 -4.7016751e-07 -1.2158008e-06 +3808 7.624 -4.6774219e-07 -1.2095293e-06 +3809 7.626 -4.6532937e-07 -1.2032901e-06 +3810 7.628 -4.6292901e-07 -1.1970830e-06 +3811 7.63 -4.6054102e-07 -1.1909080e-06 +3812 7.632 -4.5816535e-07 -1.1847649e-06 +3813 7.634 -4.5580194e-07 -1.1786534e-06 +3814 7.636 -4.5345072e-07 -1.1725735e-06 +3815 7.638 -4.5111163e-07 -1.1665249e-06 +3816 7.64 -4.4878460e-07 -1.1605075e-06 +3817 7.642 -4.4646957e-07 -1.1545212e-06 +3818 7.644 -4.4416649e-07 -1.1485658e-06 +3819 7.646 -4.4187529e-07 -1.1426410e-06 +3820 7.648 -4.3959591e-07 -1.1367468e-06 +3821 7.65 -4.3732828e-07 -1.1308831e-06 +3822 7.652 -4.3507236e-07 -1.1250496e-06 +3823 7.654 -4.3282807e-07 -1.1192461e-06 +3824 7.656 -4.3059535e-07 -1.1134726e-06 +3825 7.658 -4.2837415e-07 -1.1077289e-06 +3826 7.66 -4.2616442e-07 -1.1020148e-06 +3827 7.662 -4.2396608e-07 -1.0963302e-06 +3828 7.664 -4.2177908e-07 -1.0906750e-06 +3829 7.666 -4.1960336e-07 -1.0850488e-06 +3830 7.668 -4.1743886e-07 -1.0794518e-06 +3831 7.67 -4.1528553e-07 -1.0738835e-06 +3832 7.672 -4.1314331e-07 -1.0683440e-06 +3833 7.674 -4.1101214e-07 -1.0628331e-06 +3834 7.676 -4.0889196e-07 -1.0573506e-06 +3835 7.678 -4.0678271e-07 -1.0518964e-06 +3836 7.68 -4.0468435e-07 -1.0464703e-06 +3837 7.682 -4.0259681e-07 -1.0410722e-06 +3838 7.684 -4.0052004e-07 -1.0357020e-06 +3839 7.686 -3.9845399e-07 -1.0303595e-06 +3840 7.688 -3.9639859e-07 -1.0250445e-06 +3841 7.69 -3.9435379e-07 -1.0197569e-06 +3842 7.692 -3.9231954e-07 -1.0144966e-06 +3843 7.694 -3.9029579e-07 -1.0092635e-06 +3844 7.696 -3.8828247e-07 -1.0040573e-06 +3845 7.698 -3.8627954e-07 -9.9887798e-07 +3846 7.7 -3.8428694e-07 -9.9372539e-07 +3847 7.702 -3.8230462e-07 -9.8859938e-07 +3848 7.704 -3.8033253e-07 -9.8349981e-07 +3849 7.706 -3.7837060e-07 -9.7842654e-07 +3850 7.708 -3.7641880e-07 -9.7337944e-07 +3851 7.71 -3.7447707e-07 -9.6835838e-07 +3852 7.712 -3.7254535e-07 -9.6336322e-07 +3853 7.714 -3.7062360e-07 -9.5839383e-07 +3854 7.716 -3.6871176e-07 -9.5345007e-07 +3855 7.718 -3.6680978e-07 -9.4853181e-07 +3856 7.72 -3.6491761e-07 -9.4363892e-07 +3857 7.722 -3.6303521e-07 -9.3877127e-07 +3858 7.724 -3.6116251e-07 -9.3392873e-07 +3859 7.726 -3.5929948e-07 -9.2911117e-07 +3860 7.728 -3.5744605e-07 -9.2431846e-07 +3861 7.73 -3.5560219e-07 -9.1955048e-07 +3862 7.732 -3.5376783e-07 -9.1480708e-07 +3863 7.734 -3.5194294e-07 -9.1008816e-07 +3864 7.736 -3.5012746e-07 -9.0539358e-07 +3865 7.738 -3.4832135e-07 -9.0072321e-07 +3866 7.74 -3.4652456e-07 -8.9607694e-07 +3867 7.742 -3.4473703e-07 -8.9145463e-07 +3868 7.744 -3.4295872e-07 -8.8685617e-07 +3869 7.746 -3.4118959e-07 -8.8228142e-07 +3870 7.748 -3.3942958e-07 -8.7773028e-07 +3871 7.75 -3.3767865e-07 -8.7320261e-07 +3872 7.752 -3.3593675e-07 -8.6869829e-07 +3873 7.754 -3.3420384e-07 -8.6421721e-07 +3874 7.756 -3.3247987e-07 -8.5975925e-07 +3875 7.758 -3.3076479e-07 -8.5532428e-07 +3876 7.76 -3.2905856e-07 -8.5091219e-07 +3877 7.762 -3.2736113e-07 -8.4652286e-07 +3878 7.764 -3.2567245e-07 -8.4215617e-07 +3879 7.766 -3.2399249e-07 -8.3781200e-07 +3880 7.768 -3.2232119e-07 -8.3349025e-07 +3881 7.77 -3.2065851e-07 -8.2919078e-07 +3882 7.772 -3.1900441e-07 -8.2491350e-07 +3883 7.774 -3.1735884e-07 -8.2065828e-07 +3884 7.776 -3.1572176e-07 -8.1642501e-07 +3885 7.778 -3.1409313e-07 -8.1221357e-07 +3886 7.78 -3.1247289e-07 -8.0802386e-07 +3887 7.782 -3.1086102e-07 -8.0385576e-07 +3888 7.784 -3.0925746e-07 -7.9970916e-07 +3889 7.786 -3.0766217e-07 -7.9558395e-07 +3890 7.788 -3.0607511e-07 -7.9148003e-07 +3891 7.79 -3.0449623e-07 -7.8739727e-07 +3892 7.792 -3.0292550e-07 -7.8333557e-07 +3893 7.794 -3.0136288e-07 -7.7929482e-07 +3894 7.796 -2.9980831e-07 -7.7527491e-07 +3895 7.798 -2.9826176e-07 -7.7127575e-07 +3896 7.8 -2.9672319e-07 -7.6729721e-07 +3897 7.802 -2.9519256e-07 -7.6333919e-07 +3898 7.804 -2.9366982e-07 -7.5940159e-07 +3899 7.806 -2.9215494e-07 -7.5548430e-07 +3900 7.808 -2.9064787e-07 -7.5158722e-07 +3901 7.81 -2.8914858e-07 -7.4771024e-07 +3902 7.812 -2.8765702e-07 -7.4385326e-07 +3903 7.814 -2.8617315e-07 -7.4001618e-07 +3904 7.816 -2.8469694e-07 -7.3619889e-07 +3905 7.818 -2.8322834e-07 -7.3240129e-07 +3906 7.82 -2.8176732e-07 -7.2862328e-07 +3907 7.822 -2.8031384e-07 -7.2486476e-07 +3908 7.824 -2.7886785e-07 -7.2112562e-07 +3909 7.826 -2.7742932e-07 -7.1740577e-07 +3910 7.828 -2.7599821e-07 -7.1370512e-07 +3911 7.83 -2.7457449e-07 -7.1002355e-07 +3912 7.832 -2.7315811e-07 -7.0636097e-07 +3913 7.834 -2.7174903e-07 -7.0271728e-07 +3914 7.836 -2.7034722e-07 -6.9909239e-07 +3915 7.838 -2.6895265e-07 -6.9548620e-07 +3916 7.84 -2.6756527e-07 -6.9189861e-07 +3917 7.842 -2.6618504e-07 -6.8832953e-07 +3918 7.844 -2.6481194e-07 -6.8477885e-07 +3919 7.846 -2.6344591e-07 -6.8124650e-07 +3920 7.848 -2.6208694e-07 -6.7773236e-07 +3921 7.85 -2.6073497e-07 -6.7423635e-07 +3922 7.852 -2.5938998e-07 -6.7075838e-07 +3923 7.854 -2.5805193e-07 -6.6729834e-07 +3924 7.856 -2.5672078e-07 -6.6385616e-07 +3925 7.858 -2.5539649e-07 -6.6043173e-07 +3926 7.86 -2.5407904e-07 -6.5702496e-07 +3927 7.862 -2.5276838e-07 -6.5363577e-07 +3928 7.864 -2.5146448e-07 -6.5026406e-07 +3929 7.866 -2.5016731e-07 -6.4690974e-07 +3930 7.868 -2.4887683e-07 -6.4357272e-07 +3931 7.87 -2.4759301e-07 -6.4025292e-07 +3932 7.872 -2.4631581e-07 -6.3695025e-07 +3933 7.874 -2.4504520e-07 -6.3366461e-07 +3934 7.876 -2.4378114e-07 -6.3039591e-07 +3935 7.878 -2.4252360e-07 -6.2714408e-07 +3936 7.88 -2.4127255e-07 -6.2390903e-07 +3937 7.882 -2.4002796e-07 -6.2069066e-07 +3938 7.884 -2.3878978e-07 -6.1748889e-07 +3939 7.886 -2.3755799e-07 -6.1430364e-07 +3940 7.888 -2.3633255e-07 -6.1113482e-07 +3941 7.89 -2.3511344e-07 -6.0798234e-07 +3942 7.892 -2.3390061e-07 -6.0484613e-07 +3943 7.894 -2.3269404e-07 -6.0172609e-07 +3944 7.896 -2.3149370e-07 -5.9862215e-07 +3945 7.898 -2.3029954e-07 -5.9553422e-07 +3946 7.9 -2.2911155e-07 -5.9246222e-07 +3947 7.902 -2.2792968e-07 -5.8940607e-07 +3948 7.904 -2.2675392e-07 -5.8636568e-07 +3949 7.906 -2.2558421e-07 -5.8334097e-07 +3950 7.908 -2.2442054e-07 -5.8033186e-07 +3951 7.91 -2.2326287e-07 -5.7733828e-07 +3952 7.912 -2.2211118e-07 -5.7436014e-07 +3953 7.914 -2.2096542e-07 -5.7139736e-07 +3954 7.916 -2.1982558e-07 -5.6844987e-07 +3955 7.918 -2.1869161e-07 -5.6551758e-07 +3956 7.92 -2.1756350e-07 -5.6260041e-07 +3957 7.922 -2.1644120e-07 -5.5969830e-07 +3958 7.924 -2.1532469e-07 -5.5681115e-07 +3959 7.926 -2.1421395e-07 -5.5393889e-07 +3960 7.928 -2.1310893e-07 -5.5108146e-07 +3961 7.93 -2.1200961e-07 -5.4823876e-07 +3962 7.932 -2.1091596e-07 -5.4541072e-07 +3963 7.934 -2.0982796e-07 -5.4259728e-07 +3964 7.936 -2.0874557e-07 -5.3979834e-07 +3965 7.938 -2.0766876e-07 -5.3701385e-07 +3966 7.94 -2.0659750e-07 -5.3424372e-07 +3967 7.942 -2.0553177e-07 -5.3148787e-07 +3968 7.944 -2.0447154e-07 -5.2874625e-07 +3969 7.946 -2.0341678e-07 -5.2601876e-07 +3970 7.948 -2.0236746e-07 -5.2330534e-07 +3971 7.95 -2.0132355e-07 -5.2060593e-07 +3972 7.952 -2.0028502e-07 -5.1792043e-07 +3973 7.954 -1.9925186e-07 -5.1524879e-07 +3974 7.956 -1.9822402e-07 -5.1259093e-07 +3975 7.958 -1.9720148e-07 -5.0994678e-07 +3976 7.96 -1.9618422e-07 -5.0731627e-07 +3977 7.962 -1.9517221e-07 -5.0469933e-07 +3978 7.964 -1.9416542e-07 -5.0209588e-07 +3979 7.966 -1.9316382e-07 -4.9950587e-07 +3980 7.968 -1.9216738e-07 -4.9692922e-07 +3981 7.97 -1.9117609e-07 -4.9436586e-07 +3982 7.972 -1.9018991e-07 -4.9181572e-07 +3983 7.974 -1.8920882e-07 -4.8927873e-07 +3984 7.976 -1.8823279e-07 -4.8675484e-07 +3985 7.978 -1.8726179e-07 -4.8424396e-07 +3986 7.98 -1.8629580e-07 -4.8174603e-07 +3987 7.982 -1.8533480e-07 -4.7926099e-07 +3988 7.984 -1.8437875e-07 -4.7678877e-07 +3989 7.986 -1.8342763e-07 -4.7432930e-07 +3990 7.988 -1.8248142e-07 -4.7188252e-07 +3991 7.99 -1.8154010e-07 -4.6944836e-07 +3992 7.992 -1.8060362e-07 -4.6702675e-07 +3993 7.994 -1.7967198e-07 -4.6461764e-07 +3994 7.996 -1.7874514e-07 -4.6222095e-07 +3995 7.998 -1.7782309e-07 -4.5983663e-07 +3996 8.0 -1.7690579e-07 -4.5746460e-07 +3997 8.002 -1.7599322e-07 -4.5510482e-07 +3998 8.004 -1.7508536e-07 -4.5275720e-07 +3999 8.006 -1.7418218e-07 -4.5042169e-07 +4000 8.008 -1.7328367e-07 -4.4809823e-07 +4001 8.01 -1.7238978e-07 -4.4578676e-07 +4002 8.012 -1.7150051e-07 -4.4348721e-07 +4003 8.014 -1.7061583e-07 -4.4119952e-07 +4004 8.016 -1.6973571e-07 -4.3892364e-07 +4005 8.018 -1.6886012e-07 -4.3665949e-07 +4006 8.02 -1.6798906e-07 -4.3440702e-07 +4007 8.022 -1.6712249e-07 -4.3216617e-07 +4008 8.024 -1.6626039e-07 -4.2993688e-07 +4009 8.026 -1.6540273e-07 -4.2771909e-07 +4010 8.028 -1.6454950e-07 -4.2551274e-07 +4011 8.03 -1.6370068e-07 -4.2331777e-07 +4012 8.032 -1.6285623e-07 -4.2113413e-07 +4013 8.034 -1.6201613e-07 -4.1896174e-07 +4014 8.036 -1.6118037e-07 -4.1680057e-07 +4015 8.038 -1.6034892e-07 -4.1465054e-07 +4016 8.04 -1.5952176e-07 -4.1251160e-07 +4017 8.042 -1.5869887e-07 -4.1038370e-07 +4018 8.044 -1.5788022e-07 -4.0826677e-07 +4019 8.046 -1.5706579e-07 -4.0616076e-07 +4020 8.048 -1.5625557e-07 -4.0406561e-07 +4021 8.05 -1.5544952e-07 -4.0198128e-07 +4022 8.052 -1.5464764e-07 -3.9990769e-07 +4023 8.054 -1.5384989e-07 -3.9784480e-07 +4024 8.056 -1.5305625e-07 -3.9579256e-07 +4025 8.058 -1.5226671e-07 -3.9375089e-07 +4026 8.06 -1.5148124e-07 -3.9171976e-07 +4027 8.062 -1.5069982e-07 -3.8969911e-07 +4028 8.064 -1.4992244e-07 -3.8768888e-07 +4029 8.066 -1.4914906e-07 -3.8568902e-07 +4030 8.068 -1.4837967e-07 -3.8369948e-07 +4031 8.07 -1.4761426e-07 -3.8172020e-07 +4032 8.072 -1.4685279e-07 -3.7975113e-07 +4033 8.074 -1.4609524e-07 -3.7779221e-07 +4034 8.076 -1.4534161e-07 -3.7584340e-07 +4035 8.078 -1.4459186e-07 -3.7390465e-07 +4036 8.08 -1.4384598e-07 -3.7197589e-07 +4037 8.082 -1.4310395e-07 -3.7005709e-07 +4038 8.084 -1.4236575e-07 -3.6814818e-07 +4039 8.086 -1.4163135e-07 -3.6624912e-07 +4040 8.088 -1.4090075e-07 -3.6435985e-07 +4041 8.09 -1.4017391e-07 -3.6248033e-07 +4042 8.092 -1.3945082e-07 -3.6061051e-07 +4043 8.094 -1.3873146e-07 -3.5875033e-07 +4044 8.096 -1.3801581e-07 -3.5689974e-07 +4045 8.098 -1.3730385e-07 -3.5505870e-07 +4046 8.1 -1.3659557e-07 -3.5322716e-07 +4047 8.102 -1.3589094e-07 -3.5140507e-07 +4048 8.104 -1.3518994e-07 -3.4959238e-07 +4049 8.106 -1.3449256e-07 -3.4778903e-07 +4050 8.108 -1.3379878e-07 -3.4599499e-07 +4051 8.11 -1.3310858e-07 -3.4421020e-07 +4052 8.112 -1.3242193e-07 -3.4243462e-07 +4053 8.114 -1.3173883e-07 -3.4066820e-07 +4054 8.116 -1.3105926e-07 -3.3891089e-07 +4055 8.118 -1.3038318e-07 -3.3716265e-07 +4056 8.12 -1.2971060e-07 -3.3542342e-07 +4057 8.122 -1.2904148e-07 -3.3369316e-07 +4058 8.124 -1.2837582e-07 -3.3197183e-07 +4059 8.126 -1.2771359e-07 -3.3025938e-07 +4060 8.128 -1.2705478e-07 -3.2855577e-07 +4061 8.13 -1.2639936e-07 -3.2686094e-07 +4062 8.132 -1.2574733e-07 -3.2517485e-07 +4063 8.134 -1.2509866e-07 -3.2349746e-07 +4064 8.136 -1.2445333e-07 -3.2182873e-07 +4065 8.138 -1.2381134e-07 -3.2016860e-07 +4066 8.14 -1.2317265e-07 -3.1851703e-07 +4067 8.142 -1.2253726e-07 -3.1687399e-07 +4068 8.144 -1.2190515e-07 -3.1523942e-07 +4069 8.146 -1.2127630e-07 -3.1361328e-07 +4070 8.148 -1.2065069e-07 -3.1199553e-07 +4071 8.15 -1.2002831e-07 -3.1038612e-07 +4072 8.152 -1.1940914e-07 -3.0878502e-07 +4073 8.154 -1.1879317e-07 -3.0719217e-07 +4074 8.156 -1.1818037e-07 -3.0560755e-07 +4075 8.158 -1.1757073e-07 -3.0403109e-07 +4076 8.16 -1.1696424e-07 -3.0246277e-07 +4077 8.162 -1.1636087e-07 -3.0090254e-07 +4078 8.164 -1.1576062e-07 -2.9935035e-07 +4079 8.166 -1.1516347e-07 -2.9780618e-07 +4080 8.168 -1.1456939e-07 -2.9626997e-07 +4081 8.17 -1.1397838e-07 -2.9474168e-07 +4082 8.172 -1.1339042e-07 -2.9322128e-07 +4083 8.174 -1.1280549e-07 -2.9170872e-07 +4084 8.176 -1.1222358e-07 -2.9020396e-07 +4085 8.178 -1.1164467e-07 -2.8870696e-07 +4086 8.18 -1.1106875e-07 -2.8721769e-07 +4087 8.182 -1.1049579e-07 -2.8573609e-07 +4088 8.184 -1.0992580e-07 -2.8426215e-07 +4089 8.186 -1.0935874e-07 -2.8279580e-07 +4090 8.188 -1.0879461e-07 -2.8133702e-07 +4091 8.19 -1.0823339e-07 -2.7988576e-07 +4092 8.192 -1.0767506e-07 -2.7844199e-07 +4093 8.194 -1.0711961e-07 -2.7700567e-07 +4094 8.196 -1.0656703e-07 -2.7557675e-07 +4095 8.198 -1.0601730e-07 -2.7415521e-07 +4096 8.2 -1.0547041e-07 -2.7274100e-07 +4097 8.202 -1.0492633e-07 -2.7133408e-07 +4098 8.204 -1.0438507e-07 -2.6993442e-07 +4099 8.206 -1.0384659e-07 -2.6854198e-07 +4100 8.208 -1.0331089e-07 -2.6715673e-07 +4101 8.21 -1.0277796e-07 -2.6577862e-07 +4102 8.212 -1.0224777e-07 -2.6440762e-07 +4103 8.214 -1.0172032e-07 -2.6304369e-07 +4104 8.216 -1.0119560e-07 -2.6168680e-07 +4105 8.218 -1.0067357e-07 -2.6033690e-07 +4106 8.22 -1.0015424e-07 -2.5899397e-07 +4107 8.222 -9.9637592e-08 -2.5765797e-07 +4108 8.224 -9.9123606e-08 -2.5632886e-07 +4109 8.226 -9.8612272e-08 -2.5500660e-07 +4110 8.228 -9.8103575e-08 -2.5369116e-07 +4111 8.23 -9.7597503e-08 -2.5238252e-07 +4112 8.232 -9.7094041e-08 -2.5108062e-07 +4113 8.234 -9.6593176e-08 -2.4978543e-07 +4114 8.236 -9.6094895e-08 -2.4849693e-07 +4115 8.238 -9.5599184e-08 -2.4721508e-07 +4116 8.24 -9.5106030e-08 -2.4593983e-07 +4117 8.242 -9.4615420e-08 -2.4467117e-07 +4118 8.244 -9.4127341e-08 -2.4340905e-07 +4119 8.246 -9.3641780e-08 -2.4215344e-07 +4120 8.248 -9.3158723e-08 -2.4090430e-07 +4121 8.25 -9.2678158e-08 -2.3966161e-07 +4122 8.252 -9.2200072e-08 -2.3842533e-07 +4123 8.254 -9.1724452e-08 -2.3719543e-07 +4124 8.256 -9.1251286e-08 -2.3597187e-07 +4125 8.258 -9.0780561e-08 -2.3475463e-07 +4126 8.26 -9.0312263e-08 -2.3354366e-07 +4127 8.262 -8.9846382e-08 -2.3233894e-07 +4128 8.264 -8.9382904e-08 -2.3114043e-07 +4129 8.266 -8.8921816e-08 -2.2994811e-07 +4130 8.268 -8.8463107e-08 -2.2876193e-07 +4131 8.27 -8.8006764e-08 -2.2758188e-07 +4132 8.272 -8.7552776e-08 -2.2640791e-07 +4133 8.274 -8.7101129e-08 -2.2524000e-07 +4134 8.276 -8.6651812e-08 -2.2407811e-07 +4135 8.278 -8.6204812e-08 -2.2292222e-07 +4136 8.28 -8.5760119e-08 -2.2177228e-07 +4137 8.282 -8.5317719e-08 -2.2062828e-07 +4138 8.284 -8.4877602e-08 -2.1949019e-07 +4139 8.286 -8.4439754e-08 -2.1835796e-07 +4140 8.288 -8.4004166e-08 -2.1723157e-07 +4141 8.29 -8.3570824e-08 -2.1611099e-07 +4142 8.292 -8.3139718e-08 -2.1499620e-07 +4143 8.294 -8.2710836e-08 -2.1388715e-07 +4144 8.296 -8.2284166e-08 -2.1278383e-07 +4145 8.298 -8.1859697e-08 -2.1168619e-07 +4146 8.3 -8.1437417e-08 -2.1059422e-07 +4147 8.302 -8.1017316e-08 -2.0950788e-07 +4148 8.304 -8.0599382e-08 -2.0842715e-07 +4149 8.306 -8.0183604e-08 -2.0735199e-07 +4150 8.308 -7.9769970e-08 -2.0628237e-07 +4151 8.31 -7.9358470e-08 -2.0521828e-07 +4152 8.312 -7.8949093e-08 -2.0415967e-07 +4153 8.314 -7.8541828e-08 -2.0310652e-07 +4154 8.316 -7.8136664e-08 -2.0205881e-07 +4155 8.318 -7.7733589e-08 -2.0101650e-07 +4156 8.32 -7.7332594e-08 -1.9997956e-07 +4157 8.322 -7.6933667e-08 -1.9894798e-07 +4158 8.324 -7.6536799e-08 -1.9792172e-07 +4159 8.326 -7.6141977e-08 -1.9690075e-07 +4160 8.328 -7.5749192e-08 -1.9588504e-07 +4161 8.33 -7.5358433e-08 -1.9487458e-07 +4162 8.332 -7.4969690e-08 -1.9386933e-07 +4163 8.334 -7.4582953e-08 -1.9286926e-07 +4164 8.336 -7.4198210e-08 -1.9187436e-07 +4165 8.338 -7.3815452e-08 -1.9088458e-07 +4166 8.34 -7.3434668e-08 -1.8989991e-07 +4167 8.342 -7.3055849e-08 -1.8892032e-07 +4168 8.344 -7.2678983e-08 -1.8794579e-07 +4169 8.346 -7.2304062e-08 -1.8697628e-07 +4170 8.348 -7.1931075e-08 -1.8601177e-07 +4171 8.35 -7.1560012e-08 -1.8505224e-07 +4172 8.352 -7.1190863e-08 -1.8409765e-07 +4173 8.354 -7.0823618e-08 -1.8314799e-07 +4174 8.356 -7.0458268e-08 -1.8220323e-07 +4175 8.358 -7.0094802e-08 -1.8126334e-07 +4176 8.36 -6.9733211e-08 -1.8032831e-07 +4177 8.362 -6.9373485e-08 -1.7939809e-07 +4178 8.364 -6.9015615e-08 -1.7847267e-07 +4179 8.366 -6.8659591e-08 -1.7755203e-07 +4180 8.368 -6.8305404e-08 -1.7663613e-07 +4181 8.37 -6.7953044e-08 -1.7572496e-07 +4182 8.372 -6.7602501e-08 -1.7481850e-07 +4183 8.374 -6.7253767e-08 -1.7391670e-07 +4184 8.376 -6.6906831e-08 -1.7301956e-07 +4185 8.378 -6.6561685e-08 -1.7212704e-07 +4186 8.38 -6.6218320e-08 -1.7123913e-07 +4187 8.382 -6.5876726e-08 -1.7035580e-07 +4188 8.384 -6.5536894e-08 -1.6947703e-07 +4189 8.386 -6.5198815e-08 -1.6860279e-07 +4190 8.388 -6.4862480e-08 -1.6773306e-07 +4191 8.39 -6.4527879e-08 -1.6686782e-07 +4192 8.392 -6.4195005e-08 -1.6600703e-07 +4193 8.394 -6.3863848e-08 -1.6515069e-07 +4194 8.396 -6.3534400e-08 -1.6429877e-07 +4195 8.398 -6.3206650e-08 -1.6345124e-07 +4196 8.4 -6.2880592e-08 -1.6260808e-07 +4197 8.402 -6.2556215e-08 -1.6176928e-07 +4198 8.404 -6.2233512e-08 -1.6093479e-07 +4199 8.406 -6.1912473e-08 -1.6010462e-07 +4200 8.408 -6.1593090e-08 -1.5927872e-07 +4201 8.41 -6.1275355e-08 -1.5845709e-07 +4202 8.412 -6.0959259e-08 -1.5763970e-07 +4203 8.414 -6.0644794e-08 -1.5682652e-07 +4204 8.416 -6.0331950e-08 -1.5601753e-07 +4205 8.418 -6.0020721e-08 -1.5521272e-07 +4206 8.42 -5.9711097e-08 -1.5441206e-07 +4207 8.422 -5.9403070e-08 -1.5361553e-07 +4208 8.424 -5.9096632e-08 -1.5282311e-07 +4209 8.426 -5.8791775e-08 -1.5203478e-07 +4210 8.428 -5.8488490e-08 -1.5125051e-07 +4211 8.43 -5.8186770e-08 -1.5047029e-07 +4212 8.432 -5.7886606e-08 -1.4969409e-07 +4213 8.434 -5.7587991e-08 -1.4892190e-07 +4214 8.436 -5.7290916e-08 -1.4815369e-07 +4215 8.438 -5.6995373e-08 -1.4738945e-07 +4216 8.44 -5.6701355e-08 -1.4662914e-07 +4217 8.442 -5.6408854e-08 -1.4587276e-07 +4218 8.444 -5.6117862e-08 -1.4512028e-07 +4219 8.446 -5.5828371e-08 -1.4437168e-07 +4220 8.448 -5.5540373e-08 -1.4362694e-07 +4221 8.45 -5.5253860e-08 -1.4288605e-07 +4222 8.452 -5.4968826e-08 -1.4214898e-07 +4223 8.454 -5.4685262e-08 -1.4141570e-07 +4224 8.456 -5.4403160e-08 -1.4068621e-07 +4225 8.458 -5.4122514e-08 -1.3996049e-07 +4226 8.46 -5.3843316e-08 -1.3923851e-07 +4227 8.462 -5.3565558e-08 -1.3852025e-07 +4228 8.464 -5.3289233e-08 -1.3780569e-07 +4229 8.466 -5.3014333e-08 -1.3709483e-07 +4230 8.468 -5.2740851e-08 -1.3638763e-07 +4231 8.47 -5.2468780e-08 -1.3568407e-07 +4232 8.472 -5.2198112e-08 -1.3498415e-07 +4233 8.474 -5.1928841e-08 -1.3428784e-07 +4234 8.476 -5.1660958e-08 -1.3359512e-07 +4235 8.478 -5.1394458e-08 -1.3290597e-07 +4236 8.48 -5.1129332e-08 -1.3222038e-07 +4237 8.482 -5.0865574e-08 -1.3153832e-07 +4238 8.484 -5.0603176e-08 -1.3085979e-07 +4239 8.486 -5.0342132e-08 -1.3018475e-07 +4240 8.488 -5.0082435e-08 -1.2951319e-07 +4241 8.49 -4.9824077e-08 -1.2884510e-07 +4242 8.492 -4.9567052e-08 -1.2818046e-07 +4243 8.494 -4.9311353e-08 -1.2751924e-07 +4244 8.496 -4.9056973e-08 -1.2686143e-07 +4245 8.498 -4.8803905e-08 -1.2620702e-07 +4246 8.5 -4.8552143e-08 -1.2555599e-07 +4247 8.502 -4.8301679e-08 -1.2490831e-07 +4248 8.504 -4.8052507e-08 -1.2426397e-07 +4249 8.506 -4.7804621e-08 -1.2362296e-07 +4250 8.508 -4.7558013e-08 -1.2298525e-07 +4251 8.51 -4.7312678e-08 -1.2235083e-07 +4252 8.512 -4.7068608e-08 -1.2171969e-07 +4253 8.514 -4.6825797e-08 -1.2109180e-07 +4254 8.516 -4.6584238e-08 -1.2046715e-07 +4255 8.518 -4.6343926e-08 -1.1984572e-07 +4256 8.52 -4.6104853e-08 -1.1922750e-07 +4257 8.522 -4.5867014e-08 -1.1861246e-07 +4258 8.524 -4.5630401e-08 -1.1800060e-07 +4259 8.526 -4.5395010e-08 -1.1739190e-07 +4260 8.528 -4.5160832e-08 -1.1678633e-07 +4261 8.53 -4.4927862e-08 -1.1618389e-07 +4262 8.532 -4.4696094e-08 -1.1558456e-07 +4263 8.534 -4.4465522e-08 -1.1498832e-07 +4264 8.536 -4.4236139e-08 -1.1439515e-07 +4265 8.538 -4.4007939e-08 -1.1380505e-07 +4266 8.54 -4.3780917e-08 -1.1321798e-07 +4267 8.542 -4.3555065e-08 -1.1263395e-07 +4268 8.544 -4.3330379e-08 -1.1205293e-07 +4269 8.546 -4.3106851e-08 -1.1147490e-07 +4270 8.548 -4.2884477e-08 -1.1089986e-07 +4271 8.55 -4.2663250e-08 -1.1032779e-07 +4272 8.552 -4.2443164e-08 -1.0975866e-07 +4273 8.554 -4.2224213e-08 -1.0919247e-07 +4274 8.556 -4.2006392e-08 -1.0862920e-07 +4275 8.558 -4.1789695e-08 -1.0806884e-07 +4276 8.56 -4.1574115e-08 -1.0751137e-07 +4277 8.562 -4.1359647e-08 -1.0695677e-07 +4278 8.564 -4.1146286e-08 -1.0640503e-07 +4279 8.566 -4.0934025e-08 -1.0585614e-07 +4280 8.568 -4.0722860e-08 -1.0531009e-07 +4281 8.57 -4.0512783e-08 -1.0476684e-07 +4282 8.572 -4.0303790e-08 -1.0422640e-07 +4283 8.574 -4.0095876e-08 -1.0368875e-07 +4284 8.576 -3.9889033e-08 -1.0315387e-07 +4285 8.578 -3.9683258e-08 -1.0262176e-07 +4286 8.58 -3.9478545e-08 -1.0209238e-07 +4287 8.582 -3.9274887e-08 -1.0156574e-07 +4288 8.584 -3.9072280e-08 -1.0104181e-07 +4289 8.586 -3.8870718e-08 -1.0052059e-07 +4290 8.588 -3.8670196e-08 -1.0000205e-07 +4291 8.59 -3.8470708e-08 -9.9486191e-08 +4292 8.592 -3.8272249e-08 -9.8972991e-08 +4293 8.594 -3.8074814e-08 -9.8462438e-08 +4294 8.596 -3.7878398e-08 -9.7954520e-08 +4295 8.598 -3.7682994e-08 -9.7449221e-08 +4296 8.6 -3.7488599e-08 -9.6946529e-08 +4297 8.602 -3.7295206e-08 -9.6446430e-08 +4298 8.604 -3.7102812e-08 -9.5948910e-08 +4299 8.606 -3.6911409e-08 -9.5453958e-08 +4300 8.608 -3.6720994e-08 -9.4961558e-08 +4301 8.61 -3.6531561e-08 -9.4471698e-08 +4302 8.612 -3.6343106e-08 -9.3984365e-08 +4303 8.614 -3.6155622e-08 -9.3499546e-08 +4304 8.616 -3.5969106e-08 -9.3017228e-08 +4305 8.618 -3.5783552e-08 -9.2537398e-08 +4306 8.62 -3.5598954e-08 -9.2060043e-08 +4307 8.622 -3.5415310e-08 -9.1585150e-08 +4308 8.624 -3.5232612e-08 -9.1112708e-08 +4309 8.626 -3.5050857e-08 -9.0642702e-08 +4310 8.628 -3.4870040e-08 -9.0175121e-08 +4311 8.63 -3.4690155e-08 -8.9709951e-08 +4312 8.632 -3.4511198e-08 -8.9247181e-08 +4313 8.634 -3.4333165e-08 -8.8786799e-08 +4314 8.636 -3.4156050e-08 -8.8328791e-08 +4315 8.638 -3.3979848e-08 -8.7873146e-08 +4316 8.64 -3.3804555e-08 -8.7419851e-08 +4317 8.642 -3.3630167e-08 -8.6968895e-08 +4318 8.644 -3.3456678e-08 -8.6520264e-08 +4319 8.646 -3.3284085e-08 -8.6073948e-08 +4320 8.648 -3.3112381e-08 -8.5629935e-08 +4321 8.65 -3.2941563e-08 -8.5188211e-08 +4322 8.652 -3.2771627e-08 -8.4748766e-08 +4323 8.654 -3.2602567e-08 -8.4311588e-08 +4324 8.656 -3.2434379e-08 -8.3876666e-08 +4325 8.658 -3.2267059e-08 -8.3443986e-08 +4326 8.66 -3.2100601e-08 -8.3013539e-08 +4327 8.662 -3.1935003e-08 -8.2585312e-08 +4328 8.664 -3.1770259e-08 -8.2159294e-08 +4329 8.666 -3.1606364e-08 -8.1735474e-08 +4330 8.668 -3.1443315e-08 -8.1313840e-08 +4331 8.67 -3.1281107e-08 -8.0894381e-08 +4332 8.672 -3.1119736e-08 -8.0477085e-08 +4333 8.674 -3.0959198e-08 -8.0061943e-08 +4334 8.676 -3.0799487e-08 -7.9648941e-08 +4335 8.678 -3.0640600e-08 -7.9238070e-08 +4336 8.68 -3.0482533e-08 -7.8829319e-08 +4337 8.682 -3.0325282e-08 -7.8422676e-08 +4338 8.684 -3.0168841e-08 -7.8018131e-08 +4339 8.686 -3.0013208e-08 -7.7615672e-08 +4340 8.688 -2.9858377e-08 -7.7215290e-08 +4341 8.69 -2.9704345e-08 -7.6816973e-08 +4342 8.692 -2.9551108e-08 -7.6420711e-08 +4343 8.694 -2.9398661e-08 -7.6026492e-08 +4344 8.696 -2.9247001e-08 -7.5634308e-08 +4345 8.698 -2.9096123e-08 -7.5244146e-08 +4346 8.7 -2.8946023e-08 -7.4855997e-08 +4347 8.702 -2.8796697e-08 -7.4469850e-08 +4348 8.704 -2.8648142e-08 -7.4085695e-08 +4349 8.706 -2.8500353e-08 -7.3703522e-08 +4350 8.708 -2.8353327e-08 -7.3323320e-08 +4351 8.71 -2.8207059e-08 -7.2945079e-08 +4352 8.712 -2.8061545e-08 -7.2568790e-08 +4353 8.714 -2.7916782e-08 -7.2194441e-08 +4354 8.716 -2.7772766e-08 -7.1822024e-08 +4355 8.718 -2.7629493e-08 -7.1451528e-08 +4356 8.72 -2.7486959e-08 -7.1082943e-08 +4357 8.722 -2.7345160e-08 -7.0716259e-08 +4358 8.724 -2.7204092e-08 -7.0351466e-08 +4359 8.726 -2.7063753e-08 -6.9988556e-08 +4360 8.728 -2.6924137e-08 -6.9627517e-08 +4361 8.73 -2.6785241e-08 -6.9268341e-08 +4362 8.732 -2.6647062e-08 -6.8911018e-08 +4363 8.734 -2.6509596e-08 -6.8555538e-08 +4364 8.736 -2.6372839e-08 -6.8201892e-08 +4365 8.738 -2.6236787e-08 -6.7850069e-08 +4366 8.74 -2.6101437e-08 -6.7500062e-08 +4367 8.742 -2.5966786e-08 -6.7151860e-08 +4368 8.744 -2.5832829e-08 -6.6805455e-08 +4369 8.746 -2.5699563e-08 -6.6460836e-08 +4370 8.748 -2.5566984e-08 -6.6117995e-08 +4371 8.75 -2.5435090e-08 -6.5776923e-08 +4372 8.752 -2.5303875e-08 -6.5437610e-08 +4373 8.754 -2.5173338e-08 -6.5100047e-08 +4374 8.756 -2.5043474e-08 -6.4764225e-08 +4375 8.758 -2.4914280e-08 -6.4430136e-08 +4376 8.76 -2.4785752e-08 -6.4097771e-08 +4377 8.762 -2.4657888e-08 -6.3767119e-08 +4378 8.764 -2.4530683e-08 -6.3438174e-08 +4379 8.766 -2.4404134e-08 -6.3110925e-08 +4380 8.768 -2.4278238e-08 -6.2785364e-08 +4381 8.77 -2.4152991e-08 -6.2461483e-08 +4382 8.772 -2.4028391e-08 -6.2139272e-08 +4383 8.774 -2.3904433e-08 -6.1818724e-08 +4384 8.776 -2.3781115e-08 -6.1499829e-08 +4385 8.778 -2.3658433e-08 -6.1182579e-08 +4386 8.78 -2.3536383e-08 -6.0866965e-08 +4387 8.782 -2.3414964e-08 -6.0552980e-08 +4388 8.784 -2.3294170e-08 -6.0240614e-08 +4389 8.786 -2.3174000e-08 -5.9929860e-08 +4390 8.788 -2.3054450e-08 -5.9620709e-08 +4391 8.79 -2.2935516e-08 -5.9313152e-08 +4392 8.792 -2.2817196e-08 -5.9007182e-08 +4393 8.794 -2.2699486e-08 -5.8702790e-08 +4394 8.796 -2.2582384e-08 -5.8399968e-08 +4395 8.798 -2.2465886e-08 -5.8098709e-08 +4396 8.8 -2.2349988e-08 -5.7799003e-08 +4397 8.802 -2.2234689e-08 -5.7500844e-08 +4398 8.804 -2.2119984e-08 -5.7204222e-08 +4399 8.806 -2.2005871e-08 -5.6909131e-08 +4400 8.808 -2.1892346e-08 -5.6615562e-08 +4401 8.81 -2.1779407e-08 -5.6323507e-08 +4402 8.812 -2.1667051e-08 -5.6032959e-08 +4403 8.814 -2.1555275e-08 -5.5743910e-08 +4404 8.816 -2.1444075e-08 -5.5456351e-08 +4405 8.818 -2.1333448e-08 -5.5170276e-08 +4406 8.82 -2.1223392e-08 -5.4885677e-08 +4407 8.822 -2.1113904e-08 -5.4602546e-08 +4408 8.824 -2.1004981e-08 -5.4320875e-08 +4409 8.826 -2.0896620e-08 -5.4040657e-08 +4410 8.828 -2.0788818e-08 -5.3761885e-08 +4411 8.83 -2.0681571e-08 -5.3484550e-08 +4412 8.832 -2.0574879e-08 -5.3208647e-08 +4413 8.834 -2.0468736e-08 -5.2934166e-08 +4414 8.836 -2.0363141e-08 -5.2661102e-08 +4415 8.838 -2.0258091e-08 -5.2389446e-08 +4416 8.84 -2.0153582e-08 -5.2119191e-08 +4417 8.842 -2.0049613e-08 -5.1850331e-08 +4418 8.844 -1.9946180e-08 -5.1582857e-08 +4419 8.846 -1.9843281e-08 -5.1316764e-08 +4420 8.848 -1.9740912e-08 -5.1052042e-08 +4421 8.85 -1.9639071e-08 -5.0788687e-08 +4422 8.852 -1.9537756e-08 -5.0526689e-08 +4423 8.854 -1.9436964e-08 -5.0266044e-08 +4424 8.856 -1.9336691e-08 -5.0006743e-08 +4425 8.858 -1.9236936e-08 -4.9748779e-08 +4426 8.86 -1.9137695e-08 -4.9492146e-08 +4427 8.862 -1.9038966e-08 -4.9236837e-08 +4428 8.864 -1.8940747e-08 -4.8982845e-08 +4429 8.866 -1.8843034e-08 -4.8730163e-08 +4430 8.868 -1.8745825e-08 -4.8478785e-08 +4431 8.87 -1.8649118e-08 -4.8228703e-08 +4432 8.872 -1.8552910e-08 -4.7979912e-08 +4433 8.874 -1.8457198e-08 -4.7732404e-08 +4434 8.876 -1.8361979e-08 -4.7486172e-08 +4435 8.878 -1.8267252e-08 -4.7241211e-08 +4436 8.88 -1.8173014e-08 -4.6997513e-08 +4437 8.882 -1.8079261e-08 -4.6755072e-08 +4438 8.884 -1.7985993e-08 -4.6513883e-08 +4439 8.886 -1.7893205e-08 -4.6273937e-08 +4440 8.888 -1.7800896e-08 -4.6035229e-08 +4441 8.89 -1.7709063e-08 -4.5797752e-08 +4442 8.892 -1.7617704e-08 -4.5561500e-08 +4443 8.894 -1.7526816e-08 -4.5326467e-08 +4444 8.896 -1.7436397e-08 -4.5092647e-08 +4445 8.898 -1.7346445e-08 -4.4860032e-08 +4446 8.9 -1.7256957e-08 -4.4628618e-08 +4447 8.902 -1.7167930e-08 -4.4398397e-08 +4448 8.904 -1.7079362e-08 -4.4169364e-08 +4449 8.906 -1.6991251e-08 -4.3941512e-08 +4450 8.908 -1.6903595e-08 -4.3714836e-08 +4451 8.91 -1.6816391e-08 -4.3489329e-08 +4452 8.912 -1.6729637e-08 -4.3264985e-08 +4453 8.914 -1.6643331e-08 -4.3041799e-08 +4454 8.916 -1.6557469e-08 -4.2819763e-08 +4455 8.918 -1.6472051e-08 -4.2598874e-08 +4456 8.92 -1.6387073e-08 -4.2379123e-08 +4457 8.922 -1.6302534e-08 -4.2160506e-08 +4458 8.924 -1.6218430e-08 -4.1943017e-08 +4459 8.926 -1.6134761e-08 -4.1726650e-08 +4460 8.928 -1.6051523e-08 -4.1511399e-08 +4461 8.93 -1.5968714e-08 -4.1297258e-08 +4462 8.932 -1.5886333e-08 -4.1084222e-08 +4463 8.934 -1.5804377e-08 -4.0872285e-08 +4464 8.936 -1.5722843e-08 -4.0661441e-08 +4465 8.938 -1.5641730e-08 -4.0451685e-08 +4466 8.94 -1.5561036e-08 -4.0243011e-08 +4467 8.942 -1.5480758e-08 -4.0035413e-08 +4468 8.944 -1.5400893e-08 -3.9828886e-08 +4469 8.946 -1.5321441e-08 -3.9623425e-08 +4470 8.948 -1.5242399e-08 -3.9419023e-08 +4471 8.95 -1.5163765e-08 -3.9215676e-08 +4472 8.952 -1.5085536e-08 -3.9013377e-08 +4473 8.954 -1.5007710e-08 -3.8812123e-08 +4474 8.956 -1.4930286e-08 -3.8611906e-08 +4475 8.958 -1.4853262e-08 -3.8412722e-08 +4476 8.96 -1.4776635e-08 -3.8214566e-08 +4477 8.962 -1.4700403e-08 -3.8017432e-08 +4478 8.964 -1.4624564e-08 -3.7821315e-08 +4479 8.966 -1.4549117e-08 -3.7626209e-08 +4480 8.968 -1.4474059e-08 -3.7432110e-08 +4481 8.97 -1.4399388e-08 -3.7239012e-08 +4482 8.972 -1.4325102e-08 -3.7046910e-08 +4483 8.974 -1.4251200e-08 -3.6855800e-08 +4484 8.976 -1.4177678e-08 -3.6665675e-08 +4485 8.978 -1.4104536e-08 -3.6476530e-08 +4486 8.98 -1.4031772e-08 -3.6288362e-08 +4487 8.982 -1.3959382e-08 -3.6101164e-08 +4488 8.984 -1.3887366e-08 -3.5914932e-08 +4489 8.986 -1.3815722e-08 -3.5729660e-08 +4490 8.988 -1.3744447e-08 -3.5545344e-08 +4491 8.99 -1.3673540e-08 -3.5361979e-08 +4492 8.992 -1.3602998e-08 -3.5179560e-08 +4493 8.994 -1.3532821e-08 -3.4998082e-08 +4494 8.996 -1.3463006e-08 -3.4817540e-08 +4495 8.998 -1.3393550e-08 -3.4637930e-08 +4496 9.0 -1.3324453e-08 -3.4459245e-08 +4497 9.002 -1.3255713e-08 -3.4281483e-08 +4498 9.004 -1.3187327e-08 -3.4104638e-08 +4499 9.006 -1.3119293e-08 -3.3928704e-08 +4500 9.008 -1.3051611e-08 -3.3753679e-08 +4501 9.01 -1.2984278e-08 -3.3579556e-08 +4502 9.012 -1.2917292e-08 -3.3406331e-08 +4503 9.014 -1.2850652e-08 -3.3234000e-08 +4504 9.016 -1.2784356e-08 -3.3062558e-08 +4505 9.018 -1.2718401e-08 -3.2892001e-08 +4506 9.02 -1.2652787e-08 -3.2722323e-08 +4507 9.022 -1.2587512e-08 -3.2553520e-08 +4508 9.024 -1.2522573e-08 -3.2385589e-08 +4509 9.026 -1.2457969e-08 -3.2218523e-08 +4510 9.028 -1.2393698e-08 -3.2052319e-08 +4511 9.03 -1.2329759e-08 -3.1886973e-08 +4512 9.032 -1.2266149e-08 -3.1722480e-08 +4513 9.034 -1.2202868e-08 -3.1558835e-08 +4514 9.036 -1.2139914e-08 -3.1396034e-08 +4515 9.038 -1.2077284e-08 -3.1234073e-08 +4516 9.04 -1.2014977e-08 -3.1072948e-08 +4517 9.042 -1.1952991e-08 -3.0912654e-08 +4518 9.044 -1.1891326e-08 -3.0753186e-08 +4519 9.046 -1.1829978e-08 -3.0594541e-08 +4520 9.048 -1.1768947e-08 -3.0436715e-08 +4521 9.05 -1.1708231e-08 -3.0279703e-08 +4522 9.052 -1.1647827e-08 -3.0123500e-08 +4523 9.054 -1.1587736e-08 -2.9968104e-08 +4524 9.056 -1.1527955e-08 -2.9813509e-08 +4525 9.058 -1.1468481e-08 -2.9659711e-08 +4526 9.06 -1.1409315e-08 -2.9506707e-08 +4527 9.062 -1.1350454e-08 -2.9354492e-08 +4528 9.064 -1.1291897e-08 -2.9203063e-08 +4529 9.066 -1.1233641e-08 -2.9052414e-08 +4530 9.068 -1.1175686e-08 -2.8902543e-08 +4531 9.07 -1.1118031e-08 -2.8753445e-08 +4532 9.072 -1.1060672e-08 -2.8605115e-08 +4533 9.074 -1.1003610e-08 -2.8457551e-08 +4534 9.076 -1.0946841e-08 -2.8310749e-08 +4535 9.078 -1.0890366e-08 -2.8164703e-08 +4536 9.08 -1.0834182e-08 -2.8019411e-08 +4537 9.082 -1.0778288e-08 -2.7874868e-08 +4538 9.084 -1.0722682e-08 -2.7731071e-08 +4539 9.086 -1.0667363e-08 -2.7588016e-08 +4540 9.088 -1.0612330e-08 -2.7445699e-08 +4541 9.09 -1.0557580e-08 -2.7304116e-08 +4542 9.092 -1.0503113e-08 -2.7163263e-08 +4543 9.094 -1.0448926e-08 -2.7023137e-08 +4544 9.096 -1.0395020e-08 -2.6883733e-08 +4545 9.098 -1.0341391e-08 -2.6745049e-08 +4546 9.1 -1.0288039e-08 -2.6607080e-08 +4547 9.102 -1.0234962e-08 -2.6469823e-08 +4548 9.104 -1.0182159e-08 -2.6333274e-08 +4549 9.106 -1.0129629e-08 -2.6197429e-08 +4550 9.108 -1.0077369e-08 -2.6062285e-08 +4551 9.11 -1.0025379e-08 -2.5927838e-08 +4552 9.112 -9.9736572e-09 -2.5794085e-08 +4553 9.114 -9.9222022e-09 -2.5661022e-08 +4554 9.116 -9.8710127e-09 -2.5528645e-08 +4555 9.118 -9.8200872e-09 -2.5396951e-08 +4556 9.12 -9.7694244e-09 -2.5265936e-08 +4557 9.122 -9.7190230e-09 -2.5135597e-08 +4558 9.124 -9.6688816e-09 -2.5005931e-08 +4559 9.126 -9.6189988e-09 -2.4876933e-08 +4560 9.128 -9.5693734e-09 -2.4748601e-08 +4561 9.13 -9.5200040e-09 -2.4620931e-08 +4562 9.132 -9.4708892e-09 -2.4493919e-08 +4563 9.134 -9.4220279e-09 -2.4367563e-08 +4564 9.136 -9.3734186e-09 -2.4241858e-08 +4565 9.138 -9.3250600e-09 -2.4116802e-08 +4566 9.14 -9.2769509e-09 -2.3992391e-08 +4567 9.142 -9.2290900e-09 -2.3868621e-08 +4568 9.144 -9.1814760e-09 -2.3745491e-08 +4569 9.146 -9.1341076e-09 -2.3622995e-08 +4570 9.148 -9.0869836e-09 -2.3501131e-08 +4571 9.15 -9.0401027e-09 -2.3379896e-08 +4572 9.152 -8.9934636e-09 -2.3259286e-08 +4573 9.154 -8.9470651e-09 -2.3139299e-08 +4574 9.156 -8.9009060e-09 -2.3019930e-08 +4575 9.158 -8.8549850e-09 -2.2901177e-08 +4576 9.16 -8.8093009e-09 -2.2783037e-08 +4577 9.162 -8.7638524e-09 -2.2665506e-08 +4578 9.164 -8.7186385e-09 -2.2548582e-08 +4579 9.166 -8.6736577e-09 -2.2432260e-08 +4580 9.168 -8.6289090e-09 -2.2316539e-08 +4581 9.17 -8.5843912e-09 -2.2201415e-08 +4582 9.172 -8.5401030e-09 -2.2086884e-08 +4583 9.174 -8.4960432e-09 -2.1972944e-08 +4584 9.176 -8.4522108e-09 -2.1859592e-08 +4585 9.178 -8.4086045e-09 -2.1746825e-08 +4586 9.18 -8.3652231e-09 -2.1634640e-08 +4587 9.182 -8.3220655e-09 -2.1523033e-08 +4588 9.184 -8.2791306e-09 -2.1412002e-08 +4589 9.186 -8.2364171e-09 -2.1301543e-08 +4590 9.188 -8.1939240e-09 -2.1191655e-08 +4591 9.19 -8.1516501e-09 -2.1082333e-08 +4592 9.192 -8.1095943e-09 -2.0973575e-08 +4593 9.194 -8.0677555e-09 -2.0865379e-08 +4594 9.196 -8.0261324e-09 -2.0757740e-08 +4595 9.198 -7.9847241e-09 -2.0650657e-08 +4596 9.2 -7.9435294e-09 -2.0544126e-08 +4597 9.202 -7.9025473e-09 -2.0438145e-08 +4598 9.204 -7.8617765e-09 -2.0332710e-08 +4599 9.206 -7.8212161e-09 -2.0227819e-08 +4600 9.208 -7.7808649e-09 -2.0123469e-08 +4601 9.21 -7.7407218e-09 -2.0019658e-08 +4602 9.212 -7.7007859e-09 -1.9916382e-08 +4603 9.214 -7.6610559e-09 -1.9813639e-08 +4604 9.216 -7.6215310e-09 -1.9711426e-08 +4605 9.218 -7.5822099e-09 -1.9609740e-08 +4606 9.22 -7.5430917e-09 -1.9508579e-08 +4607 9.222 -7.5041752e-09 -1.9407939e-08 +4608 9.224 -7.4654595e-09 -1.9307819e-08 +4609 9.226 -7.4269436e-09 -1.9208215e-08 +4610 9.228 -7.3886263e-09 -1.9109125e-08 +4611 9.23 -7.3505068e-09 -1.9010546e-08 +4612 9.232 -7.3125838e-09 -1.8912476e-08 +4613 9.234 -7.2748565e-09 -1.8814911e-08 +4614 9.236 -7.2373238e-09 -1.8717850e-08 +4615 9.238 -7.1999848e-09 -1.8621289e-08 +4616 9.24 -7.1628384e-09 -1.8525227e-08 +4617 9.242 -7.1258835e-09 -1.8429660e-08 +4618 9.244 -7.0891194e-09 -1.8334586e-08 +4619 9.246 -7.0525449e-09 -1.8240003e-08 +4620 9.248 -7.0161590e-09 -1.8145907e-08 +4621 9.25 -6.9799609e-09 -1.8052297e-08 +4622 9.252 -6.9439495e-09 -1.7959170e-08 +4623 9.254 -6.9081239e-09 -1.7866523e-08 +4624 9.256 -6.8724831e-09 -1.7774354e-08 +4625 9.258 -6.8370262e-09 -1.7682661e-08 +4626 9.26 -6.8017522e-09 -1.7591440e-08 +4627 9.262 -6.7666601e-09 -1.7500690e-08 +4628 9.264 -6.7317491e-09 -1.7410409e-08 +4629 9.266 -6.6970182e-09 -1.7320593e-08 +4630 9.268 -6.6624664e-09 -1.7231240e-08 +4631 9.27 -6.6280929e-09 -1.7142348e-08 +4632 9.272 -6.5938967e-09 -1.7053915e-08 +4633 9.274 -6.5598769e-09 -1.6965938e-08 +4634 9.276 -6.5260327e-09 -1.6878415e-08 +4635 9.278 -6.4923630e-09 -1.6791343e-08 +4636 9.28 -6.4588670e-09 -1.6704720e-08 +4637 9.282 -6.4255438e-09 -1.6618545e-08 +4638 9.284 -6.3923925e-09 -1.6532814e-08 +4639 9.286 -6.3594123e-09 -1.6447525e-08 +4640 9.288 -6.3266021e-09 -1.6362676e-08 +4641 9.29 -6.2939613e-09 -1.6278264e-08 +4642 9.292 -6.2614888e-09 -1.6194289e-08 +4643 9.294 -6.2291838e-09 -1.6110746e-08 +4644 9.296 -6.1970455e-09 -1.6027634e-08 +4645 9.298 -6.1650730e-09 -1.5944951e-08 +4646 9.3 -6.1332654e-09 -1.5862695e-08 +4647 9.302 -6.1016219e-09 -1.5780863e-08 +4648 9.304 -6.0701417e-09 -1.5699453e-08 +4649 9.306 -6.0388238e-09 -1.5618463e-08 +4650 9.308 -6.0076676e-09 -1.5537891e-08 +4651 9.31 -5.9766720e-09 -1.5457734e-08 +4652 9.312 -5.9458363e-09 -1.5377991e-08 +4653 9.314 -5.9151598e-09 -1.5298659e-08 +4654 9.316 -5.8846414e-09 -1.5219737e-08 +4655 9.318 -5.8542805e-09 -1.5141222e-08 +4656 9.32 -5.8240763e-09 -1.5063111e-08 +4657 9.322 -5.7940278e-09 -1.4985404e-08 +4658 9.324 -5.7641344e-09 -1.4908097e-08 +4659 9.326 -5.7343952e-09 -1.4831189e-08 +4660 9.328 -5.7048094e-09 -1.4754678e-08 +4661 9.33 -5.6753762e-09 -1.4678562e-08 +4662 9.332 -5.6460949e-09 -1.4602838e-08 +4663 9.334 -5.6169646e-09 -1.4527505e-08 +4664 9.336 -5.5879846e-09 -1.4452561e-08 +4665 9.338 -5.5591541e-09 -1.4378003e-08 +4666 9.34 -5.5304723e-09 -1.4303830e-08 +4667 9.342 -5.5019385e-09 -1.4230039e-08 +4668 9.344 -5.4735519e-09 -1.4156629e-08 +4669 9.346 -5.4453117e-09 -1.4083598e-08 +4670 9.348 -5.4172173e-09 -1.4010943e-08 +4671 9.35 -5.3892677e-09 -1.3938664e-08 +4672 9.352 -5.3614624e-09 -1.3866757e-08 +4673 9.354 -5.3338004e-09 -1.3795221e-08 +4674 9.356 -5.3062812e-09 -1.3724054e-08 +4675 9.358 -5.2789040e-09 -1.3653254e-08 +4676 9.36 -5.2516680e-09 -1.3582820e-08 +4677 9.362 -5.2245725e-09 -1.3512748e-08 +4678 9.364 -5.1976167e-09 -1.3443039e-08 +4679 9.366 -5.1708001e-09 -1.3373688e-08 +4680 9.368 -5.1441217e-09 -1.3304696e-08 +4681 9.37 -5.1175810e-09 -1.3236060e-08 +4682 9.372 -5.0911773e-09 -1.3167777e-08 +4683 9.374 -5.0649097e-09 -1.3099847e-08 +4684 9.376 -5.0387776e-09 -1.3032267e-08 +4685 9.378 -5.0127804e-09 -1.2965036e-08 +4686 9.38 -4.9869173e-09 -1.2898152e-08 +4687 9.382 -4.9611876e-09 -1.2831612e-08 +4688 9.384 -4.9355906e-09 -1.2765416e-08 +4689 9.386 -4.9101257e-09 -1.2699561e-08 +4690 9.388 -4.8847921e-09 -1.2634047e-08 +4691 9.39 -4.8595893e-09 -1.2568870e-08 +4692 9.392 -4.8345164e-09 -1.2504029e-08 +4693 9.394 -4.8095729e-09 -1.2439523e-08 +4694 9.396 -4.7847581e-09 -1.2375349e-08 +4695 9.398 -4.7600713e-09 -1.2311507e-08 +4696 9.4 -4.7355119e-09 -1.2247994e-08 +4697 9.402 -4.7110791e-09 -1.2184808e-08 +4698 9.404 -4.6867724e-09 -1.2121949e-08 +4699 9.406 -4.6625911e-09 -1.2059414e-08 +4700 9.408 -4.6385345e-09 -1.1997201e-08 +4701 9.41 -4.6146021e-09 -1.1935309e-08 +4702 9.412 -4.5907931e-09 -1.1873737e-08 +4703 9.414 -4.5671069e-09 -1.1812482e-08 +4704 9.416 -4.5435429e-09 -1.1751543e-08 +4705 9.418 -4.5201005e-09 -1.1690919e-08 +4706 9.42 -4.4967791e-09 -1.1630607e-08 +4707 9.422 -4.4735779e-09 -1.1570606e-08 +4708 9.424 -4.4504964e-09 -1.1510915e-08 +4709 9.426 -4.4275340e-09 -1.1451532e-08 +4710 9.428 -4.4046901e-09 -1.1392455e-08 +4711 9.43 -4.3819640e-09 -1.1333683e-08 +4712 9.432 -4.3593552e-09 -1.1275214e-08 +4713 9.434 -4.3368630e-09 -1.1217047e-08 +4714 9.436 -4.3144868e-09 -1.1159180e-08 +4715 9.438 -4.2922260e-09 -1.1101611e-08 +4716 9.44 -4.2700801e-09 -1.1044339e-08 +4717 9.442 -4.2480485e-09 -1.0987363e-08 +4718 9.444 -4.2261305e-09 -1.0930681e-08 +4719 9.446 -4.2043256e-09 -1.0874291e-08 +4720 9.448 -4.1826331e-09 -1.0818191e-08 +4721 9.45 -4.1610526e-09 -1.0762382e-08 +4722 9.452 -4.1395834e-09 -1.0706860e-08 +4723 9.454 -4.1182250e-09 -1.0651625e-08 +4724 9.456 -4.0969767e-09 -1.0596674e-08 +4725 9.458 -4.0758381e-09 -1.0542007e-08 +4726 9.46 -4.0548085e-09 -1.0487622e-08 +4727 9.462 -4.0338874e-09 -1.0433518e-08 +4728 9.464 -4.0130742e-09 -1.0379692e-08 +4729 9.466 -3.9923685e-09 -1.0326145e-08 +4730 9.468 -3.9717695e-09 -1.0272873e-08 +4731 9.47 -3.9512768e-09 -1.0219877e-08 +4732 9.472 -3.9308898e-09 -1.0167153e-08 +4733 9.474 -3.9106080e-09 -1.0114702e-08 +4734 9.476 -3.8904308e-09 -1.0062521e-08 +4735 9.478 -3.8703577e-09 -1.0010610e-08 +4736 9.48 -3.8503882e-09 -9.9589662e-09 +4737 9.482 -3.8305217e-09 -9.9075889e-09 +4738 9.484 -3.8107577e-09 -9.8564767e-09 +4739 9.486 -3.7910956e-09 -9.8056280e-09 +4740 9.488 -3.7715350e-09 -9.7550417e-09 +4741 9.49 -3.7520753e-09 -9.7047164e-09 +4742 9.492 -3.7327159e-09 -9.6546507e-09 +4743 9.494 -3.7134565e-09 -9.6048432e-09 +4744 9.496 -3.6942964e-09 -9.5552927e-09 +4745 9.498 -3.6752351e-09 -9.5059978e-09 +4746 9.5 -3.6562722e-09 -9.4569571e-09 +4747 9.502 -3.6374071e-09 -9.4081695e-09 +4748 9.504 -3.6186394e-09 -9.3596335e-09 +4749 9.506 -3.5999684e-09 -9.3113479e-09 +4750 9.508 -3.5813938e-09 -9.2633114e-09 +4751 9.51 -3.5629150e-09 -9.2155227e-09 +4752 9.512 -3.5445316e-09 -9.1679806e-09 +4753 9.514 -3.5262429e-09 -9.1206836e-09 +4754 9.516 -3.5080487e-09 -9.0736307e-09 +4755 9.518 -3.4899483e-09 -9.0268205e-09 +4756 9.52 -3.4719412e-09 -8.9802517e-09 +4757 9.522 -3.4540271e-09 -8.9339232e-09 +4758 9.524 -3.4362054e-09 -8.8878337e-09 +4759 9.526 -3.4184756e-09 -8.8419820e-09 +4760 9.528 -3.4008373e-09 -8.7963667e-09 +4761 9.53 -3.3832900e-09 -8.7509868e-09 +4762 9.532 -3.3658332e-09 -8.7058410e-09 +4763 9.534 -3.3484665e-09 -8.6609281e-09 +4764 9.536 -3.3311893e-09 -8.6162468e-09 +4765 9.538 -3.3140013e-09 -8.5717961e-09 +4766 9.54 -3.2969020e-09 -8.5275747e-09 +4767 9.542 -3.2798909e-09 -8.4835813e-09 +4768 9.544 -3.2629675e-09 -8.4398150e-09 +4769 9.546 -3.2461315e-09 -8.3962744e-09 +4770 9.548 -3.2293823e-09 -8.3529584e-09 +4771 9.55 -3.2127195e-09 -8.3098658e-09 +4772 9.552 -3.1961426e-09 -8.2669956e-09 +4773 9.554 -3.1796513e-09 -8.2243465e-09 +4774 9.556 -3.1632451e-09 -8.1819174e-09 +4775 9.558 -3.1469235e-09 -8.1397072e-09 +4776 9.56 -3.1306861e-09 -8.0977148e-09 +4777 9.562 -3.1145325e-09 -8.0559389e-09 +4778 9.564 -3.0984622e-09 -8.0143786e-09 +4779 9.566 -3.0824749e-09 -7.9730327e-09 +4780 9.568 -3.0665700e-09 -7.9319000e-09 +4781 9.57 -3.0507471e-09 -7.8909796e-09 +4782 9.572 -3.0350059e-09 -7.8502702e-09 +4783 9.574 -3.0193459e-09 -7.8097709e-09 +4784 9.576 -3.0037667e-09 -7.7694804e-09 +4785 9.578 -2.9882678e-09 -7.7293978e-09 +4786 9.58 -2.9728490e-09 -7.6895220e-09 +4787 9.582 -2.9575096e-09 -7.6498519e-09 +4788 9.584 -2.9422494e-09 -7.6103864e-09 +4789 9.586 -2.9270679e-09 -7.5711245e-09 +4790 9.588 -2.9119648e-09 -7.5320652e-09 +4791 9.59 -2.8969395e-09 -7.4932073e-09 +4792 9.592 -2.8819918e-09 -7.4545499e-09 +4793 9.594 -2.8671212e-09 -7.4160920e-09 +4794 9.596 -2.8523273e-09 -7.3778324e-09 +4795 9.598 -2.8376097e-09 -7.3397702e-09 +4796 9.6 -2.8229681e-09 -7.3019043e-09 +4797 9.602 -2.8084020e-09 -7.2642337e-09 +4798 9.604 -2.7939110e-09 -7.2267575e-09 +4799 9.606 -2.7794948e-09 -7.1894747e-09 +4800 9.608 -2.7651530e-09 -7.1523841e-09 +4801 9.61 -2.7508852e-09 -7.1154849e-09 +4802 9.612 -2.7366909e-09 -7.0787760e-09 +4803 9.614 -2.7225699e-09 -7.0422565e-09 +4804 9.616 -2.7085218e-09 -7.0059254e-09 +4805 9.618 -2.6945461e-09 -6.9697817e-09 +4806 9.62 -2.6806425e-09 -6.9338245e-09 +4807 9.622 -2.6668107e-09 -6.8980528e-09 +4808 9.624 -2.6530502e-09 -6.8624656e-09 +4809 9.626 -2.6393607e-09 -6.8270619e-09 +4810 9.628 -2.6257418e-09 -6.7918409e-09 +4811 9.63 -2.6121932e-09 -6.7568017e-09 +4812 9.632 -2.5987145e-09 -6.7219431e-09 +4813 9.634 -2.5853053e-09 -6.6872644e-09 +4814 9.636 -2.5719653e-09 -6.6527646e-09 +4815 9.638 -2.5586942e-09 -6.6184427e-09 +4816 9.64 -2.5454914e-09 -6.5842979e-09 +4817 9.642 -2.5323568e-09 -6.5503293e-09 +4818 9.644 -2.5192900e-09 -6.5165359e-09 +4819 9.646 -2.5062906e-09 -6.4829168e-09 +4820 9.648 -2.4933582e-09 -6.4494711e-09 +4821 9.65 -2.4804926e-09 -6.4161980e-09 +4822 9.652 -2.4676933e-09 -6.3830965e-09 +4823 9.654 -2.4549601e-09 -6.3501658e-09 +4824 9.656 -2.4422925e-09 -6.3174049e-09 +4825 9.658 -2.4296904e-09 -6.2848131e-09 +4826 9.66 -2.4171532e-09 -6.2523894e-09 +4827 9.662 -2.4046807e-09 -6.2201329e-09 +4828 9.664 -2.3922725e-09 -6.1880429e-09 +4829 9.666 -2.3799284e-09 -6.1561184e-09 +4830 9.668 -2.3676480e-09 -6.1243585e-09 +4831 9.67 -2.3554309e-09 -6.0927626e-09 +4832 9.672 -2.3432768e-09 -6.0613296e-09 +4833 9.674 -2.3311854e-09 -6.0300587e-09 +4834 9.676 -2.3191565e-09 -5.9989492e-09 +4835 9.678 -2.3071895e-09 -5.9680002e-09 +4836 9.68 -2.2952843e-09 -5.9372108e-09 +4837 9.682 -2.2834406e-09 -5.9065803e-09 +4838 9.684 -2.2716579e-09 -5.8761077e-09 +4839 9.686 -2.2599360e-09 -5.8457924e-09 +4840 9.688 -2.2482746e-09 -5.8156335e-09 +4841 9.69 -2.2366734e-09 -5.7856301e-09 +4842 9.692 -2.2251320e-09 -5.7557815e-09 +4843 9.694 -2.2136502e-09 -5.7260869e-09 +4844 9.696 -2.2022276e-09 -5.6965455e-09 +4845 9.698 -2.1908639e-09 -5.6671565e-09 +4846 9.7 -2.1795588e-09 -5.6379190e-09 +4847 9.702 -2.1683121e-09 -5.6088324e-09 +4848 9.704 -2.1571234e-09 -5.5798959e-09 +4849 9.706 -2.1459924e-09 -5.5511086e-09 +4850 9.708 -2.1349189e-09 -5.5224699e-09 +4851 9.71 -2.1239025e-09 -5.4939788e-09 +4852 9.712 -2.1129429e-09 -5.4656348e-09 +4853 9.714 -2.1020398e-09 -5.4374370e-09 +4854 9.716 -2.0911930e-09 -5.4093846e-09 +4855 9.718 -2.0804022e-09 -5.3814769e-09 +4856 9.72 -2.0696670e-09 -5.3537132e-09 +4857 9.722 -2.0589872e-09 -5.3260928e-09 +4858 9.724 -2.0483626e-09 -5.2986148e-09 +4859 9.726 -2.0377927e-09 -5.2712786e-09 +4860 9.728 -2.0272773e-09 -5.2440834e-09 +4861 9.73 -2.0168163e-09 -5.2170285e-09 +4862 9.732 -2.0064091e-09 -5.1901131e-09 +4863 9.734 -1.9960557e-09 -5.1633366e-09 +4864 9.736 -1.9857557e-09 -5.1366983e-09 +4865 9.738 -1.9755088e-09 -5.1101973e-09 +4866 9.74 -1.9653148e-09 -5.0838331e-09 +4867 9.742 -1.9551734e-09 -5.0576048e-09 +4868 9.744 -1.9450843e-09 -5.0315119e-09 +4869 9.746 -1.9350473e-09 -5.0055536e-09 +4870 9.748 -1.9250620e-09 -4.9797292e-09 +4871 9.75 -1.9151283e-09 -4.9540380e-09 +4872 9.752 -1.9052458e-09 -4.9284793e-09 +4873 9.754 -1.8954143e-09 -4.9030525e-09 +4874 9.756 -1.8856335e-09 -4.8777569e-09 +4875 9.758 -1.8759031e-09 -4.8525918e-09 +4876 9.76 -1.8662230e-09 -4.8275564e-09 +4877 9.762 -1.8565928e-09 -4.8026503e-09 +4878 9.764 -1.8470123e-09 -4.7778726e-09 +4879 9.766 -1.8374813e-09 -4.7532227e-09 +4880 9.768 -1.8279994e-09 -4.7287000e-09 +4881 9.77 -1.8185664e-09 -4.7043038e-09 +4882 9.772 -1.8091821e-09 -4.6800335e-09 +4883 9.774 -1.7998462e-09 -4.6558883e-09 +4884 9.776 -1.7905584e-09 -4.6318677e-09 +4885 9.778 -1.7813186e-09 -4.6079711e-09 +4886 9.78 -1.7721265e-09 -4.5841977e-09 +4887 9.782 -1.7629817e-09 -4.5605469e-09 +4888 9.784 -1.7538842e-09 -4.5370182e-09 +4889 9.786 -1.7448336e-09 -4.5136108e-09 +4890 9.788 -1.7358297e-09 -4.4903242e-09 +4891 9.79 -1.7268722e-09 -4.4671577e-09 +4892 9.792 -1.7179610e-09 -4.4441107e-09 +4893 9.794 -1.7090957e-09 -4.4211827e-09 +4894 9.796 -1.7002761e-09 -4.3983729e-09 +4895 9.798 -1.6915021e-09 -4.3756807e-09 +4896 9.8 -1.6827733e-09 -4.3531057e-09 +4897 9.802 -1.6740896e-09 -4.3306470e-09 +4898 9.804 -1.6654507e-09 -4.3083043e-09 +4899 9.806 -1.6568563e-09 -4.2860768e-09 +4900 9.808 -1.6483063e-09 -4.2639640e-09 +4901 9.81 -1.6398004e-09 -4.2419652e-09 +4902 9.812 -1.6313384e-09 -4.2200800e-09 +4903 9.814 -1.6229200e-09 -4.1983076e-09 +4904 9.816 -1.6145450e-09 -4.1766476e-09 +4905 9.818 -1.6062133e-09 -4.1550992e-09 +4906 9.82 -1.5979246e-09 -4.1336621e-09 +4907 9.822 -1.5896786e-09 -4.1123355e-09 +4908 9.824 -1.5814752e-09 -4.0911190e-09 +4909 9.826 -1.5733141e-09 -4.0700119e-09 +4910 9.828 -1.5651950e-09 -4.0490137e-09 +4911 9.83 -1.5571179e-09 -4.0281238e-09 +4912 9.832 -1.5490825e-09 -4.0073417e-09 +4913 9.834 -1.5410885e-09 -3.9866668e-09 +4914 9.836 -1.5331357e-09 -3.9660986e-09 +4915 9.838 -1.5252240e-09 -3.9456365e-09 +4916 9.84 -1.5173531e-09 -3.9252799e-09 +4917 9.842 -1.5095228e-09 -3.9050283e-09 +4918 9.844 -1.5017329e-09 -3.8848812e-09 +4919 9.846 -1.4939832e-09 -3.8648381e-09 +4920 9.848 -1.4862735e-09 -3.8448983e-09 +4921 9.85 -1.4786036e-09 -3.8250614e-09 +4922 9.852 -1.4709732e-09 -3.8053269e-09 +4923 9.854 -1.4633822e-09 -3.7856941e-09 +4924 9.856 -1.4558304e-09 -3.7661626e-09 +4925 9.858 -1.4483175e-09 -3.7467319e-09 +4926 9.86 -1.4408434e-09 -3.7274014e-09 +4927 9.862 -1.4334078e-09 -3.7081707e-09 +4928 9.864 -1.4260106e-09 -3.6890391e-09 +4929 9.866 -1.4186516e-09 -3.6700063e-09 +4930 9.868 -1.4113305e-09 -3.6510716e-09 +4931 9.87 -1.4040472e-09 -3.6322346e-09 +4932 9.872 -1.3968015e-09 -3.6134948e-09 +4933 9.874 -1.3895932e-09 -3.5948517e-09 +4934 9.876 -1.3824221e-09 -3.5763047e-09 +4935 9.878 -1.3752879e-09 -3.5578535e-09 +4936 9.88 -1.3681906e-09 -3.5394974e-09 +4937 9.882 -1.3611299e-09 -3.5212360e-09 +4938 9.884 -1.3541056e-09 -3.5030688e-09 +4939 9.886 -1.3471175e-09 -3.4849953e-09 +4940 9.888 -1.3401655e-09 -3.4670151e-09 +4941 9.89 -1.3332494e-09 -3.4491276e-09 +4942 9.892 -1.3263690e-09 -3.4313324e-09 +4943 9.894 -1.3195240e-09 -3.4136290e-09 +4944 9.896 -1.3127144e-09 -3.3960169e-09 +4945 9.898 -1.3059399e-09 -3.3784957e-09 +4946 9.9 -1.2992003e-09 -3.3610649e-09 +4947 9.902 -1.2924956e-09 -3.3437240e-09 +4948 9.904 -1.2858254e-09 -3.3264725e-09 +4949 9.906 -1.2791896e-09 -3.3093101e-09 +4950 9.908 -1.2725881e-09 -3.2922362e-09 +4951 9.91 -1.2660206e-09 -3.2752504e-09 +4952 9.912 -1.2594870e-09 -3.2583521e-09 +4953 9.914 -1.2529871e-09 -3.2415411e-09 +4954 9.916 -1.2465208e-09 -3.2248168e-09 +4955 9.918 -1.2400878e-09 -3.2081788e-09 +4956 9.92 -1.2336880e-09 -3.1916266e-09 +4957 9.922 -1.2273213e-09 -3.1751598e-09 +4958 9.924 -1.2209873e-09 -3.1587779e-09 +4959 9.926 -1.2146861e-09 -3.1424806e-09 +4960 9.928 -1.2084173e-09 -3.1262673e-09 +4961 9.93 -1.2021810e-09 -3.1101377e-09 +4962 9.932 -1.1959767e-09 -3.0940913e-09 +4963 9.934 -1.1898045e-09 -3.0781276e-09 +4964 9.936 -1.1836642e-09 -3.0622464e-09 +4965 9.938 -1.1775555e-09 -3.0464470e-09 +4966 9.94 -1.1714783e-09 -3.0307292e-09 +4967 9.942 -1.1654325e-09 -3.0150924e-09 +4968 9.944 -1.1594179e-09 -2.9995363e-09 +4969 9.946 -1.1534343e-09 -2.9840605e-09 +4970 9.948 -1.1474816e-09 -2.9686645e-09 +4971 9.95 -1.1415596e-09 -2.9533479e-09 +4972 9.952 -1.1356682e-09 -2.9381103e-09 +4973 9.954 -1.1298071e-09 -2.9229513e-09 +4974 9.956 -1.1239763e-09 -2.9078706e-09 +4975 9.958 -1.1181756e-09 -2.8928676e-09 +4976 9.96 -1.1124048e-09 -2.8779421e-09 +4977 9.962 -1.1066638e-09 -2.8630935e-09 +4978 9.964 -1.1009524e-09 -2.8483216e-09 +4979 9.966 -1.0952704e-09 -2.8336258e-09 +4980 9.968 -1.0896178e-09 -2.8190059e-09 +4981 9.97 -1.0839944e-09 -2.8044613e-09 +4982 9.972 -1.0783999e-09 -2.7899919e-09 +4983 9.974 -1.0728343e-09 -2.7755970e-09 +4984 9.976 -1.0672975e-09 -2.7612764e-09 +4985 9.978 -1.0617892e-09 -2.7470297e-09 +4986 9.98 -1.0563093e-09 -2.7328565e-09 +4987 9.982 -1.0508577e-09 -2.7187565e-09 +4988 9.984 -1.0454342e-09 -2.7047291e-09 +4989 9.986 -1.0400387e-09 -2.6907741e-09 +4990 9.988 -1.0346711e-09 -2.6768911e-09 +4991 9.99 -1.0293311e-09 -2.6630798e-09 +4992 9.992 -1.0240187e-09 -2.6493397e-09 +4993 9.994 -1.0187337e-09 -2.6356704e-09 +4994 9.996 -1.0134760e-09 -2.6220717e-09 +4995 9.998 -1.0082454e-09 -2.6085431e-09 + +Pair_Na-O +N 4995 + +1 0.01 5.0000000e+24 6.0000000e+27 +2 0.012 5.6078327e+23 5.6078327e+26 +3 0.014 8.8192890e+22 7.5593906e+25 +4 0.016 1.7763568e+22 1.3322676e+25 +5 0.018 4.3221511e+21 2.8814341e+24 +6 0.02 1.2207031e+21 7.3242188e+23 +7 0.022 3.8895363e+20 2.1215653e+23 +8 0.024 1.3690998e+20 6.8454989e+22 +9 0.026 5.2394998e+19 2.4182307e+22 +10 0.028 2.1531467e+19 9.2277717e+21 +11 0.03 9.4083821e+18 3.7633528e+21 +12 0.032 4.3368087e+18 1.6263033e+21 +13 0.034 2.0951880e+18 7.3947812e+20 +14 0.036 1.0552127e+18 3.5173756e+20 +15 0.038 5.5152708e+17 1.7416645e+20 +16 0.04 2.9802322e+17 8.9406967e+19 +17 0.042 1.6595048e+17 4.7414424e+19 +18 0.044 9.4959384e+16 2.5898014e+19 +19 0.046 5.5702671e+16 1.4531132e+19 +20 0.048 3.3425288e+16 8.3563220e+18 +21 0.05 2.0480000e+16 4.9152000e+18 +22 0.052 1.2791748e+16 2.9519417e+18 +23 0.054 8.1328898e+15 1.8073088e+18 +24 0.056 5.2567059e+15 1.1264370e+18 +25 0.058 3.4501191e+15 7.1381774e+17 +26 0.06 2.2969683e+15 4.5939366e+17 +27 0.062 1.5497789e+15 2.9995720e+17 +28 0.064 1.0587912e+15 1.9852335e+17 +29 0.066 7.3188488e+14 1.3306998e+17 +30 0.068 5.1152051e+14 9.0268325e+16 +31 0.07 3.6123808e+14 6.1926528e+16 +32 0.072 2.5762028e+14 4.2936713e+16 +33 0.074 1.8543400e+14 3.0070378e+16 +34 0.076 1.3465017e+14 2.1260553e+16 +35 0.078 9.8590433e+13 1.5167759e+16 +36 0.08 7.2759576e+13 1.0913936e+16 +37 0.082 5.4100811e+13 7.9171919e+15 +38 0.084 4.0515255e+13 5.7878935e+15 +39 0.086 3.0548408e+13 4.2625686e+15 +40 0.088 2.3183443e+13 3.1613786e+15 +41 0.09 1.7703531e+13 2.3604708e+15 +42 0.092 1.3599285e+13 1.7738198e+15 +43 0.094 1.0505960e+13 1.3411864e+15 +44 0.096 8.1604707e+12 1.0200588e+15 +45 0.098 6.3717261e+12 7.8021135e+14 +46 0.1 5.0000000e+12 6.0000000e+14 +47 0.102 3.9424659e+12 4.6381952e+14 +48 0.104 3.1229852e+12 3.6034445e+14 +49 0.106 2.4848468e+12 2.8130341e+14 +50 0.108 1.9855688e+12 2.2061875e+14 +51 0.11 1.5931541e+12 1.7379863e+14 +52 0.112 1.2833755e+12 1.3750451e+14 +53 0.114 1.0377955e+12 1.0924163e+14 +54 0.116 8.4231422e+11 8.7135954e+13 +55 0.118 6.8609763e+11 6.9772640e+13 +56 0.12 5.6078327e+11 5.6078327e+13 +57 0.122 4.5988796e+11 4.5234881e+13 +58 0.124 3.7836398e+11 3.6615869e+13 +59 0.126 3.1226511e+11 2.9739534e+13 +60 0.128 2.5849394e+11 2.4233807e+13 +61 0.13 2.1460991e+11 1.9810146e+13 +62 0.132 1.7868283e+11 1.6243894e+13 +63 0.134 1.4918063e+11 1.3359459e+13 +64 0.136 1.2488294e+11 1.1019083e+13 +65 0.138 1.0481440e+11 9.1142960e+12 +66 0.14 8.8192891e+10 7.5593906e+12 +67 0.142 7.4389198e+10 6.2864110e+12 +68 0.144 6.2895577e+10 5.2412980e+12 +69 0.146 5.3301047e+10 4.3809079e+12 +70 0.148 4.5271973e+10 3.6707005e+12 +71 0.15 3.8536734e+10 3.0829387e+12 +72 0.152 3.2873577e+10 2.5952823e+12 +73 0.154 2.8100973e+10 2.1896862e+12 +74 0.156 2.4069930e+10 1.8515331e+12 +75 0.158 2.0657843e+10 1.5689501e+12 +76 0.16 1.7763569e+10 1.3322676e+12 +77 0.162 1.5303467e+10 1.1335901e+12 +78 0.164 1.3208206e+10 9.6645409e+11 +79 0.166 1.1420180e+10 8.2555518e+11 +80 0.168 9.8914201e+09 7.0652997e+11 +81 0.17 8.5818906e+09 6.0578048e+11 +82 0.172 7.4581081e+09 5.2033309e+11 +83 0.174 6.4920082e+09 4.4772467e+11 +84 0.176 5.6600208e+09 3.8591048e+11 +85 0.178 4.9423104e+09 3.3318944e+11 +86 0.18 4.3221516e+09 2.8814341e+11 +87 0.182 3.7854142e+09 2.4958772e+11 +88 0.184 3.3201384e+09 2.1653074e+11 +89 0.186 2.9161828e+09 1.8814080e+11 +90 0.188 2.5649322e+09 1.6371905e+11 +91 0.19 2.2590554e+09 1.4267716e+11 +92 0.192 1.9923029e+09 1.2451890e+11 +93 0.194 1.7593383e+09 1.0882502e+11 +94 0.196 1.5555976e+09 9.5240646e+10 +95 0.198 1.3771710e+09 8.3464882e+10 +96 0.2 1.2207036e+09 7.3242189e+10 +97 0.202 1.0833125e+09 6.4355172e+10 +98 0.204 9.6251654e+08 5.6618595e+10 +99 0.206 8.5617706e+08 4.9874367e+10 +100 0.208 7.6244802e+08 4.3987361e+10 +101 0.21 6.7973362e+08 3.8841897e+10 +102 0.212 6.0665249e+08 3.4338797e+10 +103 0.214 5.4200722e+08 3.0392905e+10 +104 0.216 4.8475844e+08 2.6931002e+10 +105 0.218 4.3400278e+08 2.3890039e+10 +106 0.22 3.8895406e+08 2.1215654e+10 +107 0.222 3.4892721e+08 1.8860909e+10 +108 0.224 3.1332451e+08 1.6785221e+10 +109 0.226 2.8162382e+08 1.4953456e+10 +110 0.228 2.5336846e+08 1.3335162e+10 +111 0.23 2.2815855e+08 1.1903905e+10 +112 0.232 2.0564353e+08 1.0636715e+10 +113 0.234 1.8551570e+08 9.5136062e+09 +114 0.236 1.6750471e+08 8.5171694e+09 +115 0.238 1.5137274e+08 7.6322202e+09 +116 0.24 1.3691038e+08 6.8455004e+09 +117 0.242 1.2393301e+08 6.1454203e+09 +118 0.244 1.1227773e+08 5.5218374e+09 +119 0.246 1.0180061e+08 4.9658658e+09 +120 0.248 9.2374405e+07 4.4697119e+09 +121 0.25 8.3886464e+07 4.0265332e+09 +122 0.252 7.6236981e+07 3.6303156e+09 +123 0.254 6.9337436e+07 3.2757678e+09 +124 0.256 6.3109249e+07 2.9582297e+09 +125 0.258 5.7482594e+07 2.6735930e+09 +126 0.26 5.2395369e+07 2.4182320e+09 +127 0.262 4.7792292e+07 2.1889444e+09 +128 0.264 4.3624104e+07 1.9828985e+09 +129 0.266 3.9846880e+07 1.7975885e+09 +130 0.268 3.6421412e+07 1.6307946e+09 +131 0.27 3.3312674e+07 1.4805487e+09 +132 0.272 3.0489354e+07 1.3451041e+09 +133 0.274 2.7923428e+07 1.2229097e+09 +134 0.276 2.5589804e+07 1.1125862e+09 +135 0.278 2.3465991e+07 1.0129067e+09 +136 0.28 2.1531813e+07 9.2277840e+08 +137 0.282 1.9769161e+07 8.4122752e+08 +138 0.284 1.8161766e+07 7.6738537e+08 +139 0.286 1.6694999e+07 7.0047649e+08 +140 0.288 1.5355701e+07 6.3980808e+08 +141 0.29 1.4132021e+07 5.8476067e+08 +142 0.292 1.3013282e+07 5.3477998e+08 +143 0.294 1.1989855e+07 4.8936961e+08 +144 0.296 1.1053054e+07 4.4808472e+08 +145 0.298 1.0195033e+07 4.1052635e+08 +146 0.3 9.4087038e+06 3.7633643e+08 +147 0.302 8.6876568e+06 3.4519335e+08 +148 0.304 8.0260925e+06 3.1680805e+08 +149 0.306 7.4187600e+06 2.9092054e+08 +150 0.308 6.8609017e+06 2.6729679e+08 +151 0.31 6.3482046e+06 2.4572604e+08 +152 0.312 5.8767559e+06 2.2601832e+08 +153 0.314 5.4430039e+06 2.0800228e+08 +154 0.316 5.0437224e+06 1.9152331e+08 +155 0.318 4.6759794e+06 1.7644174e+08 +156 0.32 4.3371083e+06 1.6263139e+08 +157 0.322 4.0246827e+06 1.4997815e+08 +158 0.324 3.7364933e+06 1.3837875e+08 +159 0.326 3.4705276e+06 1.2773973e+08 +160 0.328 3.2249508e+06 1.1797639e+08 +161 0.33 2.9980896e+06 1.0901196e+08 +162 0.332 2.7884169e+06 1.0077680e+08 +163 0.334 2.5945385e+06 9.3207725e+07 +164 0.336 2.4151803e+06 8.6247342e+07 +165 0.338 2.2491782e+06 7.9843504e+07 +166 0.34 2.0954670e+06 7.3948805e+07 +167 0.342 1.9530723e+06 6.8520121e+07 +168 0.344 1.8211021e+06 6.3518202e+07 +169 0.346 1.6987389e+06 5.8907302e+07 +170 0.348 1.5852340e+06 5.4654856e+07 +171 0.35 1.4799004e+06 5.0731170e+07 +172 0.352 1.3821082e+06 4.7109164e+07 +173 0.354 1.2912791e+06 4.3764122e+07 +174 0.356 1.2068822e+06 4.0673477e+07 +175 0.358 1.1284294e+06 3.7816611e+07 +176 0.36 1.0554725e+06 3.5174681e+07 +177 0.362 9.8759893e+05 3.2730454e+07 +178 0.364 9.2442939e+05 3.0468163e+07 +179 0.366 8.6561464e+05 2.8373375e+07 +180 0.368 8.1083306e+05 2.6432874e+07 +181 0.37 7.5978838e+05 2.4634547e+07 +182 0.372 7.1220751e+05 2.2967292e+07 +183 0.374 6.6783863e+05 2.1420928e+07 +184 0.376 6.2644945e+05 1.9986110e+07 +185 0.378 5.8782557e+05 1.8654262e+07 +186 0.38 5.5176902e+05 1.7417507e+07 +187 0.382 5.1809698e+05 1.6268607e+07 +188 0.384 4.8664047e+05 1.5200911e+07 +189 0.386 4.5724329e+05 1.4208299e+07 +190 0.388 4.2976098e+05 1.3285142e+07 +191 0.39 4.0405988e+05 1.2426260e+07 +192 0.392 3.8001628e+05 1.1626881e+07 +193 0.394 3.5751563e+05 1.0882611e+07 +194 0.396 3.3645181e+05 1.0189399e+07 +195 0.398 3.1672649e+05 9.5435096e+06 +196 0.4 2.9824852e+05 8.9414997e+06 +197 0.402 2.8093336e+05 8.3801903e+06 +198 0.404 2.6470259e+05 7.8566475e+06 +199 0.406 2.4948341e+05 7.3681617e+06 +200 0.408 2.3520824e+05 6.9122299e+06 +201 0.41 2.2181433e+05 6.4865386e+06 +202 0.412 2.0924336e+05 6.0889489e+06 +203 0.414 1.9744112e+05 5.7174827e+06 +204 0.416 1.8635723e+05 5.3703094e+06 +205 0.418 1.7594482e+05 5.0457349e+06 +206 0.42 1.6616028e+05 4.7421903e+06 +207 0.422 1.5696301e+05 4.4582225e+06 +208 0.424 1.4831523e+05 4.1924850e+06 +209 0.426 1.4018175e+05 3.9437294e+06 +210 0.428 1.3252977e+05 3.7107983e+06 +211 0.43 1.2532873e+05 3.4926181e+06 +212 0.432 1.1855013e+05 3.2881925e+06 +213 0.434 1.1216740e+05 3.0965964e+06 +214 0.436 1.0615576e+05 2.9169711e+06 +215 0.438 1.0049207e+05 2.7485188e+06 +216 0.44 9.5154736e+04 2.5904981e+06 +217 0.442 9.0123586e+04 2.4422201e+06 +218 0.444 8.5379788e+04 2.3030438e+06 +219 0.446 8.0905741e+04 2.1723734e+06 +220 0.448 7.6684995e+04 2.0496542e+06 +221 0.45 7.2702169e+04 1.9343701e+06 +222 0.452 6.8942879e+04 1.8260406e+06 +223 0.454 6.5393669e+04 1.7242181e+06 +224 0.456 6.2041947e+04 1.6284855e+06 +225 0.458 5.8875927e+04 1.5384543e+06 +226 0.46 5.5884571e+04 1.4537622e+06 +227 0.462 5.3057544e+04 1.3740714e+06 +228 0.464 5.0385162e+04 1.2990668e+06 +229 0.466 4.7858349e+04 1.2284543e+06 +230 0.468 4.5468600e+04 1.1619596e+06 +231 0.47 4.3207937e+04 1.0993264e+06 +232 0.472 4.1068880e+04 1.0403153e+06 +233 0.474 3.9044410e+04 9.8470304e+05 +234 0.476 3.7127941e+04 9.3228056e+05 +235 0.478 3.5313292e+04 8.8285265e+05 +236 0.48 3.3594656e+04 8.3623678e+05 +237 0.482 3.1966584e+04 7.9226223e+05 +238 0.484 3.0423953e+04 7.5076927e+05 +239 0.486 2.8961952e+04 7.1160847e+05 +240 0.488 2.7576058e+04 6.7463992e+05 +241 0.49 2.6262019e+04 6.3973265e+05 +242 0.492 2.5015835e+04 6.0676400e+05 +243 0.494 2.3833747e+04 5.7561907e+05 +244 0.496 2.2712215e+04 5.4619018e+05 +245 0.498 2.1647910e+04 5.1837641e+05 +246 0.5 2.0637696e+04 4.9208316e+05 +247 0.502 1.9678622e+04 4.6722171e+05 +248 0.504 1.8767910e+04 4.4370882e+05 +249 0.506 1.7902940e+04 4.2146642e+05 +250 0.508 1.7081246e+04 4.0042123e+05 +251 0.51 1.6300503e+04 3.8050447e+05 +252 0.512 1.5558519e+04 3.6165154e+05 +253 0.514 1.4853228e+04 3.4380179e+05 +254 0.516 1.4182681e+04 3.2689824e+05 +255 0.518 1.3545040e+04 3.1088733e+05 +256 0.52 1.2938571e+04 2.9571874e+05 +257 0.522 1.2361635e+04 2.8134518e+05 +258 0.524 1.1812690e+04 2.6772214e+05 +259 0.526 1.1290274e+04 2.5480778e+05 +260 0.528 1.0793012e+04 2.4256276e+05 +261 0.53 1.0319602e+04 2.3095003e+05 +262 0.532 9.8688140e+03 2.1993473e+05 +263 0.534 9.4394867e+03 2.0948403e+05 +264 0.536 9.0305221e+03 1.9956705e+05 +265 0.538 8.6408821e+03 1.9015468e+05 +266 0.54 8.2695852e+03 1.8121950e+05 +267 0.542 7.9157032e+03 1.7273567e+05 +268 0.544 7.5783579e+03 1.6467885e+05 +269 0.546 7.2567185e+03 1.5702609e+05 +270 0.548 6.9499987e+03 1.4975574e+05 +271 0.55 6.6574542e+03 1.4284740e+05 +272 0.552 6.3783806e+03 1.3628182e+05 +273 0.554 6.1121106e+03 1.3004084e+05 +274 0.556 5.8580123e+03 1.2410731e+05 +275 0.558 5.6154872e+03 1.1846506e+05 +276 0.56 5.3839681e+03 1.1309881e+05 +277 0.562 5.1629175e+03 1.0799415e+05 +278 0.564 4.9518262e+03 1.0313745e+05 +279 0.566 4.7502110e+03 9.8515849e+04 +280 0.568 4.5576142e+03 9.4117187e+04 +281 0.57 4.3736013e+03 8.9929977e+04 +282 0.572 4.1977606e+03 8.5943360e+04 +283 0.574 4.0297010e+03 8.2147069e+04 +284 0.576 3.8690519e+03 7.8531396e+04 +285 0.578 3.7154612e+03 7.5087160e+04 +286 0.58 3.5685947e+03 7.1805676e+04 +287 0.582 3.4281354e+03 6.8678727e+04 +288 0.584 3.2937820e+03 6.5698537e+04 +289 0.586 3.1652484e+03 6.2857744e+04 +290 0.588 3.0422627e+03 6.0149383e+04 +291 0.59 2.9245670e+03 5.7566854e+04 +292 0.592 2.8119156e+03 5.5103910e+04 +293 0.594 2.7040755e+03 5.2754633e+04 +294 0.596 2.6008251e+03 5.0513417e+04 +295 0.598 2.5019534e+03 4.8374948e+04 +296 0.6 2.4072601e+03 4.6334192e+04 +297 0.602 2.3165547e+03 4.4386376e+04 +298 0.604 2.2296557e+03 4.2526975e+04 +299 0.606 2.1463907e+03 4.0751700e+04 +300 0.608 2.0665955e+03 3.9056480e+04 +301 0.61 1.9901140e+03 3.7437456e+04 +302 0.612 1.9167973e+03 3.5890967e+04 +303 0.614 1.8465041e+03 3.4413537e+04 +304 0.616 1.7790994e+03 3.3001869e+04 +305 0.618 1.7144548e+03 3.1652833e+04 +306 0.62 1.6524483e+03 3.0363457e+04 +307 0.622 1.5929631e+03 2.9130918e+04 +308 0.624 1.5358885e+03 2.7952538e+04 +309 0.626 1.4811186e+03 2.6825771e+04 +310 0.628 1.4285526e+03 2.5748198e+04 +311 0.63 1.3780945e+03 2.4717522e+04 +312 0.632 1.3296527e+03 2.3731559e+04 +313 0.634 1.2831399e+03 2.2788233e+04 +314 0.636 1.2384727e+03 2.1885573e+04 +315 0.638 1.1955717e+03 2.1021701e+04 +316 0.64 1.1543612e+03 2.0194835e+04 +317 0.642 1.1147688e+03 1.9403277e+04 +318 0.644 1.0767256e+03 1.8645414e+04 +319 0.646 1.0401657e+03 1.7919710e+04 +320 0.648 1.0050263e+03 1.7224705e+04 +321 0.65 9.7124738e+02 1.6559008e+04 +322 0.652 9.3877163e+02 1.5921295e+04 +323 0.654 9.0754438e+02 1.5310308e+04 +324 0.656 8.7751339e+02 1.4724847e+04 +325 0.658 8.4862874e+02 1.4163769e+04 +326 0.66 8.2084278e+02 1.3625987e+04 +327 0.662 7.9410996e+02 1.3110464e+04 +328 0.664 7.6838675e+02 1.2616214e+04 +329 0.666 7.4363155e+02 1.2142295e+04 +330 0.668 7.1980461e+02 1.1687813e+04 +331 0.67 6.9686791e+02 1.1251912e+04 +332 0.672 6.7478512e+02 1.0833778e+04 +333 0.674 6.5352147e+02 1.0432635e+04 +334 0.676 6.3304375e+02 1.0047742e+04 +335 0.678 6.1332014e+02 9.6783941e+03 +336 0.68 5.9432026e+02 9.3239177e+03 +337 0.682 5.7601499e+02 8.9836705e+03 +338 0.684 5.5837650e+02 8.6570398e+03 +339 0.686 5.4137814e+02 8.3434410e+03 +340 0.688 5.2499442e+02 8.0423163e+03 +341 0.69 5.0920092e+02 7.7531330e+03 +342 0.692 4.9397426e+02 7.4753830e+03 +343 0.694 4.7929209e+02 7.2085809e+03 +344 0.696 4.6513295e+02 6.9522634e+03 +345 0.698 4.5147634e+02 6.7059882e+03 +346 0.7 4.3830259e+02 6.4693326e+03 +347 0.702 4.2559286e+02 6.2418929e+03 +348 0.704 4.1332913e+02 6.0232836e+03 +349 0.706 4.0149409e+02 5.8131362e+03 +350 0.708 3.9007118e+02 5.6110987e+03 +351 0.71 3.7904451e+02 5.4168346e+03 +352 0.712 3.6839887e+02 5.2300223e+03 +353 0.714 3.5811966e+02 5.0503544e+03 +354 0.716 3.4819289e+02 4.8775369e+03 +355 0.718 3.3860513e+02 4.7112889e+03 +356 0.72 3.2934353e+02 4.5513416e+03 +357 0.722 3.2039574e+02 4.3974379e+03 +358 0.724 3.1174991e+02 4.2493319e+03 +359 0.726 3.0339470e+02 4.1067885e+03 +360 0.728 2.9531920e+02 3.9695825e+03 +361 0.73 2.8751296e+02 3.8374987e+03 +362 0.732 2.7996593e+02 3.7103309e+03 +363 0.734 2.7266849e+02 3.5878819e+03 +364 0.736 2.6561138e+02 3.4699629e+03 +365 0.738 2.5878574e+02 3.3563930e+03 +366 0.74 2.5218303e+02 3.2469992e+03 +367 0.742 2.4579507e+02 3.1416158e+03 +368 0.744 2.3961400e+02 3.0400841e+03 +369 0.746 2.3363226e+02 2.9422519e+03 +370 0.748 2.2784262e+02 2.8479737e+03 +371 0.75 2.2223809e+02 2.7571100e+03 +372 0.752 2.1681199e+02 2.6695270e+03 +373 0.754 2.1155788e+02 2.5850967e+03 +374 0.756 2.0646959e+02 2.5036964e+03 +375 0.758 2.0154116e+02 2.4252082e+03 +376 0.76 1.9676689e+02 2.3495195e+03 +377 0.762 1.9214128e+02 2.2765221e+03 +378 0.764 1.8765907e+02 2.2061124e+03 +379 0.766 1.8331518e+02 2.1381908e+03 +380 0.768 1.7910471e+02 2.0726622e+03 +381 0.77 1.7502299e+02 2.0094349e+03 +382 0.772 1.7106550e+02 1.9484214e+03 +383 0.774 1.6722789e+02 1.8895375e+03 +384 0.776 1.6350598e+02 1.8327024e+03 +385 0.778 1.5989576e+02 1.7778387e+03 +386 0.78 1.5639336e+02 1.7248720e+03 +387 0.782 1.5299506e+02 1.6737311e+03 +388 0.784 1.4969727e+02 1.6243473e+03 +389 0.786 1.4649654e+02 1.5766551e+03 +390 0.788 1.4338956e+02 1.5305912e+03 +391 0.79 1.4037313e+02 1.4860951e+03 +392 0.792 1.3744418e+02 1.4431086e+03 +393 0.794 1.3459973e+02 1.4015758e+03 +394 0.796 1.3183694e+02 1.3614431e+03 +395 0.798 1.2915306e+02 1.3226589e+03 +396 0.8 1.2654544e+02 1.2851737e+03 +397 0.802 1.2401153e+02 1.2489398e+03 +398 0.804 1.2154887e+02 1.2139117e+03 +399 0.806 1.1915511e+02 1.1800454e+03 +400 0.808 1.1682795e+02 1.1472986e+03 +401 0.81 1.1456519e+02 1.1156308e+03 +402 0.812 1.1236473e+02 1.0850030e+03 +403 0.814 1.1022451e+02 1.0553777e+03 +404 0.816 1.0814257e+02 1.0267188e+03 +405 0.818 1.0611702e+02 9.9899178e+02 +406 0.82 1.0414601e+02 9.7216317e+02 +407 0.822 1.0222779e+02 9.4620098e+02 +408 0.824 1.0036065e+02 9.2107438e+02 +409 0.826 9.8542951e+01 8.9675373e+02 +410 0.828 9.6773114e+01 8.7321048e+02 +411 0.83 9.5049610e+01 8.5041722e+02 +412 0.832 9.3370963e+01 8.2834752e+02 +413 0.834 9.1735754e+01 8.0697600e+02 +414 0.836 9.0142610e+01 7.8627819e+02 +415 0.838 8.8590208e+01 7.6623057e+02 +416 0.84 8.7077270e+01 7.4681049e+02 +417 0.842 8.5602562e+01 7.2799614e+02 +418 0.844 8.4164895e+01 7.0976654e+02 +419 0.846 8.2763120e+01 6.9210148e+02 +420 0.848 8.1396126e+01 6.7498150e+02 +421 0.85 8.0062843e+01 6.5838786e+02 +422 0.852 7.8762236e+01 6.4230252e+02 +423 0.854 7.7493305e+01 6.2670809e+02 +424 0.856 7.6255087e+01 6.1158784e+02 +425 0.858 7.5046649e+01 5.9692564e+02 +426 0.86 7.3867090e+01 5.8270595e+02 +427 0.862 7.2715540e+01 5.6891381e+02 +428 0.864 7.1591159e+01 5.5553477e+02 +429 0.866 7.0493135e+01 5.4255495e+02 +430 0.868 6.9420682e+01 5.2996095e+02 +431 0.87 6.8373042e+01 5.1773985e+02 +432 0.872 6.7349482e+01 5.0587921e+02 +433 0.874 6.6349293e+01 4.9436703e+02 +434 0.876 6.5371790e+01 4.8319173e+02 +435 0.878 6.4416309e+01 4.7234218e+02 +436 0.88 6.3482211e+01 4.6180760e+02 +437 0.882 6.2568876e+01 4.5157763e+02 +438 0.884 6.1675704e+01 4.4164227e+02 +439 0.886 6.0802116e+01 4.3199186e+02 +440 0.888 5.9947553e+01 4.2261711e+02 +441 0.89 5.9111470e+01 4.1350903e+02 +442 0.892 5.8293345e+01 4.0465896e+02 +443 0.894 5.7492668e+01 3.9605855e+02 +444 0.896 5.6708949e+01 3.8769973e+02 +445 0.898 5.5941713e+01 3.7957471e+02 +446 0.9 5.5190500e+01 3.7167600e+02 +447 0.902 5.4454863e+01 3.6399633e+02 +448 0.904 5.3734373e+01 3.5652872e+02 +449 0.906 5.3028611e+01 3.4926640e+02 +450 0.908 5.2337175e+01 3.4220287e+02 +451 0.91 5.1659672e+01 3.3533181e+02 +452 0.912 5.0995723e+01 3.2864716e+02 +453 0.914 5.0344963e+01 3.2214304e+02 +454 0.916 4.9707035e+01 3.1581379e+02 +455 0.918 4.9081595e+01 3.0965392e+02 +456 0.92 4.8468309e+01 3.0365816e+02 +457 0.922 4.7866856e+01 2.9782138e+02 +458 0.924 4.7276921e+01 2.9213866e+02 +459 0.926 4.6698202e+01 2.8660523e+02 +460 0.928 4.6130404e+01 2.8121648e+02 +461 0.93 4.5573242e+01 2.7596796e+02 +462 0.932 4.5026441e+01 2.7085536e+02 +463 0.934 4.4489733e+01 2.6587454e+02 +464 0.936 4.3962858e+01 2.6102146e+02 +465 0.938 4.3445565e+01 2.5629225e+02 +466 0.94 4.2937609e+01 2.5168315e+02 +467 0.942 4.2438754e+01 2.4719053e+02 +468 0.944 4.1948772e+01 2.4281088e+02 +469 0.946 4.1467438e+01 2.3854081e+02 +470 0.948 4.0994538e+01 2.3437704e+02 +471 0.95 4.0529861e+01 2.3031638e+02 +472 0.952 4.0073205e+01 2.2635578e+02 +473 0.954 3.9624373e+01 2.2249227e+02 +474 0.956 3.9183173e+01 2.1872296e+02 +475 0.958 3.8749420e+01 2.1504509e+02 +476 0.96 3.8322934e+01 2.1145597e+02 +477 0.962 3.7903539e+01 2.0795300e+02 +478 0.964 3.7491066e+01 2.0453365e+02 +479 0.966 3.7085350e+01 2.0119550e+02 +480 0.968 3.6686232e+01 1.9793619e+02 +481 0.97 3.6293555e+01 1.9475344e+02 +482 0.972 3.5907168e+01 1.9164504e+02 +483 0.974 3.5526926e+01 1.8860886e+02 +484 0.976 3.5152686e+01 1.8564282e+02 +485 0.978 3.4784309e+01 1.8274493e+02 +486 0.98 3.4421662e+01 1.7991324e+02 +487 0.982 3.4064614e+01 1.7714589e+02 +488 0.984 3.3713037e+01 1.7444104e+02 +489 0.986 3.3366809e+01 1.7179694e+02 +490 0.988 3.3025810e+01 1.6921189e+02 +491 0.99 3.2689923e+01 1.6668423e+02 +492 0.992 3.2359036e+01 1.6421236e+02 +493 0.994 3.2033038e+01 1.6179473e+02 +494 0.996 3.1711822e+01 1.5942985e+02 +495 0.998 3.1395284e+01 1.5711626e+02 +496 1.0 3.1083323e+01 1.5485254e+02 +497 1.002 3.0775841e+01 1.5263733e+02 +498 1.004 3.0472743e+01 1.5046931e+02 +499 1.006 3.0173934e+01 1.4834719e+02 +500 1.008 2.9879324e+01 1.4626974e+02 +501 1.01 2.9588826e+01 1.4423574e+02 +502 1.012 2.9302353e+01 1.4224402e+02 +503 1.014 2.9019822e+01 1.4029346e+02 +504 1.016 2.8741152e+01 1.3838296e+02 +505 1.018 2.8466264e+01 1.3651144e+02 +506 1.02 2.8195081e+01 1.3467788e+02 +507 1.022 2.7927528e+01 1.3288128e+02 +508 1.024 2.7663532e+01 1.3112066e+02 +509 1.026 2.7403022e+01 1.2939508e+02 +510 1.028 2.7145929e+01 1.2770363e+02 +511 1.03 2.6892186e+01 1.2604541e+02 +512 1.032 2.6641726e+01 1.2441958e+02 +513 1.034 2.6394486e+01 1.2282529e+02 +514 1.036 2.6150404e+01 1.2126174e+02 +515 1.038 2.5909419e+01 1.1972814e+02 +516 1.04 2.5671472e+01 1.1822372e+02 +517 1.042 2.5436505e+01 1.1674775e+02 +518 1.044 2.5204463e+01 1.1529950e+02 +519 1.046 2.4975289e+01 1.1387829e+02 +520 1.048 2.4748932e+01 1.1248343e+02 +521 1.05 2.4525339e+01 1.1111426e+02 +522 1.052 2.4304458e+01 1.0977015e+02 +523 1.054 2.4086242e+01 1.0845047e+02 +524 1.056 2.3870640e+01 1.0715463e+02 +525 1.058 2.3657608e+01 1.0588205e+02 +526 1.06 2.3447097e+01 1.0463214e+02 +527 1.062 2.3239064e+01 1.0340436e+02 +528 1.064 2.3033465e+01 1.0219818e+02 +529 1.066 2.2830258e+01 1.0101308e+02 +530 1.068 2.2629399e+01 9.9848543e+01 +531 1.07 2.2430850e+01 9.8704085e+01 +532 1.072 2.2234570e+01 9.7579227e+01 +533 1.074 2.2040520e+01 9.6473506e+01 +534 1.076 2.1848663e+01 9.5386470e+01 +535 1.078 2.1658962e+01 9.4317682e+01 +536 1.08 2.1471381e+01 9.3266715e+01 +537 1.082 2.1285884e+01 9.2233155e+01 +538 1.084 2.1102437e+01 9.1216600e+01 +539 1.086 2.0921006e+01 9.0216658e+01 +540 1.088 2.0741559e+01 8.9232949e+01 +541 1.09 2.0564064e+01 8.8265102e+01 +542 1.092 2.0388489e+01 8.7312758e+01 +543 1.094 2.0214803e+01 8.6375567e+01 +544 1.096 2.0042977e+01 8.5453187e+01 +545 1.098 1.9872980e+01 8.4545289e+01 +546 1.1 1.9704786e+01 8.3651549e+01 +547 1.102 1.9538365e+01 8.2771654e+01 +548 1.104 1.9373690e+01 8.1905300e+01 +549 1.106 1.9210735e+01 8.1052188e+01 +550 1.108 1.9049473e+01 8.0212031e+01 +551 1.11 1.8889878e+01 7.9384548e+01 +552 1.112 1.8731926e+01 7.8569464e+01 +553 1.114 1.8575592e+01 7.7766514e+01 +554 1.116 1.8420852e+01 7.6975438e+01 +555 1.118 1.8267683e+01 7.6195983e+01 +556 1.12 1.8116061e+01 7.5427905e+01 +557 1.122 1.7965964e+01 7.4670963e+01 +558 1.124 1.7817370e+01 7.3924925e+01 +559 1.126 1.7670257e+01 7.3189564e+01 +560 1.128 1.7524605e+01 7.2464658e+01 +561 1.13 1.7380392e+01 7.1749993e+01 +562 1.132 1.7237598e+01 7.1045359e+01 +563 1.134 1.7096204e+01 7.0350550e+01 +564 1.136 1.6956189e+01 6.9665369e+01 +565 1.138 1.6817536e+01 6.8989621e+01 +566 1.14 1.6680225e+01 6.8323117e+01 +567 1.142 1.6544237e+01 6.7665673e+01 +568 1.144 1.6409556e+01 6.7017109e+01 +569 1.146 1.6276163e+01 6.6377250e+01 +570 1.148 1.6144041e+01 6.5745926e+01 +571 1.15 1.6013174e+01 6.5122971e+01 +572 1.152 1.5883544e+01 6.4508221e+01 +573 1.154 1.5755136e+01 6.3901519e+01 +574 1.156 1.5627933e+01 6.3302711e+01 +575 1.158 1.5501920e+01 6.2711646e+01 +576 1.16 1.5377081e+01 6.2128177e+01 +577 1.162 1.5253402e+01 6.1552162e+01 +578 1.164 1.5130868e+01 6.0983461e+01 +579 1.166 1.5009463e+01 6.0421937e+01 +580 1.168 1.4889175e+01 5.9867458e+01 +581 1.17 1.4769989e+01 5.9319894e+01 +582 1.172 1.4651891e+01 5.8779119e+01 +583 1.174 1.4534868e+01 5.8245008e+01 +584 1.176 1.4418907e+01 5.7717441e+01 +585 1.178 1.4303994e+01 5.7196302e+01 +586 1.18 1.4190117e+01 5.6681474e+01 +587 1.182 1.4077264e+01 5.6172845e+01 +588 1.184 1.3965422e+01 5.5670307e+01 +589 1.186 1.3854579e+01 5.5173751e+01 +590 1.188 1.3744723e+01 5.4683075e+01 +591 1.19 1.3635842e+01 5.4198175e+01 +592 1.192 1.3527926e+01 5.3718952e+01 +593 1.194 1.3420963e+01 5.3245308e+01 +594 1.196 1.3314941e+01 5.2777149e+01 +595 1.198 1.3209851e+01 5.2314381e+01 +596 1.2 1.3105680e+01 5.1856914e+01 +597 1.202 1.3002420e+01 5.1404659e+01 +598 1.204 1.2900058e+01 5.0957529e+01 +599 1.206 1.2798586e+01 5.0515440e+01 +600 1.208 1.2697993e+01 5.0078308e+01 +601 1.21 1.2598270e+01 4.9646053e+01 +602 1.212 1.2499406e+01 4.9218595e+01 +603 1.214 1.2401392e+01 4.8795857e+01 +604 1.216 1.2304219e+01 4.8377763e+01 +605 1.218 1.2207878e+01 4.7964238e+01 +606 1.22 1.2112359e+01 4.7555212e+01 +607 1.222 1.2017654e+01 4.7150612e+01 +608 1.224 1.1923754e+01 4.6750369e+01 +609 1.226 1.1830650e+01 4.6354415e+01 +610 1.228 1.1738334e+01 4.5962685e+01 +611 1.23 1.1646796e+01 4.5575113e+01 +612 1.232 1.1556030e+01 4.5191635e+01 +613 1.234 1.1466027e+01 4.4812189e+01 +614 1.236 1.1376779e+01 4.4436714e+01 +615 1.238 1.1288278e+01 4.4065152e+01 +616 1.24 1.1200516e+01 4.3697442e+01 +617 1.242 1.1113485e+01 4.3333529e+01 +618 1.244 1.1027179e+01 4.2973355e+01 +619 1.246 1.0941590e+01 4.2616867e+01 +620 1.248 1.0856709e+01 4.2264011e+01 +621 1.25 1.0772531e+01 4.1914733e+01 +622 1.252 1.0689048e+01 4.1568983e+01 +623 1.254 1.0606253e+01 4.1226709e+01 +624 1.256 1.0524139e+01 4.0887863e+01 +625 1.258 1.0442699e+01 4.0552396e+01 +626 1.26 1.0361927e+01 4.0220261e+01 +627 1.262 1.0281816e+01 3.9891410e+01 +628 1.264 1.0202359e+01 3.9565799e+01 +629 1.266 1.0123551e+01 3.9243382e+01 +630 1.268 1.0045384e+01 3.8924116e+01 +631 1.27 9.9678521e+00 3.8607957e+01 +632 1.272 9.8909498e+00 3.8294864e+01 +633 1.274 9.8146706e+00 3.7984794e+01 +634 1.276 9.7390086e+00 3.7677708e+01 +635 1.278 9.6639578e+00 3.7373566e+01 +636 1.28 9.5895124e+00 3.7072329e+01 +637 1.282 9.5156666e+00 3.6773957e+01 +638 1.284 9.4424147e+00 3.6478415e+01 +639 1.286 9.3697511e+00 3.6185664e+01 +640 1.288 9.2976702e+00 3.5895669e+01 +641 1.29 9.2261666e+00 3.5608394e+01 +642 1.292 9.1552348e+00 3.5323805e+01 +643 1.294 9.0848696e+00 3.5041866e+01 +644 1.296 9.0150656e+00 3.4762545e+01 +645 1.298 8.9458177e+00 3.4485809e+01 +646 1.3 8.8771207e+00 3.4211624e+01 +647 1.302 8.8089695e+00 3.3939960e+01 +648 1.304 8.7413592e+00 3.3670784e+01 +649 1.306 8.6742847e+00 3.3404067e+01 +650 1.308 8.6077413e+00 3.3139778e+01 +651 1.31 8.5417240e+00 3.2877888e+01 +652 1.312 8.4762282e+00 3.2618367e+01 +653 1.314 8.4112490e+00 3.2361187e+01 +654 1.316 8.3467819e+00 3.2106320e+01 +655 1.318 8.2828222e+00 3.1853738e+01 +656 1.32 8.2193654e+00 3.1603414e+01 +657 1.322 8.1564070e+00 3.1355321e+01 +658 1.324 8.0939426e+00 3.1109433e+01 +659 1.326 8.0319679e+00 3.0865725e+01 +660 1.328 7.9704783e+00 3.0624170e+01 +661 1.33 7.9094698e+00 3.0384745e+01 +662 1.332 7.8489379e+00 3.0147424e+01 +663 1.334 7.7888787e+00 2.9912183e+01 +664 1.336 7.7292878e+00 2.9679000e+01 +665 1.338 7.6701613e+00 2.9447849e+01 +666 1.34 7.6114951e+00 2.9218709e+01 +667 1.342 7.5532852e+00 2.8991557e+01 +668 1.344 7.4955276e+00 2.8766370e+01 +669 1.346 7.4382184e+00 2.8543127e+01 +670 1.348 7.3813538e+00 2.8321806e+01 +671 1.35 7.3249299e+00 2.8102387e+01 +672 1.352 7.2689430e+00 2.7884847e+01 +673 1.354 7.2133893e+00 2.7669168e+01 +674 1.356 7.1582651e+00 2.7455327e+01 +675 1.358 7.1035667e+00 2.7243306e+01 +676 1.36 7.0492906e+00 2.7033086e+01 +677 1.362 6.9954332e+00 2.6824646e+01 +678 1.364 6.9419909e+00 2.6617967e+01 +679 1.366 6.8889602e+00 2.6413032e+01 +680 1.368 6.8363376e+00 2.6209822e+01 +681 1.37 6.7841197e+00 2.6008317e+01 +682 1.372 6.7323032e+00 2.5808502e+01 +683 1.374 6.6808846e+00 2.5610357e+01 +684 1.376 6.6298607e+00 2.5413866e+01 +685 1.378 6.5792281e+00 2.5219011e+01 +686 1.38 6.5289836e+00 2.5025776e+01 +687 1.382 6.4791239e+00 2.4834145e+01 +688 1.384 6.4296459e+00 2.4644099e+01 +689 1.386 6.3805465e+00 2.4455625e+01 +690 1.388 6.3318224e+00 2.4268704e+01 +691 1.39 6.2834706e+00 2.4083323e+01 +692 1.392 6.2354881e+00 2.3899466e+01 +693 1.394 6.1878717e+00 2.3717116e+01 +694 1.396 6.1406186e+00 2.3536260e+01 +695 1.398 6.0937257e+00 2.3356882e+01 +696 1.4 6.0471901e+00 2.3178968e+01 +697 1.402 6.0010089e+00 2.3002503e+01 +698 1.404 5.9551791e+00 2.2827473e+01 +699 1.406 5.9096980e+00 2.2653864e+01 +700 1.408 5.8645627e+00 2.2481663e+01 +701 1.41 5.8197705e+00 2.2310855e+01 +702 1.412 5.7753184e+00 2.2141427e+01 +703 1.414 5.7312038e+00 2.1973366e+01 +704 1.416 5.6874240e+00 2.1806659e+01 +705 1.418 5.6439763e+00 2.1641292e+01 +706 1.42 5.6008580e+00 2.1477253e+01 +707 1.422 5.5580664e+00 2.1314530e+01 +708 1.424 5.5155990e+00 2.1153109e+01 +709 1.426 5.4734531e+00 2.0992979e+01 +710 1.428 5.4316262e+00 2.0834128e+01 +711 1.43 5.3901158e+00 2.0676542e+01 +712 1.432 5.3489192e+00 2.0520212e+01 +713 1.434 5.3080341e+00 2.0365124e+01 +714 1.436 5.2674579e+00 2.0211268e+01 +715 1.438 5.2271882e+00 2.0058632e+01 +716 1.44 5.1872226e+00 1.9907205e+01 +717 1.442 5.1475586e+00 1.9756975e+01 +718 1.444 5.1081939e+00 1.9607932e+01 +719 1.446 5.0691261e+00 1.9460065e+01 +720 1.448 5.0303528e+00 1.9313363e+01 +721 1.45 4.9918719e+00 1.9167815e+01 +722 1.452 4.9536808e+00 1.9023412e+01 +723 1.454 4.9157775e+00 1.8880142e+01 +724 1.456 4.8781595e+00 1.8737996e+01 +725 1.458 4.8408247e+00 1.8596964e+01 +726 1.46 4.8037709e+00 1.8457035e+01 +727 1.462 4.7669959e+00 1.8318199e+01 +728 1.464 4.7304974e+00 1.8180448e+01 +729 1.466 4.6942734e+00 1.8043771e+01 +730 1.468 4.6583216e+00 1.7908158e+01 +731 1.47 4.6226400e+00 1.7773602e+01 +732 1.472 4.5872265e+00 1.7640091e+01 +733 1.474 4.5520790e+00 1.7507617e+01 +734 1.476 4.5171953e+00 1.7376171e+01 +735 1.478 4.4825736e+00 1.7245744e+01 +736 1.48 4.4482117e+00 1.7116326e+01 +737 1.482 4.4141076e+00 1.6987910e+01 +738 1.484 4.3802594e+00 1.6860487e+01 +739 1.486 4.3466650e+00 1.6734048e+01 +740 1.488 4.3133226e+00 1.6608584e+01 +741 1.49 4.2802300e+00 1.6484087e+01 +742 1.492 4.2473856e+00 1.6360548e+01 +743 1.494 4.2147872e+00 1.6237961e+01 +744 1.496 4.1824331e+00 1.6116315e+01 +745 1.498 4.1503213e+00 1.5995604e+01 +746 1.5 4.1184501e+00 1.5875820e+01 +747 1.502 4.0868174e+00 1.5756954e+01 +748 1.504 4.0554216e+00 1.5638999e+01 +749 1.506 4.0242608e+00 1.5521947e+01 +750 1.508 3.9933333e+00 1.5405790e+01 +751 1.51 3.9626371e+00 1.5290522e+01 +752 1.512 3.9321706e+00 1.5176133e+01 +753 1.514 3.9019320e+00 1.5062618e+01 +754 1.516 3.8719195e+00 1.4949969e+01 +755 1.518 3.8421315e+00 1.4838178e+01 +756 1.52 3.8125662e+00 1.4727239e+01 +757 1.522 3.7832220e+00 1.4617144e+01 +758 1.524 3.7540971e+00 1.4507886e+01 +759 1.526 3.7251899e+00 1.4399458e+01 +760 1.528 3.6964987e+00 1.4291854e+01 +761 1.53 3.6680219e+00 1.4185067e+01 +762 1.532 3.6397579e+00 1.4079090e+01 +763 1.534 3.6117051e+00 1.3973916e+01 +764 1.536 3.5838617e+00 1.3869539e+01 +765 1.538 3.5562264e+00 1.3765952e+01 +766 1.54 3.5287974e+00 1.3663149e+01 +767 1.542 3.5015733e+00 1.3561123e+01 +768 1.544 3.4745524e+00 1.3459868e+01 +769 1.546 3.4477333e+00 1.3359378e+01 +770 1.548 3.4211144e+00 1.3259646e+01 +771 1.55 3.3946942e+00 1.3160667e+01 +772 1.552 3.3684712e+00 1.3062434e+01 +773 1.554 3.3424440e+00 1.2964941e+01 +774 1.556 3.3166110e+00 1.2868182e+01 +775 1.558 3.2909707e+00 1.2772152e+01 +776 1.56 3.2655219e+00 1.2676845e+01 +777 1.562 3.2402629e+00 1.2582254e+01 +778 1.564 3.2151924e+00 1.2488373e+01 +779 1.566 3.1903089e+00 1.2395199e+01 +780 1.568 3.1656111e+00 1.2302723e+01 +781 1.57 3.1410976e+00 1.2210942e+01 +782 1.572 3.1167669e+00 1.2119849e+01 +783 1.574 3.0926177e+00 1.2029439e+01 +784 1.576 3.0686487e+00 1.1939707e+01 +785 1.578 3.0448584e+00 1.1850647e+01 +786 1.58 3.0212456e+00 1.1762254e+01 +787 1.582 2.9978090e+00 1.1674522e+01 +788 1.584 2.9745471e+00 1.1587446e+01 +789 1.586 2.9514588e+00 1.1501022e+01 +790 1.588 2.9285426e+00 1.1415244e+01 +791 1.59 2.9057974e+00 1.1330107e+01 +792 1.592 2.8832218e+00 1.1245605e+01 +793 1.594 2.8608145e+00 1.1161734e+01 +794 1.596 2.8385744e+00 1.1078490e+01 +795 1.598 2.8165001e+00 1.0995866e+01 +796 1.6 2.7945905e+00 1.0913858e+01 +797 1.602 2.7728443e+00 1.0832462e+01 +798 1.604 2.7512603e+00 1.0751672e+01 +799 1.606 2.7298372e+00 1.0671484e+01 +800 1.608 2.7085739e+00 1.0591893e+01 +801 1.61 2.6874692e+00 1.0512895e+01 +802 1.612 2.6665220e+00 1.0434484e+01 +803 1.614 2.6457309e+00 1.0356657e+01 +804 1.616 2.6250950e+00 1.0279408e+01 +805 1.618 2.6046129e+00 1.0202734e+01 +806 1.62 2.5842836e+00 1.0126629e+01 +807 1.622 2.5641060e+00 1.0051090e+01 +808 1.624 2.5440789e+00 9.9761122e+00 +809 1.626 2.5242012e+00 9.9016908e+00 +810 1.628 2.5044718e+00 9.8278217e+00 +811 1.63 2.4848895e+00 9.7545009e+00 +812 1.632 2.4654534e+00 9.6817239e+00 +813 1.634 2.4461623e+00 9.6094867e+00 +814 1.636 2.4270151e+00 9.5377850e+00 +815 1.638 2.4080108e+00 9.4666148e+00 +816 1.64 2.3891483e+00 9.3959720e+00 +817 1.642 2.3704266e+00 9.3258525e+00 +818 1.644 2.3518445e+00 9.2562523e+00 +819 1.646 2.3334012e+00 9.1871675e+00 +820 1.648 2.3150955e+00 9.1185941e+00 +821 1.65 2.2969265e+00 9.0505283e+00 +822 1.652 2.2788931e+00 8.9829660e+00 +823 1.654 2.2609943e+00 8.9159035e+00 +824 1.656 2.2432291e+00 8.8493371e+00 +825 1.658 2.2255966e+00 8.7832628e+00 +826 1.66 2.2080958e+00 8.7176769e+00 +827 1.662 2.1907256e+00 8.6525758e+00 +828 1.664 2.1734851e+00 8.5879558e+00 +829 1.666 2.1563734e+00 8.5238132e+00 +830 1.668 2.1393896e+00 8.4601443e+00 +831 1.67 2.1225326e+00 8.3969456e+00 +832 1.672 2.1058015e+00 8.3342136e+00 +833 1.674 2.0891954e+00 8.2719446e+00 +834 1.676 2.0727134e+00 8.2101352e+00 +835 1.678 2.0563545e+00 8.1487820e+00 +836 1.68 2.0401180e+00 8.0878814e+00 +837 1.682 2.0240027e+00 8.0274300e+00 +838 1.684 2.0080079e+00 7.9674245e+00 +839 1.686 1.9921327e+00 7.9078615e+00 +840 1.688 1.9763762e+00 7.8487377e+00 +841 1.69 1.9607375e+00 7.7900497e+00 +842 1.692 1.9452157e+00 7.7317943e+00 +843 1.694 1.9298100e+00 7.6739682e+00 +844 1.696 1.9145196e+00 7.6165682e+00 +845 1.698 1.8993435e+00 7.5595911e+00 +846 1.7 1.8842809e+00 7.5030337e+00 +847 1.702 1.8693311e+00 7.4468928e+00 +848 1.704 1.8544931e+00 7.3911654e+00 +849 1.706 1.8397661e+00 7.3358484e+00 +850 1.708 1.8251494e+00 7.2809386e+00 +851 1.71 1.8106421e+00 7.2264330e+00 +852 1.712 1.7962434e+00 7.1723286e+00 +853 1.714 1.7819525e+00 7.1186224e+00 +854 1.716 1.7677686e+00 7.0653115e+00 +855 1.718 1.7536910e+00 7.0123927e+00 +856 1.72 1.7397188e+00 6.9598634e+00 +857 1.722 1.7258513e+00 6.9077204e+00 +858 1.724 1.7120877e+00 6.8559610e+00 +859 1.726 1.6984272e+00 6.8045823e+00 +860 1.728 1.6848691e+00 6.7535814e+00 +861 1.73 1.6714126e+00 6.7029555e+00 +862 1.732 1.6580570e+00 6.6527019e+00 +863 1.734 1.6448016e+00 6.6028178e+00 +864 1.736 1.6316455e+00 6.5533003e+00 +865 1.738 1.6185881e+00 6.5041469e+00 +866 1.74 1.6056287e+00 6.4553548e+00 +867 1.742 1.5927665e+00 6.4069212e+00 +868 1.744 1.5800008e+00 6.3588436e+00 +869 1.746 1.5673309e+00 6.3111193e+00 +870 1.748 1.5547560e+00 6.2637457e+00 +871 1.75 1.5422756e+00 6.2167202e+00 +872 1.752 1.5298889e+00 6.1700401e+00 +873 1.754 1.5175953e+00 6.1237030e+00 +874 1.756 1.5053939e+00 6.0777063e+00 +875 1.758 1.4932842e+00 6.0320475e+00 +876 1.76 1.4812655e+00 5.9867240e+00 +877 1.762 1.4693371e+00 5.9417334e+00 +878 1.764 1.4574983e+00 5.8970732e+00 +879 1.766 1.4457486e+00 5.8527411e+00 +880 1.768 1.4340872e+00 5.8087345e+00 +881 1.77 1.4225134e+00 5.7650510e+00 +882 1.772 1.4110267e+00 5.7216884e+00 +883 1.774 1.3996265e+00 5.6786441e+00 +884 1.776 1.3883119e+00 5.6359158e+00 +885 1.778 1.3770826e+00 5.5935013e+00 +886 1.78 1.3659377e+00 5.5513982e+00 +887 1.782 1.3548768e+00 5.5096042e+00 +888 1.784 1.3438991e+00 5.4681171e+00 +889 1.786 1.3330041e+00 5.4269345e+00 +890 1.788 1.3221912e+00 5.3860542e+00 +891 1.79 1.3114597e+00 5.3454740e+00 +892 1.792 1.3008091e+00 5.3051918e+00 +893 1.794 1.2902387e+00 5.2652052e+00 +894 1.796 1.2797481e+00 5.2255121e+00 +895 1.798 1.2693365e+00 5.1861104e+00 +896 1.8 1.2590034e+00 5.1469979e+00 +897 1.802 1.2487483e+00 5.1081725e+00 +898 1.804 1.2385705e+00 5.0696321e+00 +899 1.806 1.2284696e+00 5.0313746e+00 +900 1.808 1.2184449e+00 4.9933979e+00 +901 1.81 1.2084958e+00 4.9556999e+00 +902 1.812 1.1986219e+00 4.9182787e+00 +903 1.814 1.1888225e+00 4.8811321e+00 +904 1.816 1.1790972e+00 4.8442581e+00 +905 1.818 1.1694453e+00 4.8076549e+00 +906 1.82 1.1598664e+00 4.7713202e+00 +907 1.822 1.1503598e+00 4.7352523e+00 +908 1.824 1.1409252e+00 4.6994492e+00 +909 1.826 1.1315619e+00 4.6639088e+00 +910 1.828 1.1222694e+00 4.6286293e+00 +911 1.83 1.1130472e+00 4.5936088e+00 +912 1.832 1.1038948e+00 4.5588453e+00 +913 1.834 1.0948116e+00 4.5243371e+00 +914 1.836 1.0857972e+00 4.4900821e+00 +915 1.838 1.0768511e+00 4.4560786e+00 +916 1.84 1.0679728e+00 4.4223248e+00 +917 1.842 1.0591617e+00 4.3888187e+00 +918 1.844 1.0504173e+00 4.3555586e+00 +919 1.846 1.0417393e+00 4.3225427e+00 +920 1.848 1.0331270e+00 4.2897692e+00 +921 1.85 1.0245800e+00 4.2572363e+00 +922 1.852 1.0160979e+00 4.2249423e+00 +923 1.854 1.0076801e+00 4.1928854e+00 +924 1.856 9.9932619e-01 4.1610639e+00 +925 1.858 9.9103569e-01 4.1294761e+00 +926 1.86 9.8280814e-01 4.0981203e+00 +927 1.862 9.7464306e-01 4.0669947e+00 +928 1.864 9.6654000e-01 4.0360977e+00 +929 1.866 9.5849852e-01 4.0054276e+00 +930 1.868 9.5051814e-01 3.9749827e+00 +931 1.87 9.4259844e-01 3.9447615e+00 +932 1.872 9.3473895e-01 3.9147623e+00 +933 1.874 9.2693924e-01 3.8849834e+00 +934 1.876 9.1919887e-01 3.8554233e+00 +935 1.878 9.1151740e-01 3.8260803e+00 +936 1.88 9.0389441e-01 3.7969530e+00 +937 1.882 8.9632945e-01 3.7680396e+00 +938 1.884 8.8882211e-01 3.7393387e+00 +939 1.886 8.8137195e-01 3.7108486e+00 +940 1.888 8.7397857e-01 3.6825680e+00 +941 1.89 8.6664154e-01 3.6544951e+00 +942 1.892 8.5936045e-01 3.6266286e+00 +943 1.894 8.5213489e-01 3.5989669e+00 +944 1.896 8.4496445e-01 3.5715085e+00 +945 1.898 8.3784872e-01 3.5442520e+00 +946 1.9 8.3078731e-01 3.5171958e+00 +947 1.902 8.2377981e-01 3.4903385e+00 +948 1.904 8.1682582e-01 3.4636787e+00 +949 1.906 8.0992496e-01 3.4372149e+00 +950 1.908 8.0307683e-01 3.4109457e+00 +951 1.91 7.9628105e-01 3.3848697e+00 +952 1.912 7.8953723e-01 3.3589855e+00 +953 1.914 7.8284498e-01 3.3332916e+00 +954 1.916 7.7620393e-01 3.3077868e+00 +955 1.918 7.6961371e-01 3.2824695e+00 +956 1.92 7.6307393e-01 3.2573385e+00 +957 1.922 7.5658423e-01 3.2323925e+00 +958 1.924 7.5014424e-01 3.2076299e+00 +959 1.926 7.4375359e-01 3.1830496e+00 +960 1.928 7.3741192e-01 3.1586501e+00 +961 1.93 7.3111887e-01 3.1344303e+00 +962 1.932 7.2487408e-01 3.1103887e+00 +963 1.934 7.1867720e-01 3.0865240e+00 +964 1.936 7.1252787e-01 3.0628351e+00 +965 1.938 7.0642574e-01 3.0393206e+00 +966 1.94 7.0037047e-01 3.0159792e+00 +967 1.942 6.9436171e-01 2.9928097e+00 +968 1.944 6.8839912e-01 2.9698108e+00 +969 1.946 6.8248235e-01 2.9469813e+00 +970 1.948 6.7661108e-01 2.9243200e+00 +971 1.95 6.7078496e-01 2.9018256e+00 +972 1.952 6.6500367e-01 2.8794969e+00 +973 1.954 6.5926686e-01 2.8573328e+00 +974 1.956 6.5357423e-01 2.8353319e+00 +975 1.958 6.4792543e-01 2.8134933e+00 +976 1.96 6.4232015e-01 2.7918155e+00 +977 1.962 6.3675806e-01 2.7702976e+00 +978 1.964 6.3123885e-01 2.7489383e+00 +979 1.966 6.2576220e-01 2.7277365e+00 +980 1.968 6.2032780e-01 2.7066910e+00 +981 1.97 6.1493533e-01 2.6858007e+00 +982 1.972 6.0958450e-01 2.6650644e+00 +983 1.974 6.0427497e-01 2.6444812e+00 +984 1.976 5.9900647e-01 2.6240497e+00 +985 1.978 5.9377868e-01 2.6037690e+00 +986 1.98 5.8859129e-01 2.5836379e+00 +987 1.982 5.8344402e-01 2.5636554e+00 +988 1.984 5.7833657e-01 2.5438204e+00 +989 1.986 5.7326865e-01 2.5241318e+00 +990 1.988 5.6823995e-01 2.5045885e+00 +991 1.99 5.6325020e-01 2.4851895e+00 +992 1.992 5.5829910e-01 2.4659337e+00 +993 1.994 5.5338637e-01 2.4468202e+00 +994 1.996 5.4851172e-01 2.4278478e+00 +995 1.998 5.4367488e-01 2.4090155e+00 +996 2.0 5.3887557e-01 2.3903224e+00 +997 2.002 5.3411350e-01 2.3717674e+00 +998 2.004 5.2938841e-01 2.3533495e+00 +999 2.006 5.2470001e-01 2.3350677e+00 +1000 2.008 5.2004804e-01 2.3169211e+00 +1001 2.01 5.1543224e-01 2.2989085e+00 +1002 2.012 5.1085232e-01 2.2810292e+00 +1003 2.014 5.0630803e-01 2.2632821e+00 +1004 2.016 5.0179911e-01 2.2456662e+00 +1005 2.018 4.9732528e-01 2.2281806e+00 +1006 2.02 4.9288630e-01 2.2108244e+00 +1007 2.022 4.8848190e-01 2.1935965e+00 +1008 2.024 4.8411183e-01 2.1764962e+00 +1009 2.026 4.7977583e-01 2.1595224e+00 +1010 2.028 4.7547365e-01 2.1426742e+00 +1011 2.03 4.7120505e-01 2.1259507e+00 +1012 2.032 4.6696977e-01 2.1093511e+00 +1013 2.034 4.6276756e-01 2.0928744e+00 +1014 2.036 4.5859819e-01 2.0765197e+00 +1015 2.038 4.5446140e-01 2.0602861e+00 +1016 2.04 4.5035696e-01 2.0441728e+00 +1017 2.042 4.4628463e-01 2.0281789e+00 +1018 2.044 4.4224417e-01 2.0123035e+00 +1019 2.046 4.3823534e-01 1.9965458e+00 +1020 2.048 4.3425791e-01 1.9809048e+00 +1021 2.05 4.3031164e-01 1.9653799e+00 +1022 2.052 4.2639631e-01 1.9499700e+00 +1023 2.054 4.2251169e-01 1.9346744e+00 +1024 2.056 4.1865754e-01 1.9194923e+00 +1025 2.058 4.1483364e-01 1.9044228e+00 +1026 2.06 4.1103977e-01 1.8894651e+00 +1027 2.062 4.0727571e-01 1.8746184e+00 +1028 2.064 4.0354123e-01 1.8598819e+00 +1029 2.066 3.9983611e-01 1.8452548e+00 +1030 2.068 3.9616013e-01 1.8307363e+00 +1031 2.07 3.9251309e-01 1.8163256e+00 +1032 2.072 3.8889476e-01 1.8020219e+00 +1033 2.074 3.8530493e-01 1.7878245e+00 +1034 2.076 3.8174339e-01 1.7737325e+00 +1035 2.078 3.7820993e-01 1.7597453e+00 +1036 2.08 3.7470434e-01 1.7458620e+00 +1037 2.082 3.7122642e-01 1.7320819e+00 +1038 2.084 3.6777595e-01 1.7184042e+00 +1039 2.086 3.6435273e-01 1.7048283e+00 +1040 2.088 3.6095657e-01 1.6913533e+00 +1041 2.09 3.5758725e-01 1.6779785e+00 +1042 2.092 3.5424459e-01 1.6647033e+00 +1043 2.094 3.5092837e-01 1.6515268e+00 +1044 2.096 3.4763841e-01 1.6384484e+00 +1045 2.098 3.4437451e-01 1.6254674e+00 +1046 2.1 3.4113648e-01 1.6125830e+00 +1047 2.102 3.3792412e-01 1.5997945e+00 +1048 2.104 3.3473724e-01 1.5871013e+00 +1049 2.106 3.3157565e-01 1.5745026e+00 +1050 2.108 3.2843916e-01 1.5619978e+00 +1051 2.11 3.2532760e-01 1.5495862e+00 +1052 2.112 3.2224076e-01 1.5372671e+00 +1053 2.114 3.1917847e-01 1.5250398e+00 +1054 2.116 3.1614054e-01 1.5129037e+00 +1055 2.118 3.1312679e-01 1.5008581e+00 +1056 2.12 3.1013705e-01 1.4889023e+00 +1057 2.122 3.0717112e-01 1.4770358e+00 +1058 2.124 3.0422884e-01 1.4652578e+00 +1059 2.126 3.0131003e-01 1.4535676e+00 +1060 2.128 2.9841451e-01 1.4419648e+00 +1061 2.13 2.9554212e-01 1.4304486e+00 +1062 2.132 2.9269266e-01 1.4190184e+00 +1063 2.134 2.8986599e-01 1.4076735e+00 +1064 2.136 2.8706191e-01 1.3964134e+00 +1065 2.138 2.8428028e-01 1.3852375e+00 +1066 2.14 2.8152091e-01 1.3741451e+00 +1067 2.142 2.7878364e-01 1.3631356e+00 +1068 2.144 2.7606831e-01 1.3522084e+00 +1069 2.146 2.7337475e-01 1.3413629e+00 +1070 2.148 2.7070280e-01 1.3305986e+00 +1071 2.15 2.6805230e-01 1.3199148e+00 +1072 2.152 2.6542309e-01 1.3093109e+00 +1073 2.154 2.6281501e-01 1.2987864e+00 +1074 2.156 2.6022789e-01 1.2883407e+00 +1075 2.158 2.5766159e-01 1.2779732e+00 +1076 2.16 2.5511595e-01 1.2676834e+00 +1077 2.162 2.5259081e-01 1.2574706e+00 +1078 2.164 2.5008601e-01 1.2473344e+00 +1079 2.166 2.4760142e-01 1.2372741e+00 +1080 2.168 2.4513687e-01 1.2272893e+00 +1081 2.17 2.4269221e-01 1.2173793e+00 +1082 2.172 2.4026730e-01 1.2075436e+00 +1083 2.174 2.3786199e-01 1.1977817e+00 +1084 2.176 2.3547613e-01 1.1880931e+00 +1085 2.178 2.3310957e-01 1.1784771e+00 +1086 2.18 2.3076217e-01 1.1689334e+00 +1087 2.182 2.2843379e-01 1.1594612e+00 +1088 2.184 2.2612428e-01 1.1500603e+00 +1089 2.186 2.2383350e-01 1.1407299e+00 +1090 2.188 2.2156131e-01 1.1314696e+00 +1091 2.19 2.1930757e-01 1.1222789e+00 +1092 2.192 2.1707215e-01 1.1131573e+00 +1093 2.194 2.1485490e-01 1.1041043e+00 +1094 2.196 2.1265569e-01 1.0951194e+00 +1095 2.198 2.1047438e-01 1.0862020e+00 +1096 2.2 2.0831083e-01 1.0773518e+00 +1097 2.202 2.0616492e-01 1.0685681e+00 +1098 2.204 2.0403652e-01 1.0598505e+00 +1099 2.206 2.0192548e-01 1.0511986e+00 +1100 2.208 1.9983168e-01 1.0426119e+00 +1101 2.21 1.9775499e-01 1.0340898e+00 +1102 2.212 1.9569528e-01 1.0256320e+00 +1103 2.214 1.9365242e-01 1.0172378e+00 +1104 2.216 1.9162628e-01 1.0089070e+00 +1105 2.218 1.8961675e-01 1.0006390e+00 +1106 2.22 1.8762369e-01 9.9243332e-01 +1107 2.222 1.8564697e-01 9.8428956e-01 +1108 2.224 1.8368649e-01 9.7620725e-01 +1109 2.226 1.8174210e-01 9.6818596e-01 +1110 2.228 1.7981370e-01 9.6022522e-01 +1111 2.23 1.7790116e-01 9.5232459e-01 +1112 2.232 1.7600436e-01 9.4448365e-01 +1113 2.234 1.7412319e-01 9.3670196e-01 +1114 2.236 1.7225752e-01 9.2897907e-01 +1115 2.238 1.7040723e-01 9.2131457e-01 +1116 2.24 1.6857222e-01 9.1370802e-01 +1117 2.242 1.6675236e-01 9.0615901e-01 +1118 2.244 1.6494755e-01 8.9866711e-01 +1119 2.246 1.6315766e-01 8.9123191e-01 +1120 2.248 1.6138258e-01 8.8385299e-01 +1121 2.25 1.5962221e-01 8.7652994e-01 +1122 2.252 1.5787642e-01 8.6926236e-01 +1123 2.254 1.5614512e-01 8.6204984e-01 +1124 2.256 1.5442819e-01 8.5489197e-01 +1125 2.258 1.5272552e-01 8.4778836e-01 +1126 2.26 1.5103700e-01 8.4073862e-01 +1127 2.262 1.4936253e-01 8.3374234e-01 +1128 2.264 1.4770199e-01 8.2679914e-01 +1129 2.266 1.4605530e-01 8.1990863e-01 +1130 2.268 1.4442232e-01 8.1307042e-01 +1131 2.27 1.4280298e-01 8.0628413e-01 +1132 2.272 1.4119715e-01 7.9954939e-01 +1133 2.274 1.3960475e-01 7.9286581e-01 +1134 2.276 1.3802566e-01 7.8623303e-01 +1135 2.278 1.3645978e-01 7.7965066e-01 +1136 2.28 1.3490702e-01 7.7311835e-01 +1137 2.282 1.3336727e-01 7.6663572e-01 +1138 2.284 1.3184044e-01 7.6020242e-01 +1139 2.286 1.3032643e-01 7.5381807e-01 +1140 2.288 1.2882514e-01 7.4748233e-01 +1141 2.29 1.2733647e-01 7.4119484e-01 +1142 2.292 1.2586033e-01 7.3495524e-01 +1143 2.294 1.2439662e-01 7.2876319e-01 +1144 2.296 1.2294524e-01 7.2261833e-01 +1145 2.298 1.2150611e-01 7.1652032e-01 +1146 2.3 1.2007913e-01 7.1046882e-01 +1147 2.302 1.1866421e-01 7.0446349e-01 +1148 2.304 1.1726125e-01 6.9850399e-01 +1149 2.306 1.1587016e-01 6.9258998e-01 +1150 2.308 1.1449086e-01 6.8672113e-01 +1151 2.31 1.1312325e-01 6.8089711e-01 +1152 2.312 1.1176724e-01 6.7511759e-01 +1153 2.314 1.1042275e-01 6.6938225e-01 +1154 2.316 1.0908968e-01 6.6369075e-01 +1155 2.318 1.0776796e-01 6.5804279e-01 +1156 2.32 1.0645748e-01 6.5243804e-01 +1157 2.322 1.0515817e-01 6.4687618e-01 +1158 2.324 1.0386995e-01 6.4135690e-01 +1159 2.326 1.0259272e-01 6.3587989e-01 +1160 2.328 1.0132640e-01 6.3044484e-01 +1161 2.33 1.0007091e-01 6.2505143e-01 +1162 2.332 9.8826168e-02 6.1969937e-01 +1163 2.334 9.7592087e-02 6.1438835e-01 +1164 2.336 9.6368587e-02 6.0911807e-01 +1165 2.338 9.5155588e-02 6.0388823e-01 +1166 2.34 9.3953007e-02 5.9869854e-01 +1167 2.342 9.2760767e-02 5.9354869e-01 +1168 2.344 9.1578786e-02 5.8843840e-01 +1169 2.346 9.0406987e-02 5.8336738e-01 +1170 2.348 8.9245291e-02 5.7833533e-01 +1171 2.35 8.8093620e-02 5.7334198e-01 +1172 2.352 8.6951897e-02 5.6838703e-01 +1173 2.354 8.5820046e-02 5.6347021e-01 +1174 2.356 8.4697991e-02 5.5859123e-01 +1175 2.358 8.3585656e-02 5.5374982e-01 +1176 2.36 8.2482967e-02 5.4894570e-01 +1177 2.362 8.1389849e-02 5.4417860e-01 +1178 2.364 8.0306228e-02 5.3944825e-01 +1179 2.366 7.9232032e-02 5.3475436e-01 +1180 2.368 7.8167187e-02 5.3009669e-01 +1181 2.37 7.7111621e-02 5.2547495e-01 +1182 2.372 7.6065263e-02 5.2088889e-01 +1183 2.374 7.5028042e-02 5.1633824e-01 +1184 2.376 7.3999887e-02 5.1182275e-01 +1185 2.378 7.2980727e-02 5.0734215e-01 +1186 2.38 7.1970495e-02 5.0289619e-01 +1187 2.382 7.0969120e-02 4.9848460e-01 +1188 2.384 6.9976534e-02 4.9410715e-01 +1189 2.386 6.8992669e-02 4.8976358e-01 +1190 2.388 6.8017457e-02 4.8545363e-01 +1191 2.39 6.7050832e-02 4.8117707e-01 +1192 2.392 6.6092727e-02 4.7693363e-01 +1193 2.394 6.5143075e-02 4.7272309e-01 +1194 2.396 6.4201813e-02 4.6854520e-01 +1195 2.398 6.3268873e-02 4.6439972e-01 +1196 2.4 6.2344192e-02 4.6028640e-01 +1197 2.402 6.1427706e-02 4.5620502e-01 +1198 2.404 6.0519351e-02 4.5215533e-01 +1199 2.406 5.9619064e-02 4.4813710e-01 +1200 2.408 5.8726782e-02 4.4415010e-01 +1201 2.41 5.7842443e-02 4.4019411e-01 +1202 2.412 5.6965985e-02 4.3626888e-01 +1203 2.414 5.6097347e-02 4.3237420e-01 +1204 2.416 5.5236468e-02 4.2850984e-01 +1205 2.418 5.4383287e-02 4.2467557e-01 +1206 2.42 5.3537746e-02 4.2087117e-01 +1207 2.422 5.2699783e-02 4.1709643e-01 +1208 2.424 5.1869340e-02 4.1335112e-01 +1209 2.426 5.1046359e-02 4.0963502e-01 +1210 2.428 5.0230781e-02 4.0594792e-01 +1211 2.43 4.9422548e-02 4.0228961e-01 +1212 2.432 4.8621603e-02 3.9865988e-01 +1213 2.434 4.7827890e-02 3.9505850e-01 +1214 2.436 4.7041351e-02 3.9148527e-01 +1215 2.438 4.6261930e-02 3.8793999e-01 +1216 2.44 4.5489572e-02 3.8442245e-01 +1217 2.442 4.4724222e-02 3.8093244e-01 +1218 2.444 4.3965824e-02 3.7746975e-01 +1219 2.446 4.3214325e-02 3.7403419e-01 +1220 2.448 4.2469669e-02 3.7062556e-01 +1221 2.45 4.1731805e-02 3.6724365e-01 +1222 2.452 4.1000677e-02 3.6388827e-01 +1223 2.454 4.0276234e-02 3.6055922e-01 +1224 2.456 3.9558423e-02 3.5725631e-01 +1225 2.458 3.8847192e-02 3.5397934e-01 +1226 2.46 3.8142488e-02 3.5072813e-01 +1227 2.462 3.7444262e-02 3.4750247e-01 +1228 2.464 3.6752462e-02 3.4430218e-01 +1229 2.466 3.6067036e-02 3.4112707e-01 +1230 2.468 3.5387937e-02 3.3797696e-01 +1231 2.47 3.4715112e-02 3.3485166e-01 +1232 2.472 3.4048514e-02 3.3175099e-01 +1233 2.474 3.3388092e-02 3.2867476e-01 +1234 2.476 3.2733798e-02 3.2562279e-01 +1235 2.478 3.2085585e-02 3.2259490e-01 +1236 2.48 3.1443403e-02 3.1959092e-01 +1237 2.482 3.0807205e-02 3.1661067e-01 +1238 2.484 3.0176944e-02 3.1365396e-01 +1239 2.486 2.9552574e-02 3.1072063e-01 +1240 2.488 2.8934046e-02 3.0781049e-01 +1241 2.49 2.8321316e-02 3.0492339e-01 +1242 2.492 2.7714338e-02 3.0205915e-01 +1243 2.494 2.7113065e-02 2.9921759e-01 +1244 2.496 2.6517452e-02 2.9639855e-01 +1245 2.498 2.5927456e-02 2.9360187e-01 +1246 2.5 2.5343030e-02 2.9082737e-01 +1247 2.502 2.4764131e-02 2.8807489e-01 +1248 2.504 2.4190716e-02 2.8534426e-01 +1249 2.506 2.3622740e-02 2.8263533e-01 +1250 2.508 2.3060160e-02 2.7994793e-01 +1251 2.51 2.2502934e-02 2.7728191e-01 +1252 2.512 2.1951018e-02 2.7463709e-01 +1253 2.514 2.1404371e-02 2.7201334e-01 +1254 2.516 2.0862951e-02 2.6941048e-01 +1255 2.518 2.0326716e-02 2.6682836e-01 +1256 2.52 1.9795624e-02 2.6426683e-01 +1257 2.522 1.9269635e-02 2.6172574e-01 +1258 2.524 1.8748708e-02 2.5920492e-01 +1259 2.526 1.8232802e-02 2.5670424e-01 +1260 2.528 1.7721877e-02 2.5422354e-01 +1261 2.53 1.7215894e-02 2.5176267e-01 +1262 2.532 1.6714813e-02 2.4932148e-01 +1263 2.534 1.6218595e-02 2.4689983e-01 +1264 2.536 1.5727201e-02 2.4449757e-01 +1265 2.538 1.5240592e-02 2.4211456e-01 +1266 2.54 1.4758730e-02 2.3975065e-01 +1267 2.542 1.4281577e-02 2.3740570e-01 +1268 2.544 1.3809095e-02 2.3507956e-01 +1269 2.546 1.3341246e-02 2.3277210e-01 +1270 2.548 1.2877994e-02 2.3048319e-01 +1271 2.55 1.2419301e-02 2.2821267e-01 +1272 2.552 1.1965131e-02 2.2596041e-01 +1273 2.554 1.1515448e-02 2.2372627e-01 +1274 2.556 1.1070214e-02 2.2151013e-01 +1275 2.558 1.0629395e-02 2.1931184e-01 +1276 2.56 1.0192955e-02 2.1713127e-01 +1277 2.562 9.7608584e-03 2.1496829e-01 +1278 2.564 9.3330702e-03 2.1282277e-01 +1279 2.566 8.9095558e-03 2.1069457e-01 +1280 2.568 8.4902805e-03 2.0858356e-01 +1281 2.57 8.0752101e-03 2.0648963e-01 +1282 2.572 7.6643107e-03 2.0441263e-01 +1283 2.574 7.2575484e-03 2.0235245e-01 +1284 2.576 6.8548898e-03 2.0030895e-01 +1285 2.578 6.4563015e-03 1.9828201e-01 +1286 2.58 6.0617507e-03 1.9627151e-01 +1287 2.582 5.6712046e-03 1.9427733e-01 +1288 2.584 5.2846306e-03 1.9229933e-01 +1289 2.586 4.9019966e-03 1.9033740e-01 +1290 2.588 4.5232704e-03 1.8839142e-01 +1291 2.59 4.1484203e-03 1.8646127e-01 +1292 2.592 3.7774148e-03 1.8454683e-01 +1293 2.594 3.4102226e-03 1.8264799e-01 +1294 2.596 3.0468126e-03 1.8076461e-01 +1295 2.598 2.6871539e-03 1.7889660e-01 +1296 2.6 2.3312160e-03 1.7704382e-01 +1297 2.602 1.9789685e-03 1.7520618e-01 +1298 2.604 1.6303813e-03 1.7338355e-01 +1299 2.606 1.2854244e-03 1.7157582e-01 +1300 2.608 9.4406815e-04 1.6978288e-01 +1301 2.61 6.0628309e-04 1.6800462e-01 +1302 2.612 2.7203998e-04 1.6624092e-01 +1303 2.614 -5.8690223e-05 1.6449168e-01 +1304 2.616 -3.8593631e-04 1.6275679e-01 +1305 2.618 -7.0972687e-04 1.6103614e-01 +1306 2.62 -1.0300903e-03 1.5932962e-01 +1307 2.622 -1.3470547e-03 1.5763713e-01 +1308 2.624 -1.6606481e-03 1.5595856e-01 +1309 2.626 -1.9708981e-03 1.5429380e-01 +1310 2.628 -2.2778324e-03 1.5264275e-01 +1311 2.63 -2.5814782e-03 1.5100532e-01 +1312 2.632 -2.8818627e-03 1.4938138e-01 +1313 2.634 -3.1790127e-03 1.4777085e-01 +1314 2.636 -3.4729550e-03 1.4617362e-01 +1315 2.638 -3.7637160e-03 1.4458959e-01 +1316 2.64 -4.0513221e-03 1.4301866e-01 +1317 2.642 -4.3357993e-03 1.4146074e-01 +1318 2.644 -4.6171736e-03 1.3991571e-01 +1319 2.646 -4.8954707e-03 1.3838350e-01 +1320 2.648 -5.1707161e-03 1.3686399e-01 +1321 2.65 -5.4429351e-03 1.3535709e-01 +1322 2.652 -5.7121528e-03 1.3386271e-01 +1323 2.654 -5.9783942e-03 1.3238076e-01 +1324 2.656 -6.2416840e-03 1.3091113e-01 +1325 2.658 -6.5020469e-03 1.2945374e-01 +1326 2.66 -6.7595071e-03 1.2800848e-01 +1327 2.662 -7.0140889e-03 1.2657528e-01 +1328 2.664 -7.2658162e-03 1.2515404e-01 +1329 2.666 -7.5147129e-03 1.2374466e-01 +1330 2.668 -7.7608027e-03 1.2234706e-01 +1331 2.67 -8.0041090e-03 1.2096115e-01 +1332 2.672 -8.2446550e-03 1.1958684e-01 +1333 2.674 -8.4824640e-03 1.1822404e-01 +1334 2.676 -8.7175588e-03 1.1687267e-01 +1335 2.678 -8.9499622e-03 1.1553263e-01 +1336 2.68 -9.1796968e-03 1.1420384e-01 +1337 2.682 -9.4067850e-03 1.1288621e-01 +1338 2.684 -9.6312491e-03 1.1157967e-01 +1339 2.686 -9.8531110e-03 1.1028412e-01 +1340 2.688 -1.0072393e-02 1.0899949e-01 +1341 2.69 -1.0289116e-02 1.0772568e-01 +1342 2.692 -1.0503303e-02 1.0646262e-01 +1343 2.694 -1.0714974e-02 1.0521022e-01 +1344 2.696 -1.0924151e-02 1.0396841e-01 +1345 2.698 -1.1130854e-02 1.0273710e-01 +1346 2.7 -1.1335106e-02 1.0151621e-01 +1347 2.702 -1.1536926e-02 1.0030566e-01 +1348 2.704 -1.1736335e-02 9.9105378e-02 +1349 2.706 -1.1933354e-02 9.7915281e-02 +1350 2.708 -1.2128003e-02 9.6735292e-02 +1351 2.71 -1.2320302e-02 9.5565333e-02 +1352 2.712 -1.2510271e-02 9.4405328e-02 +1353 2.714 -1.2697930e-02 9.3255201e-02 +1354 2.716 -1.2883299e-02 9.2114875e-02 +1355 2.718 -1.3066396e-02 9.0984277e-02 +1356 2.72 -1.3247242e-02 8.9863331e-02 +1357 2.722 -1.3425856e-02 8.8751964e-02 +1358 2.724 -1.3602256e-02 8.7650102e-02 +1359 2.726 -1.3776463e-02 8.6557673e-02 +1360 2.728 -1.3948493e-02 8.5474604e-02 +1361 2.73 -1.4118367e-02 8.4400824e-02 +1362 2.732 -1.4286103e-02 8.3336261e-02 +1363 2.734 -1.4451718e-02 8.2280844e-02 +1364 2.736 -1.4615232e-02 8.1234504e-02 +1365 2.738 -1.4776662e-02 8.0197170e-02 +1366 2.74 -1.4936027e-02 7.9168774e-02 +1367 2.742 -1.5093343e-02 7.8149247e-02 +1368 2.744 -1.5248630e-02 7.7138520e-02 +1369 2.746 -1.5401903e-02 7.6136527e-02 +1370 2.748 -1.5553182e-02 7.5143199e-02 +1371 2.75 -1.5702482e-02 7.4158470e-02 +1372 2.752 -1.5849821e-02 7.3182275e-02 +1373 2.754 -1.5995217e-02 7.2214547e-02 +1374 2.756 -1.6138685e-02 7.1255221e-02 +1375 2.758 -1.6280243e-02 7.0304232e-02 +1376 2.76 -1.6419907e-02 6.9361517e-02 +1377 2.762 -1.6557695e-02 6.8427011e-02 +1378 2.764 -1.6693621e-02 6.7500650e-02 +1379 2.766 -1.6827702e-02 6.6582373e-02 +1380 2.768 -1.6959956e-02 6.5672117e-02 +1381 2.77 -1.7090396e-02 6.4769820e-02 +1382 2.772 -1.7219040e-02 6.3875420e-02 +1383 2.774 -1.7345903e-02 6.2988857e-02 +1384 2.776 -1.7471001e-02 6.2110069e-02 +1385 2.778 -1.7594349e-02 6.1238997e-02 +1386 2.78 -1.7715962e-02 6.0375581e-02 +1387 2.782 -1.7835856e-02 5.9519762e-02 +1388 2.784 -1.7954046e-02 5.8671480e-02 +1389 2.786 -1.8070547e-02 5.7830678e-02 +1390 2.788 -1.8185374e-02 5.6997298e-02 +1391 2.79 -1.8298541e-02 5.6171282e-02 +1392 2.792 -1.8410064e-02 5.5352573e-02 +1393 2.794 -1.8519956e-02 5.4541114e-02 +1394 2.796 -1.8628233e-02 5.3736849e-02 +1395 2.798 -1.8734908e-02 5.2939723e-02 +1396 2.8 -1.8839997e-02 5.2149679e-02 +1397 2.802 -1.8943512e-02 5.1366663e-02 +1398 2.804 -1.9045468e-02 5.0590620e-02 +1399 2.806 -1.9145879e-02 4.9821496e-02 +1400 2.808 -1.9244758e-02 4.9059237e-02 +1401 2.81 -1.9342120e-02 4.8303789e-02 +1402 2.812 -1.9437978e-02 4.7555101e-02 +1403 2.814 -1.9532345e-02 4.6813118e-02 +1404 2.816 -1.9625235e-02 4.6077789e-02 +1405 2.818 -1.9716661e-02 4.5349062e-02 +1406 2.82 -1.9806636e-02 4.4626886e-02 +1407 2.822 -1.9895173e-02 4.3911208e-02 +1408 2.824 -1.9982285e-02 4.3201980e-02 +1409 2.826 -2.0067985e-02 4.2499149e-02 +1410 2.828 -2.0152286e-02 4.1802667e-02 +1411 2.83 -2.0235200e-02 4.1112484e-02 +1412 2.832 -2.0316740e-02 4.0428550e-02 +1413 2.834 -2.0396918e-02 3.9750816e-02 +1414 2.836 -2.0475747e-02 3.9079235e-02 +1415 2.838 -2.0553239e-02 3.8413758e-02 +1416 2.84 -2.0629406e-02 3.7754336e-02 +1417 2.842 -2.0704260e-02 3.7100923e-02 +1418 2.844 -2.0777814e-02 3.6453472e-02 +1419 2.846 -2.0850078e-02 3.5811936e-02 +1420 2.848 -2.0921065e-02 3.5176268e-02 +1421 2.85 -2.0990787e-02 3.4546422e-02 +1422 2.852 -2.1059255e-02 3.3922353e-02 +1423 2.854 -2.1126480e-02 3.3304015e-02 +1424 2.856 -2.1192475e-02 3.2691363e-02 +1425 2.858 -2.1257250e-02 3.2084353e-02 +1426 2.86 -2.1320816e-02 3.1482940e-02 +1427 2.862 -2.1383185e-02 3.0887080e-02 +1428 2.864 -2.1444368e-02 3.0296730e-02 +1429 2.866 -2.1504376e-02 2.9711845e-02 +1430 2.868 -2.1563219e-02 2.9132384e-02 +1431 2.87 -2.1620909e-02 2.8558302e-02 +1432 2.872 -2.1677456e-02 2.7989558e-02 +1433 2.874 -2.1732870e-02 2.7426110e-02 +1434 2.876 -2.1787164e-02 2.6867915e-02 +1435 2.878 -2.1840346e-02 2.6314933e-02 +1436 2.88 -2.1892427e-02 2.5767121e-02 +1437 2.882 -2.1943417e-02 2.5224440e-02 +1438 2.884 -2.1993328e-02 2.4686849e-02 +1439 2.886 -2.2042168e-02 2.4154306e-02 +1440 2.888 -2.2089949e-02 2.3626773e-02 +1441 2.89 -2.2136679e-02 2.3104210e-02 +1442 2.892 -2.2182369e-02 2.2586577e-02 +1443 2.894 -2.2227028e-02 2.2073835e-02 +1444 2.896 -2.2270667e-02 2.1565945e-02 +1445 2.898 -2.2313295e-02 2.1062869e-02 +1446 2.9 -2.2354922e-02 2.0564569e-02 +1447 2.902 -2.2395557e-02 2.0071006e-02 +1448 2.904 -2.2435209e-02 1.9582144e-02 +1449 2.906 -2.2473888e-02 1.9097944e-02 +1450 2.908 -2.2511604e-02 1.8618369e-02 +1451 2.91 -2.2548365e-02 1.8143383e-02 +1452 2.912 -2.2584180e-02 1.7672949e-02 +1453 2.914 -2.2619060e-02 1.7207031e-02 +1454 2.916 -2.2653012e-02 1.6745592e-02 +1455 2.918 -2.2686045e-02 1.6288598e-02 +1456 2.92 -2.2718169e-02 1.5836012e-02 +1457 2.922 -2.2749392e-02 1.5387799e-02 +1458 2.924 -2.2779723e-02 1.4943925e-02 +1459 2.926 -2.2809171e-02 1.4504355e-02 +1460 2.928 -2.2837743e-02 1.4069053e-02 +1461 2.93 -2.2865450e-02 1.3637987e-02 +1462 2.932 -2.2892298e-02 1.3211122e-02 +1463 2.934 -2.2918297e-02 1.2788425e-02 +1464 2.936 -2.2943454e-02 1.2369861e-02 +1465 2.938 -2.2967779e-02 1.1955399e-02 +1466 2.94 -2.2991279e-02 1.1545004e-02 +1467 2.942 -2.3013962e-02 1.1138645e-02 +1468 2.944 -2.3035836e-02 1.0736288e-02 +1469 2.946 -2.3056910e-02 1.0337903e-02 +1470 2.948 -2.3077190e-02 9.9434556e-03 +1471 2.95 -2.3096686e-02 9.5529157e-03 +1472 2.952 -2.3115404e-02 9.1662513e-03 +1473 2.954 -2.3133354e-02 8.7834313e-03 +1474 2.956 -2.3150541e-02 8.4044245e-03 +1475 2.958 -2.3166974e-02 8.0292004e-03 +1476 2.96 -2.3182660e-02 7.6577282e-03 +1477 2.962 -2.3197607e-02 7.2899778e-03 +1478 2.964 -2.3211822e-02 6.9259190e-03 +1479 2.966 -2.3225313e-02 6.5655219e-03 +1480 2.968 -2.3238087e-02 6.2087570e-03 +1481 2.97 -2.3250151e-02 5.8555948e-03 +1482 2.972 -2.3261512e-02 5.5060062e-03 +1483 2.974 -2.3272177e-02 5.1599621e-03 +1484 2.976 -2.3282154e-02 4.8174338e-03 +1485 2.978 -2.3291449e-02 4.4783928e-03 +1486 2.98 -2.3300070e-02 4.1428107e-03 +1487 2.982 -2.3308023e-02 3.8106595e-03 +1488 2.984 -2.3315315e-02 3.4819112e-03 +1489 2.986 -2.3321953e-02 3.1565381e-03 +1490 2.988 -2.3327943e-02 2.8345128e-03 +1491 2.99 -2.3333293e-02 2.5158079e-03 +1492 2.992 -2.3338008e-02 2.2003965e-03 +1493 2.994 -2.3342097e-02 1.8882516e-03 +1494 2.996 -2.3345564e-02 1.5793465e-03 +1495 2.998 -2.3348416e-02 1.2736549e-03 +1496 3.0 -2.3350660e-02 9.7115039e-04 +1497 3.002 -2.3352303e-02 6.7180695e-04 +1498 3.004 -2.3353350e-02 3.7559871e-04 +1499 3.006 -2.3353807e-02 8.2499984e-05 +1500 3.008 -2.3353682e-02 -2.0751471e-04 +1501 3.01 -2.3352979e-02 -4.9447067e-04 +1502 3.012 -2.3351706e-02 -7.7839299e-04 +1503 3.014 -2.3349868e-02 -1.0593066e-03 +1504 3.016 -2.3347471e-02 -1.3372362e-03 +1505 3.018 -2.3344521e-02 -1.6122063e-03 +1506 3.02 -2.3341024e-02 -1.8842413e-03 +1507 3.022 -2.3336986e-02 -2.1533654e-03 +1508 3.024 -2.3332412e-02 -2.4196026e-03 +1509 3.026 -2.3327309e-02 -2.6829765e-03 +1510 3.028 -2.3321682e-02 -2.9435110e-03 +1511 3.03 -2.3315537e-02 -3.2012294e-03 +1512 3.032 -2.3308879e-02 -3.4561550e-03 +1513 3.034 -2.3301714e-02 -3.7083109e-03 +1514 3.036 -2.3294048e-02 -3.9577200e-03 +1515 3.038 -2.3285885e-02 -4.2044051e-03 +1516 3.04 -2.3277232e-02 -4.4483887e-03 +1517 3.042 -2.3268093e-02 -4.6896932e-03 +1518 3.044 -2.3258475e-02 -4.9283409e-03 +1519 3.046 -2.3248382e-02 -5.1643538e-03 +1520 3.048 -2.3237819e-02 -5.3977539e-03 +1521 3.05 -2.3226793e-02 -5.6285629e-03 +1522 3.052 -2.3215307e-02 -5.8568023e-03 +1523 3.054 -2.3203367e-02 -6.0824935e-03 +1524 3.056 -2.3190978e-02 -6.3056578e-03 +1525 3.058 -2.3178146e-02 -6.5263163e-03 +1526 3.06 -2.3164875e-02 -6.7444898e-03 +1527 3.062 -2.3151170e-02 -6.9601993e-03 +1528 3.064 -2.3137036e-02 -7.1734651e-03 +1529 3.066 -2.3122478e-02 -7.3843079e-03 +1530 3.068 -2.3107500e-02 -7.5927479e-03 +1531 3.07 -2.3092108e-02 -7.7988051e-03 +1532 3.072 -2.3076306e-02 -8.0024998e-03 +1533 3.074 -2.3060100e-02 -8.2038515e-03 +1534 3.076 -2.3043493e-02 -8.4028801e-03 +1535 3.078 -2.3026490e-02 -8.5996051e-03 +1536 3.08 -2.3009096e-02 -8.7940458e-03 +1537 3.082 -2.2991315e-02 -8.9862216e-03 +1538 3.084 -2.2973152e-02 -9.1761514e-03 +1539 3.086 -2.2954612e-02 -9.3638542e-03 +1540 3.088 -2.2935698e-02 -9.5493488e-03 +1541 3.09 -2.2916416e-02 -9.7326540e-03 +1542 3.092 -2.2896769e-02 -9.9137881e-03 +1543 3.094 -2.2876762e-02 -1.0092770e-02 +1544 3.096 -2.2856399e-02 -1.0269617e-02 +1545 3.098 -2.2835685e-02 -1.0444348e-02 +1546 3.1 -2.2814624e-02 -1.0616980e-02 +1547 3.102 -2.2793219e-02 -1.0787532e-02 +1548 3.104 -2.2771475e-02 -1.0956021e-02 +1549 3.106 -2.2749396e-02 -1.1122465e-02 +1550 3.108 -2.2726986e-02 -1.1286881e-02 +1551 3.11 -2.2704250e-02 -1.1449286e-02 +1552 3.112 -2.2681190e-02 -1.1609698e-02 +1553 3.114 -2.2657812e-02 -1.1768134e-02 +1554 3.116 -2.2634119e-02 -1.1924610e-02 +1555 3.118 -2.2610115e-02 -1.2079143e-02 +1556 3.12 -2.2585804e-02 -1.2231750e-02 +1557 3.122 -2.2561189e-02 -1.2382447e-02 +1558 3.124 -2.2536275e-02 -1.2531251e-02 +1559 3.126 -2.2511066e-02 -1.2678178e-02 +1560 3.128 -2.2485564e-02 -1.2823244e-02 +1561 3.13 -2.2459774e-02 -1.2966466e-02 +1562 3.132 -2.2433699e-02 -1.3107858e-02 +1563 3.134 -2.2407344e-02 -1.3247437e-02 +1564 3.136 -2.2380711e-02 -1.3385218e-02 +1565 3.138 -2.2353804e-02 -1.3521217e-02 +1566 3.14 -2.2326627e-02 -1.3655450e-02 +1567 3.142 -2.2299183e-02 -1.3787931e-02 +1568 3.144 -2.2271476e-02 -1.3918676e-02 +1569 3.146 -2.2243510e-02 -1.4047699e-02 +1570 3.148 -2.2215287e-02 -1.4175017e-02 +1571 3.15 -2.2186811e-02 -1.4300642e-02 +1572 3.152 -2.2158085e-02 -1.4424591e-02 +1573 3.154 -2.2129114e-02 -1.4546878e-02 +1574 3.156 -2.2099899e-02 -1.4667517e-02 +1575 3.158 -2.2070445e-02 -1.4786523e-02 +1576 3.16 -2.2040754e-02 -1.4903909e-02 +1577 3.162 -2.2010830e-02 -1.5019691e-02 +1578 3.164 -2.1980676e-02 -1.5133881e-02 +1579 3.166 -2.1950296e-02 -1.5246495e-02 +1580 3.168 -2.1919691e-02 -1.5357545e-02 +1581 3.17 -2.1888866e-02 -1.5467046e-02 +1582 3.172 -2.1857824e-02 -1.5575011e-02 +1583 3.174 -2.1826567e-02 -1.5681454e-02 +1584 3.176 -2.1795099e-02 -1.5786388e-02 +1585 3.178 -2.1763423e-02 -1.5889825e-02 +1586 3.18 -2.1731541e-02 -1.5991781e-02 +1587 3.182 -2.1699457e-02 -1.6092267e-02 +1588 3.184 -2.1667173e-02 -1.6191296e-02 +1589 3.186 -2.1634692e-02 -1.6288882e-02 +1590 3.188 -2.1602018e-02 -1.6385037e-02 +1591 3.19 -2.1569153e-02 -1.6479774e-02 +1592 3.192 -2.1536100e-02 -1.6573106e-02 +1593 3.194 -2.1502862e-02 -1.6665044e-02 +1594 3.196 -2.1469441e-02 -1.6755602e-02 +1595 3.198 -2.1435840e-02 -1.6844792e-02 +1596 3.2 -2.1402063e-02 -1.6932625e-02 +1597 3.202 -2.1368111e-02 -1.7019114e-02 +1598 3.204 -2.1333987e-02 -1.7104271e-02 +1599 3.206 -2.1299694e-02 -1.7188108e-02 +1600 3.208 -2.1265236e-02 -1.7270637e-02 +1601 3.21 -2.1230613e-02 -1.7351870e-02 +1602 3.212 -2.1195829e-02 -1.7431817e-02 +1603 3.214 -2.1160886e-02 -1.7510491e-02 +1604 3.216 -2.1125788e-02 -1.7587903e-02 +1605 3.218 -2.1090536e-02 -1.7664064e-02 +1606 3.22 -2.1055132e-02 -1.7738987e-02 +1607 3.222 -2.1019580e-02 -1.7812681e-02 +1608 3.224 -2.0983882e-02 -1.7885158e-02 +1609 3.226 -2.0948041e-02 -1.7956429e-02 +1610 3.228 -2.0912058e-02 -1.8026506e-02 +1611 3.23 -2.0875935e-02 -1.8095398e-02 +1612 3.232 -2.0839677e-02 -1.8163116e-02 +1613 3.234 -2.0803284e-02 -1.8229672e-02 +1614 3.236 -2.0766759e-02 -1.8295076e-02 +1615 3.238 -2.0730104e-02 -1.8359338e-02 +1616 3.24 -2.0693322e-02 -1.8422469e-02 +1617 3.242 -2.0656415e-02 -1.8484479e-02 +1618 3.244 -2.0619385e-02 -1.8545379e-02 +1619 3.246 -2.0582234e-02 -1.8605178e-02 +1620 3.248 -2.0544965e-02 -1.8663887e-02 +1621 3.25 -2.0507579e-02 -1.8721516e-02 +1622 3.252 -2.0470080e-02 -1.8778074e-02 +1623 3.254 -2.0432468e-02 -1.8833572e-02 +1624 3.256 -2.0394746e-02 -1.8888019e-02 +1625 3.258 -2.0356916e-02 -1.8941425e-02 +1626 3.26 -2.0318981e-02 -1.8993800e-02 +1627 3.262 -2.0280942e-02 -1.9045153e-02 +1628 3.264 -2.0242801e-02 -1.9095494e-02 +1629 3.266 -2.0204561e-02 -1.9144832e-02 +1630 3.268 -2.0166222e-02 -1.9193177e-02 +1631 3.27 -2.0127789e-02 -1.9240537e-02 +1632 3.272 -2.0089261e-02 -1.9286923e-02 +1633 3.274 -2.0050642e-02 -1.9332342e-02 +1634 3.276 -2.0011932e-02 -1.9376804e-02 +1635 3.278 -1.9973135e-02 -1.9420319e-02 +1636 3.28 -1.9934252e-02 -1.9462894e-02 +1637 3.282 -1.9895284e-02 -1.9504540e-02 +1638 3.284 -1.9856234e-02 -1.9545264e-02 +1639 3.286 -1.9817104e-02 -1.9585075e-02 +1640 3.288 -1.9777894e-02 -1.9623982e-02 +1641 3.29 -1.9738608e-02 -1.9661993e-02 +1642 3.292 -1.9699247e-02 -1.9699118e-02 +1643 3.294 -1.9659812e-02 -1.9735364e-02 +1644 3.296 -1.9620306e-02 -1.9770739e-02 +1645 3.298 -1.9580730e-02 -1.9805253e-02 +1646 3.3 -1.9541086e-02 -1.9838913e-02 +1647 3.302 -1.9501375e-02 -1.9871727e-02 +1648 3.304 -1.9461599e-02 -1.9903703e-02 +1649 3.306 -1.9421761e-02 -1.9934851e-02 +1650 3.308 -1.9381860e-02 -1.9965176e-02 +1651 3.31 -1.9341900e-02 -1.9994688e-02 +1652 3.312 -1.9301882e-02 -2.0023394e-02 +1653 3.314 -1.9261807e-02 -2.0051302e-02 +1654 3.316 -1.9221678e-02 -2.0078420e-02 +1655 3.318 -1.9181494e-02 -2.0104755e-02 +1656 3.32 -1.9141259e-02 -2.0130315e-02 +1657 3.322 -1.9100973e-02 -2.0155107e-02 +1658 3.324 -1.9060639e-02 -2.0179140e-02 +1659 3.326 -1.9020257e-02 -2.0202419e-02 +1660 3.328 -1.8979830e-02 -2.0224954e-02 +1661 3.33 -1.8939358e-02 -2.0246750e-02 +1662 3.332 -1.8898843e-02 -2.0267816e-02 +1663 3.334 -1.8858287e-02 -2.0288157e-02 +1664 3.336 -1.8817691e-02 -2.0307783e-02 +1665 3.338 -1.8777057e-02 -2.0326699e-02 +1666 3.34 -1.8736385e-02 -2.0344912e-02 +1667 3.342 -1.8695677e-02 -2.0362430e-02 +1668 3.344 -1.8654936e-02 -2.0379259e-02 +1669 3.346 -1.8614161e-02 -2.0395406e-02 +1670 3.348 -1.8573355e-02 -2.0410879e-02 +1671 3.35 -1.8532518e-02 -2.0425683e-02 +1672 3.352 -1.8491652e-02 -2.0439825e-02 +1673 3.354 -1.8450759e-02 -2.0453313e-02 +1674 3.356 -1.8409839e-02 -2.0466152e-02 +1675 3.358 -1.8368895e-02 -2.0478349e-02 +1676 3.36 -1.8327926e-02 -2.0489911e-02 +1677 3.362 -1.8286936e-02 -2.0500843e-02 +1678 3.364 -1.8245923e-02 -2.0511153e-02 +1679 3.366 -1.8204891e-02 -2.0520846e-02 +1680 3.368 -1.8163840e-02 -2.0529929e-02 +1681 3.37 -1.8122772e-02 -2.0538409e-02 +1682 3.372 -1.8081687e-02 -2.0546290e-02 +1683 3.374 -1.8040587e-02 -2.0553580e-02 +1684 3.376 -1.7999473e-02 -2.0560284e-02 +1685 3.378 -1.7958347e-02 -2.0566408e-02 +1686 3.38 -1.7917208e-02 -2.0571959e-02 +1687 3.382 -1.7876059e-02 -2.0576941e-02 +1688 3.384 -1.7834901e-02 -2.0581362e-02 +1689 3.386 -1.7793734e-02 -2.0585227e-02 +1690 3.388 -1.7752560e-02 -2.0588541e-02 +1691 3.39 -1.7711380e-02 -2.0591311e-02 +1692 3.392 -1.7670195e-02 -2.0593541e-02 +1693 3.394 -1.7629006e-02 -2.0595238e-02 +1694 3.396 -1.7587815e-02 -2.0596408e-02 +1695 3.398 -1.7546621e-02 -2.0597055e-02 +1696 3.4 -1.7505427e-02 -2.0597185e-02 +1697 3.402 -1.7464233e-02 -2.0596804e-02 +1698 3.404 -1.7423040e-02 -2.0595917e-02 +1699 3.406 -1.7381849e-02 -2.0594529e-02 +1700 3.408 -1.7340662e-02 -2.0592646e-02 +1701 3.41 -1.7299479e-02 -2.0590272e-02 +1702 3.412 -1.7258301e-02 -2.0587414e-02 +1703 3.414 -1.7217130e-02 -2.0584077e-02 +1704 3.416 -1.7175965e-02 -2.0580264e-02 +1705 3.418 -1.7134809e-02 -2.0575983e-02 +1706 3.42 -1.7093662e-02 -2.0571237e-02 +1707 3.422 -1.7052524e-02 -2.0566031e-02 +1708 3.424 -1.7011398e-02 -2.0560371e-02 +1709 3.426 -1.6970283e-02 -2.0554262e-02 +1710 3.428 -1.6929181e-02 -2.0547708e-02 +1711 3.43 -1.6888093e-02 -2.0540714e-02 +1712 3.432 -1.6847019e-02 -2.0533285e-02 +1713 3.434 -1.6805960e-02 -2.0525426e-02 +1714 3.436 -1.6764917e-02 -2.0517141e-02 +1715 3.438 -1.6723892e-02 -2.0508436e-02 +1716 3.44 -1.6682884e-02 -2.0499315e-02 +1717 3.442 -1.6641895e-02 -2.0489782e-02 +1718 3.444 -1.6600925e-02 -2.0479842e-02 +1719 3.446 -1.6559975e-02 -2.0469499e-02 +1720 3.448 -1.6519047e-02 -2.0458759e-02 +1721 3.45 -1.6478141e-02 -2.0447625e-02 +1722 3.452 -1.6437257e-02 -2.0436102e-02 +1723 3.454 -1.6396397e-02 -2.0424194e-02 +1724 3.456 -1.6355560e-02 -2.0411906e-02 +1725 3.458 -1.6314749e-02 -2.0399242e-02 +1726 3.46 -1.6273964e-02 -2.0386206e-02 +1727 3.462 -1.6233205e-02 -2.0372803e-02 +1728 3.464 -1.6192473e-02 -2.0359036e-02 +1729 3.466 -1.6151769e-02 -2.0344910e-02 +1730 3.468 -1.6111093e-02 -2.0330429e-02 +1731 3.47 -1.6070447e-02 -2.0315598e-02 +1732 3.472 -1.6029831e-02 -2.0300419e-02 +1733 3.474 -1.5989246e-02 -2.0284897e-02 +1734 3.476 -1.5948692e-02 -2.0269037e-02 +1735 3.478 -1.5908170e-02 -2.0252842e-02 +1736 3.48 -1.5867681e-02 -2.0236315e-02 +1737 3.482 -1.5827225e-02 -2.0219462e-02 +1738 3.484 -1.5786803e-02 -2.0202285e-02 +1739 3.486 -1.5746416e-02 -2.0184789e-02 +1740 3.488 -1.5706064e-02 -2.0166978e-02 +1741 3.49 -1.5665748e-02 -2.0148854e-02 +1742 3.492 -1.5625469e-02 -2.0130423e-02 +1743 3.494 -1.5585227e-02 -2.0111687e-02 +1744 3.496 -1.5545022e-02 -2.0092650e-02 +1745 3.498 -1.5504856e-02 -2.0073317e-02 +1746 3.5 -1.5464729e-02 -2.0053690e-02 +1747 3.502 -1.5424642e-02 -2.0033772e-02 +1748 3.504 -1.5384594e-02 -2.0013569e-02 +1749 3.506 -1.5344588e-02 -1.9993083e-02 +1750 3.508 -1.5304622e-02 -1.9972317e-02 +1751 3.51 -1.5264699e-02 -1.9951276e-02 +1752 3.512 -1.5224817e-02 -1.9929962e-02 +1753 3.514 -1.5184979e-02 -1.9908378e-02 +1754 3.516 -1.5145184e-02 -1.9886530e-02 +1755 3.518 -1.5105433e-02 -1.9864418e-02 +1756 3.52 -1.5065726e-02 -1.9842048e-02 +1757 3.522 -1.5026065e-02 -1.9819422e-02 +1758 3.524 -1.4986449e-02 -1.9796544e-02 +1759 3.526 -1.4946879e-02 -1.9773416e-02 +1760 3.528 -1.4907355e-02 -1.9750042e-02 +1761 3.53 -1.4867879e-02 -1.9726425e-02 +1762 3.532 -1.4828450e-02 -1.9702568e-02 +1763 3.534 -1.4789069e-02 -1.9678475e-02 +1764 3.536 -1.4749736e-02 -1.9654148e-02 +1765 3.538 -1.4710452e-02 -1.9629590e-02 +1766 3.54 -1.4671218e-02 -1.9604805e-02 +1767 3.542 -1.4632033e-02 -1.9579795e-02 +1768 3.544 -1.4592899e-02 -1.9554564e-02 +1769 3.546 -1.4553815e-02 -1.9529115e-02 +1770 3.548 -1.4514783e-02 -1.9503450e-02 +1771 3.55 -1.4475801e-02 -1.9477572e-02 +1772 3.552 -1.4436872e-02 -1.9451484e-02 +1773 3.554 -1.4397996e-02 -1.9425189e-02 +1774 3.556 -1.4359172e-02 -1.9398691e-02 +1775 3.558 -1.4320401e-02 -1.9371990e-02 +1776 3.56 -1.4281684e-02 -1.9345092e-02 +1777 3.562 -1.4243021e-02 -1.9317997e-02 +1778 3.564 -1.4204412e-02 -1.9290709e-02 +1779 3.566 -1.4165858e-02 -1.9263231e-02 +1780 3.568 -1.4127359e-02 -1.9235566e-02 +1781 3.57 -1.4088916e-02 -1.9207715e-02 +1782 3.572 -1.4050529e-02 -1.9179682e-02 +1783 3.574 -1.4012197e-02 -1.9151469e-02 +1784 3.576 -1.3973923e-02 -1.9123079e-02 +1785 3.578 -1.3935705e-02 -1.9094515e-02 +1786 3.58 -1.3897545e-02 -1.9065778e-02 +1787 3.582 -1.3859442e-02 -1.9036872e-02 +1788 3.584 -1.3821397e-02 -1.9007799e-02 +1789 3.586 -1.3783411e-02 -1.8978561e-02 +1790 3.588 -1.3745483e-02 -1.8949161e-02 +1791 3.59 -1.3707615e-02 -1.8919601e-02 +1792 3.592 -1.3669805e-02 -1.8889885e-02 +1793 3.594 -1.3632055e-02 -1.8860013e-02 +1794 3.596 -1.3594365e-02 -1.8829989e-02 +1795 3.598 -1.3556735e-02 -1.8799814e-02 +1796 3.6 -1.3519166e-02 -1.8769492e-02 +1797 3.602 -1.3481657e-02 -1.8739025e-02 +1798 3.604 -1.3444210e-02 -1.8708414e-02 +1799 3.606 -1.3406824e-02 -1.8677662e-02 +1800 3.608 -1.3369499e-02 -1.8646772e-02 +1801 3.61 -1.3332237e-02 -1.8615745e-02 +1802 3.612 -1.3295036e-02 -1.8584583e-02 +1803 3.614 -1.3257899e-02 -1.8553290e-02 +1804 3.616 -1.3220823e-02 -1.8521867e-02 +1805 3.618 -1.3183811e-02 -1.8490315e-02 +1806 3.62 -1.3146862e-02 -1.8458639e-02 +1807 3.622 -1.3109977e-02 -1.8426838e-02 +1808 3.624 -1.3073155e-02 -1.8394917e-02 +1809 3.626 -1.3036397e-02 -1.8362876e-02 +1810 3.628 -1.2999704e-02 -1.8330717e-02 +1811 3.63 -1.2963074e-02 -1.8298443e-02 +1812 3.632 -1.2926510e-02 -1.8266056e-02 +1813 3.634 -1.2890010e-02 -1.8233558e-02 +1814 3.636 -1.2853576e-02 -1.8200950e-02 +1815 3.638 -1.2817206e-02 -1.8168235e-02 +1816 3.64 -1.2780903e-02 -1.8135414e-02 +1817 3.642 -1.2744665e-02 -1.8102490e-02 +1818 3.644 -1.2708493e-02 -1.8069465e-02 +1819 3.646 -1.2672387e-02 -1.8036340e-02 +1820 3.648 -1.2636348e-02 -1.8003116e-02 +1821 3.65 -1.2600375e-02 -1.7969797e-02 +1822 3.652 -1.2564468e-02 -1.7936384e-02 +1823 3.654 -1.2528629e-02 -1.7902878e-02 +1824 3.656 -1.2492857e-02 -1.7869282e-02 +1825 3.658 -1.2457152e-02 -1.7835597e-02 +1826 3.66 -1.2421515e-02 -1.7801825e-02 +1827 3.662 -1.2385945e-02 -1.7767968e-02 +1828 3.664 -1.2350443e-02 -1.7734027e-02 +1829 3.666 -1.2315009e-02 -1.7700005e-02 +1830 3.668 -1.2279643e-02 -1.7665903e-02 +1831 3.67 -1.2244345e-02 -1.7631722e-02 +1832 3.672 -1.2209116e-02 -1.7597464e-02 +1833 3.674 -1.2173955e-02 -1.7563131e-02 +1834 3.676 -1.2138864e-02 -1.7528725e-02 +1835 3.678 -1.2103841e-02 -1.7494248e-02 +1836 3.68 -1.2068887e-02 -1.7459700e-02 +1837 3.682 -1.2034002e-02 -1.7425083e-02 +1838 3.684 -1.1999186e-02 -1.7390399e-02 +1839 3.686 -1.1964440e-02 -1.7355650e-02 +1840 3.688 -1.1929764e-02 -1.7320837e-02 +1841 3.69 -1.1895157e-02 -1.7285962e-02 +1842 3.692 -1.1860620e-02 -1.7251026e-02 +1843 3.694 -1.1826153e-02 -1.7216031e-02 +1844 3.696 -1.1791756e-02 -1.7180977e-02 +1845 3.698 -1.1757429e-02 -1.7145868e-02 +1846 3.7 -1.1723172e-02 -1.7110703e-02 +1847 3.702 -1.1688986e-02 -1.7075485e-02 +1848 3.704 -1.1654871e-02 -1.7040215e-02 +1849 3.706 -1.1620825e-02 -1.7004894e-02 +1850 3.708 -1.1586851e-02 -1.6969524e-02 +1851 3.71 -1.1552947e-02 -1.6934107e-02 +1852 3.712 -1.1519115e-02 -1.6898643e-02 +1853 3.714 -1.1485353e-02 -1.6863134e-02 +1854 3.716 -1.1451662e-02 -1.6827581e-02 +1855 3.718 -1.1418043e-02 -1.6791986e-02 +1856 3.72 -1.1384494e-02 -1.6756350e-02 +1857 3.722 -1.1351017e-02 -1.6720674e-02 +1858 3.724 -1.1317612e-02 -1.6684959e-02 +1859 3.726 -1.1284277e-02 -1.6649208e-02 +1860 3.728 -1.1251015e-02 -1.6613421e-02 +1861 3.73 -1.1217824e-02 -1.6577599e-02 +1862 3.732 -1.1184704e-02 -1.6541744e-02 +1863 3.734 -1.1151657e-02 -1.6505856e-02 +1864 3.736 -1.1118681e-02 -1.6469938e-02 +1865 3.738 -1.1085777e-02 -1.6433990e-02 +1866 3.74 -1.1052945e-02 -1.6398014e-02 +1867 3.742 -1.1020185e-02 -1.6362011e-02 +1868 3.744 -1.0987497e-02 -1.6325981e-02 +1869 3.746 -1.0954881e-02 -1.6289926e-02 +1870 3.748 -1.0922337e-02 -1.6253848e-02 +1871 3.75 -1.0889866e-02 -1.6217747e-02 +1872 3.752 -1.0857466e-02 -1.6181625e-02 +1873 3.754 -1.0825139e-02 -1.6145482e-02 +1874 3.756 -1.0792884e-02 -1.6109320e-02 +1875 3.758 -1.0760702e-02 -1.6073140e-02 +1876 3.76 -1.0728592e-02 -1.6036943e-02 +1877 3.762 -1.0696554e-02 -1.6000729e-02 +1878 3.764 -1.0664589e-02 -1.5964501e-02 +1879 3.766 -1.0632696e-02 -1.5928259e-02 +1880 3.768 -1.0600876e-02 -1.5892004e-02 +1881 3.77 -1.0569128e-02 -1.5855738e-02 +1882 3.772 -1.0537453e-02 -1.5819460e-02 +1883 3.774 -1.0505850e-02 -1.5783173e-02 +1884 3.776 -1.0474320e-02 -1.5746877e-02 +1885 3.778 -1.0442863e-02 -1.5710573e-02 +1886 3.78 -1.0411478e-02 -1.5674263e-02 +1887 3.782 -1.0380166e-02 -1.5637946e-02 +1888 3.784 -1.0348926e-02 -1.5601625e-02 +1889 3.786 -1.0317759e-02 -1.5565300e-02 +1890 3.788 -1.0286665e-02 -1.5528972e-02 +1891 3.79 -1.0255643e-02 -1.5492642e-02 +1892 3.792 -1.0224694e-02 -1.5456311e-02 +1893 3.794 -1.0193818e-02 -1.5419979e-02 +1894 3.796 -1.0163015e-02 -1.5383648e-02 +1895 3.798 -1.0132284e-02 -1.5347319e-02 +1896 3.8 -1.0101625e-02 -1.5310992e-02 +1897 3.802 -1.0071040e-02 -1.5274669e-02 +1898 3.804 -1.0040527e-02 -1.5238350e-02 +1899 3.806 -1.0010086e-02 -1.5202036e-02 +1900 3.808 -9.9797185e-03 -1.5165728e-02 +1901 3.81 -9.9494233e-03 -1.5129426e-02 +1902 3.812 -9.9192007e-03 -1.5093132e-02 +1903 3.814 -9.8890508e-03 -1.5056847e-02 +1904 3.816 -9.8589734e-03 -1.5020571e-02 +1905 3.818 -9.8289685e-03 -1.4984304e-02 +1906 3.82 -9.7990361e-03 -1.4948049e-02 +1907 3.822 -9.7691763e-03 -1.4911805e-02 +1908 3.824 -9.7393889e-03 -1.4875573e-02 +1909 3.826 -9.7096740e-03 -1.4839355e-02 +1910 3.828 -9.6800315e-03 -1.4803150e-02 +1911 3.83 -9.6504614e-03 -1.4766960e-02 +1912 3.832 -9.6209636e-03 -1.4730786e-02 +1913 3.834 -9.5915382e-03 -1.4694627e-02 +1914 3.836 -9.5621851e-03 -1.4658486e-02 +1915 3.838 -9.5329043e-03 -1.4622362e-02 +1916 3.84 -9.5036956e-03 -1.4586256e-02 +1917 3.842 -9.4745592e-03 -1.4550169e-02 +1918 3.844 -9.4454950e-03 -1.4514102e-02 +1919 3.846 -9.4165028e-03 -1.4478055e-02 +1920 3.848 -9.3875827e-03 -1.4442029e-02 +1921 3.85 -9.3587347e-03 -1.4406025e-02 +1922 3.852 -9.3299586e-03 -1.4370043e-02 +1923 3.854 -9.3012545e-03 -1.4334085e-02 +1924 3.856 -9.2726222e-03 -1.4298150e-02 +1925 3.858 -9.2440619e-03 -1.4262239e-02 +1926 3.86 -9.2155733e-03 -1.4226353e-02 +1927 3.862 -9.1871564e-03 -1.4190493e-02 +1928 3.864 -9.1588113e-03 -1.4154659e-02 +1929 3.866 -9.1305378e-03 -1.4118851e-02 +1930 3.868 -9.1023359e-03 -1.4083071e-02 +1931 3.87 -9.0742055e-03 -1.4047319e-02 +1932 3.872 -9.0461466e-03 -1.4011596e-02 +1933 3.874 -9.0181591e-03 -1.3975902e-02 +1934 3.876 -8.9902429e-03 -1.3940237e-02 +1935 3.878 -8.9623981e-03 -1.3904603e-02 +1936 3.88 -8.9346245e-03 -1.3869000e-02 +1937 3.882 -8.9069221e-03 -1.3833428e-02 +1938 3.884 -8.8792908e-03 -1.3797888e-02 +1939 3.886 -8.8517305e-03 -1.3762381e-02 +1940 3.888 -8.8242412e-03 -1.3726906e-02 +1941 3.89 -8.7968229e-03 -1.3691466e-02 +1942 3.892 -8.7694753e-03 -1.3656059e-02 +1943 3.894 -8.7421986e-03 -1.3620687e-02 +1944 3.896 -8.7149926e-03 -1.3585350e-02 +1945 3.898 -8.6878572e-03 -1.3550049e-02 +1946 3.9 -8.6607924e-03 -1.3514784e-02 +1947 3.902 -8.6337980e-03 -1.3479556e-02 +1948 3.904 -8.6068741e-03 -1.3444365e-02 +1949 3.906 -8.5800205e-03 -1.3409211e-02 +1950 3.908 -8.5532372e-03 -1.3374095e-02 +1951 3.91 -8.5265241e-03 -1.3339018e-02 +1952 3.912 -8.4998811e-03 -1.3303980e-02 +1953 3.914 -8.4733082e-03 -1.3268982e-02 +1954 3.916 -8.4468052e-03 -1.3234023e-02 +1955 3.918 -8.4203721e-03 -1.3199105e-02 +1956 3.92 -8.3940087e-03 -1.3164228e-02 +1957 3.922 -8.3677151e-03 -1.3129391e-02 +1958 3.924 -8.3414911e-03 -1.3094597e-02 +1959 3.926 -8.3153367e-03 -1.3059844e-02 +1960 3.928 -8.2892517e-03 -1.3025134e-02 +1961 3.93 -8.2632361e-03 -1.2990467e-02 +1962 3.932 -8.2372898e-03 -1.2955844e-02 +1963 3.934 -8.2114127e-03 -1.2921264e-02 +1964 3.936 -8.1856048e-03 -1.2886728e-02 +1965 3.938 -8.1598658e-03 -1.2852237e-02 +1966 3.94 -8.1341958e-03 -1.2817790e-02 +1967 3.942 -8.1085946e-03 -1.2783389e-02 +1968 3.944 -8.0830622e-03 -1.2749034e-02 +1969 3.946 -8.0575984e-03 -1.2714724e-02 +1970 3.948 -8.0322033e-03 -1.2680461e-02 +1971 3.95 -8.0068766e-03 -1.2646245e-02 +1972 3.952 -7.9816183e-03 -1.2612076e-02 +1973 3.954 -7.9564282e-03 -1.2577954e-02 +1974 3.956 -7.9313064e-03 -1.2543880e-02 +1975 3.958 -7.9062527e-03 -1.2509854e-02 +1976 3.96 -7.8812670e-03 -1.2475877e-02 +1977 3.962 -7.8563491e-03 -1.2441948e-02 +1978 3.964 -7.8314991e-03 -1.2408069e-02 +1979 3.966 -7.8067168e-03 -1.2374239e-02 +1980 3.968 -7.7820021e-03 -1.2340459e-02 +1981 3.97 -7.7573550e-03 -1.2306728e-02 +1982 3.972 -7.7327752e-03 -1.2273049e-02 +1983 3.974 -7.7082627e-03 -1.2239420e-02 +1984 3.976 -7.6838175e-03 -1.2205842e-02 +1985 3.978 -7.6594393e-03 -1.2172315e-02 +1986 3.98 -7.6351282e-03 -1.2138840e-02 +1987 3.982 -7.6108839e-03 -1.2105417e-02 +1988 3.984 -7.5867065e-03 -1.2072045e-02 +1989 3.986 -7.5625957e-03 -1.2038727e-02 +1990 3.988 -7.5385515e-03 -1.2005461e-02 +1991 3.99 -7.5145738e-03 -1.1972248e-02 +1992 3.992 -7.4906625e-03 -1.1939088e-02 +1993 3.994 -7.4668175e-03 -1.1905982e-02 +1994 3.996 -7.4430386e-03 -1.1872929e-02 +1995 3.998 -7.4193257e-03 -1.1839930e-02 +1996 4.0 -7.3956788e-03 -1.1806986e-02 +1997 4.002 -7.3720977e-03 -1.1774096e-02 +1998 4.004 -7.3485824e-03 -1.1741261e-02 +1999 4.006 -7.3251326e-03 -1.1708481e-02 +2000 4.008 -7.3017484e-03 -1.1675756e-02 +2001 4.01 -7.2784296e-03 -1.1643087e-02 +2002 4.012 -7.2551760e-03 -1.1610473e-02 +2003 4.014 -7.2319877e-03 -1.1577915e-02 +2004 4.016 -7.2088643e-03 -1.1545413e-02 +2005 4.018 -7.1858060e-03 -1.1512967e-02 +2006 4.02 -7.1628124e-03 -1.1480578e-02 +2007 4.022 -7.1398836e-03 -1.1448246e-02 +2008 4.024 -7.1170194e-03 -1.1415971e-02 +2009 4.026 -7.0942197e-03 -1.1383752e-02 +2010 4.028 -7.0714844e-03 -1.1351592e-02 +2011 4.03 -7.0488133e-03 -1.1319488e-02 +2012 4.032 -7.0262064e-03 -1.1287442e-02 +2013 4.034 -7.0036635e-03 -1.1255455e-02 +2014 4.036 -6.9811845e-03 -1.1223525e-02 +2015 4.038 -6.9587693e-03 -1.1191654e-02 +2016 4.04 -6.9364179e-03 -1.1159841e-02 +2017 4.042 -6.9141299e-03 -1.1128086e-02 +2018 4.044 -6.8919055e-03 -1.1096390e-02 +2019 4.046 -6.8697443e-03 -1.1064754e-02 +2020 4.048 -6.8476464e-03 -1.1033176e-02 +2021 4.05 -6.8256116e-03 -1.1001658e-02 +2022 4.052 -6.8036397e-03 -1.0970199e-02 +2023 4.054 -6.7817308e-03 -1.0938800e-02 +2024 4.056 -6.7598845e-03 -1.0907460e-02 +2025 4.058 -6.7381009e-03 -1.0876180e-02 +2026 4.06 -6.7163797e-03 -1.0844961e-02 +2027 4.062 -6.6947210e-03 -1.0813801e-02 +2028 4.064 -6.6731245e-03 -1.0782702e-02 +2029 4.066 -6.6515901e-03 -1.0751663e-02 +2030 4.068 -6.6301178e-03 -1.0720685e-02 +2031 4.07 -6.6087074e-03 -1.0689767e-02 +2032 4.072 -6.5873587e-03 -1.0658910e-02 +2033 4.074 -6.5660717e-03 -1.0628114e-02 +2034 4.076 -6.5448462e-03 -1.0597380e-02 +2035 4.078 -6.5236821e-03 -1.0566706e-02 +2036 4.08 -6.5025793e-03 -1.0536094e-02 +2037 4.082 -6.4815377e-03 -1.0505543e-02 +2038 4.084 -6.4605571e-03 -1.0475054e-02 +2039 4.086 -6.4396375e-03 -1.0444626e-02 +2040 4.088 -6.4187786e-03 -1.0414260e-02 +2041 4.09 -6.3979804e-03 -1.0383956e-02 +2042 4.092 -6.3772427e-03 -1.0353713e-02 +2043 4.094 -6.3565655e-03 -1.0323533e-02 +2044 4.096 -6.3359485e-03 -1.0293415e-02 +2045 4.098 -6.3153918e-03 -1.0263359e-02 +2046 4.1 -6.2948951e-03 -1.0233366e-02 +2047 4.102 -6.2744583e-03 -1.0203435e-02 +2048 4.104 -6.2540813e-03 -1.0173566e-02 +2049 4.106 -6.2337640e-03 -1.0143760e-02 +2050 4.108 -6.2135062e-03 -1.0114016e-02 +2051 4.11 -6.1933079e-03 -1.0084335e-02 +2052 4.112 -6.1731688e-03 -1.0054717e-02 +2053 4.114 -6.1530889e-03 -1.0025162e-02 +2054 4.116 -6.1330681e-03 -9.9956701e-03 +2055 4.118 -6.1131062e-03 -9.9662408e-03 +2056 4.12 -6.0932031e-03 -9.9368747e-03 +2057 4.122 -6.0733587e-03 -9.9075716e-03 +2058 4.124 -6.0535728e-03 -9.8783318e-03 +2059 4.126 -6.0338453e-03 -9.8491552e-03 +2060 4.128 -6.0141761e-03 -9.8200419e-03 +2061 4.13 -5.9945651e-03 -9.7909920e-03 +2062 4.132 -5.9750121e-03 -9.7620054e-03 +2063 4.134 -5.9555170e-03 -9.7330824e-03 +2064 4.136 -5.9360797e-03 -9.7042228e-03 +2065 4.138 -5.9167001e-03 -9.6754268e-03 +2066 4.14 -5.8973780e-03 -9.6466944e-03 +2067 4.142 -5.8781133e-03 -9.6180256e-03 +2068 4.144 -5.8589059e-03 -9.5894205e-03 +2069 4.146 -5.8397556e-03 -9.5608791e-03 +2070 4.148 -5.8206623e-03 -9.5324015e-03 +2071 4.15 -5.8016259e-03 -9.5039877e-03 +2072 4.152 -5.7826463e-03 -9.4756377e-03 +2073 4.154 -5.7637233e-03 -9.4473515e-03 +2074 4.156 -5.7448569e-03 -9.4191292e-03 +2075 4.158 -5.7260468e-03 -9.3909708e-03 +2076 4.16 -5.7072929e-03 -9.3628763e-03 +2077 4.162 -5.6885952e-03 -9.3348458e-03 +2078 4.164 -5.6699535e-03 -9.3068793e-03 +2079 4.166 -5.6513677e-03 -9.2789767e-03 +2080 4.168 -5.6328376e-03 -9.2511382e-03 +2081 4.17 -5.6143631e-03 -9.2233637e-03 +2082 4.172 -5.5959441e-03 -9.1956532e-03 +2083 4.174 -5.5775804e-03 -9.1680068e-03 +2084 4.176 -5.5592720e-03 -9.1404244e-03 +2085 4.178 -5.5410187e-03 -9.1129061e-03 +2086 4.18 -5.5228203e-03 -9.0854518e-03 +2087 4.182 -5.5046768e-03 -9.0580617e-03 +2088 4.184 -5.4865880e-03 -9.0307356e-03 +2089 4.186 -5.4685538e-03 -9.0034736e-03 +2090 4.188 -5.4505741e-03 -8.9762757e-03 +2091 4.19 -5.4326487e-03 -8.9491419e-03 +2092 4.192 -5.4147775e-03 -8.9220721e-03 +2093 4.194 -5.3969604e-03 -8.8950664e-03 +2094 4.196 -5.3791972e-03 -8.8681249e-03 +2095 4.198 -5.3614878e-03 -8.8412473e-03 +2096 4.2 -5.3438321e-03 -8.8144338e-03 +2097 4.202 -5.3262300e-03 -8.7876844e-03 +2098 4.204 -5.3086814e-03 -8.7609990e-03 +2099 4.206 -5.2911860e-03 -8.7343776e-03 +2100 4.208 -5.2737438e-03 -8.7078202e-03 +2101 4.21 -5.2563547e-03 -8.6813268e-03 +2102 4.212 -5.2390185e-03 -8.6548974e-03 +2103 4.214 -5.2217350e-03 -8.6285319e-03 +2104 4.216 -5.2045043e-03 -8.6022304e-03 +2105 4.218 -5.1873261e-03 -8.5759927e-03 +2106 4.22 -5.1702003e-03 -8.5498190e-03 +2107 4.222 -5.1531268e-03 -8.5237091e-03 +2108 4.224 -5.1361054e-03 -8.4976630e-03 +2109 4.226 -5.1191361e-03 -8.4716808e-03 +2110 4.228 -5.1022186e-03 -8.4457623e-03 +2111 4.23 -5.0853530e-03 -8.4199076e-03 +2112 4.232 -5.0685390e-03 -8.3941166e-03 +2113 4.234 -5.0517765e-03 -8.3683893e-03 +2114 4.236 -5.0350654e-03 -8.3427256e-03 +2115 4.238 -5.0184055e-03 -8.3171256e-03 +2116 4.24 -5.0017968e-03 -8.2915891e-03 +2117 4.242 -4.9852391e-03 -8.2661162e-03 +2118 4.244 -4.9687323e-03 -8.2407067e-03 +2119 4.246 -4.9522762e-03 -8.2153608e-03 +2120 4.248 -4.9358708e-03 -8.1900783e-03 +2121 4.25 -4.9195159e-03 -8.1648591e-03 +2122 4.252 -4.9032113e-03 -8.1397033e-03 +2123 4.254 -4.8869570e-03 -8.1146109e-03 +2124 4.256 -4.8707529e-03 -8.0895816e-03 +2125 4.258 -4.8545987e-03 -8.0646156e-03 +2126 4.26 -4.8384943e-03 -8.0397127e-03 +2127 4.262 -4.8224398e-03 -8.0148729e-03 +2128 4.264 -4.8064348e-03 -7.9900962e-03 +2129 4.266 -4.7904793e-03 -7.9653825e-03 +2130 4.268 -4.7745732e-03 -7.9407318e-03 +2131 4.27 -4.7587164e-03 -7.9161440e-03 +2132 4.272 -4.7429086e-03 -7.8916190e-03 +2133 4.274 -4.7271499e-03 -7.8671568e-03 +2134 4.276 -4.7114400e-03 -7.8427574e-03 +2135 4.278 -4.6957788e-03 -7.8184206e-03 +2136 4.28 -4.6801662e-03 -7.7941465e-03 +2137 4.282 -4.6646022e-03 -7.7699350e-03 +2138 4.284 -4.6490865e-03 -7.7457859e-03 +2139 4.286 -4.6336190e-03 -7.7216994e-03 +2140 4.288 -4.6181996e-03 -7.6976752e-03 +2141 4.29 -4.6028282e-03 -7.6737133e-03 +2142 4.292 -4.5875047e-03 -7.6498137e-03 +2143 4.294 -4.5722289e-03 -7.6259763e-03 +2144 4.296 -4.5570008e-03 -7.6022011e-03 +2145 4.298 -4.5418201e-03 -7.5784879e-03 +2146 4.3 -4.5266868e-03 -7.5548367e-03 +2147 4.302 -4.5116007e-03 -7.5312475e-03 +2148 4.304 -4.4965617e-03 -7.5077201e-03 +2149 4.306 -4.4815698e-03 -7.4842546e-03 +2150 4.308 -4.4666247e-03 -7.4608507e-03 +2151 4.31 -4.4517263e-03 -7.4375086e-03 +2152 4.312 -4.4368746e-03 -7.4142280e-03 +2153 4.314 -4.4220694e-03 -7.3910089e-03 +2154 4.316 -4.4073105e-03 -7.3678513e-03 +2155 4.318 -4.3925979e-03 -7.3447551e-03 +2156 4.32 -4.3779315e-03 -7.3217201e-03 +2157 4.322 -4.3633110e-03 -7.2987464e-03 +2158 4.324 -4.3487364e-03 -7.2758338e-03 +2159 4.326 -4.3342076e-03 -7.2529823e-03 +2160 4.328 -4.3197245e-03 -7.2301918e-03 +2161 4.33 -4.3052868e-03 -7.2074622e-03 +2162 4.332 -4.2908946e-03 -7.1847935e-03 +2163 4.334 -4.2765476e-03 -7.1621855e-03 +2164 4.336 -4.2622458e-03 -7.1396382e-03 +2165 4.338 -4.2479890e-03 -7.1171514e-03 +2166 4.34 -4.2337772e-03 -7.0947252e-03 +2167 4.342 -4.2196101e-03 -7.0723595e-03 +2168 4.344 -4.2054877e-03 -7.0500540e-03 +2169 4.346 -4.1914098e-03 -7.0278089e-03 +2170 4.348 -4.1773764e-03 -7.0056239e-03 +2171 4.35 -4.1633873e-03 -6.9834991e-03 +2172 4.352 -4.1494424e-03 -6.9614342e-03 +2173 4.354 -4.1355415e-03 -6.9394293e-03 +2174 4.356 -4.1216846e-03 -6.9174842e-03 +2175 4.358 -4.1078715e-03 -6.8955989e-03 +2176 4.36 -4.0941022e-03 -6.8737733e-03 +2177 4.362 -4.0803764e-03 -6.8520072e-03 +2178 4.364 -4.0666941e-03 -6.8303006e-03 +2179 4.366 -4.0530552e-03 -6.8086535e-03 +2180 4.368 -4.0394595e-03 -6.7870656e-03 +2181 4.37 -4.0259069e-03 -6.7655370e-03 +2182 4.372 -4.0123973e-03 -6.7440675e-03 +2183 4.374 -3.9989306e-03 -6.7226571e-03 +2184 4.376 -3.9855066e-03 -6.7013056e-03 +2185 4.378 -3.9721253e-03 -6.6800130e-03 +2186 4.38 -3.9587865e-03 -6.6587791e-03 +2187 4.382 -3.9454901e-03 -6.6376039e-03 +2188 4.384 -3.9322361e-03 -6.6164873e-03 +2189 4.386 -3.9190241e-03 -6.5954292e-03 +2190 4.388 -3.9058543e-03 -6.5744295e-03 +2191 4.39 -3.8927264e-03 -6.5534881e-03 +2192 4.392 -3.8796403e-03 -6.5326049e-03 +2193 4.394 -3.8665959e-03 -6.5117798e-03 +2194 4.396 -3.8535931e-03 -6.4910127e-03 +2195 4.398 -3.8406318e-03 -6.4703035e-03 +2196 4.4 -3.8277119e-03 -6.4496522e-03 +2197 4.402 -3.8148332e-03 -6.4290585e-03 +2198 4.404 -3.8019956e-03 -6.4085225e-03 +2199 4.406 -3.7891991e-03 -6.3880440e-03 +2200 4.408 -3.7764434e-03 -6.3676230e-03 +2201 4.41 -3.7637285e-03 -6.3472592e-03 +2202 4.412 -3.7510543e-03 -6.3269527e-03 +2203 4.414 -3.7384207e-03 -6.3067033e-03 +2204 4.416 -3.7258275e-03 -6.2865110e-03 +2205 4.418 -3.7132746e-03 -6.2663756e-03 +2206 4.42 -3.7007619e-03 -6.2462970e-03 +2207 4.422 -3.6882894e-03 -6.2262751e-03 +2208 4.424 -3.6758568e-03 -6.2063099e-03 +2209 4.426 -3.6634641e-03 -6.1864012e-03 +2210 4.428 -3.6511112e-03 -6.1665489e-03 +2211 4.43 -3.6387979e-03 -6.1467529e-03 +2212 4.432 -3.6265241e-03 -6.1270131e-03 +2213 4.434 -3.6142898e-03 -6.1073295e-03 +2214 4.436 -3.6020948e-03 -6.0877018e-03 +2215 4.438 -3.5899389e-03 -6.0681301e-03 +2216 4.44 -3.5778222e-03 -6.0486142e-03 +2217 4.442 -3.5657444e-03 -6.0291539e-03 +2218 4.444 -3.5537055e-03 -6.0097493e-03 +2219 4.446 -3.5417054e-03 -5.9904001e-03 +2220 4.448 -3.5297439e-03 -5.9711063e-03 +2221 4.45 -3.5178209e-03 -5.9518678e-03 +2222 4.452 -3.5059364e-03 -5.9326845e-03 +2223 4.454 -3.4940902e-03 -5.9135563e-03 +2224 4.456 -3.4822821e-03 -5.8944830e-03 +2225 4.458 -3.4705122e-03 -5.8754645e-03 +2226 4.46 -3.4587802e-03 -5.8565008e-03 +2227 4.462 -3.4470862e-03 -5.8375918e-03 +2228 4.464 -3.4354298e-03 -5.8187372e-03 +2229 4.466 -3.4238112e-03 -5.7999371e-03 +2230 4.468 -3.4122301e-03 -5.7811914e-03 +2231 4.47 -3.4006864e-03 -5.7624998e-03 +2232 4.472 -3.3891800e-03 -5.7438623e-03 +2233 4.474 -3.3777109e-03 -5.7252788e-03 +2234 4.476 -3.3662789e-03 -5.7067493e-03 +2235 4.478 -3.3548839e-03 -5.6882735e-03 +2236 4.48 -3.3435257e-03 -5.6698513e-03 +2237 4.482 -3.3322044e-03 -5.6514827e-03 +2238 4.484 -3.3209198e-03 -5.6331676e-03 +2239 4.486 -3.3096717e-03 -5.6149058e-03 +2240 4.488 -3.2984601e-03 -5.5966973e-03 +2241 4.49 -3.2872849e-03 -5.5785418e-03 +2242 4.492 -3.2761459e-03 -5.5604394e-03 +2243 4.494 -3.2650431e-03 -5.5423899e-03 +2244 4.496 -3.2539763e-03 -5.5243932e-03 +2245 4.498 -3.2429455e-03 -5.5064491e-03 +2246 4.5 -3.2319505e-03 -5.4885577e-03 +2247 4.502 -3.2209912e-03 -5.4707187e-03 +2248 4.504 -3.2100676e-03 -5.4529320e-03 +2249 4.506 -3.1991795e-03 -5.4351976e-03 +2250 4.508 -3.1883268e-03 -5.4175153e-03 +2251 4.51 -3.1775094e-03 -5.3998851e-03 +2252 4.512 -3.1667272e-03 -5.3823067e-03 +2253 4.514 -3.1559801e-03 -5.3647801e-03 +2254 4.516 -3.1452680e-03 -5.3473053e-03 +2255 4.518 -3.1345908e-03 -5.3298820e-03 +2256 4.52 -3.1239485e-03 -5.3125101e-03 +2257 4.522 -3.1133408e-03 -5.2951896e-03 +2258 4.524 -3.1027677e-03 -5.2779204e-03 +2259 4.526 -3.0922291e-03 -5.2607023e-03 +2260 4.528 -3.0817248e-03 -5.2435351e-03 +2261 4.53 -3.0712549e-03 -5.2264189e-03 +2262 4.532 -3.0608191e-03 -5.2093535e-03 +2263 4.534 -3.0504174e-03 -5.1923388e-03 +2264 4.536 -3.0400497e-03 -5.1753746e-03 +2265 4.538 -3.0297159e-03 -5.1584609e-03 +2266 4.54 -3.0194158e-03 -5.1415975e-03 +2267 4.542 -3.0091495e-03 -5.1247844e-03 +2268 4.544 -2.9989167e-03 -5.1080214e-03 +2269 4.546 -2.9887174e-03 -5.0913083e-03 +2270 4.548 -2.9785514e-03 -5.0746452e-03 +2271 4.55 -2.9684187e-03 -5.0580318e-03 +2272 4.552 -2.9583193e-03 -5.0414682e-03 +2273 4.554 -2.9482528e-03 -5.0249540e-03 +2274 4.556 -2.9382194e-03 -5.0084893e-03 +2275 4.558 -2.9282188e-03 -4.9920740e-03 +2276 4.56 -2.9182511e-03 -4.9757078e-03 +2277 4.562 -2.9083160e-03 -4.9593908e-03 +2278 4.564 -2.8984135e-03 -4.9431227e-03 +2279 4.566 -2.8885435e-03 -4.9269035e-03 +2280 4.568 -2.8787058e-03 -4.9107331e-03 +2281 4.57 -2.8689005e-03 -4.8946113e-03 +2282 4.572 -2.8591274e-03 -4.8785381e-03 +2283 4.574 -2.8493863e-03 -4.8625133e-03 +2284 4.576 -2.8396773e-03 -4.8465368e-03 +2285 4.578 -2.8300001e-03 -4.8306085e-03 +2286 4.58 -2.8203548e-03 -4.8147283e-03 +2287 4.582 -2.8107412e-03 -4.7988960e-03 +2288 4.584 -2.8011592e-03 -4.7831116e-03 +2289 4.586 -2.7916087e-03 -4.7673750e-03 +2290 4.588 -2.7820897e-03 -4.7516860e-03 +2291 4.59 -2.7726019e-03 -4.7360445e-03 +2292 4.592 -2.7631454e-03 -4.7204504e-03 +2293 4.594 -2.7537201e-03 -4.7049036e-03 +2294 4.596 -2.7443258e-03 -4.6894040e-03 +2295 4.598 -2.7349625e-03 -4.6739515e-03 +2296 4.6 -2.7256300e-03 -4.6585459e-03 +2297 4.602 -2.7163282e-03 -4.6431872e-03 +2298 4.604 -2.7070572e-03 -4.6278751e-03 +2299 4.606 -2.6978167e-03 -4.6126097e-03 +2300 4.608 -2.6886067e-03 -4.5973909e-03 +2301 4.61 -2.6794271e-03 -4.5822184e-03 +2302 4.612 -2.6702778e-03 -4.5670921e-03 +2303 4.614 -2.6611587e-03 -4.5520121e-03 +2304 4.616 -2.6520697e-03 -4.5369781e-03 +2305 4.618 -2.6430108e-03 -4.5219900e-03 +2306 4.62 -2.6339817e-03 -4.5070478e-03 +2307 4.622 -2.6249825e-03 -4.4921512e-03 +2308 4.624 -2.6160131e-03 -4.4773003e-03 +2309 4.626 -2.6070733e-03 -4.4624949e-03 +2310 4.628 -2.5981631e-03 -4.4477348e-03 +2311 4.63 -2.5892823e-03 -4.4330201e-03 +2312 4.632 -2.5804310e-03 -4.4183504e-03 +2313 4.634 -2.5716089e-03 -4.4037258e-03 +2314 4.636 -2.5628160e-03 -4.3891462e-03 +2315 4.638 -2.5540523e-03 -4.3746113e-03 +2316 4.64 -2.5453176e-03 -4.3601212e-03 +2317 4.642 -2.5366118e-03 -4.3456756e-03 +2318 4.644 -2.5279348e-03 -4.3312746e-03 +2319 4.646 -2.5192867e-03 -4.3169179e-03 +2320 4.648 -2.5106671e-03 -4.3026054e-03 +2321 4.65 -2.5020762e-03 -4.2883372e-03 +2322 4.652 -2.4935138e-03 -4.2741129e-03 +2323 4.654 -2.4849797e-03 -4.2599326e-03 +2324 4.656 -2.4764740e-03 -4.2457961e-03 +2325 4.658 -2.4679965e-03 -4.2317032e-03 +2326 4.66 -2.4595472e-03 -4.2176540e-03 +2327 4.662 -2.4511259e-03 -4.2036483e-03 +2328 4.664 -2.4427325e-03 -4.1896859e-03 +2329 4.666 -2.4343671e-03 -4.1757668e-03 +2330 4.668 -2.4260294e-03 -4.1618908e-03 +2331 4.67 -2.4177195e-03 -4.1480578e-03 +2332 4.672 -2.4094372e-03 -4.1342678e-03 +2333 4.674 -2.4011824e-03 -4.1205206e-03 +2334 4.676 -2.3929551e-03 -4.1068161e-03 +2335 4.678 -2.3847551e-03 -4.0931542e-03 +2336 4.68 -2.3765824e-03 -4.0795348e-03 +2337 4.682 -2.3684369e-03 -4.0659578e-03 +2338 4.684 -2.3603186e-03 -4.0524230e-03 +2339 4.686 -2.3522272e-03 -4.0389304e-03 +2340 4.688 -2.3441628e-03 -4.0254798e-03 +2341 4.69 -2.3361253e-03 -4.0120711e-03 +2342 4.692 -2.3281145e-03 -3.9987043e-03 +2343 4.694 -2.3201304e-03 -3.9853792e-03 +2344 4.696 -2.3121730e-03 -3.9720957e-03 +2345 4.698 -2.3042420e-03 -3.9588537e-03 +2346 4.7 -2.2963375e-03 -3.9456531e-03 +2347 4.702 -2.2884594e-03 -3.9324937e-03 +2348 4.704 -2.2806075e-03 -3.9193756e-03 +2349 4.706 -2.2727819e-03 -3.9062985e-03 +2350 4.708 -2.2649823e-03 -3.8932623e-03 +2351 4.71 -2.2572088e-03 -3.8802670e-03 +2352 4.712 -2.2494612e-03 -3.8673125e-03 +2353 4.714 -2.2417395e-03 -3.8543985e-03 +2354 4.716 -2.2340436e-03 -3.8415251e-03 +2355 4.718 -2.2263734e-03 -3.8286921e-03 +2356 4.72 -2.2187288e-03 -3.8158994e-03 +2357 4.722 -2.2111097e-03 -3.8031469e-03 +2358 4.724 -2.2035162e-03 -3.7904345e-03 +2359 4.726 -2.1959480e-03 -3.7777621e-03 +2360 4.728 -2.1884051e-03 -3.7651295e-03 +2361 4.73 -2.1808874e-03 -3.7525368e-03 +2362 4.732 -2.1733949e-03 -3.7399836e-03 +2363 4.734 -2.1659275e-03 -3.7274701e-03 +2364 4.736 -2.1584850e-03 -3.7149960e-03 +2365 4.738 -2.1510675e-03 -3.7025612e-03 +2366 4.74 -2.1436747e-03 -3.6901657e-03 +2367 4.742 -2.1363068e-03 -3.6778092e-03 +2368 4.744 -2.1289635e-03 -3.6654919e-03 +2369 4.746 -2.1216448e-03 -3.6532134e-03 +2370 4.748 -2.1143506e-03 -3.6409737e-03 +2371 4.75 -2.1070809e-03 -3.6287728e-03 +2372 4.752 -2.0998355e-03 -3.6166105e-03 +2373 4.754 -2.0926144e-03 -3.6044866e-03 +2374 4.756 -2.0854175e-03 -3.5924012e-03 +2375 4.758 -2.0782448e-03 -3.5803540e-03 +2376 4.76 -2.0710961e-03 -3.5683450e-03 +2377 4.762 -2.0639714e-03 -3.5563741e-03 +2378 4.764 -2.0568705e-03 -3.5444411e-03 +2379 4.766 -2.0497936e-03 -3.5325461e-03 +2380 4.768 -2.0427403e-03 -3.5206888e-03 +2381 4.77 -2.0357108e-03 -3.5088691e-03 +2382 4.772 -2.0287048e-03 -3.4970870e-03 +2383 4.774 -2.0217224e-03 -3.4853424e-03 +2384 4.776 -2.0147634e-03 -3.4736351e-03 +2385 4.778 -2.0078279e-03 -3.4619650e-03 +2386 4.78 -2.0009156e-03 -3.4503321e-03 +2387 4.782 -1.9940265e-03 -3.4387362e-03 +2388 4.784 -1.9871606e-03 -3.4271773e-03 +2389 4.786 -1.9803178e-03 -3.4156552e-03 +2390 4.788 -1.9734979e-03 -3.4041699e-03 +2391 4.79 -1.9667011e-03 -3.3927211e-03 +2392 4.792 -1.9599270e-03 -3.3813089e-03 +2393 4.794 -1.9531758e-03 -3.3699331e-03 +2394 4.796 -1.9464473e-03 -3.3585937e-03 +2395 4.798 -1.9397414e-03 -3.3472904e-03 +2396 4.8 -1.9330581e-03 -3.3360233e-03 +2397 4.802 -1.9263973e-03 -3.3247922e-03 +2398 4.804 -1.9197589e-03 -3.3135970e-03 +2399 4.806 -1.9131429e-03 -3.3024376e-03 +2400 4.808 -1.9065491e-03 -3.2913140e-03 +2401 4.81 -1.8999776e-03 -3.2802259e-03 +2402 4.812 -1.8934282e-03 -3.2691734e-03 +2403 4.814 -1.8869009e-03 -3.2581563e-03 +2404 4.816 -1.8803956e-03 -3.2471745e-03 +2405 4.818 -1.8739122e-03 -3.2362279e-03 +2406 4.82 -1.8674506e-03 -3.2253165e-03 +2407 4.822 -1.8610109e-03 -3.2144400e-03 +2408 4.824 -1.8545928e-03 -3.2035985e-03 +2409 4.826 -1.8481964e-03 -3.1927918e-03 +2410 4.828 -1.8418216e-03 -3.1820198e-03 +2411 4.83 -1.8354683e-03 -3.1712824e-03 +2412 4.832 -1.8291365e-03 -3.1605795e-03 +2413 4.834 -1.8228260e-03 -3.1499111e-03 +2414 4.836 -1.8165368e-03 -3.1392770e-03 +2415 4.838 -1.8102689e-03 -3.1286771e-03 +2416 4.84 -1.8040221e-03 -3.1181113e-03 +2417 4.842 -1.7977964e-03 -3.1075796e-03 +2418 4.844 -1.7915917e-03 -3.0970818e-03 +2419 4.846 -1.7854081e-03 -3.0866178e-03 +2420 4.848 -1.7792453e-03 -3.0761876e-03 +2421 4.85 -1.7731033e-03 -3.0657910e-03 +2422 4.852 -1.7669821e-03 -3.0554280e-03 +2423 4.854 -1.7608815e-03 -3.0450984e-03 +2424 4.856 -1.7548017e-03 -3.0348022e-03 +2425 4.858 -1.7487423e-03 -3.0245392e-03 +2426 4.86 -1.7427035e-03 -3.0143094e-03 +2427 4.862 -1.7366851e-03 -3.0041126e-03 +2428 4.864 -1.7306870e-03 -2.9939488e-03 +2429 4.866 -1.7247092e-03 -2.9838179e-03 +2430 4.868 -1.7187517e-03 -2.9737197e-03 +2431 4.87 -1.7128143e-03 -2.9636543e-03 +2432 4.872 -1.7068971e-03 -2.9536214e-03 +2433 4.874 -1.7009998e-03 -2.9436210e-03 +2434 4.876 -1.6951226e-03 -2.9336531e-03 +2435 4.878 -1.6892652e-03 -2.9237174e-03 +2436 4.88 -1.6834277e-03 -2.9138139e-03 +2437 4.882 -1.6776099e-03 -2.9039426e-03 +2438 4.884 -1.6718119e-03 -2.8941032e-03 +2439 4.886 -1.6660335e-03 -2.8842958e-03 +2440 4.888 -1.6602747e-03 -2.8745203e-03 +2441 4.89 -1.6545354e-03 -2.8647764e-03 +2442 4.892 -1.6488156e-03 -2.8550643e-03 +2443 4.894 -1.6431151e-03 -2.8453837e-03 +2444 4.896 -1.6374340e-03 -2.8357345e-03 +2445 4.898 -1.6317721e-03 -2.8261167e-03 +2446 4.9 -1.6261295e-03 -2.8165302e-03 +2447 4.902 -1.6205060e-03 -2.8069749e-03 +2448 4.904 -1.6149016e-03 -2.7974507e-03 +2449 4.906 -1.6093162e-03 -2.7879575e-03 +2450 4.908 -1.6037497e-03 -2.7784952e-03 +2451 4.91 -1.5982022e-03 -2.7690637e-03 +2452 4.912 -1.5926735e-03 -2.7596630e-03 +2453 4.914 -1.5871635e-03 -2.7502929e-03 +2454 4.916 -1.5816723e-03 -2.7409533e-03 +2455 4.918 -1.5761997e-03 -2.7316442e-03 +2456 4.92 -1.5707457e-03 -2.7223655e-03 +2457 4.922 -1.5653102e-03 -2.7131170e-03 +2458 4.924 -1.5598932e-03 -2.7038988e-03 +2459 4.926 -1.5544946e-03 -2.6947106e-03 +2460 4.928 -1.5491143e-03 -2.6855525e-03 +2461 4.93 -1.5437523e-03 -2.6764243e-03 +2462 4.932 -1.5384086e-03 -2.6673259e-03 +2463 4.934 -1.5330830e-03 -2.6582572e-03 +2464 4.936 -1.5277756e-03 -2.6492182e-03 +2465 4.938 -1.5224861e-03 -2.6402088e-03 +2466 4.94 -1.5172147e-03 -2.6312288e-03 +2467 4.942 -1.5119612e-03 -2.6222783e-03 +2468 4.944 -1.5067256e-03 -2.6133570e-03 +2469 4.946 -1.5015078e-03 -2.6044650e-03 +2470 4.948 -1.4963077e-03 -2.5956021e-03 +2471 4.95 -1.4911253e-03 -2.5867682e-03 +2472 4.952 -1.4859606e-03 -2.5779633e-03 +2473 4.954 -1.4808135e-03 -2.5691872e-03 +2474 4.956 -1.4756838e-03 -2.5604399e-03 +2475 4.958 -1.4705717e-03 -2.5517213e-03 +2476 4.96 -1.4654769e-03 -2.5430314e-03 +2477 4.962 -1.4603995e-03 -2.5343699e-03 +2478 4.964 -1.4553394e-03 -2.5257369e-03 +2479 4.966 -1.4502966e-03 -2.5171322e-03 +2480 4.968 -1.4452709e-03 -2.5085558e-03 +2481 4.97 -1.4402623e-03 -2.5000076e-03 +2482 4.972 -1.4352708e-03 -2.4914875e-03 +2483 4.974 -1.4302964e-03 -2.4829953e-03 +2484 4.976 -1.4253388e-03 -2.4745311e-03 +2485 4.978 -1.4203982e-03 -2.4660948e-03 +2486 4.98 -1.4154744e-03 -2.4576862e-03 +2487 4.982 -1.4105674e-03 -2.4493052e-03 +2488 4.984 -1.4056772e-03 -2.4409519e-03 +2489 4.986 -1.4008036e-03 -2.4326261e-03 +2490 4.988 -1.3959467e-03 -2.4243277e-03 +2491 4.99 -1.3911063e-03 -2.4160566e-03 +2492 4.992 -1.3862824e-03 -2.4078128e-03 +2493 4.994 -1.3814750e-03 -2.3995961e-03 +2494 4.996 -1.3766840e-03 -2.3914065e-03 +2495 4.998 -1.3719094e-03 -2.3832440e-03 +2496 5.0 -1.3671510e-03 -2.3751084e-03 +2497 5.002 -1.3624089e-03 -2.3669996e-03 +2498 5.004 -1.3576830e-03 -2.3589176e-03 +2499 5.006 -1.3529732e-03 -2.3508622e-03 +2500 5.008 -1.3482795e-03 -2.3428335e-03 +2501 5.01 -1.3436019e-03 -2.3348312e-03 +2502 5.012 -1.3389402e-03 -2.3268554e-03 +2503 5.014 -1.3342944e-03 -2.3189060e-03 +2504 5.016 -1.3296646e-03 -2.3109828e-03 +2505 5.018 -1.3250505e-03 -2.3030859e-03 +2506 5.02 -1.3204522e-03 -2.2952150e-03 +2507 5.022 -1.3158696e-03 -2.2873702e-03 +2508 5.024 -1.3113027e-03 -2.2795513e-03 +2509 5.026 -1.3067514e-03 -2.2717583e-03 +2510 5.028 -1.3022157e-03 -2.2639911e-03 +2511 5.03 -1.2976954e-03 -2.2562496e-03 +2512 5.032 -1.2931906e-03 -2.2485338e-03 +2513 5.034 -1.2887013e-03 -2.2408435e-03 +2514 5.036 -1.2842272e-03 -2.2331787e-03 +2515 5.038 -1.2797685e-03 -2.2255392e-03 +2516 5.04 -1.2753251e-03 -2.2179252e-03 +2517 5.042 -1.2708968e-03 -2.2103363e-03 +2518 5.044 -1.2664837e-03 -2.2027726e-03 +2519 5.046 -1.2620857e-03 -2.1952340e-03 +2520 5.048 -1.2577028e-03 -2.1877204e-03 +2521 5.05 -1.2533348e-03 -2.1802318e-03 +2522 5.052 -1.2489818e-03 -2.1727680e-03 +2523 5.054 -1.2446437e-03 -2.1653290e-03 +2524 5.056 -1.2403205e-03 -2.1579147e-03 +2525 5.058 -1.2360120e-03 -2.1505250e-03 +2526 5.06 -1.2317184e-03 -2.1431599e-03 +2527 5.062 -1.2274394e-03 -2.1358192e-03 +2528 5.064 -1.2231751e-03 -2.1285030e-03 +2529 5.066 -1.2189254e-03 -2.1212110e-03 +2530 5.068 -1.2146902e-03 -2.1139433e-03 +2531 5.07 -1.2104696e-03 -2.1066998e-03 +2532 5.072 -1.2062634e-03 -2.0994804e-03 +2533 5.074 -1.2020716e-03 -2.0922850e-03 +2534 5.076 -1.1978942e-03 -2.0851135e-03 +2535 5.078 -1.1937312e-03 -2.0779660e-03 +2536 5.08 -1.1895824e-03 -2.0708422e-03 +2537 5.082 -1.1854478e-03 -2.0637421e-03 +2538 5.084 -1.1813274e-03 -2.0566657e-03 +2539 5.086 -1.1772211e-03 -2.0496129e-03 +2540 5.088 -1.1731289e-03 -2.0425836e-03 +2541 5.09 -1.1690508e-03 -2.0355777e-03 +2542 5.092 -1.1649866e-03 -2.0285951e-03 +2543 5.094 -1.1609364e-03 -2.0216359e-03 +2544 5.096 -1.1569000e-03 -2.0146998e-03 +2545 5.098 -1.1528775e-03 -2.0077869e-03 +2546 5.1 -1.1488689e-03 -2.0008971e-03 +2547 5.102 -1.1448739e-03 -1.9940302e-03 +2548 5.104 -1.1408927e-03 -1.9871863e-03 +2549 5.106 -1.1369252e-03 -1.9803652e-03 +2550 5.108 -1.1329712e-03 -1.9735669e-03 +2551 5.11 -1.1290309e-03 -1.9667913e-03 +2552 5.112 -1.1251041e-03 -1.9600383e-03 +2553 5.114 -1.1211907e-03 -1.9533079e-03 +2554 5.116 -1.1172908e-03 -1.9466000e-03 +2555 5.118 -1.1134043e-03 -1.9399145e-03 +2556 5.12 -1.1095311e-03 -1.9332514e-03 +2557 5.122 -1.1056713e-03 -1.9266105e-03 +2558 5.124 -1.1018247e-03 -1.9199919e-03 +2559 5.126 -1.0979913e-03 -1.9133954e-03 +2560 5.128 -1.0941711e-03 -1.9068209e-03 +2561 5.13 -1.0903640e-03 -1.9002685e-03 +2562 5.132 -1.0865700e-03 -1.8937380e-03 +2563 5.134 -1.0827890e-03 -1.8872294e-03 +2564 5.136 -1.0790211e-03 -1.8807425e-03 +2565 5.138 -1.0752661e-03 -1.8742774e-03 +2566 5.14 -1.0715240e-03 -1.8678339e-03 +2567 5.142 -1.0677947e-03 -1.8614121e-03 +2568 5.144 -1.0640783e-03 -1.8550117e-03 +2569 5.146 -1.0603746e-03 -1.8486328e-03 +2570 5.148 -1.0566837e-03 -1.8422753e-03 +2571 5.15 -1.0530055e-03 -1.8359391e-03 +2572 5.152 -1.0493400e-03 -1.8296242e-03 +2573 5.154 -1.0456870e-03 -1.8233304e-03 +2574 5.156 -1.0420466e-03 -1.8170577e-03 +2575 5.158 -1.0384188e-03 -1.8108061e-03 +2576 5.16 -1.0348034e-03 -1.8045755e-03 +2577 5.162 -1.0312005e-03 -1.7983658e-03 +2578 5.164 -1.0276099e-03 -1.7921769e-03 +2579 5.166 -1.0240317e-03 -1.7860088e-03 +2580 5.168 -1.0204659e-03 -1.7798614e-03 +2581 5.17 -1.0169123e-03 -1.7737347e-03 +2582 5.172 -1.0133709e-03 -1.7676286e-03 +2583 5.174 -1.0098418e-03 -1.7615430e-03 +2584 5.176 -1.0063247e-03 -1.7554778e-03 +2585 5.178 -1.0028198e-03 -1.7494330e-03 +2586 5.18 -9.9932699e-04 -1.7434086e-03 +2587 5.182 -9.9584618e-04 -1.7374044e-03 +2588 5.184 -9.9237736e-04 -1.7314203e-03 +2589 5.186 -9.8892048e-04 -1.7254565e-03 +2590 5.188 -9.8547552e-04 -1.7195126e-03 +2591 5.19 -9.8204242e-04 -1.7135888e-03 +2592 5.192 -9.7862115e-04 -1.7076850e-03 +2593 5.194 -9.7521167e-04 -1.7018010e-03 +2594 5.196 -9.7181393e-04 -1.6959368e-03 +2595 5.198 -9.6842791e-04 -1.6900923e-03 +2596 5.2 -9.6505355e-04 -1.6842675e-03 +2597 5.202 -9.6169082e-04 -1.6784624e-03 +2598 5.204 -9.5833969e-04 -1.6726768e-03 +2599 5.206 -9.5500010e-04 -1.6669107e-03 +2600 5.208 -9.5167203e-04 -1.6611640e-03 +2601 5.21 -9.4835543e-04 -1.6554367e-03 +2602 5.212 -9.4505027e-04 -1.6497288e-03 +2603 5.214 -9.4175651e-04 -1.6440400e-03 +2604 5.216 -9.3847410e-04 -1.6383705e-03 +2605 5.218 -9.3520301e-04 -1.6327200e-03 +2606 5.22 -9.3194321e-04 -1.6270886e-03 +2607 5.222 -9.2869465e-04 -1.6214763e-03 +2608 5.224 -9.2545729e-04 -1.6158828e-03 +2609 5.226 -9.2223110e-04 -1.6103083e-03 +2610 5.228 -9.1901604e-04 -1.6047525e-03 +2611 5.23 -9.1581208e-04 -1.5992155e-03 +2612 5.232 -9.1261917e-04 -1.5936972e-03 +2613 5.234 -9.0943728e-04 -1.5881976e-03 +2614 5.236 -9.0626637e-04 -1.5827165e-03 +2615 5.238 -9.0310640e-04 -1.5772539e-03 +2616 5.24 -8.9995734e-04 -1.5718098e-03 +2617 5.242 -8.9681915e-04 -1.5663841e-03 +2618 5.244 -8.9369179e-04 -1.5609767e-03 +2619 5.246 -8.9057523e-04 -1.5555876e-03 +2620 5.248 -8.8746943e-04 -1.5502168e-03 +2621 5.25 -8.8437435e-04 -1.5448640e-03 +2622 5.252 -8.8128996e-04 -1.5395294e-03 +2623 5.254 -8.7821622e-04 -1.5342129e-03 +2624 5.256 -8.7515310e-04 -1.5289143e-03 +2625 5.258 -8.7210055e-04 -1.5236336e-03 +2626 5.26 -8.6905855e-04 -1.5183708e-03 +2627 5.262 -8.6602706e-04 -1.5131258e-03 +2628 5.264 -8.6300603e-04 -1.5078986e-03 +2629 5.266 -8.5999545e-04 -1.5026891e-03 +2630 5.268 -8.5699527e-04 -1.4974972e-03 +2631 5.27 -8.5400545e-04 -1.4923229e-03 +2632 5.272 -8.5102596e-04 -1.4871661e-03 +2633 5.274 -8.4805677e-04 -1.4820268e-03 +2634 5.276 -8.4509784e-04 -1.4769049e-03 +2635 5.278 -8.4214914e-04 -1.4718003e-03 +2636 5.28 -8.3921063e-04 -1.4667130e-03 +2637 5.282 -8.3628228e-04 -1.4616430e-03 +2638 5.284 -8.3336405e-04 -1.4565902e-03 +2639 5.286 -8.3045591e-04 -1.4515545e-03 +2640 5.288 -8.2755782e-04 -1.4465359e-03 +2641 5.29 -8.2466975e-04 -1.4415343e-03 +2642 5.292 -8.2179167e-04 -1.4365496e-03 +2643 5.294 -8.1892354e-04 -1.4315819e-03 +2644 5.296 -8.1606533e-04 -1.4266310e-03 +2645 5.298 -8.1321701e-04 -1.4216969e-03 +2646 5.3 -8.1037853e-04 -1.4167796e-03 +2647 5.302 -8.0754988e-04 -1.4118790e-03 +2648 5.304 -8.0473100e-04 -1.4069949e-03 +2649 5.306 -8.0192189e-04 -1.4021275e-03 +2650 5.308 -7.9912248e-04 -1.3972766e-03 +2651 5.31 -7.9633277e-04 -1.3924422e-03 +2652 5.312 -7.9355270e-04 -1.3876242e-03 +2653 5.314 -7.9078226e-04 -1.3828225e-03 +2654 5.316 -7.8802140e-04 -1.3780372e-03 +2655 5.318 -7.8527010e-04 -1.3732681e-03 +2656 5.32 -7.8252832e-04 -1.3685152e-03 +2657 5.322 -7.7979603e-04 -1.3637785e-03 +2658 5.324 -7.7707320e-04 -1.3590579e-03 +2659 5.326 -7.7435979e-04 -1.3543533e-03 +2660 5.328 -7.7165577e-04 -1.3496648e-03 +2661 5.33 -7.6896112e-04 -1.3449921e-03 +2662 5.332 -7.6627579e-04 -1.3403354e-03 +2663 5.334 -7.6359976e-04 -1.3356945e-03 +2664 5.336 -7.6093300e-04 -1.3310694e-03 +2665 5.338 -7.5827548e-04 -1.3264600e-03 +2666 5.34 -7.5562715e-04 -1.3218663e-03 +2667 5.342 -7.5298800e-04 -1.3172882e-03 +2668 5.344 -7.5035799e-04 -1.3127257e-03 +2669 5.346 -7.4773709e-04 -1.3081788e-03 +2670 5.348 -7.4512526e-04 -1.3036473e-03 +2671 5.35 -7.4252249e-04 -1.2991313e-03 +2672 5.352 -7.3992873e-04 -1.2946306e-03 +2673 5.354 -7.3734396e-04 -1.2901453e-03 +2674 5.356 -7.3476814e-04 -1.2856752e-03 +2675 5.358 -7.3220124e-04 -1.2812204e-03 +2676 5.36 -7.2964325e-04 -1.2767807e-03 +2677 5.362 -7.2709411e-04 -1.2723562e-03 +2678 5.364 -7.2455381e-04 -1.2679467e-03 +2679 5.366 -7.2202232e-04 -1.2635523e-03 +2680 5.368 -7.1949959e-04 -1.2591728e-03 +2681 5.37 -7.1698561e-04 -1.2548083e-03 +2682 5.372 -7.1448035e-04 -1.2504587e-03 +2683 5.374 -7.1198377e-04 -1.2461239e-03 +2684 5.376 -7.0949584e-04 -1.2418038e-03 +2685 5.378 -7.0701654e-04 -1.2374985e-03 +2686 5.38 -7.0454584e-04 -1.2332079e-03 +2687 5.382 -7.0208370e-04 -1.2289319e-03 +2688 5.384 -6.9963010e-04 -1.2246706e-03 +2689 5.386 -6.9718501e-04 -1.2204237e-03 +2690 5.388 -6.9474840e-04 -1.2161914e-03 +2691 5.39 -6.9232024e-04 -1.2119734e-03 +2692 5.392 -6.8990049e-04 -1.2077699e-03 +2693 5.394 -6.8748915e-04 -1.2035808e-03 +2694 5.396 -6.8508616e-04 -1.1994059e-03 +2695 5.398 -6.8269151e-04 -1.1952453e-03 +2696 5.4 -6.8030517e-04 -1.1910989e-03 +2697 5.402 -6.7792711e-04 -1.1869667e-03 +2698 5.404 -6.7555730e-04 -1.1828486e-03 +2699 5.406 -6.7319570e-04 -1.1787445e-03 +2700 5.408 -6.7084231e-04 -1.1746545e-03 +2701 5.41 -6.6849708e-04 -1.1705784e-03 +2702 5.412 -6.6615999e-04 -1.1665163e-03 +2703 5.414 -6.6383100e-04 -1.1624680e-03 +2704 5.416 -6.6151010e-04 -1.1584336e-03 +2705 5.418 -6.5919726e-04 -1.1544130e-03 +2706 5.42 -6.5689244e-04 -1.1504061e-03 +2707 5.422 -6.5459563e-04 -1.1464130e-03 +2708 5.424 -6.5230678e-04 -1.1424334e-03 +2709 5.426 -6.5002588e-04 -1.1384675e-03 +2710 5.428 -6.4775290e-04 -1.1345152e-03 +2711 5.43 -6.4548781e-04 -1.1305763e-03 +2712 5.432 -6.4323059e-04 -1.1266510e-03 +2713 5.434 -6.4098120e-04 -1.1227391e-03 +2714 5.436 -6.3873962e-04 -1.1188405e-03 +2715 5.438 -6.3650583e-04 -1.1149553e-03 +2716 5.44 -6.3427979e-04 -1.1110834e-03 +2717 5.442 -6.3206149e-04 -1.1072248e-03 +2718 5.444 -6.2985089e-04 -1.1033793e-03 +2719 5.446 -6.2764796e-04 -1.0995470e-03 +2720 5.448 -6.2545269e-04 -1.0957279e-03 +2721 5.45 -6.2326504e-04 -1.0919218e-03 +2722 5.452 -6.2108499e-04 -1.0881288e-03 +2723 5.454 -6.1891252e-04 -1.0843487e-03 +2724 5.456 -6.1674759e-04 -1.0805816e-03 +2725 5.458 -6.1459018e-04 -1.0768274e-03 +2726 5.46 -6.1244027e-04 -1.0730860e-03 +2727 5.462 -6.1029783e-04 -1.0693575e-03 +2728 5.464 -6.0816283e-04 -1.0656418e-03 +2729 5.466 -6.0603525e-04 -1.0619388e-03 +2730 5.468 -6.0391507e-04 -1.0582484e-03 +2731 5.47 -6.0180225e-04 -1.0545708e-03 +2732 5.472 -5.9969678e-04 -1.0509057e-03 +2733 5.474 -5.9759862e-04 -1.0472532e-03 +2734 5.476 -5.9550776e-04 -1.0436132e-03 +2735 5.478 -5.9342416e-04 -1.0399857e-03 +2736 5.48 -5.9134780e-04 -1.0363707e-03 +2737 5.482 -5.8927867e-04 -1.0327680e-03 +2738 5.484 -5.8721672e-04 -1.0291777e-03 +2739 5.486 -5.8516195e-04 -1.0255997e-03 +2740 5.488 -5.8311432e-04 -1.0220340e-03 +2741 5.49 -5.8107381e-04 -1.0184805e-03 +2742 5.492 -5.7904039e-04 -1.0149392e-03 +2743 5.494 -5.7701404e-04 -1.0114101e-03 +2744 5.496 -5.7499474e-04 -1.0078931e-03 +2745 5.498 -5.7298246e-04 -1.0043881e-03 +2746 5.5 -5.7097718e-04 -1.0008952e-03 +2747 5.502 -5.6897887e-04 -9.9741425e-04 +2748 5.504 -5.6698751e-04 -9.9394527e-04 +2749 5.506 -5.6500308e-04 -9.9048820e-04 +2750 5.508 -5.6302555e-04 -9.8704300e-04 +2751 5.51 -5.6105490e-04 -9.8360963e-04 +2752 5.512 -5.5909111e-04 -9.8018805e-04 +2753 5.514 -5.5713414e-04 -9.7677823e-04 +2754 5.516 -5.5518399e-04 -9.7338012e-04 +2755 5.518 -5.5324061e-04 -9.6999368e-04 +2756 5.52 -5.5130400e-04 -9.6661888e-04 +2757 5.522 -5.4937413e-04 -9.6325567e-04 +2758 5.524 -5.4745097e-04 -9.5990402e-04 +2759 5.526 -5.4553451e-04 -9.5656389e-04 +2760 5.528 -5.4362471e-04 -9.5323524e-04 +2761 5.53 -5.4172156e-04 -9.4991803e-04 +2762 5.532 -5.3982503e-04 -9.4661223e-04 +2763 5.534 -5.3793510e-04 -9.4331778e-04 +2764 5.536 -5.3605175e-04 -9.4003467e-04 +2765 5.538 -5.3417496e-04 -9.3676284e-04 +2766 5.54 -5.3230469e-04 -9.3350227e-04 +2767 5.542 -5.3044094e-04 -9.3025290e-04 +2768 5.544 -5.2858367e-04 -9.2701472e-04 +2769 5.546 -5.2673287e-04 -9.2378767e-04 +2770 5.548 -5.2488852e-04 -9.2057172e-04 +2771 5.55 -5.2305058e-04 -9.1736684e-04 +2772 5.552 -5.2121904e-04 -9.1417298e-04 +2773 5.554 -5.1939388e-04 -9.1099011e-04 +2774 5.556 -5.1757507e-04 -9.0781820e-04 +2775 5.558 -5.1576260e-04 -9.0465720e-04 +2776 5.56 -5.1395644e-04 -9.0150708e-04 +2777 5.562 -5.1215656e-04 -8.9836780e-04 +2778 5.564 -5.1036296e-04 -8.9523933e-04 +2779 5.566 -5.0857560e-04 -8.9212163e-04 +2780 5.568 -5.0679446e-04 -8.8901466e-04 +2781 5.57 -5.0501953e-04 -8.8591839e-04 +2782 5.572 -5.0325078e-04 -8.8283278e-04 +2783 5.574 -5.0148820e-04 -8.7975780e-04 +2784 5.576 -4.9973175e-04 -8.7669340e-04 +2785 5.578 -4.9798141e-04 -8.7363956e-04 +2786 5.58 -4.9623718e-04 -8.7059624e-04 +2787 5.582 -4.9449902e-04 -8.6756341e-04 +2788 5.584 -4.9276692e-04 -8.6454102e-04 +2789 5.586 -4.9104085e-04 -8.6152905e-04 +2790 5.588 -4.8932080e-04 -8.5852745e-04 +2791 5.59 -4.8760674e-04 -8.5553620e-04 +2792 5.592 -4.8589865e-04 -8.5255525e-04 +2793 5.594 -4.8419651e-04 -8.4958458e-04 +2794 5.596 -4.8250030e-04 -8.4662415e-04 +2795 5.598 -4.8081000e-04 -8.4367392e-04 +2796 5.6 -4.7912560e-04 -8.4073386e-04 +2797 5.602 -4.7744706e-04 -8.3780394e-04 +2798 5.604 -4.7577438e-04 -8.3488412e-04 +2799 5.606 -4.7410752e-04 -8.3197437e-04 +2800 5.608 -4.7244647e-04 -8.2907465e-04 +2801 5.61 -4.7079121e-04 -8.2618493e-04 +2802 5.612 -4.6914172e-04 -8.2330518e-04 +2803 5.614 -4.6749799e-04 -8.2043536e-04 +2804 5.616 -4.6585998e-04 -8.1757543e-04 +2805 5.618 -4.6422768e-04 -8.1472538e-04 +2806 5.62 -4.6260107e-04 -8.1188515e-04 +2807 5.622 -4.6098013e-04 -8.0905473e-04 +2808 5.624 -4.5936484e-04 -8.0623407e-04 +2809 5.626 -4.5775519e-04 -8.0342315e-04 +2810 5.628 -4.5615114e-04 -8.0062192e-04 +2811 5.63 -4.5455269e-04 -7.9783036e-04 +2812 5.632 -4.5295982e-04 -7.9504844e-04 +2813 5.634 -4.5137249e-04 -7.9227612e-04 +2814 5.636 -4.4979071e-04 -7.8951337e-04 +2815 5.638 -4.4821443e-04 -7.8676015e-04 +2816 5.64 -4.4664366e-04 -7.8401644e-04 +2817 5.642 -4.4507836e-04 -7.8128221e-04 +2818 5.644 -4.4351852e-04 -7.7855741e-04 +2819 5.646 -4.4196413e-04 -7.7584203e-04 +2820 5.648 -4.4041515e-04 -7.7313602e-04 +2821 5.65 -4.3887158e-04 -7.7043936e-04 +2822 5.652 -4.3733339e-04 -7.6775201e-04 +2823 5.654 -4.3580056e-04 -7.6507394e-04 +2824 5.656 -4.3427308e-04 -7.6240513e-04 +2825 5.658 -4.3275093e-04 -7.5974553e-04 +2826 5.66 -4.3123410e-04 -7.5709512e-04 +2827 5.662 -4.2972255e-04 -7.5445387e-04 +2828 5.664 -4.2821627e-04 -7.5182175e-04 +2829 5.666 -4.2671525e-04 -7.4919872e-04 +2830 5.668 -4.2521947e-04 -7.4658476e-04 +2831 5.67 -4.2372891e-04 -7.4397983e-04 +2832 5.672 -4.2224355e-04 -7.4138390e-04 +2833 5.674 -4.2076337e-04 -7.3879695e-04 +2834 5.676 -4.1928835e-04 -7.3621894e-04 +2835 5.678 -4.1781849e-04 -7.3364984e-04 +2836 5.68 -4.1635375e-04 -7.3108962e-04 +2837 5.682 -4.1489412e-04 -7.2853825e-04 +2838 5.684 -4.1343959e-04 -7.2599571e-04 +2839 5.686 -4.1199013e-04 -7.2346196e-04 +2840 5.688 -4.1054574e-04 -7.2093697e-04 +2841 5.69 -4.0910638e-04 -7.1842071e-04 +2842 5.692 -4.0767205e-04 -7.1591316e-04 +2843 5.694 -4.0624272e-04 -7.1341427e-04 +2844 5.696 -4.0481838e-04 -7.1092403e-04 +2845 5.698 -4.0339902e-04 -7.0844241e-04 +2846 5.7 -4.0198461e-04 -7.0596937e-04 +2847 5.702 -4.0057514e-04 -7.0350489e-04 +2848 5.704 -3.9917058e-04 -7.0104893e-04 +2849 5.706 -3.9777093e-04 -6.9860147e-04 +2850 5.708 -3.9637617e-04 -6.9616248e-04 +2851 5.71 -3.9498628e-04 -6.9373193e-04 +2852 5.712 -3.9360124e-04 -6.9130980e-04 +2853 5.714 -3.9222103e-04 -6.8889604e-04 +2854 5.716 -3.9084565e-04 -6.8649064e-04 +2855 5.718 -3.8947507e-04 -6.8409357e-04 +2856 5.72 -3.8810927e-04 -6.8170479e-04 +2857 5.722 -3.8674824e-04 -6.7932429e-04 +2858 5.724 -3.8539197e-04 -6.7695202e-04 +2859 5.726 -3.8404043e-04 -6.7458797e-04 +2860 5.728 -3.8269361e-04 -6.7223210e-04 +2861 5.73 -3.8135149e-04 -6.6988440e-04 +2862 5.732 -3.8001407e-04 -6.6754482e-04 +2863 5.734 -3.7868131e-04 -6.6521334e-04 +2864 5.736 -3.7735321e-04 -6.6288994e-04 +2865 5.738 -3.7602974e-04 -6.6057458e-04 +2866 5.74 -3.7471090e-04 -6.5826725e-04 +2867 5.742 -3.7339667e-04 -6.5596791e-04 +2868 5.744 -3.7208703e-04 -6.5367653e-04 +2869 5.746 -3.7078196e-04 -6.5139309e-04 +2870 5.748 -3.6948145e-04 -6.4911757e-04 +2871 5.75 -3.6818548e-04 -6.4684992e-04 +2872 5.752 -3.6689404e-04 -6.4459014e-04 +2873 5.754 -3.6560712e-04 -6.4233818e-04 +2874 5.756 -3.6432469e-04 -6.4009403e-04 +2875 5.758 -3.6304674e-04 -6.3785766e-04 +2876 5.76 -3.6177325e-04 -6.3562903e-04 +2877 5.762 -3.6050421e-04 -6.3340813e-04 +2878 5.764 -3.5923961e-04 -6.3119493e-04 +2879 5.766 -3.5797943e-04 -6.2898940e-04 +2880 5.768 -3.5672365e-04 -6.2679152e-04 +2881 5.77 -3.5547226e-04 -6.2460126e-04 +2882 5.772 -3.5422524e-04 -6.2241859e-04 +2883 5.774 -3.5298258e-04 -6.2024348e-04 +2884 5.776 -3.5174426e-04 -6.1807592e-04 +2885 5.778 -3.5051027e-04 -6.1591588e-04 +2886 5.78 -3.4928059e-04 -6.1376332e-04 +2887 5.782 -3.4805521e-04 -6.1161824e-04 +2888 5.784 -3.4683411e-04 -6.0948059e-04 +2889 5.786 -3.4561729e-04 -6.0735035e-04 +2890 5.788 -3.4440471e-04 -6.0522750e-04 +2891 5.79 -3.4319637e-04 -6.0311202e-04 +2892 5.792 -3.4199226e-04 -6.0100388e-04 +2893 5.794 -3.4079235e-04 -5.9890304e-04 +2894 5.796 -3.3959664e-04 -5.9680950e-04 +2895 5.798 -3.3840511e-04 -5.9472322e-04 +2896 5.8 -3.3721774e-04 -5.9264418e-04 +2897 5.802 -3.3603453e-04 -5.9057235e-04 +2898 5.804 -3.3485545e-04 -5.8850771e-04 +2899 5.806 -3.3368049e-04 -5.8645024e-04 +2900 5.808 -3.3250964e-04 -5.8439991e-04 +2901 5.81 -3.3134289e-04 -5.8235669e-04 +2902 5.812 -3.3018021e-04 -5.8032056e-04 +2903 5.814 -3.2902160e-04 -5.7829150e-04 +2904 5.816 -3.2786704e-04 -5.7626949e-04 +2905 5.818 -3.2671652e-04 -5.7425449e-04 +2906 5.82 -3.2557002e-04 -5.7224649e-04 +2907 5.822 -3.2442753e-04 -5.7024546e-04 +2908 5.824 -3.2328903e-04 -5.6825138e-04 +2909 5.826 -3.2215452e-04 -5.6626422e-04 +2910 5.828 -3.2102397e-04 -5.6428396e-04 +2911 5.83 -3.1989737e-04 -5.6231057e-04 +2912 5.832 -3.1877472e-04 -5.6034404e-04 +2913 5.834 -3.1765599e-04 -5.5838434e-04 +2914 5.836 -3.1654118e-04 -5.5643144e-04 +2915 5.838 -3.1543026e-04 -5.5448533e-04 +2916 5.84 -3.1432323e-04 -5.5254597e-04 +2917 5.842 -3.1322008e-04 -5.5061336e-04 +2918 5.844 -3.1212078e-04 -5.4868745e-04 +2919 5.846 -3.1102532e-04 -5.4676824e-04 +2920 5.848 -3.0993370e-04 -5.4485569e-04 +2921 5.85 -3.0884589e-04 -5.4294978e-04 +2922 5.852 -3.0776189e-04 -5.4105050e-04 +2923 5.854 -3.0668169e-04 -5.3915782e-04 +2924 5.856 -3.0560526e-04 -5.3727171e-04 +2925 5.858 -3.0453260e-04 -5.3539216e-04 +2926 5.86 -3.0346369e-04 -5.3351914e-04 +2927 5.862 -3.0239852e-04 -5.3165262e-04 +2928 5.864 -3.0133707e-04 -5.2979260e-04 +2929 5.866 -3.0027934e-04 -5.2793903e-04 +2930 5.868 -2.9922531e-04 -5.2609191e-04 +2931 5.87 -2.9817497e-04 -5.2425121e-04 +2932 5.872 -2.9712830e-04 -5.2241691e-04 +2933 5.874 -2.9608530e-04 -5.2058899e-04 +2934 5.876 -2.9504594e-04 -5.1876742e-04 +2935 5.878 -2.9401022e-04 -5.1695218e-04 +2936 5.88 -2.9297813e-04 -5.1514325e-04 +2937 5.882 -2.9194965e-04 -5.1334061e-04 +2938 5.884 -2.9092476e-04 -5.1154424e-04 +2939 5.886 -2.8990346e-04 -5.0975411e-04 +2940 5.888 -2.8888574e-04 -5.0797021e-04 +2941 5.89 -2.8787158e-04 -5.0619252e-04 +2942 5.892 -2.8686097e-04 -5.0442100e-04 +2943 5.894 -2.8585389e-04 -5.0265565e-04 +2944 5.896 -2.8485034e-04 -5.0089643e-04 +2945 5.898 -2.8385030e-04 -4.9914333e-04 +2946 5.9 -2.8285376e-04 -4.9739633e-04 +2947 5.902 -2.8186071e-04 -4.9565541e-04 +2948 5.904 -2.8087114e-04 -4.9392054e-04 +2949 5.906 -2.7988503e-04 -4.9219171e-04 +2950 5.908 -2.7890237e-04 -4.9046889e-04 +2951 5.91 -2.7792315e-04 -4.8875207e-04 +2952 5.912 -2.7694735e-04 -4.8704122e-04 +2953 5.914 -2.7597498e-04 -4.8533632e-04 +2954 5.916 -2.7500601e-04 -4.8363735e-04 +2955 5.918 -2.7404042e-04 -4.8194430e-04 +2956 5.92 -2.7307822e-04 -4.8025713e-04 +2957 5.922 -2.7211939e-04 -4.7857584e-04 +2958 5.924 -2.7116392e-04 -4.7690040e-04 +2959 5.926 -2.7021179e-04 -4.7523079e-04 +2960 5.928 -2.6926299e-04 -4.7356698e-04 +2961 5.93 -2.6831751e-04 -4.7190897e-04 +2962 5.932 -2.6737535e-04 -4.7025673e-04 +2963 5.934 -2.6643648e-04 -4.6861025e-04 +2964 5.936 -2.6550091e-04 -4.6696949e-04 +2965 5.938 -2.6456860e-04 -4.6533444e-04 +2966 5.94 -2.6363956e-04 -4.6370509e-04 +2967 5.942 -2.6271378e-04 -4.6208141e-04 +2968 5.944 -2.6179123e-04 -4.6046338e-04 +2969 5.946 -2.6087192e-04 -4.5885098e-04 +2970 5.948 -2.5995583e-04 -4.5724420e-04 +2971 5.95 -2.5904294e-04 -4.5564301e-04 +2972 5.952 -2.5813325e-04 -4.5404740e-04 +2973 5.954 -2.5722675e-04 -4.5245734e-04 +2974 5.956 -2.5632342e-04 -4.5087282e-04 +2975 5.958 -2.5542325e-04 -4.4929382e-04 +2976 5.96 -2.5452624e-04 -4.4772032e-04 +2977 5.962 -2.5363237e-04 -4.4615230e-04 +2978 5.964 -2.5274163e-04 -4.4458973e-04 +2979 5.966 -2.5185400e-04 -4.4303262e-04 +2980 5.968 -2.5096949e-04 -4.4148092e-04 +2981 5.97 -2.5008808e-04 -4.3993463e-04 +2982 5.972 -2.4920975e-04 -4.3839373e-04 +2983 5.974 -2.4833450e-04 -4.3685819e-04 +2984 5.976 -2.4746231e-04 -4.3532800e-04 +2985 5.978 -2.4659318e-04 -4.3380314e-04 +2986 5.98 -2.4572710e-04 -4.3228360e-04 +2987 5.982 -2.4486405e-04 -4.3076935e-04 +2988 5.984 -2.4400402e-04 -4.2926038e-04 +2989 5.986 -2.4314700e-04 -4.2775666e-04 +2990 5.988 -2.4229299e-04 -4.2625818e-04 +2991 5.99 -2.4144196e-04 -4.2476493e-04 +2992 5.992 -2.4059392e-04 -4.2327688e-04 +2993 5.994 -2.3974885e-04 -4.2179401e-04 +2994 5.996 -2.3890674e-04 -4.2031631e-04 +2995 5.998 -2.3806758e-04 -4.1884376e-04 +2996 6.0 -2.3723137e-04 -4.1737635e-04 +2997 6.002 -2.3639808e-04 -4.1591405e-04 +2998 6.004 -2.3556771e-04 -4.1445684e-04 +2999 6.006 -2.3474024e-04 -4.1300472e-04 +3000 6.008 -2.3391568e-04 -4.1155765e-04 +3001 6.01 -2.3309401e-04 -4.1011563e-04 +3002 6.012 -2.3227522e-04 -4.0867864e-04 +3003 6.014 -2.3145929e-04 -4.0724666e-04 +3004 6.016 -2.3064623e-04 -4.0581967e-04 +3005 6.018 -2.2983601e-04 -4.0439765e-04 +3006 6.02 -2.2902863e-04 -4.0298059e-04 +3007 6.022 -2.2822409e-04 -4.0156847e-04 +3008 6.024 -2.2742236e-04 -4.0016128e-04 +3009 6.026 -2.2662344e-04 -3.9875899e-04 +3010 6.028 -2.2582732e-04 -3.9736160e-04 +3011 6.03 -2.2503399e-04 -3.9596907e-04 +3012 6.032 -2.2424344e-04 -3.9458140e-04 +3013 6.034 -2.2345566e-04 -3.9319857e-04 +3014 6.036 -2.2267064e-04 -3.9182057e-04 +3015 6.038 -2.2188837e-04 -3.9044737e-04 +3016 6.04 -2.2110885e-04 -3.8907895e-04 +3017 6.042 -2.2033205e-04 -3.8771532e-04 +3018 6.044 -2.1955798e-04 -3.8635643e-04 +3019 6.046 -2.1878663e-04 -3.8500229e-04 +3020 6.048 -2.1801797e-04 -3.8365287e-04 +3021 6.05 -2.1725201e-04 -3.8230816e-04 +3022 6.052 -2.1648873e-04 -3.8096814e-04 +3023 6.054 -2.1572813e-04 -3.7963279e-04 +3024 6.056 -2.1497020e-04 -3.7830211e-04 +3025 6.058 -2.1421492e-04 -3.7697606e-04 +3026 6.06 -2.1346229e-04 -3.7565464e-04 +3027 6.062 -2.1271230e-04 -3.7433784e-04 +3028 6.064 -2.1196494e-04 -3.7302562e-04 +3029 6.066 -2.1122020e-04 -3.7171799e-04 +3030 6.068 -2.1047806e-04 -3.7041492e-04 +3031 6.07 -2.0973853e-04 -3.6911639e-04 +3032 6.072 -2.0900160e-04 -3.6782240e-04 +3033 6.074 -2.0826724e-04 -3.6653292e-04 +3034 6.076 -2.0753546e-04 -3.6524794e-04 +3035 6.078 -2.0680625e-04 -3.6396745e-04 +3036 6.08 -2.0607959e-04 -3.6269142e-04 +3037 6.082 -2.0535548e-04 -3.6141985e-04 +3038 6.084 -2.0463391e-04 -3.6015272e-04 +3039 6.086 -2.0391486e-04 -3.5889001e-04 +3040 6.088 -2.0319834e-04 -3.5763171e-04 +3041 6.09 -2.0248433e-04 -3.5637779e-04 +3042 6.092 -2.0177283e-04 -3.5512826e-04 +3043 6.094 -2.0106382e-04 -3.5388309e-04 +3044 6.096 -2.0035729e-04 -3.5264227e-04 +3045 6.098 -1.9965325e-04 -3.5140577e-04 +3046 6.1 -1.9895167e-04 -3.5017360e-04 +3047 6.102 -1.9825255e-04 -3.4894572e-04 +3048 6.104 -1.9755588e-04 -3.4772213e-04 +3049 6.106 -1.9686166e-04 -3.4650282e-04 +3050 6.108 -1.9616987e-04 -3.4528776e-04 +3051 6.11 -1.9548050e-04 -3.4407695e-04 +3052 6.112 -1.9479356e-04 -3.4287036e-04 +3053 6.114 -1.9410902e-04 -3.4166798e-04 +3054 6.116 -1.9342688e-04 -3.4046981e-04 +3055 6.118 -1.9274714e-04 -3.3927582e-04 +3056 6.12 -1.9206978e-04 -3.3808599e-04 +3057 6.122 -1.9139479e-04 -3.3690033e-04 +3058 6.124 -1.9072217e-04 -3.3571880e-04 +3059 6.126 -1.9005191e-04 -3.3454140e-04 +3060 6.128 -1.8938400e-04 -3.3336812e-04 +3061 6.13 -1.8871844e-04 -3.3219893e-04 +3062 6.132 -1.8805521e-04 -3.3103382e-04 +3063 6.134 -1.8739430e-04 -3.2987279e-04 +3064 6.136 -1.8673571e-04 -3.2871581e-04 +3065 6.138 -1.8607943e-04 -3.2756287e-04 +3066 6.14 -1.8542546e-04 -3.2641396e-04 +3067 6.142 -1.8477377e-04 -3.2526906e-04 +3068 6.144 -1.8412438e-04 -3.2412816e-04 +3069 6.146 -1.8347726e-04 -3.2299125e-04 +3070 6.148 -1.8283241e-04 -3.2185831e-04 +3071 6.15 -1.8218982e-04 -3.2072932e-04 +3072 6.152 -1.8154949e-04 -3.1960429e-04 +3073 6.154 -1.8091140e-04 -3.1848318e-04 +3074 6.156 -1.8027556e-04 -3.1736599e-04 +3075 6.158 -1.7964194e-04 -3.1625270e-04 +3076 6.16 -1.7901054e-04 -3.1514331e-04 +3077 6.162 -1.7838136e-04 -3.1403779e-04 +3078 6.164 -1.7775439e-04 -3.1293613e-04 +3079 6.166 -1.7712961e-04 -3.1183832e-04 +3080 6.168 -1.7650703e-04 -3.1074435e-04 +3081 6.17 -1.7588663e-04 -3.0965421e-04 +3082 6.172 -1.7526841e-04 -3.0856787e-04 +3083 6.174 -1.7465236e-04 -3.0748533e-04 +3084 6.176 -1.7403847e-04 -3.0640657e-04 +3085 6.178 -1.7342673e-04 -3.0533159e-04 +3086 6.18 -1.7281714e-04 -3.0426036e-04 +3087 6.182 -1.7220969e-04 -3.0319287e-04 +3088 6.184 -1.7160437e-04 -3.0212912e-04 +3089 6.186 -1.7100117e-04 -3.0106908e-04 +3090 6.188 -1.7040009e-04 -3.0001275e-04 +3091 6.19 -1.6980112e-04 -2.9896011e-04 +3092 6.192 -1.6920424e-04 -2.9791115e-04 +3093 6.194 -1.6860947e-04 -2.9686586e-04 +3094 6.196 -1.6801678e-04 -2.9582422e-04 +3095 6.198 -1.6742617e-04 -2.9478623e-04 +3096 6.2 -1.6683763e-04 -2.9375186e-04 +3097 6.202 -1.6625116e-04 -2.9272111e-04 +3098 6.204 -1.6566674e-04 -2.9169397e-04 +3099 6.206 -1.6508438e-04 -2.9067041e-04 +3100 6.208 -1.6450406e-04 -2.8965043e-04 +3101 6.21 -1.6392578e-04 -2.8863402e-04 +3102 6.212 -1.6334952e-04 -2.8762117e-04 +3103 6.214 -1.6277529e-04 -2.8661185e-04 +3104 6.216 -1.6220307e-04 -2.8560607e-04 +3105 6.218 -1.6163286e-04 -2.8460380e-04 +3106 6.22 -1.6106465e-04 -2.8360504e-04 +3107 6.222 -1.6049844e-04 -2.8260977e-04 +3108 6.224 -1.5993421e-04 -2.8161798e-04 +3109 6.226 -1.5937197e-04 -2.8062966e-04 +3110 6.228 -1.5881169e-04 -2.7964479e-04 +3111 6.23 -1.5825338e-04 -2.7866337e-04 +3112 6.232 -1.5769704e-04 -2.7768538e-04 +3113 6.234 -1.5714264e-04 -2.7671082e-04 +3114 6.236 -1.5659019e-04 -2.7573966e-04 +3115 6.238 -1.5603968e-04 -2.7477190e-04 +3116 6.24 -1.5549110e-04 -2.7380752e-04 +3117 6.242 -1.5494445e-04 -2.7284652e-04 +3118 6.244 -1.5439971e-04 -2.7188888e-04 +3119 6.246 -1.5385689e-04 -2.7093458e-04 +3120 6.248 -1.5331597e-04 -2.6998363e-04 +3121 6.25 -1.5277695e-04 -2.6903600e-04 +3122 6.252 -1.5223983e-04 -2.6809169e-04 +3123 6.254 -1.5170458e-04 -2.6715068e-04 +3124 6.256 -1.5117122e-04 -2.6621297e-04 +3125 6.258 -1.5063973e-04 -2.6527853e-04 +3126 6.26 -1.5011010e-04 -2.6434737e-04 +3127 6.262 -1.4958234e-04 -2.6341946e-04 +3128 6.264 -1.4905642e-04 -2.6249480e-04 +3129 6.266 -1.4853236e-04 -2.6157337e-04 +3130 6.268 -1.4801013e-04 -2.6065517e-04 +3131 6.27 -1.4748973e-04 -2.5974018e-04 +3132 6.272 -1.4697117e-04 -2.5882839e-04 +3133 6.274 -1.4645442e-04 -2.5791980e-04 +3134 6.276 -1.4593949e-04 -2.5701438e-04 +3135 6.278 -1.4542636e-04 -2.5611213e-04 +3136 6.28 -1.4491503e-04 -2.5521304e-04 +3137 6.282 -1.4440550e-04 -2.5431709e-04 +3138 6.284 -1.4389776e-04 -2.5342428e-04 +3139 6.286 -1.4339181e-04 -2.5253460e-04 +3140 6.288 -1.4288762e-04 -2.5164802e-04 +3141 6.29 -1.4238521e-04 -2.5076456e-04 +3142 6.292 -1.4188456e-04 -2.4988418e-04 +3143 6.294 -1.4138567e-04 -2.4900688e-04 +3144 6.296 -1.4088853e-04 -2.4813266e-04 +3145 6.298 -1.4039314e-04 -2.4726149e-04 +3146 6.3 -1.3989949e-04 -2.4639338e-04 +3147 6.302 -1.3940756e-04 -2.4552830e-04 +3148 6.304 -1.3891737e-04 -2.4466625e-04 +3149 6.306 -1.3842890e-04 -2.4380722e-04 +3150 6.308 -1.3794214e-04 -2.4295120e-04 +3151 6.31 -1.3745709e-04 -2.4209817e-04 +3152 6.312 -1.3697374e-04 -2.4124813e-04 +3153 6.314 -1.3649210e-04 -2.4040106e-04 +3154 6.316 -1.3601214e-04 -2.3955696e-04 +3155 6.318 -1.3553387e-04 -2.3871582e-04 +3156 6.32 -1.3505727e-04 -2.3787762e-04 +3157 6.322 -1.3458235e-04 -2.3704235e-04 +3158 6.324 -1.3410910e-04 -2.3621001e-04 +3159 6.326 -1.3363751e-04 -2.3538058e-04 +3160 6.328 -1.3316758e-04 -2.3455406e-04 +3161 6.33 -1.3269929e-04 -2.3373043e-04 +3162 6.332 -1.3223265e-04 -2.3290968e-04 +3163 6.334 -1.3176765e-04 -2.3209181e-04 +3164 6.336 -1.3130429e-04 -2.3127680e-04 +3165 6.338 -1.3084254e-04 -2.3046465e-04 +3166 6.34 -1.3038242e-04 -2.2965534e-04 +3167 6.342 -1.2992392e-04 -2.2884886e-04 +3168 6.344 -1.2946703e-04 -2.2804521e-04 +3169 6.346 -1.2901174e-04 -2.2724437e-04 +3170 6.348 -1.2855805e-04 -2.2644634e-04 +3171 6.35 -1.2810595e-04 -2.2565110e-04 +3172 6.352 -1.2765544e-04 -2.2485865e-04 +3173 6.354 -1.2720651e-04 -2.2406897e-04 +3174 6.356 -1.2675916e-04 -2.2328206e-04 +3175 6.358 -1.2631338e-04 -2.2249790e-04 +3176 6.36 -1.2586917e-04 -2.2171649e-04 +3177 6.362 -1.2542652e-04 -2.2093782e-04 +3178 6.364 -1.2498542e-04 -2.2016187e-04 +3179 6.366 -1.2454587e-04 -2.1938864e-04 +3180 6.368 -1.2410786e-04 -2.1861812e-04 +3181 6.37 -1.2367139e-04 -2.1785030e-04 +3182 6.372 -1.2323646e-04 -2.1708517e-04 +3183 6.374 -1.2280305e-04 -2.1632272e-04 +3184 6.376 -1.2237117e-04 -2.1556294e-04 +3185 6.378 -1.2194080e-04 -2.1480582e-04 +3186 6.38 -1.2151194e-04 -2.1405135e-04 +3187 6.382 -1.2108459e-04 -2.1329953e-04 +3188 6.384 -1.2065874e-04 -2.1255034e-04 +3189 6.386 -1.2023439e-04 -2.1180378e-04 +3190 6.388 -1.1981152e-04 -2.1105983e-04 +3191 6.39 -1.1939015e-04 -2.1031848e-04 +3192 6.392 -1.1897025e-04 -2.0957974e-04 +3193 6.394 -1.1855182e-04 -2.0884358e-04 +3194 6.396 -1.1813487e-04 -2.0811000e-04 +3195 6.398 -1.1771938e-04 -2.0737899e-04 +3196 6.4 -1.1730535e-04 -2.0665054e-04 +3197 6.402 -1.1689278e-04 -2.0592465e-04 +3198 6.404 -1.1648165e-04 -2.0520129e-04 +3199 6.406 -1.1607197e-04 -2.0448048e-04 +3200 6.408 -1.1566373e-04 -2.0376219e-04 +3201 6.41 -1.1525692e-04 -2.0304641e-04 +3202 6.412 -1.1485154e-04 -2.0233314e-04 +3203 6.414 -1.1444759e-04 -2.0162238e-04 +3204 6.416 -1.1404505e-04 -2.0091410e-04 +3205 6.418 -1.1364393e-04 -2.0020831e-04 +3206 6.42 -1.1324422e-04 -1.9950498e-04 +3207 6.422 -1.1284591e-04 -1.9880413e-04 +3208 6.424 -1.1244900e-04 -1.9810573e-04 +3209 6.426 -1.1205348e-04 -1.9740977e-04 +3210 6.428 -1.1165936e-04 -1.9671626e-04 +3211 6.43 -1.1126662e-04 -1.9602518e-04 +3212 6.432 -1.1087526e-04 -1.9533652e-04 +3213 6.434 -1.1048527e-04 -1.9465027e-04 +3214 6.436 -1.1009665e-04 -1.9396642e-04 +3215 6.438 -1.0970940e-04 -1.9328498e-04 +3216 6.44 -1.0932351e-04 -1.9260592e-04 +3217 6.442 -1.0893898e-04 -1.9192924e-04 +3218 6.444 -1.0855579e-04 -1.9125494e-04 +3219 6.446 -1.0817396e-04 -1.9058300e-04 +3220 6.448 -1.0779346e-04 -1.8991341e-04 +3221 6.45 -1.0741430e-04 -1.8924617e-04 +3222 6.452 -1.0703647e-04 -1.8858127e-04 +3223 6.454 -1.0665997e-04 -1.8791870e-04 +3224 6.456 -1.0628480e-04 -1.8725845e-04 +3225 6.458 -1.0591094e-04 -1.8660052e-04 +3226 6.46 -1.0553839e-04 -1.8594489e-04 +3227 6.462 -1.0516716e-04 -1.8529156e-04 +3228 6.464 -1.0479723e-04 -1.8464052e-04 +3229 6.466 -1.0442859e-04 -1.8399177e-04 +3230 6.468 -1.0406126e-04 -1.8334528e-04 +3231 6.47 -1.0369521e-04 -1.8270107e-04 +3232 6.472 -1.0333045e-04 -1.8205911e-04 +3233 6.474 -1.0296697e-04 -1.8141941e-04 +3234 6.476 -1.0260477e-04 -1.8078194e-04 +3235 6.478 -1.0224384e-04 -1.8014671e-04 +3236 6.48 -1.0188418e-04 -1.7951371e-04 +3237 6.482 -1.0152579e-04 -1.7888293e-04 +3238 6.484 -1.0116865e-04 -1.7825436e-04 +3239 6.486 -1.0081277e-04 -1.7762799e-04 +3240 6.488 -1.0045814e-04 -1.7700382e-04 +3241 6.49 -1.0010475e-04 -1.7638184e-04 +3242 6.492 -9.9752608e-05 -1.7576204e-04 +3243 6.494 -9.9401702e-05 -1.7514441e-04 +3244 6.496 -9.9052029e-05 -1.7452895e-04 +3245 6.498 -9.8703585e-05 -1.7391565e-04 +3246 6.5 -9.8356365e-05 -1.7330449e-04 +3247 6.502 -9.8010365e-05 -1.7269548e-04 +3248 6.504 -9.7665582e-05 -1.7208861e-04 +3249 6.506 -9.7322010e-05 -1.7148386e-04 +3250 6.508 -9.6979645e-05 -1.7088124e-04 +3251 6.51 -9.6638483e-05 -1.7028072e-04 +3252 6.512 -9.6298521e-05 -1.6968232e-04 +3253 6.514 -9.5959753e-05 -1.6908601e-04 +3254 6.516 -9.5622175e-05 -1.6849179e-04 +3255 6.518 -9.5285784e-05 -1.6789966e-04 +3256 6.52 -9.4950575e-05 -1.6730961e-04 +3257 6.522 -9.4616544e-05 -1.6672162e-04 +3258 6.524 -9.4283687e-05 -1.6613569e-04 +3259 6.526 -9.3952000e-05 -1.6555183e-04 +3260 6.528 -9.3621479e-05 -1.6497000e-04 +3261 6.53 -9.3292119e-05 -1.6439022e-04 +3262 6.532 -9.2963916e-05 -1.6381248e-04 +3263 6.534 -9.2636867e-05 -1.6323675e-04 +3264 6.536 -9.2310968e-05 -1.6266305e-04 +3265 6.538 -9.1986214e-05 -1.6209136e-04 +3266 6.54 -9.1662601e-05 -1.6152168e-04 +3267 6.542 -9.1340126e-05 -1.6095399e-04 +3268 6.544 -9.1018784e-05 -1.6038830e-04 +3269 6.546 -9.0698571e-05 -1.5982459e-04 +3270 6.548 -9.0379484e-05 -1.5926286e-04 +3271 6.55 -9.0061519e-05 -1.5870309e-04 +3272 6.552 -8.9744671e-05 -1.5814530e-04 +3273 6.554 -8.9428936e-05 -1.5758945e-04 +3274 6.556 -8.9114311e-05 -1.5703556e-04 +3275 6.558 -8.8800793e-05 -1.5648361e-04 +3276 6.56 -8.8488376e-05 -1.5593360e-04 +3277 6.562 -8.8177057e-05 -1.5538552e-04 +3278 6.564 -8.7866832e-05 -1.5483936e-04 +3279 6.566 -8.7557698e-05 -1.5429511e-04 +3280 6.568 -8.7249651e-05 -1.5375278e-04 +3281 6.57 -8.6942686e-05 -1.5321234e-04 +3282 6.572 -8.6636800e-05 -1.5267381e-04 +3283 6.574 -8.6331989e-05 -1.5213716e-04 +3284 6.576 -8.6028250e-05 -1.5160240e-04 +3285 6.578 -8.5725578e-05 -1.5106951e-04 +3286 6.58 -8.5423971e-05 -1.5053849e-04 +3287 6.582 -8.5123423e-05 -1.5000934e-04 +3288 6.584 -8.4823932e-05 -1.4948204e-04 +3289 6.586 -8.4525494e-05 -1.4895659e-04 +3290 6.588 -8.4228105e-05 -1.4843298e-04 +3291 6.59 -8.3931761e-05 -1.4791122e-04 +3292 6.592 -8.3636459e-05 -1.4739128e-04 +3293 6.594 -8.3342194e-05 -1.4687317e-04 +3294 6.596 -8.3048965e-05 -1.4635687e-04 +3295 6.598 -8.2756766e-05 -1.4584239e-04 +3296 6.6 -8.2465594e-05 -1.4532971e-04 +3297 6.602 -8.2175446e-05 -1.4481883e-04 +3298 6.604 -8.1886317e-05 -1.4430975e-04 +3299 6.606 -8.1598205e-05 -1.4380245e-04 +3300 6.608 -8.1311106e-05 -1.4329693e-04 +3301 6.61 -8.1025017e-05 -1.4279319e-04 +3302 6.612 -8.0739932e-05 -1.4229121e-04 +3303 6.614 -8.0455851e-05 -1.4179099e-04 +3304 6.616 -8.0172767e-05 -1.4129253e-04 +3305 6.618 -7.9890679e-05 -1.4079582e-04 +3306 6.62 -7.9609583e-05 -1.4030085e-04 +3307 6.622 -7.9329475e-05 -1.3980762e-04 +3308 6.624 -7.9050351e-05 -1.3931612e-04 +3309 6.626 -7.8772209e-05 -1.3882635e-04 +3310 6.628 -7.8495045e-05 -1.3833829e-04 +3311 6.63 -7.8218855e-05 -1.3785195e-04 +3312 6.632 -7.7943636e-05 -1.3736731e-04 +3313 6.634 -7.7669384e-05 -1.3688438e-04 +3314 6.636 -7.7396097e-05 -1.3640314e-04 +3315 6.638 -7.7123771e-05 -1.3592359e-04 +3316 6.64 -7.6852402e-05 -1.3544572e-04 +3317 6.642 -7.6581987e-05 -1.3496953e-04 +3318 6.644 -7.6312522e-05 -1.3449501e-04 +3319 6.646 -7.6044005e-05 -1.3402216e-04 +3320 6.648 -7.5776433e-05 -1.3355096e-04 +3321 6.65 -7.5509801e-05 -1.3308142e-04 +3322 6.652 -7.5244106e-05 -1.3261353e-04 +3323 6.654 -7.4979345e-05 -1.3214728e-04 +3324 6.656 -7.4715516e-05 -1.3168267e-04 +3325 6.658 -7.4452614e-05 -1.3121969e-04 +3326 6.66 -7.4190636e-05 -1.3075833e-04 +3327 6.662 -7.3929579e-05 -1.3029859e-04 +3328 6.664 -7.3669440e-05 -1.2984047e-04 +3329 6.666 -7.3410216e-05 -1.2938396e-04 +3330 6.668 -7.3151903e-05 -1.2892904e-04 +3331 6.67 -7.2894499e-05 -1.2847573e-04 +3332 6.672 -7.2637999e-05 -1.2802400e-04 +3333 6.674 -7.2382402e-05 -1.2757387e-04 +3334 6.676 -7.2127703e-05 -1.2712531e-04 +3335 6.678 -7.1873900e-05 -1.2667832e-04 +3336 6.68 -7.1620989e-05 -1.2623291e-04 +3337 6.682 -7.1368967e-05 -1.2578906e-04 +3338 6.684 -7.1117831e-05 -1.2534677e-04 +3339 6.686 -7.0867579e-05 -1.2490603e-04 +3340 6.688 -7.0618206e-05 -1.2446683e-04 +3341 6.69 -7.0369710e-05 -1.2402918e-04 +3342 6.692 -7.0122088e-05 -1.2359307e-04 +3343 6.694 -6.9875337e-05 -1.2315849e-04 +3344 6.696 -6.9629453e-05 -1.2272543e-04 +3345 6.698 -6.9384434e-05 -1.2229389e-04 +3346 6.7 -6.9140277e-05 -1.2186387e-04 +3347 6.702 -6.8896978e-05 -1.2143536e-04 +3348 6.704 -6.8654534e-05 -1.2100836e-04 +3349 6.706 -6.8412943e-05 -1.2058285e-04 +3350 6.708 -6.8172202e-05 -1.2015883e-04 +3351 6.71 -6.7932307e-05 -1.1973631e-04 +3352 6.712 -6.7693256e-05 -1.1931527e-04 +3353 6.714 -6.7455045e-05 -1.1889571e-04 +3354 6.716 -6.7217672e-05 -1.1847762e-04 +3355 6.718 -6.6981134e-05 -1.1806099e-04 +3356 6.72 -6.6745427e-05 -1.1764584e-04 +3357 6.722 -6.6510549e-05 -1.1723214e-04 +3358 6.724 -6.6276498e-05 -1.1681989e-04 +3359 6.726 -6.6043269e-05 -1.1640909e-04 +3360 6.728 -6.5810860e-05 -1.1599973e-04 +3361 6.73 -6.5579269e-05 -1.1559181e-04 +3362 6.732 -6.5348492e-05 -1.1518532e-04 +3363 6.734 -6.5118527e-05 -1.1478026e-04 +3364 6.736 -6.4889370e-05 -1.1437662e-04 +3365 6.738 -6.4661019e-05 -1.1397440e-04 +3366 6.74 -6.4433472e-05 -1.1357359e-04 +3367 6.742 -6.4206724e-05 -1.1317419e-04 +3368 6.744 -6.3980774e-05 -1.1277620e-04 +3369 6.746 -6.3755618e-05 -1.1237960e-04 +3370 6.748 -6.3531255e-05 -1.1198439e-04 +3371 6.75 -6.3307680e-05 -1.1159057e-04 +3372 6.752 -6.3084891e-05 -1.1119813e-04 +3373 6.754 -6.2862886e-05 -1.1080707e-04 +3374 6.756 -6.2641662e-05 -1.1041739e-04 +3375 6.758 -6.2421216e-05 -1.1002907e-04 +3376 6.76 -6.2201545e-05 -1.0964212e-04 +3377 6.762 -6.1982646e-05 -1.0925653e-04 +3378 6.764 -6.1764518e-05 -1.0887229e-04 +3379 6.766 -6.1547156e-05 -1.0848940e-04 +3380 6.768 -6.1330559e-05 -1.0810785e-04 +3381 6.77 -6.1114724e-05 -1.0772765e-04 +3382 6.772 -6.0899648e-05 -1.0734878e-04 +3383 6.774 -6.0685328e-05 -1.0697124e-04 +3384 6.776 -6.0471762e-05 -1.0659503e-04 +3385 6.778 -6.0258947e-05 -1.0622014e-04 +3386 6.78 -6.0046881e-05 -1.0584656e-04 +3387 6.782 -5.9835560e-05 -1.0547430e-04 +3388 6.784 -5.9624983e-05 -1.0510335e-04 +3389 6.786 -5.9415146e-05 -1.0473370e-04 +3390 6.788 -5.9206047e-05 -1.0436534e-04 +3391 6.79 -5.8997683e-05 -1.0399828e-04 +3392 6.792 -5.8790053e-05 -1.0363251e-04 +3393 6.794 -5.8583153e-05 -1.0326803e-04 +3394 6.796 -5.8376980e-05 -1.0290482e-04 +3395 6.798 -5.8171532e-05 -1.0254289e-04 +3396 6.8 -5.7966807e-05 -1.0218224e-04 +3397 6.802 -5.7762803e-05 -1.0182285e-04 +3398 6.804 -5.7559515e-05 -1.0146472e-04 +3399 6.806 -5.7356943e-05 -1.0110785e-04 +3400 6.808 -5.7155083e-05 -1.0075223e-04 +3401 6.81 -5.6953933e-05 -1.0039786e-04 +3402 6.812 -5.6753491e-05 -1.0004474e-04 +3403 6.814 -5.6553753e-05 -9.9692859e-05 +3404 6.816 -5.6354718e-05 -9.9342214e-05 +3405 6.818 -5.6156384e-05 -9.8992799e-05 +3406 6.82 -5.5958746e-05 -9.8644613e-05 +3407 6.822 -5.5761804e-05 -9.8297650e-05 +3408 6.824 -5.5565555e-05 -9.7951905e-05 +3409 6.826 -5.5369996e-05 -9.7607376e-05 +3410 6.828 -5.5175125e-05 -9.7264056e-05 +3411 6.83 -5.4980939e-05 -9.6921943e-05 +3412 6.832 -5.4787436e-05 -9.6581032e-05 +3413 6.834 -5.4594614e-05 -9.6241318e-05 +3414 6.836 -5.4402470e-05 -9.5902798e-05 +3415 6.838 -5.4211002e-05 -9.5565467e-05 +3416 6.84 -5.4020207e-05 -9.5229322e-05 +3417 6.842 -5.3830084e-05 -9.4894357e-05 +3418 6.844 -5.3640629e-05 -9.4560569e-05 +3419 6.846 -5.3451841e-05 -9.4227954e-05 +3420 6.848 -5.3263717e-05 -9.3896508e-05 +3421 6.85 -5.3076254e-05 -9.3566226e-05 +3422 6.852 -5.2889451e-05 -9.3237105e-05 +3423 6.854 -5.2703305e-05 -9.2909140e-05 +3424 6.856 -5.2517814e-05 -9.2582327e-05 +3425 6.858 -5.2332975e-05 -9.2256662e-05 +3426 6.86 -5.2148786e-05 -9.1932142e-05 +3427 6.862 -5.1965246e-05 -9.1608762e-05 +3428 6.864 -5.1782350e-05 -9.1286519e-05 +3429 6.866 -5.1600099e-05 -9.0965407e-05 +3430 6.868 -5.1418488e-05 -9.0645424e-05 +3431 6.87 -5.1237516e-05 -9.0326565e-05 +3432 6.872 -5.1057181e-05 -9.0008827e-05 +3433 6.874 -5.0877480e-05 -8.9692205e-05 +3434 6.876 -5.0698411e-05 -8.9376696e-05 +3435 6.878 -5.0519973e-05 -8.9062295e-05 +3436 6.88 -5.0342162e-05 -8.8748999e-05 +3437 6.882 -5.0164976e-05 -8.8436804e-05 +3438 6.884 -4.9988414e-05 -8.8125706e-05 +3439 6.886 -4.9812472e-05 -8.7815702e-05 +3440 6.888 -4.9637150e-05 -8.7506786e-05 +3441 6.89 -4.9462445e-05 -8.7198956e-05 +3442 6.892 -4.9288354e-05 -8.6892208e-05 +3443 6.894 -4.9114875e-05 -8.6586538e-05 +3444 6.896 -4.8942007e-05 -8.6281942e-05 +3445 6.898 -4.8769746e-05 -8.5978416e-05 +3446 6.9 -4.8598092e-05 -8.5675957e-05 +3447 6.902 -4.8427042e-05 -8.5374561e-05 +3448 6.904 -4.8256593e-05 -8.5074224e-05 +3449 6.906 -4.8086744e-05 -8.4774943e-05 +3450 6.908 -4.7917493e-05 -8.4476713e-05 +3451 6.91 -4.7748837e-05 -8.4179531e-05 +3452 6.912 -4.7580774e-05 -8.3883394e-05 +3453 6.914 -4.7413303e-05 -8.3588297e-05 +3454 6.916 -4.7246420e-05 -8.3294238e-05 +3455 6.918 -4.7080125e-05 -8.3001212e-05 +3456 6.92 -4.6914415e-05 -8.2709215e-05 +3457 6.922 -4.6749287e-05 -8.2418245e-05 +3458 6.924 -4.6584741e-05 -8.2128298e-05 +3459 6.926 -4.6420773e-05 -8.1839369e-05 +3460 6.928 -4.6257383e-05 -8.1551456e-05 +3461 6.93 -4.6094567e-05 -8.1264555e-05 +3462 6.932 -4.5932324e-05 -8.0978663e-05 +3463 6.934 -4.5770652e-05 -8.0693775e-05 +3464 6.936 -4.5609548e-05 -8.0409888e-05 +3465 6.938 -4.5449011e-05 -8.0126999e-05 +3466 6.94 -4.5289039e-05 -7.9845104e-05 +3467 6.942 -4.5129630e-05 -7.9564200e-05 +3468 6.944 -4.4970782e-05 -7.9284284e-05 +3469 6.946 -4.4812493e-05 -7.9005351e-05 +3470 6.948 -4.4654760e-05 -7.8727399e-05 +3471 6.95 -4.4497582e-05 -7.8450423e-05 +3472 6.952 -4.4340958e-05 -7.8174421e-05 +3473 6.954 -4.4184884e-05 -7.7899389e-05 +3474 6.956 -4.4029359e-05 -7.7625324e-05 +3475 6.958 -4.3874382e-05 -7.7352222e-05 +3476 6.96 -4.3719950e-05 -7.7080080e-05 +3477 6.962 -4.3566061e-05 -7.6808895e-05 +3478 6.964 -4.3412714e-05 -7.6538663e-05 +3479 6.966 -4.3259906e-05 -7.6269380e-05 +3480 6.968 -4.3107636e-05 -7.6001045e-05 +3481 6.97 -4.2955901e-05 -7.5733652e-05 +3482 6.972 -4.2804700e-05 -7.5467199e-05 +3483 6.974 -4.2654032e-05 -7.5201683e-05 +3484 6.976 -4.2503893e-05 -7.4937100e-05 +3485 6.978 -4.2354283e-05 -7.4673448e-05 +3486 6.98 -4.2205199e-05 -7.4410722e-05 +3487 6.982 -4.2056639e-05 -7.4148919e-05 +3488 6.984 -4.1908602e-05 -7.3888037e-05 +3489 6.986 -4.1761086e-05 -7.3628072e-05 +3490 6.988 -4.1614089e-05 -7.3369021e-05 +3491 6.99 -4.1467610e-05 -7.3110880e-05 +3492 6.992 -4.1321645e-05 -7.2853647e-05 +3493 6.994 -4.1176194e-05 -7.2597318e-05 +3494 6.996 -4.1031255e-05 -7.2341890e-05 +3495 6.998 -4.0886826e-05 -7.2087360e-05 +3496 7.0 -4.0742905e-05 -7.1833725e-05 +3497 7.002 -4.0599491e-05 -7.1580981e-05 +3498 7.004 -4.0456581e-05 -7.1329126e-05 +3499 7.006 -4.0314174e-05 -7.1078156e-05 +3500 7.008 -4.0172268e-05 -7.0828069e-05 +3501 7.01 -4.0030861e-05 -7.0578860e-05 +3502 7.012 -3.9889952e-05 -7.0330528e-05 +3503 7.014 -3.9749538e-05 -7.0083069e-05 +3504 7.016 -3.9609619e-05 -6.9836480e-05 +3505 7.018 -3.9470192e-05 -6.9590757e-05 +3506 7.02 -3.9331255e-05 -6.9345899e-05 +3507 7.022 -3.9192807e-05 -6.9101901e-05 +3508 7.024 -3.9054847e-05 -6.8858761e-05 +3509 7.026 -3.8917372e-05 -6.8616476e-05 +3510 7.028 -3.8780380e-05 -6.8375043e-05 +3511 7.03 -3.8643871e-05 -6.8134458e-05 +3512 7.032 -3.8507842e-05 -6.7894720e-05 +3513 7.034 -3.8372292e-05 -6.7655824e-05 +3514 7.036 -3.8237218e-05 -6.7417768e-05 +3515 7.038 -3.8102620e-05 -6.7180549e-05 +3516 7.04 -3.7968495e-05 -6.6944164e-05 +3517 7.042 -3.7834843e-05 -6.6708610e-05 +3518 7.044 -3.7701660e-05 -6.6473884e-05 +3519 7.046 -3.7568947e-05 -6.6239984e-05 +3520 7.048 -3.7436700e-05 -6.6006906e-05 +3521 7.05 -3.7304919e-05 -6.5774647e-05 +3522 7.052 -3.7173601e-05 -6.5543205e-05 +3523 7.054 -3.7042745e-05 -6.5312576e-05 +3524 7.056 -3.6912350e-05 -6.5082759e-05 +3525 7.058 -3.6782414e-05 -6.4853750e-05 +3526 7.06 -3.6652934e-05 -6.4625545e-05 +3527 7.062 -3.6523911e-05 -6.4398143e-05 +3528 7.064 -3.6395341e-05 -6.4171541e-05 +3529 7.066 -3.6267224e-05 -6.3945735e-05 +3530 7.068 -3.6139558e-05 -6.3720724e-05 +3531 7.07 -3.6012341e-05 -6.3496503e-05 +3532 7.072 -3.5885571e-05 -6.3273071e-05 +3533 7.074 -3.5759248e-05 -6.3050425e-05 +3534 7.076 -3.5633369e-05 -6.2828561e-05 +3535 7.078 -3.5507933e-05 -6.2607477e-05 +3536 7.08 -3.5382939e-05 -6.2387171e-05 +3537 7.082 -3.5258384e-05 -6.2167640e-05 +3538 7.084 -3.5134268e-05 -6.1948880e-05 +3539 7.086 -3.5010588e-05 -6.1730890e-05 +3540 7.088 -3.4887344e-05 -6.1513666e-05 +3541 7.09 -3.4764533e-05 -6.1297206e-05 +3542 7.092 -3.4642154e-05 -6.1081507e-05 +3543 7.094 -3.4520206e-05 -6.0866566e-05 +3544 7.096 -3.4398687e-05 -6.0652381e-05 +3545 7.098 -3.4277596e-05 -6.0438950e-05 +3546 7.1 -3.4156931e-05 -6.0226269e-05 +3547 7.102 -3.4036691e-05 -6.0014336e-05 +3548 7.104 -3.3916873e-05 -5.9803148e-05 +3549 7.106 -3.3797478e-05 -5.9592702e-05 +3550 7.108 -3.3678502e-05 -5.9382997e-05 +3551 7.11 -3.3559945e-05 -5.9174029e-05 +3552 7.112 -3.3441805e-05 -5.8965796e-05 +3553 7.114 -3.3324081e-05 -5.8758295e-05 +3554 7.116 -3.3206772e-05 -5.8551524e-05 +3555 7.118 -3.3089875e-05 -5.8345480e-05 +3556 7.12 -3.2973389e-05 -5.8140160e-05 +3557 7.122 -3.2857314e-05 -5.7935563e-05 +3558 7.124 -3.2741647e-05 -5.7731685e-05 +3559 7.126 -3.2626387e-05 -5.7528524e-05 +3560 7.128 -3.2511532e-05 -5.7326077e-05 +3561 7.13 -3.2397082e-05 -5.7124342e-05 +3562 7.132 -3.2283034e-05 -5.6923317e-05 +3563 7.134 -3.2169388e-05 -5.6722999e-05 +3564 7.136 -3.2056142e-05 -5.6523385e-05 +3565 7.138 -3.1943294e-05 -5.6324473e-05 +3566 7.14 -3.1830843e-05 -5.6126261e-05 +3567 7.142 -3.1718788e-05 -5.5928745e-05 +3568 7.144 -3.1607128e-05 -5.5731925e-05 +3569 7.146 -3.1495860e-05 -5.5535796e-05 +3570 7.148 -3.1384984e-05 -5.5340357e-05 +3571 7.15 -3.1274498e-05 -5.5145606e-05 +3572 7.152 -3.1164401e-05 -5.4951539e-05 +3573 7.154 -3.1054692e-05 -5.4758155e-05 +3574 7.156 -3.0945368e-05 -5.4565451e-05 +3575 7.158 -3.0836430e-05 -5.4373425e-05 +3576 7.16 -3.0727874e-05 -5.4182074e-05 +3577 7.162 -3.0619701e-05 -5.3991396e-05 +3578 7.164 -3.0511908e-05 -5.3801389e-05 +3579 7.166 -3.0404495e-05 -5.3612049e-05 +3580 7.168 -3.0297459e-05 -5.3423376e-05 +3581 7.17 -3.0190801e-05 -5.3235366e-05 +3582 7.172 -3.0084518e-05 -5.3048018e-05 +3583 7.174 -2.9978608e-05 -5.2861328e-05 +3584 7.176 -2.9873072e-05 -5.2675295e-05 +3585 7.178 -2.9767907e-05 -5.2489917e-05 +3586 7.18 -2.9663112e-05 -5.2305190e-05 +3587 7.182 -2.9558686e-05 -5.2121113e-05 +3588 7.184 -2.9454627e-05 -5.1937683e-05 +3589 7.186 -2.9350934e-05 -5.1754899e-05 +3590 7.188 -2.9247607e-05 -5.1572757e-05 +3591 7.19 -2.9144643e-05 -5.1391256e-05 +3592 7.192 -2.9042041e-05 -5.1210394e-05 +3593 7.194 -2.8939801e-05 -5.1030167e-05 +3594 7.196 -2.8837920e-05 -5.0850574e-05 +3595 7.198 -2.8736398e-05 -5.0671613e-05 +3596 7.2 -2.8635233e-05 -5.0493282e-05 +3597 7.202 -2.8534425e-05 -5.0315577e-05 +3598 7.204 -2.8433971e-05 -5.0138498e-05 +3599 7.206 -2.8333870e-05 -4.9962042e-05 +3600 7.208 -2.8234122e-05 -4.9786206e-05 +3601 7.21 -2.8134725e-05 -4.9610989e-05 +3602 7.212 -2.8035678e-05 -4.9436387e-05 +3603 7.214 -2.7936979e-05 -4.9262401e-05 +3604 7.216 -2.7838628e-05 -4.9089026e-05 +3605 7.218 -2.7740623e-05 -4.8916260e-05 +3606 7.22 -2.7642962e-05 -4.8744103e-05 +3607 7.222 -2.7545646e-05 -4.8572551e-05 +3608 7.224 -2.7448672e-05 -4.8401602e-05 +3609 7.226 -2.7352039e-05 -4.8231255e-05 +3610 7.228 -2.7255746e-05 -4.8061507e-05 +3611 7.23 -2.7159792e-05 -4.7892356e-05 +3612 7.232 -2.7064176e-05 -4.7723800e-05 +3613 7.234 -2.6968897e-05 -4.7555837e-05 +3614 7.236 -2.6873953e-05 -4.7388464e-05 +3615 7.238 -2.6779343e-05 -4.7221681e-05 +3616 7.24 -2.6685066e-05 -4.7055484e-05 +3617 7.242 -2.6591120e-05 -4.6889871e-05 +3618 7.244 -2.6497506e-05 -4.6724842e-05 +3619 7.246 -2.6404221e-05 -4.6560392e-05 +3620 7.248 -2.6311264e-05 -4.6396521e-05 +3621 7.25 -2.6218634e-05 -4.6233227e-05 +3622 7.252 -2.6126330e-05 -4.6070507e-05 +3623 7.254 -2.6034352e-05 -4.5908359e-05 +3624 7.256 -2.5942697e-05 -4.5746782e-05 +3625 7.258 -2.5851364e-05 -4.5585773e-05 +3626 7.26 -2.5760353e-05 -4.5425331e-05 +3627 7.262 -2.5669662e-05 -4.5265452e-05 +3628 7.264 -2.5579291e-05 -4.5106137e-05 +3629 7.266 -2.5489238e-05 -4.4947381e-05 +3630 7.268 -2.5399501e-05 -4.4789184e-05 +3631 7.27 -2.5310080e-05 -4.4631544e-05 +3632 7.272 -2.5220975e-05 -4.4474458e-05 +3633 7.274 -2.5132182e-05 -4.4317925e-05 +3634 7.276 -2.5043702e-05 -4.4161942e-05 +3635 7.278 -2.4955534e-05 -4.4006508e-05 +3636 7.28 -2.4867676e-05 -4.3851621e-05 +3637 7.282 -2.4780127e-05 -4.3697278e-05 +3638 7.284 -2.4692887e-05 -4.3543479e-05 +3639 7.286 -2.4605953e-05 -4.3390221e-05 +3640 7.288 -2.4519325e-05 -4.3237502e-05 +3641 7.29 -2.4433003e-05 -4.3085320e-05 +3642 7.292 -2.4346984e-05 -4.2933673e-05 +3643 7.294 -2.4261268e-05 -4.2782560e-05 +3644 7.296 -2.4175853e-05 -4.2631978e-05 +3645 7.298 -2.4090739e-05 -4.2481926e-05 +3646 7.3 -2.4005925e-05 -4.2332402e-05 +3647 7.302 -2.3921409e-05 -4.2183404e-05 +3648 7.304 -2.3837191e-05 -4.2034931e-05 +3649 7.306 -2.3753269e-05 -4.1886979e-05 +3650 7.308 -2.3669643e-05 -4.1739548e-05 +3651 7.31 -2.3586311e-05 -4.1592636e-05 +3652 7.312 -2.3503272e-05 -4.1446240e-05 +3653 7.314 -2.3420525e-05 -4.1300360e-05 +3654 7.316 -2.3338070e-05 -4.1154992e-05 +3655 7.318 -2.3255905e-05 -4.1010137e-05 +3656 7.32 -2.3174029e-05 -4.0865790e-05 +3657 7.322 -2.3092442e-05 -4.0721952e-05 +3658 7.324 -2.3011141e-05 -4.0578619e-05 +3659 7.326 -2.2930127e-05 -4.0435791e-05 +3660 7.328 -2.2849398e-05 -4.0293466e-05 +3661 7.33 -2.2768953e-05 -4.0151641e-05 +3662 7.332 -2.2688791e-05 -4.0010314e-05 +3663 7.334 -2.2608911e-05 -3.9869486e-05 +3664 7.336 -2.2529312e-05 -3.9729152e-05 +3665 7.338 -2.2449994e-05 -3.9589313e-05 +3666 7.34 -2.2370955e-05 -3.9449965e-05 +3667 7.342 -2.2292194e-05 -3.9311107e-05 +3668 7.344 -2.2213710e-05 -3.9172738e-05 +3669 7.346 -2.2135503e-05 -3.9034856e-05 +3670 7.348 -2.2057570e-05 -3.8897459e-05 +3671 7.35 -2.1979912e-05 -3.8760546e-05 +3672 7.352 -2.1902528e-05 -3.8624114e-05 +3673 7.354 -2.1825416e-05 -3.8488162e-05 +3674 7.356 -2.1748575e-05 -3.8352688e-05 +3675 7.358 -2.1672005e-05 -3.8217691e-05 +3676 7.36 -2.1595704e-05 -3.8083169e-05 +3677 7.362 -2.1519672e-05 -3.7949120e-05 +3678 7.364 -2.1443907e-05 -3.7815543e-05 +3679 7.366 -2.1368409e-05 -3.7682436e-05 +3680 7.368 -2.1293177e-05 -3.7549797e-05 +3681 7.37 -2.1218210e-05 -3.7417625e-05 +3682 7.372 -2.1143506e-05 -3.7285917e-05 +3683 7.374 -2.1069066e-05 -3.7154674e-05 +3684 7.376 -2.0994887e-05 -3.7023892e-05 +3685 7.378 -2.0920970e-05 -3.6893570e-05 +3686 7.38 -2.0847313e-05 -3.6763706e-05 +3687 7.382 -2.0773915e-05 -3.6634300e-05 +3688 7.384 -2.0700775e-05 -3.6505349e-05 +3689 7.386 -2.0627893e-05 -3.6376851e-05 +3690 7.388 -2.0555267e-05 -3.6248806e-05 +3691 7.39 -2.0482897e-05 -3.6121211e-05 +3692 7.392 -2.0410782e-05 -3.5994065e-05 +3693 7.394 -2.0338921e-05 -3.5867366e-05 +3694 7.396 -2.0267312e-05 -3.5741114e-05 +3695 7.398 -2.0195956e-05 -3.5615305e-05 +3696 7.4 -2.0124851e-05 -3.5489939e-05 +3697 7.402 -2.0053996e-05 -3.5365014e-05 +3698 7.404 -1.9983391e-05 -3.5240529e-05 +3699 7.406 -1.9913034e-05 -3.5116482e-05 +3700 7.408 -1.9842924e-05 -3.4992871e-05 +3701 7.41 -1.9773062e-05 -3.4869695e-05 +3702 7.412 -1.9703445e-05 -3.4746953e-05 +3703 7.414 -1.9634074e-05 -3.4624642e-05 +3704 7.416 -1.9564946e-05 -3.4502762e-05 +3705 7.418 -1.9496062e-05 -3.4381310e-05 +3706 7.42 -1.9427421e-05 -3.4260286e-05 +3707 7.422 -1.9359021e-05 -3.4139688e-05 +3708 7.424 -1.9290862e-05 -3.4019514e-05 +3709 7.426 -1.9222943e-05 -3.3899763e-05 +3710 7.428 -1.9155263e-05 -3.3780433e-05 +3711 7.43 -1.9087821e-05 -3.3661524e-05 +3712 7.432 -1.9020616e-05 -3.3543032e-05 +3713 7.434 -1.8953648e-05 -3.3424958e-05 +3714 7.436 -1.8886916e-05 -3.3307299e-05 +3715 7.438 -1.8820419e-05 -3.3190054e-05 +3716 7.44 -1.8754156e-05 -3.3073221e-05 +3717 7.442 -1.8688126e-05 -3.2956800e-05 +3718 7.444 -1.8622328e-05 -3.2840788e-05 +3719 7.446 -1.8556762e-05 -3.2725185e-05 +3720 7.448 -1.8491427e-05 -3.2609988e-05 +3721 7.45 -1.8426322e-05 -3.2495196e-05 +3722 7.452 -1.8361446e-05 -3.2380809e-05 +3723 7.454 -1.8296799e-05 -3.2266824e-05 +3724 7.456 -1.8232379e-05 -3.2153240e-05 +3725 7.458 -1.8168185e-05 -3.2040056e-05 +3726 7.46 -1.8104218e-05 -3.1927270e-05 +3727 7.462 -1.8040476e-05 -3.1814881e-05 +3728 7.464 -1.7976958e-05 -3.1702887e-05 +3729 7.466 -1.7913664e-05 -3.1591288e-05 +3730 7.468 -1.7850593e-05 -3.1480081e-05 +3731 7.47 -1.7787744e-05 -3.1369266e-05 +3732 7.472 -1.7725116e-05 -3.1258840e-05 +3733 7.474 -1.7662708e-05 -3.1148803e-05 +3734 7.476 -1.7600520e-05 -3.1039153e-05 +3735 7.478 -1.7538551e-05 -3.0929889e-05 +3736 7.48 -1.7476800e-05 -3.0821010e-05 +3737 7.482 -1.7415267e-05 -3.0712514e-05 +3738 7.484 -1.7353950e-05 -3.0604399e-05 +3739 7.486 -1.7292849e-05 -3.0496665e-05 +3740 7.488 -1.7231963e-05 -3.0389310e-05 +3741 7.49 -1.7171291e-05 -3.0282333e-05 +3742 7.492 -1.7110833e-05 -3.0175732e-05 +3743 7.494 -1.7050588e-05 -3.0069506e-05 +3744 7.496 -1.6990555e-05 -2.9963655e-05 +3745 7.498 -1.6930733e-05 -2.9858175e-05 +3746 7.5 -1.6871122e-05 -2.9753067e-05 +3747 7.502 -1.6811721e-05 -2.9648329e-05 +3748 7.504 -1.6752529e-05 -2.9543959e-05 +3749 7.506 -1.6693545e-05 -2.9439957e-05 +3750 7.508 -1.6634769e-05 -2.9336320e-05 +3751 7.51 -1.6576199e-05 -2.9233049e-05 +3752 7.512 -1.6517836e-05 -2.9130140e-05 +3753 7.514 -1.6459678e-05 -2.9027594e-05 +3754 7.516 -1.6401726e-05 -2.8925409e-05 +3755 7.518 -1.6343977e-05 -2.8823583e-05 +3756 7.52 -1.6286431e-05 -2.8722116e-05 +3757 7.522 -1.6229088e-05 -2.8621005e-05 +3758 7.524 -1.6171947e-05 -2.8520251e-05 +3759 7.526 -1.6115007e-05 -2.8419851e-05 +3760 7.528 -1.6058267e-05 -2.8319804e-05 +3761 7.53 -1.6001727e-05 -2.8220109e-05 +3762 7.532 -1.5945386e-05 -2.8120766e-05 +3763 7.534 -1.5889244e-05 -2.8021772e-05 +3764 7.536 -1.5833299e-05 -2.7923126e-05 +3765 7.538 -1.5777551e-05 -2.7824827e-05 +3766 7.54 -1.5722000e-05 -2.7726875e-05 +3767 7.542 -1.5666643e-05 -2.7629267e-05 +3768 7.544 -1.5611482e-05 -2.7532002e-05 +3769 7.546 -1.5556515e-05 -2.7435080e-05 +3770 7.548 -1.5501742e-05 -2.7338499e-05 +3771 7.55 -1.5447161e-05 -2.7242258e-05 +3772 7.552 -1.5392772e-05 -2.7146355e-05 +3773 7.554 -1.5338575e-05 -2.7050790e-05 +3774 7.556 -1.5284569e-05 -2.6955561e-05 +3775 7.558 -1.5230753e-05 -2.6860668e-05 +3776 7.56 -1.5177126e-05 -2.6766108e-05 +3777 7.562 -1.5123688e-05 -2.6671881e-05 +3778 7.564 -1.5070438e-05 -2.6577986e-05 +3779 7.566 -1.5017376e-05 -2.6484421e-05 +3780 7.568 -1.4964500e-05 -2.6391186e-05 +3781 7.57 -1.4911811e-05 -2.6298278e-05 +3782 7.572 -1.4859307e-05 -2.6205698e-05 +3783 7.574 -1.4806988e-05 -2.6113443e-05 +3784 7.576 -1.4754853e-05 -2.6021513e-05 +3785 7.578 -1.4702902e-05 -2.5929907e-05 +3786 7.58 -1.4651133e-05 -2.5838623e-05 +3787 7.582 -1.4599547e-05 -2.5747660e-05 +3788 7.584 -1.4548142e-05 -2.5657017e-05 +3789 7.586 -1.4496919e-05 -2.5566694e-05 +3790 7.588 -1.4445875e-05 -2.5476688e-05 +3791 7.59 -1.4395012e-05 -2.5386999e-05 +3792 7.592 -1.4344327e-05 -2.5297626e-05 +3793 7.594 -1.4293821e-05 -2.5208567e-05 +3794 7.596 -1.4243493e-05 -2.5119821e-05 +3795 7.598 -1.4193342e-05 -2.5031388e-05 +3796 7.6 -1.4143367e-05 -2.4943267e-05 +3797 7.602 -1.4093568e-05 -2.4855455e-05 +3798 7.604 -1.4043945e-05 -2.4767952e-05 +3799 7.606 -1.3994496e-05 -2.4680757e-05 +3800 7.608 -1.3945222e-05 -2.4593870e-05 +3801 7.61 -1.3896121e-05 -2.4507288e-05 +3802 7.612 -1.3847192e-05 -2.4421010e-05 +3803 7.614 -1.3798436e-05 -2.4335037e-05 +3804 7.616 -1.3749852e-05 -2.4249366e-05 +3805 7.618 -1.3701439e-05 -2.4163996e-05 +3806 7.62 -1.3653196e-05 -2.4078927e-05 +3807 7.622 -1.3605123e-05 -2.3994157e-05 +3808 7.624 -1.3557219e-05 -2.3909686e-05 +3809 7.626 -1.3509484e-05 -2.3825512e-05 +3810 7.628 -1.3461917e-05 -2.3741634e-05 +3811 7.63 -1.3414517e-05 -2.3658051e-05 +3812 7.632 -1.3367284e-05 -2.3574763e-05 +3813 7.634 -1.3320218e-05 -2.3491767e-05 +3814 7.636 -1.3273317e-05 -2.3409064e-05 +3815 7.638 -1.3226581e-05 -2.3326652e-05 +3816 7.64 -1.3180010e-05 -2.3244530e-05 +3817 7.642 -1.3133603e-05 -2.3162697e-05 +3818 7.644 -1.3087359e-05 -2.3081152e-05 +3819 7.646 -1.3041278e-05 -2.2999894e-05 +3820 7.648 -1.2995360e-05 -2.2918922e-05 +3821 7.65 -1.2949603e-05 -2.2838235e-05 +3822 7.652 -1.2904006e-05 -2.2757832e-05 +3823 7.654 -1.2858571e-05 -2.2677712e-05 +3824 7.656 -1.2813295e-05 -2.2597873e-05 +3825 7.658 -1.2768179e-05 -2.2518316e-05 +3826 7.66 -1.2723222e-05 -2.2439039e-05 +3827 7.662 -1.2678423e-05 -2.2360041e-05 +3828 7.664 -1.2633782e-05 -2.2281321e-05 +3829 7.666 -1.2589297e-05 -2.2202878e-05 +3830 7.668 -1.2544970e-05 -2.2124711e-05 +3831 7.67 -1.2500798e-05 -2.2046820e-05 +3832 7.672 -1.2456782e-05 -2.1969202e-05 +3833 7.674 -1.2412921e-05 -2.1891858e-05 +3834 7.676 -1.2369215e-05 -2.1814785e-05 +3835 7.678 -1.2325662e-05 -2.1737984e-05 +3836 7.68 -1.2282263e-05 -2.1661454e-05 +3837 7.682 -1.2239016e-05 -2.1585193e-05 +3838 7.684 -1.2195922e-05 -2.1509200e-05 +3839 7.686 -1.2152979e-05 -2.1433474e-05 +3840 7.688 -1.2110188e-05 -2.1358015e-05 +3841 7.69 -1.2067547e-05 -2.1282822e-05 +3842 7.692 -1.2025056e-05 -2.1207894e-05 +3843 7.694 -1.1982715e-05 -2.1133229e-05 +3844 7.696 -1.1940523e-05 -2.1058827e-05 +3845 7.698 -1.1898480e-05 -2.0984687e-05 +3846 7.7 -1.1856584e-05 -2.0910807e-05 +3847 7.702 -1.1814836e-05 -2.0837188e-05 +3848 7.704 -1.1773235e-05 -2.0763828e-05 +3849 7.706 -1.1731781e-05 -2.0690726e-05 +3850 7.708 -1.1690472e-05 -2.0617882e-05 +3851 7.71 -1.1649309e-05 -2.0545293e-05 +3852 7.712 -1.1608291e-05 -2.0472961e-05 +3853 7.714 -1.1567417e-05 -2.0400883e-05 +3854 7.716 -1.1526687e-05 -2.0329058e-05 +3855 7.718 -1.1486101e-05 -2.0257487e-05 +3856 7.72 -1.1445657e-05 -2.0186167e-05 +3857 7.722 -1.1405356e-05 -2.0115098e-05 +3858 7.724 -1.1365197e-05 -2.0044280e-05 +3859 7.726 -1.1325179e-05 -1.9973711e-05 +3860 7.728 -1.1285302e-05 -1.9903390e-05 +3861 7.73 -1.1245565e-05 -1.9833316e-05 +3862 7.732 -1.1205968e-05 -1.9763490e-05 +3863 7.734 -1.1166511e-05 -1.9693909e-05 +3864 7.736 -1.1127192e-05 -1.9624573e-05 +3865 7.738 -1.1088012e-05 -1.9555481e-05 +3866 7.74 -1.1048970e-05 -1.9486632e-05 +3867 7.742 -1.1010066e-05 -1.9418026e-05 +3868 7.744 -1.0971298e-05 -1.9349661e-05 +3869 7.746 -1.0932667e-05 -1.9281537e-05 +3870 7.748 -1.0894172e-05 -1.9213652e-05 +3871 7.75 -1.0855812e-05 -1.9146007e-05 +3872 7.752 -1.0817587e-05 -1.9078599e-05 +3873 7.754 -1.0779497e-05 -1.9011429e-05 +3874 7.756 -1.0741542e-05 -1.8944495e-05 +3875 7.758 -1.0703719e-05 -1.8877797e-05 +3876 7.76 -1.0666030e-05 -1.8811334e-05 +3877 7.762 -1.0628474e-05 -1.8745104e-05 +3878 7.764 -1.0591050e-05 -1.8679108e-05 +3879 7.766 -1.0553757e-05 -1.8613344e-05 +3880 7.768 -1.0516596e-05 -1.8547812e-05 +3881 7.77 -1.0479566e-05 -1.8482510e-05 +3882 7.772 -1.0442666e-05 -1.8417438e-05 +3883 7.774 -1.0405896e-05 -1.8352595e-05 +3884 7.776 -1.0369255e-05 -1.8287980e-05 +3885 7.778 -1.0332744e-05 -1.8223593e-05 +3886 7.78 -1.0296361e-05 -1.8159432e-05 +3887 7.782 -1.0260106e-05 -1.8095497e-05 +3888 7.784 -1.0223979e-05 -1.8031788e-05 +3889 7.786 -1.0187979e-05 -1.7968302e-05 +3890 7.788 -1.0152105e-05 -1.7905040e-05 +3891 7.79 -1.0116358e-05 -1.7842001e-05 +3892 7.792 -1.0080737e-05 -1.7779184e-05 +3893 7.794 -1.0045242e-05 -1.7716587e-05 +3894 7.796 -1.0009871e-05 -1.7654211e-05 +3895 7.798 -9.9746245e-06 -1.7592055e-05 +3896 7.8 -9.9395024e-06 -1.7530117e-05 +3897 7.802 -9.9045039e-06 -1.7468398e-05 +3898 7.804 -9.8696286e-06 -1.7406895e-05 +3899 7.806 -9.8348762e-06 -1.7345610e-05 +3900 7.808 -9.8002461e-06 -1.7284540e-05 +3901 7.81 -9.7657379e-06 -1.7223684e-05 +3902 7.812 -9.7313512e-06 -1.7163043e-05 +3903 7.814 -9.6970856e-06 -1.7102616e-05 +3904 7.816 -9.6629406e-06 -1.7042401e-05 +3905 7.818 -9.6289158e-06 -1.6982398e-05 +3906 7.82 -9.5950108e-06 -1.6922607e-05 +3907 7.822 -9.5612252e-06 -1.6863026e-05 +3908 7.824 -9.5275586e-06 -1.6803654e-05 +3909 7.826 -9.4940105e-06 -1.6744492e-05 +3910 7.828 -9.4605805e-06 -1.6685538e-05 +3911 7.83 -9.4272682e-06 -1.6626791e-05 +3912 7.832 -9.3940732e-06 -1.6568251e-05 +3913 7.834 -9.3609951e-06 -1.6509918e-05 +3914 7.836 -9.3280334e-06 -1.6451789e-05 +3915 7.838 -9.2951878e-06 -1.6393865e-05 +3916 7.84 -9.2624578e-06 -1.6336146e-05 +3917 7.842 -9.2298430e-06 -1.6278629e-05 +3918 7.844 -9.1973431e-06 -1.6221315e-05 +3919 7.846 -9.1649577e-06 -1.6164202e-05 +3920 7.848 -9.1326862e-06 -1.6107291e-05 +3921 7.85 -9.1005284e-06 -1.6050580e-05 +3922 7.852 -9.0684837e-06 -1.5994068e-05 +3923 7.854 -9.0365520e-06 -1.5937756e-05 +3924 7.856 -9.0047326e-06 -1.5881641e-05 +3925 7.858 -8.9730253e-06 -1.5825724e-05 +3926 7.86 -8.9414296e-06 -1.5770005e-05 +3927 7.862 -8.9099451e-06 -1.5714481e-05 +3928 7.864 -8.8785715e-06 -1.5659152e-05 +3929 7.866 -8.8473084e-06 -1.5604019e-05 +3930 7.868 -8.8161553e-06 -1.5549079e-05 +3931 7.87 -8.7851119e-06 -1.5494333e-05 +3932 7.872 -8.7541778e-06 -1.5439780e-05 +3933 7.874 -8.7233527e-06 -1.5385418e-05 +3934 7.876 -8.6926360e-06 -1.5331248e-05 +3935 7.878 -8.6620276e-06 -1.5277269e-05 +3936 7.88 -8.6315268e-06 -1.5223480e-05 +3937 7.882 -8.6011335e-06 -1.5169880e-05 +3938 7.884 -8.5708472e-06 -1.5116469e-05 +3939 7.886 -8.5406675e-06 -1.5063245e-05 +3940 7.888 -8.5105941e-06 -1.5010210e-05 +3941 7.89 -8.4806265e-06 -1.4957360e-05 +3942 7.892 -8.4507645e-06 -1.4904697e-05 +3943 7.894 -8.4210076e-06 -1.4852220e-05 +3944 7.896 -8.3913555e-06 -1.4799927e-05 +3945 7.898 -8.3618078e-06 -1.4747818e-05 +3946 7.9 -8.3323641e-06 -1.4695892e-05 +3947 7.902 -8.3030241e-06 -1.4644149e-05 +3948 7.904 -8.2737874e-06 -1.4592589e-05 +3949 7.906 -8.2446536e-06 -1.4541210e-05 +3950 7.908 -8.2156224e-06 -1.4490012e-05 +3951 7.91 -8.1866935e-06 -1.4438994e-05 +3952 7.912 -8.1578664e-06 -1.4388155e-05 +3953 7.914 -8.1291407e-06 -1.4337496e-05 +3954 7.916 -8.1005162e-06 -1.4287015e-05 +3955 7.918 -8.0719926e-06 -1.4236712e-05 +3956 7.92 -8.0435693e-06 -1.4186585e-05 +3957 7.922 -8.0152461e-06 -1.4136636e-05 +3958 7.924 -7.9870226e-06 -1.4086862e-05 +3959 7.926 -7.9588985e-06 -1.4037263e-05 +3960 7.928 -7.9308735e-06 -1.3987839e-05 +3961 7.93 -7.9029471e-06 -1.3938589e-05 +3962 7.932 -7.8751190e-06 -1.3889512e-05 +3963 7.934 -7.8473889e-06 -1.3840608e-05 +3964 7.936 -7.8197564e-06 -1.3791876e-05 +3965 7.938 -7.7922213e-06 -1.3743316e-05 +3966 7.94 -7.7647831e-06 -1.3694927e-05 +3967 7.942 -7.7374415e-06 -1.3646708e-05 +3968 7.944 -7.7101961e-06 -1.3598658e-05 +3969 7.946 -7.6830467e-06 -1.3550778e-05 +3970 7.948 -7.6559929e-06 -1.3503067e-05 +3971 7.95 -7.6290343e-06 -1.3455523e-05 +3972 7.952 -7.6021707e-06 -1.3408147e-05 +3973 7.954 -7.5754016e-06 -1.3360937e-05 +3974 7.956 -7.5487268e-06 -1.3313894e-05 +3975 7.958 -7.5221459e-06 -1.3267017e-05 +3976 7.96 -7.4956586e-06 -1.3220304e-05 +3977 7.962 -7.4692646e-06 -1.3173756e-05 +3978 7.964 -7.4429635e-06 -1.3127372e-05 +3979 7.966 -7.4167550e-06 -1.3081151e-05 +3980 7.968 -7.3906388e-06 -1.3035092e-05 +3981 7.97 -7.3646145e-06 -1.2989196e-05 +3982 7.972 -7.3386819e-06 -1.2943462e-05 +3983 7.974 -7.3128406e-06 -1.2897888e-05 +3984 7.976 -7.2870903e-06 -1.2852475e-05 +3985 7.978 -7.2614306e-06 -1.2807222e-05 +3986 7.98 -7.2358613e-06 -1.2762128e-05 +3987 7.982 -7.2103820e-06 -1.2717193e-05 +3988 7.984 -7.1849924e-06 -1.2672416e-05 +3989 7.986 -7.1596922e-06 -1.2627797e-05 +3990 7.988 -7.1344811e-06 -1.2583334e-05 +3991 7.99 -7.1093588e-06 -1.2539029e-05 +3992 7.992 -7.0843249e-06 -1.2494879e-05 +3993 7.994 -7.0593791e-06 -1.2450884e-05 +3994 7.996 -7.0345212e-06 -1.2407045e-05 +3995 7.998 -7.0097509e-06 -1.2363360e-05 +3996 8.0 -6.9850677e-06 -1.2319829e-05 +3997 8.002 -6.9604714e-06 -1.2276450e-05 +3998 8.004 -6.9359618e-06 -1.2233225e-05 +3999 8.006 -6.9115384e-06 -1.2190152e-05 +4000 8.008 -6.8872011e-06 -1.2147230e-05 +4001 8.01 -6.8629494e-06 -1.2104460e-05 +4002 8.012 -6.8387831e-06 -1.2061840e-05 +4003 8.014 -6.8147020e-06 -1.2019370e-05 +4004 8.016 -6.7907056e-06 -1.1977050e-05 +4005 8.018 -6.7667937e-06 -1.1934879e-05 +4006 8.02 -6.7429659e-06 -1.1892856e-05 +4007 8.022 -6.7192221e-06 -1.1850981e-05 +4008 8.024 -6.6955619e-06 -1.1809253e-05 +4009 8.026 -6.6719850e-06 -1.1767673e-05 +4010 8.028 -6.6484911e-06 -1.1726238e-05 +4011 8.03 -6.6250800e-06 -1.1684950e-05 +4012 8.032 -6.6017512e-06 -1.1643807e-05 +4013 8.034 -6.5785046e-06 -1.1602809e-05 +4014 8.036 -6.5553399e-06 -1.1561955e-05 +4015 8.038 -6.5322567e-06 -1.1521245e-05 +4016 8.04 -6.5092548e-06 -1.1480679e-05 +4017 8.042 -6.4863339e-06 -1.1440255e-05 +4018 8.044 -6.4634937e-06 -1.1399973e-05 +4019 8.046 -6.4407339e-06 -1.1359833e-05 +4020 8.048 -6.4180543e-06 -1.1319835e-05 +4021 8.05 -6.3954545e-06 -1.1279977e-05 +4022 8.052 -6.3729343e-06 -1.1240260e-05 +4023 8.054 -6.3504934e-06 -1.1200683e-05 +4024 8.056 -6.3281315e-06 -1.1161245e-05 +4025 8.058 -6.3058483e-06 -1.1121945e-05 +4026 8.06 -6.2836436e-06 -1.1082784e-05 +4027 8.062 -6.2615171e-06 -1.1043761e-05 +4028 8.064 -6.2394684e-06 -1.1004876e-05 +4029 8.066 -6.2174975e-06 -1.0966127e-05 +4030 8.068 -6.1956038e-06 -1.0927515e-05 +4031 8.07 -6.1737873e-06 -1.0889038e-05 +4032 8.072 -6.1520476e-06 -1.0850697e-05 +4033 8.074 -6.1303844e-06 -1.0812491e-05 +4034 8.076 -6.1087976e-06 -1.0774420e-05 +4035 8.078 -6.0872867e-06 -1.0736483e-05 +4036 8.08 -6.0658515e-06 -1.0698679e-05 +4037 8.082 -6.0444919e-06 -1.0661008e-05 +4038 8.084 -6.0232074e-06 -1.0623470e-05 +4039 8.086 -6.0019979e-06 -1.0586064e-05 +4040 8.088 -5.9808631e-06 -1.0548790e-05 +4041 8.09 -5.9598027e-06 -1.0511647e-05 +4042 8.092 -5.9388164e-06 -1.0474634e-05 +4043 8.094 -5.9179040e-06 -1.0437752e-05 +4044 8.096 -5.8970653e-06 -1.0401000e-05 +4045 8.098 -5.8762999e-06 -1.0364377e-05 +4046 8.1 -5.8556077e-06 -1.0327884e-05 +4047 8.102 -5.8349883e-06 -1.0291518e-05 +4048 8.104 -5.8144415e-06 -1.0255281e-05 +4049 8.106 -5.7939671e-06 -1.0219171e-05 +4050 8.108 -5.7735648e-06 -1.0183189e-05 +4051 8.11 -5.7532343e-06 -1.0147333e-05 +4052 8.112 -5.7329754e-06 -1.0111603e-05 +4053 8.114 -5.7127878e-06 -1.0075999e-05 +4054 8.116 -5.6926713e-06 -1.0040521e-05 +4055 8.118 -5.6726256e-06 -1.0005167e-05 +4056 8.12 -5.6526505e-06 -9.9699380e-06 +4057 8.122 -5.6327458e-06 -9.9348328e-06 +4058 8.124 -5.6129111e-06 -9.8998513e-06 +4059 8.126 -5.5931463e-06 -9.8649929e-06 +4060 8.128 -5.5734511e-06 -9.8302573e-06 +4061 8.13 -5.5538252e-06 -9.7956439e-06 +4062 8.132 -5.5342684e-06 -9.7611525e-06 +4063 8.134 -5.5147805e-06 -9.7267824e-06 +4064 8.136 -5.4953612e-06 -9.6925334e-06 +4065 8.138 -5.4760103e-06 -9.6584049e-06 +4066 8.14 -5.4567275e-06 -9.6243966e-06 +4067 8.142 -5.4375126e-06 -9.5905080e-06 +4068 8.144 -5.4183654e-06 -9.5567387e-06 +4069 8.146 -5.3992856e-06 -9.5230884e-06 +4070 8.148 -5.3802729e-06 -9.4895565e-06 +4071 8.15 -5.3613273e-06 -9.4561426e-06 +4072 8.152 -5.3424483e-06 -9.4228464e-06 +4073 8.154 -5.3236358e-06 -9.3896674e-06 +4074 8.156 -5.3048896e-06 -9.3566053e-06 +4075 8.158 -5.2862093e-06 -9.3236595e-06 +4076 8.16 -5.2675948e-06 -9.2908297e-06 +4077 8.162 -5.2490459e-06 -9.2581155e-06 +4078 8.164 -5.2305623e-06 -9.2255165e-06 +4079 8.166 -5.2121438e-06 -9.1930323e-06 +4080 8.168 -5.1937901e-06 -9.1606624e-06 +4081 8.17 -5.1755010e-06 -9.1284065e-06 +4082 8.172 -5.1572764e-06 -9.0962642e-06 +4083 8.174 -5.1391159e-06 -9.0642350e-06 +4084 8.176 -5.1210194e-06 -9.0323186e-06 +4085 8.178 -5.1029866e-06 -9.0005146e-06 +4086 8.18 -5.0850172e-06 -8.9688225e-06 +4087 8.182 -5.0671112e-06 -8.9372421e-06 +4088 8.184 -5.0492682e-06 -8.9057728e-06 +4089 8.186 -5.0314880e-06 -8.8744143e-06 +4090 8.188 -5.0137705e-06 -8.8431662e-06 +4091 8.19 -4.9961153e-06 -8.8120281e-06 +4092 8.192 -4.9785223e-06 -8.7809997e-06 +4093 8.194 -4.9609912e-06 -8.7500805e-06 +4094 8.196 -4.9435219e-06 -8.7192701e-06 +4095 8.198 -4.9261141e-06 -8.6885682e-06 +4096 8.2 -4.9087675e-06 -8.6579745e-06 +4097 8.202 -4.8914821e-06 -8.6274884e-06 +4098 8.204 -4.8742575e-06 -8.5971097e-06 +4099 8.206 -4.8570936e-06 -8.5668379e-06 +4100 8.208 -4.8399901e-06 -8.5366728e-06 +4101 8.21 -4.8229468e-06 -8.5066138e-06 +4102 8.212 -4.8059636e-06 -8.4766606e-06 +4103 8.214 -4.7890401e-06 -8.4468129e-06 +4104 8.216 -4.7721762e-06 -8.4170703e-06 +4105 8.218 -4.7553718e-06 -8.3874325e-06 +4106 8.22 -4.7386264e-06 -8.3578989e-06 +4107 8.222 -4.7219401e-06 -8.3284694e-06 +4108 8.224 -4.7053125e-06 -8.2991434e-06 +4109 8.226 -4.6887435e-06 -8.2699207e-06 +4110 8.228 -4.6722328e-06 -8.2408009e-06 +4111 8.23 -4.6557802e-06 -8.2117837e-06 +4112 8.232 -4.6393855e-06 -8.1828686e-06 +4113 8.234 -4.6230486e-06 -8.1540553e-06 +4114 8.236 -4.6067693e-06 -8.1253434e-06 +4115 8.238 -4.5905472e-06 -8.0967326e-06 +4116 8.24 -4.5743823e-06 -8.0682226e-06 +4117 8.242 -4.5582742e-06 -8.0398130e-06 +4118 8.244 -4.5422229e-06 -8.0115033e-06 +4119 8.246 -4.5262282e-06 -7.9832934e-06 +4120 8.248 -4.5102897e-06 -7.9551827e-06 +4121 8.25 -4.4944074e-06 -7.9271711e-06 +4122 8.252 -4.4785810e-06 -7.8992581e-06 +4123 8.254 -4.4628103e-06 -7.8714433e-06 +4124 8.256 -4.4470951e-06 -7.8437265e-06 +4125 8.258 -4.4314353e-06 -7.8161072e-06 +4126 8.26 -4.4158306e-06 -7.7885852e-06 +4127 8.262 -4.4002809e-06 -7.7611601e-06 +4128 8.264 -4.3847859e-06 -7.7338316e-06 +4129 8.266 -4.3693455e-06 -7.7065993e-06 +4130 8.268 -4.3539595e-06 -7.6794629e-06 +4131 8.27 -4.3386276e-06 -7.6524220e-06 +4132 8.272 -4.3233497e-06 -7.6254763e-06 +4133 8.274 -4.3081256e-06 -7.5986255e-06 +4134 8.276 -4.2929551e-06 -7.5718692e-06 +4135 8.278 -4.2778381e-06 -7.5452071e-06 +4136 8.28 -4.2627742e-06 -7.5186390e-06 +4137 8.282 -4.2477635e-06 -7.4921643e-06 +4138 8.284 -4.2328055e-06 -7.4657829e-06 +4139 8.286 -4.2179003e-06 -7.4394943e-06 +4140 8.288 -4.2030475e-06 -7.4132983e-06 +4141 8.29 -4.1882470e-06 -7.3871946e-06 +4142 8.292 -4.1734986e-06 -7.3611827e-06 +4143 8.294 -4.1588022e-06 -7.3352625e-06 +4144 8.296 -4.1441575e-06 -7.3094335e-06 +4145 8.298 -4.1295644e-06 -7.2836954e-06 +4146 8.3 -4.1150227e-06 -7.2580480e-06 +4147 8.302 -4.1005322e-06 -7.2324908e-06 +4148 8.304 -4.0860927e-06 -7.2070237e-06 +4149 8.306 -4.0717040e-06 -7.1816462e-06 +4150 8.308 -4.0573660e-06 -7.1563581e-06 +4151 8.31 -4.0430785e-06 -7.1311590e-06 +4152 8.312 -4.0288413e-06 -7.1060486e-06 +4153 8.314 -4.0146543e-06 -7.0810266e-06 +4154 8.316 -4.0005172e-06 -7.0560928e-06 +4155 8.318 -3.9864298e-06 -7.0312467e-06 +4156 8.32 -3.9723921e-06 -7.0064881e-06 +4157 8.322 -3.9584038e-06 -6.9818167e-06 +4158 8.324 -3.9444648e-06 -6.9572322e-06 +4159 8.326 -3.9305748e-06 -6.9327342e-06 +4160 8.328 -3.9167338e-06 -6.9083224e-06 +4161 8.33 -3.9029415e-06 -6.8839967e-06 +4162 8.332 -3.8891978e-06 -6.8597565e-06 +4163 8.334 -3.8755024e-06 -6.8356017e-06 +4164 8.336 -3.8618553e-06 -6.8115320e-06 +4165 8.338 -3.8482562e-06 -6.7875470e-06 +4166 8.34 -3.8347051e-06 -6.7636465e-06 +4167 8.342 -3.8212016e-06 -6.7398301e-06 +4168 8.344 -3.8077457e-06 -6.7160976e-06 +4169 8.346 -3.7943371e-06 -6.6924486e-06 +4170 8.348 -3.7809758e-06 -6.6688829e-06 +4171 8.35 -3.7676616e-06 -6.6454002e-06 +4172 8.352 -3.7543942e-06 -6.6220001e-06 +4173 8.354 -3.7411735e-06 -6.5986824e-06 +4174 8.356 -3.7279994e-06 -6.5754469e-06 +4175 8.358 -3.7148717e-06 -6.5522931e-06 +4176 8.36 -3.7017902e-06 -6.5292209e-06 +4177 8.362 -3.6887547e-06 -6.5062299e-06 +4178 8.364 -3.6757652e-06 -6.4833199e-06 +4179 8.366 -3.6628214e-06 -6.4604905e-06 +4180 8.368 -3.6499232e-06 -6.4377416e-06 +4181 8.37 -3.6370704e-06 -6.4150727e-06 +4182 8.372 -3.6242628e-06 -6.3924836e-06 +4183 8.374 -3.6115004e-06 -6.3699741e-06 +4184 8.376 -3.5987829e-06 -6.3475438e-06 +4185 8.378 -3.5861102e-06 -6.3251925e-06 +4186 8.38 -3.5734821e-06 -6.3029199e-06 +4187 8.382 -3.5608984e-06 -6.2807257e-06 +4188 8.384 -3.5483591e-06 -6.2586096e-06 +4189 8.386 -3.5358639e-06 -6.2365715e-06 +4190 8.388 -3.5234128e-06 -6.2146109e-06 +4191 8.39 -3.5110054e-06 -6.1927276e-06 +4192 8.392 -3.4986418e-06 -6.1709214e-06 +4193 8.394 -3.4863217e-06 -6.1491920e-06 +4194 8.396 -3.4740450e-06 -6.1275391e-06 +4195 8.398 -3.4618115e-06 -6.1059624e-06 +4196 8.4 -3.4496211e-06 -6.0844617e-06 +4197 8.402 -3.4374736e-06 -6.0630367e-06 +4198 8.404 -3.4253689e-06 -6.0416872e-06 +4199 8.406 -3.4133068e-06 -6.0204128e-06 +4200 8.408 -3.4012872e-06 -5.9992133e-06 +4201 8.41 -3.3893099e-06 -5.9780885e-06 +4202 8.412 -3.3773748e-06 -5.9570380e-06 +4203 8.414 -3.3654817e-06 -5.9360617e-06 +4204 8.416 -3.3536305e-06 -5.9151592e-06 +4205 8.418 -3.3418210e-06 -5.8943303e-06 +4206 8.42 -3.3300531e-06 -5.8735748e-06 +4207 8.422 -3.3183267e-06 -5.8528923e-06 +4208 8.424 -3.3066415e-06 -5.8322827e-06 +4209 8.426 -3.2949975e-06 -5.8117456e-06 +4210 8.428 -3.2833945e-06 -5.7912809e-06 +4211 8.43 -3.2718323e-06 -5.7708882e-06 +4212 8.432 -3.2603109e-06 -5.7505673e-06 +4213 8.434 -3.2488300e-06 -5.7303179e-06 +4214 8.436 -3.2373895e-06 -5.7101399e-06 +4215 8.438 -3.2259894e-06 -5.6900329e-06 +4216 8.44 -3.2146294e-06 -5.6699967e-06 +4217 8.442 -3.2033093e-06 -5.6500310e-06 +4218 8.444 -3.1920292e-06 -5.6301357e-06 +4219 8.446 -3.1807888e-06 -5.6103104e-06 +4220 8.448 -3.1695879e-06 -5.5905549e-06 +4221 8.45 -3.1584265e-06 -5.5708689e-06 +4222 8.452 -3.1473044e-06 -5.5512523e-06 +4223 8.454 -3.1362214e-06 -5.5317048e-06 +4224 8.456 -3.1251775e-06 -5.5122260e-06 +4225 8.458 -3.1141725e-06 -5.4928159e-06 +4226 8.46 -3.1032062e-06 -5.4734741e-06 +4227 8.462 -3.0922785e-06 -5.4542004e-06 +4228 8.464 -3.0813894e-06 -5.4349946e-06 +4229 8.466 -3.0705385e-06 -5.4158564e-06 +4230 8.468 -3.0597259e-06 -5.3967856e-06 +4231 8.47 -3.0489513e-06 -5.3777819e-06 +4232 8.472 -3.0382147e-06 -5.3588451e-06 +4233 8.474 -3.0275159e-06 -5.3399751e-06 +4234 8.476 -3.0168548e-06 -5.3211714e-06 +4235 8.478 -3.0062312e-06 -5.3024340e-06 +4236 8.48 -2.9956450e-06 -5.2837626e-06 +4237 8.482 -2.9850961e-06 -5.2651569e-06 +4238 8.484 -2.9745843e-06 -5.2466167e-06 +4239 8.486 -2.9641096e-06 -5.2281418e-06 +4240 8.488 -2.9536717e-06 -5.2097319e-06 +4241 8.49 -2.9432706e-06 -5.1913869e-06 +4242 8.492 -2.9329061e-06 -5.1731064e-06 +4243 8.494 -2.9225781e-06 -5.1548903e-06 +4244 8.496 -2.9122865e-06 -5.1367384e-06 +4245 8.498 -2.9020311e-06 -5.1186504e-06 +4246 8.5 -2.8918119e-06 -5.1006261e-06 +4247 8.502 -2.8816286e-06 -5.0826652e-06 +4248 8.504 -2.8714812e-06 -5.0647676e-06 +4249 8.506 -2.8613695e-06 -5.0469330e-06 +4250 8.508 -2.8512934e-06 -5.0291612e-06 +4251 8.51 -2.8412528e-06 -5.0114519e-06 +4252 8.512 -2.8312476e-06 -4.9938050e-06 +4253 8.514 -2.8212775e-06 -4.9762203e-06 +4254 8.516 -2.8113426e-06 -4.9586975e-06 +4255 8.518 -2.8014427e-06 -4.9412364e-06 +4256 8.52 -2.7915776e-06 -4.9238367e-06 +4257 8.522 -2.7817473e-06 -4.9064984e-06 +4258 8.524 -2.7719516e-06 -4.8892210e-06 +4259 8.526 -2.7621904e-06 -4.8720045e-06 +4260 8.528 -2.7524635e-06 -4.8548487e-06 +4261 8.53 -2.7427710e-06 -4.8377532e-06 +4262 8.532 -2.7331125e-06 -4.8207179e-06 +4263 8.534 -2.7234880e-06 -4.8037427e-06 +4264 8.536 -2.7138975e-06 -4.7868272e-06 +4265 8.538 -2.7043407e-06 -4.7699712e-06 +4266 8.54 -2.6948176e-06 -4.7531746e-06 +4267 8.542 -2.6853280e-06 -4.7364372e-06 +4268 8.544 -2.6758718e-06 -4.7197586e-06 +4269 8.546 -2.6664489e-06 -4.7031388e-06 +4270 8.548 -2.6570592e-06 -4.6865776e-06 +4271 8.55 -2.6477025e-06 -4.6700746e-06 +4272 8.552 -2.6383788e-06 -4.6536298e-06 +4273 8.554 -2.6290880e-06 -4.6372428e-06 +4274 8.556 -2.6198298e-06 -4.6209136e-06 +4275 8.558 -2.6106043e-06 -4.6046418e-06 +4276 8.56 -2.6014112e-06 -4.5884274e-06 +4277 8.562 -2.5922505e-06 -4.5722700e-06 +4278 8.564 -2.5831221e-06 -4.5561695e-06 +4279 8.566 -2.5740258e-06 -4.5401258e-06 +4280 8.568 -2.5649616e-06 -4.5241385e-06 +4281 8.57 -2.5559292e-06 -4.5082075e-06 +4282 8.572 -2.5469287e-06 -4.4923326e-06 +4283 8.574 -2.5379599e-06 -4.4765136e-06 +4284 8.576 -2.5290226e-06 -4.4607503e-06 +4285 8.578 -2.5201168e-06 -4.4450425e-06 +4286 8.58 -2.5112424e-06 -4.4293900e-06 +4287 8.582 -2.5023992e-06 -4.4137927e-06 +4288 8.584 -2.4935872e-06 -4.3982502e-06 +4289 8.586 -2.4848062e-06 -4.3827625e-06 +4290 8.588 -2.4760561e-06 -4.3673293e-06 +4291 8.59 -2.4673368e-06 -4.3519505e-06 +4292 8.592 -2.4586483e-06 -4.3366258e-06 +4293 8.594 -2.4499903e-06 -4.3213551e-06 +4294 8.596 -2.4413628e-06 -4.3061381e-06 +4295 8.598 -2.4327657e-06 -4.2909747e-06 +4296 8.6 -2.4241989e-06 -4.2758647e-06 +4297 8.602 -2.4156622e-06 -4.2608080e-06 +4298 8.604 -2.4071556e-06 -4.2458042e-06 +4299 8.606 -2.3986790e-06 -4.2308533e-06 +4300 8.608 -2.3902322e-06 -4.2159550e-06 +4301 8.61 -2.3818151e-06 -4.2011091e-06 +4302 8.612 -2.3734277e-06 -4.1863156e-06 +4303 8.614 -2.3650698e-06 -4.1715741e-06 +4304 8.616 -2.3567414e-06 -4.1568846e-06 +4305 8.618 -2.3484422e-06 -4.1422467e-06 +4306 8.62 -2.3401723e-06 -4.1276604e-06 +4307 8.622 -2.3319316e-06 -4.1131255e-06 +4308 8.624 -2.3237198e-06 -4.0986418e-06 +4309 8.626 -2.3155370e-06 -4.0842090e-06 +4310 8.628 -2.3073829e-06 -4.0698271e-06 +4311 8.63 -2.2992576e-06 -4.0554958e-06 +4312 8.632 -2.2911609e-06 -4.0412150e-06 +4313 8.634 -2.2830927e-06 -4.0269844e-06 +4314 8.636 -2.2750529e-06 -4.0128040e-06 +4315 8.638 -2.2670415e-06 -3.9986735e-06 +4316 8.64 -2.2590582e-06 -3.9845927e-06 +4317 8.642 -2.2511031e-06 -3.9705616e-06 +4318 8.644 -2.2431759e-06 -3.9565798e-06 +4319 8.646 -2.2352767e-06 -3.9426473e-06 +4320 8.648 -2.2274053e-06 -3.9287638e-06 +4321 8.65 -2.2195616e-06 -3.9149293e-06 +4322 8.652 -2.2117456e-06 -3.9011434e-06 +4323 8.654 -2.2039570e-06 -3.8874061e-06 +4324 8.656 -2.1961959e-06 -3.8737171e-06 +4325 8.658 -2.1884621e-06 -3.8600764e-06 +4326 8.66 -2.1807556e-06 -3.8464837e-06 +4327 8.662 -2.1730762e-06 -3.8329388e-06 +4328 8.664 -2.1654238e-06 -3.8194416e-06 +4329 8.666 -2.1577984e-06 -3.8059920e-06 +4330 8.668 -2.1501998e-06 -3.7925897e-06 +4331 8.67 -2.1426280e-06 -3.7792346e-06 +4332 8.672 -2.1350828e-06 -3.7659266e-06 +4333 8.674 -2.1275642e-06 -3.7526654e-06 +4334 8.676 -2.1200721e-06 -3.7394509e-06 +4335 8.678 -2.1126064e-06 -3.7262829e-06 +4336 8.68 -2.1051670e-06 -3.7131613e-06 +4337 8.682 -2.0977537e-06 -3.7000859e-06 +4338 8.684 -2.0903666e-06 -3.6870565e-06 +4339 8.686 -2.0830055e-06 -3.6740731e-06 +4340 8.688 -2.0756703e-06 -3.6611353e-06 +4341 8.69 -2.0683609e-06 -3.6482431e-06 +4342 8.692 -2.0610773e-06 -3.6353963e-06 +4343 8.694 -2.0538193e-06 -3.6225947e-06 +4344 8.696 -2.0465869e-06 -3.6098382e-06 +4345 8.698 -2.0393799e-06 -3.5971266e-06 +4346 8.7 -2.0321983e-06 -3.5844598e-06 +4347 8.702 -2.0250420e-06 -3.5718376e-06 +4348 8.704 -2.0179109e-06 -3.5592598e-06 +4349 8.706 -2.0108050e-06 -3.5467264e-06 +4350 8.708 -2.0037240e-06 -3.5342370e-06 +4351 8.71 -1.9966680e-06 -3.5217916e-06 +4352 8.712 -1.9896368e-06 -3.5093901e-06 +4353 8.714 -1.9826304e-06 -3.4970322e-06 +4354 8.716 -1.9756486e-06 -3.4847178e-06 +4355 8.718 -1.9686915e-06 -3.4724468e-06 +4356 8.72 -1.9617588e-06 -3.4602191e-06 +4357 8.722 -1.9548506e-06 -3.4480343e-06 +4358 8.724 -1.9479667e-06 -3.4358925e-06 +4359 8.726 -1.9411070e-06 -3.4237934e-06 +4360 8.728 -1.9342715e-06 -3.4117369e-06 +4361 8.73 -1.9274600e-06 -3.3997229e-06 +4362 8.732 -1.9206725e-06 -3.3877512e-06 +4363 8.734 -1.9139090e-06 -3.3758216e-06 +4364 8.736 -1.9071692e-06 -3.3639341e-06 +4365 8.738 -1.9004532e-06 -3.3520884e-06 +4366 8.74 -1.8937608e-06 -3.3402844e-06 +4367 8.742 -1.8870920e-06 -3.3285220e-06 +4368 8.744 -1.8804467e-06 -3.3168010e-06 +4369 8.746 -1.8738248e-06 -3.3051213e-06 +4370 8.748 -1.8672262e-06 -3.2934827e-06 +4371 8.75 -1.8606509e-06 -3.2818850e-06 +4372 8.752 -1.8540987e-06 -3.2703283e-06 +4373 8.754 -1.8475695e-06 -3.2588122e-06 +4374 8.756 -1.8410634e-06 -3.2473366e-06 +4375 8.758 -1.8345801e-06 -3.2359015e-06 +4376 8.76 -1.8281197e-06 -3.2245067e-06 +4377 8.762 -1.8216821e-06 -3.2131519e-06 +4378 8.764 -1.8152671e-06 -3.2018372e-06 +4379 8.766 -1.8088747e-06 -3.1905623e-06 +4380 8.768 -1.8025048e-06 -3.1793270e-06 +4381 8.77 -1.7961574e-06 -3.1681314e-06 +4382 8.772 -1.7898323e-06 -3.1569752e-06 +4383 8.774 -1.7835295e-06 -3.1458582e-06 +4384 8.776 -1.7772488e-06 -3.1347804e-06 +4385 8.778 -1.7709903e-06 -3.1237416e-06 +4386 8.78 -1.7647538e-06 -3.1127417e-06 +4387 8.782 -1.7585393e-06 -3.1017805e-06 +4388 8.784 -1.7523467e-06 -3.0908580e-06 +4389 8.786 -1.7461759e-06 -3.0799738e-06 +4390 8.788 -1.7400268e-06 -3.0691280e-06 +4391 8.79 -1.7338993e-06 -3.0583204e-06 +4392 8.792 -1.7277935e-06 -3.0475509e-06 +4393 8.794 -1.7217091e-06 -3.0368192e-06 +4394 8.796 -1.7156462e-06 -3.0261254e-06 +4395 8.798 -1.7096046e-06 -3.0154692e-06 +4396 8.8 -1.7035843e-06 -3.0048505e-06 +4397 8.802 -1.6975851e-06 -2.9942693e-06 +4398 8.804 -1.6916072e-06 -2.9837253e-06 +4399 8.806 -1.6856502e-06 -2.9732184e-06 +4400 8.808 -1.6797143e-06 -2.9627485e-06 +4401 8.81 -1.6737992e-06 -2.9523155e-06 +4402 8.812 -1.6679050e-06 -2.9419192e-06 +4403 8.814 -1.6620315e-06 -2.9315595e-06 +4404 8.816 -1.6561787e-06 -2.9212363e-06 +4405 8.818 -1.6503465e-06 -2.9109495e-06 +4406 8.82 -1.6445349e-06 -2.9006989e-06 +4407 8.822 -1.6387437e-06 -2.8904843e-06 +4408 8.824 -1.6329729e-06 -2.8803058e-06 +4409 8.826 -1.6272225e-06 -2.8701631e-06 +4410 8.828 -1.6214922e-06 -2.8600561e-06 +4411 8.83 -1.6157822e-06 -2.8499846e-06 +4412 8.832 -1.6100923e-06 -2.8399487e-06 +4413 8.834 -1.6044224e-06 -2.8299481e-06 +4414 8.836 -1.5987725e-06 -2.8199827e-06 +4415 8.838 -1.5931424e-06 -2.8100524e-06 +4416 8.84 -1.5875322e-06 -2.8001571e-06 +4417 8.842 -1.5819418e-06 -2.7902966e-06 +4418 8.844 -1.5763710e-06 -2.7804708e-06 +4419 8.846 -1.5708199e-06 -2.7706796e-06 +4420 8.848 -1.5652883e-06 -2.7609230e-06 +4421 8.85 -1.5597762e-06 -2.7512006e-06 +4422 8.852 -1.5542835e-06 -2.7415125e-06 +4423 8.854 -1.5488101e-06 -2.7318585e-06 +4424 8.856 -1.5433560e-06 -2.7222385e-06 +4425 8.858 -1.5379211e-06 -2.7126524e-06 +4426 8.86 -1.5325054e-06 -2.7031001e-06 +4427 8.862 -1.5271087e-06 -2.6935813e-06 +4428 8.864 -1.5217310e-06 -2.6840961e-06 +4429 8.866 -1.5163723e-06 -2.6746443e-06 +4430 8.868 -1.5110324e-06 -2.6652258e-06 +4431 8.87 -1.5057114e-06 -2.6558404e-06 +4432 8.872 -1.5004090e-06 -2.6464881e-06 +4433 8.874 -1.4951254e-06 -2.6371688e-06 +4434 8.876 -1.4898603e-06 -2.6278822e-06 +4435 8.878 -1.4846138e-06 -2.6186283e-06 +4436 8.88 -1.4793858e-06 -2.6094071e-06 +4437 8.882 -1.4741762e-06 -2.6002183e-06 +4438 8.884 -1.4689849e-06 -2.5910618e-06 +4439 8.886 -1.4638119e-06 -2.5819376e-06 +4440 8.888 -1.4586571e-06 -2.5728455e-06 +4441 8.89 -1.4535205e-06 -2.5637855e-06 +4442 8.892 -1.4484020e-06 -2.5547573e-06 +4443 8.894 -1.4433015e-06 -2.5457610e-06 +4444 8.896 -1.4382189e-06 -2.5367963e-06 +4445 8.898 -1.4331543e-06 -2.5278632e-06 +4446 8.9 -1.4281074e-06 -2.5189615e-06 +4447 8.902 -1.4230784e-06 -2.5100912e-06 +4448 8.904 -1.4180671e-06 -2.5012521e-06 +4449 8.906 -1.4130734e-06 -2.4924441e-06 +4450 8.908 -1.4080973e-06 -2.4836672e-06 +4451 8.91 -1.4031387e-06 -2.4749212e-06 +4452 8.912 -1.3981975e-06 -2.4662059e-06 +4453 8.914 -1.3932738e-06 -2.4575214e-06 +4454 8.916 -1.3883674e-06 -2.4488674e-06 +4455 8.918 -1.3834783e-06 -2.4402439e-06 +4456 8.92 -1.3786064e-06 -2.4316508e-06 +4457 8.922 -1.3737517e-06 -2.4230879e-06 +4458 8.924 -1.3689141e-06 -2.4145552e-06 +4459 8.926 -1.3640935e-06 -2.4060525e-06 +4460 8.928 -1.3592898e-06 -2.3975798e-06 +4461 8.93 -1.3545031e-06 -2.3891369e-06 +4462 8.932 -1.3497333e-06 -2.3807238e-06 +4463 8.934 -1.3449802e-06 -2.3723402e-06 +4464 8.936 -1.3402439e-06 -2.3639862e-06 +4465 8.938 -1.3355243e-06 -2.3556616e-06 +4466 8.94 -1.3308212e-06 -2.3473663e-06 +4467 8.942 -1.3261348e-06 -2.3391002e-06 +4468 8.944 -1.3214648e-06 -2.3308633e-06 +4469 8.946 -1.3168113e-06 -2.3226553e-06 +4470 8.948 -1.3121742e-06 -2.3144762e-06 +4471 8.95 -1.3075534e-06 -2.3063260e-06 +4472 8.952 -1.3029488e-06 -2.2982044e-06 +4473 8.954 -1.2983605e-06 -2.2901115e-06 +4474 8.956 -1.2937884e-06 -2.2820470e-06 +4475 8.958 -1.2892323e-06 -2.2740109e-06 +4476 8.96 -1.2846923e-06 -2.2660032e-06 +4477 8.962 -1.2801683e-06 -2.2580236e-06 +4478 8.964 -1.2756602e-06 -2.2500721e-06 +4479 8.966 -1.2711680e-06 -2.2421487e-06 +4480 8.968 -1.2666916e-06 -2.2342531e-06 +4481 8.97 -1.2622310e-06 -2.2263853e-06 +4482 8.972 -1.2577860e-06 -2.2185453e-06 +4483 8.974 -1.2533568e-06 -2.2107328e-06 +4484 8.976 -1.2489431e-06 -2.2029479e-06 +4485 8.978 -1.2445450e-06 -2.1951903e-06 +4486 8.98 -1.2401623e-06 -2.1874601e-06 +4487 8.982 -1.2357951e-06 -2.1797571e-06 +4488 8.984 -1.2314433e-06 -2.1720812e-06 +4489 8.986 -1.2271067e-06 -2.1644324e-06 +4490 8.988 -1.2227855e-06 -2.1568105e-06 +4491 8.99 -1.2184795e-06 -2.1492154e-06 +4492 8.992 -1.2141886e-06 -2.1416471e-06 +4493 8.994 -1.2099129e-06 -2.1341054e-06 +4494 8.996 -1.2056522e-06 -2.1265903e-06 +4495 8.998 -1.2014065e-06 -2.1191017e-06 +4496 9.0 -1.1971758e-06 -2.1116394e-06 +4497 9.002 -1.1929599e-06 -2.1042034e-06 +4498 9.004 -1.1887589e-06 -2.0967936e-06 +4499 9.006 -1.1845727e-06 -2.0894098e-06 +4500 9.008 -1.1804013e-06 -2.0820521e-06 +4501 9.01 -1.1762445e-06 -2.0747203e-06 +4502 9.012 -1.1721024e-06 -2.0674143e-06 +4503 9.014 -1.1679748e-06 -2.0601340e-06 +4504 9.016 -1.1638618e-06 -2.0528794e-06 +4505 9.018 -1.1597633e-06 -2.0456503e-06 +4506 9.02 -1.1556792e-06 -2.0384467e-06 +4507 9.022 -1.1516095e-06 -2.0312684e-06 +4508 9.024 -1.1475541e-06 -2.0241154e-06 +4509 9.026 -1.1435130e-06 -2.0169876e-06 +4510 9.028 -1.1394862e-06 -2.0098849e-06 +4511 9.03 -1.1354735e-06 -2.0028072e-06 +4512 9.032 -1.1314749e-06 -1.9957545e-06 +4513 9.034 -1.1274904e-06 -1.9887265e-06 +4514 9.036 -1.1235200e-06 -1.9817234e-06 +4515 9.038 -1.1195635e-06 -1.9747448e-06 +4516 9.04 -1.1156210e-06 -1.9677909e-06 +4517 9.042 -1.1116923e-06 -1.9608614e-06 +4518 9.044 -1.1077775e-06 -1.9539564e-06 +4519 9.046 -1.1038765e-06 -1.9470756e-06 +4520 9.048 -1.0999892e-06 -1.9402191e-06 +4521 9.05 -1.0961156e-06 -1.9333867e-06 +4522 9.052 -1.0922556e-06 -1.9265784e-06 +4523 9.054 -1.0884093e-06 -1.9197941e-06 +4524 9.056 -1.0845765e-06 -1.9130336e-06 +4525 9.058 -1.0807571e-06 -1.9062970e-06 +4526 9.06 -1.0769512e-06 -1.8995841e-06 +4527 9.062 -1.0731588e-06 -1.8928948e-06 +4528 9.064 -1.0693797e-06 -1.8862290e-06 +4529 9.066 -1.0656138e-06 -1.8795868e-06 +4530 9.068 -1.0618613e-06 -1.8729679e-06 +4531 9.07 -1.0581220e-06 -1.8663724e-06 +4532 9.072 -1.0543958e-06 -1.8598000e-06 +4533 9.074 -1.0506827e-06 -1.8532509e-06 +4534 9.076 -1.0469828e-06 -1.8467247e-06 +4535 9.078 -1.0432958e-06 -1.8402216e-06 +4536 9.08 -1.0396219e-06 -1.8337413e-06 +4537 9.082 -1.0359608e-06 -1.8272839e-06 +4538 9.084 -1.0323127e-06 -1.8208492e-06 +4539 9.086 -1.0286774e-06 -1.8144372e-06 +4540 9.088 -1.0250550e-06 -1.8080478e-06 +4541 9.09 -1.0214452e-06 -1.8016808e-06 +4542 9.092 -1.0178482e-06 -1.7953363e-06 +4543 9.094 -1.0142639e-06 -1.7890141e-06 +4544 9.096 -1.0106921e-06 -1.7827142e-06 +4545 9.098 -1.0071330e-06 -1.7764364e-06 +4546 9.1 -1.0035864e-06 -1.7701808e-06 +4547 9.102 -1.0000523e-06 -1.7639472e-06 +4548 9.104 -9.9653058e-07 -1.7577355e-06 +4549 9.106 -9.9302130e-07 -1.7515457e-06 +4550 9.108 -9.8952438e-07 -1.7453778e-06 +4551 9.11 -9.8603977e-07 -1.7392315e-06 +4552 9.112 -9.8256744e-07 -1.7331069e-06 +4553 9.114 -9.7910733e-07 -1.7270038e-06 +4554 9.116 -9.7565941e-07 -1.7209223e-06 +4555 9.118 -9.7222363e-07 -1.7148621e-06 +4556 9.12 -9.6879995e-07 -1.7088233e-06 +4557 9.122 -9.6538832e-07 -1.7028058e-06 +4558 9.124 -9.6198871e-07 -1.6968094e-06 +4559 9.126 -9.5860107e-07 -1.6908342e-06 +4560 9.128 -9.5522536e-07 -1.6848800e-06 +4561 9.13 -9.5186154e-07 -1.6789467e-06 +4562 9.132 -9.4850956e-07 -1.6730344e-06 +4563 9.134 -9.4516938e-07 -1.6671429e-06 +4564 9.136 -9.4184097e-07 -1.6612721e-06 +4565 9.138 -9.3852428e-07 -1.6554220e-06 +4566 9.14 -9.3521927e-07 -1.6495925e-06 +4567 9.142 -9.3192590e-07 -1.6437836e-06 +4568 9.144 -9.2864412e-07 -1.6379951e-06 +4569 9.146 -9.2537390e-07 -1.6322269e-06 +4570 9.148 -9.2211520e-07 -1.6264791e-06 +4571 9.15 -9.1886797e-07 -1.6207515e-06 +4572 9.152 -9.1563218e-07 -1.6150441e-06 +4573 9.154 -9.1240778e-07 -1.6093568e-06 +4574 9.156 -9.0919474e-07 -1.6036895e-06 +4575 9.158 -9.0599301e-07 -1.5980422e-06 +4576 9.16 -9.0280256e-07 -1.5924148e-06 +4577 9.162 -8.9962334e-07 -1.5868071e-06 +4578 9.164 -8.9645532e-07 -1.5812193e-06 +4579 9.166 -8.9329845e-07 -1.5756511e-06 +4580 9.168 -8.9015270e-07 -1.5701025e-06 +4581 9.17 -8.8701803e-07 -1.5645734e-06 +4582 9.172 -8.8389439e-07 -1.5590638e-06 +4583 9.174 -8.8078176e-07 -1.5535737e-06 +4584 9.176 -8.7768009e-07 -1.5481028e-06 +4585 9.178 -8.7458934e-07 -1.5426512e-06 +4586 9.18 -8.7150947e-07 -1.5372188e-06 +4587 9.182 -8.6844045e-07 -1.5318056e-06 +4588 9.184 -8.6538223e-07 -1.5264114e-06 +4589 9.186 -8.6233479e-07 -1.5210362e-06 +4590 9.188 -8.5929808e-07 -1.5156799e-06 +4591 9.19 -8.5627206e-07 -1.5103425e-06 +4592 9.192 -8.5325669e-07 -1.5050239e-06 +4593 9.194 -8.5025195e-07 -1.4997240e-06 +4594 9.196 -8.4725779e-07 -1.4944428e-06 +4595 9.198 -8.4427417e-07 -1.4891801e-06 +4596 9.2 -8.4130105e-07 -1.4839361e-06 +4597 9.202 -8.3833841e-07 -1.4787104e-06 +4598 9.204 -8.3538620e-07 -1.4735032e-06 +4599 9.206 -8.3244438e-07 -1.4683143e-06 +4600 9.208 -8.2951293e-07 -1.4631437e-06 +4601 9.21 -8.2659180e-07 -1.4579913e-06 +4602 9.212 -8.2368095e-07 -1.4528570e-06 +4603 9.214 -8.2078036e-07 -1.4477408e-06 +4604 9.216 -8.1788998e-07 -1.4426427e-06 +4605 9.218 -8.1500977e-07 -1.4375624e-06 +4606 9.22 -8.1213971e-07 -1.4325001e-06 +4607 9.222 -8.0927976e-07 -1.4274556e-06 +4608 9.224 -8.0642988e-07 -1.4224289e-06 +4609 9.226 -8.0359003e-07 -1.4174198e-06 +4610 9.228 -8.0076019e-07 -1.4124284e-06 +4611 9.23 -7.9794031e-07 -1.4074546e-06 +4612 9.232 -7.9513036e-07 -1.4024983e-06 +4613 9.234 -7.9233030e-07 -1.3975595e-06 +4614 9.236 -7.8954011e-07 -1.3926380e-06 +4615 9.238 -7.8675974e-07 -1.3877339e-06 +4616 9.24 -7.8398916e-07 -1.3828470e-06 +4617 9.242 -7.8122834e-07 -1.3779774e-06 +4618 9.244 -7.7847724e-07 -1.3731249e-06 +4619 9.246 -7.7573583e-07 -1.3682894e-06 +4620 9.248 -7.7300407e-07 -1.3634711e-06 +4621 9.25 -7.7028193e-07 -1.3586696e-06 +4622 9.252 -7.6756938e-07 -1.3538851e-06 +4623 9.254 -7.6486638e-07 -1.3491175e-06 +4624 9.256 -7.6217290e-07 -1.3443666e-06 +4625 9.258 -7.5948891e-07 -1.3396324e-06 +4626 9.26 -7.5681436e-07 -1.3349150e-06 +4627 9.262 -7.5414923e-07 -1.3302141e-06 +4628 9.264 -7.5149349e-07 -1.3255298e-06 +4629 9.266 -7.4884710e-07 -1.3208620e-06 +4630 9.268 -7.4621004e-07 -1.3162106e-06 +4631 9.27 -7.4358225e-07 -1.3115756e-06 +4632 9.272 -7.4096372e-07 -1.3069569e-06 +4633 9.274 -7.3835441e-07 -1.3023545e-06 +4634 9.276 -7.3575429e-07 -1.2977683e-06 +4635 9.278 -7.3316333e-07 -1.2931982e-06 +4636 9.28 -7.3058149e-07 -1.2886443e-06 +4637 9.282 -7.2800874e-07 -1.2841063e-06 +4638 9.284 -7.2544505e-07 -1.2795844e-06 +4639 9.286 -7.2289039e-07 -1.2750784e-06 +4640 9.288 -7.2034473e-07 -1.2705882e-06 +4641 9.29 -7.1780803e-07 -1.2661139e-06 +4642 9.292 -7.1528026e-07 -1.2616553e-06 +4643 9.294 -7.1276140e-07 -1.2572124e-06 +4644 9.296 -7.1025140e-07 -1.2527852e-06 +4645 9.298 -7.0775025e-07 -1.2483735e-06 +4646 9.3 -7.0525790e-07 -1.2439774e-06 +4647 9.302 -7.0277433e-07 -1.2395968e-06 +4648 9.304 -7.0029950e-07 -1.2352316e-06 +4649 9.306 -6.9783339e-07 -1.2308817e-06 +4650 9.308 -6.9537596e-07 -1.2265472e-06 +4651 9.31 -6.9292719e-07 -1.2222279e-06 +4652 9.312 -6.9048704e-07 -1.2179239e-06 +4653 9.314 -6.8805549e-07 -1.2136350e-06 +4654 9.316 -6.8563249e-07 -1.2093612e-06 +4655 9.318 -6.8321803e-07 -1.2051025e-06 +4656 9.32 -6.8081207e-07 -1.2008587e-06 +4657 9.322 -6.7841459e-07 -1.1966299e-06 +4658 9.324 -6.7602554e-07 -1.1924160e-06 +4659 9.326 -6.7364491e-07 -1.1882170e-06 +4660 9.328 -6.7127266e-07 -1.1840327e-06 +4661 9.33 -6.6890877e-07 -1.1798632e-06 +4662 9.332 -6.6655320e-07 -1.1757083e-06 +4663 9.334 -6.6420593e-07 -1.1715681e-06 +4664 9.336 -6.6186692e-07 -1.1674424e-06 +4665 9.338 -6.5953615e-07 -1.1633313e-06 +4666 9.34 -6.5721359e-07 -1.1592346e-06 +4667 9.342 -6.5489920e-07 -1.1551524e-06 +4668 9.344 -6.5259297e-07 -1.1510846e-06 +4669 9.346 -6.5029485e-07 -1.1470311e-06 +4670 9.348 -6.4800483e-07 -1.1429918e-06 +4671 9.35 -6.4572288e-07 -1.1389668e-06 +4672 9.352 -6.4344896e-07 -1.1349559e-06 +4673 9.354 -6.4118304e-07 -1.1309592e-06 +4674 9.356 -6.3892511e-07 -1.1269766e-06 +4675 9.358 -6.3667513e-07 -1.1230079e-06 +4676 9.36 -6.3443307e-07 -1.1190533e-06 +4677 9.362 -6.3219891e-07 -1.1151126e-06 +4678 9.364 -6.2997261e-07 -1.1111857e-06 +4679 9.366 -6.2775415e-07 -1.1072727e-06 +4680 9.368 -6.2554351e-07 -1.1033735e-06 +4681 9.37 -6.2334065e-07 -1.0994879e-06 +4682 9.372 -6.2114555e-07 -1.0956161e-06 +4683 9.374 -6.1895818e-07 -1.0917579e-06 +4684 9.376 -6.1677851e-07 -1.0879133e-06 +4685 9.378 -6.1460651e-07 -1.0840823e-06 +4686 9.38 -6.1244217e-07 -1.0802647e-06 +4687 9.382 -6.1028545e-07 -1.0764605e-06 +4688 9.384 -6.0813632e-07 -1.0726698e-06 +4689 9.386 -6.0599476e-07 -1.0688924e-06 +4690 9.388 -6.0386074e-07 -1.0651283e-06 +4691 9.39 -6.0173424e-07 -1.0613775e-06 +4692 9.392 -5.9961522e-07 -1.0576399e-06 +4693 9.394 -5.9750367e-07 -1.0539154e-06 +4694 9.396 -5.9539955e-07 -1.0502041e-06 +4695 9.398 -5.9330284e-07 -1.0465058e-06 +4696 9.4 -5.9121352e-07 -1.0428205e-06 +4697 9.402 -5.8913155e-07 -1.0391483e-06 +4698 9.404 -5.8705692e-07 -1.0354889e-06 +4699 9.406 -5.8498959e-07 -1.0318425e-06 +4700 9.408 -5.8292954e-07 -1.0282088e-06 +4701 9.41 -5.8087674e-07 -1.0245880e-06 +4702 9.412 -5.7883118e-07 -1.0209799e-06 +4703 9.414 -5.7679282e-07 -1.0173846e-06 +4704 9.416 -5.7476163e-07 -1.0138019e-06 +4705 9.418 -5.7273760e-07 -1.0102318e-06 +4706 9.42 -5.7072070e-07 -1.0066743e-06 +4707 9.422 -5.6871089e-07 -1.0031293e-06 +4708 9.424 -5.6670817e-07 -9.9959678e-07 +4709 9.426 -5.6471250e-07 -9.9607671e-07 +4710 9.428 -5.6272386e-07 -9.9256904e-07 +4711 9.43 -5.6074221e-07 -9.8907372e-07 +4712 9.432 -5.5876755e-07 -9.8559071e-07 +4713 9.434 -5.5679984e-07 -9.8211997e-07 +4714 9.436 -5.5483906e-07 -9.7866144e-07 +4715 9.438 -5.5288519e-07 -9.7521510e-07 +4716 9.44 -5.5093820e-07 -9.7178089e-07 +4717 9.442 -5.4899806e-07 -9.6835878e-07 +4718 9.444 -5.4706475e-07 -9.6494871e-07 +4719 9.446 -5.4513826e-07 -9.6155066e-07 +4720 9.448 -5.4321854e-07 -9.5816457e-07 +4721 9.45 -5.4130559e-07 -9.5479040e-07 +4722 9.452 -5.3939937e-07 -9.5142812e-07 +4723 9.454 -5.3749987e-07 -9.4807768e-07 +4724 9.456 -5.3560705e-07 -9.4473903e-07 +4725 9.458 -5.3372090e-07 -9.4141215e-07 +4726 9.46 -5.3184140e-07 -9.3809697e-07 +4727 9.462 -5.2996851e-07 -9.3479347e-07 +4728 9.464 -5.2810222e-07 -9.3150161e-07 +4729 9.466 -5.2624249e-07 -9.2822134e-07 +4730 9.468 -5.2438932e-07 -9.2495261e-07 +4731 9.47 -5.2254268e-07 -9.2169540e-07 +4732 9.472 -5.2070253e-07 -9.1844966e-07 +4733 9.474 -5.1886887e-07 -9.1521535e-07 +4734 9.476 -5.1704166e-07 -9.1199243e-07 +4735 9.478 -5.1522089e-07 -9.0878086e-07 +4736 9.48 -5.1340653e-07 -9.0558059e-07 +4737 9.482 -5.1159856e-07 -9.0239160e-07 +4738 9.484 -5.0979696e-07 -8.9921384e-07 +4739 9.486 -5.0800170e-07 -8.9604726e-07 +4740 9.488 -5.0621276e-07 -8.9289184e-07 +4741 9.49 -5.0443013e-07 -8.8974753e-07 +4742 9.492 -5.0265377e-07 -8.8661429e-07 +4743 9.494 -5.0088366e-07 -8.8349209e-07 +4744 9.496 -4.9911979e-07 -8.8038088e-07 +4745 9.498 -4.9736213e-07 -8.7728062e-07 +4746 9.5 -4.9561066e-07 -8.7419129e-07 +4747 9.502 -4.9386536e-07 -8.7111283e-07 +4748 9.504 -4.9212620e-07 -8.6804521e-07 +4749 9.506 -4.9039317e-07 -8.6498840e-07 +4750 9.508 -4.8866624e-07 -8.6194235e-07 +4751 9.51 -4.8694539e-07 -8.5890702e-07 +4752 9.512 -4.8523061e-07 -8.5588239e-07 +4753 9.514 -4.8352186e-07 -8.5286840e-07 +4754 9.516 -4.8181913e-07 -8.4986503e-07 +4755 9.518 -4.8012239e-07 -8.4687224e-07 +4756 9.52 -4.7843163e-07 -8.4388998e-07 +4757 9.522 -4.7674682e-07 -8.4091823e-07 +4758 9.524 -4.7506795e-07 -8.3795694e-07 +4759 9.526 -4.7339499e-07 -8.3500608e-07 +4760 9.528 -4.7172792e-07 -8.3206561e-07 +4761 9.53 -4.7006672e-07 -8.2913550e-07 +4762 9.532 -4.6841137e-07 -8.2621570e-07 +4763 9.534 -4.6676185e-07 -8.2330619e-07 +4764 9.536 -4.6511814e-07 -8.2040692e-07 +4765 9.538 -4.6348021e-07 -8.1751786e-07 +4766 9.54 -4.6184806e-07 -8.1463898e-07 +4767 9.542 -4.6022165e-07 -8.1177023e-07 +4768 9.544 -4.5860097e-07 -8.0891158e-07 +4769 9.546 -4.5698600e-07 -8.0606301e-07 +4770 9.548 -4.5537671e-07 -8.0322446e-07 +4771 9.55 -4.5377309e-07 -8.0039591e-07 +4772 9.552 -4.5217512e-07 -7.9757732e-07 +4773 9.554 -4.5058278e-07 -7.9476865e-07 +4774 9.556 -4.4899604e-07 -7.9196988e-07 +4775 9.558 -4.4741489e-07 -7.8918096e-07 +4776 9.56 -4.4583931e-07 -7.8640186e-07 +4777 9.562 -4.4426928e-07 -7.8363255e-07 +4778 9.564 -4.4270477e-07 -7.8087299e-07 +4779 9.566 -4.4114578e-07 -7.7812315e-07 +4780 9.568 -4.3959228e-07 -7.7538299e-07 +4781 9.57 -4.3804424e-07 -7.7265248e-07 +4782 9.572 -4.3650166e-07 -7.6993159e-07 +4783 9.574 -4.3496451e-07 -7.6722028e-07 +4784 9.576 -4.3343277e-07 -7.6451851e-07 +4785 9.578 -4.3190643e-07 -7.6182626e-07 +4786 9.58 -4.3038546e-07 -7.5914349e-07 +4787 9.582 -4.2886985e-07 -7.5647017e-07 +4788 9.584 -4.2735957e-07 -7.5380626e-07 +4789 9.586 -4.2585462e-07 -7.5115173e-07 +4790 9.588 -4.2435496e-07 -7.4850656e-07 +4791 9.59 -4.2286058e-07 -7.4587069e-07 +4792 9.592 -4.2137147e-07 -7.4324411e-07 +4793 9.594 -4.1988760e-07 -7.4062678e-07 +4794 9.596 -4.1840896e-07 -7.3801866e-07 +4795 9.598 -4.1693552e-07 -7.3541973e-07 +4796 9.6 -4.1546727e-07 -7.3282995e-07 +4797 9.602 -4.1400420e-07 -7.3024929e-07 +4798 9.604 -4.1254627e-07 -7.2767772e-07 +4799 9.606 -4.1109348e-07 -7.2511520e-07 +4800 9.608 -4.0964580e-07 -7.2256171e-07 +4801 9.61 -4.0820323e-07 -7.2001721e-07 +4802 9.612 -4.0676573e-07 -7.1748166e-07 +4803 9.614 -4.0533329e-07 -7.1495505e-07 +4804 9.616 -4.0390590e-07 -7.1243734e-07 +4805 9.618 -4.0248354e-07 -7.0992849e-07 +4806 9.62 -4.0106618e-07 -7.0742848e-07 +4807 9.622 -3.9965382e-07 -7.0493727e-07 +4808 9.624 -3.9824643e-07 -7.0245483e-07 +4809 9.626 -3.9684399e-07 -6.9998114e-07 +4810 9.628 -3.9544650e-07 -6.9751615e-07 +4811 9.63 -3.9405392e-07 -6.9505985e-07 +4812 9.632 -3.9266625e-07 -6.9261219e-07 +4813 9.634 -3.9128347e-07 -6.9017316e-07 +4814 9.636 -3.8990555e-07 -6.8774271e-07 +4815 9.638 -3.8853249e-07 -6.8532083e-07 +4816 9.64 -3.8716426e-07 -6.8290747e-07 +4817 9.642 -3.8580086e-07 -6.8050261e-07 +4818 9.644 -3.8444225e-07 -6.7810622e-07 +4819 9.646 -3.8308843e-07 -6.7571827e-07 +4820 9.648 -3.8173937e-07 -6.7333872e-07 +4821 9.65 -3.8039506e-07 -6.7096756e-07 +4822 9.652 -3.7905549e-07 -6.6860475e-07 +4823 9.654 -3.7772064e-07 -6.6625025e-07 +4824 9.656 -3.7639049e-07 -6.6390405e-07 +4825 9.658 -3.7506502e-07 -6.6156611e-07 +4826 9.66 -3.7374422e-07 -6.5923640e-07 +4827 9.662 -3.7242807e-07 -6.5691490e-07 +4828 9.664 -3.7111655e-07 -6.5460157e-07 +4829 9.666 -3.6980966e-07 -6.5229639e-07 +4830 9.668 -3.6850736e-07 -6.4999933e-07 +4831 9.67 -3.6720965e-07 -6.4771035e-07 +4832 9.672 -3.6591651e-07 -6.4542944e-07 +4833 9.674 -3.6462793e-07 -6.4315656e-07 +4834 9.676 -3.6334388e-07 -6.4089168e-07 +4835 9.678 -3.6206436e-07 -6.3863478e-07 +4836 9.68 -3.6078934e-07 -6.3638582e-07 +4837 9.682 -3.5951881e-07 -6.3414479e-07 +4838 9.684 -3.5825275e-07 -6.3191164e-07 +4839 9.686 -3.5699116e-07 -6.2968637e-07 +4840 9.688 -3.5573400e-07 -6.2746892e-07 +4841 9.69 -3.5448128e-07 -6.2525929e-07 +4842 9.692 -3.5323296e-07 -6.2305743e-07 +4843 9.694 -3.5198904e-07 -6.2086333e-07 +4844 9.696 -3.5074950e-07 -6.1867696e-07 +4845 9.698 -3.4951433e-07 -6.1649829e-07 +4846 9.7 -3.4828350e-07 -6.1432729e-07 +4847 9.702 -3.4705701e-07 -6.1216393e-07 +4848 9.704 -3.4583484e-07 -6.1000819e-07 +4849 9.706 -3.4461698e-07 -6.0786004e-07 +4850 9.708 -3.4340340e-07 -6.0571946e-07 +4851 9.71 -3.4219409e-07 -6.0358642e-07 +4852 9.712 -3.4098905e-07 -6.0146088e-07 +4853 9.714 -3.3978825e-07 -5.9934284e-07 +4854 9.716 -3.3859167e-07 -5.9723225e-07 +4855 9.718 -3.3739931e-07 -5.9512909e-07 +4856 9.72 -3.3621115e-07 -5.9303334e-07 +4857 9.722 -3.3502717e-07 -5.9094497e-07 +4858 9.724 -3.3384737e-07 -5.8886395e-07 +4859 9.726 -3.3267171e-07 -5.8679026e-07 +4860 9.728 -3.3150020e-07 -5.8472388e-07 +4861 9.73 -3.3033281e-07 -5.8266477e-07 +4862 9.732 -3.2916954e-07 -5.8061291e-07 +4863 9.734 -3.2801036e-07 -5.7856828e-07 +4864 9.736 -3.2685526e-07 -5.7653085e-07 +4865 9.738 -3.2570423e-07 -5.7450059e-07 +4866 9.74 -3.2455725e-07 -5.7247748e-07 +4867 9.742 -3.2341431e-07 -5.7046150e-07 +4868 9.744 -3.2227540e-07 -5.6845262e-07 +4869 9.746 -3.2114050e-07 -5.6645081e-07 +4870 9.748 -3.2000959e-07 -5.6445604e-07 +4871 9.75 -3.1888267e-07 -5.6246831e-07 +4872 9.752 -3.1775971e-07 -5.6048757e-07 +4873 9.754 -3.1664071e-07 -5.5851381e-07 +4874 9.756 -3.1552565e-07 -5.5654700e-07 +4875 9.758 -3.1441452e-07 -5.5458711e-07 +4876 9.76 -3.1330730e-07 -5.5263413e-07 +4877 9.762 -3.1220398e-07 -5.5068803e-07 +4878 9.764 -3.1110454e-07 -5.4874877e-07 +4879 9.766 -3.1000898e-07 -5.4681635e-07 +4880 9.768 -3.0891727e-07 -5.4489073e-07 +4881 9.77 -3.0782941e-07 -5.4297189e-07 +4882 9.772 -3.0674538e-07 -5.4105981e-07 +4883 9.774 -3.0566517e-07 -5.3915447e-07 +4884 9.776 -3.0458876e-07 -5.3725583e-07 +4885 9.778 -3.0351614e-07 -5.3536388e-07 +4886 9.78 -3.0244730e-07 -5.3347859e-07 +4887 9.782 -3.0138222e-07 -5.3159994e-07 +4888 9.784 -3.0032090e-07 -5.2972791e-07 +4889 9.786 -2.9926331e-07 -5.2786246e-07 +4890 9.788 -2.9820944e-07 -5.2600359e-07 +4891 9.79 -2.9715929e-07 -5.2415127e-07 +4892 9.792 -2.9611283e-07 -5.2230546e-07 +4893 9.794 -2.9507006e-07 -5.2046616e-07 +4894 9.796 -2.9403096e-07 -5.1863333e-07 +4895 9.798 -2.9299552e-07 -5.1680696e-07 +4896 9.8 -2.9196373e-07 -5.1498702e-07 +4897 9.802 -2.9093557e-07 -5.1317349e-07 +4898 9.804 -2.8991103e-07 -5.1136634e-07 +4899 9.806 -2.8889010e-07 -5.0956556e-07 +4900 9.808 -2.8787277e-07 -5.0777112e-07 +4901 9.81 -2.8685901e-07 -5.0598300e-07 +4902 9.812 -2.8584883e-07 -5.0420117e-07 +4903 9.814 -2.8484220e-07 -5.0242562e-07 +4904 9.816 -2.8383912e-07 -5.0065632e-07 +4905 9.818 -2.8283957e-07 -4.9889326e-07 +4906 9.82 -2.8184355e-07 -4.9713640e-07 +4907 9.822 -2.8085103e-07 -4.9538573e-07 +4908 9.824 -2.7986200e-07 -4.9364122e-07 +4909 9.826 -2.7887646e-07 -4.9190286e-07 +4910 9.828 -2.7789438e-07 -4.9017062e-07 +4911 9.83 -2.7691577e-07 -4.8844448e-07 +4912 9.832 -2.7594060e-07 -4.8672441e-07 +4913 9.834 -2.7496887e-07 -4.8501041e-07 +4914 9.836 -2.7400056e-07 -4.8330244e-07 +4915 9.838 -2.7303565e-07 -4.8160048e-07 +4916 9.84 -2.7207415e-07 -4.7990452e-07 +4917 9.842 -2.7111603e-07 -4.7821453e-07 +4918 9.844 -2.7016129e-07 -4.7653049e-07 +4919 9.846 -2.6920991e-07 -4.7485238e-07 +4920 9.848 -2.6826187e-07 -4.7318019e-07 +4921 9.85 -2.6731718e-07 -4.7151388e-07 +4922 9.852 -2.6637582e-07 -4.6985343e-07 +4923 9.854 -2.6543776e-07 -4.6819884e-07 +4924 9.856 -2.6450302e-07 -4.6655007e-07 +4925 9.858 -2.6357156e-07 -4.6490711e-07 +4926 9.86 -2.6264338e-07 -4.6326993e-07 +4927 9.862 -2.6171848e-07 -4.6163852e-07 +4928 9.864 -2.6079683e-07 -4.6001286e-07 +4929 9.866 -2.5987842e-07 -4.5839291e-07 +4930 9.868 -2.5896325e-07 -4.5677868e-07 +4931 9.87 -2.5805130e-07 -4.5517013e-07 +4932 9.872 -2.5714257e-07 -4.5356724e-07 +4933 9.874 -2.5623703e-07 -4.5196999e-07 +4934 9.876 -2.5533468e-07 -4.5037838e-07 +4935 9.878 -2.5443551e-07 -4.4879236e-07 +4936 9.88 -2.5353951e-07 -4.4721193e-07 +4937 9.882 -2.5264666e-07 -4.4563707e-07 +4938 9.884 -2.5175696e-07 -4.4406775e-07 +4939 9.886 -2.5087039e-07 -4.4250396e-07 +4940 9.888 -2.4998694e-07 -4.4094568e-07 +4941 9.89 -2.4910660e-07 -4.3939288e-07 +4942 9.892 -2.4822936e-07 -4.3784555e-07 +4943 9.894 -2.4735521e-07 -4.3630368e-07 +4944 9.896 -2.4648414e-07 -4.3476723e-07 +4945 9.898 -2.4561614e-07 -4.3323619e-07 +4946 9.9 -2.4475120e-07 -4.3171054e-07 +4947 9.902 -2.4388930e-07 -4.3019026e-07 +4948 9.904 -2.4303043e-07 -4.2867534e-07 +4949 9.906 -2.4217459e-07 -4.2716576e-07 +4950 9.908 -2.4132176e-07 -4.2566149e-07 +4951 9.91 -2.4047194e-07 -4.2416251e-07 +4952 9.912 -2.3962511e-07 -4.2266882e-07 +4953 9.914 -2.3878126e-07 -4.2118038e-07 +4954 9.916 -2.3794039e-07 -4.1969719e-07 +4955 9.918 -2.3710247e-07 -4.1821922e-07 +4956 9.92 -2.3626751e-07 -4.1674645e-07 +4957 9.922 -2.3543548e-07 -4.1527887e-07 +4958 9.924 -2.3460639e-07 -4.1381646e-07 +4959 9.926 -2.3378021e-07 -4.1235920e-07 +4960 9.928 -2.3295695e-07 -4.1090707e-07 +4961 9.93 -2.3213658e-07 -4.0946006e-07 +4962 9.932 -2.3131910e-07 -4.0801814e-07 +4963 9.934 -2.3050450e-07 -4.0658129e-07 +4964 9.936 -2.2969277e-07 -4.0514951e-07 +4965 9.938 -2.2888390e-07 -4.0372277e-07 +4966 9.94 -2.2807788e-07 -4.0230106e-07 +4967 9.942 -2.2727470e-07 -4.0088435e-07 +4968 9.944 -2.2647434e-07 -3.9947262e-07 +4969 9.946 -2.2567680e-07 -3.9806588e-07 +4970 9.948 -2.2488207e-07 -3.9666408e-07 +4971 9.95 -2.2409014e-07 -3.9526722e-07 +4972 9.952 -2.2330100e-07 -3.9387528e-07 +4973 9.954 -2.2251464e-07 -3.9248824e-07 +4974 9.956 -2.2173104e-07 -3.9110609e-07 +4975 9.958 -2.2095021e-07 -3.8972880e-07 +4976 9.96 -2.2017213e-07 -3.8835636e-07 +4977 9.962 -2.1939678e-07 -3.8698876e-07 +4978 9.964 -2.1862417e-07 -3.8562597e-07 +4979 9.966 -2.1785427e-07 -3.8426798e-07 +4980 9.968 -2.1708709e-07 -3.8291478e-07 +4981 9.97 -2.1632261e-07 -3.8156634e-07 +4982 9.972 -2.1556082e-07 -3.8022264e-07 +4983 9.974 -2.1480172e-07 -3.7888368e-07 +4984 9.976 -2.1404529e-07 -3.7754944e-07 +4985 9.978 -2.1329152e-07 -3.7621989e-07 +4986 9.98 -2.1254040e-07 -3.7489503e-07 +4987 9.982 -2.1179193e-07 -3.7357483e-07 +4988 9.984 -2.1104610e-07 -3.7225928e-07 +4989 9.986 -2.1030289e-07 -3.7094836e-07 +4990 9.988 -2.0956230e-07 -3.6964206e-07 +4991 9.99 -2.0882432e-07 -3.6834036e-07 +4992 9.992 -2.0808894e-07 -3.6704324e-07 +4993 9.994 -2.0735615e-07 -3.6575069e-07 +4994 9.996 -2.0662593e-07 -3.6446269e-07 +4995 9.998 -2.0589829e-07 -3.6317923e-07 + +Pair_O-O +N 4995 + +1 0.01 2.2000000e+25 2.6400000e+28 +2 0.012 2.4674464e+24 2.4674464e+27 +3 0.014 3.8804872e+23 3.3261319e+26 +4 0.016 7.8159701e+22 5.8619776e+25 +5 0.018 1.9017465e+22 1.2678310e+25 +6 0.02 5.3710938e+21 3.2226562e+24 +7 0.022 1.7113960e+21 9.3348872e+23 +8 0.024 6.0240391e+20 3.0120195e+23 +9 0.026 2.3053799e+20 1.0640215e+23 +10 0.028 9.4738456e+19 4.0602196e+22 +11 0.03 4.1396881e+19 1.6558753e+22 +12 0.032 1.9081958e+19 7.1557343e+21 +13 0.034 9.2188272e+18 3.2537037e+21 +14 0.036 4.6429357e+18 1.5476452e+21 +15 0.038 2.4267192e+18 7.6633237e+20 +16 0.04 1.3113022e+18 3.9339066e+20 +17 0.042 7.3018212e+17 2.0862346e+20 +18 0.044 4.1782129e+17 1.1395126e+20 +19 0.046 2.4509175e+17 6.3936979e+19 +20 0.048 1.4707127e+17 3.6767817e+19 +21 0.05 9.0112000e+16 2.1626880e+19 +22 0.052 5.6283689e+16 1.2988544e+19 +23 0.054 3.5784715e+16 7.9521589e+18 +24 0.056 2.3129506e+16 4.9563227e+18 +25 0.058 1.5180524e+16 3.1407980e+18 +26 0.06 1.0106660e+16 2.0213321e+18 +27 0.062 6.8190269e+15 1.3198117e+18 +28 0.064 4.6586812e+15 8.7350273e+17 +29 0.066 3.2202935e+15 5.8550791e+17 +30 0.068 2.2506902e+15 3.9718063e+17 +31 0.07 1.5894475e+15 2.7247672e+17 +32 0.072 1.1335292e+15 1.8892154e+17 +33 0.074 8.1590960e+14 1.3230967e+17 +34 0.076 5.9246074e+14 9.3546432e+16 +35 0.078 4.3379790e+14 6.6738139e+16 +36 0.08 3.2014214e+14 4.8021320e+16 +37 0.082 2.3804357e+14 3.4835644e+16 +38 0.084 1.7826712e+14 2.5466731e+16 +39 0.086 1.3441300e+14 1.8755302e+16 +40 0.088 1.0200715e+14 1.3910066e+16 +41 0.09 7.7895536e+13 1.0386071e+16 +42 0.092 5.9836854e+13 7.8048071e+15 +43 0.094 4.6226226e+13 5.9012203e+15 +44 0.096 3.5906071e+13 4.4882589e+15 +45 0.098 2.8035595e+13 3.4329300e+15 +46 0.1 2.2000000e+13 2.6400000e+15 +47 0.102 1.7346850e+13 2.0408059e+15 +48 0.104 1.3741135e+13 1.5855156e+15 +49 0.106 1.0933326e+13 1.2377350e+15 +50 0.108 8.7365027e+12 9.7072252e+14 +51 0.11 7.0098780e+12 7.6471396e+14 +52 0.112 5.6468520e+12 6.0501986e+14 +53 0.114 4.5663003e+12 4.8066318e+14 +54 0.116 3.7061826e+12 3.8339820e+14 +55 0.118 3.0188296e+12 3.0699962e+14 +56 0.12 2.4674464e+12 2.4674464e+14 +57 0.122 2.0235070e+12 1.9903348e+14 +58 0.124 1.6648015e+12 1.6110982e+14 +59 0.126 1.3739665e+12 1.3085395e+14 +60 0.128 1.1373733e+12 1.0662875e+14 +61 0.13 9.4428361e+11 8.7164641e+13 +62 0.132 7.8620447e+11 7.1473133e+13 +63 0.134 6.5639475e+11 5.8781620e+13 +64 0.136 5.4948492e+11 4.8483964e+13 +65 0.138 4.6118338e+11 4.0102902e+13 +66 0.14 3.8804872e+11 3.3261319e+13 +67 0.142 3.2731247e+11 2.7660209e+13 +68 0.144 2.7674054e+11 2.3061711e+13 +69 0.146 2.3452460e+11 1.9275995e+13 +70 0.148 1.9919668e+11 1.6151082e+13 +71 0.15 1.6956163e+11 1.3564930e+13 +72 0.152 1.4464373e+11 1.1419242e+13 +73 0.154 1.2364428e+11 9.6346192e+12 +74 0.156 1.0590769e+11 8.1467455e+12 +75 0.158 9.0894507e+10 6.9033803e+12 +76 0.16 7.8159702e+10 5.8619776e+12 +77 0.162 6.7335255e+10 4.9877966e+12 +78 0.164 5.8116106e+10 4.2523980e+12 +79 0.166 5.0248792e+10 3.6324428e+12 +80 0.168 4.3522247e+10 3.1087319e+12 +81 0.17 3.7760317e+10 2.6654341e+12 +82 0.172 3.2815674e+10 2.2894656e+12 +83 0.174 2.8564834e+10 1.9699885e+12 +84 0.176 2.4904090e+10 1.6980061e+12 +85 0.178 2.1746164e+10 1.4660335e+12 +86 0.18 1.9017465e+10 1.2678310e+12 +87 0.182 1.6655821e+10 1.0981860e+12 +88 0.184 1.4608608e+10 9.5273524e+11 +89 0.186 1.2831203e+10 8.2781950e+11 +90 0.188 1.1285700e+10 7.2036381e+11 +91 0.19 9.9398423e+09 6.2777948e+11 +92 0.192 8.7661311e+09 5.4788316e+11 +93 0.194 7.7410871e+09 4.7883010e+11 +94 0.196 6.8446281e+09 4.1905883e+11 +95 0.198 6.0595509e+09 3.6724548e+11 +96 0.2 5.3710943e+09 3.2226563e+11 +97 0.202 4.7665735e+09 2.8316275e+11 +98 0.204 4.2350713e+09 2.4912181e+11 +99 0.206 3.7671776e+09 2.1944721e+11 +100 0.208 3.3547698e+09 1.9354438e+11 +101 0.21 2.9908265e+09 1.7090434e+11 +102 0.212 2.6692695e+09 1.5109070e+11 +103 0.214 2.3848304e+09 1.3372878e+11 +104 0.216 2.1329357e+09 1.1849640e+11 +105 0.218 1.9096108e+09 1.0511617e+11 +106 0.22 1.7113965e+09 9.3348874e+10 +107 0.222 1.5352783e+09 8.2987994e+10 +108 0.224 1.3786265e+09 7.3854965e+10 +109 0.226 1.2391434e+09 6.5795202e+10 +110 0.228 1.1148199e+09 5.8674706e+10 +111 0.23 1.0038963e+09 5.2377175e+10 +112 0.232 9.0483021e+08 4.6801539e+10 +113 0.234 8.1626776e+08 4.1859862e+10 +114 0.236 7.3701940e+08 3.7475540e+10 +115 0.238 6.6603876e+08 3.3581764e+10 +116 0.24 6.0240437e+08 3.0120197e+10 +117 0.242 5.4530397e+08 2.7039845e+10 +118 0.244 4.9402072e+08 2.4296080e+10 +119 0.246 4.4792143e+08 2.1849805e+10 +120 0.248 4.0644613e+08 1.9666728e+10 +121 0.25 3.6909920e+08 1.7716741e+10 +122 0.252 3.3544149e+08 1.5973384e+10 +123 0.254 3.0508350e+08 1.4413374e+10 +124 0.256 2.7767948e+08 1.3016206e+10 +125 0.258 2.5292221e+08 1.1763804e+10 +126 0.26 2.3053843e+08 1.0640216e+10 +127 0.262 2.1028490e+08 9.6313507e+09 +128 0.264 1.9194488e+08 8.7247489e+09 +129 0.266 1.7532511e+08 7.9093850e+09 +130 0.268 1.6025305e+08 7.1754919e+09 +131 0.27 1.4657462e+08 6.5144098e+09 +132 0.272 1.3415202e+08 5.9184538e+09 +133 0.274 1.2286195e+08 5.3807982e+09 +134 0.276 1.1259402e+08 4.8953750e+09 +135 0.278 1.0324925e+08 4.4567851e+09 +136 0.28 9.4738872e+07 4.0602207e+09 +137 0.282 8.6983213e+07 3.7013969e+09 +138 0.284 7.9910681e+07 3.3764914e+09 +139 0.286 7.3456917e+07 3.0820924e+09 +140 0.288 6.7564013e+07 2.8151514e+09 +141 0.29 6.2179830e+07 2.5729429e+09 +142 0.292 5.7257385e+07 2.3530278e+09 +143 0.294 5.2754317e+07 2.1532222e+09 +144 0.296 4.8632399e+07 1.9715688e+09 +145 0.298 4.4857115e+07 1.8063120e+09 +146 0.3 4.1397274e+07 1.6558763e+09 +147 0.302 3.8224675e+07 1.5188468e+09 +148 0.304 3.5313800e+07 1.3939515e+09 +149 0.306 3.2641545e+07 1.2800465e+09 +150 0.308 3.0186976e+07 1.1761021e+09 +151 0.31 2.7931116e+07 1.0811908e+09 +152 0.312 2.5856750e+07 9.9447683e+08 +153 0.314 2.3948249e+07 9.1520630e+08 +154 0.316 2.2191417e+07 8.4269883e+08 +155 0.318 2.0573355e+07 7.7633998e+08 +156 0.32 1.9082330e+07 7.1557447e+08 +157 0.322 1.7707664e+07 6.5990022e+08 +158 0.324 1.6439639e+07 6.0886292e+08 +159 0.326 1.5269397e+07 5.6205124e+08 +160 0.328 1.4188866e+07 5.1909256e+08 +161 0.33 1.3190684e+07 4.7964909e+08 +162 0.332 1.2268131e+07 4.4341443e+08 +163 0.334 1.1415073e+07 4.1011052e+08 +164 0.336 1.0625904e+07 3.7948486e+08 +165 0.338 9.8955010e+06 3.5130800e+08 +166 0.34 9.2191787e+06 3.2537135e+08 +167 0.342 8.5926490e+06 3.0148517e+08 +168 0.344 8.0119865e+06 2.7947675e+08 +169 0.346 7.4735953e+06 2.5918882e+08 +170 0.348 6.9741801e+06 2.4047808e+08 +171 0.35 6.5107189e+06 2.2321388e+08 +172 0.352 6.0804398e+06 2.0727708e+08 +173 0.354 5.6807984e+06 1.9255892e+08 +174 0.356 5.3094581e+06 1.7896011e+08 +175 0.358 4.9642724e+06 1.6638992e+08 +176 0.36 4.6432681e+06 1.5476545e+08 +177 0.362 4.3446308e+06 1.4401088e+08 +178 0.364 4.0666910e+06 1.3405682e+08 +179 0.366 3.8079123e+06 1.2483978e+08 +180 0.368 3.5668795e+06 1.1630160e+08 +181 0.37 3.3422890e+06 1.0838898e+08 +182 0.372 3.1329392e+06 1.0105308e+08 +183 0.374 2.9377221e+06 9.4249099e+07 +184 0.376 2.7556156e+06 8.7935923e+07 +185 0.378 2.5856764e+06 8.2075814e+07 +186 0.38 2.4270335e+06 7.6634114e+07 +187 0.382 2.2788823e+06 7.1578980e+07 +188 0.384 2.1404794e+06 6.6881136e+07 +189 0.386 2.0111376e+06 6.2513665e+07 +190 0.388 1.8902211e+06 5.8451797e+07 +191 0.39 1.7771419e+06 5.4672737e+07 +192 0.392 1.6713556e+06 5.1155491e+07 +193 0.394 1.5723583e+06 4.7880723e+07 +194 0.396 1.4796830e+06 4.4830609e+07 +195 0.398 1.3928971e+06 4.1988719e+07 +196 0.4 1.3115994e+06 3.9339895e+07 +197 0.402 1.2354181e+06 3.6870155e+07 +198 0.404 1.1640081e+06 3.4566586e+07 +199 0.406 1.0970490e+06 3.2417269e+07 +200 0.408 1.0342435e+06 3.0411189e+07 +201 0.41 9.7531553e+05 2.8538167e+07 +202 0.412 9.2000843e+05 2.6788792e+07 +203 0.414 8.6808375e+05 2.5154360e+07 +204 0.416 8.1931975e+05 2.3626817e+07 +205 0.418 7.7351020e+05 2.2198709e+07 +206 0.42 7.3046324e+05 2.0863132e+07 +207 0.422 6.9000026e+05 1.9613692e+07 +208 0.424 6.5195500e+05 1.8444465e+07 +209 0.426 6.1617259e+05 1.7349960e+07 +210 0.428 5.8250875e+05 1.6325082e+07 +211 0.43 5.5082901e+05 1.5365107e+07 +212 0.432 5.2100799e+05 1.4465652e+07 +213 0.434 4.9292877e+05 1.3622648e+07 +214 0.436 4.6648229e+05 1.2832314e+07 +215 0.438 4.4156675e+05 1.2091142e+07 +216 0.44 4.1808713e+05 1.1395869e+07 +217 0.442 3.9595470e+05 1.0743463e+07 +218 0.444 3.7508658e+05 1.0131105e+07 +219 0.446 3.5540533e+05 9.5561721e+06 +220 0.448 3.3683857e+05 9.0162249e+06 +221 0.45 3.1931863e+05 8.5089921e+06 +222 0.452 3.0278221e+05 8.0323591e+06 +223 0.454 2.8717011e+05 7.5843567e+06 +224 0.456 2.7242692e+05 7.1631501e+06 +225 0.458 2.5850078e+05 6.7670293e+06 +226 0.46 2.4534314e+05 6.3944006e+06 +227 0.462 2.3290851e+05 6.0437773e+06 +228 0.464 2.2115429e+05 5.7137732e+06 +229 0.466 2.1004054e+05 5.4030944e+06 +230 0.468 1.9952983e+05 5.1105335e+06 +231 0.47 1.8958708e+05 4.8349631e+06 +232 0.472 1.8017936e+05 4.5753303e+06 +233 0.474 1.7127579e+05 4.3306518e+06 +234 0.476 1.6284740e+05 4.1000083e+06 +235 0.478 1.5486697e+05 3.8825409e+06 +236 0.48 1.4730899e+05 3.6774463e+06 +237 0.482 1.4014944e+05 3.4839734e+06 +238 0.484 1.3336581e+05 3.3014194e+06 +239 0.486 1.2693692e+05 3.1291268e+06 +240 0.488 1.2084288e+05 2.9664800e+06 +241 0.49 1.1506496e+05 2.8129027e+06 +242 0.492 1.0958558e+05 2.6678552e+06 +243 0.494 1.0438819e+05 2.5308320e+06 +244 0.496 9.9457219e+04 2.4013592e+06 +245 0.498 9.4778016e+04 2.2789929e+06 +246 0.5 9.0336788e+04 2.1633167e+06 +247 0.502 8.6120550e+04 2.0539404e+06 +248 0.504 8.2117071e+04 1.9504976e+06 +249 0.506 7.8314833e+04 1.8526449e+06 +250 0.508 7.4702980e+04 1.7600598e+06 +251 0.51 7.1271284e+04 1.6724397e+06 +252 0.512 6.8010102e+04 1.5895003e+06 +253 0.514 6.4910341e+04 1.5109749e+06 +254 0.516 6.1963427e+04 1.4366125e+06 +255 0.518 5.9161272e+04 1.3661778e+06 +256 0.52 5.6496245e+04 1.2994491e+06 +257 0.522 5.3961144e+04 1.2362185e+06 +258 0.524 5.1549170e+04 1.1762900e+06 +259 0.526 4.9253906e+04 1.1194797e+06 +260 0.528 4.7069288e+04 1.0656144e+06 +261 0.53 4.4989594e+04 1.0145310e+06 +262 0.532 4.3009412e+04 9.6607621e+05 +263 0.534 4.1123633e+04 9.2010564e+05 +264 0.536 3.9327424e+04 8.7648329e+05 +265 0.538 3.7616220e+04 8.3508113e+05 +266 0.54 3.5985700e+04 7.9577850e+05 +267 0.542 3.4431782e+04 7.5846176e+05 +268 0.544 3.2950601e+04 7.2302376e+05 +269 0.546 3.1538502e+04 6.8936352e+05 +270 0.548 3.0192025e+04 6.5738582e+05 +271 0.55 2.8907897e+04 6.2700087e+05 +272 0.552 2.7683017e+04 5.9812397e+05 +273 0.554 2.6514449e+04 5.7067521e+05 +274 0.556 2.5399414e+04 5.4457916e+05 +275 0.558 2.4335278e+04 5.1976464e+05 +276 0.56 2.3319546e+04 4.9616447e+05 +277 0.562 2.2349853e+04 4.7371518e+05 +278 0.564 2.1423958e+04 4.5235685e+05 +279 0.566 2.0539736e+04 4.3203286e+05 +280 0.568 1.9695173e+04 4.1268972e+05 +281 0.57 1.8888357e+04 3.9427689e+05 +282 0.572 1.8117477e+04 3.7674659e+05 +283 0.574 1.7380813e+04 3.6005364e+05 +284 0.576 1.6676733e+04 3.4415533e+05 +285 0.578 1.6003689e+04 3.2901126e+05 +286 0.58 1.5360210e+04 3.1458322e+05 +287 0.582 1.4744902e+04 3.0083506e+05 +288 0.584 1.4156440e+04 2.8773256e+05 +289 0.586 1.3593563e+04 2.7524333e+05 +290 0.588 1.3055078e+04 2.6333672e+05 +291 0.59 1.2539847e+04 2.5198370e+05 +292 0.592 1.2046792e+04 2.4115678e+05 +293 0.594 1.1574887e+04 2.3082992e+05 +294 0.596 1.1123156e+04 2.2097845e+05 +295 0.598 1.0690672e+04 2.1157900e+05 +296 0.6 1.0276553e+04 2.0260940e+05 +297 0.602 9.8799617e+03 1.9404867e+05 +298 0.604 9.5000994e+03 1.8587690e+05 +299 0.606 9.1362074e+03 1.7807521e+05 +300 0.608 8.7875638e+03 1.7062569e+05 +301 0.61 8.4534812e+03 1.6351136e+05 +302 0.612 8.1333056e+03 1.5671611e+05 +303 0.614 7.8264143e+03 1.5022466e+05 +304 0.616 7.5322142e+03 1.4402249e+05 +305 0.618 7.2501407e+03 1.3809583e+05 +306 0.62 6.9796559e+03 1.3243160e+05 +307 0.622 6.7202476e+03 1.2701739e+05 +308 0.624 6.4714275e+03 1.2184142e+05 +309 0.626 6.2327306e+03 1.1689247e+05 +310 0.628 6.0037134e+03 1.1215991e+05 +311 0.63 5.7839534e+03 1.0763363e+05 +312 0.632 5.5730478e+03 1.0330403e+05 +313 0.634 5.3706123e+03 9.9161967e+04 +314 0.636 5.1762807e+03 9.5198764e+04 +315 0.638 4.9897035e+03 9.1406169e+04 +316 0.64 4.8105475e+03 8.7776334e+04 +317 0.642 4.6384946e+03 8.4301793e+04 +318 0.644 4.4732415e+03 8.0975447e+04 +319 0.646 4.3144986e+03 7.7790540e+04 +320 0.648 4.1619894e+03 7.4740645e+04 +321 0.65 4.0154501e+03 7.1819646e+04 +322 0.652 3.8746287e+03 6.9021719e+04 +323 0.654 3.7392848e+03 6.6341323e+04 +324 0.656 3.6091886e+03 6.3773180e+04 +325 0.658 3.4841206e+03 6.1312265e+04 +326 0.66 3.3638713e+03 5.8953793e+04 +327 0.662 3.2482402e+03 5.6693205e+04 +328 0.664 3.1370361e+03 5.4526157e+04 +329 0.666 3.0300760e+03 5.2448513e+04 +330 0.668 2.9271851e+03 5.0456329e+04 +331 0.67 2.8281962e+03 4.8545846e+04 +332 0.672 2.7329496e+03 4.6713483e+04 +333 0.674 2.6412925e+03 4.4955823e+04 +334 0.676 2.5530787e+03 4.3269611e+04 +335 0.678 2.4681685e+03 4.1651740e+04 +336 0.68 2.3864282e+03 4.0099250e+04 +337 0.682 2.3077298e+03 3.8609314e+04 +338 0.684 2.2319510e+03 3.7179236e+04 +339 0.686 2.1589747e+03 3.5806446e+04 +340 0.688 2.0886887e+03 3.4488489e+04 +341 0.69 2.0209857e+03 3.3223021e+04 +342 0.692 1.9557631e+03 3.2007808e+04 +343 0.694 1.8929224e+03 3.0840714e+04 +344 0.696 1.8323695e+03 2.9719701e+04 +345 0.698 1.7740142e+03 2.8642822e+04 +346 0.7 1.7177700e+03 2.7608219e+04 +347 0.702 1.6635543e+03 2.6614116e+04 +348 0.704 1.6112877e+03 2.5658817e+04 +349 0.706 1.5608942e+03 2.4740701e+04 +350 0.708 1.5123011e+03 2.3858219e+04 +351 0.71 1.4654386e+03 2.3009891e+04 +352 0.712 1.4202398e+03 2.2194303e+04 +353 0.714 1.3766405e+03 2.1410102e+04 +354 0.716 1.3345793e+03 2.0655995e+04 +355 0.718 1.2939973e+03 1.9930746e+04 +356 0.72 1.2548378e+03 1.9233174e+04 +357 0.722 1.2170469e+03 1.8562146e+04 +358 0.724 1.1805723e+03 1.7916583e+04 +359 0.726 1.1453642e+03 1.7295448e+04 +360 0.728 1.1113749e+03 1.6697753e+04 +361 0.73 1.0785582e+03 1.6122550e+04 +362 0.732 1.0468703e+03 1.5568932e+04 +363 0.734 1.0162687e+03 1.5036033e+04 +364 0.736 9.8671289e+02 1.4523021e+04 +365 0.738 9.5816389e+02 1.4029101e+04 +366 0.74 9.3058427e+02 1.3553512e+04 +367 0.742 9.0393811e+02 1.3095526e+04 +368 0.744 8.7819090e+02 1.2654444e+04 +369 0.746 8.5330951e+02 1.2229598e+04 +370 0.748 8.2926211e+02 1.1820346e+04 +371 0.75 8.0601813e+02 1.1426077e+04 +372 0.752 7.8354821e+02 1.1046200e+04 +373 0.754 7.6182411e+02 1.0680154e+04 +374 0.756 7.4081873e+02 1.0327399e+04 +375 0.758 7.2050600e+02 9.9874166e+03 +376 0.76 7.0086088e+02 9.6597112e+03 +377 0.762 6.8185929e+02 9.3438073e+03 +378 0.764 6.6347809e+02 9.0392491e+03 +379 0.766 6.4569502e+02 8.7455994e+03 +380 0.768 6.2848870e+02 8.4624390e+03 +381 0.77 6.1183854e+02 8.1893659e+03 +382 0.772 5.9572477e+02 7.9259944e+03 +383 0.774 5.8012834e+02 7.6719545e+03 +384 0.776 5.6503096e+02 7.4268914e+03 +385 0.778 5.5041502e+02 7.1904644e+03 +386 0.78 5.3626357e+02 6.9623467e+03 +387 0.782 5.2256030e+02 6.7422248e+03 +388 0.784 5.0928954e+02 6.5297976e+03 +389 0.786 4.9643618e+02 6.3247762e+03 +390 0.788 4.8398568e+02 6.1268830e+03 +391 0.79 4.7192407e+02 5.9358519e+03 +392 0.792 4.6023787e+02 5.7514270e+03 +393 0.794 4.4891412e+02 5.5733628e+03 +394 0.796 4.3794034e+02 5.4014234e+03 +395 0.798 4.2730450e+02 5.2353822e+03 +396 0.8 4.1699502e+02 5.0750216e+03 +397 0.802 4.0700076e+02 4.9201326e+03 +398 0.804 3.9731098e+02 4.7705142e+03 +399 0.806 3.8791532e+02 4.6259735e+03 +400 0.808 3.7880382e+02 4.4863250e+03 +401 0.81 3.6996688e+02 4.3513903e+03 +402 0.812 3.6139523e+02 4.2209982e+03 +403 0.814 3.5307997e+02 4.0949839e+03 +404 0.816 3.4501248e+02 3.9731891e+03 +405 0.818 3.3718450e+02 3.8554615e+03 +406 0.82 3.2958802e+02 3.7416547e+03 +407 0.822 3.2221536e+02 3.6316280e+03 +408 0.824 3.1505908e+02 3.5252459e+03 +409 0.826 3.0811203e+02 3.4223782e+03 +410 0.828 3.0136731e+02 3.3228997e+03 +411 0.83 2.9481826e+02 3.2266899e+03 +412 0.832 2.8845845e+02 3.1336328e+03 +413 0.834 2.8228170e+02 3.0436169e+03 +414 0.836 2.7628203e+02 2.9565348e+03 +415 0.838 2.7045367e+02 2.8722831e+03 +416 0.84 2.6479107e+02 2.7907626e+03 +417 0.842 2.5928886e+02 2.7118774e+03 +418 0.844 2.5394187e+02 2.6355355e+03 +419 0.846 2.4874509e+02 2.5616481e+03 +420 0.848 2.4369370e+02 2.4901299e+03 +421 0.85 2.3878304e+02 2.4208986e+03 +422 0.852 2.3400863e+02 2.3538750e+03 +423 0.854 2.2936612e+02 2.2889829e+03 +424 0.856 2.2485133e+02 2.2261489e+03 +425 0.858 2.2046020e+02 2.1653021e+03 +426 0.86 2.1618884e+02 2.1063744e+03 +427 0.862 2.1203347e+02 2.0493002e+03 +428 0.864 2.0799044e+02 1.9940162e+03 +429 0.866 2.0405625e+02 1.9404614e+03 +430 0.868 2.0022748e+02 1.8885771e+03 +431 0.87 1.9650087e+02 1.8383067e+03 +432 0.872 1.9287322e+02 1.7895956e+03 +433 0.874 1.8934148e+02 1.7423912e+03 +434 0.876 1.8590268e+02 1.6966429e+03 +435 0.878 1.8255397e+02 1.6523016e+03 +436 0.88 1.7929257e+02 1.6093204e+03 +437 0.882 1.7611581e+02 1.5676537e+03 +438 0.884 1.7302111e+02 1.5272578e+03 +439 0.886 1.7000596e+02 1.4880903e+03 +440 0.888 1.6706795e+02 1.4501106e+03 +441 0.89 1.6420475e+02 1.4132792e+03 +442 0.892 1.6141410e+02 1.3775583e+03 +443 0.894 1.5869380e+02 1.3429114e+03 +444 0.896 1.5604176e+02 1.3093030e+03 +445 0.898 1.5345592e+02 1.2766991e+03 +446 0.9 1.5093432e+02 1.2450669e+03 +447 0.902 1.4847503e+02 1.2143747e+03 +448 0.904 1.4607621e+02 1.1845918e+03 +449 0.906 1.4373607e+02 1.1556887e+03 +450 0.908 1.4145289e+02 1.1276369e+03 +451 0.91 1.3922498e+02 1.1004089e+03 +452 0.912 1.3705072e+02 1.0739781e+03 +453 0.914 1.3492855e+02 1.0483188e+03 +454 0.916 1.3285695e+02 1.0234062e+03 +455 0.918 1.3083444e+02 9.9921647e+02 +456 0.92 1.2885962e+02 9.7572648e+02 +457 0.922 1.2693109e+02 9.5291390e+02 +458 0.924 1.2504752e+02 9.3075720e+02 +459 0.926 1.2320763e+02 9.0923554e+02 +460 0.928 1.2141017e+02 8.8832884e+02 +461 0.93 1.1965392e+02 8.6801765e+02 +462 0.932 1.1793772e+02 8.4828321e+02 +463 0.934 1.1626042e+02 8.2910739e+02 +464 0.936 1.1462093e+02 8.1047266e+02 +465 0.938 1.1301818e+02 7.9236209e+02 +466 0.94 1.1145114e+02 7.7475931e+02 +467 0.942 1.0991881e+02 7.5764851e+02 +468 0.944 1.0842023e+02 7.4101440e+02 +469 0.946 1.0695445e+02 7.2484218e+02 +470 0.948 1.0552056e+02 7.0911759e+02 +471 0.95 1.0411769e+02 6.9382680e+02 +472 0.952 1.0274497e+02 6.7895646e+02 +473 0.954 1.0140159e+02 6.6449366e+02 +474 0.956 1.0008673e+02 6.5042590e+02 +475 0.958 9.8799630e+01 6.3674111e+02 +476 0.96 9.7539522e+01 6.2342761e+02 +477 0.962 9.6305680e+01 6.1047410e+02 +478 0.964 9.5097393e+01 5.9786965e+02 +479 0.966 9.3913975e+01 5.8560370e+02 +480 0.968 9.2754760e+01 5.7366601e+02 +481 0.97 9.1619099e+01 5.6204670e+02 +482 0.972 9.0506367e+01 5.5073618e+02 +483 0.974 8.9415955e+01 5.3972519e+02 +484 0.976 8.8347272e+01 5.2900478e+02 +485 0.978 8.7299748e+01 5.1856626e+02 +486 0.98 8.6272825e+01 5.0840124e+02 +487 0.982 8.5265966e+01 4.9850159e+02 +488 0.984 8.4278647e+01 4.8885944e+02 +489 0.986 8.3310361e+01 4.7946719e+02 +490 0.988 8.2360617e+01 4.7031745e+02 +491 0.99 8.1428935e+01 4.6140309e+02 +492 0.992 8.0514852e+01 4.5271720e+02 +493 0.994 7.9617918e+01 4.4425309e+02 +494 0.996 7.8737696e+01 4.3600428e+02 +495 0.998 7.7873762e+01 4.2796449e+02 +496 1.0 7.7025703e+01 4.2012765e+02 +497 1.002 7.6193120e+01 4.1248787e+02 +498 1.004 7.5375624e+01 4.0503944e+02 +499 1.006 7.4572838e+01 3.9777685e+02 +500 1.008 7.3784396e+01 3.9069474e+02 +501 1.01 7.3009942e+01 3.8378793e+02 +502 1.012 7.2249131e+01 3.7705139e+02 +503 1.014 7.1501626e+01 3.7048027e+02 +504 1.016 7.0767103e+01 3.6406984e+02 +505 1.018 7.0045243e+01 3.5781553e+02 +506 1.02 6.9335739e+01 3.5171292e+02 +507 1.022 6.8638293e+01 3.4575771e+02 +508 1.024 6.7952613e+01 3.3994574e+02 +509 1.026 6.7278417e+01 3.3427298e+02 +510 1.028 6.6615431e+01 3.2873553e+02 +511 1.03 6.5963387e+01 3.2332958e+02 +512 1.032 6.5322027e+01 3.1805146e+02 +513 1.034 6.4691099e+01 3.1289762e+02 +514 1.036 6.4070356e+01 3.0786460e+02 +515 1.038 6.3459562e+01 3.0294904e+02 +516 1.04 6.2858484e+01 2.9814770e+02 +517 1.042 6.2266897e+01 2.9345743e+02 +518 1.044 6.1684582e+01 2.8887518e+02 +519 1.046 6.1111326e+01 2.8439797e+02 +520 1.048 6.0546922e+01 2.8002293e+02 +521 1.05 5.9991168e+01 2.7574728e+02 +522 1.052 5.9443869e+01 2.7156831e+02 +523 1.054 5.8904833e+01 2.6748339e+02 +524 1.056 5.8373874e+01 2.6348998e+02 +525 1.058 5.7850813e+01 2.5958560e+02 +526 1.06 5.7335474e+01 2.5576786e+02 +527 1.062 5.6827686e+01 2.5203443e+02 +528 1.064 5.6327282e+01 2.4838305e+02 +529 1.066 5.5834100e+01 2.4481153e+02 +530 1.068 5.5347984e+01 2.4131774e+02 +531 1.07 5.4868779e+01 2.3789962e+02 +532 1.072 5.4396336e+01 2.3455516e+02 +533 1.074 5.3930510e+01 2.3128241e+02 +534 1.076 5.3471160e+01 2.2807949e+02 +535 1.078 5.3018147e+01 2.2494456e+02 +536 1.08 5.2571338e+01 2.2187583e+02 +537 1.082 5.2130601e+01 2.1887159e+02 +538 1.084 5.1695809e+01 2.1593014e+02 +539 1.086 5.1266839e+01 2.1304986e+02 +540 1.088 5.0843570e+01 2.1022916e+02 +541 1.09 5.0425884e+01 2.0746651e+02 +542 1.092 5.0013666e+01 2.0476041e+02 +543 1.094 4.9606806e+01 2.0210940e+02 +544 1.096 4.9205193e+01 1.9951208e+02 +545 1.098 4.8808722e+01 1.9696708e+02 +546 1.1 4.8417291e+01 1.9447306e+02 +547 1.102 4.8030797e+01 1.9202873e+02 +548 1.104 4.7649144e+01 1.8963283e+02 +549 1.106 4.7272234e+01 1.8728414e+02 +550 1.108 4.6899976e+01 1.8498148e+02 +551 1.11 4.6532278e+01 1.8272369e+02 +552 1.112 4.6169052e+01 1.8050965e+02 +553 1.114 4.5810211e+01 1.7833827e+02 +554 1.116 4.5455672e+01 1.7620849e+02 +555 1.118 4.5105350e+01 1.7411928e+02 +556 1.12 4.4759168e+01 1.7206963e+02 +557 1.122 4.4417046e+01 1.7005859e+02 +558 1.124 4.4078909e+01 1.6808519e+02 +559 1.126 4.3744681e+01 1.6614851e+02 +560 1.128 4.3414291e+01 1.6424768e+02 +561 1.13 4.3087667e+01 1.6238180e+02 +562 1.132 4.2764741e+01 1.6055004e+02 +563 1.134 4.2445445e+01 1.5875158e+02 +564 1.136 4.2129713e+01 1.5698560e+02 +565 1.138 4.1817481e+01 1.5525134e+02 +566 1.14 4.1508687e+01 1.5354804e+02 +567 1.142 4.1203269e+01 1.5187496e+02 +568 1.144 4.0901167e+01 1.5023138e+02 +569 1.146 4.0602324e+01 1.4861660e+02 +570 1.148 4.0306682e+01 1.4702995e+02 +571 1.15 4.0014186e+01 1.4547077e+02 +572 1.152 3.9724781e+01 1.4393841e+02 +573 1.154 3.9438415e+01 1.4243225e+02 +574 1.156 3.9155035e+01 1.4095167e+02 +575 1.158 3.8874591e+01 1.3949610e+02 +576 1.16 3.8597034e+01 1.3806494e+02 +577 1.162 3.8322316e+01 1.3665764e+02 +578 1.164 3.8050388e+01 1.3527366e+02 +579 1.166 3.7781206e+01 1.3391246e+02 +580 1.168 3.7514724e+01 1.3257351e+02 +581 1.17 3.7250897e+01 1.3125633e+02 +582 1.172 3.6989684e+01 1.2996042e+02 +583 1.174 3.6731042e+01 1.2868529e+02 +584 1.176 3.6474929e+01 1.2743049e+02 +585 1.178 3.6221307e+01 1.2619556e+02 +586 1.18 3.5970134e+01 1.2498006e+02 +587 1.182 3.5721374e+01 1.2378356e+02 +588 1.184 3.5474988e+01 1.2260563e+02 +589 1.186 3.5230939e+01 1.2144588e+02 +590 1.188 3.4989192e+01 1.2030391e+02 +591 1.19 3.4749712e+01 1.1917932e+02 +592 1.192 3.4512464e+01 1.1807174e+02 +593 1.194 3.4277414e+01 1.1698081e+02 +594 1.196 3.4044530e+01 1.1590616e+02 +595 1.198 3.3813779e+01 1.1484744e+02 +596 1.2 3.3585129e+01 1.1380432e+02 +597 1.202 3.3358551e+01 1.1277646e+02 +598 1.204 3.3134014e+01 1.1176354e+02 +599 1.206 3.2911487e+01 1.1076525e+02 +600 1.208 3.2690943e+01 1.0978127e+02 +601 1.21 3.2472353e+01 1.0881131e+02 +602 1.212 3.2255689e+01 1.0785508e+02 +603 1.214 3.2040923e+01 1.0691230e+02 +604 1.216 3.1828031e+01 1.0598267e+02 +605 1.218 3.1616984e+01 1.0506595e+02 +606 1.22 3.1407758e+01 1.0416185e+02 +607 1.222 3.1200329e+01 1.0327012e+02 +608 1.224 3.0994670e+01 1.0239052e+02 +609 1.226 3.0790759e+01 1.0152280e+02 +610 1.228 3.0588571e+01 1.0066671e+02 +611 1.23 3.0388084e+01 9.9822035e+01 +612 1.232 3.0189275e+01 9.8988536e+01 +613 1.234 2.9992123e+01 9.8165995e+01 +614 1.236 2.9796604e+01 9.7354195e+01 +615 1.238 2.9602699e+01 9.6552926e+01 +616 1.24 2.9410386e+01 9.5761982e+01 +617 1.242 2.9219644e+01 9.4981162e+01 +618 1.244 2.9030454e+01 9.4210270e+01 +619 1.246 2.8842797e+01 9.3449115e+01 +620 1.248 2.8656652e+01 9.2697509e+01 +621 1.25 2.8472000e+01 9.1955272e+01 +622 1.252 2.8288824e+01 9.1222224e+01 +623 1.254 2.8107105e+01 9.0498193e+01 +624 1.256 2.7926826e+01 8.9783008e+01 +625 1.258 2.7747968e+01 8.9076505e+01 +626 1.26 2.7570514e+01 8.8378521e+01 +627 1.262 2.7394448e+01 8.7688899e+01 +628 1.264 2.7219753e+01 8.7007484e+01 +629 1.266 2.7046413e+01 8.6334126e+01 +630 1.268 2.6874411e+01 8.5668679e+01 +631 1.27 2.6703733e+01 8.5010997e+01 +632 1.272 2.6534362e+01 8.4360942e+01 +633 1.274 2.6366284e+01 8.3718377e+01 +634 1.276 2.6199484e+01 8.3083166e+01 +635 1.278 2.6033946e+01 8.2455180e+01 +636 1.28 2.5869658e+01 8.1834290e+01 +637 1.282 2.5706605e+01 8.1220373e+01 +638 1.284 2.5544772e+01 8.0613305e+01 +639 1.286 2.5384147e+01 8.0012968e+01 +640 1.288 2.5224716e+01 7.9419244e+01 +641 1.29 2.5066466e+01 7.8832021e+01 +642 1.292 2.4909383e+01 7.8251187e+01 +643 1.294 2.4753457e+01 7.7676632e+01 +644 1.296 2.4598673e+01 7.7108251e+01 +645 1.298 2.4445020e+01 7.6545939e+01 +646 1.3 2.4292485e+01 7.5989595e+01 +647 1.302 2.4141057e+01 7.5439119e+01 +648 1.304 2.3990725e+01 7.4894414e+01 +649 1.306 2.3841476e+01 7.4355384e+01 +650 1.308 2.3693300e+01 7.3821937e+01 +651 1.31 2.3546185e+01 7.3293982e+01 +652 1.312 2.3400120e+01 7.2771430e+01 +653 1.314 2.3255095e+01 7.2254193e+01 +654 1.316 2.3111100e+01 7.1742187e+01 +655 1.318 2.2968123e+01 7.1235327e+01 +656 1.32 2.2826155e+01 7.0733533e+01 +657 1.322 2.2685186e+01 7.0236724e+01 +658 1.324 2.2545205e+01 6.9744823e+01 +659 1.326 2.2406203e+01 6.9257753e+01 +660 1.328 2.2268171e+01 6.8775439e+01 +661 1.33 2.2131098e+01 6.8297808e+01 +662 1.332 2.1994976e+01 6.7824788e+01 +663 1.334 2.1859796e+01 6.7356310e+01 +664 1.336 2.1725548e+01 6.6892303e+01 +665 1.338 2.1592224e+01 6.6432702e+01 +666 1.34 2.1459814e+01 6.5977440e+01 +667 1.342 2.1328311e+01 6.5526452e+01 +668 1.344 2.1197706e+01 6.5079676e+01 +669 1.346 2.1067990e+01 6.4637050e+01 +670 1.348 2.0939155e+01 6.4198512e+01 +671 1.35 2.0811193e+01 6.3764004e+01 +672 1.352 2.0684096e+01 6.3333468e+01 +673 1.354 2.0557857e+01 6.2906845e+01 +674 1.356 2.0432466e+01 6.2484082e+01 +675 1.358 2.0307918e+01 6.2065122e+01 +676 1.36 2.0184203e+01 6.1649912e+01 +677 1.362 2.0061316e+01 6.1238400e+01 +678 1.364 1.9939247e+01 6.0830534e+01 +679 1.366 1.9817991e+01 6.0426264e+01 +680 1.368 1.9697540e+01 6.0025540e+01 +681 1.37 1.9577887e+01 5.9628314e+01 +682 1.372 1.9459024e+01 5.9234537e+01 +683 1.374 1.9340946e+01 5.8844164e+01 +684 1.376 1.9223645e+01 5.8457149e+01 +685 1.378 1.9107115e+01 5.8073447e+01 +686 1.38 1.8991349e+01 5.7693014e+01 +687 1.382 1.8876341e+01 5.7315806e+01 +688 1.384 1.8762084e+01 5.6941782e+01 +689 1.386 1.8648572e+01 5.6570900e+01 +690 1.388 1.8535798e+01 5.6203119e+01 +691 1.39 1.8423757e+01 5.5838399e+01 +692 1.392 1.8312443e+01 5.5476702e+01 +693 1.394 1.8201849e+01 5.5117988e+01 +694 1.396 1.8091969e+01 5.4762220e+01 +695 1.398 1.7982798e+01 5.4409360e+01 +696 1.4 1.7874330e+01 5.4059373e+01 +697 1.402 1.7766558e+01 5.3712223e+01 +698 1.404 1.7659479e+01 5.3367875e+01 +699 1.406 1.7553085e+01 5.3026294e+01 +700 1.408 1.7447372e+01 5.2687447e+01 +701 1.41 1.7342333e+01 5.2351299e+01 +702 1.412 1.7237965e+01 5.2017820e+01 +703 1.414 1.7134260e+01 5.1686977e+01 +704 1.416 1.7031215e+01 5.1358738e+01 +705 1.418 1.6928824e+01 5.1033073e+01 +706 1.42 1.6827081e+01 5.0709951e+01 +707 1.422 1.6725982e+01 5.0389342e+01 +708 1.424 1.6625522e+01 5.0071218e+01 +709 1.426 1.6525696e+01 4.9755549e+01 +710 1.428 1.6426498e+01 4.9442308e+01 +711 1.43 1.6327925e+01 4.9131466e+01 +712 1.432 1.6229971e+01 4.8822996e+01 +713 1.434 1.6132631e+01 4.8516872e+01 +714 1.436 1.6035902e+01 4.8213067e+01 +715 1.438 1.5939778e+01 4.7911555e+01 +716 1.44 1.5844254e+01 4.7612311e+01 +717 1.442 1.5749327e+01 4.7315310e+01 +718 1.444 1.5654991e+01 4.7020527e+01 +719 1.446 1.5561243e+01 4.6727937e+01 +720 1.448 1.5468078e+01 4.6437518e+01 +721 1.45 1.5375492e+01 4.6149246e+01 +722 1.452 1.5283480e+01 4.5863097e+01 +723 1.454 1.5192038e+01 4.5579049e+01 +724 1.456 1.5101162e+01 4.5297080e+01 +725 1.458 1.5010848e+01 4.5017167e+01 +726 1.46 1.4921092e+01 4.4739290e+01 +727 1.462 1.4831890e+01 4.4463427e+01 +728 1.464 1.4743237e+01 4.4189557e+01 +729 1.466 1.4655130e+01 4.3917659e+01 +730 1.468 1.4567565e+01 4.3647714e+01 +731 1.47 1.4480538e+01 4.3379701e+01 +732 1.472 1.4394045e+01 4.3113601e+01 +733 1.474 1.4308082e+01 4.2849395e+01 +734 1.476 1.4222646e+01 4.2587062e+01 +735 1.478 1.4137733e+01 4.2326586e+01 +736 1.48 1.4053339e+01 4.2067947e+01 +737 1.482 1.3969460e+01 4.1811128e+01 +738 1.484 1.3886093e+01 4.1556109e+01 +739 1.486 1.3803234e+01 4.1302875e+01 +740 1.488 1.3720880e+01 4.1051407e+01 +741 1.49 1.3639028e+01 4.0801688e+01 +742 1.492 1.3557672e+01 4.0553701e+01 +743 1.494 1.3476812e+01 4.0307431e+01 +744 1.496 1.3396442e+01 4.0062860e+01 +745 1.498 1.3316559e+01 3.9819973e+01 +746 1.5 1.3237161e+01 3.9578754e+01 +747 1.502 1.3158243e+01 3.9339186e+01 +748 1.504 1.3079803e+01 3.9101255e+01 +749 1.506 1.3001837e+01 3.8864946e+01 +750 1.508 1.2924342e+01 3.8630243e+01 +751 1.51 1.2847315e+01 3.8397132e+01 +752 1.512 1.2770752e+01 3.8165598e+01 +753 1.514 1.2694651e+01 3.7935627e+01 +754 1.516 1.2619009e+01 3.7707204e+01 +755 1.518 1.2543822e+01 3.7480316e+01 +756 1.52 1.2469087e+01 3.7254949e+01 +757 1.522 1.2394801e+01 3.7031090e+01 +758 1.524 1.2320961e+01 3.6808724e+01 +759 1.526 1.2247565e+01 3.6587840e+01 +760 1.528 1.2174609e+01 3.6368423e+01 +761 1.53 1.2102090e+01 3.6150461e+01 +762 1.532 1.2030006e+01 3.5933941e+01 +763 1.534 1.1958353e+01 3.5718851e+01 +764 1.536 1.1887130e+01 3.5505179e+01 +765 1.538 1.1816332e+01 3.5292911e+01 +766 1.54 1.1745957e+01 3.5082037e+01 +767 1.542 1.1676003e+01 3.4872544e+01 +768 1.544 1.1606466e+01 3.4664421e+01 +769 1.546 1.1537344e+01 3.4457655e+01 +770 1.548 1.1468634e+01 3.4252236e+01 +771 1.55 1.1400334e+01 3.4048153e+01 +772 1.552 1.1332441e+01 3.3845394e+01 +773 1.554 1.1264952e+01 3.3643948e+01 +774 1.556 1.1197864e+01 3.3443804e+01 +775 1.558 1.1131176e+01 3.3244952e+01 +776 1.56 1.1064884e+01 3.3047381e+01 +777 1.562 1.0998985e+01 3.2851080e+01 +778 1.564 1.0933479e+01 3.2656040e+01 +779 1.566 1.0868360e+01 3.2462250e+01 +780 1.568 1.0803629e+01 3.2269699e+01 +781 1.57 1.0739281e+01 3.2078379e+01 +782 1.572 1.0675314e+01 3.1888279e+01 +783 1.574 1.0611727e+01 3.1699389e+01 +784 1.576 1.0548516e+01 3.1511700e+01 +785 1.578 1.0485679e+01 3.1325203e+01 +786 1.58 1.0423214e+01 3.1139887e+01 +787 1.582 1.0361119e+01 3.0955744e+01 +788 1.584 1.0299391e+01 3.0772764e+01 +789 1.586 1.0238027e+01 3.0590939e+01 +790 1.588 1.0177026e+01 3.0410260e+01 +791 1.59 1.0116385e+01 3.0230717e+01 +792 1.592 1.0056103e+01 3.0052301e+01 +793 1.594 9.9961754e+00 2.9875005e+01 +794 1.596 9.9366017e+00 2.9698820e+01 +795 1.598 9.8773794e+00 2.9523737e+01 +796 1.6 9.8185061e+00 2.9349747e+01 +797 1.602 9.7599797e+00 2.9176843e+01 +798 1.604 9.7017980e+00 2.9005017e+01 +799 1.606 9.6439589e+00 2.8834259e+01 +800 1.608 9.5864602e+00 2.8664563e+01 +801 1.61 9.5292999e+00 2.8495920e+01 +802 1.612 9.4724759e+00 2.8328323e+01 +803 1.614 9.4159859e+00 2.8161763e+01 +804 1.616 9.3598281e+00 2.7996233e+01 +805 1.618 9.3040003e+00 2.7831726e+01 +806 1.62 9.2485005e+00 2.7668233e+01 +807 1.622 9.1933267e+00 2.7505748e+01 +808 1.624 9.1384769e+00 2.7344263e+01 +809 1.626 9.0839490e+00 2.7183771e+01 +810 1.628 9.0297411e+00 2.7024264e+01 +811 1.63 8.9758513e+00 2.6865736e+01 +812 1.632 8.9222775e+00 2.6708180e+01 +813 1.634 8.8690179e+00 2.6551588e+01 +814 1.636 8.8160706e+00 2.6395953e+01 +815 1.638 8.7634335e+00 2.6241269e+01 +816 1.64 8.7111048e+00 2.6087529e+01 +817 1.642 8.6590827e+00 2.5934726e+01 +818 1.644 8.6073653e+00 2.5782854e+01 +819 1.646 8.5559507e+00 2.5631905e+01 +820 1.648 8.5048371e+00 2.5481874e+01 +821 1.65 8.4540226e+00 2.5332754e+01 +822 1.652 8.4035055e+00 2.5184539e+01 +823 1.654 8.3532839e+00 2.5037222e+01 +824 1.656 8.3033560e+00 2.4890797e+01 +825 1.658 8.2537201e+00 2.4745258e+01 +826 1.66 8.2043744e+00 2.4600598e+01 +827 1.662 8.1553171e+00 2.4456812e+01 +828 1.664 8.1065465e+00 2.4313893e+01 +829 1.666 8.0580610e+00 2.4171836e+01 +830 1.668 8.0098586e+00 2.4030635e+01 +831 1.67 7.9619379e+00 2.3890283e+01 +832 1.672 7.9142969e+00 2.3750775e+01 +833 1.674 7.8669342e+00 2.3612106e+01 +834 1.676 7.8198480e+00 2.3474269e+01 +835 1.678 7.7730366e+00 2.3337259e+01 +836 1.68 7.7264984e+00 2.3201070e+01 +837 1.682 7.6802317e+00 2.3065696e+01 +838 1.684 7.6342350e+00 2.2931133e+01 +839 1.686 7.5885067e+00 2.2797375e+01 +840 1.688 7.5430450e+00 2.2664416e+01 +841 1.69 7.4978485e+00 2.2532251e+01 +842 1.692 7.4529155e+00 2.2400875e+01 +843 1.694 7.4082445e+00 2.2270282e+01 +844 1.696 7.3638338e+00 2.2140467e+01 +845 1.698 7.3196821e+00 2.2011425e+01 +846 1.7 7.2757876e+00 2.1883151e+01 +847 1.702 7.2321490e+00 2.1755640e+01 +848 1.704 7.1887646e+00 2.1628887e+01 +849 1.706 7.1456329e+00 2.1502887e+01 +850 1.708 7.1027525e+00 2.1377634e+01 +851 1.71 7.0601219e+00 2.1253124e+01 +852 1.712 7.0177395e+00 2.1129353e+01 +853 1.714 6.9756040e+00 2.1006314e+01 +854 1.716 6.9337138e+00 2.0884004e+01 +855 1.718 6.8920675e+00 2.0762418e+01 +856 1.72 6.8506636e+00 2.0641551e+01 +857 1.722 6.8095008e+00 2.0521398e+01 +858 1.724 6.7685776e+00 2.0401955e+01 +859 1.726 6.7278925e+00 2.0283217e+01 +860 1.728 6.6874442e+00 2.0165180e+01 +861 1.73 6.6472313e+00 2.0047838e+01 +862 1.732 6.6072524e+00 1.9931188e+01 +863 1.734 6.5675061e+00 1.9815226e+01 +864 1.736 6.5279911e+00 1.9699946e+01 +865 1.738 6.4887059e+00 1.9585344e+01 +866 1.74 6.4496492e+00 1.9471417e+01 +867 1.742 6.4108198e+00 1.9358159e+01 +868 1.744 6.3722162e+00 1.9245567e+01 +869 1.746 6.3338371e+00 1.9133635e+01 +870 1.748 6.2956812e+00 1.9022361e+01 +871 1.75 6.2577472e+00 1.8911740e+01 +872 1.752 6.2200338e+00 1.8801768e+01 +873 1.754 6.1825397e+00 1.8692440e+01 +874 1.756 6.1452636e+00 1.8583752e+01 +875 1.758 6.1082042e+00 1.8475702e+01 +876 1.76 6.0713604e+00 1.8368283e+01 +877 1.762 6.0347307e+00 1.8261494e+01 +878 1.764 5.9983140e+00 1.8155329e+01 +879 1.766 5.9621090e+00 1.8049784e+01 +880 1.768 5.9261144e+00 1.7944857e+01 +881 1.77 5.8903291e+00 1.7840542e+01 +882 1.772 5.8547519e+00 1.7736836e+01 +883 1.774 5.8193814e+00 1.7633736e+01 +884 1.776 5.7842165e+00 1.7531237e+01 +885 1.778 5.7492560e+00 1.7429336e+01 +886 1.78 5.7144988e+00 1.7328030e+01 +887 1.782 5.6799435e+00 1.7227313e+01 +888 1.784 5.6455891e+00 1.7127184e+01 +889 1.786 5.6114344e+00 1.7027637e+01 +890 1.788 5.5774782e+00 1.6928670e+01 +891 1.79 5.5437193e+00 1.6830279e+01 +892 1.792 5.5101567e+00 1.6732461e+01 +893 1.794 5.4767891e+00 1.6635211e+01 +894 1.796 5.4436155e+00 1.6538527e+01 +895 1.798 5.4106346e+00 1.6442404e+01 +896 1.8 5.3778455e+00 1.6346840e+01 +897 1.802 5.3452469e+00 1.6251831e+01 +898 1.804 5.3128378e+00 1.6157374e+01 +899 1.806 5.2806170e+00 1.6063465e+01 +900 1.808 5.2485836e+00 1.5970101e+01 +901 1.81 5.2167363e+00 1.5877279e+01 +902 1.812 5.1850741e+00 1.5784994e+01 +903 1.814 5.1535959e+00 1.5693245e+01 +904 1.816 5.1223008e+00 1.5602028e+01 +905 1.818 5.0911875e+00 1.5511339e+01 +906 1.82 5.0602550e+00 1.5421175e+01 +907 1.822 5.0295024e+00 1.5331534e+01 +908 1.824 4.9989286e+00 1.5242411e+01 +909 1.826 4.9685324e+00 1.5153805e+01 +910 1.828 4.9383130e+00 1.5065711e+01 +911 1.83 4.9082693e+00 1.4978126e+01 +912 1.832 4.8784002e+00 1.4891049e+01 +913 1.834 4.8487047e+00 1.4804474e+01 +914 1.836 4.8191819e+00 1.4718400e+01 +915 1.838 4.7898308e+00 1.4632824e+01 +916 1.84 4.7606503e+00 1.4547742e+01 +917 1.842 4.7316395e+00 1.4463151e+01 +918 1.844 4.7027974e+00 1.4379049e+01 +919 1.846 4.6741230e+00 1.4295433e+01 +920 1.848 4.6456153e+00 1.4212299e+01 +921 1.85 4.6172735e+00 1.4129645e+01 +922 1.852 4.5890964e+00 1.4047468e+01 +923 1.854 4.5610833e+00 1.3965765e+01 +924 1.856 4.5332330e+00 1.3884534e+01 +925 1.858 4.5055448e+00 1.3803770e+01 +926 1.86 4.4780177e+00 1.3723473e+01 +927 1.862 4.4506506e+00 1.3643638e+01 +928 1.864 4.4234428e+00 1.3564263e+01 +929 1.866 4.3963933e+00 1.3485346e+01 +930 1.868 4.3695011e+00 1.3406883e+01 +931 1.87 4.3427654e+00 1.3328872e+01 +932 1.872 4.3161853e+00 1.3251310e+01 +933 1.874 4.2897599e+00 1.3174195e+01 +934 1.876 4.2634882e+00 1.3097524e+01 +935 1.878 4.2373695e+00 1.3021294e+01 +936 1.88 4.2114028e+00 1.2945503e+01 +937 1.882 4.1855872e+00 1.2870148e+01 +938 1.884 4.1599219e+00 1.2795227e+01 +939 1.886 4.1344060e+00 1.2720736e+01 +940 1.888 4.1090387e+00 1.2646674e+01 +941 1.89 4.0838190e+00 1.2573038e+01 +942 1.892 4.0587462e+00 1.2499825e+01 +943 1.894 4.0338194e+00 1.2427033e+01 +944 1.896 4.0090378e+00 1.2354659e+01 +945 1.898 3.9844005e+00 1.2282702e+01 +946 1.9 3.9599067e+00 1.2211157e+01 +947 1.902 3.9355556e+00 1.2140024e+01 +948 1.904 3.9113464e+00 1.2069299e+01 +949 1.906 3.8872782e+00 1.1998981e+01 +950 1.908 3.8633502e+00 1.1929067e+01 +951 1.91 3.8395616e+00 1.1859553e+01 +952 1.912 3.8159117e+00 1.1790440e+01 +953 1.914 3.7923996e+00 1.1721722e+01 +954 1.916 3.7690245e+00 1.1653400e+01 +955 1.918 3.7457857e+00 1.1585469e+01 +956 1.92 3.7226824e+00 1.1517928e+01 +957 1.922 3.6997138e+00 1.1450775e+01 +958 1.924 3.6768790e+00 1.1384007e+01 +959 1.926 3.6541775e+00 1.1317622e+01 +960 1.928 3.6316083e+00 1.1251618e+01 +961 1.93 3.6091708e+00 1.1185993e+01 +962 1.932 3.5868641e+00 1.1120744e+01 +963 1.934 3.5646875e+00 1.1055869e+01 +964 1.936 3.5426404e+00 1.0991366e+01 +965 1.938 3.5207218e+00 1.0927233e+01 +966 1.94 3.4989312e+00 1.0863468e+01 +967 1.942 3.4772677e+00 1.0800068e+01 +968 1.944 3.4557307e+00 1.0737031e+01 +969 1.946 3.4343193e+00 1.0674356e+01 +970 1.948 3.4130330e+00 1.0612040e+01 +971 1.95 3.3918709e+00 1.0550081e+01 +972 1.952 3.3708324e+00 1.0488478e+01 +973 1.954 3.3499168e+00 1.0427227e+01 +974 1.956 3.3291233e+00 1.0366327e+01 +975 1.958 3.3084513e+00 1.0305776e+01 +976 1.96 3.2879000e+00 1.0245572e+01 +977 1.962 3.2674687e+00 1.0185713e+01 +978 1.964 3.2471569e+00 1.0126196e+01 +979 1.966 3.2269637e+00 1.0067021e+01 +980 1.968 3.2068886e+00 1.0008184e+01 +981 1.97 3.1869308e+00 9.9496842e+00 +982 1.972 3.1670896e+00 9.8915194e+00 +983 1.974 3.1473645e+00 9.8336877e+00 +984 1.976 3.1277546e+00 9.7761872e+00 +985 1.978 3.1082595e+00 9.7190158e+00 +986 1.98 3.0888784e+00 9.6621717e+00 +987 1.982 3.0696106e+00 9.6056531e+00 +988 1.984 3.0504555e+00 9.5494580e+00 +989 1.986 3.0314125e+00 9.4935846e+00 +990 1.988 3.0124810e+00 9.4380309e+00 +991 1.99 2.9936602e+00 9.3827953e+00 +992 1.992 2.9749496e+00 9.3278758e+00 +993 1.994 2.9563485e+00 9.2732706e+00 +994 1.996 2.9378563e+00 9.2189779e+00 +995 1.998 2.9194724e+00 9.1649959e+00 +996 2.0 2.9011961e+00 9.1113228e+00 +997 2.002 2.8830269e+00 9.0579568e+00 +998 2.004 2.8649641e+00 9.0048962e+00 +999 2.006 2.8470071e+00 8.9521392e+00 +1000 2.008 2.8291553e+00 8.8996841e+00 +1001 2.01 2.8114082e+00 8.8475291e+00 +1002 2.012 2.7937650e+00 8.7956725e+00 +1003 2.014 2.7762253e+00 8.7441126e+00 +1004 2.016 2.7587884e+00 8.6928477e+00 +1005 2.018 2.7414537e+00 8.6418761e+00 +1006 2.02 2.7242207e+00 8.5911961e+00 +1007 2.022 2.7070887e+00 8.5408060e+00 +1008 2.024 2.6900572e+00 8.4907041e+00 +1009 2.026 2.6731257e+00 8.4408889e+00 +1010 2.028 2.6562935e+00 8.3913586e+00 +1011 2.03 2.6395601e+00 8.3421117e+00 +1012 2.032 2.6229249e+00 8.2931465e+00 +1013 2.034 2.6063873e+00 8.2444614e+00 +1014 2.036 2.5899468e+00 8.1960548e+00 +1015 2.038 2.5736029e+00 8.1479250e+00 +1016 2.04 2.5573550e+00 8.1000706e+00 +1017 2.042 2.5412024e+00 8.0524899e+00 +1018 2.044 2.5251448e+00 8.0051813e+00 +1019 2.046 2.5091815e+00 7.9581434e+00 +1020 2.048 2.4933121e+00 7.9113745e+00 +1021 2.05 2.4775359e+00 7.8648731e+00 +1022 2.052 2.4618524e+00 7.8186378e+00 +1023 2.054 2.4462611e+00 7.7726668e+00 +1024 2.056 2.4307615e+00 7.7269589e+00 +1025 2.058 2.4153531e+00 7.6815124e+00 +1026 2.06 2.4000353e+00 7.6363258e+00 +1027 2.062 2.3848076e+00 7.5913977e+00 +1028 2.064 2.3696696e+00 7.5467266e+00 +1029 2.066 2.3546206e+00 7.5023111e+00 +1030 2.068 2.3396601e+00 7.4581496e+00 +1031 2.07 2.3247878e+00 7.4142407e+00 +1032 2.072 2.3100030e+00 7.3705829e+00 +1033 2.074 2.2953053e+00 7.3271750e+00 +1034 2.076 2.2806942e+00 7.2840153e+00 +1035 2.078 2.2661691e+00 7.2411025e+00 +1036 2.08 2.2517296e+00 7.1984352e+00 +1037 2.082 2.2373752e+00 7.1560120e+00 +1038 2.084 2.2231054e+00 7.1138315e+00 +1039 2.086 2.2089197e+00 7.0718923e+00 +1040 2.088 2.1948176e+00 7.0301931e+00 +1041 2.09 2.1807988e+00 6.9887324e+00 +1042 2.092 2.1668626e+00 6.9475089e+00 +1043 2.094 2.1530086e+00 6.9065213e+00 +1044 2.096 2.1392363e+00 6.8657681e+00 +1045 2.098 2.1255453e+00 6.8252482e+00 +1046 2.1 2.1119352e+00 6.7849601e+00 +1047 2.102 2.0984053e+00 6.7449026e+00 +1048 2.104 2.0849554e+00 6.7050742e+00 +1049 2.106 2.0715849e+00 6.6654738e+00 +1050 2.108 2.0582934e+00 6.6260999e+00 +1051 2.11 2.0450803e+00 6.5869514e+00 +1052 2.112 2.0319454e+00 6.5480270e+00 +1053 2.114 2.0188881e+00 6.5093253e+00 +1054 2.116 2.0059080e+00 6.4708451e+00 +1055 2.118 1.9930046e+00 6.4325851e+00 +1056 2.12 1.9801775e+00 6.3945441e+00 +1057 2.122 1.9674262e+00 6.3567209e+00 +1058 2.124 1.9547504e+00 6.3191141e+00 +1059 2.126 1.9421496e+00 6.2817227e+00 +1060 2.128 1.9296234e+00 6.2445452e+00 +1061 2.13 1.9171713e+00 6.2075806e+00 +1062 2.132 1.9047929e+00 6.1708277e+00 +1063 2.134 1.8924879e+00 6.1342851e+00 +1064 2.136 1.8802557e+00 6.0979518e+00 +1065 2.138 1.8680959e+00 6.0618265e+00 +1066 2.14 1.8560082e+00 6.0259080e+00 +1067 2.142 1.8439921e+00 5.9901952e+00 +1068 2.144 1.8320473e+00 5.9546870e+00 +1069 2.146 1.8201733e+00 5.9193820e+00 +1070 2.148 1.8083696e+00 5.8842793e+00 +1071 2.15 1.7966360e+00 5.8493776e+00 +1072 2.152 1.7849720e+00 5.8146758e+00 +1073 2.154 1.7733772e+00 5.7801728e+00 +1074 2.156 1.7618512e+00 5.7458674e+00 +1075 2.158 1.7503936e+00 5.7117585e+00 +1076 2.16 1.7390040e+00 5.6778450e+00 +1077 2.162 1.7276821e+00 5.6441258e+00 +1078 2.164 1.7164274e+00 5.6105999e+00 +1079 2.166 1.7052395e+00 5.5772659e+00 +1080 2.168 1.6941182e+00 5.5441230e+00 +1081 2.17 1.6830629e+00 5.5111701e+00 +1082 2.172 1.6720734e+00 5.4784059e+00 +1083 2.174 1.6611492e+00 5.4458295e+00 +1084 2.176 1.6502899e+00 5.4134399e+00 +1085 2.178 1.6394953e+00 5.3812359e+00 +1086 2.18 1.6287649e+00 5.3492164e+00 +1087 2.182 1.6180983e+00 5.3173805e+00 +1088 2.184 1.6074952e+00 5.2857272e+00 +1089 2.186 1.5969553e+00 5.2542553e+00 +1090 2.188 1.5864781e+00 5.2229638e+00 +1091 2.19 1.5760633e+00 5.1918517e+00 +1092 2.192 1.5657106e+00 5.1609181e+00 +1093 2.194 1.5554195e+00 5.1301618e+00 +1094 2.196 1.5451898e+00 5.0995820e+00 +1095 2.198 1.5350211e+00 5.0691775e+00 +1096 2.2 1.5249130e+00 5.0389474e+00 +1097 2.202 1.5148652e+00 5.0088907e+00 +1098 2.204 1.5048773e+00 4.9790064e+00 +1099 2.206 1.4949490e+00 4.9492936e+00 +1100 2.208 1.4850800e+00 4.9197512e+00 +1101 2.21 1.4752699e+00 4.8903784e+00 +1102 2.212 1.4655184e+00 4.8611741e+00 +1103 2.214 1.4558251e+00 4.8321373e+00 +1104 2.216 1.4461897e+00 4.8032673e+00 +1105 2.218 1.4366119e+00 4.7745629e+00 +1106 2.22 1.4270914e+00 4.7460233e+00 +1107 2.222 1.4176277e+00 4.7176475e+00 +1108 2.224 1.4082207e+00 4.6894346e+00 +1109 2.226 1.3988699e+00 4.6613836e+00 +1110 2.228 1.3895750e+00 4.6334938e+00 +1111 2.23 1.3803358e+00 4.6057641e+00 +1112 2.232 1.3711518e+00 4.5781936e+00 +1113 2.234 1.3620229e+00 4.5507814e+00 +1114 2.236 1.3529486e+00 4.5235267e+00 +1115 2.238 1.3439287e+00 4.4964285e+00 +1116 2.24 1.3349628e+00 4.4694860e+00 +1117 2.242 1.3260506e+00 4.4426983e+00 +1118 2.244 1.3171919e+00 4.4160645e+00 +1119 2.246 1.3083863e+00 4.3895837e+00 +1120 2.248 1.2996335e+00 4.3632551e+00 +1121 2.25 1.2909332e+00 4.3370778e+00 +1122 2.252 1.2822851e+00 4.3110510e+00 +1123 2.254 1.2736889e+00 4.2851737e+00 +1124 2.256 1.2651443e+00 4.2594452e+00 +1125 2.258 1.2566510e+00 4.2338646e+00 +1126 2.26 1.2482087e+00 4.2084310e+00 +1127 2.262 1.2398172e+00 4.1831437e+00 +1128 2.264 1.2314760e+00 4.1580018e+00 +1129 2.266 1.2231851e+00 4.1330045e+00 +1130 2.268 1.2149439e+00 4.1081510e+00 +1131 2.27 1.2067524e+00 4.0834404e+00 +1132 2.272 1.1986101e+00 4.0588720e+00 +1133 2.274 1.1905168e+00 4.0344449e+00 +1134 2.276 1.1824722e+00 4.0101584e+00 +1135 2.278 1.1744760e+00 3.9860116e+00 +1136 2.28 1.1665281e+00 3.9620037e+00 +1137 2.282 1.1586279e+00 3.9381341e+00 +1138 2.284 1.1507754e+00 3.9144018e+00 +1139 2.286 1.1429702e+00 3.8908061e+00 +1140 2.288 1.1352121e+00 3.8673463e+00 +1141 2.29 1.1275008e+00 3.8440215e+00 +1142 2.292 1.1198359e+00 3.8208310e+00 +1143 2.294 1.1122173e+00 3.7977741e+00 +1144 2.296 1.1046447e+00 3.7748499e+00 +1145 2.298 1.0971179e+00 3.7520578e+00 +1146 2.3 1.0896364e+00 3.7293970e+00 +1147 2.302 1.0822002e+00 3.7068668e+00 +1148 2.304 1.0748089e+00 3.6844663e+00 +1149 2.306 1.0674622e+00 3.6621949e+00 +1150 2.308 1.0601600e+00 3.6400519e+00 +1151 2.31 1.0529019e+00 3.6180365e+00 +1152 2.312 1.0456878e+00 3.5961479e+00 +1153 2.314 1.0385173e+00 3.5743856e+00 +1154 2.316 1.0313902e+00 3.5527487e+00 +1155 2.318 1.0243062e+00 3.5312365e+00 +1156 2.32 1.0172651e+00 3.5098484e+00 +1157 2.322 1.0102667e+00 3.4885837e+00 +1158 2.324 1.0033107e+00 3.4674416e+00 +1159 2.326 9.9639687e-01 3.4464214e+00 +1160 2.328 9.8952494e-01 3.4255226e+00 +1161 2.33 9.8269470e-01 3.4047442e+00 +1162 2.332 9.7590588e-01 3.3840858e+00 +1163 2.334 9.6915827e-01 3.3635466e+00 +1164 2.336 9.6245162e-01 3.3431260e+00 +1165 2.338 9.5578569e-01 3.3228232e+00 +1166 2.34 9.4916025e-01 3.3026376e+00 +1167 2.342 9.4257506e-01 3.2825685e+00 +1168 2.344 9.3602990e-01 3.2626154e+00 +1169 2.346 9.2952452e-01 3.2427774e+00 +1170 2.348 9.2305871e-01 3.2230541e+00 +1171 2.35 9.1663223e-01 3.2034446e+00 +1172 2.352 9.1024486e-01 3.1839484e+00 +1173 2.354 9.0389636e-01 3.1645649e+00 +1174 2.356 8.9758652e-01 3.1452934e+00 +1175 2.358 8.9131511e-01 3.1261332e+00 +1176 2.36 8.8508192e-01 3.1070838e+00 +1177 2.362 8.7888671e-01 3.0881445e+00 +1178 2.364 8.7272927e-01 3.0693147e+00 +1179 2.366 8.6660938e-01 3.0505937e+00 +1180 2.368 8.6052682e-01 3.0319810e+00 +1181 2.37 8.5448138e-01 3.0134759e+00 +1182 2.372 8.4847284e-01 2.9950779e+00 +1183 2.374 8.4250100e-01 2.9767862e+00 +1184 2.376 8.3656563e-01 2.9586005e+00 +1185 2.378 8.3066652e-01 2.9405199e+00 +1186 2.38 8.2480348e-01 2.9225439e+00 +1187 2.382 8.1897628e-01 2.9046720e+00 +1188 2.384 8.1318472e-01 2.8869035e+00 +1189 2.386 8.0742860e-01 2.8692379e+00 +1190 2.388 8.0170770e-01 2.8516746e+00 +1191 2.39 7.9602183e-01 2.8342129e+00 +1192 2.392 7.9037078e-01 2.8168524e+00 +1193 2.394 7.8475435e-01 2.7995925e+00 +1194 2.396 7.7917235e-01 2.7824325e+00 +1195 2.398 7.7362456e-01 2.7653719e+00 +1196 2.4 7.6811079e-01 2.7484102e+00 +1197 2.402 7.6263085e-01 2.7315467e+00 +1198 2.404 7.5718454e-01 2.7147811e+00 +1199 2.406 7.5177166e-01 2.6981125e+00 +1200 2.408 7.4639203e-01 2.6815407e+00 +1201 2.41 7.4104544e-01 2.6650649e+00 +1202 2.412 7.3573170e-01 2.6486846e+00 +1203 2.414 7.3045063e-01 2.6323993e+00 +1204 2.416 7.2520204e-01 2.6162085e+00 +1205 2.418 7.1998574e-01 2.6001117e+00 +1206 2.42 7.1480153e-01 2.5841082e+00 +1207 2.422 7.0964924e-01 2.5681976e+00 +1208 2.424 7.0452868e-01 2.5523793e+00 +1209 2.426 6.9943966e-01 2.5366529e+00 +1210 2.428 6.9438201e-01 2.5210177e+00 +1211 2.43 6.8935553e-01 2.5054733e+00 +1212 2.432 6.8436006e-01 2.4900192e+00 +1213 2.434 6.7939540e-01 2.4746548e+00 +1214 2.436 6.7446138e-01 2.4593797e+00 +1215 2.438 6.6955782e-01 2.4441933e+00 +1216 2.44 6.6468454e-01 2.4290952e+00 +1217 2.442 6.5984138e-01 2.4140847e+00 +1218 2.444 6.5502815e-01 2.3991616e+00 +1219 2.446 6.5024468e-01 2.3843251e+00 +1220 2.448 6.4549079e-01 2.3695750e+00 +1221 2.45 6.4076632e-01 2.3549106e+00 +1222 2.452 6.3607109e-01 2.3403314e+00 +1223 2.454 6.3140494e-01 2.3258371e+00 +1224 2.456 6.2676769e-01 2.3114271e+00 +1225 2.458 6.2215917e-01 2.2971009e+00 +1226 2.46 6.1757923e-01 2.2828580e+00 +1227 2.462 6.1302768e-01 2.2686981e+00 +1228 2.464 6.0850438e-01 2.2546206e+00 +1229 2.466 6.0400915e-01 2.2406250e+00 +1230 2.468 5.9954183e-01 2.2267109e+00 +1231 2.47 5.9510225e-01 2.2128779e+00 +1232 2.472 5.9069026e-01 2.1991254e+00 +1233 2.474 5.8630570e-01 2.1854530e+00 +1234 2.476 5.8194840e-01 2.1718603e+00 +1235 2.478 5.7761820e-01 2.1583467e+00 +1236 2.48 5.7331496e-01 2.1449119e+00 +1237 2.482 5.6903850e-01 2.1315555e+00 +1238 2.484 5.6478868e-01 2.1182769e+00 +1239 2.486 5.6056534e-01 2.1050757e+00 +1240 2.488 5.5636833e-01 2.0919515e+00 +1241 2.49 5.5219749e-01 2.0789038e+00 +1242 2.492 5.4805266e-01 2.0659323e+00 +1243 2.494 5.4393371e-01 2.0530364e+00 +1244 2.496 5.3984047e-01 2.0402158e+00 +1245 2.498 5.3577279e-01 2.0274700e+00 +1246 2.5 5.3173054e-01 2.0147986e+00 +1247 2.502 5.2771355e-01 2.0022012e+00 +1248 2.504 5.2372168e-01 1.9896773e+00 +1249 2.506 5.1975479e-01 1.9772266e+00 +1250 2.508 5.1581273e-01 1.9648486e+00 +1251 2.51 5.1189535e-01 1.9525429e+00 +1252 2.512 5.0800251e-01 1.9403091e+00 +1253 2.514 5.0413406e-01 1.9281468e+00 +1254 2.516 5.0028987e-01 1.9160556e+00 +1255 2.518 4.9646980e-01 1.9040351e+00 +1256 2.52 4.9267369e-01 1.8920848e+00 +1257 2.522 4.8890141e-01 1.8802044e+00 +1258 2.524 4.8515282e-01 1.8683936e+00 +1259 2.526 4.8142779e-01 1.8566518e+00 +1260 2.528 4.7772617e-01 1.8449787e+00 +1261 2.53 4.7404783e-01 1.8333739e+00 +1262 2.532 4.7039263e-01 1.8218371e+00 +1263 2.534 4.6676044e-01 1.8103677e+00 +1264 2.536 4.6315111e-01 1.7989656e+00 +1265 2.538 4.5956453e-01 1.7876302e+00 +1266 2.54 4.5600055e-01 1.7763612e+00 +1267 2.542 4.5245904e-01 1.7651582e+00 +1268 2.544 4.4893987e-01 1.7540208e+00 +1269 2.546 4.4544291e-01 1.7429487e+00 +1270 2.548 4.4196803e-01 1.7319415e+00 +1271 2.55 4.3851510e-01 1.7209988e+00 +1272 2.552 4.3508400e-01 1.7101203e+00 +1273 2.554 4.3167458e-01 1.6993056e+00 +1274 2.556 4.2828673e-01 1.6885543e+00 +1275 2.558 4.2492032e-01 1.6778661e+00 +1276 2.56 4.2157522e-01 1.6672406e+00 +1277 2.562 4.1825132e-01 1.6566775e+00 +1278 2.564 4.1494847e-01 1.6461763e+00 +1279 2.566 4.1166657e-01 1.6357368e+00 +1280 2.568 4.0840549e-01 1.6253587e+00 +1281 2.57 4.0516510e-01 1.6150414e+00 +1282 2.572 4.0194528e-01 1.6047848e+00 +1283 2.574 3.9874592e-01 1.5945884e+00 +1284 2.576 3.9556689e-01 1.5844519e+00 +1285 2.578 3.9240807e-01 1.5743750e+00 +1286 2.58 3.8926935e-01 1.5643574e+00 +1287 2.582 3.8615060e-01 1.5543986e+00 +1288 2.584 3.8305171e-01 1.5444985e+00 +1289 2.586 3.7997257e-01 1.5346565e+00 +1290 2.588 3.7691305e-01 1.5248725e+00 +1291 2.59 3.7387304e-01 1.5151460e+00 +1292 2.592 3.7085243e-01 1.5054767e+00 +1293 2.594 3.6785109e-01 1.4958644e+00 +1294 2.596 3.6486893e-01 1.4863087e+00 +1295 2.598 3.6190582e-01 1.4768092e+00 +1296 2.6 3.5896166e-01 1.4673657e+00 +1297 2.602 3.5603632e-01 1.4579778e+00 +1298 2.604 3.5312971e-01 1.4486453e+00 +1299 2.606 3.5024170e-01 1.4393677e+00 +1300 2.608 3.4737220e-01 1.4301448e+00 +1301 2.61 3.4452109e-01 1.4209763e+00 +1302 2.612 3.4168826e-01 1.4118619e+00 +1303 2.614 3.3887360e-01 1.4028012e+00 +1304 2.616 3.3607702e-01 1.3937940e+00 +1305 2.618 3.3329839e-01 1.3848400e+00 +1306 2.62 3.3053762e-01 1.3759387e+00 +1307 2.622 3.2779460e-01 1.3670900e+00 +1308 2.624 3.2506923e-01 1.3582936e+00 +1309 2.626 3.2236139e-01 1.3495491e+00 +1310 2.628 3.1967100e-01 1.3408563e+00 +1311 2.63 3.1699794e-01 1.3322148e+00 +1312 2.632 3.1434210e-01 1.3236244e+00 +1313 2.634 3.1170340e-01 1.3150847e+00 +1314 2.636 3.0908173e-01 1.3065955e+00 +1315 2.638 3.0647699e-01 1.2981566e+00 +1316 2.64 3.0388907e-01 1.2897675e+00 +1317 2.642 3.0131788e-01 1.2814281e+00 +1318 2.644 2.9876333e-01 1.2731380e+00 +1319 2.646 2.9622530e-01 1.2648969e+00 +1320 2.648 2.9370371e-01 1.2567047e+00 +1321 2.65 2.9119845e-01 1.2485609e+00 +1322 2.652 2.8870943e-01 1.2404654e+00 +1323 2.654 2.8623656e-01 1.2324178e+00 +1324 2.656 2.8377973e-01 1.2244179e+00 +1325 2.658 2.8133885e-01 1.2164654e+00 +1326 2.66 2.7891383e-01 1.2085600e+00 +1327 2.662 2.7650458e-01 1.2007015e+00 +1328 2.664 2.7411100e-01 1.1928896e+00 +1329 2.666 2.7173299e-01 1.1851241e+00 +1330 2.668 2.6937047e-01 1.1774046e+00 +1331 2.67 2.6702334e-01 1.1697309e+00 +1332 2.672 2.6469152e-01 1.1621027e+00 +1333 2.674 2.6237490e-01 1.1545198e+00 +1334 2.676 2.6007341e-01 1.1469820e+00 +1335 2.678 2.5778694e-01 1.1394889e+00 +1336 2.68 2.5551542e-01 1.1320403e+00 +1337 2.682 2.5325875e-01 1.1246360e+00 +1338 2.684 2.5101685e-01 1.1172757e+00 +1339 2.686 2.4878962e-01 1.1099591e+00 +1340 2.688 2.4657698e-01 1.1026861e+00 +1341 2.69 2.4437885e-01 1.0954563e+00 +1342 2.692 2.4219513e-01 1.0882694e+00 +1343 2.694 2.4002574e-01 1.0811254e+00 +1344 2.696 2.3787060e-01 1.0740239e+00 +1345 2.698 2.3572962e-01 1.0669646e+00 +1346 2.7 2.3360271e-01 1.0599474e+00 +1347 2.702 2.3148980e-01 1.0529720e+00 +1348 2.704 2.2939080e-01 1.0460381e+00 +1349 2.706 2.2730562e-01 1.0391456e+00 +1350 2.708 2.2523419e-01 1.0322941e+00 +1351 2.71 2.2317642e-01 1.0254834e+00 +1352 2.712 2.2113223e-01 1.0187134e+00 +1353 2.714 2.1910154e-01 1.0119837e+00 +1354 2.716 2.1708427e-01 1.0052942e+00 +1355 2.718 2.1508033e-01 9.9864465e-01 +1356 2.72 2.1308966e-01 9.9203475e-01 +1357 2.722 2.1111217e-01 9.8546431e-01 +1358 2.724 2.0914778e-01 9.7893310e-01 +1359 2.726 2.0719641e-01 9.7244091e-01 +1360 2.728 2.0525799e-01 9.6598750e-01 +1361 2.73 2.0333243e-01 9.5957266e-01 +1362 2.732 2.0141967e-01 9.5319616e-01 +1363 2.734 1.9951962e-01 9.4685778e-01 +1364 2.736 1.9763221e-01 9.4055731e-01 +1365 2.738 1.9575737e-01 9.3429453e-01 +1366 2.74 1.9389501e-01 9.2806923e-01 +1367 2.742 1.9204507e-01 9.2188118e-01 +1368 2.744 1.9020746e-01 9.1573018e-01 +1369 2.746 1.8838212e-01 9.0961601e-01 +1370 2.748 1.8656897e-01 9.0353846e-01 +1371 2.75 1.8476794e-01 8.9749732e-01 +1372 2.752 1.8297896e-01 8.9149239e-01 +1373 2.754 1.8120195e-01 8.8552345e-01 +1374 2.756 1.7943684e-01 8.7959030e-01 +1375 2.758 1.7768357e-01 8.7369273e-01 +1376 2.76 1.7594205e-01 8.6783055e-01 +1377 2.762 1.7421222e-01 8.6200354e-01 +1378 2.764 1.7249401e-01 8.5621150e-01 +1379 2.766 1.7078735e-01 8.5045424e-01 +1380 2.768 1.6909217e-01 8.4473155e-01 +1381 2.77 1.6740840e-01 8.3904324e-01 +1382 2.772 1.6573597e-01 8.3338911e-01 +1383 2.774 1.6407482e-01 8.2776897e-01 +1384 2.776 1.6242488e-01 8.2218261e-01 +1385 2.778 1.6078607e-01 8.1662984e-01 +1386 2.78 1.5915833e-01 8.1111048e-01 +1387 2.782 1.5754161e-01 8.0562432e-01 +1388 2.784 1.5593582e-01 8.0017118e-01 +1389 2.786 1.5434090e-01 7.9475087e-01 +1390 2.788 1.5275679e-01 7.8936321e-01 +1391 2.79 1.5118342e-01 7.8400799e-01 +1392 2.792 1.4962074e-01 7.7868504e-01 +1393 2.794 1.4806866e-01 7.7339417e-01 +1394 2.796 1.4652714e-01 7.6813520e-01 +1395 2.798 1.4499610e-01 7.6290794e-01 +1396 2.8 1.4347549e-01 7.5771221e-01 +1397 2.802 1.4196523e-01 7.5254784e-01 +1398 2.804 1.4046527e-01 7.4741463e-01 +1399 2.806 1.3897555e-01 7.4231241e-01 +1400 2.808 1.3749600e-01 7.3724100e-01 +1401 2.81 1.3602657e-01 7.3220023e-01 +1402 2.812 1.3456718e-01 7.2718992e-01 +1403 2.814 1.3311779e-01 7.2220989e-01 +1404 2.816 1.3167832e-01 7.1725997e-01 +1405 2.818 1.3024873e-01 7.1233998e-01 +1406 2.82 1.2882894e-01 7.0744976e-01 +1407 2.822 1.2741891e-01 7.0258913e-01 +1408 2.824 1.2601857e-01 6.9775792e-01 +1409 2.826 1.2462786e-01 6.9295597e-01 +1410 2.828 1.2324672e-01 6.8818310e-01 +1411 2.83 1.2187511e-01 6.8343914e-01 +1412 2.832 1.2051295e-01 6.7872394e-01 +1413 2.834 1.1916019e-01 6.7403732e-01 +1414 2.836 1.1781678e-01 6.6937911e-01 +1415 2.838 1.1648266e-01 6.6474917e-01 +1416 2.84 1.1515776e-01 6.6014732e-01 +1417 2.842 1.1384205e-01 6.5557340e-01 +1418 2.844 1.1253545e-01 6.5102725e-01 +1419 2.846 1.1123792e-01 6.4650871e-01 +1420 2.848 1.0994940e-01 6.4201762e-01 +1421 2.85 1.0866983e-01 6.3755382e-01 +1422 2.852 1.0739917e-01 6.3311716e-01 +1423 2.854 1.0613735e-01 6.2870748e-01 +1424 2.856 1.0488432e-01 6.2432462e-01 +1425 2.858 1.0364003e-01 6.1996843e-01 +1426 2.86 1.0240443e-01 6.1563875e-01 +1427 2.862 1.0117746e-01 6.1133544e-01 +1428 2.864 9.9959067e-02 6.0705834e-01 +1429 2.866 9.8749206e-02 6.0280729e-01 +1430 2.868 9.7547821e-02 5.9858215e-01 +1431 2.87 9.6354860e-02 5.9438277e-01 +1432 2.872 9.5170273e-02 5.9020900e-01 +1433 2.874 9.3994007e-02 5.8606069e-01 +1434 2.876 9.2826013e-02 5.8193769e-01 +1435 2.878 9.1666240e-02 5.7783986e-01 +1436 2.88 9.0514637e-02 5.7376706e-01 +1437 2.882 8.9371155e-02 5.6971913e-01 +1438 2.884 8.8235744e-02 5.6569594e-01 +1439 2.886 8.7108355e-02 5.6169734e-01 +1440 2.888 8.5988938e-02 5.5772319e-01 +1441 2.89 8.4877446e-02 5.5377335e-01 +1442 2.892 8.3773829e-02 5.4984767e-01 +1443 2.894 8.2678039e-02 5.4594602e-01 +1444 2.896 8.1590029e-02 5.4206826e-01 +1445 2.898 8.0509750e-02 5.3821425e-01 +1446 2.9 7.9437156e-02 5.3438386e-01 +1447 2.902 7.8372199e-02 5.3057694e-01 +1448 2.904 7.7314833e-02 5.2679336e-01 +1449 2.906 7.6265010e-02 5.2303299e-01 +1450 2.908 7.5222686e-02 5.1929568e-01 +1451 2.91 7.4187812e-02 5.1558132e-01 +1452 2.912 7.3160345e-02 5.1188976e-01 +1453 2.914 7.2140238e-02 5.0822087e-01 +1454 2.916 7.1127447e-02 5.0457452e-01 +1455 2.918 7.0121925e-02 5.0095059e-01 +1456 2.92 6.9123629e-02 4.9734893e-01 +1457 2.922 6.8132515e-02 4.9376943e-01 +1458 2.924 6.7148537e-02 4.9021195e-01 +1459 2.926 6.6171652e-02 4.8667637e-01 +1460 2.928 6.5201817e-02 4.8316255e-01 +1461 2.93 6.4238988e-02 4.7967038e-01 +1462 2.932 6.3283121e-02 4.7619973e-01 +1463 2.934 6.2334174e-02 4.7275046e-01 +1464 2.936 6.1392105e-02 4.6932247e-01 +1465 2.938 6.0456870e-02 4.6591562e-01 +1466 2.94 5.9528429e-02 4.6252979e-01 +1467 2.942 5.8606737e-02 4.5916486e-01 +1468 2.944 5.7691755e-02 4.5582071e-01 +1469 2.946 5.6783441e-02 4.5249722e-01 +1470 2.948 5.5881753e-02 4.4919427e-01 +1471 2.95 5.4986650e-02 4.4591173e-01 +1472 2.952 5.4098092e-02 4.4264950e-01 +1473 2.954 5.3216039e-02 4.3940745e-01 +1474 2.956 5.2340449e-02 4.3618546e-01 +1475 2.958 5.1471283e-02 4.3298343e-01 +1476 2.96 5.0608502e-02 4.2980122e-01 +1477 2.962 4.9752065e-02 4.2663873e-01 +1478 2.964 4.8901934e-02 4.2349585e-01 +1479 2.966 4.8058069e-02 4.2037245e-01 +1480 2.968 4.7220431e-02 4.1726843e-01 +1481 2.97 4.6388982e-02 4.1418367e-01 +1482 2.972 4.5563684e-02 4.1111807e-01 +1483 2.974 4.4744498e-02 4.0807150e-01 +1484 2.976 4.3931385e-02 4.0504386e-01 +1485 2.978 4.3124310e-02 4.0203504e-01 +1486 2.98 4.2323233e-02 3.9904492e-01 +1487 2.982 4.1528117e-02 3.9607341e-01 +1488 2.984 4.0738927e-02 3.9312039e-01 +1489 2.986 3.9955624e-02 3.9018575e-01 +1490 2.988 3.9178172e-02 3.8726939e-01 +1491 2.99 3.8406534e-02 3.8437120e-01 +1492 2.992 3.7640675e-02 3.8149107e-01 +1493 2.994 3.6880558e-02 3.7862891e-01 +1494 2.996 3.6126147e-02 3.7578459e-01 +1495 2.998 3.5377408e-02 3.7295803e-01 +1496 3.0 3.4634303e-02 3.7014911e-01 +1497 3.002 3.3896799e-02 3.6735774e-01 +1498 3.004 3.3164861e-02 3.6458381e-01 +1499 3.006 3.2438453e-02 3.6182722e-01 +1500 3.008 3.1717540e-02 3.5908787e-01 +1501 3.01 3.1002090e-02 3.5636566e-01 +1502 3.012 3.0292066e-02 3.5366048e-01 +1503 3.014 2.9587436e-02 3.5097225e-01 +1504 3.016 2.8888166e-02 3.4830085e-01 +1505 3.018 2.8194222e-02 3.4564619e-01 +1506 3.02 2.7505570e-02 3.4300818e-01 +1507 3.022 2.6822178e-02 3.4038672e-01 +1508 3.024 2.6144012e-02 3.3778170e-01 +1509 3.026 2.5471040e-02 3.3519304e-01 +1510 3.028 2.4803229e-02 3.3262063e-01 +1511 3.03 2.4140547e-02 3.3006439e-01 +1512 3.032 2.3482961e-02 3.2752422e-01 +1513 3.034 2.2830440e-02 3.2500002e-01 +1514 3.036 2.2182950e-02 3.2249170e-01 +1515 3.038 2.1540462e-02 3.1999917e-01 +1516 3.04 2.0902943e-02 3.1752234e-01 +1517 3.042 2.0270362e-02 3.1506111e-01 +1518 3.044 1.9642689e-02 3.1261539e-01 +1519 3.046 1.9019891e-02 3.1018509e-01 +1520 3.048 1.8401938e-02 3.0777013e-01 +1521 3.05 1.7788800e-02 3.0537041e-01 +1522 3.052 1.7180446e-02 3.0298584e-01 +1523 3.054 1.6576847e-02 3.0061633e-01 +1524 3.056 1.5977971e-02 2.9826180e-01 +1525 3.058 1.5383789e-02 2.9592215e-01 +1526 3.06 1.4794272e-02 2.9359731e-01 +1527 3.062 1.4209390e-02 2.9128718e-01 +1528 3.064 1.3629114e-02 2.8899168e-01 +1529 3.066 1.3053414e-02 2.8671072e-01 +1530 3.068 1.2482261e-02 2.8444421e-01 +1531 3.07 1.1915628e-02 2.8219208e-01 +1532 3.072 1.1353484e-02 2.7995423e-01 +1533 3.074 1.0795801e-02 2.7773059e-01 +1534 3.076 1.0242552e-02 2.7552106e-01 +1535 3.078 9.6937076e-03 2.7332558e-01 +1536 3.08 9.1492403e-03 2.7114404e-01 +1537 3.082 8.6091221e-03 2.6897638e-01 +1538 3.084 8.0733255e-03 2.6682251e-01 +1539 3.086 7.5418230e-03 2.6468235e-01 +1540 3.088 7.0145870e-03 2.6255582e-01 +1541 3.09 6.4915906e-03 2.6044284e-01 +1542 3.092 5.9728067e-03 2.5834333e-01 +1543 3.094 5.4582084e-03 2.5625721e-01 +1544 3.096 4.9477690e-03 2.5418440e-01 +1545 3.098 4.4414619e-03 2.5212482e-01 +1546 3.1 3.9392609e-03 2.5007840e-01 +1547 3.102 3.4411396e-03 2.4804506e-01 +1548 3.104 2.9470720e-03 2.4602472e-01 +1549 3.106 2.4570321e-03 2.4401730e-01 +1550 3.108 1.9709942e-03 2.4202273e-01 +1551 3.11 1.4889327e-03 2.4004093e-01 +1552 3.112 1.0108221e-03 2.3807183e-01 +1553 3.114 5.3663697e-04 2.3611535e-01 +1554 3.116 6.6352272e-05 2.3417142e-01 +1555 3.118 -4.0005705e-04 2.3223997e-01 +1556 3.12 -8.6261587e-04 2.3032091e-01 +1557 3.122 -1.3213489e-03 2.2841419e-01 +1558 3.124 -1.7762808e-03 2.2651971e-01 +1559 3.126 -2.2274359e-03 2.2463742e-01 +1560 3.128 -2.6748386e-03 2.2276724e-01 +1561 3.13 -3.1185129e-03 2.2090910e-01 +1562 3.132 -3.5584829e-03 2.1906293e-01 +1563 3.134 -3.9947726e-03 2.1722865e-01 +1564 3.136 -4.4274054e-03 2.1540621e-01 +1565 3.138 -4.8564052e-03 2.1359551e-01 +1566 3.14 -5.2817953e-03 2.1179651e-01 +1567 3.142 -5.7035990e-03 2.1000912e-01 +1568 3.144 -6.1218395e-03 2.0823329e-01 +1569 3.146 -6.5365398e-03 2.0646893e-01 +1570 3.148 -6.9477228e-03 2.0471599e-01 +1571 3.15 -7.3554113e-03 2.0297440e-01 +1572 3.152 -7.7596280e-03 2.0124408e-01 +1573 3.154 -8.1603952e-03 1.9952498e-01 +1574 3.156 -8.5577353e-03 1.9781702e-01 +1575 3.158 -8.9516706e-03 1.9612015e-01 +1576 3.16 -9.3422233e-03 1.9443428e-01 +1577 3.162 -9.7294151e-03 1.9275937e-01 +1578 3.164 -1.0113268e-02 1.9109534e-01 +1579 3.166 -1.0493804e-02 1.8944213e-01 +1580 3.168 -1.0871044e-02 1.8779968e-01 +1581 3.17 -1.1245010e-02 1.8616791e-01 +1582 3.172 -1.1615722e-02 1.8454678e-01 +1583 3.174 -1.1983204e-02 1.8293621e-01 +1584 3.176 -1.2347474e-02 1.8133614e-01 +1585 3.178 -1.2708555e-02 1.7974652e-01 +1586 3.18 -1.3066467e-02 1.7816727e-01 +1587 3.182 -1.3421231e-02 1.7659834e-01 +1588 3.184 -1.3772867e-02 1.7503966e-01 +1589 3.186 -1.4121397e-02 1.7349118e-01 +1590 3.188 -1.4466839e-02 1.7195284e-01 +1591 3.19 -1.4809215e-02 1.7042456e-01 +1592 3.192 -1.5148544e-02 1.6890630e-01 +1593 3.194 -1.5484847e-02 1.6739800e-01 +1594 3.196 -1.5818142e-02 1.6589959e-01 +1595 3.198 -1.6148451e-02 1.6441102e-01 +1596 3.2 -1.6475793e-02 1.6293222e-01 +1597 3.202 -1.6800187e-02 1.6146314e-01 +1598 3.204 -1.7121652e-02 1.6000373e-01 +1599 3.206 -1.7440208e-02 1.5855392e-01 +1600 3.208 -1.7755874e-02 1.5711366e-01 +1601 3.21 -1.8068669e-02 1.5568288e-01 +1602 3.212 -1.8378612e-02 1.5426154e-01 +1603 3.214 -1.8685722e-02 1.5284958e-01 +1604 3.216 -1.8990016e-02 1.5144694e-01 +1605 3.218 -1.9291515e-02 1.5005357e-01 +1606 3.22 -1.9590237e-02 1.4866940e-01 +1607 3.222 -1.9886199e-02 1.4729440e-01 +1608 3.224 -2.0179421e-02 1.4592849e-01 +1609 3.226 -2.0469919e-02 1.4457163e-01 +1610 3.228 -2.0757713e-02 1.4322376e-01 +1611 3.23 -2.1042820e-02 1.4188483e-01 +1612 3.232 -2.1325258e-02 1.4055479e-01 +1613 3.234 -2.1605045e-02 1.3923358e-01 +1614 3.236 -2.1882199e-02 1.3792115e-01 +1615 3.238 -2.2156736e-02 1.3661745e-01 +1616 3.24 -2.2428674e-02 1.3532242e-01 +1617 3.242 -2.2698031e-02 1.3403602e-01 +1618 3.244 -2.2964824e-02 1.3275818e-01 +1619 3.246 -2.3229070e-02 1.3148887e-01 +1620 3.248 -2.3490785e-02 1.3022803e-01 +1621 3.25 -2.3749987e-02 1.2897560e-01 +1622 3.252 -2.4006693e-02 1.2773155e-01 +1623 3.254 -2.4260919e-02 1.2649581e-01 +1624 3.256 -2.4512682e-02 1.2526834e-01 +1625 3.258 -2.4761998e-02 1.2404909e-01 +1626 3.26 -2.5008884e-02 1.2283801e-01 +1627 3.262 -2.5253355e-02 1.2163505e-01 +1628 3.264 -2.5495429e-02 1.2044016e-01 +1629 3.266 -2.5735121e-02 1.1925329e-01 +1630 3.268 -2.5972448e-02 1.1807440e-01 +1631 3.27 -2.6207424e-02 1.1690344e-01 +1632 3.272 -2.6440067e-02 1.1574036e-01 +1633 3.274 -2.6670391e-02 1.1458511e-01 +1634 3.276 -2.6898412e-02 1.1343764e-01 +1635 3.278 -2.7124147e-02 1.1229792e-01 +1636 3.28 -2.7347609e-02 1.1116588e-01 +1637 3.282 -2.7568815e-02 1.1004149e-01 +1638 3.284 -2.7787780e-02 1.0892470e-01 +1639 3.286 -2.8004519e-02 1.0781547e-01 +1640 3.288 -2.8219047e-02 1.0671374e-01 +1641 3.29 -2.8431379e-02 1.0561948e-01 +1642 3.292 -2.8641530e-02 1.0453264e-01 +1643 3.294 -2.8849514e-02 1.0345317e-01 +1644 3.296 -2.9055347e-02 1.0238103e-01 +1645 3.298 -2.9259043e-02 1.0131617e-01 +1646 3.3 -2.9460617e-02 1.0025856e-01 +1647 3.302 -2.9660082e-02 9.9208143e-02 +1648 3.304 -2.9857454e-02 9.8164882e-02 +1649 3.306 -3.0052747e-02 9.7128731e-02 +1650 3.308 -3.0245974e-02 9.6099649e-02 +1651 3.31 -3.0437150e-02 9.5077593e-02 +1652 3.312 -3.0626289e-02 9.4062519e-02 +1653 3.314 -3.0813405e-02 9.3054387e-02 +1654 3.316 -3.0998511e-02 9.2053153e-02 +1655 3.318 -3.1181622e-02 9.1058778e-02 +1656 3.32 -3.1362751e-02 9.0071218e-02 +1657 3.322 -3.1541911e-02 8.9090432e-02 +1658 3.324 -3.1719117e-02 8.8116381e-02 +1659 3.326 -3.1894381e-02 8.7149022e-02 +1660 3.328 -3.2067717e-02 8.6188316e-02 +1661 3.33 -3.2239139e-02 8.5234222e-02 +1662 3.332 -3.2408659e-02 8.4286701e-02 +1663 3.334 -3.2576290e-02 8.3345711e-02 +1664 3.336 -3.2742046e-02 8.2411215e-02 +1665 3.338 -3.2905939e-02 8.1483172e-02 +1666 3.34 -3.3067983e-02 8.0561543e-02 +1667 3.342 -3.3228190e-02 7.9646289e-02 +1668 3.344 -3.3386572e-02 7.8737372e-02 +1669 3.346 -3.3543143e-02 7.7834754e-02 +1670 3.348 -3.3697915e-02 7.6938396e-02 +1671 3.35 -3.3850901e-02 7.6048259e-02 +1672 3.352 -3.4002113e-02 7.5164307e-02 +1673 3.354 -3.4151562e-02 7.4286501e-02 +1674 3.356 -3.4299263e-02 7.3414805e-02 +1675 3.358 -3.4445226e-02 7.2549181e-02 +1676 3.36 -3.4589463e-02 7.1689592e-02 +1677 3.362 -3.4731988e-02 7.0836001e-02 +1678 3.364 -3.4872811e-02 6.9988373e-02 +1679 3.366 -3.5011945e-02 6.9146670e-02 +1680 3.368 -3.5149402e-02 6.8310857e-02 +1681 3.37 -3.5285193e-02 6.7480897e-02 +1682 3.372 -3.5419329e-02 6.6656756e-02 +1683 3.374 -3.5551824e-02 6.5838397e-02 +1684 3.376 -3.5682687e-02 6.5025786e-02 +1685 3.378 -3.5811931e-02 6.4218886e-02 +1686 3.38 -3.5939566e-02 6.3417664e-02 +1687 3.382 -3.6065605e-02 6.2622085e-02 +1688 3.384 -3.6190058e-02 6.1832115e-02 +1689 3.386 -3.6312937e-02 6.1047718e-02 +1690 3.388 -3.6434253e-02 6.0268861e-02 +1691 3.39 -3.6554016e-02 5.9495510e-02 +1692 3.392 -3.6672239e-02 5.8727632e-02 +1693 3.394 -3.6788931e-02 5.7965193e-02 +1694 3.396 -3.6904103e-02 5.7208160e-02 +1695 3.398 -3.7017767e-02 5.6456499e-02 +1696 3.4 -3.7129933e-02 5.5710178e-02 +1697 3.402 -3.7240611e-02 5.4969164e-02 +1698 3.404 -3.7349813e-02 5.4233425e-02 +1699 3.406 -3.7457548e-02 5.3502928e-02 +1700 3.408 -3.7563828e-02 5.2777641e-02 +1701 3.41 -3.7668662e-02 5.2057532e-02 +1702 3.412 -3.7772061e-02 5.1342569e-02 +1703 3.414 -3.7874036e-02 5.0632721e-02 +1704 3.416 -3.7974596e-02 4.9927957e-02 +1705 3.418 -3.8073751e-02 4.9228245e-02 +1706 3.42 -3.8171512e-02 4.8533554e-02 +1707 3.422 -3.8267889e-02 4.7843853e-02 +1708 3.424 -3.8362891e-02 4.7159112e-02 +1709 3.426 -3.8456528e-02 4.6479299e-02 +1710 3.428 -3.8548811e-02 4.5804386e-02 +1711 3.43 -3.8639749e-02 4.5134341e-02 +1712 3.432 -3.8729352e-02 4.4469135e-02 +1713 3.434 -3.8817629e-02 4.3808738e-02 +1714 3.436 -3.8904590e-02 4.3153120e-02 +1715 3.438 -3.8990245e-02 4.2502251e-02 +1716 3.44 -3.9074602e-02 4.1856103e-02 +1717 3.442 -3.9157672e-02 4.1214647e-02 +1718 3.444 -3.9239464e-02 4.0577853e-02 +1719 3.446 -3.9319987e-02 3.9945692e-02 +1720 3.448 -3.9399250e-02 3.9318137e-02 +1721 3.45 -3.9477262e-02 3.8695158e-02 +1722 3.452 -3.9554033e-02 3.8076727e-02 +1723 3.454 -3.9629572e-02 3.7462817e-02 +1724 3.456 -3.9703888e-02 3.6853399e-02 +1725 3.458 -3.9776989e-02 3.6248445e-02 +1726 3.46 -3.9848884e-02 3.5647928e-02 +1727 3.462 -3.9919583e-02 3.5051820e-02 +1728 3.464 -3.9989094e-02 3.4460095e-02 +1729 3.466 -4.0057427e-02 3.3872724e-02 +1730 3.468 -4.0124588e-02 3.3289681e-02 +1731 3.47 -4.0190588e-02 3.2710940e-02 +1732 3.472 -4.0255435e-02 3.2136472e-02 +1733 3.474 -4.0319137e-02 3.1566253e-02 +1734 3.476 -4.0381703e-02 3.1000255e-02 +1735 3.478 -4.0443141e-02 3.0438452e-02 +1736 3.48 -4.0503459e-02 2.9880818e-02 +1737 3.482 -4.0562667e-02 2.9327328e-02 +1738 3.484 -4.0620771e-02 2.8777955e-02 +1739 3.486 -4.0677781e-02 2.8232674e-02 +1740 3.488 -4.0733705e-02 2.7691460e-02 +1741 3.49 -4.0788550e-02 2.7154287e-02 +1742 3.492 -4.0842325e-02 2.6621129e-02 +1743 3.494 -4.0895037e-02 2.6091963e-02 +1744 3.496 -4.0946695e-02 2.5566763e-02 +1745 3.498 -4.0997307e-02 2.5045504e-02 +1746 3.5 -4.1046880e-02 2.4528162e-02 +1747 3.502 -4.1095422e-02 2.4014712e-02 +1748 3.504 -4.1142941e-02 2.3505130e-02 +1749 3.506 -4.1189445e-02 2.2999392e-02 +1750 3.508 -4.1234941e-02 2.2497474e-02 +1751 3.51 -4.1279437e-02 2.1999351e-02 +1752 3.512 -4.1322941e-02 2.1505001e-02 +1753 3.514 -4.1365460e-02 2.1014400e-02 +1754 3.516 -4.1407001e-02 2.0527524e-02 +1755 3.518 -4.1447573e-02 2.0044350e-02 +1756 3.52 -4.1487181e-02 1.9564854e-02 +1757 3.522 -4.1525834e-02 1.9089014e-02 +1758 3.524 -4.1563540e-02 1.8616806e-02 +1759 3.526 -4.1600304e-02 1.8148209e-02 +1760 3.528 -4.1636135e-02 1.7683199e-02 +1761 3.53 -4.1671039e-02 1.7221753e-02 +1762 3.532 -4.1705024e-02 1.6763850e-02 +1763 3.534 -4.1738097e-02 1.6309467e-02 +1764 3.536 -4.1770264e-02 1.5858581e-02 +1765 3.538 -4.1801534e-02 1.5411172e-02 +1766 3.54 -4.1831911e-02 1.4967217e-02 +1767 3.542 -4.1861405e-02 1.4526694e-02 +1768 3.544 -4.1890020e-02 1.4089582e-02 +1769 3.546 -4.1917765e-02 1.3655859e-02 +1770 3.548 -4.1944646e-02 1.3225504e-02 +1771 3.55 -4.1970670e-02 1.2798496e-02 +1772 3.552 -4.1995842e-02 1.2374813e-02 +1773 3.554 -4.2020171e-02 1.1954435e-02 +1774 3.556 -4.2043662e-02 1.1537340e-02 +1775 3.558 -4.2066323e-02 1.1123509e-02 +1776 3.56 -4.2088158e-02 1.0712919e-02 +1777 3.562 -4.2109176e-02 1.0305552e-02 +1778 3.564 -4.2129383e-02 9.9013857e-03 +1779 3.566 -4.2148784e-02 9.5004007e-03 +1780 3.568 -4.2167386e-02 9.1025768e-03 +1781 3.57 -4.2185196e-02 8.7078940e-03 +1782 3.572 -4.2202220e-02 8.3163322e-03 +1783 3.574 -4.2218464e-02 7.9278717e-03 +1784 3.576 -4.2233934e-02 7.5424928e-03 +1785 3.578 -4.2248636e-02 7.1601760e-03 +1786 3.58 -4.2262576e-02 6.7809019e-03 +1787 3.582 -4.2275761e-02 6.4046510e-03 +1788 3.584 -4.2288197e-02 6.0314042e-03 +1789 3.586 -4.2299889e-02 5.6611425e-03 +1790 3.588 -4.2310844e-02 5.2938466e-03 +1791 3.59 -4.2321066e-02 4.9294979e-03 +1792 3.592 -4.2330564e-02 4.5680776e-03 +1793 3.594 -4.2339341e-02 4.2095669e-03 +1794 3.596 -4.2347404e-02 3.8539473e-03 +1795 3.598 -4.2354758e-02 3.5012005e-03 +1796 3.6 -4.2361410e-02 3.1513080e-03 +1797 3.602 -4.2367365e-02 2.8042516e-03 +1798 3.604 -4.2372629e-02 2.4600133e-03 +1799 3.606 -4.2377207e-02 2.1185750e-03 +1800 3.608 -4.2381105e-02 1.7799188e-03 +1801 3.61 -4.2384329e-02 1.4440269e-03 +1802 3.612 -4.2386883e-02 1.1108816e-03 +1803 3.614 -4.2388774e-02 7.8046536e-04 +1804 3.616 -4.2390007e-02 4.5276065e-04 +1805 3.618 -4.2390587e-02 1.2775011e-04 +1806 3.62 -4.2390520e-02 -1.9458356e-04 +1807 3.622 -4.2389811e-02 -5.1425751e-04 +1808 3.624 -4.2388465e-02 -8.3128885e-04 +1809 3.626 -4.2386487e-02 -1.1456945e-03 +1810 3.628 -4.2383884e-02 -1.4574914e-03 +1811 3.63 -4.2380659e-02 -1.7666963e-03 +1812 3.632 -4.2376818e-02 -2.0733259e-03 +1813 3.634 -4.2372367e-02 -2.3773968e-03 +1814 3.636 -4.2367311e-02 -2.6789254e-03 +1815 3.638 -4.2361653e-02 -2.9779281e-03 +1816 3.64 -4.2355401e-02 -3.2744212e-03 +1817 3.642 -4.2348557e-02 -3.5684209e-03 +1818 3.644 -4.2341129e-02 -3.8599433e-03 +1819 3.646 -4.2333119e-02 -4.1490044e-03 +1820 3.648 -4.2324534e-02 -4.4356201e-03 +1821 3.65 -4.2315378e-02 -4.7198062e-03 +1822 3.652 -4.2305657e-02 -5.0015785e-03 +1823 3.654 -4.2295374e-02 -5.2809525e-03 +1824 3.656 -4.2284534e-02 -5.5579438e-03 +1825 3.658 -4.2273143e-02 -5.8325678e-03 +1826 3.66 -4.2261206e-02 -6.1048399e-03 +1827 3.662 -4.2248726e-02 -6.3747753e-03 +1828 3.664 -4.2235708e-02 -6.6423893e-03 +1829 3.666 -4.2222158e-02 -6.9076968e-03 +1830 3.668 -4.2208079e-02 -7.1707129e-03 +1831 3.67 -4.2193476e-02 -7.4314525e-03 +1832 3.672 -4.2178354e-02 -7.6899303e-03 +1833 3.674 -4.2162718e-02 -7.9461612e-03 +1834 3.676 -4.2146571e-02 -8.2001597e-03 +1835 3.678 -4.2129919e-02 -8.4519404e-03 +1836 3.68 -4.2112765e-02 -8.7015177e-03 +1837 3.682 -4.2095114e-02 -8.9489061e-03 +1838 3.684 -4.2076971e-02 -9.1941198e-03 +1839 3.686 -4.2058339e-02 -9.4371730e-03 +1840 3.688 -4.2039224e-02 -9.6780799e-03 +1841 3.69 -4.2019628e-02 -9.9168545e-03 +1842 3.692 -4.1999558e-02 -1.0153511e-02 +1843 3.694 -4.1979016e-02 -1.0388063e-02 +1844 3.696 -4.1958007e-02 -1.0620524e-02 +1845 3.698 -4.1936535e-02 -1.0850908e-02 +1846 3.7 -4.1914604e-02 -1.1079229e-02 +1847 3.702 -4.1892219e-02 -1.1305499e-02 +1848 3.704 -4.1869384e-02 -1.1529734e-02 +1849 3.706 -4.1846102e-02 -1.1751946e-02 +1850 3.708 -4.1822377e-02 -1.1972148e-02 +1851 3.71 -4.1798215e-02 -1.2190353e-02 +1852 3.712 -4.1773617e-02 -1.2406576e-02 +1853 3.714 -4.1748590e-02 -1.2620828e-02 +1854 3.716 -4.1723135e-02 -1.2833123e-02 +1855 3.718 -4.1697258e-02 -1.3043473e-02 +1856 3.72 -4.1670963e-02 -1.3251893e-02 +1857 3.722 -4.1644252e-02 -1.3458393e-02 +1858 3.724 -4.1617130e-02 -1.3662987e-02 +1859 3.726 -4.1589601e-02 -1.3865688e-02 +1860 3.728 -4.1561669e-02 -1.4066509e-02 +1861 3.73 -4.1533337e-02 -1.4265460e-02 +1862 3.732 -4.1504608e-02 -1.4462556e-02 +1863 3.734 -4.1475488e-02 -1.4657808e-02 +1864 3.736 -4.1445978e-02 -1.4851229e-02 +1865 3.738 -4.1416084e-02 -1.5042830e-02 +1866 3.74 -4.1385808e-02 -1.5232624e-02 +1867 3.742 -4.1355155e-02 -1.5420622e-02 +1868 3.744 -4.1324127e-02 -1.5606838e-02 +1869 3.746 -4.1292728e-02 -1.5791282e-02 +1870 3.748 -4.1260963e-02 -1.5973967e-02 +1871 3.75 -4.1228834e-02 -1.6154903e-02 +1872 3.752 -4.1196344e-02 -1.6334104e-02 +1873 3.754 -4.1163498e-02 -1.6511580e-02 +1874 3.756 -4.1130299e-02 -1.6687342e-02 +1875 3.758 -4.1096750e-02 -1.6861404e-02 +1876 3.76 -4.1062855e-02 -1.7033775e-02 +1877 3.762 -4.1028616e-02 -1.7204467e-02 +1878 3.764 -4.0994038e-02 -1.7373491e-02 +1879 3.766 -4.0959123e-02 -1.7540859e-02 +1880 3.768 -4.0923876e-02 -1.7706582e-02 +1881 3.77 -4.0888298e-02 -1.7870670e-02 +1882 3.772 -4.0852394e-02 -1.8033135e-02 +1883 3.774 -4.0816167e-02 -1.8193987e-02 +1884 3.776 -4.0779619e-02 -1.8353238e-02 +1885 3.778 -4.0742755e-02 -1.8510899e-02 +1886 3.78 -4.0705577e-02 -1.8666979e-02 +1887 3.782 -4.0668088e-02 -1.8821490e-02 +1888 3.784 -4.0630292e-02 -1.8974442e-02 +1889 3.786 -4.0592191e-02 -1.9125845e-02 +1890 3.788 -4.0553789e-02 -1.9275711e-02 +1891 3.79 -4.0515089e-02 -1.9424050e-02 +1892 3.792 -4.0476094e-02 -1.9570871e-02 +1893 3.794 -4.0436807e-02 -1.9716186e-02 +1894 3.796 -4.0397230e-02 -1.9860004e-02 +1895 3.798 -4.0357368e-02 -2.0002336e-02 +1896 3.8 -4.0317222e-02 -2.0143191e-02 +1897 3.802 -4.0276796e-02 -2.0282581e-02 +1898 3.804 -4.0236093e-02 -2.0420513e-02 +1899 3.806 -4.0195115e-02 -2.0557000e-02 +1900 3.808 -4.0153866e-02 -2.0692050e-02 +1901 3.81 -4.0112348e-02 -2.0825673e-02 +1902 3.812 -4.0070564e-02 -2.0957879e-02 +1903 3.814 -4.0028517e-02 -2.1088678e-02 +1904 3.816 -3.9986210e-02 -2.1218079e-02 +1905 3.818 -3.9943646e-02 -2.1346092e-02 +1906 3.82 -3.9900827e-02 -2.1472726e-02 +1907 3.822 -3.9857756e-02 -2.1597991e-02 +1908 3.824 -3.9814436e-02 -2.1721896e-02 +1909 3.826 -3.9770869e-02 -2.1844451e-02 +1910 3.828 -3.9727059e-02 -2.1965665e-02 +1911 3.83 -3.9683007e-02 -2.2085546e-02 +1912 3.832 -3.9638717e-02 -2.2204105e-02 +1913 3.834 -3.9594192e-02 -2.2321349e-02 +1914 3.836 -3.9549433e-02 -2.2437290e-02 +1915 3.838 -3.9504443e-02 -2.2551934e-02 +1916 3.84 -3.9459226e-02 -2.2665292e-02 +1917 3.842 -3.9413783e-02 -2.2777372e-02 +1918 3.844 -3.9368117e-02 -2.2888183e-02 +1919 3.846 -3.9322231e-02 -2.2997733e-02 +1920 3.848 -3.9276127e-02 -2.3106032e-02 +1921 3.85 -3.9229808e-02 -2.3213088e-02 +1922 3.852 -3.9183276e-02 -2.3318910e-02 +1923 3.854 -3.9136533e-02 -2.3423507e-02 +1924 3.856 -3.9089583e-02 -2.3526886e-02 +1925 3.858 -3.9042426e-02 -2.3629056e-02 +1926 3.86 -3.8995067e-02 -2.3730027e-02 +1927 3.862 -3.8947507e-02 -2.3829805e-02 +1928 3.864 -3.8899749e-02 -2.3928400e-02 +1929 3.866 -3.8851794e-02 -2.4025819e-02 +1930 3.868 -3.8803646e-02 -2.4122071e-02 +1931 3.87 -3.8755307e-02 -2.4217165e-02 +1932 3.872 -3.8706778e-02 -2.4311107e-02 +1933 3.874 -3.8658063e-02 -2.4403907e-02 +1934 3.876 -3.8609163e-02 -2.4495572e-02 +1935 3.878 -3.8560082e-02 -2.4586110e-02 +1936 3.88 -3.8510820e-02 -2.4675529e-02 +1937 3.882 -3.8461380e-02 -2.4763837e-02 +1938 3.884 -3.8411765e-02 -2.4851042e-02 +1939 3.886 -3.8361977e-02 -2.4937151e-02 +1940 3.888 -3.8312017e-02 -2.5022173e-02 +1941 3.89 -3.8261889e-02 -2.5106115e-02 +1942 3.892 -3.8211594e-02 -2.5188984e-02 +1943 3.894 -3.8161134e-02 -2.5270789e-02 +1944 3.896 -3.8110511e-02 -2.5351536e-02 +1945 3.898 -3.8059728e-02 -2.5431233e-02 +1946 3.9 -3.8008787e-02 -2.5509888e-02 +1947 3.902 -3.7957689e-02 -2.5587508e-02 +1948 3.904 -3.7906437e-02 -2.5664101e-02 +1949 3.906 -3.7855034e-02 -2.5739673e-02 +1950 3.908 -3.7803479e-02 -2.5814232e-02 +1951 3.91 -3.7751777e-02 -2.5887786e-02 +1952 3.912 -3.7699929e-02 -2.5960340e-02 +1953 3.914 -3.7647937e-02 -2.6031903e-02 +1954 3.916 -3.7595802e-02 -2.6102482e-02 +1955 3.918 -3.7543527e-02 -2.6172084e-02 +1956 3.92 -3.7491114e-02 -2.6240715e-02 +1957 3.922 -3.7438565e-02 -2.6308382e-02 +1958 3.924 -3.7385881e-02 -2.6375093e-02 +1959 3.926 -3.7333065e-02 -2.6440855e-02 +1960 3.928 -3.7280119e-02 -2.6505673e-02 +1961 3.93 -3.7227043e-02 -2.6569556e-02 +1962 3.932 -3.7173841e-02 -2.6632510e-02 +1963 3.934 -3.7120514e-02 -2.6694540e-02 +1964 3.936 -3.7067063e-02 -2.6755655e-02 +1965 3.938 -3.7013492e-02 -2.6815861e-02 +1966 3.94 -3.6959801e-02 -2.6875164e-02 +1967 3.942 -3.6905992e-02 -2.6933571e-02 +1968 3.944 -3.6852067e-02 -2.6991088e-02 +1969 3.946 -3.6798028e-02 -2.7047722e-02 +1970 3.948 -3.6743877e-02 -2.7103479e-02 +1971 3.95 -3.6689615e-02 -2.7158366e-02 +1972 3.952 -3.6635244e-02 -2.7212389e-02 +1973 3.954 -3.6580766e-02 -2.7265554e-02 +1974 3.956 -3.6526182e-02 -2.7317868e-02 +1975 3.958 -3.6471495e-02 -2.7369336e-02 +1976 3.96 -3.6416705e-02 -2.7419965e-02 +1977 3.962 -3.6361815e-02 -2.7469761e-02 +1978 3.964 -3.6306827e-02 -2.7518731e-02 +1979 3.966 -3.6251741e-02 -2.7566880e-02 +1980 3.968 -3.6196560e-02 -2.7614214e-02 +1981 3.97 -3.6141285e-02 -2.7660739e-02 +1982 3.972 -3.6085917e-02 -2.7706462e-02 +1983 3.974 -3.6030459e-02 -2.7751388e-02 +1984 3.976 -3.5974912e-02 -2.7795523e-02 +1985 3.978 -3.5919278e-02 -2.7838872e-02 +1986 3.98 -3.5863557e-02 -2.7881443e-02 +1987 3.982 -3.5807753e-02 -2.7923240e-02 +1988 3.984 -3.5751865e-02 -2.7964269e-02 +1989 3.986 -3.5695896e-02 -2.8004537e-02 +1990 3.988 -3.5639847e-02 -2.8044047e-02 +1991 3.99 -3.5583720e-02 -2.8082808e-02 +1992 3.992 -3.5527517e-02 -2.8120823e-02 +1993 3.994 -3.5471238e-02 -2.8158098e-02 +1994 3.996 -3.5414885e-02 -2.8194639e-02 +1995 3.998 -3.5358460e-02 -2.8230452e-02 +1996 4.0 -3.5301963e-02 -2.8265542e-02 +1997 4.002 -3.5245398e-02 -2.8299914e-02 +1998 4.004 -3.5188764e-02 -2.8333574e-02 +1999 4.006 -3.5132064e-02 -2.8366527e-02 +2000 4.008 -3.5075299e-02 -2.8398778e-02 +2001 4.01 -3.5018469e-02 -2.8430333e-02 +2002 4.012 -3.4961578e-02 -2.8461197e-02 +2003 4.014 -3.4904625e-02 -2.8491376e-02 +2004 4.016 -3.4847613e-02 -2.8520873e-02 +2005 4.018 -3.4790542e-02 -2.8549696e-02 +2006 4.02 -3.4733414e-02 -2.8577848e-02 +2007 4.022 -3.4676231e-02 -2.8605334e-02 +2008 4.024 -3.4618993e-02 -2.8632161e-02 +2009 4.026 -3.4561703e-02 -2.8658332e-02 +2010 4.028 -3.4504361e-02 -2.8683854e-02 +2011 4.03 -3.4446968e-02 -2.8708730e-02 +2012 4.032 -3.4389526e-02 -2.8732966e-02 +2013 4.034 -3.4332036e-02 -2.8756567e-02 +2014 4.036 -3.4274500e-02 -2.8779537e-02 +2015 4.038 -3.4216919e-02 -2.8801882e-02 +2016 4.04 -3.4159293e-02 -2.8823606e-02 +2017 4.042 -3.4101625e-02 -2.8844714e-02 +2018 4.044 -3.4043915e-02 -2.8865211e-02 +2019 4.046 -3.3986164e-02 -2.8885101e-02 +2020 4.048 -3.3928375e-02 -2.8904390e-02 +2021 4.05 -3.3870547e-02 -2.8923082e-02 +2022 4.052 -3.3812683e-02 -2.8941181e-02 +2023 4.054 -3.3754783e-02 -2.8958692e-02 +2024 4.056 -3.3696848e-02 -2.8975620e-02 +2025 4.058 -3.3638881e-02 -2.8991969e-02 +2026 4.06 -3.3580881e-02 -2.9007744e-02 +2027 4.062 -3.3522850e-02 -2.9022949e-02 +2028 4.064 -3.3464789e-02 -2.9037589e-02 +2029 4.066 -3.3406700e-02 -2.9051669e-02 +2030 4.068 -3.3348583e-02 -2.9065191e-02 +2031 4.07 -3.3290440e-02 -2.9078162e-02 +2032 4.072 -3.3232271e-02 -2.9090585e-02 +2033 4.074 -3.3174078e-02 -2.9102465e-02 +2034 4.076 -3.3115861e-02 -2.9113806e-02 +2035 4.078 -3.3057623e-02 -2.9124612e-02 +2036 4.08 -3.2999363e-02 -2.9134887e-02 +2037 4.082 -3.2941084e-02 -2.9144637e-02 +2038 4.084 -3.2882785e-02 -2.9153864e-02 +2039 4.086 -3.2824468e-02 -2.9162573e-02 +2040 4.088 -3.2766135e-02 -2.9170768e-02 +2041 4.09 -3.2707786e-02 -2.9178453e-02 +2042 4.092 -3.2649422e-02 -2.9185633e-02 +2043 4.094 -3.2591044e-02 -2.9192312e-02 +2044 4.096 -3.2532653e-02 -2.9198492e-02 +2045 4.098 -3.2474250e-02 -2.9204180e-02 +2046 4.1 -3.2415836e-02 -2.9209377e-02 +2047 4.102 -3.2357413e-02 -2.9214090e-02 +2048 4.104 -3.2298980e-02 -2.9218320e-02 +2049 4.106 -3.2240540e-02 -2.9222073e-02 +2050 4.108 -3.2182092e-02 -2.9225352e-02 +2051 4.11 -3.2123639e-02 -2.9228161e-02 +2052 4.112 -3.2065180e-02 -2.9230503e-02 +2053 4.114 -3.2006717e-02 -2.9232383e-02 +2054 4.116 -3.1948251e-02 -2.9233805e-02 +2055 4.118 -3.1889782e-02 -2.9234772e-02 +2056 4.12 -3.1831312e-02 -2.9235288e-02 +2057 4.122 -3.1772841e-02 -2.9235356e-02 +2058 4.124 -3.1714371e-02 -2.9234981e-02 +2059 4.126 -3.1655902e-02 -2.9234165e-02 +2060 4.128 -3.1597434e-02 -2.9232913e-02 +2061 4.13 -3.1538970e-02 -2.9231229e-02 +2062 4.132 -3.1480510e-02 -2.9229115e-02 +2063 4.134 -3.1422054e-02 -2.9226576e-02 +2064 4.136 -3.1363604e-02 -2.9223614e-02 +2065 4.138 -3.1305160e-02 -2.9220234e-02 +2066 4.14 -3.1246723e-02 -2.9216439e-02 +2067 4.142 -3.1188294e-02 -2.9212232e-02 +2068 4.144 -3.1129874e-02 -2.9207617e-02 +2069 4.146 -3.1071464e-02 -2.9202598e-02 +2070 4.148 -3.1013064e-02 -2.9197177e-02 +2071 4.15 -3.0954676e-02 -2.9191359e-02 +2072 4.152 -3.0896299e-02 -2.9185145e-02 +2073 4.154 -3.0837935e-02 -2.9178541e-02 +2074 4.156 -3.0779585e-02 -2.9171549e-02 +2075 4.158 -3.0721249e-02 -2.9164172e-02 +2076 4.16 -3.0662929e-02 -2.9156414e-02 +2077 4.162 -3.0604624e-02 -2.9148278e-02 +2078 4.164 -3.0546336e-02 -2.9139767e-02 +2079 4.166 -3.0488065e-02 -2.9130885e-02 +2080 4.168 -3.0429813e-02 -2.9121634e-02 +2081 4.17 -3.0371579e-02 -2.9112018e-02 +2082 4.172 -3.0313365e-02 -2.9102040e-02 +2083 4.174 -3.0255171e-02 -2.9091704e-02 +2084 4.176 -3.0196998e-02 -2.9081011e-02 +2085 4.178 -3.0138847e-02 -2.9069966e-02 +2086 4.18 -3.0080719e-02 -2.9058571e-02 +2087 4.182 -3.0022613e-02 -2.9046830e-02 +2088 4.184 -2.9964532e-02 -2.9034745e-02 +2089 4.186 -2.9906474e-02 -2.9022319e-02 +2090 4.188 -2.9848442e-02 -2.9009556e-02 +2091 4.19 -2.9790436e-02 -2.8996459e-02 +2092 4.192 -2.9732457e-02 -2.8983030e-02 +2093 4.194 -2.9674505e-02 -2.8969272e-02 +2094 4.196 -2.9616580e-02 -2.8955189e-02 +2095 4.198 -2.9558684e-02 -2.8940783e-02 +2096 4.2 -2.9500817e-02 -2.8926057e-02 +2097 4.202 -2.9442980e-02 -2.8911014e-02 +2098 4.204 -2.9385173e-02 -2.8895656e-02 +2099 4.206 -2.9327398e-02 -2.8879987e-02 +2100 4.208 -2.9269653e-02 -2.8864010e-02 +2101 4.21 -2.9211942e-02 -2.8847727e-02 +2102 4.212 -2.9154263e-02 -2.8831140e-02 +2103 4.214 -2.9096617e-02 -2.8814254e-02 +2104 4.216 -2.9039006e-02 -2.8797069e-02 +2105 4.218 -2.8981429e-02 -2.8779590e-02 +2106 4.22 -2.8923888e-02 -2.8761819e-02 +2107 4.222 -2.8866382e-02 -2.8743758e-02 +2108 4.224 -2.8808913e-02 -2.8725411e-02 +2109 4.226 -2.8751481e-02 -2.8706779e-02 +2110 4.228 -2.8694086e-02 -2.8687865e-02 +2111 4.23 -2.8636729e-02 -2.8668673e-02 +2112 4.232 -2.8579412e-02 -2.8649204e-02 +2113 4.234 -2.8522133e-02 -2.8629462e-02 +2114 4.236 -2.8464894e-02 -2.8609448e-02 +2115 4.238 -2.8407695e-02 -2.8589166e-02 +2116 4.24 -2.8350537e-02 -2.8568617e-02 +2117 4.242 -2.8293421e-02 -2.8547805e-02 +2118 4.244 -2.8236346e-02 -2.8526731e-02 +2119 4.246 -2.8179314e-02 -2.8505399e-02 +2120 4.248 -2.8122325e-02 -2.8483811e-02 +2121 4.25 -2.8065379e-02 -2.8461968e-02 +2122 4.252 -2.8008477e-02 -2.8439875e-02 +2123 4.254 -2.7951620e-02 -2.8417532e-02 +2124 4.256 -2.7894807e-02 -2.8394943e-02 +2125 4.258 -2.7838040e-02 -2.8372109e-02 +2126 4.26 -2.7781319e-02 -2.8349034e-02 +2127 4.262 -2.7724644e-02 -2.8325719e-02 +2128 4.264 -2.7668016e-02 -2.8302167e-02 +2129 4.266 -2.7611436e-02 -2.8278380e-02 +2130 4.268 -2.7554903e-02 -2.8254361e-02 +2131 4.27 -2.7498418e-02 -2.8230111e-02 +2132 4.272 -2.7441983e-02 -2.8205633e-02 +2133 4.274 -2.7385596e-02 -2.8180929e-02 +2134 4.276 -2.7329259e-02 -2.8156002e-02 +2135 4.278 -2.7272972e-02 -2.8130853e-02 +2136 4.28 -2.7216736e-02 -2.8105486e-02 +2137 4.282 -2.7160550e-02 -2.8079901e-02 +2138 4.284 -2.7104416e-02 -2.8054102e-02 +2139 4.286 -2.7048334e-02 -2.8028090e-02 +2140 4.288 -2.6992304e-02 -2.8001867e-02 +2141 4.29 -2.6936327e-02 -2.7975437e-02 +2142 4.292 -2.6880402e-02 -2.7948800e-02 +2143 4.294 -2.6824532e-02 -2.7921959e-02 +2144 4.296 -2.6768715e-02 -2.7894916e-02 +2145 4.298 -2.6712952e-02 -2.7867673e-02 +2146 4.3 -2.6657244e-02 -2.7840232e-02 +2147 4.302 -2.6601591e-02 -2.7812595e-02 +2148 4.304 -2.6545994e-02 -2.7784764e-02 +2149 4.306 -2.6490452e-02 -2.7756742e-02 +2150 4.308 -2.6434967e-02 -2.7728530e-02 +2151 4.31 -2.6379538e-02 -2.7700130e-02 +2152 4.312 -2.6324167e-02 -2.7671545e-02 +2153 4.314 -2.6268852e-02 -2.7642775e-02 +2154 4.316 -2.6213596e-02 -2.7613824e-02 +2155 4.318 -2.6158397e-02 -2.7584693e-02 +2156 4.32 -2.6103257e-02 -2.7555383e-02 +2157 4.322 -2.6048176e-02 -2.7525898e-02 +2158 4.324 -2.5993154e-02 -2.7496238e-02 +2159 4.326 -2.5938191e-02 -2.7466406e-02 +2160 4.328 -2.5883288e-02 -2.7436404e-02 +2161 4.33 -2.5828445e-02 -2.7406233e-02 +2162 4.332 -2.5773663e-02 -2.7375895e-02 +2163 4.334 -2.5718942e-02 -2.7345392e-02 +2164 4.336 -2.5664282e-02 -2.7314727e-02 +2165 4.338 -2.5609683e-02 -2.7283900e-02 +2166 4.34 -2.5555146e-02 -2.7252913e-02 +2167 4.342 -2.5500672e-02 -2.7221769e-02 +2168 4.344 -2.5446259e-02 -2.7190469e-02 +2169 4.346 -2.5391910e-02 -2.7159014e-02 +2170 4.348 -2.5337623e-02 -2.7127408e-02 +2171 4.35 -2.5283400e-02 -2.7095650e-02 +2172 4.352 -2.5229241e-02 -2.7063744e-02 +2173 4.354 -2.5175145e-02 -2.7031690e-02 +2174 4.356 -2.5121114e-02 -2.6999491e-02 +2175 4.358 -2.5067148e-02 -2.6967148e-02 +2176 4.36 -2.5013246e-02 -2.6934662e-02 +2177 4.362 -2.4959409e-02 -2.6902037e-02 +2178 4.364 -2.4905638e-02 -2.6869272e-02 +2179 4.366 -2.4851932e-02 -2.6836370e-02 +2180 4.368 -2.4798292e-02 -2.6803333e-02 +2181 4.37 -2.4744719e-02 -2.6770161e-02 +2182 4.372 -2.4691212e-02 -2.6736857e-02 +2183 4.374 -2.4637771e-02 -2.6703423e-02 +2184 4.376 -2.4584398e-02 -2.6669859e-02 +2185 4.378 -2.4531092e-02 -2.6636167e-02 +2186 4.38 -2.4477854e-02 -2.6602350e-02 +2187 4.382 -2.4424683e-02 -2.6568408e-02 +2188 4.384 -2.4371580e-02 -2.6534343e-02 +2189 4.386 -2.4318545e-02 -2.6500156e-02 +2190 4.388 -2.4265579e-02 -2.6465850e-02 +2191 4.39 -2.4212682e-02 -2.6431425e-02 +2192 4.392 -2.4159854e-02 -2.6396883e-02 +2193 4.394 -2.4107095e-02 -2.6362226e-02 +2194 4.396 -2.4054405e-02 -2.6327455e-02 +2195 4.398 -2.4001785e-02 -2.6292572e-02 +2196 4.4 -2.3949235e-02 -2.6257577e-02 +2197 4.402 -2.3896755e-02 -2.6222473e-02 +2198 4.404 -2.3844345e-02 -2.6187261e-02 +2199 4.406 -2.3792006e-02 -2.6151941e-02 +2200 4.408 -2.3739737e-02 -2.6116517e-02 +2201 4.41 -2.3687540e-02 -2.6080989e-02 +2202 4.412 -2.3635413e-02 -2.6045358e-02 +2203 4.414 -2.3583358e-02 -2.6009626e-02 +2204 4.416 -2.3531375e-02 -2.5973795e-02 +2205 4.418 -2.3479463e-02 -2.5937865e-02 +2206 4.42 -2.3427624e-02 -2.5901838e-02 +2207 4.422 -2.3375856e-02 -2.5865715e-02 +2208 4.424 -2.3324161e-02 -2.5829498e-02 +2209 4.426 -2.3272538e-02 -2.5793188e-02 +2210 4.428 -2.3220988e-02 -2.5756786e-02 +2211 4.43 -2.3169511e-02 -2.5720294e-02 +2212 4.432 -2.3118107e-02 -2.5683713e-02 +2213 4.434 -2.3066776e-02 -2.5647044e-02 +2214 4.436 -2.3015519e-02 -2.5610288e-02 +2215 4.438 -2.2964335e-02 -2.5573447e-02 +2216 4.44 -2.2913225e-02 -2.5536523e-02 +2217 4.442 -2.2862189e-02 -2.5499515e-02 +2218 4.444 -2.2811227e-02 -2.5462426e-02 +2219 4.446 -2.2760339e-02 -2.5425257e-02 +2220 4.448 -2.2709526e-02 -2.5388008e-02 +2221 4.45 -2.2658787e-02 -2.5350682e-02 +2222 4.452 -2.2608123e-02 -2.5313279e-02 +2223 4.454 -2.2557534e-02 -2.5275801e-02 +2224 4.456 -2.2507020e-02 -2.5238248e-02 +2225 4.458 -2.2456581e-02 -2.5200623e-02 +2226 4.46 -2.2406218e-02 -2.5162926e-02 +2227 4.462 -2.2355930e-02 -2.5125157e-02 +2228 4.464 -2.2305717e-02 -2.5087320e-02 +2229 4.466 -2.2255581e-02 -2.5049414e-02 +2230 4.468 -2.2205520e-02 -2.5011440e-02 +2231 4.47 -2.2155535e-02 -2.4973401e-02 +2232 4.472 -2.2105626e-02 -2.4935296e-02 +2233 4.474 -2.2055794e-02 -2.4897128e-02 +2234 4.476 -2.2006038e-02 -2.4858897e-02 +2235 4.478 -2.1956358e-02 -2.4820604e-02 +2236 4.48 -2.1906755e-02 -2.4782250e-02 +2237 4.482 -2.1857229e-02 -2.4743837e-02 +2238 4.484 -2.1807780e-02 -2.4705366e-02 +2239 4.486 -2.1758408e-02 -2.4666837e-02 +2240 4.488 -2.1709113e-02 -2.4628252e-02 +2241 4.49 -2.1659895e-02 -2.4589611e-02 +2242 4.492 -2.1610754e-02 -2.4550916e-02 +2243 4.494 -2.1561691e-02 -2.4512168e-02 +2244 4.496 -2.1512706e-02 -2.4473368e-02 +2245 4.498 -2.1463798e-02 -2.4434517e-02 +2246 4.5 -2.1414968e-02 -2.4395615e-02 +2247 4.502 -2.1366215e-02 -2.4356664e-02 +2248 4.504 -2.1317541e-02 -2.4317665e-02 +2249 4.506 -2.1268945e-02 -2.4278619e-02 +2250 4.508 -2.1220426e-02 -2.4239527e-02 +2251 4.51 -2.1171987e-02 -2.4200390e-02 +2252 4.512 -2.1123625e-02 -2.4161208e-02 +2253 4.514 -2.1075342e-02 -2.4121983e-02 +2254 4.516 -2.1027137e-02 -2.4082716e-02 +2255 4.518 -2.0979011e-02 -2.4043407e-02 +2256 4.52 -2.0930963e-02 -2.4004058e-02 +2257 4.522 -2.0882995e-02 -2.3964669e-02 +2258 4.524 -2.0835105e-02 -2.3925242e-02 +2259 4.526 -2.0787294e-02 -2.3885777e-02 +2260 4.528 -2.0739562e-02 -2.3846275e-02 +2261 4.53 -2.0691909e-02 -2.3806737e-02 +2262 4.532 -2.0644335e-02 -2.3767164e-02 +2263 4.534 -2.0596840e-02 -2.3727558e-02 +2264 4.536 -2.0549425e-02 -2.3687918e-02 +2265 4.538 -2.0502088e-02 -2.3648245e-02 +2266 4.54 -2.0454832e-02 -2.3608541e-02 +2267 4.542 -2.0407654e-02 -2.3568807e-02 +2268 4.544 -2.0360556e-02 -2.3529043e-02 +2269 4.546 -2.0313538e-02 -2.3489250e-02 +2270 4.548 -2.0266599e-02 -2.3449429e-02 +2271 4.55 -2.0219740e-02 -2.3409580e-02 +2272 4.552 -2.0172961e-02 -2.3369705e-02 +2273 4.554 -2.0126262e-02 -2.3329805e-02 +2274 4.556 -2.0079642e-02 -2.3289880e-02 +2275 4.558 -2.0033102e-02 -2.3249930e-02 +2276 4.56 -1.9986642e-02 -2.3209958e-02 +2277 4.562 -1.9940262e-02 -2.3169964e-02 +2278 4.564 -1.9893962e-02 -2.3129947e-02 +2279 4.566 -1.9847743e-02 -2.3089910e-02 +2280 4.568 -1.9801603e-02 -2.3049853e-02 +2281 4.57 -1.9755543e-02 -2.3009777e-02 +2282 4.572 -1.9709564e-02 -2.2969682e-02 +2283 4.574 -1.9663664e-02 -2.2929570e-02 +2284 4.576 -1.9617845e-02 -2.2889440e-02 +2285 4.578 -1.9572107e-02 -2.2849295e-02 +2286 4.58 -1.9526448e-02 -2.2809134e-02 +2287 4.582 -1.9480870e-02 -2.2768958e-02 +2288 4.584 -1.9435372e-02 -2.2728768e-02 +2289 4.586 -1.9389955e-02 -2.2688565e-02 +2290 4.588 -1.9344618e-02 -2.2648349e-02 +2291 4.59 -1.9299362e-02 -2.2608122e-02 +2292 4.592 -1.9254186e-02 -2.2567883e-02 +2293 4.594 -1.9209090e-02 -2.2527634e-02 +2294 4.596 -1.9164075e-02 -2.2487376e-02 +2295 4.598 -1.9119141e-02 -2.2447108e-02 +2296 4.6 -1.9074287e-02 -2.2406832e-02 +2297 4.602 -1.9029513e-02 -2.2366548e-02 +2298 4.604 -1.8984821e-02 -2.2326257e-02 +2299 4.606 -1.8940208e-02 -2.2285960e-02 +2300 4.608 -1.8895677e-02 -2.2245657e-02 +2301 4.61 -1.8851226e-02 -2.2205349e-02 +2302 4.612 -1.8806855e-02 -2.2165037e-02 +2303 4.614 -1.8762566e-02 -2.2124721e-02 +2304 4.616 -1.8718356e-02 -2.2084402e-02 +2305 4.618 -1.8674228e-02 -2.2044080e-02 +2306 4.62 -1.8630180e-02 -2.2003757e-02 +2307 4.622 -1.8586213e-02 -2.1963432e-02 +2308 4.624 -1.8542326e-02 -2.1923107e-02 +2309 4.626 -1.8498520e-02 -2.1882782e-02 +2310 4.628 -1.8454795e-02 -2.1842458e-02 +2311 4.63 -1.8411151e-02 -2.1802135e-02 +2312 4.632 -1.8367587e-02 -2.1761813e-02 +2313 4.634 -1.8324103e-02 -2.1721495e-02 +2314 4.636 -1.8280701e-02 -2.1681179e-02 +2315 4.638 -1.8237379e-02 -2.1640867e-02 +2316 4.64 -1.8194137e-02 -2.1600559e-02 +2317 4.642 -1.8150976e-02 -2.1560256e-02 +2318 4.644 -1.8107896e-02 -2.1519958e-02 +2319 4.646 -1.8064897e-02 -2.1479667e-02 +2320 4.648 -1.8021978e-02 -2.1439381e-02 +2321 4.65 -1.7979139e-02 -2.1399103e-02 +2322 4.652 -1.7936381e-02 -2.1358833e-02 +2323 4.654 -1.7893704e-02 -2.1318570e-02 +2324 4.656 -1.7851107e-02 -2.1278317e-02 +2325 4.658 -1.7808590e-02 -2.1238072e-02 +2326 4.66 -1.7766155e-02 -2.1197838e-02 +2327 4.662 -1.7723799e-02 -2.1157613e-02 +2328 4.664 -1.7681524e-02 -2.1117400e-02 +2329 4.666 -1.7639329e-02 -2.1077197e-02 +2330 4.668 -1.7597215e-02 -2.1037007e-02 +2331 4.67 -1.7555181e-02 -2.0996829e-02 +2332 4.672 -1.7513228e-02 -2.0956664e-02 +2333 4.674 -1.7471355e-02 -2.0916512e-02 +2334 4.676 -1.7429562e-02 -2.0876374e-02 +2335 4.678 -1.7387849e-02 -2.0836251e-02 +2336 4.68 -1.7346217e-02 -2.0796142e-02 +2337 4.682 -1.7304665e-02 -2.0756049e-02 +2338 4.684 -1.7263193e-02 -2.0715972e-02 +2339 4.686 -1.7221801e-02 -2.0675911e-02 +2340 4.688 -1.7180489e-02 -2.0635866e-02 +2341 4.69 -1.7139257e-02 -2.0595839e-02 +2342 4.692 -1.7098106e-02 -2.0555830e-02 +2343 4.694 -1.7057034e-02 -2.0515839e-02 +2344 4.696 -1.7016042e-02 -2.0475866e-02 +2345 4.698 -1.6975131e-02 -2.0435913e-02 +2346 4.7 -1.6934299e-02 -2.0395979e-02 +2347 4.702 -1.6893547e-02 -2.0356065e-02 +2348 4.704 -1.6852874e-02 -2.0316171e-02 +2349 4.706 -1.6812282e-02 -2.0276299e-02 +2350 4.708 -1.6771769e-02 -2.0236447e-02 +2351 4.71 -1.6731336e-02 -2.0196617e-02 +2352 4.712 -1.6690983e-02 -2.0156810e-02 +2353 4.714 -1.6650709e-02 -2.0117025e-02 +2354 4.716 -1.6610515e-02 -2.0077263e-02 +2355 4.718 -1.6570400e-02 -2.0037524e-02 +2356 4.72 -1.6530364e-02 -1.9997809e-02 +2357 4.722 -1.6490409e-02 -1.9958119e-02 +2358 4.724 -1.6450532e-02 -1.9918453e-02 +2359 4.726 -1.6410735e-02 -1.9878812e-02 +2360 4.728 -1.6371017e-02 -1.9839196e-02 +2361 4.73 -1.6331378e-02 -1.9799606e-02 +2362 4.732 -1.6291818e-02 -1.9760043e-02 +2363 4.734 -1.6252338e-02 -1.9720506e-02 +2364 4.736 -1.6212936e-02 -1.9680996e-02 +2365 4.738 -1.6173614e-02 -1.9641513e-02 +2366 4.74 -1.6134370e-02 -1.9602058e-02 +2367 4.742 -1.6095205e-02 -1.9562631e-02 +2368 4.744 -1.6056120e-02 -1.9523232e-02 +2369 4.746 -1.6017112e-02 -1.9483862e-02 +2370 4.748 -1.5978184e-02 -1.9444522e-02 +2371 4.75 -1.5939334e-02 -1.9405211e-02 +2372 4.752 -1.5900563e-02 -1.9365929e-02 +2373 4.754 -1.5861871e-02 -1.9326678e-02 +2374 4.756 -1.5823257e-02 -1.9287458e-02 +2375 4.758 -1.5784721e-02 -1.9248268e-02 +2376 4.76 -1.5746263e-02 -1.9209110e-02 +2377 4.762 -1.5707884e-02 -1.9169983e-02 +2378 4.764 -1.5669583e-02 -1.9130888e-02 +2379 4.766 -1.5631361e-02 -1.9091825e-02 +2380 4.768 -1.5593216e-02 -1.9052795e-02 +2381 4.77 -1.5555150e-02 -1.9013798e-02 +2382 4.772 -1.5517161e-02 -1.8974834e-02 +2383 4.774 -1.5479250e-02 -1.8935903e-02 +2384 4.776 -1.5441417e-02 -1.8897007e-02 +2385 4.778 -1.5403662e-02 -1.8858144e-02 +2386 4.78 -1.5365985e-02 -1.8819316e-02 +2387 4.782 -1.5328385e-02 -1.8780523e-02 +2388 4.784 -1.5290863e-02 -1.8741765e-02 +2389 4.786 -1.5253418e-02 -1.8703042e-02 +2390 4.788 -1.5216050e-02 -1.8664355e-02 +2391 4.79 -1.5178760e-02 -1.8625704e-02 +2392 4.792 -1.5141548e-02 -1.8587089e-02 +2393 4.794 -1.5104412e-02 -1.8548510e-02 +2394 4.796 -1.5067353e-02 -1.8509968e-02 +2395 4.798 -1.5030372e-02 -1.8471464e-02 +2396 4.8 -1.4993468e-02 -1.8432997e-02 +2397 4.802 -1.4956640e-02 -1.8394567e-02 +2398 4.804 -1.4919889e-02 -1.8356175e-02 +2399 4.806 -1.4883215e-02 -1.8317822e-02 +2400 4.808 -1.4846618e-02 -1.8279507e-02 +2401 4.81 -1.4810097e-02 -1.8241230e-02 +2402 4.812 -1.4773653e-02 -1.8202993e-02 +2403 4.814 -1.4737285e-02 -1.8164795e-02 +2404 4.816 -1.4700994e-02 -1.8126636e-02 +2405 4.818 -1.4664779e-02 -1.8088517e-02 +2406 4.82 -1.4628640e-02 -1.8050439e-02 +2407 4.822 -1.4592577e-02 -1.8012400e-02 +2408 4.824 -1.4556590e-02 -1.7974402e-02 +2409 4.826 -1.4520679e-02 -1.7936444e-02 +2410 4.828 -1.4484844e-02 -1.7898528e-02 +2411 4.83 -1.4449085e-02 -1.7860653e-02 +2412 4.832 -1.4413402e-02 -1.7822819e-02 +2413 4.834 -1.4377794e-02 -1.7785027e-02 +2414 4.836 -1.4342262e-02 -1.7747276e-02 +2415 4.838 -1.4306805e-02 -1.7709568e-02 +2416 4.84 -1.4271423e-02 -1.7671903e-02 +2417 4.842 -1.4236117e-02 -1.7634279e-02 +2418 4.844 -1.4200886e-02 -1.7596699e-02 +2419 4.846 -1.4165730e-02 -1.7559162e-02 +2420 4.848 -1.4130649e-02 -1.7521667e-02 +2421 4.85 -1.4095644e-02 -1.7484217e-02 +2422 4.852 -1.4060713e-02 -1.7446810e-02 +2423 4.854 -1.4025856e-02 -1.7409446e-02 +2424 4.856 -1.3991075e-02 -1.7372127e-02 +2425 4.858 -1.3956368e-02 -1.7334852e-02 +2426 4.86 -1.3921735e-02 -1.7297622e-02 +2427 4.862 -1.3887177e-02 -1.7260436e-02 +2428 4.864 -1.3852694e-02 -1.7223295e-02 +2429 4.866 -1.3818284e-02 -1.7186199e-02 +2430 4.868 -1.3783949e-02 -1.7149148e-02 +2431 4.87 -1.3749687e-02 -1.7112143e-02 +2432 4.872 -1.3715500e-02 -1.7075184e-02 +2433 4.874 -1.3681387e-02 -1.7038270e-02 +2434 4.876 -1.3647347e-02 -1.7001402e-02 +2435 4.878 -1.3613381e-02 -1.6964580e-02 +2436 4.88 -1.3579489e-02 -1.6927805e-02 +2437 4.882 -1.3545670e-02 -1.6891076e-02 +2438 4.884 -1.3511924e-02 -1.6854394e-02 +2439 4.886 -1.3478252e-02 -1.6817759e-02 +2440 4.888 -1.3444653e-02 -1.6781170e-02 +2441 4.89 -1.3411127e-02 -1.6744629e-02 +2442 4.892 -1.3377675e-02 -1.6708136e-02 +2443 4.894 -1.3344295e-02 -1.6671689e-02 +2444 4.896 -1.3310988e-02 -1.6635291e-02 +2445 4.898 -1.3277754e-02 -1.6598940e-02 +2446 4.9 -1.3244592e-02 -1.6562638e-02 +2447 4.902 -1.3211503e-02 -1.6526383e-02 +2448 4.904 -1.3178487e-02 -1.6490177e-02 +2449 4.906 -1.3145542e-02 -1.6454019e-02 +2450 4.908 -1.3112670e-02 -1.6417910e-02 +2451 4.91 -1.3079871e-02 -1.6381850e-02 +2452 4.912 -1.3047143e-02 -1.6345838e-02 +2453 4.914 -1.3014487e-02 -1.6309876e-02 +2454 4.916 -1.2981903e-02 -1.6273962e-02 +2455 4.918 -1.2949391e-02 -1.6238098e-02 +2456 4.92 -1.2916951e-02 -1.6202284e-02 +2457 4.922 -1.2884582e-02 -1.6166519e-02 +2458 4.924 -1.2852285e-02 -1.6130804e-02 +2459 4.926 -1.2820059e-02 -1.6095138e-02 +2460 4.928 -1.2787904e-02 -1.6059523e-02 +2461 4.93 -1.2755821e-02 -1.6023958e-02 +2462 4.932 -1.2723808e-02 -1.5988443e-02 +2463 4.934 -1.2691867e-02 -1.5952978e-02 +2464 4.936 -1.2659997e-02 -1.5917564e-02 +2465 4.938 -1.2628197e-02 -1.5882201e-02 +2466 4.94 -1.2596468e-02 -1.5846888e-02 +2467 4.942 -1.2564809e-02 -1.5811626e-02 +2468 4.944 -1.2533221e-02 -1.5776415e-02 +2469 4.946 -1.2501703e-02 -1.5741255e-02 +2470 4.948 -1.2470256e-02 -1.5706146e-02 +2471 4.95 -1.2438879e-02 -1.5671089e-02 +2472 4.952 -1.2407572e-02 -1.5636083e-02 +2473 4.954 -1.2376334e-02 -1.5601128e-02 +2474 4.956 -1.2345167e-02 -1.5566225e-02 +2475 4.958 -1.2314070e-02 -1.5531374e-02 +2476 4.96 -1.2283042e-02 -1.5496575e-02 +2477 4.962 -1.2252083e-02 -1.5461827e-02 +2478 4.964 -1.2221194e-02 -1.5427132e-02 +2479 4.966 -1.2190375e-02 -1.5392488e-02 +2480 4.968 -1.2159624e-02 -1.5357897e-02 +2481 4.97 -1.2128943e-02 -1.5323358e-02 +2482 4.972 -1.2098331e-02 -1.5288872e-02 +2483 4.974 -1.2067788e-02 -1.5254438e-02 +2484 4.976 -1.2037313e-02 -1.5220057e-02 +2485 4.978 -1.2006907e-02 -1.5185728e-02 +2486 4.98 -1.1976570e-02 -1.5151452e-02 +2487 4.982 -1.1946301e-02 -1.5117229e-02 +2488 4.984 -1.1916101e-02 -1.5083059e-02 +2489 4.986 -1.1885969e-02 -1.5048942e-02 +2490 4.988 -1.1855905e-02 -1.5014878e-02 +2491 4.99 -1.1825910e-02 -1.4980867e-02 +2492 4.992 -1.1795982e-02 -1.4946909e-02 +2493 4.994 -1.1766122e-02 -1.4913005e-02 +2494 4.996 -1.1736330e-02 -1.4879154e-02 +2495 4.998 -1.1706605e-02 -1.4845356e-02 +2496 5.0 -1.1676948e-02 -1.4811612e-02 +2497 5.002 -1.1647359e-02 -1.4777922e-02 +2498 5.004 -1.1617837e-02 -1.4744285e-02 +2499 5.006 -1.1588382e-02 -1.4710702e-02 +2500 5.008 -1.1558994e-02 -1.4677173e-02 +2501 5.01 -1.1529673e-02 -1.4643698e-02 +2502 5.012 -1.1500419e-02 -1.4610276e-02 +2503 5.014 -1.1471232e-02 -1.4576909e-02 +2504 5.016 -1.1442111e-02 -1.4543596e-02 +2505 5.018 -1.1413057e-02 -1.4510337e-02 +2506 5.02 -1.1384070e-02 -1.4477132e-02 +2507 5.022 -1.1355149e-02 -1.4443981e-02 +2508 5.024 -1.1326294e-02 -1.4410885e-02 +2509 5.026 -1.1297505e-02 -1.4377842e-02 +2510 5.028 -1.1268782e-02 -1.4344855e-02 +2511 5.03 -1.1240126e-02 -1.4311921e-02 +2512 5.032 -1.1211535e-02 -1.4279043e-02 +2513 5.034 -1.1183010e-02 -1.4246218e-02 +2514 5.036 -1.1154550e-02 -1.4213449e-02 +2515 5.038 -1.1126156e-02 -1.4180734e-02 +2516 5.04 -1.1097827e-02 -1.4148074e-02 +2517 5.042 -1.1069563e-02 -1.4115468e-02 +2518 5.044 -1.1041365e-02 -1.4082917e-02 +2519 5.046 -1.1013232e-02 -1.4050421e-02 +2520 5.048 -1.0985163e-02 -1.4017980e-02 +2521 5.05 -1.0957160e-02 -1.3985594e-02 +2522 5.052 -1.0929221e-02 -1.3953263e-02 +2523 5.054 -1.0901347e-02 -1.3920986e-02 +2524 5.056 -1.0873537e-02 -1.3888765e-02 +2525 5.058 -1.0845792e-02 -1.3856599e-02 +2526 5.06 -1.0818110e-02 -1.3824487e-02 +2527 5.062 -1.0790494e-02 -1.3792431e-02 +2528 5.064 -1.0762941e-02 -1.3760430e-02 +2529 5.066 -1.0735452e-02 -1.3728485e-02 +2530 5.068 -1.0708027e-02 -1.3696594e-02 +2531 5.07 -1.0680665e-02 -1.3664759e-02 +2532 5.072 -1.0653368e-02 -1.3632979e-02 +2533 5.074 -1.0626133e-02 -1.3601254e-02 +2534 5.076 -1.0598963e-02 -1.3569584e-02 +2535 5.078 -1.0571855e-02 -1.3537970e-02 +2536 5.08 -1.0544811e-02 -1.3506411e-02 +2537 5.082 -1.0517829e-02 -1.3474908e-02 +2538 5.084 -1.0490911e-02 -1.3443460e-02 +2539 5.086 -1.0464055e-02 -1.3412067e-02 +2540 5.088 -1.0437263e-02 -1.3380730e-02 +2541 5.09 -1.0410533e-02 -1.3349449e-02 +2542 5.092 -1.0383865e-02 -1.3318222e-02 +2543 5.094 -1.0357260e-02 -1.3287052e-02 +2544 5.096 -1.0330717e-02 -1.3255936e-02 +2545 5.098 -1.0304236e-02 -1.3224877e-02 +2546 5.1 -1.0277817e-02 -1.3193873e-02 +2547 5.102 -1.0251460e-02 -1.3162924e-02 +2548 5.104 -1.0225165e-02 -1.3132031e-02 +2549 5.106 -1.0198932e-02 -1.3101193e-02 +2550 5.108 -1.0172761e-02 -1.3070411e-02 +2551 5.11 -1.0146650e-02 -1.3039685e-02 +2552 5.112 -1.0120602e-02 -1.3009014e-02 +2553 5.114 -1.0094614e-02 -1.2978399e-02 +2554 5.116 -1.0068688e-02 -1.2947840e-02 +2555 5.118 -1.0042823e-02 -1.2917336e-02 +2556 5.12 -1.0017019e-02 -1.2886887e-02 +2557 5.122 -9.9912753e-03 -1.2856495e-02 +2558 5.124 -9.9655927e-03 -1.2826158e-02 +2559 5.126 -9.9399707e-03 -1.2795876e-02 +2560 5.128 -9.9144092e-03 -1.2765650e-02 +2561 5.13 -9.8889080e-03 -1.2735480e-02 +2562 5.132 -9.8634672e-03 -1.2705365e-02 +2563 5.134 -9.8380865e-03 -1.2675306e-02 +2564 5.136 -9.8127659e-03 -1.2645303e-02 +2565 5.138 -9.7875053e-03 -1.2615355e-02 +2566 5.14 -9.7623045e-03 -1.2585463e-02 +2567 5.142 -9.7371634e-03 -1.2555627e-02 +2568 5.144 -9.7120819e-03 -1.2525846e-02 +2569 5.146 -9.6870600e-03 -1.2496120e-02 +2570 5.148 -9.6620974e-03 -1.2466451e-02 +2571 5.15 -9.6371941e-03 -1.2436836e-02 +2572 5.152 -9.6123500e-03 -1.2407278e-02 +2573 5.154 -9.5875650e-03 -1.2377775e-02 +2574 5.156 -9.5628389e-03 -1.2348327e-02 +2575 5.158 -9.5381717e-03 -1.2318935e-02 +2576 5.16 -9.5135631e-03 -1.2289599e-02 +2577 5.162 -9.4890132e-03 -1.2260318e-02 +2578 5.164 -9.4645218e-03 -1.2231092e-02 +2579 5.166 -9.4400888e-03 -1.2201922e-02 +2580 5.168 -9.4157141e-03 -1.2172808e-02 +2581 5.17 -9.3913975e-03 -1.2143748e-02 +2582 5.172 -9.3671391e-03 -1.2114745e-02 +2583 5.174 -9.3429385e-03 -1.2085796e-02 +2584 5.176 -9.3187958e-03 -1.2056904e-02 +2585 5.178 -9.2947109e-03 -1.2028066e-02 +2586 5.18 -9.2706835e-03 -1.1999284e-02 +2587 5.182 -9.2467137e-03 -1.1970557e-02 +2588 5.184 -9.2228013e-03 -1.1941886e-02 +2589 5.186 -9.1989461e-03 -1.1913270e-02 +2590 5.188 -9.1751482e-03 -1.1884709e-02 +2591 5.19 -9.1514073e-03 -1.1856203e-02 +2592 5.192 -9.1277233e-03 -1.1827753e-02 +2593 5.194 -9.1040962e-03 -1.1799357e-02 +2594 5.196 -9.0805258e-03 -1.1771017e-02 +2595 5.198 -9.0570121e-03 -1.1742732e-02 +2596 5.2 -9.0335549e-03 -1.1714503e-02 +2597 5.202 -9.0101541e-03 -1.1686328e-02 +2598 5.204 -8.9868095e-03 -1.1658209e-02 +2599 5.206 -8.9635212e-03 -1.1630144e-02 +2600 5.208 -8.9402889e-03 -1.1602134e-02 +2601 5.21 -8.9171126e-03 -1.1574180e-02 +2602 5.212 -8.8939922e-03 -1.1546280e-02 +2603 5.214 -8.8709275e-03 -1.1518436e-02 +2604 5.216 -8.8479184e-03 -1.1490646e-02 +2605 5.218 -8.8249648e-03 -1.1462911e-02 +2606 5.22 -8.8020667e-03 -1.1435231e-02 +2607 5.222 -8.7792239e-03 -1.1407606e-02 +2608 5.224 -8.7564362e-03 -1.1380036e-02 +2609 5.226 -8.7337037e-03 -1.1352520e-02 +2610 5.228 -8.7110261e-03 -1.1325059e-02 +2611 5.23 -8.6884034e-03 -1.1297653e-02 +2612 5.232 -8.6658355e-03 -1.1270301e-02 +2613 5.234 -8.6433222e-03 -1.1243004e-02 +2614 5.236 -8.6208634e-03 -1.1215761e-02 +2615 5.238 -8.5984591e-03 -1.1188573e-02 +2616 5.24 -8.5761091e-03 -1.1161440e-02 +2617 5.242 -8.5538133e-03 -1.1134361e-02 +2618 5.244 -8.5315716e-03 -1.1107336e-02 +2619 5.246 -8.5093839e-03 -1.1080366e-02 +2620 5.248 -8.4872501e-03 -1.1053450e-02 +2621 5.25 -8.4651701e-03 -1.1026588e-02 +2622 5.252 -8.4431437e-03 -1.0999781e-02 +2623 5.254 -8.4211709e-03 -1.0973027e-02 +2624 5.256 -8.3992516e-03 -1.0946328e-02 +2625 5.258 -8.3773856e-03 -1.0919684e-02 +2626 5.26 -8.3555728e-03 -1.0893093e-02 +2627 5.262 -8.3338132e-03 -1.0866556e-02 +2628 5.264 -8.3121066e-03 -1.0840073e-02 +2629 5.266 -8.2904528e-03 -1.0813644e-02 +2630 5.268 -8.2688519e-03 -1.0787270e-02 +2631 5.27 -8.2473037e-03 -1.0760949e-02 +2632 5.272 -8.2258081e-03 -1.0734681e-02 +2633 5.274 -8.2043650e-03 -1.0708468e-02 +2634 5.276 -8.1829742e-03 -1.0682308e-02 +2635 5.278 -8.1616357e-03 -1.0656202e-02 +2636 5.28 -8.1403494e-03 -1.0630150e-02 +2637 5.282 -8.1191151e-03 -1.0604151e-02 +2638 5.284 -8.0979327e-03 -1.0578206e-02 +2639 5.286 -8.0768022e-03 -1.0552314e-02 +2640 5.288 -8.0557234e-03 -1.0526476e-02 +2641 5.29 -8.0346963e-03 -1.0500691e-02 +2642 5.292 -8.0137206e-03 -1.0474960e-02 +2643 5.294 -7.9927964e-03 -1.0449281e-02 +2644 5.296 -7.9719235e-03 -1.0423656e-02 +2645 5.298 -7.9511017e-03 -1.0398085e-02 +2646 5.3 -7.9303311e-03 -1.0372566e-02 +2647 5.302 -7.9096114e-03 -1.0347101e-02 +2648 5.304 -7.8889427e-03 -1.0321688e-02 +2649 5.306 -7.8683246e-03 -1.0296329e-02 +2650 5.308 -7.8477573e-03 -1.0271022e-02 +2651 5.31 -7.8272405e-03 -1.0245768e-02 +2652 5.312 -7.8067742e-03 -1.0220568e-02 +2653 5.314 -7.7863582e-03 -1.0195420e-02 +2654 5.316 -7.7659925e-03 -1.0170324e-02 +2655 5.318 -7.7456769e-03 -1.0145282e-02 +2656 5.32 -7.7254113e-03 -1.0120292e-02 +2657 5.322 -7.7051957e-03 -1.0095354e-02 +2658 5.324 -7.6850299e-03 -1.0070469e-02 +2659 5.326 -7.6649138e-03 -1.0045637e-02 +2660 5.328 -7.6448473e-03 -1.0020857e-02 +2661 5.33 -7.6248303e-03 -9.9961290e-03 +2662 5.332 -7.6048627e-03 -9.9714535e-03 +2663 5.334 -7.5849445e-03 -9.9468303e-03 +2664 5.336 -7.5650754e-03 -9.9222592e-03 +2665 5.338 -7.5452554e-03 -9.8977403e-03 +2666 5.34 -7.5254844e-03 -9.8732734e-03 +2667 5.342 -7.5057623e-03 -9.8488586e-03 +2668 5.344 -7.4860889e-03 -9.8244956e-03 +2669 5.346 -7.4664642e-03 -9.8001846e-03 +2670 5.348 -7.4468881e-03 -9.7759253e-03 +2671 5.35 -7.4273605e-03 -9.7517178e-03 +2672 5.352 -7.4078812e-03 -9.7275621e-03 +2673 5.354 -7.3884502e-03 -9.7034579e-03 +2674 5.356 -7.3690674e-03 -9.6794054e-03 +2675 5.358 -7.3497326e-03 -9.6554043e-03 +2676 5.36 -7.3304457e-03 -9.6314548e-03 +2677 5.362 -7.3112067e-03 -9.6075566e-03 +2678 5.364 -7.2920155e-03 -9.5837098e-03 +2679 5.366 -7.2728718e-03 -9.5599142e-03 +2680 5.368 -7.2537758e-03 -9.5361699e-03 +2681 5.37 -7.2347271e-03 -9.5124767e-03 +2682 5.372 -7.2157258e-03 -9.4888346e-03 +2683 5.374 -7.1967718e-03 -9.4652435e-03 +2684 5.376 -7.1778648e-03 -9.4417034e-03 +2685 5.378 -7.1590049e-03 -9.4182142e-03 +2686 5.38 -7.1401919e-03 -9.3947759e-03 +2687 5.382 -7.1214258e-03 -9.3713883e-03 +2688 5.384 -7.1027063e-03 -9.3480514e-03 +2689 5.386 -7.0840335e-03 -9.3247651e-03 +2690 5.388 -7.0654072e-03 -9.3015295e-03 +2691 5.39 -7.0468274e-03 -9.2783443e-03 +2692 5.392 -7.0282938e-03 -9.2552097e-03 +2693 5.394 -7.0098065e-03 -9.2321254e-03 +2694 5.396 -6.9913653e-03 -9.2090914e-03 +2695 5.398 -6.9729701e-03 -9.1861076e-03 +2696 5.4 -6.9546208e-03 -9.1631741e-03 +2697 5.402 -6.9363174e-03 -9.1402907e-03 +2698 5.404 -6.9180596e-03 -9.1174573e-03 +2699 5.406 -6.8998475e-03 -9.0946740e-03 +2700 5.408 -6.8816809e-03 -9.0719405e-03 +2701 5.41 -6.8635597e-03 -9.0492570e-03 +2702 5.412 -6.8454838e-03 -9.0266232e-03 +2703 5.414 -6.8274532e-03 -9.0040391e-03 +2704 5.416 -6.8094677e-03 -8.9815047e-03 +2705 5.418 -6.7915271e-03 -8.9590199e-03 +2706 5.42 -6.7736315e-03 -8.9365846e-03 +2707 5.422 -6.7557808e-03 -8.9141987e-03 +2708 5.424 -6.7379747e-03 -8.8918622e-03 +2709 5.426 -6.7202133e-03 -8.8695751e-03 +2710 5.428 -6.7024964e-03 -8.8473372e-03 +2711 5.43 -6.6848239e-03 -8.8251484e-03 +2712 5.432 -6.6671958e-03 -8.8030088e-03 +2713 5.434 -6.6496118e-03 -8.7809182e-03 +2714 5.436 -6.6320721e-03 -8.7588766e-03 +2715 5.438 -6.6145763e-03 -8.7368839e-03 +2716 5.44 -6.5971245e-03 -8.7149400e-03 +2717 5.442 -6.5797165e-03 -8.6930449e-03 +2718 5.444 -6.5623523e-03 -8.6711985e-03 +2719 5.446 -6.5450317e-03 -8.6494007e-03 +2720 5.448 -6.5277546e-03 -8.6276514e-03 +2721 5.45 -6.5105210e-03 -8.6059506e-03 +2722 5.452 -6.4933308e-03 -8.5842982e-03 +2723 5.454 -6.4761838e-03 -8.5626942e-03 +2724 5.456 -6.4590800e-03 -8.5411385e-03 +2725 5.458 -6.4420192e-03 -8.5196309e-03 +2726 5.46 -6.4250014e-03 -8.4981714e-03 +2727 5.462 -6.4080265e-03 -8.4767601e-03 +2728 5.464 -6.3910944e-03 -8.4553967e-03 +2729 5.466 -6.3742049e-03 -8.4340812e-03 +2730 5.468 -6.3573580e-03 -8.4128135e-03 +2731 5.47 -6.3405536e-03 -8.3915936e-03 +2732 5.472 -6.3237916e-03 -8.3704214e-03 +2733 5.474 -6.3070719e-03 -8.3492969e-03 +2734 5.476 -6.2903944e-03 -8.3282198e-03 +2735 5.478 -6.2737590e-03 -8.3071903e-03 +2736 5.48 -6.2571656e-03 -8.2862082e-03 +2737 5.482 -6.2406141e-03 -8.2652734e-03 +2738 5.484 -6.2241045e-03 -8.2443858e-03 +2739 5.486 -6.2076365e-03 -8.2235455e-03 +2740 5.488 -6.1912103e-03 -8.2027522e-03 +2741 5.49 -6.1748255e-03 -8.1820060e-03 +2742 5.492 -6.1584822e-03 -8.1613068e-03 +2743 5.494 -6.1421802e-03 -8.1406545e-03 +2744 5.496 -6.1259195e-03 -8.1200490e-03 +2745 5.498 -6.1097000e-03 -8.0994902e-03 +2746 5.5 -6.0935216e-03 -8.0789781e-03 +2747 5.502 -6.0773841e-03 -8.0585126e-03 +2748 5.504 -6.0612875e-03 -8.0380937e-03 +2749 5.506 -6.0452317e-03 -8.0177211e-03 +2750 5.508 -6.0292166e-03 -7.9973950e-03 +2751 5.51 -6.0132421e-03 -7.9771152e-03 +2752 5.512 -5.9973081e-03 -7.9568816e-03 +2753 5.514 -5.9814145e-03 -7.9366941e-03 +2754 5.516 -5.9655613e-03 -7.9165528e-03 +2755 5.518 -5.9497483e-03 -7.8964574e-03 +2756 5.52 -5.9339754e-03 -7.8764080e-03 +2757 5.522 -5.9182426e-03 -7.8564044e-03 +2758 5.524 -5.9025498e-03 -7.8364466e-03 +2759 5.526 -5.8868968e-03 -7.8165345e-03 +2760 5.528 -5.8712836e-03 -7.7966681e-03 +2761 5.53 -5.8557101e-03 -7.7768472e-03 +2762 5.532 -5.8401762e-03 -7.7570718e-03 +2763 5.534 -5.8246818e-03 -7.7373418e-03 +2764 5.536 -5.8092268e-03 -7.7176572e-03 +2765 5.538 -5.7938111e-03 -7.6980177e-03 +2766 5.54 -5.7784347e-03 -7.6784235e-03 +2767 5.542 -5.7630974e-03 -7.6588744e-03 +2768 5.544 -5.7477991e-03 -7.6393703e-03 +2769 5.546 -5.7325399e-03 -7.6199112e-03 +2770 5.548 -5.7173195e-03 -7.6004969e-03 +2771 5.55 -5.7021378e-03 -7.5811275e-03 +2772 5.552 -5.6869949e-03 -7.5618028e-03 +2773 5.554 -5.6718906e-03 -7.5425227e-03 +2774 5.556 -5.6568248e-03 -7.5232872e-03 +2775 5.558 -5.6417974e-03 -7.5040962e-03 +2776 5.56 -5.6268084e-03 -7.4849497e-03 +2777 5.562 -5.6118576e-03 -7.4658475e-03 +2778 5.564 -5.5969450e-03 -7.4467895e-03 +2779 5.566 -5.5820704e-03 -7.4277758e-03 +2780 5.568 -5.5672338e-03 -7.4088062e-03 +2781 5.57 -5.5524352e-03 -7.3898806e-03 +2782 5.572 -5.5376743e-03 -7.3709990e-03 +2783 5.574 -5.5229511e-03 -7.3521613e-03 +2784 5.576 -5.5082656e-03 -7.3333674e-03 +2785 5.578 -5.4936176e-03 -7.3146172e-03 +2786 5.58 -5.4790071e-03 -7.2959107e-03 +2787 5.582 -5.4644340e-03 -7.2772478e-03 +2788 5.584 -5.4498981e-03 -7.2586285e-03 +2789 5.586 -5.4353994e-03 -7.2400525e-03 +2790 5.588 -5.4209379e-03 -7.2215199e-03 +2791 5.59 -5.4065133e-03 -7.2030306e-03 +2792 5.592 -5.3921257e-03 -7.1845845e-03 +2793 5.594 -5.3777749e-03 -7.1661815e-03 +2794 5.596 -5.3634609e-03 -7.1478216e-03 +2795 5.598 -5.3491836e-03 -7.1295046e-03 +2796 5.6 -5.3349429e-03 -7.1112306e-03 +2797 5.602 -5.3207387e-03 -7.0929994e-03 +2798 5.604 -5.3065709e-03 -7.0748109e-03 +2799 5.606 -5.2924394e-03 -7.0566651e-03 +2800 5.608 -5.2783442e-03 -7.0385619e-03 +2801 5.61 -5.2642851e-03 -7.0205012e-03 +2802 5.612 -5.2502622e-03 -7.0024829e-03 +2803 5.614 -5.2362752e-03 -6.9845070e-03 +2804 5.616 -5.2223241e-03 -6.9665734e-03 +2805 5.618 -5.2084088e-03 -6.9486820e-03 +2806 5.62 -5.1945293e-03 -6.9308327e-03 +2807 5.622 -5.1806855e-03 -6.9130255e-03 +2808 5.624 -5.1668772e-03 -6.8952603e-03 +2809 5.626 -5.1531044e-03 -6.8775370e-03 +2810 5.628 -5.1393670e-03 -6.8598555e-03 +2811 5.63 -5.1256650e-03 -6.8422157e-03 +2812 5.632 -5.1119981e-03 -6.8246176e-03 +2813 5.634 -5.0983665e-03 -6.8070612e-03 +2814 5.636 -5.0847699e-03 -6.7895462e-03 +2815 5.638 -5.0712083e-03 -6.7720727e-03 +2816 5.64 -5.0576816e-03 -6.7546405e-03 +2817 5.642 -5.0441897e-03 -6.7372497e-03 +2818 5.644 -5.0307325e-03 -6.7199000e-03 +2819 5.646 -5.0173100e-03 -6.7025915e-03 +2820 5.648 -5.0039221e-03 -6.6853241e-03 +2821 5.65 -4.9905687e-03 -6.6680976e-03 +2822 5.652 -4.9772497e-03 -6.6509120e-03 +2823 5.654 -4.9639650e-03 -6.6337673e-03 +2824 5.656 -4.9507146e-03 -6.6166633e-03 +2825 5.658 -4.9374984e-03 -6.5996000e-03 +2826 5.66 -4.9243162e-03 -6.5825773e-03 +2827 5.662 -4.9111680e-03 -6.5655951e-03 +2828 5.664 -4.8980538e-03 -6.5486534e-03 +2829 5.666 -4.8849734e-03 -6.5317520e-03 +2830 5.668 -4.8719267e-03 -6.5148909e-03 +2831 5.67 -4.8589138e-03 -6.4980701e-03 +2832 5.672 -4.8459344e-03 -6.4812893e-03 +2833 5.674 -4.8329886e-03 -6.4645487e-03 +2834 5.676 -4.8200762e-03 -6.4478480e-03 +2835 5.678 -4.8071972e-03 -6.4311873e-03 +2836 5.68 -4.7943514e-03 -6.4145663e-03 +2837 5.682 -4.7815389e-03 -6.3979852e-03 +2838 5.684 -4.7687595e-03 -6.3814437e-03 +2839 5.686 -4.7560131e-03 -6.3649418e-03 +2840 5.688 -4.7432997e-03 -6.3484795e-03 +2841 5.69 -4.7306192e-03 -6.3320566e-03 +2842 5.692 -4.7179714e-03 -6.3156730e-03 +2843 5.694 -4.7053564e-03 -6.2993288e-03 +2844 5.696 -4.6927741e-03 -6.2830238e-03 +2845 5.698 -4.6802243e-03 -6.2667580e-03 +2846 5.7 -4.6677070e-03 -6.2505312e-03 +2847 5.702 -4.6552222e-03 -6.2343434e-03 +2848 5.704 -4.6427696e-03 -6.2181946e-03 +2849 5.706 -4.6303494e-03 -6.2020846e-03 +2850 5.708 -4.6179613e-03 -6.1860133e-03 +2851 5.71 -4.6056053e-03 -6.1699808e-03 +2852 5.712 -4.5932813e-03 -6.1539868e-03 +2853 5.714 -4.5809893e-03 -6.1380314e-03 +2854 5.716 -4.5687292e-03 -6.1221145e-03 +2855 5.718 -4.5565008e-03 -6.1062359e-03 +2856 5.72 -4.5443042e-03 -6.0903957e-03 +2857 5.722 -4.5321392e-03 -6.0745937e-03 +2858 5.724 -4.5200058e-03 -6.0588299e-03 +2859 5.726 -4.5079039e-03 -6.0431041e-03 +2860 5.728 -4.4958334e-03 -6.0274164e-03 +2861 5.73 -4.4837942e-03 -6.0117666e-03 +2862 5.732 -4.4717863e-03 -5.9961547e-03 +2863 5.734 -4.4598095e-03 -5.9805805e-03 +2864 5.736 -4.4478639e-03 -5.9650440e-03 +2865 5.738 -4.4359493e-03 -5.9495452e-03 +2866 5.74 -4.4240657e-03 -5.9340840e-03 +2867 5.742 -4.4122130e-03 -5.9186602e-03 +2868 5.744 -4.4003910e-03 -5.9032738e-03 +2869 5.746 -4.3885999e-03 -5.8879248e-03 +2870 5.748 -4.3768393e-03 -5.8726130e-03 +2871 5.75 -4.3651094e-03 -5.8573384e-03 +2872 5.752 -4.3534099e-03 -5.8421010e-03 +2873 5.754 -4.3417409e-03 -5.8269005e-03 +2874 5.756 -4.3301023e-03 -5.8117370e-03 +2875 5.758 -4.3184940e-03 -5.7966104e-03 +2876 5.76 -4.3069159e-03 -5.7815206e-03 +2877 5.762 -4.2953679e-03 -5.7664675e-03 +2878 5.764 -4.2838500e-03 -5.7514511e-03 +2879 5.766 -4.2723620e-03 -5.7364713e-03 +2880 5.768 -4.2609040e-03 -5.7215280e-03 +2881 5.77 -4.2494759e-03 -5.7066211e-03 +2882 5.772 -4.2380775e-03 -5.6917506e-03 +2883 5.774 -4.2267089e-03 -5.6769164e-03 +2884 5.776 -4.2153698e-03 -5.6621184e-03 +2885 5.778 -4.2040604e-03 -5.6473565e-03 +2886 5.78 -4.1927804e-03 -5.6326307e-03 +2887 5.782 -4.1815298e-03 -5.6179409e-03 +2888 5.784 -4.1703086e-03 -5.6032870e-03 +2889 5.786 -4.1591167e-03 -5.5886689e-03 +2890 5.788 -4.1479539e-03 -5.5740866e-03 +2891 5.79 -4.1368203e-03 -5.5595401e-03 +2892 5.792 -4.1257157e-03 -5.5450291e-03 +2893 5.794 -4.1146402e-03 -5.5305537e-03 +2894 5.796 -4.1035935e-03 -5.5161137e-03 +2895 5.798 -4.0925757e-03 -5.5017092e-03 +2896 5.8 -4.0815866e-03 -5.4873400e-03 +2897 5.802 -4.0706263e-03 -5.4730060e-03 +2898 5.804 -4.0596946e-03 -5.4587072e-03 +2899 5.806 -4.0487914e-03 -5.4444435e-03 +2900 5.808 -4.0379168e-03 -5.4302149e-03 +2901 5.81 -4.0270706e-03 -5.4160212e-03 +2902 5.812 -4.0162527e-03 -5.4018624e-03 +2903 5.814 -4.0054631e-03 -5.3877385e-03 +2904 5.816 -3.9947017e-03 -5.3736492e-03 +2905 5.818 -3.9839685e-03 -5.3595947e-03 +2906 5.82 -3.9732633e-03 -5.3455747e-03 +2907 5.822 -3.9625861e-03 -5.3315893e-03 +2908 5.824 -3.9519369e-03 -5.3176383e-03 +2909 5.826 -3.9413156e-03 -5.3037217e-03 +2910 5.828 -3.9307220e-03 -5.2898394e-03 +2911 5.83 -3.9201562e-03 -5.2759913e-03 +2912 5.832 -3.9096180e-03 -5.2621774e-03 +2913 5.834 -3.8991075e-03 -5.2483976e-03 +2914 5.836 -3.8886244e-03 -5.2346518e-03 +2915 5.838 -3.8781688e-03 -5.2209399e-03 +2916 5.84 -3.8677406e-03 -5.2072620e-03 +2917 5.842 -3.8573398e-03 -5.1936178e-03 +2918 5.844 -3.8469661e-03 -5.1800074e-03 +2919 5.846 -3.8366197e-03 -5.1664306e-03 +2920 5.848 -3.8263004e-03 -5.1528874e-03 +2921 5.85 -3.8160081e-03 -5.1393777e-03 +2922 5.852 -3.8057429e-03 -5.1259015e-03 +2923 5.854 -3.7955045e-03 -5.1124586e-03 +2924 5.856 -3.7852930e-03 -5.0990491e-03 +2925 5.858 -3.7751083e-03 -5.0856727e-03 +2926 5.86 -3.7649503e-03 -5.0723296e-03 +2927 5.862 -3.7548189e-03 -5.0590195e-03 +2928 5.864 -3.7447142e-03 -5.0457424e-03 +2929 5.866 -3.7346359e-03 -5.0324983e-03 +2930 5.868 -3.7245842e-03 -5.0192871e-03 +2931 5.87 -3.7145588e-03 -5.0061086e-03 +2932 5.872 -3.7045597e-03 -4.9929629e-03 +2933 5.874 -3.6945869e-03 -4.9798499e-03 +2934 5.876 -3.6846403e-03 -4.9667694e-03 +2935 5.878 -3.6747198e-03 -4.9537215e-03 +2936 5.88 -3.6648254e-03 -4.9407060e-03 +2937 5.882 -3.6549570e-03 -4.9277229e-03 +2938 5.884 -3.6451145e-03 -4.9147722e-03 +2939 5.886 -3.6352978e-03 -4.9018536e-03 +2940 5.888 -3.6255070e-03 -4.8889673e-03 +2941 5.89 -3.6157420e-03 -4.8761130e-03 +2942 5.892 -3.6060026e-03 -4.8632908e-03 +2943 5.894 -3.5962888e-03 -4.8505005e-03 +2944 5.896 -3.5866005e-03 -4.8377422e-03 +2945 5.898 -3.5769378e-03 -4.8250156e-03 +2946 5.9 -3.5673005e-03 -4.8123208e-03 +2947 5.902 -3.5576885e-03 -4.7996577e-03 +2948 5.904 -3.5481018e-03 -4.7870263e-03 +2949 5.906 -3.5385404e-03 -4.7744263e-03 +2950 5.908 -3.5290041e-03 -4.7618579e-03 +2951 5.91 -3.5194929e-03 -4.7493208e-03 +2952 5.912 -3.5100068e-03 -4.7368151e-03 +2953 5.914 -3.5005456e-03 -4.7243407e-03 +2954 5.916 -3.4911094e-03 -4.7118974e-03 +2955 5.918 -3.4816980e-03 -4.6994853e-03 +2956 5.92 -3.4723114e-03 -4.6871043e-03 +2957 5.922 -3.4629496e-03 -4.6747542e-03 +2958 5.924 -3.4536124e-03 -4.6624351e-03 +2959 5.926 -3.4442998e-03 -4.6501469e-03 +2960 5.928 -3.4350118e-03 -4.6378894e-03 +2961 5.93 -3.4257482e-03 -4.6256627e-03 +2962 5.932 -3.4165091e-03 -4.6134666e-03 +2963 5.934 -3.4072943e-03 -4.6013012e-03 +2964 5.936 -3.3981039e-03 -4.5891662e-03 +2965 5.938 -3.3889377e-03 -4.5770617e-03 +2966 5.94 -3.3797956e-03 -4.5649876e-03 +2967 5.942 -3.3706777e-03 -4.5529438e-03 +2968 5.944 -3.3615838e-03 -4.5409302e-03 +2969 5.946 -3.3525139e-03 -4.5289468e-03 +2970 5.948 -3.3434680e-03 -4.5169936e-03 +2971 5.95 -3.3344460e-03 -4.5050704e-03 +2972 5.952 -3.3254477e-03 -4.4931772e-03 +2973 5.954 -3.3164732e-03 -4.4813139e-03 +2974 5.956 -3.3075224e-03 -4.4694804e-03 +2975 5.958 -3.2985953e-03 -4.4576768e-03 +2976 5.96 -3.2896917e-03 -4.4459028e-03 +2977 5.962 -3.2808117e-03 -4.4341585e-03 +2978 5.964 -3.2719551e-03 -4.4224438e-03 +2979 5.966 -3.2631219e-03 -4.4107586e-03 +2980 5.968 -3.2543120e-03 -4.3991029e-03 +2981 5.97 -3.2455254e-03 -4.3874765e-03 +2982 5.972 -3.2367621e-03 -4.3758795e-03 +2983 5.974 -3.2280219e-03 -4.3643117e-03 +2984 5.976 -3.2193048e-03 -4.3527731e-03 +2985 5.978 -3.2106108e-03 -4.3412636e-03 +2986 5.98 -3.2019397e-03 -4.3297832e-03 +2987 5.982 -3.1932916e-03 -4.3183318e-03 +2988 5.984 -3.1846664e-03 -4.3069092e-03 +2989 5.986 -3.1760640e-03 -4.2955156e-03 +2990 5.988 -3.1674843e-03 -4.2841508e-03 +2991 5.99 -3.1589273e-03 -4.2728146e-03 +2992 5.992 -3.1503930e-03 -4.2615072e-03 +2993 5.994 -3.1418813e-03 -4.2502283e-03 +2994 5.996 -3.1333921e-03 -4.2389780e-03 +2995 5.998 -3.1249254e-03 -4.2277562e-03 +2996 6.0 -3.1164811e-03 -4.2165627e-03 +2997 6.002 -3.1080591e-03 -4.2053976e-03 +2998 6.004 -3.0996594e-03 -4.1942608e-03 +2999 6.006 -3.0912820e-03 -4.1831522e-03 +3000 6.008 -3.0829268e-03 -4.1720717e-03 +3001 6.01 -3.0745937e-03 -4.1610194e-03 +3002 6.012 -3.0662827e-03 -4.1499950e-03 +3003 6.014 -3.0579937e-03 -4.1389986e-03 +3004 6.016 -3.0497267e-03 -4.1280301e-03 +3005 6.018 -3.0414816e-03 -4.1170894e-03 +3006 6.02 -3.0332583e-03 -4.1061765e-03 +3007 6.022 -3.0250569e-03 -4.0952913e-03 +3008 6.024 -3.0168771e-03 -4.0844338e-03 +3009 6.026 -3.0087191e-03 -4.0736038e-03 +3010 6.028 -3.0005827e-03 -4.0628013e-03 +3011 6.03 -2.9924679e-03 -4.0520263e-03 +3012 6.032 -2.9843746e-03 -4.0412786e-03 +3013 6.034 -2.9763028e-03 -4.0305583e-03 +3014 6.036 -2.9682523e-03 -4.0198653e-03 +3015 6.038 -2.9602233e-03 -4.0091994e-03 +3016 6.04 -2.9522155e-03 -3.9985607e-03 +3017 6.042 -2.9442290e-03 -3.9879491e-03 +3018 6.044 -2.9362637e-03 -3.9773645e-03 +3019 6.046 -2.9283195e-03 -3.9668068e-03 +3020 6.048 -2.9203965e-03 -3.9562760e-03 +3021 6.05 -2.9124944e-03 -3.9457720e-03 +3022 6.052 -2.9046134e-03 -3.9352948e-03 +3023 6.054 -2.8967532e-03 -3.9248443e-03 +3024 6.056 -2.8889140e-03 -3.9144205e-03 +3025 6.058 -2.8810955e-03 -3.9040232e-03 +3026 6.06 -2.8732979e-03 -3.8936524e-03 +3027 6.062 -2.8655209e-03 -3.8833081e-03 +3028 6.064 -2.8577646e-03 -3.8729902e-03 +3029 6.066 -2.8500289e-03 -3.8626986e-03 +3030 6.068 -2.8423138e-03 -3.8524333e-03 +3031 6.07 -2.8346192e-03 -3.8421942e-03 +3032 6.072 -2.8269450e-03 -3.8319813e-03 +3033 6.074 -2.8192912e-03 -3.8217944e-03 +3034 6.076 -2.8116578e-03 -3.8116336e-03 +3035 6.078 -2.8040447e-03 -3.8014988e-03 +3036 6.08 -2.7964518e-03 -3.7913898e-03 +3037 6.082 -2.7888791e-03 -3.7813067e-03 +3038 6.084 -2.7813265e-03 -3.7712494e-03 +3039 6.086 -2.7737941e-03 -3.7612178e-03 +3040 6.088 -2.7662817e-03 -3.7512119e-03 +3041 6.09 -2.7587892e-03 -3.7412316e-03 +3042 6.092 -2.7513167e-03 -3.7312769e-03 +3043 6.094 -2.7438641e-03 -3.7213476e-03 +3044 6.096 -2.7364313e-03 -3.7114438e-03 +3045 6.098 -2.7290183e-03 -3.7015653e-03 +3046 6.1 -2.7216250e-03 -3.6917121e-03 +3047 6.102 -2.7142514e-03 -3.6818842e-03 +3048 6.104 -2.7068975e-03 -3.6720815e-03 +3049 6.106 -2.6995631e-03 -3.6623039e-03 +3050 6.108 -2.6922482e-03 -3.6525514e-03 +3051 6.11 -2.6849529e-03 -3.6428239e-03 +3052 6.112 -2.6776769e-03 -3.6331214e-03 +3053 6.114 -2.6704204e-03 -3.6234437e-03 +3054 6.116 -2.6631831e-03 -3.6137909e-03 +3055 6.118 -2.6559652e-03 -3.6041629e-03 +3056 6.12 -2.6487665e-03 -3.5945596e-03 +3057 6.122 -2.6415869e-03 -3.5849810e-03 +3058 6.124 -2.6344265e-03 -3.5754269e-03 +3059 6.126 -2.6272852e-03 -3.5658975e-03 +3060 6.128 -2.6201629e-03 -3.5563925e-03 +3061 6.13 -2.6130596e-03 -3.5469119e-03 +3062 6.132 -2.6059753e-03 -3.5374557e-03 +3063 6.134 -2.5989098e-03 -3.5280239e-03 +3064 6.136 -2.5918631e-03 -3.5186163e-03 +3065 6.138 -2.5848353e-03 -3.5092329e-03 +3066 6.14 -2.5778262e-03 -3.4998736e-03 +3067 6.142 -2.5708358e-03 -3.4905384e-03 +3068 6.144 -2.5638640e-03 -3.4812273e-03 +3069 6.146 -2.5569109e-03 -3.4719401e-03 +3070 6.148 -2.5499763e-03 -3.4626769e-03 +3071 6.15 -2.5430601e-03 -3.4534375e-03 +3072 6.152 -2.5361625e-03 -3.4442219e-03 +3073 6.154 -2.5292832e-03 -3.4350301e-03 +3074 6.156 -2.5224224e-03 -3.4258619e-03 +3075 6.158 -2.5155798e-03 -3.4167174e-03 +3076 6.16 -2.5087555e-03 -3.4075965e-03 +3077 6.162 -2.5019494e-03 -3.3984991e-03 +3078 6.164 -2.4951615e-03 -3.3894251e-03 +3079 6.166 -2.4883917e-03 -3.3803746e-03 +3080 6.168 -2.4816399e-03 -3.3713474e-03 +3081 6.17 -2.4749063e-03 -3.3623436e-03 +3082 6.172 -2.4681906e-03 -3.3533629e-03 +3083 6.174 -2.4614928e-03 -3.3444055e-03 +3084 6.176 -2.4548129e-03 -3.3354712e-03 +3085 6.178 -2.4481509e-03 -3.3265599e-03 +3086 6.18 -2.4415067e-03 -3.3176717e-03 +3087 6.182 -2.4348802e-03 -3.3088065e-03 +3088 6.184 -2.4282714e-03 -3.2999641e-03 +3089 6.186 -2.4216803e-03 -3.2911447e-03 +3090 6.188 -2.4151068e-03 -3.2823480e-03 +3091 6.19 -2.4085509e-03 -3.2735741e-03 +3092 6.192 -2.4020125e-03 -3.2648228e-03 +3093 6.194 -2.3954916e-03 -3.2560943e-03 +3094 6.196 -2.3889881e-03 -3.2473883e-03 +3095 6.198 -2.3825020e-03 -3.2387048e-03 +3096 6.2 -2.3760333e-03 -3.2300438e-03 +3097 6.202 -2.3695818e-03 -3.2214052e-03 +3098 6.204 -2.3631477e-03 -3.2127890e-03 +3099 6.206 -2.3567307e-03 -3.2041951e-03 +3100 6.208 -2.3503309e-03 -3.1956235e-03 +3101 6.21 -2.3439482e-03 -3.1870741e-03 +3102 6.212 -2.3375825e-03 -3.1785468e-03 +3103 6.214 -2.3312340e-03 -3.1700416e-03 +3104 6.216 -2.3249024e-03 -3.1615585e-03 +3105 6.218 -2.3185877e-03 -3.1530974e-03 +3106 6.22 -2.3122900e-03 -3.1446582e-03 +3107 6.222 -2.3060091e-03 -3.1362410e-03 +3108 6.224 -2.2997450e-03 -3.1278455e-03 +3109 6.226 -2.2934977e-03 -3.1194718e-03 +3110 6.228 -2.2872671e-03 -3.1111199e-03 +3111 6.23 -2.2810532e-03 -3.1027896e-03 +3112 6.232 -2.2748559e-03 -3.0944810e-03 +3113 6.234 -2.2686752e-03 -3.0861940e-03 +3114 6.236 -2.2625111e-03 -3.0779284e-03 +3115 6.238 -2.2563635e-03 -3.0696843e-03 +3116 6.24 -2.2502324e-03 -3.0614617e-03 +3117 6.242 -2.2441176e-03 -3.0532604e-03 +3118 6.244 -2.2380193e-03 -3.0450804e-03 +3119 6.246 -2.2319373e-03 -3.0369217e-03 +3120 6.248 -2.2258716e-03 -3.0287842e-03 +3121 6.25 -2.2198222e-03 -3.0206679e-03 +3122 6.252 -2.2137889e-03 -3.0125727e-03 +3123 6.254 -2.2077719e-03 -3.0044985e-03 +3124 6.256 -2.2017709e-03 -2.9964453e-03 +3125 6.258 -2.1957861e-03 -2.9884131e-03 +3126 6.26 -2.1898172e-03 -2.9804018e-03 +3127 6.262 -2.1838644e-03 -2.9724113e-03 +3128 6.264 -2.1779276e-03 -2.9644417e-03 +3129 6.266 -2.1720067e-03 -2.9564928e-03 +3130 6.268 -2.1661016e-03 -2.9485646e-03 +3131 6.27 -2.1602124e-03 -2.9406570e-03 +3132 6.272 -2.1543390e-03 -2.9327701e-03 +3133 6.274 -2.1484813e-03 -2.9249036e-03 +3134 6.276 -2.1426393e-03 -2.9170577e-03 +3135 6.278 -2.1368130e-03 -2.9092323e-03 +3136 6.28 -2.1310024e-03 -2.9014272e-03 +3137 6.282 -2.1252073e-03 -2.8936425e-03 +3138 6.284 -2.1194278e-03 -2.8858781e-03 +3139 6.286 -2.1136638e-03 -2.8781339e-03 +3140 6.288 -2.1079153e-03 -2.8704100e-03 +3141 6.29 -2.1021821e-03 -2.8627062e-03 +3142 6.292 -2.0964644e-03 -2.8550225e-03 +3143 6.294 -2.0907620e-03 -2.8473588e-03 +3144 6.296 -2.0850750e-03 -2.8397152e-03 +3145 6.298 -2.0794032e-03 -2.8320915e-03 +3146 6.3 -2.0737466e-03 -2.8244877e-03 +3147 6.302 -2.0681052e-03 -2.8169038e-03 +3148 6.304 -2.0624790e-03 -2.8093396e-03 +3149 6.306 -2.0568678e-03 -2.8017953e-03 +3150 6.308 -2.0512718e-03 -2.7942706e-03 +3151 6.31 -2.0456907e-03 -2.7867656e-03 +3152 6.312 -2.0401247e-03 -2.7792803e-03 +3153 6.314 -2.0345736e-03 -2.7718144e-03 +3154 6.316 -2.0290374e-03 -2.7643682e-03 +3155 6.318 -2.0235161e-03 -2.7569413e-03 +3156 6.32 -2.0180096e-03 -2.7495339e-03 +3157 6.322 -2.0125180e-03 -2.7421459e-03 +3158 6.324 -2.0070410e-03 -2.7347772e-03 +3159 6.326 -2.0015788e-03 -2.7274278e-03 +3160 6.328 -1.9961313e-03 -2.7200976e-03 +3161 6.33 -1.9906984e-03 -2.7127866e-03 +3162 6.332 -1.9852802e-03 -2.7054947e-03 +3163 6.334 -1.9798765e-03 -2.6982220e-03 +3164 6.336 -1.9744873e-03 -2.6909682e-03 +3165 6.338 -1.9691126e-03 -2.6837335e-03 +3166 6.34 -1.9637523e-03 -2.6765177e-03 +3167 6.342 -1.9584065e-03 -2.6693208e-03 +3168 6.344 -1.9530750e-03 -2.6621428e-03 +3169 6.346 -1.9477579e-03 -2.6549836e-03 +3170 6.348 -1.9424551e-03 -2.6478431e-03 +3171 6.35 -1.9371665e-03 -2.6407214e-03 +3172 6.352 -1.9318922e-03 -2.6336183e-03 +3173 6.354 -1.9266320e-03 -2.6265338e-03 +3174 6.356 -1.9213860e-03 -2.6194680e-03 +3175 6.358 -1.9161541e-03 -2.6124206e-03 +3176 6.36 -1.9109363e-03 -2.6053918e-03 +3177 6.362 -1.9057326e-03 -2.5983813e-03 +3178 6.364 -1.9005428e-03 -2.5913893e-03 +3179 6.366 -1.8953670e-03 -2.5844156e-03 +3180 6.368 -1.8902051e-03 -2.5774603e-03 +3181 6.37 -1.8850571e-03 -2.5705232e-03 +3182 6.372 -1.8799230e-03 -2.5636042e-03 +3183 6.374 -1.8748027e-03 -2.5567035e-03 +3184 6.376 -1.8696962e-03 -2.5498209e-03 +3185 6.378 -1.8646034e-03 -2.5429563e-03 +3186 6.38 -1.8595244e-03 -2.5361098e-03 +3187 6.382 -1.8544590e-03 -2.5292813e-03 +3188 6.384 -1.8494072e-03 -2.5224707e-03 +3189 6.386 -1.8443691e-03 -2.5156781e-03 +3190 6.388 -1.8393445e-03 -2.5089032e-03 +3191 6.39 -1.8343334e-03 -2.5021462e-03 +3192 6.392 -1.8293359e-03 -2.4954069e-03 +3193 6.394 -1.8243518e-03 -2.4886854e-03 +3194 6.396 -1.8193811e-03 -2.4819815e-03 +3195 6.398 -1.8144239e-03 -2.4752953e-03 +3196 6.4 -1.8094799e-03 -2.4686267e-03 +3197 6.402 -1.8045494e-03 -2.4619756e-03 +3198 6.404 -1.7996320e-03 -2.4553420e-03 +3199 6.406 -1.7947280e-03 -2.4487258e-03 +3200 6.408 -1.7898371e-03 -2.4421271e-03 +3201 6.41 -1.7849595e-03 -2.4355457e-03 +3202 6.412 -1.7800949e-03 -2.4289817e-03 +3203 6.414 -1.7752435e-03 -2.4224349e-03 +3204 6.416 -1.7704052e-03 -2.4159054e-03 +3205 6.418 -1.7655799e-03 -2.4093931e-03 +3206 6.42 -1.7607676e-03 -2.4028979e-03 +3207 6.422 -1.7559683e-03 -2.3964199e-03 +3208 6.424 -1.7511819e-03 -2.3899589e-03 +3209 6.426 -1.7464084e-03 -2.3835149e-03 +3210 6.428 -1.7416478e-03 -2.3770879e-03 +3211 6.43 -1.7369001e-03 -2.3706779e-03 +3212 6.432 -1.7321651e-03 -2.3642847e-03 +3213 6.434 -1.7274429e-03 -2.3579085e-03 +3214 6.436 -1.7227335e-03 -2.3515490e-03 +3215 6.438 -1.7180367e-03 -2.3452063e-03 +3216 6.44 -1.7133526e-03 -2.3388803e-03 +3217 6.442 -1.7086812e-03 -2.3325710e-03 +3218 6.444 -1.7040223e-03 -2.3262783e-03 +3219 6.446 -1.6993761e-03 -2.3200023e-03 +3220 6.448 -1.6947423e-03 -2.3137428e-03 +3221 6.45 -1.6901211e-03 -2.3074998e-03 +3222 6.452 -1.6855123e-03 -2.3012733e-03 +3223 6.454 -1.6809160e-03 -2.2950633e-03 +3224 6.456 -1.6763320e-03 -2.2888696e-03 +3225 6.458 -1.6717605e-03 -2.2826923e-03 +3226 6.46 -1.6672013e-03 -2.2765313e-03 +3227 6.462 -1.6626543e-03 -2.2703866e-03 +3228 6.464 -1.6581197e-03 -2.2642581e-03 +3229 6.466 -1.6535973e-03 -2.2581458e-03 +3230 6.468 -1.6490871e-03 -2.2520497e-03 +3231 6.47 -1.6445891e-03 -2.2459696e-03 +3232 6.472 -1.6401032e-03 -2.2399056e-03 +3233 6.474 -1.6356295e-03 -2.2338577e-03 +3234 6.476 -1.6311678e-03 -2.2278257e-03 +3235 6.478 -1.6267181e-03 -2.2218097e-03 +3236 6.48 -1.6222805e-03 -2.2158096e-03 +3237 6.482 -1.6178549e-03 -2.2098253e-03 +3238 6.484 -1.6134412e-03 -2.2038569e-03 +3239 6.486 -1.6090395e-03 -2.1979043e-03 +3240 6.488 -1.6046496e-03 -2.1919674e-03 +3241 6.49 -1.6002716e-03 -2.1860462e-03 +3242 6.492 -1.5959054e-03 -2.1801407e-03 +3243 6.494 -1.5915510e-03 -2.1742508e-03 +3244 6.496 -1.5872084e-03 -2.1683765e-03 +3245 6.498 -1.5828775e-03 -2.1625177e-03 +3246 6.5 -1.5785583e-03 -2.1566745e-03 +3247 6.502 -1.5742508e-03 -2.1508467e-03 +3248 6.504 -1.5699549e-03 -2.1450344e-03 +3249 6.506 -1.5656706e-03 -2.1392374e-03 +3250 6.508 -1.5613979e-03 -2.1334558e-03 +3251 6.51 -1.5571368e-03 -2.1276895e-03 +3252 6.512 -1.5528872e-03 -2.1219385e-03 +3253 6.514 -1.5486490e-03 -2.1162027e-03 +3254 6.516 -1.5444223e-03 -2.1104821e-03 +3255 6.518 -1.5402071e-03 -2.1047767e-03 +3256 6.52 -1.5360032e-03 -2.0990864e-03 +3257 6.522 -1.5318107e-03 -2.0934112e-03 +3258 6.524 -1.5276296e-03 -2.0877510e-03 +3259 6.526 -1.5234597e-03 -2.0821058e-03 +3260 6.528 -1.5193011e-03 -2.0764756e-03 +3261 6.53 -1.5151538e-03 -2.0708603e-03 +3262 6.532 -1.5110177e-03 -2.0652599e-03 +3263 6.534 -1.5068928e-03 -2.0596744e-03 +3264 6.536 -1.5027790e-03 -2.0541037e-03 +3265 6.538 -1.4986763e-03 -2.0485477e-03 +3266 6.54 -1.4945848e-03 -2.0430065e-03 +3267 6.542 -1.4905043e-03 -2.0374800e-03 +3268 6.544 -1.4864349e-03 -2.0319682e-03 +3269 6.546 -1.4823764e-03 -2.0264710e-03 +3270 6.548 -1.4783290e-03 -2.0209884e-03 +3271 6.55 -1.4742925e-03 -2.0155203e-03 +3272 6.552 -1.4702669e-03 -2.0100668e-03 +3273 6.554 -1.4662522e-03 -2.0046277e-03 +3274 6.556 -1.4622484e-03 -1.9992031e-03 +3275 6.558 -1.4582554e-03 -1.9937928e-03 +3276 6.56 -1.4542732e-03 -1.9883970e-03 +3277 6.562 -1.4503018e-03 -1.9830155e-03 +3278 6.564 -1.4463411e-03 -1.9776483e-03 +3279 6.566 -1.4423912e-03 -1.9722953e-03 +3280 6.568 -1.4384519e-03 -1.9669566e-03 +3281 6.57 -1.4345233e-03 -1.9616320e-03 +3282 6.572 -1.4306054e-03 -1.9563216e-03 +3283 6.574 -1.4266980e-03 -1.9510253e-03 +3284 6.576 -1.4228013e-03 -1.9457431e-03 +3285 6.578 -1.4189150e-03 -1.9404750e-03 +3286 6.58 -1.4150394e-03 -1.9352208e-03 +3287 6.582 -1.4111742e-03 -1.9299806e-03 +3288 6.584 -1.4073194e-03 -1.9247544e-03 +3289 6.586 -1.4034751e-03 -1.9195420e-03 +3290 6.588 -1.3996412e-03 -1.9143435e-03 +3291 6.59 -1.3958177e-03 -1.9091589e-03 +3292 6.592 -1.3920046e-03 -1.9039880e-03 +3293 6.594 -1.3882018e-03 -1.8988309e-03 +3294 6.596 -1.3844093e-03 -1.8936875e-03 +3295 6.598 -1.3806270e-03 -1.8885578e-03 +3296 6.6 -1.3768550e-03 -1.8834418e-03 +3297 6.602 -1.3730932e-03 -1.8783393e-03 +3298 6.604 -1.3693417e-03 -1.8732505e-03 +3299 6.606 -1.3656002e-03 -1.8681752e-03 +3300 6.608 -1.3618689e-03 -1.8631134e-03 +3301 6.61 -1.3581478e-03 -1.8580651e-03 +3302 6.612 -1.3544367e-03 -1.8530302e-03 +3303 6.614 -1.3507356e-03 -1.8480088e-03 +3304 6.616 -1.3470446e-03 -1.8430007e-03 +3305 6.618 -1.3433636e-03 -1.8380059e-03 +3306 6.62 -1.3396926e-03 -1.8330245e-03 +3307 6.622 -1.3360315e-03 -1.8280563e-03 +3308 6.624 -1.3323804e-03 -1.8231014e-03 +3309 6.626 -1.3287391e-03 -1.8181597e-03 +3310 6.628 -1.3251077e-03 -1.8132312e-03 +3311 6.63 -1.3214862e-03 -1.8083157e-03 +3312 6.632 -1.3178744e-03 -1.8034134e-03 +3313 6.634 -1.3142725e-03 -1.7985242e-03 +3314 6.636 -1.3106803e-03 -1.7936480e-03 +3315 6.638 -1.3070979e-03 -1.7887848e-03 +3316 6.64 -1.3035252e-03 -1.7839345e-03 +3317 6.642 -1.2999622e-03 -1.7790972e-03 +3318 6.644 -1.2964088e-03 -1.7742728e-03 +3319 6.646 -1.2928651e-03 -1.7694613e-03 +3320 6.648 -1.2893309e-03 -1.7646626e-03 +3321 6.65 -1.2858064e-03 -1.7598767e-03 +3322 6.652 -1.2822914e-03 -1.7551036e-03 +3323 6.654 -1.2787860e-03 -1.7503432e-03 +3324 6.656 -1.2752900e-03 -1.7455955e-03 +3325 6.658 -1.2718036e-03 -1.7408605e-03 +3326 6.66 -1.2683266e-03 -1.7361381e-03 +3327 6.662 -1.2648590e-03 -1.7314283e-03 +3328 6.664 -1.2614009e-03 -1.7267311e-03 +3329 6.666 -1.2579521e-03 -1.7220465e-03 +3330 6.668 -1.2545127e-03 -1.7173743e-03 +3331 6.67 -1.2510826e-03 -1.7127146e-03 +3332 6.672 -1.2476618e-03 -1.7080674e-03 +3333 6.674 -1.2442503e-03 -1.7034326e-03 +3334 6.676 -1.2408481e-03 -1.6988102e-03 +3335 6.678 -1.2374551e-03 -1.6942001e-03 +3336 6.68 -1.2340713e-03 -1.6896023e-03 +3337 6.682 -1.2306966e-03 -1.6850168e-03 +3338 6.684 -1.2273312e-03 -1.6804436e-03 +3339 6.686 -1.2239749e-03 -1.6758825e-03 +3340 6.688 -1.2206277e-03 -1.6713337e-03 +3341 6.69 -1.2172895e-03 -1.6667970e-03 +3342 6.692 -1.2139605e-03 -1.6622725e-03 +3343 6.694 -1.2106404e-03 -1.6577600e-03 +3344 6.696 -1.2073294e-03 -1.6532596e-03 +3345 6.698 -1.2040274e-03 -1.6487713e-03 +3346 6.7 -1.2007343e-03 -1.6442949e-03 +3347 6.702 -1.1974502e-03 -1.6398305e-03 +3348 6.704 -1.1941750e-03 -1.6353781e-03 +3349 6.706 -1.1909087e-03 -1.6309376e-03 +3350 6.708 -1.1876512e-03 -1.6265089e-03 +3351 6.71 -1.1844026e-03 -1.6220921e-03 +3352 6.712 -1.1811629e-03 -1.6176871e-03 +3353 6.714 -1.1779319e-03 -1.6132939e-03 +3354 6.716 -1.1747097e-03 -1.6089124e-03 +3355 6.718 -1.1714962e-03 -1.6045427e-03 +3356 6.72 -1.1682915e-03 -1.6001846e-03 +3357 6.722 -1.1650955e-03 -1.5958383e-03 +3358 6.724 -1.1619081e-03 -1.5915035e-03 +3359 6.726 -1.1587294e-03 -1.5871804e-03 +3360 6.728 -1.1555594e-03 -1.5828688e-03 +3361 6.73 -1.1523980e-03 -1.5785688e-03 +3362 6.732 -1.1492451e-03 -1.5742803e-03 +3363 6.734 -1.1461008e-03 -1.5700032e-03 +3364 6.736 -1.1429651e-03 -1.5657376e-03 +3365 6.738 -1.1398379e-03 -1.5614835e-03 +3366 6.74 -1.1367192e-03 -1.5572407e-03 +3367 6.742 -1.1336089e-03 -1.5530093e-03 +3368 6.744 -1.1305071e-03 -1.5487893e-03 +3369 6.746 -1.1274137e-03 -1.5445805e-03 +3370 6.748 -1.1243288e-03 -1.5403830e-03 +3371 6.75 -1.1212522e-03 -1.5361968e-03 +3372 6.752 -1.1181840e-03 -1.5320218e-03 +3373 6.754 -1.1151241e-03 -1.5278580e-03 +3374 6.756 -1.1120725e-03 -1.5237053e-03 +3375 6.758 -1.1090293e-03 -1.5195638e-03 +3376 6.76 -1.1059943e-03 -1.5154333e-03 +3377 6.762 -1.1029675e-03 -1.5113140e-03 +3378 6.764 -1.0999490e-03 -1.5072056e-03 +3379 6.766 -1.0969387e-03 -1.5031083e-03 +3380 6.768 -1.0939366e-03 -1.4990220e-03 +3381 6.77 -1.0909426e-03 -1.4949466e-03 +3382 6.772 -1.0879568e-03 -1.4908822e-03 +3383 6.774 -1.0849791e-03 -1.4868287e-03 +3384 6.776 -1.0820095e-03 -1.4827860e-03 +3385 6.778 -1.0790479e-03 -1.4787542e-03 +3386 6.78 -1.0760944e-03 -1.4747332e-03 +3387 6.782 -1.0731490e-03 -1.4707230e-03 +3388 6.784 -1.0702115e-03 -1.4667235e-03 +3389 6.786 -1.0672821e-03 -1.4627348e-03 +3390 6.788 -1.0643606e-03 -1.4587568e-03 +3391 6.79 -1.0614471e-03 -1.4547894e-03 +3392 6.792 -1.0585414e-03 -1.4508327e-03 +3393 6.794 -1.0556437e-03 -1.4468866e-03 +3394 6.796 -1.0527539e-03 -1.4429511e-03 +3395 6.798 -1.0498719e-03 -1.4390262e-03 +3396 6.8 -1.0469978e-03 -1.4351118e-03 +3397 6.802 -1.0441314e-03 -1.4312079e-03 +3398 6.804 -1.0412729e-03 -1.4273145e-03 +3399 6.806 -1.0384222e-03 -1.4234316e-03 +3400 6.808 -1.0355792e-03 -1.4195591e-03 +3401 6.81 -1.0327439e-03 -1.4156970e-03 +3402 6.812 -1.0299164e-03 -1.4118452e-03 +3403 6.814 -1.0270966e-03 -1.4080038e-03 +3404 6.816 -1.0242844e-03 -1.4041727e-03 +3405 6.818 -1.0214799e-03 -1.4003519e-03 +3406 6.82 -1.0186830e-03 -1.3965414e-03 +3407 6.822 -1.0158937e-03 -1.3927411e-03 +3408 6.824 -1.0131120e-03 -1.3889510e-03 +3409 6.826 -1.0103379e-03 -1.3851711e-03 +3410 6.828 -1.0075713e-03 -1.3814014e-03 +3411 6.83 -1.0048123e-03 -1.3776418e-03 +3412 6.832 -1.0020607e-03 -1.3738923e-03 +3413 6.834 -9.9931668e-04 -1.3701529e-03 +3414 6.836 -9.9658011e-04 -1.3664235e-03 +3415 6.838 -9.9385098e-04 -1.3627042e-03 +3416 6.84 -9.9112928e-04 -1.3589948e-03 +3417 6.842 -9.8841499e-04 -1.3552954e-03 +3418 6.844 -9.8570809e-04 -1.3516060e-03 +3419 6.846 -9.8300856e-04 -1.3479265e-03 +3420 6.848 -9.8031638e-04 -1.3442569e-03 +3421 6.85 -9.7763153e-04 -1.3405972e-03 +3422 6.852 -9.7495399e-04 -1.3369473e-03 +3423 6.854 -9.7228373e-04 -1.3333072e-03 +3424 6.856 -9.6962075e-04 -1.3296769e-03 +3425 6.858 -9.6696502e-04 -1.3260563e-03 +3426 6.86 -9.6431652e-04 -1.3224456e-03 +3427 6.862 -9.6167523e-04 -1.3188445e-03 +3428 6.864 -9.5904114e-04 -1.3152531e-03 +3429 6.866 -9.5641421e-04 -1.3116714e-03 +3430 6.868 -9.5379444e-04 -1.3080993e-03 +3431 6.87 -9.5118181e-04 -1.3045368e-03 +3432 6.872 -9.4857629e-04 -1.3009840e-03 +3433 6.874 -9.4597787e-04 -1.2974406e-03 +3434 6.876 -9.4338652e-04 -1.2939069e-03 +3435 6.878 -9.4080223e-04 -1.2903826e-03 +3436 6.88 -9.3822498e-04 -1.2868678e-03 +3437 6.882 -9.3565476e-04 -1.2833625e-03 +3438 6.884 -9.3309153e-04 -1.2798666e-03 +3439 6.886 -9.3053528e-04 -1.2763801e-03 +3440 6.888 -9.2798600e-04 -1.2729031e-03 +3441 6.89 -9.2544366e-04 -1.2694354e-03 +3442 6.892 -9.2290825e-04 -1.2659770e-03 +3443 6.894 -9.2037975e-04 -1.2625279e-03 +3444 6.896 -9.1785814e-04 -1.2590881e-03 +3445 6.898 -9.1534339e-04 -1.2556576e-03 +3446 6.9 -9.1283550e-04 -1.2522364e-03 +3447 6.902 -9.1033444e-04 -1.2488243e-03 +3448 6.904 -9.0784020e-04 -1.2454215e-03 +3449 6.906 -9.0535275e-04 -1.2420278e-03 +3450 6.908 -9.0287208e-04 -1.2386432e-03 +3451 6.91 -9.0039817e-04 -1.2352678e-03 +3452 6.912 -8.9793100e-04 -1.2319015e-03 +3453 6.914 -8.9547056e-04 -1.2285442e-03 +3454 6.916 -8.9301682e-04 -1.2251960e-03 +3455 6.918 -8.9056977e-04 -1.2218568e-03 +3456 6.92 -8.8812938e-04 -1.2185266e-03 +3457 6.922 -8.8569565e-04 -1.2152054e-03 +3458 6.924 -8.8326856e-04 -1.2118932e-03 +3459 6.926 -8.8084808e-04 -1.2085899e-03 +3460 6.928 -8.7843419e-04 -1.2052954e-03 +3461 6.93 -8.7602689e-04 -1.2020099e-03 +3462 6.932 -8.7362615e-04 -1.1987332e-03 +3463 6.934 -8.7123195e-04 -1.1954654e-03 +3464 6.936 -8.6884428e-04 -1.1922064e-03 +3465 6.938 -8.6646312e-04 -1.1889561e-03 +3466 6.94 -8.6408845e-04 -1.1857147e-03 +3467 6.942 -8.6172025e-04 -1.1824819e-03 +3468 6.944 -8.5935851e-04 -1.1792579e-03 +3469 6.946 -8.5700322e-04 -1.1760426e-03 +3470 6.948 -8.5465434e-04 -1.1728360e-03 +3471 6.95 -8.5231187e-04 -1.1696380e-03 +3472 6.952 -8.4997578e-04 -1.1664486e-03 +3473 6.954 -8.4764607e-04 -1.1632679e-03 +3474 6.956 -8.4532270e-04 -1.1600957e-03 +3475 6.958 -8.4300568e-04 -1.1569321e-03 +3476 6.96 -8.4069497e-04 -1.1537770e-03 +3477 6.962 -8.3839056e-04 -1.1506305e-03 +3478 6.964 -8.3609244e-04 -1.1474924e-03 +3479 6.966 -8.3380059e-04 -1.1443628e-03 +3480 6.968 -8.3151498e-04 -1.1412417e-03 +3481 6.97 -8.2923562e-04 -1.1381290e-03 +3482 6.972 -8.2696246e-04 -1.1350247e-03 +3483 6.974 -8.2469551e-04 -1.1319287e-03 +3484 6.976 -8.2243474e-04 -1.1288412e-03 +3485 6.978 -8.2018014e-04 -1.1257619e-03 +3486 6.98 -8.1793169e-04 -1.1226910e-03 +3487 6.982 -8.1568937e-04 -1.1196284e-03 +3488 6.984 -8.1345317e-04 -1.1165740e-03 +3489 6.986 -8.1122307e-04 -1.1135279e-03 +3490 6.988 -8.0899905e-04 -1.1104900e-03 +3491 6.99 -8.0678110e-04 -1.1074603e-03 +3492 6.992 -8.0456921e-04 -1.1044388e-03 +3493 6.994 -8.0236334e-04 -1.1014255e-03 +3494 6.996 -8.0016350e-04 -1.0984203e-03 +3495 6.998 -7.9796966e-04 -1.0954232e-03 +3496 7.0 -7.9578180e-04 -1.0924343e-03 +3497 7.002 -7.9359991e-04 -1.0894534e-03 +3498 7.004 -7.9142398e-04 -1.0864805e-03 +3499 7.006 -7.8925399e-04 -1.0835157e-03 +3500 7.008 -7.8708991e-04 -1.0805589e-03 +3501 7.01 -7.8493175e-04 -1.0776101e-03 +3502 7.012 -7.8277947e-04 -1.0746693e-03 +3503 7.014 -7.8063306e-04 -1.0717364e-03 +3504 7.016 -7.7849252e-04 -1.0688114e-03 +3505 7.018 -7.7635781e-04 -1.0658944e-03 +3506 7.02 -7.7422893e-04 -1.0629852e-03 +3507 7.022 -7.7210587e-04 -1.0600839e-03 +3508 7.024 -7.6998859e-04 -1.0571904e-03 +3509 7.026 -7.6787710e-04 -1.0543048e-03 +3510 7.028 -7.6577137e-04 -1.0514270e-03 +3511 7.03 -7.6367139e-04 -1.0485569e-03 +3512 7.032 -7.6157714e-04 -1.0456946e-03 +3513 7.034 -7.5948860e-04 -1.0428401e-03 +3514 7.036 -7.5740577e-04 -1.0399932e-03 +3515 7.038 -7.5532862e-04 -1.0371541e-03 +3516 7.04 -7.5325715e-04 -1.0343226e-03 +3517 7.042 -7.5119133e-04 -1.0314988e-03 +3518 7.044 -7.4913115e-04 -1.0286827e-03 +3519 7.046 -7.4707659e-04 -1.0258741e-03 +3520 7.048 -7.4502765e-04 -1.0230732e-03 +3521 7.05 -7.4298430e-04 -1.0202798e-03 +3522 7.052 -7.4094652e-04 -1.0174940e-03 +3523 7.054 -7.3891431e-04 -1.0147158e-03 +3524 7.056 -7.3688765e-04 -1.0119450e-03 +3525 7.058 -7.3486653e-04 -1.0091818e-03 +3526 7.06 -7.3285092e-04 -1.0064260e-03 +3527 7.062 -7.3084082e-04 -1.0036777e-03 +3528 7.064 -7.2883621e-04 -1.0009368e-03 +3529 7.066 -7.2683707e-04 -9.9820331e-04 +3530 7.068 -7.2484339e-04 -9.9547725e-04 +3531 7.07 -7.2285515e-04 -9.9275856e-04 +3532 7.072 -7.2087235e-04 -9.9004724e-04 +3533 7.074 -7.1889496e-04 -9.8734325e-04 +3534 7.076 -7.1692297e-04 -9.8464659e-04 +3535 7.078 -7.1495637e-04 -9.8195722e-04 +3536 7.08 -7.1299514e-04 -9.7927513e-04 +3537 7.082 -7.1103926e-04 -9.7660031e-04 +3538 7.084 -7.0908873e-04 -9.7393273e-04 +3539 7.086 -7.0714353e-04 -9.7127238e-04 +3540 7.088 -7.0520364e-04 -9.6861922e-04 +3541 7.09 -7.0326905e-04 -9.6597325e-04 +3542 7.092 -7.0133974e-04 -9.6333445e-04 +3543 7.094 -6.9941570e-04 -9.6070280e-04 +3544 7.096 -6.9749692e-04 -9.5807827e-04 +3545 7.098 -6.9558339e-04 -9.5546085e-04 +3546 7.1 -6.9367508e-04 -9.5285052e-04 +3547 7.102 -6.9177198e-04 -9.5024727e-04 +3548 7.104 -6.8987408e-04 -9.4765106e-04 +3549 7.106 -6.8798137e-04 -9.4506189e-04 +3550 7.108 -6.8609383e-04 -9.4247973e-04 +3551 7.11 -6.8421145e-04 -9.3990457e-04 +3552 7.112 -6.8233421e-04 -9.3733639e-04 +3553 7.114 -6.8046210e-04 -9.3477516e-04 +3554 7.116 -6.7859510e-04 -9.3222088e-04 +3555 7.118 -6.7673321e-04 -9.2967352e-04 +3556 7.12 -6.7487640e-04 -9.2713306e-04 +3557 7.122 -6.7302467e-04 -9.2459948e-04 +3558 7.124 -6.7117800e-04 -9.2207278e-04 +3559 7.126 -6.6933638e-04 -9.1955292e-04 +3560 7.128 -6.6749978e-04 -9.1703989e-04 +3561 7.13 -6.6566821e-04 -9.1453367e-04 +3562 7.132 -6.6384165e-04 -9.1203425e-04 +3563 7.134 -6.6202007e-04 -9.0954160e-04 +3564 7.136 -6.6020347e-04 -9.0705571e-04 +3565 7.138 -6.5839184e-04 -9.0457656e-04 +3566 7.14 -6.5658516e-04 -9.0210413e-04 +3567 7.142 -6.5478342e-04 -8.9963841e-04 +3568 7.144 -6.5298661e-04 -8.9717937e-04 +3569 7.146 -6.5119470e-04 -8.9472700e-04 +3570 7.148 -6.4940769e-04 -8.9228128e-04 +3571 7.15 -6.4762557e-04 -8.8984219e-04 +3572 7.152 -6.4584832e-04 -8.8740971e-04 +3573 7.154 -6.4407593e-04 -8.8498384e-04 +3574 7.156 -6.4230838e-04 -8.8256454e-04 +3575 7.158 -6.4054567e-04 -8.8015180e-04 +3576 7.16 -6.3878777e-04 -8.7774561e-04 +3577 7.162 -6.3703468e-04 -8.7534595e-04 +3578 7.164 -6.3528638e-04 -8.7295279e-04 +3579 7.166 -6.3354286e-04 -8.7056613e-04 +3580 7.168 -6.3180411e-04 -8.6818595e-04 +3581 7.17 -6.3007011e-04 -8.6581222e-04 +3582 7.172 -6.2834086e-04 -8.6344493e-04 +3583 7.174 -6.2661633e-04 -8.6108406e-04 +3584 7.176 -6.2489652e-04 -8.5872960e-04 +3585 7.178 -6.2318141e-04 -8.5638153e-04 +3586 7.18 -6.2147099e-04 -8.5403983e-04 +3587 7.182 -6.1976524e-04 -8.5170448e-04 +3588 7.184 -6.1806417e-04 -8.4937548e-04 +3589 7.186 -6.1636774e-04 -8.4705279e-04 +3590 7.188 -6.1467595e-04 -8.4473641e-04 +3591 7.19 -6.1298879e-04 -8.4242631e-04 +3592 7.192 -6.1130624e-04 -8.4012249e-04 +3593 7.194 -6.0962829e-04 -8.3782492e-04 +3594 7.196 -6.0795494e-04 -8.3553358e-04 +3595 7.198 -6.0628616e-04 -8.3324847e-04 +3596 7.2 -6.0462194e-04 -8.3096956e-04 +3597 7.202 -6.0296227e-04 -8.2869684e-04 +3598 7.204 -6.0130715e-04 -8.2643028e-04 +3599 7.206 -5.9965655e-04 -8.2416988e-04 +3600 7.208 -5.9801046e-04 -8.2191562e-04 +3601 7.21 -5.9636888e-04 -8.1966748e-04 +3602 7.212 -5.9473179e-04 -8.1742544e-04 +3603 7.214 -5.9309918e-04 -8.1518950e-04 +3604 7.216 -5.9147103e-04 -8.1295962e-04 +3605 7.218 -5.8984733e-04 -8.1073580e-04 +3606 7.22 -5.8822808e-04 -8.0851802e-04 +3607 7.222 -5.8661326e-04 -8.0630626e-04 +3608 7.224 -5.8500285e-04 -8.0410051e-04 +3609 7.226 -5.8339685e-04 -8.0190076e-04 +3610 7.228 -5.8179524e-04 -7.9970697e-04 +3611 7.23 -5.8019802e-04 -7.9751915e-04 +3612 7.232 -5.7860516e-04 -7.9533727e-04 +3613 7.234 -5.7701667e-04 -7.9316132e-04 +3614 7.236 -5.7543251e-04 -7.9099127e-04 +3615 7.238 -5.7385270e-04 -7.8882713e-04 +3616 7.24 -5.7227720e-04 -7.8666886e-04 +3617 7.242 -5.7070602e-04 -7.8451646e-04 +3618 7.244 -5.6913913e-04 -7.8236991e-04 +3619 7.246 -5.6757653e-04 -7.8022919e-04 +3620 7.248 -5.6601821e-04 -7.7809428e-04 +3621 7.25 -5.6446415e-04 -7.7596518e-04 +3622 7.252 -5.6291435e-04 -7.7384186e-04 +3623 7.254 -5.6136878e-04 -7.7172432e-04 +3624 7.256 -5.5982745e-04 -7.6961253e-04 +3625 7.258 -5.5829033e-04 -7.6750648e-04 +3626 7.26 -5.5675742e-04 -7.6540615e-04 +3627 7.262 -5.5522870e-04 -7.6331153e-04 +3628 7.264 -5.5370417e-04 -7.6122261e-04 +3629 7.266 -5.5218381e-04 -7.5913936e-04 +3630 7.268 -5.5066761e-04 -7.5706178e-04 +3631 7.27 -5.4915555e-04 -7.5498984e-04 +3632 7.272 -5.4764764e-04 -7.5292354e-04 +3633 7.274 -5.4614386e-04 -7.5086286e-04 +3634 7.276 -5.4464419e-04 -7.4880777e-04 +3635 7.278 -5.4314862e-04 -7.4675828e-04 +3636 7.28 -5.4165715e-04 -7.4471436e-04 +3637 7.282 -5.4016976e-04 -7.4267599e-04 +3638 7.284 -5.3868644e-04 -7.4064317e-04 +3639 7.286 -5.3720718e-04 -7.3861588e-04 +3640 7.288 -5.3573198e-04 -7.3659410e-04 +3641 7.29 -5.3426080e-04 -7.3457782e-04 +3642 7.292 -5.3279366e-04 -7.3256702e-04 +3643 7.294 -5.3133053e-04 -7.3056169e-04 +3644 7.296 -5.2987141e-04 -7.2856181e-04 +3645 7.298 -5.2841628e-04 -7.2656738e-04 +3646 7.3 -5.2696514e-04 -7.2457836e-04 +3647 7.302 -5.2551796e-04 -7.2259476e-04 +3648 7.304 -5.2407475e-04 -7.2061656e-04 +3649 7.306 -5.2263549e-04 -7.1864373e-04 +3650 7.308 -5.2120018e-04 -7.1667628e-04 +3651 7.31 -5.1976879e-04 -7.1471417e-04 +3652 7.312 -5.1834132e-04 -7.1275740e-04 +3653 7.314 -5.1691775e-04 -7.1080596e-04 +3654 7.316 -5.1549809e-04 -7.0885983e-04 +3655 7.318 -5.1408231e-04 -7.0691899e-04 +3656 7.32 -5.1267041e-04 -7.0498343e-04 +3657 7.322 -5.1126237e-04 -7.0305314e-04 +3658 7.324 -5.0985819e-04 -7.0112810e-04 +3659 7.326 -5.0845786e-04 -6.9920830e-04 +3660 7.328 -5.0706136e-04 -6.9729373e-04 +3661 7.33 -5.0566868e-04 -6.9538436e-04 +3662 7.332 -5.0427982e-04 -6.9348019e-04 +3663 7.334 -5.0289475e-04 -6.9158121e-04 +3664 7.336 -5.0151349e-04 -6.8968739e-04 +3665 7.338 -5.0013600e-04 -6.8779872e-04 +3666 7.34 -4.9876229e-04 -6.8591520e-04 +3667 7.342 -4.9739234e-04 -6.8403681e-04 +3668 7.344 -4.9602614e-04 -6.8216352e-04 +3669 7.346 -4.9466368e-04 -6.8029534e-04 +3670 7.348 -4.9330495e-04 -6.7843224e-04 +3671 7.35 -4.9194995e-04 -6.7657422e-04 +3672 7.352 -4.9059865e-04 -6.7472125e-04 +3673 7.354 -4.8925106e-04 -6.7287333e-04 +3674 7.356 -4.8790716e-04 -6.7103044e-04 +3675 7.358 -4.8656693e-04 -6.6919256e-04 +3676 7.36 -4.8523038e-04 -6.6735969e-04 +3677 7.362 -4.8389749e-04 -6.6553182e-04 +3678 7.364 -4.8256825e-04 -6.6370891e-04 +3679 7.366 -4.8124265e-04 -6.6189098e-04 +3680 7.368 -4.7992068e-04 -6.6007799e-04 +3681 7.37 -4.7860234e-04 -6.5826994e-04 +3682 7.372 -4.7728760e-04 -6.5646681e-04 +3683 7.374 -4.7597647e-04 -6.5466860e-04 +3684 7.376 -4.7466892e-04 -6.5287528e-04 +3685 7.378 -4.7336496e-04 -6.5108685e-04 +3686 7.38 -4.7206457e-04 -6.4930328e-04 +3687 7.382 -4.7076775e-04 -6.4752458e-04 +3688 7.384 -4.6947447e-04 -6.4575072e-04 +3689 7.386 -4.6818474e-04 -6.4398169e-04 +3690 7.388 -4.6689854e-04 -6.4221748e-04 +3691 7.39 -4.6561587e-04 -6.4045808e-04 +3692 7.392 -4.6433671e-04 -6.3870347e-04 +3693 7.394 -4.6306105e-04 -6.3695364e-04 +3694 7.396 -4.6178889e-04 -6.3520858e-04 +3695 7.398 -4.6052021e-04 -6.3346827e-04 +3696 7.4 -4.5925501e-04 -6.3173270e-04 +3697 7.402 -4.5799328e-04 -6.3000186e-04 +3698 7.404 -4.5673500e-04 -6.2827574e-04 +3699 7.406 -4.5548017e-04 -6.2655432e-04 +3700 7.408 -4.5422878e-04 -6.2483760e-04 +3701 7.41 -4.5298082e-04 -6.2312555e-04 +3702 7.412 -4.5173628e-04 -6.2141816e-04 +3703 7.414 -4.5049514e-04 -6.1971543e-04 +3704 7.416 -4.4925741e-04 -6.1801734e-04 +3705 7.418 -4.4802307e-04 -6.1632387e-04 +3706 7.42 -4.4679211e-04 -6.1463502e-04 +3707 7.422 -4.4556453e-04 -6.1295078e-04 +3708 7.424 -4.4434031e-04 -6.1127112e-04 +3709 7.426 -4.4311944e-04 -6.0959605e-04 +3710 7.428 -4.4190192e-04 -6.0792553e-04 +3711 7.43 -4.4068773e-04 -6.0625958e-04 +3712 7.432 -4.3947688e-04 -6.0459816e-04 +3713 7.434 -4.3826934e-04 -6.0294127e-04 +3714 7.436 -4.3706511e-04 -6.0128890e-04 +3715 7.438 -4.3586418e-04 -5.9964103e-04 +3716 7.44 -4.3466654e-04 -5.9799766e-04 +3717 7.442 -4.3347219e-04 -5.9635877e-04 +3718 7.444 -4.3228110e-04 -5.9472434e-04 +3719 7.446 -4.3109329e-04 -5.9309437e-04 +3720 7.448 -4.2990872e-04 -5.9146884e-04 +3721 7.45 -4.2872741e-04 -5.8984775e-04 +3722 7.452 -4.2754933e-04 -5.8823108e-04 +3723 7.454 -4.2637448e-04 -5.8661881e-04 +3724 7.456 -4.2520285e-04 -5.8501094e-04 +3725 7.458 -4.2403443e-04 -5.8340746e-04 +3726 7.46 -4.2286922e-04 -5.8180835e-04 +3727 7.462 -4.2170720e-04 -5.8021360e-04 +3728 7.464 -4.2054836e-04 -5.7862319e-04 +3729 7.466 -4.1939270e-04 -5.7703713e-04 +3730 7.468 -4.1824021e-04 -5.7545539e-04 +3731 7.47 -4.1709088e-04 -5.7387797e-04 +3732 7.472 -4.1594470e-04 -5.7230484e-04 +3733 7.474 -4.1480166e-04 -5.7073601e-04 +3734 7.476 -4.1366175e-04 -5.6917146e-04 +3735 7.478 -4.1252497e-04 -5.6761117e-04 +3736 7.48 -4.1139130e-04 -5.6605515e-04 +3737 7.482 -4.1026074e-04 -5.6450336e-04 +3738 7.484 -4.0913329e-04 -5.6295581e-04 +3739 7.486 -4.0800892e-04 -5.6141248e-04 +3740 7.488 -4.0688763e-04 -5.5987336e-04 +3741 7.49 -4.0576942e-04 -5.5833844e-04 +3742 7.492 -4.0465428e-04 -5.5680771e-04 +3743 7.494 -4.0354219e-04 -5.5528115e-04 +3744 7.496 -4.0243315e-04 -5.5375876e-04 +3745 7.498 -4.0132715e-04 -5.5224052e-04 +3746 7.5 -4.0022418e-04 -5.5072642e-04 +3747 7.502 -3.9912424e-04 -5.4921646e-04 +3748 7.504 -3.9802732e-04 -5.4771061e-04 +3749 7.506 -3.9693340e-04 -5.4620888e-04 +3750 7.508 -3.9584248e-04 -5.4471124e-04 +3751 7.51 -3.9475455e-04 -5.4321769e-04 +3752 7.512 -3.9366960e-04 -5.4172821e-04 +3753 7.514 -3.9258763e-04 -5.4024280e-04 +3754 7.516 -3.9150863e-04 -5.3876145e-04 +3755 7.518 -3.9043258e-04 -5.3728413e-04 +3756 7.52 -3.8935949e-04 -5.3581085e-04 +3757 7.522 -3.8828934e-04 -5.3434159e-04 +3758 7.524 -3.8722212e-04 -5.3287634e-04 +3759 7.526 -3.8615783e-04 -5.3141509e-04 +3760 7.528 -3.8509646e-04 -5.2995783e-04 +3761 7.53 -3.8403800e-04 -5.2850454e-04 +3762 7.532 -3.8298244e-04 -5.2705522e-04 +3763 7.534 -3.8192977e-04 -5.2560986e-04 +3764 7.536 -3.8088000e-04 -5.2416844e-04 +3765 7.538 -3.7983310e-04 -5.2273096e-04 +3766 7.54 -3.7878907e-04 -5.2129740e-04 +3767 7.542 -3.7774790e-04 -5.1986776e-04 +3768 7.544 -3.7670960e-04 -5.1844202e-04 +3769 7.546 -3.7567413e-04 -5.1702017e-04 +3770 7.548 -3.7464151e-04 -5.1560220e-04 +3771 7.55 -3.7361172e-04 -5.1418811e-04 +3772 7.552 -3.7258476e-04 -5.1277787e-04 +3773 7.554 -3.7156061e-04 -5.1137149e-04 +3774 7.556 -3.7053927e-04 -5.0996894e-04 +3775 7.558 -3.6952073e-04 -5.0857023e-04 +3776 7.56 -3.6850499e-04 -5.0717533e-04 +3777 7.562 -3.6749203e-04 -5.0578425e-04 +3778 7.564 -3.6648185e-04 -5.0439696e-04 +3779 7.566 -3.6547444e-04 -5.0301346e-04 +3780 7.568 -3.6446979e-04 -5.0163374e-04 +3781 7.57 -3.6346790e-04 -5.0025779e-04 +3782 7.572 -3.6246876e-04 -4.9888559e-04 +3783 7.574 -3.6147235e-04 -4.9751715e-04 +3784 7.576 -3.6047868e-04 -4.9615243e-04 +3785 7.578 -3.5948774e-04 -4.9479145e-04 +3786 7.58 -3.5849952e-04 -4.9343419e-04 +3787 7.582 -3.5751400e-04 -4.9208063e-04 +3788 7.584 -3.5653119e-04 -4.9073077e-04 +3789 7.586 -3.5555108e-04 -4.8938459e-04 +3790 7.588 -3.5457365e-04 -4.8804209e-04 +3791 7.59 -3.5359891e-04 -4.8670326e-04 +3792 7.592 -3.5262683e-04 -4.8536809e-04 +3793 7.594 -3.5165743e-04 -4.8403656e-04 +3794 7.596 -3.5069069e-04 -4.8270868e-04 +3795 7.598 -3.4972659e-04 -4.8138442e-04 +3796 7.6 -3.4876515e-04 -4.8006377e-04 +3797 7.602 -3.4780634e-04 -4.7874674e-04 +3798 7.604 -3.4685016e-04 -4.7743330e-04 +3799 7.606 -3.4589660e-04 -4.7612345e-04 +3800 7.608 -3.4494566e-04 -4.7481718e-04 +3801 7.61 -3.4399733e-04 -4.7351448e-04 +3802 7.612 -3.4305160e-04 -4.7221534e-04 +3803 7.614 -3.4210847e-04 -4.7091975e-04 +3804 7.616 -3.4116792e-04 -4.6962770e-04 +3805 7.618 -3.4022995e-04 -4.6833917e-04 +3806 7.62 -3.3929456e-04 -4.6705417e-04 +3807 7.622 -3.3836173e-04 -4.6577268e-04 +3808 7.624 -3.3743147e-04 -4.6449470e-04 +3809 7.626 -3.3650375e-04 -4.6322020e-04 +3810 7.628 -3.3557858e-04 -4.6194919e-04 +3811 7.63 -3.3465595e-04 -4.6068165e-04 +3812 7.632 -3.3373585e-04 -4.5941758e-04 +3813 7.634 -3.3281828e-04 -4.5815696e-04 +3814 7.636 -3.3190322e-04 -4.5689978e-04 +3815 7.638 -3.3099068e-04 -4.5564605e-04 +3816 7.64 -3.3008064e-04 -4.5439573e-04 +3817 7.642 -3.2917309e-04 -4.5314884e-04 +3818 7.644 -3.2826804e-04 -4.5190535e-04 +3819 7.646 -3.2736547e-04 -4.5066527e-04 +3820 7.648 -3.2646538e-04 -4.4942857e-04 +3821 7.65 -3.2556775e-04 -4.4819525e-04 +3822 7.652 -3.2467259e-04 -4.4696530e-04 +3823 7.654 -3.2377989e-04 -4.4573872e-04 +3824 7.656 -3.2288964e-04 -4.4451549e-04 +3825 7.658 -3.2200183e-04 -4.4329560e-04 +3826 7.66 -3.2111645e-04 -4.4207905e-04 +3827 7.662 -3.2023351e-04 -4.4086582e-04 +3828 7.664 -3.1935299e-04 -4.3965591e-04 +3829 7.666 -3.1847488e-04 -4.3844931e-04 +3830 7.668 -3.1759919e-04 -4.3724601e-04 +3831 7.67 -3.1672590e-04 -4.3604600e-04 +3832 7.672 -3.1585500e-04 -4.3484926e-04 +3833 7.674 -3.1498650e-04 -4.3365580e-04 +3834 7.676 -3.1412038e-04 -4.3246561e-04 +3835 7.678 -3.1325663e-04 -4.3127866e-04 +3836 7.68 -3.1239526e-04 -4.3009497e-04 +3837 7.682 -3.1153625e-04 -4.2891451e-04 +3838 7.684 -3.1067960e-04 -4.2773727e-04 +3839 7.686 -3.0982530e-04 -4.2656326e-04 +3840 7.688 -3.0897334e-04 -4.2539246e-04 +3841 7.69 -3.0812373e-04 -4.2422485e-04 +3842 7.692 -3.0727644e-04 -4.2306045e-04 +3843 7.694 -3.0643148e-04 -4.2189922e-04 +3844 7.696 -3.0558884e-04 -4.2074117e-04 +3845 7.698 -3.0474852e-04 -4.1958629e-04 +3846 7.7 -3.0391050e-04 -4.1843457e-04 +3847 7.702 -3.0307478e-04 -4.1728599e-04 +3848 7.704 -3.0224135e-04 -4.1614056e-04 +3849 7.706 -3.0141021e-04 -4.1499826e-04 +3850 7.708 -3.0058135e-04 -4.1385909e-04 +3851 7.71 -2.9975477e-04 -4.1272303e-04 +3852 7.712 -2.9893046e-04 -4.1159008e-04 +3853 7.714 -2.9810841e-04 -4.1046023e-04 +3854 7.716 -2.9728862e-04 -4.0933346e-04 +3855 7.718 -2.9647107e-04 -4.0820978e-04 +3856 7.72 -2.9565578e-04 -4.0708918e-04 +3857 7.722 -2.9484272e-04 -4.0597164e-04 +3858 7.724 -2.9403189e-04 -4.0485715e-04 +3859 7.726 -2.9322329e-04 -4.0374572e-04 +3860 7.728 -2.9241690e-04 -4.0263732e-04 +3861 7.73 -2.9161273e-04 -4.0153196e-04 +3862 7.732 -2.9081077e-04 -4.0042962e-04 +3863 7.734 -2.9001101e-04 -3.9933030e-04 +3864 7.736 -2.8921345e-04 -3.9823398e-04 +3865 7.738 -2.8841808e-04 -3.9714067e-04 +3866 7.74 -2.8762488e-04 -3.9605034e-04 +3867 7.742 -2.8683387e-04 -3.9496300e-04 +3868 7.744 -2.8604503e-04 -3.9387864e-04 +3869 7.746 -2.8525836e-04 -3.9279724e-04 +3870 7.748 -2.8447384e-04 -3.9171880e-04 +3871 7.75 -2.8369148e-04 -3.9064331e-04 +3872 7.752 -2.8291126e-04 -3.8957076e-04 +3873 7.754 -2.8213319e-04 -3.8850115e-04 +3874 7.756 -2.8135726e-04 -3.8743446e-04 +3875 7.758 -2.8058345e-04 -3.8637070e-04 +3876 7.76 -2.7981177e-04 -3.8530984e-04 +3877 7.762 -2.7904221e-04 -3.8425189e-04 +3878 7.764 -2.7827476e-04 -3.8319683e-04 +3879 7.766 -2.7750942e-04 -3.8214466e-04 +3880 7.768 -2.7674618e-04 -3.8109537e-04 +3881 7.77 -2.7598504e-04 -3.8004895e-04 +3882 7.772 -2.7522599e-04 -3.7900540e-04 +3883 7.774 -2.7446902e-04 -3.7796470e-04 +3884 7.776 -2.7371413e-04 -3.7692685e-04 +3885 7.778 -2.7296131e-04 -3.7589184e-04 +3886 7.78 -2.7221056e-04 -3.7485966e-04 +3887 7.782 -2.7146187e-04 -3.7383031e-04 +3888 7.784 -2.7071523e-04 -3.7280377e-04 +3889 7.786 -2.6997065e-04 -3.7178005e-04 +3890 7.788 -2.6922811e-04 -3.7075913e-04 +3891 7.79 -2.6848761e-04 -3.6974100e-04 +3892 7.792 -2.6774914e-04 -3.6872566e-04 +3893 7.794 -2.6701271e-04 -3.6771309e-04 +3894 7.796 -2.6627829e-04 -3.6670330e-04 +3895 7.798 -2.6554589e-04 -3.6569628e-04 +3896 7.8 -2.6481550e-04 -3.6469201e-04 +3897 7.802 -2.6408712e-04 -3.6369049e-04 +3898 7.804 -2.6336074e-04 -3.6269171e-04 +3899 7.806 -2.6263635e-04 -3.6169566e-04 +3900 7.808 -2.6191396e-04 -3.6070235e-04 +3901 7.81 -2.6119354e-04 -3.5971175e-04 +3902 7.812 -2.6047511e-04 -3.5872386e-04 +3903 7.814 -2.5975864e-04 -3.5773868e-04 +3904 7.816 -2.5904415e-04 -3.5675620e-04 +3905 7.818 -2.5833162e-04 -3.5577640e-04 +3906 7.82 -2.5762104e-04 -3.5479929e-04 +3907 7.822 -2.5691242e-04 -3.5382485e-04 +3908 7.824 -2.5620574e-04 -3.5285308e-04 +3909 7.826 -2.5550100e-04 -3.5188398e-04 +3910 7.828 -2.5479820e-04 -3.5091752e-04 +3911 7.83 -2.5409733e-04 -3.4995371e-04 +3912 7.832 -2.5339839e-04 -3.4899255e-04 +3913 7.834 -2.5270136e-04 -3.4803401e-04 +3914 7.836 -2.5200625e-04 -3.4707810e-04 +3915 7.838 -2.5131305e-04 -3.4612480e-04 +3916 7.84 -2.5062175e-04 -3.4517412e-04 +3917 7.842 -2.4993235e-04 -3.4422604e-04 +3918 7.844 -2.4924484e-04 -3.4328055e-04 +3919 7.846 -2.4855922e-04 -3.4233766e-04 +3920 7.848 -2.4787549e-04 -3.4139735e-04 +3921 7.85 -2.4719363e-04 -3.4045961e-04 +3922 7.852 -2.4651365e-04 -3.3952444e-04 +3923 7.854 -2.4583553e-04 -3.3859183e-04 +3924 7.856 -2.4515928e-04 -3.3766178e-04 +3925 7.858 -2.4448489e-04 -3.3673427e-04 +3926 7.86 -2.4381234e-04 -3.3580931e-04 +3927 7.862 -2.4314165e-04 -3.3488687e-04 +3928 7.864 -2.4247279e-04 -3.3396697e-04 +3929 7.866 -2.4180578e-04 -3.3304958e-04 +3930 7.868 -2.4114059e-04 -3.3213470e-04 +3931 7.87 -2.4047724e-04 -3.3122234e-04 +3932 7.872 -2.3981570e-04 -3.3031247e-04 +3933 7.874 -2.3915599e-04 -3.2940509e-04 +3934 7.876 -2.3849808e-04 -3.2850020e-04 +3935 7.878 -2.3784198e-04 -3.2759779e-04 +3936 7.88 -2.3718769e-04 -3.2669784e-04 +3937 7.882 -2.3653519e-04 -3.2580037e-04 +3938 7.884 -2.3588448e-04 -3.2490535e-04 +3939 7.886 -2.3523557e-04 -3.2401279e-04 +3940 7.888 -2.3458843e-04 -3.2312267e-04 +3941 7.89 -2.3394307e-04 -3.2223498e-04 +3942 7.892 -2.3329949e-04 -3.2134973e-04 +3943 7.894 -2.3265767e-04 -3.2046691e-04 +3944 7.896 -2.3201762e-04 -3.1958650e-04 +3945 7.898 -2.3137933e-04 -3.1870851e-04 +3946 7.9 -2.3074279e-04 -3.1783292e-04 +3947 7.902 -2.3010799e-04 -3.1695973e-04 +3948 7.904 -2.2947494e-04 -3.1608894e-04 +3949 7.906 -2.2884364e-04 -3.1522052e-04 +3950 7.908 -2.2821406e-04 -3.1435449e-04 +3951 7.91 -2.2758622e-04 -3.1349083e-04 +3952 7.912 -2.2696010e-04 -3.1262954e-04 +3953 7.914 -2.2633570e-04 -3.1177061e-04 +3954 7.916 -2.2571301e-04 -3.1091403e-04 +3955 7.918 -2.2509204e-04 -3.1005980e-04 +3956 7.92 -2.2447277e-04 -3.0920790e-04 +3957 7.922 -2.2385521e-04 -3.0835835e-04 +3958 7.924 -2.2323934e-04 -3.0751112e-04 +3959 7.926 -2.2262516e-04 -3.0666621e-04 +3960 7.928 -2.2201267e-04 -3.0582362e-04 +3961 7.93 -2.2140186e-04 -3.0498333e-04 +3962 7.932 -2.2079273e-04 -3.0414535e-04 +3963 7.934 -2.2018528e-04 -3.0330967e-04 +3964 7.936 -2.1957949e-04 -3.0247627e-04 +3965 7.938 -2.1897537e-04 -3.0164516e-04 +3966 7.94 -2.1837291e-04 -3.0081633e-04 +3967 7.942 -2.1777211e-04 -2.9998977e-04 +3968 7.944 -2.1717295e-04 -2.9916548e-04 +3969 7.946 -2.1657544e-04 -2.9834344e-04 +3970 7.948 -2.1597958e-04 -2.9752365e-04 +3971 7.95 -2.1538535e-04 -2.9670612e-04 +3972 7.952 -2.1479275e-04 -2.9589082e-04 +3973 7.954 -2.1420178e-04 -2.9507776e-04 +3974 7.956 -2.1361244e-04 -2.9426693e-04 +3975 7.958 -2.1302471e-04 -2.9345832e-04 +3976 7.96 -2.1243860e-04 -2.9265192e-04 +3977 7.962 -2.1185410e-04 -2.9184774e-04 +3978 7.964 -2.1127121e-04 -2.9104576e-04 +3979 7.966 -2.1068992e-04 -2.9024598e-04 +3980 7.968 -2.1011023e-04 -2.8944839e-04 +3981 7.97 -2.0953212e-04 -2.8865298e-04 +3982 7.972 -2.0895561e-04 -2.8785976e-04 +3983 7.974 -2.0838068e-04 -2.8706871e-04 +3984 7.976 -2.0780734e-04 -2.8627983e-04 +3985 7.978 -2.0723556e-04 -2.8549311e-04 +3986 7.98 -2.0666536e-04 -2.8470855e-04 +3987 7.982 -2.0609673e-04 -2.8392614e-04 +3988 7.984 -2.0552966e-04 -2.8314588e-04 +3989 7.986 -2.0496414e-04 -2.8236775e-04 +3990 7.988 -2.0440018e-04 -2.8159176e-04 +3991 7.99 -2.0383777e-04 -2.8081789e-04 +3992 7.992 -2.0327691e-04 -2.8004615e-04 +3993 7.994 -2.0271759e-04 -2.7927652e-04 +3994 7.996 -2.0215980e-04 -2.7850900e-04 +3995 7.998 -2.0160355e-04 -2.7774359e-04 +3996 8.0 -2.0104883e-04 -2.7698027e-04 +3997 8.002 -2.0049563e-04 -2.7621905e-04 +3998 8.004 -1.9994395e-04 -2.7545991e-04 +3999 8.006 -1.9939379e-04 -2.7470286e-04 +4000 8.008 -1.9884514e-04 -2.7394788e-04 +4001 8.01 -1.9829799e-04 -2.7319497e-04 +4002 8.012 -1.9775236e-04 -2.7244413e-04 +4003 8.014 -1.9720822e-04 -2.7169534e-04 +4004 8.016 -1.9666557e-04 -2.7094861e-04 +4005 8.018 -1.9612442e-04 -2.7020393e-04 +4006 8.02 -1.9558476e-04 -2.6946128e-04 +4007 8.022 -1.9504657e-04 -2.6872068e-04 +4008 8.024 -1.9450987e-04 -2.6798210e-04 +4009 8.026 -1.9397464e-04 -2.6724555e-04 +4010 8.028 -1.9344089e-04 -2.6651102e-04 +4011 8.03 -1.9290860e-04 -2.6577850e-04 +4012 8.032 -1.9237777e-04 -2.6504800e-04 +4013 8.034 -1.9184841e-04 -2.6431949e-04 +4014 8.036 -1.9132049e-04 -2.6359299e-04 +4015 8.038 -1.9079403e-04 -2.6286847e-04 +4016 8.04 -1.9026902e-04 -2.6214594e-04 +4017 8.042 -1.8974545e-04 -2.6142540e-04 +4018 8.044 -1.8922332e-04 -2.6070683e-04 +4019 8.046 -1.8870262e-04 -2.5999023e-04 +4020 8.048 -1.8818335e-04 -2.5927560e-04 +4021 8.05 -1.8766552e-04 -2.5856292e-04 +4022 8.052 -1.8714910e-04 -2.5785220e-04 +4023 8.054 -1.8663411e-04 -2.5714343e-04 +4024 8.056 -1.8612053e-04 -2.5643661e-04 +4025 8.058 -1.8560836e-04 -2.5573172e-04 +4026 8.06 -1.8509760e-04 -2.5502876e-04 +4027 8.062 -1.8458824e-04 -2.5432774e-04 +4028 8.064 -1.8408028e-04 -2.5362863e-04 +4029 8.066 -1.8357373e-04 -2.5293145e-04 +4030 8.068 -1.8306856e-04 -2.5223617e-04 +4031 8.07 -1.8256478e-04 -2.5154281e-04 +4032 8.072 -1.8206239e-04 -2.5085134e-04 +4033 8.074 -1.8156137e-04 -2.5016177e-04 +4034 8.076 -1.8106174e-04 -2.4947410e-04 +4035 8.078 -1.8056347e-04 -2.4878831e-04 +4036 8.08 -1.8006658e-04 -2.4810440e-04 +4037 8.082 -1.7957106e-04 -2.4742237e-04 +4038 8.084 -1.7907689e-04 -2.4674220e-04 +4039 8.086 -1.7858409e-04 -2.4606391e-04 +4040 8.088 -1.7809263e-04 -2.4538747e-04 +4041 8.09 -1.7760253e-04 -2.4471289e-04 +4042 8.092 -1.7711378e-04 -2.4404016e-04 +4043 8.094 -1.7662637e-04 -2.4336928e-04 +4044 8.096 -1.7614030e-04 -2.4270023e-04 +4045 8.098 -1.7565557e-04 -2.4203302e-04 +4046 8.1 -1.7517217e-04 -2.4136765e-04 +4047 8.102 -1.7469010e-04 -2.4070409e-04 +4048 8.104 -1.7420935e-04 -2.4004236e-04 +4049 8.106 -1.7372993e-04 -2.3938244e-04 +4050 8.108 -1.7325182e-04 -2.3872434e-04 +4051 8.11 -1.7277503e-04 -2.3806804e-04 +4052 8.112 -1.7229955e-04 -2.3741354e-04 +4053 8.114 -1.7182537e-04 -2.3676083e-04 +4054 8.116 -1.7135250e-04 -2.3610992e-04 +4055 8.118 -1.7088093e-04 -2.3546079e-04 +4056 8.12 -1.7041066e-04 -2.3481344e-04 +4057 8.122 -1.6994168e-04 -2.3416787e-04 +4058 8.124 -1.6947399e-04 -2.3352407e-04 +4059 8.126 -1.6900758e-04 -2.3288204e-04 +4060 8.128 -1.6854246e-04 -2.3224177e-04 +4061 8.13 -1.6807861e-04 -2.3160326e-04 +4062 8.132 -1.6761604e-04 -2.3096649e-04 +4063 8.134 -1.6715475e-04 -2.3033148e-04 +4064 8.136 -1.6669472e-04 -2.2969821e-04 +4065 8.138 -1.6623595e-04 -2.2906667e-04 +4066 8.14 -1.6577845e-04 -2.2843687e-04 +4067 8.142 -1.6532220e-04 -2.2780879e-04 +4068 8.144 -1.6486721e-04 -2.2718244e-04 +4069 8.146 -1.6441347e-04 -2.2655781e-04 +4070 8.148 -1.6396098e-04 -2.2593489e-04 +4071 8.15 -1.6350973e-04 -2.2531369e-04 +4072 8.152 -1.6305972e-04 -2.2469418e-04 +4073 8.154 -1.6261095e-04 -2.2407638e-04 +4074 8.156 -1.6216342e-04 -2.2346027e-04 +4075 8.158 -1.6171711e-04 -2.2284585e-04 +4076 8.16 -1.6127203e-04 -2.2223312e-04 +4077 8.162 -1.6082818e-04 -2.2162207e-04 +4078 8.164 -1.6038554e-04 -2.2101270e-04 +4079 8.166 -1.5994413e-04 -2.2040500e-04 +4080 8.168 -1.5950392e-04 -2.1979896e-04 +4081 8.17 -1.5906493e-04 -2.1919460e-04 +4082 8.172 -1.5862714e-04 -2.1859188e-04 +4083 8.174 -1.5819056e-04 -2.1799083e-04 +4084 8.176 -1.5775518e-04 -2.1739142e-04 +4085 8.178 -1.5732099e-04 -2.1679366e-04 +4086 8.18 -1.5688800e-04 -2.1619754e-04 +4087 8.182 -1.5645620e-04 -2.1560305e-04 +4088 8.184 -1.5602559e-04 -2.1501020e-04 +4089 8.186 -1.5559616e-04 -2.1441897e-04 +4090 8.188 -1.5516791e-04 -2.1382937e-04 +4091 8.19 -1.5474084e-04 -2.1324138e-04 +4092 8.192 -1.5431495e-04 -2.1265501e-04 +4093 8.194 -1.5389022e-04 -2.1207025e-04 +4094 8.196 -1.5346666e-04 -2.1148709e-04 +4095 8.198 -1.5304427e-04 -2.1090553e-04 +4096 8.2 -1.5262304e-04 -2.1032557e-04 +4097 8.202 -1.5220297e-04 -2.0974721e-04 +4098 8.204 -1.5178405e-04 -2.0917043e-04 +4099 8.206 -1.5136629e-04 -2.0859523e-04 +4100 8.208 -1.5094967e-04 -2.0802161e-04 +4101 8.21 -1.5053420e-04 -2.0744957e-04 +4102 8.212 -1.5011987e-04 -2.0687909e-04 +4103 8.214 -1.4970668e-04 -2.0631018e-04 +4104 8.216 -1.4929463e-04 -2.0574284e-04 +4105 8.218 -1.4888371e-04 -2.0517705e-04 +4106 8.22 -1.4847392e-04 -2.0461281e-04 +4107 8.222 -1.4806526e-04 -2.0405013e-04 +4108 8.224 -1.4765772e-04 -2.0348899e-04 +4109 8.226 -1.4725130e-04 -2.0292938e-04 +4110 8.228 -1.4684600e-04 -2.0237132e-04 +4111 8.23 -1.4644181e-04 -2.0181479e-04 +4112 8.232 -1.4603874e-04 -2.0125978e-04 +4113 8.234 -1.4563677e-04 -2.0070630e-04 +4114 8.236 -1.4523591e-04 -2.0015434e-04 +4115 8.238 -1.4483615e-04 -1.9960389e-04 +4116 8.24 -1.4443750e-04 -1.9905495e-04 +4117 8.242 -1.4403993e-04 -1.9850753e-04 +4118 8.244 -1.4364346e-04 -1.9796160e-04 +4119 8.246 -1.4324809e-04 -1.9741717e-04 +4120 8.248 -1.4285379e-04 -1.9687424e-04 +4121 8.25 -1.4246059e-04 -1.9633280e-04 +4122 8.252 -1.4206846e-04 -1.9579284e-04 +4123 8.254 -1.4167742e-04 -1.9525437e-04 +4124 8.256 -1.4128744e-04 -1.9471738e-04 +4125 8.258 -1.4089854e-04 -1.9418186e-04 +4126 8.26 -1.4051072e-04 -1.9364781e-04 +4127 8.262 -1.4012395e-04 -1.9311523e-04 +4128 8.264 -1.3973825e-04 -1.9258411e-04 +4129 8.266 -1.3935362e-04 -1.9205444e-04 +4130 8.268 -1.3897003e-04 -1.9152623e-04 +4131 8.27 -1.3858751e-04 -1.9099948e-04 +4132 8.272 -1.3820604e-04 -1.9047417e-04 +4133 8.274 -1.3782561e-04 -1.8995030e-04 +4134 8.276 -1.3744623e-04 -1.8942787e-04 +4135 8.278 -1.3706790e-04 -1.8890687e-04 +4136 8.28 -1.3669061e-04 -1.8838731e-04 +4137 8.282 -1.3631435e-04 -1.8786917e-04 +4138 8.284 -1.3593913e-04 -1.8735245e-04 +4139 8.286 -1.3556494e-04 -1.8683715e-04 +4140 8.288 -1.3519178e-04 -1.8632327e-04 +4141 8.29 -1.3481964e-04 -1.8581080e-04 +4142 8.292 -1.3444853e-04 -1.8529974e-04 +4143 8.294 -1.3407844e-04 -1.8479008e-04 +4144 8.296 -1.3370937e-04 -1.8428182e-04 +4145 8.298 -1.3334132e-04 -1.8377495e-04 +4146 8.3 -1.3297427e-04 -1.8326948e-04 +4147 8.302 -1.3260824e-04 -1.8276539e-04 +4148 8.304 -1.3224321e-04 -1.8226269e-04 +4149 8.306 -1.3187919e-04 -1.8176137e-04 +4150 8.308 -1.3151616e-04 -1.8126143e-04 +4151 8.31 -1.3115414e-04 -1.8076286e-04 +4152 8.312 -1.3079311e-04 -1.8026566e-04 +4153 8.314 -1.3043308e-04 -1.7976982e-04 +4154 8.316 -1.3007403e-04 -1.7927535e-04 +4155 8.318 -1.2971597e-04 -1.7878223e-04 +4156 8.32 -1.2935890e-04 -1.7829047e-04 +4157 8.322 -1.2900281e-04 -1.7780006e-04 +4158 8.324 -1.2864770e-04 -1.7731100e-04 +4159 8.326 -1.2829357e-04 -1.7682328e-04 +4160 8.328 -1.2794041e-04 -1.7633690e-04 +4161 8.33 -1.2758822e-04 -1.7585185e-04 +4162 8.332 -1.2723700e-04 -1.7536814e-04 +4163 8.334 -1.2688674e-04 -1.7488575e-04 +4164 8.336 -1.2653745e-04 -1.7440469e-04 +4165 8.338 -1.2618912e-04 -1.7392495e-04 +4166 8.34 -1.2584175e-04 -1.7344653e-04 +4167 8.342 -1.2549534e-04 -1.7296943e-04 +4168 8.344 -1.2514987e-04 -1.7249363e-04 +4169 8.346 -1.2480536e-04 -1.7201914e-04 +4170 8.348 -1.2446180e-04 -1.7154595e-04 +4171 8.35 -1.2411918e-04 -1.7107407e-04 +4172 8.352 -1.2377750e-04 -1.7060348e-04 +4173 8.354 -1.2343676e-04 -1.7013418e-04 +4174 8.356 -1.2309696e-04 -1.6966617e-04 +4175 8.358 -1.2275810e-04 -1.6919945e-04 +4176 8.36 -1.2242016e-04 -1.6873401e-04 +4177 8.362 -1.2208316e-04 -1.6826984e-04 +4178 8.364 -1.2174708e-04 -1.6780695e-04 +4179 8.366 -1.2141193e-04 -1.6734534e-04 +4180 8.368 -1.2107770e-04 -1.6688499e-04 +4181 8.37 -1.2074439e-04 -1.6642591e-04 +4182 8.372 -1.2041200e-04 -1.6596808e-04 +4183 8.374 -1.2008052e-04 -1.6551152e-04 +4184 8.376 -1.1974995e-04 -1.6505621e-04 +4185 8.378 -1.1942029e-04 -1.6460215e-04 +4186 8.38 -1.1909154e-04 -1.6414934e-04 +4187 8.382 -1.1876369e-04 -1.6369777e-04 +4188 8.384 -1.1843675e-04 -1.6324744e-04 +4189 8.386 -1.1811070e-04 -1.6279835e-04 +4190 8.388 -1.1778555e-04 -1.6235049e-04 +4191 8.39 -1.1746130e-04 -1.6190386e-04 +4192 8.392 -1.1713794e-04 -1.6145846e-04 +4193 8.394 -1.1681547e-04 -1.6101429e-04 +4194 8.396 -1.1649388e-04 -1.6057133e-04 +4195 8.398 -1.1617318e-04 -1.6012959e-04 +4196 8.4 -1.1585336e-04 -1.5968906e-04 +4197 8.402 -1.1553442e-04 -1.5924975e-04 +4198 8.404 -1.1521636e-04 -1.5881164e-04 +4199 8.406 -1.1489917e-04 -1.5837474e-04 +4200 8.408 -1.1458286e-04 -1.5793903e-04 +4201 8.41 -1.1426742e-04 -1.5750452e-04 +4202 8.412 -1.1395284e-04 -1.5707121e-04 +4203 8.414 -1.1363913e-04 -1.5663909e-04 +4204 8.416 -1.1332629e-04 -1.5620815e-04 +4205 8.418 -1.1301430e-04 -1.5577840e-04 +4206 8.42 -1.1270317e-04 -1.5534983e-04 +4207 8.422 -1.1239290e-04 -1.5492243e-04 +4208 8.424 -1.1208348e-04 -1.5449621e-04 +4209 8.426 -1.1177491e-04 -1.5407116e-04 +4210 8.428 -1.1146719e-04 -1.5364728e-04 +4211 8.43 -1.1116032e-04 -1.5322457e-04 +4212 8.432 -1.1085430e-04 -1.5280301e-04 +4213 8.434 -1.1054911e-04 -1.5238262e-04 +4214 8.436 -1.1024476e-04 -1.5196337e-04 +4215 8.438 -1.0994126e-04 -1.5154529e-04 +4216 8.44 -1.0963858e-04 -1.5112834e-04 +4217 8.442 -1.0933674e-04 -1.5071255e-04 +4218 8.444 -1.0903573e-04 -1.5029790e-04 +4219 8.446 -1.0873555e-04 -1.4988438e-04 +4220 8.448 -1.0843619e-04 -1.4947201e-04 +4221 8.45 -1.0813766e-04 -1.4906076e-04 +4222 8.452 -1.0783995e-04 -1.4865065e-04 +4223 8.454 -1.0754306e-04 -1.4824166e-04 +4224 8.456 -1.0724698e-04 -1.4783380e-04 +4225 8.458 -1.0695172e-04 -1.4742706e-04 +4226 8.46 -1.0665727e-04 -1.4702143e-04 +4227 8.462 -1.0636364e-04 -1.4661692e-04 +4228 8.464 -1.0607080e-04 -1.4621352e-04 +4229 8.466 -1.0577878e-04 -1.4581123e-04 +4230 8.468 -1.0548756e-04 -1.4541005e-04 +4231 8.47 -1.0519714e-04 -1.4500997e-04 +4232 8.472 -1.0490752e-04 -1.4461099e-04 +4233 8.474 -1.0461869e-04 -1.4421310e-04 +4234 8.476 -1.0433067e-04 -1.4381631e-04 +4235 8.478 -1.0404343e-04 -1.4342060e-04 +4236 8.48 -1.0375698e-04 -1.4302599e-04 +4237 8.482 -1.0347132e-04 -1.4263246e-04 +4238 8.484 -1.0318645e-04 -1.4224001e-04 +4239 8.486 -1.0290236e-04 -1.4184864e-04 +4240 8.488 -1.0261906e-04 -1.4145834e-04 +4241 8.49 -1.0233653e-04 -1.4106912e-04 +4242 8.492 -1.0205478e-04 -1.4068097e-04 +4243 8.494 -1.0177380e-04 -1.4029388e-04 +4244 8.496 -1.0149360e-04 -1.3990786e-04 +4245 8.498 -1.0121417e-04 -1.3952290e-04 +4246 8.5 -1.0093551e-04 -1.3913899e-04 +4247 8.502 -1.0065762e-04 -1.3875615e-04 +4248 8.504 -1.0038049e-04 -1.3837435e-04 +4249 8.506 -1.0010412e-04 -1.3799360e-04 +4250 8.508 -9.9828510e-05 -1.3761390e-04 +4251 8.51 -9.9553661e-05 -1.3723525e-04 +4252 8.512 -9.9279569e-05 -1.3685763e-04 +4253 8.514 -9.9006230e-05 -1.3648105e-04 +4254 8.516 -9.8733644e-05 -1.3610551e-04 +4255 8.518 -9.8461807e-05 -1.3573100e-04 +4256 8.52 -9.8190719e-05 -1.3535751e-04 +4257 8.522 -9.7920377e-05 -1.3498506e-04 +4258 8.524 -9.7650778e-05 -1.3461363e-04 +4259 8.526 -9.7381921e-05 -1.3424322e-04 +4260 8.528 -9.7113805e-05 -1.3387382e-04 +4261 8.53 -9.6846425e-05 -1.3350544e-04 +4262 8.532 -9.6579782e-05 -1.3313808e-04 +4263 8.534 -9.6313872e-05 -1.3277172e-04 +4264 8.536 -9.6048695e-05 -1.3240638e-04 +4265 8.538 -9.5784246e-05 -1.3204203e-04 +4266 8.54 -9.5520526e-05 -1.3167869e-04 +4267 8.542 -9.5257531e-05 -1.3131634e-04 +4268 8.544 -9.4995260e-05 -1.3095500e-04 +4269 8.546 -9.4733710e-05 -1.3059464e-04 +4270 8.548 -9.4472881e-05 -1.3023528e-04 +4271 8.55 -9.4212768e-05 -1.2987690e-04 +4272 8.552 -9.3953372e-05 -1.2951951e-04 +4273 8.554 -9.3694690e-05 -1.2916310e-04 +4274 8.556 -9.3436719e-05 -1.2880767e-04 +4275 8.558 -9.3179458e-05 -1.2845322e-04 +4276 8.56 -9.2922906e-05 -1.2809974e-04 +4277 8.562 -9.2667059e-05 -1.2774723e-04 +4278 8.564 -9.2411916e-05 -1.2739569e-04 +4279 8.566 -9.2157475e-05 -1.2704512e-04 +4280 8.568 -9.1903735e-05 -1.2669551e-04 +4281 8.57 -9.1650693e-05 -1.2634687e-04 +4282 8.572 -9.1398347e-05 -1.2599918e-04 +4283 8.574 -9.1146695e-05 -1.2565245e-04 +4284 8.576 -9.0895736e-05 -1.2530667e-04 +4285 8.578 -9.0645468e-05 -1.2496184e-04 +4286 8.58 -9.0395888e-05 -1.2461796e-04 +4287 8.582 -9.0146996e-05 -1.2427502e-04 +4288 8.584 -8.9898788e-05 -1.2393303e-04 +4289 8.586 -8.9651263e-05 -1.2359198e-04 +4290 8.588 -8.9404419e-05 -1.2325186e-04 +4291 8.59 -8.9158255e-05 -1.2291268e-04 +4292 8.592 -8.8912768e-05 -1.2257443e-04 +4293 8.594 -8.8667956e-05 -1.2223711e-04 +4294 8.596 -8.8423819e-05 -1.2190072e-04 +4295 8.598 -8.8180353e-05 -1.2156526e-04 +4296 8.6 -8.7937557e-05 -1.2123071e-04 +4297 8.602 -8.7695430e-05 -1.2089709e-04 +4298 8.604 -8.7453968e-05 -1.2056438e-04 +4299 8.606 -8.7213171e-05 -1.2023259e-04 +4300 8.608 -8.6973037e-05 -1.1990171e-04 +4301 8.61 -8.6733564e-05 -1.1957174e-04 +4302 8.612 -8.6494750e-05 -1.1924268e-04 +4303 8.614 -8.6256593e-05 -1.1891452e-04 +4304 8.616 -8.6019091e-05 -1.1858726e-04 +4305 8.618 -8.5782243e-05 -1.1826090e-04 +4306 8.62 -8.5546047e-05 -1.1793545e-04 +4307 8.622 -8.5310501e-05 -1.1761088e-04 +4308 8.624 -8.5075603e-05 -1.1728721e-04 +4309 8.626 -8.4841351e-05 -1.1696443e-04 +4310 8.628 -8.4607744e-05 -1.1664253e-04 +4311 8.63 -8.4374780e-05 -1.1632152e-04 +4312 8.632 -8.4142458e-05 -1.1600139e-04 +4313 8.634 -8.3910774e-05 -1.1568215e-04 +4314 8.636 -8.3679729e-05 -1.1536378e-04 +4315 8.638 -8.3449319e-05 -1.1504628e-04 +4316 8.64 -8.3219543e-05 -1.1472966e-04 +4317 8.642 -8.2990399e-05 -1.1441391e-04 +4318 8.644 -8.2761887e-05 -1.1409903e-04 +4319 8.646 -8.2534003e-05 -1.1378501e-04 +4320 8.648 -8.2306746e-05 -1.1347186e-04 +4321 8.65 -8.2080115e-05 -1.1315956e-04 +4322 8.652 -8.1854107e-05 -1.1284813e-04 +4323 8.654 -8.1628722e-05 -1.1253755e-04 +4324 8.656 -8.1403956e-05 -1.1222783e-04 +4325 8.658 -8.1179810e-05 -1.1191896e-04 +4326 8.66 -8.0956280e-05 -1.1161093e-04 +4327 8.662 -8.0733365e-05 -1.1130376e-04 +4328 8.664 -8.0511064e-05 -1.1099743e-04 +4329 8.666 -8.0289375e-05 -1.1069194e-04 +4330 8.668 -8.0068296e-05 -1.1038729e-04 +4331 8.67 -7.9847825e-05 -1.1008348e-04 +4332 8.672 -7.9627962e-05 -1.0978050e-04 +4333 8.674 -7.9408703e-05 -1.0947836e-04 +4334 8.676 -7.9190048e-05 -1.0917704e-04 +4335 8.678 -7.8971994e-05 -1.0887656e-04 +4336 8.68 -7.8754541e-05 -1.0857690e-04 +4337 8.682 -7.8537686e-05 -1.0827807e-04 +4338 8.684 -7.8321428e-05 -1.0798006e-04 +4339 8.686 -7.8105765e-05 -1.0768287e-04 +4340 8.688 -7.7890696e-05 -1.0738649e-04 +4341 8.69 -7.7676219e-05 -1.0709093e-04 +4342 8.692 -7.7462332e-05 -1.0679618e-04 +4343 8.694 -7.7249033e-05 -1.0650225e-04 +4344 8.696 -7.7036322e-05 -1.0620912e-04 +4345 8.698 -7.6824196e-05 -1.0591679e-04 +4346 8.7 -7.6612655e-05 -1.0562528e-04 +4347 8.702 -7.6401695e-05 -1.0533456e-04 +4348 8.704 -7.6191316e-05 -1.0504464e-04 +4349 8.706 -7.5981516e-05 -1.0475552e-04 +4350 8.708 -7.5772293e-05 -1.0446720e-04 +4351 8.71 -7.5563646e-05 -1.0417966e-04 +4352 8.712 -7.5355574e-05 -1.0389292e-04 +4353 8.714 -7.5148074e-05 -1.0360697e-04 +4354 8.716 -7.4941146e-05 -1.0332180e-04 +4355 8.718 -7.4734786e-05 -1.0303742e-04 +4356 8.72 -7.4528995e-05 -1.0275382e-04 +4357 8.722 -7.4323771e-05 -1.0247100e-04 +4358 8.724 -7.4119111e-05 -1.0218895e-04 +4359 8.726 -7.3915014e-05 -1.0190769e-04 +4360 8.728 -7.3711480e-05 -1.0162719e-04 +4361 8.73 -7.3508505e-05 -1.0134747e-04 +4362 8.732 -7.3306089e-05 -1.0106852e-04 +4363 8.734 -7.3104231e-05 -1.0079033e-04 +4364 8.736 -7.2902927e-05 -1.0051291e-04 +4365 8.738 -7.2702178e-05 -1.0023625e-04 +4366 8.74 -7.2501982e-05 -9.9960352e-05 +4367 8.742 -7.2302336e-05 -9.9685214e-05 +4368 8.744 -7.2103241e-05 -9.9410832e-05 +4369 8.746 -7.1904693e-05 -9.9137204e-05 +4370 8.748 -7.1706691e-05 -9.8864329e-05 +4371 8.75 -7.1509235e-05 -9.8592205e-05 +4372 8.752 -7.1312322e-05 -9.8320829e-05 +4373 8.754 -7.1115951e-05 -9.8050199e-05 +4374 8.756 -7.0920121e-05 -9.7780314e-05 +4375 8.758 -7.0724829e-05 -9.7511171e-05 +4376 8.76 -7.0530075e-05 -9.7242768e-05 +4377 8.762 -7.0335858e-05 -9.6975103e-05 +4378 8.764 -7.0142175e-05 -9.6708174e-05 +4379 8.766 -6.9949024e-05 -9.6441980e-05 +4380 8.768 -6.9756406e-05 -9.6176517e-05 +4381 8.77 -6.9564318e-05 -9.5911785e-05 +4382 8.772 -6.9372758e-05 -9.5647781e-05 +4383 8.774 -6.9181726e-05 -9.5384502e-05 +4384 8.776 -6.8991220e-05 -9.5121948e-05 +4385 8.778 -6.8801238e-05 -9.4860117e-05 +4386 8.78 -6.8611779e-05 -9.4599005e-05 +4387 8.782 -6.8422842e-05 -9.4338611e-05 +4388 8.784 -6.8234424e-05 -9.4078934e-05 +4389 8.786 -6.8046525e-05 -9.3819970e-05 +4390 8.788 -6.7859144e-05 -9.3561719e-05 +4391 8.79 -6.7672278e-05 -9.3304179e-05 +4392 8.792 -6.7485927e-05 -9.3047346e-05 +4393 8.794 -6.7300088e-05 -9.2791220e-05 +4394 8.796 -6.7114761e-05 -9.2535799e-05 +4395 8.798 -6.6929944e-05 -9.2281080e-05 +4396 8.8 -6.6745636e-05 -9.2027062e-05 +4397 8.802 -6.6561836e-05 -9.1773742e-05 +4398 8.804 -6.6378541e-05 -9.1521119e-05 +4399 8.806 -6.6195751e-05 -9.1269191e-05 +4400 8.808 -6.6013464e-05 -9.1017956e-05 +4401 8.81 -6.5831679e-05 -9.0767412e-05 +4402 8.812 -6.5650394e-05 -9.0517557e-05 +4403 8.814 -6.5469608e-05 -9.0268389e-05 +4404 8.816 -6.5289320e-05 -9.0019907e-05 +4405 8.818 -6.5109528e-05 -8.9772108e-05 +4406 8.82 -6.4930231e-05 -8.9524990e-05 +4407 8.822 -6.4751427e-05 -8.9278553e-05 +4408 8.824 -6.4573116e-05 -8.9032793e-05 +4409 8.826 -6.4395296e-05 -8.8787709e-05 +4410 8.828 -6.4217965e-05 -8.8543300e-05 +4411 8.83 -6.4041122e-05 -8.8299562e-05 +4412 8.832 -6.3864766e-05 -8.8056496e-05 +4413 8.834 -6.3688896e-05 -8.7814097e-05 +4414 8.836 -6.3513509e-05 -8.7572366e-05 +4415 8.838 -6.3338606e-05 -8.7331299e-05 +4416 8.84 -6.3164184e-05 -8.7090896e-05 +4417 8.842 -6.2990242e-05 -8.6851154e-05 +4418 8.844 -6.2816779e-05 -8.6612071e-05 +4419 8.846 -6.2643793e-05 -8.6373646e-05 +4420 8.848 -6.2471284e-05 -8.6135877e-05 +4421 8.85 -6.2299249e-05 -8.5898761e-05 +4422 8.852 -6.2127688e-05 -8.5662298e-05 +4423 8.854 -6.1956599e-05 -8.5426486e-05 +4424 8.856 -6.1785982e-05 -8.5191322e-05 +4425 8.858 -6.1615834e-05 -8.4956805e-05 +4426 8.86 -6.1446154e-05 -8.4722934e-05 +4427 8.862 -6.1276942e-05 -8.4489705e-05 +4428 8.864 -6.1108195e-05 -8.4257118e-05 +4429 8.866 -6.0939913e-05 -8.4025171e-05 +4430 8.868 -6.0772094e-05 -8.3793862e-05 +4431 8.87 -6.0604737e-05 -8.3563189e-05 +4432 8.872 -6.0437841e-05 -8.3333151e-05 +4433 8.874 -6.0271404e-05 -8.3103746e-05 +4434 8.876 -6.0105425e-05 -8.2874972e-05 +4435 8.878 -5.9939903e-05 -8.2646827e-05 +4436 8.88 -5.9774837e-05 -8.2419310e-05 +4437 8.882 -5.9610226e-05 -8.2192418e-05 +4438 8.884 -5.9446067e-05 -8.1966151e-05 +4439 8.886 -5.9282361e-05 -8.1740506e-05 +4440 8.888 -5.9119105e-05 -8.1515482e-05 +4441 8.89 -5.8956298e-05 -8.1291077e-05 +4442 8.892 -5.8793940e-05 -8.1067289e-05 +4443 8.894 -5.8632029e-05 -8.0844117e-05 +4444 8.896 -5.8470563e-05 -8.0621559e-05 +4445 8.898 -5.8309542e-05 -8.0399613e-05 +4446 8.9 -5.8148964e-05 -8.0178278e-05 +4447 8.902 -5.7988829e-05 -7.9957552e-05 +4448 8.904 -5.7829134e-05 -7.9737433e-05 +4449 8.906 -5.7669879e-05 -7.9517919e-05 +4450 8.908 -5.7511062e-05 -7.9299010e-05 +4451 8.91 -5.7352682e-05 -7.9080702e-05 +4452 8.912 -5.7194739e-05 -7.8862995e-05 +4453 8.914 -5.7037230e-05 -7.8645888e-05 +4454 8.916 -5.6880155e-05 -7.8429377e-05 +4455 8.918 -5.6723512e-05 -7.8213462e-05 +4456 8.92 -5.6567300e-05 -7.7998141e-05 +4457 8.922 -5.6411519e-05 -7.7783413e-05 +4458 8.924 -5.6256166e-05 -7.7569275e-05 +4459 8.926 -5.6101241e-05 -7.7355726e-05 +4460 8.928 -5.5946743e-05 -7.7142765e-05 +4461 8.93 -5.5792670e-05 -7.6930390e-05 +4462 8.932 -5.5639021e-05 -7.6718599e-05 +4463 8.934 -5.5485795e-05 -7.6507391e-05 +4464 8.936 -5.5332991e-05 -7.6296763e-05 +4465 8.938 -5.5180608e-05 -7.6086716e-05 +4466 8.94 -5.5028644e-05 -7.5877246e-05 +4467 8.942 -5.4877098e-05 -7.5668352e-05 +4468 8.944 -5.4725970e-05 -7.5460034e-05 +4469 8.946 -5.4575258e-05 -7.5252288e-05 +4470 8.948 -5.4424961e-05 -7.5045114e-05 +4471 8.95 -5.4275077e-05 -7.4838510e-05 +4472 8.952 -5.4125606e-05 -7.4632474e-05 +4473 8.954 -5.3976547e-05 -7.4427005e-05 +4474 8.956 -5.3827898e-05 -7.4222102e-05 +4475 8.958 -5.3679658e-05 -7.4017762e-05 +4476 8.96 -5.3531826e-05 -7.3813985e-05 +4477 8.962 -5.3384402e-05 -7.3610768e-05 +4478 8.964 -5.3237383e-05 -7.3408110e-05 +4479 8.966 -5.3090769e-05 -7.3206010e-05 +4480 8.968 -5.2944558e-05 -7.3004466e-05 +4481 8.97 -5.2798751e-05 -7.2803476e-05 +4482 8.972 -5.2653344e-05 -7.2603040e-05 +4483 8.974 -5.2508338e-05 -7.2403155e-05 +4484 8.976 -5.2363731e-05 -7.2203819e-05 +4485 8.978 -5.2219522e-05 -7.2005033e-05 +4486 8.98 -5.2075711e-05 -7.1806793e-05 +4487 8.982 -5.1932295e-05 -7.1609099e-05 +4488 8.984 -5.1789274e-05 -7.1411949e-05 +4489 8.986 -5.1646647e-05 -7.1215341e-05 +4490 8.988 -5.1504412e-05 -7.1019274e-05 +4491 8.99 -5.1362569e-05 -7.0823746e-05 +4492 8.992 -5.1221117e-05 -7.0628757e-05 +4493 8.994 -5.1080054e-05 -7.0434304e-05 +4494 8.996 -5.0939379e-05 -7.0240386e-05 +4495 8.998 -5.0799092e-05 -7.0047002e-05 +4496 9.0 -5.0659191e-05 -6.9854150e-05 +4497 9.002 -5.0519675e-05 -6.9661828e-05 +4498 9.004 -5.0380543e-05 -6.9470036e-05 +4499 9.006 -5.0241795e-05 -6.9278771e-05 +4500 9.008 -5.0103428e-05 -6.9088033e-05 +4501 9.01 -4.9965442e-05 -6.8897819e-05 +4502 9.012 -4.9827836e-05 -6.8708129e-05 +4503 9.014 -4.9690609e-05 -6.8518961e-05 +4504 9.016 -4.9553760e-05 -6.8330313e-05 +4505 9.018 -4.9417288e-05 -6.8142184e-05 +4506 9.02 -4.9281191e-05 -6.7954573e-05 +4507 9.022 -4.9145469e-05 -6.7767479e-05 +4508 9.024 -4.9010121e-05 -6.7580899e-05 +4509 9.026 -4.8875145e-05 -6.7394832e-05 +4510 9.028 -4.8740541e-05 -6.7209278e-05 +4511 9.03 -4.8606308e-05 -6.7024234e-05 +4512 9.032 -4.8472444e-05 -6.6839699e-05 +4513 9.034 -4.8338948e-05 -6.6655672e-05 +4514 9.036 -4.8205821e-05 -6.6472152e-05 +4515 9.038 -4.8073059e-05 -6.6289136e-05 +4516 9.04 -4.7940664e-05 -6.6106624e-05 +4517 9.042 -4.7808633e-05 -6.5924614e-05 +4518 9.044 -4.7676965e-05 -6.5743105e-05 +4519 9.046 -4.7545660e-05 -6.5562096e-05 +4520 9.048 -4.7414716e-05 -6.5381585e-05 +4521 9.05 -4.7284133e-05 -6.5201570e-05 +4522 9.052 -4.7153910e-05 -6.5022051e-05 +4523 9.054 -4.7024045e-05 -6.4843025e-05 +4524 9.056 -4.6894537e-05 -6.4664493e-05 +4525 9.058 -4.6765386e-05 -6.4486451e-05 +4526 9.06 -4.6636591e-05 -6.4308900e-05 +4527 9.062 -4.6508150e-05 -6.4131837e-05 +4528 9.064 -4.6380063e-05 -6.3955261e-05 +4529 9.066 -4.6252329e-05 -6.3779172e-05 +4530 9.068 -4.6124946e-05 -6.3603567e-05 +4531 9.07 -4.5997915e-05 -6.3428445e-05 +4532 9.072 -4.5871232e-05 -6.3253805e-05 +4533 9.074 -4.5744899e-05 -6.3079645e-05 +4534 9.076 -4.5618913e-05 -6.2905965e-05 +4535 9.078 -4.5493275e-05 -6.2732763e-05 +4536 9.08 -4.5367982e-05 -6.2560037e-05 +4537 9.082 -4.5243034e-05 -6.2387787e-05 +4538 9.084 -4.5118431e-05 -6.2216011e-05 +4539 9.086 -4.4994170e-05 -6.2044707e-05 +4540 9.088 -4.4870251e-05 -6.1873875e-05 +4541 9.09 -4.4746674e-05 -6.1703513e-05 +4542 9.092 -4.4623437e-05 -6.1533620e-05 +4543 9.094 -4.4500539e-05 -6.1364194e-05 +4544 9.096 -4.4377980e-05 -6.1195235e-05 +4545 9.098 -4.4255758e-05 -6.1026741e-05 +4546 9.1 -4.4133873e-05 -6.0858710e-05 +4547 9.102 -4.4012323e-05 -6.0691141e-05 +4548 9.104 -4.3891108e-05 -6.0524034e-05 +4549 9.106 -4.3770227e-05 -6.0357387e-05 +4550 9.108 -4.3649678e-05 -6.0191198e-05 +4551 9.11 -4.3529461e-05 -6.0025467e-05 +4552 9.112 -4.3409576e-05 -5.9860192e-05 +4553 9.114 -4.3290020e-05 -5.9695371e-05 +4554 9.116 -4.3170794e-05 -5.9531004e-05 +4555 9.118 -4.3051896e-05 -5.9367090e-05 +4556 9.12 -4.2933325e-05 -5.9203627e-05 +4557 9.122 -4.2815081e-05 -5.9040613e-05 +4558 9.124 -4.2697163e-05 -5.8878048e-05 +4559 9.126 -4.2579569e-05 -5.8715931e-05 +4560 9.128 -4.2462299e-05 -5.8554259e-05 +4561 9.13 -4.2345351e-05 -5.8393033e-05 +4562 9.132 -4.2228726e-05 -5.8232250e-05 +4563 9.134 -4.2112422e-05 -5.8071910e-05 +4564 9.136 -4.1996438e-05 -5.7912011e-05 +4565 9.138 -4.1880774e-05 -5.7752552e-05 +4566 9.14 -4.1765428e-05 -5.7593532e-05 +4567 9.142 -4.1650399e-05 -5.7434950e-05 +4568 9.144 -4.1535688e-05 -5.7276804e-05 +4569 9.146 -4.1421292e-05 -5.7119093e-05 +4570 9.148 -4.1307211e-05 -5.6961816e-05 +4571 9.15 -4.1193444e-05 -5.6804972e-05 +4572 9.152 -4.1079991e-05 -5.6648560e-05 +4573 9.154 -4.0966850e-05 -5.6492578e-05 +4574 9.156 -4.0854020e-05 -5.6337026e-05 +4575 9.158 -4.0741501e-05 -5.6181902e-05 +4576 9.16 -4.0629292e-05 -5.6027204e-05 +4577 9.162 -4.0517392e-05 -5.5872933e-05 +4578 9.164 -4.0405800e-05 -5.5719086e-05 +4579 9.166 -4.0294516e-05 -5.5565662e-05 +4580 9.168 -4.0183537e-05 -5.5412661e-05 +4581 9.17 -4.0072865e-05 -5.5260080e-05 +4582 9.172 -3.9962497e-05 -5.5107920e-05 +4583 9.174 -3.9852433e-05 -5.4956178e-05 +4584 9.176 -3.9742672e-05 -5.4804854e-05 +4585 9.178 -3.9633213e-05 -5.4653947e-05 +4586 9.18 -3.9524056e-05 -5.4503455e-05 +4587 9.182 -3.9415199e-05 -5.4353377e-05 +4588 9.184 -3.9306642e-05 -5.4203712e-05 +4589 9.186 -3.9198384e-05 -5.4054459e-05 +4590 9.188 -3.9090424e-05 -5.3905617e-05 +4591 9.19 -3.8982761e-05 -5.3757184e-05 +4592 9.192 -3.8875395e-05 -5.3609160e-05 +4593 9.194 -3.8768324e-05 -5.3461544e-05 +4594 9.196 -3.8661548e-05 -5.3314334e-05 +4595 9.198 -3.8555067e-05 -5.3167528e-05 +4596 9.2 -3.8448878e-05 -5.3021127e-05 +4597 9.202 -3.8342982e-05 -5.2875129e-05 +4598 9.204 -3.8237377e-05 -5.2729533e-05 +4599 9.206 -3.8132063e-05 -5.2584337e-05 +4600 9.208 -3.8027040e-05 -5.2439542e-05 +4601 9.21 -3.7922305e-05 -5.2295144e-05 +4602 9.212 -3.7817859e-05 -5.2151144e-05 +4603 9.214 -3.7713700e-05 -5.2007541e-05 +4604 9.216 -3.7609828e-05 -5.1864332e-05 +4605 9.218 -3.7506243e-05 -5.1721518e-05 +4606 9.22 -3.7402942e-05 -5.1579097e-05 +4607 9.222 -3.7299926e-05 -5.1437068e-05 +4608 9.224 -3.7197193e-05 -5.1295430e-05 +4609 9.226 -3.7094744e-05 -5.1154181e-05 +4610 9.228 -3.6992576e-05 -5.1013322e-05 +4611 9.23 -3.6890690e-05 -5.0872850e-05 +4612 9.232 -3.6789085e-05 -5.0732765e-05 +4613 9.234 -3.6687759e-05 -5.0593065e-05 +4614 9.236 -3.6586712e-05 -5.0453750e-05 +4615 9.238 -3.6485944e-05 -5.0314818e-05 +4616 9.24 -3.6385453e-05 -5.0176269e-05 +4617 9.242 -3.6285238e-05 -5.0038101e-05 +4618 9.244 -3.6185300e-05 -4.9900313e-05 +4619 9.246 -3.6085637e-05 -4.9762905e-05 +4620 9.248 -3.5986248e-05 -4.9625875e-05 +4621 9.25 -3.5887133e-05 -4.9489222e-05 +4622 9.252 -3.5788291e-05 -4.9352945e-05 +4623 9.254 -3.5689721e-05 -4.9217043e-05 +4624 9.256 -3.5591423e-05 -4.9081516e-05 +4625 9.258 -3.5493395e-05 -4.8946361e-05 +4626 9.26 -3.5395637e-05 -4.8811578e-05 +4627 9.262 -3.5298148e-05 -4.8677167e-05 +4628 9.264 -3.5200928e-05 -4.8543125e-05 +4629 9.266 -3.5103976e-05 -4.8409453e-05 +4630 9.268 -3.5007290e-05 -4.8276148e-05 +4631 9.27 -3.4910871e-05 -4.8143210e-05 +4632 9.272 -3.4814717e-05 -4.8010638e-05 +4633 9.274 -3.4718828e-05 -4.7878431e-05 +4634 9.276 -3.4623203e-05 -4.7746588e-05 +4635 9.278 -3.4527841e-05 -4.7615108e-05 +4636 9.28 -3.4432742e-05 -4.7483990e-05 +4637 9.282 -3.4337905e-05 -4.7353232e-05 +4638 9.284 -3.4243329e-05 -4.7222835e-05 +4639 9.286 -3.4149014e-05 -4.7092796e-05 +4640 9.288 -3.4054958e-05 -4.6963116e-05 +4641 9.29 -3.3961161e-05 -4.6833792e-05 +4642 9.292 -3.3867622e-05 -4.6704825e-05 +4643 9.294 -3.3774341e-05 -4.6576212e-05 +4644 9.296 -3.3681317e-05 -4.6447954e-05 +4645 9.298 -3.3588549e-05 -4.6320048e-05 +4646 9.3 -3.3496037e-05 -4.6192495e-05 +4647 9.302 -3.3403779e-05 -4.6065292e-05 +4648 9.304 -3.3311775e-05 -4.5938440e-05 +4649 9.306 -3.3220025e-05 -4.5811937e-05 +4650 9.308 -3.3128527e-05 -4.5685782e-05 +4651 9.31 -3.3037282e-05 -4.5559975e-05 +4652 9.312 -3.2946287e-05 -4.5434514e-05 +4653 9.314 -3.2855543e-05 -4.5309398e-05 +4654 9.316 -3.2765049e-05 -4.5184626e-05 +4655 9.318 -3.2674805e-05 -4.5060198e-05 +4656 9.32 -3.2584808e-05 -4.4936113e-05 +4657 9.322 -3.2495060e-05 -4.4812369e-05 +4658 9.324 -3.2405559e-05 -4.4688966e-05 +4659 9.326 -3.2316304e-05 -4.4565902e-05 +4660 9.328 -3.2227295e-05 -4.4443177e-05 +4661 9.33 -3.2138531e-05 -4.4320790e-05 +4662 9.332 -3.2050012e-05 -4.4198740e-05 +4663 9.334 -3.1961736e-05 -4.4077026e-05 +4664 9.336 -3.1873703e-05 -4.3955647e-05 +4665 9.338 -3.1785913e-05 -4.3834602e-05 +4666 9.34 -3.1698365e-05 -4.3713890e-05 +4667 9.342 -3.1611057e-05 -4.3593511e-05 +4668 9.344 -3.1523990e-05 -4.3473463e-05 +4669 9.346 -3.1437163e-05 -4.3353745e-05 +4670 9.348 -3.1350575e-05 -4.3234357e-05 +4671 9.35 -3.1264225e-05 -4.3115298e-05 +4672 9.352 -3.1178114e-05 -4.2996566e-05 +4673 9.354 -3.1092239e-05 -4.2878161e-05 +4674 9.356 -3.1006601e-05 -4.2760083e-05 +4675 9.358 -3.0921198e-05 -4.2642329e-05 +4676 9.36 -3.0836031e-05 -4.2524899e-05 +4677 9.362 -3.0751099e-05 -4.2407793e-05 +4678 9.364 -3.0666400e-05 -4.2291009e-05 +4679 9.366 -3.0581934e-05 -4.2174546e-05 +4680 9.368 -3.0497702e-05 -4.2058404e-05 +4681 9.37 -3.0413701e-05 -4.1942582e-05 +4682 9.372 -3.0329931e-05 -4.1827079e-05 +4683 9.374 -3.0246392e-05 -4.1711893e-05 +4684 9.376 -3.0163083e-05 -4.1597025e-05 +4685 9.378 -3.0080004e-05 -4.1482473e-05 +4686 9.38 -2.9997153e-05 -4.1368236e-05 +4687 9.382 -2.9914531e-05 -4.1254314e-05 +4688 9.384 -2.9832136e-05 -4.1140705e-05 +4689 9.386 -2.9749968e-05 -4.1027410e-05 +4690 9.388 -2.9668026e-05 -4.0914426e-05 +4691 9.39 -2.9586310e-05 -4.0801753e-05 +4692 9.392 -2.9504819e-05 -4.0689390e-05 +4693 9.394 -2.9423552e-05 -4.0577336e-05 +4694 9.396 -2.9342509e-05 -4.0465591e-05 +4695 9.398 -2.9261689e-05 -4.0354154e-05 +4696 9.4 -2.9181092e-05 -4.0243024e-05 +4697 9.402 -2.9100717e-05 -4.0132199e-05 +4698 9.404 -2.9020563e-05 -4.0021679e-05 +4699 9.406 -2.8940630e-05 -3.9911464e-05 +4700 9.408 -2.8860917e-05 -3.9801552e-05 +4701 9.41 -2.8781424e-05 -3.9691943e-05 +4702 9.412 -2.8702149e-05 -3.9582635e-05 +4703 9.414 -2.8623093e-05 -3.9473629e-05 +4704 9.416 -2.8544254e-05 -3.9364922e-05 +4705 9.418 -2.8465633e-05 -3.9256515e-05 +4706 9.42 -2.8387228e-05 -3.9148406e-05 +4707 9.422 -2.8309039e-05 -3.9040595e-05 +4708 9.424 -2.8231066e-05 -3.8933081e-05 +4709 9.426 -2.8153307e-05 -3.8825862e-05 +4710 9.428 -2.8075762e-05 -3.8718939e-05 +4711 9.43 -2.7998431e-05 -3.8612310e-05 +4712 9.432 -2.7921313e-05 -3.8505975e-05 +4713 9.434 -2.7844407e-05 -3.8399932e-05 +4714 9.436 -2.7767713e-05 -3.8294181e-05 +4715 9.438 -2.7691230e-05 -3.8188722e-05 +4716 9.44 -2.7614958e-05 -3.8083553e-05 +4717 9.442 -2.7538895e-05 -3.7978673e-05 +4718 9.444 -2.7463043e-05 -3.7874082e-05 +4719 9.446 -2.7387399e-05 -3.7769779e-05 +4720 9.448 -2.7311963e-05 -3.7665763e-05 +4721 9.45 -2.7236736e-05 -3.7562034e-05 +4722 9.452 -2.7161715e-05 -3.7458590e-05 +4723 9.454 -2.7086901e-05 -3.7355431e-05 +4724 9.456 -2.7012293e-05 -3.7252556e-05 +4725 9.458 -2.6937891e-05 -3.7149964e-05 +4726 9.46 -2.6863693e-05 -3.7047655e-05 +4727 9.462 -2.6789700e-05 -3.6945627e-05 +4728 9.464 -2.6715910e-05 -3.6843880e-05 +4729 9.466 -2.6642324e-05 -3.6742413e-05 +4730 9.468 -2.6568940e-05 -3.6641226e-05 +4731 9.47 -2.6495759e-05 -3.6540317e-05 +4732 9.472 -2.6422779e-05 -3.6439686e-05 +4733 9.474 -2.6350000e-05 -3.6339332e-05 +4734 9.476 -2.6277422e-05 -3.6239255e-05 +4735 9.478 -2.6205043e-05 -3.6139452e-05 +4736 9.48 -2.6132864e-05 -3.6039925e-05 +4737 9.482 -2.6060883e-05 -3.5940672e-05 +4738 9.484 -2.5989101e-05 -3.5841692e-05 +4739 9.486 -2.5917516e-05 -3.5742984e-05 +4740 9.488 -2.5846129e-05 -3.5644548e-05 +4741 9.49 -2.5774938e-05 -3.5546383e-05 +4742 9.492 -2.5703943e-05 -3.5448489e-05 +4743 9.494 -2.5633144e-05 -3.5350864e-05 +4744 9.496 -2.5562539e-05 -3.5253508e-05 +4745 9.498 -2.5492129e-05 -3.5156419e-05 +4746 9.5 -2.5421913e-05 -3.5059598e-05 +4747 9.502 -2.5351891e-05 -3.4963044e-05 +4748 9.504 -2.5282061e-05 -3.4866755e-05 +4749 9.506 -2.5212424e-05 -3.4770732e-05 +4750 9.508 -2.5142978e-05 -3.4674973e-05 +4751 9.51 -2.5073723e-05 -3.4579478e-05 +4752 9.512 -2.5004660e-05 -3.4484245e-05 +4753 9.514 -2.4935786e-05 -3.4389275e-05 +4754 9.516 -2.4867103e-05 -3.4294566e-05 +4755 9.518 -2.4798608e-05 -3.4200118e-05 +4756 9.52 -2.4730302e-05 -3.4105930e-05 +4757 9.522 -2.4662184e-05 -3.4012001e-05 +4758 9.524 -2.4594254e-05 -3.3918331e-05 +4759 9.526 -2.4526511e-05 -3.3824919e-05 +4760 9.528 -2.4458954e-05 -3.3731764e-05 +4761 9.53 -2.4391583e-05 -3.3638865e-05 +4762 9.532 -2.4324398e-05 -3.3546222e-05 +4763 9.534 -2.4257398e-05 -3.3453835e-05 +4764 9.536 -2.4190583e-05 -3.3361701e-05 +4765 9.538 -2.4123951e-05 -3.3269822e-05 +4766 9.54 -2.4057503e-05 -3.3178195e-05 +4767 9.542 -2.3991238e-05 -3.3086821e-05 +4768 9.544 -2.3925156e-05 -3.2995698e-05 +4769 9.546 -2.3859255e-05 -3.2904826e-05 +4770 9.548 -2.3793536e-05 -3.2814204e-05 +4771 9.55 -2.3727998e-05 -3.2723832e-05 +4772 9.552 -2.3662641e-05 -3.2633708e-05 +4773 9.554 -2.3597463e-05 -3.2543833e-05 +4774 9.556 -2.3532465e-05 -3.2454205e-05 +4775 9.558 -2.3467646e-05 -3.2364824e-05 +4776 9.56 -2.3403006e-05 -3.2275689e-05 +4777 9.562 -2.3338543e-05 -3.2186800e-05 +4778 9.564 -2.3274259e-05 -3.2098155e-05 +4779 9.566 -2.3210151e-05 -3.2009754e-05 +4780 9.568 -2.3146219e-05 -3.1921597e-05 +4781 9.57 -2.3082464e-05 -3.1833682e-05 +4782 9.572 -2.3018884e-05 -3.1746009e-05 +4783 9.574 -2.2955480e-05 -3.1658578e-05 +4784 9.576 -2.2892250e-05 -3.1571388e-05 +4785 9.578 -2.2829194e-05 -3.1484437e-05 +4786 9.58 -2.2766312e-05 -3.1397726e-05 +4787 9.582 -2.2703603e-05 -3.1311254e-05 +4788 9.584 -2.2641067e-05 -3.1225020e-05 +4789 9.586 -2.2578703e-05 -3.1139023e-05 +4790 9.588 -2.2516511e-05 -3.1053263e-05 +4791 9.59 -2.2454490e-05 -3.0967739e-05 +4792 9.592 -2.2392640e-05 -3.0882451e-05 +4793 9.594 -2.2330960e-05 -3.0797398e-05 +4794 9.596 -2.2269450e-05 -3.0712578e-05 +4795 9.598 -2.2208109e-05 -3.0627992e-05 +4796 9.6 -2.2146938e-05 -3.0543640e-05 +4797 9.602 -2.2085935e-05 -3.0459519e-05 +4798 9.604 -2.2025099e-05 -3.0375630e-05 +4799 9.606 -2.1964432e-05 -3.0291972e-05 +4800 9.608 -2.1903931e-05 -3.0208544e-05 +4801 9.61 -2.1843598e-05 -3.0125346e-05 +4802 9.612 -2.1783430e-05 -3.0042377e-05 +4803 9.614 -2.1723428e-05 -2.9959637e-05 +4804 9.616 -2.1663591e-05 -2.9877124e-05 +4805 9.618 -2.1603919e-05 -2.9794839e-05 +4806 9.62 -2.1544412e-05 -2.9712780e-05 +4807 9.622 -2.1485068e-05 -2.9630947e-05 +4808 9.624 -2.1425888e-05 -2.9549339e-05 +4809 9.626 -2.1366870e-05 -2.9467957e-05 +4810 9.628 -2.1308016e-05 -2.9386798e-05 +4811 9.63 -2.1249323e-05 -2.9305862e-05 +4812 9.632 -2.1190792e-05 -2.9225150e-05 +4813 9.634 -2.1132422e-05 -2.9144660e-05 +4814 9.636 -2.1074213e-05 -2.9064391e-05 +4815 9.638 -2.1016165e-05 -2.8984343e-05 +4816 9.64 -2.0958276e-05 -2.8904516e-05 +4817 9.642 -2.0900546e-05 -2.8824909e-05 +4818 9.644 -2.0842976e-05 -2.8745521e-05 +4819 9.646 -2.0785564e-05 -2.8666351e-05 +4820 9.648 -2.0728311e-05 -2.8587399e-05 +4821 9.65 -2.0671214e-05 -2.8508665e-05 +4822 9.652 -2.0614276e-05 -2.8430148e-05 +4823 9.654 -2.0557494e-05 -2.8351846e-05 +4824 9.656 -2.0500868e-05 -2.8273761e-05 +4825 9.658 -2.0444399e-05 -2.8195890e-05 +4826 9.66 -2.0388084e-05 -2.8118234e-05 +4827 9.662 -2.0331925e-05 -2.8040792e-05 +4828 9.664 -2.0275921e-05 -2.7963562e-05 +4829 9.666 -2.0220071e-05 -2.7886546e-05 +4830 9.668 -2.0164375e-05 -2.7809741e-05 +4831 9.67 -2.0108832e-05 -2.7733148e-05 +4832 9.672 -2.0053442e-05 -2.7656766e-05 +4833 9.674 -1.9998205e-05 -2.7580595e-05 +4834 9.676 -1.9943120e-05 -2.7504633e-05 +4835 9.678 -1.9888186e-05 -2.7428880e-05 +4836 9.68 -1.9833404e-05 -2.7353336e-05 +4837 9.682 -1.9778773e-05 -2.7277999e-05 +4838 9.684 -1.9724292e-05 -2.7202871e-05 +4839 9.686 -1.9669961e-05 -2.7127949e-05 +4840 9.688 -1.9615780e-05 -2.7053233e-05 +4841 9.69 -1.9561748e-05 -2.6978723e-05 +4842 9.692 -1.9507865e-05 -2.6904419e-05 +4843 9.694 -1.9454130e-05 -2.6830318e-05 +4844 9.696 -1.9400543e-05 -2.6756422e-05 +4845 9.698 -1.9347104e-05 -2.6682730e-05 +4846 9.7 -1.9293812e-05 -2.6609240e-05 +4847 9.702 -1.9240667e-05 -2.6535953e-05 +4848 9.704 -1.9187668e-05 -2.6462867e-05 +4849 9.706 -1.9134816e-05 -2.6389983e-05 +4850 9.708 -1.9082108e-05 -2.6317299e-05 +4851 9.71 -1.9029546e-05 -2.6244816e-05 +4852 9.712 -1.8977129e-05 -2.6172532e-05 +4853 9.714 -1.8924856e-05 -2.6100447e-05 +4854 9.716 -1.8872727e-05 -2.6028561e-05 +4855 9.718 -1.8820742e-05 -2.5956873e-05 +4856 9.72 -1.8768899e-05 -2.5885382e-05 +4857 9.722 -1.8717200e-05 -2.5814088e-05 +4858 9.724 -1.8665643e-05 -2.5742990e-05 +4859 9.726 -1.8614228e-05 -2.5672088e-05 +4860 9.728 -1.8562954e-05 -2.5601381e-05 +4861 9.73 -1.8511822e-05 -2.5530869e-05 +4862 9.732 -1.8460831e-05 -2.5460551e-05 +4863 9.734 -1.8409980e-05 -2.5390427e-05 +4864 9.736 -1.8359269e-05 -2.5320496e-05 +4865 9.738 -1.8308698e-05 -2.5250757e-05 +4866 9.74 -1.8258266e-05 -2.5181211e-05 +4867 9.742 -1.8207973e-05 -2.5111856e-05 +4868 9.744 -1.8157818e-05 -2.5042691e-05 +4869 9.746 -1.8107802e-05 -2.4973718e-05 +4870 9.748 -1.8057923e-05 -2.4904934e-05 +4871 9.75 -1.8008182e-05 -2.4836340e-05 +4872 9.752 -1.7958578e-05 -2.4767934e-05 +4873 9.754 -1.7909110e-05 -2.4699717e-05 +4874 9.756 -1.7859779e-05 -2.4631688e-05 +4875 9.758 -1.7810583e-05 -2.4563846e-05 +4876 9.76 -1.7761523e-05 -2.4496191e-05 +4877 9.762 -1.7712598e-05 -2.4428722e-05 +4878 9.764 -1.7663808e-05 -2.4361439e-05 +4879 9.766 -1.7615153e-05 -2.4294342e-05 +4880 9.768 -1.7566631e-05 -2.4227429e-05 +4881 9.77 -1.7518243e-05 -2.4160700e-05 +4882 9.772 -1.7469988e-05 -2.4094155e-05 +4883 9.774 -1.7421866e-05 -2.4027794e-05 +4884 9.776 -1.7373877e-05 -2.3961615e-05 +4885 9.778 -1.7326019e-05 -2.3895618e-05 +4886 9.78 -1.7278294e-05 -2.3829803e-05 +4887 9.782 -1.7230700e-05 -2.3764169e-05 +4888 9.784 -1.7183237e-05 -2.3698716e-05 +4889 9.786 -1.7135905e-05 -2.3633444e-05 +4890 9.788 -1.7088703e-05 -2.3568351e-05 +4891 9.79 -1.7041632e-05 -2.3503437e-05 +4892 9.792 -1.6994689e-05 -2.3438702e-05 +4893 9.794 -1.6947877e-05 -2.3374145e-05 +4894 9.796 -1.6901193e-05 -2.3309766e-05 +4895 9.798 -1.6854637e-05 -2.3245564e-05 +4896 9.8 -1.6808210e-05 -2.3181539e-05 +4897 9.802 -1.6761911e-05 -2.3117691e-05 +4898 9.804 -1.6715739e-05 -2.3054018e-05 +4899 9.806 -1.6669695e-05 -2.2990521e-05 +4900 9.808 -1.6623777e-05 -2.2927198e-05 +4901 9.81 -1.6577986e-05 -2.2864050e-05 +4902 9.812 -1.6532321e-05 -2.2801076e-05 +4903 9.814 -1.6486782e-05 -2.2738275e-05 +4904 9.816 -1.6441368e-05 -2.2675647e-05 +4905 9.818 -1.6396079e-05 -2.2613191e-05 +4906 9.82 -1.6350915e-05 -2.2550908e-05 +4907 9.822 -1.6305875e-05 -2.2488796e-05 +4908 9.824 -1.6260960e-05 -2.2426855e-05 +4909 9.826 -1.6216168e-05 -2.2365085e-05 +4910 9.828 -1.6171499e-05 -2.2303484e-05 +4911 9.83 -1.6126954e-05 -2.2242054e-05 +4912 9.832 -1.6082531e-05 -2.2180792e-05 +4913 9.834 -1.6038230e-05 -2.2119699e-05 +4914 9.836 -1.5994052e-05 -2.2058775e-05 +4915 9.838 -1.5949995e-05 -2.1998018e-05 +4916 9.84 -1.5906060e-05 -2.1937429e-05 +4917 9.842 -1.5862245e-05 -2.1877006e-05 +4918 9.844 -1.5818552e-05 -2.1816750e-05 +4919 9.846 -1.5774978e-05 -2.1756660e-05 +4920 9.848 -1.5731525e-05 -2.1696735e-05 +4921 9.85 -1.5688191e-05 -2.1636975e-05 +4922 9.852 -1.5644977e-05 -2.1577380e-05 +4923 9.854 -1.5601882e-05 -2.1517949e-05 +4924 9.856 -1.5558905e-05 -2.1458681e-05 +4925 9.858 -1.5516047e-05 -2.1399577e-05 +4926 9.86 -1.5473306e-05 -2.1340636e-05 +4927 9.862 -1.5430684e-05 -2.1281857e-05 +4928 9.864 -1.5388179e-05 -2.1223239e-05 +4929 9.866 -1.5345791e-05 -2.1164783e-05 +4930 9.868 -1.5303520e-05 -2.1106489e-05 +4931 9.87 -1.5261365e-05 -2.1048354e-05 +4932 9.872 -1.5219326e-05 -2.0990380e-05 +4933 9.874 -1.5177403e-05 -2.0932565e-05 +4934 9.876 -1.5135596e-05 -2.0874910e-05 +4935 9.878 -1.5093904e-05 -2.0817413e-05 +4936 9.88 -1.5052326e-05 -2.0760075e-05 +4937 9.882 -1.5010863e-05 -2.0702895e-05 +4938 9.884 -1.4969514e-05 -2.0645872e-05 +4939 9.886 -1.4928280e-05 -2.0589006e-05 +4940 9.888 -1.4887158e-05 -2.0532297e-05 +4941 9.89 -1.4846150e-05 -2.0475744e-05 +4942 9.892 -1.4805255e-05 -2.0419346e-05 +4943 9.894 -1.4764473e-05 -2.0363104e-05 +4944 9.896 -1.4723803e-05 -2.0307017e-05 +4945 9.898 -1.4683245e-05 -2.0251084e-05 +4946 9.9 -1.4642798e-05 -2.0195306e-05 +4947 9.902 -1.4602463e-05 -2.0139681e-05 +4948 9.904 -1.4562239e-05 -2.0084209e-05 +4949 9.906 -1.4522126e-05 -2.0028890e-05 +4950 9.908 -1.4482124e-05 -1.9973723e-05 +4951 9.91 -1.4442231e-05 -1.9918708e-05 +4952 9.912 -1.4402449e-05 -1.9863845e-05 +4953 9.914 -1.4362776e-05 -1.9809132e-05 +4954 9.916 -1.4323212e-05 -1.9754571e-05 +4955 9.918 -1.4283757e-05 -1.9700160e-05 +4956 9.92 -1.4244411e-05 -1.9645898e-05 +4957 9.922 -1.4205174e-05 -1.9591786e-05 +4958 9.924 -1.4166044e-05 -1.9537823e-05 +4959 9.926 -1.4127022e-05 -1.9484009e-05 +4960 9.928 -1.4088108e-05 -1.9430342e-05 +4961 9.93 -1.4049301e-05 -1.9376824e-05 +4962 9.932 -1.4010601e-05 -1.9323453e-05 +4963 9.934 -1.3972007e-05 -1.9270229e-05 +4964 9.936 -1.3933520e-05 -1.9217151e-05 +4965 9.938 -1.3895138e-05 -1.9164220e-05 +4966 9.94 -1.3856863e-05 -1.9111434e-05 +4967 9.942 -1.3818692e-05 -1.9058794e-05 +4968 9.944 -1.3780627e-05 -1.9006299e-05 +4969 9.946 -1.3742667e-05 -1.8953948e-05 +4970 9.948 -1.3704812e-05 -1.8901742e-05 +4971 9.95 -1.3667060e-05 -1.8849679e-05 +4972 9.952 -1.3629413e-05 -1.8797760e-05 +4973 9.954 -1.3591869e-05 -1.8745984e-05 +4974 9.956 -1.3554429e-05 -1.8694350e-05 +4975 9.958 -1.3517091e-05 -1.8642858e-05 +4976 9.96 -1.3479857e-05 -1.8591508e-05 +4977 9.962 -1.3442725e-05 -1.8540300e-05 +4978 9.964 -1.3405696e-05 -1.8489233e-05 +4979 9.966 -1.3368768e-05 -1.8438306e-05 +4980 9.968 -1.3331943e-05 -1.8387520e-05 +4981 9.97 -1.3295218e-05 -1.8336873e-05 +4982 9.972 -1.3258595e-05 -1.8286366e-05 +4983 9.974 -1.3222073e-05 -1.8235998e-05 +4984 9.976 -1.3185651e-05 -1.8185769e-05 +4985 9.978 -1.3149329e-05 -1.8135678e-05 +4986 9.98 -1.3113108e-05 -1.8085725e-05 +4987 9.982 -1.3076986e-05 -1.8035909e-05 +4988 9.984 -1.3040964e-05 -1.7986231e-05 +4989 9.986 -1.3005041e-05 -1.7936690e-05 +4990 9.988 -1.2969217e-05 -1.7887285e-05 +4991 9.99 -1.2933492e-05 -1.7838016e-05 +4992 9.992 -1.2897865e-05 -1.7788883e-05 +4993 9.994 -1.2862337e-05 -1.7739885e-05 +4994 9.996 -1.2826906e-05 -1.7691022e-05 +4995 9.998 -1.2791572e-05 -1.7642293e-05 + diff --git a/examples/nb3b/data.NaPO3 b/examples/nb3b/data.NaPO3 new file mode 100644 index 0000000000..9db7e97ab3 --- /dev/null +++ b/examples/nb3b/data.NaPO3 @@ -0,0 +1,6020 @@ +LAMMPS data file via write_data, version 3 Aug 2023, timestep = 0, units = metal + +3000 atoms +3 atom types + +0 34.33782 xlo xhi +0 34.33782 ylo yhi +0 34.33782 zlo zhi + +Masses + +1 30.973762 +2 22.98976928 +3 15.9994 + +Atoms # charge + +8 1 3 1.8228596003598336 5.87510492688523 3.5062216239063626 0 0 0 +17 1 3 33.5723745447357 0.5375481258233651 3.8861638381362598 -1 0 0 +34 1 3 3.184933838096731 2.8311921099836765 5.164134822893228 0 0 0 +122 1 3 0.2370455745732013 4.372425131512704 7.54150797495957 0 0 0 +2961 3 -1.2 30.697407751732634 12.621061288706011 10.877176004694533 0 0 0 +1707 3 -1.2 12.3866317679469 11.97008050069813 10.482129353238545 0 0 0 +318 1 3 3.4858438136007606 4.520547981195128 1.363444333226657 0 0 0 +2958 3 -1.2 28.400787036084672 16.093543678904396 13.83941720223406 0 0 0 +458 1 3 33.749416075600095 4.741468617297005 4.6740969760068705 -1 0 0 +582 1 3 3.0593218994819846 3.5998240999490476 7.959064854740526 0 0 0 +2928 3 -1.2 27.93491158508066 12.130073721291792 13.565876649432077 0 0 0 +2807 3 -1.2 30.944427068568565 14.427453685922131 9.19235161047031 0 0 0 +782 2 0.6 0.28288503013923894 7.188860597571288 6.003881058807563 0 0 0 +2651 3 -1.2 27.50283296936166 15.480351807341014 8.923498916017095 0 0 0 +2619 3 -1.2 29.560955108562094 13.010220958747707 15.214294796064776 0 0 0 +1081 2 0.6 2.1001400722641788 1.4407841249642783 2.6310621865527515 0 0 0 +2596 3 -1.2 28.206227044747862 13.670025701498188 11.680622025211967 0 0 0 +584 1 3 19.910813483394687 14.765538517207547 12.498288312580092 0 0 0 +2592 3 -1.2 30.24617420399123 15.720368595458117 17.126420533088975 0 0 0 +1418 3 -1.2 34.026842304390044 3.010028930026641 7.503038098214573 -1 0 0 +1468 3 -1.2 1.1129934358525364 6.999764658255995 2.8670269774364625 0 0 0 +289 1 3 0.7971138163005053 3.720423599365621 0.3203086740122359 0 0 0 +2450 3 -1.2 27.83994140550279 11.222021949910367 11.22495605557564 0 0 0 +1547 3 -1.2 34.127502022299 1.569280415791703 3.0220282639712077 -1 0 0 +1576 3 -1.2 2.3957808294164895 6.2772727415252625 4.821112884850933 0 0 0 +1664 3 -1.2 32.78545834371478 3.6200071646788192 4.613386796565437 -1 0 0 +1686 3 -1.2 5.187414626819637 5.809560215560438 6.828801754128944 0 0 0 +1704 3 -1.2 3.718249398587753 3.036722961891026 6.678678942613548 0 0 0 +1932 3 -1.2 0.7518754594183069 4.756883054720914 3.8017697660892433 0 0 0 +569 1 3 25.765866719197614 9.15789898544425 12.973470090013436 0 0 0 +191 1 3 20.47898434174292 8.870649134062761 10.612831154514424 0 0 0 +2086 3 -1.2 2.9558995063443207 5.455654934825284 2.462137804241733 0 0 0 +2157 3 -1.2 34.24983807359828 5.033781002280117 6.169927897434142 -1 0 0 +6 1 3 21.06882093883699 15.884831991448587 16.83547943279087 0 0 0 +2225 3 -1.2 5.151075983865144 1.2402032969078276 0.6837811819178949 0 0 0 +2398 3 -1.2 29.246657760866544 10.606949877527057 15.205574302728138 0 0 0 +2088 3 -1.2 10.3049162634082 3.6176100147280743 0.8506571757770954 0 0 0 +2317 3 -1.2 5.59707186075629 6.054378880723959 2.1477523521609925 0 0 0 +2318 3 -1.2 3.4033169644554495 1.5541425495222554 4.448975001106595 0 0 0 +2333 3 -1.2 4.7327075340583455 3.5914226675211354 1.22692651098072 0 0 0 +2891 3 -1.2 16.49446327774468 11.844102607816644 8.839289765033168 0 0 0 +2541 3 -1.2 1.7349557060090126 2.926142730564026 5.482756437635006 0 0 0 +2548 3 -1.2 5.629882876940062 6.868190197095866 4.58639897539239 0 0 0 +2656 3 -1.2 31.936250635835666 6.188240192140672 7.086542776075716 -1 0 0 +1363 3 -1.2 10.02812650523174 1.228975179586754 0.7578128940749129 0 0 0 +2906 3 -1.2 3.796844383004932 3.866175669665926 4.308257722475782 0 0 0 +2916 3 -1.2 0.06387627177346021 4.814565327885862 0.9453037463439108 0 0 0 +2998 3 -1.2 33.05358421716851 5.973900637111086 4.194018532156243 -1 0 0 +11 1 3 5.125385690643427 5.7084809905452545 8.410933828301461 0 0 0 +2148 3 -1.2 29.636357987071232 7.504182611122242 12.980479879837201 0 0 0 +203 1 3 10.634289131337653 2.34594791856994 1.7316816963443238 0 0 0 +222 1 3 14.879656798461301 0.2958188477203788 7.488830394817911 0 0 0 +225 1 3 5.764391784399813 7.262132317661055 3.0439498642692486 0 0 0 +342 1 3 12.629127890393836 3.725023438061583 7.982760509092106 0 0 0 +2124 3 -1.2 31.116008337586443 14.182901017241301 12.856869594537924 0 0 0 +1940 3 -1.2 26.158199155880396 9.343830525683826 11.41488470181813 0 0 0 +505 1 3 13.216210333802689 3.2921898239118965 2.561753634990455 0 0 0 +549 1 3 9.152954560978827 5.634224636313086 5.921240953248451 0 0 0 +2219 3 -1.2 30.944947561366018 0.3163886539575838 3.4838084627097836 0 0 0 +573 1 3 6.196203823902112 5.819928137239532 5.597537073065396 0 0 0 +1966 3 -1.2 3.4927380069567433 5.451395349821202 0.08965098226947106 0 0 0 +588 1 3 11.593170788536568 8.238513625008896 3.0680629301141082 0 0 0 +596 1 3 5.2262369704180385 2.5690915364034423 0.05761374226515607 0 0 0 +623 2 0.6 10.787356338330996 8.565121414195154 6.473338045443549 0 0 0 +649 2 0.6 15.077085401221376 1.7138922627443811 0.3128346335307952 0 0 0 +684 2 0.6 10.666500249206777 3.5591567949675635 4.70166733076542 0 0 0 +716 2 0.6 13.203642475698972 0.5099672283760172 4.2994422826146215 0 0 0 +735 2 0.6 13.341897976904448 7.799817850452832 0.29172316243779417 0 0 0 +2503 3 -1.2 2.202092827720077 3.5881443041544583 1.1105000889744994 0 0 0 +2840 3 -1.2 19.670212193466593 8.353895876329942 13.425602487452794 0 0 0 +815 2 0.6 12.618339240196994 2.379314216157603 5.5873233436255125 0 0 0 +845 2 0.6 6.845076220158212 0.6157769344531513 6.685728577784767 0 0 0 +1001 2 0.6 7.691160893215583 4.973779078257769 2.9037324169636425 0 0 0 +1023 2 0.6 14.77808445445625 3.72347714760589 5.379378133679625 0 0 0 +1041 2 0.6 9.348505986446199 6.833416160263685 2.4534289204924407 0 0 0 +1666 3 -1.2 10.354671089943698 12.713915786686298 11.845613247705973 0 0 0 +1089 2 0.6 8.078052841742835 2.426185054636776 5.410175156181848 0 0 0 +1135 2 0.6 6.061592363516195 2.8824404664415098 3.4483709829785965 0 0 0 +1082 2 0.6 33.067195708943885 14.326925029155769 16.85186245579751 -1 0 0 +1202 3 -1.2 7.7300627334886505 0.6128797235614499 1.5893680414579219 0 0 0 +1273 3 -1.2 10.041182931367445 6.459930488394309 6.752118264252442 0 0 0 +2790 3 -1.2 18.698663552789284 10.352107863221546 8.696923055984517 0 0 0 +1308 3 -1.2 14.008478627759914 0.7563970512501356 6.410523602876454 0 0 0 +1344 3 -1.2 13.910512670453327 2.459991563665669 3.5785446874682187 0 0 0 +2496 3 -1.2 14.26275196533474 12.55437432957031 0.057049817919180394 0 0 0 +1599 3 -1.2 30.3934761763685 11.811096653218904 13.221594172156172 0 0 0 +1453 3 -1.2 7.598057635818902 6.16897169319817 6.1733185397543835 0 0 0 +1645 3 -1.2 9.11288571171751 0.5032320155394738 6.389345313591313 0 0 0 +560 1 3 8.956225366522052 4.263972780787976 0.42138041054240266 0 0 0 +2763 3 -1.2 17.915430169372115 10.892609163940012 13.452742223281668 0 0 0 +1888 3 -1.2 14.935255379938596 6.792014286636484 1.8909144763129722 0 0 0 +1915 3 -1.2 14.744406093871604 7.610211712186383 8.111338604936435 0 0 0 +1998 3 -1.2 13.942714325429854 3.7396674998662247 1.3493745015296459 0 0 0 +2684 3 -1.2 18.31042134805579 11.333352881153932 10.92161099281336 0 0 0 +2085 3 -1.2 6.456771896304846 4.584630133017286 4.831658121295312 0 0 0 +2580 3 -1.2 16.532573776555584 12.901815344045703 15.42859041555858 0 0 0 +2164 3 -1.2 9.171585482380756 5.622176168018752 4.423916832858168 0 0 0 +2173 3 -1.2 12.11300781317177 2.1390336280135736 1.946992000654117 0 0 0 +2188 3 -1.2 11.73915450864615 7.086373018379213 2.137315483015844 0 0 0 +2387 3 -1.2 11.910863381919985 9.665135335491941 0.043617148205173616 0 0 0 +2204 3 -1.2 9.28186238877823 4.20449401967803 6.333880612061862 0 0 0 +2215 3 -1.2 11.187871457479789 0.8856134417791364 5.0918611139144785 0 0 0 +2234 3 -1.2 7.834962301662877 3.5993618365517723 1.1604472494671545 0 0 0 +2302 3 -1.2 13.072601858437853 7.552983140970049 5.635940502101293 0 0 0 +2446 3 -1.2 18.31216539758974 7.074186446591256 15.07778959983515 0 0 0 +2330 3 -1.2 5.0709405865282156 13.122581416169801 0.7550178311680203 0 0 0 +2455 3 -1.2 7.358168985606684 0.5430731020399615 3.942240768461119 0 0 0 +693 2 0.6 23.64510051654558 16.85088238082749 9.233917287134679 0 0 0 +2523 3 -1.2 12.100811330686883 4.117383013989126 3.0842753884279475 0 0 0 +2549 3 -1.2 9.782854897759485 2.3575693007868823 2.921077135195698 0 0 0 +1930 3 -1.2 22.785932961046914 0.09118353013740653 15.257340503312522 0 0 0 +2957 3 -1.2 12.768260575061184 4.329532391969262 6.624577591065975 0 0 0 +213 1 3 20.19711279325501 5.031568286855892 6.641786910149037 0 0 0 +1498 3 -1.2 30.685169592917255 11.948002274493305 8.473450089298108 0 0 0 +464 1 3 15.435080932292966 6.357110619331396 3.231251730634334 0 0 0 +512 1 3 17.098416327823067 2.2273321576210647 6.810066808729312 0 0 0 +1199 2 0.6 23.01704455167944 1.8460378058308333 9.671691780904007 0 0 0 +615 2 0.6 18.140502106360138 1.6776064085734577 0.26363526691198486 0 0 0 +619 2 0.6 18.361303784581477 7.859461434749044 2.5618864760772437 0 0 0 +779 2 0.6 17.3261645886555 6.640682104898295 1.014836720901021 0 0 0 +835 2 0.6 18.531106780313802 4.324259965007819 2.6883202268587447 0 0 0 +1045 2 0.6 18.208294227414285 1.381646179992118 3.4304115979114185 0 0 0 +1191 2 0.6 16.28651569673256 3.8753290338420885 0.937442232616161 0 0 0 +1467 3 -1.2 27.28104490452926 9.878764583499917 9.186789580670752 0 0 0 +1345 3 -1.2 28.57681130631935 8.799479828136409 11.008805666034675 0 0 0 +1351 3 -1.2 16.878383718624406 8.235660543720002 6.943020663478171 0 0 0 +1406 3 -1.2 20.264272641793983 2.382358498268816 3.5499644342898518 0 0 0 +1293 3 -1.2 27.152035261746736 9.397595375027551 13.484448832656165 0 0 0 +1137 2 0.6 30.083486815125166 15.187899518599686 14.780481713938116 0 0 0 +2401 3 -1.2 15.036776106431523 15.210693037606696 10.786141661501212 0 0 0 +1905 3 -1.2 18.490499375925605 1.4758783434425842 6.9726334982061 0 0 0 +2267 3 -1.2 15.787820563070165 8.014740798868225 14.321498325771165 0 0 0 +1995 3 -1.2 16.719603319289924 2.1316933116198635 5.385914282619352 0 0 0 +2008 3 -1.2 20.050852161175186 4.0120939613664355 5.405757901089055 0 0 0 +2015 3 -1.2 16.91156689502158 6.073525123528359 3.1340481287857855 0 0 0 +2356 3 -1.2 14.749868491357551 5.139288382210879 3.7548570006848507 0 0 0 +2381 3 -1.2 16.649525647303083 1.7314622552489785 1.8743953461959773 0 0 0 +917 2 0.6 27.143670604968314 9.681447285762887 15.997220238114913 0 0 0 +2473 3 -1.2 16.989450285935945 3.5915396400375452 7.329022706162237 0 0 0 +910 2 0.6 26.450286162691434 13.30643739883064 15.592138668258315 0 0 0 +2673 3 -1.2 19.34173285755745 6.214248909579634 6.52179745065282 0 0 0 +2734 3 -1.2 21.18932691275593 7.463852745990761 3.6327475087984333 0 0 0 +2922 3 -1.2 15.137485700483756 7.503806333858288 4.27470062197817 0 0 0 +2951 3 -1.2 18.359236884467634 4.619873376051784 0.26122340837061997 0 0 0 +38 1 3 24.816988756166324 4.160958904445498 6.905368602865206 0 0 0 +63 1 3 22.129279715850583 5.792184560366883 1.7258760439413 0 0 0 +868 2 0.6 29.844640538271136 15.950067416368196 11.646522957324878 0 0 0 +285 1 3 23.260336226129755 1.804396044571201 5.926679989260175 0 0 0 +1654 3 -1.2 11.503804005659727 8.278931569974432 16.17615432794268 0 0 0 +703 2 0.6 31.50402532327435 17.05771223951092 9.279599763035264 0 0 0 +372 1 3 21.030496793958093 3.128600083629055 4.569472060759473 0 0 0 +2205 3 -1.2 17.167236941528504 16.262620570630578 10.24892627824235 0 0 0 +629 2 0.6 25.41145871697226 6.650980675312553 2.5324447774882324 0 0 0 +672 2 0.6 24.431448252000397 4.1838646078887 3.502175023663834 0 0 0 +660 2 0.6 27.4372644663658 15.972114927668642 11.742575060508866 0 0 0 +719 2 0.6 21.903874324800395 2.81438757104636 1.8805569633193675 0 0 0 +752 2 0.6 22.732830830118207 6.373778841378722 4.853180891874569 0 0 0 +627 2 0.6 30.935112973012266 9.707819140347835 10.053110003878716 0 0 0 +603 2 0.6 26.852668040812517 15.637842880595832 15.377269219366996 0 0 0 +1871 3 -1.2 19.206844940554202 13.891634378498571 13.469180199305672 0 0 0 +934 2 0.6 34.20545704676974 0.37993301613661085 1.019934709266085 -1 0 0 +762 2 0.6 7.389705778524074 17.118990107149518 15.888560298979044 0 0 0 +1538 3 -1.2 24.10314051087794 1.8162424145039802 4.697187009822323 0 0 0 +1626 3 -1.2 21.76491818818874 2.100247350326784 5.535270593923806 0 0 0 +1657 3 -1.2 19.899057036739958 4.116062417160987 7.870819241158122 0 0 0 +1741 3 -1.2 25.068359558255533 4.013191372005472 0.5671485688760626 0 0 0 +692 2 0.6 6.717646557480478 9.197210513884611 1.1850044101999335 0 0 0 +1987 3 -1.2 23.768865690162635 2.9988477928595354 6.848911206921669 0 0 0 +2087 3 -1.2 23.33798148096364 6.044667912476271 2.531974985465457 0 0 0 +2104 3 -1.2 22.21325173211058 3.877401990277711 4.086946268154399 0 0 0 +2222 3 -1.2 24.592364393192106 7.495951095474721 5.379186724796142 0 0 0 +2282 3 -1.2 22.764891861561303 4.712741210707209 0.6633079795207264 0 0 0 +2309 3 -1.2 21.64592022210278 5.3253980745912575 6.617966640852154 0 0 0 +1758 3 -1.2 16.62861785314105 9.159019113750952 9.223313856097084 0 0 0 +1724 3 -1.2 19.211671709781616 16.201406376238065 12.50593471851688 0 0 0 +2659 3 -1.2 21.716339345800833 6.960875484332111 0.7650451363813008 0 0 0 +2699 3 -1.2 22.551222241637795 0.6500636821567315 1.8072497502838032 0 0 0 +891 2 0.6 9.981668319834668 17.085614621179452 0.9939152739129233 0 0 0 +1695 3 -1.2 18.8866672093461 8.894372714271833 10.552089215583093 0 0 0 +2846 3 -1.2 24.220543649421433 5.393693203082043 7.666267175183327 0 0 0 +2151 3 -1.2 7.649319392583413 13.370772877335787 8.217932606990376 0 0 0 +2908 3 -1.2 23.47751594569011 0.507806700937784 6.614001512568061 0 0 0 +2242 3 -1.2 10.671628661819751 9.044682671440839 14.049714344732488 0 0 0 +2940 3 -1.2 20.845441860260575 5.162523737022697 2.126749268092696 0 0 0 +145 1 3 28.221177842544627 0.3911404140810752 5.459463655677135 0 0 0 +159 1 3 28.506399659282717 1.9532541195051996 0.9117370541153925 0 0 0 +531 1 3 27.40629627179996 9.821430234140855 10.651071354273506 0 0 0 +1573 3 -1.2 16.78286293242739 10.085992840488297 11.375013139207619 0 0 0 +284 1 3 27.696171077741095 4.7789713169058246 0.3464529556665972 0 0 0 +2456 3 -1.2 27.756270800816807 3.1860363321056577 0.28093718881104024 0 0 0 +656 2 0.6 31.04298922685021 4.127017923815153 2.862017235501279 0 0 0 +658 2 0.6 29.115643170053673 6.114788210125984 2.892737299652025 0 0 0 +1572 3 -1.2 19.989499640979194 16.09764163171018 15.814323731953337 0 0 0 +811 2 0.6 28.67450336617217 6.384916399908791 5.9395130975475015 0 0 0 +836 2 0.6 28.168045087665206 3.8562236892281754 6.494967213281092 0 0 0 +972 2 0.6 31.00078988415413 6.4179824978227655 4.853598421833192 0 0 0 +998 2 0.6 30.595416447965164 2.568540218062925 4.528098091364968 0 0 0 +1125 2 0.6 27.561171585851874 3.673400364546202 3.9694631376863625 0 0 0 +1184 2 0.6 31.02672435453094 4.06639037549849 7.051161665199886 0 0 0 +1461 3 -1.2 27.393696057086437 0.7750347987784595 0.8768261500932388 0 0 0 +2753 3 -1.2 11.066882521375806 1.5436257303651941 17.126470420092467 0 0 0 +1791 3 -1.2 22.192907816518446 16.90284759389284 16.605002157828803 0 0 0 +1543 3 -1.2 33.651136123770726 0.5606327941722694 5.319791250232987 -1 0 0 +2002 3 -1.2 25.293428153511687 4.496253887843739 5.553647226443952 0 0 0 +2080 3 -1.2 27.743141245545694 1.7661481967080417 5.3552697776445095 0 0 0 +2423 3 -1.2 25.223419010657725 16.805361151933894 1.9494341430740598 0 0 0 +2264 3 -1.2 29.530916101615585 4.665729894341677 4.486494888591105 0 0 0 +2429 3 -1.2 29.24381165335954 5.14426401554394 0.1859015181510137 0 0 0 +1319 3 -1.2 19.26326580794803 11.414772082660203 16.91410095665116 0 0 0 +2463 3 -1.2 26.650606076792183 7.136250897858355 6.745781515036149 0 0 0 +2494 3 -1.2 30.42547123815706 8.088607669085949 6.664179646845857 0 0 0 +2698 3 -1.2 29.631071045059315 0.3049619146754569 6.13990670031101 0 0 0 +2825 3 -1.2 28.958540243049022 2.3431804657991218 2.249896354783249 0 0 0 +2834 3 -1.2 27.306355031725392 5.400209061391878 1.62891323739481 0 0 0 +163 1 3 27.40609807645922 12.5069231996507 12.10331143382893 0 0 0 +2966 3 -1.2 30.065794171407465 8.025315694176975 3.6168946099041146 0 0 0 +12 1 3 1.6220059168633032 14.613397822152786 2.137565484370139 0 0 0 +53 1 3 34.10218895163492 10.858257676407556 2.964541469755975 -1 0 0 +126 1 3 0.2098135881608339 9.85408071715391 5.664070030296013 0 0 0 +209 1 3 2.6217891895067953 11.957920551762607 2.853951283574642 0 0 0 +2391 3 -1.2 8.925114384163926 16.225364076026906 14.406478573274374 0 0 0 +1253 3 -1.2 16.394335878347242 12.43889956911168 12.15556741690782 0 0 0 +426 1 3 1.964343044347403 12.122750379390265 6.5964139519322265 0 0 0 +548 1 3 4.042651190847374 12.181160299353666 0.2505307825503917 0 0 0 +718 2 0.6 33.763329870115385 13.802908022018148 4.9688795714723595 -1 0 0 +774 2 0.6 4.7845013810466535 12.242921294341409 5.262186973085306 0 0 0 +557 1 3 5.454316121777518 8.078615659380779 16.409913118322134 0 0 0 +873 2 0.6 5.0852795714249055 9.908854774201167 5.899257301527475 0 0 0 +923 2 0.6 5.523172160277404 10.951031853092395 2.668644146773366 0 0 0 +1347 3 -1.2 11.852613169320815 15.605360501322147 10.752587596352669 0 0 0 +976 2 0.6 2.872195914698283 8.711262505400228 3.9724610559785374 0 0 0 +1170 2 0.6 2.655879064030566 15.556006545435208 5.333866653012758 0 0 0 +1187 2 0.6 3.1248978810241264 9.05434076068433 7.178046941577896 0 0 0 +1404 3 -1.2 1.4170997815328406 9.58013715715741 1.8297419153653036 0 0 0 +1421 3 -1.2 5.6172224452265835 13.376803523881339 3.4014540209129773 0 0 0 +1435 3 -1.2 33.24429774376179 9.546158199553354 6.2893341733041055 -1 0 0 +1499 3 -1.2 1.4043173137759493 8.993758848787095 5.872017880962093 0 0 0 +1533 3 -1.2 31.694044922444338 14.239980292062926 5.599241836434841 -1 0 0 +1539 3 -1.2 0.8231365812889085 15.228742460685625 3.2185649491136115 0 0 0 +1042 2 0.6 16.43575020015038 14.295008593103923 13.531238169133472 0 0 0 +1622 3 -1.2 4.34879063294917 15.479327210783381 3.8971855675574933 0 0 0 +1722 3 -1.2 1.7856562152982423 15.16789826008646 7.4559402903682335 0 0 0 +1763 3 -1.2 3.101039513712694 11.199798281891479 6.802173262471717 0 0 0 +1766 3 -1.2 1.1151764522943395 11.745868794933294 3.1533801947654694 0 0 0 +1025 2 0.6 14.671627256549009 11.511289941803854 15.810298946662574 0 0 0 +1813 3 -1.2 3.16352469732681 11.623302780654235 1.4024735338648942 0 0 0 +1825 3 -1.2 5.672513105772113 15.395463575605875 1.7944138279943833 0 0 0 +1012 2 0.6 17.100078172474873 10.76993193331919 15.786767836388053 0 0 0 +2156 3 -1.2 2.3978949016133346 15.487447280411425 1.2248882437205943 0 0 0 +690 2 0.6 17.672315819581463 13.725817831958995 9.82356496611769 0 0 0 +2251 3 -1.2 0.6780050926363054 11.322940315761715 6.048094838015902 0 0 0 +2281 3 -1.2 34.326109577863996 9.76028067450365 4.101063598879842 -1 0 0 +2303 3 -1.2 2.67619021345124 13.516583387875 2.7133884410406153 0 0 0 +686 2 0.6 14.709993035054392 14.456721591461074 15.430953209472964 0 0 0 +2419 3 -1.2 33.09118659188431 11.699781689287772 3.7694990595182225 -1 0 0 +2498 3 -1.2 33.15481333817167 17.035422796749096 0.37485650318401165 -1 0 0 +2515 3 -1.2 4.8001034475511215 8.294639936690308 2.591348872524802 0 0 0 +2597 3 -1.2 2.284067094156926 13.082870773834115 5.520253982615054 0 0 0 +621 2 0.6 18.152115050963754 14.545496722707949 15.669729371706962 0 0 0 +2736 3 -1.2 33.56199018857875 10.810057942290012 1.5789496024904957 -1 0 0 +2743 3 -1.2 3.4468734506916476 11.169509307374188 3.775006222983322 0 0 0 +2751 3 -1.2 0.7787222975551522 13.654151573320712 1.3134340996787754 0 0 0 +2949 3 -1.2 4.39100617067191 16.74425930090203 7.2679032134947 0 0 0 +2991 3 -1.2 1.5005314314771256 12.840535260021406 7.8994390500273575 0 0 0 +93 1 3 5.5251004820425695 14.853014281869871 3.2898451575148684 0 0 0 +113 1 3 9.357159783290546 14.409820172885402 2.504591007627544 0 0 0 +125 1 3 13.698210345660765 12.39192962609301 1.4563135878800573 0 0 0 +498 1 3 17.32911916441924 11.311655386234838 12.181263708524865 0 0 0 +176 1 3 7.649996430583427 9.9669102517475 7.597887943781673 0 0 0 +248 1 3 10.512721638203779 9.189046740091621 0.5145828588369955 0 0 0 +493 1 3 19.704979303444116 11.343280358097777 7.973806073291758 0 0 0 +354 1 3 13.9409176582109 8.415852682250383 4.8108974940155 0 0 0 +356 1 3 10.658535989107017 11.512424274751867 5.059616036713927 0 0 0 +459 1 3 7.880542756387041 14.68226710430678 5.13285679240167 0 0 0 +475 1 3 11.116424655463083 12.065858732914755 7.825842346967625 0 0 0 +515 1 3 5.905805828224932 15.201665655521213 0.2226524946642345 0 0 0 +452 1 3 15.108335213457853 12.014949000542016 8.214167796362021 0 0 0 +1768 3 -1.2 6.378645280523506 11.801054396371576 15.85115498028605 0 0 0 +643 2 0.6 13.371176580149273 13.769773065689371 4.960673753659656 0 0 0 +651 2 0.6 8.853423909575097 15.459527125705208 8.233347510933857 0 0 0 +307 1 3 17.752761744502596 10.013413635762143 10.001316755321112 0 0 0 +819 2 0.6 11.337884871667493 14.654790570108824 6.234406445762218 0 0 0 +842 2 0.6 10.812828979675967 15.032426593532104 0.29006282771660824 0 0 0 +888 2 0.6 8.357986460498209 9.754460499854503 2.9435410840763923 0 0 0 +941 2 0.6 11.08126023596597 11.623527793763676 2.2841690814096305 0 0 0 +943 2 0.6 8.420227794144337 8.7139765092658 4.699203188208425 0 0 0 +970 2 0.6 12.705478094553884 15.55001265376947 2.4929128986588505 0 0 0 +1166 2 0.6 7.516801678667312 11.900362296177786 3.550034678748337 0 0 0 +1217 3 -1.2 9.647690947278262 13.168141691207184 1.7240978715428343 0 0 0 +1400 3 -1.2 6.243969858998785 16.880732062958835 0.06499158898306741 0 0 0 +1641 3 -1.2 9.195713009543681 11.594960419981419 14.416325704928365 0 0 0 +1442 3 -1.2 7.161514881936357 13.42980358354603 5.789061842422809 0 0 0 +2091 3 -1.2 6.899910215317973 9.98401418180627 11.42944975601543 0 0 0 +1596 3 -1.2 7.204718313604991 7.618270013701662 2.8916596565255466 0 0 0 +1603 3 -1.2 8.683226316363557 9.496254132393396 6.641562359529139 0 0 0 +1634 3 -1.2 6.65942137004763 15.892401812270904 6.752252529148516 0 0 0 +1678 3 -1.2 15.827444000368605 12.353251696593984 4.117088848707607 0 0 0 +1714 3 -1.2 9.05582440812752 15.072934348478551 5.9171633763670535 0 0 0 +1732 3 -1.2 15.33828603322244 12.41867579909505 6.659667498643708 0 0 0 +1786 3 -1.2 6.885724110871477 11.271689945685669 7.015434258746191 0 0 0 +1840 3 -1.2 14.825181564175713 15.966231269006704 3.613207199170957 0 0 0 +1868 3 -1.2 10.299788272907398 8.503940308029884 9.214954631589173 0 0 0 +670 2 0.6 16.98364587908929 0.32598574942205155 12.708396377019408 0 0 0 +1956 3 -1.2 16.127342427945283 15.923581014796639 5.760805680893282 0 0 0 +2016 3 -1.2 11.368784840075628 12.62445903772358 4.365051890876006 0 0 0 +2063 3 -1.2 10.187310927233826 11.970192361710424 6.505668299394642 0 0 0 +2102 3 -1.2 12.296966318528975 12.683079400208037 7.175689274586963 0 0 0 +2123 3 -1.2 10.597975996766333 15.20874004795201 2.6276510986077755 0 0 0 +10 1 3 15.697871012294561 16.34860249620227 10.117366072909244 0 0 0 +2177 3 -1.2 13.520539705995125 11.088896453849145 2.0013265589433265 0 0 0 +2942 3 -1.2 8.25016177800817 10.473278615163403 8.851686317180144 0 0 0 +2178 3 -1.2 24.63368185929118 0.27842141618328364 13.565629649558966 0 0 0 +2470 3 -1.2 8.434677386341638 15.334182519249369 1.7646198567942926 0 0 0 +2472 3 -1.2 13.034047847417835 8.619123257155909 3.521123455025941 0 0 0 +2937 3 -1.2 15.166241592517405 7.693292106015787 11.959974407348513 0 0 0 +2883 3 -1.2 13.224333415072573 13.038853665244028 15.398065043953338 0 0 0 +2505 3 -1.2 12.37482496856758 15.860929583153142 4.79364316218136 0 0 0 +2556 3 -1.2 8.647126838796451 14.006856085436548 3.8435484293039566 0 0 0 +2628 3 -1.2 9.017450028241095 8.840132210842107 0.9693992493443016 0 0 0 +2660 3 -1.2 10.550528421142733 8.038655436477297 4.08863837877901 0 0 0 +2689 3 -1.2 9.510711019300182 11.12052791259004 4.187491816021347 0 0 0 +1649 3 -1.2 9.358115862478844 16.87422604270051 11.96733530604074 0 0 0 +2759 3 -1.2 7.675905738150477 11.38606443916342 1.0308112758370624 0 0 0 +2815 3 -1.2 10.974003153591296 9.321233397515643 2.1062001297043023 0 0 0 +2858 3 -1.2 14.524348522479807 9.643881351386474 5.34654778891758 0 0 0 +2863 3 -1.2 6.779457851221646 15.34299549990603 4.181231836942948 0 0 0 +2936 3 -1.2 11.549920014177694 10.356308457292243 5.341603355853948 0 0 0 +2967 3 -1.2 6.505186435657284 10.039005929397982 4.274244557675488 0 0 0 +60 1 3 15.495970530331466 15.773122550251424 7.26951593770238 0 0 0 +89 1 3 20.915924969003544 8.913716377787894 3.5176396533616168 0 0 0 +154 1 3 18.641042926314285 15.883189561740872 2.8548094879269454 0 0 0 +200 1 3 16.339367755978017 12.23766836974287 5.505319955209417 0 0 0 +218 1 3 16.18013045515762 7.99673590118485 8.232232511834146 0 0 0 +277 1 3 16.086333154651445 16.368133104838762 4.256463305165464 0 0 0 +2871 3 -1.2 15.250988499594165 16.6190462743386 8.646524158928058 0 0 0 +491 1 3 18.867981111433604 13.59550936248926 6.219981702638131 0 0 0 +669 2 0.6 14.89124294068493 9.256764705228388 1.5297530357482763 0 0 0 +1475 3 -1.2 14.510410879186521 13.160086990698964 8.93045061570829 0 0 0 +788 2 0.6 16.914453965748915 9.020601123882352 4.831532203241428 0 0 0 +851 2 0.6 18.953349937364813 8.73806910126358 6.266275606562154 0 0 0 +911 2 0.6 18.182654907740417 10.88288498191213 3.7659462216920208 0 0 0 +999 2 0.6 18.9200002287705 15.841497660972857 8.76665570960279 0 0 0 +1200 2 0.6 16.862979294929346 11.427546697250941 1.9482412663697013 0 0 0 +1320 3 -1.2 19.393694548905977 11.537873074080075 2.0267092309446713 0 0 0 +1323 3 -1.2 16.548009573216554 14.904377949341653 7.902262257163476 0 0 0 +946 2 0.6 9.596768550324851 1.9682309837327467 8.15717668645043 0 0 0 +1434 3 -1.2 17.22363418920935 15.562603725832583 3.404867638745535 0 0 0 +1623 3 -1.2 16.187880446743346 15.95581395764611 16.312657078228966 0 0 0 +1723 3 -1.2 19.64257838468673 9.24923649788804 4.215199794734691 0 0 0 +1802 3 -1.2 16.842083651093045 9.364370602102408 2.5860390121585657 0 0 0 +1955 3 -1.2 19.558518476240625 15.926129859675314 3.9999109629880305 0 0 0 +2058 3 -1.2 19.28791487902189 14.696885979533324 1.9849260855605617 0 0 0 +2175 3 -1.2 17.398414796912785 13.444297505320865 5.678967482735201 0 0 0 +2193 3 -1.2 19.69565055568496 13.014325168937322 5.1413932812645315 0 0 0 +755 2 0.6 29.74086160186781 8.575774638609255 16.664177956657007 0 0 0 +2504 3 -1.2 19.40603063961719 14.861347755991765 6.753976318662836 0 0 0 +2081 3 -1.2 12.079406572321084 11.128203443403324 12.765121207242503 0 0 0 +2725 3 -1.2 19.29751834930337 7.4200095182725505 0.3915055928699 0 0 0 +2767 3 -1.2 17.227061016103484 11.071520021606098 5.7342897821776875 0 0 0 +2987 3 -1.2 13.499474306154388 13.610089315787619 2.1512639256121817 0 0 0 +23 1 3 25.271564738007648 9.847082168023848 1.997345520468332 0 0 0 +2676 3 -1.2 13.116365619038376 9.34178131966574 14.64232770325298 0 0 0 +1618 3 -1.2 14.388668788941118 10.737046703984408 8.276580778655099 0 0 0 +322 1 3 20.180176896761125 10.592632433767365 1.202807883480694 0 0 0 +412 1 3 24.653569823455683 13.143192358615735 9.121912569797823 0 0 0 +437 1 3 26.621126388502805 9.89237736680894 4.698004173192933 0 0 0 +570 1 3 20.782777477458765 14.454039527869542 1.5542210868601567 0 0 0 +590 1 3 23.51388717455849 13.697889338905995 6.383777938843604 0 0 0 +652 2 0.6 23.95340505482794 15.294607060581798 1.2972792794516144 0 0 0 +681 2 0.6 25.227811603396724 16.76603577398321 6.049300484942883 0 0 0 +699 2 0.6 21.126497161342687 11.460797873120045 4.950231064151637 0 0 0 +700 2 0.6 22.88325533238183 12.024959860683346 3.2959205170232257 0 0 0 +2608 3 -1.2 6.388123050736264 16.262372710638715 12.284379903628082 0 0 0 +810 2 0.6 22.629934241790096 10.366173017458834 8.625853902192777 0 0 0 +2567 3 -1.2 14.129972422463915 15.291025504555268 6.993223236128789 0 0 0 +2502 3 -1.2 6.236480023282383 11.225274351607137 13.397286398808218 0 0 0 +1070 2 0.6 21.329615340449074 15.656814428480535 5.131180162516522 0 0 0 +1525 3 -1.2 6.982070753771091 12.476202106862566 11.320578063136894 0 0 0 +1207 3 -1.2 24.16837578779941 13.016262976822963 7.54513761106032 0 0 0 +1241 3 -1.2 20.299954364812 10.609247110349129 6.83208290000257 0 0 0 +1370 3 -1.2 23.40855702525213 15.125100766080193 6.147059157037812 0 0 0 +1882 3 -1.2 21.64302945563939 13.79110098028925 2.56112927764941 0 0 0 +1937 3 -1.2 24.704030472801225 11.15766220020758 2.278674360498426 0 0 0 +2031 3 -1.2 21.56690218573319 11.266000863796942 0.834193643929693 0 0 0 +359 1 3 8.95346367619213 0.09909928971016169 0.806183759437379 0 0 0 +2089 3 -1.2 22.069221290606738 9.792742508258165 3.8455560632033796 0 0 0 +2127 3 -1.2 20.955348478944256 13.502226599354424 0.27598384320323255 0 0 0 +2488 3 -1.2 4.796622430356143 16.599533792234634 16.603576305821292 0 0 0 +2321 3 -1.2 24.5167723165236 8.787789436796787 1.3261473022554626 0 0 0 +2367 3 -1.2 20.559853702520282 9.325183566216614 2.0048023151866308 0 0 0 +2909 3 -1.2 21.30118519706563 15.798027208833584 1.193519262099006 0 0 0 +2974 3 -1.2 22.907871645870188 12.771491089368798 5.491601289910581 0 0 0 +16 1 3 28.093092227663213 10.41125245925158 1.1203934612999824 0 0 0 +61 1 3 25.433589010195007 7.948623242321133 6.500260841364083 0 0 0 +2097 3 -1.2 12.493774676891679 9.044742015582612 10.067499990224862 0 0 0 +327 1 3 31.292809086184306 7.377549918195232 7.602821787267629 0 0 0 +362 1 3 28.134618896877416 13.330044655330969 1.69673300264818 0 0 0 +401 1 3 30.500739783253593 14.917828777723699 0.9609118286174586 0 0 0 +451 1 3 27.138442398606024 14.361587144837006 8.045414337467728 0 0 0 +466 1 3 29.35938098655492 9.3089875927496 3.666009393456217 0 0 0 +2038 3 -1.2 7.475289052500883 15.036742385002226 16.92261969868044 0 0 0 +725 2 0.6 31.97254816228217 15.99828959784927 4.3756348484439895 0 0 0 +749 2 0.6 30.661613388350855 15.394039957537155 7.155194878464862 0 0 0 +778 2 0.6 27.68199316723105 13.585754331445449 5.109388452951252 0 0 0 +2370 3 -1.2 7.289971727139639 8.026011108804532 13.668199371883437 0 0 0 +898 2 0.6 31.162777657401765 12.698678728276603 4.228785845009721 0 0 0 +1054 2 0.6 31.5585100402116 11.115720736764844 6.230700192891273 0 0 0 +1058 2 0.6 28.579094414422606 11.269114203617258 7.692852173401253 0 0 0 +2257 3 -1.2 13.199227166725548 16.334116880374026 12.559324830566723 0 0 0 +1426 3 -1.2 27.161706361678164 13.632029236563325 0.6338558515813065 0 0 0 +1602 3 -1.2 26.246637666700607 14.755420889317213 6.889800815798162 0 0 0 +1751 3 -1.2 29.59232863478427 13.658966468565803 1.0948986986649705 0 0 0 +1776 3 -1.2 28.041126196480484 9.211004622071751 4.564692664485137 0 0 0 +1876 3 -1.2 28.24161798837016 13.532057360242083 7.484413509354465 0 0 0 +1880 3 -1.2 31.330197951349852 15.100493551014432 2.141892203107252 0 0 0 +2001 3 -1.2 26.580742320960088 10.04811675952205 1.0482532762956867 0 0 0 +2012 3 -1.2 25.947623065948314 9.356542960736322 3.3728874889073714 0 0 0 +2162 3 -1.2 28.129260540731313 14.066854901188263 2.960208042955908 0 0 0 +2341 3 -1.2 28.121957607476883 11.763536689246385 1.8815679308754398 0 0 0 +2508 3 -1.2 25.927410632566847 9.365674762522733 5.978683942205251 0 0 0 +2606 3 -1.2 30.0253260368134 10.57702137583437 3.9701859896679714 0 0 0 +2622 3 -1.2 29.4996841682849 16.116276470507824 0.7728740721527416 0 0 0 +2643 3 -1.2 28.69468141128889 9.41656817831364 2.168731764012579 0 0 0 +2791 3 -1.2 26.784458304592142 11.34045738193589 4.671299620679113 0 0 0 +2 1 3 2.4418678858749994 5.85164879790282 12.57463812843276 0 0 0 +90 1 3 33.74530118051254 3.923348520727286 10.343879008774001 -1 0 0 +152 1 3 31.192232242148357 12.995641909839378 9.380414075285522 0 0 0 +404 1 3 1.8510707199570593 2.0175198111580266 10.250355291391193 0 0 0 +422 1 3 1.6919378516895158 4.070587081778009 16.67832351676812 0 0 0 +456 1 3 3.2309354310805687 3.530846428721078 14.265037356447298 0 0 0 +477 1 3 3.7315247999121404 8.049601531334277 9.75090580517567 0 0 0 +732 2 0.6 33.80512511685721 4.66042326579467 13.910888795197252 -1 0 0 +753 2 0.6 0.49179308306414227 1.4131554885808808 14.612659967913308 0 0 0 +885 2 0.6 33.4948579007412 6.931773533826903 11.89322984123546 -1 0 0 +119 1 3 31.225003281223568 12.819396495712976 12.351243248677335 0 0 0 +98 1 3 29.269628250302286 11.82877428198122 14.380516737060713 0 0 0 +1105 2 0.6 4.891947172105047 2.6571907829897348 11.562990209058428 0 0 0 +1176 2 0.6 34.07759475520795 7.169093731195742 15.166142804971496 -1 0 0 +1264 3 -1.2 2.2882640233473404 4.440582550156639 13.380918213055036 0 0 0 +2885 3 -1.2 24.843233816787293 10.22589996992295 13.369633970303374 0 0 0 +1384 3 -1.2 1.4538772609074668 6.7757921258671905 13.142700385379733 0 0 0 +1412 3 -1.2 2.470710252504265 5.582194948161029 11.127356035118696 0 0 0 +1459 3 -1.2 33.110638445331006 2.662529356395472 14.003488230911016 -1 0 0 +1463 3 -1.2 4.0933550345041345 4.539837813721011 8.639637500462731 0 0 0 +1513 3 -1.2 3.7774977298218078 8.018268964379057 11.21635538674719 0 0 0 +1601 3 -1.2 32.33164377762012 3.5144990965964173 10.184381975404794 -1 0 0 +1613 3 -1.2 0.4198439113311315 2.6805281693684577 10.294136838711825 0 0 0 +1677 3 -1.2 2.4475842902853655 2.4599147761980062 8.772049377019956 0 0 0 +1737 3 -1.2 2.824421632637215 2.671238665074366 11.13006195903871 0 0 0 +1846 3 -1.2 5.277329550665405 1.415852715833914 16.025095776875276 0 0 0 +1891 3 -1.2 0.046577642955788874 7.444841543608815 8.224766747045589 0 0 0 +1931 3 -1.2 2.9650487154067275 2.1053271169023873 14.225508776479545 0 0 0 +2062 3 -1.2 1.6512407946235383 8.693649638029374 15.59127761726648 0 0 0 +2065 3 -1.2 1.0931964966304004 2.721184864711251 16.667629918833125 0 0 0 +2098 3 -1.2 1.8312533848712544 0.5638892601579697 10.228559303497601 0 0 0 +1492 3 -1.2 6.787447084018837 13.474385893951462 14.073371604760057 0 0 0 +2171 3 -1.2 5.869781157006333 0.5200260943734978 11.044403342621699 0 0 0 +2201 3 -1.2 32.95829440339477 0.15874216267929273 11.014224335417627 -1 0 0 +2229 3 -1.2 33.99061213122378 4.745173441239425 11.540310818359396 -1 0 0 +2306 3 -1.2 0.8176837874870242 5.09683976232762 16.023324264989277 0 0 0 +2339 3 -1.2 3.9680266971414353 6.0429855521812215 13.098888769756075 0 0 0 +2375 3 -1.2 6.236071689440973 6.672208792144653 16.19128884021576 0 0 0 +1867 3 -1.2 8.83784579191856 5.700310458901069 0.5963666755092215 0 0 0 +2445 3 -1.2 5.776606855854211 4.260464264584584 16.222410470721837 0 0 0 +2458 3 -1.2 2.3547045572940806 7.661442267866429 9.098572649723293 0 0 0 +2459 3 -1.2 1.8288022423906758 4.495805450704567 7.654572271172731 0 0 0 +2614 3 -1.2 4.629773335882693 3.922523690519157 13.635578454203484 0 0 0 +2697 3 -1.2 2.6077088477277983 7.812660468871465 0.4174146280760784 0 0 0 +2723 3 -1.2 34.170033852574925 4.735268087649475 9.019733689734238 -1 0 0 +2754 3 -1.2 2.9540467495124254 4.083387339534749 15.685973649750611 0 0 0 +2819 3 -1.2 24.317030462772532 8.403649852567117 15.832146118116885 0 0 0 +2904 3 -1.2 5.625220311288179 0.7052604613963925 8.641117495150624 0 0 0 +47 1 3 12.480408676206219 4.5554356795876565 14.778251967178015 0 0 0 +142 1 3 6.786090986305527 1.943014505801247 15.995761554935187 0 0 0 +208 1 3 12.205021356514633 2.392623202130191 11.907890812263398 0 0 0 +2774 3 -1.2 25.96397945793024 12.689555752390183 11.989692190713633 0 0 0 +273 1 3 15.911162378460686 7.19159635446757 13.113233229291064 0 0 0 +293 1 3 12.158142255873742 5.018950113901266 10.616742022226255 0 0 0 +313 1 3 7.196350521578711 3.7141640348459273 8.85404821625785 0 0 0 +355 1 3 6.444932772846798 5.320842644736055 17.00018590625556 0 0 0 +367 1 3 8.027528125886358 2.5291697441248298 13.320593069541719 0 0 0 +453 1 3 5.272814397695176 5.182554532328153 12.88281667499367 0 0 0 +2740 3 -1.2 24.627840386670947 7.789915547251719 7.858078866068491 0 0 0 +561 1 3 6.433798542950932 1.1233504545655073 9.820052551968505 0 0 0 +591 1 3 7.828887147311205 6.699737696582691 13.237877739913653 0 0 0 +639 2 0.6 9.48601902261313 2.6290222397140033 10.872556968882867 0 0 0 +2708 3 -1.2 24.240179843925326 11.860287195226388 9.698188910856443 0 0 0 +775 2 0.6 15.273099562083976 5.314585903204601 7.582960121730988 0 0 0 +803 2 0.6 12.278610496172899 6.9980378009070705 7.603699466942302 0 0 0 +829 2 0.6 8.363083008624638 7.604616258235112 15.889490523847924 0 0 0 +855 2 0.6 13.431911940508282 1.9761709805825092 15.299620203758021 0 0 0 +2587 3 -1.2 20.994612704584828 10.095566517575728 11.242622279387223 0 0 0 +937 2 0.6 9.20380915096589 4.428633483532978 15.406055784847402 0 0 0 +2465 3 -1.2 19.715103325195138 14.203408394531118 11.124275657352527 0 0 0 +2411 3 -1.2 25.420476972074333 11.52544882110778 16.592881810059616 0 0 0 +984 2 0.6 10.943970625439555 7.131121792930927 12.86422620343501 0 0 0 +947 2 0.6 33.11990196520108 13.541124581001368 0.7280841265548146 -1 0 0 +1040 2 0.6 9.692663511087517 1.091701924768 15.38152293878923 0 0 0 +1106 2 0.6 9.399173923274699 6.362677373837425 9.565257372518046 0 0 0 +1109 2 0.6 13.921992849025397 7.458654452030575 10.241849635020394 0 0 0 +2944 3 -1.2 18.678325555708447 17.10497313615366 2.0204353722307844 0 0 0 +1168 2 0.6 13.996675521779782 7.331801933199245 15.451339806958938 0 0 0 +1205 3 -1.2 6.307527255999394 2.7481857042795994 9.699039679086106 0 0 0 +1252 3 -1.2 11.687615583681442 2.579607322702786 7.975505616570644 0 0 0 +1304 3 -1.2 7.370343324491989 0.6235288766262922 15.635883797705118 0 0 0 +1331 3 -1.2 6.584563103460467 5.680303674854835 13.492183933859213 0 0 0 +1416 3 -1.2 11.38030313951141 3.636502825210937 15.209371758699392 0 0 0 +1514 3 -1.2 13.250054700992683 2.0148120659074937 10.75165761602955 0 0 0 +1520 3 -1.2 12.740880252881283 2.7137414877839974 13.232101116470274 0 0 0 +1272 3 -1.2 7.745121042515868 15.647817104831281 10.168280612252957 0 0 0 +1605 3 -1.2 6.95380980188582 3.182128036303692 7.47800849335541 0 0 0 +1865 3 -1.2 21.917054422277054 11.830217154689725 13.994093777920156 0 0 0 +1727 3 -1.2 8.177329773155076 6.68921433612721 11.800155672668478 0 0 0 +1740 3 -1.2 10.510784317524973 13.006587981759703 8.776769235578065 0 0 0 +1901 3 -1.2 12.178348570408616 5.602888859832466 16.139852268137066 0 0 0 +1928 3 -1.2 8.916883473782331 6.321162361165613 14.192136136236305 0 0 0 +2053 3 -1.2 6.506073734220149 5.148248854332297 8.769648748528665 0 0 0 +2093 3 -1.2 8.571057609529236 3.884541503769448 9.34042951963685 0 0 0 +2165 3 -1.2 11.294314242781175 6.163176048832021 10.893595925024334 0 0 0 +2284 3 -1.2 13.878848951211987 4.2423696704841785 15.1965835569867 0 0 0 +2342 3 -1.2 5.416113417437894 5.0176035547592965 11.43138886331854 0 0 0 +2363 3 -1.2 9.115094413276749 3.521886193488985 13.10160347393832 0 0 0 +1784 3 -1.2 20.934445364971427 8.774397977018701 9.185435345414465 0 0 0 +2412 3 -1.2 7.918464387871303 1.0713325497986832 9.644984618222916 0 0 0 +2490 3 -1.2 15.587908234291211 5.662157449143876 13.348967533784561 0 0 0 +2522 3 -1.2 12.293796674546277 5.478432397499722 13.648597793431204 0 0 0 +2539 3 -1.2 11.29614866097855 1.235946615105371 11.97607780176603 0 0 0 +1963 3 -1.2 10.926373132988957 15.525119161818017 13.131845336064616 0 0 0 +2649 3 -1.2 12.127507026645336 4.789469723498316 9.0297408160301 0 0 0 +1098 2 0.6 34.333485258878504 0.857459819022491 7.575620021812746 -1 0 0 +2769 3 -1.2 14.015723075710557 3.284464324537277 8.35830005376273 0 0 0 +2787 3 -1.2 6.915875640303708 2.794435121765495 12.386077293299449 0 0 0 +2799 3 -1.2 11.594205811643858 3.6661266715392347 11.209169258831377 0 0 0 +2836 3 -1.2 13.590986494028801 5.092349483154178 10.941697309795332 0 0 0 +2953 3 -1.2 7.42500788006905 2.7681354692770785 14.7727273194088 0 0 0 +3000 3 -1.2 8.616268061412097 1.171698250400215 13.17559027150028 0 0 0 +116 1 3 18.097776169213244 6.214513909339797 16.371207350618523 0 0 0 +276 1 3 18.879840936063058 7.140351465473925 13.622875033270642 0 0 0 +279 1 3 14.38671719310986 1.0836274527852534 10.303304182862759 0 0 0 +463 1 3 16.1497874555173 4.223872547659984 12.867177965435816 0 0 0 +19 1 3 4.483871962474078 15.355666372984956 15.88780146611459 0 0 0 +1701 3 -1.2 21.68855365646264 14.51618715256692 16.752211324632526 0 0 0 +577 1 3 16.155080986099325 0.3306531828490763 15.962230507633045 0 0 0 +641 2 0.6 16.223789541911692 3.763638021777639 15.918083059246655 0 0 0 +1690 3 -1.2 21.362420987686505 15.037436136210939 12.764957134117578 0 0 0 +712 2 0.6 17.38837038187027 4.637586225727892 9.310912677035255 0 0 0 +713 2 0.6 17.6883282183419 6.576659997172821 10.726617852257732 0 0 0 +763 2 0.6 19.4498712461439 3.708642295609683 14.51739600587607 0 0 0 +814 2 0.6 17.748423585992338 2.0669111925044716 10.669714440862036 0 0 0 +856 2 0.6 19.146786052385394 7.27738191408062 8.43271005253012 0 0 0 +884 2 0.6 18.926173639216792 4.4494035877772955 11.639612479139627 0 0 0 +1625 3 -1.2 26.201470140760147 13.347835055724051 8.916970848893268 0 0 0 +1444 3 -1.2 21.650160237853928 0.32682762885941663 13.152543136162333 0 0 0 +1484 3 -1.2 18.689956739082476 4.871209048775992 16.313324583199005 0 0 0 +1542 3 -1.2 18.92300087053425 12.59491310555636 7.464860743120077 0 0 0 +1850 3 -1.2 15.46382739455863 1.5896201633399427 16.24873776541176 0 0 0 +2239 3 -1.2 10.663906124288117 10.442301906155354 10.820291884613823 0 0 0 +2181 3 -1.2 16.80255786900203 6.770963989520168 8.864281817537215 0 0 0 +2337 3 -1.2 15.401346089557338 2.9521432958250964 12.837590658512738 0 0 0 +2368 3 -1.2 17.501909627569518 7.1413978015800055 12.809664229326515 0 0 0 +2417 3 -1.2 16.755212253739153 4.553634471470007 11.530113547635237 0 0 0 +2474 3 -1.2 15.746264635257738 1.5844278565338419 10.34325690679821 0 0 0 +2545 3 -1.2 19.529549286467027 5.857014405728703 10.03905150328727 0 0 0 +2605 3 -1.2 17.28783340469726 4.002155427205282 13.839187904495368 0 0 0 +2742 3 -1.2 17.69352248544844 0.7281361359360821 16.149707038366778 0 0 0 +2821 3 -1.2 16.135897722031167 1.2186712600603502 7.575915555712857 0 0 0 +2854 3 -1.2 16.656980620989494 6.048346664841773 16.612679013377097 0 0 0 +2976 3 -1.2 19.603042944395657 2.960150846064358 10.112080238671847 0 0 0 +54 1 3 25.161131844339188 7.340844288347691 15.196608205690316 0 0 0 +138 1 3 20.60648158813856 3.311757508903282 9.053511381958213 0 0 0 +178 1 3 26.350776109103702 2.6659548958675687 8.99306118619044 0 0 0 +290 1 3 24.348305096737136 6.513921412712687 8.765841658408931 0 0 0 +306 1 3 24.201376444648993 0.784705892939306 14.873031455977214 0 0 0 +1483 3 -1.2 20.805994973301512 11.86206340412786 8.821448457446303 0 0 0 +371 1 3 22.745278124567896 7.173193306104428 11.14383651548283 0 0 0 +1322 3 -1.2 24.894957789097496 14.770810855922743 14.970983137928929 0 0 0 +1289 3 -1.2 24.07513050961062 14.433711403613021 9.53586546225503 0 0 0 +704 2 0.6 25.00786142601733 1.8821974868308196 11.966243157347884 0 0 0 +728 2 0.6 23.41629021946517 4.008293383308437 13.563836362899913 0 0 0 +781 2 0.6 20.96668663347571 5.021884647132659 11.526397822594324 0 0 0 +929 2 0.6 22.16125640942258 6.081432964129819 14.447807829756947 0 0 0 +935 2 0.6 25.32149991347026 5.856640139492273 12.4526169645511 0 0 0 +1096 2 0.6 20.952411251582447 10.398158264856113 15.445235748850681 0 0 0 +1056 2 0.6 26.666004876096327 4.654857611472239 11.225096701976305 0 0 0 +1165 2 0.6 25.536191767852433 3.9761451494111446 15.066116669622378 0 0 0 +1071 2 0.6 23.671904419348856 10.883476546996917 15.14231878683311 0 0 0 +1248 3 -1.2 25.29258632325714 7.835485294218413 13.654611010336309 0 0 0 +1175 2 0.6 33.228012955172275 6.727459075069613 1.5675521724864263 -1 0 0 +1465 3 -1.2 23.112725983384273 6.7087631788335775 9.662729321726722 0 0 0 +1528 3 -1.2 25.556053383556254 3.8001588840502536 12.849158326172999 0 0 0 +1564 3 -1.2 25.51276963126306 6.191797620711659 9.59724908465856 0 0 0 +1615 3 -1.2 21.266669110364912 7.659323423410025 11.24075829847851 0 0 0 +1630 3 -1.2 24.474732501679757 6.0216883245309285 15.153627163617326 0 0 0 +1044 2 0.6 23.066755472776205 13.748725992710764 14.000602300023205 0 0 0 +1034 2 0.6 24.13621009956985 16.841174138330445 15.378349424122629 0 0 0 +962 2 0.6 20.98527521845094 12.21068543354978 11.747723333775616 0 0 0 +2078 3 -1.2 20.294009265411493 0.7607095962934374 15.106454888697357 0 0 0 +957 2 0.6 23.41724125326337 16.37154887694135 12.444109103550684 0 0 0 +2326 3 -1.2 21.790645214495584 4.008205564990695 9.636579204059194 0 0 0 +2415 3 -1.2 22.958088482474476 6.068160256558905 12.106567850932244 0 0 0 +2481 3 -1.2 21.128630071028493 2.0650894084909805 8.405671938114077 0 0 0 +2634 3 -1.2 21.48305688029201 3.9694063197895373 15.571370592949647 0 0 0 +2703 3 -1.2 25.065658494803593 2.750000094866463 9.745472792603985 0 0 0 +2899 3 -1.2 26.027146178181297 3.649241574876207 7.719411877583779 0 0 0 +2905 3 -1.2 23.96685486665629 2.234012533961483 14.890287302965318 0 0 0 +2921 3 -1.2 20.97683248186655 6.853515423821479 16.12575591278662 0 0 0 +2965 3 -1.2 23.603777632802437 8.365392084574504 11.320852859404239 0 0 0 +2985 3 -1.2 19.595559550562495 5.880121977328694 13.298003804025221 0 0 0 +120 1 3 29.400120538282792 4.148540343476329 13.844917847792784 0 0 0 +793 2 0.6 19.515136067299174 12.089643075453367 14.704164964779162 0 0 0 +312 1 3 28.34600622867386 1.7301274836848 12.561881925183217 0 0 0 +429 1 3 28.75563552501116 7.322873766468034 11.716282830293123 0 0 0 +492 1 3 30.653050601276504 6.7037962640941045 13.933774572012796 0 0 0 +769 2 0.6 23.805207549632073 13.836742603028105 16.731208469976032 0 0 0 +862 2 0.6 27.82275585767434 6.39151634786445 8.785746648310058 0 0 0 +602 2 0.6 23.156146622905865 10.990785478649364 12.081224192536574 0 0 0 +1060 2 0.6 29.000320703760362 1.520237336947049 16.073432902784823 0 0 0 +1083 2 0.6 32.17168659791453 1.5688963883958167 12.444074778647822 0 0 0 +1119 2 0.6 31.995633413430323 2.477255317314044 15.885630728816125 0 0 0 +1127 2 0.6 31.05893958905495 1.491675692900216 10.322731051241176 0 0 0 +1143 2 0.6 29.628093997738475 4.334040512564589 9.754107965968368 0 0 0 +1332 3 -1.2 30.00738242354899 0.7971634964125346 8.473189627985224 0 0 0 +1552 3 -1.2 29.683840140125916 1.1491708666285856 12.218114725848059 0 0 0 +2189 3 -1.2 0.18816138414503153 8.101711400661191 0.14969414606566633 0 0 0 +1567 3 -1.2 26.505681380124074 7.3992375783227775 15.816062308857093 0 0 0 +1810 3 -1.2 26.489833628136623 1.3062527449237549 8.401700419434382 0 0 0 +1899 3 -1.2 27.30503671642503 1.2499725158957016 11.591824986059896 0 0 0 +2155 3 -1.2 29.341070771471678 5.312408511167539 7.701740784992824 0 0 0 +2197 3 -1.2 30.37062038145536 6.821404396288755 15.378848780970602 0 0 0 +2233 3 -1.2 27.533390037645052 3.293188140977811 9.617267670506466 0 0 0 +2248 3 -1.2 26.584610816123504 2.4078237076308553 17.14797082531338 0 0 0 +2322 3 -1.2 28.769371124279182 3.296500308225283 12.654904285232066 0 0 0 +2420 3 -1.2 30.576640453606554 5.17165328055211 13.45813037805086 0 0 0 +2437 3 -1.2 27.359901423616183 6.88303248336015 11.896472174374288 0 0 0 +2530 3 -1.2 29.91813702138127 3.181181976754468 14.820036712783 0 0 0 +2573 3 -1.2 29.4446622055635 6.4140044001865215 10.783857671558374 0 0 0 +2686 3 -1.2 31.408446020834447 7.934342704491162 8.932521257863232 0 0 0 +1398 3 -1.2 6.6068737163048175 8.902266993839458 7.73303520594 0 0 0 +2950 3 -1.2 27.832192692751356 1.4218484353523249 13.94547659129183 0 0 0 +2970 3 -1.2 28.391931263608384 5.170073807350288 14.201993565702088 0 0 0 +4 1 3 33.53456589492457 11.8625285231365 10.775655380966889 -1 0 0 +86 1 3 0.6474402817627473 12.033634224667656 14.673773713650938 0 0 0 +406 1 3 1.6985124749640246 14.269861747203182 8.646352093265707 0 0 0 +416 1 3 1.6239714817812518 14.519651800842057 15.664744859986916 0 0 0 +503 1 3 0.8442083777648062 8.279130761711007 9.168235187518203 0 0 0 +2390 3 -1.2 14.188056491766137 0.34928753817439223 8.901437355800022 0 0 0 +599 1 3 2.54615124070152 9.894742122463644 15.417365242567518 0 0 0 +606 2 0.6 5.265523907646483 14.215876627655623 9.618436184515543 0 0 0 +607 2 0.6 4.884306694304009 8.886317654713775 13.120445413979706 0 0 0 +659 2 0.6 1.8855133731028095 14.679854510199513 11.623648408602975 0 0 0 +679 2 0.6 34.08303996207308 16.721566246958883 10.593108018973485 -1 0 0 +867 2 0.6 3.29258193033771 12.628617391966724 12.486411017233957 0 0 0 +887 2 0.6 0.3269164200393898 8.856004023525372 13.004400069180717 0 0 0 +1007 2 0.6 32.98752789510994 16.491335120089676 14.962077329292502 -1 0 0 +1055 2 0.6 2.285812853017783 10.335347397342275 11.709483012787171 0 0 0 +1065 2 0.6 3.9234377266721787 11.677542017283953 9.18614806782143 0 0 0 +1233 3 -1.2 0.5765143645509154 14.72927221432342 9.522012530542941 0 0 0 +1256 3 -1.2 33.696255377507754 12.448875725606653 15.293727068377937 -1 0 0 +1257 3 -1.2 3.492583155595683 10.039865181148521 16.563606552835008 0 0 0 +1266 3 -1.2 1.5127524888432955 11.133855110303196 15.600220179073824 0 0 0 +1441 3 -1.2 2.9076634013953546 15.357272972164262 15.535189942130627 0 0 0 +1470 3 -1.2 5.489535420481315 16.393014828380032 10.038231429650615 0 0 0 +1608 3 -1.2 32.73319823046971 12.711318092938958 9.66026308811876 -1 0 0 +1712 3 -1.2 11.406128808667116 10.564202520161942 16.031383201070422 0 0 0 +1711 3 -1.2 32.9148482754697 10.525771544298177 10.642977971104523 -1 0 0 +1750 3 -1.2 4.489128279614326 12.592216930072345 14.320081766882401 0 0 0 +598 1 3 21.629029591926603 3.6561256979062065 16.976216260814336 0 0 0 +1913 3 -1.2 0.395697281518047 15.344145835508181 15.64595398579139 0 0 0 +2032 3 -1.2 4.824140187344413 11.390033848184991 11.372986552755341 0 0 0 +2106 3 -1.2 1.6505216623680865 13.698781955353997 16.906571712034285 0 0 0 +2118 3 -1.2 4.454519768761832 8.008746307393954 15.330756585476124 0 0 0 +2169 3 -1.2 1.458434935513604 13.391441703531672 14.53225148388531 0 0 0 +2184 3 -1.2 0.9742934481102571 9.67274028544987 8.660220433123751 0 0 0 +2195 3 -1.2 5.067603577486218 15.472230230911299 14.432781165982986 0 0 0 +2213 3 -1.2 32.714966768122046 12.457576801823729 12.065421442954499 -1 0 0 +2254 3 -1.2 2.922899722661217 14.066760997573478 9.489466479968351 0 0 0 +2299 3 -1.2 3.0115875440954403 10.035338339638928 14.003986918653426 0 0 0 +2509 3 -1.2 32.0272837633595 7.197881414931493 13.611046746066764 -1 0 0 +2511 3 -1.2 0.6405989981226549 12.068524028536839 10.794646394345243 0 0 0 +2595 3 -1.2 0.5134227328632435 8.224428970443372 10.614790467393558 0 0 0 +2623 3 -1.2 3.958545961035179 9.411137766773187 9.226276191850136 0 0 0 +1872 3 -1.2 6.568705285637014 9.020131833717905 16.48184361081125 0 0 0 +2766 3 -1.2 4.769578095595996 7.027497637844567 9.072668762898799 0 0 0 +2824 3 -1.2 4.725335287133926 14.107954798538376 16.614638369002126 0 0 0 +2874 3 -1.2 0.5069350411076048 11.216133904365691 13.444463606230498 0 0 0 +2881 3 -1.2 0.863668480920791 16.171043087341868 12.856499798096197 0 0 0 +2900 3 -1.2 3.9312682498660814 16.248439472449437 12.41873183902124 0 0 0 +2934 3 -1.2 5.315680204201426 13.07492970634899 7.460967996843883 0 0 0 +30 1 3 6.757362842942775 12.832618915557289 7.211632764447952 0 0 0 +72 1 3 9.829319317089393 16.659922546826216 13.34927541411043 0 0 0 +130 1 3 12.113294428998678 15.225942690983393 12.162532864349567 0 0 0 +186 1 3 5.154962094746428 16.501900885625062 13.229610608597831 0 0 0 +250 1 3 11.698961518683317 9.498519165360259 15.02683344810751 0 0 0 +275 1 3 6.785651004633354 16.610468349699914 10.77416210252361 0 0 0 +345 1 3 5.953269924038838 12.347646502596797 14.547875571594055 0 0 0 +445 1 3 6.26492613066968 11.27709348018079 11.806002920597527 0 0 0 +571 1 3 11.215911314253113 9.61738076898739 9.597059251772345 0 0 0 +578 1 3 11.407723102035225 11.709653935073534 11.572374568724008 0 0 0 +655 2 0.6 8.748632886833617 13.5227704286143 10.264810293307427 0 0 0 +671 2 0.6 7.835457015400292 9.9933647318457 14.83754715553975 0 0 0 +695 2 0.6 11.427094712541965 12.834566977145984 14.336117129272495 0 0 0 +1246 3 -1.2 12.688461225053912 13.906481172139893 12.414466772508092 0 0 0 +818 2 0.6 14.378752045795512 13.046472635690582 11.205336961620235 0 0 0 +1338 3 -1.2 33.774426911325605 0.13311755084491533 16.426228406874245 -1 0 0 +854 2 0.6 8.305950632267491 8.64234637882292 10.421221337010108 0 0 0 +950 2 0.6 9.093654671059529 10.233890056305322 12.731301849594127 0 0 0 +987 2 0.6 10.09535838076416 12.423882319917425 16.14686733149824 0 0 0 +1017 2 0.6 8.821018829739511 13.629115261596269 13.438966356028137 0 0 0 +1134 2 0.6 12.690611615936858 14.36089321890829 8.996420707838025 0 0 0 +1138 2 0.6 14.087272057926741 9.945076780320436 12.618604431654187 0 0 0 +476 1 3 18.73321762589055 0.22017364660109986 17.165192438908264 0 0 0 +1225 3 -1.2 11.267449693106748 10.591880456003128 8.34194213250296 0 0 0 +863 2 0.6 3.1588103587544634 0.08951835701962099 6.0614312368024486 0 0 0 +1150 2 0.6 8.180144865813546 10.86015033741547 16.963244973178618 0 0 0 +341 1 3 1.3904445134275878 8.887994902594237 0.5024544590791505 0 0 0 +737 2 0.6 14.165320473964151 16.73548774963783 1.4720693682933048 0 0 0 +966 2 0.6 9.425234412122094 0.24597676110401662 11.120768913011682 0 0 0 +860 2 0.6 15.729087685429876 1.0533746262094108 3.743024148304143 0 1 0 +1051 2 0.6 2.5157112055088833 6.816974629572479 16.389990403663315 0 0 0 +2074 3 -1.2 25.160366859668557 0.4709030459221921 16.108932972102266 0 0 0 +1219 3 -1.2 10.729361098408472 14.47907009750532 16.730095254344377 0 0 0 +2838 3 -1.2 20.25018163166703 3.11822924315667 0.08638057972008041 0 0 0 +115 1 3 5.785102155685449 17.113008209962842 6.94163683972685 0 0 0 +21 1 3 33.87202924159821 0.75529179453393 20.890382650941085 -1 0 0 +79 1 3 1.384138108046314 1.7081433977160148 22.984219158425564 0 0 0 +161 1 3 5.120374132327063 6.015600632595287 23.727681366680546 0 0 0 +432 1 3 4.049390321657622 2.0771263157639863 19.57824618533234 0 0 0 +523 1 3 0.6115923650652229 5.683410906930614 25.444262843446904 0 0 0 +597 1 3 2.521826648718364 4.513662270082266 23.330505868250928 0 0 0 +748 2 0.6 0.8252378803129985 3.096506168946036 19.61919981257551 0 0 0 +768 2 0.6 2.683101694981099 6.9883656859818615 20.470738450613624 0 0 0 +830 2 0.6 1.074967353790657 5.389513041343086 19.899642233159117 0 0 0 +899 2 0.6 33.787556845012745 8.58073562973117 24.483173297519297 -1 0 0 +930 2 0.6 32.250677071632246 5.161783925899259 21.823975496734846 -1 0 0 +1039 2 0.6 4.692987865746362 2.0174205205509304 23.80029041693949 0 0 0 +1117 2 0.6 14.839957085023185 4.9540564590801175 17.338795347871034 0 0 0 +2680 3 -1.2 25.27126474746286 0.3684072196983974 25.811317049467988 0 0 0 +1085 2 0.6 2.0899816607559045 7.645529434739992 22.79288280046483 0 0 0 +1210 3 -1.2 4.566615849821873 3.8593265505911205 21.793039633255404 0 0 0 +1286 3 -1.2 2.36247362817055 2.932667046025273 23.158715159722174 0 0 0 +1292 3 -1.2 5.624540199586263 5.698010290420648 18.242611856969003 0 0 0 +1310 3 -1.2 3.6597485543177224 1.6468584524198229 18.22084234208562 0 0 0 +2231 3 -1.2 16.963466842155462 16.592733026771448 34.22086207611215 0 0 -1 +1429 3 -1.2 1.073671859248546 7.016975683762402 25.026598637041086 0 0 0 +1480 3 -1.2 4.55447153551026 7.335955024015599 23.402964580906342 0 0 0 +2794 3 -1.2 26.07718059834433 15.353138260690105 32.09072038138618 0 0 0 +1535 3 -1.2 33.526754693976294 5.263998397220679 25.3952591388053 -1 0 0 +1733 3 -1.2 2.2754266847172877 5.448108263236337 22.234100433430168 0 0 0 +1764 3 -1.2 0.46400349875129204 1.7570216777207917 24.33036462030044 0 0 0 +1830 3 -1.2 1.3086288097014307 7.308295387300584 18.462607406189093 0 0 0 +1844 3 -1.2 1.0366633217991787 8.942816349445074 20.9565761119643 0 0 0 +2716 3 -1.2 28.31588550992843 16.917965957726192 30.571594441690273 0 0 0 +2011 3 -1.2 2.8221026634784785 2.1408286233204827 20.41287320050135 0 0 0 +2044 3 -1.2 1.471754924090107 4.654998041802253 24.531032699437734 0 0 0 +2077 3 -1.2 5.180220413927695 1.1322180341356871 20.228525867579272 0 0 0 +2185 3 -1.2 5.220814463022691 0.1796826059263569 22.582723019686945 0 0 0 +2196 3 -1.2 34.07965006567493 4.335813498119281 21.09284491675623 -1 0 0 +2312 3 -1.2 4.283404634205388 4.472268176329321 26.782865170391368 0 0 0 +2327 3 -1.2 0.38427402091235946 1.7110333576899819 21.822834088656503 0 0 0 +2360 3 -1.2 33.66627739678022 7.7934472809152995 19.80499470911826 -1 0 0 +2524 3 -1.2 28.39394533265397 16.594020644248513 28.074038591339182 0 0 0 +2394 3 -1.2 33.93617191497441 7.641079638891054 22.422516634516445 -1 0 0 +2603 3 -1.2 0.404754125730333 2.0616365686517795 26.787394943797416 0 0 0 +2491 3 -1.2 29.534219778891323 14.620639789910332 29.199097904134515 0 0 0 +2706 3 -1.2 32.9153121931151 1.6077357109541752 19.99929476096402 -1 0 0 +2748 3 -1.2 2.096445197351191 4.454398913646013 18.059633984932336 0 0 0 +2809 3 -1.2 4.814978431977681 3.4354668657168075 19.545949311006446 0 0 0 +2344 3 -1.2 29.127076874077108 10.678145403030092 28.67630954652604 0 0 0 +2848 3 -1.2 3.8864077724002306 5.028957866969486 24.01383946993782 0 0 0 +2975 3 -1.2 4.844935898103712 5.91765569534254 20.36669333161717 0 0 0 +2999 3 -1.2 3.5817627121450473 1.4196246253384561 25.617758826956212 0 0 0 +2304 3 -1.2 31.352077047877458 14.754385436667407 33.99090039185324 0 0 0 +127 1 3 5.990493411362333 0.8407013191244822 21.524989728779577 0 0 0 +160 1 3 5.357116598807503 7.138609457270406 19.308955669105337 0 0 0 +2249 3 -1.2 31.579292219705337 10.27548194982242 31.104818942477422 0 0 0 +206 1 3 10.799190514502325 8.253944037590468 17.510007879198813 0 0 0 +297 1 3 5.3686621932562515 4.48139178630468 20.686079029561817 0 0 0 +338 1 3 9.333348863630636 6.006040511528655 23.723051557705936 0 0 0 +351 1 3 8.877585840081862 0.6780903248004477 21.647452840535184 0 0 0 +391 1 3 12.181601631891386 2.1317685040700063 24.61707576807327 0 0 0 +448 1 3 13.082449449360341 5.743885413703314 20.092337878949262 0 0 0 +455 1 3 15.460384464561908 6.322985337737685 21.52481170991365 0 0 0 +471 1 3 11.65585603102487 5.453908203568536 17.538609098109767 0 0 0 +507 1 3 11.642363955972023 2.6147854085505218 17.969010759914696 0 0 0 +1193 2 0.6 21.56419234672341 1.4560849235321558 34.01143255564006 0 0 0 +2125 3 -1.2 30.180917995484883 16.098114745248207 32.01816901443911 0 0 0 +2117 3 -1.2 28.21880195990935 7.623929505710863 26.87015843156718 0 0 0 +739 2 0.6 12.79712638870434 5.792590675332303 25.20579230316537 0 0 0 +844 2 0.6 13.04163252066009 4.7100090917122355 23.112162008859833 0 0 0 +925 2 0.6 13.6693504201738 2.2834000765168656 20.13527551147733 0 0 0 +938 2 0.6 8.538661405600566 4.076551337316702 21.754667831283083 0 0 0 +2713 3 -1.2 16.494365044385322 10.825834007586968 34.10804123770621 0 0 -1 +2035 3 -1.2 31.522535568323196 10.45238968884175 28.64377282166424 0 0 0 +1000 2 0.6 7.744645011230744 2.5967439463997697 19.29102320628712 0 0 0 +1003 2 0.6 7.26640847273677 3.237057448153934 23.772772163789597 0 0 0 +1064 2 0.6 6.38962017882088 8.412621070577726 21.855139297216237 0 0 0 +1933 3 -1.2 29.890946212744073 11.924443517774526 26.71275221916851 0 0 0 +1113 2 0.6 11.302729491265334 2.9994119240738826 21.465527248682875 0 0 0 +1139 2 0.6 12.038815908526468 7.996250976800469 22.74533406964479 0 0 0 +1180 2 0.6 8.482560942079996 5.751243991191108 19.521610320377455 0 0 0 +1215 3 -1.2 8.212804865170742 6.994677382330957 24.260090034754942 0 0 0 +1669 3 -1.2 33.04797987135654 16.560178669454046 17.909123970026823 -1 0 0 +1318 3 -1.2 11.401407827669535 2.293353150367479 19.4066814013506 0 0 0 +1349 3 -1.2 8.866924747256892 2.3029564334827635 26.14682436998236 0 0 0 +1381 3 -1.2 6.953779710615301 1.0007627650164226 25.292727443876643 0 0 0 +1924 3 -1.2 27.04980604523634 13.627507650372053 28.442470126928896 0 0 0 +1555 3 -1.2 14.88765581521366 4.155385795372376 24.363282472015293 0 0 0 +1717 3 -1.2 6.8339449958897704 4.383932686334262 20.438821769999915 0 0 0 +1729 3 -1.2 13.462774902856047 7.914105384993325 26.227568716925624 0 0 0 +1771 3 -1.2 10.989866144980436 4.0963979991094375 17.824695807587727 0 0 0 +1829 3 -1.2 13.426193527772153 2.085651536640581 25.443721560816076 0 0 0 +1847 3 -1.2 12.428004218853195 2.5487150600291537 23.225897428980364 0 0 0 +1848 3 -1.2 29.49953000782389 6.666122947421508 32.48854690846253 0 0 0 +1873 3 -1.2 9.375712620543855 6.091725076203821 22.220135567000117 0 0 0 +1887 3 -1.2 10.686244242286042 6.287881678227605 24.29725664862772 0 0 0 +1925 3 -1.2 10.762686412162058 6.671337710597705 17.870122670208364 0 0 0 +1954 3 -1.2 6.3534103420361525 3.0408596485316894 26.46298579950827 0 0 0 +1713 3 -1.2 29.63901464722744 13.72142625775747 32.39379994757935 0 0 0 +2025 3 -1.2 13.067128016076268 4.416287031920962 20.759843339898673 0 0 0 +2061 3 -1.2 12.027161612114107 6.616810914748163 20.620113280394914 0 0 0 +2174 3 -1.2 12.80716456309151 5.509393175315275 18.571539831318727 0 0 0 +2260 3 -1.2 9.074030308236791 0.447240980501517 23.08558758991504 0 0 0 +2272 3 -1.2 6.492536782712307 2.1222269152186275 22.127887967141195 0 0 0 +2354 3 -1.2 8.840173616438472 4.6405233692500465 24.115212925923377 0 0 0 +2462 3 -1.2 9.14141467133428 2.062491499580305 21.19104039936489 0 0 0 +2479 3 -1.2 14.223584491902518 7.7326490925646 17.543108956113826 0 0 0 +1115 2 0.6 19.720694735396886 16.349552072135136 22.78178268442215 0 0 0 +2639 3 -1.2 14.549411510670355 6.252356122546282 20.263588774563082 0 0 0 +2641 3 -1.2 7.425472950936559 0.22476418609715776 21.296489056096334 0 0 0 +2717 3 -1.2 11.117287372502405 3.1759395233345185 25.23335285891363 0 0 0 +2732 3 -1.2 6.100887955926304 5.545210238248927 22.72266523553266 0 0 0 +2584 3 -1.2 7.307914130402483 2.536289080288699 17.241199000732873 0 0 0 +826 2 0.6 0.6224670588149885 11.822531850274952 34.29968379788403 0 0 -1 +2813 3 -1.2 6.04535034005218 6.146957763484895 25.005662797547423 0 0 0 +2866 3 -1.2 14.432774392363564 6.403045558265096 22.574836194343035 0 0 0 +52 1 3 17.853003970051752 7.989715616962989 19.321195877038072 0 0 0 +58 1 3 16.55021494279354 3.741838489473062 20.516766825251455 0 0 0 +174 1 3 16.19120624890968 3.599504880461019 24.73099279585333 0 0 0 +221 1 3 17.454023301295248 8.085010181771757 22.67683019762941 0 0 0 +1611 3 -1.2 28.770381753703713 10.427115890419568 34.16100263470871 0 0 0 +1582 3 -1.2 30.63458445187837 15.682675350894122 27.17704732167155 0 0 0 +384 1 3 17.009170830713956 6.48252582545315 25.0742331240277 0 0 0 +637 2 0.6 18.315506648349317 1.9769807957149472 22.17049631601365 0 0 0 +638 2 0.6 15.541376733468386 2.1546333488063927 18.357568783541797 0 0 0 +1402 3 -1.2 30.685210413005517 8.405828485555606 29.756587850653073 0 0 0 +1069 2 0.6 27.808620524167353 14.202066346625662 30.79334809591148 0 0 0 +991 2 0.6 19.411523323578553 2.6206601190682837 19.06896360355416 0 0 0 +1530 3 -1.2 7.312030309780547 10.526247475349122 33.2327670931592 0 0 -1 +1324 3 -1.2 17.99836146448043 3.4360151711795455 20.479032728378673 0 0 0 +1329 3 -1.2 16.7836401521563 2.6411830025616476 23.775856152792443 0 0 0 +1376 3 -1.2 16.42983700759842 2.6846859406901 26.05772645939972 0 0 0 +1452 3 -1.2 18.819108385464467 1.3728302603711624 26.009585108238685 0 0 0 +1637 3 -1.2 16.977810160250247 4.9114032432772765 25.19364880430957 0 0 0 +1720 3 -1.2 15.741207540690832 2.5615492958935753 20.952256476274076 0 0 0 +1870 3 -1.2 17.290277956456727 6.776443584373791 23.556966291862967 0 0 0 +2024 3 -1.2 19.224850937873523 4.238834605089753 26.821328724387268 0 0 0 +2036 3 -1.2 14.609079584567931 0.36138289518218586 18.96660643953176 0 0 0 +2043 3 -1.2 17.939540199378293 0.096977440044963 18.56330339682401 0 0 0 +2057 3 -1.2 15.58453514790793 7.0521572517579 25.28357697202451 0 0 0 +2211 3 -1.2 18.14159353521218 6.675931184854491 19.893928471582402 0 0 0 +2283 3 -1.2 16.392947662966105 7.565815520417107 21.59211297479836 0 0 0 +1575 3 -1.2 13.508757843207652 16.226443712878623 17.268153826497667 0 0 0 +2442 3 -1.2 20.754619452977437 4.063786130345259 18.055628117187037 0 0 0 +2448 3 -1.2 16.514927849965744 7.972971855040037 18.6084747723749 0 0 0 +2671 3 -1.2 16.059660368138527 4.128888714081012 19.153609427105064 0 0 0 +2688 3 -1.2 19.4025237925271 4.044125833031812 23.35056425868938 0 0 0 +2801 3 -1.2 16.24437855221224 4.982276474481282 21.500720665470567 0 0 0 +25 1 3 21.504573114230727 0.3356222260606246 20.616742901015986 0 0 0 +45 1 3 22.09628447351162 7.013657095165339 19.813817983963414 0 0 0 +71 1 3 24.623767977034422 8.364330698186624 26.754035846533913 0 0 0 +274 1 3 21.598771978476595 6.7699607979595955 24.827807680095408 0 0 0 +344 1 3 20.79184340306309 4.156370363891113 23.738653833854254 0 0 0 +368 1 3 20.5409873121115 7.565021899151067 17.346857769657614 0 0 0 +450 1 3 25.892862439777723 1.0176503579151062 17.3957269215845 0 0 0 +478 1 3 24.27779502487451 7.691679970698112 23.92709756428651 0 0 0 +502 1 3 21.52330948730537 1.4131940107736665 23.23396589821824 0 0 0 +1366 3 -1.2 26.931695244042647 0.06198837877171079 17.854096658473175 0 0 0 +730 2 0.6 25.157661401377638 4.577840976479339 23.056495681217935 0 0 0 +843 2 0.6 19.80710303135905 4.8592998920983845 20.210558408923173 0 0 0 +858 2 0.6 25.178688587640927 5.828229139093455 19.91850882271943 0 0 0 +921 2 0.6 24.525646141378164 0.6589462124186493 20.484169303489594 0 0 0 +1075 2 0.6 22.70799553381507 0.599871385513924 17.616382754301885 0 0 0 +1177 2 0.6 21.073616448384207 8.554587641470352 22.32454352252297 0 0 0 +1305 3 -1.2 21.034099979877745 6.854135366694758 18.63955618427128 0 0 0 +1312 3 -1.2 25.201948876183373 3.1408422205292506 21.078598868092737 0 0 0 +1341 3 -1.2 23.42437584218076 6.885998417787725 19.158872230093582 0 0 0 +979 2 0.6 29.89143939910153 12.729327117550703 30.288628733937415 0 0 0 +1496 3 -1.2 21.23402414540188 5.646617567763294 23.751750226506097 0 0 0 +1524 3 -1.2 25.995308813850617 4.57592771485774 18.254605959943607 0 0 0 +965 2 0.6 26.95286286274274 10.263585355535897 30.6813053173967 0 0 0 +1550 3 -1.2 21.830610648208527 5.9692714675309215 20.84308587526568 0 0 0 +1648 3 -1.2 21.639121038670435 2.960486771722948 23.15548150952624 0 0 0 +701 2 0.6 29.264560510908314 8.868288355540377 32.05190841289651 0 0 0 +1854 3 -1.2 20.55546949775635 1.4404317133658913 20.514783853982834 0 0 0 +2022 3 -1.2 25.196257671105148 6.773209975584982 23.25225653505575 0 0 0 +2250 3 -1.2 24.951681084584894 1.2551916913792507 18.497768368081637 0 0 0 +2788 3 -1.2 30.394419691387952 16.75067664513004 29.510168305585733 0 0 0 +2343 3 -1.2 23.14999081976993 6.793483725263771 24.671556789298293 0 0 0 +2380 3 -1.2 26.64784375271048 1.707627962068956 24.246099931550855 0 0 0 +2389 3 -1.2 22.65323737391113 2.7250437425874874 17.371031188522235 0 0 0 +2510 3 -1.2 21.032322799104854 3.8898983717967983 25.28909983040218 0 0 0 +457 1 3 29.761866510718683 15.793077699151805 28.33047865784638 0 0 0 +2629 3 -1.2 26.048759246033246 2.5562007499757833 26.67627329965821 0 0 0 +366 1 3 30.234725996489438 10.674800354094929 27.68348325510865 0 0 0 +210 1 3 29.790225120386907 17.046367710313508 30.88694686201304 0 0 0 +2758 3 -1.2 24.028425258758933 3.9645909634230128 26.217454454358858 0 0 0 +2895 3 -1.2 20.10930318884386 0.986893341056408 23.260887005629712 0 0 0 +7 1 3 26.344274841851917 1.3501884723908901 25.717835476319028 0 0 0 +55 1 3 28.03699146649361 7.185332484239081 19.93820185465257 0 0 0 +100 1 3 31.2824489081414 1.918123432459538 19.752223500597466 0 0 0 +169 1 3 28.498717641519566 7.275660370563927 25.448744469540042 0 0 0 +269 1 3 30.247319265009974 3.6155311547259408 25.428395557909404 0 0 0 +270 1 3 26.66154361345932 2.9231644587199823 21.00169260717284 0 0 0 +393 1 3 30.26715060292327 8.422436257286957 21.45653062223841 0 0 0 +485 1 3 27.502236705355728 1.0180888304503253 23.032828110593204 0 0 0 +592 1 3 27.092699830410975 3.6192719384603538 18.10543145048626 0 0 0 +850 2 0.6 30.010505949354155 5.6165076581456645 17.520484887488283 0 0 0 +931 2 0.6 29.21607168447395 4.958919833450366 22.257904977500257 0 0 0 +1519 3 -1.2 1.999258885481254 0.38495514931702585 23.13011283679673 0 0 0 +1099 2 0.6 31.08631571132682 1.7592321301933682 22.723177244527907 0 0 0 +1243 3 -1.2 26.92200217654404 1.4499376200905598 21.655211718238792 0 0 0 +760 2 0.6 7.142202677700236 7.028674788519913 34.32900763865746 0 0 -1 +1291 3 -1.2 30.655690864926978 0.5857004994384128 20.093922816925524 0 0 0 +1362 3 -1.2 31.2732746372644 7.363653409244691 21.413461729924244 0 0 0 +1409 3 -1.2 14.016830772304045 14.937721391106725 33.98745916619378 0 0 -1 +1423 3 -1.2 27.333827280369906 3.723652857172078 22.050722734124843 0 0 0 +1454 3 -1.2 26.649724991601268 7.6979040627010225 20.041836118734366 0 0 0 +1660 3 -1.2 28.89331406025431 1.407068381778274 23.303058852366526 0 0 0 +1684 3 -1.2 30.890866737971045 2.9570670414233384 20.733165852050533 0 0 0 +1731 3 -1.2 30.062138611004123 2.101280466981301 25.8687990858845 0 0 0 +1801 3 -1.2 31.161770708602738 2.1996518002297294 18.300792485139443 0 0 0 +1964 3 -1.2 28.87268417064614 7.7319908263522406 21.238166644083623 0 0 0 +2120 3 -1.2 27.832750609224245 0.9139924503294944 26.27343010034075 0 0 0 +2207 3 -1.2 29.926712378305226 7.053895457061809 25.096456448011867 0 0 0 +2289 3 -1.2 28.14997684362877 5.7084739935090685 20.040157186472783 0 0 0 +2783 3 -1.2 21.68804701215989 11.767814945743826 32.79974432451425 0 0 0 +2625 3 -1.2 27.23038458581263 2.8926333118037824 19.552649298549724 0 0 0 +2705 3 -1.2 27.723698180800724 6.052478244678783 25.104971936072808 0 0 0 +2765 3 -1.2 30.587950878041035 3.896878090329487 24.090511416960332 0 0 0 +5 1 3 6.064983412474592 13.646643665964566 24.413828741545196 0 0 0 +726 2 0.6 27.88896948914521 2.698861562314701 32.37195321794002 0 0 0 +29 1 3 33.91924291852739 16.16649121367891 24.73600704063223 -1 0 0 +91 1 3 0.4735982386237835 12.21006669140914 19.497094651032956 0 0 0 +179 1 3 33.993757929769984 8.424499929999206 21.190728197627433 -1 0 0 +240 1 3 0.8739946609326763 11.236098577593255 25.95309307274067 0 0 0 +326 1 3 3.325839408661105 11.747117254745735 19.92552021100122 0 0 0 +329 1 3 33.03510618970314 11.256879222941745 20.96206071103543 -1 0 0 +360 1 3 33.55779114588181 16.745840741252042 19.290583800943516 -1 0 0 +403 1 3 34.30372162040866 7.97453603463398 18.32487508239964 -1 0 0 +409 1 3 3.254075626769521 10.064557894372012 24.714043531448045 0 0 0 +410 1 3 3.063420394837123 11.579891595123547 22.399159572074034 0 0 0 +553 1 3 1.507554004980512 14.992372545019592 19.794799443358023 0 0 0 +562 1 3 6.050309583914177 12.244365769095316 19.297076671036717 0 0 0 +644 2 0.6 33.615183903393635 14.204607408033441 22.00253022981237 -1 0 0 +733 2 0.6 2.1883293963198853 14.469897219168585 23.489165930432666 0 0 0 +902 2 0.6 4.161508752889901 14.659850857072946 21.544968788256934 0 0 0 +2150 3 -1.2 33.37277025103059 7.400947316710873 17.338139610014682 -1 0 0 +1102 2 0.6 2.7736493616059397 9.105910890220636 18.441630407798815 0 0 0 +1245 3 -1.2 0.7749300382811808 16.24283951582849 19.26441717986583 0 0 0 +1258 3 -1.2 32.979827076282646 15.772782291894165 20.28567583423536 -1 0 0 +1303 3 -1.2 3.264429099494363 12.656440292043246 21.209502710381123 0 0 0 +1361 3 -1.2 0.18458132859250515 11.849855762441068 21.01297791373018 0 0 0 +1377 3 -1.2 0.9623426856218203 16.47871758408363 25.56503425789235 0 0 0 +1445 3 -1.2 4.831940020137166 7.807890814140199 17.827644885694575 0 0 0 +1481 3 -1.2 2.2797277379118253 14.252038972034198 25.92669430712018 0 0 0 +1574 3 -1.2 33.34638549869032 11.651887211304636 19.424879038395574 -1 0 0 +1580 3 -1.2 3.7691323982353953 16.812408628648864 25.365181117033774 0 0 0 +1656 3 -1.2 4.496218703830479 11.958439367775831 19.022528281571226 0 0 0 +1800 3 -1.2 2.378930580280937 11.127485764754764 25.58616558863403 0 0 0 +1849 3 -1.2 2.3145266182989954 16.93914512641391 23.27532732358969 0 0 0 +1945 3 -1.2 34.12608548709833 10.941599314739287 25.044318941103246 -1 0 0 +2019 3 -1.2 33.015536990885394 15.772002680456094 26.00366235449279 -1 0 0 +2039 3 -1.2 5.971716540008692 16.98042055865025 24.205368174792017 0 0 0 +2042 3 -1.2 0.5534587527336052 13.728191228147406 19.387822614578724 0 0 0 +2108 3 -1.2 33.085969380680595 9.758842351250925 21.294380988977302 -1 0 0 +2235 3 -1.2 1.9315087332197025 12.135603696645818 23.129411078097625 0 0 0 +2324 3 -1.2 5.995592956661333 12.351297745617792 25.15595624813518 0 0 0 +2406 3 -1.2 1.4586264446061008 15.00073331107311 21.27673726258074 0 0 0 +2428 3 -1.2 3.273572722793118 10.693188102261585 21.10314326580072 0 0 0 +2435 3 -1.2 1.912696318637344 11.67972390229081 19.27206347610094 0 0 0 +2506 3 -1.2 3.980678604438028 9.302549744120759 25.71184397271406 0 0 0 +2589 3 -1.2 4.3027705796523215 16.964752264010908 21.687175426683265 0 0 0 +2613 3 -1.2 34.07315879408402 14.932420233544603 23.976679844723243 -1 0 0 +2655 3 -1.2 2.8870744613913253 14.697244623791692 19.39000821981899 0 0 0 +2685 3 -1.2 3.916883957974411 10.927057518520956 23.531588466239025 0 0 0 +2730 3 -1.2 2.182616102817265 9.444140235705078 23.916291045711038 0 0 0 +2914 3 -1.2 4.648619470705936 8.227425259176238 20.105917677155034 0 0 0 +31 1 3 14.405915316559842 12.492974708937426 20.135183285732314 0 0 0 +141 1 3 10.577278261218463 11.992449492330138 23.972208453898705 0 0 0 +162 1 3 10.77199610634903 14.713642254262204 24.716342756448434 0 0 0 +184 1 3 15.315780179320248 14.925009050177746 22.854590782663507 0 0 0 +202 1 3 9.097266750457214 9.909590720891721 22.670677423212815 0 0 0 +247 1 3 11.590088383788252 10.153040464428424 19.57809911052514 0 0 0 +266 1 3 7.1800065913926785 7.1075058830535225 25.54447319487981 0 0 0 +323 1 3 14.627897054788967 8.371069212503475 25.406735540600188 0 0 0 +435 1 3 7.655310925575033 14.523086804197192 22.014415664304252 0 0 0 +481 1 3 15.069874522850851 8.698059407039796 18.31290018248244 0 0 0 +484 1 3 7.914886752915645 14.197009061766984 18.0254284101073 0 0 0 +567 1 3 12.506659706284479 14.93880863548357 20.356560913492284 0 0 0 +589 1 3 10.64944356423728 15.192177555042552 18.009841564986576 0 0 0 +609 2 0.6 10.011835101106893 7.634374782387514 20.7276192335597 0 0 0 +711 2 0.6 14.538329309022314 11.244200343364882 23.871840204611136 0 0 0 +722 2 0.6 8.740164225014082 11.78176995372527 20.092246383803385 0 0 0 +809 2 0.6 12.137513873674788 9.668656450545322 25.418201829166552 0 0 0 +849 2 0.6 6.148687624734679 11.273280161136507 22.772310569066924 0 0 0 +870 2 0.6 8.001116162176727 9.285024908811673 19.03913509339526 0 0 0 +918 2 0.6 14.030533626095627 9.378524960729344 21.80258917156963 0 0 0 +951 2 0.6 7.879284876263048 16.279875375542233 24.315067504897563 0 0 0 +956 2 0.6 7.434778580941038 10.723872323030305 25.515993455578588 0 0 0 +986 2 0.6 9.472630127011586 8.681003106746065 25.57967750880679 0 0 0 +1050 2 0.6 12.00364847153394 12.094605415934394 21.749344476715343 0 0 0 +137 1 3 3.032778151900254 0.27721929824882663 26.37859843420082 0 0 0 +1280 3 -1.2 4.744379537091312 13.912835881817301 23.801711062912446 0 0 0 +1380 3 -1.2 10.203032536382779 10.610215349179636 19.282561592462283 0 0 0 +1488 3 -1.2 12.490109695720822 11.260932390967078 19.166570673172732 0 0 0 +1505 3 -1.2 13.411932300803235 13.683396766387489 20.676901802715413 0 0 0 +1541 3 -1.2 14.358337946762207 8.916478560071443 19.606113551989022 0 0 0 +1959 3 -1.2 8.127234237939382 0.1095204338228586 18.15313758122595 0 0 0 +1694 3 -1.2 11.950238385923178 11.458404476711712 24.068177584401813 0 0 0 +1705 3 -1.2 10.038539207651143 9.090943701061457 23.493669057620455 0 0 0 +1708 3 -1.2 9.345980956360595 14.941864686283605 25.13740837395725 0 0 0 +1748 3 -1.2 11.582785157691374 14.151874901572118 25.82174119443153 0 0 0 +1797 3 -1.2 5.714620792292468 17.00737641301724 26.72675820607447 0 0 0 +1820 3 -1.2 11.636862869861625 8.867907781392717 18.632732955843295 0 0 0 +1833 3 -1.2 9.850662879917405 11.327358757606873 22.7335016627105 0 0 0 +1843 3 -1.2 8.48004685999818 15.70762835054145 22.389837799078563 0 0 0 +1897 3 -1.2 9.217551136457098 15.076848752586612 18.599513986323657 0 0 0 +1949 3 -1.2 13.861695984873691 14.894865136802288 23.106825099742505 0 0 0 +1960 3 -1.2 14.51196740294607 12.836019416147238 18.707095147196743 0 0 0 +2005 3 -1.2 9.664377935074171 11.770629551845813 25.123103409162784 0 0 0 +2009 3 -1.2 11.39950855969487 15.143689038691122 21.316412082348066 0 0 0 +2027 3 -1.2 7.787909899859873 10.151811454746007 23.342661096539466 0 0 0 +2034 3 -1.2 8.760978099401962 9.342735825340856 21.34568961539339 0 0 0 +2076 3 -1.2 6.846989164374955 11.074400642300104 18.91837643938713 0 0 0 +2079 3 -1.2 11.694917876075342 9.732654781363678 21.005116966531023 0 0 0 +2147 3 -1.2 8.389275813489611 13.586589134942585 21.1351335360098 0 0 0 +2199 3 -1.2 6.830471185623216 7.385053560554685 19.48091632144212 0 0 0 +2252 3 -1.2 10.709061162277186 13.536769549973151 23.71160415046079 0 0 0 +2345 3 -1.2 8.678000968739132 12.936854146695374 17.812741168023873 0 0 0 +2376 3 -1.2 11.69164572571711 14.59761315302274 19.025293745506865 0 0 0 +2382 3 -1.2 11.164965479837655 16.64431111152558 17.70335762926837 0 0 0 +2454 3 -1.2 6.681810084069554 13.61131812327023 18.877238532715246 0 0 0 +2468 3 -1.2 11.142760497865199 16.26518949131309 24.753891111762517 0 0 0 +2483 3 -1.2 6.273607479557771 14.916810565639901 21.637539603570648 0 0 0 +2519 3 -1.2 14.058176661816468 8.787565004695699 24.07620397870807 0 0 0 +2557 3 -1.2 15.089296592960691 17.02948098310898 25.673665781178922 0 0 0 +2624 3 -1.2 13.353427206852494 16.13346191422531 20.251323162449225 0 0 0 +2692 3 -1.2 14.18059938388966 13.139320376464049 27.139797398162322 0 0 0 +2727 3 -1.2 6.461230728096107 14.643170409203659 25.594313386025597 0 0 0 +2954 3 -1.2 5.894219780405039 12.159128350089027 20.809521620289477 0 0 0 +2997 3 -1.2 7.250802841083096 13.691505784986253 23.39664063222153 0 0 0 +3 1 3 17.271493066103062 15.398332152491678 20.63848309149186 0 0 0 +242 1 3 17.21968755519269 11.450382601326059 20.339355603532976 0 0 0 +522 1 3 16.337881746617555 16.743999923596242 24.910899693292187 0 0 0 +632 2 0.6 18.781379314786342 9.3686733903993 25.485289307740334 0 0 0 +820 2 0.6 15.686807967131637 13.671874511335824 25.661388999801552 0 0 0 +846 2 0.6 16.181230198232015 13.897541586246906 17.441789349980645 0 0 0 +890 2 0.6 20.206311608566057 10.85905293811428 21.631035004077717 0 0 0 +969 2 0.6 17.715251716092116 11.89434564488894 23.62854802090158 0 0 0 +1079 2 0.6 18.324250134609123 13.97650303816075 24.919221141543606 0 0 0 +1238 3 -1.2 18.234613870943093 14.28334113120135 20.78559099229109 0 0 0 +1263 3 -1.2 18.80367450915534 8.263678834661151 22.142962740485505 0 0 0 +1309 3 -1.2 17.278408993735955 11.996944979374181 25.826341173019223 0 0 0 +1450 3 -1.2 16.881967158872733 15.663608924957193 19.229231136678404 0 0 0 +1500 3 -1.2 15.432258240572015 9.483452607546253 25.955633245670818 0 0 0 +1556 3 -1.2 18.77925604673286 13.678975419048994 17.713640428963807 0 0 0 +1683 3 -1.2 15.959122081941782 13.718318599018223 23.43806075897238 0 0 0 +1754 3 -1.2 16.007618541335 12.450375943196674 20.471474412832652 0 0 0 +1857 3 -1.2 16.994547441798787 9.183487594275254 23.528660736800667 0 0 0 +1914 3 -1.2 17.86513594255614 16.5816642761278 21.341435576931932 0 0 0 +1980 3 -1.2 18.890356505604725 8.986941834655344 19.248804500596908 0 0 0 +1440 3 -1.2 19.51524961988651 10.350822994326302 34.25406814204658 0 0 -1 +2037 3 -1.2 20.558592077182173 16.182934409676925 18.234235100456694 0 0 0 +2163 3 -1.2 18.937354617743726 7.1900510274813065 17.36095188868996 0 0 0 +2408 3 -1.2 16.733514576821573 10.021852266727745 20.350195950863636 0 0 0 +2485 3 -1.2 17.77954513520705 11.756266299990243 18.914811532794744 0 0 0 +2591 3 -1.2 15.442282964169516 9.911466001124799 17.547701381410462 0 0 0 +2631 3 -1.2 15.881570492664524 15.066918469173189 21.402081603152443 0 0 0 +2665 3 -1.2 19.891076217837217 12.87360621224027 24.05390518142747 0 0 0 +2667 3 -1.2 18.164256501638512 11.523511544428725 21.471747275420725 0 0 0 +2820 3 -1.2 14.069809989339388 11.491978907916545 21.20063596095117 0 0 0 +2830 3 -1.2 16.881843100089938 15.474035078061487 25.499346207207545 0 0 0 +2903 3 -1.2 15.84015191091312 16.261154755186155 23.482152402505747 0 0 0 +102 1 3 21.25520064330375 13.302558961270494 23.577210275049467 0 0 0 +168 1 3 25.53174714908956 11.570554463660276 18.113448678019488 0 0 0 +215 1 3 26.95132172321146 16.42147458122586 22.66462271548364 0 0 0 +224 1 3 25.948738767989905 12.515218332735177 25.826883183589718 0 0 0 +235 1 3 19.077673946535576 12.286550551640557 18.11903657635141 0 0 0 +296 1 3 25.082739743423126 15.24452345371057 20.64260627011871 0 0 0 +612 2 0.6 24.170975842811917 12.247996122937968 22.66866924683049 0 0 0 +616 2 0.6 24.37460010946832 8.552024344195026 18.044106891727093 0 0 0 +790 2 0.6 23.019809760450606 16.33743701664732 25.836396805012797 0 0 0 +861 2 0.6 20.682791473438385 14.452183709634626 20.147481719095374 0 0 0 +990 2 0.6 21.347376378455145 10.472890145915372 24.607953749800835 0 0 0 +1008 2 0.6 24.554373027380837 9.405649582135439 20.76849133512861 0 0 0 +1188 2 0.6 21.409274620942128 10.315099607220006 19.1796666014826 0 0 0 +1201 3 -1.2 20.297831336149144 10.611780189187774 26.477552237192555 0 0 0 +1302 3 -1.2 24.879319372745005 8.414722975029806 25.20174204341542 0 0 0 +1411 3 -1.2 20.190168858444128 12.155007100977661 19.11301747012605 0 0 0 +1624 3 -1.2 19.866704526026933 15.757347652118114 25.88503288040903 0 0 0 +1155 2 0.6 14.72584495022626 5.721356615872393 33.87144581490754 0 0 -1 +1958 3 -1.2 21.027597860815742 8.946093837466691 17.331278080279294 0 0 0 +2126 3 -1.2 25.263867764981 13.001326598190152 18.512236838210498 0 0 0 +2132 3 -1.2 21.008234583621487 8.063338856591692 24.527818129015397 0 0 0 +2152 3 -1.2 23.54499123316827 8.609437227394471 23.04789732277151 0 0 0 +2208 3 -1.2 21.799541443255766 12.118752208744544 22.781120383522207 0 0 0 +2278 3 -1.2 25.38882346270601 14.010214633659324 21.389415530543584 0 0 0 +2336 3 -1.2 21.9198359704804 8.400271797222569 20.3409165457165 0 0 0 +2340 3 -1.2 22.19063965917105 13.536950612930283 24.74120170131761 0 0 0 +2451 3 -1.2 26.13314902021215 15.521520688091046 19.46286442005493 0 0 0 +2471 3 -1.2 23.70263851174537 15.56043595094322 20.31370338543585 0 0 0 +2604 3 -1.2 24.519425076976482 10.631696377698608 18.708579444986395 0 0 0 +2616 3 -1.2 21.127556743078458 14.536794464547095 22.724777659745005 0 0 0 +2770 3 -1.2 25.226128222668958 11.616966288418421 24.922875307268676 0 0 0 +2907 3 -1.2 26.11594421729083 13.94036080964063 25.512132455575625 0 0 0 +118 1 3 27.52858960931131 15.11391208208584 18.919597004681055 0 0 0 +334 1 3 29.183729590902043 13.377234512654924 20.762137359593957 0 0 0 +358 1 3 29.062260920448715 14.543794594739525 23.54405939877047 0 0 0 +381 1 3 27.27939527172993 11.45933570585795 21.99404036258282 0 0 0 +382 1 3 28.928353569523946 9.67426216549438 23.735236249786084 0 0 0 +411 1 3 28.94817732426363 12.174938612904672 25.472483112142466 0 0 0 +444 1 3 29.669303745160253 16.884324038282482 17.817277642389055 0 0 0 +1536 3 -1.2 20.00098217094066 0.7886282436516325 17.658720084521395 0 0 0 +794 2 0.6 30.05295605319384 13.425523600612912 17.34804304467306 0 0 0 +1092 2 0.6 28.858202325258457 10.195121039923356 18.93974052268653 0 0 0 +1306 3 -1.2 28.338858720765863 12.078042994727513 20.976560709217306 0 0 0 +1343 3 -1.2 30.091576966108413 9.052500278736373 22.941255426543297 0 0 0 +1392 3 -1.2 27.498439405457 11.922934932745433 25.94895372085665 0 0 0 +1553 3 -1.2 30.16068843358755 13.309405265306651 19.682119920657204 0 0 0 +1557 3 -1.2 27.670012721941177 14.320737411631054 17.705618435503645 0 0 0 +1614 3 -1.2 28.151593460595357 14.471261714396766 20.24429636829903 0 0 0 +2167 3 -1.2 32.06685456208432 12.048069587530447 21.68801877573871 0 0 0 +2180 3 -1.2 28.18579773631228 8.661054789432805 24.60911787219364 0 0 0 +825 2 0.6 12.567845801979209 12.546137004766377 17.28356897409477 0 0 0 +2320 3 -1.2 29.58598902580365 13.841583991007695 22.21799761346279 0 0 0 +2325 3 -1.2 29.337651675295515 11.013535176069837 24.464067048967003 0 0 0 +2439 3 -1.2 26.943525370158007 11.126058561341353 18.43050071694054 0 0 0 +2480 3 -1.2 30.380813251190418 9.593028349143378 26.69155132765892 0 0 0 +2569 3 -1.2 30.388966054373633 9.59261876547052 20.56039625448284 0 0 0 +2593 3 -1.2 27.634867302396383 15.103199526348664 23.134463540208444 0 0 0 +2700 3 -1.2 27.97961540420295 10.144507687669284 22.590881740197084 0 0 0 +2701 3 -1.2 29.815941673936607 15.791816413898104 23.767351620249265 0 0 0 +2761 3 -1.2 28.826503434924735 7.777502660816401 18.81315941724657 0 0 0 +2855 3 -1.2 29.18073518520093 13.574802630200766 24.811053250478192 0 0 0 +2925 3 -1.2 28.401338510054096 16.395883927892903 18.684356900351755 0 0 0 +2973 3 -1.2 25.973650288832626 11.083730107593754 21.49351460466115 0 0 0 +2990 3 -1.2 27.43924554588384 12.390159687515299 23.155708176147723 0 0 0 +2747 3 -1.2 21.783051456021195 14.63168315959776 31.79069780731133 0 0 0 +140 1 3 3.313059686004584 3.523235699890183 29.43760183317012 0 0 0 +201 1 3 1.0865283903826282 5.528209606188059 32.244040475167495 0 0 0 +2674 3 -1.2 23.844847464125895 16.21478723955496 28.244264183163324 0 0 0 +245 1 3 2.682543816474488 0.6455676954410057 29.382253680171097 0 0 0 +252 1 3 3.3212487378088618 6.879035536470827 33.794949357054136 0 0 0 +348 1 3 5.361827668138975 7.795337172152833 28.580573954550324 0 0 0 +425 1 3 5.433696512778608 3.852478053193791 27.445559996928818 0 0 0 +489 1 3 0.8048073113664798 5.020475735283631 29.25340029018692 0 0 0 +501 1 3 0.2794088984704516 1.0281258295351159 25.70854832017338 0 0 0 +608 2 0.6 2.182767934320409 1.9031199982378197 32.759439953449046 0 0 0 +645 2 0.6 33.524529990096845 2.762087790283853 30.97107487489776 -1 0 0 +715 2 0.6 4.244035381911046 6.83612544539374 31.063220449468815 0 0 0 +741 2 0.6 3.3714793445753384 7.021489304751608 26.40332980458696 0 0 0 +792 2 0.6 33.617647306902214 0.48459650426361023 28.747665898971277 -1 0 0 +897 2 0.6 33.155533115005724 3.8086908084737545 27.053418400634698 -1 0 0 +964 2 0.6 4.978532423577482 2.579316983774677 31.42442654011559 0 0 0 +1005 2 0.6 2.3644496623287017 3.442674928659214 26.36747900574856 0 0 0 +1265 3 -1.2 3.884997292723651 0.5380334754577593 32.174871752978405 0 0 0 +1346 3 -1.2 2.7308447780293634 2.1261137408953243 29.952752283067184 0 0 0 +1430 3 -1.2 2.2709924762352967 6.517658652841916 32.6014886284566 0 0 0 +1436 3 -1.2 4.492733439908251 3.027378027723264 28.54562747726883 0 0 0 +1578 3 -1.2 33.90601615920773 4.252123830790089 29.079756580876438 -1 0 0 +1753 3 -1.2 26.220085367558937 16.235585536848156 29.301901779423076 0 0 0 +1560 3 -1.2 28.37861468949431 4.047324237721972 17.55932027142159 0 0 0 +1662 3 -1.2 2.107601687573662 4.2194889114546275 28.788222008331157 0 0 0 +1700 3 -1.2 33.519536644866896 7.743778558973597 27.68576826429138 -1 0 0 +1903 3 -1.2 1.1085636156142424 5.490967845834019 26.878510509151525 0 0 0 +1604 3 -1.2 7.909302991286214 5.300689727537226 17.264196068467744 0 0 0 +2627 3 -1.2 25.8028334884223 11.946073227518259 29.76534702002311 0 0 0 +2598 3 -1.2 0.5492242187456303 6.562405590105626 29.406576447311082 0 0 0 +2636 3 -1.2 1.2443412947273755 4.320453039700346 33.225146991705536 0 0 0 +2745 3 -1.2 34.11744850782087 6.161553312904245 32.18770196112727 -1 0 0 +2816 3 -1.2 3.9311220581201747 4.384615806452529 30.454053826772135 0 0 0 +2931 3 -1.2 1.2261363391139128 4.806233094428257 30.842702296924045 0 0 0 +2955 3 -1.2 32.994473031770504 0.5958330733412871 31.532447780345464 -1 0 0 +50 1 3 10.118814615646986 7.356987077999757 32.59473065442866 0 0 0 +109 1 3 12.577001362911268 0.9379493960641098 32.34624181835411 0 0 0 +190 1 3 7.376600045457518 1.853010923113048 26.42137337580292 0 0 0 +229 1 3 11.109703242690575 2.070999506204912 30.695480147295722 0 0 0 +2618 3 -1.2 20.24252585423644 14.680528527066633 28.108191829151604 0 0 0 +2487 3 -1.2 24.0986016597478 16.049975913004822 33.32622323072822 0 0 0 +441 1 3 8.793702300530821 3.6436944534067557 29.950621105506716 0 0 0 +520 1 3 13.871745432897836 5.194962831730439 28.542256375977658 0 0 0 +541 1 3 10.18207698953313 3.1763550926617525 26.488917611745958 0 0 0 +563 1 3 7.375832764029703 3.5135620849373037 32.508712942931844 0 0 0 +579 1 3 11.354345635905265 0.8206644410613856 28.011898856656316 0 0 0 +624 2 0.6 7.469934844180763 6.47756991305228 31.240012475013078 0 0 0 +761 2 0.6 14.163549963312523 7.718875166141943 31.22225849786736 0 0 0 +773 2 0.6 13.879213533202067 2.8281729784964105 27.433701483596053 0 0 0 +2449 3 -1.2 25.283718045797784 9.367424372168436 27.60872506435826 0 0 0 +833 2 0.6 6.033441836036213 5.298920146022668 30.292688121329117 0 0 0 +878 2 0.6 9.19967721003776 6.384991027250001 28.419776135322422 0 0 0 +2395 3 -1.2 24.790441822588164 14.15961111976277 29.202135360201105 0 0 0 +1030 2 0.6 11.491917423052174 6.810460743611025 27.19897577706203 0 0 0 +1033 2 0.6 12.746370426700281 5.3172673754545245 31.285761569987205 0 0 0 +1927 3 -1.2 10.600844556016398 7.823820655882447 33.975690774215494 0 0 -1 +1221 3 -1.2 8.528132058861647 5.068478083968102 30.05894405762157 0 0 0 +2010 3 -1.2 25.320295849875492 12.45662850528572 27.29644961434895 0 0 0 +1383 3 -1.2 10.943147168213375 1.0863032114108502 29.525375820622596 0 0 0 +1388 3 -1.2 12.573623652841793 1.9777149779711207 31.15449853976996 0 0 0 +2693 3 -1.2 11.461760016033615 13.028654397022414 33.9329994158104 0 0 -1 +1523 3 -1.2 8.745837861007763 2.7886693758150543 28.753492260357863 0 0 0 +1592 3 -1.2 10.425452011778011 5.966483684431704 32.21161324942314 0 0 0 +1633 3 -1.2 6.347446140603318 4.456983871758823 28.40787249314736 0 0 0 +1702 3 -1.2 7.075246960849841 0.9984551350951079 27.6942293599569 0 0 0 +1777 3 -1.2 10.788064499742571 7.683957043628048 29.31854277685674 0 0 0 +1879 3 -1.2 11.117183654164235 2.247554177451501 27.410064535324384 0 0 0 +1893 3 -1.2 12.787294950763107 0.45511172809608774 28.081815206730685 0 0 0 +1156 2 0.6 27.88894299353334 14.89615150020681 33.212637723001016 0 0 -1 +1975 3 -1.2 5.502143801391736 6.96826319494804 27.371144825732074 0 0 0 +1984 3 -1.2 10.245653125707875 3.286498673411924 30.530624775460492 0 0 0 +2084 3 -1.2 10.895986657542796 1.3072787185866004 32.04429231152345 0 0 0 +2159 3 -1.2 13.289568010383825 4.108910824454039 29.434425887589423 0 0 0 +2187 3 -1.2 13.638773784987738 6.517928284519642 29.18708705214305 0 0 0 +2203 3 -1.2 6.53768948806029 4.713013852336823 32.37570984539546 0 0 0 +2378 3 -1.2 14.855558480654551 3.938740015058657 32.292839655428686 0 0 0 +2460 3 -1.2 9.992766542546699 4.47733534108122 27.1064681760878 0 0 0 +2493 3 -1.2 15.347429768026572 1.810067173834178 28.652713811783574 0 0 0 +2529 3 -1.2 8.097835833249231 6.687621883164748 26.622522186959095 0 0 0 +2588 3 -1.2 8.671813815892616 3.786086367879934 33.28422092649124 0 0 0 +2610 3 -1.2 6.193155291193569 7.372455909595251 29.76236940188695 0 0 0 +2711 3 -1.2 13.134487254007396 5.053891142229476 27.22770956683274 0 0 0 +2789 3 -1.2 7.808541526790428 3.0159360115677187 31.103670131376568 0 0 0 +1999 3 -1.2 21.98432475463758 9.152340398983188 29.917242827109995 0 0 0 +212 1 3 15.772226233579651 2.8204033039599574 32.00225535906353 0 0 0 +287 1 3 20.041844331008406 2.675678855238899 31.39228148753592 0 0 0 +361 1 3 17.189127569767965 7.387452674005599 32.22568799180218 0 0 0 +469 1 3 16.6122381445057 1.913005631346231 29.4207734563955 0 0 0 +595 1 3 17.519320900084725 1.8681024652245946 26.72168447265201 0 0 0 +1946 3 -1.2 23.37763462560928 12.801385501313366 34.257258938618456 0 0 0 +1141 2 0.6 17.46900941439382 5.035233388578442 27.877241491314166 0 0 0 +1144 2 0.6 17.249023077849646 6.245050548319348 29.3760414203378 0 0 0 +1262 3 -1.2 19.457913876164163 5.66628538233453 29.239915656006318 0 0 0 +1917 3 -1.2 29.55187418101472 1.5418403809184704 34.289842682193154 0 0 -1 +1581 3 -1.2 16.546370028568308 2.9168190611362443 30.58744486520064 0 0 0 +1136 2 0.6 24.105981005747715 1.8648247194762015 34.30617978815893 0 0 -1 +1824 3 -1.2 16.974738216854966 0.5325528003284592 29.794388045554257 0 0 0 +2045 3 -1.2 16.33926660261266 7.127041345718858 31.03933582590575 0 0 0 +2090 3 -1.2 17.32825894805324 0.2889130323143611 26.76544247896417 0 0 0 +2110 3 -1.2 19.382837219007683 3.7616835748090667 32.311661726057345 0 0 0 +2430 3 -1.2 15.041120664555871 1.5105636854589592 31.795229838556796 0 0 0 +2607 3 -1.2 19.18124945787331 1.4954533999895796 31.212789567209484 0 0 0 +2626 3 -1.2 16.690628196973226 7.758007656255181 27.86924150593336 0 0 0 +2793 3 -1.2 15.33604993667304 4.892908843615504 28.290143056687544 0 0 0 +2812 3 -1.2 18.204048050524882 7.035883505982366 25.71619607182213 0 0 0 +2873 3 -1.2 18.583807453734757 6.89090571808484 32.03181629162473 0 0 0 +2932 3 -1.2 17.61475768292412 2.2855580870985976 28.206153374640117 0 0 0 +131 1 3 20.64557159687188 4.58566540133898 26.643472676399323 0 0 0 +1772 3 -1.2 25.48108173868608 9.03442407267841 31.829777496148992 0 0 0 +180 1 3 20.643374577393743 4.834097376127286 29.501556239910016 0 0 0 +1489 3 -1.2 20.707450241308827 12.436344523367639 29.096613155995236 0 0 0 +392 1 3 24.668924973743696 2.743975943936049 30.074408084227667 0 0 0 +408 1 3 26.012617051505877 0.1853554748177217 29.749313584578328 0 0 0 +449 1 3 25.67871719396471 6.180934011121624 28.450176910244778 0 0 0 +1239 3 -1.2 24.26533889099547 16.192817982263517 30.727048785894148 0 0 0 +543 1 3 24.975136798605842 3.5840062231187613 27.239203964980284 0 0 0 +734 2 0.6 22.440450721139555 7.269994358365337 29.067125618812096 0 0 0 +1035 2 0.6 21.822318919031026 15.862519715841177 30.105380137065257 0 0 0 +817 2 0.6 24.19470885134761 7.000619442986073 31.401289430552108 0 0 0 +1026 2 0.6 20.426246285334496 9.276559785633205 28.201278623645862 0 0 0 +1107 2 0.6 20.279310933744465 7.798431139657887 30.69189663763794 0 0 0 +967 2 0.6 19.650297310265433 9.87836412567655 32.10207785923161 0 0 0 +1244 3 -1.2 21.079117108489406 6.05005550935738 26.126794342210488 0 0 0 +1482 3 -1.2 24.445418413456668 6.102206209611232 29.261230554992196 0 0 0 +1561 3 -1.2 21.789164276279667 0.5247585795244906 29.367942081456597 0 0 0 +1616 3 -1.2 24.253347014659866 6.021197644324863 33.53935058906819 0 0 0 +1765 3 -1.2 21.391249428273525 1.8305782245059294 27.33146894783165 0 0 0 +1783 3 -1.2 21.647144300871545 5.384356239210349 30.420911298339497 0 0 0 +1874 3 -1.2 24.35152228664535 2.963894642103233 28.596851398366404 0 0 0 +1978 3 -1.2 23.17195360112656 8.207619562129043 26.9913021865684 0 0 0 +2146 3 -1.2 21.28208393683489 4.58871609242119 28.05938774756145 0 0 0 +2564 3 -1.2 21.384425134647685 2.2698797655162792 31.857098487043228 0 0 0 +2574 3 -1.2 23.74921010118996 3.6226957158294915 32.94121205968159 0 0 0 +2702 3 -1.2 25.327412014200068 7.00246776498902 27.180306080974482 0 0 0 +955 2 0.6 14.754710576956217 0.9478008573993149 22.229267942557705 0 0 0 +2946 3 -1.2 24.94148985762147 1.2579999726679068 30.279966466292905 0 0 0 +2982 3 -1.2 20.20719030709946 3.41979052748516 30.01012792513597 0 0 0 +182 1 3 28.480945451720274 2.055099228754457 29.527967965352385 0 0 0 +300 1 3 29.304744265495835 1.1020830820658378 26.797502751501543 0 0 0 +940 2 0.6 20.017638687827915 13.520378571097948 32.046547464892704 0 0 0 +727 2 0.6 30.891090558556115 2.2206833844260827 32.24159219512899 0 0 0 +893 2 0.6 29.369809456637643 6.60515412632303 30.059886203309826 0 0 0 +894 2 0.6 27.243466276478795 5.236316760479707 31.141528400534014 0 0 0 +953 2 0.6 27.43401619456054 9.130211047009423 28.354114885223098 0 0 0 +996 2 0.6 31.635566342645394 7.493877832100393 26.403464849891385 0 0 0 +1043 2 0.6 28.57610844869786 5.503540495073878 27.890209055807407 0 0 0 +865 2 0.6 21.96687001972215 11.67627426969945 27.256760113470246 0 0 0 +1226 3 -1.2 30.046060083986678 4.360281361801379 26.623882341667365 0 0 0 +1360 3 -1.2 27.122147819392325 5.251094118008836 33.40434996869492 0 0 0 +1422 3 -1.2 26.867885726594732 6.576990137781546 29.227345413867063 0 0 0 +1424 3 -1.2 28.30565349361137 3.5130620803851067 29.530019679879913 0 0 0 +1591 3 -1.2 30.437206024375016 4.392629788777956 32.51874324780388 0 0 0 +800 2 0.6 21.40233903954552 11.103052724267107 30.704688871358005 0 0 0 +1826 3 -1.2 25.856726640846457 4.710269315503834 27.845001918859325 0 0 0 +2224 3 -1.2 28.912287795420607 1.5156277936828142 30.82530838865764 0 0 0 +2226 3 -1.2 25.624741949903637 3.5773631411569013 30.72507924047704 0 0 0 +2262 3 -1.2 27.08168248659151 1.301232011067699 29.250918008553842 0 0 0 +2300 3 -1.2 29.33178464836253 1.6692992687817172 28.23814923506021 0 0 0 +2644 3 -1.2 31.39626840598672 6.239529977762967 33.99665703631877 0 0 0 +636 2 0.6 24.09553429249469 9.809094643907395 29.91983934918673 0 0 0 +558 1 3 19.587517218211318 15.829883655091354 27.315718477897263 0 0 0 +27 1 3 3.486028120527345 15.574835437455759 28.238824375494314 0 0 0 +87 1 3 4.282925888094547 14.163999330066659 31.525575047687507 0 0 0 +94 1 3 31.731151836338945 9.449040835046747 29.88362836677257 -1 0 0 +117 1 3 31.329163889056776 15.061632380618184 32.42475145222316 -1 0 0 +128 1 3 34.19660839631388 7.913319021754574 28.966154198930756 -1 0 0 +286 1 3 33.05685556740721 15.323025984688933 27.49336211496187 -1 0 0 +386 1 3 1.374200258594284 10.376102061790874 28.68918328137386 0 0 0 +434 1 3 1.4634810159172922 13.93071216484566 27.109897314365323 0 0 0 +546 1 3 5.854044916808113 10.907159503816837 32.7586828180429 0 0 0 +654 2 0.6 6.164772273925916 13.065470312882857 29.819178414786396 0 0 0 +795 2 0.6 4.611174664375767 11.633584788612787 27.025472929136377 0 0 0 +824 2 0.6 6.336428399660301 16.455399531945126 29.54713034291567 0 0 0 +883 2 0.6 32.81568443252584 7.794650216081031 33.14088839229601 -1 0 0 +1020 2 0.6 4.381413076284131 10.609409626744853 29.895161636853857 0 0 0 +1022 2 0.6 2.60605822304082 16.09276941857029 33.3678962877646 0 0 0 +1049 2 0.6 2.3800599057295817 11.099053862888733 31.80896906936234 0 0 0 +1088 2 0.6 32.9669199408708 12.76341433604628 29.952119595038774 -1 0 0 +1140 2 0.6 1.305491951188798 13.854633023215431 32.3559395775974 0 0 0 +1478 3 -1.2 2.6423112340525807 16.545476229423823 27.353077972269244 0 0 0 +1812 3 -1.2 2.584165343506962 14.329778527178112 28.209175571435097 0 0 0 +1898 3 -1.2 3.9345534519006904 7.778802771441661 29.037604358427924 0 0 0 +1929 3 -1.2 3.0547339767524253 14.969875891494292 31.517479959330025 0 0 0 +1994 3 -1.2 2.7690436911224467 10.820063752998234 28.53939160120282 0 0 0 +2140 3 -1.2 33.11980337514176 8.648955092900028 29.878373242513284 -1 0 0 +2154 3 -1.2 0.5835015445702068 11.279952435236059 29.55829608239896 0 0 0 +2348 3 -1.2 0.7953020427773094 10.293220676527087 27.221784346347633 0 0 0 +2432 3 -1.2 32.49347378727712 14.135935676575064 28.129398000938647 -1 0 0 +2546 3 -1.2 4.1246065754025665 16.31822858776538 29.285684235364407 0 0 0 +2571 3 -1.2 1.0568935038098721 8.909684942485878 29.118588239074935 0 0 0 +2661 3 -1.2 5.202751152855206 10.001143710970563 31.801242640032086 0 0 0 +2695 3 -1.2 32.007339825801495 14.13814038289902 31.512939769005538 -1 0 0 +2729 3 -1.2 33.11145577357388 16.672674281797484 28.36255556999637 -1 0 0 +2880 3 -1.2 1.7019514423486402 9.859240950211689 33.73067059704844 0 0 0 +2901 3 -1.2 0.7660334978166092 12.595027170697339 26.8055561295295 0 0 0 +2992 3 -1.2 0.3239071985080663 14.902117300033957 27.551389716956944 0 0 0 +2994 3 -1.2 3.9854493236745236 12.8879599493198 30.822463148006932 0 0 0 +243 1 3 6.740729451049999 14.530497109886788 27.122058110898166 0 0 0 +246 1 3 14.569419365523485 13.3272659307442 30.44980191374401 0 0 0 +343 1 3 14.498596394180575 11.888790476485338 27.895482806883045 0 0 0 +394 1 3 9.946523002809553 10.484767142785392 28.096379892308065 0 0 0 +474 1 3 7.049399295960398 10.242257449204892 28.713531025652824 0 0 0 +497 1 3 10.346800309667305 16.11866998556751 28.201730751301955 0 0 0 +513 1 3 10.521740714817463 12.882229322023731 32.76865320060499 0 0 0 +539 1 3 11.195518134617208 8.81222717906596 30.190758000812277 0 0 0 +554 1 3 9.105762456554562 13.352359181373311 28.289353991026218 0 0 0 +640 2 0.6 6.984836457827197 8.57880438970503 31.603917296837352 0 0 0 +682 2 0.6 11.716949264985745 15.022458867337876 30.630238238600302 0 0 0 +709 2 0.6 7.749194355540071 13.748482176961259 31.745522682049316 0 0 0 +832 2 0.6 14.183226804733948 15.479087932439331 27.237360845953123 0 0 0 +1006 2 0.6 8.97204292358691 16.07850541628482 32.993502441931405 0 0 0 +1067 2 0.6 6.669096130701748 16.425541167341073 32.050289620096 0 0 0 +1076 2 0.6 12.326107582037885 13.877898163632352 27.86309570575462 0 0 0 +1133 2 0.6 12.815285139572733 10.259898072978293 32.44021690105916 0 0 0 +1149 2 0.6 13.937586811443504 8.682763366279605 28.486019075029077 0 0 0 +1213 3 -1.2 12.598641388406305 9.211868480264041 30.321036339177848 0 0 0 +1261 3 -1.2 11.062011334033576 11.968288248302025 31.741622058760925 0 0 0 +1294 3 -1.2 7.917648710988256 13.444967389860365 27.27848676078851 0 0 0 +1317 3 -1.2 14.065495516866212 13.284745377082556 31.93950075063557 0 0 0 +1529 3 -1.2 10.62226247296199 8.508004250440365 31.61416551150383 0 0 0 +1659 3 -1.2 13.045032934322538 16.51032953037179 31.65410489819142 0 0 0 +2675 3 -1.2 13.074917812249428 2.894524137840202 17.719392581640786 0 0 0 +1989 3 -1.2 14.874486419914021 9.397200505041186 32.994861630895876 0 0 0 +2072 3 -1.2 5.330882534282337 14.366961190341806 27.72141994730724 0 0 0 +2073 3 -1.2 6.3905004678751505 11.537252822510982 28.42366357269993 0 0 0 +2107 3 -1.2 7.4913174843395085 15.544242016349324 27.91959195491695 0 0 0 +2129 3 -1.2 6.925162395786599 8.556023159867566 25.636787626819675 0 0 0 +2182 3 -1.2 5.563079457359777 14.7640576074681 31.094778462736784 0 0 0 +2223 3 -1.2 11.821124573659153 16.332934368171053 28.154744124033073 0 0 0 +2259 3 -1.2 9.02306130335008 12.446359730375862 33.237052277372314 0 0 0 +2276 3 -1.2 8.402669100155492 10.140096705562819 27.908250230402746 0 0 0 +2377 3 -1.2 9.693083166610728 16.52217071731659 29.45981889415662 0 0 0 +2431 3 -1.2 14.200772157613295 12.181060509121771 29.46761608387795 0 0 0 +2526 3 -1.2 5.922579270578502 9.244314360388195 28.33308514673659 0 0 0 +2528 3 -1.2 10.295767487298034 14.274231764206933 32.22054669914134 0 0 0 +2537 3 -1.2 8.508656345573756 13.277862157471116 29.63101563698925 0 0 0 +2648 3 -1.2 13.596407660417306 10.81788191427567 27.485577518635232 0 0 0 +2764 3 -1.2 13.91335424496656 14.468838483926147 29.798055507684868 0 0 0 +2771 3 -1.2 5.986745500426602 12.329283692206467 32.354173701106674 0 0 0 +2829 3 -1.2 10.670222679653769 9.720285911672828 27.081400254380558 0 0 0 +2845 3 -1.2 10.1246285371423 14.53331148875963 28.158002980126675 0 0 0 +2859 3 -1.2 10.39159905280553 10.025768397789877 29.50367067871943 0 0 0 +2894 3 -1.2 8.619879037976768 7.554033977518538 32.561360829922194 0 0 0 +2939 3 -1.2 9.976193529782101 12.051202469178847 28.06223099592757 0 0 0 +2972 3 -1.2 7.491373402642222 10.1159674131798 30.114520072180422 0 0 0 +170 1 3 19.589352206616635 13.345319250297248 28.82429120171026 0 0 0 +288 1 3 17.210787967730454 12.069391099124658 30.968515524705023 0 0 0 +299 1 3 16.18661817858197 10.063765080311638 32.880712441986 0 0 0 +439 1 3 17.140272613953115 9.01585824059449 28.539757878174793 0 0 0 +504 1 3 17.127863990525434 17.033531072816423 28.623132826987156 0 0 0 +575 1 3 17.52003779468131 11.687476681479895 27.253690223399754 0 0 0 +1379 3 -1.2 16.089511034178642 12.026117934852872 27.90565122572332 0 0 0 +1393 3 -1.2 16.450931681456545 16.50728445015784 32.283522959375944 0 0 0 +1451 3 -1.2 18.028759109636702 16.92391148976442 29.95164580868725 0 0 0 +1474 3 -1.2 18.140327415456987 15.785015246119224 27.878423276004497 0 0 0 +1497 3 -1.2 18.812940560610198 16.775829483012455 32.340861340429164 0 0 0 +1629 3 -1.2 17.895828283005468 11.547773239537918 29.759929034676883 0 0 0 +1796 3 -1.2 18.50503468169807 14.693903106203054 33.44721611735006 0 0 0 +1892 3 -1.2 18.323256368155576 8.721101264587459 29.410873206352512 0 0 0 +1990 3 -1.2 16.134521325467947 13.210197613775229 30.575253073064992 0 0 0 +2007 3 -1.2 18.88360397566431 13.925840328178996 29.990109044665246 0 0 0 +2030 3 -1.2 16.164184694098513 11.08954997513237 31.66249601858508 0 0 0 +2105 3 -1.2 18.233970939365598 12.121392356179593 32.029393415312796 0 0 0 +2220 3 -1.2 17.686703267231334 10.164145167114235 27.514199084159 0 0 0 +2269 3 -1.2 15.946621454138354 9.636482667318745 29.18900610272903 0 0 0 +2374 3 -1.2 16.044575148729557 13.876866905574754 33.20642896338579 0 0 0 +2645 3 -1.2 18.595999383016075 12.811716142452076 27.694052033426985 0 0 0 +2760 3 -1.2 17.230289333863777 8.981149358685595 32.45585481552306 0 0 0 +2862 3 -1.2 15.79841690236342 16.420641790513233 28.60317784766403 0 0 0 +70 1 3 25.748360697089034 12.981423591598226 28.709501841243195 0 0 0 +420 1 3 24.7107601668958 15.732610765265699 29.312882907442713 0 0 0 +924 2 0.6 22.515518261857324 0.37773311194240944 31.37744164217953 0 0 0 +1059 2 0.6 31.070949277217007 0.041872127205349274 33.68346320891003 0 0 0 +2425 3 -1.2 9.788391818852872 10.535785182105354 34.14662927368698 0 0 -1 +2206 3 -1.2 4.1426304110843155 2.9365490692071754 33.44125722287365 0 0 -1 +2271 3 -1.2 4.6082034810848205 7.352050058316494 33.29020719323211 0 0 -1 +786 2 0.6 9.754876053624695 16.95960804786483 20.774190736540962 0 0 0 +494 1 3 21.28158589506092 0.522598007214199 28.012146285558384 0 0 0 +1275 3 -1.2 13.043383717292986 6.688794132487409 32.85092829116018 0 0 -1 +2424 3 -1.2 6.507598118512952 2.566825557125032 33.40844067455389 0 0 -1 +2068 3 -1.2 12.917928464647769 1.211147201278925 33.72082526433225 0 0 -1 +1665 3 -1.2 22.15356851019109 0.6351339004059141 22.044185958660723 0 0 0 +907 2 0.6 13.812717675052745 16.71745912479414 29.56451190566613 0 0 0 +1721 3 -1.2 16.75982437102793 2.654069625719049 33.10071046844172 0 0 -1 +1921 3 -1.2 16.539961044233415 6.827972085474075 33.434035227099635 0 0 -1 +566 1 3 24.018147685413286 4.632920504238966 34.018496993427604 0 0 -1 +1016 2 0.6 23.39251494587812 8.359296234171342 33.58923471064318 0 0 -1 +1259 3 -1.2 20.472220370428513 5.549430424216592 33.61428126470528 0 0 -1 +736 2 0.6 3.4334143828796293 0.19827876320573457 34.188865617819374 0 0 -1 +841 2 0.6 30.439223746127368 11.622634584734978 32.838784290614555 0 0 -1 +2633 3 -1.2 22.144171490026714 0.7933703577633646 24.541988243716425 0 0 0 +259 1 3 30.219635236739382 5.639244395761091 33.3237576698009 0 0 -1 +697 2 0.6 26.105823555193002 7.461617377710755 33.26912125276454 0 0 -1 +1146 2 0.6 14.165087164004522 0.1902977509145312 26.108437269849585 0 0 0 +622 2 0.6 9.829732467265734 0.8851331381856264 18.81486696343536 0 0 0 +1588 3 -1.2 3.1774140401048716 12.670862768203715 33.480371623226624 0 0 -1 +1775 3 -1.2 4.909993135744416 10.973401308536799 34.02546900129038 0 0 -1 +2144 3 -1.2 0.1626036246890109 15.415960868229599 33.34752865345025 0 0 -1 +1118 2 0.6 14.226339892100356 0.34740373488503706 29.967671761362933 0 0 0 +2482 3 -1.2 11.833506111109566 16.851709930014504 33.94894051294398 0 0 -1 +2657 3 -1.2 4.730147476564062 15.115258560374718 33.598321473476965 0 0 -1 +149 1 3 8.45248808868851 11.279172420872085 34.11624521947286 0 0 -1 +1078 2 0.6 12.424992313863989 5.07294165484066 34.15247358254637 0 0 -1 +490 1 3 14.572328529048901 13.733518779999725 33.37644227866917 0 0 -1 +239 1 3 33.72694904195132 16.688181409326535 33.383327533004724 -1 0 -1 +1859 3 -1.2 11.498933274519828 0.8335125400746392 24.897679400533594 0 0 0 +2176 3 -1.2 7.090189011380746 14.666720358504419 33.847272089472696 0 0 -1 +2750 3 -1.2 0.16994880145716149 9.456872698426984 18.202433702652563 0 0 0 +2543 3 -1.2 22.52651118140711 0.08921435491507544 19.61760476228494 0 0 0 +2060 3 -1.2 9.845304012604993 16.84379574638942 26.882122050433964 0 0 0 +292 1 3 17.714566139807957 15.83177774643547 33.05078218291427 0 0 -1 +729 2 0.6 18.15791980533503 12.568469864332643 34.18306839365437 0 0 -1 +123 1 3 24.97060155647633 16.38614966201065 32.18701131529122 0 0 -1 +744 2 0.6 21.838017037884914 16.13212067398983 33.345042240039625 0 0 -1 +840 2 0.6 25.197793810652293 13.93036790600229 33.88225993138086 0 0 -1 +886 2 0.6 24.823438595031362 11.034238483384486 32.61108232962029 0 0 -1 +2230 3 -1.2 21.09434057315934 7.995061521271341 32.986145494647175 0 0 -1 +1589 3 -1.2 0.9312238236597044 0.12159134857527422 32.40530221313234 0 0 0 +241 1 3 21.966167851445412 12.395299271085314 34.107120818460366 0 0 -1 +1337 3 -1.2 25.704399330075546 16.32536316173158 21.748382792738205 0 0 0 +2316 3 -1.2 2.9314398516516715 0.8882825544916345 27.868084074461294 0 0 0 +527 1 3 19.554872819122288 4.284525403320733 33.80879850311279 0 0 -1 +2266 3 -1.2 32.44818264138234 16.317771771145786 32.476181599659895 -1 0 -1 +2924 3 -1.2 6.494808810079515 16.753296617266283 19.815161086771877 0 0 0 +303 1 3 20.537471683721574 7.093261197448319 34.00878914198246 0 0 -1 +2828 3 -1.2 33.35253719959488 0.28237831782418626 25.839680673790944 -1 0 0 +1077 2 0.6 1.486664561373414 0.6983456969140216 17.852730964096516 0 0 0 +1816 3 -1.2 9.40620361923239 8.666224060137788 17.409310040845543 0 0 0 +2677 3 -1.2 0.40187115696642567 0.04311862412117693 19.945956901127243 0 0 0 +1333 3 -1.2 1.5355444158292673 0.10919525726776447 25.951937934455007 0 0 0 +1072 2 0.6 31.67355990153141 0.08742507847021834 17.426715540051664 0 0 0 +1845 3 -1.2 32.99218395896209 0.013237373675359196 21.838396263941146 -1 0 0 +427 1 3 2.3623749558355813 17.096591166090143 25.866581371746488 0 0 0 +1944 3 -1.2 0.17201718584182166 2.436549967684486 34.33733636577936 0 0 -1 +36 1 3 1.3498089937867224 18.726774117143034 3.3763786922540278 0 0 0 +114 1 3 2.233803137138909 21.362324501188407 4.333340435538291 0 0 0 +864 2 0.6 31.62038751553697 33.12879694031958 12.185458900829493 0 -1 0 +257 1 3 1.74951703380402 24.274434799947556 4.032104592265621 0 0 0 +380 1 3 0.3404094763117519 21.38903719521524 6.641079544501395 0 0 0 +430 1 3 3.9424813186991283 26.29873043768047 0.7052118789117154 0 0 0 +517 1 3 6.919187562656803 24.34157830136493 5.89920425745813 0 0 0 +547 1 3 34.06707619436282 22.538245397743708 1.2290676537686211 -1 0 0 +614 2 0.6 32.8591756279582 17.64354717695268 2.471575749239274 -1 0 0 +631 2 0.6 2.2715727324525625 17.306901549974203 7.306563274174705 0 0 0 +610 2 0.6 27.241077632667977 33.4925059681154 13.18849356435849 0 -1 0 +823 2 0.6 5.403697797605115 19.93551988666076 4.743252421676431 0 0 0 +852 2 0.6 32.416210657081976 23.750620951992854 4.827848366672209 -1 0 0 +107 1 3 12.455719702409489 17.194042743241194 16.902354895504672 0 0 0 +913 2 0.6 3.6875008421086646 23.498929297893874 6.331465192604442 0 0 0 +1254 3 -1.2 23.078163266547246 33.91572766573094 10.16050923353614 0 -1 0 +1068 2 0.6 3.5726806477168966 18.776730237252732 6.052206368976929 0 0 0 +1237 3 -1.2 5.705516375472605 23.80719433303504 5.278280379460973 0 0 0 +1316 3 -1.2 1.3505595085397446 25.056546691789375 2.700421494898955 0 0 0 +1413 3 -1.2 2.0078039807237036 20.263051821354903 3.2597014196315137 0 0 0 +1420 3 -1.2 1.29983285370107 22.338472204377815 7.229885406818122 0 0 0 +1431 3 -1.2 6.5450463029439305 25.23229420553078 7.089439211720117 0 0 0 +1491 3 -1.2 0.04782903797074484 25.930438823914134 0.6312955240624966 0 0 0 +193 1 3 29.235497501358793 32.509238179159595 15.784871898817737 0 -1 0 +1631 3 -1.2 33.25587895714078 21.77435915228642 6.597848836461803 -1 0 0 +1642 3 -1.2 33.151976978711645 25.74805915559653 6.3045479853761925 -1 0 0 +1743 3 -1.2 0.4063152662035253 23.939314364289583 4.540870526457979 0 0 0 +1747 3 -1.2 33.64473282642461 23.94615660392272 1.8142923959333639 -1 0 0 +1762 3 -1.2 34.2658805971693 18.768766315346088 3.8159725535218114 -1 0 0 +1991 3 -1.2 20.542050693765805 33.74825636681526 10.657487404960133 0 -1 0 +1818 3 -1.2 2.998505565464367 25.334332359922186 0.12198504433827988 0 0 0 +1996 3 -1.2 4.839866126995579 18.21709541850357 1.674975466221222 0 0 0 +2003 3 -1.2 2.7016761058764276 25.03548082831468 4.833946964698705 0 0 0 +2048 3 -1.2 2.217297716968873 18.143766979959967 4.4321132695300225 0 0 0 +2096 3 -1.2 33.54246906915524 26.290844259971127 2.886133811748532 -1 0 0 +2245 3 -1.2 5.716532408584004 17.969536199300865 5.698637164484103 0 0 0 +1476 3 -1.2 2.059587972561041 33.97496268812436 1.3380543772104463 0 -1 0 +565 1 3 7.362563204885096 20.627878920974034 16.821913017315307 0 0 0 +2396 3 -1.2 3.81185511781497 22.509650090411544 0.7309935371886873 0 0 0 +2413 3 -1.2 1.427343290275994 18.270766282116803 1.96507645279239 0 0 0 +2433 3 -1.2 0.924986607771829 21.239517819474678 5.155486805009471 0 0 0 +1503 3 -1.2 28.56184371692985 34.10104718884569 4.055054185498584 0 -1 0 +2570 3 -1.2 2.346282908224556 22.812007139043462 3.7591716707721834 0 0 0 +2578 3 -1.2 0.4755721958362519 19.949638937397573 7.231609483496666 0 0 0 +2817 3 -1.2 4.617328943649496 25.851898544761017 1.9257086258340947 0 0 0 +2912 3 -1.2 33.77730857492367 21.384723604665872 2.0735042988197954 -1 0 0 +2978 3 -1.2 1.3037714990353826 22.718852291592405 1.1093090616784016 0 0 0 +2984 3 -1.2 3.4378538715417895 21.010993796984067 5.077359871067423 0 0 0 +43 1 3 13.691138025703196 21.92197207559485 7.036953925396475 0 0 0 +44 1 3 10.866816275590093 21.25503684780917 7.722872385090752 0 0 0 +46 1 3 8.001959515146208 21.648200115860256 6.849304325250983 0 0 0 +97 1 3 7.052168215956742 25.86384531683402 8.48771391825406 0 0 0 +992 2 0.6 26.738039429544628 26.495312654608973 0.059064997432063227 0 0 0 +110 1 3 12.695172044698474 17.30398607787122 4.663795392961359 0 0 0 +1307 3 -1.2 15.497749276359864 34.108042807266706 14.635310406604102 0 -1 0 +195 1 3 7.298927438476653 21.760219061284424 3.257821510452901 0 0 0 +316 1 3 9.954092252060718 18.254914513146723 4.207897541584736 0 0 0 +347 1 3 7.904950160268187 18.912907947172567 7.9599509062182525 0 0 0 +385 1 3 8.322549054429324 24.665181606159038 3.3648443822073983 0 0 0 +442 1 3 10.908461718015356 23.774227451349617 4.469008963723328 0 0 0 +542 1 3 11.020085118587248 20.9310055933292 3.839647018927434 0 0 0 +440 1 3 21.374167105558794 34.26435371041075 14.536391794561142 0 -1 0 +2930 3 -1.2 20.315149271202277 33.795801572281995 7.023556036119862 0 -1 0 +2533 3 -1.2 18.138507771551737 27.79368500012216 17.01074908440512 0 0 0 +743 2 0.6 9.901710338457892 24.249662471293416 7.790521907983473 0 0 0 +831 2 0.6 12.342310373561471 19.089215907921037 1.5625665289072062 0 0 0 +1794 3 -1.2 12.306490345931811 17.211201028664995 15.455883320317444 0 0 0 +916 2 0.6 11.397655317816191 17.731185490321423 7.556210099702508 0 0 0 +920 2 0.6 6.638805086862401 17.668820165361634 3.8311161051759473 0 0 0 +1073 2 0.6 8.508374255320101 25.705185701138934 0.10909533381826893 0 0 0 +1087 2 0.6 10.621785467552394 22.249791728021492 0.6255807084354177 0 0 0 +1671 3 -1.2 20.98459801088306 32.76689264753724 15.210134323234177 0 -1 0 +1198 2 0.6 13.183128855564021 22.66947924136199 2.151811769125979 0 0 0 +1209 3 -1.2 13.951598573279888 25.438280068834906 5.113850421087373 0 0 0 +1223 3 -1.2 12.34172930010753 24.472625517014514 1.0374817754117616 0 0 0 +1247 3 -1.2 10.253979431025671 18.135507789373357 2.75598966543311 0 0 0 +1354 3 -1.2 13.69174951614245 17.8055553730454 5.633450972301872 0 0 0 +1358 3 -1.2 9.872382400603195 24.42546539292017 3.5016609856005094 0 0 0 +1382 3 -1.2 13.881173113634665 23.23061772293398 6.118129919204706 0 0 0 +1532 3 -1.2 7.249358871832327 18.427541792048213 1.85546604094325 0 0 0 +1403 3 -1.2 8.672988349247658 17.659398811305028 4.5714869632724096 0 0 0 +1590 3 -1.2 15.03735497383843 20.29730850409022 3.54007294492344 0 0 0 +1594 3 -1.2 8.920665122126918 17.921092325307438 7.523426512074867 0 0 0 +1798 3 -1.2 13.003442089674895 34.06547093066063 14.557935447236657 0 -1 0 +157 1 3 29.374587858905514 18.53178820939016 6.2701422889364995 0 0 0 +993 2 0.6 26.76557826306027 33.97433884247754 9.887178345239025 0 -1 0 +1673 3 -1.2 7.928707276981379 23.163828081516886 6.174986744304285 0 0 0 +1738 3 -1.2 14.359677758520299 20.733530850078292 1.1978330378389441 0 0 0 +1752 3 -1.2 10.933946166742041 24.193493899197872 5.855854945054058 0 0 0 +1755 3 -1.2 12.348210230196157 26.64258236954779 6.6736275645481 0 0 0 +1123 2 0.6 24.713785699923026 18.70729804026147 1.1345456884516447 0 0 0 +1890 3 -1.2 12.887367808752089 17.81654439545068 3.2667361448823122 0 0 0 +1902 3 -1.2 12.423925748642247 23.764677000096476 4.07023794770872 0 0 0 +706 2 0.6 3.715972719159568 34.03727581690156 8.213899809528122 0 -1 0 +1969 3 -1.2 9.982115452673511 26.349390999693576 7.356758997808628 0 0 0 +2054 3 -1.2 6.011129634053131 21.356318607404564 2.634547952100551 0 0 0 +2301 3 -1.2 7.812302642348424 25.037182881776424 4.775313301264765 0 0 0 +2310 3 -1.2 12.312850828732337 20.709132230644602 4.491851405491486 0 0 0 +2405 3 -1.2 9.577387014666757 21.407469132734498 6.778833720715627 0 0 0 +2466 3 -1.2 8.478987026664209 21.356941392176054 2.467814130285359 0 0 0 +2561 3 -1.2 11.184291182501843 26.489040406623698 0.6730618605062775 0 0 0 +2581 3 -1.2 11.291468508851148 21.1624820894513 2.4052922931673804 0 0 0 +2663 3 -1.2 7.324962371673984 21.299389086096877 4.686799229361912 0 0 0 +2668 3 -1.2 10.437462682048254 22.311860291054636 4.339859080117164 0 0 0 +2733 3 -1.2 11.208018249022421 17.89096954669512 5.048334911980358 0 0 0 +2810 3 -1.2 8.120069143411936 24.898337304537886 8.866862916345356 0 0 0 +309 1 3 21.990738774681496 33.07753864561532 10.646117748058105 0 -1 0 +2850 3 -1.2 15.081133083883236 26.264393919106436 2.738799003359535 0 0 0 +1565 3 -1.2 18.015842866229093 34.01851302965548 10.616698810184632 0 -1 0 +2983 3 -1.2 8.075521846066561 25.49647412946338 2.1902934627081447 0 0 0 +2986 3 -1.2 7.45460849348025 23.365288270440676 3.145789601410794 0 0 0 +2988 3 -1.2 10.008265458479059 19.848170031847204 4.308782815140457 0 0 0 +62 1 3 17.833624784928908 25.095215876747123 5.825637527279273 0 0 0 +143 1 3 18.022378797127924 21.307607041349645 2.9830630175172725 0 0 0 +230 1 3 15.433037270194859 20.00660481767552 2.177711831752602 0 0 0 +302 1 3 13.879332662613892 23.893958212824163 4.739940166645455 0 0 0 +2469 3 -1.2 5.251276085591793 34.17697535614374 3.151857946745702 0 -1 0 +387 1 3 18.061440773010567 18.86349134423653 7.712369217796451 0 0 0 +694 2 0.6 9.097733119690345 19.54738366303834 1.6391636713684075 0 0 0 +544 1 3 19.125176519623665 33.22554622468227 11.139352148413899 0 -1 0 +617 2 0.6 19.34986399468545 24.19584618597004 2.987925616959452 0 0 0 +1968 3 -1.2 27.845257820246577 20.903609633374735 0.31264488388649525 0 0 0 +816 2 0.6 17.06481917963246 21.945747787986296 6.483319462284232 0 0 0 +1675 3 -1.2 14.193843826014751 34.19536482078976 11.30066983169121 0 -1 0 +1121 2 0.6 15.518622412733894 19.277297461019078 5.574201242299989 0 0 0 +1031 2 0.6 10.560292695387089 34.15026879090013 13.56219260850728 0 -1 0 +1204 3 -1.2 16.470642873784904 17.76899664945133 4.043395466666307 0 0 0 +1340 3 -1.2 14.836317247563153 23.439967330511827 3.7445674391665875 0 0 0 +1460 3 -1.2 18.66411679629485 26.4769002790938 6.0959404085241315 0 0 0 +1472 3 -1.2 16.449421458401787 25.178075206992727 6.29377797157165 0 0 0 +1597 3 -1.2 15.58550146424288 18.66686952846369 1.5668283786566934 0 0 0 +1607 3 -1.2 17.556672183517197 26.28384902907316 1.897857722341517 0 0 0 +1736 3 -1.2 17.717569914166138 25.328752933471748 4.228204598366689 0 0 0 +1839 3 -1.2 17.59226704447353 21.822917596841748 4.275249553893029 0 0 0 +2067 3 -1.2 14.668607436489319 27.31735554252132 7.118958016263398 0 0 0 +933 2 0.6 3.0151972703832164 17.50278272798995 0.7496927499460581 0 0 0 +2241 3 -1.2 16.86439290767682 20.718840388405543 2.0442281842020416 0 0 0 +2314 3 -1.2 16.99708343184236 18.081683015499706 7.068728754744933 0 0 0 +129 1 3 2.4881089767987765 22.298568246511877 0.14071110297426617 0 0 0 +2720 3 -1.2 14.792125878842635 21.040186392392453 6.717413926275205 0 0 0 +2744 3 -1.2 18.628041801246354 23.976513945002438 6.296026989868159 0 0 0 +2831 3 -1.2 18.708603728295582 22.32880088268952 2.1446340237277393 0 0 0 +2837 3 -1.2 18.806269862475986 18.79066246277609 5.147585019760858 0 0 0 +576 1 3 10.283279242372226 34.23581279771061 5.7154026664664475 0 -1 0 +9 1 3 22.38332174944044 20.329884191416753 5.960101614966748 0 0 0 +67 1 3 21.17220571639666 25.915362239700595 1.1677286084464493 0 0 0 +75 1 3 26.120124388065665 25.009223066315556 3.660251738779113 0 0 0 +220 1 3 20.965884564132985 18.09382819486888 7.221453670524445 0 0 0 +258 1 3 21.600265245729183 23.19575841324573 5.596482407267206 0 0 0 +423 1 3 25.202735586100964 20.210617577131195 6.980461348673109 0 0 0 +431 1 3 21.31525774014175 19.34618652779484 1.8871185023114319 0 0 0 +526 1 3 19.88213523371541 19.28204495333436 4.3075473526356 0 0 0 +572 1 3 26.161937853837482 22.81378455005801 5.823738430229779 0 0 0 +668 2 0.6 23.9106335270542 21.340481140995323 3.3195643862380533 0 0 0 +813 2 0.6 21.930171516418042 23.01373617662229 2.4121790706477113 0 0 0 +1029 2 0.6 26.33411481846835 23.762062854631946 0.1407754687942112 0 0 0 +1108 2 0.6 26.23181228396212 21.920553421668004 1.7015800841219997 0 0 0 +912 2 0.6 11.649017084476913 33.7880068549494 16.447666116244324 0 -1 0 +1189 2 0.6 20.086641655725735 22.692098636780305 0.2778866443462816 0 0 0 +1222 3 -1.2 25.618916893172756 21.343459089124025 5.777840229210922 0 0 0 +1359 3 -1.2 20.475665550387923 19.871463980264195 0.5653437663207472 0 0 0 +646 2 0.6 6.147434250706071 33.37697942328319 13.031675874305225 0 -1 0 +1508 3 -1.2 20.782552653841087 18.651880123651367 3.119505544499079 0 0 0 +1566 3 -1.2 25.22450078423019 23.60663465130012 6.811457168025918 0 0 0 +1650 3 -1.2 23.701519419381036 20.63723447495143 6.992153251676929 0 0 0 +1679 3 -1.2 25.19491435859274 18.744064767898166 7.02073049067916 0 0 0 +1779 3 -1.2 20.130302660515344 24.91521934100389 0.8811574909082687 0 0 0 +1811 3 -1.2 23.122285333584085 19.46876169328366 5.005373146773697 0 0 0 +1814 3 -1.2 21.130656978042826 22.91229246041266 7.104055490802355 0 0 0 +1836 3 -1.2 20.785001081501722 23.390397258944407 4.388594518275993 0 0 0 +1852 3 -1.2 22.15719222463666 18.78717752731258 0.709482849606982 0 0 0 +1458 3 -1.2 19.462977822848433 31.882442573480525 0.3160132283536436 0 0 0 +2221 3 -1.2 26.31908093706623 18.1190937073623 4.448507501942142 0 0 0 +2347 3 -1.2 24.637982196851173 25.67810057495353 3.912761386449262 0 0 0 +847 2 0.6 17.122217565445688 23.74136580403516 1.1509654244939103 0 0 0 +2492 3 -1.2 22.464669052901897 21.88959556651625 5.4261043704273115 0 0 0 +2521 3 -1.2 20.77063355527904 20.28270795851312 5.068033772411946 0 0 0 +244 1 3 14.193007818227054 33.194940357726225 14.434666045063278 0 -1 0 +2650 3 -1.2 25.418141505230984 20.188007817752847 2.4553644395404732 0 0 0 +2683 3 -1.2 22.465078586306507 24.38155254552417 5.831021453567009 0 0 0 +2785 3 -1.2 1.765639731769691 33.56450072488384 14.183360877496689 0 -1 0 +2902 3 -1.2 21.86781739188567 20.6386158443169 2.3584139482446598 0 0 0 +2948 3 -1.2 22.496443301432567 25.324685063364626 1.3509018477549644 0 0 0 +2952 3 -1.2 19.053082034416114 20.1332853021764 3.1715590643504736 0 0 0 +83 1 3 27.6223365178546 18.250885501234617 3.8223017561292343 0 0 0 +177 1 3 29.190714822628447 25.862939471939665 3.3455504049727915 0 0 0 +2669 3 -1.2 33.249535449116046 32.8228332291927 14.685853917756216 -1 -1 0 +518 1 3 28.824140401585897 26.523550917283735 6.260929931006794 0 0 0 +685 2 0.6 29.58826117864143 23.062334303788877 2.3080961330491125 0 0 0 +714 2 0.6 31.99138970284488 20.777538996697174 5.048617725574444 0 0 0 +914 2 0.6 30.055249795404283 22.02317719056327 6.903865386115479 0 0 0 +1062 2 0.6 31.555800568145543 24.662041251397554 1.0237718157924345 0 0 0 +1091 2 0.6 28.742217956124147 21.61019748381839 4.446130279012953 0 0 0 +1178 2 0.6 30.555485338245667 20.181668783179195 3.186886147213997 0 0 0 +1242 3 -1.2 28.285520258300192 24.647646814531573 3.4330503033320445 0 0 0 +1279 3 -1.2 27.57664363652918 22.722664248519592 6.211244450641499 0 0 0 +1371 3 -1.2 29.83784453782084 19.807759205795037 5.6420781388339725 0 0 0 +1386 3 -1.2 31.947046087491387 24.866118153823702 8.270160335947539 0 0 0 +882 2 0.6 0.2215445801188871 19.47128982556612 0.5115701740519237 0 0 0 +1577 3 -1.2 30.35614971816901 18.130935634324093 1.910896888665999 0 0 0 +1795 3 -1.2 33.14232831502098 18.358121227572568 8.27456488191261 -1 0 0 +1734 3 -1.2 30.443525142970167 25.35167651362615 2.691091093394921 0 0 0 +1769 3 -1.2 28.13177089688301 17.288252782690297 2.63315210704639 0 0 0 +1926 3 -1.2 27.73273955404223 25.601925752459923 6.641966183464423 0 0 0 +1939 3 -1.2 30.43550513835004 17.56575549225396 6.61073256002416 0 0 0 +997 2 0.6 2.4813845030503052 33.02990132314969 9.37459048083841 0 -1 0 +2013 3 -1.2 28.450045993561776 18.85282391800747 7.496108661675112 0 0 0 +2028 3 -1.2 28.18576595127203 19.523478119768466 3.2842931545511282 0 0 0 +977 2 0.6 33.33010857126889 32.659864809836236 9.901161265815896 -1 -1 0 +2349 3 -1.2 26.10003424387711 24.7946028560895 2.1744536431393433 0 0 0 +2384 3 -1.2 28.452825954940145 18.36795776213157 0.3420842909240838 0 0 0 +2577 3 -1.2 26.006495693004485 23.59019048288949 4.4481961714671625 0 0 0 +2778 3 -1.2 28.5933989819049 17.844202984343788 5.042183192990173 0 0 0 +802 2 0.6 16.19023898144717 33.870083670042625 1.53980113187565 0 0 0 +2851 3 -1.2 26.2439942760059 20.707926023058963 7.924108343978106 0 0 0 +2893 3 -1.2 30.797673285476833 22.26119448806553 3.873539389798047 0 0 0 +37 1 3 2.4576416935600154 28.587329885549842 2.016881419657734 0 0 0 +96 1 3 0.08515725309801837 30.122638895331153 5.918197395601023 0 0 0 +207 1 3 2.9794177038813383 27.837886163492854 4.817801054308589 0 0 0 +254 1 3 33.38530778015186 28.660203093574722 8.366342073267226 -1 0 0 +402 1 3 2.9984936954221952 30.235950874032152 6.559839975540426 0 0 0 +472 1 3 34.30439481630605 25.39346173705183 2.0191595545840393 -1 0 0 +237 1 3 29.942516741875878 33.555431370676416 3.424573211612429 0 -1 0 +877 2 0.6 22.288767332774885 32.79769196997069 6.921041567299759 0 -1 0 +742 2 0.6 34.03490711015991 27.15710222791175 4.866098440981697 -1 0 0 +812 2 0.6 34.25893583088749 30.69586025003616 0.7991922628053829 -1 0 0 +1908 3 -1.2 23.781291800607864 22.597833454992617 1.164443444597765 0 0 0 +1152 2 0.6 1.0679977704900003 32.96794487688402 5.32694311818364 0 0 0 +1158 2 0.6 33.85805413061329 33.04131606049532 7.281797127489103 -1 0 0 +1183 2 0.6 33.74976910414303 31.346552305984783 3.111993225070038 -1 0 0 +1249 3 -1.2 4.500806001538905 27.560223443247413 4.608221926936781 0 0 0 +1278 3 -1.2 3.148066237517142 27.64831170661339 0.9166678410154129 0 0 0 +1504 3 -1.2 3.478934736220459 29.649653618877455 2.1700661376762764 0 0 0 +1559 3 -1.2 0.24390455148938897 29.541015164664362 4.557794506233271 0 0 0 +1369 3 -1.2 0.9377329112605206 18.737402020759422 17.08342984733646 0 0 0 +1691 3 -1.2 4.499208640977038 27.446478222865434 7.288536595644709 0 0 0 +673 2 0.6 5.426564074202171 30.88657127096908 1.9233601389312187 0 0 0 +1774 3 -1.2 3.8459563885597228 32.4918689347626 2.116429799564209 0 0 0 +1851 3 -1.2 1.9544277965015053 27.493604558350384 5.797794454163079 0 0 0 +1863 3 -1.2 3.1544272708318815 29.406512330295527 5.231007446408406 0 0 0 +1909 3 -1.2 4.022199688240552 31.400042386921395 6.574831242054772 0 0 0 +2971 3 -1.2 16.197632558919096 17.22041470067238 13.362850462907044 0 0 0 +2138 3 -1.2 2.403449412473143 27.7807081467153 3.3509672632678424 0 0 0 +2227 3 -1.2 33.57435718323204 31.329188832079502 5.812133972909283 -1 0 0 +2386 3 -1.2 1.5040358463499388 30.64614622973543 6.387882670735897 0 0 0 +2426 3 -1.2 1.155150800001662 28.90067677493561 1.4099895153761026 0 0 0 +2478 3 -1.2 5.684161044006066 29.46659391983706 5.772547252221167 0 0 0 +2553 3 -1.2 1.395504999117023 31.721092228243954 2.036277888449941 0 0 0 +2575 3 -1.2 5.111558442978478 31.98284369016774 4.407450078791144 0 0 0 +2640 3 -1.2 33.80872071000319 29.035947136012435 6.848896993807441 -1 0 0 +2690 3 -1.2 3.127704569936319 29.343660865519592 7.788517506986566 0 0 0 +2945 3 -1.2 1.6583682974904563 33.80192867497639 7.266798962474733 0 0 0 +13 1 3 11.096066005349735 27.30104072799263 7.417954646565474 0 0 0 +40 1 3 10.34839537211873 31.91824800139006 1.4787749754511426 0 0 0 +51 1 3 5.3991855599090135 32.057224676304976 6.014702056956468 0 0 0 +710 2 0.6 24.528166312898446 33.98329777324883 8.454513230845384 0 -1 0 +77 1 3 10.138372913071047 28.544619403514442 3.5120972996754722 0 0 0 +146 1 3 13.74633715328595 26.697704769520463 6.05249846801285 0 0 0 +185 1 3 14.272837705707722 27.358063468336113 3.3279615357054446 0 0 0 +227 1 3 8.034790508276084 31.593192071639475 8.855246253985161 0 0 0 +271 1 3 7.336630061014237 28.717112949149687 2.3032079703841837 0 0 0 +308 1 3 9.617290031101355 31.511560845681146 4.407670731512138 0 0 0 +390 1 3 12.046597380941325 27.480551104693415 1.5221259540776473 0 0 0 +397 1 3 5.861124486458819 28.32484635469699 4.834265020215776 0 0 0 +350 1 3 22.434732198652753 33.57011693885315 2.233547079891972 0 -1 0 +495 1 3 12.14840376797835 30.47542371195241 5.516239198214351 0 0 0 +506 1 3 14.02541897825082 32.21508986921673 3.9046840349692684 0 0 0 +822 2 0.6 7.389448070232741 31.7318323620767 0.32006310955271267 0 0 0 +876 2 0.6 6.576330928737912 29.08421630684139 7.747822803288795 0 0 0 +908 2 0.6 8.6076052381846 28.18184580016514 6.498414038981655 0 0 0 +1224 3 -1.2 8.752226047863912 28.207027479570808 2.5879058249691353 0 0 0 +1227 3 -1.2 14.54444145279013 28.725579814318255 2.6537480007775818 0 0 0 +1230 3 -1.2 10.688869065449706 31.15631257817214 5.567719808959551 0 0 0 +1235 3 -1.2 6.674767422383458 31.773197796148963 6.742673419842675 0 0 0 +1368 3 -1.2 13.930143677020133 27.639346528281006 4.829069724768938 0 0 0 +166 1 3 26.896936088961233 33.900470411140724 0.04773133843296157 0 -1 0 +1510 3 -1.2 6.228268207180499 28.827730079046326 3.3756817095527802 0 0 0 +1545 3 -1.2 6.722343864240926 27.833383839122973 1.1383419693705445 0 0 0 +1621 3 -1.2 7.057545719021941 27.549474906119464 5.147745390878802 0 0 0 +2621 3 -1.2 18.754553405097447 34.17162698043043 5.224174256438757 0 -1 0 +2438 3 -1.2 15.139964829461878 33.121521528538075 4.291483721017419 0 -1 0 +1709 3 -1.2 8.16074452913676 31.696998960189752 4.315664519575879 0 0 0 +2046 3 -1.2 21.012071662348276 17.794698160918387 5.765116023953728 0 0 0 +1809 3 -1.2 7.3934655622185605 30.020543100952334 1.6396568892928691 0 0 0 +1881 3 -1.2 10.371417294197162 31.390295476641718 2.9423940955376855 0 0 0 +1609 3 -1.2 17.922478683076843 33.497779263221815 7.525537783473412 0 -1 0 +1885 3 -1.2 13.002985352827675 31.763114896036093 5.034827202436288 0 0 0 +1501 3 -1.2 18.442789231836795 33.38797305446711 1.9889740833631167 0 -1 0 +2082 3 -1.2 11.629673050142209 32.06418469963643 0.7244430570380471 0 0 0 +2092 3 -1.2 9.709987773330637 33.35066462129923 1.639808071020712 0 0 0 +2198 3 -1.2 10.417152566153117 27.281839934093426 4.207878666248615 0 0 0 +2261 3 -1.2 12.803435895614433 26.9591910248607 2.774751489964722 0 0 0 +2290 3 -1.2 12.849140801465776 29.923932395088936 6.678727824317214 0 0 0 +2372 3 -1.2 15.121942129338791 30.98308932531081 1.0474013373064015 0 0 0 +2602 3 -1.2 11.926939503922505 29.53944438208216 4.349618528042914 0 0 0 +2681 3 -1.2 11.068254289462462 28.525855445818053 2.1445898654527387 0 0 0 +2682 3 -1.2 9.411680034271672 29.655576359162605 4.253004615827798 0 0 0 +1214 3 -1.2 15.474710147277756 33.1980461150073 7.262183524815294 0 -1 0 +2853 3 -1.2 10.689288792374647 28.620722658073838 6.93300373330027 0 0 0 +2857 3 -1.2 6.855838895938178 32.91568561608463 2.0770970590598923 0 0 0 +353 1 3 19.63568880012566 33.233983416948675 1.1460565437370587 0 -1 0 +219 1 3 15.579858079756038 29.93892236817613 2.2631646590619496 0 0 0 +231 1 3 19.96720331246162 28.079180628726707 2.8003704867552006 0 0 0 +267 1 3 18.613454612854902 27.83741670710806 6.8393479759594475 0 0 0 +301 1 3 20.61274073586692 29.332046506361273 5.4199223159730865 0 0 0 +319 1 3 15.660796690407995 28.513280054498054 7.415450296095331 0 0 0 +417 1 3 16.840627423427506 32.346759429879825 7.28901814825822 0 0 0 +556 1 3 17.398839522605446 26.60312686149947 3.3369493251638596 0 0 0 +665 2 0.6 17.12871762291724 29.94353794530891 4.919654021268482 0 0 0 +708 2 0.6 18.10178703885918 30.262884066998932 1.0658127637269503 0 0 0 +1372 3 -1.2 13.222896196058139 32.99280100628113 2.915557088191149 0 -1 0 +2436 3 -1.2 32.9294118845545 32.34079558247237 17.116785910118843 -1 0 0 +363 1 3 6.80082526643073 34.252553946579354 2.734555907483354 0 -1 0 +859 2 0.6 17.4365040626301 32.59731356554975 3.9072572397049874 0 0 0 +57 1 3 16.792572480209998 27.15297165465314 16.876971455634312 0 0 0 +1315 3 -1.2 14.556630277491584 30.8790645546838 3.4057470966920156 0 0 0 +1321 3 -1.2 17.304867112329333 31.8192040562699 5.991761576731573 0 0 0 +1399 3 -1.2 18.72156179705532 27.530235961563413 3.550068158091458 0 0 0 +407 1 3 4.299844359349198 33.01496010506185 3.5341187649595436 0 -1 0 +1493 3 -1.2 16.45876584441525 27.47821167657932 4.1227028570669315 0 0 0 +1803 3 -1.2 16.843456264378652 30.46184577767362 2.9088506351888586 0 0 0 +2134 3 -1.2 16.30931958029147 29.022210012002574 1.1938664281520015 0 0 0 +2355 3 -1.2 19.108034761631078 28.984539114937444 5.933651183858886 0 0 0 +2461 3 -1.2 15.629398634308448 29.537598590374227 6.392779962869467 0 0 0 +92 1 3 24.13784808547917 27.08526980358906 4.410611727628751 0 0 0 +181 1 3 25.779143863613783 29.023224424057123 2.7854845544859503 0 0 0 +283 1 3 26.62501411974542 32.274755373278 6.389575501367854 0 0 0 +783 2 0.6 9.8673370552313 28.84555221514449 0.20178423382755373 0 0 1 +663 2 0.6 23.89927111972361 30.54737378274873 5.049123571233144 0 0 0 +680 2 0.6 20.6254668589534 32.710325641711215 4.798780619007041 0 0 0 +932 2 0.6 26.64406723431371 31.80263214006293 2.8939543480696543 0 0 0 +952 2 0.6 23.603889660593396 27.21611435370656 8.086848022430345 0 0 0 +2849 3 -1.2 5.159822152484734 33.53564690224564 6.079804742381208 0 -1 0 +1009 2 0.6 22.048274601421863 26.35620002957 6.9009271765548545 0 0 0 +1046 2 0.6 24.49214369482718 26.16488165472564 1.2623057103889574 0 0 0 +1142 2 0.6 26.162616105762876 28.109345062523204 7.234674836381518 0 0 0 +1212 3 -1.2 20.52200469081284 29.09706188182625 3.8345954170144787 0 0 0 +1485 3 -1.2 24.137650269382483 27.12525569397124 5.8865296585578974 0 0 0 +1526 3 -1.2 19.575980495187487 28.754615766290268 1.5557409608099813 0 0 0 +1610 3 -1.2 22.947056602399616 27.402904353535853 3.5846117937869604 0 0 0 +59 1 3 10.604185035500848 33.084828664900286 8.41743713198535 0 -1 0 +1699 3 -1.2 19.80521489037572 30.526485851608825 8.334530546403885 0 0 0 +2870 3 -1.2 20.96308037144482 33.03687174872061 1.984047524444236 0 -1 0 +2243 3 -1.2 2.976368458997996 33.12527947189332 4.186928785092021 0 -1 0 +2141 3 -1.2 21.20080806765662 30.66522199563813 5.606860466078896 0 0 0 +2565 3 -1.2 10.79689452380848 34.216319919809045 9.313436298901943 0 -1 0 +611 2 0.6 26.324244668581745 30.42168540101249 0.1978005507837586 0 0 0 +2563 3 -1.2 21.273436496140675 28.1637291090727 6.012053781089484 0 0 0 +2741 3 -1.2 23.47496153396965 32.90014793204543 1.1926079374169452 0 0 0 +2772 3 -1.2 25.983458232279467 32.03143024667309 5.071218641185134 0 0 0 +2882 3 -1.2 25.0259254678235 28.3797642741743 4.007267459427122 0 0 0 +2943 3 -1.2 20.664173453234877 26.752262919198238 2.3947585247161594 0 0 0 +189 1 3 29.232637154099017 31.177694460446425 7.403491901156483 0 0 0 +205 1 3 30.098444009829887 31.78949319821279 1.036742183551995 0 0 0 +766 2 0.6 28.13327269572489 28.480197015963277 0.7885278415236259 0 0 0 +828 2 0.6 31.620089012607338 30.948886591807646 4.9788575960129675 0 0 0 +853 2 0.6 29.17285380826269 29.34971485428244 3.7990754031485756 0 0 0 +483 1 3 6.1323738129901 18.163890855228363 0.9484457369054923 0 0 0 +1287 3 -1.2 30.177363608294197 32.32666597501825 4.19839621691354 0 0 0 +1270 3 -1.2 33.52244855060315 33.56639363177557 3.2504006253462125 -1 -1 0 +1658 3 -1.2 25.90544548313775 28.01340424107205 1.6828531671571514 0 0 0 +1689 3 -1.2 27.800846247575752 31.26591117844008 6.691313574600017 0 0 0 +1728 3 -1.2 30.041375441573578 25.989030646523375 7.164993647292175 0 0 0 +1805 3 -1.2 26.954933633651283 32.60403293232569 0.7178366224487485 0 0 0 +1911 3 -1.2 31.49826871507294 31.421628562111458 1.4203211716488002 0 0 0 +1936 3 -1.2 29.211353064509897 30.61159510968332 1.1977109725070743 0 0 0 +1961 3 -1.2 29.462286784021785 26.390473343632102 4.826300526998384 0 0 0 +2122 3 -1.2 29.668662455329173 33.049594057519336 1.9622619522494296 0 0 0 +2139 3 -1.2 26.765062510874813 26.23368181747588 4.240384076589654 0 0 0 +2186 3 -1.2 28.81120361490502 27.069463887621314 2.544063280636243 0 0 0 +2258 3 -1.2 29.39702949602895 32.75595265032692 7.621059105496488 0 0 0 +2434 3 -1.2 30.214582891160457 30.55870590341734 6.537112088972969 0 0 0 +1192 2 0.6 17.987853466836242 18.803882450717335 0.9615701316029672 0 0 0 +2781 3 -1.2 25.00850488208048 30.199249705407727 2.2487446993197557 0 0 0 +2860 3 -1.2 28.49129602744802 27.92032384498955 6.60367841369948 0 0 0 +2969 3 -1.2 27.082050023026838 29.5585228837867 3.2766662817913317 0 0 0 +150 1 3 2.0186654171512304 24.41521727975935 15.170727754583455 0 0 0 +153 1 3 4.038163023009941 23.24299741096793 11.570292011261287 0 0 0 +226 1 3 34.19359412438972 25.781450756126194 16.69634925097033 -1 0 0 +400 1 3 5.204158362478479 21.42255588593193 14.89864715133319 0 0 0 +413 1 3 1.225473887821399 22.993567044925264 12.700723636502442 0 0 0 +415 1 3 33.22588336980432 25.69802928042882 7.775819897175921 -1 0 0 +530 1 3 4.032483006952495 20.986223611893795 8.664346493013445 0 0 0 +540 1 3 0.01814959894524307 19.158642709152886 8.578374986717986 0 0 0 +574 1 3 5.574579541384823 20.672088903428122 11.216942244157135 0 0 0 +581 1 3 6.052625967572951 24.03121977084802 13.71697633243751 0 0 0 +675 2 0.6 3.056317089142878 19.761431069522654 12.87415540178645 0 0 0 +797 2 0.6 3.4948351052412345 17.773387243122457 10.257890222118066 0 0 0 +837 2 0.6 4.665541379781225 25.866000455205686 16.040311776463582 0 0 0 +839 2 0.6 1.540993466764139 25.661872222682348 10.029245571190316 0 0 0 +848 2 0.6 32.36361259778244 26.379633144022343 12.16357147531322 -1 0 0 +926 2 0.6 0.8328146595783317 22.464484986149404 9.544064384791307 0 0 0 +981 2 0.6 0.7743249555771244 20.389629143122033 14.99084633486614 0 0 0 +1002 2 0.6 3.897240995381803 18.56445349068994 15.450855865827556 0 0 0 +1038 2 0.6 33.61560871618256 19.55763986931213 11.742241111534364 -1 0 0 +1047 2 0.6 33.39876513344457 18.623115363419394 15.810538552467392 -1 0 0 +1186 2 0.6 3.8871024736325284 25.001141762125634 8.390416977718484 0 0 0 +1211 3 -1.2 2.383570221808476 23.333161804860094 16.083266328049188 0 0 0 +1300 3 -1.2 2.1472735621235657 17.967555085223704 14.166091960980456 0 0 0 +1325 3 -1.2 0.24579617843664417 23.28219867721964 11.652355548431336 0 0 0 +2822 3 -1.2 20.198712622669863 17.434073563125708 10.60620653784113 0 0 0 +1512 3 -1.2 2.67114409211708 23.526146950244364 12.264588507210414 0 0 0 +1568 3 -1.2 3.84505254458674 19.69562919566003 7.938914185391893 0 0 0 +1571 3 -1.2 1.1681690911595783 25.479686262594083 15.964909656143538 0 0 0 +1655 3 -1.2 4.458765035392586 21.781037972975206 11.772346696879739 0 0 0 +2202 3 -1.2 11.007452055681556 33.48351728360234 6.953996598397097 0 -1 0 +1862 3 -1.2 1.06084919837497 23.855116254411445 14.03734716318042 0 0 0 +1941 3 -1.2 1.3131017871056614 21.57316992008834 13.061954442222905 0 0 0 +2052 3 -1.2 5.263432500276588 20.795354882085256 9.657553331053622 0 0 0 +2083 3 -1.2 0.10086130234398252 25.192143001350487 8.41158795909712 0 0 0 +2136 3 -1.2 33.3896823141791 24.55807209160174 16.68578428149882 -1 0 0 +2218 3 -1.2 1.2885636697079965 18.38663086122997 11.924535079498014 0 0 0 +2710 3 -1.2 29.71568037852819 33.619923621266096 16.664359324656882 0 -1 0 +2527 3 -1.2 3.807362892433879 20.963760146747298 14.815941097041943 0 0 0 +2532 3 -1.2 5.87236016582431 21.137294718566416 16.287603097789102 0 0 0 +2535 3 -1.2 2.8656802496173936 21.247660983556468 9.56761307901548 0 0 0 +2576 3 -1.2 1.1262827078256161 18.23789774413873 8.935275095386249 0 0 0 +2601 3 -1.2 34.06198187225639 20.29509660076477 9.503698448984785 -1 0 0 +2647 3 -1.2 33.058745908583624 20.73992822576984 16.131547454593196 -1 0 0 +2792 3 -1.2 5.2002516192866635 23.03016551772582 14.61164264792913 0 0 0 +2886 3 -1.2 4.932833841971598 19.394688466572447 11.56083126670176 0 0 0 +2913 3 -1.2 31.897416739036625 17.959760409580017 11.320429065470696 -1 0 0 +2941 3 -1.2 34.09478686405407 18.14148483549178 13.808107534537815 -1 0 0 +2996 3 -1.2 3.1669078230397454 25.13587278112606 14.580655170925898 0 0 0 +15 1 3 13.560585390717792 24.84256907861524 14.720580873113915 0 0 0 +156 1 3 12.610763656472772 21.939075466436627 15.141013039588497 0 0 0 +268 1 3 14.530605203548873 21.08674571671296 13.069822923019595 0 0 0 +317 1 3 13.009138079498664 20.011381883958364 10.651662946161366 0 0 0 +364 1 3 11.386150280640155 24.796156863093234 12.590102489879268 0 0 0 +424 1 3 14.622417474311492 23.525608009141465 9.382041754167401 0 0 0 +479 1 3 9.905961441856949 19.414806627742294 14.22363763843653 0 0 0 +510 1 3 13.844483391905317 17.604221301726046 12.040826245089724 0 0 0 +691 2 0.6 9.374487955200012 20.772836383127125 10.945835351280168 0 0 0 +740 2 0.6 11.73099177825919 23.41513419594144 10.212344891416462 0 0 0 +767 2 0.6 14.147502245147143 25.45417222805562 11.378843718757569 0 0 0 +785 2 0.6 9.556030910907934 18.582813372645486 10.65505908648185 0 0 0 +801 2 0.6 10.606277608334317 24.39169316420927 16.222460406885986 0 0 0 +889 2 0.6 6.935802879312055 23.662670531723233 10.483347855507015 0 0 0 +922 2 0.6 8.818877051080392 22.929029633053535 9.943581387090402 0 0 0 +978 2 0.6 9.566280688814382 26.06903722718661 10.190583469074756 0 0 0 +1019 2 0.6 9.207781744538137 22.71290135910659 14.559233598465976 0 0 0 +1086 2 0.6 9.041621671333504 22.338936129560764 12.516222497744804 0 0 0 +1268 3 -1.2 4.412293011145404 22.099915142205653 7.751275338012647 0 0 0 +1277 3 -1.2 6.033089841057571 20.897383137392985 13.812812244951214 0 0 0 +1296 3 -1.2 13.393994694560684 21.22842539800248 16.200333231768887 0 0 0 +1327 3 -1.2 10.051077987501515 20.423842015302032 13.137344152335006 0 0 0 +1350 3 -1.2 5.279959800957119 17.784432488885592 13.946139180279136 0 0 0 +1394 3 -1.2 8.47738500281742 19.081558904963167 14.406081957876136 0 0 0 +1466 3 -1.2 5.209478868380173 23.949409939867834 12.323212628821258 0 0 0 +1697 3 -1.2 7.228452420364287 18.023619115563537 10.678826324597225 0 0 0 +1719 3 -1.2 14.243809534938128 24.890111082319745 8.880444944275862 0 0 0 +1735 3 -1.2 6.565896569772386 18.092926308951363 7.951742076459127 0 0 0 +1790 3 -1.2 11.220316282981587 22.37228976446005 15.118342607209534 0 0 0 +1792 3 -1.2 6.171377681565011 25.509436796847847 13.776819913486833 0 0 0 +1815 3 -1.2 10.488875046727452 18.04460125106999 13.631642885281249 0 0 0 +1828 3 -1.2 13.32304130159666 23.405992506947246 15.257366166898523 0 0 0 +1861 3 -1.2 8.20425319763121 21.552721324366214 16.056638487579686 0 0 0 +1866 3 -1.2 6.851133091230826 24.547535235735864 16.215323985386426 0 0 0 +2811 3 -1.2 22.765502448159285 33.2772337699081 3.636900816217262 0 -1 0 +488 1 3 30.309041570283235 34.06237486033504 7.525851704607923 0 -1 0 +1918 3 -1.2 14.29474663240655 18.397367881804428 13.259718436701084 0 0 0 +1923 3 -1.2 7.1066897124788735 19.177735525315658 16.8173435939257 0 0 0 +2099 3 -1.2 11.7282791291133 20.709644940746546 10.668387172229629 0 0 0 +2119 3 -1.2 7.500906717998897 22.160965133424398 8.146809788418116 0 0 0 +2149 3 -1.2 11.627172082599472 25.522030588533287 11.30626799175434 0 0 0 +2190 3 -1.2 15.180458085897477 22.379907607254772 13.335393156592005 0 0 0 +2192 3 -1.2 12.829397369159762 18.546961345965016 11.319970853700056 0 0 0 +2255 3 -1.2 10.639284764067076 19.664173650201963 15.48665391132168 0 0 0 +2274 3 -1.2 12.954247754885479 25.044056108612445 13.352214168966007 0 0 0 +2285 3 -1.2 8.479285506072895 19.744422608282058 9.04687757415906 0 0 0 +2338 3 -1.2 10.593875204970063 22.348841393800704 8.685137404694263 0 0 0 +2361 3 -1.2 13.111560592161798 25.835213750323362 15.729779314769644 0 0 0 +2379 3 -1.2 14.103827503411019 20.579035582770096 11.669773089308169 0 0 0 +2839 3 -1.2 14.985309609622437 17.513725587871853 10.988560755421421 0 0 0 +2475 3 -1.2 11.427961122279221 23.32775134890117 12.519352371082812 0 0 0 +2538 3 -1.2 6.895580519096005 21.35147747490986 11.307462451459791 0 0 0 +2555 3 -1.2 3.9677747915184236 23.706231935533026 10.192193875899497 0 0 0 +2559 3 -1.2 7.384986977380932 23.422850242498978 13.577531975375907 0 0 0 +2635 3 -1.2 13.173563734999096 21.188283619791896 13.86051570479948 0 0 0 +2646 3 -1.2 7.591511545170519 20.107710079660432 6.911173667422263 0 0 0 +2704 3 -1.2 9.202668971964528 24.440232510292 11.571157503594588 0 0 0 +2707 3 -1.2 12.152938847602876 21.64960554989462 6.889915500833477 0 0 0 +2714 3 -1.2 13.628323707438016 19.811517373190533 9.336551401023097 0 0 0 +2737 3 -1.2 5.981815693253238 25.797974849853006 9.515322950220707 0 0 0 +2832 3 -1.2 11.047155292632421 19.842555530888472 8.039093965891661 0 0 0 +2843 3 -1.2 13.934808537429596 23.270215854937884 10.68076250761867 0 0 0 +2865 3 -1.2 10.642498065122664 25.396593910943647 13.740546865787183 0 0 0 +2888 3 -1.2 15.41327316949871 18.163834200669175 15.551504545974202 0 0 0 +84 1 3 18.03629214521448 19.220692814838653 15.956938258241642 0 0 0 +148 1 3 17.912369877254218 19.61582729650581 10.577042368572153 0 0 0 +217 1 3 15.814872763003283 18.494990395709703 14.052384004068141 0 0 0 +414 1 3 16.041012312877456 17.32209898007112 16.806762062957443 0 0 0 +564 1 3 17.50696953717914 24.308681919855555 11.97562114376629 0 0 0 +605 2 0.6 15.661142840721201 22.11968282670964 16.050686281350604 0 0 0 +787 2 0.6 18.10949823662102 22.398081844221196 9.13669273141473 0 0 0 +1093 2 0.6 17.652642279773602 21.686276716211186 13.646667559956617 0 0 0 +1250 3 -1.2 17.121685096980844 27.913590843248027 7.342674837692555 0 0 0 +1251 3 -1.2 17.342867435001395 24.592613278511557 13.58196527377536 0 0 0 +1276 3 -1.2 16.13080705371667 24.58221556420234 11.546731031837918 0 0 0 +1486 3 -1.2 17.469295754571945 18.87505570361723 14.552791417821044 0 0 0 +1569 3 -1.2 15.990282386774163 23.06741132510045 9.035564023727112 0 0 0 +1739 3 -1.2 18.251894940242277 20.30950183061247 7.470277511015246 0 0 0 +1894 3 -1.2 17.61338006919593 18.82934646677438 9.270064777955575 0 0 0 +1904 3 -1.2 19.4971089043527 18.145701771273004 7.780154612131346 0 0 0 +2004 3 -1.2 13.717642397743214 22.524253897332315 8.448423209256463 0 0 0 +2191 3 -1.2 15.571770463934216 20.10639353335508 13.784458042072645 0 0 0 +2237 3 -1.2 17.600318089763302 23.17832735839501 15.876752955840852 0 0 0 +2270 3 -1.2 19.468534728799906 19.45358884358574 16.14952773812526 0 0 0 +2393 3 -1.2 19.142069290272637 20.390485082569022 10.27156082704347 0 0 0 +2427 3 -1.2 18.561957762790847 25.320613094655556 11.646029798818176 0 0 0 +2536 3 -1.2 15.122712753460242 24.911843763208363 14.711959981497381 0 0 0 +2630 3 -1.2 18.356900532403227 18.571069034973807 11.687687180993457 0 0 0 +2782 3 -1.2 16.73602452932841 20.335871715630876 11.056406312103894 0 0 0 +2803 3 -1.2 19.42079897698736 26.358535299655916 14.232921207308495 0 0 0 +2823 3 -1.2 19.940718376934235 20.620519848685078 13.58374502528395 0 0 0 +2833 3 -1.2 18.02848261268218 22.947462543207628 11.728768912529047 0 0 0 +2872 3 -1.2 19.659943752735145 24.56088446484083 15.962539361350938 0 0 0 +454 1 3 18.988134096104925 34.32432193857271 6.690021320301295 0 -1 0 +2960 3 -1.2 18.25461962824466 25.959418165132586 9.098023945606164 0 0 0 +2993 3 -1.2 17.182473064009727 20.359542721738713 16.427401594995757 0 0 0 +78 1 3 18.71845281841068 23.594608145483452 16.714830504803995 0 0 0 +134 1 3 21.085295580635115 19.723372341110675 13.191326025712 0 0 0 +183 1 3 25.21652580950962 21.606442736739545 13.56047415151243 0 0 0 +187 1 3 24.633815418895885 23.802620425168275 8.280409321415068 0 0 0 +330 1 3 20.243403870919945 25.152410895930853 14.570996381805735 0 0 0 +333 1 3 24.373032723989134 19.663028760126934 11.0769977430999 0 0 0 +396 1 3 21.648768024390755 23.48671284272401 8.470126474295613 0 0 0 +509 1 3 24.21975366887572 21.078078391900956 16.373673512738446 0 0 0 +650 2 0.6 22.51271148355087 22.38449013349451 11.834140941866748 0 0 0 +2642 3 -1.2 19.888235781835 34.2894762102349 0.15346151327244983 0 -1 0 +702 2 0.6 21.691428370840764 19.14975996042305 16.504672133464975 0 0 0 +751 2 0.6 20.82040094326763 21.58658789964644 15.390182804989006 0 0 0 +927 2 0.6 19.982924866411594 22.078415047772285 11.619760905217557 0 0 0 +928 2 0.6 26.07046475026327 23.7406096634549 11.19166939578585 0 0 0 +1013 2 0.6 20.53212041077643 24.951717170453865 10.813060627293368 0 0 0 +1122 2 0.6 21.447005331231285 20.251816590388827 9.635039120083984 0 0 0 +1171 2 0.6 23.151898139483315 24.13614440971375 15.149398034455727 0 0 0 +1228 3 -1.2 23.929422716853317 20.38132281360781 9.873823244457565 0 0 0 +1355 3 -1.2 20.48444462764549 18.291841368193058 12.910865615373439 0 0 0 +1374 3 -1.2 26.31000119509168 22.936053719486534 13.627431782932582 0 0 0 +1378 3 -1.2 22.843904728418828 21.562477410318426 16.132328942909314 0 0 0 +1389 3 -1.2 21.60363798063101 20.28614080308455 11.905720420782007 0 0 0 +1456 3 -1.2 25.943074905149146 17.700466104588706 16.833326144396953 0 0 0 +1462 3 -1.2 24.354493170928734 19.619950111705567 16.99193805194609 0 0 0 +1464 3 -1.2 20.357787321107416 23.972123907343928 13.67987531255461 0 0 0 +1527 3 -1.2 21.159713347356096 22.842065928063406 9.710803518590799 0 0 0 +1628 3 -1.2 25.353573191460843 24.60522172633896 15.314470063755348 0 0 0 +1639 3 -1.2 24.362165605213022 20.695341897169794 12.29150141727492 0 0 0 +1922 3 -1.2 25.92204580590483 18.288926931509014 13.30940382161901 0 0 0 +2095 3 -1.2 21.425805634291272 24.943537566264443 8.564667305250387 0 0 0 +2100 3 -1.2 21.569789944787455 19.587493656723762 7.165500238465667 0 0 0 +757 2 0.6 24.644387572343742 33.917867803011774 4.668370733217359 0 -1 0 +2236 3 -1.2 25.020639833160345 20.962120205715603 15.007245486494753 0 0 0 +2583 3 -1.2 25.688202575041732 25.139456632959412 12.875179142739327 0 0 0 +2724 3 -1.2 23.70364972162812 18.351824651209416 11.251966770175406 0 0 0 +2746 3 -1.2 23.210023298234766 23.159820072944253 8.364185218661742 0 0 0 +2757 3 -1.2 24.46497139727186 25.211857243396015 8.676252118218866 0 0 0 +2877 3 -1.2 22.14181826353054 19.582839848754805 14.21909205281423 0 0 0 +2911 3 -1.2 26.516601645264856 20.69177901819488 13.047835851548397 0 0 0 +2927 3 -1.2 24.079647503600196 22.632165404190584 13.55547720044326 0 0 0 +49 1 3 26.171002911306612 24.43429500703488 14.099236921160964 0 0 0 +236 1 3 26.76345361524436 19.22594383233064 12.514287055801734 0 0 0 +263 1 3 29.52081771944719 19.249406050176976 16.038127204610667 0 0 0 +281 1 3 29.21431518388543 24.531393507658507 14.145656115671612 0 0 0 +446 1 3 28.78625193658796 19.536385516403413 9.092341346965746 0 0 0 +486 1 3 30.419810748149473 25.180607948668925 8.469457546295898 0 0 0 +601 2 0.6 28.59023568210651 23.27085125912408 10.816423763140854 0 0 0 +648 2 0.6 27.30683151616686 17.708716601506588 14.918123246158597 0 0 0 +756 2 0.6 29.43939260854153 26.168391941204476 11.527908831230826 0 0 0 +764 2 0.6 31.270529258594546 21.971226499052246 16.00226948635166 0 0 0 +838 2 0.6 27.380330146508662 24.57604789130707 8.477580645907674 0 0 0 +939 2 0.6 28.794384524480122 21.275360237003273 13.513509493770272 0 0 0 +1036 2 0.6 27.81817807549143 22.16231857568432 8.78066497223189 0 0 0 +1048 2 0.6 30.727860724500665 19.8538542077853 10.937192807695679 0 0 0 +1057 2 0.6 30.302068905011872 18.016283243536524 12.921214102321844 0 0 0 +1314 3 -1.2 29.920758944843225 20.325866042379346 8.504089635797014 0 0 0 +1518 3 -1.2 29.33223287943638 24.26703946684565 12.671910116214672 0 0 0 +1696 3 -1.2 30.579495211099264 18.803599722877564 15.087015189135569 0 0 0 +1853 3 -1.2 29.653527675310375 23.293938248476806 14.848044580001838 0 0 0 +1950 3 -1.2 25.933593236096872 19.311390448081738 11.160996492939232 0 0 0 +2049 3 -1.2 29.030839797202187 18.25929178992801 9.79081175000304 0 0 0 +2070 3 -1.2 28.19141200151757 18.901775287199182 12.534279185802113 0 0 0 +2094 3 -1.2 28.326591079966217 19.809691673096534 15.359438975530692 0 0 0 +2128 3 -1.2 29.629442726081123 23.928852441879588 8.551852897433266 0 0 0 +2166 3 -1.2 27.288315033711303 22.955681715693157 16.435884226394542 0 0 0 +2351 3 -1.2 25.609699693653113 23.1475548378275 9.180344718940809 0 0 0 +2352 3 -1.2 27.401267302392508 25.322497544237212 10.404645508507194 0 0 0 +2518 3 -1.2 30.020518856418825 25.726000582354715 14.555116166531517 0 0 0 +1104 2 0.6 24.2656184407075 17.964642023748958 3.679168034468613 0 0 0 +2755 3 -1.2 30.05239773015839 20.122736067514918 17.11640381967703 0 0 0 +2756 3 -1.2 27.671456454999596 24.930837033591327 14.347046707329334 0 0 0 +2926 3 -1.2 28.345853698520013 20.521573625550577 10.117143726620672 0 0 0 +81 1 3 1.0789705933571534 27.469999670758277 12.482279009160587 0 0 0 +133 1 3 3.82802814852091 28.055310966979025 8.502227047149152 0 0 0 +211 1 3 1.4062101994313707 30.919557404043186 10.70804508672627 0 0 0 +438 1 3 33.85981280722473 28.096825146365337 14.815859934627756 -1 0 0 +529 1 3 33.7563748225999 33.01396164214457 16.064363612426536 -1 0 0 +580 1 3 2.2810957319483816 32.86736184452982 15.365393255351927 0 0 0 +903 2 0.6 4.3915212177315714 26.63373938096663 13.208497959476068 0 0 0 +948 2 0.6 1.8746942730635214 30.15248115711007 16.77723622321247 0 0 0 +949 2 0.6 3.9036300666761954 31.150917460691794 12.912035200493525 0 0 0 +982 2 0.6 2.9648212550035034 27.93374038400416 15.812273036970419 0 0 0 +1181 2 0.6 4.086181243537955 28.661426647443303 11.516907477441539 0 0 0 +1185 2 0.6 0.3067713473349089 33.28305257873962 12.37269832564032 0 0 0 +1216 3 -1.2 0.2730830200987876 28.535623441474364 9.137341497442574 0 0 0 +1285 3 -1.2 34.331849574456776 31.15332452065158 11.192547836337226 -1 0 0 +1356 3 -1.2 2.221239561753198 31.98428647206673 11.449262966145438 0 0 0 +1439 3 -1.2 5.676694044915363 31.42568797891596 11.414325182951538 0 0 0 +1443 3 -1.2 33.539548165970366 26.993398708451213 15.995515364649355 -1 0 0 +1469 3 -1.2 34.3064543905065 29.354362799143377 15.417394193255749 -1 0 0 +1502 3 -1.2 32.834331178241335 27.163288319744755 8.256765810777468 -1 0 0 +1521 3 -1.2 4.651332991521537 32.214860250838925 9.240287076513535 0 0 0 +1674 3 -1.2 2.99956466055463 31.57619143603701 15.263267998002377 0 0 0 +1782 3 -1.2 32.32312937473441 29.59309011873684 8.750002951684582 -1 0 0 +1817 3 -1.2 2.3459126692171135 29.744872891768626 10.820525197494376 0 0 0 +1860 3 -1.2 3.1354912607544843 33.893444871166025 16.23189869600019 0 0 0 +1947 3 -1.2 0.951633592758569 32.565282558351335 16.196493064173897 0 0 0 +1952 3 -1.2 31.690844572823522 33.636184810677264 7.346331068657179 -1 0 0 +2168 3 -1.2 1.272217345897311 31.283159734973687 9.224961014249912 0 0 0 +2212 3 -1.2 0.25260016255263 26.421663391409517 11.822896621984967 0 0 0 +2293 3 -1.2 0.7205088812751796 27.33857268264373 14.111411564773071 0 0 0 +634 2 0.6 5.545457787575469 23.71942844721821 1.562437641065098 0 0 0 +2586 3 -1.2 5.3653003970751 29.140558297190434 13.337731686804325 0 0 0 +2600 3 -1.2 2.9653570552897173 27.026042345775554 9.098231169028344 0 0 0 +2620 3 -1.2 4.849964561121792 28.640159444380274 9.412515015912126 0 0 0 +2632 3 -1.2 0.5239730773712509 28.82595084795969 12.452081465586401 0 0 0 +2712 3 -1.2 2.5239611277401646 27.178507709928866 12.363432748919362 0 0 0 +2852 3 -1.2 32.67648530513671 27.94058705613951 13.939760557670649 -1 0 0 +80 1 3 14.447558860228176 29.287035454317444 12.928213257370285 0 0 0 +132 1 3 8.992384230251151 31.670023325495134 12.927133849945253 0 0 0 +173 1 3 9.076081731413604 28.481301380757447 14.68668296017622 0 0 0 +175 1 3 5.799526046121207 31.744659866088643 10.00505840714782 0 0 0 +188 1 3 11.921203822398809 31.144668416001224 10.31266237141095 0 0 0 +228 1 3 6.082224926088872 28.772602003546023 14.561339862016132 0 0 0 +280 1 3 9.950510036960047 29.026908393456306 11.82293244226106 0 0 0 +352 1 3 10.79876563992137 30.767965574984554 15.101194185669032 0 0 0 +419 1 3 13.737442836588832 32.72318253476729 11.523306567902731 0 0 0 +552 1 3 12.210547878772042 28.19582102312488 10.105452805971442 0 0 0 +593 1 3 15.161118570842973 28.11587714760656 10.299108566672166 0 0 0 +676 2 0.6 13.627112827694312 28.146099837702597 15.858835725123598 0 0 0 +750 2 0.6 6.878870758374109 28.339514220313145 10.40551934576736 0 0 0 +754 2 0.6 11.670232126678838 27.320812603931348 14.91831178552137 0 0 0 +874 2 0.6 13.628105141152316 30.37348495555502 16.512539502155914 0 0 0 +1148 2 0.6 8.426042845930624 25.622111097752708 13.272909442106535 0 0 0 +1260 3 -1.2 6.133013105376109 29.792848472004877 15.763826484362198 0 0 0 +1282 3 -1.2 6.681647607843433 30.738875747325636 9.145428030196367 0 0 0 +1407 3 -1.2 13.324667578663684 30.20051621283351 12.562396102235242 0 0 0 +1517 3 -1.2 8.907308373179012 30.17510364507044 12.43397473901263 0 0 0 +1823 3 -1.2 12.458740433413471 29.7150135156542 9.773812331306 0 0 0 +1877 3 -1.2 14.225855821659502 32.07271148025538 15.377053645723477 0 0 0 +1938 3 -1.2 9.370835134441164 33.31589177209753 16.272724359750246 0 0 0 +1957 3 -1.2 13.923285389831848 28.020359903228155 13.46000637818277 0 0 0 +1965 3 -1.2 10.760464897857963 30.476236207244526 11.124003318267391 0 0 0 +2000 3 -1.2 9.421020202944764 27.495520271435797 15.711712963443995 0 0 0 +2101 3 -1.2 5.364703183900465 27.667747634495377 15.236256738930003 0 0 0 +376 1 3 19.53620798663794 17.579606115370424 11.91246116467146 0 0 0 +2116 3 -1.2 9.002191299724739 30.495672892470342 9.01993891715792 0 0 0 +2137 3 -1.2 9.053924162785737 28.20770903981306 10.970187163936894 0 0 0 +2172 3 -1.2 14.224621573390209 32.598735810610286 12.985558931925546 0 0 0 +2305 3 -1.2 7.493472382312341 27.26491599106242 8.294341350807501 0 0 0 +2308 3 -1.2 12.233384198788185 32.38251791900822 11.310369156839435 0 0 0 +2319 3 -1.2 13.641752847987139 27.664257242981638 10.339411727441396 0 0 0 +2371 3 -1.2 14.018560119165215 31.791901342319964 10.391044804947636 0 0 0 +2402 3 -1.2 9.103503037120669 32.63454491384509 8.271637422258964 0 0 0 +2403 3 -1.2 11.370796494797816 28.29553726849535 11.374465405672074 0 0 0 +2444 3 -1.2 11.397359937227176 31.5843796845383 16.14889950890932 0 0 0 +2599 3 -1.2 7.588250162011821 28.388164432548084 14.251478000137396 0 0 0 +2721 3 -1.2 9.447820100718157 29.90357758571374 15.228663902335265 0 0 0 +2735 3 -1.2 7.842672914860055 31.921596299626255 13.785914115790428 0 0 0 +2739 3 -1.2 11.490088444353573 31.90780456746955 8.99617388162399 0 0 0 +2752 3 -1.2 9.913087659526125 28.355822443257274 13.356542334427328 0 0 0 +2780 3 -1.2 7.153373278552946 32.57585139307315 9.727070332125228 0 0 0 +2795 3 -1.2 9.176287238863628 32.584714162066696 11.792653141334236 0 0 0 +2804 3 -1.2 11.743853009498263 29.64683565912432 14.840457263090205 0 0 0 +2875 3 -1.2 10.347420246297128 31.596656752868494 13.828157154624309 0 0 0 +2876 3 -1.2 11.55876709080906 27.42341762054939 8.950833783611555 0 0 0 +320 1 3 16.995930875452867 30.744988911459288 13.45365080789057 0 0 0 +461 1 3 16.470725507450318 25.584165174139244 14.373539773655855 0 0 0 +487 1 3 18.738157397565143 27.24710419719132 9.596388532752982 0 0 0 +642 2 0.6 20.13543853709148 28.341295767095243 13.351737689173007 0 0 0 +1074 2 0.6 16.957057989892853 30.605428928101084 10.334435746772943 0 0 0 +1179 2 0.6 17.990876717443314 27.490689105024057 12.334313531714413 0 0 0 +1190 2 0.6 18.53110310102363 29.133798391381088 15.259733431950359 0 0 0 +1236 3 -1.2 19.138292977635754 33.10236828974016 12.614096110460968 0 0 0 +1288 3 -1.2 16.42780988684889 26.845262971970627 13.622648832741886 0 0 0 +1328 3 -1.2 15.794929047960219 28.06938940999117 16.27398183046021 0 0 0 +1405 3 -1.2 19.286811916386572 31.758361742006784 10.481269664978788 0 0 0 +1428 3 -1.2 20.032892636495745 27.325467502411467 10.501827611251647 0 0 0 +1540 3 -1.2 15.176031006053272 29.09489803429209 11.504093924884142 0 0 0 +1638 3 -1.2 16.975042125382917 25.952688301567253 15.826535613022164 0 0 0 +1745 3 -1.2 15.61569374842414 29.953067208043535 13.72536331746845 0 0 0 +1993 3 -1.2 18.024461146390866 28.483131666017588 10.035909427446844 0 0 0 +2121 3 -1.2 16.69938467731366 31.634337171779496 12.293454219701424 0 0 0 +2133 3 -1.2 16.058617195680405 27.019608191888494 10.519277685852447 0 0 0 +2294 3 -1.2 16.7804442642466 31.404126229138654 8.404162004690644 0 0 0 +2311 3 -1.2 17.38904677083303 31.43178149486721 14.711527274695886 0 0 0 +2501 3 -1.2 15.31953128019002 28.81537207495242 8.911970908212036 0 0 0 +2550 3 -1.2 19.045409155047626 33.09145735583664 16.69267099709899 0 0 0 +2719 3 -1.2 16.09441738637231 33.51269946432117 16.8679219048579 0 0 0 +2981 3 -1.2 18.071403288934032 29.746070125257468 13.108409036918642 0 0 0 +18 1 3 20.335824977217154 30.911398595534095 9.630607939233187 0 0 0 +111 1 3 26.374984793808945 31.52223957391413 15.788707839206042 0 0 0 +112 1 3 21.323269829038917 28.237843736951156 10.560772850482348 0 0 0 +144 1 3 20.242980812361598 32.13106956842044 16.426163915627303 0 0 0 +516 1 3 25.545277077841714 29.238426441072477 10.36062602267975 0 0 0 +834 2 0.6 22.79585800147831 27.42112670171778 13.906536602472077 0 0 0 +988 2 0.6 20.43767232873888 30.94457083099297 13.0548650650782 0 0 0 +1103 2 0.6 23.075592639044046 31.172095015329585 13.601707326735024 0 0 0 +1159 2 0.6 21.12322316678459 27.831369466270168 15.772041441793728 0 0 0 +1163 2 0.6 25.690796013665757 31.997148348347253 12.130884102734814 0 0 0 +1194 2 0.6 25.170246145075374 26.174386150757304 10.685241681029035 0 0 0 +1311 3 -1.2 21.984767952970753 27.888156846655 11.825209714827052 0 0 0 +1342 3 -1.2 21.5451508856882 31.899637836937593 9.577241630385187 0 0 0 +1414 3 -1.2 22.0667807342153 32.25114863606231 11.878454214854706 0 0 0 +1425 3 -1.2 25.3365714747723 31.812732317628072 17.00650462848808 0 0 0 +1449 3 -1.2 21.604387167188925 25.710078308003563 14.851081241760246 0 0 0 +1970 3 -1.2 21.87049374002598 17.261939741473476 8.01776427315882 0 0 0 +1834 3 -1.2 22.05045641638114 28.138284303375595 9.30228382331888 0 0 0 +1942 3 -1.2 25.253231843092472 28.409377438477215 11.716627652803814 0 0 0 +1962 3 -1.2 19.335321248904062 27.74239413931058 8.166523543178068 0 0 0 +2064 3 -1.2 25.66188839917045 32.292922030481265 7.492644887385316 0 0 0 +2135 3 -1.2 25.003066179160573 28.478041157154028 9.19210918303153 0 0 0 +2307 3 -1.2 24.83834911301971 27.664798879579198 14.174408821860075 0 0 0 +2388 3 -1.2 20.737778111733068 29.730883995333095 10.58698506073046 0 0 0 +2418 3 -1.2 19.859126264525788 30.727924405491756 16.541707537515144 0 0 0 +2464 3 -1.2 24.91987988452258 30.57395303668802 10.509296699015817 0 0 0 +2779 3 -1.2 24.837875330353945 29.996980909080555 13.496214915201882 0 0 0 +2956 3 -1.2 21.441277636959725 29.626973642993924 14.508095692979794 0 0 0 +171 1 3 25.486059373260204 28.682557701622272 13.31447376275508 0 0 0 +336 1 3 28.710719264381577 29.64869191969644 12.605173105884905 0 0 0 +583 1 3 29.204798876671966 31.486245262662184 10.308836676170188 0 0 0 +620 2 0.6 27.31173572825537 26.77032925976713 11.914574101125199 0 0 0 +626 2 0.6 28.11866210217609 28.006179766022715 15.249618303336367 0 0 0 +791 2 0.6 29.249867933027566 28.28823363649845 9.723763250874716 0 0 0 +963 2 0.6 30.618536494029822 28.04724340602419 14.443252430148062 0 0 0 +1255 3 -1.2 29.18158905323538 30.707772892993535 8.866234261214975 0 0 0 +1330 3 -1.2 29.522207329482143 30.459477845374813 11.398570339046325 0 0 0 +1390 3 -1.2 27.91710899031327 32.21492792260874 10.291063511408895 0 0 0 +1579 3 -1.2 30.28924496361322 26.122777745125124 9.597367641576291 0 0 0 +1730 3 -1.2 30.05181367147777 31.235659294298287 16.17042830600529 0 0 0 +1912 3 -1.2 26.48611333911686 30.05505633999689 15.812912561296214 0 0 0 +1934 3 -1.2 29.065117609209988 28.2589348467784 12.119337787542673 0 0 0 +2143 3 -1.2 29.165926212809524 32.88973282504234 14.371624780450516 0 0 0 +2238 3 -1.2 27.775455853815405 32.090131341788094 16.27831465961291 0 0 0 +2253 3 -1.2 25.976581703126964 32.33099204540939 14.639968571824 0 0 0 +2334 3 -1.2 31.395852894475283 29.305775382541093 17.035134062527877 0 0 0 +2404 3 -1.2 29.357760309101934 29.768900698621955 13.937949655643283 0 0 0 +2407 3 -1.2 26.962045250622047 28.422404120236536 13.436499378493817 0 0 0 +2410 3 -1.2 30.346566506218288 32.43709015643101 10.234519793322864 0 0 0 +2414 3 -1.2 27.55923206467198 30.613086258716088 12.557237303017828 0 0 0 +2551 3 -1.2 29.00546944251388 29.036330183380414 17.12133298601734 0 0 0 +2884 3 -1.2 27.03725907156928 29.1596297799791 10.207946729128322 0 0 0 +214 1 3 2.43427398074556 32.51623078420414 1.3562312063155624 0 -1 0 +777 2 0.6 4.1653030759635135 20.41481705504044 1.8352807309588273 0 0 0 +1507 3 -1.2 13.178156934751398 27.780332493456314 0.6341639725514285 0 0 0 +1806 3 -1.2 9.975164457791578 33.15746030792825 4.635326403450543 0 -1 0 +738 2 0.6 12.941597449293916 33.97354121224608 0.9817978016298794 0 -1 0 +1841 3 -1.2 17.513932588963566 17.979741286568064 16.781781100472315 0 0 0 +973 2 0.6 30.385531655465083 27.688338619881176 1.0511584237172154 0 0 0 +525 1 3 29.106276871217247 17.491165148655412 1.4848342671676147 0 0 0 +2383 3 -1.2 5.005125450906489 33.552495787545695 14.94027941163361 0 -1 0 +1935 3 -1.2 29.08460130584373 17.877521418996487 16.769355869174433 0 0 0 +521 1 3 1.052249383362647 17.625300225264418 13.203508884198845 0 0 0 +717 2 0.6 15.661238550346122 26.831065271126523 0.6713088342050317 0 0 0 +1819 3 -1.2 27.26813278199119 33.74377647132866 6.1990602921754965 0 -1 0 +2731 3 -1.2 9.511977819618078 31.067678835321768 0.602398130662102 0 0 0 +272 1 3 4.678861662282438 34.29886806423176 16.16787278956106 0 -1 0 +905 2 0.6 30.937387587565205 25.063551922164915 16.671769801107388 0 0 0 +76 1 3 5.329915021196723 17.34187018748662 20.434984041338375 0 0 0 +165 1 3 2.5346733604971203 19.98331759240903 20.563158209393183 0 0 0 +256 1 3 4.938146088960851 20.03131279067204 24.097097636569423 0 0 0 +2749 3 -1.2 25.7051746373569 33.74144729650093 28.566500260534543 0 -1 0 +335 1 3 1.2420622964520043 24.396734466457843 22.61401589481627 0 0 0 +1620 3 -1.2 22.783943911225737 25.822563511174078 17.810682650863114 0 0 0 +388 1 3 5.701392708711743 22.70649614117033 25.17967701553336 0 0 0 +418 1 3 4.080996885546088 25.146124649045785 18.993279724405085 0 0 0 +2933 3 -1.2 19.446923382805746 22.289065861267446 17.265532468469214 0 0 0 +533 1 3 0.29580442050334455 21.86117724797798 21.358391155817465 0 0 0 +587 1 3 3.744699346247368 24.67595838647935 24.228497966934327 0 0 0 +618 2 0.6 32.36894408057684 20.78504120563057 19.8630974787371 -1 0 0 +687 2 0.6 5.777419911034528 22.46731531713354 20.421727199849176 0 0 0 +745 2 0.6 33.9629937345083 24.559408488693688 19.582829385446846 -1 0 0 +765 2 0.6 2.030118242155379 23.11387923752548 18.336883004270476 0 0 0 +869 2 0.6 4.450339861956867 21.575168206236363 18.21254512033014 0 0 0 +871 2 0.6 5.031753728334439 26.06338340862565 21.772563720957027 0 0 0 +896 2 0.6 33.843305760495966 22.336083589122474 17.256379790239368 -1 0 0 +936 2 0.6 32.46075426378349 19.344676455978096 17.794286433412637 -1 0 0 +971 2 0.6 5.263333327893035 18.359797802210508 17.631551481567556 0 0 0 +980 2 0.6 34.04863215081426 25.14747045107404 25.74192025754754 -1 0 0 +983 2 0.6 33.71162179062362 18.847746461644586 22.472618873085125 -1 0 0 +1128 2 0.6 2.0187616100080734 21.459331641108193 23.71580447321445 0 0 0 +1352 3 -1.2 2.9626672173675916 25.426203853461995 18.042437599139692 0 0 0 +1395 3 -1.2 33.58687221751633 20.918559494829537 21.785217015463513 -1 0 0 +1522 3 -1.2 0.4902664432111146 25.33958789438636 23.47064024461713 0 0 0 +1617 3 -1.2 0.6697902697450582 20.793578800496622 27.074362881130988 0 0 0 +1680 3 -1.2 2.010053432737598 18.618906081359338 25.96353068247063 0 0 0 +1692 3 -1.2 5.424070873547335 25.193226768709415 18.080375921207327 0 0 0 +1756 3 -1.2 34.301869427691045 22.46997859507061 20.057238207495303 -1 0 0 +1971 3 -1.2 4.0776146059216725 20.98479579954977 23.29941922173677 0 0 0 +2051 3 -1.2 33.45138233077604 18.139323455589253 19.820912896743227 -1 0 0 +2268 3 -1.2 4.2331569417297885 17.736590104859108 19.52534023439901 0 0 0 +2296 3 -1.2 4.331220972413318 23.500548421945833 25.122518291145386 0 0 0 +2331 3 -1.2 2.4617438537515905 18.76635738966966 21.56323568224002 0 0 0 +2353 3 -1.2 1.6807829578247 21.11065073423773 21.30590117068365 0 0 0 +2358 3 -1.2 1.7483893094380836 19.524792470241962 19.344496998418748 0 0 0 +2369 3 -1.2 3.905855708226287 18.696196036200014 23.527017309430825 0 0 0 +2422 3 -1.2 33.50145681002191 17.41880182284146 24.109111890584895 -1 0 0 +2525 3 -1.2 3.9004627750279703 23.773143424810506 19.545643573049407 0 0 0 +2585 3 -1.2 33.846428128737514 23.101982825301494 26.789785052961975 -1 0 0 +2590 3 -1.2 0.5209670593620582 22.972318992633053 22.478072216143683 0 0 0 +2777 3 -1.2 3.8347988768318384 20.553601063259222 20.2298416019051 0 0 0 +2784 3 -1.2 2.587239289420995 24.04072454502661 23.36858361765513 0 0 0 +2806 3 -1.2 0.0414469114718591 26.24509654488016 18.185034288175043 0 0 0 +2861 3 -1.2 1.3899169508569018 24.810149649164284 21.218563200115195 0 0 0 +2897 3 -1.2 0.5602225988233688 20.105705022738444 24.798273643942583 0 0 0 +2935 3 -1.2 34.20332701781739 18.518898264916334 27.035904556728866 -1 0 0 +74 1 3 6.67578659833698 24.31768781095414 17.66615455679027 0 0 0 +2350 3 -1.2 30.515027885865802 17.633493278611333 18.76715774160179 0 0 0 +167 1 3 14.555470505658576 20.077502040327474 24.649548010769788 0 0 0 +249 1 3 8.126757639374802 26.304863012137716 23.742352941452012 0 0 0 +253 1 3 12.457996486568641 23.540920996480168 24.355030723441903 0 0 0 +264 1 3 12.101698738272736 19.57896078760928 18.650947283497384 0 0 0 +291 1 3 7.532854568193494 25.710519694010724 20.944581426030236 0 0 0 +295 1 3 9.228539411515474 19.897656283362526 19.066100550025237 0 0 0 +298 1 3 8.337653262928862 23.406807419419536 24.212017859864723 0 0 0 +337 1 3 13.095249065671359 23.566633153177467 21.47834231073248 0 0 0 +346 1 3 12.657077314100205 22.482195379383615 18.77477223278166 0 0 0 +462 1 3 9.430196983936709 18.8965543265671 23.21985874916419 0 0 0 +480 1 3 9.324042423160586 24.417084189207667 19.126023837087775 0 0 0 +519 1 3 12.682616731625316 21.464044708479538 26.446721221302447 0 0 0 +369 1 3 23.960979768351557 33.14600662024763 34.08200605054554 0 -1 0 +568 1 3 6.904919581917647 19.556475361737668 21.90486624402518 0 0 0 +585 1 3 10.44149761293367 17.42330138761801 25.499913364671894 0 0 0 +674 2 0.6 13.50367135697632 17.97329264213232 26.715184109472567 0 0 0 +696 2 0.6 11.017822645464852 26.234414392891573 20.81191299834608 0 0 0 +2497 3 -1.2 2.159739136908408 20.880650437139128 34.1497525681321 0 0 -1 +798 2 0.6 14.997188909749696 20.18729841862475 17.57892923306447 0 0 0 +821 2 0.6 12.798066418672153 17.9192771359213 21.987590047544206 0 0 0 +879 2 0.6 10.629961732673946 25.07997105617068 22.51066891775336 0 0 0 +944 2 0.6 14.73687074703225 25.928051292187412 25.662860941190797 0 0 0 +995 2 0.6 10.175254954269116 21.822043851888843 21.82393470937455 0 0 0 +1024 2 0.6 13.947521170218897 25.803581842786866 18.01033441713912 0 0 0 +1063 2 0.6 9.896398316513892 20.80910015418961 25.760632486376586 0 0 0 +1169 2 0.6 15.049586346176849 17.53050490330374 20.046709467311874 0 0 0 +1284 3 -1.2 9.392442090019678 23.06580144807643 19.643826395967338 0 0 0 +1299 3 -1.2 7.350699841571892 25.76180273989636 22.486690827848133 0 0 0 +1334 3 -1.2 12.927606286020007 20.91830581224698 18.838860462999087 0 0 0 +1387 3 -1.2 11.54519713697828 22.688064783187695 17.85321698440074 0 0 0 +1415 3 -1.2 10.643601402179822 20.00381229873446 18.34225991661117 0 0 0 +1417 3 -1.2 9.045639973436927 22.7836607362128 25.326933568916456 0 0 0 +1457 3 -1.2 5.824081895904068 18.68056105365422 21.209269575037162 0 0 0 +1570 3 -1.2 6.839254883480333 22.884454272280532 24.113090106672544 0 0 0 +1585 3 -1.2 12.152434065292736 18.848473203397425 19.922381825870577 0 0 0 +1593 3 -1.2 13.323336128985124 20.2856342280046 25.666540603201465 0 0 0 +1598 3 -1.2 8.19476782838287 24.991855107255184 24.598219839495165 0 0 0 +1643 3 -1.2 12.38219195803764 22.778505816125055 20.329522896798252 0 0 0 +1676 3 -1.2 8.941511259227642 18.445354793800025 19.130382191594656 0 0 0 +1788 3 -1.2 9.404738451510939 20.315168272451544 23.627063139325397 0 0 0 +1900 3 -1.2 12.657110272185074 24.98164980888141 21.376289787513 0 0 0 +1982 3 -1.2 7.0253510788548565 20.827211131751035 21.21514505404372 0 0 0 +1983 3 -1.2 10.49344787397184 25.06771087471848 18.525264223422628 0 0 0 +1986 3 -1.2 12.105660023243544 22.306551232805848 25.245962228920586 0 0 0 +2041 3 -1.2 9.314339084916046 18.020941467235215 24.59706121679781 0 0 0 +2055 3 -1.2 8.953799859619563 25.29214013661844 20.449867101539763 0 0 0 +2153 3 -1.2 11.365115632769646 24.53694360766084 24.521773528840765 0 0 0 +2216 3 -1.2 8.149846047467756 18.707368460821886 22.31855038543897 0 0 0 +2263 3 -1.2 9.040674810271536 23.489455681620402 22.918377660472235 0 0 0 +2286 3 -1.2 5.243151354562101 21.254686457726383 25.205131497476174 0 0 0 +2288 3 -1.2 6.609621892599168 24.672631979699524 20.464058638314356 0 0 0 +2443 3 -1.2 10.68917229443696 18.360514753131167 22.70799223837438 0 0 0 +2568 3 -1.2 5.2139998362024205 18.95721030288574 25.307624963815847 0 0 0 +2662 3 -1.2 4.972610426000081 24.920647656623565 23.464934285717867 0 0 0 +2678 3 -1.2 13.76795302386997 23.431275286026732 18.48767875900541 0 0 0 +2842 3 -1.2 12.484799432564381 23.082374679557056 22.853222129487158 0 0 0 +2898 3 -1.2 6.287655899999374 19.86803042228372 23.32109257036616 0 0 0 +467 1 3 6.176777979383377 27.950548210194242 33.99646729628139 0 0 -1 +2929 3 -1.2 9.585646823093862 20.321982249056784 20.44939572250645 0 0 0 +2963 3 -1.2 8.097950127154196 20.654621030266565 18.289825671367492 0 0 0 +2977 3 -1.2 13.75361475171355 24.075566120708526 24.84366129815154 0 0 0 +2989 3 -1.2 8.058902349378464 24.828244795698094 18.269496330064587 0 0 0 +14 1 3 17.171143758682756 20.513000868975237 20.02787747411553 0 0 0 +105 1 3 19.812464581789193 20.660384678133237 23.67076931647361 0 0 0 +196 1 3 18.69803723825935 24.160048010018883 19.614368704242843 0 0 0 +1856 3 -1.2 3.2857388796963503 19.59068655499363 17.398572407108777 0 0 0 +895 2 0.6 17.027740780672016 25.399757017497528 24.094763601623633 0 0 0 +915 2 0.6 15.7296571587481 23.562221113027586 19.205804496768884 0 0 0 +1027 2 0.6 16.461450371005192 22.812684498396223 22.102677248650686 0 0 0 +2980 3 -1.2 12.81271798296803 22.065422941576617 34.01523777840539 0 0 -1 +1131 2 0.6 16.886474049644125 22.108242679003094 24.10558069086662 0 0 0 +1160 2 0.6 17.066315488567803 18.64880862040166 22.534249399650843 0 0 0 +1203 3 -1.2 16.17102138740478 21.34137058118203 19.297642819848118 0 0 0 +1339 3 -1.2 19.439787402956938 22.725700781755986 19.62970082572791 0 0 0 +1471 3 -1.2 18.43940476741161 23.908228777444595 23.316984010972128 0 0 0 +1586 3 -1.2 20.63892495337611 24.718582593667325 18.423044312363576 0 0 0 +1606 3 -1.2 15.67170583775066 19.766891137440496 25.578157652891186 0 0 0 +1646 3 -1.2 18.503370646760846 20.54315461491597 24.276359593316027 0 0 0 +1787 3 -1.2 19.102296539890684 26.549873356528565 24.02200540642396 0 0 0 +1875 3 -1.2 17.60055703537106 21.077031551324026 21.352208062840926 0 0 0 +1953 3 -1.2 16.315268288030442 26.553405828049453 18.15785916216522 0 0 0 +1988 3 -1.2 19.172316967582162 25.437395411545587 20.223156262030773 0 0 0 +1997 3 -1.2 17.459284028678724 23.90868971456071 20.404264609289097 0 0 0 +2033 3 -1.2 16.73137303967964 19.12556227658319 20.276175332364375 0 0 0 +2040 3 -1.2 14.796164198131917 21.454313475476702 24.09423113942669 0 0 0 +2131 3 -1.2 18.199595454854826 24.168827025084333 18.08962068922613 0 0 0 +2194 3 -1.2 18.099380238414952 22.871841181726616 25.960807095992795 0 0 0 +2214 3 -1.2 14.264368050400988 19.109835397587005 23.571747863886046 0 0 0 +2217 3 -1.2 19.364797339303095 24.82850694276584 26.482203310550414 0 0 0 +2244 3 -1.2 14.544610665423777 23.4086986444906 21.44249251802766 0 0 0 +2279 3 -1.2 18.47669916090079 20.572020140940033 19.060400786872975 0 0 0 +2696 3 -1.2 15.417815315126 17.974605284608792 17.963758438319818 0 0 0 +2775 3 -1.2 20.0204925729776 18.97602174457852 26.001304256697434 0 0 0 +2995 3 -1.2 15.805514715948524 26.975654124285324 23.227604621213548 0 0 0 +20 1 3 21.65304756327557 19.543776529089612 21.69478839876396 0 0 0 +64 1 3 23.019563555457946 21.799356405432185 20.338196436270017 0 0 0 +304 1 3 19.852261077505126 23.567025407174903 23.19346515597964 0 0 0 +370 1 3 26.04915300430795 23.865425664632937 26.18357959350598 0 0 0 +395 1 3 24.551088663871035 22.49788972888495 22.741069144841347 0 0 0 +398 1 3 19.669587854804657 21.49908725472843 18.62821939916155 0 0 0 +443 1 3 21.41138315472932 19.661824080421365 25.908614999706387 0 0 0 +550 1 3 21.591915123096577 25.853077279685863 18.678477214417722 0 0 0 +705 2 0.6 24.23602822631818 24.20058031199405 17.4399492004917 0 0 0 +707 2 0.6 25.79086479557896 21.66753535846272 19.261029414686565 0 0 0 +724 2 0.6 22.417803238514157 17.453321820007563 18.987403838718084 0 0 0 +909 2 0.6 24.12580721101395 20.590301936760092 24.834317943565065 0 0 0 +1101 2 0.6 24.199933390944548 18.42994324997936 21.113073058852518 0 0 0 +1267 3 -1.2 21.692894292777527 25.55960306063526 26.20637109645728 0 0 0 +1295 3 -1.2 20.62268857754792 24.26252721149268 22.022342440039733 0 0 0 +1335 3 -1.2 20.306536800660204 19.65452489308897 22.600940984617452 0 0 0 +1336 3 -1.2 22.015788298690303 25.644162995757384 20.23844661470121 0 0 0 +433 1 3 3.2444628111350307 17.76953750236714 22.46564615007094 0 0 0 +1619 3 -1.2 24.77312262270597 18.07816749867242 18.97321892025578 0 0 0 +1647 3 -1.2 22.745809161865143 19.23543216857229 22.634690475798106 0 0 0 +1744 3 -1.2 20.67618032052663 24.037593084201337 24.47622637784018 0 0 0 +1837 3 -1.2 20.99893243996984 20.63581696286099 24.728451797492085 0 0 0 +1869 3 -1.2 25.552472057383923 19.055367326898 25.280068534056507 0 0 0 +1907 3 -1.2 23.897804485620952 22.718859876115424 21.296834502691834 0 0 0 +2075 3 -1.2 22.614927305789827 25.542528454954006 22.652566570053818 0 0 0 +2200 3 -1.2 19.979539809508935 22.0585100378717 23.02202812426552 0 0 0 +2265 3 -1.2 26.63086605597098 24.327973478206353 18.57998909512528 0 0 0 +2298 3 -1.2 25.438468038065846 26.42884826267568 23.546964584585545 0 0 0 +2329 3 -1.2 26.590694376434094 17.255046215189374 23.928918790337455 0 0 0 +2364 3 -1.2 25.94169856697716 25.462979595825768 21.141354588109117 0 0 0 +2397 3 -1.2 25.262975117827857 21.18536190581421 22.61121710045832 0 0 0 +2452 3 -1.2 22.49777057821333 22.74839900524663 19.357859893596878 0 0 0 +2477 3 -1.2 20.878012903334696 20.695251080352847 18.63278745776515 0 0 0 +2542 3 -1.2 23.906627820330332 20.675391557517557 19.981067250438993 0 0 0 +2594 3 -1.2 21.452691348454255 18.539155715992887 20.662022567312825 0 0 0 +2611 3 -1.2 23.3261929001662 22.4135492505171 23.595700983304486 0 0 0 +2800 3 -1.2 22.436476801349265 18.659392715935613 25.717535344613513 0 0 0 +2802 3 -1.2 25.50348331922547 23.549032000034273 23.244849941533218 0 0 0 +2938 3 -1.2 24.879364567059053 24.786112577394114 25.61110912919781 0 0 0 +2979 3 -1.2 21.90095789852314 21.02907369574277 21.190466888199357 0 0 0 +26 1 3 26.779842248950317 18.596121289561648 24.682459612438432 0 0 0 +311 1 3 25.416673032553977 18.726596908888233 17.789348004497732 0 0 0 +325 1 3 30.116583772423862 22.79511861044235 19.146682431397366 0 0 0 +373 1 3 29.46552865635124 19.22317518008564 25.688667639707187 0 0 0 +378 1 3 28.76963051751729 20.329906093685484 23.14592966552253 0 0 0 +470 1 3 26.828581585321054 24.66384525388304 20.103153907364117 0 0 0 +586 1 3 27.762564970895056 23.774341880786785 17.532040237707136 0 0 0 +2103 3 -1.2 2.722553972294047 32.022485784269584 34.30423525986318 0 0 -1 +958 2 0.6 26.89228638876904 18.691141020214186 20.44239406091206 0 0 0 +985 2 0.6 30.961247268511897 17.201273629523392 22.341193849536776 0 0 0 +1010 2 0.6 28.78876839925474 23.528311910803342 22.08881443728687 0 0 0 +1037 2 0.6 27.777005790336336 21.070174539984066 19.998032753653273 0 0 0 +1132 2 0.6 30.892230431181098 22.63980281918318 25.17622872459073 0 0 0 +1157 2 0.6 28.76416409414136 24.437434430050438 24.65801309410989 0 0 0 +1196 2 0.6 29.82524964438568 19.302291221189467 19.89232233955238 0 0 0 +1269 3 -1.2 29.717702981106086 19.45807476652025 24.143591300761194 0 0 0 +1495 3 -1.2 28.634876802525444 22.895930112098114 18.536016076430478 0 0 0 +1531 3 -1.2 28.0855018358123 18.43898862571475 25.584405308284275 0 0 0 +1584 3 -1.2 30.293923155440236 21.443251878228203 19.739441684234254 0 0 0 +1693 3 -1.2 26.79715259843608 22.50873449483682 25.754805808900624 0 0 0 +1725 3 -1.2 30.225875757493405 23.77984917955282 20.279680594078542 0 0 0 +1726 3 -1.2 29.03774456158848 21.75276987547467 23.460919326644927 0 0 0 +1767 3 -1.2 30.150955304413777 26.121618415415544 25.515537908654093 0 0 0 +1778 3 -1.2 28.758919712918672 19.968997321893326 21.732428725026395 0 0 0 +2228 3 -1.2 27.73236528514023 25.633605467179024 22.901890207089345 0 0 0 +2346 3 -1.2 31.069811847663473 23.148264283170466 18.075842553542586 0 0 0 +2021 3 -1.2 17.4498532574235 17.696683308887813 24.65213986796213 0 0 0 +2547 3 -1.2 27.078958090256236 24.932342995937887 25.914297252871673 0 0 0 +2562 3 -1.2 27.411295071558225 19.729878333902082 23.768303391309644 0 0 0 +2658 3 -1.2 26.995098450556984 23.297976831944805 20.68640814175502 0 0 0 +2715 3 -1.2 26.514555549416457 19.594972267865874 18.362317394121128 0 0 0 +2726 3 -1.2 28.008776888296254 25.57841049828267 20.10694722696575 0 0 0 +194 1 3 3.5028188187019706 29.102361560298323 22.203132808931347 0 0 0 +199 1 3 32.537605044644806 30.618056718929218 21.79450351440501 -1 0 0 +482 1 3 3.23995866910982 31.280033823927045 20.014680002852305 0 0 0 +545 1 3 0.6273600187271432 27.657637777360755 18.723677131917263 0 0 0 +662 2 0.6 1.8935189570119824 32.44703272602641 23.0166058117963 0 0 0 +667 2 0.6 0.6527439470847747 30.11721194244608 20.349182225226528 0 0 0 +747 2 0.6 3.416048273587304 28.165678458328983 19.07471283141046 0 0 0 +776 2 0.6 32.946997407207014 32.84883228153504 24.465496236779128 -1 0 0 +904 2 0.6 1.878322837753384 27.677182827670368 24.654962739283473 0 0 0 +1014 2 0.6 33.28840478689029 28.71449891263481 24.355170051708516 -1 0 0 +1080 2 0.6 0.35538671893168 27.568969735052352 21.98325197118565 0 0 0 +1126 2 0.6 33.1315788046584 30.378271464742628 18.03958453991867 -1 0 0 +1130 2 0.6 5.026507822299855 27.504085586952648 24.79531497640791 0 0 0 +1218 3 -1.2 33.16461784366832 29.33576057163748 22.220313979974737 -1 0 0 +1298 3 -1.2 4.617953768711638 31.989126746683223 21.566367578004524 0 0 0 +1419 3 -1.2 3.7844062791770163 33.36003079523817 26.51644698207349 0 0 0 +1479 3 -1.2 1.392130324438039 27.579273761828407 19.985178968414647 0 0 0 +1490 3 -1.2 4.132562926602499 30.22463505144766 23.119457666247776 0 0 0 +1509 3 -1.2 4.209610542750506 26.264285669092633 19.95448669065029 0 0 0 +1549 3 -1.2 32.27301279419546 31.517975853789064 22.941566225790993 -1 0 0 +1600 3 -1.2 2.1199142118803853 28.81924815616326 22.624419762578103 0 0 0 +1688 3 -1.2 31.9160739036743 27.75692858110295 25.96934626907734 -1 0 0 +1698 3 -1.2 2.192355627239646 31.68859378714723 20.997027371100046 0 0 0 +1780 3 -1.2 0.8416871083252269 29.267173432238437 25.90554112246787 0 0 0 +2014 3 -1.2 0.5603476575746341 31.29248838759657 24.500439521098627 0 0 0 +2114 3 -1.2 1.432523773486327 28.027092179624447 17.52939451454596 0 0 0 +2280 3 -1.2 33.7888481715495 28.517870431401153 19.0039500090544 -1 0 0 +2292 3 -1.2 4.086491096310809 32.263977573298746 19.12386131611903 0 0 0 +2421 3 -1.2 3.2586421530033363 25.905736204911165 24.87253800529351 0 0 0 +1799 3 -1.2 14.692473811197248 29.36025041616784 33.433090896297365 0 0 -1 +2500 3 -1.2 2.4446901840317787 30.581481527713304 18.926435563687686 0 0 0 +2507 3 -1.2 3.735540463159408 29.772082475718303 20.801335241897966 0 0 0 +2670 3 -1.2 33.030801393516704 31.246972574225985 20.56670895670377 -1 0 0 +2762 3 -1.2 6.965229155718771 28.725703079937144 17.774579119822647 0 0 0 +2869 3 -1.2 5.328511216024546 29.82472497610618 27.047121730461672 0 0 0 +2917 3 -1.2 4.396268415965376 27.949170448461157 22.50833023802579 0 0 0 +32 1 3 11.48722312164658 30.759263174897676 21.210286521119514 0 0 0 +232 1 3 9.466855548715452 30.940463934631726 23.306325627562053 0 0 0 +315 1 3 5.805364064330274 29.50486721314821 17.287962806684803 0 0 0 +321 1 3 12.645424369734487 28.016128115605508 23.634881811385597 0 0 0 +447 1 3 5.705413040167452 32.393349511223754 18.36079893118316 0 0 0 +473 1 3 10.092074202425804 28.713075011541974 25.033362362672946 0 0 0 +532 1 3 11.400680902635619 28.99835326101689 18.764643507936956 0 0 0 +535 1 3 5.286183828790969 31.290240637775906 22.69704965652989 0 0 0 +628 2 0.6 12.052088438803152 25.726846641114005 26.328143046722623 0 0 0 +683 2 0.6 6.624782559548993 28.355977455242414 22.230032830064843 0 0 0 +759 2 0.6 11.218365799466891 31.9637445472149 26.222187703185895 0 0 0 +808 2 0.6 13.132289969029946 26.98464798304629 20.408398831767386 0 0 0 +827 2 0.6 8.012952950311973 30.804476898347154 19.606754309937774 0 0 0 +906 2 0.6 14.26102811539332 31.798856419162707 22.363213994819844 0 0 0 +942 2 0.6 8.784862344271893 27.415669563625165 17.896965145226666 0 0 0 +961 2 0.6 12.869063953022197 30.755799851917494 24.64509055037088 0 0 0 +1100 2 0.6 11.46777124559261 31.860155597133627 18.20118091634953 0 0 0 +1120 2 0.6 9.33438661640957 28.234283876925723 20.88729863803963 0 0 0 +1164 2 0.6 6.9687513527518155 30.665445378688453 25.36574106120318 0 0 0 +1240 3 -1.2 5.582067999182461 31.94272697250043 23.99755683846547 0 0 0 +1271 3 -1.2 9.370713154826493 32.44302476036665 18.489380904442687 0 0 0 +1432 3 -1.2 14.08695792083846 28.76064269708635 23.527488036910118 0 0 0 +1448 3 -1.2 12.456800482231943 30.69360549172066 22.305836719639757 0 0 0 +1515 3 -1.2 11.9054753231004 29.88949951302841 20.02212494912601 0 0 0 +1516 3 -1.2 10.051697973823849 30.572418918390504 21.85812497515795 0 0 0 +1632 3 -1.2 9.280518563269782 29.495336878279446 23.90659272669259 0 0 0 +1742 3 -1.2 15.964899091725314 30.226281659206517 21.32828344433575 0 0 0 +1822 3 -1.2 11.046953577660101 27.711397956922404 19.40705498644844 0 0 0 +1842 3 -1.2 12.46251477582906 28.91831052555852 17.74342546711675 0 0 0 +1948 3 -1.2 10.131698897095385 29.654127173506097 18.375630109998767 0 0 0 +1976 3 -1.2 13.057386892014751 26.89520022531627 24.49700847454352 0 0 0 +2029 3 -1.2 5.616934447071082 30.78618381155337 18.169674361516847 0 0 0 +2047 3 -1.2 6.400641709204452 30.418904945193226 22.192500259006792 0 0 0 +2050 3 -1.2 9.868115412997371 27.30266638452255 25.405534660562555 0 0 0 +2142 3 -1.2 14.055197769986021 33.21006243272087 20.86508261641097 0 0 0 +2170 3 -1.2 7.400712466438167 27.129026176206004 20.53836083773503 0 0 0 +2232 3 -1.2 9.853884793813041 29.599740486923253 26.190264301214803 0 0 0 +2313 3 -1.2 9.310883487639675 26.80314647453513 22.975879087704495 0 0 0 +2357 3 -1.2 13.703674650840295 32.27671851506618 18.564378996238958 0 0 0 +2476 3 -1.2 13.562044743493134 32.609213157000724 25.253041397083326 0 0 0 +2484 3 -1.2 14.791423610533878 28.29128557929017 20.305701711803394 0 0 0 +2489 3 -1.2 8.346913286968523 31.855341278376166 23.451364725073898 0 0 0 +2558 3 -1.2 6.5185020091693096 32.59513649736243 19.582683734267604 0 0 0 +2652 3 -1.2 11.580587188499353 28.819385055596484 24.485976695405217 0 0 0 +2666 3 -1.2 12.033254118979393 27.806408079969028 22.32169578387812 0 0 0 +2773 3 -1.2 11.358374741780128 32.18478860094489 20.635314231974295 0 0 0 +2798 3 -1.2 7.296470879173948 27.33343276638428 24.413382525748226 0 0 0 +2959 3 -1.2 10.60092100909482 31.562615861027272 24.05430791308166 0 0 0 +989 2 0.6 18.783586456876705 33.66002194196101 30.006891382506613 0 -1 0 +192 1 3 16.7974830506818 30.681432229014632 22.5532709692856 0 0 0 +255 1 3 15.540965483051778 28.29012943206856 23.79727139789344 0 0 0 +365 1 3 16.045878103594813 29.061152897033715 20.185709002111196 0 0 0 +625 2 0.6 15.575864673803329 31.402988107325772 17.502792889325846 0 0 0 +666 2 0.6 16.777267027761486 25.877402007378844 21.40586409044202 0 0 0 +698 2 0.6 18.59893287328156 27.25397598869663 19.147069082898465 0 0 0 +772 2 0.6 15.623689549200627 32.42595399502328 25.492753172313247 0 0 0 +1066 2 0.6 19.13312396630547 29.411274300197785 20.97277770049768 0 0 0 +1145 2 0.6 18.08831738304429 30.028278656883938 17.621610104714573 0 0 0 +1172 2 0.6 19.624821540884387 30.292660842022883 24.845419121423213 0 0 0 +1364 3 -1.2 17.255862843053972 28.306360354787937 20.715378204190017 0 0 0 +1375 3 -1.2 15.665296850302797 28.333621143798652 25.36053021709244 0 0 0 +1397 3 -1.2 16.407328443031904 29.63299329531377 18.871877042520595 0 0 0 +1477 3 -1.2 18.392931661668296 32.58710214703114 26.183246523664035 0 0 0 +1558 3 -1.2 16.163371032712554 31.714964233618876 23.424026442091655 0 0 0 +1635 3 -1.2 18.188637152161977 31.081624405058193 22.228429651837715 0 0 0 +1781 3 -1.2 16.429038352707284 32.59976304564609 19.633094184986717 0 0 0 +2017 3 -1.2 18.878775789810017 32.339404043263926 19.402608416411276 0 0 0 +2020 3 -1.2 17.470956864015577 28.073879353533886 26.985203212773737 0 0 0 +2179 3 -1.2 16.985048995206363 30.425744270658733 26.396750699964784 0 0 0 +1789 3 -1.2 24.253068865834273 31.951060508136212 33.10819336852734 0 0 -1 +2664 3 -1.2 20.77241130125732 30.81222068972909 20.09911057890499 0 0 0 +2818 3 -1.2 16.63937890841009 29.347197037708014 23.429267425475647 0 0 0 +1 1 3 20.429625559394317 32.13363799348943 19.53417571318246 0 0 0 +233 1 3 22.15229523621067 26.927965321250774 25.622391725058943 0 0 0 +324 1 3 26.47926235838291 26.22456707006068 22.399435239795196 0 0 0 +328 1 3 25.245988053791127 31.316494074928723 18.47828737617018 0 0 0 +379 1 3 24.55736211876576 30.381758151118365 24.956786217858618 0 0 0 +534 1 3 24.69465849179944 28.65167636872479 19.407194095816095 0 0 0 +551 1 3 21.51411341669183 25.50170105360033 21.666408338115502 0 0 0 +594 1 3 20.085331622195362 27.454510179079765 23.427740671291136 0 0 0 +647 2 0.6 21.70735090830651 29.305765178201668 17.566419876877497 0 0 0 +677 2 0.6 20.901284742737865 30.953064309403068 22.778510345328908 0 0 0 +721 2 0.6 23.736849135127216 27.77875285474227 22.1877304213088 0 0 0 +857 2 0.6 21.34240527055265 28.614078840320182 20.34062756049048 0 0 0 +1116 2 0.6 24.557371482271325 31.358410611931866 21.625527984521806 0 0 0 +1274 3 -1.2 21.21199349655398 27.53496330495191 24.56698358936813 0 0 0 +1297 3 -1.2 25.76586293044749 27.76279102877876 18.909724174169593 0 0 0 +1326 3 -1.2 20.713988581461624 26.81106670678632 22.137551923939036 0 0 0 +1408 3 -1.2 25.733779135712858 31.340587733147284 25.0670642673981 0 0 0 +1612 3 -1.2 22.585363039657814 32.71179136873913 24.741530906710206 0 0 0 +1749 3 -1.2 23.364579925375956 28.097834719852166 19.778782163279104 0 0 0 +1760 3 -1.2 20.91047298995289 32.305904888953314 18.031438886883684 0 0 0 +2287 3 -1.2 19.75386365056283 28.85033111185811 23.110692133439297 0 0 0 +2315 3 -1.2 21.706453973576014 30.13325682997314 25.71938125638758 0 0 0 +2323 3 -1.2 20.883059894501972 27.188263713562314 18.592244978902194 0 0 0 +2467 3 -1.2 24.49412216583906 32.15864743023432 19.430063901094396 0 0 0 +2797 3 -1.2 25.102672453777174 29.400677035939786 20.654266859912877 0 0 0 +2826 3 -1.2 24.11751563414074 29.656892912504798 23.811035269443394 0 0 0 +2847 3 -1.2 23.49125493918403 26.755548425770264 24.942946013742514 0 0 0 +2920 3 -1.2 24.528245775727985 29.897225293730433 18.417292976704438 0 0 0 +151 1 3 30.126583781160143 29.092846972416393 22.226680579322206 0 0 0 +1313 3 -1.2 9.902853650143008 34.14952406326882 20.795746153236845 0 -1 0 +514 1 3 29.722627391834706 29.889431289701754 25.14264344135311 0 0 0 +524 1 3 27.187130402447472 29.06550957995981 22.476231291699914 0 0 0 +688 2 0.6 30.23562044113173 26.059694524775818 20.24796209704378 0 0 0 +770 2 0.6 30.512186533425197 33.00439038248371 22.49972876015713 0 0 0 +881 2 0.6 29.895281819141275 26.06649141303697 23.318004976905492 0 0 0 +919 2 0.6 27.493843529448554 27.11515682500524 17.515656937262285 0 0 0 +945 2 0.6 27.136908080027016 32.356613956804864 21.31842043756993 0 0 0 +1021 2 0.6 27.929260679928753 29.265524240313372 19.100457677427585 0 0 0 +1151 2 0.6 31.696266012259922 32.85244555639354 19.79242530725622 0 0 0 +1154 2 0.6 28.466542160098296 32.89750873236778 18.641825960726063 0 0 0 +1551 3 -1.2 29.94660979699794 30.754614007554956 18.540350285558418 0 0 0 +1761 3 -1.2 26.686329449643562 27.708728142059922 21.87223735284747 0 0 0 +2447 3 -1.2 30.43028697781129 27.683957025732784 22.005531716545338 0 0 0 +2512 3 -1.2 30.351231469433614 29.44375145887561 23.807211418748402 0 0 0 +2540 3 -1.2 27.465942711902827 28.531880750718578 23.851493836401783 0 0 0 +2672 3 -1.2 26.64857297117419 31.11894486807359 18.965556481456233 0 0 0 +2718 3 -1.2 30.98295728433116 30.118037538979124 21.52577786367783 0 0 0 +2728 3 -1.2 28.09570415686654 32.48126915745298 26.03294310413901 0 0 0 +2738 3 -1.2 28.64321672945263 29.32299297961528 21.853032441742254 0 0 0 +2844 3 -1.2 28.426629816352687 30.67909591594644 24.679092189643168 0 0 0 +2879 3 -1.2 26.591942848164855 30.412657549519167 22.59486855442752 0 0 0 +2915 3 -1.2 29.652393477938837 28.620923133889182 25.9879032551906 0 0 0 +56 1 3 5.062814771224198 23.9803966401609 29.00034508621962 0 0 0 +73 1 3 33.51931826927803 20.545945123279477 30.01455981969234 -1 0 0 +85 1 3 5.1123338350823975 19.745921553827298 28.80075811768067 0 0 0 +139 1 3 34.15330119900013 25.8884599682941 29.573651272745536 -1 0 0 +216 1 3 33.90893666000967 17.996842984475283 28.525796895046795 -1 0 0 +223 1 3 33.690582296338256 21.7298557443557 27.253892264900845 -1 0 0 +260 1 3 3.030249399873095 24.053583649960153 32.12864055906876 0 0 0 +339 1 3 5.187228147672384 19.383363707986998 32.79587557895108 0 0 0 +405 1 3 0.7183788911806179 19.51117351345996 26.127511328936812 0 0 0 +1640 3 -1.2 14.512217363966132 17.709975478014776 33.61928807801052 0 0 -1 +536 1 3 2.4890224401388505 25.310908784434933 28.358450511464426 0 0 0 +784 2 0.6 0.9183660911146063 22.936674482808105 30.029350753418772 0 0 0 +880 2 0.6 2.7326928016716114 21.436813957742636 29.26061495940404 0 0 0 +994 2 0.6 2.8253089941208356 20.96948576801095 31.586761281299186 0 0 0 +1028 2 0.6 2.859439164939645 17.87019333449566 30.579032003836126 0 0 0 +1084 2 0.6 2.952309681221388 22.313547907879112 26.63111063486972 0 0 0 +1147 2 0.6 1.813299227908711 19.218090893779134 32.714634181083504 0 0 0 +1231 3 -1.2 4.294619056097766 22.906391885849377 28.3154564684947 0 0 0 +1562 3 -1.2 4.768913139612112 20.79668823462223 32.66723639397746 0 0 0 +1681 3 -1.2 0.842803011360492 17.78321718400588 29.215547299029552 0 0 0 +1827 3 -1.2 1.1577682730033616 25.08331527645153 29.241268048758148 0 0 0 +1835 3 -1.2 4.287293683644166 20.11515143620788 29.9846484455356 0 0 0 +1855 3 -1.2 33.1987144213731 19.196038768520864 29.24669935791584 -1 0 0 +1906 3 -1.2 3.8287114696354596 25.07833355144474 29.0991709171214 0 0 0 +1973 3 -1.2 4.5484580558539935 24.256082118450987 32.43413174573001 0 0 0 +1979 3 -1.2 2.267783858464109 24.50542297616328 27.16753238985001 0 0 0 +2113 3 -1.2 33.547142988858575 25.479513106379382 30.847845933131733 -1 0 0 +2359 3 -1.2 4.178373757162765 19.25080926572018 27.794984945840927 0 0 0 +2365 3 -1.2 33.28609014217299 25.858590225157155 28.38912171091642 -1 0 0 +2441 3 -1.2 0.6161472354369302 20.625268766507574 30.39208866152199 0 0 0 +2495 3 -1.2 2.894214296372652 23.17035813815196 30.907677610370023 0 0 0 +2513 3 -1.2 2.3307036573009117 25.32134849958432 31.80696762789223 0 0 0 +2572 3 -1.2 3.984455850607295 18.48354696705779 32.85081363957089 0 0 0 +2615 3 -1.2 32.66721506271913 20.947644421760288 26.549517063876998 -1 0 0 +2896 3 -1.2 33.445863788197755 21.6597961816465 28.81573294620208 -1 0 0 +2923 3 -1.2 32.52972416908695 20.895015537369304 31.040669720828394 -1 0 0 +42 1 3 7.285978918732321 19.342476938782365 30.677228155056685 0 0 0 +136 1 3 10.054145402991093 18.447887673141388 30.94675438679345 0 0 0 +147 1 3 13.579152633799309 19.906887907911035 31.870920043593358 0 0 0 +164 1 3 14.242046373976757 25.971353086985356 29.293931452144623 0 0 0 +261 1 3 9.287841635391619 23.265897339363455 28.84107141387086 0 0 0 +262 1 3 12.88052491836046 24.63441605095089 31.62347449078708 0 0 0 +537 1 3 9.718140047175318 19.78255827635783 33.51684241196428 0 0 0 +538 1 3 6.005482910789704 24.112073551406542 31.785243605506288 0 0 0 +555 1 3 7.754141038123453 20.842101874903854 28.049673349170792 0 0 0 +630 2 0.6 10.747913712279951 26.324816841125195 30.172784521180542 0 0 0 +780 2 0.6 7.738028214106852 17.7971208524547 27.287563981394015 0 0 0 +799 2 0.6 11.973971157229157 19.122314134731443 28.06942159637689 0 0 0 +892 2 0.6 12.930426589253141 22.307535189634905 29.381495291045344 0 0 0 +901 2 0.6 14.888558946273788 23.939441877451618 26.866680690983145 0 0 0 +1977 3 -1.2 10.783953330945778 17.401170788089036 31.83442534085652 0 0 0 +1090 2 0.6 8.940165968748877 24.8535148852573 31.995950830844286 0 0 0 +1124 2 0.6 9.164915563970483 22.542727574035553 32.24962786655672 0 0 0 +1195 2 0.6 9.622996168187063 25.323415773901264 26.46860252681469 0 0 0 +1301 3 -1.2 14.587636930749353 19.14543786433231 30.941935390702852 0 0 0 +1365 3 -1.2 13.36136444352932 25.76129078690726 30.5825827736979 0 0 0 +1563 3 -1.2 6.888513265095686 23.486740543931038 32.78863350214448 0 0 0 +1687 3 -1.2 11.558115341985781 21.210116713997447 27.38594322584943 0 0 0 +1703 3 -1.2 6.605753281457967 25.411376228247054 31.414589923119724 0 0 0 +1746 3 -1.2 11.656277831188 24.093136605440915 31.003443072213983 0 0 0 +1793 3 -1.2 6.1828739070099505 20.8313435568951 28.2872855431704 0 0 0 +1807 3 -1.2 8.838342639159285 23.445061068964673 30.21473765681734 0 0 0 +1910 3 -1.2 12.595597746196812 18.85169364544782 32.39739410996944 0 0 0 +1919 3 -1.2 10.239829275025329 24.115216900187484 28.208522129738654 0 0 0 +1992 3 -1.2 8.461995143155118 18.315909320259088 30.892169802327306 0 0 0 +2023 3 -1.2 10.838100485598597 18.808834037077222 29.77245193241625 0 0 0 +2059 3 -1.2 12.927859135824392 20.912986180547957 31.02446194162546 0 0 0 +559 1 3 14.191723170121817 21.581544247222737 34.22386773152245 0 0 -1 +2130 3 -1.2 6.204878717020352 24.738394889374035 28.47824267688234 0 0 0 +2273 3 -1.2 8.055892105291647 19.986513499970613 26.898029546563876 0 0 0 +2297 3 -1.2 6.177474195267607 18.694501062915464 31.78977068474682 0 0 0 +2416 3 -1.2 11.306624731251457 18.505194939266637 25.953742844033897 0 0 0 +2440 3 -1.2 13.741296310324957 22.210457764143573 27.17234797179477 0 0 0 +2453 3 -1.2 15.617515554244928 20.92564144832407 29.671933703271456 0 0 0 +2517 3 -1.2 7.2476369746148865 20.634486899807747 31.403231252408705 0 0 0 +2637 3 -1.2 15.128702973949421 24.803400933062434 29.135700286281388 0 0 0 +2638 3 -1.2 14.03750196460705 23.736894477202544 31.76701931569772 0 0 0 +2722 3 -1.2 6.429945448358515 23.128903636889223 26.37489713388213 0 0 0 +2776 3 -1.2 5.570235116561181 23.467196911961388 30.40812580477107 0 0 0 +2814 3 -1.2 6.278960462208635 18.87898422284061 29.455127592492527 0 0 0 +2864 3 -1.2 14.168172504908677 19.186944716380516 28.53308015509865 0 0 0 +2918 3 -1.2 8.492427390721174 22.219976633212198 28.08536309649082 0 0 0 +2947 3 -1.2 10.019138093304557 19.706582390989254 31.953894687892813 0 0 0 +2964 3 -1.2 8.216803190159323 20.155602428805626 29.350813991636667 0 0 0 +39 1 3 19.01897648831991 17.58738877592785 30.99836290344355 0 0 0 +66 1 3 18.246585676482912 23.7077253426338 32.31583989275895 0 0 0 +106 1 3 17.938652581511498 24.10861845087755 26.7529602531946 0 0 0 +377 1 3 15.229244564200673 19.491859474762958 29.51295602549495 0 0 0 +528 1 3 19.01167369256002 18.66313034295453 27.126544192972457 0 0 0 +657 2 0.6 15.757582050076628 22.31032589568199 31.713418871348104 0 0 0 +746 2 0.6 17.1832518739758 24.83169607578171 30.000894318243866 0 0 0 +805 2 0.6 18.129346989803924 20.5557322478711 32.91776951566642 0 0 0 +1053 2 0.6 18.247436981098815 20.719161773270564 29.86424685185741 0 0 0 +1061 2 0.6 17.14583887989788 20.90252078476115 26.500800439054633 0 0 0 +1110 2 0.6 16.25549204639191 22.90359411347696 29.358362362670277 0 0 0 +1112 2 0.6 18.5863228097737 26.428723941215566 28.083552498620218 0 0 0 +1283 3 -1.2 17.661618337634458 17.963817371303065 27.389117287807142 0 0 0 +1391 3 -1.2 18.851982490250066 19.97594036036945 27.772055180216473 0 0 0 +2018 3 -1.2 17.9418690321619 23.8458415646597 28.20748377535388 0 0 0 +2115 3 -1.2 17.17172868287696 24.731744905049705 32.25467725956026 0 0 0 +2277 3 -1.2 16.814147058214754 24.976055175323193 26.332514889247943 0 0 0 +2366 3 -1.2 14.41709595483812 20.619017020623176 32.98425020398195 0 0 0 +2516 3 -1.2 16.490016106794823 18.6501650459837 29.322971422074485 0 0 0 +2531 3 -1.2 19.600807103016933 24.560337127331685 32.28117089523565 0 0 0 +2691 3 -1.2 18.685118210633927 18.99409533624604 31.298556204843717 0 0 0 +2827 3 -1.2 16.678876509799657 18.842354779549936 33.2902678481245 0 0 0 +2856 3 -1.2 18.162953957608774 22.87033451961006 31.07029430727399 0 0 0 +2968 3 -1.2 20.52301061131166 24.931055059409736 30.05338550349044 0 0 0 +204 1 3 26.749394201402 19.863339595182403 28.598270855495887 0 0 0 +310 1 3 20.730119696875942 24.32603479345907 25.994009931506145 0 0 0 +374 1 3 21.486785645288204 20.33294201969886 31.332803988252376 0 0 0 +389 1 3 20.44890164332875 25.47928957968169 31.401802437069183 0 0 0 +421 1 3 25.442582166783534 25.91678171986935 30.719657057568647 0 0 0 +465 1 3 23.49649665434828 22.280710539454 34.08039415972193 0 0 0 +468 1 3 22.299793957221613 22.116098689356544 27.358281034597077 0 0 0 +968 2 0.6 26.28939113926683 23.484531201942357 32.21893564614822 0 0 0 +974 2 0.6 22.88967654202907 23.317535591566436 30.98855441898369 0 0 0 +1173 2 0.6 24.59635847623816 22.260057265875545 29.802944946779125 0 0 0 +1182 2 0.6 25.090843230652904 20.15259817211073 31.768349604606975 0 0 0 +1197 2 0.6 19.786646525988232 22.636200891455193 29.31493680249891 0 0 0 +1208 3 -1.2 20.61573652022825 20.599962439864782 30.20181852640912 0 0 0 +1348 3 -1.2 22.857692966727857 20.857758610467187 31.142872920894902 0 0 0 +1373 3 -1.2 26.32230281816681 18.275397504736183 28.084544219467276 0 0 0 +1447 3 -1.2 25.605722368643008 20.248617561762924 29.422025307683416 0 0 0 +69 1 3 14.910116731215256 30.825027148635975 33.89283485998417 0 0 -1 +1886 3 -1.2 21.735356421070904 19.092352151757563 32.42016362644176 0 0 0 +1951 3 -1.2 21.846287347731106 25.80267680555297 32.11910578333631 0 0 0 +1967 3 -1.2 23.471522130689824 22.222987092980546 26.484846989775903 0 0 0 +1985 3 -1.2 24.878773816485165 24.52838813702854 30.649765622191772 0 0 0 +2056 3 -1.2 21.725436481942697 20.63320762641307 27.085171907256946 0 0 0 +2069 3 -1.2 25.459115885040415 17.792795428596996 32.18786771229647 0 0 0 +2291 3 -1.2 22.46181662781471 22.588495716648232 28.7349412545023 0 0 0 +2560 3 -1.2 19.82518144516487 17.390394991155787 27.67223726931699 0 0 0 +2609 3 -1.2 21.094621012586323 23.05008850094262 26.759049928520405 0 0 0 +2612 3 -1.2 25.5389525544741 27.196056486743966 26.00576564932363 0 0 0 +2687 3 -1.2 20.378529223829926 17.46827082047477 30.444304142483524 0 0 0 +2768 3 -1.2 25.876584551666646 23.57816350049934 27.6284286718385 0 0 0 +2889 3 -1.2 20.893833383085564 20.906205660739836 32.70319956828821 0 0 0 +103 1 3 27.28085566786133 17.329089133657774 28.898767485084964 0 0 0 +155 1 3 28.42328861631187 21.92961199699212 30.28794738063144 0 0 0 +265 1 3 29.60935060885451 19.800469655483447 31.852796324759176 0 0 0 +278 1 3 29.367510197666252 25.23559962453869 32.999467037733574 0 0 0 +511 1 3 27.84448564750646 21.691631592817394 26.617707103933 0 0 0 +1011 2 0.6 31.888650288412293 22.47599215609881 32.748018050217674 0 0 0 +1032 2 0.6 31.013046215758845 23.512876474727534 28.813334566692713 0 0 0 +1094 2 0.6 27.611517941161356 24.485553105113375 28.714086239921993 0 0 0 +1385 3 -1.2 29.062070040601842 23.227043236974293 29.99253999550057 0 0 0 +1644 3 -1.2 26.454870725768167 26.18259174268582 29.614130948785704 0 0 0 +1831 3 -1.2 28.978344832745137 20.725702157929295 26.003578671860286 0 0 0 +1864 3 -1.2 27.834720706485673 18.81885909245883 29.242088729191046 0 0 0 +1895 3 -1.2 28.69056941751706 22.78608490460375 27.147899256061805 0 0 0 +2026 3 -1.2 28.1976357750066 19.44912461949189 32.45712086517495 0 0 0 +2145 3 -1.2 29.554344565064707 20.930787354055433 30.863966896518082 0 0 0 +2209 3 -1.2 29.50358187524123 25.843586996499376 31.612212432439076 0 0 0 +2246 3 -1.2 27.383195725535714 21.887828298921875 31.319340461504442 0 0 0 +2247 3 -1.2 30.349183326375073 18.734393108058065 26.7125378259523 0 0 0 +2332 3 -1.2 26.94840435387362 20.53887570068314 27.175161574749918 0 0 0 +2392 3 -1.2 27.87399569513973 21.190349555544746 29.051254029398006 0 0 0 +2457 3 -1.2 30.204511851815642 18.489379037522706 31.334771139334862 0 0 0 +2566 3 -1.2 30.312489190517965 27.088704381957587 27.82799172413276 0 0 0 +1884 3 -1.2 6.386703004609487 22.954059006776212 18.121380683128077 0 0 0 +2808 3 -1.2 26.172456857484008 26.11588081663611 32.03009891886017 0 0 0 +35 1 3 5.4378259441220385 28.635006071630496 27.928424951764736 0 0 0 +48 1 3 0.40354470246208507 31.25630026489363 31.52090693059358 0 0 0 +82 1 3 1.7844416213468883 28.00584501595894 29.26964827780836 0 0 0 +108 1 3 0.33410764859725683 30.69802286470738 25.844384175593696 0 0 0 +135 1 3 3.411490926440193 31.409504645839164 31.004349121402896 0 0 0 +314 1 3 4.138126689255688 28.606983984468098 30.713811825109843 0 0 0 +604 2 0.6 33.563862343649774 28.25069840761351 27.313725551558896 -1 0 0 +635 2 0.6 33.5782609622456 31.32544538313196 28.428020605693234 -1 0 0 +771 2 0.6 1.9963872916640004 32.059765806011136 28.56057180618883 0 0 0 +872 2 0.6 0.4024311951841696 25.232428408159507 32.9459867225428 0 0 0 +875 2 0.6 3.212588941183427 30.711357442463743 26.44097876658801 0 0 0 +1095 2 0.6 4.973654682746035 31.94683166922409 27.725556768942894 0 0 0 +1220 3 -1.2 3.7337951705734924 29.957926732037706 31.439507582889746 0 0 0 +1232 3 -1.2 1.898223427219323 31.72178338349464 31.16579232648842 0 0 0 +1396 3 -1.2 33.87544406641854 32.56712525159822 31.585708749150715 -1 0 0 +1401 3 -1.2 1.7795442990878467 29.37340274222582 28.78557635503397 0 0 0 +1487 3 -1.2 0.41869791411855106 27.363992743021956 29.649235899270604 0 0 0 +1548 3 -1.2 4.404604981083629 28.74201994805622 29.160159167837833 0 0 0 +1663 3 -1.2 33.2086360290721 30.645443079321538 26.23864576069761 -1 0 0 +1710 3 -1.2 5.267591520452626 28.02736933893409 31.393027501029948 0 0 0 +1920 3 -1.2 4.342439156262358 32.46427157081074 31.67141620228885 0 0 0 +2066 3 -1.2 0.37520271410915096 30.531726993690725 32.807730281308515 0 0 0 +2295 3 -1.2 1.0174865058072668 31.563286665456435 26.869369814873647 0 0 0 +2499 3 -1.2 3.800132060967667 31.43327582054644 29.581206550641973 0 0 0 +2582 3 -1.2 2.306463487471301 26.88620194367533 28.286182619860483 0 0 0 +2867 3 -1.2 34.13617270411941 30.47209051667769 30.425002271783878 -1 0 0 +2887 3 -1.2 2.728618951842007 27.955539924667132 30.52335922826428 0 0 0 +24 1 3 9.577489246394926 30.771536180064388 31.86430843151707 0 0 0 +28 1 3 8.231281497578786 28.32482457938734 29.096649631085672 0 0 0 +65 1 3 8.520175719042848 28.060200862897442 32.11480967610419 0 0 0 +88 1 3 12.138117918801665 31.043784948438176 33.0057612156811 0 0 0 +172 1 3 13.965693529094626 30.20056145099191 27.995170394407765 0 0 0 +294 1 3 14.754971861595887 28.187582804074015 32.41476066299725 0 0 0 +399 1 3 12.693201086526782 29.353540614988272 30.531541383176066 0 0 0 +653 2 0.6 11.327532336431341 27.82254920289581 27.630773511392906 0 0 0 +678 2 0.6 13.407873050281509 32.498476144122336 30.23510822955759 0 0 0 +689 2 0.6 6.534756861772656 31.549478741418692 32.54401158985319 0 0 0 +720 2 0.6 10.68699049466995 30.261334614901493 28.013277549306924 0 0 0 +2240 3 -1.2 27.95801289393829 17.175948563215364 21.889742865923164 0 0 0 +975 2 0.6 6.9532073897204425 25.818444506749664 26.736620274188276 0 0 0 +1052 2 0.6 7.417497135343514 31.303238105682937 29.246829578079623 0 0 0 +1114 2 0.6 10.112369757963956 32.476406059756826 29.17313987111642 0 0 0 +1281 3 -1.2 8.10366767938888 27.93364047563142 30.636411267186336 0 0 0 +1427 3 -1.2 8.880497568962824 29.64009689338898 28.951365827354138 0 0 0 +1433 3 -1.2 13.553781492233089 31.498206023084883 33.50953344229263 0 0 0 +1437 3 -1.2 11.941272980403875 28.414504077435637 29.66124350998598 0 0 0 +1554 3 -1.2 14.668526419172961 31.500012376840044 27.81997528236919 0 0 0 +1627 3 -1.2 8.544365827688644 31.637127430771105 31.273579900420074 0 0 0 +1651 3 -1.2 10.733026672851024 31.603741603822957 32.53743228913392 0 0 0 +1672 3 -1.2 6.2561072970050535 33.235063992811995 28.891279520244133 0 0 0 +1757 3 -1.2 8.780237499018083 27.19752019215209 28.33764722400742 0 0 0 +1838 3 -1.2 12.086689308943724 31.547308124955755 28.844508302595727 0 0 0 +1889 3 -1.2 8.67263344036685 29.578043157996973 32.51147913607513 0 0 0 +1981 3 -1.2 5.309620417072707 27.376626591354526 27.197278124486665 0 0 0 +2183 3 -1.2 13.474219030821503 28.365337251026567 31.553020981514653 0 0 0 +2409 3 -1.2 7.4735686394681675 27.583199427843073 33.19897046219898 0 0 0 +2514 3 -1.2 13.421323583426645 26.169153929798604 28.07512907710118 0 0 0 +2579 3 -1.2 6.742923275515678 28.759263248673882 28.7660343720385 0 0 0 +2617 3 -1.2 12.916316600618236 29.810609182838796 27.020737503070734 0 0 0 +2654 3 -1.2 13.846017107669821 29.800718629343045 29.51442678097018 0 0 0 +2835 3 -1.2 7.8330216816137295 33.06045183643913 27.138788320107682 0 0 0 +2910 3 -1.2 12.700722536179294 30.59861436471634 31.508532722089864 0 0 0 +2962 3 -1.2 10.392853246698673 29.821300526469606 31.052584311063914 0 0 0 +95 1 3 18.094813367944905 31.336816893031987 27.136532165837345 0 0 0 +124 1 3 16.37603976015029 28.987894163544595 26.611903415495384 0 0 0 +508 1 3 16.5123605696535 27.983036490889493 30.083792879445983 0 0 0 +613 2 0.6 17.577259391830598 31.15297428317748 30.494469857984992 0 0 0 +758 2 0.6 15.846817649698037 33.118853266861954 28.891104764282762 0 0 0 +807 2 0.6 19.450540879018178 28.621392182088773 28.291751192338285 0 0 0 +1234 3 -1.2 17.5550812434303 26.942543720434145 29.99286946582158 0 0 0 +1410 3 -1.2 20.023055818591658 27.01574014089765 31.413413063338727 0 0 0 +1534 3 -1.2 15.157796768055883 27.262525170149978 29.558812743494386 0 0 0 +1537 3 -1.2 15.164437948804338 29.146653288099895 27.54585642826198 0 0 0 +1716 3 -1.2 17.68926199600375 31.948278383912 28.399410635047936 0 0 0 +1785 3 -1.2 20.51937693914022 31.717940324451618 32.29822879851375 0 0 0 +1858 3 -1.2 15.99705989615335 28.46587201807628 31.489911832731238 0 0 0 +1943 3 -1.2 16.04768558275259 31.38204055563345 33.05490682686678 0 0 0 +2158 3 -1.2 19.2726788763005 30.457376388231353 27.16141293065472 0 0 0 +2160 3 -1.2 17.02694189294542 29.216661892990672 29.444106436777798 0 0 0 +2796 3 -1.2 15.010419934547496 26.83855198753946 32.9127720961792 0 0 0 +2878 3 -1.2 17.75103500300357 32.918428985157746 32.09123577495 0 0 0 +68 1 3 24.003967054113527 31.593342267776652 31.54317374016656 0 0 0 +99 1 3 21.058223307992996 31.228756034527112 30.89886117357534 0 0 0 +282 1 3 24.998083330456595 26.222500793466196 25.04064738207444 0 0 0 +383 1 3 22.492335298683386 29.61581167949734 26.85448823796848 0 0 0 +460 1 3 22.35917789593926 26.988107708841085 33.049353550692345 0 0 0 +500 1 3 20.892096122835298 28.27600617096763 30.91735079091225 0 0 0 +866 2 0.6 25.31322843718415 28.441730848230026 32.49932497594597 0 0 0 +900 2 0.6 24.263565730084558 33.01540074368455 27.155647680432935 0 0 0 +1004 2 0.6 23.14185349509386 26.837802389250772 28.801847106888335 0 0 0 +1206 3 -1.2 23.98106669204635 32.92625792973866 30.9057904530496 0 0 0 +1494 3 -1.2 21.266297436822487 27.794631642371982 29.58029134766115 0 0 0 +1506 3 -1.2 23.973490886644214 29.95534648654398 26.27216433193969 0 0 0 +1544 3 -1.2 20.659669840685925 32.156288850638965 29.860866313058576 0 0 0 +1587 3 -1.2 25.029577532770634 30.61664486752802 31.15503546320949 0 0 0 +1652 3 -1.2 22.561800172522208 30.97433363504557 31.266937191858034 0 0 0 +1715 3 -1.2 21.922391166345317 28.18325080713488 32.08959116724188 0 0 0 +1804 3 -1.2 22.48867306553968 30.147853460266514 28.211351207005134 0 0 0 +1821 3 -1.2 24.3375861525184 26.941081399500174 30.59664340744477 0 0 0 +1832 3 -1.2 22.32479691283591 28.008277884077774 26.736411597100492 0 0 0 +2256 3 -1.2 20.45459173675879 29.756120311379586 30.74495574121877 0 0 0 +2210 3 -1.2 15.23142751604431 22.627919796235314 34.29889705309525 0 0 -1 +41 1 3 27.244619672513455 31.250597116510754 25.57053494835312 0 0 0 +101 1 3 28.30565734528095 30.151382748734846 31.829109252836695 0 0 0 +198 1 3 27.884004672574488 33.09336068365173 31.657702780548178 0 0 0 +428 1 3 30.554377815951288 27.28018528129299 26.36362904359084 0 0 0 +600 1 3 29.678616163118917 32.694182366134235 25.932354381435935 0 0 0 +789 2 0.6 31.053181736108563 32.05378568619356 31.022261095137267 0 0 0 +954 2 0.6 25.967763046368084 29.52300119574905 29.27485830289994 0 0 0 +1097 2 0.6 27.902579497845572 27.35254586668317 31.133493329918664 0 0 0 +1129 2 0.6 30.253659080422512 29.05267325845398 29.580749068350435 0 0 0 +1161 2 0.6 31.842959675575155 26.283521703085185 32.092010910850185 0 0 0 +1162 2 0.6 29.892304252784886 25.654197185263133 29.494618371284716 0 0 0 +1167 2 0.6 32.36026560254228 31.439403165786477 33.67193851169547 0 0 0 +1174 2 0.6 27.35523821945234 26.988316512977377 27.352692936099224 0 0 0 +1759 3 -1.2 27.68652475660505 31.6264404029151 32.09397975672502 0 0 0 +1773 3 -1.2 27.125321622059406 30.25451628366027 26.640073032732122 0 0 0 +1974 3 -1.2 27.974197022136682 29.68119145679377 30.44519962035491 0 0 0 +2112 3 -1.2 29.799581034830577 30.20200196658729 31.873619099131226 0 0 0 +2919 3 -1.2 30.15889275240846 31.167156234011653 26.0509168026761 0 0 0 +104 1 3 11.56708316290257 25.09613761479259 34.28542387499927 0 0 -1 +1357 3 -1.2 19.806196211590787 34.27072340920564 27.70477028663223 0 -1 0 +2385 3 -1.2 5.228858933885665 33.67719188212676 17.507618957073625 0 -1 0 +2109 3 -1.2 24.847020823894933 21.987920039299883 17.361837390980373 0 0 0 +2362 3 -1.2 21.350272654465616 26.876273537839396 34.24397953613884 0 0 -1 +121 1 3 13.935559999107541 33.47126201429554 19.401380570346824 0 -1 0 +197 1 3 11.410674623447768 33.75617242891952 20.76238755257348 0 -1 0 +731 2 0.6 18.234612503282783 27.838667904992334 34.210608688110646 0 0 -1 +664 2 0.6 12.161119810104168 33.30804331986568 23.875302937499587 0 -1 0 +960 2 0.6 9.594826493049219 33.887315755894086 25.105474036167948 0 -1 0 +1111 2 0.6 12.935409836803062 32.797822580728834 27.264268044514054 0 -1 0 +1438 3 -1.2 12.297468623458593 34.037561948706205 19.541835781332306 0 -1 0 +1706 3 -1.2 5.068279688889488 26.845375962605722 34.02894632310891 0 0 -1 +1878 3 -1.2 12.647882679077654 18.639351296327327 17.537241950200364 0 0 0 +340 1 3 17.65180911872046 33.39543444027544 19.725278500436055 0 -1 0 +357 1 3 18.944257417375898 34.085988439576035 26.361539883313025 0 -1 0 +806 2 0.6 18.39822968655497 33.71499372023323 23.08814877718653 0 -1 0 +1682 3 -1.2 8.593031281859455 33.8338003831565 33.855695029417866 0 0 -1 +1446 3 -1.2 20.785536866299836 33.242972234869924 20.590415462976704 0 -1 0 +2554 3 -1.2 4.472099360449758 28.86206446500614 17.364661435700782 0 0 0 +2373 3 -1.2 6.11192988870178 34.30234656597993 31.488116385694337 0 -1 -1 +2111 3 -1.2 7.165466325472427 32.353452650579605 17.305011379365467 0 0 0 +2275 3 -1.2 33.5597431391052 22.44089713245788 34.18003151915722 -1 0 -1 +2694 3 -1.2 28.562308549373064 24.97594829907748 17.20239048476152 0 0 0 +2399 3 -1.2 30.163439147126848 33.15524331285155 24.644149032624078 0 -1 0 +1455 3 -1.2 8.501337170475972 34.07282513935247 29.35559699981984 0 -1 0 +234 1 3 33.86900928169079 34.00379284622691 32.323281042542646 -1 -1 0 +1808 3 -1.2 2.2695726629781516 23.1415589492344 33.17079144610138 0 0 -1 +251 1 3 7.458414888201889 33.91215328295214 28.325315004886416 0 -1 0 +349 1 3 4.699061945518513 33.976178640122455 31.33843158932629 0 -1 0 +796 2 0.6 5.939233566619419 33.25626250641655 25.62558843841134 0 -1 0 +2552 3 -1.2 30.10086356271143 32.35847710609882 33.983091829174604 0 0 -1 +1229 3 -1.2 15.850208441372686 33.6733204915767 33.586229855903646 0 -1 -1 +33 1 3 16.298583199405865 32.907001008986335 32.39342735829258 0 -1 0 +1668 3 -1.2 33.234903621301335 33.64188256516464 33.628655019016016 -1 0 -1 +158 1 3 21.875930136943595 33.833211698179454 25.379447077641217 0 -1 0 +2400 3 -1.2 17.875371915094064 34.025983134917496 21.031393182638272 0 -1 0 +1685 3 -1.2 15.445473955927982 32.78648378910371 31.17913543071298 0 -1 0 +804 2 0.6 19.685737790968826 34.036925856103075 32.27897454085586 0 -1 0 +1353 3 -1.2 27.650553064225534 29.277430098895945 32.84531201512487 0 0 -1 +2544 3 -1.2 19.40523515843861 29.792981748344697 33.25990872136978 0 0 -1 +22 1 3 20.242886535067235 30.94615805029593 33.67637375068205 0 0 -1 +1018 2 0.6 0.30403145133282017 28.04593294325651 33.898112798471125 0 0 -1 +1718 3 -1.2 29.021706445534964 33.08009133011165 30.729991787389086 0 -1 0 +2653 3 -1.2 26.62241849158856 33.699911548417674 30.918818094343695 0 -1 0 +2868 3 -1.2 29.855526050650404 33.97530473333052 26.85445577382759 0 -1 0 +2006 3 -1.2 23.717510731781537 27.086055676507684 33.535734490582136 0 0 -1 +2328 3 -1.2 20.279908594793074 33.72710809477708 25.41233714429977 0 -1 0 +1546 3 -1.2 0.17704332974644446 17.838838514056796 32.84139891179603 0 0 -1 +1916 3 -1.2 12.465134408840337 25.30200446553804 33.003566163026505 0 0 -1 +332 1 3 1.8466997652927999 19.689164720122598 17.738069562692164 0 0 0 +1015 2 0.6 8.426738888861683 34.0620529807857 31.615367234805042 0 -1 0 +1153 2 0.6 6.855682335738527 21.627929018536523 33.971924677715144 0 0 -1 +1636 3 -1.2 10.314036310473009 24.426161388883507 33.871187721060416 0 0 -1 +1653 3 -1.2 10.962309410813132 19.661852691990315 34.29465332001776 0 0 -1 +1770 3 -1.2 8.901719042863208 18.529726830698273 33.705411218861805 0 0 -1 +2486 3 -1.2 1.4198841158830184 34.247971981230165 29.472581247538916 0 -1 0 +2841 3 -1.2 9.015390726100787 21.04190499136452 33.83168209528647 0 0 -1 +2335 3 -1.2 1.399710698024451 21.113318142772282 17.657544627508 0 0 0 +305 1 3 15.953834929889657 17.557448997426206 33.451839814841385 0 0 -1 +436 1 3 21.63820161661879 19.832047714915404 33.796567682647435 0 0 -1 +1661 3 -1.2 29.161759260213003 26.406779227583048 33.93255265719385 0 0 -1 +633 2 0.6 15.299236015026862 24.74668291739524 33.6225565663343 0 0 -1 +2071 3 -1.2 11.704141536050303 29.73605256040667 33.56356896485159 0 0 -1 +1670 3 -1.2 9.710044430756625 27.2220620136525 32.34255639183257 0 0 -1 +1883 3 -1.2 5.682586886412662 29.3235119204162 33.777458258057415 0 0 -1 +2709 3 -1.2 18.171029949092127 22.801282204779955 33.47660144061498 0 0 -1 +1667 3 -1.2 21.595697030653596 30.739994521826453 34.21080271534359 0 0 -1 +1473 3 -1.2 22.934072072854793 20.766057946471268 33.996334432268156 0 0 -1 +1367 3 -1.2 12.702563352200938 33.91285341700243 31.803377513941175 0 -1 0 +2534 3 -1.2 22.418453499538828 23.12950388187328 33.49027277943619 0 0 -1 +2890 3 -1.2 24.76201986619286 22.35652665133654 33.29663690413609 0 0 -1 +238 1 3 28.405914984138658 19.754126737840178 34.003334792322995 0 0 -1 +1511 3 -1.2 29.88002139167545 20.084608027022924 33.357290959798924 0 0 -1 +959 2 0.6 7.096093254489137 33.673423284997575 23.76058036605051 0 -1 0 +2161 3 -1.2 28.279363686538346 24.23143644583978 33.18781359401508 0 0 -1 +2805 3 -1.2 30.71842946004303 24.597040626946416 33.30428222135357 0 0 -1 +661 2 0.6 3.421493796505887 29.947819494859825 33.97908471707138 0 0 -1 +1896 3 -1.2 10.561593469686441 34.10499025265973 27.3614370699776 0 -1 0 +375 1 3 5.224656670463271 17.426043482911233 25.39408370389685 0 0 0 +2679 3 -1.2 22.101466988074794 33.95690895099397 26.91878608156411 0 0 0 +1583 3 -1.2 5.9613408827543735 19.286802462504024 34.16995256208061 0 0 -1 +496 1 3 30.125865938169714 30.04269438962636 17.217808946534966 0 0 0 +331 1 3 12.287448105569322 17.306090698451357 32.62556565238202 0 0 -1 +499 1 3 8.491509694657099 33.1522187971544 17.475626266348527 0 -1 0 +1595 3 -1.2 3.9079040572850428 34.23599371196148 29.961138887380294 0 -1 0 +1972 3 -1.2 22.911775545911496 33.96008405548226 33.44799501327432 0 -1 -1 +1290 3 -1.2 27.27102834431296 33.895869062299674 23.224007440382554 0 -1 0 +2892 3 -1.2 27.667619691278315 33.954693961843695 33.03681972939866 0 -1 -1 +723 2 0.6 18.683722598085268 17.22824250883071 18.837125755611094 0 0 0 +2520 3 -1.2 25.320373801055684 34.043120645271124 34.091131224227844 0 -1 -1 +2786 3 -1.2 11.91358867497534 34.30053717766199 22.014181864087526 0 -1 0 + +Velocities + +8 -4.906937371491656 -0.9692017044987202 9.2982584269095 +17 8.283401704991448 3.0124777353239613 1.0430409686638944 +34 -9.346485256217596 1.889903417184633 6.827404836783306 +122 13.080740890058186 13.662551707079936 14.225893491088785 +2961 -14.913707403493136 -12.675235364215089 15.918125204535135 +1707 -3.1820793583934694 -19.299243123467306 -5.596178928674329 +318 -9.5266248745913 -11.68781276069103 -0.8791213479480671 +2958 -1.3461353882989202 -7.497702223954132 -12.98551973215651 +458 8.614872977431984 -3.3116432364194464 -8.73055724590433 +582 -2.06263412890504 1.3012080392320102 -0.23444521686995343 +2928 -17.474910611306743 14.314257981185605 8.289528385024994 +2807 -1.2117592027804132 16.960561158736724 0.6264138114928075 +782 -4.064007958308133 -0.8706443455211429 -14.134209003087703 +2651 -1.2309297830731438 8.30479875801477 7.727533630149389 +2619 7.426149148221799 -15.862414292712579 -13.329292153035455 +1081 13.07860754974467 -1.2045631213212127 -2.612235566836085 +2596 -13.867370438958972 14.636015125817625 7.424743224039422 +584 2.812258501467079 -8.527177152371458 -5.855992297550492 +2592 10.937770260415009 18.454646875074943 -11.00242060106704 +1418 -17.985167919344978 -17.501397433997237 -7.024079326375344 +1468 -2.825569117306523 15.228947819889088 17.816799093280963 +289 13.138418140540105 -2.8531867705476164 6.548423509456814 +2450 -4.681072808551039 -11.768645867871276 6.882009591047051 +1547 2.14685837489391 -11.899337698706637 5.153672795586491 +1576 -2.740258972814682 -1.1052888845576188 -3.7693954460531804 +1664 -13.733827542684422 -14.103836387015452 -8.449450691768478 +1686 -12.303583083249961 -1.3080435538794966 -1.6741589399393544 +1704 17.06078477167367 7.082262474410307 -2.295956971988685 +1932 -15.682419614646438 1.276080674598199 3.8327388643807354 +569 -4.628225020898561 7.379283390143609 -13.149483471761528 +191 5.229066446755509 -8.204278572164906 12.74961189591163 +2086 10.011376137135505 8.178578159644173 2.7611557251466343 +2157 -13.675184862330557 -8.321871989697048 9.523218056630316 +6 2.2194798216452276 0.2884000487500194 -8.728011371809654 +2225 -10.957161721693213 13.621755855030218 9.733998094545727 +2398 -13.382281448248156 15.377986943142224 14.36389897508097 +2088 6.465491648805453 -14.107707154076227 4.880612462608531 +2317 -2.8709040089235645 -2.0471467121157905 0.4072160337574496 +2318 -1.1093412968529164 13.805312896561457 -1.471588109650163 +2333 9.92352440387252 -18.203667612541945 -12.97917583460034 +2891 16.984311457213984 15.165011239718403 1.4463056194017725 +2541 10.568410012230956 3.1145220850850532 18.41573786494483 +2548 12.373531916654766 6.39889869766154 -4.035339074962509 +2656 -6.041728436026699 8.417405430853727 19.04280055923228 +1363 -16.702429234591225 -14.674737598242055 -1.2955775390436777 +2906 -10.918834522872867 -8.494397302215996 10.173960908339968 +2916 3.5158801840373006 -9.054041425115747 10.560604708445414 +2998 -11.059228685422807 -16.517732934994633 -14.030370142844722 +11 -9.501529972356671 -12.445199757807622 1.8768715967663412 +2148 -3.444921066358367 -8.068278208181583 -0.3655564046967043 +203 -5.819694635003162 10.148658838974534 -2.608276816283115 +222 -3.555247265703014 13.080303834957718 2.8532982344945226 +225 2.7040384948948 3.5712774236396996 12.680925920667686 +342 -7.5318362690340575 -5.783488286380358 -4.501774576499363 +2124 9.343976498128749 0.39730107979224594 9.953598755895356 +1940 4.1742190389991825 3.21472850217034 17.285019204173643 +505 9.427922693446137 -0.10461914984209345 5.394389944887571 +549 0.8992636533009057 8.188470510546022 9.644377939293438 +2219 -1.8596303110379642 -15.341902770848243 -5.13617782457346 +573 -3.9928091871135134 10.95400475755494 11.963493419581914 +1966 13.642225120454766 8.321295578159935 10.63843180310241 +588 4.834219922076892 3.374747132312193 5.3101086445992 +596 -3.6806859412945925 -10.698966483670864 -0.7511584150401532 +623 5.06710346955251 -8.83652174502126 -6.92425035825292 +649 -15.436623710237477 -0.19088499382386723 -0.2879627566727976 +684 -4.016060041338036 -12.407509397081501 5.159090381412875 +716 -6.891834687580734 11.68444060652071 12.534442744388949 +735 6.887875740210256 -10.47957726734983 6.277274064902867 +2503 -16.072895855398613 -16.223328056266148 -4.288417475713153 +2840 16.46593904202134 3.730840169953399 -9.277191439011668 +815 11.836566133265917 -16.21030778355435 12.011544352242314 +845 13.694457508530652 -15.214676407894265 5.287161037967109 +1001 -1.1551987367858747 7.115108810893529 -14.251323412229324 +1023 14.273797112480771 11.063681033556312 9.420470979826838 +1041 12.354144515563963 -14.379895744148918 8.90458105864647 +1666 -5.132533382301637 3.9798701515888513 -17.483705338846775 +1089 -1.692703393261826 -2.6571911093572433 6.906635884339151 +1135 15.281926258121228 -14.481983779603883 -6.702219251412939 +1082 5.475536198435329 -10.446694182959467 3.112969627495644 +1202 13.1212579522795 -7.529866298137869 -4.8647985246167025 +1273 14.674911585107889 2.173707429514394 0.9319183664904781 +2790 -14.479170770396182 0.6797586297276698 14.861909260019013 +1308 -6.558481012705894 -14.985162315767623 -5.9318028619172996 +1344 -0.4178166402609711 -4.067487765734669 -14.307324439489287 +2496 -8.788171707716138 18.325928434797227 -18.757004866595697 +1599 -2.3433193838492383 7.444545549484206 11.67718707291225 +1453 14.721099677453513 -5.40347596561309 -10.659065810346434 +1645 -14.332517667174532 -3.681957585215882 -1.5503049063824446 +560 5.058999630590357 6.6691223509247735 -5.384646001223826 +2763 -11.144257149022119 4.550714530218634 13.600258626052483 +1888 -10.90699428903104 -5.460699984625873 7.402410951847029 +1915 -8.122075093784098 4.207263083931951 2.5861190287209395 +1998 -11.65840528161114 -14.271983965269227 -12.608173190070575 +2684 18.816154391502067 -2.76653408769428 -18.885453014401055 +2085 12.09091383379653 -1.2074886401865301 3.0523048845063445 +2580 -12.420033858915923 1.154898448366806 5.160236358247142 +2164 -2.737175028783504 11.533535875038991 -9.224003319152159 +2173 5.94399501034554 0.335346467995682 -12.298974826540967 +2188 0.7741647127786205 1.9285782737987263 -3.6864316446289522 +2387 11.37236414587427 -6.421141250064334 12.791362556827957 +2204 19.688808896074676 5.747282186218481 18.292273373759972 +2215 9.536493762494683 -16.985910231253627 -4.888651315158156 +2234 -6.812649580927938 -14.756828031943646 -9.233706727656466 +2302 -18.55608800176783 -10.664692476596565 -16.466042572988453 +2446 -14.010447760753259 0.7098446457420797 11.008286973046445 +2330 -3.0998672474526336 -9.316084574868082 -3.9800850701328003 +2455 -12.575145035945637 -19.05916411157516 -7.469551014667834 +693 -1.7188495636205692 15.646726789337626 5.1295636652176135 +2523 -11.322686390114717 -15.639825010598697 4.391627956923875 +2549 -4.425053129282815 19.114643201438728 -10.0695513943913 +1930 12.919410980196837 9.821037707439789 15.690884555810499 +2957 15.57661880732168 -10.532744342410275 6.376984641555096 +213 -6.8640399572800295 6.808541756609664 -0.14769031703099272 +1498 -5.174302493860307 7.440818488225414 -11.77050893120244 +464 -11.281246849123585 -9.206200678375865 -9.964354781235862 +512 14.307218942269438 7.741623120363307 -7.700325174540903 +1199 -5.798573630496881 11.027101845523456 15.856161943317023 +615 4.658831046958369 -4.532081513289401 14.471431699836597 +619 5.948317567682026 -9.513975374934557 -14.714130804033994 +779 -10.244907765530343 -8.378696743922676 4.203990766174721 +835 15.724206908493825 -3.040443525070138 6.67562887380089 +1045 -7.5469141027988815 -12.412816130542616 14.05652176863953 +1191 8.33115462407806 -13.649341360277573 -6.3263729588315325 +1467 -11.533373221841313 9.91164824898817 10.054376035792458 +1345 -0.41864330451049736 -17.961233807520422 -14.468562367563617 +1351 6.29149540501694 1.0141164225067678 -9.381917927363615 +1406 3.2850212845683973 -8.990330131256933 -16.04831143367508 +1293 17.98292761960366 -14.899831036996035 17.282186845674637 +1137 -14.918879738501152 4.422588734754307 16.385565384696125 +2401 -11.751551571715192 -12.060778848028752 -3.8691663655709196 +1905 -11.571894626076807 -10.429231578588327 -17.57000956101481 +2267 -2.250270114324731 3.602715551834568 -7.051406680109752 +1995 -7.688561648187334 0.3655447621525599 -14.265538373055069 +2008 -11.194717194730162 18.715222907948444 18.073458367396842 +2015 15.261296850113947 -19.09083185869706 8.99293912115023 +2356 3.876358924540825 13.786674067887539 -1.1902010529602642 +2381 -15.577328751600998 3.8522001212418995 -7.61766389799763 +917 -1.9602924693985777 12.007436995786316 13.615320159704025 +2473 6.286966463923035 3.2822486020538966 15.497683347460658 +910 -15.102733024959072 -12.184975827696274 -14.747734573976125 +2673 12.212249219678698 0.03916811658545903 -12.65466028319774 +2734 18.41782780611381 4.565405172475413 -13.845274971064638 +2922 16.438303562168713 9.57760115567223 0.32710652814159774 +2951 12.626157390444808 19.42879886761651 18.079705353877507 +38 4.031455883693432 4.028143442915346 1.2292707339425826 +63 -9.403753230778538 -2.884151624991841 -6.84499450919499 +868 2.504674329420785 -15.082486615098917 3.6797934043604035 +285 -3.430627889621083 -5.0788866287031835 6.970838076826451 +1654 -4.998036760589673 -8.730717934693876 -3.171629334904263 +703 3.29118396668342 -5.358703121346137 -15.496240475964944 +372 7.471468624124938 -9.595753348481232 6.083002964960533 +2205 -17.43375819000067 0.48859656911156496 15.829007422061649 +629 10.597021286641104 10.743797089316384 -4.741343334358719 +672 -13.178347426357785 -5.28154040716037 6.237388158101003 +660 -0.8644939932089583 -11.39529930003914 15.506075557389948 +719 7.35458699894123 -13.47950522890519 3.5661676400817583 +752 -8.223597549986465 -7.258235505296441 2.9575000698929186 +627 -7.800027074969303 -16.015510445081027 16.380389801236973 +603 11.216418172413064 -9.044914789403855 -10.924823465342548 +1871 11.22464312275204 19.185067768231708 -2.2345344768244026 +934 -1.8938377554949382 -15.444694220989122 -2.505997366151849 +762 14.004702902040094 0.4315168926315569 -2.267528371168284 +1538 0.41933787730041383 -4.306614603496641 3.5692382523557775 +1626 0.8464035242576065 1.0625830566684997 -17.856671591573267 +1657 7.8966226894500515 13.588856077952947 5.489760770450134 +1741 -7.151553561687264 11.465262916628951 19.103061855304475 +692 16.045463421090723 1.494226941956182 6.738749022017296 +1987 -18.22914275647241 -2.719114932678974 -5.772166120168252 +2087 15.795276328624446 19.493116959862967 1.6692497128563102 +2104 0.36227502998401084 16.463674859767803 -2.427805037732982 +2222 4.416095596211218 -7.640321964866108 -19.221128323289516 +2282 -3.7931532765298788 18.146351299353412 -19.04718219585003 +2309 18.710988353933086 -6.606111751494743 0.24092823561969592 +1758 13.773297824592333 16.450969963774526 19.199143437705242 +1724 3.312281986843722 18.05704471366409 8.504912447304484 +2659 10.64149519868669 16.473551102148758 6.790110369453212 +2699 -8.987809709549516 -5.583049724682331 -10.892496412197513 +891 -8.323547873904912 13.063481978868879 8.689529890719848 +1695 7.6853977731209895 -9.0962811485375 6.111979462269582 +2846 10.917694063459827 -5.421814771467757 -5.3351952305101396 +2151 6.993865688504989 8.651676713471469 -2.055032296896054 +2908 -12.314412083782644 12.654057355338306 10.729681318975553 +2242 -14.665449808604656 5.329769251955718 16.70342767928117 +2940 -3.4098733310328293 -6.916329177872368 -0.9113547637612095 +145 -4.19016121770842 -10.22778438566414 3.0595702424103877 +159 12.57918475249194 6.388230798216201 5.9780067965638075 +531 -6.0028878594229935 1.5859736911412776 -2.822100595867575 +1573 9.333118625030822 13.874140784945467 18.721077360852693 +284 -4.673176140800453 12.435147137187824 4.5748394156478875 +2456 8.097125389936222 12.837801922538246 2.6758390286630593 +656 11.256213717563934 5.880808106870987 2.7533855088515677 +658 -8.313389031902421 -12.372261821577279 9.038887871911156 +1572 11.359331759798351 9.701681406325353 8.513682917888326 +811 -4.143920513799271 -3.4290553534880264 14.45667319858255 +836 16.385526713032192 -4.844564373944003 -6.0839716866704805 +972 -1.462962420251215 0.48311599885991396 14.86524421809316 +998 -9.076232747229774 16.00220220101286 -3.7449330671499497 +1125 -6.424038830209195 -5.782538225825118 -11.186592900975452 +1184 -4.651914151276621 -7.648162305082974 -11.362179398123459 +1461 6.975980685643247 -17.590408377028915 -13.696141108566126 +2753 14.457001501881624 -15.289962121013762 5.583827350758015 +1791 -12.336581669472766 -7.212966186954623 -8.975699714316157 +1543 10.200196636360412 7.049880268178652 2.1586189062339063 +2002 17.56299048490076 -18.039190956475732 7.868402602217279 +2080 4.775925780786471 4.300114041639805 -4.588737671435462 +2423 8.944296972074161 -15.009633439122279 13.905275212796708 +2264 11.538015068514698 -5.0306870729302435 -16.07975807388931 +2429 5.646656226371513 19.66929348384225 -16.00162726977705 +1319 2.806694095332192 -13.665772282023495 -14.194281703311907 +2463 -2.572581915170624 -4.8546062737326965 3.8335411092293157 +2494 14.062823513554594 -16.618597197600934 15.236961418704372 +2698 -3.036990082368745 -10.751180464794594 19.265197534001043 +2825 17.493066132563044 -17.46710352448387 -18.541680721276826 +2834 -10.4707509259648 -2.613717969340057 1.9485809589477026 +163 11.777359050185748 -5.356252364188299 -6.913580821646564 +2966 5.913664818572335 0.08510677697836767 14.768976064777029 +12 3.099457221467548 1.609248953838011 -5.993675382736332 +53 10.883995578429126 -6.3088608800034915 10.468136421036188 +126 -10.835994680116737 9.496114056293882 -12.384303035789365 +209 10.926095500359263 -2.9478210910273543 -6.534941069902131 +2391 8.41866745038278 8.358096856431906 2.0691545617241185 +1253 0.06715751721310897 -5.255518158254775 6.9073803995953185 +426 -9.514820841270831 -10.47688220902552 13.578047629365853 +548 -8.125628983008298 14.157710839177795 -1.5087747362682233 +718 11.126247734895898 12.167852327453064 -4.0439190030901635 +774 4.162072872111417 -16.09216937212784 3.113911611547354 +557 -12.512190195812572 6.172005391934762 5.6133195734118155 +873 -14.044666727108623 -15.83442901558936 -13.598645668100053 +923 12.638153925171407 -14.635180989093893 1.4883984449084964 +1347 3.5236435094628327 3.845101284582482 -9.34874391566854 +976 1.1994086851559234 -13.73312032866613 -8.47578508829603 +1170 -11.433867885875808 -14.03640330748467 -5.192375346958857 +1187 8.393445728887588 -12.991549953638534 -2.0404768562603763 +1404 14.59236826094704 -13.376151707810468 -6.47608988272144 +1421 14.019126473865603 -6.367314374888142 16.020134477886263 +1435 -11.41248171058576 3.698104156168125 -10.769059114515947 +1499 -6.168954299736258 -13.444467026033363 -18.05398865527634 +1533 3.7584093853284415 -8.940102854636834 5.068052699909098 +1539 -2.7405214905001913 -5.517423624927336 -5.319269857198334 +1042 8.883242174178312 12.346350144536675 -12.053927769242069 +1622 12.347118392385816 -6.40995539411558 4.826930625533475 +1722 10.27582541916136 -15.226912085551872 7.054163903878077 +1763 18.409794991245548 -12.863046601203573 -5.18352906883322 +1766 7.259307533401149 1.9281906294967055 -10.201569428656537 +1025 -7.771781682417551 0.9621990541424024 -9.07320066127099 +1813 -13.201364567374844 -1.007756866393464 -10.65571420193986 +1825 18.565675434157093 -18.912954937732145 -19.292388296404553 +1012 -15.269703512040836 -6.61053305692307 1.1577757150017218 +2156 3.758063407313688 -14.754955348601564 -16.95254036967674 +690 14.083467917851884 16.399128732492244 -2.5643639281931074 +2251 16.21560623606858 -9.959214231191206 4.214011089803567 +2281 7.195404570970779 -13.877289482886306 -2.59882251612085 +2303 10.744589018301818 -14.51463838443024 -14.82664849954258 +686 -8.816821164516991 -5.317956989897085 15.405986333835111 +2419 -9.146439160134863 -6.5426907893476285 7.94542958735448 +2498 14.917289232807503 -0.2595152127451602 -15.918487075594864 +2515 -11.16951777825535 11.118567303649721 -7.242764771208339 +2597 10.665225417705907 -15.815906138308364 -15.527192529401557 +621 8.927398038201021 2.4682516516846307 -3.473966155264952 +2736 5.6980821342147445 -17.454992560153524 -10.957816083146913 +2743 0.9179654547632724 -11.17975067901234 -11.391262074254962 +2751 -7.107214682317791 12.001379603741112 15.221030497187865 +2949 -11.56421138460595 1.123940104918138 -5.647348542311667 +2991 12.652312850192542 -11.292660021018179 11.399532881195269 +93 13.786002082463344 8.051470609997965 -11.264942757443663 +113 7.771772817684559 -4.543584522729863 -10.124722392935594 +125 -4.680531669373936 1.4847540972201485 14.258313713498525 +498 4.58753908539273 -1.8214682439828334 -5.150557475718824 +176 14.348473265150746 -3.109320304345654 11.491691282065394 +248 6.976621558030407 11.38380819685397 -3.6330406559790855 +493 -2.992274489809466 10.349789936270696 -2.4171953959647947 +354 7.188547678296896 -4.172616785983542 -0.507128020992491 +356 13.699496824933465 -9.249202589239594 -0.3166286534181401 +459 2.4409411448118514 4.1476605903431825 9.990898975464857 +475 1.9585755120886499 9.554721418508395 -13.267653623689048 +515 -1.2109015553266724 6.775658964000798 10.561092778448211 +452 14.028290778051325 -4.234041569953654 9.360802967867814 +1768 -9.19458261137286 7.363798274088034 -12.87950304895322 +643 15.84824146712953 -10.929230788984368 1.7034874018187305 +651 -3.0779818815089905 -5.551784501963505 8.975017760054548 +307 -5.3946400267599035 -0.7559970200016961 -12.937831456966505 +819 -7.410822483256034 -13.833982064404577 -3.4721660628709383 +842 4.998032622181581 7.342154509769311 8.981311757356767 +888 -3.436289853082656 -11.588221759862394 9.952415357336372 +941 15.985054700962252 -0.22222535285448367 -3.8909734207283644 +943 -11.337565173290095 2.424176207247519 7.755744312781134 +970 -13.78315796238164 -1.9072500938282582 -9.452202090380919 +1166 -2.1905189592901473 0.707047669287659 -14.239596738487561 +1217 -8.28817445371948 -4.72007670955533 -8.323382961037884 +1400 16.31208471586276 4.640670201105761 -3.042661097660364 +1641 -6.055371051616853 14.284100641539728 10.944414397987211 +1442 13.922225034716469 11.117145886456965 8.06049904255704 +2091 5.276216560362665 -13.812606687434235 -12.879711380389544 +1596 -16.32627955341311 -2.8036801941885834 -16.111703705763688 +1603 10.949169594489975 14.078141811001299 -1.619664090118439 +1634 11.28575763780349 -11.874887216863542 -15.030327163954974 +1678 -15.928181192695131 -13.971391487751166 -16.450315383738587 +1714 -15.824712376494618 0.5360092086364845 -10.360234103041455 +1732 -7.925215720467376 -18.584168235996753 19.602547634180418 +1786 -17.05536984472772 10.79185884259039 -11.208709659289118 +1840 3.602821135697277 2.0206979452759946 16.041006550205022 +1868 -13.212620013141093 5.787079002259909 -18.3170457211868 +670 -2.234052294722165 -11.647916036777247 -12.452290068945869 +1956 -3.8786104301955806 -7.183217753645221 -18.503074524412934 +2016 -9.570523066831656 -0.9908024653659926 -0.05425414004430295 +2063 -6.397472751105037 -13.237867085841387 5.2852197799724845 +2102 14.242289849160478 -18.190632744374447 10.132740594529025 +2123 -9.526906603865518 -12.596338269080752 9.378835665685905 +10 1.0761881562888613 -4.101763676243097 7.244342593982432 +2177 -9.695818940084804 9.58467467864771 1.6327394598216265 +2942 13.129027884448787 5.480315953830509 -0.6046211171665804 +2178 -19.26699251912384 -4.965031096822968 -10.004399666138099 +2470 17.27629490960468 -15.789948552361121 -10.38129381053296 +2472 -16.614703595230434 9.588247959732831 -16.69717048738258 +2937 10.286677452043811 10.391114280241611 -5.322686602258104 +2883 -7.495716875488081 -11.513233990777728 -11.64305506183068 +2505 -18.580568779728686 9.010120631650844 -13.41357560589782 +2556 -18.332541307580513 -16.04557022094486 4.617805266666948 +2628 7.755411225246016 -8.170868455217557 -0.10684515262372103 +2660 4.892978080395476 11.946984950116907 2.4496062003716457 +2689 -1.2925944099208033 -9.073997788149693 -11.301808223882352 +1649 14.55765418443174 -8.92029711441007 -14.794074460483314 +2759 -12.571534067220044 2.437364687068747 3.407895401160337 +2815 19.09966628283709 -19.330930252804308 10.540554317942352 +2858 -18.65581413413316 -1.4618285274793386 0.4012795459825351 +2863 -11.717476524276679 11.936227437471748 17.6132040352032 +2936 0.7911070866123512 12.327897290511887 15.980631917451309 +2967 -12.83452336838035 11.18773076716468 18.589911925043822 +60 -1.529942537489781 -3.332282760611064 10.571380672848035 +89 3.593813174820674 0.5440494873894316 6.361027448155004 +154 8.460600562673434 -4.6666771089057075 5.526732098669178 +200 4.350014449670986 6.028116336935724 9.760449637216803 +218 -0.38922262602400476 14.171401172514027 3.2367062566548546 +277 -0.5612991204919751 -4.731861139824604 8.549987466571302 +2871 16.098065858702093 13.383814562758587 8.34300127014083 +491 -1.2377758148623736 5.795881725629903 -6.154501117979941 +669 14.566433022327589 -7.685515801874805 14.755604476000931 +1475 -2.2506566818370226 -2.89432462723738 -11.044809633247494 +788 -1.1768968453587638 2.0899004762819002 13.278372281705158 +851 14.481915646237015 10.450554043571232 3.8037204577530304 +911 1.1693125306946541 3.5752152043357284 -2.7047634766430004 +999 -2.757421952948523 -12.724601935179127 5.216538878215177 +1200 -11.044225173375857 -4.491378865054372 11.946935908809765 +1320 18.225540153469332 -13.38532188639142 -3.827191003152686 +1323 3.1045974821370668 15.682583052623073 -0.5752459648792689 +946 16.620148174384934 14.930309854975489 -3.5985701978423075 +1434 17.925903828728238 6.526880029743878 -8.669332249231685 +1623 10.25602798299097 4.774781350345834 16.961137553408616 +1723 14.02918047780502 5.8382395453125895 18.484727344790713 +1802 17.30341026351742 8.8145563626166 -8.04834918275026 +1955 -2.1329161310852025 16.319983238559125 12.514516796937825 +2058 -2.032324570040143 -17.530643462770577 10.947208521325543 +2175 9.270520622246543 -19.1919051280146 -4.445527685496574 +2193 11.604434324282945 13.873112596760778 1.4403185407603252 +755 -3.2253867645308563 1.902763476354832 6.8732358886745075 +2504 14.125725846317039 -17.630699914072924 14.598402096002316 +2081 -16.64891439117735 -16.6902835064455 -13.804154159924815 +2725 -14.243744731174047 -1.0100799763539012 -10.507200734580639 +2767 -18.946334101529022 14.896901000372644 2.515108761318716 +2987 16.324221942912054 12.665932356712872 14.347716559285663 +23 9.773903323276027 12.082078132258026 14.096291447599468 +2676 15.743850585037272 17.427141083061162 3.8306874521945087 +1618 2.2160699106824797 14.741289700141035 13.088498119554199 +322 -1.9407025001426204 -5.6939637761675055 7.206490618218681 +412 1.3545494703395178 -1.6531497503508186 6.92897263397981 +437 8.731402916952018 11.580969545952076 14.343964570487904 +570 13.866339789806089 6.199609585014801 -9.307404032165113 +590 9.56618057768758 13.779139558054078 1.9233301590330274 +652 15.660474721859858 4.777403067594477 -3.5996833285357686 +681 -11.902851386142991 16.16576160047683 -1.2577249847609608 +699 -1.4778410941272142 11.98444594673088 -13.14033886507297 +700 9.855408098308942 3.5889256474651963 -1.144647358672546 +2608 -10.337241592678543 7.275359945932804 -9.927626602619263 +810 0.7126312781968859 11.669956813820809 -2.0233596037985233 +2567 17.746176453741384 3.7116267005782895 -18.65379064728846 +2502 5.722041052421746 -6.7076799790736175 17.67672050312397 +1070 7.600559802035687 0.9019683167772178 -7.798296653541256 +1525 -11.754758306276688 12.429678521699465 2.124791301424713 +1207 11.813513764455317 0.49923205775468393 -1.3854478150301843 +1241 13.091916636740583 8.839936880523089 -12.601233024765284 +1370 -8.589993558993598 17.699155360445218 -10.008993524877122 +1882 3.0580248298532213 16.79646756605351 -13.783018347125426 +1937 3.895052030717296 14.417528996588318 19.47249107278313 +2031 17.062067173487495 -10.557432813033893 -16.631915405566176 +359 -8.207026830678107 -1.8082066128107346 -7.610273755356012 +2089 11.047144538245735 14.636073473220335 8.40538802138105 +2127 -10.15854278914052 -7.196587065401913 -8.04296178473385 +2488 16.692564059032435 10.89431155255197 -13.779006520610306 +2321 0.34740334104757165 1.6733343394013764 17.661245903193308 +2367 4.082474966379519 -10.200019692885496 -6.122058648846709 +2909 -18.94622065534346 16.80359104112196 -11.63784058894429 +2974 19.848232670716367 -19.13589490653451 -3.714277007225139 +16 -4.321810152364724 2.4595908130312294 4.275532794434336 +61 -6.432976894665468 12.38249674520931 -7.096986934605509 +2097 13.205210210172527 -7.493080496436901 -13.694190494848826 +327 -1.2992069605664027 -12.611602871085534 -6.17935482523877 +362 9.515064163718627 -0.2796123091147618 -6.192269892757637 +401 -7.824943754379502 -2.5545578510754 11.612754671876429 +451 -12.439040631297921 -3.8169964502965725 4.683142059176201 +466 6.820391067157145 5.287882987982708 -9.035625892839501 +2038 -0.8481907145315856 13.344621862255819 15.912667650930356 +725 -9.80076016884469 1.7447099713893148 -1.1641040263191615 +749 10.141701472868142 9.024339123912798 -0.495570986898071 +778 -8.978322937075319 -5.918529891831526 -8.085507880186398 +2370 -3.2527515138211553 7.8975403478395565 -17.478638586910503 +898 10.762570408551843 13.976370111840833 -15.472723928613973 +1054 14.678180954264462 6.795663565998454 11.65598238521984 +1058 -5.357413434146158 3.637171354415373 -7.676556215075709 +2257 7.256315828273099 -9.160374885256427 -12.899844117930774 +1426 19.260289272723465 15.134125844211129 -8.13524323017972 +1602 -11.74970175646682 19.029066031345057 1.776786020125669 +1751 -12.054514537941714 -8.866417805049334 -10.684041199805835 +1776 8.167750403874642 -15.151288558944852 -15.310969301161295 +1876 -1.3013331060823405 0.8268261144878005 17.464703562323404 +1880 -6.617157383802766 17.8596555415506 -16.801007182405872 +2001 -7.304663333375736 -14.304202645467635 -5.405215271128249 +2012 -19.213528102320442 -7.828097047270682 -0.5221099324415083 +2162 -0.17400578543361545 17.587201787952203 -10.347602939768526 +2341 -1.0912616323091895 4.126054303758697 9.465940690899327 +2508 14.994753558830256 8.313667362469234 0.01007840673545136 +2606 -9.878890349448788 -10.240741854567268 14.934976268804084 +2622 6.73226610311783 1.56597322034553 16.12195626207003 +2643 11.094848221258614 -6.661600149722324 8.27996096228784 +2791 -18.627213832433725 8.907171266115302 -19.19056897606169 +2 -0.8993669207402951 3.398392661039866 8.36159503968532 +90 -10.582888138018191 10.015184637597141 7.570334524675865 +152 -4.106825913811972 10.13246594380217 6.92267325817234 +404 10.58785773032106 2.325750451236744 8.300086005370986 +422 -1.908216089466191 5.103755913491793 -5.125035261719642 +456 -2.043188616909261 -9.899998931334315 -8.87510786876281 +477 4.943242425311092 4.763853953211878 0.34698481172707973 +732 -8.032357857050476 2.70906184320311 -10.46870492156576 +753 7.660045051973881 -12.902342876374927 -6.748539531999267 +885 -1.9584465034317855 10.336686776932341 -13.601217024210044 +119 -3.0061635191155345 2.2648257782543584 -1.595111558694543 +98 -12.50968238718558 -8.01624286147247 -9.97401186708766 +1105 -12.041659366743435 4.628947462035413 -13.804629032930686 +1176 3.007033023477383 -7.482173067882387 -0.7325886991631455 +1264 10.298289826228828 9.595174345779737 -17.86446791421622 +2885 -5.653768379108361 -16.37268753358865 -6.219708201347258 +1384 -5.0131007568712365 12.439854567891594 16.38150936295277 +1412 18.634078118353326 -5.866696251234686 3.409085655324405 +1459 1.7609170432058252 7.626447638206463 11.849831580578863 +1463 -14.484305414837326 -7.232165347801824 -18.111815494029972 +1513 -10.314946716115852 -9.944875388913982 10.048797808735467 +1601 14.9891420242944 -7.613348436935998 2.999707301684518 +1613 -6.300111540992795 16.198065802202382 1.4853377139790338 +1677 13.074317348170185 -12.600148115393875 -15.460228746543148 +1737 -2.324764946288907 5.744797046780017 15.717557403897116 +1846 14.166373307992778 -0.7501952607363376 6.949709113300342 +1891 5.316805400875596 2.0826520825550516 -0.9074176555027967 +1931 0.43756933269441695 -11.434724375689349 14.498300839296887 +2062 12.251711847640358 -2.9938274626142367 1.9110068011605759 +2065 5.134246452168691 -9.129838187114235 -9.178851883303661 +2098 -3.2413722737375537 3.183315570949797 -1.1628223783323883 +1492 -12.637854659848143 -14.808203586179099 -10.456150170085586 +2171 -18.04040246895689 -5.195931023805568 -10.630237794995574 +2201 -6.4907545159573905 -13.303586063273077 -1.849001887216732 +2229 0.7067367605448243 5.264639680019964 19.475344182297732 +2306 -16.78594657893825 -7.401931432269893 -10.279749363581464 +2339 2.9421855794993 -9.655707084637317 10.165688808893375 +2375 14.251642351968227 -17.775208344167513 15.812616985091461 +1867 10.829569829393003 2.8090410187039905 18.48141218297883 +2445 18.616740617441504 16.286106502937265 -8.149462786055912 +2458 -19.066980341985378 -13.960311157195736 13.004709971715963 +2459 4.263337861761055 11.69992490966183 4.571898946467222 +2614 1.5166333681839128 17.218091646995784 17.708847017421945 +2697 -16.028967944691704 16.598660891536397 -6.912878302147367 +2723 -9.909056175657774 -7.728489507780797 -11.718164339214631 +2754 -6.313047198499945 -5.246417058472466 3.097474151262708 +2819 3.2296683428384454 1.3253199510163294 8.343783603504782 +2904 16.702733206470036 -14.157940325663818 -16.334828389631056 +47 12.451393389645123 -0.5956663719435671 5.7324477106483736 +142 -2.047659249996697 -0.5324474609561145 -2.1500844213952304 +208 -10.591703927189663 2.6906856508417176 1.0343104136099337 +2774 -0.12190759578674858 -8.238043982388206 7.47172428989156 +273 -1.2813399456006265 5.994378422352615 6.097197711652991 +293 -7.924590806378253 12.787074624064335 4.036387385665241 +313 14.194078023018184 -6.528713851900126 5.471941750570807 +355 -9.183759041505928 4.48548348351117 -2.2555081245451225 +367 -7.0954110386292575 5.406938981844947 -8.024605628290006 +453 13.2086422912263 -5.672630980382679 -0.4436316334704483 +2740 -17.989335460605144 -9.15921824883268 6.539744256021584 +561 12.857358913512646 5.691363749752089 11.826995492632335 +591 -4.789316624151984 4.0881241788712215 -4.740281306534139 +639 -4.839525173047331 10.67571639857741 -4.617004789080437 +2708 15.448438469897107 -9.24343395519556 2.0751800215316267 +775 -11.899092402362571 13.951201552536888 -13.43399725468317 +803 16.160584940940858 7.283497922607622 4.017058012506802 +829 13.45069983719096 7.6335694487248595 2.407157375106682 +855 -12.05903302705101 6.892940677118599 11.79737784543295 +2587 15.814855121728066 -4.183310499229205 -1.2888776621037552 +937 -11.517464989071255 -13.129207136363618 5.764168896445849 +2465 8.048775377577217 -15.920404347238009 -8.142574251905538 +2411 -13.479577704213936 -12.966261605289766 -15.425109559831434 +984 -4.749347792832125 -10.420364792363477 -12.111565743844983 +947 4.970805796512961 7.4834986153322465 -2.2490223050450644 +1040 -9.31654722097325 -1.3674306108897598 6.529485963174271 +1106 -5.567467138403847 4.421787949346457 2.926765034960051 +1109 8.628843082421659 -12.872156055758367 10.162851229715637 +2944 -4.580408701079399 -5.206962205297655 -0.06619227049799584 +1168 -5.011094055687807 4.356725459552341 -11.613793584904611 +1205 15.117049331645614 -13.491475267138128 14.931977117401305 +1252 -19.069928957273646 14.868356837744441 -6.910361662046695 +1304 -12.661931148892885 11.661493335240577 -14.259211193115691 +1331 15.398964562822346 -17.69791614024515 -17.700079153392874 +1416 -16.372819062474147 -1.1327575350051267 4.881267351520459 +1514 -18.19278611935534 -18.761476064465175 18.259590067919337 +1520 -4.189373186692993 -17.500864076319168 1.9400631689364323 +1272 -10.9471176461201 -13.532578849642304 -9.614550299514253 +1605 11.222127431686383 16.096870600136167 -14.00245279959283 +1865 -17.631679460495764 5.4327220121165025 -16.65554805648565 +1727 -19.11953293689739 4.227745321867892 -5.906111133528792 +1740 12.362447607452548 16.070026797992252 5.150035436387231 +1901 -14.532132618407461 11.98949826938289 11.496556800613273 +1928 9.803136994465653 -3.5176837488826385 15.88848227836839 +2053 5.117520294062174 -15.89521947654986 -15.983700892638815 +2093 -6.734149237181623 11.22870442312526 1.7597413512677944 +2165 -5.829781632563828 4.042277142825819 12.372009498424372 +2284 -7.70383738878114 17.97733060888643 1.312720910834566 +2342 -16.01672249114942 -12.750136857682916 11.225446807592514 +2363 -8.418708562235725 -3.7975744876163424 14.927545069132233 +1784 -3.413130455703453 16.72722162774567 -1.8088263149512085 +2412 -13.575348714906257 -15.675712842669347 -10.879827068515931 +2490 7.662275392777795 -5.78390185256052 -16.014268434418977 +2522 -17.39092376838771 14.932314314936118 9.811348043598581 +2539 7.400616456200888 -13.867120791715537 11.534279701388227 +1963 -7.386392878262444 -16.176873522340244 -7.387517231056331 +2649 -7.4138430042764965 -7.214870571716321 -1.7896718317523765 +1098 -4.356145957948988 -6.448970901162074 2.773209104179551 +2769 -16.882954967033236 8.285037896193785 -10.849090415996482 +2787 -13.83879720300812 -14.64290168941588 -14.931773911112675 +2799 -3.4316272576373366 19.39565210417675 9.684368235467169 +2836 16.61930653146823 -5.361254474614017 -6.5168728921481724 +2953 6.071243121625912 -16.62188872479083 -0.8907134894576699 +3000 -5.726480138536617 15.737494072548454 -18.318275816570797 +116 -12.32149568696919 -0.03369177177703573 -13.77440563200925 +276 12.181024630163146 -9.555885280212841 0.10177218452906026 +279 -7.313907636386912 -4.9611694584644965 13.648743623954019 +463 -11.305072696936113 12.880183991014789 -8.510142001665267 +19 -0.5478511888934423 -4.0604261523757375 -2.2082418581765877 +1701 -5.411651752539041 16.000130259680724 6.189593206555079 +577 -13.22803629033112 2.893600211052798 3.0315591213482818 +641 8.46578884036599 -6.8691835768139216 2.573217531358711 +1690 5.609018921254583 14.187467542040906 -6.254163410311717 +712 -8.22817090006651 13.96517036756481 -7.531424639355101 +713 16.596457633277005 9.114188126691003 5.5852084612046315 +763 11.795034365497933 5.075076239822221 -3.079411773182564 +814 14.285712167807665 15.144614576286573 1.6718563782086522 +856 9.315206508149728 13.88106175804641 -15.221115238135434 +884 -3.8442280365320234 -1.6662242219141634 -12.822000447632345 +1625 -4.38242857216274 -9.161854157083713 1.4310568533031833 +1444 -11.923673690358422 -4.633556527169508 -4.320512781359698 +1484 14.778240217886378 14.32504535193237 -6.372244336121571 +1542 9.002194240176264 17.437209815293976 16.28377979950024 +1850 2.369772445990787 11.28031084837863 6.86243399181127 +2239 5.047851542404767 -11.027251410598199 4.117474956132267 +2181 8.332689349496889 13.465990446112821 17.717282770656496 +2337 -6.302984744498765 7.1011570497699195 1.7209905178175766 +2368 1.8342708978239877 -13.692040111167064 14.638584749529098 +2417 -12.509684926064784 -16.275729371346735 16.442199130083274 +2474 6.325734106243411 -11.431370650204668 -7.521680084454015 +2545 11.290204012851147 -15.530706935720502 -3.7329484681030105 +2605 12.776739900140718 2.7225721207102884 15.340478781696005 +2742 17.33793891319145 1.242232848042931 -16.34536603641433 +2821 -1.5552184421046182 5.815443979777128 -11.903139458065402 +2854 14.380907162654113 -0.8377766285242719 -14.888504119686877 +2976 17.174278591493646 -5.88521385893619 5.727833595324623 +54 4.78750616901979 6.974529363402458 0.9251186095516816 +138 5.584592773067259 -4.594024061327044 -12.807229886701522 +178 13.241012537953104 3.1727212079519647 -9.920331241489972 +290 12.279888637977086 -9.889647445829272 -3.9086545273472315 +306 10.737478563292415 10.007130997265879 13.055271095391964 +1483 -8.48384081702046 -1.0707486274553368 -11.146632913986476 +371 -13.25654283962011 2.648423012810055 -5.061498893651252 +1322 17.872334817315846 7.63202438695891 -12.000819854203916 +1289 14.182824446702536 1.3929350274040144 8.152717851691964 +704 8.952203552253426 -5.672176564938712 12.691429144485928 +728 -11.230088081636543 10.517143378825853 11.310070509640815 +781 -4.101992174856327 14.646632583433147 2.2389595073181336 +929 10.554144660407442 9.42614488004147 -15.397573835598328 +935 -7.25353715128785 13.988574507153478 -6.528853245295371 +1096 15.054727972140773 -7.583250194737362 0.6509518307923962 +1056 13.256918918845454 -12.348203134770785 -11.653465866714885 +1165 11.502060653806033 -14.549062757772726 10.257902460079235 +1071 10.61684571935591 -15.721864722849698 14.603109712255119 +1248 8.220032724564966 1.3111786905288247 5.829754024397863 +1175 -9.87140524254519 -8.534635694903683 -0.9899405538906149 +1465 -2.037736551713561 9.089248269290977 -16.0781372498395 +1528 -10.000796214878628 18.117574203381206 6.805459240495145 +1564 19.43712276619144 8.504935057982705 0.8183859647470352 +1615 -7.063650763040234 -0.4872579739950892 -2.67486330787274 +1630 8.606027421221931 -17.317701614345822 -15.897221664763999 +1044 3.334057243369783 -4.09734675352194 -2.8231107780192297 +1034 14.518375803539044 2.0143135870732793 -14.66626618421513 +962 8.9738135068315 -2.1285724212346 -1.8839334185684455 +2078 10.347926602312588 -18.406026607265527 -4.233836354959299 +957 -9.197788336360075 0.16322949678386642 0.6604403522543286 +2326 -12.965382174626214 6.6530382473129555 -4.751388475387418 +2415 -2.8173691080196743 -3.725586385637208 9.847875288010156 +2481 -18.564566917844857 3.602255306353952 -14.786752472840803 +2634 -10.337374457580554 5.042299537848022 5.941719076564419 +2703 -16.187502546527636 17.233142758301955 -3.6782832664970186 +2899 -17.152364891580483 -12.489968143337308 -5.7374992946462635 +2905 -17.940917920754732 -18.45910000339234 5.201114106919247 +2921 1.986720907670749 0.9888081772667563 -3.614347379851922 +2965 5.815582378350527 -2.279517990133439 14.245403631231289 +2985 -10.981598807542065 -5.1621202826185515 8.924573321564838 +120 -13.570520760422891 -6.870128199645219 13.693759620424885 +793 8.31837989221172 0.5170417211983156 -3.471344449368975 +312 -8.897406458350353 0.40088763760348317 -5.43819839525291 +429 3.368433981100611 -12.82587359854934 -1.8602490840521744 +492 3.241122542213691 -11.743688774753993 -10.42699022420824 +769 16.048069277537888 12.594956026762707 13.885806518128152 +862 -6.170202508074384 9.977498940184146 -1.7296480477375595 +602 8.02477772932049 3.0264236392279114 -6.000735436295618 +1060 -15.305846589015392 7.154876463450534 0.20560865887408972 +1083 4.964881863286401 6.007653544698971 9.411144606904601 +1119 15.092005403758492 -2.2835612274486605 8.891218359427473 +1127 -14.935315464664207 -10.245459105929166 -15.102713887245976 +1143 13.800598815946662 3.123665306047551 -6.455052334706464 +1332 3.4007229613465824 15.149645432051605 17.544334170270474 +1552 5.744315086715471 14.91481124391563 -10.011608590859185 +2189 -19.29125737336826 18.338811913629257 1.8105110013986028 +1567 2.001973469909394 -17.012536284613773 17.923540729731183 +1810 -5.383226219287634 -15.761225825144837 2.0453116447969464 +1899 -1.3150299626737008 5.781892817917215 12.097821748350704 +2155 11.508830069993051 13.966336214967829 0.5287668505878785 +2197 -16.688917786590462 16.44705608862329 -7.388333656678107 +2233 8.771536134615593 -18.31735824762336 -3.3195736002629497 +2248 17.087695791047548 -10.940505777644447 11.909492831012559 +2322 -1.8033388831828494 -9.88441654755341 7.16195767339643 +2420 -17.396122563945692 5.942202516744806 2.104372448077328 +2437 12.497593788879822 14.276588846894349 2.272749510297842 +2530 10.700150983024017 -16.717268422795787 2.976627609666298 +2573 3.1306341300012717 -17.03574716247205 19.74854228960884 +2686 1.7787464545165343 -6.258817041912029 -2.5372510954620044 +1398 -13.774019303297207 15.86764929708589 13.584341502045033 +2950 -15.089573337513299 10.215727061383495 -13.578981020480297 +2970 -6.873899972242501 14.019454599004455 -8.1500718110257 +4 -7.763165743331771 -6.485801346352637 -5.678419527317921 +86 7.357036417175315 10.768225180048956 -11.899534123630064 +406 -3.4104162936919455 -3.4045209313195106 7.709684292329075 +416 2.398294113764864 -8.408642125490609 -13.60086408924663 +503 1.3098930626801897 8.35594265746151 7.499358784316063 +2390 0.9543556001166233 12.534083688696356 -6.823582739864747 +599 -11.778375128064873 1.6015104751166906 4.7881823662010286 +606 -6.553553659306519 8.087044057791779 5.810160068784854 +607 -12.568980303215595 2.5349285319254675 5.50375247999386 +659 10.160737346022739 2.0012570060269614 -5.236922270628705 +679 7.247384615841823 15.740454491761753 11.0078476168667 +867 12.636065893511422 15.663071346913293 -14.430559165033287 +887 -10.473506010029542 7.68683423914926 14.839184024523492 +1007 -14.14605820897759 12.961647016937553 -2.6638637075494374 +1055 -13.013477257684508 -13.460134446696356 2.17190199670243 +1065 -9.835509697116015 6.235592324235899 14.957886225661243 +1233 12.491085726516836 -16.718370142943417 -15.539982911548819 +1256 -7.8309521606419965 -2.0174211469001007 -9.504502827346228 +1257 -17.022307162140105 17.774049079126197 -5.4469859704955015 +1266 -8.35835343945182 -8.427612740969915 -3.9755728284050136 +1441 -12.458072642345272 -11.07457349028194 -7.364266840490241 +1470 -18.132238524970255 19.03637845563473 7.097633339419685 +1608 11.853775005381557 10.88852457429317 6.538317600885575 +1712 2.620307688412378 -10.820307591218905 -5.956761679765295 +1711 -3.571371002690321 -16.88913922966695 14.62764688372987 +1750 -10.121934858502051 -19.015457983050837 -17.56807778199241 +598 6.011596931390086 -10.901085656621639 10.619666561201223 +1913 -18.807282622766994 0.35375020974613597 -16.531467805832527 +2032 5.624494524972277 -0.06521878148740544 -3.3992404357966253 +2106 0.331228572284396 4.1751537435176 11.626750698327543 +2118 -11.723296207742129 -7.4891474215773 13.215976098065457 +2169 -7.908227245432755 -7.410026335928901 10.44129512905476 +2184 -17.17378911977087 19.36325438487275 13.878215906701836 +2195 -16.582353838696 4.588290020304915 18.043159347773724 +2213 6.572785806140764 -13.69384314993963 -15.665087901009365 +2254 2.0897010255908857 7.282656875400798 -4.8672007512461235 +2299 10.878258026729243 -1.9419003715840577 5.596445592554208 +2509 -12.987601347395836 -14.04739534014019 -0.47731759684190567 +2511 2.274558080835733 17.926401155859747 7.587900484176925 +2595 -17.644232346630684 -9.578522395431676 14.039015398850207 +2623 -5.249439457515736 -1.2094073517268076 9.997542599440106 +1872 4.684401884290136 -5.414134048589822 6.175646461744168 +2766 0.7089886746285097 3.919537112119708 -12.48251281436922 +2824 -12.425205114207813 -7.372344097654178 16.678312653919946 +2874 13.820246586752637 -17.53465842840151 -17.339296265417918 +2881 19.877418800779765 1.0791222001251688 -14.23444552214379 +2900 -1.725387501440322 6.874711509880575 -2.42600887946427 +2934 -6.455544641649785 -9.426567161339516 -18.788854992696415 +30 0.6330211800222708 12.241755974597448 -6.373629022730756 +72 -12.043794694665145 -8.683105441208209 -6.8728078787096125 +130 2.988912374982512 2.8026130398351383 -5.09115565754938 +186 -12.987858864033969 11.460972907424587 -2.47647058283685 +250 10.299964059754307 8.67778410112876 8.337669161805064 +275 5.808936893003587 -8.620586058612066 1.6561802401583092 +345 -12.920042268918422 -3.6537638546821034 -12.379027964727392 +445 -3.422082060956296 -2.2916138778062467 8.458567395756821 +571 -2.661085809524609 -0.7238573959671096 -7.968554856740497 +578 1.8403694852286299 -5.339397363360432 -5.316521144028325 +655 8.920574629723019 -14.125073969973588 8.531210446924026 +671 -0.4571542368349499 1.320839529186332 2.5516224213652605 +695 -7.520203213990777 11.470389171886273 11.52100534276588 +1246 -4.462365645416752 19.091545696763315 -6.339086750032514 +818 -7.320783226191258 -4.555598821901119 11.566828535307854 +1338 -8.874202790306773 -16.64966405955336 2.605506025498292 +854 -8.168612295042475 1.39373810218338 -14.686269680683488 +950 -10.574344177135178 13.086571276236675 4.400548078600546 +987 11.179785345947785 -3.5107249596903882 15.063411109797771 +1017 1.9868589057504888 11.799047224824944 9.66976344312305 +1134 -7.383620109282694 -14.38628581255775 -0.4055980204193815 +1138 -6.645446494945582 0.35146593993612063 -7.151981191803452 +476 -0.42482900153395153 7.273420373195069 10.394401786872823 +1225 -12.416714134435699 17.75648521511278 12.90133213512211 +863 -4.814731428086116 2.337485066311321 -10.642651602158004 +1150 -12.179020449487307 -15.285754623736143 -12.272004598468898 +341 3.38618981656808 3.9115138668368954 12.83056023789155 +737 -9.575743656172946 -9.127187390246073 12.24328375652267 +966 4.764057486430573 -1.5699253308574146 3.5743506298083414 +860 13.50481611298914 1.680610552569677 0.4816712218395186 +1051 -0.520833987828479 10.01997193074309 -7.195900623462515 +2074 7.529062322672078 -10.693684492498178 5.774439609839359 +1219 -2.89187091174107 -1.700679214302805 -16.273911511121344 +2838 4.823483202903097 -19.455766464598387 -10.351460967859298 +115 -0.21019882954535762 8.99549876014754 -3.845902200353916 +21 13.68734777576307 11.909679393012459 -10.222938841821685 +79 -11.403840504839646 -13.337715872840475 -13.002706386318906 +161 9.095984771426577 -1.6234776527064032 -1.4049728817578104 +432 1.4929426299662947 -13.66431156487506 -9.240187302648506 +523 10.550148559087525 -11.745424150830688 -11.42496202158127 +597 1.9975210502372358 -11.93147308546241 -11.646580853409493 +748 9.065412876451543 0.6747223149729721 -1.701522919159049 +768 -0.5293255013117084 -1.9132942910280601 -12.949323759283361 +830 10.990136809780436 13.264549502408164 -12.342225147499704 +899 11.844012207361551 10.84815887360384 16.384453380668575 +930 -0.2484831648013407 9.994223366873923 -14.90531067710027 +1039 1.2588417278318993 4.281021244836972 -8.834421620009278 +1117 2.3699945136139475 10.06686470986364 -3.7705672896545037 +2680 9.771161686996404 7.775639629099605 10.966177887944555 +1085 -13.77020946513657 -13.15315845495397 -4.434839978965407 +1210 6.4412525645118075 9.629251419042996 6.166586407726231 +1286 -5.749235114574539 -13.968185045200443 -1.7526580061385333 +1292 11.418015358161869 16.17135479195778 -16.323363170625285 +1310 13.170783654765234 1.795141359184334 -12.358368941868791 +2231 -1.7435604999275744 14.985306513817182 -0.9882845275614528 +1429 -1.5769532602541254 -6.744441507379027 -12.278947139875553 +1480 12.8660732960692 14.814099739445298 -17.369893610547663 +2794 12.065435401027502 1.6997401071341443 -8.853286680924512 +1535 -1.462875072124059 -9.890439653024055 -15.682330826931876 +1733 17.060073579434448 -4.870745490184179 6.932888215948449 +1764 -19.087174493042443 -0.6262048216467853 13.626822554120531 +1830 -7.298249444487255 15.107982758419926 -16.398837826489768 +1844 -0.622259989636185 8.839125656343219 12.957544756569687 +2716 -0.9486748886146356 9.807078661675039 16.239337822076997 +2011 -16.54934731343029 10.626644147544448 -5.267486655922867 +2044 -6.481867186312065 18.486695568501737 18.13067638193809 +2077 11.591413016365744 -9.010896705554437 -8.973522500238506 +2185 -12.105877480961878 -9.876904552150625 15.836996690823291 +2196 -10.639777693906009 17.64404102801868 4.316963119937418 +2312 -6.492379245651297 -1.4173954563846904 2.5204765581119486 +2327 -6.809396343650739 0.7273083135587944 -9.024028610646093 +2360 -17.46776760801781 16.78764654110448 -5.265894375926182 +2524 -15.973724872015334 4.436441625654566 13.473657665398534 +2394 14.163306300586473 -13.104366166115549 15.032890985337781 +2603 -12.395916397109502 14.566853304863269 -18.380326956178724 +2491 0.26615690973519046 7.92035330626672 13.20155054683913 +2706 14.623373125362084 -1.786688925354943 -11.697289985561703 +2748 12.457513302622464 6.925240050365715 -15.439325538575648 +2809 3.2751233238861484 -18.573265028226217 6.887647771566006 +2344 15.966368525269022 -5.244004392457888 4.454129285891405 +2848 9.30940171075248 7.194188232877135 -2.42481789527327 +2975 -16.97199565866248 1.1129914347202832 6.303464304294606 +2999 -9.617465715016388 -6.095439058130994 -0.1550577556630507 +2304 11.34591302521822 19.33114475244762 -16.279082821165254 +127 1.252204072503723 -3.494121834807273 -5.2825226738111475 +160 2.5741290812799673 -10.842205080890109 14.328215553822233 +2249 17.66946308817509 7.759836517048588 19.71443165335728 +206 -9.911116201660345 4.920055626086347 5.95856591486096 +297 8.076423216686386 -10.950222600686152 1.6613714543853761 +338 0.008236498812039469 -9.834641533328451 -8.984582606018147 +351 3.5710806139364677 12.836813637379946 -5.054833527947395 +391 7.962797821884166 -5.194646234389264 5.025226041721682 +448 -5.650724909689699 5.004945895155795 -3.883871940338499 +455 11.64213377171001 3.560500108588524 0.5575553973411285 +471 4.532581941812945 4.074119090551347 13.392644614039835 +507 -12.64029233919896 -6.035180306780229 -9.415472891809715 +1193 11.073808836258873 13.616588948464303 -13.573195594570857 +2125 -11.289341734623788 -3.9185161882236126 -18.89546584482139 +2117 11.180727074982808 -13.437540785991843 -19.223739994646337 +739 -2.41915761150994 16.093446092313215 -6.916162449993978 +844 10.914676792288363 -12.547756023471988 2.138856672421085 +925 7.900166424315585 1.2218346758938297 6.067964493028035 +938 -0.8410084596209307 -9.024738958726974 1.2113604937696612 +2713 9.16470663102151 5.271382683301022 15.225932609799818 +2035 -5.147192815906983 -7.243095019048723 -5.841687278630253 +1000 15.385137944893216 -12.685876007057262 2.165208367957041 +1003 3.0742984039534043 11.386469020079074 6.998723496153639 +1064 5.965786553060681 -10.175840120368006 10.627068643906162 +1933 -2.897285868274245 -14.32380852257051 17.81601141246972 +1113 5.613147279209409 13.669724796542912 -3.308302950818256 +1139 -14.493963019523749 -14.404264187954476 -8.305051308698001 +1180 1.639341774853737 -9.05113211252336 15.364227756039353 +1215 14.16610482233708 -5.26263367602964 4.895940874645635 +1669 7.545815163263039 -3.4798506870433243 -14.532631119110727 +1318 2.4531165184449986 1.0953239798849075 -16.282291107033988 +1349 15.466729970006444 -15.362372196811492 3.5713831627415917 +1381 -17.17176617863507 14.169803481830773 10.410157217230967 +1924 6.132118753613845 -12.503728786032035 -1.854485630537775 +1555 -6.881322466343166 6.84866396636438 -9.083824459795766 +1717 -15.611173785803244 -16.27897370229534 1.1077514492986051 +1729 -17.72074573956905 -2.1693726213535496 -15.806466760389396 +1771 -0.6091933652970525 -6.708254510270772 8.020574672559546 +1829 -3.4139431764385377 3.067824233182004 17.425392378449228 +1847 -17.049491576600808 -7.99115646554834 2.449827143023259 +1848 -4.03220128963364 -1.8453025506368255 -16.990925788145084 +1873 -14.63698224405252 13.467855810934886 9.875446762751336 +1887 -2.8483565247909954 -15.021806619998083 5.275737095111708 +1925 3.7026821222880146 -4.915671037448587 -3.4633557813128037 +1954 -5.362997738713992 10.674666596818117 17.98536683853667 +1713 -2.724172391305148 -5.089271460633415 18.31102468133376 +2025 -6.218925756667966 8.931752915547785 2.022987311647463 +2061 -9.135600066979817 18.857857577911226 -14.633043057028646 +2174 8.720866680681494 -7.6723739251634395 -9.216109026894648 +2260 -1.097791650232216 11.955110788667247 -17.75151557362396 +2272 -11.79057552649214 -1.6550030533447329 6.737896835550758 +2354 -2.0890056315206706 9.65632054400013 -9.198901306521037 +2462 -9.872750184159257 14.570971021785185 11.633118778025912 +2479 -18.159825932549268 -13.501932428451914 -4.0494427938149276 +1115 4.893442581470929 15.075952312785237 -7.9782984934880945 +2639 -15.658230902211246 15.88554484883683 0.8106992008962184 +2641 2.6927681725699113 -7.960650100025258 5.661019048222223 +2717 7.931310959513231 8.699272443751466 14.025955070993385 +2732 7.2623462705144295 13.80722272002381 -8.56620775023465 +2584 -0.9241279702135445 -8.75611206760269 1.1524271630954817 +826 -8.10539796364611 -15.127701468950573 -4.240550157808712 +2813 -15.418968534948954 0.28682646886506447 -4.721126194369761 +2866 -14.524470182704228 -16.000035155942484 -13.934808686383839 +52 12.146504523998743 1.803062811016986 12.059021006205436 +58 0.24223794070575466 7.606936988999289 10.277872804892121 +174 11.136446284787244 11.356072335557322 9.074735232987985 +221 -4.146535804452931 -9.39630581520203 6.1469178758724405 +1611 -17.80256164664207 -5.493532763481266 4.284212742872213 +1582 1.2772764259323024 -7.965734390858622 -1.4046118433311823 +384 11.134146537651773 0.872716153361043 9.236873400497128 +637 -7.968122005079272 3.3563185734075205 12.936285680492636 +638 -8.858340158329595 16.18211890155745 12.092232495410485 +1402 15.246719453285325 10.258017649431883 -8.275473994451131 +1069 0.08442451969616095 14.174738631067616 16.221056221095587 +991 3.3072680512809605 3.3993049277656455 16.098138477655375 +1530 -2.380137379738002 15.732849805449632 -17.98842780167858 +1324 -13.085649403349052 -15.834123704939945 -8.165654327187898 +1329 7.823961228877557 7.351387980464024 13.698827446719154 +1376 10.02757163866361 6.025214335690628 -13.664799135963575 +1452 -2.822429672977679 -10.392456490032615 12.613565208798864 +1637 -12.11274641388907 -7.74399254226054 2.073493166545623 +1720 6.6529474539303814 1.020203788598291 14.542398828028775 +1870 -3.9793332318327215 -14.731374255834316 -12.555339954554414 +2024 6.546319281916396 11.799555079986671 -6.243799017170584 +2036 10.873181437680033 -8.878087376844634 -10.84942150146178 +2043 3.54860031973676 -7.829036737940283 -16.31549101643455 +2057 12.495502608476356 18.323142378256513 12.803787998510852 +2211 1.7353694221341138 9.370828582361007 13.279475830118761 +2283 16.20693523165451 1.0793048711147615 -11.164294200094258 +1575 3.3219829497577984 -14.863984451447163 -7.332610992807368 +2442 0.008009001196596546 19.653960034619303 0.6402496469617517 +2448 12.66547322824069 13.928700972176987 -4.91839757663743 +2671 19.80619085759646 18.934780862722427 -15.153140124351808 +2688 13.65405100926734 11.113895989052988 -7.367504053676238 +2801 19.397476043687668 8.443853667903394 -6.75795021587273 +25 -2.3852545504941878 -12.629384271541467 4.822080871935362 +45 -0.8239508081593372 3.3347702456013817 9.462427863265843 +71 -5.76818960435224 2.570397356327344 7.480507012290893 +274 5.852770407101528 -4.2915566290131375 0.43399875874773985 +344 -9.27728249830797 10.072404735191492 11.539721389364196 +368 8.433836538213686 -3.793733425739516 1.3058808587193775 +450 4.85428557851828 2.596307859084065 -7.737575933657066 +478 8.127213345848782 -2.3753394773577363 9.707111915635723 +502 6.804454989280364 -9.033332574337008 -5.925004334612382 +1366 2.4796942805234483 16.664522935996505 2.6258709116045758 +730 9.941313831304436 8.786970302964734 -1.053517489007285 +843 -9.339913510677441 -1.733858996556381 -5.203150064133093 +858 -15.363005426102427 -5.332591999432311 -1.6933173656638434 +921 -7.134144227821443 -6.5203746016501025 12.439523242585484 +1075 -2.0534966680303324 14.927681282507551 -15.081087443760065 +1177 12.460826028833193 13.037685744851569 0.17892765716301878 +1305 -14.832785523904993 14.816027412066193 15.028500128838466 +1312 10.284626715132495 15.117401584174639 -14.868723656642707 +1341 11.104765837916064 3.2516927224540093 11.454308353369658 +979 -13.832200450508125 -8.766842467608724 -12.877042903709071 +1496 -14.725831175856845 9.518716726899136 -9.517923551249755 +1524 -13.05470562393772 -5.271316579882739 15.734466105238512 +965 6.798133390063085 -14.767845945624009 -4.890310811645898 +1550 -15.945143532765513 14.486739528589853 6.903225250542357 +1648 13.526114482588085 16.500933572916693 -3.308974302705091 +701 -14.174117351474317 -0.8857578074375698 -6.5789616507236195 +1854 2.6977103271591987 -3.283903062615301 -13.454803438986186 +2022 4.133208826939882 19.430500724656007 7.489794044319656 +2250 16.229700409818836 -8.23657144505939 -6.972363397081858 +2788 8.189136524659062 -8.451959686743075 17.94855785848054 +2343 4.463561180939536 6.253309115928192 18.20098279387178 +2380 17.952546143438337 -16.012007506408715 -19.188990110309916 +2389 6.134391181454379 -13.504056642574145 -0.5580869738035119 +2510 -13.310515840227868 6.5588611956792695 19.328830185708373 +457 -4.530899805024797 9.351539009623949 8.401858938973106 +2629 -18.470734876940238 12.916463894247773 -7.815169910921925 +366 -8.213613061658831 0.17098498872900797 -10.328350490469578 +210 3.4349712512009476 6.894761955992158 12.362010599145655 +2758 12.293525928858172 -5.698970738052874 0.47416048915277587 +2895 -8.833276038576711 4.924868536766943 -8.069987473088405 +7 -11.107540793233575 8.916606530569538 -5.868390306947158 +55 6.691549729640551 8.825555466556189 13.103542620655174 +100 4.867589459473769 0.8466836889507992 -5.763347087953402 +169 7.010658762681105 -8.091265635259687 -3.2995443452554944 +269 4.290653058025112 -5.761505728015522 -1.2313371459822906 +270 -12.177147734524624 3.531867531383094 -1.8057729924923194 +393 -5.989725641820701 -2.5445864562171785 10.191024512175867 +485 -4.784595299397293 -1.0660524399581048 -12.867898791746494 +592 -2.175378036608953 -6.296555856857829 -8.069290958883947 +850 11.203110192616759 -3.84082966688219 -7.39926502293587 +931 1.1556653635587029 3.0785787094070094 -12.219776949689924 +1519 3.189785383618792 -2.7061919228884572 15.459746567044679 +1099 16.392305465954617 10.998235325100786 -11.560843682376726 +1243 13.027256855387611 19.507623708335043 10.326035848598652 +760 -12.16171775390682 13.953448215711902 -8.370229494900856 +1291 19.154271494479776 -3.0206573394943876 -17.895485627105305 +1362 18.780250352833473 -18.3103734046697 -3.504385795352695 +1409 -11.832093727793554 6.0229939770211685 -11.789344721143182 +1423 14.294568464964115 -1.790433525510826 3.7532603392947204 +1454 17.976833464261652 0.25476784707196015 5.171933342553823 +1660 -3.714906617143173 0.6751881501012098 16.4319033229726 +1684 -10.692302949309337 -2.9014299428858408 -12.88478201971924 +1731 -18.1179121661536 -14.53166691969287 12.518939920627625 +1801 5.502896931666044 -5.71879571448935 -19.180037899520823 +1964 15.083136514442534 4.431144586721924 2.832369469306072 +2120 -14.272119053036025 -7.58103664180214 -2.6382678971961897 +2207 11.261194549305808 6.416532699012663 17.988163626473312 +2289 -10.555268133451472 -12.145611591407025 -18.704271717772205 +2783 -15.786504975094163 15.599443387710412 13.045218454514117 +2625 1.9822293804572166 3.8857554442553393 7.644333975273417 +2705 10.422406906740774 18.400750172822498 -15.404776192638034 +2765 3.276704306716028 7.998313393580437 -9.086029433147585 +5 4.892142486265433 -9.018003878087072 -1.8120517746456675 +726 -14.223328260929067 -10.576007445435476 -12.325618107217531 +29 -8.637712216169643 -1.034542194721038 9.691902282187364 +91 4.757028006895669 1.760949168728751 8.467383158694341 +179 5.540083118148262 7.881541653262636 5.925461602742017 +240 -7.953642549705426 3.378821226063465 -10.722079448695174 +326 6.631552295772764 -13.654028222066303 -5.419008257685228 +329 -12.712239273663785 -4.002069140787071 -7.299235414717009 +360 -13.67686812175262 8.533381044263194 3.8459698549113184 +403 -11.915143159807887 12.757702708441954 -10.753001777899486 +409 -12.16664760743454 10.996539992605696 -5.527653096913381 +410 3.6590851681883283 -1.0008210042837955 13.074071488217642 +553 11.611864825371404 1.8632096210205336 8.880675484955395 +562 -1.516649582976253 -5.265547640839569 -3.537967375859087 +644 -12.371123838419503 -7.073290357770409 5.220073381425719 +733 -12.159809395008985 13.33133598897175 -1.5223530458603687 +902 -5.3972420484639985 -11.844345031091098 -11.548475006994288 +2150 15.859107730164597 -5.09714938203693 3.485867369662406 +1102 -14.493961131597088 -14.372533804591344 1.8530983119167945 +1245 7.0924382140583475 19.25316564793227 5.6888750509609745 +1258 -18.19577004969654 9.473651835743679 16.93690224700435 +1303 -4.721254075026647 18.379214779780717 14.58009867820328 +1361 -5.481645420934154 15.40722271503714 -3.7797762282989855 +1377 -18.770096930562186 -1.7546820624714674 16.732761055777175 +1445 -15.790782713920034 -17.10349048634139 17.784152617299156 +1481 -12.580063720168996 15.851577863635239 17.822917503767858 +1574 17.151722128029785 6.9385304279601545 11.9669378291783 +1580 -17.819058813550026 -8.41025897870813 13.33795149856077 +1656 -3.880886471669438 -6.243624232377942 17.650163309554387 +1800 -8.770046489491724 9.41229055333782 4.656415734188409 +1849 7.462470671043341 6.698081182908369 7.617801201104785 +1945 -7.551418496332446 -7.0578337843918 11.595100380598696 +2019 -17.18570677296906 15.028369944879376 17.304395031538903 +2039 4.608904634092047 19.07332676133123 0.9994460221527991 +2042 5.0022537315874 6.470793629953207 -10.680911793347335 +2108 -12.145170049149236 -3.9857143462292206 -11.69725284544143 +2235 -12.14287807483754 -4.657524661966554 -15.222728591297136 +2324 -8.928555357878228 10.479274504636281 -12.948652952217875 +2406 16.29868881287499 14.653864120100842 -6.131390437140203 +2428 -8.414509283054596 -11.606334435190314 -8.66132140817414 +2435 -5.98148644916691 1.8858917008905989 -15.645256208325094 +2506 9.890357637694764 12.257831823967804 14.181012883054215 +2589 13.605522852085734 18.554632258255253 -15.848056102815535 +2613 -7.792068827303236 -14.786621453162864 -0.462443717824663 +2655 -3.0089039751403597 -9.024247146114883 1.8037584347647082 +2685 -9.122292223490978 7.364647660425885 1.396133131303076 +2730 -18.97102822986138 -8.207088157532459 18.23697919919821 +2914 -5.036255860671751 15.20225071665758 0.24183337776464076 +31 10.43113139147764 -12.10389159199254 -8.12954597083199 +141 8.403448096213257 -7.499387501503938 0.9178946442589941 +162 -0.9495908555840938 4.33953745038972 -4.511515440484206 +184 -6.460069407583937 7.734534902667127 14.010469623929938 +202 4.569610263230631 6.702250837632602 -11.964048375461823 +247 -2.2357972337599588 -7.696221122927996 -11.550991564525464 +266 -8.118032259459017 0.9933739137707476 9.000290104640417 +323 2.1956736099474905 -5.4636850242072645 -9.75068664770224 +435 -10.735168451223304 13.972907650099783 -8.961641970525436 +481 -8.282983218430818 -10.824989009032283 -6.174697891724899 +484 11.143112148936233 10.715275393067033 -0.4347983724854141 +567 10.21964682801289 10.873778557634934 -12.479034225145341 +589 -11.72952938089305 5.665659406525205 2.3415077329121905 +609 2.51813783478826 15.0232467597328 -11.011222632330798 +711 -14.130099488800312 -13.083244968059175 -6.451273756074345 +722 -6.618539276990125 -5.161525000778912 -3.809490597463556 +809 -3.2071299351770963 14.482192420506959 -15.05124008453702 +849 3.0030713311845285 -8.674534988464499 1.8274486053685892 +870 12.763680478750496 2.551990760460331 -1.994474539063993 +918 -7.19502578222678 -16.18375258779478 0.5821163652452851 +951 0.6099621419612307 -13.703404317372845 0.5227133771437089 +956 6.663514977548321 11.413510509205567 3.7424281270471407 +986 -1.0871329515323789 6.740253771159556 -4.131233235950011 +1050 0.35405831175624314 1.1797508266049304 -14.621385828336903 +137 14.15282932732007 4.416805640793059 -1.6157598187929405 +1280 -13.940486925319506 0.7509286087724054 -3.967952679511937 +1380 -10.516611491726428 10.468204722970055 -3.033360554519652 +1488 13.936297709173513 12.478450051610228 -1.2255795087376327 +1505 -18.077006274943184 6.692262922995436 -11.783648010714781 +1541 8.418356750919617 3.136170979064411 -9.661526747946034 +1959 12.270478303273036 -1.1301882234611584 8.870663898593069 +1694 -10.857229466223032 7.883202929114854 15.903522913788061 +1705 -8.624887459393445 19.132709926255046 19.226734586672297 +1708 -17.328373527615597 8.002601517039448 -15.401583602348385 +1748 0.8956139098598191 5.0880598526609235 -8.82512131102175 +1797 -12.664852734933916 1.7514193160728468 -2.5273186410071165 +1820 18.297984431028926 -10.798048686733392 15.411442856643971 +1833 -16.053070130684528 3.443446634156279 -18.7585711758842 +1843 -14.92597494035018 16.302408113880244 -8.519445674212074 +1897 -6.822467895671674 16.191868932070744 14.913609128719951 +1949 12.817719743079563 -14.003613909337611 -9.31023897354041 +1960 12.580007752267939 -11.54074109539399 -3.6386914785200393 +2005 4.845634464917176 0.10329105438175337 6.847945804273999 +2009 -10.913448329400897 3.645311236389401 3.379857329704218 +2027 -10.449745276967766 -2.3089784278173306 -10.579901653108923 +2034 14.111940437458571 -14.163931163943976 0.556220352976502 +2076 -17.310258037000075 -1.0745282871547324 3.714671663077243 +2079 -9.161919381272916 7.632390550218395 -5.846713952087843 +2147 -1.2280057879432345 18.255362334032395 10.222239323307411 +2199 -12.293303446235882 14.68972545219379 8.694679462950825 +2252 16.68232751185814 -4.379246516228977 -2.1716192955879206 +2345 15.467524202809422 -2.013701477164017 13.818963854615392 +2376 8.357334493021963 -3.4463306243308036 0.13674687663013343 +2382 -12.07568267268361 -11.90205526047025 -1.3273651930895094 +2454 -2.733872423434884 -11.345621175503874 -16.472093967002795 +2468 -6.149372586524903 2.1212063380025836 -19.20743007964698 +2483 0.4603061310616785 17.96544263128311 -2.5234058061442655 +2519 -1.8842259587369092 2.4022946494203667 1.8811112309226032 +2557 -16.334869543088164 9.596453626728419 3.6364069902759395 +2624 -17.39259215369228 -13.108237498947194 -10.839577343764576 +2692 17.428537172036663 -4.600711064096134 -0.9891309207888732 +2727 -12.33708129990648 -15.610254886367954 -8.132587538198772 +2954 15.102734854017312 -18.91676533156547 -4.947632308243963 +2997 -6.0690025342962635 -18.85511588927804 12.175957334139381 +3 7.943371814833405 6.33438034711538 2.3052807013945276 +242 6.908159450235451 -12.519080567564323 -0.4241653441828667 +522 -8.742953580220199 4.7889693966327185 -0.06516646869185728 +632 6.34373476269815 -1.0049239513266348 -14.954428408239258 +820 4.211587783433961 -1.2925603421004976 -10.266015181819244 +846 -7.416531345095582 -11.695122333524964 11.548986060180168 +890 9.01729713193656 9.390909819663973 13.628870631499547 +969 -15.101016945301396 -16.03872524389602 -14.135831432447945 +1079 -13.83315482788484 7.888837184672594 9.529066272170445 +1238 -1.748835181785358 4.7197736748543715 -6.1133452663691115 +1263 10.364269040011855 -18.08983420244289 18.953864224953268 +1309 -14.364569116453005 6.331650405056235 2.3202617072458995 +1450 17.37148102271738 16.282151636773683 3.7671467473795244 +1500 12.583155810914606 2.175658006730349 -5.477752937383389 +1556 -1.4250467737104924 -1.1985893746008316 -4.149828706272645 +1683 -17.66861022729518 11.825685572813262 1.8081456228786776 +1754 -15.21143065615202 0.19694646526966306 13.193533701310052 +1857 -10.831791823708947 4.2904123669494645 -10.872693902339934 +1914 8.54733263519565 15.217616524324386 -15.85619517310406 +1980 5.967158272197042 -2.289937317801365 -4.100146194001461 +1440 -15.653415553300412 18.431068848420814 -15.348088852925871 +2037 -6.696438746864549 17.940554023775505 10.297016109924217 +2163 0.8682745654330182 15.911968940245648 13.79715521249217 +2408 17.2859760522875 -9.851073771881838 18.85167237186592 +2485 -15.90612994437103 3.9067359438244953 7.526387082408669 +2591 -1.7440489426985228 6.7760488625022015 -14.542175326991373 +2631 4.888926430911099 -16.956065361386226 -12.795216894991198 +2665 8.210097021490219 -8.90609259708872 -11.216887274999763 +2667 17.20430063889795 -10.813956575900125 -16.794314934247407 +2820 14.925989566053651 -10.805104634310432 14.401199646527902 +2830 2.133542482858122 -0.5413997097879688 -11.19549761358471 +2903 5.742183481070529 18.28193774177398 -13.441153632630732 +102 -10.315651817614999 -5.503006127645555 5.423382032202676 +168 1.1398043805141282 -5.306652220309757 9.829713559590871 +215 -12.580871947389873 6.746057501278323 -8.086294496361038 +224 -0.2510462506785556 -1.4832540582695393 -10.82051076678393 +235 -2.8962446278969867 -9.448968471554181 -5.7310358020388765 +296 12.394596891710792 2.554386249341277 -8.101722789818462 +612 -8.49916326851098 4.126564879616485 10.889465936955007 +616 -4.724468771441727 15.370545043389221 6.160791136778356 +790 -1.8850541158116076 1.3983370458498297 -2.783623924102371 +861 -14.410320880142345 -14.554537181751787 16.336959312132244 +990 -4.857174501097595 8.306561862266546 0.6091747086847781 +1008 -12.145218980128476 -3.0147628961102804 13.24325690674273 +1188 2.429519364336341 -3.071876103227978 1.5226913385317047 +1201 6.360986267361178 -6.843637329928738 5.8368338803569975 +1302 -0.19717806311775357 -19.132066097771773 -17.74953327673772 +1411 -5.255662663369024 11.776239589268732 -6.177025789592655 +1624 -10.617601994240314 -1.5792004146294263 -12.616899165512786 +1155 1.1432235310182177 -9.855899462202222 -6.9538263127934705 +1958 -3.886973929014326 9.023547889295429 16.293230764690726 +2126 18.557179763961923 -4.927593618328581 -7.881059769408221 +2132 -15.8603541712378 -10.60029645397489 7.626300174671831 +2152 3.714801865192244 2.815735091929785 13.409633171734306 +2208 5.679676147631464 -13.260228486108453 -17.80563135695933 +2278 -14.526343669075935 -8.294698032872173 -4.080360456512691 +2336 9.170676298520576 -11.975483377078287 18.743001292479487 +2340 -13.25687508541853 6.659508111016609 -13.591456925275013 +2451 -18.277707488003415 4.1069162461658815 1.3567873076508787 +2471 -16.67187435877837 -10.648233252838512 -14.187026878147337 +2604 14.838492680632669 7.969599846452851 17.834677434646927 +2616 -18.873866663864945 17.873426076110285 18.675254300224804 +2770 -1.1318853316082238 -12.3550760842858 -11.801972015273359 +2907 8.193232596282382 -17.995329058454338 0.3878937721184806 +118 -8.364600224554819 -2.305808676966615 -4.765470703472142 +334 4.4116703547784475 0.044638303511329185 6.968449252299167 +358 2.733204264104319 -13.272530097363617 12.17185295505997 +381 10.658834624974851 12.15767410482964 -11.11291802853828 +382 -10.466867097860572 -11.813768087778517 -5.173259434695347 +411 0.7301290344677116 10.560818068281625 -4.897615066355333 +444 11.635566770217789 5.8628817233330945 -6.825296665909813 +1536 13.732320664502472 -5.9707759357229975 17.827844218287492 +794 -14.675454311803067 8.686207409322032 5.611340639590794 +1092 -4.565898050697635 -0.5951696737822965 5.646667508014709 +1306 -1.4390842243679651 -1.9678871403579898 -0.039928894518725146 +1343 14.191172852214422 -15.067503823982532 -18.08974139586283 +1392 15.34913146424533 7.003692668601207 9.744084256171597 +1553 4.130046259007896 5.4702440642312045 -13.11077932307103 +1557 -8.194180511091545 7.3152141420912535 -6.379535498376787 +1614 11.705309738050662 -15.206801394824053 -7.682660185265888 +2167 -11.83788786031631 -12.972946188165418 -10.193826233723716 +2180 -15.354747572786081 -17.756094486967566 -15.67798820696223 +825 -8.337606213197008 5.656275055676178 -10.945080309388414 +2320 -16.651765803379334 13.772076759574286 -11.369026439377977 +2325 -14.759116443656678 -1.204463171312775 14.708337673292014 +2439 14.129568434338154 7.758654384434167 -0.1536711972563994 +2480 -6.308120447478964 -0.8285577936481624 -16.71963664651469 +2569 11.128313878713872 7.093388687158541 -11.262812174384964 +2593 8.587183965998383 18.71754959504086 17.98506575717836 +2700 14.010965393265018 13.241494260644316 7.140060552008796 +2701 7.552310431903999 -11.892938355604818 -4.8716354093614855 +2761 -9.099897022976865 -8.169443022876663 -15.342626371639286 +2855 -9.242907857568124 18.2148594906923 -4.227664962767661 +2925 -2.4800338821390833 -17.120718008695587 2.592342417080961 +2973 17.413979230425838 -14.117900282898614 -9.663213365673284 +2990 16.268246543716725 12.519939818362555 -9.381476005559046 +2747 16.507797673132806 1.774446957170662 -7.431980434012686 +140 -12.107358608385546 -6.599034241847654 6.673892695137238 +201 -2.199833709196224 5.204363823417576 -4.317528557259669 +2674 -11.945172344794743 -13.22423848676837 -0.817051034203779 +245 -10.385937185233544 -3.712434899820673 -12.565996281404402 +252 -0.10087108113594324 -12.653632682772818 -8.362051762523368 +348 9.845941971645075 11.59040255448325 3.8735754121569834 +425 -9.99041747105373 -3.9771646577097 -11.256997187887126 +489 -9.826767283354775 14.147629405998279 -1.9364586425808208 +501 2.8400904446213406 8.5483886631465 2.5625751139041273 +608 3.5909100764505886 -3.030610563569388 8.45871170329795 +645 9.39773295900155 -5.02058835241966 10.807942340564445 +715 -5.003559888498215 0.19987252414319567 -4.702303051222863 +741 -8.012692040625483 6.273436270878346 -2.9169070091360454 +792 16.001516705846388 14.887488953028708 -3.979664317528013 +897 -8.065748321730531 -2.6541742482313007 -7.780779617384079 +964 12.383344924951462 -14.047118509293488 10.892629188523124 +1005 3.143462932072194 -3.217714905410296 2.6024597644117975 +1265 -15.96960012858418 -4.62504067172961 -17.96662069261192 +1346 -6.025942954126146 -0.6271582733240971 -2.3978397864241474 +1430 -7.411006685381373 1.262118526218981 4.329046489249654 +1436 11.391431190097071 0.49449042331352483 -2.6920527228209785 +1578 -10.827920071111812 -9.023086877807136 -17.88863468934204 +1753 0.5407131226531857 -2.390039724299218 -1.2213215901430214 +1560 -4.688420438389605 -17.681192847494348 -10.98285589748325 +1662 3.596295333679797 9.92061115467185 3.9218415717980357 +1700 -13.065240551370662 13.633270916624916 7.3025254546019776 +1903 -14.298653488015935 16.77098551965116 -10.936523935079585 +1604 -8.146967862445228 16.957748492714263 -7.453041455552673 +2627 12.736027283561109 -15.252991001975564 -0.13093613270310553 +2598 -4.79082509432825 -14.303252022644694 10.571902514024517 +2636 -10.719344497499035 12.927540501665835 -17.615741897545462 +2745 15.69131304693078 -3.3247652799643856 5.248315878164249 +2816 16.22412391657581 15.618374336662017 17.673496904940293 +2931 -10.97431118591748 -0.258131355438166 7.340002683062928 +2955 -12.865599081909348 -1.5924930735580356 -0.8684823442463252 +50 13.808479045930847 -8.537119322604592 -3.9430838640297687 +109 10.848841200834725 -5.610112712729593 8.066617637428571 +190 -10.706808326750219 11.757122967438377 -10.905836414558879 +229 7.945911904341159 -7.311323143333409 6.844242969178564 +2618 -12.560131886040036 -1.8912890825459383 -6.026116136576891 +2487 -12.183646739235018 15.617939112854568 10.358690373127407 +441 -10.121518011129428 -10.24141566636925 -0.6934131792656747 +520 -11.910586400648496 4.837672129402697 1.5953394108938557 +541 -11.937814438174858 -2.0880517980182494 -6.829816290906897 +563 8.304711572300219 -5.023003413419765 -11.528756058373306 +579 2.9235829292549544 3.3818817185225916 12.547123388235297 +624 -12.44216959410301 8.609002110209925 15.857887371256705 +761 10.736246468582825 -3.4033860520881256 -11.861981291375606 +773 13.344266738529578 -15.608907726139686 -15.986759723112318 +2449 8.166264160290131 -0.9375619113219398 -6.679781486861239 +833 14.742981539910236 -15.761501057927372 2.3532305162082463 +878 11.481725278101226 3.329180221463233 14.56460767091975 +2395 -6.0280041851746375 3.9227540670582806 2.391826265848531 +1030 -9.075363341777946 -2.081600592797798 2.8699817734765007 +1033 -5.645572323848203 -0.4560549050997143 -10.356231279756178 +1927 3.9432184595530444 0.8972244185618253 -14.334699609987878 +1221 -14.582108126988654 -4.895400434320846 -15.51253216501187 +2010 -11.030860130773608 -10.043705814732489 -4.887220882132764 +1383 -17.94938698146815 -4.026513124237729 8.072091468756081 +1388 13.47029757224015 19.018663092781804 -16.293312122901018 +2693 7.107914511301633 5.012135408951659 8.482498156586042 +1523 19.603574072111766 -15.845591552042677 -4.940647720799733 +1592 17.705927532019654 -6.470616945705083 4.306819943207994 +1633 -15.705594319670132 3.709039065358274 16.241869354727122 +1702 -15.392177641507088 19.438124249923657 18.039315500456148 +1777 -15.678127293532555 -4.968923509182337 2.961870954724002 +1879 5.335112359305261 -3.7764781692740925 16.7561642957326 +1893 6.8996518070124795 -7.080126635129749 -10.34363882051355 +1156 13.609166006383683 -10.08934319227428 -6.9345709072638675 +1975 3.949119723528382 -17.49929966510069 -10.959900054534405 +1984 -0.47814513531245434 1.0100827864369943 1.2108057927072688 +2084 5.331025248762562 5.917500084356077 18.053839587067905 +2159 -2.805780532712712 -4.921514063525255 15.911972665289074 +2187 11.753057332183628 3.4265617499436094 11.001360440994153 +2203 -5.6269089361373785 3.930722183289508 18.732888046854363 +2378 -13.901847420976743 -16.116305633206387 -8.441591440803803 +2460 -4.0219416918589 13.815666959821472 15.777062811831048 +2493 2.6563712197153984 7.4041244326593905 -1.3991396709370458 +2529 -15.477529415784849 -4.120333429959384 -1.0448838990280536 +2588 -14.028677500583967 7.866787890236983 14.367122500261951 +2610 -9.822746551290425 -7.264467944596312 -12.319243805358777 +2711 5.5425349668493 -5.803722120323272 3.603694428605922 +2789 6.306917224000265 -14.142529931602017 7.509529172691217 +1999 -14.49704960453033 13.734373916289348 -17.95235237093653 +212 10.476278977463258 -13.857749869881305 7.187515599076229 +287 10.113123568019603 -4.847534960480137 8.04616443989734 +361 -0.24647840767347595 -9.216998442794416 5.7370761016199685 +469 3.4950468097846263 2.5188938210118157 -13.084593326715638 +595 -2.1920389586429376 -4.631733245677558 1.2898689778316594 +1946 -14.459426315930537 18.980624254600432 10.669318293650086 +1141 -8.23485306422501 -0.2542619761920154 13.499801931651994 +1144 -6.342941524613262 -16.00793242927225 12.960500608455403 +1262 3.4599860368397373 -7.8344316369834415 10.591508482380757 +1917 10.269646325185564 -1.4998768195095027 -11.988003446596455 +1581 0.45145168912973377 -13.272095201677313 17.9086155115698 +1136 -8.09798232475525 11.419240701571324 1.9620705501332345 +1824 -16.78799260717584 -2.5965054490393538 16.888251646055227 +2045 10.117180327748947 -16.449428530674407 -2.6359013323825016 +2090 -7.900168642363044 10.451847739484121 -3.5940239957768454 +2110 -9.908723465882545 -2.1366363155575003 -14.309691259812404 +2430 16.76109818457816 -13.043317572496246 -17.13500550992261 +2607 -5.57369692614645 -3.174545064385207 -17.546988088644586 +2626 17.18285960183741 -18.436263300839144 -2.912651805507061 +2793 -5.135096032349833 0.10243336398752613 -7.567256651487599 +2812 6.315726130502188 16.3296939290821 18.950002126962335 +2873 18.176311608447133 -17.716004054093233 -8.15946661889428 +2932 -2.620234167785995 17.307458040141682 -8.83806370302737 +131 -12.105365509941846 -1.269522622204203 3.965006881624604 +1772 -8.609397839158618 5.115599206216999 -16.287476962864563 +180 -7.3296318488487975 12.446930931012556 5.445604762419093 +1489 -8.388223330992385 -0.941586422055041 4.066311766731952 +392 -11.10746892531578 10.124490624941464 13.723958784445067 +408 -9.652288244001426 -11.075018164005135 -11.30911089874563 +449 -2.603555364250931 8.461542915123815 7.70777212563438 +1239 -8.492000090804387 18.568427175714536 -19.15501379901424 +543 7.776424714279205 -10.86464022743446 3.4511285901405384 +734 13.426941513425875 0.6782246016285828 -8.230391543731251 +1035 -2.8192701105782154 -5.9377800903376015 -4.664591944581242 +817 -16.03947473064111 3.4210841258335956 -10.209682266970013 +1026 -0.880166311866974 -13.232757203538856 -1.7190983135653002 +1107 14.230716498816616 6.317612079932701 -12.459789355167908 +967 10.467034947860615 -16.007184094730057 -7.158140963610276 +1244 16.570286317882353 -6.190510192001573 8.898320749984192 +1482 11.092694477546894 -3.6665481401890934 -16.91492034794748 +1561 -15.326046052852229 -5.685919827543497 -15.337322014186627 +1616 11.559004638668505 -4.99618464947382 15.100156944594893 +1765 -4.427516495667969 16.905866938560095 -17.17982553179369 +1783 6.934267293390322 -13.192985668705148 14.93976871311986 +1874 7.772876955388822 11.024500048066932 18.68279611722785 +1978 16.69547212132451 -18.61593064936134 -4.7190403431629155 +2146 9.76622821972763 3.2449003876028804 14.874604227645982 +2564 15.99957728624616 4.193325336703003 3.492536786228503 +2574 1.6318253036553452 -6.4021775046527125 17.970851110733303 +2702 10.237558119050954 7.895958689734763 -4.868543781796825 +955 -6.168218723461462 10.623066706838786 -6.71106782663822 +2946 -8.566833107745792 15.026633758323301 -11.875692416415145 +2982 -2.8946296835251175 -8.874334016365543 13.040285498264197 +182 8.860462350447651 11.708836187130744 -5.5754292595345945 +300 5.818945290854342 -9.42040692278001 -4.561482256341947 +940 9.015797767989115 -15.808900044996063 -9.579939801933653 +727 3.2849920544477427 -11.338471398225224 -10.264385337779299 +893 2.7462063940577996 -9.944703878204873 4.521764175886899 +894 10.74309542497159 13.619323305726018 -0.31275331956407804 +953 6.944845145172327 -1.175894528693473 -11.217702613224118 +996 13.702961445789319 -3.0726037923786387 -10.70758021663667 +1043 -7.841528772937672 5.775256700409939 -5.670490855053661 +865 -4.928970783754255 11.374747492459976 6.170410138332788 +1226 -8.7149685854092 -5.5259172692977625 8.70013949864718 +1360 -12.952273591989044 -8.189148804165473 6.199510658956468 +1422 7.924826951537728 17.30161811667948 10.589410384972089 +1424 -6.130089527332295 12.667401608920484 -0.15158415975578474 +1591 -17.928939328558215 -13.100013818537006 9.796751593066976 +800 12.89116817704781 -12.691678656221177 2.727784538216562 +1826 10.295373313874991 -0.22962621274959158 16.109664981086954 +2224 -18.062744341003466 11.23445121340134 -19.233022195860325 +2226 -17.97353523216052 -17.955936786838453 -3.827580910538202 +2262 15.39718203780663 -8.463791507024487 15.056267250797985 +2300 9.796629808134991 4.695103308898721 10.375062413418856 +2644 0.47046808773398235 -7.207664439348257 1.744727161073816 +636 -8.052143039161027 -2.8614916616249655 6.296777306482152 +558 14.007644918359746 -13.207078322707174 13.648566584113452 +27 6.088247036713229 9.775007945850705 -0.9846925777399428 +87 8.068566803223527 -2.1504940527887615 14.10597687923888 +94 -2.213538759780814 0.2115300373049879 -4.931573241218711 +117 -10.520667901202888 13.5164296178912 9.01091185234262 +128 10.965993396633689 -8.427732574031968 3.5678943597927204 +286 13.341053663296316 -5.5457205668381055 -8.265849386127435 +386 7.635860353893008 -7.176355652809565 -6.405151611043321 +434 -8.75441595563689 9.320283233743556 -9.881075657352538 +546 -0.14029141450635846 0.8526785278998231 10.486429357366942 +654 16.472603462988555 -12.661137879806423 -7.107789822579373 +795 13.550596172497036 -13.595534643550659 15.213809056934545 +824 15.401910605064096 7.645021703191567 -1.2902031393333322 +883 8.467878105268392 -4.450808584838506 7.197730819725946 +1020 14.04999966754842 9.728549668459125 -0.7448294218387695 +1022 -7.197942324411125 0.18972336537744017 -11.799713313667656 +1049 -11.022115664268602 7.448238250647428 -6.343767553809725 +1088 14.03884789792485 -14.219741281315883 -13.139080592404964 +1140 -5.474585592528256 -3.9212812102093464 13.679455631832766 +1478 -12.653564583961018 -4.493740144436577 -6.007922533079422 +1812 12.802281772250323 0.881568370436692 -3.1147424423296597 +1898 -11.95401716862183 -5.107102258995298 -7.02004538004412 +1929 -9.944426290877422 -14.298677418366063 9.071231480223009 +1994 -15.901334105430012 6.124355880737789 6.500200430814176 +2140 1.5803262836146608 -9.699710735638641 15.26375530525667 +2154 -17.77661083169464 -0.46143423848621967 0.22141109329066466 +2348 -9.62964584939874 -14.841844760359992 12.031973957666489 +2432 3.8329229424834756 -10.767470066794505 19.83701472827256 +2546 -17.239058053848346 -19.400111200464337 -15.585978404538546 +2571 -9.171202495020573 8.383188082915076 -7.345850232015071 +2661 -7.745584435275727 -17.383896094821054 8.16979958766742 +2695 3.3335788435847755 -15.936909763450323 -11.197946525436567 +2729 -5.01422863023378 -6.516313036398453 -19.039947464676825 +2880 -14.300256134395086 -10.164692174737457 -0.2677997207435715 +2901 0.4019676529312668 17.296205003464316 -2.002738277524109 +2992 -9.148492707649874 -1.8636413017394708 -11.666134991107652 +2994 -12.213948131445669 15.851733669633655 -18.751473653273266 +243 4.91374783971842 -12.087249401001925 -10.109181227889811 +246 -10.268831226779026 -7.307165809245157 -7.788924780461087 +343 6.481096501621047 -7.200107402818182 -11.241899074978477 +394 -4.830848646556496 10.271771717114028 10.24980964878167 +474 1.1253369187497826 5.055163219043113 -4.936127075292196 +497 -0.7945678742761515 -9.859150605129692 1.6188564850643175 +513 -6.072398485903261 -11.770874693666734 11.52366731116099 +539 4.2819273693696704 -11.571685341848738 7.248326403579992 +554 -0.10470085807085436 7.484788143095296 13.622276121879677 +640 -11.903552659545637 4.379459522203887 10.82269494966029 +682 14.388334121102051 7.02907179086914 11.03999106031263 +709 12.687565502959789 -1.572298667821185 -3.618423497564743 +832 -3.358441867195202 -11.033131858266088 -11.679072211850785 +1006 -8.848528633931558 -15.09099187695129 -8.484541657547098 +1067 -3.948063150182388 -13.94026753938137 8.462368251831888 +1076 -10.493431842676214 -0.2476328262321252 -5.8676755833641945 +1133 5.760603806160536 7.083156337319274 4.5537570115061055 +1149 -9.761330181105839 10.526509443883581 5.246024821284683 +1213 -0.3095620959924757 12.487599424423555 -4.224160924737243 +1261 -5.324585966273329 -10.020057723743363 0.6360186481103347 +1294 15.813760701849779 16.615797178774507 6.745543301914807 +1317 4.638965646683966 14.799471952507545 11.132049333471105 +1529 -11.489704324690628 -0.8126262151074161 15.8842684534006 +1659 10.123802621076447 16.46541027979559 -12.453623202995791 +2675 -1.0291020106988504 -9.368794746093823 11.559586304067638 +1989 13.340124589797542 -13.182411338068437 -3.3025691376384727 +2072 -18.693296308526588 -4.3363723994014745 12.939255921058663 +2073 1.58174049179144 14.06888609151434 -0.4084512177877912 +2107 7.978170311624776 12.403951934524851 0.8612889541397825 +2129 -13.550383454570564 11.98519189525053 17.505371902769458 +2182 -0.6242491670262806 14.600043833417729 -9.2494295549954 +2223 -7.021958286058973 -5.236203653151981 17.98208708303109 +2259 12.490898766619008 19.33241742665255 5.110752541056751 +2276 11.186244217036087 0.9030205586586506 4.694981852573619 +2377 -0.4938467371182775 11.464419242751857 4.92343500303314 +2431 15.881986245010449 -12.508176091864032 1.7856903958999064 +2526 -13.892753201698287 19.15117006258616 15.942065324548585 +2528 -10.746491498079367 -12.208849955567244 15.853173868675352 +2537 6.701823359442057 -0.5759262971359115 -3.588512584434999 +2648 8.061550812423002 2.8312162438521793 -0.7498044754124391 +2764 19.428815333441232 -13.539019457516575 -0.2827791251541446 +2771 13.7333077339201 10.61889976631786 -17.848234214028786 +2829 15.575510443928954 10.032014688371353 -4.984051015901109 +2845 7.070220045075763 -1.4303972908334177 19.156780412734314 +2859 16.695176387413497 15.606692080648733 17.294932951688345 +2894 -16.70625740458039 -0.6287454613829163 10.11931308137501 +2939 15.923912567869383 -13.326874104978296 -1.3208931028037045 +2972 -6.46176757374297 3.563680865661692 3.174006543152036 +170 -12.614044152982537 12.590676578100435 -1.111782064256543 +288 2.1781388217789215 9.68256338665305 -5.433233212776059 +299 -7.542566822061701 11.04756444344787 6.985474498373441 +439 10.564142353690073 -1.8996696548423513 4.437544619219586 +504 -5.0554954276235415 9.211508090464417 -7.112803713575126 +575 -9.194340113461994 -4.339629340253714 9.362264723801198 +1379 18.735567776783416 14.570022370034964 -4.310871187886037 +1393 -5.227507075827184 14.670928536187285 6.319092720900287 +1451 -7.899364280436356 -15.222263931059627 6.789651310266364 +1474 -1.1881682729002285 -17.66992864140489 -17.63045701395521 +1497 -7.426278374325694 18.942000445836754 -11.392674439113735 +1629 1.394900081121298 9.283909750517138 2.576504208985093 +1796 -9.758361205312664 16.648432448842875 6.544211327332821 +1892 8.706974140370443 -6.006163498586369 10.964413759607577 +1990 4.630195741870993 -15.01725052190223 3.464032647326967 +2007 8.647232386216588 8.932761320002562 18.97124098306347 +2030 11.638318852942325 -4.524952811018421 18.103106239496068 +2105 9.406958203069602 0.7192065658972778 11.581988731848401 +2220 -7.115263667282643 -5.698842983339401 2.621333958465067 +2269 13.166412052726304 6.707671035723071 12.022367168226912 +2374 -7.303496348820194 5.309306779499018 -13.665166321260767 +2645 -18.354781048859007 2.1013238354437007 -0.6354474352442133 +2760 -10.11126403655532 3.556956186056681 7.731384138962739 +2862 -8.734684185560273 15.851194143227993 11.373728619154868 +70 -0.6993286906291821 13.39014922587603 -0.7465924739967591 +420 -1.7069107724795485 8.222947671727242 -2.436346484291507 +924 1.8737020933188886 6.334713604747465 13.398336424787727 +1059 -3.133319021621936 12.578008078691594 -9.391154931312087 +2425 -3.5257695964903033 4.866265898390417 -13.178966357310925 +2206 9.480250644171933 17.561564428319613 -10.111457988272342 +2271 -9.81592070820302 -10.121590891778727 18.661056663407315 +786 1.1528645330083143 -11.2990801282081 -2.1333146144176434 +494 0.39694274349901637 -11.939377362774884 -3.6513000259653166 +1275 -6.326624531431515 1.7174837950321147 15.013717813449434 +2424 11.556631759121835 -5.684148617945258 14.43139770342603 +2068 7.708847899056253 -6.900240278527317 -4.856381478322337 +1665 -0.007267232165389344 -1.9355586458580158 -5.397237847053612 +907 11.702427284573048 -14.664822396833708 -6.256238097310716 +1721 -19.194951873456123 -9.161599103923603 5.717735315251648 +1921 -15.576603743602048 16.037409559589157 5.654425609209294 +566 -0.3458024409929771 11.553608974488606 5.190742762151839 +1016 -12.082787544512346 0.0015683771254084917 -2.618279261603792 +1259 13.182851565757142 8.655408538156003 -17.720299968683705 +736 -8.80010100088741 14.130631350705949 -5.78019991754976 +841 2.2358442155594034 11.419920674898192 13.390382254817295 +2633 -6.563218905759018 -16.22888571481427 -19.309939549202692 +259 7.151785972556724 -2.3197388411130198 -13.5417881230235 +697 -1.4839993890881846 6.569683205866268 6.328495479222858 +1146 16.20576377193383 14.59840529899311 9.080495491700239 +622 6.6533351399743506 3.8004815171098856 -9.378270516996926 +1588 -1.8581027479289876 10.331850401718834 17.647893947826976 +1775 -15.404794861265573 3.3456246310432154 -16.746029456269383 +2144 -9.409729232392024 -2.8473845341469195 -5.983116509868738 +1118 -8.545096691609514 -15.870772014862004 -3.1933302117690476 +2482 15.597050071126949 19.311325853485368 3.361885471887985 +2657 15.716402302341232 -12.77289789294439 -18.582069680415195 +149 -8.761528269220092 2.457604535415645 -0.9393411670464221 +1078 15.493353291996634 7.814950510447619 10.159941036445945 +490 -4.218199215456702 -2.5980158392345682 13.595189695238608 +239 -1.9523242468316617 -3.8412029134350067 -7.795968977581958 +1859 -4.441116295178436 -15.700850571868223 -2.246393417606417 +2176 -0.49305763275451164 -14.466126287841186 16.655707424656885 +2750 -3.847760824258749 1.796815785461781 15.783713503206286 +2543 14.169799105386529 17.634158963672924 -4.998802049636014 +2060 -0.5092779369477036 -12.729620856001274 3.300683919375316 +292 -10.470778829668705 6.947237183857842 -7.078640218668448 +729 -6.884130469964869 10.385625185489124 -8.490889978416417 +123 7.647205752107495 -13.673705327410609 1.8898093041877682 +744 -3.742891350211823 1.312651180184073 -4.286358368739132 +840 -8.584247129175852 12.741728484804135 -4.19790810646247 +886 12.804540266429482 2.6685376040373896 -4.945687902722988 +2230 -4.4251233031218575 17.935231488652192 -0.7727865628295668 +1589 8.94848270925566 16.147028797957628 5.9529039652274855 +241 -4.9019398819000894 -1.4818759099484968 12.342028064988456 +1337 15.365436980832403 6.699351940792594 -10.217593611113875 +2316 -17.578404175420324 -0.6090808901145381 -12.11544076260748 +527 7.112846612504373 -8.898202997326544 11.718282589409762 +2266 17.486473660835806 -10.68770812700199 -11.359853212934576 +2924 15.753500062801823 -16.359198990182943 -14.675894616023884 +303 8.958800144489341 2.5309991512973746 -6.809764682748036 +2828 16.65943098359769 2.7290287344250883 6.277717769134021 +1077 -8.463748976902567 10.808359933230024 1.401666972377779 +1816 -4.310329706847026 -12.37992454031203 1.6932758482932713 +2677 1.8176520901781346 -18.653182208246278 -3.717629363909321 +1333 -7.08770549728234 -12.844950657059217 -14.58917641383218 +1072 -14.93332919834124 -9.55818123856331 -5.676375689928116 +1845 -4.581981653613005 7.5494471347963 11.072115655236269 +427 -7.659537701885546 -11.255932025071985 -9.731030096661124 +1944 17.819084426158856 14.092219376638802 -0.17615385499722067 +36 -5.259094405468257 -4.288747785760595 -8.694760543055965 +114 6.8942594551364875 7.380147116854856 1.3671713641944259 +864 6.949349936109253 9.144326302745656 -11.016870151779132 +257 1.4346920101792757 -6.785190998031536 4.640117036198736 +380 14.123234003342901 14.041086181965776 10.17518615577884 +430 9.053624411915159 -9.36169187018311 -3.6348805874806285 +517 -6.785534403071378 2.3321769305527797 3.6359481754399874 +547 2.3834539199778764 -4.311333790659128 6.06117005818798 +614 5.221507673186424 3.258811135234941 8.92378344997746 +631 -2.6628715408069565 6.980964237519824 -12.80205273635173 +610 -8.098812083747235 -2.5265186767134598 12.492896406090216 +823 7.354376784397804 15.683319162406667 -1.084526395107473 +852 7.369506933149863 8.408527456542524 14.158106123532049 +107 -12.077018030234731 -3.697827886536448 7.586124597480009 +913 13.714766696865672 -0.8371502884782636 -7.029896069695645 +1254 16.199246058714813 -10.573557009181204 -13.28012204666933 +1068 -1.4180514007899918 3.29691496107213 -4.5832201588093895 +1237 -8.941081561528703 -4.083517386892669 -9.366009235167253 +1316 12.27420164139446 -16.93808956142455 14.972895054056137 +1413 9.893337698893216 -16.04232475845451 -19.2217518027926 +1420 -8.913625230285708 -12.941229054721422 13.36674211828193 +1431 -9.568842617832 -11.94051870056718 18.498980828668667 +1491 16.92454553916861 -9.495209038860718 3.3377866805204053 +193 -7.782994048071663 -1.7181920260976755 12.334707178351625 +1631 7.820085880897775 -18.588562943388148 -15.066276920560313 +1642 -15.685438367272395 -10.267072137515054 3.5251590618174418 +1743 -15.63205191734556 -14.440527382377354 15.773263258897702 +1747 14.116267288846437 19.36443753952488 -5.4295264273309645 +1762 9.34400175706067 0.8218279485819886 11.84657432815353 +1991 -7.245109451653379 6.792323152187167 -15.371346598513323 +1818 6.480016447193471 -5.147556081026763 18.546974040363622 +1996 -3.594631047862615 -15.890492716407483 -14.927088324489382 +2003 -18.618916875570022 -8.417965015270008 1.4016627203155827 +2048 1.266245591203011 2.604139175912801 -15.510895809639036 +2096 14.828864045137088 2.913213361860916 5.619967863401242 +2245 12.514536564228365 -14.510366449318495 17.77874235118903 +1476 1.6291264123305698 -12.569421427742077 -8.546082823981616 +565 -13.729946127186164 -10.32534464465142 -2.8630549859494177 +2396 0.97262034473882 5.96546597479302 1.1630861403552037 +2413 -8.213510784776117 -4.0245150952710596 2.4599417391982077 +2433 -0.7467558263722274 -6.3322060290763975 18.190763949850638 +1503 -13.773179772322965 -9.215376191262889 3.325747569091051 +2570 -17.388483251845592 16.75705326587489 -9.937777718391594 +2578 3.9961058448170395 -11.664010614635423 1.8006949679890327 +2817 8.134134616380381 7.763509611066274 3.0620776638200664 +2912 18.71776116056373 -10.354618427508804 -17.72350168431003 +2978 2.4474292436147214 -16.10465894775547 -8.660861929221802 +2984 -9.510740850934978 -15.249686772317016 16.210229166121984 +43 1.2249386122415553 -11.04880968287854 6.649422541407198 +44 -8.507510713707678 -9.880416360044315 10.395734642271778 +46 2.9401299041084537 -0.19805115507945797 12.518337644087708 +97 -8.395784512909755 8.781241490702289 0.699392458669073 +992 1.5637598338399867 -4.216706044488424 -14.444800465733971 +110 7.913102645506185 4.633342089953609 3.976625073612838 +1307 8.78618306650969 -7.304509337911342 -19.01355752027785 +195 -0.37008448415373796 -2.1957754975261756 13.61007111568477 +316 11.033235979712257 -5.021395717998631 -12.67671303899194 +347 8.218264042586773 6.81504872169748 -3.459103780642201 +385 -13.375540082541706 2.6248298077042267 -7.2335821764085475 +442 -13.375588615357152 1.8091387784696706 1.5038302889215172 +542 5.12206238396486 -3.837950781939744 -9.474382783985172 +440 -1.1277697219797465 -4.452314155975574 2.7576597700631647 +2930 18.804410010196687 -4.189237825166094 16.669623033819054 +2533 17.74405486771611 7.24715294624413 -13.68639950140249 +743 14.786166568098828 -9.260537192171853 -5.64562206500774 +831 -14.262332186251516 -12.196975885398478 12.438597184108659 +1794 -2.5724252513905603 -2.221558122221736 8.551339313209583 +916 11.977821293122854 3.7603478960600634 2.709865175753158 +920 9.202988680402484 -8.497656494797276 -0.7026285972230693 +1073 2.515338176579429 0.6652914666254408 3.2737100175025264 +1087 -4.554643160692905 -7.60963470061163 14.949164720080308 +1671 -9.240173888449165 -14.221366671759572 15.063204806256987 +1198 13.687470200613232 -1.866759685090254 -15.543807107875937 +1209 -10.539306788062486 -18.234437645542958 18.571195531008154 +1223 16.365338629399705 -1.7603241486345218 0.2922640581392598 +1247 -0.8059264987061932 18.204890936405523 -14.997066571065512 +1354 18.129017835557764 10.471029014671439 5.241487498233247 +1358 -7.110258420115571 0.03830100884378384 11.964882474846629 +1382 19.449316314818706 17.476793974489492 15.29335966775062 +1532 2.661408953081043 13.68726396418199 13.324156581101487 +1403 -15.457608349553166 17.148846146704102 -9.50262178519575 +1590 4.26004575054961 -4.437565648645635 -2.515713512339425 +1594 1.9956496480939099 -5.717941820235182 -4.828637169704507 +1798 -17.01122398447963 8.083903156638723 18.472305680997206 +157 10.932573516278516 -6.745783230725227 -9.077392013935178 +993 -7.977564987923156 8.12760702990445 0.9381276892631076 +1673 5.268994422154075 -17.61601584205855 -12.957557565250864 +1738 17.604878828108447 19.69680960429115 15.33856081843333 +1752 -9.854311455867983 10.926496834018147 17.649725640156706 +1755 3.1889327851624283 -17.035814178944605 18.622196435421017 +1123 -6.869699950292232 -8.64783245829943 -7.125730028362106 +1890 -8.94830105338966 -7.842449376795514 -6.583576821919378 +1902 14.6185954823424 -3.6984900124247577 -5.059650999139505 +706 0.024545286869555646 -11.33852080404788 -11.09474899917738 +1969 18.220032939782357 11.63400539383134 -5.932771589408205 +2054 4.505538167667697 6.286118752929773 -18.262786706566953 +2301 17.506287230601437 8.774778344768725 -10.31611142114852 +2310 -13.203761957575827 -2.1076714019058187 2.187341615199521 +2405 -9.386834054681405 -9.978358475762288 -3.999126837173004 +2466 -15.813922012637427 -14.075458305514765 -1.8153057785090467 +2561 -12.290373410133089 -14.451202912997811 -6.878289589507331 +2581 7.523249848222601 9.19512515233638 -0.2913796637183982 +2663 -18.093841061057496 -1.8988292934897266 -15.175373751654725 +2668 19.68719604756912 17.833159925752913 8.20344897465132 +2733 -2.692020253061783 -13.410600018020402 2.446499004982619 +2810 -1.9028526507130445 2.887663185694936 7.3214053381695425 +309 1.6157729684180155 -5.554869632164958 6.976773207295493 +2850 -13.659022358019875 -11.029820046867252 0.13942775454030923 +1565 11.451716102540585 -5.3155730209606755 16.583889783966864 +2983 14.285873971933437 8.85331239750872 16.235968090751783 +2986 17.19616047356903 9.146375030465459 3.4187960720872783 +2988 0.9940534427564559 13.45434120556763 17.893609789688252 +62 -6.424412400542199 -12.685014066826382 -0.5875890016864738 +143 10.940558476117426 -13.385032836325687 8.627412103161086 +230 -1.7058763020767629 -2.559202192291208 -10.107700294935837 +302 6.9799526799620555 11.03298665478873 -12.675468106690813 +2469 -11.953712820392994 0.00807842304066916 13.523176323124353 +387 -12.336119752323706 7.696087127567358 -12.474420157912792 +694 -7.787657105443593 -4.288833962778096 15.745485303182809 +544 11.420950567809856 4.375590078579221 9.886634144129022 +617 -4.774660626273361 -10.806453543828127 5.378932711345248 +1968 -5.885243804573801 12.522093908837073 -12.370699972818429 +816 12.262661953793353 -15.220000954856925 13.885200904751317 +1675 -18.893963429328995 -6.34873049899169 14.815156090325031 +1121 -7.927686452790892 -3.6572587929372036 4.461792434653988 +1031 8.055547203689676 -2.9654242014260803 -7.614707326635697 +1204 -19.090927798769517 14.678030968229354 8.110600334778985 +1340 -5.155266749542309 13.830392661621763 -11.079225037493368 +1460 -5.23160864090318 -15.071053123682866 0.6432236854379959 +1472 -19.201556463630467 -2.5858784469593448 -0.4688372572123537 +1597 8.778499460025365 -18.8638158027587 -16.464420818154302 +1607 2.874356367961168 -13.063610806458943 -5.466185569358864 +1736 3.7808495190003484 15.474020617525442 -17.70508370703436 +1839 8.465850094922102 17.49635218083357 -8.729069458967874 +2067 -5.074325633744453 2.451935842167082 13.147163704503122 +933 -9.942114627553822 12.801038705670747 11.751967317118186 +2241 15.95172725108366 -16.161764191386073 11.396872681298001 +2314 17.746066201423655 1.8586159965617808 -3.7517479939558016 +129 2.108666457520993 -3.0312118272692308 0.34165109466027654 +2720 14.659887521299622 -15.177597561607508 12.829893816427063 +2744 18.563313687521166 -19.413808075306367 -10.631218440176179 +2831 16.562708090785968 -15.978705283733333 -8.180849618813562 +2837 -10.18790153407249 8.880280304231439 -0.8306944893249093 +576 9.607880339995864 10.414696582473841 -10.1024556814948 +9 4.256817579365978 -11.06451707937572 -3.828345073973263 +67 -3.6786970009326465 -5.439339744099672 5.061521189701674 +75 5.139161281865819 1.858287003134529 10.651718445775668 +220 -8.654830396027009 -7.054851821139852 7.578184760042488 +258 -4.880922313310085 13.738472298602009 -5.527445284644423 +423 10.018499596834836 10.411534984354853 -6.902447420016746 +431 13.257011419916468 -9.61900887012736 9.586365589396316 +526 -3.611858105942792 -8.817788595018412 11.155433847652125 +572 -7.249639432812499 4.791758918577924 -9.518658982944885 +668 4.475241506899801 15.989039880848404 3.9072534879126883 +813 5.989501043431795 -3.9572031257108904 -1.5339741936370068 +1029 -12.151154712896655 -4.68892286276313 -5.889111087428858 +1108 4.285943120226897 5.953376673333026 12.66497379568629 +912 -12.93373345847637 -13.738010287091985 7.426384316530359 +1189 -10.291838790390964 -12.446826231022515 -1.7209332108007913 +1222 6.447783768728602 1.8201329734923468 15.745467008863505 +1359 7.9706652697285385 3.8457805016419866 2.0668572034637833 +646 -10.610010674429976 2.1659552515725173 16.390871905004232 +1508 -6.238937236735438 -13.857011999254714 -14.5323582715441 +1566 -1.7512062727660398 4.061870134953308 -11.06577496650709 +1650 10.115471480701556 -5.9769982837946385 -8.365114676966856 +1679 0.7203007339835018 -1.9237941705612769 -3.6368143967656783 +1779 -12.71153408822825 1.0383659461855703 6.249600818267668 +1811 16.861747618508424 -6.728252119826496 -14.535068551289045 +1814 -4.078729191266423 0.02070615518700772 -9.400664927778495 +1836 -14.998908062195534 5.499129003432253 2.042122960151397 +1852 -4.86155844426369 11.86503535686158 -3.1214176078578606 +1458 7.692800903257225 -2.250940666031757 -14.964803632984221 +2221 17.392198055566013 11.736119572052898 -14.19277140533992 +2347 -6.804044698703424 12.28635979824874 -15.85861681844993 +847 -13.026199949765997 1.580881298772952 -8.176985980969011 +2492 -18.844034697223606 9.749995975876704 -2.516820652937041 +2521 -17.104299352467034 11.487096288414563 -5.873684267899445 +244 -13.59031885676441 -1.5948063279504794 1.6095855892537128 +2650 -4.376433718734446 13.207602267459531 -13.780352891034235 +2683 -1.8395682218532836 8.297449576868969 1.7889138298275211 +2785 -6.15944515139912 -10.396301213382516 -12.811677560552445 +2902 -18.819133715759463 -2.8624568527355305 15.047582978144389 +2948 -15.291311024563925 -9.789637971976685 -6.80844807697596 +2952 15.693608306363677 -3.941362563633687 -10.944271637928725 +83 -6.533583519127488 11.596594830172304 -4.726822776418071 +177 -3.2757318544179808 6.75733605537726 12.46140070267905 +2669 7.903236769974542 7.172639735851888 -11.853204246970972 +518 -9.019104827908148 11.316446905132214 -9.03451367811316 +685 -1.9706413525346305 1.5532592417482856 -14.678295276402329 +714 -0.6062230683783465 13.505304928828313 12.43849930120146 +914 10.244870437686854 10.102419027774358 5.264649826787439 +1062 -6.295330100119756 -0.5043263122128026 -4.256265061393067 +1091 2.188063303972576 -6.9322550195675605 -11.199713701978618 +1178 -2.060977653543948 -12.717541576680162 -6.90361672058637 +1242 -15.432759035745288 3.668015019288569 -6.967889208008011 +1279 -8.799012260925053 -7.099159057825198 -16.677386483707778 +1371 8.888437647161352 -13.204765511068851 12.921070968380363 +1386 11.849621626643913 19.468733275484347 -16.217107914619923 +882 -7.7691855701079815 11.899158418365026 -7.948218310277356 +1577 -2.7150553039329823 -8.630474286234946 -3.6766002989044417 +1795 15.135793630960835 -12.000217255377203 -5.029065553448785 +1734 13.78586720933596 -7.453516084469952 -15.016502297140715 +1769 10.845653125781338 -1.2301545894398358 14.035921508202053 +1926 6.607633003067497 -15.912342988316624 9.765617422631223 +1939 -14.147111996688688 16.18236305060414 11.920349609070087 +997 -5.341166257045596 15.136275101800276 -7.7060904220767465 +2013 17.725151185270494 3.0771426619826 17.26813494048387 +2028 15.926056693476244 -16.48357760284404 11.315981298585033 +977 2.242000302864197 -15.89832088427819 -8.46457537150419 +2349 -1.020437576527185 18.675282659865132 13.079092562039014 +2384 4.183368795076655 0.22258860657866947 13.037754385379555 +2577 -13.146467691721307 -18.988509495044564 4.231911842996415 +2778 -16.786450023762697 -15.863328596695547 10.497023377631548 +802 14.015383390358727 -16.23691727243059 -10.16743229536031 +2851 5.370645726798052 5.537490696025236 19.698729212020485 +2893 14.76528742299695 -7.407465492697368 14.288364749018669 +37 12.537753520939834 -13.902623730787798 13.54187128184789 +96 0.277974803904371 -11.470469551850984 -9.896020445915305 +207 13.853157385175965 9.990886355618668 -6.451975756580101 +254 -6.096395103641281 7.445379837992924 -0.8377474900540064 +402 3.305098197846772 -6.907613647716517 3.38270020609383 +472 2.9748092372584547 -8.880871299315158 -6.841302093244776 +237 -6.775733883074466 -1.9614470231582044 8.379590509208308 +877 10.273959383275376 8.561824193262957 7.640242588862162 +742 -14.576959792491964 -3.4073178877343775 -12.552542552481096 +812 8.796602433567932 -5.188160494322363 6.270372535846724 +1908 18.902939920427766 5.696015387745538 18.8976880318497 +1152 8.534595149626389 5.201948367452092 4.026922825157323 +1158 14.038874496375444 -13.772701122159505 12.903723345706561 +1183 -11.758289644543982 -6.377564049054543 -6.840135765225024 +1249 11.709186564334988 10.75799539345873 7.543639370926607 +1278 -16.644769517253486 13.779589959521514 -2.6737426435261695 +1504 -19.01408759102342 12.761657667719115 16.28909317278553 +1559 16.70217265528867 15.613898541528915 -18.358169324679647 +1369 -12.188015074403413 -18.60764749000669 16.916951213167025 +1691 15.551831582304553 3.991613091091035 -16.085233987671483 +673 7.451368057331642 11.020632225366278 5.208956629796635 +1774 -5.305383100539437 -0.8216739134194933 -18.60132936049523 +1851 5.452399307821566 7.8141369241956 -8.291167164445865 +1863 13.208021908909297 0.5701176000552144 14.197184457949552 +1909 6.777554072253678 18.05344161097871 -12.859411813443195 +2971 14.946692144368985 -15.59407404013055 -10.53226283298914 +2138 14.062533054088183 17.69267312278503 -1.3768941624457722 +2227 -0.8125925936497376 -15.446121634971549 6.943388613107411 +2386 15.878658471983275 9.947987785224312 -6.275399601814546 +2426 -5.52728117490142 -6.925465337198187 2.309305736778702 +2478 -15.10599730097044 8.529331244072573 18.914859853148826 +2553 -0.7004741445736492 -12.336431488399105 -11.98642952677716 +2575 -10.940617887813493 17.322813864690165 14.089144048831507 +2640 -0.16065622090548956 6.795197377730847 -6.257260458326362 +2690 -6.51370342365036 -7.075651935037049 -13.52339950731727 +2945 -1.4991287206914012 7.882850034094899 9.972416313413422 +13 2.063838112525206 4.088129766703488 -4.646366609654701 +40 1.577407554817761 -2.48701576805761 -8.115706917208854 +51 -11.881069516194673 -6.104941480641003 1.1852228228531532 +710 -1.7446004112719813 7.898933207438018 15.733419777056131 +77 0.9006295897162229 2.977269919164659 0.8436471756400712 +146 -6.241115525768944 -2.380277428990028 11.220440602624867 +185 -7.414507361318954 -5.631110973129233 -6.829217815707537 +227 -2.3325686246245754 -0.360339813667418 -10.891730574737528 +271 -4.927004221577964 -0.21082402144906326 -4.9757699644138835 +308 -6.296975851927239 -11.664479691476002 -3.0791419818879895 +390 1.3407529550732757 -8.18323044101815 0.3151310722094361 +397 0.7417094626787384 8.013617545525111 0.41396289096145367 +350 7.605007544667583 9.481864244531353 1.6355559841280924 +495 -9.188045879509565 -11.226414996331414 7.497275244314924 +506 -3.63841161603629 -4.406729958288604 8.341934356796404 +822 -8.125668129755098 3.8465191872554882 12.371146497540943 +876 5.428982210798833 -8.177959044215815 10.324786799099588 +908 0.14612366814670244 4.883519512234402 14.320789707728677 +1224 -12.64908946410283 -7.666445832698271 12.0312958903994 +1227 7.6670656470127705 -3.6601440701628762 12.332239437870083 +1230 -0.1796384177478708 1.3055956270433928 -9.618748830417774 +1235 1.85704580359721 16.348598067794548 -16.065341684501007 +1368 15.975880940476689 -2.1409322868060525 -8.126034889440788 +166 6.393017823331323 5.391724534465972 -10.21737741403159 +1510 -16.315601850962523 -19.30864796920623 -6.891330973165215 +1545 11.831547400800847 -9.953622462134588 19.808828479599484 +1621 0.4709020522449691 0.08597709683855369 -9.796580617467486 +2621 6.714677618946054 19.500500324519958 8.18239178575274 +2438 -1.5062590032610084 5.6232586039061205 11.05812178718676 +1709 -10.104807021325705 -5.499056567030319 -10.168308361249567 +2046 0.11154297230097891 -3.936603372044761 -9.342583747641013 +1809 9.799039754799242 6.00605432253777 17.050062955534294 +1881 -14.403373606882882 -18.76705909144926 2.811700691237789 +1609 5.858354583418027 11.118526276136025 -7.932314193924629 +1885 -9.667198489641986 -18.900708170141378 -9.426078260395675 +1501 13.406133479175447 -1.1756395908755393 -10.36303935929053 +2082 -9.328630303021683 -11.573468640866828 -4.988232226915619 +2092 7.344226675467077 18.21539872508719 4.835247512132481 +2198 1.3614710892688098 -3.854840300671104 -6.906433204607451 +2261 1.155304730323679 19.286173852259935 11.755449172368612 +2290 18.12902214271667 10.543419434493968 6.923573711042621 +2372 8.196178528721662 -7.676065123849093 7.131959808134314 +2602 -15.820446007838246 -6.145177928481493 -13.062777716066336 +2681 -2.6436658057891544 15.422143845047692 11.841520424691296 +2682 11.854884646321421 -9.654762721795336 -13.155427478351143 +1214 -3.319053928778596 -9.042515814631852 8.30642724925345 +2853 -5.963872979823314 -15.628709620499755 -4.757123512229859 +2857 -6.687665429175661 8.62161413132164 2.192442952161798 +353 -3.222951551897787 -7.555925044075413 8.420210049097513 +219 13.192013899295643 -3.4610749225803277 -13.232947348267981 +231 11.299721300705807 -4.993139637388285 11.527331000931252 +267 10.295143610003308 12.16596690700524 -12.578261481407445 +301 -11.128591285436219 -6.857088835650897 7.498398883928364 +319 -7.869954136784152 1.505281012162948 -6.936247850112941 +417 4.837167175672302 -3.427749536928529 11.665424752437644 +556 1.4361024524980577 -11.248380869901318 4.507259162226597 +665 -5.36876026922424 9.106315533422514 4.054134288584013 +708 -1.3155413832762404 -6.699932489552916 2.632921750338954 +1372 9.491421406813823 9.343459288579236 -15.592996463717704 +2436 9.757074430251352 6.169250949377693 16.384190186110924 +363 -11.831808826567746 4.933145293688033 0.6086579073143095 +859 -15.427062046842714 -2.96750943164651 -9.965271418681839 +57 -1.2973823365771913 -10.113641408060632 6.003008017347643 +1315 -8.92205178518089 2.205753111580089 -9.178619168967739 +1321 5.740580834691376 -8.653739952614634 -2.7724294182947182 +1399 -12.932152425374717 16.443117903575153 4.808635384036107 +407 8.823577292654377 11.488536175535929 10.083473786245593 +1493 18.587035529481316 -12.651035975135988 -8.485990839406115 +1803 0.10591238406213815 19.009167814956417 -19.10835624459796 +2134 13.033666820381319 9.660837640407026 -11.666107140580117 +2355 -15.063503637679649 17.245923869107152 15.168733174444043 +2461 -1.3063169087082236 -4.549899473917963 -9.245231389105346 +92 11.309170810394237 12.982300077856083 -10.523199801824623 +181 12.074208927164344 -2.0237944684178903 2.7403532041799954 +283 13.976487231234465 -1.6729412882037649 12.314523023138678 +783 13.485012295215434 -4.203152542875117 -15.522400409918042 +663 8.254043066614676 -1.8272787385568123 -5.905543174765528 +680 14.216145419959151 -9.707208718422786 7.203087461441811 +932 16.578714594028444 5.170029480702112 -9.299403218190806 +952 -11.228721359762133 0.7917376993162702 3.2220283753836823 +2849 -18.7741836213394 7.946351189700728 19.024729125742237 +1009 -15.545175762970501 6.3451771946532896 -6.915509364396789 +1046 -13.888934960853264 -14.122651379439311 16.55178933381107 +1142 13.044128710570732 7.835790891308581 0.7693197166593017 +1212 -10.821854186062826 14.540197995673743 3.940162364238104 +1485 -9.383159883873988 12.580407712057113 -12.116173563643953 +1526 -19.079453472677745 11.561916730642029 -2.543234067701947 +1610 -9.345159043594542 -15.020853442080876 -17.897224222750264 +59 -9.933276993510665 -1.3459519950358967 -13.001235737075012 +1699 3.9711363685758063 -0.20274950464161906 -2.4897727170116672 +2870 -17.556100940049234 -17.68882973225489 17.436112221704583 +2243 8.478049082250031 -12.63340323308133 13.516346866403625 +2141 -6.000613976121202 -6.046273240673108 3.1213622386064257 +2565 1.5076821976831984 -15.645163241301093 -6.941970313488279 +611 -6.236624259387561 5.287732192151122 7.176054742039153 +2563 16.382679780446196 15.341243483003435 -15.288096991544387 +2741 -9.356875118105549 -15.967804886566494 18.25003527464815 +2772 -17.480959085213346 -8.956397822334711 5.549688608469499 +2882 9.473620776814991 -15.4805710949739 15.846652939587656 +2943 2.7154595450111967 -18.51697920332782 12.250965101278144 +189 14.342318202325862 6.116514492320868 2.5380692426453106 +205 -2.1922143982122937 -7.5803460878430124 -7.665357622052024 +766 0.652423500455917 13.330743225676368 -11.484925751318476 +828 -3.969957938082577 10.424834894817439 -3.411309751872061 +853 -6.747493863851295 -14.571851676873894 -13.100558423335372 +483 -12.290080474231562 -7.23959583953395 1.119799210346649 +1287 -9.373427785311172 19.375697967724953 -12.140622530681156 +1270 7.913973184841304 -8.345548460483236 3.5229992771328433 +1658 19.623863035416896 11.606834138106121 7.716204305657408 +1689 -8.491236665138027 -7.793700222210277 -10.31000972827842 +1728 -13.686938387223286 -9.898251999758212 9.787647901689052 +1805 2.2691627255257414 5.632709605597956 13.129016932233476 +1911 -5.545279715202093 4.117248408617875 18.237351348678555 +1936 -15.66943918823755 -15.7200281056675 -11.019023402872364 +1961 -0.7827370288877536 16.02008445088454 -11.177518382496444 +2122 -6.339932812936516 13.203331974908386 -7.16511465333085 +2139 -3.987140997647867 10.815595978614803 -4.188890220935351 +2186 -13.016199568518513 14.811595692309242 18.93063131853225 +2258 -17.48251260077983 4.126688624161756 -19.066058867299084 +2434 0.9903473515213449 -9.640911610512797 -15.517935587119487 +1192 -1.5580858942599607 3.841999247229644 1.796314928631521 +2781 3.372602889615087 12.851870709601867 3.9718077725358185 +2860 -5.120570960201712 9.067185523042658 5.043512278747718 +2969 -11.470179553580136 13.796021259749338 -0.8640377212633122 +150 -5.918672471944793 8.56929485548354 -12.257471284756749 +153 -7.4472235945519945 7.8770355518689925 -13.471596672961335 +226 12.728647276666097 11.40891538969619 -4.1838594113679 +400 12.897696333457352 7.598526593123556 9.766818939629452 +413 13.920903830697723 -6.302854629284349 -1.2587834368914224 +415 -4.991507914243119 -13.921617546558503 4.166242783568178 +530 -2.829026599799643 -6.455327184906546 -0.5320787282973307 +540 1.117370086573291 11.999084446914422 -0.522375864195287 +574 10.956000844091328 -7.361599611670686 6.9024573336407435 +581 2.6866802087707353 -6.484498227140881 -11.945388858970714 +675 14.617347039556844 -2.067034020603972 -13.876841146659274 +797 -0.24949454538299545 -7.004050068981807 -8.110800966523787 +837 -14.507432523625932 -11.914918074299456 12.078696030812754 +839 1.9401934695402356 12.194666184390178 -11.12602857914974 +848 -11.010037151033531 14.2764088561727 -7.890182241977984 +926 4.491148552697385 -10.924343403619847 -14.241927444849347 +981 -11.847576593285451 -3.0119013017268514 -4.0537267364096685 +1002 6.897151215238767 14.629730645961747 12.43119842998123 +1038 14.534220456405581 6.748192533212411 -1.4880603044893106 +1047 7.928947348579554 -5.49567456038787 3.833699362833627 +1186 -15.43301096464708 -4.863270301464454 6.4845067042994415 +1211 -10.137219833936571 -1.5588821042415417 15.32876294444375 +1300 -16.082250238025715 -16.67034658037868 7.73158166600044 +1325 -11.790521559251033 -0.7479756320938117 5.061985135798162 +2822 -1.2879326586769084 -9.109989776813173 10.86919946745522 +1512 -8.103887677264895 -3.661008057039409 -2.188787996021904 +1568 16.967282629940584 3.3126692624149134 17.26842859381812 +1571 -11.613463637252837 -3.6051961108746267 -4.7899505421231465 +1655 10.52619624126671 -0.8979202077533412 -6.703053340219194 +2202 17.48191097424687 -8.986736482420351 5.157121990343483 +1862 19.618244328366405 -4.440730114647648 -16.50787103573687 +1941 -14.968835150164587 1.425268066321653 2.8717869268511858 +2052 9.7293054102218 9.771602181531094 7.881474628755725 +2083 10.245974106806266 -7.4286253963855815 11.391066612834871 +2136 -16.129279540407527 15.961642308929484 -13.589033911128643 +2218 9.26396383058571 -11.812834854460498 8.865140861572298 +2710 6.368787718443345 6.696283290825688 16.593651539873882 +2527 -10.813688305535148 -4.987938265225981 -3.0749532915710382 +2532 2.9173590607824442 4.208241137516942 19.02426563164176 +2535 -2.531751052478358 15.10831926433521 -10.743182908321186 +2576 5.591375776316116 -7.989711431984264 -12.45651631798639 +2601 17.36741367765392 -12.884694272387819 -16.278735510851348 +2647 16.42801421579641 -6.583353034068784 -9.183533710288247 +2792 -2.9203028692294954 -9.240317853477935 15.254479017260842 +2886 6.74519006194336 -16.379186233356204 2.1357125226098446 +2913 1.668471560707858 -17.57689638150795 17.434854750310564 +2941 -18.270981786360696 -0.4332839618903241 3.026838971699236 +2996 0.6836339996754881 8.906763473069905 13.148675882294455 +15 -11.370999568504859 3.4185165568597893 8.561985001538657 +156 -12.376193586612619 10.219008401079241 -3.3199313151691014 +268 8.937903711183301 -10.653428339690663 4.059091522059972 +317 -11.964777040551654 -4.552607166630961 7.2426651031258915 +364 11.781878793235625 -13.8984126957951 -0.1887453667954684 +424 -4.344085848934865 -5.73762043406256 5.849883390557461 +479 2.7448852339451864 14.038566476240508 -4.005014045129397 +510 3.7682535846763234 2.8406498731578353 -13.681458246609596 +691 -7.343338697070917 8.705404776332077 1.3024857501947793 +740 -7.2922963769549085 -16.215627047367402 -11.997522108315597 +767 8.172521434276844 1.266455913838064 4.0114054991879495 +785 4.042799877663519 6.432426750799838 -11.827729231779013 +801 4.947330448593763 5.284128810067947 12.00581251555334 +889 -3.255919791311177 11.868585943052654 1.3545926782440616 +922 12.205822952797709 10.36391599295972 -13.702386370192238 +978 -5.531690912984585 -15.509295660822772 -9.297689300513662 +1019 5.3644318667867035 -14.110883506265772 -14.536867797562085 +1086 9.021690230696283 -14.86197999381112 15.097852220888953 +1268 4.244314217639489 5.513718737716066 12.093651633745592 +1277 -1.4374233583408191 -13.246734394498045 13.024453477146592 +1296 9.428826287635935 15.5189007206132 -8.072619986714193 +1327 -18.97858466565378 -17.629036803212955 3.3572837471087507 +1350 -5.884035208483017 -6.358054165735541 14.884379416048585 +1394 5.48991847632988 11.310440885017167 3.748666334550311 +1466 -14.965414408207353 -19.46836700324143 13.02942149294002 +1697 5.409086079793188 -14.676880245544378 1.8859718232526783 +1719 15.625174705526785 -17.507237229704725 12.405541935093432 +1735 -4.8920348421811255 9.157508999749872 -5.41769502681504 +1790 -3.2561926052791796 -10.743861214753089 -14.49225730803124 +1792 12.948512171626446 -10.584531376327144 -1.7611978064618696 +1815 3.68827768709076 -11.852877963338825 2.1419936743510317 +1828 17.710776261412054 -3.3640671924964987 10.98245568175881 +1861 19.015269785303975 12.358970886962778 -10.467748546004138 +1866 0.3607562454489196 -9.062536821550816 -14.642455458546337 +2811 -1.6416292117036895 3.651474507031395 -10.613120707465832 +488 -11.309077060836863 1.9158277583522452 -8.15809593731534 +1918 -16.64817529365857 -4.268271508339805 -18.279745177494583 +1923 11.415834512200218 18.71089928692976 -15.400617521205115 +2099 -11.840742064871318 17.442483000596546 -12.668862537435592 +2119 -11.551930670762747 11.56078480563 17.625524827525087 +2149 -16.20524293105373 -6.578341964936912 -3.3485399557178277 +2190 -10.130408737393235 -4.663850217596005 -3.957274338287783 +2192 -3.7797090092577266 8.946015908026554 6.582966467941948 +2255 6.384811919151359 1.6638665835914008 15.308764294599648 +2274 2.0949559602201036 17.21629804382134 -12.436241535454453 +2285 10.81836964666567 10.53268278236845 -16.755248272894818 +2338 13.826704039998415 12.609713128521543 10.103690085219316 +2361 7.547921801986836 -7.266596228618704 -8.896290797298308 +2379 14.504096013919327 -7.632949751370535 -12.895403820357345 +2839 14.412441588607171 19.652026923297747 7.343470237997312 +2475 -5.789653913563837 12.187466644865912 7.344124889650486 +2538 19.520461837961154 -1.7640983148812364 15.245897094383409 +2555 1.545860982027835 -1.062695919353119 6.6161644427711375 +2559 4.164068342992341 -10.615928995232746 19.24133726068351 +2635 12.240734852397456 8.480926351938797 -10.76571079123058 +2646 -5.87317494454688 19.39831151929506 15.18813555653903 +2704 0.0794661728372169 5.650944054102388 6.05121236703608 +2707 9.43816533969742 15.708258428408252 -0.17245343972152422 +2714 -14.59829536096173 -2.603083812996092 -15.288266230038388 +2737 13.587887773944887 -3.4869680481361995 -16.575051289831915 +2832 7.173370095015488 7.71949886055302 8.040822663103002 +2843 4.016472099723824 17.087455024447312 16.908395899771342 +2865 9.656803442283737 6.214726790945043 -3.163792039499633 +2888 17.19014061671824 -13.643313915928907 10.526274096827937 +84 -1.3258137649380537 -9.09626116726924 6.836903351498362 +148 -7.4189543576135675 4.133704074189687 0.7716833727426308 +217 13.63893555780297 -13.036638000617728 5.052679730605925 +414 5.3974376575186795 4.761268360910397 13.22792284800974 +564 -13.670141473531526 8.914182001630458 9.719539661219587 +605 -0.7786473340476435 -7.1901085755795275 3.610300026822948 +787 11.50852870576607 -3.928214133658807 -4.754488115075499 +1093 -13.932830458474356 0.13142522545236623 -10.739544352725613 +1250 10.108614958232241 -3.6355037083142174 -4.660447268139229 +1251 -6.888406446954476 5.367269549267784 -19.31045912762238 +1276 -14.727323533416921 -15.563336785338878 -3.4405149906087753 +1486 -15.187091028898873 17.342835984900198 -2.136284732679966 +1569 19.73695718374111 -8.077921024450358 -5.660279144382298 +1739 -2.921076332766199 16.95310305757235 -7.142824740951309 +1894 -10.892818261010795 -2.362332482798966 -5.8619845642424355 +1904 18.707817189933955 18.482180059903424 -18.56845405757093 +2004 16.328503842891458 6.24578016564986 9.240983183160475 +2191 14.239231273565265 8.789932371621939 9.219482466398066 +2237 11.706096816589683 -1.9783723894580674 19.69960234248437 +2270 -5.709657397866714 -15.066884067616808 -7.673496157161857 +2393 -6.998170048149167 2.6424851729267034 1.8819148445716842 +2427 -14.19412169784732 9.950767125517224 1.2439501288074715 +2536 15.169580409013742 7.1518454661536275 -8.60529191398299 +2630 -0.152323237212591 -9.924435985308397 0.8366510561320254 +2782 -17.147500849873147 -9.126064312878293 15.055629827780457 +2803 19.58133945927248 2.387496182185421 -11.678592152460837 +2823 13.546969070761776 14.266793856511157 -5.579563570405738 +2833 18.154398645475027 5.923052997729127 -6.197413069275141 +2872 1.7773127181192678 8.837397901598234 -16.08082924240975 +454 -12.402743056677156 -13.47052611906859 8.334999148638657 +2960 -5.731855290351208 3.7833626695050513 11.221961932769116 +2993 -15.642158884739048 11.656784497259435 -15.014605997427314 +78 -10.511131688295508 4.780596410375815 0.052523129660864434 +134 3.342785017751246 6.787902166833162 -9.015348607088807 +183 -10.597050144735691 -2.6577108743111824 -3.8019775101478164 +187 -9.943835687903716 -9.794965117213172 9.981582799849138 +330 2.7731471253764086 10.17177905900138 -8.385653756003885 +333 -5.136077543601488 6.9555931836293405 -7.481821677253265 +396 -12.816889586724049 11.755236444434006 13.72435929822531 +509 7.567043641737833 -8.870585975842854 -2.9868340360073304 +650 -2.0721095390367377 -3.635739717667435 6.477988043724767 +2642 -2.32193280679798 14.151542898362099 17.048711438420476 +702 3.650798429180977 -10.059973128316097 -3.750409302929597 +751 3.2230451308483805 -6.211609205614629 3.2113989981117843 +927 1.3356738569244941 -12.237394004815691 -12.950731406535677 +928 -7.610258092126136 1.9294625960717453 -2.1372621472605546 +1013 3.4005184127645802 1.254919692310665 6.29753162453384 +1122 16.370947427783847 11.688590238867459 -15.810387071988071 +1171 -4.170052996689735 15.104907824589551 -11.761514939245352 +1228 -10.358423634433532 4.005987321423891 -9.655680217740079 +1355 1.3553695606547667 11.175836000310872 14.639678275124393 +1374 14.49859925786818 17.562139014268784 -0.4543919405067856 +1378 -8.025185590575337 -13.477804527260336 9.537966809031055 +1389 13.541593280173618 2.3019265861211893 0.2950419748796521 +1456 18.63893000511222 -2.7070806394273834 0.523087697307244 +1462 3.1676855520022245 17.792163821464108 -14.536692076438511 +1464 -18.679981383776486 -15.710567558873505 -8.78770372576132 +1527 -10.150642437659453 8.00555255966727 -4.996432728970649 +1628 -1.9559749221430969 11.501166426028012 -4.555016833065382 +1639 19.86124877719166 3.6606937616729933 -12.437198235751621 +1922 4.441205420130536 -16.742759649286835 5.668832270988701 +2095 10.226488008872607 17.80572978422618 17.501331203689098 +2100 -15.48432388596476 -0.7359260265272781 11.614593030524086 +757 -0.9263616695642733 -4.93652867674225 -15.020698348933722 +2236 17.241648214575402 -10.20161332343201 6.286815328285697 +2583 17.114472029198712 7.964480532577321 10.180414273434913 +2724 11.340106646493638 0.12938267327409808 14.246536231518235 +2746 -1.4591166562084479 14.084234068273279 -16.80616383715908 +2757 -14.647004510070976 1.7957211283247396 -2.614188999062566 +2877 12.457252445748228 2.5410185650970574 -18.167392335020622 +2911 -14.911459103042777 -14.081072267390182 -17.783117873831216 +2927 -13.178158051427493 -2.906069063294778 -12.468433587920442 +49 -11.614907161412459 -11.504778514034232 5.0116245365547005 +236 -6.206275116139562 -8.355885184306716 -0.13826524427099057 +263 4.94613495487784 -2.958389465749539 13.02184243977908 +281 -11.818700795198051 -0.10812286495905703 2.8444378213667902 +446 3.985112737708672 13.856718738868622 10.045901621838368 +486 14.153077631697483 8.590057311984987 -1.324791948525939 +601 4.246139094631274 -9.114877057887494 -9.728261851906787 +648 5.899448844934274 -13.453093028364849 -10.266580996484082 +756 2.5848029763883384 -8.892226162995518 5.032703207331006 +764 0.6610895862542718 -4.4978538749376575 1.2091454685914036 +838 -3.475584108029835 14.607140020060667 -7.594548639550901 +939 -11.485311070677406 4.147295745505987 -0.341773508081685 +1036 5.696630406445407 10.846934674966992 -4.190653108815017 +1048 -11.909438940815516 3.536430887514358 -0.6347718389462319 +1057 -12.633778879132992 -7.570029561999477 -6.021175302650932 +1314 2.2466546628476114 19.269925898296613 13.027244917635938 +1518 4.188348947567866 5.53796638157551 -11.499446316929705 +1696 12.716389613785251 7.433896226830684 -10.533888475216715 +1853 -7.811803882672104 6.26350611389333 -6.3831852680339285 +1950 -5.050589757016499 9.450590284894773 -17.921379718959955 +2049 -5.243014052452371 -10.79669216893508 -0.9825850795320505 +2070 -6.823828903135634 -6.682583514647195 8.349749821626588 +2094 -1.1694218930082432 -16.143702376000885 1.417623280925613 +2128 12.265865701092478 -0.2681479272465354 -4.236429410629301 +2166 -8.224399629266722 8.931788413107459 2.6195947970492357 +2351 1.7342695453044914 -9.114801293082602 8.388090671950602 +2352 14.927460059307057 13.909475475608138 -14.497137830096618 +2518 -14.977768325501376 8.057480470531752 5.509468577563686 +1104 -3.299763157796127 -5.697069669652978 -13.336179115548196 +2755 -14.689208936690463 -2.059670762186811 -14.11938064786024 +2756 -16.2821657595981 -6.050576420937635 9.18385667749542 +2926 0.4476328817359991 0.9312540765757121 8.899446615772666 +81 -4.615855331055557 -10.071290807580215 13.577202200837727 +133 9.513935159261536 8.913703704175731 1.680794339595575 +211 4.732683946666952 -13.030756164426837 -8.765275103616217 +438 -7.895231365001139 -0.80168477622325 7.905879589177198 +529 2.7984617238612906 13.106826939898186 -2.0687798091989897 +580 -10.779495347299695 1.3516073087093459 1.7712591796662225 +903 -13.631011582005332 4.936747518539374 -6.561314560779961 +948 -4.132514528760936 -7.904066150513176 3.520719855665903 +949 -8.11608005061232 1.5138642263282764 9.823585236607784 +982 5.99551421164344 -0.9815856607928193 -15.058582079062953 +1181 -6.919354400710205 6.903225157595225 -11.526760120234476 +1185 11.328765551514696 15.511173076640535 15.591329955687979 +1216 -5.679392360997381 -15.911702845948763 -18.668532373179954 +1285 -16.86661778552789 8.512889449707572 16.928779967335316 +1356 8.866789994227776 14.893357358381051 -17.84985961899761 +1439 1.4782130544281171 -1.4237604882206043 13.122454209103799 +1443 -3.881895022129601 15.998690756070678 -18.00414396752174 +1469 -13.35338543088838 -8.47594273234025 6.7957362307676545 +1502 15.779529665906113 -10.002907912756301 14.521733900852567 +1521 11.63662958886744 6.276608454800213 17.862745491959373 +1674 -7.64685739952176 -4.185554218760554 0.19395074689953276 +1782 -16.424130903608923 -1.2843748943815008 4.1947755188630245 +1817 18.342524213810666 -6.8853483495941274 10.274132667396566 +1860 1.3362970229792888 4.167875867752587 6.88656043294898 +1947 -14.449000418020201 -1.7564224284317416 -12.51756963853009 +1952 -10.411368965585428 15.593325816754492 -11.386751456837107 +2168 -1.3461167178600801 -7.183908158367495 9.086315880757379 +2212 -2.5235435056634152 -3.7195317065016615 -5.97020019807534 +2293 6.69860127606427 -15.536459055193198 17.170247271448083 +634 13.299468248632378 16.164477916925 9.863305782349592 +2586 11.942387444960573 10.862938827564824 7.641920633983926 +2600 -8.934513527453083 -11.273636395147289 17.58543231407399 +2620 15.493537289054325 4.064990744587251 2.1892885787821488 +2632 16.494230159063502 8.90337342874525 -4.634776509774403 +2712 -11.530905840308021 12.187907106616613 14.746965533705179 +2852 -12.523095703351338 -6.512527791993013 5.385632685176091 +80 1.9213495440592956 3.604743069128143 11.76815117222564 +132 0.44576098436976025 -8.337526833610927 -1.4428982601256788 +173 -0.5056518009255883 0.9723393324613838 -6.50599087821204 +175 -6.087810815999495 10.879032615299515 -8.679568827398384 +188 -3.8559672674382277 1.039647001980558 -2.0057462148646854 +228 -11.210528988534513 -3.7278625505462144 9.826417210765644 +280 -2.548701451281303 0.8309587157042392 11.63196679349781 +352 6.822294314307379 9.107263918367591 -12.697980879505927 +419 7.864129152093916 -1.5778379046212108 5.1129372478966015 +552 -13.042368377651597 -3.2886169077150287 12.082528281993968 +593 -10.211672739626337 -4.373265637614854 7.406893447826605 +676 -9.48815433412858 -8.328961813018243 -9.994431313772237 +750 7.117688895965154 -6.12609477586971 1.8328099212254587 +754 -1.9013327938819946 -10.630203501360231 -7.7135237983430756 +874 -9.370478038427585 7.702526670316283 -15.681227355805278 +1148 -11.751518565129915 9.33626699503042 10.732123251601942 +1260 16.286683519943356 8.846018680159238 11.229528315178497 +1282 -3.060026611544486 -5.9959005974397535 -12.512119531200039 +1407 16.000806998366016 -14.33192563729899 -1.0292681118883358 +1517 -8.285028238390822 8.965341746797499 17.848158112012424 +1823 10.598972261315847 7.26494901357462 11.060946115389495 +1877 -12.876565802023151 10.054954835741116 -11.35921989631855 +1938 -13.1843123427382 11.237824594861223 -1.7296225720031955 +1957 -10.142712866850351 -15.494241141326103 -17.94070323989538 +1965 -2.2990253281335193 7.2273110879347975 5.568691045308627 +2000 -3.708806475580304 -14.378800319976154 -4.9916084189791965 +2101 -0.3906395990723015 -17.61922737654714 11.452227429844617 +376 3.0321922214750354 -2.173848974887717 -12.229777830647217 +2116 8.230450920691144 19.63771069360481 1.8887332231336897 +2137 0.4393145533338028 17.897198910451777 -12.897967218683148 +2172 -7.020005975029051 -11.616734745656611 12.50577344685458 +2305 17.53533211870375 -12.57708076083084 19.495596242741346 +2308 4.710433567971191 0.9771252824799067 -4.003647200450435 +2319 11.405613806610397 3.7035907283435368 3.0577142928348207 +2371 1.8151794524509157 18.175240655217415 -3.8200490584028075 +2402 5.735070974656764 16.321110162886658 -7.738288602659433 +2403 -1.3779201587383612 6.9979770139738715 -7.932877920723159 +2444 -9.854101573124423 14.453996105031198 5.286821513817966 +2599 -5.6090605441263826 -9.63553386710259 -3.5202472365557456 +2721 5.604908851364803 -15.697454523072034 15.637976127520124 +2735 5.0283031731736285 13.160510073257345 17.794613173238186 +2739 10.289257640989097 14.563327311272808 0.744343913738075 +2752 -18.602056885275807 0.596733852803765 -8.779726465942744 +2780 5.135487370201985 11.726271198450146 16.25072631525199 +2795 -6.8858319522192755 9.443779991381062 -14.802915086655528 +2804 10.148465686762755 -0.14569302681021773 15.825908457726305 +2875 -7.839777565752635 6.426085448208438 -17.423893502107244 +2876 -18.716721996810232 -6.121689658638919 -10.225652195932913 +320 -9.058036002966757 4.8755479387139244 -9.70129373894566 +461 7.367715918927901 -6.92084632972005 6.328965161817679 +487 -5.436354362029799 2.363518189773245 -4.812892655242448 +642 -9.884236216355719 4.686489030576977 5.11540698626187 +1074 -7.231101776904068 -1.2908908972763522 -14.903556245126026 +1179 7.388376440380218 -1.410666750125086 -0.8305012650815156 +1190 10.871932077317412 -11.648375640342286 12.519053036171659 +1236 4.124539373833044 -8.697929924740219 -0.8058620573898834 +1288 5.022368273207295 -8.201308516044344 -2.2036540272496064 +1328 1.5051629112348894 -18.793788005604416 -15.29791121813729 +1405 8.97075417020444 -1.4667527599073968 -3.974249727589612 +1428 -8.855005509278927 -7.5451424037451424 12.740852540776274 +1540 11.905727226142947 -17.390020254270055 -16.372903126886907 +1638 -19.000709792703613 2.4441785942157783 0.350165104130745 +1745 -9.677363056160578 6.22853521390261 -6.243762826085325 +1993 -17.260396193612525 13.899999506995158 -16.987652018860363 +2121 -0.47028927897302203 15.46439256605141 16.441368030920124 +2133 -11.560069102277703 -7.642765949036163 18.088874875434218 +2294 15.710420151381586 4.2641586455764 18.197281849326558 +2311 13.18508325809475 6.970439083970318 -0.44659662165086755 +2501 -3.208659055043296 4.292066151715351 16.922466657907687 +2550 10.110911604716316 -4.228788822888129 18.217388050388735 +2719 -16.911199873370464 3.889167955158895 -13.387640413526784 +2981 -7.819687826797823 -8.662875089902746 0.46540846999968855 +18 -11.350429249484675 11.121941245461471 -10.545840622570658 +111 -1.4667437348282968 -11.552775527199685 -12.956345873456401 +112 -7.615340637648967 -0.81671541540145 8.802372233885295 +144 -3.259776206011295 -6.761020409825603 -11.652215841207434 +516 -10.33065453074885 -4.137160455575193 3.869044755782117 +834 -12.569274682747512 -2.4127082610273622 -3.753560298199642 +988 5.119806738822698 -5.841981134440411 3.3293489061514445 +1103 -15.444874969828094 -8.086204042448099 15.743791041258223 +1159 -0.3031971216393466 5.901957026713809 -1.4516211427587584 +1163 -0.9369809981942725 12.759816375172313 5.542163307066197 +1194 -6.677795128613995 12.498283661182146 -8.787530881067534 +1311 -9.690465324064768 -18.016168589822513 2.87509321883582 +1342 10.02334896211924 13.440734799313411 -14.824147263010218 +1414 -17.500778294437048 10.67935590657877 18.412550841110555 +1425 13.461223702462483 -15.906798543256008 -14.627962160820525 +1449 -12.452001628857074 12.574905061038477 12.979838483339961 +1970 8.547050516286959 10.476044025948756 11.1427368912853 +1834 6.957548819605155 -13.830600300053103 -1.754178086471436 +1942 -6.0912000982686365 0.0006521510506230974 6.288890703606039 +1962 5.19546441203671 0.7418264322003688 -0.17614403613495702 +2064 -8.30360012359488 10.371847701407043 -15.591896495634717 +2135 -15.174075068428968 0.9439481681703598 -12.909091387355966 +2307 4.685674941759207 15.982142834040125 17.419111044201312 +2388 -14.901610072415785 -5.3205048091675025 12.08137053663825 +2418 7.628350822141079 11.941178042122798 -16.761051311746172 +2464 10.586043301805814 -14.066960609494853 -15.766619061470658 +2779 -9.925983583939354 -17.876282489517376 2.3594267032265206 +2956 -3.188633302949262 -11.872321555454244 -11.102278430291285 +171 -2.777957747989826 6.804047473612432 8.822377119371557 +336 10.505355682397944 -4.02996673441196 2.6903052335846396 +583 10.500114217031422 -7.617793378627787 10.833386401858762 +620 10.117570161786123 -4.199803558909284 8.068072881106987 +626 -12.841991961474351 -8.545980642055106 4.510934008479656 +791 2.19063522341552 3.598094835267834 -10.517609073388806 +963 -14.912841387783907 7.821448571306408 -11.410751000800593 +1255 18.84204096407929 1.1858429213037283 15.734699567852044 +1330 -9.224986335109001 5.877706881947971 15.530870444888528 +1390 -5.153665380710294 1.5515760489162664 9.306831484863546 +1579 8.982658628165796 2.6463593346127183 -11.39109484333503 +1730 4.609883381202626 -3.669893123601239 5.251988588917795 +1912 0.12430800426295158 14.640175950829999 -1.0303159377975535 +1934 12.601085746934144 -10.02008789210642 0.12897897028558983 +2143 9.345094260618257 19.183535240939577 11.20130189677337 +2238 2.1516080031299984 -10.4583810795503 2.023621212285035 +2253 3.888243471017555 17.565133840261982 10.686625954710978 +2334 -18.247907204531018 -4.549012874457147 5.655845748854915 +2404 -18.819715346468552 -12.637924180380306 15.918830757316293 +2407 1.7669953387126922 -7.794707495123307 11.95377699486332 +2410 13.807880003491308 9.778312132842707 3.0765586058400207 +2414 9.191726333155206 -10.924754424503062 2.2913270714613123 +2551 17.338356798859216 8.265637266163434 15.821723815585205 +2884 19.525009321739187 -3.7205836023110375 15.543609506142317 +214 3.8280317813880558 -6.532979243646125 -9.879509477164076 +777 7.4953737398336475 -1.3815670859852067 -2.190949406950621 +1507 -17.94525853315031 -13.025727391011849 4.152016691539095 +1806 16.26022694233597 -4.686432870776127 8.426299387399542 +738 16.294703189917836 5.391793110965069 -9.450694778871249 +1841 5.984543261360931 15.548417552877753 17.700509014793877 +973 9.510680576979125 -3.0721859211279003 -3.6844181054712495 +525 -2.575104627699706 7.768675429746817 -3.7280641440538305 +2383 5.3927729526753225 -14.500449708693365 -11.515710824253757 +1935 -13.469980952644706 -8.445748270824774 4.764757480174183 +521 3.6949884333590446 10.886984323601357 12.290816907093559 +717 5.418778850267698 -16.18633837740858 -10.18134945123376 +1819 -8.719114974138952 3.171772494571501 0.7978057936978792 +2731 -6.130408311843755 7.30959032485223 16.68003588249794 +272 11.72439221113353 5.821889241549614 8.42641009003704 +905 -9.5122522410889 11.704218800257582 -14.70835756998545 +76 -8.283735634473988 4.697648477048505 -13.797190044304125 +165 14.187341091087006 -7.082353124651143 -3.940320576038863 +256 0.4182917125166666 8.850817833238068 -13.007763335167883 +2749 -17.34516803449382 0.08848242152174564 -6.882611239453291 +335 1.3605737569022383 -13.076941185252076 3.7209097483972133 +1620 8.7924342688959 19.373404022340537 -11.501940034184646 +388 7.752404420397434 7.953689356179693 7.26666581336078 +418 -12.860663366108058 8.430168351898367 -12.571621379001574 +2933 13.808622130621862 -16.94177975632317 -7.855188034628431 +533 -13.333522010548968 4.610217698728032 9.683896676226421 +587 1.2652138970655078 -10.185951813962232 1.9272547454787632 +618 -1.7173273466254195 8.534727604083397 9.970471366104357 +687 8.30315793541324 6.248815590935976 8.330028094813251 +745 -13.032203845821707 -1.2388990414019971 8.830159644420458 +765 -16.017339018938852 15.801088255793053 16.506612786600343 +869 -15.630765405277492 6.459668740782595 -11.714206709683243 +871 -9.11114086134048 -14.868167871364825 9.185894843939138 +896 -12.489669387320179 -5.018417145410157 14.603518326575141 +936 -4.270637329010982 -7.925054139833508 10.430485798794793 +971 4.943358068199984 3.912131977220363 3.464699864660454 +980 -11.571799548776811 -10.844945871476328 12.356386382414104 +983 8.099330171746745 13.58511503384775 13.275025231341626 +1128 -14.3141650604309 -0.5627862048219752 -5.9146734621438535 +1352 5.22493308077428 -13.487551536623283 2.4920707355877636 +1395 -4.955482121799213 1.0106899133367568 11.41478759701337 +1522 14.200308281513305 -18.300433887204225 6.776993957277177 +1617 -12.08668155048386 -0.795081587303708 -2.787352628882035 +1680 -8.427646555750277 2.7536588028939764 -10.887969770688452 +1692 -16.66121943316813 11.657011188873152 -11.204600045666176 +1756 1.3669564386491073 9.951381589187676 11.571241038065509 +1971 -13.886212160368556 11.50738397417256 -17.635752884844752 +2051 -11.853871234268029 -7.254354187952335 0.8905738203460172 +2268 -18.895106724510523 13.62892995746655 12.730070024708622 +2296 19.05948771746114 10.862327776770288 -2.6280100697367654 +2331 -16.403535694004926 -7.877890231625078 -14.342685356369563 +2353 -15.977470877473067 -19.329649530052432 -7.127360963669948 +2358 17.406286845367628 13.368274333406552 -17.683498015136816 +2369 -9.512094685884307 1.1894318067145642 -2.3329484770290176 +2422 -1.0420254585055277 8.584953401485162 13.123917748850653 +2525 8.069688532161697 -17.170218397497383 -6.3072181542503625 +2585 -18.113113680864945 -12.269569818058109 14.353031867142327 +2590 11.092211528228624 -11.783477332323647 -7.232278025553046 +2777 -16.52410206951469 3.800210340594753 -19.163410641813204 +2784 18.80802451955291 17.366798352484466 8.669001532071373 +2806 19.3976424533273 11.240700481216177 7.412376823284824 +2861 5.392774321475824 -14.477444278665018 -16.793674061852617 +2897 9.62825630479578 -3.2607421003486405 -16.118736347230854 +2935 7.486733097948202 -16.646558123460792 15.613951360883664 +74 4.513496320319179 -6.844488195191247 -6.070588299813616 +2350 0.23481110449123696 -9.399301987649224 8.333670923650534 +167 -1.0915143053235346 13.35410118862853 13.10091182725044 +249 -12.156247680932891 -11.391352759624207 -4.0993079013502784 +253 -1.1560628711675123 -1.1108758529704845 -5.665665352640753 +264 -3.8601764398201692 -13.366925374051807 3.1060973802336034 +291 3.4029136345074886 3.303782738137622 -4.311719454707063 +295 12.12111054156816 -2.4661910452656395 3.863481963826399 +298 -13.244213550066725 12.687335071142735 -10.345137073144642 +337 12.759038263360091 -13.011155793398848 10.804727603816016 +346 5.404841640205748 -11.64246423573248 0.7442016922291546 +462 13.916143863328353 -1.7981444353536724 -7.506220776318096 +480 -10.50734808312016 12.03466074519577 5.870096954033172 +519 -7.657414810952965 -3.7449980448134172 3.515104298241528 +369 11.914550825875528 -9.390580084156177 -10.294696131030905 +568 -13.459235709800412 4.3771186523942 7.408880328823136 +585 6.286949092830173 -2.69031180931509 11.6439863518698 +674 -13.962010557425053 0.14000550193901576 2.6855616674895515 +696 7.140385809092109 15.686021698969048 11.64110538611749 +2497 -5.9105135408930405 18.9368838878129 -19.00062000120202 +798 -10.299106942624169 -3.8190599236727527 -1.1700933518441239 +821 -5.926976638269232 10.887164915231173 -14.654909665900313 +879 -8.119133467479461 15.586887385673448 12.981613185710037 +944 -9.034814178935276 -7.185725373209548 11.886981813601034 +995 -0.47607445925644915 10.2876635182524 12.558280132695495 +1024 15.031588431563497 -4.13870600437882 -11.334135252463504 +1063 2.3075093786645295 6.148008742097583 14.256131249464874 +1169 0.22025705175544666 8.399089360992656 -13.684364892211864 +1284 -10.868754328429318 10.149956690055646 17.616042671933837 +1299 15.624978273529486 18.38435276409509 -16.644866667399043 +1334 4.850955174973155 11.142419820431078 1.7162590490014749 +1387 0.9359769712927003 17.188649624241304 -6.806958548270253 +1415 5.225484378864255 -4.221884538406652 16.678629613364066 +1417 -17.139160091393396 13.47799573904445 -15.667894361802883 +1457 -13.305420635491837 13.807922049325354 3.1874198207808377 +1570 2.7439330957841945 -10.278282230358021 11.08224151207668 +1585 7.850910355657395 -10.030909099601578 14.222057461131442 +1593 8.799823784029815 -13.203105411569982 1.6293406734244347 +1598 -1.1916000565148426 3.0381292925961993 -11.341203178347218 +1643 1.087952007365448 -15.306408879561918 3.5143144387083716 +1676 18.64573714125943 -5.878611130330526 -0.8791744464781872 +1788 -10.939769760772101 -7.615737523080607 2.0393590416774643 +1900 8.278748425862911 8.320406095092729 -4.311110107450902 +1982 12.695582459111609 10.465250778485172 -13.487282939557483 +1983 -13.925099435852761 -14.982693930447297 -3.6386733556013997 +1986 -18.5444935132427 -11.76123669676216 13.828880704744565 +2041 17.81502122399825 -15.00499676430357 13.447823746013933 +2055 -8.506683286786435 6.946087739784877 -17.789412622324047 +2153 -9.778367027671397 -6.045243355175797 -18.762374780467038 +2216 -1.3976125987849495 -10.428682269821747 -8.337777121106045 +2263 -5.073336319494004 19.079340449454424 -15.5075654085149 +2286 9.999189669769498 -0.6742659988493056 -10.276931240607674 +2288 8.009332369089412 -12.55766427096535 -6.908661739578571 +2443 -3.8156614122107024 -7.410681936617091 -0.5773856373218332 +2568 4.317877170222255 -12.290459520527328 15.997005618554029 +2662 -8.939694254844444 19.232946055436557 18.595387127049737 +2678 5.07099069511677 -14.057737503961178 -17.52597464661003 +2842 4.867409233790652 13.334628359298568 4.723953737982519 +2898 8.159962038525267 10.721745303772694 -13.816279396281722 +467 1.8180862070456976 -13.664032776642753 -4.554593482283304 +2929 4.498051741458279 -1.9591788315675849 -10.4514733437855 +2963 18.044736846536296 4.909259137362896 3.9339947499358496 +2977 -15.967494256388665 -8.424669254120863 6.3025880712162525 +2989 -15.76575580280976 11.593578820055189 -19.100813314303842 +14 -1.1867273074841143 -9.455166400660389 2.7743454044820974 +105 -4.980593789120286 0.5011198510697855 -10.945022085208114 +196 -4.64218768891434 -1.9433265619599716 3.076748707894728 +1856 -3.996686045059489 7.164074421087203 0.9616407925903484 +895 6.319602842607532 -14.239302241685213 -14.941139292484328 +915 6.588345030852322 -9.52357514704245 -12.577999507807467 +1027 9.015149691487661 5.994778417764959 -10.805712436731765 +2980 15.809542733979136 -15.082566250706186 3.107210666488477 +1131 4.530870088078169 2.757497286782551 -13.81171024997419 +1160 -7.530271298486687 5.735594162737259 14.335143157363008 +1203 7.566012307430533 -16.763651815596962 7.271396248349379 +1339 -13.469735882602922 -4.32685607854971 16.107970187058044 +1471 -0.047445250021143054 -10.926121016673061 18.516035042628708 +1586 5.4648096744482695 -18.762966615208594 -6.792096276681259 +1606 -10.726948549298216 2.7053096300659463 -0.43904347097966934 +1646 -18.217843983607622 -8.785752256168434 12.499071379833854 +1787 -9.527031201212498 -14.690445879794328 9.04649241873286 +1875 0.8472216836933476 14.813388693211463 9.872574909795192 +1953 15.987215484661249 -7.606361038888073 2.8578385759810203 +1988 3.5246145365385817 -19.02786922570986 8.994302282193637 +1997 8.553745757555848 5.423896314995088 -8.216949286449822 +2033 -13.210386933752307 4.12542171716961 -1.1659421119340114 +2040 -2.527659726030114 5.485197735192346 3.057433086459797 +2131 18.661186683015575 18.623701730802438 8.404914398156864 +2194 -0.2645056731494558 -14.109553300939252 13.045444708111676 +2214 -10.010003935094664 -19.057511750361794 -18.89133867405068 +2217 -4.374648583872438 4.0173413208262465 -14.79412512435254 +2244 -19.12033905088872 -9.320612530425624 -1.6953889809652631 +2279 -16.43198396759533 -15.69175359673809 -6.125622695091113 +2696 14.596869169006673 -16.115435094338125 6.189555318157198 +2775 16.415547746599817 19.05083461324027 14.90413878131436 +2995 8.666543624448854 -19.24046086196364 2.5317258534012743 +20 -8.782688104544242 13.014673249668789 -1.6286856947009776 +64 3.5381929286951244 -4.705127664804633 7.163599349057198 +304 4.107513626328567 -13.420096575607992 10.849518381789249 +370 -4.836470425558451 0.29201380218827727 -4.328645182275715 +395 -2.7263450400734945 1.0355177906913102 13.100081417661148 +398 7.088034092553789 -3.3948169522744083 1.7934965615461134 +443 -13.200152679403873 -7.3309476364823745 -13.131180225486737 +550 -9.390779976349043 -10.190615817526787 8.044828606944579 +705 -4.478712760183576 -6.587502026453058 -4.1104978481716525 +707 -6.002750097262397 12.50274830322713 0.8579075235282216 +724 0.7642468885583003 -3.61578585539996 14.883548945973292 +909 13.715787243026751 16.315169040801706 -7.751192594112227 +1101 -15.36226925650701 7.040210390681743 2.07103677438975 +1267 -18.952334119897873 -7.559362580144225 8.900483235768446 +1295 0.5217028380245162 -8.35171289916833 17.496346014012037 +1335 12.690952792551466 11.04049004701308 13.075550398351963 +1336 19.08771116100651 14.897472574960712 12.121562863021909 +433 0.3107302306651307 3.8486034671519653 -2.2702520921877496 +1619 1.541925972596859 11.187645719026856 17.160507872615923 +1647 10.881422310224517 12.047189761142937 1.2918945017005323 +1744 13.22064208527687 16.71230894779688 -17.288102779899834 +1837 2.462547353142776 2.82727245584732 11.352995671719075 +1869 -18.99842283732709 1.6880150350411778 -9.951460485463125 +1907 0.31574090487161344 18.22508554372942 10.869518142462637 +2075 -16.52065975526155 -16.7308591517216 9.715381987960136 +2200 -5.71370915685513 -4.778752241121225 -14.657477679036594 +2265 -3.0135816409714176 -9.255731623914308 -8.64662527246468 +2298 2.4372598771690392 8.943912061655782 10.416643086775158 +2329 -16.78414505497157 -16.316740696697114 -6.553762302921765 +2364 -12.890802093766807 5.943734934532896 -11.333304359922717 +2397 4.260226833730621 -1.3941006254289852 2.1064747066395184 +2452 6.774872062801755 12.169931324905615 -13.02083967627511 +2477 -6.936361441739427 -16.751876353394863 9.21647661699817 +2542 19.596771389128843 -12.599216728780648 0.19358606194459232 +2594 -7.193190520120185 17.147308837735558 3.8528489528363385 +2611 -18.395679731053452 -19.001444075761988 -17.1944734127228 +2800 10.143919827294651 1.838092037586552 4.039276661029945 +2802 14.09986615698166 18.06177229508677 9.575328273470925 +2938 -6.326484421012183 4.072319612733612 7.78650779748336 +2979 13.369118978286691 3.8100051302205378 -11.314471690847117 +26 11.1879211595077 3.270980129610062 7.744717495288581 +311 -0.1474664928252142 -7.064887082559806 7.926509616677361 +325 8.314964037744769 -1.720780228677609 -2.99671965895198 +373 -7.370385863987725 3.5380526583196046 -10.526320265103273 +378 5.659916463427228 -6.210986744870034 -6.502415885441253 +470 5.903744554336337 7.376118237323814 -10.009219066749033 +586 -6.985440702626334 -5.442222776974963 12.94337550195115 +2103 -18.315197893450524 1.0940330550066273 1.2141570361003764 +958 14.835533733935067 3.0559134495020244 -0.8039975000981964 +985 4.314038757563964 -12.281749943388647 -6.435285879610354 +1010 3.684113254992941 -5.967999492914251 10.572312513222624 +1037 -6.613011214578635 -10.339080719055211 13.497945216683416 +1132 6.202118902272779 5.658026138103121 -14.210538182428165 +1157 10.275764515215554 6.204776489087058 -12.52535178012158 +1196 -9.045358325453632 11.77420542908521 -15.495494881961447 +1269 16.577677402574178 0.45238250625472914 -4.925408426800614 +1495 -19.007936000812364 -1.4276333723594872 -12.776086940697349 +1531 17.059790201229294 -9.633482984185887 -8.244080627952417 +1584 17.7668520575615 -1.5307030463337692 18.617918331581677 +1693 -18.842800185176657 -8.694582623492556 16.259207439660493 +1725 18.699909811943645 3.161945894022064 -7.58577935112697 +1726 14.298603141322275 -12.365673118760167 6.058782436081476 +1767 -13.9069262366081 16.103107767754572 12.439578218101742 +1778 18.616198608944266 7.176569689846344 15.00450996547868 +2228 -5.6990706020201 6.093303436817313 -5.888931099426657 +2346 11.063469984568112 14.666691806624437 13.498424102898714 +2021 -9.51837399430748 13.232162855614964 7.079226513305437 +2547 -12.97946421167869 5.134376940765807 -14.234272980277911 +2562 -9.599835327298594 15.867329308029992 8.206285439551833 +2658 -5.251532335231824 2.808619446400209 11.396046473315309 +2715 13.155185917541463 13.99512984605009 14.147053581386103 +2726 -16.36632791848536 -9.6151682327187 -13.972233298153512 +194 -3.4600065604866956 8.186682758379575 7.76612120145187 +199 1.6794881864698201 -5.095968933628052 1.553478440936423 +482 1.815873294298947 5.480530536021581 -10.585087221578748 +545 5.946129691817585 -12.63771812985554 5.597393805479076 +662 -15.218302287931765 7.196434753543036 12.061885566433041 +667 -9.975041316959931 15.232473643464997 7.003688423538127 +747 -1.7894097871979016 6.793457143066669 7.268532393411373 +776 11.419787550531723 8.610600087874886 10.019197763542339 +904 5.982337107795224 6.4221315213214245 11.315750260869292 +1014 4.709701489622307 0.3540425487452808 3.4571828410629464 +1080 9.222254378177421 -11.658076218598659 12.960935394920002 +1126 -12.915897149560758 -8.226268346889025 15.787842338504355 +1130 -12.836900086247239 11.641365854564327 7.886891513304093 +1218 2.389864247271686 -3.7739881751565165 19.412472857429318 +1298 -14.370764179767983 -19.402733584966416 18.72565041382409 +1419 9.272479193257427 13.725797851878056 -5.318176641864486 +1479 -0.33813744902143716 2.537911935478904 8.005528817447297 +1490 3.46022670846924 -3.7894635598661295 -5.524182522638821 +1509 19.160930873175523 -8.675547317190718 -16.551602696953214 +1549 8.384278673869327 18.28126858083549 14.505281046579514 +1600 -6.584178636061894 -15.76186976365275 -8.777362857738138 +1688 -10.59903525572614 -3.0722067861455473 17.152483672065483 +1698 3.9629018472656474 18.171741125103313 15.749393458728678 +1780 13.330188101943845 15.780150166832083 -6.87170549483916 +2014 14.801525594993286 13.75215266373083 6.503897871230117 +2114 -13.886663718528657 3.918045977354742 1.6490077632857365 +2280 -18.873631759448212 -17.371557964359482 19.571645393301633 +2292 -3.8957133734534724 18.911795490184097 -9.538070652070912 +2421 -9.52191853058207 -7.147835738986548 -11.732892742114581 +1799 -9.493508528653686 0.022795802533910656 -13.472984540772408 +2500 10.83870117054106 -0.4925985955356969 -14.048644396067736 +2507 -18.090030338712054 -16.238063978443517 -16.796926076334703 +2670 14.919686184992326 0.8330375851581234 4.281823401218178 +2762 0.9638051965066078 14.581359925580632 -9.725687993905694 +2869 -0.09652211369710617 -12.707494798167097 -16.75688778563414 +2917 0.4738339499164433 10.169358688886492 -9.031766129619502 +32 -8.851877299499497 5.060124505777751 -6.057262697143965 +232 4.182650727688607 9.995433342630085 13.632247096994632 +315 7.751557680171592 -6.277473619544166 2.7924384118471575 +321 -3.1693156158412457 -7.488553298122871 13.997387328069408 +447 6.747704807392342 -5.104846162720485 -6.8036412974229625 +473 9.259639956693826 -11.583183382326295 11.180217562720896 +532 11.930777497264046 9.814640629964172 -10.92202484995901 +535 5.273028126837163 -1.7211634542819678 -9.437592391415976 +628 4.456222975265081 -9.392319299385292 2.8137171437165214 +683 -1.3793043705201455 0.6002482519535101 -10.942891623832098 +759 -11.052955159401549 12.263247114793012 -2.842839093951778 +808 8.54794311083727 0.6698308797012611 14.175825137391342 +827 4.860692139153597 -12.226328151080331 9.55357121002843 +906 9.060614147513935 -14.58571449395503 15.47427667578456 +942 -5.065127841271147 11.696097396525651 12.274711021080478 +961 3.9063661323145316 2.1034842608478344 12.70973792227325 +1100 7.35996282442799 11.48019328160461 12.819176265221532 +1120 13.167657959545979 -8.545735835823209 8.625392347961867 +1164 -4.756323773189589 3.1179342306193267 -4.689536388720471 +1240 6.760219181188143 1.057085479337057 7.3246139160490475 +1271 3.9814733857069093 16.759407128219927 -9.569435857780643 +1432 7.712450089207966 14.448747028868128 -4.54835641408125 +1448 17.09239325885919 -10.376209412101616 11.327045988313397 +1515 -18.039763439880108 5.544230669694517 15.398398954393164 +1516 -16.240112138292528 -4.7297694414157245 -14.457037049090497 +1632 -18.400656634924808 14.930800275576097 -15.635111480288437 +1742 9.5094185053113 -1.7234868435333495 -7.671510264892966 +1822 -11.479779097502387 9.228576848026524 13.228953786873337 +1842 -8.189605943314257 5.813929630155659 1.8382090263088096 +1948 18.941983385174527 -4.38185634426779 -6.841976571499573 +1976 17.75560323678968 5.375479103656799 1.08845377131664 +2029 -2.451129031453407 -1.633163403327487 -18.133331048589813 +2047 0.03310794771459686 10.36870586623999 9.989324996504141 +2050 -0.45519920247923756 -5.267849809727307 -4.385573037238056 +2142 -5.1323506748106995 7.050634951772475 14.842586067595704 +2170 -5.918115676371517 8.746860618252693 -9.21307010727463 +2232 -17.859777087838374 12.712111360223165 6.61777710876996 +2313 7.581840933922896 14.109938207119669 -15.919950542339024 +2357 -1.6778556667677327 -17.311217168354162 14.700816972318039 +2476 -11.724353195489373 13.939082082934913 12.7848406422039 +2484 9.558768983082174 4.656519031093524 -11.022533500126334 +2489 -17.795504640525973 -4.465498687476611 -1.6700262757159636 +2558 -10.433197865956071 1.452200438983357 -14.79209661676137 +2652 4.57064649581967 3.1571579758732775 -9.670274532942901 +2666 9.803871839577543 8.832858046601666 -13.996127024955298 +2773 7.812449744414837 9.842981477548514 -7.430396950840556 +2798 0.08685848032415354 12.314388269850676 -15.100365473497108 +2959 -7.290725713901503 -15.21276757644451 9.622793036918937 +989 12.406493509306443 15.356236294986115 -5.455041715232301 +192 12.225582332569436 6.944577047775229 4.549440488116919 +255 11.456621321443647 12.355574005326067 -8.891573374071243 +365 -10.140335442908425 11.515935507666866 -8.280347790840874 +625 -14.74085801389042 -11.589106223051855 -4.912757467913991 +666 -1.6963670215207347 1.1600091886092612 13.23580682841555 +698 1.9848036844288155 9.952842694139548 8.919527576080482 +772 2.1919360657846494 -7.234547689502 8.727817454451593 +1066 -2.858308916868216 -8.1449929519533 8.555595668916506 +1145 5.771151439253127 -11.818175611829057 3.2342516347377064 +1172 2.3558715737346296 1.5739157172373273 5.53608604069943 +1364 -9.054441512659633 11.133890003226064 15.127711573964566 +1375 19.263787032522252 -4.465070362423687 5.528832888754062 +1397 -17.17588283701793 -15.825851386485272 13.288134223317547 +1477 -17.18958786991095 -11.008203785091847 10.706736262174656 +1558 -14.346656190061033 -6.149976304266109 -15.32303438329883 +1635 -2.088435955002629 19.230873782730683 -16.233300240530863 +1781 -16.520023956553953 -6.044990273088409 -14.508824137759387 +2017 3.1799169525260282 -11.79282300937956 -7.532982014685295 +2020 -2.8634852014589214 5.061682628981274 18.169151173953846 +2179 7.711376329091912 -3.597939241634641 -0.40281694291293263 +1789 -4.797607865826543 -10.722224877236995 -3.5875358266478177 +2664 -9.919035935857993 -18.68622890324404 -10.431116177714049 +2818 17.490387773245786 15.903756575252938 -6.648995502771718 +1 -13.367490285484752 -2.924700674245853 -12.309011154098979 +233 1.8791091786548293 -2.1167301928248556 -9.963201103744753 +324 11.738884621388411 -4.120616917369708 0.23135213902886226 +328 8.052273497591097 5.692857419290877 8.762605507382354 +379 -13.28413198752736 -10.346483086185843 8.053579152271716 +534 6.92527141264565 -6.603267575701505 -8.138761539232982 +551 7.895288308320635 -13.087283751212656 -1.0956328092671508 +594 -9.853240005986018 -8.25201100278431 -0.7715196625615722 +647 -15.546460344810015 -15.244789782073692 -10.389815454846609 +677 13.85296266949898 0.4136459463518305 -8.361420490009346 +721 -2.7961209019894175 -9.219834011054298 -8.161161699440136 +857 -9.835755873617261 2.098103867796574 -12.326727644760254 +1116 -6.651257776806398 0.7689523733658398 12.619857799155598 +1274 -0.8673138430735986 5.486381035849865 -16.24785533503665 +1297 -15.883264113743161 -3.717474417598614 -10.586368176939354 +1326 2.3219021890822136 -9.414645565995883 -14.387714914221409 +1408 -1.1964725665346188 -0.4681014649715136 5.74440327215781 +1612 -18.42218910785885 5.771730824743565 -1.922707231553002 +1749 -3.82673086536481 2.5101317642879346 11.420462479636438 +1760 6.00318614168433 15.335126569071756 -0.5160017240810187 +2287 12.856845189851027 16.489408820214447 -1.0403801073620291 +2315 19.534514089914715 -0.7460351657508968 -1.5176196112184168 +2323 -16.352996130113084 18.487086078159475 -14.499050372909304 +2467 -4.082928561700919 7.827932407425761 -11.588615949566188 +2797 1.6231596831899147 4.726829622431411 -5.103102056253046 +2826 7.284320172484864 -8.807632586936586 -2.506444688869001 +2847 18.59913598142381 -5.24385303962377 6.997916368892379 +2920 -0.8031977127784661 -14.318449121087022 -9.687595571747362 +151 -7.892094518618033 -4.417695462610927 -6.944333246645876 +1313 9.663153946583664 -4.63141515741432 -7.523533878349177 +514 -1.0559953938172113 -9.386419444589684 3.2961852157669083 +524 12.518105548401772 -6.10417109433914 14.133105398259621 +688 -2.337855267943677 9.314125056215229 -1.7525399654181675 +770 -5.8609307061629785 9.260538252493696 13.099256122964976 +881 -8.04850398439912 -7.091698723689009 -9.906230607994553 +919 6.280292981814988 11.693772095115186 5.889270438148364 +945 11.277689263944035 7.165413667270851 13.8248921533845 +1021 2.906401355962719 1.3882025946417595 -9.633844264540832 +1151 -11.117972643460135 -1.520900108124735 10.143763529929199 +1154 9.291609693465306 9.640200029628366 -14.321699228002643 +1551 -14.443321501998325 15.303074006502206 9.478895183101375 +1761 2.80674138282685 -12.871011359310902 17.72487171089814 +2447 -0.39067880151866297 -18.27810289255897 -9.836204763888322 +2512 9.337716480667307 12.7642553225588 -18.43816708142256 +2540 -17.653994923818004 -16.886066893064022 -12.12163697571488 +2672 11.024334992694486 -15.986755454991954 13.29201232714901 +2718 1.7858347057854114 -4.705645683126996 -0.9392572144636442 +2728 -4.739315032630185 -10.82014165609678 -3.167890082195672 +2738 -18.485876639340958 -6.413001340244837 -7.17326339647625 +2844 4.392944489308171 -4.8107499604173505 -3.740829875385136 +2879 12.47024677917021 -14.221355046080646 15.258597591964405 +2915 2.0089620725017623 -17.134160231892324 11.827032583916818 +56 -10.981438713405753 -12.491275999541369 -11.977187284195724 +73 -13.225205725364424 -5.870082240909709 4.8753156777137345 +85 -12.388854958676465 -5.401214410532156 -2.041357784697582 +139 -8.418910451938636 -13.705994760441206 -5.597307091953877 +216 13.863306042863368 11.54841256593859 2.360186032914576 +223 -8.329999960543065 -12.317543827749857 6.584549881291841 +260 11.829644160584646 0.17628647738295775 -5.7317124544220395 +339 -13.520703819146044 13.516880054886467 -11.587087491856533 +405 -11.77318665528603 4.298690698222356 13.189468973515597 +1640 -2.011640151144795 16.568204332100898 -9.28697929338158 +536 6.405686304796782 -7.037058864627055 -3.229028289359846 +784 -5.671103502097673 -4.511864848585905 -5.40198707845047 +880 0.955334907902514 3.8023334361357417 -10.948967672181666 +994 6.41287499137381 -16.017508617522118 15.493005806532663 +1028 12.841521963471148 2.997815551604559 3.621639218843104 +1084 -10.933160381610575 -1.4917363610549446 9.860357191087685 +1147 -9.849801758683492 -5.099784881274821 -12.412109219279131 +1231 -16.696774737970294 1.974341964986196 -18.396525304811874 +1562 11.728095758483958 15.020640875967729 4.981001550683415 +1681 11.704184091270267 5.067475739466325 -2.0451086210150495 +1827 -15.863886078046429 8.424990958219453 -10.239331294619099 +1835 4.271604632011027 -6.13255778861527 3.078800153541242 +1855 -16.74444934766052 -15.432371650670058 2.881239333844865 +1906 -5.328901995011897 -4.173507588053779 6.696560173697186 +1973 -11.829003268271986 18.771324583552705 -18.85124406177215 +1979 -11.836654060045623 7.763534961251563 3.488138227945032 +2113 6.110024013935145 8.080207158025976 -4.45332043100755 +2359 7.728755624045716 14.144713040126554 19.83835179085308 +2365 12.833054159588196 8.563788916877936 10.149628106838653 +2441 0.5579286178136437 12.59962943073658 -2.6009282970629957 +2495 13.990805608225875 -12.039832312962712 -4.557954662205695 +2513 -16.647950554866902 -0.4910866367524386 11.362846874176192 +2572 9.905983097691358 0.523779979942809 19.261254676780524 +2615 14.36813650948475 19.683990988352214 -4.138804405284411 +2896 -10.831630177495057 7.007200283763606 -9.689472854259131 +2923 -14.947034720844377 15.087880499503195 -1.5203002883711858 +42 13.98078296254861 -13.980066862315361 7.705880185318445 +136 6.7539112100657865 -13.467812124677804 -2.3878849727312823 +147 1.1101144175468358 2.7270308138555768 -7.819401132442362 +164 5.716290424176688 11.70587209133668 0.9440005768582449 +261 10.589722203686845 5.493460386373693 9.54745018094424 +262 -4.682966980468231 -11.277025540959677 1.9406693861892952 +537 -10.52743750752414 12.413631871133894 9.15818385445002 +538 -11.9915260854235 -3.4279015495766982 9.110548174654062 +555 3.3078939634730955 11.912325310291845 6.078498949166254 +630 -9.123868897472432 0.08303041797174879 -6.713568111444616 +780 -0.6428653040264964 -13.814545600618258 -3.7625214334393773 +799 15.897678531927811 2.56201170769062 2.948084446760382 +892 -8.932712669165042 8.64753775359479 9.608441286220986 +901 4.152989737223928 -5.272916312504969 -12.29695408215429 +1977 4.090722719427862 10.840898073377897 -10.059831834041077 +1090 8.108226325768882 -0.3767254296672216 15.098253405304058 +1124 1.6626380437941657 -9.861542703365147 -3.7120798698566193 +1195 -5.925503172412495 2.95580534668059 -15.829970261171288 +1301 -5.780060100353015 16.65859498953672 -18.61908009315312 +1365 -19.29229660321033 0.8724759579748947 0.8411716019161886 +1563 12.986577199524078 2.0860313407317563 16.694751947942695 +1687 16.590632935064612 -16.962118361459826 3.051078585262408 +1703 3.1427255843618043 -9.779786587012829 1.9916887208954757 +1746 -5.610662186718499 2.638681659597236 16.34231146100809 +1793 3.870238469978515 -10.693760616056734 4.495030961196278 +1807 -9.18004312119279 16.57087429610841 -3.605916791557929 +1910 -4.218154808832191 8.275706071398945 -10.916979453241868 +1919 -19.176546160632945 -13.360964263974347 13.621143236583837 +1992 -11.420777006638186 -18.14186887974649 6.653539376207943 +2023 6.569729840391836 13.330585652644135 15.164228141732233 +2059 -7.917629992344242 -8.669903387709656 -0.08012505354378986 +559 -5.524210051708004 -9.465374202797749 0.2227784236706588 +2130 4.354848344012472 -18.004302786787317 6.338531969355446 +2273 -10.413389625387056 -18.36790346922394 9.413383551569648 +2297 15.160926541981945 18.478392552414487 -3.8390472793363917 +2416 14.695371849233108 -6.687836569457054 -1.5522972228883576 +2440 17.577407002043778 -10.898922768201954 5.320726227722079 +2453 -13.017687929181125 -10.203281964246006 17.434991739864746 +2517 8.094216360358462 3.1387643814972073 -5.267234632374534 +2637 9.908169382353668 -1.9243562730498769 -13.084070922672721 +2638 -17.533636678987154 7.130802786540362 -9.532405022539237 +2722 12.645134221589224 -14.364803239808136 -4.900817469524723 +2776 -14.35005572473583 15.100089561202813 7.712286835123525 +2814 -7.70053272110643 -4.867164927080393 -11.274632843504957 +2864 13.810459827423127 13.944390382533012 -15.577635729738098 +2918 11.27281190592465 5.704332529853966 1.9118051586157339 +2947 -10.30177451163137 15.475252519726098 2.999496579409986 +2964 13.610412043220958 -16.85180004929924 15.09889016535746 +39 -8.089589734135487 0.1625003245286638 -12.087632087496047 +66 1.608729532081818 -11.259928440084586 7.606704557478398 +106 -5.48913991134085 -11.579897448380924 10.069921535327802 +377 6.855885922127376 10.311538076341611 2.559155019516485 +528 2.297690991535742 -9.135682012201766 -7.83387718582674 +657 10.176141015762179 -0.6764674650092765 12.502499710447987 +746 0.5267417410351755 -6.464973104553375 -4.608621511650602 +805 -2.0007902319154245 -14.720453170443035 6.93845630962376 +1053 8.855925793795091 10.982548161858153 -13.647794519578488 +1061 -11.375985013689712 10.619923065347585 5.845550076175352 +1110 2.3825632330961954 -7.561968511019787 -1.3226923778622177 +1112 -11.473493136996964 6.595905776353855 -10.691365454018829 +1283 -7.037130435830825 14.116633138127108 18.215709754968533 +1391 14.15340916118452 16.519524767333156 -4.390950324381431 +2018 0.22391755132690427 3.477862841431781 10.97230848988125 +2115 18.99624836776456 6.210186881196452 -1.0800100392463163 +2277 -12.59773509889914 -6.800126447107948 -7.54318742621085 +2366 -8.83793651227347 4.982332260123542 17.090269243683064 +2516 17.970329690806906 8.524915110390664 -16.114076366302275 +2531 -7.71985978267249 -16.152908088642853 3.469301196958505 +2691 6.152107383838279 9.900998816830608 -12.158539946738776 +2827 -18.91991355075083 -11.36917293943904 18.816657871016556 +2856 16.17462403879287 6.727402459207942 -9.088801473171161 +2968 7.463506542761513 -15.085045422174463 0.6327983715492128 +204 0.09981874793197913 8.289547549159503 -9.831963425672972 +310 0.4188157619876877 -10.509976630943695 -7.438517000323002 +374 -10.491130318159124 2.9216972089642934 -3.606593681973984 +389 -0.5056028877178037 1.7944236157088598 7.702535080689157 +421 -11.621965603570514 10.706453753723752 -7.857621196818839 +465 -1.982707376456345 -7.457571890053484 -0.4994717988348658 +468 -8.022941376355684 -6.418307415757958 1.9523150320107 +968 12.762353114056848 12.938872577015847 6.916927200937309 +974 0.7446320766035379 -6.322928151893814 -4.059818421055038 +1173 -8.809238931323664 -8.666964600488436 -1.7206415718075718 +1182 -8.323812259763292 8.61994885708838 3.664460821149774 +1197 -11.212498253726476 11.886279058821243 4.45968739642885 +1208 9.023710305754959 -12.872501727547583 -7.323747243032011 +1348 14.07823162628223 7.187417981340761 1.3666322501270356 +1373 -13.35291711861014 -0.6050182719754784 16.971959728189464 +1447 17.13041793451804 1.6161532277216442 -2.7491563603923237 +69 6.0223605260831645 0.9916868081699585 8.813600195803375 +1886 7.689644686559568 -16.104452131125033 -5.1848948214722475 +1951 7.339261853541482 13.157681766407823 9.452282525735473 +1967 15.144068960776613 9.504183241190598 -18.624082420212453 +1985 -16.769050105548 2.225938830826062 16.538583618909684 +2056 -8.692031613656601 -11.954458747380967 19.36674946372861 +2069 -7.740780912801226 -15.03713901068198 -17.257617694661885 +2291 14.00907354671591 -18.55477069013324 4.177807521083909 +2560 -18.077197633253288 3.4761038050326696 -18.591816270012654 +2609 4.666510000924542 7.421162805034961 10.613626838430777 +2612 -3.769491807797185 -15.298592006660767 17.313429571115492 +2687 12.019126854237747 7.252445659767184 -3.117808464199604 +2768 -4.248674625101532 4.8384474737881 -10.406957779647298 +2889 11.374583080991208 -8.32052131211421 -6.968966380999982 +103 4.767203187110862 3.7642395036736103 -11.750690091162395 +155 -4.674852975808136 12.421075086699611 -6.586161750722438 +265 -12.97733999278354 -8.927815452075867 -7.113847680669369 +278 -8.784922883291898 3.623240761472179 12.805433238413839 +511 2.378872710773083 3.197764875273853 -11.53882341703634 +1011 -14.636591859178347 7.929444218557457 5.397580097914046 +1032 -9.907858137419666 0.0236643814669633 9.09436325697625 +1094 13.267902282365974 8.769686440975198 2.719716057331954 +1385 6.634021542164624 -3.5234146793235754 -2.0452204976427018 +1644 14.78748427519306 12.917826215760211 15.08136774862322 +1831 3.6571088221249624 12.994324570143734 7.419464983300335 +1864 18.547493492839894 -10.9526620766474 3.56368835034383 +1895 -16.71911726704111 18.393681595779498 -16.62728283714897 +2026 -5.606116473255784 0.6524426826641052 -13.113964740846052 +2145 -14.546553643466796 4.773465531549099 -5.153828963306857 +2209 -6.929146622050848 -13.071469564655436 19.223755711767613 +2246 13.308333960891954 1.2148046593382456 -7.01466272720278 +2247 10.765171196925042 17.86585715685731 9.043496132685796 +2332 -6.834234725305277 14.391876142134054 19.448214556358433 +2392 -13.533595882948218 -19.410272427109707 9.599398228774607 +2457 -7.173628864398844 -6.81714660531151 -19.249828346668153 +2566 17.522868752121628 13.109252527875794 18.555544538319538 +1884 -14.078060866068222 0.9340382167957191 16.49946872102742 +2808 -1.1964127043260202 0.5380026749348159 -16.049068599360478 +35 -3.019428232777262 4.672734654683404 -9.996393680002924 +48 -11.937315048620878 6.305188435770401 -9.458776571849715 +82 6.29983894951896 -11.398441829923902 -10.571336733785317 +108 -11.5441576102066 -5.493816189817909 -9.132296440383804 +135 4.596500735350087 7.9545129711748235 -7.059330887129422 +314 4.024066014873774 -7.499406114494512 0.6050661116957967 +604 5.392377688008225 -2.168069354243786 -11.790882049511824 +635 3.0908636510204164 -4.464525529134779 5.528349591303418 +771 16.42616798842558 -8.400553514461022 -3.4878492218820303 +872 -3.981500706452422 12.600928239146015 16.173079376216993 +875 5.988235234282369 7.464242722595763 1.0761907000938704 +1095 0.12397311185982236 -7.7459775514270985 12.147886654950042 +1220 -13.129527690475115 -8.629066557047206 -19.209918412953282 +1232 16.94400521012725 4.019300183847904 18.128485680612833 +1396 12.079380612781847 0.9187786280478323 -4.8103039303052135 +1401 -16.71390445496599 -11.573653574939916 -8.096419193278683 +1487 9.860903678999914 -12.458581091571574 12.27538629079051 +1548 14.788519927903153 -8.868981258127155 -14.574974506357123 +1663 5.31705994301685 6.3607418506262725 -18.249106038322857 +1710 -3.5904823412973474 14.643795953638902 -18.57497387336755 +1920 17.699261382324085 -0.9295271618823038 10.781184627924477 +2066 8.362971797508598 12.913800737741424 -13.381818740737938 +2295 -7.042383873904826 4.208144573204228 17.401309227908712 +2499 3.149529198129069 -13.010517717855581 -14.570164577896275 +2582 15.499542946881247 -12.576985875580078 -18.102689920094694 +2867 -10.429992445443057 16.132680428828913 -0.04200054670170165 +2887 7.701420696281869 -14.150169590464905 -3.311149618712712 +24 -1.6003070529484371 -2.871949281543293 1.0603343651020063 +28 -7.590496059806232 -5.781304467088922 4.0331823310009645 +65 13.702954827385067 -7.467543232443796 0.9231401890054083 +88 -7.828221031119957 -1.298760180629657 -8.566240873169976 +172 5.971956101633809 -1.1006572030930208 -2.9317804039436446 +294 -11.107346320930377 12.185102530415897 -0.81927197851833 +399 10.239936456839082 13.859643155806816 2.8595892547875503 +653 -13.737581768502524 12.086135309931214 -4.234023138591004 +678 -4.69030943340445 0.9603354269262174 -7.699283060975345 +689 2.7916107866109217 1.1612166395096144 0.8335338879243539 +720 3.719127504077375 -6.009719139835266 -3.9958886111304377 +2240 1.1134543667672434 -17.811502709987106 -6.291450758767102 +975 1.7002710450828666 1.4142057241056267 2.354049739351454 +1052 -0.6421457908162863 -1.7216870766273178 3.194906847301963 +1114 11.803293344272557 13.100131613971513 3.437842829013619 +1281 -8.459559391164635 15.09695000736993 -5.861171861758025 +1427 -10.18050758402495 15.571331036013744 10.877194357424251 +1433 -4.24250576975349 -9.060668408866299 16.75995653014593 +1437 -2.9923343895605385 -4.890380312854992 -9.525395833187325 +1554 3.894548695396892 5.957972266564933 -7.204600331892954 +1627 -2.51587318566929 7.61646871753722 0.9062021821996737 +1651 6.479320932282661 -16.837075187029924 -11.771507681051013 +1672 -6.052909437296341 16.463429953982075 -6.543936578404647 +1757 15.659852025185948 16.61215826826801 -15.2206030083744 +1838 -7.438920926018795 2.42374700189839 9.693596177429278 +1889 -11.936070168222706 -17.01604713014535 -1.8902175471059728 +1981 3.766329210277972 6.589327354968951 -17.328746646192926 +2183 -2.045279153495559 -0.10019216356970254 -3.3015345069660875 +2409 17.25280817281867 -18.6013079908628 5.885845607379763 +2514 1.358148481182193 18.688130732390864 -6.14148793243422 +2579 -18.336391962399254 -2.3774806146846874 13.894520839267368 +2617 -8.329028969284408 14.112486493887928 -12.283917400501808 +2654 11.349233205965277 -3.2526225765312775 2.767032733977089 +2835 -1.9769639812780533 11.475252696448841 -8.963821573825776 +2910 -10.414412593879165 3.632087656259433 16.289281519734534 +2962 17.94796292484188 -14.656117312252267 -1.8886114878509044 +95 -6.010616985739609 12.525017305982484 -6.075905528840144 +124 -4.804445535722978 3.33295271789681 7.0837336561371265 +508 11.97769517996487 9.64230392090354 -6.030219897568888 +613 -13.670735492519656 -8.78501204125535 8.705935044651195 +758 -9.10682200072907 -7.6728780208173415 -1.7125108502440658 +807 -13.505392230740856 -9.012330256254318 13.589021615393614 +1234 15.39935759107301 -11.092290331439406 8.412964405159427 +1410 -9.197895254591824 -9.118773734644625 -19.18371208857891 +1534 -13.27961551566979 16.391322602103255 -3.4684998613520728 +1537 15.50994026423711 5.398636634796869 -1.633146081532414 +1716 15.066126302855947 -7.108323542196062 -13.932785015221109 +1785 -12.761652262323047 -18.24431204460591 9.38426076959346 +1858 -5.90545458199429 -13.616261618092603 -5.122027037234463 +1943 7.393907253166882 -9.049628467051003 6.343145757829771 +2158 6.011421612029508 -3.0234136291868583 14.165598656351007 +2160 -7.071719038966821 -18.51170375494176 -16.663641591344156 +2796 18.303157693894885 -2.2370648433374973 -16.911987044974158 +2878 -12.127406176006536 -18.97247901610492 -0.6949866251745241 +68 7.366710778086018 4.3542454643979855 -10.830369316287747 +99 4.721614254195144 -1.899620072668731 5.270872211248402 +282 11.76400014351112 -4.531445455579077 -3.282878255132512 +383 -11.767345744063842 -10.207090084975952 12.846754825153965 +460 11.878526687760393 4.8585969347303095 -12.911878455203821 +500 11.175666990882442 -5.505374489688485 -6.213184899703319 +866 -6.5876026145350846 -8.343442682476866 8.192797476936668 +900 7.3610020367026525 -3.749666240843082 -11.922874051539178 +1004 -13.578492598737437 4.833993288577111 -0.6689457322890442 +1206 -16.787411980253786 7.162091229917968 6.8231693836554905 +1494 12.950832580487226 -10.778442225608968 -7.7999681768085685 +1506 8.160671770710621 -16.542808429397375 -4.350956273313075 +1544 0.7587845418318895 17.78520317890332 -13.945143878447608 +1587 -11.090661838389426 3.8875811686148873 -0.863739286252643 +1652 16.238079567715317 15.01286760392522 -8.085313950554129 +1715 -15.458573700669502 0.9241899344463359 7.751477564553571 +1804 7.073284807649246 10.886044709299306 4.052249221398617 +1821 7.023640129023922 -0.4385949260867339 -7.848491132548266 +1832 0.339878460669395 -7.218262459358984 19.58891770280824 +2256 5.798041035668019 16.447316124217227 -3.017915429426457 +2210 -0.02610968360190616 -5.076459360184865 -1.5141385142844044 +41 -1.606854444559823 -0.23998439958097745 11.958645397944949 +101 14.107820991163855 8.511035801480215 -5.520104591372095 +198 -6.659553419176588 7.057528977619731 -12.525061422501535 +428 4.084610885782839 -3.987541996776701 11.510522578489237 +600 4.825613755317223 -0.4266279792547336 1.742827344679067 +789 -13.887272778456671 13.813648160102419 -3.8849480875699407 +954 -12.642427349357602 10.55463248660764 -12.528499456294755 +1097 -13.854445585830552 9.709970841033448 13.959820261997468 +1129 -13.655492281321045 -14.159563207969367 -15.299108761853022 +1161 -6.61298653450513 -9.924282723638786 -11.914793481833865 +1162 9.17952388355728 -10.519694399491815 -14.053361391017678 +1167 7.811955456742992 -10.024387294210342 5.814500503525913 +1174 15.77350863635602 8.176191086807448 0.09286648994764858 +1759 17.438648446589067 8.56739004849059 -7.7121980240554695 +1773 -5.965939704324487 -11.17112573929781 15.989031990619452 +1974 17.125258596915852 -6.710788707519208 4.6213440904807745 +2112 10.289784665683513 -15.771991222080883 17.076398202665224 +2919 7.020520997694518 -13.668812606945357 13.093022479729093 +104 2.694261283766279 8.256653528418196 0.6881084479076419 +1357 -5.6061178238056115 0.6297439917028045 -2.680638003428377 +2385 10.938482292185205 -8.771257735647506 -18.24268023174468 +2109 10.062379341133207 3.1429311562290945 -13.622296858354968 +2362 15.011413028976342 13.958224100923848 -18.232466169399952 +121 -6.514184703570357 -0.3894391847386166 7.068030457072635 +197 0.7924146331801465 -13.007893470012341 9.297608913552057 +731 13.434191867382756 -8.248677335975222 -1.1851347832684127 +664 9.01364679529034 13.431502252114463 14.481120234947909 +960 7.313165537855884 9.659803209518872 -11.810057035455827 +1111 1.4460656180609446 12.146522943136912 -2.871978754731447 +1438 -15.433853181863476 -14.721298789103034 0.01093910849078047 +1706 10.846818267018865 18.352374189755313 -5.406449582417788 +1878 8.393882251190387 -16.276520246025818 3.1499683987720095 +340 -8.149256698881002 11.405605097524251 -3.4829520978365824 +357 9.499298409790114 -11.738193272891042 -2.5695721845368316 +806 -12.916189702066877 -13.143198317232374 -0.5143064056599679 +1682 13.72993210762739 -6.9222287627857595 17.51338931406941 +1446 -13.340391243471789 13.952252316346673 -1.021181840797822 +2554 9.804695109201822 -16.523471950483867 7.0930642468444045 +2373 -11.017824149315036 13.086921697486595 -4.021518661312548 +2111 -1.0047699027231247 7.650718277914335 -11.356775145620219 +2275 14.067621743333826 -14.360794442904794 -15.911013059843327 +2694 -5.279871141283455 -3.165422994579214 18.188571423458043 +2399 -1.3792422922680758 -15.223121219939038 -7.618802886020248 +1455 8.149352228579557 -10.825240164204683 -10.47247070697683 +234 -10.76134370704678 -3.427208120579764 -7.403484597499105 +1808 1.3591107296840588 -4.332381269149936 1.632136913840878 +251 0.18005721222562182 4.76970859790914 14.2405164677342 +349 13.024219442017673 -6.733126029860115 6.472725460569033 +796 15.273787117013828 12.202972741961656 -2.301316366211846 +2552 4.643744311741359 16.728450427331857 18.84360833009555 +1229 -10.314240305553046 1.927766940114816 -17.32251687009723 +33 3.7546139615737486 -1.0525442227325994 -11.183243271767353 +1668 -9.425968097520016 -1.4228327334913748 -10.47779462915132 +158 4.067237042923877 13.863714232653344 -13.223303956540327 +2400 7.974368203597156 -12.305055113277286 5.84701370443851 +1685 0.5080366060630412 -2.881938041238056 1.1714283953901679 +804 -3.615234819505437 -11.09345193719286 -11.905731829724735 +1353 0.4814526387556501 -18.555428280144824 -6.874307803600548 +2544 -10.628946065276365 3.726110544455305 -10.381962040687108 +22 -10.056949402544367 4.560419724600141 -10.384330705799007 +1018 -12.881109680053669 -12.079472350212026 -7.129400523192977 +1718 14.882615983048499 4.882514673634039 -14.436958844561246 +2653 18.75026208742554 -12.813856674606185 -1.5019067669978072 +2868 13.160947399609594 -6.7507087521071165 -0.03346156765866535 +2006 -2.892433196736403 -11.151003130880287 1.452508512255615 +2328 -15.45479699757919 -13.986806371478613 -1.177108184152851 +1546 -4.156766405925731 -18.181015734557796 14.993734293413537 +1916 13.430212432061092 11.58909583415679 -16.060312163938374 +332 1.2576645126867545 3.7740145505008993 11.696052316931485 +1015 2.9820228673102394 -2.7811648737094736 15.817192670583902 +1153 -1.2968297158497366 13.523959943229821 -0.9856758798193691 +1636 3.1427133929120052 -9.98468828379863 7.1948572132149495 +1653 5.927421062854784 -3.8718310022878724 -18.117997270854747 +1770 12.519654582306087 -6.877881761866644 18.186004886016427 +2486 -5.49944015596549 -9.317730949860588 7.5423130032406736 +2841 1.677007053872281 8.300069515780816 6.62920454888189 +2335 -10.883530128327966 -3.028776772058384 2.4133015594229574 +305 -7.74249404319521 2.9215357652095544 -6.319978867870987 +436 5.852135899565943 13.212769144037765 3.886727975664093 +1661 -8.64118899733373 19.503919770679385 -12.73302175757051 +633 -6.968536321355608 -2.299809561665563 -2.62733304227677 +2071 -2.3788501779970863 -1.8261731073618326 -9.026553244541692 +1670 14.575181820858559 11.315530304289746 10.900490903943252 +1883 -6.8362277353367755 -19.10464345727179 12.019537310070156 +2709 9.350261957028845 -11.542058903514121 13.405930018857608 +1667 -4.955675195672617 -2.2343026769282073 -9.68127877644112 +1473 11.639484596452077 15.0676983573892 12.015640353293122 +1367 15.258724326451466 16.058808090831462 12.562337047001408 +2534 10.122786861600309 -0.6064592356393937 -7.246316571250921 +2890 -5.0767896206525 0.23273045100893455 -12.473379137134977 +238 0.5397949276884527 -5.344701199953292 -9.95262098932802 +1511 6.3717649690380975 17.54191146447949 12.318381902350522 +959 -10.654483268600218 6.720770154882398 -4.633369778894626 +2161 -18.088216404287497 14.248731895120583 4.397231917430295 +2805 -3.411020367602394 12.998449769841725 -1.634348837407725 +661 -9.68407335986619 1.1458951098050734 4.891785925445228 +1896 5.098026768104461 9.21429290377474 8.316838181611637 +375 9.810635568285528 9.734053686938635 -13.259067945647686 +2679 -9.901524469527768 1.2778277020542463 -5.997993254241698 +1583 0.47806723010202845 2.9320536232166297 8.724059889682737 +496 -11.905058303097334 13.242925900870825 3.6984494434906883 +331 -3.4758523673267425 -4.617347489563868 -10.445173332089329 +499 3.5940577670935565 4.654911817696662 0.30861824383283687 +1595 -11.758456841733029 -10.538584320624494 -13.38948406004756 +1972 -12.872313577638627 3.1360449216635633 -11.780173484023177 +1290 17.511749784890714 -16.9951394325122 -3.231746578411683 +2892 -17.2187426635682 8.496472658765061 15.36293260337293 +723 -8.811126583929111 -7.696841717507485 -12.119558448834562 +2520 0.6569717004780673 -8.083250841592342 -16.852470704886883 +2786 14.19098207792586 -18.273847291799875 -16.69836795056262 diff --git a/examples/nb3b/in.nb3b.screened b/examples/nb3b/in.nb3b.screened new file mode 100644 index 0000000000..bc2619dccc --- /dev/null +++ b/examples/nb3b/in.nb3b.screened @@ -0,0 +1,35 @@ +### LAMMPS input file + +units metal +dimension 3 +boundary p p p +atom_style charge + +read_data data.NaPO3 + +pair_style hybrid/overlay coul/dsf 0.2 12.0 table spline 20000 buck 7.0 nb3b/screened + +pair_coeff * * coul/dsf +pair_coeff 1 3 table Table_NP.dat Pair_P-O 7.0 +pair_coeff 2 3 table Table_NP.dat Pair_Na-O 7.0 +pair_coeff 3 3 table Table_NP.dat Pair_O-O 7.0 + +# pair Buckingham +pair_coeff 1 1 buck 5.093669 0.905598 0.0 + +# shrm +pair_coeff * * nb3b/screened PSiO.nb3b.screened P NULL O + +neighbor 1.0 bin +neigh_modify every 10 delay 10 check no +timestep 0.002 + +thermo 100 +thermo_style custom step density lx press pe evdwl ecoul temp + +#dump 2 all custom 10000 NaPO3-melt.lammpstrj id type element x y z +#dump_modify 2 element P Na O +variable temp equal 2500 + +fix 1 all npt temp ${temp} ${temp} $(100*dt) iso 1 1 $(1000*dt) +run 1000 diff --git a/examples/nb3b/log.30Oct23.nb3b.screened.g++.1 b/examples/nb3b/log.30Oct23.nb3b.screened.g++.1 new file mode 100644 index 0000000000..2768917c7e --- /dev/null +++ b/examples/nb3b/log.30Oct23.nb3b.screened.g++.1 @@ -0,0 +1,132 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-700-g901ed98d31) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +### LAMMPS input file + +units metal +dimension 3 +boundary p p p +atom_style charge + +read_data data.NaPO3 +Reading data file ... + orthogonal box = (0 0 0) to (34.33782 34.33782 34.33782) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 3000 atoms + reading velocities ... + 3000 velocities + read_data CPU = 0.019 seconds + +pair_style hybrid/overlay coul/dsf 0.2 12.0 table spline 20000 buck 7.0 nb3b/screened + +pair_coeff * * coul/dsf +pair_coeff 1 3 table Table_NP.dat Pair_P-O 7.0 +WARNING: 1 of 4995 force values in table Pair_P-O are inconsistent with -dE/dr. +WARNING: Should only be flagged at inflection points (src/pair_table.cpp:466) +pair_coeff 2 3 table Table_NP.dat Pair_Na-O 7.0 +WARNING: 2 of 4995 force values in table Pair_Na-O are inconsistent with -dE/dr. +WARNING: Should only be flagged at inflection points (src/pair_table.cpp:466) +pair_coeff 3 3 table Table_NP.dat Pair_O-O 7.0 + +# pair Buckingham +pair_coeff 1 1 buck 5.093669 0.905598 0.0 + +# shrm +pair_coeff * * nb3b/screened PSiO.nb3b.screened P NULL O +Reading nb3b/screened potential file PSiO.nb3b.screened with DATE: 2023-10-30 + +neighbor 1.0 bin +neigh_modify every 10 delay 10 check no +timestep 0.002 + +thermo 100 +thermo_style custom step density lx press pe evdwl ecoul temp + +#dump 2 all custom 10000 NaPO3-melt.lammpstrj id type element x y z +#dump_modify 2 element P Na O +variable temp equal 2500 + +fix 1 all npt temp ${temp} ${temp} $(100*dt) iso 1 1 $(1000*dt) +fix 1 all npt temp 2500 ${temp} $(100*dt) iso 1 1 $(1000*dt) +fix 1 all npt temp 2500 2500 $(100*dt) iso 1 1 $(1000*dt) +fix 1 all npt temp 2500 2500 0.2000000000000000111 iso 1 1 $(1000*dt) +fix 1 all npt temp 2500 2500 0.2000000000000000111 iso 1 1 2 +run 1000 +Neighbor list info ... + update: every = 10 steps, delay = 10 steps, check = no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 13 + ghost atom cutoff = 13 + binsize = 6.5, bins = 6 6 6 + 6 neighbor lists, perpetual/occasional/extra = 6 0 0 + (1) pair coul/dsf, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d + bin: standard + (2) pair table, perpetual, skip from (5) + attributes: half, newton on, cut 8 + pair build: skip + stencil: none + bin: none + (3) pair buck, perpetual, skip from (5) + attributes: half, newton on, cut 8 + pair build: skip + stencil: none + bin: none + (4) pair nb3b/screened, perpetual, skip from (6) + attributes: full, newton on, cut 4.3 + pair build: skip + stencil: none + bin: none + (5) neighbor class addition, perpetual, trim from (1) + attributes: half, newton on, cut 8 + pair build: trim + stencil: none + bin: none + (6) neighbor class addition, perpetual + attributes: full, newton on, cut 4.3 + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 12.11 | 12.11 | 12.11 Mbytes + Step Density Lx Press PotEng E_vdwl E_coul Temp + 0 2.509108 34.33782 46464.417 -50581.248 2292.3853 -52873.634 2500 + 100 2.4533672 34.595928 33156.229 -50182.221 2373.5614 -52555.782 1666.1883 + 200 2.3649528 35.021791 29182.391 -50158.578 2367.6353 -52526.213 1885.4424 + 300 2.2932707 35.382952 14450.387 -50100.892 2239.9823 -52340.875 2045.1557 + 400 2.2282371 35.723887 16680.683 -50048.753 2281.6385 -52330.392 2257.1768 + 500 2.1753698 36.010969 15871.062 -49981.163 2285.6757 -52266.839 2396.7925 + 600 2.1285968 36.272824 15066.532 -49934.767 2282.4577 -52217.225 2540.7515 + 700 2.0841139 36.529076 7572.3436 -49895.93 2222.7473 -52118.677 2577.5774 + 800 2.0485057 36.739517 6642.7187 -49870.601 2230.3801 -52100.981 2556.7855 + 900 2.0180051 36.923689 8318.7918 -49890.3 2255.1538 -52145.454 2538.111 + 1000 1.990678 37.091879 7724.2804 -49928.89 2250.855 -52179.745 2492.3778 +Loop time of 30.3284 on 1 procs for 1000 steps with 3000 atoms + +Performance: 5.698 ns/day, 4.212 hours/ns, 32.972 timesteps/s, 98.917 katom-step/s +99.7% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 27.347 | 27.347 | 27.347 | 0.0 | 90.17 +Neigh | 2.8101 | 2.8101 | 2.8101 | 0.0 | 9.27 +Comm | 0.067332 | 0.067332 | 0.067332 | 0.0 | 0.22 +Output | 0.00047847 | 0.00047847 | 0.00047847 | 0.0 | 0.00 +Modify | 0.087652 | 0.087652 | 0.087652 | 0.0 | 0.29 +Other | | 0.01585 | | | 0.05 + +Nlocal: 3000 ave 3000 max 3000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 11846 ave 11846 max 11846 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 811471 ave 811471 max 811471 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 811471 +Ave neighs/atom = 270.49033 +Neighbor list builds = 100 +Dangerous builds not checked +Total wall time: 0:00:30 diff --git a/examples/nb3b/log.30Oct23.nb3b.screened.g++.4 b/examples/nb3b/log.30Oct23.nb3b.screened.g++.4 new file mode 100644 index 0000000000..fd42272af4 --- /dev/null +++ b/examples/nb3b/log.30Oct23.nb3b.screened.g++.4 @@ -0,0 +1,132 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-700-g901ed98d31) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +### LAMMPS input file + +units metal +dimension 3 +boundary p p p +atom_style charge + +read_data data.NaPO3 +Reading data file ... + orthogonal box = (0 0 0) to (34.33782 34.33782 34.33782) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 3000 atoms + reading velocities ... + 3000 velocities + read_data CPU = 0.011 seconds + +pair_style hybrid/overlay coul/dsf 0.2 12.0 table spline 20000 buck 7.0 nb3b/screened + +pair_coeff * * coul/dsf +pair_coeff 1 3 table Table_NP.dat Pair_P-O 7.0 +WARNING: 1 of 4995 force values in table Pair_P-O are inconsistent with -dE/dr. +WARNING: Should only be flagged at inflection points (src/pair_table.cpp:466) +pair_coeff 2 3 table Table_NP.dat Pair_Na-O 7.0 +WARNING: 2 of 4995 force values in table Pair_Na-O are inconsistent with -dE/dr. +WARNING: Should only be flagged at inflection points (src/pair_table.cpp:466) +pair_coeff 3 3 table Table_NP.dat Pair_O-O 7.0 + +# pair Buckingham +pair_coeff 1 1 buck 5.093669 0.905598 0.0 + +# shrm +pair_coeff * * nb3b/screened PSiO.nb3b.screened P NULL O +Reading nb3b/screened potential file PSiO.nb3b.screened with DATE: 2023-10-30 + +neighbor 1.0 bin +neigh_modify every 10 delay 10 check no +timestep 0.002 + +thermo 100 +thermo_style custom step density lx press pe evdwl ecoul temp + +#dump 2 all custom 10000 NaPO3-melt.lammpstrj id type element x y z +#dump_modify 2 element P Na O +variable temp equal 2500 + +fix 1 all npt temp ${temp} ${temp} $(100*dt) iso 1 1 $(1000*dt) +fix 1 all npt temp 2500 ${temp} $(100*dt) iso 1 1 $(1000*dt) +fix 1 all npt temp 2500 2500 $(100*dt) iso 1 1 $(1000*dt) +fix 1 all npt temp 2500 2500 0.2000000000000000111 iso 1 1 $(1000*dt) +fix 1 all npt temp 2500 2500 0.2000000000000000111 iso 1 1 2 +run 1000 +Neighbor list info ... + update: every = 10 steps, delay = 10 steps, check = no + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 13 + ghost atom cutoff = 13 + binsize = 6.5, bins = 6 6 6 + 6 neighbor lists, perpetual/occasional/extra = 6 0 0 + (1) pair coul/dsf, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d + bin: standard + (2) pair table, perpetual, skip from (5) + attributes: half, newton on, cut 8 + pair build: skip + stencil: none + bin: none + (3) pair buck, perpetual, skip from (5) + attributes: half, newton on, cut 8 + pair build: skip + stencil: none + bin: none + (4) pair nb3b/screened, perpetual, skip from (6) + attributes: full, newton on, cut 4.3 + pair build: skip + stencil: none + bin: none + (5) neighbor class addition, perpetual, trim from (1) + attributes: half, newton on, cut 8 + pair build: trim + stencil: none + bin: none + (6) neighbor class addition, perpetual + attributes: full, newton on, cut 4.3 + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.188 | 7.188 | 7.189 Mbytes + Step Density Lx Press PotEng E_vdwl E_coul Temp + 0 2.509108 34.33782 46464.417 -50581.248 2292.3853 -52873.634 2500 + 100 2.4533672 34.595928 33156.229 -50182.221 2373.5614 -52555.782 1666.1883 + 200 2.3649528 35.021791 29182.391 -50158.578 2367.6353 -52526.213 1885.4424 + 300 2.2932707 35.382952 14450.387 -50100.892 2239.9823 -52340.875 2045.1557 + 400 2.2282371 35.723887 16680.683 -50048.753 2281.6385 -52330.392 2257.1768 + 500 2.1753698 36.010969 15871.062 -49981.163 2285.6757 -52266.839 2396.7925 + 600 2.1285968 36.272824 15066.532 -49934.767 2282.4577 -52217.225 2540.7515 + 700 2.0841139 36.529076 7572.3446 -49895.929 2222.7474 -52118.677 2577.5774 + 800 2.0485057 36.739517 6642.7277 -49870.601 2230.3802 -52100.981 2556.7856 + 900 2.0180051 36.923689 8318.7257 -49890.301 2255.153 -52145.454 2538.1115 + 1000 1.990678 37.091879 7730.4071 -49928.905 2250.9166 -52179.822 2492.4197 +Loop time of 9.72954 on 4 procs for 1000 steps with 3000 atoms + +Performance: 17.760 ns/day, 1.351 hours/ns, 102.780 timesteps/s, 308.339 katom-step/s +99.3% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 7.1441 | 8.0123 | 8.622 | 19.6 | 82.35 +Neigh | 0.7458 | 0.78431 | 0.80001 | 2.5 | 8.06 +Comm | 0.26061 | 0.88607 | 1.7928 | 61.3 | 9.11 +Output | 0.00024827 | 0.00027521 | 0.00035196 | 0.0 | 0.00 +Modify | 0.03802 | 0.038395 | 0.038805 | 0.1 | 0.39 +Other | | 0.008186 | | | 0.08 + +Nlocal: 750 ave 765 max 731 min +Histogram: 1 0 0 0 1 0 0 1 0 1 +Nghost: 6607.5 ave 6671 max 6552 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Neighs: 202867 ave 217674 max 182729 min +Histogram: 1 0 0 0 1 0 0 0 1 1 + +Total # of neighbors = 811469 +Ave neighs/atom = 270.48967 +Neighbor list builds = 100 +Dangerous builds not checked +Total wall time: 0:00:09 diff --git a/src/.gitignore b/src/.gitignore index b18ab895da..60cfe7eea3 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1297,6 +1297,8 @@ /pair_morse_soft.h /pair_nb3b_harmonic.cpp /pair_nb3b_harmonic.h +/pair_nb3b_screened.cpp +/pair_nb3b_screened.h /pair_nm_cut.cpp /pair_nm_cut.h /pair_nm_cut_coul_cut.cpp diff --git a/src/MANYBODY/pair_nb3b_harmonic.cpp b/src/MANYBODY/pair_nb3b_harmonic.cpp index f0497d437c..d1ba719906 100644 --- a/src/MANYBODY/pair_nb3b_harmonic.cpp +++ b/src/MANYBODY/pair_nb3b_harmonic.cpp @@ -37,18 +37,19 @@ using MathConst::MY_PI; #define DELTA 4 #define SMALL 0.001 +static const char *substyle[] = { "nb3n/harmonic", "nb3b/screened" }; + /* ---------------------------------------------------------------------- */ -PairNb3bHarmonic::PairNb3bHarmonic(LAMMPS *lmp) : Pair(lmp) +PairNb3bHarmonic::PairNb3bHarmonic(LAMMPS *lmp) : Pair(lmp), params(nullptr) { + variant = HARMONIC; single_enable = 0; restartinfo = 0; one_coeff = 1; manybody_flag = 1; centroidstressflag = CENTROID_NOTAVAIL; unit_convert_flag = utils::get_supported_conversions(utils::ENERGY); - - params = nullptr; } /* ---------------------------------------------------------------------- @@ -191,9 +192,10 @@ void PairNb3bHarmonic::coeff(int narg, char **arg) void PairNb3bHarmonic::init_style() { - if (atom->tag_enable == 0) error->all(FLERR, "Pair style nb3b/harmonic requires atom IDs"); + if (atom->tag_enable == 0) + error->all(FLERR, "Pair style {} requires atom IDs", substyle[variant]); if (force->newton_pair == 0) - error->all(FLERR, "Pair style nb3b/harmonic requires newton pair on"); + error->all(FLERR, "Pair style {} requires newton pair on", substyle[variant]); // need a full neighbor list @@ -222,14 +224,14 @@ void PairNb3bHarmonic::read_file(char *file) // open file on proc 0 if (comm->me == 0) { - PotentialFileReader reader(lmp, file, "nb3b/harmonic", unit_convert_flag); + PotentialFileReader reader(lmp, file, substyle[variant], unit_convert_flag); char *line; // transparently convert units for supported conversions int unit_convert = reader.get_unit_convert(); double conversion_factor = utils::get_conversion_factor(utils::ENERGY, unit_convert); - while ((line = reader.next_line(NPARAMS_PER_LINE))) { + while ((line = reader.next_line(NPARAMS_PER_LINE + ((variant == SCREENED) ? 1 : 0)))) { try { ValueTokenizer values(line); @@ -269,6 +271,10 @@ void PairNb3bHarmonic::read_file(char *file) params[nparams].kelement = kelement; params[nparams].k_theta = values.next_double(); params[nparams].theta0 = values.next_double(); + if (variant == SCREENED) + params[nparams].rho = values.next_double(); + else + params[nparams].rho = 1.0; // dummy value params[nparams].cutoff = values.next_double(); if (unit_convert) params[nparams].k_theta *= conversion_factor; @@ -276,9 +282,9 @@ void PairNb3bHarmonic::read_file(char *file) error->one(FLERR, e.what()); } - if (params[nparams].k_theta < 0.0 || params[nparams].theta0 < 0.0 || - params[nparams].cutoff < 0.0) - error->one(FLERR, "Illegal nb3b/harmonic parameter"); + if ((params[nparams].k_theta < 0.0) || (params[nparams].theta0 < 0.0) || + (params[nparams].cutoff < 0.0) || (params[nparams].rho <= 0.0)) + error->one(FLERR, "Illegal {} parameter", substyle[variant]); nparams++; } diff --git a/src/MANYBODY/pair_nb3b_harmonic.h b/src/MANYBODY/pair_nb3b_harmonic.h index c92b65950f..9e4b717780 100644 --- a/src/MANYBODY/pair_nb3b_harmonic.h +++ b/src/MANYBODY/pair_nb3b_harmonic.h @@ -35,23 +35,26 @@ class PairNb3bHarmonic : public Pair { void init_style() override; static constexpr int NPARAMS_PER_LINE = 6; + enum { HARMONIC = 0, SCREENED }; protected: struct Param { double k_theta, theta0, cutoff; + double rho; // added for screened harmonic style double cut, cutsq; int ielement, jelement, kelement; }; double cutmax; // max cutoff for all elements Param *params; // parameter set for an I-J-K interaction + int variant; void allocate(); void read_file(char *); void setup_params(); void twobody(Param *, double, double &, int, double &); - void threebody(Param *, Param *, Param *, double, double, double *, double *, double *, double *, - int, double &); + virtual void threebody(Param *, Param *, Param *, double, double, double *, double *, double *, + double *, int, double &); }; } // namespace LAMMPS_NS diff --git a/src/MANYBODY/pair_nb3b_screened.cpp b/src/MANYBODY/pair_nb3b_screened.cpp new file mode 100644 index 0000000000..48ca91c6db --- /dev/null +++ b/src/MANYBODY/pair_nb3b_screened.cpp @@ -0,0 +1,89 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Federica Lodesani + (based on nb3b harmonic by Todd R. Zeitler and Stillinger-Weber pair style) +------------------------------------------------------------------------- */ + +#include "pair_nb3b_screened.h" + +#include + +#define SMALL 0.001 + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +PairNb3bScreened::PairNb3bScreened(LAMMPS *lmp) : PairNb3bHarmonic(lmp) +{ + variant = SCREENED; +} + +/* ---------------------------------------------------------------------- */ + +void PairNb3bScreened::threebody(Param *paramij, Param *paramik, Param *paramijk, double rsq1, + double rsq2, double *delr1, double *delr2, double *fj, double *fk, + int eflag, double &eng) +{ + double dtheta, tk; + double r1, r2, c, s, a, a11, a12, a22; + double scr, t00, rho1inv, rho2inv; + double ratio1, ratio2; + + // angle (cos and sin) + + r1 = sqrt(rsq1); + r2 = sqrt(rsq2); + + c = delr1[0] * delr2[0] + delr1[1] * delr2[1] + delr1[2] * delr2[2]; + c /= r1 * r2; + + if (c > 1.0) c = 1.0; + if (c < -1.0) c = -1.0; + + s = sqrt(1.0 - c * c); + if (s < SMALL) s = SMALL; + s = 1.0 / s; + + // force & energy + + // Harmonic function multiplied by a screening function + // + // Uijk=k/2(theta-theta0)**2 * exp[-(rij/rhoij+rik/rhoik)] + // + rho1inv = paramij->rho; + rho2inv = paramik->rho; + scr = exp(-r1 * rho1inv - r2 * rho2inv); + + dtheta = acos(c) - paramijk->theta0; + tk = paramijk->k_theta * dtheta * scr; + t00 = tk * dtheta; + + if (eflag) eng = t00; + + a = -2.0 * tk * s; + a11 = a * c / rsq1; + a12 = -a / (r1 * r2); + a22 = a * c / rsq2; + ratio1 = rho1inv / r1; + ratio2 = rho2inv / r2; + + fj[0] = a11 * delr1[0] + a12 * delr2[0] + t00 * ratio1 * delr1[0]; + fj[1] = a11 * delr1[1] + a12 * delr2[1] + t00 * ratio1 * delr1[1]; + fj[2] = a11 * delr1[2] + a12 * delr2[2] + t00 * ratio1 * delr1[2]; + fk[0] = a22 * delr2[0] + a12 * delr1[0] + t00 * ratio2 * delr2[0]; + fk[1] = a22 * delr2[1] + a12 * delr1[1] + t00 * ratio2 * delr2[1]; + fk[2] = a22 * delr2[2] + a12 * delr1[2] + t00 * ratio2 * delr2[2]; +} diff --git a/src/MANYBODY/pair_nb3b_screened.h b/src/MANYBODY/pair_nb3b_screened.h new file mode 100644 index 0000000000..22286c7cb4 --- /dev/null +++ b/src/MANYBODY/pair_nb3b_screened.h @@ -0,0 +1,39 @@ +/* -*- c++ -*- --------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef PAIR_CLASS +// clang-format off +PairStyle(nb3b/screened,PairNb3bScreened); +// clang-format on +#else + +#ifndef LMP_PAIR_NB3B_SCREENED_H +#define LMP_PAIR_NB3B_SCREENED_H + +#include "pair_nb3b_harmonic.h" + +namespace LAMMPS_NS { + +class PairNb3bScreened : public PairNb3bHarmonic { + public: + PairNb3bScreened(class LAMMPS *); + + protected: + void threebody(Param *, Param *, Param *, double, double, double *, double *, double *, double *, + int, double &) override; +}; + +} // namespace LAMMPS_NS + +#endif +#endif From 5674786acd9574a52b9149966043c246baddc7c0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 30 Oct 2023 15:25:06 -0400 Subject: [PATCH 100/204] add feature to comment out and uncomment lines and selections from context menu --- tools/lammps-gui/CMakeLists.txt | 2 +- tools/lammps-gui/codeeditor.cpp | 96 +++++++++++++++++++++++++++++++-- tools/lammps-gui/codeeditor.h | 4 ++ 3 files changed, 98 insertions(+), 4 deletions(-) diff --git a/tools/lammps-gui/CMakeLists.txt b/tools/lammps-gui/CMakeLists.txt index e83db05fdd..caae722865 100644 --- a/tools/lammps-gui/CMakeLists.txt +++ b/tools/lammps-gui/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.16) -project(lammps-gui VERSION 1.5.9 LANGUAGES CXX) +project(lammps-gui VERSION 1.5.10 LANGUAGES CXX) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) diff --git a/tools/lammps-gui/codeeditor.cpp b/tools/lammps-gui/codeeditor.cpp index 672c009c35..ab8007805a 100644 --- a/tools/lammps-gui/codeeditor.cpp +++ b/tools/lammps-gui/codeeditor.cpp @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -424,7 +425,7 @@ void CodeEditor::setVarNameList() LammpsWrapper *lammps = &qobject_cast(parent())->lammps; int nvar = lammps->id_count("variable"); - constexpr int BUFLEN = 256; + constexpr int BUFLEN = 256; char buffer[BUFLEN]; for (int i = 0; i < nvar; ++i) { memset(buffer, 0, BUFLEN); @@ -683,17 +684,34 @@ void CodeEditor::contextMenuEvent(QContextMenuEvent *event) QString page, help; find_help(page, help); - // print augmented context menu if an entry was found auto *menu = createStandardContextMenu(); menu->addSeparator(); + if (textCursor().hasSelection()) { + auto action1 = menu->addAction("Comment out selection"); + action1->setIcon(QIcon(":/icons/expand-text.png")); + connect(action1, &QAction::triggered, this, &CodeEditor::comment_selection); + auto action2 = menu->addAction("Uncomment selection"); + action2->setIcon(QIcon(":/icons/expand-text.png")); + connect(action2, &QAction::triggered, this, &CodeEditor::uncomment_selection); + } else { + auto action1 = menu->addAction("Comment out line"); + action1->setIcon(QIcon(":/icons/expand-text.png")); + connect(action1, &QAction::triggered, this, &CodeEditor::comment_line); + auto action2 = menu->addAction("Uncomment line"); + action2->setIcon(QIcon(":/icons/expand-text.png")); + connect(action2, &QAction::triggered, this, &CodeEditor::uncomment_line); + } + menu->addSeparator(); + + // print augmented context menu if an entry was found if (!help.isEmpty()) { auto action = menu->addAction(QString("Display available completions for '%1'").arg(help)); action->setIcon(QIcon(":/icons/expand-text.png")); connect(action, &QAction::triggered, this, &CodeEditor::runCompletion); + menu->addSeparator(); } if (!page.isEmpty()) { - menu->addSeparator(); auto action = menu->addAction(QString("Reformat '%1' command").arg(help)); action->setIcon(QIcon(":/icons/format-indent-less-3.png")); connect(action, &QAction::triggered, this, &CodeEditor::reformatCurrentLine); @@ -741,6 +759,78 @@ void CodeEditor::reformatCurrentLine() } } +void CodeEditor::comment_line() +{ + auto cursor = textCursor(); + cursor.movePosition(QTextCursor::StartOfLine); + cursor.insertText("#"); +} + +void CodeEditor::comment_selection() +{ + auto cursor = textCursor(); + auto text = cursor.selection().toPlainText(); + auto lines = text.split('\n'); + QString newtext; + for (auto line : lines) { + newtext.append('#'); + newtext.append(line); + newtext.append('\n'); + } + if (newtext.isEmpty()) newtext = "#\n"; + cursor.insertText(newtext); + setTextCursor(cursor); +} + +void CodeEditor::uncomment_selection() +{ + auto cursor = textCursor(); + auto text = cursor.selection().toPlainText(); + auto lines = text.split('\n'); + QString newtext; + for (auto line : lines) { + QString newline; + bool start = true; + for (auto letter : line) { + if (start && (letter == '#')) { + start = false; + continue; + } + if (start && !letter.isSpace()) start = false; + newline.append(letter); + } + newtext.append(newline); + newtext.append('\n'); + } + cursor.insertText(newtext); + setTextCursor(cursor); +} + +void CodeEditor::uncomment_line() +{ + auto cursor = textCursor(); + auto text = cursor.block().text(); + QString newtext; + bool start = true; + for (auto letter : text) { + if (start && (letter == '#')) { + start = false; + continue; + } + if (start && !letter.isSpace()) start = false; + newtext.append(letter); + } + + // perform edit but only if text has changed + if (QString::compare(text, newtext)) { + cursor.beginEditBlock(); + cursor.movePosition(QTextCursor::StartOfLine); + cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor, 1); + cursor.insertText(newtext); + cursor.endEditBlock(); + } +} + void CodeEditor::runCompletion() { QAbstractItemView *popup = nullptr; diff --git a/tools/lammps-gui/codeeditor.h b/tools/lammps-gui/codeeditor.h index 703b2ffd3c..744953af06 100644 --- a/tools/lammps-gui/codeeditor.h +++ b/tools/lammps-gui/codeeditor.h @@ -81,6 +81,10 @@ private slots: void reformatCurrentLine(); void runCompletion(); void insertCompletedCommand(const QString &completion); + void comment_selection(); + void uncomment_selection(); + void comment_line(); + void uncomment_line(); private: QWidget *lineNumberArea; From 14f8d9989438b073b30dd1d63baf20e53cc490dd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 30 Oct 2023 23:21:46 -0400 Subject: [PATCH 101/204] update ReaxFF force field info and remove references to reax and reax/c pair styles --- doc/src/pair_reaxff.rst | 15 ++++++++------- potentials/README.reax | 22 +++++++--------------- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/doc/src/pair_reaxff.rst b/doc/src/pair_reaxff.rst index 067eb3afc3..d28e15b0a2 100644 --- a/doc/src/pair_reaxff.rst +++ b/doc/src/pair_reaxff.rst @@ -72,8 +72,7 @@ from LAMMPS after the 12 December 2018 version. LAMMPS provides several different versions of ffield.reax in its potentials dir, each called potentials/ffield.reax.label. These are -documented in potentials/README.reax. The default ffield.reax -contains parameterizations for the following elements: C, H, O, N. +documented in potentials/README.reax. The format of these files is identical to that used originally by van Duin. We have tested the accuracy of *pair_style reaxff* potential @@ -110,12 +109,14 @@ control variable. The format of the control file is described below. not agree. Examples using *pair_style reaxff* are provided in the examples/reax -subdirectory. +directory and its subdirectories. -Use of this pair style requires that a charge be defined for every -atom. See the :doc:`atom_style ` and -:doc:`read_data ` commands for details on how to specify -charges. +Use of this pair style requires using an :doc:`atom_style ` +that includes a per-atom charge property *or* using +:doc:`fix property/atom q `. Charges can be set +via :doc:`read_data ` or :doc:`set `. Using an initial +charge that is close to the result of charge equilibration will speed +up that process. The ReaxFF parameter files provided were created using a charge equilibration (QEq) model for handling the electrostatic interactions. diff --git a/potentials/README.reax b/potentials/README.reax index d23d3bfd59..5854c6e95f 100644 --- a/potentials/README.reax +++ b/potentials/README.reax @@ -1,14 +1,6 @@ Different parameterization of the ReaxFF potential have been used in different published works. A small number of these are provided in the -LAMMPS potentials directory, in the form of ffield.reax.[label] -files. These can be used with either the pair_styles reax and reax/c. - -For pair_style reax, the command should be as follows: - -# reax args: hbcut hbnewflag tripflag precision -pair_style reax 6.0 0 1 1.0e-6 - -except where described below. +LAMMPS potentials directory, in the form of ffield.reax.label files. The mapping from parameter files to publication is as follows: @@ -25,8 +17,7 @@ J. Budzien, A. P. Thompson, and S. V. Zybin, "Reactive Molecular Dynamics Simulations of Shock Through a Single Crystal of Pentaerythritol Tetranitrate," J. Phys. Chem., 113 13142 (2009). -ffield.reax.rdx: nitramines (RDX/HMX/TATB/PETN) -This version requires hbnewflag = 1 +ffield.reax.rdx: nitramines (RDX/HMX/TATB/PETN) Strachan, A.; et al. Phys. Rev. Lett. 2003, 91, 098301 Zhang, L., van Duin, A.C.T., Zybin, S. and Goddard, W.A. (2009) Carbon @@ -37,7 +28,6 @@ Reactive Molecular Dynamics Simulations, Journal of Physical Chemistry B 113, 10619-10640 ffield.reax.cho: Reactive MD-force field c/h/o combustion force field -This version requires tripflag = 0 and hbnewflag = 1 "ReaxFF Reactive Force Field for Molecular Dynamics Simulations of Hydrocarbon Oxidation" Kimberly Chenoweth, Adri C. T. van Duin, and @@ -58,8 +48,10 @@ M.; van Duin, A. C. T.; Kubicki, J. D. J. Phys. Chem. A 2010, 114, ffield.reax.V_O_C_H: Reactive MD-force field: V/O/C/H potential: Chenoweth, K.; et al. J. Phys. Chem. C, 2008, 112, 14645-14654. -ffield.reax.ZnOH: Reactive MD-force field: water/zinc: Raymand, D.; -van Duin, A. C. T.; Spangberg, D.; Goddard, W. A.; Hermansson, K. +ffield.reax.ZnOH: Reactive MD-force field: water/zinc: Raymand, D.; +van Duin, A. C. T.; Spangberg, D.; Goddard, W. A.; Hermansson, K. Surface Science 2010, 604, 9-10, 741-752. -ffield.reax.lg: Reactive MD-force field: nitramines (RDX/HMX/TATB/PETN))+lg: L. Liu, Y. Liu, S. V. Zybin, H. Sun and W. A. Goddard, Journal of Physical Chemistry A, 115, 11016-11022 (2011). +ffield.reax.lg: Reactive MD-force field: nitramines (RDX/HMX/TATB/PETN))+lg: +L. Liu, Y. Liu, S. V. Zybin, H. Sun and W. A. Goddard, Journal of +Physical Chemistry A, 115, 11016-11022 (2011). From e04dfc55bd6b819ec66c1f4c5b3c87a11a6ab268 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 30 Oct 2023 23:24:54 -0400 Subject: [PATCH 102/204] replace UTF-8 characters with their ASCII counterparts --- doc/src/fix_deposit.rst | 2 +- doc/src/fix_pour.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/fix_deposit.rst b/doc/src/fix_deposit.rst index 08711001c5..2fb95c5630 100644 --- a/doc/src/fix_deposit.rst +++ b/doc/src/fix_deposit.rst @@ -291,7 +291,7 @@ operation of the fix continues in an uninterrupted fashion. None of the :doc:`fix_modify ` options are relevant to this fix. This fix computes a global scalar, which can be accessed by various output commands. The scalar is the cumulative number of insertions. The -scalar value calculated by this fix is “intensive”. No parameter of this +scalar value calculated by this fix is "intensive". No parameter of this fix can be used with the *start/stop* keywords of the :doc:`run ` command. This fix is not invoked during :doc:`energy minimization `. diff --git a/doc/src/fix_pour.rst b/doc/src/fix_pour.rst index 0ad369bf29..3b4bb5c723 100644 --- a/doc/src/fix_pour.rst +++ b/doc/src/fix_pour.rst @@ -247,7 +247,7 @@ appropriately. None of the :doc:`fix_modify ` options are relevant to this fix. This fix computes a global scalar, which can be accessed by various output commands. The scalar is the cumulative number of insertions. The -scalar value calculated by this fix is “intensive”. No parameter +scalar value calculated by this fix is "intensive". No parameter of this fix can be used with the *start/stop* keywords of the :doc:`run ` command. This fix is not invoked during :doc:`energy minimization `. From 41fb0a57007f0f0cc6fb80f046015505a9a1a56a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 31 Oct 2023 09:34:32 -0400 Subject: [PATCH 103/204] make README consistent with potential file and implementation --- examples/nb3b/README.nb3b.screened | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/nb3b/README.nb3b.screened b/examples/nb3b/README.nb3b.screened index c0859c035a..686b329846 100644 --- a/examples/nb3b/README.nb3b.screened +++ b/examples/nb3b/README.nb3b.screened @@ -27,11 +27,11 @@ parameters for Si permutations appear but they are not employed in the current case. # i j k K theta0 rho cutoff -O P P 65.0 109.47 1.0 3.3 -O P Si 120.0 109.47 1.0 0.000 +O P P 32.5 109.47 1.0 3.3 +O P Si 60.0 109.47 1.0 0.000 O P O 0.000 0.000 1.0 0.000 -O Si P 120.0 109.47 1.0 0.000 -O Si Si 25.0 109.47 1.0 3.3 +O Si P 60.0 109.47 1.0 0.000 +O Si Si 12.5 109.47 1.0 3.3 (...) The rho value must be always higher than 0.0. Cutoff and rho are extracted From a4064e5202b2e2d463d11646d1655e99f87358a9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 31 Oct 2023 09:37:38 -0400 Subject: [PATCH 104/204] update code owners for new pair style --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9b316fbeb9..b6892aa4ee 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -61,6 +61,7 @@ src/GPU/pair_vashishta_gpu.* @andeplane src/KOKKOS/pair_vashishta_kokkos.* @andeplane src/MANYBODY/pair_vashishta_table.* @andeplane src/MANYBODY/pair_atm.* @sergeylishchuk +src/MANYBODY/pair_nb3b_screened.* @flodesani src/REPLICA/*_grem.* @dstelter92 src/EXTRA-COMPUTE/compute_stress_mop*.* @RomainVermorel src/EXTRA-COMPUTE/compute_born_matrix.* @Bibobu @athomps From ac527e3d3ff823d561bc75eb3b9fcf9880d8181a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 31 Oct 2023 10:07:53 -0400 Subject: [PATCH 105/204] store invrho instead of rho --- src/MANYBODY/pair_nb3b_harmonic.cpp | 16 ++++++++++------ src/MANYBODY/pair_nb3b_harmonic.h | 2 +- src/MANYBODY/pair_nb3b_screened.cpp | 4 ++-- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/MANYBODY/pair_nb3b_harmonic.cpp b/src/MANYBODY/pair_nb3b_harmonic.cpp index d1ba719906..5bc930c186 100644 --- a/src/MANYBODY/pair_nb3b_harmonic.cpp +++ b/src/MANYBODY/pair_nb3b_harmonic.cpp @@ -37,7 +37,7 @@ using MathConst::MY_PI; #define DELTA 4 #define SMALL 0.001 -static const char *substyle[] = { "nb3n/harmonic", "nb3b/screened" }; +static const char *substyle[] = {"nb3n/harmonic", "nb3b/screened"}; /* ---------------------------------------------------------------------- */ @@ -271,10 +271,14 @@ void PairNb3bHarmonic::read_file(char *file) params[nparams].kelement = kelement; params[nparams].k_theta = values.next_double(); params[nparams].theta0 = values.next_double(); - if (variant == SCREENED) - params[nparams].rho = values.next_double(); - else - params[nparams].rho = 1.0; // dummy value + params[nparams].invrho = 1.0; // dummy value + if (variant == SCREENED) { + double rho = values.next_double(); + if (rho > 0.0) + params[nparams].invrho = 1.0 / rho; + else + throw TokenizerException("Incorrect value for potential parameter", "rho"); + } params[nparams].cutoff = values.next_double(); if (unit_convert) params[nparams].k_theta *= conversion_factor; @@ -283,7 +287,7 @@ void PairNb3bHarmonic::read_file(char *file) } if ((params[nparams].k_theta < 0.0) || (params[nparams].theta0 < 0.0) || - (params[nparams].cutoff < 0.0) || (params[nparams].rho <= 0.0)) + (params[nparams].cutoff < 0.0)) error->one(FLERR, "Illegal {} parameter", substyle[variant]); nparams++; diff --git a/src/MANYBODY/pair_nb3b_harmonic.h b/src/MANYBODY/pair_nb3b_harmonic.h index 9e4b717780..e69668b5bd 100644 --- a/src/MANYBODY/pair_nb3b_harmonic.h +++ b/src/MANYBODY/pair_nb3b_harmonic.h @@ -40,7 +40,7 @@ class PairNb3bHarmonic : public Pair { protected: struct Param { double k_theta, theta0, cutoff; - double rho; // added for screened harmonic style + double invrho; // for screened harmonic style double cut, cutsq; int ielement, jelement, kelement; }; diff --git a/src/MANYBODY/pair_nb3b_screened.cpp b/src/MANYBODY/pair_nb3b_screened.cpp index 48ca91c6db..d66945d563 100644 --- a/src/MANYBODY/pair_nb3b_screened.cpp +++ b/src/MANYBODY/pair_nb3b_screened.cpp @@ -63,8 +63,8 @@ void PairNb3bScreened::threebody(Param *paramij, Param *paramik, Param *paramijk // // Uijk=k/2(theta-theta0)**2 * exp[-(rij/rhoij+rik/rhoik)] // - rho1inv = paramij->rho; - rho2inv = paramik->rho; + rho1inv = paramij->invrho; + rho2inv = paramik->invrho; scr = exp(-r1 * rho1inv - r2 * rho2inv); dtheta = acos(c) - paramijk->theta0; From 4f3162888b38e485454798a5063434773e61bfbd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 31 Oct 2023 12:55:49 -0400 Subject: [PATCH 106/204] remove debug code --- src/neighbor.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/neighbor.cpp b/src/neighbor.cpp index 46d46b7440..8d12edeef2 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -2292,9 +2292,7 @@ int Neighbor::decide() if (must_check) { bigint n = update->ntimestep; if (restart_check && n == output->next_restart) return 1; - fprintf(stderr, "step %ld num fixes: %d\n", update->ntimestep, fixchecklist.size()); for (auto &ifix : fixchecklist) { - fprintf(stderr, " fix: %s %s next %ld\n", ifix->id, ifix->style, ifix->next_reneighbor); if (n == ifix->next_reneighbor) return 1; } } From 74efe0a00c317b474049b948ff9d7c14f93d0dc1 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Tue, 31 Oct 2023 16:02:49 -0600 Subject: [PATCH 107/204] add comm of ghost atom coords to compute cluster/atom and aggregate/atom --- src/compute_aggregate_atom.cpp | 5 +++++ src/compute_cluster_atom.cpp | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/compute_aggregate_atom.cpp b/src/compute_aggregate_atom.cpp index e68062b73e..54da23c302 100644 --- a/src/compute_aggregate_atom.cpp +++ b/src/compute_aggregate_atom.cpp @@ -110,6 +110,11 @@ void ComputeAggregateAtom::compute_peratom() vector_atom = aggregateID; } + // communicate coords for ghost atoms if box can change, e.g. fix deform + // this ensures ghost atom coords are current + + comm->forward_comm(); + // invoke full neighbor list (will copy or build if necessary) // on the first step of a run, set preflag to one in neighbor->build_one(...) diff --git a/src/compute_cluster_atom.cpp b/src/compute_cluster_atom.cpp index ae44fbcd37..284a5dd23a 100644 --- a/src/compute_cluster_atom.cpp +++ b/src/compute_cluster_atom.cpp @@ -99,6 +99,11 @@ void ComputeClusterAtom::compute_peratom() vector_atom = clusterID; } + // communicate coords for ghost atoms if box can change, e.g. fix deform + // this ensures ghost atom coords are current + + comm->forward_comm(); + // invoke full neighbor list (will copy or build if necessary) // on the first step of a run, set preflag to one in neighbor->build_one(...) From da597880a56763bab75499420a4b29476805dba9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 1 Nov 2023 05:11:43 -0400 Subject: [PATCH 108/204] add code to avoid deadlock --- src/compute_aggregate_atom.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/compute_aggregate_atom.cpp b/src/compute_aggregate_atom.cpp index 54da23c302..5a489092b7 100644 --- a/src/compute_aggregate_atom.cpp +++ b/src/compute_aggregate_atom.cpp @@ -35,6 +35,7 @@ using namespace LAMMPS_NS; +static constexpr int MAXLOOP = 100; /* ---------------------------------------------------------------------- */ ComputeAggregateAtom::ComputeAggregateAtom(LAMMPS *lmp, int narg, char **arg) : @@ -163,8 +164,11 @@ void ComputeAggregateAtom::compute_peratom() int change, done, anychange; - while (true) { + int counter = 0; + // stop after MAXLOOP iterations + while (counter < MAXLOOP) { comm->forward_comm(this); + ++counter; // reverse communication when bonds are not stored on every processor @@ -223,6 +227,8 @@ void ComputeAggregateAtom::compute_peratom() MPI_Allreduce(&change, &anychange, 1, MPI_INT, MPI_MAX, world); if (!anychange) break; } + if ((comm->me == 0) && (counter >= MAXLOOP)) + error->warning(FLERR, "Compute aggregate/atom did not converge after {} iterations", MAXLOOP); } /* ---------------------------------------------------------------------- */ From 925d006d191b81fa41f417690eee2d86ecd6451b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 2 Nov 2023 13:43:37 -0400 Subject: [PATCH 109/204] join wrapped strings --- src/read_dump.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/read_dump.cpp b/src/read_dump.cpp index 4a64a8be1d..f94e31e1d1 100644 --- a/src/read_dump.cpp +++ b/src/read_dump.cpp @@ -324,8 +324,7 @@ bigint ReadDump::seek(bigint nrequest, int exact) } if (eofflag) - error->one(FLERR,"Read dump parallel files " - "do not all have same timestep"); + error->one(FLERR,"Read dump parallel files do not all have same timestep"); } } @@ -426,8 +425,7 @@ bigint ReadDump::next(bigint ncurrent, bigint nlast, int nevery, int nskip) } if (eofflag) - error->one(FLERR,"Read dump parallel files " - "do not all have same timestep"); + error->one(FLERR,"Read dump parallel files do not all have same timestep"); } } From 8c3cda0aeae5361c595dfc4efe55aec9e9ee3014 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Thu, 2 Nov 2023 13:05:18 -0600 Subject: [PATCH 110/204] Fix bug in fix_dt_reset_kokkos --- src/KOKKOS/fix_dt_reset_kokkos.cpp | 83 +++++++++++++----------------- 1 file changed, 36 insertions(+), 47 deletions(-) diff --git a/src/KOKKOS/fix_dt_reset_kokkos.cpp b/src/KOKKOS/fix_dt_reset_kokkos.cpp index 4c7545cee0..0e8d0d985c 100644 --- a/src/KOKKOS/fix_dt_reset_kokkos.cpp +++ b/src/KOKKOS/fix_dt_reset_kokkos.cpp @@ -52,14 +52,6 @@ void FixDtResetKokkos::init() { FixDtReset::init(); - k_emax = Kokkos::DualView("FixDtResetKokkos:gamma", 1); - - k_emax.h_view(0) = emax; - - - k_emax.template modify(); - k_emax.template sync(); - if (utils::strmatch(update->integrate_style,"^respa")) error->all(FLERR,"Cannot (yet) use respa with Kokkos"); } @@ -95,41 +87,38 @@ void FixDtResetKokkos::end_of_step() atomKK->modified(execution_space, F_MASK); - if (minbound) dt = MAX(dt, tmin); - if (maxbound) dt = MIN(dt, tmax); + if (minbound) dt = MAX(dt, tmin); + if (maxbound) dt = MIN(dt, tmax); - // if timestep didn't change, just return - // else reset update->dt and other classes that depend on it - // rRESPA, pair style, fixes + // if timestep didn't change, just return + // else reset update->dt and other classes that depend on it + // rRESPA, pair style, fixes - if (dt == update->dt) return; + if (dt == update->dt) return; - laststep = update->ntimestep; + laststep = update->ntimestep; - // calls to other classes that need to know timestep size changed - // similar logic is in Input::timestep() - - update->update_time(); - update->dt = dt; - update->dt_default = 0; - if (force->pair) force->pair->reset_dt(); - for (auto &ifix : modify->get_fix_list()) ifix->reset_dt(); - output->reset_dt(); + // calls to other classes that need to know timestep size changed + // similar logic is in Input::timestep() + update->update_time(); + update->dt = dt; + update->dt_default = 0; + if (force->pair) force->pair->reset_dt(); + for (auto &ifix : modify->get_fix_list()) ifix->reset_dt(); + output->reset_dt(); } /* ---------------------------------------------------------------------- */ template KOKKOS_INLINE_FUNCTION -void FixDtResetKokkos::operator()(TagFixDtResetMass, const int &i, double &k_dt) const { +void FixDtResetKokkos::operator()(TagFixDtResetMass, const int &i, double &dt_min) const { - double dtv, dtf, dte, dtsq; + double dt, dtv, dtf, dte, dtsq; double vsq, fsq, massinv; double delx, dely, delz, delr; - double emax = k_emax.d_view(0); - if (mask[i] & groupbit) { massinv = 1.0 / mass[type[i]]; @@ -138,32 +127,31 @@ void FixDtResetKokkos::operator()(TagFixDtResetMass, const int &i, d dtv = dtf = dte = BIG; if (vsq > 0.0) dtv = xmax / sqrt(vsq); if (fsq > 0.0) dtf = sqrt(2.0 * xmax / (ftm2v * sqrt(fsq) * massinv)); - k_dt = MIN(dtv, dtf); + dt = MIN(dtv, dtf); if ((emax > 0.0) && (fsq * vsq > 0.0)) { dte = emax / sqrt(fsq * vsq) / sqrt(ftm2v * mvv2e); - k_dt = MIN(dt, dte); + dt = MIN(dt, dte); } - dtsq = k_dt * k_dt; - delx = k_dt * v(i,0) + 0.5 * dtsq * massinv * f(i,0) * ftm2v; - dely = k_dt * v(i,1) + 0.5 * dtsq * massinv * f(i,1) * ftm2v; - delz = k_dt * v(i,2) + 0.5 * dtsq * massinv * f(i,2) * ftm2v; + dtsq = dt * dt; + delx = dt * v(i,0) + 0.5 * dtsq * massinv * f(i,0) * ftm2v; + dely = dt * v(i,1) + 0.5 * dtsq * massinv * f(i,1) * ftm2v; + delz = dt * v(i,2) + 0.5 * dtsq * massinv * f(i,2) * ftm2v; delr = sqrt(delx * delx + dely * dely + delz * delz); - if (delr > xmax) k_dt *= xmax / delr; + if (delr > xmax) dt *= xmax / delr; + dt_min = MIN(dt_min,dt); } - } +} /* ---------------------------------------------------------------------- */ template KOKKOS_INLINE_FUNCTION -void FixDtResetKokkos::operator()(TagFixDtResetRMass, const int &i, double &k_dt) const { +void FixDtResetKokkos::operator()(TagFixDtResetRMass, const int &i, double &dt_min) const { - double dtv, dtf, dte, dtsq; + double dt, dtv, dtf, dte, dtsq; double vsq, fsq, massinv; double delx, dely, delz, delr; - double emax = k_emax.d_view(0); - if (mask[i] & groupbit) { massinv = 1.0 / rmass[i]; @@ -172,17 +160,18 @@ void FixDtResetKokkos::operator()(TagFixDtResetRMass, const int &i, dtv = dtf = dte = BIG; if (vsq > 0.0) dtv = xmax / sqrt(vsq); if (fsq > 0.0) dtf = sqrt(2.0 * xmax / (ftm2v * sqrt(fsq) * massinv)); - k_dt = MIN(dtv, dtf); + dt = MIN(dtv, dtf); if ((emax > 0.0) && (fsq * vsq > 0.0)) { dte = emax / sqrt(fsq * vsq) / sqrt(ftm2v * mvv2e); - k_dt = MIN(dt, dte); + dt = MIN(dt, dte); } - dtsq = k_dt * k_dt; - delx = k_dt * v(i,0) + 0.5 * dtsq * massinv * f(i,0) * ftm2v; - dely = k_dt * v(i,1) + 0.5 * dtsq * massinv * f(i,1) * ftm2v; - delz = k_dt * v(i,2) + 0.5 * dtsq * massinv * f(i,2) * ftm2v; + dtsq = dt * dt; + delx = dt * v(i,0) + 0.5 * dtsq * massinv * f(i,0) * ftm2v; + dely = dt * v(i,1) + 0.5 * dtsq * massinv * f(i,1) * ftm2v; + delz = dt * v(i,2) + 0.5 * dtsq * massinv * f(i,2) * ftm2v; delr = sqrt(delx * delx + dely * dely + delz * delz); - if (delr > xmax) k_dt *= xmax / delr; + if (delr > xmax) dt *= xmax / delr; + dt_min = MIN(dt_min,dt); } } From 6102c2a46047236a8404c90bdcd6b8c8e088c491 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Thu, 2 Nov 2023 13:10:27 -0600 Subject: [PATCH 111/204] Forces are not modified --- src/KOKKOS/fix_dt_reset_kokkos.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/KOKKOS/fix_dt_reset_kokkos.cpp b/src/KOKKOS/fix_dt_reset_kokkos.cpp index 0e8d0d985c..6e7709ace1 100644 --- a/src/KOKKOS/fix_dt_reset_kokkos.cpp +++ b/src/KOKKOS/fix_dt_reset_kokkos.cpp @@ -85,8 +85,6 @@ void FixDtResetKokkos::end_of_step() MPI_Allreduce(MPI_IN_PLACE, &dt, 1, MPI_DOUBLE, MPI_MIN, world); - atomKK->modified(execution_space, F_MASK); - if (minbound) dt = MAX(dt, tmin); if (maxbound) dt = MIN(dt, tmax); From a0f7612f13f60c4fe377bf19c4abbf5a1a5fa4c5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Nov 2023 03:25:08 -0400 Subject: [PATCH 112/204] encode system box geometry into a class member --- src/read_dump.cpp | 70 +++++++++++++++++++++++++++++------------------ src/read_dump.h | 3 ++ 2 files changed, 46 insertions(+), 27 deletions(-) diff --git a/src/read_dump.cpp b/src/read_dump.cpp index f94e31e1d1..12323fe776 100644 --- a/src/read_dump.cpp +++ b/src/read_dump.cpp @@ -48,6 +48,19 @@ ReadDump::ReadDump(LAMMPS *lmp) : nfield = 0; readerstyle = utils::strdup("native"); + scaled = wrapped = 0; + + boxgeom = UNKNOWN; + if (domain->triclinic) + boxgeom |= TRICLINIC; + else + boxgeom |= ORTHOGONAL; + + if (domain->dimension == 2) + boxgeom |= TWO_D; + else + boxgeom |= THREE_D; + nreader = 0; clustercomm = MPI_COMM_NULL; filereader = 0; @@ -185,24 +198,27 @@ void ReadDump::setup_reader(int narg, char **arg) // multiproc_nfile < nprocs: multiproc_nfile readers, create clusters // see read_dump.h for explanation of these variables + const auto &me = comm->me; + const auto &nprocs = comm->nprocs; + if (multiproc == 0) { nreader = 1; firstfile = -1; - MPI_Comm_dup(world,&clustercomm); - } else if (multiproc_nfile >= comm->nprocs) { - firstfile = static_cast ((bigint) comm->me * multiproc_nfile/comm->nprocs); - int lastfile = static_cast ((bigint) (comm->me+1) * multiproc_nfile/comm->nprocs); + MPI_Comm_dup(world, &clustercomm); + } else if (multiproc_nfile >= nprocs) { + firstfile = static_cast ((bigint) me * multiproc_nfile/nprocs); + int lastfile = static_cast ((bigint) (me+1) * multiproc_nfile/nprocs); nreader = lastfile - firstfile; - MPI_Comm_split(world,comm->me,0,&clustercomm); - } else if (multiproc_nfile < comm->nprocs) { + MPI_Comm_split(world, me, 0, &clustercomm); + } else if (multiproc_nfile < nprocs) { nreader = 1; - int icluster = static_cast ((bigint) comm->me * multiproc_nfile/comm->nprocs); + int icluster = static_cast ((bigint) me * multiproc_nfile/nprocs); firstfile = icluster; - MPI_Comm_split(world,icluster,0,&clustercomm); + MPI_Comm_split(world, icluster, 0, &clustercomm); } - MPI_Comm_rank(clustercomm,&me_cluster); - MPI_Comm_size(clustercomm,&nprocs_cluster); + MPI_Comm_rank(clustercomm, &me_cluster); + MPI_Comm_size(clustercomm, &nprocs_cluster); if (me_cluster == 0) filereader = 1; else filereader = 0; @@ -230,9 +246,9 @@ void ReadDump::setup_reader(int narg, char **arg) // unrecognized style - } else error->all(FLERR,utils::check_packages_for_style("reader",readerstyle,lmp)); + } else error->all(FLERR, utils::check_packages_for_style("reader", readerstyle, lmp)); - if (utils::strmatch(readerstyle,"^adios")) { + if (utils::strmatch(readerstyle, "^adios")) { // everyone is a reader with adios parallel = 1; filereader = 1; @@ -242,7 +258,7 @@ void ReadDump::setup_reader(int narg, char **arg) if (narg > 0 && filereader) for (int i = 0; i < nreader; i++) - readers[i]->settings(narg,arg); + readers[i]->settings(narg, arg); } /* ---------------------------------------------------------------------- @@ -502,8 +518,8 @@ void ReadDump::header(int fieldinfo) if (boxflag) { if (!boxinfo) error->all(FLERR,"No box information in dump, must use 'box no'"); - else if ((triclinic_snap && !domain->triclinic) || - (!triclinic_snap && domain->triclinic)) + else if ((triclinic_snap && (boxgeom & ORTHOGONAL)) || + (!triclinic_snap && (boxgeom & TRICLINIC))) error->one(FLERR,"Read_dump triclinic status does not match simulation"); } @@ -547,11 +563,11 @@ void ReadDump::header(int fieldinfo) // set yindex,zindex = column index of Y and Z fields in fields array // needed for unscaling to absolute coords in xfield(), yfield(), zfield() - if (scaled && domain->triclinic == 1) { + if (scaled && (boxgeom & TRICLINIC)) { int flag = 0; if (xflag == Reader::UNSET) flag = 1; if (yflag == Reader::UNSET) flag = 1; - if (domain->dimension == 3 && zflag == Reader::UNSET) flag = 1; + if ((boxgeom & THREE_D) && zflag == Reader::UNSET) flag = 1; if (flag) error->one(FLERR,"All read_dump x,y,z fields must be specified for " "scaled, triclinic coords"); @@ -637,13 +653,13 @@ void ReadDump::atoms() domain->boxhi[0] = xhi; domain->boxlo[1] = ylo; domain->boxhi[1] = yhi; - if (domain->dimension == 3) { + if (boxgeom & THREE_D) { domain->boxlo[2] = zlo; domain->boxhi[2] = zhi; } - if (domain->triclinic) { + if (boxgeom & TRICLINIC) { domain->xy = xy; - if (domain->dimension == 3) { + if (boxgeom & THREE_D) { domain->xz = xz; domain->yz = yz; } @@ -1116,12 +1132,12 @@ void ReadDump::migrate_atoms_by_coords() int nlocal = atom->nlocal; for (int i = 0; i < nlocal; i++) domain->remap(x[i],image[i]); - if (domain->triclinic) domain->x2lamda(atom->nlocal); + if (boxgeom & TRICLINIC) domain->x2lamda(atom->nlocal); domain->reset_box(); auto irregular = new Irregular(lmp); irregular->migrate_atoms(1); delete irregular; - if (domain->triclinic) domain->lamda2x(atom->nlocal); + if (boxgeom & TRICLINIC) domain->lamda2x(atom->nlocal); } /* ---------------------------------------------------------------------- @@ -1169,7 +1185,7 @@ int ReadDump::fields_and_keywords(int narg, char **arg) if (fieldtype[nfield-1] == Reader::ID || fieldtype[nfield-1] == Reader::TYPE) error->all(FLERR,"Read_dump must use at least either 'id' or 'type' field"); - if (domain->dimension == 2) { + if (boxgeom & TWO_D) { for (int i = 0; i < nfield; i++) if (fieldtype[i] == Reader::Z || fieldtype[i] == Reader::VZ || fieldtype[i] == Reader::IZ || fieldtype[i] == Reader::FZ) @@ -1303,8 +1319,8 @@ int ReadDump::whichtype(char *str) double ReadDump::xfield(int i, int j) { if (!scaled) return fields[i][j]; - else if (!domain->triclinic) return fields[i][j]*xprd + xlo; - else if (domain->dimension == 2) + else if (boxgeom & ORTHOGONAL) return fields[i][j]*xprd + xlo; + else if (boxgeom & TWO_D) return xprd*fields[i][j] + xy*fields[i][yindex] + xlo; return xprd*fields[i][j] + xy*fields[i][yindex] + xz*fields[i][zindex] + xlo; } @@ -1312,8 +1328,8 @@ double ReadDump::xfield(int i, int j) double ReadDump::yfield(int i, int j) { if (!scaled) return fields[i][j]; - else if (!domain->triclinic) return fields[i][j]*yprd + ylo; - else if (domain->dimension == 2) return yprd*fields[i][j] + ylo; + else if (boxgeom & ORTHOGONAL) return fields[i][j]*yprd + ylo; + else if (boxgeom & TWO_D) return yprd*fields[i][j] + ylo; return yprd*fields[i][j] + yz*fields[i][zindex] + ylo; } diff --git a/src/read_dump.h b/src/read_dump.h index 4676a1819d..1c007e3d53 100644 --- a/src/read_dump.h +++ b/src/read_dump.h @@ -40,6 +40,8 @@ class ReadDump : public Command { void atoms(); int fields_and_keywords(int, char **); + enum { UNKNOWN = 0, ORTHOGONAL = 1 << 0, TRICLINIC = 1 << 1, TWO_D = 1 << 2, THREE_D = 1 << 3 }; + private: char **files; // list of input dump files to process int nfile; // # of dump files to process (each may be parallel) @@ -76,6 +78,7 @@ class ReadDump : public Command { int scaled; // 0/1 if dump file coords are unscaled/scaled int wrapped; // 0/1 if dump file coords are unwrapped/wrapped + int boxgeom; // indicate whether box is orthogonal/triclinic and 2d/3d double box[3][3]; // dump file box parameters double xlo, xhi, ylo, yhi, zlo, zhi, xy, xz, yz; // dump snapshot box params From 0fbe388cbdee43bda45bb3fb6d0e964c11278149 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Nov 2023 16:40:18 -0400 Subject: [PATCH 113/204] undo "boxgeom" changes --- src/read_dump.cpp | 41 ++++++++++++++--------------------------- src/read_dump.h | 3 --- 2 files changed, 14 insertions(+), 30 deletions(-) diff --git a/src/read_dump.cpp b/src/read_dump.cpp index 12323fe776..7f8d4d6559 100644 --- a/src/read_dump.cpp +++ b/src/read_dump.cpp @@ -48,19 +48,6 @@ ReadDump::ReadDump(LAMMPS *lmp) : nfield = 0; readerstyle = utils::strdup("native"); - scaled = wrapped = 0; - - boxgeom = UNKNOWN; - if (domain->triclinic) - boxgeom |= TRICLINIC; - else - boxgeom |= ORTHOGONAL; - - if (domain->dimension == 2) - boxgeom |= TWO_D; - else - boxgeom |= THREE_D; - nreader = 0; clustercomm = MPI_COMM_NULL; filereader = 0; @@ -518,8 +505,8 @@ void ReadDump::header(int fieldinfo) if (boxflag) { if (!boxinfo) error->all(FLERR,"No box information in dump, must use 'box no'"); - else if ((triclinic_snap && (boxgeom & ORTHOGONAL)) || - (!triclinic_snap && (boxgeom & TRICLINIC))) + else if ((triclinic_snap && !domain->triclinic) || + (!triclinic_snap && domain->triclinic)) error->one(FLERR,"Read_dump triclinic status does not match simulation"); } @@ -563,11 +550,11 @@ void ReadDump::header(int fieldinfo) // set yindex,zindex = column index of Y and Z fields in fields array // needed for unscaling to absolute coords in xfield(), yfield(), zfield() - if (scaled && (boxgeom & TRICLINIC)) { + if (scaled && domain->triclinic == 1) { int flag = 0; if (xflag == Reader::UNSET) flag = 1; if (yflag == Reader::UNSET) flag = 1; - if ((boxgeom & THREE_D) && zflag == Reader::UNSET) flag = 1; + if (domain->dimension == 3 && zflag == Reader::UNSET) flag = 1; if (flag) error->one(FLERR,"All read_dump x,y,z fields must be specified for " "scaled, triclinic coords"); @@ -653,13 +640,13 @@ void ReadDump::atoms() domain->boxhi[0] = xhi; domain->boxlo[1] = ylo; domain->boxhi[1] = yhi; - if (boxgeom & THREE_D) { + if (domain->dimension == 3) { domain->boxlo[2] = zlo; domain->boxhi[2] = zhi; } - if (boxgeom & TRICLINIC) { + if (domain->triclinic) { domain->xy = xy; - if (boxgeom & THREE_D) { + if (domain->dimension == 3) { domain->xz = xz; domain->yz = yz; } @@ -1132,12 +1119,12 @@ void ReadDump::migrate_atoms_by_coords() int nlocal = atom->nlocal; for (int i = 0; i < nlocal; i++) domain->remap(x[i],image[i]); - if (boxgeom & TRICLINIC) domain->x2lamda(atom->nlocal); + if (domain->triclinic) domain->x2lamda(atom->nlocal); domain->reset_box(); auto irregular = new Irregular(lmp); irregular->migrate_atoms(1); delete irregular; - if (boxgeom & TRICLINIC) domain->lamda2x(atom->nlocal); + if (domain->triclinic) domain->lamda2x(atom->nlocal); } /* ---------------------------------------------------------------------- @@ -1185,7 +1172,7 @@ int ReadDump::fields_and_keywords(int narg, char **arg) if (fieldtype[nfield-1] == Reader::ID || fieldtype[nfield-1] == Reader::TYPE) error->all(FLERR,"Read_dump must use at least either 'id' or 'type' field"); - if (boxgeom & TWO_D) { + if (domain->dimension == 2) { for (int i = 0; i < nfield; i++) if (fieldtype[i] == Reader::Z || fieldtype[i] == Reader::VZ || fieldtype[i] == Reader::IZ || fieldtype[i] == Reader::FZ) @@ -1319,8 +1306,8 @@ int ReadDump::whichtype(char *str) double ReadDump::xfield(int i, int j) { if (!scaled) return fields[i][j]; - else if (boxgeom & ORTHOGONAL) return fields[i][j]*xprd + xlo; - else if (boxgeom & TWO_D) + else if (!domain->triclinic) return fields[i][j]*xprd + xlo; + else if (domain->dimension == 2) return xprd*fields[i][j] + xy*fields[i][yindex] + xlo; return xprd*fields[i][j] + xy*fields[i][yindex] + xz*fields[i][zindex] + xlo; } @@ -1328,8 +1315,8 @@ double ReadDump::xfield(int i, int j) double ReadDump::yfield(int i, int j) { if (!scaled) return fields[i][j]; - else if (boxgeom & ORTHOGONAL) return fields[i][j]*yprd + ylo; - else if (boxgeom & TWO_D) return yprd*fields[i][j] + ylo; + else if (!domain->triclinic) return fields[i][j]*yprd + ylo; + else if (domain->dimension == 2) return yprd*fields[i][j] + ylo; return yprd*fields[i][j] + yz*fields[i][zindex] + ylo; } diff --git a/src/read_dump.h b/src/read_dump.h index 1c007e3d53..4676a1819d 100644 --- a/src/read_dump.h +++ b/src/read_dump.h @@ -40,8 +40,6 @@ class ReadDump : public Command { void atoms(); int fields_and_keywords(int, char **); - enum { UNKNOWN = 0, ORTHOGONAL = 1 << 0, TRICLINIC = 1 << 1, TWO_D = 1 << 2, THREE_D = 1 << 3 }; - private: char **files; // list of input dump files to process int nfile; // # of dump files to process (each may be parallel) @@ -78,7 +76,6 @@ class ReadDump : public Command { int scaled; // 0/1 if dump file coords are unscaled/scaled int wrapped; // 0/1 if dump file coords are unwrapped/wrapped - int boxgeom; // indicate whether box is orthogonal/triclinic and 2d/3d double box[3][3]; // dump file box parameters double xlo, xhi, ylo, yhi, zlo, zhi, xy, xz, yz; // dump snapshot box params From 9b88ba595d0f05e384cbe6c94cd42870ad15f3bc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Nov 2023 16:52:35 -0400 Subject: [PATCH 114/204] reduce timestep to get correct runs and no crashes. update logs. --- examples/balance/in.balance | 1 + examples/balance/in.balance.bond.fast | 1 + examples/balance/in.balance.bond.slow | 1 + .../log.27Nov18.balance.bond.fast.g++.2 | 242 -------- .../log.27Nov18.balance.bond.fast.g++.4 | 242 -------- .../log.27Nov18.balance.bond.slow.g++.2 | 541 ----------------- .../log.27Nov18.balance.bond.slow.g++.4 | 541 ----------------- .../log.27Nov18.balance.clock.dynamic.g++.2 | 227 -------- .../log.27Nov18.balance.clock.dynamic.g++.4 | 227 -------- .../log.27Nov18.balance.clock.static.g++.2 | 195 ------- .../log.27Nov18.balance.clock.static.g++.4 | 195 ------- examples/balance/log.27Nov18.balance.g++.2 | 209 ------- examples/balance/log.27Nov18.balance.g++.4 | 209 ------- .../log.27Nov18.balance.group.dynamic.g++.2 | 110 ---- .../log.27Nov18.balance.group.dynamic.g++.4 | 110 ---- .../log.27Nov18.balance.group.static.g++.2 | 146 ----- .../log.27Nov18.balance.group.static.g++.4 | 146 ----- .../balance/log.27Nov18.balance.kspace.g++.2 | 117 ---- .../balance/log.27Nov18.balance.kspace.g++.4 | 117 ---- .../log.27Nov18.balance.neigh.dynamic.g++.2 | 228 -------- .../log.27Nov18.balance.neigh.dynamic.g++.4 | 228 -------- .../log.27Nov18.balance.neigh.rcb.g++.2 | 141 ----- .../log.27Nov18.balance.neigh.rcb.g++.4 | 141 ----- .../log.27Nov18.balance.neigh.static.g++.2 | 211 ------- .../log.27Nov18.balance.neigh.static.g++.4 | 211 ------- .../log.27Nov18.balance.var.dynamic.g++.2 | 257 -------- .../log.27Nov18.balance.var.dynamic.g++.4 | 257 -------- .../log.3Nov23.balance.bond.fast.g++.2 | 255 ++++++++ .../log.3Nov23.balance.bond.fast.g++.4 | 255 ++++++++ .../log.3Nov23.balance.bond.slow.g++.2 | 550 ++++++++++++++++++ .../log.3Nov23.balance.bond.slow.g++.4 | 550 ++++++++++++++++++ .../log.3Nov23.balance.clock.dynamic.g++.2 | 234 ++++++++ .../log.3Nov23.balance.clock.dynamic.g++.4 | 234 ++++++++ .../log.3Nov23.balance.clock.static.g++.2 | 207 +++++++ .../log.3Nov23.balance.clock.static.g++.4 | 207 +++++++ examples/balance/log.3Nov23.balance.g++.2 | 213 +++++++ examples/balance/log.3Nov23.balance.g++.4 | 213 +++++++ .../log.3Nov23.balance.group.dynamic.g++.2 | 116 ++++ .../log.3Nov23.balance.group.dynamic.g++.4 | 116 ++++ .../log.3Nov23.balance.group.static.g++.2 | 160 +++++ .../log.3Nov23.balance.group.static.g++.4 | 160 +++++ .../balance/log.3Nov23.balance.kspace.g++.2 | 120 ++++ .../balance/log.3Nov23.balance.kspace.g++.4 | 120 ++++ .../log.3Nov23.balance.neigh.dynamic.g++.2 | 235 ++++++++ .../log.3Nov23.balance.neigh.dynamic.g++.4 | 235 ++++++++ .../log.3Nov23.balance.neigh.rcb.g++.2 | 146 +++++ .../log.3Nov23.balance.neigh.rcb.g++.4 | 146 +++++ .../log.3Nov23.balance.neigh.static.g++.2 | 229 ++++++++ .../log.3Nov23.balance.neigh.static.g++.4 | 229 ++++++++ .../log.3Nov23.balance.var.dynamic.g++.2 | 268 +++++++++ .../log.3Nov23.balance.var.dynamic.g++.4 | 268 +++++++++ 51 files changed, 5469 insertions(+), 5248 deletions(-) delete mode 100644 examples/balance/log.27Nov18.balance.bond.fast.g++.2 delete mode 100644 examples/balance/log.27Nov18.balance.bond.fast.g++.4 delete mode 100644 examples/balance/log.27Nov18.balance.bond.slow.g++.2 delete mode 100644 examples/balance/log.27Nov18.balance.bond.slow.g++.4 delete mode 100644 examples/balance/log.27Nov18.balance.clock.dynamic.g++.2 delete mode 100644 examples/balance/log.27Nov18.balance.clock.dynamic.g++.4 delete mode 100644 examples/balance/log.27Nov18.balance.clock.static.g++.2 delete mode 100644 examples/balance/log.27Nov18.balance.clock.static.g++.4 delete mode 100644 examples/balance/log.27Nov18.balance.g++.2 delete mode 100644 examples/balance/log.27Nov18.balance.g++.4 delete mode 100644 examples/balance/log.27Nov18.balance.group.dynamic.g++.2 delete mode 100644 examples/balance/log.27Nov18.balance.group.dynamic.g++.4 delete mode 100644 examples/balance/log.27Nov18.balance.group.static.g++.2 delete mode 100644 examples/balance/log.27Nov18.balance.group.static.g++.4 delete mode 100644 examples/balance/log.27Nov18.balance.kspace.g++.2 delete mode 100644 examples/balance/log.27Nov18.balance.kspace.g++.4 delete mode 100644 examples/balance/log.27Nov18.balance.neigh.dynamic.g++.2 delete mode 100644 examples/balance/log.27Nov18.balance.neigh.dynamic.g++.4 delete mode 100644 examples/balance/log.27Nov18.balance.neigh.rcb.g++.2 delete mode 100644 examples/balance/log.27Nov18.balance.neigh.rcb.g++.4 delete mode 100644 examples/balance/log.27Nov18.balance.neigh.static.g++.2 delete mode 100644 examples/balance/log.27Nov18.balance.neigh.static.g++.4 delete mode 100644 examples/balance/log.27Nov18.balance.var.dynamic.g++.2 delete mode 100644 examples/balance/log.27Nov18.balance.var.dynamic.g++.4 create mode 100644 examples/balance/log.3Nov23.balance.bond.fast.g++.2 create mode 100644 examples/balance/log.3Nov23.balance.bond.fast.g++.4 create mode 100644 examples/balance/log.3Nov23.balance.bond.slow.g++.2 create mode 100644 examples/balance/log.3Nov23.balance.bond.slow.g++.4 create mode 100644 examples/balance/log.3Nov23.balance.clock.dynamic.g++.2 create mode 100644 examples/balance/log.3Nov23.balance.clock.dynamic.g++.4 create mode 100644 examples/balance/log.3Nov23.balance.clock.static.g++.2 create mode 100644 examples/balance/log.3Nov23.balance.clock.static.g++.4 create mode 100644 examples/balance/log.3Nov23.balance.g++.2 create mode 100644 examples/balance/log.3Nov23.balance.g++.4 create mode 100644 examples/balance/log.3Nov23.balance.group.dynamic.g++.2 create mode 100644 examples/balance/log.3Nov23.balance.group.dynamic.g++.4 create mode 100644 examples/balance/log.3Nov23.balance.group.static.g++.2 create mode 100644 examples/balance/log.3Nov23.balance.group.static.g++.4 create mode 100644 examples/balance/log.3Nov23.balance.kspace.g++.2 create mode 100644 examples/balance/log.3Nov23.balance.kspace.g++.4 create mode 100644 examples/balance/log.3Nov23.balance.neigh.dynamic.g++.2 create mode 100644 examples/balance/log.3Nov23.balance.neigh.dynamic.g++.4 create mode 100644 examples/balance/log.3Nov23.balance.neigh.rcb.g++.2 create mode 100644 examples/balance/log.3Nov23.balance.neigh.rcb.g++.4 create mode 100644 examples/balance/log.3Nov23.balance.neigh.static.g++.2 create mode 100644 examples/balance/log.3Nov23.balance.neigh.static.g++.4 create mode 100644 examples/balance/log.3Nov23.balance.var.dynamic.g++.2 create mode 100644 examples/balance/log.3Nov23.balance.var.dynamic.g++.4 diff --git a/examples/balance/in.balance b/examples/balance/in.balance index 3a1298acfd..c10500f86b 100644 --- a/examples/balance/in.balance +++ b/examples/balance/in.balance @@ -50,5 +50,6 @@ fix 10 all balance 50 0.9 rcb thermo_style custom step temp epair press f_10[3] f_10 thermo 100 +timestep 0.001 run 10000 diff --git a/examples/balance/in.balance.bond.fast b/examples/balance/in.balance.bond.fast index ff54fb94cc..cbc76272e0 100644 --- a/examples/balance/in.balance.bond.fast +++ b/examples/balance/in.balance.bond.fast @@ -59,5 +59,6 @@ fix 10 all balance 50 0.9 rcb thermo_style custom step temp epair press f_10[3] f_10 thermo 100 +timestep 0.001 run 10000 diff --git a/examples/balance/in.balance.bond.slow b/examples/balance/in.balance.bond.slow index 1fd4ae4c85..5e0f9e0568 100644 --- a/examples/balance/in.balance.bond.slow +++ b/examples/balance/in.balance.bond.slow @@ -58,5 +58,6 @@ fix 10 all balance 50 0.9 rcb thermo_style custom step temp epair press f_10[3] f_10 thermo 100 +timestep 0.001 run 40000 diff --git a/examples/balance/log.27Nov18.balance.bond.fast.g++.2 b/examples/balance/log.27Nov18.balance.bond.fast.g++.2 deleted file mode 100644 index 0cc1495368..0000000000 --- a/examples/balance/log.27Nov18.balance.bond.fast.g++.2 +++ /dev/null @@ -1,242 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 2d circle of particles inside a box with LJ walls - -variable b index 0 - -variable x index 50 -variable y index 20 -variable d index 20 -variable v index 5 -variable w index 2 - -units lj -dimension 2 -atom_style bond -boundary f f p - -lattice hex 0.85 -Lattice spacing in x,y,z = 1.16553 2.01877 1.16553 -region box block 0 $x 0 $y -0.5 0.5 -region box block 0 50 0 $y -0.5 0.5 -region box block 0 50 0 20 -0.5 0.5 -create_box 1 box bond/types 1 extra/bond/per/atom 6 -Created orthogonal box = (0 0 -0.582767) to (58.2767 40.3753 0.582767) - 2 by 1 by 1 MPI processor grid -region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 10 -create_atoms 1 region circle -Created 361 atoms - Time spent = 0.000778913 secs -mass 1 1.0 - -velocity all create 0.5 87287 loop geom -velocity all set $v $w 0 sum yes -velocity all set 5 $w 0 sum yes -velocity all set 5 2 0 sum yes - -pair_style lj/cut 2.5 -pair_coeff 1 1 10.0 1.0 2.5 - -bond_style harmonic -bond_coeff 1 10.0 1.2 - -# need to preserve 1-3, 1-4 pairwise interactions during hard collisions - -special_bonds lj/coul 0 1 1 - 0 = max # of 1-2 neighbors - 1 = max # of special neighbors -create_bonds many all all 1 1.0 1.5 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 42 29 1 - 2 neighbor lists, perpetual/occasional/extra = 1 1 0 - (1) command create_bonds, occasional - attributes: full, newton on - pair build: full/bin - stencil: full/bin/2d - bin: standard - (2) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Added 1014 bonds, new total = 1014 - 6 = max # of 1-2 neighbors - 6 = max # of special neighbors - -neighbor 0.3 bin -neigh_modify delay 0 every 1 check yes - -fix 1 all nve - -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 - -comm_style tiled -comm_modify cutoff 10.0 # because bonds stretch a long ways -fix 10 all balance 50 0.9 rcb - -#compute 1 all property/atom proc -#variable p atom (c_1%10)+1 -#dump 2 all custom 50 tmp.dump id v_p x y z - -#dump 3 all image 50 image.*.jpg v_p type bond atom 0.25 # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 -#variable colors string # "red green blue yellow white # purple pink orange lime gray" -#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} - -thermo_style custom step temp epair press f_10[3] f_10 -thermo 100 - -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 10 - binsize = 1.4, bins = 42 29 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 5.156 | 5.167 | 5.177 Mbytes -Step Temp E_pair Press f_10[3] f_10 - 0 25.701528 -2.2032569 3.1039469 2 1.0193906 - 100 27.623422 -6.228166 2.6542136 1.0803324 1.0027701 - 200 33.35302 -15.746749 3.2018248 1.1246537 1.0027701 - 300 39.17734 -24.1557 4.9116986 1.1468144 1.0027701 - 400 41.660701 -27.615203 8.6214678 1.2077562 1.0027701 - 500 37.154935 -24.096954 3.2656298 1.2243767 1.0083102 - 600 35.062196 -21.527799 2.3688444 1.1800554 1.0027701 - 700 36.962955 -22.265373 3.0233424 1.1800554 1.0083102 - 800 38.514356 -24.625735 5.2876402 1.2077562 1.0027701 - 900 37.840168 -24.069158 4.443617 1.2022161 1.0083102 - 1000 36.429396 -23.978878 7.2603394 1.1966759 1.0027701 - 1100 34.75827 -22.743232 6.6304628 1.1745152 1.0083102 - 1200 31.057199 -21.46544 3.7869701 1.1634349 1.0083102 - 1300 33.127345 -22.426161 5.824726 1.0858726 1.0027701 - 1400 31.678654 -21.604473 3.2219261 1.0360111 1.0083102 - 1500 28.345212 -18.030807 0.93335223 1.1191136 1.0027701 - 1600 26.031412 -15.389052 0.82549542 1.1080332 1.0027701 - 1700 25.082832 -13.48625 1.0006592 1.0858726 1.0027701 - 1800 25.673875 -13.965883 0.54607043 1.0692521 1.0027701 - 1900 26.530842 -13.979318 2.0285449 1.1024931 1.0027701 - 2000 25.910771 -14.244515 1.9592232 1.1191136 1.0027701 - 2100 28.505636 -16.220559 1.7154775 1.1191136 1.0027701 - 2200 28.142753 -15.564302 2.9946076 1.1135734 1.0027701 - 2300 26.606225 -13.734442 1.4589278 1.0083102 1.0083102 - 2400 25.664988 -12.389759 1.3450183 1.0360111 1.0027701 - 2500 25.145328 -11.815173 0.48162788 1.0360111 1.0027701 - 2600 26.654868 -13.916929 2.8361012 1.0581717 1.0083102 - 2700 27.3758 -15.495452 4.1206412 1.0360111 1.0027701 - 2800 23.60864 -14.520038 1.8948923 1.0193906 1.0027701 - 2900 20.604557 -12.901121 0.17526991 1.0138504 1.0027701 - 3000 20.852473 -12.756946 -0.44987285 1.0360111 1.0027701 - 3100 21.934986 -12.797691 0.76186765 1.0415512 1.0027701 - 3200 23.293263 -12.368233 0.021937309 1.0526316 1.0027701 - 3300 22.091492 -10.88605 0.013006632 1.0415512 1.0083102 - 3400 23.535429 -10.937804 2.0738989 1.0360111 1.0027701 - 3500 24.503573 -12.202994 1.126785 1.0581717 1.0027701 - 3600 23.54503 -12.745709 0.39022194 1.0858726 1.0027701 - 3700 22.658187 -10.986188 -0.18869692 1.0692521 1.0027701 - 3800 21.282045 -9.7879088 -0.061253454 1.0193906 1.0027701 - 3900 20.571754 -9.1157993 -1.0178917 1.0526316 1.0027701 - 4000 23.779702 -10.230328 1.0778525 1.0581717 1.0083102 - 4100 23.675854 -10.63724 0.59402249 1.0415512 1.0027701 - 4200 24.058963 -11.89505 0.3866378 1.0526316 1.0027701 - 4300 22.683721 -11.358978 1.8269036 1.0470914 1.0083102 - 4400 23.002345 -11.081443 0.4529456 1.0415512 1.0027701 - 4500 21.984542 -10.233276 -0.60718244 1.0415512 1.0083102 - 4600 22.079237 -9.979061 0.53013572 1.0415512 1.0027701 - 4700 22.336961 -10.323583 -0.37512832 1.0249307 1.0027701 - 4800 23.351699 -10.143724 0.95694397 1.0470914 1.0027701 - 4900 23.643954 -10.687354 1.6062522 1.0858726 1.0083102 - 5000 25.158132 -11.532398 1.3083639 1.0914127 1.0027701 - 5100 23.755521 -10.978548 0.60587307 1.0470914 1.0027701 - 5200 21.842692 -10.443216 -0.41185899 1.0637119 1.0027701 - 5300 22.828066 -10.871114 1.1754353 1.0470914 1.0027701 - 5400 24.883977 -12.39165 0.65101173 1.0470914 1.0027701 - 5500 22.908286 -11.419431 1.4712698 1.0637119 1.0027701 - 5600 22.718634 -12.083974 1.5706808 1.0526316 1.0027701 - 5700 23.080763 -11.464882 1.2979578 1.0304709 1.0083102 - 5800 21.877026 -11.483185 0.279772 1.0360111 1.0027701 - 5900 22.526809 -10.868636 0.37121786 1.0637119 1.0083102 - 6000 22.908857 -10.311118 0.58244569 1.0526316 1.0083102 - 6100 22.399847 -10.222706 0.87875674 1.0858726 1.0027701 - 6200 22.623463 -10.035541 -0.25811274 1.0304709 1.0027701 - 6300 21.518006 -10.017552 -0.98187611 1.0470914 1.0083102 - 6400 21.269816 -11.297716 0.20058535 1.0138504 1.0027701 - 6500 23.362834 -11.263306 0.47670072 1.0692521 1.0027701 - 6600 23.705236 -12.358492 -0.63286237 1.0027701 1.0027701 - 6700 22.410623 -10.849516 0.57027834 1.0581717 1.0083102 - 6800 21.661639 -9.3981379 0.38726515 1.0470914 1.0027701 - 6900 21.856521 -8.8451751 0.053822789 1.0304709 1.0027701 - 7000 21.069495 -8.6443387 -0.10412144 1.0193906 1.0027701 - 7100 22.305494 -10.098469 -0.22662961 1.0581717 1.0027701 - 7200 23.52884 -11.055929 -0.099869868 1.0692521 1.0027701 - 7300 24.042008 -11.411758 2.0528788 1.0415512 1.0027701 - 7400 22.870777 -12.408763 0.33346225 1.0249307 1.0027701 - 7500 21.290152 -10.963058 0.26940112 1.0083102 1.0027701 - 7600 21.702686 -10.36214 0.84057004 1.0083102 1.0027701 - 7700 22.478034 -10.832724 -0.70855164 1.0747922 1.0027701 - 7800 22.856853 -11.161008 -0.88354803 1.0083102 1.0083102 - 7900 22.579842 -10.789899 0.40865274 1.0360111 1.0027701 - 8000 24.364281 -12.116023 -0.44788445 1.0249307 1.0083102 - 8100 22.993409 -10.261331 0.44712215 1.0193906 1.0027701 - 8200 23.006207 -10.723372 1.2357091 1.0415512 1.0083102 - 8300 23.292233 -10.041314 2.143692 1.0581717 1.0027701 - 8400 21.658087 -10.089378 -0.25838681 1.0083102 1.0027701 - 8500 23.268456 -10.356603 0.089787317 1.0526316 1.0083102 - 8600 22.572019 -10.32801 0.12320758 1.0526316 1.0027701 - 8700 22.970465 -10.662456 0.57027398 1.0581717 1.0083102 - 8800 23.515552 -10.415842 1.0048598 1.0138504 1.0083102 - 8900 22.733961 -10.343495 0.19917627 1.0360111 1.0083102 - 9000 21.835458 -9.8740971 -1.0653164 1.0193906 1.0027701 - 9100 22.062821 -9.2303832 0.21428267 1.0415512 1.0083102 - 9200 23.020404 -10.321542 -0.48757848 1.0193906 1.0083102 - 9300 22.529362 -9.2916938 0.57056277 1.0415512 1.0027701 - 9400 23.301911 -10.538876 0.80637627 1.0138504 1.0027701 - 9500 21.984286 -9.4754676 -0.19048233 1.0193906 1.0027701 - 9600 23.710224 -10.274983 0.72268146 1.0249307 1.0027701 - 9700 22.317038 -9.3509008 -0.45727658 1.0360111 1.0027701 - 9800 23.41615 -10.026331 -0.45909049 1.0415512 1.0027701 - 9900 22.130299 -11.18528 -0.15359132 1.0747922 1.0027701 - 10000 23.273859 -11.337403 0.4036321 1.0304709 1.0083102 -Loop time of 1.18289 on 2 procs for 10000 steps with 361 atoms - -Performance: 3652073.393 tau/day, 8453.874 timesteps/s -97.0% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.25191 | 0.25685 | 0.2618 | 1.0 | 21.71 -Bond | 0.097655 | 0.098332 | 0.099009 | 0.2 | 8.31 -Neigh | 0.53258 | 0.53993 | 0.54728 | 1.0 | 45.65 -Comm | 0.13457 | 0.15372 | 0.17288 | 4.9 | 13.00 -Output | 0.0013587 | 0.0016007 | 0.0018427 | 0.6 | 0.14 -Modify | 0.074109 | 0.074314 | 0.074518 | 0.1 | 6.28 -Other | | 0.05813 | | | 4.91 - -Nlocal: 180.5 ave 182 max 179 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 172.5 ave 175 max 170 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 1421 ave 1488 max 1354 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 2842 -Ave neighs/atom = 7.87258 -Ave special neighs/atom = 5.61773 -Neighbor list builds = 4884 -Dangerous builds = 0 -Total wall time: 0:00:01 diff --git a/examples/balance/log.27Nov18.balance.bond.fast.g++.4 b/examples/balance/log.27Nov18.balance.bond.fast.g++.4 deleted file mode 100644 index 5cd072cf66..0000000000 --- a/examples/balance/log.27Nov18.balance.bond.fast.g++.4 +++ /dev/null @@ -1,242 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 2d circle of particles inside a box with LJ walls - -variable b index 0 - -variable x index 50 -variable y index 20 -variable d index 20 -variable v index 5 -variable w index 2 - -units lj -dimension 2 -atom_style bond -boundary f f p - -lattice hex 0.85 -Lattice spacing in x,y,z = 1.16553 2.01877 1.16553 -region box block 0 $x 0 $y -0.5 0.5 -region box block 0 50 0 $y -0.5 0.5 -region box block 0 50 0 20 -0.5 0.5 -create_box 1 box bond/types 1 extra/bond/per/atom 6 -Created orthogonal box = (0 0 -0.582767) to (58.2767 40.3753 0.582767) - 2 by 2 by 1 MPI processor grid -region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 10 -create_atoms 1 region circle -Created 361 atoms - Time spent = 0.00067687 secs -mass 1 1.0 - -velocity all create 0.5 87287 loop geom -velocity all set $v $w 0 sum yes -velocity all set 5 $w 0 sum yes -velocity all set 5 2 0 sum yes - -pair_style lj/cut 2.5 -pair_coeff 1 1 10.0 1.0 2.5 - -bond_style harmonic -bond_coeff 1 10.0 1.2 - -# need to preserve 1-3, 1-4 pairwise interactions during hard collisions - -special_bonds lj/coul 0 1 1 - 0 = max # of 1-2 neighbors - 1 = max # of special neighbors -create_bonds many all all 1 1.0 1.5 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 42 29 1 - 2 neighbor lists, perpetual/occasional/extra = 1 1 0 - (1) command create_bonds, occasional - attributes: full, newton on - pair build: full/bin - stencil: full/bin/2d - bin: standard - (2) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Added 1014 bonds, new total = 1014 - 6 = max # of 1-2 neighbors - 6 = max # of special neighbors - -neighbor 0.3 bin -neigh_modify delay 0 every 1 check yes - -fix 1 all nve - -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 - -comm_style tiled -comm_modify cutoff 10.0 # because bonds stretch a long ways -fix 10 all balance 50 0.9 rcb - -#compute 1 all property/atom proc -#variable p atom (c_1%10)+1 -#dump 2 all custom 50 tmp.dump id v_p x y z - -#dump 3 all image 50 image.*.jpg v_p type bond atom 0.25 # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 -#variable colors string # "red green blue yellow white # purple pink orange lime gray" -#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} - -thermo_style custom step temp epair press f_10[3] f_10 -thermo 100 - -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 10 - binsize = 1.4, bins = 42 29 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 5.122 | 5.141 | 5.174 Mbytes -Step Temp E_pair Press f_10[3] f_10 - 0 25.701528 -2.2032569 3.1039469 3.2354571 1.0526316 - 100 27.623422 -6.228166 2.6542136 1.2631579 1.0083102 - 200 33.35302 -15.746749 3.2018248 1.2963989 1.0193906 - 300 39.17734 -24.1557 4.9116986 1.2963989 1.0193906 - 400 41.660701 -27.615203 8.6214679 1.3518006 1.0083102 - 500 37.154928 -24.096946 3.2656177 1.3296399 1.0304709 - 600 35.059873 -21.524223 2.3729526 1.3296399 1.0083102 - 700 36.735117 -22.012675 3.266197 1.3296399 1.0083102 - 800 39.218223 -25.076176 4.7162461 1.4182825 1.0193906 - 900 38.003628 -24.598176 3.4651756 1.4958449 1.0083102 - 1000 37.599298 -25.117714 4.6714491 1.2963989 1.0193906 - 1100 35.587211 -24.476201 4.8766816 1.2077562 1.0083102 - 1200 33.05745 -21.457847 4.7304313 1.2188366 1.0193906 - 1300 35.505899 -20.103017 7.0543469 1.1523546 1.0193906 - 1400 32.687958 -18.411286 2.8022421 1.1523546 1.0083102 - 1500 30.681103 -13.979491 1.5780815 1.1523546 1.0083102 - 1600 28.134276 -12.408217 1.4370834 1.2188366 1.0193906 - 1700 29.150676 -12.486223 1.7118526 1.1745152 1.0083102 - 1800 29.456937 -11.386522 2.0484739 1.1966759 1.0193906 - 1900 28.029998 -11.168436 0.38519481 1.1080332 1.0193906 - 2000 29.476997 -12.337678 1.8878345 1.1523546 1.0083102 - 2100 30.113294 -12.201714 2.8003366 1.1634349 1.0193906 - 2200 31.599067 -13.710787 2.5654923 1.2188366 1.0083102 - 2300 31.333799 -12.269386 1.9573739 1.1412742 1.0193906 - 2400 28.587094 -10.98229 2.090581 1.1745152 1.0083102 - 2500 28.012332 -11.416553 2.3293146 1.1855956 1.0083102 - 2600 28.703189 -13.33369 2.7247345 1.1080332 1.0083102 - 2700 26.933934 -13.546384 0.71447362 1.0415512 1.0304709 - 2800 24.556936 -12.231427 0.012081842 1.0526316 1.0193906 - 2900 24.362943 -10.921093 -0.6063159 1.0858726 1.0193906 - 3000 24.583358 -10.025143 0.35975315 1.0637119 1.0083102 - 3100 26.119046 -10.124317 0.75140102 1.0415512 1.0193906 - 3200 27.665317 -11.418452 0.39942176 1.1301939 1.0083102 - 3300 27.771434 -9.9777413 0.94693011 1.1080332 1.0083102 - 3400 25.692188 -9.9016885 2.2582772 1.0415512 1.0083102 - 3500 27.009276 -10.504438 0.98279258 1.1301939 1.0083102 - 3600 26.082843 -9.4359595 -0.030819747 1.1301939 1.0083102 - 3700 23.956851 -8.4601884 -0.45748969 1.0858726 1.0304709 - 3800 24.92141 -8.3315871 -0.19512647 1.0969529 1.0083102 - 3900 26.048044 -9.6299934 0.40522014 1.0858726 1.0083102 - 4000 26.558961 -10.032084 0.56213613 1.1745152 1.0083102 - 4100 26.949686 -10.133598 1.0140825 1.0747922 1.0083102 - 4200 25.868196 -9.3971859 1.2758465 1.0969529 1.0083102 - 4300 24.563369 -9.5992996 0.17389949 1.1191136 1.0193906 - 4400 24.032818 -10.002668 0.10233743 1.0969529 1.0083102 - 4500 25.281577 -9.948799 0.7590423 1.1523546 1.0083102 - 4600 25.010901 -10.195479 -0.24424931 1.0747922 1.0193906 - 4700 25.062368 -9.2973021 1.1755931 1.0858726 1.0193906 - 4800 25.70912 -8.890895 1.0780397 1.1080332 1.0193906 - 4900 26.027757 -10.205469 1.0644859 1.1080332 1.0083102 - 5000 25.845739 -9.8511049 0.49059257 1.1301939 1.0193906 - 5100 25.614064 -9.0396911 0.40825814 1.0526316 1.0304709 - 5200 25.548135 -9.000613 0.81571441 1.1080332 1.0083102 - 5300 26.592601 -9.2385129 1.4983434 1.0637119 1.0193906 - 5400 26.230779 -9.8226036 1.0072462 1.0858726 1.0083102 - 5500 26.809887 -9.9569954 1.4074968 1.0415512 1.0083102 - 5600 25.722206 -10.240487 -0.5216434 1.0747922 1.0193906 - 5700 24.973866 -9.0820997 0.92104357 1.0193906 1.0083102 - 5800 24.257134 -9.5439897 -0.75290789 1.0858726 1.0083102 - 5900 25.524917 -8.9920216 1.2049479 1.1191136 1.0083102 - 6000 24.816532 -9.5865764 -0.66634446 1.0637119 1.0193906 - 6100 27.034385 -9.4017037 1.0769494 1.0969529 1.0083102 - 6200 24.19144 -8.2292864 0.97913204 1.0415512 1.0193906 - 6300 26.112877 -9.1531212 0.77578963 1.0526316 1.0193906 - 6400 25.820541 -9.9662231 -0.092724413 1.0969529 1.0193906 - 6500 26.181404 -9.5875764 -0.30106405 1.1634349 1.0083102 - 6600 27.770851 -8.8366116 0.94545206 1.0304709 1.0193906 - 6700 26.065489 -9.8223382 0.24640067 1.0526316 1.0193906 - 6800 27.468165 -10.160923 2.7263738 1.0747922 1.0304709 - 6900 27.317955 -10.356911 1.131609 1.0526316 1.0304709 - 7000 26.343789 -9.9153453 1.0385354 1.0858726 1.0193906 - 7100 24.366577 -8.9243936 0.37685043 1.0526316 1.0193906 - 7200 25.570042 -8.9195237 0.44206575 1.0637119 1.0193906 - 7300 24.635046 -8.4524117 -0.20581694 1.0193906 1.0193906 - 7400 27.161863 -7.9885934 1.1323072 1.0858726 1.0193906 - 7500 26.8044 -9.5703931 0.69476535 1.0858726 1.0193906 - 7600 27.381006 -10.702178 -0.20230101 1.0526316 1.0083102 - 7700 26.507406 -9.828117 0.50115907 1.0415512 1.0193906 - 7800 25.945271 -8.9912842 0.89121191 1.0747922 1.0083102 - 7900 24.498681 -7.7193231 -0.63874494 1.0858726 1.0083102 - 8000 24.517408 -7.6046107 -0.91642337 1.0415512 1.0083102 - 8100 26.388387 -8.1883906 0.093136981 1.1080332 1.0193906 - 8200 26.261054 -8.7223732 -0.086859057 1.0747922 1.0083102 - 8300 26.287026 -9.2583895 0.79506804 1.0858726 1.0083102 - 8400 24.691375 -9.0701909 -0.40058151 1.0637119 1.0193906 - 8500 25.390612 -7.9499801 0.59874113 1.1412742 1.0193906 - 8600 26.84383 -8.5520984 0.37618599 1.0637119 1.0083102 - 8700 25.685137 -7.688836 0.035978149 1.0415512 1.0193906 - 8800 26.614591 -9.0444146 0.20671465 1.0193906 1.0083102 - 8900 25.782718 -8.2594705 0.54378816 1.0747922 1.0304709 - 9000 26.026886 -8.6777252 0.25418163 1.1191136 1.0083102 - 9100 27.246916 -9.0307861 1.211131 1.0526316 1.0193906 - 9200 27.282948 -9.180029 -0.0056269613 1.0747922 1.0083102 - 9300 27.029692 -8.7791461 0.35971649 1.0304709 1.0083102 - 9400 26.549013 -7.5083174 0.77607249 1.0969529 1.0193906 - 9500 25.533731 -9.2763668 0.28360762 1.0969529 1.0083102 - 9600 27.997538 -9.2766769 1.6968428 1.0637119 1.0083102 - 9700 26.977436 -9.21372 1.8007256 1.0637119 1.0083102 - 9800 25.547091 -9.1024445 -0.29158273 1.0969529 1.0193906 - 9900 26.378841 -8.7645665 1.0385835 1.1080332 1.0083102 - 10000 26.699368 -8.5450739 0.19591452 1.0526316 1.0193906 -Loop time of 0.916576 on 4 procs for 10000 steps with 361 atoms - -Performance: 4713193.307 tau/day, 10910.170 timesteps/s -92.2% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.10915 | 0.12374 | 0.14167 | 3.5 | 13.50 -Bond | 0.047075 | 0.049849 | 0.054161 | 1.2 | 5.44 -Neigh | 0.31176 | 0.3246 | 0.3384 | 1.7 | 35.41 -Comm | 0.24271 | 0.26717 | 0.30549 | 4.9 | 29.15 -Output | 0.0017068 | 0.0021075 | 0.0031145 | 1.3 | 0.23 -Modify | 0.064639 | 0.065705 | 0.067641 | 0.5 | 7.17 -Other | | 0.08341 | | | 9.10 - -Nlocal: 90.25 ave 92 max 89 min -Histogram: 1 0 0 2 0 0 0 0 0 1 -Nghost: 248.25 ave 264 max 230 min -Histogram: 1 0 0 0 0 2 0 0 0 1 -Neighs: 569.5 ave 657 max 519 min -Histogram: 2 0 0 0 1 0 0 0 0 1 - -Total # of neighbors = 2278 -Ave neighs/atom = 6.31025 -Ave special neighs/atom = 5.61773 -Neighbor list builds = 4964 -Dangerous builds = 14 -Total wall time: 0:00:00 diff --git a/examples/balance/log.27Nov18.balance.bond.slow.g++.2 b/examples/balance/log.27Nov18.balance.bond.slow.g++.2 deleted file mode 100644 index 5e23613f1f..0000000000 --- a/examples/balance/log.27Nov18.balance.bond.slow.g++.2 +++ /dev/null @@ -1,541 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 2d circle of particles inside a box with LJ walls - -variable b index 0 - -variable x index 50 -variable y index 20 -variable d index 20 - -# careful not to slam into wall too hard - -variable v index 0.3 -variable w index 0.08 - -units lj -dimension 2 -atom_style bond -boundary f f p - -lattice hex 0.85 -Lattice spacing in x,y,z = 1.16553 2.01877 1.16553 -region box block 0 $x 0 $y -0.5 0.5 -region box block 0 50 0 $y -0.5 0.5 -region box block 0 50 0 20 -0.5 0.5 -create_box 1 box bond/types 1 extra/bond/per/atom 6 -Created orthogonal box = (0 0 -0.582767) to (58.2767 40.3753 0.582767) - 2 by 1 by 1 MPI processor grid -region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 10 -create_atoms 1 region circle -Created 361 atoms - Time spent = 0.000762701 secs -mass 1 1.0 - -velocity all create 0.5 87287 loop geom -velocity all set $v $w 0 sum yes -velocity all set 0.3 $w 0 sum yes -velocity all set 0.3 0.08 0 sum yes - -pair_style lj/cut 2.5 -pair_coeff 1 1 10.0 1.0 2.5 - -bond_style harmonic -bond_coeff 1 10.0 1.2 - -create_bonds many all all 1 1.0 1.5 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 42 29 1 - 2 neighbor lists, perpetual/occasional/extra = 1 1 0 - (1) command create_bonds, occasional - attributes: full, newton on - pair build: full/bin - stencil: full/bin/2d - bin: standard - (2) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Added 1014 bonds, new total = 1014 - 6 = max # of 1-2 neighbors - 30 = max # of 1-3 neighbors - 180 = max # of 1-4 neighbors - 36 = max # of special neighbors - -neighbor 0.3 bin -neigh_modify delay 0 every 1 check yes - -fix 1 all nve - -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 - -comm_style tiled -fix 10 all balance 50 0.9 rcb - -#compute 1 all property/atom proc -#variable p atom (c_1%10)+1 -#dump 2 all custom 50 tmp.dump id v_p x y z - -#dump 3 all image 200 image.*.jpg v_p type bond atom 0.25 # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 -#variable colors string # "red green blue yellow white # purple pink orange lime gray" -#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} - -thermo_style custom step temp epair press f_10[3] f_10 -thermo 100 - -run 40000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 42 29 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.079 | 7.108 | 7.137 Mbytes -Step Temp E_pair Press f_10[3] f_10 - 0 0.57437856 0 0.26099453 2 1.0193906 - 100 0.29756515 0 0.10149401 1.0027701 1.0027701 - 200 0.35394813 0 0.075159099 1.0027701 1.0083102 - 300 0.39245849 0 0.033002384 1.0027701 1.0027701 - 400 0.34078347 0 -0.020825841 1.0083102 1.0027701 - 500 0.35201095 0 -0.062637506 1.0027701 1.0027701 - 600 0.34014717 0 -0.11122965 1.0249307 1.0027701 - 700 0.3323524 0 -0.11598015 1.0083102 1.0027701 - 800 0.35116047 0 -0.096162395 1.0138504 1.0027701 - 900 0.35695352 0 -0.01385176 1.0249307 1.0027701 - 1000 0.36986539 0 0.056772858 1.0027701 1.0027701 - 1100 0.34584644 0 0.084941323 1.0138504 1.0027701 - 1200 0.31921435 0 0.10545078 1.0138504 1.0027701 - 1300 0.32952819 0 0.124902 1.0027701 1.0027701 - 1400 0.34497365 0 0.12662081 1.0138504 1.0027701 - 1500 0.33429243 0 0.096230972 1.0193906 1.0027701 - 1600 0.33765387 0 0.025800542 1.0193906 1.0027701 - 1700 0.35134464 0 -0.04422593 1.0083102 1.0027701 - 1800 0.35003859 0 -0.096745576 1.0083102 1.0083102 - 1900 0.33839618 0 -0.095465943 1.0027701 1.0027701 - 2000 0.33732078 0 -0.094652802 1.0027701 1.0027701 - 2100 0.34552238 0 -0.076729261 1.0083102 1.0027701 - 2200 0.34893142 0 -0.036853228 1.0083102 1.0083102 - 2300 0.35379341 0 0.021124847 1.0193906 1.0027701 - 2400 0.34829744 0 0.09230184 1.0027701 1.0027701 - 2500 0.33038141 0 0.1399855 1.0027701 1.0083102 - 2600 0.30983019 0 0.12754742 1.0083102 1.0027701 - 2700 0.32992561 0 0.10485138 1.0193906 1.0027701 - 2800 0.34604747 0 0.066174138 1.0083102 1.0027701 - 2900 0.3444791 0 0.036590652 1.0083102 1.0083102 - 3000 0.34721342 0 -0.023793368 1.0138504 1.0027701 - 3100 0.33404314 0 -0.08374223 1.0083102 1.0027701 - 3200 0.33019355 0 -0.12715599 1.0083102 1.0027701 - 3300 0.33515177 0 -0.12217394 1.0083102 1.0027701 - 3400 0.33628481 0 -0.070877624 1.0083102 1.0027701 - 3500 0.34257038 0 -0.021612062 1.0027701 1.0027701 - 3600 0.32838009 0 0.030131228 1.0027701 1.0027701 - 3700 0.34462142 0 0.074586378 1.0138504 1.0027701 - 3800 0.30891825 0 0.10605673 1.0138504 1.0027701 - 3900 0.33847951 0 0.13956139 1.0027701 1.0027701 - 4000 0.32952079 0 0.12688129 1.0027701 1.0027701 - 4100 0.32646772 0 0.081089042 1.0083102 1.0027701 - 4200 0.35399503 0 0.013422873 1.0027701 1.0027701 - 4300 0.33154914 0 -0.050919508 1.0027701 1.0083102 - 4400 0.34113556 0 -0.083171 1.0249307 1.0027701 - 4500 0.32651708 0 -0.1063133 1.0193906 1.0027701 - 4600 0.34359609 0 -0.1076395 1.0027701 1.0027701 - 4700 0.34973537 0 -0.088231606 1.0138504 1.0027701 - 4800 0.35198515 0 -0.020901044 1.0027701 1.0027701 - 4900 0.35187284 0 0.043645941 1.0193906 1.0027701 - 5000 0.34887336 0 0.095698609 1.0027701 1.0027701 - 5100 0.30308163 0 0.11649328 1.0138504 1.0027701 - 5200 0.32401285 0 0.12072411 1.0083102 1.0083102 - 5300 0.33025072 0 0.10933161 1.0138504 1.0027701 - 5400 0.33288012 0 0.078356448 1.0083102 1.0027701 - 5500 0.35142492 0 0.036958063 1.0027701 1.0027701 - 5600 0.35125368 0 -0.041371343 1.0193906 1.0027701 - 5700 0.34547744 0 -0.096450846 1.0193906 1.0027701 - 5800 0.30939887 0 -0.12356656 1.0027701 1.0083102 - 5900 0.32315628 0 -0.11338676 1.0083102 1.0027701 - 6000 0.34117485 0 -0.066198961 1.0027701 1.0027701 - 6100 0.35298043 0 -0.016172816 1.0138504 1.0027701 - 6200 0.35130653 0 0.027660468 1.0027701 1.0027701 - 6300 0.35398766 0 0.087221238 1.0027701 1.0027701 - 6400 0.30963379 0 0.11990957 1.0138504 1.0027701 - 6500 0.3174541 0 0.14103528 1.0083102 1.0083102 - 6600 0.31989791 0 0.11575506 1.0083102 1.0083102 - 6700 0.33811477 0 0.060747353 1.0083102 1.0083102 - 6800 0.3424043 0 0.010357152 1.0083102 1.0027701 - 6900 0.34804319 0 -0.042621786 1.0083102 1.0027701 - 7000 0.35357865 0 -0.067248959 1.0027701 1.0027701 - 7100 0.33556885 0 -0.10983726 1.0083102 1.0027701 - 7200 0.33531101 0 -0.112179 1.0027701 1.0027701 - 7300 0.35742607 0 -0.078405267 1.0083102 1.0027701 - 7400 0.34577559 0 -0.01985432 1.0027701 1.0083102 - 7500 0.3498641 0 0.052289439 1.0027701 1.0027701 - 7600 0.33773715 0 0.092939035 1.0027701 1.0027701 - 7700 0.33093497 0 0.11924405 1.0083102 1.0027701 - 7800 0.31435814 0 0.12701724 1.0027701 1.0027701 - 7900 0.33132217 0 0.10793075 1.0083102 1.0027701 - 8000 0.33451798 0 0.077993125 1.0027701 1.0027701 - 8100 0.35188371 0 0.019929977 1.0083102 1.0083102 - 8200 0.33645742 0 -0.039302079 1.0027701 1.0027701 - 8300 0.3415632 0 -0.098067982 1.0138504 1.0027701 - 8400 0.30619282 0 -0.12952879 1.0138504 1.0027701 - 8500 0.34446484 0 -0.098084709 1.0027701 1.0027701 - 8600 0.33761673 0 -0.07069818 1.0027701 1.0027701 - 8700 0.34495452 0 -0.022458056 1.0083102 1.0027701 - 8800 0.33502983 0 0.027742411 1.0027701 1.0027701 - 8900 0.35418591 0 0.092390134 1.0083102 1.0083102 - 9000 0.31648387 0 0.12467398 1.0083102 1.0027701 - 9100 0.33994825 0 0.14460327 1.0138504 1.0027701 - 9200 0.33822571 0 0.11273284 1.0027701 1.0027701 - 9300 0.33260773 0 0.060063671 1.0083102 1.0083102 - 9400 0.36140305 0 0.021427642 1.0138504 1.0027701 - 9500 0.34273562 0 -0.034064202 1.0083102 1.0027701 - 9600 0.33867054 0 -0.089076906 1.0138504 1.0027701 - 9700 0.32088235 0 -0.12027075 1.0138504 1.0083102 - 9800 0.3320823 0 -0.11602794 1.0138504 1.0027701 - 9900 0.33916442 0 -0.080281044 1.0083102 1.0027701 - 10000 0.34852268 0 -0.01000914 1.0083102 1.0083102 - 10100 0.32955942 0 0.04258493 1.0027701 1.0083102 - 10200 0.34487898 0 0.086971308 1.0083102 1.0027701 - 10300 0.32325593 0 0.11558149 1.0138504 1.0027701 - 10400 0.30927871 0 0.12239437 1.0027701 1.0027701 - 10500 0.33176799 0 0.12285937 1.0138504 1.0083102 - 10600 0.35120027 0 0.084897432 1.0027701 1.0027701 - 10700 0.33129697 0 0.0053089279 1.0138504 1.0027701 - 10800 0.36028769 0 -0.04280715 1.0083102 1.0027701 - 10900 0.35552287 0 -0.084955999 1.0138504 1.0027701 - 11000 0.3406024 0 -0.096554577 1.0027701 1.0027701 - 11100 0.33041202 0 -0.10703492 1.0138504 1.0027701 - 11200 0.32442686 0 -0.084328121 1.0193906 1.0027701 - 11300 0.35952468 0 -0.020191965 1.0083102 1.0027701 - 11400 0.34610624 0 0.03440148 1.0138504 1.0027701 - 11500 0.3415612 0 0.1041929 1.0027701 1.0027701 - 11600 0.34040042 0 0.13215705 1.0138504 1.0027701 - 11700 0.33555094 0 0.12738686 1.0193906 1.0027701 - 11800 0.3458647 0 0.10963398 1.0027701 1.0083102 - 11900 0.33836678 0 0.067253864 1.0138504 1.0027701 - 12000 0.34853314 0 0.03201448 1.0027701 1.0027701 - 12100 0.34600048 0 -0.034833402 1.0083102 1.0027701 - 12200 0.33145631 0 -0.09865675 1.0083102 1.0027701 - 12300 0.32848884 0 -0.1248489 1.0083102 1.0027701 - 12400 0.3321344 0 -0.11266575 1.0027701 1.0083102 - 12500 0.32622305 0 -0.061634993 1.0083102 1.0083102 - 12600 0.36213537 0 -0.0090593315 1.0138504 1.0027701 - 12700 0.34673866 0 0.036734645 1.0138504 1.0027701 - 12800 0.34606618 0 0.086267678 1.0138504 1.0027701 - 12900 0.34271431 0 0.12415522 1.0027701 1.0027701 - 13000 0.31993287 0 0.13879926 1.0027701 1.0083102 - 13100 0.3422918 0 0.11978905 1.0083102 1.0027701 - 13200 0.33055236 0 0.062620483 1.0083102 1.0027701 - 13300 0.34652207 0 0.0043833459 1.0138504 1.0027701 - 13400 0.33574661 0 -0.04691024 1.0027701 1.0027701 - 13500 0.33940837 0 -0.074241604 1.0027701 1.0083102 - 13600 0.32093414 0 -0.1078027 1.0138504 1.0083102 - 13700 0.34336597 0 -0.10544097 1.0027701 1.0027701 - 13800 0.35806461 0 -0.072531559 1.0027701 1.0027701 - 13900 0.35209713 0 -0.018851408 1.0083102 1.0083102 - 14000 0.35702629 0 0.061046366 1.0027701 1.0027701 - 14100 0.33234093 0 0.094086465 1.0027701 1.0027701 - 14200 0.3459466 0 0.12186656 1.0027701 1.0027701 - 14300 0.3327428 0 0.11396572 1.0027701 1.0027701 - 14400 0.32409443 0 0.10658903 1.0083102 1.0083102 - 14500 0.35022184 0 0.083558031 1.0083102 1.0083102 - 14600 0.34823843 0 0.024605569 1.0083102 1.0083102 - 14700 0.35298973 0 -0.040418888 1.0027701 1.0027701 - 14800 0.33679845 0 -0.10067728 1.0027701 1.0027701 - 14900 0.32790966 0 -0.10925568 1.0083102 1.0027701 - 15000 0.34208495 0 -0.09568004 1.0193906 1.0027701 - 15100 0.33647529 0 -0.055652929 1.0027701 1.0027701 - 15200 0.35328398 0 -0.020236536 1.0083102 1.0027701 - 15300 0.34252669 0 0.026434179 1.0083102 1.0027701 - 15400 0.34409435 0 0.094410599 1.0027701 1.0027701 - 15500 0.32288994 0 0.12034455 1.0083102 1.0027701 - 15600 0.32109689 0 0.13645185 1.0083102 1.0027701 - 15700 0.33681572 0 0.098607746 1.0083102 1.0027701 - 15800 0.33635195 0 0.05570715 1.0083102 1.0083102 - 15900 0.34289757 0 0.013849092 1.0083102 1.0027701 - 16000 0.34225547 0 -0.035597548 1.0193906 1.0027701 - 16100 0.33660991 0 -0.076931881 1.0027701 1.0027701 - 16200 0.32802152 0 -0.12765884 1.0083102 1.0027701 - 16300 0.3469374 0 -0.10785455 1.0083102 1.0083102 - 16400 0.34053641 0 -0.070259853 1.0027701 1.0027701 - 16500 0.34610591 0 -0.014315306 1.0083102 1.0027701 - 16600 0.35109001 0 0.041251169 1.0138504 1.0027701 - 16700 0.34336905 0 0.077996627 1.0193906 1.0027701 - 16800 0.33277414 0 0.11053634 1.0027701 1.0083102 - 16900 0.32183338 0 0.11680626 1.0027701 1.0027701 - 17000 0.34044352 0 0.10806555 1.0138504 1.0027701 - 17100 0.32967873 0 0.067759786 1.0138504 1.0027701 - 17200 0.36172278 0 -0.0048631904 1.0083102 1.0083102 - 17300 0.35619435 0 -0.04215545 1.0027701 1.0027701 - 17400 0.34540936 0 -0.093994174 1.0083102 1.0027701 - 17500 0.33193585 0 -0.098831315 1.0083102 1.0027701 - 17600 0.3544756 0 -0.085660403 1.0083102 1.0083102 - 17700 0.34505209 0 -0.069640515 1.0193906 1.0083102 - 17800 0.36291124 0 -0.0063088133 1.0027701 1.0027701 - 17900 0.34255705 0 0.046794555 1.0027701 1.0027701 - 18000 0.34163238 0 0.11767705 1.0138504 1.0027701 - 18100 0.3466445 0 0.1351712 1.0193906 1.0083102 - 18200 0.33037668 0 0.12703659 1.0027701 1.0027701 - 18300 0.33677404 0 0.10956306 1.0027701 1.0083102 - 18400 0.34978954 0 0.087193072 1.0027701 1.0027701 - 18500 0.33354363 0 0.051095814 1.0138504 1.0027701 - 18600 0.34651729 0 0.0056245561 1.0027701 1.0027701 - 18700 0.32622232 0 -0.047319269 1.0027701 1.0083102 - 18800 0.32978847 0 -0.054929416 1.0138504 1.0027701 - 18900 0.34192451 0 -0.037252471 1.0027701 1.0027701 - 19000 0.34061294 0 -0.001167235 1.0083102 1.0027701 - 19100 0.34194478 0 0.016945224 1.0083102 1.0027701 - 19200 0.33321765 0 0.050665354 1.0193906 1.0027701 - 19300 0.33197783 0 0.080470585 1.0138504 1.0027701 - 19400 0.33284715 0 0.12423599 1.0193906 1.0027701 - 19500 0.33867856 0 0.12689524 1.0027701 1.0027701 - 19600 0.36092786 0 0.11417704 1.0027701 1.0027701 - 19700 0.34270183 0 0.069038291 1.0249307 1.0083102 - 19800 0.34880695 0 0.042483681 1.0083102 1.0083102 - 19900 0.33903644 0 0.034788638 1.0027701 1.0027701 - 20000 0.32590125 0 0.011383785 1.0083102 1.0083102 - 20100 0.30358859 0 0.0030743554 1.0138504 1.0027701 - 20200 0.31830224 0 0.017637826 1.0027701 1.0027701 - 20300 0.34195438 0 0.072811099 1.0193906 1.0083102 - 20400 0.31249563 0 0.10063541 1.0083102 1.0027701 - 20500 0.31544938 0 0.1405794 1.0027701 1.0027701 - 20600 0.30071644 0 0.12763486 1.0027701 1.0027701 - 20700 0.2890265 0 0.1136651 1.0083102 1.0027701 - 20800 0.28962296 0 0.094481978 1.0083102 1.0027701 - 20900 0.29447212 0 0.0967165 1.0138504 1.0083102 - 21000 0.31159961 0 0.067307231 1.0027701 1.0027701 - 21100 0.30490648 0 0.017689358 1.0027701 1.0083102 - 21200 0.30687262 0 -0.016055512 1.0027701 1.0083102 - 21300 0.30083286 0 -0.0014988997 1.0083102 1.0027701 - 21400 0.32070426 0 0.015960302 1.0083102 1.0083102 - 21500 0.31439311 0 0.038170385 1.0083102 1.0083102 - 21600 0.32617832 0 0.043263788 1.0083102 1.0027701 - 21700 0.35151793 0 0.066302727 1.0083102 1.0083102 - 21800 0.35912885 0 0.070099103 1.0027701 1.0027701 - 21900 0.32451958 0 0.068935768 1.0083102 1.0027701 - 22000 0.35219298 0 0.067161227 1.0138504 1.0083102 - 22100 0.34857705 0 0.032731746 1.0138504 1.0027701 - 22200 0.34750227 0 0.0056917695 1.0027701 1.0027701 - 22300 0.34766017 0 -0.0027090483 1.0027701 1.0083102 - 22400 0.33426062 0 -0.023196063 1.0027701 1.0083102 - 22500 0.34174625 0 -0.025019717 1.0083102 1.0027701 - 22600 0.3356145 0 -0.029707418 1.0138504 1.0027701 - 22700 0.3362653 0 -0.035815733 1.0083102 1.0027701 - 22800 0.33973405 0 -0.0024705835 1.0193906 1.0027701 - 22900 0.33813085 0 0.0077527467 1.0027701 1.0027701 - 23000 0.33339981 0 0.028340744 1.0027701 1.0027701 - 23100 0.34079832 0 0.018521302 1.0249307 1.0027701 - 23200 0.33074548 0 0.032378405 1.0138504 1.0083102 - 23300 0.32965664 0 0.035989589 1.0138504 1.0027701 - 23400 0.30927749 0 0.024581106 1.0083102 1.0027701 - 23500 0.32890632 0 0.01092479 1.0138504 1.0083102 - 23600 0.34137438 0 0.0094839745 1.0083102 1.0027701 - 23700 0.34512638 0 -0.012392771 1.0138504 1.0027701 - 23800 0.31781354 0 -0.012908449 1.0027701 1.0027701 - 23900 0.32405513 0 -0.015018071 1.0027701 1.0027701 - 24000 0.33549728 0 -0.012812915 1.0083102 1.0083102 - 24100 0.31368736 0 -0.020818372 1.0027701 1.0027701 - 24200 0.33533836 0 0.0056121057 1.0027701 1.0027701 - 24300 0.32530627 0 0.018183931 1.0249307 1.0027701 - 24400 0.31930662 0 0.027446878 1.0027701 1.0083102 - 24500 0.33540302 0 0.040307455 1.0193906 1.0027701 - 24600 0.34020431 0 0.027403921 1.0027701 1.0027701 - 24700 0.3291814 0 0.01204865 1.0083102 1.0027701 - 24800 0.31552604 0 0.019654111 1.0083102 1.0083102 - 24900 0.34727253 0 0.01670543 1.0027701 1.0027701 - 25000 0.35120105 0 0.0038617562 1.0083102 1.0027701 - 25100 0.32706871 0 -0.021196623 1.0193906 1.0083102 - 25200 0.32915282 0 -0.017146508 1.0083102 1.0027701 - 25300 0.32577518 0 -0.01312495 1.0083102 1.0027701 - 25400 0.33286855 0 0.0014726193 1.0138504 1.0027701 - 25500 0.33002601 0 0.0080974022 1.0083102 1.0027701 - 25600 0.34127655 0 0.014296091 1.0138504 1.0083102 - 25700 0.34048065 0 0.022513032 1.0083102 1.0027701 - 25800 0.33029079 0 0.038733531 1.0138504 1.0027701 - 25900 0.33031324 0 0.026156982 1.0027701 1.0027701 - 26000 0.32967371 0 0.028727383 1.0027701 1.0083102 - 26100 0.33775718 0 0.015607478 1.0027701 1.0083102 - 26200 0.35097144 0 0.012291703 1.0027701 1.0027701 - 26300 0.34303792 0 0.00094823191 1.0027701 1.0083102 - 26400 0.33632665 0 -0.0026904889 1.0027701 1.0083102 - 26500 0.33580127 0 -0.0074168555 1.0138504 1.0083102 - 26600 0.33063188 0 -0.020378601 1.0027701 1.0083102 - 26700 0.33581846 0 -0.00084397268 1.0027701 1.0027701 - 26800 0.32998532 0 0.015932208 1.0083102 1.0083102 - 26900 0.33825444 0 0.010428603 1.0193906 1.0027701 - 27000 0.32081518 0 0.019818223 1.0083102 1.0083102 - 27100 0.31448098 0 0.020093416 1.0027701 1.0027701 - 27200 0.32643684 0 0.021934917 1.0083102 1.0027701 - 27300 0.33289466 0 0.023713072 1.0138504 1.0083102 - 27400 0.32310744 0 0.024110945 1.0193906 1.0027701 - 27500 0.33115619 0 0.0025776713 1.0193906 1.0027701 - 27600 0.33295887 0 -0.010710764 1.0083102 1.0083102 - 27700 0.32968876 0 -0.0064595905 1.0083102 1.0027701 - 27800 0.34064581 0 -0.0086519116 1.0027701 1.0027701 - 27900 0.33559187 0 -0.0055753593 1.0249307 1.0027701 - 28000 0.32300727 0 -0.0004153384 1.0138504 1.0027701 - 28100 0.32147461 0 -0.0058543412 1.0083102 1.0083102 - 28200 0.35532383 0 0.013646951 1.0083102 1.0083102 - 28300 0.31507942 0 0.026532255 1.0083102 1.0027701 - 28400 0.32711006 0 0.033214981 1.0083102 1.0027701 - 28500 0.34472462 0 0.028050837 1.0027701 1.0027701 - 28600 0.33708059 0 0.019115676 1.0027701 1.0027701 - 28700 0.34478087 0 0.023743689 1.0193906 1.0027701 - 28800 0.34546686 0 0.0081772997 1.0083102 1.0027701 - 28900 0.34004886 0 0.017771865 1.0138504 1.0027701 - 29000 0.33604232 0 -0.010505671 1.0027701 1.0027701 - 29100 0.33541374 0 -0.016273261 1.0027701 1.0027701 - 29200 0.34347489 0 -0.010002306 1.0083102 1.0027701 - 29300 0.34083904 0 0.0089701784 1.0083102 1.0027701 - 29400 0.34846892 0 0.020765104 1.0027701 1.0027701 - 29500 0.3416255 0 0.022650856 1.0083102 1.0027701 - 29600 0.33725496 0 0.020693083 1.0027701 1.0027701 - 29700 0.34480638 0 0.024317128 1.0138504 1.0027701 - 29800 0.31459471 0 0.023097895 1.0027701 1.0027701 - 29900 0.33014448 0 0.03114046 1.0138504 1.0027701 - 30000 0.33741498 0 0.015624314 1.0083102 1.0027701 - 30100 0.32598657 0 -0.0018860541 1.0138504 1.0027701 - 30200 0.34855815 0 0.0017983372 1.0027701 1.0027701 - 30300 0.33375921 0 0.0010991235 1.0083102 1.0083102 - 30400 0.35008944 0 -0.0027316177 1.0027701 1.0027701 - 30500 0.33279729 0 -0.0035788551 1.0027701 1.0027701 - 30600 0.33868746 0 -0.0016249482 1.0027701 1.0027701 - 30700 0.33597034 0 -0.0014524001 1.0193906 1.0083102 - 30800 0.3227257 0 0.016353457 1.0193906 1.0027701 - 30900 0.32676516 0 0.027396654 1.0027701 1.0027701 - 31000 0.34083982 0 0.031606413 1.0138504 1.0083102 - 31100 0.32165238 0 0.013583368 1.0027701 1.0027701 - 31200 0.3428492 0 0.020486611 1.0138504 1.0027701 - 31300 0.32372541 0 0.01215566 1.0027701 1.0027701 - 31400 0.32734692 0 0.016229397 1.0083102 1.0027701 - 31500 0.33089262 0 0.0060426618 1.0027701 1.0027701 - 31600 0.34273493 0 -0.013456537 1.0083102 1.0083102 - 31700 0.32723905 0 -0.019243766 1.0027701 1.0027701 - 31800 0.33636488 0 0.0027814902 1.0027701 1.0083102 - 31900 0.32834805 0 0.00706877 1.0083102 1.0027701 - 32000 0.33995148 0 0.0018383309 1.0083102 1.0083102 - 32100 0.33412282 0 0.0076455933 1.0027701 1.0083102 - 32200 0.34334884 0 0.023586129 1.0083102 1.0027701 - 32300 0.32778925 0 0.020564321 1.0193906 1.0083102 - 32400 0.33163443 0 0.038878463 1.0083102 1.0027701 - 32500 0.32290345 0 0.022247461 1.0027701 1.0027701 - 32600 0.34113954 0 0.010966365 1.0138504 1.0027701 - 32700 0.33390633 0 0.0037777555 1.0083102 1.0083102 - 32800 0.34385341 0 0.010556575 1.0138504 1.0083102 - 32900 0.32137047 0 0.00022027143 1.0138504 1.0027701 - 33000 0.32079172 0 -0.017261272 1.0083102 1.0027701 - 33100 0.33570882 0 -0.0051942206 1.0027701 1.0027701 - 33200 0.34320894 0 -0.011515281 1.0138504 1.0027701 - 33300 0.32794746 0 -0.0018153673 1.0027701 1.0027701 - 33400 0.33060982 0 0.027118146 1.0027701 1.0027701 - 33500 0.33641809 0 0.02143035 1.0083102 1.0027701 - 33600 0.33643061 0 0.020833068 1.0083102 1.0027701 - 33700 0.3485949 0 0.030918751 1.0083102 1.0027701 - 33800 0.3283985 0 0.01947613 1.0193906 1.0027701 - 33900 0.31959761 0 0.021128147 1.0027701 1.0027701 - 34000 0.33897984 0 0.015270986 1.0027701 1.0083102 - 34100 0.32392267 0 0.0020130852 1.0083102 1.0027701 - 34200 0.33084514 0 -0.024316708 1.0027701 1.0027701 - 34300 0.3342259 0 -0.0059047764 1.0138504 1.0027701 - 34400 0.33385098 0 0.0063818721 1.0027701 1.0027701 - 34500 0.33255603 0 -0.01023837 1.0027701 1.0083102 - 34600 0.34766173 0 0.0056703013 1.0083102 1.0027701 - 34700 0.339822 0 0.0061648559 1.0083102 1.0027701 - 34800 0.33902329 0 0.030037037 1.0027701 1.0083102 - 34900 0.3216153 0 0.027996689 1.0027701 1.0027701 - 35000 0.32701056 0 0.024778517 1.0083102 1.0027701 - 35100 0.3124942 0 0.011316548 1.0027701 1.0027701 - 35200 0.34486416 0 0.011670127 1.0027701 1.0027701 - 35300 0.33275353 0 0.020491246 1.0027701 1.0027701 - 35400 0.33618763 0 0.014678874 1.0083102 1.0027701 - 35500 0.32352282 0 -0.018568683 1.0027701 1.0027701 - 35600 0.32617903 0 -0.012796912 1.0083102 1.0027701 - 35700 0.32378048 0 -0.021318585 1.0027701 1.0083102 - 35800 0.3371086 0 -0.0023678632 1.0027701 1.0083102 - 35900 0.33818476 0 0.011197742 1.0083102 1.0027701 - 36000 0.35142144 0 0.022520935 1.0083102 1.0027701 - 36100 0.35147297 0 0.020277852 1.0083102 1.0027701 - 36200 0.33489465 0 0.014564878 1.0193906 1.0027701 - 36300 0.33841515 0 0.036439962 1.0027701 1.0027701 - 36400 0.32301096 0 0.019966746 1.0027701 1.0027701 - 36500 0.35612028 0 0.036509556 1.0027701 1.0027701 - 36600 0.33841597 0 -0.0042180605 1.0083102 1.0083102 - 36700 0.34477654 0 -0.0052770853 1.0193906 1.0083102 - 36800 0.33804317 0 -0.013751733 1.0027701 1.0027701 - 36900 0.35003816 0 -0.0021184393 1.0027701 1.0027701 - 37000 0.32965041 0 -0.020900951 1.0083102 1.0027701 - 37100 0.34653095 0 -0.013667977 1.0027701 1.0027701 - 37200 0.35019871 0 -0.0071740923 1.0027701 1.0027701 - 37300 0.34859745 0 0.02006041 1.0138504 1.0027701 - 37400 0.35739859 0 0.020892822 1.0083102 1.0027701 - 37500 0.34128859 0 0.041072111 1.0083102 1.0083102 - 37600 0.33781905 0 0.023376738 1.0083102 1.0083102 - 37700 0.32961874 0 0.030953741 1.0138504 1.0027701 - 37800 0.343987 0 0.029579795 1.0083102 1.0027701 - 37900 0.33610448 0 0.036836828 1.0138504 1.0027701 - 38000 0.32757228 0 0.020902031 1.0027701 1.0027701 - 38100 0.32735808 0 0.019544751 1.0138504 1.0083102 - 38200 0.35646953 0 0.044607528 1.0027701 1.0083102 - 38300 0.32509773 0 0.03610738 1.0138504 1.0027701 - 38400 0.32111741 0 0.034474043 1.0083102 1.0083102 - 38500 0.30590608 0 0.053461212 1.0083102 1.0027701 - 38600 0.32322402 0 0.053453832 1.0138504 1.0083102 - 38700 0.33843057 0 0.076264534 1.0027701 1.0027701 - 38800 0.31350741 0 0.064733869 1.0083102 1.0027701 - 38900 0.31943061 0 0.067836769 1.0083102 1.0027701 - 39000 0.33775583 0 0.0788316 1.0083102 1.0083102 - 39100 0.34256036 0 0.075874935 1.0027701 1.0027701 - 39200 0.33128527 0 0.071610976 1.0193906 1.0027701 - 39300 0.34519653 0 0.046257301 1.0083102 1.0083102 - 39400 0.34351844 0 0.052422917 1.0027701 1.0027701 - 39500 0.35716037 0 0.048916058 1.0083102 1.0027701 - 39600 0.34000737 0 0.016149089 1.0083102 1.0027701 - 39700 0.34587892 0 0.021619621 1.0083102 1.0083102 - 39800 0.34878036 0 0.0092881327 1.0083102 1.0027701 - 39900 0.35225411 0 -0.011341599 1.0083102 1.0027701 - 40000 0.36309266 0 0.0050869295 1.0304709 1.0027701 -Loop time of 1.30389 on 2 procs for 40000 steps with 361 atoms - -Performance: 13252650.572 tau/day, 30677.432 timesteps/s -97.6% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.041365 | 0.041785 | 0.042204 | 0.2 | 3.20 -Bond | 0.35501 | 0.37082 | 0.38664 | 2.6 | 28.44 -Neigh | 0.30901 | 0.31013 | 0.31125 | 0.2 | 23.78 -Comm | 0.12939 | 0.15871 | 0.18803 | 7.4 | 12.17 -Output | 0.00489 | 0.005671 | 0.0064521 | 1.0 | 0.43 -Modify | 0.28208 | 0.28362 | 0.28516 | 0.3 | 21.75 -Other | | 0.1332 | | | 10.21 - -Nlocal: 180.5 ave 181 max 180 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 52.5 ave 53 max 52 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 0 ave 0 max 0 min -Histogram: 2 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 0 -Ave neighs/atom = 0 -Ave special neighs/atom = 31.0249 -Neighbor list builds = 3079 -Dangerous builds = 0 -Total wall time: 0:00:01 diff --git a/examples/balance/log.27Nov18.balance.bond.slow.g++.4 b/examples/balance/log.27Nov18.balance.bond.slow.g++.4 deleted file mode 100644 index c799657e53..0000000000 --- a/examples/balance/log.27Nov18.balance.bond.slow.g++.4 +++ /dev/null @@ -1,541 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 2d circle of particles inside a box with LJ walls - -variable b index 0 - -variable x index 50 -variable y index 20 -variable d index 20 - -# careful not to slam into wall too hard - -variable v index 0.3 -variable w index 0.08 - -units lj -dimension 2 -atom_style bond -boundary f f p - -lattice hex 0.85 -Lattice spacing in x,y,z = 1.16553 2.01877 1.16553 -region box block 0 $x 0 $y -0.5 0.5 -region box block 0 50 0 $y -0.5 0.5 -region box block 0 50 0 20 -0.5 0.5 -create_box 1 box bond/types 1 extra/bond/per/atom 6 -Created orthogonal box = (0 0 -0.582767) to (58.2767 40.3753 0.582767) - 2 by 2 by 1 MPI processor grid -region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 10 -create_atoms 1 region circle -Created 361 atoms - Time spent = 0.000665188 secs -mass 1 1.0 - -velocity all create 0.5 87287 loop geom -velocity all set $v $w 0 sum yes -velocity all set 0.3 $w 0 sum yes -velocity all set 0.3 0.08 0 sum yes - -pair_style lj/cut 2.5 -pair_coeff 1 1 10.0 1.0 2.5 - -bond_style harmonic -bond_coeff 1 10.0 1.2 - -create_bonds many all all 1 1.0 1.5 -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 42 29 1 - 2 neighbor lists, perpetual/occasional/extra = 1 1 0 - (1) command create_bonds, occasional - attributes: full, newton on - pair build: full/bin - stencil: full/bin/2d - bin: standard - (2) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Added 1014 bonds, new total = 1014 - 6 = max # of 1-2 neighbors - 30 = max # of 1-3 neighbors - 180 = max # of 1-4 neighbors - 36 = max # of special neighbors - -neighbor 0.3 bin -neigh_modify delay 0 every 1 check yes - -fix 1 all nve - -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 - -comm_style tiled -fix 10 all balance 50 0.9 rcb - -#compute 1 all property/atom proc -#variable p atom (c_1%10)+1 -#dump 2 all custom 50 tmp.dump id v_p x y z - -#dump 3 all image 200 image.*.jpg v_p type bond atom 0.25 # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 -#variable colors string # "red green blue yellow white # purple pink orange lime gray" -#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} - -thermo_style custom step temp epair press f_10[3] f_10 -thermo 100 - -run 40000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 42 29 1 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/cut, perpetual - attributes: half, newton on - pair build: half/bin/newton - stencil: half/bin/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.02 | 7.048 | 7.096 Mbytes -Step Temp E_pair Press f_10[3] f_10 - 0 0.57437856 0 0.26099453 3.2354571 1.0526316 - 100 0.29756515 0 0.10149401 1.0193906 1.0083102 - 200 0.35394813 0 0.075159099 1.0304709 1.0193906 - 300 0.39245849 0 0.033002384 1.0083102 1.0193906 - 400 0.34078347 0 -0.020825841 1.0304709 1.0083102 - 500 0.35201095 0 -0.062637506 1.0193906 1.0083102 - 600 0.34014717 0 -0.11122965 1.0415512 1.0083102 - 700 0.3323524 0 -0.11598015 1.0193906 1.0083102 - 800 0.35116047 0 -0.096162395 1.0193906 1.0193906 - 900 0.35695352 0 -0.01385176 1.0526316 1.0193906 - 1000 0.36986539 0 0.056772858 1.0083102 1.0083102 - 1100 0.34584644 0 0.084941323 1.0304709 1.0083102 - 1200 0.31921435 0 0.10545078 1.0415512 1.0083102 - 1300 0.32952819 0 0.124902 1.0083102 1.0193906 - 1400 0.34497365 0 0.12662081 1.0193906 1.0083102 - 1500 0.33429243 0 0.096230972 1.0193906 1.0193906 - 1600 0.33765387 0 0.025800542 1.0304709 1.0083102 - 1700 0.35134464 0 -0.04422593 1.0415512 1.0083102 - 1800 0.35003859 0 -0.096745576 1.0304709 1.0083102 - 1900 0.33839618 0 -0.095465943 1.0193906 1.0083102 - 2000 0.33732078 0 -0.094652802 1.0083102 1.0083102 - 2100 0.34552238 0 -0.076729261 1.0304709 1.0083102 - 2200 0.34893142 0 -0.036853228 1.0304709 1.0083102 - 2300 0.35379341 0 0.021124847 1.0304709 1.0193906 - 2400 0.34829744 0 0.09230184 1.0304709 1.0083102 - 2500 0.33038141 0 0.1399855 1.0193906 1.0193906 - 2600 0.30983019 0 0.12754742 1.0083102 1.0083102 - 2700 0.32992561 0 0.10485138 1.0415512 1.0083102 - 2800 0.34604747 0 0.066174138 1.0083102 1.0083102 - 2900 0.3444791 0 0.036590652 1.0193906 1.0193906 - 3000 0.34721342 0 -0.023793368 1.0193906 1.0193906 - 3100 0.33404314 0 -0.08374223 1.0415512 1.0083102 - 3200 0.33019355 0 -0.12715599 1.0083102 1.0304709 - 3300 0.33515177 0 -0.12217394 1.0193906 1.0083102 - 3400 0.33628481 0 -0.070877624 1.0193906 1.0083102 - 3500 0.34257038 0 -0.021612062 1.0304709 1.0083102 - 3600 0.32838009 0 0.030131228 1.0083102 1.0083102 - 3700 0.34462142 0 0.074586378 1.0526316 1.0193906 - 3800 0.30891825 0 0.10605673 1.0304709 1.0083102 - 3900 0.33847951 0 0.13956139 1.0083102 1.0083102 - 4000 0.32952079 0 0.12688129 1.0193906 1.0304709 - 4100 0.32646772 0 0.081089042 1.0304709 1.0193906 - 4200 0.35399503 0 0.013422873 1.0083102 1.0083102 - 4300 0.33154914 0 -0.050919508 1.0193906 1.0193906 - 4400 0.34113556 0 -0.083171 1.0304709 1.0083102 - 4500 0.32651708 0 -0.1063133 1.0304709 1.0083102 - 4600 0.34359609 0 -0.1076395 1.0083102 1.0083102 - 4700 0.34973537 0 -0.088231606 1.0415512 1.0083102 - 4800 0.35198515 0 -0.020901044 1.0415512 1.0083102 - 4900 0.35187284 0 0.043645941 1.0415512 1.0083102 - 5000 0.34887336 0 0.095698609 1.0193906 1.0083102 - 5100 0.30308163 0 0.11649328 1.0193906 1.0083102 - 5200 0.32401285 0 0.12072411 1.0193906 1.0083102 - 5300 0.33025072 0 0.10933161 1.0193906 1.0083102 - 5400 0.33288012 0 0.078356448 1.0083102 1.0193906 - 5500 0.35142492 0 0.036958063 1.0193906 1.0083102 - 5600 0.35125368 0 -0.041371343 1.0304709 1.0083102 - 5700 0.34547744 0 -0.096450846 1.0637119 1.0083102 - 5800 0.30939887 0 -0.12356656 1.0083102 1.0193906 - 5900 0.32315628 0 -0.11338676 1.0193906 1.0193906 - 6000 0.34117485 0 -0.066198961 1.0193906 1.0083102 - 6100 0.35298043 0 -0.016172816 1.0304709 1.0193906 - 6200 0.35130653 0 0.027660468 1.0415512 1.0083102 - 6300 0.35398766 0 0.087221238 1.0083102 1.0083102 - 6400 0.30963379 0 0.11990957 1.0415512 1.0083102 - 6500 0.3174541 0 0.14103528 1.0193906 1.0193906 - 6600 0.31989791 0 0.11575506 1.0304709 1.0193906 - 6700 0.33811477 0 0.060747353 1.0415512 1.0193906 - 6800 0.3424043 0 0.010357152 1.0193906 1.0083102 - 6900 0.34804319 0 -0.042621786 1.0193906 1.0083102 - 7000 0.35357865 0 -0.067248959 1.0083102 1.0083102 - 7100 0.33556885 0 -0.10983726 1.0193906 1.0083102 - 7200 0.33531101 0 -0.112179 1.0304709 1.0083102 - 7300 0.35742607 0 -0.078405267 1.0304709 1.0193906 - 7400 0.34577559 0 -0.01985432 1.0193906 1.0083102 - 7500 0.3498641 0 0.052289439 1.0526316 1.0083102 - 7600 0.33773715 0 0.092939035 1.0083102 1.0193906 - 7700 0.33093497 0 0.11924405 1.0304709 1.0083102 - 7800 0.31435814 0 0.12701724 1.0083102 1.0304709 - 7900 0.33132217 0 0.10793075 1.0083102 1.0083102 - 8000 0.33451798 0 0.077993125 1.0304709 1.0193906 - 8100 0.35188371 0 0.019929977 1.0193906 1.0083102 - 8200 0.33645742 0 -0.039302079 1.0193906 1.0193906 - 8300 0.3415632 0 -0.098067982 1.0193906 1.0083102 - 8400 0.30619282 0 -0.12952879 1.0304709 1.0193906 - 8500 0.34446484 0 -0.098084709 1.0083102 1.0083102 - 8600 0.33761673 0 -0.07069818 1.0193906 1.0083102 - 8700 0.34495452 0 -0.022458056 1.0193906 1.0083102 - 8800 0.33502983 0 0.027742411 1.0193906 1.0083102 - 8900 0.35418591 0 0.092390134 1.0083102 1.0193906 - 9000 0.31648387 0 0.12467398 1.0193906 1.0083102 - 9100 0.33994825 0 0.14460327 1.0193906 1.0083102 - 9200 0.33822571 0 0.11273284 1.0193906 1.0083102 - 9300 0.33260773 0 0.060063671 1.0083102 1.0193906 - 9400 0.36140305 0 0.021427642 1.0193906 1.0083102 - 9500 0.34273562 0 -0.034064202 1.0193906 1.0083102 - 9600 0.33867054 0 -0.089076906 1.0193906 1.0083102 - 9700 0.32088235 0 -0.12027075 1.0193906 1.0083102 - 9800 0.3320823 0 -0.11602794 1.0415512 1.0083102 - 9900 0.33916442 0 -0.080281044 1.0083102 1.0083102 - 10000 0.34852268 0 -0.01000914 1.0193906 1.0083102 - 10100 0.32955942 0 0.04258493 1.0083102 1.0083102 - 10200 0.34487898 0 0.086971308 1.0304709 1.0083102 - 10300 0.32325593 0 0.11558149 1.0304709 1.0193906 - 10400 0.30927871 0 0.12239437 1.0083102 1.0083102 - 10500 0.33176799 0 0.12285937 1.0193906 1.0083102 - 10600 0.35120027 0 0.084897432 1.0415512 1.0083102 - 10700 0.33129697 0 0.0053089279 1.0193906 1.0193906 - 10800 0.36028769 0 -0.04280715 1.0193906 1.0083102 - 10900 0.35552287 0 -0.084955999 1.0193906 1.0193906 - 11000 0.3406024 0 -0.096554577 1.0083102 1.0083102 - 11100 0.33041202 0 -0.10703492 1.0304709 1.0193906 - 11200 0.32442686 0 -0.084328121 1.0304709 1.0193906 - 11300 0.35952468 0 -0.020191965 1.0304709 1.0083102 - 11400 0.34610624 0 0.03440148 1.0193906 1.0193906 - 11500 0.3415612 0 0.1041929 1.0193906 1.0083102 - 11600 0.34040042 0 0.13215705 1.0304709 1.0083102 - 11700 0.33555094 0 0.12738686 1.0415512 1.0193906 - 11800 0.3458647 0 0.10963398 1.0083102 1.0193906 - 11900 0.33836678 0 0.067253864 1.0193906 1.0193906 - 12000 0.34853314 0 0.03201448 1.0193906 1.0083102 - 12100 0.34600048 0 -0.034833402 1.0304709 1.0193906 - 12200 0.33145631 0 -0.09865675 1.0193906 1.0193906 - 12300 0.32848884 0 -0.1248489 1.0193906 1.0083102 - 12400 0.3321344 0 -0.11266575 1.0083102 1.0083102 - 12500 0.32622305 0 -0.061634993 1.0304709 1.0083102 - 12600 0.36213537 0 -0.0090593315 1.0526316 1.0083102 - 12700 0.34673866 0 0.036734645 1.0193906 1.0083102 - 12800 0.34606618 0 0.086267678 1.0193906 1.0083102 - 12900 0.34271431 0 0.12415522 1.0193906 1.0083102 - 13000 0.31993287 0 0.13879926 1.0193906 1.0193906 - 13100 0.3422918 0 0.11978905 1.0083102 1.0083102 - 13200 0.33055236 0 0.062620483 1.0083102 1.0083102 - 13300 0.34652207 0 0.0043833459 1.0304709 1.0083102 - 13400 0.33574661 0 -0.04691024 1.0304709 1.0083102 - 13500 0.33940837 0 -0.074241604 1.0304709 1.0083102 - 13600 0.32093414 0 -0.1078027 1.0193906 1.0083102 - 13700 0.34336597 0 -0.10544097 1.0193906 1.0083102 - 13800 0.35806461 0 -0.072531559 1.0193906 1.0083102 - 13900 0.35209713 0 -0.018851408 1.0193906 1.0083102 - 14000 0.35702629 0 0.061046366 1.0083102 1.0083102 - 14100 0.33234093 0 0.094086465 1.0083102 1.0083102 - 14200 0.3459466 0 0.12186656 1.0193906 1.0193906 - 14300 0.3327428 0 0.11396572 1.0193906 1.0083102 - 14400 0.32409443 0 0.10658903 1.0193906 1.0193906 - 14500 0.35022184 0 0.083558031 1.0083102 1.0083102 - 14600 0.34823843 0 0.024605569 1.0083102 1.0193906 - 14700 0.35298973 0 -0.040418888 1.0193906 1.0083102 - 14800 0.33679845 0 -0.10067728 1.0193906 1.0083102 - 14900 0.32790966 0 -0.10925568 1.0193906 1.0193906 - 15000 0.34208495 0 -0.09568004 1.0193906 1.0083102 - 15100 0.33647529 0 -0.055652929 1.0083102 1.0083102 - 15200 0.35328398 0 -0.020236536 1.0415512 1.0193906 - 15300 0.34252669 0 0.026434179 1.0304709 1.0083102 - 15400 0.34409435 0 0.094410599 1.0304709 1.0083102 - 15500 0.32288994 0 0.12034455 1.0304709 1.0193906 - 15600 0.32109689 0 0.13645185 1.0193906 1.0083102 - 15700 0.33681572 0 0.098607746 1.0415512 1.0193906 - 15800 0.33635195 0 0.05570715 1.0193906 1.0083102 - 15900 0.34289757 0 0.013849092 1.0304709 1.0083102 - 16000 0.34225547 0 -0.035597548 1.0304709 1.0083102 - 16100 0.33660991 0 -0.076931881 1.0193906 1.0193906 - 16200 0.32802152 0 -0.12765884 1.0083102 1.0193906 - 16300 0.3469374 0 -0.10785455 1.0083102 1.0083102 - 16400 0.34053641 0 -0.070259853 1.0193906 1.0083102 - 16500 0.34610591 0 -0.014315306 1.0193906 1.0193906 - 16600 0.35109001 0 0.041251169 1.0304709 1.0083102 - 16700 0.34336905 0 0.077996627 1.0193906 1.0083102 - 16800 0.33277414 0 0.11053634 1.0083102 1.0083102 - 16900 0.32183338 0 0.11680626 1.0193906 1.0083102 - 17000 0.34044352 0 0.10806555 1.0193906 1.0083102 - 17100 0.32967873 0 0.067759786 1.0193906 1.0193906 - 17200 0.36172278 0 -0.0048631904 1.0304709 1.0083102 - 17300 0.35619435 0 -0.04215545 1.0193906 1.0083102 - 17400 0.34540936 0 -0.093994174 1.0193906 1.0083102 - 17500 0.33193585 0 -0.098831315 1.0083102 1.0193906 - 17600 0.3544756 0 -0.085660403 1.0193906 1.0083102 - 17700 0.34505209 0 -0.069640515 1.0304709 1.0193906 - 17800 0.36291124 0 -0.0063088133 1.0083102 1.0193906 - 17900 0.34255705 0 0.046794555 1.0304709 1.0193906 - 18000 0.34163238 0 0.11767705 1.0193906 1.0193906 - 18100 0.3466445 0 0.1351712 1.0415512 1.0193906 - 18200 0.33037668 0 0.12703659 1.0083102 1.0083102 - 18300 0.33677404 0 0.10956306 1.0083102 1.0304709 - 18400 0.34978954 0 0.087193072 1.0193906 1.0193906 - 18500 0.33354363 0 0.051095814 1.0526316 1.0193906 - 18600 0.34651729 0 0.0056245561 1.0304709 1.0193906 - 18700 0.32622232 0 -0.047319269 1.0083102 1.0193906 - 18800 0.32978847 0 -0.054929416 1.0304709 1.0193906 - 18900 0.34192451 0 -0.037252471 1.0193906 1.0083102 - 19000 0.34061294 0 -0.001167235 1.0083102 1.0083102 - 19100 0.34194478 0 0.016945224 1.0526316 1.0193906 - 19200 0.33321765 0 0.050665354 1.0526316 1.0083102 - 19300 0.33197783 0 0.080470585 1.0193906 1.0083102 - 19400 0.33284715 0 0.12423599 1.0304709 1.0304709 - 19500 0.33867856 0 0.12689524 1.0083102 1.0083102 - 19600 0.36092786 0 0.11417704 1.0193906 1.0083102 - 19700 0.34270183 0 0.069038291 1.0415512 1.0083102 - 19800 0.34880695 0 0.042483681 1.0193906 1.0083102 - 19900 0.33903644 0 0.034788638 1.0083102 1.0193906 - 20000 0.32590125 0 0.011383785 1.0193906 1.0083102 - 20100 0.30358859 0 0.0030743554 1.0526316 1.0193906 - 20200 0.31830224 0 0.017637826 1.0193906 1.0193906 - 20300 0.34195438 0 0.072811099 1.0304709 1.0193906 - 20400 0.31249563 0 0.10063541 1.0415512 1.0083102 - 20500 0.31544938 0 0.1405794 1.0083102 1.0083102 - 20600 0.30071644 0 0.12763486 1.0193906 1.0193906 - 20700 0.2890265 0 0.1136651 1.0083102 1.0083102 - 20800 0.28962296 0 0.094481978 1.0193906 1.0083102 - 20900 0.29447212 0 0.0967165 1.0193906 1.0193906 - 21000 0.31159961 0 0.067307231 1.0083102 1.0083102 - 21100 0.30490648 0 0.017689358 1.0083102 1.0304709 - 21200 0.30687262 0 -0.016055512 1.0193906 1.0193906 - 21300 0.30083286 0 -0.0014988997 1.0193906 1.0083102 - 21400 0.32070426 0 0.015960302 1.0083102 1.0083102 - 21500 0.31439311 0 0.038170385 1.0304709 1.0083102 - 21600 0.32617832 0 0.043263788 1.0083102 1.0083102 - 21700 0.35151793 0 0.066302727 1.0193906 1.0083102 - 21800 0.35912885 0 0.070099103 1.0193906 1.0083102 - 21900 0.32451958 0 0.068935768 1.0304709 1.0193906 - 22000 0.35219298 0 0.067161227 1.0193906 1.0193906 - 22100 0.34857705 0 0.032731746 1.0193906 1.0083102 - 22200 0.34750227 0 0.0056917695 1.0193906 1.0083102 - 22300 0.34766017 0 -0.0027090483 1.0193906 1.0083102 - 22400 0.33426062 0 -0.023196063 1.0304709 1.0083102 - 22500 0.34174625 0 -0.025019717 1.0083102 1.0083102 - 22600 0.3356145 0 -0.029707418 1.0304709 1.0193906 - 22700 0.3362653 0 -0.035815733 1.0193906 1.0193906 - 22800 0.33973405 0 -0.0024705835 1.0193906 1.0083102 - 22900 0.33813085 0 0.0077527467 1.0083102 1.0193906 - 23000 0.33339981 0 0.028340744 1.0193906 1.0083102 - 23100 0.34079832 0 0.018521302 1.0415512 1.0193906 - 23200 0.33074548 0 0.032378405 1.0193906 1.0083102 - 23300 0.32965664 0 0.035989589 1.0193906 1.0083102 - 23400 0.30927749 0 0.024581106 1.0193906 1.0083102 - 23500 0.32890632 0 0.01092479 1.0304709 1.0193906 - 23600 0.34137438 0 0.0094839745 1.0193906 1.0193906 - 23700 0.34512638 0 -0.012392771 1.0304709 1.0193906 - 23800 0.31781354 0 -0.012908449 1.0193906 1.0083102 - 23900 0.32405513 0 -0.015018071 1.0415512 1.0193906 - 24000 0.33549728 0 -0.012812915 1.0193906 1.0193906 - 24100 0.31368736 0 -0.020818372 1.0083102 1.0083102 - 24200 0.33533836 0 0.0056121057 1.0304709 1.0193906 - 24300 0.32530627 0 0.018183931 1.0415512 1.0083102 - 24400 0.31930662 0 0.027446878 1.0083102 1.0193906 - 24500 0.33540302 0 0.040307455 1.0304709 1.0083102 - 24600 0.34020431 0 0.027403921 1.0083102 1.0083102 - 24700 0.3291814 0 0.01204865 1.0193906 1.0083102 - 24800 0.31552604 0 0.019654111 1.0083102 1.0193906 - 24900 0.34727253 0 0.01670543 1.0193906 1.0083102 - 25000 0.35120105 0 0.0038617562 1.0193906 1.0083102 - 25100 0.32706871 0 -0.021196623 1.0415512 1.0193906 - 25200 0.32915282 0 -0.017146508 1.0083102 1.0193906 - 25300 0.32577518 0 -0.01312495 1.0193906 1.0083102 - 25400 0.33286855 0 0.0014726193 1.0415512 1.0193906 - 25500 0.33002601 0 0.0080974022 1.0193906 1.0083102 - 25600 0.34127655 0 0.014296091 1.0526316 1.0083102 - 25700 0.34048065 0 0.022513032 1.0193906 1.0083102 - 25800 0.33029079 0 0.038733531 1.0526316 1.0083102 - 25900 0.33031324 0 0.026156982 1.0083102 1.0193906 - 26000 0.32967371 0 0.028727383 1.0083102 1.0193906 - 26100 0.33775718 0 0.015607478 1.0083102 1.0193906 - 26200 0.35097144 0 0.012291703 1.0083102 1.0083102 - 26300 0.34303792 0 0.00094823191 1.0083102 1.0193906 - 26400 0.33632665 0 -0.0026904889 1.0193906 1.0193906 - 26500 0.33580127 0 -0.0074168555 1.0193906 1.0193906 - 26600 0.33063188 0 -0.020378601 1.0083102 1.0193906 - 26700 0.33581846 0 -0.00084397268 1.0083102 1.0193906 - 26800 0.32998532 0 0.015932208 1.0304709 1.0193906 - 26900 0.33825444 0 0.010428603 1.0304709 1.0083102 - 27000 0.32081518 0 0.019818223 1.0415512 1.0193906 - 27100 0.31448098 0 0.020093416 1.0193906 1.0083102 - 27200 0.32643684 0 0.021934917 1.0193906 1.0083102 - 27300 0.33289466 0 0.023713072 1.0415512 1.0083102 - 27400 0.32310744 0 0.024110945 1.0415512 1.0083102 - 27500 0.33115619 0 0.0025776713 1.0304709 1.0193906 - 27600 0.33295887 0 -0.010710764 1.0193906 1.0193906 - 27700 0.32968876 0 -0.0064595905 1.0193906 1.0193906 - 27800 0.34064581 0 -0.0086519116 1.0193906 1.0083102 - 27900 0.33559187 0 -0.0055753593 1.0526316 1.0083102 - 28000 0.32300727 0 -0.0004153384 1.0304709 1.0083102 - 28100 0.32147461 0 -0.0058543412 1.0083102 1.0083102 - 28200 0.35532383 0 0.013646951 1.0304709 1.0083102 - 28300 0.31507942 0 0.026532255 1.0415512 1.0193906 - 28400 0.32711006 0 0.033214981 1.0193906 1.0083102 - 28500 0.34472462 0 0.028050837 1.0304709 1.0193906 - 28600 0.33708059 0 0.019115676 1.0083102 1.0083102 - 28700 0.34478087 0 0.023743689 1.0304709 1.0083102 - 28800 0.34546686 0 0.0081772997 1.0304709 1.0083102 - 28900 0.34004886 0 0.017771865 1.0415512 1.0193906 - 29000 0.33604232 0 -0.010505671 1.0304709 1.0193906 - 29100 0.33541374 0 -0.016273261 1.0083102 1.0083102 - 29200 0.34347489 0 -0.010002306 1.0083102 1.0083102 - 29300 0.34083904 0 0.0089701784 1.0193906 1.0193906 - 29400 0.34846892 0 0.020765104 1.0083102 1.0083102 - 29500 0.3416255 0 0.022650856 1.0304709 1.0083102 - 29600 0.33725496 0 0.020693083 1.0193906 1.0193906 - 29700 0.34480638 0 0.024317128 1.0304709 1.0083102 - 29800 0.31459471 0 0.023097895 1.0083102 1.0083102 - 29900 0.33014448 0 0.03114046 1.0193906 1.0083102 - 30000 0.33741498 0 0.015624314 1.0083102 1.0193906 - 30100 0.32598657 0 -0.0018860541 1.0415512 1.0193906 - 30200 0.34855815 0 0.0017983372 1.0083102 1.0083102 - 30300 0.33375921 0 0.0010991235 1.0083102 1.0193906 - 30400 0.35008944 0 -0.0027316177 1.0193906 1.0083102 - 30500 0.33279729 0 -0.0035788551 1.0193906 1.0193906 - 30600 0.33868746 0 -0.0016249482 1.0083102 1.0193906 - 30700 0.33597034 0 -0.0014524001 1.0193906 1.0193906 - 30800 0.3227257 0 0.016353457 1.0193906 1.0193906 - 30900 0.32676516 0 0.027396654 1.0193906 1.0083102 - 31000 0.34083982 0 0.031606413 1.0415512 1.0193906 - 31100 0.32165238 0 0.013583368 1.0083102 1.0083102 - 31200 0.3428492 0 0.020486611 1.0304709 1.0083102 - 31300 0.32372541 0 0.01215566 1.0083102 1.0083102 - 31400 0.32734692 0 0.016229397 1.0083102 1.0083102 - 31500 0.33089262 0 0.0060426618 1.0083102 1.0083102 - 31600 0.34273493 0 -0.013456537 1.0083102 1.0193906 - 31700 0.32723905 0 -0.019243766 1.0193906 1.0083102 - 31800 0.33636488 0 0.0027814902 1.0083102 1.0083102 - 31900 0.32834805 0 0.00706877 1.0083102 1.0193906 - 32000 0.33995148 0 0.0018383309 1.0193906 1.0193906 - 32100 0.33412282 0 0.0076455933 1.0083102 1.0083102 - 32200 0.34334884 0 0.023586129 1.0083102 1.0083102 - 32300 0.32778925 0 0.020564321 1.0193906 1.0083102 - 32400 0.33163443 0 0.038878463 1.0193906 1.0083102 - 32500 0.32290345 0 0.022247461 1.0193906 1.0083102 - 32600 0.34113954 0 0.010966365 1.0304709 1.0193906 - 32700 0.33390633 0 0.0037777555 1.0193906 1.0083102 - 32800 0.34385341 0 0.010556575 1.0193906 1.0193906 - 32900 0.32137047 0 0.00022027143 1.0304709 1.0193906 - 33000 0.32079172 0 -0.017261272 1.0193906 1.0083102 - 33100 0.33570882 0 -0.0051942206 1.0083102 1.0083102 - 33200 0.34320894 0 -0.011515281 1.0193906 1.0083102 - 33300 0.32794746 0 -0.0018153673 1.0083102 1.0193906 - 33400 0.33060982 0 0.027118146 1.0193906 1.0083102 - 33500 0.33641809 0 0.02143035 1.0083102 1.0193906 - 33600 0.33643061 0 0.020833068 1.0304709 1.0083102 - 33700 0.3485949 0 0.030918751 1.0193906 1.0083102 - 33800 0.3283985 0 0.01947613 1.0193906 1.0083102 - 33900 0.31959761 0 0.021128147 1.0083102 1.0304709 - 34000 0.33897984 0 0.015270986 1.0193906 1.0083102 - 34100 0.32392267 0 0.0020130852 1.0304709 1.0193906 - 34200 0.33084514 0 -0.024316708 1.0193906 1.0193906 - 34300 0.3342259 0 -0.0059047764 1.0193906 1.0304709 - 34400 0.33385098 0 0.0063818721 1.0193906 1.0083102 - 34500 0.33255603 0 -0.01023837 1.0083102 1.0304709 - 34600 0.34766173 0 0.0056703013 1.0193906 1.0083102 - 34700 0.339822 0 0.0061648559 1.0193906 1.0193906 - 34800 0.33902329 0 0.030037037 1.0415512 1.0193906 - 34900 0.3216153 0 0.027996689 1.0083102 1.0083102 - 35000 0.32701056 0 0.024778517 1.0193906 1.0083102 - 35100 0.3124942 0 0.011316548 1.0304709 1.0193906 - 35200 0.34486416 0 0.011670127 1.0083102 1.0083102 - 35300 0.33275353 0 0.020491246 1.0193906 1.0193906 - 35400 0.33618763 0 0.014678874 1.0083102 1.0083102 - 35500 0.32352282 0 -0.018568683 1.0193906 1.0193906 - 35600 0.32617903 0 -0.012796912 1.0193906 1.0304709 - 35700 0.32378048 0 -0.021318585 1.0193906 1.0193906 - 35800 0.3371086 0 -0.0023678632 1.0193906 1.0193906 - 35900 0.33818476 0 0.011197742 1.0193906 1.0083102 - 36000 0.35142144 0 0.022520935 1.0083102 1.0193906 - 36100 0.35147297 0 0.020277852 1.0193906 1.0083102 - 36200 0.33489465 0 0.014564878 1.0415512 1.0193906 - 36300 0.33841515 0 0.036439962 1.0193906 1.0083102 - 36400 0.32301096 0 0.019966746 1.0304709 1.0083102 - 36500 0.35612028 0 0.036509556 1.0083102 1.0083102 - 36600 0.33841597 0 -0.0042180605 1.0193906 1.0193906 - 36700 0.34477654 0 -0.0052770853 1.0193906 1.0083102 - 36800 0.33804317 0 -0.013751733 1.0083102 1.0083102 - 36900 0.35003816 0 -0.0021184393 1.0083102 1.0083102 - 37000 0.32965041 0 -0.020900951 1.0193906 1.0083102 - 37100 0.34653095 0 -0.013667977 1.0193906 1.0083102 - 37200 0.35019871 0 -0.0071740923 1.0193906 1.0304709 - 37300 0.34859745 0 0.02006041 1.0304709 1.0083102 - 37400 0.35739859 0 0.020892822 1.0304709 1.0083102 - 37500 0.34128859 0 0.041072111 1.0193906 1.0193906 - 37600 0.33781905 0 0.023376738 1.0193906 1.0083102 - 37700 0.32961874 0 0.030953741 1.0193906 1.0083102 - 37800 0.343987 0 0.029579795 1.0083102 1.0083102 - 37900 0.33610448 0 0.036836828 1.0415512 1.0304709 - 38000 0.32757228 0 0.020902031 1.0193906 1.0193906 - 38100 0.32735808 0 0.019544751 1.0193906 1.0083102 - 38200 0.35646953 0 0.044607528 1.0083102 1.0304709 - 38300 0.32509773 0 0.03610738 1.0193906 1.0083102 - 38400 0.32111741 0 0.034474043 1.0193906 1.0193906 - 38500 0.30590608 0 0.053461212 1.0304709 1.0083102 - 38600 0.32322402 0 0.053453832 1.0193906 1.0304709 - 38700 0.33843057 0 0.076264534 1.0083102 1.0193906 - 38800 0.31350741 0 0.064733869 1.0415512 1.0083102 - 38900 0.31943061 0 0.067836769 1.0304709 1.0193906 - 39000 0.33775583 0 0.0788316 1.0193906 1.0193906 - 39100 0.34256036 0 0.075874935 1.0083102 1.0193906 - 39200 0.33128527 0 0.071610976 1.0193906 1.0083102 - 39300 0.34519653 0 0.046257301 1.0193906 1.0083102 - 39400 0.34351844 0 0.052422917 1.0304709 1.0304709 - 39500 0.35716037 0 0.048916058 1.0304709 1.0083102 - 39600 0.34000737 0 0.016149089 1.0304709 1.0083102 - 39700 0.34587892 0 0.021619621 1.0526316 1.0083102 - 39800 0.34878036 0 0.0092881327 1.0083102 1.0193906 - 39900 0.35225411 0 -0.011341599 1.0083102 1.0193906 - 40000 0.36309266 0 0.0050869295 1.0304709 1.0083102 -Loop time of 1.12306 on 4 procs for 40000 steps with 361 atoms - -Performance: 15386559.518 tau/day, 35617.036 timesteps/s -90.9% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.023094 | 0.023348 | 0.023582 | 0.1 | 2.08 -Bond | 0.17827 | 0.19268 | 0.21984 | 3.7 | 17.16 -Neigh | 0.18144 | 0.18231 | 0.18323 | 0.1 | 16.23 -Comm | 0.23759 | 0.28095 | 0.30794 | 5.0 | 25.02 -Output | 0.0062952 | 0.013342 | 0.034226 | 10.4 | 1.19 -Modify | 0.2379 | 0.24327 | 0.25076 | 0.9 | 21.66 -Other | | 0.1871 | | | 16.66 - -Nlocal: 90.25 ave 91 max 89 min -Histogram: 1 0 0 0 0 1 0 0 0 2 -Nghost: 59.25 ave 61 max 56 min -Histogram: 1 0 0 0 0 0 0 0 2 1 -Neighs: 0 ave 0 max 0 min -Histogram: 4 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 0 -Ave neighs/atom = 0 -Ave special neighs/atom = 31.0249 -Neighbor list builds = 3079 -Dangerous builds = 0 -Total wall time: 0:00:01 diff --git a/examples/balance/log.27Nov18.balance.clock.dynamic.g++.2 b/examples/balance/log.27Nov18.balance.clock.dynamic.g++.2 deleted file mode 100644 index 781a609bd2..0000000000 --- a/examples/balance/log.27Nov18.balance.clock.dynamic.g++.2 +++ /dev/null @@ -1,227 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 2 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000549078 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes -fix p all property/atom d_WEIGHT -compute p all property/atom d_WEIGHT -fix 0 all balance 50 1.0 shift x 10 1.0 weight time 1.0 weight store WEIGHT -variable maximb equal f_0[1] -variable iter equal f_0[2] -variable prev equal f_0[3] -variable final equal f_0 - -#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" - -fix 1 all nve - -#dump id all atom 50 dump.melt -#dump id all custom 50 dump.lammpstrj id type x y z c_p - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 -run 500 -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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) = 4.562 | 4.753 | 4.944 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 - 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 4738.2137 - 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 4738.2137 - 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 4738.2137 - 200 0.536665 -6.2530113 0 -5.448215 -1.933468 4738.2137 - 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 - 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 4738.2137 - 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 4738.2137 - 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 4738.2137 - 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 4738.2137 - 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 -Loop time of 3.7099 on 2 procs for 500 steps with 4000 atoms - -Performance: 58222.644 tau/day, 134.775 timesteps/s -99.2% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.5145 | 2.5951 | 2.6756 | 5.0 | 69.95 -Neigh | 0.8388 | 0.88634 | 0.93387 | 5.0 | 23.89 -Comm | 0.17027 | 0.20258 | 0.23489 | 7.2 | 5.46 -Output | 0.00029612 | 0.00032723 | 0.00035834 | 0.0 | 0.01 -Modify | 0.016136 | 0.017057 | 0.017979 | 0.7 | 0.46 -Other | | 0.008504 | | | 0.23 - -Nlocal: 2000 ave 2157 max 1843 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10465.5 ave 10840 max 10091 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 298070 ave 305706 max 290433 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 596139 -Ave neighs/atom = 149.035 -Neighbor list builds = 51 -Dangerous builds = 0 -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.944 | 4.947 | 4.951 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 - 550 0.54137926 -6.2592773 0 -5.4474115 -1.9770236 4738.2137 - 600 0.54022886 -6.2573307 0 -5.44719 -1.9619637 4738.2137 - 650 0.54709009 -6.2678862 0 -5.4474562 -1.9958342 4738.2137 - 700 0.54590044 -6.2656903 0 -5.4470444 -1.9957108 4738.2137 - 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 4738.2137 - 800 0.5520987 -6.2739184 0 -5.4459774 -2.0084991 4738.2137 - 850 0.54963958 -6.2702473 0 -5.445994 -1.9740031 4738.2137 - 900 0.54390586 -6.2615476 0 -5.4458927 -1.9400871 4738.2137 - 950 0.54741732 -6.2665755 0 -5.4456548 -1.9466417 4738.2137 - 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 -Loop time of 3.70634 on 2 procs for 500 steps with 4000 atoms - -Performance: 58278.514 tau/day, 134.904 timesteps/s -99.0% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.5536 | 2.6173 | 2.6811 | 3.9 | 70.62 -Neigh | 0.82942 | 0.88683 | 0.94424 | 6.1 | 23.93 -Comm | 0.16927 | 0.17474 | 0.1802 | 1.3 | 4.71 -Output | 0.00030422 | 0.00033307 | 0.00036192 | 0.0 | 0.01 -Modify | 0.016714 | 0.017824 | 0.018933 | 0.8 | 0.48 -Other | | 0.009277 | | | 0.25 - -Nlocal: 2000 ave 2136 max 1864 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10413.5 ave 10877 max 9950 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 300836 ave 312313 max 289358 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 601671 -Ave neighs/atom = 150.418 -Neighbor list builds = 51 -Dangerous builds = 0 -fix 0 all balance 50 1.0 shift x 5 1.0 weight neigh 0.5 weight time 0.66 weight store WEIGHT -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.951 | 5.142 | 5.334 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 - 1050 0.54633412 -6.2656384 0 -5.4463421 -1.9012895 4738.2137 - 1100 0.54325667 -6.2612166 0 -5.4465353 -1.8870463 4738.2137 - 1150 0.55057583 -6.2719187 0 -5.4462614 -1.9575881 4738.2137 - 1200 0.53728175 -6.251744 0 -5.4460228 -1.8124097 4738.2137 - 1250 0.54077561 -6.2567544 0 -5.4457938 -1.8418133 4738.2137 - 1300 0.54430333 -6.260995 0 -5.4447442 -1.856351 4738.2137 - 1350 0.55097839 -6.2715909 0 -5.4453299 -1.9014337 4738.2137 - 1400 0.53858139 -6.2526781 0 -5.445008 -1.7965773 4738.2137 - 1450 0.5421844 -6.2574683 0 -5.444395 -1.7901189 4738.2137 - 1500 0.54200617 -6.2571433 0 -5.4443373 -1.8000344 4738.2137 -Loop time of 4.8272 on 2 procs for 500 steps with 4000 atoms - -Performance: 44746.478 tau/day, 103.580 timesteps/s -98.5% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.9951 | 2.6814 | 3.3676 | 41.9 | 55.55 -Neigh | 0.82826 | 0.90961 | 0.99095 | 8.5 | 18.84 -Comm | 0.44043 | 1.2083 | 1.9762 | 69.9 | 25.03 -Output | 0.00034881 | 0.0003655 | 0.00038218 | 0.0 | 0.01 -Modify | 0.016762 | 0.01755 | 0.018337 | 0.6 | 0.36 -Other | | 0.01001 | | | 0.21 - -Nlocal: 2000 ave 2564 max 1436 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10334 ave 10752 max 9916 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 302958 ave 499873 max 106044 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 605917 -Ave neighs/atom = 151.479 -Neighbor list builds = 51 -Dangerous builds = 0 -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.955 | 5.336 | 5.717 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 1500 0.54200617 -6.2571433 0 -5.4443373 -1.8000344 4738.2137 - 1550 0.53713591 -6.2504068 0 -5.4449044 -1.7647087 4738.2137 - 1600 0.5467956 -6.2646482 0 -5.4446599 -1.8115778 4738.2137 - 1650 0.53806575 -6.2519004 0 -5.4450036 -1.7409135 4738.2137 - 1700 0.5347949 -6.2468958 0 -5.444904 -1.7162322 4738.2137 - 1750 0.53714528 -6.2506529 0 -5.4451365 -1.7340402 4738.2137 - 1800 0.5274989 -6.2358675 0 -5.444817 -1.6874989 4738.2137 - 1850 0.54585906 -6.2629475 0 -5.4443636 -1.7758918 4738.2137 - 1900 0.5301071 -6.2387551 0 -5.4437932 -1.6381903 4738.2137 - 1950 0.54288149 -6.2582818 0 -5.4441632 -1.7367819 4738.2137 - 2000 0.52766162 -6.2348587 0 -5.4435642 -1.5589151 4738.2137 -Loop time of 4.90351 on 2 procs for 500 steps with 4000 atoms - -Performance: 44050.062 tau/day, 101.968 timesteps/s -98.1% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.9937 | 2.6502 | 3.3067 | 40.3 | 54.05 -Neigh | 0.81645 | 0.88655 | 0.95664 | 7.4 | 18.08 -Comm | 0.61197 | 1.3389 | 2.0659 | 62.8 | 27.31 -Output | 0.00036287 | 0.0003773 | 0.00039172 | 0.0 | 0.01 -Modify | 0.016585 | 0.017429 | 0.018274 | 0.6 | 0.36 -Other | | 0.01003 | | | 0.20 - -Nlocal: 2000 ave 2564 max 1436 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10256 ave 10620 max 9892 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 303988 ave 502064 max 105911 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 607975 -Ave neighs/atom = 151.994 -Neighbor list builds = 51 -Dangerous builds = 0 -Total wall time: 0:00:17 diff --git a/examples/balance/log.27Nov18.balance.clock.dynamic.g++.4 b/examples/balance/log.27Nov18.balance.clock.dynamic.g++.4 deleted file mode 100644 index 94780b14df..0000000000 --- a/examples/balance/log.27Nov18.balance.clock.dynamic.g++.4 +++ /dev/null @@ -1,227 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 4 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000421762 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes -fix p all property/atom d_WEIGHT -compute p all property/atom d_WEIGHT -fix 0 all balance 50 1.0 shift x 10 1.0 weight time 1.0 weight store WEIGHT -variable maximb equal f_0[1] -variable iter equal f_0[2] -variable prev equal f_0[3] -variable final equal f_0 - -#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" - -fix 1 all nve - -#dump id all atom 50 dump.melt -#dump id all custom 50 dump.lammpstrj id type x y z c_p - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 -run 500 -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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) = 3.691 | 4.072 | 4.454 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 - 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 4738.2137 - 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 4738.2137 - 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 4738.2137 - 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 4738.2137 - 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 - 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 4738.2137 - 350 0.55600296 -6.2801497 0 -5.4463538 -2.0394056 4738.2137 - 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 4738.2137 - 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 4738.2137 - 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 -Loop time of 2.69458 on 4 procs for 500 steps with 4000 atoms - -Performance: 80160.913 tau/day, 185.558 timesteps/s -94.2% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.0903 | 1.4509 | 1.7199 | 22.5 | 53.84 -Neigh | 0.31688 | 0.47906 | 0.71852 | 24.2 | 17.78 -Comm | 0.60463 | 0.72402 | 0.84257 | 12.7 | 26.87 -Output | 0.00035119 | 0.00067121 | 0.0015202 | 0.0 | 0.02 -Modify | 0.00811 | 0.010936 | 0.014029 | 2.7 | 0.41 -Other | | 0.02904 | | | 1.08 - -Nlocal: 1000 ave 1504 max 634 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Nghost: 8759.25 ave 9896 max 8021 min -Histogram: 2 0 0 0 0 1 0 0 0 1 -Neighs: 149308 ave 179946 max 116419 min -Histogram: 1 1 0 0 0 0 0 0 1 1 - -Total # of neighbors = 597231 -Ave neighs/atom = 149.308 -Neighbor list builds = 50 -Dangerous builds = 0 -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.097 | 4.288 | 4.475 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 - 550 0.53879347 -6.2554274 0 -5.4474393 -1.9756834 4738.2137 - 600 0.54275982 -6.2616799 0 -5.4477437 -1.9939993 4738.2137 - 650 0.54526651 -6.265098 0 -5.4474027 -2.0303672 4738.2137 - 700 0.54369381 -6.263201 0 -5.4478642 -1.9921967 4738.2137 - 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 4738.2137 - 800 0.55061744 -6.2725556 0 -5.4468359 -2.0100922 4738.2137 - 850 0.55371614 -6.2763992 0 -5.4460326 -2.0065329 4738.2137 - 900 0.54756622 -6.2668303 0 -5.4456863 -1.9796122 4738.2137 - 950 0.54791593 -6.2673161 0 -5.4456477 -1.9598278 4738.2137 - 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 -Loop time of 2.64502 on 4 procs for 500 steps with 4000 atoms - -Performance: 81662.873 tau/day, 189.034 timesteps/s -93.3% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.1279 | 1.4127 | 1.6268 | 18.0 | 53.41 -Neigh | 0.32225 | 0.49572 | 0.76053 | 26.2 | 18.74 -Comm | 0.64504 | 0.6974 | 0.75498 | 5.7 | 26.37 -Output | 0.00035477 | 0.00062996 | 0.001343 | 0.0 | 0.02 -Modify | 0.0077929 | 0.010538 | 0.013856 | 2.6 | 0.40 -Other | | 0.02803 | | | 1.06 - -Nlocal: 1000 ave 1437 max 597 min -Histogram: 1 1 0 0 0 0 0 1 0 1 -Nghost: 8674 ave 9370 max 8013 min -Histogram: 1 0 1 0 0 0 0 1 0 1 -Neighs: 150170 ave 187030 max 102149 min -Histogram: 1 0 0 0 0 1 0 1 0 1 - -Total # of neighbors = 600678 -Ave neighs/atom = 150.169 -Neighbor list builds = 53 -Dangerous builds = 0 -fix 0 all balance 50 1.0 shift x 5 1.0 weight neigh 0.5 weight time 0.66 weight store WEIGHT -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.08 | 4.269 | 4.458 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 - 1050 0.54629742 -6.2657526 0 -5.4465113 -1.945821 4738.2137 - 1100 0.55427881 -6.2781733 0 -5.446963 -2.0021027 4738.2137 - 1150 0.54730654 -6.267257 0 -5.4465025 -1.9420678 4738.2137 - 1200 0.5388281 -6.2547963 0 -5.4467562 -1.890178 4738.2137 - 1250 0.54848768 -6.2694237 0 -5.4468979 -1.9636797 4738.2137 - 1300 0.54134321 -6.2590728 0 -5.447261 -1.9170271 4738.2137 - 1350 0.53564389 -6.2501521 0 -5.4468871 -1.8642306 4738.2137 - 1400 0.53726924 -6.2518379 0 -5.4461355 -1.8544028 4738.2137 - 1450 0.54525935 -6.2632653 0 -5.4455808 -1.9072158 4738.2137 - 1500 0.54223346 -6.2591057 0 -5.4459588 -1.8866984 4738.2137 -Loop time of 2.61342 on 4 procs for 500 steps with 4000 atoms - -Performance: 82650.254 tau/day, 191.320 timesteps/s -93.1% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.222 | 1.4442 | 1.5812 | 12.3 | 55.26 -Neigh | 0.29672 | 0.48201 | 0.73859 | 27.6 | 18.44 -Comm | 0.59138 | 0.65738 | 0.70906 | 6.5 | 25.15 -Output | 0.00036502 | 0.00091559 | 0.0020845 | 0.0 | 0.04 -Modify | 0.0095406 | 0.012674 | 0.017643 | 2.8 | 0.48 -Other | | 0.01621 | | | 0.62 - -Nlocal: 1000 ave 1446 max 670 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Nghost: 8641 ave 9376 max 8019 min -Histogram: 1 1 0 0 0 0 0 1 0 1 -Neighs: 150494 ave 184085 max 105390 min -Histogram: 1 0 1 0 0 0 0 0 0 2 - -Total # of neighbors = 601974 -Ave neighs/atom = 150.494 -Neighbor list builds = 51 -Dangerous builds = 0 -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.08 | 4.269 | 4.458 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 1500 0.54223346 -6.2591057 0 -5.4459588 -1.8866984 4738.2137 - 1550 0.55327018 -6.2750125 0 -5.4453148 -1.9506585 4738.2137 - 1600 0.5441901 -6.2612622 0 -5.4451811 -1.8559436 4738.2137 - 1650 0.54710046 -6.2661938 0 -5.4457483 -1.8882766 4738.2137 - 1700 0.5366569 -6.2504957 0 -5.4457116 -1.8067998 4738.2137 - 1750 0.5486468 -6.2681121 0 -5.4453476 -1.8662631 4738.2137 - 1800 0.54476176 -6.2615037 0 -5.4445653 -1.8352743 4738.2137 - 1850 0.5414305 -6.2555519 0 -5.4436091 -1.8005747 4738.2137 - 1900 0.53992655 -6.2541344 0 -5.444447 -1.7768718 4738.2137 - 1950 0.54666071 -6.2640943 0 -5.4443082 -1.7947052 4738.2137 - 2000 0.54556196 -6.2625262 0 -5.4443879 -1.8071631 4738.2137 -Loop time of 2.81593 on 4 procs for 500 steps with 4000 atoms - -Performance: 76706.532 tau/day, 177.561 timesteps/s -90.7% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.2508 | 1.4839 | 1.6521 | 13.4 | 52.70 -Neigh | 0.34188 | 0.54016 | 0.82358 | 27.6 | 19.18 -Comm | 0.70575 | 0.75254 | 0.80167 | 4.6 | 26.72 -Output | 0.00041604 | 0.001362 | 0.0041099 | 4.3 | 0.05 -Modify | 0.010564 | 0.013653 | 0.018 | 2.7 | 0.48 -Other | | 0.02432 | | | 0.86 - -Nlocal: 1000 ave 1555 max 569 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Nghost: 8672.75 ave 9821 max 7993 min -Histogram: 2 0 0 0 1 0 0 0 0 1 -Neighs: 151656 ave 164603 max 133455 min -Histogram: 1 0 0 0 0 0 1 1 0 1 - -Total # of neighbors = 606625 -Ave neighs/atom = 151.656 -Neighbor list builds = 56 -Dangerous builds = 0 -Total wall time: 0:00:10 diff --git a/examples/balance/log.27Nov18.balance.clock.static.g++.2 b/examples/balance/log.27Nov18.balance.clock.static.g++.2 deleted file mode 100644 index 6f96ac4fef..0000000000 --- a/examples/balance/log.27Nov18.balance.clock.static.g++.2 +++ /dev/null @@ -1,195 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -variable factor index 1.0 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 2 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000517368 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes - -group fast type 1 -2600 atoms in group fast -group slow type 2 -1400 atoms in group slow -balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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 - rebalancing time: 0.000522375 seconds - iteration count = 1 - time weight factor: 1 - initial/final max load/proc = 2000 2000 - initial/final imbalance factor = 1 1 - x cuts: 0 0.5 1 - y cuts: 0 1 - z cuts: 0 1 - -fix 1 all nve - -#dump id all atom 50 dump.melt - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 -run 250 -Per MPI rank memory allocation (min/avg/max) = 4.297 | 4.488 | 4.678 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1 -6.9453205 0 -5.4456955 -5.6812358 - 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 - 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 - 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 - 200 0.536665 -6.2530113 0 -5.448215 -1.933468 - 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 -Loop time of 1.96356 on 2 procs for 250 steps with 4000 atoms - -Performance: 55002.186 tau/day, 127.320 timesteps/s -99.4% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.0024 | 1.243 | 1.4835 | 21.6 | 63.30 -Neigh | 0.3963 | 0.41601 | 0.43572 | 3.1 | 21.19 -Comm | 0.032948 | 0.29324 | 0.55353 | 48.1 | 14.93 -Output | 0.00013924 | 0.00014722 | 0.00015521 | 0.0 | 0.01 -Modify | 0.0072696 | 0.0073524 | 0.0074351 | 0.1 | 0.37 -Other | | 0.003842 | | | 0.20 - -Nlocal: 2000 ave 2051 max 1949 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10443 ave 10506 max 10380 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 298332 ave 363449 max 233215 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 596664 -Ave neighs/atom = 149.166 -Neighbor list builds = 24 -Dangerous builds = 0 -balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt - rebalancing time: 0.000424623 seconds - iteration count = 3 - time weight factor: 1 - initial/final max load/proc = 1.91926 1.6972 - initial/final imbalance factor = 1.15689 1.02304 - x cuts: 0 0.4375 1 - y cuts: 0 1 - z cuts: 0 1 -run 250 -Per MPI rank memory allocation (min/avg/max) = 4.681 | 4.683 | 4.685 Mbytes -Step Temp E_pair E_mol TotEng Press - 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 - 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 - 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 - 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 - 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 - 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 -Loop time of 1.84751 on 2 procs for 250 steps with 4000 atoms - -Performance: 58457.127 tau/day, 135.317 timesteps/s -99.5% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.1214 | 1.2291 | 1.3368 | 9.7 | 66.53 -Neigh | 0.37418 | 0.41926 | 0.46434 | 7.0 | 22.69 -Comm | 0.033842 | 0.18738 | 0.34091 | 35.5 | 10.14 -Output | 0.00016665 | 0.00018752 | 0.00020838 | 0.0 | 0.01 -Modify | 0.0062993 | 0.0072798 | 0.0082603 | 1.1 | 0.39 -Other | | 0.00428 | | | 0.23 - -Nlocal: 2000 ave 2284 max 1716 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10450 ave 10742 max 10158 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 298063 ave 326003 max 270123 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 596126 -Ave neighs/atom = 149.031 -Neighbor list builds = 25 -Dangerous builds = 0 -balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt - rebalancing time: 0.000502825 seconds - iteration count = 3 - time weight factor: 1 - initial/final max load/proc = 1.80118 1.79434 - initial/final imbalance factor = 1.0927 1.08854 - x cuts: 0 0.507812 1 - y cuts: 0 1 - z cuts: 0 1 -run 250 -Per MPI rank memory allocation (min/avg/max) = 4.681 | 4.683 | 4.686 Mbytes -Step Temp E_pair E_mol TotEng Press - 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 - 550 0.54137926 -6.2592773 0 -5.4474115 -1.9770236 - 600 0.54022886 -6.2573307 0 -5.44719 -1.9619637 - 650 0.54709009 -6.2678862 0 -5.4474562 -1.9958342 - 700 0.54590044 -6.2656903 0 -5.4470444 -1.9957108 - 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 -Loop time of 2.03694 on 2 procs for 250 steps with 4000 atoms - -Performance: 53020.655 tau/day, 122.733 timesteps/s -99.3% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.92132 | 1.2301 | 1.5389 | 27.8 | 60.39 -Neigh | 0.3924 | 0.42313 | 0.45386 | 4.7 | 20.77 -Comm | 0.032816 | 0.37246 | 0.71211 | 55.7 | 18.29 -Output | 0.00013733 | 0.00014532 | 0.0001533 | 0.0 | 0.01 -Modify | 0.0069692 | 0.0072372 | 0.0075052 | 0.3 | 0.36 -Other | | 0.003856 | | | 0.19 - -Nlocal: 2000 ave 2097 max 1903 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10439.5 ave 10561 max 10318 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 299628 ave 378859 max 220397 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 599256 -Ave neighs/atom = 149.814 -Neighbor list builds = 25 -Dangerous builds = 0 -Total wall time: 0:00:05 diff --git a/examples/balance/log.27Nov18.balance.clock.static.g++.4 b/examples/balance/log.27Nov18.balance.clock.static.g++.4 deleted file mode 100644 index 45bae5631f..0000000000 --- a/examples/balance/log.27Nov18.balance.clock.static.g++.4 +++ /dev/null @@ -1,195 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -variable factor index 1.0 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 4 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000427961 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes - -group fast type 1 -2600 atoms in group fast -group slow type 2 -1400 atoms in group slow -balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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 - rebalancing time: 0.000848055 seconds - iteration count = 2 - time weight factor: 1 - initial/final max load/proc = 1200 1200 - initial/final imbalance factor = 1.2 1.2 - x cuts: 0 0.25 0.5 0.6875 1 - y cuts: 0 1 - z cuts: 0 1 - -fix 1 all nve - -#dump id all atom 50 dump.melt - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 -run 250 -Per MPI rank memory allocation (min/avg/max) = 3.426 | 3.713 | 4.188 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1 -6.9453205 0 -5.4456955 -5.6812358 - 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 - 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 - 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 - 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 - 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 -Loop time of 1.50594 on 4 procs for 250 steps with 4000 atoms - -Performance: 71716.080 tau/day, 166.009 timesteps/s -96.9% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.34764 | 0.66777 | 1.2288 | 43.4 | 44.34 -Neigh | 0.1594 | 0.20524 | 0.2451 | 7.5 | 13.63 -Comm | 0.039175 | 0.62421 | 0.93047 | 45.4 | 41.45 -Output | 0.00015855 | 0.00024235 | 0.00047231 | 0.0 | 0.02 -Modify | 0.0028908 | 0.0039527 | 0.0049407 | 1.2 | 0.26 -Other | | 0.004522 | | | 0.30 - -Nlocal: 1000 ave 1263 max 712 min -Histogram: 1 0 0 0 1 0 1 0 0 1 -Nghost: 8711.5 ave 9045 max 8325 min -Histogram: 1 0 0 0 0 1 1 0 0 1 -Neighs: 149325 ave 275165 max 77227 min -Histogram: 2 0 0 0 1 0 0 0 0 1 - -Total # of neighbors = 597299 -Ave neighs/atom = 149.325 -Neighbor list builds = 23 -Dangerous builds = 0 -balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt - rebalancing time: 0.000421047 seconds - iteration count = 4 - time weight factor: 1 - initial/final max load/proc = 1.45871 0.956175 - initial/final imbalance factor = 1.6709 1.09526 - x cuts: 0 0.296875 0.453125 0.628906 1 - y cuts: 0 1 - z cuts: 0 1 -run 250 -Per MPI rank memory allocation (min/avg/max) = 3.787 | 3.907 | 4.192 Mbytes -Step Temp E_pair E_mol TotEng Press - 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 - 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 - 350 0.55600296 -6.2801497 0 -5.4463538 -2.0394056 - 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 - 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 - 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 -Loop time of 1.24397 on 4 procs for 250 steps with 4000 atoms - -Performance: 86819.073 tau/day, 200.970 timesteps/s -95.4% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.4612 | 0.67729 | 0.88321 | 20.9 | 54.45 -Neigh | 0.14175 | 0.20919 | 0.28903 | 13.7 | 16.82 -Comm | 0.19855 | 0.34785 | 0.48428 | 18.8 | 27.96 -Output | 0.00016665 | 0.00030792 | 0.00066757 | 0.0 | 0.02 -Modify | 0.0027177 | 0.0053391 | 0.010109 | 4.1 | 0.43 -Other | | 0.003992 | | | 0.32 - -Nlocal: 1000 ave 1462 max 652 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Nghost: 8657 ave 9421 max 7969 min -Histogram: 1 1 0 0 0 0 0 1 0 1 -Neighs: 149356 ave 195930 max 106343 min -Histogram: 1 1 0 0 0 0 0 1 0 1 - -Total # of neighbors = 597424 -Ave neighs/atom = 149.356 -Neighbor list builds = 24 -Dangerous builds = 0 -balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt - rebalancing time: 0.000288963 seconds - iteration count = 5 - time weight factor: 1 - initial/final max load/proc = 1.03814 0.978524 - initial/final imbalance factor = 1.17108 1.10383 - x cuts: 0 0.301758 0.448242 0.60144 1 - y cuts: 0 1 - z cuts: 0 1 -run 250 -Per MPI rank memory allocation (min/avg/max) = 3.804 | 3.927 | 4.209 Mbytes -Step Temp E_pair E_mol TotEng Press - 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 - 550 0.53879347 -6.2554274 0 -5.4474393 -1.9756834 - 600 0.54275982 -6.2616799 0 -5.4477437 -1.9939993 - 650 0.54526651 -6.265098 0 -5.4474027 -2.0303672 - 700 0.54369381 -6.263201 0 -5.4478642 -1.9921967 - 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 -Loop time of 1.14445 on 4 procs for 250 steps with 4000 atoms - -Performance: 94368.537 tau/day, 218.446 timesteps/s -98.0% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.52287 | 0.67351 | 0.79602 | 13.2 | 58.85 -Neigh | 0.14306 | 0.21848 | 0.31638 | 16.2 | 19.09 -Comm | 0.19457 | 0.24404 | 0.29562 | 7.2 | 21.32 -Output | 0.00016236 | 0.00029993 | 0.00065851 | 0.0 | 0.03 -Modify | 0.0024104 | 0.0038835 | 0.0057485 | 2.3 | 0.34 -Other | | 0.004232 | | | 0.37 - -Nlocal: 1000 ave 1522 max 593 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Nghost: 8754 ave 9866 max 8002 min -Histogram: 2 0 0 0 0 1 0 0 0 1 -Neighs: 149124 ave 182694 max 120516 min -Histogram: 1 0 1 0 0 0 1 0 0 1 - -Total # of neighbors = 596497 -Ave neighs/atom = 149.124 -Neighbor list builds = 25 -Dangerous builds = 0 -Total wall time: 0:00:03 diff --git a/examples/balance/log.27Nov18.balance.g++.2 b/examples/balance/log.27Nov18.balance.g++.2 deleted file mode 100644 index 6b0d0baa88..0000000000 --- a/examples/balance/log.27Nov18.balance.g++.2 +++ /dev/null @@ -1,209 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 2d circle of particles inside a box with LJ walls - -variable b index 0 - -variable x index 50 -variable y index 20 -variable d index 20 -variable v index 5 -variable w index 2 - -units lj -dimension 2 -atom_style atomic -boundary f f p - -lattice hex 0.85 -Lattice spacing in x,y,z = 1.16553 2.01877 1.16553 -region box block 0 $x 0 $y -0.5 0.5 -region box block 0 50 0 $y -0.5 0.5 -region box block 0 50 0 20 -0.5 0.5 -create_box 1 box -Created orthogonal box = (0 0 -0.582767) to (58.2767 40.3753 0.582767) - 2 by 1 by 1 MPI processor grid -region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 10 -create_atoms 1 region circle -Created 361 atoms - Time spent = 0.000478506 secs -mass 1 1.0 - -velocity all create 0.5 87287 loop geom -velocity all set $v $w 0 sum yes -velocity all set 5 $w 0 sum yes -velocity all set 5 2 0 sum yes - -pair_style lj/cut 2.5 -pair_coeff 1 1 10.0 1.0 2.5 - -neighbor 0.3 bin -neigh_modify delay 0 every 1 check yes - -fix 1 all nve - -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 - -comm_style tiled -fix 10 all balance 50 0.9 rcb - -#compute 1 all property/atom proc -#variable p atom c_1%10 -#dump 2 all custom 50 tmp.dump id v_p x y z - -#dump 3 all image 50 image.*.jpg v_p type # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 -#variable colors string # "red green blue yellow white # purple pink orange lime gray" -#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} - -thermo_style custom step temp epair press f_10[3] f_10 -thermo 100 - -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 42 29 1 - 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/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.061 | 3.065 | 3.07 Mbytes -Step Temp E_pair Press f_10[3] f_10 - 0 25.701528 -29.143179 -1.2407285 2 1.0193906 - 100 26.269576 -29.713313 7.9052334 1.1135734 1.0027701 - 200 26.368336 -29.809962 1.6412462 1.0803324 1.0027701 - 300 26.479082 -29.920083 2.3678653 1.1578947 1.0083102 - 400 26.522239 -29.965537 6.6787858 1.1578947 1.0083102 - 500 25.725591 -29.168034 0.67065285 1.1024931 1.0083102 - 600 26.247693 -29.692706 7.9887712 1.1301939 1.0027701 - 700 26.237368 -29.676926 1.5987214 1.1578947 1.0027701 - 800 25.889643 -29.431589 4.6160859 1.1523546 1.0027701 - 900 23.635295 -27.372963 9.029962 1.1468144 1.0027701 - 1000 22.571904 -25.87422 1.8936085 1.1191136 1.0083102 - 1100 17.493795 -21.447274 9.502619 1.0747922 1.0027701 - 1200 17.214459 -20.726965 6.3578919 1.0193906 1.0083102 - 1300 16.424217 -19.757401 3.9026861 1.0083102 1.0027701 - 1400 15.051731 -18.13464 1.7558146 1.0249307 1.0027701 - 1500 13.966718 -17.051915 1.4843674 1.0470914 1.0027701 - 1600 13.615641 -16.582695 1.7845355 1.0415512 1.0027701 - 1700 13.278822 -16.278248 1.8263176 1.0470914 1.0083102 - 1800 12.680841 -15.81089 2.0096239 1.0415512 1.0027701 - 1900 12.039167 -14.99225 1.4379549 1.0360111 1.0027701 - 2000 12.298923 -15.188233 1.6287319 1.0249307 1.0027701 - 2100 12.048347 -14.947484 1.0583787 1.0304709 1.0027701 - 2200 12.024664 -14.91864 1.0617555 1.0304709 1.0027701 - 2300 11.878263 -14.769923 1.2892425 1.0360111 1.0027701 - 2400 11.578448 -14.525725 1.2925126 1.0083102 1.0027701 - 2500 11.948793 -14.736647 1.5473169 1.0249307 1.0027701 - 2600 11.933924 -14.725605 1.3673896 1.0249307 1.0027701 - 2700 11.622855 -14.414518 1.3035925 1.0304709 1.0083102 - 2800 10.600538 -13.451379 1.3422508 1.0138504 1.0027701 - 2900 10.404739 -13.242902 1.3070821 1.0083102 1.0027701 - 3000 10.73199 -13.60699 0.92518136 1.0138504 1.0027701 - 3100 10.807664 -13.624775 1.3037969 1.0193906 1.0027701 - 3200 10.393964 -13.212022 0.72081929 1.0027701 1.0027701 - 3300 9.8733371 -12.65719 1.1606833 1.0138504 1.0027701 - 3400 9.6206594 -12.349773 0.69859994 1.0138504 1.0027701 - 3500 9.5882688 -12.32291 1.0028888 1.0138504 1.0027701 - 3600 9.693129 -12.441628 0.94751509 1.0193906 1.0083102 - 3700 9.3727837 -12.162354 1.9639195 1.0027701 1.0027701 - 3800 9.1011581 -11.860999 1.0253876 1.0083102 1.0027701 - 3900 8.6637799 -11.44226 1.4848652 1.0027701 1.0027701 - 4000 9.0454579 -11.770928 0.82719098 1.0083102 1.0083102 - 4100 8.5574492 -11.30614 0.82422479 1.0193906 1.0027701 - 4200 8.5903538 -11.322978 0.45091349 1.0027701 1.0027701 - 4300 8.540208 -11.282844 0.55403945 1.0027701 1.0027701 - 4400 7.7043293 -10.372194 0.80170046 1.0027701 1.0027701 - 4500 7.3429905 -9.9970461 0.77097228 1.0193906 1.0027701 - 4600 7.35485 -9.9992837 0.66531873 1.0027701 1.0027701 - 4700 7.3278467 -9.9885021 0.99577458 1.0193906 1.0027701 - 4800 7.8179777 -10.468758 0.56434522 1.0138504 1.0083102 - 4900 7.571002 -10.215558 0.81064116 1.0138504 1.0027701 - 5000 7.5326417 -10.224594 0.86387082 1.0083102 1.0027701 - 5100 7.8120521 -10.468885 0.86739094 1.0027701 1.0027701 - 5200 7.2949975 -10.041278 1.0298349 1.0027701 1.0027701 - 5300 7.6564811 -10.297993 0.71060925 1.0027701 1.0083102 - 5400 7.7359804 -10.373635 0.61872932 1.0027701 1.0083102 - 5500 7.6511513 -10.279058 0.87569767 1.0027701 1.0027701 - 5600 7.2927879 -9.9378811 1.1573049 1.0083102 1.0083102 - 5700 7.1836162 -9.8357325 0.43012076 1.0083102 1.0083102 - 5800 7.3405818 -9.9780947 0.69346928 1.0083102 1.0027701 - 5900 7.6636501 -10.323536 0.82554433 1.0027701 1.0027701 - 6000 7.3515582 -9.9803466 1.09521 1.0138504 1.0027701 - 6100 7.0275875 -9.6739554 0.48460922 1.0027701 1.0027701 - 6200 7.1449226 -9.7541904 0.83007096 1.0193906 1.0083102 - 6300 7.036185 -9.6445595 1.0982599 1.0193906 1.0027701 - 6400 7.1288989 -9.7501637 1.0103414 1.0138504 1.0027701 - 6500 6.6559525 -9.256798 0.58741228 1.0027701 1.0027701 - 6600 7.0559949 -9.6563848 0.53504661 1.0027701 1.0027701 - 6700 7.124289 -9.7613906 0.70816625 1.0027701 1.0027701 - 6800 7.0141849 -9.6298357 0.55987809 1.0083102 1.0027701 - 6900 6.8617323 -9.4376408 0.62371253 1.0193906 1.0083102 - 7000 6.7496366 -9.3379578 0.83540012 1.0027701 1.0083102 - 7100 7.0418565 -9.664915 0.68231111 1.0083102 1.0027701 - 7200 6.6175362 -9.2066737 0.31371885 1.0138504 1.0027701 - 7300 7.076179 -9.6917457 1.0827515 1.0083102 1.0027701 - 7400 6.5263123 -9.1321276 1.1892921 1.0027701 1.0027701 - 7500 6.8072952 -9.3976358 0.60458526 1.0138504 1.0027701 - 7600 6.610006 -9.1934492 0.54359615 1.0193906 1.0027701 - 7700 6.3533198 -8.943515 0.91970357 1.0138504 1.0027701 - 7800 6.7226774 -9.3164434 0.81151352 1.0027701 1.0083102 - 7900 6.2329222 -8.8531998 0.59439797 1.0083102 1.0027701 - 8000 6.5818943 -9.2025911 0.66303132 1.0083102 1.0027701 - 8100 6.372739 -8.9403406 0.81325975 1.0138504 1.0027701 - 8200 6.462003 -9.0346265 0.54917879 1.0083102 1.0027701 - 8300 6.5947825 -9.2171877 0.9005455 1.0027701 1.0027701 - 8400 6.7803374 -9.4179158 0.37270772 1.0027701 1.0027701 - 8500 6.7122886 -9.3363107 0.77011047 1.0083102 1.0027701 - 8600 6.8286386 -9.4264779 0.35815593 1.0027701 1.0027701 - 8700 6.4796483 -9.0676554 0.84568363 1.0138504 1.0027701 - 8800 6.551896 -9.1793668 1.0319947 1.0083102 1.0027701 - 8900 6.1879163 -8.7590749 0.34445309 1.0027701 1.0027701 - 9000 6.2374494 -8.7872159 0.46749314 1.0027701 1.0027701 - 9100 6.3605933 -8.9335681 0.86786624 1.0027701 1.0027701 - 9200 6.4387791 -9.0144583 0.56089061 1.0083102 1.0027701 - 9300 6.2745383 -8.9019836 0.58565081 1.0083102 1.0027701 - 9400 6.1957924 -8.7638279 0.65785826 1.0027701 1.0083102 - 9500 6.079287 -8.6556289 0.47532552 1.0083102 1.0027701 - 9600 6.7679205 -9.3427341 0.48539851 1.0083102 1.0027701 - 9700 6.4007616 -8.9753463 0.58689382 1.0138504 1.0027701 - 9800 6.2137021 -8.7670545 0.80327882 1.0249307 1.0027701 - 9900 6.063559 -8.6359278 0.34977555 1.0083102 1.0027701 - 10000 6.5604562 -9.1417599 0.49589297 1.0083102 1.0027701 -Loop time of 0.469504 on 2 procs for 10000 steps with 361 atoms - -Performance: 9201197.252 tau/day, 21299.068 timesteps/s -94.4% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.13648 | 0.14553 | 0.15459 | 2.4 | 31.00 -Neigh | 0.13867 | 0.14128 | 0.1439 | 0.7 | 30.09 -Comm | 0.05533 | 0.06494 | 0.07455 | 3.8 | 13.83 -Output | 0.0012147 | 0.0013802 | 0.0015457 | 0.4 | 0.29 -Modify | 0.071393 | 0.071421 | 0.07145 | 0.0 | 15.21 -Other | | 0.04494 | | | 9.57 - -Nlocal: 180.5 ave 181 max 180 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 30 ave 34 max 26 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 579.5 ave 644 max 515 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 1159 -Ave neighs/atom = 3.21053 -Neighbor list builds = 3510 -Dangerous builds = 0 -Total wall time: 0:00:00 diff --git a/examples/balance/log.27Nov18.balance.g++.4 b/examples/balance/log.27Nov18.balance.g++.4 deleted file mode 100644 index 7889eff888..0000000000 --- a/examples/balance/log.27Nov18.balance.g++.4 +++ /dev/null @@ -1,209 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 2d circle of particles inside a box with LJ walls - -variable b index 0 - -variable x index 50 -variable y index 20 -variable d index 20 -variable v index 5 -variable w index 2 - -units lj -dimension 2 -atom_style atomic -boundary f f p - -lattice hex 0.85 -Lattice spacing in x,y,z = 1.16553 2.01877 1.16553 -region box block 0 $x 0 $y -0.5 0.5 -region box block 0 50 0 $y -0.5 0.5 -region box block 0 50 0 20 -0.5 0.5 -create_box 1 box -Created orthogonal box = (0 0 -0.582767) to (58.2767 40.3753 0.582767) - 2 by 2 by 1 MPI processor grid -region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) -region circle sphere 11 6.7735026918962581988 0.0 10 -create_atoms 1 region circle -Created 361 atoms - Time spent = 0.000404358 secs -mass 1 1.0 - -velocity all create 0.5 87287 loop geom -velocity all set $v $w 0 sum yes -velocity all set 5 $w 0 sum yes -velocity all set 5 2 0 sum yes - -pair_style lj/cut 2.5 -pair_coeff 1 1 10.0 1.0 2.5 - -neighbor 0.3 bin -neigh_modify delay 0 every 1 check yes - -fix 1 all nve - -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 -fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 -fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 - -comm_style tiled -fix 10 all balance 50 0.9 rcb - -#compute 1 all property/atom proc -#variable p atom c_1%10 -#dump 2 all custom 50 tmp.dump id v_p x y z - -#dump 3 all image 50 image.*.jpg v_p type # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 -#variable colors string # "red green blue yellow white # purple pink orange lime gray" -#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} - -thermo_style custom step temp epair press f_10[3] f_10 -thermo 100 - -run 10000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 2.8 - ghost atom cutoff = 2.8 - binsize = 1.4, bins = 42 29 1 - 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/2d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 3.041 | 3.047 | 3.059 Mbytes -Step Temp E_pair Press f_10[3] f_10 - 0 25.701528 -29.143179 -1.2407285 3.2354571 1.0526316 - 100 26.269576 -29.713313 7.9052334 1.2742382 1.0304709 - 200 26.368336 -29.809962 1.6412462 1.2520776 1.0083102 - 300 26.479082 -29.920083 2.3678653 1.2299169 1.0193906 - 400 26.522239 -29.965537 6.6787858 1.1855956 1.0083102 - 500 25.725591 -29.168034 0.67065285 1.2520776 1.0193906 - 600 26.247693 -29.692706 7.9887712 1.3074792 1.0193906 - 700 26.237368 -29.676926 1.5987214 1.2409972 1.0083102 - 800 25.889643 -29.431589 4.6160859 1.2631579 1.0083102 - 900 23.635295 -27.372963 9.029962 1.1634349 1.0083102 - 1000 22.571904 -25.87422 1.8936085 1.1301939 1.0193906 - 1100 17.493795 -21.447274 9.502619 1.0858726 1.0193906 - 1200 17.214459 -20.726965 6.3578918 1.0304709 1.0083102 - 1300 16.42412 -19.757358 3.9027527 1.1191136 1.0193906 - 1400 15.030721 -18.114099 1.7564242 1.1523546 1.0193906 - 1500 13.81681 -16.902783 1.1577715 1.0858726 1.0083102 - 1600 13.686443 -16.661545 1.5415714 1.0969529 1.0083102 - 1700 13.019794 -16.066239 2.0360985 1.0526316 1.0083102 - 1800 12.297559 -15.3505 2.3411708 1.0858726 1.0083102 - 1900 12.279142 -15.287559 1.6641576 1.0415512 1.0083102 - 2000 12.230052 -15.192836 1.0975388 1.0415512 1.0193906 - 2100 11.697549 -14.599737 1.6237216 1.0969529 1.0083102 - 2200 11.682062 -14.610972 1.4641234 1.0747922 1.0083102 - 2300 11.075799 -13.986408 1.3034228 1.0637119 1.0083102 - 2400 11.362073 -14.290331 1.4934327 1.0304709 1.0083102 - 2500 11.100258 -14.006922 1.5476543 1.0415512 1.0193906 - 2600 11.12995 -14.013738 1.648208 1.0526316 1.0193906 - 2700 10.709161 -13.560172 1.396234 1.0193906 1.0083102 - 2800 10.827433 -13.654426 1.0691842 1.0304709 1.0083102 - 2900 10.653946 -13.622298 1.0985321 1.0304709 1.0083102 - 3000 10.277755 -13.110194 0.80184675 1.0304709 1.0083102 - 3100 9.9099809 -12.702359 1.0351594 1.0304709 1.0193906 - 3200 9.7539825 -12.558768 0.54465848 1.0526316 1.0083102 - 3300 10.126666 -12.949441 0.64914734 1.0304709 1.0083102 - 3400 9.5324496 -12.338741 1.2896056 1.0193906 1.0193906 - 3500 9.4041639 -12.170248 0.72157285 1.0304709 1.0083102 - 3600 9.2601291 -12.094438 1.1638062 1.0415512 1.0193906 - 3700 9.7052324 -12.503428 1.0681965 1.0193906 1.0193906 - 3800 9.1757619 -11.95576 1.2517655 1.0637119 1.0083102 - 3900 9.2622488 -12.036744 0.49874718 1.0193906 1.0083102 - 4000 8.8510215 -11.634558 1.0887428 1.0415512 1.0193906 - 4100 8.3821331 -11.145234 0.91008971 1.0193906 1.0083102 - 4200 8.2295054 -10.970304 0.5181043 1.0304709 1.0083102 - 4300 8.2161013 -10.942353 0.42128421 1.0304709 1.0193906 - 4400 7.7366945 -10.4592 0.79646198 1.0304709 1.0193906 - 4500 7.6089407 -10.446852 1.0059975 1.0083102 1.0193906 - 4600 7.6662499 -10.406613 1.7369986 1.0193906 1.0083102 - 4700 7.9515739 -10.665324 0.73173058 1.0193906 1.0083102 - 4800 7.7580664 -10.520311 1.1065958 1.0304709 1.0083102 - 4900 7.561205 -10.291568 0.97923495 1.0083102 1.0193906 - 5000 7.4169102 -10.130439 1.1566293 1.0193906 1.0193906 - 5100 7.5994418 -10.310725 1.1081236 1.0193906 1.0193906 - 5200 7.4637026 -10.211945 0.46308591 1.0193906 1.0083102 - 5300 7.5864081 -10.289039 0.55146387 1.0415512 1.0083102 - 5400 7.2190688 -9.8943729 0.56255805 1.0193906 1.0193906 - 5500 7.3953465 -10.112294 0.49166363 1.0193906 1.0193906 - 5600 7.3584536 -10.027488 0.69227871 1.0193906 1.0193906 - 5700 6.932639 -9.6121874 0.67344283 1.0304709 1.0083102 - 5800 7.088604 -9.7715725 0.20307999 1.0193906 1.0193906 - 5900 6.9761247 -9.6446998 0.90406994 1.0083102 1.0083102 - 6000 6.8763621 -9.5236579 0.57873884 1.0415512 1.0083102 - 6100 6.939987 -9.5929188 0.36904108 1.0304709 1.0083102 - 6200 6.820038 -9.4635599 0.63193653 1.0304709 1.0083102 - 6300 6.8288347 -9.4833639 0.41971515 1.0415512 1.0304709 - 6400 6.8690672 -9.5446244 1.0201589 1.0415512 1.0193906 - 6500 6.4727631 -9.1148404 0.80775699 1.0193906 1.0193906 - 6600 6.7113328 -9.3554765 0.61684835 1.0083102 1.0083102 - 6700 6.5896516 -9.2696941 0.58593745 1.0526316 1.0193906 - 6800 6.5609717 -9.2314045 1.2897992 1.0193906 1.0083102 - 6900 6.6225137 -9.2809347 0.47677707 1.0415512 1.0083102 - 7000 6.6617661 -9.3147214 0.72415312 1.0304709 1.0193906 - 7100 6.5773856 -9.2843036 0.7800794 1.0304709 1.0083102 - 7200 6.7300254 -9.4233488 0.73403634 1.0193906 1.0193906 - 7300 6.8497011 -9.4992354 0.97755826 1.0304709 1.0193906 - 7400 6.5848304 -9.2649536 0.89449647 1.0526316 1.0193906 - 7500 6.6468599 -9.3004561 0.53259674 1.0304709 1.0083102 - 7600 6.7096387 -9.3824628 0.40095675 1.0193906 1.0083102 - 7700 6.6205931 -9.2612947 0.44113095 1.0083102 1.0083102 - 7800 6.444935 -9.073124 0.47355329 1.0193906 1.0083102 - 7900 6.6143353 -9.2763501 0.57936627 1.0193906 1.0083102 - 8000 6.5718284 -9.2099799 0.88048189 1.0637119 1.0083102 - 8100 6.9155381 -9.5644544 0.36029314 1.0415512 1.0083102 - 8200 6.4217261 -9.0582117 0.4577164 1.0193906 1.0193906 - 8300 6.4639521 -9.0911283 0.50560328 1.0193906 1.0193906 - 8400 6.2047897 -8.8357836 0.71150301 1.0083102 1.0083102 - 8500 6.5688691 -9.2701491 0.5963871 1.0193906 1.0083102 - 8600 6.6803448 -9.3311473 0.47008064 1.0304709 1.0083102 - 8700 6.4794219 -9.1136868 0.97764575 1.0193906 1.0193906 - 8800 6.3899651 -9.0655629 0.72557611 1.0083102 1.0193906 - 8900 6.4446062 -9.1121453 0.53050589 1.0193906 1.0083102 - 9000 6.7012614 -9.3365992 0.63041848 1.0415512 1.0083102 - 9100 6.3982388 -9.0510004 0.34575359 1.0415512 1.0083102 - 9200 6.9775773 -9.6647109 0.97993232 1.0304709 1.0193906 - 9300 6.5504231 -9.2113542 0.58697844 1.0193906 1.0193906 - 9400 6.6900283 -9.3954145 0.40867465 1.0083102 1.0193906 - 9500 6.3553229 -8.9965934 0.60133843 1.0526316 1.0193906 - 9600 6.4861076 -9.1404384 1.0033387 1.0193906 1.0193906 - 9700 6.469481 -9.1202491 0.85523385 1.0083102 1.0193906 - 9800 6.5508552 -9.188341 0.6068644 1.0304709 1.0083102 - 9900 6.4355199 -9.1044882 0.83288252 1.0304709 1.0193906 - 10000 6.4850092 -9.1433721 0.58691238 1.0193906 1.0193906 -Loop time of 0.418243 on 4 procs for 10000 steps with 361 atoms - -Performance: 10328920.895 tau/day, 23909.539 timesteps/s -87.1% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.062269 | 0.073833 | 0.096031 | 4.9 | 17.65 -Neigh | 0.066658 | 0.072882 | 0.084956 | 2.7 | 17.43 -Comm | 0.10814 | 0.13013 | 0.14677 | 4.4 | 31.11 -Output | 0.0015733 | 0.0017747 | 0.0023153 | 0.7 | 0.42 -Modify | 0.060045 | 0.060904 | 0.061674 | 0.3 | 14.56 -Other | | 0.07872 | | | 18.82 - -Nlocal: 90.25 ave 92 max 89 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Nghost: 33.25 ave 57 max 13 min -Histogram: 1 0 0 0 2 0 0 0 0 1 -Neighs: 309.25 ave 496 max 125 min -Histogram: 1 0 0 1 0 0 1 0 0 1 - -Total # of neighbors = 1237 -Ave neighs/atom = 3.42659 -Neighbor list builds = 3620 -Dangerous builds = 0 -Total wall time: 0:00:00 diff --git a/examples/balance/log.27Nov18.balance.group.dynamic.g++.2 b/examples/balance/log.27Nov18.balance.group.dynamic.g++.2 deleted file mode 100644 index b88593b718..0000000000 --- a/examples/balance/log.27Nov18.balance.group.dynamic.g++.2 +++ /dev/null @@ -1,110 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -variable factor index 1.0 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 2 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000552893 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes - -group fast type 1 -2600 atoms in group fast -group slow type 2 -1400 atoms in group slow -balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} # out weighted.txt -balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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 - rebalancing time: 0.000512123 seconds - iteration count = 1 - group weights: fast=1 slow=1 - initial/final max load/proc = 2000 2000 - initial/final imbalance factor = 1 1 - x cuts: 0 0.5 1 - y cuts: 0 1 - z cuts: 0 1 -fix 0 all balance 10 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} -fix 0 all balance 10 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 - -fix 1 all nve - -#dump id all atom 50 dump.melt - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 -run 250 -Per MPI rank memory allocation (min/avg/max) = 4.437 | 4.628 | 4.819 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 - 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 4738.2137 - 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 4738.2137 - 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 4738.2137 - 200 0.536665 -6.2530113 0 -5.448215 -1.933468 4738.2137 - 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 -Loop time of 1.95661 on 2 procs for 250 steps with 4000 atoms - -Performance: 55197.383 tau/day, 127.772 timesteps/s -99.4% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.0628 | 1.263 | 1.4632 | 17.8 | 64.55 -Neigh | 0.42332 | 0.43486 | 0.44639 | 1.7 | 22.22 -Comm | 0.033167 | 0.2449 | 0.45664 | 42.8 | 12.52 -Output | 0.00015879 | 0.00017142 | 0.00018406 | 0.0 | 0.01 -Modify | 0.010039 | 0.010042 | 0.010045 | 0.0 | 0.51 -Other | | 0.003658 | | | 0.19 - -Nlocal: 2000 ave 2000 max 2000 min -Histogram: 2 0 0 0 0 0 0 0 0 0 -Nghost: 10441 ave 10457 max 10425 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 298332 ave 349156 max 247508 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 596664 -Ave neighs/atom = 149.166 -Neighbor list builds = 25 -Dangerous builds = 0 -Total wall time: 0:00:01 diff --git a/examples/balance/log.27Nov18.balance.group.dynamic.g++.4 b/examples/balance/log.27Nov18.balance.group.dynamic.g++.4 deleted file mode 100644 index ec6fc449c4..0000000000 --- a/examples/balance/log.27Nov18.balance.group.dynamic.g++.4 +++ /dev/null @@ -1,110 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -variable factor index 1.0 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 4 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000427008 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes - -group fast type 1 -2600 atoms in group fast -group slow type 2 -1400 atoms in group slow -balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} # out weighted.txt -balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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 - rebalancing time: 0.000735044 seconds - iteration count = 2 - group weights: fast=1 slow=1 - initial/final max load/proc = 1200 1200 - initial/final imbalance factor = 1.2 1.2 - x cuts: 0 0.25 0.5 0.6875 1 - y cuts: 0 1 - z cuts: 0 1 -fix 0 all balance 10 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} -fix 0 all balance 10 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 - -fix 1 all nve - -#dump id all atom 50 dump.melt - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 -run 250 -Per MPI rank memory allocation (min/avg/max) = 3.566 | 3.947 | 4.329 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 - 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 4738.2137 - 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 4738.2137 - 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 4738.2137 - 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 4738.2137 - 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 -Loop time of 1.48981 on 4 procs for 250 steps with 4000 atoms - -Performance: 72492.623 tau/day, 167.807 timesteps/s -96.0% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.22803 | 0.67101 | 1.1622 | 43.7 | 45.04 -Neigh | 0.20611 | 0.2259 | 0.23756 | 2.5 | 15.16 -Comm | 0.085412 | 0.58198 | 1.045 | 47.7 | 39.06 -Output | 0.00016332 | 0.00028861 | 0.0006516 | 0.0 | 0.02 -Modify | 0.0069213 | 0.0070978 | 0.0072331 | 0.1 | 0.48 -Other | | 0.003534 | | | 0.24 - -Nlocal: 1000 ave 1001 max 999 min -Histogram: 1 0 0 0 0 2 0 0 0 1 -Nghost: 8727 ave 8761 max 8674 min -Histogram: 1 0 0 0 0 0 1 1 0 1 -Neighs: 149349 ave 260848 max 51191 min -Histogram: 1 1 0 0 0 0 1 0 0 1 - -Total # of neighbors = 597396 -Ave neighs/atom = 149.349 -Neighbor list builds = 25 -Dangerous builds = 0 -Total wall time: 0:00:01 diff --git a/examples/balance/log.27Nov18.balance.group.static.g++.2 b/examples/balance/log.27Nov18.balance.group.static.g++.2 deleted file mode 100644 index eb7a506e2c..0000000000 --- a/examples/balance/log.27Nov18.balance.group.static.g++.2 +++ /dev/null @@ -1,146 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -variable factor index 1.0 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 2 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.00050807 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes - -balance 1.0 shift x 5 1.1 # out unweighted.txt -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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 - rebalancing time: 0.000545979 seconds - iteration count = 1 - initial/final max load/proc = 2000 2000 - initial/final imbalance factor = 1 1 - x cuts: 0 0.5 1 - y cuts: 0 1 - z cuts: 0 1 - -balance 1.0 x uniform - rebalancing time: 0.000159502 seconds - iteration count = 0 - initial/final max load/proc = 2000 2000 - initial/final imbalance factor = 1 1 - x cuts: 0 0.5 1 - y cuts: 0 1 - z cuts: 0 1 - -variable weight atom (type==1)*1.0+(type==2)*v_factor -balance 1.0 shift x 5 1.1 weight var weight # out weighted_var.txt - rebalancing time: 0.000320673 seconds - iteration count = 1 - weight variable: weight - initial/final max load/proc = 2000 2000 - initial/final imbalance factor = 1 1 - x cuts: 0 0.5 1 - y cuts: 0 1 - z cuts: 0 1 - -balance 1.0 x uniform - rebalancing time: 0.000132561 seconds - iteration count = 0 - initial/final max load/proc = 2000 2000 - initial/final imbalance factor = 1 1 - x cuts: 0 0.5 1 - y cuts: 0 1 - z cuts: 0 1 - -group fast type 1 -2600 atoms in group fast -group slow type 2 -1400 atoms in group slow -balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} # out weighted_group.txt -balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 - rebalancing time: 0.000235796 seconds - iteration count = 1 - group weights: fast=1 slow=1 - initial/final max load/proc = 2000 2000 - initial/final imbalance factor = 1 1 - x cuts: 0 0.5 1 - y cuts: 0 1 - z cuts: 0 1 - -fix 1 all nve - -#dump id all atom 50 dump.melt - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 -run 250 -Per MPI rank memory allocation (min/avg/max) = 4.297 | 4.488 | 4.678 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1 -6.9453205 0 -5.4456955 -5.6812358 - 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 - 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 - 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 - 200 0.536665 -6.2530113 0 -5.448215 -1.933468 - 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 -Loop time of 1.99136 on 2 procs for 250 steps with 4000 atoms - -Performance: 54234.216 tau/day, 125.542 timesteps/s -99.0% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.0081 | 1.262 | 1.5159 | 22.6 | 63.37 -Neigh | 0.40357 | 0.41713 | 0.43069 | 2.1 | 20.95 -Comm | 0.033287 | 0.30076 | 0.56822 | 48.8 | 15.10 -Output | 0.00014162 | 0.00015128 | 0.00016093 | 0.0 | 0.01 -Modify | 0.0072243 | 0.0073462 | 0.007468 | 0.1 | 0.37 -Other | | 0.003961 | | | 0.20 - -Nlocal: 2000 ave 2051 max 1949 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10443 ave 10506 max 10380 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 298332 ave 363449 max 233215 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 596664 -Ave neighs/atom = 149.166 -Neighbor list builds = 24 -Dangerous builds = 0 -Total wall time: 0:00:02 diff --git a/examples/balance/log.27Nov18.balance.group.static.g++.4 b/examples/balance/log.27Nov18.balance.group.static.g++.4 deleted file mode 100644 index d792f1af93..0000000000 --- a/examples/balance/log.27Nov18.balance.group.static.g++.4 +++ /dev/null @@ -1,146 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -variable factor index 1.0 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 4 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000426769 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes - -balance 1.0 shift x 5 1.1 # out unweighted.txt -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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 - rebalancing time: 0.000867605 seconds - iteration count = 2 - initial/final max load/proc = 1200 1200 - initial/final imbalance factor = 1.2 1.2 - x cuts: 0 0.25 0.5 0.6875 1 - y cuts: 0 1 - z cuts: 0 1 - -balance 1.0 x uniform - rebalancing time: 0.000295401 seconds - iteration count = 0 - initial/final max load/proc = 1200 1200 - initial/final imbalance factor = 1.2 1.2 - x cuts: 0 0.25 0.5 0.75 1 - y cuts: 0 1 - z cuts: 0 1 - -variable weight atom (type==1)*1.0+(type==2)*v_factor -balance 1.0 shift x 5 1.1 weight var weight # out weighted_var.txt - rebalancing time: 0.000428915 seconds - iteration count = 2 - weight variable: weight - initial/final max load/proc = 1200 1200 - initial/final imbalance factor = 1.2 1.2 - x cuts: 0 0.25 0.5 0.6875 1 - y cuts: 0 1 - z cuts: 0 1 - -balance 1.0 x uniform - rebalancing time: 0.000236273 seconds - iteration count = 0 - initial/final max load/proc = 1200 1200 - initial/final imbalance factor = 1.2 1.2 - x cuts: 0 0.25 0.5 0.75 1 - y cuts: 0 1 - z cuts: 0 1 - -group fast type 1 -2600 atoms in group fast -group slow type 2 -1400 atoms in group slow -balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} # out weighted_group.txt -balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 - rebalancing time: 0.000319958 seconds - iteration count = 2 - group weights: fast=1 slow=1 - initial/final max load/proc = 1200 1200 - initial/final imbalance factor = 1.2 1.2 - x cuts: 0 0.25 0.5 0.6875 1 - y cuts: 0 1 - z cuts: 0 1 - -fix 1 all nve - -#dump id all atom 50 dump.melt - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 -run 250 -Per MPI rank memory allocation (min/avg/max) = 3.426 | 3.713 | 4.188 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1 -6.9453205 0 -5.4456955 -5.6812358 - 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 - 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 - 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 - 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 - 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 -Loop time of 1.45972 on 4 procs for 250 steps with 4000 atoms - -Performance: 73986.752 tau/day, 171.266 timesteps/s -95.9% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.34936 | 0.66325 | 1.1729 | 40.9 | 45.44 -Neigh | 0.15811 | 0.20835 | 0.24806 | 7.4 | 14.27 -Comm | 0.04955 | 0.57875 | 0.86745 | 43.6 | 39.65 -Output | 0.00015831 | 0.00028872 | 0.00064492 | 0.0 | 0.02 -Modify | 0.0030367 | 0.0040676 | 0.0050561 | 1.1 | 0.28 -Other | | 0.005014 | | | 0.34 - -Nlocal: 1000 ave 1263 max 712 min -Histogram: 1 0 0 0 1 0 1 0 0 1 -Nghost: 8711.5 ave 9045 max 8325 min -Histogram: 1 0 0 0 0 1 1 0 0 1 -Neighs: 149325 ave 275165 max 77227 min -Histogram: 2 0 0 0 1 0 0 0 0 1 - -Total # of neighbors = 597299 -Ave neighs/atom = 149.325 -Neighbor list builds = 23 -Dangerous builds = 0 -Total wall time: 0:00:01 diff --git a/examples/balance/log.27Nov18.balance.kspace.g++.2 b/examples/balance/log.27Nov18.balance.kspace.g++.2 deleted file mode 100644 index 13e24ed17a..0000000000 --- a/examples/balance/log.27Nov18.balance.kspace.g++.2 +++ /dev/null @@ -1,117 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -#atom_style charge -processors * 1 1 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 2 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000510931 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type -#set type 1:2 charge 0.0 - -velocity all create 1.0 87287 - -pair_style lj/long/coul/long long off 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -kspace_style pppm/disp 1.0e-4 -kspace_modify gewald/disp 0.1 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes - -group fast type 1 -2600 atoms in group fast -group slow type 2 -1400 atoms in group slow -fix 0 all balance 20 1.0 shift x 5 1.0 weight group 2 fast 1.0 slow 2.0 weight time 0.66 - -fix 1 all nve - -#dump id all atom 50 dump.melt - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 -run 500 -PPPMDisp initialization ... - Dispersion G vector (1/distance) = 0.1 - Dispersion grid = 2 2 2 - Dispersion stencil order = 5 - Dispersion estimated absolute RMS force accuracy = 1.01251 - Dispersion estimated absolute real space RMS force accuracy = 1.01251 - Dispersion estimated absolute kspace RMS force accuracy = 7.29446e-07 - Disperion estimated relative force accuracy = 1.01251 - using double precision FFTs - 3d grid and FFT values/proc dispersion = 294 4 -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/long/coul/long, 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) = 4.846 | 5.014 | 5.182 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 0 1 52.148338 0 53.647963 94.09503 4738.2137 - 50 17.747599 42.836975 0 69.451719 143.44398 4738.2137 - 100 9.0390947 49.78615 0 63.341402 117.79296 4738.2137 - 150 13.456072 47.810527 0 67.989589 140.52068 4738.2137 - 200 11.358932 52.542448 0 69.576586 142.87196 4738.2137 - 250 13.204593 48.601437 0 68.403375 134.97484 4738.2137 - 300 12.061996 50.642194 0 68.730665 133.27077 4738.2137 - 350 14.107163 50.201375 0 71.356829 143.54662 4738.2137 - 400 12.053939 50.221116 0 68.297504 132.01999 4738.2137 - 450 13.523963 50.829687 0 71.11056 143.8183 4738.2137 - 500 13.135822 50.150114 0 69.848921 137.26364 4738.2137 -Loop time of 6.95261 on 2 procs for 500 steps with 4000 atoms - -Performance: 31067.471 tau/day, 71.915 timesteps/s -99.5% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.8521 | 3.0997 | 3.3472 | 14.1 | 44.58 -Kspace | 1.1859 | 1.303 | 1.4202 | 10.3 | 18.74 -Neigh | 2.2324 | 2.387 | 2.5417 | 10.0 | 34.33 -Comm | 0.1003 | 0.12513 | 0.14996 | 7.0 | 1.80 -Output | 0.00033641 | 0.00036693 | 0.00039744 | 0.0 | 0.01 -Modify | 0.026408 | 0.02737 | 0.028331 | 0.6 | 0.39 -Other | | 0.009989 | | | 0.14 - -Nlocal: 2000 ave 2316 max 1684 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 9543.5 ave 9675 max 9412 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 254445 ave 276022 max 232868 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 508890 -Ave neighs/atom = 127.222 -Neighbor list builds = 124 -Dangerous builds = 97 -Total wall time: 0:00:06 diff --git a/examples/balance/log.27Nov18.balance.kspace.g++.4 b/examples/balance/log.27Nov18.balance.kspace.g++.4 deleted file mode 100644 index 7745b3e602..0000000000 --- a/examples/balance/log.27Nov18.balance.kspace.g++.4 +++ /dev/null @@ -1,117 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -#atom_style charge -processors * 1 1 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 4 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000432491 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type -#set type 1:2 charge 0.0 - -velocity all create 1.0 87287 - -pair_style lj/long/coul/long long off 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -kspace_style pppm/disp 1.0e-4 -kspace_modify gewald/disp 0.1 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes - -group fast type 1 -2600 atoms in group fast -group slow type 2 -1400 atoms in group slow -fix 0 all balance 20 1.0 shift x 5 1.0 weight group 2 fast 1.0 slow 2.0 weight time 0.66 - -fix 1 all nve - -#dump id all atom 50 dump.melt - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 -run 500 -PPPMDisp initialization ... - Dispersion G vector (1/distance) = 0.1 - Dispersion grid = 2 2 2 - Dispersion stencil order = 5 - Dispersion estimated absolute RMS force accuracy = 1.01251 - Dispersion estimated absolute real space RMS force accuracy = 1.01251 - Dispersion estimated absolute kspace RMS force accuracy = 7.29446e-07 - Disperion estimated relative force accuracy = 1.01251 - using double precision FFTs - 3d grid and FFT values/proc dispersion = 294 4 -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair lj/long/coul/long, 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) = 4.291 | 4.423 | 4.656 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 0 1 52.148338 0 53.647963 94.09503 4738.2137 - 50 17.850656 42.620113 0 69.389403 142.80556 4738.2137 - 100 9.4607189 49.700118 0 63.887649 117.51739 4738.2137 - 150 13.992056 47.731988 0 68.714825 140.56926 4738.2137 - 200 11.617635 52.509394 0 69.93149 142.6933 4738.2137 - 250 13.536287 48.33108 0 68.630434 133.91794 4738.2137 - 300 12.619985 50.328139 0 69.253384 132.46719 4738.2137 - 350 14.497923 50.092405 0 71.833853 143.39356 4738.2137 - 400 12.228079 50.202361 0 68.539894 131.75614 4738.2137 - 450 14.01349 50.908526 0 71.923506 144.25732 4738.2137 - 500 13.277341 50.381613 0 70.292644 137.20282 4738.2137 -Loop time of 6.17838 on 4 procs for 500 steps with 4000 atoms - -Performance: 34960.628 tau/day, 80.927 timesteps/s -93.3% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.74813 | 1.6453 | 2.5052 | 65.7 | 26.63 -Kspace | 1.036 | 2.9098 | 4.5974 | 94.8 | 47.10 -Neigh | 0.27464 | 1.2099 | 2.4155 | 84.8 | 19.58 -Comm | 0.1711 | 0.36843 | 0.5217 | 25.2 | 5.96 -Output | 0.00052595 | 0.0053349 | 0.0074508 | 3.8 | 0.09 -Modify | 0.023363 | 0.027308 | 0.032521 | 2.3 | 0.44 -Other | | 0.01228 | | | 0.20 - -Nlocal: 1000 ave 2002 max 241 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Nghost: 7608 ave 9312 max 5850 min -Histogram: 2 0 0 0 0 0 0 0 0 2 -Neighs: 127345 ave 211903 max 47616 min -Histogram: 2 0 0 0 0 0 0 0 0 2 - -Total # of neighbors = 509381 -Ave neighs/atom = 127.345 -Neighbor list builds = 124 -Dangerous builds = 97 -Total wall time: 0:00:06 diff --git a/examples/balance/log.27Nov18.balance.neigh.dynamic.g++.2 b/examples/balance/log.27Nov18.balance.neigh.dynamic.g++.2 deleted file mode 100644 index aef8d90889..0000000000 --- a/examples/balance/log.27Nov18.balance.neigh.dynamic.g++.2 +++ /dev/null @@ -1,228 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 2 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000553608 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes -fix p all property/atom d_WEIGHT -fix 0 all balance 50 1.0 shift x 5 1.0 weight neigh 0.8 weight store WEIGHT -compute p all property/atom d_WEIGHT -variable maximb equal f_0[1] -variable iter equal f_0[2] -variable prev equal f_0[3] -variable final equal f_0 - -#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" - -fix 1 all nve - -#dump id all atom 50 dump.melt -#dump id all custom 50 dump.lammpstrj id type x y z c_p - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mp4 c_p type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 amap 0.0 2.0 cf 0.1 3 min blue 0.5 green max red - -thermo 50 -run 500 -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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 -WARNING: Balance weight neigh skipped b/c no list found (src/imbalance_neigh.cpp:65) -Per MPI rank memory allocation (min/avg/max) = 4.562 | 4.753 | 4.944 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 - 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 4738.2137 - 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 4738.2137 - 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 4738.2137 - 200 0.536665 -6.2530113 0 -5.448215 -1.933468 4738.2137 - 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 - 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 4738.2137 - 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 4738.2137 - 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 4738.2137 - 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 4738.2137 - 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 -Loop time of 3.92718 on 2 procs for 500 steps with 4000 atoms - -Performance: 55001.290 tau/day, 127.318 timesteps/s -99.2% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.2902 | 2.6102 | 2.9303 | 19.8 | 66.47 -Neigh | 0.89715 | 0.89718 | 0.8972 | 0.0 | 22.85 -Comm | 0.074355 | 0.39408 | 0.7138 | 50.9 | 10.03 -Output | 0.0003202 | 0.00035989 | 0.00039959 | 0.0 | 0.01 -Modify | 0.016438 | 0.016832 | 0.017226 | 0.3 | 0.43 -Other | | 0.008523 | | | 0.22 - -Nlocal: 2000 ave 2056 max 1944 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10457.5 ave 10508 max 10407 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 298070 ave 333007 max 263132 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 596139 -Ave neighs/atom = 149.035 -Neighbor list builds = 51 -Dangerous builds = 0 -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.569 | 4.758 | 4.946 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 - 550 0.54137926 -6.2592773 0 -5.4474115 -1.9770236 4738.2137 - 600 0.54022886 -6.2573307 0 -5.44719 -1.9619637 4738.2137 - 650 0.54709009 -6.2678862 0 -5.4474562 -1.9958342 4738.2137 - 700 0.54590044 -6.2656903 0 -5.4470444 -1.9957108 4738.2137 - 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 4738.2137 - 800 0.5520987 -6.2739184 0 -5.4459774 -2.0084991 4738.2137 - 850 0.54963958 -6.2702473 0 -5.445994 -1.9740031 4738.2137 - 900 0.54390586 -6.2615476 0 -5.4458927 -1.9400871 4738.2137 - 950 0.54741732 -6.2665755 0 -5.4456548 -1.9466417 4738.2137 - 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 -Loop time of 3.83028 on 2 procs for 500 steps with 4000 atoms - -Performance: 56392.741 tau/day, 130.539 timesteps/s -99.6% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.263 | 2.5605 | 2.858 | 18.6 | 66.85 -Neigh | 0.8789 | 0.88341 | 0.88791 | 0.5 | 23.06 -Comm | 0.068052 | 0.36076 | 0.65347 | 48.7 | 9.42 -Output | 0.0003016 | 0.0003438 | 0.000386 | 0.0 | 0.01 -Modify | 0.016381 | 0.016829 | 0.017277 | 0.3 | 0.44 -Other | | 0.008426 | | | 0.22 - -Nlocal: 2000 ave 2049 max 1951 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10389 ave 10436 max 10342 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 300836 ave 335987 max 265684 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 601671 -Ave neighs/atom = 150.418 -Neighbor list builds = 51 -Dangerous builds = 0 -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.569 | 4.758 | 4.946 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 - 1050 0.54633412 -6.2656384 0 -5.4463421 -1.9012895 4738.2137 - 1100 0.54325667 -6.2612166 0 -5.4465353 -1.8870463 4738.2137 - 1150 0.55057583 -6.2719187 0 -5.4462614 -1.9575881 4738.2137 - 1200 0.53728175 -6.251744 0 -5.4460228 -1.8124097 4738.2137 - 1250 0.54077561 -6.2567544 0 -5.4457938 -1.8418134 4738.2137 - 1300 0.54430333 -6.260995 0 -5.4447442 -1.856351 4738.2137 - 1350 0.55097839 -6.2715909 0 -5.4453299 -1.9014337 4738.2137 - 1400 0.53858139 -6.2526781 0 -5.445008 -1.7965773 4738.2137 - 1450 0.5421844 -6.2574683 0 -5.444395 -1.7901189 4738.2137 - 1500 0.54200617 -6.2571433 0 -5.4443373 -1.8000344 4738.2137 -Loop time of 3.81946 on 2 procs for 500 steps with 4000 atoms - -Performance: 56552.445 tau/day, 130.908 timesteps/s -99.6% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.2594 | 2.5549 | 2.8504 | 18.5 | 66.89 -Neigh | 0.86746 | 0.87203 | 0.8766 | 0.5 | 22.83 -Comm | 0.06715 | 0.36699 | 0.66684 | 49.5 | 9.61 -Output | 0.00029325 | 0.00033867 | 0.00038409 | 0.0 | 0.01 -Modify | 0.016529 | 0.016817 | 0.017105 | 0.2 | 0.44 -Other | | 0.008371 | | | 0.22 - -Nlocal: 2000 ave 2034 max 1966 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10386 ave 10936 max 9836 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 302958 ave 337188 max 268729 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 605917 -Ave neighs/atom = 151.479 -Neighbor list builds = 51 -Dangerous builds = 0 -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.569 | 4.758 | 4.946 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 1500 0.54200617 -6.2571433 0 -5.4443373 -1.8000344 4738.2137 - 1550 0.53713593 -6.2504069 0 -5.4449044 -1.764709 4738.2137 - 1600 0.54679556 -6.2646482 0 -5.4446599 -1.8115775 4738.2137 - 1650 0.53806577 -6.2519006 0 -5.4450037 -1.7409142 4738.2137 - 1700 0.5347951 -6.2468962 0 -5.4449041 -1.7162331 4738.2137 - 1750 0.53714568 -6.2506577 0 -5.4451406 -1.7340499 4738.2137 - 1800 0.52749839 -6.2358664 0 -5.4448167 -1.6874961 4738.2137 - 1850 0.54585956 -6.2629394 0 -5.4443547 -1.7758764 4738.2137 - 1900 0.53010831 -6.2387561 0 -5.4437925 -1.6381825 4738.2137 - 1950 0.54288557 -6.2583073 0 -5.4441826 -1.7368524 4738.2137 - 2000 0.52765923 -6.2348572 0 -5.4435663 -1.5588839 4738.2137 -Loop time of 3.78423 on 2 procs for 500 steps with 4000 atoms - -Performance: 57078.976 tau/day, 132.127 timesteps/s -99.4% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.2449 | 2.5388 | 2.8328 | 18.4 | 67.09 -Neigh | 0.85527 | 0.85828 | 0.86129 | 0.3 | 22.68 -Comm | 0.065453 | 0.36215 | 0.65885 | 49.3 | 9.57 -Output | 0.00030518 | 0.00032794 | 0.00035071 | 0.0 | 0.01 -Modify | 0.016444 | 0.016597 | 0.01675 | 0.1 | 0.44 -Other | | 0.008044 | | | 0.21 - -Nlocal: 2000 ave 2031 max 1969 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10334 ave 10921 max 9747 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 303988 ave 338808 max 269168 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 607976 -Ave neighs/atom = 151.994 -Neighbor list builds = 51 -Dangerous builds = 0 - -Total wall time: 0:00:15 diff --git a/examples/balance/log.27Nov18.balance.neigh.dynamic.g++.4 b/examples/balance/log.27Nov18.balance.neigh.dynamic.g++.4 deleted file mode 100644 index 08a59785d4..0000000000 --- a/examples/balance/log.27Nov18.balance.neigh.dynamic.g++.4 +++ /dev/null @@ -1,228 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 4 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000430107 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes -fix p all property/atom d_WEIGHT -fix 0 all balance 50 1.0 shift x 5 1.0 weight neigh 0.8 weight store WEIGHT -compute p all property/atom d_WEIGHT -variable maximb equal f_0[1] -variable iter equal f_0[2] -variable prev equal f_0[3] -variable final equal f_0 - -#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" - -fix 1 all nve - -#dump id all atom 50 dump.melt -#dump id all custom 50 dump.lammpstrj id type x y z c_p - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mp4 c_p type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 amap 0.0 2.0 cf 0.1 3 min blue 0.5 green max red - -thermo 50 -run 500 -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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 -WARNING: Balance weight neigh skipped b/c no list found (src/imbalance_neigh.cpp:65) -Per MPI rank memory allocation (min/avg/max) = 3.691 | 4.072 | 4.454 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 - 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 4738.2137 - 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 4738.2137 - 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 4738.2137 - 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 4738.2137 - 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 - 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 4738.2137 - 350 0.55600296 -6.2801497 0 -5.4463538 -2.0394056 4738.2137 - 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 4738.2137 - 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 4738.2137 - 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 -Loop time of 2.45924 on 4 procs for 500 steps with 4000 atoms - -Performance: 87831.985 tau/day, 203.315 timesteps/s -97.9% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.1372 | 1.4179 | 1.6656 | 18.1 | 57.66 -Neigh | 0.30681 | 0.46841 | 0.69372 | 24.1 | 19.05 -Comm | 0.46019 | 0.55206 | 0.6052 | 7.7 | 22.45 -Output | 0.00034404 | 0.0005753 | 0.001132 | 0.0 | 0.02 -Modify | 0.007339 | 0.0099927 | 0.013719 | 2.7 | 0.41 -Other | | 0.01029 | | | 0.42 - -Nlocal: 1000 ave 1549 max 605 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Nghost: 8755 ave 9851 max 8071 min -Histogram: 2 0 0 0 0 1 0 0 0 1 -Neighs: 149308 ave 164554 max 128538 min -Histogram: 1 0 0 1 0 0 0 0 0 2 - -Total # of neighbors = 597231 -Ave neighs/atom = 149.308 -Neighbor list builds = 50 -Dangerous builds = 0 -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.097 | 4.288 | 4.475 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 - 550 0.53879347 -6.2554274 0 -5.4474393 -1.9756834 4738.2137 - 600 0.54275982 -6.2616799 0 -5.4477437 -1.9939993 4738.2137 - 650 0.54526651 -6.265098 0 -5.4474027 -2.0303672 4738.2137 - 700 0.54369381 -6.263201 0 -5.4478642 -1.9921967 4738.2137 - 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 4738.2137 - 800 0.55061744 -6.2725556 0 -5.4468359 -2.0100922 4738.2137 - 850 0.55371614 -6.2763992 0 -5.4460326 -2.0065329 4738.2137 - 900 0.54756622 -6.2668303 0 -5.4456863 -1.9796122 4738.2137 - 950 0.54791593 -6.2673161 0 -5.4456477 -1.9598278 4738.2137 - 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 -Loop time of 2.389 on 4 procs for 500 steps with 4000 atoms - -Performance: 90414.542 tau/day, 209.293 timesteps/s -97.2% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.2112 | 1.381 | 1.5214 | 11.0 | 57.81 -Neigh | 0.29746 | 0.48382 | 0.74669 | 27.5 | 20.25 -Comm | 0.40449 | 0.50032 | 0.57922 | 9.4 | 20.94 -Output | 0.00033617 | 0.00064272 | 0.0013907 | 0.0 | 0.03 -Modify | 0.0070128 | 0.010942 | 0.015494 | 3.7 | 0.46 -Other | | 0.01223 | | | 0.51 - -Nlocal: 1000 ave 1569 max 595 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Nghost: 8715.25 ave 9779 max 8018 min -Histogram: 2 0 0 0 0 1 0 0 0 1 -Neighs: 150170 ave 163282 max 132114 min -Histogram: 1 0 0 1 0 0 0 0 0 2 - -Total # of neighbors = 600678 -Ave neighs/atom = 150.169 -Neighbor list builds = 53 -Dangerous builds = 0 -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.097 | 4.288 | 4.475 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 - 1050 0.54629742 -6.2657526 0 -5.4465113 -1.945821 4738.2137 - 1100 0.55427881 -6.2781733 0 -5.446963 -2.0021027 4738.2137 - 1150 0.54730654 -6.267257 0 -5.4465025 -1.9420678 4738.2137 - 1200 0.5388281 -6.2547963 0 -5.4467562 -1.890178 4738.2137 - 1250 0.54848768 -6.2694237 0 -5.4468979 -1.9636797 4738.2137 - 1300 0.54134321 -6.2590728 0 -5.447261 -1.9170271 4738.2137 - 1350 0.53564389 -6.2501521 0 -5.4468871 -1.8642306 4738.2137 - 1400 0.53726924 -6.2518379 0 -5.4461355 -1.8544028 4738.2137 - 1450 0.54525935 -6.2632653 0 -5.4455808 -1.9072158 4738.2137 - 1500 0.54223346 -6.2591057 0 -5.4459588 -1.8866985 4738.2137 -Loop time of 2.45895 on 4 procs for 500 steps with 4000 atoms - -Performance: 87842.291 tau/day, 203.339 timesteps/s -95.7% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.2592 | 1.4017 | 1.5327 | 11.0 | 57.01 -Neigh | 0.28831 | 0.47661 | 0.75988 | 28.7 | 19.38 -Comm | 0.41426 | 0.54907 | 0.6044 | 10.6 | 22.33 -Output | 0.0003705 | 0.00060898 | 0.0012109 | 0.0 | 0.02 -Modify | 0.014004 | 0.016774 | 0.020669 | 1.9 | 0.68 -Other | | 0.01415 | | | 0.58 - -Nlocal: 1000 ave 1543 max 605 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Nghost: 8704.5 ave 9803 max 7983 min -Histogram: 2 0 0 0 0 1 0 0 0 1 -Neighs: 150494 ave 166334 max 129306 min -Histogram: 1 0 0 1 0 0 0 0 0 2 - -Total # of neighbors = 601974 -Ave neighs/atom = 150.494 -Neighbor list builds = 51 -Dangerous builds = 0 -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.097 | 4.288 | 4.475 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 1500 0.54223346 -6.2591057 0 -5.4459588 -1.8866985 4738.2137 - 1550 0.55327018 -6.2750126 0 -5.4453148 -1.9506585 4738.2137 - 1600 0.54419004 -6.2612622 0 -5.4451812 -1.8559437 4738.2137 - 1650 0.54710034 -6.2661938 0 -5.4457484 -1.8882763 4738.2137 - 1700 0.53665691 -6.2504958 0 -5.4457117 -1.8068009 4738.2137 - 1750 0.5486471 -6.2681127 0 -5.4453478 -1.8662656 4738.2137 - 1800 0.54476222 -6.2615086 0 -5.4445695 -1.8352838 4738.2137 - 1850 0.54143048 -6.2555517 0 -5.443609 -1.8005726 4738.2137 - 1900 0.53992511 -6.254136 0 -5.4444508 -1.7768715 4738.2137 - 1950 0.54665895 -6.2640958 0 -5.4443124 -1.7946993 4738.2137 - 2000 0.5455751 -6.2625337 0 -5.4443756 -1.8072242 4738.2137 -Loop time of 2.42708 on 4 procs for 500 steps with 4000 atoms - -Performance: 88995.678 tau/day, 206.009 timesteps/s -97.3% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.2482 | 1.3902 | 1.5329 | 10.6 | 57.28 -Neigh | 0.31099 | 0.50813 | 0.78451 | 28.1 | 20.94 -Comm | 0.37293 | 0.5011 | 0.58684 | 11.2 | 20.65 -Output | 0.00033593 | 0.00060582 | 0.0012991 | 0.0 | 0.02 -Modify | 0.007091 | 0.0097566 | 0.013303 | 2.7 | 0.40 -Other | | 0.01727 | | | 0.71 - -Nlocal: 1000 ave 1539 max 607 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Nghost: 8677 ave 9837 max 7981 min -Histogram: 2 0 0 0 1 0 0 0 0 1 -Neighs: 151655 ave 168263 max 129443 min -Histogram: 1 0 0 1 0 0 0 0 0 2 - -Total # of neighbors = 606619 -Ave neighs/atom = 151.655 -Neighbor list builds = 56 -Dangerous builds = 0 - -Total wall time: 0:00:09 diff --git a/examples/balance/log.27Nov18.balance.neigh.rcb.g++.2 b/examples/balance/log.27Nov18.balance.neigh.rcb.g++.2 deleted file mode 100644 index 42b04f818c..0000000000 --- a/examples/balance/log.27Nov18.balance.neigh.rcb.g++.2 +++ /dev/null @@ -1,141 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 2 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000511885 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -comm_style tiled - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes -fix p all property/atom d_WEIGHT -fix 0 all balance 50 1.0 rcb weight neigh 0.8 weight store WEIGHT -compute p all property/atom d_WEIGHT -variable maximb equal f_0[1] -variable iter equal f_0[2] -variable prev equal f_0[3] -variable final equal f_0 - -#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" - -fix 1 all nve - -#dump id all atom 50 dump.melt -#dump id all custom 50 dump.lammpstrj id type x y z c_p - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 - -run 250 -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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 -WARNING: Balance weight neigh skipped b/c no list found (src/imbalance_neigh.cpp:65) -Per MPI rank memory allocation (min/avg/max) = 4.138 | 4.329 | 4.52 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 - 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 4738.2137 - 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 4738.2137 - 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 4738.2137 - 200 0.536665 -6.2530113 0 -5.448215 -1.933468 4738.2137 - 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 -Loop time of 1.80309 on 2 procs for 250 steps with 4000 atoms - -Performance: 59897.213 tau/day, 138.651 timesteps/s -97.9% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.2185 | 1.2646 | 1.3106 | 4.1 | 70.13 -Neigh | 0.43131 | 0.43248 | 0.43365 | 0.2 | 23.99 -Comm | 0.045418 | 0.090311 | 0.1352 | 14.9 | 5.01 -Output | 0.00017476 | 0.00021195 | 0.00024915 | 0.0 | 0.01 -Modify | 0.011012 | 0.01103 | 0.011048 | 0.0 | 0.61 -Other | | 0.004476 | | | 0.25 - -Nlocal: 2000 ave 2000 max 2000 min -Histogram: 2 0 0 0 0 0 0 0 0 0 -Nghost: 10412.5 ave 10414 max 10411 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 298332 ave 299797 max 296867 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 596664 -Ave neighs/atom = 149.166 -Neighbor list builds = 25 -Dangerous builds = 0 -run 250 -Per MPI rank memory allocation (min/avg/max) = 4.929 | 4.929 | 4.93 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 - 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 4738.2137 - 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 4738.2137 - 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 4738.2137 - 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 4738.2137 - 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 -Loop time of 1.77097 on 2 procs for 250 steps with 4000 atoms - -Performance: 60983.669 tau/day, 141.166 timesteps/s -99.4% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.2353 | 1.2515 | 1.2678 | 1.5 | 70.67 -Neigh | 0.44235 | 0.44303 | 0.44371 | 0.1 | 25.02 -Comm | 0.045978 | 0.061555 | 0.077133 | 6.3 | 3.48 -Output | 0.0001564 | 0.00016713 | 0.00017786 | 0.0 | 0.01 -Modify | 0.010305 | 0.01031 | 0.010315 | 0.0 | 0.58 -Other | | 0.004365 | | | 0.25 - -Nlocal: 2000 ave 2000 max 2000 min -Histogram: 2 0 0 0 0 0 0 0 0 0 -Nghost: 10466.5 ave 10470 max 10463 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 298070 ave 349236 max 246903 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 596139 -Ave neighs/atom = 149.035 -Neighbor list builds = 26 -Dangerous builds = 0 - -Total wall time: 0:00:03 diff --git a/examples/balance/log.27Nov18.balance.neigh.rcb.g++.4 b/examples/balance/log.27Nov18.balance.neigh.rcb.g++.4 deleted file mode 100644 index 4a2a747773..0000000000 --- a/examples/balance/log.27Nov18.balance.neigh.rcb.g++.4 +++ /dev/null @@ -1,141 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 4 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000440836 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -comm_style tiled - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes -fix p all property/atom d_WEIGHT -fix 0 all balance 50 1.0 rcb weight neigh 0.8 weight store WEIGHT -compute p all property/atom d_WEIGHT -variable maximb equal f_0[1] -variable iter equal f_0[2] -variable prev equal f_0[3] -variable final equal f_0 - -#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" - -fix 1 all nve - -#dump id all atom 50 dump.melt -#dump id all custom 50 dump.lammpstrj id type x y z c_p - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 - -run 250 -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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 -WARNING: Balance weight neigh skipped b/c no list found (src/imbalance_neigh.cpp:65) -Per MPI rank memory allocation (min/avg/max) = 3.917 | 3.927 | 3.945 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 - 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 4738.2137 - 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 4738.2137 - 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 4738.2137 - 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 4738.2137 - 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 -Loop time of 1.0693 on 4 procs for 250 steps with 4000 atoms - -Performance: 101000.295 tau/day, 233.797 timesteps/s -89.5% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.58255 | 0.65493 | 0.72281 | 8.3 | 61.25 -Neigh | 0.214 | 0.22344 | 0.23158 | 1.4 | 20.90 -Comm | 0.10451 | 0.17801 | 0.25967 | 17.3 | 16.65 -Output | 0.00015521 | 0.00020903 | 0.00034142 | 0.0 | 0.02 -Modify | 0.007113 | 0.0073407 | 0.0076027 | 0.2 | 0.69 -Other | | 0.005369 | | | 0.50 - -Nlocal: 1000 ave 1005 max 996 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Nghost: 7674 ave 7679 max 7670 min -Histogram: 1 1 0 0 0 0 1 0 0 1 -Neighs: 149349 ave 149991 max 147960 min -Histogram: 1 0 0 0 0 0 0 1 0 2 - -Total # of neighbors = 597396 -Ave neighs/atom = 149.349 -Neighbor list builds = 25 -Dangerous builds = 0 -run 250 -Per MPI rank memory allocation (min/avg/max) = 3.922 | 4.004 | 4.078 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 - 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 4738.2137 - 350 0.55600296 -6.2801497 0 -5.4463538 -2.0394056 4738.2137 - 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 4738.2137 - 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 4738.2137 - 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 -Loop time of 0.999028 on 4 procs for 250 steps with 4000 atoms - -Performance: 108105.088 tau/day, 250.243 timesteps/s -93.7% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.60256 | 0.6507 | 0.68091 | 3.8 | 65.13 -Neigh | 0.21602 | 0.21945 | 0.22516 | 0.8 | 21.97 -Comm | 0.087366 | 0.11787 | 0.16957 | 9.6 | 11.80 -Output | 0.00016737 | 0.00028127 | 0.00057006 | 0.0 | 0.03 -Modify | 0.0065138 | 0.0066211 | 0.0067828 | 0.1 | 0.66 -Other | | 0.004103 | | | 0.41 - -Nlocal: 1000 ave 1005 max 994 min -Histogram: 1 0 0 1 0 0 0 0 1 1 -Nghost: 7675.75 ave 7703 max 7648 min -Histogram: 1 1 0 0 0 0 0 0 1 1 -Neighs: 149308 ave 173909 max 124842 min -Histogram: 2 0 0 0 0 0 0 0 0 2 - -Total # of neighbors = 597231 -Ave neighs/atom = 149.308 -Neighbor list builds = 25 -Dangerous builds = 0 - -Total wall time: 0:00:02 diff --git a/examples/balance/log.27Nov18.balance.neigh.static.g++.2 b/examples/balance/log.27Nov18.balance.neigh.static.g++.2 deleted file mode 100644 index de3aae921c..0000000000 --- a/examples/balance/log.27Nov18.balance.neigh.static.g++.2 +++ /dev/null @@ -1,211 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -variable factor index 1.0 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 2 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000495195 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes - -balance 1.0 shift x 10 1.0 weight neigh 0.8 # out weighted_var.txt -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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 -WARNING: Balance weight neigh skipped b/c no list found (src/imbalance_neigh.cpp:65) - rebalancing time: 0.000623703 seconds - iteration count = 1 - neigh weight factor: 0.8 - initial/final max load/proc = 2000 2000 - initial/final imbalance factor = 1 1 - x cuts: 0 0.5 1 - y cuts: 0 1 - z cuts: 0 1 - -fix 1 all nve - -#dump id all atom 50 dump.melt - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 -run 250 post no -Per MPI rank memory allocation (min/avg/max) = 4.297 | 4.488 | 4.678 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1 -6.9453205 0 -5.4456955 -5.6812358 - 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 - 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 - 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 - 200 0.536665 -6.2530113 0 -5.448215 -1.933468 - 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 -Loop time of 1.97176 on 2 procs for 250 steps with 4000 atoms - -balance 1.0 shift x 10 1.0 weight neigh 0.8 - rebalancing time: 0.000482321 seconds - iteration count = 10 - neigh weight factor: 0.8 - initial/final max load/proc = 290759 262123 - initial/final imbalance factor = 1.10982 1.00052 - x cuts: 0 0.45166 1 - y cuts: 0 1 - z cuts: 0 1 -run 250 post no -Per MPI rank memory allocation (min/avg/max) = 4.304 | 4.492 | 4.681 Mbytes -Step Temp E_pair E_mol TotEng Press - 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 - 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 - 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 - 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 - 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 - 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 -Loop time of 1.77716 on 2 procs for 250 steps with 4000 atoms - -balance 1.0 shift x 10 1.0 weight neigh 0.8 - rebalancing time: 0.000497341 seconds - iteration count = 10 - neigh weight factor: 0.8 - initial/final max load/proc = 296648 269016 - initial/final imbalance factor = 1.10642 1.00336 - x cuts: 0 0.501461 1 - y cuts: 0 1 - z cuts: 0 1 -run 250 post no -Per MPI rank memory allocation (min/avg/max) = 4.681 | 4.683 | 4.686 Mbytes -Step Temp E_pair E_mol TotEng Press - 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 - 550 0.54137926 -6.2592773 0 -5.4474115 -1.9770236 - 600 0.54022886 -6.2573307 0 -5.44719 -1.9619637 - 650 0.54709009 -6.2678862 0 -5.4474562 -1.9958342 - 700 0.54590044 -6.2656903 0 -5.4470444 -1.9957108 - 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 -Loop time of 2.0039 on 2 procs for 250 steps with 4000 atoms - -balance 1.0 shift x 10 1.0 weight neigh 0.8 weight time 0.6 - rebalancing time: 0.000368118 seconds - iteration count = 10 - neigh weight factor: 0.8 - time weight factor: 0.6 - initial/final max load/proc = 168.493 167.093 - initial/final imbalance factor = 1.00948 1.00109 - x cuts: 0 0.499991 1 - y cuts: 0 1 - z cuts: 0 1 -run 250 -Per MPI rank memory allocation (min/avg/max) = 4.681 | 4.683 | 4.686 Mbytes -Step Temp E_pair E_mol TotEng Press - 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 - 800 0.5520987 -6.2739184 0 -5.4459774 -2.0084991 - 850 0.54963958 -6.2702473 0 -5.445994 -1.9740031 - 900 0.54390586 -6.2615476 0 -5.4458927 -1.9400871 - 950 0.54741732 -6.2665755 0 -5.4456548 -1.9466417 - 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 -Loop time of 2.0382 on 2 procs for 250 steps with 4000 atoms - -Performance: 52987.998 tau/day, 122.657 timesteps/s -98.9% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.96918 | 1.257 | 1.5449 | 25.7 | 61.67 -Neigh | 0.40421 | 0.42672 | 0.44923 | 3.4 | 20.94 -Comm | 0.032542 | 0.34306 | 0.65358 | 53.0 | 16.83 -Output | 0.00014377 | 0.00015366 | 0.00016356 | 0.0 | 0.01 -Modify | 0.0070617 | 0.007337 | 0.0076122 | 0.3 | 0.36 -Other | | 0.003878 | | | 0.19 - -Nlocal: 2000 ave 2056 max 1944 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10403.5 ave 10525 max 10282 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 300836 ave 365656 max 236015 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 601671 -Ave neighs/atom = 150.418 -Neighbor list builds = 25 -Dangerous builds = 0 -balance 1.0 shift x 10 1.0 weight neigh 0.8 weight time 0.6 - rebalancing time: 0.000344753 seconds - iteration count = 10 - neigh weight factor: 0.8 - time weight factor: 0.6 - initial/final max load/proc = 170.235 168.809 - initial/final imbalance factor = 1.01037 1.00191 - x cuts: 0 0.49755 1 - y cuts: 0 1 - z cuts: 0 1 -run 250 -Per MPI rank memory allocation (min/avg/max) = 4.681 | 4.683 | 4.686 Mbytes -Step Temp E_pair E_mol TotEng Press - 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 - 1050 0.54633412 -6.2656384 0 -5.4463421 -1.9012895 - 1100 0.54325667 -6.2612166 0 -5.4465353 -1.8870463 - 1150 0.55057583 -6.2719187 0 -5.4462614 -1.9575881 - 1200 0.53728175 -6.251744 0 -5.4460228 -1.8124097 - 1250 0.54077561 -6.2567544 0 -5.4457938 -1.8418134 -Loop time of 2.01086 on 2 procs for 250 steps with 4000 atoms - -Performance: 53708.387 tau/day, 124.325 timesteps/s -98.9% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.0037 | 1.2615 | 1.5192 | 23.0 | 62.73 -Neigh | 0.40846 | 0.4277 | 0.44695 | 2.9 | 21.27 -Comm | 0.033029 | 0.31012 | 0.5872 | 49.8 | 15.42 -Output | 0.00014424 | 0.00015259 | 0.00016093 | 0.0 | 0.01 -Modify | 0.007298 | 0.0074347 | 0.0075715 | 0.2 | 0.37 -Other | | 0.003999 | | | 0.20 - -Nlocal: 2000 ave 2038 max 1962 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10391 ave 10489 max 10293 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 301104 ave 358264 max 243943 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 602207 -Ave neighs/atom = 150.552 -Neighbor list builds = 25 -Dangerous builds = 0 - -Total wall time: 0:00:09 diff --git a/examples/balance/log.27Nov18.balance.neigh.static.g++.4 b/examples/balance/log.27Nov18.balance.neigh.static.g++.4 deleted file mode 100644 index 3a9ab43cb1..0000000000 --- a/examples/balance/log.27Nov18.balance.neigh.static.g++.4 +++ /dev/null @@ -1,211 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -variable factor index 1.0 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 4 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000429153 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes - -balance 1.0 shift x 10 1.0 weight neigh 0.8 # out weighted_var.txt -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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 -WARNING: Balance weight neigh skipped b/c no list found (src/imbalance_neigh.cpp:65) - rebalancing time: 0.000684023 seconds - iteration count = 3 - neigh weight factor: 0.8 - initial/final max load/proc = 1200 1000 - initial/final imbalance factor = 1.2 1 - x cuts: 0 0.25 0.5 0.71875 1 - y cuts: 0 1 - z cuts: 0 1 - -fix 1 all nve - -#dump id all atom 50 dump.melt - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 -run 250 post no -Per MPI rank memory allocation (min/avg/max) = 3.426 | 3.802 | 4.188 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 1 -6.9453205 0 -5.4456955 -5.6812358 - 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 - 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 - 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 - 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 - 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 -Loop time of 1.44749 on 4 procs for 250 steps with 4000 atoms - -balance 1.0 shift x 10 1.0 weight neigh 0.8 - rebalancing time: 0.000543356 seconds - iteration count = 10 - neigh weight factor: 0.8 - initial/final max load/proc = 220132 125739 - initial/final imbalance factor = 1.75833 1.00436 - x cuts: 0 0.304443 0.450928 0.626678 1 - y cuts: 0 1 - z cuts: 0 1 -run 250 post no -Per MPI rank memory allocation (min/avg/max) = 3.814 | 3.999 | 4.192 Mbytes -Step Temp E_pair E_mol TotEng Press - 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 - 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 - 350 0.55600296 -6.2801497 0 -5.4463538 -2.0394056 - 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 - 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 - 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 -Loop time of 1.19834 on 4 procs for 250 steps with 4000 atoms - -balance 1.0 shift x 10 1.0 weight neigh 0.8 - rebalancing time: 0.000308752 seconds - iteration count = 10 - neigh weight factor: 0.8 - initial/final max load/proc = 147109 128929 - initial/final imbalance factor = 1.14487 1.00338 - x cuts: 0 0.304873 0.449926 0.59527 1 - y cuts: 0 1 - z cuts: 0 1 -run 250 post no -Per MPI rank memory allocation (min/avg/max) = 3.832 | 4.018 | 4.209 Mbytes -Step Temp E_pair E_mol TotEng Press - 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 - 550 0.53879347 -6.2554274 0 -5.4474393 -1.9756834 - 600 0.54275982 -6.2616799 0 -5.4477437 -1.9939993 - 650 0.54526651 -6.265098 0 -5.4474027 -2.0303672 - 700 0.54369381 -6.263201 0 -5.4478642 -1.9921967 - 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 -Loop time of 1.23246 on 4 procs for 250 steps with 4000 atoms - -balance 1.0 shift x 10 1.0 weight neigh 0.8 weight time 0.6 - rebalancing time: 0.000306845 seconds - iteration count = 10 - neigh weight factor: 0.8 - time weight factor: 0.6 - initial/final max load/proc = 114.116 101.665 - initial/final imbalance factor = 1.12567 1.00285 - x cuts: 0 0.30983 0.449501 0.588031 1 - y cuts: 0 1 - z cuts: 0 1 -run 250 -Per MPI rank memory allocation (min/avg/max) = 3.832 | 4.018 | 4.209 Mbytes -Step Temp E_pair E_mol TotEng Press - 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 - 800 0.55061744 -6.2725556 0 -5.4468359 -2.0100922 - 850 0.55371614 -6.2763992 0 -5.4460326 -2.0065329 - 900 0.54756622 -6.2668303 0 -5.4456863 -1.9796122 - 950 0.54791593 -6.2673161 0 -5.4456477 -1.9598278 - 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 -Loop time of 1.13265 on 4 procs for 250 steps with 4000 atoms - -Performance: 95351.673 tau/day, 220.721 timesteps/s -97.5% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.64092 | 0.67347 | 0.70289 | 3.5 | 59.46 -Neigh | 0.11654 | 0.22172 | 0.35287 | 22.2 | 19.58 -Comm | 0.068215 | 0.22827 | 0.36221 | 28.0 | 20.15 -Output | 0.00016975 | 0.00031555 | 0.00065875 | 0.0 | 0.03 -Modify | 0.00214 | 0.004007 | 0.0062947 | 3.0 | 0.35 -Other | | 0.004862 | | | 0.43 - -Nlocal: 1000 ave 1651 max 529 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Nghost: 8692.5 ave 9709 max 8037 min -Histogram: 2 0 0 0 0 1 0 0 0 1 -Neighs: 150170 ave 154877 max 145634 min -Histogram: 1 0 0 1 0 0 1 0 0 1 - -Total # of neighbors = 600681 -Ave neighs/atom = 150.17 -Neighbor list builds = 25 -Dangerous builds = 0 -balance 1.0 shift x 10 1.0 weight neigh 0.8 weight time 0.6 - rebalancing time: 0.000319719 seconds - iteration count = 10 - neigh weight factor: 0.8 - time weight factor: 0.6 - initial/final max load/proc = 102.192 99.2749 - initial/final imbalance factor = 1.03206 1.0026 - x cuts: 0 0.312695 0.449907 0.587625 1 - y cuts: 0 1 - z cuts: 0 1 -run 250 -Per MPI rank memory allocation (min/avg/max) = 3.832 | 4.019 | 4.209 Mbytes -Step Temp E_pair E_mol TotEng Press - 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 - 1050 0.54629742 -6.2657526 0 -5.4465113 -1.945821 - 1100 0.55427881 -6.2781733 0 -5.446963 -2.0021027 - 1150 0.54730654 -6.267257 0 -5.4465025 -1.9420678 - 1200 0.5388281 -6.2547963 0 -5.4467562 -1.890178 - 1250 0.54848768 -6.2694237 0 -5.4468979 -1.9636797 -Loop time of 1.16447 on 4 procs for 250 steps with 4000 atoms - -Performance: 92745.661 tau/day, 214.689 timesteps/s -97.2% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.61612 | 0.67903 | 0.73112 | 5.1 | 58.31 -Neigh | 0.11722 | 0.22257 | 0.35236 | 22.3 | 19.11 -Comm | 0.099441 | 0.25198 | 0.42338 | 28.4 | 21.64 -Output | 0.00018501 | 0.0012686 | 0.0040495 | 4.5 | 0.11 -Modify | 0.0020952 | 0.0044899 | 0.0086782 | 4.0 | 0.39 -Other | | 0.005134 | | | 0.44 - -Nlocal: 1000 ave 1631 max 523 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Nghost: 8693.75 ave 9752 max 8002 min -Histogram: 2 0 0 0 0 1 0 0 0 1 -Neighs: 149995 ave 161500 max 141963 min -Histogram: 2 0 0 0 0 0 1 0 0 1 - -Total # of neighbors = 599979 -Ave neighs/atom = 149.995 -Neighbor list builds = 25 -Dangerous builds = 0 - -Total wall time: 0:00:06 diff --git a/examples/balance/log.27Nov18.balance.var.dynamic.g++.2 b/examples/balance/log.27Nov18.balance.var.dynamic.g++.2 deleted file mode 100644 index c488a725e0..0000000000 --- a/examples/balance/log.27Nov18.balance.var.dynamic.g++.2 +++ /dev/null @@ -1,257 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 2 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000491142 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes -fix p all property/atom d_WEIGHT -compute p all property/atom d_WEIGHT - -group fast type 1 -2600 atoms in group fast -group slow type 2 -1400 atoms in group slow -balance 1.0 shift x 10 1.0 weight group 2 fast 0.8 slow 2.5 weight store WEIGHT -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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 - rebalancing time: 0.000805378 seconds - iteration count = 10 - group weights: fast=0.8 slow=2.5 - storing weight in atom property d_WEIGHT - initial/final max load/proc = 2960 3120 - initial/final imbalance factor = 1.06093 1.11828 - x cuts: 0 0.449707 1 - y cuts: 0 1 - z cuts: 0 1 -variable lastweight atom c_p - -fix 0 all balance 50 1.0 shift x 10 1.0 weight var lastweight weight time 0.5 weight store WEIGHT -variable maximb equal f_0[1] -variable iter equal f_0[2] -variable prev equal f_0[3] -variable final equal f_0 - -#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" - -fix 1 all nve - -#dump id all atom 50 dump.melt -#dump id all custom 50 dump.lammpstrj id type x y z c_p - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.708 | 4.876 | 5.044 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 - 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 4738.2137 - 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 4738.2137 - 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 4738.2137 - 200 0.536665 -6.2530113 0 -5.448215 -1.933468 4738.2137 - 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 - 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 4738.2137 - 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 4738.2137 - 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 4738.2137 - 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 4738.2137 - 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 -Loop time of 5.01752 on 2 procs for 500 steps with 4000 atoms - -Performance: 43049.176 tau/day, 99.651 timesteps/s -98.5% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.4325 | 2.6317 | 3.8309 | 73.9 | 52.45 -Neigh | 0.72307 | 0.89995 | 1.0768 | 18.6 | 17.94 -Comm | 0.08143 | 1.4587 | 2.836 | 114.0 | 29.07 -Output | 0.00034356 | 0.00034773 | 0.00035191 | 0.0 | 0.01 -Modify | 0.015713 | 0.017661 | 0.01961 | 1.5 | 0.35 -Other | | 0.009141 | | | 0.18 - -Nlocal: 2000 ave 2500 max 1500 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10457 ave 11055 max 9859 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 298070 ave 483758 max 112381 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 596139 -Ave neighs/atom = 149.035 -Neighbor list builds = 51 -Dangerous builds = 0 -run 500 -Per MPI rank memory allocation (min/avg/max) = 5.092 | 5.269 | 5.445 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 - 550 0.54137926 -6.2592773 0 -5.4474115 -1.9770236 4738.2137 - 600 0.54022886 -6.2573307 0 -5.44719 -1.9619637 4738.2137 - 650 0.54709009 -6.2678862 0 -5.4474562 -1.9958342 4738.2137 - 700 0.54590044 -6.2656903 0 -5.4470444 -1.9957108 4738.2137 - 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 4738.2137 - 800 0.5520987 -6.2739184 0 -5.4459774 -2.0084991 4738.2137 - 850 0.54963958 -6.2702473 0 -5.445994 -1.9740031 4738.2137 - 900 0.54390586 -6.2615476 0 -5.4458927 -1.9400871 4738.2137 - 950 0.54741732 -6.2665755 0 -5.4456548 -1.9466417 4738.2137 - 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 -Loop time of 5.38962 on 2 procs for 500 steps with 4000 atoms - -Performance: 40077.052 tau/day, 92.771 timesteps/s -98.0% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.93627 | 2.5477 | 4.1591 | 101.0 | 47.27 -Neigh | 0.61458 | 0.87078 | 1.127 | 27.5 | 16.16 -Comm | 0.072418 | 1.9424 | 3.8124 | 134.2 | 36.04 -Output | 0.00034833 | 0.00035048 | 0.00035262 | 0.0 | 0.01 -Modify | 0.014652 | 0.018169 | 0.021687 | 2.6 | 0.34 -Other | | 0.01024 | | | 0.19 - -Nlocal: 2000 ave 2561 max 1439 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10257 ave 11109 max 9405 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 300836 ave 498670 max 103001 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 601671 -Ave neighs/atom = 150.418 -Neighbor list builds = 51 -Dangerous builds = 0 - -balance 1.0 shift x 10 1.0 weight group 2 fast 0.8 slow 2.5 weight store WEIGHT - rebalancing time: 0.000744104 seconds - iteration count = 10 - group weights: fast=0.8 slow=2.5 - storing weight in atom property d_WEIGHT - initial/final max load/proc = 4428.8 2798.1 - initial/final imbalance factor = 1.58738 1.0029 - x cuts: 0 0.45485 1 - y cuts: 0 1 - z cuts: 0 1 - -fix 0 all balance 50 1.0 shift x 5 1.0 weight var lastweight weight neigh 0.5 weight store WEIGHT - -run 500 -Per MPI rank memory allocation (min/avg/max) = 5.098 | 5.464 | 5.83 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 - 1050 0.54633412 -6.2656384 0 -5.4463421 -1.9012895 4738.2137 - 1100 0.54325667 -6.2612166 0 -5.4465353 -1.8870463 4738.2137 - 1150 0.55057583 -6.2719187 0 -5.4462614 -1.9575881 4738.2137 - 1200 0.53728175 -6.251744 0 -5.4460228 -1.8124097 4738.2137 - 1250 0.54077561 -6.2567544 0 -5.4457938 -1.8418134 4738.2137 - 1300 0.54430333 -6.260995 0 -5.4447442 -1.856351 4738.2137 - 1350 0.55097839 -6.2715909 0 -5.4453299 -1.9014337 4738.2137 - 1400 0.53858139 -6.2526781 0 -5.445008 -1.7965773 4738.2137 - 1450 0.54218439 -6.2574683 0 -5.444395 -1.7901189 4738.2137 - 1500 0.54200616 -6.2571433 0 -5.4443373 -1.8000345 4738.2137 -Loop time of 5.50675 on 2 procs for 500 steps with 4000 atoms - -Performance: 39224.584 tau/day, 90.798 timesteps/s -98.0% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.1091 | 2.6165 | 4.124 | 93.2 | 47.51 -Neigh | 0.49666 | 0.88338 | 1.2701 | 41.1 | 16.04 -Comm | 0.079062 | 1.9768 | 3.8745 | 135.0 | 35.90 -Output | 0.00032926 | 0.00041151 | 0.00049376 | 0.0 | 0.01 -Modify | 0.012776 | 0.018102 | 0.023428 | 4.0 | 0.33 -Other | | 0.01156 | | | 0.21 - -Nlocal: 2000 ave 3010 max 990 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10343 ave 12129 max 8557 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 302958 ave 519016 max 86901 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 605917 -Ave neighs/atom = 151.479 -Neighbor list builds = 51 -Dangerous builds = 0 -run 500 -Per MPI rank memory allocation (min/avg/max) = 5.847 | 5.872 | 5.897 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 1500 0.54200616 -6.2571433 0 -5.4443373 -1.8000345 4738.2137 - 1550 0.5371361 -6.250403 0 -5.4449003 -1.7647032 4738.2137 - 1600 0.54679571 -6.2646443 0 -5.4446558 -1.8115722 4738.2137 - 1650 0.53806587 -6.2519009 0 -5.4450039 -1.7409152 4738.2137 - 1700 0.53479436 -6.2469032 0 -5.4449122 -1.7162441 4738.2137 - 1750 0.53714071 -6.2506513 0 -5.4451416 -1.7340205 4738.2137 - 1800 0.52750533 -6.2358819 0 -5.4448217 -1.687537 4738.2137 - 1850 0.54585346 -6.262937 0 -5.4443615 -1.7758597 4738.2137 - 1900 0.53011247 -6.2387653 0 -5.4437954 -1.6382086 4738.2137 - 1950 0.54287683 -6.2583097 0 -5.4441981 -1.7367469 4738.2137 - 2000 0.52771288 -6.2349676 0 -5.4435962 -1.5593804 4738.2137 -Loop time of 5.80884 on 2 procs for 500 steps with 4000 atoms - -Performance: 37184.695 tau/day, 86.076 timesteps/s -97.7% CPU use with 2 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.71314 | 2.5435 | 4.3738 | 114.8 | 43.79 -Neigh | 0.39935 | 0.85806 | 1.3168 | 49.5 | 14.77 -Comm | 0.082629 | 2.3761 | 4.6695 | 148.8 | 40.90 -Output | 0.00034571 | 0.00044024 | 0.00053477 | 0.0 | 0.01 -Modify | 0.011643 | 0.018227 | 0.024811 | 4.9 | 0.31 -Other | | 0.01257 | | | 0.22 - -Nlocal: 2000 ave 3032 max 968 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Nghost: 10266 ave 12245 max 8287 min -Histogram: 1 0 0 0 0 0 0 0 0 1 -Neighs: 303998 ave 525128 max 82868 min -Histogram: 1 0 0 0 0 0 0 0 0 1 - -Total # of neighbors = 607996 -Ave neighs/atom = 151.999 -Neighbor list builds = 51 -Dangerous builds = 0 -Total wall time: 0:00:21 diff --git a/examples/balance/log.27Nov18.balance.var.dynamic.g++.4 b/examples/balance/log.27Nov18.balance.var.dynamic.g++.4 deleted file mode 100644 index 66c1183481..0000000000 --- a/examples/balance/log.27Nov18.balance.var.dynamic.g++.4 +++ /dev/null @@ -1,257 +0,0 @@ -LAMMPS (27 Nov 2018) - using 1 OpenMP thread(s) per MPI task -# 3d Lennard-Jones melt - -units lj -atom_style atomic -processors * 1 1 - -lattice fcc 0.8442 -Lattice spacing in x,y,z = 1.6796 1.6796 1.6796 -region box block 0 10 0 10 0 10 -create_box 3 box -Created orthogonal box = (0 0 0) to (16.796 16.796 16.796) - 4 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 4000 atoms - Time spent = 0.000424862 secs -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 - 1400 settings made for type - -velocity all create 1.0 87287 - -pair_style lj/cut 2.5 -pair_coeff * * 1.0 1.0 2.5 -pair_coeff * 2 1.0 1.0 5.0 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes -fix p all property/atom d_WEIGHT -compute p all property/atom d_WEIGHT - -group fast type 1 -2600 atoms in group fast -group slow type 2 -1400 atoms in group slow -balance 1.0 shift x 10 1.0 weight group 2 fast 0.8 slow 2.5 weight store WEIGHT -Neighbor list info ... - update every 2 steps, delay 4 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.3 - ghost atom cutoff = 5.3 - binsize = 2.65, bins = 7 7 7 - 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 - rebalancing time: 0.00115108 seconds - iteration count = 10 - group weights: fast=0.8 slow=2.5 - storing weight in atom property d_WEIGHT - initial/final max load/proc = 2160 1620 - initial/final imbalance factor = 1.54839 1.16129 - x cuts: 0 0.300049 0.449951 0.599854 1 - y cuts: 0 1 - z cuts: 0 1 -variable lastweight atom c_p - -fix 0 all balance 50 1.0 shift x 10 1.0 weight var lastweight weight time 0.5 weight store WEIGHT -variable maximb equal f_0[1] -variable iter equal f_0[2] -variable prev equal f_0[3] -variable final equal f_0 - -#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" - -fix 1 all nve - -#dump id all atom 50 dump.melt -#dump id all custom 50 dump.lammpstrj id type x y z c_p - -#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -thermo 50 -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.132 | 4.192 | 4.274 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 - 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 4738.2137 - 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 4738.2137 - 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 4738.2137 - 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 4738.2137 - 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 - 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 4738.2137 - 350 0.55600296 -6.2801497 0 -5.4463538 -2.0394056 4738.2137 - 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 4738.2137 - 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 4738.2137 - 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 -Loop time of 2.66424 on 4 procs for 500 steps with 4000 atoms - -Performance: 81073.650 tau/day, 187.670 timesteps/s -97.3% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.1083 | 1.3909 | 1.7318 | 24.2 | 52.21 -Neigh | 0.19732 | 0.45425 | 0.7722 | 38.2 | 17.05 -Comm | 0.24921 | 0.79627 | 1.3351 | 60.3 | 29.89 -Output | 0.00041294 | 0.00065368 | 0.0011899 | 0.0 | 0.02 -Modify | 0.0071657 | 0.010935 | 0.015748 | 3.6 | 0.41 -Other | | 0.01124 | | | 0.42 - -Nlocal: 1000 ave 1870 max 299 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Nghost: 8679.25 ave 10190 max 7374 min -Histogram: 1 1 0 0 0 0 1 0 0 1 -Neighs: 149308 ave 215125 max 81132 min -Histogram: 2 0 0 0 0 0 0 0 0 2 - -Total # of neighbors = 597231 -Ave neighs/atom = 149.308 -Neighbor list builds = 50 -Dangerous builds = 0 -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.134 | 4.387 | 4.664 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 - 550 0.53879347 -6.2554274 0 -5.4474393 -1.9756834 4738.2137 - 600 0.54275982 -6.2616799 0 -5.4477437 -1.9939993 4738.2137 - 650 0.54526651 -6.265098 0 -5.4474027 -2.0303672 4738.2137 - 700 0.54369381 -6.263201 0 -5.4478642 -1.9921967 4738.2137 - 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 4738.2137 - 800 0.55061744 -6.2725556 0 -5.4468359 -2.0100922 4738.2137 - 850 0.55371614 -6.2763992 0 -5.4460326 -2.0065329 4738.2137 - 900 0.54756622 -6.2668303 0 -5.4456863 -1.9796122 4738.2137 - 950 0.54791593 -6.2673161 0 -5.4456477 -1.9598278 4738.2137 - 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 -Loop time of 3.02509 on 4 procs for 500 steps with 4000 atoms - -Performance: 71402.836 tau/day, 165.284 timesteps/s -96.7% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.6808 | 1.3385 | 1.959 | 52.5 | 44.25 -Neigh | 0.13127 | 0.4678 | 0.86924 | 48.5 | 15.46 -Comm | 0.19735 | 1.1921 | 2.1903 | 85.9 | 39.41 -Output | 0.00045371 | 0.00090569 | 0.0013952 | 0.0 | 0.03 -Modify | 0.0062041 | 0.011167 | 0.01691 | 4.5 | 0.37 -Other | | 0.01462 | | | 0.48 - -Nlocal: 1000 ave 1935 max 262 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Nghost: 8739.75 ave 10498 max 7333 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Neighs: 150170 ave 231608 max 72161 min -Histogram: 2 0 0 0 0 0 0 0 0 2 - -Total # of neighbors = 600678 -Ave neighs/atom = 150.169 -Neighbor list builds = 53 -Dangerous builds = 0 - -balance 1.0 shift x 10 1.0 weight group 2 fast 0.8 slow 2.5 weight store WEIGHT - rebalancing time: 0.000575304 seconds - iteration count = 10 - group weights: fast=0.8 slow=2.5 - storing weight in atom property d_WEIGHT - initial/final max load/proc = 2318.1 1408.1 - initial/final imbalance factor = 1.66172 1.00939 - x cuts: 0 0.337054 0.454419 0.59556 1 - y cuts: 0 1 - z cuts: 0 1 - -fix 0 all balance 50 1.0 shift x 5 1.0 weight var lastweight weight neigh 0.5 weight store WEIGHT - -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.136 | 4.393 | 4.673 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 - 1050 0.54629742 -6.2657526 0 -5.4465113 -1.945821 4738.2137 - 1100 0.55427881 -6.2781733 0 -5.446963 -2.0021027 4738.2137 - 1150 0.54730654 -6.267257 0 -5.4465025 -1.9420678 4738.2137 - 1200 0.5388281 -6.2547963 0 -5.4467562 -1.890178 4738.2137 - 1250 0.54848768 -6.2694237 0 -5.4468979 -1.9636797 4738.2137 - 1300 0.54134321 -6.2590728 0 -5.447261 -1.917027 4738.2137 - 1350 0.53564389 -6.2501521 0 -5.4468871 -1.8642306 4738.2137 - 1400 0.53726925 -6.2518379 0 -5.4461355 -1.8544028 4738.2137 - 1450 0.54525929 -6.2632653 0 -5.4455808 -1.9072158 4738.2137 - 1500 0.54223341 -6.2591056 0 -5.4459588 -1.8866983 4738.2137 -Loop time of 3.07108 on 4 procs for 500 steps with 4000 atoms - -Performance: 70333.514 tau/day, 162.809 timesteps/s -96.8% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.77463 | 1.3897 | 2.1328 | 51.3 | 45.25 -Neigh | 0.13416 | 0.45546 | 0.80534 | 46.9 | 14.83 -Comm | 0.17763 | 1.2036 | 2.1448 | 83.6 | 39.19 -Output | 0.00039482 | 0.00067067 | 0.0013118 | 0.0 | 0.02 -Modify | 0.0058403 | 0.010695 | 0.015841 | 4.5 | 0.35 -Other | | 0.01099 | | | 0.36 - -Nlocal: 1000 ave 1955 max 199 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Nghost: 8729 ave 10472 max 7399 min -Histogram: 2 0 0 0 0 0 0 1 0 1 -Neighs: 150494 ave 251670 max 54664 min -Histogram: 2 0 0 0 0 0 0 0 0 2 - -Total # of neighbors = 601974 -Ave neighs/atom = 150.494 -Neighbor list builds = 51 -Dangerous builds = 0 -run 500 -Per MPI rank memory allocation (min/avg/max) = 4.136 | 4.393 | 4.673 Mbytes -Step Temp E_pair E_mol TotEng Press Volume - 1500 0.54223341 -6.2591056 0 -5.4459588 -1.8866983 4738.2137 - 1550 0.55327047 -6.2750129 0 -5.4453147 -1.9506601 4738.2137 - 1600 0.54419056 -6.2612631 0 -5.4451813 -1.8559469 4738.2137 - 1650 0.54710007 -6.2661977 0 -5.4457528 -1.8882828 4738.2137 - 1700 0.53665429 -6.250492 0 -5.4457118 -1.8067907 4738.2137 - 1750 0.54864943 -6.2681198 0 -5.4453514 -1.8662924 4738.2137 - 1800 0.54477002 -6.2615118 0 -5.4445611 -1.835304 4738.2137 - 1850 0.54143129 -6.2555621 0 -5.4436182 -1.8005839 4738.2137 - 1900 0.53994573 -6.254175 0 -5.4444588 -1.7770422 4738.2137 - 1950 0.54665379 -6.2640981 0 -5.4443224 -1.7946205 4738.2137 - 2000 0.54548501 -6.2623919 0 -5.4443689 -1.8063177 4738.2137 -Loop time of 3.48709 on 4 procs for 500 steps with 4000 atoms - -Performance: 61942.848 tau/day, 143.386 timesteps/s -96.7% CPU use with 4 MPI tasks x 1 OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.42099 | 1.3571 | 2.3564 | 80.4 | 38.92 -Neigh | 0.083965 | 0.4942 | 0.96204 | 58.6 | 14.17 -Comm | 0.25895 | 1.6131 | 2.9631 | 106.2 | 46.26 -Output | 0.00042915 | 0.00068706 | 0.0012567 | 0.0 | 0.02 -Modify | 0.0051193 | 0.010964 | 0.017898 | 5.5 | 0.31 -Other | | 0.01109 | | | 0.32 - -Nlocal: 1000 ave 2036 max 127 min -Histogram: 2 0 0 0 0 0 0 0 1 1 -Nghost: 8722.75 ave 10448 max 7456 min -Histogram: 2 0 0 0 0 0 1 0 0 1 -Neighs: 151642 ave 269558 max 35372 min -Histogram: 2 0 0 0 0 0 0 0 0 2 - -Total # of neighbors = 606566 -Ave neighs/atom = 151.642 -Neighbor list builds = 56 -Dangerous builds = 0 -Total wall time: 0:00:12 diff --git a/examples/balance/log.3Nov23.balance.bond.fast.g++.2 b/examples/balance/log.3Nov23.balance.bond.fast.g++.2 new file mode 100644 index 0000000000..0feb065e47 --- /dev/null +++ b/examples/balance/log.3Nov23.balance.bond.fast.g++.2 @@ -0,0 +1,255 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 2d circle of particles inside a box with LJ walls + +variable b index 0 + +variable x index 50 +variable y index 20 +variable d index 20 +variable v index 5 +variable w index 2 + +units lj +dimension 2 +atom_style bond +boundary f f p + +lattice hex 0.85 +Lattice spacing in x,y,z = 1.1655347 2.0187654 1.1655347 +region box block 0 $x 0 $y -0.5 0.5 +region box block 0 50 0 $y -0.5 0.5 +region box block 0 50 0 20 -0.5 0.5 +create_box 1 box bond/types 1 extra/bond/per/atom 6 +Created orthogonal box = (0 0 -0.58276737) to (58.276737 40.375308 0.58276737) + 2 by 1 by 1 MPI processor grid +region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 10 +create_atoms 1 region circle +Created 361 atoms + using lattice units in orthogonal box = (0 0 -0.58276737) to (58.276737 40.375308 0.58276737) + create_atoms CPU = 0.001 seconds +mass 1 1.0 + +velocity all create 0.5 87287 loop geom +velocity all set $v $w 0 sum yes +velocity all set 5 $w 0 sum yes +velocity all set 5 2 0 sum yes + +pair_style lj/cut 2.5 +pair_coeff 1 1 10.0 1.0 2.5 + +bond_style harmonic +bond_coeff 1 10.0 1.2 + +# need to preserve 1-3, 1-4 pairwise interactions during hard collisions + +special_bonds lj/coul 0 1 1 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 0 = max # of 1-2 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.000 seconds +create_bonds many all all 1 1.0 1.5 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 42 29 1 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) command create_bonds, occasional + attributes: full, newton on + pair build: full/bin + stencil: full/bin/2d + bin: standard + (2) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard +Added 1014 bonds, new total = 1014 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 6 = max # of 1-2 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.000 seconds + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve + +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 + +comm_style tiled +comm_modify cutoff 10.0 # because bonds stretch a long ways +fix 10 all balance 50 0.9 rcb + +#compute 1 all property/atom proc +#variable p atom (c_1%10)+1 +#dump 2 all custom 50 tmp.dump id v_p x y z + +#dump 3 all image 50 image.*.jpg v_p type bond atom 0.25 # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 +#variable colors string # "red green blue yellow white # purple pink orange lime gray" +#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} + +thermo_style custom step temp epair press f_10[3] f_10 +thermo 100 +timestep 0.001 + +run 10000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 10 + binsize = 1.4, bins = 42 29 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.157 | 5.167 | 5.178 Mbytes + Step Temp E_pair Press f_10[3] f_10 + 0 25.701528 -2.2032569 3.1039469 2 1.0193906 + 100 25.57187 -2.2902218 2.9990153 1.0193906 1.0027701 + 200 25.532511 -2.5273097 2.8286231 1.0304709 1.0027701 + 300 25.860246 -3.0674998 2.6725358 1.0138504 1.0027701 + 400 26.628011 -4.394738 2.6618897 1.0138504 1.0083102 + 500 27.627309 -6.2305012 2.6564278 1.0138504 1.0027701 + 600 28.881803 -8.2757766 2.8249236 1.0138504 1.0027701 + 700 29.941402 -9.9816088 2.9828232 1.0138504 1.0027701 + 800 31.118457 -12.199787 3.2044549 1.0249307 1.0083102 + 900 32.393498 -14.204491 2.9496587 1.0304709 1.0027701 + 1000 33.392657 -15.747519 3.1613807 1.0249307 1.0027701 + 1100 34.671769 -17.728904 3.019138 1.0193906 1.0083102 + 1200 35.632627 -19.846347 3.1061176 1.0193906 1.0083102 + 1300 36.77272 -21.156179 3.2353009 1.0415512 1.0027701 + 1400 38.241608 -22.744765 4.1163075 1.0193906 1.0027701 + 1500 40.072478 -25.139827 5.3032535 1.0304709 1.0027701 + 1600 40.665382 -25.901697 5.4330761 1.0304709 1.0027701 + 1700 40.957034 -26.28667 7.1881521 1.0360111 1.0027701 + 1800 41.536831 -27.393841 6.6814405 1.0470914 1.0027701 + 1900 41.952676 -28.123051 7.4683871 1.0360111 1.0027701 + 2000 42.201937 -28.685743 7.4624285 1.0304709 1.0027701 + 2100 41.509082 -27.909225 6.8666951 1.0304709 1.0083102 + 2200 40.794911 -27.085519 5.2599455 1.0415512 1.0027701 + 2300 38.74971 -25.146012 4.2936194 1.0360111 1.0083102 + 2400 38.418073 -24.593601 3.1418121 1.0470914 1.0027701 + 2500 36.932581 -23.407617 1.9397617 1.0304709 1.0027701 + 2600 35.979152 -23.066707 2.1676871 1.0415512 1.0027701 + 2700 35.848339 -22.556586 2.079815 1.0526316 1.0027701 + 2800 35.796197 -22.092919 2.6843042 1.0470914 1.0027701 + 2900 35.752758 -21.6603 2.4924275 1.0360111 1.0083102 + 3000 36.548479 -21.940002 2.8478206 1.0304709 1.0027701 + 3100 36.74473 -22.072441 3.7028736 1.0193906 1.0027701 + 3200 36.633543 -22.568923 3.7319143 1.0249307 1.0083102 + 3300 37.175051 -23.069268 3.5045201 1.0193906 1.0027701 + 3400 36.942892 -23.480254 3.1212991 1.0193906 1.0027701 + 3500 37.813564 -24.659011 3.6045332 1.0138504 1.0027701 + 3600 37.856787 -24.954353 4.3062815 1.0249307 1.0027701 + 3700 38.543481 -25.054481 4.7177629 1.0304709 1.0027701 + 3800 39.011196 -25.760455 4.9664492 1.0304709 1.0027701 + 3900 38.784228 -25.618896 4.944851 1.0304709 1.0027701 + 4000 39.348833 -26.615389 4.8191233 1.0304709 1.0027701 + 4100 39.242191 -26.754066 4.7960336 1.0249307 1.0027701 + 4200 38.989902 -26.741978 3.7980048 1.0415512 1.0027701 + 4300 38.726515 -25.916493 3.7176038 1.0304709 1.0027701 + 4400 38.720441 -25.549542 3.3956415 1.0470914 1.0027701 + 4500 38.22257 -25.122141 4.5771547 1.0304709 1.0083102 + 4600 38.217511 -25.390842 4.4896706 1.0360111 1.0027701 + 4700 39.121636 -26.227786 4.9811267 1.0415512 1.0083102 + 4800 39.306166 -26.700977 4.9963051 1.0249307 1.0027701 + 4900 38.909059 -25.799524 6.1957543 1.0692521 1.0027701 + 5000 38.778196 -26.491002 5.6393984 1.0526316 1.0027701 + 5100 38.587868 -27.253335 5.5460314 1.0415512 1.0027701 + 5200 38.686438 -27.40612 5.5186442 1.0249307 1.0027701 + 5300 37.986414 -26.049806 5.3696903 1.0304709 1.0027701 + 5400 37.111804 -26.019738 4.2114526 1.0415512 1.0083102 + 5500 36.62295 -25.592884 5.1349 1.0415512 1.0027701 + 5600 36.087987 -25.398454 4.4963434 1.0249307 1.0083102 + 5700 34.435409 -24.548062 3.5310124 1.0249307 1.0027701 + 5800 33.18681 -22.76355 3.2061242 1.0470914 1.0027701 + 5900 32.57428 -21.832024 3.2865828 1.0193906 1.0027701 + 6000 30.557555 -20.714816 4.2280358 1.0304709 1.0083102 + 6100 31.893092 -21.235479 4.5931729 1.0304709 1.0027701 + 6200 31.577761 -21.222778 4.1847871 1.0415512 1.0027701 + 6300 32.003743 -20.825156 5.6968257 1.0526316 1.0027701 + 6400 32.073012 -20.877815 7.3062956 1.0360111 1.0027701 + 6500 31.588306 -21.556202 5.7846536 1.0138504 1.0027701 + 6600 32.453985 -21.478064 4.8089249 1.0083102 1.0027701 + 6700 31.269576 -21.24005 4.0540095 1.0193906 1.0027701 + 6800 31.548438 -21.335039 3.767158 1.0138504 1.0027701 + 6900 31.249216 -20.689547 4.5435057 1.0083102 1.0027701 + 7000 31.72893 -20.373971 6.0204212 1.0249307 1.0027701 + 7100 30.888569 -19.028984 5.2458824 1.0027701 1.0027701 + 7200 30.747229 -19.579694 3.2582453 1.0138504 1.0083102 + 7300 28.339584 -19.225504 3.1235472 1.0193906 1.0027701 + 7400 26.754307 -18.557545 1.3860606 1.0193906 1.0083102 + 7500 26.559389 -17.395026 1.7206081 1.0138504 1.0083102 + 7600 26.227728 -16.755138 2.1148459 1.0193906 1.0027701 + 7700 26.361463 -15.711397 2.5458994 1.0138504 1.0027701 + 7800 26.081484 -16.032712 0.70050048 1.0138504 1.0027701 + 7900 24.660082 -15.079215 1.1999533 1.0138504 1.0027701 + 8000 24.448184 -14.668849 0.63886653 1.0138504 1.0083102 + 8100 24.198589 -15.157555 0.12256041 1.0027701 1.0027701 + 8200 24.764129 -14.876966 0.97060609 1.0249307 1.0083102 + 8300 25.33268 -14.891698 1.6089548 1.0083102 1.0027701 + 8400 24.992342 -14.652659 1.3317376 1.0138504 1.0027701 + 8500 25.115045 -14.683247 0.98361969 1.0138504 1.0027701 + 8600 24.954894 -14.451543 1.2228755 1.0083102 1.0027701 + 8700 24.51303 -14.159235 0.75345783 1.0249307 1.0083102 + 8800 22.697326 -13.254743 1.2913804 1.0138504 1.0027701 + 8900 22.868775 -13.677092 -0.048154854 1.0083102 1.0027701 + 9000 25.269332 -13.649225 1.0337367 1.0083102 1.0083102 + 9100 24.184813 -12.826606 1.1160895 1.0360111 1.0027701 + 9200 23.664589 -13.449013 0.031451624 1.0193906 1.0083102 + 9300 23.944566 -13.401803 0.20095909 1.0193906 1.0027701 + 9400 24.146696 -12.879011 0.89518549 1.0249307 1.0027701 + 9500 25.383214 -13.411768 0.95798595 1.0304709 1.0027701 + 9600 25.248933 -13.838658 0.45253554 1.0304709 1.0027701 + 9700 24.38613 -13.123006 1.5446061 1.0138504 1.0027701 + 9800 25.743921 -13.610838 1.2556191 1.0083102 1.0027701 + 9900 26.468479 -13.72971 2.3998562 1.0249307 1.0027701 + 10000 26.338099 -14.82183 1.5233934 1.0193906 1.0027701 +Loop time of 0.372607 on 2 procs for 10000 steps with 361 atoms + +Performance: 2318795.909 tau/day, 26837.916 timesteps/s, 9.688 Matom-step/s +96.0% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.13582 | 0.14029 | 0.14475 | 1.2 | 37.65 +Bond | 0.035027 | 0.035038 | 0.035049 | 0.0 | 9.40 +Neigh | 0.085828 | 0.08675 | 0.087673 | 0.3 | 23.28 +Comm | 0.05562 | 0.05851 | 0.061399 | 1.2 | 15.70 +Output | 0.0010102 | 0.0011746 | 0.0013391 | 0.5 | 0.32 +Modify | 0.029008 | 0.02926 | 0.029512 | 0.1 | 7.85 +Other | | 0.02159 | | | 5.79 + +Nlocal: 180.5 ave 181 max 180 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 166.5 ave 170 max 163 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 1628.5 ave 1652 max 1605 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 3257 +Ave neighs/atom = 9.0221607 +Ave special neighs/atom = 5.6177285 +Neighbor list builds = 1208 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/balance/log.3Nov23.balance.bond.fast.g++.4 b/examples/balance/log.3Nov23.balance.bond.fast.g++.4 new file mode 100644 index 0000000000..0f17f88ab6 --- /dev/null +++ b/examples/balance/log.3Nov23.balance.bond.fast.g++.4 @@ -0,0 +1,255 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 2d circle of particles inside a box with LJ walls + +variable b index 0 + +variable x index 50 +variable y index 20 +variable d index 20 +variable v index 5 +variable w index 2 + +units lj +dimension 2 +atom_style bond +boundary f f p + +lattice hex 0.85 +Lattice spacing in x,y,z = 1.1655347 2.0187654 1.1655347 +region box block 0 $x 0 $y -0.5 0.5 +region box block 0 50 0 $y -0.5 0.5 +region box block 0 50 0 20 -0.5 0.5 +create_box 1 box bond/types 1 extra/bond/per/atom 6 +Created orthogonal box = (0 0 -0.58276737) to (58.276737 40.375308 0.58276737) + 2 by 2 by 1 MPI processor grid +region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 10 +create_atoms 1 region circle +Created 361 atoms + using lattice units in orthogonal box = (0 0 -0.58276737) to (58.276737 40.375308 0.58276737) + create_atoms CPU = 0.001 seconds +mass 1 1.0 + +velocity all create 0.5 87287 loop geom +velocity all set $v $w 0 sum yes +velocity all set 5 $w 0 sum yes +velocity all set 5 2 0 sum yes + +pair_style lj/cut 2.5 +pair_coeff 1 1 10.0 1.0 2.5 + +bond_style harmonic +bond_coeff 1 10.0 1.2 + +# need to preserve 1-3, 1-4 pairwise interactions during hard collisions + +special_bonds lj/coul 0 1 1 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 0 = max # of 1-2 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.000 seconds +create_bonds many all all 1 1.0 1.5 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 42 29 1 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) command create_bonds, occasional + attributes: full, newton on + pair build: full/bin + stencil: full/bin/2d + bin: standard + (2) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard +Added 1014 bonds, new total = 1014 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 1 1 + special bond factors coul: 0 1 1 + 6 = max # of 1-2 neighbors + 6 = max # of special neighbors + special bonds CPU = 0.000 seconds + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve + +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 + +comm_style tiled +comm_modify cutoff 10.0 # because bonds stretch a long ways +fix 10 all balance 50 0.9 rcb + +#compute 1 all property/atom proc +#variable p atom (c_1%10)+1 +#dump 2 all custom 50 tmp.dump id v_p x y z + +#dump 3 all image 50 image.*.jpg v_p type bond atom 0.25 # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 +#variable colors string # "red green blue yellow white # purple pink orange lime gray" +#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} + +thermo_style custom step temp epair press f_10[3] f_10 +thermo 100 +timestep 0.001 + +run 10000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 10 + binsize = 1.4, bins = 42 29 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 5.123 | 5.142 | 5.176 Mbytes + Step Temp E_pair Press f_10[3] f_10 + 0 25.701528 -2.2032569 3.1039469 3.2354571 1.0526316 + 100 25.57187 -2.2902218 2.9990153 1.0526316 1.0193906 + 200 25.532511 -2.5273097 2.8286231 1.0526316 1.0083102 + 300 25.860246 -3.0674998 2.6725358 1.0415512 1.0083102 + 400 26.628011 -4.394738 2.6618897 1.0526316 1.0083102 + 500 27.627309 -6.2305012 2.6564278 1.0415512 1.0083102 + 600 28.881803 -8.2757766 2.8249236 1.0526316 1.0083102 + 700 29.941402 -9.9816088 2.9828232 1.0526316 1.0083102 + 800 31.118457 -12.199787 3.2044549 1.0304709 1.0083102 + 900 32.393498 -14.204491 2.9496587 1.0747922 1.0193906 + 1000 33.392657 -15.747519 3.1613807 1.0637119 1.0193906 + 1100 34.671769 -17.728904 3.019138 1.0526316 1.0193906 + 1200 35.632627 -19.846347 3.1061176 1.0637119 1.0193906 + 1300 36.77272 -21.156179 3.2353009 1.0415512 1.0193906 + 1400 38.241608 -22.744765 4.1163075 1.0637119 1.0083102 + 1500 40.072478 -25.139827 5.3032535 1.0415512 1.0193906 + 1600 40.665382 -25.901697 5.4330761 1.0858726 1.0083102 + 1700 40.957034 -26.28667 7.1881521 1.1080332 1.0083102 + 1800 41.536831 -27.393841 6.6814405 1.0969529 1.0193906 + 1900 41.952676 -28.123051 7.4683871 1.0858726 1.0193906 + 2000 42.201937 -28.685743 7.4624284 1.0747922 1.0083102 + 2100 41.509082 -27.909225 6.8666955 1.0969529 1.0083102 + 2200 40.794912 -27.085519 5.259945 1.0415512 1.0083102 + 2300 38.749709 -25.14601 4.2936222 1.0526316 1.0083102 + 2400 38.418065 -24.593596 3.1418049 1.1191136 1.0083102 + 2500 36.932588 -23.407613 1.9397982 1.0637119 1.0083102 + 2600 35.979181 -23.066748 2.1678902 1.0637119 1.0193906 + 2700 35.84858 -22.55645 2.0798013 1.0858726 1.0193906 + 2800 35.795795 -22.092149 2.6849882 1.0637119 1.0193906 + 2900 35.754958 -21.662138 2.4892921 1.0526316 1.0083102 + 3000 36.548644 -21.943203 2.8497192 1.0747922 1.0083102 + 3100 36.755531 -22.081384 3.6960187 1.0858726 1.0193906 + 3200 36.606921 -22.538438 3.7047874 1.0415512 1.0193906 + 3300 37.185396 -23.077004 3.4202006 1.0858726 1.0083102 + 3400 37.136687 -23.617745 2.9763794 1.0858726 1.0083102 + 3500 37.908279 -24.364631 3.5155218 1.0304709 1.0083102 + 3600 38.459203 -25.01024 4.3313693 1.0747922 1.0083102 + 3700 39.108683 -25.636756 4.4707992 1.0415512 1.0083102 + 3800 38.67059 -25.126486 5.3753987 1.0747922 1.0083102 + 3900 38.395639 -25.140269 5.1661495 1.0858726 1.0193906 + 4000 38.552057 -24.871721 5.0206769 1.0747922 1.0083102 + 4100 39.065683 -25.344035 4.4042913 1.0858726 1.0083102 + 4200 37.714294 -24.728278 5.1978439 1.0304709 1.0083102 + 4300 38.785555 -25.380643 3.7033369 1.0304709 1.0193906 + 4400 38.341445 -25.13442 3.4298833 1.1191136 1.0193906 + 4500 37.720522 -24.702087 3.4450752 1.0637119 1.0083102 + 4600 37.509806 -24.477444 3.6155741 1.0858726 1.0083102 + 4700 37.319957 -23.722654 4.7111338 1.0526316 1.0193906 + 4800 38.233154 -24.653472 4.25263 1.0637119 1.0083102 + 4900 37.309164 -24.21353 4.8513758 1.0637119 1.0193906 + 5000 37.559292 -24.720651 5.409312 1.0415512 1.0193906 + 5100 37.449783 -25.21538 6.0099692 1.0747922 1.0083102 + 5200 38.187982 -25.16709 6.1425844 1.0415512 1.0083102 + 5300 36.91668 -24.616017 4.7873357 1.0304709 1.0083102 + 5400 35.103465 -23.85158 5.1950262 1.0304709 1.0193906 + 5500 35.299351 -23.946174 4.8038223 1.0526316 1.0083102 + 5600 35.713482 -24.962908 3.5111314 1.0193906 1.0193906 + 5700 33.740794 -23.77699 4.5783011 1.0304709 1.0193906 + 5800 33.791635 -23.536627 3.1317306 1.0415512 1.0193906 + 5900 34.039769 -23.068008 4.0189755 1.0415512 1.0083102 + 6000 32.809103 -22.085195 4.0827943 1.0637119 1.0193906 + 6100 32.522642 -21.979287 4.1437901 1.0637119 1.0083102 + 6200 32.347924 -21.661359 4.1436759 1.0526316 1.0193906 + 6300 32.099974 -21.114688 5.5745084 1.0193906 1.0193906 + 6400 33.767704 -23.489786 4.1038662 1.0526316 1.0193906 + 6500 32.283906 -22.076822 7.2664805 1.0526316 1.0083102 + 6600 33.25146 -23.191973 6.01093 1.0526316 1.0083102 + 6700 31.7665 -22.1476 6.4256074 1.0747922 1.0193906 + 6800 30.775727 -21.513059 5.1709188 1.0304709 1.0083102 + 6900 30.964501 -21.153634 5.1077701 1.0193906 1.0193906 + 7000 31.292268 -20.800916 3.6047789 1.0193906 1.0193906 + 7100 31.460811 -20.280043 3.2369395 1.0193906 1.0083102 + 7200 30.871387 -19.340893 2.9615798 1.0193906 1.0083102 + 7300 28.983475 -18.709174 3.1686601 1.0304709 1.0083102 + 7400 28.032829 -18.200801 1.8738157 1.0304709 1.0193906 + 7500 28.088176 -17.117863 3.5604961 1.0304709 1.0083102 + 7600 27.456327 -17.011025 1.7822114 1.0526316 1.0304709 + 7700 26.483887 -16.024179 1.258431 1.0415512 1.0193906 + 7800 26.023393 -15.532176 1.3663841 1.0304709 1.0083102 + 7900 26.154386 -14.738286 1.5214339 1.0415512 1.0193906 + 8000 25.755121 -14.487715 1.0185064 1.0415512 1.0304709 + 8100 25.468927 -14.273205 1.3553057 1.0526316 1.0304709 + 8200 25.74216 -14.606852 0.13693979 1.0193906 1.0083102 + 8300 24.457219 -14.529941 -0.0032579349 1.0304709 1.0193906 + 8400 24.054076 -13.704387 0.80714443 1.0193906 1.0193906 + 8500 23.742098 -13.699968 0.41096573 1.0304709 1.0193906 + 8600 24.060806 -13.289555 0.22489663 1.0193906 1.0083102 + 8700 23.831533 -13.025052 -0.090244538 1.0304709 1.0193906 + 8800 23.823082 -13.407662 -0.28029605 1.0304709 1.0083102 + 8900 23.982182 -12.862338 0.50556065 1.0193906 1.0193906 + 9000 24.876045 -13.400416 1.1475671 1.0415512 1.0193906 + 9100 25.018155 -13.625286 0.74749825 1.0304709 1.0083102 + 9200 25.671195 -13.850993 0.88340554 1.0526316 1.0083102 + 9300 26.076502 -13.935292 1.2705214 1.0526316 1.0083102 + 9400 25.847786 -13.626034 1.5676611 1.0415512 1.0193906 + 9500 25.963986 -14.23672 1.4791684 1.0304709 1.0083102 + 9600 26.58066 -14.74703 1.3431841 1.0526316 1.0083102 + 9700 27.401448 -14.568412 2.4488742 1.0747922 1.0083102 + 9800 27.927894 -15.254362 2.8516414 1.0415512 1.0083102 + 9900 28.204891 -15.219892 3.0631109 1.0415512 1.0083102 + 10000 27.30902 -14.939134 2.8235246 1.0304709 1.0083102 +Loop time of 0.317224 on 4 procs for 10000 steps with 361 atoms + +Performance: 2723630.892 tau/day, 31523.506 timesteps/s, 11.380 Matom-step/s +89.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.066318 | 0.073612 | 0.081352 | 2.6 | 23.21 +Bond | 0.01886 | 0.020483 | 0.022893 | 1.1 | 6.46 +Neigh | 0.051128 | 0.052747 | 0.054345 | 0.5 | 16.63 +Comm | 0.093881 | 0.11329 | 0.13156 | 4.2 | 35.71 +Output | 0.0011573 | 0.0013205 | 0.0016444 | 0.5 | 0.42 +Modify | 0.025957 | 0.026647 | 0.027249 | 0.3 | 8.40 +Other | | 0.02913 | | | 9.18 + +Nlocal: 90.25 ave 91 max 89 min +Histogram: 1 0 0 0 0 1 0 0 0 2 +Nghost: 260.75 ave 265 max 256 min +Histogram: 1 0 1 0 0 0 0 0 1 1 +Neighs: 889.5 ave 1035 max 794 min +Histogram: 1 1 0 0 1 0 0 0 0 1 + +Total # of neighbors = 3558 +Ave neighs/atom = 9.8559557 +Ave special neighs/atom = 5.6177285 +Neighbor list builds = 1192 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/balance/log.3Nov23.balance.bond.slow.g++.2 b/examples/balance/log.3Nov23.balance.bond.slow.g++.2 new file mode 100644 index 0000000000..96ee2e2016 --- /dev/null +++ b/examples/balance/log.3Nov23.balance.bond.slow.g++.2 @@ -0,0 +1,550 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 2d circle of particles inside a box with LJ walls + +variable b index 0 + +variable x index 50 +variable y index 20 +variable d index 20 + +# careful not to slam into wall too hard + +variable v index 0.3 +variable w index 0.08 + +units lj +dimension 2 +atom_style bond +boundary f f p + +lattice hex 0.85 +Lattice spacing in x,y,z = 1.1655347 2.0187654 1.1655347 +region box block 0 $x 0 $y -0.5 0.5 +region box block 0 50 0 $y -0.5 0.5 +region box block 0 50 0 20 -0.5 0.5 +create_box 1 box bond/types 1 extra/bond/per/atom 6 +Created orthogonal box = (0 0 -0.58276737) to (58.276737 40.375308 0.58276737) + 2 by 1 by 1 MPI processor grid +region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 10 +create_atoms 1 region circle +Created 361 atoms + using lattice units in orthogonal box = (0 0 -0.58276737) to (58.276737 40.375308 0.58276737) + create_atoms CPU = 0.001 seconds +mass 1 1.0 + +velocity all create 0.5 87287 loop geom +velocity all set $v $w 0 sum yes +velocity all set 0.3 $w 0 sum yes +velocity all set 0.3 0.08 0 sum yes + +pair_style lj/cut 2.5 +pair_coeff 1 1 10.0 1.0 2.5 + +bond_style harmonic +bond_coeff 1 10.0 1.2 + +create_bonds many all all 1 1.0 1.5 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 42 29 1 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) command create_bonds, occasional + attributes: full, newton on + pair build: full/bin + stencil: full/bin/2d + bin: standard + (2) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard +Added 1014 bonds, new total = 1014 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 6 = max # of 1-2 neighbors + 30 = max # of 1-3 neighbors + 180 = max # of 1-4 neighbors + 36 = max # of special neighbors + special bonds CPU = 0.002 seconds + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve + +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 + +comm_style tiled +fix 10 all balance 50 0.9 rcb + +#compute 1 all property/atom proc +#variable p atom (c_1%10)+1 +#dump 2 all custom 50 tmp.dump id v_p x y z + +#dump 3 all image 200 image.*.jpg v_p type bond atom 0.25 # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 +#variable colors string # "red green blue yellow white # purple pink orange lime gray" +#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} + +thermo_style custom step temp epair press f_10[3] f_10 +thermo 100 +timestep 0.001 + +run 40000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 42 29 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.08 | 7.108 | 7.137 Mbytes + Step Temp E_pair Press f_10[3] f_10 + 0 0.57437856 0 0.26099453 2 1.0193906 + 100 0.36302846 0 0.17339851 1.0027701 1.0027701 + 200 0.19645077 0 0.087800915 1.0027701 1.0027701 + 300 0.32061117 0 0.11295723 1.0027701 1.0027701 + 400 0.32854136 0 0.11325585 1.0027701 1.0027701 + 500 0.29754179 0 0.10150632 1.0083102 1.0027701 + 600 0.37384867 0 0.11949784 1.0027701 1.0027701 + 700 0.33202319 0 0.092871339 1.0027701 1.0083102 + 800 0.28340637 0 0.065861565 1.0027701 1.0027701 + 900 0.36250157 0 0.085896287 1.0083102 1.0027701 + 1000 0.35402718 0 0.07519914 1.0027701 1.0083102 + 1100 0.31576357 0 0.050253636 1.0083102 1.0027701 + 1200 0.35727572 0 0.05153538 1.0027701 1.0027701 + 1300 0.34322607 0 0.036115722 1.0027701 1.0027701 + 1400 0.34007557 0 0.025378602 1.0027701 1.0083102 + 1500 0.39242551 0 0.033002212 1.0027701 1.0027701 + 1600 0.35679049 0 0.010101576 1.0027701 1.0027701 + 1700 0.31293001 0 -0.013791036 1.0027701 1.0027701 + 1800 0.34767962 0 -0.0065490806 1.0027701 1.0027701 + 1900 0.34721592 0 -0.010055082 1.0027701 1.0083102 + 2000 0.34074949 0 -0.020822697 1.0027701 1.0027701 + 2100 0.37195615 0 -0.024943134 1.0027701 1.0027701 + 2200 0.35367164 0 -0.047369336 1.0027701 1.0027701 + 2300 0.32088735 0 -0.069724381 1.0027701 1.0027701 + 2400 0.34291945 0 -0.065470223 1.0027701 1.0027701 + 2500 0.35204641 0 -0.062631879 1.0027701 1.0027701 + 2600 0.32762755 0 -0.075128824 1.0027701 1.0083102 + 2700 0.32042617 0 -0.086259498 1.0083102 1.0027701 + 2800 0.32747171 0 -0.094775765 1.0027701 1.0027701 + 2900 0.33544664 0 -0.10376048 1.0027701 1.0027701 + 3000 0.34015845 0 -0.1112134 1.0083102 1.0027701 + 3100 0.34425802 0 -0.11413914 1.0027701 1.0083102 + 3200 0.34158654 0 -0.1164643 1.0027701 1.0027701 + 3300 0.32525955 0 -0.12206636 1.0027701 1.0083102 + 3400 0.32183965 0 -0.12186353 1.0083102 1.0027701 + 3500 0.3323435 0 -0.11597815 1.0027701 1.0027701 + 3600 0.34124638 0 -0.11177335 1.0083102 1.0083102 + 3700 0.3404339 0 -0.11235575 1.0027701 1.0027701 + 3800 0.32736123 0 -0.11610108 1.0027701 1.0027701 + 3900 0.32897993 0 -0.11138151 1.0027701 1.0027701 + 4000 0.35111095 0 -0.096171644 1.0083102 1.0027701 + 4100 0.34682622 0 -0.087507472 1.0027701 1.0027701 + 4200 0.3307829 0 -0.079759555 1.0027701 1.0027701 + 4300 0.35057085 0 -0.055194355 1.0027701 1.0027701 + 4400 0.36389071 0 -0.02963313 1.0027701 1.0083102 + 4500 0.35694456 0 -0.013842583 1.0027701 1.0027701 + 4600 0.3472078 0 -0.0048118723 1.0083102 1.0027701 + 4700 0.31734514 0 -0.0032417081 1.0027701 1.0027701 + 4800 0.32419237 0 0.01409306 1.0027701 1.0027701 + 4900 0.36939799 0 0.045351789 1.0027701 1.0083102 + 5000 0.36998276 0 0.056830437 1.0027701 1.0027701 + 5100 0.33969031 0 0.051833536 1.0027701 1.0027701 + 5200 0.33910288 0 0.055544085 1.0027701 1.0027701 + 5300 0.34641009 0 0.0651487 1.0027701 1.0027701 + 5400 0.34469325 0 0.074538093 1.0027701 1.0027701 + 5500 0.34582041 0 0.084940845 1.0027701 1.0027701 + 5600 0.33471774 0 0.090102411 1.0027701 1.0083102 + 5700 0.32667873 0 0.09528948 1.0083102 1.0027701 + 5800 0.33762496 0 0.10545364 1.0027701 1.0027701 + 5900 0.33285742 0 0.10816506 1.0027701 1.0027701 + 6000 0.31920877 0 0.10547467 1.0027701 1.0027701 + 6100 0.31933081 0 0.10610684 1.0027701 1.0027701 + 6200 0.3152523 0 0.10651599 1.0083102 1.0083102 + 6300 0.32548074 0 0.11405234 1.0027701 1.0027701 + 6400 0.33851595 0 0.12389967 1.0027701 1.0027701 + 6500 0.32957825 0 0.12493331 1.0027701 1.0027701 + 6600 0.32319786 0 0.12404318 1.0027701 1.0027701 + 6700 0.3223738 0 0.12418108 1.0083102 1.0027701 + 6800 0.32390959 0 0.12576314 1.0027701 1.0027701 + 6900 0.34414413 0 0.1318456 1.0027701 1.0027701 + 7000 0.34508922 0 0.12669741 1.0027701 1.0083102 + 7100 0.31655025 0 0.10869109 1.0027701 1.0027701 + 7200 0.31997193 0 0.10305508 1.0027701 1.0027701 + 7300 0.33199085 0 0.10377052 1.0027701 1.0027701 + 7400 0.32146221 0 0.097589803 1.0027701 1.0027701 + 7500 0.33416843 0 0.096202638 1.0027701 1.0027701 + 7600 0.35297124 0 0.092441999 1.0027701 1.0027701 + 7700 0.34494663 0 0.075206332 1.0027701 1.0027701 + 7800 0.34010702 0 0.056336074 1.0083102 1.0027701 + 7900 0.343424 0 0.040946914 1.0027701 1.0027701 + 8000 0.33772245 0 0.025817271 1.0027701 1.0027701 + 8100 0.34463909 0 0.017237548 1.0083102 1.0083102 + 8200 0.36052034 0 0.010393623 1.0027701 1.0027701 + 8300 0.36083091 0 -0.0053933186 1.0027701 1.0027701 + 8400 0.35378067 0 -0.02600248 1.0027701 1.0027701 + 8500 0.35133887 0 -0.044211483 1.0027701 1.0027701 + 8600 0.34559937 0 -0.060861345 1.0027701 1.0027701 + 8700 0.33724119 0 -0.075776058 1.0027701 1.0027701 + 8800 0.33337192 0 -0.087098937 1.0027701 1.0027701 + 8900 0.33533081 0 -0.094631485 1.0027701 1.0083102 + 9000 0.34994303 0 -0.096758052 1.0083102 1.0083102 + 9100 0.34448227 0 -0.10330192 1.0083102 1.0083102 + 9200 0.32675792 0 -0.11000278 1.0083102 1.0083102 + 9300 0.33814013 0 -0.10358181 1.0027701 1.0027701 + 9400 0.34457419 0 -0.096896951 1.0027701 1.0027701 + 9500 0.33834959 0 -0.09547729 1.0027701 1.0027701 + 9600 0.33204582 0 -0.097694622 1.0027701 1.0027701 + 9700 0.31152805 0 -0.10637377 1.0083102 1.0027701 + 9800 0.31637311 0 -0.1053323 1.0027701 1.0027701 + 9900 0.33416162 0 -0.097857158 1.0027701 1.0083102 + 10000 0.33731767 0 -0.094656227 1.0027701 1.0027701 + 10100 0.34565093 0 -0.090199556 1.0083102 1.0083102 + 10200 0.34549074 0 -0.088914471 1.0083102 1.0027701 + 10300 0.33545625 0 -0.09066219 1.0027701 1.0083102 + 10400 0.33649703 0 -0.086437886 1.0027701 1.0027701 + 10500 0.34549848 0 -0.0767365 1.0027701 1.0027701 + 10600 0.34222917 0 -0.069368792 1.0027701 1.0027701 + 10700 0.34262469 0 -0.060550996 1.0027701 1.0027701 + 10800 0.34859129 0 -0.050692625 1.0027701 1.0027701 + 10900 0.34850448 0 -0.043627505 1.0027701 1.0027701 + 11000 0.34887257 0 -0.036859125 1.0027701 1.0083102 + 11100 0.34171718 0 -0.032690742 1.0083102 1.0027701 + 11200 0.329808 0 -0.02793377 1.0027701 1.0027701 + 11300 0.34490203 0 -0.010278222 1.0027701 1.0027701 + 11400 0.36226391 0 0.010141624 1.0027701 1.0083102 + 11500 0.35392138 0 0.021188939 1.0027701 1.0027701 + 11600 0.34378732 0 0.031423313 1.0083102 1.0083102 + 11700 0.33606385 0 0.043944374 1.0083102 1.0027701 + 11800 0.33212482 0 0.058629338 1.0027701 1.0027701 + 11900 0.34547313 0 0.078112959 1.0027701 1.0083102 + 12000 0.34840957 0 0.092356502 1.0083102 1.0027701 + 12100 0.34146853 0 0.10236492 1.0027701 1.0027701 + 12200 0.34591494 0 0.11620659 1.0027701 1.0027701 + 12300 0.33290894 0 0.12437245 1.0027701 1.0027701 + 12400 0.32423652 0 0.13191976 1.0083102 1.0083102 + 12500 0.33031748 0 0.13999363 1.0083102 1.0083102 + 12600 0.31927087 0 0.13776242 1.0083102 1.0027701 + 12700 0.30865965 0 0.13340787 1.0027701 1.0027701 + 12800 0.32542691 0 0.13690449 1.0027701 1.0083102 + 12900 0.32453244 0 0.13376127 1.0027701 1.0027701 + 13000 0.30974678 0 0.12749869 1.0027701 1.0027701 + 13100 0.32402285 0 0.13240572 1.0027701 1.0083102 + 13200 0.32896987 0 0.13257567 1.0083102 1.0027701 + 13300 0.32939197 0 0.12690791 1.0027701 1.0027701 + 13400 0.33966453 0 0.12036916 1.0027701 1.0027701 + 13500 0.33012942 0 0.10496127 1.0027701 1.0027701 + 13600 0.32363377 0 0.091763332 1.0083102 1.0083102 + 13700 0.33427955 0 0.087928243 1.0027701 1.0027701 + 13800 0.33457885 0 0.08191828 1.0027701 1.0027701 + 13900 0.33819924 0 0.074487337 1.0027701 1.0027701 + 14000 0.34611002 0 0.066256529 1.0083102 1.0027701 + 14100 0.33224254 0 0.052608223 1.0027701 1.0027701 + 14200 0.33796934 0 0.049677792 1.0027701 1.0027701 + 14300 0.36216731 0 0.055173039 1.0027701 1.0083102 + 14400 0.35140789 0 0.047322221 1.0027701 1.0027701 + 14500 0.34425046 0 0.036527245 1.0027701 1.0083102 + 14600 0.3604575 0 0.0294772 1.0083102 1.0083102 + 14700 0.3433878 0 0.0096774422 1.0083102 1.0083102 + 14800 0.3287069 0 -0.0079768782 1.0027701 1.0027701 + 14900 0.34978607 0 -0.01178453 1.0027701 1.0027701 + 15000 0.34749548 0 -0.023685074 1.0027701 1.0027701 + 15100 0.33474304 0 -0.040569945 1.0027701 1.0027701 + 15200 0.35036594 0 -0.048341599 1.0027701 1.0027701 + 15300 0.35686042 0 -0.058664905 1.0027701 1.0027701 + 15400 0.34041567 0 -0.074858327 1.0027701 1.0027701 + 15500 0.33397773 0 -0.083782088 1.0027701 1.0027701 + 15600 0.3420119 0 -0.084635487 1.0083102 1.0027701 + 15700 0.345487 0 -0.088137628 1.0027701 1.0027701 + 15800 0.33494392 0 -0.10083064 1.0027701 1.0027701 + 15900 0.32675175 0 -0.11620387 1.0027701 1.0027701 + 16000 0.33011636 0 -0.12713401 1.0027701 1.0027701 + 16100 0.32443118 0 -0.13685913 1.0027701 1.0027701 + 16200 0.31608392 0 -0.14164152 1.0027701 1.0083102 + 16300 0.33293965 0 -0.13335387 1.0027701 1.0027701 + 16400 0.34462807 0 -0.12471686 1.0027701 1.0027701 + 16500 0.33528082 0 -0.12211554 1.0027701 1.0027701 + 16600 0.34250121 0 -0.11228169 1.0027701 1.0027701 + 16700 0.35342336 0 -0.099226948 1.0027701 1.0027701 + 16800 0.33730938 0 -0.093581966 1.0027701 1.0027701 + 16900 0.3275761 0 -0.085163356 1.0027701 1.0027701 + 17000 0.33624873 0 -0.070896594 1.0083102 1.0027701 + 17100 0.34339177 0 -0.057731935 1.0027701 1.0027701 + 17200 0.34874414 0 -0.046575228 1.0027701 1.0027701 + 17300 0.33950911 0 -0.041862179 1.0027701 1.0027701 + 17400 0.33100286 0 -0.036618199 1.0027701 1.0027701 + 17500 0.34238095 0 -0.021681436 1.0027701 1.0027701 + 17600 0.35476614 0 -0.0032568304 1.0027701 1.0027701 + 17700 0.35452053 0 0.011863966 1.0027701 1.0027701 + 17800 0.35423934 0 0.024753043 1.0083102 1.0027701 + 17900 0.35001044 0 0.031647802 1.0083102 1.0083102 + 18000 0.32867773 0 0.030261102 1.0027701 1.0027701 + 18100 0.32730114 0 0.037627319 1.0027701 1.0027701 + 18200 0.35786038 0 0.057653258 1.0027701 1.0027701 + 18300 0.35598175 0 0.065533711 1.0027701 1.0027701 + 18400 0.33913202 0 0.066186406 1.0027701 1.0027701 + 18500 0.34449656 0 0.074575322 1.0027701 1.0027701 + 18600 0.34792041 0 0.083818651 1.0027701 1.0027701 + 18700 0.33910599 0 0.089751723 1.0027701 1.0027701 + 18800 0.33627789 0 0.097491916 1.0027701 1.0083102 + 18900 0.32937699 0 0.10350872 1.0083102 1.0027701 + 19000 0.30908702 0 0.10610099 1.0027701 1.0027701 + 19100 0.31033435 0 0.1168178 1.0027701 1.0027701 + 19200 0.32011336 0 0.12898885 1.0027701 1.0027701 + 19300 0.31851339 0 0.13398981 1.0027701 1.0027701 + 19400 0.33289985 0 0.1401039 1.0027701 1.0027701 + 19500 0.3387096 0 0.13971063 1.0027701 1.0027701 + 19600 0.31475734 0 0.12963499 1.0027701 1.0083102 + 19700 0.31971554 0 0.13189606 1.0083102 1.0083102 + 19800 0.33096999 0 0.13636987 1.0083102 1.0027701 + 19900 0.31601688 0 0.12889803 1.0027701 1.0027701 + 20000 0.32916469 0 0.12683491 1.0027701 1.0027701 + 20100 0.34355734 0 0.12251501 1.0027701 1.0027701 + 20200 0.33029721 0 0.10833335 1.0083102 1.0027701 + 20300 0.34079176 0 0.10305862 1.0027701 1.0027701 + 20400 0.35196716 0 0.098386494 1.0027701 1.0027701 + 20500 0.32687648 0 0.081202778 1.0083102 1.0027701 + 20600 0.33371658 0 0.074287923 1.0027701 1.0083102 + 20700 0.36625228 0 0.073768436 1.0083102 1.0027701 + 20800 0.35824217 0 0.054876358 1.0027701 1.0027701 + 20900 0.34861601 0 0.031603534 1.0027701 1.0027701 + 21000 0.35396698 0 0.013464537 1.0027701 1.0027701 + 21100 0.33592449 0 -0.0096173026 1.0027701 1.0027701 + 21200 0.327063 0 -0.025970252 1.0027701 1.0027701 + 21300 0.34418745 0 -0.030446162 1.0027701 1.0027701 + 21400 0.34181459 0 -0.039942616 1.0027701 1.0027701 + 21500 0.3315724 0 -0.05089285 1.0027701 1.0027701 + 21600 0.35674681 0 -0.047926263 1.0083102 1.0083102 + 21700 0.37320044 0 -0.047190592 1.0027701 1.0027701 + 21800 0.34626293 0 -0.063211549 1.0083102 1.0027701 + 21900 0.32941853 0 -0.078034339 1.0083102 1.0027701 + 22000 0.34102577 0 -0.083179211 1.0027701 1.0027701 + 22100 0.33614888 0 -0.091647522 1.0083102 1.0083102 + 22200 0.3339762 0 -0.09744915 1.0083102 1.0027701 + 22300 0.33867021 0 -0.10026932 1.0027701 1.0027701 + 22400 0.31974078 0 -0.10896583 1.0027701 1.0027701 + 22500 0.3261442 0 -0.10644809 1.0027701 1.0027701 + 22600 0.35128159 0 -0.097711062 1.0027701 1.0027701 + 22700 0.33133845 0 -0.10656571 1.0027701 1.0027701 + 22800 0.31730555 0 -0.11420891 1.0027701 1.0027701 + 22900 0.34720941 0 -0.10586647 1.0083102 1.0027701 + 23000 0.34418922 0 -0.10745826 1.0027701 1.0027701 + 23100 0.32342851 0 -0.11384766 1.0027701 1.0027701 + 23200 0.3408144 0 -0.10631064 1.0027701 1.0027701 + 23300 0.33006722 0 -0.1070084 1.0027701 1.0027701 + 23400 0.31578528 0 -0.10711608 1.0027701 1.0027701 + 23500 0.34908788 0 -0.088441889 1.0027701 1.0027701 + 23600 0.35801835 0 -0.075953983 1.0027701 1.0027701 + 23700 0.33573037 0 -0.072357745 1.0027701 1.0083102 + 23800 0.34435835 0 -0.055470682 1.0083102 1.0027701 + 23900 0.35307683 0 -0.036076205 1.0027701 1.0027701 + 24000 0.35184599 0 -0.020939815 1.0027701 1.0027701 + 24100 0.35687079 0 -0.0063601457 1.0027701 1.0027701 + 24200 0.33612385 0 -0.0014613923 1.0027701 1.0027701 + 24300 0.32234106 0 0.006750452 1.0027701 1.0027701 + 24400 0.34852008 0 0.029170079 1.0027701 1.0027701 + 24500 0.35224811 0 0.043783151 1.0027701 1.0027701 + 24600 0.34160459 0 0.05294313 1.0027701 1.0027701 + 24700 0.35616752 0 0.069291509 1.0027701 1.0027701 + 24800 0.34984726 0 0.076650029 1.0027701 1.0027701 + 24900 0.33337969 0 0.080083735 1.0027701 1.0027701 + 25000 0.34846751 0 0.095559187 1.0027701 1.0027701 + 25100 0.34495541 0 0.10558042 1.0027701 1.0083102 + 25200 0.32630088 0 0.10897783 1.0083102 1.0027701 + 25300 0.33651146 0 0.11888202 1.0027701 1.0027701 + 25400 0.32194445 0 0.11826793 1.0027701 1.0027701 + 25500 0.30295352 0 0.11641357 1.0027701 1.0027701 + 25600 0.33485387 0 0.13204258 1.0027701 1.0027701 + 25700 0.34407287 0 0.13738986 1.0027701 1.0027701 + 25800 0.32421817 0 0.12822703 1.0083102 1.0083102 + 25900 0.32463356 0 0.12403448 1.0027701 1.0027701 + 26000 0.32431468 0 0.12087994 1.0027701 1.0083102 + 26100 0.31886825 0 0.11741621 1.0083102 1.0027701 + 26200 0.32607823 0 0.1180517 1.0083102 1.0027701 + 26300 0.32511255 0 0.11479741 1.0027701 1.0083102 + 26400 0.32336124 0 0.11055002 1.0027701 1.0027701 + 26500 0.33026321 0 0.10934888 1.0027701 1.0027701 + 26600 0.32604491 0 0.10480442 1.0027701 1.0027701 + 26700 0.33764955 0 0.10458959 1.0027701 1.0027701 + 26800 0.35202544 0 0.10295075 1.0027701 1.0027701 + 26900 0.33382028 0 0.088148483 1.0027701 1.0027701 + 27000 0.33252808 0 0.078275659 1.0027701 1.0027701 + 27100 0.35433636 0 0.076729989 1.0083102 1.0027701 + 27200 0.34824881 0 0.065720375 1.0083102 1.0027701 + 27300 0.33525644 0 0.051611147 1.0027701 1.0027701 + 27400 0.34685762 0 0.045597284 1.0027701 1.0027701 + 27500 0.35181712 0 0.037076034 1.0027701 1.0027701 + 27600 0.34541685 0 0.022287411 1.0027701 1.0027701 + 27700 0.34559823 0 0.0056480168 1.0027701 1.0083102 + 27800 0.33646375 0 -0.015571541 1.0027701 1.0027701 + 27900 0.33681932 0 -0.031777883 1.0083102 1.0027701 + 28000 0.35093514 0 -0.041519343 1.0027701 1.0027701 + 28100 0.34345697 0 -0.057623438 1.0027701 1.0027701 + 28200 0.33655073 0 -0.072228985 1.0027701 1.0027701 + 28300 0.34428448 0 -0.080015243 1.0027701 1.0027701 + 28400 0.34089922 0 -0.089955339 1.0027701 1.0027701 + 28500 0.34522966 0 -0.096529413 1.0083102 1.0027701 + 28600 0.34713819 0 -0.10221712 1.0083102 1.0083102 + 28700 0.33692049 0 -0.10868625 1.0027701 1.0027701 + 28800 0.34522852 0 -0.10679446 1.0027701 1.0083102 + 28900 0.33956477 0 -0.1105454 1.0083102 1.0027701 + 29000 0.30989301 0 -0.12332622 1.0083102 1.0083102 + 29100 0.32373738 0 -0.11985261 1.0027701 1.0027701 + 29200 0.35156812 0 -0.10956099 1.0027701 1.0027701 + 29300 0.33938829 0 -0.11259535 1.0027701 1.0027701 + 29400 0.32401178 0 -0.11664978 1.0083102 1.0083102 + 29500 0.32320492 0 -0.11336533 1.0027701 1.0027701 + 29600 0.32928877 0 -0.10404547 1.0027701 1.0027701 + 29700 0.3436911 0 -0.089845529 1.0027701 1.0027701 + 29800 0.34194019 0 -0.081660797 1.0027701 1.0027701 + 29900 0.32909826 0 -0.07807778 1.0027701 1.0083102 + 30000 0.34092826 0 -0.06626489 1.0027701 1.0027701 + 30100 0.34763086 0 -0.055589635 1.0027701 1.0027701 + 30200 0.34479984 0 -0.047402672 1.0083102 1.0083102 + 30300 0.34783224 0 -0.036371931 1.0083102 1.0027701 + 30400 0.34525176 0 -0.027246663 1.0027701 1.0027701 + 30500 0.35266364 0 -0.016275033 1.0027701 1.0027701 + 30600 0.35792479 0 -0.007158119 1.0083102 1.0083102 + 30700 0.33607567 0 -0.0064391529 1.0027701 1.0027701 + 30800 0.34311607 0 0.005382948 1.0083102 1.0027701 + 30900 0.37218574 0 0.025004945 1.0027701 1.0027701 + 31000 0.35196541 0 0.027902483 1.0027701 1.0027701 + 31100 0.33533693 0 0.032349025 1.0083102 1.0083102 + 31200 0.34382193 0 0.046631454 1.0083102 1.0027701 + 31300 0.32886237 0 0.05405956 1.0027701 1.0027701 + 31400 0.32738754 0 0.066295734 1.0027701 1.0027701 + 31500 0.35367575 0 0.087140904 1.0027701 1.0027701 + 31600 0.33756811 0 0.092135887 1.0027701 1.0027701 + 31700 0.31701631 0 0.094576339 1.0027701 1.0027701 + 31800 0.34217612 0 0.11195071 1.0027701 1.0027701 + 31900 0.33725187 0 0.11924087 1.0027701 1.0083102 + 32000 0.30966055 0 0.1199329 1.0027701 1.0027701 + 32100 0.32771084 0 0.13627552 1.0027701 1.0027701 + 32200 0.3400914 0 0.14816015 1.0027701 1.0027701 + 32300 0.32210513 0 0.14569378 1.0027701 1.0027701 + 32400 0.32096229 0 0.14515284 1.0027701 1.0083102 + 32500 0.31781969 0 0.14124479 1.0083102 1.0083102 + 32600 0.3146986 0 0.13616644 1.0083102 1.0083102 + 32700 0.33526021 0 0.13913538 1.0027701 1.0027701 + 32800 0.33561156 0 0.13481353 1.0027701 1.0027701 + 32900 0.31418235 0 0.12161202 1.0027701 1.0027701 + 33000 0.31952054 0 0.11558871 1.0083102 1.0083102 + 33100 0.33437451 0 0.11011602 1.0083102 1.0083102 + 33200 0.33381704 0 0.096535424 1.0027701 1.0027701 + 33300 0.33786259 0 0.08382113 1.0027701 1.0027701 + 33400 0.34590937 0 0.073879824 1.0027701 1.0027701 + 33500 0.33844204 0 0.060854835 1.0083102 1.0083102 + 33600 0.33845544 0 0.052237152 1.0027701 1.0027701 + 33700 0.35419837 0 0.048922784 1.0027701 1.0027701 + 33800 0.3485977 0 0.036886422 1.0027701 1.0083102 + 33900 0.33816081 0 0.021599335 1.0083102 1.0083102 + 34000 0.34241389 0 0.010436074 1.0083102 1.0027701 + 34100 0.33934235 0 -0.002581075 1.0027701 1.0083102 + 34200 0.34579204 0 -0.011373729 1.0027701 1.0027701 + 34300 0.35778336 0 -0.018118327 1.0083102 1.0083102 + 34400 0.35522938 0 -0.030427967 1.0027701 1.0027701 + 34500 0.34820709 0 -0.042562699 1.0027701 1.0027701 + 34600 0.35026547 0 -0.047488326 1.0027701 1.0027701 + 34700 0.35221351 0 -0.050832178 1.0027701 1.0027701 + 34800 0.33043515 0 -0.062718859 1.0027701 1.0027701 + 34900 0.32750488 0 -0.068765033 1.0027701 1.0027701 + 35000 0.35323787 0 -0.067326627 1.0027701 1.0027701 + 35100 0.34732304 0 -0.080326407 1.0083102 1.0027701 + 35200 0.3248439 0 -0.099312427 1.0027701 1.0027701 + 35300 0.32854244 0 -0.10509437 1.0027701 1.0027701 + 35400 0.33511384 0 -0.10605662 1.0027701 1.0027701 + 35500 0.33532722 0 -0.10993967 1.0027701 1.0027701 + 35600 0.33523312 0 -0.11653983 1.0027701 1.0083102 + 35700 0.32405906 0 -0.12564005 1.0083102 1.0083102 + 35800 0.32914902 0 -0.12476137 1.0083102 1.0027701 + 35900 0.34093492 0 -0.11716996 1.0027701 1.0027701 + 36000 0.33557882 0 -0.11216382 1.0027701 1.0027701 + 36100 0.3342841 0 -0.10445781 1.0027701 1.0027701 + 36200 0.33557348 0 -0.0983036 1.0027701 1.0027701 + 36300 0.33052024 0 -0.097594107 1.0027701 1.0027701 + 36400 0.34570912 0 -0.089010349 1.0083102 1.0083102 + 36500 0.35735704 0 -0.078483059 1.0083102 1.0027701 + 36600 0.33199022 0 -0.079452064 1.0083102 1.0083102 + 36700 0.3191692 0 -0.074378584 1.0083102 1.0027701 + 36800 0.34473865 0 -0.052467819 1.0027701 1.0027701 + 36900 0.35012922 0 -0.034841373 1.0027701 1.0027701 + 37000 0.34543508 0 -0.019956141 1.0083102 1.0083102 + 37100 0.36637971 0 0.0034123108 1.0027701 1.0027701 + 37200 0.36008557 0 0.016667331 1.0083102 1.0083102 + 37300 0.34027931 0 0.024177377 1.0083102 1.0027701 + 37400 0.35097853 0 0.041160628 1.0027701 1.0027701 + 37500 0.35024671 0 0.052433671 1.0027701 1.0027701 + 37600 0.33483801 0 0.05655083 1.0027701 1.0027701 + 37700 0.3402098 0 0.067222448 1.0083102 1.0083102 + 37800 0.33859985 0 0.075720813 1.0083102 1.0083102 + 37900 0.32323549 0 0.079678841 1.0083102 1.0027701 + 38000 0.33701532 0 0.092666162 1.0027701 1.0027701 + 38100 0.3424632 0 0.10094611 1.0027701 1.0027701 + 38200 0.32167421 0 0.099350179 1.0027701 1.0083102 + 38300 0.32540911 0 0.10664752 1.0027701 1.0027701 + 38400 0.33574781 0 0.11614552 1.0027701 1.0027701 + 38500 0.33125908 0 0.11940265 1.0027701 1.0027701 + 38600 0.33885801 0 0.12616083 1.0027701 1.0027701 + 38700 0.33813506 0 0.1298943 1.0027701 1.0027701 + 38800 0.31888318 0 0.1260135 1.0027701 1.0027701 + 38900 0.31006429 0 0.12450345 1.0027701 1.0027701 + 39000 0.31407783 0 0.12693078 1.0083102 1.0083102 + 39100 0.33078021 0 0.13111094 1.0027701 1.0083102 + 39200 0.34311375 0 0.12937945 1.0027701 1.0083102 + 39300 0.33594172 0 0.11839992 1.0027701 1.0027701 + 39400 0.32763204 0 0.10898509 1.0083102 1.0083102 + 39500 0.33114946 0 0.10782558 1.0083102 1.0027701 + 39600 0.32905328 0 0.10631627 1.0027701 1.0027701 + 39700 0.32416114 0 0.10142386 1.0083102 1.0027701 + 39800 0.32709132 0 0.096046083 1.0027701 1.0027701 + 39900 0.32910896 0 0.087876394 1.0027701 1.0027701 + 40000 0.33462908 0 0.07810396 1.0027701 1.0027701 +Loop time of 0.503795 on 2 procs for 40000 steps with 361 atoms + +Performance: 6859934.469 tau/day, 79397.390 timesteps/s, 28.662 Matom-step/s +95.1% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.016365 | 0.01652 | 0.016675 | 0.1 | 3.28 +Bond | 0.15864 | 0.16196 | 0.16529 | 0.8 | 32.15 +Neigh | 0.05169 | 0.051701 | 0.051711 | 0.0 | 10.26 +Comm | 0.076385 | 0.091917 | 0.10745 | 5.1 | 18.24 +Output | 0.0032235 | 0.0038308 | 0.004438 | 1.0 | 0.76 +Modify | 0.11757 | 0.11844 | 0.1193 | 0.3 | 23.51 +Other | | 0.05943 | | | 11.80 + +Nlocal: 180.5 ave 181 max 180 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 53.5 ave 54 max 53 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 2 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Ave special neighs/atom = 31.024931 +Neighbor list builds = 800 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/balance/log.3Nov23.balance.bond.slow.g++.4 b/examples/balance/log.3Nov23.balance.bond.slow.g++.4 new file mode 100644 index 0000000000..b493474ace --- /dev/null +++ b/examples/balance/log.3Nov23.balance.bond.slow.g++.4 @@ -0,0 +1,550 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 2d circle of particles inside a box with LJ walls + +variable b index 0 + +variable x index 50 +variable y index 20 +variable d index 20 + +# careful not to slam into wall too hard + +variable v index 0.3 +variable w index 0.08 + +units lj +dimension 2 +atom_style bond +boundary f f p + +lattice hex 0.85 +Lattice spacing in x,y,z = 1.1655347 2.0187654 1.1655347 +region box block 0 $x 0 $y -0.5 0.5 +region box block 0 50 0 $y -0.5 0.5 +region box block 0 50 0 20 -0.5 0.5 +create_box 1 box bond/types 1 extra/bond/per/atom 6 +Created orthogonal box = (0 0 -0.58276737) to (58.276737 40.375308 0.58276737) + 2 by 2 by 1 MPI processor grid +region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 10 +create_atoms 1 region circle +Created 361 atoms + using lattice units in orthogonal box = (0 0 -0.58276737) to (58.276737 40.375308 0.58276737) + create_atoms CPU = 0.001 seconds +mass 1 1.0 + +velocity all create 0.5 87287 loop geom +velocity all set $v $w 0 sum yes +velocity all set 0.3 $w 0 sum yes +velocity all set 0.3 0.08 0 sum yes + +pair_style lj/cut 2.5 +pair_coeff 1 1 10.0 1.0 2.5 + +bond_style harmonic +bond_coeff 1 10.0 1.2 + +create_bonds many all all 1 1.0 1.5 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 42 29 1 + 2 neighbor lists, perpetual/occasional/extra = 1 1 0 + (1) command create_bonds, occasional + attributes: full, newton on + pair build: full/bin + stencil: full/bin/2d + bin: standard + (2) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard +Added 1014 bonds, new total = 1014 +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 6 = max # of 1-2 neighbors + 30 = max # of 1-3 neighbors + 180 = max # of 1-4 neighbors + 36 = max # of special neighbors + special bonds CPU = 0.001 seconds + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve + +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 + +comm_style tiled +fix 10 all balance 50 0.9 rcb + +#compute 1 all property/atom proc +#variable p atom (c_1%10)+1 +#dump 2 all custom 50 tmp.dump id v_p x y z + +#dump 3 all image 200 image.*.jpg v_p type bond atom 0.25 # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 +#variable colors string # "red green blue yellow white # purple pink orange lime gray" +#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} + +thermo_style custom step temp epair press f_10[3] f_10 +thermo 100 +timestep 0.001 + +run 40000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 42 29 1 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/2d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.02 | 7.05 | 7.102 Mbytes + Step Temp E_pair Press f_10[3] f_10 + 0 0.57437856 0 0.26099453 3.2354571 1.0526316 + 100 0.36302846 0 0.17339851 1.0083102 1.0193906 + 200 0.19645077 0 0.087800915 1.0083102 1.0083102 + 300 0.32061117 0 0.11295723 1.0193906 1.0193906 + 400 0.32854136 0 0.11325585 1.0083102 1.0083102 + 500 0.29754179 0 0.10150632 1.0193906 1.0083102 + 600 0.37384867 0 0.11949784 1.0083102 1.0083102 + 700 0.33202319 0 0.092871339 1.0083102 1.0193906 + 800 0.28340637 0 0.065861565 1.0083102 1.0083102 + 900 0.36250157 0 0.085896287 1.0193906 1.0083102 + 1000 0.35402718 0 0.07519914 1.0083102 1.0193906 + 1100 0.31576357 0 0.050253636 1.0193906 1.0083102 + 1200 0.35727572 0 0.05153538 1.0083102 1.0083102 + 1300 0.34322607 0 0.036115722 1.0083102 1.0083102 + 1400 0.34007557 0 0.025378602 1.0083102 1.0193906 + 1500 0.39242551 0 0.033002212 1.0083102 1.0193906 + 1600 0.35679049 0 0.010101576 1.0083102 1.0193906 + 1700 0.31293001 0 -0.013791036 1.0193906 1.0193906 + 1800 0.34767962 0 -0.0065490806 1.0193906 1.0193906 + 1900 0.34721592 0 -0.010055082 1.0193906 1.0083102 + 2000 0.34074949 0 -0.020822697 1.0083102 1.0083102 + 2100 0.37195615 0 -0.024943134 1.0193906 1.0083102 + 2200 0.35367164 0 -0.047369336 1.0193906 1.0083102 + 2300 0.32088735 0 -0.069724381 1.0083102 1.0083102 + 2400 0.34291945 0 -0.065470223 1.0193906 1.0083102 + 2500 0.35204641 0 -0.062631879 1.0083102 1.0083102 + 2600 0.32762755 0 -0.075128824 1.0083102 1.0083102 + 2700 0.32042617 0 -0.086259498 1.0193906 1.0083102 + 2800 0.32747171 0 -0.094775765 1.0083102 1.0083102 + 2900 0.33544664 0 -0.10376048 1.0193906 1.0083102 + 3000 0.34015845 0 -0.1112134 1.0193906 1.0083102 + 3100 0.34425802 0 -0.11413914 1.0083102 1.0193906 + 3200 0.34158654 0 -0.1164643 1.0083102 1.0083102 + 3300 0.32525955 0 -0.12206636 1.0083102 1.0193906 + 3400 0.32183965 0 -0.12186353 1.0193906 1.0083102 + 3500 0.3323435 0 -0.11597815 1.0083102 1.0083102 + 3600 0.34124638 0 -0.11177335 1.0193906 1.0193906 + 3700 0.3404339 0 -0.11235575 1.0083102 1.0193906 + 3800 0.32736123 0 -0.11610108 1.0083102 1.0193906 + 3900 0.32897993 0 -0.11138151 1.0193906 1.0083102 + 4000 0.35111095 0 -0.096171644 1.0193906 1.0193906 + 4100 0.34682622 0 -0.087507472 1.0193906 1.0193906 + 4200 0.3307829 0 -0.079759555 1.0193906 1.0083102 + 4300 0.35057085 0 -0.055194355 1.0193906 1.0083102 + 4400 0.36389071 0 -0.02963313 1.0193906 1.0193906 + 4500 0.35694456 0 -0.013842583 1.0193906 1.0193906 + 4600 0.3472078 0 -0.0048118723 1.0083102 1.0083102 + 4700 0.31734514 0 -0.0032417081 1.0083102 1.0083102 + 4800 0.32419237 0 0.01409306 1.0083102 1.0193906 + 4900 0.36939799 0 0.045351789 1.0193906 1.0193906 + 5000 0.36998276 0 0.056830437 1.0083102 1.0083102 + 5100 0.33969031 0 0.051833536 1.0083102 1.0083102 + 5200 0.33910288 0 0.055544085 1.0083102 1.0083102 + 5300 0.34641009 0 0.0651487 1.0083102 1.0083102 + 5400 0.34469325 0 0.074538093 1.0083102 1.0083102 + 5500 0.34582041 0 0.084940845 1.0193906 1.0083102 + 5600 0.33471774 0 0.090102411 1.0083102 1.0193906 + 5700 0.32667873 0 0.09528948 1.0083102 1.0193906 + 5800 0.33762496 0 0.10545364 1.0083102 1.0083102 + 5900 0.33285742 0 0.10816506 1.0083102 1.0083102 + 6000 0.31920877 0 0.10547467 1.0083102 1.0193906 + 6100 0.31933081 0 0.10610684 1.0083102 1.0193906 + 6200 0.3152523 0 0.10651599 1.0193906 1.0083102 + 6300 0.32548074 0 0.11405234 1.0083102 1.0193906 + 6400 0.33851595 0 0.12389967 1.0193906 1.0193906 + 6500 0.32957825 0 0.12493331 1.0083102 1.0083102 + 6600 0.32319786 0 0.12404318 1.0083102 1.0083102 + 6700 0.3223738 0 0.12418108 1.0304709 1.0304709 + 6800 0.32390959 0 0.12576314 1.0193906 1.0083102 + 6900 0.34414413 0 0.1318456 1.0193906 1.0193906 + 7000 0.34508922 0 0.12669741 1.0083102 1.0083102 + 7100 0.31655025 0 0.10869109 1.0083102 1.0193906 + 7200 0.31997193 0 0.10305508 1.0083102 1.0193906 + 7300 0.33199085 0 0.10377052 1.0083102 1.0083102 + 7400 0.32146221 0 0.097589803 1.0193906 1.0193906 + 7500 0.33416843 0 0.096202638 1.0083102 1.0193906 + 7600 0.35297124 0 0.092441999 1.0193906 1.0083102 + 7700 0.34494663 0 0.075206332 1.0083102 1.0193906 + 7800 0.34010702 0 0.056336074 1.0193906 1.0083102 + 7900 0.343424 0 0.040946914 1.0193906 1.0193906 + 8000 0.33772245 0 0.025817271 1.0083102 1.0083102 + 8100 0.34463909 0 0.017237548 1.0193906 1.0304709 + 8200 0.36052034 0 0.010393623 1.0083102 1.0083102 + 8300 0.36083091 0 -0.0053933186 1.0083102 1.0083102 + 8400 0.35378067 0 -0.02600248 1.0083102 1.0083102 + 8500 0.35133887 0 -0.044211483 1.0083102 1.0083102 + 8600 0.34559937 0 -0.060861345 1.0083102 1.0083102 + 8700 0.33724119 0 -0.075776058 1.0083102 1.0193906 + 8800 0.33337192 0 -0.087098937 1.0193906 1.0193906 + 8900 0.33533081 0 -0.094631485 1.0193906 1.0304709 + 9000 0.34994303 0 -0.096758052 1.0193906 1.0083102 + 9100 0.34448227 0 -0.10330192 1.0193906 1.0193906 + 9200 0.32675792 0 -0.11000278 1.0193906 1.0193906 + 9300 0.33814013 0 -0.10358181 1.0083102 1.0193906 + 9400 0.34457419 0 -0.096896951 1.0083102 1.0083102 + 9500 0.33834959 0 -0.09547729 1.0083102 1.0083102 + 9600 0.33204582 0 -0.097694622 1.0193906 1.0083102 + 9700 0.31152805 0 -0.10637377 1.0193906 1.0083102 + 9800 0.31637311 0 -0.1053323 1.0083102 1.0083102 + 9900 0.33416162 0 -0.097857158 1.0083102 1.0083102 + 10000 0.33731767 0 -0.094656227 1.0083102 1.0083102 + 10100 0.34565093 0 -0.090199556 1.0193906 1.0193906 + 10200 0.34549074 0 -0.088914471 1.0193906 1.0083102 + 10300 0.33545625 0 -0.09066219 1.0083102 1.0083102 + 10400 0.33649703 0 -0.086437886 1.0083102 1.0083102 + 10500 0.34549848 0 -0.0767365 1.0193906 1.0193906 + 10600 0.34222917 0 -0.069368792 1.0083102 1.0083102 + 10700 0.34262469 0 -0.060550996 1.0193906 1.0083102 + 10800 0.34859129 0 -0.050692625 1.0193906 1.0193906 + 10900 0.34850448 0 -0.043627505 1.0193906 1.0193906 + 11000 0.34887257 0 -0.036859125 1.0193906 1.0193906 + 11100 0.34171718 0 -0.032690742 1.0193906 1.0083102 + 11200 0.329808 0 -0.02793377 1.0083102 1.0083102 + 11300 0.34490203 0 -0.010278222 1.0083102 1.0083102 + 11400 0.36226391 0 0.010141624 1.0193906 1.0193906 + 11500 0.35392138 0 0.021188939 1.0193906 1.0193906 + 11600 0.34378732 0 0.031423313 1.0304709 1.0193906 + 11700 0.33606385 0 0.043944374 1.0193906 1.0193906 + 11800 0.33212482 0 0.058629338 1.0193906 1.0193906 + 11900 0.34547313 0 0.078112959 1.0193906 1.0083102 + 12000 0.34840957 0 0.092356502 1.0083102 1.0083102 + 12100 0.34146853 0 0.10236492 1.0193906 1.0193906 + 12200 0.34591494 0 0.11620659 1.0193906 1.0083102 + 12300 0.33290894 0 0.12437245 1.0083102 1.0193906 + 12400 0.32423652 0 0.13191976 1.0193906 1.0193906 + 12500 0.33031748 0 0.13999363 1.0193906 1.0193906 + 12600 0.31927087 0 0.13776242 1.0083102 1.0193906 + 12700 0.30865965 0 0.13340787 1.0193906 1.0083102 + 12800 0.32542691 0 0.13690449 1.0083102 1.0083102 + 12900 0.32453244 0 0.13376127 1.0083102 1.0083102 + 13000 0.30974678 0 0.12749869 1.0083102 1.0083102 + 13100 0.32402285 0 0.13240572 1.0083102 1.0193906 + 13200 0.32896987 0 0.13257567 1.0193906 1.0083102 + 13300 0.32939197 0 0.12690791 1.0083102 1.0083102 + 13400 0.33966453 0 0.12036916 1.0083102 1.0083102 + 13500 0.33012942 0 0.10496127 1.0083102 1.0304709 + 13600 0.32363377 0 0.091763332 1.0304709 1.0304709 + 13700 0.33427955 0 0.087928243 1.0193906 1.0193906 + 13800 0.33457885 0 0.08191828 1.0083102 1.0083102 + 13900 0.33819924 0 0.074487337 1.0193906 1.0083102 + 14000 0.34611002 0 0.066256529 1.0083102 1.0083102 + 14100 0.33224254 0 0.052608223 1.0083102 1.0083102 + 14200 0.33796934 0 0.049677792 1.0083102 1.0083102 + 14300 0.36216731 0 0.055173039 1.0083102 1.0083102 + 14400 0.35140789 0 0.047322221 1.0193906 1.0193906 + 14500 0.34425046 0 0.036527245 1.0193906 1.0193906 + 14600 0.3604575 0 0.0294772 1.0083102 1.0083102 + 14700 0.3433878 0 0.0096774422 1.0083102 1.0083102 + 14800 0.3287069 0 -0.0079768782 1.0083102 1.0083102 + 14900 0.34978607 0 -0.01178453 1.0083102 1.0083102 + 15000 0.34749548 0 -0.023685074 1.0193906 1.0193906 + 15100 0.33474304 0 -0.040569945 1.0083102 1.0083102 + 15200 0.35036594 0 -0.048341599 1.0083102 1.0083102 + 15300 0.35686042 0 -0.058664905 1.0193906 1.0083102 + 15400 0.34041567 0 -0.074858327 1.0083102 1.0083102 + 15500 0.33397773 0 -0.083782088 1.0083102 1.0083102 + 15600 0.3420119 0 -0.084635487 1.0193906 1.0083102 + 15700 0.345487 0 -0.088137628 1.0193906 1.0083102 + 15800 0.33494392 0 -0.10083064 1.0083102 1.0083102 + 15900 0.32675175 0 -0.11620387 1.0083102 1.0083102 + 16000 0.33011636 0 -0.12713401 1.0083102 1.0304709 + 16100 0.32443118 0 -0.13685913 1.0193906 1.0193906 + 16200 0.31608392 0 -0.14164152 1.0193906 1.0193906 + 16300 0.33293965 0 -0.13335387 1.0083102 1.0083102 + 16400 0.34462807 0 -0.12471686 1.0083102 1.0083102 + 16500 0.33528082 0 -0.12211554 1.0083102 1.0083102 + 16600 0.34250121 0 -0.11228169 1.0083102 1.0083102 + 16700 0.35342336 0 -0.099226948 1.0083102 1.0083102 + 16800 0.33730938 0 -0.093581966 1.0083102 1.0193906 + 16900 0.3275761 0 -0.085163356 1.0083102 1.0083102 + 17000 0.33624873 0 -0.070896594 1.0193906 1.0083102 + 17100 0.34339177 0 -0.057731935 1.0083102 1.0083102 + 17200 0.34874414 0 -0.046575228 1.0083102 1.0083102 + 17300 0.33950911 0 -0.041862179 1.0083102 1.0083102 + 17400 0.33100286 0 -0.036618199 1.0193906 1.0083102 + 17500 0.34238095 0 -0.021681436 1.0193906 1.0083102 + 17600 0.35476614 0 -0.0032568304 1.0083102 1.0083102 + 17700 0.35452053 0 0.011863966 1.0083102 1.0304709 + 17800 0.35423934 0 0.024753043 1.0193906 1.0193906 + 17900 0.35001044 0 0.031647802 1.0193906 1.0193906 + 18000 0.32867773 0 0.030261102 1.0083102 1.0083102 + 18100 0.32730114 0 0.037627319 1.0083102 1.0083102 + 18200 0.35786038 0 0.057653258 1.0083102 1.0083102 + 18300 0.35598175 0 0.065533711 1.0083102 1.0304709 + 18400 0.33913202 0 0.066186406 1.0083102 1.0083102 + 18500 0.34449656 0 0.074575322 1.0083102 1.0193906 + 18600 0.34792041 0 0.083818651 1.0304709 1.0193906 + 18700 0.33910599 0 0.089751723 1.0193906 1.0193906 + 18800 0.33627789 0 0.097491916 1.0304709 1.0083102 + 18900 0.32937699 0 0.10350872 1.0193906 1.0083102 + 19000 0.30908702 0 0.10610099 1.0083102 1.0083102 + 19100 0.31033435 0 0.1168178 1.0083102 1.0083102 + 19200 0.32011336 0 0.12898885 1.0083102 1.0083102 + 19300 0.31851339 0 0.13398981 1.0083102 1.0083102 + 19400 0.33289985 0 0.1401039 1.0083102 1.0083102 + 19500 0.3387096 0 0.13971063 1.0083102 1.0083102 + 19600 0.31475734 0 0.12963499 1.0083102 1.0193906 + 19700 0.31971554 0 0.13189606 1.0083102 1.0193906 + 19800 0.33096999 0 0.13636987 1.0193906 1.0083102 + 19900 0.31601688 0 0.12889803 1.0083102 1.0083102 + 20000 0.32916469 0 0.12683491 1.0083102 1.0304709 + 20100 0.34355734 0 0.12251501 1.0083102 1.0083102 + 20200 0.33029721 0 0.10833335 1.0193906 1.0083102 + 20300 0.34079176 0 0.10305862 1.0083102 1.0083102 + 20400 0.35196716 0 0.098386494 1.0083102 1.0083102 + 20500 0.32687648 0 0.081202778 1.0193906 1.0193906 + 20600 0.33371658 0 0.074287923 1.0083102 1.0193906 + 20700 0.36625228 0 0.073768436 1.0083102 1.0083102 + 20800 0.35824217 0 0.054876358 1.0193906 1.0193906 + 20900 0.34861601 0 0.031603534 1.0083102 1.0083102 + 21000 0.35396698 0 0.013464537 1.0083102 1.0083102 + 21100 0.33592449 0 -0.0096173026 1.0083102 1.0083102 + 21200 0.327063 0 -0.025970252 1.0083102 1.0083102 + 21300 0.34418745 0 -0.030446162 1.0083102 1.0083102 + 21400 0.34181459 0 -0.039942616 1.0083102 1.0083102 + 21500 0.3315724 0 -0.05089285 1.0083102 1.0083102 + 21600 0.35674681 0 -0.047926263 1.0083102 1.0083102 + 21700 0.37320044 0 -0.047190592 1.0083102 1.0083102 + 21800 0.34626293 0 -0.063211549 1.0193906 1.0083102 + 21900 0.32941853 0 -0.078034339 1.0083102 1.0083102 + 22000 0.34102577 0 -0.083179211 1.0083102 1.0083102 + 22100 0.33614888 0 -0.091647522 1.0083102 1.0083102 + 22200 0.3339762 0 -0.09744915 1.0083102 1.0083102 + 22300 0.33867021 0 -0.10026932 1.0083102 1.0083102 + 22400 0.31974078 0 -0.10896583 1.0083102 1.0193906 + 22500 0.3261442 0 -0.10644809 1.0193906 1.0083102 + 22600 0.35128159 0 -0.097711062 1.0083102 1.0083102 + 22700 0.33133845 0 -0.10656571 1.0083102 1.0083102 + 22800 0.31730555 0 -0.11420891 1.0193906 1.0083102 + 22900 0.34720941 0 -0.10586647 1.0083102 1.0083102 + 23000 0.34418922 0 -0.10745826 1.0083102 1.0083102 + 23100 0.32342851 0 -0.11384766 1.0083102 1.0083102 + 23200 0.3408144 0 -0.10631064 1.0083102 1.0083102 + 23300 0.33006722 0 -0.1070084 1.0083102 1.0083102 + 23400 0.31578528 0 -0.10711608 1.0193906 1.0193906 + 23500 0.34908788 0 -0.088441889 1.0193906 1.0083102 + 23600 0.35801835 0 -0.075953983 1.0083102 1.0083102 + 23700 0.33573037 0 -0.072357745 1.0083102 1.0193906 + 23800 0.34435835 0 -0.055470682 1.0193906 1.0083102 + 23900 0.35307683 0 -0.036076205 1.0193906 1.0193906 + 24000 0.35184599 0 -0.020939815 1.0083102 1.0083102 + 24100 0.35687079 0 -0.0063601457 1.0083102 1.0083102 + 24200 0.33612385 0 -0.0014613923 1.0083102 1.0083102 + 24300 0.32234106 0 0.006750452 1.0083102 1.0083102 + 24400 0.34852008 0 0.029170079 1.0083102 1.0083102 + 24500 0.35224811 0 0.043783151 1.0083102 1.0083102 + 24600 0.34160459 0 0.05294313 1.0083102 1.0083102 + 24700 0.35616752 0 0.069291509 1.0083102 1.0083102 + 24800 0.34984726 0 0.076650029 1.0193906 1.0193906 + 24900 0.33337969 0 0.080083735 1.0193906 1.0083102 + 25000 0.34846751 0 0.095559187 1.0083102 1.0083102 + 25100 0.34495541 0 0.10558042 1.0193906 1.0083102 + 25200 0.32630088 0 0.10897783 1.0193906 1.0083102 + 25300 0.33651146 0 0.11888202 1.0083102 1.0083102 + 25400 0.32194445 0 0.11826793 1.0083102 1.0083102 + 25500 0.30295352 0 0.11641357 1.0083102 1.0083102 + 25600 0.33485387 0 0.13204258 1.0083102 1.0083102 + 25700 0.34407287 0 0.13738986 1.0083102 1.0083102 + 25800 0.32421817 0 0.12822703 1.0083102 1.0083102 + 25900 0.32463356 0 0.12403448 1.0193906 1.0193906 + 26000 0.32431468 0 0.12087994 1.0193906 1.0083102 + 26100 0.31886825 0 0.11741621 1.0193906 1.0083102 + 26200 0.32607823 0 0.1180517 1.0083102 1.0083102 + 26300 0.32511255 0 0.11479741 1.0304709 1.0193906 + 26400 0.32336124 0 0.11055002 1.0083102 1.0083102 + 26500 0.33026321 0 0.10934888 1.0083102 1.0083102 + 26600 0.32604491 0 0.10480442 1.0083102 1.0193906 + 26700 0.33764955 0 0.10458959 1.0083102 1.0083102 + 26800 0.35202544 0 0.10295075 1.0193906 1.0193906 + 26900 0.33382028 0 0.088148483 1.0193906 1.0193906 + 27000 0.33252808 0 0.078275659 1.0193906 1.0193906 + 27100 0.35433636 0 0.076729989 1.0304709 1.0193906 + 27200 0.34824881 0 0.065720375 1.0193906 1.0083102 + 27300 0.33525644 0 0.051611147 1.0083102 1.0193906 + 27400 0.34685762 0 0.045597284 1.0193906 1.0083102 + 27500 0.35181712 0 0.037076034 1.0083102 1.0083102 + 27600 0.34541685 0 0.022287411 1.0083102 1.0083102 + 27700 0.34559823 0 0.0056480168 1.0083102 1.0304709 + 27800 0.33646375 0 -0.015571541 1.0193906 1.0193906 + 27900 0.33681932 0 -0.031777883 1.0193906 1.0193906 + 28000 0.35093514 0 -0.041519343 1.0083102 1.0083102 + 28100 0.34345697 0 -0.057623438 1.0083102 1.0083102 + 28200 0.33655073 0 -0.072228985 1.0083102 1.0083102 + 28300 0.34428448 0 -0.080015243 1.0083102 1.0193906 + 28400 0.34089922 0 -0.089955339 1.0193906 1.0193906 + 28500 0.34522966 0 -0.096529413 1.0304709 1.0083102 + 28600 0.34713819 0 -0.10221712 1.0304709 1.0304709 + 28700 0.33692049 0 -0.10868625 1.0193906 1.0083102 + 28800 0.34522852 0 -0.10679446 1.0083102 1.0193906 + 28900 0.33956477 0 -0.1105454 1.0304709 1.0083102 + 29000 0.30989301 0 -0.12332622 1.0193906 1.0193906 + 29100 0.32373738 0 -0.11985261 1.0083102 1.0083102 + 29200 0.35156812 0 -0.10956099 1.0083102 1.0193906 + 29300 0.33938829 0 -0.11259535 1.0083102 1.0193906 + 29400 0.32401178 0 -0.11664978 1.0193906 1.0193906 + 29500 0.32320492 0 -0.11336533 1.0193906 1.0193906 + 29600 0.32928877 0 -0.10404547 1.0193906 1.0193906 + 29700 0.3436911 0 -0.089845529 1.0193906 1.0193906 + 29800 0.34194019 0 -0.081660797 1.0193906 1.0193906 + 29900 0.32909826 0 -0.07807778 1.0083102 1.0083102 + 30000 0.34092826 0 -0.06626489 1.0083102 1.0083102 + 30100 0.34763086 0 -0.055589635 1.0083102 1.0083102 + 30200 0.34479984 0 -0.047402672 1.0193906 1.0193906 + 30300 0.34783224 0 -0.036371931 1.0083102 1.0083102 + 30400 0.34525176 0 -0.027246663 1.0193906 1.0083102 + 30500 0.35266364 0 -0.016275033 1.0083102 1.0193906 + 30600 0.35792479 0 -0.007158119 1.0193906 1.0193906 + 30700 0.33607567 0 -0.0064391529 1.0083102 1.0083102 + 30800 0.34311607 0 0.005382948 1.0304709 1.0083102 + 30900 0.37218574 0 0.025004945 1.0083102 1.0083102 + 31000 0.35196541 0 0.027902483 1.0083102 1.0083102 + 31100 0.33533693 0 0.032349025 1.0083102 1.0083102 + 31200 0.34382193 0 0.046631454 1.0193906 1.0083102 + 31300 0.32886237 0 0.05405956 1.0083102 1.0083102 + 31400 0.32738754 0 0.066295734 1.0083102 1.0083102 + 31500 0.35367575 0 0.087140904 1.0083102 1.0083102 + 31600 0.33756811 0 0.092135887 1.0083102 1.0083102 + 31700 0.31701631 0 0.094576339 1.0083102 1.0083102 + 31800 0.34217612 0 0.11195071 1.0083102 1.0083102 + 31900 0.33725187 0 0.11924087 1.0193906 1.0083102 + 32000 0.30966055 0 0.1199329 1.0193906 1.0083102 + 32100 0.32771084 0 0.13627552 1.0083102 1.0083102 + 32200 0.3400914 0 0.14816015 1.0083102 1.0193906 + 32300 0.32210513 0 0.14569378 1.0193906 1.0083102 + 32400 0.32096229 0 0.14515284 1.0083102 1.0193906 + 32500 0.31781969 0 0.14124479 1.0193906 1.0193906 + 32600 0.3146986 0 0.13616644 1.0193906 1.0193906 + 32700 0.33526021 0 0.13913538 1.0083102 1.0083102 + 32800 0.33561156 0 0.13481353 1.0083102 1.0083102 + 32900 0.31418235 0 0.12161202 1.0193906 1.0193906 + 33000 0.31952054 0 0.11558871 1.0304709 1.0083102 + 33100 0.33437451 0 0.11011602 1.0193906 1.0193906 + 33200 0.33381704 0 0.096535424 1.0193906 1.0304709 + 33300 0.33786259 0 0.08382113 1.0304709 1.0304709 + 33400 0.34590937 0 0.073879824 1.0083102 1.0083102 + 33500 0.33844204 0 0.060854835 1.0193906 1.0193906 + 33600 0.33845544 0 0.052237152 1.0083102 1.0193906 + 33700 0.35419837 0 0.048922784 1.0083102 1.0083102 + 33800 0.3485977 0 0.036886422 1.0083102 1.0083102 + 33900 0.33816081 0 0.021599335 1.0083102 1.0083102 + 34000 0.34241389 0 0.010436074 1.0083102 1.0083102 + 34100 0.33934235 0 -0.002581075 1.0193906 1.0083102 + 34200 0.34579204 0 -0.011373729 1.0083102 1.0193906 + 34300 0.35778336 0 -0.018118327 1.0193906 1.0193906 + 34400 0.35522938 0 -0.030427967 1.0083102 1.0193906 + 34500 0.34820709 0 -0.042562699 1.0083102 1.0083102 + 34600 0.35026547 0 -0.047488326 1.0083102 1.0083102 + 34700 0.35221351 0 -0.050832178 1.0083102 1.0083102 + 34800 0.33043515 0 -0.062718859 1.0083102 1.0083102 + 34900 0.32750488 0 -0.068765033 1.0083102 1.0083102 + 35000 0.35323787 0 -0.067326627 1.0083102 1.0083102 + 35100 0.34732304 0 -0.080326407 1.0193906 1.0083102 + 35200 0.3248439 0 -0.099312427 1.0083102 1.0083102 + 35300 0.32854244 0 -0.10509437 1.0083102 1.0083102 + 35400 0.33511384 0 -0.10605662 1.0083102 1.0083102 + 35500 0.33532722 0 -0.10993967 1.0083102 1.0083102 + 35600 0.33523312 0 -0.11653983 1.0083102 1.0193906 + 35700 0.32405906 0 -0.12564005 1.0193906 1.0193906 + 35800 0.32914902 0 -0.12476137 1.0193906 1.0083102 + 35900 0.34093492 0 -0.11716996 1.0083102 1.0083102 + 36000 0.33557882 0 -0.11216382 1.0083102 1.0083102 + 36100 0.3342841 0 -0.10445781 1.0193906 1.0193906 + 36200 0.33557348 0 -0.0983036 1.0193906 1.0083102 + 36300 0.33052024 0 -0.097594107 1.0304709 1.0083102 + 36400 0.34570912 0 -0.089010349 1.0083102 1.0193906 + 36500 0.35735704 0 -0.078483059 1.0193906 1.0193906 + 36600 0.33199022 0 -0.079452064 1.0193906 1.0083102 + 36700 0.3191692 0 -0.074378584 1.0083102 1.0083102 + 36800 0.34473865 0 -0.052467819 1.0083102 1.0083102 + 36900 0.35012922 0 -0.034841373 1.0193906 1.0083102 + 37000 0.34543508 0 -0.019956141 1.0083102 1.0083102 + 37100 0.36637971 0 0.0034123108 1.0083102 1.0083102 + 37200 0.36008557 0 0.016667331 1.0304709 1.0304709 + 37300 0.34027931 0 0.024177377 1.0304709 1.0083102 + 37400 0.35097853 0 0.041160628 1.0083102 1.0083102 + 37500 0.35024671 0 0.052433671 1.0083102 1.0083102 + 37600 0.33483801 0 0.05655083 1.0193906 1.0193906 + 37700 0.3402098 0 0.067222448 1.0193906 1.0193906 + 37800 0.33859985 0 0.075720813 1.0193906 1.0193906 + 37900 0.32323549 0 0.079678841 1.0193906 1.0083102 + 38000 0.33701532 0 0.092666162 1.0193906 1.0193906 + 38100 0.3424632 0 0.10094611 1.0083102 1.0193906 + 38200 0.32167421 0 0.099350179 1.0193906 1.0193906 + 38300 0.32540911 0 0.10664752 1.0083102 1.0193906 + 38400 0.33574781 0 0.11614552 1.0193906 1.0083102 + 38500 0.33125908 0 0.11940265 1.0193906 1.0083102 + 38600 0.33885801 0 0.12616083 1.0083102 1.0083102 + 38700 0.33813506 0 0.1298943 1.0083102 1.0193906 + 38800 0.31888318 0 0.1260135 1.0083102 1.0193906 + 38900 0.31006429 0 0.12450345 1.0193906 1.0083102 + 39000 0.31407783 0 0.12693078 1.0193906 1.0193906 + 39100 0.33078021 0 0.13111094 1.0304709 1.0193906 + 39200 0.34311375 0 0.12937945 1.0083102 1.0193906 + 39300 0.33594172 0 0.11839992 1.0083102 1.0083102 + 39400 0.32763204 0 0.10898509 1.0304709 1.0193906 + 39500 0.33114946 0 0.10782558 1.0083102 1.0083102 + 39600 0.32905328 0 0.10631627 1.0083102 1.0193906 + 39700 0.32416114 0 0.10142386 1.0193906 1.0083102 + 39800 0.32709132 0 0.096046083 1.0083102 1.0193906 + 39900 0.32910896 0 0.087876394 1.0083102 1.0083102 + 40000 0.33462908 0 0.07810396 1.0193906 1.0193906 +Loop time of 0.489746 on 4 procs for 40000 steps with 361 atoms + +Performance: 7056721.575 tau/day, 81675.018 timesteps/s, 29.485 Matom-step/s +91.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.007919 | 0.0093951 | 0.010867 | 1.2 | 1.92 +Bond | 0.070755 | 0.085453 | 0.096684 | 3.3 | 17.45 +Neigh | 0.030371 | 0.030384 | 0.030393 | 0.0 | 6.20 +Comm | 0.16386 | 0.17988 | 0.19412 | 2.6 | 36.73 +Output | 0.0037789 | 0.0040841 | 0.0048475 | 0.7 | 0.83 +Modify | 0.090035 | 0.098104 | 0.1037 | 1.8 | 20.03 +Other | | 0.08244 | | | 16.83 + +Nlocal: 90.25 ave 92 max 88 min +Histogram: 1 0 0 0 0 1 0 1 0 1 +Nghost: 60 ave 61 max 58 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 0 +Ave neighs/atom = 0 +Ave special neighs/atom = 31.024931 +Neighbor list builds = 800 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/balance/log.3Nov23.balance.clock.dynamic.g++.2 b/examples/balance/log.3Nov23.balance.clock.dynamic.g++.2 new file mode 100644 index 0000000000..49d2b8deda --- /dev/null +++ b/examples/balance/log.3Nov23.balance.clock.dynamic.g++.2 @@ -0,0 +1,234 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.001 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes +fix p all property/atom d_WEIGHT +compute p all property/atom d_WEIGHT +fix 0 all balance 50 1.0 shift x 10 1.0 weight time 1.0 weight store WEIGHT +variable maximb equal f_0[1] +variable iter equal f_0[2] +variable prev equal f_0[3] +variable final equal f_0 + +#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" + +fix 1 all nve + +#dump id all atom 50 dump.melt +#dump id all custom 50 dump.lammpstrj id type x y z c_p + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.559 | 4.75 | 4.941 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 + 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 4738.2137 + 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 4738.2137 + 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 4738.2137 + 200 0.536665 -6.2530113 0 -5.448215 -1.933468 4738.2137 + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 + 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 4738.2137 + 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 4738.2137 + 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 4738.2137 + 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 4738.2137 + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 +Loop time of 1.71386 on 2 procs for 500 steps with 4000 atoms + +Performance: 126031.028 tau/day, 291.738 timesteps/s, 1.167 Matom-step/s +99.6% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.1357 | 1.1768 | 1.2179 | 3.8 | 68.66 +Neigh | 0.40728 | 0.42812 | 0.44897 | 3.2 | 24.98 +Comm | 0.075827 | 0.095749 | 0.11567 | 6.4 | 5.59 +Output | 0.0002928 | 0.0003251 | 0.00035739 | 0.0 | 0.02 +Modify | 0.0076492 | 0.0080146 | 0.00838 | 0.4 | 0.47 +Other | | 0.004868 | | | 0.28 + +Nlocal: 2000 ave 2149 max 1851 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10459.5 ave 10836 max 10083 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298070 ave 307801 max 288338 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596139 +Ave neighs/atom = 149.03475 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.945 | 4.949 | 4.953 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 + 550 0.54137926 -6.2592773 0 -5.4474115 -1.9770236 4738.2137 + 600 0.54022886 -6.2573307 0 -5.44719 -1.9619637 4738.2137 + 650 0.54709009 -6.2678862 0 -5.4474562 -1.9958342 4738.2137 + 700 0.54590044 -6.2656903 0 -5.4470444 -1.9957108 4738.2137 + 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 4738.2137 + 800 0.5520987 -6.2739184 0 -5.4459774 -2.0084991 4738.2137 + 850 0.54963958 -6.2702473 0 -5.445994 -1.9740031 4738.2137 + 900 0.54390586 -6.2615476 0 -5.4458927 -1.9400871 4738.2137 + 950 0.54741732 -6.2665755 0 -5.4456548 -1.9466417 4738.2137 + 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 +Loop time of 1.67419 on 2 procs for 500 steps with 4000 atoms + +Performance: 129017.323 tau/day, 298.651 timesteps/s, 1.195 Matom-step/s +99.7% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.1354 | 1.1632 | 1.191 | 2.6 | 69.48 +Neigh | 0.39683 | 0.42125 | 0.44567 | 3.8 | 25.16 +Comm | 0.073552 | 0.076486 | 0.07942 | 1.1 | 4.57 +Output | 0.00028662 | 0.00031609 | 0.00034556 | 0.0 | 0.02 +Modify | 0.0075098 | 0.0079796 | 0.0084494 | 0.5 | 0.48 +Other | | 0.004917 | | | 0.29 + +Nlocal: 2000 ave 2127 max 1873 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10413.5 ave 10886 max 9941 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 300836 ave 314685 max 286986 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 601671 +Ave neighs/atom = 150.41775 +Neighbor list builds = 51 +Dangerous builds = 0 +fix 0 all balance 50 1.0 shift x 5 1.0 weight neigh 0.5 weight time 0.66 weight store WEIGHT +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.953 | 5.144 | 5.336 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 + 1050 0.54633412 -6.2656384 0 -5.4463421 -1.9012895 4738.2137 + 1100 0.54325667 -6.2612166 0 -5.4465353 -1.8870463 4738.2137 + 1150 0.55057583 -6.2719187 0 -5.4462614 -1.9575881 4738.2137 + 1200 0.53728175 -6.251744 0 -5.4460228 -1.8124097 4738.2137 + 1250 0.54077561 -6.2567544 0 -5.4457938 -1.8418134 4738.2137 + 1300 0.54430333 -6.260995 0 -5.4447442 -1.856351 4738.2137 + 1350 0.55097839 -6.2715909 0 -5.4453299 -1.9014337 4738.2137 + 1400 0.53858139 -6.2526781 0 -5.445008 -1.7965773 4738.2137 + 1450 0.5421844 -6.2574683 0 -5.444395 -1.7901189 4738.2137 + 1500 0.54200617 -6.2571433 0 -5.4443373 -1.8000344 4738.2137 +Loop time of 2.16148 on 2 procs for 500 steps with 4000 atoms + +Performance: 99931.753 tau/day, 231.324 timesteps/s, 925.294 katom-step/s +98.8% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.79846 | 1.1842 | 1.5699 | 35.4 | 54.79 +Neigh | 0.37845 | 0.43466 | 0.49086 | 8.5 | 20.11 +Comm | 0.08708 | 0.52938 | 0.97168 | 60.8 | 24.49 +Output | 0.0002959 | 0.0003233 | 0.00035071 | 0.0 | 0.01 +Modify | 0.0072841 | 0.0078691 | 0.0084541 | 0.7 | 0.36 +Other | | 0.005076 | | | 0.23 + +Nlocal: 2000 ave 2298 max 1702 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10344.5 ave 11222 max 9467 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 302958 ave 343175 max 262742 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 605917 +Ave neighs/atom = 151.47925 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.957 | 5.337 | 5.718 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 1500 0.54200617 -6.2571433 0 -5.4443373 -1.8000344 4738.2137 + 1550 0.53713589 -6.2504069 0 -5.4449045 -1.764709 4738.2137 + 1600 0.54679555 -6.2646482 0 -5.44466 -1.8115779 4738.2137 + 1650 0.53806567 -6.2519005 0 -5.4450038 -1.7409139 4738.2137 + 1700 0.53479485 -6.2468959 0 -5.4449041 -1.7162328 4738.2137 + 1750 0.53714536 -6.2506572 0 -5.4451406 -1.7340479 4738.2137 + 1800 0.52749909 -6.2358678 0 -5.444817 -1.6875013 4738.2137 + 1850 0.54585987 -6.2629365 0 -5.4443514 -1.7758757 4738.2137 + 1900 0.53010207 -6.2387514 0 -5.4437971 -1.6381553 4738.2137 + 1950 0.54287913 -6.2582893 0 -5.4441742 -1.7367856 4738.2137 + 2000 0.52766186 -6.2348576 0 -5.4435627 -1.5589066 4738.2137 +Loop time of 2.18418 on 2 procs for 500 steps with 4000 atoms + +Performance: 98892.757 tau/day, 228.918 timesteps/s, 915.674 katom-step/s +98.6% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.87818 | 1.1728 | 1.4674 | 27.2 | 53.69 +Neigh | 0.38155 | 0.42626 | 0.47096 | 6.8 | 19.52 +Comm | 0.23213 | 0.57157 | 0.91101 | 44.9 | 26.17 +Output | 0.00030069 | 0.00032376 | 0.00034684 | 0.0 | 0.01 +Modify | 0.0076232 | 0.0079287 | 0.0082342 | 0.3 | 0.36 +Other | | 0.005329 | | | 0.24 + +Nlocal: 2000 ave 2300 max 1700 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10324 ave 11204 max 9444 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 303986 ave 345018 max 262954 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 607972 +Ave neighs/atom = 151.993 +Neighbor list builds = 51 +Dangerous builds = 0 +Total wall time: 0:00:07 diff --git a/examples/balance/log.3Nov23.balance.clock.dynamic.g++.4 b/examples/balance/log.3Nov23.balance.clock.dynamic.g++.4 new file mode 100644 index 0000000000..a4d22713c1 --- /dev/null +++ b/examples/balance/log.3Nov23.balance.clock.dynamic.g++.4 @@ -0,0 +1,234 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 4 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.000 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes +fix p all property/atom d_WEIGHT +compute p all property/atom d_WEIGHT +fix 0 all balance 50 1.0 shift x 10 1.0 weight time 1.0 weight store WEIGHT +variable maximb equal f_0[1] +variable iter equal f_0[2] +variable prev equal f_0[3] +variable final equal f_0 + +#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" + +fix 1 all nve + +#dump id all atom 50 dump.melt +#dump id all custom 50 dump.lammpstrj id type x y z c_p + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.692 | 4.073 | 4.455 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 + 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 4738.2137 + 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 4738.2137 + 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 4738.2137 + 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 4738.2137 + 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 + 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 4738.2137 + 350 0.55600296 -6.2801497 0 -5.4463538 -2.0394056 4738.2137 + 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 4738.2137 + 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 4738.2137 + 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 +Loop time of 1.25319 on 4 procs for 500 steps with 4000 atoms + +Performance: 172359.605 tau/day, 398.981 timesteps/s, 1.596 Matom-step/s +98.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.34653 | 0.64351 | 0.91663 | 28.5 | 51.35 +Neigh | 0.21165 | 0.23194 | 0.25847 | 4.2 | 18.51 +Comm | 0.11416 | 0.36777 | 0.63774 | 34.3 | 29.35 +Output | 0.00027595 | 0.00030885 | 0.00034514 | 0.0 | 0.02 +Modify | 0.0044031 | 0.005039 | 0.0057452 | 0.8 | 0.40 +Other | | 0.004619 | | | 0.37 + +Nlocal: 1000 ave 1250 max 767 min +Histogram: 1 1 0 0 0 0 0 1 0 1 +Nghost: 8594.25 ave 9068 max 8005 min +Histogram: 1 0 0 0 0 1 1 0 0 1 +Neighs: 149308 ave 207861 max 76482 min +Histogram: 1 0 1 0 0 0 0 0 0 2 + +Total # of neighbors = 597231 +Ave neighs/atom = 149.30775 +Neighbor list builds = 50 +Dangerous builds = 0 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.082 | 4.271 | 4.459 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 + 550 0.53879347 -6.2554274 0 -5.4474393 -1.9756834 4738.2137 + 600 0.54275982 -6.2616799 0 -5.4477437 -1.9939993 4738.2137 + 650 0.54526651 -6.265098 0 -5.4474027 -2.0303672 4738.2137 + 700 0.54369381 -6.263201 0 -5.4478642 -1.9921967 4738.2137 + 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 4738.2137 + 800 0.55061744 -6.2725556 0 -5.4468359 -2.0100922 4738.2137 + 850 0.55371614 -6.2763992 0 -5.4460326 -2.0065329 4738.2137 + 900 0.54756622 -6.2668303 0 -5.4456863 -1.9796122 4738.2137 + 950 0.54791593 -6.2673161 0 -5.4456477 -1.9598278 4738.2137 + 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 +Loop time of 1.21278 on 4 procs for 500 steps with 4000 atoms + +Performance: 178103.015 tau/day, 412.275 timesteps/s, 1.649 Matom-step/s +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.34456 | 0.63182 | 0.88173 | 27.7 | 52.10 +Neigh | 0.21634 | 0.24141 | 0.2701 | 4.5 | 19.91 +Comm | 0.10554 | 0.32979 | 0.58781 | 34.4 | 27.19 +Output | 0.00027303 | 0.00029988 | 0.00033111 | 0.0 | 0.02 +Modify | 0.0042091 | 0.0049092 | 0.0056581 | 0.9 | 0.40 +Other | | 0.004556 | | | 0.38 + +Nlocal: 1000 ave 1448 max 649 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Nghost: 8681.25 ave 9365 max 7993 min +Histogram: 1 0 1 0 0 0 0 1 0 1 +Neighs: 150170 ave 187956 max 103584 min +Histogram: 1 0 0 1 0 0 0 0 1 1 + +Total # of neighbors = 600678 +Ave neighs/atom = 150.1695 +Neighbor list builds = 53 +Dangerous builds = 0 +fix 0 all balance 50 1.0 shift x 5 1.0 weight neigh 0.5 weight time 0.66 weight store WEIGHT +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.082 | 4.271 | 4.459 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 + 1050 0.54629742 -6.2657526 0 -5.4465113 -1.945821 4738.2137 + 1100 0.55427881 -6.2781733 0 -5.446963 -2.0021027 4738.2137 + 1150 0.54730654 -6.267257 0 -5.4465025 -1.9420678 4738.2137 + 1200 0.5388281 -6.2547963 0 -5.4467562 -1.890178 4738.2137 + 1250 0.54848768 -6.2694237 0 -5.4468979 -1.9636797 4738.2137 + 1300 0.54134321 -6.2590728 0 -5.447261 -1.9170271 4738.2137 + 1350 0.53564389 -6.2501521 0 -5.4468871 -1.8642306 4738.2137 + 1400 0.53726924 -6.2518379 0 -5.4461355 -1.8544028 4738.2137 + 1450 0.54525935 -6.2632653 0 -5.4455808 -1.9072158 4738.2137 + 1500 0.54223346 -6.2591057 0 -5.4459588 -1.8866984 4738.2137 +Loop time of 1.11039 on 4 procs for 500 steps with 4000 atoms + +Performance: 194526.606 tau/day, 450.293 timesteps/s, 1.801 Matom-step/s +98.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.42944 | 0.62743 | 0.76349 | 18.0 | 56.51 +Neigh | 0.1745 | 0.22812 | 0.29389 | 10.7 | 20.54 +Comm | 0.15606 | 0.24538 | 0.37672 | 18.4 | 22.10 +Output | 0.00028277 | 0.00030572 | 0.00033535 | 0.0 | 0.03 +Modify | 0.0036942 | 0.0046797 | 0.0057281 | 1.4 | 0.42 +Other | | 0.00448 | | | 0.40 + +Nlocal: 1000 ave 1289 max 764 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 8639.25 ave 9512 max 8090 min +Histogram: 1 1 0 1 0 0 0 0 0 1 +Neighs: 150494 ave 209619 max 82578 min +Histogram: 1 0 1 0 0 0 0 0 0 2 + +Total # of neighbors = 601974 +Ave neighs/atom = 150.4935 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.082 | 4.272 | 4.459 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 1500 0.54223346 -6.2591057 0 -5.4459588 -1.8866984 4738.2137 + 1550 0.55327014 -6.2750125 0 -5.4453148 -1.9506585 4738.2137 + 1600 0.54418991 -6.261262 0 -5.4451812 -1.8559426 4738.2137 + 1650 0.54710046 -6.266198 0 -5.4457525 -1.888284 4738.2137 + 1700 0.53665701 -6.2504958 0 -5.4457115 -1.8067998 4738.2137 + 1750 0.5486465 -6.2681117 0 -5.4453477 -1.8662621 4738.2137 + 1800 0.54476258 -6.2615089 0 -5.4445693 -1.8352878 4738.2137 + 1850 0.541431 -6.255553 0 -5.4436095 -1.8005746 4738.2137 + 1900 0.53992581 -6.2541254 0 -5.4444392 -1.7768566 4738.2137 + 1950 0.54667259 -6.264121 0 -5.4443171 -1.7947882 4738.2137 + 2000 0.54556851 -6.2625542 0 -5.444406 -1.8072484 4738.2137 +Loop time of 1.14143 on 4 procs for 500 steps with 4000 atoms + +Performance: 189237.081 tau/day, 438.049 timesteps/s, 1.752 Matom-step/s +99.2% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.42201 | 0.63026 | 0.77752 | 18.6 | 55.22 +Neigh | 0.18905 | 0.2462 | 0.31411 | 10.7 | 21.57 +Comm | 0.15495 | 0.25528 | 0.39485 | 18.8 | 22.36 +Output | 0.00027662 | 0.00030437 | 0.00033645 | 0.0 | 0.03 +Modify | 0.0037058 | 0.0046791 | 0.0056663 | 1.4 | 0.41 +Other | | 0.004707 | | | 0.41 + +Nlocal: 1000 ave 1309 max 769 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Nghost: 8636.75 ave 9520 max 8192 min +Histogram: 2 0 1 0 0 0 0 0 0 1 +Neighs: 151656 ave 211059 max 85091 min +Histogram: 1 0 1 0 0 0 0 0 0 2 + +Total # of neighbors = 606625 +Ave neighs/atom = 151.65625 +Neighbor list builds = 56 +Dangerous builds = 0 +Total wall time: 0:00:04 diff --git a/examples/balance/log.3Nov23.balance.clock.static.g++.2 b/examples/balance/log.3Nov23.balance.clock.static.g++.2 new file mode 100644 index 0000000000..ad9e32eccf --- /dev/null +++ b/examples/balance/log.3Nov23.balance.clock.static.g++.2 @@ -0,0 +1,207 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +variable factor index 1.0 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.001 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +group fast type 1 +2600 atoms in group fast +group slow type 2 +1400 atoms in group slow +balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard + rebalancing time: 0.001 seconds + iteration count = 1 + time weight factor: 1 + initial/final maximal load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.294 | 4.485 | 4.675 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 1 -6.9453205 0 -5.4456955 -5.6812358 + 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 + 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 + 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 + 200 0.536665 -6.2530113 0 -5.448215 -1.933468 + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 +Loop time of 0.952998 on 2 procs for 250 steps with 4000 atoms + +Performance: 113326.532 tau/day, 262.330 timesteps/s, 1.049 Matom-step/s +99.4% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.4745 | 0.59305 | 0.7116 | 15.4 | 62.23 +Neigh | 0.19129 | 0.20528 | 0.21927 | 3.1 | 21.54 +Comm | 0.016122 | 0.14873 | 0.28134 | 34.4 | 15.61 +Output | 0.00015798 | 0.00017139 | 0.0001848 | 0.0 | 0.02 +Modify | 0.0032698 | 0.0033573 | 0.0034449 | 0.2 | 0.35 +Other | | 0.00241 | | | 0.25 + +Nlocal: 2000 ave 2051 max 1949 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10443 ave 10506 max 10380 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298332 ave 363449 max 233215 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596664 +Ave neighs/atom = 149.166 +Neighbor list builds = 24 +Dangerous builds = 0 +balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 3 + time weight factor: 1 + initial/final maximal load/proc = 1.0308705 0.92612715 + initial/final imbalance factor = 1.1475395 1.0309418 + x cuts: 0 0.4375 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.68 | 4.683 | 4.687 Mbytes + Step Temp E_pair E_mol TotEng Press + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 + 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 + 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 + 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 + 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 +Loop time of 0.88104 on 2 procs for 250 steps with 4000 atoms + +Performance: 122582.335 tau/day, 283.755 timesteps/s, 1.135 Matom-step/s +99.6% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.54838 | 0.58404 | 0.6197 | 4.7 | 66.29 +Neigh | 0.18083 | 0.20191 | 0.22299 | 4.7 | 22.92 +Comm | 0.032279 | 0.089285 | 0.14629 | 19.1 | 10.13 +Output | 0.00014548 | 0.00016198 | 0.00017849 | 0.0 | 0.02 +Modify | 0.0029024 | 0.0032448 | 0.0035871 | 0.6 | 0.37 +Other | | 0.002397 | | | 0.27 + +Nlocal: 2000 ave 2284 max 1716 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10450 ave 10742 max 10158 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298063 ave 326003 max 270123 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596126 +Ave neighs/atom = 149.0315 +Neighbor list builds = 25 +Dangerous builds = 0 +balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 4 + time weight factor: 1 + initial/final maximal load/proc = 0.94269243 0.91089769 + initial/final imbalance factor = 1.0640447 1.028157 + x cuts: 0 0.47265625 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.68 | 4.683 | 4.687 Mbytes + Step Temp E_pair E_mol TotEng Press + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 + 550 0.54137926 -6.2592773 0 -5.4474115 -1.9770236 + 600 0.54022886 -6.2573307 0 -5.44719 -1.9619637 + 650 0.54709009 -6.2678862 0 -5.4474562 -1.9958342 + 700 0.54590044 -6.2656903 0 -5.4470444 -1.9957108 + 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 +Loop time of 0.879484 on 2 procs for 250 steps with 4000 atoms + +Performance: 122799.292 tau/day, 284.258 timesteps/s, 1.137 Matom-step/s +99.5% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.52834 | 0.59047 | 0.6526 | 8.1 | 67.14 +Neigh | 0.20544 | 0.20695 | 0.20845 | 0.3 | 23.53 +Comm | 0.015738 | 0.076296 | 0.13685 | 21.9 | 8.68 +Output | 0.00016028 | 0.00017427 | 0.00018825 | 0.0 | 0.02 +Modify | 0.0032547 | 0.0033096 | 0.0033644 | 0.1 | 0.38 +Other | | 0.002288 | | | 0.26 + +Nlocal: 2000 ave 2089 max 1911 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10347.5 ave 10639 max 10056 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 299628 ave 327997 max 271259 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 599256 +Ave neighs/atom = 149.814 +Neighbor list builds = 25 +Dangerous builds = 0 +Total wall time: 0:00:02 diff --git a/examples/balance/log.3Nov23.balance.clock.static.g++.4 b/examples/balance/log.3Nov23.balance.clock.static.g++.4 new file mode 100644 index 0000000000..190e4ef34b --- /dev/null +++ b/examples/balance/log.3Nov23.balance.clock.static.g++.4 @@ -0,0 +1,207 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +variable factor index 1.0 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 4 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.000 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +group fast type 1 +2600 atoms in group fast +group slow type 2 +1400 atoms in group slow +balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard + rebalancing time: 0.000 seconds + iteration count = 2 + time weight factor: 1 + initial/final maximal load/proc = 1200 1200 + initial/final imbalance factor = 1.2 1.2 + x cuts: 0 0.25 0.5 0.6875 1 + y cuts: 0 1 + z cuts: 0 1 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 3.427 | 3.713 | 4.19 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 1 -6.9453205 0 -5.4456955 -5.6812358 + 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 + 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 + 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 + 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 + 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 +Loop time of 0.73733 on 4 procs for 250 steps with 4000 atoms + +Performance: 146474.412 tau/day, 339.061 timesteps/s, 1.356 Matom-step/s +98.5% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.17561 | 0.32661 | 0.58554 | 29.3 | 44.30 +Neigh | 0.082409 | 0.10388 | 0.12511 | 5.7 | 14.09 +Comm | 0.022216 | 0.30253 | 0.46162 | 31.8 | 41.03 +Output | 0.00014228 | 0.00015708 | 0.00017991 | 0.0 | 0.02 +Modify | 0.0015077 | 0.001891 | 0.0022549 | 0.7 | 0.26 +Other | | 0.002266 | | | 0.31 + +Nlocal: 1000 ave 1263 max 712 min +Histogram: 1 0 0 0 1 0 1 0 0 1 +Nghost: 8711.5 ave 9045 max 8325 min +Histogram: 1 0 0 0 0 1 1 0 0 1 +Neighs: 149325 ave 275165 max 77227 min +Histogram: 2 0 0 0 1 0 0 0 0 1 + +Total # of neighbors = 597299 +Ave neighs/atom = 149.32475 +Neighbor list builds = 23 +Dangerous builds = 0 +balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 3 + time weight factor: 1 + initial/final maximal load/proc = 0.81065095 0.60308204 + initial/final imbalance factor = 1.5281141 1.1368372 + x cuts: 0 0.28125 0.46875 0.6171875 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 3.788 | 3.909 | 4.194 Mbytes + Step Temp E_pair E_mol TotEng Press + 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 + 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 + 350 0.55600296 -6.2801497 0 -5.4463538 -2.0394056 + 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 + 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 + 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 +Loop time of 0.574974 on 4 procs for 250 steps with 4000 atoms + +Performance: 187834.605 tau/day, 434.802 timesteps/s, 1.739 Matom-step/s +98.6% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.22579 | 0.30378 | 0.43857 | 15.5 | 52.83 +Neigh | 0.065619 | 0.099114 | 0.13721 | 8.3 | 17.24 +Comm | 0.044004 | 0.16804 | 0.24011 | 18.1 | 29.23 +Output | 0.0001362 | 0.00015185 | 0.00017014 | 0.0 | 0.03 +Modify | 0.001083 | 0.0017628 | 0.0025897 | 1.4 | 0.31 +Other | | 0.002125 | | | 0.37 + +Nlocal: 1000 ave 1467 max 599 min +Histogram: 1 0 1 0 0 0 1 0 0 1 +Nghost: 8613.75 ave 9708 max 7894 min +Histogram: 2 0 0 0 0 1 0 0 0 1 +Neighs: 149356 ave 216864 max 107229 min +Histogram: 2 0 0 0 0 1 0 0 0 1 + +Total # of neighbors = 597424 +Ave neighs/atom = 149.356 +Neighbor list builds = 24 +Dangerous builds = 0 +balance 1.0 shift x 5 1.1 weight time 1.0 # out unweighted.txt +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 3 + time weight factor: 1 + initial/final maximal load/proc = 0.62725559 0.55791509 + initial/final imbalance factor = 1.2472897 1.109407 + x cuts: 0 0.3046875 0.4453125 0.59863281 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 3.806 | 3.927 | 4.211 Mbytes + Step Temp E_pair E_mol TotEng Press + 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 + 550 0.53879347 -6.2554274 0 -5.4474393 -1.9756834 + 600 0.54275982 -6.2616799 0 -5.4477437 -1.9939993 + 650 0.54526651 -6.265098 0 -5.4474027 -2.0303672 + 700 0.54369381 -6.263201 0 -5.4478642 -1.9921967 + 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 +Loop time of 0.542284 on 4 procs for 250 steps with 4000 atoms + +Performance: 199157.784 tau/day, 461.013 timesteps/s, 1.844 Matom-step/s +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.27261 | 0.30921 | 0.36016 | 5.7 | 57.02 +Neigh | 0.067401 | 0.10933 | 0.15726 | 11.2 | 20.16 +Comm | 0.098733 | 0.11963 | 0.17136 | 8.7 | 22.06 +Output | 0.00013971 | 0.00015475 | 0.00017256 | 0.0 | 0.03 +Modify | 0.00098217 | 0.0017424 | 0.0025707 | 1.6 | 0.32 +Other | | 0.002205 | | | 0.41 + +Nlocal: 1000 ave 1553 max 533 min +Histogram: 1 1 0 0 0 0 1 0 0 1 +Nghost: 8745 ave 9835 max 8005 min +Histogram: 2 0 0 0 0 1 0 0 0 1 +Neighs: 149124 ave 181946 max 128563 min +Histogram: 1 0 2 0 0 0 0 0 0 1 + +Total # of neighbors = 596497 +Ave neighs/atom = 149.12425 +Neighbor list builds = 25 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/balance/log.3Nov23.balance.g++.2 b/examples/balance/log.3Nov23.balance.g++.2 new file mode 100644 index 0000000000..8bf03941cd --- /dev/null +++ b/examples/balance/log.3Nov23.balance.g++.2 @@ -0,0 +1,213 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 2d circle of particles inside a box with LJ walls + +variable b index 0 + +variable x index 50 +variable y index 20 +variable d index 20 +variable v index 5 +variable w index 2 + +units lj +dimension 2 +atom_style atomic +boundary f f p + +lattice hex 0.85 +Lattice spacing in x,y,z = 1.1655347 2.0187654 1.1655347 +region box block 0 $x 0 $y -0.5 0.5 +region box block 0 50 0 $y -0.5 0.5 +region box block 0 50 0 20 -0.5 0.5 +create_box 1 box +Created orthogonal box = (0 0 -0.58276737) to (58.276737 40.375308 0.58276737) + 2 by 1 by 1 MPI processor grid +region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 10 +create_atoms 1 region circle +Created 361 atoms + using lattice units in orthogonal box = (0 0 -0.58276737) to (58.276737 40.375308 0.58276737) + create_atoms CPU = 0.001 seconds +mass 1 1.0 + +velocity all create 0.5 87287 loop geom +velocity all set $v $w 0 sum yes +velocity all set 5 $w 0 sum yes +velocity all set 5 2 0 sum yes + +pair_style lj/cut 2.5 +pair_coeff 1 1 10.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve + +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 + +comm_style tiled +fix 10 all balance 50 0.9 rcb + +#compute 1 all property/atom proc +#variable p atom c_1%10 +#dump 2 all custom 50 tmp.dump id v_p x y z + +#dump 3 all image 50 image.*.jpg v_p type # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 +#variable colors string # "red green blue yellow white # purple pink orange lime gray" +#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} + +thermo_style custom step temp epair press f_10[3] f_10 +thermo 100 +timestep 0.001 + +run 10000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 42 29 1 + 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/2d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.061 | 3.066 | 3.071 Mbytes + Step Temp E_pair Press f_10[3] f_10 + 0 25.701528 -29.143179 -1.2407285 2 1.0193906 + 100 25.842512 -29.285247 0.26525204 1.0193906 1.0027701 + 200 26.307268 -29.748808 1.8402984 1.0193906 1.0027701 + 300 26.746717 -30.187064 3.3160966 1.0193906 1.0083102 + 400 26.877952 -30.317954 5.3251792 1.0304709 1.0027701 + 500 26.266471 -29.708192 7.9166641 1.0193906 1.0027701 + 600 26.005495 -29.448014 9.4696736 1.0193906 1.0027701 + 700 26.321835 -29.763442 8.7529756 1.0304709 1.0027701 + 800 26.677822 -30.118375 4.840886 1.0193906 1.0027701 + 900 26.708823 -30.149264 2.8898542 1.0304709 1.0083102 + 1000 26.373337 -29.814704 1.6422658 1.0193906 1.0027701 + 1100 25.893585 -29.335362 0.97146057 1.0304709 1.0027701 + 1200 25.710916 -29.147328 0.80754847 1.0193906 1.0027701 + 1300 25.76291 -29.201881 0.88170364 1.0304709 1.0027701 + 1400 26.080337 -29.52159 1.2169926 1.0304709 1.0083102 + 1500 26.473221 -29.914282 2.3873969 1.0304709 1.0027701 + 1600 26.738055 -30.178413 4.1057361 1.0304709 1.0027701 + 1700 26.589182 -30.030057 6.6930875 1.0304709 1.0083102 + 1800 26.122828 -29.565007 8.897304 1.0304709 1.0027701 + 1900 26.16025 -29.602425 8.4722268 1.0304709 1.0083102 + 2000 26.510754 -29.951778 6.6913672 1.0304709 1.0027701 + 2100 26.732291 -30.172707 4.1328654 1.0193906 1.0083102 + 2200 26.479423 -29.92049 2.3106996 1.0193906 1.0027701 + 2300 26.058035 -29.500247 1.2582222 1.0193906 1.0027701 + 2400 25.732051 -29.175166 0.54231521 1.0304709 1.0083102 + 2500 25.733864 -29.176523 0.66714018 1.0193906 1.0083102 + 2600 25.990734 -29.433139 1.2035223 1.0304709 1.0027701 + 2700 26.383788 -29.82468 2.162696 1.0193906 1.0027701 + 2800 26.679604 -30.120134 3.6992506 1.0193906 1.0083102 + 2900 26.600714 -30.041505 5.7237864 1.0304709 1.0027701 + 3000 26.250766 -29.692594 7.9725502 1.0304709 1.0027701 + 3100 26.121363 -29.563584 8.9373309 1.0193906 1.0027701 + 3200 26.477192 -29.918373 7.1092175 1.0193906 1.0027701 + 3300 26.689536 -30.129977 4.5776139 1.0304709 1.0027701 + 3400 26.586629 -30.026764 2.7417726 1.0304709 1.0027701 + 3500 26.220686 -29.659572 1.6498578 1.0304709 1.0027701 + 3600 25.866231 -29.300814 1.1210814 1.0193906 1.0027701 + 3700 25.659205 -29.142497 0.88115023 1.0193906 1.0027701 + 3800 25.68947 -29.145676 1.4621172 1.0304709 1.0027701 + 3900 25.842813 -29.305171 2.6326543 1.0304709 1.0027701 + 4000 25.919278 -29.470226 4.5283838 1.0304709 1.0027701 + 4100 24.903798 -28.514051 8.027658 1.0304709 1.0027701 + 4200 23.423542 -27.070178 11.619766 1.0304709 1.0083102 + 4300 22.043492 -25.928725 13.445594 1.0304709 1.0083102 + 4400 22.154748 -25.970203 12.572064 1.0304709 1.0027701 + 4500 23.469652 -27.084691 9.6953414 1.0249307 1.0083102 + 4600 23.645224 -27.247805 6.5087935 1.0249307 1.0027701 + 4700 23.449403 -26.921826 3.8388213 1.0249307 1.0027701 + 4800 22.978713 -26.375077 2.2105686 1.0249307 1.0027701 + 4900 22.547461 -25.880668 1.6287577 1.0138504 1.0083102 + 5000 22.34432 -25.632296 1.3146711 1.0304709 1.0083102 + 5100 21.859416 -25.132381 1.4466766 1.0138504 1.0083102 + 5200 21.854255 -25.131546 1.6303448 1.0138504 1.0027701 + 5300 21.425171 -24.876722 2.6133634 1.0027701 1.0027701 + 5400 19.687643 -23.234478 5.4446821 1.0138504 1.0027701 + 5500 18.102224 -21.98985 7.8007647 1.0138504 1.0027701 + 5600 17.402396 -21.218157 8.8854058 1.0138504 1.0027701 + 5700 17.49995 -21.430274 8.8193841 1.0083102 1.0083102 + 5800 18.01284 -21.490424 8.2097589 1.0083102 1.0083102 + 5900 17.565819 -21.169657 7.3645475 1.0027701 1.0027701 + 6000 17.002407 -20.455432 8.0176011 1.0083102 1.0083102 + 6100 17.527412 -20.899213 6.0280989 1.0027701 1.0027701 + 6200 17.068329 -20.522823 5.4665249 1.0027701 1.0027701 + 6300 16.424762 -19.676043 5.1320371 1.0027701 1.0027701 + 6400 16.186199 -19.427212 4.3019107 1.0027701 1.0027701 + 6500 15.691963 -18.890331 3.8910044 1.0027701 1.0027701 + 6600 15.525701 -18.788954 3.5106407 1.0083102 1.0083102 + 6700 15.641437 -18.744896 2.9139189 1.0027701 1.0083102 + 6800 15.656899 -18.774587 2.1876061 1.0138504 1.0027701 + 6900 15.094185 -18.163325 2.3500048 1.0138504 1.0027701 + 7000 14.991269 -18.044483 2.5047107 1.0249307 1.0027701 + 7100 14.727757 -17.740443 2.0066013 1.0138504 1.0027701 + 7200 14.32011 -17.413392 1.5370313 1.0083102 1.0027701 + 7300 14.153835 -17.154266 2.2823938 1.0138504 1.0027701 + 7400 13.644555 -16.662895 2.1522299 1.0083102 1.0083102 + 7500 14.14831 -17.129791 1.5888858 1.0138504 1.0027701 + 7600 13.625238 -16.591406 1.4121129 1.0138504 1.0027701 + 7700 13.471137 -16.441146 1.3192621 1.0193906 1.0083102 + 7800 13.262113 -16.221083 1.516185 1.0083102 1.0027701 + 7900 13.146175 -16.128839 1.6154309 1.0193906 1.0027701 + 8000 13.030735 -15.972746 1.5756469 1.0083102 1.0027701 + 8100 12.742337 -15.790849 1.5660957 1.0138504 1.0027701 + 8200 13.111618 -16.038849 1.4662027 1.0027701 1.0083102 + 8300 12.847359 -15.82086 1.9249118 1.0138504 1.0027701 + 8400 13.136509 -16.066829 1.6715045 1.0138504 1.0027701 + 8500 12.929796 -15.955279 1.1388437 1.0083102 1.0027701 + 8600 13.000263 -15.983556 1.5854841 1.0083102 1.0027701 + 8700 12.524346 -15.443794 1.8406232 1.0083102 1.0027701 + 8800 12.718004 -15.691429 1.4077935 1.0193906 1.0027701 + 8900 12.98278 -15.92931 1.5950893 1.0083102 1.0027701 + 9000 12.444974 -15.506365 1.6085567 1.0249307 1.0027701 + 9100 12.5341 -15.471682 1.6458191 1.0027701 1.0027701 + 9200 12.411742 -15.374927 1.7423964 1.0027701 1.0027701 + 9300 12.613 -15.543866 1.6002664 1.0027701 1.0027701 + 9400 12.315079 -15.231839 1.7207652 1.0138504 1.0027701 + 9500 12.49493 -15.406632 1.5330057 1.0138504 1.0027701 + 9600 12.332602 -15.240282 1.2401605 1.0027701 1.0027701 + 9700 11.894396 -14.794216 1.4072165 1.0083102 1.0027701 + 9800 12.140847 -15.113816 1.6174151 1.0027701 1.0083102 + 9900 12.326936 -15.241095 1.2077951 1.0083102 1.0027701 + 10000 12.212835 -15.106252 1.2704949 1.0083102 1.0027701 +Loop time of 0.177325 on 2 procs for 10000 steps with 361 atoms + +Performance: 4872405.392 tau/day, 56393.581 timesteps/s, 20.358 Matom-step/s +96.7% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.082172 | 0.083041 | 0.08391 | 0.3 | 46.83 +Neigh | 0.025221 | 0.025625 | 0.026029 | 0.3 | 14.45 +Comm | 0.022461 | 0.026564 | 0.030666 | 2.5 | 14.98 +Output | 0.00084416 | 0.00098787 | 0.0011316 | 0.0 | 0.56 +Modify | 0.024707 | 0.025096 | 0.025485 | 0.2 | 14.15 +Other | | 0.01601 | | | 9.03 + +Nlocal: 180.5 ave 181 max 180 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 38 ave 44 max 32 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 1018.5 ave 1032 max 1005 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 2037 +Ave neighs/atom = 5.6426593 +Neighbor list builds = 987 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/balance/log.3Nov23.balance.g++.4 b/examples/balance/log.3Nov23.balance.g++.4 new file mode 100644 index 0000000000..80da296791 --- /dev/null +++ b/examples/balance/log.3Nov23.balance.g++.4 @@ -0,0 +1,213 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 2d circle of particles inside a box with LJ walls + +variable b index 0 + +variable x index 50 +variable y index 20 +variable d index 20 +variable v index 5 +variable w index 2 + +units lj +dimension 2 +atom_style atomic +boundary f f p + +lattice hex 0.85 +Lattice spacing in x,y,z = 1.1655347 2.0187654 1.1655347 +region box block 0 $x 0 $y -0.5 0.5 +region box block 0 50 0 $y -0.5 0.5 +region box block 0 50 0 20 -0.5 0.5 +create_box 1 box +Created orthogonal box = (0 0 -0.58276737) to (58.276737 40.375308 0.58276737) + 2 by 2 by 1 MPI processor grid +region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 $(v_d/2) +region circle sphere 11 6.7735026918962581988 0.0 10 +create_atoms 1 region circle +Created 361 atoms + using lattice units in orthogonal box = (0 0 -0.58276737) to (58.276737 40.375308 0.58276737) + create_atoms CPU = 0.000 seconds +mass 1 1.0 + +velocity all create 0.5 87287 loop geom +velocity all set $v $w 0 sum yes +velocity all set 5 $w 0 sum yes +velocity all set 5 2 0 sum yes + +pair_style lj/cut 2.5 +pair_coeff 1 1 10.0 1.0 2.5 + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve + +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi $x 1 1 2.5 +fix 2 all wall/lj93 xlo 0.0 1 1 2.5 xhi 50 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 1 1 2.5 +fix 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi 20 1 1 2.5 + +comm_style tiled +fix 10 all balance 50 0.9 rcb + +#compute 1 all property/atom proc +#variable p atom c_1%10 +#dump 2 all custom 50 tmp.dump id v_p x y z + +#dump 3 all image 50 image.*.jpg v_p type # adiam 1.0 view 0 0 zoom 1.8 subbox yes 0.02 +#variable colors string # "red green blue yellow white # purple pink orange lime gray" +#dump_modify 3 pad 5 amap 0 10 sa 1 10 ${colors} + +thermo_style custom step temp epair press f_10[3] f_10 +thermo 100 +timestep 0.001 + +run 10000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 2.8 + ghost atom cutoff = 2.8 + binsize = 1.4, bins = 42 29 1 + 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/2d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.042 | 3.048 | 3.06 Mbytes + Step Temp E_pair Press f_10[3] f_10 + 0 25.701528 -29.143179 -1.2407285 3.2354571 1.0526316 + 100 25.842512 -29.285247 0.26525204 1.0526316 1.0083102 + 200 26.307268 -29.748808 1.8402984 1.0526316 1.0083102 + 300 26.746717 -30.187064 3.3160966 1.0526316 1.0083102 + 400 26.877952 -30.317954 5.3251792 1.0526316 1.0083102 + 500 26.266471 -29.708192 7.9166641 1.0526316 1.0304709 + 600 26.005495 -29.448014 9.4696736 1.0526316 1.0083102 + 700 26.321835 -29.763442 8.7529756 1.0526316 1.0193906 + 800 26.677822 -30.118375 4.840886 1.0526316 1.0083102 + 900 26.708823 -30.149264 2.8898542 1.0526316 1.0193906 + 1000 26.373337 -29.814704 1.6422658 1.0526316 1.0083102 + 1100 25.893585 -29.335362 0.97146057 1.0526316 1.0083102 + 1200 25.710916 -29.147328 0.80754847 1.0526316 1.0193906 + 1300 25.76291 -29.201881 0.88170364 1.0858726 1.0193906 + 1400 26.080337 -29.52159 1.2169926 1.0526316 1.0083102 + 1500 26.473221 -29.914282 2.3873969 1.0969529 1.0304709 + 1600 26.738055 -30.178413 4.1057361 1.0526316 1.0083102 + 1700 26.589182 -30.030057 6.6930875 1.0526316 1.0193906 + 1800 26.122828 -29.565007 8.897304 1.0526316 1.0083102 + 1900 26.16025 -29.602425 8.4722268 1.0969529 1.0083102 + 2000 26.510754 -29.951778 6.6913672 1.0969529 1.0083102 + 2100 26.732291 -30.172707 4.1328654 1.0526316 1.0304709 + 2200 26.479423 -29.92049 2.3106996 1.0526316 1.0083102 + 2300 26.058035 -29.500247 1.2582222 1.0526316 1.0193906 + 2400 25.732051 -29.175166 0.54231521 1.0526316 1.0304709 + 2500 25.733864 -29.176523 0.66714018 1.0526316 1.0083102 + 2600 25.990734 -29.433139 1.2035223 1.0526316 1.0083102 + 2700 26.383788 -29.82468 2.162696 1.0526316 1.0083102 + 2800 26.679604 -30.120134 3.6992506 1.0526316 1.0304709 + 2900 26.600714 -30.041505 5.7237864 1.0526316 1.0083102 + 3000 26.250766 -29.692594 7.9725502 1.0526316 1.0083102 + 3100 26.121363 -29.563584 8.9373309 1.0526316 1.0083102 + 3200 26.477192 -29.918373 7.1092175 1.0526316 1.0083102 + 3300 26.689536 -30.129977 4.5776139 1.0969529 1.0304709 + 3400 26.586629 -30.026764 2.7417726 1.0969529 1.0083102 + 3500 26.220686 -29.659572 1.6498578 1.0969529 1.0083102 + 3600 25.866231 -29.300814 1.1210814 1.0526316 1.0304709 + 3700 25.659205 -29.142497 0.88115023 1.0526316 1.0083102 + 3800 25.68947 -29.145676 1.4621172 1.0969529 1.0304709 + 3900 25.842813 -29.305171 2.6326543 1.0969529 1.0083102 + 4000 25.919278 -29.470226 4.5283838 1.0969529 1.0083102 + 4100 24.903798 -28.514051 8.027658 1.0526316 1.0083102 + 4200 23.423542 -27.070178 11.619766 1.0858726 1.0193906 + 4300 22.043492 -25.928725 13.445594 1.0858726 1.0083102 + 4400 22.154748 -25.970203 12.572064 1.0415512 1.0083102 + 4500 23.469652 -27.084691 9.6953414 1.0415512 1.0193906 + 4600 23.645224 -27.247805 6.5087935 1.0526316 1.0083102 + 4700 23.449403 -26.921826 3.8388213 1.0415512 1.0193906 + 4800 22.978713 -26.375077 2.2105686 1.0304709 1.0193906 + 4900 22.547461 -25.880668 1.6287577 1.0415512 1.0193906 + 5000 22.34432 -25.632296 1.3146711 1.0415512 1.0083102 + 5100 21.859416 -25.132381 1.4466766 1.0193906 1.0304709 + 5200 21.854255 -25.131546 1.6303448 1.0193906 1.0083102 + 5300 21.425171 -24.876722 2.6133634 1.0193906 1.0193906 + 5400 19.687643 -23.234478 5.4446821 1.0193906 1.0193906 + 5500 18.102224 -21.98985 7.8007647 1.0193906 1.0083102 + 5600 17.402396 -21.218157 8.8854058 1.0193906 1.0083102 + 5700 17.49995 -21.430274 8.8193838 1.0193906 1.0083102 + 5800 18.012839 -21.490423 8.2097596 1.0083102 1.0083102 + 5900 17.565818 -21.169657 7.3645466 1.0304709 1.0083102 + 6000 17.00239 -20.455416 8.0176192 1.0304709 1.0193906 + 6100 17.527455 -20.899259 6.0280748 1.0193906 1.0083102 + 6200 17.068393 -20.522944 5.4664014 1.0083102 1.0083102 + 6300 16.424576 -19.675908 5.13206 1.0083102 1.0193906 + 6400 16.18682 -19.428005 4.2994462 1.0083102 1.0083102 + 6500 15.692498 -18.890361 3.8912337 1.0193906 1.0083102 + 6600 15.543565 -18.808306 3.4752832 1.0637119 1.0083102 + 6700 15.657432 -18.758221 2.9143187 1.0415512 1.0083102 + 6800 15.730059 -18.834511 2.1741976 1.0193906 1.0083102 + 6900 14.954711 -18.033715 2.4588698 1.0415512 1.0083102 + 7000 15.332203 -18.367577 2.1869698 1.0415512 1.0193906 + 7100 14.54279 -17.554326 2.1617263 1.0304709 1.0193906 + 7200 14.485747 -17.494113 1.362177 1.0193906 1.0193906 + 7300 14.266906 -17.269915 1.6961885 1.0193906 1.0083102 + 7400 13.635947 -16.654801 2.1133026 1.0193906 1.0193906 + 7500 14.029933 -17.022405 1.6716246 1.0193906 1.0083102 + 7600 14.119782 -17.107927 1.516669 1.0304709 1.0083102 + 7700 14.0984 -17.079131 1.6226374 1.0193906 1.0193906 + 7800 13.895083 -16.873848 1.6965546 1.0083102 1.0193906 + 7900 13.55953 -16.536866 1.9893454 1.0193906 1.0083102 + 8000 13.649101 -16.633977 1.4873767 1.0526316 1.0083102 + 8100 13.534848 -16.5239 1.5030254 1.0304709 1.0083102 + 8200 13.039311 -16.021896 1.9003186 1.0083102 1.0083102 + 8300 13.212394 -16.15257 1.6325076 1.0304709 1.0083102 + 8400 12.719582 -15.761108 1.7061831 1.0193906 1.0193906 + 8500 12.954096 -15.962673 1.2631089 1.0193906 1.0193906 + 8600 12.583443 -15.65611 1.3899368 1.0083102 1.0083102 + 8700 12.678764 -15.710348 1.0530056 1.0304709 1.0083102 + 8800 12.740618 -15.660427 1.5864512 1.0193906 1.0083102 + 8900 12.249135 -15.232792 1.624414 1.0304709 1.0193906 + 9000 12.500318 -15.426035 1.1440223 1.0193906 1.0083102 + 9100 12.322373 -15.221333 1.5141173 1.0193906 1.0083102 + 9200 12.259837 -15.16384 1.4848297 1.0193906 1.0083102 + 9300 11.928997 -14.955513 1.3933259 1.0193906 1.0083102 + 9400 12.08076 -14.972026 1.6436388 1.0415512 1.0083102 + 9500 12.059618 -14.952921 1.6617096 1.0083102 1.0304709 + 9600 11.840796 -14.759488 1.6735572 1.0304709 1.0083102 + 9700 11.781829 -14.678411 1.6633417 1.0083102 1.0083102 + 9800 11.947375 -14.931443 1.6695696 1.0083102 1.0193906 + 9900 12.031986 -14.904841 0.97065132 1.0193906 1.0083102 + 10000 11.564772 -14.48025 1.627038 1.0304709 1.0083102 +Loop time of 0.161375 on 4 procs for 10000 steps with 361 atoms + +Performance: 5353997.284 tau/day, 61967.561 timesteps/s, 22.370 Matom-step/s +86.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.04238 | 0.045072 | 0.04897 | 1.3 | 27.93 +Neigh | 0.01265 | 0.013679 | 0.014709 | 0.6 | 8.48 +Comm | 0.043614 | 0.054438 | 0.062719 | 3.0 | 33.73 +Output | 0.00097457 | 0.0010711 | 0.0012879 | 0.4 | 0.66 +Modify | 0.022286 | 0.022773 | 0.023314 | 0.3 | 14.11 +Other | | 0.02434 | | | 15.08 + +Nlocal: 90.25 ave 91 max 89 min +Histogram: 1 0 0 0 0 1 0 0 0 2 +Nghost: 42.75 ave 70 max 26 min +Histogram: 2 0 0 0 1 0 0 0 0 1 +Neighs: 492.5 ave 588 max 427 min +Histogram: 1 0 0 2 0 0 0 0 0 1 + +Total # of neighbors = 1970 +Ave neighs/atom = 5.4570637 +Neighbor list builds = 1087 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/balance/log.3Nov23.balance.group.dynamic.g++.2 b/examples/balance/log.3Nov23.balance.group.dynamic.g++.2 new file mode 100644 index 0000000000..394738d23d --- /dev/null +++ b/examples/balance/log.3Nov23.balance.group.dynamic.g++.2 @@ -0,0 +1,116 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +variable factor index 1.0 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.001 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +group fast type 1 +2600 atoms in group fast +group slow type 2 +1400 atoms in group slow +balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} # out weighted.txt +balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard + rebalancing time: 0.001 seconds + iteration count = 1 + group weights: fast=1 slow=1 + initial/final maximal load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 +fix 0 all balance 10 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} +fix 0 all balance 10 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.434 | 4.625 | 4.816 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 + 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 4738.2137 + 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 4738.2137 + 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 4738.2137 + 200 0.536665 -6.2530113 0 -5.448215 -1.933468 4738.2137 + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 +Loop time of 0.925475 on 2 procs for 250 steps with 4000 atoms + +Performance: 116696.804 tau/day, 270.131 timesteps/s, 1.081 Matom-step/s +99.3% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.49759 | 0.59065 | 0.68371 | 12.1 | 63.82 +Neigh | 0.20391 | 0.21106 | 0.21821 | 1.6 | 22.81 +Comm | 0.016226 | 0.11642 | 0.21661 | 29.4 | 12.58 +Output | 0.00014767 | 0.00016136 | 0.00017504 | 0.0 | 0.02 +Modify | 0.0049562 | 0.0049875 | 0.0050188 | 0.0 | 0.54 +Other | | 0.002194 | | | 0.24 + +Nlocal: 2000 ave 2000 max 2000 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 10441 ave 10457 max 10425 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298332 ave 349156 max 247508 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596664 +Ave neighs/atom = 149.166 +Neighbor list builds = 25 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/balance/log.3Nov23.balance.group.dynamic.g++.4 b/examples/balance/log.3Nov23.balance.group.dynamic.g++.4 new file mode 100644 index 0000000000..07b8dcf49e --- /dev/null +++ b/examples/balance/log.3Nov23.balance.group.dynamic.g++.4 @@ -0,0 +1,116 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +variable factor index 1.0 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 4 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.000 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +group fast type 1 +2600 atoms in group fast +group slow type 2 +1400 atoms in group slow +balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} # out weighted.txt +balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard + rebalancing time: 0.000 seconds + iteration count = 2 + group weights: fast=1 slow=1 + initial/final maximal load/proc = 1200 1200 + initial/final imbalance factor = 1.2 1.2 + x cuts: 0 0.25 0.5 0.6875 1 + y cuts: 0 1 + z cuts: 0 1 +fix 0 all balance 10 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} +fix 0 all balance 10 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 3.567 | 3.949 | 4.33 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 + 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 4738.2137 + 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 4738.2137 + 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 4738.2137 + 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 4738.2137 + 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 +Loop time of 0.805708 on 4 procs for 250 steps with 4000 atoms + +Performance: 134043.547 tau/day, 310.286 timesteps/s, 1.241 Matom-step/s +98.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.14028 | 0.36957 | 0.61955 | 31.5 | 45.87 +Neigh | 0.11839 | 0.13333 | 0.14552 | 3.2 | 16.55 +Comm | 0.034173 | 0.29629 | 0.5404 | 37.3 | 36.77 +Output | 0.00016223 | 0.00017113 | 0.00019287 | 0.0 | 0.02 +Modify | 0.0041243 | 0.0042239 | 0.0043322 | 0.1 | 0.52 +Other | | 0.002124 | | | 0.26 + +Nlocal: 1000 ave 1001 max 999 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Nghost: 8727 ave 8761 max 8674 min +Histogram: 1 0 0 0 0 0 1 1 0 1 +Neighs: 149349 ave 260848 max 51191 min +Histogram: 1 1 0 0 0 0 1 0 0 1 + +Total # of neighbors = 597396 +Ave neighs/atom = 149.349 +Neighbor list builds = 25 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/balance/log.3Nov23.balance.group.static.g++.2 b/examples/balance/log.3Nov23.balance.group.static.g++.2 new file mode 100644 index 0000000000..cc1652afc3 --- /dev/null +++ b/examples/balance/log.3Nov23.balance.group.static.g++.2 @@ -0,0 +1,160 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +variable factor index 1.0 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.001 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +balance 1.0 shift x 5 1.1 # out unweighted.txt +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard + rebalancing time: 0.001 seconds + iteration count = 1 + initial/final maximal load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 + +balance 1.0 x uniform +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 0 + initial/final maximal load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 + +variable weight atom (type==1)*1.0+(type==2)*v_factor +balance 1.0 shift x 5 1.1 weight var weight # out weighted_var.txt +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 1 + weight variable: weight + initial/final maximal load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 + +balance 1.0 x uniform +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 0 + initial/final maximal load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 + +group fast type 1 +2600 atoms in group fast +group slow type 2 +1400 atoms in group slow +balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} # out weighted_group.txt +balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 1 + group weights: fast=1 slow=1 + initial/final maximal load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.294 | 4.485 | 4.675 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 1 -6.9453205 0 -5.4456955 -5.6812358 + 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 + 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 + 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 + 200 0.536665 -6.2530113 0 -5.448215 -1.933468 + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 +Loop time of 1.07049 on 2 procs for 250 steps with 4000 atoms + +Performance: 100888.200 tau/day, 233.537 timesteps/s, 934.150 katom-step/s +99.4% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.55726 | 0.68002 | 0.80278 | 14.9 | 63.52 +Neigh | 0.21838 | 0.23004 | 0.2417 | 2.4 | 21.49 +Comm | 0.01941 | 0.15387 | 0.28832 | 34.3 | 14.37 +Output | 0.00017519 | 0.00021161 | 0.00024802 | 0.0 | 0.02 +Modify | 0.0036966 | 0.0037375 | 0.0037784 | 0.1 | 0.35 +Other | | 0.002623 | | | 0.25 + +Nlocal: 2000 ave 2051 max 1949 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10443 ave 10506 max 10380 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298332 ave 363449 max 233215 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596664 +Ave neighs/atom = 149.166 +Neighbor list builds = 24 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/balance/log.3Nov23.balance.group.static.g++.4 b/examples/balance/log.3Nov23.balance.group.static.g++.4 new file mode 100644 index 0000000000..4d7c77071f --- /dev/null +++ b/examples/balance/log.3Nov23.balance.group.static.g++.4 @@ -0,0 +1,160 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +variable factor index 1.0 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 4 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.000 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +balance 1.0 shift x 5 1.1 # out unweighted.txt +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard + rebalancing time: 0.000 seconds + iteration count = 2 + initial/final maximal load/proc = 1200 1200 + initial/final imbalance factor = 1.2 1.2 + x cuts: 0 0.25 0.5 0.6875 1 + y cuts: 0 1 + z cuts: 0 1 + +balance 1.0 x uniform +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 0 + initial/final maximal load/proc = 1200 1200 + initial/final imbalance factor = 1.2 1.2 + x cuts: 0 0.25 0.5 0.75 1 + y cuts: 0 1 + z cuts: 0 1 + +variable weight atom (type==1)*1.0+(type==2)*v_factor +balance 1.0 shift x 5 1.1 weight var weight # out weighted_var.txt +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 2 + weight variable: weight + initial/final maximal load/proc = 1200 1200 + initial/final imbalance factor = 1.2 1.2 + x cuts: 0 0.25 0.5 0.6875 1 + y cuts: 0 1 + z cuts: 0 1 + +balance 1.0 x uniform +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 0 + initial/final maximal load/proc = 1200 1200 + initial/final imbalance factor = 1.2 1.2 + x cuts: 0 0.25 0.5 0.75 1 + y cuts: 0 1 + z cuts: 0 1 + +group fast type 1 +2600 atoms in group fast +group slow type 2 +1400 atoms in group slow +balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow ${factor} # out weighted_group.txt +balance 1.0 shift x 5 1.1 weight group 2 fast 1.0 slow 1.0 +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 2 + group weights: fast=1 slow=1 + initial/final maximal load/proc = 1200 1200 + initial/final imbalance factor = 1.2 1.2 + x cuts: 0 0.25 0.5 0.6875 1 + y cuts: 0 1 + z cuts: 0 1 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 3.427 | 3.713 | 4.19 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 1 -6.9453205 0 -5.4456955 -5.6812358 + 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 + 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 + 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 + 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 + 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 +Loop time of 0.927365 on 4 procs for 250 steps with 4000 atoms + +Performance: 116459.057 tau/day, 269.581 timesteps/s, 1.078 Matom-step/s +98.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.24625 | 0.41858 | 0.73449 | 30.7 | 45.14 +Neigh | 0.10809 | 0.14016 | 0.16724 | 6.7 | 15.11 +Comm | 0.025406 | 0.36335 | 0.55279 | 34.1 | 39.18 +Output | 0.00017675 | 0.00019894 | 0.00022697 | 0.0 | 0.02 +Modify | 0.0016956 | 0.0023554 | 0.0031138 | 1.1 | 0.25 +Other | | 0.002723 | | | 0.29 + +Nlocal: 1000 ave 1263 max 712 min +Histogram: 1 0 0 0 1 0 1 0 0 1 +Nghost: 8711.5 ave 9045 max 8325 min +Histogram: 1 0 0 0 0 1 1 0 0 1 +Neighs: 149325 ave 275165 max 77227 min +Histogram: 2 0 0 0 1 0 0 0 0 1 + +Total # of neighbors = 597299 +Ave neighs/atom = 149.32475 +Neighbor list builds = 23 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/balance/log.3Nov23.balance.kspace.g++.2 b/examples/balance/log.3Nov23.balance.kspace.g++.2 new file mode 100644 index 0000000000..b7c16fb82a --- /dev/null +++ b/examples/balance/log.3Nov23.balance.kspace.g++.2 @@ -0,0 +1,120 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +#atom_style charge +processors * 1 1 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.001 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type +#set type 1:2 charge 0.0 + +velocity all create 1.0 87287 + +pair_style lj/long/coul/long long off 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +kspace_style pppm/disp 1.0e-4 +kspace_modify gewald/disp 0.1 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +group fast type 1 +2600 atoms in group fast +group slow type 2 +1400 atoms in group slow +fix 0 all balance 20 1.0 shift x 5 1.0 weight group 2 fast 1.0 slow 2.0 weight time 0.66 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 500 +PPPMDisp initialization ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + Dispersion G vector (1/distance)= 0.1 + Dispersion grid = 2 2 2 + Dispersion stencil order = 5 + Dispersion estimated absolute RMS force accuracy = 1.0125082 + Dispersion estimated relative force accuracy = 1.0125082 + using double precision FFTW3 + 3d grid and FFT values/proc = 294 4 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/long/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.847 | 5.016 | 5.184 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 0 1 52.148338 0 53.647963 94.09503 4738.2137 + 50 17.747599 42.836975 0 69.451719 143.44398 4738.2137 + 100 9.0390947 49.78615 0 63.341402 117.79296 4738.2137 + 150 13.456072 47.810527 0 67.989589 140.52068 4738.2137 + 200 11.358932 52.542448 0 69.576586 142.87196 4738.2137 + 250 13.204593 48.601438 0 68.403376 134.97484 4738.2137 + 300 12.062011 50.642183 0 68.730677 133.27085 4738.2137 + 350 14.102561 50.203717 0 71.35227 143.56297 4738.2137 + 400 12.040871 50.230441 0 68.287232 132.11937 4738.2137 + 450 13.381968 51.111601 0 71.179535 144.53303 4738.2137 + 500 12.899157 50.248902 0 69.5928 136.59639 4738.2137 +Loop time of 3.74212 on 2 procs for 500 steps with 4000 atoms + +Performance: 57721.346 tau/day, 133.614 timesteps/s, 534.457 katom-step/s +99.4% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.6146 | 1.7284 | 1.8423 | 8.7 | 46.19 +Kspace | 0.56305 | 0.61569 | 0.66833 | 6.7 | 16.45 +Neigh | 1.2338 | 1.3029 | 1.372 | 6.1 | 34.82 +Comm | 0.059727 | 0.067883 | 0.076039 | 3.1 | 1.81 +Output | 0.00031007 | 0.00033894 | 0.0003678 | 0.0 | 0.01 +Modify | 0.020232 | 0.020653 | 0.021073 | 0.3 | 0.55 +Other | | 0.006259 | | | 0.17 + +Nlocal: 2000 ave 2314 max 1686 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 9546 ave 9663 max 9429 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 254558 ave 277593 max 231523 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 509116 +Ave neighs/atom = 127.279 +Neighbor list builds = 124 +Dangerous builds = 97 +Total wall time: 0:00:03 diff --git a/examples/balance/log.3Nov23.balance.kspace.g++.4 b/examples/balance/log.3Nov23.balance.kspace.g++.4 new file mode 100644 index 0000000000..46e4bbbf94 --- /dev/null +++ b/examples/balance/log.3Nov23.balance.kspace.g++.4 @@ -0,0 +1,120 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +#atom_style charge +processors * 1 1 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 4 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.000 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type +#set type 1:2 charge 0.0 + +velocity all create 1.0 87287 + +pair_style lj/long/coul/long long off 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +kspace_style pppm/disp 1.0e-4 +kspace_modify gewald/disp 0.1 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +group fast type 1 +2600 atoms in group fast +group slow type 2 +1400 atoms in group slow +fix 0 all balance 20 1.0 shift x 5 1.0 weight group 2 fast 1.0 slow 2.0 weight time 0.66 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 500 +PPPMDisp initialization ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + Dispersion G vector (1/distance)= 0.1 + Dispersion grid = 2 2 2 + Dispersion stencil order = 5 + Dispersion estimated absolute RMS force accuracy = 1.0125082 + Dispersion estimated relative force accuracy = 1.0125082 + using double precision FFTW3 + 3d grid and FFT values/proc = 294 4 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/long/coul/long, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.293 | 4.424 | 4.655 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 0 1 52.148338 0 53.647963 94.09503 4738.2137 + 50 17.850656 42.620113 0 69.389403 142.80556 4738.2137 + 100 9.4607189 49.700118 0 63.887649 117.51739 4738.2137 + 150 13.992056 47.731988 0 68.714825 140.56926 4738.2137 + 200 11.617635 52.509395 0 69.931491 142.6933 4738.2137 + 250 13.536262 48.330072 0 68.629389 133.91619 4738.2137 + 300 12.620066 50.328874 0 69.25424 132.46908 4738.2137 + 350 14.514428 50.102816 0 71.869016 143.37224 4738.2137 + 400 12.348652 49.810405 0 68.328752 130.3274 4738.2137 + 450 13.800185 50.987433 0 71.682536 144.38181 4738.2137 + 500 13.255019 50.64398 0 70.521538 138.24387 4738.2137 +Loop time of 3.81152 on 4 procs for 500 steps with 4000 atoms + +Performance: 56670.269 tau/day, 131.181 timesteps/s, 524.725 katom-step/s +98.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.55832 | 1.1319 | 1.6826 | 48.2 | 29.70 +Kspace | 0.40554 | 1.6212 | 2.7162 | 80.5 | 42.53 +Neigh | 0.25726 | 0.85075 | 1.6088 | 63.7 | 22.32 +Comm | 0.079895 | 0.17554 | 0.24986 | 17.5 | 4.61 +Output | 0.00035922 | 0.00041828 | 0.00044719 | 0.0 | 0.01 +Modify | 0.02199 | 0.024073 | 0.026861 | 1.3 | 0.63 +Other | | 0.007582 | | | 0.20 + +Nlocal: 1000 ave 1995 max 227 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 7601 ave 9326 max 5900 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Neighs: 127284 ave 212972 max 45553 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 509136 +Ave neighs/atom = 127.284 +Neighbor list builds = 124 +Dangerous builds = 97 +Total wall time: 0:00:03 diff --git a/examples/balance/log.3Nov23.balance.neigh.dynamic.g++.2 b/examples/balance/log.3Nov23.balance.neigh.dynamic.g++.2 new file mode 100644 index 0000000000..58ff4bea6a --- /dev/null +++ b/examples/balance/log.3Nov23.balance.neigh.dynamic.g++.2 @@ -0,0 +1,235 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.001 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes +fix p all property/atom d_WEIGHT +fix 0 all balance 50 1.0 shift x 5 1.0 weight neigh 0.8 weight store WEIGHT +compute p all property/atom d_WEIGHT +variable maximb equal f_0[1] +variable iter equal f_0[2] +variable prev equal f_0[3] +variable final equal f_0 + +#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" + +fix 1 all nve + +#dump id all atom 50 dump.melt +#dump id all custom 50 dump.lammpstrj id type x y z c_p + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mp4 c_p type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 amap 0.0 2.0 cf 0.1 3 min blue 0.5 green max red + +thermo 50 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard +WARNING: Balance weight neigh skipped b/c no suitable list found (src/imbalance_neigh.cpp:65) +Per MPI rank memory allocation (min/avg/max) = 4.559 | 4.75 | 4.941 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 + 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 4738.2137 + 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 4738.2137 + 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 4738.2137 + 200 0.536665 -6.2530113 0 -5.448215 -1.933468 4738.2137 + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 + 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 4738.2137 + 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 4738.2137 + 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 4738.2137 + 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 4738.2137 + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 +Loop time of 2.06018 on 2 procs for 500 steps with 4000 atoms + +Performance: 104845.132 tau/day, 242.697 timesteps/s, 970.788 katom-step/s +99.6% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.2219 | 1.3634 | 1.505 | 12.1 | 66.18 +Neigh | 0.49695 | 0.4983 | 0.49965 | 0.2 | 24.19 +Comm | 0.041095 | 0.18389 | 0.32669 | 33.3 | 8.93 +Output | 0.00032321 | 0.00035487 | 0.00038653 | 0.0 | 0.02 +Modify | 0.0084967 | 0.0087312 | 0.0089658 | 0.3 | 0.42 +Other | | 0.005469 | | | 0.27 + +Nlocal: 2000 ave 2056 max 1944 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10457.5 ave 10508 max 10407 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298070 ave 333007 max 263132 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596139 +Ave neighs/atom = 149.03475 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.571 | 4.758 | 4.945 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 + 550 0.54137926 -6.2592773 0 -5.4474115 -1.9770236 4738.2137 + 600 0.54022886 -6.2573307 0 -5.44719 -1.9619637 4738.2137 + 650 0.54709009 -6.2678862 0 -5.4474562 -1.9958342 4738.2137 + 700 0.54590044 -6.2656903 0 -5.4470444 -1.9957108 4738.2137 + 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 4738.2137 + 800 0.5520987 -6.2739184 0 -5.4459774 -2.0084991 4738.2137 + 850 0.54963958 -6.2702473 0 -5.445994 -1.9740031 4738.2137 + 900 0.54390586 -6.2615476 0 -5.4458927 -1.9400871 4738.2137 + 950 0.54741732 -6.2665755 0 -5.4456548 -1.9466417 4738.2137 + 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 +Loop time of 2.04735 on 2 procs for 500 steps with 4000 atoms + +Performance: 105502.372 tau/day, 244.218 timesteps/s, 976.874 katom-step/s +99.5% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.2217 | 1.3603 | 1.4989 | 11.9 | 66.44 +Neigh | 0.49705 | 0.49793 | 0.49882 | 0.1 | 24.32 +Comm | 0.036988 | 0.17466 | 0.31233 | 32.9 | 8.53 +Output | 0.00031921 | 0.00035316 | 0.00038711 | 0.0 | 0.02 +Modify | 0.0084606 | 0.0086808 | 0.0089009 | 0.2 | 0.42 +Other | | 0.005397 | | | 0.26 + +Nlocal: 2000 ave 2049 max 1951 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10389 ave 10436 max 10342 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 300836 ave 335987 max 265684 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 601671 +Ave neighs/atom = 150.41775 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.571 | 4.758 | 4.945 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 + 1050 0.54633412 -6.2656384 0 -5.4463421 -1.9012895 4738.2137 + 1100 0.54325667 -6.2612166 0 -5.4465353 -1.8870463 4738.2137 + 1150 0.55057583 -6.2719187 0 -5.4462614 -1.9575881 4738.2137 + 1200 0.53728175 -6.251744 0 -5.4460228 -1.8124097 4738.2137 + 1250 0.54077561 -6.2567544 0 -5.4457938 -1.8418134 4738.2137 + 1300 0.54430333 -6.260995 0 -5.4447442 -1.856351 4738.2137 + 1350 0.55097839 -6.2715909 0 -5.4453299 -1.9014337 4738.2137 + 1400 0.53858139 -6.2526781 0 -5.445008 -1.7965773 4738.2137 + 1450 0.5421844 -6.2574683 0 -5.444395 -1.7901189 4738.2137 + 1500 0.54200617 -6.2571433 0 -5.4443373 -1.8000344 4738.2137 +Loop time of 2.06014 on 2 procs for 500 steps with 4000 atoms + +Performance: 104847.028 tau/day, 242.701 timesteps/s, 970.806 katom-step/s +99.3% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.2169 | 1.3632 | 1.5094 | 12.5 | 66.17 +Neigh | 0.49211 | 0.49613 | 0.50014 | 0.6 | 24.08 +Comm | 0.03623 | 0.18643 | 0.33662 | 34.8 | 9.05 +Output | 0.00030992 | 0.00034406 | 0.00037821 | 0.0 | 0.02 +Modify | 0.0085349 | 0.0086823 | 0.0088298 | 0.2 | 0.42 +Other | | 0.005411 | | | 0.26 + +Nlocal: 2000 ave 2034 max 1966 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10386 ave 10936 max 9836 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 302958 ave 337188 max 268729 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 605917 +Ave neighs/atom = 151.47925 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.571 | 4.758 | 4.945 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 1500 0.54200617 -6.2571433 0 -5.4443373 -1.8000344 4738.2137 + 1550 0.53713593 -6.2504069 0 -5.4449044 -1.764709 4738.2137 + 1600 0.54679556 -6.2646482 0 -5.4446599 -1.8115775 4738.2137 + 1650 0.53806577 -6.2519006 0 -5.4450037 -1.7409142 4738.2137 + 1700 0.5347951 -6.2468962 0 -5.4449041 -1.7162331 4738.2137 + 1750 0.53714568 -6.2506577 0 -5.4451406 -1.7340499 4738.2137 + 1800 0.52749839 -6.2358664 0 -5.4448167 -1.6874961 4738.2137 + 1850 0.54585956 -6.2629394 0 -5.4443547 -1.7758764 4738.2137 + 1900 0.53010831 -6.2387561 0 -5.4437925 -1.6381825 4738.2137 + 1950 0.54288557 -6.2583073 0 -5.4441826 -1.7368524 4738.2137 + 2000 0.52765923 -6.2348572 0 -5.4435663 -1.5588839 4738.2137 +Loop time of 2.11629 on 2 procs for 500 steps with 4000 atoms + +Performance: 102065.604 tau/day, 236.263 timesteps/s, 945.052 katom-step/s +99.5% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.2677 | 1.4112 | 1.5546 | 12.1 | 66.68 +Neigh | 0.50555 | 0.50815 | 0.51076 | 0.4 | 24.01 +Comm | 0.036017 | 0.18186 | 0.3277 | 34.2 | 8.59 +Output | 0.00034146 | 0.00036996 | 0.00039846 | 0.0 | 0.02 +Modify | 0.0089519 | 0.0090956 | 0.0092392 | 0.2 | 0.43 +Other | | 0.005624 | | | 0.27 + +Nlocal: 2000 ave 2031 max 1969 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10334 ave 10921 max 9747 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 303988 ave 338808 max 269168 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 607976 +Ave neighs/atom = 151.994 +Neighbor list builds = 51 +Dangerous builds = 0 + +Total wall time: 0:00:08 diff --git a/examples/balance/log.3Nov23.balance.neigh.dynamic.g++.4 b/examples/balance/log.3Nov23.balance.neigh.dynamic.g++.4 new file mode 100644 index 0000000000..c232f64447 --- /dev/null +++ b/examples/balance/log.3Nov23.balance.neigh.dynamic.g++.4 @@ -0,0 +1,235 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 4 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.000 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes +fix p all property/atom d_WEIGHT +fix 0 all balance 50 1.0 shift x 5 1.0 weight neigh 0.8 weight store WEIGHT +compute p all property/atom d_WEIGHT +variable maximb equal f_0[1] +variable iter equal f_0[2] +variable prev equal f_0[3] +variable final equal f_0 + +#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" + +fix 1 all nve + +#dump id all atom 50 dump.melt +#dump id all custom 50 dump.lammpstrj id type x y z c_p + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mp4 c_p type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 amap 0.0 2.0 cf 0.1 3 min blue 0.5 green max red + +thermo 50 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard +WARNING: Balance weight neigh skipped b/c no suitable list found (src/imbalance_neigh.cpp:65) +Per MPI rank memory allocation (min/avg/max) = 3.692 | 4.073 | 4.455 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 + 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 4738.2137 + 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 4738.2137 + 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 4738.2137 + 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 4738.2137 + 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 + 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 4738.2137 + 350 0.55600296 -6.2801497 0 -5.4463538 -2.0394056 4738.2137 + 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 4738.2137 + 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 4738.2137 + 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 +Loop time of 1.55023 on 4 procs for 500 steps with 4000 atoms + +Performance: 139333.812 tau/day, 322.532 timesteps/s, 1.290 Matom-step/s +98.7% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.71992 | 0.87383 | 0.98696 | 11.0 | 56.37 +Neigh | 0.21071 | 0.30874 | 0.44041 | 17.8 | 19.92 +Comm | 0.32187 | 0.35451 | 0.38467 | 4.4 | 22.87 +Output | 0.00037371 | 0.00042 | 0.00044758 | 0.0 | 0.03 +Modify | 0.0049391 | 0.0063638 | 0.0082893 | 1.8 | 0.41 +Other | | 0.006361 | | | 0.41 + +Nlocal: 1000 ave 1549 max 605 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Nghost: 8755 ave 9851 max 8071 min +Histogram: 2 0 0 0 0 1 0 0 0 1 +Neighs: 149308 ave 164554 max 128538 min +Histogram: 1 0 0 1 0 0 0 0 0 2 + +Total # of neighbors = 597231 +Ave neighs/atom = 149.30775 +Neighbor list builds = 50 +Dangerous builds = 0 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.099 | 4.288 | 4.477 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 + 550 0.53879347 -6.2554274 0 -5.4474393 -1.9756834 4738.2137 + 600 0.54275982 -6.2616799 0 -5.4477437 -1.9939993 4738.2137 + 650 0.54526651 -6.265098 0 -5.4474027 -2.0303672 4738.2137 + 700 0.54369381 -6.263201 0 -5.4478642 -1.9921967 4738.2137 + 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 4738.2137 + 800 0.55061744 -6.2725556 0 -5.4468359 -2.0100922 4738.2137 + 850 0.55371614 -6.2763992 0 -5.4460326 -2.0065329 4738.2137 + 900 0.54756622 -6.2668303 0 -5.4456863 -1.9796122 4738.2137 + 950 0.54791593 -6.2673161 0 -5.4456477 -1.9598278 4738.2137 + 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 +Loop time of 1.67278 on 4 procs for 500 steps with 4000 atoms + +Performance: 129126.174 tau/day, 298.903 timesteps/s, 1.196 Matom-step/s +99.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.84049 | 0.96125 | 1.0434 | 8.0 | 57.46 +Neigh | 0.23438 | 0.35614 | 0.5167 | 20.4 | 21.29 +Comm | 0.28073 | 0.34108 | 0.41025 | 9.1 | 20.39 +Output | 0.00039366 | 0.00043302 | 0.00046464 | 0.0 | 0.03 +Modify | 0.0050479 | 0.006849 | 0.0091921 | 2.2 | 0.41 +Other | | 0.007028 | | | 0.42 + +Nlocal: 1000 ave 1569 max 595 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Nghost: 8715.25 ave 9779 max 8018 min +Histogram: 2 0 0 0 0 1 0 0 0 1 +Neighs: 150170 ave 163282 max 132114 min +Histogram: 1 0 0 1 0 0 0 0 0 2 + +Total # of neighbors = 600678 +Ave neighs/atom = 150.1695 +Neighbor list builds = 53 +Dangerous builds = 0 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.099 | 4.288 | 4.477 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 + 1050 0.54629742 -6.2657526 0 -5.4465113 -1.945821 4738.2137 + 1100 0.55427881 -6.2781733 0 -5.446963 -2.0021027 4738.2137 + 1150 0.54730654 -6.267257 0 -5.4465025 -1.9420678 4738.2137 + 1200 0.5388281 -6.2547963 0 -5.4467562 -1.890178 4738.2137 + 1250 0.54848768 -6.2694237 0 -5.4468979 -1.9636797 4738.2137 + 1300 0.54134321 -6.2590728 0 -5.447261 -1.9170271 4738.2137 + 1350 0.53564389 -6.2501521 0 -5.4468871 -1.8642306 4738.2137 + 1400 0.53726924 -6.2518379 0 -5.4461355 -1.8544028 4738.2137 + 1450 0.54525935 -6.2632653 0 -5.4455808 -1.9072158 4738.2137 + 1500 0.54223346 -6.2591057 0 -5.4459588 -1.8866985 4738.2137 +Loop time of 1.66639 on 4 procs for 500 steps with 4000 atoms + +Performance: 129621.198 tau/day, 300.049 timesteps/s, 1.200 Matom-step/s +99.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.8486 | 0.96611 | 1.1004 | 9.8 | 57.98 +Neigh | 0.22624 | 0.34016 | 0.49564 | 19.9 | 20.41 +Comm | 0.3065 | 0.34614 | 0.41937 | 7.4 | 20.77 +Output | 0.00040364 | 0.00043928 | 0.00051275 | 0.0 | 0.03 +Modify | 0.0049921 | 0.0067008 | 0.008971 | 2.1 | 0.40 +Other | | 0.00684 | | | 0.41 + +Nlocal: 1000 ave 1543 max 605 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Nghost: 8704.5 ave 9803 max 7983 min +Histogram: 2 0 0 0 0 1 0 0 0 1 +Neighs: 150494 ave 166334 max 129306 min +Histogram: 1 0 0 1 0 0 0 0 0 2 + +Total # of neighbors = 601974 +Ave neighs/atom = 150.4935 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.099 | 4.288 | 4.477 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 1500 0.54223346 -6.2591057 0 -5.4459588 -1.8866985 4738.2137 + 1550 0.55327018 -6.2750126 0 -5.4453148 -1.9506585 4738.2137 + 1600 0.54419004 -6.2612622 0 -5.4451812 -1.8559437 4738.2137 + 1650 0.54710034 -6.2661938 0 -5.4457484 -1.8882763 4738.2137 + 1700 0.53665691 -6.2504958 0 -5.4457117 -1.8068009 4738.2137 + 1750 0.5486471 -6.2681127 0 -5.4453478 -1.8662656 4738.2137 + 1800 0.54476222 -6.2615086 0 -5.4445695 -1.8352838 4738.2137 + 1850 0.54143048 -6.2555517 0 -5.443609 -1.8005726 4738.2137 + 1900 0.53992511 -6.254136 0 -5.4444508 -1.7768715 4738.2137 + 1950 0.54665895 -6.2640958 0 -5.4443124 -1.7946993 4738.2137 + 2000 0.5455751 -6.2625337 0 -5.4443756 -1.8072242 4738.2137 +Loop time of 1.69092 on 4 procs for 500 steps with 4000 atoms + +Performance: 127741.463 tau/day, 295.698 timesteps/s, 1.183 Matom-step/s +99.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.85108 | 0.9612 | 1.0789 | 9.0 | 56.85 +Neigh | 0.2452 | 0.37468 | 0.5456 | 20.7 | 22.16 +Comm | 0.27839 | 0.34103 | 0.42333 | 9.0 | 20.17 +Output | 0.00038835 | 0.00042678 | 0.00046578 | 0.0 | 0.03 +Modify | 0.0049259 | 0.0067032 | 0.0090783 | 2.2 | 0.40 +Other | | 0.006874 | | | 0.41 + +Nlocal: 1000 ave 1539 max 607 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Nghost: 8677 ave 9837 max 7981 min +Histogram: 2 0 0 0 1 0 0 0 0 1 +Neighs: 151655 ave 168263 max 129443 min +Histogram: 1 0 0 1 0 0 0 0 0 2 + +Total # of neighbors = 606619 +Ave neighs/atom = 151.65475 +Neighbor list builds = 56 +Dangerous builds = 0 + +Total wall time: 0:00:06 diff --git a/examples/balance/log.3Nov23.balance.neigh.rcb.g++.2 b/examples/balance/log.3Nov23.balance.neigh.rcb.g++.2 new file mode 100644 index 0000000000..0bbfe645ba --- /dev/null +++ b/examples/balance/log.3Nov23.balance.neigh.rcb.g++.2 @@ -0,0 +1,146 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.001 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +comm_style tiled + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes +fix p all property/atom d_WEIGHT +fix 0 all balance 50 1.0 rcb weight neigh 0.8 weight store WEIGHT +compute p all property/atom d_WEIGHT +variable maximb equal f_0[1] +variable iter equal f_0[2] +variable prev equal f_0[3] +variable final equal f_0 + +#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" + +fix 1 all nve + +#dump id all atom 50 dump.melt +#dump id all custom 50 dump.lammpstrj id type x y z c_p + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 + +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard +WARNING: Balance weight neigh skipped b/c no suitable list found (src/imbalance_neigh.cpp:65) +Per MPI rank memory allocation (min/avg/max) = 4.138 | 4.329 | 4.52 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 + 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 4738.2137 + 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 4738.2137 + 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 4738.2137 + 200 0.536665 -6.2530113 0 -5.448215 -1.933468 4738.2137 + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 +Loop time of 0.963489 on 2 procs for 250 steps with 4000 atoms + +Performance: 112092.660 tau/day, 259.474 timesteps/s, 1.038 Matom-step/s +97.7% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.64566 | 0.66162 | 0.67758 | 2.0 | 68.67 +Neigh | 0.23969 | 0.24019 | 0.24069 | 0.1 | 24.93 +Comm | 0.037375 | 0.052867 | 0.068358 | 6.7 | 5.49 +Output | 0.0001635 | 0.00017861 | 0.00019372 | 0.0 | 0.02 +Modify | 0.0055964 | 0.0056409 | 0.0056853 | 0.1 | 0.59 +Other | | 0.002991 | | | 0.31 + +Nlocal: 2000 ave 2000 max 2000 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 10412.5 ave 10414 max 10411 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298332 ave 299797 max 296867 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596664 +Ave neighs/atom = 149.166 +Neighbor list builds = 25 +Dangerous builds = 0 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.932 | 4.933 | 4.933 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 + 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 4738.2137 + 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 4738.2137 + 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 4738.2137 + 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 4738.2137 + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 +Loop time of 0.986357 on 2 procs for 250 steps with 4000 atoms + +Performance: 109493.776 tau/day, 253.458 timesteps/s, 1.014 Matom-step/s +99.4% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.68342 | 0.68352 | 0.68362 | 0.0 | 69.30 +Neigh | 0.25726 | 0.25795 | 0.25864 | 0.1 | 26.15 +Comm | 0.035415 | 0.036212 | 0.037009 | 0.4 | 3.67 +Output | 0.00016727 | 0.00018288 | 0.00019849 | 0.0 | 0.02 +Modify | 0.0054242 | 0.005429 | 0.0054338 | 0.0 | 0.55 +Other | | 0.003066 | | | 0.31 + +Nlocal: 2000 ave 2000 max 2000 min +Histogram: 2 0 0 0 0 0 0 0 0 0 +Nghost: 10466.5 ave 10470 max 10463 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298070 ave 349236 max 246903 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596139 +Ave neighs/atom = 149.03475 +Neighbor list builds = 26 +Dangerous builds = 0 + +Total wall time: 0:00:02 diff --git a/examples/balance/log.3Nov23.balance.neigh.rcb.g++.4 b/examples/balance/log.3Nov23.balance.neigh.rcb.g++.4 new file mode 100644 index 0000000000..5a31737dc5 --- /dev/null +++ b/examples/balance/log.3Nov23.balance.neigh.rcb.g++.4 @@ -0,0 +1,146 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 4 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.000 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +comm_style tiled + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes +fix p all property/atom d_WEIGHT +fix 0 all balance 50 1.0 rcb weight neigh 0.8 weight store WEIGHT +compute p all property/atom d_WEIGHT +variable maximb equal f_0[1] +variable iter equal f_0[2] +variable prev equal f_0[3] +variable final equal f_0 + +#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" + +fix 1 all nve + +#dump id all atom 50 dump.melt +#dump id all custom 50 dump.lammpstrj id type x y z c_p + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 + +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard +WARNING: Balance weight neigh skipped b/c no suitable list found (src/imbalance_neigh.cpp:65) +Per MPI rank memory allocation (min/avg/max) = 3.91 | 3.917 | 3.922 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 + 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 4738.2137 + 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 4738.2137 + 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 4738.2137 + 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 4738.2137 + 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 +Loop time of 0.645151 on 4 procs for 250 steps with 4000 atoms + +Performance: 167402.554 tau/day, 387.506 timesteps/s, 1.550 Matom-step/s +91.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.3352 | 0.38659 | 0.42758 | 6.0 | 59.92 +Neigh | 0.13107 | 0.13776 | 0.14056 | 1.0 | 21.35 +Comm | 0.063456 | 0.11053 | 0.16553 | 12.0 | 17.13 +Output | 0.00016405 | 0.0001788 | 0.00020664 | 0.0 | 0.03 +Modify | 0.0040404 | 0.0040928 | 0.0041638 | 0.1 | 0.63 +Other | | 0.005999 | | | 0.93 + +Nlocal: 1000 ave 1005 max 996 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 7674 ave 7679 max 7670 min +Histogram: 1 1 0 0 0 0 1 0 0 1 +Neighs: 149349 ave 149991 max 147960 min +Histogram: 1 0 0 0 0 0 0 1 0 2 + +Total # of neighbors = 597396 +Ave neighs/atom = 149.349 +Neighbor list builds = 25 +Dangerous builds = 0 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 3.924 | 4.007 | 4.081 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 + 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 4738.2137 + 350 0.55600296 -6.2801497 0 -5.4463538 -2.0394056 4738.2137 + 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 4738.2137 + 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 4738.2137 + 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 +Loop time of 0.747007 on 4 procs for 250 steps with 4000 atoms + +Performance: 144577.053 tau/day, 334.669 timesteps/s, 1.339 Matom-step/s +92.4% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.42386 | 0.45917 | 0.50489 | 4.3 | 61.47 +Neigh | 0.1603 | 0.16404 | 0.17229 | 1.2 | 21.96 +Comm | 0.062076 | 0.11618 | 0.1553 | 10.0 | 15.55 +Output | 0.00016524 | 0.00018611 | 0.00022092 | 0.0 | 0.02 +Modify | 0.0041562 | 0.0042306 | 0.0043824 | 0.1 | 0.57 +Other | | 0.003202 | | | 0.43 + +Nlocal: 1000 ave 1005 max 994 min +Histogram: 1 0 0 1 0 0 0 0 1 1 +Nghost: 7675.75 ave 7703 max 7648 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +Neighs: 149308 ave 173909 max 124842 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 597231 +Ave neighs/atom = 149.30775 +Neighbor list builds = 25 +Dangerous builds = 0 + +Total wall time: 0:00:01 diff --git a/examples/balance/log.3Nov23.balance.neigh.static.g++.2 b/examples/balance/log.3Nov23.balance.neigh.static.g++.2 new file mode 100644 index 0000000000..cbf49f60a3 --- /dev/null +++ b/examples/balance/log.3Nov23.balance.neigh.static.g++.2 @@ -0,0 +1,229 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +variable factor index 1.0 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.001 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +balance 1.0 shift x 10 1.0 weight neigh 0.8 # out weighted_var.txt +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard +WARNING: Balance weight neigh skipped b/c no suitable list found (src/imbalance_neigh.cpp:65) + rebalancing time: 0.001 seconds + iteration count = 1 + neighbor weight factor: 0.8 + initial/final maximal load/proc = 2000 2000 + initial/final imbalance factor = 1 1 + x cuts: 0 0.5 1 + y cuts: 0 1 + z cuts: 0 1 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 250 post no +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.294 | 4.485 | 4.675 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 1 -6.9453205 0 -5.4456955 -5.6812358 + 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 + 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 + 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 + 200 0.536665 -6.2530113 0 -5.448215 -1.933468 + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 +Loop time of 1.05477 on 2 procs for 250 steps with 4000 atoms + +balance 1.0 shift x 10 1.0 weight neigh 0.8 +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 10 + neighbor weight factor: 0.8 + initial/final maximal load/proc = 290759.2 262122.75 + initial/final imbalance factor = 1.1098226 1.0005178 + x cuts: 0 0.45166016 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 post no +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.305 | 4.492 | 4.68 Mbytes + Step Temp E_pair E_mol TotEng Press + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 + 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 + 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 + 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 + 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 +Loop time of 0.990985 on 2 procs for 250 steps with 4000 atoms + +balance 1.0 shift x 10 1.0 weight neigh 0.8 +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 10 + neighbor weight factor: 0.8 + initial/final maximal load/proc = 296648 269015.55 + initial/final imbalance factor = 1.1064199 1.0033581 + x cuts: 0 0.50146055 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 post no +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.68 | 4.683 | 4.687 Mbytes + Step Temp E_pair E_mol TotEng Press + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 + 550 0.54137926 -6.2592773 0 -5.4474115 -1.9770236 + 600 0.54022886 -6.2573307 0 -5.44719 -1.9619637 + 650 0.54709009 -6.2678862 0 -5.4474562 -1.9958342 + 700 0.54590044 -6.2656903 0 -5.4470444 -1.9957108 + 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 +Loop time of 1.1232 on 2 procs for 250 steps with 4000 atoms + +balance 1.0 shift x 10 1.0 weight neigh 0.8 weight time 0.6 +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 10 + neighbor weight factor: 0.8 + time weight factor: 0.6 + initial/final maximal load/proc = 104.46537 103.82382 + initial/final imbalance factor = 1.0069898 1.0008056 + x cuts: 0 0.50292112 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.68 | 4.683 | 4.687 Mbytes + Step Temp E_pair E_mol TotEng Press + 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 + 800 0.5520987 -6.2739184 0 -5.4459774 -2.0084991 + 850 0.54963958 -6.2702473 0 -5.445994 -1.9740031 + 900 0.54390586 -6.2615476 0 -5.4458927 -1.9400871 + 950 0.54741732 -6.2665755 0 -5.4456548 -1.9466417 + 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 +Loop time of 1.15642 on 2 procs for 250 steps with 4000 atoms + +Performance: 93391.614 tau/day, 216.184 timesteps/s, 864.737 katom-step/s +99.4% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.52315 | 0.69442 | 0.86569 | 20.6 | 60.05 +Neigh | 0.22259 | 0.24411 | 0.26564 | 4.4 | 21.11 +Comm | 0.018326 | 0.21127 | 0.40421 | 42.0 | 18.27 +Output | 0.00016238 | 0.00017728 | 0.00019218 | 0.0 | 0.02 +Modify | 0.0035271 | 0.0037599 | 0.0039926 | 0.4 | 0.33 +Other | | 0.002682 | | | 0.23 + +Nlocal: 2000 ave 2089 max 1911 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10407.5 ave 10557 max 10258 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 300836 ave 374828 max 226843 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 601671 +Ave neighs/atom = 150.41775 +Neighbor list builds = 25 +Dangerous builds = 0 +balance 1.0 shift x 10 1.0 weight neigh 0.8 weight time 0.6 +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 10 + neighbor weight factor: 0.8 + time weight factor: 0.6 + initial/final maximal load/proc = 106.04939 103.43902 + initial/final imbalance factor = 1.027399 1.0021098 + x cuts: 0 0.49751864 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.68 | 4.683 | 4.687 Mbytes + Step Temp E_pair E_mol TotEng Press + 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 + 1050 0.54633412 -6.2656384 0 -5.4463421 -1.9012895 + 1100 0.54325667 -6.2612166 0 -5.4465353 -1.8870463 + 1150 0.55057583 -6.2719187 0 -5.4462614 -1.9575881 + 1200 0.53728175 -6.251744 0 -5.4460228 -1.8124097 + 1250 0.54077561 -6.2567544 0 -5.4457938 -1.8418134 +Loop time of 1.11479 on 2 procs for 250 steps with 4000 atoms + +Performance: 96878.885 tau/day, 224.257 timesteps/s, 897.027 katom-step/s +99.3% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.56649 | 0.69611 | 0.82573 | 15.5 | 62.44 +Neigh | 0.22969 | 0.24504 | 0.26039 | 3.1 | 21.98 +Comm | 0.021834 | 0.1669 | 0.31197 | 35.5 | 14.97 +Output | 0.00016211 | 0.00017676 | 0.00019141 | 0.0 | 0.02 +Modify | 0.0037327 | 0.0038431 | 0.0039535 | 0.2 | 0.34 +Other | | 0.002725 | | | 0.24 + +Nlocal: 2000 ave 2037 max 1963 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10391 ave 10488 max 10294 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 301104 ave 358020 max 244187 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 602207 +Ave neighs/atom = 150.55175 +Neighbor list builds = 25 +Dangerous builds = 0 + +Total wall time: 0:00:05 diff --git a/examples/balance/log.3Nov23.balance.neigh.static.g++.4 b/examples/balance/log.3Nov23.balance.neigh.static.g++.4 new file mode 100644 index 0000000000..bdefb0fe26 --- /dev/null +++ b/examples/balance/log.3Nov23.balance.neigh.static.g++.4 @@ -0,0 +1,229 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +variable factor index 1.0 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 4 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.000 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +balance 1.0 shift x 10 1.0 weight neigh 0.8 # out weighted_var.txt +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard +WARNING: Balance weight neigh skipped b/c no suitable list found (src/imbalance_neigh.cpp:65) + rebalancing time: 0.000 seconds + iteration count = 3 + neighbor weight factor: 0.8 + initial/final maximal load/proc = 1200 1000 + initial/final imbalance factor = 1.2 1 + x cuts: 0 0.25 0.5 0.71875 1 + y cuts: 0 1 + z cuts: 0 1 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 250 post no +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 3.427 | 3.803 | 4.19 Mbytes + Step Temp E_pair E_mol TotEng Press + 0 1 -6.9453205 0 -5.4456955 -5.6812358 + 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 + 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 + 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 + 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 + 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 +Loop time of 0.924459 on 4 procs for 250 steps with 4000 atoms + +balance 1.0 shift x 10 1.0 weight neigh 0.8 +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 10 + neighbor weight factor: 0.8 + initial/final maximal load/proc = 220132 125739.5 + initial/final imbalance factor = 1.7583309 1.0043594 + x cuts: 0 0.30444336 0.45092773 0.62667847 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 post no +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 3.816 | 4 | 4.194 Mbytes + Step Temp E_pair E_mol TotEng Press + 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 + 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 + 350 0.55600296 -6.2801497 0 -5.4463538 -2.0394056 + 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 + 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 + 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 +Loop time of 0.82011 on 4 procs for 250 steps with 4000 atoms + +balance 1.0 shift x 10 1.0 weight neigh 0.8 +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 10 + neighbor weight factor: 0.8 + initial/final maximal load/proc = 147108.8 128929.14 + initial/final imbalance factor = 1.1448665 1.0033843 + x cuts: 0 0.30487251 0.44992638 0.59526989 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 post no +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 3.833 | 4.019 | 4.211 Mbytes + Step Temp E_pair E_mol TotEng Press + 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 + 550 0.53879347 -6.2554274 0 -5.4474393 -1.9756834 + 600 0.54275982 -6.2616799 0 -5.4477437 -1.9939993 + 650 0.54526651 -6.265098 0 -5.4474027 -2.0303672 + 700 0.54369381 -6.263201 0 -5.4478642 -1.9921967 + 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 +Loop time of 0.806894 on 4 procs for 250 steps with 4000 atoms + +balance 1.0 shift x 10 1.0 weight neigh 0.8 weight time 0.6 +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 10 + neighbor weight factor: 0.8 + time weight factor: 0.6 + initial/final maximal load/proc = 91.655582 81.113803 + initial/final imbalance factor = 1.1338813 1.0034678 + x cuts: 0 0.31096364 0.44921811 0.58717948 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 3.834 | 4.019 | 4.211 Mbytes + Step Temp E_pair E_mol TotEng Press + 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 + 800 0.55061744 -6.2725556 0 -5.4468359 -2.0100922 + 850 0.55371614 -6.2763992 0 -5.4460326 -2.0065329 + 900 0.54756622 -6.2668303 0 -5.4456863 -1.9796122 + 950 0.54791593 -6.2673161 0 -5.4456477 -1.9598278 + 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 +Loop time of 0.838671 on 4 procs for 250 steps with 4000 atoms + +Performance: 128775.136 tau/day, 298.091 timesteps/s, 1.192 Matom-step/s +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.4301 | 0.47576 | 0.50889 | 4.2 | 56.73 +Neigh | 0.095175 | 0.16382 | 0.25893 | 17.5 | 19.53 +Comm | 0.06374 | 0.19306 | 0.30768 | 22.3 | 23.02 +Output | 0.00018141 | 0.0002071 | 0.00022587 | 0.0 | 0.02 +Modify | 0.0013564 | 0.0025114 | 0.0040356 | 2.3 | 0.30 +Other | | 0.00331 | | | 0.39 + +Nlocal: 1000 ave 1657 max 525 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Nghost: 8683.75 ave 9705 max 8021 min +Histogram: 2 0 0 0 0 1 0 0 0 1 +Neighs: 150170 ave 156480 max 144602 min +Histogram: 1 0 1 0 0 0 1 0 0 1 + +Total # of neighbors = 600681 +Ave neighs/atom = 150.17025 +Neighbor list builds = 25 +Dangerous builds = 0 +balance 1.0 shift x 10 1.0 weight neigh 0.8 weight time 0.6 +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 10 + neighbor weight factor: 0.8 + time weight factor: 0.6 + initial/final maximal load/proc = 87.14477 84.253431 + initial/final imbalance factor = 1.045158 1.0104811 + x cuts: 0 0.31514908 0.45070011 0.58569747 1 + y cuts: 0 1 + z cuts: 0 1 +run 250 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 3.834 | 4.019 | 4.211 Mbytes + Step Temp E_pair E_mol TotEng Press + 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 + 1050 0.54629742 -6.2657526 0 -5.4465113 -1.945821 + 1100 0.55427881 -6.2781733 0 -5.446963 -2.0021027 + 1150 0.54730654 -6.267257 0 -5.4465025 -1.9420678 + 1200 0.5388281 -6.2547963 0 -5.4467562 -1.890178 + 1250 0.54848768 -6.2694237 0 -5.4468979 -1.9636797 +Loop time of 0.836673 on 4 procs for 250 steps with 4000 atoms + +Performance: 129082.737 tau/day, 298.803 timesteps/s, 1.195 Matom-step/s +98.8% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.41798 | 0.47099 | 0.51203 | 5.9 | 56.29 +Neigh | 0.092957 | 0.16434 | 0.26021 | 18.1 | 19.64 +Comm | 0.060396 | 0.19529 | 0.32014 | 25.6 | 23.34 +Output | 0.00018905 | 0.00020907 | 0.00022197 | 0.0 | 0.02 +Modify | 0.0013271 | 0.0025202 | 0.0041052 | 2.4 | 0.30 +Other | | 0.003317 | | | 0.40 + +Nlocal: 1000 ave 1646 max 498 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 8671.25 ave 9741 max 7981 min +Histogram: 2 0 0 0 0 1 0 0 0 1 +Neighs: 149995 ave 165511 max 135174 min +Histogram: 1 0 1 0 0 0 0 1 0 1 + +Total # of neighbors = 599979 +Ave neighs/atom = 149.99475 +Neighbor list builds = 25 +Dangerous builds = 0 + +Total wall time: 0:00:04 diff --git a/examples/balance/log.3Nov23.balance.var.dynamic.g++.2 b/examples/balance/log.3Nov23.balance.var.dynamic.g++.2 new file mode 100644 index 0000000000..2bb94e335f --- /dev/null +++ b/examples/balance/log.3Nov23.balance.var.dynamic.g++.2 @@ -0,0 +1,268 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 2 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.001 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes +fix p all property/atom d_WEIGHT +compute p all property/atom d_WEIGHT + +group fast type 1 +2600 atoms in group fast +group slow type 2 +1400 atoms in group slow +balance 1.0 shift x 10 1.0 weight group 2 fast 0.8 slow 2.5 weight store WEIGHT +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard + rebalancing time: 0.001 seconds + iteration count = 10 + group weights: fast=0.8 slow=2.5 + storing weight in atom property d_WEIGHT + initial/final maximal load/proc = 2960 3120 + initial/final imbalance factor = 1.0609319 1.1182796 + x cuts: 0 0.44970703 1 + y cuts: 0 1 + z cuts: 0 1 +variable lastweight atom c_p + +fix 0 all balance 50 1.0 shift x 10 1.0 weight var lastweight weight time 0.5 weight store WEIGHT +variable maximb equal f_0[1] +variable iter equal f_0[2] +variable prev equal f_0[3] +variable final equal f_0 + +#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" + +fix 1 all nve + +#dump id all atom 50 dump.melt +#dump id all custom 50 dump.lammpstrj id type x y z c_p + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.709 | 4.878 | 5.046 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 + 50 0.49578514 -6.1929216 0 -5.4494298 -1.6668039 4738.2137 + 100 0.53275389 -6.2475932 0 -5.4486622 -1.9063885 4738.2137 + 150 0.53316457 -6.2483202 0 -5.4487733 -1.9476162 4738.2137 + 200 0.536665 -6.2530113 0 -5.448215 -1.933468 4738.2137 + 250 0.55006273 -6.27163 0 -5.4467422 -2.0438847 4738.2137 + 300 0.55111476 -6.2727642 0 -5.4462987 -2.0384873 4738.2137 + 350 0.55211503 -6.274054 0 -5.4460885 -2.0116976 4738.2137 + 400 0.54638463 -6.2661715 0 -5.4467995 -1.992248 4738.2137 + 450 0.55885307 -6.2852263 0 -5.4471563 -2.0669747 4738.2137 + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 +Loop time of 2.63649 on 2 procs for 500 steps with 4000 atoms + +Performance: 81926.988 tau/day, 189.646 timesteps/s, 758.583 katom-step/s +99.0% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.71463 | 1.3382 | 1.9618 | 53.9 | 50.76 +Neigh | 0.37719 | 0.49388 | 0.61056 | 16.6 | 18.73 +Comm | 0.047367 | 0.78842 | 1.5295 | 83.5 | 29.90 +Output | 0.00033203 | 0.00036767 | 0.0004033 | 0.0 | 0.01 +Modify | 0.0083865 | 0.0094362 | 0.010486 | 1.1 | 0.36 +Other | | 0.006199 | | | 0.24 + +Nlocal: 2000 ave 2603 max 1397 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10434 ave 11430 max 9438 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 298070 ave 500187 max 95952 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 596139 +Ave neighs/atom = 149.03475 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 5.094 | 5.463 | 5.832 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 500 0.54587069 -6.2662849 0 -5.4476836 -2.0078802 4738.2137 + 550 0.54137926 -6.2592773 0 -5.4474115 -1.9770236 4738.2137 + 600 0.54022886 -6.2573307 0 -5.44719 -1.9619637 4738.2137 + 650 0.54709009 -6.2678862 0 -5.4474562 -1.9958342 4738.2137 + 700 0.54590044 -6.2656903 0 -5.4470444 -1.9957108 4738.2137 + 750 0.55098488 -6.2724831 0 -5.4462124 -2.0287523 4738.2137 + 800 0.5520987 -6.2739184 0 -5.4459774 -2.0084991 4738.2137 + 850 0.54963958 -6.2702473 0 -5.445994 -1.9740031 4738.2137 + 900 0.54390586 -6.2615476 0 -5.4458927 -1.9400871 4738.2137 + 950 0.54741732 -6.2665755 0 -5.4456548 -1.9466417 4738.2137 + 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 +Loop time of 3.17842 on 2 procs for 500 steps with 4000 atoms + +Performance: 67958.372 tau/day, 157.311 timesteps/s, 629.244 katom-step/s +98.1% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.37522 | 1.3792 | 2.3831 | 85.5 | 43.39 +Neigh | 0.27684 | 0.50251 | 0.72818 | 31.8 | 15.81 +Comm | 0.046802 | 1.2782 | 2.5097 | 108.9 | 40.22 +Output | 0.00037247 | 0.00037744 | 0.00038242 | 0.0 | 0.01 +Modify | 0.0074902 | 0.010381 | 0.013273 | 2.8 | 0.33 +Other | | 0.007739 | | | 0.24 + +Nlocal: 2000 ave 2773 max 1227 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10234 ave 11398 max 9070 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 300836 ave 527715 max 73956 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 601671 +Ave neighs/atom = 150.41775 +Neighbor list builds = 51 +Dangerous builds = 0 + +balance 1.0 shift x 10 1.0 weight group 2 fast 0.8 slow 2.5 weight store WEIGHT +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 10 + group weights: fast=0.8 slow=2.5 + storing weight in atom property d_WEIGHT + initial/final maximal load/proc = 4598.4 2803.1 + initial/final imbalance factor = 1.648172 1.0046953 + x cuts: 0 0.45499213 1 + y cuts: 0 1 + z cuts: 0 1 + +fix 0 all balance 50 1.0 shift x 5 1.0 weight var lastweight weight neigh 0.5 weight store WEIGHT + +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 5.483 | 5.66 | 5.837 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 1000 0.54200867 -6.2591246 0 -5.4463148 -1.8881624 4738.2137 + 1050 0.54633412 -6.2656384 0 -5.4463421 -1.9012895 4738.2137 + 1100 0.54325667 -6.2612166 0 -5.4465353 -1.8870463 4738.2137 + 1150 0.55057583 -6.2719187 0 -5.4462614 -1.9575881 4738.2137 + 1200 0.53728175 -6.251744 0 -5.4460228 -1.8124097 4738.2137 + 1250 0.54077561 -6.2567544 0 -5.4457938 -1.8418134 4738.2137 + 1300 0.54430333 -6.260995 0 -5.4447442 -1.856351 4738.2137 + 1350 0.55097839 -6.2715909 0 -5.4453299 -1.9014337 4738.2137 + 1400 0.53858139 -6.2526781 0 -5.445008 -1.7965773 4738.2137 + 1450 0.54218439 -6.2574683 0 -5.444395 -1.7901189 4738.2137 + 1500 0.54200616 -6.2571433 0 -5.4443373 -1.8000345 4738.2137 +Loop time of 3.02969 on 2 procs for 500 steps with 4000 atoms + +Performance: 71294.507 tau/day, 165.034 timesteps/s, 660.134 katom-step/s +98.7% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.5714 | 1.3936 | 2.2158 | 69.6 | 46.00 +Neigh | 0.2744 | 0.51127 | 0.74814 | 33.1 | 16.88 +Comm | 0.046434 | 1.1076 | 2.1688 | 100.8 | 36.56 +Output | 0.00031672 | 0.00037175 | 0.00042678 | 0.0 | 0.01 +Modify | 0.0066955 | 0.0094869 | 0.012278 | 2.9 | 0.31 +Other | | 0.007313 | | | 0.24 + +Nlocal: 2000 ave 3014 max 986 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10343 ave 12125 max 8561 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 302958 ave 519610 max 86307 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 605917 +Ave neighs/atom = 151.47925 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 5.864 | 5.882 | 5.899 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 1500 0.54200616 -6.2571433 0 -5.4443373 -1.8000345 4738.2137 + 1550 0.5371361 -6.2504031 0 -5.4449003 -1.7647032 4738.2137 + 1600 0.54679571 -6.2646443 0 -5.4446558 -1.8115722 4738.2137 + 1650 0.53806589 -6.2519009 0 -5.4450038 -1.740915 4738.2137 + 1700 0.53479448 -6.2469033 0 -5.4449122 -1.7162445 4738.2137 + 1750 0.53714069 -6.2506511 0 -5.4451415 -1.734019 4738.2137 + 1800 0.52750498 -6.2358815 0 -5.4448219 -1.6875349 4738.2137 + 1850 0.54585338 -6.2629367 0 -5.4443613 -1.7758582 4738.2137 + 1900 0.53011122 -6.2387673 0 -5.4437993 -1.6382079 4738.2137 + 1950 0.5428773 -6.2583146 0 -5.4442022 -1.7367714 4738.2137 + 2000 0.52771538 -6.2349676 0 -5.4435924 -1.5594006 4738.2137 +Loop time of 3.18739 on 2 procs for 500 steps with 4000 atoms + +Performance: 67767.083 tau/day, 156.868 timesteps/s, 627.473 katom-step/s +98.5% CPU use with 2 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.39584 | 1.3793 | 2.3628 | 83.7 | 43.27 +Neigh | 0.21951 | 0.48818 | 0.75684 | 38.5 | 15.32 +Comm | 0.047346 | 1.3021 | 2.5568 | 110.0 | 40.85 +Output | 0.00031641 | 0.00037624 | 0.00043608 | 0.0 | 0.01 +Modify | 0.0061382 | 0.0096203 | 0.013102 | 3.6 | 0.30 +Other | | 0.007838 | | | 0.25 + +Nlocal: 2000 ave 3033 max 967 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Nghost: 10266 ave 12244 max 8288 min +Histogram: 1 0 0 0 0 0 0 0 0 1 +Neighs: 303996 ave 525260 max 82733 min +Histogram: 1 0 0 0 0 0 0 0 0 1 + +Total # of neighbors = 607993 +Ave neighs/atom = 151.99825 +Neighbor list builds = 51 +Dangerous builds = 0 +Total wall time: 0:00:12 diff --git a/examples/balance/log.3Nov23.balance.var.dynamic.g++.4 b/examples/balance/log.3Nov23.balance.var.dynamic.g++.4 new file mode 100644 index 0000000000..8ab61a6eca --- /dev/null +++ b/examples/balance/log.3Nov23.balance.var.dynamic.g++.4 @@ -0,0 +1,268 @@ +LAMMPS (3 Aug 2023 - Development - patch_2Aug2023-790-g0fbe388cbd) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +# 3d Lennard-Jones melt + +units lj +atom_style atomic +processors * 1 1 + +lattice fcc 0.8442 +Lattice spacing in x,y,z = 1.6795962 1.6795962 1.6795962 +region box block 0 10 0 10 0 10 +create_box 3 box +Created orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + 4 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 4000 atoms + using lattice units in orthogonal box = (0 0 0) to (16.795962 16.795962 16.795962) + create_atoms CPU = 0.000 seconds +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +Setting atom values ... + 1400 settings made for type + +velocity all create 1.0 87287 + +pair_style lj/cut 2.5 +pair_coeff * * 1.0 1.0 2.5 +pair_coeff * 2 1.0 1.0 5.0 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes +fix p all property/atom d_WEIGHT +compute p all property/atom d_WEIGHT + +group fast type 1 +2600 atoms in group fast +group slow type 2 +1400 atoms in group slow +balance 1.0 shift x 10 1.0 weight group 2 fast 0.8 slow 2.5 weight store WEIGHT +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 2 steps, delay = 4 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.3 + ghost atom cutoff = 5.3 + binsize = 2.65, bins = 7 7 7 + 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 + bin: standard + rebalancing time: 0.001 seconds + iteration count = 10 + group weights: fast=0.8 slow=2.5 + storing weight in atom property d_WEIGHT + initial/final maximal load/proc = 2160 1620 + initial/final imbalance factor = 1.5483871 1.1612903 + x cuts: 0 0.30004883 0.44995117 0.59985352 1 + y cuts: 0 1 + z cuts: 0 1 +variable lastweight atom c_p + +fix 0 all balance 50 1.0 shift x 10 1.0 weight var lastweight weight time 0.5 weight store WEIGHT +variable maximb equal f_0[1] +variable iter equal f_0[2] +variable prev equal f_0[3] +variable final equal f_0 + +#fix 3 all print 50 "${iter} ${prev} ${final} ${maximb}" + +fix 1 all nve + +#dump id all atom 50 dump.melt +#dump id all custom 50 dump.lammpstrj id type x y z c_p + +#dump 2 all image 25 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type # axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +thermo 50 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.134 | 4.194 | 4.276 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 0 1 -6.9453205 0 -5.4456955 -5.6812358 4738.2137 + 50 0.48653399 -6.1788509 0 -5.4492324 -1.6017778 4738.2137 + 100 0.53411175 -6.249885 0 -5.4489177 -1.9317606 4738.2137 + 150 0.53646658 -6.2527206 0 -5.4482219 -1.9689568 4738.2137 + 200 0.54551611 -6.2656326 0 -5.4475631 -2.0042104 4738.2137 + 250 0.54677719 -6.2671162 0 -5.4471555 -2.0015995 4738.2137 + 300 0.5477618 -6.2678071 0 -5.4463698 -1.997842 4738.2137 + 350 0.55600296 -6.2801497 0 -5.4463538 -2.0394056 4738.2137 + 400 0.53241503 -6.2453665 0 -5.4469436 -1.878594 4738.2137 + 450 0.5439158 -6.2623 0 -5.4466302 -1.9744161 4738.2137 + 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 +Loop time of 1.75963 on 4 procs for 500 steps with 4000 atoms + +Performance: 122752.823 tau/day, 284.150 timesteps/s, 1.137 Matom-step/s +98.7% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.68268 | 0.90239 | 1.1178 | 21.1 | 51.28 +Neigh | 0.14555 | 0.31884 | 0.53079 | 30.7 | 18.12 +Comm | 0.1258 | 0.52379 | 0.91801 | 51.5 | 29.77 +Output | 0.00034604 | 0.00041026 | 0.00047658 | 0.0 | 0.02 +Modify | 0.004958 | 0.0071987 | 0.010065 | 2.7 | 0.41 +Other | | 0.007007 | | | 0.40 + +Nlocal: 1000 ave 1818 max 353 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 8752 ave 10126 max 7737 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Neighs: 149308 ave 201250 max 96144 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 597231 +Ave neighs/atom = 149.30775 +Neighbor list builds = 50 +Dangerous builds = 0 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.136 | 4.388 | 4.665 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 500 0.55526241 -6.2793396 0 -5.4466542 -2.0595015 4738.2137 + 550 0.53879347 -6.2554274 0 -5.4474393 -1.9756834 4738.2137 + 600 0.54275982 -6.2616799 0 -5.4477437 -1.9939993 4738.2137 + 650 0.54526651 -6.265098 0 -5.4474027 -2.0303672 4738.2137 + 700 0.54369381 -6.263201 0 -5.4478642 -1.9921967 4738.2137 + 750 0.54452777 -6.2640839 0 -5.4474964 -1.9658675 4738.2137 + 800 0.55061744 -6.2725556 0 -5.4468359 -2.0100922 4738.2137 + 850 0.55371614 -6.2763992 0 -5.4460326 -2.0065329 4738.2137 + 900 0.54756622 -6.2668303 0 -5.4456863 -1.9796122 4738.2137 + 950 0.54791593 -6.2673161 0 -5.4456477 -1.9598278 4738.2137 + 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 +Loop time of 2.16561 on 4 procs for 500 steps with 4000 atoms + +Performance: 99740.900 tau/day, 230.882 timesteps/s, 923.527 katom-step/s +98.6% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.50258 | 0.94516 | 1.4087 | 45.5 | 43.64 +Neigh | 0.11215 | 0.35365 | 0.65108 | 40.8 | 16.33 +Comm | 0.087035 | 0.85049 | 1.5351 | 74.3 | 39.27 +Output | 0.00038778 | 0.00044723 | 0.00047387 | 0.0 | 0.02 +Modify | 0.0047248 | 0.0077357 | 0.011417 | 3.4 | 0.36 +Other | | 0.008132 | | | 0.38 + +Nlocal: 1000 ave 1913 max 271 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 8713.25 ave 10520 max 7313 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Neighs: 150170 ave 225174 max 74461 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 600678 +Ave neighs/atom = 150.1695 +Neighbor list builds = 53 +Dangerous builds = 0 + +balance 1.0 shift x 10 1.0 weight group 2 fast 0.8 slow 2.5 weight store WEIGHT +Balancing ... +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule + rebalancing time: 0.000 seconds + iteration count = 10 + group weights: fast=0.8 slow=2.5 + storing weight in atom property d_WEIGHT + initial/final maximal load/proc = 2263.1 1415 + initial/final imbalance factor = 1.6222939 1.0143369 + x cuts: 0 0.33693529 0.45444001 0.59634919 1 + y cuts: 0 1 + z cuts: 0 1 + +fix 0 all balance 50 1.0 shift x 5 1.0 weight var lastweight weight neigh 0.5 weight store WEIGHT + +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.136 | 4.391 | 4.67 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 1000 0.54173198 -6.2586101 0 -5.4462153 -1.9007466 4738.2137 + 1050 0.54629742 -6.2657526 0 -5.4465113 -1.945821 4738.2137 + 1100 0.55427881 -6.2781733 0 -5.446963 -2.0021027 4738.2137 + 1150 0.54730654 -6.267257 0 -5.4465025 -1.9420678 4738.2137 + 1200 0.5388281 -6.2547963 0 -5.4467562 -1.890178 4738.2137 + 1250 0.54848768 -6.2694237 0 -5.4468979 -1.9636797 4738.2137 + 1300 0.54134321 -6.2590728 0 -5.447261 -1.917027 4738.2137 + 1350 0.53564389 -6.2501521 0 -5.4468871 -1.8642306 4738.2137 + 1400 0.53726925 -6.2518379 0 -5.4461355 -1.8544028 4738.2137 + 1450 0.54525929 -6.2632653 0 -5.4455808 -1.9072158 4738.2137 + 1500 0.5422334 -6.2591056 0 -5.4459588 -1.8866983 4738.2137 +Loop time of 2.13466 on 4 procs for 500 steps with 4000 atoms + +Performance: 101187.057 tau/day, 234.229 timesteps/s, 936.917 katom-step/s +98.5% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.51842 | 0.95273 | 1.4498 | 43.3 | 44.63 +Neigh | 0.10961 | 0.34434 | 0.60309 | 39.3 | 16.13 +Comm | 0.12298 | 0.82248 | 1.494 | 71.8 | 38.53 +Output | 0.00035703 | 0.00041491 | 0.00044876 | 0.0 | 0.02 +Modify | 0.0041412 | 0.0071285 | 0.010464 | 3.4 | 0.33 +Other | | 0.007562 | | | 0.35 + +Nlocal: 1000 ave 1957 max 197 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Nghost: 8729 ave 10470 max 7399 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Neighs: 150494 ave 251670 max 54014 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 601974 +Ave neighs/atom = 150.4935 +Neighbor list builds = 51 +Dangerous builds = 0 +run 500 +Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule +Per MPI rank memory allocation (min/avg/max) = 4.138 | 4.391 | 4.67 Mbytes + Step Temp E_pair E_mol TotEng Press Volume + 1500 0.5422334 -6.2591056 0 -5.4459588 -1.8866983 4738.2137 + 1550 0.55327047 -6.2750129 0 -5.4453147 -1.9506601 4738.2137 + 1600 0.54419057 -6.2612631 0 -5.4451813 -1.8559469 4738.2137 + 1650 0.5471001 -6.2661978 0 -5.4457528 -1.888283 4738.2137 + 1700 0.53665427 -6.250492 0 -5.4457118 -1.8067906 4738.2137 + 1750 0.54864956 -6.26812 0 -5.4453514 -1.8662931 4738.2137 + 1800 0.54476992 -6.2615116 0 -5.444561 -1.8353034 4738.2137 + 1850 0.54143122 -6.255562 0 -5.4436182 -1.8005828 4738.2137 + 1900 0.539946 -6.2541877 0 -5.4444712 -1.7770616 4738.2137 + 1950 0.54665381 -6.2641025 0 -5.4443268 -1.7946294 4738.2137 + 2000 0.54548936 -6.2623904 0 -5.4443609 -1.8063359 4738.2137 +Loop time of 2.41945 on 4 procs for 500 steps with 4000 atoms + +Performance: 89276.563 tau/day, 206.659 timesteps/s, 826.635 katom-step/s +98.2% CPU use with 4 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.27258 | 0.93844 | 1.5963 | 67.8 | 38.79 +Neigh | 0.066471 | 0.37001 | 0.71699 | 50.0 | 15.29 +Comm | 0.087137 | 1.095 | 2.0664 | 92.0 | 45.26 +Output | 0.00036093 | 0.00042589 | 0.00046706 | 0.0 | 0.02 +Modify | 0.0037164 | 0.0072792 | 0.011595 | 4.2 | 0.30 +Other | | 0.008293 | | | 0.34 + +Nlocal: 1000 ave 2047 max 120 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Nghost: 8721.75 ave 10454 max 7446 min +Histogram: 2 0 0 0 0 0 1 0 0 1 +Neighs: 151641 ave 268854 max 34056 min +Histogram: 2 0 0 0 0 0 0 0 0 2 + +Total # of neighbors = 606565 +Ave neighs/atom = 151.64125 +Neighbor list builds = 56 +Dangerous builds = 0 +Total wall time: 0:00:08 From 3d3b07f0d410f3f553125d0b7ffa0a5f31eea07a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 3 Nov 2023 22:39:42 -0400 Subject: [PATCH 115/204] consolidate nb3b pair style docs --- doc/src/Commands_pair.rst | 4 ++-- doc/src/{pair_nb3b_harmonic.rst => pair_nb3b.rst} | 0 doc/src/pair_style.rst | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) rename doc/src/{pair_nb3b_harmonic.rst => pair_nb3b.rst} (100%) diff --git a/doc/src/Commands_pair.rst b/doc/src/Commands_pair.rst index 1b98bbad47..828f0b10d9 100644 --- a/doc/src/Commands_pair.rst +++ b/doc/src/Commands_pair.rst @@ -220,8 +220,8 @@ OPT. * :doc:`morse/soft ` * :doc:`multi/lucy ` * :doc:`multi/lucy/rx (k) ` - * :doc:`nb3b/harmonic ` - * :doc:`nb3b/screened ` + * :doc:`nb3b/harmonic ` + * :doc:`nb3b/screened ` * :doc:`nm/cut (o) ` * :doc:`nm/cut/coul/cut (o) ` * :doc:`nm/cut/coul/long (o) ` diff --git a/doc/src/pair_nb3b_harmonic.rst b/doc/src/pair_nb3b.rst similarity index 100% rename from doc/src/pair_nb3b_harmonic.rst rename to doc/src/pair_nb3b.rst diff --git a/doc/src/pair_style.rst b/doc/src/pair_style.rst index 9c3a65514a..a2467bff2b 100644 --- a/doc/src/pair_style.rst +++ b/doc/src/pair_style.rst @@ -297,8 +297,8 @@ accelerated styles exist. * :doc:`morse/soft ` - Morse potential with a soft core * :doc:`multi/lucy ` - DPD potential with density-dependent force * :doc:`multi/lucy/rx ` - reactive DPD potential with density-dependent force -* :doc:`nb3b/harmonic ` - non-bonded 3-body harmonic potential -* :doc:`nb3b/screened ` - non-bonded 3-body screened harmonic potential +* :doc:`nb3b/harmonic ` - non-bonded 3-body harmonic potential +* :doc:`nb3b/screened ` - non-bonded 3-body screened harmonic potential * :doc:`nm/cut ` - N-M potential * :doc:`nm/cut/coul/cut ` - N-M potential with cutoff Coulomb * :doc:`nm/cut/coul/long ` - N-M potential with long-range Coulomb From 17640f54d2a43a71f4bd8bdc5e333575afec5548 Mon Sep 17 00:00:00 2001 From: Jacob Gissinger Date: Sat, 4 Nov 2023 17:53:19 -0400 Subject: [PATCH 116/204] reset warnflag for each run --- src/fix_deposit.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/fix_deposit.cpp b/src/fix_deposit.cpp index 6dea4a0932..4a9c5aa9da 100644 --- a/src/fix_deposit.cpp +++ b/src/fix_deposit.cpp @@ -232,6 +232,8 @@ int FixDeposit::setmask() void FixDeposit::init() { + warnflag = 1; + // set index and check validity of region iregion = domain->get_region_by_id(idregion); From 6fef7871e8dd1639140fd1cba41fc7c27fae8be0 Mon Sep 17 00:00:00 2001 From: yury-lysogorskiy Date: Tue, 7 Nov 2023 16:46:47 +0100 Subject: [PATCH 117/204] Update pair_pace_extrapolation.cpp BUGFIX: pair_pace_extrapolation: setup flag aceimpl->ace->compute_projections = true before computing extrapolation grade --- src/ML-PACE/pair_pace_extrapolation.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ML-PACE/pair_pace_extrapolation.cpp b/src/ML-PACE/pair_pace_extrapolation.cpp index 8a0116526a..dc0fb1848b 100644 --- a/src/ML-PACE/pair_pace_extrapolation.cpp +++ b/src/ML-PACE/pair_pace_extrapolation.cpp @@ -202,8 +202,10 @@ void PairPACEExtrapolation::compute(int eflag, int vflag) // jnum(0) = 50 // jlist(neigh ind of 0-atom) = [1,2,10,7,99,25, .. 50 element in total] try { - if (flag_compute_extrapolation_grade) + if (flag_compute_extrapolation_grade) { + aceimpl->ace->compute_projections = true; aceimpl->ace->compute_atom(i, x, type, jnum, jlist); + } else aceimpl->rec_ace->compute_atom(i, x, type, jnum, jlist); } catch (std::exception &e) { From 46768d0ff3dd2a201afb4d78400d92b6d467b8a2 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Mon, 6 Nov 2023 23:18:42 -0700 Subject: [PATCH 118/204] Correctly build argv with nullptr at the end --- src/angle_write.cpp | 8 +- src/dihedral_write.cpp | 8 +- src/lammps.cpp | 23 +++++ src/lammps.h | 6 ++ unittest/c-library/test_library_commands.cpp | 5 +- unittest/c-library/test_library_config.cpp | 5 +- unittest/c-library/test_library_external.cpp | 8 +- unittest/c-library/test_library_mpi.cpp | 20 ++-- unittest/c-library/test_library_open.cpp | 20 ++-- .../c-library/test_library_properties.cpp | 13 +-- .../c-library/test_library_scatter_gather.cpp | 5 +- unittest/commands/test_mpi_load_balancing.cpp | 6 +- unittest/cplusplus/test_input_class.cpp | 15 ++- unittest/cplusplus/test_lammps_class.cpp | 52 +++++------ unittest/force-styles/test_angle_style.cpp | 44 +++------ unittest/force-styles/test_bond_style.cpp | 44 +++------ unittest/force-styles/test_dihedral_style.cpp | 32 +++---- unittest/force-styles/test_fix_timestep.cpp | 30 +++--- unittest/force-styles/test_improper_style.cpp | 30 +++--- unittest/force-styles/test_pair_style.cpp | 92 +++++++------------ unittest/fortran/wrap_extract_variable.cpp | 4 +- unittest/testing/core.h | 20 +--- 22 files changed, 207 insertions(+), 283 deletions(-) diff --git a/src/angle_write.cpp b/src/angle_write.cpp index e64c2f23c8..fb0e65ccf5 100644 --- a/src/angle_write.cpp +++ b/src/angle_write.cpp @@ -123,11 +123,9 @@ void AngleWrite::command(int narg, char **arg) if (comm->me == 0) { // set up new LAMMPS instance with dummy system to evaluate angle potential - const char *args[] = {"AngleWrite", "-nocite", "-echo", "none", - "-log", "none", "-screen", "none"}; - char **argv = (char **) args; - int argc = sizeof(args) / sizeof(char *); - LAMMPS *writer = new LAMMPS(argc, argv, singlecomm); + LAMMPS::argv args = {"AngleWrite", "-nocite", "-echo", "none", + "-log", "none", "-screen", "none"}; + LAMMPS *writer = new LAMMPS(args, singlecomm); // create dummy system replicating angle style settings writer->input->one(fmt::format("units {}", update->unit_style)); diff --git a/src/dihedral_write.cpp b/src/dihedral_write.cpp index 285d9cf931..3d87591bcc 100644 --- a/src/dihedral_write.cpp +++ b/src/dihedral_write.cpp @@ -124,12 +124,8 @@ void DihedralWrite::command(int narg, char **arg) if (comm->me == 0) { // set up new LAMMPS instance with dummy system to evaluate dihedral potential - // const char *args[] = {"DihedralWrite", "-nocite", "-echo", "none", - // "-log", "none", "-screen", "none"}; - const char *args[] = {"DihedralWrite", "-nocite", "-echo", "screen", "-log", "none"}; - char **argv = (char **) args; - int argc = sizeof(args) / sizeof(char *); - LAMMPS *writer = new LAMMPS(argc, argv, singlecomm); + LAMMPS::argv args = {"DihedralWrite", "-nocite", "-echo", "screen", "-log", "none"}; + LAMMPS *writer = new LAMMPS(args, singlecomm); // create dummy system replicating dihedral style settings writer->input->one(fmt::format("units {}", update->unit_style)); diff --git a/src/lammps.cpp b/src/lammps.cpp index 6fc06521d1..c0336ee588 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -107,6 +107,15 @@ using namespace LAMMPS_NS; * The specifics of setting up and running a simulation are handled by the * individual component class instances. */ +/** Create a LAMMPS simulation instance + * + * \param args list of arguments + * \param communicator MPI communicator used by this LAMMPS instance + */ +LAMMPS::LAMMPS(argv & args, MPI_Comm communicator) : + LAMMPS(args.size(), argv_pointers(args).data(), communicator) { +} + /** Create a LAMMPS simulation instance * * The LAMMPS constructor starts up a simulation by allocating all @@ -1464,3 +1473,17 @@ void LAMMPS::print_config(FILE *fp) } fputs("\n\n",fp); } + +/** Create vector of argv string pointers including terminating nullptr element + * + * \param args list of arguments + */ +std::vector LAMMPS::argv_pointers(argv & args){ + std::vector r; + r.reserve(args.size()+1); + for(auto & a : args) { + r.push_back((char*)a.data()); + } + r.push_back(nullptr); + return r; +} diff --git a/src/lammps.h b/src/lammps.h index 05a215eeac..4ec3f384d9 100644 --- a/src/lammps.h +++ b/src/lammps.h @@ -16,6 +16,8 @@ #include #include +#include +#include namespace LAMMPS_NS { @@ -84,6 +86,10 @@ class LAMMPS { static const char *git_branch(); static const char *git_descriptor(); + using argv = std::vector; + static std::vector argv_pointers(argv & args); + + LAMMPS(argv & args, MPI_Comm); LAMMPS(int, char **, MPI_Comm); ~LAMMPS() noexcept(false); void create(); diff --git a/unittest/c-library/test_library_commands.cpp b/unittest/c-library/test_library_commands.cpp index d4e326cd36..31f8268a8f 100644 --- a/unittest/c-library/test_library_commands.cpp +++ b/unittest/c-library/test_library_commands.cpp @@ -26,10 +26,11 @@ protected: void SetUp() override { const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "screen", "-nocite", - "-var", "x", "2", "-var", "zpos", "1.5"}; + "-var", "x", "2", "-var", "zpos", "1.5", + nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; ::testing::internal::CaptureStdout(); lmp = lammps_open_no_mpi(argc, argv, nullptr); diff --git a/unittest/c-library/test_library_config.cpp b/unittest/c-library/test_library_config.cpp index 78d6439c17..64a5ee89be 100644 --- a/unittest/c-library/test_library_config.cpp +++ b/unittest/c-library/test_library_config.cpp @@ -29,10 +29,11 @@ protected: { const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "screen", "-nocite", - "-var", "input_dir", STRINGIFY(TEST_INPUT_FOLDER)}; + "-var", "input_dir", STRINGIFY(TEST_INPUT_FOLDER), + nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; ::testing::internal::CaptureStdout(); lmp = lammps_open_no_mpi(argc, argv, nullptr); diff --git a/unittest/c-library/test_library_external.cpp b/unittest/c-library/test_library_external.cpp index 57d3bef080..9011ac19a8 100644 --- a/unittest/c-library/test_library_external.cpp +++ b/unittest/c-library/test_library_external.cpp @@ -64,9 +64,9 @@ static void callback(void *handle, step_t timestep, int nlocal, tag_t *, double TEST(lammps_external, callback) { - const char *args[] = {"liblammps", "-log", "none", "-nocite"}; + const char *args[] = {"liblammps", "-log", "none", "-nocite", nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; ::testing::internal::CaptureStdout(); void *handle = lammps_open_no_mpi(argc, argv, nullptr); @@ -131,9 +131,9 @@ TEST(lammps_external, callback) TEST(lammps_external, array) { - const char *args[] = {"liblammps", "-log", "none", "-nocite"}; + const char *args[] = {"liblammps", "-log", "none", "-nocite", nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; ::testing::internal::CaptureStdout(); void *handle = lammps_open_no_mpi(argc, argv, nullptr); diff --git a/unittest/c-library/test_library_mpi.cpp b/unittest/c-library/test_library_mpi.cpp index 1609107ae0..f60105a229 100644 --- a/unittest/c-library/test_library_mpi.cpp +++ b/unittest/c-library/test_library_mpi.cpp @@ -34,9 +34,9 @@ TEST(MPI, global_box) int boxflag; ::testing::internal::CaptureStdout(); - const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "screen", "-nocite"}; + const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "screen", "-nocite", nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; void *lmp = lammps_open(argc, argv, MPI_COMM_WORLD, nullptr); lammps_command(lmp, "units lj"); lammps_command(lmp, "atom_style atomic"); @@ -77,9 +77,9 @@ TEST(MPI, sub_box) int boxflag; ::testing::internal::CaptureStdout(); - const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "screen", "-nocite"}; + const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "screen", "-nocite", nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; void *lmp = lammps_open(argc, argv, MPI_COMM_WORLD, nullptr); lammps_command(lmp, "units lj"); lammps_command(lmp, "atom_style atomic"); @@ -143,9 +143,9 @@ TEST(MPI, split_comm) MPI_Comm_split(MPI_COMM_WORLD, color, key, &newcomm); - const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "screen", "-nocite"}; + const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "screen", "-nocite", nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; void *lmp = lammps_open(argc, argv, newcomm, nullptr); lammps_command(lmp, "units lj"); lammps_command(lmp, "atom_style atomic"); @@ -173,9 +173,9 @@ TEST(MPI, multi_partition) MPI_Comm_rank(MPI_COMM_WORLD, &me); const char *args[] = {"LAMMPS_test", "-log", "none", "-partition", "4x1", - "-echo", "screen", "-nocite", "-in", "none"}; + "-echo", "screen", "-nocite", "-in", "none", nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; void *lmp = lammps_open(argc, argv, MPI_COMM_WORLD, nullptr); lammps_command(lmp, "units lj"); @@ -205,9 +205,9 @@ protected: void SetUp() override { - const char *args[] = {testbinary, "-log", "none", "-echo", "screen", "-nocite"}; + const char *args[] = {testbinary, "-log", "none", "-echo", "screen", "-nocite", nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; if (!verbose) ::testing::internal::CaptureStdout(); lmp = lammps_open(argc, argv, MPI_COMM_WORLD, nullptr); InitSystem(); diff --git a/unittest/c-library/test_library_open.cpp b/unittest/c-library/test_library_open.cpp index 1cd65d843d..267f8e0978 100644 --- a/unittest/c-library/test_library_open.cpp +++ b/unittest/c-library/test_library_open.cpp @@ -39,9 +39,9 @@ TEST(lammps_open, null_args) TEST(lammps_open, with_args) { - const char *args[] = {"liblammps", "-log", "none", "-nocite"}; + const char *args[] = {"liblammps", "-log", "none", "-nocite", nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; // MPI is already initialized MPI_Comm mycomm; @@ -78,9 +78,9 @@ TEST(lammps_open, with_args) TEST(lammps_open, with_kokkos) { if (!LAMMPS_NS::LAMMPS::is_installed_pkg("KOKKOS")) GTEST_SKIP(); - const char *args[] = {"liblammps", "-k", "on", "t", "2", "-sf", "kk", "-log", "none"}; + const char *args[] = {"liblammps", "-k", "on", "t", "2", "-sf", "kk", "-log", "none", nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; ::testing::internal::CaptureStdout(); void *alt_ptr; @@ -108,9 +108,9 @@ TEST(lammps_open, with_kokkos) TEST(lammps_open_no_mpi, no_screen) { - const char *args[] = {"liblammps", "-log", "none", "-screen", "none", "-nocite"}; + const char *args[] = {"liblammps", "-log", "none", "-screen", "none", "-nocite", nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; ::testing::internal::CaptureStdout(); void *alt_ptr; @@ -139,9 +139,9 @@ TEST(lammps_open_no_mpi, with_omp) { if (!LAMMPS_NS::LAMMPS::is_installed_pkg("OPENMP")) GTEST_SKIP(); const char *args[] = {"liblammps", "-pk", "omp", "2", "neigh", "no", - "-sf", "omp", "-log", "none", "-nocite"}; + "-sf", "omp", "-log", "none", "-nocite", nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; ::testing::internal::CaptureStdout(); void *alt_ptr; @@ -201,9 +201,9 @@ TEST(lammps_open_fortran, no_args) TEST(lammps_open_no_mpi, lammps_error) { - const char *args[] = {"liblammps", "-log", "none", "-nocite"}; + const char *args[] = {"liblammps", "-log", "none", "-nocite", nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; ::testing::internal::CaptureStdout(); void *alt_ptr; diff --git a/unittest/c-library/test_library_properties.cpp b/unittest/c-library/test_library_properties.cpp index 0c5ad2c809..40d0d08575 100644 --- a/unittest/c-library/test_library_properties.cpp +++ b/unittest/c-library/test_library_properties.cpp @@ -33,10 +33,11 @@ protected: { const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "screen", "-nocite", - "-var", "input_dir", STRINGIFY(TEST_INPUT_FOLDER)}; + "-var", "input_dir", STRINGIFY(TEST_INPUT_FOLDER), + nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; ::testing::internal::CaptureStdout(); lmp = lammps_open_no_mpi(argc, argv, nullptr); @@ -551,10 +552,10 @@ protected: void SetUp() override { - const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "screen", "-nocite"}; + const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "screen", "-nocite", nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; ::testing::internal::CaptureStdout(); lmp = lammps_open_no_mpi(argc, argv, nullptr); @@ -632,10 +633,10 @@ TEST(SystemSettings, kokkos) // clang-format off const char *args[] = {"SystemSettings", "-log", "none", "-echo", "screen", "-nocite", - "-k", "on", "t", "4", "-sf", "kk"}; + "-k", "on", "t", "4", "-sf", "kk", nullptr}; // clang-format on char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; ::testing::internal::CaptureStdout(); void *lmp = lammps_open_no_mpi(argc, argv, nullptr); diff --git a/unittest/c-library/test_library_scatter_gather.cpp b/unittest/c-library/test_library_scatter_gather.cpp index ee672c9b86..0303a47337 100644 --- a/unittest/c-library/test_library_scatter_gather.cpp +++ b/unittest/c-library/test_library_scatter_gather.cpp @@ -32,10 +32,11 @@ protected: { const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "screen", "-nocite", - "-var", "input_dir", STRINGIFY(TEST_INPUT_FOLDER)}; + "-var", "input_dir", STRINGIFY(TEST_INPUT_FOLDER), + nullptr}; char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + int argc = (sizeof(args) / sizeof(char *)) - 1; ::testing::internal::CaptureStdout(); lmp = lammps_open_no_mpi(argc, argv, nullptr); diff --git a/unittest/commands/test_mpi_load_balancing.cpp b/unittest/commands/test_mpi_load_balancing.cpp index bc5f07beb1..efdee8c4eb 100644 --- a/unittest/commands/test_mpi_load_balancing.cpp +++ b/unittest/commands/test_mpi_load_balancing.cpp @@ -33,11 +33,9 @@ protected: void SetUp() override { - const char *args[] = {testbinary, "-log", "none", "-echo", "screen", "-nocite"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {testbinary, "-log", "none", "-echo", "screen", "-nocite"}; if (!verbose) ::testing::internal::CaptureStdout(); - lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD); + lmp = new LAMMPS(args, MPI_COMM_WORLD); InitSystem(); if (!verbose) ::testing::internal::GetCapturedStdout(); } diff --git a/unittest/cplusplus/test_input_class.cpp b/unittest/cplusplus/test_input_class.cpp index 6595c24695..708d3f7cae 100644 --- a/unittest/cplusplus/test_input_class.cpp +++ b/unittest/cplusplus/test_input_class.cpp @@ -8,6 +8,7 @@ #include #include +#include "../testing/utils.h" #include "gtest/gtest.h" const char *demo_input[] = {"region box block 0 $x 0 2 0 2", "create_box 1 box", @@ -21,9 +22,9 @@ protected: LAMMPS *lmp; Input_commands() { - const char *args[] = {"LAMMPS_test"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + const char * args[] = {"LAMMPS_test", nullptr}; + char ** argv = (char**)args; + int argc = 1; int flag; MPI_Initialized(&flag); @@ -33,13 +34,11 @@ protected: void SetUp() override { - const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "screen", "-nocite", - "-var", "zpos", "1.5", "-var", "x", "2"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"LAMMPS_test", "-log", "none", "-echo", "screen", "-nocite", + "-var", "zpos", "1.5", "-var", "x", "2"}; ::testing::internal::CaptureStdout(); - lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD); + lmp = new LAMMPS(args, MPI_COMM_WORLD); std::string output = ::testing::internal::GetCapturedStdout(); EXPECT_STREQ(output.substr(0, 8).c_str(), "LAMMPS ("); } diff --git a/unittest/cplusplus/test_lammps_class.cpp b/unittest/cplusplus/test_lammps_class.cpp index 64ce1eefb1..6f279fc96c 100644 --- a/unittest/cplusplus/test_lammps_class.cpp +++ b/unittest/cplusplus/test_lammps_class.cpp @@ -21,9 +21,9 @@ protected: LAMMPS *lmp; LAMMPS_plain() : lmp(nullptr) { - const char *args[] = {"LAMMPS_test"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + const char * args[] = {"LAMMPS_test", nullptr}; + char ** argv = (char**)args; + int argc = 1; int flag; MPI_Initialized(&flag); @@ -34,12 +34,10 @@ protected: void SetUp() override { - const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "both", "-nocite"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"LAMMPS_test", "-log", "none", "-echo", "both", "-nocite"}; ::testing::internal::CaptureStdout(); - lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD); + lmp = new LAMMPS(args, MPI_COMM_WORLD); std::string output = ::testing::internal::GetCapturedStdout(); EXPECT_THAT(output, StartsWith("LAMMPS (")); } @@ -159,9 +157,9 @@ protected: LAMMPS *lmp; LAMMPS_omp() : lmp(nullptr) { - const char *args[] = {"LAMMPS_test"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + const char * args[] = {"LAMMPS_test", nullptr}; + char ** argv = (char**)args; + int argc = 1; int flag; MPI_Initialized(&flag); @@ -172,15 +170,13 @@ protected: void SetUp() override { - const char *args[] = {"LAMMPS_test", "-log", "none", "-screen", "none", "-echo", "screen", - "-pk", "omp", "2", "neigh", "yes", "-sf", "omp"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"LAMMPS_test", "-log", "none", "-screen", "none", "-echo", "screen", + "-pk", "omp", "2", "neigh", "yes", "-sf", "omp"}; // only run this test fixture with omp suffix if OPENMP package is installed if (LAMMPS::is_installed_pkg("OPENMP")) - lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD); + lmp = new LAMMPS(args, MPI_COMM_WORLD); else GTEST_SKIP(); } @@ -242,9 +238,9 @@ protected: LAMMPS *lmp; LAMMPS_kokkos() : lmp(nullptr) { - const char *args[] = {"LAMMPS_test"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + const char * args[] = {"LAMMPS_test", nullptr}; + char ** argv = (char**)args; + int argc = 1; int flag; MPI_Initialized(&flag); @@ -255,15 +251,13 @@ protected: void SetUp() override { - const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "none", "-screen", "none", - "-k", "on", "t", "1", "-sf", "kk"}; + LAMMPS::argv args = {"LAMMPS_test", "-log", "none", "-echo", "none", "-screen", "none", + "-k", "on", "t", "1", "-sf", "kk"}; if (Info::has_accelerator_feature("KOKKOS", "api", "openmp")) args[10] = "2"; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); if (LAMMPS::is_installed_pkg("KOKKOS")) { ::testing::internal::CaptureStdout(); - lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD); + lmp = new LAMMPS(args, MPI_COMM_WORLD); ::testing::internal::GetCapturedStdout(); } else GTEST_SKIP(); @@ -333,12 +327,10 @@ TEST(LAMMPS_init, OpenMP) fputs("\n", fp); fclose(fp); - const char *args[] = {"LAMMPS_init", "-in", "in.lammps_empty", "-log", "none", "-nocite"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"LAMMPS_init", "-in", "in.lammps_empty", "-log", "none", "-nocite"}; ::testing::internal::CaptureStdout(); - LAMMPS *lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD); + LAMMPS *lmp = new LAMMPS(args, MPI_COMM_WORLD); std::string output = ::testing::internal::GetCapturedStdout(); EXPECT_THAT(output, ContainsRegex(".*using 2 OpenMP thread.*per MPI task.*")); @@ -366,12 +358,10 @@ TEST(LAMMPS_init, NoOpenMP) fclose(fp); platform::unsetenv("OMP_NUM_THREADS"); - const char *args[] = {"LAMMPS_init", "-in", "in.lammps_class_noomp", "-log", "none", "-nocite"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"LAMMPS_init", "-in", "in.lammps_class_noomp", "-log", "none", "-nocite"}; ::testing::internal::CaptureStdout(); - LAMMPS *lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD); + LAMMPS *lmp = new LAMMPS(args, MPI_COMM_WORLD); std::string output = ::testing::internal::GetCapturedStdout(); EXPECT_THAT(output, ContainsRegex( ".*OMP_NUM_THREADS environment is not set.*Defaulting to 1 thread.*")); diff --git a/unittest/force-styles/test_angle_style.cpp b/unittest/force-styles/test_angle_style.cpp index e9f4a3f7fc..bd0e3d8859 100644 --- a/unittest/force-styles/test_angle_style.cpp +++ b/unittest/force-styles/test_angle_style.cpp @@ -59,11 +59,11 @@ void cleanup_lammps(LAMMPS *lmp, const TestConfig &cfg) delete lmp; } -LAMMPS *init_lammps(int argc, char **argv, const TestConfig &cfg, const bool newton = true) +LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool newton = true) { LAMMPS *lmp; - lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD); + lmp = new LAMMPS(args, MPI_COMM_WORLD); // check if prerequisite styles are available Info *info = new Info(lmp); @@ -211,11 +211,9 @@ void data_lammps(LAMMPS *lmp, const TestConfig &cfg) void generate_yaml_file(const char *outfile, const TestConfig &config) { // initialize system geometry - const char *args[] = {"AngleStyle", "-log", "none", "-echo", "screen", "-nocite"}; + LAMMPS::argv args = {"AngleStyle", "-log", "none", "-echo", "screen", "-nocite"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); - LAMMPS *lmp = init_lammps(argc, argv, config); + LAMMPS *lmp = init_lammps(args, config); if (!lmp) { std::cerr << "One or more prerequisite styles are not available " "in this LAMMPS configuration:\n"; @@ -303,13 +301,10 @@ TEST(AngleStyle, plain) { if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"AngleStyle", "-log", "none", "-echo", "screen", "-nocite"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"AngleStyle", "-log", "none", "-echo", "screen", "-nocite"}; ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, true); + LAMMPS *lmp = init_lammps(args, test_config, true); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -358,7 +353,7 @@ TEST(AngleStyle, plain) if (!verbose) ::testing::internal::CaptureStdout(); cleanup_lammps(lmp, test_config); - lmp = init_lammps(argc, argv, test_config, false); + lmp = init_lammps(args, test_config, false); if (!verbose) ::testing::internal::GetCapturedStdout(); // skip over these tests if newton bond is forced to be on @@ -422,14 +417,11 @@ TEST(AngleStyle, omp) if (!LAMMPS::is_installed_pkg("OPENMP")) GTEST_SKIP(); if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"AngleStyle", "-log", "none", "-echo", "screen", "-nocite", - "-pk", "omp", "4", "-sf", "omp"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"AngleStyle", "-log", "none", "-echo", "screen", "-nocite", + "-pk", "omp", "4", "-sf", "omp"}; ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, true); + LAMMPS *lmp = init_lammps(args, test_config, true); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -482,7 +474,7 @@ TEST(AngleStyle, omp) if (!verbose) ::testing::internal::CaptureStdout(); cleanup_lammps(lmp, test_config); - lmp = init_lammps(argc, argv, test_config, false); + lmp = init_lammps(args, test_config, false); if (!verbose) ::testing::internal::GetCapturedStdout(); // skip over these tests if newton bond is forced to be on @@ -525,14 +517,11 @@ TEST(AngleStyle, single) { if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"AngleStyle", "-log", "none", "-echo", "screen", "-nocite"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"AngleStyle", "-log", "none", "-echo", "screen", "-nocite"}; // create a LAMMPS instance with standard settings to detect the number of atom types if (!verbose) ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config); + LAMMPS *lmp = init_lammps(args, test_config); if (!verbose) ::testing::internal::GetCapturedStdout(); if (!lmp) { @@ -672,13 +661,10 @@ TEST(AngleStyle, extract) { if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"AngleStyle", "-log", "none", "-echo", "screen", "-nocite"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"AngleStyle", "-log", "none", "-echo", "screen", "-nocite"}; if (!verbose) ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, true); + LAMMPS *lmp = init_lammps(args, test_config, true); if (!verbose) ::testing::internal::GetCapturedStdout(); if (!lmp) { diff --git a/unittest/force-styles/test_bond_style.cpp b/unittest/force-styles/test_bond_style.cpp index c723541366..aa99f41f8d 100644 --- a/unittest/force-styles/test_bond_style.cpp +++ b/unittest/force-styles/test_bond_style.cpp @@ -59,11 +59,11 @@ void cleanup_lammps(LAMMPS *lmp, const TestConfig &cfg) delete lmp; } -LAMMPS *init_lammps(int argc, char **argv, const TestConfig &cfg, const bool newton = true) +LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool newton = true) { LAMMPS *lmp; - lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD); + lmp = new LAMMPS(args, MPI_COMM_WORLD); // check if prerequisite styles are available Info *info = new Info(lmp); @@ -211,11 +211,9 @@ void data_lammps(LAMMPS *lmp, const TestConfig &cfg) void generate_yaml_file(const char *outfile, const TestConfig &config) { // initialize system geometry - const char *args[] = {"BondStyle", "-log", "none", "-echo", "screen", "-nocite"}; + LAMMPS::argv args = {"BondStyle", "-log", "none", "-echo", "screen", "-nocite"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); - LAMMPS *lmp = init_lammps(argc, argv, config); + LAMMPS *lmp = init_lammps(args, config); if (!lmp) { std::cerr << "One or more prerequisite styles are not available " "in this LAMMPS configuration:\n"; @@ -303,13 +301,10 @@ TEST(BondStyle, plain) { if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"BondStyle", "-log", "none", "-echo", "screen", "-nocite"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"BondStyle", "-log", "none", "-echo", "screen", "-nocite"}; ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, true); + LAMMPS *lmp = init_lammps(args, test_config, true); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -358,7 +353,7 @@ TEST(BondStyle, plain) if (!verbose) ::testing::internal::CaptureStdout(); cleanup_lammps(lmp, test_config); - lmp = init_lammps(argc, argv, test_config, false); + lmp = init_lammps(args, test_config, false); if (!verbose) ::testing::internal::GetCapturedStdout(); // skip over these tests if newton bond is forced to be on @@ -424,14 +419,11 @@ TEST(BondStyle, omp) if (!LAMMPS::is_installed_pkg("OPENMP")) GTEST_SKIP(); if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"BondStyle", "-log", "none", "-echo", "screen", "-nocite", - "-pk", "omp", "4", "-sf", "omp"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"BondStyle", "-log", "none", "-echo", "screen", "-nocite", + "-pk", "omp", "4", "-sf", "omp"}; ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, true); + LAMMPS *lmp = init_lammps(args, test_config, true); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -484,7 +476,7 @@ TEST(BondStyle, omp) if (!verbose) ::testing::internal::CaptureStdout(); cleanup_lammps(lmp, test_config); - lmp = init_lammps(argc, argv, test_config, false); + lmp = init_lammps(args, test_config, false); if (!verbose) ::testing::internal::GetCapturedStdout(); // skip over these tests if newton bond is forced to be on @@ -527,14 +519,11 @@ TEST(BondStyle, single) { if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"BondStyle", "-log", "none", "-echo", "screen", "-nocite"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"BondStyle", "-log", "none", "-echo", "screen", "-nocite"}; // create a LAMMPS instance with standard settings to detect the number of atom types if (!verbose) ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config); + LAMMPS *lmp = init_lammps(args, test_config); if (!verbose) ::testing::internal::GetCapturedStdout(); if (!lmp) { @@ -785,13 +774,10 @@ TEST(BondStyle, extract) { if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"BondStyle", "-log", "none", "-echo", "screen", "-nocite"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"BondStyle", "-log", "none", "-echo", "screen", "-nocite"}; if (!verbose) ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, true); + LAMMPS *lmp = init_lammps(args, test_config, true); if (!verbose) ::testing::internal::GetCapturedStdout(); if (!lmp) { diff --git a/unittest/force-styles/test_dihedral_style.cpp b/unittest/force-styles/test_dihedral_style.cpp index 2039155644..25690fc33d 100644 --- a/unittest/force-styles/test_dihedral_style.cpp +++ b/unittest/force-styles/test_dihedral_style.cpp @@ -59,11 +59,9 @@ void cleanup_lammps(LAMMPS *lmp, const TestConfig &cfg) delete lmp; } -LAMMPS *init_lammps(int argc, char **argv, const TestConfig &cfg, const bool newton = true) +LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool newton = true) { - LAMMPS *lmp; - - lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD); + LAMMPS *lmp = new LAMMPS(args, MPI_COMM_WORLD); // check if prerequisite styles are available Info *info = new Info(lmp); @@ -220,11 +218,9 @@ void data_lammps(LAMMPS *lmp, const TestConfig &cfg) void generate_yaml_file(const char *outfile, const TestConfig &config) { // initialize system geometry - const char *args[] = {"DihedralStyle", "-log", "none", "-echo", "screen", "-nocite"}; + LAMMPS::argv args = {"DihedralStyle", "-log", "none", "-echo", "screen", "-nocite"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); - LAMMPS *lmp = init_lammps(argc, argv, config); + LAMMPS *lmp = init_lammps(args, config); if (!lmp) { std::cerr << "One or more prerequisite styles are not available " "in this LAMMPS configuration:\n"; @@ -306,13 +302,10 @@ TEST(DihedralStyle, plain) { if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"DihedralStyle", "-log", "none", "-echo", "screen", "-nocite"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"DihedralStyle", "-log", "none", "-echo", "screen", "-nocite"}; ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, true); + LAMMPS *lmp = init_lammps(args, test_config, true); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -361,7 +354,7 @@ TEST(DihedralStyle, plain) if (!verbose) ::testing::internal::CaptureStdout(); cleanup_lammps(lmp, test_config); - lmp = init_lammps(argc, argv, test_config, false); + lmp = init_lammps(args, test_config, false); if (!verbose) ::testing::internal::GetCapturedStdout(); // skip over these tests if newton bond is forced to be on @@ -427,14 +420,11 @@ TEST(DihedralStyle, omp) if (!LAMMPS::is_installed_pkg("OPENMP")) GTEST_SKIP(); if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"DihedralStyle", "-log", "none", "-echo", "screen", "-nocite", - "-pk", "omp", "4", "-sf", "omp"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"DihedralStyle", "-log", "none", "-echo", "screen", "-nocite", + "-pk", "omp", "4", "-sf", "omp"}; ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, true); + LAMMPS *lmp = init_lammps(args, test_config, true); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -488,7 +478,7 @@ TEST(DihedralStyle, omp) if (!verbose) ::testing::internal::CaptureStdout(); cleanup_lammps(lmp, test_config); - lmp = init_lammps(argc, argv, test_config, false); + lmp = init_lammps(args, test_config, false); if (!verbose) ::testing::internal::GetCapturedStdout(); // skip over these tests if newton bond is forced to be on diff --git a/unittest/force-styles/test_fix_timestep.cpp b/unittest/force-styles/test_fix_timestep.cpp index b65eab2049..2d2c2fa0b8 100644 --- a/unittest/force-styles/test_fix_timestep.cpp +++ b/unittest/force-styles/test_fix_timestep.cpp @@ -61,11 +61,11 @@ void cleanup_lammps(LAMMPS *lmp, const TestConfig &cfg) delete lmp; } -LAMMPS *init_lammps(int argc, char **argv, const TestConfig &cfg, const bool use_respa = false) +LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool use_respa = false) { LAMMPS *lmp; - lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD); + lmp = new LAMMPS(args, MPI_COMM_WORLD); // check if prerequisite styles are available Info *info = new Info(lmp); @@ -169,11 +169,8 @@ void restart_lammps(LAMMPS *lmp, const TestConfig &cfg, bool use_rmass, bool use void generate_yaml_file(const char *outfile, const TestConfig &config) { // initialize system geometry - const char *args[] = {"FixIntegrate", "-log", "none", "-echo", "screen", "-nocite"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); - LAMMPS *lmp = init_lammps(argc, argv, config); + LAMMPS::argv args = {"FixIntegrate", "-log", "none", "-echo", "screen", "-nocite"}; + LAMMPS *lmp = init_lammps(args, config); if (!lmp) { std::cerr << "One or more prerequisite styles are not available " "in this LAMMPS configuration:\n"; @@ -252,13 +249,10 @@ TEST(FixTimestep, plain) if (test_config.skip_tests.count("static")) GTEST_SKIP(); #endif - const char *args[] = {"FixTimestep", "-log", "none", "-echo", "screen", "-nocite"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"FixTimestep", "-log", "none", "-echo", "screen", "-nocite"}; ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config); + LAMMPS *lmp = init_lammps(args, test_config); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -420,7 +414,7 @@ TEST(FixTimestep, plain) if (!verbose) ::testing::internal::GetCapturedStdout(); ::testing::internal::CaptureStdout(); - lmp = init_lammps(argc, argv, test_config, true); + lmp = init_lammps(args, test_config, true); output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -554,14 +548,12 @@ TEST(FixTimestep, omp) if (test_config.skip_tests.count("static")) GTEST_SKIP(); #endif - const char *args[] = {"FixTimestep", "-log", "none", "-echo", "screen", "-nocite", - "-pk", "omp", "4", "-sf", "omp"}; + LAMMPS::argv args = {"FixTimestep", "-log", "none", "-echo", "screen", "-nocite", + "-pk", "omp", "4", "-sf", "omp"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config); + LAMMPS *lmp = init_lammps(args, test_config); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -723,7 +715,7 @@ TEST(FixTimestep, omp) if (!verbose) ::testing::internal::GetCapturedStdout(); ::testing::internal::CaptureStdout(); - lmp = init_lammps(argc, argv, test_config, true); + lmp = init_lammps(args, test_config, true); output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; diff --git a/unittest/force-styles/test_improper_style.cpp b/unittest/force-styles/test_improper_style.cpp index 259bd9008d..b4096df868 100644 --- a/unittest/force-styles/test_improper_style.cpp +++ b/unittest/force-styles/test_improper_style.cpp @@ -59,11 +59,11 @@ void cleanup_lammps(LAMMPS *lmp, const TestConfig &cfg) delete lmp; } -LAMMPS *init_lammps(int argc, char **argv, const TestConfig &cfg, const bool newton = true) +LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool newton = true) { LAMMPS *lmp; - lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD); + lmp = new LAMMPS(args, MPI_COMM_WORLD); // check if prerequisite styles are available Info *info = new Info(lmp); @@ -211,11 +211,9 @@ void data_lammps(LAMMPS *lmp, const TestConfig &cfg) void generate_yaml_file(const char *outfile, const TestConfig &config) { // initialize system geometry - const char *args[] = {"ImproperStyle", "-log", "none", "-echo", "screen", "-nocite"}; + LAMMPS::argv args = {"ImproperStyle", "-log", "none", "-echo", "screen", "-nocite"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); - LAMMPS *lmp = init_lammps(argc, argv, config); + LAMMPS *lmp = init_lammps(args, config); if (!lmp) { std::cerr << "One or more prerequisite styles are not available " "in this LAMMPS configuration:\n"; @@ -297,13 +295,10 @@ TEST(ImproperStyle, plain) { if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"ImproperStyle", "-log", "none", "-echo", "screen", "-nocite"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"ImproperStyle", "-log", "none", "-echo", "screen", "-nocite"}; ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, true); + LAMMPS *lmp = init_lammps(args, test_config, true); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -352,7 +347,7 @@ TEST(ImproperStyle, plain) if (!verbose) ::testing::internal::CaptureStdout(); cleanup_lammps(lmp, test_config); - lmp = init_lammps(argc, argv, test_config, false); + lmp = init_lammps(args, test_config, false); if (!verbose) ::testing::internal::GetCapturedStdout(); // skip over these tests if newton bond is forced to be on @@ -418,14 +413,11 @@ TEST(ImproperStyle, omp) if (!LAMMPS::is_installed_pkg("OPENMP")) GTEST_SKIP(); if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"ImproperStyle", "-log", "none", "-echo", "screen", "-nocite", - "-pk", "omp", "4", "-sf", "omp"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"ImproperStyle", "-log", "none", "-echo", "screen", "-nocite", + "-pk", "omp", "4", "-sf", "omp"}; ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, true); + LAMMPS *lmp = init_lammps(args, test_config, true); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -479,7 +471,7 @@ TEST(ImproperStyle, omp) if (!verbose) ::testing::internal::CaptureStdout(); cleanup_lammps(lmp, test_config); - lmp = init_lammps(argc, argv, test_config, false); + lmp = init_lammps(args, test_config, false); if (!verbose) ::testing::internal::GetCapturedStdout(); // skip over these tests if newton bond is forced to be on diff --git a/unittest/force-styles/test_pair_style.cpp b/unittest/force-styles/test_pair_style.cpp index f44a6e61d3..8ad2ce9aaa 100644 --- a/unittest/force-styles/test_pair_style.cpp +++ b/unittest/force-styles/test_pair_style.cpp @@ -61,11 +61,11 @@ void cleanup_lammps(LAMMPS *lmp, const TestConfig &cfg) delete lmp; } -LAMMPS *init_lammps(int argc, char **argv, const TestConfig &cfg, const bool newton = true) +LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool newton = true) { LAMMPS *lmp; - lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD); + lmp = new LAMMPS(args, MPI_COMM_WORLD); // check if prerequisite styles are available Info *info = new Info(lmp); @@ -225,11 +225,9 @@ void data_lammps(LAMMPS *lmp, const TestConfig &cfg) void generate_yaml_file(const char *outfile, const TestConfig &config) { // initialize system geometry - const char *args[] = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite"}; + LAMMPS::argv args = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite"}; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); - LAMMPS *lmp = init_lammps(argc, argv, config); + LAMMPS *lmp = init_lammps(args, config); if (!lmp) { std::cerr << "One or more prerequisite styles are not available " "in this LAMMPS configuration:\n"; @@ -323,13 +321,10 @@ TEST(PairStyle, plain) { if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite"}; ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, true); + LAMMPS *lmp = init_lammps(args, test_config, true); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -388,7 +383,7 @@ TEST(PairStyle, plain) if (!verbose) ::testing::internal::CaptureStdout(); cleanup_lammps(lmp, test_config); - lmp = init_lammps(argc, argv, test_config, false); + lmp = init_lammps(args, test_config, false); if (!verbose) ::testing::internal::GetCapturedStdout(); // skip over these tests if newton pair is forced to be on @@ -469,7 +464,7 @@ TEST(PairStyle, plain) if (pair->respa_enable) { if (!verbose) ::testing::internal::CaptureStdout(); cleanup_lammps(lmp, test_config); - lmp = init_lammps(argc, argv, test_config, false); + lmp = init_lammps(args, test_config, false); lmp->input->one("run_style respa 2 1 inner 1 4.8 5.5 outer 2"); run_lammps(lmp); if (!verbose) ::testing::internal::GetCapturedStdout(); @@ -501,17 +496,14 @@ TEST(PairStyle, omp) if (!LAMMPS::is_installed_pkg("OPENMP")) GTEST_SKIP(); if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite", - "-pk", "omp", "4", "-sf", "omp"}; + LAMMPS::argv args = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite", + "-pk", "omp", "4", "-sf", "omp"}; // cannot run dpd styles with more than 1 thread due to using multiple pRNGs if (utils::strmatch(test_config.pair_style, "^dpd")) args[8] = "1"; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); - ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, true); + LAMMPS *lmp = init_lammps(args, test_config, true); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -570,7 +562,7 @@ TEST(PairStyle, omp) if (!verbose) ::testing::internal::CaptureStdout(); cleanup_lammps(lmp, test_config); - lmp = init_lammps(argc, argv, test_config, false); + lmp = init_lammps(args, test_config, false); if (!verbose) ::testing::internal::GetCapturedStdout(); pair = lmp->force->pair; @@ -626,8 +618,8 @@ TEST(PairStyle, kokkos_omp) if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); if (!Info::has_accelerator_feature("KOKKOS", "api", "openmp")) GTEST_SKIP(); - const char *args[] = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite", - "-k", "on", "t", "4", "-sf", "kk"}; + LAMMPS::argv args = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite", + "-k", "on", "t", "4", "-sf", "kk"}; // cannot run dpd styles in plain or hybrid with more than 1 thread due to using multiple pRNGs if (utils::strmatch(test_config.pair_style, "^dpd") || @@ -642,11 +634,8 @@ TEST(PairStyle, kokkos_omp) utils::strmatch(test_config.pair_style, " pace")) args[9] = "1"; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); - ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, true); + LAMMPS *lmp = init_lammps(args, test_config, true); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -704,7 +693,7 @@ TEST(PairStyle, kokkos_omp) if (lmp->force->newton_pair == 0) { if (!verbose) ::testing::internal::CaptureStdout(); cleanup_lammps(lmp, test_config); - lmp = init_lammps(argc, argv, test_config, false); + lmp = init_lammps(args, test_config, false); if (!verbose) ::testing::internal::GetCapturedStdout(); pair = lmp->force->pair; @@ -767,22 +756,19 @@ TEST(PairStyle, gpu) (!Info::has_fft_single_support())) GTEST_SKIP(); - const char *args_neigh[] = {"PairStyle", "-log", "none", "-echo", - "screen", "-nocite", "-sf", "gpu"}; - const char *args_noneigh[] = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite", "-sf", - "gpu", "-pk", "gpu", "0", "neigh", "no"}; - - char **argv = (char **)args_neigh; - int argc = sizeof(args_neigh) / sizeof(char *); + LAMMPS::argv args_neigh = {"PairStyle", "-log", "none", "-echo", + "screen", "-nocite", "-sf", "gpu"}; + LAMMPS::argv args_noneigh = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite", "-sf", + "gpu", "-pk", "gpu", "0", "neigh", "no"}; + LAMMPS::argv args = args_neigh; // cannot use GPU neighbor list with hybrid pair style (yet) if (test_config.pair_style.substr(0, 6) == "hybrid") { - argv = (char **)args_noneigh; - argc = sizeof(args_noneigh) / sizeof(char *); + args = args_noneigh; } ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, false); + LAMMPS *lmp = init_lammps(args, test_config, false); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -854,18 +840,15 @@ TEST(PairStyle, intel) if (!LAMMPS::is_installed_pkg("INTEL")) GTEST_SKIP(); if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite", - "-pk", "intel", "0", "mode", "double", "omp", - "4", "lrt", "no", "-sf", "intel"}; + LAMMPS::argv args = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite", + "-pk", "intel", "0", "mode", "double", "omp", + "4", "lrt", "no", "-sf", "intel"}; // cannot use more than 1 thread for dpd styles due to pRNG if (utils::strmatch(test_config.pair_style, "^dpd")) args[12] = "1"; - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); - ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, true); + LAMMPS *lmp = init_lammps(args, test_config, true); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -942,13 +925,10 @@ TEST(PairStyle, opt) if (!LAMMPS::is_installed_pkg("OPT")) GTEST_SKIP(); if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite", "-sf", "opt"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite", "-sf", "opt"}; ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config); + LAMMPS *lmp = init_lammps(args, test_config); std::string output = ::testing::internal::GetCapturedStdout(); if (verbose) std::cout << output; @@ -1025,17 +1005,14 @@ TEST(PairStyle, single) { if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite"}; // need to add this dependency test_config.prerequisites.emplace_back("atom", "full"); // create a LAMMPS instance with standard settings to detect the number of atom types if (!verbose) ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config); + LAMMPS *lmp = init_lammps(args, test_config); if (!verbose) ::testing::internal::GetCapturedStdout(); if (!lmp) { @@ -1276,13 +1253,10 @@ TEST(PairStyle, extract) { if (test_config.skip_tests.count(test_info_->name())) GTEST_SKIP(); - const char *args[] = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite"}; - - char **argv = (char **)args; - int argc = sizeof(args) / sizeof(char *); + LAMMPS::argv args = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite"}; if (!verbose) ::testing::internal::CaptureStdout(); - LAMMPS *lmp = init_lammps(argc, argv, test_config, true); + LAMMPS *lmp = init_lammps(args, test_config, true); if (!verbose) ::testing::internal::GetCapturedStdout(); if (!lmp) { diff --git a/unittest/fortran/wrap_extract_variable.cpp b/unittest/fortran/wrap_extract_variable.cpp index 1082a381bb..8c81897c0a 100644 --- a/unittest/fortran/wrap_extract_variable.cpp +++ b/unittest/fortran/wrap_extract_variable.cpp @@ -71,10 +71,10 @@ protected: // clang-format off const char *args[] = { "LAMMPS_Fortran_test", "-l", "none", "-echo", "screen", "-nocite", - "-var", "input_dir", input_dir, "-var", "zpos", "1.5", "-var", "x", "2" }; + "-var", "input_dir", input_dir, "-var", "zpos", "1.5", "-var", "x", "2", nullptr }; // clang-format on char **argv = (char **)args; - int argc = sizeof(args) / sizeof(const char *); + int argc = (sizeof(args) / sizeof(const char *)) - 1; ::testing::internal::CaptureStdout(); lmp = (LAMMPS_NS::LAMMPS *)f_lammps_with_c_args(argc, argv); diff --git a/unittest/testing/core.h b/unittest/testing/core.h index 88503dc188..8f1a84d2d8 100644 --- a/unittest/testing/core.h +++ b/unittest/testing/core.h @@ -106,31 +106,21 @@ public: } protected: - std::string testbinary = "LAMMPSTest"; - std::vector args = {"-log", "none", "-echo", "screen", "-nocite"}; + std::string testbinary = "LAMMPSTest"; + LAMMPS::argv args = {"-log", "none", "-echo", "screen", "-nocite"}; LAMMPS *lmp; Info *info; void SetUp() override { - int argc = args.size() + 1; - char **argv = new char *[argc]; - argv[0] = LAMMPS_NS::utils::strdup(testbinary); - for (int i = 1; i < argc; i++) { - argv[i] = LAMMPS_NS::utils::strdup(args[i - 1]); - } + LAMMPS::argv full_args = {testbinary}; + full_args.insert(full_args.end(), args.begin(), args.end()); HIDE_OUTPUT([&] { - lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD); + lmp = new LAMMPS(full_args, MPI_COMM_WORLD); info = new Info(lmp); }); InitSystem(); - - for (int i = 0; i < argc; i++) { - delete[] argv[i]; - argv[i] = nullptr; - } - delete[] argv; } virtual void InitSystem() {} From 053a904d08506f95001d976305b592c887821045 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Tue, 7 Nov 2023 17:55:32 -0700 Subject: [PATCH 119/204] bugfix: make copy of exename --- src/lammps.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lammps.cpp b/src/lammps.cpp index c0336ee588..0914658d75 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -219,7 +219,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : suffix = suffix2 = nullptr; suffix_enable = 0; pair_only_flag = 0; - if (arg) exename = arg[0]; + if (arg) exename = utils::strdup(arg[0]); else exename = nullptr; packargs = nullptr; num_package = 0; @@ -809,6 +809,7 @@ LAMMPS::~LAMMPS() noexcept(false) delete memory; delete pkg_lists; + delete[] exename; } /* ---------------------------------------------------------------------- From eff65ad3f33a47fafa2c3c67b48807461ad0e3dc Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Thu, 9 Nov 2023 20:29:14 -0700 Subject: [PATCH 120/204] bugfix: correctly build argv when using Python interface --- python/lammps/core.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/python/lammps/core.py b/python/lammps/core.py index 84a80e77a3..1ff123760b 100644 --- a/python/lammps/core.py +++ b/python/lammps/core.py @@ -379,8 +379,9 @@ class lammps(object): for i in range(narg): if type(cmdargs[i]) is str: cmdargs[i] = cmdargs[i].encode() - cargs = (c_char_p*narg)(*cmdargs) - self.lib.lammps_open.argtypes = [c_int, c_char_p*narg, MPI_Comm, c_void_p] + cargs = (c_char_p*(narg+1))(*cmdargs) + cargs[narg] = None + self.lib.lammps_open.argtypes = [c_int, c_char_p*(narg+1), MPI_Comm, c_void_p] else: self.lib.lammps_open.argtypes = [c_int, c_char_p, MPI_Comm, c_void_p] @@ -399,8 +400,9 @@ class lammps(object): for i in range(narg): if type(cmdargs[i]) is str: cmdargs[i] = cmdargs[i].encode() - cargs = (c_char_p*narg)(*cmdargs) - self.lib.lammps_open_no_mpi.argtypes = [c_int, c_char_p*narg, c_void_p] + cargs = (c_char_p*(narg+1))(*cmdargs) + cargs[narg] = None + self.lib.lammps_open_no_mpi.argtypes = [c_int, c_char_p*(narg+1), c_void_p] self.lmp = c_void_p(self.lib.lammps_open_no_mpi(narg,cargs,None)) else: self.lib.lammps_open_no_mpi.argtypes = [c_int, c_char_p, c_void_p] From e6d31485335cb3f239d3d722d0bddd151bbd4cc3 Mon Sep 17 00:00:00 2001 From: Yifan Li Date: Thu, 9 Nov 2023 23:34:01 -0500 Subject: [PATCH 121/204] add method=pimd support for Langevin thermostat --- src/REPLICA/fix_pimd_langevin.cpp | 120 +++++++++++++++++++----------- 1 file changed, 76 insertions(+), 44 deletions(-) diff --git a/src/REPLICA/fix_pimd_langevin.cpp b/src/REPLICA/fix_pimd_langevin.cpp index cffaf327e4..d4e2b6e526 100644 --- a/src/REPLICA/fix_pimd_langevin.cpp +++ b/src/REPLICA/fix_pimd_langevin.cpp @@ -50,7 +50,7 @@ using namespace FixConst; using MathConst::MY_PI; using MathConst::THIRD; -enum { NMPIMD }; +enum { PIMD, NMPIMD }; enum { PHYSICAL, NORMAL }; enum { BAOAB, OBABO }; enum { ISO, ANISO, TRICLINIC }; @@ -121,6 +121,8 @@ FixPIMDLangevin::FixPIMDLangevin(LAMMPS *lmp, int narg, char **arg) : if (strcmp(arg[i], "method") == 0) { if (strcmp(arg[i + 1], "nmpimd") == 0) method = NMPIMD; + elif (strcmp(arg[i + 1], "pimd") == 0) + method = PIMD; else error->universe_all(FLERR, "Unknown method parameter for fix pimd/langevin"); } else if (strcmp(arg[i], "integrator") == 0) { @@ -159,7 +161,7 @@ FixPIMDLangevin::FixPIMDLangevin(LAMMPS *lmp, int narg, char **arg) : error->universe_all(FLERR, "Invalid fmass value for fix pimd/langevin"); } else if (strcmp(arg[i], "sp") == 0) { sp = utils::numeric(FLERR, arg[i + 1], false, lmp); - if (sp < 0.0) error->universe_all(FLERR, "Invalid sp value for fix pimd/nvt"); + if (sp < 0.0) error->universe_all(FLERR, "Invalid sp value for fix pimd/langevin"); } else if (strcmp(arg[i], "fmmode") == 0) { if (strcmp(arg[i + 1], "physical") == 0) fmmode = PHYSICAL; @@ -170,9 +172,11 @@ FixPIMDLangevin::FixPIMDLangevin(LAMMPS *lmp, int narg, char **arg) : "Unknown fictitious mass mode for fix pimd/langevin. Only physical " "mass and normal mode mass are supported!"); } else if (strcmp(arg[i], "scale") == 0) { + if (method == PIMD) + error->universe_all(FLERR, "The scale parameter of the PILE_L thermostat is not supported for method pimd. Delete scale parameter if you do want to use method pimd."); pilescale = utils::numeric(FLERR, arg[i + 1], false, lmp); if (pilescale < 0.0) - error->universe_all(FLERR, "Invalid pile scale value for fix pimd/langevin"); + error->universe_all(FLERR, "Invalid PILE_L scale value for fix pimd/langevin"); } else if (strcmp(arg[i], "temp") == 0) { temp = utils::numeric(FLERR, arg[i + 1], false, lmp); if (temp < 0.0) error->universe_all(FLERR, "Invalid temp value for fix pimd/langevin"); @@ -245,6 +249,12 @@ FixPIMDLangevin::FixPIMDLangevin(LAMMPS *lmp, int narg, char **arg) : error->universe_all( FLERR, fmt::format("Must not use pressure coupling with {} ensemble", Ensembles[ensemble])); + if (method == PIMD && pstat_flag) + error->universe_all(FLERR, "Pressure control has not been supported for method pimd yet. Please set method to nmpimd."); + + if (method == PIMD && fmmode == NORMAL) + error->universe_all(FLERR, "Normal mode mass is not supported for method pimd. Please set method to nmpimd."); + /* Initiation */ global_freq = 1; @@ -890,20 +900,22 @@ void FixPIMDLangevin::langevin_init() _omega_k = new double[np]; Lan_c = new double[np]; Lan_s = new double[np]; - if (fmmode == PHYSICAL) { - for (int i = 0; i < np; i++) { - _omega_k[i] = _omega_np * sqrt(lam[i]) / sqrt(fmass); - Lan_c[i] = cos(sqrt(lam[i]) * _omega_np_dt_half); - Lan_s[i] = sin(sqrt(lam[i]) * _omega_np_dt_half); + if (method == NMPIMD) { + if (fmmode == PHYSICAL) { + for (int i = 0; i < np; i++) { + _omega_k[i] = _omega_np * sqrt(lam[i]) / sqrt(fmass); + Lan_c[i] = cos(sqrt(lam[i]) * _omega_np_dt_half); + Lan_s[i] = sin(sqrt(lam[i]) * _omega_np_dt_half); + } + } else if (fmmode == NORMAL) { + for (int i = 0; i < np; i++) { + _omega_k[i] = _omega_np / sqrt(fmass); + Lan_c[i] = cos(_omega_np_dt_half); + Lan_s[i] = sin(_omega_np_dt_half); + } + } else { + error->universe_all(FLERR, "Unknown fmmode setting; only physical and normal are supported!"); } - } else if (fmmode == NORMAL) { - for (int i = 0; i < np; i++) { - _omega_k[i] = _omega_np / sqrt(fmass); - Lan_c[i] = cos(_omega_np_dt_half); - Lan_s[i] = sin(_omega_np_dt_half); - } - } else { - error->universe_all(FLERR, "Unknown fmmode setting; only physical and normal are supported!"); } if (tau > 0) @@ -925,27 +937,35 @@ void FixPIMDLangevin::langevin_init() if (thermostat == PILE_L) { std::string out = "\nInitializing PI Langevin equation thermostat...\n"; out += "Bead ID | omega | tau | c1 | c2\n"; - tau_k = new double[np]; - c1_k = new double[np]; - c2_k = new double[np]; - tau_k[0] = tau; - c1_k[0] = c1; - c2_k[0] = c2; - for (int i = 1; i < np; i++) { - tau_k[i] = 0.5 / pilescale / _omega_k[i]; - if (integrator == OBABO) - c1_k[i] = exp(-0.5 * update->dt / tau_k[i]); - else if (integrator == BAOAB) - c1_k[i] = exp(-1.0 * update->dt / tau_k[i]); - else - error->universe_all(FLERR, - "Unknown integrator parameter for fix pimd/langevin. Only obabo and " - "baoab integrators are supported!"); - c2_k[i] = sqrt(1.0 - c1_k[i] * c1_k[i]); - } - for (int i = 0; i < np; i++) { - out += fmt::format(" {:d} {:.8e} {:.8e} {:.8e} {:.8e}\n", i, _omega_k[i], tau_k[i], - c1_k[i], c2_k[i]); + if (method == NMPIMD) { + tau_k = new double[np]; + c1_k = new double[np]; + c2_k = new double[np]; + tau_k[0] = tau; + c1_k[0] = c1; + c2_k[0] = c2; + for (int i = 1; i < np; i++) { + tau_k[i] = 0.5 / pilescale / _omega_k[i]; + if (integrator == OBABO) + c1_k[i] = exp(-0.5 * update->dt / tau_k[i]); + else if (integrator == BAOAB) + c1_k[i] = exp(-1.0 * update->dt / tau_k[i]); + else + error->universe_all(FLERR, + "Unknown integrator parameter for fix pimd/langevin. Only obabo and " + "baoab integrators are supported!"); + c2_k[i] = sqrt(1.0 - c1_k[i] * c1_k[i]); + } + for (int i = 0; i < np; i++) { + out += fmt::format(" {:d} {:.8e} {:.8e} {:.8e} {:.8e}\n", i, _omega_k[i], tau_k[i], + c1_k[i], c2_k[i]); + } + } + else if (method == PIMD) { + for (int i = 0; i < np; i++) { + out += fmt::format(" {:d} {:.8e} {:.8e} {:.8e} {:.8e}\n", i, _omega_np / sqrt(fmass), tau, + c1, c2); + } } if (thermostat == PILE_L) out += "PILE_L thermostat successfully initialized!\n"; out += "\n"; @@ -961,13 +981,25 @@ void FixPIMDLangevin::o_step() int *type = atom->type; double beta_np = 1.0 / force->boltz / Lan_temp * inverse_np * force->mvv2e; if (thermostat == PILE_L) { - for (int i = 0; i < nlocal; i++) { - atom->v[i][0] = c1_k[universe->iworld] * atom->v[i][0] + - c2_k[universe->iworld] * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); - atom->v[i][1] = c1_k[universe->iworld] * atom->v[i][1] + - c2_k[universe->iworld] * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); - atom->v[i][2] = c1_k[universe->iworld] * atom->v[i][2] + - c2_k[universe->iworld] * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); + if (method == NMPIMD) { + for (int i = 0; i < nlocal; i++) { + atom->v[i][0] = c1_k[universe->iworld] * atom->v[i][0] + + c2_k[universe->iworld] * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); + atom->v[i][1] = c1_k[universe->iworld] * atom->v[i][1] + + c2_k[universe->iworld] * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); + atom->v[i][2] = c1_k[universe->iworld] * atom->v[i][2] + + c2_k[universe->iworld] * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); + } + } + else if (method == PIMD) { + for (int i = 0; i < nlocal; i++) { + atom->v[i][0] = c1 * atom->v[i][0] + + c2 * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); + atom->v[i][1] = c1 * atom->v[i][1] + + c2 * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); + atom->v[i][2] = c1 * atom->v[i][2] + + c2 * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); + } } } } From f413d395a52c54b9e0e47e0adcd0c3a297aaba75 Mon Sep 17 00:00:00 2001 From: Yifan Li Date: Fri, 10 Nov 2023 00:20:51 -0500 Subject: [PATCH 122/204] add support for method=PIMD; add q_step function --- src/REPLICA/fix_pimd_langevin.cpp | 74 ++++++++++++++++++++++++++----- src/REPLICA/fix_pimd_langevin.h | 4 ++ 2 files changed, 68 insertions(+), 10 deletions(-) diff --git a/src/REPLICA/fix_pimd_langevin.cpp b/src/REPLICA/fix_pimd_langevin.cpp index d4e2b6e526..0068546f44 100644 --- a/src/REPLICA/fix_pimd_langevin.cpp +++ b/src/REPLICA/fix_pimd_langevin.cpp @@ -538,11 +538,18 @@ void FixPIMDLangevin::initial_integrate(int /*vflag*/) nmpimd_transform(bufsortedall, x, M_x2xp[universe->iworld]); else if (cmode == MULTI_PROC) nmpimd_transform(bufbeads, x, M_x2xp[universe->iworld]); + qc_step(); + a_step(); + qc_step(); + a_step(); + } + else if (method == PIMD) { + q_step(); + q_step(); + } + else { + error->universe_all(FLERR, "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); } - qc_step(); - a_step(); - qc_step(); - a_step(); } else if (integrator == BAOAB) { if (pstat_flag) { compute_totke(); @@ -556,18 +563,32 @@ void FixPIMDLangevin::initial_integrate(int /*vflag*/) nmpimd_transform(bufsortedall, x, M_x2xp[universe->iworld]); else if (cmode == MULTI_PROC) nmpimd_transform(bufbeads, x, M_x2xp[universe->iworld]); + qc_step(); + a_step(); + } + else if (method == PIMD) { + q_step(); + } + else { + error->universe_all(FLERR, "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); } - qc_step(); - a_step(); if (tstat_flag) { o_step(); if (removecomflag) remove_com_motion(); if (pstat_flag) press_o_step(); } - qc_step(); - a_step(); + if (method == NMPIMD) { + qc_step(); + a_step(); + } + else if (method == PIMD) { + q_step(); + } + else { + error->universe_all(FLERR, "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); + } } else { - error->universe_all(FLERR, "Unknown integrator parameter for fix pimd/langevin"); + error->universe_all(FLERR, "Unknown integrator parameter for fix pimd/langevin. Only obabo and baoab integrators are supported!"); } collect_xc(); compute_spring_energy(); @@ -614,6 +635,7 @@ void FixPIMDLangevin::final_integrate() void FixPIMDLangevin::post_force(int /*flag*/) { + if (method == NMPIMD) { if (atom->nmax > maxunwrap) reallocate_x_unwrap(); if (atom->nmax > maxxc) reallocate_xc(); int nlocal = atom->nlocal; @@ -638,6 +660,7 @@ void FixPIMDLangevin::post_force(int /*flag*/) compute_vir(); compute_cvir(); compute_t_vir(); + } compute_pote(); if (method == NMPIMD) { inter_replica_comm(f); @@ -646,6 +669,12 @@ void FixPIMDLangevin::post_force(int /*flag*/) else if (cmode == MULTI_PROC) nmpimd_transform(bufbeads, f, M_x2xp[universe->iworld]); } + else if (method == PIMD) { + spring_force(); + } + else { + error->universe_all(FLERR, "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); + } c_pe->addstep(update->ntimestep + 1); c_press->addstep(update->ntimestep + 1); } @@ -660,6 +689,8 @@ void FixPIMDLangevin::end_of_step() if (pstat_flag) compute_totenthalpy(); } +/* ---------------------------------------------------------------------- */ + void FixPIMDLangevin::collect_xc() { int nlocal = atom->nlocal; @@ -693,7 +724,9 @@ void FixPIMDLangevin::collect_xc() void FixPIMDLangevin::b_step() { - + // used for both NMPIMD and PIMD + // For NMPIMD, force only includes the contribution of external potential. + // For PIMD, force includes the contributions of external potential and spring force. int n = atom->nlocal; int *type = atom->type; double **v = atom->v; @@ -711,6 +744,8 @@ void FixPIMDLangevin::b_step() void FixPIMDLangevin::qc_step() { + // used for NMPIMD + // evolve the centroid mode int nlocal = atom->nlocal; double **x = atom->x; double **v = atom->v; @@ -775,6 +810,8 @@ void FixPIMDLangevin::qc_step() void FixPIMDLangevin::a_step() { + // used for NMPIMD + // use analytical solution of harmonic oscillator to evolve the non-centroid modes int n = atom->nlocal; double **x = atom->x; double **v = atom->v; @@ -806,6 +843,14 @@ void FixPIMDLangevin::a_step() /* ---------------------------------------------------------------------- */ +void FixPIMDLangevin::q_step() +{ + // used for PIMD + // evolve all beads +} + +/* ---------------------------------------------------------------------- */ + void FixPIMDLangevin::baro_init() { vw[0] = vw[1] = vw[2] = vw[3] = vw[4] = vw[5] = 0.0; @@ -1086,6 +1131,12 @@ void FixPIMDLangevin::nmpimd_transform(double **src, double **des, double *vecto } } +/* ---------------------------------------------------------------------- */ + +void FixPIMDLangevin::spring_force() +{ +} + /* ---------------------------------------------------------------------- Comm operations ------------------------------------------------------------------------- */ @@ -1111,6 +1162,9 @@ void FixPIMDLangevin::comm_init() planrecv[i] = universe->root_proc[irecv]; modeindex[i] = irecv; } + + x_next = (universe->iworld + 1 + universe->nworlds) % (universe->nworlds); + x_last = (universe->iworld - 1 + universe->nworlds) % (universe->nworlds); } /* ---------------------------------------------------------------------- */ diff --git a/src/REPLICA/fix_pimd_langevin.h b/src/REPLICA/fix_pimd_langevin.h index 9730f65376..0f21b908b0 100644 --- a/src/REPLICA/fix_pimd_langevin.h +++ b/src/REPLICA/fix_pimd_langevin.h @@ -77,6 +77,8 @@ class FixPIMDLangevin : public Fix { int me, nprocs, ireplica, nreplica, nprocs_universe; int ntotal, maxlocal; + int x_last, x_next; + int cmode; int sizeplan; int *plansend, *planrecv; @@ -93,6 +95,7 @@ class FixPIMDLangevin : public Fix { void comm_init(); void inter_replica_comm(double **ptr); + void spring_force(); /* normal-mode operations */ @@ -121,6 +124,7 @@ class FixPIMDLangevin : public Fix { a_step(); // integrate for dt/2 according to A part (non-centroid mode, harmonic force between replicas) void qc_step(); // integrate for dt/2 for the centroid mode (x <- x + v * dt/2) void o_step(); // integrate for dt according to O part (O-U process, for thermostating) + void q_step(); // integrate for dt/2 for all the beads (x <- x + v * dt/2) /* Bussi-Zykova-Parrinello barostat */ From 63935194191f8b5d06005647d8c28914cc475b73 Mon Sep 17 00:00:00 2001 From: Yifan Li Date: Fri, 10 Nov 2023 16:07:00 -0500 Subject: [PATCH 123/204] q_step function --- src/REPLICA/fix_pimd_langevin.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/REPLICA/fix_pimd_langevin.cpp b/src/REPLICA/fix_pimd_langevin.cpp index 0068546f44..5a2df1bc75 100644 --- a/src/REPLICA/fix_pimd_langevin.cpp +++ b/src/REPLICA/fix_pimd_langevin.cpp @@ -847,6 +847,17 @@ void FixPIMDLangevin::q_step() { // used for PIMD // evolve all beads + int nlocal = atom->nlocal; + double **x = atom->x; + double **v = atom->v; + + if (!pstat_flag) { + for (int i = 0; i < nlocal; i++) { + x[i][0] += dtv * v[i][0]; + x[i][1] += dtv * v[i][1]; + x[i][2] += dtv * v[i][2]; + } + } } /* ---------------------------------------------------------------------- */ From 98a0f43c9bbeac7f1688b073710d6b8d4e3aea09 Mon Sep 17 00:00:00 2001 From: Yifan Li Date: Sat, 11 Nov 2023 01:04:13 -0500 Subject: [PATCH 124/204] add spring_force function --- src/REPLICA/fix_pimd_langevin.cpp | 82 ++++++++++++++++++++++++++----- 1 file changed, 69 insertions(+), 13 deletions(-) diff --git a/src/REPLICA/fix_pimd_langevin.cpp b/src/REPLICA/fix_pimd_langevin.cpp index 5a2df1bc75..6ef74c2a1a 100644 --- a/src/REPLICA/fix_pimd_langevin.cpp +++ b/src/REPLICA/fix_pimd_langevin.cpp @@ -121,7 +121,7 @@ FixPIMDLangevin::FixPIMDLangevin(LAMMPS *lmp, int narg, char **arg) : if (strcmp(arg[i], "method") == 0) { if (strcmp(arg[i + 1], "nmpimd") == 0) method = NMPIMD; - elif (strcmp(arg[i + 1], "pimd") == 0) + else if (strcmp(arg[i + 1], "pimd") == 0) method = PIMD; else error->universe_all(FLERR, "Unknown method parameter for fix pimd/langevin"); @@ -488,6 +488,13 @@ void FixPIMDLangevin::setup(int vflag) else if (cmode == MULTI_PROC) nmpimd_transform(bufbeads, x, M_x2xp[universe->iworld]); } + else if (method == PIMD) { + inter_replica_comm(x); + spring_force(); + } + else { + error->universe_all(FLERR, "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); + } collect_xc(); compute_spring_energy(); compute_t_prim(); @@ -591,9 +598,16 @@ void FixPIMDLangevin::initial_integrate(int /*vflag*/) error->universe_all(FLERR, "Unknown integrator parameter for fix pimd/langevin. Only obabo and baoab integrators are supported!"); } collect_xc(); - compute_spring_energy(); - compute_t_prim(); - compute_p_prim(); + if (method == PIMD) { + inter_replica_comm(x); + spring_force(); + compute_spring_energy(); + } + if (method == NMPIMD) { + compute_spring_energy(); + compute_t_prim(); + compute_p_prim(); + } if (method == NMPIMD) { inter_replica_comm(x); @@ -635,14 +649,15 @@ void FixPIMDLangevin::final_integrate() void FixPIMDLangevin::post_force(int /*flag*/) { - if (method == NMPIMD) { - if (atom->nmax > maxunwrap) reallocate_x_unwrap(); - if (atom->nmax > maxxc) reallocate_xc(); int nlocal = atom->nlocal; double **x = atom->x; double **f = atom->f; imageint *image = atom->image; tagint *tag = atom->tag; + + if (method == NMPIMD) { + if (atom->nmax > maxunwrap) reallocate_x_unwrap(); + if (atom->nmax > maxxc) reallocate_xc(); for (int i = 0; i < nlocal; i++) { x_unwrap[i][0] = x[i][0]; x_unwrap[i][1] = x[i][1]; @@ -669,12 +684,7 @@ void FixPIMDLangevin::post_force(int /*flag*/) else if (cmode == MULTI_PROC) nmpimd_transform(bufbeads, f, M_x2xp[universe->iworld]); } - else if (method == PIMD) { - spring_force(); - } - else { - error->universe_all(FLERR, "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); - } + c_pe->addstep(update->ntimestep + 1); c_press->addstep(update->ntimestep + 1); } @@ -1146,6 +1156,41 @@ void FixPIMDLangevin::nmpimd_transform(double **src, double **des, double *vecto void FixPIMDLangevin::spring_force() { + spring_energy = 0.0; + + double **x = atom->x; + double **f = atom->f; + double* _mass = atom->mass; + int* type = atom->type; + int nlocal = atom->nlocal; + tagint* tagtmp = atom->tag; + + int *mask = atom->mask; + + for (int i=0; iuworld); total_spring_energy /= universe->procs_per_world[universe->iworld]; + } + else if (method == PIMD) { + total_spring_energy = se_bead = 0.0; + MPI_Allreduce(&spring_energy, &se_bead, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&se_bead, &total_spring_energy, 1, MPI_DOUBLE, MPI_SUM, universe->uworld); + total_spring_energy /= universe->procs_per_world[universe->iworld]; + } + else { + error->universe_all(FLERR, "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); + } } /* ---------------------------------------------------------------------- */ From ba32afc06e293384653f4856069575268ae47e9c Mon Sep 17 00:00:00 2001 From: Yifan Li Date: Sat, 11 Nov 2023 01:45:36 -0500 Subject: [PATCH 125/204] fix spring_energy --- src/REPLICA/fix_pimd_langevin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/REPLICA/fix_pimd_langevin.cpp b/src/REPLICA/fix_pimd_langevin.cpp index 6ef74c2a1a..96cf4bef35 100644 --- a/src/REPLICA/fix_pimd_langevin.cpp +++ b/src/REPLICA/fix_pimd_langevin.cpp @@ -1188,7 +1188,7 @@ void FixPIMDLangevin::spring_force() f[i][1] -= (dy) * ff; f[i][2] -= (dz) * ff; - spring_energy += ff * (delx2*delx2+dely2*dely2+delz2*delz2); + spring_energy += 0.5 * ff * (delx2*delx2+dely2*dely2+delz2*delz2); } } } From 4ef27552c4492b92c3ea889309ccd2ec3e2c8245 Mon Sep 17 00:00:00 2001 From: Yifan Li Date: Sat, 11 Nov 2023 03:10:00 -0500 Subject: [PATCH 126/204] fix spring_force()'s position --- src/REPLICA/fix_pimd_langevin.cpp | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/REPLICA/fix_pimd_langevin.cpp b/src/REPLICA/fix_pimd_langevin.cpp index 96cf4bef35..4e94b77a86 100644 --- a/src/REPLICA/fix_pimd_langevin.cpp +++ b/src/REPLICA/fix_pimd_langevin.cpp @@ -598,11 +598,7 @@ void FixPIMDLangevin::initial_integrate(int /*vflag*/) error->universe_all(FLERR, "Unknown integrator parameter for fix pimd/langevin. Only obabo and baoab integrators are supported!"); } collect_xc(); - if (method == PIMD) { - inter_replica_comm(x); - spring_force(); - compute_spring_energy(); - } + if (method == NMPIMD) { compute_spring_energy(); compute_t_prim(); @@ -676,6 +672,18 @@ void FixPIMDLangevin::post_force(int /*flag*/) compute_cvir(); compute_t_vir(); } + + if (method == PIMD) { + if (mapflag) { + for (int i = 0; i < nlocal; i++) { domain->unmap(x[i], image[i]); } + } + inter_replica_comm(x); + spring_force(); + compute_spring_energy(); + if (mapflag) { + for (int i = 0; i < nlocal; i++) { domain->unmap_inv(x[i], image[i]); } + } + } compute_pote(); if (method == NMPIMD) { inter_replica_comm(f); @@ -1165,7 +1173,10 @@ void FixPIMDLangevin::spring_force() int nlocal = atom->nlocal; tagint* tagtmp = atom->tag; + // printf("iworld = %d, x_last = %d, x_next = %d\n", universe->iworld, x_last, x_next); int *mask = atom->mask; + + // int idx_tmp = atom->map(1); for (int i=0; i Date: Sat, 11 Nov 2023 04:10:31 -0500 Subject: [PATCH 127/204] update document for method=pimd --- doc/src/fix_pimd.rst | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/src/fix_pimd.rst b/doc/src/fix_pimd.rst index 5b51b97c52..6abac408ca 100644 --- a/doc/src/fix_pimd.rst +++ b/doc/src/fix_pimd.rst @@ -31,7 +31,7 @@ Syntax .. parsed-literal:: *keywords* = *method* or *integrator* or *ensemble* or *fmmode* or *fmass* or *scale* or *temp* or *thermostat* or *tau* or *iso* or *aniso* or *barostat* or *taup* or *fixcom* or *lj* - *method* value = *nmpimd* + *method* value = *nmpimd* (default) or *pimd* *integrator* value = *obabo* or *baoab* *fmmode* value = *physical* or *normal* *fmass* value = scaling factor on mass @@ -137,9 +137,6 @@ normal-mode PIMD. A value of *cmd* is for centroid molecular dynamics the real particle. .. note:: - Fix pimd/langevin only supports *method* value *nmpimd*. This should be enough - for most PIMD applications for quantum thermodynamics purpose. - Motion of the centroid can be effectively uncoupled from the other normal modes by scaling the fictitious masses to achieve a partial adiabatic separation. This is called a Centroid Molecular Dynamics @@ -151,6 +148,10 @@ normal-mode PIMD. A value of *cmd* is for centroid molecular dynamics only the k > 0 modes are thermostatted, not the centroid degrees of freedom. +Fix pimd/langevin supports *method* value *nmpimd* and *pimd*. The default value is *nmpimd*. +If *method* is *nmpimd*, the normal mode representation is used to integrate the equations of motion. The exact solution of harmonic oscillator is used to propagate the free ring polymer part of the Hamiltonian. +If *method* is *pimd*, the Cartesian representation is used to integrate the equations of motion. The harmonic force is added to the total force of the system, and the numerical integrator is used to propagate the Hamiltonian. + The keyword *integrator* specifies the Trotter splitting method used by *fix pimd/langevin*. See :ref:`(Liu) ` for a discussion on the OBABO and BAOAB splitting schemes. Typically either of the two should work fine. From 2e43bb08652f86f48b73bf64376058caf88feb75 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Nov 2023 05:56:06 -0500 Subject: [PATCH 128/204] correct usage of virtual and override for rigid fixes and OpenMP versions --- src/OPENMP/fix_rigid_nh_omp.h | 4 ++-- src/OPENMP/fix_rigid_omp.h | 2 +- src/OPENMP/fix_rigid_small_omp.h | 2 +- src/RIGID/fix_rigid.h | 2 +- src/RIGID/fix_rigid_nh.h | 2 +- src/RIGID/fix_rigid_small.h | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/OPENMP/fix_rigid_nh_omp.h b/src/OPENMP/fix_rigid_nh_omp.h index dcd893b161..169bef706f 100644 --- a/src/OPENMP/fix_rigid_nh_omp.h +++ b/src/OPENMP/fix_rigid_nh_omp.h @@ -24,10 +24,10 @@ class FixRigidNHOMP : public FixRigidNH { void initial_integrate(int) override; void final_integrate() override; - virtual void remap(); + void remap() override; protected: - virtual void compute_forces_and_torques(); + void compute_forces_and_torques() override; private: // copied from FixRigidOMP template void set_xv_thr(); diff --git a/src/OPENMP/fix_rigid_omp.h b/src/OPENMP/fix_rigid_omp.h index 618ce5ddf7..b74b808544 100644 --- a/src/OPENMP/fix_rigid_omp.h +++ b/src/OPENMP/fix_rigid_omp.h @@ -32,7 +32,7 @@ class FixRigidOMP : public FixRigid { void final_integrate() override; protected: - virtual void compute_forces_and_torques(); + void compute_forces_and_torques() override; private: template void set_xv_thr(); diff --git a/src/OPENMP/fix_rigid_small_omp.h b/src/OPENMP/fix_rigid_small_omp.h index 1accb8a470..d3a7bd6349 100644 --- a/src/OPENMP/fix_rigid_small_omp.h +++ b/src/OPENMP/fix_rigid_small_omp.h @@ -36,7 +36,7 @@ class FixRigidSmallOMP : public FixRigidSmall { void final_integrate() override; protected: - virtual void compute_forces_and_torques(); + void compute_forces_and_torques() override; private: template void set_xv_thr(); diff --git a/src/RIGID/fix_rigid.h b/src/RIGID/fix_rigid.h index df0bcbda0c..2de1b59de6 100644 --- a/src/RIGID/fix_rigid.h +++ b/src/RIGID/fix_rigid.h @@ -145,7 +145,7 @@ class FixRigid : public Fix { void setup_bodies_static(); void setup_bodies_dynamic(); void apply_langevin_thermostat(); - void compute_forces_and_torques(); + virtual void compute_forces_and_torques(); void enforce2d(); void readfile(int, double *, double **, double **, double **, imageint *, int *); }; diff --git a/src/RIGID/fix_rigid_nh.h b/src/RIGID/fix_rigid_nh.h index 94600f97d1..93a299f41f 100644 --- a/src/RIGID/fix_rigid_nh.h +++ b/src/RIGID/fix_rigid_nh.h @@ -70,7 +70,7 @@ class FixRigidNH : public FixRigid { int tcomputeflag, pcomputeflag; // 1 = compute was created by fix. 0 = external void couple(); - void remap(); + virtual void remap(); void nhc_temp_integrate(); void nhc_press_integrate(); diff --git a/src/RIGID/fix_rigid_small.h b/src/RIGID/fix_rigid_small.h index 144b2aad70..75cc432c7a 100644 --- a/src/RIGID/fix_rigid_small.h +++ b/src/RIGID/fix_rigid_small.h @@ -202,7 +202,7 @@ class FixRigidSmall : public Fix { void setup_bodies_static(); void setup_bodies_dynamic(); void apply_langevin_thermostat(); - void compute_forces_and_torques(); + virtual void compute_forces_and_torques(); void enforce2d(); void readfile(int, double **, int *); void grow_body(); From 3d14e2e0e23b1b7ee4efb74b71613c129910260e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Nov 2023 06:05:07 -0500 Subject: [PATCH 129/204] whitespace --- src/REPLICA/fix_pimd_langevin.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/REPLICA/fix_pimd_langevin.cpp b/src/REPLICA/fix_pimd_langevin.cpp index 4e94b77a86..ba02b7a184 100644 --- a/src/REPLICA/fix_pimd_langevin.cpp +++ b/src/REPLICA/fix_pimd_langevin.cpp @@ -1177,25 +1177,25 @@ void FixPIMDLangevin::spring_force() int *mask = atom->mask; // int idx_tmp = atom->map(1); - + for (int i=0; i Date: Sat, 11 Nov 2023 06:09:15 -0500 Subject: [PATCH 130/204] doc tweaks --- doc/src/fix_pimd.rst | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/doc/src/fix_pimd.rst b/doc/src/fix_pimd.rst index 6abac408ca..91c5e58add 100644 --- a/doc/src/fix_pimd.rst +++ b/doc/src/fix_pimd.rst @@ -137,6 +137,7 @@ normal-mode PIMD. A value of *cmd* is for centroid molecular dynamics the real particle. .. note:: + Motion of the centroid can be effectively uncoupled from the other normal modes by scaling the fictitious masses to achieve a partial adiabatic separation. This is called a Centroid Molecular Dynamics @@ -148,9 +149,15 @@ normal-mode PIMD. A value of *cmd* is for centroid molecular dynamics only the k > 0 modes are thermostatted, not the centroid degrees of freedom. -Fix pimd/langevin supports *method* value *nmpimd* and *pimd*. The default value is *nmpimd*. -If *method* is *nmpimd*, the normal mode representation is used to integrate the equations of motion. The exact solution of harmonic oscillator is used to propagate the free ring polymer part of the Hamiltonian. -If *method* is *pimd*, the Cartesian representation is used to integrate the equations of motion. The harmonic force is added to the total force of the system, and the numerical integrator is used to propagate the Hamiltonian. +.. versionadded:: TBD + + Mode *pimd* added to fix pimd/langevin. + +Fix pimd/langevin supports the *method* values *nmpimd* and *pimd*. The default value is *nmpimd*. +If *method* is *nmpimd*, the normal mode representation is used to integrate the equations of motion. +The exact solution of harmonic oscillator is used to propagate the free ring polymer part of the Hamiltonian. +If *method* is *pimd*, the Cartesian representation is used to integrate the equations of motion. +The harmonic force is added to the total force of the system, and the numerical integrator is used to propagate the Hamiltonian. The keyword *integrator* specifies the Trotter splitting method used by *fix pimd/langevin*. See :ref:`(Liu) ` for a discussion on the OBABO and BAOAB splitting schemes. Typically @@ -208,6 +215,7 @@ The keyword *thermostat* reads *style* and *seed* of thermostat for fix style *p be *PILE_L* (path integral Langevin equation local thermostat, as described in :ref:`Ceriotti `), and *seed* should a positive integer number, which serves as the seed of the pseudo random number generator. .. note:: + The fix style *pimd/langevin* uses the stochastic PILE_L thermostat to control temperature. This thermostat works on the normal modes of the ring polymer. The *tau* parameter controls the centroid mode, and the *scale* parameter controls the non-centroid modes. @@ -270,6 +278,7 @@ related tasks for each of the partitions, e.g. read_restart system_${ibead}.restart2 .. note:: + Fix *pimd/langevin* dumps the Cartesian coordinates, but dumps the velocities and forces in the normal mode representation. If the Cartesian velocities and forces are needed, it is easy to perform the transformation when doing post-processing. From 9ef1b2d64d7a97af80cb20462026533430781dfc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Nov 2023 06:20:55 -0500 Subject: [PATCH 131/204] apply clang-format --- src/REPLICA/fix_pimd_langevin.cpp | 195 +++++++++++++++--------------- 1 file changed, 100 insertions(+), 95 deletions(-) diff --git a/src/REPLICA/fix_pimd_langevin.cpp b/src/REPLICA/fix_pimd_langevin.cpp index ba02b7a184..d328420ce9 100644 --- a/src/REPLICA/fix_pimd_langevin.cpp +++ b/src/REPLICA/fix_pimd_langevin.cpp @@ -173,7 +173,10 @@ FixPIMDLangevin::FixPIMDLangevin(LAMMPS *lmp, int narg, char **arg) : "mass and normal mode mass are supported!"); } else if (strcmp(arg[i], "scale") == 0) { if (method == PIMD) - error->universe_all(FLERR, "The scale parameter of the PILE_L thermostat is not supported for method pimd. Delete scale parameter if you do want to use method pimd."); + error->universe_all( + FLERR, + "The scale parameter of the PILE_L thermostat is not supported for method pimd. Delete " + "scale parameter if you do want to use method pimd."); pilescale = utils::numeric(FLERR, arg[i + 1], false, lmp); if (pilescale < 0.0) error->universe_all(FLERR, "Invalid PILE_L scale value for fix pimd/langevin"); @@ -250,10 +253,13 @@ FixPIMDLangevin::FixPIMDLangevin(LAMMPS *lmp, int narg, char **arg) : FLERR, fmt::format("Must not use pressure coupling with {} ensemble", Ensembles[ensemble])); if (method == PIMD && pstat_flag) - error->universe_all(FLERR, "Pressure control has not been supported for method pimd yet. Please set method to nmpimd."); + error->universe_all(FLERR, + "Pressure control has not been supported for method pimd yet. Please set " + "method to nmpimd."); if (method == PIMD && fmmode == NORMAL) - error->universe_all(FLERR, "Normal mode mass is not supported for method pimd. Please set method to nmpimd."); + error->universe_all( + FLERR, "Normal mode mass is not supported for method pimd. Please set method to nmpimd."); /* Initiation */ @@ -487,13 +493,13 @@ void FixPIMDLangevin::setup(int vflag) nmpimd_transform(bufsortedall, x, M_x2xp[universe->iworld]); else if (cmode == MULTI_PROC) nmpimd_transform(bufbeads, x, M_x2xp[universe->iworld]); - } - else if (method == PIMD) { + } else if (method == PIMD) { inter_replica_comm(x); spring_force(); - } - else { - error->universe_all(FLERR, "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); + } else { + error->universe_all( + FLERR, + "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); } collect_xc(); compute_spring_energy(); @@ -549,13 +555,13 @@ void FixPIMDLangevin::initial_integrate(int /*vflag*/) a_step(); qc_step(); a_step(); - } - else if (method == PIMD) { + } else if (method == PIMD) { q_step(); q_step(); - } - else { - error->universe_all(FLERR, "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); + } else { + error->universe_all( + FLERR, + "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); } } else if (integrator == BAOAB) { if (pstat_flag) { @@ -572,12 +578,12 @@ void FixPIMDLangevin::initial_integrate(int /*vflag*/) nmpimd_transform(bufbeads, x, M_x2xp[universe->iworld]); qc_step(); a_step(); - } - else if (method == PIMD) { + } else if (method == PIMD) { q_step(); - } - else { - error->universe_all(FLERR, "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); + } else { + error->universe_all( + FLERR, + "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); } if (tstat_flag) { o_step(); @@ -587,15 +593,17 @@ void FixPIMDLangevin::initial_integrate(int /*vflag*/) if (method == NMPIMD) { qc_step(); a_step(); - } - else if (method == PIMD) { + } else if (method == PIMD) { q_step(); - } - else { - error->universe_all(FLERR, "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); + } else { + error->universe_all( + FLERR, + "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); } } else { - error->universe_all(FLERR, "Unknown integrator parameter for fix pimd/langevin. Only obabo and baoab integrators are supported!"); + error->universe_all(FLERR, + "Unknown integrator parameter for fix pimd/langevin. Only obabo and baoab " + "integrators are supported!"); } collect_xc(); @@ -652,25 +660,25 @@ void FixPIMDLangevin::post_force(int /*flag*/) tagint *tag = atom->tag; if (method == NMPIMD) { - if (atom->nmax > maxunwrap) reallocate_x_unwrap(); - if (atom->nmax > maxxc) reallocate_xc(); - for (int i = 0; i < nlocal; i++) { - x_unwrap[i][0] = x[i][0]; - x_unwrap[i][1] = x[i][1]; - x_unwrap[i][2] = x[i][2]; - } - if (mapflag) { - for (int i = 0; i < nlocal; i++) { domain->unmap(x_unwrap[i], image[i]); } - } - for (int i = 0; i < nlocal; i++) { - xc[i][0] = xcall[3 * (tag[i] - 1) + 0]; - xc[i][1] = xcall[3 * (tag[i] - 1) + 1]; - xc[i][2] = xcall[3 * (tag[i] - 1) + 2]; - } + if (atom->nmax > maxunwrap) reallocate_x_unwrap(); + if (atom->nmax > maxxc) reallocate_xc(); + for (int i = 0; i < nlocal; i++) { + x_unwrap[i][0] = x[i][0]; + x_unwrap[i][1] = x[i][1]; + x_unwrap[i][2] = x[i][2]; + } + if (mapflag) { + for (int i = 0; i < nlocal; i++) { domain->unmap(x_unwrap[i], image[i]); } + } + for (int i = 0; i < nlocal; i++) { + xc[i][0] = xcall[3 * (tag[i] - 1) + 0]; + xc[i][1] = xcall[3 * (tag[i] - 1) + 1]; + xc[i][2] = xcall[3 * (tag[i] - 1) + 2]; + } - compute_vir(); - compute_cvir(); - compute_t_vir(); + compute_vir(); + compute_cvir(); + compute_t_vir(); } if (method == PIMD) { @@ -1032,13 +1040,12 @@ void FixPIMDLangevin::langevin_init() } for (int i = 0; i < np; i++) { out += fmt::format(" {:d} {:.8e} {:.8e} {:.8e} {:.8e}\n", i, _omega_k[i], tau_k[i], - c1_k[i], c2_k[i]); + c1_k[i], c2_k[i]); } - } - else if (method == PIMD) { + } else if (method == PIMD) { for (int i = 0; i < np; i++) { - out += fmt::format(" {:d} {:.8e} {:.8e} {:.8e} {:.8e}\n", i, _omega_np / sqrt(fmass), tau, - c1, c2); + out += fmt::format(" {:d} {:.8e} {:.8e} {:.8e} {:.8e}\n", i, _omega_np / sqrt(fmass), + tau, c1, c2); } } if (thermostat == PILE_L) out += "PILE_L thermostat successfully initialized!\n"; @@ -1064,15 +1071,14 @@ void FixPIMDLangevin::o_step() atom->v[i][2] = c1_k[universe->iworld] * atom->v[i][2] + c2_k[universe->iworld] * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); } - } - else if (method == PIMD) { + } else if (method == PIMD) { for (int i = 0; i < nlocal; i++) { - atom->v[i][0] = c1 * atom->v[i][0] + - c2 * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); - atom->v[i][1] = c1 * atom->v[i][1] + - c2 * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); - atom->v[i][2] = c1 * atom->v[i][2] + - c2 * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); + atom->v[i][0] = + c1 * atom->v[i][0] + c2 * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); + atom->v[i][1] = + c1 * atom->v[i][1] + c2 * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); + atom->v[i][2] = + c1 * atom->v[i][2] + c2 * sqrt(1.0 / mass[type[i]] / beta_np) * random->gaussian(); } } } @@ -1168,39 +1174,38 @@ void FixPIMDLangevin::spring_force() double **x = atom->x; double **f = atom->f; - double* _mass = atom->mass; - int* type = atom->type; + double *_mass = atom->mass; + int *type = atom->type; int nlocal = atom->nlocal; - tagint* tagtmp = atom->tag; + tagint *tagtmp = atom->tag; // printf("iworld = %d, x_last = %d, x_next = %d\n", universe->iworld, x_last, x_next); int *mask = atom->mask; // int idx_tmp = atom->map(1); - for (int i=0; ix; - double *_mass = atom->mass; - int *type = atom->type; - int nlocal = atom->nlocal; + double **x = atom->x; + double *_mass = atom->mass; + int *type = atom->type; + int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) { - spring_energy += 0.5 * _mass[type[i]] * fbond * lam[universe->iworld] * - (x[i][0] * x[i][0] + x[i][1] * x[i][1] + x[i][2] * x[i][2]); - } - MPI_Allreduce(&spring_energy, &se_bead, 1, MPI_DOUBLE, MPI_SUM, world); - MPI_Allreduce(&se_bead, &total_spring_energy, 1, MPI_DOUBLE, MPI_SUM, universe->uworld); - total_spring_energy /= universe->procs_per_world[universe->iworld]; - } - else if (method == PIMD) { + for (int i = 0; i < nlocal; i++) { + spring_energy += 0.5 * _mass[type[i]] * fbond * lam[universe->iworld] * + (x[i][0] * x[i][0] + x[i][1] * x[i][1] + x[i][2] * x[i][2]); + } + MPI_Allreduce(&spring_energy, &se_bead, 1, MPI_DOUBLE, MPI_SUM, world); + MPI_Allreduce(&se_bead, &total_spring_energy, 1, MPI_DOUBLE, MPI_SUM, universe->uworld); + total_spring_energy /= universe->procs_per_world[universe->iworld]; + } else if (method == PIMD) { total_spring_energy = se_bead = 0.0; MPI_Allreduce(&spring_energy, &se_bead, 1, MPI_DOUBLE, MPI_SUM, world); MPI_Allreduce(&se_bead, &total_spring_energy, 1, MPI_DOUBLE, MPI_SUM, universe->uworld); - total_spring_energy /= universe->procs_per_world[universe->iworld]; - } - else { - error->universe_all(FLERR, "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); + total_spring_energy /= universe->procs_per_world[universe->iworld]; + } else { + error->universe_all( + FLERR, + "Unknown method parameter for fix pimd/langevin. Only nmpimd and pimd are supported!"); } } From 7a425475e039b341489ad080a6ebfc71cab46e1a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Nov 2023 10:27:28 -0500 Subject: [PATCH 132/204] get rid of redundant class members --- src/OPENMP/fix_rigid_nh_omp.cpp | 8 +++-- src/OPENMP/fix_rigid_omp.cpp | 38 +++++++++++++---------- src/OPENMP/fix_rigid_small_omp.cpp | 14 ++++++--- src/RIGID/fix_rigid.cpp | 49 ++++++++++++++---------------- src/RIGID/fix_rigid.h | 2 -- src/RIGID/fix_rigid_nh.cpp | 17 ++++++----- src/RIGID/fix_rigid_nh_small.cpp | 21 +++++++------ src/RIGID/fix_rigid_small.cpp | 47 ++++++++++++++-------------- src/RIGID/fix_rigid_small.h | 2 -- 9 files changed, 106 insertions(+), 92 deletions(-) diff --git a/src/OPENMP/fix_rigid_nh_omp.cpp b/src/OPENMP/fix_rigid_nh_omp.cpp index 78dcd96f22..d02b69b3be 100644 --- a/src/OPENMP/fix_rigid_nh_omp.cpp +++ b/src/OPENMP/fix_rigid_nh_omp.cpp @@ -211,7 +211,7 @@ void FixRigidNHOMP::initial_integrate(int vflag) // set coords/orient and velocity/rotation of atoms in rigid bodies // from quarternion and omega - if (dimension == 2) { + if (domain->dimension == 2) { if (triclinic) { if (evflag) set_xv_thr<1,1,2>(); @@ -338,11 +338,13 @@ void FixRigidNHOMP::compute_forces_and_torques() // a few atoms each. so we loop over all atoms for all threads // and then each thread only processes some bodies. - const int nthreads=comm->nthreads; memset(&sum[0][0],0,6*nbody*sizeof(double)); #if defined(_OPENMP) + const int nthreads=comm->nthreads; #pragma omp parallel LMP_DEFAULT_NONE +#else + const int nthreads=1; #endif { #if defined(_OPENMP) @@ -518,7 +520,7 @@ void FixRigidNHOMP::final_integrate() // virial is already setup from initial_integrate // triclinic only matters for virial calculation. - if (dimension == 2) { + if (domain->dimension == 2) { if (evflag) if (triclinic) set_v_thr<1,1,2>(); diff --git a/src/OPENMP/fix_rigid_omp.cpp b/src/OPENMP/fix_rigid_omp.cpp index c9cfee07c6..75794b3419 100644 --- a/src/OPENMP/fix_rigid_omp.cpp +++ b/src/OPENMP/fix_rigid_omp.cpp @@ -92,7 +92,7 @@ void FixRigidOMP::initial_integrate(int vflag) // set coords/orient and velocity/rotation of atoms in rigid bodies // from quarternion and omega - if (dimension == 2) { + if (domain->dimension == 2) { if (triclinic) { if (evflag) set_xv_thr<1,1,2>(); @@ -212,11 +212,13 @@ void FixRigidOMP::compute_forces_and_torques() // a few atoms each. so we loop over all atoms for all threads // and then each thread only processes some bodies. - const int nthreads=comm->nthreads; memset(&sum[0][0],0,6*nbody*sizeof(double)); #if defined(_OPENMP) + const int nthreads=comm->nthreads; #pragma omp parallel LMP_DEFAULT_NONE +#else + const int nthreads=1; #endif { #if defined(_OPENMP) @@ -293,7 +295,7 @@ void FixRigidOMP::compute_forces_and_torques() void FixRigidOMP::final_integrate() { if (!earlyflag) compute_forces_and_torques(); - if (dimension == 2) enforce2d(); + if (domain->dimension == 2) enforce2d(); // update vcm and angmom @@ -323,23 +325,27 @@ void FixRigidOMP::final_integrate() // virial is already setup from initial_integrate // triclinic only matters for virial calculation. - if (dimension == 2) { - if (evflag) - if (triclinic) - set_v_thr<1,1,2>(); +#if defined(_OPENMP) + if (domain->dimension == 2) { + if (evflag) + if (triclinic) + set_v_thr<1,1,2>(); + else + set_v_thr<0,1,2>(); else - set_v_thr<0,1,2>(); - else - set_v_thr<0,0,2>(); + set_v_thr<0,0,2>(); } else { - if (evflag) - if (triclinic) - set_v_thr<1,1,3>(); + if (evflag) + if (triclinic) + set_v_thr<1,1,3>(); + else + set_v_thr<0,1,3>(); else - set_v_thr<0,1,3>(); - else - set_v_thr<0,0,3>(); + set_v_thr<0,0,3>(); } +#else + set_v(); +#endif } /* ---------------------------------------------------------------------- diff --git a/src/OPENMP/fix_rigid_small_omp.cpp b/src/OPENMP/fix_rigid_small_omp.cpp index 0eda964368..59fd274f95 100644 --- a/src/OPENMP/fix_rigid_small_omp.cpp +++ b/src/OPENMP/fix_rigid_small_omp.cpp @@ -98,7 +98,8 @@ void FixRigidSmallOMP::initial_integrate(int vflag) // set coords/orient and velocity/rotation of atoms in rigid bodies - if (dimension == 2) { +#if defined(_OPENMP) + if (domain->dimension == 2) { if (triclinic) { if (evflag) set_xv_thr<1,1,2>(); @@ -124,6 +125,9 @@ void FixRigidSmallOMP::initial_integrate(int vflag) set_xv_thr<0,0,3>(); } } +#else + set_xv(); +#endif } /* ---------------------------------------------------------------------- */ @@ -134,7 +138,6 @@ void FixRigidSmallOMP::compute_forces_and_torques() const auto * _noalias const f = (dbl3_t *) atom->f[0]; const double * const * const torque_one = atom->torque; const int nlocal = atom->nlocal; - const int nthreads=comm->nthreads; #if defined(_OPENMP) #pragma omp parallel for LMP_DEFAULT_NONE schedule(static) @@ -152,7 +155,10 @@ void FixRigidSmallOMP::compute_forces_and_torques() // and then each thread only processes some bodies. #if defined(_OPENMP) + const int nthreads=comm->nthreads; #pragma omp parallel LMP_DEFAULT_NONE +#else + const int nthreads=1; #endif { #if defined(_OPENMP) @@ -238,7 +244,7 @@ void FixRigidSmallOMP::compute_forces_and_torques() void FixRigidSmallOMP::final_integrate() { if (!earlyflag) compute_forces_and_torques(); - if (dimension == 2) enforce2d(); + if (domain->dimension == 2) enforce2d(); // update vcm and angmom, recompute omega @@ -274,7 +280,7 @@ void FixRigidSmallOMP::final_integrate() // virial is already setup from initial_integrate // triclinic only matters for virial calculation. - if (dimension == 2) { + if (domain->dimension == 2) { if (evflag) { if (triclinic) set_v_thr<1,1,2>(); diff --git a/src/RIGID/fix_rigid.cpp b/src/RIGID/fix_rigid.cpp index e15d43bcbc..628abb240e 100644 --- a/src/RIGID/fix_rigid.cpp +++ b/src/RIGID/fix_rigid.cpp @@ -67,13 +67,9 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : dof_flag = 1; centroidstressflag = CENTROID_NOTAVAIL; - MPI_Comm_rank(world, &me); - MPI_Comm_size(world, &nprocs); - // perform initial allocation of atom-based arrays // register with Atom class - dimension = domain->dimension; extended = orientflag = dorientflag = 0; body = nullptr; xcmimage = nullptr; @@ -300,7 +296,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : for (i = 0; i < nbody; i++) { fflag[i][0] = fflag[i][1] = fflag[i][2] = 1.0; tflag[i][0] = tflag[i][1] = tflag[i][2] = 1.0; - if (dimension == 2) fflag[i][2] = tflag[i][0] = tflag[i][1] = 0.0; + if (domain->dimension == 2) fflag[i][2] = tflag[i][0] = tflag[i][1] = 0.0; } // number of linear rigid bodies is counted later @@ -361,7 +357,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : else error->all(FLERR, "Illegal fix {} command", style); - if ((dimension == 2) && (zflag == 1.0)) + if ((domain->dimension == 2) && (zflag == 1.0)) error->all(FLERR, "Fix rigid z force cannot be on for 2d simulation"); int count = 0; @@ -401,7 +397,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : else error->all(FLERR, "Illegal fix {} command", style); - if (dimension == 2 && (xflag == 1.0 || yflag == 1.0)) + if (domain->dimension == 2 && (xflag == 1.0 || yflag == 1.0)) error->all(FLERR, "Fix rigid xy torque cannot be on for 2d simulation"); int count = 0; @@ -446,7 +442,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : p_stop[0] = p_stop[1] = p_stop[2] = utils::numeric(FLERR, arg[iarg + 2], false, lmp); p_period[0] = p_period[1] = p_period[2] = utils::numeric(FLERR, arg[iarg + 3], false, lmp); p_flag[0] = p_flag[1] = p_flag[2] = 1; - if (dimension == 2) { + if (domain->dimension == 2) { p_start[2] = p_stop[2] = p_period[2] = 0.0; p_flag[2] = 0; } @@ -459,7 +455,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : p_stop[0] = p_stop[1] = p_stop[2] = utils::numeric(FLERR, arg[iarg + 2], false, lmp); p_period[0] = p_period[1] = p_period[2] = utils::numeric(FLERR, arg[iarg + 3], false, lmp); p_flag[0] = p_flag[1] = p_flag[2] = 1; - if (dimension == 2) { + if (domain->dimension == 2) { p_start[2] = p_stop[2] = p_period[2] = 0.0; p_flag[2] = 0; } @@ -576,12 +572,12 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : for (i = 0; i < 3; i++) if (p_flag[i]) pstat_flag = 1; - if (pcouple == XYZ || (dimension == 2 && pcouple == XY)) pstyle = ISO; + if (pcouple == XYZ || (domain->dimension == 2 && pcouple == XY)) pstyle = ISO; else pstyle = ANISO; // initialize Marsaglia RNG with processor-unique seed - if (langflag) random = new RanMars(lmp,seed + me); + if (langflag) random = new RanMars(lmp, seed + comm->me); else random = nullptr; // initialize vector output quantities in case accessed before run @@ -623,7 +619,7 @@ FixRigid::FixRigid(LAMMPS *lmp, int narg, char **arg) : int nsum = 0; for (ibody = 0; ibody < nbody; ibody++) nsum += nrigid[ibody]; - if (me == 0) + if (comm->me == 0) utils::logmesg(lmp," {} rigid bodies with {} atoms\n",nbody,nsum); } @@ -709,14 +705,15 @@ void FixRigid::init() int count = 0; for (auto &ifix : modify->get_fix_list()) if (ifix->rigid_flag) count++; - if (count > 1 && me == 0) error->warning(FLERR,"More than one fix rigid"); + if (count > 1 && comm->me == 0) + error->warning(FLERR,"More than one fix rigid"); if (earlyflag) { bool rflag = false; for (auto &ifix : modify->get_fix_list()) { if (ifix->rigid_flag) rflag = true; if ((comm->me == 0) && rflag && (ifix->setmask() & POST_FORCE) && !ifix->rigid_flag) - error->warning(FLERR,"Fix {} with ID {} alters forces after fix rigid", + error->warning(FLERR, "Fix {} with ID {} alters forces after fix rigid", ifix->style, ifix->id); } } @@ -881,7 +878,7 @@ void FixRigid::setup(int vflag) // enforce 2d body forces and torques - if (dimension == 2) enforce2d(); + if (domain->dimension == 2) enforce2d(); // zero langextra in case Langevin thermostat not used // no point to calling post_force() here since langextra @@ -1006,7 +1003,7 @@ void FixRigid::final_integrate() // if 2d model, enforce2d() on body forces/torques if (!earlyflag) compute_forces_and_torques(); - if (dimension == 2) enforce2d(); + if (domain->dimension == 2) enforce2d(); // update vcm and angmom // fflag,tflag = 0 for some dimensions in 2d @@ -1097,7 +1094,7 @@ void FixRigid::image_shift() void FixRigid::apply_langevin_thermostat() { - if (me == 0) { + if (comm->me == 0) { double gamma1,gamma2; double wbody[3],tbody[3]; double delta = update->ntimestep - update->beginstep; @@ -1295,7 +1292,7 @@ int FixRigid::dof(int tgroup) if (nall[ibody]+mall[ibody] > 0 && nall[ibody]+mall[ibody] != nrigid[ibody]) flag = 1; } - if (flag && me == 0) + if (flag && (comm->me == 0)) error->warning(FLERR,"Computing temperature of portions of rigid bodies"); // remove appropriate DOFs for each rigid body wholly in temperature group @@ -1311,7 +1308,7 @@ int FixRigid::dof(int tgroup) int n = 0; nlinear = 0; - if (dimension == 3) { + if (domain->dimension == 3) { for (int ibody = 0; ibody < nbody; ibody++) if (nall[ibody]+mall[ibody] == nrigid[ibody]) { n += 3*nall[ibody] + 6*mall[ibody] - 6; @@ -1321,7 +1318,7 @@ int FixRigid::dof(int tgroup) nlinear++; } } - } else if (dimension == 2) { + } else if (domain->dimension == 2) { for (int ibody = 0; ibody < nbody; ibody++) if (nall[ibody]+mall[ibody] == nrigid[ibody]) n += 2*nall[ibody] + 3*mall[ibody] - 3; @@ -1422,7 +1419,7 @@ void FixRigid::set_xv() v[i][1] = omega[ibody][2]*x[i][0] - omega[ibody][0]*x[i][2] + vcm[ibody][1]; v[i][2] = omega[ibody][0]*x[i][1] - omega[ibody][1]*x[i][0] + vcm[ibody][2]; - if (dimension == 2) { + if (domain->dimension == 2) { x[i][2] = 0.0; v[i][2] = 0.0; } @@ -1585,7 +1582,7 @@ void FixRigid::set_v() v[i][1] = omega[ibody][2]*delta[0] - omega[ibody][0]*delta[2] + vcm[ibody][1]; v[i][2] = omega[ibody][0]*delta[1] - omega[ibody][1]*delta[0] + vcm[ibody][2]; - if (dimension == 2) v[i][2] = 0.0; + if (domain->dimension == 2) v[i][2] = 0.0; // virial = unwrapped coords dotted into body constraint force // body constraint force = implied force due to v change minus f external @@ -1798,8 +1795,7 @@ void FixRigid::setup_bodies_static() if ((xbox && !periodicity[0]) || (ybox && !periodicity[1]) || (zbox && !periodicity[2])) - error->one(FLERR,"Fix rigid atom has non-zero image flag " - "in a non-periodic dimension"); + error->one(FLERR,"Fix rigid atom has non-zero image flag in a non-periodic dimension"); if (triclinic == 0) { xunwrap = x[i][0] + xbox*xprd; @@ -2307,7 +2303,7 @@ void FixRigid::readfile(int which, double *vec, double **array1, double **array2 char line[MAXLINE]; // open file and read and parse first non-empty, non-comment line containing the number of bodies - if (me == 0) { + if (comm->me == 0) { fp = fopen(inpfile,"r"); if (fp == nullptr) error->one(FLERR,"Cannot open fix rigid infile {}: {}", inpfile, utils::getsyserror()); @@ -2332,6 +2328,7 @@ void FixRigid::readfile(int which, double *vec, double **array1, double **array2 auto buffer = new char[CHUNK*MAXLINE]; int nread = 0; + int me = comm->me; while (nread < nlines) { nchunk = MIN(nlines-nread,CHUNK); eofflag = utils::read_lines_from_file(fp,nchunk,MAXLINE,buffer,me,world); @@ -2406,7 +2403,7 @@ void FixRigid::readfile(int which, double *vec, double **array1, double **array2 nread += nchunk; } - if (me == 0) fclose(fp); + if (comm->me == 0) fclose(fp); delete[] buffer; } diff --git a/src/RIGID/fix_rigid.h b/src/RIGID/fix_rigid.h index 2de1b59de6..361ddd2720 100644 --- a/src/RIGID/fix_rigid.h +++ b/src/RIGID/fix_rigid.h @@ -60,7 +60,6 @@ class FixRigid : public Fix { double compute_array(int, int) override; protected: - int me, nprocs; double dtv, dtf, dtq; double *step_respa; int triclinic; @@ -71,7 +70,6 @@ class FixRigid : public Fix { int setupflag; // 1 if body properties are setup, else 0 int earlyflag; // 1 if forces/torques computed at post_force() - int dimension; // # of dimensions int nbody; // # of rigid bodies int nlinear; // # of linear rigid bodies int *nrigid; // # of atoms in each rigid body diff --git a/src/RIGID/fix_rigid_nh.cpp b/src/RIGID/fix_rigid_nh.cpp index 9c9d582d94..f694d090d1 100644 --- a/src/RIGID/fix_rigid_nh.cpp +++ b/src/RIGID/fix_rigid_nh.cpp @@ -61,14 +61,14 @@ FixRigidNH::FixRigidNH(LAMMPS *lmp, int narg, char **arg) : (p_flag[2] == 1 && p_period[2] <= 0.0)) error->all(FLERR,"Fix rigid npt/nph period must be > 0.0"); - if (dimension == 2 && p_flag[2]) + if (domain->dimension == 2 && p_flag[2]) error->all(FLERR,"Invalid fix rigid npt/nph command for a 2d simulation"); - if (dimension == 2 && (pcouple == YZ || pcouple == XZ)) + if (domain->dimension == 2 && (pcouple == YZ || pcouple == XZ)) error->all(FLERR,"Invalid fix rigid npt/nph command for a 2d simulation"); if (pcouple == XYZ && (p_flag[0] == 0 || p_flag[1] == 0)) error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); - if (pcouple == XYZ && dimension == 3 && p_flag[2] == 0) + if (pcouple == XYZ && domain->dimension == 3 && p_flag[2] == 0) error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); if (pcouple == XY && (p_flag[0] == 0 || p_flag[1] == 0)) error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); @@ -89,12 +89,12 @@ FixRigidNH::FixRigidNH(LAMMPS *lmp, int narg, char **arg) : error->all(FLERR, "Cannot use fix rigid npt/nph on a non-periodic dimension"); - if (pcouple == XYZ && dimension == 3 && + if (pcouple == XYZ && domain->dimension == 3 && (p_start[0] != p_start[1] || p_start[0] != p_start[2] || p_stop[0] != p_stop[1] || p_stop[0] != p_stop[2] || p_period[0] != p_period[1] || p_period[0] != p_period[2])) error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); - if (pcouple == XYZ && dimension == 2 && + if (pcouple == XYZ && domain->dimension == 2 && (p_start[0] != p_start[1] || p_stop[0] != p_stop[1] || p_period[0] != p_period[1])) error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); @@ -224,6 +224,7 @@ void FixRigidNH::init() if (force->kspace) kspace_flag = 1; else kspace_flag = 0; + int dimension = domain->dimension; nf_t = dimension * nbody; if (dimension == 3) { nf_r = dimension * nbody; @@ -391,6 +392,7 @@ void FixRigidNH::setup(int vflag) // initial forces on barostat thermostat variables + int dimension = domain->dimension; if (pstat_flag) { for (int i = 0; i < 3; i++) if (p_flag[i]) { @@ -821,6 +823,7 @@ void FixRigidNH::nhc_press_integrate() // update thermostat masses + int dimension = domain->dimension; double tb_mass = kt / (p_freq_max * p_freq_max); q_b[0] = dimension * dimension * tb_mass; for (i = 1; i < p_chain; i++) { @@ -927,7 +930,7 @@ double FixRigidNH::compute_scalar() energy += e*(0.5/pdim); double vol; - if (dimension == 2) vol = domain->xprd * domain->yprd; + if (domain->dimension == 2) vol = domain->xprd * domain->yprd; else vol = domain->xprd * domain->yprd * domain->zprd; double p0 = (p_target[0] + p_target[1] + p_target[2]) / 3.0; @@ -1071,7 +1074,7 @@ void FixRigidNH::nh_epsilon_dot() int i; double volume,scale,f_epsilon; - if (dimension == 2) volume = domain->xprd*domain->yprd; + if (domain->dimension == 2) volume = domain->xprd*domain->yprd; else volume = domain->xprd*domain->yprd*domain->zprd; // MTK terms diff --git a/src/RIGID/fix_rigid_nh_small.cpp b/src/RIGID/fix_rigid_nh_small.cpp index 7780a15011..b00fca6a2e 100644 --- a/src/RIGID/fix_rigid_nh_small.cpp +++ b/src/RIGID/fix_rigid_nh_small.cpp @@ -57,14 +57,14 @@ FixRigidNHSmall::FixRigidNHSmall(LAMMPS *lmp, int narg, char **arg) : // error checks - if (dimension == 2 && p_flag[2]) + if (domain->dimension == 2 && p_flag[2]) error->all(FLERR,"Invalid fix {} command for a 2d simulation", style); - if (dimension == 2 && (pcouple == YZ || pcouple == XZ)) + if (domain->dimension == 2 && (pcouple == YZ || pcouple == XZ)) error->all(FLERR,"Invalid fix {} command for a 2d simulation", style); if (pcouple == XYZ && (p_flag[0] == 0 || p_flag[1] == 0)) error->all(FLERR,"Invalid fix {} command pressure settings", style); - if (pcouple == XYZ && dimension == 3 && p_flag[2] == 0) + if (pcouple == XYZ && domain->dimension == 3 && p_flag[2] == 0) error->all(FLERR,"Invalid fix {} command pressure settings", style); if (pcouple == XY && (p_flag[0] == 0 || p_flag[1] == 0)) error->all(FLERR,"Invalid fix {} command pressure settings", style); @@ -82,12 +82,12 @@ FixRigidNHSmall::FixRigidNHSmall(LAMMPS *lmp, int narg, char **arg) : if (p_flag[2] && domain->zperiodic == 0) error->all(FLERR, "Cannot use fix {} on a non-periodic dimension", style); - if (pcouple == XYZ && dimension == 3 && + if (pcouple == XYZ && domain->dimension == 3 && (p_start[0] != p_start[1] || p_start[0] != p_start[2] || p_stop[0] != p_stop[1] || p_stop[0] != p_stop[2] || p_period[0] != p_period[1] || p_period[0] != p_period[2])) error->all(FLERR, "Invalid fix {} command pressure settings", style); - if (pcouple == XYZ && dimension == 2 && + if (pcouple == XYZ && domain->dimension == 2 && (p_start[0] != p_start[1] || p_stop[0] != p_stop[1] || p_period[0] != p_period[1])) error->all(FLERR, "Invalid fix {} command pressure settings", style); @@ -264,7 +264,7 @@ void FixRigidNHSmall::init() pdim = p_flag[0] + p_flag[1] + p_flag[2]; if (vol0 == 0.0) { - if (dimension == 2) vol0 = domain->xprd * domain->yprd; + if (domain->dimension == 2) vol0 = domain->xprd * domain->yprd; else vol0 = domain->xprd * domain->yprd * domain->zprd; } @@ -382,6 +382,7 @@ void FixRigidNHSmall::setup(int vflag) } // initial forces on barostat thermostat variables + int dimension = domain->dimension; if (pstat_flag) { for (int i = 0; i < 3; i++) @@ -832,7 +833,8 @@ void FixRigidNHSmall::nhc_press_integrate() double lkt_press = kt; // update thermostat masses - + + int dimension = domain->dimension; double tb_mass = kt / (p_freq_max * p_freq_max); q_b[0] = dimension * dimension * tb_mass; for (i = 1; i < p_chain; i++) { @@ -989,7 +991,7 @@ double FixRigidNHSmall::compute_scalar() energy += e*(0.5/pdim); double vol; - if (dimension == 2) vol = domain->xprd * domain->yprd; + if (domain->dimension == 2) vol = domain->xprd * domain->yprd; else vol = domain->xprd * domain->yprd * domain->zprd; double p0 = (p_target[0] + p_target[1] + p_target[2]) / 3.0; @@ -1133,7 +1135,7 @@ void FixRigidNHSmall::nh_epsilon_dot() int i; double volume,scale,f_epsilon; - if (dimension == 2) volume = domain->xprd*domain->yprd; + if (domain->dimension == 2) volume = domain->xprd*domain->yprd; else volume = domain->xprd*domain->yprd*domain->zprd; // MTK terms @@ -1161,6 +1163,7 @@ void FixRigidNHSmall::nh_epsilon_dot() void FixRigidNHSmall::compute_dof() { // total translational and rotational degrees of freedom + int dimension = domain->dimension; nf_t = dimension * nlocal_body; if (dimension == 3) { diff --git a/src/RIGID/fix_rigid_small.cpp b/src/RIGID/fix_rigid_small.cpp index d8e6358ddb..bd49834f15 100644 --- a/src/RIGID/fix_rigid_small.cpp +++ b/src/RIGID/fix_rigid_small.cpp @@ -75,13 +75,9 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : stores_ids = 1; centroidstressflag = CENTROID_AVAIL; - MPI_Comm_rank(world,&me); - MPI_Comm_size(world,&nprocs); - // perform initial allocation of atom-based arrays // register with Atom class - dimension = domain->dimension; extended = orientflag = dorientflag = customflag = 0; bodyown = nullptr; bodytag = nullptr; @@ -257,7 +253,7 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : utils::numeric(FLERR,arg[iarg+3],false,lmp); p_flag[0] = p_flag[1] = p_flag[2] = 1; - if (dimension == 2) { + if (domain->dimension == 2) { p_start[2] = p_stop[2] = p_period[2] = 0.0; p_flag[2] = 0; } @@ -272,7 +268,7 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : p_period[0] = p_period[1] = p_period[2] = utils::numeric(FLERR,arg[iarg+3],false,lmp); p_flag[0] = p_flag[1] = p_flag[2] = 1; - if (dimension == 2) { + if (domain->dimension == 2) { p_start[2] = p_stop[2] = p_period[2] = 0.0; p_flag[2] = 0; } @@ -381,7 +377,7 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : for (i = 0; i < 3; i++) if (p_flag[i]) pstat_flag = 1; - if (pcouple == XYZ || (dimension == 2 && pcouple == XY)) pstyle = ISO; + if (pcouple == XYZ || (domain->dimension == 2 && pcouple == XY)) pstyle = ISO; else pstyle = ANISO; // create rigid bodies based on molecule or custom ID @@ -450,7 +446,7 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) : bigint atomall; MPI_Allreduce(&atomone,&atomall,1,MPI_LMP_BIGINT,MPI_SUM,world); - if (me == 0) { + if (comm->me == 0) { utils::logmesg(lmp," {} rigid bodies with {} atoms\n" " {:.8} = max distance from body owner to body atom\n", nbody,atomall,maxextent); @@ -529,7 +525,8 @@ void FixRigidSmall::init() int count = 0; for (auto &ifix : modify->get_fix_list()) if (ifix->rigid_flag) count++; - if (count > 1 && me == 0) error->warning(FLERR, "More than one fix rigid command"); + if (count > 1 && comm->me == 0) + error->warning(FLERR, "More than one fix rigid command"); if (earlyflag) { bool rflag = false; @@ -690,7 +687,7 @@ void FixRigidSmall::setup(int vflag) // enforce 2d body forces and torques - if (dimension == 2) enforce2d(); + if (domain->dimension == 2) enforce2d(); // reverse communicate fcm, torque of all bodies @@ -841,7 +838,7 @@ void FixRigidSmall::final_integrate() // if 2d model, enforce2d() on body forces/torques if (!earlyflag) compute_forces_and_torques(); - if (dimension == 2) enforce2d(); + if (domain->dimension == 2) enforce2d(); // update vcm and angmom, recompute omega @@ -1182,7 +1179,7 @@ int FixRigidSmall::dof(int tgroup) } int flagall; MPI_Allreduce(&flag,&flagall,1,MPI_INT,MPI_MAX,world); - if (flagall && me == 0) + if (flagall && comm->me == 0) error->warning(FLERR,"Computing temperature of portions of rigid bodies"); // remove appropriate DOFs for each rigid body wholly in temperature group @@ -1200,7 +1197,7 @@ int FixRigidSmall::dof(int tgroup) int n = 0; nlinear = 0; - if (dimension == 3) { + if (domain->dimension == 3) { for (int ibody = 0; ibody < nlocal_body; ibody++) { if (counts[ibody][0]+counts[ibody][1] == counts[ibody][2]) { n += 3*counts[ibody][0] + 6*counts[ibody][1] - 6; @@ -1211,7 +1208,7 @@ int FixRigidSmall::dof(int tgroup) } } } - } else if (dimension == 2) { + } else if (domain->dimension == 2) { for (int ibody = 0; ibody < nlocal_body; ibody++) if (counts[ibody][0]+counts[ibody][1] == counts[ibody][2]) n += 2*counts[ibody][0] + 3*counts[ibody][1] - 3; @@ -1305,7 +1302,7 @@ void FixRigidSmall::set_xv() v[i][1] = b->omega[2]*x[i][0] - b->omega[0]*x[i][2] + b->vcm[1]; v[i][2] = b->omega[0]*x[i][1] - b->omega[1]*x[i][0] + b->vcm[2]; - if (dimension == 2) { + if (domain->dimension == 2) { x[i][2] = 0.0; v[i][2] = 0.0; } @@ -1476,7 +1473,7 @@ void FixRigidSmall::set_v() v[i][1] = b->omega[2]*delta[0] - b->omega[0]*delta[2] + b->vcm[1]; v[i][2] = b->omega[0]*delta[1] - b->omega[1]*delta[0] + b->vcm[2]; - if (dimension == 2) v[i][2] = 0.0; + if (domain->dimension == 2) v[i][2] = 0.0; // virial = unwrapped coords dotted into body constraint force // body constraint force = implied force due to v change minus f external @@ -1595,6 +1592,8 @@ void FixRigidSmall::create_bodies(tagint *bodyID) double **x = atom->x; tagint *tag = atom->tag; imageint *image = atom->image; + int me = comm->me; + int nprocs = comm->nprocs; m = 0; for (i = 0; i < nlocal; i++) { @@ -2485,7 +2484,7 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody) // open file and read header - if (me == 0) { + if (comm->me == 0) { fp = fopen(inpfile,"r"); if (fp == nullptr) error->one(FLERR,"Cannot open fix {} file {}: {}", style, inpfile, utils::getsyserror()); @@ -2510,6 +2509,8 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody) auto buffer = new char[CHUNK*MAXLINE]; int nread = 0; + int me = comm->me; + while (nread < nlines) { nchunk = MIN(nlines-nread,CHUNK); eofflag = utils::read_lines_from_file(fp,nchunk,MAXLINE,buffer,me,world); @@ -2583,7 +2584,7 @@ void FixRigidSmall::readfile(int which, double **array, int *inbody) nread += nchunk; } - if (me == 0) fclose(fp); + if (comm->me == 0) fclose(fp); delete[] buffer; } @@ -2603,7 +2604,7 @@ void FixRigidSmall::write_restart_file(const char *file) // proc 0 opens file and writes header - if (me == 0) { + if (comm->me == 0) { auto outfile = std::string(file) + ".rigid"; fp = fopen(outfile.c_str(),"w"); if (fp == nullptr) @@ -2625,7 +2626,7 @@ void FixRigidSmall::write_restart_file(const char *file) MPI_Allreduce(&sendrow,&maxrow,1,MPI_INT,MPI_MAX,world); double **buf; - if (me == 0) memory->create(buf,MAX(1,maxrow),ncol,"rigid/small:buf"); + if (comm->me == 0) memory->create(buf,MAX(1,maxrow),ncol,"rigid/small:buf"); else memory->create(buf,MAX(1,sendrow),ncol,"rigid/small:buf"); // pack my rigid body info into buf @@ -2668,10 +2669,10 @@ void FixRigidSmall::write_restart_file(const char *file) int tmp,recvrow; - if (me == 0) { + if (comm->me == 0) { MPI_Status status; MPI_Request request; - for (int iproc = 0; iproc < nprocs; iproc++) { + for (int iproc = 0; iproc < comm->nprocs; iproc++) { if (iproc) { MPI_Irecv(&buf[0][0],maxrow*ncol,MPI_DOUBLE,iproc,0,world,&request); MPI_Send(&tmp,0,MPI_INT,iproc,0,world); @@ -2703,7 +2704,7 @@ void FixRigidSmall::write_restart_file(const char *file) // clean up and close file memory->destroy(buf); - if (me == 0) fclose(fp); + if (comm->me == 0) fclose(fp); } /* ---------------------------------------------------------------------- diff --git a/src/RIGID/fix_rigid_small.h b/src/RIGID/fix_rigid_small.h index 75cc432c7a..0070d976df 100644 --- a/src/RIGID/fix_rigid_small.h +++ b/src/RIGID/fix_rigid_small.h @@ -67,11 +67,9 @@ class FixRigidSmall : public Fix { double memory_usage() override; protected: - int me, nprocs; double dtv, dtf, dtq; double *step_respa; int triclinic; - int dimension; char *inpfile; // file to read rigid body attributes from int setupflag; // 1 if body properties are setup, else 0 From 649aad3877f029cf7e56e925e7ea6885e1033b4f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Nov 2023 11:14:07 -0500 Subject: [PATCH 133/204] modernize --- src/RIGID/fix_rigid_nh.cpp | 88 +++++++++++++++----------------- src/RIGID/fix_rigid_nh_small.cpp | 32 ++++++------ 2 files changed, 55 insertions(+), 65 deletions(-) diff --git a/src/RIGID/fix_rigid_nh.cpp b/src/RIGID/fix_rigid_nh.cpp index f694d090d1..ec5e7845ad 100644 --- a/src/RIGID/fix_rigid_nh.cpp +++ b/src/RIGID/fix_rigid_nh.cpp @@ -175,13 +175,13 @@ FixRigidNH::~FixRigidNH() delete[] rfix; if (tcomputeflag) modify->delete_compute(id_temp); - delete [] id_temp; + delete[] id_temp; // delete pressure if fix created it if (pstat_flag) { if (pcomputeflag) modify->delete_compute(id_press); - delete [] id_press; + delete[] id_press; } } @@ -255,28 +255,27 @@ void FixRigidNH::init() } } - int icompute; if (tcomputeflag) { - icompute = modify->find_compute(id_temp); - if (icompute < 0) - error->all(FLERR,"Temperature ID for fix rigid nvt/npt/nph does not exist"); - temperature = modify->compute[icompute]; + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) + error->all(FLERR,"Temperature ID {} for fix {} does not exist", id_temp, style); } if (pstat_flag) { if (domain->triclinic) - error->all(FLERR,"Fix rigid npt/nph does not yet allow triclinic box"); + error->all(FLERR,"Fix {} does not yet allow triclinic box", style); // ensure no conflict with fix deform - for (int i = 0; i < modify->nfix; i++) - if (strcmp(modify->fix[i]->style,"deform") == 0) { - int *dimflag = (dynamic_cast(modify->fix[i]))->dimflag; + for (auto &ifix : modify->get_fix_by_style("^deform")) { + auto deform = dynamic_cast(ifix); + if (deform) { + int *dimflag = deform->dimflag; if ((p_flag[0] && dimflag[0]) || (p_flag[1] && dimflag[1]) || (p_flag[2] && dimflag[2])) - error->all(FLERR,"Cannot use fix rigid npt/nph and fix deform on " - "same component of stress tensor"); + error->all(FLERR,"Cannot use fix {} and fix deform on same component of stress tensor", style); } + } // set frequency @@ -295,10 +294,8 @@ void FixRigidNH::init() // set pressure compute ptr - icompute = modify->find_compute(id_press); - if (icompute < 0) - error->all(FLERR,"Pressure ID for fix rigid npt/nph does not exist"); - pressure = modify->compute[icompute]; + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR,"Pressure ID {} for fix {} does not exist", id_press, style); // detect if any rigid fixes exist so rigid bodies move on remap // rfix[] = indices to each fix rigid @@ -1209,13 +1206,11 @@ int FixRigidNH::modify_param(int narg, char **arg) modify->delete_compute(id_temp); tcomputeflag = 0; } - delete [] id_temp; + delete[] id_temp; id_temp = utils::strdup(arg[1]); - int icompute = modify->find_compute(arg[1]); - if (icompute < 0) - error->all(FLERR,"Could not find fix_modify temperature ID"); - temperature = modify->compute[icompute]; + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) error->all(FLERR,"Could not find fix_modify temperature ID {}", id_temp); if (temperature->tempflag == 0) error->all(FLERR, @@ -1226,10 +1221,9 @@ int FixRigidNH::modify_param(int narg, char **arg) // reset id_temp of pressure to new temperature ID if (pstat_flag) { - icompute = modify->find_compute(id_press); - if (icompute < 0) - error->all(FLERR,"Pressure ID for fix modify does not exist"); - modify->compute[icompute]->reset_extra_compute_fix(id_temp); + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR,"Pressure ID {} for fix modify does not exist", id_press); + pressure->reset_extra_compute_fix(id_temp); } return 2; @@ -1241,15 +1235,13 @@ int FixRigidNH::modify_param(int narg, char **arg) modify->delete_compute(id_press); pcomputeflag = 0; } - delete [] id_press; + delete[] id_press; id_press = utils::strdup(arg[1]); - - int icompute = modify->find_compute(arg[1]); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify pressure ID"); - pressure = modify->compute[icompute]; + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR,"Could not find fix_modify pressure ID {}", id_press); if (pressure->pressflag == 0) - error->all(FLERR,"Fix_modify pressure ID does not compute pressure"); + error->all(FLERR,"Fix_modify pressure ID {} does not compute pressure", id_press); return 2; } @@ -1301,21 +1293,21 @@ void FixRigidNH::allocate_order() void FixRigidNH::deallocate_chain() { if (tstat_flag) { - delete [] q_t; - delete [] q_r; - delete [] eta_t; - delete [] eta_r; - delete [] eta_dot_t; - delete [] eta_dot_r; - delete [] f_eta_t; - delete [] f_eta_r; + delete[] q_t; + delete[] q_r; + delete[] eta_t; + delete[] eta_r; + delete[] eta_dot_t; + delete[] eta_dot_r; + delete[] f_eta_t; + delete[] f_eta_r; } if (pstat_flag) { - delete [] q_b; - delete [] eta_b; - delete [] eta_dot_b; - delete [] f_eta_b; + delete[] q_b; + delete[] eta_b; + delete[] eta_dot_b; + delete[] f_eta_b; } } @@ -1323,8 +1315,8 @@ void FixRigidNH::deallocate_chain() void FixRigidNH::deallocate_order() { - delete [] w; - delete [] wdti1; - delete [] wdti2; - delete [] wdti4; + delete[] w; + delete[] wdti1; + delete[] wdti2; + delete[] wdti4; } diff --git a/src/RIGID/fix_rigid_nh_small.cpp b/src/RIGID/fix_rigid_nh_small.cpp index b00fca6a2e..6a9589f085 100644 --- a/src/RIGID/fix_rigid_nh_small.cpp +++ b/src/RIGID/fix_rigid_nh_small.cpp @@ -232,26 +232,26 @@ void FixRigidNHSmall::init() int icompute; if (tcomputeflag) { - icompute = modify->find_compute(id_temp); - if (icompute < 0) + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) error->all(FLERR,"Temperature ID {} for fix {} does not exist", id_temp, style); - temperature = modify->compute[icompute]; } if (pstat_flag) { if (domain->triclinic) - error->all(FLERR,"Fix rigid npt/nph does not yet allow triclinic box"); + error->all(FLERR,"Fix {} does not yet allow triclinic box", style); // ensure no conflict with fix deform - for (int i = 0; i < modify->nfix; i++) - if (strcmp(modify->fix[i]->style,"deform") == 0) { - int *dimflag = (dynamic_cast(modify->fix[i]))->dimflag; + for (auto &ifix : modify->get_fix_by_style("^deform")) { + auto deform = dynamic_cast(ifix); + if (deform) { + int *dimflag = deform->dimflag; if ((p_flag[0] && dimflag[0]) || (p_flag[1] && dimflag[1]) || (p_flag[2] && dimflag[2])) - error->all(FLERR, "Cannot use fix {} and fix deform on the same stress tensor component", - style); + error->all(FLERR,"Cannot use fix {} and fix deform on same component of stress tensor", style); } + } // set frequency @@ -270,10 +270,8 @@ void FixRigidNHSmall::init() // set pressure compute ptr - icompute = modify->find_compute(id_press); - if (icompute < 0) - error->all(FLERR,"Pressure ID {} for fix {} does not exist", id_press, style); - pressure = modify->compute[icompute]; + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR,"Pressure ID {} for fix {} does not exist", id_press, style); // detect if any rigid fixes exist so rigid bodies move on remap // rfix[] = indices to each fix rigid @@ -833,7 +831,7 @@ void FixRigidNHSmall::nhc_press_integrate() double lkt_press = kt; // update thermostat masses - + int dimension = domain->dimension; double tb_mass = kt / (p_freq_max * p_freq_max); q_b[0] = dimension * dimension * tb_mass; @@ -1311,9 +1309,9 @@ int FixRigidNHSmall::modify_param(int narg, char **arg) // reset id_temp of pressure to new temperature ID if (pstat_flag) { - auto icompute = modify->get_compute_by_id(id_press); - if (!icompute) error->all(FLERR,"Pressure ID {} for fix modify does not exist", id_press); - icompute->reset_extra_compute_fix(id_temp); + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR,"Pressure ID {} for fix modify does not exist", id_press); + pressure->reset_extra_compute_fix(id_temp); } return 2; From 0f375715db5773646e1f7acff266d28b73624c6e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Nov 2023 13:27:44 -0500 Subject: [PATCH 134/204] modernize --- src/OPENMP/fix_rigid_nh_omp.cpp | 8 +--- src/RIGID/fix_rigid_nh.cpp | 81 +++++++++++--------------------- src/RIGID/fix_rigid_nh.h | 5 +- src/RIGID/fix_rigid_nh_small.cpp | 81 +++++++++++--------------------- src/RIGID/fix_rigid_nh_small.h | 5 +- 5 files changed, 62 insertions(+), 118 deletions(-) diff --git a/src/OPENMP/fix_rigid_nh_omp.cpp b/src/OPENMP/fix_rigid_nh_omp.cpp index d02b69b3be..19e5d4f240 100644 --- a/src/OPENMP/fix_rigid_nh_omp.cpp +++ b/src/OPENMP/fix_rigid_nh_omp.cpp @@ -585,9 +585,7 @@ void FixRigidNHOMP::remap() domain->x2lamda(x[i],x[i]); } - if (nrigid) - for (int i = 0; i < nrigidfix; i++) - modify->fix[rfix[i]]->deform(0); + for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -617,9 +615,7 @@ void FixRigidNHOMP::remap() domain->lamda2x(x[i],x[i]); } - if (nrigid) - for (int i = 0; i< nrigidfix; i++) - modify->fix[rfix[i]]->deform(1); + for (auto &ifix : rfix) ifix->deform(1); } /* ---------------------------------------------------------------------- diff --git a/src/RIGID/fix_rigid_nh.cpp b/src/RIGID/fix_rigid_nh.cpp index ec5e7845ad..f628b639ab 100644 --- a/src/RIGID/fix_rigid_nh.cpp +++ b/src/RIGID/fix_rigid_nh.cpp @@ -45,12 +45,11 @@ using namespace RigidConst; /* ---------------------------------------------------------------------- */ FixRigidNH::FixRigidNH(LAMMPS *lmp, int narg, char **arg) : - FixRigid(lmp, narg, arg), conjqm(nullptr), w(nullptr), - wdti1(nullptr), wdti2(nullptr), wdti4(nullptr), q_t(nullptr), q_r(nullptr), - eta_t(nullptr), eta_r(nullptr), eta_dot_t(nullptr), eta_dot_r(nullptr), - f_eta_t(nullptr), f_eta_r(nullptr), q_b(nullptr), eta_b(nullptr), - eta_dot_b(nullptr), f_eta_b(nullptr), rfix(nullptr), id_temp(nullptr), - id_press(nullptr), temperature(nullptr), pressure(nullptr) + FixRigid(lmp, narg, arg), conjqm(nullptr), w(nullptr), wdti1(nullptr), wdti2(nullptr), + wdti4(nullptr), q_t(nullptr), q_r(nullptr), eta_t(nullptr), eta_r(nullptr), eta_dot_t(nullptr), + eta_dot_r(nullptr), f_eta_t(nullptr), f_eta_r(nullptr), q_b(nullptr), eta_b(nullptr), + eta_dot_b(nullptr), f_eta_b(nullptr), id_temp(nullptr), id_press(nullptr), + temperature(nullptr), pressure(nullptr) { if (tstat_flag || pstat_flag) ecouple_flag = 1; @@ -59,57 +58,54 @@ FixRigidNH::FixRigidNH(LAMMPS *lmp, int narg, char **arg) : if ((p_flag[0] == 1 && p_period[0] <= 0.0) || (p_flag[1] == 1 && p_period[1] <= 0.0) || (p_flag[2] == 1 && p_period[2] <= 0.0)) - error->all(FLERR,"Fix rigid npt/nph period must be > 0.0"); + error->all(FLERR,"Fix {} period must be > 0.0", style); if (domain->dimension == 2 && p_flag[2]) - error->all(FLERR,"Invalid fix rigid npt/nph command for a 2d simulation"); + error->all(FLERR,"Invalid fix {} command for a 2d simulation", style); if (domain->dimension == 2 && (pcouple == YZ || pcouple == XZ)) - error->all(FLERR,"Invalid fix rigid npt/nph command for a 2d simulation"); + error->all(FLERR,"Invalid fix {} command for a 2d simulation", style); if (pcouple == XYZ && (p_flag[0] == 0 || p_flag[1] == 0)) - error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); + error->all(FLERR,"Invalid fix {} command pressure settings", style); if (pcouple == XYZ && domain->dimension == 3 && p_flag[2] == 0) - error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); + error->all(FLERR,"Invalid fix {} command pressure settings", style); if (pcouple == XY && (p_flag[0] == 0 || p_flag[1] == 0)) - error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); + error->all(FLERR,"Invalid fix {} command pressure settings", style); if (pcouple == YZ && (p_flag[1] == 0 || p_flag[2] == 0)) - error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); + error->all(FLERR,"Invalid fix {} command pressure settings", style); if (pcouple == XZ && (p_flag[0] == 0 || p_flag[2] == 0)) - error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); + error->all(FLERR,"Invalid fix {} command pressure settings", style); // require periodicity in tensile dimension if (p_flag[0] && domain->xperiodic == 0) - error->all(FLERR, - "Cannot use fix rigid npt/nph on a non-periodic dimension"); + error->all(FLERR, "Cannot use fix {} on a non-periodic dimension", style); if (p_flag[1] && domain->yperiodic == 0) - error->all(FLERR, - "Cannot use fix rigid npt/nph on a non-periodic dimension"); + error->all(FLERR, "Cannot use fix {} on a non-periodic dimension", style); if (p_flag[2] && domain->zperiodic == 0) - error->all(FLERR, - "Cannot use fix rigid npt/nph on a non-periodic dimension"); + error->all(FLERR, "Cannot use fix {} on a non-periodic dimension", style); if (pcouple == XYZ && domain->dimension == 3 && (p_start[0] != p_start[1] || p_start[0] != p_start[2] || p_stop[0] != p_stop[1] || p_stop[0] != p_stop[2] || p_period[0] != p_period[1] || p_period[0] != p_period[2])) - error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); + error->all(FLERR,"Invalid fix {} command pressure settings", style); if (pcouple == XYZ && domain->dimension == 2 && (p_start[0] != p_start[1] || p_stop[0] != p_stop[1] || p_period[0] != p_period[1])) - error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); + error->all(FLERR,"Invalid fix {} command pressure settings", style); if (pcouple == XY && (p_start[0] != p_start[1] || p_stop[0] != p_stop[1] || p_period[0] != p_period[1])) - error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); + error->all(FLERR,"Invalid fix {} command pressure settings", style); if (pcouple == YZ && (p_start[1] != p_start[2] || p_stop[1] != p_stop[2] || p_period[1] != p_period[2])) - error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); + error->all(FLERR,"Invalid fix {} command pressure settings", style); if (pcouple == XZ && (p_start[0] != p_start[2] || p_stop[0] != p_stop[2] || p_period[0] != p_period[2])) - error->all(FLERR,"Invalid fix rigid npt/nph command pressure settings"); + error->all(FLERR,"Invalid fix {} command pressure settings", style); if (p_flag[0]) box_change |= BOX_CHANGE_X; if (p_flag[1]) box_change |= BOX_CHANGE_Y; @@ -119,7 +115,7 @@ FixRigidNH::FixRigidNH(LAMMPS *lmp, int narg, char **arg) : (p_flag[0] && p_period[0] <= 0.0) || (p_flag[1] && p_period[1] <= 0.0) || (p_flag[2] && p_period[2] <= 0.0)) - error->all(FLERR,"Fix rigid nvt/npt/nph damping parameters must be > 0.0"); + error->all(FLERR,"Fix {} damping parameters must be > 0.0", style); // memory allocation and initialization @@ -147,11 +143,6 @@ FixRigidNH::FixRigidNH(LAMMPS *lmp, int narg, char **arg) : eta_b[i] = eta_dot_b[i] = 0.0; } - // rigid body pointers - - nrigidfix = 0; - rfix = nullptr; - vol0 = 0.0; t0 = 1.0; @@ -172,8 +163,6 @@ FixRigidNH::~FixRigidNH() deallocate_order(); } - delete[] rfix; - if (tcomputeflag) modify->delete_compute(id_temp); delete[] id_temp; @@ -205,7 +194,7 @@ void FixRigidNH::init() if (allremap == 0) { int idilate = group->find(id_dilate); if (idilate == -1) - error->all(FLERR,"Fix rigid npt/nph dilate group ID does not exist"); + error->all(FLERR,"Fix {} dilate group ID does not exist", style); dilate_group_bit = group->bitmask[idilate]; } @@ -298,21 +287,11 @@ void FixRigidNH::init() if (!pressure) error->all(FLERR,"Pressure ID {} for fix {} does not exist", id_press, style); // detect if any rigid fixes exist so rigid bodies move on remap - // rfix[] = indices to each fix rigid // this will include self - delete[] rfix; - nrigidfix = 0; - rfix = nullptr; - - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) nrigidfix++; - if (nrigidfix) { - rfix = new int[nrigidfix]; - nrigidfix = 0; - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) rfix[nrigidfix++] = i; - } + rfix.clear(); + for (auto &ifix : modify->get_fix_list()) + if (ifix->rigid_flag) rfix.push_back(ifix); } } @@ -996,9 +975,7 @@ void FixRigidNH::remap() domain->x2lamda(x[i],x[i]); } - if (nrigidfix) - for (i = 0; i < nrigidfix; i++) - modify->fix[rfix[i]]->deform(0); + for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -1025,9 +1002,7 @@ void FixRigidNH::remap() domain->lamda2x(x[i],x[i]); } - if (nrigidfix) - for (i = 0; i< nrigidfix; i++) - modify->fix[rfix[i]]->deform(1); + for (auto &ifix : rfix) ifix->deform(1); } /* ---------------------------------------------------------------------- diff --git a/src/RIGID/fix_rigid_nh.h b/src/RIGID/fix_rigid_nh.h index 93a299f41f..7d357cfdf9 100644 --- a/src/RIGID/fix_rigid_nh.h +++ b/src/RIGID/fix_rigid_nh.h @@ -50,9 +50,8 @@ class FixRigidNH : public FixRigid { double *f_eta_b; // thermo forces double akin_t, akin_r; // translational/rotational kinetic energies - int kspace_flag; // 1 if KSpace invoked, 0 if not - int nrigidfix; // number of rigid fixes - int *rfix; // indices of rigid fixes + int kspace_flag; // 1 if KSpace invoked, 0 if not + std::vector rfix; // indices of rigid fixes double vol0; // reference volume double t0; // reference temperature diff --git a/src/RIGID/fix_rigid_nh_small.cpp b/src/RIGID/fix_rigid_nh_small.cpp index 6a9589f085..952dc29032 100644 --- a/src/RIGID/fix_rigid_nh_small.cpp +++ b/src/RIGID/fix_rigid_nh_small.cpp @@ -46,12 +46,11 @@ using namespace RigidConst; /* ---------------------------------------------------------------------- */ FixRigidNHSmall::FixRigidNHSmall(LAMMPS *lmp, int narg, char **arg) : - FixRigidSmall(lmp, narg, arg), w(nullptr), wdti1(nullptr), - wdti2(nullptr), wdti4(nullptr), q_t(nullptr), q_r(nullptr), eta_t(nullptr), - eta_r(nullptr), eta_dot_t(nullptr), eta_dot_r(nullptr), f_eta_t(nullptr), - f_eta_r(nullptr), q_b(nullptr), eta_b(nullptr), eta_dot_b(nullptr), - f_eta_b(nullptr), rfix(nullptr), id_temp(nullptr), id_press(nullptr), - temperature(nullptr), pressure(nullptr) + FixRigidSmall(lmp, narg, arg), w(nullptr), wdti1(nullptr), wdti2(nullptr), wdti4(nullptr), + q_t(nullptr), q_r(nullptr), eta_t(nullptr), eta_r(nullptr), eta_dot_t(nullptr), + eta_dot_r(nullptr), f_eta_t(nullptr), f_eta_r(nullptr), q_b(nullptr), eta_b(nullptr), + eta_dot_b(nullptr), f_eta_b(nullptr), id_temp(nullptr), id_press(nullptr), + temperature(nullptr), pressure(nullptr) { if (tstat_flag || pstat_flag) ecouple_flag = 1; @@ -139,19 +138,11 @@ FixRigidNHSmall::FixRigidNHSmall(LAMMPS *lmp, int narg, char **arg) : eta_b[i] = eta_dot_b[i] = 0.0; } - // rigid body pointers - - nrigidfix = 0; - rfix = nullptr; - vol0 = 0.0; t0 = 1.0; tcomputeflag = 0; pcomputeflag = 0; - - id_temp = nullptr; - id_press = nullptr; } /* ---------------------------------------------------------------------- */ @@ -163,16 +154,14 @@ FixRigidNHSmall::~FixRigidNHSmall() deallocate_order(); } - delete[] rfix; - if (tcomputeflag) modify->delete_compute(id_temp); - delete [] id_temp; + delete[] id_temp; // delete pressure if fix created it if (pstat_flag) { if (pcomputeflag) modify->delete_compute(id_press); - delete [] id_press; + delete[] id_press; } } @@ -274,21 +263,11 @@ void FixRigidNHSmall::init() if (!pressure) error->all(FLERR,"Pressure ID {} for fix {} does not exist", id_press, style); // detect if any rigid fixes exist so rigid bodies move on remap - // rfix[] = indices to each fix rigid // this will include self - delete[] rfix; - nrigidfix = 0; - rfix = nullptr; - - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) nrigidfix++; - if (nrigidfix) { - rfix = new int[nrigidfix]; - nrigidfix = 0; - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) rfix[nrigidfix++] = i; - } + rfix.clear(); + for (auto &ifix : modify->get_fix_list()) + if (ifix->rigid_flag) rfix.push_back(ifix); } } @@ -1058,9 +1037,7 @@ void FixRigidNHSmall::remap() domain->x2lamda(x[i],x[i]); } - if (nrigidfix) - for (i = 0; i < nrigidfix; i++) - modify->fix[rfix[i]]->deform(0); + for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -1087,9 +1064,7 @@ void FixRigidNHSmall::remap() domain->lamda2x(x[i],x[i]); } - if (nrigidfix) - for (i = 0; i< nrigidfix; i++) - modify->fix[rfix[i]]->deform(1); + for (auto &ifix : rfix) ifix->deform(1); } /* ---------------------------------------------------------------------- @@ -1382,21 +1357,21 @@ void FixRigidNHSmall::allocate_order() void FixRigidNHSmall::deallocate_chain() { if (tstat_flag) { - delete [] q_t; - delete [] q_r; - delete [] eta_t; - delete [] eta_r; - delete [] eta_dot_t; - delete [] eta_dot_r; - delete [] f_eta_t; - delete [] f_eta_r; + delete[] q_t; + delete[] q_r; + delete[] eta_t; + delete[] eta_r; + delete[] eta_dot_t; + delete[] eta_dot_r; + delete[] f_eta_t; + delete[] f_eta_r; } if (pstat_flag) { - delete [] q_b; - delete [] eta_b; - delete [] eta_dot_b; - delete [] f_eta_b; + delete[] q_b; + delete[] eta_b; + delete[] eta_dot_b; + delete[] f_eta_b; } } @@ -1404,8 +1379,8 @@ void FixRigidNHSmall::deallocate_chain() void FixRigidNHSmall::deallocate_order() { - delete [] w; - delete [] wdti1; - delete [] wdti2; - delete [] wdti4; + delete[] w; + delete[] wdti1; + delete[] wdti2; + delete[] wdti4; } diff --git a/src/RIGID/fix_rigid_nh_small.h b/src/RIGID/fix_rigid_nh_small.h index cb0d3516f6..735a15205c 100644 --- a/src/RIGID/fix_rigid_nh_small.h +++ b/src/RIGID/fix_rigid_nh_small.h @@ -49,9 +49,8 @@ class FixRigidNHSmall : public FixRigidSmall { double *f_eta_b; // thermo forces double akin_t, akin_r; // translational/rotational kinetic energies - int kspace_flag; // 1 if KSpace invoked, 0 if not - int nrigidfix; // number of rigid fixes - int *rfix; // indices of rigid fixes + int kspace_flag; // 1 if KSpace invoked, 0 if not + std::vector rfix; // indices of rigid fixes double vol0; // reference volume double t0; // reference temperature From be02ef3a536cd3b9b9223a844ad92c874de83955 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Nov 2023 08:58:27 -0500 Subject: [PATCH 135/204] fix broken link --- doc/src/fix_deposit.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/src/fix_deposit.rst b/doc/src/fix_deposit.rst index d7c78c5d15..4c256f524f 100644 --- a/doc/src/fix_deposit.rst +++ b/doc/src/fix_deposit.rst @@ -220,6 +220,8 @@ rotated configuration of the molecule. existing particle. LAMMPS will issue a warning if R is smaller than this value, based on the radii of existing and inserted particles. +.. versionadded:: TBD + The *var* and *set* keywords can be used together to provide a criterion for accepting or rejecting the addition of an individual atom, based on its coordinates. The *name* specified for the *var* keyword is the name of an @@ -236,7 +238,7 @@ created atom, one for *y*, and one for *z*. When an atom is created, its is defined. The *var* variable is then evaluated. If the returned value is 0.0, the atom is not created. If it is non-zero, the atom is created. For an example of how to use these keywords, see the -:doc:`create_atoms `command. +:doc:`create_atoms ` command. The *rate* option moves the insertion volume in the z direction (3d) or y direction (2d). This enables particles to be inserted from a From e6524b59fab72b0521eeeebca88076553313d0ac Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Nov 2023 08:58:58 -0500 Subject: [PATCH 136/204] only check significant chunk of the words --- src/info.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/info.cpp b/src/info.cpp index 948cbbfe15..491cfc728d 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -167,16 +167,16 @@ void Info::command(int narg, char **arg) if ((out != screen) && (out != logfile)) fclose(out); out = fopen(arg[idx+2],"w"); idx += 3; - } else if (strncmp(arg[idx],"communication",5) == 0) { + } else if (strncmp(arg[idx],"communication",4) == 0) { flags |= COMM; ++idx; - } else if (strncmp(arg[idx],"computes",5) == 0) { + } else if (strncmp(arg[idx],"computes",4) == 0) { flags |= COMPUTES; ++idx; - } else if (strncmp(arg[idx],"dumps",5) == 0) { + } else if (strncmp(arg[idx],"dumps",3) == 0) { flags |= DUMPS; ++idx; - } else if (strncmp(arg[idx],"fixes",5) == 0) { + } else if (strncmp(arg[idx],"fixes",3) == 0) { flags |= FIXES; ++idx; } else if (strncmp(arg[idx],"groups",3) == 0) { From be6fcaa77fe18a81cb8b00a961d68fd614596018 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 Nov 2023 12:07:05 -0500 Subject: [PATCH 137/204] modernize --- src/BOCS/fix_bocs.cpp | 94 +++---- src/BOCS/fix_bocs.h | 3 +- src/DRUDE/fix_tgnh_drude.cpp | 129 ++++------ src/DRUDE/fix_tgnh_drude.h | 3 +- src/EXTRA-FIX/fix_npt_cauchy.cpp | 76 ++---- src/EXTRA-FIX/fix_npt_cauchy.h | 3 +- src/QTB/fix_qbmsst.cpp | 38 +-- src/QTB/fix_qbmsst.h | 3 +- src/SHOCK/fix_msst.cpp | 418 ++++++++++++++----------------- src/SHOCK/fix_msst.h | 5 +- src/fix_press_berendsen.cpp | 27 +- src/fix_press_berendsen.h | 5 +- src/fix_press_langevin.cpp | 26 +- src/fix_press_langevin.h | 5 +- 14 files changed, 328 insertions(+), 507 deletions(-) diff --git a/src/BOCS/fix_bocs.cpp b/src/BOCS/fix_bocs.cpp index d35facdc5a..4918f8d879 100644 --- a/src/BOCS/fix_bocs.cpp +++ b/src/BOCS/fix_bocs.cpp @@ -69,12 +69,9 @@ const int NUM_INPUT_DATA_COLUMNS = 2; // columns in the pressure correction ---------------------------------------------------------------------- */ FixBocs::FixBocs(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), - rfix(nullptr), id_dilate(nullptr), irregular(nullptr), - id_temp(nullptr), id_press(nullptr), - eta(nullptr), eta_dot(nullptr), eta_dotdot(nullptr), - eta_mass(nullptr), etap(nullptr), etap_dot(nullptr), etap_dotdot(nullptr), - etap_mass(nullptr) + Fix(lmp, narg, arg), id_dilate(nullptr), irregular(nullptr), id_temp(nullptr), + id_press(nullptr), eta(nullptr), eta_dot(nullptr), eta_dotdot(nullptr), eta_mass(nullptr), + etap(nullptr), etap_dot(nullptr), etap_dotdot(nullptr), etap_mass(nullptr) { if (lmp->citeme) lmp->citeme->add(cite_user_bocs_package); @@ -379,9 +376,6 @@ FixBocs::FixBocs(LAMMPS *lmp, int narg, char **arg) : if (deviatoric_flag) size_vector += 1; } - nrigid = 0; - rfix = nullptr; - if (pre_exchange_flag) irregular = new Irregular(lmp); else irregular = nullptr; @@ -424,31 +418,29 @@ FixBocs::~FixBocs() { if (copymode) return; - delete [] id_dilate; - delete [] rfix; - + delete[] id_dilate; delete irregular; // delete temperature and pressure if fix created them if (tcomputeflag) modify->delete_compute(id_temp); - delete [] id_temp; + delete[] id_temp; if (tstat_flag) { - delete [] eta; - delete [] eta_dot; - delete [] eta_dotdot; - delete [] eta_mass; + delete[] eta; + delete[] eta_dot; + delete[] eta_dotdot; + delete[] eta_mass; } if (pstat_flag) { if (pcomputeflag) modify->delete_compute(id_press); - delete [] id_press; + delete[] id_press; if (mpchain) { - delete [] etap; - delete [] etap_dot; - delete [] etap_dotdot; - delete [] etap_mass; + delete[] etap; + delete[] etap_dot; + delete[] etap_dotdot; + delete[] etap_mass; } } if (p_match_coeffs) free(p_match_coeffs); @@ -596,20 +588,10 @@ void FixBocs::init() } // detect if any rigid fixes exist so rigid bodies move when box is remapped - // rfix[] = indices to each fix rigid - delete [] rfix; - nrigid = 0; - rfix = nullptr; - - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) nrigid++; - if (nrigid) { - rfix = new int[nrigid]; - nrigid = 0; - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) rfix[nrigid++] = i; - } + rfix.clear(); + for (auto &ifix : modify->get_fix_list()) + if (ifix->rigid_flag) rfix.push_back(ifix); } // NJD MRD 2 functions @@ -1204,9 +1186,7 @@ void FixBocs::remap() domain->x2lamda(x[i],x[i]); } - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(0); + for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -1351,9 +1331,7 @@ void FixBocs::remap() domain->lamda2x(x[i],x[i]); } - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(1); + for (auto &ifix : rfix) ifix->deform(1); } /* ---------------------------------------------------------------------- @@ -1512,7 +1490,7 @@ int FixBocs::modify_param(int narg, char **arg) modify->delete_compute(id_temp); tcomputeflag = 0; } - delete [] id_temp; + delete[] id_temp; id_temp = utils::strdup(arg[1]); int icompute = modify->find_compute(arg[1]); @@ -1544,29 +1522,23 @@ int FixBocs::modify_param(int narg, char **arg) modify->delete_compute(id_press); pcomputeflag = 0; } - delete [] id_press; + delete[] id_press; id_press = utils::strdup(arg[1]); - int icompute = modify->find_compute(arg[1]); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify pressure ID"); - pressure = modify->compute[icompute]; + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR,"Could not find fix_modify pressure ID {}", id_press); + if (!pressure->pressflag) + error->all(FLERR, "Fix_modify pressure ID {} does not compute pressure", id_press); - if (p_match_flag) // NJD MRD - { - if (p_basis_type == BASIS_ANALYTIC) - { - (dynamic_cast(pressure))->send_cg_info(p_basis_type, N_p_match, - p_match_coeffs, N_mol, vavg); + if (p_match_flag) { + auto bocspress = dynamic_cast(pressure); + if (bocspress) { + if (p_basis_type == BASIS_ANALYTIC) { + bocspress->send_cg_info(p_basis_type, N_p_match, p_match_coeffs, N_mol, vavg); + } else if (p_basis_type == BASIS_LINEAR_SPLINE || p_basis_type == BASIS_CUBIC_SPLINE) { + bocspress->send_cg_info(p_basis_type, splines, spline_length); + } } - else if (p_basis_type == BASIS_LINEAR_SPLINE || p_basis_type == BASIS_CUBIC_SPLINE ) - { - (dynamic_cast(pressure))->send_cg_info(p_basis_type, splines, spline_length ); - } - } - - if (pressure->pressflag == 0) - { - error->all(FLERR, "Fix_modify pressure ID does not compute pressure"); } return 2; } diff --git a/src/BOCS/fix_bocs.h b/src/BOCS/fix_bocs.h index fd47fda4d7..71fbc273d8 100644 --- a/src/BOCS/fix_bocs.h +++ b/src/BOCS/fix_bocs.h @@ -75,9 +75,8 @@ class FixBocs : public Fix { double drag, tdrag_factor; // drag factor on particle thermostat double pdrag_factor; // drag factor on barostat int kspace_flag; // 1 if KSpace invoked, 0 if not - int nrigid; // number of rigid fixes int dilate_group_bit; // mask for dilation group - int *rfix; // indices of rigid fixes + std::vector rfix; // list of rigid fixes char *id_dilate; // group name to dilate class Irregular *irregular; // for migrating atoms after box flips diff --git a/src/DRUDE/fix_tgnh_drude.cpp b/src/DRUDE/fix_tgnh_drude.cpp index 273f163303..987408fe63 100644 --- a/src/DRUDE/fix_tgnh_drude.cpp +++ b/src/DRUDE/fix_tgnh_drude.cpp @@ -52,14 +52,13 @@ enum{ISO,ANISO,TRICLINIC}; ---------------------------------------------------------------------- */ FixTGNHDrude::FixTGNHDrude(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), - rfix(nullptr), irregular(nullptr), id_temp(nullptr), id_press(nullptr), - etamol(nullptr), etamol_dot(nullptr), etamol_dotdot(nullptr), etamol_mass(nullptr), - etaint(nullptr), etaint_dot(nullptr), etaint_dotdot(nullptr), etaint_mass(nullptr), - etadrude(nullptr), etadrude_dot(nullptr), etadrude_dotdot(nullptr), etadrude_mass(nullptr), - etap(nullptr), etap_dot(nullptr), etap_dotdot(nullptr), etap_mass(nullptr) + Fix(lmp, narg, arg), irregular(nullptr), id_temp(nullptr), id_press(nullptr), etamol(nullptr), + etamol_dot(nullptr), etamol_dotdot(nullptr), etamol_mass(nullptr), etaint(nullptr), + etaint_dot(nullptr), etaint_dotdot(nullptr), etaint_mass(nullptr), etadrude(nullptr), + etadrude_dot(nullptr), etadrude_dotdot(nullptr), etadrude_mass(nullptr), etap(nullptr), + etap_dot(nullptr), etap_dotdot(nullptr), etap_mass(nullptr) { - if (narg < 4) error->all(FLERR,"Illegal fix nvt/npt/nph command"); + if (narg < 4) error->all(FLERR, "Illegal fix {} command", style); restart_global = 1; dynamic_group_allow = 0; @@ -507,9 +506,6 @@ FixTGNHDrude::FixTGNHDrude(LAMMPS *lmp, int narg, char **arg) : } } - nrigid = 0; - rfix = nullptr; - if (pre_exchange_flag) irregular = new Irregular(lmp); else irregular = nullptr; @@ -519,15 +515,15 @@ FixTGNHDrude::FixTGNHDrude(LAMMPS *lmp, int narg, char **arg) : vol0 = t0 = 0.0; // find fix drude - int ifix; - for (ifix = 0; ifix < modify->nfix; ifix++) - if (strcmp(modify->fix[ifix]->style,"drude") == 0) break; - if (ifix == modify->nfix) error->all(FLERR, "fix tgnh/drude requires fix drude"); - fix_drude = dynamic_cast(modify->fix[ifix]); + + auto fdrude = modify->get_fix_by_style("^drude"); + if (fdrude.size() < 1) error->all(FLERR, "Fix {} requires fix drude", style); + fix_drude = dynamic_cast(fdrude[0]); + if (!fix_drude) error->all(FLERR, "Fix {} requires fix drude", style); // make sure ghost atoms have velocity if (!comm->ghost_velocity) - error->all(FLERR,"fix tgnh/drude requires ghost velocities. Use comm_modify vel yes"); + error->all(FLERR,"Fix {} requires ghost velocities. Use comm_modify vel yes", style); } /* ---------------------------------------------------------------------- */ @@ -536,38 +532,36 @@ FixTGNHDrude::~FixTGNHDrude() { if (copymode) return; - delete [] rfix; - delete irregular; // delete temperature and pressure if fix created them if (tcomputeflag) modify->delete_compute(id_temp); - delete [] id_temp; + delete[] id_temp; if (tstat_flag) { - delete [] etaint; - delete [] etaint_dot; - delete [] etaint_dotdot; - delete [] etaint_mass; - delete [] etamol; - delete [] etamol_dot; - delete [] etamol_dotdot; - delete [] etamol_mass; - delete [] etadrude; - delete [] etadrude_dot; - delete [] etadrude_dotdot; - delete [] etadrude_mass; + delete[] etaint; + delete[] etaint_dot; + delete[] etaint_dotdot; + delete[] etaint_mass; + delete[] etamol; + delete[] etamol_dot; + delete[] etamol_dotdot; + delete[] etamol_mass; + delete[] etadrude; + delete[] etadrude_dot; + delete[] etadrude_dotdot; + delete[] etadrude_mass; } if (pstat_flag) { if (pcomputeflag) modify->delete_compute(id_press); - delete [] id_press; + delete[] id_press; if (mpchain) { - delete [] etap; - delete [] etap_dot; - delete [] etap_dotdot; - delete [] etap_mass; + delete[] etap; + delete[] etap_dot; + delete[] etap_dotdot; + delete[] etap_mass; } } } @@ -605,19 +599,15 @@ void FixTGNHDrude::init() // set temperature and pressure ptrs - int icompute = modify->find_compute(id_temp); - if (icompute < 0) - error->all(FLERR,"Temperature ID for fix nvt/npt does not exist"); - temperature = modify->compute[icompute]; + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) error->all(FLERR,"Temperature ID for fix {} does not exist", style); if (temperature->tempbias) which = BIAS; else which = NOBIAS; if (pstat_flag) { - icompute = modify->find_compute(id_press); - if (icompute < 0) - error->all(FLERR,"Pressure ID for fix npt/nph does not exist"); - pressure = modify->compute[icompute]; + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR,"Pressure ID for fix {} does not exist", id_press); } // set timesteps and frequencies @@ -670,20 +660,10 @@ void FixTGNHDrude::init() } // detect if any rigid fixes exist so rigid bodies move when box is remapped - // rfix[] = indices to each fix rigid - delete [] rfix; - nrigid = 0; - rfix = nullptr; - - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) nrigid++; - if (nrigid) { - rfix = new int[nrigid]; - nrigid = 0; - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) rfix[nrigid++] = i; - } + rfix.clear(); + for (auto &ifix : modify->get_fix_list()) + if (ifix->rigid_flag) rfix.push_back(ifix); } /* ---------------------------------------------------------------------- @@ -1111,9 +1091,7 @@ void FixTGNHDrude::remap() domain->x2lamda(nlocal); - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(0); + for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -1253,9 +1231,7 @@ void FixTGNHDrude::remap() domain->lamda2x(nlocal); - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(1); + for (auto &ifix : rfix) ifix->deform(1); } /* ---------------------------------------------------------------------- @@ -1426,27 +1402,23 @@ int FixTGNHDrude::modify_param(int narg, char **arg) modify->delete_compute(id_temp); tcomputeflag = 0; } - delete [] id_temp; + delete[] id_temp; id_temp = utils::strdup(arg[1]); - int icompute = modify->find_compute(arg[1]); - if (icompute < 0) - error->all(FLERR,"Could not find fix_modify temperature ID"); - temperature = modify->compute[icompute]; + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) error->all(FLERR,"Could not find fix_modify temperature ID {}", id_temp); if (temperature->tempflag == 0) - error->all(FLERR, - "Fix_modify temperature ID does not compute temperature"); + error->all(FLERR, "Fix_modify temperature ID {} does not compute temperature", id_temp); if (temperature->igroup != 0 && comm->me == 0) error->warning(FLERR,"Temperature for fix modify is not for group all"); // reset id_temp of pressure to new temperature ID if (pstat_flag) { - icompute = modify->find_compute(id_press); - if (icompute < 0) - error->all(FLERR,"Pressure ID for fix modify does not exist"); - modify->compute[icompute]->reset_extra_compute_fix(id_temp); + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR,"Pressure ID {} for fix modify does not exist", id_press); + pressure->reset_extra_compute_fix(id_temp); } return 2; @@ -1458,15 +1430,14 @@ int FixTGNHDrude::modify_param(int narg, char **arg) modify->delete_compute(id_press); pcomputeflag = 0; } - delete [] id_press; + delete[] id_press; id_press = utils::strdup(arg[1]); - int icompute = modify->find_compute(arg[1]); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify pressure ID"); - pressure = modify->compute[icompute]; + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR,"Could not find fix_modify pressure ID {}", id_press); if (pressure->pressflag == 0) - error->all(FLERR,"Fix_modify pressure ID does not compute pressure"); + error->all(FLERR,"Fix_modify pressure ID {} does not compute pressure", id_press); return 2; } diff --git a/src/DRUDE/fix_tgnh_drude.h b/src/DRUDE/fix_tgnh_drude.h index adfa69671a..b2724809b4 100644 --- a/src/DRUDE/fix_tgnh_drude.h +++ b/src/DRUDE/fix_tgnh_drude.h @@ -63,8 +63,7 @@ class FixTGNHDrude : public Fix { double omega_mass[6]; double p_current[6]; int kspace_flag; // 1 if KSpace invoked, 0 if not - int nrigid; // number of rigid fixes - int *rfix; // indices of rigid fixes + std::vector rfix; // indices of rigid fixes class Irregular *irregular; // for migrating atoms after box flips int nlevels_respa; diff --git a/src/EXTRA-FIX/fix_npt_cauchy.cpp b/src/EXTRA-FIX/fix_npt_cauchy.cpp index feb5a95c6f..f3dfd1af36 100644 --- a/src/EXTRA-FIX/fix_npt_cauchy.cpp +++ b/src/EXTRA-FIX/fix_npt_cauchy.cpp @@ -54,14 +54,12 @@ enum{ISO,ANISO,TRICLINIC}; ---------------------------------------------------------------------- */ FixNPTCauchy::FixNPTCauchy(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), - rfix(nullptr), id_dilate(nullptr), irregular(nullptr), - id_temp(nullptr), id_press(nullptr), - eta(nullptr), eta_dot(nullptr), eta_dotdot(nullptr), - eta_mass(nullptr), etap(nullptr), etap_dot(nullptr), etap_dotdot(nullptr), - etap_mass(nullptr), id_store(nullptr), init_store(nullptr) + Fix(lmp, narg, arg), id_dilate(nullptr), irregular(nullptr), id_temp(nullptr), + id_press(nullptr), eta(nullptr), eta_dot(nullptr), eta_dotdot(nullptr), eta_mass(nullptr), + etap(nullptr), etap_dot(nullptr), etap_dotdot(nullptr), etap_mass(nullptr), id_store(nullptr), + init_store(nullptr) { - if (narg < 4) error->all(FLERR,"Illegal fix npt/cauchy command"); + if (narg < 4) error->all(FLERR, "Illegal fix npt/cauchy command"); dynamic_group_allow = 1; ecouple_flag = 1; @@ -571,9 +569,6 @@ FixNPTCauchy::FixNPTCauchy(LAMMPS *lmp, int narg, char **arg) : if (deviatoric_flag) size_vector += 1; } - nrigid = 0; - rfix = nullptr; - if (pre_exchange_flag) irregular = new Irregular(lmp); else irregular = nullptr; @@ -619,8 +614,6 @@ FixNPTCauchy::~FixNPTCauchy() if (copymode) return; delete[] id_dilate; - delete[] rfix; - delete[] id_store; delete irregular; @@ -690,19 +683,16 @@ void FixNPTCauchy::init() // set temperature and pressure ptrs - int icompute = modify->find_compute(id_temp); - if (icompute < 0) - error->all(FLERR,"Temperature ID for fix npt/cauchy does not exist"); - temperature = modify->compute[icompute]; + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) + error->all(FLERR,"Temperature ID {} for fix npt/cauchy does not exist", id_temp); if (temperature->tempbias) which = BIAS; else which = NOBIAS; if (pstat_flag) { - icompute = modify->find_compute(id_press); - if (icompute < 0) - error->all(FLERR,"Pressure ID for fix npt/cauchy does not exist"); - pressure = modify->compute[icompute]; + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR,"Pressure ID {} for fix npt/cauchy does not exist", id_press); } // set timesteps and frequencies @@ -759,20 +749,10 @@ void FixNPTCauchy::init() } // detect if any rigid fixes exist so rigid bodies move when box is remapped - // rfix[] = indices to each fix rigid - delete[] rfix; - nrigid = 0; - rfix = nullptr; - - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) nrigid++; - if (nrigid) { - rfix = new int[nrigid]; - nrigid = 0; - for (int i = 0; i < modify->nfix; i++) - if (modify->fix[i]->rigid_flag) rfix[nrigid++] = i; - } + rfix.clear(); + for (auto &ifix : modify->get_fix_list()) + if (ifix->rigid_flag) rfix.push_back(ifix); } /* ---------------------------------------------------------------------- @@ -1121,9 +1101,7 @@ void FixNPTCauchy::remap() domain->x2lamda(x[i],x[i]); } - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(0); + for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -1268,9 +1246,7 @@ void FixNPTCauchy::remap() domain->lamda2x(x[i],x[i]); } - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(1); + for (auto &ifix : rfix) ifix->deform(1); } /* ---------------------------------------------------------------------- @@ -1432,23 +1408,20 @@ int FixNPTCauchy::modify_param(int narg, char **arg) delete[] id_temp; id_temp = utils::strdup(arg[1]); - int icompute = modify->find_compute(arg[1]); - if (icompute < 0) - error->all(FLERR,"Could not find fix_modify temperature ID"); - temperature = modify->compute[icompute]; + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) error->all(FLERR,"Could not find fix_modify temperature ID {}", id_temp); if (temperature->tempflag == 0) - error->all(FLERR,"Fix_modify temperature ID does not compute temperature"); + error->all(FLERR,"Fix_modify temperature ID {} does not compute temperature", id_temp); if (temperature->igroup != 0 && comm->me == 0) error->warning(FLERR,"Temperature for fix modify is not for group all"); // reset id_temp of pressure to new temperature ID if (pstat_flag) { - icompute = modify->find_compute(id_press); - if (icompute < 0) - error->all(FLERR,"Pressure ID for fix modify does not exist"); - modify->compute[icompute]->reset_extra_compute_fix(id_temp); + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR,"Pressure ID {} for fix modify does not exist", id_press); + pressure->reset_extra_compute_fix(id_temp); } return 2; @@ -1463,12 +1436,11 @@ int FixNPTCauchy::modify_param(int narg, char **arg) delete[] id_press; id_press = utils::strdup(arg[1]); - int icompute = modify->find_compute(arg[1]); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify pressure ID"); - pressure = modify->compute[icompute]; + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR,"Could not find fix_modify pressure ID {}", id_press); if (pressure->pressflag == 0) - error->all(FLERR,"Fix_modify pressure ID does not compute pressure"); + error->all(FLERR,"Fix_modify pressure ID {} does not compute pressure", id_press); return 2; } diff --git a/src/EXTRA-FIX/fix_npt_cauchy.h b/src/EXTRA-FIX/fix_npt_cauchy.h index e7e6630208..43a944acb4 100644 --- a/src/EXTRA-FIX/fix_npt_cauchy.h +++ b/src/EXTRA-FIX/fix_npt_cauchy.h @@ -73,9 +73,8 @@ class FixNPTCauchy : public Fix { double drag, tdrag_factor; // drag factor on particle thermostat double pdrag_factor; // drag factor on barostat int kspace_flag; // 1 if KSpace invoked, 0 if not - int nrigid; // number of rigid fixes int dilate_group_bit; // mask for dilation group - int *rfix; // indices of rigid fixes + std::vector rfix; // indices of rigid fixes char *id_dilate; // group name to dilate class Irregular *irregular; // for migrating atoms after box flips diff --git a/src/QTB/fix_qbmsst.cpp b/src/QTB/fix_qbmsst.cpp index b5fb5ca77c..2450561363 100644 --- a/src/QTB/fix_qbmsst.cpp +++ b/src/QTB/fix_qbmsst.cpp @@ -228,7 +228,6 @@ FixQBMSST::FixQBMSST(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) pressure = nullptr; pe = nullptr; old_velocity = nullptr; - rfix = nullptr; gfactor = nullptr; random = nullptr; omega_H = nullptr; @@ -263,17 +262,16 @@ FixQBMSST::FixQBMSST(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) FixQBMSST::~FixQBMSST() { - delete [] rfix; - delete [] gfactor; + delete[] gfactor; delete random; // delete temperature and pressure if fix created them if (tflag) modify->delete_compute(id_temp); if (pflag) modify->delete_compute(id_press); if (peflag) modify->delete_compute(id_pe); - delete [] id_temp; - delete [] id_press; - delete [] id_pe; + delete[] id_temp; + delete[] id_press; + delete[] id_pe; memory->destroy(old_velocity); memory->destroy(fran); @@ -385,18 +383,10 @@ void FixQBMSST::init() else kspace_flag = 0; // detect if any fix rigid exist so rigid bodies move when box is dilated - // rfix[] = indices to each fix rigid - nrigid = 0; - for (int i = 0; i < modify->nfix; i++) - if (utils::strmatch(modify->fix[i]->style,"^rigid") || - (strcmp(modify->fix[i]->style,"poems") == 0)) nrigid++; - if (nrigid > 0) { - rfix = new int[nrigid]; - nrigid = 0; - for (int i = 0; i < modify->nfix; i++) - if (utils::strmatch(modify->fix[i]->style,"^rigid") || - (strcmp(modify->fix[i]->style,"poems") == 0)) rfix[nrigid++] = i; - } + + rfix.clear(); + for (auto &ifix : modify->get_fix_list()) + if (ifix->rigid_flag) rfix.push_back(ifix); } /* ---------------------------------------------------------------------- @@ -787,9 +777,7 @@ void FixQBMSST::remap(int flag) domain->x2lamda(n); - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(0); + for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -810,9 +798,7 @@ void FixQBMSST::remap(int flag) domain->lamda2x(n); - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(1); + for (auto &ifix : rfix) ifix->deform(1); for (i = 0; i < n; i++) { v[i][direction] = v[i][direction] * @@ -868,7 +854,7 @@ int FixQBMSST::modify_param(int narg, char **arg) modify->delete_compute(id_temp); tflag = 0; } - delete [] id_temp; + delete[] id_temp; id_temp = utils::strdup(arg[1]); int icompute = modify->find_compute(id_temp); @@ -888,7 +874,7 @@ int FixQBMSST::modify_param(int narg, char **arg) modify->delete_compute(id_press); pflag = 0; } - delete [] id_press; + delete[] id_press; id_press = utils::strdup(arg[1]); int icompute = modify->find_compute(id_press); diff --git a/src/QTB/fix_qbmsst.h b/src/QTB/fix_qbmsst.h index ecfa5abf8e..cccb4e6a17 100644 --- a/src/QTB/fix_qbmsst.h +++ b/src/QTB/fix_qbmsst.h @@ -78,8 +78,7 @@ class FixQBMSST : public Fix { double omega[3]; // Time derivative of the volume. double total_mass; // Mass of the computational cell int kspace_flag; // 1 if KSpace invoked, 0 if not - int nrigid; // number of rigid fixes - int *rfix; // indices of rigid fixes + std::vector rfix; // indices of rigid fixes double p_current[3]; // pressure double velocity_sum; // Sum of the velocities squared. double lagrangian_position; // Lagrangian location of computational cell diff --git a/src/SHOCK/fix_msst.cpp b/src/SHOCK/fix_msst.cpp index a4c9db3fd7..55842250ec 100644 --- a/src/SHOCK/fix_msst.cpp +++ b/src/SHOCK/fix_msst.cpp @@ -41,11 +41,10 @@ using namespace FixConst; /* ---------------------------------------------------------------------- */ FixMSST::FixMSST(LAMMPS *lmp, int narg, char **arg) : - Fix(lmp, narg, arg), old_velocity(nullptr), rfix(nullptr), - id_temp(nullptr), id_press(nullptr), id_pe(nullptr), temperature(nullptr), - pressure(nullptr), pe(nullptr) + Fix(lmp, narg, arg), old_velocity(nullptr), id_temp(nullptr), id_press(nullptr), id_pe(nullptr), + temperature(nullptr), pressure(nullptr), pe(nullptr) { - if (narg < 4) error->all(FLERR,"Illegal fix msst command"); + if (narg < 4) error->all(FLERR, "Illegal fix msst command"); restart_global = 1; time_integrate = 1; @@ -80,95 +79,103 @@ FixMSST::FixMSST(LAMMPS *lmp, int narg, char **arg) : dftb = 0; beta = 0.0; - if (strcmp(arg[3],"x") == 0) { + if (strcmp(arg[3], "x") == 0) { direction = 0; box_change |= BOX_CHANGE_X; - } else if (strcmp(arg[3],"y") == 0) { + } else if (strcmp(arg[3], "y") == 0) { direction = 1; box_change |= BOX_CHANGE_Y; - } else if (strcmp(arg[3],"z") == 0) { + } else if (strcmp(arg[3], "z") == 0) { direction = 2; box_change |= BOX_CHANGE_Z; - } else error->all(FLERR,"Illegal fix msst command"); + } else + error->all(FLERR, "Illegal fix msst command"); - velocity = utils::numeric(FLERR,arg[4],false,lmp); - if (velocity < 0) error->all(FLERR,"Illegal fix msst command"); + velocity = utils::numeric(FLERR, arg[4], false, lmp); + if (velocity < 0) error->all(FLERR, "Illegal fix msst command"); // optional args int iarg = 5; while (iarg < narg) { - if (strcmp(arg[iarg],"q") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix msst command"); - qmass = utils::numeric(FLERR,arg[iarg+1],false,lmp); + if (strcmp(arg[iarg], "q") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix msst command"); + qmass = utils::numeric(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"mu") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix msst command"); - mu = utils::numeric(FLERR,arg[iarg+1],false,lmp); + } else if (strcmp(arg[iarg], "mu") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix msst command"); + mu = utils::numeric(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"p0") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix msst command"); - p0 = utils::numeric(FLERR,arg[iarg+1],false,lmp); + } else if (strcmp(arg[iarg], "p0") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix msst command"); + p0 = utils::numeric(FLERR, arg[iarg + 1], false, lmp); p0_set = 1; iarg += 2; - } else if (strcmp(arg[iarg],"v0") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix msst command"); - v0 = utils::numeric(FLERR,arg[iarg+1],false,lmp); + } else if (strcmp(arg[iarg], "v0") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix msst command"); + v0 = utils::numeric(FLERR, arg[iarg + 1], false, lmp); v0_set = 1; iarg += 2; - } else if (strcmp(arg[iarg],"e0") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix msst command"); - e0 = utils::numeric(FLERR,arg[iarg+1],false,lmp); + } else if (strcmp(arg[iarg], "e0") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix msst command"); + e0 = utils::numeric(FLERR, arg[iarg + 1], false, lmp); e0_set = 1; iarg += 2; - } else if (strcmp(arg[iarg],"tscale") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix msst command"); - tscale = utils::numeric(FLERR,arg[iarg+1],false,lmp); + } else if (strcmp(arg[iarg], "tscale") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix msst command"); + tscale = utils::numeric(FLERR, arg[iarg + 1], false, lmp); if (tscale < 0.0 || tscale > 1.0) - error->all(FLERR,"Fix msst tscale must satisfy 0 <= tscale < 1"); + error->all(FLERR, "Fix msst tscale must satisfy 0 <= tscale < 1"); iarg += 2; - } else if (strcmp(arg[iarg],"dftb") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix msst command"); - dftb = utils::logical(FLERR,arg[iarg+1],false,lmp); + } else if (strcmp(arg[iarg], "dftb") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix msst command"); + dftb = utils::logical(FLERR, arg[iarg + 1], false, lmp); iarg += 2; - } else if (strcmp(arg[iarg],"beta") == 0) { - if (iarg+2 > narg) error->all(FLERR,"Illegal fix msst command"); - beta = utils::numeric(FLERR,arg[iarg+1],false,lmp); - if (beta < 0.0 || beta > 1.0) - error->all(FLERR,"Illegal fix msst command"); + } else if (strcmp(arg[iarg], "beta") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal fix msst command"); + beta = utils::numeric(FLERR, arg[iarg + 1], false, lmp); + if (beta < 0.0 || beta > 1.0) error->all(FLERR, "Illegal fix msst command"); iarg += 2; - } else error->all(FLERR,"Illegal fix msst command"); + } else + error->all(FLERR, "Illegal fix msst command"); } // output MSST info if (comm->me == 0) { std::string mesg = "MSST parameters:\n"; - if (direction == 0) mesg += " Shock in x direction\n"; - else if (direction == 1) mesg += " Shock in y direction\n"; - else if (direction == 2) mesg += " Shock in z direction\n"; + if (direction == 0) + mesg += " Shock in x direction\n"; + else if (direction == 1) + mesg += " Shock in y direction\n"; + else if (direction == 2) + mesg += " Shock in z direction\n"; mesg += fmt::format(" Cell mass-like parameter qmass " - "(units of mass^2/length^4) = {:.8g}\n", qmass); + "(units of mass^2/length^4) = {:.8g}\n", + qmass); mesg += fmt::format(" Shock velocity = {:.8g}\n", velocity); mesg += fmt::format(" Artificial viscosity (units of mass/length/time) = {:.8g}\n", mu); if (p0_set) mesg += fmt::format(" Initial pressure specified to be {:.8g}\n", p0); - else mesg += " Initial pressure calculated on first step\n"; + else + mesg += " Initial pressure calculated on first step\n"; if (v0_set) mesg += fmt::format(" Initial volume specified to be {:.8g}\n", v0); - else mesg += " Initial volume calculated on first step\n"; + else + mesg += " Initial volume calculated on first step\n"; if (e0_set) mesg += fmt::format(" Initial energy specified to be {:.8g}\n", e0); - else mesg += " Initial energy calculated on first step\n"; - utils::logmesg(lmp,mesg); + else + mesg += " Initial energy calculated on first step\n"; + utils::logmesg(lmp, mesg); } // check for periodicity in controlled dimensions - if (domain->nonperiodic) error->all(FLERR,"Fix msst requires a periodic box"); + if (domain->nonperiodic) error->all(FLERR, "Fix msst requires a periodic box"); // create a new temperature compute // id = fix-ID + "MSST_temp" @@ -200,8 +207,6 @@ FixMSST::FixMSST(LAMMPS *lmp, int narg, char **arg) : // initialize the time derivative of the volume omega[0] = omega[1] = omega[2] = 0.0; - nrigid = 0; - rfix = nullptr; maxold = -1; old_velocity = nullptr; @@ -211,17 +216,15 @@ FixMSST::FixMSST(LAMMPS *lmp, int narg, char **arg) : FixMSST::~FixMSST() { - delete [] rfix; - // delete temperature and pressure if fix created them if (tflag) modify->delete_compute(id_temp); if (pflag) modify->delete_compute(id_press); if (peflag) modify->delete_compute(id_pe); - delete [] id_temp; - delete [] id_press; - delete [] id_pe; + delete[] id_temp; + delete[] id_press; + delete[] id_pe; memory->destroy(old_velocity); } @@ -240,22 +243,20 @@ int FixMSST::setmask() void FixMSST::init() { - if (atom->mass == nullptr) - error->all(FLERR,"Cannot use fix msst without per-type mass defined"); + if (atom->mass == nullptr) error->all(FLERR, "Cannot use fix msst without per-type mass defined"); // set compute ptrs int itemp = modify->find_compute(id_temp); int ipress = modify->find_compute(id_press); int ipe = modify->find_compute(id_pe); - if (itemp < 0 || ipress < 0|| ipe < 0) - error->all(FLERR,"Could not find fix msst compute ID"); + if (itemp < 0 || ipress < 0 || ipe < 0) error->all(FLERR, "Could not find fix msst compute ID"); if (modify->compute[itemp]->tempflag == 0) - error->all(FLERR,"Fix msst compute ID does not compute temperature"); + error->all(FLERR, "Fix msst compute ID does not compute temperature"); if (modify->compute[ipress]->pressflag == 0) - error->all(FLERR,"Fix msst compute ID does not compute pressure"); + error->all(FLERR, "Fix msst compute ID does not compute pressure"); if (modify->compute[ipe]->peflag == 0) - error->all(FLERR,"Fix msst compute ID does not compute potential energy"); + error->all(FLERR, "Fix msst compute ID does not compute potential energy"); temperature = modify->compute[itemp]; pressure = modify->compute[ipress]; @@ -271,37 +272,27 @@ void FixMSST::init() double mass = 0.0; for (int i = 0; i < atom->nlocal; i++) mass += atom->mass[atom->type[i]]; - MPI_Allreduce(&mass,&total_mass,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&mass, &total_mass, 1, MPI_DOUBLE, MPI_SUM, world); - if (force->kspace) kspace_flag = 1; - else kspace_flag = 0; + if (force->kspace) + kspace_flag = 1; + else + kspace_flag = 0; // detect if any fix rigid exist so rigid bodies move when box is dilated - // rfix[] = indices to each fix rigid - delete [] rfix; - nrigid = 0; - rfix = nullptr; - - for (int i = 0; i < modify->nfix; i++) - if (utils::strmatch(modify->fix[i]->style,"^rigid") || - utils::strmatch(modify->fix[i]->style,"^poems$")) nrigid++; - if (nrigid) { - rfix = new int[nrigid]; - nrigid = 0; - for (int i = 0; i < modify->nfix; i++) - if (utils::strmatch(modify->fix[i]->style,"^rigid") || - utils::strmatch(modify->fix[i]->style,"^poems$")) rfix[nrigid++] = i; - } + rfix.clear(); + for (auto &ifix : modify->get_fix_list()) + if (ifix->rigid_flag) rfix.push_back(ifix); // find fix external being used to drive LAMMPS from DFTB+ if (dftb) { for (int i = 0; i < modify->nfix; i++) - if (utils::strmatch(modify->fix[i]->style,"^external$")) + if (utils::strmatch(modify->fix[i]->style, "^external$")) fix_external = dynamic_cast(modify->fix[i]); if (fix_external == nullptr) - error->all(FLERR,"Fix msst dftb cannot be used w/out fix external"); + error->all(FLERR, "Fix msst dftb cannot be used w/out fix external"); } } @@ -321,29 +312,26 @@ void FixMSST::setup(int /*vflag*/) if (v0_set == 0) { v0 = compute_vol(); v0_set = 1; - if (comm->me == 0) - utils::logmesg(lmp,"Fix MSST v0 = {:.8g}\n", v0); + if (comm->me == 0) utils::logmesg(lmp, "Fix MSST v0 = {:.8g}\n", v0); } if (p0_set == 0) { p0 = p_current[direction]; p0_set = 1; - if (comm->me == 0) - utils::logmesg(lmp,"Fix MSST p0 = {:.8g}\n", p0); + if (comm->me == 0) utils::logmesg(lmp, "Fix MSST p0 = {:.8g}\n", p0); } if (e0_set == 0) { e0 = compute_etotal(); e0_set = 1; - if (comm->me == 0) - utils::logmesg(lmp,"Fix MSST e0 = {:.8g}\n", e0); + if (comm->me == 0) utils::logmesg(lmp, "Fix MSST e0 = {:.8g}\n", e0); } temperature->compute_vector(); double *ke_tensor = temperature->vector; - double ke_temp = ke_tensor[0]+ke_tensor[1]+ke_tensor[2]; + double ke_temp = ke_tensor[0] + ke_tensor[1] + ke_tensor[2]; if (ke_temp > 0.0 && tscale > 0.0) { // transfer energy from atom velocities to cell volume motion @@ -351,30 +339,30 @@ void FixMSST::setup(int /*vflag*/) double **v = atom->v; int *mask = atom->mask; - double sqrt_initial_temperature_scaling = sqrt(1.0-tscale); + double sqrt_initial_temperature_scaling = sqrt(1.0 - tscale); - double fac1 = tscale*total_mass/qmass*ke_temp/force->mvv2e; + double fac1 = tscale * total_mass / qmass * ke_temp / force->mvv2e; - omega[direction]=-1*sqrt(fac1); - double fac2 = omega[direction]/v0; + omega[direction] = -1 * sqrt(fac1); + double fac2 = omega[direction] / v0; - if ( comm->me == 0 && tscale != 1.0) - utils::logmesg(lmp,"Fix MSST initial strain rate of {:.8g} " + if (comm->me == 0 && tscale != 1.0) + utils::logmesg(lmp, + "Fix MSST initial strain rate of {:.8g} " "established by reducing temperature by factor " - "of {:.8g}\n",fac2,tscale); + "of {:.8g}\n", + fac2, tscale); for (int i = 0; i < atom->nlocal; i++) { if (mask[i] & groupbit) { - for (int k = 0; k < 3; k++) { - v[i][k]*=sqrt_initial_temperature_scaling; - } + for (int k = 0; k < 3; k++) { v[i][k] *= sqrt_initial_temperature_scaling; } } } } // trigger virial computation on next timestep - pe->addstep(update->ntimestep+1); - pressure->addstep(update->ntimestep+1); + pe->addstep(update->ntimestep + 1); + pressure->addstep(update->ntimestep + 1); } /* ---------------------------------------------------------------------- @@ -383,8 +371,8 @@ void FixMSST::setup(int /*vflag*/) void FixMSST::initial_integrate(int /*vflag*/) { - int i,k; - double p_msst; // MSST driving pressure + int i, k; + double p_msst; // MSST driving pressure double vol; int nlocal = atom->nlocal; @@ -401,7 +389,7 @@ void FixMSST::initial_integrate(int /*vflag*/) if (nlocal > maxold) { memory->destroy(old_velocity); maxold = atom->nmax; - memory->create(old_velocity,maxold,3,"msst:old_velocity"); + memory->create(old_velocity, maxold, 3, "msst:old_velocity"); } // for DFTB, extract TS_dftb from fix external @@ -409,14 +397,14 @@ void FixMSST::initial_integrate(int /*vflag*/) if (dftb) { const double TS_dftb = fix_external->compute_vector(0); - const double TS = force->ftm2v*TS_dftb; + const double TS = force->ftm2v * TS_dftb; // update S_elec terms and compute TS_dot via finite differences S_elec_2 = S_elec_1; S_elec_1 = S_elec; const double Temp = temperature->compute_scalar(); - S_elec = TS/Temp; - TS_dot = Temp*(3.0*S_elec-4.0*S_elec_1+S_elec_2)/(2.0*update->dt); - TS_int += (update->dt*TS_dot); + S_elec = TS / Temp; + TS_dot = Temp * (3.0 * S_elec - 4.0 * S_elec_1 + S_elec_2) / (2.0 * update->dt); + TS_int += (update->dt * TS_dot); if (update->ntimestep == 1) T0S0 = TS; } @@ -434,11 +422,9 @@ void FixMSST::initial_integrate(int /*vflag*/) // propagate the time derivative of // the volume 1/2 step at fixed vol, r, rdot - p_msst = nktv2p * mvv2e * velocity * velocity * total_mass * - ( v0 - vol)/( v0 * v0); - double A = total_mass * ( p_current[sd] - p0 - p_msst ) / - (qmass * nktv2p * mvv2e); - double B = total_mass * mu / ( qmass * vol ); + p_msst = nktv2p * mvv2e * velocity * velocity * total_mass * (v0 - vol) / (v0 * v0); + double A = total_mass * (p_current[sd] - p0 - p_msst) / (qmass * nktv2p * mvv2e); + double B = total_mass * mu / (qmass * vol); // prevent blow-up of the volume @@ -447,11 +433,10 @@ void FixMSST::initial_integrate(int /*vflag*/) // use Taylor expansion to avoid singularity at B = 0 if (B * dthalf > 1.0e-06) { - omega[sd] = ( omega[sd] + A * ( exp(B * dthalf) - 1.0 ) / B ) - * exp(-B * dthalf); + omega[sd] = (omega[sd] + A * (exp(B * dthalf) - 1.0) / B) * exp(-B * dthalf); } else { omega[sd] = omega[sd] + (A - B * omega[sd]) * dthalf + - 0.5 * (B * B * omega[sd] - A * B ) * dthalf * dthalf; + 0.5 * (B * B * omega[sd] - A * B) * dthalf * dthalf; } // propagate velocity sum 1/2 step by @@ -464,20 +449,19 @@ void FixMSST::initial_integrate(int /*vflag*/) if (mask[i] & groupbit) { for (k = 0; k < 3; k++) { const double C = f[i][k] * force->ftm2v / mass[type[i]]; - const double TS_term = TS_dot/(mass[type[i]]*velocity_sum); - const double escale_term = force->ftm2v*beta*(e0-e_scale) / - (mass[type[i]]*velocity_sum); - double D = mu * omega[sd] * omega[sd] / - (velocity_sum * mass[type[i]] * vol ); + const double TS_term = TS_dot / (mass[type[i]] * velocity_sum); + const double escale_term = + force->ftm2v * beta * (e0 - e_scale) / (mass[type[i]] * velocity_sum); + double D = mu * omega[sd] * omega[sd] / (velocity_sum * mass[type[i]] * vol); D += escale_term - TS_term; old_velocity[i][k] = v[i][k]; if (k == direction) D -= 2.0 * omega[sd] / vol; if (fabs(dthalf * D) > 1.0e-06) { const double expd = exp(D * dthalf); - v[i][k] = expd * ( C + D * v[i][k] - C / expd ) / D; + v[i][k] = expd * (C + D * v[i][k] - C / expd) / D; } else { - v[i][k] = v[i][k] + ( C + D * v[i][k] ) * dthalf + - 0.5 * (D * D * v[i][k] + C * D ) * dthalf * dthalf; + v[i][k] = v[i][k] + (C + D * v[i][k]) * dthalf + + 0.5 * (D * D * v[i][k] + C * D) * dthalf * dthalf; } } } @@ -487,18 +471,15 @@ void FixMSST::initial_integrate(int /*vflag*/) if (mask[i] & groupbit) { for (k = 0; k < 3; k++) { const double C = f[i][k] * force->ftm2v / mass[type[i]]; - double D = mu * omega[sd] * omega[sd] / - (velocity_sum * mass[type[i]] * vol ); + double D = mu * omega[sd] * omega[sd] / (velocity_sum * mass[type[i]] * vol); old_velocity[i][k] = v[i][k]; - if (k == direction) { - D -= 2.0 * omega[sd] / vol; - } + if (k == direction) { D -= 2.0 * omega[sd] / vol; } if (fabs(dthalf * D) > 1.0e-06) { const double expd = exp(D * dthalf); - v[i][k] = expd * ( C + D * v[i][k] - C / expd ) / D; + v[i][k] = expd * (C + D * v[i][k] - C / expd) / D; } else { - v[i][k] = v[i][k] + ( C + D * v[i][k] ) * dthalf + - 0.5 * (D * D * v[i][k] + C * D ) * dthalf * dthalf; + v[i][k] = v[i][k] + (C + D * v[i][k]) * dthalf + + 0.5 * (D * D * v[i][k] + C * D) * dthalf * dthalf; } } } @@ -524,19 +505,18 @@ void FixMSST::initial_integrate(int /*vflag*/) if (mask[i] & groupbit) { for (k = 0; k < 3; k++) { const double C = f[i][k] * force->ftm2v / mass[type[i]]; - const double TS_term = TS_dot/(mass[type[i]]*velocity_sum); - const double escale_term = force->ftm2v*beta*(e0-e_scale) / - (mass[type[i]]*velocity_sum); - double D = mu * omega[sd] * omega[sd] / - (velocity_sum * mass[type[i]] * vol ); + const double TS_term = TS_dot / (mass[type[i]] * velocity_sum); + const double escale_term = + force->ftm2v * beta * (e0 - e_scale) / (mass[type[i]] * velocity_sum); + double D = mu * omega[sd] * omega[sd] / (velocity_sum * mass[type[i]] * vol); D += escale_term - TS_term; if (k == direction) D -= 2.0 * omega[sd] / vol; if (fabs(dthalf * D) > 1.0e-06) { const double expd = exp(D * dthalf); - v[i][k] = expd * ( C + D * v[i][k] - C / expd ) / D; + v[i][k] = expd * (C + D * v[i][k] - C / expd) / D; } else { - v[i][k] = v[i][k] + ( C + D * v[i][k] ) * dthalf + - 0.5 * (D * D * v[i][k] + C * D ) * dthalf * dthalf; + v[i][k] = v[i][k] + (C + D * v[i][k]) * dthalf + + 0.5 * (D * D * v[i][k] + C * D) * dthalf * dthalf; } } } @@ -546,17 +526,14 @@ void FixMSST::initial_integrate(int /*vflag*/) if (mask[i] & groupbit) { for (k = 0; k < 3; k++) { const double C = f[i][k] * force->ftm2v / mass[type[i]]; - double D = mu * omega[sd] * omega[sd] / - (velocity_sum * mass[type[i]] * vol ); - if (k == direction) { - D -= 2.0 * omega[sd] / vol; - } + double D = mu * omega[sd] * omega[sd] / (velocity_sum * mass[type[i]] * vol); + if (k == direction) { D -= 2.0 * omega[sd] / vol; } if (fabs(dthalf * D) > 1.0e-06) { const double expd = exp(D * dthalf); - v[i][k] = expd * ( C + D * v[i][k] - C / expd ) / D; + v[i][k] = expd * (C + D * v[i][k] - C / expd) / D; } else { - v[i][k] = v[i][k] + ( C + D * v[i][k] ) * dthalf + - 0.5 * (D * D * v[i][k] + C * D ) * dthalf * dthalf; + v[i][k] = v[i][k] + (C + D * v[i][k]) * dthalf + + 0.5 * (D * D * v[i][k] + C * D) * dthalf * dthalf; } } } @@ -569,7 +546,7 @@ void FixMSST::initial_integrate(int /*vflag*/) // rescale positions and change box size - dilation[sd] = vol1/vol; + dilation[sd] = vol1 / vol; remap(0); // propagate particle positions 1 time step @@ -588,7 +565,7 @@ void FixMSST::initial_integrate(int /*vflag*/) // rescale positions and change box size - dilation[sd] = vol2/vol1; + dilation[sd] = vol2 / vol1; remap(0); if (kspace_flag) force->kspace->setup(); @@ -601,7 +578,7 @@ void FixMSST::initial_integrate(int /*vflag*/) void FixMSST::final_integrate() { int i; - double p_msst; // MSST driving pressure + double p_msst; // MSST driving pressure // v update only for atoms in MSST group @@ -624,14 +601,14 @@ void FixMSST::final_integrate() if (dftb) { const double TS_dftb = fix_external->compute_vector(0); - const double TS = force->ftm2v*TS_dftb; + const double TS = force->ftm2v * TS_dftb; S_elec_2 = S_elec_1; S_elec_1 = S_elec; const double Temp = temperature->compute_scalar(); // update S_elec terms and compute TS_dot via finite differences - S_elec = TS/Temp; - TS_dot = Temp*(3.0*S_elec-4.0*S_elec_1+S_elec_2)/(2.0*update->dt); - TS_int += (update->dt*TS_dot); + S_elec = TS / Temp; + TS_dot = Temp * (3.0 * S_elec - 4.0 * S_elec_1 + S_elec_2) / (2.0 * update->dt); + TS_int += (update->dt * TS_dot); if (update->ntimestep == 1) T0S0 = TS; } @@ -642,19 +619,18 @@ void FixMSST::final_integrate() if (mask[i] & groupbit) { for (int k = 0; k < 3; k++) { const double C = f[i][k] * force->ftm2v / mass[type[i]]; - const double TS_term = TS_dot/(mass[type[i]]*velocity_sum); - const double escale_term = force->ftm2v*beta*(e0-e_scale) / - (mass[type[i]]*velocity_sum); - double D = mu * omega[sd] * omega[sd] / - (velocity_sum * mass[type[i]] * vol ); + const double TS_term = TS_dot / (mass[type[i]] * velocity_sum); + const double escale_term = + force->ftm2v * beta * (e0 - e_scale) / (mass[type[i]] * velocity_sum); + double D = mu * omega[sd] * omega[sd] / (velocity_sum * mass[type[i]] * vol); D += escale_term - TS_term; if (k == direction) D -= 2.0 * omega[sd] / vol; if (fabs(dthalf * D) > 1.0e-06) { const double expd = exp(D * dthalf); - v[i][k] = expd * ( C + D * v[i][k] - C / expd ) / D; + v[i][k] = expd * (C + D * v[i][k] - C / expd) / D; } else { - v[i][k] = v[i][k] + ( C + D * v[i][k] ) * dthalf + - 0.5 * (D * D * v[i][k] + C * D ) * dthalf * dthalf; + v[i][k] = v[i][k] + (C + D * v[i][k]) * dthalf + + 0.5 * (D * D * v[i][k] + C * D) * dthalf * dthalf; } } } @@ -664,17 +640,14 @@ void FixMSST::final_integrate() if (mask[i] & groupbit) { for (int k = 0; k < 3; k++) { const double C = f[i][k] * force->ftm2v / mass[type[i]]; - double D = mu * omega[sd] * omega[sd] / - (velocity_sum * mass[type[i]] * vol ); - if (k == direction) { - D -= 2.0 * omega[sd] / vol; - } + double D = mu * omega[sd] * omega[sd] / (velocity_sum * mass[type[i]] * vol); + if (k == direction) { D -= 2.0 * omega[sd] / vol; } if (fabs(dthalf * D) > 1.0e-06) { const double expd = exp(D * dthalf); - v[i][k] = expd * ( C + D * v[i][k] - C / expd ) / D; + v[i][k] = expd * (C + D * v[i][k] - C / expd) / D; } else { - v[i][k] = v[i][k] + ( C + D * v[i][k] ) * dthalf + - 0.5 * (D * D * v[i][k] + C * D ) * dthalf * dthalf; + v[i][k] = v[i][k] + (C + D * v[i][k]) * dthalf + + 0.5 * (D * D * v[i][k] + C * D) * dthalf * dthalf; } } } @@ -692,11 +665,9 @@ void FixMSST::final_integrate() // propagate the time derivative of the volume 1/2 step at fixed V, r, rdot - p_msst = nktv2p * mvv2e * velocity * velocity * total_mass * - ( v0 - vol )/( v0 * v0 ); - double A = total_mass * ( p_current[sd] - p0 - p_msst ) / - ( qmass * nktv2p * mvv2e ); - const double B = total_mass * mu / ( qmass * vol ); + p_msst = nktv2p * mvv2e * velocity * velocity * total_mass * (v0 - vol) / (v0 * v0); + double A = total_mass * (p_current[sd] - p0 - p_msst) / (qmass * nktv2p * mvv2e); + const double B = total_mass * mu / (qmass * vol); // prevent blow-up of the volume @@ -705,21 +676,20 @@ void FixMSST::final_integrate() // use taylor expansion to avoid singularity at B == 0. if (B * dthalf > 1.0e-06) { - omega[sd] = ( omega[sd] + A * - ( exp(B * dthalf) - 1.0 ) / B ) * exp(-B * dthalf); + omega[sd] = (omega[sd] + A * (exp(B * dthalf) - 1.0) / B) * exp(-B * dthalf); } else { omega[sd] = omega[sd] + (A - B * omega[sd]) * dthalf + - 0.5 * (B * B * omega[sd] - A * B ) * dthalf * dthalf; + 0.5 * (B * B * omega[sd] - A * B) * dthalf * dthalf; } // calculate Lagrangian position of computational cell - lagrangian_position -= velocity*vol/v0*update->dt; + lagrangian_position -= velocity * vol / v0 * update->dt; // trigger energy and virial computation on next timestep - pe->addstep(update->ntimestep+1); - pressure->addstep(update->ntimestep+1); + pe->addstep(update->ntimestep + 1); + pressure->addstep(update->ntimestep + 1); } /* ---------------------------------------------------------------------- */ @@ -741,20 +711,20 @@ void FixMSST::couple() void FixMSST::remap(int flag) { - int i,n; - double oldlo,oldhi,ctr; + int i, n; + double oldlo, oldhi, ctr; double **v = atom->v; - if (flag) n = atom->nlocal + atom->nghost; - else n = atom->nlocal; + if (flag) + n = atom->nlocal + atom->nghost; + else + n = atom->nlocal; // convert pertinent atoms and rigid bodies to lamda coords domain->x2lamda(n); - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(0); + for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -763,8 +733,8 @@ void FixMSST::remap(int flag) oldlo = domain->boxlo[i]; oldhi = domain->boxhi[i]; ctr = 0.5 * (oldlo + oldhi); - domain->boxlo[i] = (oldlo-ctr)*dilation[i] + ctr; - domain->boxhi[i] = (oldhi-ctr)*dilation[i] + ctr; + domain->boxlo[i] = (oldlo - ctr) * dilation[i] + ctr; + domain->boxhi[i] = (oldhi - ctr) * dilation[i] + ctr; } } @@ -775,14 +745,9 @@ void FixMSST::remap(int flag) domain->lamda2x(n); - if (nrigid) - for (i = 0; i < nrigid; i++) - modify->fix[rfix[i]]->deform(1); + for (auto &ifix : rfix) ifix->deform(1); - for (i = 0; i < n; i++) { - v[i][direction] = v[i][direction] * - dilation[direction]; - } + for (i = 0; i < n; i++) v[i][direction] = v[i][direction] * dilation[direction]; } /* ---------------------------------------------------------------------- @@ -800,8 +765,8 @@ void FixMSST::write_restart(FILE *fp) list[n++] = TS_int; if (comm->me == 0) { int size = n * sizeof(double); - fwrite(&size,sizeof(int),1,fp); - fwrite(&list,sizeof(double),n,fp); + fwrite(&size, sizeof(int), 1, fp); + fwrite(&list, sizeof(double), n, fp); } } @@ -818,7 +783,7 @@ void FixMSST::restart(char *buf) v0 = list[n++]; p0 = list[n++]; TS_int = list[n++]; - tscale = 0.0; // set tscale to zero for restart + tscale = 0.0; // set tscale to zero for restart p0_set = 1; v0_set = 1; e0_set = 1; @@ -828,43 +793,43 @@ void FixMSST::restart(char *buf) int FixMSST::modify_param(int narg, char **arg) { - if (strcmp(arg[0],"temp") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + if (strcmp(arg[0], "temp") == 0) { + if (narg < 2) error->all(FLERR, "Illegal fix_modify command"); if (tflag) { modify->delete_compute(id_temp); tflag = 0; } - delete [] id_temp; + delete[] id_temp; id_temp = utils::strdup(arg[1]); int icompute = modify->find_compute(id_temp); - if (icompute < 0) - error->all(FLERR,"Could not find fix_modify temperature ID"); + if (icompute < 0) error->all(FLERR, "Could not find fix_modify temperature ID"); temperature = modify->compute[icompute]; if (temperature->tempflag == 0) - error->all(FLERR,"Fix_modify temperature ID does not " + error->all(FLERR, + "Fix_modify temperature ID does not " "compute temperature"); if (temperature->igroup != 0 && comm->me == 0) - error->warning(FLERR,"Temperature for MSST is not for group all"); + error->warning(FLERR, "Temperature for MSST is not for group all"); return 2; - } else if (strcmp(arg[0],"press") == 0) { - if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + } else if (strcmp(arg[0], "press") == 0) { + if (narg < 2) error->all(FLERR, "Illegal fix_modify command"); if (pflag) { modify->delete_compute(id_press); pflag = 0; } - delete [] id_press; + delete[] id_press; id_press = utils::strdup(arg[1]); int icompute = modify->find_compute(id_press); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify pressure ID"); + if (icompute < 0) error->all(FLERR, "Could not find fix_modify pressure ID"); pressure = modify->compute[icompute]; if (pressure->pressflag == 0) - error->all(FLERR,"Fix_modify pressure ID does not compute pressure"); + error->all(FLERR, "Fix_modify pressure ID does not compute pressure"); return 2; } return 0; @@ -887,10 +852,9 @@ double FixMSST::compute_scalar() i = direction; energy = qmass * omega[i] * omega[i] / (2.0 * total_mass) * mvv2e; - energy -= 0.5 * total_mass * velocity * velocity * - (1.0 - volume/ v0) * - (1.0 - volume/ v0) * mvv2e; - energy -= p0 * ( v0 - volume ) / nktv2p; + energy -= + 0.5 * total_mass * velocity * velocity * (1.0 - volume / v0) * (1.0 - volume / v0) * mvv2e; + energy -= p0 * (v0 - volume) / nktv2p; // subtract off precomputed TS_int integral value // TS_int = 0 for non DFTB calculations @@ -938,8 +902,7 @@ double FixMSST::compute_hugoniot() v = compute_vol(); - dhugo = (0.5 * (p + p0 ) * ( v0 - v)) / - force->nktv2p + e0 - e; + dhugo = (0.5 * (p + p0) * (v0 - v)) / force->nktv2p + e0 - e; dhugo /= temperature->dof * force->boltz; return dhugo; @@ -964,8 +927,7 @@ double FixMSST::compute_rayleigh() v = compute_vol(); drayleigh = p - p0 - - total_mass * velocity * velocity * force->mvv2e * - (1.0 - v / v0 ) * force->nktv2p / v0; + total_mass * velocity * velocity * force->mvv2e * (1.0 - v / v0) * force->nktv2p / v0; return drayleigh; } @@ -978,7 +940,7 @@ double FixMSST::compute_rayleigh() double FixMSST::compute_lagrangian_speed() { double v = compute_vol(); - return velocity*(1.0-v/v0); + return velocity * (1.0 - v / v0); } /* ---------------------------------------------------------------------- @@ -988,7 +950,7 @@ double FixMSST::compute_lagrangian_speed() double FixMSST::compute_lagrangian_position() { - return lagrangian_position; + return lagrangian_position; } /* ---------------------------------------------------------------------- */ @@ -997,11 +959,11 @@ double FixMSST::compute_etotal() { if (!pe) return 0.0; - double epot,ekin,etot; + double epot, ekin, etot; epot = pe->compute_scalar(); ekin = temperature->compute_scalar(); ekin *= 0.5 * temperature->dof * force->boltz; - etot = epot+ekin; + etot = epot + ekin; return etot; } @@ -1028,12 +990,10 @@ double FixMSST::compute_vsum() double t = 0.0; for (int i = 0; i < nlocal; i++) { - if (mask[i] & groupbit) { - t += (v[i][0]*v[i][0] + v[i][1]*v[i][1] + v[i][2]*v[i][2]) ; - } + if (mask[i] & groupbit) { t += (v[i][0] * v[i][0] + v[i][1] * v[i][1] + v[i][2] * v[i][2]); } } - MPI_Allreduce(&t,&vsum,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&t, &vsum, 1, MPI_DOUBLE, MPI_SUM, world); return vsum; } @@ -1043,6 +1003,6 @@ double FixMSST::compute_vsum() double FixMSST::memory_usage() { - double bytes = 3*atom->nmax * sizeof(double); + double bytes = 3 * atom->nmax * sizeof(double); return bytes; } diff --git a/src/SHOCK/fix_msst.h b/src/SHOCK/fix_msst.h index 8cd3f79a89..c7d4983dc4 100644 --- a/src/SHOCK/fix_msst.h +++ b/src/SHOCK/fix_msst.h @@ -64,9 +64,8 @@ class FixMSST : public Fix { double **old_velocity; // saved velocities - int kspace_flag; // 1 if KSpace invoked, 0 if not - int nrigid; // number of rigid fixes - int *rfix; // indices of rigid fixes + int kspace_flag; // 1 if KSpace invoked, 0 if not + std::vector rfix; // indices of rigid fixes char *id_temp, *id_press; // strings with identifiers of char *id_pe; // created computes diff --git a/src/fix_press_berendsen.cpp b/src/fix_press_berendsen.cpp index 05e523abae..40dcdeeb10 100644 --- a/src/fix_press_berendsen.cpp +++ b/src/fix_press_berendsen.cpp @@ -223,17 +223,12 @@ FixPressBerendsen::FixPressBerendsen(LAMMPS *lmp, int narg, char **arg) : id_press = utils::strdup(std::string(id) + "_press"); modify->add_compute(fmt::format("{} all pressure {}", id_press, id_temp)); pflag = 1; - - nrigid = 0; - rfix = nullptr; } /* ---------------------------------------------------------------------- */ FixPressBerendsen::~FixPressBerendsen() { - delete[] rfix; - // delete temperature and pressure if fix created them if (tflag) modify->delete_compute(id_temp); @@ -291,20 +286,10 @@ void FixPressBerendsen::init() kspace_flag = 0; // detect if any rigid fixes exist so rigid bodies move when box is remapped - // rfix[] = indices to each fix rigid - delete[] rfix; - nrigid = 0; - rfix = nullptr; - - for (const auto &ifix : modify->get_fix_list()) - if (ifix->rigid_flag) nrigid++; - if (nrigid > 0) { - rfix = new Fix *[nrigid]; - nrigid = 0; - for (auto &ifix : modify->get_fix_list()) - if (ifix->rigid_flag) rfix[nrigid++] = ifix; - } + rfix.clear(); + for (auto &ifix : modify->get_fix_list()) + if (ifix->rigid_flag) rfix.push_back(ifix); } /* ---------------------------------------------------------------------- @@ -409,8 +394,7 @@ void FixPressBerendsen::remap() if (mask[i] & groupbit) domain->x2lamda(x[i], x[i]); } - if (nrigid) - for (i = 0; i < nrigid; i++) rfix[i]->deform(0); + for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -436,8 +420,7 @@ void FixPressBerendsen::remap() if (mask[i] & groupbit) domain->lamda2x(x[i], x[i]); } - if (nrigid) - for (i = 0; i < nrigid; i++) rfix[i]->deform(1); + for (auto &ifix : rfix) ifix->deform(1); } /* ---------------------------------------------------------------------- */ diff --git a/src/fix_press_berendsen.h b/src/fix_press_berendsen.h index 9e83533746..ddbe31e7ed 100644 --- a/src/fix_press_berendsen.h +++ b/src/fix_press_berendsen.h @@ -44,9 +44,8 @@ class FixPressBerendsen : public Fix { double p_period[3], p_target[3]; double p_current[3], dilation[3]; double factor[3]; - int kspace_flag; // 1 if KSpace invoked, 0 if not - int nrigid; // number of rigid fixes - class Fix **rfix; // indices of rigid fixes + int kspace_flag; // 1 if KSpace invoked, 0 if not + std::vector rfix; // indices of rigid fixes char *id_temp, *id_press; class Compute *temperature, *pressure; diff --git a/src/fix_press_langevin.cpp b/src/fix_press_langevin.cpp index 2f6e765cd5..752f826dfe 100644 --- a/src/fix_press_langevin.cpp +++ b/src/fix_press_langevin.cpp @@ -376,9 +376,6 @@ FixPressLangevin::FixPressLangevin(LAMMPS *lmp, int narg, char **arg) : (1.0 + p_alpha[i] * update->dt / 2.0 / p_mass[i]); gjfb[i] = 1. / (1.0 + p_alpha[i] * update->dt / 2.0 / p_mass[i]); } - - nrigid = 0; - rfix = nullptr; } /* ---------------------------------------------------------------------- */ @@ -386,7 +383,6 @@ FixPressLangevin::FixPressLangevin(LAMMPS *lmp, int narg, char **arg) : FixPressLangevin::~FixPressLangevin() { delete random; - delete[] rfix; delete irregular; // delete temperature and pressure if fix created them @@ -437,20 +433,10 @@ void FixPressLangevin::init() kspace_flag = 0; // detect if any rigid fixes exist so rigid bodies move when box is remapped - // rfix[] = indices to each fix rigid - delete[] rfix; - nrigid = 0; - rfix = nullptr; - - for (const auto &ifix : modify->get_fix_list()) - if (ifix->rigid_flag) nrigid++; - if (nrigid > 0) { - rfix = new Fix *[nrigid]; - nrigid = 0; - for (auto &ifix : modify->get_fix_list()) - if (ifix->rigid_flag) rfix[nrigid++] = ifix; - } + rfix.clear(); + for (auto &ifix : modify->get_fix_list()) + if (ifix->rigid_flag) rfix.push_back(ifix); // Nullifies piston derivatives and forces so that it is not integrated at // the start of a second run. @@ -680,8 +666,7 @@ void FixPressLangevin::remap() if (mask[i] & groupbit) domain->x2lamda(x[i], x[i]); } - if (nrigid) - for (i = 0; i < nrigid; i++) rfix[i]->deform(0); + for (auto &ifix : rfix) ifix->deform(0); // reset global and local box to new size/shape @@ -719,8 +704,7 @@ void FixPressLangevin::remap() if (mask[i] & groupbit) domain->lamda2x(x[i], x[i]); } - if (nrigid) - for (i = 0; i < nrigid; i++) rfix[i]->deform(1); + for (auto &ifix : rfix) ifix->deform(1); } /* ---------------------------------------------------------------------- diff --git a/src/fix_press_langevin.h b/src/fix_press_langevin.h index 868993b1f4..498f9443a7 100644 --- a/src/fix_press_langevin.h +++ b/src/fix_press_langevin.h @@ -51,9 +51,8 @@ class FixPressLangevin : public Fix { double p_deriv[6], dilation[6]; double f_piston[6], f_old_piston[6]; double gjfa[6], gjfb[6], fran[6]; - int kspace_flag; // 1 if KSpace invoked, 0 if not - int nrigid; // number of rigid fixes - class Fix **rfix; // list of rigid fixes + int kspace_flag; // 1 if KSpace invoked, 0 if not + std::vector rfix; // indices of rigid fixes char *id_temp, *id_press; class Compute *temperature, *pressure; From 3390a11312e81f79592d44351b781473937c3e27 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 12 Nov 2023 10:04:04 -0500 Subject: [PATCH 138/204] improve error detection and messages --- src/variable.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/variable.cpp b/src/variable.cpp index 264dcf6258..9c0307341a 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -3397,18 +3397,18 @@ tagint Variable::int_between_brackets(char *&ptr, int varallow) char *id = start+2; int ivar = find(id); if (ivar < 0) - error->all(FLERR,"Invalid variable name in variable formula"); + error->all(FLERR,"Invalid variable name {} in variable formula", id); char *var = retrieve(id); if (var == nullptr) - error->all(FLERR,"Invalid variable evaluation in variable formula"); + error->all(FLERR,"Invalid variable evaluation for variable {} in variable formula", id); index = static_cast (atof(var)); } else index = ATOTAGINT(start); *ptr = ']'; - if (index == 0) + if (index <= 0) error->all(FLERR,"Index between variable brackets must be positive"); return index; } From 443f0666b706602fb97d0544a22effa0fa1e1c95 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 12 Nov 2023 16:03:25 -0500 Subject: [PATCH 139/204] refactor some more temperature/pressure/pe compute lookups --- src/EXTRA-FIX/fix_pafi.cpp | 29 +++++++++---------- src/EXTRA-FIX/fix_temp_csld.cpp | 32 +++++++++------------ src/EXTRA-FIX/fix_temp_csvr.cpp | 29 ++++++++----------- src/PLUMED/fix_plumed.cpp | 16 +++++------ src/QTB/fix_qbmsst.cpp | 48 ++++++++++++++----------------- src/QTB/fix_qtb.cpp | 12 ++++---- src/SHOCK/fix_msst.cpp | 51 ++++++++++++++------------------- src/SHOCK/fix_nphug.cpp | 9 +++--- src/UEF/fix_nh_uef.cpp | 20 ++++++------- 9 files changed, 105 insertions(+), 141 deletions(-) diff --git a/src/EXTRA-FIX/fix_pafi.cpp b/src/EXTRA-FIX/fix_pafi.cpp index 596bfdf667..05ee6b90da 100644 --- a/src/EXTRA-FIX/fix_pafi.cpp +++ b/src/EXTRA-FIX/fix_pafi.cpp @@ -77,14 +77,14 @@ FixPAFI::FixPAFI(LAMMPS *lmp, int narg, char **arg) : computename = utils::strdup(&arg[3][0]); - icompute = modify->find_compute(computename); - if (icompute == -1) - error->all(FLERR,"Compute ID for fix pafi does not exist"); - PathCompute = modify->compute[icompute]; + PathCompute = modify->get_compute_by_id(computename); + if (!PathCompute) + error->all(FLERR,"Compute ID {} for fix pafi does not exist", computename); + if (PathCompute->peratom_flag==0) - error->all(FLERR,"Compute for fix pafi does not calculate a local array"); + error->all(FLERR,"Compute {} for fix pafi does not calculate a local array", computename); if (PathCompute->size_peratom_cols < 9) - error->all(FLERR,"Compute for fix pafi must have 9 fields per atom"); + error->all(FLERR,"Compute {} for fix pafi must have 9 fields per atom", computename); if (comm->me==0) utils::logmesg(lmp,"fix pafi compute name,style: {},{}\n",computename,PathCompute->style); @@ -167,15 +167,14 @@ void FixPAFI::init() dtv = update->dt; dtf = 0.5 * update->dt * force->ftm2v; - icompute = modify->find_compute(computename); - if (icompute == -1) - error->all(FLERR,"Compute ID for fix pafi does not exist"); - PathCompute = modify->compute[icompute]; - if (PathCompute->peratom_flag==0) - error->all(FLERR,"Compute for fix pafi does not calculate a local array"); - if (PathCompute->size_peratom_cols < 9) - error->all(FLERR,"Compute for fix pafi must have 9 fields per atom"); + PathCompute = modify->get_compute_by_id(computename); + if (!PathCompute) + error->all(FLERR,"Compute ID {} for fix pafi does not exist", computename); + if (PathCompute->peratom_flag==0) + error->all(FLERR,"Compute {} for fix pafi does not calculate a local array", computename); + if (PathCompute->size_peratom_cols < 9) + error->all(FLERR,"Compute {} for fix pafi must have 9 fields per atom", computename); if (utils::strmatch(update->integrate_style,"^respa")) { step_respa = (dynamic_cast(update->integrate))->step; // nve @@ -183,7 +182,6 @@ void FixPAFI::init() if (respa_level >= 0) ilevel_respa = MIN(respa_level,nlevels_respa-1); else ilevel_respa = nlevels_respa-1; } - } void FixPAFI::setup(int vflag) @@ -206,7 +204,6 @@ void FixPAFI::min_setup(int vflag) min_post_force(vflag); } - void FixPAFI::post_force(int /*vflag*/) { double **x = atom->x; diff --git a/src/EXTRA-FIX/fix_temp_csld.cpp b/src/EXTRA-FIX/fix_temp_csld.cpp index cbcd2ca7df..13ead5b393 100644 --- a/src/EXTRA-FIX/fix_temp_csld.cpp +++ b/src/EXTRA-FIX/fix_temp_csld.cpp @@ -40,6 +40,7 @@ using namespace FixConst; enum{NOBIAS,BIAS}; enum{CONSTANT,EQUAL}; +static constexpr int PRNGSIZE = 98+2+3; /* ---------------------------------------------------------------------- */ FixTempCSLD::FixTempCSLD(LAMMPS *lmp, int narg, char **arg) : @@ -95,12 +96,12 @@ FixTempCSLD::FixTempCSLD(LAMMPS *lmp, int narg, char **arg) : FixTempCSLD::~FixTempCSLD() { - delete [] tstr; + delete[] tstr; // delete temperature if fix created it if (tflag) modify->delete_compute(id_temp); - delete [] id_temp; + delete[] id_temp; delete random; memory->destroy(vhold); @@ -137,15 +138,14 @@ void FixTempCSLD::init() if (tstr) { tvar = input->variable->find(tstr); if (tvar < 0) - error->all(FLERR,"Variable name for fix temp/csld does not exist"); + error->all(FLERR,"Variable name {} for fix temp/csld does not exist", tstr); if (input->variable->equalstyle(tvar)) tstyle = EQUAL; - else error->all(FLERR,"Variable for fix temp/csld is invalid style"); + else error->all(FLERR,"Variable {} for fix temp/csld is invalid style", tstr); } - int icompute = modify->find_compute(id_temp); - if (icompute < 0) - error->all(FLERR,"Temperature ID for fix temp/csld does not exist"); - temperature = modify->compute[icompute]; + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) + error->all(FLERR,"Temperature ID {} for fix temp/csld does not exist", id_temp); if (modify->check_rigid_group_overlap(groupbit)) error->warning(FLERR,"Cannot thermostat atoms in rigid bodies"); @@ -158,7 +158,6 @@ void FixTempCSLD::init() void FixTempCSLD::end_of_step() { - // set current t_target // if variable temp, evaluate variable, wrap with clear/add @@ -171,8 +170,7 @@ void FixTempCSLD::end_of_step() modify->clearstep_compute(); t_target = input->variable->compute_equal(tvar); if (t_target < 0.0) - error->one(FLERR, - "Fix temp/csld variable returned negative temperature"); + error->one(FLERR, "Fix temp/csld variable returned negative temperature"); modify->addstep_compute(update->ntimestep + nevery); } @@ -259,17 +257,14 @@ int FixTempCSLD::modify_param(int narg, char **arg) modify->delete_compute(id_temp); tflag = 0; } - delete [] id_temp; + delete[] id_temp; id_temp = utils::strdup(arg[1]); - int icompute = modify->find_compute(id_temp); - if (icompute < 0) - error->all(FLERR,"Could not find fix_modify temperature ID"); - temperature = modify->compute[icompute]; + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) error->all(FLERR,"Could not find fix_modify temperature ID {}", id_temp); if (temperature->tempflag == 0) - error->all(FLERR, - "Fix_modify temperature ID does not compute temperature"); + error->all(FLERR, "Fix_modify temperature ID {} does not compute temperature", id_temp); if (temperature->igroup != igroup && comm->me == 0) error->warning(FLERR,"Group for fix_modify temp != fix group"); return 2; @@ -297,7 +292,6 @@ double FixTempCSLD::compute_scalar() void FixTempCSLD::write_restart(FILE *fp) { - const int PRNGSIZE = 98+2+3; int nsize = PRNGSIZE*comm->nprocs+2; // pRNG state per proc + nprocs + energy double *list = nullptr; if (comm->me == 0) { diff --git a/src/EXTRA-FIX/fix_temp_csvr.cpp b/src/EXTRA-FIX/fix_temp_csvr.cpp index b908d1a4ed..6b46629a99 100644 --- a/src/EXTRA-FIX/fix_temp_csvr.cpp +++ b/src/EXTRA-FIX/fix_temp_csvr.cpp @@ -95,12 +95,12 @@ FixTempCSVR::FixTempCSVR(LAMMPS *lmp, int narg, char **arg) : FixTempCSVR::~FixTempCSVR() { - delete [] tstr; + delete[] tstr; // delete temperature if fix created it if (tflag) modify->delete_compute(id_temp); - delete [] id_temp; + delete[] id_temp; delete random; nmax = -1; @@ -124,15 +124,14 @@ void FixTempCSVR::init() if (tstr) { tvar = input->variable->find(tstr); if (tvar < 0) - error->all(FLERR,"Variable name for fix temp/csvr does not exist"); + error->all(FLERR,"Variable name {} for fix temp/csvr does not exist", tstr); if (input->variable->equalstyle(tvar)) tstyle = EQUAL; - else error->all(FLERR,"Variable for fix temp/csvr is invalid style"); + else error->all(FLERR,"Variable {} for fix temp/csvr is invalid style", tstr); } - int icompute = modify->find_compute(id_temp); - if (icompute < 0) - error->all(FLERR,"Temperature ID for fix temp/csvr does not exist"); - temperature = modify->compute[icompute]; + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) + error->all(FLERR,"Temperature ID {} for fix temp/csvr does not exist", id_temp); if (temperature->tempbias) which = BIAS; else which = NOBIAS; @@ -154,8 +153,7 @@ void FixTempCSVR::end_of_step() modify->clearstep_compute(); t_target = input->variable->compute_equal(tvar); if (t_target < 0.0) - error->one(FLERR, - "Fix temp/csvr variable returned negative temperature"); + error->one(FLERR, "Fix temp/csvr variable returned negative temperature"); modify->addstep_compute(update->ntimestep + nevery); } @@ -215,17 +213,14 @@ int FixTempCSVR::modify_param(int narg, char **arg) modify->delete_compute(id_temp); tflag = 0; } - delete [] id_temp; + delete[] id_temp; id_temp = utils::strdup(arg[1]); - int icompute = modify->find_compute(id_temp); - if (icompute < 0) - error->all(FLERR,"Could not find fix_modify temperature ID"); - temperature = modify->compute[icompute]; + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) error->all(FLERR,"Could not find fix_modify temperature ID {}", id_temp); if (temperature->tempflag == 0) - error->all(FLERR, - "Fix_modify temperature ID does not compute temperature"); + error->all(FLERR, "Fix_modify temperature ID {} does not compute temperature", id_temp); if (temperature->igroup != igroup && comm->me == 0) error->warning(FLERR,"Group for fix_modify temp != fix group"); return 2; diff --git a/src/PLUMED/fix_plumed.cpp b/src/PLUMED/fix_plumed.cpp index f06d5474f6..ad7f4f3995 100644 --- a/src/PLUMED/fix_plumed.cpp +++ b/src/PLUMED/fix_plumed.cpp @@ -522,14 +522,13 @@ int FixPlumed::modify_param(int narg, char **arg) delete[] id_pe; id_pe = utils::strdup(arg[1]); - int icompute = modify->find_compute(arg[1]); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify potential energy ID"); - c_pe = modify->compute[icompute]; + c_pe = modify->get_compute_by_id(id_pe); + if (!c_pe) error->all(FLERR,"Could not find fix_modify potential energy ID {}", id_pe); if (c_pe->peflag == 0) - error->all(FLERR,"Fix_modify plmd_pe ID does not compute potential energy"); + error->all(FLERR,"Fix_modify compute pe ID {} does not compute potential energy", id_pe); if (c_pe->igroup != 0 && comm->me == 0) - error->warning(FLERR,"Potential for fix PLUMED is not for group all"); + error->warning(FLERR,"Potential energy compute {} for fix PLUMED is not for group all", id_pe); return 2; @@ -539,12 +538,11 @@ int FixPlumed::modify_param(int narg, char **arg) delete[] id_press; id_press = utils::strdup(arg[1]); - int icompute = modify->find_compute(arg[1]); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify pressure ID"); - c_press = modify->compute[icompute]; + c_press = modify->get_compute_by_id(id_press); + if (!c_press) error->all(FLERR,"Could not find fix_modify compute pressure ID {}", id_press); if (c_press->pressflag == 0) - error->all(FLERR,"Fix_modify pressure ID does not compute pressure"); + error->all(FLERR,"Fix_modify compute pressure ID {} does not compute pressure", id_press); if (c_press->igroup != 0 && comm->me == 0) error->warning(FLERR,"Virial for fix PLUMED is not for group all"); diff --git a/src/QTB/fix_qbmsst.cpp b/src/QTB/fix_qbmsst.cpp index 2450561363..4cd2d05760 100644 --- a/src/QTB/fix_qbmsst.cpp +++ b/src/QTB/fix_qbmsst.cpp @@ -313,20 +313,20 @@ void FixQBMSST::init() error->all(FLERR,"Cannot use fix qbmsst without per-type mass defined"); // set compute ptrs - int itemp = modify->find_compute(id_temp); - int ipress = modify->find_compute(id_press); - int ipe = modify->find_compute(id_pe); - if (itemp < 0 || ipress < 0|| ipe < 0) - error->all(FLERR,"Could not find fix qbmsst compute ID"); - if (modify->compute[itemp]->tempflag == 0) - error->all(FLERR,"Fix qbmsst compute ID does not compute temperature"); - if (modify->compute[ipress]->pressflag == 0) - error->all(FLERR,"Fix qbmsst compute ID does not compute pressure"); - if (modify->compute[ipe]->peflag == 0) - error->all(FLERR,"Fix qbmsst compute ID does not compute potential energy"); - temperature = modify->compute[itemp]; - pressure = modify->compute[ipress]; - pe = modify->compute[ipe]; + + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) + error->all(FLERR, "Could not find fix qbmsst temperature compute ID {}", id_temp); + if (temperature->tempflag == 0) + error->all(FLERR, "Fix qbmsst compute ID {} does not compute temperature", id_temp); + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR, "Could not find fix qbmsst pressure compute ID {}", id_press); + if (pressure->pressflag == 0) + error->all(FLERR, "Fix qbmsst compute ID {} does not compute pressure", id_press); + pe = modify->get_compute_by_id(id_pe); + if (!pe) error->all(FLERR, "Could not find fix qbmsst pe compute ID {}", id_pe); + if (pe->peflag == 0) + error->all(FLERR, "Fix qbmsst compute ID {} does not compute potential energy", id_pe); // initiate the counter l and \mu counter_l=0; @@ -856,16 +856,13 @@ int FixQBMSST::modify_param(int narg, char **arg) } delete[] id_temp; id_temp = utils::strdup(arg[1]); - - int icompute = modify->find_compute(id_temp); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify temperature ID"); - temperature = modify->compute[icompute]; - + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) + error->all(FLERR, "Could not find fix_modify temperature ID {}", id_temp); if (temperature->tempflag == 0) - error->all(FLERR,"Fix_modify temperature ID does not compute temperature"); + error->all(FLERR,"Fix_modify temperature ID {} does not compute temperature", id_temp); if (temperature->igroup != 0 && comm->me == 0) - error->warning(FLERR,"Temperature for QBMSST is not for group all"); - + error->warning(FLERR, "Temperature for fix qbmsst is not for group all"); return 2; } else if (strcmp(arg[0],"press") == 0) { @@ -877,12 +874,11 @@ int FixQBMSST::modify_param(int narg, char **arg) delete[] id_press; id_press = utils::strdup(arg[1]); - int icompute = modify->find_compute(id_press); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify pressure ID"); - pressure = modify->compute[icompute]; + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR,"Could not find fix_modify compute pressure ID {}", id_press); if (pressure->pressflag == 0) - error->all(FLERR,"Fix_modify pressure ID does not compute pressure"); + error->all(FLERR,"Fix_modify compute pressure ID {} does not compute pressure", id_press); return 2; } return 0; diff --git a/src/QTB/fix_qtb.cpp b/src/QTB/fix_qtb.cpp index 2f7ce4130a..8f73a04927 100644 --- a/src/QTB/fix_qtb.cpp +++ b/src/QTB/fix_qtb.cpp @@ -345,15 +345,13 @@ int FixQTB::modify_param(int narg, char **arg) { if (strcmp(arg[0],"temp") == 0) { if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); - delete [] id_temp; + delete[] id_temp; id_temp = utils::strdup(arg[1]); - - int icompute = modify->find_compute(id_temp); - if (icompute < 0) error->all(FLERR,"Could not find fix_modify temperature ID"); - temperature = modify->compute[icompute]; - + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) + error->all(FLERR, "Could not find fix_modify temperature ID {}", id_temp); if (temperature->tempflag == 0) - error->all(FLERR,"Fix_modify temperature ID does not compute temperature"); + error->all(FLERR,"Fix_modify temperature ID {} does not compute temperature", id_temp); if (temperature->igroup != igroup && comm->me == 0) error->warning(FLERR,"Group for fix_modify temp != fix group"); return 2; diff --git a/src/SHOCK/fix_msst.cpp b/src/SHOCK/fix_msst.cpp index 55842250ec..b3a55ff663 100644 --- a/src/SHOCK/fix_msst.cpp +++ b/src/SHOCK/fix_msst.cpp @@ -247,20 +247,19 @@ void FixMSST::init() // set compute ptrs - int itemp = modify->find_compute(id_temp); - int ipress = modify->find_compute(id_press); - int ipe = modify->find_compute(id_pe); - if (itemp < 0 || ipress < 0 || ipe < 0) error->all(FLERR, "Could not find fix msst compute ID"); - if (modify->compute[itemp]->tempflag == 0) - error->all(FLERR, "Fix msst compute ID does not compute temperature"); - if (modify->compute[ipress]->pressflag == 0) - error->all(FLERR, "Fix msst compute ID does not compute pressure"); - if (modify->compute[ipe]->peflag == 0) - error->all(FLERR, "Fix msst compute ID does not compute potential energy"); - - temperature = modify->compute[itemp]; - pressure = modify->compute[ipress]; - pe = modify->compute[ipe]; + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) + error->all(FLERR, "Could not find fix msst temperature compute ID {}", id_temp); + if (temperature->tempflag == 0) + error->all(FLERR, "Fix msst compute ID {} does not compute temperature", id_temp); + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR, "Could not find fix msst pressure compute ID {}", id_press); + if (pressure->pressflag == 0) + error->all(FLERR, "Fix msst compute ID {} does not compute pressure", id_press); + pe = modify->get_compute_by_id(id_pe); + if (!pe) error->all(FLERR, "Could not find fix msst pe compute ID {}", id_pe); + if (pe->peflag == 0) + error->all(FLERR, "Fix msst compute ID {} does not compute potential energy", id_pe); dtv = update->dt; dtf = 0.5 * update->dt * force->ftm2v; @@ -801,18 +800,13 @@ int FixMSST::modify_param(int narg, char **arg) } delete[] id_temp; id_temp = utils::strdup(arg[1]); - - int icompute = modify->find_compute(id_temp); - if (icompute < 0) error->all(FLERR, "Could not find fix_modify temperature ID"); - temperature = modify->compute[icompute]; - + temperature = modify->get_compute_by_id(id_temp); + if (!temperature) + error->all(FLERR, "Could not find fix_modify temperature ID {}", id_temp); if (temperature->tempflag == 0) - error->all(FLERR, - "Fix_modify temperature ID does not " - "compute temperature"); + error->all(FLERR,"Fix_modify temperature ID {} does not compute temperature", id_temp); if (temperature->igroup != 0 && comm->me == 0) - error->warning(FLERR, "Temperature for MSST is not for group all"); - + error->warning(FLERR, "Temperature for fix msst is not for group all"); return 2; } else if (strcmp(arg[0], "press") == 0) { @@ -823,13 +817,10 @@ int FixMSST::modify_param(int narg, char **arg) } delete[] id_press; id_press = utils::strdup(arg[1]); - - int icompute = modify->find_compute(id_press); - if (icompute < 0) error->all(FLERR, "Could not find fix_modify pressure ID"); - pressure = modify->compute[icompute]; - + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR, "Could not find fix_modify pressure ID {}", id_press); if (pressure->pressflag == 0) - error->all(FLERR, "Fix_modify pressure ID does not compute pressure"); + error->all(FLERR, "Fix_modify pressure ID {} does not compute pressure", id_press); return 2; } return 0; diff --git a/src/SHOCK/fix_nphug.cpp b/src/SHOCK/fix_nphug.cpp index 0f9bb3ba93..3cad719c35 100644 --- a/src/SHOCK/fix_nphug.cpp +++ b/src/SHOCK/fix_nphug.cpp @@ -148,7 +148,7 @@ FixNPHug::~FixNPHug() // delete pe compute if (peflag) modify->delete_compute(id_pe); - delete [] id_pe; + delete[] id_pe; } /* ---------------------------------------------------------------------- */ @@ -161,10 +161,9 @@ void FixNPHug::init() // set pe ptr - int icompute = modify->find_compute(id_pe); - if (icompute < 0) - error->all(FLERR,"Potential energy ID for fix nvt/nph/npt does not exist"); - pe = modify->compute[icompute]; + pe = modify->get_compute_by_id(id_pe); + if (pe) + error->all(FLERR, "Potential energy compute ID {} for fix {} does not exist", id_pe, style); } diff --git a/src/UEF/fix_nh_uef.cpp b/src/UEF/fix_nh_uef.cpp index b8b1fd07d6..a824966d34 100644 --- a/src/UEF/fix_nh_uef.cpp +++ b/src/UEF/fix_nh_uef.cpp @@ -228,28 +228,24 @@ void FixNHUef::init() // find conflict with fix/deform or other box chaging fixes - for (int i=0; i < modify->nfix; i++) - { - if (strcmp(modify->fix[i]->id,id) != 0) - if ((modify->fix[i]->box_change & BOX_CHANGE_SHAPE) != 0) - error->all(FLERR,"Can't use another fix which changes box shape with fix/nvt/npt/uef"); + for (auto &ifix : modify->get_fix_list()) { + if (strcmp(ifix->id, id) != 0) + if ((ifix->box_change & BOX_CHANGE_SHAPE) != 0) + error->all(FLERR,"Can't use another fix which changes box shape with fix {}", style); } // this will make the pressure compute for nvt if (!pstat_flag) if (pcomputeflag) { - int icomp = modify->find_compute(id_press); - if (icomp<0) - error->all(FLERR,"Pressure ID for fix/nvt/uef doesn't exist"); - pressure = modify->compute[icomp]; - + pressure = modify->get_compute_by_id(id_press); + if (!pressure) error->all(FLERR,"Pressure ID {} for {} doesn't exist", id_press, style); if (strcmp(pressure->style,"pressure/uef") != 0) - error->all(FLERR,"Using fix nvt/npt/uef without a compute pressure/uef"); + error->all(FLERR,"Using fix {} without a compute pressure/uef", style); } if (strcmp(temperature->style,"temp/uef") != 0) - error->all(FLERR,"Using fix nvt/npt/uef without a compute temp/uef"); + error->all(FLERR,"Using fix {} without a compute temp/uef", style); } /* ---------------------------------------------------------------------- From bc6031cd24b76fc28ef150f894177003185c7eff Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Mon, 13 Nov 2023 14:53:45 -0700 Subject: [PATCH 140/204] Fix bug in Kokkos minimize + fix deform --- src/KOKKOS/npair_kokkos.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KOKKOS/npair_kokkos.cpp b/src/KOKKOS/npair_kokkos.cpp index 45ec83e90e..44e9e355b9 100644 --- a/src/KOKKOS/npair_kokkos.cpp +++ b/src/KOKKOS/npair_kokkos.cpp @@ -113,7 +113,7 @@ void NPairKokkos::copy_stencil_info() NPair::copy_stencil_info(); nstencil = ns->nstencil; - if (ns->last_stencil != last_stencil_old) { + if (ns->last_stencil != last_stencil_old || ns->last_stencil == update->ntimestep) { // copy stencil to device as it may have changed last_stencil_old = ns->last_stencil; From d88ffeea3fb64bc770f8ac63ee0283ec0e7f8f3a Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Mon, 13 Nov 2023 14:58:48 -0700 Subject: [PATCH 141/204] Need force_clear for atom_vec_spin_kokkos --- src/KOKKOS/atom_vec_spin_kokkos.cpp | 32 +++++++++++++++++++++++++++++ src/KOKKOS/atom_vec_spin_kokkos.h | 1 + src/KOKKOS/min_kokkos.cpp | 18 ++++++++++------ 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/src/KOKKOS/atom_vec_spin_kokkos.cpp b/src/KOKKOS/atom_vec_spin_kokkos.cpp index f5b8697352..9de02c3b28 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.cpp +++ b/src/KOKKOS/atom_vec_spin_kokkos.cpp @@ -586,6 +586,38 @@ int AtomVecSpinKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf, int n } } +/* ---------------------------------------------------------------------- + clear extra forces starting at atom N + nbytes = # of bytes to clear for a per-atom vector + include f b/c this is invoked from within SPIN pair styles +------------------------------------------------------------------------- */ + +void AtomVecSpinKokkos::force_clear(int n, size_t nbytes) +{ + int nzero = nbytes/sizeof(double); + + if (nzero) { + atomKK->k_fm.clear_sync_state(); // will be cleared below + atomKK->k_fm_long.clear_sync_state(); // will be cleared below + + // local variables for lambda capture + + auto l_fm = atomKK->k_fm.d_view; + auto l_fm_long = atomKK->k_fm_long.d_view; + + Kokkos::parallel_for(nzero, LAMMPS_LAMBDA(int i) { + l_fm(i,0) = 0.0; + l_fm(i,1) = 0.0; + l_fm(i,2) = 0.0; + l_fm_long(i,0) = 0.0; + l_fm_long(i,1) = 0.0; + l_fm_long(i,2) = 0.0; + }); + + atomKK->modified(Device,FM_MASK|FML_MASK); + } +} + /* ---------------------------------------------------------------------- */ void AtomVecSpinKokkos::sync(ExecutionSpace space, unsigned int mask) diff --git a/src/KOKKOS/atom_vec_spin_kokkos.h b/src/KOKKOS/atom_vec_spin_kokkos.h index d14d01fb62..f0145e4db7 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.h +++ b/src/KOKKOS/atom_vec_spin_kokkos.h @@ -34,6 +34,7 @@ class AtomVecSpinKokkos : public AtomVecKokkos, public AtomVecSpin { AtomVecSpinKokkos(class LAMMPS *); void grow(int) override; void grow_pointers() override; + void force_clear(int, size_t) override; void sort_kokkos(Kokkos::BinSort &Sorter) override; int pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DAT::tdual_xfloat_2d buf,int iswap, diff --git a/src/KOKKOS/min_kokkos.cpp b/src/KOKKOS/min_kokkos.cpp index bbb9a0bd6e..c01a53c7b3 100644 --- a/src/KOKKOS/min_kokkos.cpp +++ b/src/KOKKOS/min_kokkos.cpp @@ -72,8 +72,7 @@ void MinKokkos::init() void MinKokkos::setup(int flag) { if (comm->me == 0 && screen) { - fmt::print(screen,"Setting up {} style minimization ...\n", - update->minimize_style); + fmt::print(screen,"Setting up {} style minimization ...\n", update->minimize_style); if (flag) { fmt::print(screen," Unit style : {}\n", update->unit_style); fmt::print(screen," Current step : {}\n", update->ntimestep); @@ -92,14 +91,13 @@ void MinKokkos::setup(int flag) fextra = new double[nextra_global]; if (comm->me == 0) error->warning(FLERR, "Energy due to {} extra global DOFs will" - " be included in minimizer energies\n", nextra_global); + " be included in minimizer energies\n",nextra_global); } // compute for potential energy - int id = modify->find_compute("thermo_pe"); - if (id < 0) error->all(FLERR,"Minimization could not find thermo_pe compute"); - pe_compute = modify->compute[id]; + pe_compute = modify->get_compute_by_id("thermo_pe"); + if (!pe_compute) error->all(FLERR,"Minimization could not find thermo_pe compute"); // style-specific setup does two tasks // setup extra global dof vectors @@ -537,6 +535,7 @@ double MinKokkos::energy_force(int resetflag) if (resetflag) fix_minimize_kk->reset_coords(); reset_vectors(); } + return energy; } @@ -575,7 +574,14 @@ void MinKokkos::force_clear() l_torque(i,2) = 0.0; } }); + + if (extraflag) { + size_t nbytes = sizeof(double) * atom->nlocal; + if (force->newton) nbytes += sizeof(double) * atom->nghost; + atom->avec->force_clear(0,nbytes); + } } + atomKK->modified(Device,F_MASK|TORQUE_MASK); } From e6485002adf4209f5a217736c2707f4be8eaeef8 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Mon, 13 Nov 2023 15:08:49 -0700 Subject: [PATCH 142/204] Avoid integer division --- src/KOKKOS/atom_vec_spin_kokkos.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KOKKOS/atom_vec_spin_kokkos.cpp b/src/KOKKOS/atom_vec_spin_kokkos.cpp index 9de02c3b28..d2dd3a05ab 100644 --- a/src/KOKKOS/atom_vec_spin_kokkos.cpp +++ b/src/KOKKOS/atom_vec_spin_kokkos.cpp @@ -594,7 +594,7 @@ int AtomVecSpinKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf, int n void AtomVecSpinKokkos::force_clear(int n, size_t nbytes) { - int nzero = nbytes/sizeof(double); + int nzero = (double)nbytes/sizeof(double); if (nzero) { atomKK->k_fm.clear_sync_state(); // will be cleared below From bcfbea99038232a16632ee613ae041a60c970aed Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 15 Nov 2023 08:03:15 -0500 Subject: [PATCH 143/204] throw error for illegal replication values --- src/replicate.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/replicate.cpp b/src/replicate.cpp index 01cc1faabb..6a4c8bfd74 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -52,8 +52,11 @@ void Replicate::command(int narg, char **arg) int nx = utils::inumeric(FLERR,arg[0],false,lmp); int ny = utils::inumeric(FLERR,arg[1],false,lmp); int nz = utils::inumeric(FLERR,arg[2],false,lmp); - int nrep = nx*ny*nz; + if ((nx <= 0) || (ny <= 0) || (nz <= 0)) + error->all(FLERR, "Illegal replication grid {}x{}x{}. All replications must be > 0", + nx, ny, nz); + int nrep = nx*ny*nz; if (me == 0) utils::logmesg(lmp, "Replication is creating a {}x{}x{} = {} times larger system...\n", nx, ny, nz, nrep); From aec22660646b767550ba8a2803cdac3d7b5de4c1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 15 Nov 2023 09:43:02 -0500 Subject: [PATCH 144/204] fix typo --- src/SHOCK/fix_nphug.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SHOCK/fix_nphug.cpp b/src/SHOCK/fix_nphug.cpp index 3cad719c35..b4b4a866b6 100644 --- a/src/SHOCK/fix_nphug.cpp +++ b/src/SHOCK/fix_nphug.cpp @@ -162,7 +162,7 @@ void FixNPHug::init() // set pe ptr pe = modify->get_compute_by_id(id_pe); - if (pe) + if (!pe) error->all(FLERR, "Potential energy compute ID {} for fix {} does not exist", id_pe, style); } From b3265729169f0d24c94b6c8a571b671627b872ae Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 15 Nov 2023 09:49:58 -0500 Subject: [PATCH 145/204] flag input errors --- src/REPLICA/fix_pimd_langevin.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/REPLICA/fix_pimd_langevin.cpp b/src/REPLICA/fix_pimd_langevin.cpp index cffaf327e4..fd19e804e7 100644 --- a/src/REPLICA/fix_pimd_langevin.cpp +++ b/src/REPLICA/fix_pimd_langevin.cpp @@ -455,7 +455,12 @@ void FixPIMDLangevin::init() langevin_init(); c_pe = modify->get_compute_by_id(id_pe); + if (!c_pe) + error->universe_all(FLERR, fmt::format("Could not find fix {} potential energy compute ID {}", style, id_pe)); + c_press = modify->get_compute_by_id(id_press); + if (!c_press) + error->universe_all(FLERR, fmt::format("Could not find fix {} pressure compute ID {}", style, id_press)); t_prim = t_vir = t_cv = p_prim = p_vir = p_cv = p_md = 0.0; } From 1f509d900e7428970c2e2a140383ab45050203e6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 16 Nov 2023 11:57:33 -0500 Subject: [PATCH 146/204] make output more consistent with other LAMMPS code --- src/REPLICA/fix_pimd_langevin.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/REPLICA/fix_pimd_langevin.cpp b/src/REPLICA/fix_pimd_langevin.cpp index d328420ce9..2974359c33 100644 --- a/src/REPLICA/fix_pimd_langevin.cpp +++ b/src/REPLICA/fix_pimd_langevin.cpp @@ -419,10 +419,10 @@ int FixPIMDLangevin::setmask() void FixPIMDLangevin::init() { if (atom->map_style == Atom::MAP_NONE) - error->all(FLERR, "fix pimd/langevin requires an atom map, see atom_modify"); + error->all(FLERR, "Fix pimd/langevin requires an atom map, see atom_modify"); if (universe->me == 0 && universe->uscreen) - fprintf(universe->uscreen, "fix pimd/langevin initializing Path-Integral ...\n"); + fprintf(universe->uscreen, "Fix pimd/langevin: initializing Path-Integral ...\n"); // prepare the constants @@ -446,7 +446,7 @@ void FixPIMDLangevin::init() if ((universe->me == 0) && (universe->uscreen)) fprintf(universe->uscreen, - "fix pimd/langevin -P/(beta^2 * hbar^2) = %20.7lE (kcal/mol/A^2)\n\n", fbond); + "Fix pimd/langevin: -P/(beta^2 * hbar^2) = %20.7lE (kcal/mol/A^2)\n\n", fbond); if (integrator == OBABO) { dtf = 0.5 * update->dt * force->ftm2v; @@ -899,8 +899,8 @@ void FixPIMDLangevin::baro_init() } Vcoeff = 1.0; std::string out = fmt::format("\nInitializing PIMD {:s} barostat...\n", Barostats[barostat]); - out += fmt::format("The barostat mass is W = {:.16e}\n", W); - utils::logmesg(lmp, out); + out += fmt::format(" The barostat mass is W = {:.16e}\n", W); + if (universe->me == 0) utils::logmesg(lmp, out); } /* ---------------------------------------------------------------------- */ @@ -1017,8 +1017,8 @@ void FixPIMDLangevin::langevin_init() c2 = sqrt(1.0 - c1 * c1); // note that c1 and c2 here only works for the centroid mode. if (thermostat == PILE_L) { - std::string out = "\nInitializing PI Langevin equation thermostat...\n"; - out += "Bead ID | omega | tau | c1 | c2\n"; + std::string out = "Initializing PI Langevin equation thermostat...\n"; + out += " Bead ID | omega | tau | c1 | c2\n"; if (method == NMPIMD) { tau_k = new double[np]; c1_k = new double[np]; @@ -1039,18 +1039,18 @@ void FixPIMDLangevin::langevin_init() c2_k[i] = sqrt(1.0 - c1_k[i] * c1_k[i]); } for (int i = 0; i < np; i++) { - out += fmt::format(" {:d} {:.8e} {:.8e} {:.8e} {:.8e}\n", i, _omega_k[i], tau_k[i], - c1_k[i], c2_k[i]); + out += fmt::format(" {:d} {:.8e} {:.8e} {:.8e} {:.8e}\n", i, + _omega_k[i], tau_k[i], c1_k[i], c2_k[i]); } } else if (method == PIMD) { for (int i = 0; i < np; i++) { - out += fmt::format(" {:d} {:.8e} {:.8e} {:.8e} {:.8e}\n", i, _omega_np / sqrt(fmass), - tau, c1, c2); + out += fmt::format(" {:d} {:.8e} {:.8e} {:.8e} {:.8e}\n", i, + _omega_np / sqrt(fmass), tau, c1, c2); } } - if (thermostat == PILE_L) out += "PILE_L thermostat successfully initialized!\n"; + if (thermostat == PILE_L) out += " PILE_L thermostat successfully initialized!\n"; out += "\n"; - utils::logmesg(lmp, out); + if (universe->me == 0) utils::logmesg(lmp, out); } } From 7f2a6b1a8585323d7eb1419f2bd46ef7074359b0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 16 Nov 2023 12:00:29 -0500 Subject: [PATCH 147/204] update h2 fix pimd/langevin example --- .../langevin_metal_units/in.langevin.metal | 28 +++++ .../{in.lmp => in.pimd-langevin.metal} | 2 +- ...tal.g++ => log.16Nov23.langevin.metal.g++} | 2 +- ...g++.0 => log.16Nov23.langevin.metal.g++.0} | 60 +++++----- ...g++.1 => log.16Nov23.langevin.metal.g++.1} | 59 ++++------ ...g++.2 => log.16Nov23.langevin.metal.g++.2} | 59 ++++------ ...g++.3 => log.16Nov23.langevin.metal.g++.3} | 57 ++++------ .../log.16Nov23.pimd-langevin.metal.g++ | 2 + .../log.16Nov23.pimd-langevin.metal.g++.0 | 103 ++++++++++++++++++ .../log.16Nov23.pimd-langevin.metal.g++.1 | 95 ++++++++++++++++ .../log.16Nov23.pimd-langevin.metal.g++.2 | 95 ++++++++++++++++ .../log.16Nov23.pimd-langevin.metal.g++.3 | 95 ++++++++++++++++ .../PACKAGES/pimd/langevin_metal_units/run.sh | 4 +- 13 files changed, 524 insertions(+), 137 deletions(-) create mode 100644 examples/PACKAGES/pimd/langevin_metal_units/in.langevin.metal rename examples/PACKAGES/pimd/langevin_metal_units/{in.lmp => in.pimd-langevin.metal} (80%) rename examples/PACKAGES/pimd/langevin_metal_units/{log.14Jun23.langevin.metal.g++ => log.16Nov23.langevin.metal.g++} (64%) rename examples/PACKAGES/pimd/langevin_metal_units/{log.14Jun23.langevin.metal.g++.0 => log.16Nov23.langevin.metal.g++.0} (70%) rename examples/PACKAGES/pimd/langevin_metal_units/{log.14Jun23.langevin.metal.g++.1 => log.16Nov23.langevin.metal.g++.1} (70%) rename examples/PACKAGES/pimd/langevin_metal_units/{log.14Jun23.langevin.metal.g++.2 => log.16Nov23.langevin.metal.g++.2} (70%) rename examples/PACKAGES/pimd/langevin_metal_units/{log.14Jun23.langevin.metal.g++.3 => log.16Nov23.langevin.metal.g++.3} (70%) create mode 100644 examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++ create mode 100644 examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.0 create mode 100644 examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.1 create mode 100644 examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.2 create mode 100644 examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.3 diff --git a/examples/PACKAGES/pimd/langevin_metal_units/in.langevin.metal b/examples/PACKAGES/pimd/langevin_metal_units/in.langevin.metal new file mode 100644 index 0000000000..071b4ad722 --- /dev/null +++ b/examples/PACKAGES/pimd/langevin_metal_units/in.langevin.metal @@ -0,0 +1,28 @@ +variable ibead uloop 99 pad + +units metal +atom_style atomic +atom_modify map yes +boundary p p p +pair_style lj/cut 9.5251 +read_data data.metalnpt${ibead} + +pair_coeff * * 0.00965188 3.4 +pair_modify shift yes + +mass 1 39.948 + +timestep 0.001 + +velocity all create 0.0 ${ibead} + +fix 1 all pimd/langevin method nmpimd ensemble npt integrator obabo thermostat PILE_L 1234 tau 1.0 temp 113.15 iso 1.0 barostat BZP taup 1.0 fixcom no + +thermo_style custom step temp f_1[*] vol press +thermo 100 +thermo_modify norm no + +# dump dcd all custom 100 ${ibead}.dcd id type xu yu zu vx vy vz ix iy iz fx fy fz +# dump_modify dcd sort id format line "%d %d %.16f %.16f %.16f %.16f %.16f %.16f %d %d %d %.16f %.16f %.16f" + +run 1000 diff --git a/examples/PACKAGES/pimd/langevin_metal_units/in.lmp b/examples/PACKAGES/pimd/langevin_metal_units/in.pimd-langevin.metal similarity index 80% rename from examples/PACKAGES/pimd/langevin_metal_units/in.lmp rename to examples/PACKAGES/pimd/langevin_metal_units/in.pimd-langevin.metal index 124063df99..4d1416063c 100644 --- a/examples/PACKAGES/pimd/langevin_metal_units/in.lmp +++ b/examples/PACKAGES/pimd/langevin_metal_units/in.pimd-langevin.metal @@ -16,7 +16,7 @@ timestep 0.001 velocity all create 0.0 ${ibead} -fix 1 all pimd/langevin ensemble npt integrator obabo thermostat PILE_L 1234 tau 1.0 temp 113.15 iso 1.0 barostat BZP taup 1.0 fixcom no +fix 1 all pimd/langevin method pimd ensemble nvt integrator obabo thermostat PILE_L 1234 tau 1.0 temp 113.15 taup 1.0 fixcom no thermo_style custom step temp f_1[*] vol press thermo 100 diff --git a/examples/PACKAGES/pimd/langevin_metal_units/log.14Jun23.langevin.metal.g++ b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.langevin.metal.g++ similarity index 64% rename from examples/PACKAGES/pimd/langevin_metal_units/log.14Jun23.langevin.metal.g++ rename to examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.langevin.metal.g++ index fa22106766..a05d2d9aa8 100644 --- a/examples/PACKAGES/pimd/langevin_metal_units/log.14Jun23.langevin.metal.g++ +++ b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.langevin.metal.g++ @@ -1,2 +1,2 @@ -LAMMPS (28 Mar 2023) +LAMMPS (3 Aug 2023) Running on 4 partitions of processors diff --git a/examples/PACKAGES/pimd/langevin_metal_units/log.14Jun23.langevin.metal.g++.0 b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.langevin.metal.g++.0 similarity index 70% rename from examples/PACKAGES/pimd/langevin_metal_units/log.14Jun23.langevin.metal.g++.0 rename to examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.langevin.metal.g++.0 index 00787df8ba..c34bf8e7dd 100644 --- a/examples/PACKAGES/pimd/langevin_metal_units/log.14Jun23.langevin.metal.g++.0 +++ b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.langevin.metal.g++.0 @@ -1,5 +1,6 @@ -LAMMPS (28 Mar 2023) +LAMMPS (3 Aug 2023) Processor partition = 0 +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) using 1 OpenMP thread(s) per MPI task variable ibead uloop 99 pad @@ -29,10 +30,10 @@ timestep 0.001 velocity all create 0.0 ${ibead} velocity all create 0.0 01 -fix 1 all pimd/langevin ensemble npt integrator obabo thermostat PILE_L 1234 tau 1.0 temp 113.15 iso 1.0 barostat BZP taup 1.0 fixcom no +fix 1 all pimd/langevin method nmpimd ensemble npt integrator obabo thermostat PILE_L 1234 tau 1.0 temp 113.15 iso 1.0 barostat BZP taup 1.0 fixcom no Initializing PIMD BZP barostat... -The barostat mass is W = 2.3401256650800001e+01 + The barostat mass is W = 2.3401256650800001e+01 thermo_style custom step temp f_1[*] vol press thermo 100 @@ -43,14 +44,13 @@ thermo_modify norm no run 1000 Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule - Initializing PI Langevin equation thermostat... -Bead ID | omega | tau | c1 | c2 - 0 0.00000000e+00 1.00000000e+00 9.99500125e-01 3.16148726e-02 - 1 8.37986825e+01 5.96668092e-03 9.19616372e-01 3.92817678e-01 - 2 1.18509233e+02 4.21908054e-03 8.88243614e-01 4.59372705e-01 - 3 8.37986825e+01 5.96668092e-03 9.19616372e-01 3.92817678e-01 -PILE_L thermostat successfully initialized! + Bead ID | omega | tau | c1 | c2 + 0 0.00000000e+00 1.00000000e+00 9.99500125e-01 3.16148726e-02 + 1 8.37986825e+01 5.96668092e-03 9.19616372e-01 3.92817678e-01 + 2 1.18509233e+02 4.21908054e-03 8.88243614e-01 4.59372705e-01 + 3 8.37986825e+01 5.96668092e-03 9.19616372e-01 3.92817678e-01 + PILE_L thermostat successfully initialized! Neighbor list info ... update: every = 1 steps, delay = 0 steps, check = yes @@ -66,31 +66,31 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 3.121 | 3.121 | 3.121 Mbytes Step Temp f_1[1] f_1[2] f_1[3] f_1[4] f_1[5] f_1[6] f_1[7] f_1[8] f_1[9] f_1[10] f_1[11] f_1[12] f_1[13] f_1[14] f_1[15] Volume Press - 0 0 0 0 -7.3046601 4.3005229 -21.877018 -8.7249482 2.9571502 -1743.5332 -698.49808 -172.07477 0 0 0.033460054 -0.37064378 4.216227 13402.228 -164.47373 - 100 149.95804 3.8573359 0 -7.7921375 42.886648 -23.396327 -1.980193 2.954003 -1888.0547 -1648.7118 -332.0298 -0.099139345 0.11500091 0.033044702 -0.3701566 42.83112 13235.861 -101.30374 - 200 245.00113 6.3021074 0 -8.2639651 41.690123 -22.521598 -4.273021 2.9600599 -1906.2904 -1609.02 -265.94404 -0.20527926 0.49305948 0.031504957 -0.36829556 41.729191 12619.125 112.22426 - 300 300.57486 7.7316177 0 -8.2986331 43.180131 -21.755813 -7.7032433 2.9714114 -1968.7685 290.49656 251.72564 -0.21935745 0.56300721 0.029467915 -0.36568855 43.236828 11803.2 814.45889 - 400 368.08438 9.4681493 0 -8.4800193 49.109699 -24.824142 2.9744597 2.9794185 -2335.993 1368.7398 570.03286 -0.028366234 0.0094148316 0.028338146 -0.36416383 49.028096 11350.678 1202.0398 - 500 419.32066 10.786088 0 -8.640773 45.427771 -22.825143 16.22356 2.9684828 -2113.91 -272.84753 185.53392 0.091614289 0.098205455 0.028793585 -0.36478567 45.368325 11533.101 952.59748 - 600 385.4127 9.9138817 0 -8.4356035 47.783726 -22.456104 6.837575 2.967236 -2023.8117 -918.27943 -2.4106994 0.093360761 0.10198539 0.029589188 -0.36584873 47.725157 11851.775 676.62913 - 700 360.14242 9.2638601 0 -8.2900275 42.626187 -20.571698 -5.7252564 2.9560528 -1806.9448 -1418.2247 -148.41657 0.075011202 0.065835696 0.030359455 -0.36685105 42.558523 12160.301 456.91446 - 800 346.92167 8.923786 0 -8.0694169 45.160336 -21.885719 -6.7745694 2.9575472 -1894.3641 -1329.3179 -136.42193 0.011114896 0.0014455064 0.030808183 -0.3674233 45.076543 12340.037 454.60123 - 900 364.39442 9.3732334 0 -8.0415668 45.604542 -21.816625 5.586068 2.9578604 -1890.4653 -1271.1107 -111.89061 -0.020285587 0.0048148677 0.030774258 -0.36738033 45.521594 12326.448 499.75868 - 1000 390.77042 10.051697 0 -8.1948009 45.264242 -22.833545 6.9260573 2.960122 -2007.6188 -1179.7125 -70.907567 -0.062733519 0.046047757 0.030329191 -0.36681215 45.191633 12148.179 572.98799 -Loop time of 0.248186 on 1 procs for 1000 steps with 200 atoms + 0 0 0 0 -7.3046601 4.3005229 3.3062167 -8.7249482 2.9571502 -1743.5332 -698.49808 -172.07477 0 0 0.033460054 -0.37064378 4.216227 13402.228 -164.47373 + 100 149.95804 3.8573359 0 -7.7921375 42.886648 2.9263894 -1.980193 2.954003 -1888.0547 -1648.7118 -332.0298 -0.099139345 0.11500091 0.033044702 -0.3701566 42.83112 13235.861 -101.30374 + 200 245.00113 6.3021074 0 -8.2639651 41.690123 3.1450717 -4.273021 2.9600599 -1906.2904 -1609.02 -265.94404 -0.20527926 0.49305948 0.031504957 -0.36829556 41.729191 12619.125 112.22426 + 300 300.57486 7.7316177 0 -8.2986331 43.180131 3.336518 -7.7032433 2.9714114 -1968.7685 290.49656 251.72564 -0.21935745 0.56300721 0.029467915 -0.36568855 43.236828 11803.2 814.45889 + 400 368.08438 9.4681493 0 -8.4800193 49.109699 2.5694358 2.9744597 2.9794185 -2335.993 1368.7398 570.03286 -0.028366234 0.0094148316 0.028338146 -0.36416383 49.028096 11350.678 1202.0398 + 500 419.32066 10.786088 0 -8.640773 45.427771 3.0691855 16.22356 2.9684828 -2113.91 -272.84753 185.53392 0.091614289 0.098205455 0.028793585 -0.36478567 45.368325 11533.101 952.59748 + 600 385.4127 9.9138817 0 -8.4356035 47.783726 3.1614452 6.837575 2.967236 -2023.8117 -918.27943 -2.4106994 0.093360761 0.10198539 0.029589188 -0.36584873 47.725157 11851.775 676.62913 + 700 360.14242 9.2638601 0 -8.2900275 42.626187 3.6325468 -5.7252564 2.9560528 -1806.9448 -1418.2247 -148.41657 0.075011202 0.065835696 0.030359455 -0.36685105 42.558523 12160.301 456.91446 + 800 346.92167 8.923786 0 -8.0694169 45.160336 3.3040415 -6.7745694 2.9575472 -1894.3641 -1329.3179 -136.42193 0.011114896 0.0014455064 0.030808183 -0.3674233 45.076543 12340.037 454.60123 + 900 364.39442 9.3732334 0 -8.0415668 45.604542 3.321315 5.586068 2.9578604 -1890.4653 -1271.1107 -111.89061 -0.020285587 0.0048148677 0.030774258 -0.36738033 45.521594 12326.448 499.75868 + 1000 390.77042 10.051697 0 -8.1948009 45.264242 3.0670849 6.9260573 2.960122 -2007.6188 -1179.7125 -70.907567 -0.062733519 0.046047757 0.030329191 -0.36681215 45.191633 12148.179 572.98799 +Loop time of 0.218442 on 1 procs for 1000 steps with 200 atoms -Performance: 348.126 ns/day, 0.069 hours/ns, 4029.238 timesteps/s, 805.848 katom-step/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 395.527 ns/day, 0.061 hours/ns, 4577.865 timesteps/s, 915.573 katom-step/s +98.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.14541 | 0.14541 | 0.14541 | 0.0 | 58.59 -Neigh | 0.00099082 | 0.00099082 | 0.00099082 | 0.0 | 0.40 -Comm | 0.0039966 | 0.0039966 | 0.0039966 | 0.0 | 1.61 -Output | 0.00016346 | 0.00016346 | 0.00016346 | 0.0 | 0.07 -Modify | 0.096205 | 0.096205 | 0.096205 | 0.0 | 38.76 -Other | | 0.001425 | | | 0.57 +Pair | 0.11918 | 0.11918 | 0.11918 | 0.0 | 54.56 +Neigh | 0.0010314 | 0.0010314 | 0.0010314 | 0.0 | 0.47 +Comm | 0.0046197 | 0.0046197 | 0.0046197 | 0.0 | 2.11 +Output | 0.0001329 | 0.0001329 | 0.0001329 | 0.0 | 0.06 +Modify | 0.092616 | 0.092616 | 0.092616 | 0.0 | 42.40 +Other | | 0.0008616 | | | 0.39 Nlocal: 200 ave 200 max 200 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/PACKAGES/pimd/langevin_metal_units/log.14Jun23.langevin.metal.g++.1 b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.langevin.metal.g++.1 similarity index 70% rename from examples/PACKAGES/pimd/langevin_metal_units/log.14Jun23.langevin.metal.g++.1 rename to examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.langevin.metal.g++.1 index 83821cafb7..58f4695d46 100644 --- a/examples/PACKAGES/pimd/langevin_metal_units/log.14Jun23.langevin.metal.g++.1 +++ b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.langevin.metal.g++.1 @@ -1,5 +1,6 @@ -LAMMPS (28 Mar 2023) +LAMMPS (3 Aug 2023) Processor partition = 1 +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) using 1 OpenMP thread(s) per MPI task variable ibead uloop 99 pad @@ -17,7 +18,7 @@ Reading data file ... 200 atoms reading velocities ... 200 velocities - read_data CPU = 0.001 seconds + read_data CPU = 0.002 seconds pair_coeff * * 0.00965188 3.4 pair_modify shift yes @@ -29,10 +30,7 @@ timestep 0.001 velocity all create 0.0 ${ibead} velocity all create 0.0 02 -fix 1 all pimd/langevin ensemble npt integrator obabo thermostat PILE_L 1234 tau 1.0 temp 113.15 iso 1.0 barostat BZP taup 1.0 fixcom no - -Initializing PIMD BZP barostat... -The barostat mass is W = 2.3401256650800001e+01 +fix 1 all pimd/langevin method nmpimd ensemble npt integrator obabo thermostat PILE_L 1234 tau 1.0 temp 113.15 iso 1.0 barostat BZP taup 1.0 fixcom no thermo_style custom step temp f_1[*] vol press thermo 100 @@ -43,15 +41,6 @@ thermo_modify norm no run 1000 Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule - -Initializing PI Langevin equation thermostat... -Bead ID | omega | tau | c1 | c2 - 0 0.00000000e+00 1.00000000e+00 9.99500125e-01 3.16148726e-02 - 1 8.37986825e+01 5.96668092e-03 9.19616372e-01 3.92817678e-01 - 2 1.18509233e+02 4.21908054e-03 8.88243614e-01 4.59372705e-01 - 3 8.37986825e+01 5.96668092e-03 9.19616372e-01 3.92817678e-01 -PILE_L thermostat successfully initialized! - Neighbor list info ... update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 @@ -66,31 +55,31 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 3.121 | 3.121 | 3.121 Mbytes Step Temp f_1[1] f_1[2] f_1[3] f_1[4] f_1[5] f_1[6] f_1[7] f_1[8] f_1[9] f_1[10] f_1[11] f_1[12] f_1[13] f_1[14] f_1[15] Volume Press - 0 0 0 11.920908 -7.3063682 4.3005229 -21.877018 -8.7249482 2.9571502 -1743.5332 -698.49808 -172.07477 0 0 0.033460054 -0.37064378 4.216227 13402.228 -167.65544 - 100 483.61933 12.440028 11.405863 -7.7749671 42.886648 -23.396327 -1.980193 2.954003 -1888.0547 -1648.7118 -332.0298 -0.099139345 0.11500091 0.033044702 -0.3701566 42.83112 13235.861 606.14668 - 200 452.03836 11.627678 11.47094 -8.2534927 41.690123 -22.521598 -4.273021 2.9600599 -1906.2904 -1609.02 -265.94404 -0.20527926 0.49305948 0.031504957 -0.36829556 41.729191 12619.125 583.5476 - 300 470.25997 12.096389 11.739306 -8.3750153 43.180131 -21.755813 -7.7032433 2.9714114 -1968.7685 290.49656 251.72564 -0.21935745 0.56300721 0.029467915 -0.36568855 43.236828 11803.2 1152.6851 - 400 459.46597 11.818737 12.502421 -8.5240576 49.109699 -24.824142 2.9744597 2.9794185 -2335.993 1368.7398 570.03286 -0.028366234 0.0094148316 0.028338146 -0.36416383 49.028096 11350.678 1381.0251 - 500 442.73121 11.388273 11.19396 -8.6488583 45.427771 -22.825143 16.22356 2.9684828 -2113.91 -272.84753 185.53392 0.091614289 0.098205455 0.028793585 -0.36478567 45.368325 11533.101 1000.6119 - 600 493.47034 12.693424 11.91335 -8.4625706 47.783726 -22.456104 6.837575 2.967236 -2023.8117 -918.27943 -2.4106994 0.093360761 0.10198539 0.029589188 -0.36584873 47.725157 11851.775 904.52944 - 700 470.04548 12.090871 10.348757 -8.278182 42.626187 -20.571698 -5.7252564 2.9560528 -1806.9448 -1418.2247 -148.41657 0.075011202 0.065835696 0.030359455 -0.36685105 42.558523 12160.301 715.22796 - 800 458.04928 11.782296 11.152029 -8.0926613 45.160336 -21.885719 -6.7745694 2.9575472 -1894.3641 -1329.3179 -136.42193 0.011114896 0.0014455064 0.030808183 -0.3674233 45.076543 12340.037 678.21261 - 900 468.60547 12.05383 10.937315 -8.0319335 45.604542 -21.816625 5.586068 2.9578604 -1890.4653 -1271.1107 -111.89061 -0.020285587 0.0048148677 0.030774258 -0.36738033 45.521594 12326.448 735.24377 - 1000 427.44192 10.99499 11.916587 -8.2229199 45.264242 -22.833545 6.9260573 2.960122 -2007.6188 -1179.7125 -70.907567 -0.062733519 0.046047757 0.030329191 -0.36681215 45.191633 12148.179 637.98311 -Loop time of 0.248186 on 1 procs for 1000 steps with 200 atoms + 0 0 0 11.920908 -7.3063682 4.3005229 3.3062167 -8.7249482 2.9571502 -1743.5332 -698.49808 -172.07477 0 0 0.033460054 -0.37064378 4.216227 13402.228 -167.65544 + 100 483.61933 12.440028 11.405863 -7.7749671 42.886648 2.9263894 -1.980193 2.954003 -1888.0547 -1648.7118 -332.0298 -0.099139345 0.11500091 0.033044702 -0.3701566 42.83112 13235.861 606.14668 + 200 452.03836 11.627678 11.47094 -8.2534927 41.690123 3.1450717 -4.273021 2.9600599 -1906.2904 -1609.02 -265.94404 -0.20527926 0.49305948 0.031504957 -0.36829556 41.729191 12619.125 583.5476 + 300 470.25997 12.096389 11.739306 -8.3750153 43.180131 3.336518 -7.7032433 2.9714114 -1968.7685 290.49656 251.72564 -0.21935745 0.56300721 0.029467915 -0.36568855 43.236828 11803.2 1152.6851 + 400 459.46597 11.818737 12.502421 -8.5240576 49.109699 2.5694358 2.9744597 2.9794185 -2335.993 1368.7398 570.03286 -0.028366234 0.0094148316 0.028338146 -0.36416383 49.028096 11350.678 1381.0251 + 500 442.73121 11.388273 11.19396 -8.6488583 45.427771 3.0691855 16.22356 2.9684828 -2113.91 -272.84753 185.53392 0.091614289 0.098205455 0.028793585 -0.36478567 45.368325 11533.101 1000.6119 + 600 493.47034 12.693424 11.91335 -8.4625706 47.783726 3.1614452 6.837575 2.967236 -2023.8117 -918.27943 -2.4106994 0.093360761 0.10198539 0.029589188 -0.36584873 47.725157 11851.775 904.52944 + 700 470.04548 12.090871 10.348757 -8.278182 42.626187 3.6325468 -5.7252564 2.9560528 -1806.9448 -1418.2247 -148.41657 0.075011202 0.065835696 0.030359455 -0.36685105 42.558523 12160.301 715.22796 + 800 458.04928 11.782296 11.152029 -8.0926613 45.160336 3.3040415 -6.7745694 2.9575472 -1894.3641 -1329.3179 -136.42193 0.011114896 0.0014455064 0.030808183 -0.3674233 45.076543 12340.037 678.21261 + 900 468.60547 12.05383 10.937315 -8.0319335 45.604542 3.321315 5.586068 2.9578604 -1890.4653 -1271.1107 -111.89061 -0.020285587 0.0048148677 0.030774258 -0.36738033 45.521594 12326.448 735.24377 + 1000 427.44192 10.99499 11.916587 -8.2229199 45.264242 3.0670849 6.9260573 2.960122 -2007.6188 -1179.7125 -70.907567 -0.062733519 0.046047757 0.030329191 -0.36681215 45.191633 12148.179 637.98311 +Loop time of 0.218435 on 1 procs for 1000 steps with 200 atoms -Performance: 348.126 ns/day, 0.069 hours/ns, 4029.238 timesteps/s, 805.848 katom-step/s -99.5% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 395.541 ns/day, 0.061 hours/ns, 4578.021 timesteps/s, 915.604 katom-step/s +99.1% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.14654 | 0.14654 | 0.14654 | 0.0 | 59.04 -Neigh | 0.00099986 | 0.00099986 | 0.00099986 | 0.0 | 0.40 -Comm | 0.0041628 | 0.0041628 | 0.0041628 | 0.0 | 1.68 -Output | 0.00018019 | 0.00018019 | 0.00018019 | 0.0 | 0.07 -Modify | 0.094878 | 0.094878 | 0.094878 | 0.0 | 38.23 -Other | | 0.001424 | | | 0.57 +Pair | 0.11791 | 0.11791 | 0.11791 | 0.0 | 53.98 +Neigh | 0.0010247 | 0.0010247 | 0.0010247 | 0.0 | 0.47 +Comm | 0.0035577 | 0.0035577 | 0.0035577 | 0.0 | 1.63 +Output | 0.00011003 | 0.00011003 | 0.00011003 | 0.0 | 0.05 +Modify | 0.09496 | 0.09496 | 0.09496 | 0.0 | 43.47 +Other | | 0.0008711 | | | 0.40 Nlocal: 200 ave 200 max 200 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/PACKAGES/pimd/langevin_metal_units/log.14Jun23.langevin.metal.g++.2 b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.langevin.metal.g++.2 similarity index 70% rename from examples/PACKAGES/pimd/langevin_metal_units/log.14Jun23.langevin.metal.g++.2 rename to examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.langevin.metal.g++.2 index fd8dd409ae..0b76ce5bbc 100644 --- a/examples/PACKAGES/pimd/langevin_metal_units/log.14Jun23.langevin.metal.g++.2 +++ b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.langevin.metal.g++.2 @@ -1,5 +1,6 @@ -LAMMPS (28 Mar 2023) +LAMMPS (3 Aug 2023) Processor partition = 2 +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) using 1 OpenMP thread(s) per MPI task variable ibead uloop 99 pad @@ -17,7 +18,7 @@ Reading data file ... 200 atoms reading velocities ... 200 velocities - read_data CPU = 0.001 seconds + read_data CPU = 0.002 seconds pair_coeff * * 0.00965188 3.4 pair_modify shift yes @@ -29,10 +30,7 @@ timestep 0.001 velocity all create 0.0 ${ibead} velocity all create 0.0 03 -fix 1 all pimd/langevin ensemble npt integrator obabo thermostat PILE_L 1234 tau 1.0 temp 113.15 iso 1.0 barostat BZP taup 1.0 fixcom no - -Initializing PIMD BZP barostat... -The barostat mass is W = 2.3401256650800001e+01 +fix 1 all pimd/langevin method nmpimd ensemble npt integrator obabo thermostat PILE_L 1234 tau 1.0 temp 113.15 iso 1.0 barostat BZP taup 1.0 fixcom no thermo_style custom step temp f_1[*] vol press thermo 100 @@ -43,15 +41,6 @@ thermo_modify norm no run 1000 Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule - -Initializing PI Langevin equation thermostat... -Bead ID | omega | tau | c1 | c2 - 0 0.00000000e+00 1.00000000e+00 9.99500125e-01 3.16148726e-02 - 1 8.37986825e+01 5.96668092e-03 9.19616372e-01 3.92817678e-01 - 2 1.18509233e+02 4.21908054e-03 8.88243614e-01 4.59372705e-01 - 3 8.37986825e+01 5.96668092e-03 9.19616372e-01 3.92817678e-01 -PILE_L thermostat successfully initialized! - Neighbor list info ... update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 @@ -66,31 +55,31 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 3.121 | 3.121 | 3.121 Mbytes Step Temp f_1[1] f_1[2] f_1[3] f_1[4] f_1[5] f_1[6] f_1[7] f_1[8] f_1[9] f_1[10] f_1[11] f_1[12] f_1[13] f_1[14] f_1[15] Volume Press - 0 0 0 10.862314 -7.320388 4.3005229 -21.877018 -8.7249482 2.9571502 -1743.5332 -698.49808 -172.07477 0 0 0.033460054 -0.37064378 4.216227 13402.228 -175.34503 - 100 455.18121 11.708521 11.48472 -7.8033686 42.886648 -23.396327 -1.980193 2.954003 -1888.0547 -1648.7118 -332.0298 -0.099139345 0.11500091 0.033044702 -0.3701566 42.83112 13235.861 526.41632 - 200 460.81997 11.853566 10.817157 -8.2276485 41.690123 -22.521598 -4.273021 2.9600599 -1906.2904 -1609.02 -265.94404 -0.20527926 0.49305948 0.031504957 -0.36829556 41.729191 12619.125 615.80924 - 300 481.48652 12.385166 10.035423 -8.3866916 43.180131 -21.755813 -7.7032433 2.9714114 -1968.7685 290.49656 251.72564 -0.21935745 0.56300721 0.029467915 -0.36568855 43.236828 11803.2 1169.2917 - 400 487.3584 12.536208 11.766522 -8.3643382 49.109699 -24.824142 2.9744597 2.9794185 -2335.993 1368.7398 570.03286 -0.028366234 0.0094148316 0.028338146 -0.36416383 49.028096 11350.678 1574.1427 - 500 446.36019 11.48162 12.144202 -8.680266 45.427771 -22.825143 16.22356 2.9684828 -2113.91 -272.84753 185.53392 0.091614289 0.098205455 0.028793585 -0.36478567 45.368325 11533.101 979.68395 - 600 500.3783 12.871115 11.075008 -8.47833 47.783726 -22.456104 6.837575 2.967236 -2023.8117 -918.27943 -2.4106994 0.093360761 0.10198539 0.029589188 -0.36584873 47.725157 11851.775 912.39361 - 700 435.40634 11.199857 10.923558 -8.3090105 42.626187 -20.571698 -5.7252564 2.9560528 -1806.9448 -1418.2247 -148.41657 0.075011202 0.065835696 0.030359455 -0.36685105 42.558523 12160.301 617.20857 - 800 446.82793 11.493652 11.599712 -8.0900498 45.160336 -21.885719 -6.7745694 2.9575472 -1894.3641 -1329.3179 -136.42193 0.011114896 0.0014455064 0.030808183 -0.3674233 45.076543 12340.037 652.13243 - 900 448.28506 11.531133 12.130739 -8.0810557 45.604542 -21.816625 5.586068 2.9578604 -1890.4653 -1271.1107 -111.89061 -0.020285587 0.0048148677 0.030774258 -0.36738033 45.521594 12326.448 674.68073 - 1000 440.94913 11.342433 10.765654 -8.1419484 45.264242 -22.833545 6.9260573 2.960122 -2007.6188 -1179.7125 -70.907567 -0.062733519 0.046047757 0.030329191 -0.36681215 45.191633 12148.179 730.67128 -Loop time of 0.248185 on 1 procs for 1000 steps with 200 atoms + 0 0 0 10.862314 -7.320388 4.3005229 3.3062167 -8.7249482 2.9571502 -1743.5332 -698.49808 -172.07477 0 0 0.033460054 -0.37064378 4.216227 13402.228 -175.34503 + 100 455.18121 11.708521 11.48472 -7.8033686 42.886648 2.9263894 -1.980193 2.954003 -1888.0547 -1648.7118 -332.0298 -0.099139345 0.11500091 0.033044702 -0.3701566 42.83112 13235.861 526.41632 + 200 460.81997 11.853566 10.817157 -8.2276485 41.690123 3.1450717 -4.273021 2.9600599 -1906.2904 -1609.02 -265.94404 -0.20527926 0.49305948 0.031504957 -0.36829556 41.729191 12619.125 615.80924 + 300 481.48652 12.385166 10.035423 -8.3866916 43.180131 3.336518 -7.7032433 2.9714114 -1968.7685 290.49656 251.72564 -0.21935745 0.56300721 0.029467915 -0.36568855 43.236828 11803.2 1169.2917 + 400 487.3584 12.536208 11.766522 -8.3643382 49.109699 2.5694358 2.9744597 2.9794185 -2335.993 1368.7398 570.03286 -0.028366234 0.0094148316 0.028338146 -0.36416383 49.028096 11350.678 1574.1427 + 500 446.36019 11.48162 12.144202 -8.680266 45.427771 3.0691855 16.22356 2.9684828 -2113.91 -272.84753 185.53392 0.091614289 0.098205455 0.028793585 -0.36478567 45.368325 11533.101 979.68395 + 600 500.3783 12.871115 11.075008 -8.47833 47.783726 3.1614452 6.837575 2.967236 -2023.8117 -918.27943 -2.4106994 0.093360761 0.10198539 0.029589188 -0.36584873 47.725157 11851.775 912.39361 + 700 435.40634 11.199857 10.923558 -8.3090105 42.626187 3.6325468 -5.7252564 2.9560528 -1806.9448 -1418.2247 -148.41657 0.075011202 0.065835696 0.030359455 -0.36685105 42.558523 12160.301 617.20857 + 800 446.82793 11.493652 11.599712 -8.0900498 45.160336 3.3040415 -6.7745694 2.9575472 -1894.3641 -1329.3179 -136.42193 0.011114896 0.0014455064 0.030808183 -0.3674233 45.076543 12340.037 652.13243 + 900 448.28506 11.531133 12.130739 -8.0810557 45.604542 3.321315 5.586068 2.9578604 -1890.4653 -1271.1107 -111.89061 -0.020285587 0.0048148677 0.030774258 -0.36738033 45.521594 12326.448 674.68073 + 1000 440.94913 11.342433 10.765654 -8.1419484 45.264242 3.0670849 6.9260573 2.960122 -2007.6188 -1179.7125 -70.907567 -0.062733519 0.046047757 0.030329191 -0.36681215 45.191633 12148.179 730.67128 +Loop time of 0.218435 on 1 procs for 1000 steps with 200 atoms -Performance: 348.128 ns/day, 0.069 hours/ns, 4029.259 timesteps/s, 805.852 katom-step/s -97.8% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 395.541 ns/day, 0.061 hours/ns, 4578.019 timesteps/s, 915.604 katom-step/s +99.1% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.14702 | 0.14702 | 0.14702 | 0.0 | 59.24 -Neigh | 0.0010003 | 0.0010003 | 0.0010003 | 0.0 | 0.40 -Comm | 0.0039821 | 0.0039821 | 0.0039821 | 0.0 | 1.60 -Output | 0.00023527 | 0.00023527 | 0.00023527 | 0.0 | 0.09 -Modify | 0.094519 | 0.094519 | 0.094519 | 0.0 | 38.08 -Other | | 0.001427 | | | 0.58 +Pair | 0.12079 | 0.12079 | 0.12079 | 0.0 | 55.30 +Neigh | 0.0010224 | 0.0010224 | 0.0010224 | 0.0 | 0.47 +Comm | 0.0035478 | 0.0035478 | 0.0035478 | 0.0 | 1.62 +Output | 0.00010889 | 0.00010889 | 0.00010889 | 0.0 | 0.05 +Modify | 0.092098 | 0.092098 | 0.092098 | 0.0 | 42.16 +Other | | 0.0008684 | | | 0.40 Nlocal: 200 ave 200 max 200 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/PACKAGES/pimd/langevin_metal_units/log.14Jun23.langevin.metal.g++.3 b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.langevin.metal.g++.3 similarity index 70% rename from examples/PACKAGES/pimd/langevin_metal_units/log.14Jun23.langevin.metal.g++.3 rename to examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.langevin.metal.g++.3 index 423ebb7d63..25578a068c 100644 --- a/examples/PACKAGES/pimd/langevin_metal_units/log.14Jun23.langevin.metal.g++.3 +++ b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.langevin.metal.g++.3 @@ -1,5 +1,6 @@ -LAMMPS (28 Mar 2023) +LAMMPS (3 Aug 2023) Processor partition = 3 +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) using 1 OpenMP thread(s) per MPI task variable ibead uloop 99 pad @@ -29,10 +30,7 @@ timestep 0.001 velocity all create 0.0 ${ibead} velocity all create 0.0 04 -fix 1 all pimd/langevin ensemble npt integrator obabo thermostat PILE_L 1234 tau 1.0 temp 113.15 iso 1.0 barostat BZP taup 1.0 fixcom no - -Initializing PIMD BZP barostat... -The barostat mass is W = 2.3401256650800001e+01 +fix 1 all pimd/langevin method nmpimd ensemble npt integrator obabo thermostat PILE_L 1234 tau 1.0 temp 113.15 iso 1.0 barostat BZP taup 1.0 fixcom no thermo_style custom step temp f_1[*] vol press thermo 100 @@ -43,15 +41,6 @@ thermo_modify norm no run 1000 Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule - -Initializing PI Langevin equation thermostat... -Bead ID | omega | tau | c1 | c2 - 0 0.00000000e+00 1.00000000e+00 9.99500125e-01 3.16148726e-02 - 1 8.37986825e+01 5.96668092e-03 9.19616372e-01 3.92817678e-01 - 2 1.18509233e+02 4.21908054e-03 8.88243614e-01 4.59372705e-01 - 3 8.37986825e+01 5.96668092e-03 9.19616372e-01 3.92817678e-01 -PILE_L thermostat successfully initialized! - Neighbor list info ... update: every = 1 steps, delay = 0 steps, check = yes max neighbors/atom: 2000, page size: 100000 @@ -66,31 +55,31 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 3.121 | 3.121 | 3.121 Mbytes Step Temp f_1[1] f_1[2] f_1[3] f_1[4] f_1[5] f_1[6] f_1[7] f_1[8] f_1[9] f_1[10] f_1[11] f_1[12] f_1[13] f_1[14] f_1[15] Volume Press - 0 0 0 10.794425 -7.3457072 4.3005229 -21.877018 -8.7249482 2.9571502 -1743.5332 -698.49808 -172.07477 0 0 0.033460054 -0.37064378 4.216227 13402.228 -191.02389 - 100 426.01705 10.958338 12.206372 -7.8040582 42.886648 -23.396327 -1.980193 2.954003 -1888.0547 -1648.7118 -332.0298 -0.099139345 0.11500091 0.033044702 -0.3701566 42.83112 13235.861 464.39271 - 200 414.52703 10.662783 11.934129 -8.2331312 41.690123 -22.521598 -4.273021 2.9600599 -1906.2904 -1609.02 -265.94404 -0.20527926 0.49305948 0.031504957 -0.36829556 41.729191 12619.125 502.87052 - 300 424.85622 10.928478 11.681713 -8.357621 43.180131 -21.755813 -7.7032433 2.9714114 -1968.7685 290.49656 251.72564 -0.21935745 0.56300721 0.029467915 -0.36568855 43.236828 11803.2 1058.1162 - 400 485.80103 12.496148 12.255827 -8.3658975 49.109699 -24.824142 2.9744597 2.9794185 -2335.993 1368.7398 570.03286 -0.028366234 0.0094148316 0.028338146 -0.36416383 49.028096 11350.678 1570.2486 - 500 462.99006 11.909386 11.187609 -8.6934698 45.427771 -22.825143 16.22356 2.9684828 -2113.91 -272.84753 185.53392 0.091614289 0.098205455 0.028793585 -0.36478567 45.368325 11533.101 1014.2134 - 600 465.24407 11.967366 11.168375 -8.4422887 47.783726 -22.456104 6.837575 2.967236 -2023.8117 -918.27943 -2.4106994 0.093360761 0.10198539 0.029589188 -0.36584873 47.725157 11851.775 864.12413 - 700 426.16111 10.962044 11.000011 -8.2855512 42.626187 -20.571698 -5.7252564 2.9560528 -1806.9448 -1418.2247 -148.41657 0.075011202 0.065835696 0.030359455 -0.36685105 42.558523 12160.301 614.76939 - 800 454.53159 11.691811 10.834606 -8.0654281 45.160336 -21.885719 -6.7745694 2.9575472 -1894.3641 -1329.3179 -136.42193 0.011114896 0.0014455064 0.030808183 -0.3674233 45.076543 12340.037 684.85907 - 900 441.72064 11.362278 10.4492 -8.0786302 45.604542 -21.816625 5.586068 2.9578604 -1890.4653 -1271.1107 -111.89061 -0.020285587 0.0048148677 0.030774258 -0.36738033 45.521594 12326.448 659.68525 - 1000 429.90929 11.058457 11.851933 -8.1578394 45.264242 -22.833545 6.9260573 2.960122 -2007.6188 -1179.7125 -70.907567 -0.062733519 0.046047757 0.030329191 -0.36681215 45.191633 12148.179 698.73278 -Loop time of 0.248175 on 1 procs for 1000 steps with 200 atoms + 0 0 0 10.794425 -7.3457072 4.3005229 3.3062167 -8.7249482 2.9571502 -1743.5332 -698.49808 -172.07477 0 0 0.033460054 -0.37064378 4.216227 13402.228 -191.02389 + 100 426.01705 10.958338 12.206372 -7.8040582 42.886648 2.9263894 -1.980193 2.954003 -1888.0547 -1648.7118 -332.0298 -0.099139345 0.11500091 0.033044702 -0.3701566 42.83112 13235.861 464.39271 + 200 414.52703 10.662783 11.934129 -8.2331312 41.690123 3.1450717 -4.273021 2.9600599 -1906.2904 -1609.02 -265.94404 -0.20527926 0.49305948 0.031504957 -0.36829556 41.729191 12619.125 502.87052 + 300 424.85622 10.928478 11.681713 -8.357621 43.180131 3.336518 -7.7032433 2.9714114 -1968.7685 290.49656 251.72564 -0.21935745 0.56300721 0.029467915 -0.36568855 43.236828 11803.2 1058.1162 + 400 485.80103 12.496148 12.255827 -8.3658975 49.109699 2.5694358 2.9744597 2.9794185 -2335.993 1368.7398 570.03286 -0.028366234 0.0094148316 0.028338146 -0.36416383 49.028096 11350.678 1570.2486 + 500 462.99006 11.909386 11.187609 -8.6934698 45.427771 3.0691855 16.22356 2.9684828 -2113.91 -272.84753 185.53392 0.091614289 0.098205455 0.028793585 -0.36478567 45.368325 11533.101 1014.2134 + 600 465.24407 11.967366 11.168375 -8.4422887 47.783726 3.1614452 6.837575 2.967236 -2023.8117 -918.27943 -2.4106994 0.093360761 0.10198539 0.029589188 -0.36584873 47.725157 11851.775 864.12413 + 700 426.16111 10.962044 11.000011 -8.2855512 42.626187 3.6325468 -5.7252564 2.9560528 -1806.9448 -1418.2247 -148.41657 0.075011202 0.065835696 0.030359455 -0.36685105 42.558523 12160.301 614.76939 + 800 454.53159 11.691811 10.834606 -8.0654281 45.160336 3.3040415 -6.7745694 2.9575472 -1894.3641 -1329.3179 -136.42193 0.011114896 0.0014455064 0.030808183 -0.3674233 45.076543 12340.037 684.85907 + 900 441.72064 11.362278 10.4492 -8.0786302 45.604542 3.321315 5.586068 2.9578604 -1890.4653 -1271.1107 -111.89061 -0.020285587 0.0048148677 0.030774258 -0.36738033 45.521594 12326.448 659.68525 + 1000 429.90929 11.058457 11.851933 -8.1578394 45.264242 3.0670849 6.9260573 2.960122 -2007.6188 -1179.7125 -70.907567 -0.062733519 0.046047757 0.030329191 -0.36681215 45.191633 12148.179 698.73278 +Loop time of 0.218441 on 1 procs for 1000 steps with 200 atoms -Performance: 348.141 ns/day, 0.069 hours/ns, 4029.409 timesteps/s, 805.882 katom-step/s -98.1% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 395.530 ns/day, 0.061 hours/ns, 4577.899 timesteps/s, 915.580 katom-step/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.14919 | 0.14919 | 0.14919 | 0.0 | 60.12 -Neigh | 0.00099112 | 0.00099112 | 0.00099112 | 0.0 | 0.40 -Comm | 0.0040992 | 0.0040992 | 0.0040992 | 0.0 | 1.65 -Output | 0.0001723 | 0.0001723 | 0.0001723 | 0.0 | 0.07 -Modify | 0.092299 | 0.092299 | 0.092299 | 0.0 | 37.19 -Other | | 0.00142 | | | 0.57 +Pair | 0.11655 | 0.11655 | 0.11655 | 0.0 | 53.35 +Neigh | 0.0010236 | 0.0010236 | 0.0010236 | 0.0 | 0.47 +Comm | 0.0035622 | 0.0035622 | 0.0035622 | 0.0 | 1.63 +Output | 0.0001071 | 0.0001071 | 0.0001071 | 0.0 | 0.05 +Modify | 0.096348 | 0.096348 | 0.096348 | 0.0 | 44.11 +Other | | 0.0008537 | | | 0.39 Nlocal: 200 ave 200 max 200 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++ b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++ new file mode 100644 index 0000000000..a05d2d9aa8 --- /dev/null +++ b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++ @@ -0,0 +1,2 @@ +LAMMPS (3 Aug 2023) +Running on 4 partitions of processors diff --git a/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.0 b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.0 new file mode 100644 index 0000000000..2d9d049a49 --- /dev/null +++ b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.0 @@ -0,0 +1,103 @@ +LAMMPS (3 Aug 2023) +Processor partition = 0 +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +variable ibead uloop 99 pad + +units metal +atom_style atomic +atom_modify map yes +boundary p p p +pair_style lj/cut 9.5251 +read_data data.metalnpt${ibead} +read_data data.metalnpt01 +Reading data file ... + orthogonal box = (-11.876697 -11.876697 -11.876697) to (11.876697 11.876697 11.876697) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 200 atoms + reading velocities ... + 200 velocities + read_data CPU = 0.001 seconds + +pair_coeff * * 0.00965188 3.4 +pair_modify shift yes + +mass 1 39.948 + +timestep 0.001 + +velocity all create 0.0 ${ibead} +velocity all create 0.0 01 + +fix 1 all pimd/langevin method pimd ensemble nvt integrator obabo thermostat PILE_L 1234 tau 1.0 temp 113.15 taup 1.0 fixcom no + +thermo_style custom step temp f_1[*] vol press +thermo 100 +thermo_modify norm no + +# dump dcd all custom 100 ${ibead}.dcd id type xu yu zu vx vy vz ix iy iz fx fy fz +# dump_modify dcd sort id format line "%d %d %.16f %.16f %.16f %.16f %.16f %.16f %d %d %d %.16f %.16f %.16f" + +run 1000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Initializing PI Langevin equation thermostat... + Bead ID | omega | tau | c1 | c2 + 0 5.92546167e+01 1.00000000e+00 9.99500125e-01 3.16148726e-02 + 1 5.92546167e+01 1.00000000e+00 9.99500125e-01 3.16148726e-02 + 2 5.92546167e+01 1.00000000e+00 9.99500125e-01 3.16148726e-02 + 3 5.92546167e+01 1.00000000e+00 9.99500125e-01 3.16148726e-02 + PILE_L thermostat successfully initialized! + +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 11.5251 + ghost atom cutoff = 11.5251 + binsize = 5.76255, bins = 5 5 5 + 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 + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.121 | 3.121 | 3.121 Mbytes + Step Temp f_1[1] f_1[2] f_1[3] f_1[4] f_1[5] f_1[6] f_1[7] f_1[8] f_1[9] f_1[10] Volume Press + 0 0 0 8.8893303 -7.3046601 4.3005229 3.3062167 0 0 -1743.5332 0 0 13402.228 -164.47373 + 100 248.24141 6.3854564 4.1458616 -7.7546467 9.6829291 3.3062167 0 0 -1743.5332 0.00061164884 127.22547 13402.228 26.894568 + 200 346.2569 8.9066861 2.6427185 -7.8943744 14.016847 3.3062167 0 0 -1743.5332 0.00088274242 177.45909 13402.228 91.225638 + 300 217.65314 5.5986414 7.0223362 -7.788449 18.162833 3.3062167 0 0 -1743.5332 0.00054181173 111.54876 13402.228 -125.00786 + 400 266.83825 6.8638187 6.2507813 -7.7241546 21.628032 3.3062167 0 0 -1743.5332 0.0007209203 136.75648 13402.228 21.104834 + 500 342.40379 8.8075736 5.1959052 -7.7020799 25.668758 3.3062167 0 0 -1743.5332 0.00087137898 175.48435 13402.228 208.60351 + 600 280.37754 7.2120867 8.0025846 -7.5954127 28.570788 3.3062167 0 0 -1743.5332 0.00072432598 143.69546 13402.228 162.09838 + 700 377.11625 9.700474 6.0049074 -7.5861377 30.034627 3.3062167 0 0 -1743.5332 0.00092377441 193.27472 13402.228 389.35575 + 800 378.36221 9.7325237 6.1704761 -7.6170017 31.447502 3.3062167 0 0 -1743.5332 0.00097254954 193.91329 13402.228 387.71781 + 900 271.99864 6.9965581 9.037081 -7.4781664 32.906719 3.3062167 0 0 -1743.5332 0.00074024142 139.40121 13402.228 266.3664 + 1000 362.4753 9.3238683 8.0266514 -7.4835536 34.914285 3.3062167 0 0 -1743.5332 0.00088800624 185.77114 13402.228 433.67079 +Loop time of 0.166656 on 1 procs for 1000 steps with 200 atoms + +Performance: 518.435 ns/day, 0.046 hours/ns, 6000.401 timesteps/s, 1.200 Matom-step/s +99.5% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.10478 | 0.10478 | 0.10478 | 0.0 | 62.87 +Neigh | 0.00096007 | 0.00096007 | 0.00096007 | 0.0 | 0.58 +Comm | 0.0035065 | 0.0035065 | 0.0035065 | 0.0 | 2.10 +Output | 0.0001037 | 0.0001037 | 0.0001037 | 0.0 | 0.06 +Modify | 0.056454 | 0.056454 | 0.056454 | 0.0 | 33.87 +Other | | 0.0008515 | | | 0.51 + +Nlocal: 200 ave 200 max 200 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1360 ave 1360 max 1360 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 9544 ave 9544 max 9544 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 9544 +Ave neighs/atom = 47.72 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.1 b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.1 new file mode 100644 index 0000000000..9be069b960 --- /dev/null +++ b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.1 @@ -0,0 +1,95 @@ +LAMMPS (3 Aug 2023) +Processor partition = 1 +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +variable ibead uloop 99 pad + +units metal +atom_style atomic +atom_modify map yes +boundary p p p +pair_style lj/cut 9.5251 +read_data data.metalnpt${ibead} +read_data data.metalnpt02 +Reading data file ... + orthogonal box = (-11.876697 -11.876697 -11.876697) to (11.876697 11.876697 11.876697) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 200 atoms + reading velocities ... + 200 velocities + read_data CPU = 0.001 seconds + +pair_coeff * * 0.00965188 3.4 +pair_modify shift yes + +mass 1 39.948 + +timestep 0.001 + +velocity all create 0.0 ${ibead} +velocity all create 0.0 02 + +fix 1 all pimd/langevin method pimd ensemble nvt integrator obabo thermostat PILE_L 1234 tau 1.0 temp 113.15 taup 1.0 fixcom no + +thermo_style custom step temp f_1[*] vol press +thermo 100 +thermo_modify norm no + +# dump dcd all custom 100 ${ibead}.dcd id type xu yu zu vx vy vz ix iy iz fx fy fz +# dump_modify dcd sort id format line "%d %d %.16f %.16f %.16f %.16f %.16f %.16f %d %d %d %.16f %.16f %.16f" + +run 1000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 11.5251 + ghost atom cutoff = 11.5251 + binsize = 5.76255, bins = 5 5 5 + 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 + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.121 | 3.121 | 3.121 Mbytes + Step Temp f_1[1] f_1[2] f_1[3] f_1[4] f_1[5] f_1[6] f_1[7] f_1[8] f_1[9] f_1[10] Volume Press + 0 0 0 8.4854554 -7.3063682 4.3005229 3.3062167 0 0 -1743.5332 0 0 13402.228 -167.65544 + 100 231.55472 5.9562285 3.9188988 -7.7552569 9.6829291 3.3062167 0 0 -1743.5332 0.00061164884 127.22547 13402.228 -9.7693407 + 200 366.33366 9.423116 2.3606144 -7.8893287 14.016847 3.3062167 0 0 -1743.5332 0.00088274242 177.45909 13402.228 131.05061 + 300 213.74457 5.4981021 6.4391043 -7.7947526 18.162833 3.3062167 0 0 -1743.5332 0.00054181173 111.54876 13402.228 -136.92734 + 400 273.60832 7.0379636 5.6777233 -7.7709858 21.628032 3.3062167 0 0 -1743.5332 0.0007209203 136.75648 13402.228 -0.14681392 + 500 338.99655 8.7199299 5.4335645 -7.7194465 25.668758 3.3062167 0 0 -1743.5332 0.00087137898 175.48435 13402.228 190.1705 + 600 298.58126 7.6803369 7.2512164 -7.5741948 28.570788 3.3062167 0 0 -1743.5332 0.00072432598 143.69546 13402.228 226.78095 + 700 352.53291 9.0681226 5.4845895 -7.5875298 30.034627 3.3062167 0 0 -1743.5332 0.00092377441 193.27472 13402.228 335.39327 + 800 389.70585 10.024313 5.143907 -7.6218106 31.447502 3.3062167 0 0 -1743.5332 0.00097254954 193.91329 13402.228 409.36108 + 900 285.3019 7.3387547 7.6228894 -7.5140003 32.906719 3.3062167 0 0 -1743.5332 0.00074024142 139.40121 13402.228 266.93105 + 1000 345.35667 8.8835299 6.9652602 -7.5180013 34.914285 3.3062167 0 0 -1743.5332 0.00088800624 185.77114 13402.228 368.83819 +Loop time of 0.16666 on 1 procs for 1000 steps with 200 atoms + +Performance: 518.420 ns/day, 0.046 hours/ns, 6000.230 timesteps/s, 1.200 Matom-step/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.10798 | 0.10798 | 0.10798 | 0.0 | 64.79 +Neigh | 0.00097784 | 0.00097784 | 0.00097784 | 0.0 | 0.59 +Comm | 0.0035304 | 0.0035304 | 0.0035304 | 0.0 | 2.12 +Output | 8.5625e-05 | 8.5625e-05 | 8.5625e-05 | 0.0 | 0.05 +Modify | 0.05322 | 0.05322 | 0.05322 | 0.0 | 31.93 +Other | | 0.0008694 | | | 0.52 + +Nlocal: 200 ave 200 max 200 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1360 ave 1360 max 1360 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 9552 ave 9552 max 9552 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 9552 +Ave neighs/atom = 47.76 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.2 b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.2 new file mode 100644 index 0000000000..f5869bcb03 --- /dev/null +++ b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.2 @@ -0,0 +1,95 @@ +LAMMPS (3 Aug 2023) +Processor partition = 2 +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +variable ibead uloop 99 pad + +units metal +atom_style atomic +atom_modify map yes +boundary p p p +pair_style lj/cut 9.5251 +read_data data.metalnpt${ibead} +read_data data.metalnpt03 +Reading data file ... + orthogonal box = (-11.876697 -11.876697 -11.876697) to (11.876697 11.876697 11.876697) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 200 atoms + reading velocities ... + 200 velocities + read_data CPU = 0.001 seconds + +pair_coeff * * 0.00965188 3.4 +pair_modify shift yes + +mass 1 39.948 + +timestep 0.001 + +velocity all create 0.0 ${ibead} +velocity all create 0.0 03 + +fix 1 all pimd/langevin method pimd ensemble nvt integrator obabo thermostat PILE_L 1234 tau 1.0 temp 113.15 taup 1.0 fixcom no + +thermo_style custom step temp f_1[*] vol press +thermo 100 +thermo_modify norm no + +# dump dcd all custom 100 ${ibead}.dcd id type xu yu zu vx vy vz ix iy iz fx fy fz +# dump_modify dcd sort id format line "%d %d %.16f %.16f %.16f %.16f %.16f %.16f %d %d %d %.16f %.16f %.16f" + +run 1000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 11.5251 + ghost atom cutoff = 11.5251 + binsize = 5.76255, bins = 5 5 5 + 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 + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.121 | 3.121 | 3.121 Mbytes + Step Temp f_1[1] f_1[2] f_1[3] f_1[4] f_1[5] f_1[6] f_1[7] f_1[8] f_1[9] f_1[10] Volume Press + 0 0 0 8.4016332 -7.320388 4.3005229 3.3062167 0 0 -1743.5332 0 0 13402.228 -175.34503 + 100 235.06814 6.0466034 4.1185166 -7.7660023 9.6829291 3.3062167 0 0 -1743.5332 0.00061164884 127.22547 13402.228 -7.6578222 + 200 341.9927 8.7969992 2.7767151 -7.9109058 14.016847 3.3062167 0 0 -1743.5332 0.00088274242 177.45909 13402.228 69.587081 + 300 206.29873 5.3065745 7.3388955 -7.7440046 18.162833 3.3062167 0 0 -1743.5332 0.00054181173 111.54876 13402.228 -118.3143 + 400 305.56268 7.8599181 5.7681208 -7.7110516 21.628032 3.3062167 0 0 -1743.5332 0.0007209203 136.75648 13402.228 107.63706 + 500 313.47536 8.0634543 5.5086382 -7.7030371 25.668758 3.3062167 0 0 -1743.5332 0.00087137898 175.48435 13402.228 145.14899 + 600 258.53638 6.6502715 8.1299001 -7.6530176 28.570788 3.3062167 0 0 -1743.5332 0.00072432598 143.69546 13402.228 92.36234 + 700 357.63679 9.1994085 6.539048 -7.6186515 30.034627 3.3062167 0 0 -1743.5332 0.00092377441 193.27472 13402.228 329.17147 + 800 391.32883 10.066061 5.7809035 -7.6148923 31.447502 3.3062167 0 0 -1743.5332 0.00097254954 193.91329 13402.228 415.13205 + 900 308.61185 7.9383512 8.9544585 -7.4803275 32.906719 3.3062167 0 0 -1743.5332 0.00074024142 139.40121 13402.228 341.46691 + 1000 317.70376 8.1722204 7.3013798 -7.4667312 34.914285 3.3062167 0 0 -1743.5332 0.00088800624 185.77114 13402.228 352.92253 +Loop time of 0.16666 on 1 procs for 1000 steps with 200 atoms + +Performance: 518.420 ns/day, 0.046 hours/ns, 6000.235 timesteps/s, 1.200 Matom-step/s +98.6% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.10509 | 0.10509 | 0.10509 | 0.0 | 63.06 +Neigh | 0.00096379 | 0.00096379 | 0.00096379 | 0.0 | 0.58 +Comm | 0.0035557 | 0.0035557 | 0.0035557 | 0.0 | 2.13 +Output | 7.8072e-05 | 7.8072e-05 | 7.8072e-05 | 0.0 | 0.05 +Modify | 0.05611 | 0.05611 | 0.05611 | 0.0 | 33.67 +Other | | 0.0008601 | | | 0.52 + +Nlocal: 200 ave 200 max 200 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1364 ave 1364 max 1364 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 9545 ave 9545 max 9545 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 9545 +Ave neighs/atom = 47.725 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.3 b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.3 new file mode 100644 index 0000000000..da0767fe0d --- /dev/null +++ b/examples/PACKAGES/pimd/langevin_metal_units/log.16Nov23.pimd-langevin.metal.g++.3 @@ -0,0 +1,95 @@ +LAMMPS (3 Aug 2023) +Processor partition = 3 +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98) + using 1 OpenMP thread(s) per MPI task +variable ibead uloop 99 pad + +units metal +atom_style atomic +atom_modify map yes +boundary p p p +pair_style lj/cut 9.5251 +read_data data.metalnpt${ibead} +read_data data.metalnpt04 +Reading data file ... + orthogonal box = (-11.876697 -11.876697 -11.876697) to (11.876697 11.876697 11.876697) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 200 atoms + reading velocities ... + 200 velocities + read_data CPU = 0.001 seconds + +pair_coeff * * 0.00965188 3.4 +pair_modify shift yes + +mass 1 39.948 + +timestep 0.001 + +velocity all create 0.0 ${ibead} +velocity all create 0.0 04 + +fix 1 all pimd/langevin method pimd ensemble nvt integrator obabo thermostat PILE_L 1234 tau 1.0 temp 113.15 taup 1.0 fixcom no + +thermo_style custom step temp f_1[*] vol press +thermo 100 +thermo_modify norm no + +# dump dcd all custom 100 ${ibead}.dcd id type xu yu zu vx vy vz ix iy iz fx fy fz +# dump_modify dcd sort id format line "%d %d %.16f %.16f %.16f %.16f %.16f %.16f %d %d %d %.16f %.16f %.16f" + +run 1000 +Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule +Neighbor list info ... + update: every = 1 steps, delay = 0 steps, check = yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 11.5251 + ghost atom cutoff = 11.5251 + binsize = 5.76255, bins = 5 5 5 + 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 + bin: standard +Per MPI rank memory allocation (min/avg/max) = 3.121 | 3.121 | 3.121 Mbytes + Step Temp f_1[1] f_1[2] f_1[3] f_1[4] f_1[5] f_1[6] f_1[7] f_1[8] f_1[9] f_1[10] Volume Press + 0 0 0 7.8012276 -7.3457072 4.3005229 3.3062167 0 0 -1743.5332 0 0 13402.228 -191.02389 + 100 241.19035 6.2040835 3.9473764 -7.7641902 9.6829291 3.3062167 0 0 -1743.5332 0.00061164884 127.22547 13402.228 3.5720518 + 200 325.21166 8.3653443 2.3529831 -7.9137212 14.016847 3.3062167 0 0 -1743.5332 0.00088274242 177.45909 13402.228 33.184125 + 300 209.19735 5.381135 6.7063061 -7.801056 18.162833 3.3062167 0 0 -1743.5332 0.00054181173 111.54876 13402.228 -154.10632 + 400 280.84513 7.2241142 5.8838331 -7.7320495 21.628032 3.3062167 0 0 -1743.5332 0.0007209203 136.75648 13402.228 45.624285 + 500 367.15726 9.4443014 5.2842629 -7.6643085 25.668758 3.3062167 0 0 -1743.5332 0.00087137898 175.48435 13402.228 283.59979 + 600 294.68254 7.5800508 6.5104311 -7.6234652 28.570788 3.3062167 0 0 -1743.5332 0.00072432598 143.69546 13402.228 183.09906 + 700 356.64514 9.1739005 5.2769462 -7.6204507 30.034627 3.3062167 0 0 -1743.5332 0.00092377441 193.27472 13402.228 334.31754 + 800 360.77353 9.2800941 5.7976264 -7.6946985 31.447502 3.3062167 0 0 -1743.5332 0.00097254954 193.91329 13402.228 299.62001 + 900 291.14241 7.4889889 7.5124196 -7.5102882 32.906719 3.3062167 0 0 -1743.5332 0.00074024142 139.40121 13402.228 277.94834 + 1000 362.48694 9.3241677 6.8711151 -7.4856221 34.914285 3.3062167 0 0 -1743.5332 0.00088800624 185.77114 13402.228 428.98682 +Loop time of 0.166662 on 1 procs for 1000 steps with 200 atoms + +Performance: 518.414 ns/day, 0.046 hours/ns, 6000.167 timesteps/s, 1.200 Matom-step/s +98.5% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.10817 | 0.10817 | 0.10817 | 0.0 | 64.90 +Neigh | 0.00096402 | 0.00096402 | 0.00096402 | 0.0 | 0.58 +Comm | 0.0044991 | 0.0044991 | 0.0044991 | 0.0 | 2.70 +Output | 8.5449e-05 | 8.5449e-05 | 8.5449e-05 | 0.0 | 0.05 +Modify | 0.052066 | 0.052066 | 0.052066 | 0.0 | 31.24 +Other | | 0.00088 | | | 0.53 + +Nlocal: 200 ave 200 max 200 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1368 ave 1368 max 1368 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 9541 ave 9541 max 9541 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 9541 +Ave neighs/atom = 47.705 +Neighbor list builds = 4 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/PACKAGES/pimd/langevin_metal_units/run.sh b/examples/PACKAGES/pimd/langevin_metal_units/run.sh index 2580ef1a41..8bac9231a3 100644 --- a/examples/PACKAGES/pimd/langevin_metal_units/run.sh +++ b/examples/PACKAGES/pimd/langevin_metal_units/run.sh @@ -1 +1,3 @@ -mpirun -np 4 $LMP -in in.lmp -p 4x1 -log log -screen screen +mpirun -np 4 $LMP -in in.langevin.metal -p 4x1 -log log.langevin.metal -screen screen +mpirun -np 4 $LMP -in in.pimd-langevin.metal -p 4x1 -log log.pimd-langevin.metal -screen screen + From 44b126a87d9800b1ff97a9d4b2a0ec59a93847aa Mon Sep 17 00:00:00 2001 From: jbcouli Date: Thu, 16 Nov 2023 10:35:02 -0700 Subject: [PATCH 148/204] correct typo and link in body particles doc --- doc/src/Howto_body.rst | 6 +++--- doc/src/pair_body_rounded_polyhedron.rst | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/src/Howto_body.rst b/doc/src/Howto_body.rst index 88fa2d9c97..115b7797c8 100644 --- a/doc/src/Howto_body.rst +++ b/doc/src/Howto_body.rst @@ -170,9 +170,9 @@ with this body style to compute body/body and body/non-body interactions. The *rounded/polygon* body style represents body particles as a 2d polygon with a variable number of N vertices. This style can only be used for 2d models; see the :doc:`boundary ` command. See the -"pair_style body/rounded/polygon" page for a diagram of two -squares with rounded circles at the vertices. Special cases for N = 1 -(circle) and N = 2 (rod with rounded ends) can also be specified. +:doc:`pair_style body/rounded/polygon ` page for +a diagram of two squares with rounded circles at the vertices. Special cases +for N = 1 (circle) and N = 2 (rod with rounded ends) can also be specified. One use of this body style is for 2d discrete element models, as described in :ref:`Fraige `. diff --git a/doc/src/pair_body_rounded_polyhedron.rst b/doc/src/pair_body_rounded_polyhedron.rst index f2f7c1676a..b3eaf72321 100644 --- a/doc/src/pair_body_rounded_polyhedron.rst +++ b/doc/src/pair_body_rounded_polyhedron.rst @@ -40,7 +40,7 @@ rounded/polyhedron particles. This pairwise interaction between the rounded polyhedra is described in :ref:`Wang `, where a polyhedron does not have sharp corners and edges, but is rounded at its vertices and edges by spheres -centered on each vertex with a specified diameter. The edges if the +centered on each vertex with a specified diameter. The edges of the polyhedron are defined between pairs of adjacent vertices. Its faces are defined by a loop of edges. The sphere diameter for each polygon is specified in the data file read by the :doc:`read data ` From ac5f28719b7cf4170edbdfad11417eb9c46c226b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 16 Nov 2023 15:52:45 -0500 Subject: [PATCH 149/204] explicitly include `if constexpr` only when C++17 or later is selected --- src/fmt/compile.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fmt/compile.h b/src/fmt/compile.h index a4c7e49563..ef8d5c0256 100644 --- a/src/fmt/compile.h +++ b/src/fmt/compile.h @@ -61,7 +61,7 @@ const T& first(const T& value, const Tail&...) { return value; } -#if defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction) +#if defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction) && FMT_CPLUSPLUS >= 201703L template struct type_list {}; // Returns a reference to the argument at index N from [first, rest...]. From ddd5cc1a737281f52f7acbda545623b7c3e8435c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 16 Nov 2023 15:53:23 -0500 Subject: [PATCH 150/204] avoid segfault on command errors in force style unit tests and print error mesage instead --- unittest/force-styles/test_angle_style.cpp | 19 ++++++++++++++-- unittest/force-styles/test_bond_style.cpp | 19 ++++++++++++++-- unittest/force-styles/test_dihedral_style.cpp | 19 ++++++++++++++-- unittest/force-styles/test_improper_style.cpp | 19 ++++++++++++++-- unittest/force-styles/test_pair_style.cpp | 22 ++++++++++++++++--- 5 files changed, 87 insertions(+), 11 deletions(-) diff --git a/unittest/force-styles/test_angle_style.cpp b/unittest/force-styles/test_angle_style.cpp index bd0e3d8859..3476ae8dde 100644 --- a/unittest/force-styles/test_angle_style.cpp +++ b/unittest/force-styles/test_angle_style.cpp @@ -26,6 +26,7 @@ #include "angle.h" #include "atom.h" #include "compute.h" +#include "exceptions.h" #include "fmt/format.h" #include "force.h" #include "info.h" @@ -59,7 +60,7 @@ void cleanup_lammps(LAMMPS *lmp, const TestConfig &cfg) delete lmp; } -LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool newton = true) +LAMMPS *init_lammps(LAMMPS::argv &args, const TestConfig &cfg, const bool newton = true) { LAMMPS *lmp; @@ -90,7 +91,21 @@ LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool newto // utility lambdas to improve readability auto command = [&](const std::string &line) { - lmp->input->one(line); + try { + lmp->input->one(line); + } catch (LAMMPSAbortException &ae) { + fprintf(stderr, "LAMMPS Error: %s\n", ae.what()); + exit(2); + } catch (LAMMPSException &e) { + fprintf(stderr, "LAMMPS Error: %s\n", e.what()); + exit(3); + } catch (fmt::format_error &fe) { + fprintf(stderr, "fmt::format_error: %s\n", fe.what()); + exit(4); + } catch (std::exception &e) { + fprintf(stderr, "General exception: %s\n", e.what()); + exit(5); + } }; auto parse_input_script = [&](const std::string &filename) { lmp->input->file(filename.c_str()); diff --git a/unittest/force-styles/test_bond_style.cpp b/unittest/force-styles/test_bond_style.cpp index aa99f41f8d..f7ecd835b0 100644 --- a/unittest/force-styles/test_bond_style.cpp +++ b/unittest/force-styles/test_bond_style.cpp @@ -26,6 +26,7 @@ #include "atom.h" #include "bond.h" #include "compute.h" +#include "exceptions.h" #include "fmt/format.h" #include "force.h" #include "info.h" @@ -59,7 +60,7 @@ void cleanup_lammps(LAMMPS *lmp, const TestConfig &cfg) delete lmp; } -LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool newton = true) +LAMMPS *init_lammps(LAMMPS::argv &args, const TestConfig &cfg, const bool newton = true) { LAMMPS *lmp; @@ -90,7 +91,21 @@ LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool newto // utility lambdas to improve readability auto command = [&](const std::string &line) { - lmp->input->one(line); + try { + lmp->input->one(line); + } catch (LAMMPSAbortException &ae) { + fprintf(stderr, "LAMMPS Error: %s\n", ae.what()); + exit(2); + } catch (LAMMPSException &e) { + fprintf(stderr, "LAMMPS Error: %s\n", e.what()); + exit(3); + } catch (fmt::format_error &fe) { + fprintf(stderr, "fmt::format_error: %s\n", fe.what()); + exit(4); + } catch (std::exception &e) { + fprintf(stderr, "General exception: %s\n", e.what()); + exit(5); + } }; auto parse_input_script = [&](const std::string &filename) { lmp->input->file(filename.c_str()); diff --git a/unittest/force-styles/test_dihedral_style.cpp b/unittest/force-styles/test_dihedral_style.cpp index 25690fc33d..662d63909d 100644 --- a/unittest/force-styles/test_dihedral_style.cpp +++ b/unittest/force-styles/test_dihedral_style.cpp @@ -26,6 +26,7 @@ #include "atom.h" #include "compute.h" #include "dihedral.h" +#include "exceptions.h" #include "fmt/format.h" #include "force.h" #include "info.h" @@ -59,7 +60,7 @@ void cleanup_lammps(LAMMPS *lmp, const TestConfig &cfg) delete lmp; } -LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool newton = true) +LAMMPS *init_lammps(LAMMPS::argv &args, const TestConfig &cfg, const bool newton = true) { LAMMPS *lmp = new LAMMPS(args, MPI_COMM_WORLD); @@ -88,7 +89,21 @@ LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool newto // utility lambdas to improve readability auto command = [&](const std::string &line) { - lmp->input->one(line); + try { + lmp->input->one(line); + } catch (LAMMPSAbortException &ae) { + fprintf(stderr, "LAMMPS Error: %s\n", ae.what()); + exit(2); + } catch (LAMMPSException &e) { + fprintf(stderr, "LAMMPS Error: %s\n", e.what()); + exit(3); + } catch (fmt::format_error &fe) { + fprintf(stderr, "fmt::format_error: %s\n", fe.what()); + exit(4); + } catch (std::exception &e) { + fprintf(stderr, "General exception: %s\n", e.what()); + exit(5); + } }; auto parse_input_script = [&](const std::string &filename) { lmp->input->file(filename.c_str()); diff --git a/unittest/force-styles/test_improper_style.cpp b/unittest/force-styles/test_improper_style.cpp index b4096df868..dc1b846b5a 100644 --- a/unittest/force-styles/test_improper_style.cpp +++ b/unittest/force-styles/test_improper_style.cpp @@ -25,6 +25,7 @@ #include "atom.h" #include "compute.h" +#include "exceptions.h" #include "fmt/format.h" #include "force.h" #include "improper.h" @@ -59,7 +60,7 @@ void cleanup_lammps(LAMMPS *lmp, const TestConfig &cfg) delete lmp; } -LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool newton = true) +LAMMPS *init_lammps(LAMMPS::argv &args, const TestConfig &cfg, const bool newton = true) { LAMMPS *lmp; @@ -90,7 +91,21 @@ LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool newto // utility lambdas to improve readability auto command = [&](const std::string &line) { - lmp->input->one(line); + try { + lmp->input->one(line); + } catch (LAMMPSAbortException &ae) { + fprintf(stderr, "LAMMPS Error: %s\n", ae.what()); + exit(2); + } catch (LAMMPSException &e) { + fprintf(stderr, "LAMMPS Error: %s\n", e.what()); + exit(3); + } catch (fmt::format_error &fe) { + fprintf(stderr, "fmt::format_error: %s\n", fe.what()); + exit(4); + } catch (std::exception &e) { + fprintf(stderr, "General exception: %s\n", e.what()); + exit(5); + } }; auto parse_input_script = [&](const std::string &filename) { lmp->input->file(filename.c_str()); diff --git a/unittest/force-styles/test_pair_style.cpp b/unittest/force-styles/test_pair_style.cpp index 8ad2ce9aaa..9db9c7ac8b 100644 --- a/unittest/force-styles/test_pair_style.cpp +++ b/unittest/force-styles/test_pair_style.cpp @@ -26,6 +26,7 @@ #include "atom.h" #include "compute.h" #include "domain.h" +#include "exceptions.h" #include "force.h" #include "info.h" #include "input.h" @@ -61,7 +62,7 @@ void cleanup_lammps(LAMMPS *lmp, const TestConfig &cfg) delete lmp; } -LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool newton = true) +LAMMPS *init_lammps(LAMMPS::argv &args, const TestConfig &cfg, const bool newton = true) { LAMMPS *lmp; @@ -92,8 +93,23 @@ LAMMPS *init_lammps(LAMMPS::argv & args, const TestConfig &cfg, const bool newto // utility lambdas to improve readability auto command = [&](const std::string &line) { - lmp->input->one(line); + try { + lmp->input->one(line); + } catch (LAMMPSAbortException &ae) { + fprintf(stderr, "LAMMPS Error: %s\n", ae.what()); + exit(2); + } catch (LAMMPSException &e) { + fprintf(stderr, "LAMMPS Error: %s\n", e.what()); + exit(3); + } catch (fmt::format_error &fe) { + fprintf(stderr, "fmt::format_error: %s\n", fe.what()); + exit(4); + } catch (std::exception &e) { + fprintf(stderr, "General exception: %s\n", e.what()); + exit(5); + } }; + auto parse_input_script = [&](const std::string &filename) { lmp->input->file(filename.c_str()); }; @@ -760,7 +776,7 @@ TEST(PairStyle, gpu) "screen", "-nocite", "-sf", "gpu"}; LAMMPS::argv args_noneigh = {"PairStyle", "-log", "none", "-echo", "screen", "-nocite", "-sf", "gpu", "-pk", "gpu", "0", "neigh", "no"}; - LAMMPS::argv args = args_neigh; + LAMMPS::argv args = args_neigh; // cannot use GPU neighbor list with hybrid pair style (yet) if (test_config.pair_style.substr(0, 6) == "hybrid") { From 718cfc4562150ad87dc1def13003f0060ce8de39 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 16 Nov 2023 14:31:50 -0700 Subject: [PATCH 151/204] Fix indexing bug --- src/npair_trim.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/npair_trim.cpp b/src/npair_trim.cpp index a4b6c1c6a1..f026466f92 100644 --- a/src/npair_trim.cpp +++ b/src/npair_trim.cpp @@ -63,7 +63,7 @@ void NPairTrim::build(NeighList *list) neighptr = ipage->vget(); const int i = ilist_copy[ii]; - ilist[i] = i; + ilist[ii] = i; xtmp = x[i][0]; ytmp = x[i][1]; ztmp = x[i][2]; From 6f366b8c74a4eb2aa3ddd7718f6ffa4666e2dd62 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Thu, 16 Nov 2023 16:21:59 -0700 Subject: [PATCH 152/204] Fix issues with sorting neigh list by cutoff distance --- src/neighbor.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/neighbor.cpp b/src/neighbor.cpp index 8d12edeef2..20d6306572 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -1123,15 +1123,14 @@ int Neighbor::init_pair() } /* ---------------------------------------------------------------------- - sort NeighRequests by cutoff distance - to find smallest list for trimming + sort NeighRequests by cutoff distance for trimming ------------------------------------------------------------------------- */ void Neighbor::sort_requests() { - NeighRequest *jrq; + NeighRequest *irq,*jrq; int i,j,jmin; - double jcut; + double icut,jcut; delete[] j_sorted; j_sorted = new int[nrequest]; @@ -1139,20 +1138,24 @@ void Neighbor::sort_requests() for (i = 0; i < nrequest; i++) j_sorted[i] = i; - for (i = 0; i < nrequest; i++) { - double cutoff_min = cutneighmax; + for (i = 0; i < nrequest-1; i++) { + irq = requests[j_sorted[i]]; + if (irq->cut) icut = irq->cutoff; + else icut = cutneighmax; + double cutoff_min = icut; jmin = i; - for (j = i; j < nrequest-1; j++) { + for (j = i+1; j < nrequest; j++) { jrq = requests[j_sorted[j]]; if (jrq->cut) jcut = jrq->cutoff; else jcut = cutneighmax; - if (jcut <= cutoff_min) { + if (jcut < cutoff_min) { cutoff_min = jcut; jmin = j; } } + int tmp = j_sorted[i]; j_sorted[i] = j_sorted[jmin]; j_sorted[jmin] = tmp; From 4608444ada642a4d31a32a2d54454f57cabb6949 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Thu, 16 Nov 2023 16:23:09 -0700 Subject: [PATCH 153/204] Add trim option to skip neighbor list build styles --- src/KOKKOS/npair_skip_kokkos.cpp | 44 +++-- src/KOKKOS/npair_skip_kokkos.h | 42 ++++- src/neighbor.cpp | 56 +++--- src/npair_skip_respa_trim.cpp | 193 ++++++++++++++++++++ src/npair_skip_respa_trim.h | 40 ++++ src/npair_skip_size_off2on_oneside_trim.cpp | 185 +++++++++++++++++++ src/npair_skip_size_off2on_oneside_trim.h | 40 ++++ src/npair_skip_size_off2on_trim.cpp | 112 ++++++++++++ src/npair_skip_size_off2on_trim.h | 40 ++++ src/npair_skip_size_trim.cpp | 102 +++++++++++ src/npair_skip_size_trim.h | 39 ++++ src/npair_skip_trim.cpp | 118 ++++++++++++ src/npair_skip_trim.h | 46 +++++ 13 files changed, 1019 insertions(+), 38 deletions(-) create mode 100644 src/npair_skip_respa_trim.cpp create mode 100644 src/npair_skip_respa_trim.h create mode 100644 src/npair_skip_size_off2on_oneside_trim.cpp create mode 100644 src/npair_skip_size_off2on_oneside_trim.h create mode 100644 src/npair_skip_size_off2on_trim.cpp create mode 100644 src/npair_skip_size_off2on_trim.h create mode 100644 src/npair_skip_size_trim.cpp create mode 100644 src/npair_skip_size_trim.h create mode 100644 src/npair_skip_trim.cpp create mode 100644 src/npair_skip_trim.h diff --git a/src/KOKKOS/npair_skip_kokkos.cpp b/src/KOKKOS/npair_skip_kokkos.cpp index 4492a3794a..15c0487010 100644 --- a/src/KOKKOS/npair_skip_kokkos.cpp +++ b/src/KOKKOS/npair_skip_kokkos.cpp @@ -23,8 +23,8 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -template -NPairSkipKokkos::NPairSkipKokkos(LAMMPS *lmp) : NPair(lmp) { +template +NPairSkipKokkos::NPairSkipKokkos(LAMMPS *lmp) : NPair(lmp) { atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; d_inum = typename AT::t_int_scalar("npair_skip:inum"); @@ -38,13 +38,18 @@ NPairSkipKokkos::NPairSkipKokkos(LAMMPS *lmp) : NPair(lmp) { if ghost, also store neighbors of ghost atoms & set inum,gnum correctly ------------------------------------------------------------------------- */ -template -void NPairSkipKokkos::build(NeighList *list) +template +void NPairSkipKokkos::build(NeighList *list) { atomKK->sync(execution_space,TYPE_MASK); type = atomKK->k_type.view(); nlocal = atom->nlocal; + if (TRIM) { + x = atomKK->k_x.view(); + atomKK->sync(execution_space,X_MASK); + cutsq_custom = cutoff_custom*cutoff_custom; + } NeighListKokkos* k_list_skip = static_cast*>(list->listskip); d_ilist_skip = k_list_skip->d_ilist; @@ -100,13 +105,20 @@ void NPairSkipKokkos::build(NeighList *list) copymode = 0; } -template +template KOKKOS_INLINE_FUNCTION -void NPairSkipKokkos::operator()(TagNPairSkipCompute, const int &ii, int &inum, const bool &final) const { +void NPairSkipKokkos::operator()(TagNPairSkipCompute, const int &ii, int &inum, const bool &final) const { const int i = d_ilist_skip(ii); const int itype = type(i); + F_FLOAT xtmp,ytmp,ztmp; + if (TRIM) { + xtmp = x(i,0); + ytmp = x(i,1); + ztmp = x(i,2); + } + if (!d_iskip(itype)) { if (final) { @@ -123,6 +135,15 @@ void NPairSkipKokkos::operator()(TagNPairSkipCompute, const int &ii, const int joriginal = d_neighbors_skip(i,jj); int j = joriginal & NEIGHMASK; if (d_ijskip(itype,type(j))) continue; + + if (TRIM) { + const double delx = xtmp - x(j,0); + const double dely = ytmp - x(j,1); + const double delz = ztmp - x(j,2); + const double rsq = delx*delx + dely*dely + delz*delz; + if (rsq > cutsq_custom) continue; + } + neighbors_i(n++) = joriginal; } @@ -139,16 +160,17 @@ void NPairSkipKokkos::operator()(TagNPairSkipCompute, const int &ii, } } -template +template KOKKOS_INLINE_FUNCTION -void NPairSkipKokkos::operator()(TagNPairSkipCountLocal, const int &i, int &num) const { +void NPairSkipKokkos::operator()(TagNPairSkipCountLocal, const int &i, int &num) const { if (d_ilist[i] < nlocal) num++; } - namespace LAMMPS_NS { -template class NPairSkipKokkos; +template class NPairSkipKokkos; +template class NPairSkipKokkos; #ifdef LMP_KOKKOS_GPU -template class NPairSkipKokkos; +template class NPairSkipKokkos; +template class NPairSkipKokkos; #endif } diff --git a/src/KOKKOS/npair_skip_kokkos.h b/src/KOKKOS/npair_skip_kokkos.h index fd1217bef4..7672a2c36c 100644 --- a/src/KOKKOS/npair_skip_kokkos.h +++ b/src/KOKKOS/npair_skip_kokkos.h @@ -13,33 +13,62 @@ #ifdef NPAIR_CLASS // clang-format off -typedef NPairSkipKokkos NPairKokkosSkipDevice; +typedef NPairSkipKokkos NPairKokkosSkipDevice; NPairStyle(skip/kk/device, NPairKokkosSkipDevice, NP_SKIP | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_KOKKOS_DEVICE); -typedef NPairSkipKokkos NPairKokkosSkipGhostDevice; +typedef NPairSkipKokkos NPairKokkosSkipGhostDevice; NPairStyle(skip/ghost/kk/device, NPairKokkosSkipGhostDevice, NP_SKIP | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_GHOST | NP_KOKKOS_DEVICE); -typedef NPairSkipKokkos NPairKokkosSkipHost; +typedef NPairSkipKokkos NPairKokkosSkipHost; NPairStyle(skip/kk/host, NPairKokkosSkipHost, NP_SKIP | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_KOKKOS_HOST); -typedef NPairSkipKokkos NPairKokkosSkipGhostHost; +typedef NPairSkipKokkos NPairKokkosSkipGhostHost; NPairStyle(skip/ghost/kk/host, NPairKokkosSkipGhostHost, NP_SKIP | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_GHOST | NP_KOKKOS_HOST); + +typedef NPairSkipKokkos NPairKokkosSkipTrimDevice; +NPairStyle(skip/kk/device, + NPairKokkosSkipTrimDevice, + NP_SKIP | NP_HALF | NP_FULL | + NP_NSQ | NP_BIN | NP_MULTI | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM |NP_KOKKOS_DEVICE); + +typedef NPairSkipKokkos NPairKokkosSkipTrimGhostDevice; +NPairStyle(skip/ghost/kk/device, + NPairKokkosSkipTrimGhostDevice, + NP_SKIP | NP_HALF | NP_FULL | + NP_NSQ | NP_BIN | NP_MULTI | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_GHOST | NP_KOKKOS_DEVICE); + +typedef NPairSkipKokkos NPairKokkosSkipTrimHost; +NPairStyle(skip/kk/host, + NPairKokkosSkipTrimHost, + NP_SKIP | NP_HALF | NP_FULL | + NP_NSQ | NP_BIN | NP_MULTI | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_KOKKOS_HOST); + +typedef NPairSkipKokkos NPairKokkosSkipTrimGhostHost; +NPairStyle(skip/ghost/kk/host, + NPairKokkosSkipTrimGhostHost, + NP_SKIP | NP_HALF | NP_FULL | + NP_NSQ | NP_BIN | NP_MULTI | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_GHOST | NP_KOKKOS_HOST); + // clang-format on #else @@ -55,7 +84,7 @@ namespace LAMMPS_NS { struct TagNPairSkipCompute{}; struct TagNPairSkipCountLocal{}; -template +template class NPairSkipKokkos : public NPair { public: typedef DeviceType device_type; @@ -72,8 +101,9 @@ class NPairSkipKokkos : public NPair { void operator()(TagNPairSkipCountLocal, const int&, int&) const; private: - int nlocal,num_skip; + int nlocal,num_skip,cutsq_custom; + typename AT::t_x_array_randomread x; typename AT::t_int_1d_randomread type; typename AT::t_int_scalar d_inum; diff --git a/src/neighbor.cpp b/src/neighbor.cpp index 20d6306572..b6f3363b0c 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -852,6 +852,7 @@ int Neighbor::init_pair() // morph requests in various ways // purpose is to avoid duplicate or inefficient builds + // also sort requests by cutoff distance for trimming // may add new requests if a needed request to derive from does not exist // methods: // (1) unique = create unique lists if cutoff is explicitly set @@ -868,15 +869,9 @@ int Neighbor::init_pair() int nrequest_original = nrequest; morph_unique(); + sort_requests(); morph_skip(); morph_granular(); // this method can change flags set by requestor - - // sort requests by cutoff distance for trimming, used by - // morph_halffull and morph_copy_trim. Must come after - // morph_skip() which change the number of requests - - sort_requests(); - morph_halffull(); morph_copy_trim(); @@ -1210,11 +1205,15 @@ void Neighbor::morph_unique() void Neighbor::morph_skip() { - int i,j,inewton,jnewton; + int i,j,jj,inewton,jnewton,icut,jcut; NeighRequest *irq,*jrq,*nrq; - for (i = 0; i < nrequest; i++) { - irq = requests[i]; + // loop over irq from largest to smallest cutoff + // to prevent adding unecessary neighbor lists + + for (i = nrequest-1; i >= 0; i--) { + irq = requests[j_sorted[i]]; + int trim_flag = irq->trim; // only processing skip lists @@ -1229,7 +1228,9 @@ void Neighbor::morph_skip() // check all other lists - for (j = 0; j < nrequest; j++) { + for (jj = 0; jj < nrequest; jj++) { + j = j_sorted[jj]; + if (i == j) continue; jrq = requests[j]; @@ -1252,10 +1253,20 @@ void Neighbor::morph_skip() if (jnewton == 0) jnewton = force->newton_pair ? 1 : 2; if (inewton != jnewton) continue; + // trim a list with longer cutoff + + if (irq->cut) icut = irq->cutoff; + else icut = cutneighmax; + + if (jrq->cut) jcut = jrq->cutoff; + else jcut = cutneighmax; + + if (icut > jcut) continue; + else if (icut != jcut) trim_flag = 1; + // these flags must be same, // else 2 lists do not store same pairs // or their data structures are different - // this includes custom cutoff set by requestor // NOTE: need check for 2 Kokkos flags? if (irq->ghost != jrq->ghost) continue; @@ -1267,8 +1278,6 @@ void Neighbor::morph_skip() if (irq->kokkos_host != jrq->kokkos_host) continue; if (irq->kokkos_device != jrq->kokkos_device) continue; if (irq->ssa != jrq->ssa) continue; - if (irq->cut != jrq->cut) continue; - if (irq->cutoff != jrq->cutoff) continue; // 2 lists are a match @@ -1282,8 +1291,10 @@ void Neighbor::morph_skip() // note: parents of skip lists do not have associated history // b/c child skip lists have the associated history - if (j < nrequest) irq->skiplist = j; - else { + if (jj < nrequest) { + irq->skiplist = j; + irq->trim = trim_flag; + } else { int newrequest = request(this,-1); irq->skiplist = newrequest; @@ -1293,6 +1304,8 @@ void Neighbor::morph_skip() nrq->neigh = 1; nrq->skip = 0; if (irq->unique) nrq->unique = 1; + + sort_requests(); } } } @@ -1394,8 +1407,7 @@ void Neighbor::morph_halffull() // check all other lists for (jj = 0; jj < nrequest; jj++) { - if (irq->cut) j = j_sorted[jj]; - else j = jj; + j = j_sorted[jj]; jrq = requests[j]; @@ -1473,8 +1485,7 @@ void Neighbor::morph_copy_trim() // check all other lists for (jj = 0; jj < nrequest; jj++) { - if (irq->cut) j = j_sorted[jj]; - else j = jj; + j = j_sorted[jj]; if (i == j) continue; jrq = requests[j]; @@ -1786,7 +1797,10 @@ void Neighbor::print_pairwise_info() else out += fmt::format(", half/full from ({})",rq->halffulllist+1); else if (rq->skip) - out += fmt::format(", skip from ({})",rq->skiplist+1); + if (rq->trim) + out += fmt::format(", skip trim from ({})",rq->skiplist+1); + else + out += fmt::format(", skip from ({})",rq->skiplist+1); out += "\n"; // list of neigh list attributes diff --git a/src/npair_skip_respa_trim.cpp b/src/npair_skip_respa_trim.cpp new file mode 100644 index 0000000000..64b1c4d716 --- /dev/null +++ b/src/npair_skip_respa_trim.cpp @@ -0,0 +1,193 @@ +// clang-format off +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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 "npair_skip_respa_trim.h" + +#include "atom.h" +#include "error.h" +#include "my_page.h" +#include "neigh_list.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +NPairSkipRespaTrim::NPairSkipRespaTrim(LAMMPS *lmp) : NPair(lmp) {} + +/* ---------------------------------------------------------------------- + build skip list for subset of types from parent list + iskip and ijskip flag which atom types and type pairs to skip + this is for respa lists, copy the inner/middle values from parent +------------------------------------------------------------------------- */ + +void NPairSkipRespaTrim::build(NeighList *list) +{ + int i,j,ii,jj,n,itype,jnum,joriginal,n_inner,n_middle; + int *neighptr,*jlist,*neighptr_inner,*neighptr_middle; + + int *type = atom->type; + + int *ilist = list->ilist; + int *numneigh = list->numneigh; + int **firstneigh = list->firstneigh; + MyPage *ipage = list->ipage; + + int *ilist_skip = list->listskip->ilist; + int *numneigh_skip = list->listskip->numneigh; + int **firstneigh_skip = list->listskip->firstneigh; + int inum_skip = list->listskip->inum; + + int *iskip = list->iskip; + int **ijskip = list->ijskip; + + int *ilist_inner = list->ilist_inner; + int *numneigh_inner = list->numneigh_inner; + int **firstneigh_inner = list->firstneigh_inner; + MyPage *ipage_inner = list->ipage_inner; + int *numneigh_inner_skip = list->listskip->numneigh_inner; + int **firstneigh_inner_skip = list->listskip->firstneigh_inner; + + int *ilist_middle,*numneigh_middle,**firstneigh_middle; + MyPage *ipage_middle; + int *numneigh_middle_skip,**firstneigh_middle_skip; + int respamiddle = list->respamiddle; + if (respamiddle) { + ilist_middle = list->ilist_middle; + numneigh_middle = list->numneigh_middle; + firstneigh_middle = list->firstneigh_middle; + ipage_middle = list->ipage_middle; + numneigh_middle_skip = list->listskip->numneigh_middle; + firstneigh_middle_skip = list->listskip->firstneigh_middle; + } + + int inum = 0; + ipage->reset(); + ipage_inner->reset(); + if (respamiddle) ipage_middle->reset(); + + double **x = atom->x; + double xtmp, ytmp, ztmp; + double delx, dely, delz, rsq; + double cutsq_custom = cutoff_custom * cutoff_custom; + + // loop over atoms in other list + // skip I atom entirely if iskip is set for type[I] + // skip I,J pair if ijskip is set for type[I],type[J] + + for (ii = 0; ii < inum_skip; ii++) { + i = ilist_skip[ii]; + itype = type[i]; + if (iskip[itype]) continue; + + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + + n = n_inner = 0; + neighptr = ipage->vget(); + neighptr_inner = ipage_inner->vget(); + if (respamiddle) { + n_middle = 0; + neighptr_middle = ipage_middle->vget(); + } + + // loop over parent outer rRESPA list + + jlist = firstneigh_skip[i]; + jnum = numneigh_skip[i]; + + for (jj = 0; jj < jnum; jj++) { + joriginal = jlist[jj]; + j = joriginal & NEIGHMASK; + if (ijskip[itype][type[j]]) continue; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + if (rsq > cutsq_custom) continue; + + neighptr[n++] = joriginal; + } + + // loop over parent inner rRESPA list + + jlist = firstneigh_inner_skip[i]; + jnum = numneigh_inner_skip[i]; + + for (jj = 0; jj < jnum; jj++) { + joriginal = jlist[jj]; + j = joriginal & NEIGHMASK; + if (ijskip[itype][type[j]]) continue; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + if (rsq > cutsq_custom) continue; + + neighptr_inner[n_inner++] = joriginal; + } + + // loop over parent middle rRESPA list + + if (respamiddle) { + jlist = firstneigh_middle_skip[i]; + jnum = numneigh_middle_skip[i]; + + for (jj = 0; jj < jnum; jj++) { + joriginal = jlist[jj]; + j = joriginal & NEIGHMASK; + if (ijskip[itype][type[j]]) continue; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + if (rsq > cutsq_custom) continue; + + neighptr_middle[n_middle++] = joriginal; + } + } + + ilist[inum] = i; + firstneigh[i] = neighptr; + numneigh[i] = n; + ipage->vgot(n); + if (ipage->status()) + error->one(FLERR,"Neighbor list overflow, boost neigh_modify one"); + + ilist_inner[inum] = i; + firstneigh_inner[i] = neighptr_inner; + numneigh_inner[i] = n_inner; + ipage_inner->vgot(n); + if (ipage_inner->status()) + error->one(FLERR,"Neighbor list overflow, boost neigh_modify one"); + + if (respamiddle) { + ilist_middle[inum] = i; + firstneigh_middle[i] = neighptr_middle; + numneigh_middle[i] = n_middle; + ipage_middle->vgot(n); + if (ipage_middle->status()) + error->one(FLERR,"Neighbor list overflow, boost neigh_modify one"); + } + + inum++; + } + + list->inum = inum; + list->inum_inner = inum; + if (respamiddle) list->inum_middle = inum; +} diff --git a/src/npair_skip_respa_trim.h b/src/npair_skip_respa_trim.h new file mode 100644 index 0000000000..f10b726cbe --- /dev/null +++ b/src/npair_skip_respa_trim.h @@ -0,0 +1,40 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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 NPAIR_CLASS +// clang-format off +NPairStyle(skip/half/respa/trim, + NPairSkipRespaTrim, + NP_SKIP | NP_RESPA | NP_HALF | NP_FULL | + NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM); +// clang-format on +#else + +#ifndef LMP_NPAIR_SKIP_RESPA_TRIM_H +#define LMP_NPAIR_SKIP_RESPA_TRIM_H + +#include "npair.h" + +namespace LAMMPS_NS { + +class NPairSkipRespaTrim : public NPair { + public: + NPairSkipRespaTrim(class LAMMPS *); + void build(class NeighList *) override; +}; + +} // namespace LAMMPS_NS + +#endif +#endif diff --git a/src/npair_skip_size_off2on_oneside_trim.cpp b/src/npair_skip_size_off2on_oneside_trim.cpp new file mode 100644 index 0000000000..91940d3135 --- /dev/null +++ b/src/npair_skip_size_off2on_oneside_trim.cpp @@ -0,0 +1,185 @@ +// clang-format off +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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 "npair_skip_size_off2on_oneside_trim.h" + +#include "atom.h" +#include "domain.h" +#include "error.h" +#include "my_page.h" +#include "neigh_list.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +NPairSkipSizeOff2onOnesideTrim::NPairSkipSizeOff2onOnesideTrim(LAMMPS *lmp) : + NPair(lmp) {} + +/* ---------------------------------------------------------------------- + build skip list for subset of types from parent list + iskip and ijskip flag which atom types and type pairs to skip + parent non-skip list used newton off and was not onesided, + this skip list is newton on and onesided +------------------------------------------------------------------------- */ + +void NPairSkipSizeOff2onOnesideTrim::build(NeighList *list) +{ + int i,j,ii,jj,itype,jnum,joriginal,flip,tmp; + int *surf,*jlist; + + int *type = atom->type; + int nlocal = atom->nlocal; + + int *ilist = list->ilist; + int *numneigh = list->numneigh; + int **firstneigh = list->firstneigh; + MyPage *ipage = list->ipage; + + int *ilist_skip = list->listskip->ilist; + int *numneigh_skip = list->listskip->numneigh; + int **firstneigh_skip = list->listskip->firstneigh; + int inum_skip = list->listskip->inum; + + int *iskip = list->iskip; + int **ijskip = list->ijskip; + + if (domain->dimension == 2) surf = atom->line; + else surf = atom->tri; + + int inum = 0; + ipage->reset(); + + double **x = atom->x; + double xtmp, ytmp, ztmp; + double delx, dely, delz, rsq; + double cutsq_custom = cutoff_custom * cutoff_custom; + + // two loops over parent list required, one to count, one to store + // because onesided constraint means pair I,J may be stored with I or J + // so don't know in advance how much space to alloc for each atom's neighs + + // first loop over atoms in other list to count neighbors + // skip I atom entirely if iskip is set for type[I] + // skip I,J pair if ijskip is set for type[I],type[J] + + for (i = 0; i < nlocal; i++) numneigh[i] = 0; + + for (ii = 0; ii < inum_skip; ii++) { + i = ilist_skip[ii]; + itype = type[i]; + if (iskip[itype]) continue; + + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + + // loop over parent non-skip size list + + jlist = firstneigh_skip[i]; + jnum = numneigh_skip[i]; + + for (jj = 0; jj < jnum; jj++) { + joriginal = jlist[jj]; + j = joriginal & NEIGHMASK; + if (ijskip[itype][type[j]]) continue; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + if (rsq > cutsq_custom) continue; + + // flip I,J if necessary to satisfy onesided constraint + // do not keep if I is now ghost + + if (surf[i] >= 0) { + if (j >= nlocal) continue; + tmp = i; + i = j; + j = tmp; + flip = 1; + } else flip = 0; + + numneigh[i]++; + if (flip) i = j; + } + } + + // allocate all per-atom neigh list chunks + + for (i = 0; i < nlocal; i++) { + if (numneigh[i] == 0) continue; + firstneigh[i] = ipage->get(numneigh[i]); + if (ipage->status()) + error->one(FLERR,"Neighbor list overflow, boost neigh_modify one"); + } + + // second loop over atoms in other list to store neighbors + // skip I atom entirely if iskip is set for type[I] + // skip I,J pair if ijskip is set for type[I],type[J] + + for (i = 0; i < nlocal; i++) numneigh[i] = 0; + + for (ii = 0; ii < inum_skip; ii++) { + i = ilist_skip[ii]; + itype = type[i]; + if (iskip[itype]) continue; + + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + + // loop over parent non-skip size list and optionally its history info + + jlist = firstneigh_skip[i]; + jnum = numneigh_skip[i]; + + for (jj = 0; jj < jnum; jj++) { + joriginal = jlist[jj]; + j = joriginal & NEIGHMASK; + if (ijskip[itype][type[j]]) continue; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + if (rsq > cutsq_custom) continue; + + // flip I,J if necessary to satisfy onesided constraint + // do not keep if I is now ghost + + if (surf[i] >= 0) { + if (j >= nlocal) continue; + tmp = i; + i = j; + j = tmp; + flip = 1; + } else flip = 0; + + // store j in neigh list, not joriginal, like other neigh methods + // OK, b/c there is no special list flagging for surfs + + firstneigh[i][numneigh[i]] = j; + numneigh[i]++; + if (flip) i = j; + } + + // only add atom I to ilist if it has neighbors + + if (numneigh[i]) ilist[inum++] = i; + } + + list->inum = inum; +} diff --git a/src/npair_skip_size_off2on_oneside_trim.h b/src/npair_skip_size_off2on_oneside_trim.h new file mode 100644 index 0000000000..236b886fe4 --- /dev/null +++ b/src/npair_skip_size_off2on_oneside_trim.h @@ -0,0 +1,40 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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 NPAIR_CLASS +// clang-format off +NPairStyle(skip/size/off2on/oneside/trim, + NPairSkipSizeOff2onOnesideTrim, + NP_SKIP | NP_SIZE | NP_OFF2ON | NP_ONESIDE | NP_HALF | + NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_NEWTON | NP_NEWTOFF | + NP_ORTHO | NP_TRI | NP_TRIM); +// clang-format on +#else + +#ifndef LMP_NPAIR_SKIP_SIZE_OFF2ON_ONESIDE_TRIM_H +#define LMP_NPAIR_SKIP_SIZE_OFF2ON_ONESIDE_TRIM_H + +#include "npair.h" + +namespace LAMMPS_NS { + +class NPairSkipSizeOff2onOnesideTrim : public NPair { + public: + NPairSkipSizeOff2onOnesideTrim(class LAMMPS *); + void build(class NeighList *) override; +}; + +} // namespace LAMMPS_NS + +#endif +#endif diff --git a/src/npair_skip_size_off2on_trim.cpp b/src/npair_skip_size_off2on_trim.cpp new file mode 100644 index 0000000000..9591bbc4eb --- /dev/null +++ b/src/npair_skip_size_off2on_trim.cpp @@ -0,0 +1,112 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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 "npair_skip_size_off2on_trim.h" + +#include "atom.h" +#include "error.h" +#include "my_page.h" +#include "neigh_list.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +NPairSkipSizeOff2onTrim::NPairSkipSizeOff2onTrim(LAMMPS *lmp) : NPair(lmp) {} + +/* ---------------------------------------------------------------------- + build skip list for subset of types from parent list + iskip and ijskip flag which atom types and type pairs to skip + parent non-skip list used newton off, this skip list is newton on +------------------------------------------------------------------------- */ + +void NPairSkipSizeOff2onTrim::build(NeighList *list) +{ + int i, j, ii, jj, n, itype, jnum, joriginal; + tagint itag, jtag; + int *neighptr, *jlist; + + tagint *tag = atom->tag; + int *type = atom->type; + int nlocal = atom->nlocal; + + int *ilist = list->ilist; + int *numneigh = list->numneigh; + int **firstneigh = list->firstneigh; + MyPage *ipage = list->ipage; + + int *ilist_skip = list->listskip->ilist; + int *numneigh_skip = list->listskip->numneigh; + int **firstneigh_skip = list->listskip->firstneigh; + int inum_skip = list->listskip->inum; + + int *iskip = list->iskip; + int **ijskip = list->ijskip; + + int inum = 0; + ipage->reset(); + + double **x = atom->x; + double xtmp, ytmp, ztmp; + double delx, dely, delz, rsq; + double cutsq_custom = cutoff_custom * cutoff_custom; + + // loop over atoms in other list + // skip I atom entirely if iskip is set for type[I] + // skip I,J pair if ijskip is set for type[I],type[J] + + for (ii = 0; ii < inum_skip; ii++) { + i = ilist_skip[ii]; + itype = type[i]; + if (iskip[itype]) continue; + itag = tag[i]; + + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + + n = 0; + neighptr = ipage->vget(); + + // loop over parent non-skip size list and optionally its history info + + jlist = firstneigh_skip[i]; + jnum = numneigh_skip[i]; + + for (jj = 0; jj < jnum; jj++) { + joriginal = jlist[jj]; + j = joriginal & NEIGHMASK; + if (ijskip[itype][type[j]]) continue; + + // only keep I,J when J = ghost if Itag < Jtag + + jtag = tag[j]; + if (j >= nlocal && jtag < itag) continue; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + if (rsq > cutsq_custom) continue; + + neighptr[n++] = joriginal; + } + + ilist[inum++] = i; + firstneigh[i] = neighptr; + numneigh[i] = n; + ipage->vgot(n); + if (ipage->status()) error->one(FLERR, "Neighbor list overflow, boost neigh_modify one"); + } + list->inum = inum; +} diff --git a/src/npair_skip_size_off2on_trim.h b/src/npair_skip_size_off2on_trim.h new file mode 100644 index 0000000000..e471ddd2cc --- /dev/null +++ b/src/npair_skip_size_off2on_trim.h @@ -0,0 +1,40 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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 NPAIR_CLASS +// clang-format off +NPairStyle(skip/size/off2on/trim, + NPairSkipSizeOff2onTrim, + NP_SKIP | NP_SIZE | NP_OFF2ON | NP_HALF | + NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM); +// clang-format on +#else + +#ifndef LMP_NPAIR_SKIP_SIZE_OFF2ON_TRIM_H +#define LMP_NPAIR_SKIP_SIZE_OFF2ON_TRIM_H + +#include "npair.h" + +namespace LAMMPS_NS { + +class NPairSkipSizeOff2onTrim : public NPair { + public: + NPairSkipSizeOff2onTrim(class LAMMPS *); + void build(class NeighList *) override; +}; + +} // namespace LAMMPS_NS + +#endif +#endif diff --git a/src/npair_skip_size_trim.cpp b/src/npair_skip_size_trim.cpp new file mode 100644 index 0000000000..3fd8f912f9 --- /dev/null +++ b/src/npair_skip_size_trim.cpp @@ -0,0 +1,102 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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 "npair_skip_size_trim.h" + +#include "atom.h" +#include "error.h" +#include "my_page.h" +#include "neigh_list.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +NPairSkipSizeTrim::NPairSkipSizeTrim(LAMMPS *lmp) : NPair(lmp) {} + +/* ---------------------------------------------------------------------- + build skip list for subset of types from parent list + iskip and ijskip flag which atom types and type pairs to skip +------------------------------------------------------------------------- */ + +void NPairSkipSizeTrim::build(NeighList *list) +{ + int i, j, ii, jj, n, itype, jnum, joriginal; + int *neighptr, *jlist; + + int *type = atom->type; + int *ilist = list->ilist; + int *numneigh = list->numneigh; + int **firstneigh = list->firstneigh; + MyPage *ipage = list->ipage; + + int *ilist_skip = list->listskip->ilist; + int *numneigh_skip = list->listskip->numneigh; + int **firstneigh_skip = list->listskip->firstneigh; + int inum_skip = list->listskip->inum; + + int *iskip = list->iskip; + int **ijskip = list->ijskip; + + int inum = 0; + ipage->reset(); + + double **x = atom->x; + double xtmp, ytmp, ztmp; + double delx, dely, delz, rsq; + double cutsq_custom = cutoff_custom * cutoff_custom; + + // loop over atoms in other list + // skip I atom entirely if iskip is set for type[I] + // skip I,J pair if ijskip is set for type[I],type[J] + + for (ii = 0; ii < inum_skip; ii++) { + i = ilist_skip[ii]; + itype = type[i]; + if (iskip[itype]) continue; + + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + + n = 0; + neighptr = ipage->vget(); + + // loop over parent non-skip size list + + jlist = firstneigh_skip[i]; + jnum = numneigh_skip[i]; + + for (jj = 0; jj < jnum; jj++) { + joriginal = jlist[jj]; + j = joriginal & NEIGHMASK; + if (ijskip[itype][type[j]]) continue; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + if (rsq > cutsq_custom) continue; + + neighptr[n++] = joriginal; + } + + ilist[inum++] = i; + firstneigh[i] = neighptr; + numneigh[i] = n; + ipage->vgot(n); + if (ipage->status()) error->one(FLERR, "Neighbor list overflow, boost neigh_modify one"); + } + + list->inum = inum; +} diff --git a/src/npair_skip_size_trim.h b/src/npair_skip_size_trim.h new file mode 100644 index 0000000000..e94b2f5f29 --- /dev/null +++ b/src/npair_skip_size_trim.h @@ -0,0 +1,39 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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 NPAIR_CLASS +// clang-format off +NPairStyle(skip/half/size/trim, + NPairSkipSizeTrim, + NP_SKIP | NP_SIZE | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM); +// clang-format on +#else + +#ifndef LMP_NPAIR_SKIP_SIZE_TRIM_H +#define LMP_NPAIR_SKIP_SIZE_TRIM_H + +#include "npair.h" + +namespace LAMMPS_NS { + +class NPairSkipSizeTrim : public NPair { + public: + NPairSkipSizeTrim(class LAMMPS *); + void build(class NeighList *) override; +}; + +} // namespace LAMMPS_NS + +#endif +#endif diff --git a/src/npair_skip_trim.cpp b/src/npair_skip_trim.cpp new file mode 100644 index 0000000000..a286a7e19e --- /dev/null +++ b/src/npair_skip_trim.cpp @@ -0,0 +1,118 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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 "npair_skip_trim.h" + +#include "atom.h" +#include "error.h" +#include "my_page.h" +#include "neigh_list.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +NPairSkipTrim::NPairSkipTrim(LAMMPS *lmp) : NPair(lmp) {} + +/* ---------------------------------------------------------------------- + build skip list for subset of types from parent list + works for half and full lists + works for owned (non-ghost) list, also for ghost list + iskip and ijskip flag which atom types and type pairs to skip + if ghost, also store neighbors of ghost atoms & set inum,gnum correctly +------------------------------------------------------------------------- */ + +void NPairSkipTrim::build(NeighList *list) +{ + int i, j, ii, jj, n, itype, jnum, joriginal; + int *neighptr, *jlist; + + int *type = atom->type; + int nlocal = atom->nlocal; + + int *ilist = list->ilist; + int *numneigh = list->numneigh; + int **firstneigh = list->firstneigh; + MyPage *ipage = list->ipage; + + int *ilist_skip = list->listskip->ilist; + int *numneigh_skip = list->listskip->numneigh; + int **firstneigh_skip = list->listskip->firstneigh; + int num_skip = list->listskip->inum; + if (list->ghost) num_skip += list->listskip->gnum; + + int *iskip = list->iskip; + int **ijskip = list->ijskip; + + int inum = 0; + ipage->reset(); + + double **x = atom->x; + double xtmp, ytmp, ztmp; + double delx, dely, delz, rsq; + double cutsq_custom = cutoff_custom * cutoff_custom; + + // loop over atoms in other list + // skip I atom entirely if iskip is set for type[I] + // skip I,J pair if ijskip is set for type[I],type[J] + + for (ii = 0; ii < num_skip; ii++) { + i = ilist_skip[ii]; + itype = type[i]; + if (iskip[itype]) continue; + + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + + n = 0; + neighptr = ipage->vget(); + + // loop over parent non-skip list + + jlist = firstneigh_skip[i]; + jnum = numneigh_skip[i]; + + for (jj = 0; jj < jnum; jj++) { + joriginal = jlist[jj]; + j = joriginal & NEIGHMASK; + if (ijskip[itype][type[j]]) continue; + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx * delx + dely * dely + delz * delz; + if (rsq > cutsq_custom) continue; + + neighptr[n++] = joriginal; + } + + ilist[inum++] = i; + firstneigh[i] = neighptr; + numneigh[i] = n; + ipage->vgot(n); + if (ipage->status()) error->one(FLERR, "Neighbor list overflow, boost neigh_modify one"); + } + + list->inum = inum; + if (list->ghost) { + int num = 0; + for (i = 0; i < inum; i++) + if (ilist[i] < nlocal) + num++; + else + break; + list->inum = num; + list->gnum = inum - num; + } +} diff --git a/src/npair_skip_trim.h b/src/npair_skip_trim.h new file mode 100644 index 0000000000..f2a26d654e --- /dev/null +++ b/src/npair_skip_trim.h @@ -0,0 +1,46 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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 NPAIR_CLASS +// clang-format off +NPairStyle(skip/trim, + NPairSkipTrim, + NP_SKIP | NP_HALF | NP_FULL | + NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM); + +NPairStyle(skip/ghost/trim, + NPairSkipTrim, + NP_SKIP | NP_HALF | NP_FULL | + NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_GHOST | NP_TRIM); +// clang-format on +#else + +#ifndef LMP_NPAIR_SKIP_TRIM_H +#define LMP_NPAIR_SKIP_TRIM_H + +#include "npair.h" + +namespace LAMMPS_NS { + +class NPairSkipTrim : public NPair { + public: + NPairSkipTrim(class LAMMPS *); + void build(class NeighList *) override; +}; + +} // namespace LAMMPS_NS + +#endif +#endif From d739faf971cb16c040c0ebd85aa9567b6c1e4864 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 16 Nov 2023 21:14:55 -0500 Subject: [PATCH 154/204] disable `if constexpr` for all Intel compilers --- src/fmt/compile.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fmt/compile.h b/src/fmt/compile.h index ef8d5c0256..a1fb7d2935 100644 --- a/src/fmt/compile.h +++ b/src/fmt/compile.h @@ -61,7 +61,7 @@ const T& first(const T& value, const Tail&...) { return value; } -#if defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction) && FMT_CPLUSPLUS >= 201703L +#if defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction) && (FMT_CPLUSPLUS >= 201703L) && !FMT_ICC_VERSION template struct type_list {}; // Returns a reference to the argument at index N from [first, rest...]. From ea8234a87595bbc9af6dfc39bbbce0faad25d11b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 16 Nov 2023 22:08:00 -0500 Subject: [PATCH 155/204] treat immediate variables like equal style also for evaluating references to computes and fixes --- src/variable.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/variable.cpp b/src/variable.cpp index 9c0307341a..3bb49218fb 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -1499,9 +1499,9 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) } } - // equal-style variable is being evaluated + // equal-style or immediate variable is being evaluated - if (style[ivar] == EQUAL) { + if ((style[ivar] == EQUAL) || (ivar < 0)) { // c_ID = scalar from global scalar @@ -1767,9 +1767,9 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) } } - // equal-style variable is being evaluated + // equal-style or immediate variable is being evaluated - if (style[ivar] == EQUAL) { + if ((style[ivar] == EQUAL) || (ivar < 0)) { // f_ID = scalar from global scalar From e59a66594331af6ed18a1ab0658f5cc505922bce Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 17 Nov 2023 02:06:06 -0500 Subject: [PATCH 156/204] add tests for immediate variables --- unittest/commands/test_variables.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/unittest/commands/test_variables.cpp b/unittest/commands/test_variables.cpp index 90a8d013a3..bae23e4594 100644 --- a/unittest/commands/test_variables.cpp +++ b/unittest/commands/test_variables.cpp @@ -282,6 +282,13 @@ TEST_F(VariableTest, AtomicSystem) ASSERT_DOUBLE_EQ(variable->compute_equal("v_rgsum"), 3.75); ASSERT_DOUBLE_EQ(variable->compute_equal("v_sum[1]"), 1.25); + // check handling of immediate variables + ASSERT_DOUBLE_EQ(variable->compute_equal("f_press[1]"), 0.0); + ASSERT_DOUBLE_EQ(variable->compute_equal("c_press"), 0.0); + ASSERT_DOUBLE_EQ(variable->compute_equal("c_press[2]"), 0.0); + ASSERT_DOUBLE_EQ(variable->compute_equal("1.5+3.25"), 4.75); + ASSERT_DOUBLE_EQ(variable->compute_equal("-2.5*1.5"), -3.75); + TEST_FAILURE(".*ERROR: Cannot redefine variable as a different style.*", command("variable one atom x");); TEST_FAILURE(".*ERROR: Cannot redefine variable as a different style.*", @@ -294,6 +301,8 @@ TEST_F(VariableTest, AtomicSystem) variable->compute_equal("v_self");); TEST_FAILURE(".*ERROR: Variable sum2: Inconsistent lengths in vector-style variable.*", variable->compute_equal("max(v_sum2)");); + TEST_FAILURE("ERROR: Mismatched fix in variable formula.*", + variable->compute_equal("f_press");); } TEST_F(VariableTest, Expressions) From a4da55942a0970c20287739e0cee29ed0df98ac1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 17 Nov 2023 03:16:27 -0500 Subject: [PATCH 157/204] check if creating unix domain socket failed --- src/MISC/fix_ipi.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/MISC/fix_ipi.cpp b/src/MISC/fix_ipi.cpp index 69e0f2a7f3..30a6fe893d 100644 --- a/src/MISC/fix_ipi.cpp +++ b/src/MISC/fix_ipi.cpp @@ -98,7 +98,7 @@ static void open_socket(int &sockfd, int inet, int port, char *host, Error *erro // creates socket sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); - if (sockfd < 0) error->one(FLERR, "Error opening socket"); + if (sockfd < 0) error->one(FLERR, "Error creating socket for fix ipi"); // makes connection if (connect(sockfd, res->ai_addr, res->ai_addrlen) < 0) @@ -116,6 +116,7 @@ static void open_socket(int &sockfd, int inet, int port, char *host, Error *erro // creates the socket sockfd = socket(AF_UNIX, SOCK_STREAM, 0); + if (sockfd < 0) error->one(FLERR, "Error creating socket for fix ipi"); // connects if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) From 2c670e8d4438a0a3e0aecf452c7ff367b0b3d9b9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 17 Nov 2023 08:25:44 -0500 Subject: [PATCH 158/204] update version strings to 17 Nov 2023 --- doc/lammps.1 | 4 ++-- doc/src/Commands_removed.rst | 4 ++-- doc/src/compute_composition_atom.rst | 2 +- doc/src/compute_property_grid.rst | 2 +- doc/src/compute_reduce.rst | 2 +- doc/src/compute_voronoi_atom.rst | 2 +- doc/src/dump.rst | 2 +- doc/src/dump_image.rst | 2 +- doc/src/fix_deposit.rst | 2 +- doc/src/fix_pimd.rst | 2 +- src/library.cpp | 8 ++++---- src/version.h | 3 +-- 12 files changed, 17 insertions(+), 18 deletions(-) diff --git a/doc/lammps.1 b/doc/lammps.1 index 79964d1680..766522d4aa 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,7 +1,7 @@ -.TH LAMMPS "1" "2 August 2023" "2023-08-2" +.TH LAMMPS "1" "17 November 2023" "2023-11-17" .SH NAME .B LAMMPS -\- Molecular Dynamics Simulator. Version 2 August 2023 +\- Molecular Dynamics Simulator. Version 17 November 2023 .SH SYNOPSIS .B lmp diff --git a/doc/src/Commands_removed.rst b/doc/src/Commands_removed.rst index 84cc534304..d0e723aabe 100644 --- a/doc/src/Commands_removed.rst +++ b/doc/src/Commands_removed.rst @@ -88,7 +88,7 @@ The same functionality is available through MPIIO package ------------- -.. deprecated:: TBD +.. deprecated:: 17Nov2023 The MPIIO package has been removed from LAMMPS since it was unmaintained for many years and thus not updated to incorporate required changes that @@ -107,7 +107,7 @@ see :doc:`restart `, :doc:`read_restart `, MSCG package ------------ -.. deprecated:: TBD +.. deprecated:: 17Nov2023 The MSCG package has been removed from LAMMPS since it was unmaintained for many years and instead superseded by the `OpenMSCG software diff --git a/doc/src/compute_composition_atom.rst b/doc/src/compute_composition_atom.rst index b7890fff8b..e65a3e9c95 100644 --- a/doc/src/compute_composition_atom.rst +++ b/doc/src/compute_composition_atom.rst @@ -36,7 +36,7 @@ Examples Description """"""""""" -.. versionadded:: TBD +.. versionadded:: 17Nov2023 Define a computation that calculates a local composition vector for each atom. For a central atom with :math:`M` neighbors within the neighbor cutoff sphere, diff --git a/doc/src/compute_property_grid.rst b/doc/src/compute_property_grid.rst index 20a4f19605..a0b9aba7dc 100644 --- a/doc/src/compute_property_grid.rst +++ b/doc/src/compute_property_grid.rst @@ -61,7 +61,7 @@ varying fastest, then Y, then Z slowest. For 2d grids (in 2d simulations), the grid IDs range from 1 to Nx*Ny, with X varying fastest and Y slowest. -.. versionadded:: TBD +.. versionadded:: 17Nov2023 The *proc* attribute is the ID of the processor which owns the grid cell. Processor IDs range from 0 to Nprocs - 1, where Nprocs is the diff --git a/doc/src/compute_reduce.rst b/doc/src/compute_reduce.rst index 6820d2ee04..ba60b52563 100644 --- a/doc/src/compute_reduce.rst +++ b/doc/src/compute_reduce.rst @@ -201,7 +201,7 @@ information in this context, the *replace* keywords will extract the atom IDs for the two atoms in the bond of maximum stretch. These atom IDs and the bond stretch will be printed with thermodynamic output. -.. versionadded:: TBD +.. versionadded:: 17Nov2023 The *inputs* keyword allows selection of whether all the inputs are per-atom or local quantities. As noted above, all the inputs must be diff --git a/doc/src/compute_voronoi_atom.rst b/doc/src/compute_voronoi_atom.rst index 9607401ccd..5f00a2abab 100644 --- a/doc/src/compute_voronoi_atom.rst +++ b/doc/src/compute_voronoi_atom.rst @@ -190,7 +190,7 @@ Voro++ software in the src/VORONOI/README file. Output info """"""""""" -.. deprecated:: TBD +.. deprecated:: 17Nov2023 The *peratom* keyword was removed as it is no longer required. diff --git a/doc/src/dump.rst b/doc/src/dump.rst index e5885dc25d..bdaefb769e 100644 --- a/doc/src/dump.rst +++ b/doc/src/dump.rst @@ -613,7 +613,7 @@ when running on large numbers of processors. Note that using the "\*" and "%" characters together can produce a large number of small dump files! -.. deprecated:: TBD +.. deprecated:: 17Nov2023 The MPIIO package and the the corresponding "/mpiio" dump styles, except for the unrelated "netcdf/mpiio" style were removed from LAMMPS. diff --git a/doc/src/dump_image.rst b/doc/src/dump_image.rst index 4e227d2f72..43f182b889 100644 --- a/doc/src/dump_image.rst +++ b/doc/src/dump_image.rst @@ -599,7 +599,7 @@ image will appear. The *sfactor* value must be a value 0.0 <= *sfactor* <= 1.0, where *sfactor* = 1 is a highly reflective surface and *sfactor* = 0 is a rough non-shiny surface. -.. versionadded:: TBD +.. versionadded:: 17Nov2023 The *fsaa* keyword can be used with the dump image command to improve the image quality by enabling full scene anti-aliasing. Internally the diff --git a/doc/src/fix_deposit.rst b/doc/src/fix_deposit.rst index 4c256f524f..ff5afc2241 100644 --- a/doc/src/fix_deposit.rst +++ b/doc/src/fix_deposit.rst @@ -220,7 +220,7 @@ rotated configuration of the molecule. existing particle. LAMMPS will issue a warning if R is smaller than this value, based on the radii of existing and inserted particles. -.. versionadded:: TBD +.. versionadded:: 17Nov2023 The *var* and *set* keywords can be used together to provide a criterion for accepting or rejecting the addition of an individual atom, based on its diff --git a/doc/src/fix_pimd.rst b/doc/src/fix_pimd.rst index 91c5e58add..7468ffea13 100644 --- a/doc/src/fix_pimd.rst +++ b/doc/src/fix_pimd.rst @@ -149,7 +149,7 @@ normal-mode PIMD. A value of *cmd* is for centroid molecular dynamics only the k > 0 modes are thermostatted, not the centroid degrees of freedom. -.. versionadded:: TBD +.. versionadded:: 17Nov2023 Mode *pimd* added to fix pimd/langevin. diff --git a/src/library.cpp b/src/library.cpp index 9d542f86ae..7fc79333ad 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -617,7 +617,7 @@ combined by removing the '&' and the following newline character. After this processing the string is handed to LAMMPS for parsing and executing. -.. versionadded:: TBD +.. versionadded:: 17Nov2023 The command is now able to process long strings with triple quotes and loops using :doc:`jump SELF \ `. @@ -2484,7 +2484,7 @@ int lammps_set_variable(void *handle, char *name, char *str) * \verbatim embed:rst -.. versionadded:: TBD +.. versionadded:: 17Nov2023 This function copies a string with human readable information about a defined variable: name, style, current value(s) into the provided @@ -5581,7 +5581,7 @@ int lammps_config_has_ffmpeg_support() { * \verbatim embed:rst -.. deprecated:: TBD +.. deprecated:: 17Nov2023 LAMMPS has now exceptions always enabled, so this function will now always return 1 and can be removed from applications @@ -6658,7 +6658,7 @@ the failing MPI ranks to send messages. instance, but instead would check the global error buffer of the library interface. - .. versionchanged: TBD + .. versionchanged: 17Nov2023 The *buffer* pointer may be ``NULL``. This will clear any error status without copying the error message. diff --git a/src/version.h b/src/version.h index 35780aa785..a5844f0973 100644 --- a/src/version.h +++ b/src/version.h @@ -1,2 +1 @@ -#define LAMMPS_VERSION "3 Aug 2023" -#define LAMMPS_UPDATE "Development" +#define LAMMPS_VERSION "17 Nov 2023" From 0083cc9e26d2ad3dcb6f19d069502ce4c630d5b7 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Fri, 17 Nov 2023 09:12:43 -0700 Subject: [PATCH 159/204] Port changes to OPENMP and INTEL packages --- src/INTEL/npair_skip_trim_intel.cpp | 271 ++++++++++++++++++++++++++++ src/INTEL/npair_skip_trim_intel.h | 62 +++++++ src/INTEL/npair_trim_intel.cpp | 5 +- src/OPENMP/npair_skip_omp.h | 12 +- src/neigh_request.h | 1 + 5 files changed, 341 insertions(+), 10 deletions(-) create mode 100644 src/INTEL/npair_skip_trim_intel.cpp create mode 100644 src/INTEL/npair_skip_trim_intel.h diff --git a/src/INTEL/npair_skip_trim_intel.cpp b/src/INTEL/npair_skip_trim_intel.cpp new file mode 100644 index 0000000000..e16e1bc413 --- /dev/null +++ b/src/INTEL/npair_skip_trim_intel.cpp @@ -0,0 +1,271 @@ +// clang-format off +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Stan Moore (SNL) +------------------------------------------------------------------------- */ + +#include "npair_skip_trim_intel.h" + +#include "atom.h" +#include "comm.h" +#include "error.h" +#include "modify.h" +#include "my_page.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "neighbor.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +NPairSkipTrimIntel::NPairSkipTrimIntel(LAMMPS *lmp) : NPair(lmp) { + _fix = static_cast(modify->get_fix_by_id("package_intel")); + if (!_fix) error->all(FLERR, "The 'package intel' command is required for /intel styles"); + _inum_starts = new int[comm->nthreads]; + _inum_counts = new int[comm->nthreads]; + _full_props = nullptr; +} + +/* ---------------------------------------------------------------------- */ + +NPairSkipTrimIntel::~NPairSkipTrimIntel() { + delete []_inum_starts; + delete []_inum_counts; + delete[] _full_props; +} + +/* ---------------------------------------------------------------------- */ + +void NPairSkipTrimIntel::copy_neighbor_info() +{ + NPair::copy_neighbor_info(); + // Only need to set _full_props once; npair object deleted for changes + if (_full_props) return; + _full_props = new int[neighbor->nrequest]; + for (int i = 0; i < neighbor->nrequest; i++) + _full_props[i] = neighbor->requests[i]->full; +} + +/* ---------------------------------------------------------------------- + build skip list for subset of types from parent list + works for half and full lists + works for owned (non-ghost) list, also for ghost list + iskip and ijskip flag which atom types and type pairs to skip + if ghost, also store neighbors of ghost atoms & set inum,gnum correctly +------------------------------------------------------------------------- */ + +template +void NPairSkipTrimIntel::build_t(NeighList *list, int *numhalf, int *cnumneigh, + int *numhalf_skip, IntelBuffers *buffers) +{ + const int nlocal = atom->nlocal; + const int e_nall = nlocal + atom->nghost; + const ATOM_T * _noalias const x = buffers->get_x(); + const int * _noalias const type = atom->type; + int * _noalias const ilist = list->ilist; + int * _noalias const numneigh = list->numneigh; + int ** _noalias const firstneigh = (int ** const)list->firstneigh; // NOLINT + const int * _noalias const ilist_skip = list->listskip->ilist; + const int * _noalias const numneigh_skip = list->listskip->numneigh; + const int ** _noalias const firstneigh_skip = (const int ** const)list->listskip->firstneigh; // NOLINT + const int * _noalias const iskip = list->iskip; + const int ** _noalias const ijskip = (const int ** const)list->ijskip; // NOLINT + + const flt_t cutsq_custom = cutoff_custom * cutoff_custom; + int num_skip = list->listskip->inum; + if (list->ghost) num_skip += list->listskip->gnum; + + int packthreads; + if (comm->nthreads > INTEL_HTHREADS && THREE==0) + packthreads = comm->nthreads; + else + packthreads = 1; + + #if defined(_OPENMP) + #pragma omp parallel if (packthreads > 1) + #endif + { + int tid, ifrom, ito; + IP_PRE_omp_range_id(ifrom, ito, tid, num_skip, packthreads); + + // each thread has its own page allocator + MyPage &ipage = list->ipage[tid]; + ipage.reset(); + + int my_inum = ifrom; + _inum_starts[tid] = ifrom; + + // loop over parent full list + for (int ii = ifrom; ii < ito; ii++) { + const int i = ilist_skip[ii]; + const int itype = type[i]; + if (iskip[itype]) continue; + + const flt_t xtmp = x[i].x; + const flt_t ytmp = x[i].y; + const flt_t ztmp = x[i].z; + + int n = 0; + int *neighptr = ipage.vget(); + + // loop over parent non-skip list + + const int * _noalias const jlist = firstneigh_skip[i]; + const int jnum = numneigh_skip[i]; + + if (THREE) { + const int jnumhalf = numhalf_skip[ii]; + for (int jj = 0; jj < jnumhalf; jj++) { + const int joriginal = jlist[jj]; + const int j = joriginal & NEIGHMASK; + + int addme = 1; + if (ijskip[itype][type[j]]) addme = 0; + + // trim to shorter cutoff + + const flt_t delx = xtmp - x[j].x; + const flt_t dely = ytmp - x[j].y; + const flt_t delz = ztmp - x[j].z; + const flt_t rsq = delx * delx + dely * dely + delz * delz; + if (rsq > cutsq_custom) addme = 0; + + if (addme) + neighptr[n++] = joriginal; + } + numhalf[my_inum] = n; + + for (int jj = jnumhalf; jj < jnum; jj++) { + const int joriginal = jlist[jj]; + const int j = joriginal & NEIGHMASK; + + int addme = 1; + if (ijskip[itype][type[j]]) addme = 0; + + // trim to shorter cutoff + + const flt_t delx = xtmp - x[j].x; + const flt_t dely = ytmp - x[j].y; + const flt_t delz = ztmp - x[j].z; + const flt_t rsq = delx * delx + dely * dely + delz * delz; + if (rsq > cutsq_custom) addme = 0; + + if (addme) + neighptr[n++] = joriginal; + } + } else { + #if defined(LMP_SIMD_COMPILER) + #pragma vector aligned + #pragma ivdep + #endif + for (int jj = 0; jj < jnum; jj++) { + const int joriginal = jlist[jj]; + const int j = joriginal & NEIGHMASK; + + int addme = 1; + if (ijskip[itype][type[j]]) addme = 0; + + // trim to shorter cutoff + + const flt_t delx = xtmp - x[j].x; + const flt_t dely = ytmp - x[j].y; + const flt_t delz = ztmp - x[j].z; + const flt_t rsq = delx * delx + dely * dely + delz * delz; + if (rsq > cutsq_custom) addme = 0; + + if (addme) + neighptr[n++] = joriginal; + } + } + + ilist[my_inum++] = i; + firstneigh[i] = neighptr; + numneigh[i] = n; + + int pad_end = n; + IP_PRE_neighbor_pad(pad_end, 0); + #if defined(LMP_SIMD_COMPILER) + #pragma vector aligned + #pragma loop_count min=1, max=INTEL_COMPILE_WIDTH-1, \ + avg=INTEL_COMPILE_WIDTH/2 + #endif + for ( ; n < pad_end; n++) + neighptr[n] = e_nall; + + ipage.vgot(n); + if (ipage.status()) + error->one(FLERR,"Neighbor list overflow, boost neigh_modify one"); + } + + int last_inum = 0, loop_end; + _inum_counts[tid] = my_inum; + } + int inum = _inum_counts[0]; + for (int tid = 1; tid < packthreads; tid++) { + for (int i = _inum_starts[tid]; i < _inum_counts[tid]; i++) { + if (THREE) numhalf[inum] = numhalf[i]; + ilist[inum++] = ilist[i]; + } + } + list->inum = inum; + + if (THREE && num_skip > 0) { + int * const list_start = firstneigh[ilist[0]]; + for (int ii = 0; ii < inum; ii++) { + int i = ilist[ii]; + cnumneigh[ii] = static_cast(firstneigh[i] - list_start); + } + } + if (list->ghost) { + int num = 0; + int my_inum = list->inum; + for (int i = 0; i < my_inum; i++) + if (ilist[i] < nlocal) num++; + else break; + list->inum = num; + list->gnum = my_inum - num; + } +} + +/* ---------------------------------------------------------------------- */ + +void NPairSkipTrimIntel::build(NeighList *list) +{ + if (_fix->three_body_neighbor()==0 || + _full_props[list->listskip->index] == 0) { + if (_fix->precision() == FixIntel::PREC_MODE_MIXED) + build_t(list, nullptr, nullptr, nullptr, _fix->get_mixed_buffers()); + else if (_fix->precision() == FixIntel::PREC_MODE_DOUBLE) + build_t(list, nullptr, nullptr, nullptr, _fix->get_double_buffers()); + else + build_t(list, nullptr, nullptr, nullptr, _fix->get_single_buffers()); + } else { + int *nhalf, *cnumneigh, *nhalf_skip, *u; + if (_fix->precision() == FixIntel::PREC_MODE_MIXED) { + _fix->get_mixed_buffers()->get_list_data3(list->listskip,nhalf_skip,u); + _fix->get_mixed_buffers()->grow_data3(list, nhalf, cnumneigh); + build_t(list, nhalf, cnumneigh, nhalf_skip, _fix->get_mixed_buffers()); + } else if (_fix->precision() == FixIntel::PREC_MODE_DOUBLE) { + _fix->get_double_buffers()->get_list_data3(list->listskip,nhalf_skip,u); + _fix->get_double_buffers()->grow_data3(list, nhalf, cnumneigh); + build_t(list, nhalf, cnumneigh, nhalf_skip, _fix->get_double_buffers()); + } else { + _fix->get_single_buffers()->get_list_data3(list->listskip,nhalf_skip,u); + _fix->get_single_buffers()->grow_data3(list,nhalf,cnumneigh); + build_t(list, nhalf, cnumneigh, nhalf_skip, _fix->get_single_buffers()); + } + } +} diff --git a/src/INTEL/npair_skip_trim_intel.h b/src/INTEL/npair_skip_trim_intel.h new file mode 100644 index 0000000000..f0018e5df4 --- /dev/null +++ b/src/INTEL/npair_skip_trim_intel.h @@ -0,0 +1,62 @@ +// clang-format off +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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 NPAIR_CLASS +// clang-format off +NPairStyle(skip/trim/intel, + NPairSkipTrimIntel, + NP_SKIP | NP_HALF | NP_FULL | + NP_NSQ | NP_BIN | NP_MULTI | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_INTEL); + +NPairStyle(skip/trim/ghost/intel, + NPairSkipTrimIntel, + NP_SKIP | NP_HALF | NP_FULL | + NP_NSQ | NP_BIN | NP_MULTI | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_GHOST | NP_INTEL); +// clang-format on +#else + +#ifndef LMP_NPAIR_SKIP_TRIM_INTEL_H +#define LMP_NPAIR_SKIP_TRIM_INTEL_H + +#include "fix_intel.h" +#include "npair.h" + +#if defined(_OPENMP) +#include +#endif + +namespace LAMMPS_NS { + +class NPairSkipTrimIntel : public NPair { + public: + NPairSkipTrimIntel(class LAMMPS *); + ~NPairSkipTrimIntel() override; + void copy_neighbor_info() override; + void build(class NeighList *) override; + + protected: + FixIntel *_fix; + int *_inum_starts, *_inum_counts, *_full_props; + + template + void build_t(NeighList *, int *numhalf, int *cnumneigh, int *numhalf_skip, + IntelBuffers *); +}; + +} // namespace LAMMPS_NS + +#endif +#endif diff --git a/src/INTEL/npair_trim_intel.cpp b/src/INTEL/npair_trim_intel.cpp index d377419f1b..dcf10a3c87 100644 --- a/src/INTEL/npair_trim_intel.cpp +++ b/src/INTEL/npair_trim_intel.cpp @@ -88,7 +88,6 @@ void NPairTrimIntel::build_t(NeighList *list, for (int jj = 0; jj < jnum; jj++) { const int joriginal = jlist[jj]; const int j = joriginal & NEIGHMASK; - int addme = 1; // trim to shorter cutoff @@ -97,9 +96,7 @@ void NPairTrimIntel::build_t(NeighList *list, const flt_t delz = ztmp - x[j].z; const flt_t rsq = delx * delx + dely * dely + delz * delz; - if (rsq > cutsq_custom) addme = 0; - - if (addme) + if (rsq <= cutsq_custom) neighptr[n++] = joriginal; } diff --git a/src/OPENMP/npair_skip_omp.h b/src/OPENMP/npair_skip_omp.h index ce61968c17..a733308ccb 100644 --- a/src/OPENMP/npair_skip_omp.h +++ b/src/OPENMP/npair_skip_omp.h @@ -20,36 +20,36 @@ NPairStyle(skip/omp, NPairSkip, NP_SKIP | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | - NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_OMP); + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); NPairStyle(skip/half/respa/omp, NPairSkipRespa, NP_SKIP | NP_RESPA | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | - NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_OMP); + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); NPairStyle(skip/half/size/omp, NPairSkipSize, NP_SKIP | NP_SIZE | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | - NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_OMP); + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); NPairStyle(skip/size/off2on/omp, NPairSkipSizeOff2on, NP_SKIP | NP_SIZE | NP_OFF2ON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_MULTI_OLD | - NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_OMP); + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); NPairStyle(skip/size/off2on/oneside/omp, NPairSkipSizeOff2onOneside, NP_SKIP | NP_SIZE | NP_OFF2ON | NP_ONESIDE | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_NEWTON | NP_NEWTOFF | - NP_ORTHO | NP_TRI | NP_OMP); + NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); NPairStyle(skip/ghost/omp, NPairSkip, NP_SKIP | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | - NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_OMP | NP_GHOST); + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP | NP_GHOST); // clang-format off #endif diff --git a/src/neigh_request.h b/src/neigh_request.h index a3114dff82..fa57922c93 100644 --- a/src/neigh_request.h +++ b/src/neigh_request.h @@ -26,6 +26,7 @@ class NeighRequest : protected Pointers { friend class NStencil; friend class NeighborKokkos; friend class NPairSkipIntel; + friend class NPairSkipTrimIntel; friend class FixIntel; protected: From 06b962fc339312ef471f6e6fe12b038cb2c9ff9e Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Fri, 17 Nov 2023 09:50:03 -0700 Subject: [PATCH 160/204] Bugfix: port missed changes from #3846 --- src/OPENMP/npair_halffull_newton_trim_omp.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/OPENMP/npair_halffull_newton_trim_omp.cpp b/src/OPENMP/npair_halffull_newton_trim_omp.cpp index 1446175013..9fdd4957af 100644 --- a/src/OPENMP/npair_halffull_newton_trim_omp.cpp +++ b/src/OPENMP/npair_halffull_newton_trim_omp.cpp @@ -38,6 +38,8 @@ NPairHalffullNewtonTrimOmp::NPairHalffullNewtonTrimOmp(LAMMPS *lmp) : NPair(lmp) void NPairHalffullNewtonTrimOmp::build(NeighList *list) { const int inum_full = list->listfull->inum; + const double delta = 0.01 * force->angstrom; + const int triclinic = domain->triclinic; NPAIR_OMP_INIT; #if defined(_OPENMP) @@ -86,8 +88,17 @@ void NPairHalffullNewtonTrimOmp::build(NeighList *list) for (jj = 0; jj < jnum; jj++) { joriginal = jlist[jj]; j = joriginal & NEIGHMASK; + if (j < nlocal) { if (i > j) continue; + } else if (triclinic) { + if (fabs(x[j][2]-ztmp) > delta) { + if (x[j][2] < ztmp) continue; + } else if (fabs(x[j][1]-ytmp) > delta) { + if (x[j][1] < ytmp) continue; + } else { + if (x[j][0] < xtmp) continue; + } } else { if (x[j][2] < ztmp) continue; if (x[j][2] == ztmp) { From 6fc7f5689b06362181677ea7fb7394fa3f726742 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Fri, 17 Nov 2023 10:04:11 -0700 Subject: [PATCH 161/204] Port changes to OPENMP package --- src/OPENMP/npair_skip_omp.h | 12 +++---- src/OPENMP/npair_skip_trim_omp.h | 55 ++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 src/OPENMP/npair_skip_trim_omp.h diff --git a/src/OPENMP/npair_skip_omp.h b/src/OPENMP/npair_skip_omp.h index a733308ccb..ce61968c17 100644 --- a/src/OPENMP/npair_skip_omp.h +++ b/src/OPENMP/npair_skip_omp.h @@ -20,36 +20,36 @@ NPairStyle(skip/omp, NPairSkip, NP_SKIP | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | - NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_OMP); NPairStyle(skip/half/respa/omp, NPairSkipRespa, NP_SKIP | NP_RESPA | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | - NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_OMP); NPairStyle(skip/half/size/omp, NPairSkipSize, NP_SKIP | NP_SIZE | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | - NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_OMP); NPairStyle(skip/size/off2on/omp, NPairSkipSizeOff2on, NP_SKIP | NP_SIZE | NP_OFF2ON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_MULTI_OLD | - NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_OMP); NPairStyle(skip/size/off2on/oneside/omp, NPairSkipSizeOff2onOneside, NP_SKIP | NP_SIZE | NP_OFF2ON | NP_ONESIDE | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_NEWTON | NP_NEWTOFF | - NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); + NP_ORTHO | NP_TRI | NP_OMP); NPairStyle(skip/ghost/omp, NPairSkip, NP_SKIP | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | - NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP | NP_GHOST); + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_OMP | NP_GHOST); // clang-format off #endif diff --git a/src/OPENMP/npair_skip_trim_omp.h b/src/OPENMP/npair_skip_trim_omp.h new file mode 100644 index 0000000000..aba6f50e17 --- /dev/null +++ b/src/OPENMP/npair_skip_trim_omp.h @@ -0,0 +1,55 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS development team: developers@lammps.org + + 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. +------------------------------------------------------------------------- */ + +// There is no benefit from multi-threading for skip lists, so we +// just forward the requests to the corresponding non-omp versions. + +#ifdef NPAIR_CLASS +// clang-format off +NPairStyle(skip/trim/omp, + NPairSkipTrim, + NP_SKIP | NP_HALF | NP_FULL | + NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); + +NPairStyle(skip/trim/half/respa/omp, + NPairSkipTrimRespa, + NP_SKIP | NP_RESPA | NP_HALF | NP_FULL | + NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); + +NPairStyle(skip/trim/half/size/omp, + NPairSkipTrimSize, + NP_SKIP | NP_SIZE | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); + +NPairStyle(skip/trim/size/off2on/omp, + NPairSkipTrimSizeOff2on, + NP_SKIP | NP_SIZE | NP_OFF2ON | NP_HALF | + NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_MULTI_OLD | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); + +NPairStyle(skip/trim/size/off2on/oneside/omp, + NPairSkipTrimSizeOff2onOneside, + NP_SKIP | NP_SIZE | NP_OFF2ON | NP_ONESIDE | NP_HALF | + NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_NEWTON | NP_NEWTOFF | + NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); + +NPairStyle(skip/trim/ghost/omp, + NPairSkipTrim, + NP_SKIP | NP_HALF | NP_FULL | + NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | + NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP | NP_GHOST); +// clang-format off +#endif + From be19b5c210c08988da430db330bb72a2b7c73703 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Fri, 17 Nov 2023 12:46:45 -0700 Subject: [PATCH 162/204] Make naming consistent --- ....h => npair_halffull_trim_newtoff_intel.h} | 22 +++++++------- ...p => npair_halffull_trim_newton_intel.cpp} | 10 +++---- ...l.h => npair_halffull_trim_newton_intel.h} | 16 +++++----- src/KOKKOS/npair_skip_kokkos.h | 8 ++--- ...pp => npair_halffull_trim_newtoff_omp.cpp} | 6 ++-- ...mp.h => npair_halffull_trim_newtoff_omp.h} | 18 +++++------ ...cpp => npair_halffull_trim_newton_omp.cpp} | 8 +++-- ...omp.h => npair_halffull_trim_newton_omp.h} | 16 +++++----- ...im.cpp => npair_halffull_trim_newtoff.cpp} | 6 ++-- ...f_trim.h => npair_halffull_trim_newtoff.h} | 30 +++++++++---------- ...rim.cpp => npair_halffull_trim_newton.cpp} | 6 ++-- ...on_trim.h => npair_halffull_trim_newton.h} | 18 +++++------ ...spa_trim.cpp => npair_skip_trim_respa.cpp} | 6 ++-- ...p_respa_trim.h => npair_skip_trim_respa.h} | 12 ++++---- ...size_trim.cpp => npair_skip_trim_size.cpp} | 6 ++-- ...kip_size_trim.h => npair_skip_trim_size.h} | 12 ++++---- ...im.cpp => npair_skip_trim_size_off2on.cpp} | 6 ++-- ...n_trim.h => npair_skip_trim_size_off2on.h} | 12 ++++---- ...> npair_skip_trim_size_off2on_oneside.cpp} | 6 ++-- ... => npair_skip_trim_size_off2on_oneside.h} | 12 ++++---- 20 files changed, 119 insertions(+), 117 deletions(-) rename src/INTEL/{npair_halffull_newtoff_trim_intel.h => npair_halffull_trim_newtoff_intel.h} (72%) rename src/INTEL/{npair_halffull_newton_trim_intel.cpp => npair_halffull_trim_newton_intel.cpp} (97%) rename src/INTEL/{npair_halffull_newton_trim_intel.h => npair_halffull_trim_newton_intel.h} (81%) rename src/OPENMP/{npair_halffull_newtoff_trim_omp.cpp => npair_halffull_trim_newtoff_omp.cpp} (94%) rename src/OPENMP/{npair_halffull_newtoff_trim_omp.h => npair_halffull_trim_newtoff_omp.h} (72%) rename src/OPENMP/{npair_halffull_newton_trim_omp.cpp => npair_halffull_trim_newton_omp.cpp} (94%) rename src/OPENMP/{npair_halffull_newton_trim_omp.h => npair_halffull_trim_newton_omp.h} (76%) rename src/{npair_halffull_newtoff_trim.cpp => npair_halffull_trim_newtoff.cpp} (94%) rename src/{npair_halffull_newtoff_trim.h => npair_halffull_trim_newtoff.h} (66%) rename src/{npair_halffull_newton_trim.cpp => npair_halffull_trim_newton.cpp} (95%) rename src/{npair_halffull_newton_trim.h => npair_halffull_trim_newton.h} (74%) rename src/{npair_skip_respa_trim.cpp => npair_skip_trim_respa.cpp} (97%) rename src/{npair_skip_respa_trim.h => npair_skip_trim_respa.h} (82%) rename src/{npair_skip_size_trim.cpp => npair_skip_trim_size.cpp} (95%) rename src/{npair_skip_size_trim.h => npair_skip_trim_size.h} (82%) rename src/{npair_skip_size_off2on_trim.cpp => npair_skip_trim_size_off2on.cpp} (95%) rename src/{npair_skip_size_off2on_trim.h => npair_skip_trim_size_off2on.h} (80%) rename src/{npair_skip_size_off2on_oneside_trim.cpp => npair_skip_trim_size_off2on_oneside.cpp} (96%) rename src/{npair_skip_size_off2on_oneside_trim.h => npair_skip_trim_size_off2on_oneside.h} (78%) diff --git a/src/INTEL/npair_halffull_newtoff_trim_intel.h b/src/INTEL/npair_halffull_trim_newtoff_intel.h similarity index 72% rename from src/INTEL/npair_halffull_newtoff_trim_intel.h rename to src/INTEL/npair_halffull_trim_newtoff_intel.h index d8594ce3b8..5e8b01cd09 100644 --- a/src/INTEL/npair_halffull_newtoff_trim_intel.h +++ b/src/INTEL/npair_halffull_trim_newtoff_intel.h @@ -21,24 +21,24 @@ #ifdef NPAIR_CLASS // clang-format off -NPairStyle(halffull/newtoff/trim/intel, - NPairHalffullNewtoffTrim, +NPairStyle(halffull/trim/newtoff/intel, + NPairHalffullTrimNewtoff, NP_HALF_FULL | NP_NEWTOFF | NP_NSQ | NP_BIN | NP_MULTI | NP_HALF | NP_ORTHO | NP_TRI | NP_TRIM | NP_INTEL); -NPairStyle(halffull/newtoff/skip/trim/intel, - NPairHalffullNewtoffTrim, +NPairStyle(halffull/trim/newtoff/skip/intel, + NPairHalffullTrimNewtoff, NP_HALF_FULL | NP_NEWTOFF | NP_NSQ | NP_BIN | NP_MULTI | NP_HALF | - NP_ORTHO | NP_TRI | NP_SKIP | NP_TRIM | NP_INTEL); + NP_ORTHO | NP_TRI | NP_TRIM | NP_SKIP | NP_INTEL); -NPairStyle(halffull/newtoff/ghost/trim/intel, - NPairHalffullNewtoffTrim, +NPairStyle(halffull/trim/newtoff/ghost/intel, + NPairHalffullTrimNewtoff, NP_HALF_FULL | NP_NEWTOFF | NP_NSQ | NP_BIN | NP_MULTI | NP_HALF | - NP_ORTHO | NP_TRI | NP_GHOST | NP_TRIM | NP_INTEL); + NP_ORTHO | NP_TRI | NP_TRIM | NP_GHOST | NP_INTEL); -NPairStyle(halffull/newtoff/skip/ghost/trim/intel, - NPairHalffullNewtoffTrim, +NPairStyle(halffull/trim/newtoff/skip/ghost/intel, + NPairHalffullTrimNewtoff, NP_HALF_FULL | NP_NEWTOFF | NP_NSQ | NP_BIN | NP_MULTI | NP_HALF | - NP_ORTHO | NP_TRI | NP_SKIP | NP_GHOST | NP_TRIM | NP_INTEL); + NP_ORTHO | NP_TRI | NP_TRIM | NP_SKIP | NP_GHOST | NP_INTEL); // clang-format on #endif diff --git a/src/INTEL/npair_halffull_newton_trim_intel.cpp b/src/INTEL/npair_halffull_trim_newton_intel.cpp similarity index 97% rename from src/INTEL/npair_halffull_newton_trim_intel.cpp rename to src/INTEL/npair_halffull_trim_newton_intel.cpp index 34b9b20e9c..b1b69734a4 100644 --- a/src/INTEL/npair_halffull_newton_trim_intel.cpp +++ b/src/INTEL/npair_halffull_trim_newton_intel.cpp @@ -16,7 +16,7 @@ Contributing author: Stan Moore (SNL) ------------------------------------------------------------------------- */ -#include "npair_halffull_newton_trim_intel.h" +#include "npair_halffull_trim_newton_intel.h" #include "atom.h" #include "comm.h" @@ -31,7 +31,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -NPairHalffullNewtonTrimIntel::NPairHalffullNewtonTrimIntel(LAMMPS *lmp) : NPair(lmp) { +NPairHalffullTrimNewtonIntel::NPairHalffullTrimNewtonIntel(LAMMPS *lmp) : NPair(lmp) { _fix = static_cast(modify->get_fix_by_id("package_intel")); if (!_fix) error->all(FLERR, "The 'package intel' command is required for /intel styles"); } @@ -44,7 +44,7 @@ NPairHalffullNewtonTrimIntel::NPairHalffullNewtonTrimIntel(LAMMPS *lmp) : NPair( ------------------------------------------------------------------------- */ template -void NPairHalffullNewtonTrimIntel::build_t(NeighList *list, +void NPairHalffullTrimNewtonIntel::build_t(NeighList *list, IntelBuffers *buffers) { const int inum_full = list->listfull->inum; @@ -182,7 +182,7 @@ void NPairHalffullNewtonTrimIntel::build_t(NeighList *list, ------------------------------------------------------------------------- */ template -void NPairHalffullNewtonTrimIntel::build_t3(NeighList *list, int *numhalf, +void NPairHalffullTrimNewtonIntel::build_t3(NeighList *list, int *numhalf, IntelBuffers *buffers) { const int inum_full = list->listfull->inum; @@ -272,7 +272,7 @@ void NPairHalffullNewtonTrimIntel::build_t3(NeighList *list, int *numhalf, /* ---------------------------------------------------------------------- */ -void NPairHalffullNewtonTrimIntel::build(NeighList *list) +void NPairHalffullTrimNewtonIntel::build(NeighList *list) { if (_fix->three_body_neighbor() == 0 || domain->triclinic) { if (_fix->precision() == FixIntel::PREC_MODE_MIXED) diff --git a/src/INTEL/npair_halffull_newton_trim_intel.h b/src/INTEL/npair_halffull_trim_newton_intel.h similarity index 81% rename from src/INTEL/npair_halffull_newton_trim_intel.h rename to src/INTEL/npair_halffull_trim_newton_intel.h index 0ca551d682..dfce63e93d 100644 --- a/src/INTEL/npair_halffull_newton_trim_intel.h +++ b/src/INTEL/npair_halffull_trim_newton_intel.h @@ -18,20 +18,20 @@ #ifdef NPAIR_CLASS // clang-format off -NPairStyle(halffull/newton/trim/intel, - NPairHalffullNewtonTrimIntel, +NPairStyle(halffull/trim/newton/intel, + NPairHalffullTrimNewtonIntel, NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | NP_ORTHO | NP_TRI| NP_TRIM | NP_INTEL); -NPairStyle(halffull/newton/skip/trim/intel, - NPairHalffullNewtonTrimIntel, +NPairStyle(halffull/trim/newton/skip/intel, + NPairHalffullTrimNewtonIntel, NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | NP_ORTHO | NP_TRI | NP_SKIP | NP_TRIM | NP_INTEL); // clang-format on #else -#ifndef LMP_NPAIR_HALFFULL_NEWTON_TRIM_INTEL_H -#define LMP_NPAIR_HALFFULL_NEWTON_TRIM_INTEL_H +#ifndef LMP_NPAIR_HALFFULL_TRIM_NEWTON_INTEL_H +#define LMP_NPAIR_HALFFULL_TRIM_NEWTON_INTEL_H #include "fix_intel.h" #include "npair.h" @@ -42,9 +42,9 @@ NPairStyle(halffull/newton/skip/trim/intel, namespace LAMMPS_NS { -class NPairHalffullNewtonTrimIntel : public NPair { +class NPairHalffullTrimNewtonIntel : public NPair { public: - NPairHalffullNewtonTrimIntel(class LAMMPS *); + NPairHalffullTrimNewtonIntel(class LAMMPS *); void build(class NeighList *) override; protected: diff --git a/src/KOKKOS/npair_skip_kokkos.h b/src/KOKKOS/npair_skip_kokkos.h index 7672a2c36c..293c53677b 100644 --- a/src/KOKKOS/npair_skip_kokkos.h +++ b/src/KOKKOS/npair_skip_kokkos.h @@ -42,28 +42,28 @@ NPairStyle(skip/ghost/kk/host, NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_GHOST | NP_KOKKOS_HOST); typedef NPairSkipKokkos NPairKokkosSkipTrimDevice; -NPairStyle(skip/kk/device, +NPairStyle(skip/trim/kk/device, NPairKokkosSkipTrimDevice, NP_SKIP | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM |NP_KOKKOS_DEVICE); typedef NPairSkipKokkos NPairKokkosSkipTrimGhostDevice; -NPairStyle(skip/ghost/kk/device, +NPairStyle(skip/trim/ghost/kk/device, NPairKokkosSkipTrimGhostDevice, NP_SKIP | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_GHOST | NP_KOKKOS_DEVICE); typedef NPairSkipKokkos NPairKokkosSkipTrimHost; -NPairStyle(skip/kk/host, +NPairStyle(skip/trim/kk/host, NPairKokkosSkipTrimHost, NP_SKIP | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM | NP_KOKKOS_HOST); typedef NPairSkipKokkos NPairKokkosSkipTrimGhostHost; -NPairStyle(skip/ghost/kk/host, +NPairStyle(skip/trim/ghost/kk/host, NPairKokkosSkipTrimGhostHost, NP_SKIP | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | diff --git a/src/OPENMP/npair_halffull_newtoff_trim_omp.cpp b/src/OPENMP/npair_halffull_trim_newtoff_omp.cpp similarity index 94% rename from src/OPENMP/npair_halffull_newtoff_trim_omp.cpp rename to src/OPENMP/npair_halffull_trim_newtoff_omp.cpp index d35b3b2ee8..d0c5c1ab86 100644 --- a/src/OPENMP/npair_halffull_newtoff_trim_omp.cpp +++ b/src/OPENMP/npair_halffull_trim_newtoff_omp.cpp @@ -12,7 +12,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "npair_halffull_newtoff_trim_omp.h" +#include "npair_halffull_trim_newtoff_omp.h" #include "atom.h" #include "error.h" @@ -26,7 +26,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -NPairHalffullNewtoffTrimOmp::NPairHalffullNewtoffTrimOmp(LAMMPS *lmp) : NPair(lmp) {} +NPairHalffullTrimNewtoffOmp::NPairHalffullTrimNewtoffOmp(LAMMPS *lmp) : NPair(lmp) {} /* ---------------------------------------------------------------------- build half list from full list and trim to shorter cutoff @@ -35,7 +35,7 @@ NPairHalffullNewtoffTrimOmp::NPairHalffullNewtoffTrimOmp(LAMMPS *lmp) : NPair(lm works if full list is a skip list ------------------------------------------------------------------------- */ -void NPairHalffullNewtoffTrimOmp::build(NeighList *list) +void NPairHalffullTrimNewtoffOmp::build(NeighList *list) { const int inum_full = list->listfull->inum; diff --git a/src/OPENMP/npair_halffull_newtoff_trim_omp.h b/src/OPENMP/npair_halffull_trim_newtoff_omp.h similarity index 72% rename from src/OPENMP/npair_halffull_newtoff_trim_omp.h rename to src/OPENMP/npair_halffull_trim_newtoff_omp.h index 19e1c55eeb..c86c132b69 100644 --- a/src/OPENMP/npair_halffull_newtoff_trim_omp.h +++ b/src/OPENMP/npair_halffull_trim_newtoff_omp.h @@ -13,28 +13,28 @@ #ifdef NPAIR_CLASS // clang-format off -NPairStyle(halffull/newtoff/trim/omp, - NPairHalffullNewtoffTrimOmp, +NPairStyle(halffull/trim/newtoff/omp, + NPairHalffullTrimNewtoffOmp, NP_HALF_FULL | NP_NEWTOFF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_HALF | NP_ORTHO | NP_TRI | NP_TRIM | NP_OMP); -NPairStyle(halffull/newtoff/skip/trim/omp, - NPairHalffullNewtoffTrimOmp, +NPairStyle(halffull/trim/newtoff/skip/omp, + NPairHalffullTrimNewtoffOmp, NP_HALF_FULL | NP_NEWTOFF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_HALF | - NP_ORTHO | NP_TRI | NP_SKIP | NP_TRIM | NP_OMP); + NP_ORTHO | NP_TRI | NP_TRIM | NP_SKIP | NP_OMP); // clang-format on #else -#ifndef LMP_NPAIR_HALFFULL_NEWTOFF_TRIM_OMP_H -#define LMP_NPAIR_HALFFULL_NEWTOFF_TRIM_OMP_H +#ifndef LMP_NPAIR_HALFFULL_TRIM_NEWTOFF_OMP_H +#define LMP_NPAIR_HALFFULL_TRIM_NEWTOFF_OMP_H #include "npair.h" namespace LAMMPS_NS { -class NPairHalffullNewtoffTrimOmp : public NPair { +class NPairHalffullTrimNewtoffOmp : public NPair { public: - NPairHalffullNewtoffTrimOmp(class LAMMPS *); + NPairHalffullTrimNewtoffOmp(class LAMMPS *); void build(class NeighList *) override; }; diff --git a/src/OPENMP/npair_halffull_newton_trim_omp.cpp b/src/OPENMP/npair_halffull_trim_newton_omp.cpp similarity index 94% rename from src/OPENMP/npair_halffull_newton_trim_omp.cpp rename to src/OPENMP/npair_halffull_trim_newton_omp.cpp index 9fdd4957af..bd9d553eb9 100644 --- a/src/OPENMP/npair_halffull_newton_trim_omp.cpp +++ b/src/OPENMP/npair_halffull_trim_newton_omp.cpp @@ -12,10 +12,12 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "npair_halffull_newton_trim_omp.h" +#include "npair_halffull_trim_newton_omp.h" #include "atom.h" +#include "domain.h" #include "error.h" +#include "force.h" #include "my_page.h" #include "neigh_list.h" #include "npair_omp.h" @@ -26,7 +28,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -NPairHalffullNewtonTrimOmp::NPairHalffullNewtonTrimOmp(LAMMPS *lmp) : NPair(lmp) {} +NPairHalffullTrimNewtonOmp::NPairHalffullTrimNewtonOmp(LAMMPS *lmp) : NPair(lmp) {} /* ---------------------------------------------------------------------- build half list from full list and trim to shorter cutoff @@ -35,7 +37,7 @@ NPairHalffullNewtonTrimOmp::NPairHalffullNewtonTrimOmp(LAMMPS *lmp) : NPair(lmp) works if full list is a skip list ------------------------------------------------------------------------- */ -void NPairHalffullNewtonTrimOmp::build(NeighList *list) +void NPairHalffullTrimNewtonOmp::build(NeighList *list) { const int inum_full = list->listfull->inum; const double delta = 0.01 * force->angstrom; diff --git a/src/OPENMP/npair_halffull_newton_trim_omp.h b/src/OPENMP/npair_halffull_trim_newton_omp.h similarity index 76% rename from src/OPENMP/npair_halffull_newton_trim_omp.h rename to src/OPENMP/npair_halffull_trim_newton_omp.h index 4cb84f1b3a..c6950dfa45 100644 --- a/src/OPENMP/npair_halffull_newton_trim_omp.h +++ b/src/OPENMP/npair_halffull_trim_newton_omp.h @@ -13,28 +13,28 @@ #ifdef NPAIR_CLASS // clang-format off -NPairStyle(halffull/newton/trim/omp, - NPairHalffullNewtonTrimOmp, +NPairStyle(halffull/trim/newton/omp, + NPairHalffullTrimNewtonOmp, NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_ORTHO | NP_TRI| NP_TRIM | NP_OMP); -NPairStyle(halffull/newton/skip/trim/omp, - NPairHalffullNewtonTrimOmp, +NPairStyle(halffull/trim/newton/skip/omp, + NPairHalffullTrimNewtonOmp, NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_ORTHO | NP_TRI | NP_SKIP | NP_TRIM | NP_OMP); // clang-format on #else -#ifndef LMP_NPAIR_HALFFULL_NEWTON_TRIM_OMP_H -#define LMP_NPAIR_HALFFULL_NEWTON_TRIM_OMP_H +#ifndef LMP_NPAIR_HALFFULL_TRIM_NEWTON_OMP_H +#define LMP_NPAIR_HALFFULL_TRIM_NEWTON_OMP_H #include "npair.h" namespace LAMMPS_NS { -class NPairHalffullNewtonTrimOmp : public NPair { +class NPairHalffullTrimNewtonOmp : public NPair { public: - NPairHalffullNewtonTrimOmp(class LAMMPS *); + NPairHalffullTrimNewtonOmp(class LAMMPS *); void build(class NeighList *) override; }; diff --git a/src/npair_halffull_newtoff_trim.cpp b/src/npair_halffull_trim_newtoff.cpp similarity index 94% rename from src/npair_halffull_newtoff_trim.cpp rename to src/npair_halffull_trim_newtoff.cpp index 8ed392da2f..db97bf185a 100644 --- a/src/npair_halffull_newtoff_trim.cpp +++ b/src/npair_halffull_trim_newtoff.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "npair_halffull_newtoff_trim.h" +#include "npair_halffull_trim_newtoff.h" #include "atom.h" #include "error.h" @@ -22,7 +22,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -NPairHalffullNewtoffTrim::NPairHalffullNewtoffTrim(LAMMPS *lmp) : NPair(lmp) {} +NPairHalffullTrimNewtoff::NPairHalffullTrimNewtoff(LAMMPS *lmp) : NPair(lmp) {} /* ---------------------------------------------------------------------- build half list from full list @@ -33,7 +33,7 @@ NPairHalffullNewtoffTrim::NPairHalffullNewtoffTrim(LAMMPS *lmp) : NPair(lmp) {} if ghost, also store neighbors of ghost atoms & set inum,gnum correctly ------------------------------------------------------------------------- */ -void NPairHalffullNewtoffTrim::build(NeighList *list) +void NPairHalffullTrimNewtoff::build(NeighList *list) { int i, j, ii, jj, n, jnum, joriginal; int *neighptr, *jlist; diff --git a/src/npair_halffull_newtoff_trim.h b/src/npair_halffull_trim_newtoff.h similarity index 66% rename from src/npair_halffull_newtoff_trim.h rename to src/npair_halffull_trim_newtoff.h index 0fe730f9c1..ca7726c837 100644 --- a/src/npair_halffull_newtoff_trim.h +++ b/src/npair_halffull_trim_newtoff.h @@ -13,38 +13,38 @@ #ifdef NPAIR_CLASS // clang-format off -NPairStyle(halffull/newtoff/trim, - NPairHalffullNewtoffTrim, +NPairStyle(halffull/trim/newtoff, + NPairHalffullTrimNewtoff, NP_HALF_FULL | NP_NEWTOFF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_HALF | NP_ORTHO | NP_TRI | NP_TRIM); -NPairStyle(halffull/newtoff/skip/trim, - NPairHalffullNewtoffTrim, +NPairStyle(halffull/trim/newtoff/skip, + NPairHalffullTrimNewtoff, NP_HALF_FULL | NP_NEWTOFF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_HALF | - NP_ORTHO | NP_TRI | NP_SKIP | NP_TRIM); + NP_ORTHO | NP_TRI | NP_TRIM | NP_SKIP); -NPairStyle(halffull/newtoff/ghost/trim, - NPairHalffullNewtoffTrim, +NPairStyle(halffull/trim/newtoff/ghost, + NPairHalffullTrimNewtoff, NP_HALF_FULL | NP_NEWTOFF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_HALF | - NP_ORTHO | NP_TRI | NP_GHOST | NP_TRIM); + NP_ORTHO | NP_TRI | NP_TRIM | NP_GHOST); -NPairStyle(halffull/newtoff/skip/ghost/trim, - NPairHalffullNewtoffTrim, +NPairStyle(halffull/trim/newtoff/skip/ghost, + NPairHalffullTrimNewtoff, NP_HALF_FULL | NP_NEWTOFF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_HALF | - NP_ORTHO | NP_TRI | NP_SKIP | NP_GHOST | NP_TRIM); + NP_ORTHO | NP_TRI | NP_TRIM | NP_SKIP | NP_GHOST); // clang-format on #else -#ifndef LMP_NPAIR_HALFFULL_NEWTOFF_TRIM_H -#define LMP_NPAIR_HALFFULL_NEWTOFF_TRIM_H +#ifndef LMP_NPAIR_HALFFULL_TRIM_NEWTOFF_H +#define LMP_NPAIR_HALFFULL_TRIM_NEWTOFF_H #include "npair.h" namespace LAMMPS_NS { -class NPairHalffullNewtoffTrim : public NPair { +class NPairHalffullTrimNewtoff : public NPair { public: - NPairHalffullNewtoffTrim(class LAMMPS *); + NPairHalffullTrimNewtoff(class LAMMPS *); void build(class NeighList *) override; }; diff --git a/src/npair_halffull_newton_trim.cpp b/src/npair_halffull_trim_newton.cpp similarity index 95% rename from src/npair_halffull_newton_trim.cpp rename to src/npair_halffull_trim_newton.cpp index e758c04284..56cef00b25 100644 --- a/src/npair_halffull_newton_trim.cpp +++ b/src/npair_halffull_trim_newton.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "npair_halffull_newton_trim.h" +#include "npair_halffull_trim_newton.h" #include "atom.h" #include "domain.h" @@ -24,7 +24,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -NPairHalffullNewtonTrim::NPairHalffullNewtonTrim(LAMMPS *lmp) : NPair(lmp) {} +NPairHalffullTrimNewton::NPairHalffullTrimNewton(LAMMPS *lmp) : NPair(lmp) {} /* ---------------------------------------------------------------------- build half list from full list @@ -33,7 +33,7 @@ NPairHalffullNewtonTrim::NPairHalffullNewtonTrim(LAMMPS *lmp) : NPair(lmp) {} works if full list is a skip list ------------------------------------------------------------------------- */ -void NPairHalffullNewtonTrim::build(NeighList *list) +void NPairHalffullTrimNewton::build(NeighList *list) { int i, j, ii, jj, n, jnum, joriginal; int *neighptr, *jlist; diff --git a/src/npair_halffull_newton_trim.h b/src/npair_halffull_trim_newton.h similarity index 74% rename from src/npair_halffull_newton_trim.h rename to src/npair_halffull_trim_newton.h index aad3edcbfb..5eb5aa3cd3 100644 --- a/src/npair_halffull_newton_trim.h +++ b/src/npair_halffull_trim_newton.h @@ -13,28 +13,28 @@ #ifdef NPAIR_CLASS // clang-format off -NPairStyle(halffull/newton/trim, - NPairHalffullNewtonTrim, +NPairStyle(halffull/trim/newton, + NPairHalffullTrimNewton, NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_ORTHO | NP_TRI | NP_TRIM); -NPairStyle(halffull/newton/skip/trim, - NPairHalffullNewtonTrim, +NPairStyle(halffull/trim/newton/skip, + NPairHalffullTrimNewton, NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | - NP_ORTHO | NP_TRI | NP_SKIP | NP_TRIM); + NP_ORTHO | NP_TRI | NP_TRIM | NP_SKIP); // clang-format on #else -#ifndef LMP_NPAIR_HALFFULL_NEWTON_TRIM_H -#define LMP_NPAIR_HALFFULL_NEWTON_TRIM_H +#ifndef LMP_NPAIR_HALFFULL_TRIM_NEWTON_H +#define LMP_NPAIR_HALFFULL_TRIM_NEWTON_H #include "npair.h" namespace LAMMPS_NS { -class NPairHalffullNewtonTrim : public NPair { +class NPairHalffullTrimNewton : public NPair { public: - NPairHalffullNewtonTrim(class LAMMPS *); + NPairHalffullTrimNewton(class LAMMPS *); void build(class NeighList *) override; }; diff --git a/src/npair_skip_respa_trim.cpp b/src/npair_skip_trim_respa.cpp similarity index 97% rename from src/npair_skip_respa_trim.cpp rename to src/npair_skip_trim_respa.cpp index 64b1c4d716..7dd040ca0a 100644 --- a/src/npair_skip_respa_trim.cpp +++ b/src/npair_skip_trim_respa.cpp @@ -12,7 +12,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "npair_skip_respa_trim.h" +#include "npair_skip_trim_respa.h" #include "atom.h" #include "error.h" @@ -23,7 +23,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -NPairSkipRespaTrim::NPairSkipRespaTrim(LAMMPS *lmp) : NPair(lmp) {} +NPairSkipTrimRespa::NPairSkipTrimRespa(LAMMPS *lmp) : NPair(lmp) {} /* ---------------------------------------------------------------------- build skip list for subset of types from parent list @@ -31,7 +31,7 @@ NPairSkipRespaTrim::NPairSkipRespaTrim(LAMMPS *lmp) : NPair(lmp) {} this is for respa lists, copy the inner/middle values from parent ------------------------------------------------------------------------- */ -void NPairSkipRespaTrim::build(NeighList *list) +void NPairSkipTrimRespa::build(NeighList *list) { int i,j,ii,jj,n,itype,jnum,joriginal,n_inner,n_middle; int *neighptr,*jlist,*neighptr_inner,*neighptr_middle; diff --git a/src/npair_skip_respa_trim.h b/src/npair_skip_trim_respa.h similarity index 82% rename from src/npair_skip_respa_trim.h rename to src/npair_skip_trim_respa.h index f10b726cbe..dcfe71c28d 100644 --- a/src/npair_skip_respa_trim.h +++ b/src/npair_skip_trim_respa.h @@ -13,24 +13,24 @@ #ifdef NPAIR_CLASS // clang-format off -NPairStyle(skip/half/respa/trim, - NPairSkipRespaTrim, +NPairStyle(skip/trim/half/respa, + NPairSkipTrimRespa, NP_SKIP | NP_RESPA | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM); // clang-format on #else -#ifndef LMP_NPAIR_SKIP_RESPA_TRIM_H -#define LMP_NPAIR_SKIP_RESPA_TRIM_H +#ifndef LMP_NPAIR_SKIP_TRIM_RESPA_H +#define LMP_NPAIR_SKIP_TRIM_RESPA_H #include "npair.h" namespace LAMMPS_NS { -class NPairSkipRespaTrim : public NPair { +class NPairSkipTrimRespa : public NPair { public: - NPairSkipRespaTrim(class LAMMPS *); + NPairSkipTrimRespa(class LAMMPS *); void build(class NeighList *) override; }; diff --git a/src/npair_skip_size_trim.cpp b/src/npair_skip_trim_size.cpp similarity index 95% rename from src/npair_skip_size_trim.cpp rename to src/npair_skip_trim_size.cpp index 3fd8f912f9..fab70a78b5 100644 --- a/src/npair_skip_size_trim.cpp +++ b/src/npair_skip_trim_size.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "npair_skip_size_trim.h" +#include "npair_skip_trim_size.h" #include "atom.h" #include "error.h" @@ -22,14 +22,14 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -NPairSkipSizeTrim::NPairSkipSizeTrim(LAMMPS *lmp) : NPair(lmp) {} +NPairSkipTrimSize::NPairSkipTrimSize(LAMMPS *lmp) : NPair(lmp) {} /* ---------------------------------------------------------------------- build skip list for subset of types from parent list iskip and ijskip flag which atom types and type pairs to skip ------------------------------------------------------------------------- */ -void NPairSkipSizeTrim::build(NeighList *list) +void NPairSkipTrimSize::build(NeighList *list) { int i, j, ii, jj, n, itype, jnum, joriginal; int *neighptr, *jlist; diff --git a/src/npair_skip_size_trim.h b/src/npair_skip_trim_size.h similarity index 82% rename from src/npair_skip_size_trim.h rename to src/npair_skip_trim_size.h index e94b2f5f29..3b536860ca 100644 --- a/src/npair_skip_size_trim.h +++ b/src/npair_skip_trim_size.h @@ -13,23 +13,23 @@ #ifdef NPAIR_CLASS // clang-format off -NPairStyle(skip/half/size/trim, - NPairSkipSizeTrim, +NPairStyle(skip/trim/half/size, + NPairSkipTrimSize, NP_SKIP | NP_SIZE | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM); // clang-format on #else -#ifndef LMP_NPAIR_SKIP_SIZE_TRIM_H -#define LMP_NPAIR_SKIP_SIZE_TRIM_H +#ifndef LMP_NPAIR_SKIP_TRIM_SIZE_H +#define LMP_NPAIR_SKIP_TRIM_SIZE_H #include "npair.h" namespace LAMMPS_NS { -class NPairSkipSizeTrim : public NPair { +class NPairSkipTrimSize : public NPair { public: - NPairSkipSizeTrim(class LAMMPS *); + NPairSkipTrimSize(class LAMMPS *); void build(class NeighList *) override; }; diff --git a/src/npair_skip_size_off2on_trim.cpp b/src/npair_skip_trim_size_off2on.cpp similarity index 95% rename from src/npair_skip_size_off2on_trim.cpp rename to src/npair_skip_trim_size_off2on.cpp index 9591bbc4eb..3e9a1e5f63 100644 --- a/src/npair_skip_size_off2on_trim.cpp +++ b/src/npair_skip_trim_size_off2on.cpp @@ -11,7 +11,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "npair_skip_size_off2on_trim.h" +#include "npair_skip_trim_size_off2on.h" #include "atom.h" #include "error.h" @@ -22,7 +22,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -NPairSkipSizeOff2onTrim::NPairSkipSizeOff2onTrim(LAMMPS *lmp) : NPair(lmp) {} +NPairSkipTrimSizeOff2on::NPairSkipTrimSizeOff2on(LAMMPS *lmp) : NPair(lmp) {} /* ---------------------------------------------------------------------- build skip list for subset of types from parent list @@ -30,7 +30,7 @@ NPairSkipSizeOff2onTrim::NPairSkipSizeOff2onTrim(LAMMPS *lmp) : NPair(lmp) {} parent non-skip list used newton off, this skip list is newton on ------------------------------------------------------------------------- */ -void NPairSkipSizeOff2onTrim::build(NeighList *list) +void NPairSkipTrimSizeOff2on::build(NeighList *list) { int i, j, ii, jj, n, itype, jnum, joriginal; tagint itag, jtag; diff --git a/src/npair_skip_size_off2on_trim.h b/src/npair_skip_trim_size_off2on.h similarity index 80% rename from src/npair_skip_size_off2on_trim.h rename to src/npair_skip_trim_size_off2on.h index e471ddd2cc..6e52082329 100644 --- a/src/npair_skip_size_off2on_trim.h +++ b/src/npair_skip_trim_size_off2on.h @@ -13,24 +13,24 @@ #ifdef NPAIR_CLASS // clang-format off -NPairStyle(skip/size/off2on/trim, - NPairSkipSizeOff2onTrim, +NPairStyle(skip/trim/size/off2on, + NPairSkipTrimSizeOff2on, NP_SKIP | NP_SIZE | NP_OFF2ON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM); // clang-format on #else -#ifndef LMP_NPAIR_SKIP_SIZE_OFF2ON_TRIM_H -#define LMP_NPAIR_SKIP_SIZE_OFF2ON_TRIM_H +#ifndef LMP_NPAIR_SKIP_TRIM_SIZE_OFF2ON_H +#define LMP_NPAIR_SKIP_TRIM_SIZE_OFF2ON_H #include "npair.h" namespace LAMMPS_NS { -class NPairSkipSizeOff2onTrim : public NPair { +class NPairSkipTrimSizeOff2on : public NPair { public: - NPairSkipSizeOff2onTrim(class LAMMPS *); + NPairSkipTrimSizeOff2on(class LAMMPS *); void build(class NeighList *) override; }; diff --git a/src/npair_skip_size_off2on_oneside_trim.cpp b/src/npair_skip_trim_size_off2on_oneside.cpp similarity index 96% rename from src/npair_skip_size_off2on_oneside_trim.cpp rename to src/npair_skip_trim_size_off2on_oneside.cpp index 91940d3135..9d43ac8087 100644 --- a/src/npair_skip_size_off2on_oneside_trim.cpp +++ b/src/npair_skip_trim_size_off2on_oneside.cpp @@ -12,7 +12,7 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ -#include "npair_skip_size_off2on_oneside_trim.h" +#include "npair_skip_trim_size_off2on_oneside.h" #include "atom.h" #include "domain.h" @@ -24,7 +24,7 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -NPairSkipSizeOff2onOnesideTrim::NPairSkipSizeOff2onOnesideTrim(LAMMPS *lmp) : +NPairSkipTrimSizeOff2onOneside::NPairSkipTrimSizeOff2onOneside(LAMMPS *lmp) : NPair(lmp) {} /* ---------------------------------------------------------------------- @@ -34,7 +34,7 @@ NPairSkipSizeOff2onOnesideTrim::NPairSkipSizeOff2onOnesideTrim(LAMMPS *lmp) : this skip list is newton on and onesided ------------------------------------------------------------------------- */ -void NPairSkipSizeOff2onOnesideTrim::build(NeighList *list) +void NPairSkipTrimSizeOff2onOneside::build(NeighList *list) { int i,j,ii,jj,itype,jnum,joriginal,flip,tmp; int *surf,*jlist; diff --git a/src/npair_skip_size_off2on_oneside_trim.h b/src/npair_skip_trim_size_off2on_oneside.h similarity index 78% rename from src/npair_skip_size_off2on_oneside_trim.h rename to src/npair_skip_trim_size_off2on_oneside.h index 236b886fe4..27861123dd 100644 --- a/src/npair_skip_size_off2on_oneside_trim.h +++ b/src/npair_skip_trim_size_off2on_oneside.h @@ -13,24 +13,24 @@ #ifdef NPAIR_CLASS // clang-format off -NPairStyle(skip/size/off2on/oneside/trim, - NPairSkipSizeOff2onOnesideTrim, +NPairStyle(skip/trim/size/off2on/oneside, + NPairSkipTrimSizeOff2onOneside, NP_SKIP | NP_SIZE | NP_OFF2ON | NP_ONESIDE | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | NP_MULTI_OLD | NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI | NP_TRIM); // clang-format on #else -#ifndef LMP_NPAIR_SKIP_SIZE_OFF2ON_ONESIDE_TRIM_H -#define LMP_NPAIR_SKIP_SIZE_OFF2ON_ONESIDE_TRIM_H +#ifndef LMP_NPAIR_SKIP_TRIM_SIZE_OFF2ON_ONESIDE_H +#define LMP_NPAIR_SKIP_TRIM_SIZE_OFF2ON_ONESIDE_H #include "npair.h" namespace LAMMPS_NS { -class NPairSkipSizeOff2onOnesideTrim : public NPair { +class NPairSkipTrimSizeOff2onOneside : public NPair { public: - NPairSkipSizeOff2onOnesideTrim(class LAMMPS *); + NPairSkipTrimSizeOff2onOneside(class LAMMPS *); void build(class NeighList *) override; }; From be286d2c7d58302cb3de19caa614a90018f25d07 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 18 Nov 2023 06:21:28 -0500 Subject: [PATCH 163/204] lower the C++ standard to 14 for some files when compiling with intel classic compiler --- cmake/CMakeLists.txt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 95d738d279..961bcef551 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -428,6 +428,18 @@ if(BUILD_OMP) target_link_libraries(lmp PRIVATE OpenMP::OpenMP_CXX) endif() +# lower C++ standard for fmtlib sources when using Intel classic compiler +if((CMAKE_CXX_COMPILER_ID STREQUAL "Intel") AND (CMAKE_CXX_STANDARD GREATER_EQUAL 17) + AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 2021.10)) + message(STATUS "Lowering C++ standard for compiling fmtlib sources with Intel Classic compiler") + get_filename_component(LMP_UTILS_SRC "${LAMMPS_SOURCE_DIR}/utils.cpp" ABSOLUTE) + get_filename_component(LMP_VARIABLE_SRC "${LAMMPS_SOURCE_DIR}/variable.cpp" ABSOLUTE) + get_filename_component(FMT_FORMAT_SRC "${LAMMPS_SOURCE_DIR}/fmtlib_format.cpp" ABSOLUTE) + get_filename_component(FMT_OS_SRC "${LAMMPS_SOURCE_DIR}/fmtlib_os.cpp" ABSOLUTE) + set_source_files_properties("${FMT_FORMAT_SRC}" "${FMT_OS_SRC}" "${LMP_VARIABLE_SRC}" "${LMP_UTILS_SRC}" + PROPERTIES COMPILE_OPTIONS "-std=c++14") +endif() + if(PKG_ATC OR PKG_AWPMD OR PKG_ML-QUIP OR PKG_ML-POD OR PKG_ELECTRODE OR BUILD_TOOLS) enable_language(C) if (NOT USE_INTERNAL_LINALG) From c66710934dd895558d4b37ffeb574cda3b89971d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 18 Nov 2023 06:22:16 -0500 Subject: [PATCH 164/204] reduce warnings when compiling with intel classic compilers --- cmake/CMakeLists.txt | 2 +- src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi | 2 +- src/MAKE/OPTIONS/Makefile.intel_cpu_mpich | 2 +- src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 961bcef551..3b0b069556 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -106,7 +106,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.4) set(CMAKE_TUNE_DEFAULT "-xCOMMON-AVX512") else() - set(CMAKE_TUNE_DEFAULT "-xHost -fp-model fast=2 -no-prec-div -qoverride-limits -diag-disable=10441 -diag-disable=2196") + set(CMAKE_TUNE_DEFAULT "-xHost -fp-model fast=2 -no-prec-div -qoverride-limits -diag-disable=10441 -diag-disable=11074 -diag-disable=11076 -diag-disable=2196") endif() endif() endif() diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi b/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi index 3439244b09..8b3bd754cc 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi @@ -6,7 +6,7 @@ SHELL = /bin/sh # compiler/linker settings # specify flags and libraries needed for your compiler -CC = mpiicpc -std=c++11 -diag-disable=10441 -diag-disable=2196 +CC = mpiicpc -std=c++11 -diag-disable=10441 -diag-disable=2196 -diag-disable=11074 -diag-disable=11076 OPTFLAGS = -xHost -O2 -fp-model fast=2 -no-prec-div -qoverride-limits \ -qopt-zmm-usage=high CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich b/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich index 042b207c91..21387fe5af 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich @@ -6,7 +6,7 @@ SHELL = /bin/sh # compiler/linker settings # specify flags and libraries needed for your compiler -CC = mpicxx -cxx=icc -std=c++11 -diag-disable=10441 -diag-disable=2196 +CC = mpicxx -cxx=icc -std=c++11 -diag-disable=10441 -diag-disable=2196 -diag-disable=11074 -diag-disable=11076 OPTFLAGS = -xHost -O2 -fp-model fast=2 -no-prec-div -qoverride-limits \ -qopt-zmm-usage=high CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi b/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi index 9f6de64987..537ad5a8dc 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi @@ -7,7 +7,7 @@ SHELL = /bin/sh # specify flags and libraries needed for your compiler export OMPI_CXX = icc -CC = mpicxx -std=c++11 -diag-disable=10441 -diag-disable=2196 +CC = mpicxx -std=c++11 -diag-disable=10441 -diag-disable=2196 -diag-disable=11074 -diag-disable=11076 OPTFLAGS = -xHost -O2 -fp-model fast=2 -no-prec-div -qoverride-limits \ -qopt-zmm-usage=high CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ From baa00d22e918001ad46292e55b2a9d9a0a960c21 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 18 Nov 2023 06:22:25 -0500 Subject: [PATCH 165/204] simplify --- src/fmt/compile.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/fmt/compile.h b/src/fmt/compile.h index a1fb7d2935..af76507f07 100644 --- a/src/fmt/compile.h +++ b/src/fmt/compile.h @@ -61,7 +61,8 @@ const T& first(const T& value, const Tail&...) { return value; } -#if defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction) && (FMT_CPLUSPLUS >= 201703L) && !FMT_ICC_VERSION +// LAMMPS customization: only use 'if constexpr' with C++17 +#if defined(__cpp_if_constexpr) && defined(__cpp_return_type_deduction) && (FMT_CPLUSPLUS >= 201703L) template struct type_list {}; // Returns a reference to the argument at index N from [first, rest...]. From 2d4527d59a90f0bf13cf5e57565745dcedb1ef1c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 18 Nov 2023 07:14:38 -0500 Subject: [PATCH 166/204] tweak intel compiler makefile for traditional build --- src/MAKE/OPTIONS/Makefile.intel_coprocessor | 13 +++++++++++++ src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi | 13 +++++++++++++ src/MAKE/OPTIONS/Makefile.intel_cpu_mpich | 13 +++++++++++++ src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi | 13 +++++++++++++ 4 files changed, 52 insertions(+) diff --git a/src/MAKE/OPTIONS/Makefile.intel_coprocessor b/src/MAKE/OPTIONS/Makefile.intel_coprocessor index 99e8d22d82..d8a67428de 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_coprocessor +++ b/src/MAKE/OPTIONS/Makefile.intel_coprocessor @@ -14,6 +14,7 @@ CCFLAGS = -qopenmp -qoffload -ansi-alias -restrict \ -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG -DLMP_INTEL_OFFLOAD \ $(OPTFLAGS) -I$(MKLROOT)/include SHFLAGS = -fPIC +FMTFLAGS = -std=c++11 DEPFLAGS = -M LINK = mpiicpc -std=c++11 @@ -118,6 +119,18 @@ $(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) %.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< +variable.o : ../variable.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +utils.o : ../utils.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_format.o : ../fmtlib_format.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_os.o : ../fmtlib_os.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + # Individual dependencies depend : fastdep.exe $(SRC) diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi b/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi index 8b3bd754cc..681bbaabe1 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_intelmpi @@ -13,6 +13,7 @@ CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) \ -I$(MKLROOT)/include SHFLAGS = -fPIC +FMTFLAGS = -std=c++11 DEPFLAGS = -M LINK = mpiicpc -std=c++11 -diag-disable=10441 -diag-disable=2196 @@ -117,6 +118,18 @@ $(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) %.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< +variable.o : ../variable.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +utils.o : ../utils.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_format.o : ../fmtlib_format.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_os.o : ../fmtlib_os.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + # Individual dependencies depend : fastdep.exe $(SRC) diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich b/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich index 21387fe5af..f1a8c97fc6 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_mpich @@ -13,6 +13,7 @@ CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) \ -I$(MKLROOT)/include SHFLAGS = -fPIC +FMTFLAGS = -std=c++11 DEPFLAGS = -M LINK = mpicxx -cxx=icc -std=c++11 -diag-disable=10441 -diag-disable=2196 @@ -117,6 +118,18 @@ $(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) %.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< +variable.o : ../variable.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +utils.o : ../utils.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_format.o : ../fmtlib_format.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_os.o : ../fmtlib_os.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + # Individual dependencies depend : fastdep.exe $(SRC) diff --git a/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi b/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi index 537ad5a8dc..c3e4451c7c 100644 --- a/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi +++ b/src/MAKE/OPTIONS/Makefile.intel_cpu_openmpi @@ -14,6 +14,7 @@ CCFLAGS = -qopenmp -qno-offload -ansi-alias -restrict \ -DLMP_INTEL_USELRT -DLMP_USE_MKL_RNG $(OPTFLAGS) \ -I$(MKLROOT)/include SHFLAGS = -fPIC +FMTFLAGS = -std=c++11 DEPFLAGS = -M LINK = mpicxx -std=c++11 -diag-disable=10441 -diag-disable=2196 @@ -118,6 +119,18 @@ $(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) %.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< +variable.o : ../variable.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +utils.o : ../utils.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_format.o : ../fmtlib_format.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_os.o : ../fmtlib_os.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + # Individual dependencies depend : fastdep.exe $(SRC) From 0487dc5331504ddef7168f0cc3495d6410d86874 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 18 Nov 2023 11:15:53 -0500 Subject: [PATCH 167/204] copy intel C++17 compiler hack to Kokkos makefiles --- src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi | 16 +++++++++++++++- src/MAKE/OPTIONS/Makefile.kokkos_mpi_only | 14 ++++++++++++++ src/MAKE/OPTIONS/Makefile.kokkos_omp | 14 ++++++++++++++ src/MAKE/OPTIONS/Makefile.kokkos_phi | 14 ++++++++++++++ 4 files changed, 57 insertions(+), 1 deletion(-) diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi b/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi index b73c441c71..e78be1acdc 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi +++ b/src/MAKE/OPTIONS/Makefile.kokkos_cuda_mpi @@ -12,6 +12,8 @@ export OMPI_CXX = $(KOKKOS_ABSOLUTE_PATH)/bin/nvcc_wrapper CC = mpicxx CCFLAGS = -g -O3 -DNDEBUG -Xcudafe --diag_suppress=unrecognized_pragma SHFLAGS = -fPIC +# uncomment when compiling with Intel 21.5 or older +FMTFLAGS = # -std=c++11 DEPFLAGS = -M LINK = mpicxx @@ -36,7 +38,7 @@ KOKKOS_ARCH = Volta70 LMP_INC = -DLAMMPS_GZIP # MPI library -# see discussion in Section 2.2 (step 5) of manual +# see discussion in Section 3.4 of the manual # MPI wrapper compiler/linker can provide this info # can point to dummy MPI library in src/STUBS as in Makefile.serial # use -D MPICH and OMPI settings in INC to avoid C++ lib conflicts @@ -118,6 +120,18 @@ $(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) %.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< +variable.o : ../variable.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +utils.o : ../utils.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_format.o : ../fmtlib_format.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_os.o : ../fmtlib_os.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + # Individual dependencies depend : fastdep.exe $(SRC) diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only b/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only index 0adb53eef0..e1f7005617 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only +++ b/src/MAKE/OPTIONS/Makefile.kokkos_mpi_only @@ -9,6 +9,8 @@ SHELL = /bin/sh CC = mpicxx CCFLAGS = -g -O3 -DNDEBUG SHFLAGS = -fPIC +# uncomment when compiling with Intel 21.5 or older +FMTFLAGS = # -std=c++11 DEPFLAGS = -M LINK = mpicxx @@ -114,6 +116,18 @@ $(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) %.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< +variable.o : ../variable.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +utils.o : ../utils.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_format.o : ../fmtlib_format.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_os.o : ../fmtlib_os.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + # Individual dependencies depend : fastdep.exe $(SRC) diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_omp b/src/MAKE/OPTIONS/Makefile.kokkos_omp index 82144652dd..5f91af7a1e 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_omp +++ b/src/MAKE/OPTIONS/Makefile.kokkos_omp @@ -9,6 +9,8 @@ SHELL = /bin/sh CC = mpicxx CCFLAGS = -g -O3 -DNDEBUG SHFLAGS = -fPIC +# uncomment when compiling with Intel 21.5 or older +FMTFLAGS = # -std=c++11 DEPFLAGS = -M LINK = mpicxx @@ -114,6 +116,18 @@ $(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) %.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< +variable.o : ../variable.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +utils.o : ../utils.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_format.o : ../fmtlib_format.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_os.o : ../fmtlib_os.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + # Individual dependencies depend : fastdep.exe $(SRC) diff --git a/src/MAKE/OPTIONS/Makefile.kokkos_phi b/src/MAKE/OPTIONS/Makefile.kokkos_phi index 9d5691251c..05b24f8721 100644 --- a/src/MAKE/OPTIONS/Makefile.kokkos_phi +++ b/src/MAKE/OPTIONS/Makefile.kokkos_phi @@ -9,6 +9,8 @@ SHELL = /bin/sh CC = mpicxx CCFLAGS = -g -O3 -DNDEBUG SHFLAGS = -fPIC +# uncomment when compiling with Intel 21.5 or older +FMTFLAGS = # -std=c++11 DEPFLAGS = -M LINK = mpicxx @@ -115,6 +117,18 @@ $(SHLIB): $(OBJ) $(EXTRA_LINK_DEPENDS) %.o:%.cpp $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $< +variable.o : ../variable.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +utils.o : ../utils.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_format.o : ../fmtlib_format.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + +fmtlib_os.o : ../fmtlib_os.cpp + $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) $(FMTFLAGS) -c $< + # Individual dependencies depend : fastdep.exe $(SRC) From 11305107d95be6c395a785c6e7b5946ed17d2441 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 19 Nov 2023 05:40:05 -0500 Subject: [PATCH 168/204] update release date to 21 November 2023 --- doc/lammps.1 | 4 ++-- doc/src/Commands_removed.rst | 4 ++-- doc/src/compute_composition_atom.rst | 2 +- doc/src/compute_property_grid.rst | 2 +- doc/src/compute_reduce.rst | 2 +- doc/src/compute_voronoi_atom.rst | 2 +- doc/src/dump.rst | 2 +- doc/src/dump_image.rst | 2 +- doc/src/fix_deposit.rst | 2 +- doc/src/fix_pimd.rst | 2 +- src/library.cpp | 8 ++++---- src/version.h | 2 +- 12 files changed, 17 insertions(+), 17 deletions(-) diff --git a/doc/lammps.1 b/doc/lammps.1 index 766522d4aa..100ea9b663 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,7 +1,7 @@ -.TH LAMMPS "1" "17 November 2023" "2023-11-17" +.TH LAMMPS "1" "21 November 2023" "2023-11-21" .SH NAME .B LAMMPS -\- Molecular Dynamics Simulator. Version 17 November 2023 +\- Molecular Dynamics Simulator. Version 21 November 2023 .SH SYNOPSIS .B lmp diff --git a/doc/src/Commands_removed.rst b/doc/src/Commands_removed.rst index d0e723aabe..8a00c63734 100644 --- a/doc/src/Commands_removed.rst +++ b/doc/src/Commands_removed.rst @@ -88,7 +88,7 @@ The same functionality is available through MPIIO package ------------- -.. deprecated:: 17Nov2023 +.. deprecated:: 21Nov2023 The MPIIO package has been removed from LAMMPS since it was unmaintained for many years and thus not updated to incorporate required changes that @@ -107,7 +107,7 @@ see :doc:`restart `, :doc:`read_restart `, MSCG package ------------ -.. deprecated:: 17Nov2023 +.. deprecated:: 21Nov2023 The MSCG package has been removed from LAMMPS since it was unmaintained for many years and instead superseded by the `OpenMSCG software diff --git a/doc/src/compute_composition_atom.rst b/doc/src/compute_composition_atom.rst index e65a3e9c95..e973eaa234 100644 --- a/doc/src/compute_composition_atom.rst +++ b/doc/src/compute_composition_atom.rst @@ -36,7 +36,7 @@ Examples Description """"""""""" -.. versionadded:: 17Nov2023 +.. versionadded:: 21Nov2023 Define a computation that calculates a local composition vector for each atom. For a central atom with :math:`M` neighbors within the neighbor cutoff sphere, diff --git a/doc/src/compute_property_grid.rst b/doc/src/compute_property_grid.rst index a0b9aba7dc..dfdce220c6 100644 --- a/doc/src/compute_property_grid.rst +++ b/doc/src/compute_property_grid.rst @@ -61,7 +61,7 @@ varying fastest, then Y, then Z slowest. For 2d grids (in 2d simulations), the grid IDs range from 1 to Nx*Ny, with X varying fastest and Y slowest. -.. versionadded:: 17Nov2023 +.. versionadded:: 21Nov2023 The *proc* attribute is the ID of the processor which owns the grid cell. Processor IDs range from 0 to Nprocs - 1, where Nprocs is the diff --git a/doc/src/compute_reduce.rst b/doc/src/compute_reduce.rst index ba60b52563..604b1c1571 100644 --- a/doc/src/compute_reduce.rst +++ b/doc/src/compute_reduce.rst @@ -201,7 +201,7 @@ information in this context, the *replace* keywords will extract the atom IDs for the two atoms in the bond of maximum stretch. These atom IDs and the bond stretch will be printed with thermodynamic output. -.. versionadded:: 17Nov2023 +.. versionadded:: 21Nov2023 The *inputs* keyword allows selection of whether all the inputs are per-atom or local quantities. As noted above, all the inputs must be diff --git a/doc/src/compute_voronoi_atom.rst b/doc/src/compute_voronoi_atom.rst index 5f00a2abab..3bada09518 100644 --- a/doc/src/compute_voronoi_atom.rst +++ b/doc/src/compute_voronoi_atom.rst @@ -190,7 +190,7 @@ Voro++ software in the src/VORONOI/README file. Output info """"""""""" -.. deprecated:: 17Nov2023 +.. deprecated:: 21Nov2023 The *peratom* keyword was removed as it is no longer required. diff --git a/doc/src/dump.rst b/doc/src/dump.rst index bdaefb769e..6d13b43200 100644 --- a/doc/src/dump.rst +++ b/doc/src/dump.rst @@ -613,7 +613,7 @@ when running on large numbers of processors. Note that using the "\*" and "%" characters together can produce a large number of small dump files! -.. deprecated:: 17Nov2023 +.. deprecated:: 21Nov2023 The MPIIO package and the the corresponding "/mpiio" dump styles, except for the unrelated "netcdf/mpiio" style were removed from LAMMPS. diff --git a/doc/src/dump_image.rst b/doc/src/dump_image.rst index 43f182b889..3102caaa97 100644 --- a/doc/src/dump_image.rst +++ b/doc/src/dump_image.rst @@ -599,7 +599,7 @@ image will appear. The *sfactor* value must be a value 0.0 <= *sfactor* <= 1.0, where *sfactor* = 1 is a highly reflective surface and *sfactor* = 0 is a rough non-shiny surface. -.. versionadded:: 17Nov2023 +.. versionadded:: 21Nov2023 The *fsaa* keyword can be used with the dump image command to improve the image quality by enabling full scene anti-aliasing. Internally the diff --git a/doc/src/fix_deposit.rst b/doc/src/fix_deposit.rst index ff5afc2241..5264999839 100644 --- a/doc/src/fix_deposit.rst +++ b/doc/src/fix_deposit.rst @@ -220,7 +220,7 @@ rotated configuration of the molecule. existing particle. LAMMPS will issue a warning if R is smaller than this value, based on the radii of existing and inserted particles. -.. versionadded:: 17Nov2023 +.. versionadded:: 21Nov2023 The *var* and *set* keywords can be used together to provide a criterion for accepting or rejecting the addition of an individual atom, based on its diff --git a/doc/src/fix_pimd.rst b/doc/src/fix_pimd.rst index 7468ffea13..a2e137da25 100644 --- a/doc/src/fix_pimd.rst +++ b/doc/src/fix_pimd.rst @@ -149,7 +149,7 @@ normal-mode PIMD. A value of *cmd* is for centroid molecular dynamics only the k > 0 modes are thermostatted, not the centroid degrees of freedom. -.. versionadded:: 17Nov2023 +.. versionadded:: 21Nov2023 Mode *pimd* added to fix pimd/langevin. diff --git a/src/library.cpp b/src/library.cpp index 7fc79333ad..363110e5f5 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -617,7 +617,7 @@ combined by removing the '&' and the following newline character. After this processing the string is handed to LAMMPS for parsing and executing. -.. versionadded:: 17Nov2023 +.. versionadded:: 21Nov2023 The command is now able to process long strings with triple quotes and loops using :doc:`jump SELF \ `. @@ -2484,7 +2484,7 @@ int lammps_set_variable(void *handle, char *name, char *str) * \verbatim embed:rst -.. versionadded:: 17Nov2023 +.. versionadded:: 21Nov2023 This function copies a string with human readable information about a defined variable: name, style, current value(s) into the provided @@ -5581,7 +5581,7 @@ int lammps_config_has_ffmpeg_support() { * \verbatim embed:rst -.. deprecated:: 17Nov2023 +.. deprecated:: 21Nov2023 LAMMPS has now exceptions always enabled, so this function will now always return 1 and can be removed from applications @@ -6658,7 +6658,7 @@ the failing MPI ranks to send messages. instance, but instead would check the global error buffer of the library interface. - .. versionchanged: 17Nov2023 + .. versionchanged: 21Nov2023 The *buffer* pointer may be ``NULL``. This will clear any error status without copying the error message. diff --git a/src/version.h b/src/version.h index a5844f0973..e2f596d1aa 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "17 Nov 2023" +#define LAMMPS_VERSION "21 Nov 2023" From 3c73882a681c2cdfca785235818824a28dba76c7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 19 Nov 2023 08:59:27 -0500 Subject: [PATCH 169/204] update Purge.list and avoid redundant checks --- cmake/Modules/LAMMPSUtils.cmake | 14 +++++++------- src/Purge.list | 2 ++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/cmake/Modules/LAMMPSUtils.cmake b/cmake/Modules/LAMMPSUtils.cmake index bb5ea07609..2ec9d1b706 100644 --- a/cmake/Modules/LAMMPSUtils.cmake +++ b/cmake/Modules/LAMMPSUtils.cmake @@ -83,17 +83,17 @@ function(check_for_autogen_files source_dir) file(GLOB SRC_AUTOGEN_FILES CONFIGURE_DEPENDS ${source_dir}/style_*.h) file(GLOB SRC_AUTOGEN_PACKAGES CONFIGURE_DEPENDS ${source_dir}/packages_*.h) list(APPEND SRC_AUTOGEN_FILES ${SRC_AUTOGEN_PACKAGES} ${source_dir}/lmpinstalledpkgs.h ${source_dir}/lmpgitversion.h) - list(APPEND SRC_AUTOGEN_FILES ${SRC_AUTOGEN_PACKAGES} ${source_dir}/mliap_model_python_couple.h ${source_dir}/mliap_model_python_couple.cpp) + list(APPEND SRC_AUTOGEN_FILES ${source_dir}/mliap_model_python_couple.h ${source_dir}/mliap_model_python_couple.cpp) foreach(_SRC ${SRC_AUTOGEN_FILES}) get_filename_component(FILENAME "${_SRC}" NAME) if(EXISTS ${source_dir}/${FILENAME}) message(FATAL_ERROR "\n########################################################################\n" - "Found header file(s) generated by the make-based build system\n" - "\n" - "Please run\n" - "make -C ${source_dir} purge\n" - "to remove\n" - "########################################################################") + "Found header file ${source_dir}/${FILENAME} generated by the make-based build system\n" + "\n" + "Please run\n" + "make -C ${source_dir} purge\n" + "to remove\n" + "########################################################################") endif() endforeach() endfunction() diff --git a/src/Purge.list b/src/Purge.list index 3052c3af1d..14708a111e 100644 --- a/src/Purge.list +++ b/src/Purge.list @@ -8,6 +8,7 @@ style_compute.h style_dihedral.h style_dump.h style_fix.h +style_gran_sub_mod.h style_improper.h style_integrate.h style_kspace.h @@ -32,6 +33,7 @@ packages_compute.h packages_dihedral.h packages_dump.h packages_fix.h +packages_gran_sub_mod.h packages_improper.h packages_integrate.h packages_kspace.h From bc692dce791ec90aa9c2cb25ca2e24585a8ddd42 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 19 Nov 2023 09:18:17 -0500 Subject: [PATCH 170/204] add missing entries --- src/.gitignore | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/.gitignore b/src/.gitignore index 60cfe7eea3..3ee771e139 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -46,6 +46,33 @@ /mdi_plugin.cpp /mdi_plugin.h +/amoeba_charge_transfer.cpp +/amoeba_convolution.cpp +/amoeba_convolution.h +/amoeba_dispersion.cpp +/amoeba_file.cpp +/amoeba_hal.cpp +/amoeba_induce.cpp +/amoeba_kspace.cpp +/amoeba_multipole.cpp +/amoeba_polar.cpp +/amoeba_repulsion.cpp +/amoeba_utils.cpp +/angle_amoeba.cpp +/angle_amoeba.h +/atom_vec_amoeba.cpp +/atom_vec_amoeba.h +/fix_amoeba_bitorsion.cpp +/fix_amoeba_bitorsion.h +/fix_amoeba_pitorsion.cpp +/fix_amoeba_pitorsion.h +/improper_amoeba.cpp +/improper_amoeba.h +/pair_amoeba.cpp +/pair_amoeba.h +/pair_hippo.cpp +/pair_hippo.h + /fix_brownian*.cpp /fix_brownian*.h /fix_propel_self.cpp From 6cd2055084823c897d81fbbc6147c3a4cf7e6c93 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 19 Nov 2023 09:18:40 -0500 Subject: [PATCH 171/204] delete obsolete dependencies --- src/INTEL/Install.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/INTEL/Install.sh b/src/INTEL/Install.sh index 2d6d82fae5..94d967b194 100755 --- a/src/INTEL/Install.sh +++ b/src/INTEL/Install.sh @@ -51,8 +51,6 @@ action npair_intel.cpp action intel_simd.h action intel_intrinsics.h pair_tersoff_intel.cpp action intel_intrinsics_airebo.h pair_airebo_intel.cpp -action electrode_accel_intel.h fix_electrode_conp.cpp -action electrode_accel_intel.cpp fix_electrode_conp.cpp if (test $mode = 1) then From ac90a4ac9c2c8b7d9fc5302a7af44d29ca58944c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 19 Nov 2023 09:19:03 -0500 Subject: [PATCH 172/204] reorder for cleaner dependency handling --- src/Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Makefile b/src/Makefile index 5f905ee145..196641d67d 100644 --- a/src/Makefile +++ b/src/Makefile @@ -49,6 +49,8 @@ endif # PACKEXT = subset that require an external (downloaded) library PACKAGE = \ + molecule \ + kspace \ adios \ amoeba \ asphere \ @@ -85,7 +87,6 @@ PACKAGE = \ interlayer \ kim \ kokkos \ - kspace \ latboltz \ lepton \ machdyn \ @@ -104,7 +105,6 @@ PACKAGE = \ ml-rann \ ml-snap \ mofff \ - molecule \ molfile \ netcdf \ openmp \ @@ -143,9 +143,11 @@ PACKAGE = \ # NOTE: the last four packages must remain at the end since # they depend on other packages to be installed first. -PACKBASIC = kspace manybody molecule rigid +PACKBASIC = molecule kspace manybody rigid PACKMOST = \ + kspace \ + molecule \ amoeba \ asphere \ bocs \ @@ -173,7 +175,6 @@ PACKMOST = \ fep \ granular \ interlayer \ - kspace \ manybody \ mc \ meam \ @@ -181,7 +182,6 @@ PACKMOST = \ misc \ ml-snap \ mofff \ - molecule \ openmp \ opt \ orient \ From fc28fc318beede342a2f013f6f673c35fba15920 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Tue, 21 Nov 2023 10:57:33 -0700 Subject: [PATCH 173/204] Update CODEOWNERS for cmake --- .github/CODEOWNERS | 6 +++--- cmake/CMakeLists.txt | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b6892aa4ee..1b4cae3aaa 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -153,12 +153,12 @@ tools/vim/* @hammondkd unittest/* @akohlmey # cmake -cmake/* @rbberger +cmake/* @akohlmey cmake/Modules/LAMMPSInterfacePlugin.cmake @akohlmey cmake/Modules/MPI4WIN.cmake @akohlmey cmake/Modules/OpenCLLoader.cmake @akohlmey -cmake/Modules/Packages/COLVARS.cmake @rbberger @giacomofiorin -cmake/Modules/Packages/KIM.cmake @rbberger @ellio167 +cmake/Modules/Packages/COLVARS.cmake @giacomofiorin +cmake/Modules/Packages/KIM.cmake @ellio167 cmake/presets/*.cmake @akohlmey # python diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 3b0b069556..28e02bbee7 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -2,7 +2,6 @@ ######################################## # CMake build system # This file is part of LAMMPS -# Created by Christoph Junghans and Richard Berger cmake_minimum_required(VERSION 3.16) ######################################## # set policy to silence warnings about ignoring _ROOT but use it From 3306b95589108fb0e73e8e423e34bb62bcea91d0 Mon Sep 17 00:00:00 2001 From: Stan Gerald Moore Date: Tue, 21 Nov 2023 15:02:12 -0700 Subject: [PATCH 174/204] Update Kokkos library in LAMMPS to v4.2 --- lib/kokkos/CHANGELOG.md | 93 +- lib/kokkos/CMakeLists.txt | 5 +- lib/kokkos/Makefile.kokkos | 70 +- lib/kokkos/Makefile.targets | 2 + lib/kokkos/algorithms/CMakeLists.txt | 2 +- .../algorithms/src/Kokkos_NestedSort.hpp | 184 +- lib/kokkos/algorithms/src/Kokkos_Random.hpp | 6 +- lib/kokkos/algorithms/src/Kokkos_Sort.hpp | 759 +------- .../src/sorting/Kokkos_BinOpsPublicAPI.hpp | 129 ++ .../src/sorting/Kokkos_BinSortPublicAPI.hpp | 410 ++++ .../sorting/Kokkos_NestedSortPublicAPI.hpp | 100 + .../src/sorting/Kokkos_SortPublicAPI.hpp | 194 ++ .../impl/Kokkos_CopyOpsForBinSortImpl.hpp | 61 + .../sorting/impl/Kokkos_NestedSortImpl.hpp | 115 ++ .../src/sorting/impl/Kokkos_SortImpl.hpp | 369 ++++ .../Kokkos_AdjacentDifference.hpp | 203 +- .../std_algorithms/Kokkos_AdjacentFind.hpp | 117 +- .../src/std_algorithms/Kokkos_AllOf.hpp | 64 +- .../src/std_algorithms/Kokkos_AnyOf.hpp | 64 +- .../src/std_algorithms/Kokkos_Copy.hpp | 65 +- .../std_algorithms/Kokkos_CopyBackward.hpp | 65 +- .../src/std_algorithms/Kokkos_CopyIf.hpp | 71 +- .../src/std_algorithms/Kokkos_CopyN.hpp | 68 +- .../src/std_algorithms/Kokkos_Count.hpp | 60 +- .../src/std_algorithms/Kokkos_CountIf.hpp | 64 +- .../src/std_algorithms/Kokkos_Equal.hpp | 289 ++- .../std_algorithms/Kokkos_ExclusiveScan.hpp | 243 ++- .../src/std_algorithms/Kokkos_Fill.hpp | 54 +- .../src/std_algorithms/Kokkos_FillN.hpp | 58 +- .../src/std_algorithms/Kokkos_Find.hpp | 60 +- .../src/std_algorithms/Kokkos_FindEnd.hpp | 144 +- .../src/std_algorithms/Kokkos_FindFirstOf.hpp | 155 +- .../src/std_algorithms/Kokkos_FindIf.hpp | 70 +- .../src/std_algorithms/Kokkos_FindIfNot.hpp | 63 +- .../src/std_algorithms/Kokkos_ForEach.hpp | 67 +- .../src/std_algorithms/Kokkos_ForEachN.hpp | 72 +- .../src/std_algorithms/Kokkos_Generate.hpp | 54 +- .../src/std_algorithms/Kokkos_GenerateN.hpp | 63 +- .../std_algorithms/Kokkos_InclusiveScan.hpp | 311 +++- .../std_algorithms/Kokkos_IsPartitioned.hpp | 61 +- .../src/std_algorithms/Kokkos_IsSorted.hpp | 116 +- .../std_algorithms/Kokkos_IsSortedUntil.hpp | 115 +- .../Kokkos_LexicographicalCompare.hpp | 133 +- .../src/std_algorithms/Kokkos_MaxElement.hpp | 105 +- .../src/std_algorithms/Kokkos_MinElement.hpp | 105 +- .../std_algorithms/Kokkos_MinMaxElement.hpp | 107 +- .../src/std_algorithms/Kokkos_Mismatch.hpp | 145 +- .../src/std_algorithms/Kokkos_Move.hpp | 64 +- .../std_algorithms/Kokkos_MoveBackward.hpp | 67 +- .../src/std_algorithms/Kokkos_NoneOf.hpp | 65 +- .../std_algorithms/Kokkos_PartitionCopy.hpp | 90 +- .../std_algorithms/Kokkos_PartitionPoint.hpp | 62 +- .../src/std_algorithms/Kokkos_Reduce.hpp | 203 +- .../src/std_algorithms/Kokkos_Remove.hpp | 64 +- .../src/std_algorithms/Kokkos_RemoveCopy.hpp | 82 +- .../std_algorithms/Kokkos_RemoveCopyIf.hpp | 71 +- .../src/std_algorithms/Kokkos_RemoveIf.hpp | 66 +- .../src/std_algorithms/Kokkos_Replace.hpp | 63 +- .../src/std_algorithms/Kokkos_ReplaceCopy.hpp | 83 +- .../std_algorithms/Kokkos_ReplaceCopyIf.hpp | 88 +- .../src/std_algorithms/Kokkos_ReplaceIf.hpp | 69 +- .../src/std_algorithms/Kokkos_Reverse.hpp | 53 +- .../src/std_algorithms/Kokkos_ReverseCopy.hpp | 67 +- .../src/std_algorithms/Kokkos_Rotate.hpp | 57 +- .../src/std_algorithms/Kokkos_RotateCopy.hpp | 75 +- .../src/std_algorithms/Kokkos_Search.hpp | 143 +- .../src/std_algorithms/Kokkos_SearchN.hpp | 131 +- .../src/std_algorithms/Kokkos_ShiftLeft.hpp | 54 +- .../src/std_algorithms/Kokkos_ShiftRight.hpp | 54 +- .../src/std_algorithms/Kokkos_SwapRanges.hpp | 66 +- .../src/std_algorithms/Kokkos_Transform.hpp | 208 ++- .../Kokkos_TransformExclusiveScan.hpp | 130 +- .../Kokkos_TransformInclusiveScan.hpp | 244 ++- .../std_algorithms/Kokkos_TransformReduce.hpp | 276 ++- .../src/std_algorithms/Kokkos_Unique.hpp | 125 +- .../src/std_algorithms/Kokkos_UniqueCopy.hpp | 163 +- .../impl/Kokkos_AdjacentDifference.hpp | 58 +- .../impl/Kokkos_AdjacentFind.hpp | 81 +- .../impl/Kokkos_AllOfAnyOfNoneOf.hpp | 55 +- .../impl/Kokkos_Constraints.hpp | 47 +- .../impl/Kokkos_CopyBackward.hpp | 49 +- .../std_algorithms/impl/Kokkos_CopyCopyN.hpp | 75 +- .../src/std_algorithms/impl/Kokkos_CopyIf.hpp | 73 +- .../impl/Kokkos_CountCountIf.hpp | 52 +- .../src/std_algorithms/impl/Kokkos_Equal.hpp | 116 +- .../impl/Kokkos_ExclusiveScan.hpp | 240 ++- .../std_algorithms/impl/Kokkos_FillFillN.hpp | 49 +- .../std_algorithms/impl/Kokkos_FindEnd.hpp | 110 +- .../impl/Kokkos_FindFirstOf.hpp | 80 +- .../impl/Kokkos_FindIfOrNot.hpp | 72 +- .../impl/Kokkos_ForEachForEachN.hpp | 64 +- .../impl/Kokkos_FunctorsForExclusiveScan.hpp | 220 +++ .../impl/Kokkos_GenerateGenerateN.hpp | 51 +- .../impl/Kokkos_InclusiveScan.hpp | 144 +- .../impl/Kokkos_IsPartitioned.hpp | 71 +- .../std_algorithms/impl/Kokkos_IsSorted.hpp | 53 +- .../impl/Kokkos_IsSortedUntil.hpp | 74 +- .../impl/Kokkos_LexicographicalCompare.hpp | 92 +- .../impl/Kokkos_MinMaxMinmaxElement.hpp | 83 +- .../std_algorithms/impl/Kokkos_Mismatch.hpp | 95 +- .../src/std_algorithms/impl/Kokkos_Move.hpp | 33 +- .../impl/Kokkos_MoveBackward.hpp | 42 +- .../impl/Kokkos_MustUseKokkosSingleInTeam.hpp | 47 + .../impl/Kokkos_PartitionCopy.hpp | 76 +- .../impl/Kokkos_PartitionPoint.hpp | 45 +- .../src/std_algorithms/impl/Kokkos_Reduce.hpp | 115 +- .../impl/Kokkos_RemoveAllVariants.hpp | 123 +- .../std_algorithms/impl/Kokkos_Replace.hpp | 28 +- .../impl/Kokkos_ReplaceCopy.hpp | 49 +- .../impl/Kokkos_ReplaceCopyIf.hpp | 65 +- .../std_algorithms/impl/Kokkos_ReplaceIf.hpp | 34 +- .../std_algorithms/impl/Kokkos_Reverse.hpp | 28 +- .../impl/Kokkos_ReverseCopy.hpp | 42 +- .../src/std_algorithms/impl/Kokkos_Rotate.hpp | 34 +- .../std_algorithms/impl/Kokkos_RotateCopy.hpp | 49 +- .../src/std_algorithms/impl/Kokkos_Search.hpp | 110 +- .../std_algorithms/impl/Kokkos_SearchN.hpp | 120 +- .../std_algorithms/impl/Kokkos_ShiftLeft.hpp | 40 +- .../std_algorithms/impl/Kokkos_ShiftRight.hpp | 61 +- .../std_algorithms/impl/Kokkos_SwapRanges.hpp | 39 +- .../std_algorithms/impl/Kokkos_Transform.hpp | 103 +- .../impl/Kokkos_TransformExclusiveScan.hpp | 122 +- .../impl/Kokkos_TransformInclusiveScan.hpp | 212 ++- .../impl/Kokkos_TransformReduce.hpp | 116 +- .../src/std_algorithms/impl/Kokkos_Unique.hpp | 89 +- .../std_algorithms/impl/Kokkos_UniqueCopy.hpp | 130 +- .../algorithms/unit_tests/CMakeLists.txt | 262 ++- lib/kokkos/algorithms/unit_tests/Makefile | 18 +- .../algorithms/unit_tests/TestBinSortA.hpp | 14 +- .../algorithms/unit_tests/TestBinSortB.hpp | 70 +- .../algorithms/unit_tests/TestRandom.hpp | 92 + .../unit_tests/TestRandomAccessIterator.cpp | 11 + .../unit_tests/TestSortCustomComp.hpp | 133 ++ .../unit_tests/TestStdAlgorithmsCommon.cpp | 14 + .../unit_tests/TestStdAlgorithmsCommon.hpp | 499 ++++- .../TestStdAlgorithmsExclusiveScan.cpp | 5 +- .../TestStdAlgorithmsHelperFunctors.hpp | 20 +- .../TestStdAlgorithmsPartitioningOps.cpp | 2 +- ...estStdAlgorithmsTeamAdjacentDifference.cpp | 220 +++ .../TestStdAlgorithmsTeamAdjacentFind.cpp | 256 +++ .../unit_tests/TestStdAlgorithmsTeamAllOf.cpp | 165 ++ .../unit_tests/TestStdAlgorithmsTeamAnyOf.cpp | 165 ++ .../unit_tests/TestStdAlgorithmsTeamCopy.cpp | 157 ++ .../TestStdAlgorithmsTeamCopyBackward.cpp | 168 ++ .../TestStdAlgorithmsTeamCopyIf.cpp | 176 ++ .../TestStdAlgorithmsTeamCopy_n.cpp | 176 ++ .../unit_tests/TestStdAlgorithmsTeamCount.cpp | 201 ++ .../TestStdAlgorithmsTeamCountIf.cpp | 162 ++ .../unit_tests/TestStdAlgorithmsTeamEqual.cpp | 278 +++ .../TestStdAlgorithmsTeamExclusiveScan.cpp | 253 +++ .../unit_tests/TestStdAlgorithmsTeamFill.cpp | 106 ++ .../TestStdAlgorithmsTeamFill_n.cpp | 176 ++ .../unit_tests/TestStdAlgorithmsTeamFind.cpp | 212 +++ .../TestStdAlgorithmsTeamFindEnd.cpp | 271 +++ .../TestStdAlgorithmsTeamFindFirstOf.cpp | 280 +++ .../TestStdAlgorithmsTeamFindIf.cpp | 241 +++ .../TestStdAlgorithmsTeamFindIfNot.cpp | 236 +++ .../TestStdAlgorithmsTeamForEach.cpp | 126 ++ .../TestStdAlgorithmsTeamForEachN.cpp | 144 ++ .../TestStdAlgorithmsTeamGenerate.cpp | 116 ++ .../TestStdAlgorithmsTeamGenerate_n.cpp | 179 ++ .../TestStdAlgorithmsTeamInclusiveScan.cpp | 277 +++ .../TestStdAlgorithmsTeamIsPartitioned.cpp | 255 +++ .../TestStdAlgorithmsTeamIsSorted.cpp | 209 +++ .../TestStdAlgorithmsTeamIsSortedUntil.cpp | 275 +++ ...tdAlgorithmsTeamLexicographicalCompare.cpp | 286 +++ .../TestStdAlgorithmsTeamMaxElement.cpp | 182 ++ .../TestStdAlgorithmsTeamMinElement.cpp | 181 ++ .../TestStdAlgorithmsTeamMinMaxElement.cpp | 200 ++ .../TestStdAlgorithmsTeamMismatch.cpp | 283 +++ .../unit_tests/TestStdAlgorithmsTeamMove.cpp | 161 ++ .../TestStdAlgorithmsTeamMoveBackward.cpp | 170 ++ .../TestStdAlgorithmsTeamNoneOf.cpp | 165 ++ .../TestStdAlgorithmsTeamPartitionCopy.cpp | 313 ++++ .../TestStdAlgorithmsTeamPartitionPoint.cpp | 260 +++ .../TestStdAlgorithmsTeamReduce.cpp | 272 +++ .../TestStdAlgorithmsTeamRemove.cpp | 182 ++ .../TestStdAlgorithmsTeamRemoveCopy.cpp | 222 +++ .../TestStdAlgorithmsTeamRemoveCopyIf.cpp | 178 ++ .../TestStdAlgorithmsTeamRemoveIf.cpp | 166 ++ .../TestStdAlgorithmsTeamReplace.cpp | 135 ++ .../TestStdAlgorithmsTeamReplaceCopy.cpp | 204 ++ .../TestStdAlgorithmsTeamReplaceCopyIf.cpp | 183 ++ .../TestStdAlgorithmsTeamReplaceIf.cpp | 138 ++ .../TestStdAlgorithmsTeamReverse.cpp | 105 ++ .../TestStdAlgorithmsTeamReverseCopy.cpp | 153 ++ .../TestStdAlgorithmsTeamRotate.cpp | 173 ++ .../TestStdAlgorithmsTeamRotateCopy.cpp | 188 ++ .../TestStdAlgorithmsTeamSearch.cpp | 279 +++ .../TestStdAlgorithmsTeamSearchN.cpp | 295 +++ .../TestStdAlgorithmsTeamShiftLeft.cpp | 189 ++ .../TestStdAlgorithmsTeamShiftRight.cpp | 187 ++ .../TestStdAlgorithmsTeamSwapRanges.cpp | 151 ++ ...TestStdAlgorithmsTeamTransformBinaryOp.cpp | 185 ++ ...tdAlgorithmsTeamTransformExclusiveScan.cpp | 228 +++ ...tdAlgorithmsTeamTransformInclusiveScan.cpp | 264 +++ .../TestStdAlgorithmsTeamTransformReduce.cpp | 323 ++++ .../TestStdAlgorithmsTeamTransformUnaryOp.cpp | 176 ++ .../TestStdAlgorithmsTeamUnique.cpp | 171 ++ .../TestStdAlgorithmsTeamUniqueCopy.cpp | 196 ++ ...estStdAlgorithmsTransformExclusiveScan.cpp | 2 +- ...estStdAlgorithmsTransformInclusiveScan.cpp | 14 +- lib/kokkos/appveyor.yml | 2 +- lib/kokkos/benchmarks/CMakeLists.txt | 1 + lib/kokkos/benchmarks/gups/CMakeLists.txt | 4 + lib/kokkos/benchmarks/gups/Makefile | 51 - lib/kokkos/benchmarks/gups/gups-kokkos.cpp | 175 -- lib/kokkos/benchmarks/gups/gups.cpp | 195 ++ lib/kokkos/bin/kokkos_launch_compiler | 4 +- lib/kokkos/bin/nvcc_wrapper | 2 +- lib/kokkos/cmake/KokkosConfigCommon.cmake.in | 1 + lib/kokkos/cmake/KokkosCore_config.h.in | 23 +- lib/kokkos/cmake/Modules/FindTPLROCM.cmake | 26 +- lib/kokkos/cmake/fake_tribits.cmake | 9 - lib/kokkos/cmake/kokkos_arch.cmake | 156 +- lib/kokkos/cmake/kokkos_compiler_id.cmake | 9 +- lib/kokkos/cmake/kokkos_enable_devices.cmake | 10 + lib/kokkos/cmake/kokkos_enable_options.cmake | 9 +- lib/kokkos/cmake/kokkos_test_cxx_std.cmake | 8 +- lib/kokkos/cmake/kokkos_tpls.cmake | 7 +- lib/kokkos/cmake/kokkos_tribits.cmake | 9 + .../containers/performance_tests/TestCuda.cpp | 4 - lib/kokkos/containers/src/Kokkos_Bitset.hpp | 54 +- lib/kokkos/containers/src/Kokkos_DualView.hpp | 9 + .../containers/src/Kokkos_DynRankView.hpp | 2 +- .../containers/src/Kokkos_UnorderedMap.hpp | 88 +- lib/kokkos/containers/src/Kokkos_Vector.hpp | 21 +- .../src/impl/Kokkos_Bitset_impl.hpp | 1 - .../src/impl/Kokkos_UnorderedMap_impl.hpp | 5 +- .../containers/unit_tests/CMakeLists.txt | 8 + lib/kokkos/containers/unit_tests/Makefile | 7 +- .../containers/unit_tests/TestBitset.hpp | 11 - .../containers/unit_tests/TestDualView.hpp | 50 + .../unit_tests/TestUnorderedMap.hpp | 99 +- lib/kokkos/core/perf_test/CMakeLists.txt | 7 +- .../core/perf_test/PerfTest_MallocFree.cpp | 100 + .../core/perf_test/PerfTest_ViewAllocate.cpp | 34 - lib/kokkos/core/perf_test/test_mempool.cpp | 1 + lib/kokkos/core/perf_test/test_taskdag.cpp | 2 + lib/kokkos/core/src/Cuda/Kokkos_Cuda.hpp | 8 +- lib/kokkos/core/src/Cuda/Kokkos_CudaSpace.cpp | 103 +- .../Cuda/Kokkos_Cuda_BlockSize_Deduction.hpp | 8 +- .../src/Cuda/Kokkos_Cuda_GraphNodeKernel.hpp | 8 - .../src/Cuda/Kokkos_Cuda_GraphNode_Impl.hpp | 1 - .../core/src/Cuda/Kokkos_Cuda_Graph_Impl.hpp | 43 +- .../core/src/Cuda/Kokkos_Cuda_Instance.cpp | 441 ++--- .../core/src/Cuda/Kokkos_Cuda_Instance.hpp | 351 +++- .../src/Cuda/Kokkos_Cuda_KernelLaunch.hpp | 81 +- .../src/Cuda/Kokkos_Cuda_Parallel_Team.hpp | 7 +- .../core/src/Cuda/Kokkos_Cuda_ReduceScan.hpp | 2 +- lib/kokkos/core/src/Cuda/Kokkos_Cuda_Task.hpp | 32 +- lib/kokkos/core/src/Cuda/Kokkos_Cuda_Team.hpp | 67 +- .../core/src/Cuda/Kokkos_Cuda_ZeroMemset.hpp | 14 +- lib/kokkos/core/src/HIP/Kokkos_HIP.cpp | 10 +- lib/kokkos/core/src/HIP/Kokkos_HIP.hpp | 7 +- .../src/HIP/Kokkos_HIP_GraphNodeKernel.hpp | 161 ++ .../src/HIP/Kokkos_HIP_GraphNode_Impl.hpp | 54 + .../core/src/HIP/Kokkos_HIP_Graph_Impl.hpp | 187 ++ .../core/src/HIP/Kokkos_HIP_Instance.cpp | 106 +- .../core/src/HIP/Kokkos_HIP_Instance.hpp | 44 +- .../core/src/HIP/Kokkos_HIP_KernelLaunch.hpp | 157 +- .../src/HIP/Kokkos_HIP_Parallel_MDRange.hpp | 8 +- .../src/HIP/Kokkos_HIP_Parallel_Range.hpp | 102 +- .../core/src/HIP/Kokkos_HIP_Parallel_Team.hpp | 52 +- .../core/src/HIP/Kokkos_HIP_ReduceScan.hpp | 48 +- .../src/HIP/Kokkos_HIP_Shuffle_Reduce.hpp | 9 +- lib/kokkos/core/src/HIP/Kokkos_HIP_Space.cpp | 23 +- lib/kokkos/core/src/HIP/Kokkos_HIP_Space.hpp | 3 + lib/kokkos/core/src/HIP/Kokkos_HIP_Team.hpp | 69 +- .../core/src/HIP/Kokkos_HIP_Vectorization.hpp | 2 +- lib/kokkos/core/src/HPX/Kokkos_HPX.cpp | 27 +- lib/kokkos/core/src/HPX/Kokkos_HPX.hpp | 57 +- lib/kokkos/core/src/HPX/Kokkos_HPX_Task.hpp | 9 +- .../src/HPX/Kokkos_HPX_WorkGraphPolicy.hpp | 3 +- lib/kokkos/core/src/Kokkos_Abort.hpp | 105 ++ lib/kokkos/core/src/Kokkos_Array.hpp | 20 +- lib/kokkos/core/src/Kokkos_Assert.hpp | 70 + .../core/src/Kokkos_BitManipulation.hpp | 37 +- lib/kokkos/core/src/Kokkos_Complex.hpp | 5 + lib/kokkos/core/src/Kokkos_Concepts.hpp | 4 +- lib/kokkos/core/src/Kokkos_CopyViews.hpp | 57 +- lib/kokkos/core/src/Kokkos_Core_fwd.hpp | 1 + lib/kokkos/core/src/Kokkos_Graph.hpp | 6 + lib/kokkos/core/src/Kokkos_Half.hpp | 1 + lib/kokkos/core/src/Kokkos_HostSpace.hpp | 11 +- lib/kokkos/core/src/Kokkos_Macros.hpp | 2 +- .../core/src/Kokkos_MathematicalFunctions.hpp | 10 +- .../Kokkos_MathematicalSpecialFunctions.hpp | 81 +- lib/kokkos/core/src/Kokkos_MemoryPool.hpp | 2 - lib/kokkos/core/src/Kokkos_Pair.hpp | 6 +- .../core/src/Kokkos_Parallel_Reduce.hpp | 1 - lib/kokkos/core/src/Kokkos_Printf.hpp | 54 + lib/kokkos/core/src/Kokkos_ScratchSpace.hpp | 2 +- .../core/src/OpenACC/Kokkos_OpenACC.hpp | 3 + .../OpenACC/Kokkos_OpenACC_FunctorAdapter.hpp | 2 +- .../Kokkos_OpenACC_ParallelFor_Team.hpp | 3 +- .../Kokkos_OpenACC_ParallelScan_Range.hpp | 98 +- .../src/OpenACC/Kokkos_OpenACC_Traits.hpp | 3 + lib/kokkos/core/src/OpenMP/Kokkos_OpenMP.cpp | 2 + lib/kokkos/core/src/OpenMP/Kokkos_OpenMP.hpp | 1 - .../src/OpenMP/Kokkos_OpenMP_Instance.cpp | 2 - .../src/OpenMP/Kokkos_OpenMP_Instance.hpp | 14 +- .../src/OpenMP/Kokkos_OpenMP_Parallel.hpp | 1267 ------------- .../src/OpenMP/Kokkos_OpenMP_Parallel_For.hpp | 433 +++++ .../OpenMP/Kokkos_OpenMP_Parallel_Reduce.hpp | 567 ++++++ .../OpenMP/Kokkos_OpenMP_Parallel_Scan.hpp | 312 ++++ .../core/src/OpenMP/Kokkos_OpenMP_Task.hpp | 5 +- .../OpenMPTarget/Kokkos_OpenMPTarget_Exec.cpp | 9 +- .../Kokkos_OpenMPTarget_Instance.cpp | 10 +- ...Kokkos_OpenMPTarget_ParallelScan_Range.hpp | 3 +- .../Kokkos_OpenMPTarget_ParallelScan_Team.hpp | 65 +- .../Kokkos_OpenMPTarget_Parallel_Common.hpp | 117 +- lib/kokkos/core/src/SYCL/Kokkos_SYCL.cpp | 14 + lib/kokkos/core/src/SYCL/Kokkos_SYCL.hpp | 6 +- .../core/src/SYCL/Kokkos_SYCL_Abort.hpp | 4 +- .../src/SYCL/Kokkos_SYCL_Half_Conversion.hpp | 128 +- .../src/SYCL/Kokkos_SYCL_Half_Impl_Type.hpp | 37 +- .../core/src/SYCL/Kokkos_SYCL_Instance.cpp | 107 +- ...pp => Kokkos_SYCL_ParallelFor_MDRange.hpp} | 133 +- .../SYCL/Kokkos_SYCL_ParallelFor_Range.hpp | 148 ++ .../src/SYCL/Kokkos_SYCL_ParallelFor_Team.hpp | 188 ++ .../Kokkos_SYCL_ParallelReduce_MDRange.hpp | 343 ++++ .../SYCL/Kokkos_SYCL_ParallelReduce_Range.hpp | 362 ++++ .../SYCL/Kokkos_SYCL_ParallelReduce_Team.hpp | 458 +++++ ...hpp => Kokkos_SYCL_ParallelScan_Range.hpp} | 34 +- .../src/SYCL/Kokkos_SYCL_Parallel_Reduce.hpp | 788 -------- .../src/SYCL/Kokkos_SYCL_Parallel_Team.hpp | 914 --------- .../core/src/SYCL/Kokkos_SYCL_Space.cpp | 2 + lib/kokkos/core/src/SYCL/Kokkos_SYCL_Team.hpp | 75 +- .../core/src/SYCL/Kokkos_SYCL_TeamPolicy.hpp | 357 ++++ .../SYCL/Kokkos_SYCL_WorkgroupReduction.hpp | 177 ++ .../core/src/SYCL/Kokkos_SYCL_ZeroMemset.hpp | 2 + lib/kokkos/core/src/Serial/Kokkos_Serial.cpp | 6 + lib/kokkos/core/src/Serial/Kokkos_Serial.hpp | 38 + .../core/src/Threads/Kokkos_Threads.hpp | 16 - .../core/src/Threads/Kokkos_ThreadsExec.hpp | 5 +- .../core/src/Threads/Kokkos_ThreadsTeam.hpp | 63 +- .../Kokkos_Threads_ParallelFor_MDRange.hpp | 115 ++ .../Kokkos_Threads_ParallelFor_Range.hpp | 122 ++ .../Kokkos_Threads_ParallelFor_Team.hpp | 118 ++ ...Kokkos_Threads_ParallelReduce_MDRange.hpp} | 91 +- .../Kokkos_Threads_ParallelReduce_Range.hpp | 171 ++ ...=> Kokkos_Threads_ParallelReduce_Team.hpp} | 94 +- .../Kokkos_Threads_ParallelScan_Range.hpp | 198 ++ .../Threads/Kokkos_Threads_Parallel_Range.hpp | 435 ----- .../Kokkos_Threads_WorkGraphPolicy.hpp | 2 +- .../src/View/MDSpan/Kokkos_MDSpan_Extents.hpp | 10 +- .../src/View/MDSpan/Kokkos_MDSpan_Header.hpp | 24 +- .../core/src/decl/Kokkos_Declare_OPENMP.hpp | 3 + .../core/src/decl/Kokkos_Declare_SYCL.hpp | 11 +- .../core/src/decl/Kokkos_Declare_THREADS.hpp | 10 + lib/kokkos/core/src/impl/Kokkos_Abort.cpp | 44 + .../src/impl/Kokkos_CheckedIntegerOps.hpp | 66 + lib/kokkos/core/src/impl/Kokkos_Core.cpp | 25 +- .../src/impl/Kokkos_Default_Graph_Impl.hpp | 2 - lib/kokkos/core/src/impl/Kokkos_Error.cpp | 24 +- lib/kokkos/core/src/impl/Kokkos_Error.hpp | 148 +- .../core/src/impl/Kokkos_FunctorAnalysis.hpp | 4 - .../impl/Kokkos_Half_FloatingPointWrapper.hpp | 161 +- .../Kokkos_Half_MathematicalFunctions.hpp | 259 +++ .../src/impl/Kokkos_Half_NumericTraits.hpp | 60 +- lib/kokkos/core/src/impl/Kokkos_HostSpace.cpp | 98 +- .../src/impl/Kokkos_HostSpace_ZeroMemset.hpp | 2 - .../src/impl/Kokkos_HostSpace_deepcopy.cpp | 2 +- .../core/src/impl/Kokkos_HostThreadTeam.hpp | 73 +- lib/kokkos/core/src/impl/Kokkos_Profiling.cpp | 16 +- .../core/src/impl/Kokkos_SharedAlloc.cpp | 50 +- .../core/src/impl/Kokkos_SharedAlloc.hpp | 4 +- .../src/impl/Kokkos_SharedAlloc_timpl.hpp | 6 +- .../core/src/impl/Kokkos_TaskQueueCommon.hpp | 8 +- .../src/impl/Kokkos_TaskQueueMultiple.hpp | 4 +- lib/kokkos/core/src/impl/Kokkos_Utilities.hpp | 27 + .../core/src/impl/Kokkos_ViewMapping.hpp | 4 +- .../core/src/setup/Kokkos_Setup_SYCL.hpp | 5 + lib/kokkos/core/unit_test/CMakeLists.txt | 151 +- lib/kokkos/core/unit_test/TestAbort.hpp | 10 +- lib/kokkos/core/unit_test/TestArrayOps.hpp | 393 ++++ .../core/unit_test/TestAtomicOperations.hpp | 1421 ++++---------- .../TestAtomicOperations_complexdouble.hpp | 26 +- .../TestAtomicOperations_complexfloat.hpp | 26 +- .../unit_test/TestAtomicOperations_double.hpp | 19 +- .../unit_test/TestAtomicOperations_float.hpp | 19 +- .../unit_test/TestAtomicOperations_int.hpp | 29 +- .../TestAtomicOperations_longint.hpp | 29 +- .../TestAtomicOperations_longlongint.hpp | 29 +- .../TestAtomicOperations_unsignedint.hpp | 33 +- .../TestAtomicOperations_unsignedlongint.hpp | 33 +- ...stAtomicOperations_unsignedlonglongint.hpp | 36 + lib/kokkos/core/unit_test/TestAtomics.hpp | 14 +- .../core/unit_test/TestBitManipulation.cpp | 4 +- .../unit_test/TestBitManipulationBuiltins.hpp | 19 +- .../core/unit_test/TestCheckedIntegerOps.hpp | 51 + .../unit_test/TestExecSpacePartitioning.hpp | 69 +- .../core/unit_test/TestHalfOperators.hpp | 107 +- .../TestHostSharedPtrAccessOnDevice.hpp | 6 - .../TestJoinBackwardCompatibility.hpp | 29 +- .../core/unit_test/TestLocalDeepCopy.hpp | 29 +- .../TestMDRangePolicyConstructors.hpp | 2 - lib/kokkos/core/unit_test/TestMDSpan.hpp | 4 +- .../unit_test/TestMathematicalConstants.hpp | 3 +- .../unit_test/TestMathematicalFunctions.hpp | 806 +++++++- .../TestMathematicalSpecialFunctions.hpp | 67 +- lib/kokkos/core/unit_test/TestMinMaxClamp.hpp | 5 - .../core/unit_test/TestNumericTraits.hpp | 122 +- lib/kokkos/core/unit_test/TestOther.hpp | 5 - lib/kokkos/core/unit_test/TestPrintf.hpp | 37 + .../core/unit_test/TestQuadPrecisionMath.hpp | 2 +- lib/kokkos/core/unit_test/TestRange.hpp | 10 +- .../core/unit_test/TestRangePolicyRequire.hpp | 13 +- lib/kokkos/core/unit_test/TestReducers.hpp | 7 +- lib/kokkos/core/unit_test/TestReducers_b.hpp | 4 + lib/kokkos/core/unit_test/TestSharedSpace.cpp | 8 +- .../core/unit_test/TestTaskScheduler.hpp | 2 +- lib/kokkos/core/unit_test/TestTeam.hpp | 25 +- lib/kokkos/core/unit_test/TestTeamScan.hpp | 129 ++ lib/kokkos/core/unit_test/TestTeamScratch.hpp | 18 + lib/kokkos/core/unit_test/TestTeamVector.hpp | 182 +- .../core/unit_test/TestTeamVectorRange.hpp | 22 +- lib/kokkos/core/unit_test/TestUtilities.hpp | 90 + lib/kokkos/core/unit_test/TestViewAPI.hpp | 4 +- .../core/unit_test/TestViewCtorDimMatch.hpp | 4 +- .../TestViewLayoutStrideAssignment.hpp | 2 - .../TestViewMemoryAccessViolation.hpp | 8 +- .../core/unit_test/cuda/TestCuda_Spaces.cpp | 10 - .../headers_self_contained/CMakeLists.txt | 4 + .../hpx/TestHPX_IndependentInstances.cpp | 2 +- ...X_IndependentInstancesDelayedExecution.cpp | 2 +- ...estHPX_IndependentInstancesInstanceIds.cpp | 2 +- .../unit_test/sycl/TestSYCL_InterOp_Init.cpp | 3 +- .../sycl/TestSYCL_InterOp_Init_Context.cpp | 6 +- .../sycl/TestSYCL_InterOp_Streams.cpp | 3 +- .../sycl/TestSYCL_TeamScratchStreams.cpp | 6 +- .../view/TestExtentsDatatypeConversion.cpp | 53 +- .../build_cmake_in_tree/cmake_example.cpp | 2 + .../build_cmake_installed/cmake_example.cpp | 2 + .../foo.cpp | 2 +- .../cmake_example.cpp | 2 + .../03_vectorization/vectorization.cpp | 7 +- lib/kokkos/generate_makefile.bash | 11 +- lib/kokkos/master_history.txt | 1 + lib/kokkos/simd/src/Kokkos_SIMD.hpp | 61 +- lib/kokkos/simd/src/Kokkos_SIMD_AVX2.hpp | 1216 +++++++++--- lib/kokkos/simd/src/Kokkos_SIMD_AVX512.hpp | 1647 ++++++++++++----- lib/kokkos/simd/src/Kokkos_SIMD_Common.hpp | 167 +- .../simd/src/Kokkos_SIMD_Common_Math.hpp | 260 +++ lib/kokkos/simd/src/Kokkos_SIMD_NEON.hpp | 999 ++++++++-- lib/kokkos/simd/src/Kokkos_SIMD_Scalar.hpp | 229 ++- lib/kokkos/simd/unit_tests/CMakeLists.txt | 2 + lib/kokkos/simd/unit_tests/TestSIMD.cpp | 548 +----- .../unit_tests/include/SIMDTesting_Ops.hpp | 212 +++ .../include/SIMDTesting_Utilities.hpp | 167 ++ .../unit_tests/include/TestSIMD_Condition.hpp | 105 ++ .../include/TestSIMD_Conversions.hpp | 131 ++ .../include/TestSIMD_GeneratorCtors.hpp | 140 ++ .../unit_tests/include/TestSIMD_MaskOps.hpp | 116 ++ .../unit_tests/include/TestSIMD_MathOps.hpp | 289 +++ .../unit_tests/include/TestSIMD_ShiftOps.hpp | 280 +++ .../include/TestSIMD_WhereExpressions.hpp | 195 ++ ...da_cc7_asm_atomic_fetch_op.inc_forceglobal | 153 -- .../cuda_cc7_asm_atomic_fetch_op.inc_generic | 151 -- .../cuda_cc7_asm_atomic_fetch_op.inc_isglobal | 57 +- ...cuda_cc7_asm_atomic_fetch_op.inc_predicate | 54 +- .../cuda_cc7_asm_atomic_op.inc_forceglobal | 64 - .../cuda/cuda_cc7_asm_atomic_op.inc_generic | 64 - .../cuda/cuda_cc7_asm_atomic_op.inc_isglobal | 57 +- .../cuda/cuda_cc7_asm_atomic_op.inc_predicate | 57 +- .../__p0009_bits/compressed_pair.hpp | 54 +- .../experimental/__p0009_bits/config.hpp | 68 +- .../__p0009_bits/default_accessor.hpp | 50 +- .../__p0009_bits/dynamic_extent.hpp | 72 +- .../experimental/__p0009_bits/extents.hpp | 953 +++++----- .../__p0009_bits/full_extent_t.hpp | 48 +- .../experimental/__p0009_bits/layout_left.hpp | 96 +- .../__p0009_bits/layout_right.hpp | 97 +- .../__p0009_bits/layout_stride.hpp | 228 +-- .../experimental/__p0009_bits/macros.hpp | 76 +- .../__p0009_bits/maybe_static_value.hpp | 152 -- .../experimental/__p0009_bits/mdspan.hpp | 197 +- .../__p0009_bits/no_unique_address.hpp | 54 +- .../standard_layout_static_array.hpp | 685 ------- .../__p0009_bits/static_array.hpp | 286 --- .../experimental/__p0009_bits/submdspan.hpp | 586 ------ .../__p0009_bits/trait_backports.hpp | 62 +- .../experimental/__p0009_bits/type_list.hpp | 52 +- .../experimental/__p1684_bits/mdarray.hpp | 221 ++- .../__p2630_bits/strided_slice.hpp | 49 + .../experimental/__p2630_bits/submdspan.hpp | 42 + .../__p2630_bits/submdspan_extents.hpp | 323 ++++ .../__p2630_bits/submdspan_mapping.hpp | 299 +++ .../tpls/mdspan/include/experimental/mdarray | 48 - .../tpls/mdspan/include/experimental/mdspan | 56 - .../tpls/mdspan/include/mdspan/mdarray.hpp | 31 + .../tpls/mdspan/include/mdspan/mdspan.hpp | 41 + 493 files changed, 41548 insertions(+), 15629 deletions(-) create mode 100644 lib/kokkos/algorithms/src/sorting/Kokkos_BinOpsPublicAPI.hpp create mode 100644 lib/kokkos/algorithms/src/sorting/Kokkos_BinSortPublicAPI.hpp create mode 100644 lib/kokkos/algorithms/src/sorting/Kokkos_NestedSortPublicAPI.hpp create mode 100644 lib/kokkos/algorithms/src/sorting/Kokkos_SortPublicAPI.hpp create mode 100644 lib/kokkos/algorithms/src/sorting/impl/Kokkos_CopyOpsForBinSortImpl.hpp create mode 100644 lib/kokkos/algorithms/src/sorting/impl/Kokkos_NestedSortImpl.hpp create mode 100644 lib/kokkos/algorithms/src/sorting/impl/Kokkos_SortImpl.hpp create mode 100644 lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FunctorsForExclusiveScan.hpp create mode 100644 lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_MustUseKokkosSingleInTeam.hpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestSortCustomComp.hpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamAdjacentDifference.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamAdjacentFind.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamAllOf.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamAnyOf.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamCopy.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamCopyBackward.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamCopyIf.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamCopy_n.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamCount.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamCountIf.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamEqual.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamExclusiveScan.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamFill.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamFill_n.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamFind.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamFindEnd.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamFindFirstOf.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamFindIf.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamFindIfNot.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamForEach.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamForEachN.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamGenerate.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamGenerate_n.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamInclusiveScan.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamIsPartitioned.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamIsSorted.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamIsSortedUntil.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamLexicographicalCompare.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamMaxElement.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamMinElement.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamMinMaxElement.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamMismatch.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamMove.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamMoveBackward.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamNoneOf.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamPartitionCopy.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamPartitionPoint.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamReduce.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamRemove.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamRemoveCopy.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamRemoveCopyIf.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamRemoveIf.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamReplace.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamReplaceCopy.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamReplaceCopyIf.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamReplaceIf.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamReverse.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamReverseCopy.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamRotate.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamRotateCopy.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamSearch.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamSearchN.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamShiftLeft.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamShiftRight.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamSwapRanges.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamTransformBinaryOp.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamTransformExclusiveScan.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamTransformInclusiveScan.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamTransformReduce.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamTransformUnaryOp.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamUnique.cpp create mode 100644 lib/kokkos/algorithms/unit_tests/TestStdAlgorithmsTeamUniqueCopy.cpp create mode 100644 lib/kokkos/benchmarks/CMakeLists.txt create mode 100644 lib/kokkos/benchmarks/gups/CMakeLists.txt delete mode 100644 lib/kokkos/benchmarks/gups/Makefile delete mode 100644 lib/kokkos/benchmarks/gups/gups-kokkos.cpp create mode 100644 lib/kokkos/benchmarks/gups/gups.cpp create mode 100644 lib/kokkos/core/perf_test/PerfTest_MallocFree.cpp create mode 100644 lib/kokkos/core/src/HIP/Kokkos_HIP_GraphNodeKernel.hpp create mode 100644 lib/kokkos/core/src/HIP/Kokkos_HIP_GraphNode_Impl.hpp create mode 100644 lib/kokkos/core/src/HIP/Kokkos_HIP_Graph_Impl.hpp create mode 100644 lib/kokkos/core/src/Kokkos_Abort.hpp create mode 100644 lib/kokkos/core/src/Kokkos_Assert.hpp create mode 100644 lib/kokkos/core/src/Kokkos_Printf.hpp delete mode 100644 lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel.hpp create mode 100644 lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel_For.hpp create mode 100644 lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel_Reduce.hpp create mode 100644 lib/kokkos/core/src/OpenMP/Kokkos_OpenMP_Parallel_Scan.hpp rename lib/kokkos/core/src/SYCL/{Kokkos_SYCL_Parallel_Range.hpp => Kokkos_SYCL_ParallelFor_MDRange.hpp} (61%) create mode 100644 lib/kokkos/core/src/SYCL/Kokkos_SYCL_ParallelFor_Range.hpp create mode 100644 lib/kokkos/core/src/SYCL/Kokkos_SYCL_ParallelFor_Team.hpp create mode 100644 lib/kokkos/core/src/SYCL/Kokkos_SYCL_ParallelReduce_MDRange.hpp create mode 100644 lib/kokkos/core/src/SYCL/Kokkos_SYCL_ParallelReduce_Range.hpp create mode 100644 lib/kokkos/core/src/SYCL/Kokkos_SYCL_ParallelReduce_Team.hpp rename lib/kokkos/core/src/SYCL/{Kokkos_SYCL_Parallel_Scan.hpp => Kokkos_SYCL_ParallelScan_Range.hpp} (95%) delete mode 100644 lib/kokkos/core/src/SYCL/Kokkos_SYCL_Parallel_Reduce.hpp delete mode 100644 lib/kokkos/core/src/SYCL/Kokkos_SYCL_Parallel_Team.hpp create mode 100644 lib/kokkos/core/src/SYCL/Kokkos_SYCL_TeamPolicy.hpp create mode 100644 lib/kokkos/core/src/SYCL/Kokkos_SYCL_WorkgroupReduction.hpp create mode 100644 lib/kokkos/core/src/Threads/Kokkos_Threads_ParallelFor_MDRange.hpp create mode 100644 lib/kokkos/core/src/Threads/Kokkos_Threads_ParallelFor_Range.hpp create mode 100644 lib/kokkos/core/src/Threads/Kokkos_Threads_ParallelFor_Team.hpp rename lib/kokkos/core/src/Threads/{Kokkos_Threads_Parallel_MDRange.hpp => Kokkos_Threads_ParallelReduce_MDRange.hpp} (65%) create mode 100644 lib/kokkos/core/src/Threads/Kokkos_Threads_ParallelReduce_Range.hpp rename lib/kokkos/core/src/Threads/{Kokkos_Threads_Parallel_Team.hpp => Kokkos_Threads_ParallelReduce_Team.hpp} (59%) create mode 100644 lib/kokkos/core/src/Threads/Kokkos_Threads_ParallelScan_Range.hpp delete mode 100644 lib/kokkos/core/src/Threads/Kokkos_Threads_Parallel_Range.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_Abort.cpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_CheckedIntegerOps.hpp create mode 100644 lib/kokkos/core/src/impl/Kokkos_Half_MathematicalFunctions.hpp create mode 100644 lib/kokkos/core/unit_test/TestArrayOps.hpp create mode 100644 lib/kokkos/core/unit_test/TestAtomicOperations_unsignedlonglongint.hpp create mode 100644 lib/kokkos/core/unit_test/TestCheckedIntegerOps.hpp create mode 100644 lib/kokkos/core/unit_test/TestPrintf.hpp create mode 100644 lib/kokkos/simd/src/Kokkos_SIMD_Common_Math.hpp create mode 100644 lib/kokkos/simd/unit_tests/include/SIMDTesting_Ops.hpp create mode 100644 lib/kokkos/simd/unit_tests/include/SIMDTesting_Utilities.hpp create mode 100644 lib/kokkos/simd/unit_tests/include/TestSIMD_Condition.hpp create mode 100644 lib/kokkos/simd/unit_tests/include/TestSIMD_Conversions.hpp create mode 100644 lib/kokkos/simd/unit_tests/include/TestSIMD_GeneratorCtors.hpp create mode 100644 lib/kokkos/simd/unit_tests/include/TestSIMD_MaskOps.hpp create mode 100644 lib/kokkos/simd/unit_tests/include/TestSIMD_MathOps.hpp create mode 100644 lib/kokkos/simd/unit_tests/include/TestSIMD_ShiftOps.hpp create mode 100644 lib/kokkos/simd/unit_tests/include/TestSIMD_WhereExpressions.hpp delete mode 100644 lib/kokkos/tpls/desul/include/desul/atomics/cuda/cuda_cc7_asm_atomic_fetch_op.inc_forceglobal delete mode 100644 lib/kokkos/tpls/desul/include/desul/atomics/cuda/cuda_cc7_asm_atomic_fetch_op.inc_generic delete mode 100644 lib/kokkos/tpls/desul/include/desul/atomics/cuda/cuda_cc7_asm_atomic_op.inc_forceglobal delete mode 100644 lib/kokkos/tpls/desul/include/desul/atomics/cuda/cuda_cc7_asm_atomic_op.inc_generic delete mode 100644 lib/kokkos/tpls/mdspan/include/experimental/__p0009_bits/maybe_static_value.hpp delete mode 100644 lib/kokkos/tpls/mdspan/include/experimental/__p0009_bits/standard_layout_static_array.hpp delete mode 100644 lib/kokkos/tpls/mdspan/include/experimental/__p0009_bits/static_array.hpp delete mode 100644 lib/kokkos/tpls/mdspan/include/experimental/__p0009_bits/submdspan.hpp create mode 100644 lib/kokkos/tpls/mdspan/include/experimental/__p2630_bits/strided_slice.hpp create mode 100644 lib/kokkos/tpls/mdspan/include/experimental/__p2630_bits/submdspan.hpp create mode 100644 lib/kokkos/tpls/mdspan/include/experimental/__p2630_bits/submdspan_extents.hpp create mode 100644 lib/kokkos/tpls/mdspan/include/experimental/__p2630_bits/submdspan_mapping.hpp delete mode 100644 lib/kokkos/tpls/mdspan/include/experimental/mdarray delete mode 100644 lib/kokkos/tpls/mdspan/include/experimental/mdspan create mode 100644 lib/kokkos/tpls/mdspan/include/mdspan/mdarray.hpp create mode 100644 lib/kokkos/tpls/mdspan/include/mdspan/mdspan.hpp diff --git a/lib/kokkos/CHANGELOG.md b/lib/kokkos/CHANGELOG.md index 4c145c44b3..c6115f4b3d 100644 --- a/lib/kokkos/CHANGELOG.md +++ b/lib/kokkos/CHANGELOG.md @@ -1,6 +1,97 @@ # CHANGELOG -## [4.1.00](https://github.com/kokkos/kokkos/tree/4.0.01) (2023-06-16) +## [4.2.00](https://github.com/kokkos/kokkos/tree/4.2.00) (2023-11-06) +[Full Changelog](https://github.com/kokkos/kokkos/compare/4.1.00...4.2.00) + +### Features: +- SIMD: significant improvements to SIMD support and alignment with C++26 SIMD + - add `Kokkos::abs` overload for SIMD types [\#6069](https://github.com/kokkos/kokkos/pull/6069) + - add generator constructors [\#6347](https://github.com/kokkos/kokkos/pull/6347) + - convert binary operators to hidden friends [\#6320](https://github.com/kokkos/kokkos/pull/6320) + - add shift operators [\#6109](https://github.com/kokkos/kokkos/pull/6109) + - add `float` support [\#6177](https://github.com/kokkos/kokkos/pull/6177) + - add remaining `gather_from` and `scatter_to` overloads [\#6220](https://github.com/kokkos/kokkos/pull/6220) + - define simd math function overloads in the Kokkos namespace [\#6465](https://github.com/kokkos/kokkos/pull/6465), [\#6487](https://github.com/kokkos/kokkos/pull/6487) + - `Kokkos_ENABLE_NATIVE=ON` autodetects SIMD types supported [\#6188](https://github.com/kokkos/kokkos/pull/6188) + - fix AVX2 SIMD support for ZEN2 AMD CPU [\#6238](https://github.com/kokkos/kokkos/pull/6238) +- `Kokkos::printf` [\#6083](https://github.com/kokkos/kokkos/pull/6083) +- `Kokkos::sort`: support custom comparator [\#6253](https://github.com/kokkos/kokkos/pull/6253) +- `half_t` and `bhalf_t` numeric traits [\#5778](https://github.com/kokkos/kokkos/pull/5778) +- `half_t` and `bhalf_t` mixed comparisons [\#6407](https://github.com/kokkos/kokkos/pull/6407) +- `half_t` and `bhalf_t` mathematical functions [\#6124](https://github.com/kokkos/kokkos/pull/6124) +- `TeamThreadRange` `parallel_scan` with return value [\#6090](https://github.com/kokkos/kokkos/pull/6090), [\#6301](https://github.com/kokkos/kokkos/pull/6301), [\#6302](https://github.com/kokkos/kokkos/pull/6302), [\#6303](https://github.com/kokkos/kokkos/pull/6303), [\#6307](https://github.com/kokkos/kokkos/pull/6307) +- `ThreadVectorRange` `parallel_scan` with return value [\#6235](https://github.com/kokkos/kokkos/pull/6235), [\#6242](https://github.com/kokkos/kokkos/pull/6242), [\#6308](https://github.com/kokkos/kokkos/pull/6308), [\#6305](https://github.com/kokkos/kokkos/pull/6305), [\#6292](https://github.com/kokkos/kokkos/pull/6292) +- Add team-level std algorithms [\#6200](https://github.com/kokkos/kokkos/pull/6200), [\#6205](https://github.com/kokkos/kokkos/pull/6205), [\#6207](https://github.com/kokkos/kokkos/pull/6207), [\#6208](https://github.com/kokkos/kokkos/pull/6208), [\#6209](https://github.com/kokkos/kokkos/pull/6209), [\#6210](https://github.com/kokkos/kokkos/pull/6210), [\#6211](https://github.com/kokkos/kokkos/pull/6211), [\#6212](https://github.com/kokkos/kokkos/pull/6212), [\#6213](https://github.com/kokkos/kokkos/pull/6213), [\#6256](https://github.com/kokkos/kokkos/pull/6256), [\#6258](https://github.com/kokkos/kokkos/pull/6258), [\#6350](https://github.com/kokkos/kokkos/pull/6350), [\#6351](https://github.com/kokkos/kokkos/pull/6351) +- Serial: Allow for distinct execution space instances [\#6441](https://github.com/kokkos/kokkos/pull/6441) + +### Backend and Architecture Enhancements: + +#### CUDA: +- Fixed potential data race in Cuda `parallel_reduce` [\#6236](https://github.com/kokkos/kokkos/pull/6236) +- Use `cudaMallocAsync` by default [\#6402](https://github.com/kokkos/kokkos/pull/6402) +- Bugfix for using Kokkos from a thread of execution [\#6299](https://github.com/kokkos/kokkos/pull/6299) + +#### HIP: +- New naming convention for AMD GPU: VEGA906, VEGA908, VEGA90A, NAVI1030 to AMD_GFX906, AMD_GFX908, AMD_GFX90A, AMD_GFX1030 [\#6266](https://github.com/kokkos/kokkos/pull/6266) +- Add initial support for gfx942: [\#6358](https://github.com/kokkos/kokkos/pull/6358) +- Improve reduction performance [\#6229](https://github.com/kokkos/kokkos/pull/6229) +- Deprecate `HIP(hipStream_t,bool)` constructor [\#6401](https://github.com/kokkos/kokkos/pull/6401) +- Add support for Graph [\#6370](https://github.com/kokkos/kokkos/pull/6370) +- Improve reduction performance when using Teams [\#6284](https://github.com/kokkos/kokkos/pull/6284) +- Fix concurrency calculation [\#6479](https://github.com/kokkos/kokkos/pull/6479) +- Fix potential data race in HIP `parallel_reduce` [\#6429](https://github.com/kokkos/kokkos/pull/6429) + +#### SYCL: +- Enforce external `sycl::queues` to be in-order [\#6246](https://github.com/kokkos/kokkos/pull/6246) +- Improve reduction performance: [\#6272](https://github.com/kokkos/kokkos/pull/6272) [\#6271](https://github.com/kokkos/kokkos/pull/6271) [\#6270](https://github.com/kokkos/kokkos/pull/6270) [\#6264](https://github.com/kokkos/kokkos/pull/6264) +- Allow using the SYCL execution space on AMD GPUs [\#6321](https://github.com/kokkos/kokkos/pull/6321) +- Allow sorting via native oneDPL to support Views with stride=1 [\#6322](https://github.com/kokkos/kokkos/pull/6322) +- Make in-order queues the default via macro [\#6189](https://github.com/kokkos/kokkos/pull/6189) + +#### OpenACC: +- Support Clacc compiler [\#6250](https://github.com/kokkos/kokkos/pull/6250) + +### General Enhancements +- Add missing `is_*_view` traits and `is_*_view_v` helper variable templates for `DynRankView`, `DynamicView`, `OffsetView`, `ScatterView` containers [\#6195](https://github.com/kokkos/kokkos/pull/6195) +- Make `nvcc_wrapper` and `compiler_launcher` scripts more portable by switching to a `#!/usr/bin/env` shebang [\#6357](https://github.com/kokkos/kokkos/pull/6357) +- Add an improved `Kokkos::malloc` / `Kokkos::free` performance test [\#6377](https://github.com/kokkos/kokkos/pull/6377) +- Ensure `Views` with `size==0` can be used with `deep_copy` [\#6273](https://github.com/kokkos/kokkos/pull/6273) +- `Kokkos::abort` is moved to header `Kokkos_Abort.hpp` [\#6445](https://github.com/kokkos/kokkos/pull/6445) +- `KOKKOS_ASSERT`, `KOKKOS_EXPECTS`, `KOKKOS_ENSURES` are moved to header `Kokkos_Assert.hpp` [\#6445](https://github.com/kokkos/kokkos/pull/6445) +- Add a permuted-index mode to the gups benchmark [\#6378](https://github.com/kokkos/kokkos/pull/6378) +- Check for overflow during backend initialization [\#6159](https://github.com/kokkos/kokkos/pull/6159) +- Make constraints on `Kokkos::sort` more visible [\#6234](https://github.com/kokkos/kokkos/pull/6234) and cleanup API [\#6239](https://github.com/kokkos/kokkos/pull/6239) +- Add converting assignment to `DualView`: [\#6474](https://github.com/kokkos/kokkos/pull/6474) + + +### Build System Changes + +- Export `Kokkos_CXX_COMPILER_VERSION` [\#6282](https://github.com/kokkos/kokkos/pull/6282) +- Disable default oneDPL support in Trilinos [\#6342](https://github.com/kokkos/kokkos/pull/6342) + +### Incompatibilities (i.e. breaking changes) + - Ensure that `Kokkos::complex` only gets instantiated for cv-unqualified floating-point types [\#6251](https://github.com/kokkos/kokkos/pull/6251) + - Removed (deprecated-3) support for volatile join operators in reductions [\#6385](https://github.com/kokkos/kokkos/pull/6385) + - Enforce `ViewCtorArgs` restrictions for `create_mirror_view` [\#6304](https://github.com/kokkos/kokkos/pull/6304) + - SIMD types for ARM NEON are not autodetected anymore but need `Kokkos_ARCH_ARM_NEON` or `Kokkos_ARCH_NATIVE=ON` [\#6394](https://github.com/kokkos/kokkos/pull/6394) + - Remove `#include ` from headers where possible [\#6482](https://github.com/kokkos/kokkos/pull/6482) + +### Deprecations +- Deprecated `Kokkos::vector` [\#6252](https://github.com/kokkos/kokkos/pull/6252) +- All host allocation mechanisms except for `STD_MALLOC` have been deprecated [\#6341](https://github.com/kokkos/kokkos/pull/6341) + +### Bug Fixes + - Missing memory fence in `RandomPool::free_state` functions [\#6290](https://github.com/kokkos/kokkos/pull/6290) + - Fix for corner case in `Kokkos::Experimental::is_partitioned` algorithm [\#6257](https://github.com/kokkos/kokkos/pull/6257) + - Fix initialization of scratch lock variables in the `Cuda` backend [\#6433](https://github.com/kokkos/kokkos/pull/6433) + - Fixes for `Kokkos::Array` [\#6372](https://github.com/kokkos/kokkos/pull/6372) + - Fixed symlink configure issue for Windows [\#6241](https://github.com/kokkos/kokkos/pull/6241) + - OpenMPTarget init-join fix [\#6444](https://github.com/kokkos/kokkos/pull/6444) + - Fix atomic operations bug for Min and Max [\#6435](https://github.com/kokkos/kokkos/pull/6435) + - Fix implementation for `cyl_bessel_i0` [\#6484](https://github.com/kokkos/kokkos/pull/6484) + - Fix various NVCC warnings in `BinSort`, `Array`, and bit manipulation function templates [\#6483](https://github.com/kokkos/kokkos/pull/6483) + +## [4.1.00](https://github.com/kokkos/kokkos/tree/4.1.00) (2023-06-16) [Full Changelog](https://github.com/kokkos/kokkos/compare/4.0.01...4.1.00) ### Features: diff --git a/lib/kokkos/CMakeLists.txt b/lib/kokkos/CMakeLists.txt index 895cee6a08..f6bd81058e 100644 --- a/lib/kokkos/CMakeLists.txt +++ b/lib/kokkos/CMakeLists.txt @@ -150,8 +150,8 @@ ENDIF() set(Kokkos_VERSION_MAJOR 4) -set(Kokkos_VERSION_MINOR 1) -set(Kokkos_VERSION_PATCH 00) +set(Kokkos_VERSION_MINOR 2) +set(Kokkos_VERSION_PATCH 0) set(Kokkos_VERSION "${Kokkos_VERSION_MAJOR}.${Kokkos_VERSION_MINOR}.${Kokkos_VERSION_PATCH}") message(STATUS "Kokkos version: ${Kokkos_VERSION}") math(EXPR KOKKOS_VERSION "${Kokkos_VERSION_MAJOR} * 10000 + ${Kokkos_VERSION_MINOR} * 100 + ${Kokkos_VERSION_PATCH}") @@ -314,7 +314,6 @@ KOKKOS_PROCESS_SUBPACKAGES() # E) If Kokkos itself is enabled, process the Kokkos package # -KOKKOS_EXCLUDE_AUTOTOOLS_FILES() KOKKOS_PACKAGE_POSTPROCESS() KOKKOS_CONFIGURE_CORE() diff --git a/lib/kokkos/Makefile.kokkos b/lib/kokkos/Makefile.kokkos index 46998091fe..c970f72755 100644 --- a/lib/kokkos/Makefile.kokkos +++ b/lib/kokkos/Makefile.kokkos @@ -11,8 +11,8 @@ CXXFLAGS += $(SHFLAGS) endif KOKKOS_VERSION_MAJOR = 4 -KOKKOS_VERSION_MINOR = 1 -KOKKOS_VERSION_PATCH = 00 +KOKKOS_VERSION_MINOR = 2 +KOKKOS_VERSION_PATCH = 0 KOKKOS_VERSION = $(shell echo $(KOKKOS_VERSION_MAJOR)*10000+$(KOKKOS_VERSION_MINOR)*100+$(KOKKOS_VERSION_PATCH) | bc) # Options: Cuda,HIP,SYCL,OpenMPTarget,OpenMP,Threads,Serial @@ -23,7 +23,7 @@ KOKKOS_DEVICES ?= "OpenMP" # NVIDIA: Kepler,Kepler30,Kepler32,Kepler35,Kepler37,Maxwell,Maxwell50,Maxwell52,Maxwell53,Pascal60,Pascal61,Volta70,Volta72,Turing75,Ampere80,Ampere86,Ada89,Hopper90 # ARM: ARMv80,ARMv81,ARMv8-ThunderX,ARMv8-TX2,A64FX # IBM: BGQ,Power7,Power8,Power9 -# AMD-GPUS: Vega906,Vega908,Vega90A,Navi1030 +# AMD-GPUS: GFX906,GFX908,GFX90A,GFX942,GFX1030,GFX1100 # AMD-CPUS: AMDAVX,Zen,Zen2,Zen3 # Intel-GPUs: Gen9,Gen11,Gen12LP,DG1,XeHP,PVC KOKKOS_ARCH ?= "" @@ -40,7 +40,7 @@ KOKKOS_TRIBITS ?= "no" KOKKOS_STANDALONE_CMAKE ?= "no" # Default settings specific options. -# Options: force_uvm,use_ldg,rdc,enable_lambda,enable_constexpr +# Options: force_uvm,use_ldg,rdc,enable_lambda,enable_constexpr,disable_malloc_async KOKKOS_CUDA_OPTIONS ?= "enable_lambda" # Options: rdc @@ -92,6 +92,7 @@ KOKKOS_INTERNAL_CUDA_USE_UVM := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS), KOKKOS_INTERNAL_CUDA_USE_RELOC := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),rdc) KOKKOS_INTERNAL_CUDA_USE_LAMBDA := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),enable_lambda) KOKKOS_INTERNAL_CUDA_USE_CONSTEXPR := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),enable_constexpr) +KOKKOS_INTERNAL_CUDA_DISABLE_MALLOC_ASYNC := $(call kokkos_has_string,$(KOKKOS_CUDA_OPTIONS),disable_malloc_async) KOKKOS_INTERNAL_HPX_ENABLE_ASYNC_DISPATCH := $(call kokkos_has_string,$(KOKKOS_HPX_OPTIONS),enable_async_dispatch) # deprecated KOKKOS_INTERNAL_ENABLE_DESUL_ATOMICS := $(call kokkos_has_string,$(KOKKOS_OPTIONS),enable_desul_atomics) @@ -412,10 +413,11 @@ ifeq ($(KOKKOS_INTERNAL_USE_ARCH_ZEN3), 0) KOKKOS_INTERNAL_USE_ARCH_ZEN := $(call kokkos_has_string,$(KOKKOS_ARCH),Zen) endif endif -KOKKOS_INTERNAL_USE_ARCH_VEGA906 := $(call kokkos_has_string,$(KOKKOS_ARCH),Vega906) -KOKKOS_INTERNAL_USE_ARCH_VEGA908 := $(call kokkos_has_string,$(KOKKOS_ARCH),Vega908) -KOKKOS_INTERNAL_USE_ARCH_VEGA90A := $(call kokkos_has_string,$(KOKKOS_ARCH),Vega90A) -KOKKOS_INTERNAL_USE_ARCH_NAVI1030 := $(call kokkos_has_string,$(KOKKOS_ARCH),Navi1030) +KOKKOS_INTERNAL_USE_ARCH_AMD_GFX906 := $(or $(call kokkos_has_string,$(KOKKOS_ARCH),VEGA906),$(call kokkos_has_string,$(KOKKOS_ARCH),AMD_GFX906)) +KOKKOS_INTERNAL_USE_ARCH_AMD_GFX908 := $(or $(call kokkos_has_string,$(KOKKOS_ARCH),VEGA908),$(call kokkos_has_string,$(KOKKOS_ARCH),AMD_GFX908)) +KOKKOS_INTERNAL_USE_ARCH_AMD_GFX90A := $(or $(call kokkos_has_string,$(KOKKOS_ARCH),VEGA90A),$(call kokkos_has_string,$(KOKKOS_ARCH),AMD_GFX90A)) +KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1030 := $(or $(call kokkos_has_string,$(KOKKOS_ARCH),NAVI1030),$(call kokkos_has_string,$(KOKKOS_ARCH),AMD_GFX1030)) +KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1100 := $(or $(call kokkos_has_string,$(KOKKOS_ARCH),NAVI1100),$(call kokkos_has_string,$(KOKKOS_ARCH),AMD_GFX1100)) # Any AVX? KOKKOS_INTERNAL_USE_ARCH_SSE42 := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_WSM)) @@ -698,6 +700,12 @@ ifeq ($(KOKKOS_INTERNAL_USE_CUDA), 1) ifeq ($(KOKKOS_INTERNAL_COMPILER_CLANG), 1) tmp := $(call kokkos_append_header,"$H""define KOKKOS_IMPL_CUDA_CLANG_WORKAROUND") endif + + ifeq ($(KOKKOS_INTERNAL_CUDA_DISABLE_MALLOC_ASYNC), 0) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ENABLE_IMPL_CUDA_MALLOC_ASYNC") + else + tmp := $(call kokkos_append_header,"/* $H""undef KOKKOS_ENABLE_IMPL_CUDA_MALLOC_ASYNC */") + endif endif ifeq ($(KOKKOS_INTERNAL_USE_HPX), 1) @@ -710,6 +718,7 @@ endif ifeq ($(KOKKOS_INTERNAL_USE_ARCH_ARMV80), 1) tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_ARMV80") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_ARM_NEON") ifeq ($(KOKKOS_INTERNAL_COMPILER_CRAY), 1) KOKKOS_CXXFLAGS += @@ -722,6 +731,7 @@ endif ifeq ($(KOKKOS_INTERNAL_USE_ARCH_ARMV81), 1) tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_ARMV81") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_ARM_NEON") ifeq ($(KOKKOS_INTERNAL_COMPILER_CRAY), 1) KOKKOS_CXXFLAGS += @@ -734,6 +744,7 @@ endif ifeq ($(KOKKOS_INTERNAL_USE_ARCH_A64FX), 1) tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_A64FX") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_ARM_NEON") KOKKOS_CXXFLAGS += -march=armv8.2-a+sve KOKKOS_LDFLAGS += -march=armv8.2-a+sve @@ -749,7 +760,7 @@ endif ifeq ($(KOKKOS_INTERNAL_USE_ARCH_ZEN), 1) tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_ZEN") - tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_AVX2") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AVX2") ifeq ($(KOKKOS_INTERNAL_COMPILER_INTEL), 1) KOKKOS_CXXFLAGS += -mavx2 @@ -762,7 +773,7 @@ endif ifeq ($(KOKKOS_INTERNAL_USE_ARCH_ZEN2), 1) tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_ZEN2") - tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_AVX2") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AVX2") ifeq ($(KOKKOS_INTERNAL_COMPILER_INTEL), 1) KOKKOS_CXXFLAGS += -mavx2 @@ -775,7 +786,7 @@ endif ifeq ($(KOKKOS_INTERNAL_USE_ARCH_ZEN3), 1) tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_ZEN3") - tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_AVX2") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AVX2") ifeq ($(KOKKOS_INTERNAL_COMPILER_INTEL), 1) KOKKOS_CXXFLAGS += -mavx2 @@ -789,6 +800,7 @@ endif ifeq ($(KOKKOS_INTERNAL_USE_ARCH_ARMV8_THUNDERX), 1) tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_ARMV80") tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_ARMV8_THUNDERX") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_ARM_NEON") ifeq ($(KOKKOS_INTERNAL_COMPILER_CRAY), 1) KOKKOS_CXXFLAGS += @@ -802,6 +814,7 @@ endif ifeq ($(KOKKOS_INTERNAL_USE_ARCH_ARMV8_THUNDERX2), 1) tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_ARMV81") tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_ARMV8_THUNDERX2") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_ARM_NEON") ifeq ($(KOKKOS_INTERNAL_COMPILER_CRAY), 1) KOKKOS_CXXFLAGS += @@ -1085,29 +1098,34 @@ endif # Figure out the architecture flag for ROCm. -ifeq ($(KOKKOS_INTERNAL_USE_ARCH_VEGA906), 1) - tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VEGA906") - tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VEGA") +ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX906), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX906") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU") KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx906 endif -ifeq ($(KOKKOS_INTERNAL_USE_ARCH_VEGA908), 1) - tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VEGA908") - tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VEGA") +ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX908), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX908") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU") KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx908 endif -ifeq ($(KOKKOS_INTERNAL_USE_ARCH_VEGA90A), 1) - tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VEGA90A") - tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_VEGA") +ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX90A), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX90A") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU") KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx90a endif -ifeq ($(KOKKOS_INTERNAL_USE_ARCH_NAVI1030), 1) - tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_NAVI1030") - tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_NAVI") +ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX942), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX942") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU") + KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx942 +endif +ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1030), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX1030") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU") KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx1030 endif -ifeq ($(KOKKOS_INTERNAL_USE_ARCH_NAVI1100), 1) - tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_NAVI1100") - tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_NAVI") +ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1100), 1) + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX1100") + tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU") KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx1100 endif diff --git a/lib/kokkos/Makefile.targets b/lib/kokkos/Makefile.targets index 4e08a46c69..ec8770dd7d 100644 --- a/lib/kokkos/Makefile.targets +++ b/lib/kokkos/Makefile.targets @@ -36,6 +36,8 @@ Kokkos_HostSpace_deepcopy.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/ $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/impl/Kokkos_HostSpace_deepcopy.cpp Kokkos_NumericTraits.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/Kokkos_NumericTraits.cpp $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/impl/Kokkos_NumericTraits.cpp +Kokkos_Abort.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/impl/Kokkos_Abort.cpp + $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) -c $(KOKKOS_PATH)/core/src/impl/Kokkos_Abort.cpp ifeq ($(KOKKOS_INTERNAL_USE_SERIAL), 1) Kokkos_Serial.o: $(KOKKOS_CPP_DEPENDS) $(KOKKOS_PATH)/core/src/Serial/Kokkos_Serial.cpp diff --git a/lib/kokkos/algorithms/CMakeLists.txt b/lib/kokkos/algorithms/CMakeLists.txt index ab557ab66a..368984647e 100644 --- a/lib/kokkos/algorithms/CMakeLists.txt +++ b/lib/kokkos/algorithms/CMakeLists.txt @@ -2,6 +2,6 @@ IF (NOT Kokkos_INSTALL_TESTING) ADD_SUBDIRECTORY(src) ENDIF() # FIXME_OPENACC: temporarily disabled due to unimplemented features -IF(NOT ((KOKKOS_ENABLE_OPENMPTARGET OR KOKKOS_ENABLE_OPENACC) AND KOKKOS_CXX_COMPILER_ID STREQUAL NVHPC)) +IF(NOT ((KOKKOS_ENABLE_OPENMPTARGET AND KOKKOS_CXX_COMPILER_ID STREQUAL NVHPC) OR KOKKOS_ENABLE_OPENACC)) KOKKOS_ADD_TEST_DIRECTORIES(unit_tests) ENDIF() diff --git a/lib/kokkos/algorithms/src/Kokkos_NestedSort.hpp b/lib/kokkos/algorithms/src/Kokkos_NestedSort.hpp index 4c8be792d8..18e0674efe 100644 --- a/lib/kokkos/algorithms/src/Kokkos_NestedSort.hpp +++ b/lib/kokkos/algorithms/src/Kokkos_NestedSort.hpp @@ -14,175 +14,17 @@ // //@HEADER -#ifndef KOKKOS_NESTEDSORT_HPP_ -#define KOKKOS_NESTEDSORT_HPP_ - -#include -#include -#include - -namespace Kokkos { -namespace Experimental { -namespace Impl { - -// true for TeamVectorRange, false for ThreadVectorRange -template -struct NestedRange {}; - -// Specialization for team-level -template <> -struct NestedRange { - template - KOKKOS_FUNCTION static auto create(const TeamMember& t, SizeType len) { - return Kokkos::TeamVectorRange(t, len); - } - template - KOKKOS_FUNCTION static void barrier(const TeamMember& t) { - t.team_barrier(); - } -}; - -// Specialization for thread-level -template <> -struct NestedRange { - template - KOKKOS_FUNCTION static auto create(const TeamMember& t, SizeType len) { - return Kokkos::ThreadVectorRange(t, len); - } - // Barrier is no-op, as vector lanes of a thread are implicitly synchronized - // after parallel region - template - KOKKOS_FUNCTION static void barrier(const TeamMember&) {} -}; - -// When just doing sort (not sort_by_key), use nullptr_t for ValueViewType. -// This only takes the NestedRange instance for template arg deduction. -template -KOKKOS_INLINE_FUNCTION void sort_nested_impl( - const TeamMember& t, const KeyViewType& keyView, - [[maybe_unused]] const ValueViewType& valueView, const Comparator& comp, - const NestedRange) { - using SizeType = typename KeyViewType::size_type; - using KeyType = typename KeyViewType::non_const_value_type; - using Range = NestedRange; - SizeType n = keyView.extent(0); - SizeType npot = 1; - SizeType levels = 0; - // FIXME: ceiling power-of-two is a common thing to need - make it a utility - while (npot < n) { - levels++; - npot <<= 1; - } - for (SizeType i = 0; i < levels; i++) { - for (SizeType j = 0; j <= i; j++) { - // n/2 pairs of items are compared in parallel - Kokkos::parallel_for(Range::create(t, npot / 2), [=](const SizeType k) { - // How big are the brown/pink boxes? - // (Terminology comes from Wikipedia diagram) - // https://commons.wikimedia.org/wiki/File:BitonicSort.svg#/media/File:BitonicSort.svg - SizeType boxSize = SizeType(2) << (i - j); - // Which box contains this thread? - SizeType boxID = k >> (i - j); // k * 2 / boxSize; - SizeType boxStart = boxID << (1 + i - j); // boxID * boxSize - SizeType boxOffset = k - (boxStart >> 1); // k - boxID * boxSize / 2; - SizeType elem1 = boxStart + boxOffset; - // In first phase (j == 0, brown box): within a box, compare with the - // opposite value in the box. - // In later phases (j > 0, pink box): within a box, compare with fixed - // distance (boxSize / 2) apart. - SizeType elem2 = (j == 0) ? (boxStart + boxSize - 1 - boxOffset) - : (elem1 + boxSize / 2); - if (elem2 < n) { - KeyType key1 = keyView(elem1); - KeyType key2 = keyView(elem2); - if (comp(key2, key1)) { - keyView(elem1) = key2; - keyView(elem2) = key1; - if constexpr (!std::is_same_v) { - Kokkos::Experimental::swap(valueView(elem1), valueView(elem2)); - } - } - } - }); - Range::barrier(t); - } - } -} - -} // namespace Impl - -template -KOKKOS_INLINE_FUNCTION void sort_team(const TeamMember& t, - const ViewType& view) { - Impl::sort_nested_impl(t, view, nullptr, - Experimental::Impl::StdAlgoLessThanBinaryPredicate< - typename ViewType::non_const_value_type>(), - Impl::NestedRange()); -} - -template -KOKKOS_INLINE_FUNCTION void sort_team(const TeamMember& t, const ViewType& view, - const Comparator& comp) { - Impl::sort_nested_impl(t, view, nullptr, comp, Impl::NestedRange()); -} - -template -KOKKOS_INLINE_FUNCTION void sort_by_key_team(const TeamMember& t, - const KeyViewType& keyView, - const ValueViewType& valueView) { - Impl::sort_nested_impl(t, keyView, valueView, - Experimental::Impl::StdAlgoLessThanBinaryPredicate< - typename KeyViewType::non_const_value_type>(), - Impl::NestedRange()); -} - -template -KOKKOS_INLINE_FUNCTION void sort_by_key_team(const TeamMember& t, - const KeyViewType& keyView, - const ValueViewType& valueView, - const Comparator& comp) { - Impl::sort_nested_impl(t, keyView, valueView, comp, - Impl::NestedRange()); -} - -template -KOKKOS_INLINE_FUNCTION void sort_thread(const TeamMember& t, - const ViewType& view) { - Impl::sort_nested_impl(t, view, nullptr, - Experimental::Impl::StdAlgoLessThanBinaryPredicate< - typename ViewType::non_const_value_type>(), - Impl::NestedRange()); -} - -template -KOKKOS_INLINE_FUNCTION void sort_thread(const TeamMember& t, - const ViewType& view, - const Comparator& comp) { - Impl::sort_nested_impl(t, view, nullptr, comp, Impl::NestedRange()); -} - -template -KOKKOS_INLINE_FUNCTION void sort_by_key_thread(const TeamMember& t, - const KeyViewType& keyView, - const ValueViewType& valueView) { - Impl::sort_nested_impl(t, keyView, valueView, - Experimental::Impl::StdAlgoLessThanBinaryPredicate< - typename KeyViewType::non_const_value_type>(), - Impl::NestedRange()); -} - -template -KOKKOS_INLINE_FUNCTION void sort_by_key_thread(const TeamMember& t, - const KeyViewType& keyView, - const ValueViewType& valueView, - const Comparator& comp) { - Impl::sort_nested_impl(t, keyView, valueView, comp, - Impl::NestedRange()); -} - -} // namespace Experimental -} // namespace Kokkos +#ifndef KOKKOS_NESTED_SORT_HPP_ +#define KOKKOS_NESTED_SORT_HPP_ +#ifndef KOKKOS_IMPL_PUBLIC_INCLUDE +#define KOKKOS_IMPL_PUBLIC_INCLUDE +#define KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_NESTED_SORT +#endif + +#include "sorting/Kokkos_NestedSortPublicAPI.hpp" + +#ifdef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_NESTED_SORT +#undef KOKKOS_IMPL_PUBLIC_INCLUDE +#undef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_NESTED_SORT +#endif #endif diff --git a/lib/kokkos/algorithms/src/Kokkos_Random.hpp b/lib/kokkos/algorithms/src/Kokkos_Random.hpp index abb028d28e..2d7d236d2f 100644 --- a/lib/kokkos/algorithms/src/Kokkos_Random.hpp +++ b/lib/kokkos/algorithms/src/Kokkos_Random.hpp @@ -956,6 +956,8 @@ class Random_XorShift64_Pool { KOKKOS_INLINE_FUNCTION void free_state(const Random_XorShift64& state) const { state_(state.state_idx_, 0) = state.state_; + // Release the lock only after the state has been updated in memory + Kokkos::memory_fence(); locks_(state.state_idx_, 0) = 0; } }; @@ -1208,7 +1210,9 @@ class Random_XorShift1024_Pool { KOKKOS_INLINE_FUNCTION void free_state(const Random_XorShift1024& state) const { for (int i = 0; i < 16; i++) state_(state.state_idx_, i) = state.state_[i]; - p_(state.state_idx_, 0) = state.p_; + p_(state.state_idx_, 0) = state.p_; + // Release the lock only after the state has been updated in memory + Kokkos::memory_fence(); locks_(state.state_idx_, 0) = 0; } }; diff --git a/lib/kokkos/algorithms/src/Kokkos_Sort.hpp b/lib/kokkos/algorithms/src/Kokkos_Sort.hpp index 10f9ad6462..f77484cc55 100644 --- a/lib/kokkos/algorithms/src/Kokkos_Sort.hpp +++ b/lib/kokkos/algorithms/src/Kokkos_Sort.hpp @@ -21,762 +21,9 @@ #define KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_SORT #endif -#include -#include -#include -#include - -#if defined(KOKKOS_ENABLE_CUDA) - -// Workaround for `Instruction 'shfl' without '.sync' is not supported on -// .target sm_70 and higher from PTX ISA version 6.4`. -// Also see https://github.com/NVIDIA/cub/pull/170. -#if !defined(CUB_USE_COOPERATIVE_GROUPS) -#define CUB_USE_COOPERATIVE_GROUPS -#endif - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wshadow" - -#if defined(KOKKOS_COMPILER_CLANG) -// Some versions of Clang fail to compile Thrust, failing with errors like -// this: -// /thrust/system/cuda/detail/core/agent_launcher.h:557:11: -// error: use of undeclared identifier 'va_printf' -// The exact combination of versions for Clang and Thrust (or CUDA) for this -// failure was not investigated, however even very recent version combination -// (Clang 10.0.0 and Cuda 10.0) demonstrated failure. -// -// Defining _CubLog here locally allows us to avoid that code path, however -// disabling some debugging diagnostics -#pragma push_macro("_CubLog") -#ifdef _CubLog -#undef _CubLog -#endif -#define _CubLog -#include -#include -#pragma pop_macro("_CubLog") -#else -#include -#include -#endif - -#pragma GCC diagnostic pop - -#endif - -#if defined(KOKKOS_ENABLE_ONEDPL) -#include -#include -#endif - -namespace Kokkos { - -namespace Impl { - -template -struct CopyOp; - -template -struct CopyOp { - KOKKOS_INLINE_FUNCTION - static void copy(DstViewType const& dst, size_t i_dst, SrcViewType const& src, - size_t i_src) { - dst(i_dst) = src(i_src); - } -}; - -template -struct CopyOp { - KOKKOS_INLINE_FUNCTION - static void copy(DstViewType const& dst, size_t i_dst, SrcViewType const& src, - size_t i_src) { - for (int j = 0; j < (int)dst.extent(1); j++) dst(i_dst, j) = src(i_src, j); - } -}; - -template -struct CopyOp { - KOKKOS_INLINE_FUNCTION - static void copy(DstViewType const& dst, size_t i_dst, SrcViewType const& src, - size_t i_src) { - for (int j = 0; j < dst.extent(1); j++) - for (int k = 0; k < dst.extent(2); k++) - dst(i_dst, j, k) = src(i_src, j, k); - } -}; -} // namespace Impl - -//---------------------------------------------------------------------------- - -template -class BinSort { - public: - template - struct copy_functor { - using src_view_type = typename SrcViewType::const_type; - - using copy_op = Impl::CopyOp; - - DstViewType dst_values; - src_view_type src_values; - int dst_offset; - - copy_functor(DstViewType const& dst_values_, int const& dst_offset_, - SrcViewType const& src_values_) - : dst_values(dst_values_), - src_values(src_values_), - dst_offset(dst_offset_) {} - - KOKKOS_INLINE_FUNCTION - void operator()(const int& i) const { - copy_op::copy(dst_values, i + dst_offset, src_values, i); - } - }; - - template - struct copy_permute_functor { - // If a Kokkos::View then can generate constant random access - // otherwise can only use the constant type. - - using src_view_type = std::conditional_t< - Kokkos::is_view::value, - Kokkos::View -#endif - >, - typename SrcViewType::const_type>; - - using perm_view_type = typename PermuteViewType::const_type; - - using copy_op = Impl::CopyOp; - - DstViewType dst_values; - perm_view_type sort_order; - src_view_type src_values; - int src_offset; - - copy_permute_functor(DstViewType const& dst_values_, - PermuteViewType const& sort_order_, - SrcViewType const& src_values_, int const& src_offset_) - : dst_values(dst_values_), - sort_order(sort_order_), - src_values(src_values_), - src_offset(src_offset_) {} - - KOKKOS_INLINE_FUNCTION - void operator()(const int& i) const { - copy_op::copy(dst_values, i, src_values, src_offset + sort_order(i)); - } - }; - - // Naming this alias "execution_space" would be problematic since it would be - // considered as execution space for the various functors which might use - // another execution space through sort() or create_permute_vector(). - using exec_space = typename Space::execution_space; - using bin_op_type = BinSortOp; - - struct bin_count_tag {}; - struct bin_offset_tag {}; - struct bin_binning_tag {}; - struct bin_sort_bins_tag {}; - - public: - using size_type = SizeType; - using value_type = size_type; - - using offset_type = Kokkos::View; - using bin_count_type = Kokkos::View; - - using const_key_view_type = typename KeyViewType::const_type; - - // If a Kokkos::View then can generate constant random access - // otherwise can only use the constant type. - - using const_rnd_key_view_type = std::conditional_t< - Kokkos::is_view::value, - Kokkos::View >, - const_key_view_type>; - - using non_const_key_scalar = typename KeyViewType::non_const_value_type; - using const_key_scalar = typename KeyViewType::const_value_type; - - using bin_count_atomic_type = - Kokkos::View >; - - private: - const_key_view_type keys; - const_rnd_key_view_type keys_rnd; - - public: - BinSortOp bin_op; - offset_type bin_offsets; - bin_count_atomic_type bin_count_atomic; - bin_count_type bin_count_const; - offset_type sort_order; - - int range_begin; - int range_end; - bool sort_within_bins; - - public: -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE_4 - KOKKOS_DEPRECATED BinSort() = default; -#else - BinSort() = delete; -#endif - - //---------------------------------------- - // Constructor: takes the keys, the binning_operator and optionally whether to - // sort within bins (default false) - template - BinSort(const ExecutionSpace& exec, const_key_view_type keys_, - int range_begin_, int range_end_, BinSortOp bin_op_, - bool sort_within_bins_ = false) - : keys(keys_), - keys_rnd(keys_), - bin_op(bin_op_), - bin_offsets(), - bin_count_atomic(), - bin_count_const(), - sort_order(), - range_begin(range_begin_), - range_end(range_end_), - sort_within_bins(sort_within_bins_) { - static_assert( - Kokkos::SpaceAccessibility::accessible, - "The provided execution space must be able to access the memory space " - "BinSort was initialized with!"); - if (bin_op.max_bins() <= 0) - Kokkos::abort( - "The number of bins in the BinSortOp object must be greater than 0!"); - bin_count_atomic = Kokkos::View( - "Kokkos::SortImpl::BinSortFunctor::bin_count", bin_op.max_bins()); - bin_count_const = bin_count_atomic; - bin_offsets = - offset_type(view_alloc(exec, WithoutInitializing, - "Kokkos::SortImpl::BinSortFunctor::bin_offsets"), - bin_op.max_bins()); - sort_order = - offset_type(view_alloc(exec, WithoutInitializing, - "Kokkos::SortImpl::BinSortFunctor::sort_order"), - range_end - range_begin); - } - - BinSort(const_key_view_type keys_, int range_begin_, int range_end_, - BinSortOp bin_op_, bool sort_within_bins_ = false) - : BinSort(exec_space{}, keys_, range_begin_, range_end_, bin_op_, - sort_within_bins_) {} - - template - BinSort(const ExecutionSpace& exec, const_key_view_type keys_, - BinSortOp bin_op_, bool sort_within_bins_ = false) - : BinSort(exec, keys_, 0, keys_.extent(0), bin_op_, sort_within_bins_) {} - - BinSort(const_key_view_type keys_, BinSortOp bin_op_, - bool sort_within_bins_ = false) - : BinSort(exec_space{}, keys_, bin_op_, sort_within_bins_) {} - - //---------------------------------------- - // Create the permutation vector, the bin_offset array and the bin_count - // array. Can be called again if keys changed - template - void create_permute_vector(const ExecutionSpace& exec) { - static_assert( - Kokkos::SpaceAccessibility::accessible, - "The provided execution space must be able to access the memory space " - "BinSort was initialized with!"); - - const size_t len = range_end - range_begin; - Kokkos::parallel_for( - "Kokkos::Sort::BinCount", - Kokkos::RangePolicy(exec, 0, len), - *this); - Kokkos::parallel_scan("Kokkos::Sort::BinOffset", - Kokkos::RangePolicy( - exec, 0, bin_op.max_bins()), - *this); - - Kokkos::deep_copy(exec, bin_count_atomic, 0); - Kokkos::parallel_for( - "Kokkos::Sort::BinBinning", - Kokkos::RangePolicy(exec, 0, len), - *this); - - if (sort_within_bins) - Kokkos::parallel_for( - "Kokkos::Sort::BinSort", - Kokkos::RangePolicy( - exec, 0, bin_op.max_bins()), - *this); - } - - // Create the permutation vector, the bin_offset array and the bin_count - // array. Can be called again if keys changed - void create_permute_vector() { - Kokkos::fence("Kokkos::Binsort::create_permute_vector: before"); - exec_space e{}; - create_permute_vector(e); - e.fence("Kokkos::Binsort::create_permute_vector: after"); - } - - // Sort a subset of a view with respect to the first dimension using the - // permutation array - template - void sort(const ExecutionSpace& exec, ValuesViewType const& values, - int values_range_begin, int values_range_end) const { - if (values.extent(0) == 0) { - return; - } - - static_assert( - Kokkos::SpaceAccessibility::accessible, - "The provided execution space must be able to access the memory space " - "BinSort was initialized with!"); - static_assert( - Kokkos::SpaceAccessibility< - ExecutionSpace, typename ValuesViewType::memory_space>::accessible, - "The provided execution space must be able to access the memory space " - "of the View argument!"); - - const size_t len = range_end - range_begin; - const size_t values_len = values_range_end - values_range_begin; - if (len != values_len) { - Kokkos::abort( - "BinSort::sort: values range length != permutation vector length"); - } - - using scratch_view_type = - Kokkos::View; - scratch_view_type sorted_values( - view_alloc(exec, WithoutInitializing, - "Kokkos::SortImpl::BinSortFunctor::sorted_values"), - values.rank_dynamic > 0 ? len : KOKKOS_IMPL_CTOR_DEFAULT_ARG, - values.rank_dynamic > 1 ? values.extent(1) - : KOKKOS_IMPL_CTOR_DEFAULT_ARG, - values.rank_dynamic > 2 ? values.extent(2) - : KOKKOS_IMPL_CTOR_DEFAULT_ARG, - values.rank_dynamic > 3 ? values.extent(3) - : KOKKOS_IMPL_CTOR_DEFAULT_ARG, - values.rank_dynamic > 4 ? values.extent(4) - : KOKKOS_IMPL_CTOR_DEFAULT_ARG, - values.rank_dynamic > 5 ? values.extent(5) - : KOKKOS_IMPL_CTOR_DEFAULT_ARG, - values.rank_dynamic > 6 ? values.extent(6) - : KOKKOS_IMPL_CTOR_DEFAULT_ARG, - values.rank_dynamic > 7 ? values.extent(7) - : KOKKOS_IMPL_CTOR_DEFAULT_ARG); - - { - copy_permute_functor - functor(sorted_values, sort_order, values, - values_range_begin - range_begin); - - parallel_for("Kokkos::Sort::CopyPermute", - Kokkos::RangePolicy(exec, 0, len), functor); - } - - { - copy_functor functor( - values, range_begin, sorted_values); - - parallel_for("Kokkos::Sort::Copy", - Kokkos::RangePolicy(exec, 0, len), functor); - } - } - - // Sort a subset of a view with respect to the first dimension using the - // permutation array - template - void sort(ValuesViewType const& values, int values_range_begin, - int values_range_end) const { - Kokkos::fence("Kokkos::Binsort::sort: before"); - exec_space exec; - sort(exec, values, values_range_begin, values_range_end); - exec.fence("Kokkos::BinSort:sort: after"); - } - - template - void sort(ExecutionSpace const& exec, ValuesViewType const& values) const { - this->sort(exec, values, 0, /*values.extent(0)*/ range_end - range_begin); - } - - template - void sort(ValuesViewType const& values) const { - this->sort(values, 0, /*values.extent(0)*/ range_end - range_begin); - } - - // Get the permutation vector - KOKKOS_INLINE_FUNCTION - offset_type get_permute_vector() const { return sort_order; } - - // Get the start offsets for each bin - KOKKOS_INLINE_FUNCTION - offset_type get_bin_offsets() const { return bin_offsets; } - - // Get the count for each bin - KOKKOS_INLINE_FUNCTION - bin_count_type get_bin_count() const { return bin_count_const; } - - public: - KOKKOS_INLINE_FUNCTION - void operator()(const bin_count_tag& /*tag*/, const int i) const { - const int j = range_begin + i; - bin_count_atomic(bin_op.bin(keys, j))++; - } - - KOKKOS_INLINE_FUNCTION - void operator()(const bin_offset_tag& /*tag*/, const int i, - value_type& offset, const bool& final) const { - if (final) { - bin_offsets(i) = offset; - } - offset += bin_count_const(i); - } - - KOKKOS_INLINE_FUNCTION - void operator()(const bin_binning_tag& /*tag*/, const int i) const { - const int j = range_begin + i; - const int bin = bin_op.bin(keys, j); - const int count = bin_count_atomic(bin)++; - - sort_order(bin_offsets(bin) + count) = j; - } - - KOKKOS_INLINE_FUNCTION - void operator()(const bin_sort_bins_tag& /*tag*/, const int i) const { - auto bin_size = bin_count_const(i); - if (bin_size <= 1) return; - constexpr bool use_std_sort = - std::is_same_v; - int lower_bound = bin_offsets(i); - int upper_bound = lower_bound + bin_size; - // Switching to std::sort for more than 10 elements has been found - // reasonable experimentally. - if (use_std_sort && bin_size > 10) { - if constexpr (use_std_sort) { - std::sort(&sort_order(lower_bound), &sort_order(upper_bound), - [this](int p, int q) { return bin_op(keys_rnd, p, q); }); - } - } else { - for (int k = lower_bound + 1; k < upper_bound; ++k) { - int old_idx = sort_order(k); - int j = k - 1; - while (j >= lower_bound) { - int new_idx = sort_order(j); - if (!bin_op(keys_rnd, old_idx, new_idx)) break; - sort_order(j + 1) = new_idx; - --j; - } - sort_order(j + 1) = old_idx; - } - } - } -}; - -//---------------------------------------------------------------------------- - -template -struct BinOp1D { - int max_bins_ = {}; - double mul_ = {}; - double min_ = {}; - -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE_4 - KOKKOS_DEPRECATED BinOp1D() = default; -#else - BinOp1D() = delete; -#endif - - // Construct BinOp with number of bins, minimum value and maximum value - BinOp1D(int max_bins__, typename KeyViewType::const_value_type min, - typename KeyViewType::const_value_type max) - : max_bins_(max_bins__ + 1), - // Cast to double to avoid possible overflow when using integer - mul_(static_cast(max_bins__) / - (static_cast(max) - static_cast(min))), - min_(static_cast(min)) { - // For integral types the number of bins may be larger than the range - // in which case we can exactly have one unique value per bin - // and then don't need to sort bins. - if (std::is_integral::value && - (static_cast(max) - static_cast(min)) <= - static_cast(max_bins__)) { - mul_ = 1.; - } - } - - // Determine bin index from key value - template - KOKKOS_INLINE_FUNCTION int bin(ViewType& keys, const int& i) const { - return static_cast(mul_ * (static_cast(keys(i)) - min_)); - } - - // Return maximum bin index + 1 - KOKKOS_INLINE_FUNCTION - int max_bins() const { return max_bins_; } - - // Compare to keys within a bin if true new_val will be put before old_val - template - KOKKOS_INLINE_FUNCTION bool operator()(ViewType& keys, iType1& i1, - iType2& i2) const { - return keys(i1) < keys(i2); - } -}; - -template -struct BinOp3D { - int max_bins_[3] = {}; - double mul_[3] = {}; - double min_[3] = {}; - -#ifdef KOKKOS_ENABLE_DEPRECATED_CODE_4 - KOKKOS_DEPRECATED BinOp3D() = default; -#else - BinOp3D() = delete; -#endif - - BinOp3D(int max_bins__[], typename KeyViewType::const_value_type min[], - typename KeyViewType::const_value_type max[]) { - max_bins_[0] = max_bins__[0]; - max_bins_[1] = max_bins__[1]; - max_bins_[2] = max_bins__[2]; - mul_[0] = static_cast(max_bins__[0]) / - (static_cast(max[0]) - static_cast(min[0])); - mul_[1] = static_cast(max_bins__[1]) / - (static_cast(max[1]) - static_cast(min[1])); - mul_[2] = static_cast(max_bins__[2]) / - (static_cast(max[2]) - static_cast(min[2])); - min_[0] = static_cast(min[0]); - min_[1] = static_cast(min[1]); - min_[2] = static_cast(min[2]); - } - - template - KOKKOS_INLINE_FUNCTION int bin(ViewType& keys, const int& i) const { - return int((((int(mul_[0] * (keys(i, 0) - min_[0])) * max_bins_[1]) + - int(mul_[1] * (keys(i, 1) - min_[1]))) * - max_bins_[2]) + - int(mul_[2] * (keys(i, 2) - min_[2]))); - } - - KOKKOS_INLINE_FUNCTION - int max_bins() const { return max_bins_[0] * max_bins_[1] * max_bins_[2]; } - - template - KOKKOS_INLINE_FUNCTION bool operator()(ViewType& keys, iType1& i1, - iType2& i2) const { - if (keys(i1, 0) > keys(i2, 0)) - return true; - else if (keys(i1, 0) == keys(i2, 0)) { - if (keys(i1, 1) > keys(i2, 1)) - return true; - else if (keys(i1, 1) == keys(i2, 1)) { - if (keys(i1, 2) > keys(i2, 2)) return true; - } - } - return false; - } -}; - -namespace Impl { - -template -struct min_max_functor { - using minmax_scalar = - Kokkos::MinMaxScalar; - - ViewType view; - min_max_functor(const ViewType& view_) : view(view_) {} - - KOKKOS_INLINE_FUNCTION - void operator()(const size_t& i, minmax_scalar& minmax) const { - if (view(i) < minmax.min_val) minmax.min_val = view(i); - if (view(i) > minmax.max_val) minmax.max_val = view(i); - } -}; - -} // namespace Impl - -template -std::enable_if_t<(Kokkos::is_execution_space::value) && - (!SpaceAccessibility< - HostSpace, typename Kokkos::View:: - memory_space>::accessible)> -sort(const ExecutionSpace& exec, - const Kokkos::View& view) { - if (view.extent(0) == 0) { - return; - } - - using ViewType = Kokkos::View; - using CompType = BinOp1D; - - Kokkos::MinMaxScalar result; - Kokkos::MinMax reducer(result); - parallel_reduce("Kokkos::Sort::FindExtent", - Kokkos::RangePolicy( - exec, 0, view.extent(0)), - Impl::min_max_functor(view), reducer); - if (result.min_val == result.max_val) return; - // For integral types the number of bins may be larger than the range - // in which case we can exactly have one unique value per bin - // and then don't need to sort bins. - bool sort_in_bins = true; - // TODO: figure out better max_bins then this ... - int64_t max_bins = view.extent(0) / 2; - if (std::is_integral::value) { - // Cast to double to avoid possible overflow when using integer - auto const max_val = static_cast(result.max_val); - auto const min_val = static_cast(result.min_val); - // using 10M as the cutoff for special behavior (roughly 40MB for the count - // array) - if ((max_val - min_val) < 10000000) { - max_bins = max_val - min_val + 1; - sort_in_bins = false; - } - } - if (std::is_floating_point::value) { - KOKKOS_ASSERT(std::isfinite(static_cast(result.max_val) - - static_cast(result.min_val))); - } - - BinSort bin_sort( - view, CompType(max_bins, result.min_val, result.max_val), sort_in_bins); - bin_sort.create_permute_vector(exec); - bin_sort.sort(exec, view); -} - -#if defined(KOKKOS_ENABLE_ONEDPL) -template -void sort(const Experimental::SYCL& space, - const Kokkos::View& view) { - if (view.extent(0) == 0) { - return; - } - - using ViewType = Kokkos::View; - static_assert(SpaceAccessibility::accessible, - "SYCL execution space is not able to access the memory space " - "of the View argument!"); - - auto queue = space.sycl_queue(); - auto policy = oneapi::dpl::execution::make_device_policy(queue); - - // Can't use Experimental::begin/end here since the oneDPL then assumes that - // the data is on the host. - static_assert( - ViewType::rank == 1 && - (std::is_same::value || - std::is_same::value), - "SYCL sort only supports contiguous 1D Views."); - const int n = view.extent(0); - oneapi::dpl::sort(policy, view.data(), view.data() + n); -} -#endif - -template -std::enable_if_t<(Kokkos::is_execution_space::value) && - (SpaceAccessibility< - HostSpace, typename Kokkos::View:: - memory_space>::accessible)> -sort(const ExecutionSpace&, const Kokkos::View& view) { - if (view.extent(0) == 0) { - return; - } - auto first = Experimental::begin(view); - auto last = Experimental::end(view); - std::sort(first, last); -} - -#if defined(KOKKOS_ENABLE_CUDA) -template -void sort(const Cuda& space, - const Kokkos::View& view) { - if (view.extent(0) == 0) { - return; - } - const auto exec = thrust::cuda::par.on(space.cuda_stream()); - auto first = Experimental::begin(view); - auto last = Experimental::end(view); - thrust::sort(exec, first, last); -} -#endif - -template -void sort(ViewType const& view) { - Kokkos::fence("Kokkos::sort: before"); - - if (view.extent(0) == 0) { - return; - } - - typename ViewType::execution_space exec; - sort(exec, view); - exec.fence("Kokkos::sort: fence after sorting"); -} - -template -std::enable_if_t::value> sort( - const ExecutionSpace& exec, ViewType view, size_t const begin, - size_t const end) { - if (view.extent(0) == 0) { - return; - } - - using range_policy = Kokkos::RangePolicy; - using CompType = BinOp1D; - - Kokkos::MinMaxScalar result; - Kokkos::MinMax reducer(result); - - parallel_reduce("Kokkos::Sort::FindExtent", range_policy(exec, begin, end), - Impl::min_max_functor(view), reducer); - - if (result.min_val == result.max_val) return; - - BinSort bin_sort( - exec, view, begin, end, - CompType((end - begin) / 2, result.min_val, result.max_val), true); - - bin_sort.create_permute_vector(exec); - bin_sort.sort(exec, view, begin, end); -} - -template -void sort(ViewType view, size_t const begin, size_t const end) { - Kokkos::fence("Kokkos::sort: before"); - - if (view.extent(0) == 0) { - return; - } - - typename ViewType::execution_space exec; - sort(exec, view, begin, end); - exec.fence("Kokkos::Sort: fence after sorting"); -} - -} // namespace Kokkos +#include "sorting/Kokkos_BinSortPublicAPI.hpp" +#include "sorting/Kokkos_SortPublicAPI.hpp" +#include "sorting/Kokkos_NestedSortPublicAPI.hpp" #ifdef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_SORT #undef KOKKOS_IMPL_PUBLIC_INCLUDE diff --git a/lib/kokkos/algorithms/src/sorting/Kokkos_BinOpsPublicAPI.hpp b/lib/kokkos/algorithms/src/sorting/Kokkos_BinOpsPublicAPI.hpp new file mode 100644 index 0000000000..73e751f572 --- /dev/null +++ b/lib/kokkos/algorithms/src/sorting/Kokkos_BinOpsPublicAPI.hpp @@ -0,0 +1,129 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER + +#ifndef KOKKOS_BIN_OPS_PUBLIC_API_HPP_ +#define KOKKOS_BIN_OPS_PUBLIC_API_HPP_ + +#include +#include + +namespace Kokkos { + +template +struct BinOp1D { + int max_bins_ = {}; + double mul_ = {}; + double min_ = {}; + +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE_4 + KOKKOS_DEPRECATED BinOp1D() = default; +#else + BinOp1D() = delete; +#endif + + // Construct BinOp with number of bins, minimum value and maximum value + BinOp1D(int max_bins__, typename KeyViewType::const_value_type min, + typename KeyViewType::const_value_type max) + : max_bins_(max_bins__ + 1), + // Cast to double to avoid possible overflow when using integer + mul_(static_cast(max_bins__) / + (static_cast(max) - static_cast(min))), + min_(static_cast(min)) { + // For integral types the number of bins may be larger than the range + // in which case we can exactly have one unique value per bin + // and then don't need to sort bins. + if (std::is_integral::value && + (static_cast(max) - static_cast(min)) <= + static_cast(max_bins__)) { + mul_ = 1.; + } + } + + // Determine bin index from key value + template + KOKKOS_INLINE_FUNCTION int bin(ViewType& keys, const int& i) const { + return static_cast(mul_ * (static_cast(keys(i)) - min_)); + } + + // Return maximum bin index + 1 + KOKKOS_INLINE_FUNCTION + int max_bins() const { return max_bins_; } + + // Compare to keys within a bin if true new_val will be put before old_val + template + KOKKOS_INLINE_FUNCTION bool operator()(ViewType& keys, iType1& i1, + iType2& i2) const { + return keys(i1) < keys(i2); + } +}; + +template +struct BinOp3D { + int max_bins_[3] = {}; + double mul_[3] = {}; + double min_[3] = {}; + +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE_4 + KOKKOS_DEPRECATED BinOp3D() = default; +#else + BinOp3D() = delete; +#endif + + BinOp3D(int max_bins__[], typename KeyViewType::const_value_type min[], + typename KeyViewType::const_value_type max[]) { + max_bins_[0] = max_bins__[0]; + max_bins_[1] = max_bins__[1]; + max_bins_[2] = max_bins__[2]; + mul_[0] = static_cast(max_bins__[0]) / + (static_cast(max[0]) - static_cast(min[0])); + mul_[1] = static_cast(max_bins__[1]) / + (static_cast(max[1]) - static_cast(min[1])); + mul_[2] = static_cast(max_bins__[2]) / + (static_cast(max[2]) - static_cast(min[2])); + min_[0] = static_cast(min[0]); + min_[1] = static_cast(min[1]); + min_[2] = static_cast(min[2]); + } + + template + KOKKOS_INLINE_FUNCTION int bin(ViewType& keys, const int& i) const { + return int((((int(mul_[0] * (keys(i, 0) - min_[0])) * max_bins_[1]) + + int(mul_[1] * (keys(i, 1) - min_[1]))) * + max_bins_[2]) + + int(mul_[2] * (keys(i, 2) - min_[2]))); + } + + KOKKOS_INLINE_FUNCTION + int max_bins() const { return max_bins_[0] * max_bins_[1] * max_bins_[2]; } + + template + KOKKOS_INLINE_FUNCTION bool operator()(ViewType& keys, iType1& i1, + iType2& i2) const { + if (keys(i1, 0) > keys(i2, 0)) + return true; + else if (keys(i1, 0) == keys(i2, 0)) { + if (keys(i1, 1) > keys(i2, 1)) + return true; + else if (keys(i1, 1) == keys(i2, 1)) { + if (keys(i1, 2) > keys(i2, 2)) return true; + } + } + return false; + } +}; + +} // namespace Kokkos +#endif diff --git a/lib/kokkos/algorithms/src/sorting/Kokkos_BinSortPublicAPI.hpp b/lib/kokkos/algorithms/src/sorting/Kokkos_BinSortPublicAPI.hpp new file mode 100644 index 0000000000..c399279fe4 --- /dev/null +++ b/lib/kokkos/algorithms/src/sorting/Kokkos_BinSortPublicAPI.hpp @@ -0,0 +1,410 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER + +#ifndef KOKKOS_BIN_SORT_PUBLIC_API_HPP_ +#define KOKKOS_BIN_SORT_PUBLIC_API_HPP_ + +#include "Kokkos_BinOpsPublicAPI.hpp" +#include "impl/Kokkos_CopyOpsForBinSortImpl.hpp" +#include +#include + +namespace Kokkos { + +template +class BinSort { + public: + template + struct copy_functor { + using src_view_type = typename SrcViewType::const_type; + + using copy_op = Impl::CopyOp; + + DstViewType dst_values; + src_view_type src_values; + int dst_offset; + + copy_functor(DstViewType const& dst_values_, int const& dst_offset_, + SrcViewType const& src_values_) + : dst_values(dst_values_), + src_values(src_values_), + dst_offset(dst_offset_) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const int& i) const { + copy_op::copy(dst_values, i + dst_offset, src_values, i); + } + }; + + template + struct copy_permute_functor { + // If a Kokkos::View then can generate constant random access + // otherwise can only use the constant type. + + using src_view_type = std::conditional_t< + Kokkos::is_view::value, + Kokkos::View= 230700) + , + Kokkos::MemoryTraits +#endif + >, + typename SrcViewType::const_type>; + + using perm_view_type = typename PermuteViewType::const_type; + + using copy_op = Impl::CopyOp; + + DstViewType dst_values; + perm_view_type sort_order; + src_view_type src_values; + int src_offset; + + copy_permute_functor(DstViewType const& dst_values_, + PermuteViewType const& sort_order_, + SrcViewType const& src_values_, int const& src_offset_) + : dst_values(dst_values_), + sort_order(sort_order_), + src_values(src_values_), + src_offset(src_offset_) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const int& i) const { + copy_op::copy(dst_values, i, src_values, src_offset + sort_order(i)); + } + }; + + // Naming this alias "execution_space" would be problematic since it would be + // considered as execution space for the various functors which might use + // another execution space through sort() or create_permute_vector(). + using exec_space = typename Space::execution_space; + using bin_op_type = BinSortOp; + + struct bin_count_tag {}; + struct bin_offset_tag {}; + struct bin_binning_tag {}; + struct bin_sort_bins_tag {}; + + public: + using size_type = SizeType; + using value_type = size_type; + + using offset_type = Kokkos::View; + using bin_count_type = Kokkos::View; + + using const_key_view_type = typename KeyViewType::const_type; + + // If a Kokkos::View then can generate constant random access + // otherwise can only use the constant type. + + using const_rnd_key_view_type = std::conditional_t< + Kokkos::is_view::value, + Kokkos::View >, + const_key_view_type>; + + using non_const_key_scalar = typename KeyViewType::non_const_value_type; + using const_key_scalar = typename KeyViewType::const_value_type; + + using bin_count_atomic_type = + Kokkos::View >; + + private: + const_key_view_type keys; + const_rnd_key_view_type keys_rnd; + + public: + BinSortOp bin_op; + offset_type bin_offsets; + bin_count_atomic_type bin_count_atomic; + bin_count_type bin_count_const; + offset_type sort_order; + + int range_begin; + int range_end; + bool sort_within_bins; + + public: +#ifdef KOKKOS_ENABLE_DEPRECATED_CODE_4 + KOKKOS_DEPRECATED BinSort() = default; +#else + BinSort() = delete; +#endif + + //---------------------------------------- + // Constructor: takes the keys, the binning_operator and optionally whether to + // sort within bins (default false) + template + BinSort(const ExecutionSpace& exec, const_key_view_type keys_, + int range_begin_, int range_end_, BinSortOp bin_op_, + bool sort_within_bins_ = false) + : keys(keys_), + keys_rnd(keys_), + bin_op(bin_op_), + bin_offsets(), + bin_count_atomic(), + bin_count_const(), + sort_order(), + range_begin(range_begin_), + range_end(range_end_), + sort_within_bins(sort_within_bins_) { + static_assert( + Kokkos::SpaceAccessibility::accessible, + "The provided execution space must be able to access the memory space " + "BinSort was initialized with!"); + if (bin_op.max_bins() <= 0) + Kokkos::abort( + "The number of bins in the BinSortOp object must be greater than 0!"); + bin_count_atomic = Kokkos::View( + "Kokkos::SortImpl::BinSortFunctor::bin_count", bin_op.max_bins()); + bin_count_const = bin_count_atomic; + bin_offsets = + offset_type(view_alloc(exec, WithoutInitializing, + "Kokkos::SortImpl::BinSortFunctor::bin_offsets"), + bin_op.max_bins()); + sort_order = + offset_type(view_alloc(exec, WithoutInitializing, + "Kokkos::SortImpl::BinSortFunctor::sort_order"), + range_end - range_begin); + } + + BinSort(const_key_view_type keys_, int range_begin_, int range_end_, + BinSortOp bin_op_, bool sort_within_bins_ = false) + : BinSort(exec_space{}, keys_, range_begin_, range_end_, bin_op_, + sort_within_bins_) {} + + template + BinSort(const ExecutionSpace& exec, const_key_view_type keys_, + BinSortOp bin_op_, bool sort_within_bins_ = false) + : BinSort(exec, keys_, 0, keys_.extent(0), bin_op_, sort_within_bins_) {} + + BinSort(const_key_view_type keys_, BinSortOp bin_op_, + bool sort_within_bins_ = false) + : BinSort(exec_space{}, keys_, bin_op_, sort_within_bins_) {} + + //---------------------------------------- + // Create the permutation vector, the bin_offset array and the bin_count + // array. Can be called again if keys changed + template + void create_permute_vector(const ExecutionSpace& exec) { + static_assert( + Kokkos::SpaceAccessibility::accessible, + "The provided execution space must be able to access the memory space " + "BinSort was initialized with!"); + + const size_t len = range_end - range_begin; + Kokkos::parallel_for( + "Kokkos::Sort::BinCount", + Kokkos::RangePolicy(exec, 0, len), + *this); + Kokkos::parallel_scan("Kokkos::Sort::BinOffset", + Kokkos::RangePolicy( + exec, 0, bin_op.max_bins()), + *this); + + Kokkos::deep_copy(exec, bin_count_atomic, 0); + Kokkos::parallel_for( + "Kokkos::Sort::BinBinning", + Kokkos::RangePolicy(exec, 0, len), + *this); + + if (sort_within_bins) + Kokkos::parallel_for( + "Kokkos::Sort::BinSort", + Kokkos::RangePolicy( + exec, 0, bin_op.max_bins()), + *this); + } + + // Create the permutation vector, the bin_offset array and the bin_count + // array. Can be called again if keys changed + void create_permute_vector() { + Kokkos::fence("Kokkos::Binsort::create_permute_vector: before"); + exec_space e{}; + create_permute_vector(e); + e.fence("Kokkos::Binsort::create_permute_vector: after"); + } + + // Sort a subset of a view with respect to the first dimension using the + // permutation array + template + void sort(const ExecutionSpace& exec, ValuesViewType const& values, + int values_range_begin, int values_range_end) const { + if (values.extent(0) == 0) { + return; + } + + static_assert( + Kokkos::SpaceAccessibility::accessible, + "The provided execution space must be able to access the memory space " + "BinSort was initialized with!"); + static_assert( + Kokkos::SpaceAccessibility< + ExecutionSpace, typename ValuesViewType::memory_space>::accessible, + "The provided execution space must be able to access the memory space " + "of the View argument!"); + + const size_t len = range_end - range_begin; + const size_t values_len = values_range_end - values_range_begin; + if (len != values_len) { + Kokkos::abort( + "BinSort::sort: values range length != permutation vector length"); + } + + using scratch_view_type = + Kokkos::View; + scratch_view_type sorted_values( + view_alloc(exec, WithoutInitializing, + "Kokkos::SortImpl::BinSortFunctor::sorted_values"), + values.rank_dynamic > 0 ? len : KOKKOS_IMPL_CTOR_DEFAULT_ARG, + values.rank_dynamic > 1 ? values.extent(1) + : KOKKOS_IMPL_CTOR_DEFAULT_ARG, + values.rank_dynamic > 2 ? values.extent(2) + : KOKKOS_IMPL_CTOR_DEFAULT_ARG, + values.rank_dynamic > 3 ? values.extent(3) + : KOKKOS_IMPL_CTOR_DEFAULT_ARG, + values.rank_dynamic > 4 ? values.extent(4) + : KOKKOS_IMPL_CTOR_DEFAULT_ARG, + values.rank_dynamic > 5 ? values.extent(5) + : KOKKOS_IMPL_CTOR_DEFAULT_ARG, + values.rank_dynamic > 6 ? values.extent(6) + : KOKKOS_IMPL_CTOR_DEFAULT_ARG, + values.rank_dynamic > 7 ? values.extent(7) + : KOKKOS_IMPL_CTOR_DEFAULT_ARG); + + { + copy_permute_functor + functor(sorted_values, sort_order, values, + values_range_begin - range_begin); + + parallel_for("Kokkos::Sort::CopyPermute", + Kokkos::RangePolicy(exec, 0, len), functor); + } + + { + copy_functor functor( + values, range_begin, sorted_values); + + parallel_for("Kokkos::Sort::Copy", + Kokkos::RangePolicy(exec, 0, len), functor); + } + } + + // Sort a subset of a view with respect to the first dimension using the + // permutation array + template + void sort(ValuesViewType const& values, int values_range_begin, + int values_range_end) const { + Kokkos::fence("Kokkos::Binsort::sort: before"); + exec_space exec; + sort(exec, values, values_range_begin, values_range_end); + exec.fence("Kokkos::BinSort:sort: after"); + } + + template + void sort(ExecutionSpace const& exec, ValuesViewType const& values) const { + this->sort(exec, values, 0, /*values.extent(0)*/ range_end - range_begin); + } + + template + void sort(ValuesViewType const& values) const { + this->sort(values, 0, /*values.extent(0)*/ range_end - range_begin); + } + + // Get the permutation vector + KOKKOS_INLINE_FUNCTION + offset_type get_permute_vector() const { return sort_order; } + + // Get the start offsets for each bin + KOKKOS_INLINE_FUNCTION + offset_type get_bin_offsets() const { return bin_offsets; } + + // Get the count for each bin + KOKKOS_INLINE_FUNCTION + bin_count_type get_bin_count() const { return bin_count_const; } + + public: + KOKKOS_INLINE_FUNCTION + void operator()(const bin_count_tag& /*tag*/, const int i) const { + const int j = range_begin + i; + bin_count_atomic(bin_op.bin(keys, j))++; + } + + KOKKOS_INLINE_FUNCTION + void operator()(const bin_offset_tag& /*tag*/, const int i, + value_type& offset, const bool& final) const { + if (final) { + bin_offsets(i) = offset; + } + offset += bin_count_const(i); + } + + KOKKOS_INLINE_FUNCTION + void operator()(const bin_binning_tag& /*tag*/, const int i) const { + const int j = range_begin + i; + const int bin = bin_op.bin(keys, j); + const int count = bin_count_atomic(bin)++; + + sort_order(bin_offsets(bin) + count) = j; + } + + KOKKOS_INLINE_FUNCTION + void operator()(const bin_sort_bins_tag& /*tag*/, const int i) const { + auto bin_size = bin_count_const(i); + if (bin_size <= 1) return; + constexpr bool use_std_sort = + std::is_same_v; + int lower_bound = bin_offsets(i); + int upper_bound = lower_bound + bin_size; + // Switching to std::sort for more than 10 elements has been found + // reasonable experimentally. + if (use_std_sort && bin_size > 10) { + KOKKOS_IF_ON_HOST( + (std::sort(&sort_order(lower_bound), &sort_order(upper_bound), + [this](int p, int q) { return bin_op(keys_rnd, p, q); });)) + } else { + for (int k = lower_bound + 1; k < upper_bound; ++k) { + int old_idx = sort_order(k); + int j = k - 1; + while (j >= lower_bound) { + int new_idx = sort_order(j); + if (!bin_op(keys_rnd, old_idx, new_idx)) break; + sort_order(j + 1) = new_idx; + --j; + } + sort_order(j + 1) = old_idx; + } + } + } +}; + +} // namespace Kokkos +#endif diff --git a/lib/kokkos/algorithms/src/sorting/Kokkos_NestedSortPublicAPI.hpp b/lib/kokkos/algorithms/src/sorting/Kokkos_NestedSortPublicAPI.hpp new file mode 100644 index 0000000000..dd468e0734 --- /dev/null +++ b/lib/kokkos/algorithms/src/sorting/Kokkos_NestedSortPublicAPI.hpp @@ -0,0 +1,100 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER + +#ifndef KOKKOS_NESTED_SORT_PUBLIC_API_HPP_ +#define KOKKOS_NESTED_SORT_PUBLIC_API_HPP_ + +#include "impl/Kokkos_NestedSortImpl.hpp" +#include +#include + +namespace Kokkos { +namespace Experimental { + +template +KOKKOS_INLINE_FUNCTION void sort_team(const TeamMember& t, + const ViewType& view) { + Impl::sort_nested_impl(t, view, nullptr, + Experimental::Impl::StdAlgoLessThanBinaryPredicate< + typename ViewType::non_const_value_type>(), + Impl::NestedRange()); +} + +template +KOKKOS_INLINE_FUNCTION void sort_team(const TeamMember& t, const ViewType& view, + const Comparator& comp) { + Impl::sort_nested_impl(t, view, nullptr, comp, Impl::NestedRange()); +} + +template +KOKKOS_INLINE_FUNCTION void sort_by_key_team(const TeamMember& t, + const KeyViewType& keyView, + const ValueViewType& valueView) { + Impl::sort_nested_impl(t, keyView, valueView, + Experimental::Impl::StdAlgoLessThanBinaryPredicate< + typename KeyViewType::non_const_value_type>(), + Impl::NestedRange()); +} + +template +KOKKOS_INLINE_FUNCTION void sort_by_key_team(const TeamMember& t, + const KeyViewType& keyView, + const ValueViewType& valueView, + const Comparator& comp) { + Impl::sort_nested_impl(t, keyView, valueView, comp, + Impl::NestedRange()); +} + +template +KOKKOS_INLINE_FUNCTION void sort_thread(const TeamMember& t, + const ViewType& view) { + Impl::sort_nested_impl(t, view, nullptr, + Experimental::Impl::StdAlgoLessThanBinaryPredicate< + typename ViewType::non_const_value_type>(), + Impl::NestedRange()); +} + +template +KOKKOS_INLINE_FUNCTION void sort_thread(const TeamMember& t, + const ViewType& view, + const Comparator& comp) { + Impl::sort_nested_impl(t, view, nullptr, comp, Impl::NestedRange()); +} + +template +KOKKOS_INLINE_FUNCTION void sort_by_key_thread(const TeamMember& t, + const KeyViewType& keyView, + const ValueViewType& valueView) { + Impl::sort_nested_impl(t, keyView, valueView, + Experimental::Impl::StdAlgoLessThanBinaryPredicate< + typename KeyViewType::non_const_value_type>(), + Impl::NestedRange()); +} + +template +KOKKOS_INLINE_FUNCTION void sort_by_key_thread(const TeamMember& t, + const KeyViewType& keyView, + const ValueViewType& valueView, + const Comparator& comp) { + Impl::sort_nested_impl(t, keyView, valueView, comp, + Impl::NestedRange()); +} + +} // namespace Experimental +} // namespace Kokkos +#endif diff --git a/lib/kokkos/algorithms/src/sorting/Kokkos_SortPublicAPI.hpp b/lib/kokkos/algorithms/src/sorting/Kokkos_SortPublicAPI.hpp new file mode 100644 index 0000000000..a763c41e58 --- /dev/null +++ b/lib/kokkos/algorithms/src/sorting/Kokkos_SortPublicAPI.hpp @@ -0,0 +1,194 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER + +#ifndef KOKKOS_SORT_PUBLIC_API_HPP_ +#define KOKKOS_SORT_PUBLIC_API_HPP_ + +#include "./impl/Kokkos_SortImpl.hpp" +#include +#include +#include + +namespace Kokkos { + +// --------------------------------------------------------------- +// basic overloads +// --------------------------------------------------------------- + +template +void sort([[maybe_unused]] const ExecutionSpace& exec, + const Kokkos::View& view) { + // constraints + using ViewType = Kokkos::View; + using MemSpace = typename ViewType::memory_space; + static_assert( + ViewType::rank == 1 && + (std::is_same_v || + std::is_same_v || + std::is_same_v), + "Kokkos::sort without comparator: supports 1D Views with LayoutRight, " + "LayoutLeft or LayoutStride."); + + static_assert(SpaceAccessibility::accessible, + "Kokkos::sort: execution space instance is not able to access " + "the memory space of the " + "View argument!"); + + if (view.extent(0) <= 1) { + return; + } + + if constexpr (Impl::better_off_calling_std_sort_v) { + auto first = ::Kokkos::Experimental::begin(view); + auto last = ::Kokkos::Experimental::end(view); + std::sort(first, last); + } else { + Impl::sort_device_view_without_comparator(exec, view); + } +} + +template +void sort(const Kokkos::View& view) { + using ViewType = Kokkos::View; + static_assert(ViewType::rank == 1, + "Kokkos::sort: currently only supports rank-1 Views."); + + Kokkos::fence("Kokkos::sort: before"); + + if (view.extent(0) <= 1) { + return; + } + + typename ViewType::execution_space exec; + sort(exec, view); + exec.fence("Kokkos::sort: fence after sorting"); +} + +// --------------------------------------------------------------- +// overloads supporting a custom comparator +// --------------------------------------------------------------- +template +void sort([[maybe_unused]] const ExecutionSpace& exec, + const Kokkos::View& view, + const ComparatorType& comparator) { + // constraints + using ViewType = Kokkos::View; + using MemSpace = typename ViewType::memory_space; + static_assert( + ViewType::rank == 1 && + (std::is_same_v || + std::is_same_v || + std::is_same_v), + "Kokkos::sort with comparator: supports 1D Views with LayoutRight, " + "LayoutLeft or LayoutStride."); + + static_assert(SpaceAccessibility::accessible, + "Kokkos::sort: execution space instance is not able to access " + "the memory space of the View argument!"); + + if (view.extent(0) <= 1) { + return; + } + + if constexpr (Impl::better_off_calling_std_sort_v) { + auto first = ::Kokkos::Experimental::begin(view); + auto last = ::Kokkos::Experimental::end(view); + std::sort(first, last, comparator); + } else { + Impl::sort_device_view_with_comparator(exec, view, comparator); + } +} + +template +void sort(const Kokkos::View& view, + const ComparatorType& comparator) { + using ViewType = Kokkos::View; + static_assert( + ViewType::rank == 1 && + (std::is_same_v || + std::is_same_v || + std::is_same_v), + "Kokkos::sort with comparator: supports 1D Views with LayoutRight, " + "LayoutLeft or LayoutStride."); + + Kokkos::fence("Kokkos::sort with comparator: before"); + + if (view.extent(0) <= 1) { + return; + } + + typename ViewType::execution_space exec; + sort(exec, view, comparator); + exec.fence("Kokkos::sort with comparator: fence after sorting"); +} + +// --------------------------------------------------------------- +// overloads for sorting a view with a subrange +// specified via integers begin, end +// --------------------------------------------------------------- + +template +std::enable_if_t::value> sort( + const ExecutionSpace& exec, ViewType view, size_t const begin, + size_t const end) { + // view must be rank-1 because the Impl::min_max_functor + // used below only works for rank-1 views for now + static_assert(ViewType::rank == 1, + "Kokkos::sort: currently only supports rank-1 Views."); + + if (view.extent(0) <= 1) { + return; + } + + using range_policy = Kokkos::RangePolicy; + using CompType = BinOp1D; + + Kokkos::MinMaxScalar result; + Kokkos::MinMax reducer(result); + + parallel_reduce("Kokkos::Sort::FindExtent", range_policy(exec, begin, end), + Impl::min_max_functor(view), reducer); + + if (result.min_val == result.max_val) return; + + BinSort bin_sort( + exec, view, begin, end, + CompType((end - begin) / 2, result.min_val, result.max_val), true); + + bin_sort.create_permute_vector(exec); + bin_sort.sort(exec, view, begin, end); +} + +template +void sort(ViewType view, size_t const begin, size_t const end) { + // same constraints as the overload above which this gets dispatched to + static_assert(ViewType::rank == 1, + "Kokkos::sort: currently only supports rank-1 Views."); + + Kokkos::fence("Kokkos::sort: before"); + + if (view.extent(0) <= 1) { + return; + } + + typename ViewType::execution_space exec; + sort(exec, view, begin, end); + exec.fence("Kokkos::Sort: fence after sorting"); +} + +} // namespace Kokkos +#endif diff --git a/lib/kokkos/algorithms/src/sorting/impl/Kokkos_CopyOpsForBinSortImpl.hpp b/lib/kokkos/algorithms/src/sorting/impl/Kokkos_CopyOpsForBinSortImpl.hpp new file mode 100644 index 0000000000..07f5926d82 --- /dev/null +++ b/lib/kokkos/algorithms/src/sorting/impl/Kokkos_CopyOpsForBinSortImpl.hpp @@ -0,0 +1,61 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER + +#ifndef KOKKOS_COPY_OPS_FOR_BINSORT_IMPL_HPP_ +#define KOKKOS_COPY_OPS_FOR_BINSORT_IMPL_HPP_ + +#include +#include + +namespace Kokkos { +namespace Impl { + +template +struct CopyOp; + +template +struct CopyOp { + KOKKOS_INLINE_FUNCTION + static void copy(DstViewType const& dst, size_t i_dst, SrcViewType const& src, + size_t i_src) { + dst(i_dst) = src(i_src); + } +}; + +template +struct CopyOp { + KOKKOS_INLINE_FUNCTION + static void copy(DstViewType const& dst, size_t i_dst, SrcViewType const& src, + size_t i_src) { + for (int j = 0; j < (int)dst.extent(1); j++) dst(i_dst, j) = src(i_src, j); + } +}; + +template +struct CopyOp { + KOKKOS_INLINE_FUNCTION + static void copy(DstViewType const& dst, size_t i_dst, SrcViewType const& src, + size_t i_src) { + for (int j = 0; j < dst.extent(1); j++) + for (int k = 0; k < dst.extent(2); k++) + dst(i_dst, j, k) = src(i_src, j, k); + } +}; + +} // namespace Impl +} // namespace Kokkos + +#endif diff --git a/lib/kokkos/algorithms/src/sorting/impl/Kokkos_NestedSortImpl.hpp b/lib/kokkos/algorithms/src/sorting/impl/Kokkos_NestedSortImpl.hpp new file mode 100644 index 0000000000..50ac823319 --- /dev/null +++ b/lib/kokkos/algorithms/src/sorting/impl/Kokkos_NestedSortImpl.hpp @@ -0,0 +1,115 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER + +#ifndef KOKKOS_NESTED_SORT_IMPL_HPP_ +#define KOKKOS_NESTED_SORT_IMPL_HPP_ + +#include +#include + +namespace Kokkos { +namespace Experimental { +namespace Impl { + +// true for TeamVectorRange, false for ThreadVectorRange +template +struct NestedRange {}; + +// Specialization for team-level +template <> +struct NestedRange { + template + KOKKOS_FUNCTION static auto create(const TeamMember& t, SizeType len) { + return Kokkos::TeamVectorRange(t, len); + } + template + KOKKOS_FUNCTION static void barrier(const TeamMember& t) { + t.team_barrier(); + } +}; + +// Specialization for thread-level +template <> +struct NestedRange { + template + KOKKOS_FUNCTION static auto create(const TeamMember& t, SizeType len) { + return Kokkos::ThreadVectorRange(t, len); + } + // Barrier is no-op, as vector lanes of a thread are implicitly synchronized + // after parallel region + template + KOKKOS_FUNCTION static void barrier(const TeamMember&) {} +}; + +// When just doing sort (not sort_by_key), use nullptr_t for ValueViewType. +// This only takes the NestedRange instance for template arg deduction. +template +KOKKOS_INLINE_FUNCTION void sort_nested_impl( + const TeamMember& t, const KeyViewType& keyView, + [[maybe_unused]] const ValueViewType& valueView, const Comparator& comp, + const NestedRange) { + using SizeType = typename KeyViewType::size_type; + using KeyType = typename KeyViewType::non_const_value_type; + using Range = NestedRange; + SizeType n = keyView.extent(0); + SizeType npot = 1; + SizeType levels = 0; + // FIXME: ceiling power-of-two is a common thing to need - make it a utility + while (npot < n) { + levels++; + npot <<= 1; + } + for (SizeType i = 0; i < levels; i++) { + for (SizeType j = 0; j <= i; j++) { + // n/2 pairs of items are compared in parallel + Kokkos::parallel_for(Range::create(t, npot / 2), [=](const SizeType k) { + // How big are the brown/pink boxes? + // (Terminology comes from Wikipedia diagram) + // https://commons.wikimedia.org/wiki/File:BitonicSort.svg#/media/File:BitonicSort.svg + SizeType boxSize = SizeType(2) << (i - j); + // Which box contains this thread? + SizeType boxID = k >> (i - j); // k * 2 / boxSize; + SizeType boxStart = boxID << (1 + i - j); // boxID * boxSize + SizeType boxOffset = k - (boxStart >> 1); // k - boxID * boxSize / 2; + SizeType elem1 = boxStart + boxOffset; + // In first phase (j == 0, brown box): within a box, compare with the + // opposite value in the box. + // In later phases (j > 0, pink box): within a box, compare with fixed + // distance (boxSize / 2) apart. + SizeType elem2 = (j == 0) ? (boxStart + boxSize - 1 - boxOffset) + : (elem1 + boxSize / 2); + if (elem2 < n) { + KeyType key1 = keyView(elem1); + KeyType key2 = keyView(elem2); + if (comp(key2, key1)) { + keyView(elem1) = key2; + keyView(elem2) = key1; + if constexpr (!std::is_same_v) { + Kokkos::Experimental::swap(valueView(elem1), valueView(elem2)); + } + } + } + }); + Range::barrier(t); + } + } +} + +} // namespace Impl +} // namespace Experimental +} // namespace Kokkos +#endif diff --git a/lib/kokkos/algorithms/src/sorting/impl/Kokkos_SortImpl.hpp b/lib/kokkos/algorithms/src/sorting/impl/Kokkos_SortImpl.hpp new file mode 100644 index 0000000000..d87ab09e77 --- /dev/null +++ b/lib/kokkos/algorithms/src/sorting/impl/Kokkos_SortImpl.hpp @@ -0,0 +1,369 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER + +#ifndef KOKKOS_SORT_FREE_FUNCS_IMPL_HPP_ +#define KOKKOS_SORT_FREE_FUNCS_IMPL_HPP_ + +#include "../Kokkos_BinOpsPublicAPI.hpp" +#include "../Kokkos_BinSortPublicAPI.hpp" +#include +#include +#include + +#if defined(KOKKOS_ENABLE_CUDA) + +// Workaround for `Instruction 'shfl' without '.sync' is not supported on +// .target sm_70 and higher from PTX ISA version 6.4`. +// Also see https://github.com/NVIDIA/cub/pull/170. +#if !defined(CUB_USE_COOPERATIVE_GROUPS) +#define CUB_USE_COOPERATIVE_GROUPS +#endif + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wshadow" + +#if defined(KOKKOS_COMPILER_CLANG) +// Some versions of Clang fail to compile Thrust, failing with errors like +// this: +// /thrust/system/cuda/detail/core/agent_launcher.h:557:11: +// error: use of undeclared identifier 'va_printf' +// The exact combination of versions for Clang and Thrust (or CUDA) for this +// failure was not investigated, however even very recent version combination +// (Clang 10.0.0 and Cuda 10.0) demonstrated failure. +// +// Defining _CubLog here locally allows us to avoid that code path, however +// disabling some debugging diagnostics +#pragma push_macro("_CubLog") +#ifdef _CubLog +#undef _CubLog +#endif +#define _CubLog +#include +#include +#pragma pop_macro("_CubLog") +#else +#include +#include +#endif + +#pragma GCC diagnostic pop + +#endif + +#if defined(KOKKOS_ENABLE_ONEDPL) +#include +#include +#endif + +namespace Kokkos { +namespace Impl { + +template +struct better_off_calling_std_sort : std::false_type {}; + +#if defined KOKKOS_ENABLE_SERIAL +template <> +struct better_off_calling_std_sort : std::true_type {}; +#endif + +#if defined KOKKOS_ENABLE_OPENMP +template <> +struct better_off_calling_std_sort : std::true_type {}; +#endif + +#if defined KOKKOS_ENABLE_THREADS +template <> +struct better_off_calling_std_sort : std::true_type {}; +#endif + +#if defined KOKKOS_ENABLE_HPX +template <> +struct better_off_calling_std_sort : std::true_type { +}; +#endif + +template +inline constexpr bool better_off_calling_std_sort_v = + better_off_calling_std_sort::value; + +template +struct min_max_functor { + using minmax_scalar = + Kokkos::MinMaxScalar; + + ViewType view; + min_max_functor(const ViewType& view_) : view(view_) {} + + KOKKOS_INLINE_FUNCTION + void operator()(const size_t& i, minmax_scalar& minmax) const { + if (view(i) < minmax.min_val) minmax.min_val = view(i); + if (view(i) > minmax.max_val) minmax.max_val = view(i); + } +}; + +template +void sort_via_binsort(const ExecutionSpace& exec, + const Kokkos::View& view) { + // Although we are using BinSort below, which could work on rank-2 views, + // for now view must be rank-1 because the min_max_functor + // used below only works for rank-1 views + using ViewType = Kokkos::View; + static_assert(ViewType::rank == 1, + "Kokkos::sort: currently only supports rank-1 Views."); + + if (view.extent(0) <= 1) { + return; + } + + Kokkos::MinMaxScalar result; + Kokkos::MinMax reducer(result); + parallel_reduce("Kokkos::Sort::FindExtent", + Kokkos::RangePolicy( + exec, 0, view.extent(0)), + min_max_functor(view), reducer); + if (result.min_val == result.max_val) return; + // For integral types the number of bins may be larger than the range + // in which case we can exactly have one unique value per bin + // and then don't need to sort bins. + bool sort_in_bins = true; + // TODO: figure out better max_bins then this ... + int64_t max_bins = view.extent(0) / 2; + if (std::is_integral::value) { + // Cast to double to avoid possible overflow when using integer + auto const max_val = static_cast(result.max_val); + auto const min_val = static_cast(result.min_val); + // using 10M as the cutoff for special behavior (roughly 40MB for the count + // array) + if ((max_val - min_val) < 10000000) { + max_bins = max_val - min_val + 1; + sort_in_bins = false; + } + } + if (std::is_floating_point::value) { + KOKKOS_ASSERT(std::isfinite(static_cast(result.max_val) - + static_cast(result.min_val))); + } + + using CompType = BinOp1D; + BinSort bin_sort( + view, CompType(max_bins, result.min_val, result.max_val), sort_in_bins); + bin_sort.create_permute_vector(exec); + bin_sort.sort(exec, view); +} + +#if defined(KOKKOS_ENABLE_CUDA) +template +void sort_cudathrust(const Cuda& space, + const Kokkos::View& view, + MaybeComparator&&... maybeComparator) { + using ViewType = Kokkos::View; + static_assert(ViewType::rank == 1, + "Kokkos::sort: currently only supports rank-1 Views."); + + if (view.extent(0) <= 1) { + return; + } + const auto exec = thrust::cuda::par.on(space.cuda_stream()); + auto first = ::Kokkos::Experimental::begin(view); + auto last = ::Kokkos::Experimental::end(view); + thrust::sort(exec, first, last, + std::forward(maybeComparator)...); +} +#endif + +#if defined(KOKKOS_ENABLE_ONEDPL) +template +void sort_onedpl(const Kokkos::Experimental::SYCL& space, + const Kokkos::View& view, + MaybeComparator&&... maybeComparator) { + using ViewType = Kokkos::View; + static_assert(SpaceAccessibility::accessible, + "SYCL execution space is not able to access the memory space " + "of the View argument!"); + + static_assert( + (ViewType::rank == 1) && + (std::is_same_v || + std::is_same_v || + std::is_same_v), + "SYCL sort only supports contiguous rank-1 Views with LayoutLeft, " + "LayoutRight or LayoutStride" + "For the latter, this means the View must have stride(0) = 1, enforced " + "at runtime."); + + if (view.stride(0) != 1) { + Kokkos::abort("SYCL sort only supports rank-1 Views with stride(0) = 1."); + } + + if (view.extent(0) <= 1) { + return; + } + + // Can't use Experimental::begin/end here since the oneDPL then assumes that + // the data is on the host. + auto queue = space.sycl_queue(); + auto policy = oneapi::dpl::execution::make_device_policy(queue); + const int n = view.extent(0); + oneapi::dpl::sort(policy, view.data(), view.data() + n, + std::forward(maybeComparator)...); +} +#endif + +template +void copy_to_host_run_stdsort_copy_back( + const ExecutionSpace& exec, + const Kokkos::View& view, + MaybeComparator&&... maybeComparator) { + namespace KE = ::Kokkos::Experimental; + + using ViewType = Kokkos::View; + using layout = typename ViewType::array_layout; + if constexpr (std::is_same_v) { + // for strided views we cannot just deep_copy from device to host, + // so we need to do a few more jumps + using view_value_type = typename ViewType::non_const_value_type; + using view_exespace = typename ViewType::execution_space; + using view_deep_copyable_t = Kokkos::View; + view_deep_copyable_t view_dc("view_dc", view.extent(0)); + KE::copy(exec, view, view_dc); + + // run sort on the mirror of view_dc + auto mv_h = create_mirror_view_and_copy(Kokkos::HostSpace(), view_dc); + auto first = KE::begin(mv_h); + auto last = KE::end(mv_h); + std::sort(first, last, std::forward(maybeComparator)...); + Kokkos::deep_copy(exec, view_dc, mv_h); + + // copy back to argument view + KE::copy(exec, KE::cbegin(view_dc), KE::cend(view_dc), KE::begin(view)); + } else { + auto view_h = create_mirror_view_and_copy(Kokkos::HostSpace(), view); + auto first = KE::begin(view_h); + auto last = KE::end(view_h); + std::sort(first, last, std::forward(maybeComparator)...); + Kokkos::deep_copy(exec, view, view_h); + } +} + +// -------------------------------------------------- +// +// specialize cases for sorting without comparator +// +// -------------------------------------------------- + +#if defined(KOKKOS_ENABLE_CUDA) +template +void sort_device_view_without_comparator( + const Cuda& exec, const Kokkos::View& view) { + sort_cudathrust(exec, view); +} +#endif + +#if defined(KOKKOS_ENABLE_ONEDPL) +template +void sort_device_view_without_comparator( + const Kokkos::Experimental::SYCL& exec, + const Kokkos::View& view) { + using ViewType = Kokkos::View; + static_assert( + (ViewType::rank == 1) && + (std::is_same_v || + std::is_same_v || + std::is_same_v), + "sort_device_view_without_comparator: supports rank-1 Views " + "with LayoutLeft, LayoutRight or LayoutStride"); + + if (view.stride(0) == 1) { + sort_onedpl(exec, view); + } else { + copy_to_host_run_stdsort_copy_back(exec, view); + } +} +#endif + +// fallback case +template +std::enable_if_t::value> +sort_device_view_without_comparator( + const ExecutionSpace& exec, + const Kokkos::View& view) { + sort_via_binsort(exec, view); +} + +// -------------------------------------------------- +// +// specialize cases for sorting with comparator +// +// -------------------------------------------------- + +#if defined(KOKKOS_ENABLE_CUDA) +template +void sort_device_view_with_comparator( + const Cuda& exec, const Kokkos::View& view, + const ComparatorType& comparator) { + sort_cudathrust(exec, view, comparator); +} +#endif + +#if defined(KOKKOS_ENABLE_ONEDPL) +template +void sort_device_view_with_comparator( + const Kokkos::Experimental::SYCL& exec, + const Kokkos::View& view, + const ComparatorType& comparator) { + using ViewType = Kokkos::View; + static_assert( + (ViewType::rank == 1) && + (std::is_same_v || + std::is_same_v || + std::is_same_v), + "sort_device_view_with_comparator: supports rank-1 Views " + "with LayoutLeft, LayoutRight or LayoutStride"); + + if (view.stride(0) == 1) { + sort_onedpl(exec, view, comparator); + } else { + copy_to_host_run_stdsort_copy_back(exec, view, comparator); + } +} +#endif + +template +std::enable_if_t::value> +sort_device_view_with_comparator( + const ExecutionSpace& exec, + const Kokkos::View& view, + const ComparatorType& comparator) { + // This is a fallback case if a more specialized overload does not exist: + // for now, this fallback copies data to host, runs std::sort + // and then copies data back. Potentially, this can later be changed + // with a better solution like our own quicksort on device or similar. + + using ViewType = Kokkos::View; + using MemSpace = typename ViewType::memory_space; + static_assert(!SpaceAccessibility::accessible, + "Impl::sort_device_view_with_comparator: should not be called " + "on a view that is already accessible on the host"); + + copy_to_host_run_stdsort_copy_back(exec, view, comparator); +} + +} // namespace Impl +} // namespace Kokkos +#endif diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AdjacentDifference.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AdjacentDifference.hpp index 38dcd1a674..f254686dba 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AdjacentDifference.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AdjacentDifference.hpp @@ -23,64 +23,85 @@ namespace Kokkos { namespace Experimental { -template -std::enable_if_t::value, - OutputIteratorType> -adjacent_difference(const ExecutionSpace& ex, InputIteratorType first_from, - InputIteratorType last_from, - OutputIteratorType first_dest) { +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIteratorType, + typename OutputIteratorType, + std::enable_if_t::value && + ::Kokkos::is_execution_space::value, + int> = 0> +OutputIteratorType adjacent_difference(const ExecutionSpace& ex, + InputIteratorType first_from, + InputIteratorType last_from, + OutputIteratorType first_dest) { using value_type1 = typename InputIteratorType::value_type; using value_type2 = typename OutputIteratorType::value_type; using binary_op = Impl::StdAdjacentDifferenceDefaultBinaryOpFunctor; - return Impl::adjacent_difference_impl( + return Impl::adjacent_difference_exespace_impl( "Kokkos::adjacent_difference_iterator_api", ex, first_from, last_from, first_dest, binary_op()); } -template -std::enable_if_t::value, - OutputIteratorType> -adjacent_difference(const ExecutionSpace& ex, InputIteratorType first_from, - InputIteratorType last_from, OutputIteratorType first_dest, - BinaryOp bin_op) { - return Impl::adjacent_difference_impl( +template < + typename ExecutionSpace, typename InputIteratorType, + typename OutputIteratorType, typename BinaryOp, + std::enable_if_t::value && + ::Kokkos::is_execution_space::value, + int> = 0> +OutputIteratorType adjacent_difference(const ExecutionSpace& ex, + InputIteratorType first_from, + InputIteratorType last_from, + OutputIteratorType first_dest, + BinaryOp bin_op) { + return Impl::adjacent_difference_exespace_impl( "Kokkos::adjacent_difference_iterator_api", ex, first_from, last_from, first_dest, bin_op); } -template -std::enable_if_t::value, - OutputIteratorType> -adjacent_difference(const std::string& label, const ExecutionSpace& ex, - InputIteratorType first_from, InputIteratorType last_from, - OutputIteratorType first_dest) { +template < + typename ExecutionSpace, typename InputIteratorType, + typename OutputIteratorType, + std::enable_if_t::value && + ::Kokkos::is_execution_space::value, + int> = 0> +OutputIteratorType adjacent_difference(const std::string& label, + const ExecutionSpace& ex, + InputIteratorType first_from, + InputIteratorType last_from, + OutputIteratorType first_dest) { using value_type1 = typename InputIteratorType::value_type; using value_type2 = typename OutputIteratorType::value_type; using binary_op = Impl::StdAdjacentDifferenceDefaultBinaryOpFunctor; - return Impl::adjacent_difference_impl(label, ex, first_from, last_from, - first_dest, binary_op()); + return Impl::adjacent_difference_exespace_impl( + label, ex, first_from, last_from, first_dest, binary_op()); } -template -std::enable_if_t::value, - OutputIteratorType> -adjacent_difference(const std::string& label, const ExecutionSpace& ex, - InputIteratorType first_from, InputIteratorType last_from, - OutputIteratorType first_dest, BinaryOp bin_op) { - return Impl::adjacent_difference_impl(label, ex, first_from, last_from, - first_dest, bin_op); +template < + typename ExecutionSpace, typename InputIteratorType, + typename OutputIteratorType, typename BinaryOp, + std::enable_if_t::value && + ::Kokkos::is_execution_space::value, + int> = 0> +OutputIteratorType adjacent_difference(const std::string& label, + const ExecutionSpace& ex, + InputIteratorType first_from, + InputIteratorType last_from, + OutputIteratorType first_dest, + BinaryOp bin_op) { + return Impl::adjacent_difference_exespace_impl(label, ex, first_from, + last_from, first_dest, bin_op); } -template +template ::value, + int> = 0> auto adjacent_difference( const ExecutionSpace& ex, const ::Kokkos::View& view_from, @@ -96,13 +117,15 @@ auto adjacent_difference( using binary_op = Impl::StdAdjacentDifferenceDefaultBinaryOpFunctor; - return Impl::adjacent_difference_impl( + return Impl::adjacent_difference_exespace_impl( "Kokkos::adjacent_difference_view_api", ex, KE::cbegin(view_from), KE::cend(view_from), KE::begin(view_dest), binary_op()); } -template +template ::value, + int> = 0> auto adjacent_difference( const ExecutionSpace& ex, const ::Kokkos::View& view_from, @@ -111,13 +134,15 @@ auto adjacent_difference( namespace KE = ::Kokkos::Experimental; Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); - return Impl::adjacent_difference_impl( + return Impl::adjacent_difference_exespace_impl( "Kokkos::adjacent_difference_view_api", ex, KE::cbegin(view_from), KE::cend(view_from), KE::begin(view_dest), bin_op); } -template +template ::value, + int> = 0> auto adjacent_difference( const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view_from, @@ -134,13 +159,15 @@ auto adjacent_difference( Impl::StdAdjacentDifferenceDefaultBinaryOpFunctor; - return Impl::adjacent_difference_impl(label, ex, KE::cbegin(view_from), - KE::cend(view_from), - KE::begin(view_dest), binary_op()); + return Impl::adjacent_difference_exespace_impl( + label, ex, KE::cbegin(view_from), KE::cend(view_from), + KE::begin(view_dest), binary_op()); } -template +template ::value, + int> = 0> auto adjacent_difference( const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view_from, @@ -149,9 +176,85 @@ auto adjacent_difference( namespace KE = ::Kokkos::Experimental; Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); - return Impl::adjacent_difference_impl(label, ex, KE::cbegin(view_from), - KE::cend(view_from), - KE::begin(view_dest), bin_op); + return Impl::adjacent_difference_exespace_impl( + label, ex, KE::cbegin(view_from), KE::cend(view_from), + KE::begin(view_dest), bin_op); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template ::value && + ::Kokkos::is_team_handle::value, + int> = 0> +KOKKOS_FUNCTION OutputIteratorType adjacent_difference( + const TeamHandleType& teamHandle, InputIteratorType first_from, + InputIteratorType last_from, OutputIteratorType first_dest) { + using value_type1 = typename InputIteratorType::value_type; + using value_type2 = typename OutputIteratorType::value_type; + using binary_op = + Impl::StdAdjacentDifferenceDefaultBinaryOpFunctor; + return Impl::adjacent_difference_team_impl(teamHandle, first_from, last_from, + first_dest, binary_op()); +} + +template ::value && + ::Kokkos::is_team_handle::value, + int> = 0> +KOKKOS_FUNCTION OutputIteratorType +adjacent_difference(const TeamHandleType& teamHandle, + InputIteratorType first_from, InputIteratorType last_from, + OutputIteratorType first_dest, BinaryOp bin_op) { + return Impl::adjacent_difference_team_impl(teamHandle, first_from, last_from, + first_dest, bin_op); +} + +template < + typename TeamHandleType, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION auto adjacent_difference( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view_from, + const ::Kokkos::View& view_dest) { + namespace KE = ::Kokkos::Experimental; + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + + using view_type1 = ::Kokkos::View; + using view_type2 = ::Kokkos::View; + using value_type1 = typename view_type1::value_type; + using value_type2 = typename view_type2::value_type; + using binary_op = + Impl::StdAdjacentDifferenceDefaultBinaryOpFunctor; + return Impl::adjacent_difference_team_impl(teamHandle, KE::cbegin(view_from), + KE::cend(view_from), + KE::begin(view_dest), binary_op()); +} + +template < + typename TeamHandleType, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryOp, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION auto adjacent_difference( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view_from, + const ::Kokkos::View& view_dest, + BinaryOp bin_op) { + namespace KE = ::Kokkos::Experimental; + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + return Impl::adjacent_difference_team_impl(teamHandle, KE::cbegin(view_from), + KE::cend(view_from), + KE::begin(view_dest), bin_op); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AdjacentFind.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AdjacentFind.hpp index 43c2b66010..ac476ca5bf 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AdjacentFind.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AdjacentFind.hpp @@ -23,71 +23,144 @@ namespace Kokkos { namespace Experimental { +// +// overload set accepting execution space +// + // overload set1 -template +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t, int> = 0> IteratorType adjacent_find(const ExecutionSpace& ex, IteratorType first, IteratorType last) { - return Impl::adjacent_find_impl("Kokkos::adjacent_find_iterator_api_default", - ex, first, last); + return Impl::adjacent_find_exespace_impl( + "Kokkos::adjacent_find_iterator_api_default", ex, first, last); } -template +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t, int> = 0> IteratorType adjacent_find(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last) { - return Impl::adjacent_find_impl(label, ex, first, last); + return Impl::adjacent_find_exespace_impl(label, ex, first, last); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t, int> = 0> auto adjacent_find(const ExecutionSpace& ex, const ::Kokkos::View& v) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::adjacent_find_impl("Kokkos::adjacent_find_view_api_default", ex, - KE::begin(v), KE::end(v)); + return Impl::adjacent_find_exespace_impl( + "Kokkos::adjacent_find_view_api_default", ex, KE::begin(v), KE::end(v)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t, int> = 0> auto adjacent_find(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::adjacent_find_impl(label, ex, KE::begin(v), KE::end(v)); + return Impl::adjacent_find_exespace_impl(label, ex, KE::begin(v), KE::end(v)); } // overload set2 -template +template < + typename ExecutionSpace, typename IteratorType, + typename BinaryPredicateType, + std::enable_if_t, int> = 0> IteratorType adjacent_find(const ExecutionSpace& ex, IteratorType first, IteratorType last, BinaryPredicateType pred) { - return Impl::adjacent_find_impl("Kokkos::adjacent_find_iterator_api_default", - ex, first, last, pred); + return Impl::adjacent_find_exespace_impl( + "Kokkos::adjacent_find_iterator_api_default", ex, first, last, pred); } -template +template < + typename ExecutionSpace, typename IteratorType, + typename BinaryPredicateType, + std::enable_if_t, int> = 0> IteratorType adjacent_find(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, BinaryPredicateType pred) { - return Impl::adjacent_find_impl(label, ex, first, last, pred); + return Impl::adjacent_find_exespace_impl(label, ex, first, last, pred); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename BinaryPredicateType, + std::enable_if_t, int> = 0> auto adjacent_find(const ExecutionSpace& ex, const ::Kokkos::View& v, BinaryPredicateType pred) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::adjacent_find_impl("Kokkos::adjacent_find_view_api_default", ex, - KE::begin(v), KE::end(v), pred); + return Impl::adjacent_find_exespace_impl( + "Kokkos::adjacent_find_view_api_default", ex, KE::begin(v), KE::end(v), + pred); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename BinaryPredicateType, + std::enable_if_t, int> = 0> auto adjacent_find(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v, BinaryPredicateType pred) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::adjacent_find_impl(label, ex, KE::begin(v), KE::end(v), pred); + return Impl::adjacent_find_exespace_impl(label, ex, KE::begin(v), KE::end(v), + pred); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// + +// overload set1 +template , int> = 0> +KOKKOS_FUNCTION IteratorType adjacent_find(const TeamHandleType& teamHandle, + IteratorType first, + IteratorType last) { + return Impl::adjacent_find_team_impl(teamHandle, first, last); +} + +template , int> = 0> +KOKKOS_FUNCTION auto adjacent_find( + const TeamHandleType& teamHandle, + const ::Kokkos::View& v) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + namespace KE = ::Kokkos::Experimental; + return Impl::adjacent_find_team_impl(teamHandle, KE::begin(v), KE::end(v)); +} + +// overload set2 +template , int> = 0> +KOKKOS_FUNCTION IteratorType adjacent_find(const TeamHandleType& teamHandle, + IteratorType first, + IteratorType last, + BinaryPredicateType pred) { + return Impl::adjacent_find_team_impl(teamHandle, first, last, pred); +} + +template , int> = 0> +KOKKOS_FUNCTION auto adjacent_find( + const TeamHandleType& teamHandle, + const ::Kokkos::View& v, + BinaryPredicateType pred) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + namespace KE = ::Kokkos::Experimental; + return Impl::adjacent_find_team_impl(teamHandle, KE::begin(v), KE::end(v), + pred); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AllOf.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AllOf.hpp index 2ffec7e144..d6ed4c4a7e 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AllOf.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AllOf.hpp @@ -23,41 +23,79 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool all_of(const ExecutionSpace& ex, InputIterator first, InputIterator last, Predicate predicate) { - return Impl::all_of_impl("Kokkos::all_of_iterator_api_default", ex, first, - last, predicate); + return Impl::all_of_exespace_impl("Kokkos::all_of_iterator_api_default", ex, + first, last, predicate); } -template +template < + typename ExecutionSpace, typename InputIterator, typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool all_of(const std::string& label, const ExecutionSpace& ex, InputIterator first, InputIterator last, Predicate predicate) { - return Impl::all_of_impl(label, ex, first, last, predicate); + return Impl::all_of_exespace_impl(label, ex, first, last, predicate); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool all_of(const ExecutionSpace& ex, const ::Kokkos::View& v, Predicate predicate) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::all_of_impl("Kokkos::all_of_view_api_default", ex, KE::cbegin(v), - KE::cend(v), std::move(predicate)); + return Impl::all_of_exespace_impl("Kokkos::all_of_view_api_default", ex, + KE::cbegin(v), KE::cend(v), + std::move(predicate)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool all_of(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v, Predicate predicate) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::all_of_impl(label, ex, KE::cbegin(v), KE::cend(v), - std::move(predicate)); + return Impl::all_of_exespace_impl(label, ex, KE::cbegin(v), KE::cend(v), + std::move(predicate)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION bool all_of(const TeamHandleType& teamHandle, + InputIterator first, InputIterator last, + Predicate predicate) { + return Impl::all_of_team_impl(teamHandle, first, last, predicate); +} + +template , int> = 0> +KOKKOS_FUNCTION bool all_of(const TeamHandleType& teamHandle, + const ::Kokkos::View& v, + Predicate predicate) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + + namespace KE = ::Kokkos::Experimental; + return Impl::all_of_team_impl(teamHandle, KE::cbegin(v), KE::cend(v), + std::move(predicate)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AnyOf.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AnyOf.hpp index 019c466c6d..82356e6598 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AnyOf.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_AnyOf.hpp @@ -23,41 +23,79 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool any_of(const ExecutionSpace& ex, InputIterator first, InputIterator last, Predicate predicate) { - return Impl::any_of_impl("Kokkos::any_of_view_api_default", ex, first, last, - predicate); + return Impl::any_of_exespace_impl("Kokkos::any_of_view_api_default", ex, + first, last, predicate); } -template +template < + typename ExecutionSpace, typename InputIterator, typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool any_of(const std::string& label, const ExecutionSpace& ex, InputIterator first, InputIterator last, Predicate predicate) { - return Impl::any_of_impl(label, ex, first, last, predicate); + return Impl::any_of_exespace_impl(label, ex, first, last, predicate); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool any_of(const ExecutionSpace& ex, const ::Kokkos::View& v, Predicate predicate) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::any_of_impl("Kokkos::any_of_view_api_default", ex, KE::cbegin(v), - KE::cend(v), std::move(predicate)); + return Impl::any_of_exespace_impl("Kokkos::any_of_view_api_default", ex, + KE::cbegin(v), KE::cend(v), + std::move(predicate)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool any_of(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v, Predicate predicate) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::any_of_impl(label, ex, KE::cbegin(v), KE::cend(v), - std::move(predicate)); + return Impl::any_of_exespace_impl(label, ex, KE::cbegin(v), KE::cend(v), + std::move(predicate)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION bool any_of(const TeamHandleType& teamHandle, + InputIterator first, InputIterator last, + Predicate predicate) { + return Impl::any_of_team_impl(teamHandle, first, last, predicate); +} + +template , int> = 0> +KOKKOS_FUNCTION bool any_of(const TeamHandleType& teamHandle, + const ::Kokkos::View& v, + Predicate predicate) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + + namespace KE = ::Kokkos::Experimental; + return Impl::any_of_team_impl(teamHandle, KE::cbegin(v), KE::cend(v), + std::move(predicate)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Copy.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Copy.hpp index 028f3b66b2..b7ce1ba5ed 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Copy.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Copy.hpp @@ -23,22 +23,31 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator copy(const ExecutionSpace& ex, InputIterator first, InputIterator last, OutputIterator d_first) { - return Impl::copy_impl("Kokkos::copy_iterator_api_default", ex, first, last, - d_first); + return Impl::copy_exespace_impl("Kokkos::copy_iterator_api_default", ex, + first, last, d_first); } -template +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator copy(const std::string& label, const ExecutionSpace& ex, InputIterator first, InputIterator last, OutputIterator d_first) { - return Impl::copy_impl(label, ex, first, last, d_first); + return Impl::copy_exespace_impl(label, ex, first, last, d_first); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto copy(const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest) { @@ -46,12 +55,15 @@ auto copy(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); namespace KE = ::Kokkos::Experimental; - return Impl::copy_impl("Kokkos::copy_view_api_default", ex, - KE::cbegin(source), KE::cend(source), KE::begin(dest)); + return Impl::copy_exespace_impl("Kokkos::copy_view_api_default", ex, + KE::cbegin(source), KE::cend(source), + KE::begin(dest)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto copy(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest) { @@ -59,8 +71,35 @@ auto copy(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); namespace KE = ::Kokkos::Experimental; - return Impl::copy_impl(label, ex, KE::cbegin(source), KE::cend(source), - KE::begin(dest)); + return Impl::copy_exespace_impl(label, ex, KE::cbegin(source), + KE::cend(source), KE::begin(dest)); +} + +// +// overload set accepting team handle +// +template , int> = 0> +KOKKOS_FUNCTION OutputIterator copy(const TeamHandleType& teamHandle, + InputIterator first, InputIterator last, + OutputIterator d_first) { + return Impl::copy_team_impl(teamHandle, first, last, d_first); +} + +template , int> = 0> +KOKKOS_FUNCTION auto copy( + const TeamHandleType& teamHandle, + const ::Kokkos::View& source, + ::Kokkos::View& dest) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); + + namespace KE = ::Kokkos::Experimental; + return Impl::copy_team_impl(teamHandle, KE::cbegin(source), KE::cend(source), + KE::begin(dest)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CopyBackward.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CopyBackward.hpp index deff6baf9a..8f9e0f19b8 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CopyBackward.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CopyBackward.hpp @@ -23,42 +23,81 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType2 copy_backward(const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 d_last) { - return Impl::copy_backward_impl("Kokkos::copy_backward_iterator_api_default", - ex, first, last, d_last); + return Impl::copy_backward_exespace_impl( + "Kokkos::copy_backward_iterator_api_default", ex, first, last, d_last); } -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType2 copy_backward(const std::string& label, const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 d_last) { - return Impl::copy_backward_impl(label, ex, first, last, d_last); + return Impl::copy_backward_exespace_impl(label, ex, first, last, d_last); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto copy_backward(const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::copy_backward_impl("Kokkos::copy_backward_view_api_default", ex, - cbegin(source), cend(source), end(dest)); + return Impl::copy_backward_exespace_impl( + "Kokkos::copy_backward_view_api_default", ex, cbegin(source), + cend(source), end(dest)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto copy_backward(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::copy_backward_impl(label, ex, cbegin(source), cend(source), - end(dest)); + return Impl::copy_backward_exespace_impl(label, ex, cbegin(source), + cend(source), end(dest)); +} + +// +// overload set accepting team handle +// +template , int> = 0> +KOKKOS_FUNCTION IteratorType2 copy_backward(const TeamHandleType& teamHandle, + IteratorType1 first, + IteratorType1 last, + IteratorType2 d_last) { + return Impl::copy_backward_team_impl(teamHandle, first, last, d_last); +} + +template , int> = 0> +KOKKOS_FUNCTION auto copy_backward( + const TeamHandleType& teamHandle, + const ::Kokkos::View& source, + ::Kokkos::View& dest) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); + + return Impl::copy_backward_team_impl(teamHandle, cbegin(source), cend(source), + end(dest)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CopyIf.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CopyIf.hpp index 3db2fc074f..ba18bc76b9 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CopyIf.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CopyIf.hpp @@ -23,46 +23,85 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator copy_if(const ExecutionSpace& ex, InputIterator first, InputIterator last, OutputIterator d_first, Predicate pred) { - return Impl::copy_if_impl("Kokkos::copy_if_iterator_api_default", ex, first, - last, d_first, std::move(pred)); + return Impl::copy_if_exespace_impl("Kokkos::copy_if_iterator_api_default", ex, + first, last, d_first, std::move(pred)); } -template +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator copy_if(const std::string& label, const ExecutionSpace& ex, InputIterator first, InputIterator last, OutputIterator d_first, Predicate pred) { - return Impl::copy_if_impl(label, ex, first, last, d_first, std::move(pred)); + return Impl::copy_if_exespace_impl(label, ex, first, last, d_first, + std::move(pred)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto copy_if(const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest, Predicate pred) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::copy_if_impl("Kokkos::copy_if_view_api_default", ex, - cbegin(source), cend(source), begin(dest), - std::move(pred)); + return Impl::copy_if_exespace_impl("Kokkos::copy_if_view_api_default", ex, + cbegin(source), cend(source), begin(dest), + std::move(pred)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto copy_if(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest, Predicate pred) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::copy_if_impl(label, ex, cbegin(source), cend(source), - begin(dest), std::move(pred)); + return Impl::copy_if_exespace_impl(label, ex, cbegin(source), cend(source), + begin(dest), std::move(pred)); +} + +// +// overload set accepting team handle +// +template , int> = 0> +KOKKOS_FUNCTION OutputIterator copy_if(const TeamHandleType& teamHandle, + InputIterator first, InputIterator last, + OutputIterator d_first, Predicate pred) { + return Impl::copy_if_team_impl(teamHandle, first, last, d_first, + std::move(pred)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto copy_if( + const TeamHandleType& teamHandle, + const ::Kokkos::View& source, + ::Kokkos::View& dest, Predicate pred) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); + + return Impl::copy_if_team_impl(teamHandle, cbegin(source), cend(source), + begin(dest), std::move(pred)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CopyN.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CopyN.hpp index a64f99b5c0..43c9120483 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CopyN.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CopyN.hpp @@ -23,23 +23,32 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename Size, + typename OutputIterator, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator copy_n(const ExecutionSpace& ex, InputIterator first, Size count, OutputIterator result) { - return Impl::copy_n_impl("Kokkos::copy_n_iterator_api_default", ex, first, - count, result); + return Impl::copy_n_exespace_impl("Kokkos::copy_n_iterator_api_default", ex, + first, count, result); } -template +template < + typename ExecutionSpace, typename InputIterator, typename Size, + typename OutputIterator, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator copy_n(const std::string& label, const ExecutionSpace& ex, InputIterator first, Size count, OutputIterator result) { - return Impl::copy_n_impl(label, ex, first, count, result); + return Impl::copy_n_exespace_impl(label, ex, first, count, result); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename Size, typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto copy_n(const ExecutionSpace& ex, const ::Kokkos::View& source, Size count, ::Kokkos::View& dest) { @@ -47,12 +56,14 @@ auto copy_n(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); namespace KE = ::Kokkos::Experimental; - return Impl::copy_n_impl("Kokkos::copy_n_view_api_default", ex, - KE::cbegin(source), count, KE::begin(dest)); + return Impl::copy_n_exespace_impl("Kokkos::copy_n_view_api_default", ex, + KE::cbegin(source), count, KE::begin(dest)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename Size, typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto copy_n(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& source, Size count, ::Kokkos::View& dest) { @@ -60,8 +71,35 @@ auto copy_n(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); namespace KE = ::Kokkos::Experimental; - return Impl::copy_n_impl(label, ex, KE::cbegin(source), count, - KE::begin(dest)); + return Impl::copy_n_exespace_impl(label, ex, KE::cbegin(source), count, + KE::begin(dest)); +} + +// +// overload set accepting team handle +// +template , int> = 0> +KOKKOS_FUNCTION OutputIterator copy_n(const TeamHandleType& teamHandle, + InputIterator first, Size count, + OutputIterator result) { + return Impl::copy_n_team_impl(teamHandle, first, count, result); +} + +template , int> = 0> +KOKKOS_FUNCTION auto copy_n( + const TeamHandleType& teamHandle, + const ::Kokkos::View& source, Size count, + ::Kokkos::View& dest) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); + + namespace KE = ::Kokkos::Experimental; + return Impl::copy_n_team_impl(teamHandle, KE::cbegin(source), count, + KE::begin(dest)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Count.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Count.hpp index 3ac63467ec..f179e88bab 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Count.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Count.hpp @@ -23,41 +23,81 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> typename IteratorType::difference_type count(const ExecutionSpace& ex, IteratorType first, IteratorType last, const T& value) { - return Impl::count_impl("Kokkos::count_iterator_api_default", ex, first, last, - value); + return Impl::count_exespace_impl("Kokkos::count_iterator_api_default", ex, + first, last, value); } -template +template < + typename ExecutionSpace, typename IteratorType, typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> typename IteratorType::difference_type count(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, const T& value) { - return Impl::count_impl(label, ex, first, last, value); + return Impl::count_exespace_impl(label, ex, first, last, value); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto count(const ExecutionSpace& ex, const ::Kokkos::View& v, const T& value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::count_impl("Kokkos::count_view_api_default", ex, KE::cbegin(v), - KE::cend(v), value); + return Impl::count_exespace_impl("Kokkos::count_view_api_default", ex, + KE::cbegin(v), KE::cend(v), value); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto count(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v, const T& value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::count_impl(label, ex, KE::cbegin(v), KE::cend(v), value); + return Impl::count_exespace_impl(label, ex, KE::cbegin(v), KE::cend(v), + value); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// + +template , int> = 0> +KOKKOS_FUNCTION typename IteratorType::difference_type count( + const TeamHandleType& teamHandle, IteratorType first, IteratorType last, + const T& value) { + return Impl::count_team_impl(teamHandle, first, last, value); +} + +template , int> = 0> +KOKKOS_FUNCTION auto count(const TeamHandleType& teamHandle, + const ::Kokkos::View& v, + const T& value) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + + namespace KE = ::Kokkos::Experimental; + return Impl::count_team_impl(teamHandle, KE::cbegin(v), KE::cend(v), value); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CountIf.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CountIf.hpp index b9731d378a..967cf75e7a 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CountIf.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_CountIf.hpp @@ -23,46 +23,84 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> typename IteratorType::difference_type count_if(const ExecutionSpace& ex, IteratorType first, IteratorType last, Predicate predicate) { - return Impl::count_if_impl("Kokkos::count_if_iterator_api_default", ex, first, - last, std::move(predicate)); + return Impl::count_if_exespace_impl("Kokkos::count_if_iterator_api_default", + ex, first, last, std::move(predicate)); } -template +template < + typename ExecutionSpace, typename IteratorType, typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> typename IteratorType::difference_type count_if(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, Predicate predicate) { - return Impl::count_if_impl(label, ex, first, last, std::move(predicate)); + return Impl::count_if_exespace_impl(label, ex, first, last, + std::move(predicate)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto count_if(const ExecutionSpace& ex, const ::Kokkos::View& v, Predicate predicate) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::count_if_impl("Kokkos::count_if_view_api_default", ex, - KE::cbegin(v), KE::cend(v), std::move(predicate)); + return Impl::count_if_exespace_impl("Kokkos::count_if_view_api_default", ex, + KE::cbegin(v), KE::cend(v), + std::move(predicate)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto count_if(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v, Predicate predicate) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::count_if_impl(label, ex, KE::cbegin(v), KE::cend(v), - std::move(predicate)); + return Impl::count_if_exespace_impl(label, ex, KE::cbegin(v), KE::cend(v), + std::move(predicate)); +} + +// +// overload set accepting team handle +// +template , int> = 0> +KOKKOS_FUNCTION typename IteratorType::difference_type count_if( + const TeamHandleType& teamHandle, IteratorType first, IteratorType last, + Predicate predicate) { + return Impl::count_if_team_impl(teamHandle, first, last, + std::move(predicate)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto count_if(const TeamHandleType& teamHandle, + const ::Kokkos::View& v, + Predicate predicate) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + + namespace KE = ::Kokkos::Experimental; + return Impl::count_if_team_impl(teamHandle, KE::cbegin(v), KE::cend(v), + std::move(predicate)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Equal.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Equal.hpp index 37c0d75ef5..a72a49cc22 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Equal.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Equal.hpp @@ -23,50 +23,61 @@ namespace Kokkos { namespace Experimental { -template -std::enable_if_t< ::Kokkos::Experimental::Impl::are_iterators< - IteratorType1, IteratorType2>::value, - bool> -equal(const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, - IteratorType2 first2) { - return Impl::equal_impl("Kokkos::equal_iterator_api_default", ex, first1, - last1, first2); +// +// overload set accepting execution space +// +template && + Kokkos::is_execution_space_v, + int> = 0> +bool equal(const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2) { + return Impl::equal_exespace_impl("Kokkos::equal_iterator_api_default", ex, + first1, last1, first2); } -template -std::enable_if_t< ::Kokkos::Experimental::Impl::are_iterators< - IteratorType1, IteratorType2>::value, - bool> -equal(const std::string& label, const ExecutionSpace& ex, IteratorType1 first1, - IteratorType1 last1, IteratorType2 first2) { - return Impl::equal_impl(label, ex, first1, last1, first2); +template && ::Kokkos:: + is_execution_space_v, + int> = 0> +bool equal(const std::string& label, const ExecutionSpace& ex, + IteratorType1 first1, IteratorType1 last1, IteratorType2 first2) { + return Impl::equal_exespace_impl(label, ex, first1, last1, first2); } -template -std::enable_if_t< ::Kokkos::Experimental::Impl::are_iterators< - IteratorType1, IteratorType2>::value, - bool> -equal(const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, - IteratorType2 first2, BinaryPredicateType predicate) { - return Impl::equal_impl("Kokkos::equal_iterator_api_default", ex, first1, - last1, first2, std::move(predicate)); +template && ::Kokkos:: + is_execution_space_v, + int> = 0> +bool equal(const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, BinaryPredicateType predicate) { + return Impl::equal_exespace_impl("Kokkos::equal_iterator_api_default", ex, + first1, last1, first2, std::move(predicate)); } -template -std::enable_if_t< ::Kokkos::Experimental::Impl::are_iterators< - IteratorType1, IteratorType2>::value, - bool> -equal(const std::string& label, const ExecutionSpace& ex, IteratorType1 first1, - IteratorType1 last1, IteratorType2 first2, - BinaryPredicateType predicate) { - return Impl::equal_impl(label, ex, first1, last1, first2, - std::move(predicate)); +template && ::Kokkos:: + is_execution_space_v, + int> = 0> +bool equal(const std::string& label, const ExecutionSpace& ex, + IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, + BinaryPredicateType predicate) { + return Impl::equal_exespace_impl(label, ex, first1, last1, first2, + std::move(predicate)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool equal(const ExecutionSpace& ex, const ::Kokkos::View& view1, ::Kokkos::View& view2) { @@ -74,13 +85,15 @@ bool equal(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); namespace KE = ::Kokkos::Experimental; - return Impl::equal_impl("Kokkos::equal_view_api_default", ex, - KE::cbegin(view1), KE::cend(view1), - KE::cbegin(view2)); + return Impl::equal_exespace_impl("Kokkos::equal_view_api_default", ex, + KE::cbegin(view1), KE::cend(view1), + KE::cbegin(view2)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool equal(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view1, ::Kokkos::View& view2) { @@ -88,12 +101,14 @@ bool equal(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); namespace KE = ::Kokkos::Experimental; - return Impl::equal_impl(label, ex, KE::cbegin(view1), KE::cend(view1), - KE::cbegin(view2)); + return Impl::equal_exespace_impl(label, ex, KE::cbegin(view1), + KE::cend(view1), KE::cbegin(view2)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool equal(const ExecutionSpace& ex, const ::Kokkos::View& view1, ::Kokkos::View& view2, @@ -102,13 +117,15 @@ bool equal(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); namespace KE = ::Kokkos::Experimental; - return Impl::equal_impl("Kokkos::equal_view_api_default", ex, - KE::cbegin(view1), KE::cend(view1), KE::cbegin(view2), - std::move(predicate)); + return Impl::equal_exespace_impl("Kokkos::equal_view_api_default", ex, + KE::cbegin(view1), KE::cend(view1), + KE::cbegin(view2), std::move(predicate)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool equal(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view1, ::Kokkos::View& view2, @@ -117,51 +134,149 @@ bool equal(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); namespace KE = ::Kokkos::Experimental; - return Impl::equal_impl(label, ex, KE::cbegin(view1), KE::cend(view1), - KE::cbegin(view2), std::move(predicate)); + return Impl::equal_exespace_impl(label, ex, KE::cbegin(view1), + KE::cend(view1), KE::cbegin(view2), + std::move(predicate)); } -template -std::enable_if_t< ::Kokkos::Experimental::Impl::are_iterators< - IteratorType1, IteratorType2>::value, - bool> -equal(const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, - IteratorType2 first2, IteratorType2 last2) { - return Impl::equal_impl("Kokkos::equal_iterator_api_default", ex, first1, - last1, first2, last2); +template && ::Kokkos:: + is_execution_space_v, + int> = 0> +bool equal(const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, IteratorType2 last2) { + return Impl::equal_exespace_impl("Kokkos::equal_iterator_api_default", ex, + first1, last1, first2, last2); } -template -std::enable_if_t< ::Kokkos::Experimental::Impl::are_iterators< - IteratorType1, IteratorType2>::value, - bool> -equal(const std::string& label, const ExecutionSpace& ex, IteratorType1 first1, - IteratorType1 last1, IteratorType2 first2, IteratorType2 last2) { - return Impl::equal_impl(label, ex, first1, last1, first2, last2); +template && ::Kokkos:: + is_execution_space_v, + int> = 0> +bool equal(const std::string& label, const ExecutionSpace& ex, + IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, + IteratorType2 last2) { + return Impl::equal_exespace_impl(label, ex, first1, last1, first2, last2); } -template -std::enable_if_t< ::Kokkos::Experimental::Impl::are_iterators< - IteratorType1, IteratorType2>::value, - bool> -equal(const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, - IteratorType2 first2, IteratorType2 last2, - BinaryPredicateType predicate) { - return Impl::equal_impl("Kokkos::equal_iterator_api_default", ex, first1, - last1, first2, last2, std::move(predicate)); +template && ::Kokkos:: + is_execution_space_v, + int> = 0> +bool equal(const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, IteratorType2 last2, + BinaryPredicateType predicate) { + return Impl::equal_exespace_impl("Kokkos::equal_iterator_api_default", ex, + first1, last1, first2, last2, + std::move(predicate)); } -template -std::enable_if_t< ::Kokkos::Experimental::Impl::are_iterators< - IteratorType1, IteratorType2>::value, - bool> -equal(const std::string& label, const ExecutionSpace& ex, IteratorType1 first1, - IteratorType1 last1, IteratorType2 first2, IteratorType2 last2, - BinaryPredicateType predicate) { - return Impl::equal_impl(label, ex, first1, last1, first2, last2, - std::move(predicate)); +template && ::Kokkos:: + is_execution_space_v, + int> = 0> +bool equal(const std::string& label, const ExecutionSpace& ex, + IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, + IteratorType2 last2, BinaryPredicateType predicate) { + return Impl::equal_exespace_impl(label, ex, first1, last1, first2, last2, + std::move(predicate)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template && ::Kokkos:: + is_team_handle_v, + int> = 0> +KOKKOS_FUNCTION bool equal(const TeamHandleType& teamHandle, + IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2) { + return Impl::equal_team_impl(teamHandle, first1, last1, first2); +} + +template && ::Kokkos:: + is_team_handle_v, + int> = 0> +KOKKOS_FUNCTION bool equal(const TeamHandleType& teamHandle, + IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, + BinaryPredicateType predicate) { + return Impl::equal_team_impl(teamHandle, first1, last1, first2, + std::move(predicate)); +} + +template , int> = 0> +KOKKOS_FUNCTION bool equal( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view1, + ::Kokkos::View& view2) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view1); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); + + namespace KE = ::Kokkos::Experimental; + return Impl::equal_team_impl(teamHandle, KE::cbegin(view1), KE::cend(view1), + KE::cbegin(view2)); +} + +template , int> = 0> +KOKKOS_FUNCTION bool equal( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view1, + ::Kokkos::View& view2, + BinaryPredicateType predicate) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view1); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); + + namespace KE = ::Kokkos::Experimental; + return Impl::equal_team_impl(teamHandle, KE::cbegin(view1), KE::cend(view1), + KE::cbegin(view2), std::move(predicate)); +} + +template && ::Kokkos:: + is_team_handle_v, + int> = 0> +KOKKOS_FUNCTION bool equal(const TeamHandleType& teamHandle, + IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, IteratorType2 last2) { + return Impl::equal_team_impl(teamHandle, first1, last1, first2, last2); +} + +template && ::Kokkos:: + is_team_handle_v, + int> = 0> +KOKKOS_FUNCTION bool equal(const TeamHandleType& teamHandle, + IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, IteratorType2 last2, + BinaryPredicateType predicate) { + return Impl::equal_team_impl(teamHandle, first1, last1, first2, last2, + std::move(predicate)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ExclusiveScan.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ExclusiveScan.hpp index 4e05676c2c..ee3a105126 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ExclusiveScan.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ExclusiveScan.hpp @@ -23,105 +23,130 @@ namespace Kokkos { namespace Experimental { +// +// overload set accepting execution space +// + // overload set 1 -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -exclusive_scan(const ExecutionSpace& ex, InputIteratorType first, - InputIteratorType last, OutputIteratorType first_dest, - ValueType init_value) { - static_assert(std::is_move_constructible::value, +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType exclusive_scan(const ExecutionSpace& ex, + InputIteratorType first, + InputIteratorType last, + OutputIteratorType first_dest, + ValueType init_value) { + static_assert(std::is_move_constructible_v, "ValueType must be move constructible."); - return Impl::exclusive_scan_default_op_impl( + return Impl::exclusive_scan_default_op_exespace_impl( "Kokkos::exclusive_scan_default_functors_iterator_api", ex, first, last, - first_dest, init_value); + first_dest, std::move(init_value)); } -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -exclusive_scan(const std::string& label, const ExecutionSpace& ex, - InputIteratorType first, InputIteratorType last, - OutputIteratorType first_dest, ValueType init_value) { - static_assert(std::is_move_constructible::value, +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType exclusive_scan(const std::string& label, + const ExecutionSpace& ex, + InputIteratorType first, + InputIteratorType last, + OutputIteratorType first_dest, + ValueType init_value) { + static_assert(std::is_move_constructible_v, "ValueType must be move constructible."); - return Impl::exclusive_scan_default_op_impl(label, ex, first, last, - first_dest, init_value); + return Impl::exclusive_scan_default_op_exespace_impl( + label, ex, first, last, first_dest, std::move(init_value)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto exclusive_scan(const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, ValueType init_value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); - static_assert(std::is_move_constructible::value, + static_assert(std::is_move_constructible_v, "ValueType must be move constructible."); namespace KE = ::Kokkos::Experimental; - return Impl::exclusive_scan_default_op_impl( + return Impl::exclusive_scan_default_op_exespace_impl( "Kokkos::exclusive_scan_default_functors_view_api", ex, KE::cbegin(view_from), KE::cend(view_from), KE::begin(view_dest), - init_value); + std::move(init_value)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto exclusive_scan(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, ValueType init_value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); - static_assert(std::is_move_constructible::value, + static_assert(std::is_move_constructible_v, "ValueType must be move constructible."); namespace KE = ::Kokkos::Experimental; - return Impl::exclusive_scan_default_op_impl(label, ex, KE::cbegin(view_from), - KE::cend(view_from), - KE::begin(view_dest), init_value); + return Impl::exclusive_scan_default_op_exespace_impl( + label, ex, KE::cbegin(view_from), KE::cend(view_from), + KE::begin(view_dest), std::move(init_value)); } // overload set 2 -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -exclusive_scan(const ExecutionSpace& ex, InputIteratorType first, - InputIteratorType last, OutputIteratorType first_dest, - ValueType init_value, BinaryOpType bop) { +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType exclusive_scan(const ExecutionSpace& ex, + InputIteratorType first, + InputIteratorType last, + OutputIteratorType first_dest, + ValueType init_value, BinaryOpType bop) { Impl::static_assert_is_not_openmptarget(ex); - static_assert(std::is_move_constructible::value, + static_assert(std::is_move_constructible_v, "ValueType must be move constructible."); - return Impl::exclusive_scan_custom_op_impl( + return Impl::exclusive_scan_custom_op_exespace_impl( "Kokkos::exclusive_scan_custom_functors_iterator_api", ex, first, last, - first_dest, init_value, bop); + first_dest, std::move(init_value), bop); } -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -exclusive_scan(const std::string& label, const ExecutionSpace& ex, - InputIteratorType first, InputIteratorType last, - OutputIteratorType first_dest, ValueType init_value, - BinaryOpType bop) { +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType exclusive_scan(const std::string& label, + const ExecutionSpace& ex, + InputIteratorType first, + InputIteratorType last, + OutputIteratorType first_dest, + ValueType init_value, BinaryOpType bop) { Impl::static_assert_is_not_openmptarget(ex); - static_assert(std::is_move_constructible::value, + static_assert(std::is_move_constructible_v, "ValueType must be move constructible."); - return Impl::exclusive_scan_custom_op_impl(label, ex, first, last, first_dest, - init_value, bop); + return Impl::exclusive_scan_custom_op_exespace_impl( + label, ex, first, last, first_dest, std::move(init_value), bop); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename ValueType, + typename BinaryOpType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto exclusive_scan(const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, @@ -129,18 +154,20 @@ auto exclusive_scan(const ExecutionSpace& ex, Impl::static_assert_is_not_openmptarget(ex); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); - static_assert(std::is_move_constructible::value, + static_assert(std::is_move_constructible_v, "ValueType must be move constructible."); namespace KE = ::Kokkos::Experimental; - return Impl::exclusive_scan_custom_op_impl( + return Impl::exclusive_scan_custom_op_exespace_impl( "Kokkos::exclusive_scan_custom_functors_view_api", ex, KE::cbegin(view_from), KE::cend(view_from), KE::begin(view_dest), - init_value, bop); + std::move(init_value), bop); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename ValueType, + typename BinaryOpType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto exclusive_scan(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, @@ -148,12 +175,92 @@ auto exclusive_scan(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_not_openmptarget(ex); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); - static_assert(std::is_move_constructible::value, + static_assert(std::is_move_constructible_v, "ValueType must be move constructible."); namespace KE = ::Kokkos::Experimental; - return Impl::exclusive_scan_custom_op_impl( + return Impl::exclusive_scan_custom_op_exespace_impl( label, ex, KE::cbegin(view_from), KE::cend(view_from), - KE::begin(view_dest), init_value, bop); + KE::begin(view_dest), std::move(init_value), bop); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// + +// overload set 1 +template && + Kokkos::is_team_handle_v, + int> = 0> +KOKKOS_FUNCTION OutputIteratorType +exclusive_scan(const TeamHandleType& teamHandle, InputIteratorType first, + InputIteratorType last, OutputIteratorType first_dest, + ValueType init_value) { + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + return Impl::exclusive_scan_default_op_team_impl( + teamHandle, first, last, first_dest, std::move(init_value)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto exclusive_scan( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view_from, + const ::Kokkos::View& view_dest, + ValueType init_value) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + namespace KE = ::Kokkos::Experimental; + return Impl::exclusive_scan_default_op_team_impl( + teamHandle, KE::cbegin(view_from), KE::cend(view_from), + KE::begin(view_dest), std::move(init_value)); +} + +// overload set 2 +template && + Kokkos::is_team_handle_v, + int> = 0> +KOKKOS_FUNCTION OutputIteratorType +exclusive_scan(const TeamHandleType& teamHandle, InputIteratorType first, + InputIteratorType last, OutputIteratorType first_dest, + ValueType init_value, BinaryOpType bop) { + Impl::static_assert_is_not_openmptarget(teamHandle); + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + return Impl::exclusive_scan_custom_op_team_impl( + teamHandle, first, last, first_dest, std::move(init_value), bop); +} + +template , int> = 0> +KOKKOS_FUNCTION auto exclusive_scan( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view_from, + const ::Kokkos::View& view_dest, + ValueType init_value, BinaryOpType bop) { + Impl::static_assert_is_not_openmptarget(teamHandle); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + namespace KE = ::Kokkos::Experimental; + return Impl::exclusive_scan_custom_op_team_impl( + teamHandle, KE::cbegin(view_from), KE::cend(view_from), + KE::begin(view_dest), std::move(init_value), bop); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Fill.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Fill.hpp index 1e300a4c20..6d805ba1be 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Fill.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Fill.hpp @@ -23,33 +23,67 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void fill(const ExecutionSpace& ex, IteratorType first, IteratorType last, const T& value) { - Impl::fill_impl("Kokkos::fill_iterator_api_default", ex, first, last, value); + Impl::fill_exespace_impl("Kokkos::fill_iterator_api_default", ex, first, last, + value); } -template +template < + typename ExecutionSpace, typename IteratorType, typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void fill(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, const T& value) { - Impl::fill_impl(label, ex, first, last, value); + Impl::fill_exespace_impl(label, ex, first, last, value); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void fill(const ExecutionSpace& ex, const ::Kokkos::View& view, const T& value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - - Impl::fill_impl("Kokkos::fill_view_api_default", ex, begin(view), end(view), - value); + Impl::fill_exespace_impl("Kokkos::fill_view_api_default", ex, begin(view), + end(view), value); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void fill(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, const T& value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + Impl::fill_exespace_impl(label, ex, begin(view), end(view), value); +} - Impl::fill_impl(label, ex, begin(view), end(view), value); +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION void fill(const TeamHandleType& th, IteratorType first, + IteratorType last, const T& value) { + Impl::fill_team_impl(th, first, last, value); +} + +template , int> = 0> +KOKKOS_FUNCTION void fill(const TeamHandleType& th, + const ::Kokkos::View& view, + const T& value) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + Impl::fill_team_impl(th, begin(view), end(view), value); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FillN.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FillN.hpp index 02503dfd14..66b8cd66cc 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FillN.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FillN.hpp @@ -23,38 +23,72 @@ namespace Kokkos { namespace Experimental { -template +template < + typename ExecutionSpace, typename IteratorType, typename SizeType, + typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType fill_n(const ExecutionSpace& ex, IteratorType first, SizeType n, const T& value) { - return Impl::fill_n_impl("Kokkos::fill_n_iterator_api_default", ex, first, n, - value); + return Impl::fill_n_exespace_impl("Kokkos::fill_n_iterator_api_default", ex, + first, n, value); } -template +template < + typename ExecutionSpace, typename IteratorType, typename SizeType, + typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType fill_n(const std::string& label, const ExecutionSpace& ex, IteratorType first, SizeType n, const T& value) { - return Impl::fill_n_impl(label, ex, first, n, value); + return Impl::fill_n_exespace_impl(label, ex, first, n, value); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename SizeType, typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto fill_n(const ExecutionSpace& ex, const ::Kokkos::View& view, SizeType n, const T& value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::fill_n_impl("Kokkos::fill_n_view_api_default", ex, begin(view), - n, value); + return Impl::fill_n_exespace_impl("Kokkos::fill_n_view_api_default", ex, + begin(view), n, value); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename SizeType, typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto fill_n(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, SizeType n, const T& value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::fill_n_impl(label, ex, begin(view), n, value); + return Impl::fill_n_exespace_impl(label, ex, begin(view), n, value); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION IteratorType fill_n(const TeamHandleType& th, + IteratorType first, SizeType n, + const T& value) { + return Impl::fill_n_team_impl(th, first, n, value); +} + +template , int> = 0> +KOKKOS_FUNCTION auto fill_n(const TeamHandleType& th, + const ::Kokkos::View& view, + SizeType n, const T& value) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + return Impl::fill_n_team_impl(th, begin(view), n, value); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Find.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Find.hpp index 65b68cf931..e5e2b0e2b0 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Find.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Find.hpp @@ -23,36 +23,76 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> InputIterator find(const ExecutionSpace& ex, InputIterator first, InputIterator last, const T& value) { - return Impl::find_impl("Kokkos::find_iterator_api_default", ex, first, last, - value); + return Impl::find_exespace_impl("Kokkos::find_iterator_api_default", ex, + first, last, value); } -template +template < + typename ExecutionSpace, typename InputIterator, typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> InputIterator find(const std::string& label, const ExecutionSpace& ex, InputIterator first, InputIterator last, const T& value) { - return Impl::find_impl(label, ex, first, last, value); + return Impl::find_exespace_impl(label, ex, first, last, value); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto find(const ExecutionSpace& ex, const ::Kokkos::View& view, const T& value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::find_impl("Kokkos::find_view_api_default", ex, KE::begin(view), - KE::end(view), value); + return Impl::find_exespace_impl("Kokkos::find_view_api_default", ex, + KE::begin(view), KE::end(view), value); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename T, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto find(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, const T& value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::find_impl(label, ex, KE::begin(view), KE::end(view), value); + return Impl::find_exespace_impl(label, ex, KE::begin(view), KE::end(view), + value); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION InputIterator find(const TeamHandleType& teamHandle, + InputIterator first, InputIterator last, + const T& value) { + return Impl::find_team_impl(teamHandle, first, last, value); +} + +template , int> = 0> +KOKKOS_FUNCTION auto find(const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + const T& value) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + + namespace KE = ::Kokkos::Experimental; + return Impl::find_team_impl(teamHandle, KE::begin(view), KE::end(view), + value); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindEnd.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindEnd.hpp index f6a38855eb..a4ec735fd5 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindEnd.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindEnd.hpp @@ -24,24 +24,34 @@ namespace Kokkos { namespace Experimental { +// +// overload set accepting execution space +// + // overload set 1: no binary predicate passed -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType1 find_end(const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 s_first, IteratorType2 s_last) { - return Impl::find_end_impl("Kokkos::find_end_iterator_api_default", ex, first, - last, s_first, s_last); + return Impl::find_end_exespace_impl("Kokkos::find_end_iterator_api_default", + ex, first, last, s_first, s_last); } -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType1 find_end(const std::string& label, const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 s_first, IteratorType2 s_last) { - return Impl::find_end_impl(label, ex, first, last, s_first, s_last); + return Impl::find_end_exespace_impl(label, ex, first, last, s_first, s_last); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto find_end(const ExecutionSpace& ex, const ::Kokkos::View& view, const ::Kokkos::View& s_view) { @@ -49,13 +59,15 @@ auto find_end(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); namespace KE = ::Kokkos::Experimental; - return Impl::find_end_impl("Kokkos::find_end_view_api_default", ex, - KE::begin(view), KE::end(view), KE::begin(s_view), - KE::end(s_view)); + return Impl::find_end_exespace_impl("Kokkos::find_end_view_api_default", ex, + KE::begin(view), KE::end(view), + KE::begin(s_view), KE::end(s_view)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto find_end(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, const ::Kokkos::View& s_view) { @@ -63,31 +75,38 @@ auto find_end(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); namespace KE = ::Kokkos::Experimental; - return Impl::find_end_impl(label, ex, KE::begin(view), KE::end(view), - KE::begin(s_view), KE::end(s_view)); + return Impl::find_end_exespace_impl(label, ex, KE::begin(view), KE::end(view), + KE::begin(s_view), KE::end(s_view)); } // overload set 2: binary predicate passed -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + typename BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType1 find_end(const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 s_first, IteratorType2 s_last, const BinaryPredicateType& pred) { - return Impl::find_end_impl("Kokkos::find_end_iterator_api_default", ex, first, - last, s_first, s_last, pred); + return Impl::find_end_exespace_impl("Kokkos::find_end_iterator_api_default", + ex, first, last, s_first, s_last, pred); } -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + typename BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType1 find_end(const std::string& label, const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 s_first, IteratorType2 s_last, const BinaryPredicateType& pred) { - return Impl::find_end_impl(label, ex, first, last, s_first, s_last, pred); + return Impl::find_end_exespace_impl(label, ex, first, last, s_first, s_last, + pred); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto find_end(const ExecutionSpace& ex, const ::Kokkos::View& view, const ::Kokkos::View& s_view, @@ -96,13 +115,15 @@ auto find_end(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); namespace KE = ::Kokkos::Experimental; - return Impl::find_end_impl("Kokkos::find_end_view_api_default", ex, - KE::begin(view), KE::end(view), KE::begin(s_view), - KE::end(s_view), pred); + return Impl::find_end_exespace_impl("Kokkos::find_end_view_api_default", ex, + KE::begin(view), KE::end(view), + KE::begin(s_view), KE::end(s_view), pred); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto find_end(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, const ::Kokkos::View& s_view, @@ -111,8 +132,71 @@ auto find_end(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); namespace KE = ::Kokkos::Experimental; - return Impl::find_end_impl(label, ex, KE::begin(view), KE::end(view), - KE::begin(s_view), KE::end(s_view), pred); + return Impl::find_end_exespace_impl(label, ex, KE::begin(view), KE::end(view), + KE::begin(s_view), KE::end(s_view), pred); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// + +// overload set 1: no binary predicate passed +template , int> = 0> +KOKKOS_FUNCTION IteratorType1 find_end(const TeamHandleType& teamHandle, + IteratorType1 first, IteratorType1 last, + IteratorType2 s_first, + IteratorType2 s_last) { + return Impl::find_end_team_impl(teamHandle, first, last, s_first, s_last); +} + +template , int> = 0> +KOKKOS_FUNCTION auto find_end( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + const ::Kokkos::View& s_view) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); + + namespace KE = ::Kokkos::Experimental; + return Impl::find_end_team_impl(teamHandle, KE::begin(view), KE::end(view), + KE::begin(s_view), KE::end(s_view)); +} + +// overload set 2: binary predicate passed +template , int> = 0> + +KOKKOS_FUNCTION IteratorType1 find_end(const TeamHandleType& teamHandle, + IteratorType1 first, IteratorType1 last, + IteratorType2 s_first, + IteratorType2 s_last, + const BinaryPredicateType& pred) { + return Impl::find_end_team_impl(teamHandle, first, last, s_first, s_last, + pred); +} + +template , int> = 0> +KOKKOS_FUNCTION auto find_end( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + const ::Kokkos::View& s_view, + const BinaryPredicateType& pred) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); + + namespace KE = ::Kokkos::Experimental; + return Impl::find_end_team_impl(teamHandle, KE::begin(view), KE::end(view), + KE::begin(s_view), KE::end(s_view), pred); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindFirstOf.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindFirstOf.hpp index 6b0e4993ee..341a70e2f2 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindFirstOf.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindFirstOf.hpp @@ -23,24 +23,36 @@ namespace Kokkos { namespace Experimental { +// +// overload set accepting execution space +// + // overload set 1: no binary predicate passed -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType1 find_first_of(const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 s_first, IteratorType2 s_last) { - return Impl::find_first_of_impl("Kokkos::find_first_of_iterator_api_default", - ex, first, last, s_first, s_last); + return Impl::find_first_of_exespace_impl( + "Kokkos::find_first_of_iterator_api_default", ex, first, last, s_first, + s_last); } -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType1 find_first_of(const std::string& label, const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 s_first, IteratorType2 s_last) { - return Impl::find_first_of_impl(label, ex, first, last, s_first, s_last); + return Impl::find_first_of_exespace_impl(label, ex, first, last, s_first, + s_last); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto find_first_of(const ExecutionSpace& ex, const ::Kokkos::View& view, const ::Kokkos::View& s_view) { @@ -48,13 +60,15 @@ auto find_first_of(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); namespace KE = ::Kokkos::Experimental; - return Impl::find_first_of_impl("Kokkos::find_first_of_view_api_default", ex, - KE::begin(view), KE::end(view), - KE::begin(s_view), KE::end(s_view)); + return Impl::find_first_of_exespace_impl( + "Kokkos::find_first_of_view_api_default", ex, KE::begin(view), + KE::end(view), KE::begin(s_view), KE::end(s_view)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto find_first_of(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, const ::Kokkos::View& s_view) { @@ -62,33 +76,41 @@ auto find_first_of(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); namespace KE = ::Kokkos::Experimental; - return Impl::find_first_of_impl(label, ex, KE::begin(view), KE::end(view), - KE::begin(s_view), KE::end(s_view)); + return Impl::find_first_of_exespace_impl(label, ex, KE::begin(view), + KE::end(view), KE::begin(s_view), + KE::end(s_view)); } // overload set 2: binary predicate passed -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + typename BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType1 find_first_of(const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 s_first, IteratorType2 s_last, const BinaryPredicateType& pred) { - return Impl::find_first_of_impl("Kokkos::find_first_of_iterator_api_default", - ex, first, last, s_first, s_last, pred); + return Impl::find_first_of_exespace_impl( + "Kokkos::find_first_of_iterator_api_default", ex, first, last, s_first, + s_last, pred); } -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + typename BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType1 find_first_of(const std::string& label, const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 s_first, IteratorType2 s_last, const BinaryPredicateType& pred) { - return Impl::find_first_of_impl(label, ex, first, last, s_first, s_last, - pred); + return Impl::find_first_of_exespace_impl(label, ex, first, last, s_first, + s_last, pred); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto find_first_of(const ExecutionSpace& ex, const ::Kokkos::View& view, const ::Kokkos::View& s_view, @@ -97,13 +119,15 @@ auto find_first_of(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); namespace KE = ::Kokkos::Experimental; - return Impl::find_first_of_impl("Kokkos::find_first_of_view_api_default", ex, - KE::begin(view), KE::end(view), - KE::begin(s_view), KE::end(s_view), pred); + return Impl::find_first_of_exespace_impl( + "Kokkos::find_first_of_view_api_default", ex, KE::begin(view), + KE::end(view), KE::begin(s_view), KE::end(s_view), pred); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto find_first_of(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, const ::Kokkos::View& s_view, @@ -112,8 +136,77 @@ auto find_first_of(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); namespace KE = ::Kokkos::Experimental; - return Impl::find_first_of_impl(label, ex, KE::begin(view), KE::end(view), - KE::begin(s_view), KE::end(s_view), pred); + return Impl::find_first_of_exespace_impl(label, ex, KE::begin(view), + KE::end(view), KE::begin(s_view), + KE::end(s_view), pred); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// + +// overload set 1: no binary predicate passed +template , int> = 0> +KOKKOS_FUNCTION IteratorType1 find_first_of(const TeamHandleType& teamHandle, + IteratorType1 first, + IteratorType1 last, + IteratorType2 s_first, + IteratorType2 s_last) { + return Impl::find_first_of_team_impl(teamHandle, first, last, s_first, + s_last); +} + +template , int> = 0> +KOKKOS_FUNCTION auto find_first_of( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + const ::Kokkos::View& s_view) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); + + namespace KE = ::Kokkos::Experimental; + return Impl::find_first_of_team_impl(teamHandle, KE::begin(view), + KE::end(view), KE::begin(s_view), + KE::end(s_view)); +} + +// overload set 2: binary predicate passed +template , int> = 0> + +KOKKOS_FUNCTION IteratorType1 find_first_of(const TeamHandleType& teamHandle, + IteratorType1 first, + IteratorType1 last, + IteratorType2 s_first, + IteratorType2 s_last, + const BinaryPredicateType& pred) { + return Impl::find_first_of_team_impl(teamHandle, first, last, s_first, s_last, + pred); +} + +template , int> = 0> +KOKKOS_FUNCTION auto find_first_of( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + const ::Kokkos::View& s_view, + const BinaryPredicateType& pred) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); + + namespace KE = ::Kokkos::Experimental; + return Impl::find_first_of_team_impl(teamHandle, KE::begin(view), + KE::end(view), KE::begin(s_view), + KE::end(s_view), pred); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindIf.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindIf.hpp index 911316a668..283fab7617 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindIf.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindIf.hpp @@ -23,42 +23,82 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, typename PredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType find_if(const ExecutionSpace& ex, IteratorType first, IteratorType last, PredicateType predicate) { - return Impl::find_if_or_not_impl("Kokkos::find_if_iterator_api_default", - ex, first, last, std::move(predicate)); + return Impl::find_if_or_not_exespace_impl( + "Kokkos::find_if_iterator_api_default", ex, first, last, + std::move(predicate)); } -template +template < + typename ExecutionSpace, typename IteratorType, typename PredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType find_if(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, PredicateType predicate) { - return Impl::find_if_or_not_impl(label, ex, first, last, - std::move(predicate)); + return Impl::find_if_or_not_exespace_impl(label, ex, first, last, + std::move(predicate)); } -template +template ::value, + int> = 0> auto find_if(const ExecutionSpace& ex, const ::Kokkos::View& v, Predicate predicate) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::find_if_or_not_impl("Kokkos::find_if_view_api_default", ex, - KE::begin(v), KE::end(v), - std::move(predicate)); + return Impl::find_if_or_not_exespace_impl( + "Kokkos::find_if_view_api_default", ex, KE::begin(v), KE::end(v), + std::move(predicate)); } -template +template ::value, + int> = 0> auto find_if(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v, Predicate predicate) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::find_if_or_not_impl(label, ex, KE::begin(v), KE::end(v), - std::move(predicate)); + return Impl::find_if_or_not_exespace_impl( + label, ex, KE::begin(v), KE::end(v), std::move(predicate)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION IteratorType find_if(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + PredicateType predicate) { + return Impl::find_if_or_not_team_impl(teamHandle, first, last, + std::move(predicate)); +} + +template < + typename TeamHandleType, typename DataType, typename... Properties, + typename Predicate, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION auto find_if(const TeamHandleType& teamHandle, + const ::Kokkos::View& v, + Predicate predicate) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + namespace KE = ::Kokkos::Experimental; + return Impl::find_if_or_not_team_impl(teamHandle, KE::begin(v), + KE::end(v), std::move(predicate)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindIfNot.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindIfNot.hpp index 18294d7b7d..5e17a6f539 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindIfNot.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_FindIfNot.hpp @@ -23,45 +23,84 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType find_if_not(const ExecutionSpace& ex, IteratorType first, IteratorType last, Predicate predicate) { - return Impl::find_if_or_not_impl( + return Impl::find_if_or_not_exespace_impl( "Kokkos::find_if_not_iterator_api_default", ex, first, last, std::move(predicate)); } -template +template < + typename ExecutionSpace, typename IteratorType, typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType find_if_not(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, Predicate predicate) { - return Impl::find_if_or_not_impl(label, ex, first, last, - std::move(predicate)); + return Impl::find_if_or_not_exespace_impl(label, ex, first, last, + std::move(predicate)); } -template +template ::value, + int> = 0> auto find_if_not(const ExecutionSpace& ex, const ::Kokkos::View& v, Predicate predicate) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::find_if_or_not_impl( + return Impl::find_if_or_not_exespace_impl( "Kokkos::find_if_not_view_api_default", ex, KE::begin(v), KE::end(v), std::move(predicate)); } -template +template ::value, + int> = 0> auto find_if_not(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v, Predicate predicate) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::find_if_or_not_impl(label, ex, KE::begin(v), KE::end(v), - std::move(predicate)); + return Impl::find_if_or_not_exespace_impl( + label, ex, KE::begin(v), KE::end(v), std::move(predicate)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION IteratorType find_if_not(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + Predicate predicate) { + return Impl::find_if_or_not_team_impl(teamHandle, first, last, + std::move(predicate)); +} + +template < + typename TeamHandleType, typename DataType, typename... Properties, + typename Predicate, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION auto find_if_not( + const TeamHandleType& teamHandle, + const ::Kokkos::View& v, Predicate predicate) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + + namespace KE = ::Kokkos::Experimental; + return Impl::find_if_or_not_team_impl( + teamHandle, KE::begin(v), KE::end(v), std::move(predicate)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ForEach.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ForEach.hpp index d7b08e4842..6215b325af 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ForEach.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ForEach.hpp @@ -23,42 +23,83 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + class ExecutionSpace, class IteratorType, class UnaryFunctorType, + std::enable_if_t, int> = 0> UnaryFunctorType for_each(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, UnaryFunctorType functor) { - return Impl::for_each_impl(label, ex, first, last, std::move(functor)); + return Impl::for_each_exespace_impl(label, ex, first, last, + std::move(functor)); } -template +template < + class ExecutionSpace, class IteratorType, class UnaryFunctorType, + std::enable_if_t, int> = 0> UnaryFunctorType for_each(const ExecutionSpace& ex, IteratorType first, IteratorType last, UnaryFunctorType functor) { - return Impl::for_each_impl("Kokkos::for_each_iterator_api_default", ex, first, - last, std::move(functor)); + return Impl::for_each_exespace_impl("Kokkos::for_each_iterator_api_default", + ex, first, last, std::move(functor)); } -template +template < + class ExecutionSpace, class DataType, class... Properties, + class UnaryFunctorType, + std::enable_if_t, int> = 0> UnaryFunctorType for_each(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v, UnaryFunctorType functor) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::for_each_impl(label, ex, KE::begin(v), KE::end(v), - std::move(functor)); + return Impl::for_each_exespace_impl(label, ex, KE::begin(v), KE::end(v), + std::move(functor)); } -template +template < + class ExecutionSpace, class DataType, class... Properties, + class UnaryFunctorType, + std::enable_if_t, int> = 0> UnaryFunctorType for_each(const ExecutionSpace& ex, const ::Kokkos::View& v, UnaryFunctorType functor) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::for_each_impl("Kokkos::for_each_view_api_default", ex, - KE::begin(v), KE::end(v), std::move(functor)); + return Impl::for_each_exespace_impl("Kokkos::for_each_view_api_default", ex, + KE::begin(v), KE::end(v), + std::move(functor)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// + +template , int> = 0> +KOKKOS_FUNCTION UnaryFunctorType for_each(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + UnaryFunctorType functor) { + return Impl::for_each_team_impl(teamHandle, first, last, std::move(functor)); +} + +template , int> = 0> +KOKKOS_FUNCTION UnaryFunctorType +for_each(const TeamHandleType& teamHandle, + const ::Kokkos::View& v, + UnaryFunctorType functor) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + + namespace KE = ::Kokkos::Experimental; + return Impl::for_each_team_impl(teamHandle, KE::begin(v), KE::end(v), + std::move(functor)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ForEachN.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ForEachN.hpp index f1769da05b..e6fbcad891 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ForEachN.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ForEachN.hpp @@ -23,43 +23,87 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + class ExecutionSpace, class IteratorType, class SizeType, + class UnaryFunctorType, + std::enable_if_t, int> = 0> IteratorType for_each_n(const std::string& label, const ExecutionSpace& ex, IteratorType first, SizeType n, UnaryFunctorType functor) { - return Impl::for_each_n_impl(label, ex, first, n, std::move(functor)); + return Impl::for_each_n_exespace_impl(label, ex, first, n, + std::move(functor)); } -template +template < + class ExecutionSpace, class IteratorType, class SizeType, + class UnaryFunctorType, + std::enable_if_t, int> = 0> IteratorType for_each_n(const ExecutionSpace& ex, IteratorType first, SizeType n, UnaryFunctorType functor) { - return Impl::for_each_n_impl("Kokkos::for_each_n_iterator_api_default", ex, - first, n, std::move(functor)); + return Impl::for_each_n_exespace_impl( + "Kokkos::for_each_n_iterator_api_default", ex, first, n, + std::move(functor)); } -template +template < + class ExecutionSpace, class DataType, class... Properties, class SizeType, + class UnaryFunctorType, + std::enable_if_t, int> = 0> auto for_each_n(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v, SizeType n, UnaryFunctorType functor) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::for_each_n_impl(label, ex, KE::begin(v), n, std::move(functor)); + return Impl::for_each_n_exespace_impl(label, ex, KE::begin(v), n, + std::move(functor)); } -template +template < + class ExecutionSpace, class DataType, class... Properties, class SizeType, + class UnaryFunctorType, + std::enable_if_t, int> = 0> auto for_each_n(const ExecutionSpace& ex, const ::Kokkos::View& v, SizeType n, UnaryFunctorType functor) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::for_each_n_impl("Kokkos::for_each_n_view_api_default", ex, - KE::begin(v), n, std::move(functor)); + return Impl::for_each_n_exespace_impl("Kokkos::for_each_n_view_api_default", + ex, KE::begin(v), n, + std::move(functor)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// + +template , int> = 0> +KOKKOS_FUNCTION IteratorType for_each_n(const TeamHandleType& teamHandle, + IteratorType first, SizeType n, + UnaryFunctorType functor) { + return Impl::for_each_n_team_impl(teamHandle, first, n, std::move(functor)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto for_each_n( + const TeamHandleType& teamHandle, + const ::Kokkos::View& v, SizeType n, + UnaryFunctorType functor) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + + namespace KE = ::Kokkos::Experimental; + return Impl::for_each_n_team_impl(teamHandle, KE::begin(v), n, + std::move(functor)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Generate.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Generate.hpp index 13e12783e0..a3295084ee 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Generate.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Generate.hpp @@ -23,38 +23,68 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template , int> = 0> void generate(const ExecutionSpace& ex, IteratorType first, IteratorType last, Generator g) { - Impl::generate_impl("Kokkos::generate_iterator_api_default", ex, first, last, - std::move(g)); + Impl::generate_exespace_impl("Kokkos::generate_iterator_api_default", ex, + first, last, std::move(g)); } -template +template , int> = 0> void generate(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, Generator g) { - Impl::generate_impl(label, ex, first, last, std::move(g)); + Impl::generate_exespace_impl(label, ex, first, last, std::move(g)); } -template +template , int> = 0> void generate(const ExecutionSpace& ex, const ::Kokkos::View& view, Generator g) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - Impl::generate_impl("Kokkos::generate_view_api_default", ex, begin(view), - end(view), std::move(g)); + Impl::generate_exespace_impl("Kokkos::generate_view_api_default", ex, + begin(view), end(view), std::move(g)); } -template +template , int> = 0> void generate(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, Generator g) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - Impl::generate_impl(label, ex, begin(view), end(view), std::move(g)); + Impl::generate_exespace_impl(label, ex, begin(view), end(view), std::move(g)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION void generate(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + Generator g) { + Impl::generate_team_impl(teamHandle, first, last, std::move(g)); +} + +template , int> = 0> +KOKKOS_FUNCTION void generate( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, Generator g) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + Impl::generate_team_impl(teamHandle, begin(view), end(view), std::move(g)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_GenerateN.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_GenerateN.hpp index 4d17512228..e480062c23 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_GenerateN.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_GenerateN.hpp @@ -23,40 +23,75 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template , int> = 0> IteratorType generate_n(const ExecutionSpace& ex, IteratorType first, Size count, Generator g) { - Impl::generate_n_impl("Kokkos::generate_n_iterator_api_default", ex, first, - count, std::move(g)); - return first + count; + return Impl::generate_n_exespace_impl( + "Kokkos::generate_n_iterator_api_default", ex, first, count, + std::move(g)); } -template +template , int> = 0> IteratorType generate_n(const std::string& label, const ExecutionSpace& ex, IteratorType first, Size count, Generator g) { - Impl::generate_n_impl(label, ex, first, count, std::move(g)); - return first + count; + return Impl::generate_n_exespace_impl(label, ex, first, count, std::move(g)); } -template +template , int> = 0> auto generate_n(const ExecutionSpace& ex, const ::Kokkos::View& view, Size count, Generator g) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::generate_n_impl("Kokkos::generate_n_view_api_default", ex, - begin(view), count, std::move(g)); + return Impl::generate_n_exespace_impl("Kokkos::generate_n_view_api_default", + ex, begin(view), count, std::move(g)); } -template +template , int> = 0> auto generate_n(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, Size count, Generator g) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::generate_n_impl(label, ex, begin(view), count, std::move(g)); + return Impl::generate_n_exespace_impl(label, ex, begin(view), count, + std::move(g)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION IteratorType generate_n(const TeamHandleType& teamHandle, + IteratorType first, Size count, + Generator g) { + return Impl::generate_n_team_impl(teamHandle, first, count, std::move(g)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto generate_n( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, Size count, + Generator g) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + return Impl::generate_n_team_impl(teamHandle, begin(view), count, + std::move(g)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_InclusiveScan.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_InclusiveScan.hpp index bcd731b850..a0e540b5e7 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_InclusiveScan.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_InclusiveScan.hpp @@ -23,33 +23,45 @@ namespace Kokkos { namespace Experimental { +// +// overload set accepting execution space +// + // overload set 1 -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -inclusive_scan(const ExecutionSpace& ex, InputIteratorType first, - InputIteratorType last, OutputIteratorType first_dest) { - return Impl::inclusive_scan_default_op_impl( +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType inclusive_scan(const ExecutionSpace& ex, + InputIteratorType first, + InputIteratorType last, + OutputIteratorType first_dest) { + return Impl::inclusive_scan_default_op_exespace_impl( "Kokkos::inclusive_scan_default_functors_iterator_api", ex, first, last, first_dest); } -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -inclusive_scan(const std::string& label, const ExecutionSpace& ex, - InputIteratorType first, InputIteratorType last, - OutputIteratorType first_dest) { - return Impl::inclusive_scan_default_op_impl(label, ex, first, last, - first_dest); +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType inclusive_scan(const std::string& label, + const ExecutionSpace& ex, + InputIteratorType first, + InputIteratorType last, + OutputIteratorType first_dest) { + return Impl::inclusive_scan_default_op_exespace_impl(label, ex, first, last, + first_dest); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto inclusive_scan( const ExecutionSpace& ex, const ::Kokkos::View& view_from, @@ -57,13 +69,15 @@ auto inclusive_scan( Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); namespace KE = ::Kokkos::Experimental; - return Impl::inclusive_scan_default_op_impl( + return Impl::inclusive_scan_default_op_exespace_impl( "Kokkos::inclusive_scan_default_functors_view_api", ex, KE::cbegin(view_from), KE::cend(view_from), KE::begin(view_dest)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto inclusive_scan( const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view_from, @@ -71,39 +85,45 @@ auto inclusive_scan( Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); namespace KE = ::Kokkos::Experimental; - return Impl::inclusive_scan_default_op_impl(label, ex, KE::cbegin(view_from), - KE::cend(view_from), - KE::begin(view_dest)); + return Impl::inclusive_scan_default_op_exespace_impl( + label, ex, KE::cbegin(view_from), KE::cend(view_from), + KE::begin(view_dest)); } // overload set 2 (accepting custom binary op) -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -inclusive_scan(const ExecutionSpace& ex, InputIteratorType first, - InputIteratorType last, OutputIteratorType first_dest, - BinaryOp binary_op) { - return Impl::inclusive_scan_custom_binary_op_impl( +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType inclusive_scan(const ExecutionSpace& ex, + InputIteratorType first, + InputIteratorType last, + OutputIteratorType first_dest, + BinaryOp binary_op) { + return Impl::inclusive_scan_custom_binary_op_exespace_impl( "Kokkos::inclusive_scan_custom_functors_iterator_api", ex, first, last, first_dest, binary_op); } -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -inclusive_scan(const std::string& label, const ExecutionSpace& ex, - InputIteratorType first, InputIteratorType last, - OutputIteratorType first_dest, BinaryOp binary_op) { - return Impl::inclusive_scan_custom_binary_op_impl(label, ex, first, last, - first_dest, binary_op); +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType inclusive_scan( + const std::string& label, const ExecutionSpace& ex, InputIteratorType first, + InputIteratorType last, OutputIteratorType first_dest, BinaryOp binary_op) { + return Impl::inclusive_scan_custom_binary_op_exespace_impl( + label, ex, first, last, first_dest, binary_op); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryOp, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto inclusive_scan(const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, @@ -111,14 +131,16 @@ auto inclusive_scan(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); namespace KE = ::Kokkos::Experimental; - return Impl::inclusive_scan_custom_binary_op_impl( + return Impl::inclusive_scan_custom_binary_op_exespace_impl( "Kokkos::inclusive_scan_custom_functors_view_api", ex, KE::cbegin(view_from), KE::cend(view_from), KE::begin(view_dest), binary_op); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryOp, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto inclusive_scan(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, @@ -126,67 +148,192 @@ auto inclusive_scan(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); namespace KE = ::Kokkos::Experimental; - return Impl::inclusive_scan_custom_binary_op_impl( + return Impl::inclusive_scan_custom_binary_op_exespace_impl( label, ex, KE::cbegin(view_from), KE::cend(view_from), KE::begin(view_dest), binary_op); } // overload set 3 -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -inclusive_scan(const ExecutionSpace& ex, InputIteratorType first, - InputIteratorType last, OutputIteratorType first_dest, - BinaryOp binary_op, ValueType init_value) { - return Impl::inclusive_scan_custom_binary_op_impl( +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType inclusive_scan(const ExecutionSpace& ex, + InputIteratorType first, + InputIteratorType last, + OutputIteratorType first_dest, + BinaryOp binary_op, ValueType init_value) { + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + + return Impl::inclusive_scan_custom_binary_op_exespace_impl( "Kokkos::inclusive_scan_custom_functors_iterator_api", ex, first, last, - first_dest, binary_op, init_value); + first_dest, binary_op, std::move(init_value)); } -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -inclusive_scan(const std::string& label, const ExecutionSpace& ex, - InputIteratorType first, InputIteratorType last, - OutputIteratorType first_dest, BinaryOp binary_op, - ValueType init_value) { - return Impl::inclusive_scan_custom_binary_op_impl( - label, ex, first, last, first_dest, binary_op, init_value); +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType inclusive_scan(const std::string& label, + const ExecutionSpace& ex, + InputIteratorType first, + InputIteratorType last, + OutputIteratorType first_dest, + BinaryOp binary_op, ValueType init_value) { + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + + return Impl::inclusive_scan_custom_binary_op_exespace_impl( + label, ex, first, last, first_dest, binary_op, std::move(init_value)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryOp, + typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto inclusive_scan(const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, BinaryOp binary_op, ValueType init_value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + namespace KE = ::Kokkos::Experimental; - return Impl::inclusive_scan_custom_binary_op_impl( + return Impl::inclusive_scan_custom_binary_op_exespace_impl( "Kokkos::inclusive_scan_custom_functors_view_api", ex, KE::cbegin(view_from), KE::cend(view_from), KE::begin(view_dest), - binary_op, init_value); + binary_op, std::move(init_value)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryOp, + typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto inclusive_scan(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, BinaryOp binary_op, ValueType init_value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + namespace KE = ::Kokkos::Experimental; - return Impl::inclusive_scan_custom_binary_op_impl( + return Impl::inclusive_scan_custom_binary_op_exespace_impl( label, ex, KE::cbegin(view_from), KE::cend(view_from), - KE::begin(view_dest), binary_op, init_value); + KE::begin(view_dest), binary_op, std::move(init_value)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// + +// overload set 1 +template && :: + Kokkos::is_team_handle_v, + int> = 0> +KOKKOS_FUNCTION OutputIteratorType +inclusive_scan(const TeamHandleType& teamHandle, InputIteratorType first, + InputIteratorType last, OutputIteratorType first_dest) { + return Impl::inclusive_scan_default_op_team_impl(teamHandle, first, last, + first_dest); +} + +template , int> = 0> +KOKKOS_FUNCTION auto inclusive_scan( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view_from, + const ::Kokkos::View& view_dest) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + namespace KE = ::Kokkos::Experimental; + return Impl::inclusive_scan_default_op_team_impl( + teamHandle, KE::cbegin(view_from), KE::cend(view_from), + KE::begin(view_dest)); +} + +// overload set 2 (accepting custom binary op) +template && :: + Kokkos::is_team_handle_v, + int> = 0> +KOKKOS_FUNCTION OutputIteratorType inclusive_scan( + const TeamHandleType& teamHandle, InputIteratorType first, + InputIteratorType last, OutputIteratorType first_dest, BinaryOp binary_op) { + return Impl::inclusive_scan_custom_binary_op_team_impl( + teamHandle, first, last, first_dest, binary_op); +} + +template , int> = 0> +KOKKOS_FUNCTION auto inclusive_scan( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view_from, + const ::Kokkos::View& view_dest, + BinaryOp binary_op) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + namespace KE = ::Kokkos::Experimental; + return Impl::inclusive_scan_custom_binary_op_team_impl( + teamHandle, KE::cbegin(view_from), KE::cend(view_from), + KE::begin(view_dest), binary_op); +} + +// overload set 3 +template && :: + Kokkos::is_team_handle_v, + int> = 0> + +KOKKOS_FUNCTION OutputIteratorType +inclusive_scan(const TeamHandleType& teamHandle, InputIteratorType first, + InputIteratorType last, OutputIteratorType first_dest, + BinaryOp binary_op, ValueType init_value) { + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + return Impl::inclusive_scan_custom_binary_op_team_impl( + teamHandle, first, last, first_dest, binary_op, std::move(init_value)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto inclusive_scan( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view_from, + const ::Kokkos::View& view_dest, + BinaryOp binary_op, ValueType init_value) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + + namespace KE = ::Kokkos::Experimental; + return Impl::inclusive_scan_custom_binary_op_team_impl( + teamHandle, KE::cbegin(view_from), KE::cend(view_from), + KE::begin(view_dest), binary_op, std::move(init_value)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_IsPartitioned.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_IsPartitioned.hpp index 29d6be9e8b..42f20bc4ec 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_IsPartitioned.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_IsPartitioned.hpp @@ -23,39 +23,78 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, typename PredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool is_partitioned(const ExecutionSpace& ex, IteratorType first, IteratorType last, PredicateType p) { - return Impl::is_partitioned_impl( + return Impl::is_partitioned_exespace_impl( "Kokkos::is_partitioned_iterator_api_default", ex, first, last, std::move(p)); } -template +template < + typename ExecutionSpace, typename IteratorType, typename PredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool is_partitioned(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, PredicateType p) { - return Impl::is_partitioned_impl(label, ex, first, last, std::move(p)); + return Impl::is_partitioned_exespace_impl(label, ex, first, last, + std::move(p)); } -template +template < + typename ExecutionSpace, typename PredicateType, typename DataType, + typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool is_partitioned(const ExecutionSpace& ex, const ::Kokkos::View& v, PredicateType p) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); - return Impl::is_partitioned_impl("Kokkos::is_partitioned_view_api_default", - ex, cbegin(v), cend(v), std::move(p)); + return Impl::is_partitioned_exespace_impl( + "Kokkos::is_partitioned_view_api_default", ex, cbegin(v), cend(v), + std::move(p)); } -template +template < + typename ExecutionSpace, typename PredicateType, typename DataType, + typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool is_partitioned(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v, PredicateType p) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); - return Impl::is_partitioned_impl(label, ex, cbegin(v), cend(v), std::move(p)); + return Impl::is_partitioned_exespace_impl(label, ex, cbegin(v), cend(v), + std::move(p)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION bool is_partitioned(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + PredicateType p) { + return Impl::is_partitioned_team_impl(teamHandle, first, last, std::move(p)); +} + +template , int> = 0> +KOKKOS_FUNCTION bool is_partitioned( + const TeamHandleType& teamHandle, + const ::Kokkos::View& v, PredicateType p) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + return Impl::is_partitioned_team_impl(teamHandle, cbegin(v), cend(v), + std::move(p)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_IsSorted.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_IsSorted.hpp index f036254a02..2c676c3ff3 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_IsSorted.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_IsSorted.hpp @@ -23,55 +23,73 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool is_sorted(const ExecutionSpace& ex, IteratorType first, IteratorType last) { - return Impl::is_sorted_impl("Kokkos::is_sorted_iterator_api_default", ex, - first, last); + return Impl::is_sorted_exespace_impl("Kokkos::is_sorted_iterator_api_default", + ex, first, last); } -template +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool is_sorted(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last) { - return Impl::is_sorted_impl(label, ex, first, last); + return Impl::is_sorted_exespace_impl(label, ex, first, last); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool is_sorted(const ExecutionSpace& ex, const ::Kokkos::View& view) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::is_sorted_impl("Kokkos::is_sorted_view_api_default", ex, - KE::cbegin(view), KE::cend(view)); + return Impl::is_sorted_exespace_impl("Kokkos::is_sorted_view_api_default", ex, + KE::cbegin(view), KE::cend(view)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool is_sorted(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::is_sorted_impl(label, ex, KE::cbegin(view), KE::cend(view)); + return Impl::is_sorted_exespace_impl(label, ex, KE::cbegin(view), + KE::cend(view)); } -template +template < + typename ExecutionSpace, typename IteratorType, typename ComparatorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool is_sorted(const ExecutionSpace& ex, IteratorType first, IteratorType last, ComparatorType comp) { Impl::static_assert_is_not_openmptarget(ex); - return Impl::is_sorted_impl("Kokkos::is_sorted_iterator_api_default", ex, - first, last, std::move(comp)); + return Impl::is_sorted_exespace_impl("Kokkos::is_sorted_iterator_api_default", + ex, first, last, std::move(comp)); } -template +template < + typename ExecutionSpace, typename IteratorType, typename ComparatorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool is_sorted(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, ComparatorType comp) { Impl::static_assert_is_not_openmptarget(ex); - return Impl::is_sorted_impl(label, ex, first, last, std::move(comp)); + return Impl::is_sorted_exespace_impl(label, ex, first, last, std::move(comp)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename ComparatorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool is_sorted(const ExecutionSpace& ex, const ::Kokkos::View& view, ComparatorType comp) { @@ -79,13 +97,15 @@ bool is_sorted(const ExecutionSpace& ex, Impl::static_assert_is_not_openmptarget(ex); namespace KE = ::Kokkos::Experimental; - return Impl::is_sorted_impl("Kokkos::is_sorted_view_api_default", ex, - KE::cbegin(view), KE::cend(view), - std::move(comp)); + return Impl::is_sorted_exespace_impl("Kokkos::is_sorted_view_api_default", ex, + KE::cbegin(view), KE::cend(view), + std::move(comp)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename ComparatorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool is_sorted(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, ComparatorType comp) { @@ -93,8 +113,56 @@ bool is_sorted(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_not_openmptarget(ex); namespace KE = ::Kokkos::Experimental; - return Impl::is_sorted_impl(label, ex, KE::cbegin(view), KE::cend(view), - std::move(comp)); + return Impl::is_sorted_exespace_impl(label, ex, KE::cbegin(view), + KE::cend(view), std::move(comp)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION bool is_sorted(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last) { + return Impl::is_sorted_team_impl(teamHandle, first, last); +} + +template , int> = 0> +KOKKOS_FUNCTION bool is_sorted( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + + namespace KE = ::Kokkos::Experimental; + return Impl::is_sorted_team_impl(teamHandle, KE::cbegin(view), + KE::cend(view)); +} + +template , int> = 0> +KOKKOS_FUNCTION bool is_sorted(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + ComparatorType comp) { + Impl::static_assert_is_not_openmptarget(teamHandle); + return Impl::is_sorted_team_impl(teamHandle, first, last, std::move(comp)); +} + +template , int> = 0> +KOKKOS_FUNCTION bool is_sorted( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, ComparatorType comp) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + Impl::static_assert_is_not_openmptarget(teamHandle); + + namespace KE = ::Kokkos::Experimental; + return Impl::is_sorted_team_impl(teamHandle, KE::cbegin(view), KE::cend(view), + std::move(comp)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_IsSortedUntil.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_IsSortedUntil.hpp index 276b3bb884..96a17b6785 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_IsSortedUntil.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_IsSortedUntil.hpp @@ -23,58 +23,78 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType is_sorted_until(const ExecutionSpace& ex, IteratorType first, IteratorType last) { - return Impl::is_sorted_until_impl( + return Impl::is_sorted_until_exespace_impl( "Kokkos::is_sorted_until_iterator_api_default", ex, first, last); } -template +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType is_sorted_until(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last) { - return Impl::is_sorted_until_impl(label, ex, first, last); + return Impl::is_sorted_until_exespace_impl(label, ex, first, last); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto is_sorted_until(const ExecutionSpace& ex, const ::Kokkos::View& view) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::is_sorted_until_impl("Kokkos::is_sorted_until_view_api_default", - ex, KE::begin(view), KE::end(view)); + return Impl::is_sorted_until_exespace_impl( + "Kokkos::is_sorted_until_view_api_default", ex, KE::begin(view), + KE::end(view)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto is_sorted_until(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::is_sorted_until_impl(label, ex, KE::begin(view), KE::end(view)); + return Impl::is_sorted_until_exespace_impl(label, ex, KE::begin(view), + KE::end(view)); } -template +template < + typename ExecutionSpace, typename IteratorType, typename ComparatorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType is_sorted_until(const ExecutionSpace& ex, IteratorType first, IteratorType last, ComparatorType comp) { Impl::static_assert_is_not_openmptarget(ex); - return Impl::is_sorted_until_impl( + return Impl::is_sorted_until_exespace_impl( "Kokkos::is_sorted_until_iterator_api_default", ex, first, last, std::move(comp)); } -template +template < + typename ExecutionSpace, typename IteratorType, typename ComparatorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType is_sorted_until(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, ComparatorType comp) { Impl::static_assert_is_not_openmptarget(ex); - return Impl::is_sorted_until_impl(label, ex, first, last, std::move(comp)); + return Impl::is_sorted_until_exespace_impl(label, ex, first, last, + std::move(comp)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename ComparatorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto is_sorted_until(const ExecutionSpace& ex, const ::Kokkos::View& view, ComparatorType comp) { @@ -82,13 +102,15 @@ auto is_sorted_until(const ExecutionSpace& ex, Impl::static_assert_is_not_openmptarget(ex); namespace KE = ::Kokkos::Experimental; - return Impl::is_sorted_until_impl("Kokkos::is_sorted_until_view_api_default", - ex, KE::begin(view), KE::end(view), - std::move(comp)); + return Impl::is_sorted_until_exespace_impl( + "Kokkos::is_sorted_until_view_api_default", ex, KE::begin(view), + KE::end(view), std::move(comp)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename ComparatorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto is_sorted_until(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, ComparatorType comp) { @@ -96,8 +118,57 @@ auto is_sorted_until(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_not_openmptarget(ex); namespace KE = ::Kokkos::Experimental; - return Impl::is_sorted_until_impl(label, ex, KE::begin(view), KE::end(view), - std::move(comp)); + return Impl::is_sorted_until_exespace_impl(label, ex, KE::begin(view), + KE::end(view), std::move(comp)); +} + +// +// overload set accepting team handle +// +template , int> = 0> +KOKKOS_FUNCTION IteratorType is_sorted_until(const TeamHandleType& teamHandle, + IteratorType first, + IteratorType last) { + return Impl::is_sorted_until_team_impl(teamHandle, first, last); +} + +template , int> = 0> +KOKKOS_FUNCTION auto is_sorted_until( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + + namespace KE = ::Kokkos::Experimental; + return Impl::is_sorted_until_team_impl(teamHandle, KE::begin(view), + KE::end(view)); +} + +template , int> = 0> +KOKKOS_FUNCTION IteratorType is_sorted_until(const TeamHandleType& teamHandle, + IteratorType first, + IteratorType last, + ComparatorType comp) { + Impl::static_assert_is_not_openmptarget(teamHandle); + return Impl::is_sorted_until_team_impl(teamHandle, first, last, + std::move(comp)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto is_sorted_until( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, ComparatorType comp) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + Impl::static_assert_is_not_openmptarget(teamHandle); + + namespace KE = ::Kokkos::Experimental; + return Impl::is_sorted_until_team_impl(teamHandle, KE::begin(view), + KE::end(view), std::move(comp)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_LexicographicalCompare.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_LexicographicalCompare.hpp index 0a77ef629f..4b5c69df45 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_LexicographicalCompare.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_LexicographicalCompare.hpp @@ -23,25 +23,34 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + class ExecutionSpace, class IteratorType1, class IteratorType2, + std::enable_if_t, int> = 0> bool lexicographical_compare(const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, IteratorType2 last2) { - return Impl::lexicographical_compare_impl( + return Impl::lexicographical_compare_exespace_impl( "Kokkos::lexicographical_compare_iterator_api_default", ex, first1, last1, first2, last2); } -template +template < + class ExecutionSpace, class IteratorType1, class IteratorType2, + std::enable_if_t, int> = 0> bool lexicographical_compare(const std::string& label, const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, IteratorType2 last2) { - return Impl::lexicographical_compare_impl(label, ex, first1, last1, first2, - last2); + return Impl::lexicographical_compare_exespace_impl(label, ex, first1, last1, + first2, last2); } -template +template < + class ExecutionSpace, class DataType1, class... Properties1, + class DataType2, class... Properties2, + std::enable_if_t, int> = 0> bool lexicographical_compare( const ExecutionSpace& ex, const ::Kokkos::View& view1, @@ -50,13 +59,15 @@ bool lexicographical_compare( Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); namespace KE = ::Kokkos::Experimental; - return Impl::lexicographical_compare_impl( + return Impl::lexicographical_compare_exespace_impl( "Kokkos::lexicographical_compare_view_api_default", ex, KE::cbegin(view1), KE::cend(view1), KE::cbegin(view2), KE::cend(view2)); } -template +template < + class ExecutionSpace, class DataType1, class... Properties1, + class DataType2, class... Properties2, + std::enable_if_t, int> = 0> bool lexicographical_compare( const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view1, @@ -65,33 +76,39 @@ bool lexicographical_compare( Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); namespace KE = ::Kokkos::Experimental; - return Impl::lexicographical_compare_impl(label, ex, KE::cbegin(view1), - KE::cend(view1), KE::cbegin(view2), - KE::cend(view2)); + return Impl::lexicographical_compare_exespace_impl( + label, ex, KE::cbegin(view1), KE::cend(view1), KE::cbegin(view2), + KE::cend(view2)); } -template +template < + class ExecutionSpace, class IteratorType1, class IteratorType2, + class ComparatorType, + std::enable_if_t, int> = 0> bool lexicographical_compare(const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, IteratorType2 last2, ComparatorType comp) { - return Impl::lexicographical_compare_impl( + return Impl::lexicographical_compare_exespace_impl( "Kokkos::lexicographical_compare_iterator_api_default", ex, first1, last1, first2, last2, comp); } -template +template < + class ExecutionSpace, class IteratorType1, class IteratorType2, + class ComparatorType, + std::enable_if_t, int> = 0> bool lexicographical_compare(const std::string& label, const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, IteratorType2 last2, ComparatorType comp) { - return Impl::lexicographical_compare_impl(label, ex, first1, last1, first2, - last2, comp); + return Impl::lexicographical_compare_exespace_impl(label, ex, first1, last1, + first2, last2, comp); } -template +template < + class ExecutionSpace, class DataType1, class... Properties1, + class DataType2, class... Properties2, class ComparatorType, + std::enable_if_t, int> = 0> bool lexicographical_compare( const ExecutionSpace& ex, const ::Kokkos::View& view1, @@ -100,13 +117,15 @@ bool lexicographical_compare( Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); namespace KE = ::Kokkos::Experimental; - return Impl::lexicographical_compare_impl( + return Impl::lexicographical_compare_exespace_impl( "Kokkos::lexicographical_compare_view_api_default", ex, KE::cbegin(view1), KE::cend(view1), KE::cbegin(view2), KE::cend(view2), comp); } -template +template < + class ExecutionSpace, class DataType1, class... Properties1, + class DataType2, class... Properties2, class ComparatorType, + std::enable_if_t, int> = 0> bool lexicographical_compare( const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view1, @@ -115,9 +134,67 @@ bool lexicographical_compare( Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); namespace KE = ::Kokkos::Experimental; - return Impl::lexicographical_compare_impl(label, ex, KE::cbegin(view1), - KE::cend(view1), KE::cbegin(view2), - KE::cend(view2), comp); + return Impl::lexicographical_compare_exespace_impl( + label, ex, KE::cbegin(view1), KE::cend(view1), KE::cbegin(view2), + KE::cend(view2), comp); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION bool lexicographical_compare(const TeamHandleType& teamHandle, + IteratorType1 first1, + IteratorType1 last1, + IteratorType2 first2, + IteratorType2 last2) { + return Impl::lexicographical_compare_team_impl(teamHandle, first1, last1, + first2, last2); +} + +template , int> = 0> +KOKKOS_FUNCTION bool lexicographical_compare( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view1, + ::Kokkos::View& view2) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view1); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); + + namespace KE = ::Kokkos::Experimental; + return Impl::lexicographical_compare_team_impl( + teamHandle, KE::cbegin(view1), KE::cend(view1), KE::cbegin(view2), + KE::cend(view2)); +} + +template , int> = 0> +KOKKOS_FUNCTION bool lexicographical_compare( + const TeamHandleType& teamHandle, IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, IteratorType2 last2, ComparatorType comp) { + return Impl::lexicographical_compare_team_impl(teamHandle, first1, last1, + first2, last2, comp); +} + +template , int> = 0> +KOKKOS_FUNCTION bool lexicographical_compare( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view1, + ::Kokkos::View& view2, ComparatorType comp) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view1); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); + + namespace KE = ::Kokkos::Experimental; + return Impl::lexicographical_compare_team_impl( + teamHandle, KE::cbegin(view1), KE::cend(view1), KE::cbegin(view2), + KE::cend(view2), comp); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MaxElement.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MaxElement.hpp index 2c1374f700..d16bac5bfc 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MaxElement.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MaxElement.hpp @@ -23,81 +23,148 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto max_element(const ExecutionSpace& ex, IteratorType first, IteratorType last) { - return Impl::min_or_max_element_impl( + return Impl::min_or_max_element_exespace_impl( "Kokkos::max_element_iterator_api_default", ex, first, last); } -template +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto max_element(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last) { - return Impl::min_or_max_element_impl(label, ex, first, last); + return Impl::min_or_max_element_exespace_impl(label, ex, first, + last); } -template +template < + typename ExecutionSpace, typename IteratorType, typename ComparatorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto max_element(const ExecutionSpace& ex, IteratorType first, IteratorType last, ComparatorType comp) { Impl::static_assert_is_not_openmptarget(ex); - return Impl::min_or_max_element_impl( + return Impl::min_or_max_element_exespace_impl( "Kokkos::max_element_iterator_api_default", ex, first, last, std::move(comp)); } -template +template < + typename ExecutionSpace, typename IteratorType, typename ComparatorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto max_element(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, ComparatorType comp) { Impl::static_assert_is_not_openmptarget(ex); - return Impl::min_or_max_element_impl( + return Impl::min_or_max_element_exespace_impl( label, ex, first, last, std::move(comp)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto max_element(const ExecutionSpace& ex, const ::Kokkos::View& v) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); - return Impl::min_or_max_element_impl( + return Impl::min_or_max_element_exespace_impl( "Kokkos::max_element_view_api_default", ex, begin(v), end(v)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto max_element(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); - return Impl::min_or_max_element_impl(label, ex, begin(v), - end(v)); + return Impl::min_or_max_element_exespace_impl(label, ex, + begin(v), end(v)); } -template +template < + typename ExecutionSpace, typename DataType, typename ComparatorType, + typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto max_element(const ExecutionSpace& ex, const ::Kokkos::View& v, ComparatorType comp) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); Impl::static_assert_is_not_openmptarget(ex); - return Impl::min_or_max_element_impl( + return Impl::min_or_max_element_exespace_impl( "Kokkos::max_element_view_api_default", ex, begin(v), end(v), std::move(comp)); } -template +template < + typename ExecutionSpace, typename DataType, typename ComparatorType, + typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto max_element(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v, ComparatorType comp) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); Impl::static_assert_is_not_openmptarget(ex); - return Impl::min_or_max_element_impl( + return Impl::min_or_max_element_exespace_impl( label, ex, begin(v), end(v), std::move(comp)); } +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION auto max_element(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last) { + return Impl::min_or_max_element_team_impl(teamHandle, first, + last); +} + +template , int> = 0> +KOKKOS_FUNCTION auto max_element( + const TeamHandleType& teamHandle, + const ::Kokkos::View& v) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + + return Impl::min_or_max_element_team_impl(teamHandle, begin(v), + end(v)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto max_element(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + ComparatorType comp) { + Impl::static_assert_is_not_openmptarget(teamHandle); + return Impl::min_or_max_element_team_impl( + teamHandle, first, last, std::move(comp)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto max_element( + const TeamHandleType& teamHandle, + const ::Kokkos::View& v, ComparatorType comp) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + Impl::static_assert_is_not_openmptarget(teamHandle); + return Impl::min_or_max_element_team_impl( + teamHandle, begin(v), end(v), std::move(comp)); +} + } // namespace Experimental } // namespace Kokkos diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MinElement.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MinElement.hpp index 1d03b7c962..2a53fce3e2 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MinElement.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MinElement.hpp @@ -23,81 +23,148 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto min_element(const ExecutionSpace& ex, IteratorType first, IteratorType last) { - return Impl::min_or_max_element_impl( + return Impl::min_or_max_element_exespace_impl( "Kokkos::min_element_iterator_api_default", ex, first, last); } -template +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto min_element(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last) { - return Impl::min_or_max_element_impl(label, ex, first, last); + return Impl::min_or_max_element_exespace_impl(label, ex, first, + last); } -template +template < + typename ExecutionSpace, typename IteratorType, typename ComparatorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto min_element(const ExecutionSpace& ex, IteratorType first, IteratorType last, ComparatorType comp) { Impl::static_assert_is_not_openmptarget(ex); - return Impl::min_or_max_element_impl( + return Impl::min_or_max_element_exespace_impl( "Kokkos::min_element_iterator_api_default", ex, first, last, std::move(comp)); } -template +template < + typename ExecutionSpace, typename IteratorType, typename ComparatorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto min_element(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, ComparatorType comp) { Impl::static_assert_is_not_openmptarget(ex); - return Impl::min_or_max_element_impl( + return Impl::min_or_max_element_exespace_impl( label, ex, first, last, std::move(comp)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto min_element(const ExecutionSpace& ex, const ::Kokkos::View& v) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); - return Impl::min_or_max_element_impl( + return Impl::min_or_max_element_exespace_impl( "Kokkos::min_element_view_api_default", ex, begin(v), end(v)); } -template +template < + typename ExecutionSpace, typename DataType, typename ComparatorType, + typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto min_element(const ExecutionSpace& ex, const ::Kokkos::View& v, ComparatorType comp) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); Impl::static_assert_is_not_openmptarget(ex); - return Impl::min_or_max_element_impl( + return Impl::min_or_max_element_exespace_impl( "Kokkos::min_element_view_api_default", ex, begin(v), end(v), std::move(comp)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto min_element(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); - return Impl::min_or_max_element_impl(label, ex, begin(v), - end(v)); + return Impl::min_or_max_element_exespace_impl(label, ex, + begin(v), end(v)); } -template +template < + typename ExecutionSpace, typename DataType, typename ComparatorType, + typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto min_element(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v, ComparatorType comp) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); Impl::static_assert_is_not_openmptarget(ex); - return Impl::min_or_max_element_impl( + return Impl::min_or_max_element_exespace_impl( label, ex, begin(v), end(v), std::move(comp)); } +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION auto min_element(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last) { + return Impl::min_or_max_element_team_impl(teamHandle, first, + last); +} + +template , int> = 0> +KOKKOS_FUNCTION auto min_element( + const TeamHandleType& teamHandle, + const ::Kokkos::View& v) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + + return Impl::min_or_max_element_team_impl(teamHandle, begin(v), + end(v)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto min_element(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + ComparatorType comp) { + Impl::static_assert_is_not_openmptarget(teamHandle); + return Impl::min_or_max_element_team_impl( + teamHandle, first, last, std::move(comp)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto min_element( + const TeamHandleType& teamHandle, + const ::Kokkos::View& v, ComparatorType comp) { + Impl::static_assert_is_not_openmptarget(teamHandle); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + return Impl::min_or_max_element_team_impl( + teamHandle, begin(v), end(v), std::move(comp)); +} + } // namespace Experimental } // namespace Kokkos diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MinMaxElement.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MinMaxElement.hpp index d481b499cc..c3a1f73ef6 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MinMaxElement.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MinMaxElement.hpp @@ -23,82 +23,151 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto minmax_element(const ExecutionSpace& ex, IteratorType first, IteratorType last) { - return Impl::minmax_element_impl( + return Impl::minmax_element_exespace_impl( "Kokkos::minmax_element_iterator_api_default", ex, first, last); } -template +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto minmax_element(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last) { - return Impl::minmax_element_impl(label, ex, first, last); + return Impl::minmax_element_exespace_impl(label, ex, + first, last); } -template +template < + typename ExecutionSpace, typename IteratorType, typename ComparatorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto minmax_element(const ExecutionSpace& ex, IteratorType first, IteratorType last, ComparatorType comp) { Impl::static_assert_is_not_openmptarget(ex); - return Impl::minmax_element_impl( + return Impl::minmax_element_exespace_impl( "Kokkos::minmax_element_iterator_api_default", ex, first, last, std::move(comp)); } -template +template < + typename ExecutionSpace, typename IteratorType, typename ComparatorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto minmax_element(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, ComparatorType comp) { Impl::static_assert_is_not_openmptarget(ex); - return Impl::minmax_element_impl( + return Impl::minmax_element_exespace_impl( label, ex, first, last, std::move(comp)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto minmax_element(const ExecutionSpace& ex, const ::Kokkos::View& v) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); - return Impl::minmax_element_impl( + return Impl::minmax_element_exespace_impl( "Kokkos::minmax_element_view_api_default", ex, begin(v), end(v)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto minmax_element(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); - return Impl::minmax_element_impl(label, ex, begin(v), - end(v)); + return Impl::minmax_element_exespace_impl( + label, ex, begin(v), end(v)); } -template +template < + typename ExecutionSpace, typename DataType, typename ComparatorType, + typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto minmax_element(const ExecutionSpace& ex, const ::Kokkos::View& v, ComparatorType comp) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); Impl::static_assert_is_not_openmptarget(ex); - return Impl::minmax_element_impl( + return Impl::minmax_element_exespace_impl( "Kokkos::minmax_element_view_api_default", ex, begin(v), end(v), std::move(comp)); } -template +template < + typename ExecutionSpace, typename DataType, typename ComparatorType, + typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto minmax_element(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v, ComparatorType comp) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); Impl::static_assert_is_not_openmptarget(ex); - return Impl::minmax_element_impl( + return Impl::minmax_element_exespace_impl( label, ex, begin(v), end(v), std::move(comp)); } +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION auto minmax_element(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last) { + return Impl::minmax_element_team_impl(teamHandle, first, + last); +} + +template , int> = 0> +KOKKOS_FUNCTION auto minmax_element(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + ComparatorType comp) { + Impl::static_assert_is_not_openmptarget(teamHandle); + + return Impl::minmax_element_team_impl( + teamHandle, first, last, std::move(comp)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto minmax_element( + const TeamHandleType& teamHandle, + const ::Kokkos::View& v) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + + return Impl::minmax_element_team_impl(teamHandle, + begin(v), end(v)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto minmax_element( + const TeamHandleType& teamHandle, + const ::Kokkos::View& v, ComparatorType comp) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + Impl::static_assert_is_not_openmptarget(teamHandle); + + return Impl::minmax_element_team_impl( + teamHandle, begin(v), end(v), std::move(comp)); +} + } // namespace Experimental } // namespace Kokkos diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Mismatch.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Mismatch.hpp index 13c994ca90..090afe69e3 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Mismatch.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Mismatch.hpp @@ -30,46 +30,60 @@ namespace Experimental { // // makes API ambiguous (with the overload accepting views). -template +// +// overload set accepting execution space +// +template < + class ExecutionSpace, class IteratorType1, class IteratorType2, + std::enable_if_t, int> = 0> ::Kokkos::pair mismatch(const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, IteratorType2 last2) { - return Impl::mismatch_impl("Kokkos::mismatch_iterator_api_default", ex, - first1, last1, first2, last2); + return Impl::mismatch_exespace_impl("Kokkos::mismatch_iterator_api_default", + ex, first1, last1, first2, last2); } -template +template < + class ExecutionSpace, class IteratorType1, class IteratorType2, + class BinaryPredicateType, + std::enable_if_t, int> = 0> ::Kokkos::pair mismatch( const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, IteratorType2 last2, BinaryPredicateType&& predicate) { - return Impl::mismatch_impl("Kokkos::mismatch_iterator_api_default", ex, - first1, last1, first2, last2, - std::forward(predicate)); + return Impl::mismatch_exespace_impl( + "Kokkos::mismatch_iterator_api_default", ex, first1, last1, first2, last2, + std::forward(predicate)); } -template +template < + class ExecutionSpace, class IteratorType1, class IteratorType2, + std::enable_if_t, int> = 0> ::Kokkos::pair mismatch( const std::string& label, const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, IteratorType2 last2) { - return Impl::mismatch_impl(label, ex, first1, last1, first2, last2); + return Impl::mismatch_exespace_impl(label, ex, first1, last1, first2, last2); } -template +template < + class ExecutionSpace, class IteratorType1, class IteratorType2, + class BinaryPredicateType, + std::enable_if_t, int> = 0> ::Kokkos::pair mismatch( const std::string& label, const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, IteratorType2 last2, BinaryPredicateType&& predicate) { - return Impl::mismatch_impl(label, ex, first1, last1, first2, last2, - std::forward(predicate)); + return Impl::mismatch_exespace_impl( + label, ex, first1, last1, first2, last2, + std::forward(predicate)); } -template +template < + class ExecutionSpace, class DataType1, class... Properties1, + class DataType2, class... Properties2, + std::enable_if_t, int> = 0> auto mismatch(const ExecutionSpace& ex, const ::Kokkos::View& view1, const ::Kokkos::View& view2) { @@ -77,13 +91,15 @@ auto mismatch(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); namespace KE = ::Kokkos::Experimental; - return Impl::mismatch_impl("Kokkos::mismatch_view_api_default", ex, - KE::begin(view1), KE::end(view1), KE::begin(view2), - KE::end(view2)); + return Impl::mismatch_exespace_impl("Kokkos::mismatch_view_api_default", ex, + KE::begin(view1), KE::end(view1), + KE::begin(view2), KE::end(view2)); } -template +template < + class ExecutionSpace, class DataType1, class... Properties1, + class DataType2, class... Properties2, class BinaryPredicateType, + std::enable_if_t, int> = 0> auto mismatch(const ExecutionSpace& ex, const ::Kokkos::View& view1, const ::Kokkos::View& view2, @@ -92,14 +108,16 @@ auto mismatch(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); namespace KE = ::Kokkos::Experimental; - return Impl::mismatch_impl("Kokkos::mismatch_view_api_default", ex, - KE::begin(view1), KE::end(view1), KE::begin(view2), - KE::end(view2), - std::forward(predicate)); + return Impl::mismatch_exespace_impl( + "Kokkos::mismatch_view_api_default", ex, KE::begin(view1), KE::end(view1), + KE::begin(view2), KE::end(view2), + std::forward(predicate)); } -template +template < + class ExecutionSpace, class DataType1, class... Properties1, + class DataType2, class... Properties2, + std::enable_if_t, int> = 0> auto mismatch(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view1, const ::Kokkos::View& view2) { @@ -107,12 +125,15 @@ auto mismatch(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); namespace KE = ::Kokkos::Experimental; - return Impl::mismatch_impl(label, ex, KE::begin(view1), KE::end(view1), - KE::begin(view2), KE::end(view2)); + return Impl::mismatch_exespace_impl(label, ex, KE::begin(view1), + KE::end(view1), KE::begin(view2), + KE::end(view2)); } -template +template < + class ExecutionSpace, class DataType1, class... Properties1, + class DataType2, class... Properties2, class BinaryPredicateType, + std::enable_if_t, int> = 0> auto mismatch(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view1, const ::Kokkos::View& view2, @@ -121,9 +142,65 @@ auto mismatch(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); namespace KE = ::Kokkos::Experimental; - return Impl::mismatch_impl(label, ex, KE::begin(view1), KE::end(view1), - KE::begin(view2), KE::end(view2), - std::forward(predicate)); + return Impl::mismatch_exespace_impl( + label, ex, KE::begin(view1), KE::end(view1), KE::begin(view2), + KE::end(view2), std::forward(predicate)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION ::Kokkos::pair mismatch( + const TeamHandleType& teamHandle, IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, IteratorType2 last2) { + return Impl::mismatch_team_impl(teamHandle, first1, last1, first2, last2); +} + +template , int> = 0> +KOKKOS_FUNCTION ::Kokkos::pair mismatch( + const TeamHandleType& teamHandle, IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, IteratorType2 last2, + BinaryPredicateType&& predicate) { + return Impl::mismatch_team_impl(teamHandle, first1, last1, first2, last2, + std::forward(predicate)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto mismatch( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view1, + const ::Kokkos::View& view2) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view1); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); + + namespace KE = ::Kokkos::Experimental; + return Impl::mismatch_team_impl(teamHandle, KE::begin(view1), KE::end(view1), + KE::begin(view2), KE::end(view2)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto mismatch( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view1, + const ::Kokkos::View& view2, + BinaryPredicateType&& predicate) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view1); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view2); + + namespace KE = ::Kokkos::Experimental; + return Impl::mismatch_team_impl(teamHandle, KE::begin(view1), KE::end(view1), + KE::begin(view2), KE::end(view2), + std::forward(predicate)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Move.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Move.hpp index d49acd9f70..f04ea12ba8 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Move.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Move.hpp @@ -23,41 +23,81 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator move(const ExecutionSpace& ex, InputIterator first, InputIterator last, OutputIterator d_first) { - return Impl::move_impl("Kokkos::move_iterator_api_default", ex, first, last, - d_first); + return Impl::move_exespace_impl("Kokkos::move_iterator_api_default", ex, + first, last, d_first); } -template +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator move(const std::string& label, const ExecutionSpace& ex, InputIterator first, InputIterator last, OutputIterator d_first) { - return Impl::move_impl(label, ex, first, last, d_first); + return Impl::move_exespace_impl(label, ex, first, last, d_first); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto move(const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::move_impl("Kokkos::move_view_api_default", ex, begin(source), - end(source), begin(dest)); + return Impl::move_exespace_impl("Kokkos::move_view_api_default", ex, + begin(source), end(source), begin(dest)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto move(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::move_impl(label, ex, begin(source), end(source), begin(dest)); + return Impl::move_exespace_impl(label, ex, begin(source), end(source), + begin(dest)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION OutputIterator move(const TeamHandleType& teamHandle, + InputIterator first, InputIterator last, + OutputIterator d_first) { + return Impl::move_team_impl(teamHandle, first, last, d_first); +} + +template , int> = 0> +KOKKOS_FUNCTION auto move( + const TeamHandleType& teamHandle, + const ::Kokkos::View& source, + ::Kokkos::View& dest) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); + + return Impl::move_team_impl(teamHandle, begin(source), end(source), + begin(dest)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MoveBackward.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MoveBackward.hpp index 60d50fa881..375474ca57 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MoveBackward.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_MoveBackward.hpp @@ -23,42 +23,83 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType2 move_backward(const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 d_last) { - return Impl::move_backward_impl("Kokkos::move_backward_iterator_api_default", - ex, first, last, d_last); + return Impl::move_backward_exespace_impl( + "Kokkos::move_backward_iterator_api_default", ex, first, last, d_last); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto move_backward(const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::move_backward_impl("Kokkos::move_backward_view_api_default", ex, - begin(source), end(source), end(dest)); + return Impl::move_backward_exespace_impl( + "Kokkos::move_backward_view_api_default", ex, begin(source), end(source), + end(dest)); } -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType2 move_backward(const std::string& label, const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 d_last) { - return Impl::move_backward_impl(label, ex, first, last, d_last); + return Impl::move_backward_exespace_impl(label, ex, first, last, d_last); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto move_backward(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::move_backward_impl(label, ex, begin(source), end(source), - end(dest)); + return Impl::move_backward_exespace_impl(label, ex, begin(source), + end(source), end(dest)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION IteratorType2 move_backward(const TeamHandleType& teamHandle, + IteratorType1 first, + IteratorType1 last, + IteratorType2 d_last) { + return Impl::move_backward_team_impl(teamHandle, first, last, d_last); +} + +template , int> = 0> +KOKKOS_FUNCTION auto move_backward( + const TeamHandleType& teamHandle, + const ::Kokkos::View& source, + ::Kokkos::View& dest) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); + + return Impl::move_backward_team_impl(teamHandle, begin(source), end(source), + end(dest)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_NoneOf.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_NoneOf.hpp index cf5de3b72b..f7baab3fc0 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_NoneOf.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_NoneOf.hpp @@ -23,41 +23,80 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool none_of(const ExecutionSpace& ex, IteratorType first, IteratorType last, Predicate predicate) { - return Impl::none_of_impl("Kokkos::none_of_iterator_api_default", ex, first, - last, predicate); + return Impl::none_of_exespace_impl("Kokkos::none_of_iterator_api_default", ex, + first, last, predicate); } -template +template < + typename ExecutionSpace, typename IteratorType, typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool none_of(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, Predicate predicate) { - return Impl::none_of_impl(label, ex, first, last, predicate); + return Impl::none_of_exespace_impl(label, ex, first, last, predicate); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool none_of(const ExecutionSpace& ex, const ::Kokkos::View& v, Predicate predicate) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::none_of_impl("Kokkos::none_of_view_api_default", ex, - KE::cbegin(v), KE::cend(v), std::move(predicate)); + return Impl::none_of_exespace_impl("Kokkos::none_of_view_api_default", ex, + KE::cbegin(v), KE::cend(v), + std::move(predicate)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename Predicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> bool none_of(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v, Predicate predicate) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); namespace KE = ::Kokkos::Experimental; - return Impl::none_of_impl(label, ex, KE::cbegin(v), KE::cend(v), - std::move(predicate)); + return Impl::none_of_exespace_impl(label, ex, KE::cbegin(v), KE::cend(v), + std::move(predicate)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template +KOKKOS_FUNCTION + std::enable_if_t<::Kokkos::is_team_handle::value, bool> + none_of(const TeamHandleType& teamHandle, IteratorType first, + IteratorType last, Predicate predicate) { + return Impl::none_of_team_impl(teamHandle, first, last, predicate); +} + +template +KOKKOS_FUNCTION + std::enable_if_t<::Kokkos::is_team_handle::value, bool> + none_of(const TeamHandleType& teamHandle, + const ::Kokkos::View& v, + Predicate predicate) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + + namespace KE = ::Kokkos::Experimental; + return Impl::none_of_team_impl(teamHandle, KE::cbegin(v), KE::cend(v), + std::move(predicate)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_PartitionCopy.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_PartitionCopy.hpp index 38c0a35b62..a1feee8d6d 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_PartitionCopy.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_PartitionCopy.hpp @@ -23,57 +23,103 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIteratorType, + typename OutputIteratorTrueType, typename OutputIteratorFalseType, + typename PredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> ::Kokkos::pair partition_copy( const ExecutionSpace& ex, InputIteratorType from_first, InputIteratorType from_last, OutputIteratorTrueType to_first_true, OutputIteratorFalseType to_first_false, PredicateType p) { - return Impl::partition_copy_impl( + return Impl::partition_copy_exespace_impl( "Kokkos::partition_copy_iterator_api_default", ex, from_first, from_last, to_first_true, to_first_false, std::move(p)); } -template +template < + typename ExecutionSpace, typename InputIteratorType, + typename OutputIteratorTrueType, typename OutputIteratorFalseType, + typename PredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> ::Kokkos::pair partition_copy( const std::string& label, const ExecutionSpace& ex, InputIteratorType from_first, InputIteratorType from_last, OutputIteratorTrueType to_first_true, OutputIteratorFalseType to_first_false, PredicateType p) { - return Impl::partition_copy_impl(label, ex, from_first, from_last, - to_first_true, to_first_false, std::move(p)); + return Impl::partition_copy_exespace_impl(label, ex, from_first, from_last, + to_first_true, to_first_false, + std::move(p)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename DataType3, + typename... Properties3, typename PredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto partition_copy( const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest_true, const ::Kokkos::View& view_dest_false, PredicateType p) { - return Impl::partition_copy_impl("Kokkos::partition_copy_view_api_default", - ex, cbegin(view_from), cend(view_from), - begin(view_dest_true), - begin(view_dest_false), std::move(p)); + return Impl::partition_copy_exespace_impl( + "Kokkos::partition_copy_view_api_default", ex, cbegin(view_from), + cend(view_from), begin(view_dest_true), begin(view_dest_false), + std::move(p)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename DataType3, + typename... Properties3, typename PredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto partition_copy( const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest_true, const ::Kokkos::View& view_dest_false, PredicateType p) { - return Impl::partition_copy_impl(label, ex, cbegin(view_from), - cend(view_from), begin(view_dest_true), - begin(view_dest_false), std::move(p)); + return Impl::partition_copy_exespace_impl( + label, ex, cbegin(view_from), cend(view_from), begin(view_dest_true), + begin(view_dest_false), std::move(p)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION ::Kokkos::pair +partition_copy(const TeamHandleType& teamHandle, InputIteratorType from_first, + InputIteratorType from_last, + OutputIteratorTrueType to_first_true, + OutputIteratorFalseType to_first_false, PredicateType p) { + return Impl::partition_copy_team_impl(teamHandle, from_first, from_last, + to_first_true, to_first_false, + std::move(p)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto partition_copy( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view_from, + const ::Kokkos::View& view_dest_true, + const ::Kokkos::View& view_dest_false, + PredicateType p) { + return Impl::partition_copy_team_impl(teamHandle, cbegin(view_from), + cend(view_from), begin(view_dest_true), + begin(view_dest_false), std::move(p)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_PartitionPoint.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_PartitionPoint.hpp index 24798e377e..60cbeeda87 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_PartitionPoint.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_PartitionPoint.hpp @@ -23,38 +23,78 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, typename UnaryPredicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType partition_point(const ExecutionSpace& ex, IteratorType first, IteratorType last, UnaryPredicate p) { - return Impl::partition_point_impl( + return Impl::partition_point_exespace_impl( "Kokkos::partitioned_point_iterator_api_default", ex, first, last, std::move(p)); } -template +template < + typename ExecutionSpace, typename IteratorType, typename UnaryPredicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType partition_point(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, UnaryPredicate p) { - return Impl::partition_point_impl(label, ex, first, last, std::move(p)); + return Impl::partition_point_exespace_impl(label, ex, first, last, + std::move(p)); } -template +template < + typename ExecutionSpace, typename UnaryPredicate, typename DataType, + typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto partition_point(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& v, UnaryPredicate p) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); - return Impl::partition_point_impl(label, ex, begin(v), end(v), std::move(p)); + return Impl::partition_point_exespace_impl(label, ex, begin(v), end(v), + std::move(p)); } -template +template < + typename ExecutionSpace, typename UnaryPredicate, typename DataType, + typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto partition_point(const ExecutionSpace& ex, const ::Kokkos::View& v, UnaryPredicate p) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); - return Impl::partition_point_impl("Kokkos::partition_point_view_api_default", - ex, begin(v), end(v), std::move(p)); + return Impl::partition_point_exespace_impl( + "Kokkos::partition_point_view_api_default", ex, begin(v), end(v), + std::move(p)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION IteratorType partition_point(const TeamHandleType& teamHandle, + IteratorType first, + IteratorType last, + UnaryPredicate p) { + return Impl::partition_point_team_impl(teamHandle, first, last, std::move(p)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto partition_point( + const TeamHandleType& teamHandle, + const ::Kokkos::View& v, UnaryPredicate p) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(v); + return Impl::partition_point_team_impl(teamHandle, begin(v), end(v), + std::move(p)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Reduce.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Reduce.hpp index a31fa1497a..b84f00f8bb 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Reduce.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Reduce.hpp @@ -23,28 +23,38 @@ namespace Kokkos { namespace Experimental { +// +// overload set accepting execution space +// + // // overload set 1 // -template +template ::value, + int> = 0> typename IteratorType::value_type reduce(const ExecutionSpace& ex, IteratorType first, IteratorType last) { - return Impl::reduce_default_functors_impl( + return Impl::reduce_default_functors_exespace_impl( "Kokkos::reduce_default_functors_iterator_api", ex, first, last, typename IteratorType::value_type()); } -template +template ::value, + int> = 0> typename IteratorType::value_type reduce(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last) { - return Impl::reduce_default_functors_impl( + return Impl::reduce_default_functors_exespace_impl( label, ex, first, last, typename IteratorType::value_type()); } -template +template ::value, + int> = 0> auto reduce(const ExecutionSpace& ex, const ::Kokkos::View& view) { namespace KE = ::Kokkos::Experimental; @@ -53,12 +63,14 @@ auto reduce(const ExecutionSpace& ex, using view_type = ::Kokkos::View; using value_type = typename view_type::value_type; - return Impl::reduce_default_functors_impl( + return Impl::reduce_default_functors_exespace_impl( "Kokkos::reduce_default_functors_view_api", ex, KE::cbegin(view), KE::cend(view), value_type()); } -template +template ::value, + int> = 0> auto reduce(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view) { namespace KE = ::Kokkos::Experimental; @@ -67,37 +79,43 @@ auto reduce(const std::string& label, const ExecutionSpace& ex, using view_type = ::Kokkos::View; using value_type = typename view_type::value_type; - return Impl::reduce_default_functors_impl(label, ex, KE::cbegin(view), - KE::cend(view), value_type()); + return Impl::reduce_default_functors_exespace_impl( + label, ex, KE::cbegin(view), KE::cend(view), value_type()); } // // overload set2: // -template +template ::value, + int> = 0> ValueType reduce(const ExecutionSpace& ex, IteratorType first, IteratorType last, ValueType init_reduction_value) { static_assert(std::is_move_constructible::value, "ValueType must be move constructible."); - return Impl::reduce_default_functors_impl( + return Impl::reduce_default_functors_exespace_impl( "Kokkos::reduce_default_functors_iterator_api", ex, first, last, init_reduction_value); } -template +template ::value, + int> = 0> ValueType reduce(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, ValueType init_reduction_value) { static_assert(std::is_move_constructible::value, "ValueType must be move constructible."); - return Impl::reduce_default_functors_impl(label, ex, first, last, - init_reduction_value); + return Impl::reduce_default_functors_exespace_impl(label, ex, first, last, + init_reduction_value); } -template +template ::value, + int> = 0> ValueType reduce(const ExecutionSpace& ex, const ::Kokkos::View& view, ValueType init_reduction_value) { @@ -107,13 +125,15 @@ ValueType reduce(const ExecutionSpace& ex, namespace KE = ::Kokkos::Experimental; Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::reduce_default_functors_impl( + return Impl::reduce_default_functors_exespace_impl( "Kokkos::reduce_default_functors_view_api", ex, KE::cbegin(view), KE::cend(view), init_reduction_value); } -template +template ::value, + int> = 0> ValueType reduce(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, ValueType init_reduction_value) { @@ -123,40 +143,46 @@ ValueType reduce(const std::string& label, const ExecutionSpace& ex, namespace KE = ::Kokkos::Experimental; Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::reduce_default_functors_impl( + return Impl::reduce_default_functors_exespace_impl( label, ex, KE::cbegin(view), KE::cend(view), init_reduction_value); } // // overload set 3 // -template +template ::value, + int> = 0> ValueType reduce(const ExecutionSpace& ex, IteratorType first, IteratorType last, ValueType init_reduction_value, BinaryOp joiner) { static_assert(std::is_move_constructible::value, "ValueType must be move constructible."); - return Impl::reduce_custom_functors_impl( + return Impl::reduce_custom_functors_exespace_impl( "Kokkos::reduce_default_functors_iterator_api", ex, first, last, init_reduction_value, joiner); } -template +template ::value, + int> = 0> ValueType reduce(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, ValueType init_reduction_value, BinaryOp joiner) { static_assert(std::is_move_constructible::value, "ValueType must be move constructible."); - return Impl::reduce_custom_functors_impl(label, ex, first, last, - init_reduction_value, joiner); + return Impl::reduce_custom_functors_exespace_impl( + label, ex, first, last, init_reduction_value, joiner); } -template +template ::value, + int> = 0> ValueType reduce(const ExecutionSpace& ex, const ::Kokkos::View& view, ValueType init_reduction_value, BinaryOp joiner) { @@ -166,13 +192,15 @@ ValueType reduce(const ExecutionSpace& ex, namespace KE = ::Kokkos::Experimental; Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::reduce_custom_functors_impl( + return Impl::reduce_custom_functors_exespace_impl( "Kokkos::reduce_custom_functors_view_api", ex, KE::cbegin(view), KE::cend(view), init_reduction_value, joiner); } -template +template ::value, + int> = 0> ValueType reduce(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, ValueType init_reduction_value, BinaryOp joiner) { @@ -182,9 +210,114 @@ ValueType reduce(const std::string& label, const ExecutionSpace& ex, namespace KE = ::Kokkos::Experimental; Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::reduce_custom_functors_impl(label, ex, KE::cbegin(view), - KE::cend(view), init_reduction_value, - joiner); + return Impl::reduce_custom_functors_exespace_impl( + label, ex, KE::cbegin(view), KE::cend(view), init_reduction_value, + joiner); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// + +// +// overload set 1 +// +template < + typename TeamHandleType, typename IteratorType, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION typename IteratorType::value_type reduce( + const TeamHandleType& teamHandle, IteratorType first, IteratorType last) { + return Impl::reduce_default_functors_team_impl( + teamHandle, first, last, typename IteratorType::value_type()); +} + +template < + typename TeamHandleType, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION auto reduce( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view) { + namespace KE = ::Kokkos::Experimental; + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + + using view_type = ::Kokkos::View; + using value_type = typename view_type::value_type; + + return Impl::reduce_default_functors_team_impl(teamHandle, KE::cbegin(view), + KE::cend(view), value_type()); +} + +// +// overload set2: +// +template < + typename TeamHandleType, typename IteratorType, typename ValueType, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION ValueType reduce(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + ValueType init_reduction_value) { + static_assert(std::is_move_constructible::value, + "ValueType must be move constructible."); + + return Impl::reduce_default_functors_team_impl(teamHandle, first, last, + init_reduction_value); +} + +template < + typename TeamHandleType, typename DataType, typename... Properties, + typename ValueType, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION ValueType +reduce(const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + ValueType init_reduction_value) { + static_assert(std::is_move_constructible::value, + "ValueType must be move constructible."); + + namespace KE = ::Kokkos::Experimental; + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + + return Impl::reduce_default_functors_team_impl( + teamHandle, KE::cbegin(view), KE::cend(view), init_reduction_value); +} + +// +// overload set 3 +// +template < + typename TeamHandleType, typename IteratorType, typename ValueType, + typename BinaryOp, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION ValueType reduce(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + ValueType init_reduction_value, + BinaryOp joiner) { + static_assert(std::is_move_constructible::value, + "ValueType must be move constructible."); + + return Impl::reduce_custom_functors_team_impl(teamHandle, first, last, + init_reduction_value, joiner); +} + +template < + typename TeamHandleType, typename DataType, typename... Properties, + typename ValueType, typename BinaryOp, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION ValueType +reduce(const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + ValueType init_reduction_value, BinaryOp joiner) { + static_assert(std::is_move_constructible::value, + "ValueType must be move constructible."); + + namespace KE = ::Kokkos::Experimental; + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + + return Impl::reduce_custom_functors_team_impl(teamHandle, KE::cbegin(view), + KE::cend(view), + init_reduction_value, joiner); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Remove.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Remove.hpp index c8602d2f53..8a429d8d51 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Remove.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Remove.hpp @@ -23,38 +23,74 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename Iterator, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> Iterator remove(const ExecutionSpace& ex, Iterator first, Iterator last, const ValueType& value) { - return Impl::remove_impl("Kokkos::remove_iterator_api_default", ex, first, - last, value); + return Impl::remove_exespace_impl("Kokkos::remove_iterator_api_default", ex, + first, last, value); } -template +template < + typename ExecutionSpace, typename Iterator, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> Iterator remove(const std::string& label, const ExecutionSpace& ex, Iterator first, Iterator last, const ValueType& value) { - return Impl::remove_impl(label, ex, first, last, value); + return Impl::remove_exespace_impl(label, ex, first, last, value); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto remove(const ExecutionSpace& ex, const ::Kokkos::View& view, const ValueType& value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::remove_impl("Kokkos::remove_iterator_api_default", ex, - ::Kokkos::Experimental::begin(view), - ::Kokkos::Experimental::end(view), value); + return Impl::remove_exespace_impl("Kokkos::remove_iterator_api_default", ex, + ::Kokkos::Experimental::begin(view), + ::Kokkos::Experimental::end(view), value); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto remove(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, const ValueType& value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::remove_impl(label, ex, ::Kokkos::Experimental::begin(view), - ::Kokkos::Experimental::end(view), value); + return Impl::remove_exespace_impl(label, ex, + ::Kokkos::Experimental::begin(view), + ::Kokkos::Experimental::end(view), value); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION Iterator remove(const TeamHandleType& teamHandle, + Iterator first, Iterator last, + const ValueType& value) { + return Impl::remove_team_impl(teamHandle, first, last, value); +} + +template , int> = 0> +KOKKOS_FUNCTION auto remove(const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + const ValueType& value) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + return Impl::remove_team_impl(teamHandle, ::Kokkos::Experimental::begin(view), + ::Kokkos::Experimental::end(view), value); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RemoveCopy.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RemoveCopy.hpp index c2c06f6202..4b8fa9fe07 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RemoveCopy.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RemoveCopy.hpp @@ -23,26 +23,36 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator remove_copy(const ExecutionSpace& ex, InputIterator first_from, InputIterator last_from, OutputIterator first_dest, const ValueType& value) { - return Impl::remove_copy_impl("Kokkos::remove_copy_iterator_api_default", ex, - first_from, last_from, first_dest, value); + return Impl::remove_copy_exespace_impl( + "Kokkos::remove_copy_iterator_api_default", ex, first_from, last_from, + first_dest, value); } -template +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator remove_copy(const std::string& label, const ExecutionSpace& ex, InputIterator first_from, InputIterator last_from, OutputIterator first_dest, const ValueType& value) { - return Impl::remove_copy_impl(label, ex, first_from, last_from, first_dest, - value); + return Impl::remove_copy_exespace_impl(label, ex, first_from, last_from, + first_dest, value); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto remove_copy(const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, @@ -50,15 +60,17 @@ auto remove_copy(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); - return Impl::remove_copy_impl("Kokkos::remove_copy_iterator_api_default", ex, - ::Kokkos::Experimental::cbegin(view_from), - ::Kokkos::Experimental::cend(view_from), - ::Kokkos::Experimental::begin(view_dest), - value); + return Impl::remove_copy_exespace_impl( + "Kokkos::remove_copy_iterator_api_default", ex, + ::Kokkos::Experimental::cbegin(view_from), + ::Kokkos::Experimental::cend(view_from), + ::Kokkos::Experimental::begin(view_dest), value); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto remove_copy(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, @@ -66,12 +78,46 @@ auto remove_copy(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); - return Impl::remove_copy_impl( + return Impl::remove_copy_exespace_impl( label, ex, ::Kokkos::Experimental::cbegin(view_from), ::Kokkos::Experimental::cend(view_from), ::Kokkos::Experimental::begin(view_dest), value); } +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION OutputIterator remove_copy(const TeamHandleType& teamHandle, + InputIterator first_from, + InputIterator last_from, + OutputIterator first_dest, + const ValueType& value) { + return Impl::remove_copy_team_impl(teamHandle, first_from, last_from, + first_dest, value); +} + +template , int> = 0> +KOKKOS_FUNCTION auto remove_copy( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view_from, + const ::Kokkos::View& view_dest, + const ValueType& value) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + + return Impl::remove_copy_team_impl( + teamHandle, ::Kokkos::Experimental::cbegin(view_from), + ::Kokkos::Experimental::cend(view_from), + ::Kokkos::Experimental::begin(view_dest), value); +} + } // namespace Experimental } // namespace Kokkos diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RemoveCopyIf.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RemoveCopyIf.hpp index 6d642ed6f0..45e2b54bb6 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RemoveCopyIf.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RemoveCopyIf.hpp @@ -23,30 +23,39 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + typename UnaryPredicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator remove_copy_if(const ExecutionSpace& ex, InputIterator first_from, InputIterator last_from, OutputIterator first_dest, const UnaryPredicate& pred) { - return Impl::remove_copy_if_impl( + return Impl::remove_copy_if_exespace_impl( "Kokkos::remove_copy_if_iterator_api_default", ex, first_from, last_from, first_dest, pred); } -template +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + typename UnaryPredicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator remove_copy_if(const std::string& label, const ExecutionSpace& ex, InputIterator first_from, InputIterator last_from, OutputIterator first_dest, const UnaryPredicate& pred) { - return Impl::remove_copy_if_impl(label, ex, first_from, last_from, first_dest, - pred); + return Impl::remove_copy_if_exespace_impl(label, ex, first_from, last_from, + first_dest, pred); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename UnaryPredicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto remove_copy_if(const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, @@ -54,15 +63,17 @@ auto remove_copy_if(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); - return Impl::remove_copy_if_impl( + return Impl::remove_copy_if_exespace_impl( "Kokkos::remove_copy_if_iterator_api_default", ex, ::Kokkos::Experimental::cbegin(view_from), ::Kokkos::Experimental::cend(view_from), ::Kokkos::Experimental::begin(view_dest), pred); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename UnaryPredicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto remove_copy_if(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, @@ -70,12 +81,46 @@ auto remove_copy_if(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); - return Impl::remove_copy_if_impl( + return Impl::remove_copy_if_exespace_impl( label, ex, ::Kokkos::Experimental::cbegin(view_from), ::Kokkos::Experimental::cend(view_from), ::Kokkos::Experimental::begin(view_dest), pred); } +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION OutputIterator remove_copy_if(const TeamHandleType& teamHandle, + InputIterator first_from, + InputIterator last_from, + OutputIterator first_dest, + const UnaryPredicate& pred) { + return Impl::remove_copy_if_team_impl(teamHandle, first_from, last_from, + first_dest, pred); +} + +template , int> = 0> +KOKKOS_FUNCTION auto remove_copy_if( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view_from, + const ::Kokkos::View& view_dest, + const UnaryPredicate& pred) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + + return Impl::remove_copy_if_team_impl( + teamHandle, ::Kokkos::Experimental::cbegin(view_from), + ::Kokkos::Experimental::cend(view_from), + ::Kokkos::Experimental::begin(view_dest), pred); +} + } // namespace Experimental } // namespace Kokkos diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RemoveIf.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RemoveIf.hpp index 4062e8d373..38461a37f2 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RemoveIf.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RemoveIf.hpp @@ -23,39 +23,77 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename Iterator, typename UnaryPredicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> Iterator remove_if(const ExecutionSpace& ex, Iterator first, Iterator last, UnaryPredicate pred) { - return Impl::remove_if_impl("Kokkos::remove_if_iterator_api_default", ex, - first, last, pred); + return Impl::remove_if_exespace_impl("Kokkos::remove_if_iterator_api_default", + ex, first, last, pred); } -template +template < + typename ExecutionSpace, typename Iterator, typename UnaryPredicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> Iterator remove_if(const std::string& label, const ExecutionSpace& ex, Iterator first, Iterator last, UnaryPredicate pred) { - return Impl::remove_if_impl(label, ex, first, last, pred); + return Impl::remove_if_exespace_impl(label, ex, first, last, pred); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename UnaryPredicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto remove_if(const ExecutionSpace& ex, const ::Kokkos::View& view, UnaryPredicate pred) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::remove_if_impl("Kokkos::remove_if_iterator_api_default", ex, - ::Kokkos::Experimental::begin(view), - ::Kokkos::Experimental::end(view), pred); + return Impl::remove_if_exespace_impl("Kokkos::remove_if_iterator_api_default", + ex, ::Kokkos::Experimental::begin(view), + ::Kokkos::Experimental::end(view), pred); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename UnaryPredicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto remove_if(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, UnaryPredicate pred) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::remove_if_impl(label, ex, ::Kokkos::Experimental::begin(view), - ::Kokkos::Experimental::end(view), pred); + return Impl::remove_if_exespace_impl(label, ex, + ::Kokkos::Experimental::begin(view), + ::Kokkos::Experimental::end(view), pred); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION Iterator remove_if(const TeamHandleType& teamHandle, + Iterator first, Iterator last, + UnaryPredicate pred) { + return Impl::remove_if_team_impl(teamHandle, first, last, pred); +} + +template , int> = 0> +KOKKOS_FUNCTION auto remove_if( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, UnaryPredicate pred) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + + return Impl::remove_if_team_impl(teamHandle, + ::Kokkos::Experimental::begin(view), + ::Kokkos::Experimental::end(view), pred); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Replace.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Replace.hpp index 4d1490ded0..29afc4f0c2 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Replace.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Replace.hpp @@ -23,40 +23,77 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename Iterator, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void replace(const ExecutionSpace& ex, Iterator first, Iterator last, const ValueType& old_value, const ValueType& new_value) { - return Impl::replace_impl("Kokkos::replace_iterator_api", ex, first, last, - old_value, new_value); + Impl::replace_exespace_impl("Kokkos::replace_iterator_api", ex, first, last, + old_value, new_value); } -template +template < + typename ExecutionSpace, typename Iterator, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void replace(const std::string& label, const ExecutionSpace& ex, Iterator first, Iterator last, const ValueType& old_value, const ValueType& new_value) { - return Impl::replace_impl(label, ex, first, last, old_value, new_value); + Impl::replace_exespace_impl(label, ex, first, last, old_value, new_value); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void replace(const ExecutionSpace& ex, const ::Kokkos::View& view, const ValueType& old_value, const ValueType& new_value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::replace_impl("Kokkos::replace_view_api", ex, KE::begin(view), - KE::end(view), old_value, new_value); + Impl::replace_exespace_impl("Kokkos::replace_view_api", ex, KE::begin(view), + KE::end(view), old_value, new_value); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void replace(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, const ValueType& old_value, const ValueType& new_value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::replace_impl(label, ex, KE::begin(view), KE::end(view), - old_value, new_value); + Impl::replace_exespace_impl(label, ex, KE::begin(view), KE::end(view), + old_value, new_value); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION void replace(const TeamHandleType& teamHandle, Iterator first, + Iterator last, const ValueType& old_value, + const ValueType& new_value) { + Impl::replace_team_impl(teamHandle, first, last, old_value, new_value); +} + +template , int> = 0> +KOKKOS_FUNCTION void replace( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + const ValueType& old_value, const ValueType& new_value) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + namespace KE = ::Kokkos::Experimental; + Impl::replace_team_impl(teamHandle, KE::begin(view), KE::end(view), old_value, + new_value); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReplaceCopy.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReplaceCopy.hpp index e7f464e4bd..04d5767e89 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReplaceCopy.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReplaceCopy.hpp @@ -23,30 +23,39 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator replace_copy(const ExecutionSpace& ex, InputIterator first_from, InputIterator last_from, OutputIterator first_dest, const ValueType& old_value, const ValueType& new_value) { - return Impl::replace_copy_impl("Kokkos::replace_copy_iterator_api", ex, - first_from, last_from, first_dest, old_value, - new_value); + return Impl::replace_copy_exespace_impl("Kokkos::replace_copy_iterator_api", + ex, first_from, last_from, first_dest, + old_value, new_value); } -template +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator replace_copy(const std::string& label, const ExecutionSpace& ex, InputIterator first_from, InputIterator last_from, OutputIterator first_dest, const ValueType& old_value, const ValueType& new_value) { - return Impl::replace_copy_impl(label, ex, first_from, last_from, first_dest, - old_value, new_value); + return Impl::replace_copy_exespace_impl(label, ex, first_from, last_from, + first_dest, old_value, new_value); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto replace_copy(const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, @@ -54,13 +63,15 @@ auto replace_copy(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); namespace KE = ::Kokkos::Experimental; - return Impl::replace_copy_impl("Kokkos::replace_copy_view_api", ex, - KE::cbegin(view_from), KE::cend(view_from), - KE::begin(view_dest), old_value, new_value); + return Impl::replace_copy_exespace_impl( + "Kokkos::replace_copy_view_api", ex, KE::cbegin(view_from), + KE::cend(view_from), KE::begin(view_dest), old_value, new_value); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto replace_copy(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, @@ -68,9 +79,43 @@ auto replace_copy(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); namespace KE = ::Kokkos::Experimental; - return Impl::replace_copy_impl(label, ex, KE::cbegin(view_from), - KE::cend(view_from), KE::begin(view_dest), - old_value, new_value); + return Impl::replace_copy_exespace_impl( + label, ex, KE::cbegin(view_from), KE::cend(view_from), + KE::begin(view_dest), old_value, new_value); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION OutputIterator replace_copy(const TeamHandleType& teamHandle, + InputIterator first_from, + InputIterator last_from, + OutputIterator first_dest, + const ValueType& old_value, + const ValueType& new_value) { + return Impl::replace_copy_team_impl(teamHandle, first_from, last_from, + first_dest, old_value, new_value); +} + +template , int> = 0> +KOKKOS_FUNCTION auto replace_copy( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view_from, + const ::Kokkos::View& view_dest, + const ValueType& old_value, const ValueType& new_value) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + namespace KE = ::Kokkos::Experimental; + return Impl::replace_copy_team_impl(teamHandle, KE::cbegin(view_from), + KE::cend(view_from), KE::begin(view_dest), + old_value, new_value); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReplaceCopyIf.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReplaceCopyIf.hpp index 71ae8f8452..b87163f194 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReplaceCopyIf.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReplaceCopyIf.hpp @@ -23,33 +23,42 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + typename PredicateType, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator replace_copy_if(const ExecutionSpace& ex, InputIterator first_from, InputIterator last_from, OutputIterator first_dest, PredicateType pred, const ValueType& new_value) { - return Impl::replace_copy_if_impl("Kokkos::replace_copy_if_iterator_api", ex, - first_from, last_from, first_dest, pred, - new_value); + return Impl::replace_copy_if_exespace_impl( + "Kokkos::replace_copy_if_iterator_api", ex, first_from, last_from, + first_dest, pred, new_value); } -template +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + typename PredicateType, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator replace_copy_if(const std::string& label, const ExecutionSpace& ex, InputIterator first_from, InputIterator last_from, OutputIterator first_dest, PredicateType pred, const ValueType& new_value) { - return Impl::replace_copy_if_impl(label, ex, first_from, last_from, - first_dest, pred, new_value); + return Impl::replace_copy_if_exespace_impl(label, ex, first_from, last_from, + first_dest, pred, new_value); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename PredicateType, + typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto replace_copy_if(const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, @@ -57,14 +66,16 @@ auto replace_copy_if(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); namespace KE = ::Kokkos::Experimental; - return Impl::replace_copy_if_impl("Kokkos::replace_copy_if_view_api", ex, - KE::cbegin(view_from), KE::cend(view_from), - KE::begin(view_dest), pred, new_value); + return Impl::replace_copy_if_exespace_impl( + "Kokkos::replace_copy_if_view_api", ex, KE::cbegin(view_from), + KE::cend(view_from), KE::begin(view_dest), pred, new_value); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename PredicateType, + typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto replace_copy_if(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view_from, const ::Kokkos::View& view_dest, @@ -72,9 +83,44 @@ auto replace_copy_if(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); namespace KE = ::Kokkos::Experimental; - return Impl::replace_copy_if_impl(label, ex, KE::cbegin(view_from), - KE::cend(view_from), KE::begin(view_dest), - pred, new_value); + return Impl::replace_copy_if_exespace_impl( + label, ex, KE::cbegin(view_from), KE::cend(view_from), + KE::begin(view_dest), pred, new_value); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION OutputIterator replace_copy_if(const TeamHandleType& teamHandle, + InputIterator first_from, + InputIterator last_from, + OutputIterator first_dest, + PredicateType pred, + const ValueType& new_value) { + return Impl::replace_copy_if_team_impl(teamHandle, first_from, last_from, + first_dest, pred, new_value); +} + +template , int> = 0> +KOKKOS_FUNCTION auto replace_copy_if( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view_from, + const ::Kokkos::View& view_dest, + PredicateType pred, const ValueType& new_value) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + namespace KE = ::Kokkos::Experimental; + return Impl::replace_copy_if_team_impl(teamHandle, KE::cbegin(view_from), + KE::cend(view_from), + KE::begin(view_dest), pred, new_value); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReplaceIf.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReplaceIf.hpp index 7f06540e06..73af1f16f0 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReplaceIf.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReplaceIf.hpp @@ -23,43 +23,82 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename Predicate, + typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void replace_if(const ExecutionSpace& ex, InputIterator first, InputIterator last, Predicate pred, const ValueType& new_value) { - return Impl::replace_if_impl("Kokkos::replace_if_iterator_api", ex, first, - last, pred, new_value); + Impl::replace_if_exespace_impl("Kokkos::replace_if_iterator_api", ex, first, + last, pred, new_value); } -template +template < + typename ExecutionSpace, typename InputIterator, typename Predicate, + typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void replace_if(const std::string& label, const ExecutionSpace& ex, InputIterator first, InputIterator last, Predicate pred, const ValueType& new_value) { - return Impl::replace_if_impl(label, ex, first, last, pred, new_value); + Impl::replace_if_exespace_impl(label, ex, first, last, pred, new_value); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename Predicate, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void replace_if(const ExecutionSpace& ex, const ::Kokkos::View& view, Predicate pred, const ValueType& new_value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::replace_if_impl("Kokkos::replace_if_view_api", ex, - KE::begin(view), KE::end(view), pred, new_value); + Impl::replace_if_exespace_impl("Kokkos::replace_if_view_api", ex, + KE::begin(view), KE::end(view), pred, + new_value); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename Predicate, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void replace_if(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, Predicate pred, const ValueType& new_value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::replace_if_impl(label, ex, KE::begin(view), KE::end(view), pred, - new_value); + Impl::replace_if_exespace_impl(label, ex, KE::begin(view), KE::end(view), + pred, new_value); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION void replace_if(const TeamHandleType& teamHandle, + InputIterator first, InputIterator last, + Predicate pred, const ValueType& new_value) { + Impl::replace_if_team_impl(teamHandle, first, last, pred, new_value); +} + +template , int> = 0> +KOKKOS_FUNCTION void replace_if( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, Predicate pred, + const ValueType& new_value) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + namespace KE = ::Kokkos::Experimental; + Impl::replace_if_team_impl(teamHandle, KE::begin(view), KE::end(view), pred, + new_value); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Reverse.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Reverse.hpp index 9f2fc5f3cc..a0786d3a2e 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Reverse.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Reverse.hpp @@ -23,34 +23,67 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void reverse(const ExecutionSpace& ex, InputIterator first, InputIterator last) { - return Impl::reverse_impl("Kokkos::reverse_iterator_api_default", ex, first, - last); + return Impl::reverse_exespace_impl("Kokkos::reverse_iterator_api_default", ex, + first, last); } -template +template < + typename ExecutionSpace, typename InputIterator, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void reverse(const std::string& label, const ExecutionSpace& ex, InputIterator first, InputIterator last) { - return Impl::reverse_impl(label, ex, first, last); + return Impl::reverse_exespace_impl(label, ex, first, last); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void reverse(const ExecutionSpace& ex, const ::Kokkos::View& view) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::reverse_impl("Kokkos::reverse_view_api_default", ex, - KE::begin(view), KE::end(view)); + return Impl::reverse_exespace_impl("Kokkos::reverse_view_api_default", ex, + KE::begin(view), KE::end(view)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> void reverse(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::reverse_impl(label, ex, KE::begin(view), KE::end(view)); + return Impl::reverse_exespace_impl(label, ex, KE::begin(view), KE::end(view)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION void reverse(const TeamHandleType& teamHandle, + InputIterator first, InputIterator last) { + return Impl::reverse_team_impl(teamHandle, first, last); +} + +template , int> = 0> +KOKKOS_FUNCTION void reverse( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + namespace KE = ::Kokkos::Experimental; + return Impl::reverse_team_impl(teamHandle, KE::begin(view), KE::end(view)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReverseCopy.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReverseCopy.hpp index 279bb22086..37336c983a 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReverseCopy.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ReverseCopy.hpp @@ -23,42 +23,83 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator reverse_copy(const ExecutionSpace& ex, InputIterator first, InputIterator last, OutputIterator d_first) { - return Impl::reverse_copy_impl("Kokkos::reverse_copy_iterator_api_default", - ex, first, last, d_first); + return Impl::reverse_copy_exespace_impl( + "Kokkos::reverse_copy_iterator_api_default", ex, first, last, d_first); } -template +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator reverse_copy(const std::string& label, const ExecutionSpace& ex, InputIterator first, InputIterator last, OutputIterator d_first) { - return Impl::reverse_copy_impl(label, ex, first, last, d_first); + return Impl::reverse_copy_exespace_impl(label, ex, first, last, d_first); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto reverse_copy(const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::reverse_copy_impl("Kokkos::reverse_copy_view_api_default", ex, - cbegin(source), cend(source), begin(dest)); + return Impl::reverse_copy_exespace_impl( + "Kokkos::reverse_copy_view_api_default", ex, cbegin(source), cend(source), + begin(dest)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto reverse_copy(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::reverse_copy_impl(label, ex, cbegin(source), cend(source), - begin(dest)); + return Impl::reverse_copy_exespace_impl(label, ex, cbegin(source), + cend(source), begin(dest)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION OutputIterator reverse_copy(const TeamHandleType& teamHandle, + InputIterator first, + InputIterator last, + OutputIterator d_first) { + return Impl::reverse_copy_team_impl(teamHandle, first, last, d_first); +} + +template , int> = 0> +KOKKOS_FUNCTION auto reverse_copy( + const TeamHandleType& teamHandle, + const ::Kokkos::View& source, + ::Kokkos::View& dest) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); + + return Impl::reverse_copy_team_impl(teamHandle, cbegin(source), cend(source), + begin(dest)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Rotate.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Rotate.hpp index 738e9bf137..aff04b47d6 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Rotate.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Rotate.hpp @@ -23,36 +23,71 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType rotate(const ExecutionSpace& ex, IteratorType first, IteratorType n_first, IteratorType last) { - return Impl::rotate_impl("Kokkos::rotate_iterator_api_default", ex, first, - n_first, last); + return Impl::rotate_exespace_impl("Kokkos::rotate_iterator_api_default", ex, + first, n_first, last); } -template +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType rotate(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType n_first, IteratorType last) { - return Impl::rotate_impl(label, ex, first, n_first, last); + return Impl::rotate_exespace_impl(label, ex, first, n_first, last); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto rotate(const ExecutionSpace& ex, const ::Kokkos::View& view, std::size_t n_location) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::rotate_impl("Kokkos::rotate_view_api_default", ex, begin(view), - begin(view) + n_location, end(view)); + return Impl::rotate_exespace_impl("Kokkos::rotate_view_api_default", ex, + begin(view), begin(view) + n_location, + end(view)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto rotate(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, std::size_t n_location) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::rotate_impl(label, ex, begin(view), begin(view) + n_location, - end(view)); + return Impl::rotate_exespace_impl(label, ex, begin(view), + begin(view) + n_location, end(view)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION IteratorType rotate(const TeamHandleType& teamHandle, + IteratorType first, IteratorType n_first, + IteratorType last) { + return Impl::rotate_team_impl(teamHandle, first, n_first, last); +} + +template , int> = 0> +KOKKOS_FUNCTION auto rotate(const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + std::size_t n_location) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + return Impl::rotate_team_impl(teamHandle, begin(view), + begin(view) + n_location, end(view)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RotateCopy.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RotateCopy.hpp index f5d826c4bb..cce37fccfa 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RotateCopy.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_RotateCopy.hpp @@ -23,23 +23,34 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator rotate_copy(const ExecutionSpace& ex, InputIterator first, InputIterator n_first, InputIterator last, OutputIterator d_first) { - return Impl::rotate_copy_impl("Kokkos::rotate_copy_iterator_api_default", ex, - first, n_first, last, d_first); + return Impl::rotate_copy_exespace_impl( + "Kokkos::rotate_copy_iterator_api_default", ex, first, n_first, last, + d_first); } -template +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator rotate_copy(const std::string& label, const ExecutionSpace& ex, InputIterator first, InputIterator n_first, InputIterator last, OutputIterator d_first) { - return Impl::rotate_copy_impl(label, ex, first, n_first, last, d_first); + return Impl::rotate_copy_exespace_impl(label, ex, first, n_first, last, + d_first); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto rotate_copy(const ExecutionSpace& ex, const ::Kokkos::View& source, std::size_t n_location, @@ -47,13 +58,15 @@ auto rotate_copy(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::rotate_copy_impl("Kokkos::rotate_copy_view_api_default", ex, - cbegin(source), cbegin(source) + n_location, - cend(source), begin(dest)); + return Impl::rotate_copy_exespace_impl( + "Kokkos::rotate_copy_view_api_default", ex, cbegin(source), + cbegin(source) + n_location, cend(source), begin(dest)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto rotate_copy(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& source, std::size_t n_location, @@ -61,9 +74,41 @@ auto rotate_copy(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::rotate_copy_impl(label, ex, cbegin(source), - cbegin(source) + n_location, cend(source), - begin(dest)); + return Impl::rotate_copy_exespace_impl(label, ex, cbegin(source), + cbegin(source) + n_location, + cend(source), begin(dest)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION OutputIterator rotate_copy(const TeamHandleType& teamHandle, + InputIterator first, + InputIterator n_first, + InputIterator last, + OutputIterator d_first) { + return Impl::rotate_copy_team_impl(teamHandle, first, n_first, last, d_first); +} + +template , int> = 0> +KOKKOS_FUNCTION auto rotate_copy( + const TeamHandleType& teamHandle, + const ::Kokkos::View& source, + std::size_t n_location, + const ::Kokkos::View& dest) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); + + return Impl::rotate_copy_team_impl(teamHandle, cbegin(source), + cbegin(source) + n_location, cend(source), + begin(dest)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Search.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Search.hpp index b1154b297e..43258a484e 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Search.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Search.hpp @@ -23,24 +23,34 @@ namespace Kokkos { namespace Experimental { +// +// overload set accepting execution space +// + // overload set 1: no binary predicate passed -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType1 search(const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 s_first, IteratorType2 s_last) { - return Impl::search_impl("Kokkos::search_iterator_api_default", ex, first, - last, s_first, s_last); + return Impl::search_exespace_impl("Kokkos::search_iterator_api_default", ex, + first, last, s_first, s_last); } -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType1 search(const std::string& label, const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 s_first, IteratorType2 s_last) { - return Impl::search_impl(label, ex, first, last, s_first, s_last); + return Impl::search_exespace_impl(label, ex, first, last, s_first, s_last); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto search(const ExecutionSpace& ex, const ::Kokkos::View& view, const ::Kokkos::View& s_view) { @@ -48,13 +58,15 @@ auto search(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); namespace KE = ::Kokkos::Experimental; - return Impl::search_impl("Kokkos::search_view_api_default", ex, - KE::begin(view), KE::end(view), KE::begin(s_view), - KE::end(s_view)); + return Impl::search_exespace_impl("Kokkos::search_view_api_default", ex, + KE::begin(view), KE::end(view), + KE::begin(s_view), KE::end(s_view)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto search(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, const ::Kokkos::View& s_view) { @@ -62,31 +74,38 @@ auto search(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); namespace KE = ::Kokkos::Experimental; - return Impl::search_impl(label, ex, KE::begin(view), KE::end(view), - KE::begin(s_view), KE::end(s_view)); + return Impl::search_exespace_impl(label, ex, KE::begin(view), KE::end(view), + KE::begin(s_view), KE::end(s_view)); } // overload set 2: binary predicate passed -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + typename BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType1 search(const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 s_first, IteratorType2 s_last, const BinaryPredicateType& pred) { - return Impl::search_impl("Kokkos::search_iterator_api_default", ex, first, - last, s_first, s_last, pred); + return Impl::search_exespace_impl("Kokkos::search_iterator_api_default", ex, + first, last, s_first, s_last, pred); } -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + typename BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType1 search(const std::string& label, const ExecutionSpace& ex, IteratorType1 first, IteratorType1 last, IteratorType2 s_first, IteratorType2 s_last, const BinaryPredicateType& pred) { - return Impl::search_impl(label, ex, first, last, s_first, s_last, pred); + return Impl::search_exespace_impl(label, ex, first, last, s_first, s_last, + pred); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto search(const ExecutionSpace& ex, const ::Kokkos::View& view, const ::Kokkos::View& s_view, @@ -95,13 +114,15 @@ auto search(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); namespace KE = ::Kokkos::Experimental; - return Impl::search_impl("Kokkos::search_view_api_default", ex, - KE::begin(view), KE::end(view), KE::begin(s_view), - KE::end(s_view), pred); + return Impl::search_exespace_impl("Kokkos::search_view_api_default", ex, + KE::begin(view), KE::end(view), + KE::begin(s_view), KE::end(s_view), pred); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto search(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, const ::Kokkos::View& s_view, @@ -110,8 +131,70 @@ auto search(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); namespace KE = ::Kokkos::Experimental; - return Impl::search_impl(label, ex, KE::begin(view), KE::end(view), - KE::begin(s_view), KE::end(s_view), pred); + return Impl::search_exespace_impl(label, ex, KE::begin(view), KE::end(view), + KE::begin(s_view), KE::end(s_view), pred); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// + +// overload set 1: no binary predicate passed +template , int> = 0> +KOKKOS_FUNCTION IteratorType1 search(const TeamHandleType& teamHandle, + IteratorType1 first, IteratorType1 last, + IteratorType2 s_first, + IteratorType2 s_last) { + return Impl::search_team_impl(teamHandle, first, last, s_first, s_last); +} + +template , int> = 0> +KOKKOS_FUNCTION auto search( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + const ::Kokkos::View& s_view) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); + + namespace KE = ::Kokkos::Experimental; + return Impl::search_team_impl(teamHandle, KE::begin(view), KE::end(view), + KE::begin(s_view), KE::end(s_view)); +} + +// overload set 2: binary predicate passed +template , int> = 0> + +KOKKOS_FUNCTION IteratorType1 search(const TeamHandleType& teamHandle, + IteratorType1 first, IteratorType1 last, + IteratorType2 s_first, + IteratorType2 s_last, + const BinaryPredicateType& pred) { + return Impl::search_team_impl(teamHandle, first, last, s_first, s_last, pred); +} + +template , int> = 0> +KOKKOS_FUNCTION auto search( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + const ::Kokkos::View& s_view, + const BinaryPredicateType& pred) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(s_view); + + namespace KE = ::Kokkos::Experimental; + return Impl::search_team_impl(teamHandle, KE::begin(view), KE::end(view), + KE::begin(s_view), KE::end(s_view), pred); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_SearchN.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_SearchN.hpp index a649c8f205..0f8aa5f1c1 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_SearchN.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_SearchN.hpp @@ -23,68 +23,86 @@ namespace Kokkos { namespace Experimental { +// +// overload set accepting execution space +// + // overload set 1: no binary predicate passed -template +template < + class ExecutionSpace, class IteratorType, class SizeType, class ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType search_n(const ExecutionSpace& ex, IteratorType first, IteratorType last, SizeType count, const ValueType& value) { - return Impl::search_n_impl("Kokkos::search_n_iterator_api_default", ex, first, - last, count, value); + return Impl::search_n_exespace_impl("Kokkos::search_n_iterator_api_default", + ex, first, last, count, value); } -template +template < + class ExecutionSpace, class IteratorType, class SizeType, class ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType search_n(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, SizeType count, const ValueType& value) { - return Impl::search_n_impl(label, ex, first, last, count, value); + return Impl::search_n_exespace_impl(label, ex, first, last, count, value); } template + class SizeType, class ValueType, + std::enable_if_t<::Kokkos::is_execution_space::value, + int> = 0> auto search_n(const ExecutionSpace& ex, const ::Kokkos::View& view, SizeType count, const ValueType& value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::search_n_impl("Kokkos::search_n_view_api_default", ex, - KE::begin(view), KE::end(view), count, value); + return Impl::search_n_exespace_impl("Kokkos::search_n_view_api_default", ex, + KE::begin(view), KE::end(view), count, + value); } template + class SizeType, class ValueType, + std::enable_if_t<::Kokkos::is_execution_space::value, + int> = 0> auto search_n(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, SizeType count, const ValueType& value) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::search_n_impl(label, ex, KE::begin(view), KE::end(view), count, - value); + return Impl::search_n_exespace_impl(label, ex, KE::begin(view), KE::end(view), + count, value); } // overload set 2: binary predicate passed -template +template < + class ExecutionSpace, class IteratorType, class SizeType, class ValueType, + class BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType search_n(const ExecutionSpace& ex, IteratorType first, IteratorType last, SizeType count, const ValueType& value, const BinaryPredicateType& pred) { - return Impl::search_n_impl("Kokkos::search_n_iterator_api_default", ex, first, - last, count, value, pred); + return Impl::search_n_exespace_impl("Kokkos::search_n_iterator_api_default", + ex, first, last, count, value, pred); } -template +template < + class ExecutionSpace, class IteratorType, class SizeType, class ValueType, + class BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType search_n(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, SizeType count, const ValueType& value, const BinaryPredicateType& pred) { - return Impl::search_n_impl(label, ex, first, last, count, value, pred); + return Impl::search_n_exespace_impl(label, ex, first, last, count, value, + pred); } template + class SizeType, class ValueType, class BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space::value, + int> = 0> auto search_n(const ExecutionSpace& ex, const ::Kokkos::View& view, SizeType count, const ValueType& value, @@ -92,13 +110,15 @@ auto search_n(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::search_n_impl("Kokkos::search_n_view_api_default", ex, - KE::begin(view), KE::end(view), count, value, - pred); + return Impl::search_n_exespace_impl("Kokkos::search_n_view_api_default", ex, + KE::begin(view), KE::end(view), count, + value, pred); } template + class SizeType, class ValueType, class BinaryPredicateType, + std::enable_if_t<::Kokkos::is_execution_space::value, + int> = 0> auto search_n(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, SizeType count, const ValueType& value, @@ -106,8 +126,65 @@ auto search_n(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); namespace KE = ::Kokkos::Experimental; - return Impl::search_n_impl(label, ex, KE::begin(view), KE::end(view), count, - value, pred); + return Impl::search_n_exespace_impl(label, ex, KE::begin(view), KE::end(view), + count, value, pred); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// + +// overload set 1: no binary predicate passed +template , int> = 0> +KOKKOS_FUNCTION IteratorType search_n(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + SizeType count, const ValueType& value) { + return Impl::search_n_team_impl(teamHandle, first, last, count, value); +} + +template < + class TeamHandleType, class DataType, class... Properties, class SizeType, + class ValueType, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION auto search_n( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, SizeType count, + const ValueType& value) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + + namespace KE = ::Kokkos::Experimental; + return Impl::search_n_team_impl(teamHandle, KE::begin(view), KE::end(view), + count, value); +} + +// overload set 2: binary predicate passed +template , int> = 0> +KOKKOS_FUNCTION IteratorType search_n(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + SizeType count, const ValueType& value, + const BinaryPredicateType& pred) { + return Impl::search_n_team_impl(teamHandle, first, last, count, value, pred); +} + +template < + class TeamHandleType, class DataType, class... Properties, class SizeType, + class ValueType, class BinaryPredicateType, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION auto search_n( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, SizeType count, + const ValueType& value, const BinaryPredicateType& pred) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + + namespace KE = ::Kokkos::Experimental; + return Impl::search_n_team_impl(teamHandle, KE::begin(view), KE::end(view), + count, value, pred); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ShiftLeft.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ShiftLeft.hpp index 4b91a17ab8..b3e04a3b97 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ShiftLeft.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ShiftLeft.hpp @@ -23,36 +23,70 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType shift_left(const ExecutionSpace& ex, IteratorType first, IteratorType last, typename IteratorType::difference_type n) { - return Impl::shift_left_impl("Kokkos::shift_left_iterator_api_default", ex, - first, last, n); + return Impl::shift_left_exespace_impl( + "Kokkos::shift_left_iterator_api_default", ex, first, last, n); } -template +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType shift_left(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, typename IteratorType::difference_type n) { - return Impl::shift_left_impl(label, ex, first, last, n); + return Impl::shift_left_exespace_impl(label, ex, first, last, n); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto shift_left(const ExecutionSpace& ex, const ::Kokkos::View& view, typename decltype(begin(view))::difference_type n) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::shift_left_impl("Kokkos::shift_left_view_api_default", ex, - begin(view), end(view), n); + return Impl::shift_left_exespace_impl("Kokkos::shift_left_view_api_default", + ex, begin(view), end(view), n); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto shift_left(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, typename decltype(begin(view))::difference_type n) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::shift_left_impl(label, ex, begin(view), end(view), n); + return Impl::shift_left_exespace_impl(label, ex, begin(view), end(view), n); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION IteratorType +shift_left(const TeamHandleType& teamHandle, IteratorType first, + IteratorType last, typename IteratorType::difference_type n) { + return Impl::shift_left_team_impl(teamHandle, first, last, n); +} + +template , int> = 0> +KOKKOS_FUNCTION auto shift_left( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + typename decltype(begin(view))::difference_type n) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + return Impl::shift_left_team_impl(teamHandle, begin(view), end(view), n); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ShiftRight.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ShiftRight.hpp index 2ea50fd74e..0f7ed53948 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ShiftRight.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_ShiftRight.hpp @@ -23,36 +23,70 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType shift_right(const ExecutionSpace& ex, IteratorType first, IteratorType last, typename IteratorType::difference_type n) { - return Impl::shift_right_impl("Kokkos::shift_right_iterator_api_default", ex, - first, last, n); + return Impl::shift_right_exespace_impl( + "Kokkos::shift_right_iterator_api_default", ex, first, last, n); } -template +template < + typename ExecutionSpace, typename IteratorType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> IteratorType shift_right(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, typename IteratorType::difference_type n) { - return Impl::shift_right_impl(label, ex, first, last, n); + return Impl::shift_right_exespace_impl(label, ex, first, last, n); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto shift_right(const ExecutionSpace& ex, const ::Kokkos::View& view, typename decltype(begin(view))::difference_type n) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::shift_right_impl("Kokkos::shift_right_view_api_default", ex, - begin(view), end(view), n); + return Impl::shift_right_exespace_impl("Kokkos::shift_right_view_api_default", + ex, begin(view), end(view), n); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto shift_right(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, typename decltype(begin(view))::difference_type n) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::shift_right_impl(label, ex, begin(view), end(view), n); + return Impl::shift_right_exespace_impl(label, ex, begin(view), end(view), n); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION IteratorType +shift_right(const TeamHandleType& teamHandle, IteratorType first, + IteratorType last, typename IteratorType::difference_type n) { + return Impl::shift_right_team_impl(teamHandle, first, last, n); +} + +template , int> = 0> +KOKKOS_FUNCTION auto shift_right( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + typename decltype(begin(view))::difference_type n) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + return Impl::shift_right_team_impl(teamHandle, begin(view), end(view), n); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_SwapRanges.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_SwapRanges.hpp index 5fbf045318..39f33b6487 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_SwapRanges.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_SwapRanges.hpp @@ -23,15 +23,21 @@ namespace Kokkos { namespace Experimental { -template +// +// overload set accepting execution space +// +template , int> = 0> IteratorType2 swap_ranges(const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, IteratorType2 first2) { - return Impl::swap_ranges_impl("Kokkos::swap_ranges_iterator_api_default", ex, - first1, last1, first2); + return Impl::swap_ranges_exespace_impl( + "Kokkos::swap_ranges_iterator_api_default", ex, first1, last1, first2); } -template +template , int> = 0> auto swap_ranges(const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest) { @@ -39,19 +45,23 @@ auto swap_ranges(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); assert(source.extent(0) == dest.extent(0)); - return Impl::swap_ranges_impl("Kokkos::swap_ranges_view_api_default", ex, - begin(source), end(source), begin(dest)); + return Impl::swap_ranges_exespace_impl("Kokkos::swap_ranges_view_api_default", + ex, begin(source), end(source), + begin(dest)); } -template +template , int> = 0> IteratorType2 swap_ranges(const std::string& label, const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, IteratorType2 first2) { - return Impl::swap_ranges_impl(label, ex, first1, last1, first2); + return Impl::swap_ranges_exespace_impl(label, ex, first1, last1, first2); } -template +template , int> = 0> auto swap_ranges(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest) { @@ -59,8 +69,38 @@ auto swap_ranges(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); assert(source.extent(0) == dest.extent(0)); - return Impl::swap_ranges_impl(label, ex, begin(source), end(source), - begin(dest)); + return Impl::swap_ranges_exespace_impl(label, ex, begin(source), end(source), + begin(dest)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION IteratorType2 swap_ranges(const TeamHandleType& teamHandle, + IteratorType1 first1, + IteratorType1 last1, + IteratorType2 first2) { + return Impl::swap_ranges_team_impl(teamHandle, first1, last1, first2); +} + +template , int> = 0> +KOKKOS_FUNCTION auto swap_ranges( + const TeamHandleType& teamHandle, + const ::Kokkos::View& source, + ::Kokkos::View& dest) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); + + assert(source.extent(0) == dest.extent(0)); + return Impl::swap_ranges_team_impl(teamHandle, begin(source), end(source), + begin(dest)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Transform.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Transform.hpp index 27dee30426..838c9169e2 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Transform.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Transform.hpp @@ -23,31 +23,39 @@ namespace Kokkos { namespace Experimental { -template -std::enable_if_t< ::Kokkos::Experimental::Impl::are_iterators< - InputIterator, OutputIterator>::value, - OutputIterator> -transform(const ExecutionSpace& ex, InputIterator first1, InputIterator last1, - OutputIterator d_first, UnaryOperation unary_op) { - return Impl::transform_impl("Kokkos::transform_iterator_api_default", ex, - first1, last1, d_first, std::move(unary_op)); +// +// overload set accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + typename UnaryOperation, + std::enable_if_t && + is_execution_space_v, + int> = 0> +OutputIterator transform(const ExecutionSpace& ex, InputIterator first1, + InputIterator last1, OutputIterator d_first, + UnaryOperation unary_op) { + return Impl::transform_exespace_impl("Kokkos::transform_iterator_api_default", + ex, first1, last1, d_first, + std::move(unary_op)); } -template -std::enable_if_t< ::Kokkos::Experimental::Impl::are_iterators< - InputIterator, OutputIterator>::value, - OutputIterator> -transform(const std::string& label, const ExecutionSpace& ex, - InputIterator first1, InputIterator last1, OutputIterator d_first, - UnaryOperation unary_op) { - return Impl::transform_impl(label, ex, first1, last1, d_first, - std::move(unary_op)); +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + typename UnaryOperation, + std::enable_if_t && + is_execution_space_v, + int> = 0> +OutputIterator transform(const std::string& label, const ExecutionSpace& ex, + InputIterator first1, InputIterator last1, + OutputIterator d_first, UnaryOperation unary_op) { + return Impl::transform_exespace_impl(label, ex, first1, last1, d_first, + std::move(unary_op)); } -template +template , int> = 0> auto transform(const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest, @@ -55,13 +63,14 @@ auto transform(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::transform_impl("Kokkos::transform_view_api_default", ex, - begin(source), end(source), begin(dest), - std::move(unary_op)); + return Impl::transform_exespace_impl("Kokkos::transform_view_api_default", ex, + begin(source), end(source), begin(dest), + std::move(unary_op)); } -template +template , int> = 0> auto transform(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& source, ::Kokkos::View& dest, @@ -69,38 +78,44 @@ auto transform(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::transform_impl(label, ex, begin(source), end(source), - begin(dest), std::move(unary_op)); + return Impl::transform_exespace_impl(label, ex, begin(source), end(source), + begin(dest), std::move(unary_op)); } -template -std::enable_if_t< ::Kokkos::Experimental::Impl::are_iterators< - InputIterator1, InputIterator2, OutputIterator>::value, - OutputIterator> -transform(const ExecutionSpace& ex, InputIterator1 first1, InputIterator1 last1, - InputIterator2 first2, OutputIterator d_first, - BinaryOperation binary_op) { - return Impl::transform_impl("Kokkos::transform_iterator_api_default", ex, - first1, last1, first2, d_first, - std::move(binary_op)); +template < + typename ExecutionSpace, typename InputIterator1, typename InputIterator2, + typename OutputIterator, typename BinaryOperation, + std::enable_if_t< + Impl::are_iterators_v && + is_execution_space_v, + int> = 0> +OutputIterator transform(const ExecutionSpace& ex, InputIterator1 first1, + InputIterator1 last1, InputIterator2 first2, + OutputIterator d_first, BinaryOperation binary_op) { + return Impl::transform_exespace_impl("Kokkos::transform_iterator_api_default", + ex, first1, last1, first2, d_first, + std::move(binary_op)); } -template -std::enable_if_t< ::Kokkos::Experimental::Impl::are_iterators< - InputIterator1, InputIterator2, OutputIterator>::value, - OutputIterator> -transform(const std::string& label, const ExecutionSpace& ex, - InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, - OutputIterator d_first, BinaryOperation binary_op) { - return Impl::transform_impl(label, ex, first1, last1, first2, d_first, - std::move(binary_op)); +template < + typename ExecutionSpace, typename InputIterator1, typename InputIterator2, + typename OutputIterator, typename BinaryOperation, + std::enable_if_t< + Impl::are_iterators_v && + is_execution_space_v, + int> = 0> +OutputIterator transform(const std::string& label, const ExecutionSpace& ex, + InputIterator1 first1, InputIterator1 last1, + InputIterator2 first2, OutputIterator d_first, + BinaryOperation binary_op) { + return Impl::transform_exespace_impl(label, ex, first1, last1, first2, + d_first, std::move(binary_op)); } -template +template , int> = 0> auto transform(const ExecutionSpace& ex, const ::Kokkos::View& source1, const ::Kokkos::View& source2, @@ -110,14 +125,15 @@ auto transform(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source2); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::transform_impl("Kokkos::transform_view_api_default", ex, - begin(source1), end(source1), begin(source2), - begin(dest), std::move(binary_op)); + return Impl::transform_exespace_impl( + "Kokkos::transform_view_api_default", ex, begin(source1), end(source1), + begin(source2), begin(dest), std::move(binary_op)); } -template +template , int> = 0> auto transform(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& source1, const ::Kokkos::View& source2, @@ -127,9 +143,79 @@ auto transform(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source2); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::transform_impl(label, ex, begin(source1), end(source1), - begin(source2), begin(dest), - std::move(binary_op)); + return Impl::transform_exespace_impl(label, ex, begin(source1), end(source1), + begin(source2), begin(dest), + std::move(binary_op)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template < + typename TeamHandleType, typename InputIterator, typename OutputIterator, + typename UnaryOperation, + std::enable_if_t && + is_team_handle_v, + int> = 0> +KOKKOS_FUNCTION OutputIterator transform(const TeamHandleType& teamHandle, + InputIterator first1, + InputIterator last1, + OutputIterator d_first, + UnaryOperation unary_op) { + return Impl::transform_team_impl(teamHandle, first1, last1, d_first, + std::move(unary_op)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto transform( + const TeamHandleType& teamHandle, + const ::Kokkos::View& source, + ::Kokkos::View& dest, UnaryOperation unary_op) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); + + return Impl::transform_team_impl(teamHandle, begin(source), end(source), + begin(dest), std::move(unary_op)); +} + +template < + typename TeamHandleType, typename InputIterator1, typename InputIterator2, + typename OutputIterator, typename BinaryOperation, + std::enable_if_t< + Impl::are_iterators_v && + is_team_handle_v, + int> = 0> +KOKKOS_FUNCTION OutputIterator transform(const TeamHandleType& teamHandle, + InputIterator1 first1, + InputIterator1 last1, + InputIterator2 first2, + OutputIterator d_first, + BinaryOperation binary_op) { + return Impl::transform_team_impl(teamHandle, first1, last1, first2, d_first, + std::move(binary_op)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto transform( + const TeamHandleType& teamHandle, + const ::Kokkos::View& source1, + const ::Kokkos::View& source2, + ::Kokkos::View& dest, + BinaryOperation binary_op) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source1); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source2); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); + + return Impl::transform_team_impl(teamHandle, begin(source1), end(source1), + begin(source2), begin(dest), + std::move(binary_op)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_TransformExclusiveScan.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_TransformExclusiveScan.hpp index 9d85aee06f..37fc0f860e 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_TransformExclusiveScan.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_TransformExclusiveScan.hpp @@ -23,44 +23,52 @@ namespace Kokkos { namespace Experimental { -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -transform_exclusive_scan(const ExecutionSpace& ex, InputIteratorType first, - InputIteratorType last, OutputIteratorType first_dest, - ValueType init_value, BinaryOpType binary_op, - UnaryOpType unary_op) { +// +// overload set accepting execution space +// +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType transform_exclusive_scan( + const ExecutionSpace& ex, InputIteratorType first, InputIteratorType last, + OutputIteratorType first_dest, ValueType init_value, BinaryOpType binary_op, + UnaryOpType unary_op) { Impl::static_assert_is_not_openmptarget(ex); - static_assert(std::is_move_constructible::value, + static_assert(std::is_move_constructible_v, "ValueType must be move constructible."); - return Impl::transform_exclusive_scan_impl( + return Impl::transform_exclusive_scan_exespace_impl( "Kokkos::transform_exclusive_scan_custom_functors_iterator_api", ex, - first, last, first_dest, init_value, binary_op, unary_op); + first, last, first_dest, std::move(init_value), binary_op, unary_op); } -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -transform_exclusive_scan(const std::string& label, const ExecutionSpace& ex, - InputIteratorType first, InputIteratorType last, - OutputIteratorType first_dest, ValueType init_value, - BinaryOpType binary_op, UnaryOpType unary_op) { +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType transform_exclusive_scan( + const std::string& label, const ExecutionSpace& ex, InputIteratorType first, + InputIteratorType last, OutputIteratorType first_dest, ValueType init_value, + BinaryOpType binary_op, UnaryOpType unary_op) { Impl::static_assert_is_not_openmptarget(ex); - static_assert(std::is_move_constructible::value, + static_assert(std::is_move_constructible_v, "ValueType must be move constructible."); - return Impl::transform_exclusive_scan_impl(label, ex, first, last, first_dest, - init_value, binary_op, unary_op); + return Impl::transform_exclusive_scan_exespace_impl( + label, ex, first, last, first_dest, std::move(init_value), binary_op, + unary_op); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename ValueType, + typename BinaryOpType, typename UnaryOpType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto transform_exclusive_scan( const ExecutionSpace& ex, const ::Kokkos::View& view_from, @@ -69,18 +77,20 @@ auto transform_exclusive_scan( Impl::static_assert_is_not_openmptarget(ex); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); - static_assert(std::is_move_constructible::value, + static_assert(std::is_move_constructible_v, "ValueType must be move constructible."); namespace KE = ::Kokkos::Experimental; - return Impl::transform_exclusive_scan_impl( + return Impl::transform_exclusive_scan_exespace_impl( "Kokkos::transform_exclusive_scan_custom_functors_view_api", ex, KE::cbegin(view_from), KE::cend(view_from), KE::begin(view_dest), - init_value, binary_op, unary_op); + std::move(init_value), binary_op, unary_op); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename ValueType, + typename BinaryOpType, typename UnaryOpType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto transform_exclusive_scan( const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view_from, @@ -89,12 +99,56 @@ auto transform_exclusive_scan( Impl::static_assert_is_not_openmptarget(ex); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); - static_assert(std::is_move_constructible::value, + static_assert(std::is_move_constructible_v, "ValueType must be move constructible."); namespace KE = ::Kokkos::Experimental; - return Impl::transform_exclusive_scan_impl( + return Impl::transform_exclusive_scan_exespace_impl( label, ex, KE::cbegin(view_from), KE::cend(view_from), - KE::begin(view_dest), init_value, binary_op, unary_op); + KE::begin(view_dest), std::move(init_value), binary_op, unary_op); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template && :: + Kokkos::is_team_handle_v, + int> = 0> +KOKKOS_FUNCTION OutputIteratorType transform_exclusive_scan( + const TeamHandleType& teamHandle, InputIteratorType first, + InputIteratorType last, OutputIteratorType first_dest, ValueType init_value, + BinaryOpType binary_op, UnaryOpType unary_op) { + Impl::static_assert_is_not_openmptarget(teamHandle); + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + return Impl::transform_exclusive_scan_team_impl( + teamHandle, first, last, first_dest, std::move(init_value), binary_op, + unary_op); +} + +template , int> = 0> +KOKKOS_FUNCTION auto transform_exclusive_scan( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view_from, + const ::Kokkos::View& view_dest, + ValueType init_value, BinaryOpType binary_op, UnaryOpType unary_op) { + Impl::static_assert_is_not_openmptarget(teamHandle); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + namespace KE = ::Kokkos::Experimental; + return Impl::transform_exclusive_scan_team_impl( + teamHandle, KE::cbegin(view_from), KE::cend(view_from), + KE::begin(view_dest), std::move(init_value), binary_op, unary_op); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_TransformInclusiveScan.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_TransformInclusiveScan.hpp index 7489af7e37..5f694dbfd9 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_TransformInclusiveScan.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_TransformInclusiveScan.hpp @@ -23,40 +23,53 @@ namespace Kokkos { namespace Experimental { +// +// overload set accepting execution space +// + // overload set 1 (no init value) -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -transform_inclusive_scan(const ExecutionSpace& ex, InputIteratorType first, - InputIteratorType last, OutputIteratorType first_dest, - BinaryOpType binary_op, UnaryOpType unary_op) { +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType transform_inclusive_scan(const ExecutionSpace& ex, + InputIteratorType first, + InputIteratorType last, + OutputIteratorType first_dest, + BinaryOpType binary_op, + UnaryOpType unary_op) { Impl::static_assert_is_not_openmptarget(ex); - return Impl::transform_inclusive_scan_impl( + return Impl::transform_inclusive_scan_exespace_impl( "Kokkos::transform_inclusive_scan_custom_functors_iterator_api", ex, first, last, first_dest, binary_op, unary_op); } -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -transform_inclusive_scan(const std::string& label, const ExecutionSpace& ex, - InputIteratorType first, InputIteratorType last, - OutputIteratorType first_dest, BinaryOpType binary_op, - UnaryOpType unary_op) { +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType transform_inclusive_scan( + const std::string& label, const ExecutionSpace& ex, InputIteratorType first, + InputIteratorType last, OutputIteratorType first_dest, + BinaryOpType binary_op, UnaryOpType unary_op) { Impl::static_assert_is_not_openmptarget(ex); - return Impl::transform_inclusive_scan_impl(label, ex, first, last, first_dest, - binary_op, unary_op); + return Impl::transform_inclusive_scan_exespace_impl( + label, ex, first, last, first_dest, binary_op, unary_op); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryOpType, + typename UnaryOpType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto transform_inclusive_scan( const ExecutionSpace& ex, const ::Kokkos::View& view_from, @@ -66,15 +79,17 @@ auto transform_inclusive_scan( Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); namespace KE = ::Kokkos::Experimental; - return Impl::transform_inclusive_scan_impl( + return Impl::transform_inclusive_scan_exespace_impl( "Kokkos::transform_inclusive_scan_custom_functors_view_api", ex, KE::cbegin(view_from), KE::cend(view_from), KE::begin(view_dest), binary_op, unary_op); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryOpType, + typename UnaryOpType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto transform_inclusive_scan( const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view_from, @@ -84,46 +99,59 @@ auto transform_inclusive_scan( Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); namespace KE = ::Kokkos::Experimental; - return Impl::transform_inclusive_scan_impl( + return Impl::transform_inclusive_scan_exespace_impl( label, ex, KE::cbegin(view_from), KE::cend(view_from), KE::begin(view_dest), binary_op, unary_op); } // overload set 2 (init value) -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -transform_inclusive_scan(const ExecutionSpace& ex, InputIteratorType first, - InputIteratorType last, OutputIteratorType first_dest, - BinaryOpType binary_op, UnaryOpType unary_op, - ValueType init_value) { +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType transform_inclusive_scan( + const ExecutionSpace& ex, InputIteratorType first, InputIteratorType last, + OutputIteratorType first_dest, BinaryOpType binary_op, UnaryOpType unary_op, + ValueType init_value) { Impl::static_assert_is_not_openmptarget(ex); - return Impl::transform_inclusive_scan_impl( + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + + return Impl::transform_inclusive_scan_exespace_impl( "Kokkos::transform_inclusive_scan_custom_functors_iterator_api", ex, - first, last, first_dest, binary_op, unary_op, init_value); + first, last, first_dest, binary_op, unary_op, std::move(init_value)); } -template -std::enable_if_t<::Kokkos::Experimental::Impl::are_iterators< - InputIteratorType, OutputIteratorType>::value, - OutputIteratorType> -transform_inclusive_scan(const std::string& label, const ExecutionSpace& ex, - InputIteratorType first, InputIteratorType last, - OutputIteratorType first_dest, BinaryOpType binary_op, - UnaryOpType unary_op, ValueType init_value) { +template && :: + Kokkos::is_execution_space_v, + int> = 0> +OutputIteratorType transform_inclusive_scan( + const std::string& label, const ExecutionSpace& ex, InputIteratorType first, + InputIteratorType last, OutputIteratorType first_dest, + BinaryOpType binary_op, UnaryOpType unary_op, ValueType init_value) { Impl::static_assert_is_not_openmptarget(ex); - return Impl::transform_inclusive_scan_impl(label, ex, first, last, first_dest, - binary_op, unary_op, init_value); + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + + return Impl::transform_inclusive_scan_exespace_impl( + label, ex, first, last, first_dest, binary_op, unary_op, + std::move(init_value)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryOpType, + typename UnaryOpType, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto transform_inclusive_scan( const ExecutionSpace& ex, const ::Kokkos::View& view_from, @@ -132,16 +160,21 @@ auto transform_inclusive_scan( Impl::static_assert_is_not_openmptarget(ex); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + namespace KE = ::Kokkos::Experimental; - return Impl::transform_inclusive_scan_impl( + return Impl::transform_inclusive_scan_exespace_impl( "Kokkos::transform_inclusive_scan_custom_functors_view_api", ex, KE::cbegin(view_from), KE::cend(view_from), KE::begin(view_dest), - binary_op, unary_op, init_value); + binary_op, unary_op, std::move(init_value)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryOpType, + typename UnaryOpType, typename ValueType, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto transform_inclusive_scan( const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view_from, @@ -150,10 +183,97 @@ auto transform_inclusive_scan( Impl::static_assert_is_not_openmptarget(ex); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + namespace KE = ::Kokkos::Experimental; - return Impl::transform_inclusive_scan_impl( + return Impl::transform_inclusive_scan_exespace_impl( label, ex, KE::cbegin(view_from), KE::cend(view_from), - KE::begin(view_dest), binary_op, unary_op, init_value); + KE::begin(view_dest), binary_op, unary_op, std::move(init_value)); +} + +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// + +// overload set 1 (no init value) +template && + Kokkos::is_team_handle_v, + int> = 0> +KOKKOS_FUNCTION OutputIteratorType transform_inclusive_scan( + const TeamHandleType& teamHandle, InputIteratorType first, + InputIteratorType last, OutputIteratorType first_dest, + BinaryOpType binary_op, UnaryOpType unary_op) { + Impl::static_assert_is_not_openmptarget(teamHandle); + + return Impl::transform_inclusive_scan_team_impl( + teamHandle, first, last, first_dest, binary_op, unary_op); +} + +template , int> = 0> +KOKKOS_FUNCTION auto transform_inclusive_scan( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view_from, + const ::Kokkos::View& view_dest, + BinaryOpType binary_op, UnaryOpType unary_op) { + Impl::static_assert_is_not_openmptarget(teamHandle); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + namespace KE = ::Kokkos::Experimental; + return Impl::transform_inclusive_scan_team_impl( + teamHandle, KE::cbegin(view_from), KE::cend(view_from), + KE::begin(view_dest), binary_op, unary_op); +} + +// overload set 2 (init value) +template && + Kokkos::is_team_handle_v, + int> = 0> +KOKKOS_FUNCTION OutputIteratorType transform_inclusive_scan( + const TeamHandleType& teamHandle, InputIteratorType first, + InputIteratorType last, OutputIteratorType first_dest, + BinaryOpType binary_op, UnaryOpType unary_op, ValueType init_value) { + Impl::static_assert_is_not_openmptarget(teamHandle); + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + + return Impl::transform_inclusive_scan_team_impl( + teamHandle, first, last, first_dest, binary_op, unary_op, + std::move(init_value)); +} + +template , int> = 0> +KOKKOS_FUNCTION auto transform_inclusive_scan( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view_from, + const ::Kokkos::View& view_dest, + BinaryOpType binary_op, UnaryOpType unary_op, ValueType init_value) { + Impl::static_assert_is_not_openmptarget(teamHandle); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_from); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view_dest); + static_assert(std::is_move_constructible_v, + "ValueType must be move constructible."); + + namespace KE = ::Kokkos::Experimental; + return Impl::transform_inclusive_scan_team_impl( + teamHandle, KE::cbegin(view_from), KE::cend(view_from), + KE::begin(view_dest), binary_op, unary_op, std::move(init_value)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_TransformReduce.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_TransformReduce.hpp index b5ec9066d2..101f5113f6 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_TransformReduce.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_TransformReduce.hpp @@ -23,34 +23,44 @@ namespace Kokkos { namespace Experimental { +// +// overload set accepting execution space +// + // ---------------------------- // overload set1: // no custom functors passed, so equivalent to // transform_reduce(first1, last1, first2, init, plus<>(), multiplies<>()); // ---------------------------- -template +template ::value, + int> = 0> ValueType transform_reduce(const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, ValueType init_reduction_value) { - return Impl::transform_reduce_default_functors_impl( + return Impl::transform_reduce_default_functors_exespace_impl( "Kokkos::transform_reduce_default_functors_iterator_api", ex, first1, last1, first2, std::move(init_reduction_value)); } -template +template ::value, + int> = 0> ValueType transform_reduce(const std::string& label, const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, ValueType init_reduction_value) { - return Impl::transform_reduce_default_functors_impl( + return Impl::transform_reduce_default_functors_exespace_impl( label, ex, first1, last1, first2, std::move(init_reduction_value)); } // overload1 accepting views -template +template ::value, + int> = 0> ValueType transform_reduce( const ExecutionSpace& ex, const ::Kokkos::View& first_view, @@ -60,14 +70,16 @@ ValueType transform_reduce( Impl::static_assert_is_admissible_to_kokkos_std_algorithms(first_view); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(second_view); - return Impl::transform_reduce_default_functors_impl( + return Impl::transform_reduce_default_functors_exespace_impl( "Kokkos::transform_reduce_default_functors_iterator_api", ex, KE::cbegin(first_view), KE::cend(first_view), KE::cbegin(second_view), std::move(init_reduction_value)); } -template +template ::value, + int> = 0> ValueType transform_reduce( const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& first_view, @@ -77,7 +89,7 @@ ValueType transform_reduce( Impl::static_assert_is_admissible_to_kokkos_std_algorithms(first_view); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(second_view); - return Impl::transform_reduce_default_functors_impl( + return Impl::transform_reduce_default_functors_exespace_impl( label, ex, KE::cbegin(first_view), KE::cend(first_view), KE::cbegin(second_view), std::move(init_reduction_value)); } @@ -95,8 +107,11 @@ ValueType transform_reduce( // https://en.cppreference.com/w/cpp/algorithm/transform_reduce // api accepting iterators -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + typename ValueType, typename BinaryJoinerType, typename BinaryTransform, + std::enable_if_t<::Kokkos::is_execution_space::value, int> = + 0> ValueType transform_reduce(const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, ValueType init_reduction_value, @@ -105,14 +120,17 @@ ValueType transform_reduce(const ExecutionSpace& ex, IteratorType1 first1, static_assert(std::is_move_constructible::value, "ValueType must be move constructible."); - return Impl::transform_reduce_custom_functors_impl( + return Impl::transform_reduce_custom_functors_exespace_impl( "Kokkos::transform_reduce_custom_functors_iterator_api", ex, first1, last1, first2, std::move(init_reduction_value), std::move(joiner), std::move(transformer)); } -template +template < + typename ExecutionSpace, typename IteratorType1, typename IteratorType2, + typename ValueType, typename BinaryJoinerType, typename BinaryTransform, + std::enable_if_t<::Kokkos::is_execution_space::value, int> = + 0> ValueType transform_reduce(const std::string& label, const ExecutionSpace& ex, IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, ValueType init_reduction_value, @@ -121,15 +139,17 @@ ValueType transform_reduce(const std::string& label, const ExecutionSpace& ex, static_assert(std::is_move_constructible::value, "ValueType must be move constructible."); - return Impl::transform_reduce_custom_functors_impl( + return Impl::transform_reduce_custom_functors_exespace_impl( label, ex, first1, last1, first2, std::move(init_reduction_value), std::move(joiner), std::move(transformer)); } // accepting views -template +template ::value, + int> = 0> ValueType transform_reduce( const ExecutionSpace& ex, const ::Kokkos::View& first_view, @@ -143,16 +163,18 @@ ValueType transform_reduce( Impl::static_assert_is_admissible_to_kokkos_std_algorithms(first_view); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(second_view); - return Impl::transform_reduce_custom_functors_impl( + return Impl::transform_reduce_custom_functors_exespace_impl( "Kokkos::transform_reduce_custom_functors_view_api", ex, KE::cbegin(first_view), KE::cend(first_view), KE::cbegin(second_view), std::move(init_reduction_value), std::move(joiner), std::move(transformer)); } -template +template ::value, + int> = 0> ValueType transform_reduce( const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& first_view, @@ -166,7 +188,7 @@ ValueType transform_reduce( Impl::static_assert_is_admissible_to_kokkos_std_algorithms(first_view); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(second_view); - return Impl::transform_reduce_custom_functors_impl( + return Impl::transform_reduce_custom_functors_exespace_impl( label, ex, KE::cbegin(first_view), KE::cend(first_view), KE::cbegin(second_view), std::move(init_reduction_value), std::move(joiner), std::move(transformer)); @@ -176,43 +198,50 @@ ValueType transform_reduce( // overload set3: // // accepting iterators -template -// need this to avoid ambiguous call -std::enable_if_t< - ::Kokkos::Experimental::Impl::are_iterators::value, ValueType> -transform_reduce(const ExecutionSpace& ex, IteratorType first1, - IteratorType last1, ValueType init_reduction_value, - BinaryJoinerType joiner, UnaryTransform transformer) { +template ::value && + is_execution_space::value, + int> = 0> +ValueType transform_reduce(const ExecutionSpace& ex, IteratorType first1, + IteratorType last1, ValueType init_reduction_value, + BinaryJoinerType joiner, + UnaryTransform transformer) { static_assert(std::is_move_constructible::value, "ValueType must be move constructible."); - return Impl::transform_reduce_custom_functors_impl( + return Impl::transform_reduce_custom_functors_exespace_impl( "Kokkos::transform_reduce_custom_functors_iterator_api", ex, first1, last1, std::move(init_reduction_value), std::move(joiner), std::move(transformer)); } -template -// need this to avoid ambiguous call -std::enable_if_t< - ::Kokkos::Experimental::Impl::are_iterators::value, ValueType> -transform_reduce(const std::string& label, const ExecutionSpace& ex, - IteratorType first1, IteratorType last1, - ValueType init_reduction_value, BinaryJoinerType joiner, - UnaryTransform transformer) { +template ::value && + is_execution_space::value, + int> = 0> +ValueType transform_reduce(const std::string& label, const ExecutionSpace& ex, + IteratorType first1, IteratorType last1, + ValueType init_reduction_value, + BinaryJoinerType joiner, + UnaryTransform transformer) { static_assert(std::is_move_constructible::value, "ValueType must be move constructible."); - return Impl::transform_reduce_custom_functors_impl( + return Impl::transform_reduce_custom_functors_exespace_impl( label, ex, first1, last1, std::move(init_reduction_value), std::move(joiner), std::move(transformer)); } // accepting views -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename ValueType, typename BinaryJoinerType, typename UnaryTransform, + std::enable_if_t<::Kokkos::is_execution_space::value, int> = + 0> ValueType transform_reduce(const ExecutionSpace& ex, const ::Kokkos::View& view, ValueType init_reduction_value, @@ -224,14 +253,17 @@ ValueType transform_reduce(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::transform_reduce_custom_functors_impl( + return Impl::transform_reduce_custom_functors_exespace_impl( "Kokkos::transform_reduce_custom_functors_view_api", ex, KE::cbegin(view), KE::cend(view), std::move(init_reduction_value), std::move(joiner), std::move(transformer)); } -template +template < + typename ExecutionSpace, typename DataType, typename... Properties, + typename ValueType, typename BinaryJoinerType, typename UnaryTransform, + std::enable_if_t<::Kokkos::is_execution_space::value, int> = + 0> ValueType transform_reduce(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, ValueType init_reduction_value, @@ -243,12 +275,154 @@ ValueType transform_reduce(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::transform_reduce_custom_functors_impl( + return Impl::transform_reduce_custom_functors_exespace_impl( label, ex, KE::cbegin(view), KE::cend(view), std::move(init_reduction_value), std::move(joiner), std::move(transformer)); } +// +// overload set accepting a team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// + +// ---------------------------- +// overload set1: +// no custom functors passed, so equivalent to +// transform_reduce(first1, last1, first2, init, plus<>(), multiplies<>()); +// ---------------------------- +template < + typename TeamHandleType, typename IteratorType1, typename IteratorType2, + typename ValueType, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION ValueType transform_reduce(const TeamHandleType& teamHandle, + IteratorType1 first1, + IteratorType1 last1, + IteratorType2 first2, + ValueType init_reduction_value) { + return Impl::transform_reduce_default_functors_team_impl( + teamHandle, first1, last1, first2, std::move(init_reduction_value)); +} + +// overload1 accepting views +template < + typename TeamHandleType, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename ValueType, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION ValueType +transform_reduce(const TeamHandleType& teamHandle, + const ::Kokkos::View& first_view, + const ::Kokkos::View& second_view, + ValueType init_reduction_value) { + namespace KE = ::Kokkos::Experimental; + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(first_view); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(second_view); + + return Impl::transform_reduce_default_functors_team_impl( + teamHandle, KE::cbegin(first_view), KE::cend(first_view), + KE::cbegin(second_view), std::move(init_reduction_value)); +} + +// +// overload set2: +// accepts a custom transform and joiner functor +// + +// Note the std refers to the arg BinaryReductionOp +// but in the Kokkos naming convention, it corresponds +// to a "joiner" that knows how to join two values +// NOTE: "joiner/transformer" need to be commutative. + +// https://en.cppreference.com/w/cpp/algorithm/transform_reduce + +// api accepting iterators +template < + typename TeamHandleType, typename IteratorType1, typename IteratorType2, + typename ValueType, typename BinaryJoinerType, typename BinaryTransform, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION ValueType transform_reduce( + const TeamHandleType& teamHandle, IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, ValueType init_reduction_value, + BinaryJoinerType joiner, BinaryTransform transformer) { + static_assert(std::is_move_constructible::value, + "ValueType must be move constructible."); + + return Impl::transform_reduce_custom_functors_team_impl( + teamHandle, first1, last1, first2, std::move(init_reduction_value), + std::move(joiner), std::move(transformer)); +} + +// accepting views +template < + typename TeamHandleType, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename ValueType, + typename BinaryJoinerType, typename BinaryTransform, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION ValueType +transform_reduce(const TeamHandleType& teamHandle, + const ::Kokkos::View& first_view, + const ::Kokkos::View& second_view, + ValueType init_reduction_value, BinaryJoinerType joiner, + BinaryTransform transformer) { + namespace KE = ::Kokkos::Experimental; + static_assert(std::is_move_constructible::value, + "ValueType must be move constructible."); + + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(first_view); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(second_view); + + return Impl::transform_reduce_custom_functors_team_impl( + teamHandle, KE::cbegin(first_view), KE::cend(first_view), + KE::cbegin(second_view), std::move(init_reduction_value), + std::move(joiner), std::move(transformer)); +} + +// +// overload set3: +// +// accepting iterators +template ::value && + is_team_handle::value, + int> = 0> +KOKKOS_FUNCTION ValueType transform_reduce(const TeamHandleType& teamHandle, + IteratorType first1, + IteratorType last1, + ValueType init_reduction_value, + BinaryJoinerType joiner, + UnaryTransform transformer) { + static_assert(std::is_move_constructible::value, + "ValueType must be move constructible."); + + return Impl::transform_reduce_custom_functors_team_impl( + teamHandle, first1, last1, std::move(init_reduction_value), + std::move(joiner), std::move(transformer)); +} + +// accepting views +template < + typename TeamHandleType, typename DataType, typename... Properties, + typename ValueType, typename BinaryJoinerType, typename UnaryTransform, + std::enable_if_t<::Kokkos::is_team_handle::value, int> = 0> +KOKKOS_FUNCTION ValueType +transform_reduce(const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + ValueType init_reduction_value, BinaryJoinerType joiner, + UnaryTransform transformer) { + namespace KE = ::Kokkos::Experimental; + static_assert(std::is_move_constructible::value, + "ValueType must be move constructible."); + + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); + + return Impl::transform_reduce_custom_functors_team_impl( + teamHandle, KE::cbegin(view), KE::cend(view), + std::move(init_reduction_value), std::move(joiner), + std::move(transformer)); +} + } // namespace Experimental } // namespace Kokkos diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Unique.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Unique.hpp index b47ecffb20..2d56315f61 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Unique.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_Unique.hpp @@ -23,71 +23,132 @@ namespace Kokkos { namespace Experimental { -// note: the enable_if below is to avoid "call to ... is ambiguous" -// for example in the unit test when using a variadic function - -// overload set1 -template -std::enable_if_t::value, IteratorType> unique( - const ExecutionSpace& ex, IteratorType first, IteratorType last) { - return Impl::unique_impl("Kokkos::unique_iterator_api_default", ex, first, - last); +// +// overload set1: default predicate, accepting execution space +// +template && + is_execution_space::value, + int> = 0> +IteratorType unique(const ExecutionSpace& ex, IteratorType first, + IteratorType last) { + return Impl::unique_exespace_impl("Kokkos::unique_iterator_api_default", ex, + first, last); } -template -std::enable_if_t::value, IteratorType> unique( - const std::string& label, const ExecutionSpace& ex, IteratorType first, - IteratorType last) { - return Impl::unique_impl(label, ex, first, last); +template && + is_execution_space::value, + int> = 0> +IteratorType unique(const std::string& label, const ExecutionSpace& ex, + IteratorType first, IteratorType last) { + return Impl::unique_exespace_impl(label, ex, first, last); } -template +template ::value, int> = 0> auto unique(const ExecutionSpace& ex, const ::Kokkos::View& view) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return ::Kokkos::Experimental::unique("Kokkos::unique_view_api_default", ex, - begin(view), end(view)); + return Impl::unique_exespace_impl("Kokkos::unique_view_api_default", ex, + begin(view), end(view)); } -template +template ::value, int> = 0> auto unique(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return ::Kokkos::Experimental::unique(label, ex, begin(view), end(view)); + return Impl::unique_exespace_impl(label, ex, begin(view), end(view)); } -// overload set2 -template +// +// overload set2: custom predicate, accepting execution space +// +template ::value, int> = 0> IteratorType unique(const ExecutionSpace& ex, IteratorType first, IteratorType last, BinaryPredicate pred) { - return Impl::unique_impl("Kokkos::unique_iterator_api_default", ex, first, - last, pred); + return Impl::unique_exespace_impl("Kokkos::unique_iterator_api_default", ex, + first, last, pred); } -template +template ::value, int> = 0> IteratorType unique(const std::string& label, const ExecutionSpace& ex, IteratorType first, IteratorType last, BinaryPredicate pred) { - return Impl::unique_impl(label, ex, first, last, pred); + return Impl::unique_exespace_impl(label, ex, first, last, pred); } -template +template ::value, int> = 0> auto unique(const ExecutionSpace& ex, const ::Kokkos::View& view, BinaryPredicate pred) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::unique_impl("Kokkos::unique_view_api_default", ex, begin(view), - end(view), std::move(pred)); + return Impl::unique_exespace_impl("Kokkos::unique_view_api_default", ex, + begin(view), end(view), std::move(pred)); } -template +template ::value, int> = 0> auto unique(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& view, BinaryPredicate pred) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(view); - return Impl::unique_impl(label, ex, begin(view), end(view), std::move(pred)); + return Impl::unique_exespace_impl(label, ex, begin(view), end(view), + std::move(pred)); +} + +// +// overload set3: default predicate, accepting team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template && + is_team_handle::value, + int> = 0> +KOKKOS_FUNCTION IteratorType unique(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last) { + return Impl::unique_team_impl(teamHandle, first, last); +} + +template ::value, int> = 0> +KOKKOS_FUNCTION auto unique( + const TeamHandleType& teamHandle, + const ::Kokkos::View& view) { + return Impl::unique_team_impl(teamHandle, begin(view), end(view)); +} + +// +// overload set4: custom predicate, accepting team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template ::value, int> = 0> +KOKKOS_FUNCTION IteratorType unique(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + BinaryPredicate pred) { + return Impl::unique_team_impl(teamHandle, first, last, std::move(pred)); +} + +template ::value, int> = 0> +KOKKOS_FUNCTION auto unique(const TeamHandleType& teamHandle, + const ::Kokkos::View& view, + BinaryPredicate pred) { + return Impl::unique_team_impl(teamHandle, begin(view), end(view), + std::move(pred)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_UniqueCopy.hpp b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_UniqueCopy.hpp index bd2451c220..4a32d7e095 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/Kokkos_UniqueCopy.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/Kokkos_UniqueCopy.hpp @@ -23,67 +23,90 @@ namespace Kokkos { namespace Experimental { -// overload set1 -template -std::enable_if_t::value, OutputIterator> -unique_copy(const ExecutionSpace& ex, InputIterator first, InputIterator last, - OutputIterator d_first) { - return Impl::unique_copy_impl("Kokkos::unique_copy_iterator_api_default", ex, - first, last, d_first); +// +// overload set1: default predicate, accepting execution space +// +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + std::enable_if_t && + is_execution_space_v, + int> = 0> +OutputIterator unique_copy(const ExecutionSpace& ex, InputIterator first, + InputIterator last, OutputIterator d_first) { + return Impl::unique_copy_exespace_impl( + "Kokkos::unique_copy_iterator_api_default", ex, first, last, d_first); } -template -std::enable_if_t::value, OutputIterator> -unique_copy(const std::string& label, const ExecutionSpace& ex, - InputIterator first, InputIterator last, OutputIterator d_first) { - return Impl::unique_copy_impl(label, ex, first, last, d_first); +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + std::enable_if_t && + is_execution_space_v, + int> = 0> +OutputIterator unique_copy(const std::string& label, const ExecutionSpace& ex, + InputIterator first, InputIterator last, + OutputIterator d_first) { + return Impl::unique_copy_exespace_impl(label, ex, first, last, d_first); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto unique_copy(const ExecutionSpace& ex, const ::Kokkos::View& source, const ::Kokkos::View& dest) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return ::Kokkos::Experimental::unique_copy( - "Kokkos::unique_copy_view_api_default", ex, cbegin(source), cend(source), - begin(dest)); + return Impl::unique_copy_exespace_impl("Kokkos::unique_copy_view_api_default", + ex, cbegin(source), cend(source), + begin(dest)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto unique_copy(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& source, const ::Kokkos::View& dest) { Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return ::Kokkos::Experimental::unique_copy(label, ex, cbegin(source), - cend(source), begin(dest)); + return Impl::unique_copy_exespace_impl(label, ex, cbegin(source), + cend(source), begin(dest)); } -// overload set2 -template +// +// overload set2: custom predicate, accepting execution space +// + +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + typename BinaryPredicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator unique_copy(const ExecutionSpace& ex, InputIterator first, InputIterator last, OutputIterator d_first, BinaryPredicate pred) { - return Impl::unique_copy_impl("Kokkos::unique_copy_iterator_api_default", ex, - first, last, d_first, pred); + return Impl::unique_copy_exespace_impl( + "Kokkos::unique_copy_iterator_api_default", ex, first, last, d_first, + pred); } -template +template < + typename ExecutionSpace, typename InputIterator, typename OutputIterator, + typename BinaryPredicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> OutputIterator unique_copy(const std::string& label, const ExecutionSpace& ex, InputIterator first, InputIterator last, OutputIterator d_first, BinaryPredicate pred) { - return Impl::unique_copy_impl(label, ex, first, last, d_first, pred); + return Impl::unique_copy_exespace_impl(label, ex, first, last, d_first, pred); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryPredicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto unique_copy(const ExecutionSpace& ex, const ::Kokkos::View& source, const ::Kokkos::View& dest, @@ -91,13 +114,15 @@ auto unique_copy(const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::unique_copy_impl("Kokkos::unique_copy_view_api_default", ex, - cbegin(source), cend(source), begin(dest), - std::move(pred)); + return Impl::unique_copy_exespace_impl("Kokkos::unique_copy_view_api_default", + ex, cbegin(source), cend(source), + begin(dest), std::move(pred)); } -template +template < + typename ExecutionSpace, typename DataType1, typename... Properties1, + typename DataType2, typename... Properties2, typename BinaryPredicate, + std::enable_if_t<::Kokkos::is_execution_space_v, int> = 0> auto unique_copy(const std::string& label, const ExecutionSpace& ex, const ::Kokkos::View& source, const ::Kokkos::View& dest, @@ -105,8 +130,70 @@ auto unique_copy(const std::string& label, const ExecutionSpace& ex, Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); - return Impl::unique_copy_impl(label, ex, cbegin(source), cend(source), - begin(dest), std::move(pred)); + return Impl::unique_copy_exespace_impl( + label, ex, cbegin(source), cend(source), begin(dest), std::move(pred)); +} + +// +// overload set3: default predicate, accepting team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template < + typename TeamHandleType, typename InputIterator, typename OutputIterator, + std::enable_if_t && + Kokkos::is_team_handle_v, + int> = 0> +KOKKOS_FUNCTION OutputIterator unique_copy(const TeamHandleType& teamHandle, + InputIterator first, + InputIterator last, + OutputIterator d_first) { + return Impl::unique_copy_team_impl(teamHandle, first, last, d_first); +} + +template , int> = 0> +KOKKOS_FUNCTION auto unique_copy( + const TeamHandleType& teamHandle, + const ::Kokkos::View& source, + const ::Kokkos::View& dest) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); + + return Impl::unique_copy_team_impl(teamHandle, cbegin(source), cend(source), + begin(dest)); +} + +// +// overload set4: custom predicate, accepting team handle +// Note: for now omit the overloads accepting a label +// since they cause issues on device because of the string allocation. +// +template , int> = 0> +KOKKOS_FUNCTION OutputIterator unique_copy(const TeamHandleType& teamHandle, + InputIterator first, + InputIterator last, + OutputIterator d_first, + BinaryPredicate pred) { + return Impl::unique_copy_team_impl(teamHandle, first, last, d_first, pred); +} + +template , int> = 0> +KOKKOS_FUNCTION auto unique_copy( + const TeamHandleType& teamHandle, + const ::Kokkos::View& source, + const ::Kokkos::View& dest, + BinaryPredicate pred) { + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(source); + Impl::static_assert_is_admissible_to_kokkos_std_algorithms(dest); + + return Impl::unique_copy_team_impl(teamHandle, cbegin(source), cend(source), + begin(dest), std::move(pred)); } } // namespace Experimental diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_AdjacentDifference.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_AdjacentDifference.hpp index 8a474508d7..a8171fa068 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_AdjacentDifference.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_AdjacentDifference.hpp @@ -63,14 +63,15 @@ struct StdAdjacentDiffFunctor { m_op(std::move(op)) {} }; +// +// exespace impl +// template -OutputIteratorType adjacent_difference_impl(const std::string& label, - const ExecutionSpace& ex, - InputIteratorType first_from, - InputIteratorType last_from, - OutputIteratorType first_dest, - BinaryOp bin_op) { +OutputIteratorType adjacent_difference_exespace_impl( + const std::string& label, const ExecutionSpace& ex, + InputIteratorType first_from, InputIteratorType last_from, + OutputIteratorType first_dest, BinaryOp bin_op) { // checks Impl::static_assert_random_access_and_accessible(ex, first_from, first_dest); Impl::static_assert_iterators_have_matching_difference_type(first_from, @@ -81,20 +82,45 @@ OutputIteratorType adjacent_difference_impl(const std::string& label, return first_dest; } - // aliases - using value_type = typename OutputIteratorType::value_type; - using aux_view_type = ::Kokkos::View; - using functor_t = - StdAdjacentDiffFunctor; + // run + const auto num_elements = + Kokkos::Experimental::distance(first_from, last_from); + ::Kokkos::parallel_for( + label, RangePolicy(ex, 0, num_elements), + StdAdjacentDiffFunctor(first_from, first_dest, bin_op)); + ex.fence("Kokkos::adjacent_difference: fence after operation"); + + // return + return first_dest + num_elements; +} + +// +// team impl +// +template +KOKKOS_FUNCTION OutputIteratorType adjacent_difference_team_impl( + const TeamHandleType& teamHandle, InputIteratorType first_from, + InputIteratorType last_from, OutputIteratorType first_dest, + BinaryOp bin_op) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first_from, + first_dest); + Impl::static_assert_iterators_have_matching_difference_type(first_from, + first_dest); + Impl::expect_valid_range(first_from, last_from); + + if (first_from == last_from) { + return first_dest; + } // run const auto num_elements = Kokkos::Experimental::distance(first_from, last_from); - aux_view_type aux_view("aux_view", num_elements); - ::Kokkos::parallel_for(label, - RangePolicy(ex, 0, num_elements), - functor_t(first_from, first_dest, bin_op)); - ex.fence("Kokkos::adjacent_difference: fence after operation"); + ::Kokkos::parallel_for( + TeamThreadRange(teamHandle, 0, num_elements), + StdAdjacentDiffFunctor(first_from, first_dest, bin_op)); + teamHandle.team_barrier(); // return return first_dest + num_elements; diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_AdjacentFind.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_AdjacentFind.hpp index dd785e603b..f30b7be06a 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_AdjacentFind.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_AdjacentFind.hpp @@ -27,9 +27,9 @@ namespace Kokkos { namespace Experimental { namespace Impl { -template +template struct StdAdjacentFindFunctor { + using index_type = typename IteratorType::difference_type; using red_value_type = typename ReducerType::value_type; IteratorType m_first; @@ -37,13 +37,13 @@ struct StdAdjacentFindFunctor { PredicateType m_p; KOKKOS_FUNCTION - void operator()(const IndexType i, red_value_type& red_value) const { + void operator()(const index_type i, red_value_type& red_value) const { const auto& my_value = m_first[i]; const auto& next_value = m_first[i + 1]; const bool are_equal = m_p(my_value, next_value); // FIXME_NVHPC using a ternary operator causes problems - red_value_type value = {::Kokkos::reduction_identity::min()}; + red_value_type value = {::Kokkos::reduction_identity::min()}; if (are_equal) { value.min_loc_true = i; } @@ -59,10 +59,14 @@ struct StdAdjacentFindFunctor { m_p(std::move(p)) {} }; +// +// exespace impl +// template -IteratorType adjacent_find_impl(const std::string& label, - const ExecutionSpace& ex, IteratorType first, - IteratorType last, PredicateType pred) { +IteratorType adjacent_find_exespace_impl(const std::string& label, + const ExecutionSpace& ex, + IteratorType first, IteratorType last, + PredicateType pred) { // checks Impl::static_assert_random_access_and_accessible(ex, first); Impl::expect_valid_range(first, last); @@ -76,8 +80,6 @@ IteratorType adjacent_find_impl(const std::string& label, using index_type = typename IteratorType::difference_type; using reducer_type = FirstLoc; using reduction_value_type = typename reducer_type::value_type; - using func_t = StdAdjacentFindFunctor; reduction_value_type red_result; reducer_type reducer(red_result); @@ -86,7 +88,8 @@ IteratorType adjacent_find_impl(const std::string& label, // each index i in the reduction checks i and (i+1). ::Kokkos::parallel_reduce( label, RangePolicy(ex, 0, num_elements - 1), - func_t(first, reducer, pred), reducer); + // use CTAD + StdAdjacentFindFunctor(first, reducer, pred), reducer); // fence not needed because reducing into scalar if (red_result.min_loc_true == @@ -98,12 +101,62 @@ IteratorType adjacent_find_impl(const std::string& label, } template -IteratorType adjacent_find_impl(const std::string& label, - const ExecutionSpace& ex, IteratorType first, - IteratorType last) { +IteratorType adjacent_find_exespace_impl(const std::string& label, + const ExecutionSpace& ex, + IteratorType first, + IteratorType last) { using value_type = typename IteratorType::value_type; using default_pred_t = StdAlgoEqualBinaryPredicate; - return adjacent_find_impl(label, ex, first, last, default_pred_t()); + return adjacent_find_exespace_impl(label, ex, first, last, default_pred_t()); +} + +// +// team impl +// +template +KOKKOS_FUNCTION IteratorType +adjacent_find_team_impl(const TeamHandleType& teamHandle, IteratorType first, + IteratorType last, PredicateType pred) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first); + Impl::expect_valid_range(first, last); + + const auto num_elements = Kokkos::Experimental::distance(first, last); + + if (num_elements <= 1) { + return last; + } + + using index_type = typename IteratorType::difference_type; + using reducer_type = FirstLoc; + using reduction_value_type = typename reducer_type::value_type; + + reduction_value_type red_result; + reducer_type reducer(red_result); + + // note that we use below num_elements-1 because + // each index i in the reduction checks i and (i+1). + ::Kokkos::parallel_reduce(TeamThreadRange(teamHandle, 0, num_elements - 1), + // use CTAD + StdAdjacentFindFunctor(first, reducer, pred), + reducer); + + teamHandle.team_barrier(); + + if (red_result.min_loc_true == + ::Kokkos::reduction_identity::min()) { + return last; + } else { + return first + red_result.min_loc_true; + } +} + +template +KOKKOS_FUNCTION IteratorType adjacent_find_team_impl( + const TeamHandleType& teamHandle, IteratorType first, IteratorType last) { + using value_type = typename IteratorType::value_type; + using default_pred_t = StdAlgoEqualBinaryPredicate; + return adjacent_find_team_impl(teamHandle, first, last, default_pred_t()); } } // namespace Impl diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_AllOfAnyOfNoneOf.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_AllOfAnyOfNoneOf.hpp index ad562070a0..bdc050f9c1 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_AllOfAnyOfNoneOf.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_AllOfAnyOfNoneOf.hpp @@ -23,23 +23,58 @@ namespace Kokkos { namespace Experimental { namespace Impl { +// +// exespace impl +// template -bool all_of_impl(const std::string& label, const ExecutionSpace& ex, - InputIterator first, InputIterator last, Predicate predicate) { - return (find_if_or_not_impl(label, ex, first, last, predicate) == - last); +bool all_of_exespace_impl(const std::string& label, const ExecutionSpace& ex, + InputIterator first, InputIterator last, + Predicate predicate) { + return (find_if_or_not_exespace_impl(label, ex, first, last, + predicate) == last); } template -bool any_of_impl(const std::string& label, const ExecutionSpace& ex, - InputIterator first, InputIterator last, Predicate predicate) { - return (find_if_or_not_impl(label, ex, first, last, predicate) != last); +bool any_of_exespace_impl(const std::string& label, const ExecutionSpace& ex, + InputIterator first, InputIterator last, + Predicate predicate) { + return (find_if_or_not_exespace_impl(label, ex, first, last, + predicate) != last); } template -bool none_of_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType first, IteratorType last, Predicate predicate) { - return (find_if_or_not_impl(label, ex, first, last, predicate) == last); +bool none_of_exespace_impl(const std::string& label, const ExecutionSpace& ex, + IteratorType first, IteratorType last, + Predicate predicate) { + return (find_if_or_not_exespace_impl(label, ex, first, last, + predicate) == last); +} + +// +// team impl +// +template +KOKKOS_FUNCTION bool all_of_team_impl(const TeamHandleType& teamHandle, + InputIterator first, InputIterator last, + Predicate predicate) { + return (find_if_or_not_team_impl(teamHandle, first, last, predicate) == + last); +} + +template +KOKKOS_FUNCTION bool any_of_team_impl(const TeamHandleType& teamHandle, + InputIterator first, InputIterator last, + Predicate predicate) { + return (find_if_or_not_team_impl(teamHandle, first, last, predicate) != + last); +} + +template +KOKKOS_FUNCTION bool none_of_team_impl(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + Predicate predicate) { + return (find_if_or_not_team_impl(teamHandle, first, last, predicate) == + last); } } // namespace Impl diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_Constraints.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_Constraints.hpp index 0376100410..27ce5a6fad 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_Constraints.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_Constraints.hpp @@ -55,6 +55,9 @@ using iterator_category_t = typename T::iterator_category; template using is_iterator = Kokkos::is_detected; +template +inline constexpr bool is_iterator_v = is_iterator::value; + // // are_iterators // @@ -63,15 +66,18 @@ struct are_iterators; template struct are_iterators { - static constexpr bool value = is_iterator::value; + static constexpr bool value = is_iterator_v; }; template struct are_iterators { static constexpr bool value = - are_iterators::value && are_iterators::value; + are_iterators::value && (are_iterators::value && ... && true); }; +template +inline constexpr bool are_iterators_v = are_iterators::value; + // // are_random_access_iterators // @@ -81,17 +87,21 @@ struct are_random_access_iterators; template struct are_random_access_iterators { static constexpr bool value = - is_iterator::value && - std::is_base_of::value; + is_iterator_v && std::is_base_of::value; }; template struct are_random_access_iterators { - static constexpr bool value = are_random_access_iterators::value && - are_random_access_iterators::value; + static constexpr bool value = + are_random_access_iterators::value && + (are_random_access_iterators::value && ... && true); }; +template +inline constexpr bool are_random_access_iterators_v = + are_random_access_iterators::value; + // // iterators_are_accessible_from // @@ -113,16 +123,18 @@ struct iterators_are_accessible_from { iterators_are_accessible_from::value; }; -template +template KOKKOS_INLINE_FUNCTION constexpr void -static_assert_random_access_and_accessible(const ExecutionSpace& /* ex */, - IteratorTypes... /* iterators */) { +static_assert_random_access_and_accessible( + const ExecutionSpaceOrTeamHandleType& /* ex_or_th*/, + IteratorTypes... /* iterators */) { static_assert( are_random_access_iterators::value, "Currently, Kokkos standard algorithms require random access iterators."); - static_assert( - iterators_are_accessible_from::value, - "Incompatible view/iterator and execution space"); + static_assert(iterators_are_accessible_from< + typename ExecutionSpaceOrTeamHandleType::execution_space, + IteratorTypes...>::value, + "Incompatible view/iterator and execution space"); } // @@ -182,10 +194,10 @@ struct not_openmptarget { #endif }; -template +template KOKKOS_INLINE_FUNCTION constexpr void static_assert_is_not_openmptarget( - const ExecutionSpace&) { - static_assert(not_openmptarget::value, + const ExecutionSpaceOrTeamHandleType& /*ex_or_th*/) { + static_assert(not_openmptarget::value, "Currently, Kokkos standard algorithms do not support custom " "comparators in OpenMPTarget"); } @@ -194,7 +206,8 @@ KOKKOS_INLINE_FUNCTION constexpr void static_assert_is_not_openmptarget( // valid range // template -void expect_valid_range(IteratorType first, IteratorType last) { +KOKKOS_INLINE_FUNCTION void expect_valid_range(IteratorType first, + IteratorType last) { // this is a no-op for release KOKKOS_EXPECTS(last >= first); // avoid compiler complaining when KOKKOS_EXPECTS is no-op diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CopyBackward.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CopyBackward.hpp index b3adbc5e2d..0f68c9e978 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CopyBackward.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CopyBackward.hpp @@ -27,16 +27,18 @@ namespace Kokkos { namespace Experimental { namespace Impl { -template +template struct StdCopyBackwardFunctor { - static_assert(std::is_signed::value, - "Kokkos: StdCopyBackwardFunctor requires signed index type"); + // we can use difference type from IteratorType1 since + // the calling functions below already static assert that + // the iterators have matching difference type + using index_type = typename IteratorType1::difference_type; IteratorType1 m_last; IteratorType2 m_dest_last; KOKKOS_FUNCTION - void operator()(IndexType i) const { m_dest_last[-i - 1] = m_last[-i - 1]; } + void operator()(index_type i) const { m_dest_last[-i - 1] = m_last[-i - 1]; } KOKKOS_FUNCTION StdCopyBackwardFunctor(IteratorType1 _last, IteratorType2 _dest_last) @@ -44,30 +46,51 @@ struct StdCopyBackwardFunctor { }; template -IteratorType2 copy_backward_impl(const std::string& label, - const ExecutionSpace& ex, IteratorType1 first, - IteratorType1 last, IteratorType2 d_last) { +IteratorType2 copy_backward_exespace_impl(const std::string& label, + const ExecutionSpace& ex, + IteratorType1 first, + IteratorType1 last, + IteratorType2 d_last) { // checks Impl::static_assert_random_access_and_accessible(ex, first, d_last); Impl::static_assert_iterators_have_matching_difference_type(first, d_last); Impl::expect_valid_range(first, last); - // aliases - using index_type = typename IteratorType1::difference_type; - using func_t = - StdCopyBackwardFunctor; - // run const auto num_elements = Kokkos::Experimental::distance(first, last); ::Kokkos::parallel_for(label, RangePolicy(ex, 0, num_elements), - func_t(last, d_last)); + // use CTAD + StdCopyBackwardFunctor(last, d_last)); ex.fence("Kokkos::copy_backward: fence after operation"); // return return d_last - num_elements; } +// +// team-level impl +// +template +KOKKOS_FUNCTION IteratorType2 +copy_backward_team_impl(const TeamHandleType& teamHandle, IteratorType1 first, + IteratorType1 last, IteratorType2 d_last) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first, d_last); + Impl::static_assert_iterators_have_matching_difference_type(first, d_last); + Impl::expect_valid_range(first, last); + + // run + const auto num_elements = Kokkos::Experimental::distance(first, last); + ::Kokkos::parallel_for(TeamThreadRange(teamHandle, 0, num_elements), + // use CTAD + StdCopyBackwardFunctor(last, d_last)); + teamHandle.team_barrier(); + + // return + return d_last - num_elements; +} + } // namespace Impl } // namespace Experimental } // namespace Kokkos diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CopyCopyN.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CopyCopyN.hpp index 1b120c46d0..86e99ecbd0 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CopyCopyN.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CopyCopyN.hpp @@ -27,13 +27,18 @@ namespace Kokkos { namespace Experimental { namespace Impl { -template +template struct StdCopyFunctor { + // we can use difference type from InputIterator since + // the calling functions below already static assert that + // the iterators have matching difference type + using index_type = typename InputIterator::difference_type; + InputIterator m_first; OutputIterator m_dest_first; KOKKOS_FUNCTION - void operator()(IndexType i) const { m_dest_first[i] = m_first[i]; } + void operator()(index_type i) const { m_dest_first[i] = m_first[i]; } KOKKOS_FUNCTION StdCopyFunctor(InputIterator _first, OutputIterator _dest_first) @@ -41,23 +46,20 @@ struct StdCopyFunctor { }; template -OutputIterator copy_impl(const std::string& label, const ExecutionSpace& ex, - InputIterator first, InputIterator last, - OutputIterator d_first) { +OutputIterator copy_exespace_impl(const std::string& label, + const ExecutionSpace& ex, InputIterator first, + InputIterator last, OutputIterator d_first) { // checks Impl::static_assert_random_access_and_accessible(ex, first, d_first); Impl::static_assert_iterators_have_matching_difference_type(first, d_first); Impl::expect_valid_range(first, last); - // aliases - using index_type = typename InputIterator::difference_type; - using func_t = StdCopyFunctor; - // run const auto num_elements = Kokkos::Experimental::distance(first, last); ::Kokkos::parallel_for(label, RangePolicy(ex, 0, num_elements), - func_t(first, d_first)); + // use CTAD + StdCopyFunctor(first, d_first)); ex.fence("Kokkos::copy: fence after operation"); // return @@ -66,16 +68,61 @@ OutputIterator copy_impl(const std::string& label, const ExecutionSpace& ex, template -OutputIterator copy_n_impl(const std::string& label, const ExecutionSpace& ex, - InputIterator first_from, Size count, - OutputIterator first_dest) { +OutputIterator copy_n_exespace_impl(const std::string& label, + const ExecutionSpace& ex, + InputIterator first_from, Size count, + OutputIterator first_dest) { // checks Impl::static_assert_random_access_and_accessible(ex, first_from, first_dest); Impl::static_assert_iterators_have_matching_difference_type(first_from, first_dest); if (count > 0) { - return copy_impl(label, ex, first_from, first_from + count, first_dest); + return copy_exespace_impl(label, ex, first_from, first_from + count, + first_dest); + } else { + return first_dest; + } +} + +// +// team-level impl +// +template +KOKKOS_FUNCTION OutputIterator copy_team_impl(const TeamHandleType& teamHandle, + InputIterator first, + InputIterator last, + OutputIterator d_first) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first, d_first); + Impl::static_assert_iterators_have_matching_difference_type(first, d_first); + Impl::expect_valid_range(first, last); + + // run + const auto num_elements = Kokkos::Experimental::distance(first, last); + ::Kokkos::parallel_for(TeamThreadRange(teamHandle, 0, num_elements), + // use CTAD + StdCopyFunctor(first, d_first)); + teamHandle.team_barrier(); + + // return + return d_first + num_elements; +} + +template +KOKKOS_FUNCTION OutputIterator +copy_n_team_impl(const TeamHandleType& teamHandle, InputIterator first_from, + Size count, OutputIterator first_dest) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first_from, + first_dest); + Impl::static_assert_iterators_have_matching_difference_type(first_from, + first_dest); + + if (count > 0) { + return copy_team_impl(teamHandle, first_from, first_from + count, + first_dest); } else { return first_dest; } diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CopyIf.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CopyIf.hpp index 3c0c4f7e9b..3c1e2474bc 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CopyIf.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CopyIf.hpp @@ -20,6 +20,7 @@ #include #include "Kokkos_Constraints.hpp" #include "Kokkos_HelperPredicates.hpp" +#include "Kokkos_MustUseKokkosSingleInTeam.hpp" #include #include @@ -27,8 +28,10 @@ namespace Kokkos { namespace Experimental { namespace Impl { -template +template struct StdCopyIfFunctor { + using index_type = typename FirstFrom::difference_type; + FirstFrom m_first_from; FirstDest m_first_dest; PredType m_pred; @@ -40,7 +43,7 @@ struct StdCopyIfFunctor { m_pred(std::move(pred)) {} KOKKOS_FUNCTION - void operator()(const IndexType i, IndexType& update, + void operator()(const index_type i, index_type& update, const bool final_pass) const { const auto& myval = m_first_from[i]; if (final_pass) { @@ -57,9 +60,11 @@ struct StdCopyIfFunctor { template -OutputIterator copy_if_impl(const std::string& label, const ExecutionSpace& ex, - InputIterator first, InputIterator last, - OutputIterator d_first, PredicateType pred) { +OutputIterator copy_if_exespace_impl(const std::string& label, + const ExecutionSpace& ex, + InputIterator first, InputIterator last, + OutputIterator d_first, + PredicateType pred) { /* To explain the impl, suppose that our data is: @@ -90,23 +95,67 @@ OutputIterator copy_if_impl(const std::string& label, const ExecutionSpace& ex, if (first == last) { return d_first; } else { - // aliases - using index_type = typename InputIterator::difference_type; - using func_type = StdCopyIfFunctor; - // run const auto num_elements = Kokkos::Experimental::distance(first, last); - index_type count = 0; + + typename InputIterator::difference_type count = 0; ::Kokkos::parallel_scan(label, RangePolicy(ex, 0, num_elements), - func_type(first, d_first, pred), count); + // use CTAD + StdCopyIfFunctor(first, d_first, pred), count); // fence not needed because of the scan accumulating into count return d_first + count; } } +template +KOKKOS_FUNCTION OutputIterator copy_if_team_impl( + const TeamHandleType& teamHandle, InputIterator first, InputIterator last, + OutputIterator d_first, PredicateType pred) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first, d_first); + Impl::static_assert_iterators_have_matching_difference_type(first, d_first); + Impl::expect_valid_range(first, last); + + if (first == last) { + return d_first; + } + + const std::size_t num_elements = Kokkos::Experimental::distance(first, last); + if constexpr (stdalgo_must_use_kokkos_single_for_team_scan_v< + typename TeamHandleType::execution_space>) { + std::size_t count = 0; + Kokkos::single( + Kokkos::PerTeam(teamHandle), + [=](std::size_t& lcount) { + lcount = 0; + for (std::size_t i = 0; i < num_elements; ++i) { + const auto& myval = first[i]; + if (pred(myval)) { + d_first[lcount++] = myval; + } + } + }, + count); + // no barrier needed since single above broadcasts to all members + return d_first + count; + + } else { + typename InputIterator::difference_type count = 0; + ::Kokkos::parallel_scan(TeamThreadRange(teamHandle, 0, num_elements), + StdCopyIfFunctor(first, d_first, pred), count); + // no barrier needed because of the scan accumulating into count + return d_first + count; + } + +#if defined KOKKOS_COMPILER_INTEL || \ + (defined(KOKKOS_COMPILER_NVCC) && KOKKOS_COMPILER_NVCC >= 1130) + __builtin_unreachable(); +#endif +} + } // namespace Impl } // namespace Experimental } // namespace Kokkos diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CountCountIf.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CountCountIf.hpp index 18b8c46359..9b6b403aa4 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CountCountIf.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_CountCountIf.hpp @@ -46,37 +46,65 @@ struct StdCountIfFunctor { }; template -typename IteratorType::difference_type count_if_impl(const std::string& label, - const ExecutionSpace& ex, - IteratorType first, - IteratorType last, - Predicate predicate) { +typename IteratorType::difference_type count_if_exespace_impl( + const std::string& label, const ExecutionSpace& ex, IteratorType first, + IteratorType last, Predicate predicate) { // checks Impl::static_assert_random_access_and_accessible(ex, first); Impl::expect_valid_range(first, last); - // aliases - using func_t = StdCountIfFunctor; - // run const auto num_elements = Kokkos::Experimental::distance(first, last); typename IteratorType::difference_type count = 0; ::Kokkos::parallel_reduce(label, RangePolicy(ex, 0, num_elements), - func_t(first, predicate), count); + // use CTAD + StdCountIfFunctor(first, predicate), count); ex.fence("Kokkos::count_if: fence after operation"); return count; } template -auto count_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType first, IteratorType last, const T& value) { - return count_if_impl( +auto count_exespace_impl(const std::string& label, const ExecutionSpace& ex, + IteratorType first, IteratorType last, + const T& value) { + return count_if_exespace_impl( label, ex, first, last, ::Kokkos::Experimental::Impl::StdAlgoEqualsValUnaryPredicate(value)); } +// +// team-level impl +// +template +KOKKOS_FUNCTION typename IteratorType::difference_type count_if_team_impl( + const TeamHandleType& teamHandle, IteratorType first, IteratorType last, + Predicate predicate) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first); + Impl::expect_valid_range(first, last); + + // run + const auto num_elements = Kokkos::Experimental::distance(first, last); + typename IteratorType::difference_type count = 0; + ::Kokkos::parallel_reduce(TeamThreadRange(teamHandle, 0, num_elements), + // use CTAD + StdCountIfFunctor(first, predicate), count); + teamHandle.team_barrier(); + + return count; +} + +template +KOKKOS_FUNCTION auto count_team_impl(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + const T& value) { + return count_if_team_impl( + teamHandle, first, last, + ::Kokkos::Experimental::Impl::StdAlgoEqualsValUnaryPredicate(value)); +} + } // namespace Impl } // namespace Experimental } // namespace Kokkos diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_Equal.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_Equal.hpp index e045080d4a..62b7d226f6 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_Equal.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_Equal.hpp @@ -27,15 +27,16 @@ namespace Kokkos { namespace Experimental { namespace Impl { -template +template struct StdEqualFunctor { + using index_type = typename IteratorType1::difference_type; + IteratorType1 m_first1; IteratorType2 m_first2; BinaryPredicateType m_predicate; KOKKOS_FUNCTION - void operator()(IndexType i, std::size_t& lsum) const { + void operator()(index_type i, std::size_t& lsum) const { if (!m_predicate(m_first1[i], m_first2[i])) { lsum = 1; } @@ -49,67 +50,130 @@ struct StdEqualFunctor { m_predicate(std::move(_predicate)) {} }; +// +// exespace impl +// template -bool equal_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, - BinaryPredicateType predicate) { +bool equal_exespace_impl(const std::string& label, const ExecutionSpace& ex, + IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, BinaryPredicateType predicate) { // checks Impl::static_assert_random_access_and_accessible(ex, first1, first2); Impl::static_assert_iterators_have_matching_difference_type(first1, first2); Impl::expect_valid_range(first1, last1); - // aliases - using index_type = typename IteratorType1::difference_type; - using func_t = StdEqualFunctor; - // run const auto num_elements = Kokkos::Experimental::distance(first1, last1); std::size_t different = 0; - ::Kokkos::parallel_reduce(label, - RangePolicy(ex, 0, num_elements), - func_t(first1, first2, predicate), different); + ::Kokkos::parallel_reduce( + label, RangePolicy(ex, 0, num_elements), + StdEqualFunctor(first1, first2, predicate), different); ex.fence("Kokkos::equal: fence after operation"); return !different; } template -bool equal_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType1 first1, IteratorType1 last1, - IteratorType2 first2) { +bool equal_exespace_impl(const std::string& label, const ExecutionSpace& ex, + IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2) { using value_type1 = typename IteratorType1::value_type; using value_type2 = typename IteratorType2::value_type; using pred_t = StdAlgoEqualBinaryPredicate; - return equal_impl(label, ex, first1, last1, first2, pred_t()); + return equal_exespace_impl(label, ex, first1, last1, first2, pred_t()); } template -bool equal_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, - IteratorType2 last2, BinaryPredicateType predicate) { +bool equal_exespace_impl(const std::string& label, const ExecutionSpace& ex, + IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, IteratorType2 last2, + BinaryPredicateType predicate) { const auto d1 = ::Kokkos::Experimental::distance(first1, last1); const auto d2 = ::Kokkos::Experimental::distance(first2, last2); if (d1 != d2) { return false; } - return equal_impl(label, ex, first1, last1, first2, predicate); + return equal_exespace_impl(label, ex, first1, last1, first2, predicate); } template -bool equal_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType1 first1, IteratorType1 last1, IteratorType2 first2, - IteratorType2 last2) { +bool equal_exespace_impl(const std::string& label, const ExecutionSpace& ex, + IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, IteratorType2 last2) { Impl::expect_valid_range(first1, last1); Impl::expect_valid_range(first2, last2); using value_type1 = typename IteratorType1::value_type; using value_type2 = typename IteratorType2::value_type; using pred_t = StdAlgoEqualBinaryPredicate; - return equal_impl(label, ex, first1, last1, first2, last2, pred_t()); + return equal_exespace_impl(label, ex, first1, last1, first2, last2, pred_t()); +} + +// +// team impl +// +template +KOKKOS_FUNCTION bool equal_team_impl(const TeamHandleType& teamHandle, + IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, + BinaryPredicateType predicate) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first1, first2); + Impl::static_assert_iterators_have_matching_difference_type(first1, first2); + Impl::expect_valid_range(first1, last1); + + // run + const auto num_elements = Kokkos::Experimental::distance(first1, last1); + std::size_t different = 0; + ::Kokkos::parallel_reduce(TeamThreadRange(teamHandle, 0, num_elements), + StdEqualFunctor(first1, first2, predicate), + different); + teamHandle.team_barrier(); + + return !different; +} + +template +KOKKOS_FUNCTION bool equal_team_impl(const TeamHandleType& teamHandle, + IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2) { + using value_type1 = typename IteratorType1::value_type; + using value_type2 = typename IteratorType2::value_type; + using pred_t = StdAlgoEqualBinaryPredicate; + return equal_team_impl(teamHandle, first1, last1, first2, pred_t()); +} + +template +KOKKOS_FUNCTION bool equal_team_impl(const TeamHandleType& teamHandle, + IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, IteratorType2 last2, + BinaryPredicateType predicate) { + const auto d1 = ::Kokkos::Experimental::distance(first1, last1); + const auto d2 = ::Kokkos::Experimental::distance(first2, last2); + if (d1 != d2) { + return false; + } + + return equal_team_impl(teamHandle, first1, last1, first2, predicate); +} + +template +KOKKOS_FUNCTION bool equal_team_impl(const TeamHandleType& teamHandle, + IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, + IteratorType2 last2) { + Impl::expect_valid_range(first1, last1); + Impl::expect_valid_range(first2, last2); + + using value_type1 = typename IteratorType1::value_type; + using value_type2 = typename IteratorType2::value_type; + using pred_t = StdAlgoEqualBinaryPredicate; + return equal_team_impl(teamHandle, first1, last1, first2, last2, pred_t()); } } // namespace Impl diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_ExclusiveScan.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_ExclusiveScan.hpp index 71f13e490a..6da992b4bb 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_ExclusiveScan.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_ExclusiveScan.hpp @@ -22,6 +22,7 @@ #include "Kokkos_HelperPredicates.hpp" #include "Kokkos_ValueWrapperForNoNeutralElement.hpp" #include "Kokkos_IdentityReferenceUnaryFunctor.hpp" +#include "Kokkos_FunctorsForExclusiveScan.hpp" #include #include #include @@ -30,127 +31,15 @@ namespace Kokkos { namespace Experimental { namespace Impl { -template -struct ExclusiveScanDefaultFunctorForKnownNeutralElement { - using execution_space = ExeSpace; - - ValueType m_init_value; - FirstFrom m_first_from; - FirstDest m_first_dest; - - KOKKOS_FUNCTION - ExclusiveScanDefaultFunctorForKnownNeutralElement(ValueType init, - FirstFrom first_from, - FirstDest first_dest) - : m_init_value(std::move(init)), - m_first_from(std::move(first_from)), - m_first_dest(std::move(first_dest)) {} - - KOKKOS_FUNCTION - void operator()(const IndexType i, ValueType& update, - const bool final_pass) const { - if (final_pass) m_first_dest[i] = update + m_init_value; - update += m_first_from[i]; - } -}; - -template -struct ExclusiveScanDefaultFunctor { - using execution_space = ExeSpace; - using value_type = - ::Kokkos::Experimental::Impl::ValueWrapperForNoNeutralElement; - - ValueType m_init_value; - FirstFrom m_first_from; - FirstDest m_first_dest; - - KOKKOS_FUNCTION - ExclusiveScanDefaultFunctor(ValueType init, FirstFrom first_from, - FirstDest first_dest) - : m_init_value(std::move(init)), - m_first_from(std::move(first_from)), - m_first_dest(std::move(first_dest)) {} - - KOKKOS_FUNCTION - void operator()(const IndexType i, value_type& update, - const bool final_pass) const { - if (final_pass) { - if (i == 0) { - m_first_dest[i] = m_init_value; - } else { - m_first_dest[i] = update.val + m_init_value; - } - } - - const auto tmp = value_type{m_first_from[i], false}; - this->join(update, tmp); - } - - KOKKOS_FUNCTION - void init(value_type& update) const { - update.val = {}; - update.is_initial = true; - } - - KOKKOS_FUNCTION - void join(value_type& update, const value_type& input) const { - if (input.is_initial) return; - - if (update.is_initial) { - update.val = input.val; - update.is_initial = false; - } else { - update.val = update.val + input.val; - } - } -}; - -template -OutputIteratorType exclusive_scan_custom_op_impl( - const std::string& label, const ExecutionSpace& ex, - InputIteratorType first_from, InputIteratorType last_from, - OutputIteratorType first_dest, ValueType init_value, BinaryOpType bop) { - // checks - Impl::static_assert_random_access_and_accessible(ex, first_from, first_dest); - Impl::static_assert_iterators_have_matching_difference_type(first_from, - first_dest); - Impl::expect_valid_range(first_from, last_from); - - // aliases - using index_type = typename InputIteratorType::difference_type; - using unary_op_type = StdNumericScanIdentityReferenceUnaryFunctor; - using func_type = - TransformExclusiveScanFunctor; - - // run - const auto num_elements = - Kokkos::Experimental::distance(first_from, last_from); - ::Kokkos::parallel_scan( - label, RangePolicy(ex, 0, num_elements), - func_type(init_value, first_from, first_dest, bop, unary_op_type())); - ex.fence("Kokkos::exclusive_scan_custom_op: fence after operation"); - - // return - return first_dest + num_elements; -} - -template -using ex_scan_has_reduction_identity_sum_t = - decltype(Kokkos::reduction_identity::sum()); - +// +// exespace impl +// template -OutputIteratorType exclusive_scan_default_op_impl(const std::string& label, - const ExecutionSpace& ex, - InputIteratorType first_from, - InputIteratorType last_from, - OutputIteratorType first_dest, - ValueType init_value) { +OutputIteratorType exclusive_scan_default_op_exespace_impl( + const std::string& label, const ExecutionSpace& ex, + InputIteratorType first_from, InputIteratorType last_from, + OutputIteratorType first_dest, ValueType init_value) { // checks Impl::static_assert_random_access_and_accessible(ex, first_from, first_dest); Impl::static_assert_iterators_have_matching_difference_type(first_from, @@ -184,17 +73,122 @@ OutputIteratorType exclusive_scan_default_op_impl(const std::string& label, ExclusiveScanDefaultFunctorForKnownNeutralElement< ExecutionSpace, index_type, ValueType, InputIteratorType, OutputIteratorType>, - ExclusiveScanDefaultFunctor>; + ExclusiveScanDefaultFunctorWithValueWrapper>; + + // run + const auto num_elements = + Kokkos::Experimental::distance(first_from, last_from); + ::Kokkos::parallel_scan( + label, RangePolicy(ex, 0, num_elements), + func_type(std::move(init_value), first_from, first_dest)); + + ex.fence("Kokkos::exclusive_scan_default_op: fence after operation"); + + return first_dest + num_elements; +} + +template +OutputIteratorType exclusive_scan_custom_op_exespace_impl( + const std::string& label, const ExecutionSpace& ex, + InputIteratorType first_from, InputIteratorType last_from, + OutputIteratorType first_dest, ValueType init_value, BinaryOpType bop) { + // checks + Impl::static_assert_random_access_and_accessible(ex, first_from, first_dest); + Impl::static_assert_iterators_have_matching_difference_type(first_from, + first_dest); + Impl::expect_valid_range(first_from, last_from); + + // aliases + using index_type = typename InputIteratorType::difference_type; + using unary_op_type = StdNumericScanIdentityReferenceUnaryFunctor; + using func_type = TransformExclusiveScanFunctorWithValueWrapper< + ExecutionSpace, index_type, ValueType, InputIteratorType, + OutputIteratorType, BinaryOpType, unary_op_type>; // run const auto num_elements = Kokkos::Experimental::distance(first_from, last_from); ::Kokkos::parallel_scan(label, RangePolicy(ex, 0, num_elements), - func_type(init_value, first_from, first_dest)); + func_type(std::move(init_value), first_from, + first_dest, bop, unary_op_type())); + ex.fence("Kokkos::exclusive_scan_custom_op: fence after operation"); - ex.fence("Kokkos::exclusive_scan_default_op: fence after operation"); + // return + return first_dest + num_elements; +} + +// +// team impl +// +template +KOKKOS_FUNCTION OutputIteratorType exclusive_scan_default_op_team_impl( + const TeamHandleType& teamHandle, InputIteratorType first_from, + InputIteratorType last_from, OutputIteratorType first_dest, + ValueType init_value) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first_from, + first_dest); + Impl::static_assert_iterators_have_matching_difference_type(first_from, + first_dest); + Impl::expect_valid_range(first_from, last_from); + + static_assert( + ::Kokkos::is_detected_v, + "The team-level impl of Kokkos::Experimental::exclusive_scan currently " + "does not support types without reduction identity"); + + // aliases + using exe_space = typename TeamHandleType::execution_space; + using index_type = typename InputIteratorType::difference_type; + using func_type = ExclusiveScanDefaultFunctorForKnownNeutralElement< + exe_space, index_type, ValueType, InputIteratorType, OutputIteratorType>; + + const auto num_elements = + Kokkos::Experimental::distance(first_from, last_from); + ::Kokkos::parallel_scan( + TeamThreadRange(teamHandle, 0, num_elements), + func_type(std::move(init_value), first_from, first_dest)); + teamHandle.team_barrier(); + return first_dest + num_elements; +} + +template +KOKKOS_FUNCTION OutputIteratorType exclusive_scan_custom_op_team_impl( + const TeamHandleType& teamHandle, InputIteratorType first_from, + InputIteratorType last_from, OutputIteratorType first_dest, + ValueType init_value, BinaryOpType bop) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first_from, + first_dest); + Impl::static_assert_iterators_have_matching_difference_type(first_from, + first_dest); + Impl::expect_valid_range(first_from, last_from); + + static_assert( + ::Kokkos::is_detected_v, + "The team-level impl of Kokkos::Experimental::exclusive_scan currently " + "does not support types without reduction identity"); + + // aliases + using exe_space = typename TeamHandleType::execution_space; + using unary_op_type = StdNumericScanIdentityReferenceUnaryFunctor; + using index_type = typename InputIteratorType::difference_type; + using func_type = TransformExclusiveScanFunctorWithoutValueWrapper< + exe_space, index_type, ValueType, InputIteratorType, OutputIteratorType, + BinaryOpType, unary_op_type>; + + const auto num_elements = + Kokkos::Experimental::distance(first_from, last_from); + ::Kokkos::parallel_scan(TeamThreadRange(teamHandle, 0, num_elements), + func_type(std::move(init_value), first_from, + first_dest, bop, unary_op_type())); + teamHandle.team_barrier(); return first_dest + num_elements; } diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FillFillN.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FillFillN.hpp index 316d865f31..972e57f2cc 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FillFillN.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FillFillN.hpp @@ -41,9 +41,12 @@ struct StdFillFunctor { : m_first(std::move(_first)), m_value(std::move(_value)) {} }; +// +// exespace impl +// template -void fill_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType first, IteratorType last, const T& value) { +void fill_exespace_impl(const std::string& label, const ExecutionSpace& ex, + IteratorType first, IteratorType last, const T& value) { // checks Impl::static_assert_random_access_and_accessible(ex, first); Impl::expect_valid_range(first, last); @@ -52,13 +55,14 @@ void fill_impl(const std::string& label, const ExecutionSpace& ex, const auto num_elements = Kokkos::Experimental::distance(first, last); ::Kokkos::parallel_for(label, RangePolicy(ex, 0, num_elements), - StdFillFunctor(first, value)); + StdFillFunctor(first, value)); ex.fence("Kokkos::fill: fence after operation"); } template -IteratorType fill_n_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType first, SizeType n, const T& value) { +IteratorType fill_n_exespace_impl(const std::string& label, + const ExecutionSpace& ex, IteratorType first, + SizeType n, const T& value) { auto last = first + n; Impl::static_assert_random_access_and_accessible(ex, first); Impl::expect_valid_range(first, last); @@ -67,7 +71,40 @@ IteratorType fill_n_impl(const std::string& label, const ExecutionSpace& ex, return first; } - fill_impl(label, ex, first, last, value); + fill_exespace_impl(label, ex, first, last, value); + return last; +} + +// +// team-level impl +// +template +KOKKOS_FUNCTION void fill_team_impl(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + const T& value) { + Impl::static_assert_random_access_and_accessible(teamHandle, first); + Impl::expect_valid_range(first, last); + + const auto num_elements = Kokkos::Experimental::distance(first, last); + ::Kokkos::parallel_for(TeamThreadRange(teamHandle, 0, num_elements), + StdFillFunctor(first, value)); + + teamHandle.team_barrier(); +} + +template +KOKKOS_FUNCTION IteratorType fill_n_team_impl(const TeamHandleType& teamHandle, + IteratorType first, SizeType n, + const T& value) { + auto last = first + n; + Impl::static_assert_random_access_and_accessible(teamHandle, first); + Impl::expect_valid_range(first, last); + + if (n <= 0) { + return first; + } + + fill_team_impl(teamHandle, first, last, value); return last; } diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FindEnd.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FindEnd.hpp index 3ec64fa43d..1f1ec5e54f 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FindEnd.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FindEnd.hpp @@ -80,12 +80,17 @@ struct StdFindEndFunctor { m_p(std::move(p)) {} }; +// +// exespace impl +// template -IteratorType1 find_end_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType1 first, IteratorType1 last, - IteratorType2 s_first, IteratorType2 s_last, - const BinaryPredicateType& pred) { +IteratorType1 find_end_exespace_impl(const std::string& label, + const ExecutionSpace& ex, + IteratorType1 first, IteratorType1 last, + IteratorType2 s_first, + IteratorType2 s_last, + const BinaryPredicateType& pred) { // checks Impl::static_assert_random_access_and_accessible(ex, first, s_first); Impl::static_assert_iterators_have_matching_difference_type(first, s_first); @@ -97,7 +102,6 @@ IteratorType1 find_end_impl(const std::string& label, const ExecutionSpace& ex, const auto num_elements = KE::distance(first, last); const auto s_count = KE::distance(s_first, s_last); KOKKOS_EXPECTS(num_elements >= s_count); - (void)s_count; // needed when macro above is a no-op if (s_first == s_last) { return last; @@ -109,7 +113,8 @@ IteratorType1 find_end_impl(const std::string& label, const ExecutionSpace& ex, // special case where the two ranges have equal size if (num_elements == s_count) { - const auto equal_result = equal_impl(label, ex, first, last, s_first, pred); + const auto equal_result = + equal_exespace_impl(label, ex, first, last, s_first, pred); return (equal_result) ? first : last; } else { using index_type = typename IteratorType1::difference_type; @@ -148,14 +153,97 @@ IteratorType1 find_end_impl(const std::string& label, const ExecutionSpace& ex, } template -IteratorType1 find_end_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType1 first, IteratorType1 last, - IteratorType2 s_first, IteratorType2 s_last) { +IteratorType1 find_end_exespace_impl(const std::string& label, + const ExecutionSpace& ex, + IteratorType1 first, IteratorType1 last, + IteratorType2 s_first, + IteratorType2 s_last) { using value_type1 = typename IteratorType1::value_type; using value_type2 = typename IteratorType2::value_type; using predicate_type = StdAlgoEqualBinaryPredicate; - return find_end_impl(label, ex, first, last, s_first, s_last, - predicate_type()); + return find_end_exespace_impl(label, ex, first, last, s_first, s_last, + predicate_type()); +} + +// +// team impl +// +template +KOKKOS_FUNCTION IteratorType1 +find_end_team_impl(const TeamHandleType& teamHandle, IteratorType1 first, + IteratorType1 last, IteratorType2 s_first, + IteratorType2 s_last, const BinaryPredicateType& pred) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first, s_first); + Impl::static_assert_iterators_have_matching_difference_type(first, s_first); + Impl::expect_valid_range(first, last); + Impl::expect_valid_range(s_first, s_last); + + // the target sequence should not be larger than the range [first, last) + namespace KE = ::Kokkos::Experimental; + const auto num_elements = KE::distance(first, last); + const auto s_count = KE::distance(s_first, s_last); + KOKKOS_EXPECTS(num_elements >= s_count); + + if (s_first == s_last) { + return last; + } + + if (first == last) { + return last; + } + + // special case where the two ranges have equal size + if (num_elements == s_count) { + const auto equal_result = + equal_team_impl(teamHandle, first, last, s_first, pred); + return (equal_result) ? first : last; + } else { + using index_type = typename IteratorType1::difference_type; + using reducer_type = LastLoc; + using reduction_value_type = typename reducer_type::value_type; + using func_t = StdFindEndFunctor; + + // run + reduction_value_type red_result; + reducer_type reducer(red_result); + + // decide the size of the range policy of the par_red: + // note that the last feasible index to start looking is the index + // whose distance from the "last" is equal to the sequence count. + // the +1 is because we need to include that location too. + const auto range_size = num_elements - s_count + 1; + + // run par reduce + ::Kokkos::parallel_reduce( + TeamThreadRange(teamHandle, 0, range_size), + func_t(first, last, s_first, s_last, reducer, pred), reducer); + + teamHandle.team_barrier(); + + // decide and return + if (red_result.max_loc_true == + ::Kokkos::reduction_identity::max()) { + // if here, a subrange has not been found + return last; + } else { + // a location has been found + return first + red_result.max_loc_true; + } + } +} + +template +KOKKOS_FUNCTION IteratorType1 find_end_team_impl( + const TeamHandleType& teamHandle, IteratorType1 first, IteratorType1 last, + IteratorType2 s_first, IteratorType2 s_last) { + using value_type1 = typename IteratorType1::value_type; + using value_type2 = typename IteratorType2::value_type; + using predicate_type = StdAlgoEqualBinaryPredicate; + return find_end_team_impl(teamHandle, first, last, s_first, s_last, + predicate_type()); } } // namespace Impl diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FindFirstOf.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FindFirstOf.hpp index 5f22d2ad13..145e235b9d 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FindFirstOf.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FindFirstOf.hpp @@ -71,13 +71,15 @@ struct StdFindFirstOfFunctor { m_p(std::move(p)) {} }; +// +// exespace impl +// template -IteratorType1 find_first_of_impl(const std::string& label, - const ExecutionSpace& ex, IteratorType1 first, - IteratorType1 last, IteratorType2 s_first, - IteratorType2 s_last, - const BinaryPredicateType& pred) { +IteratorType1 find_first_of_exespace_impl( + const std::string& label, const ExecutionSpace& ex, IteratorType1 first, + IteratorType1 last, IteratorType2 s_first, IteratorType2 s_last, + const BinaryPredicateType& pred) { // checks Impl::static_assert_random_access_and_accessible(ex, first, s_first); Impl::static_assert_iterators_have_matching_difference_type(first, s_first); @@ -116,15 +118,71 @@ IteratorType1 find_first_of_impl(const std::string& label, } template -IteratorType1 find_first_of_impl(const std::string& label, - const ExecutionSpace& ex, IteratorType1 first, - IteratorType1 last, IteratorType2 s_first, - IteratorType2 s_last) { +IteratorType1 find_first_of_exespace_impl( + const std::string& label, const ExecutionSpace& ex, IteratorType1 first, + IteratorType1 last, IteratorType2 s_first, IteratorType2 s_last) { using value_type1 = typename IteratorType1::value_type; using value_type2 = typename IteratorType2::value_type; using predicate_type = StdAlgoEqualBinaryPredicate; - return find_first_of_impl(label, ex, first, last, s_first, s_last, - predicate_type()); + return find_first_of_exespace_impl(label, ex, first, last, s_first, s_last, + predicate_type()); +} + +// +// team impl +// +template +KOKKOS_FUNCTION IteratorType1 +find_first_of_team_impl(const TeamHandleType& teamHandle, IteratorType1 first, + IteratorType1 last, IteratorType2 s_first, + IteratorType2 s_last, const BinaryPredicateType& pred) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first, s_first); + Impl::static_assert_iterators_have_matching_difference_type(first, s_first); + Impl::expect_valid_range(first, last); + Impl::expect_valid_range(s_first, s_last); + + if ((s_first == s_last) || (first == last)) { + return last; + } + + using index_type = typename IteratorType1::difference_type; + using reducer_type = FirstLoc; + using reduction_value_type = typename reducer_type::value_type; + using func_t = StdFindFirstOfFunctor; + + // run + reduction_value_type red_result; + reducer_type reducer(red_result); + const auto num_elements = Kokkos::Experimental::distance(first, last); + ::Kokkos::parallel_reduce(TeamThreadRange(teamHandle, 0, num_elements), + func_t(first, s_first, s_last, reducer, pred), + reducer); + + teamHandle.team_barrier(); + + // decide and return + if (red_result.min_loc_true == + ::Kokkos::reduction_identity::min()) { + // if here, nothing found + return last; + } else { + // a location has been found + return first + red_result.min_loc_true; + } +} + +template +KOKKOS_FUNCTION IteratorType1 find_first_of_team_impl( + const TeamHandleType& teamHandle, IteratorType1 first, IteratorType1 last, + IteratorType2 s_first, IteratorType2 s_last) { + using value_type1 = typename IteratorType1::value_type; + using value_type2 = typename IteratorType2::value_type; + using predicate_type = StdAlgoEqualBinaryPredicate; + return find_first_of_team_impl(teamHandle, first, last, s_first, s_last, + predicate_type()); } } // namespace Impl diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FindIfOrNot.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FindIfOrNot.hpp index 9c0b0c0ccd..8fffb59094 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FindIfOrNot.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FindIfOrNot.hpp @@ -61,11 +61,15 @@ struct StdFindIfOrNotFunctor { m_p(std::move(p)) {} }; +// +// exespace impl +// template -IteratorType find_if_or_not_impl(const std::string& label, - const ExecutionSpace& ex, IteratorType first, - IteratorType last, PredicateType pred) { +IteratorType find_if_or_not_exespace_impl(const std::string& label, + const ExecutionSpace& ex, + IteratorType first, IteratorType last, + PredicateType pred) { // checks Impl::static_assert_random_access_and_accessible( ex, first); // only need one It per type @@ -104,14 +108,68 @@ IteratorType find_if_or_not_impl(const std::string& label, } template -InputIterator find_impl(const std::string& label, ExecutionSpace ex, - InputIterator first, InputIterator last, - const T& value) { - return find_if_or_not_impl( +InputIterator find_exespace_impl(const std::string& label, ExecutionSpace ex, + InputIterator first, InputIterator last, + const T& value) { + return find_if_or_not_exespace_impl( label, ex, first, last, ::Kokkos::Experimental::Impl::StdAlgoEqualsValUnaryPredicate(value)); } +// +// team impl +// +template +KOKKOS_FUNCTION IteratorType +find_if_or_not_team_impl(const TeamHandleType& teamHandle, IteratorType first, + IteratorType last, PredicateType pred) { + // checks + Impl::static_assert_random_access_and_accessible( + teamHandle, first); // only need one It per type + Impl::expect_valid_range(first, last); + + if (first == last) { + return last; + } + + // aliases + using index_type = typename IteratorType::difference_type; + using reducer_type = FirstLoc; + using reduction_value_type = typename reducer_type::value_type; + using func_t = StdFindIfOrNotFunctor; + + // run + reduction_value_type red_result; + reducer_type reducer(red_result); + const auto num_elements = Kokkos::Experimental::distance(first, last); + ::Kokkos::parallel_reduce(TeamThreadRange(teamHandle, 0, num_elements), + func_t(first, reducer, pred), reducer); + + teamHandle.team_barrier(); + + // decide and return + if (red_result.min_loc_true == + ::Kokkos::reduction_identity::min()) { + // here, it means a valid loc has not been found, + return last; + } else { + // a location has been found + return first + red_result.min_loc_true; + } +} + +template +KOKKOS_FUNCTION InputIterator find_team_impl(const TeamHandleType& teamHandle, + InputIterator first, + InputIterator last, + const T& value) { + return find_if_or_not_team_impl( + teamHandle, first, last, + ::Kokkos::Experimental::Impl::StdAlgoEqualsValUnaryPredicate(value)); +} + } // namespace Impl } // namespace Experimental } // namespace Kokkos diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_ForEachForEachN.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_ForEachForEachN.hpp index f9a6ff2e99..d3be3b7f66 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_ForEachForEachN.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_ForEachForEachN.hpp @@ -41,29 +41,31 @@ struct StdForEachFunctor { : m_first(std::move(_first)), m_functor(std::move(_functor)) {} }; -template -UnaryFunctorType for_each_impl(const std::string& label, - const ExecutionSpace& ex, IteratorType first, - IteratorType last, UnaryFunctorType functor) { +template +UnaryFunctorType for_each_exespace_impl(const std::string& label, + const HandleType& handle, + IteratorType first, IteratorType last, + UnaryFunctorType functor) { // checks - Impl::static_assert_random_access_and_accessible(ex, first); + Impl::static_assert_random_access_and_accessible(handle, first); Impl::expect_valid_range(first, last); // run const auto num_elements = Kokkos::Experimental::distance(first, last); ::Kokkos::parallel_for( - label, RangePolicy(ex, 0, num_elements), + label, RangePolicy(handle, 0, num_elements), StdForEachFunctor(first, functor)); - ex.fence("Kokkos::for_each: fence after operation"); + handle.fence("Kokkos::for_each: fence after operation"); return functor; } template -IteratorType for_each_n_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType first, SizeType n, - UnaryFunctorType functor) { +IteratorType for_each_n_exespace_impl(const std::string& label, + const ExecutionSpace& ex, + IteratorType first, SizeType n, + UnaryFunctorType functor) { auto last = first + n; Impl::static_assert_random_access_and_accessible(ex, first, last); Impl::expect_valid_range(first, last); @@ -72,8 +74,46 @@ IteratorType for_each_n_impl(const std::string& label, const ExecutionSpace& ex, return first; } - for_each_impl(label, ex, first, last, std::move(functor)); - // no neeed to fence since for_each_impl fences already + for_each_exespace_impl(label, ex, first, last, std::move(functor)); + // no neeed to fence since for_each_exespace_impl fences already + + return last; +} + +// +// team impl +// +template +KOKKOS_FUNCTION UnaryFunctorType +for_each_team_impl(const TeamHandleType& teamHandle, IteratorType first, + IteratorType last, UnaryFunctorType functor) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first); + Impl::expect_valid_range(first, last); + // run + const auto num_elements = Kokkos::Experimental::distance(first, last); + ::Kokkos::parallel_for( + TeamThreadRange(teamHandle, 0, num_elements), + StdForEachFunctor(first, functor)); + teamHandle.team_barrier(); + return functor; +} + +template +KOKKOS_FUNCTION IteratorType +for_each_n_team_impl(const TeamHandleType& teamHandle, IteratorType first, + SizeType n, UnaryFunctorType functor) { + auto last = first + n; + Impl::static_assert_random_access_and_accessible(teamHandle, first, last); + Impl::expect_valid_range(first, last); + + if (n == 0) { + return first; + } + + for_each_team_impl(teamHandle, first, last, std::move(functor)); + // no neeed to fence since for_each_team_impl fences already return last; } diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FunctorsForExclusiveScan.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FunctorsForExclusiveScan.hpp new file mode 100644 index 0000000000..8151ee3495 --- /dev/null +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_FunctorsForExclusiveScan.hpp @@ -0,0 +1,220 @@ +//@HEADER +// ************************************************************************ +// +// Kokkos v. 4.0 +// Copyright (2022) National Technology & Engineering +// Solutions of Sandia, LLC (NTESS). +// +// Under the terms of Contract DE-NA0003525 with NTESS, +// the U.S. Government retains certain rights in this software. +// +// Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. +// See https://kokkos.org/LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//@HEADER + +#ifndef KOKKOS_STD_ALGORITHMS_FUNCTORS_FOR_EXCLUSIVE_SCAN_IMPL_HPP +#define KOKKOS_STD_ALGORITHMS_FUNCTORS_FOR_EXCLUSIVE_SCAN_IMPL_HPP + +#include +#include "Kokkos_ValueWrapperForNoNeutralElement.hpp" + +namespace Kokkos { +namespace Experimental { +namespace Impl { + +template +using ex_scan_has_reduction_identity_sum_t = + decltype(Kokkos::reduction_identity::sum()); + +template +struct ExclusiveScanDefaultFunctorForKnownNeutralElement { + using execution_space = ExeSpace; + ValueType m_init_value; + FirstFrom m_first_from; + FirstDest m_first_dest; + + KOKKOS_FUNCTION + ExclusiveScanDefaultFunctorForKnownNeutralElement(ValueType init, + FirstFrom first_from, + FirstDest first_dest) + : m_init_value(std::move(init)), + m_first_from(std::move(first_from)), + m_first_dest(std::move(first_dest)) {} + + KOKKOS_FUNCTION + void operator()(const IndexType i, ValueType& update, + const bool final_pass) const { + if (final_pass) m_first_dest[i] = update + m_init_value; + update += m_first_from[i]; + } +}; + +template +struct ExclusiveScanDefaultFunctorWithValueWrapper { + using execution_space = ExeSpace; + using value_type = + ::Kokkos::Experimental::Impl::ValueWrapperForNoNeutralElement; + ValueType m_init_value; + FirstFrom m_first_from; + FirstDest m_first_dest; + + KOKKOS_FUNCTION + ExclusiveScanDefaultFunctorWithValueWrapper(ValueType init, + FirstFrom first_from, + FirstDest first_dest) + : m_init_value(std::move(init)), + m_first_from(std::move(first_from)), + m_first_dest(std::move(first_dest)) {} + + KOKKOS_FUNCTION + void operator()(const IndexType i, value_type& update, + const bool final_pass) const { + if (final_pass) { + if (i == 0) { + m_first_dest[i] = m_init_value; + } else { + m_first_dest[i] = update.val + m_init_value; + } + } + + const auto tmp = value_type{m_first_from[i], false}; + this->join(update, tmp); + } + + KOKKOS_FUNCTION + void init(value_type& update) const { + update.val = {}; + update.is_initial = true; + } + + KOKKOS_FUNCTION + void join(value_type& update, const value_type& input) const { + if (input.is_initial) return; + + if (update.is_initial) { + update.val = input.val; + update.is_initial = false; + } else { + update.val = update.val + input.val; + } + } +}; + +template +struct TransformExclusiveScanFunctorWithValueWrapper { + using execution_space = ExeSpace; + using value_type = + ::Kokkos::Experimental::Impl::ValueWrapperForNoNeutralElement; + + ValueType m_init_value; + FirstFrom m_first_from; + FirstDest m_first_dest; + BinaryOpType m_binary_op; + UnaryOpType m_unary_op; + + KOKKOS_FUNCTION + TransformExclusiveScanFunctorWithValueWrapper(ValueType init, + FirstFrom first_from, + FirstDest first_dest, + BinaryOpType bop, + UnaryOpType uop) + : m_init_value(std::move(init)), + m_first_from(std::move(first_from)), + m_first_dest(std::move(first_dest)), + m_binary_op(std::move(bop)), + m_unary_op(std::move(uop)) {} + + KOKKOS_FUNCTION + void operator()(const IndexType i, value_type& update, + const bool final_pass) const { + if (final_pass) { + if (i == 0) { + // for both ExclusiveScan and TransformExclusiveScan, + // init is unmodified + m_first_dest[i] = m_init_value; + } else { + m_first_dest[i] = m_binary_op(update.val, m_init_value); + } + } + + const auto tmp = value_type{m_unary_op(m_first_from[i]), false}; + this->join(update, tmp); + } + + KOKKOS_FUNCTION void init(value_type& value) const { + value.val = {}; + value.is_initial = true; + } + + KOKKOS_FUNCTION + void join(value_type& update, const value_type& input) const { + if (input.is_initial) return; + + if (update.is_initial) { + update.val = input.val; + } else { + update.val = m_binary_op(update.val, input.val); + } + update.is_initial = false; + } +}; + +template +struct TransformExclusiveScanFunctorWithoutValueWrapper { + using execution_space = ExeSpace; + + ValueType m_init_value; + FirstFrom m_first_from; + FirstDest m_first_dest; + BinaryOpType m_binary_op; + UnaryOpType m_unary_op; + + KOKKOS_FUNCTION + TransformExclusiveScanFunctorWithoutValueWrapper(ValueType init, + FirstFrom first_from, + FirstDest first_dest, + BinaryOpType bop, + UnaryOpType uop) + : m_init_value(std::move(init)), + m_first_from(std::move(first_from)), + m_first_dest(std::move(first_dest)), + m_binary_op(std::move(bop)), + m_unary_op(std::move(uop)) {} + + KOKKOS_FUNCTION + void operator()(const IndexType i, ValueType& update, + const bool final_pass) const { + if (final_pass) { + if (i == 0) { + // for both ExclusiveScan and TransformExclusiveScan, + // init is unmodified + m_first_dest[i] = m_init_value; + } else { + m_first_dest[i] = m_binary_op(update, m_init_value); + } + } + + const auto tmp = ValueType{m_unary_op(m_first_from[i])}; + this->join(update, tmp); + } + + KOKKOS_FUNCTION + void init(ValueType& update) const { update = {}; } + + KOKKOS_FUNCTION + void join(ValueType& update, const ValueType& input) const { + update = m_binary_op(update, input); + } +}; + +} // namespace Impl +} // namespace Experimental +} // namespace Kokkos + +#endif diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_GenerateGenerateN.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_GenerateGenerateN.hpp index 228390bdff..157de1125e 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_GenerateGenerateN.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_GenerateGenerateN.hpp @@ -41,32 +41,65 @@ struct StdGenerateFunctor { : m_first(std::move(_first)), m_generator(std::move(_g)) {} }; +// +// generate impl +// template -void generate_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType first, IteratorType last, Generator g) { +void generate_exespace_impl(const std::string& label, const ExecutionSpace& ex, + IteratorType first, IteratorType last, + Generator g) { // checks Impl::static_assert_random_access_and_accessible(ex, first); Impl::expect_valid_range(first, last); - // aliases - using func_t = StdGenerateFunctor; - // run const auto num_elements = Kokkos::Experimental::distance(first, last); ::Kokkos::parallel_for(label, RangePolicy(ex, 0, num_elements), - func_t(first, g)); + StdGenerateFunctor(first, g)); ex.fence("Kokkos::generate: fence after operation"); } +template +KOKKOS_FUNCTION void generate_team_impl(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + Generator g) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first); + Impl::expect_valid_range(first, last); + + // run + const auto num_elements = Kokkos::Experimental::distance(first, last); + ::Kokkos::parallel_for(TeamThreadRange(teamHandle, 0, num_elements), + StdGenerateFunctor(first, g)); + teamHandle.team_barrier(); +} + +// +// generate_n impl +// template -IteratorType generate_n_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType first, Size count, Generator g) { +IteratorType generate_n_exespace_impl(const std::string& label, + const ExecutionSpace& ex, + IteratorType first, Size count, + Generator g) { if (count <= 0) { return first; } - generate_impl(label, ex, first, first + count, g); + generate_exespace_impl(label, ex, first, first + count, g); + return first + count; +} + +template +KOKKOS_FUNCTION IteratorType +generate_n_team_impl(const TeamHandleType& teamHandle, IteratorType first, + Size count, Generator g) { + if (count <= 0) { + return first; + } + + generate_team_impl(teamHandle, first, first + count, g); return first + count; } diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_InclusiveScan.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_InclusiveScan.hpp index ecd6ff39cd..0b4acec0fe 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_InclusiveScan.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_InclusiveScan.hpp @@ -101,9 +101,12 @@ struct InclusiveScanDefaultFunctor { } }; +// +// exespace impl +// template -OutputIteratorType inclusive_scan_default_op_impl( +OutputIteratorType inclusive_scan_default_op_exespace_impl( const std::string& label, const ExecutionSpace& ex, InputIteratorType first_from, InputIteratorType last_from, OutputIteratorType first_dest) { @@ -143,7 +146,7 @@ OutputIteratorType inclusive_scan_default_op_impl( // ------------------------------------------------------------- template -OutputIteratorType inclusive_scan_custom_binary_op_impl( +OutputIteratorType inclusive_scan_custom_binary_op_exespace_impl( const std::string& label, const ExecutionSpace& ex, InputIteratorType first_from, InputIteratorType last_from, OutputIteratorType first_dest, BinaryOpType binary_op) { @@ -158,7 +161,7 @@ OutputIteratorType inclusive_scan_custom_binary_op_impl( using value_type = std::remove_const_t; using unary_op_type = StdNumericScanIdentityReferenceUnaryFunctor; - using func_type = TransformInclusiveScanNoInitValueFunctor< + using func_type = ExeSpaceTransformInclusiveScanNoInitValueFunctor< ExecutionSpace, index_type, value_type, InputIteratorType, OutputIteratorType, BinaryOpType, unary_op_type>; @@ -179,7 +182,7 @@ OutputIteratorType inclusive_scan_custom_binary_op_impl( // ------------------------------------------------------------- template -OutputIteratorType inclusive_scan_custom_binary_op_impl( +OutputIteratorType inclusive_scan_custom_binary_op_exespace_impl( const std::string& label, const ExecutionSpace& ex, InputIteratorType first_from, InputIteratorType last_from, OutputIteratorType first_dest, BinaryOpType binary_op, @@ -193,7 +196,7 @@ OutputIteratorType inclusive_scan_custom_binary_op_impl( // aliases using index_type = typename InputIteratorType::difference_type; using unary_op_type = StdNumericScanIdentityReferenceUnaryFunctor; - using func_type = TransformInclusiveScanWithInitValueFunctor< + using func_type = ExeSpaceTransformInclusiveScanWithInitValueFunctor< ExecutionSpace, index_type, ValueType, InputIteratorType, OutputIteratorType, BinaryOpType, unary_op_type>; @@ -203,13 +206,142 @@ OutputIteratorType inclusive_scan_custom_binary_op_impl( ::Kokkos::parallel_scan(label, RangePolicy(ex, 0, num_elements), func_type(first_from, first_dest, binary_op, - unary_op_type(), init_value)); + unary_op_type(), std::move(init_value))); ex.fence("Kokkos::inclusive_scan_custom_binary_op: fence after operation"); // return return first_dest + num_elements; } +// +// team impl +// +template +KOKKOS_FUNCTION OutputIteratorType inclusive_scan_default_op_team_impl( + const TeamHandleType& teamHandle, InputIteratorType first_from, + InputIteratorType last_from, OutputIteratorType first_dest) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first_from, + first_dest); + Impl::static_assert_iterators_have_matching_difference_type(first_from, + first_dest); + Impl::expect_valid_range(first_from, last_from); + + using value_type = + std::remove_const_t; + + // #if defined(KOKKOS_ENABLE_CUDA) + + using exe_space = typename TeamHandleType::execution_space; + using index_type = typename InputIteratorType::difference_type; + using func_type = std::conditional_t< + ::Kokkos::is_detected::value, + InclusiveScanDefaultFunctorForKnownIdentityElement< + exe_space, index_type, value_type, InputIteratorType, + OutputIteratorType>, + InclusiveScanDefaultFunctor>; + + // run + const auto num_elements = + Kokkos::Experimental::distance(first_from, last_from); + ::Kokkos::parallel_scan(TeamThreadRange(teamHandle, 0, num_elements), + func_type(first_from, first_dest)); + teamHandle.team_barrier(); + + // return + return first_dest + num_elements; +} + +// ------------------------------------------------------------- +// inclusive_scan_custom_binary_op_impl +// ------------------------------------------------------------- +template +KOKKOS_FUNCTION OutputIteratorType inclusive_scan_custom_binary_op_team_impl( + const TeamHandleType& teamHandle, InputIteratorType first_from, + InputIteratorType last_from, OutputIteratorType first_dest, + BinaryOpType binary_op) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first_from, + first_dest); + Impl::static_assert_iterators_have_matching_difference_type(first_from, + first_dest); + Impl::expect_valid_range(first_from, last_from); + + using value_type = + std::remove_const_t; + + static_assert( + ::Kokkos::is_detected_v, + "At the moment inclusive_scan doesn't support types without reduction " + "identity"); + + // #if defined(KOKKOS_ENABLE_CUDA) + + // aliases + using exe_space = typename TeamHandleType::execution_space; + using unary_op_type = StdNumericScanIdentityReferenceUnaryFunctor; + using func_type = TeamTransformInclusiveScanNoInitValueFunctor< + exe_space, value_type, InputIteratorType, OutputIteratorType, + BinaryOpType, unary_op_type>; + + // run + const auto num_elements = + Kokkos::Experimental::distance(first_from, last_from); + + ::Kokkos::parallel_scan( + TeamThreadRange(teamHandle, 0, num_elements), + func_type(first_from, first_dest, binary_op, unary_op_type())); + teamHandle.team_barrier(); + + return first_dest + num_elements; +} + +// ------------------------------------------------------------- +// inclusive_scan_custom_binary_op_impl with init_value +// ------------------------------------------------------------- +template +KOKKOS_FUNCTION OutputIteratorType inclusive_scan_custom_binary_op_team_impl( + const TeamHandleType& teamHandle, InputIteratorType first_from, + InputIteratorType last_from, OutputIteratorType first_dest, + BinaryOpType binary_op, ValueType init_value) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first_from, + first_dest); + Impl::static_assert_iterators_have_matching_difference_type(first_from, + first_dest); + Impl::expect_valid_range(first_from, last_from); + + static_assert( + ::Kokkos::is_detected_v, + "At the moment inclusive_scan doesn't support types without reduction " + "identity"); + + // #if defined(KOKKOS_ENABLE_CUDA) + + // aliases + using exe_space = typename TeamHandleType::execution_space; + using unary_op_type = StdNumericScanIdentityReferenceUnaryFunctor; + using func_type = TeamTransformInclusiveScanWithInitValueFunctor< + exe_space, ValueType, InputIteratorType, OutputIteratorType, BinaryOpType, + unary_op_type>; + + // run + const auto num_elements = + Kokkos::Experimental::distance(first_from, last_from); + ::Kokkos::parallel_scan(TeamThreadRange(teamHandle, 0, num_elements), + func_type(first_from, first_dest, binary_op, + unary_op_type(), std::move(init_value))); + teamHandle.team_barrier(); + + // return + return first_dest + num_elements; +} + } // namespace Impl } // namespace Experimental } // namespace Kokkos diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_IsPartitioned.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_IsPartitioned.hpp index 0fe2d246ff..281efca36b 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_IsPartitioned.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_IsPartitioned.hpp @@ -62,9 +62,9 @@ struct StdIsPartitionedFunctor { }; template -bool is_partitioned_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType first, IteratorType last, - PredicateType pred) { +bool is_partitioned_exespace_impl(const std::string& label, + const ExecutionSpace& ex, IteratorType first, + IteratorType last, PredicateType pred) { // true if all elements in the range [first, last) that satisfy // the predicate "pred" appear before all elements that don't. // Also returns true if [first, last) is empty. @@ -97,6 +97,7 @@ bool is_partitioned_impl(const std::string& label, const ExecutionSpace& ex, const auto num_elements = Kokkos::Experimental::distance(first, last); ::Kokkos::parallel_reduce(label, RangePolicy(ex, 0, num_elements), + func_t(first, reducer, pred), reducer); // fence not needed because reducing into scalar @@ -109,8 +110,72 @@ bool is_partitioned_impl(const std::string& label, const ExecutionSpace& ex, if (red_result.max_loc_true != red_id_max && red_result.min_loc_false != red_id_min) { + // this occurs when the reduction yields nontrivial values return red_result.max_loc_true < red_result.min_loc_false; + } else if (red_result.max_loc_true == red_id_max && + red_result.min_loc_false == 0) { + // this occurs when all values do NOT satisfy + // the predicate, and this corner case should also be true + return true; } else if (first + red_result.max_loc_true == --last) { + // this occurs when all values satisfy the predicate, + // this corner case should also be true + return true; + } else { + return false; + } +} + +template +KOKKOS_FUNCTION bool is_partitioned_team_impl(const TeamHandleType& teamHandle, + IteratorType first, + IteratorType last, + PredicateType pred) { + /* see exespace impl for the description of the impl */ + + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first); + Impl::expect_valid_range(first, last); + + // trivial case + if (first == last) { + return true; + } + + // aliases + using index_type = typename IteratorType::difference_type; + using reducer_type = StdIsPartitioned; + using reduction_value_type = typename reducer_type::value_type; + using func_t = + StdIsPartitionedFunctor; + + // run + reduction_value_type red_result; + reducer_type reducer(red_result); + const auto num_elements = Kokkos::Experimental::distance(first, last); + ::Kokkos::parallel_reduce(TeamThreadRange(teamHandle, 0, num_elements), + func_t(first, reducer, pred), reducer); + + // fence not needed because reducing into scalar + + // decide and return + constexpr index_type red_id_min = + ::Kokkos::reduction_identity::min(); + constexpr index_type red_id_max = + ::Kokkos::reduction_identity::max(); + + if (red_result.max_loc_true != red_id_max && + red_result.min_loc_false != red_id_min) { + // this occurs when the reduction yields nontrivial values + return red_result.max_loc_true < red_result.min_loc_false; + } else if (red_result.max_loc_true == red_id_max && + red_result.min_loc_false == 0) { + // this occurs when all values do NOT satisfy + // the predicate, and this corner case should also be true + return true; + } else if (first + red_result.max_loc_true == --last) { + // this occurs when all values satisfy the predicate, + // this corner case should also be true return true; } else { return false; diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_IsSorted.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_IsSorted.hpp index 4696821586..b2c912848a 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_IsSorted.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_IsSorted.hpp @@ -48,10 +48,13 @@ struct StdIsSortedFunctor { : m_first(std::move(_first1)), m_comparator(std::move(comparator)) {} }; +// +// exespace impl +// template -bool is_sorted_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType first, IteratorType last, - ComparatorType comp) { +bool is_sorted_exespace_impl(const std::string& label, const ExecutionSpace& ex, + IteratorType first, IteratorType last, + ComparatorType comp) { // checks Impl::static_assert_random_access_and_accessible(ex, first); Impl::expect_valid_range(first, last); @@ -75,11 +78,49 @@ bool is_sorted_impl(const std::string& label, const ExecutionSpace& ex, } template -bool is_sorted_impl(const std::string& label, const ExecutionSpace& ex, - IteratorType first, IteratorType last) { +bool is_sorted_exespace_impl(const std::string& label, const ExecutionSpace& ex, + IteratorType first, IteratorType last) { using value_type = typename IteratorType::value_type; using pred_t = Impl::StdAlgoLessThanBinaryPredicate; - return is_sorted_impl(label, ex, first, last, pred_t()); + return is_sorted_exespace_impl(label, ex, first, last, pred_t()); +} + +// +// team impl +// +template +KOKKOS_FUNCTION bool is_sorted_team_impl(const TeamHandleType& teamHandle, + IteratorType first, IteratorType last, + ComparatorType comp) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first); + Impl::expect_valid_range(first, last); + + const auto num_elements = Kokkos::Experimental::distance(first, last); + if (num_elements <= 1) { + return true; + } + + // use num_elements-1 because each index handles i and i+1 + const auto num_elements_minus_one = num_elements - 1; + + // result is incremented by one if sorting breaks at index i + std::size_t result = 0; + ::Kokkos::parallel_reduce( + TeamThreadRange(teamHandle, 0, num_elements_minus_one), + // use CTAD here + StdIsSortedFunctor(first, std::move(comp)), result); + + return result == 0; +} + +template +KOKKOS_FUNCTION bool is_sorted_team_impl(const TeamHandleType& teamHandle, + IteratorType first, + IteratorType last) { + using value_type = typename IteratorType::value_type; + using pred_t = Impl::StdAlgoLessThanBinaryPredicate; + return is_sorted_team_impl(teamHandle, first, last, pred_t()); } } // namespace Impl diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_IsSortedUntil.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_IsSortedUntil.hpp index 2a0c112bf5..d33580ca53 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_IsSortedUntil.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_IsSortedUntil.hpp @@ -54,10 +54,15 @@ struct StdIsSortedUntilFunctor { m_reducer(std::move(reducer)) {} }; +// +// overloads accepting exespace +// template -IteratorType is_sorted_until_impl(const std::string& label, - const ExecutionSpace& ex, IteratorType first, - IteratorType last, ComparatorType comp) { +IteratorType is_sorted_until_exespace_impl(const std::string& label, + const ExecutionSpace& ex, + IteratorType first, + IteratorType last, + ComparatorType comp) { // checks Impl::static_assert_random_access_and_accessible(ex, first); Impl::expect_valid_range(first, last); @@ -81,7 +86,6 @@ IteratorType is_sorted_until_impl(const std::string& label, label, // use num_elements-1 because each index handles i and i+1 RangePolicy(ex, 0, num_elements - 1), - // use CTAD StdIsSortedUntilFunctor(first, comp, reducer), reducer); /* If the reduction result is equal to the initial value, @@ -98,12 +102,66 @@ IteratorType is_sorted_until_impl(const std::string& label, } template -IteratorType is_sorted_until_impl(const std::string& label, - const ExecutionSpace& ex, IteratorType first, - IteratorType last) { +IteratorType is_sorted_until_exespace_impl(const std::string& label, + const ExecutionSpace& ex, + IteratorType first, + IteratorType last) { using value_type = typename IteratorType::value_type; using pred_t = Impl::StdAlgoLessThanBinaryPredicate; - return is_sorted_until_impl(label, ex, first, last, pred_t()); + return is_sorted_until_exespace_impl(label, ex, first, last, pred_t()); +} + +// +// overloads accepting team handle +// +template +KOKKOS_FUNCTION IteratorType +is_sorted_until_team_impl(const ExecutionSpace& teamHandle, IteratorType first, + IteratorType last, ComparatorType comp) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first); + Impl::expect_valid_range(first, last); + + const auto num_elements = Kokkos::Experimental::distance(first, last); + + // trivial case + if (num_elements <= 1) { + return last; + } + + /* + Do a par_reduce computing the *min* index that breaks the sorting. + If one such index is found, then the range is sorted until that element, + if no such index is found, then it means the range is sorted until the end. + */ + using index_type = typename IteratorType::difference_type; + index_type red_result; + index_type red_result_init; + ::Kokkos::Min reducer(red_result); + reducer.init(red_result_init); + ::Kokkos::parallel_reduce( // use num_elements-1 because each index handles i + // and i+1 + TeamThreadRange(teamHandle, 0, num_elements - 1), + StdIsSortedUntilFunctor(first, comp, reducer), reducer); + teamHandle.team_barrier(); + + /* If the reduction result is equal to the initial value, + and it means the range is sorted until the end */ + if (red_result == red_result_init) { + return last; + } else { + /* If such index is found, then the range is sorted until there and + we need to return an iterator past the element found so do +1 */ + return first + (red_result + 1); + } +} + +template +KOKKOS_FUNCTION IteratorType is_sorted_until_team_impl( + const ExecutionSpace& teamHandle, IteratorType first, IteratorType last) { + using value_type = typename IteratorType::value_type; + using pred_t = Impl::StdAlgoLessThanBinaryPredicate; + return is_sorted_until_team_impl(teamHandle, first, last, pred_t()); } } // namespace Impl diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_LexicographicalCompare.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_LexicographicalCompare.hpp index ad7f59232e..b95a66c3bd 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_LexicographicalCompare.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_LexicographicalCompare.hpp @@ -84,13 +84,15 @@ struct StdLexicographicalCompareFunctor { m_comparator(std::move(_comp)) {} }; +// +// exespace impl +// template -bool lexicographical_compare_impl(const std::string& label, - const ExecutionSpace& ex, - IteratorType1 first1, IteratorType1 last1, - IteratorType2 first2, IteratorType2 last2, - ComparatorType comp) { +bool lexicographical_compare_exespace_impl( + const std::string& label, const ExecutionSpace& ex, IteratorType1 first1, + IteratorType1 last1, IteratorType2 first2, IteratorType2 last2, + ComparatorType comp) { // checks Impl::static_assert_random_access_and_accessible(ex, first1, first2); Impl::static_assert_iterators_have_matching_difference_type(first1, first2); @@ -139,16 +141,84 @@ bool lexicographical_compare_impl(const std::string& label, } template -bool lexicographical_compare_impl(const std::string& label, - const ExecutionSpace& ex, - IteratorType1 first1, IteratorType1 last1, - IteratorType2 first2, IteratorType2 last2) { +bool lexicographical_compare_exespace_impl( + const std::string& label, const ExecutionSpace& ex, IteratorType1 first1, + IteratorType1 last1, IteratorType2 first2, IteratorType2 last2) { using value_type_1 = typename IteratorType1::value_type; using value_type_2 = typename IteratorType2::value_type; using predicate_t = Impl::StdAlgoLessThanBinaryPredicate; - return lexicographical_compare_impl(label, ex, first1, last1, first2, last2, - predicate_t()); + return lexicographical_compare_exespace_impl(label, ex, first1, last1, first2, + last2, predicate_t()); +} + +// +// team impl +// +template +KOKKOS_FUNCTION bool lexicographical_compare_team_impl( + const TeamHandleType& teamHandle, IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, IteratorType2 last2, ComparatorType comp) { + // checks + Impl::static_assert_random_access_and_accessible(teamHandle, first1, first2); + Impl::static_assert_iterators_have_matching_difference_type(first1, first2); + Impl::expect_valid_range(first1, last1); + Impl::expect_valid_range(first2, last2); + + // aliases + using index_type = typename IteratorType1::difference_type; + using reducer_type = FirstLoc; + using reduction_value_type = typename reducer_type::value_type; + + // run + const auto d1 = Kokkos::Experimental::distance(first1, last1); + const auto d2 = Kokkos::Experimental::distance(first2, last2); + const auto range = Kokkos::min(d1, d2); + reduction_value_type red_result; + reducer_type reducer(red_result); + using func1_t = + StdLexicographicalCompareFunctor; + + ::Kokkos::parallel_reduce(TeamThreadRange(teamHandle, 0, range), + func1_t(first1, first2, reducer, comp), reducer); + + teamHandle.team_barrier(); + + // no mismatch + if (red_result.min_loc_true == + ::Kokkos::reduction_identity::min()) { + auto new_last1 = first1 + range; + auto new_last2 = first2 + range; + bool is_prefix = (new_last1 == last1) && (new_last2 != last2); + return is_prefix; + } + + // check mismatched + int less = 0; + auto it1 = first1 + red_result.min_loc_true; + auto it2 = first2 + red_result.min_loc_true; + using func2_t = StdCompareFunctor; + ::Kokkos::parallel_reduce(TeamThreadRange(teamHandle, 0, 1), + func2_t(it1, it2, comp), less); + + teamHandle.team_barrier(); + + return static_cast(less); +} + +template +KOKKOS_FUNCTION bool lexicographical_compare_team_impl( + const TeamHandleType& teamHandle, IteratorType1 first1, IteratorType1 last1, + IteratorType2 first2, IteratorType2 last2) { + using value_type_1 = typename IteratorType1::value_type; + using value_type_2 = typename IteratorType2::value_type; + using predicate_t = + Impl::StdAlgoLessThanBinaryPredicate; + return lexicographical_compare_team_impl(teamHandle, first1, last1, first2, + last2, predicate_t()); } } // namespace Impl diff --git a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_MinMaxMinmaxElement.hpp b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_MinMaxMinmaxElement.hpp index 048420f7a8..2f51db03b4 100644 --- a/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_MinMaxMinmaxElement.hpp +++ b/lib/kokkos/algorithms/src/std_algorithms/impl/Kokkos_MinMaxMinmaxElement.hpp @@ -63,12 +63,16 @@ struct StdMinMaxElemFunctor { : m_first(std::move(first)), m_reducer(std::move(reducer)) {} }; +// +// exespace impl +// template