diff --git a/src/special.cpp b/src/special.cpp index 420a8388a..d2d1858cd 100644 --- a/src/special.cpp +++ b/src/special.cpp @@ -1,1121 +1,1129 @@ /* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator http://lammps.sandia.gov, Sandia National Laboratories Steve Plimpton, sjplimp@sandia.gov Copyright (2003) Sandia Corporation. Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains certain rights in this software. This software is distributed under the GNU General Public License. See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ #include "mpi.h" #include "stdio.h" #include "special.h" #include "atom.h" #include "atom_vec.h" #include "force.h" #include "comm.h" #include "accelerator_kokkos.h" #include "memory.h" #include "error.h" using namespace LAMMPS_NS; // allocate space for static class variable Special *Special::sptr; /* ---------------------------------------------------------------------- */ Special::Special(LAMMPS *lmp) : Pointers(lmp) { MPI_Comm_rank(world,&me); MPI_Comm_size(world,&nprocs); onetwo = onethree = onefour = NULL; } /* ---------------------------------------------------------------------- */ Special::~Special() { memory->destroy(onetwo); memory->destroy(onethree); memory->destroy(onefour); } /* ---------------------------------------------------------------------- create 1-2, 1-3, 1-4 lists of topology neighbors store in onetwo, onethree, onefour for each atom store 3 counters in nspecial[i] ------------------------------------------------------------------------- */ void Special::build() { int i,j,k,size; int max,maxall,nbuf; tagint *buf; MPI_Barrier(world); int nlocal = atom->nlocal; tagint *tag = atom->tag; int *num_bond = atom->num_bond; tagint **bond_atom = atom->bond_atom; int **nspecial = atom->nspecial; - if (me == 0 && screen) fprintf(screen,"Finding 1-2 1-3 1-4 neighbors ...\n"); + if (me == 0 && screen) { + const double * const special_lj = force->special_lj; + const double * const special_coul = force->special_coul; + fprintf(screen,"Finding 1-2 1-3 1-4 neighbors ...\n" + " Factors LJ: %-10g %-10g %-10g\n" + " Factors Coul: %-10g %-10g %-10g\n", + special_lj[1],special_lj[2],special_lj[3], + special_coul[1],special_coul[2],special_coul[3]); + } // initialize nspecial counters to 0 for (i = 0; i < nlocal; i++) { nspecial[i][0] = 0; nspecial[i][1] = 0; nspecial[i][2] = 0; } // ----------------------------------------------------- // compute nspecial[i][0] = # of 1-2 neighbors of atom i // ----------------------------------------------------- // bond partners stored by atom itself for (i = 0; i < nlocal; i++) nspecial[i][0] = num_bond[i]; // if newton_bond off, then done // else only counted 1/2 of all bonds, so count other half if (force->newton_bond) { // nbufmax = largest buffer needed to hold info from any proc // info for each atom = global tag of 2nd atom in each bond nbuf = 0; for (i = 0; i < nlocal; i++) nbuf += num_bond[i]; memory->create(buf,nbuf,"special:buf"); // fill buffer with global tags of bond partners of my atoms size = 0; for (i = 0; i < nlocal; i++) for (j = 0; j < num_bond[i]; j++) buf[size++] = bond_atom[i][j]; // cycle buffer around ring of procs back to self // when receive buffer, scan tags for atoms I own // when find one, increment nspecial count for that atom sptr = this; comm->ring(size,sizeof(tagint),buf,1,ring_one,NULL); memory->destroy(buf); } // ---------------------------------------------------- // create onetwo[i] = list of 1-2 neighbors for atom i // ---------------------------------------------------- max = 0; for (i = 0; i < nlocal; i++) max = MAX(max,nspecial[i][0]); MPI_Allreduce(&max,&maxall,1,MPI_INT,MPI_MAX,world); if (me == 0) { if (screen) fprintf(screen," %d = max # of 1-2 neighbors\n",maxall); if (logfile) fprintf(logfile," %d = max # of 1-2 neighbors\n",maxall); } memory->create(onetwo,nlocal,maxall,"special:onetwo"); // count = accumulating counter memory->create(count,nlocal,"special:count"); for (i = 0; i < nlocal; i++) count[i] = 0; // add bond partners stored by atom to onetwo list for (i = 0; i < nlocal; i++) for (j = 0; j < num_bond[i]; j++) onetwo[i][count[i]++] = bond_atom[i][j]; // if newton_bond off, then done // else only stored 1/2 of all bonds, so store other half if (force->newton_bond) { // nbufmax = largest buffer needed to hold info from any proc // info for each atom = 2 global tags in each bond nbuf = 0; for (i = 0; i < nlocal; i++) nbuf += 2*num_bond[i]; memory->create(buf,nbuf,"special:buf"); // fill buffer with global tags of both atoms in bond size = 0; for (i = 0; i < nlocal; i++) for (j = 0; j < num_bond[i]; j++) { buf[size++] = tag[i]; buf[size++] = bond_atom[i][j]; } // cycle buffer around ring of procs back to self // when receive buffer, scan 2nd-atom tags for atoms I own // when find one, add 1st-atom tag to onetwo list for 2nd atom sptr = this; comm->ring(size,sizeof(tagint),buf,2,ring_two,NULL); memory->destroy(buf); } memory->destroy(count); // ----------------------------------------------------- // done if special_bond weights for 1-3, 1-4 are set to 1.0 // ----------------------------------------------------- if (force->special_lj[2] == 1.0 && force->special_coul[2] == 1.0 && force->special_lj[3] == 1.0 && force->special_coul[3] == 1.0) { dedup(); combine(); return; } // ----------------------------------------------------- // compute nspecial[i][1] = # of 1-3 neighbors of atom i // ----------------------------------------------------- // nbufmax = largest buffer needed to hold info from any proc // info for each atom = 2 scalars + list of 1-2 neighbors nbuf = 0; for (i = 0; i < nlocal; i++) nbuf += 2 + nspecial[i][0]; memory->create(buf,nbuf,"special:buf"); // fill buffer with: // (1) = counter for 1-3 neighbors, initialized to 0 // (2) = # of 1-2 neighbors // (3:N) = list of 1-2 neighbors size = 0; for (i = 0; i < nlocal; i++) { buf[size++] = 0; buf[size++] = nspecial[i][0]; for (j = 0; j < nspecial[i][0]; j++) buf[size++] = onetwo[i][j]; } // cycle buffer around ring of procs back to self // when receive buffer, scan list of 1-2 neighbors for atoms I own // when find one, increment 1-3 count by # of 1-2 neighbors of my atom, // subtracting one since my list will contain original atom sptr = this; comm->ring(size,sizeof(tagint),buf,3,ring_three,buf); // extract count from buffer that has cycled back to me // nspecial[i][1] = # of 1-3 neighbors of atom i j = 0; for (i = 0; i < nlocal; i++) { nspecial[i][1] = buf[j]; j += 2 + nspecial[i][0]; } memory->destroy(buf); // ---------------------------------------------------- // create onethree[i] = list of 1-3 neighbors for atom i // ---------------------------------------------------- max = 0; for (i = 0; i < nlocal; i++) max = MAX(max,nspecial[i][1]); MPI_Allreduce(&max,&maxall,1,MPI_INT,MPI_MAX,world); if (me == 0) { if (screen) fprintf(screen," %d = max # of 1-3 neighbors\n",maxall); if (logfile) fprintf(logfile," %d = max # of 1-3 neighbors\n",maxall); } memory->create(onethree,nlocal,maxall,"special:onethree"); // nbufmax = largest buffer needed to hold info from any proc // info for each atom = 4 scalars + list of 1-2 neighs + list of 1-3 neighs nbuf = 0; for (i = 0; i < nlocal; i++) nbuf += 4 + nspecial[i][0] + nspecial[i][1]; memory->create(buf,nbuf,"special:buf"); // fill buffer with: // (1) = global tag of original atom // (2) = # of 1-2 neighbors // (3) = # of 1-3 neighbors // (4) = counter for 1-3 neighbors, initialized to 0 // (5:N) = list of 1-2 neighbors // (N+1:2N) space for list of 1-3 neighbors size = 0; for (i = 0; i < nlocal; i++) { buf[size++] = tag[i]; buf[size++] = nspecial[i][0]; buf[size++] = nspecial[i][1]; buf[size++] = 0; for (j = 0; j < nspecial[i][0]; j++) buf[size++] = onetwo[i][j]; size += nspecial[i][1]; } // cycle buffer around ring of procs back to self // when receive buffer, scan list of 1-2 neighbors for atoms I own // when find one, add its neighbors to 1-3 list // increment the count in buf(i+4) // exclude the atom whose tag = original // this process may include duplicates but they will be culled later sptr = this; comm->ring(size,sizeof(tagint),buf,4,ring_four,buf); // fill onethree with buffer values that have been returned to me // sanity check: accumulated buf[i+3] count should equal // nspecial[i][1] for each atom j = 0; for (i = 0; i < nlocal; i++) { if (buf[j+3] != nspecial[i][1]) error->one(FLERR,"1-3 bond count is inconsistent"); j += 4 + nspecial[i][0]; for (k = 0; k < nspecial[i][1]; k++) onethree[i][k] = buf[j++]; } memory->destroy(buf); // done if special_bond weights for 1-4 are set to 1.0 if (force->special_lj[3] == 1.0 && force->special_coul[3] == 1.0) { dedup(); if (force->special_angle) angle_trim(); combine(); return; } // ----------------------------------------------------- // compute nspecial[i][2] = # of 1-4 neighbors of atom i // ----------------------------------------------------- // nbufmax = largest buffer needed to hold info from any proc // info for each atom = 2 scalars + list of 1-3 neighbors nbuf = 0; for (i = 0; i < nlocal; i++) nbuf += 2 + nspecial[i][1]; memory->create(buf,nbuf,"special:buf"); // fill buffer with: // (1) = counter for 1-4 neighbors, initialized to 0 // (2) = # of 1-3 neighbors // (3:N) = list of 1-3 neighbors size = 0; for (i = 0; i < nlocal; i++) { buf[size++] = 0; buf[size++] = nspecial[i][1]; for (j = 0; j < nspecial[i][1]; j++) buf[size++] = onethree[i][j]; } // cycle buffer around ring of procs back to self // when receive buffer, scan list of 1-3 neighbors for atoms I own // when find one, increment 1-4 count by # of 1-2 neighbors of my atom // may include duplicates and original atom but they will be culled later sptr = this; comm->ring(size,sizeof(tagint),buf,5,ring_five,buf); // extract count from buffer that has cycled back to me // nspecial[i][2] = # of 1-4 neighbors of atom i j = 0; for (i = 0; i < nlocal; i++) { nspecial[i][2] = buf[j]; j += 2 + nspecial[i][1]; } memory->destroy(buf); // ---------------------------------------------------- // create onefour[i] = list of 1-4 neighbors for atom i // ---------------------------------------------------- max = 0; for (i = 0; i < nlocal; i++) max = MAX(max,nspecial[i][2]); MPI_Allreduce(&max,&maxall,1,MPI_INT,MPI_MAX,world); if (me == 0) { if (screen) fprintf(screen," %d = max # of 1-4 neighbors\n",maxall); if (logfile) fprintf(logfile," %d = max # of 1-4 neighbors\n",maxall); } memory->create(onefour,nlocal,maxall,"special:onefour"); // nbufmax = largest buffer needed to hold info from any proc // info for each atom = 3 scalars + list of 1-3 neighs + list of 1-4 neighs nbuf = 0; for (i = 0; i < nlocal; i++) nbuf += 3 + nspecial[i][1] + nspecial[i][2]; memory->create(buf,nbuf,"special:buf"); // fill buffer with: // (1) = # of 1-3 neighbors // (2) = # of 1-4 neighbors // (3) = counter for 1-4 neighbors, initialized to 0 // (4:N) = list of 1-3 neighbors // (N+1:2N) space for list of 1-4 neighbors size = 0; for (i = 0; i < nlocal; i++) { buf[size++] = nspecial[i][1]; buf[size++] = nspecial[i][2]; buf[size++] = 0; for (j = 0; j < nspecial[i][1]; j++) buf[size++] = onethree[i][j]; size += nspecial[i][2]; } // cycle buffer around ring of procs back to self // when receive buffer, scan list of 1-3 neighbors for atoms I own // when find one, add its neighbors to 1-4 list // incrementing the count in buf(i+4) // this process may include duplicates but they will be culled later sptr = this; comm->ring(size,sizeof(tagint),buf,6,ring_six,buf); // fill onefour with buffer values that have been returned to me // sanity check: accumulated buf[i+2] count should equal // nspecial[i][2] for each atom j = 0; for (i = 0; i < nlocal; i++) { if (buf[j+2] != nspecial[i][2]) error->one(FLERR,"1-4 bond count is inconsistent"); j += 3 + nspecial[i][1]; for (k = 0; k < nspecial[i][2]; k++) onefour[i][k] = buf[j++]; } memory->destroy(buf); dedup(); if (force->special_angle) angle_trim(); if (force->special_dihedral) dihedral_trim(); combine(); } /* ---------------------------------------------------------------------- remove duplicates within each of onetwo, onethree, onefour individually ------------------------------------------------------------------------- */ void Special::dedup() { int i,j; tagint m; // clear map so it can be used as scratch space atom->map_clear(); // use map to cull duplicates // exclude original atom explicitly // adjust onetwo, onethree, onefour values to reflect removed duplicates // must unset map for each atom int **nspecial = atom->nspecial; tagint *tag = atom->tag; int nlocal = atom->nlocal; int unique; for (i = 0; i < nlocal; i++) { unique = 0; atom->map_one(tag[i],0); for (j = 0; j < nspecial[i][0]; j++) { m = onetwo[i][j]; if (atom->map(m) < 0) { onetwo[i][unique++] = m; atom->map_one(m,0); } } nspecial[i][0] = unique; atom->map_one(tag[i],-1); for (j = 0; j < unique; j++) atom->map_one(onetwo[i][j],-1); } for (i = 0; i < nlocal; i++) { unique = 0; atom->map_one(tag[i],0); for (j = 0; j < nspecial[i][1]; j++) { m = onethree[i][j]; if (atom->map(m) < 0) { onethree[i][unique++] = m; atom->map_one(m,0); } } nspecial[i][1] = unique; atom->map_one(tag[i],-1); for (j = 0; j < unique; j++) atom->map_one(onethree[i][j],-1); } for (i = 0; i < nlocal; i++) { unique = 0; atom->map_one(tag[i],0); for (j = 0; j < nspecial[i][2]; j++) { m = onefour[i][j]; if (atom->map(m) < 0) { onefour[i][unique++] = m; atom->map_one(m,0); } } nspecial[i][2] = unique; atom->map_one(tag[i],-1); for (j = 0; j < unique; j++) atom->map_one(onefour[i][j],-1); } // re-create map atom->nghost = 0; atom->map_set(); } /* ---------------------------------------------------------------------- concatenate onetwo, onethree, onefour into master atom->special list remove duplicates between 3 lists, leave dup in first list it appears in convert nspecial[0], nspecial[1], nspecial[2] into cumulative counters ------------------------------------------------------------------------- */ void Special::combine() { int i,j; tagint m; int me; MPI_Comm_rank(world,&me); int **nspecial = atom->nspecial; tagint *tag = atom->tag; int nlocal = atom->nlocal; // ---------------------------------------------------- // compute culled maxspecial = max # of special neighs of any atom // ---------------------------------------------------- // clear map so it can be used as scratch space atom->map_clear(); // unique = # of unique nspecial neighbors of one atom // cull duplicates using map to check for them // exclude original atom explicitly // must unset map for each atom int unique; int maxspecial = 0; for (i = 0; i < nlocal; i++) { unique = 0; atom->map_one(tag[i],0); for (j = 0; j < nspecial[i][0]; j++) { m = onetwo[i][j]; if (atom->map(m) < 0) { unique++; atom->map_one(m,0); } } for (j = 0; j < nspecial[i][1]; j++) { m = onethree[i][j]; if (atom->map(m) < 0) { unique++; atom->map_one(m,0); } } for (j = 0; j < nspecial[i][2]; j++) { m = onefour[i][j]; if (atom->map(m) < 0) { unique++; atom->map_one(m,0); } } maxspecial = MAX(maxspecial,unique); atom->map_one(tag[i],-1); for (j = 0; j < nspecial[i][0]; j++) atom->map_one(onetwo[i][j],-1); for (j = 0; j < nspecial[i][1]; j++) atom->map_one(onethree[i][j],-1); for (j = 0; j < nspecial[i][2]; j++) atom->map_one(onefour[i][j],-1); } // compute global maxspecial, must be at least 1 // add in extra factor from special_bonds command // allocate correct special array with same nmax, new maxspecial // previously allocated one must be destroyed // must make AtomVec class update its ptr to special MPI_Allreduce(&maxspecial,&atom->maxspecial,1,MPI_INT,MPI_MAX,world); atom->maxspecial += force->special_extra; atom->maxspecial = MAX(atom->maxspecial,1); if (me == 0) { if (screen) fprintf(screen," %d = max # of special neighbors\n",atom->maxspecial); if (logfile) fprintf(logfile," %d = max # of special neighbors\n",atom->maxspecial); } if (lmp->kokkos) { AtomKokkos* atomKK = (AtomKokkos*) atom; memory->grow_kokkos(atomKK->k_special,atom->special, atom->nmax,atom->maxspecial,"atom:special"); } else { memory->destroy(atom->special); memory->create(atom->special,atom->nmax,atom->maxspecial,"atom:special"); } atom->avec->grow_reset(); tagint **special = atom->special; // ---------------------------------------------------- // fill special array with 1-2, 1-3, 1-4 neighs for each atom // ---------------------------------------------------- // again use map to cull duplicates // exclude original atom explicitly // adjust nspecial[i] values to reflect removed duplicates // nspecial[i][1] and nspecial[i][2] now become cumulative counters for (i = 0; i < nlocal; i++) { unique = 0; atom->map_one(tag[i],0); for (j = 0; j < nspecial[i][0]; j++) { m = onetwo[i][j]; if (atom->map(m) < 0) { special[i][unique++] = m; atom->map_one(m,0); } } nspecial[i][0] = unique; for (j = 0; j < nspecial[i][1]; j++) { m = onethree[i][j]; if (atom->map(m) < 0) { special[i][unique++] = m; atom->map_one(m,0); } } nspecial[i][1] = unique; for (j = 0; j < nspecial[i][2]; j++) { m = onefour[i][j]; if (atom->map(m) < 0) { special[i][unique++] = m; atom->map_one(m,0); } } nspecial[i][2] = unique; atom->map_one(tag[i],-1); for (j = 0; j < nspecial[i][2]; j++) atom->map_one(special[i][j],-1); } // re-create map atom->nghost = 0; atom->map_set(); } /* ---------------------------------------------------------------------- trim list of 1-3 neighbors by checking defined angles delete a 1-3 neigh if they are not end atoms of a defined angle and if they are not 1,3 or 2,4 atoms of a defined dihedral ------------------------------------------------------------------------- */ void Special::angle_trim() { int i,j,m,n; int *num_angle = atom->num_angle; int *num_dihedral = atom->num_dihedral; tagint **angle_atom1 = atom->angle_atom1; tagint **angle_atom3 = atom->angle_atom3; tagint **dihedral_atom1 = atom->dihedral_atom1; tagint **dihedral_atom2 = atom->dihedral_atom2; tagint **dihedral_atom3 = atom->dihedral_atom3; tagint **dihedral_atom4 = atom->dihedral_atom4; int **nspecial = atom->nspecial; int nlocal = atom->nlocal; // stats on old 1-3 neighbor counts double onethreecount = 0.0; for (i = 0; i < nlocal; i++) onethreecount += nspecial[i][1]; double allcount; MPI_Allreduce(&onethreecount,&allcount,1,MPI_DOUBLE,MPI_SUM,world); if (me == 0) { if (screen) fprintf(screen, " %g = # of 1-3 neighbors before angle trim\n",allcount); if (logfile) fprintf(logfile, " %g = # of 1-3 neighbors before angle trim\n",allcount); } // if angles or dihedrals are defined, // flag each 1-3 neigh if it appears in an angle or dihedral if ((num_angle && atom->nangles) || (num_dihedral && atom->ndihedrals)) { // dflag = flag for 1-3 neighs of all owned atoms int maxcount = 0; for (i = 0; i < nlocal; i++) maxcount = MAX(maxcount,nspecial[i][1]); memory->create(dflag,nlocal,maxcount,"special::dflag"); for (i = 0; i < nlocal; i++) { n = nspecial[i][1]; for (j = 0; j < n; j++) dflag[i][j] = 0; } // nbufmax = largest buffer needed to hold info from any proc // info for each atom = list of 1,3 atoms in each angle stored by atom // and list of 1,3 and 2,4 atoms in each dihedral stored by atom int nbuf = 0; for (i = 0; i < nlocal; i++) { if (num_angle && atom->nangles) nbuf += 2*num_angle[i]; if (num_dihedral && atom->ndihedrals) nbuf += 2*2*num_dihedral[i]; } int *buf; memory->create(buf,nbuf,"special:buf"); // fill buffer with list of 1,3 atoms in each angle // and with list of 1,3 and 2,4 atoms in each dihedral int size = 0; if (num_angle && atom->nangles) for (i = 0; i < nlocal; i++) for (j = 0; j < num_angle[i]; j++) { buf[size++] = angle_atom1[i][j]; buf[size++] = angle_atom3[i][j]; } if (num_dihedral && atom->ndihedrals) for (i = 0; i < nlocal; i++) for (j = 0; j < num_dihedral[i]; j++) { buf[size++] = dihedral_atom1[i][j]; buf[size++] = dihedral_atom3[i][j]; buf[size++] = dihedral_atom2[i][j]; buf[size++] = dihedral_atom4[i][j]; } // cycle buffer around ring of procs back to self // when receive buffer, scan list of 1,3 atoms looking for atoms I own // when find one, scan its 1-3 neigh list and mark I,J as in an angle sptr = this; comm->ring(size,sizeof(tagint),buf,7,ring_seven,NULL); // delete 1-3 neighbors if they are not flagged in dflag for (i = 0; i < nlocal; i++) { m = 0; for (j = 0; j < nspecial[i][1]; j++) if (dflag[i][j]) onethree[i][m++] = onethree[i][j]; nspecial[i][1] = m; } // clean up memory->destroy(dflag); memory->destroy(buf); // if no angles or dihedrals are defined, delete all 1-3 neighs } else { for (i = 0; i < nlocal; i++) nspecial[i][1] = 0; } // stats on new 1-3 neighbor counts onethreecount = 0.0; for (i = 0; i < nlocal; i++) onethreecount += nspecial[i][1]; MPI_Allreduce(&onethreecount,&allcount,1,MPI_DOUBLE,MPI_SUM,world); if (me == 0) { if (screen) fprintf(screen, " %g = # of 1-3 neighbors after angle trim\n",allcount); if (logfile) fprintf(logfile, " %g = # of 1-3 neighbors after angle trim\n",allcount); } } /* ---------------------------------------------------------------------- trim list of 1-4 neighbors by checking defined dihedrals delete a 1-4 neigh if they are not end atoms of a defined dihedral ------------------------------------------------------------------------- */ void Special::dihedral_trim() { int i,j,m,n; int *num_dihedral = atom->num_dihedral; tagint **dihedral_atom1 = atom->dihedral_atom1; tagint **dihedral_atom4 = atom->dihedral_atom4; int **nspecial = atom->nspecial; int nlocal = atom->nlocal; // stats on old 1-4 neighbor counts double onefourcount = 0.0; for (i = 0; i < nlocal; i++) onefourcount += nspecial[i][2]; double allcount; MPI_Allreduce(&onefourcount,&allcount,1,MPI_DOUBLE,MPI_SUM,world); if (me == 0) { if (screen) fprintf(screen, " %g = # of 1-4 neighbors before dihedral trim\n",allcount); if (logfile) fprintf(logfile, " %g = # of 1-4 neighbors before dihedral trim\n",allcount); } // if dihedrals are defined, flag each 1-4 neigh if it appears in a dihedral if (num_dihedral && atom->ndihedrals) { // dflag = flag for 1-4 neighs of all owned atoms int maxcount = 0; for (i = 0; i < nlocal; i++) maxcount = MAX(maxcount,nspecial[i][2]); memory->create(dflag,nlocal,maxcount,"special::dflag"); for (i = 0; i < nlocal; i++) { n = nspecial[i][2]; for (j = 0; j < n; j++) dflag[i][j] = 0; } // nbufmax = largest buffer needed to hold info from any proc // info for each atom = list of 1,4 atoms in each dihedral stored by atom int nbuf = 0; for (i = 0; i < nlocal; i++) nbuf += 2*num_dihedral[i]; int *buf; memory->create(buf,nbuf,"special:buf"); // fill buffer with list of 1,4 atoms in each dihedral int size = 0; for (i = 0; i < nlocal; i++) for (j = 0; j < num_dihedral[i]; j++) { buf[size++] = dihedral_atom1[i][j]; buf[size++] = dihedral_atom4[i][j]; } // cycle buffer around ring of procs back to self // when receive buffer, scan list of 1,4 atoms looking for atoms I own // when find one, scan its 1-4 neigh list and mark I,J as in a dihedral sptr = this; comm->ring(size,sizeof(tagint),buf,8,ring_eight,NULL); // delete 1-4 neighbors if they are not flagged in dflag for (i = 0; i < nlocal; i++) { m = 0; for (j = 0; j < nspecial[i][2]; j++) if (dflag[i][j]) onefour[i][m++] = onefour[i][j]; nspecial[i][2] = m; } // clean up memory->destroy(dflag); memory->destroy(buf); // if no dihedrals are defined, delete all 1-4 neighs } else { for (i = 0; i < nlocal; i++) nspecial[i][2] = 0; } // stats on new 1-4 neighbor counts onefourcount = 0.0; for (i = 0; i < nlocal; i++) onefourcount += nspecial[i][2]; MPI_Allreduce(&onefourcount,&allcount,1,MPI_DOUBLE,MPI_SUM,world); if (me == 0) { if (screen) fprintf(screen, " %g = # of 1-4 neighbors after dihedral trim\n",allcount); if (logfile) fprintf(logfile, " %g = # of 1-4 neighbors after dihedral trim\n",allcount); } } /* ---------------------------------------------------------------------- when receive buffer, scan tags for atoms I own when find one, increment nspecial count for that atom ------------------------------------------------------------------------- */ void Special::ring_one(int ndatum, char *cbuf) { Atom *atom = sptr->atom; int **nspecial = atom->nspecial; int nlocal = atom->nlocal; tagint *buf = (tagint *) cbuf; int m; for (int i = 0; i < ndatum; i++) { m = atom->map(buf[i]); if (m >= 0 && m < nlocal) nspecial[m][0]++; } } /* ---------------------------------------------------------------------- when receive buffer, scan 2nd-atom tags for atoms I own when find one, add 1st-atom tag to onetwo list for 2nd atom ------------------------------------------------------------------------- */ void Special::ring_two(int ndatum, char *cbuf) { Atom *atom = sptr->atom; int nlocal = atom->nlocal; tagint **onetwo = sptr->onetwo; int *count = sptr->count; tagint *buf = (tagint *) cbuf; int m; for (int i = 1; i < ndatum; i += 2) { m = atom->map(buf[i]); if (m >= 0 && m < nlocal) onetwo[m][count[m]++] = buf[i-1]; } } /* ---------------------------------------------------------------------- when receive buffer, scan list of 1-2 neighbors for atoms I own when find one, increment 1-3 count by # of 1-2 neighbors of my atom, subtracting one since my list will contain original atom ------------------------------------------------------------------------- */ void Special::ring_three(int ndatum, char *cbuf) { Atom *atom = sptr->atom; int **nspecial = atom->nspecial; int nlocal = atom->nlocal; tagint *buf = (tagint *) cbuf; int i,j,m,n,num12; i = 0; while (i < ndatum) { n = buf[i]; num12 = buf[i+1]; for (j = 0; j < num12; j++) { m = atom->map(buf[i+2+j]); if (m >= 0 && m < nlocal) n += nspecial[m][0] - 1; } buf[i] = n; i += 2 + num12; } } /* ---------------------------------------------------------------------- when receive buffer, scan list of 1-2 neighbors for atoms I own when find one, add its neighbors to 1-3 list increment the count in buf(i+4) exclude the atom whose tag = original this process may include duplicates but they will be culled later ------------------------------------------------------------------------- */ void Special::ring_four(int ndatum, char *cbuf) { Atom *atom = sptr->atom; int **nspecial = atom->nspecial; int nlocal = atom->nlocal; tagint **onetwo = sptr->onetwo; tagint *buf = (tagint *) cbuf; tagint original; int i,j,k,m,n,num12,num13; i = 0; while (i < ndatum) { original = buf[i]; num12 = buf[i+1]; num13 = buf[i+2]; n = buf[i+3]; for (j = 0; j < num12; j++) { m = atom->map(buf[i+4+j]); if (m >= 0 && m < nlocal) for (k = 0; k < nspecial[m][0]; k++) if (onetwo[m][k] != original) buf[i+4+num12+(n++)] = onetwo[m][k]; } buf[i+3] = n; i += 4 + num12 + num13; } } /* ---------------------------------------------------------------------- when receive buffer, scan list of 1-3 neighbors for atoms I own when find one, increment 1-4 count by # of 1-2 neighbors of my atom may include duplicates and original atom but they will be culled later ------------------------------------------------------------------------- */ void Special::ring_five(int ndatum, char *cbuf) { Atom *atom = sptr->atom; int **nspecial = atom->nspecial; int nlocal = atom->nlocal; tagint *buf = (tagint *) cbuf; int i,j,m,n,num13; i = 0; while (i < ndatum) { n = buf[i]; num13 = buf[i+1]; for (j = 0; j < num13; j++) { m = atom->map(buf[i+2+j]); if (m >= 0 && m < nlocal) n += nspecial[m][0]; } buf[i] = n; i += 2 + num13; } } /* ---------------------------------------------------------------------- when receive buffer, scan list of 1-3 neighbors for atoms I own when find one, add its neighbors to 1-4 list incrementing the count in buf(i+4) this process may include duplicates but they will be culled later ------------------------------------------------------------------------- */ void Special::ring_six(int ndatum, char *cbuf) { Atom *atom = sptr->atom; int **nspecial = atom->nspecial; int nlocal = atom->nlocal; tagint **onetwo = sptr->onetwo; tagint *buf = (tagint *) cbuf; int i,j,k,m,n,num13,num14; i = 0; while (i < ndatum) { num13 = buf[i]; num14 = buf[i+1]; n = buf[i+2]; for (j = 0; j < num13; j++) { m = atom->map(buf[i+3+j]); if (m >= 0 && m < nlocal) for (k = 0; k < nspecial[m][0]; k++) buf[i+3+num13+(n++)] = onetwo[m][k]; } buf[i+2] = n; i += 3 + num13 + num14; } } /* ---------------------------------------------------------------------- when receive buffer, scan list of 1,3 atoms looking for atoms I own when find one, scan its 1-3 neigh list and mark I,J as in an angle ------------------------------------------------------------------------- */ void Special::ring_seven(int ndatum, char *cbuf) { Atom *atom = sptr->atom; int **nspecial = atom->nspecial; int nlocal = atom->nlocal; tagint **onethree = sptr->onethree; int **dflag = sptr->dflag; tagint *buf = (tagint *) cbuf; tagint iglobal,jglobal; int i,m,ilocal,jlocal; i = 0; while (i < ndatum) { iglobal = buf[i]; jglobal = buf[i+1]; ilocal = atom->map(iglobal); jlocal = atom->map(jglobal); if (ilocal >= 0 && ilocal < nlocal) for (m = 0; m < nspecial[ilocal][1]; m++) if (jglobal == onethree[ilocal][m]) { dflag[ilocal][m] = 1; break; } if (jlocal >= 0 && jlocal < nlocal) for (m = 0; m < nspecial[jlocal][1]; m++) if (iglobal == onethree[jlocal][m]) { dflag[jlocal][m] = 1; break; } i += 2; } } /* ---------------------------------------------------------------------- when receive buffer, scan list of 1,4 atoms looking for atoms I own when find one, scan its 1-4 neigh list and mark I,J as in a dihedral ------------------------------------------------------------------------- */ void Special::ring_eight(int ndatum, char *cbuf) { Atom *atom = sptr->atom; int **nspecial = atom->nspecial; int nlocal = atom->nlocal; tagint **onefour = sptr->onefour; int **dflag = sptr->dflag; tagint *buf = (tagint *) cbuf; tagint iglobal,jglobal; int i,m,ilocal,jlocal; i = 0; while (i < ndatum) { iglobal = buf[i]; jglobal = buf[i+1]; ilocal = atom->map(iglobal); jlocal = atom->map(jglobal); if (ilocal >= 0 && ilocal < nlocal) for (m = 0; m < nspecial[ilocal][2]; m++) if (jglobal == onefour[ilocal][m]) { dflag[ilocal][m] = 1; break; } if (jlocal >= 0 && jlocal < nlocal) for (m = 0; m < nspecial[jlocal][2]; m++) if (iglobal == onefour[jlocal][m]) { dflag[jlocal][m] = 1; break; } i += 2; } } diff --git a/test-respa/dual-special/data.bnzwbox b/test-respa/dual-special/data.bnzwbox new file mode 100644 index 000000000..407a414d1 --- /dev/null +++ b/test-respa/dual-special/data.bnzwbox @@ -0,0 +1,697 @@ +LAMMPS data file for default_name + +587 atoms +12 bonds +18 angles +30 dihedrals +0 impropers + +3 atom types +2 bond types +2 angle types +2 dihedral types + +-11.3621 18.0429 xlo xhi +-13.9039 16.0051 ylo yhi +-13.1983 16.7857 zlo zhi + +Masses + +1 12.01 +2 1.008 +3 18.015000 + +Bond Coeffs + +1 344.30000000000001 1.087 +2 478.39999999999998 1.387 + +Angle Coeffs + +1 48.460000000000001 120.01005126147997 +2 67.180000000000007 119.97005135892852 + +Dihedral Coeffs + +1 3.625 -1 2 +2 1.1000000000000001 -1 2 + +Atoms + +1 1 2.36 1.266 2.813 0.000000 12.0 -0.13 0.00000 0.00000 0.00000 1 +2 2 1.613 1.52 3.563 0.000000 1.0 0.13 0.00000 0.00000 0.00000 1 +3 1 2.533 2.086 1.698 0.000000 12.0 -0.13 0.00000 0.00000 0.00000 1 +4 2 1.927 2.98 1.580 0.000000 1.0 0.13 0.00000 0.00000 0.00000 1 +5 1 3.488 1.758 0.736 0.000000 12.0 -0.13 0.00000 0.00000 0.00000 1 +6 2 3.626 2.397 -0.132 0.000000 1.0 0.13 0.00000 0.00000 0.00000 1 +7 1 4.27 0.61 0.887 0.000000 12.0 -0.13 0.00000 0.00000 0.00000 1 +8 2 5.009 0.355 0.137 0.000000 1.0 0.13 0.00000 0.00000 0.00000 1 +9 1 4.088 -0.21 2.002 0.000000 12.0 -0.13 0.00000 0.00000 0.00000 1 +10 2 4.694 -1.105 2.12 0.000000 1.0 0.13 0.00000 0.00000 0.00000 1 +11 1 3.134 0.118 2.964 0.000000 12.0 -0.13 0.00000 0.00000 0.00000 1 +12 2 2.996 -0.521 3.833 0.000000 1.0 0.13 0.00000 0.00000 0.00000 1 +13 3 -2.106 -4.049 4.900 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 2 +14 3 7.017 -2.905 0.217 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 3 +15 3 1.093 -8.262 0.988 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 4 +16 3 -3.268 -8.103 1.137 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 5 +17 3 8.424 2.737 -8.477 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 6 +18 3 2.505 -8.728 -6.752 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 7 +19 3 2.872 3.382 -9.423 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 8 +20 3 7.844 -10.651 -1.233 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 9 +21 3 -0.259 -3.662 -9.796 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 10 +22 3 0.867 -5.205 -7.083 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 11 +23 3 7.918 -6.103 -10.725 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 12 +24 3 4.315 2.335 -1.911 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 13 +25 3 5.040 -9.618 -0.865 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 14 +26 3 -2.753 -9.780 -1.003 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 15 +27 3 7.179 -6.748 4.580 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 16 +28 3 -9.523 1.404 -11.288 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 17 +29 3 3.013 -9.736 4.514 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 18 +30 3 5.259 -11.183 -7.701 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 19 +31 3 -1.368 -11.346 3.297 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 20 +32 3 -1.634 -7.819 6.053 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 21 +33 3 0.662 -12.148 -7.978 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 22 +34 3 -5.220 -10.591 -8.638 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 23 +35 3 0.905 -1.669 -0.657 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 24 +36 3 -0.615 -9.925 -8.942 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 25 +37 3 -1.551 3.039 5.153 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 26 +38 3 -6.713 3.723 -1.769 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 27 +39 3 0.561 1.520 -3.204 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 28 +40 3 2.572 -2.751 -6.737 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 29 +41 3 -1.435 0.124 5.346 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 30 +42 3 5.576 -6.394 -5.328 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 31 +43 3 2.912 -2.533 -1.925 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 32 +44 3 -3.049 -11.488 -6.657 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 33 +45 3 2.908 -0.518 -10.112 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 34 +46 3 -9.736 -11.084 -5.397 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 35 +47 3 8.564 -10.937 -8.075 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 36 +48 3 2.304 -11.323 -11.335 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 37 +49 3 5.441 -5.532 6.035 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 38 +50 3 5.338 1.516 -4.659 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 39 +51 3 0.472 5.720 -10.219 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 40 +52 3 -5.716 -3.310 -5.642 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 41 +53 3 -6.522 -2.217 1.256 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 42 +54 3 -5.269 -5.302 1.317 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 43 +55 3 -3.859 5.359 2.093 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 44 +56 3 -7.644 6.038 -0.885 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 45 +57 3 -4.788 5.223 -3.486 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 46 +58 3 8.558 1.181 1.881 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 47 +59 3 -2.639 -1.989 -1.064 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 48 +60 3 0.226 -11.491 5.456 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 49 +61 3 -9.725 -3.617 -10.663 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 50 +62 3 7.758 -11.853 1.401 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 51 +63 3 -9.715 5.367 -9.402 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 52 +64 3 3.029 -10.730 -2.561 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 53 +65 3 -3.157 -9.217 -5.380 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 54 +66 3 3.699 -0.203 -3.123 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 55 +67 3 -0.943 -7.260 -0.778 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 56 +68 3 -7.680 4.231 3.580 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 57 +69 3 -5.277 0.133 -11.317 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 58 +70 3 7.805 5.500 -2.112 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 59 +71 3 8.877 -1.109 -6.016 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 60 +72 3 -7.421 0.432 -9.060 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 61 +73 3 -9.144 6.208 7.016 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 62 +74 3 -6.319 3.082 5.870 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 63 +75 3 0.803 1.401 -5.837 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 64 +76 3 -5.392 -0.443 -1.464 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 65 +77 3 -2.347 -0.609 -10.723 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 66 +78 3 -1.748 1.704 -10.420 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 67 +79 3 1.667 -7.217 5.223 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 68 +80 3 -9.646 -1.170 -8.686 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 69 +81 3 7.910 -8.482 6.540 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 70 +82 3 8.279 -0.878 4.244 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 71 +83 3 -0.585 -10.406 -2.663 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 72 +84 3 -4.626 -2.916 4.643 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 73 +85 3 -3.291 -12.446 -0.502 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 74 +86 3 -5.144 -4.321 -10.813 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 75 +87 3 4.745 -12.155 0.748 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 76 +88 3 3.852 -8.862 6.901 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 77 +89 3 -1.484 -10.817 -11.232 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 78 +90 3 5.176 -3.609 -4.649 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 79 +91 3 4.335 4.437 6.664 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 80 +92 3 -1.788 -4.977 -3.199 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 81 +93 3 -9.282 -1.430 6.736 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 82 +94 3 -1.548 1.442 1.013 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 83 +95 3 4.107 -2.620 -11.263 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 84 +96 3 -2.016 -1.281 1.377 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 85 +97 3 4.295 -0.680 5.625 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 86 +98 3 5.835 -8.595 -3.117 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 87 +99 3 -3.666 4.017 -8.175 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 88 +100 3 -4.258 1.449 4.809 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 89 +101 3 -8.903 2.357 -2.710 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 90 +102 3 3.239 5.569 -3.968 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 91 +103 3 -8.146 -12.449 -7.229 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 92 +104 3 -1.172 -8.395 3.004 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 93 +105 3 5.601 6.026 -5.504 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 94 +106 3 -3.061 -8.733 -8.532 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 95 +107 3 8.789 -8.452 -9.160 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 96 +108 3 5.593 -8.986 3.288 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 97 +109 3 3.133 -5.601 -5.721 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 98 +110 3 7.237 3.167 2.757 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 99 +111 3 -5.859 5.561 7.048 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 100 +112 3 4.994 1.627 4.154 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 101 +113 3 -0.399 -0.896 -2.731 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 102 +114 3 -2.439 -0.901 -7.869 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 103 +115 3 -8.871 -4.162 -2.007 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 104 +116 3 6.994 3.602 -5.595 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 105 +117 3 -9.849 -5.551 -8.015 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 106 +118 3 6.823 0.637 6.177 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 107 +119 3 -6.123 -4.048 -1.189 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 108 +120 3 -2.723 -5.667 2.317 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 109 +121 3 -9.234 5.087 1.319 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 110 +122 3 3.012 1.584 6.955 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 111 +123 3 -4.249 -10.926 -3.076 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 112 +124 3 0.184 3.103 -11.488 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 113 +125 3 2.084 -8.575 -3.892 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 114 +126 3 -5.135 2.206 -0.018 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 115 +127 3 6.399 -9.714 -10.497 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 116 +128 3 -5.837 -9.729 -11.533 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 117 +129 3 -3.120 0.020 -2.844 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 118 +130 3 4.753 -0.056 -8.332 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 119 +131 3 2.413 -10.819 1.325 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 120 +132 3 0.603 -1.394 -8.322 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 121 +133 3 8.316 3.170 -0.589 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 122 +134 3 0.214 3.023 2.139 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 123 +135 3 4.691 -4.875 -2.092 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 124 +136 3 0.614 5.766 2.166 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 125 +137 3 -7.778 0.010 3.287 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 126 +138 3 -5.444 -9.049 4.421 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 127 +139 3 6.864 -4.049 -6.866 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 128 +140 3 -6.527 -6.873 -11.017 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 129 +141 3 5.015 -8.026 -7.771 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 130 +142 3 2.304 -4.212 1.508 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 131 +143 3 2.150 -6.718 -11.228 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 132 +144 3 6.267 -12.085 6.080 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 133 +145 3 3.336 6.153 -9.089 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 134 +146 3 6.975 -10.944 -3.896 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 135 +147 3 3.372 1.710 -6.550 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 136 +148 3 -3.366 5.938 -10.766 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 137 +149 3 -6.732 -7.675 -0.488 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 138 +150 3 -9.098 -3.449 1.864 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 139 +151 3 -0.761 -3.678 -5.357 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 140 +152 3 2.227 -11.430 -6.037 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 141 +153 3 -4.160 -0.831 3.107 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 142 +154 3 1.023 4.444 5.059 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 143 +155 3 -5.972 -0.476 -6.732 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 144 +156 3 1.882 3.740 -2.159 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 145 +157 3 -5.616 -7.236 -3.179 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 146 +158 3 -1.041 3.661 -4.710 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 147 +159 3 -3.763 -6.715 -6.825 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 148 +160 3 -6.880 -10.727 -2.699 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 149 +161 3 3.684 6.297 4.653 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 150 +162 3 0.387 -7.277 -8.834 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 151 +163 3 -9.569 -7.168 2.539 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 152 +164 3 7.152 -3.059 5.305 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 153 +165 3 -8.228 0.961 -5.322 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 154 +166 3 -8.043 -2.933 -4.670 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 155 +167 3 -6.991 -2.816 -9.354 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 156 +168 3 -6.404 -10.415 0.369 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 157 +169 3 -9.666 4.748 -4.100 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 158 +170 3 4.949 -6.194 -10.138 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 159 +171 3 -2.559 -4.064 -10.755 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 160 +172 3 7.839 -11.098 3.997 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 161 +173 3 -6.130 -7.595 -8.463 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 162 +174 3 -8.786 -10.162 -11.057 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 163 +175 3 -5.732 6.018 4.245 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 164 +176 3 7.272 -6.800 0.563 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 165 +177 3 -7.202 -5.269 -7.667 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 166 +178 3 -7.748 -6.308 5.480 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 167 +179 3 3.431 4.159 3.723 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 168 +180 3 -9.738 -4.997 4.374 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 169 +181 3 1.418 -5.632 -3.567 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 170 +182 3 0.875 -1.319 -5.269 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 171 +183 3 1.865 -4.042 -11.248 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 172 +184 3 -3.568 0.043 -5.588 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 173 +185 3 -8.447 -12.044 4.343 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 174 +186 3 6.904 3.562 7.054 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 175 +187 3 -2.495 -4.208 -7.648 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 176 +188 3 -5.431 5.599 -6.454 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 177 +189 3 -8.331 -8.974 4.293 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 178 +190 3 -8.378 -6.588 -2.393 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 179 +191 3 -1.878 2.150 -7.584 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 180 +192 3 -0.472 -2.234 3.638 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 181 +193 3 6.139 -1.173 -5.383 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 182 +194 3 4.534 -7.816 0.981 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 183 +195 3 -7.232 -9.864 -6.887 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 184 +196 3 6.128 -3.511 -9.561 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 185 +197 3 0.921 -11.498 -0.779 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 186 +198 3 -9.640 -8.436 -0.735 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 187 +199 3 0.019 4.665 -0.485 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 188 +200 3 5.156 5.597 -1.887 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 189 +201 3 7.147 0.582 -9.464 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 190 +202 3 -4.179 2.936 -11.017 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 191 +203 3 -4.399 -6.637 5.564 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 192 +204 3 -2.344 3.290 -1.124 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 193 +205 3 -4.466 -10.876 1.901 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 194 +206 3 7.294 -4.692 -1.523 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 195 +207 3 7.905 4.987 4.692 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 196 +208 3 -1.741 -7.141 -10.334 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 197 +209 3 -1.132 -7.715 -3.942 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 198 +210 3 -6.449 -4.812 3.675 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 199 +211 3 -5.510 2.897 2.860 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 200 +212 3 6.588 -12.178 -9.758 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 201 +213 3 -4.571 -4.683 -3.322 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 202 +214 3 -8.446 2.064 5.219 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 203 +215 3 1.389 -4.313 4.558 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 204 +216 3 -7.964 -8.783 -4.266 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 205 +217 3 -6.701 -1.301 5.560 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 206 +218 3 -2.054 -12.433 -3.931 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 207 +219 3 2.511 -6.022 -0.803 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 208 +220 3 5.378 -4.727 1.540 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 209 +221 3 -1.556 -4.552 -0.093 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 210 +222 3 -7.906 2.515 -7.616 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 211 +223 3 8.424 2.737 11.174 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 212 +224 3 2.505 -8.728 12.899 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 213 +225 3 2.872 3.382 10.228 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 214 +226 3 -0.259 -3.662 9.855 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 215 +227 3 0.867 -5.205 12.568 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 216 +228 3 7.918 -6.103 8.926 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 217 +229 3 -9.523 1.404 8.363 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 218 +230 3 5.259 -11.183 11.950 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 219 +231 3 0.662 -12.148 11.674 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 220 +232 3 -5.220 -10.591 11.013 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 221 +233 3 -0.615 -9.925 10.709 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 222 +234 3 2.572 -2.751 12.914 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 223 +235 3 5.576 -6.394 14.323 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 224 +236 3 -3.049 -11.488 12.994 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 225 +237 3 2.908 -0.518 9.539 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 226 +238 3 -9.736 -11.084 14.254 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 227 +239 3 8.564 -10.937 11.576 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 228 +240 3 2.304 -11.323 8.316 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 229 +241 3 5.338 1.516 14.992 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 230 +242 3 0.472 5.720 9.433 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 231 +243 3 -5.716 -3.310 14.009 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 232 +244 3 -9.725 -3.617 8.988 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 233 +245 3 -9.715 5.367 10.248 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 234 +246 3 -3.157 -9.217 14.271 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 235 +247 3 -5.277 0.133 8.334 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 236 +248 3 8.877 -1.109 13.635 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 237 +249 3 -7.421 0.432 10.591 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 238 +250 3 0.803 1.401 13.814 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 239 +251 3 -2.347 -0.609 8.928 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 240 +252 3 -1.748 1.704 9.231 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 241 +253 3 -9.646 -1.170 10.965 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 242 +254 3 -5.144 -4.321 8.838 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 243 +255 3 -1.484 -10.817 8.419 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 244 +256 3 5.176 -3.609 15.002 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 245 +257 3 4.107 -2.620 8.388 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 246 +258 3 -3.666 4.017 11.476 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 247 +259 3 -8.146 -12.449 12.422 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 248 +260 3 5.601 6.026 14.147 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 249 +261 3 -3.061 -8.733 11.119 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 250 +262 3 8.789 -8.452 10.492 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 251 +263 3 3.133 -5.601 13.930 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 252 +264 3 -2.439 -0.901 11.782 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 253 +265 3 6.994 3.602 14.056 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 254 +266 3 -9.849 -5.551 11.636 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 255 +267 3 0.184 3.103 8.163 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 256 +268 3 6.399 -9.714 9.155 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 257 +269 3 -5.837 -9.729 8.118 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 258 +270 3 4.753 -0.056 11.319 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 259 +271 3 0.603 -1.394 11.329 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 260 +272 3 6.864 -4.049 12.785 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 261 +273 3 -6.527 -6.873 8.634 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 262 +274 3 5.015 -8.026 11.880 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 263 +275 3 2.150 -6.718 8.423 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 264 +276 3 3.336 6.153 10.562 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 265 +277 3 3.372 1.710 13.101 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 266 +278 3 -3.366 5.938 8.885 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 267 +279 3 -0.761 -3.678 14.293 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 268 +280 3 2.227 -11.430 13.614 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 269 +281 3 -5.972 -0.476 12.919 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 270 +282 3 -1.041 3.661 14.941 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 271 +283 3 -3.763 -6.715 12.826 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 272 +284 3 0.387 -7.277 10.817 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 273 +285 3 -8.228 0.961 14.329 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 274 +286 3 -8.043 -2.933 14.981 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 275 +287 3 -6.991 -2.816 10.297 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 276 +288 3 -9.666 4.748 15.551 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 277 +289 3 4.949 -6.194 9.513 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 278 +290 3 -2.559 -4.064 8.896 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 279 +291 3 -6.130 -7.595 11.188 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 280 +292 3 -8.786 -10.162 8.594 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 281 +293 3 -7.202 -5.269 11.984 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 282 +294 3 0.875 -1.319 14.383 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 283 +295 3 1.865 -4.042 8.402 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 284 +296 3 -3.568 0.043 14.063 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 285 +297 3 -2.495 -4.208 12.003 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 286 +298 3 -5.431 5.599 13.197 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 287 +299 3 -1.878 2.150 12.067 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 288 +300 3 6.139 -1.173 14.268 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 289 +301 3 -7.232 -9.864 12.764 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 290 +302 3 6.128 -3.511 10.091 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 291 +303 3 7.147 0.582 10.187 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 292 +304 3 -4.179 2.936 8.634 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 293 +305 3 -1.741 -7.141 9.317 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 294 +306 3 6.588 -12.178 9.893 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 295 +307 3 -7.964 -8.783 15.385 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 296 +308 3 -7.906 2.515 12.036 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 297 +309 3 1.093 11.609 0.988 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 298 +310 3 -3.268 11.769 1.137 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 299 +311 3 2.505 11.144 -6.752 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 300 +312 3 7.844 9.221 -1.233 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 301 +313 3 0.867 14.668 -7.083 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 302 +314 3 7.918 13.768 -10.725 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 303 +315 3 5.040 10.254 -0.865 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 304 +316 3 -2.753 10.092 -1.003 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 305 +317 3 7.179 13.123 4.580 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 306 +318 3 3.013 10.136 4.514 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 307 +319 3 5.259 8.689 -7.701 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 308 +320 3 -1.368 8.526 3.297 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 309 +321 3 -1.634 12.053 6.053 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 310 +322 3 0.662 7.724 -7.978 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 311 +323 3 -5.220 9.281 -8.638 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 312 +324 3 -0.615 9.947 -8.942 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 313 +325 3 5.576 13.478 -5.328 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 314 +326 3 -3.049 8.384 -6.657 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 315 +327 3 -9.736 8.788 -5.397 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 316 +328 3 8.564 8.935 -8.075 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 317 +329 3 2.304 8.549 -11.335 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 318 +330 3 -5.269 14.570 1.317 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 319 +331 3 0.226 8.380 5.456 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 320 +332 3 7.758 8.019 1.401 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 321 +333 3 3.029 9.142 -2.561 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 322 +334 3 -3.157 10.655 -5.380 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 323 +335 3 -0.943 12.612 -0.778 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 324 +336 3 1.667 12.655 5.223 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 325 +337 3 7.910 11.391 6.540 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 326 +338 3 -0.585 9.466 -2.663 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 327 +339 3 -3.291 7.426 -0.502 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 328 +340 3 4.745 7.717 0.748 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 329 +341 3 3.852 11.010 6.901 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 330 +342 3 -1.484 9.055 -11.232 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 331 +343 3 5.835 11.277 -3.117 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 332 +344 3 -8.146 7.423 -7.229 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 333 +345 3 -1.172 11.477 3.004 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 334 +346 3 -3.061 11.139 -8.532 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 335 +347 3 8.789 11.420 -9.160 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 336 +348 3 5.593 10.886 3.288 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 337 +349 3 3.133 14.270 -5.721 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 338 +350 3 -9.849 14.321 -8.015 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 339 +351 3 -2.723 14.205 2.317 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 340 +352 3 -4.249 8.946 -3.076 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 341 +353 3 2.084 11.297 -3.892 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 342 +354 3 6.399 10.158 -10.497 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 343 +355 3 -5.837 10.143 -11.533 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 344 +356 3 2.413 9.053 1.325 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 345 +357 3 -5.444 10.823 4.421 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 346 +358 3 -6.527 12.998 -11.017 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 347 +359 3 5.015 11.846 -7.771 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 348 +360 3 2.150 13.154 -11.228 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 349 +361 3 6.267 7.787 6.080 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 350 +362 3 6.975 8.928 -3.896 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 351 +363 3 -6.732 12.197 -0.488 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 352 +364 3 2.227 8.441 -6.037 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 353 +365 3 -5.616 12.636 -3.179 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 354 +366 3 -3.763 13.157 -6.825 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 355 +367 3 -6.880 9.145 -2.699 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 356 +368 3 0.387 12.595 -8.834 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 357 +369 3 -9.569 12.704 2.539 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 358 +370 3 -6.404 9.457 0.369 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 359 +371 3 4.949 13.678 -10.138 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 360 +372 3 7.839 8.774 3.997 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 361 +373 3 -6.130 12.277 -8.463 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 362 +374 3 -8.786 9.710 -11.057 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 363 +375 3 7.272 13.072 0.563 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 364 +376 3 -7.202 14.602 -7.667 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 365 +377 3 -7.748 13.564 5.480 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 366 +378 3 1.418 14.240 -3.567 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 367 +379 3 -8.447 7.828 4.343 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 368 +380 3 -8.331 10.898 4.293 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 369 +381 3 -8.378 13.284 -2.393 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 370 +382 3 4.534 12.056 0.981 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 371 +383 3 -7.232 10.008 -6.887 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 372 +384 3 0.921 8.374 -0.779 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 373 +385 3 -9.640 11.436 -0.735 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 374 +386 3 -4.399 13.235 5.564 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 375 +387 3 -4.466 8.996 1.901 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 376 +388 3 -1.741 12.731 -10.334 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 377 +389 3 -1.132 12.157 -3.942 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 378 +390 3 6.588 7.694 -9.758 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 379 +391 3 -7.964 11.089 -4.266 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 380 +392 3 -2.054 7.439 -3.931 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 381 +393 3 2.511 13.850 -0.803 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 382 +394 3 2.505 11.144 12.899 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 383 +395 3 0.867 14.668 12.568 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 384 +396 3 7.918 13.768 8.926 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 385 +397 3 5.259 8.689 11.950 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 386 +398 3 0.662 7.724 11.674 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 387 +399 3 -5.220 9.281 11.013 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 388 +400 3 -0.615 9.947 10.709 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 389 +401 3 5.576 13.478 14.323 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 390 +402 3 -3.049 8.384 12.994 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 391 +403 3 -9.736 8.788 14.254 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 392 +404 3 8.564 8.935 11.576 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 393 +405 3 2.304 8.549 8.316 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 394 +406 3 -3.157 10.655 14.271 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 395 +407 3 -1.484 9.055 8.419 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 396 +408 3 -8.146 7.423 12.422 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 397 +409 3 -3.061 11.139 11.119 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 398 +410 3 8.789 11.420 10.492 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 399 +411 3 3.133 14.270 13.930 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 400 +412 3 -9.849 14.321 11.636 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 401 +413 3 6.399 10.158 9.155 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 402 +414 3 -5.837 10.143 8.118 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 403 +415 3 -6.527 12.998 8.634 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 404 +416 3 5.015 11.846 11.880 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 405 +417 3 2.150 13.154 8.423 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 406 +418 3 2.227 8.441 13.614 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 407 +419 3 -3.763 13.157 12.826 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 408 +420 3 0.387 12.595 10.817 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 409 +421 3 4.949 13.678 9.513 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 410 +422 3 -6.130 12.277 11.188 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 411 +423 3 -8.786 9.710 8.594 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 412 +424 3 -7.202 14.602 11.984 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 413 +425 3 -7.232 10.008 12.764 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 414 +426 3 -1.741 12.731 9.317 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 415 +427 3 6.588 7.694 9.893 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 416 +428 3 -7.964 11.089 15.385 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 417 +429 3 10.181 1.404 -11.288 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 418 +430 3 14.484 -10.591 -8.638 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 419 +431 3 12.991 3.723 -1.769 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 420 +432 3 16.655 -11.488 -6.657 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 421 +433 3 9.968 -11.084 -5.397 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 422 +434 3 13.988 -3.310 -5.642 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 423 +435 3 13.182 -2.217 1.256 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 424 +436 3 14.435 -5.302 1.317 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 425 +437 3 15.845 5.359 2.093 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 426 +438 3 12.060 6.038 -0.885 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 427 +439 3 14.916 5.223 -3.486 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 428 +440 3 9.979 -3.617 -10.663 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 429 +441 3 9.989 5.367 -9.402 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 430 +442 3 16.547 -9.217 -5.380 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 431 +443 3 12.024 4.231 3.580 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 432 +444 3 14.427 0.133 -11.317 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 433 +445 3 12.283 0.432 -9.060 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 434 +446 3 10.560 6.208 7.016 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 435 +447 3 13.386 3.082 5.870 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 436 +448 3 14.312 -0.443 -1.464 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 437 +449 3 10.059 -1.170 -8.686 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 438 +450 3 15.078 -2.916 4.643 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 439 +451 3 16.413 -12.446 -0.502 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 440 +452 3 14.560 -4.321 -10.813 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 441 +453 3 10.422 -1.430 6.736 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 442 +454 3 16.038 4.017 -8.175 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 443 +455 3 15.447 1.449 4.809 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 444 +456 3 10.801 2.357 -2.710 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 445 +457 3 11.559 -12.449 -7.229 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 446 +458 3 16.643 -8.733 -8.532 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 447 +459 3 13.845 5.561 7.048 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 448 +460 3 10.833 -4.162 -2.007 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 449 +461 3 9.854 -5.551 -8.015 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 450 +462 3 13.581 -4.048 -1.189 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 451 +463 3 10.470 5.087 1.319 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 452 +464 3 15.454 -10.926 -3.076 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 453 +465 3 14.569 2.206 -0.018 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 454 +466 3 13.867 -9.729 -11.533 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 455 +467 3 16.584 0.020 -2.844 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 456 +468 3 11.926 0.010 3.287 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 457 +469 3 14.261 -9.049 4.421 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 458 +470 3 13.177 -6.873 -11.017 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 459 +471 3 16.338 5.938 -10.766 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 460 +472 3 12.972 -7.675 -0.488 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 461 +473 3 10.607 -3.449 1.864 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 462 +474 3 15.544 -0.831 3.107 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 463 +475 3 13.732 -0.476 -6.732 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 464 +476 3 14.088 -7.236 -3.179 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 465 +477 3 15.941 -6.715 -6.825 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 466 +478 3 12.823 -10.727 -2.699 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 467 +479 3 10.135 -7.168 2.539 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 468 +480 3 11.476 0.961 -5.322 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 469 +481 3 11.661 -2.933 -4.670 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 470 +482 3 12.713 -2.816 -9.354 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 471 +483 3 13.300 -10.415 0.369 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 472 +484 3 10.038 4.748 -4.100 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 473 +485 3 13.573 -7.595 -8.463 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 474 +486 3 10.918 -10.162 -11.057 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 475 +487 3 13.972 6.018 4.245 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 476 +488 3 12.502 -5.269 -7.667 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 477 +489 3 11.956 -6.308 5.480 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 478 +490 3 9.966 -4.997 4.374 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 479 +491 3 16.135 0.043 -5.588 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 480 +492 3 11.258 -12.044 4.343 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 481 +493 3 14.273 5.599 -6.454 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 482 +494 3 11.373 -8.974 4.293 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 483 +495 3 11.325 -6.588 -2.393 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 484 +496 3 12.471 -9.864 -6.887 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 485 +497 3 10.064 -8.436 -0.735 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 486 +498 3 15.525 2.936 -11.017 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 487 +499 3 15.305 -6.637 5.564 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 488 +500 3 15.238 -10.876 1.901 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 489 +501 3 13.255 -4.812 3.675 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 490 +502 3 14.194 2.897 2.860 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 491 +503 3 15.133 -4.683 -3.322 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 492 +504 3 11.258 2.064 5.219 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 493 +505 3 11.740 -8.783 -4.266 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 494 +506 3 13.003 -1.301 5.560 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 495 +507 3 11.798 2.515 -7.616 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 496 +508 3 10.181 1.404 8.363 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 497 +509 3 14.484 -10.591 11.013 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 498 +510 3 16.655 -11.488 12.994 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 499 +511 3 9.968 -11.084 14.254 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 500 +512 3 13.988 -3.310 14.009 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 501 +513 3 9.979 -3.617 8.988 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 502 +514 3 9.989 5.367 10.248 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 503 +515 3 16.547 -9.217 14.271 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 504 +516 3 14.427 0.133 8.334 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 505 +517 3 12.283 0.432 10.591 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 506 +518 3 10.059 -1.170 10.965 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 507 +519 3 14.560 -4.321 8.838 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 508 +520 3 16.038 4.017 11.476 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 509 +521 3 11.559 -12.449 12.422 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 510 +522 3 16.643 -8.733 11.119 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 511 +523 3 9.854 -5.551 11.636 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 512 +524 3 13.867 -9.729 8.118 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 513 +525 3 13.177 -6.873 8.634 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 514 +526 3 16.338 5.938 8.885 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 515 +527 3 13.732 -0.476 12.919 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 516 +528 3 15.941 -6.715 12.826 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 517 +529 3 11.476 0.961 14.329 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 518 +530 3 11.661 -2.933 14.981 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 519 +531 3 12.713 -2.816 10.297 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 520 +532 3 10.038 4.748 15.551 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 521 +533 3 13.573 -7.595 11.188 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 522 +534 3 10.918 -10.162 8.594 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 523 +535 3 12.502 -5.269 11.984 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 524 +536 3 16.135 0.043 14.063 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 525 +537 3 14.273 5.599 13.197 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 526 +538 3 12.471 -9.864 12.764 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 527 +539 3 15.525 2.936 8.634 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 528 +540 3 11.740 -8.783 15.385 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 529 +541 3 11.798 2.515 12.036 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 530 +542 3 14.484 9.281 -8.638 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 531 +543 3 16.655 8.384 -6.657 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 532 +544 3 9.968 8.788 -5.397 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 533 +545 3 14.435 14.570 1.317 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 534 +546 3 16.547 10.655 -5.380 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 535 +547 3 16.413 7.426 -0.502 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 536 +548 3 11.559 7.423 -7.229 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 537 +549 3 16.643 11.139 -8.532 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 538 +550 3 9.854 14.321 -8.015 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 539 +551 3 15.454 8.946 -3.076 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 540 +552 3 13.867 10.143 -11.533 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 541 +553 3 14.261 10.823 4.421 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 542 +554 3 13.177 12.998 -11.017 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 543 +555 3 12.972 12.197 -0.488 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 544 +556 3 14.088 12.636 -3.179 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 545 +557 3 15.941 13.157 -6.825 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 546 +558 3 12.823 9.145 -2.699 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 547 +559 3 10.135 12.704 2.539 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 548 +560 3 13.300 9.457 0.369 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 549 +561 3 13.573 12.277 -8.463 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 550 +562 3 10.918 9.710 -11.057 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 551 +563 3 12.502 14.602 -7.667 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 552 +564 3 11.956 13.564 5.480 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 553 +565 3 11.258 7.828 4.343 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 554 +566 3 11.373 10.898 4.293 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 555 +567 3 11.325 13.284 -2.393 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 556 +568 3 12.471 10.008 -6.887 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 557 +569 3 10.064 11.436 -0.735 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 558 +570 3 15.305 13.235 5.564 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 559 +571 3 15.238 8.996 1.901 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 560 +572 3 11.740 11.089 -4.266 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 561 +573 3 14.484 9.281 11.013 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 562 +574 3 16.655 8.384 12.994 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 563 +575 3 9.968 8.788 14.254 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 564 +576 3 16.547 10.655 14.271 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 565 +577 3 11.559 7.423 12.422 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 566 +578 3 16.643 11.139 11.119 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 567 +579 3 9.854 14.321 11.636 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 568 +580 3 13.867 10.143 8.118 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 569 +581 3 13.177 12.998 8.634 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 570 +582 3 15.941 13.157 12.826 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 571 +583 3 13.573 12.277 11.188 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 572 +584 3 10.918 9.710 8.594 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 573 +585 3 12.502 14.602 11.984 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 574 +586 3 12.471 10.008 12.764 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 575 +587 3 11.740 11.089 15.385 4.080749 0.5063 0.00 0.53449 0.02447 0.08219 576 + +Bonds + +1 1 11 12 +2 1 9 10 +3 2 9 11 +4 1 7 8 +5 2 7 9 +6 1 5 6 +7 2 5 7 +8 1 3 4 +9 2 3 5 +10 1 1 2 +11 2 1 3 +12 2 1 11 + +Angles + +1 1 10 9 11 +2 1 9 11 12 +3 1 8 7 9 +4 1 7 9 10 +5 2 7 9 11 +6 1 6 5 7 +7 1 5 7 8 +8 2 5 7 9 +9 1 4 3 5 +10 2 3 1 11 +11 1 3 5 6 +12 2 3 5 7 +13 1 2 1 3 +14 1 2 1 11 +15 1 1 3 4 +16 2 1 3 5 +17 2 1 11 9 +18 1 1 11 12 + +Dihedrals + +1 1 10 9 11 12 +2 1 8 7 9 10 +3 1 8 7 9 11 +4 1 7 9 11 12 +5 1 6 5 7 8 +6 1 6 5 7 9 +7 1 11 1 3 5 +8 1 5 7 9 10 +9 1 5 7 9 11 +10 1 11 1 3 4 +11 1 4 3 5 6 +12 1 4 3 5 7 +13 1 3 1 11 9 +14 1 3 1 11 12 +15 1 3 5 7 8 +16 1 3 5 7 9 +17 1 2 1 3 4 +18 1 2 1 3 5 +19 1 2 1 11 9 +20 1 2 1 11 12 +21 1 1 3 5 6 +22 1 1 3 5 7 +23 1 1 11 9 7 +24 1 1 11 9 10 +25 2 1 9 11 12 +26 2 7 11 9 10 +27 2 5 9 7 8 +28 2 3 7 5 6 +29 2 1 5 3 4 +30 2 2 1 11 3 + diff --git a/test-respa/dual-special/in.verlet b/test-respa/dual-special/in.verlet new file mode 100644 index 000000000..9aa920013 --- /dev/null +++ b/test-respa/dual-special/in.verlet @@ -0,0 +1,60 @@ + +units real +atom_style hybrid sphere dipole molecular + +# this is equivalent to special_bonds amber, +# but also compatible with the per-style overrides below. +special_bonds lj 0.0 1.0e-100 0.5 coul 0.0 1.0e-100 0.8333333333333333 + +pair_style hybrid lj/sf/dipole/sf 12.0 lj/sf/dipole/sf 12.0 & + lj/charmm/coul/long 11.0 12.0 +pair_modify mix arithmetic +pair_modify pair lj/sf/dipole/sf 1 special lj/coul 0.0 1.0 1.0 +pair_modify pair lj/sf/dipole/sf 2 special lj/coul 0.0 1.0 1.0 + +kspace_style pppm/cg 1.0e-5 +bond_style harmonic +angle_style harmonic +dihedral_style harmonic + +read_data data.bnzwbox + +# pair_coeffs: +pair_coeff 1 1 lj/charmm/coul/long 0.0860 3.39967 0.0860 3.39967 # AA-AA +pair_coeff 2 2 lj/charmm/coul/long 0.015000 2.59964 0.015000 2.59964 # AA-AA +pair_coeff 3 3 lj/sf/dipole/sf 1 0.550000 3.050000 # CG-CG, this will be propagated with the longer timestep +pair_coeff 1 2 lj/charmm/coul/long 0.0359 2.9997 0.0359 2.9997 # AA-AA +pair_coeff 1 3 lj/sf/dipole/sf 2 0.2175 3.2248 # CG-AA, this will be propagated with the shorter timestep +pair_coeff 2 3 lj/sf/dipole/sf 2 0.0908 2.8248 # CG-AA, this will be propagated with the shorter timestep + + +# this will set individual per-atom masses - as required by +# atom style sphere - to the same value as the per-type masses. +set type 1 mass 12.011000 +set type 2 mass 1.008000 +set type 3 mass 40.00 + +group solute molecule 1 +group water molecule > 1 + +set group solute diameter 0.0 + +neighbor 2.0 bin +neigh_modify every 1 delay 0 check yes + +#timestep 8 +#run_style respa 2 4 hybrid 2 1 1 kspace 1 improper 2 + +timestep 2.0 +run_style verlet + +fix integrateSolute solute nve +fix integrateWater water nve/sphere update dipole + +fix thermostatWater water langevin 298 298 100 9 omega yes zero yes +fix thermostatSolute solute langevin 298 298 100 9 zero yes + +thermo 100 + +minimize 1.0E-4 1.0E-6 100 1000 +run 1000 diff --git a/test-respa/dual-special/log.verlet b/test-respa/dual-special/log.verlet new file mode 100644 index 000000000..32320f704 --- /dev/null +++ b/test-respa/dual-special/log.verlet @@ -0,0 +1,194 @@ +LAMMPS (6 Apr 2015-ICMS) +WARNING: OMP_NUM_THREADS environment is not set. (../comm.cpp:89) + using 1 OpenMP thread(s) per MPI task + +units real +atom_style hybrid sphere dipole molecular + +# this is equivalent to special_bonds amber, +# but also compatible with the per-style overrides below. +special_bonds lj 0.0 1.0e-100 0.5 coul 0.0 1.0e-100 0.8333333333333333 + +pair_style hybrid lj/sf/dipole/sf 12.0 lj/sf/dipole/sf 12.0 lj/charmm/coul/long 11.0 12.0 +pair_modify mix arithmetic +pair_modify pair lj/sf/dipole/sf 1 special lj/coul 0.0 1.0 1.0 +pair_modify pair lj/sf/dipole/sf 2 special lj/coul 0.0 1.0 1.0 + +kspace_style pppm/cg 1.0e-5 +bond_style harmonic +angle_style harmonic +dihedral_style harmonic + +read_data data.bnzwbox + orthogonal box = (-11.3621 -13.9039 -13.1983) to (18.0429 16.0051 16.7857) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 587 atoms + scanning bonds ... + 3 = max bonds/atom + scanning angles ... + 3 = max angles/atom + scanning dihedrals ... + 9 = max dihedrals/atom + reading bonds ... + 12 bonds + reading angles ... + 18 angles + reading dihedrals ... + 30 dihedrals + 3 = max # of 1-2 neighbors + 4 = max # of 1-3 neighbors + 8 = max # of 1-4 neighbors + 10 = max # of special neighbors + +# pair_coeffs: +pair_coeff 1 1 lj/charmm/coul/long 0.0860 3.39967 0.0860 3.39967 # AA-AA +pair_coeff 2 2 lj/charmm/coul/long 0.015000 2.59964 0.015000 2.59964 # AA-AA +pair_coeff 3 3 lj/sf/dipole/sf 1 0.550000 3.050000 # CG-CG, this will be propagated with the longer timestep +pair_coeff 1 2 lj/charmm/coul/long 0.0359 2.9997 0.0359 2.9997 # AA-AA +pair_coeff 1 3 lj/sf/dipole/sf 2 0.2175 3.2248 # CG-AA, this will be propagated with the shorter timestep +pair_coeff 2 3 lj/sf/dipole/sf 2 0.0908 2.8248 # CG-AA, this will be propagated with the shorter timestep + + +# this will set individual per-atom masses - as required by +# atom style sphere - to the same value as the per-type masses. +set type 1 mass 12.011000 + 6 settings made for mass +set type 2 mass 1.008000 + 6 settings made for mass +set type 3 mass 40.00 + 575 settings made for mass + +group solute molecule 1 +12 atoms in group solute +group water molecule > 1 +575 atoms in group water + +set group solute diameter 0.0 + 12 settings made for diameter + +neighbor 2.0 bin +neigh_modify every 1 delay 0 check yes + +#timestep 8 +#run_style respa 2 4 hybrid 2 1 1 kspace 1 improper 2 + +timestep 2.0 +run_style verlet + +fix integrateSolute solute nve +fix integrateWater water nve/sphere update dipole + +fix thermostatWater water langevin 298 298 100 9 omega yes zero yes +fix thermostatSolute solute langevin 298 298 100 9 zero yes + +thermo 100 + +minimize 1.0E-4 1.0E-6 100 1000 +PPPM initialization ... + G vector (1/distance) = 0.107059 + grid = 3 3 3 + stencil order = 5 + estimated absolute RMS force accuracy = 0.00268661 + estimated relative force accuracy = 8.09066e-06 + using double precision FFTs + 3d grid and FFT values/proc = 512 27 +Neighbor list info ... + 4 neighbor list requests + update every 1 steps, delay 0 steps, check yes + master list distance cutoff = 14 + PPPM/cg optimization cutoff: 1e-05 + Total charged atoms: 2.0% + Min/max charged atoms/proc: 2.0% 2.0% +Memory usage per processor = 13.1326 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 0 1229.2095 0.19819566 1229.4077 33888.578 + 100 0 -2841.678 2.1349864 -2839.543 1363.0469 + +Loop time of 1.24367 on 1 procs for 100 steps with 587 atoms +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads + +Minimization stats: + Stopping criterion = max iterations + Energy initial, next-to-last, final = + 1229.4076721 -2835.11740182 -2839.54299044 + Force two-norm initial, final = 1311.12 92.7793 + Force max component initial, final = 529.28 52.5897 + Final line search alpha, max atom move = 0.00240725 0.126597 + Iterations, force evaluations = 100 181 + +MPI task timings breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.2039 | 1.2039 | 1.2039 | 0.0 | 96.80 +Bond | 0.0011945 | 0.0011945 | 0.0011945 | 0.0 | 0.10 +Kspace | 0.0033362 | 0.0033362 | 0.0033362 | 0.0 | 0.27 +Neigh | 0.015982 | 0.015982 | 0.015982 | 0.0 | 1.29 +Comm | 0.015237 | 0.015237 | 0.015237 | 0.0 | 1.23 +Output | 4.5061e-05 | 4.5061e-05 | 4.5061e-05 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 0.003967 | | | 0.32 + +Nlocal: 587 ave 587 max 587 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 3599 ave 3599 max 3599 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 75832 ave 75832 max 75832 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 75832 +Ave neighs/atom = 129.186 +Ave special neighs/atom = 0.173765 +Neighbor list builds = 5 +Dangerous builds = 0 +run 1000 +PPPM initialization ... + G vector (1/distance) = 0.107059 + grid = 3 3 3 + stencil order = 5 + estimated absolute RMS force accuracy = 0.00268661 + estimated relative force accuracy = 8.09066e-06 + using double precision FFTs + 3d grid and FFT values/proc = 512 27 +Memory usage per processor = 12.0076 Mbytes +Step Temp E_pair E_mol TotEng Press + 100 0 -2841.678 2.1349864 -2839.543 1363.0469 + 200 285.39211 -2675.81 14.315456 -2162.9845 3732.8229 + 300 291.58808 -2733.738 13.268339 -2211.1368 3040.2089 + 400 298.44197 -2860.0383 15.480615 -2323.2528 2646.7134 + 500 296.79448 -2966.7422 11.311007 -2437.004 1958.8059 + 600 308.29218 -3120.7411 15.267691 -2566.9626 1558.7607 + 700 312.67712 -3194.7043 8.7624891 -2639.7716 1212.4966 + 800 308.86454 -3385.1928 14.905594 -2830.7766 204.85265 + 900 296.81418 -3545.2909 13.78069 -3013.0487 528.53145 + 1000 311.33831 -3682.4629 10.590424 -3128.0408 309.35302 + 1100 296.60224 -3749.0433 14.01717 -3216.9347 -102.75834 + +Loop time of 5.87081 on 1 procs for 1000 steps with 587 atoms +100.0% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 29.434 ns/day 0.815 hours/ns 170.334 timesteps/s + +MPI task timings breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 5.5785 | 5.5785 | 5.5785 | 0.0 | 95.02 +Bond | 0.0061142 | 0.0061142 | 0.0061142 | 0.0 | 0.10 +Kspace | 0.020182 | 0.020182 | 0.020182 | 0.0 | 0.34 +Neigh | 0.051474 | 0.051474 | 0.051474 | 0.0 | 0.88 +Comm | 0.088405 | 0.088405 | 0.088405 | 0.0 | 1.51 +Output | 0.0004251 | 0.0004251 | 0.0004251 | 0.0 | 0.01 +Modify | 0.11323 | 0.11323 | 0.11323 | 0.0 | 1.93 +Other | | 0.01249 | | | 0.21 + +Nlocal: 587 ave 587 max 587 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 3622 ave 3622 max 3622 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 75556 ave 75556 max 75556 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 75556 +Ave neighs/atom = 128.716 +Ave special neighs/atom = 0.173765 +Neighbor list builds = 15 +Dangerous builds = 0