From 2fa9a986de88ded5c0768be36b0a7935c2b5777a Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Thu, 21 Jun 2018 10:48:07 -0500 Subject: [PATCH 001/143] Strip out all but NEIGH_PURE_F and Loca from pair_kim Progress toward implementation of kim-api-v2 support --- src/KIM/pair_kim.cpp | 458 +++++-------------------------------------- src/KIM/pair_kim.h | 26 +-- 2 files changed, 56 insertions(+), 428 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index fe638214ba..8947bd6c3b 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -18,8 +18,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the openkim-api-v1.5.0 package and for use with - the kim-api-v1.6.0 (and newer) package + Designed for use with the kim-api-v1.6.0 (and newer) package ------------------------------------------------------------------------- */ #include @@ -42,13 +41,6 @@ #include "KIM_API.h" #include "KIM_API_status.h" -#ifndef KIM_API_VERSION_MAJOR -// support v1.5.0 -#define KIM_API_VERSION_MAJOR 1 -#define KIM_API_VERSION_MINOR 5 -#define KIM_API_VERSION_PATCH 0 -#endif - using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ @@ -81,10 +73,7 @@ PairKIM::PairKIM(LAMMPS *lmp) : kim_global_cutoff(0.0), lmps_maxalloc(0), kim_particleSpecies(0), - lmps_force_tmp(0), - lmps_stripped_neigh_list(0), - kim_iterator_position(0), - Rij(0) + lmps_stripped_neigh_list(0) { // Initialize Pair data members to appropriate values single_enable = 0; // We do not provide the Single() function @@ -115,7 +104,6 @@ PairKIM::~PairKIM() // clean up local memory used to support KIM interface memory->destroy(kim_particleSpecies); - memory->destroy(lmps_force_tmp); memory->destroy(lmps_stripped_neigh_list); // clean up allocated memory for standard Pair class usage @@ -126,9 +114,6 @@ PairKIM::~PairKIM() delete [] lmps_map_species_to_unique; } - // clean up Rij array - memory->destroy(Rij); - // clean up KIM interface (if necessary) kim_free(); @@ -150,11 +135,9 @@ void PairKIM::compute(int eflag , int vflag) // needs to be atom->nmax in length if (atom->nmax > lmps_maxalloc) { memory->destroy(kim_particleSpecies); - memory->destroy(lmps_force_tmp); lmps_maxalloc = atom->nmax; memory->create(kim_particleSpecies,lmps_maxalloc,"pair:kim_particleSpecies"); - memory->create(lmps_force_tmp,lmps_maxalloc,3,"pair:lmps_force_tmp"); } // kim_particleSpecies = KIM atom species for each LAMMPS atom @@ -167,11 +150,6 @@ void PairKIM::compute(int eflag , int vflag) for (int i = 0; i < nall; i++) { ielement = lmps_map_species_to_unique[species[i]]; ielement = MAX(ielement,0); - // @@ this (above line) provides bogus info - // @@ (when lmps_map_species_to_unique[species[i]]==-1) to KIM, but - // @@ I guess this only happens when lmps_hybrid==true, - // @@ and we are sure that iterator mode will - // @@ not use these atoms.... (?) kim_particleSpecies[i] = kim_particle_codes[ielement]; } @@ -193,16 +171,6 @@ void PairKIM::compute(int eflag , int vflag) // assemble force and particleVirial if needed if (!lmps_using_newton) comm->reverse_comm_pair(this); - // sum lmps_force_tmp to f if running in hybrid mode - if (lmps_hybrid) { - double **f = atom->f; - for (int i = 0; i < nall; i++) { - f[i][0] += lmps_force_tmp[i][0]; - f[i][1] += lmps_force_tmp[i][1]; - f[i][2] += lmps_force_tmp[i][2]; - } - } - if ((no_virial_fdotr_compute == 1) && (vflag_global)) { // flip sign and order of virial if KIM is computing it for (int i = 0; i < 3; ++i) virial[i] = -1.0*virial[i]; @@ -313,6 +281,7 @@ void PairKIM::settings(int narg, char **arg) strcpy(kim_modelname, arg[1]); // set print_kim_file + // @@@ should be removed for v2; update docs if ((2 == narg) || ('0' == *(arg[2]))) { print_kim_file = false; @@ -341,13 +310,19 @@ void PairKIM::coeff(int narg, char **arg) if (narg != 2 + atom->ntypes) error->all(FLERR,"Incorrect args for pair coefficients"); + // insure I,J args are * * + + if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) + error->all(FLERR,"Incorrect args for pair coefficients"); + + int ilo,ihi,jlo,jhi; force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); // read args that map atom species to KIM elements // lmps_map_species_to_unique[i] = - // which element the Ith atom type is, -1 if NULL + // which element the Ith atom type is // lmps_num_unique_elements = # of unique elements // lmps_unique_elements = list of element names @@ -360,23 +335,20 @@ void PairKIM::coeff(int narg, char **arg) lmps_unique_elements = new char*[atom->ntypes]; for (i = 0; i < atom->ntypes; i++) lmps_unique_elements[i] = 0; + + // Assume all species arguments are valid + // errors will be detected by kim_api_init() matching lmps_num_unique_elements = 0; for (i = 2; i < narg; i++) { - if (strcmp(arg[i],"NULL") == 0) { - if (!lmps_hybrid) - error->all(FLERR,"Invalid args for non-hybrid pair coefficients"); - lmps_map_species_to_unique[i-1] = -1; - continue; - } - for (j = 0; j < lmps_num_unique_elements; j++) - if (strcmp(arg[i],lmps_unique_elements[j]) == 0) break; - lmps_map_species_to_unique[i-1] = j; - if (j == lmps_num_unique_elements) { - n = strlen(arg[i]) + 1; - lmps_unique_elements[j] = new char[n]; - strcpy(lmps_unique_elements[j],arg[i]); - lmps_num_unique_elements++; - } + for (j = 0; j < lmps_num_unique_elements; j++) + if (strcmp(arg[i],lmps_unique_elements[j]) == 0) break; + lmps_map_species_to_unique[i-1] = j; + if (j == lmps_num_unique_elements) { + n = strlen(arg[i]) + 1; + lmps_unique_elements[j] = new char[n]; + strcpy(lmps_unique_elements[j],arg[i]); + lmps_num_unique_elements++; + } } int count = 0; @@ -419,43 +391,18 @@ void PairKIM::init_style() else { kim_model_init_ok = true; - - // allocate enough memory to ensure we are safe - // (by using neighbor->oneatom) - if (kim_model_using_Rij) - memory->create(Rij,3*(neighbor->oneatom),"pair:Rij"); } } - // request none, half, or full neighbor list - // depending on KIM model requirement + // make sure comm_reverse expects (at most) 9 values when newton is off + if (!lmps_using_newton) comm_reverse_off = 9; + // request full neighbor list int irequest = neighbor->request(this,instance_me); - if (kim_model_using_cluster) - { - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->full = 0; - } - else - { - // make sure comm_reverse expects (at most) 9 values when newton is off - if (!lmps_using_newton) comm_reverse_off = 9; - - if (kim_model_using_half) - { - neighbor->requests[irequest]->half = 1; - neighbor->requests[irequest]->full = 0; - // make sure half lists also include local-ghost pairs - if (lmps_using_newton) neighbor->requests[irequest]->newton = 2; - } - else - { - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->full = 1; - // make sure full lists also include local-ghost pairs - if (lmps_using_newton) neighbor->requests[irequest]->newton = 0; - } - } + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + // make sure full lists also include local-ghost pairs + if (lmps_using_newton) neighbor->requests[irequest]->newton = 0; return; } @@ -476,27 +423,11 @@ double PairKIM::init_one(int i, int j) /* ---------------------------------------------------------------------- */ -void PairKIM::reinit() -{ - // This is called by fix-adapt - - // Call parent class implementation - Pair::reinit(); - - // Then reinit KIM model - int kimerror; - kimerror = pkim->model_reinit(); - kim_error(__LINE__,"model_reinit unsuccessful", kimerror); -} - -/* ---------------------------------------------------------------------- */ - int PairKIM::pack_reverse_comm(int n, int first, double *buf) { int i,m,last; double *fp; - if (lmps_hybrid) fp = &(lmps_force_tmp[0][0]); - else fp = &(atom->f[0][0]); + fp = &(atom->f[0][0]); m = 0; last = first + n; @@ -555,8 +486,7 @@ void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) { int i,j,m; double *fp; - if (lmps_hybrid) fp = &(lmps_force_tmp[0][0]); - else fp = &(atom->f[0][0]); + fp = &(atom->f[0][0]); m = 0; if ((kim_model_has_forces) && ((vflag_atom == 0) || @@ -643,13 +573,6 @@ int PairKIM::get_neigh(void **kimmdl,int *mode,int *request, int kimerror; PairKIM *self = (PairKIM *) pkim->get_sim_buffer(&kimerror); - if (self->kim_model_using_Rij) { - *pRij = &(self->Rij[0]); - } else { - *pRij = 0; - } - - // subvert KIM api by using direct access to self->list // // get neighObj from KIM API obj @@ -671,53 +594,7 @@ int PairKIM::get_neigh(void **kimmdl,int *mode,int *request, firstneigh = neiobj->firstneigh; // ptr to 1st J int value of each I atom if (*mode==0){ //iterator mode - if (*request==1) { //increment iterator - if (self->kim_iterator_position < inum) { - *atom = ilist[self->kim_iterator_position]; - *numnei = numneigh[*atom]; - - // strip off neighbor mask for molecular systems - if (!self->lmps_using_molecular) - *nei1atom = firstneigh[*atom]; - else - { - int n = *numnei; - int *ptr = firstneigh[*atom]; - int *lmps_stripped_neigh_list = self->lmps_stripped_neigh_list; - for (int i = 0; i < n; i++) - lmps_stripped_neigh_list[i] = *(ptr++) & NEIGHMASK; - *nei1atom = lmps_stripped_neigh_list; - } - - // set Rij if needed - if (self->kim_model_using_Rij) { - double* x = (double *) - (*pkim).get_data_by_index(self->kim_ind_coordinates, - &kimerror); - for (jj=0; jj < *numnei; jj++) { - int i = *atom; - j = (*nei1atom)[jj]; - self->Rij[jj*3 +0] = -x[i*3+0] + x[j*3+0]; - self->Rij[jj*3 +1] = -x[i*3+1] + x[j*3+1]; - self->Rij[jj*3 +2] = -x[i*3+2] + x[j*3+2]; - } - } - - // increment iterator - self->kim_iterator_position++; - - return KIM_STATUS_OK; //successful increment - } else if (self->kim_iterator_position == inum) { - *numnei = 0; - return KIM_STATUS_NEIGH_ITER_PAST_END; //reached end by iterator - } else if (self->kim_iterator_position > inum || inum < 0){ - self->error->one(FLERR, "KIM neighbor iterator exceeded range"); - } - } else if (*request == 0){ //restart iterator - self->kim_iterator_position = 0; - *numnei = 0; - return KIM_STATUS_NEIGH_ITER_INIT_OK; //succsesful restart - } + return KIM_STATUS_NEIGH_INVALID_MODE; //unsupported mode } else if (*mode == 1){//locator mode //... if (*request < inum) { @@ -737,18 +614,7 @@ int PairKIM::get_neigh(void **kimmdl,int *mode,int *request, *nei1atom = lmps_stripped_neigh_list; } - // set Rij if needed - if (self->kim_model_using_Rij){ - double* x = (double *) - (*pkim).get_data_by_index(self->kim_ind_coordinates, &kimerror); - for(int jj=0; jj < *numnei; jj++){ - int i = *atom; - int j = (*nei1atom)[jj]; - self->Rij[jj*3 +0] = -x[i*3+0] + x[j*3+0]; - self->Rij[jj*3 +1] = -x[i*3+1] + x[j*3+1]; - self->Rij[jj*3 +2] = -x[i*3+2] + x[j*3+2]; - } - } + *pRij = NULL; return KIM_STATUS_OK; //successful end } else if (*request >= nAtoms || inum < 0) @@ -800,8 +666,6 @@ void PairKIM::kim_init() { int kimerror; - // - // determine KIM Model capabilities (used in this function below) set_kim_model_has_flags(); @@ -827,40 +691,19 @@ void PairKIM::kim_init() test_descriptor_string = 0; } - // determine kim_model_using_* true/false values - // - // check for half or full list - kim_model_using_half = (pkim->is_half_neighbors(&kimerror)); - // - const char* NBC_method; - kimerror = pkim->get_NBC_method(&NBC_method); - kim_error(__LINE__,"NBC method not set",kimerror); - // check for CLUSTER mode - kim_model_using_cluster = (strcmp(NBC_method,"CLUSTER")==0); - // check if Rij needed for get_neigh - kim_model_using_Rij = ((strcmp(NBC_method,"NEIGH_RVEC_H")==0) || - (strcmp(NBC_method,"NEIGH_RVEC_F")==0)); - // get correct index of each variable in kim_api object - pkim->getm_index(&kimerror, 3*13, + pkim->getm_index(&kimerror, 3*12, "coordinates", &kim_ind_coordinates, 1, "cutoff", &kim_ind_cutoff, 1, "numberOfParticles", &kim_ind_numberOfParticles, 1, -#if KIM_API_VERSION_MAJOR == 1 && KIM_API_VERSON_MINOR == 5 - "numberParticleTypes", &kim_ind_numberOfSpecies, 1, - "particleTypes", &kim_ind_particleSpecies, 1, -#else "numberOfSpecies", &kim_ind_numberOfSpecies, 1, "particleSpecies", &kim_ind_particleSpecies, 1, -#endif - "numberContributingParticles", &kim_ind_numberContributingParticles, - kim_model_using_half, "particleEnergy", &kim_ind_particleEnergy, (int) kim_model_has_particleEnergy, "energy", &kim_ind_energy, (int) kim_model_has_energy, "forces", &kim_ind_forces, (int) kim_model_has_forces, - "neighObject", &kim_ind_neighObject, (int) !kim_model_using_cluster, - "get_neigh", &kim_ind_get_neigh, (int) !kim_model_using_cluster, + "neighObject", &kim_ind_neighObject, 1, + "get_neigh", &kim_ind_get_neigh, 1, "particleVirial", &kim_ind_particleVirial, (int) kim_model_has_particleVirial, "virial", &kim_ind_virial, no_virial_fdotr_compute); @@ -891,21 +734,17 @@ void PairKIM::set_statics() lmps_local_tot_num_atoms = (int) (atom->nghost + atom->nlocal); int kimerror; - pkim->setm_data_by_index(&kimerror, 4*6, + pkim->setm_data_by_index(&kimerror, 4*5, kim_ind_numberOfSpecies, 1, (void *) &(atom->ntypes), 1, kim_ind_cutoff, 1, (void *) &(kim_global_cutoff), 1, kim_ind_numberOfParticles, 1, (void *) &lmps_local_tot_num_atoms, 1, - kim_ind_numberContributingParticles, 1, (void *) &(atom->nlocal), - (int) kim_model_using_half, kim_ind_energy, 1, (void *) &(eng_vdwl), (int) kim_model_has_energy, kim_ind_virial, 1, (void *) &(virial[0]), no_virial_fdotr_compute); kim_error(__LINE__, "setm_data_by_index", kimerror); - if (!kim_model_using_cluster) - { - kimerror = pkim->set_method_by_index(kim_ind_get_neigh, 1, - (func_ptr) &get_neigh); - kim_error(__LINE__, "set_method_by_index", kimerror); - } + + kimerror = pkim->set_method_by_index(kim_ind_get_neigh, 1, + (func_ptr) &get_neigh); + kim_error(__LINE__, "set_method_by_index", kimerror); pkim->set_sim_buffer((void *)this, &kimerror); kim_error(__LINE__, "set_sim_buffer", kimerror); @@ -942,13 +781,9 @@ void PairKIM::set_volatiles() if (kim_model_has_forces) { - if (lmps_hybrid) - kimerror = pkim->set_data_by_index(kim_ind_forces, nall*3, - (void*) &(lmps_force_tmp[0][0])); - else - kimerror = pkim->set_data_by_index(kim_ind_forces, nall*3, - (void*) &(atom->f[0][0])); - kim_error(__LINE__, "setm_data_by_index", kimerror); + kimerror = pkim->set_data_by_index(kim_ind_forces, nall*3, + (void*) &(atom->f[0][0])); + kim_error(__LINE__, "set_data_by_index", kimerror); } // subvert the KIM api by direct access to this->list in get_neigh @@ -994,16 +829,10 @@ void PairKIM::set_lmps_flags() } // determine if running with pair hybrid - lmps_hybrid = (force->pair_match("hybrid",0)); - - // support cluster mode if everything is just right - lmps_support_cluster = ((domain->xperiodic == 0 && - domain->yperiodic == 0 && - domain->zperiodic == 0 - ) - && - (comm->nprocs == 1) - ); + if (force->pair_match("hybrid",0)) + { + error->all(FLERR,"pair_kim does not support hybrid."); + } // determine unit system and set lmps_units flag if ((strcmp(update->unit_style,"real")==0)) @@ -1177,30 +1006,9 @@ void PairKIM::write_descriptor(char** test_descriptor_string) "\n" "CONVENTIONS:\n" "# Name Type\n" - "ZeroBasedLists flag\n"); - // can use iterator or locator neighbor mode, unless in hybrid mode - if (lmps_hybrid) - strcat(*test_descriptor_string, - "Neigh_IterAccess flag\n"); - else - strcat(*test_descriptor_string, - "Neigh_BothAccess flag\n\n"); - - strcat(*test_descriptor_string, - "NEIGH_PURE_H flag\n" - "NEIGH_PURE_F flag\n" - "NEIGH_RVEC_H flag\n" - "NEIGH_RVEC_F flag\n"); - // @@ add code for MI_OPBC_? support ???? - if (lmps_support_cluster) - { - strcat(*test_descriptor_string, - "CLUSTER flag\n\n"); - } - else - { - strcat(*test_descriptor_string, "\n"); - } + "ZeroBasedLists flag\n" + "Neigh_LocaAccess flag\n" + "NEIGH_PURE_F flag\n\n"); // Write input section strcat(*test_descriptor_string, @@ -1208,14 +1016,8 @@ void PairKIM::write_descriptor(char** test_descriptor_string) "MODEL_INPUT:\n" "# Name Type Unit Shape\n" "numberOfParticles integer none []\n" - "numberContributingParticles integer none []\n" -#if KIM_API_VERSION_MAJOR == 1 && KIM_API_VERSON_MINOR == 5 - "numberParticleTypes integer none []\n" - "particleTypes integer none " -#else "numberOfSpecies integer none []\n" "particleSpecies integer none " -#endif "[numberOfParticles]\n" "coordinates double length " "[numberOfParticles,3]\n" @@ -1256,161 +1058,3 @@ void PairKIM::write_descriptor(char** test_descriptor_string) return; } - -void *PairKIM::extract(const char *str, int &dim) -{ - void *paramData; - int kimerror=0; - int ier; - int dummyint; - int isIndexed = 0; - const int MAXLINE = 1024; - int rank; - int validParam = 0; - int numParams; - int *speciesIndex = new int[MAXLINE]; - char *paramStr = new char[MAXLINE]; - char *paramName; - char *indexStr; - char message[MAXLINE]; - int offset; - double* paramPtr; - - // set dim to 0, we will always deal with scalars to circumvent lammps species - // indexing - dim = 0; - - // copy the input str into paramStr for parsing - strcpy(paramStr, str); - // get the name of the parameter (whatever is before ":") - paramName = strtok(paramStr, ":"); - if (0 == strcmp(paramName, str)) - paramName = (char*) str; - else - isIndexed = 1; - - // parse the rest of the string into tokens deliminated by "," and convert - // them to integers, saving them into speciesIndex - int count = -1; - if (isIndexed == 1) - { - while((indexStr = strtok(NULL, ",")) != NULL) - { - count++; - ier = sscanf(indexStr, "%d", &speciesIndex[count]); - if (ier != 1) - { - ier = -1; - break; - } - } - } - if (ier == -1) - { - delete [] speciesIndex, speciesIndex = 0; - delete [] paramStr, paramStr = 0; - kim_error(__LINE__,"error in PairKIM::extract(), invalid parameter-indicie format", KIM_STATUS_FAIL); - } - - // check to make sure that the requested parameter is a valid free parameter - - kimerror = pkim->get_num_params(&numParams, &dummyint); - kim_error(__LINE__, "get_num_free_params", kimerror); - char **freeParamNames = new char*[numParams]; - for (int k = 0; k < numParams; k++) - { - kimerror = pkim->get_free_parameter(k, (const char**) &freeParamNames[k]); - kim_error(__LINE__, "get_free_parameter", kimerror); - if (0 == strcmp(paramName, freeParamNames[k])) - { - validParam = 1; - break; - } - } - delete [] freeParamNames, freeParamNames = 0; - if (validParam == 0) - { - sprintf(message, "Invalid parameter to adapt: \"%s\" is not a FREE_PARAM", paramName); - delete [] speciesIndex, speciesIndex = 0; - delete [] paramStr, paramStr = 0; - kim_error(__LINE__, message, KIM_STATUS_FAIL); - } - - // get the parameter arry from pkim object - paramData = pkim->get_data(paramName, &kimerror); - if (kimerror == KIM_STATUS_FAIL) - { - delete [] speciesIndex, speciesIndex = 0; - delete [] paramStr, paramStr = 0; - } - kim_error(__LINE__,"get_data",kimerror); - - // get rank and shape of parameter - rank = (*pkim).get_rank(paramName, &kimerror); - if (kimerror == KIM_STATUS_FAIL) - { - delete [] speciesIndex, speciesIndex = 0; - delete [] paramStr, paramStr = 0; - } - kim_error(__LINE__,"get_rank",kimerror); - - int *shape = new int[MAXLINE]; - dummyint = (*pkim).get_shape(paramName, shape, &kimerror); - if (kimerror == KIM_STATUS_FAIL) - { - delete [] speciesIndex, speciesIndex = 0; - delete [] paramStr, paramStr = 0; - delete [] shape, shape = 0; - } - kim_error(__LINE__,"get_shape",kimerror); - - delete [] paramStr, paramStr = 0; - // check that number of inputs is rank, and that input indicies are less than - // their respective dimensions in shape - if ((count+1) != rank) - { - sprintf(message, "Number of input indicies not equal to rank of specified parameter (%d)", rank); - kimerror = KIM_STATUS_FAIL; - delete [] speciesIndex, speciesIndex = 0; - delete [] shape, shape = 0; - kim_error(__LINE__,message, kimerror); - } - if (isIndexed == 1) - { - for (int i=0; i <= count; i++) - { - if (shape[i] <= speciesIndex[i] || speciesIndex[i] < 0) - { - kimerror = KIM_STATUS_FAIL; - break; - } - } - } - delete [] shape, shape = 0; - if (kimerror == KIM_STATUS_FAIL) - { - sprintf(message, "One or more parameter indicies out of bounds"); - delete [] speciesIndex, speciesIndex = 0; - kim_error(__LINE__, message, kimerror); - } - - // Cast it to a double - paramPtr = static_cast(paramData); - - // If it is indexed (not just a scalar for the whole model), then get pointer - // corresponding to specified indicies by calculating the adress offset using - // specified indicies and the shape - if (isIndexed == 1) - { - offset = 0; - for (int i = 0; i < (rank-1); i++) - { - offset = (offset + speciesIndex[i]) * shape[i+1]; - } - offset = offset + speciesIndex[(rank - 1)]; - paramPtr = (paramPtr + offset); - } - delete [] speciesIndex, speciesIndex = 0; - - return ((void*) paramPtr); -} diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index fb4cda8af9..493aa9066a 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -18,8 +18,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the openkim-api-v1.5.0 package and for use with - the kim-api-v1.6.0 (and newer) package + Designed for use with the kim-api-v1.6.0 (and newer) package ------------------------------------------------------------------------- */ #ifdef PAIR_CLASS @@ -49,11 +48,9 @@ namespace LAMMPS_NS { virtual void coeff(int, char**); virtual void init_style(); virtual double init_one(int, int); - virtual void reinit(); virtual int pack_reverse_comm(int, int, double*); virtual void unpack_reverse_comm(int, int*, double*); virtual double memory_usage(); - void *extract(const char *, int &); private: // (nearly) all bool flags are not initialized in constructor, but set @@ -80,9 +77,6 @@ namespace LAMMPS_NS { // values set in set_lmps_flags(), called from init_style() bool lmps_using_newton; bool lmps_using_molecular; - bool lmps_hybrid; // true if running with pair hybrid - bool lmps_support_cluster; // true if running in mode compat. - // with CLUSTER enum unit_sys {REAL, METAL, SI, CGS, ELECTRON}; unit_sys lmps_units; @@ -95,9 +89,6 @@ namespace LAMMPS_NS { // values set in kim_init(), after call to string_init(_) bool kim_init_ok; - bool kim_model_using_half; - bool kim_model_using_cluster; - bool kim_model_using_Rij; int kim_ind_coordinates; int kim_ind_numberOfParticles; int kim_ind_numberContributingParticles; @@ -125,16 +116,9 @@ namespace LAMMPS_NS { // values set in compute() int lmps_maxalloc; // max allocated memory value int* kim_particleSpecies; // array of KIM particle species - double** lmps_force_tmp; // temp storage for f, when running in - // hybrid mode needed to avoid resetting - // f to zero in each object int* lmps_stripped_neigh_list; // neighbors of one atom, used when LAMMPS // is in molecular mode - // values used in get_neigh() - int kim_iterator_position; //get_neigh iterator current position - double *Rij; - // KIM specific helper functions void kim_error(int, const char *, int); void kim_init(); @@ -199,19 +183,19 @@ Self-explanatory. Check the input script or data file. W: KIM Model does not provide `energy'; Potential energy will be zero -UNDOCUMENTED +Self-explanatory. W: KIM Model does not provide `forces'; Forces will be zero -UNDOCUMENTED +Self-explanatory. W: KIM Model does not provide `particleEnergy'; energy per atom will be zero -UNDOCUMENTED +Self-explanatory. W: KIM Model does not provide `particleVirial'; virial per atom will be zero -UNDOCUMENTED + E: Test_descriptor_string already allocated From 8bbba22867fd451d451875b72b3c462b79815c9d Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Fri, 22 Jun 2018 13:33:15 -0500 Subject: [PATCH 002/143] First working version of pair_kim with kim-api-v2 --- lib/kim/Install.py | 8 +- lib/kim/Makefile.lammps | 6 +- src/KIM/pair_kim.cpp | 677 ++++++++++++++++------------------------ src/KIM/pair_kim.h | 40 ++- 4 files changed, 289 insertions(+), 442 deletions(-) diff --git a/lib/kim/Install.py b/lib/kim/Install.py index d098250906..1bcaffd34a 100644 --- a/lib/kim/Install.py +++ b/lib/kim/Install.py @@ -21,7 +21,7 @@ Syntax from lib dir: python Install.py -b -v version -a kim-name specify one or more options, order does not matter -v = version of KIM API library to use - default = kim-api-v1.9.5 (current as of May 2018) + default = kim-api-v2.0.0-beta.0 (current as of June 2018) -b = download and build base KIM API library with example Models this will delete any previous installation in the current folder -n = do NOT download and build base KIM API library. @@ -109,7 +109,7 @@ nargs = len(args) if nargs == 0: error() thisdir = os.environ['PWD'] -version = "kim-api-v1.9.5" +version = "kim-api-v2.0.0-beta.0" buildflag = False everythingflag = False @@ -234,7 +234,7 @@ if buildflag: # add all OpenKIM models, if desired if everythingflag: print("Adding all OpenKIM models, this will take a while ...") - cmd = '%s/bin/kim-api-v1-collections-management install system OpenKIM' % (kimdir) + cmd = '%s/bin/kim-api-v2-collections-management install system OpenKIM' % (kimdir) txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) if verboseflag: print(txt.decode("UTF-8")) @@ -251,6 +251,6 @@ if addflag: error() # download single model - cmd = '%s/bin/kim-api-v1-collections-management install system %s' % (kimdir.decode("UTF-8"), addmodelname) + cmd = '%s/bin/kim-api-v2-collections-management install system %s' % (kimdir.decode("UTF-8"), addmodelname) txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) if verboseflag: print (txt.decode("UTF-8")) diff --git a/lib/kim/Makefile.lammps b/lib/kim/Makefile.lammps index d73891d1e2..c7c9d9fd2f 100644 --- a/lib/kim/Makefile.lammps +++ b/lib/kim/Makefile.lammps @@ -18,10 +18,10 @@ include ../../lib/kim/Makefile.KIM_DIR -ifeq ($(wildcard $(KIM_INSTALL_DIR)/bin/kim-api-v1-build-config),) - KIM_CONFIG_HELPER = kim-api-v1-build-config +ifeq ($(wildcard $(KIM_INSTALL_DIR)/bin/kim-api-v2-build-config),) + KIM_CONFIG_HELPER = kim-api-v2-build-config else - KIM_CONFIG_HELPER = $(KIM_INSTALL_DIR)/bin/kim-api-v1-build-config + KIM_CONFIG_HELPER = $(KIM_INSTALL_DIR)/bin/kim-api-v2-build-config endif ifeq ($(shell $(KIM_CONFIG_HELPER) --version 2> /dev/null),) $(error $(KIM_CONFIG_HELPER) utility is not available. Something is wrong with your KIM API package setup) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 8947bd6c3b..413c5303e1 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -37,10 +37,6 @@ #include "domain.h" #include "error.h" -// includes from KIM -#include "KIM_API.h" -#include "KIM_API_status.h" - using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ @@ -55,24 +51,15 @@ PairKIM::PairKIM(LAMMPS *lmp) : lmps_num_unique_elements(0), lmps_units(METAL), pkim(0), - kim_ind_coordinates(-1), - kim_ind_numberOfParticles(-1), - kim_ind_numberContributingParticles(-1), - kim_ind_numberOfSpecies(-1), - kim_ind_particleSpecies(-1), - kim_ind_get_neigh(-1), - kim_ind_neighObject(-1), - kim_ind_cutoff(-1), - kim_ind_energy(-1), - kim_ind_particleEnergy(-1), - kim_ind_forces(-1), - kim_ind_virial(-1), - kim_ind_particleVirial(-1), + pargs(0), kim_particle_codes(0), lmps_local_tot_num_atoms(0), - kim_global_cutoff(0.0), + kim_global_influence_distance(0.0), + kim_number_of_cutoffs(0), + kim_cutoff_values(0), lmps_maxalloc(0), kim_particleSpecies(0), + kim_particleContributing(0), lmps_stripped_neigh_list(0) { // Initialize Pair data members to appropriate values @@ -104,6 +91,7 @@ PairKIM::~PairKIM() // clean up local memory used to support KIM interface memory->destroy(kim_particleSpecies); + memory->destroy(kim_particleContributing); memory->destroy(lmps_stripped_neigh_list); // clean up allocated memory for standard Pair class usage @@ -131,13 +119,27 @@ void PairKIM::compute(int eflag , int vflag) else ev_unset(); - // grow kim_particleSpecies array if necessary + // grow kim_particleSpecies and kim_particleContributing array if necessary // needs to be atom->nmax in length if (atom->nmax > lmps_maxalloc) { memory->destroy(kim_particleSpecies); + memory->destroy(kim_particleContributing); lmps_maxalloc = atom->nmax; - memory->create(kim_particleSpecies,lmps_maxalloc,"pair:kim_particleSpecies"); + memory->create(kim_particleSpecies,lmps_maxalloc, + "pair:kim_particleSpecies"); + int kimerror = pargs->SetArgumentPointer( + KIM::COMPUTE_ARGUMENT_NAME::particleSpeciesCodes, + kim_particleSpecies); + memory->create(kim_particleContributing,lmps_maxalloc, + "pair:kim_particleContributing"); + kimerror = kimerror || pargs->SetArgumentPointer( + KIM::COMPUTE_ARGUMENT_NAME::particleContributing, + kim_particleContributing); + if (kimerror) + error->all( + FLERR, + "Unable to set KIM particle species codes and/or contributing"); } // kim_particleSpecies = KIM atom species for each LAMMPS atom @@ -151,23 +153,17 @@ void PairKIM::compute(int eflag , int vflag) ielement = lmps_map_species_to_unique[species[i]]; ielement = MAX(ielement,0); kim_particleSpecies[i] = kim_particle_codes[ielement]; + + kim_particleContributing[i] = ( (inlocal) ? 1 : 0 ); } // pass current atom pointers to KIM set_volatiles(); - pkim->setm_compute_by_index(&kimerror,3*3, - kim_ind_particleEnergy, eflag_atom, - (int) kim_model_has_particleEnergy, - kim_ind_particleVirial, vflag_atom, - (int) kim_model_has_particleVirial, - kim_ind_virial, vflag_global!=0, - no_virial_fdotr_compute); - kim_error(__LINE__,"setm_compute_by_index",kimerror); - // compute via KIM model - kimerror = pkim->model_compute(); - kim_error(__LINE__,"PairKIM::pkim->model_compute() error",kimerror); + kimerror = pkim->Compute(pargs); + if (kimerror) error->all(FLERR,"KIM Compute returned error"); + // assemble force and particleVirial if needed if (!lmps_using_newton) comm->reverse_comm_pair(this); @@ -280,17 +276,6 @@ void PairKIM::settings(int narg, char **arg) kim_modelname = new char[nmlen+1]; strcpy(kim_modelname, arg[1]); - // set print_kim_file - // @@@ should be removed for v2; update docs - if ((2 == narg) || ('0' == *(arg[2]))) - { - print_kim_file = false; - } - else - { - print_kim_file = true; - } - return; } @@ -385,13 +370,6 @@ void PairKIM::init_style() if (!kim_init_ok) { kim_init(); - kimerror = pkim->model_init(); - if (kimerror != KIM_STATUS_OK) - kim_error(__LINE__, "KIM API:model_init() failed", kimerror); - else - { - kim_model_init_ok = true; - } } // make sure comm_reverse expects (at most) 9 values when newton is off @@ -418,7 +396,7 @@ double PairKIM::init_one(int i, int j) if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); - return kim_global_cutoff; + return kim_global_influence_distance; } /* ---------------------------------------------------------------------- */ @@ -554,38 +532,31 @@ double PairKIM::memory_usage() KIM-specific interface ------------------------------------------------------------------------- */ -void PairKIM::kim_error(int ln, const char* msg, int errcode) +int PairKIM::get_neigh(void const * const dataObject, + int const numberOfCutoffs, double const * const cutoffs, + int const neighborListIndex, int const particleNumber, + int * const numberOfNeighbors, + int const ** const neighborsOfParticle) { - if (errcode == KIM_STATUS_OK) return; - KIM_API_model::report_error(ln,(char *) __FILE__, (char *) msg,errcode); - error->all(__FILE__,ln,"Internal KIM error"); + PairKIM const * const Model + = reinterpret_cast(dataObject); - return; -} + if ((numberOfCutoffs != 1) || (cutoffs[0] > Model->kim_cutoff_values[0])) + return true; -/* ---------------------------------------------------------------------- */ + if (neighborListIndex != 0) return true; -int PairKIM::get_neigh(void **kimmdl,int *mode,int *request, - int *atom, int *numnei, int **nei1atom, double **pRij) -{ - KIM_API_model *pkim = (KIM_API_model *) *kimmdl; + // initialize numNeigh + *numberOfNeighbors = 0; - int kimerror; - PairKIM *self = (PairKIM *) pkim->get_sim_buffer(&kimerror); + if ((particleNumber >= Model->lmps_local_tot_num_atoms) || + (particleNumber < 0)) /* invalid id */ + { + return true; + } - // subvert KIM api by using direct access to self->list - // - // get neighObj from KIM API obj - // NeighList * neiobj = (NeighList * ) - // (*pkim).get_data_by_index(self->kim_ind_neighObject, &kimerror); - NeighList * neiobj = self->list; - - // subvert KIM api by using direct acces to self->lmps_local_tot_num_atoms - // - //int * pnAtoms = (int *) - // (*pkim).get_data_by_index(self->kim_ind_numberOfParticles, &kimerror); - //int nAtoms = *pnAtoms; - int nAtoms = self->lmps_local_tot_num_atoms; + NeighList * neiobj = Model->list; + int nAtoms = Model->lmps_local_tot_num_atoms; int j, jj, inum, *ilist, *numneigh, **firstneigh; inum = neiobj->inum; //# of I atoms neighbors are stored for @@ -593,40 +564,21 @@ int PairKIM::get_neigh(void **kimmdl,int *mode,int *request, numneigh = neiobj->numneigh; // # of J neighbors for each I atom firstneigh = neiobj->firstneigh; // ptr to 1st J int value of each I atom - if (*mode==0){ //iterator mode - return KIM_STATUS_NEIGH_INVALID_MODE; //unsupported mode - } else if (*mode == 1){//locator mode - //... - if (*request < inum) { - *atom = *request; - *numnei = numneigh[*atom]; + *numberOfNeighbors = numneigh[particleNumber]; - // strip off neighbor mask for molecular systems - if (!self->lmps_using_molecular) - *nei1atom = firstneigh[*atom]; - else - { - int n = *numnei; - int *ptr = firstneigh[*atom]; - int *lmps_stripped_neigh_list = self->lmps_stripped_neigh_list; - for (int i = 0; i < n; i++) - lmps_stripped_neigh_list[i] = *(ptr++) & NEIGHMASK; - *nei1atom = lmps_stripped_neigh_list; - } - - *pRij = NULL; - return KIM_STATUS_OK; //successful end - } - else if (*request >= nAtoms || inum < 0) - return KIM_STATUS_NEIGH_INVALID_REQUEST; - else if (*request >= inum) { - *atom = *request; - *numnei = 0; - return KIM_STATUS_OK; //successfull but no neighbors in the list - } - } else return KIM_STATUS_NEIGH_INVALID_MODE; //invalid mode - - return -16; //should not get here: unspecified error + // strip off neighbor mask for molecular systems + if (!Model->lmps_using_molecular) + *neighborsOfParticle = firstneigh[particleNumber]; + else + { + int n = *numberOfNeighbors; + int *ptr = firstneigh[particleNumber]; + int *lmps_stripped_neigh_list = Model->lmps_stripped_neigh_list; + for (int i = 0; i < n; i++) + lmps_stripped_neigh_list[i] = *(ptr++) & NEIGHMASK; + *neighborsOfParticle = lmps_stripped_neigh_list; + } + return false; } /* ---------------------------------------------------------------------- */ @@ -637,19 +589,15 @@ void PairKIM::kim_free() if (kim_model_init_ok) { - kimerror = pkim->model_destroy(); - kim_model_init_ok = false; - } - if (kim_init_ok) - { - pkim->free(&kimerror); - kim_init_ok = false; - } - if (pkim != 0) - { - delete pkim; - pkim = 0; + int kimerror = pkim->ComputeArgumentsDestroy(&pargs); + if (kimerror) + error->all(FLERR,"Unable to destroy Compute Arguments Object"); + + KIM::Model::Destroy(&pkim); + kim_model_init_ok = false; } + kim_init_ok = false; + if (kim_particle_codes_ok) { delete [] kim_particle_codes; @@ -666,58 +614,47 @@ void PairKIM::kim_init() { int kimerror; + // initialize KIM model + int requestedUnitsAccepted; + kimerror = KIM::Model::Create( + KIM::NUMBERING::zeroBased, + lengthUnit, energyUnit, chargeUnit, temperatureUnit, timeUnit, + kim_modelname, + &requestedUnitsAccepted, + &pkim); + if (kimerror) + error->all(FLERR,"KIM ModelCreate failed"); + else { + if (!requestedUnitsAccepted) { + // @@@ error for now. Fix as needed + error->all(FLERR,"KIM Model did not accept the requested unit system"); + } + + kimerror = pkim->ComputeArgumentsCreate(&pargs); + if (kimerror) + error->all(FLERR,"KIM ComputeArgumentsCreate failed"); + else + kim_init_ok = true; + } + // determine KIM Model capabilities (used in this function below) set_kim_model_has_flags(); - // create appropriate KIM descriptor file - char* test_descriptor_string = 0; - // allocate memory for test_descriptor_string and write descriptor file - write_descriptor(&test_descriptor_string); - // print descriptor - if (print_kim_file) - { - error->message(FLERR, test_descriptor_string); - } - - // initialize KIM model - pkim = new KIM_API_model(); - kimerror = pkim->string_init(test_descriptor_string, kim_modelname); - if (kimerror != KIM_STATUS_OK) - kim_error(__LINE__,"KIM initialization failed", kimerror); - else - { - kim_init_ok = true; - delete [] test_descriptor_string; - test_descriptor_string = 0; - } - - // get correct index of each variable in kim_api object - pkim->getm_index(&kimerror, 3*12, - "coordinates", &kim_ind_coordinates, 1, - "cutoff", &kim_ind_cutoff, 1, - "numberOfParticles", &kim_ind_numberOfParticles, 1, - "numberOfSpecies", &kim_ind_numberOfSpecies, 1, - "particleSpecies", &kim_ind_particleSpecies, 1, - "particleEnergy", &kim_ind_particleEnergy, - (int) kim_model_has_particleEnergy, - "energy", &kim_ind_energy, (int) kim_model_has_energy, - "forces", &kim_ind_forces, (int) kim_model_has_forces, - "neighObject", &kim_ind_neighObject, 1, - "get_neigh", &kim_ind_get_neigh, 1, - "particleVirial", &kim_ind_particleVirial, - (int) kim_model_has_particleVirial, - "virial", &kim_ind_virial, no_virial_fdotr_compute); - kim_error(__LINE__,"getm_index",kimerror); - // setup mapping between LAMMPS unique elements and KIM species codes kim_particle_codes = new int[lmps_num_unique_elements]; kim_particle_codes_ok = true; for(int i = 0; i < lmps_num_unique_elements; i++){ int kimerror; - kim_particle_codes[i] - = pkim->get_species_code(lmps_unique_elements[i], &kimerror); - kim_error(__LINE__, "create_kim_particle_codes: symbol not found ", - kimerror); + int supported; + int code; + kimerror = pkim->GetSpeciesSupportAndCode( + KIM::SpeciesName(lmps_unique_elements[i]), + &supported, + &code); + if (supported) + kim_particle_codes[i] = code; + else + error->all(FLERR,"create_kim_particle_codes: symbol not found "); } // set pointer values in KIM API object that will not change during run @@ -733,21 +670,26 @@ void PairKIM::set_statics() // set total number of atoms lmps_local_tot_num_atoms = (int) (atom->nghost + atom->nlocal); - int kimerror; - pkim->setm_data_by_index(&kimerror, 4*5, - kim_ind_numberOfSpecies, 1, (void *) &(atom->ntypes), 1, - kim_ind_cutoff, 1, (void *) &(kim_global_cutoff), 1, - kim_ind_numberOfParticles, 1, (void *) &lmps_local_tot_num_atoms, 1, - kim_ind_energy, 1, (void *) &(eng_vdwl), (int) kim_model_has_energy, - kim_ind_virial, 1, (void *) &(virial[0]), no_virial_fdotr_compute); - kim_error(__LINE__, "setm_data_by_index", kimerror); + pkim->GetInfluenceDistance(&kim_global_influence_distance); + pkim->GetNeighborListCutoffsPointer(&kim_number_of_cutoffs, + &kim_cutoff_values); - kimerror = pkim->set_method_by_index(kim_ind_get_neigh, 1, - (func_ptr) &get_neigh); - kim_error(__LINE__, "set_method_by_index", kimerror); + int kimerror = pargs->SetArgumentPointer( + KIM::COMPUTE_ARGUMENT_NAME::numberOfParticles, + &lmps_local_tot_num_atoms); + if (kim_model_has_energy) + kimerror = kimerror || pargs->SetArgumentPointer( + KIM::COMPUTE_ARGUMENT_NAME::partialEnergy, + &(eng_vdwl)); - pkim->set_sim_buffer((void *)this, &kimerror); - kim_error(__LINE__, "set_sim_buffer", kimerror); + kimerror = pargs->SetCallbackPointer( + KIM::COMPUTE_CALLBACK_NAME::GetNeighborList, + KIM::LANGUAGE_NAME::cpp, + reinterpret_cast(get_neigh), + reinterpret_cast(this)); + + if (kimerror) + error->all(FLERR,"Unable to register KIM static pointers"); return; } @@ -758,56 +700,56 @@ void PairKIM::set_volatiles() { int kimerror; lmps_local_tot_num_atoms = (int) (atom->nghost + atom->nlocal); - intptr_t nall = (intptr_t) lmps_local_tot_num_atoms; - pkim->setm_data_by_index(&kimerror, 4*2, - kim_ind_coordinates, 3*nall, (void*) &(atom->x[0][0]), 1, - kim_ind_particleSpecies, nall, (void*) kim_particleSpecies, 1); - kim_error(__LINE__, "setm_data_by_index", kimerror); + kimerror = pargs->SetArgumentPointer( + KIM::COMPUTE_ARGUMENT_NAME::coordinates, + &(atom->x[0][0])); if (kim_model_has_particleEnergy && (eflag_atom == 1)) { - kimerror = pkim->set_data_by_index(kim_ind_particleEnergy, nall, - (void*) eatom); - kim_error(__LINE__, "set_data_by_index", kimerror); - } - - if (kim_model_has_particleVirial && (vflag_atom == 1)) - { - kimerror = pkim->set_data_by_index(kim_ind_particleVirial, 6*nall, - (void*) &(vatom[0][0])); - kim_error(__LINE__, "set_data_by_index", kimerror); + kimerror = kimerror || pargs->SetArgumentPointer( + KIM::COMPUTE_ARGUMENT_NAME::partialParticleEnergy, + eatom); } if (kim_model_has_forces) { - kimerror = pkim->set_data_by_index(kim_ind_forces, nall*3, - (void*) &(atom->f[0][0])); - kim_error(__LINE__, "set_data_by_index", kimerror); + kimerror = kimerror || pargs->SetArgumentPointer( + KIM::COMPUTE_ARGUMENT_NAME::partialForces, + &(atom->f[0][0])); } - // subvert the KIM api by direct access to this->list in get_neigh - // - //if (!kim_model_using_cluster) - // kimerror = pkim->set_data_by_index(kim_ind_neighObject, 1, - // (void*) this->list); - if (kim_model_has_particleVirial) { - if(vflag_atom != 1) { - pkim->set_compute_by_index(kim_ind_particleVirial, KIM_COMPUTE_FALSE, - &kimerror); - } else { - pkim->set_compute_by_index(kim_ind_particleVirial, KIM_COMPUTE_TRUE, - &kimerror); - } + if(vflag_atom != 1) { + kimerror = kimerror || pargs->SetArgumentPointer( + KIM::COMPUTE_ARGUMENT_NAME::partialParticleVirial, + &(vatom[0][0])); + } else { + kimerror = kimerror || pargs->SetArgumentPointer( + KIM::COMPUTE_ARGUMENT_NAME::partialParticleVirial, + reinterpret_cast(NULL)); + } } if (no_virial_fdotr_compute == 1) { - pkim->set_compute_by_index(kim_ind_virial, - ((vflag_global != 1) ? KIM_COMPUTE_FALSE : KIM_COMPUTE_TRUE), - &kimerror); + if (kim_model_has_virial) + { + if (vflag_global == 1) + kimerror = kimerror || pargs->SetArgumentPointer( + KIM::COMPUTE_ARGUMENT_NAME::partialVirial, + &(virial[0])); + else + kimerror = kimerror || pargs->SetArgumentPointer( + KIM::COMPUTE_ARGUMENT_NAME::partialVirial, + reinterpret_cast(NULL)); + } + } + + if (kimerror) + { + error->all(FLERR,"Unable to set KIM volatile pointers"); } return; @@ -835,20 +777,46 @@ void PairKIM::set_lmps_flags() } // determine unit system and set lmps_units flag - if ((strcmp(update->unit_style,"real")==0)) - lmps_units = REAL; - else if ((strcmp(update->unit_style,"metal")==0)) - lmps_units = METAL; - else if ((strcmp(update->unit_style,"si")==0)) - lmps_units = SI; - else if ((strcmp(update->unit_style,"cgs")==0)) - lmps_units = CGS; - else if ((strcmp(update->unit_style,"electron")==0)) - lmps_units = ELECTRON; - else if ((strcmp(update->unit_style,"lj")==0)) - error->all(FLERR,"LAMMPS unit_style lj not supported by KIM models"); - else - error->all(FLERR,"Unknown unit_style"); + if ((strcmp(update->unit_style,"real")==0)) { + lmps_units = REAL; + lengthUnit = KIM::LENGTH_UNIT::A; + energyUnit = KIM::ENERGY_UNIT::kcal_mol; + chargeUnit = KIM::CHARGE_UNIT::e; + temperatureUnit = KIM::TEMPERATURE_UNIT::K; + timeUnit = KIM::TIME_UNIT::fs; + } else if ((strcmp(update->unit_style,"metal")==0)) { + lmps_units = METAL; + lengthUnit = KIM::LENGTH_UNIT::A; + energyUnit = KIM::ENERGY_UNIT::eV; + chargeUnit = KIM::CHARGE_UNIT::e; + temperatureUnit = KIM::TEMPERATURE_UNIT::K; + timeUnit = KIM::TIME_UNIT::ps; + } else if ((strcmp(update->unit_style,"si")==0)) { + lmps_units = SI; + lengthUnit = KIM::LENGTH_UNIT::m; + energyUnit = KIM::ENERGY_UNIT::J; + chargeUnit = KIM::CHARGE_UNIT::C; + temperatureUnit = KIM::TEMPERATURE_UNIT::K; + timeUnit = KIM::TIME_UNIT::s; + } else if ((strcmp(update->unit_style,"cgs")==0)) { + lmps_units = CGS; + lengthUnit = KIM::LENGTH_UNIT::cm; + energyUnit = KIM::ENERGY_UNIT::erg; + chargeUnit = KIM::CHARGE_UNIT::statC; + temperatureUnit = KIM::TEMPERATURE_UNIT::K; + timeUnit = KIM::TIME_UNIT::s; + } else if ((strcmp(update->unit_style,"electron")==0)) { + lmps_units = ELECTRON; + lengthUnit = KIM::LENGTH_UNIT::Bohr; + energyUnit = KIM::ENERGY_UNIT::Hartree; + chargeUnit = KIM::CHARGE_UNIT::e; + temperatureUnit = KIM::TEMPERATURE_UNIT::K; + timeUnit = KIM::TIME_UNIT::fs; + } else if ((strcmp(update->unit_style,"lj")==0)) { + error->all(FLERR,"LAMMPS unit_style lj not supported by KIM models"); + } else { + error->all(FLERR,"Unknown unit_style"); + } return; } @@ -857,204 +825,85 @@ void PairKIM::set_lmps_flags() void PairKIM::set_kim_model_has_flags() { - KIM_API_model mdl; - + // @@ the procedure below should be improved to be more comprehensive + // @@ and ensure that there are no additions/changes to the kim-api + // @@ that could cause a problem. This should be done using the + // @@ "discoverability" features of the kim-api int kimerror; + KIM::SupportStatus supportStatus; - // get KIM API object representing the KIM Model only - kimerror = mdl.model_info(kim_modelname); - kim_error(__LINE__,"KIM initialization failed", kimerror); + // determine if the KIM Model can compute the total partialEnergy - // determine if the KIM Model can compute the total energy - mdl.get_index((char*) "energy", &kimerror); - kim_model_has_energy = (kimerror == KIM_STATUS_OK); - if (!kim_model_has_energy) - error->warning(FLERR,"KIM Model does not provide `energy'; " + // determine if the KIM Model can compute the energy + kimerror = pargs->GetArgumentSupportStatus( + KIM::COMPUTE_ARGUMENT_NAME::partialEnergy, + &supportStatus); + if (kimerror) + error->all(FLERR,"Unable to get KIM Support Status"); + if (KIM::SUPPORT_STATUS::notSupported == supportStatus) { + kim_model_has_energy = false; + error->warning(FLERR,"KIM Model does not provide `partialEnergy'; " "Potential energy will be zero"); + } else { + kim_model_has_energy = true; + } - // determine if the KIM Model can compute the forces - mdl.get_index((char*) "forces", &kimerror); - kim_model_has_forces = (kimerror == KIM_STATUS_OK); - if (!kim_model_has_forces) - error->warning(FLERR,"KIM Model does not provide `forces'; " + // determine if the KIM Model can compute the partialForces + kimerror = pargs->GetArgumentSupportStatus( + KIM::COMPUTE_ARGUMENT_NAME::partialForces, + &supportStatus); + if (kimerror) + error->all(FLERR,"Unable to get KIM Support Status"); + if (KIM::SUPPORT_STATUS::notSupported == supportStatus) { + kim_model_has_forces = false; + error->warning(FLERR,"KIM Model does not provide `partialForce'; " "Forces will be zero"); + } else { + kim_model_has_forces = true; + } - // determine if the KIM Model can compute the particleEnergy - mdl.get_index((char*) "particleEnergy", &kimerror); - kim_model_has_particleEnergy = (kimerror == KIM_STATUS_OK); - if (!kim_model_has_particleEnergy) - error->warning(FLERR,"KIM Model does not provide `particleEnergy'; " + // determine if the KIM Model can compute the partialVirial + kimerror = pargs->GetArgumentSupportStatus( + KIM::COMPUTE_ARGUMENT_NAME::partialVirial, + &supportStatus); + if (kimerror) + error->all(FLERR,"Unable to get KIM Support Status"); + if (KIM::SUPPORT_STATUS::notSupported == supportStatus) { + kim_model_has_virial = false; + error->warning(FLERR,"KIM Model does not provide `partialVirial'. " + "pair_kim now using `LAMMPSvirial' option."); + no_virial_fdotr_compute = 0; + } else { + kim_model_has_virial = true; + } + + // determine if the KIM Model can compute the partialParticleEnergy + kimerror = pargs->GetArgumentSupportStatus( + KIM::COMPUTE_ARGUMENT_NAME::partialParticleEnergy, + &supportStatus); + if (kimerror) + error->all(FLERR,"Unable to get KIM Support Status"); + if (KIM::SUPPORT_STATUS::notSupported == supportStatus) { + kim_model_has_particleEnergy = false; + error->warning(FLERR,"KIM Model does not provide `partialParticleEnergy'; " "energy per atom will be zero"); + } else { + kim_model_has_particleEnergy = true; + } - // determine if the KIM Model can compute the particleVerial - mdl.get_index((char*) "particleVirial", &kimerror); - kim_model_has_particleVirial = (kimerror == KIM_STATUS_OK); - mdl.get_index((char*) "process_dEdr", &kimerror); - kim_model_has_particleVirial = kim_model_has_particleVirial || - (kimerror == KIM_STATUS_OK); - if (!kim_model_has_particleVirial) - error->warning(FLERR,"KIM Model does not provide `particleVirial'; " + // determine if the KIM Model can compute the partialParticleVirial + kimerror = pargs->GetArgumentSupportStatus( + KIM::COMPUTE_ARGUMENT_NAME::partialParticleVirial, + &supportStatus); + if (kimerror) + error->all(FLERR,"Unable to get KIM Support Status"); + if (KIM::SUPPORT_STATUS::notSupported == supportStatus) { + kim_model_has_particleVirial = false; + error->warning(FLERR,"KIM Model does not provide `partialParticleVirial'; " "virial per atom will be zero"); - - // tear down KIM API object - mdl.free(&kimerror); - // now destructor will do the remaining tear down for mdl - - return; -} - -/* ---------------------------------------------------------------------- */ - -void PairKIM::write_descriptor(char** test_descriptor_string) -{ - // allocate memory - if (*test_descriptor_string != 0) - error->all(FLERR, "Test_descriptor_string already allocated"); - // assuming 75 lines at 100 characters each (should be plenty) - *test_descriptor_string = new char[100*75]; - // initialize - strcpy(*test_descriptor_string, ""); - - // Write Test name and units - strcat(*test_descriptor_string, - "#\n" - "# BEGINNING OF KIM DESCRIPTOR FILE\n" - "#\n" - "# This file is automatically generated from LAMMPS pair_style " - "kim command\n"); - strcat(*test_descriptor_string, - "\n" - "# The call number is (pair_style).(init_style): "); - char tmp_num[100]; - sprintf(tmp_num, "%i.%i\n", settings_call_count, init_style_call_count); - strcat(*test_descriptor_string, tmp_num); - strcat(*test_descriptor_string, - "#\n" - "\n" -#if KIM_API_VERSION_MAJOR == 1 && KIM_API_VERSION_MINOR == 5 -#else - "KIM_API_Version := 1.6.0\n\n" -#endif - "# Base units\n"); - switch (lmps_units) - { - case REAL: - strcat(*test_descriptor_string, - "Unit_length := A\n" - "Unit_energy := kcal/mol\n" - "Unit_charge := e\n" - "Unit_temperature := K\n" - "Unit_time := fs\n\n"); - break; - case METAL: - strcat(*test_descriptor_string, - "Unit_length := A\n" - "Unit_energy := eV\n" - "Unit_charge := e\n" - "Unit_temperature := K\n" - "Unit_time := ps\n\n"); - break; - case SI: - strcat(*test_descriptor_string, - "Unit_length := m\n" - "Unit_energy := J\n" - "Unit_charge := C\n" - "Unit_temperature := K\n" - "Unit_time := s\n\n"); - break; - case CGS: - strcat(*test_descriptor_string, - "Unit_length := cm\n" - "Unit_energy := erg\n" - "Unit_charge := statC\n" - "Unit_temperature := K\n" - "Unit_time := s\n\n"); - break; - case ELECTRON: - strcat(*test_descriptor_string, - "Unit_length := Bohr\n" - "Unit_energy := Hartree\n" - "Unit_charge := e\n" - "Unit_temperature := K\n" - "Unit_time := fs\n\n"); - break; - } - - // Write Supported species section - strcat(*test_descriptor_string, - "\n" -#if KIM_API_VERSION_MAJOR == 1 && KIM_API_VERSON_MINOR == 5 - "SUPPORTED_ATOM/PARTICLES_TYPES:\n" -#else - "PARTICLE_SPECIES:\n" -#endif - "# Symbol/name Type code\n"); - int code=1; - char* tmp_line = 0; - tmp_line = new char[100]; - for (int i=0; i < lmps_num_unique_elements; i++){ - sprintf(tmp_line, "%-24s%-16s%-3i\n", lmps_unique_elements[i], - "spec", code++); - strcat(*test_descriptor_string, tmp_line); - } - delete [] tmp_line; - tmp_line = 0; - strcat(*test_descriptor_string, "\n"); - - // Write conventions section - strcat(*test_descriptor_string, - "\n" - "CONVENTIONS:\n" - "# Name Type\n" - "ZeroBasedLists flag\n" - "Neigh_LocaAccess flag\n" - "NEIGH_PURE_F flag\n\n"); - - // Write input section - strcat(*test_descriptor_string, - "\n" - "MODEL_INPUT:\n" - "# Name Type Unit Shape\n" - "numberOfParticles integer none []\n" - "numberOfSpecies integer none []\n" - "particleSpecies integer none " - "[numberOfParticles]\n" - "coordinates double length " - "[numberOfParticles,3]\n" - "neighObject pointer none []\n" - "get_neigh method none []\n"); - - // Write output section - strcat(*test_descriptor_string, - "\n" - "MODEL_OUPUT:\n" - "# Name Type Unit Shape\n" - "compute method none []\n" - "destroy method none []\n" - "cutoff double length []\n"); - if (!kim_model_has_energy) strcat(*test_descriptor_string,"# "); - strcat(*test_descriptor_string, - "energy double energy []\n"); - if (!kim_model_has_forces) strcat(*test_descriptor_string, "# "); - strcat(*test_descriptor_string, - "forces double force " - "[numberOfParticles,3]\n"); - if (!kim_model_has_particleEnergy) strcat(*test_descriptor_string, "# "); - strcat(*test_descriptor_string, - "particleEnergy double energy " - "[numberOfParticles]\n"); - if (no_virial_fdotr_compute != 1) strcat(*test_descriptor_string, "# "); - strcat(*test_descriptor_string, - "virial double energy [6]\n"); - if (!kim_model_has_particleVirial) strcat(*test_descriptor_string, "# "); - strcat(*test_descriptor_string, - "particleVirial double energy " - "[numberOfParticles,6]\n" - "\n"); - strcat(*test_descriptor_string, - "#\n" - "# END OF KIM DESCRIPTOR FILE\n" - "#\n"); + } else { + kim_model_has_particleVirial = true; + } return; } diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index 493aa9066a..07790fb44b 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -33,6 +33,7 @@ PairStyle(kim,PairKIM) // includes from KIM & LAMMPS class KIM_API_model; #include "pair.h" +#include "KIM_SimulatorHeaders.hpp" namespace LAMMPS_NS { @@ -61,7 +62,6 @@ namespace LAMMPS_NS { // values set in settings() char* kim_modelname; - bool print_kim_file; // values set in coeff() @@ -79,29 +79,23 @@ namespace LAMMPS_NS { bool lmps_using_molecular; enum unit_sys {REAL, METAL, SI, CGS, ELECTRON}; unit_sys lmps_units; + KIM::LengthUnit lengthUnit; + KIM::EnergyUnit energyUnit; + KIM::ChargeUnit chargeUnit; + KIM::TemperatureUnit temperatureUnit; + KIM::TimeUnit timeUnit; // values set in set_kim_model_has_flags(), called by kim_init() - KIM_API_model* pkim; + KIM::Model * pkim; + KIM::ComputeArguments * pargs; bool kim_model_has_energy; bool kim_model_has_forces; + bool kim_model_has_virial; bool kim_model_has_particleEnergy; bool kim_model_has_particleVirial; // values set in kim_init(), after call to string_init(_) bool kim_init_ok; - int kim_ind_coordinates; - int kim_ind_numberOfParticles; - int kim_ind_numberContributingParticles; - int kim_ind_numberOfSpecies; - int kim_ind_particleSpecies; - int kim_ind_get_neigh; - int kim_ind_neighObject; - int kim_ind_cutoff; - int kim_ind_energy; - int kim_ind_particleEnergy; - int kim_ind_forces; - int kim_ind_virial; - int kim_ind_particleVirial; // values set in init_style(), after calling pkim->model_init() bool kim_model_init_ok; @@ -111,27 +105,31 @@ namespace LAMMPS_NS { // values set in set_statics(), called at end of kim_init(), // then again in set_volatiles(), called in compute() int lmps_local_tot_num_atoms; - double kim_global_cutoff; // KIM Model cutoff value + double kim_global_influence_distance; // KIM Model cutoff value + int kim_number_of_cutoffs; + double const * kim_cutoff_values; // values set in compute() int lmps_maxalloc; // max allocated memory value int* kim_particleSpecies; // array of KIM particle species + int* kim_particleContributing; // array of KIM particle contributing int* lmps_stripped_neigh_list; // neighbors of one atom, used when LAMMPS // is in molecular mode // KIM specific helper functions - void kim_error(int, const char *, int); void kim_init(); void kim_free(); void set_statics(); void set_volatiles(); void set_lmps_flags(); void set_kim_model_has_flags(); - void write_descriptor(char** test_descriptor_string); // static methods used as callbacks from KIM - static int get_neigh(void** kimmdl, int* mode, int* request, - int* atom, int* numnei, int** nei1atom, - double** pRij); + static int get_neigh( + void const * const dataObject, + int const numberOfCutoffs, double const * const cutoffs, + int const neighborListIndex, int const particleNumber, + int * const numberOfNeighbors, + int const ** const neighborsOfParticle); }; } From 906a12353c97a4a7ba47bd97e708109e957fd908 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Sun, 24 Jun 2018 08:28:34 -0500 Subject: [PATCH 003/143] Fixup neighbor list settings for pair_kim --- src/KIM/pair_kim.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 413c5303e1..34deca3862 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -379,8 +379,7 @@ void PairKIM::init_style() int irequest = neighbor->request(this,instance_me); neighbor->requests[irequest]->half = 0; neighbor->requests[irequest]->full = 1; - // make sure full lists also include local-ghost pairs - if (lmps_using_newton) neighbor->requests[irequest]->newton = 0; + neighbor->requests[irequest]->ghost = 1; return; } From da9441471a373ca3c7bf1c6d5525a1ce20d01540 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Sun, 24 Jun 2018 08:44:28 -0500 Subject: [PATCH 004/143] Fixup partialVirial bug in pair_kim --- src/KIM/pair_kim.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 34deca3862..040c90b42b 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -723,11 +723,11 @@ void PairKIM::set_volatiles() if(vflag_atom != 1) { kimerror = kimerror || pargs->SetArgumentPointer( KIM::COMPUTE_ARGUMENT_NAME::partialParticleVirial, - &(vatom[0][0])); + reinterpret_cast(NULL)); } else { kimerror = kimerror || pargs->SetArgumentPointer( KIM::COMPUTE_ARGUMENT_NAME::partialParticleVirial, - reinterpret_cast(NULL)); + &(vatom[0][0])); } } From 8a8b968d55c715f87d7ff57df75796de3ad28251 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Sun, 24 Jun 2018 15:23:25 -0500 Subject: [PATCH 005/143] Fixup the pressure/virial computation in pair_kim --- src/KIM/pair_kim.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 040c90b42b..d1f5887341 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -735,14 +735,18 @@ void PairKIM::set_volatiles() { if (kim_model_has_virial) { - if (vflag_global == 1) - kimerror = kimerror || pargs->SetArgumentPointer( - KIM::COMPUTE_ARGUMENT_NAME::partialVirial, - &(virial[0])); - else + if (vflag_global == 0) + { kimerror = kimerror || pargs->SetArgumentPointer( KIM::COMPUTE_ARGUMENT_NAME::partialVirial, reinterpret_cast(NULL)); + } + else + { + kimerror = kimerror || pargs->SetArgumentPointer( + KIM::COMPUTE_ARGUMENT_NAME::partialVirial, + &(virial[0])); + } } } From 5958b24edc01d60b20c26b0e6a3b62a294505f0e Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 27 Jun 2018 11:06:18 -0500 Subject: [PATCH 006/143] Adjust some internal pair_kim things --- src/KIM/pair_kim.cpp | 24 ++++++++---------------- src/KIM/pair_kim.h | 23 +++++++++++------------ 2 files changed, 19 insertions(+), 28 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index d1f5887341..3fc94944fc 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -52,11 +52,11 @@ PairKIM::PairKIM(LAMMPS *lmp) : lmps_units(METAL), pkim(0), pargs(0), - kim_particle_codes(0), lmps_local_tot_num_atoms(0), kim_global_influence_distance(0.0), kim_number_of_cutoffs(0), kim_cutoff_values(0), + kim_particle_codes(0), lmps_maxalloc(0), kim_particleSpecies(0), kim_particleContributing(0), @@ -119,6 +119,8 @@ void PairKIM::compute(int eflag , int vflag) else ev_unset(); + // @@@@ can we strip the neighbor list here (like pair_meamc does)? + // grow kim_particleSpecies and kim_particleContributing array if necessary // needs to be atom->nmax in length if (atom->nmax > lmps_maxalloc) { @@ -158,7 +160,7 @@ void PairKIM::compute(int eflag , int vflag) } // pass current atom pointers to KIM - set_volatiles(); + set_argument_pointers(); // compute via KIM model kimerror = pkim->Compute(pargs); @@ -656,16 +658,6 @@ void PairKIM::kim_init() error->all(FLERR,"create_kim_particle_codes: symbol not found "); } - // set pointer values in KIM API object that will not change during run - set_statics(); - - return; -} - -/* ---------------------------------------------------------------------- */ - -void PairKIM::set_statics() -{ // set total number of atoms lmps_local_tot_num_atoms = (int) (atom->nghost + atom->nlocal); @@ -673,7 +665,7 @@ void PairKIM::set_statics() pkim->GetNeighborListCutoffsPointer(&kim_number_of_cutoffs, &kim_cutoff_values); - int kimerror = pargs->SetArgumentPointer( + kimerror = pargs->SetArgumentPointer( KIM::COMPUTE_ARGUMENT_NAME::numberOfParticles, &lmps_local_tot_num_atoms); if (kim_model_has_energy) @@ -688,14 +680,14 @@ void PairKIM::set_statics() reinterpret_cast(this)); if (kimerror) - error->all(FLERR,"Unable to register KIM static pointers"); + error->all(FLERR,"Unable to register KIM pointers"); return; } /* ---------------------------------------------------------------------- */ -void PairKIM::set_volatiles() +void PairKIM::set_argument_pointers() { int kimerror; lmps_local_tot_num_atoms = (int) (atom->nghost + atom->nlocal); @@ -752,7 +744,7 @@ void PairKIM::set_volatiles() if (kimerror) { - error->all(FLERR,"Unable to set KIM volatile pointers"); + error->all(FLERR,"Unable to set KIM argument pointers"); } return; diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index 07790fb44b..37807ebfbc 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -48,6 +48,7 @@ namespace LAMMPS_NS { virtual void settings(int, char**); virtual void coeff(int, char**); virtual void init_style(); + //virtual void init_list(int id, NeighList *ptr); virtual double init_one(int, int); virtual int pack_reverse_comm(int, int, double*); virtual void unpack_reverse_comm(int, int*, double*); @@ -85,30 +86,29 @@ namespace LAMMPS_NS { KIM::TemperatureUnit temperatureUnit; KIM::TimeUnit timeUnit; - // values set in set_kim_model_has_flags(), called by kim_init() + KIM::Model * pkim; KIM::ComputeArguments * pargs; + + // values set in set_kim_model_has_flags(), called by kim_init() bool kim_model_has_energy; bool kim_model_has_forces; bool kim_model_has_virial; bool kim_model_has_particleEnergy; bool kim_model_has_particleVirial; - // values set in kim_init(), after call to string_init(_) + // values set in kim_init() bool kim_init_ok; - - // values set in init_style(), after calling pkim->model_init() - bool kim_model_init_ok; - bool kim_particle_codes_ok; - int *kim_particle_codes; - - // values set in set_statics(), called at end of kim_init(), - // then again in set_volatiles(), called in compute() int lmps_local_tot_num_atoms; double kim_global_influence_distance; // KIM Model cutoff value int kim_number_of_cutoffs; double const * kim_cutoff_values; + // values set in init_style() + bool kim_model_init_ok; + bool kim_particle_codes_ok; + int *kim_particle_codes; + // values set in compute() int lmps_maxalloc; // max allocated memory value int* kim_particleSpecies; // array of KIM particle species @@ -119,8 +119,7 @@ namespace LAMMPS_NS { // KIM specific helper functions void kim_init(); void kim_free(); - void set_statics(); - void set_volatiles(); + void set_argument_pointers(); void set_lmps_flags(); void set_kim_model_has_flags(); // static methods used as callbacks from KIM From cb077829356450d8a64161c67428adc3110b4d6a Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 27 Jun 2018 12:46:13 -0500 Subject: [PATCH 007/143] Multiple neig lists working in pair_kim --- src/KIM/pair_kim.cpp | 57 ++++++++++++++++++++++++++++++++------------ src/KIM/pair_kim.h | 3 ++- 2 files changed, 44 insertions(+), 16 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 3fc94944fc..afc4a89675 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -56,6 +56,7 @@ PairKIM::PairKIM(LAMMPS *lmp) : kim_global_influence_distance(0.0), kim_number_of_cutoffs(0), kim_cutoff_values(0), + neighborLists(0), kim_particle_codes(0), lmps_maxalloc(0), kim_particleSpecies(0), @@ -102,6 +103,13 @@ PairKIM::~PairKIM() delete [] lmps_map_species_to_unique; } + // clean up neighborlist pointers + if (neighborLists) + { + delete [] neighborLists; + neighborLists = 0; + } + // clean up KIM interface (if necessary) kim_free(); @@ -378,14 +386,30 @@ void PairKIM::init_style() if (!lmps_using_newton) comm_reverse_off = 9; // request full neighbor list - int irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->ghost = 1; + for (int i = 0; i < kim_number_of_cutoffs; ++i) + { + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->id = i; + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + neighbor->requests[irequest]->ghost = 1; + neighbor->requests[irequest]->cut = 1; + neighbor->requests[irequest]->cutoff = kim_cutoff_values[i]; + } return; } +/* ---------------------------------------------------------------------- + neighbor callback to inform pair style of neighbor list to use + half or full +------------------------------------------------------------------------- */ + +void PairKIM::init_list(int id, NeighList *ptr) +{ + neighborLists[id] = ptr; +} + /* ---------------------------------------------------------------------- init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ @@ -525,7 +549,7 @@ void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) double PairKIM::memory_usage() { - double bytes = lmps_maxalloc * sizeof(int); + double bytes = 2 * lmps_maxalloc * sizeof(int); return bytes; } @@ -542,21 +566,18 @@ int PairKIM::get_neigh(void const * const dataObject, PairKIM const * const Model = reinterpret_cast(dataObject); - if ((numberOfCutoffs != 1) || (cutoffs[0] > Model->kim_cutoff_values[0])) - return true; + if (numberOfCutoffs != Model->kim_number_of_cutoffs) return true; + for (int i = 0; i < numberOfCutoffs; ++i) + { + if (Model->kim_cutoff_values[i] < cutoffs[i]) return true; + } - if (neighborListIndex != 0) return true; + // neighborListIndex and particleNumber are validated by KIM API // initialize numNeigh *numberOfNeighbors = 0; - if ((particleNumber >= Model->lmps_local_tot_num_atoms) || - (particleNumber < 0)) /* invalid id */ - { - return true; - } - - NeighList * neiobj = Model->list; + NeighList * neiobj = Model->neighborLists[neighborListIndex]; int nAtoms = Model->lmps_local_tot_num_atoms; int j, jj, inum, *ilist, *numneigh, **firstneigh; @@ -664,6 +685,12 @@ void PairKIM::kim_init() pkim->GetInfluenceDistance(&kim_global_influence_distance); pkim->GetNeighborListCutoffsPointer(&kim_number_of_cutoffs, &kim_cutoff_values); + if (neighborLists) + { + delete [] neighborLists; + neighborLists = 0; + } + neighborLists = new NeighList*[kim_number_of_cutoffs]; kimerror = pargs->SetArgumentPointer( KIM::COMPUTE_ARGUMENT_NAME::numberOfParticles, diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index 37807ebfbc..4542b656b7 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -48,7 +48,7 @@ namespace LAMMPS_NS { virtual void settings(int, char**); virtual void coeff(int, char**); virtual void init_style(); - //virtual void init_list(int id, NeighList *ptr); + virtual void init_list(int id, NeighList *ptr); virtual double init_one(int, int); virtual int pack_reverse_comm(int, int, double*); virtual void unpack_reverse_comm(int, int*, double*); @@ -103,6 +103,7 @@ namespace LAMMPS_NS { double kim_global_influence_distance; // KIM Model cutoff value int kim_number_of_cutoffs; double const * kim_cutoff_values; + class NeighList ** neighborLists; // values set in init_style() bool kim_model_init_ok; From f1f140dd5f9bfe9bed2dcb42fb5dce990ea445b9 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 27 Jun 2018 15:13:48 -0500 Subject: [PATCH 008/143] remove unnecessary code in pair_kim.cpp --- src/KIM/pair_kim.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index afc4a89675..658e8cb483 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -679,9 +679,6 @@ void PairKIM::kim_init() error->all(FLERR,"create_kim_particle_codes: symbol not found "); } - // set total number of atoms - lmps_local_tot_num_atoms = (int) (atom->nghost + atom->nlocal); - pkim->GetInfluenceDistance(&kim_global_influence_distance); pkim->GetNeighborListCutoffsPointer(&kim_number_of_cutoffs, &kim_cutoff_values); From a7e3ccd8c4e039baf9060ebecf512a29bb35e0b8 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 27 Jun 2018 15:50:50 -0500 Subject: [PATCH 009/143] Finish off multi-neighbor list support for pair_kim --- src/KIM/pair_kim.cpp | 39 ++++++++++++++++++++++++++++----------- src/KIM/pair_kim.h | 1 + 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 658e8cb483..e41cc94ea0 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -61,6 +61,7 @@ PairKIM::PairKIM(LAMMPS *lmp) : lmps_maxalloc(0), kim_particleSpecies(0), kim_particleContributing(0), + lmps_stripped_neigh_ptr(0), lmps_stripped_neigh_list(0) { // Initialize Pair data members to appropriate values @@ -94,6 +95,12 @@ PairKIM::~PairKIM() memory->destroy(kim_particleSpecies); memory->destroy(kim_particleContributing); memory->destroy(lmps_stripped_neigh_list); + // clean up lmps_stripped_neigh_ptr + if (lmps_stripped_neigh_ptr) + { + delete [] lmps_stripped_neigh_ptr; + lmps_stripped_neigh_ptr = 0; + } // clean up allocated memory for standard Pair class usage // also, we allocate lmps_map_species_to_uniuqe in the allocate() function @@ -241,10 +248,11 @@ void PairKIM::settings(int narg, char **arg) ++settings_call_count; init_style_call_count = 0; - if (narg < 2) error->all(FLERR,"Illegal pair_style command"); + if (narg != 2) error->all(FLERR,"Illegal pair_style command"); // arg[0] is the virial handling option: "LAMMPSvirial" or "KIMvirial" // arg[1] is the KIM Model name - // arg[2] is the print-kim-file flag: 0/1 do-not/do print (default 0) + + lmps_using_molecular = (atom->molecular > 0); // ensure we are in a clean state for KIM (needed on repeated call) // first time called will do nothing... @@ -382,6 +390,22 @@ void PairKIM::init_style() kim_init(); } + // setup lmps_stripped_neigh_list for neighbors of one atom, if needed + if (lmps_using_molecular) { + memory->destroy(lmps_stripped_neigh_list); + memory->create(lmps_stripped_neigh_list, + kim_number_of_cutoffs*neighbor->oneatom, + "pair:lmps_stripped_neigh_list"); + delete [] lmps_stripped_neigh_ptr; + lmps_stripped_neigh_ptr = new int*[kim_number_of_cutoffs]; + for (int i = 0; i < kim_number_of_cutoffs; ++i) + { + lmps_stripped_neigh_ptr[0] + = &(lmps_stripped_neigh_list[(i-1)*(neighbor->oneatom)]); + } + + } + // make sure comm_reverse expects (at most) 9 values when newton is off if (!lmps_using_newton) comm_reverse_off = 9; @@ -595,7 +619,8 @@ int PairKIM::get_neigh(void const * const dataObject, { int n = *numberOfNeighbors; int *ptr = firstneigh[particleNumber]; - int *lmps_stripped_neigh_list = Model->lmps_stripped_neigh_list; + int *lmps_stripped_neigh_list + = Model->lmps_stripped_neigh_ptr[neighborListIndex]; for (int i = 0; i < n; i++) lmps_stripped_neigh_list[i] = *(ptr++) & NEIGHMASK; *neighborsOfParticle = lmps_stripped_neigh_list; @@ -781,14 +806,6 @@ void PairKIM::set_lmps_flags() // determint if newton is on or off lmps_using_newton = (force->newton_pair == 1); - // setup lmps_stripped_neigh_list for neighbors of one atom, if needed - lmps_using_molecular = (atom->molecular > 0); - if (lmps_using_molecular) { - memory->destroy(lmps_stripped_neigh_list); - memory->create(lmps_stripped_neigh_list,neighbor->oneatom, - "pair:lmps_stripped_neigh_list"); - } - // determine if running with pair hybrid if (force->pair_match("hybrid",0)) { diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index 4542b656b7..a22bf1492f 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -116,6 +116,7 @@ namespace LAMMPS_NS { int* kim_particleContributing; // array of KIM particle contributing int* lmps_stripped_neigh_list; // neighbors of one atom, used when LAMMPS // is in molecular mode + int** lmps_stripped_neigh_ptr; // pointer into lists // KIM specific helper functions void kim_init(); From 199a01714864964e317208b90dcfb9c433182351 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Thu, 28 Jun 2018 09:32:28 -0500 Subject: [PATCH 010/143] Some cleanup in pair_kim --- src/KIM/pair_kim.cpp | 20 +++++++++++--------- src/KIM/pair_kim.h | 1 - 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index e41cc94ea0..2785d5793a 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -50,6 +50,11 @@ PairKIM::PairKIM(LAMMPS *lmp) : lmps_unique_elements(0), lmps_num_unique_elements(0), lmps_units(METAL), + lengthUnit(KIM::LENGTH_UNIT::unused), + energyUnit(KIM::ENERGY_UNIT::unused), + chargeUnit(KIM::CHARGE_UNIT::unused), + temperatureUnit(KIM::TEMPERATURE_UNIT::unused), + timeUnit(KIM::TIME_UNIT::unused), pkim(0), pargs(0), lmps_local_tot_num_atoms(0), @@ -61,8 +66,8 @@ PairKIM::PairKIM(LAMMPS *lmp) : lmps_maxalloc(0), kim_particleSpecies(0), kim_particleContributing(0), - lmps_stripped_neigh_ptr(0), - lmps_stripped_neigh_list(0) + lmps_stripped_neigh_list(0), + lmps_stripped_neigh_ptr(0) { // Initialize Pair data members to appropriate values single_enable = 0; // We do not provide the Single() function @@ -134,8 +139,6 @@ void PairKIM::compute(int eflag , int vflag) else ev_unset(); - // @@@@ can we strip the neighbor list here (like pair_meamc does)? - // grow kim_particleSpecies and kim_particleContributing array if necessary // needs to be atom->nmax in length if (atom->nmax > lmps_maxalloc) { @@ -160,7 +163,6 @@ void PairKIM::compute(int eflag , int vflag) } // kim_particleSpecies = KIM atom species for each LAMMPS atom - // set ielement to valid 0 if lmps_map_species_to_unique[] stores an un-used -1 int *species = atom->type; int nall = atom->nlocal + atom->nghost; @@ -168,7 +170,6 @@ void PairKIM::compute(int eflag , int vflag) for (int i = 0; i < nall; i++) { ielement = lmps_map_species_to_unique[species[i]]; - ielement = MAX(ielement,0); kim_particleSpecies[i] = kim_particle_codes[ielement]; kim_particleContributing[i] = ( (inlocal) ? 1 : 0 ); @@ -177,6 +178,9 @@ void PairKIM::compute(int eflag , int vflag) // pass current atom pointers to KIM set_argument_pointers(); + // set number of particles + lmps_local_tot_num_atoms = (int) (atom->nghost + atom->nlocal); + // compute via KIM model kimerror = pkim->Compute(pargs); if (kimerror) error->all(FLERR,"KIM Compute returned error"); @@ -409,7 +413,7 @@ void PairKIM::init_style() // make sure comm_reverse expects (at most) 9 values when newton is off if (!lmps_using_newton) comm_reverse_off = 9; - // request full neighbor list + // request full neighbor lists for (int i = 0; i < kim_number_of_cutoffs; ++i) { int irequest = neighbor->request(this,instance_me); @@ -739,8 +743,6 @@ void PairKIM::kim_init() void PairKIM::set_argument_pointers() { int kimerror; - lmps_local_tot_num_atoms = (int) (atom->nghost + atom->nlocal); - kimerror = pargs->SetArgumentPointer( KIM::COMPUTE_ARGUMENT_NAME::coordinates, &(atom->x[0][0])); diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index a22bf1492f..0c017e75ed 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -86,7 +86,6 @@ namespace LAMMPS_NS { KIM::TemperatureUnit temperatureUnit; KIM::TimeUnit timeUnit; - KIM::Model * pkim; KIM::ComputeArguments * pargs; From cb21051eb82f8f1e7337827bfbff1df2a9e0055a Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Thu, 28 Jun 2018 19:59:39 -0500 Subject: [PATCH 011/143] Update KIM Model matching code in pair_kim.cpp --- src/KIM/pair_kim.cpp | 331 +++++++++++++++++++++++++------------------ src/KIM/pair_kim.h | 11 +- 2 files changed, 195 insertions(+), 147 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 2785d5793a..5f123de45d 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -57,6 +57,11 @@ PairKIM::PairKIM(LAMMPS *lmp) : timeUnit(KIM::TIME_UNIT::unused), pkim(0), pargs(0), + kim_model_support_for_energy(KIM::SUPPORT_STATUS::notSupported), + kim_model_support_for_forces(KIM::SUPPORT_STATUS::notSupported), + kim_model_support_for_virial(KIM::SUPPORT_STATUS::notSupported), + kim_model_support_for_particleEnergy(KIM::SUPPORT_STATUS::notSupported), + kim_model_support_for_particleVirial(KIM::SUPPORT_STATUS::notSupported), lmps_local_tot_num_atoms(0), kim_global_influence_distance(0.0), kim_number_of_cutoffs(0), @@ -76,8 +81,8 @@ PairKIM::PairKIM(LAMMPS *lmp) : // BEGIN: initial values that determine the KIM state // (used by kim_free(), etc.) - kim_model_init_ok = false; kim_init_ok = false; + kim_particle_codes_ok = false; // END return; @@ -201,7 +206,9 @@ void PairKIM::compute(int eflag , int vflag) if (vflag_fdotr) virial_fdotr_compute(); } - if ((kim_model_has_particleVirial) && (vflag_atom)) + if ((kim_model_support_for_particleVirial != + KIM::SUPPORT_STATUS::notSupported) && + (vflag_atom)) { // flip sign and order of virial if KIM is computing it double tmp; for (int i = 0; i < nall; ++i) @@ -456,14 +463,17 @@ double PairKIM::init_one(int i, int j) int PairKIM::pack_reverse_comm(int n, int first, double *buf) { + using namespace KIM::SUPPORT_STATUS; + int i,m,last; double *fp; fp = &(atom->f[0][0]); m = 0; last = first + n; - if ((kim_model_has_forces) && ((vflag_atom == 0) || - (!kim_model_has_particleVirial))) + if ((kim_model_support_for_forces != notSupported) && + ((vflag_atom == 0) || + (kim_model_support_for_particleVirial == notSupported))) { for (i = first; i < last; i++) { @@ -473,8 +483,9 @@ int PairKIM::pack_reverse_comm(int n, int first, double *buf) } return m; } - else if ((kim_model_has_forces) && (vflag_atom == 1) && - (kim_model_has_particleVirial)) + else if ((kim_model_support_for_forces != notSupported) && + (vflag_atom == 1) && + (kim_model_support_for_particleVirial != notSupported)) { double *va=&(vatom[0][0]); for (i = first; i < last; i++) @@ -492,8 +503,9 @@ int PairKIM::pack_reverse_comm(int n, int first, double *buf) } return m; } - else if ((!kim_model_has_forces) && (vflag_atom == 1) && - (kim_model_has_particleVirial)) + else if ((kim_model_support_for_forces == notSupported) && + (vflag_atom == 1) && + (kim_model_support_for_particleVirial != notSupported)) { double *va=&(vatom[0][0]); for (i = first; i < last; i++) @@ -515,13 +527,16 @@ int PairKIM::pack_reverse_comm(int n, int first, double *buf) void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) { + using namespace KIM::SUPPORT_STATUS; + int i,j,m; double *fp; fp = &(atom->f[0][0]); m = 0; - if ((kim_model_has_forces) && ((vflag_atom == 0) || - (!kim_model_has_particleVirial))) + if ((kim_model_support_for_forces != notSupported) && + ((vflag_atom == 0) || + (kim_model_support_for_particleVirial == notSupported))) { for (i = 0; i < n; i++) { @@ -531,8 +546,9 @@ void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) fp[3*j+2]+= buf[m++]; } } - else if ((kim_model_has_forces) && (vflag_atom == 1) && - (kim_model_has_particleVirial)) + else if ((kim_model_support_for_forces != notSupported) && + (vflag_atom == 1) && + (kim_model_support_for_particleVirial != notSupported)) { double *va=&(vatom[0][0]); for (i = 0; i < n; i++) @@ -550,8 +566,9 @@ void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) va[j*6+5]+=buf[m++]; } } - else if ((!kim_model_has_forces) && (vflag_atom == 1) && - (kim_model_has_particleVirial)) + else if ((kim_model_support_for_forces == notSupported) && + (vflag_atom == 1) && + (kim_model_support_for_particleVirial != notSupported)) { double *va=&(vatom[0][0]); for (i = 0; i < n; i++) @@ -638,14 +655,13 @@ void PairKIM::kim_free() { int kimerror; - if (kim_model_init_ok) + if (kim_init_ok) { int kimerror = pkim->ComputeArgumentsDestroy(&pargs); if (kimerror) error->all(FLERR,"Unable to destroy Compute Arguments Object"); KIM::Model::Destroy(&pkim); - kim_model_init_ok = false; } kim_init_ok = false; @@ -683,9 +699,14 @@ void PairKIM::kim_init() kimerror = pkim->ComputeArgumentsCreate(&pargs); if (kimerror) + { + KIM::Model::Destroy(&pkim); error->all(FLERR,"KIM ComputeArgumentsCreate failed"); + } else + { kim_init_ok = true; + } } // determine KIM Model capabilities (used in this function below) @@ -721,7 +742,7 @@ void PairKIM::kim_init() kimerror = pargs->SetArgumentPointer( KIM::COMPUTE_ARGUMENT_NAME::numberOfParticles, &lmps_local_tot_num_atoms); - if (kim_model_has_energy) + if (kim_model_support_for_energy != KIM::SUPPORT_STATUS::notSupported) kimerror = kimerror || pargs->SetArgumentPointer( KIM::COMPUTE_ARGUMENT_NAME::partialEnergy, &(eng_vdwl)); @@ -742,63 +763,98 @@ void PairKIM::kim_init() void PairKIM::set_argument_pointers() { - int kimerror; - kimerror = pargs->SetArgumentPointer( - KIM::COMPUTE_ARGUMENT_NAME::coordinates, - &(atom->x[0][0])); + using namespace KIM::COMPUTE_ARGUMENT_NAME; + using namespace KIM::SUPPORT_STATUS; - if (kim_model_has_particleEnergy && (eflag_atom == 1)) - { - kimerror = kimerror || pargs->SetArgumentPointer( - KIM::COMPUTE_ARGUMENT_NAME::partialParticleEnergy, - eatom); - } + int kimerror; + kimerror = pargs->SetArgumentPointer(coordinates, &(atom->x[0][0])); - if (kim_model_has_forces) - { - kimerror = kimerror || pargs->SetArgumentPointer( - KIM::COMPUTE_ARGUMENT_NAME::partialForces, - &(atom->f[0][0])); - } + // Set KIM pointer appropriately for particalEnergy + if ((kim_model_support_for_particleEnergy == required) && (eflag_atom != 1)) + { + // reallocate per-atom energy array if necessary + if (atom->nmax > maxeatom) + { + maxeatom = atom->nmax; + memory->destroy(eatom); + memory->create(eatom,comm->nthreads*maxeatom,"pair:eatom"); + } + } + if ((kim_model_support_for_particleEnergy == optional) && (eflag_atom != 1)) + { + kimerror = kimerror || pargs->SetArgumentPointer( + partialParticleEnergy, + reinterpret_cast(NULL)); + } + else if (kim_model_support_for_particleEnergy != notSupported) + { + kimerror = kimerror || pargs->SetArgumentPointer(partialParticleEnergy, + eatom); + } - if (kim_model_has_particleVirial) - { - if(vflag_atom != 1) { - kimerror = kimerror || pargs->SetArgumentPointer( - KIM::COMPUTE_ARGUMENT_NAME::partialParticleVirial, - reinterpret_cast(NULL)); - } else { - kimerror = kimerror || pargs->SetArgumentPointer( - KIM::COMPUTE_ARGUMENT_NAME::partialParticleVirial, - &(vatom[0][0])); - } - } + // Set KIM pointer appropriately for forces + if (kim_model_support_for_forces == notSupported) + { + kimerror = kimerror || pargs->SetArgumentPointer( + partialForces, + reinterpret_cast(NULL)); + } + else + { + kimerror = kimerror || pargs->SetArgumentPointer(partialForces, + &(atom->f[0][0])); + } - if (no_virial_fdotr_compute == 1) - { - if (kim_model_has_virial) - { - if (vflag_global == 0) - { - kimerror = kimerror || pargs->SetArgumentPointer( - KIM::COMPUTE_ARGUMENT_NAME::partialVirial, - reinterpret_cast(NULL)); - } - else - { - kimerror = kimerror || pargs->SetArgumentPointer( - KIM::COMPUTE_ARGUMENT_NAME::partialVirial, - &(virial[0])); - } - } - } + // Set KIM pointer appropriately for particleVirial + if ((kim_model_support_for_particleVirial == required) && (vflag_atom != 1)) + { + // reallocate per-atom virial array if necessary + if (atom->nmax > maxeatom) + { + maxvatom = atom->nmax; + memory->destroy(vatom); + memory->create(vatom,comm->nthreads*maxvatom,6,"pair:vatom"); + } + } + if ((kim_model_support_for_particleVirial == optional) && (vflag_atom != 1)) + { + kimerror = kimerror || pargs->SetArgumentPointer( + partialParticleVirial, + reinterpret_cast(NULL)); + } + else if (kim_model_support_for_particleVirial != notSupported) + { + kimerror = kimerror || pargs->SetArgumentPointer(partialParticleEnergy, + &(vatom[0][0])); + } - if (kimerror) - { - error->all(FLERR,"Unable to set KIM argument pointers"); - } + // Set KIM pointer appropriately for virial - return; + if (kim_model_support_for_virial == required) + { + kimerror = kimerror || pargs->SetArgumentPointer(partialVirial, + &(virial[0])); + } + else if ((kim_model_support_for_virial == optional) && + (no_virial_fdotr_compute == 1) && + (vflag_global)) + { + kimerror = kimerror || pargs->SetArgumentPointer(partialVirial, + &(virial[0])); + } + else if (kim_model_support_for_virial == optional) + { + kimerror = kimerror || pargs->SetArgumentPointer( + partialVirial, + reinterpret_cast(NULL)); + } + + if (kimerror) + { + error->all(FLERR,"Unable to set KIM argument pointers"); + } + + return; } /* ---------------------------------------------------------------------- */ @@ -863,85 +919,78 @@ void PairKIM::set_lmps_flags() void PairKIM::set_kim_model_has_flags() { - // @@ the procedure below should be improved to be more comprehensive - // @@ and ensure that there are no additions/changes to the kim-api - // @@ that could cause a problem. This should be done using the - // @@ "discoverability" features of the kim-api - int kimerror; - KIM::SupportStatus supportStatus; + { // BEGIN enclosing scope for using directives + using namespace KIM::COMPUTE_ARGUMENT_NAME; + using namespace KIM::SUPPORT_STATUS; - // determine if the KIM Model can compute the total partialEnergy + int numberOfComputeArgumentNames; + GetNumberOfComputeArgumentNames(&numberOfComputeArgumentNames); + for (int i = 0; i < numberOfComputeArgumentNames; ++i) + { + KIM::ComputeArgumentName computeArgumentName; + int kimerror = GetComputeArgumentName(i, &computeArgumentName); + KIM::SupportStatus supportStatus; + kimerror = pargs->GetArgumentSupportStatus(computeArgumentName, + &supportStatus); - // determine if the KIM Model can compute the energy - kimerror = pargs->GetArgumentSupportStatus( - KIM::COMPUTE_ARGUMENT_NAME::partialEnergy, - &supportStatus); - if (kimerror) - error->all(FLERR,"Unable to get KIM Support Status"); - if (KIM::SUPPORT_STATUS::notSupported == supportStatus) { - kim_model_has_energy = false; - error->warning(FLERR,"KIM Model does not provide `partialEnergy'; " - "Potential energy will be zero"); - } else { - kim_model_has_energy = true; - } + if (computeArgumentName == partialEnergy) + kim_model_support_for_energy = supportStatus; + else if (computeArgumentName == partialForces) + kim_model_support_for_forces = supportStatus; + else if (computeArgumentName == partialVirial) + kim_model_support_for_virial = supportStatus; + else if (computeArgumentName == partialParticleEnergy) + kim_model_support_for_particleEnergy = supportStatus; + else if (computeArgumentName == partialParticleVirial) + kim_model_support_for_particleVirial = supportStatus; + else if (supportStatus == required) + { + error->all(FLERR,"KIM Model requires unsupported compute argument"); + } + } - // determine if the KIM Model can compute the partialForces - kimerror = pargs->GetArgumentSupportStatus( - KIM::COMPUTE_ARGUMENT_NAME::partialForces, - &supportStatus); - if (kimerror) - error->all(FLERR,"Unable to get KIM Support Status"); - if (KIM::SUPPORT_STATUS::notSupported == supportStatus) { - kim_model_has_forces = false; - error->warning(FLERR,"KIM Model does not provide `partialForce'; " - "Forces will be zero"); - } else { - kim_model_has_forces = true; - } + if (kim_model_support_for_energy == notSupported) + error->warning(FLERR,"KIM Model does not provide `partialEnergy'; " + "Potential energy will be zero"); - // determine if the KIM Model can compute the partialVirial - kimerror = pargs->GetArgumentSupportStatus( - KIM::COMPUTE_ARGUMENT_NAME::partialVirial, - &supportStatus); - if (kimerror) - error->all(FLERR,"Unable to get KIM Support Status"); - if (KIM::SUPPORT_STATUS::notSupported == supportStatus) { - kim_model_has_virial = false; - error->warning(FLERR,"KIM Model does not provide `partialVirial'. " - "pair_kim now using `LAMMPSvirial' option."); - no_virial_fdotr_compute = 0; - } else { - kim_model_has_virial = true; - } + if (kim_model_support_for_forces == notSupported) + error->warning(FLERR,"KIM Model does not provide `partialForce'; " + "Forces will be zero"); - // determine if the KIM Model can compute the partialParticleEnergy - kimerror = pargs->GetArgumentSupportStatus( - KIM::COMPUTE_ARGUMENT_NAME::partialParticleEnergy, - &supportStatus); - if (kimerror) - error->all(FLERR,"Unable to get KIM Support Status"); - if (KIM::SUPPORT_STATUS::notSupported == supportStatus) { - kim_model_has_particleEnergy = false; - error->warning(FLERR,"KIM Model does not provide `partialParticleEnergy'; " - "energy per atom will be zero"); - } else { - kim_model_has_particleEnergy = true; - } + if (kim_model_support_for_virial == notSupported) + error->warning(FLERR,"KIM Model does not provide `partialVirial'. " + "pair_kim now using `LAMMPSvirial' option."); - // determine if the KIM Model can compute the partialParticleVirial - kimerror = pargs->GetArgumentSupportStatus( - KIM::COMPUTE_ARGUMENT_NAME::partialParticleVirial, - &supportStatus); - if (kimerror) - error->all(FLERR,"Unable to get KIM Support Status"); - if (KIM::SUPPORT_STATUS::notSupported == supportStatus) { - kim_model_has_particleVirial = false; - error->warning(FLERR,"KIM Model does not provide `partialParticleVirial'; " - "virial per atom will be zero"); - } else { - kim_model_has_particleVirial = true; - } + if (kim_model_support_for_particleEnergy == notSupported) + error->warning(FLERR,"KIM Model does not provide `partialParticleEnergy'; " + "energy per atom will be zero"); + + if (kim_model_support_for_particleVirial == notSupported) + error->warning(FLERR,"KIM Model does not provide `partialParticleVirial'; " + "virial per atom will be zero"); + } // END enclosing scope for using directives + + + { // BEGIN enclosing scope for using directives + using namespace KIM::COMPUTE_CALLBACK_NAME; + using namespace KIM::SUPPORT_STATUS; + + int numberOfComputeCallbackNames; + GetNumberOfComputeCallbackNames(&numberOfComputeCallbackNames); + for (int i = 0; i < numberOfComputeCallbackNames; ++i) + { + KIM::ComputeCallbackName computeCallbackName; + int kimerror = GetComputeCallbackName(i, &computeCallbackName); + KIM::SupportStatus supportStatus; + kimerror = pargs->GetCallbackSupportStatus(computeCallbackName, + &supportStatus); + + if (supportStatus == required) + { + error->all(FLERR,"KIM Model requires unsupported compute callback"); + } + } + } // END enclosing scope for using directives return; } diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index 0c017e75ed..a236a3f87a 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -90,11 +90,11 @@ namespace LAMMPS_NS { KIM::ComputeArguments * pargs; // values set in set_kim_model_has_flags(), called by kim_init() - bool kim_model_has_energy; - bool kim_model_has_forces; - bool kim_model_has_virial; - bool kim_model_has_particleEnergy; - bool kim_model_has_particleVirial; + KIM::SupportStatus kim_model_support_for_energy; + KIM::SupportStatus kim_model_support_for_forces; + KIM::SupportStatus kim_model_support_for_virial; + KIM::SupportStatus kim_model_support_for_particleEnergy; + KIM::SupportStatus kim_model_support_for_particleVirial; // values set in kim_init() bool kim_init_ok; @@ -105,7 +105,6 @@ namespace LAMMPS_NS { class NeighList ** neighborLists; // values set in init_style() - bool kim_model_init_ok; bool kim_particle_codes_ok; int *kim_particle_codes; From 955fe583d8e24ae4e054b74410e60db256ac0f60 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Fri, 29 Jun 2018 10:53:19 -0500 Subject: [PATCH 012/143] Updated docs for new pair_kim --- cmake/CMakeLists.txt | 20 +++++++++---------- cmake/Modules/FindKIM.cmake | 4 ++-- doc/src/Section_packages.txt | 37 ++++++++++++++++++------------------ doc/src/fix_adapt.txt | 9 +-------- doc/src/pair_kim.txt | 22 +++++---------------- examples/kim/in.kim.lj | 10 +++++----- examples/kim/in.kim.lj.lmp | 10 +++++----- lib/kim/Install.py | 8 ++++---- lib/kim/README | 4 ++-- src/KIM/README | 3 +-- 10 files changed, 53 insertions(+), 74 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index bf57398c71..4672b4a3db 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -309,7 +309,7 @@ if(PKG_VORONOI) ExternalProject_Add(voro_build URL http://math.lbl.gov/voro++/download/dir/voro++-0.4.6.tar.gz URL_MD5 2338b824c3b7b25590e18e8df5d68af9 - CONFIGURE_COMMAND "" BUILD_IN_SOURCE 1 INSTALL_COMMAND "" + CONFIGURE_COMMAND "" BUILD_IN_SOURCE 1 INSTALL_COMMAND "" ) ExternalProject_get_property(voro_build SOURCE_DIR) set(VORO_LIBRARIES ${SOURCE_DIR}/src/libvoro++.a) @@ -367,7 +367,7 @@ if(PKG_USER-SMD) if(DOWNLOAD_Eigen3) include(ExternalProject) ExternalProject_Add(Eigen3_build - URL http://bitbucket.org/eigen/eigen/get/3.3.4.tar.gz + URL http://bitbucket.org/eigen/eigen/get/3.3.4.tar.gz URL_MD5 1a47e78efe365a97de0c022d127607c3 CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" ) @@ -407,14 +407,14 @@ if(PKG_KIM) if(DOWNLOAD_KIM) include(ExternalProject) ExternalProject_Add(kim_build - URL https://github.com/openkim/kim-api/archive/v1.9.5.tar.gz - URL_MD5 9f66efc128da33039e30659f36fc6d00 + URL https://github.com/openkim/kim-api/archive/v2.0.0-beta.0.tar.gz + URL_MD5 2c099fe2603fda9a6904fc50d626f71b BUILD_IN_SOURCE 1 CONFIGURE_COMMAND /configure --prefix= ) ExternalProject_get_property(kim_build INSTALL_DIR) - set(KIM_INCLUDE_DIRS ${INSTALL_DIR}/include/kim-api-v1) - set(KIM_LIBRARIES ${INSTALL_DIR}/lib/libkim-api-v1.so) + set(KIM_INCLUDE_DIRS ${INSTALL_DIR}/include/kim-api-v2) + set(KIM_LIBRARIES ${INSTALL_DIR}/lib/libkim-api-v2.so) list(APPEND LAMMPS_DEPS kim_build) else() find_package(KIM) @@ -706,7 +706,7 @@ if(PKG_USER-INTEL) endif() if(PKG_GPU) - if (CMAKE_VERSION VERSION_LESS "3.1") + if (CMAKE_VERSION VERSION_LESS "3.1") message(FATAL_ERROR "For the GPU package you need at least cmake-3.1") endif() set(GPU_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/GPU) @@ -892,7 +892,7 @@ if(BUILD_EXE) add_dependencies(lmp ${LAMMPS_DEPS}) endif() endif() - + set_target_properties(lmp PROPERTIES OUTPUT_NAME lmp${LAMMPS_MACHINE}) install(TARGETS lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) if(ENABLE_TESTING) @@ -954,14 +954,14 @@ message(STATUS "<<< Build configuration >>> get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) list (FIND LANGUAGES "Fortran" _index) if (${_index} GREATER -1) - message(STATUS "Fortran Compiler ${CMAKE_Fortran_COMPILER} + message(STATUS "Fortran Compiler ${CMAKE_Fortran_COMPILER} Type ${CMAKE_Fortran_COMPILER_ID} Version ${CMAKE_Fortran_COMPILER_VERSION} Fortran Flags ${CMAKE_Fortran_FLAGS} ${CMAKE_Fortran_FLAGS_${BTYPE}}") endif() list (FIND LANGUAGES "C" _index) if (${_index} GREATER -1) - message(STATUS "C Compiler ${CMAKE_C_COMPILER} + message(STATUS "C Compiler ${CMAKE_C_COMPILER} Type ${CMAKE_C_COMPILER_ID} Version ${CMAKE_C_COMPILER_VERSION} C Flags ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BTYPE}}") diff --git a/cmake/Modules/FindKIM.cmake b/cmake/Modules/FindKIM.cmake index a01f817cf6..e29f26e01d 100644 --- a/cmake/Modules/FindKIM.cmake +++ b/cmake/Modules/FindKIM.cmake @@ -6,9 +6,9 @@ # KIM_FOUND - True if kim found. # -find_path(KIM_INCLUDE_DIR KIM_API.h PATH_SUFFIXES kim-api-v1) +find_path(KIM_INCLUDE_DIR KIM_SimulatorHeaders.hpp PATH_SUFFIXES kim-api-v2) -find_library(KIM_LIBRARY NAMES kim-api-v1) +find_library(KIM_LIBRARY NAMES kim-api-v2) set(KIM_LIBRARIES ${KIM_LIBRARY}) set(KIM_INCLUDE_DIRS ${KIM_INCLUDE_DIR}) diff --git a/doc/src/Section_packages.txt b/doc/src/Section_packages.txt index 218866e271..839a02b4b6 100644 --- a/doc/src/Section_packages.txt +++ b/doc/src/Section_packages.txt @@ -516,8 +516,7 @@ Elliott (U Minnesota) and James Sethna (Cornell U). [Authors:] Ryan Elliott (U Minnesota) is the main developer for the KIM API which the "pair_style kim"_pair_kim.html command uses. He -developed the pair style in collaboration with Valeriu Smirichinski (U -Minnesota). +developed the pair style. [Install or un-install:] @@ -530,11 +529,11 @@ lib/kim/Install.py script with the specified args. make lib-kim # print help message make lib-kim args="-b " # (re-)install KIM API lib with only example models -make lib-kim args="-b -a Glue_Ercolessi_Adams_Al__MO_324507536345_001" # ditto plus one model +make lib-kim args="-b -a Glue_Ercolessi_Adams_Al__MO_324507536345_002" # ditto plus one model make lib-kim args="-b -a everything" # install KIM API lib with all models -make lib-kim args="-n -a EAM_Dynamo_Ackland_W__MO_141627196590_002" # add one model or model driver -make lib-kim args="-p /usr/local/kim-api" # use an existing KIM API installation at the provided location -make lib-kim args="-p /usr/local/kim-api -a EAM_Dynamo_Ackland_W__MO_141627196590_002" # ditto but add one model or driver :pre +make lib-kim args="-n -a EAM_Dynamo_Ackland_W__MO_141627196590_003" # add one model or model driver +make lib-kim args="-p /usr/local/lib/kim-api-v2" # use an existing KIM API installation at the provided location +make lib-kim args="-p /usr/local/lib/kim-api-v2 -a EAM_Dynamo_Ackland_W__MO_141627196590_003" # ditto but add one model or driver :pre Note that in LAMMPS lingo, a KIM model driver is a pair style (e.g. EAM or Tersoff). A KIM model is a pair style for a particular @@ -730,13 +729,13 @@ args: make lib-latte # print help message make lib-latte args="-b" # download and build in lib/latte/LATTE-master make lib-latte args="-p $HOME/latte" # use existing LATTE installation in $HOME/latte -make lib-latte args="-b -m gfortran" # download and build in lib/latte and +make lib-latte args="-b -m gfortran" # download and build in lib/latte and # copy Makefile.lammps.gfortran to Makefile.lammps :pre Note that 3 symbolic (soft) links, "includelink" and "liblink" and "filelink.o", are created in lib/latte to point into the LATTE home dir. -When LAMMPS builds in src it will use these links. You should +When LAMMPS builds in src it will use these links. You should also check that the Makefile.lammps file you create is appropriate for the compiler you use on your system to build LATTE. @@ -1667,7 +1666,7 @@ This package provides "fix bocs"_fix_bocs.html, a modified version of "fix npt"_fix_nh.html which includes the pressure correction to the barostat as outlined in: -N. J. H. Dunn and W. G. Noid, "Bottom-up coarse-grained models that +N. J. H. Dunn and W. G. Noid, "Bottom-up coarse-grained models that accurately describe the structure, pressure, and compressibility of molecular liquids," J. Chem. Phys. 143, 243148 (2015). @@ -2279,13 +2278,13 @@ based on the Fortran version of Greg Wagner (Northwestern U) while at Sandia. [Install or un-install:] - + make yes-user-meamc make machine :pre - + make no-user-meamc make machine :pre - + [Supporting info:] src/USER-MEAMC: filenames -> commands @@ -2310,13 +2309,13 @@ algorithm. [Author:] Zhen Li (Division of Applied Mathematics, Brown University) [Install or un-install:] - + make yes-user-meso make machine :pre - + make no-user-meso make machine :pre - + [Supporting info:] src/USER-MESO: filenames -> commands @@ -2336,17 +2335,17 @@ USER-MOFFF package :link(USER-MOFFF),h4 [Contents:] Pair, angle and improper styles needed to employ the MOF-FF -force field by Schmid and coworkers with LAMMPS. +force field by Schmid and coworkers with LAMMPS. MOF-FF is a first principles derived force field with the primary aim -to simulate MOFs and related porous framework materials, using spherical +to simulate MOFs and related porous framework materials, using spherical Gaussian charges. It is described in S. Bureekaew et al., Phys. Stat. Sol. B 2013, 250, 1128-1141. -For the usage of MOF-FF see the example in the example directory as +For the usage of MOF-FF see the example in the example directory as well as the "MOF+"_MOFplus website. :link(MOFplus,https://www.mofplus.org/content/show/MOF-FF) -[Author:] Hendrik Heenen (Technical U of Munich), +[Author:] Hendrik Heenen (Technical U of Munich), Rochus Schmid (Ruhr-University Bochum). [Install or un-install:] diff --git a/doc/src/fix_adapt.txt b/doc/src/fix_adapt.txt index 7a34f2ff44..939a664501 100644 --- a/doc/src/fix_adapt.txt +++ b/doc/src/fix_adapt.txt @@ -123,8 +123,7 @@ meaning of these parameters: "lubricate"_pair_lubricate.html: mu: global: "gauss"_pair_gauss.html: a: type pairs: "morse"_pair_morse.html: d0,r0,alpha: type pairs: -"soft"_pair_soft.html: a: type pairs: -"kim"_pair_kim.html: PARAM_FREE_*:i,j,...: global :tb(c=3,s=:) +"soft"_pair_soft.html: a: type pairs: :tb(c=3,s=:) NOTE: It is easy to add new pairwise potentials and their parameters to this list. All it typically takes is adding an extract() method to @@ -132,12 +131,6 @@ the pair_*.cpp file associated with the potential. Some parameters are global settings for the pair style, e.g. the viscosity setting "mu" for "pair_style lubricate"_pair_lubricate.html. -For "pair_kim"_pair_kim.html, all free parameters supported by the -KIM Model are available (e.g., PARAM_FREE_sigmas provided by the -LennardJones612_Universal__MO_826355984548_001 Model). If the free -parameter corresponds to an array, then the particular array element -to be adapted must be specified (e.g., "PARAM_FREE_sigmas:10", to -adapt the tenth entry of the sigmas array). Other parameters apply to atom type pairs within the pair style, e.g. the prefactor "a" for "pair_style soft"_pair_soft.html. diff --git a/doc/src/pair_kim.txt b/doc/src/pair_kim.txt index c5d910e27c..3d105e2226 100644 --- a/doc/src/pair_kim.txt +++ b/doc/src/pair_kim.txt @@ -10,18 +10,14 @@ pair_style kim command :h3 [Syntax:] -pair_style kim virialmode model printflag :pre +pair_style kim virialmode model :pre virialmode = KIMvirial or LAMMPSvirial model = name of KIM model (potential) -printflag = 1/0 do or do not print KIM descriptor file, optional :ul [Examples:] -pair_style kim KIMvirial model_Ar_P_Morse -pair_coeff * * Ar Ar :pre - -pair_style kim KIMvirial model_Ar_P_Morse 1 +pair_style kim KIMvirial ex_model_Ar_P_LJ pair_coeff * * Ar Ar :pre [Description:] @@ -66,10 +62,6 @@ potential as KIM defines it. In principle, LAMMPS can invoke any KIM model. You should get an error or warning message from either LAMMPS or KIM if there is an incompatibility. -The argument {printflag} is optional. If it is set to a non-zero -value then a KIM descriptor file is printed when KIM is invoked. This -can be useful for debugging. The default is to not print this file. - Only a single pair_coeff command is used with the {kim} style which specifies the mapping of LAMMPS atom types to KIM elements. This is done by specifying N additional arguments after the * * in the @@ -86,18 +78,14 @@ pair_coeff * * Si Si Si C :pre The 1st 2 arguments must be * * so as to span all LAMMPS atom types. The first three Si arguments map LAMMPS atom types 1,2,3 to Si as defined within KIM. The final C argument maps LAMMPS atom type 4 to C -as defined within KIM. If a mapping value is specified as NULL, the -mapping is not performed. This can only be used when a {kim} -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. +as defined within KIM. :line In addition to the usual LAMMPS error messages, the KIM library itself may generate errors, which should be printed to the screen. In this case it is also useful to check the kim.log file for additional error -information. This file kim.log should be generated in the same +information. The file kim.log should be generated in the same directory where LAMMPS is running. To download, build, and install the KIM library on your system, see @@ -130,7 +118,7 @@ LAMMPS was built with that package. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. This current version of pair_style kim is compatible with the -kim-api package version 1.6.0 and higher. +kim-api package version 2.0.0-beta.0 and higher. [Related commands:] diff --git a/examples/kim/in.kim.lj b/examples/kim/in.kim.lj index f33b258be8..a8e2b9616b 100644 --- a/examples/kim/in.kim.lj +++ b/examples/kim/in.kim.lj @@ -16,14 +16,14 @@ region box block 0 ${xx} 0 ${yy} 0 ${zz} create_box 1 box create_atoms 1 box -#pair_style lj/cut 8.1500 -#pair_coeff 1 1 0.0031 2.7400 +#pair_style lj/cut 7.5548200 +#pair_coeff 1 1 0.0123529 1.8887100 #pair_modify shift yes -pair_style kim KIMvirial ex_model_Ne_P_fastLJ -pair_coeff * * Ne +pair_style kim KIMvirial LennardJones612_Ar +pair_coeff * * Ar -mass 1 20.18 +mass 1 39.95 velocity all create 200.0 232345 loop geom neighbor 0.3 bin diff --git a/examples/kim/in.kim.lj.lmp b/examples/kim/in.kim.lj.lmp index 8879024590..ddb7624945 100644 --- a/examples/kim/in.kim.lj.lmp +++ b/examples/kim/in.kim.lj.lmp @@ -16,14 +16,14 @@ region box block 0 ${xx} 0 ${yy} 0 ${zz} create_box 1 box create_atoms 1 box -pair_style lj/cut 8.1500 -pair_coeff 1 1 0.0031 2.7400 +pair_style lj/cut 7.5548200 +pair_coeff 1 1 0.0123529 1.8887100 pair_modify shift yes -#pair_style kim KIMvirial ex_model_Ne_P_fastLJ -#pair_coeff * * Ne +#pair_style kim KIMvirial LennardJones612_Ar +#pair_coeff * * Ar -mass 1 20.18 +mass 1 39.95 velocity all create 200.0 232345 loop geom neighbor 0.3 bin diff --git a/lib/kim/Install.py b/lib/kim/Install.py index 1bcaffd34a..f9eb1c5eed 100644 --- a/lib/kim/Install.py +++ b/lib/kim/Install.py @@ -12,11 +12,11 @@ help = """ Syntax from src dir: make lib-kim args="-b -v version -a kim-name" or: make lib-kim args="-b -a everything" or: make lib-kim args="-n -a kim-name" - or: make lib-kim args="-p /usr/local/open-kim -a kim-name" + or: make lib-kim args="-p /usr/local/lib/kim-api-v2 -a kim-name" Syntax from lib dir: python Install.py -b -v version -a kim-name or: python Install.py -b -a everything or: python Install.py -n -a kim-name - or: python Install.py -p /usr/local/open-kim -a kim-name + or: python Install.py -p /usr/local/lib/kim-api-v2 -a kim-name specify one or more options, order does not matter @@ -36,9 +36,9 @@ specify one or more options, order does not matter Examples: make lib-kim args="-b" # install KIM API lib with only example models -make lib-kim args="-a Glue_Ercolessi_Adams_Al__MO_324507536345_001" # Ditto plus one model +make lib-kim args="-a Glue_Ercolessi_Adams_Al__MO_324507536345_002" # Ditto plus one model make lib-kim args="-b -a everything" # install KIM API lib with all models -make lib-kim args="-n -a EAM_Dynamo_Ackland_W__MO_141627196590_002" # only add one model or model driver +make lib-kim args="-n -a EAM_Dynamo_Ackland_W__MO_141627196590_003" # only add one model or model driver See the list of KIM model drivers here: https://openkim.org/kim-items/model-drivers/alphabetical diff --git a/lib/kim/README b/lib/kim/README index ce4ea1bdff..80d77d3332 100644 --- a/lib/kim/README +++ b/lib/kim/README @@ -46,8 +46,8 @@ $ rm -rf kim-api-vX.Y.Z.txz 5. To add items do the following (replace the kim item name with your desired value) -$ source ${PWD}/kim-api-vX.Y.Z/bin/kim-api-v1-activate -$ kim-api-v1-collections-management install system Pair_Johnson_Fe__MO_857282754307_002 +$ source ${PWD}/kim-api-vX.Y.Z/bin/kim-api-vX-activate +$ kim-api-vX-collections-management install system Pair_Johnson_Fe__MO_857282754307_002 ----------------- diff --git a/src/KIM/README b/src/KIM/README index 496db92cf2..a69206596f 100644 --- a/src/KIM/README +++ b/src/KIM/README @@ -26,5 +26,4 @@ library you can test it using an input file from the examples dir: ./lmp_serial < lammps/examples/kim/in.kim.lj -This pair_style was written by Valeriu Smirichinski and Ryan -S. Elliott (U Minn). +This pair_style was written by Ryan S. Elliott (U Minn). From 68ec8822ee4b09476d4496eb56522f5d2478a3ec Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Fri, 29 Jun 2018 16:24:15 -0500 Subject: [PATCH 013/143] Update example/kim/log.* --- examples/kim/log.28Jun15.kim.lj.lmp.ubuntu.1 | 33 ---------- examples/kim/log.28Jun15.kim.lj.lmp.ubuntu.4 | 33 ---------- examples/kim/log.28Jun15.kim.lj.ubuntu.1 | 33 ---------- examples/kim/log.28Jun15.kim.lj.ubuntu.4 | 33 ---------- examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.1 | 66 +++++++++++++++++++ examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.4 | 66 +++++++++++++++++++ examples/kim/log.29Jun18.kim.lj.ubuntu.1 | 68 ++++++++++++++++++++ examples/kim/log.29Jun18.kim.lj.ubuntu.4 | 68 ++++++++++++++++++++ 8 files changed, 268 insertions(+), 132 deletions(-) delete mode 100644 examples/kim/log.28Jun15.kim.lj.lmp.ubuntu.1 delete mode 100644 examples/kim/log.28Jun15.kim.lj.lmp.ubuntu.4 delete mode 100644 examples/kim/log.28Jun15.kim.lj.ubuntu.1 delete mode 100644 examples/kim/log.28Jun15.kim.lj.ubuntu.4 create mode 100644 examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.1 create mode 100644 examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.4 create mode 100644 examples/kim/log.29Jun18.kim.lj.ubuntu.1 create mode 100644 examples/kim/log.29Jun18.kim.lj.ubuntu.4 diff --git a/examples/kim/log.28Jun15.kim.lj.lmp.ubuntu.1 b/examples/kim/log.28Jun15.kim.lj.lmp.ubuntu.1 deleted file mode 100644 index efae0587a1..0000000000 --- a/examples/kim/log.28Jun15.kim.lj.lmp.ubuntu.1 +++ /dev/null @@ -1,33 +0,0 @@ -LAMMPS (15 May 2015) -Lattice spacing in x,y,z = 4.43 4.43 4.43 -Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) - 1 by 1 by 1 MPI processor grid -Created 32000 atoms -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - master list distance cutoff = 8.45 -Setting up run ... -Memory usage per processor = 9.18789 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 200 -741.55469 0 85.684388 -34.939092 - 100 108.37517 -362.56658 0 85.694308 3963.7892 -Loop time of 2.95205 on 1 procs for 100 steps with 32000 atoms - -Pair time (%) = 2.52074 (85.3894) -Neigh time (%) = 0.347949 (11.7867) -Comm time (%) = 0.0228171 (0.772925) -Outpt time (%) = 0.000188828 (0.00639649) -Other time (%) = 0.0603588 (2.04464) - -Nlocal: 32000 ave 32000 max 32000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 20131 ave 20131 max 20131 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 1.88909e+06 ave 1.88909e+06 max 1.88909e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 1889091 -Ave neighs/atom = 59.0341 -Neighbor list builds = 5 -Dangerous builds = 0 diff --git a/examples/kim/log.28Jun15.kim.lj.lmp.ubuntu.4 b/examples/kim/log.28Jun15.kim.lj.lmp.ubuntu.4 deleted file mode 100644 index 12c1c76695..0000000000 --- a/examples/kim/log.28Jun15.kim.lj.lmp.ubuntu.4 +++ /dev/null @@ -1,33 +0,0 @@ -LAMMPS (15 May 2015) -Lattice spacing in x,y,z = 4.43 4.43 4.43 -Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) - 1 by 2 by 2 MPI processor grid -Created 32000 atoms -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - master list distance cutoff = 8.45 -Setting up run ... -Memory usage per processor = 4.58461 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 200 -741.55469 0 85.684388 -34.939092 - 100 108.37517 -362.56658 0 85.694308 3963.7892 -Loop time of 6.15911 on 4 procs for 100 steps with 32000 atoms - -Pair time (%) = 1.76201 (28.6083) -Neigh time (%) = 0.265002 (4.30261) -Comm time (%) = 3.64452 (59.1729) -Outpt time (%) = 0.0169877 (0.275815) -Other time (%) = 0.470582 (7.64042) - -Nlocal: 8000 ave 8010 max 7989 min -Histogram: 1 0 0 0 0 2 0 0 0 1 -Nghost: 9240.25 ave 9249 max 9228 min -Histogram: 1 0 0 0 1 0 0 0 0 2 -Neighs: 472273 ave 473390 max 471652 min -Histogram: 2 0 0 1 0 0 0 0 0 1 - -Total # of neighbors = 1889091 -Ave neighs/atom = 59.0341 -Neighbor list builds = 5 -Dangerous builds = 0 diff --git a/examples/kim/log.28Jun15.kim.lj.ubuntu.1 b/examples/kim/log.28Jun15.kim.lj.ubuntu.1 deleted file mode 100644 index 95284453b1..0000000000 --- a/examples/kim/log.28Jun15.kim.lj.ubuntu.1 +++ /dev/null @@ -1,33 +0,0 @@ -LAMMPS (15 May 2015) -Lattice spacing in x,y,z = 4.43 4.43 4.43 -Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) - 1 by 1 by 1 MPI processor grid -Created 32000 atoms -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - master list distance cutoff = 8.45 -Setting up run ... -Memory usage per processor = 9.43789 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 200 -741.55469 0 85.684388 -34.939092 - 100 108.37517 -362.56658 0 85.694308 3963.7892 -Loop time of 3.79746 on 1 procs for 100 steps with 32000 atoms - -Pair time (%) = 3.18686 (83.9207) -Neigh time (%) = 0.524724 (13.8178) -Comm time (%) = 0.0244031 (0.642616) -Outpt time (%) = 0.000174046 (0.00458321) -Other time (%) = 0.061305 (1.61437) - -Nlocal: 32000 ave 32000 max 32000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 20131 ave 20131 max 20131 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 2.09236e+06 ave 2.09236e+06 max 2.09236e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 2092355 -Ave neighs/atom = 65.3861 -Neighbor list builds = 5 -Dangerous builds = 0 diff --git a/examples/kim/log.28Jun15.kim.lj.ubuntu.4 b/examples/kim/log.28Jun15.kim.lj.ubuntu.4 deleted file mode 100644 index 7eaf58aad4..0000000000 --- a/examples/kim/log.28Jun15.kim.lj.ubuntu.4 +++ /dev/null @@ -1,33 +0,0 @@ -LAMMPS (15 May 2015) -Lattice spacing in x,y,z = 4.43 4.43 4.43 -Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) - 1 by 2 by 2 MPI processor grid -Created 32000 atoms -Neighbor list info ... - 1 neighbor list requests - update every 1 steps, delay 0 steps, check yes - master list distance cutoff = 8.45 -Setting up run ... -Memory usage per processor = 4.70961 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 200 -741.55469 0 85.684388 -34.939092 - 100 108.37517 -362.56658 0 85.694308 3963.7892 -Loop time of 7.25305 on 4 procs for 100 steps with 32000 atoms - -Pair time (%) = 2.52571 (34.8227) -Neigh time (%) = 0.500287 (6.8976) -Comm time (%) = 3.70236 (51.0456) -Outpt time (%) = 0.00146681 (0.0202234) -Other time (%) = 0.523229 (7.21391) - -Nlocal: 8000 ave 8010 max 7989 min -Histogram: 1 0 0 0 0 2 0 0 0 1 -Nghost: 9240.25 ave 9249 max 9228 min -Histogram: 1 0 0 0 1 0 0 0 0 2 -Neighs: 555266 ave 555920 max 554805 min -Histogram: 2 0 0 0 0 1 0 0 0 1 - -Total # of neighbors = 2221065 -Ave neighs/atom = 69.4083 -Neighbor list builds = 5 -Dangerous builds = 0 diff --git a/examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.1 b/examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.1 new file mode 100644 index 0000000000..76106e009f --- /dev/null +++ b/examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.1 @@ -0,0 +1,66 @@ +-------------------------------------------------------------------------- +[[30970,1],0]: A high-performance Open MPI point-to-point messaging module +was unable to find any relevant network interfaces: + +Module: OpenFabrics (openib) + Host: ubuntu-artful + +Another transport will be used instead, although this may result in +lower performance. + +NOTE: You can disable this warning by setting the MCA parameter +btl_base_warn_component_unused to 0. +-------------------------------------------------------------------------- +LAMMPS (22 Jun 2018) +Lattice spacing in x,y,z = 4.43 4.43 4.43 +Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) + 1 by 1 by 1 MPI processor grid +Created 32000 atoms + Time spent = 0.0031676 secs +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 7.85482 + ghost atom cutoff = 7.85482 + binsize = 3.92741, bins = 23 23 23 + 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 +Setting up Verlet run ... + Unit style : metal + Current step : 0 + Time step : 0.001 +Per MPI rank memory allocation (min/avg/max) = 16.58 | 16.58 | 16.58 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 200 -495.29247 0 331.94661 -978.84224 + 100 212.66365 -547.67175 0 331.94665 -1054.2086 +Loop time of 1.40245 on 1 procs for 100 steps with 32000 atoms + +Performance: 6.161 ns/day, 3.896 hours/ns, 71.304 timesteps/s +100.0% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.2556 | 1.2556 | 1.2556 | 0.0 | 89.53 +Neigh | 0.098976 | 0.098976 | 0.098976 | 0.0 | 7.06 +Comm | 0.011525 | 0.011525 | 0.011525 | 0.0 | 0.82 +Output | 0.00021903 | 0.00021903 | 0.00021903 | 0.0 | 0.02 +Modify | 0.023739 | 0.023739 | 0.023739 | 0.0 | 1.69 +Other | | 0.01244 | | | 0.89 + +Nlocal: 32000 ave 32000 max 32000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 19911 ave 19911 max 19911 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 1.36493e+06 ave 1.36493e+06 max 1.36493e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 1364931 +Ave neighs/atom = 42.6541 +Neighbor list builds = 3 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.4 b/examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.4 new file mode 100644 index 0000000000..634c038efd --- /dev/null +++ b/examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.4 @@ -0,0 +1,66 @@ +-------------------------------------------------------------------------- +[[30962,1],0]: A high-performance Open MPI point-to-point messaging module +was unable to find any relevant network interfaces: + +Module: OpenFabrics (openib) + Host: ubuntu-artful + +Another transport will be used instead, although this may result in +lower performance. + +NOTE: You can disable this warning by setting the MCA parameter +btl_base_warn_component_unused to 0. +-------------------------------------------------------------------------- +LAMMPS (22 Jun 2018) +Lattice spacing in x,y,z = 4.43 4.43 4.43 +Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) + 1 by 2 by 2 MPI processor grid +Created 32000 atoms + Time spent = 0.00143054 secs +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 7.85482 + ghost atom cutoff = 7.85482 + binsize = 3.92741, bins = 23 23 23 + 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 +Setting up Verlet run ... + Unit style : metal + Current step : 0 + Time step : 0.001 +Per MPI rank memory allocation (min/avg/max) = 6.875 | 6.875 | 6.875 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 200 -495.29247 0 331.94661 -978.84224 + 100 212.66365 -547.67175 0 331.94665 -1054.2086 +Loop time of 1.55473 on 4 procs for 100 steps with 32000 atoms + +Performance: 5.557 ns/day, 4.319 hours/ns, 64.320 timesteps/s +23.8% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.47168 | 0.51922 | 0.58923 | 6.2 | 33.40 +Neigh | 0.061309 | 0.077009 | 0.10276 | 5.7 | 4.95 +Comm | 0.87185 | 0.92596 | 0.95327 | 3.4 | 59.56 +Output | 0.00035269 | 0.00047555 | 0.00055331 | 0.0 | 0.03 +Modify | 0.0060711 | 0.00616 | 0.0062612 | 0.1 | 0.40 +Other | | 0.0259 | | | 1.67 + +Nlocal: 8000 ave 8014 max 7988 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Nghost: 9131 ave 9143 max 9117 min +Histogram: 1 0 0 0 0 1 1 0 0 1 +Neighs: 341233 ave 341715 max 340679 min +Histogram: 1 0 0 0 1 0 0 1 0 1 + +Total # of neighbors = 1364931 +Ave neighs/atom = 42.6541 +Neighbor list builds = 3 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/kim/log.29Jun18.kim.lj.ubuntu.1 b/examples/kim/log.29Jun18.kim.lj.ubuntu.1 new file mode 100644 index 0000000000..c1875916db --- /dev/null +++ b/examples/kim/log.29Jun18.kim.lj.ubuntu.1 @@ -0,0 +1,68 @@ +-------------------------------------------------------------------------- +[[30495,1],0]: A high-performance Open MPI point-to-point messaging module +was unable to find any relevant network interfaces: + +Module: OpenFabrics (openib) + Host: ubuntu-artful + +Another transport will be used instead, although this may result in +lower performance. + +NOTE: You can disable this warning by setting the MCA parameter +btl_base_warn_component_unused to 0. +-------------------------------------------------------------------------- +LAMMPS (22 Jun 2018) +Lattice spacing in x,y,z = 4.43 4.43 4.43 +Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) + 1 by 1 by 1 MPI processor grid +Created 32000 atoms + Time spent = 0.00259765 secs +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 7.85482 + ghost atom cutoff = 7.85482 + binsize = 3.92741, bins = 23 23 23 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair kim, perpetual + attributes: full, newton on, ghost, cut 7.55482 + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard +Setting up Verlet run ... + Unit style : metal + Current step : 0 + Time step : 0.001 +Per MPI rank memory allocation (min/avg/max) = 27.14 | 27.14 | 27.14 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 200 -495.29247 0 331.94661 -978.84224 + 100 212.65961 -547.66877 0 331.93294 -1053.7732 +Loop time of 2.12331 on 1 procs for 100 steps with 32000 atoms + +Performance: 4.069 ns/day, 5.898 hours/ns, 47.096 timesteps/s +99.9% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.7197 | 1.7197 | 1.7197 | 0.0 | 80.99 +Neigh | 0.35501 | 0.35501 | 0.35501 | 0.0 | 16.72 +Comm | 0.012289 | 0.012289 | 0.012289 | 0.0 | 0.58 +Output | 0.00021102 | 0.00021102 | 0.00021102 | 0.0 | 0.01 +Modify | 0.023484 | 0.023484 | 0.023484 | 0.0 | 1.11 +Other | | 0.01266 | | | 0.60 + +Nlocal: 32000 ave 32000 max 32000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 19911 ave 19911 max 19911 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 2.569e+06 ave 2.569e+06 max 2.569e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 2568996 +Ave neighs/atom = 80.2811 +Neighbor list builds = 3 +Dangerous builds = 0 +Total wall time: 0:00:02 diff --git a/examples/kim/log.29Jun18.kim.lj.ubuntu.4 b/examples/kim/log.29Jun18.kim.lj.ubuntu.4 new file mode 100644 index 0000000000..5ef352a667 --- /dev/null +++ b/examples/kim/log.29Jun18.kim.lj.ubuntu.4 @@ -0,0 +1,68 @@ +-------------------------------------------------------------------------- +[[30487,1],0]: A high-performance Open MPI point-to-point messaging module +was unable to find any relevant network interfaces: + +Module: OpenFabrics (openib) + Host: ubuntu-artful + +Another transport will be used instead, although this may result in +lower performance. + +NOTE: You can disable this warning by setting the MCA parameter +btl_base_warn_component_unused to 0. +-------------------------------------------------------------------------- +LAMMPS (22 Jun 2018) +Lattice spacing in x,y,z = 4.43 4.43 4.43 +Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) + 1 by 2 by 2 MPI processor grid +Created 32000 atoms + Time spent = 0.00128874 secs +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 7.85482 + ghost atom cutoff = 7.85482 + binsize = 3.92741, bins = 23 23 23 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair kim, perpetual + attributes: full, newton on, ghost, cut 7.55482 + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard +Setting up Verlet run ... + Unit style : metal + Current step : 0 + Time step : 0.001 +Per MPI rank memory allocation (min/avg/max) = 10.82 | 10.82 | 10.82 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 200 -495.29247 0 331.94661 -978.84224 + 100 212.65961 -547.66877 0 331.93294 -1053.7732 +Loop time of 2.58934 on 4 procs for 100 steps with 32000 atoms + +Performance: 3.337 ns/day, 7.193 hours/ns, 38.620 timesteps/s +24.3% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.85344 | 0.94031 | 1.0212 | 7.2 | 36.31 +Neigh | 0.40159 | 0.42603 | 0.43728 | 2.2 | 16.45 +Comm | 1.1013 | 1.1823 | 1.2796 | 6.9 | 45.66 +Output | 0.00041301 | 0.00056702 | 0.00081648 | 0.0 | 0.02 +Modify | 0.0062882 | 0.0063459 | 0.0064657 | 0.1 | 0.25 +Other | | 0.03375 | | | 1.30 + +Nlocal: 8000 ave 8014 max 7988 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Nghost: 9131 ave 9143 max 9117 min +Histogram: 1 0 0 0 0 1 1 0 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 642249 ave 643365 max 641215 min +Histogram: 1 0 0 0 2 0 0 0 0 1 + +Total # of neighbors = 2568996 +Ave neighs/atom = 80.2811 +Neighbor list builds = 3 +Dangerous builds = 0 +Total wall time: 0:00:03 From 5bdc29533123fa6f1d0ef487215ad2496c3bc6cd Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Sun, 1 Jul 2018 16:23:17 -0500 Subject: [PATCH 014/143] Add skin to pair_kim neigh-list cutoffs & update docs --- doc/src/pair_kim.txt | 7 +++++-- examples/kim/in.kim.lj | 6 ++++++ lib/kim/README | 12 +++++++++--- src/KIM/pair_kim.cpp | 3 ++- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/doc/src/pair_kim.txt b/doc/src/pair_kim.txt index 3d105e2226..4599779ca8 100644 --- a/doc/src/pair_kim.txt +++ b/doc/src/pair_kim.txt @@ -47,8 +47,11 @@ section of Section packages"_Section_packages.html#KIM has instructions on how to do this with a simple make command, when building LAMMPS. -See the examples/kim dir for an input script that uses a KIM model -(potential) for Lennard-Jones. +See the examples/kim dir for an input script that uses a KIM model (potential) +for Lennard-Jones. Note, for this example input script, the example models +shipped with with kim-api package must be installed. See the "Making +LAMMPS"_Section_start.html#start_3 section and the ./lib/kim/README for details +on how to build LAMMSPS with the kim-api and how to install the example models. :line diff --git a/examples/kim/in.kim.lj b/examples/kim/in.kim.lj index a8e2b9616b..4ce7af97c4 100644 --- a/examples/kim/in.kim.lj +++ b/examples/kim/in.kim.lj @@ -1,4 +1,10 @@ # 3d Lennard-Jones melt +# +# This example requires that the example models provided with +# the kim-api package are installed. see the ./lib/kim/README or +# ./lib/kim/Install.py files for details on how to install these +# example models. +# variable x index 1 variable y index 1 diff --git a/lib/kim/README b/lib/kim/README index 80d77d3332..6bcad18ce0 100644 --- a/lib/kim/README +++ b/lib/kim/README @@ -36,14 +36,20 @@ $ ./configure --prefix=${PWD}/../installed-kim-api-vX.Y.Z $ make $ make install -$ cd .. -4. Remove source and build files +4. To install the example models shipped with the kim-api + +$ cd examples +$ make model-drivers-all-system +$ make models-all-system +$ cd ../.. + +5. Remove source and build files $ rm -rf kim-api-vX.Y.Z $ rm -rf kim-api-vX.Y.Z.txz -5. To add items do the following (replace the kim item name with your +6. To add items do the following (replace the kim item name with your desired value) $ source ${PWD}/kim-api-vX.Y.Z/bin/kim-api-vX-activate diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 5f123de45d..79ced5b9e9 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -429,7 +429,8 @@ void PairKIM::init_style() neighbor->requests[irequest]->full = 1; neighbor->requests[irequest]->ghost = 1; neighbor->requests[irequest]->cut = 1; - neighbor->requests[irequest]->cutoff = kim_cutoff_values[i]; + neighbor->requests[irequest]->cutoff + = kim_cutoff_values[i] + neighbor->skin; } return; From 0fbc6bebf545c2d53a2acefc14f5289bfd08b365 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Mon, 2 Jul 2018 21:48:47 -0500 Subject: [PATCH 015/143] Fix no-virial support -> LAMMPSvirial in pair_kim --- src/KIM/pair_kim.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 79ced5b9e9..ee9bac000d 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -958,9 +958,13 @@ void PairKIM::set_kim_model_has_flags() error->warning(FLERR,"KIM Model does not provide `partialForce'; " "Forces will be zero"); - if (kim_model_support_for_virial == notSupported) + if ((no_virial_fdotr_compute == 1) && + (kim_model_support_for_virial == notSupported)) + { error->warning(FLERR,"KIM Model does not provide `partialVirial'. " "pair_kim now using `LAMMPSvirial' option."); + no_virial_fdotr_compute = 0; + } if (kim_model_support_for_particleEnergy == notSupported) error->warning(FLERR,"KIM Model does not provide `partialParticleEnergy'; " From 0264e044e2d7db5635fae76f74c09bd71b6b392d Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Mon, 2 Jul 2018 21:51:05 -0500 Subject: [PATCH 016/143] Update example/kim input files --- examples/kim/in.kim.lj | 8 ++++---- examples/kim/in.kim.lj.lmp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/kim/in.kim.lj b/examples/kim/in.kim.lj index 4ce7af97c4..851243bed8 100644 --- a/examples/kim/in.kim.lj +++ b/examples/kim/in.kim.lj @@ -22,11 +22,11 @@ region box block 0 ${xx} 0 ${yy} 0 ${zz} create_box 1 box create_atoms 1 box -#pair_style lj/cut 7.5548200 -#pair_coeff 1 1 0.0123529 1.8887100 -#pair_modify shift yes +#pair_style lj/cut 8.1500 +#pair_coeff 1 1 0.0104 3.4000 +#pair_modify shift no -pair_style kim KIMvirial LennardJones612_Ar +pair_style kim LAMMPSvirial LennardJones_Ar pair_coeff * * Ar mass 1 39.95 diff --git a/examples/kim/in.kim.lj.lmp b/examples/kim/in.kim.lj.lmp index ddb7624945..aa6dbcad6f 100644 --- a/examples/kim/in.kim.lj.lmp +++ b/examples/kim/in.kim.lj.lmp @@ -16,11 +16,11 @@ region box block 0 ${xx} 0 ${yy} 0 ${zz} create_box 1 box create_atoms 1 box -pair_style lj/cut 7.5548200 -pair_coeff 1 1 0.0123529 1.8887100 -pair_modify shift yes +pair_style lj/cut 8.1500 +pair_coeff 1 1 0.0104 3.4000 +pair_modify shift no -#pair_style kim KIMvirial LennardJones612_Ar +#pair_style kim KIMvirial LennardJones_Ar #pair_coeff * * Ar mass 1 39.95 From 7eeb96f1afdc3aa1a37cd5429727e3549b8ebcc0 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Tue, 3 Jul 2018 23:37:54 -0500 Subject: [PATCH 017/143] Update pair_kim to work with new neig. list Hints --- examples/kim/in.kim.lj | 4 +- examples/kim/in.kim.lj.lmp | 2 +- examples/kim/in.kim.lj.lmp.newton-on | 35 ++++ ...g.04Jul2018.kim.lj.lmp.newton-on.ubuntu.1} | 42 ++-- ...g.04Jul2018.kim.lj.lmp.newton-on.ubuntu.4} | 52 ++--- ...tu.1 => log.04Jul2018.kim.lj.lmp.ubuntu.1} | 48 +++-- .../kim/log.04Jul2018.kim.lj.lmp.ubuntu.4 | 66 ++++++ examples/kim/log.04Jul2018.kim.lj.ubuntu.1 | 69 +++++++ examples/kim/log.04Jul2018.kim.lj.ubuntu.4 | 78 ++++++++ examples/kim/log.29Jun18.kim.lj.ubuntu.4 | 68 ------- src/KIM/pair_kim.cpp | 188 ++++++++++-------- src/KIM/pair_kim.h | 10 +- 12 files changed, 433 insertions(+), 229 deletions(-) create mode 100644 examples/kim/in.kim.lj.lmp.newton-on rename examples/kim/{log.29Jun18.kim.lj.lmp.ubuntu.1 => log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.1} (56%) rename examples/kim/{log.29Jun18.kim.lj.lmp.ubuntu.4 => log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.4} (50%) rename examples/kim/{log.29Jun18.kim.lj.ubuntu.1 => log.04Jul2018.kim.lj.lmp.ubuntu.1} (52%) create mode 100644 examples/kim/log.04Jul2018.kim.lj.lmp.ubuntu.4 create mode 100644 examples/kim/log.04Jul2018.kim.lj.ubuntu.1 create mode 100644 examples/kim/log.04Jul2018.kim.lj.ubuntu.4 delete mode 100644 examples/kim/log.29Jun18.kim.lj.ubuntu.4 diff --git a/examples/kim/in.kim.lj b/examples/kim/in.kim.lj index 851243bed8..a17ec982da 100644 --- a/examples/kim/in.kim.lj +++ b/examples/kim/in.kim.lj @@ -16,6 +16,7 @@ variable zz equal 20*$z units metal atom_style atomic +newton off lattice fcc 4.4300 region box block 0 ${xx} 0 ${yy} 0 ${zz} @@ -24,9 +25,8 @@ create_atoms 1 box #pair_style lj/cut 8.1500 #pair_coeff 1 1 0.0104 3.4000 -#pair_modify shift no -pair_style kim LAMMPSvirial LennardJones_Ar +pair_style kim KIMvirial LennardJones_Ar pair_coeff * * Ar mass 1 39.95 diff --git a/examples/kim/in.kim.lj.lmp b/examples/kim/in.kim.lj.lmp index aa6dbcad6f..a10e3e2e90 100644 --- a/examples/kim/in.kim.lj.lmp +++ b/examples/kim/in.kim.lj.lmp @@ -10,6 +10,7 @@ variable zz equal 20*$z units metal atom_style atomic +newton off lattice fcc 4.4300 region box block 0 ${xx} 0 ${yy} 0 ${zz} @@ -18,7 +19,6 @@ create_atoms 1 box pair_style lj/cut 8.1500 pair_coeff 1 1 0.0104 3.4000 -pair_modify shift no #pair_style kim KIMvirial LennardJones_Ar #pair_coeff * * Ar diff --git a/examples/kim/in.kim.lj.lmp.newton-on b/examples/kim/in.kim.lj.lmp.newton-on new file mode 100644 index 0000000000..d17bc14984 --- /dev/null +++ b/examples/kim/in.kim.lj.lmp.newton-on @@ -0,0 +1,35 @@ +# 3d Lennard-Jones melt + +variable x index 1 +variable y index 1 +variable z index 1 + +variable xx equal 20*$x +variable yy equal 20*$y +variable zz equal 20*$z + +units metal +atom_style atomic +newton on + +lattice fcc 4.4300 +region box block 0 ${xx} 0 ${yy} 0 ${zz} +create_box 1 box +create_atoms 1 box + +pair_style lj/cut 8.1500 +pair_coeff 1 1 0.0104 3.4000 + +#pair_style kim KIMvirial LennardJones_Ar +#pair_coeff * * Ar + +mass 1 39.95 +velocity all create 200.0 232345 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +#fix 1 all npt temp 1.0 1.0 1.0 iso 1.0 1.0 3.0 + +run 100 diff --git a/examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.1 b/examples/kim/log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.1 similarity index 56% rename from examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.1 rename to examples/kim/log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.1 index 76106e009f..70eae36a48 100644 --- a/examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.1 +++ b/examples/kim/log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.1 @@ -1,5 +1,5 @@ -------------------------------------------------------------------------- -[[30970,1],0]: A high-performance Open MPI point-to-point messaging module +[[19053,1],0]: A high-performance Open MPI point-to-point messaging module was unable to find any relevant network interfaces: Module: OpenFabrics (openib) @@ -16,13 +16,13 @@ Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 1 by 1 MPI processor grid Created 32000 atoms - Time spent = 0.0031676 secs + Time spent = 0.00270113 secs Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 7.85482 - ghost atom cutoff = 7.85482 - binsize = 3.92741, bins = 23 23 23 + master list distance cutoff = 8.45 + ghost atom cutoff = 8.45 + binsize = 4.225, bins = 21 21 21 1 neighbor lists, perpetual/occasional/extra = 1 0 0 (1) pair lj/cut, perpetual attributes: half, newton on @@ -33,34 +33,34 @@ Setting up Verlet run ... Unit style : metal Current step : 0 Time step : 0.001 -Per MPI rank memory allocation (min/avg/max) = 16.58 | 16.58 | 16.58 Mbytes +Per MPI rank memory allocation (min/avg/max) = 19.23 | 19.23 | 19.23 Mbytes Step Temp E_pair E_mol TotEng Press - 0 200 -495.29247 0 331.94661 -978.84224 - 100 212.66365 -547.67175 0 331.94665 -1054.2086 -Loop time of 1.40245 on 1 procs for 100 steps with 32000 atoms + 0 200 6290.8194 0 7118.0584 129712.25 + 100 95.179725 6718.814 0 7112.496 133346.59 +Loop time of 2.18554 on 1 procs for 100 steps with 32000 atoms -Performance: 6.161 ns/day, 3.896 hours/ns, 71.304 timesteps/s -100.0% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 3.953 ns/day, 6.071 hours/ns, 45.755 timesteps/s +99.6% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.2556 | 1.2556 | 1.2556 | 0.0 | 89.53 -Neigh | 0.098976 | 0.098976 | 0.098976 | 0.0 | 7.06 -Comm | 0.011525 | 0.011525 | 0.011525 | 0.0 | 0.82 -Output | 0.00021903 | 0.00021903 | 0.00021903 | 0.0 | 0.02 -Modify | 0.023739 | 0.023739 | 0.023739 | 0.0 | 1.69 -Other | | 0.01244 | | | 0.89 +Pair | 2.0006 | 2.0006 | 2.0006 | 0.0 | 91.54 +Neigh | 0.13933 | 0.13933 | 0.13933 | 0.0 | 6.38 +Comm | 0.011122 | 0.011122 | 0.011122 | 0.0 | 0.51 +Output | 0.00020978 | 0.00020978 | 0.00020978 | 0.0 | 0.01 +Modify | 0.022358 | 0.022358 | 0.022358 | 0.0 | 1.02 +Other | | 0.01188 | | | 0.54 Nlocal: 32000 ave 32000 max 32000 min Histogram: 1 0 0 0 0 0 0 0 0 0 Nghost: 19911 ave 19911 max 19911 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 1.36493e+06 ave 1.36493e+06 max 1.36493e+06 min +Neighs: 2.12688e+06 ave 2.12688e+06 max 2.12688e+06 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 1364931 -Ave neighs/atom = 42.6541 +Total # of neighbors = 2126875 +Ave neighs/atom = 66.4648 Neighbor list builds = 3 Dangerous builds = 0 -Total wall time: 0:00:01 +Total wall time: 0:00:02 diff --git a/examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.4 b/examples/kim/log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.4 similarity index 50% rename from examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.4 rename to examples/kim/log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.4 index 634c038efd..e7157c11b8 100644 --- a/examples/kim/log.29Jun18.kim.lj.lmp.ubuntu.4 +++ b/examples/kim/log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.4 @@ -1,5 +1,5 @@ -------------------------------------------------------------------------- -[[30962,1],0]: A high-performance Open MPI point-to-point messaging module +[[19045,1],0]: A high-performance Open MPI point-to-point messaging module was unable to find any relevant network interfaces: Module: OpenFabrics (openib) @@ -16,13 +16,13 @@ Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 2 by 2 MPI processor grid Created 32000 atoms - Time spent = 0.00143054 secs + Time spent = 0.00117056 secs Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 7.85482 - ghost atom cutoff = 7.85482 - binsize = 3.92741, bins = 23 23 23 + master list distance cutoff = 8.45 + ghost atom cutoff = 8.45 + binsize = 4.225, bins = 21 21 21 1 neighbor lists, perpetual/occasional/extra = 1 0 0 (1) pair lj/cut, perpetual attributes: half, newton on @@ -33,34 +33,34 @@ Setting up Verlet run ... Unit style : metal Current step : 0 Time step : 0.001 -Per MPI rank memory allocation (min/avg/max) = 6.875 | 6.875 | 6.875 Mbytes +Per MPI rank memory allocation (min/avg/max) = 7.632 | 7.632 | 7.632 Mbytes Step Temp E_pair E_mol TotEng Press - 0 200 -495.29247 0 331.94661 -978.84224 - 100 212.66365 -547.67175 0 331.94665 -1054.2086 -Loop time of 1.55473 on 4 procs for 100 steps with 32000 atoms + 0 200 6290.8194 0 7118.0584 129712.25 + 100 95.179725 6718.814 0 7112.496 133346.59 +Loop time of 2.34104 on 4 procs for 100 steps with 32000 atoms -Performance: 5.557 ns/day, 4.319 hours/ns, 64.320 timesteps/s -23.8% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 3.691 ns/day, 6.503 hours/ns, 42.716 timesteps/s +24.0% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.47168 | 0.51922 | 0.58923 | 6.2 | 33.40 -Neigh | 0.061309 | 0.077009 | 0.10276 | 5.7 | 4.95 -Comm | 0.87185 | 0.92596 | 0.95327 | 3.4 | 59.56 -Output | 0.00035269 | 0.00047555 | 0.00055331 | 0.0 | 0.03 -Modify | 0.0060711 | 0.00616 | 0.0062612 | 0.1 | 0.40 -Other | | 0.0259 | | | 1.67 +Pair | 0.91499 | 0.96396 | 1.0567 | 5.6 | 41.18 +Neigh | 0.092245 | 0.11781 | 0.14572 | 6.0 | 5.03 +Comm | 1.1264 | 1.2287 | 1.2906 | 5.6 | 52.49 +Output | 0.00045199 | 0.00051154 | 0.00060273 | 0.0 | 0.02 +Modify | 0.0058738 | 0.0059629 | 0.0061675 | 0.2 | 0.25 +Other | | 0.02406 | | | 1.03 -Nlocal: 8000 ave 8014 max 7988 min -Histogram: 1 0 0 1 1 0 0 0 0 1 -Nghost: 9131 ave 9143 max 9117 min -Histogram: 1 0 0 0 0 1 1 0 0 1 -Neighs: 341233 ave 341715 max 340679 min -Histogram: 1 0 0 0 1 0 0 1 0 1 +Nlocal: 8000 ave 8018 max 7967 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 9131 ave 9164 max 9113 min +Histogram: 2 0 0 1 0 0 0 0 0 1 +Neighs: 531719 ave 533273 max 529395 min +Histogram: 1 0 0 0 1 0 0 0 0 2 -Total # of neighbors = 1364931 -Ave neighs/atom = 42.6541 +Total # of neighbors = 2126875 +Ave neighs/atom = 66.4648 Neighbor list builds = 3 Dangerous builds = 0 -Total wall time: 0:00:01 +Total wall time: 0:00:02 diff --git a/examples/kim/log.29Jun18.kim.lj.ubuntu.1 b/examples/kim/log.04Jul2018.kim.lj.lmp.ubuntu.1 similarity index 52% rename from examples/kim/log.29Jun18.kim.lj.ubuntu.1 rename to examples/kim/log.04Jul2018.kim.lj.lmp.ubuntu.1 index c1875916db..217568072c 100644 --- a/examples/kim/log.29Jun18.kim.lj.ubuntu.1 +++ b/examples/kim/log.04Jul2018.kim.lj.lmp.ubuntu.1 @@ -1,5 +1,5 @@ -------------------------------------------------------------------------- -[[30495,1],0]: A high-performance Open MPI point-to-point messaging module +[[19074,1],0]: A high-performance Open MPI point-to-point messaging module was unable to find any relevant network interfaces: Module: OpenFabrics (openib) @@ -16,53 +16,51 @@ Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 1 by 1 MPI processor grid Created 32000 atoms - Time spent = 0.00259765 secs + Time spent = 0.00251478 secs Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 7.85482 - ghost atom cutoff = 7.85482 - binsize = 3.92741, bins = 23 23 23 + master list distance cutoff = 8.45 + ghost atom cutoff = 8.45 + binsize = 4.225, bins = 21 21 21 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair kim, perpetual - attributes: full, newton on, ghost, cut 7.55482 - pair build: full/bin/ghost - stencil: full/ghost/bin/3d + (1) pair lj/cut, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff bin: standard Setting up Verlet run ... Unit style : metal Current step : 0 Time step : 0.001 -Per MPI rank memory allocation (min/avg/max) = 27.14 | 27.14 | 27.14 Mbytes +Per MPI rank memory allocation (min/avg/max) = 20.37 | 20.37 | 20.37 Mbytes Step Temp E_pair E_mol TotEng Press - 0 200 -495.29247 0 331.94661 -978.84224 - 100 212.65961 -547.66877 0 331.93294 -1053.7732 -Loop time of 2.12331 on 1 procs for 100 steps with 32000 atoms + 0 200 6290.8194 0 7118.0584 129712.25 + 100 95.179725 6718.814 0 7112.496 133346.59 +Loop time of 2.6218 on 1 procs for 100 steps with 32000 atoms -Performance: 4.069 ns/day, 5.898 hours/ns, 47.096 timesteps/s +Performance: 3.295 ns/day, 7.283 hours/ns, 38.142 timesteps/s 99.9% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.7197 | 1.7197 | 1.7197 | 0.0 | 80.99 -Neigh | 0.35501 | 0.35501 | 0.35501 | 0.0 | 16.72 -Comm | 0.012289 | 0.012289 | 0.012289 | 0.0 | 0.58 -Output | 0.00021102 | 0.00021102 | 0.00021102 | 0.0 | 0.01 -Modify | 0.023484 | 0.023484 | 0.023484 | 0.0 | 1.11 -Other | | 0.01266 | | | 0.60 +Pair | 2.2623 | 2.2623 | 2.2623 | 0.0 | 86.29 +Neigh | 0.31859 | 0.31859 | 0.31859 | 0.0 | 12.15 +Comm | 0.005914 | 0.005914 | 0.005914 | 0.0 | 0.23 +Output | 0.00033105 | 0.00033105 | 0.00033105 | 0.0 | 0.01 +Modify | 0.023461 | 0.023461 | 0.023461 | 0.0 | 0.89 +Other | | 0.01123 | | | 0.43 Nlocal: 32000 ave 32000 max 32000 min Histogram: 1 0 0 0 0 0 0 0 0 0 Nghost: 19911 ave 19911 max 19911 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 2.569e+06 ave 2.569e+06 max 2.569e+06 min +Neighs: 2.3705e+06 ave 2.3705e+06 max 2.3705e+06 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 2568996 -Ave neighs/atom = 80.2811 +Total # of neighbors = 2370499 +Ave neighs/atom = 74.0781 Neighbor list builds = 3 Dangerous builds = 0 Total wall time: 0:00:02 diff --git a/examples/kim/log.04Jul2018.kim.lj.lmp.ubuntu.4 b/examples/kim/log.04Jul2018.kim.lj.lmp.ubuntu.4 new file mode 100644 index 0000000000..806c674efb --- /dev/null +++ b/examples/kim/log.04Jul2018.kim.lj.lmp.ubuntu.4 @@ -0,0 +1,66 @@ +-------------------------------------------------------------------------- +[[19098,1],0]: A high-performance Open MPI point-to-point messaging module +was unable to find any relevant network interfaces: + +Module: OpenFabrics (openib) + Host: ubuntu-artful + +Another transport will be used instead, although this may result in +lower performance. + +NOTE: You can disable this warning by setting the MCA parameter +btl_base_warn_component_unused to 0. +-------------------------------------------------------------------------- +LAMMPS (22 Jun 2018) +Lattice spacing in x,y,z = 4.43 4.43 4.43 +Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) + 1 by 2 by 2 MPI processor grid +Created 32000 atoms + Time spent = 0.00123697 secs +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 8.45 + ghost atom cutoff = 8.45 + binsize = 4.225, bins = 21 21 21 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair lj/cut, perpetual + attributes: half, newton off + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard +Setting up Verlet run ... + Unit style : metal + Current step : 0 + Time step : 0.001 +Per MPI rank memory allocation (min/avg/max) = 8.013 | 8.013 | 8.013 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 200 6290.8194 0 7118.0584 129712.25 + 100 95.179725 6718.814 0 7112.496 133346.59 +Loop time of 2.88232 on 4 procs for 100 steps with 32000 atoms + +Performance: 2.998 ns/day, 8.006 hours/ns, 34.694 timesteps/s +24.6% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.3577 | 1.415 | 1.467 | 3.7 | 49.09 +Neigh | 0.25761 | 0.28189 | 0.29894 | 3.2 | 9.78 +Comm | 0.58287 | 0.73218 | 0.85561 | 11.5 | 25.40 +Output | 0.00082721 | 0.0029034 | 0.0051877 | 3.1 | 0.10 +Modify | 0.0058569 | 0.015767 | 0.033242 | 8.6 | 0.55 +Other | | 0.4346 | | | 15.08 + +Nlocal: 8000 ave 8018 max 7967 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 9131 ave 9164 max 9113 min +Histogram: 2 0 0 1 0 0 0 0 0 1 +Neighs: 630904 ave 632094 max 628209 min +Histogram: 1 0 0 0 0 0 0 1 0 2 + +Total # of neighbors = 2523614 +Ave neighs/atom = 78.8629 +Neighbor list builds = 3 +Dangerous builds = 0 +Total wall time: 0:00:03 diff --git a/examples/kim/log.04Jul2018.kim.lj.ubuntu.1 b/examples/kim/log.04Jul2018.kim.lj.ubuntu.1 new file mode 100644 index 0000000000..3832bd060a --- /dev/null +++ b/examples/kim/log.04Jul2018.kim.lj.ubuntu.1 @@ -0,0 +1,69 @@ +-------------------------------------------------------------------------- +[[19111,1],0]: A high-performance Open MPI point-to-point messaging module +was unable to find any relevant network interfaces: + +Module: OpenFabrics (openib) + Host: ubuntu-artful + +Another transport will be used instead, although this may result in +lower performance. + +NOTE: You can disable this warning by setting the MCA parameter +btl_base_warn_component_unused to 0. +-------------------------------------------------------------------------- +LAMMPS (22 Jun 2018) +Lattice spacing in x,y,z = 4.43 4.43 4.43 +Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) + 1 by 1 by 1 MPI processor grid +Created 32000 atoms + Time spent = 0.00257231 secs +WARNING: KIM Model does not provide `partialVirial'. pair_kim will always use `LAMMPSvirial' option. (../pair_kim.cpp:987) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:992) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:996) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 8.45 + ghost atom cutoff = 8.45 + binsize = 4.225, bins = 21 21 21 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair kim, perpetual + attributes: half, newton off, cut 8.45 + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard +Setting up Verlet run ... + Unit style : metal + Current step : 0 + Time step : 0.001 +Per MPI rank memory allocation (min/avg/max) = 21.26 | 21.26 | 21.26 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 200 6290.8194 0 7118.0584 1270.4248 + 100 95.179725 6718.814 0 7112.496 604.59343 +Loop time of 3.22934 on 1 procs for 100 steps with 32000 atoms + +Performance: 2.675 ns/day, 8.970 hours/ns, 30.966 timesteps/s +99.9% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.821 | 2.821 | 2.821 | 0.0 | 87.36 +Neigh | 0.35198 | 0.35198 | 0.35198 | 0.0 | 10.90 +Comm | 0.0081757 | 0.0081757 | 0.0081757 | 0.0 | 0.25 +Output | 0.00030922 | 0.00030922 | 0.00030922 | 0.0 | 0.01 +Modify | 0.032856 | 0.032856 | 0.032856 | 0.0 | 1.02 +Other | | 0.01501 | | | 0.46 + +Nlocal: 32000 ave 32000 max 32000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 19911 ave 19911 max 19911 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 2.3705e+06 ave 2.3705e+06 max 2.3705e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 2370499 +Ave neighs/atom = 74.0781 +Neighbor list builds = 3 +Dangerous builds = 0 +Total wall time: 0:00:03 diff --git a/examples/kim/log.04Jul2018.kim.lj.ubuntu.4 b/examples/kim/log.04Jul2018.kim.lj.ubuntu.4 new file mode 100644 index 0000000000..70b2f82812 --- /dev/null +++ b/examples/kim/log.04Jul2018.kim.lj.ubuntu.4 @@ -0,0 +1,78 @@ +-------------------------------------------------------------------------- +[[19135,1],1]: A high-performance Open MPI point-to-point messaging module +was unable to find any relevant network interfaces: + +Module: OpenFabrics (openib) + Host: ubuntu-artful + +Another transport will be used instead, although this may result in +lower performance. + +NOTE: You can disable this warning by setting the MCA parameter +btl_base_warn_component_unused to 0. +-------------------------------------------------------------------------- +LAMMPS (22 Jun 2018) +Lattice spacing in x,y,z = 4.43 4.43 4.43 +Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) + 1 by 2 by 2 MPI processor grid +Created 32000 atoms + Time spent = 0.00154417 secs +WARNING: KIM Model does not provide `partialVirial'. pair_kim will always use `LAMMPSvirial' option. (../pair_kim.cpp:987) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:992) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:996) +WARNING: KIM Model does not provide `partialVirial'. pair_kim will always use `LAMMPSvirial' option. (../pair_kim.cpp:987) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:992) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:996) +WARNING: KIM Model does not provide `partialVirial'. pair_kim will always use `LAMMPSvirial' option. (../pair_kim.cpp:987) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:992) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:996) +WARNING: KIM Model does not provide `partialVirial'. pair_kim will always use `LAMMPSvirial' option. (../pair_kim.cpp:987) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:992) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:996) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 8.45 + ghost atom cutoff = 8.45 + binsize = 4.225, bins = 21 21 21 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair kim, perpetual + attributes: half, newton off, cut 8.45 + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard +Setting up Verlet run ... + Unit style : metal + Current step : 0 + Time step : 0.001 +Per MPI rank memory allocation (min/avg/max) = 8.528 | 8.528 | 8.528 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 200 6290.8194 0 7118.0584 1270.4248 + 100 95.179725 6718.814 0 7112.496 604.59343 +Loop time of 3.17877 on 4 procs for 100 steps with 32000 atoms + +Performance: 2.718 ns/day, 8.830 hours/ns, 31.459 timesteps/s +24.3% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.0514 | 2.1009 | 2.1859 | 3.6 | 66.09 +Neigh | 0.29304 | 0.31706 | 0.33568 | 2.7 | 9.97 +Comm | 0.61926 | 0.72709 | 0.77083 | 7.3 | 22.87 +Output | 0.00035457 | 0.00043741 | 0.000547 | 0.0 | 0.01 +Modify | 0.0066107 | 0.0067653 | 0.0069097 | 0.1 | 0.21 +Other | | 0.02653 | | | 0.83 + +Nlocal: 8000 ave 8018 max 7967 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 9131 ave 9164 max 9113 min +Histogram: 2 0 0 1 0 0 0 0 0 1 +Neighs: 630904 ave 632094 max 628209 min +Histogram: 1 0 0 0 0 0 0 1 0 2 + +Total # of neighbors = 2523614 +Ave neighs/atom = 78.8629 +Neighbor list builds = 3 +Dangerous builds = 0 +Total wall time: 0:00:03 diff --git a/examples/kim/log.29Jun18.kim.lj.ubuntu.4 b/examples/kim/log.29Jun18.kim.lj.ubuntu.4 deleted file mode 100644 index 5ef352a667..0000000000 --- a/examples/kim/log.29Jun18.kim.lj.ubuntu.4 +++ /dev/null @@ -1,68 +0,0 @@ --------------------------------------------------------------------------- -[[30487,1],0]: A high-performance Open MPI point-to-point messaging module -was unable to find any relevant network interfaces: - -Module: OpenFabrics (openib) - Host: ubuntu-artful - -Another transport will be used instead, although this may result in -lower performance. - -NOTE: You can disable this warning by setting the MCA parameter -btl_base_warn_component_unused to 0. --------------------------------------------------------------------------- -LAMMPS (22 Jun 2018) -Lattice spacing in x,y,z = 4.43 4.43 4.43 -Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) - 1 by 2 by 2 MPI processor grid -Created 32000 atoms - Time spent = 0.00128874 secs -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 7.85482 - ghost atom cutoff = 7.85482 - binsize = 3.92741, bins = 23 23 23 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair kim, perpetual - attributes: full, newton on, ghost, cut 7.55482 - pair build: full/bin/ghost - stencil: full/ghost/bin/3d - bin: standard -Setting up Verlet run ... - Unit style : metal - Current step : 0 - Time step : 0.001 -Per MPI rank memory allocation (min/avg/max) = 10.82 | 10.82 | 10.82 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 200 -495.29247 0 331.94661 -978.84224 - 100 212.65961 -547.66877 0 331.93294 -1053.7732 -Loop time of 2.58934 on 4 procs for 100 steps with 32000 atoms - -Performance: 3.337 ns/day, 7.193 hours/ns, 38.620 timesteps/s -24.3% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.85344 | 0.94031 | 1.0212 | 7.2 | 36.31 -Neigh | 0.40159 | 0.42603 | 0.43728 | 2.2 | 16.45 -Comm | 1.1013 | 1.1823 | 1.2796 | 6.9 | 45.66 -Output | 0.00041301 | 0.00056702 | 0.00081648 | 0.0 | 0.02 -Modify | 0.0062882 | 0.0063459 | 0.0064657 | 0.1 | 0.25 -Other | | 0.03375 | | | 1.30 - -Nlocal: 8000 ave 8014 max 7988 min -Histogram: 1 0 0 1 1 0 0 0 0 1 -Nghost: 9131 ave 9143 max 9117 min -Histogram: 1 0 0 0 0 1 1 0 0 1 -Neighs: 0 ave 0 max 0 min -Histogram: 4 0 0 0 0 0 0 0 0 0 -FullNghs: 642249 ave 643365 max 641215 min -Histogram: 1 0 0 0 2 0 0 0 0 1 - -Total # of neighbors = 2568996 -Ave neighs/atom = 80.2811 -Neighbor list builds = 3 -Dangerous builds = 0 -Total wall time: 0:00:03 diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index ee9bac000d..ca39b5601e 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -12,13 +12,11 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing authors: Ryan S. Elliott, - Valeriu Smirichinski, - Ellad Tadmor + Contributing authors: Ryan S. Elliott (UMinn) ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the kim-api-v1.6.0 (and newer) package + Designed for use with the kim-api-v2.0.0-beta.1 (and newer) package ------------------------------------------------------------------------- */ #include @@ -45,9 +43,9 @@ PairKIM::PairKIM(LAMMPS *lmp) : Pair(lmp), settings_call_count(0), init_style_call_count(0), - kim_modelname(0), - lmps_map_species_to_unique(0), - lmps_unique_elements(0), + kim_modelname(NULL), + lmps_map_species_to_unique(NULL), + lmps_unique_elements(NULL), lmps_num_unique_elements(0), lmps_units(METAL), lengthUnit(KIM::LENGTH_UNIT::unused), @@ -55,8 +53,8 @@ PairKIM::PairKIM(LAMMPS *lmp) : chargeUnit(KIM::CHARGE_UNIT::unused), temperatureUnit(KIM::TEMPERATURE_UNIT::unused), timeUnit(KIM::TIME_UNIT::unused), - pkim(0), - pargs(0), + pkim(NULL), + pargs(NULL), kim_model_support_for_energy(KIM::SUPPORT_STATUS::notSupported), kim_model_support_for_forces(KIM::SUPPORT_STATUS::notSupported), kim_model_support_for_virial(KIM::SUPPORT_STATUS::notSupported), @@ -64,15 +62,17 @@ PairKIM::PairKIM(LAMMPS *lmp) : kim_model_support_for_particleVirial(KIM::SUPPORT_STATUS::notSupported), lmps_local_tot_num_atoms(0), kim_global_influence_distance(0.0), - kim_number_of_cutoffs(0), - kim_cutoff_values(0), - neighborLists(0), - kim_particle_codes(0), + kim_number_of_neighbor_lists(0), + kim_cutoff_values(NULL), + padding_neighbor_hints(NULL), + half_list_hints(NULL), + neighborLists(NULL), + kim_particle_codes(NULL), lmps_maxalloc(0), - kim_particleSpecies(0), - kim_particleContributing(0), - lmps_stripped_neigh_list(0), - lmps_stripped_neigh_ptr(0) + kim_particleSpecies(NULL), + kim_particleContributing(NULL), + lmps_stripped_neigh_list(NULL), + lmps_stripped_neigh_ptr(NULL) { // Initialize Pair data members to appropriate values single_enable = 0; // We do not provide the Single() function @@ -101,6 +101,13 @@ PairKIM::~PairKIM() delete [] lmps_unique_elements[i]; delete [] lmps_unique_elements; + if (kim_particle_codes_ok) + { + delete [] kim_particle_codes; + kim_particle_codes = NULL; + kim_particle_codes_ok = false; + } + // clean up local memory used to support KIM interface memory->destroy(kim_particleSpecies); memory->destroy(kim_particleContributing); @@ -281,20 +288,6 @@ void PairKIM::settings(int narg, char **arg) // set lmps_* bool flags set_lmps_flags(); - // set virial handling - if (strcmp(arg[0],"LAMMPSvirial") == 0) - { - no_virial_fdotr_compute = 0; - } - else if (strcmp(arg[0],"KIMvirial") == 0) - { - no_virial_fdotr_compute = 1; - } - else - { - error->all(FLERR,"Unrecognized virial argument in pair_style command"); - } - // set KIM Model name int nmlen = strlen(arg[1]); if (kim_modelname != 0) @@ -305,6 +298,26 @@ void PairKIM::settings(int narg, char **arg) kim_modelname = new char[nmlen+1]; strcpy(kim_modelname, arg[1]); + // initialize KIM Model + kim_init(); + + // set virial handling + if (strcmp(arg[0],"KIMvirial") == 0) + { + if (kim_model_support_for_virial == KIM::SUPPORT_STATUS::notSupported) + no_virial_fdotr_compute = 0; + else + no_virial_fdotr_compute = 1; + } + else if (strcmp(arg[0],"LAMMPSvirial") == 0) + { + no_virial_fdotr_compute = 0; + } + else + { + error->all(FLERR,"Unrecognized virial argument in pair_style command"); + } + return; } @@ -351,7 +364,7 @@ void PairKIM::coeff(int narg, char **arg) // Assume all species arguments are valid - // errors will be detected by kim_api_init() matching + // errors will be detected by below lmps_num_unique_elements = 0; for (i = 2; i < narg; i++) { for (j = 0; j < lmps_num_unique_elements; j++) @@ -378,6 +391,29 @@ void PairKIM::coeff(int narg, char **arg) if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); + // setup mapping between LAMMPS unique elements and KIM species codes + if (kim_particle_codes_ok) + { + delete [] kim_particle_codes; + kim_particle_codes = NULL; + kim_particle_codes_ok = false; + } + kim_particle_codes = new int[lmps_num_unique_elements]; + kim_particle_codes_ok = true; + for(int i = 0; i < lmps_num_unique_elements; i++){ + int kimerror; + int supported; + int code; + kimerror = pkim->GetSpeciesSupportAndCode( + KIM::SpeciesName(lmps_unique_elements[i]), + &supported, + &code); + if (supported) + kim_particle_codes[i] = code; + else + error->all(FLERR,"create_kim_particle_codes: symbol not found "); + } + return; } @@ -394,22 +430,16 @@ void PairKIM::init_style() error->all(FLERR,"PairKIM only works with 3D problems"); int kimerror; - // KIM and Model initialization (only once) - // also sets kim_ind_* and kim_* bool flags - if (!kim_init_ok) - { - kim_init(); - } // setup lmps_stripped_neigh_list for neighbors of one atom, if needed if (lmps_using_molecular) { memory->destroy(lmps_stripped_neigh_list); memory->create(lmps_stripped_neigh_list, - kim_number_of_cutoffs*neighbor->oneatom, + kim_number_of_neighbor_lists*neighbor->oneatom, "pair:lmps_stripped_neigh_list"); delete [] lmps_stripped_neigh_ptr; - lmps_stripped_neigh_ptr = new int*[kim_number_of_cutoffs]; - for (int i = 0; i < kim_number_of_cutoffs; ++i) + lmps_stripped_neigh_ptr = new int*[kim_number_of_neighbor_lists]; + for (int i = 0; i < kim_number_of_neighbor_lists; ++i) { lmps_stripped_neigh_ptr[0] = &(lmps_stripped_neigh_list[(i-1)*(neighbor->oneatom)]); @@ -420,14 +450,32 @@ void PairKIM::init_style() // make sure comm_reverse expects (at most) 9 values when newton is off if (!lmps_using_newton) comm_reverse_off = 9; - // request full neighbor lists - for (int i = 0; i < kim_number_of_cutoffs; ++i) + // request full neighbor lists (unless hints allow for better alternatives) + for (int i = 0; i < kim_number_of_neighbor_lists; ++i) { int irequest = neighbor->request(this,instance_me); neighbor->requests[irequest]->id = i; - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->ghost = 1; + if (half_list_hints[i]) + { + neighbor->requests[irequest]->half = 1; + if (! lmps_using_newton) neighbor->requests[irequest]->newton = 2; + neighbor->requests[irequest]->full = 0; + } + else + { + neighbor->requests[irequest]->half = 0; + if (! lmps_using_newton) neighbor->requests[irequest]->newton = 0; + neighbor->requests[irequest]->full = 1; + } + if (padding_neighbor_hints[i]) + { + neighbor->requests[irequest]->ghost = 0; + } + else + { + neighbor->requests[irequest]->ghost = 1; + + } neighbor->requests[irequest]->cut = 1; neighbor->requests[irequest]->cutoff = kim_cutoff_values[i] + neighbor->skin; @@ -604,7 +652,8 @@ double PairKIM::memory_usage() ------------------------------------------------------------------------- */ int PairKIM::get_neigh(void const * const dataObject, - int const numberOfCutoffs, double const * const cutoffs, + int const numberOfNeighborLists, + double const * const cutoffs, int const neighborListIndex, int const particleNumber, int * const numberOfNeighbors, int const ** const neighborsOfParticle) @@ -612,8 +661,9 @@ int PairKIM::get_neigh(void const * const dataObject, PairKIM const * const Model = reinterpret_cast(dataObject); - if (numberOfCutoffs != Model->kim_number_of_cutoffs) return true; - for (int i = 0; i < numberOfCutoffs; ++i) + if (numberOfNeighborLists != Model->kim_number_of_neighbor_lists) + return true; + for (int i = 0; i < numberOfNeighborLists; ++i) { if (Model->kim_cutoff_values[i] < cutoffs[i]) return true; } @@ -666,13 +716,6 @@ void PairKIM::kim_free() } kim_init_ok = false; - if (kim_particle_codes_ok) - { - delete [] kim_particle_codes; - kim_particle_codes = 0; - kim_particle_codes_ok = false; - } - return; } @@ -713,32 +756,17 @@ void PairKIM::kim_init() // determine KIM Model capabilities (used in this function below) set_kim_model_has_flags(); - // setup mapping between LAMMPS unique elements and KIM species codes - kim_particle_codes = new int[lmps_num_unique_elements]; - kim_particle_codes_ok = true; - for(int i = 0; i < lmps_num_unique_elements; i++){ - int kimerror; - int supported; - int code; - kimerror = pkim->GetSpeciesSupportAndCode( - KIM::SpeciesName(lmps_unique_elements[i]), - &supported, - &code); - if (supported) - kim_particle_codes[i] = code; - else - error->all(FLERR,"create_kim_particle_codes: symbol not found "); - } - pkim->GetInfluenceDistance(&kim_global_influence_distance); - pkim->GetNeighborListCutoffsPointer(&kim_number_of_cutoffs, - &kim_cutoff_values); + pkim->GetNeighborListPointers(&kim_number_of_neighbor_lists, + &kim_cutoff_values, + &padding_neighbor_hints, + &half_list_hints); if (neighborLists) { delete [] neighborLists; neighborLists = 0; } - neighborLists = new NeighList*[kim_number_of_cutoffs]; + neighborLists = new NeighList*[kim_number_of_neighbor_lists]; kimerror = pargs->SetArgumentPointer( KIM::COMPUTE_ARGUMENT_NAME::numberOfParticles, @@ -932,7 +960,7 @@ void PairKIM::set_kim_model_has_flags() int kimerror = GetComputeArgumentName(i, &computeArgumentName); KIM::SupportStatus supportStatus; kimerror = pargs->GetArgumentSupportStatus(computeArgumentName, - &supportStatus); + &supportStatus); if (computeArgumentName == partialEnergy) kim_model_support_for_energy = supportStatus; @@ -958,12 +986,10 @@ void PairKIM::set_kim_model_has_flags() error->warning(FLERR,"KIM Model does not provide `partialForce'; " "Forces will be zero"); - if ((no_virial_fdotr_compute == 1) && - (kim_model_support_for_virial == notSupported)) + if (kim_model_support_for_virial == notSupported) { error->warning(FLERR,"KIM Model does not provide `partialVirial'. " - "pair_kim now using `LAMMPSvirial' option."); - no_virial_fdotr_compute = 0; + "pair_kim will always use `LAMMPSvirial' option."); } if (kim_model_support_for_particleEnergy == notSupported) diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index a236a3f87a..8929fd2b75 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -12,13 +12,11 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing authors: Ryan S. Elliott, - Valeriu Smirichinski, - Ellad Tadmor (U Minn) + Contributing authors: Ryan S. Elliott (UMinn) ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the kim-api-v1.6.0 (and newer) package + Designed for use with the kim-api-v2.0.0-beta.1 (and newer) package ------------------------------------------------------------------------- */ #ifdef PAIR_CLASS @@ -100,8 +98,10 @@ namespace LAMMPS_NS { bool kim_init_ok; int lmps_local_tot_num_atoms; double kim_global_influence_distance; // KIM Model cutoff value - int kim_number_of_cutoffs; + int kim_number_of_neighbor_lists; double const * kim_cutoff_values; + int const * padding_neighbor_hints; + int const * half_list_hints; class NeighList ** neighborLists; // values set in init_style() From 90a9b7ccd12c1a54daa29f1383cc23a32c8c910b Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 11 Jul 2018 10:29:45 -0700 Subject: [PATCH 018/143] Remove pair_kim support for partialVirial - do it w/fdotr --- src/KIM/pair_kim.cpp | 100 ++++++++++++------------------------------- src/KIM/pair_kim.h | 2 +- 2 files changed, 28 insertions(+), 74 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index ca39b5601e..404e4f9cf0 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -57,7 +57,6 @@ PairKIM::PairKIM(LAMMPS *lmp) : pargs(NULL), kim_model_support_for_energy(KIM::SUPPORT_STATUS::notSupported), kim_model_support_for_forces(KIM::SUPPORT_STATUS::notSupported), - kim_model_support_for_virial(KIM::SUPPORT_STATUS::notSupported), kim_model_support_for_particleEnergy(KIM::SUPPORT_STATUS::notSupported), kim_model_support_for_particleVirial(KIM::SUPPORT_STATUS::notSupported), lmps_local_tot_num_atoms(0), @@ -78,6 +77,9 @@ PairKIM::PairKIM(LAMMPS *lmp) : single_enable = 0; // We do not provide the Single() function restartinfo = 0; // We do not write any restart info one_coeff = 1; // We only allow one coeff * * call + // set to 1, regardless use of fdotr, to avoid ev_set()'s futzing with + // vflag_global + no_virial_fdotr_compute = 1; // BEGIN: initial values that determine the KIM state // (used by kim_free(), etc.) @@ -197,25 +199,21 @@ void PairKIM::compute(int eflag , int vflag) kimerror = pkim->Compute(pargs); if (kimerror) error->all(FLERR,"KIM Compute returned error"); - // assemble force and particleVirial if needed - if (!lmps_using_newton) comm->reverse_comm_pair(this); - - if ((no_virial_fdotr_compute == 1) && (vflag_global)) - { // flip sign and order of virial if KIM is computing it - for (int i = 0; i < 3; ++i) virial[i] = -1.0*virial[i]; - double tmp = virial[3]; - virial[3] = -virial[5]; - virial[4] = -virial[4]; - virial[5] = -tmp; - } - else - { // compute virial via LAMMPS fdotr mechanism - if (vflag_fdotr) virial_fdotr_compute(); + // compute virial before reverse comm! + if (vflag_global) + { + virial_fdotr_compute(); } - if ((kim_model_support_for_particleVirial != - KIM::SUPPORT_STATUS::notSupported) && - (vflag_atom)) + // if newton is off, perform reverse comm + if (!lmps_using_newton) + { + comm->reverse_comm_pair(this); + } + + if ((vflag_atom) && + (kim_model_support_for_particleVirial != + KIM::SUPPORT_STATUS::notSupported)) { // flip sign and order of virial if KIM is computing it double tmp; for (int i = 0; i < nall; ++i) @@ -266,9 +264,8 @@ void PairKIM::settings(int narg, char **arg) ++settings_call_count; init_style_call_count = 0; - if (narg != 2) error->all(FLERR,"Illegal pair_style command"); - // arg[0] is the virial handling option: "LAMMPSvirial" or "KIMvirial" - // arg[1] is the KIM Model name + if (narg != 1) error->all(FLERR,"Illegal pair_style command"); + // arg[0] is the KIM Model name lmps_using_molecular = (atom->molecular > 0); @@ -289,35 +286,18 @@ void PairKIM::settings(int narg, char **arg) set_lmps_flags(); // set KIM Model name - int nmlen = strlen(arg[1]); + int nmlen = strlen(arg[0]); if (kim_modelname != 0) { delete [] kim_modelname; kim_modelname = 0; } kim_modelname = new char[nmlen+1]; - strcpy(kim_modelname, arg[1]); + strcpy(kim_modelname, arg[0]); // initialize KIM Model kim_init(); - // set virial handling - if (strcmp(arg[0],"KIMvirial") == 0) - { - if (kim_model_support_for_virial == KIM::SUPPORT_STATUS::notSupported) - no_virial_fdotr_compute = 0; - else - no_virial_fdotr_compute = 1; - } - else if (strcmp(arg[0],"LAMMPSvirial") == 0) - { - no_virial_fdotr_compute = 0; - } - else - { - error->all(FLERR,"Unrecognized virial argument in pair_style command"); - } - return; } @@ -458,13 +438,11 @@ void PairKIM::init_style() if (half_list_hints[i]) { neighbor->requests[irequest]->half = 1; - if (! lmps_using_newton) neighbor->requests[irequest]->newton = 2; neighbor->requests[irequest]->full = 0; } else { neighbor->requests[irequest]->half = 0; - if (! lmps_using_newton) neighbor->requests[irequest]->newton = 0; neighbor->requests[irequest]->full = 1; } if (padding_neighbor_hints[i]) @@ -476,6 +454,9 @@ void PairKIM::init_style() neighbor->requests[irequest]->ghost = 1; } + // always want all owned/ghost pairs + neighbor->requests[irequest]->newton = 2; + // set cutoff neighbor->requests[irequest]->cut = 1; neighbor->requests[irequest]->cutoff = kim_cutoff_values[i] + neighbor->skin; @@ -737,7 +718,6 @@ void PairKIM::kim_init() error->all(FLERR,"KIM ModelCreate failed"); else { if (!requestedUnitsAccepted) { - // @@@ error for now. Fix as needed error->all(FLERR,"KIM Model did not accept the requested unit system"); } @@ -857,27 +837,6 @@ void PairKIM::set_argument_pointers() &(vatom[0][0])); } - // Set KIM pointer appropriately for virial - - if (kim_model_support_for_virial == required) - { - kimerror = kimerror || pargs->SetArgumentPointer(partialVirial, - &(virial[0])); - } - else if ((kim_model_support_for_virial == optional) && - (no_virial_fdotr_compute == 1) && - (vflag_global)) - { - kimerror = kimerror || pargs->SetArgumentPointer(partialVirial, - &(virial[0])); - } - else if (kim_model_support_for_virial == optional) - { - kimerror = kimerror || pargs->SetArgumentPointer( - partialVirial, - reinterpret_cast(NULL)); - } - if (kimerror) { error->all(FLERR,"Unable to set KIM argument pointers"); @@ -966,15 +925,16 @@ void PairKIM::set_kim_model_has_flags() kim_model_support_for_energy = supportStatus; else if (computeArgumentName == partialForces) kim_model_support_for_forces = supportStatus; - else if (computeArgumentName == partialVirial) - kim_model_support_for_virial = supportStatus; else if (computeArgumentName == partialParticleEnergy) kim_model_support_for_particleEnergy = supportStatus; else if (computeArgumentName == partialParticleVirial) kim_model_support_for_particleVirial = supportStatus; else if (supportStatus == required) { - error->all(FLERR,"KIM Model requires unsupported compute argument"); + std::stringstream msg; + msg << "KIM Model requires unsupported compute argument: " + << computeArgumentName.String(); + error->all(FLERR, msg.str().c_str()); } } @@ -986,12 +946,6 @@ void PairKIM::set_kim_model_has_flags() error->warning(FLERR,"KIM Model does not provide `partialForce'; " "Forces will be zero"); - if (kim_model_support_for_virial == notSupported) - { - error->warning(FLERR,"KIM Model does not provide `partialVirial'. " - "pair_kim will always use `LAMMPSvirial' option."); - } - if (kim_model_support_for_particleEnergy == notSupported) error->warning(FLERR,"KIM Model does not provide `partialParticleEnergy'; " "energy per atom will be zero"); diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index 8929fd2b75..afba20651d 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -32,6 +32,7 @@ PairStyle(kim,PairKIM) class KIM_API_model; #include "pair.h" #include "KIM_SimulatorHeaders.hpp" +#include namespace LAMMPS_NS { @@ -90,7 +91,6 @@ namespace LAMMPS_NS { // values set in set_kim_model_has_flags(), called by kim_init() KIM::SupportStatus kim_model_support_for_energy; KIM::SupportStatus kim_model_support_for_forces; - KIM::SupportStatus kim_model_support_for_virial; KIM::SupportStatus kim_model_support_for_particleEnergy; KIM::SupportStatus kim_model_support_for_particleVirial; From fcec1498e31bb98313ae10d4afa8802ad72d82fd Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 11 Jul 2018 10:34:07 -0700 Subject: [PATCH 019/143] update input example scripts for pair_kim --- ...in.kim.lj.lmp => in.kim.lj.lmp.newton-off} | 2 +- examples/kim/in.kim.lj.lmp.newton-on | 2 +- .../kim/{in.kim.lj => in.kim.lj.newton-off} | 2 +- examples/kim/in.kim.lj.newton-on | 41 +++++++++++++++++++ 4 files changed, 44 insertions(+), 3 deletions(-) rename examples/kim/{in.kim.lj.lmp => in.kim.lj.lmp.newton-off} (92%) rename examples/kim/{in.kim.lj => in.kim.lj.newton-off} (94%) create mode 100644 examples/kim/in.kim.lj.newton-on diff --git a/examples/kim/in.kim.lj.lmp b/examples/kim/in.kim.lj.lmp.newton-off similarity index 92% rename from examples/kim/in.kim.lj.lmp rename to examples/kim/in.kim.lj.lmp.newton-off index a10e3e2e90..197755294a 100644 --- a/examples/kim/in.kim.lj.lmp +++ b/examples/kim/in.kim.lj.lmp.newton-off @@ -20,7 +20,7 @@ create_atoms 1 box pair_style lj/cut 8.1500 pair_coeff 1 1 0.0104 3.4000 -#pair_style kim KIMvirial LennardJones_Ar +#pair_style kim LennardJones_Ar #pair_coeff * * Ar mass 1 39.95 diff --git a/examples/kim/in.kim.lj.lmp.newton-on b/examples/kim/in.kim.lj.lmp.newton-on index d17bc14984..f9f79e2bb2 100644 --- a/examples/kim/in.kim.lj.lmp.newton-on +++ b/examples/kim/in.kim.lj.lmp.newton-on @@ -20,7 +20,7 @@ create_atoms 1 box pair_style lj/cut 8.1500 pair_coeff 1 1 0.0104 3.4000 -#pair_style kim KIMvirial LennardJones_Ar +#pair_style kim LennardJones_Ar #pair_coeff * * Ar mass 1 39.95 diff --git a/examples/kim/in.kim.lj b/examples/kim/in.kim.lj.newton-off similarity index 94% rename from examples/kim/in.kim.lj rename to examples/kim/in.kim.lj.newton-off index a17ec982da..82cf5ba602 100644 --- a/examples/kim/in.kim.lj +++ b/examples/kim/in.kim.lj.newton-off @@ -26,7 +26,7 @@ create_atoms 1 box #pair_style lj/cut 8.1500 #pair_coeff 1 1 0.0104 3.4000 -pair_style kim KIMvirial LennardJones_Ar +pair_style kim LennardJones_Ar pair_coeff * * Ar mass 1 39.95 diff --git a/examples/kim/in.kim.lj.newton-on b/examples/kim/in.kim.lj.newton-on new file mode 100644 index 0000000000..3a95f1dbb0 --- /dev/null +++ b/examples/kim/in.kim.lj.newton-on @@ -0,0 +1,41 @@ +# 3d Lennard-Jones melt +# +# This example requires that the example models provided with +# the kim-api package are installed. see the ./lib/kim/README or +# ./lib/kim/Install.py files for details on how to install these +# example models. +# + +variable x index 1 +variable y index 1 +variable z index 1 + +variable xx equal 20*$x +variable yy equal 20*$y +variable zz equal 20*$z + +units metal +atom_style atomic +newton on + +lattice fcc 4.4300 +region box block 0 ${xx} 0 ${yy} 0 ${zz} +create_box 1 box +create_atoms 1 box + +#pair_style lj/cut 8.1500 +#pair_coeff 1 1 0.0104 3.4000 + +pair_style kim LennardJones_Ar +pair_coeff * * Ar + +mass 1 39.95 +velocity all create 200.0 232345 loop geom + +neighbor 0.3 bin +neigh_modify delay 0 every 1 check yes + +fix 1 all nve +#fix 1 all npt temp 1.0 1.0 1.0 iso 1.0 1.0 3.0 + +run 100 From af42251142914046b1b2d2f5bb4983704d3ee648 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 11 Jul 2018 13:42:26 -0700 Subject: [PATCH 020/143] Update doc/src/pair_kim.txt --- doc/src/pair_kim.txt | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/doc/src/pair_kim.txt b/doc/src/pair_kim.txt index 4599779ca8..a53de79abf 100644 --- a/doc/src/pair_kim.txt +++ b/doc/src/pair_kim.txt @@ -10,14 +10,13 @@ pair_style kim command :h3 [Syntax:] -pair_style kim virialmode model :pre +pair_style kim model :pre -virialmode = KIMvirial or LAMMPSvirial model = name of KIM model (potential) [Examples:] -pair_style kim KIMvirial ex_model_Ar_P_LJ +pair_style kim ex_model_Ar_P_LJ pair_coeff * * Ar Ar :pre [Description:] @@ -55,11 +54,6 @@ on how to build LAMMSPS with the kim-api and how to install the example models. :line -The argument {virialmode} determines how the global virial is -calculated. If {KIMvirial} is specified, the KIM model performs the -global virial calculation (if it knows how). If {LAMMPSvirial} is -specified, LAMMPS computes the global virial using its fdotr mechanism. - The argument {model} is the name of the KIM model for a specific potential as KIM defines it. In principle, LAMMPS can invoke any KIM model. You should get an error or warning message from either LAMMPS @@ -121,7 +115,7 @@ LAMMPS was built with that package. See the "Making LAMMPS"_Section_start.html#start_3 section for more info. This current version of pair_style kim is compatible with the -kim-api package version 2.0.0-beta.0 and higher. +kim-api package version 2.0.0-beta.1 and higher. [Related commands:] From 81e33f5f7893bd0ab799fb92a8f12a81f38bc8aa Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 11 Jul 2018 14:25:35 -0700 Subject: [PATCH 021/143] Minor fixes & Error message updates in pair_kim.h --- src/KIM/pair_kim.cpp | 13 +++++--- src/KIM/pair_kim.h | 79 ++++++++++++++++++++++++-------------------- 2 files changed, 52 insertions(+), 40 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 404e4f9cf0..88f576bad2 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -193,7 +193,7 @@ void PairKIM::compute(int eflag , int vflag) set_argument_pointers(); // set number of particles - lmps_local_tot_num_atoms = (int) (atom->nghost + atom->nlocal); + lmps_local_tot_num_atoms = (int) nall; // compute via KIM model kimerror = pkim->Compute(pargs); @@ -391,7 +391,12 @@ void PairKIM::coeff(int narg, char **arg) if (supported) kim_particle_codes[i] = code; else - error->all(FLERR,"create_kim_particle_codes: symbol not found "); + { + std::stringstream msg; + msg << "create_kim_particle_codes: symbol not found: " + << lmps_unique_elements[i]; + error->all(FLERR, msg.str().c_str()); + } } return; @@ -421,7 +426,7 @@ void PairKIM::init_style() lmps_stripped_neigh_ptr = new int*[kim_number_of_neighbor_lists]; for (int i = 0; i < kim_number_of_neighbor_lists; ++i) { - lmps_stripped_neigh_ptr[0] + lmps_stripped_neigh_ptr[i] = &(lmps_stripped_neigh_list[(i-1)*(neighbor->oneatom)]); } @@ -855,7 +860,7 @@ void PairKIM::set_lmps_flags() // determine if running with pair hybrid if (force->pair_match("hybrid",0)) { - error->all(FLERR,"pair_kim does not support hybrid."); + error->all(FLERR,"pair_kim does not support hybrid"); } // determine unit system and set lmps_units flag diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index afba20651d..bdebfbcad0 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -137,81 +137,88 @@ namespace LAMMPS_NS { /* ERROR/WARNING messages: -E: Illegal ... command +E: Unable to set KIM particle species codes and/or contributing -Self-explanatory. Check the input script syntax and compare to the -documentation for the command. You can use -echo screen as a -command-line option when running LAMMPS to see the offending line. +A low-level kim-api error has occurred. -E: Unrecognized virial argument in pair_style command +E: KIM Compute returned error -Only two options are supported: LAMMPSvirial and KIMvirial +The KIM model was unable, for some reason, to complete the computation. + +E: Illegal pair_style command + +Self-explanatory. E: Incorrect args for pair coefficients -Self-explanatory. Check the input script or data file. +Self-explanatory. -E: Invalid args for non-hybrid pair coefficients +E: create_kim_particle_codes: symbol not found: XX -"NULL" is only supported in pair_coeff calls when using pair hybrid +The KIM model specified does not support the atomic species symbol E: PairKIM only works with 3D problems -This is a current limitation. +Self-explanatory. E: All pair coeffs are not set -All pair coefficients must be set in the data file or by the -pair_coeff command before running a simulation. +Self-explanatory. -E: KIM neighbor iterator exceeded range +E: Unable to destroy Compute Arguments Object -This should not happen. It likely indicates a bug -in the KIM implementation of the interatomic potential -where it is requesting neighbors incorrectly. +A low-level kim-api error has occurred. -E: LAMMPS unit_style lj not supported by KIM models +E: KIM ModelCreate failed -Self-explanatory. Check the input script or data file. +The kim-api was not able to create a model object for the specified model. -E: Unknown unit_style +E: KIM Model did not accept the requested unit system -Self-explanatory. Check the input script or data file. +The KIM Model does not support the specified LAMMPS unit system -W: KIM Model does not provide `energy'; Potential energy will be zero +E: KIM ComputeArgumentsCreate failed + +A low-level kim-api error has occurred. + +E: Unable to register KIM pointers + +A low-level kim-api error has occurred. + +E: Unable to set KIM argument pointers + +A low-level kim-api error has occurred. + +E: pair_kim does not support hybrid Self-explanatory. -W: KIM Model does not provide `forces'; Forces will be zero +E: LAMMPS unit_style lj not suppored by KIM models Self-explanatory. -W: KIM Model does not provide `particleEnergy'; energy per atom will be zero +E: KIM Model requires unsupported compute argument: XXX + +A low-level kim-api error has occurred. + +W: KIM Model does not provide `partialEnergy'; Potential energy will be zero Self-explanatory. -W: KIM Model does not provide `particleVirial'; virial per atom will be zero - - - -E: Test_descriptor_string already allocated - -This is an internal error. Contact the developers. - -U: KIM Model does not provide 'energy'; Potential energy will be zero +W: KIM Model does not provide `partialForce'; Forces will be zero Self-explanatory. -U: KIM Model does not provide 'forces'; Forces will be zero +W: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero Self-explanatory. -U: KIM Model does not provide 'particleEnergy'; energy per atom will be zero +W: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero Self-explanatory. -U: KIM Model does not provide 'particleVirial'; virial per atom will be zero +E: KIM Model requires unsupported compute callback -Self-explanatory. +A low-level kim-api error has occurred. */ From 3e734186016e9ecc8f1ec1a2235fe0ffda904bd1 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 11 Jul 2018 14:57:02 -0700 Subject: [PATCH 022/143] Updated example/kim log files --- ....11Jul2018.kim.lj.lmp.newton-off.ubuntu.1} | 22 +++--- ....11Jul2018.kim.lj.lmp.newton-off.ubuntu.4} | 22 +++--- ...g.11Jul2018.kim.lj.lmp.newton-on.ubuntu.1} | 22 +++--- ...g.11Jul2018.kim.lj.lmp.newton-on.ubuntu.4} | 22 +++--- ... log.11Jul2018.kim.lj.newton-off.ubuntu.1} | 33 ++++----- ... log.11Jul2018.kim.lj.newton-off.ubuntu.4} | 46 ++++++------ .../log.11Jul2018.kim.lj.newton-on.ubuntu.1 | 68 +++++++++++++++++ .../log.11Jul2018.kim.lj.newton-on.ubuntu.4 | 74 +++++++++++++++++++ 8 files changed, 223 insertions(+), 86 deletions(-) rename examples/kim/{log.04Jul2018.kim.lj.lmp.ubuntu.1 => log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.1} (74%) rename examples/kim/{log.04Jul2018.kim.lj.lmp.ubuntu.4 => log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.4} (74%) rename examples/kim/{log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.1 => log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.1} (74%) rename examples/kim/{log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.4 => log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.4} (74%) rename examples/kim/{log.04Jul2018.kim.lj.ubuntu.1 => log.11Jul2018.kim.lj.newton-off.ubuntu.1} (68%) rename examples/kim/{log.04Jul2018.kim.lj.ubuntu.4 => log.11Jul2018.kim.lj.newton-off.ubuntu.4} (60%) create mode 100644 examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.1 create mode 100644 examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.4 diff --git a/examples/kim/log.04Jul2018.kim.lj.lmp.ubuntu.1 b/examples/kim/log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.1 similarity index 74% rename from examples/kim/log.04Jul2018.kim.lj.lmp.ubuntu.1 rename to examples/kim/log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.1 index 217568072c..bf5864cb08 100644 --- a/examples/kim/log.04Jul2018.kim.lj.lmp.ubuntu.1 +++ b/examples/kim/log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.1 @@ -1,5 +1,5 @@ -------------------------------------------------------------------------- -[[19074,1],0]: A high-performance Open MPI point-to-point messaging module +[[6124,1],0]: A high-performance Open MPI point-to-point messaging module was unable to find any relevant network interfaces: Module: OpenFabrics (openib) @@ -16,7 +16,7 @@ Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 1 by 1 MPI processor grid Created 32000 atoms - Time spent = 0.00251478 secs + Time spent = 0.00263722 secs Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -37,20 +37,20 @@ Per MPI rank memory allocation (min/avg/max) = 20.37 | 20.37 | 20.37 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 2.6218 on 1 procs for 100 steps with 32000 atoms +Loop time of 2.59913 on 1 procs for 100 steps with 32000 atoms -Performance: 3.295 ns/day, 7.283 hours/ns, 38.142 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 3.324 ns/day, 7.220 hours/ns, 38.474 timesteps/s +99.4% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.2623 | 2.2623 | 2.2623 | 0.0 | 86.29 -Neigh | 0.31859 | 0.31859 | 0.31859 | 0.0 | 12.15 -Comm | 0.005914 | 0.005914 | 0.005914 | 0.0 | 0.23 -Output | 0.00033105 | 0.00033105 | 0.00033105 | 0.0 | 0.01 -Modify | 0.023461 | 0.023461 | 0.023461 | 0.0 | 0.89 -Other | | 0.01123 | | | 0.43 +Pair | 2.2753 | 2.2753 | 2.2753 | 0.0 | 87.54 +Neigh | 0.28456 | 0.28456 | 0.28456 | 0.0 | 10.95 +Comm | 0.0055908 | 0.0055908 | 0.0055908 | 0.0 | 0.22 +Output | 0.00034594 | 0.00034594 | 0.00034594 | 0.0 | 0.01 +Modify | 0.023011 | 0.023011 | 0.023011 | 0.0 | 0.89 +Other | | 0.01037 | | | 0.40 Nlocal: 32000 ave 32000 max 32000 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/kim/log.04Jul2018.kim.lj.lmp.ubuntu.4 b/examples/kim/log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.4 similarity index 74% rename from examples/kim/log.04Jul2018.kim.lj.lmp.ubuntu.4 rename to examples/kim/log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.4 index 806c674efb..7f51d447fd 100644 --- a/examples/kim/log.04Jul2018.kim.lj.lmp.ubuntu.4 +++ b/examples/kim/log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.4 @@ -1,5 +1,5 @@ -------------------------------------------------------------------------- -[[19098,1],0]: A high-performance Open MPI point-to-point messaging module +[[6116,1],1]: A high-performance Open MPI point-to-point messaging module was unable to find any relevant network interfaces: Module: OpenFabrics (openib) @@ -16,7 +16,7 @@ Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 2 by 2 MPI processor grid Created 32000 atoms - Time spent = 0.00123697 secs + Time spent = 0.00125703 secs Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -37,20 +37,20 @@ Per MPI rank memory allocation (min/avg/max) = 8.013 | 8.013 | 8.013 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 2.88232 on 4 procs for 100 steps with 32000 atoms +Loop time of 2.99901 on 4 procs for 100 steps with 32000 atoms -Performance: 2.998 ns/day, 8.006 hours/ns, 34.694 timesteps/s -24.6% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 2.881 ns/day, 8.331 hours/ns, 33.344 timesteps/s +24.4% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 1.3577 | 1.415 | 1.467 | 3.7 | 49.09 -Neigh | 0.25761 | 0.28189 | 0.29894 | 3.2 | 9.78 -Comm | 0.58287 | 0.73218 | 0.85561 | 11.5 | 25.40 -Output | 0.00082721 | 0.0029034 | 0.0051877 | 3.1 | 0.10 -Modify | 0.0058569 | 0.015767 | 0.033242 | 8.6 | 0.55 -Other | | 0.4346 | | | 15.08 +Pair | 1.3704 | 1.4012 | 1.439 | 2.3 | 46.72 +Neigh | 0.252 | 0.27028 | 0.28236 | 2.2 | 9.01 +Comm | 0.66355 | 0.73942 | 0.82223 | 6.5 | 24.66 +Output | 0.0037821 | 0.0090774 | 0.016142 | 5.1 | 0.30 +Modify | 0.0058855 | 0.019317 | 0.044855 | 11.4 | 0.64 +Other | | 0.5597 | | | 18.66 Nlocal: 8000 ave 8018 max 7967 min Histogram: 1 0 0 0 0 0 1 0 0 2 diff --git a/examples/kim/log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.1 b/examples/kim/log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.1 similarity index 74% rename from examples/kim/log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.1 rename to examples/kim/log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.1 index 70eae36a48..7be22a7f60 100644 --- a/examples/kim/log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.1 +++ b/examples/kim/log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.1 @@ -1,5 +1,5 @@ -------------------------------------------------------------------------- -[[19053,1],0]: A high-performance Open MPI point-to-point messaging module +[[5635,1],0]: A high-performance Open MPI point-to-point messaging module was unable to find any relevant network interfaces: Module: OpenFabrics (openib) @@ -16,7 +16,7 @@ Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 1 by 1 MPI processor grid Created 32000 atoms - Time spent = 0.00270113 secs + Time spent = 0.00226572 secs Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -37,20 +37,20 @@ Per MPI rank memory allocation (min/avg/max) = 19.23 | 19.23 | 19.23 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 2.18554 on 1 procs for 100 steps with 32000 atoms +Loop time of 2.26274 on 1 procs for 100 steps with 32000 atoms -Performance: 3.953 ns/day, 6.071 hours/ns, 45.755 timesteps/s -99.6% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 3.818 ns/day, 6.285 hours/ns, 44.194 timesteps/s +99.0% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.0006 | 2.0006 | 2.0006 | 0.0 | 91.54 -Neigh | 0.13933 | 0.13933 | 0.13933 | 0.0 | 6.38 -Comm | 0.011122 | 0.011122 | 0.011122 | 0.0 | 0.51 -Output | 0.00020978 | 0.00020978 | 0.00020978 | 0.0 | 0.01 -Modify | 0.022358 | 0.022358 | 0.022358 | 0.0 | 1.02 -Other | | 0.01188 | | | 0.54 +Pair | 2.0589 | 2.0589 | 2.0589 | 0.0 | 90.99 +Neigh | 0.15362 | 0.15362 | 0.15362 | 0.0 | 6.79 +Comm | 0.012277 | 0.012277 | 0.012277 | 0.0 | 0.54 +Output | 0.0003387 | 0.0003387 | 0.0003387 | 0.0 | 0.01 +Modify | 0.02416 | 0.02416 | 0.02416 | 0.0 | 1.07 +Other | | 0.01346 | | | 0.59 Nlocal: 32000 ave 32000 max 32000 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/kim/log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.4 b/examples/kim/log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.4 similarity index 74% rename from examples/kim/log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.4 rename to examples/kim/log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.4 index e7157c11b8..d910afbbc2 100644 --- a/examples/kim/log.04Jul2018.kim.lj.lmp.newton-on.ubuntu.4 +++ b/examples/kim/log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.4 @@ -1,5 +1,5 @@ -------------------------------------------------------------------------- -[[19045,1],0]: A high-performance Open MPI point-to-point messaging module +[[5659,1],0]: A high-performance Open MPI point-to-point messaging module was unable to find any relevant network interfaces: Module: OpenFabrics (openib) @@ -16,7 +16,7 @@ Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 2 by 2 MPI processor grid Created 32000 atoms - Time spent = 0.00117056 secs + Time spent = 0.00213171 secs Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -37,20 +37,20 @@ Per MPI rank memory allocation (min/avg/max) = 7.632 | 7.632 | 7.632 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 2.34104 on 4 procs for 100 steps with 32000 atoms +Loop time of 2.44628 on 4 procs for 100 steps with 32000 atoms -Performance: 3.691 ns/day, 6.503 hours/ns, 42.716 timesteps/s -24.0% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 3.532 ns/day, 6.795 hours/ns, 40.878 timesteps/s +24.2% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 0.91499 | 0.96396 | 1.0567 | 5.6 | 41.18 -Neigh | 0.092245 | 0.11781 | 0.14572 | 6.0 | 5.03 -Comm | 1.1264 | 1.2287 | 1.2906 | 5.6 | 52.49 -Output | 0.00045199 | 0.00051154 | 0.00060273 | 0.0 | 0.02 -Modify | 0.0058738 | 0.0059629 | 0.0061675 | 0.2 | 0.25 -Other | | 0.02406 | | | 1.03 +Pair | 0.98717 | 1.0434 | 1.1582 | 6.6 | 42.65 +Neigh | 0.10195 | 0.12588 | 0.15258 | 5.2 | 5.15 +Comm | 1.1525 | 1.2449 | 1.3061 | 5.1 | 50.89 +Output | 0.0005828 | 0.00075188 | 0.00087256 | 0.0 | 0.03 +Modify | 0.0057955 | 0.0059132 | 0.006044 | 0.1 | 0.24 +Other | | 0.02542 | | | 1.04 Nlocal: 8000 ave 8018 max 7967 min Histogram: 1 0 0 0 0 0 1 0 0 2 diff --git a/examples/kim/log.04Jul2018.kim.lj.ubuntu.1 b/examples/kim/log.11Jul2018.kim.lj.newton-off.ubuntu.1 similarity index 68% rename from examples/kim/log.04Jul2018.kim.lj.ubuntu.1 rename to examples/kim/log.11Jul2018.kim.lj.newton-off.ubuntu.1 index 3832bd060a..c8c1919de5 100644 --- a/examples/kim/log.04Jul2018.kim.lj.ubuntu.1 +++ b/examples/kim/log.11Jul2018.kim.lj.newton-off.ubuntu.1 @@ -1,5 +1,5 @@ -------------------------------------------------------------------------- -[[19111,1],0]: A high-performance Open MPI point-to-point messaging module +[[5713,1],0]: A high-performance Open MPI point-to-point messaging module was unable to find any relevant network interfaces: Module: OpenFabrics (openib) @@ -16,10 +16,9 @@ Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 1 by 1 MPI processor grid Created 32000 atoms - Time spent = 0.00257231 secs -WARNING: KIM Model does not provide `partialVirial'. pair_kim will always use `LAMMPSvirial' option. (../pair_kim.cpp:987) -WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:992) -WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:996) + Time spent = 0.00256546 secs +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -38,22 +37,22 @@ Setting up Verlet run ... Time step : 0.001 Per MPI rank memory allocation (min/avg/max) = 21.26 | 21.26 | 21.26 Mbytes Step Temp E_pair E_mol TotEng Press - 0 200 6290.8194 0 7118.0584 1270.4248 - 100 95.179725 6718.814 0 7112.496 604.59343 -Loop time of 3.22934 on 1 procs for 100 steps with 32000 atoms + 0 200 6290.8194 0 7118.0584 129712.25 + 100 95.179725 6718.814 0 7112.496 133346.59 +Loop time of 2.69522 on 1 procs for 100 steps with 32000 atoms -Performance: 2.675 ns/day, 8.970 hours/ns, 30.966 timesteps/s -99.9% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 3.206 ns/day, 7.487 hours/ns, 37.103 timesteps/s +99.8% CPU use with 1 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.821 | 2.821 | 2.821 | 0.0 | 87.36 -Neigh | 0.35198 | 0.35198 | 0.35198 | 0.0 | 10.90 -Comm | 0.0081757 | 0.0081757 | 0.0081757 | 0.0 | 0.25 -Output | 0.00030922 | 0.00030922 | 0.00030922 | 0.0 | 0.01 -Modify | 0.032856 | 0.032856 | 0.032856 | 0.0 | 1.02 -Other | | 0.01501 | | | 0.46 +Pair | 2.3655 | 2.3655 | 2.3655 | 0.0 | 87.77 +Neigh | 0.28659 | 0.28659 | 0.28659 | 0.0 | 10.63 +Comm | 0.0061924 | 0.0061924 | 0.0061924 | 0.0 | 0.23 +Output | 0.00034901 | 0.00034901 | 0.00034901 | 0.0 | 0.01 +Modify | 0.025061 | 0.025061 | 0.025061 | 0.0 | 0.93 +Other | | 0.01157 | | | 0.43 Nlocal: 32000 ave 32000 max 32000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -66,4 +65,4 @@ Total # of neighbors = 2370499 Ave neighs/atom = 74.0781 Neighbor list builds = 3 Dangerous builds = 0 -Total wall time: 0:00:03 +Total wall time: 0:00:02 diff --git a/examples/kim/log.04Jul2018.kim.lj.ubuntu.4 b/examples/kim/log.11Jul2018.kim.lj.newton-off.ubuntu.4 similarity index 60% rename from examples/kim/log.04Jul2018.kim.lj.ubuntu.4 rename to examples/kim/log.11Jul2018.kim.lj.newton-off.ubuntu.4 index 70b2f82812..c8d5faeb20 100644 --- a/examples/kim/log.04Jul2018.kim.lj.ubuntu.4 +++ b/examples/kim/log.11Jul2018.kim.lj.newton-off.ubuntu.4 @@ -1,5 +1,5 @@ -------------------------------------------------------------------------- -[[19135,1],1]: A high-performance Open MPI point-to-point messaging module +[[5673,1],0]: A high-performance Open MPI point-to-point messaging module was unable to find any relevant network interfaces: Module: OpenFabrics (openib) @@ -16,19 +16,15 @@ Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 2 by 2 MPI processor grid Created 32000 atoms - Time spent = 0.00154417 secs -WARNING: KIM Model does not provide `partialVirial'. pair_kim will always use `LAMMPSvirial' option. (../pair_kim.cpp:987) -WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:992) -WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:996) -WARNING: KIM Model does not provide `partialVirial'. pair_kim will always use `LAMMPSvirial' option. (../pair_kim.cpp:987) -WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:992) -WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:996) -WARNING: KIM Model does not provide `partialVirial'. pair_kim will always use `LAMMPSvirial' option. (../pair_kim.cpp:987) -WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:992) -WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:996) -WARNING: KIM Model does not provide `partialVirial'. pair_kim will always use `LAMMPSvirial' option. (../pair_kim.cpp:987) -WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:992) -WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:996) + Time spent = 0.00215514 secs +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -47,22 +43,22 @@ Setting up Verlet run ... Time step : 0.001 Per MPI rank memory allocation (min/avg/max) = 8.528 | 8.528 | 8.528 Mbytes Step Temp E_pair E_mol TotEng Press - 0 200 6290.8194 0 7118.0584 1270.4248 - 100 95.179725 6718.814 0 7112.496 604.59343 -Loop time of 3.17877 on 4 procs for 100 steps with 32000 atoms + 0 200 6290.8194 0 7118.0584 129712.25 + 100 95.179725 6718.814 0 7112.496 133346.59 +Loop time of 3.06157 on 4 procs for 100 steps with 32000 atoms -Performance: 2.718 ns/day, 8.830 hours/ns, 31.459 timesteps/s -24.3% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 2.822 ns/day, 8.504 hours/ns, 32.663 timesteps/s +24.4% CPU use with 4 MPI tasks x no OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.0514 | 2.1009 | 2.1859 | 3.6 | 66.09 -Neigh | 0.29304 | 0.31706 | 0.33568 | 2.7 | 9.97 -Comm | 0.61926 | 0.72709 | 0.77083 | 7.3 | 22.87 -Output | 0.00035457 | 0.00043741 | 0.000547 | 0.0 | 0.01 -Modify | 0.0066107 | 0.0067653 | 0.0069097 | 0.1 | 0.21 -Other | | 0.02653 | | | 0.83 +Pair | 1.9964 | 2.0369 | 2.084 | 2.5 | 66.53 +Neigh | 0.25048 | 0.27467 | 0.29605 | 3.1 | 8.97 +Comm | 0.66611 | 0.71603 | 0.74496 | 3.6 | 23.39 +Output | 0.00048383 | 0.00070085 | 0.00098836 | 0.0 | 0.02 +Modify | 0.0064885 | 0.0065907 | 0.006806 | 0.2 | 0.22 +Other | | 0.02664 | | | 0.87 Nlocal: 8000 ave 8018 max 7967 min Histogram: 1 0 0 0 0 0 1 0 0 2 diff --git a/examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.1 b/examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.1 new file mode 100644 index 0000000000..21af1a6299 --- /dev/null +++ b/examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.1 @@ -0,0 +1,68 @@ +-------------------------------------------------------------------------- +[[5690,1],0]: A high-performance Open MPI point-to-point messaging module +was unable to find any relevant network interfaces: + +Module: OpenFabrics (openib) + Host: ubuntu-artful + +Another transport will be used instead, although this may result in +lower performance. + +NOTE: You can disable this warning by setting the MCA parameter +btl_base_warn_component_unused to 0. +-------------------------------------------------------------------------- +LAMMPS (22 Jun 2018) +Lattice spacing in x,y,z = 4.43 4.43 4.43 +Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) + 1 by 1 by 1 MPI processor grid +Created 32000 atoms + Time spent = 0.00258302 secs +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 8.45 + ghost atom cutoff = 8.45 + binsize = 4.225, bins = 21 21 21 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair kim, perpetual + attributes: half, newton off, cut 8.45 + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard +Setting up Verlet run ... + Unit style : metal + Current step : 0 + Time step : 0.001 +Per MPI rank memory allocation (min/avg/max) = 20.87 | 20.87 | 20.87 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 200 6290.8194 0 7118.0584 129712.25 + 100 95.179725 6718.814 0 7112.496 133346.59 +Loop time of 2.7052 on 1 procs for 100 steps with 32000 atoms + +Performance: 3.194 ns/day, 7.514 hours/ns, 36.966 timesteps/s +99.6% CPU use with 1 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.3715 | 2.3715 | 2.3715 | 0.0 | 87.67 +Neigh | 0.28386 | 0.28386 | 0.28386 | 0.0 | 10.49 +Comm | 0.012808 | 0.012808 | 0.012808 | 0.0 | 0.47 +Output | 0.00033716 | 0.00033716 | 0.00033716 | 0.0 | 0.01 +Modify | 0.02349 | 0.02349 | 0.02349 | 0.0 | 0.87 +Other | | 0.01317 | | | 0.49 + +Nlocal: 32000 ave 32000 max 32000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 19911 ave 19911 max 19911 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 2.3705e+06 ave 2.3705e+06 max 2.3705e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 2370499 +Ave neighs/atom = 74.0781 +Neighbor list builds = 3 +Dangerous builds = 0 +Total wall time: 0:00:02 diff --git a/examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.4 b/examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.4 new file mode 100644 index 0000000000..1214436d4d --- /dev/null +++ b/examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.4 @@ -0,0 +1,74 @@ +-------------------------------------------------------------------------- +[[5682,1],0]: A high-performance Open MPI point-to-point messaging module +was unable to find any relevant network interfaces: + +Module: OpenFabrics (openib) + Host: ubuntu-artful + +Another transport will be used instead, although this may result in +lower performance. + +NOTE: You can disable this warning by setting the MCA parameter +btl_base_warn_component_unused to 0. +-------------------------------------------------------------------------- +LAMMPS (22 Jun 2018) +Lattice spacing in x,y,z = 4.43 4.43 4.43 +Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) + 1 by 2 by 2 MPI processor grid +Created 32000 atoms + Time spent = 0.00322684 secs +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 8.45 + ghost atom cutoff = 8.45 + binsize = 4.225, bins = 21 21 21 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair kim, perpetual + attributes: half, newton off, cut 8.45 + pair build: half/bin/newtoff + stencil: half/bin/3d/newtoff + bin: standard +Setting up Verlet run ... + Unit style : metal + Current step : 0 + Time step : 0.001 +Per MPI rank memory allocation (min/avg/max) = 8.263 | 8.263 | 8.263 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 200 6290.8194 0 7118.0584 129712.25 + 100 95.179725 6718.814 0 7112.496 133346.59 +Loop time of 3.1366 on 4 procs for 100 steps with 32000 atoms + +Performance: 2.755 ns/day, 8.713 hours/ns, 31.882 timesteps/s +23.7% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.3641 | 1.4213 | 1.4783 | 3.5 | 45.31 +Neigh | 0.25408 | 0.27714 | 0.29697 | 3.2 | 8.84 +Comm | 1.3588 | 1.4045 | 1.4806 | 4.0 | 44.78 +Output | 0.00055232 | 0.00072915 | 0.00087484 | 0.0 | 0.02 +Modify | 0.0061178 | 0.0062019 | 0.0062811 | 0.1 | 0.20 +Other | | 0.02673 | | | 0.85 + +Nlocal: 8000 ave 8018 max 7967 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 9131 ave 9164 max 9113 min +Histogram: 2 0 0 1 0 0 0 0 0 1 +Neighs: 630904 ave 632094 max 628209 min +Histogram: 1 0 0 0 0 0 0 1 0 2 + +Total # of neighbors = 2523614 +Ave neighs/atom = 78.8629 +Neighbor list builds = 3 +Dangerous builds = 0 +Total wall time: 0:00:03 From 67e6afaab2b75f5a39c34edb7221d4a4672c69e4 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 11 Jul 2018 15:04:34 -0700 Subject: [PATCH 023/143] Update to KIM kim-api-v2.0.0-beta.1 --- cmake/CMakeLists.txt | 4 ++-- lib/kim/Install.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 4672b4a3db..be5bc74f1c 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -407,8 +407,8 @@ if(PKG_KIM) if(DOWNLOAD_KIM) include(ExternalProject) ExternalProject_Add(kim_build - URL https://github.com/openkim/kim-api/archive/v2.0.0-beta.0.tar.gz - URL_MD5 2c099fe2603fda9a6904fc50d626f71b + URL https://github.com/openkim/kim-api/archive/v2.0.0-beta.1.tar.gz + URL_MD5 633e331cc7942c1f0462da71f41f94be BUILD_IN_SOURCE 1 CONFIGURE_COMMAND /configure --prefix= ) diff --git a/lib/kim/Install.py b/lib/kim/Install.py index f9eb1c5eed..da0dcd2789 100644 --- a/lib/kim/Install.py +++ b/lib/kim/Install.py @@ -21,7 +21,7 @@ Syntax from lib dir: python Install.py -b -v version -a kim-name specify one or more options, order does not matter -v = version of KIM API library to use - default = kim-api-v2.0.0-beta.0 (current as of June 2018) + default = kim-api-v2.0.0-beta.1 (current as of July 2018) -b = download and build base KIM API library with example Models this will delete any previous installation in the current folder -n = do NOT download and build base KIM API library. @@ -109,7 +109,7 @@ nargs = len(args) if nargs == 0: error() thisdir = os.environ['PWD'] -version = "kim-api-v2.0.0-beta.0" +version = "kim-api-v2.0.0-beta.1" buildflag = False everythingflag = False From e37e9cfa2f0b1dff19e5114cb2a2f2b992be83a0 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Mon, 16 Jul 2018 19:46:00 -0500 Subject: [PATCH 024/143] Add virtual set_contributing() to pair_kim --- src/KIM/pair_kim.cpp | 15 +++++++++++++-- src/KIM/pair_kim.h | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 88f576bad2..6d30cff01d 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -142,6 +142,16 @@ PairKIM::~PairKIM() return; } +/* ---------------------------------------------------------------------- */ +void PairKIM::set_contributing() +{ + int const nall = atom->nlocal + atom->nghost; + for (int i = 0; i < nall; ++i) + { + kim_particleContributing[i] = ( (i < atom->nlocal) ? 1 : 0 ); + } +} + /* ---------------------------------------------------------------------- */ void PairKIM::compute(int eflag , int vflag) @@ -185,10 +195,11 @@ void PairKIM::compute(int eflag , int vflag) for (int i = 0; i < nall; i++) { ielement = lmps_map_species_to_unique[species[i]]; kim_particleSpecies[i] = kim_particle_codes[ielement]; - - kim_particleContributing[i] = ( (inlocal) ? 1 : 0 ); } + // Set kim contributing flags + set_contributing(); + // pass current atom pointers to KIM set_argument_pointers(); diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index bdebfbcad0..59f477b1e4 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -117,6 +117,7 @@ namespace LAMMPS_NS { int** lmps_stripped_neigh_ptr; // pointer into lists // KIM specific helper functions + virtual void set_contributing(); void kim_init(); void kim_free(); void set_argument_pointers(); From 62c8ba78249790e629cd78b0ad3553432ed4887b Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Mon, 16 Jul 2018 21:21:28 -0500 Subject: [PATCH 025/143] pair_kim : private to protected and add virtual to all routines --- src/KIM/pair_kim.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index 59f477b1e4..79b8c5d792 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -53,7 +53,7 @@ namespace LAMMPS_NS { virtual void unpack_reverse_comm(int, int*, double*); virtual double memory_usage(); - private: + protected: // (nearly) all bool flags are not initialized in constructor, but set // explicitly in the indicated function. All other data members are // initialized in constructor @@ -66,7 +66,7 @@ namespace LAMMPS_NS { // values set in coeff() // values set in allocate(), called by coeff() - void allocate(); + virtual void allocate(); int* lmps_map_species_to_unique; // values set in coeff(), after calling allocate() @@ -118,13 +118,13 @@ namespace LAMMPS_NS { // KIM specific helper functions virtual void set_contributing(); - void kim_init(); - void kim_free(); - void set_argument_pointers(); - void set_lmps_flags(); - void set_kim_model_has_flags(); + virtual void kim_init(); + virtual void kim_free(); + virtual void set_argument_pointers(); + virtual void set_lmps_flags(); + virtual void set_kim_model_has_flags(); // static methods used as callbacks from KIM - static int get_neigh( + static int get_neigh( void const * const dataObject, int const numberOfCutoffs, double const * const cutoffs, int const neighborListIndex, int const particleNumber, From c0a7cabcba95f9a16b95ac6e8bf659b9db34eab1 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 18 Jul 2018 22:15:23 -0500 Subject: [PATCH 026/143] Added GPLv2 exception to link to kim-api in pair_kim.* --- src/KIM/pair_kim.cpp | 34 ++++++++++++++++++++++++++++++++++ src/KIM/pair_kim.h | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 6d30cff01d..39f3c4a240 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -15,6 +15,40 @@ Contributing authors: Ryan S. Elliott (UMinn) ------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, see . + + Linking LAMMPS statically or dynamically with other modules is making a + combined work based on LAMMPS. Thus, the terms and conditions of the GNU + General Public License cover the whole combination. + + In addition, as a special exception, the copyright holders of LAMMPS give + you permission to combine LAMMPS with free software programs or libraries + that are released under the GNU LGPL and with code included in the standard + release of the "kim-api" under the CDDL (or modified versions of such code, + with unchanged license). You may copy and distribute such a system following + the terms of the GNU GPL for LAMMPS and the licenses of the other code + concerned, provided that you include the source code of that other code + when and as the GNU GPL requires distribution of source code. + + Note that people who make modified versions of LAMMPS are not obligated to + grant this special exception for their modified versions; it is their choice + whether to do so. The GNU General Public License gives permission to release + a modified version without this exception; this exception also makes it + possible to release a modified version which carries forward this exception. +------------------------------------------------------------------------- */ + /* ---------------------------------------------------------------------- Designed for use with the kim-api-v2.0.0-beta.1 (and newer) package ------------------------------------------------------------------------- */ diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index 79b8c5d792..b6d3489c71 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -15,6 +15,40 @@ Contributing authors: Ryan S. Elliott (UMinn) ------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, see . + + Linking LAMMPS statically or dynamically with other modules is making a + combined work based on LAMMPS. Thus, the terms and conditions of the GNU + General Public License cover the whole combination. + + In addition, as a special exception, the copyright holders of LAMMPS give + you permission to combine LAMMPS with free software programs or libraries + that are released under the GNU LGPL and with code included in the standard + release of the "kim-api" under the CDDL (or modified versions of such code, + with unchanged license). You may copy and distribute such a system following + the terms of the GNU GPL for LAMMPS and the licenses of the other code + concerned, provided that you include the source code of that other code + when and as the GNU GPL requires distribution of source code. + + Note that people who make modified versions of LAMMPS are not obligated to + grant this special exception for their modified versions; it is their choice + whether to do so. The GNU General Public License gives permission to release + a modified version without this exception; this exception also makes it + possible to release a modified version which carries forward this exception. +------------------------------------------------------------------------- */ + /* ---------------------------------------------------------------------- Designed for use with the kim-api-v2.0.0-beta.1 (and newer) package ------------------------------------------------------------------------- */ From dde0974a1aac9c48ce164c5f57813c381f4119a2 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Mon, 13 Aug 2018 22:34:42 -0500 Subject: [PATCH 027/143] Update for corrected neighbor list hint --- src/KIM/pair_kim.cpp | 28 ++++++++++------------------ src/KIM/pair_kim.h | 5 ++--- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 39f3c4a240..a298187c12 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -97,8 +97,7 @@ PairKIM::PairKIM(LAMMPS *lmp) : kim_global_influence_distance(0.0), kim_number_of_neighbor_lists(0), kim_cutoff_values(NULL), - padding_neighbor_hints(NULL), - half_list_hints(NULL), + modelWillNotRequestNeighborsOfNoncontributingParticles(NULL), neighborLists(NULL), kim_particle_codes(NULL), lmps_maxalloc(0), @@ -480,22 +479,15 @@ void PairKIM::init_style() // make sure comm_reverse expects (at most) 9 values when newton is off if (!lmps_using_newton) comm_reverse_off = 9; - // request full neighbor lists (unless hints allow for better alternatives) + // request full neighbor for (int i = 0; i < kim_number_of_neighbor_lists; ++i) { int irequest = neighbor->request(this,instance_me); neighbor->requests[irequest]->id = i; - if (half_list_hints[i]) - { - neighbor->requests[irequest]->half = 1; - neighbor->requests[irequest]->full = 0; - } - else - { - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->full = 1; - } - if (padding_neighbor_hints[i]) + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + + if (modelWillNotRequestNeighborsOfNoncontributingParticles[i]) { neighbor->requests[irequest]->ghost = 0; } @@ -787,10 +779,10 @@ void PairKIM::kim_init() set_kim_model_has_flags(); pkim->GetInfluenceDistance(&kim_global_influence_distance); - pkim->GetNeighborListPointers(&kim_number_of_neighbor_lists, - &kim_cutoff_values, - &padding_neighbor_hints, - &half_list_hints); + pkim->GetNeighborListPointers( + &kim_number_of_neighbor_lists, + &kim_cutoff_values, + &modelWillNotRequestNeighborsOfNoncontributingParticles); if (neighborLists) { delete [] neighborLists; diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index b6d3489c71..e2be0855db 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -134,9 +134,8 @@ namespace LAMMPS_NS { double kim_global_influence_distance; // KIM Model cutoff value int kim_number_of_neighbor_lists; double const * kim_cutoff_values; - int const * padding_neighbor_hints; - int const * half_list_hints; - class NeighList ** neighborLists; + int const * modelWillNotRequestNeighborsOfNoncontributingParticles; + class NeighList ** neighborLists; // values set in init_style() bool kim_particle_codes_ok; From 9962f941e674e3dd18e76dec4ba5017e98832513 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Sat, 18 Aug 2018 11:53:03 -0500 Subject: [PATCH 028/143] pair_kim - no need to comm vatom() values --- src/KIM/pair_kim.cpp | 86 +++----------------------------------------- 1 file changed, 5 insertions(+), 81 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index a298187c12..d6dfa9112c 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -476,8 +476,8 @@ void PairKIM::init_style() } - // make sure comm_reverse expects (at most) 9 values when newton is off - if (!lmps_using_newton) comm_reverse_off = 9; + // make sure comm_reverse expects (at most) 3 values when newton is off + if (!lmps_using_newton) comm_reverse_off = 3; // request full neighbor for (int i = 0; i < kim_number_of_neighbor_lists; ++i) @@ -543,9 +543,7 @@ int PairKIM::pack_reverse_comm(int n, int first, double *buf) m = 0; last = first + n; - if ((kim_model_support_for_forces != notSupported) && - ((vflag_atom == 0) || - (kim_model_support_for_particleVirial == notSupported))) + if (kim_model_support_for_forces != notSupported) { for (i = first; i < last; i++) { @@ -555,42 +553,6 @@ int PairKIM::pack_reverse_comm(int n, int first, double *buf) } return m; } - else if ((kim_model_support_for_forces != notSupported) && - (vflag_atom == 1) && - (kim_model_support_for_particleVirial != notSupported)) - { - double *va=&(vatom[0][0]); - for (i = first; i < last; i++) - { - buf[m++] = fp[3*i+0]; - buf[m++] = fp[3*i+1]; - buf[m++] = fp[3*i+2]; - - buf[m++] = va[6*i+0]; - buf[m++] = va[6*i+1]; - buf[m++] = va[6*i+2]; - buf[m++] = va[6*i+3]; - buf[m++] = va[6*i+4]; - buf[m++] = va[6*i+5]; - } - return m; - } - else if ((kim_model_support_for_forces == notSupported) && - (vflag_atom == 1) && - (kim_model_support_for_particleVirial != notSupported)) - { - double *va=&(vatom[0][0]); - for (i = first; i < last; i++) - { - buf[m++] = va[6*i+0]; - buf[m++] = va[6*i+1]; - buf[m++] = va[6*i+2]; - buf[m++] = va[6*i+3]; - buf[m++] = va[6*i+4]; - buf[m++] = va[6*i+5]; - } - return m; - } else return 0; } @@ -606,9 +568,7 @@ void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) fp = &(atom->f[0][0]); m = 0; - if ((kim_model_support_for_forces != notSupported) && - ((vflag_atom == 0) || - (kim_model_support_for_particleVirial == notSupported))) + if (kim_model_support_for_forces != notSupported) { for (i = 0; i < n; i++) { @@ -618,42 +578,6 @@ void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) fp[3*j+2]+= buf[m++]; } } - else if ((kim_model_support_for_forces != notSupported) && - (vflag_atom == 1) && - (kim_model_support_for_particleVirial != notSupported)) - { - double *va=&(vatom[0][0]); - for (i = 0; i < n; i++) - { - j = list[i]; - fp[3*j+0]+= buf[m++]; - fp[3*j+1]+= buf[m++]; - fp[3*j+2]+= buf[m++]; - - va[j*6+0]+=buf[m++]; - va[j*6+1]+=buf[m++]; - va[j*6+2]+=buf[m++]; - va[j*6+3]+=buf[m++]; - va[j*6+4]+=buf[m++]; - va[j*6+5]+=buf[m++]; - } - } - else if ((kim_model_support_for_forces == notSupported) && - (vflag_atom == 1) && - (kim_model_support_for_particleVirial != notSupported)) - { - double *va=&(vatom[0][0]); - for (i = 0; i < n; i++) - { - j = list[i]; - va[j*6+0]+=buf[m++]; - va[j*6+1]+=buf[m++]; - va[j*6+2]+=buf[m++]; - va[j*6+3]+=buf[m++]; - va[j*6+4]+=buf[m++]; - va[j*6+5]+=buf[m++]; - } - } else ;// do nothing @@ -875,7 +799,7 @@ void PairKIM::set_argument_pointers() } else if (kim_model_support_for_particleVirial != notSupported) { - kimerror = kimerror || pargs->SetArgumentPointer(partialParticleEnergy, + kimerror = kimerror || pargs->SetArgumentPointer(partialParticleVirial, &(vatom[0][0])); } From 7aa7002347f709af29016071538182c8157f8d87 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Sat, 18 Aug 2018 12:02:22 -0500 Subject: [PATCH 029/143] Added check & error for KIM/LAMMPSvirial argument --- src/KIM/pair_kim.cpp | 12 +++++++++++- src/KIM/pair_kim.h | 4 ++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index d6dfa9112c..f82617ee0e 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -308,7 +308,17 @@ void PairKIM::settings(int narg, char **arg) ++settings_call_count; init_style_call_count = 0; - if (narg != 1) error->all(FLERR,"Illegal pair_style command"); + if (narg != 1) + { + if ((narg > 0) && ((0 == strcmp("KIMvirial", argv[0])) || + (0 == strcmp("LAMMPSvirial", argv[0])))) + { + error->all(FLERR,"'KIMvirial' or 'LAMMPSvirial' not supported with " + "kim-api-v2."); + } + else + error->all(FLERR,"Illegal pair_style command"); + } // arg[0] is the KIM Model name lmps_using_molecular = (atom->molecular > 0); diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index e2be0855db..eef6e0345b 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -179,6 +179,10 @@ E: KIM Compute returned error The KIM model was unable, for some reason, to complete the computation. +E: 'KIMvirial' or 'LAMMPSvirial' not supported with kim-api-v2. + +"KIMvirial or "LAMMPSvirial" found on the pair_style line. These keys are not supported kim-api-v2. (The virial computation is always performed by LAMMPS.) Please remove these keys, make sure the KIM model you are using supports kim-api-v2, and rerun. + E: Illegal pair_style command Self-explanatory. From dd2a1e4787a927ccf00f34bd0dc6e7e5c4c7023f Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Sat, 18 Aug 2018 12:38:29 -0500 Subject: [PATCH 030/143] Fix typos in pair_kim.cpp --- src/KIM/pair_kim.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index f82617ee0e..e209cb1202 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -310,8 +310,8 @@ void PairKIM::settings(int narg, char **arg) if (narg != 1) { - if ((narg > 0) && ((0 == strcmp("KIMvirial", argv[0])) || - (0 == strcmp("LAMMPSvirial", argv[0])))) + if ((narg > 0) && ((0 == strcmp("KIMvirial", arg[0])) || + (0 == strcmp("LAMMPSvirial", arg[0])))) { error->all(FLERR,"'KIMvirial' or 'LAMMPSvirial' not supported with " "kim-api-v2."); From 634ed487a5048b72147acdb09443218a5386fd60 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Tue, 4 Sep 2018 22:43:55 -0500 Subject: [PATCH 031/143] Use pkg-config to find kim-api-v2 library settings --- lib/kim/Makefile.lammps | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/lib/kim/Makefile.lammps b/lib/kim/Makefile.lammps index c7c9d9fd2f..1c2ab417d5 100644 --- a/lib/kim/Makefile.lammps +++ b/lib/kim/Makefile.lammps @@ -5,8 +5,6 @@ # The KIM API package can be downloaded from https://openkim.org/kim-api # Follow the instructions in the INSTALL file to build and install the # KIM API. Add the openkim.org Models you are interested in using. -# Make sure the directory where the "kim-api-build-conifg" utility is -# located is on the PATH. # # As long as you have followed the KIM API build and install instructions, # there should not be any reason to change this file. @@ -15,18 +13,5 @@ # Settings that the LAMMPS build will import when this package is installed - -include ../../lib/kim/Makefile.KIM_DIR - -ifeq ($(wildcard $(KIM_INSTALL_DIR)/bin/kim-api-v2-build-config),) - KIM_CONFIG_HELPER = kim-api-v2-build-config -else - KIM_CONFIG_HELPER = $(KIM_INSTALL_DIR)/bin/kim-api-v2-build-config -endif -ifeq ($(shell $(KIM_CONFIG_HELPER) --version 2> /dev/null),) - $(error $(KIM_CONFIG_HELPER) utility is not available. Something is wrong with your KIM API package setup) -endif - -kim_SYSINC = $(shell $(KIM_CONFIG_HELPER) --includes) -kim_SYSLIB = $(shell $(KIM_CONFIG_HELPER) --ldlibs) -kim_SYSPATH = $(shell $(KIM_CONFIG_HELPER) --ldflags) +kim_SYSINC = $(shell pkg-config --cflags libkim-api-v2) +kim_SYSLIB = $(shell pkg-config --libs libkim-api-v2) From b9d12f0aa0148fa1777527e307facac7893b2de9 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Mon, 1 Oct 2018 22:01:12 -0500 Subject: [PATCH 032/143] Update function pointer name --- src/KIM/pair_kim.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index e209cb1202..eca3f6f1d7 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -735,7 +735,7 @@ void PairKIM::kim_init() kimerror = pargs->SetCallbackPointer( KIM::COMPUTE_CALLBACK_NAME::GetNeighborList, KIM::LANGUAGE_NAME::cpp, - reinterpret_cast(get_neigh), + reinterpret_cast(get_neigh), reinterpret_cast(this)); if (kimerror) From 762a4b97acce6917fd8335b2593ed66396c7a68f Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Tue, 30 Oct 2018 21:54:59 -0500 Subject: [PATCH 033/143] Revert "pair_kim - no need to comm vatom() values" This reverts commit 9962f941e674e3dd18e76dec4ba5017e98832513. --- src/KIM/pair_kim.cpp | 86 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 81 insertions(+), 5 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index eca3f6f1d7..1bd21884eb 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -486,8 +486,8 @@ void PairKIM::init_style() } - // make sure comm_reverse expects (at most) 3 values when newton is off - if (!lmps_using_newton) comm_reverse_off = 3; + // make sure comm_reverse expects (at most) 9 values when newton is off + if (!lmps_using_newton) comm_reverse_off = 9; // request full neighbor for (int i = 0; i < kim_number_of_neighbor_lists; ++i) @@ -553,7 +553,9 @@ int PairKIM::pack_reverse_comm(int n, int first, double *buf) m = 0; last = first + n; - if (kim_model_support_for_forces != notSupported) + if ((kim_model_support_for_forces != notSupported) && + ((vflag_atom == 0) || + (kim_model_support_for_particleVirial == notSupported))) { for (i = first; i < last; i++) { @@ -563,6 +565,42 @@ int PairKIM::pack_reverse_comm(int n, int first, double *buf) } return m; } + else if ((kim_model_support_for_forces != notSupported) && + (vflag_atom == 1) && + (kim_model_support_for_particleVirial != notSupported)) + { + double *va=&(vatom[0][0]); + for (i = first; i < last; i++) + { + buf[m++] = fp[3*i+0]; + buf[m++] = fp[3*i+1]; + buf[m++] = fp[3*i+2]; + + buf[m++] = va[6*i+0]; + buf[m++] = va[6*i+1]; + buf[m++] = va[6*i+2]; + buf[m++] = va[6*i+3]; + buf[m++] = va[6*i+4]; + buf[m++] = va[6*i+5]; + } + return m; + } + else if ((kim_model_support_for_forces == notSupported) && + (vflag_atom == 1) && + (kim_model_support_for_particleVirial != notSupported)) + { + double *va=&(vatom[0][0]); + for (i = first; i < last; i++) + { + buf[m++] = va[6*i+0]; + buf[m++] = va[6*i+1]; + buf[m++] = va[6*i+2]; + buf[m++] = va[6*i+3]; + buf[m++] = va[6*i+4]; + buf[m++] = va[6*i+5]; + } + return m; + } else return 0; } @@ -578,7 +616,9 @@ void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) fp = &(atom->f[0][0]); m = 0; - if (kim_model_support_for_forces != notSupported) + if ((kim_model_support_for_forces != notSupported) && + ((vflag_atom == 0) || + (kim_model_support_for_particleVirial == notSupported))) { for (i = 0; i < n; i++) { @@ -588,6 +628,42 @@ void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) fp[3*j+2]+= buf[m++]; } } + else if ((kim_model_support_for_forces != notSupported) && + (vflag_atom == 1) && + (kim_model_support_for_particleVirial != notSupported)) + { + double *va=&(vatom[0][0]); + for (i = 0; i < n; i++) + { + j = list[i]; + fp[3*j+0]+= buf[m++]; + fp[3*j+1]+= buf[m++]; + fp[3*j+2]+= buf[m++]; + + va[j*6+0]+=buf[m++]; + va[j*6+1]+=buf[m++]; + va[j*6+2]+=buf[m++]; + va[j*6+3]+=buf[m++]; + va[j*6+4]+=buf[m++]; + va[j*6+5]+=buf[m++]; + } + } + else if ((kim_model_support_for_forces == notSupported) && + (vflag_atom == 1) && + (kim_model_support_for_particleVirial != notSupported)) + { + double *va=&(vatom[0][0]); + for (i = 0; i < n; i++) + { + j = list[i]; + va[j*6+0]+=buf[m++]; + va[j*6+1]+=buf[m++]; + va[j*6+2]+=buf[m++]; + va[j*6+3]+=buf[m++]; + va[j*6+4]+=buf[m++]; + va[j*6+5]+=buf[m++]; + } + } else ;// do nothing @@ -809,7 +885,7 @@ void PairKIM::set_argument_pointers() } else if (kim_model_support_for_particleVirial != notSupported) { - kimerror = kimerror || pargs->SetArgumentPointer(partialParticleVirial, + kimerror = kimerror || pargs->SetArgumentPointer(partialParticleEnergy, &(vatom[0][0])); } From 8dd3bce7c5ae65d56a9c1281d55fa94a683a2e47 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Thu, 1 Nov 2018 19:33:52 -0500 Subject: [PATCH 034/143] Update to C KIM_API bindings --- src/KIM/pair_kim.cpp | 320 ++++++++++++++++++++++++------------------- src/KIM/pair_kim.h | 28 ++-- 2 files changed, 195 insertions(+), 153 deletions(-) diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 1bd21884eb..072c3a6296 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -50,7 +50,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the kim-api-v2.0.0-beta.1 (and newer) package + Designed for use with the kim-api-v2.0.0-beta.2 (and newer) package ------------------------------------------------------------------------- */ #include @@ -82,17 +82,17 @@ PairKIM::PairKIM(LAMMPS *lmp) : lmps_unique_elements(NULL), lmps_num_unique_elements(0), lmps_units(METAL), - lengthUnit(KIM::LENGTH_UNIT::unused), - energyUnit(KIM::ENERGY_UNIT::unused), - chargeUnit(KIM::CHARGE_UNIT::unused), - temperatureUnit(KIM::TEMPERATURE_UNIT::unused), - timeUnit(KIM::TIME_UNIT::unused), + lengthUnit(KIM_LENGTH_UNIT_unused), + energyUnit(KIM_ENERGY_UNIT_unused), + chargeUnit(KIM_CHARGE_UNIT_unused), + temperatureUnit(KIM_TEMPERATURE_UNIT_unused), + timeUnit(KIM_TIME_UNIT_unused), pkim(NULL), pargs(NULL), - kim_model_support_for_energy(KIM::SUPPORT_STATUS::notSupported), - kim_model_support_for_forces(KIM::SUPPORT_STATUS::notSupported), - kim_model_support_for_particleEnergy(KIM::SUPPORT_STATUS::notSupported), - kim_model_support_for_particleVirial(KIM::SUPPORT_STATUS::notSupported), + kim_model_support_for_energy(KIM_SUPPORT_STATUS_notSupported), + kim_model_support_for_forces(KIM_SUPPORT_STATUS_notSupported), + kim_model_support_for_particleEnergy(KIM_SUPPORT_STATUS_notSupported), + kim_model_support_for_particleVirial(KIM_SUPPORT_STATUS_notSupported), lmps_local_tot_num_atoms(0), kim_global_influence_distance(0.0), kim_number_of_neighbor_lists(0), @@ -205,13 +205,14 @@ void PairKIM::compute(int eflag , int vflag) lmps_maxalloc = atom->nmax; memory->create(kim_particleSpecies,lmps_maxalloc, "pair:kim_particleSpecies"); - int kimerror = pargs->SetArgumentPointer( - KIM::COMPUTE_ARGUMENT_NAME::particleSpeciesCodes, + int kimerror = KIM_ComputeArguments_SetArgumentPointerInteger(pargs, + KIM_COMPUTE_ARGUMENT_NAME_particleSpeciesCodes, kim_particleSpecies); memory->create(kim_particleContributing,lmps_maxalloc, "pair:kim_particleContributing"); - kimerror = kimerror || pargs->SetArgumentPointer( - KIM::COMPUTE_ARGUMENT_NAME::particleContributing, + kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerInteger( + pargs, + KIM_COMPUTE_ARGUMENT_NAME_particleContributing, kim_particleContributing); if (kimerror) error->all( @@ -240,7 +241,7 @@ void PairKIM::compute(int eflag , int vflag) lmps_local_tot_num_atoms = (int) nall; // compute via KIM model - kimerror = pkim->Compute(pargs); + kimerror = KIM_Model_Compute(pkim, pargs); if (kimerror) error->all(FLERR,"KIM Compute returned error"); // compute virial before reverse comm! @@ -256,8 +257,9 @@ void PairKIM::compute(int eflag , int vflag) } if ((vflag_atom) && - (kim_model_support_for_particleVirial != - KIM::SUPPORT_STATUS::notSupported)) + KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported) + ) { // flip sign and order of virial if KIM is computing it double tmp; for (int i = 0; i < nall; ++i) @@ -438,8 +440,9 @@ void PairKIM::coeff(int narg, char **arg) int kimerror; int supported; int code; - kimerror = pkim->GetSpeciesSupportAndCode( - KIM::SpeciesName(lmps_unique_elements[i]), + kimerror = KIM_Model_GetSpeciesSupportAndCode( + pkim, + KIM_SpeciesName_FromString(lmps_unique_elements[i]), &supported, &code); if (supported) @@ -545,17 +548,18 @@ double PairKIM::init_one(int i, int j) int PairKIM::pack_reverse_comm(int n, int first, double *buf) { - using namespace KIM::SUPPORT_STATUS; - int i,m,last; double *fp; fp = &(atom->f[0][0]); m = 0; last = first + n; - if ((kim_model_support_for_forces != notSupported) && + if (KIM_SupportStatus_NotEqual(kim_model_support_for_forces, + KIM_SUPPORT_STATUS_notSupported) + && ((vflag_atom == 0) || - (kim_model_support_for_particleVirial == notSupported))) + KIM_SupportStatus_Equal(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported))) { for (i = first; i < last; i++) { @@ -565,9 +569,11 @@ int PairKIM::pack_reverse_comm(int n, int first, double *buf) } return m; } - else if ((kim_model_support_for_forces != notSupported) && + else if (KIM_SupportStatus_NotEqual(kim_model_support_for_forces, + KIM_SUPPORT_STATUS_notSupported) && (vflag_atom == 1) && - (kim_model_support_for_particleVirial != notSupported)) + KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported)) { double *va=&(vatom[0][0]); for (i = first; i < last; i++) @@ -585,9 +591,12 @@ int PairKIM::pack_reverse_comm(int n, int first, double *buf) } return m; } - else if ((kim_model_support_for_forces == notSupported) && + else if (KIM_SupportStatus_Equal(kim_model_support_for_forces, + KIM_SUPPORT_STATUS_notSupported) + && (vflag_atom == 1) && - (kim_model_support_for_particleVirial != notSupported)) + KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported)) { double *va=&(vatom[0][0]); for (i = first; i < last; i++) @@ -609,16 +618,17 @@ int PairKIM::pack_reverse_comm(int n, int first, double *buf) void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) { - using namespace KIM::SUPPORT_STATUS; - int i,j,m; double *fp; fp = &(atom->f[0][0]); m = 0; - if ((kim_model_support_for_forces != notSupported) && + if (KIM_SupportStatus_NotEqual(kim_model_support_for_forces, + KIM_SUPPORT_STATUS_notSupported) + && ((vflag_atom == 0) || - (kim_model_support_for_particleVirial == notSupported))) + KIM_SupportStatus_Equal(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported))) { for (i = 0; i < n; i++) { @@ -628,9 +638,12 @@ void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) fp[3*j+2]+= buf[m++]; } } - else if ((kim_model_support_for_forces != notSupported) && + else if (KIM_SupportStatus_NotEqual(kim_model_support_for_forces, + KIM_SUPPORT_STATUS_notSupported) + && (vflag_atom == 1) && - (kim_model_support_for_particleVirial != notSupported)) + KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported)) { double *va=&(vatom[0][0]); for (i = 0; i < n; i++) @@ -648,9 +661,12 @@ void PairKIM::unpack_reverse_comm(int n, int *list, double *buf) va[j*6+5]+=buf[m++]; } } - else if ((kim_model_support_for_forces == notSupported) && + else if (KIM_SupportStatus_Equal(kim_model_support_for_forces, + KIM_SUPPORT_STATUS_notSupported) + && (vflag_atom == 1) && - (kim_model_support_for_particleVirial != notSupported)) + KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported)) { double *va=&(vatom[0][0]); for (i = 0; i < n; i++) @@ -741,11 +757,11 @@ void PairKIM::kim_free() if (kim_init_ok) { - int kimerror = pkim->ComputeArgumentsDestroy(&pargs); + int kimerror = KIM_Model_ComputeArgumentsDestroy(pkim, &pargs); if (kimerror) error->all(FLERR,"Unable to destroy Compute Arguments Object"); - KIM::Model::Destroy(&pkim); + KIM_Model_Destroy(&pkim); } kim_init_ok = false; @@ -760,8 +776,8 @@ void PairKIM::kim_init() // initialize KIM model int requestedUnitsAccepted; - kimerror = KIM::Model::Create( - KIM::NUMBERING::zeroBased, + kimerror = KIM_Model_Create( + KIM_NUMBERING_zeroBased, lengthUnit, energyUnit, chargeUnit, temperatureUnit, timeUnit, kim_modelname, &requestedUnitsAccepted, @@ -773,10 +789,10 @@ void PairKIM::kim_init() error->all(FLERR,"KIM Model did not accept the requested unit system"); } - kimerror = pkim->ComputeArgumentsCreate(&pargs); + kimerror = KIM_Model_ComputeArgumentsCreate(pkim, &pargs); if (kimerror) { - KIM::Model::Destroy(&pkim); + KIM_Model_Destroy(&pkim); error->all(FLERR,"KIM ComputeArgumentsCreate failed"); } else @@ -788,8 +804,9 @@ void PairKIM::kim_init() // determine KIM Model capabilities (used in this function below) set_kim_model_has_flags(); - pkim->GetInfluenceDistance(&kim_global_influence_distance); - pkim->GetNeighborListPointers( + KIM_Model_GetInfluenceDistance(pkim, &kim_global_influence_distance); + KIM_Model_GetNeighborListPointers( + pkim, &kim_number_of_neighbor_lists, &kim_cutoff_values, &modelWillNotRequestNeighborsOfNoncontributingParticles); @@ -800,18 +817,19 @@ void PairKIM::kim_init() } neighborLists = new NeighList*[kim_number_of_neighbor_lists]; - kimerror = pargs->SetArgumentPointer( - KIM::COMPUTE_ARGUMENT_NAME::numberOfParticles, + kimerror = KIM_ComputeArguments_SetArgumentPointerInteger(pargs, + KIM_COMPUTE_ARGUMENT_NAME_numberOfParticles, &lmps_local_tot_num_atoms); - if (kim_model_support_for_energy != KIM::SUPPORT_STATUS::notSupported) - kimerror = kimerror || pargs->SetArgumentPointer( - KIM::COMPUTE_ARGUMENT_NAME::partialEnergy, + if (KIM_SupportStatus_NotEqual(kim_model_support_for_energy, + KIM_SUPPORT_STATUS_notSupported)) + kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble(pargs, + KIM_COMPUTE_ARGUMENT_NAME_partialEnergy, &(eng_vdwl)); - kimerror = pargs->SetCallbackPointer( - KIM::COMPUTE_CALLBACK_NAME::GetNeighborList, - KIM::LANGUAGE_NAME::cpp, - reinterpret_cast(get_neigh), + kimerror = KIM_ComputeArguments_SetCallbackPointer(pargs, + KIM_COMPUTE_CALLBACK_NAME_GetNeighborList, + KIM_LANGUAGE_NAME_cpp, + reinterpret_cast(get_neigh), reinterpret_cast(this)); if (kimerror) @@ -824,14 +842,14 @@ void PairKIM::kim_init() void PairKIM::set_argument_pointers() { - using namespace KIM::COMPUTE_ARGUMENT_NAME; - using namespace KIM::SUPPORT_STATUS; - int kimerror; - kimerror = pargs->SetArgumentPointer(coordinates, &(atom->x[0][0])); + kimerror = KIM_ComputeArguments_SetArgumentPointerDouble( + pargs, KIM_COMPUTE_ARGUMENT_NAME_coordinates, &(atom->x[0][0])); // Set KIM pointer appropriately for particalEnergy - if ((kim_model_support_for_particleEnergy == required) && (eflag_atom != 1)) + if (KIM_SupportStatus_Equal(kim_model_support_for_particleEnergy, + KIM_SUPPORT_STATUS_required) + && (eflag_atom != 1)) { // reallocate per-atom energy array if necessary if (atom->nmax > maxeatom) @@ -841,33 +859,41 @@ void PairKIM::set_argument_pointers() memory->create(eatom,comm->nthreads*maxeatom,"pair:eatom"); } } - if ((kim_model_support_for_particleEnergy == optional) && (eflag_atom != 1)) + if (KIM_SupportStatus_Equal(kim_model_support_for_particleEnergy, + KIM_SUPPORT_STATUS_optional) + && (eflag_atom != 1)) { - kimerror = kimerror || pargs->SetArgumentPointer( - partialParticleEnergy, + kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( + pargs, + KIM_COMPUTE_ARGUMENT_NAME_partialParticleEnergy, reinterpret_cast(NULL)); } - else if (kim_model_support_for_particleEnergy != notSupported) + else if (KIM_SupportStatus_NotEqual(kim_model_support_for_particleEnergy, + KIM_SUPPORT_STATUS_notSupported)) { - kimerror = kimerror || pargs->SetArgumentPointer(partialParticleEnergy, - eatom); + kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( + pargs, KIM_COMPUTE_ARGUMENT_NAME_partialParticleEnergy, eatom); } // Set KIM pointer appropriately for forces - if (kim_model_support_for_forces == notSupported) + if (KIM_SupportStatus_Equal(kim_model_support_for_forces, + KIM_SUPPORT_STATUS_notSupported)) { - kimerror = kimerror || pargs->SetArgumentPointer( - partialForces, + kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( + pargs, + KIM_COMPUTE_ARGUMENT_NAME_partialForces, reinterpret_cast(NULL)); } else { - kimerror = kimerror || pargs->SetArgumentPointer(partialForces, - &(atom->f[0][0])); + kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( + pargs, KIM_COMPUTE_ARGUMENT_NAME_partialForces, &(atom->f[0][0])); } // Set KIM pointer appropriately for particleVirial - if ((kim_model_support_for_particleVirial == required) && (vflag_atom != 1)) + if (KIM_SupportStatus_Equal(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_required) + && (vflag_atom != 1)) { // reallocate per-atom virial array if necessary if (atom->nmax > maxeatom) @@ -877,16 +903,20 @@ void PairKIM::set_argument_pointers() memory->create(vatom,comm->nthreads*maxvatom,6,"pair:vatom"); } } - if ((kim_model_support_for_particleVirial == optional) && (vflag_atom != 1)) + if (KIM_SupportStatus_Equal(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_optional) + && (vflag_atom != 1)) { - kimerror = kimerror || pargs->SetArgumentPointer( - partialParticleVirial, + kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( + pargs, + KIM_COMPUTE_ARGUMENT_NAME_partialParticleVirial, reinterpret_cast(NULL)); } - else if (kim_model_support_for_particleVirial != notSupported) + else if (KIM_SupportStatus_NotEqual(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported)) { - kimerror = kimerror || pargs->SetArgumentPointer(partialParticleEnergy, - &(vatom[0][0])); + kimerror = kimerror || KIM_ComputeArguments_SetArgumentPointerDouble( + pargs, KIM_COMPUTE_ARGUMENT_NAME_partialParticleEnergy, &(vatom[0][0])); } if (kimerror) @@ -913,39 +943,39 @@ void PairKIM::set_lmps_flags() // determine unit system and set lmps_units flag if ((strcmp(update->unit_style,"real")==0)) { lmps_units = REAL; - lengthUnit = KIM::LENGTH_UNIT::A; - energyUnit = KIM::ENERGY_UNIT::kcal_mol; - chargeUnit = KIM::CHARGE_UNIT::e; - temperatureUnit = KIM::TEMPERATURE_UNIT::K; - timeUnit = KIM::TIME_UNIT::fs; + lengthUnit = KIM_LENGTH_UNIT_A; + energyUnit = KIM_ENERGY_UNIT_kcal_mol; + chargeUnit = KIM_CHARGE_UNIT_e; + temperatureUnit = KIM_TEMPERATURE_UNIT_K; + timeUnit = KIM_TIME_UNIT_fs; } else if ((strcmp(update->unit_style,"metal")==0)) { lmps_units = METAL; - lengthUnit = KIM::LENGTH_UNIT::A; - energyUnit = KIM::ENERGY_UNIT::eV; - chargeUnit = KIM::CHARGE_UNIT::e; - temperatureUnit = KIM::TEMPERATURE_UNIT::K; - timeUnit = KIM::TIME_UNIT::ps; + lengthUnit = KIM_LENGTH_UNIT_A; + energyUnit = KIM_ENERGY_UNIT_eV; + chargeUnit = KIM_CHARGE_UNIT_e; + temperatureUnit = KIM_TEMPERATURE_UNIT_K; + timeUnit = KIM_TIME_UNIT_ps; } else if ((strcmp(update->unit_style,"si")==0)) { lmps_units = SI; - lengthUnit = KIM::LENGTH_UNIT::m; - energyUnit = KIM::ENERGY_UNIT::J; - chargeUnit = KIM::CHARGE_UNIT::C; - temperatureUnit = KIM::TEMPERATURE_UNIT::K; - timeUnit = KIM::TIME_UNIT::s; + lengthUnit = KIM_LENGTH_UNIT_m; + energyUnit = KIM_ENERGY_UNIT_J; + chargeUnit = KIM_CHARGE_UNIT_C; + temperatureUnit = KIM_TEMPERATURE_UNIT_K; + timeUnit = KIM_TIME_UNIT_s; } else if ((strcmp(update->unit_style,"cgs")==0)) { lmps_units = CGS; - lengthUnit = KIM::LENGTH_UNIT::cm; - energyUnit = KIM::ENERGY_UNIT::erg; - chargeUnit = KIM::CHARGE_UNIT::statC; - temperatureUnit = KIM::TEMPERATURE_UNIT::K; - timeUnit = KIM::TIME_UNIT::s; + lengthUnit = KIM_LENGTH_UNIT_cm; + energyUnit = KIM_ENERGY_UNIT_erg; + chargeUnit = KIM_CHARGE_UNIT_statC; + temperatureUnit = KIM_TEMPERATURE_UNIT_K; + timeUnit = KIM_TIME_UNIT_s; } else if ((strcmp(update->unit_style,"electron")==0)) { lmps_units = ELECTRON; - lengthUnit = KIM::LENGTH_UNIT::Bohr; - energyUnit = KIM::ENERGY_UNIT::Hartree; - chargeUnit = KIM::CHARGE_UNIT::e; - temperatureUnit = KIM::TEMPERATURE_UNIT::K; - timeUnit = KIM::TIME_UNIT::fs; + lengthUnit = KIM_LENGTH_UNIT_Bohr; + energyUnit = KIM_ENERGY_UNIT_Hartree; + chargeUnit = KIM_CHARGE_UNIT_e; + temperatureUnit = KIM_TEMPERATURE_UNIT_K; + timeUnit = KIM_TIME_UNIT_fs; } else if ((strcmp(update->unit_style,"lj")==0)) { error->all(FLERR,"LAMMPS unit_style lj not supported by KIM models"); } else { @@ -959,75 +989,85 @@ void PairKIM::set_lmps_flags() void PairKIM::set_kim_model_has_flags() { - { // BEGIN enclosing scope for using directives - using namespace KIM::COMPUTE_ARGUMENT_NAME; - using namespace KIM::SUPPORT_STATUS; - int numberOfComputeArgumentNames; - GetNumberOfComputeArgumentNames(&numberOfComputeArgumentNames); + KIM_COMPUTE_ARGUMENT_NAME_GetNumberOfComputeArgumentNames( + &numberOfComputeArgumentNames); for (int i = 0; i < numberOfComputeArgumentNames; ++i) { - KIM::ComputeArgumentName computeArgumentName; - int kimerror = GetComputeArgumentName(i, &computeArgumentName); - KIM::SupportStatus supportStatus; - kimerror = pargs->GetArgumentSupportStatus(computeArgumentName, - &supportStatus); + KIM_ComputeArgumentName computeArgumentName; + int kimerror = KIM_COMPUTE_ARGUMENT_NAME_GetComputeArgumentName( + i, &computeArgumentName); + KIM_SupportStatus supportStatus; + kimerror = KIM_ComputeArguments_GetArgumentSupportStatus( + pargs, computeArgumentName, &supportStatus); - if (computeArgumentName == partialEnergy) + if (KIM_ComputeArgumentName_Equal(computeArgumentName, + KIM_COMPUTE_ARGUMENT_NAME_partialEnergy) + ) kim_model_support_for_energy = supportStatus; - else if (computeArgumentName == partialForces) + else if (KIM_ComputeArgumentName_Equal( + computeArgumentName, KIM_COMPUTE_ARGUMENT_NAME_partialForces) + ) kim_model_support_for_forces = supportStatus; - else if (computeArgumentName == partialParticleEnergy) + else if + (KIM_ComputeArgumentName_Equal( + computeArgumentName, + KIM_COMPUTE_ARGUMENT_NAME_partialParticleEnergy)\ + ) kim_model_support_for_particleEnergy = supportStatus; - else if (computeArgumentName == partialParticleVirial) + else if + (KIM_ComputeArgumentName_Equal( + computeArgumentName, + KIM_COMPUTE_ARGUMENT_NAME_partialParticleVirial) + ) kim_model_support_for_particleVirial = supportStatus; - else if (supportStatus == required) + else if (KIM_SupportStatus_Equal(supportStatus, KIM_SUPPORT_STATUS_required) + ) { std::stringstream msg; msg << "KIM Model requires unsupported compute argument: " - << computeArgumentName.String(); + << KIM_ComputeArgumentName_ToString(computeArgumentName); error->all(FLERR, msg.str().c_str()); } } - if (kim_model_support_for_energy == notSupported) + if (KIM_SupportStatus_Equal(kim_model_support_for_energy, + KIM_SUPPORT_STATUS_notSupported)) error->warning(FLERR,"KIM Model does not provide `partialEnergy'; " "Potential energy will be zero"); - if (kim_model_support_for_forces == notSupported) + if (KIM_SupportStatus_Equal(kim_model_support_for_forces, + KIM_SUPPORT_STATUS_notSupported)) error->warning(FLERR,"KIM Model does not provide `partialForce'; " "Forces will be zero"); - if (kim_model_support_for_particleEnergy == notSupported) + if (KIM_SupportStatus_Equal(kim_model_support_for_particleEnergy, + KIM_SUPPORT_STATUS_notSupported)) error->warning(FLERR,"KIM Model does not provide `partialParticleEnergy'; " "energy per atom will be zero"); - if (kim_model_support_for_particleVirial == notSupported) + if (KIM_SupportStatus_Equal(kim_model_support_for_particleVirial, + KIM_SUPPORT_STATUS_notSupported)) error->warning(FLERR,"KIM Model does not provide `partialParticleVirial'; " "virial per atom will be zero"); - } // END enclosing scope for using directives + int numberOfComputeCallbackNames; + KIM_COMPUTE_CALLBACK_NAME_GetNumberOfComputeCallbackNames( + &numberOfComputeCallbackNames); + for (int i = 0; i < numberOfComputeCallbackNames; ++i) + { + KIM_ComputeCallbackName computeCallbackName; + int kimerror = KIM_COMPUTE_CALLBACK_NAME_GetComputeCallbackName( + i, &computeCallbackName); + KIM_SupportStatus supportStatus; + kimerror = KIM_ComputeArguments_GetCallbackSupportStatus( + pargs, computeCallbackName, &supportStatus); - { // BEGIN enclosing scope for using directives - using namespace KIM::COMPUTE_CALLBACK_NAME; - using namespace KIM::SUPPORT_STATUS; - - int numberOfComputeCallbackNames; - GetNumberOfComputeCallbackNames(&numberOfComputeCallbackNames); - for (int i = 0; i < numberOfComputeCallbackNames; ++i) + if (KIM_SupportStatus_Equal(supportStatus, KIM_SUPPORT_STATUS_required)) { - KIM::ComputeCallbackName computeCallbackName; - int kimerror = GetComputeCallbackName(i, &computeCallbackName); - KIM::SupportStatus supportStatus; - kimerror = pargs->GetCallbackSupportStatus(computeCallbackName, - &supportStatus); - - if (supportStatus == required) - { - error->all(FLERR,"KIM Model requires unsupported compute callback"); - } + error->all(FLERR,"KIM Model requires unsupported compute callback"); } - } // END enclosing scope for using directives + } - return; + return; } diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index eef6e0345b..1b8051ea1e 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -50,7 +50,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the kim-api-v2.0.0-beta.1 (and newer) package + Designed for use with the kim-api-v2.0.0-beta.2 (and newer) package ------------------------------------------------------------------------- */ #ifdef PAIR_CLASS @@ -65,7 +65,9 @@ PairStyle(kim,PairKIM) // includes from KIM & LAMMPS class KIM_API_model; #include "pair.h" -#include "KIM_SimulatorHeaders.hpp" +extern "C" { +#include "KIM_SimulatorHeaders.h" +} #include @@ -113,20 +115,20 @@ namespace LAMMPS_NS { bool lmps_using_molecular; enum unit_sys {REAL, METAL, SI, CGS, ELECTRON}; unit_sys lmps_units; - KIM::LengthUnit lengthUnit; - KIM::EnergyUnit energyUnit; - KIM::ChargeUnit chargeUnit; - KIM::TemperatureUnit temperatureUnit; - KIM::TimeUnit timeUnit; + KIM_LengthUnit lengthUnit; + KIM_EnergyUnit energyUnit; + KIM_ChargeUnit chargeUnit; + KIM_TemperatureUnit temperatureUnit; + KIM_TimeUnit timeUnit; - KIM::Model * pkim; - KIM::ComputeArguments * pargs; + KIM_Model * pkim; + KIM_ComputeArguments * pargs; // values set in set_kim_model_has_flags(), called by kim_init() - KIM::SupportStatus kim_model_support_for_energy; - KIM::SupportStatus kim_model_support_for_forces; - KIM::SupportStatus kim_model_support_for_particleEnergy; - KIM::SupportStatus kim_model_support_for_particleVirial; + KIM_SupportStatus kim_model_support_for_energy; + KIM_SupportStatus kim_model_support_for_forces; + KIM_SupportStatus kim_model_support_for_particleEnergy; + KIM_SupportStatus kim_model_support_for_particleVirial; // values set in kim_init() bool kim_init_ok; From 9ed6f2fc4395ec962e6c9c849f71f3f329664e56 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Sun, 4 Nov 2018 20:10:04 -0600 Subject: [PATCH 035/143] Adjust lib/kim install script and settings --- lib/kim/Install.py | 55 ++++++++++++++++------------------------- lib/kim/Makefile.lammps | 17 +++++++++++-- lib/kim/README | 30 +++++++++------------- 3 files changed, 48 insertions(+), 54 deletions(-) diff --git a/lib/kim/Install.py b/lib/kim/Install.py index da0dcd2789..815827b645 100644 --- a/lib/kim/Install.py +++ b/lib/kim/Install.py @@ -9,24 +9,24 @@ import sys,os,re,subprocess # help message help = """ -Syntax from src dir: make lib-kim args="-b -v version -a kim-name" +Syntax from src dir: make lib-kim args="-b -v version -a kim-name" or: make lib-kim args="-b -a everything" or: make lib-kim args="-n -a kim-name" - or: make lib-kim args="-p /usr/local/lib/kim-api-v2 -a kim-name" -Syntax from lib dir: python Install.py -b -v version -a kim-name + or: make lib-kim args="-p /home/bob/kim -a kim-name" +Syntax from lib dir: python Install.py -b -v version -a kim-name or: python Install.py -b -a everything or: python Install.py -n -a kim-name - or: python Install.py -p /usr/local/lib/kim-api-v2 -a kim-name + or: python Install.py -p /home/bob/kim -a kim-name specify one or more options, order does not matter -v = version of KIM API library to use - default = kim-api-v2.0.0-beta.1 (current as of July 2018) + default = kim-api-v2.0.0-beta.2 (current as of November 2018) -b = download and build base KIM API library with example Models this will delete any previous installation in the current folder -n = do NOT download and build base KIM API library. Use an existing installation - -p = specify location of KIM API installation (implies -n) + -p = specify install prefix of KIM API installation (implies -n) -a = add single KIM model or model driver with kim-name to existing KIM API lib (see example below). If kim-name = everything, then rebuild KIM API library with @@ -109,7 +109,7 @@ nargs = len(args) if nargs == 0: error() thisdir = os.environ['PWD'] -version = "kim-api-v2.0.0-beta.1" +version = "kim-api-v2.0.0-beta.2" buildflag = False everythingflag = False @@ -160,13 +160,10 @@ if pathflag: error() # configure LAMMPS to use existing kim-api installation - with open("%s/Makefile.KIM_DIR" % thisdir, 'w') as mkfile: - mkfile.write("KIM_INSTALL_DIR=%s\n\n" % kimdir) - mkfile.write(".DUMMY: print_dir\n\n") - mkfile.write("print_dir:\n") - mkfile.write(" @printf $(KIM_INSTALL_DIR)\n") + with open("%s/kim-prefix.txt" % thisdir, 'w') as pffile: + pffile.write("%s" % kimdir) - print("Created %s/Makefile.KIM_DIR\n using %s" % (thisdir,kimdir)) + print("Created %s/kim-prefix.txt\n using %s" % (thisdir,kimdir)) else: kimdir = os.path.join(os.path.abspath(thisdir), "installed-" + version) @@ -182,13 +179,10 @@ if buildflag: # configure LAMMPS to use kim-api to be installed - with open("%s/Makefile.KIM_DIR" % thisdir, 'w') as mkfile: - mkfile.write("KIM_INSTALL_DIR=%s\n\n" % kimdir) - mkfile.write(".DUMMY: print_dir\n\n") - mkfile.write("print_dir:\n") - mkfile.write(" @printf $(KIM_INSTALL_DIR)\n") + with open("%s/kim-prefix.txt" % thisdir, 'w') as pffile: + pffile.write("%s" % kimdir) - print("Created %s/Makefile.KIM_DIR\n using %s" % (thisdir,kimdir)) + print("Created %s/kim-prefix.txt\n using %s" % (thisdir,kimdir)) # download entire kim-api tarball @@ -201,32 +195,25 @@ if buildflag: # configure kim-api print("Configuring kim-api ...") - cmd = 'cd "%s/%s"; ./configure --prefix="%s"' % (thisdir,version,kimdir) - subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + cmd = 'cd "%s/%s" && mkdir build && cd build && cmake .. -DCMAKE_INSTALL_PREFIX="%s" -DCMAKE_BUILD_TYPE=Release' % (thisdir,version,kimdir) + txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + if verboseflag: print(txt.decode("UTF-8")) # build kim-api print("Building kim-api ...") - cmd = 'cd "%s/%s"; make' % (thisdir,version) + cmd = 'cd "%s/%s/build" && make' % (thisdir,version) txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) if verboseflag: print(txt.decode("UTF-8")) # install kim-api print("Installing kim-api ...") - cmd = 'cd "%s/%s"; make install' % (thisdir,version) + cmd = 'cd "%s/%s/build" && make install' % (thisdir,version) txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) if verboseflag: print(txt.decode("UTF-8")) # remove source files - print("Building and installing example Models") - cmd = 'cd "%s/%s/examples"; make model-drivers-all-system' % (thisdir,version) - txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - if verboseflag: print (txt.decode("UTF-8")) - cmd = 'cd "%s/%s/examples"; make models-all-system' % (thisdir,version) - txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - if verboseflag: print (txt.decode("UTF-8")) - print("Removing kim-api source and build files ...") cmd = 'cd "%s"; rm -rf %s; rm -rf %s.txz' % (thisdir,version,version) subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) @@ -241,9 +228,9 @@ if buildflag: # add single OpenKIM model if addflag: - makefile_path = os.path.join(thisdir, "Makefile.KIM_DIR") - if os.path.isfile(makefile_path): - cmd = 'make --no-print-directory -f %s print_dir' % makefile_path + pf_path = os.path.join(thisdir, "kim-prefix.txt") + if os.path.isfile(pf_path): + cmd = 'cat %s' % pf_path kimdir = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) if not os.path.isdir(kimdir): diff --git a/lib/kim/Makefile.lammps b/lib/kim/Makefile.lammps index 1c2ab417d5..7c9fc7c5f7 100644 --- a/lib/kim/Makefile.lammps +++ b/lib/kim/Makefile.lammps @@ -13,5 +13,18 @@ # Settings that the LAMMPS build will import when this package is installed -kim_SYSINC = $(shell pkg-config --cflags libkim-api-v2) -kim_SYSLIB = $(shell pkg-config --libs libkim-api-v2) + +ifeq ($(strip $(shell pkg-config --version)),) + $(error 'pkg-config' not found, but is required to configure the KIM API) +endif + +kim_PREFIX := $(shell cat ../../lib/kim/kim-prefix.txt 2> /dev/null) +kim_PREFIX := $(if $(kim_PREFIX),$(kim_PREFIX)/lib/pkgconfig,) +kim_PREFIX := $(if $(shell printf -- "$${PKG_CONFIG_PATH}"),$(kim_PREFIX):$(shell printf -- "$${PKG_CONFIG_PATH}"),$(kim_PREFIX)) + +kim_SYSINC := $(shell export PKG_CONFIG_PATH="$(kim_PREFIX)"; pkg-config --cflags libkim-api-v2 2> /dev/null) +kim_SYSLIB := $(shell export PKG_CONFIG_PATH="$(kim_PREFIX)"; pkg-config --libs libkim-api-v2 2> /dev/null) + +ifeq ($(strip $(kim_SYSINC)),) + $(error 'pkg-config' could not find an installed KIM API library.) +endif diff --git a/lib/kim/README b/lib/kim/README index 6bcad18ce0..7cf8f9bb7d 100644 --- a/lib/kim/README +++ b/lib/kim/README @@ -3,10 +3,9 @@ is required to use the KIM package and its pair_style kim command in a LAMMPS input script. Information about the KIM project can be found at https://openkim.org. -The KIM project is lead by Ellad Tadmor and Ryan Elliott (U Minn) and -James Sethna (Cornell U). Ryan Elliott is the main developer for the -KIM API and he also maintains the code that implements the pair_style -kim command. +The KIM project is lead by Ellad Tadmor and Ryan Elliott (U Minn). +Ryan Elliott is the main developer for the KIM API and he also +maintains the code that implements the pair_style kim command. You can type "make lib-kim" from the src directory to see help on how to download and build this library via make commands, or you can @@ -21,7 +20,7 @@ Instructions: 1. Configure lammps for use with the kim-api library installed in this directory # replace X.Y.Z as appropriate here and below -$ printf "KIM_INSTALL_DIR=${PWD}/installed-kim-api-vX.Y.Z\n" > ./Makefile.KIM_DIR +$ printf "${PWD}/installed-kim-api-vX.Y.Z" > ./kim-prefix.txt 2. Download and unpack the kim-api @@ -30,26 +29,21 @@ $ tar zxvf kim-api-vX.Y.Z.txz # configure the kim-api $ cd kim-api-vX.Y.Z -$ ./configure --prefix=${PWD}/../installed-kim-api-vX.Y.Z +$ mkdir build && cd build +$ cmake .. -DCMAKE_INSTALL_PREFIX=${PWD}/../../installed-kim-api-vX.Y.Z 3. Build and install the kim-api and model $ make $ make install -4. To install the example models shipped with the kim-api - -$ cd examples -$ make model-drivers-all-system -$ make models-all-system -$ cd ../.. - -5. Remove source and build files +4. Remove source and build files +$ cd ../../ $ rm -rf kim-api-vX.Y.Z $ rm -rf kim-api-vX.Y.Z.txz -6. To add items do the following (replace the kim item name with your +5. To add items do the following (replace the kim item name with your desired value) $ source ${PWD}/kim-api-vX.Y.Z/bin/kim-api-vX-activate @@ -65,6 +59,6 @@ $ cd lammpos/src $ make yes-kim $ make g++ (or whatever target you wish) -Note that the Makefile.lammps and Makefile.KIM_DIR files in this directory -are required to allow the LAMMPS build to find the necessary KIM files. -You should not normally need to edit these files. +Note that the Makefile.lammps file in this directory is required to +allow the LAMMPS build to find the necessary KIM files. You should +not normally need to edit these files. From dd61ded311abda89440ee62de0b740684c5acc12 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Mon, 5 Nov 2018 09:24:02 -0600 Subject: [PATCH 036/143] Update cmake build to work with cmake-based KIM --- cmake/CMakeLists.txt | 46 ++++++++++++------------- cmake/Modules/FindKIM-API-V2.cmake | 55 ++++++++++++++++++++++++++++++ cmake/Modules/FindKIM.cmake | 22 ------------ 3 files changed, 78 insertions(+), 45 deletions(-) create mode 100644 cmake/Modules/FindKIM-API-V2.cmake delete mode 100644 cmake/Modules/FindKIM.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 418bdd0dba..5402ac1987 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -454,7 +454,7 @@ endif() if(PKG_LATTE) option(DOWNLOAD_LATTE "Download latte (instead of using the system's one)" OFF) if(DOWNLOAD_LATTE) - if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR + if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR message(FATAL_ERROR "For downlading LATTE you need at least cmake-3.7") endif() message(STATUS "LATTE not found - we will build our own") @@ -485,15 +485,15 @@ if(PKG_USER-SCAFACOS) ExternalProject_Add(scafacos_build URL https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz URL_MD5 bd46d74e3296bd8a444d731bb10c1738 - CONFIGURE_COMMAND /configure --prefix= - --disable-doc + CONFIGURE_COMMAND /configure --prefix= + --disable-doc --enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m --with-internal-fftw --with-internal-pfft --with-internal-pnfft - $<$:--with-pic> - FC=${CMAKE_MPI_Fortran_COMPILER} - CXX=${CMAKE_MPI_CXX_COMPILER} + $<$:--with-pic> + FC=${CMAKE_MPI_Fortran_COMPILER} + CXX=${CMAKE_MPI_CXX_COMPILER} CC=${CMAKE_MPI_C_COMPILER} F77= ) @@ -547,7 +547,7 @@ if(PKG_USER-SMD) if(DOWNLOAD_EIGEN3) include(ExternalProject) ExternalProject_Add(Eigen3_build - URL http://bitbucket.org/eigen/eigen/get/3.3.4.tar.gz + URL http://bitbucket.org/eigen/eigen/get/3.3.4.tar.gz URL_MD5 1a47e78efe365a97de0c022d127607c3 CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" ) @@ -588,23 +588,23 @@ if(PKG_KIM) if(DOWNLOAD_KIM) include(ExternalProject) ExternalProject_Add(kim_build - URL https://github.com/openkim/kim-api/archive/v1.9.5.tar.gz - URL_MD5 9f66efc128da33039e30659f36fc6d00 - BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND /configure --prefix= + URL https://s3.openkim.org/kim-api/kim-api-v2.0.0-beta.2.txz + URL_MD5 1fbdbb734059cf0dc9d807e6dd6cc8ea + BINARY_DIR build + CMAKE_ARGS -DCMAKE_CXX_COMPILER=g++-8 -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_Fortran_COMPILER=gfortran-8 -DCMAKE_INSTALL_PREFIX= -DCMAKE_BUILD_TYPE=Release ) ExternalProject_get_property(kim_build INSTALL_DIR) - set(KIM_INCLUDE_DIRS ${INSTALL_DIR}/include/kim-api-v1) - set(KIM_LIBRARIES ${INSTALL_DIR}/lib/libkim-api-v1.so) + set(KIM-API-V2_INCLUDE_DIRS ${INSTALL_DIR}/include/kim-api-v2) + set(KIM-API-V2_LIBRARIES ${INSTALL_DIR}/lib/libkim-api-v2.2${CMAKE_SHARED_LIBRARY_SUFFIX}) list(APPEND LAMMPS_DEPS kim_build) else() - find_package(KIM) - if(NOT KIM_FOUND) - message(FATAL_ERROR "KIM not found, help CMake to find it by setting KIM_LIBRARY and KIM_INCLUDE_DIR, or set DOWNLOAD_KIM=ON to download it") + find_package(KIM-API-V2) + if(NOT KIM-API-V2_FOUND) + message(FATAL_ERROR "KIM not found, help CMake to find it by setting PKG_CONFIG_PATH, or set DOWNLOAD_KIM=ON to download it") endif() endif() - list(APPEND LAMMPS_LINK_LIBS ${KIM_LIBRARIES}) - include_directories(${KIM_INCLUDE_DIRS}) + list(APPEND LAMMPS_LINK_LIBS ${KIM-API-V3_LIBRARIES}) + include_directories(${KIM-API-V2_INCLUDE_DIRS}) endif() if(PKG_MESSAGE) @@ -645,7 +645,7 @@ if(PKG_MSCG) find_package(GSL REQUIRED) option(DOWNLOAD_MSCG "Download latte (instead of using the system's one)" OFF) if(DOWNLOAD_MSCG) - if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR + if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR message(FATAL_ERROR "For downlading LATTE you need at least cmake-3.7") endif() include(ExternalProject) @@ -1020,7 +1020,7 @@ if(PKG_USER-INTEL) endif() if(PKG_GPU) - if (CMAKE_VERSION VERSION_LESS "3.1") + if (CMAKE_VERSION VERSION_LESS "3.1") message(FATAL_ERROR "For the GPU package you need at least cmake-3.1") endif() set(GPU_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/GPU) @@ -1224,7 +1224,7 @@ if(BUILD_EXE) add_dependencies(lmp ${LAMMPS_DEPS}) endif() endif() - + set_target_properties(lmp PROPERTIES OUTPUT_NAME ${LAMMPS_BINARY}) install(TARGETS lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ${LAMMPS_DOC_DIR}/lammps.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME ${LAMMPS_BINARY}.1) @@ -1361,14 +1361,14 @@ message(STATUS "<<< Build configuration >>> get_property(LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES) list (FIND LANGUAGES "Fortran" _index) if (${_index} GREATER -1) - message(STATUS "Fortran Compiler ${CMAKE_Fortran_COMPILER} + message(STATUS "Fortran Compiler ${CMAKE_Fortran_COMPILER} Type ${CMAKE_Fortran_COMPILER_ID} Version ${CMAKE_Fortran_COMPILER_VERSION} Fortran Flags ${CMAKE_Fortran_FLAGS} ${CMAKE_Fortran_FLAGS_${BTYPE}}") endif() list (FIND LANGUAGES "C" _index) if (${_index} GREATER -1) - message(STATUS "C Compiler ${CMAKE_C_COMPILER} + message(STATUS "C Compiler ${CMAKE_C_COMPILER} Type ${CMAKE_C_COMPILER_ID} Version ${CMAKE_C_COMPILER_VERSION} C Flags ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BTYPE}}") diff --git a/cmake/Modules/FindKIM-API-V2.cmake b/cmake/Modules/FindKIM-API-V2.cmake new file mode 100644 index 0000000000..0cc947e139 --- /dev/null +++ b/cmake/Modules/FindKIM-API-V2.cmake @@ -0,0 +1,55 @@ +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the Common Development +# and Distribution License Version 1.0 (the "License"). +# +# You can obtain a copy of the license at +# http://www.opensource.org/licenses/CDDL-1.0. See the License for the +# specific language governing permissions and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each file and +# include the License file in a prominent location with the name LICENSE.CDDL. +# If applicable, add the following below this CDDL HEADER, with the fields +# enclosed by brackets "[]" replaced with your own identifying information: +# +# Portions Copyright (c) [yyyy] [name of copyright owner]. All rights reserved. +# +# CDDL HEADER END +# + +# +# Copyright (c) 2013--2018, Regents of the University of Minnesota. +# All rights reserved. +# +# Contributors: +# Richard Berger +# Christoph Junghans +# Ryan S. Elliott +# + +# +# Release: This file is part of the kim-api.git repository. +# + + +# - Find KIM-API-V2 +# +# sets standard pkg_check_modules variables plus: +# +# KIM-API-V2-CMAKE_C_COMPILER +# KIM-API-V2-CMAKE_CXX_COMPILER +# KIM-API-V2-CMAKE_Fortran_COMPILER +# +find_package(PkgConfig REQUIRED) +include(FindPackageHandleStandardArgs) + +pkg_check_modules(KIM-API-V2 REQUIRED libkim-api-v2>=2.0) + +pkg_get_variable(KIM-API-V2-CMAKE_C_COMPILER libkim-api-v2 CMAKE_C_COMPILER) +pkg_get_variable(KIM-API-V2-CMAKE_CXX_COMPILER libkim-api-v2 CMAKE_CXX_COMPILER) +pkg_get_variable(KIM-API-V2_CMAKE_Fortran_COMPILER libkim-api-v2 CMAKE_Fortran_COMPILER) + +# handle the QUIETLY and REQUIRED arguments and set KIM-API-V2_FOUND to TRUE +# if all listed variables are TRUE +find_package_handle_standard_args(KIM-API-V2 REQUIRED_VARS KIM-API-V2_LIBRARIES) diff --git a/cmake/Modules/FindKIM.cmake b/cmake/Modules/FindKIM.cmake deleted file mode 100644 index e29f26e01d..0000000000 --- a/cmake/Modules/FindKIM.cmake +++ /dev/null @@ -1,22 +0,0 @@ -# - Find kim -# Find the native KIM headers and libraries. -# -# KIM_INCLUDE_DIRS - where to find kim.h, etc. -# KIM_LIBRARIES - List of libraries when using kim. -# KIM_FOUND - True if kim found. -# - -find_path(KIM_INCLUDE_DIR KIM_SimulatorHeaders.hpp PATH_SUFFIXES kim-api-v2) - -find_library(KIM_LIBRARY NAMES kim-api-v2) - -set(KIM_LIBRARIES ${KIM_LIBRARY}) -set(KIM_INCLUDE_DIRS ${KIM_INCLUDE_DIR}) - -include(FindPackageHandleStandardArgs) -# handle the QUIETLY and REQUIRED arguments and set KIM_FOUND to TRUE -# if all listed variables are TRUE - -find_package_handle_standard_args(KIM DEFAULT_MSG KIM_LIBRARY KIM_INCLUDE_DIR) - -mark_as_advanced(KIM_INCLUDE_DIR KIM_LIBRARY ) From 29ae88e309fd02a3b4fbb3f882f498258096a794 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Mon, 5 Nov 2018 09:37:35 -0600 Subject: [PATCH 037/143] Update docs for KIM --- doc/src/Build_extras.txt | 44 ++++++++++++------------- doc/src/Errors_messages.txt | 8 ----- doc/src/Packages_details.txt | 63 +++++++++++++++++------------------- doc/src/pair_kim.txt | 2 +- 4 files changed, 51 insertions(+), 66 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index d256a1afc8..5f4ad6ee69 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -63,7 +63,7 @@ available on your system. If CMake cannot find the library, you can set these variables: --D ZLIB_INCLUDE_DIR=path # path to zlib.h header file +-D ZLIB_INCLUDE_DIR=path # path to zlib.h header file -D ZLIB_LIBRARIES=path # path to libz.a (.so) file :pre [Traditional make]: @@ -150,7 +150,7 @@ package uses the library settings from the lib/gpu/Makefile.machine used to build the GPU library. :line - + KIM package :h4,link(kim) To build with this package, the KIM library must be downloaded and @@ -176,16 +176,12 @@ package?" page. [CMake build]: --D DOWNLOAD_KIM=value # download OpenKIM API v1 for build, value = no (default) or yes --D KIM_LIBRARY=path # KIM library file (only needed if a custom location) --D KIM_INCLUDE_DIR=path # KIM include directory (only needed if a custom location) :pre +-D DOWNLOAD_KIM=value # download OpenKIM API v1 for build, value = no (default) or yes :pre If DOWNLOAD_KIM is set, the KIM library will be downloaded and built inside the CMake build directory. If the KIM library is already on -your system (in a location CMake cannot find it), KIM_LIBRARY is the -filename (plus path) of the KIM library file, not the directory the -library file is in. KIM_INCLUDE_DIR is the directory the KIM include -file is in. +your system (in a location CMake cannot find it), set the PKG_CONFIG_PATH +environment variable so that libkim-api-v2 can be found. [Traditional make]: @@ -199,8 +195,8 @@ make lib-kim args="-b " # (re-)install KIM API lib with only example models make lib-kim args="-b -a Glue_Ercolessi_Adams_Al__MO_324507536345_001" # ditto plus one model make lib-kim args="-b -a everything" # install KIM API lib with all models make lib-kim args="-n -a EAM_Dynamo_Ackland_W__MO_141627196590_002" # add one model or model driver -make lib-kim args="-p /usr/local/kim-api" # use an existing KIM API installation at the provided location -make lib-kim args="-p /usr/local/kim-api -a EAM_Dynamo_Ackland_W__MO_141627196590_002" # ditto but add one model or driver :pre +make lib-kim args="-p /usr/local" # use an existing KIM API installation at the provided location +make lib-kim args="-p /usr/local -a EAM_Dynamo_Ackland_W__MO_141627196590_002" # ditto but add one model or driver :pre :line @@ -254,7 +250,7 @@ For NVIDIA GPUs using CUDA, set these 4 variables: -D KOKKOS_ARCH="archCPU;archGPU" # archCPU = CPU from list above that is hosting the GPU # archGPU = GPU from list above -D KOKKOS_ENABLE_CUDA=yes --D KOKKOS_ENABLE_OPENMP=yes +-D KOKKOS_ENABLE_OPENMP=yes -D CMAKE_CXX_COMPILER=wrapper # wrapper = full path to Cuda nvcc wrapper :pre The wrapper value is the Cuda nvcc compiler wrapper provided in the @@ -296,7 +292,7 @@ export OMPI_CXX = $(KOKKOS_ABSOLUTE_PATH)/config/nvcc_wrapper CC = mpicxx :pre :line - + LATTE package :h4,link(latte) To build with this package, you must download and build the LATTE @@ -324,7 +320,7 @@ args: make lib-latte # print help message make lib-latte args="-b" # download and build in lib/latte/LATTE-master make lib-latte args="-p $HOME/latte" # use existing LATTE installation in $HOME/latte -make lib-latte args="-b -m gfortran" # download and build in lib/latte and +make lib-latte args="-b -m gfortran" # download and build in lib/latte and # copy Makefile.lammps.gfortran to Makefile.lammps :pre @@ -335,7 +331,7 @@ also check that the Makefile.lammps file you create is appropriate for the compiler you use on your system to build LATTE. :line - + MEAM package :h4,link(meam) NOTE: the use of the MEAM package is discouraged, as it has been @@ -378,7 +374,7 @@ EXTRAMAKE variable to specify a corresponding Makefile.lammps.machine file. :line - + MESSAGE package :h4,link(message) This package can optionally include support for messaging via sockets, @@ -407,7 +403,7 @@ existing Makefile.lammps.* and has settings to link with the ZeroMQ library if requested in the build. :line - + MSCG package :h4,link(mscg) To build with this package, you must download and build the MS-CG @@ -419,7 +415,7 @@ lib/mscg/README and MSCG/Install files for more details. [CMake build]: -D DOWNLOAD_MSCG=value # download MSCG for build, value = no (default) or yes --D MSCG_LIBRARY=path # MSCG library file (only needed if a custom location) +-D MSCG_LIBRARY=path # MSCG library file (only needed if a custom location) -D MSCG_INCLUDE_DIR=path # MSCG include directory (only needed if a custom location) :pre If DOWNLOAD_MSCG is set, the MSCG library will be downloaded and built @@ -464,7 +460,7 @@ line of your Makefile.machine. See src/MAKE/OPTIONS/Makefile.opt for an example. :line - + POEMS package :h4,link(poems) [CMake build]: @@ -493,7 +489,7 @@ for your system, which should define an EXTRAMAKE variable to specify a corresponding Makefile.lammps.machine file. :line - + PYTHON package :h4,link(python) Building with the PYTHON package requires you have a Python shared @@ -520,7 +516,7 @@ Makefile.lammps.* file (and copy it to Makefile.lammps) if the LAMMPS build fails. :line - + REAX package :h4,link(reax) NOTE: the use of the REAX package and its "pair_style @@ -570,7 +566,7 @@ library"_voro-home. [CMake build]: -D DOWNLOAD_VORO=value # download Voro++ for build, value = no (default) or yes --D VORO_LIBRARY=path # Voro++ library file (only needed if at custom location) +-D VORO_LIBRARY=path # Voro++ library file (only needed if at custom location) -D VORO_INCLUDE_DIR=path # Voro++ include directory (only needed if at custom location) :pre If DOWNLOAD_VORO is set, the Voro++ library will be downloaded and @@ -869,7 +865,7 @@ Quantum ESPRESSO known to work with this QM/MM interface was version [CMake build]: The CMake build system currently does not support building the full -QM/MM-capable hybrid executable of LAMMPS and QE called pwqmmm.x. +QM/MM-capable hybrid executable of LAMMPS and QE called pwqmmm.x. You must use the traditional make build for this package. [Traditional make]: @@ -939,7 +935,7 @@ Coulomb solver library"_scafacos-home [CMake build]: -D DOWNLOAD_SCAFACOS=value # download ScaFaCoS for build, value = no (default) or yes --D SCAFACOS_LIBRARY=path # ScaFaCos library file (only needed if at custom location) +-D SCAFACOS_LIBRARY=path # ScaFaCos library file (only needed if at custom location) -D SCAFACOS_INCLUDE_DIR=path # ScaFaCoS include directory (only needed if at custom location) :pre If DOWNLOAD_SCAFACOS is set, the ScaFaCoS library will be downloaded diff --git a/doc/src/Errors_messages.txt b/doc/src/Errors_messages.txt index 695b949f7e..3dc93044c8 100644 --- a/doc/src/Errors_messages.txt +++ b/doc/src/Errors_messages.txt @@ -6994,12 +6994,6 @@ The atom style defined does not have this attribute. :dd The atom style defined does not have these attributes. :dd -{KIM neighbor iterator exceeded range} :dt - -This should not happen. It likely indicates a bug -in the KIM implementation of the interatomic potential -where it is requesting neighbors incorrectly. :dd - {KOKKOS package does not yet support comm_style tiled} :dt Self-explanatory. :dd @@ -10193,8 +10187,6 @@ Self-explanatory. :dd {Unrecognized virial argument in pair_style command} :dt -Only two options are supported: LAMMPSvirial and KIMvirial :dd - {Unsupported mixing rule in kspace_style ewald/disp} :dt Only geometric mixing is supported. :dd diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 031858e846..7365e986e5 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -203,7 +203,7 @@ available on your system. [Author:] Axel Kohlmeyer (Temple U). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -284,7 +284,7 @@ also the "KOKKOS"_#PKG-KOKKOS package, which has GPU-enabled styles. [Authors:] Mike Brown (Intel) while at Sandia and ORNL and Trung Nguyen (Northwestern U) while at ORNL. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -345,14 +345,13 @@ system. Information about the KIM project can be found at its website: https://openkim.org. The KIM project is led by Ellad Tadmor and Ryan -Elliott (U Minnesota) and James Sethna (Cornell U). +Elliott (U Minnesota). [Authors:] Ryan Elliott (U Minnesota) is the main developer for the KIM API which the "pair_style kim"_pair_kim.html command uses. He -developed the pair style in collaboration with Valeriu Smirichinski (U -Minnesota). +developed the pair style. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -398,7 +397,7 @@ which was developed by Carter Edwards, Christian Trott, and others at Sandia, and which is included in the LAMMPS distribution in lib/kokkos. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -546,7 +545,7 @@ and user interface. [Author:] Greg Wagner (Northwestern U) while at Sandia. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -679,7 +678,7 @@ system. library was developed by Jacob Wagner in Greg Voth's group at the University of Chicago. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -711,7 +710,7 @@ have styles optimized for CPU performance. [Authors:] James Fischer (High Performance Technologies), David Richie, and Vincent Natoli (Stone Ridge Technolgy). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -768,7 +767,7 @@ connections at hinge points. [Author:] Rudra Mukherjee (JPL) while at RPI. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -800,7 +799,7 @@ shared library available on your system, which needs to be a Python 2 version, 2.6 or later. Python 3 is not yet supported. See the lib/python/README for more details. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -848,7 +847,7 @@ as bonds are created and destroyed. [Author:] Aidan Thompson (Sandia). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1021,7 +1020,7 @@ system. library was written by Chris Rycroft (Harvard U) while at UC Berkeley and LBNL. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1048,7 +1047,7 @@ atomic information to continuum fields. [Authors:] Reese Jones, Jeremy Templeton, Jon Zimmerman (Sandia). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1075,7 +1074,7 @@ model. [Author:] Ilya Valuev (JIHT, Russia). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1098,7 +1097,7 @@ This package provides "fix bocs"_fix_bocs.html, a modified version of "fix npt"_fix_nh.html which includes the pressure correction to the barostat as outlined in: -N. J. H. Dunn and W. G. Noid, "Bottom-up coarse-grained models that +N. J. H. Dunn and W. G. Noid, "Bottom-up coarse-grained models that accurately describe the structure, pressure, and compressibility of molecular liquids," J. Chem. Phys. 143, 243148 (2015). @@ -1183,7 +1182,7 @@ and Jerome Henin (LISM, CNRS, Marseille, France), originally for the NAMD MD code, but with portability in mind. Axel Kohlmeyer (Temple U) provided the interface to LAMMPS. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1363,7 +1362,7 @@ system. [Author:] Pierre de Buyl (KU Leuven) created both the package and the H5MD format. -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1401,7 +1400,7 @@ NOTE: the USER-INTEL package contains styles that require using the [Author:] Mike Brown (Intel). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1571,17 +1570,17 @@ USER-MOFFF package :link(PKG-USER-MOFFF),h4 [Contents:] Pair, angle and improper styles needed to employ the MOF-FF -force field by Schmid and coworkers with LAMMPS. +force field by Schmid and coworkers with LAMMPS. MOF-FF is a first principles derived force field with the primary aim -to simulate MOFs and related porous framework materials, using spherical +to simulate MOFs and related porous framework materials, using spherical Gaussian charges. It is described in S. Bureekaew et al., Phys. Stat. Sol. B 2013, 250, 1128-1141. -For the usage of MOF-FF see the example in the example directory as +For the usage of MOF-FF see the example in the example directory as well as the "MOF+"_MOFplus website. :link(MOFplus,https://www.mofplus.org/content/show/MOF-FF) -[Author:] Hendrik Heenen (Technical U of Munich), +[Author:] Hendrik Heenen (Technical U of Munich), Rochus Schmid (Ruhr-University Bochum). [Supporting info:] @@ -1622,7 +1621,7 @@ at [Author:] Axel Kohlmeyer (Temple U). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1662,7 +1661,7 @@ tools: [Author:] Lars Pastewka (Karlsruhe Institute of Technology). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1706,7 +1705,7 @@ See src/MAKE/OPTIONS/Makefile.omp for an example. Once you have an appropriate Makefile.machine, you can install/un-install the package and build LAMMPS in the usual manner: -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1785,7 +1784,7 @@ without changes to LAMMPS itself. [Author:] Axel Kohlmeyer (Temple U). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1843,7 +1842,7 @@ on your system. [Author:] Albert Bartok (Cambridge University) -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -1937,7 +1936,7 @@ specified as surface geometries from *.STL files. [Author:] Georg Ganzenmuller (Fraunhofer-Institute for High-Speed Dynamics, Ernst Mach Institute, Germany). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -2063,7 +2062,7 @@ system. [Authors:] Richard Berger (JKU) and Daniel Queteschiner (DCS Computing). -[Install:] +[Install:] This package has "specific installation instructions"_Build_extras.html#gpu on the "Build @@ -2075,5 +2074,3 @@ src/USER-VTK: filenames -> commands src/USER-VTK/README lib/vtk/README "dump vtk"_dump_vtk.html :ul - - diff --git a/doc/src/pair_kim.txt b/doc/src/pair_kim.txt index 8bd6aa9937..0c05913117 100644 --- a/doc/src/pair_kim.txt +++ b/doc/src/pair_kim.txt @@ -115,7 +115,7 @@ LAMMPS was built with that package. See the "Build package"_Build_package.html doc page for more info. This current version of pair_style kim is compatible with the -kim-api package version 2.0.0-beta.1 and higher. +kim-api package version 2.0.0-beta.2 and higher. [Related commands:] From 4a4147e0e4983a871bc17c510abd39f0b77e80e3 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Mon, 5 Nov 2018 11:15:07 -0600 Subject: [PATCH 038/143] Remove hard-coded compiler versions for KIM in CMake --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 5402ac1987..670313dadd 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -591,7 +591,7 @@ if(PKG_KIM) URL https://s3.openkim.org/kim-api/kim-api-v2.0.0-beta.2.txz URL_MD5 1fbdbb734059cf0dc9d807e6dd6cc8ea BINARY_DIR build - CMAKE_ARGS -DCMAKE_CXX_COMPILER=g++-8 -DCMAKE_C_COMPILER=gcc-8 -DCMAKE_Fortran_COMPILER=gfortran-8 -DCMAKE_INSTALL_PREFIX= -DCMAKE_BUILD_TYPE=Release + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_BUILD_TYPE=Release ) ExternalProject_get_property(kim_build INSTALL_DIR) set(KIM-API-V2_INCLUDE_DIRS ${INSTALL_DIR}/include/kim-api-v2) From 81e79ec884ae2d88d0e5ee8357d6743b526b3abb Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Mon, 5 Nov 2018 15:39:10 -0600 Subject: [PATCH 039/143] Have KIM use LAMMPS specified compilers --- cmake/CMakeLists.txt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 670313dadd..3e6c57c667 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -586,12 +586,18 @@ endif() if(PKG_KIM) option(DOWNLOAD_KIM "Download kim-api (instead of using the system's one)" OFF) if(DOWNLOAD_KIM) + enable_language(C) + enable_language(Fortran) include(ExternalProject) ExternalProject_Add(kim_build URL https://s3.openkim.org/kim-api/kim-api-v2.0.0-beta.2.txz URL_MD5 1fbdbb734059cf0dc9d807e6dd6cc8ea BINARY_DIR build - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_BUILD_TYPE=Release + CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} + -DCMAKE_INSTALL_PREFIX= + -DCMAKE_BUILD_TYPE=Release ) ExternalProject_get_property(kim_build INSTALL_DIR) set(KIM-API-V2_INCLUDE_DIRS ${INSTALL_DIR}/include/kim-api-v2) @@ -603,7 +609,7 @@ if(PKG_KIM) message(FATAL_ERROR "KIM not found, help CMake to find it by setting PKG_CONFIG_PATH, or set DOWNLOAD_KIM=ON to download it") endif() endif() - list(APPEND LAMMPS_LINK_LIBS ${KIM-API-V3_LIBRARIES}) + list(APPEND LAMMPS_LINK_LIBS ${KIM-API-V2_LIBRARIES}) include_directories(${KIM-API-V2_INCLUDE_DIRS}) endif() From 03b1129abde8d85fe20dd450a43976aca8fe623a Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 14 Nov 2018 13:11:47 -0500 Subject: [PATCH 040/143] Update pair_kim to check for ModelRoutine requirements Also fixup cmake settings for PKG_KIM --- cmake/CMakeLists.txt | 2 +- src/KIM/pair_kim.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++++ src/KIM/pair_kim.h | 1 + 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 3e6c57c667..1e0d207a7e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -609,7 +609,7 @@ if(PKG_KIM) message(FATAL_ERROR "KIM not found, help CMake to find it by setting PKG_CONFIG_PATH, or set DOWNLOAD_KIM=ON to download it") endif() endif() - list(APPEND LAMMPS_LINK_LIBS ${KIM-API-V2_LIBRARIES}) + list(APPEND LAMMPS_LINK_LIBS "${KIM-API-V2_LDFLAGS}") include_directories(${KIM-API-V2_INCLUDE_DIRS}) endif() diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 072c3a6296..6981b028b2 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -789,6 +789,14 @@ void PairKIM::kim_init() error->all(FLERR,"KIM Model did not accept the requested unit system"); } + // check that the model does not require unknown capabilities + kimerror = check_for_routine_compatibility(); + if (kimerror) + { + error->all(FLERR, + "KIM Model requires unknown Routines. Unable to proceed."); + } + kimerror = KIM_Model_ComputeArgumentsCreate(pkim, &pargs); if (kimerror) { @@ -987,6 +995,49 @@ void PairKIM::set_lmps_flags() /* ---------------------------------------------------------------------- */ +int PairKIM::check_for_routine_compatibility() +{ + /* Check that we know about all required routines */ + int numberOfModelRoutineNames; + KIM_MODEL_ROUTINE_NAME_GetNumberOfModelRoutineNames( + &numberOfModelRoutineNames); + for (int i = 0; i < numberOfModelRoutineNames; ++i) + { + KIM_ModelRoutineName modelRoutineName; + KIM_MODEL_ROUTINE_NAME_GetModelRoutineName(i, &modelRoutineName); + + int present; + int required; + int error = KIM_Model_IsRoutinePresent( + pkim, modelRoutineName, &present, &required); + if (error) { return true; } + + if ((present == true) && (required == true)) + { + if (!(KIM_ModelRoutineName_Equal(modelRoutineName, + KIM_MODEL_ROUTINE_NAME_Create) + || KIM_ModelRoutineName_Equal( + modelRoutineName, + KIM_MODEL_ROUTINE_NAME_ComputeArgumentsCreate) + || KIM_ModelRoutineName_Equal(modelRoutineName, + KIM_MODEL_ROUTINE_NAME_Compute) + || KIM_ModelRoutineName_Equal(modelRoutineName, + KIM_MODEL_ROUTINE_NAME_Refresh) + || KIM_ModelRoutineName_Equal( + modelRoutineName, + KIM_MODEL_ROUTINE_NAME_ComputeArgumentsDestroy) + || KIM_ModelRoutineName_Equal(modelRoutineName, + KIM_MODEL_ROUTINE_NAME_Destroy))) + { return true; } + } + } + + /* everything is good */ + return false; +} + +/* ---------------------------------------------------------------------- */ + void PairKIM::set_kim_model_has_flags() { int numberOfComputeArgumentNames; diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index 1b8051ea1e..a23d5cd317 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -158,6 +158,7 @@ namespace LAMMPS_NS { virtual void set_argument_pointers(); virtual void set_lmps_flags(); virtual void set_kim_model_has_flags(); + virtual int check_for_routine_compatibility(); // static methods used as callbacks from KIM static int get_neigh( void const * const dataObject, From b068690e1392e0c5d6ff0c7faf2293ceab9a40fc Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 12 Dec 2018 16:21:54 -0600 Subject: [PATCH 041/143] Update for kim-api beta.3 release --- cmake/CMakeLists.txt | 6 +- .../log.11Jul2018.kim.lj.newton-off.ubuntu.1 | 68 ----------------- .../log.11Jul2018.kim.lj.newton-off.ubuntu.4 | 74 ------------------- .../log.11Jul2018.kim.lj.newton-on.ubuntu.1 | 68 ----------------- .../log.11Jul2018.kim.lj.newton-on.ubuntu.4 | 74 ------------------- ... log.12Dec2018.in.kim.lj.lmp.newton-off.1} | 37 ++++------ ... log.12Dec2018.in.kim.lj.lmp.newton-off.4} | 39 ++++------ ...> log.12Dec2018.in.kim.lj.lmp.newton-on.1} | 37 ++++------ ...> log.12Dec2018.in.kim.lj.lmp.newton-on.4} | 39 ++++------ .../kim/log.12Dec2018.in.kim.lj.newton-off.1 | 59 +++++++++++++++ .../kim/log.12Dec2018.in.kim.lj.newton-off.4 | 65 ++++++++++++++++ .../kim/log.12Dec2018.in.kim.lj.newton-on.1 | 59 +++++++++++++++ .../kim/log.12Dec2018.in.kim.lj.newton-on.4 | 65 ++++++++++++++++ lib/kim/.gitignore | 3 +- lib/kim/Install.py | 8 +- 15 files changed, 310 insertions(+), 391 deletions(-) delete mode 100644 examples/kim/log.11Jul2018.kim.lj.newton-off.ubuntu.1 delete mode 100644 examples/kim/log.11Jul2018.kim.lj.newton-off.ubuntu.4 delete mode 100644 examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.1 delete mode 100644 examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.4 rename examples/kim/{log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.1 => log.12Dec2018.in.kim.lj.lmp.newton-off.1} (56%) rename examples/kim/{log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.4 => log.12Dec2018.in.kim.lj.lmp.newton-off.4} (55%) rename examples/kim/{log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.1 => log.12Dec2018.in.kim.lj.lmp.newton-on.1} (56%) rename examples/kim/{log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.4 => log.12Dec2018.in.kim.lj.lmp.newton-on.4} (55%) create mode 100644 examples/kim/log.12Dec2018.in.kim.lj.newton-off.1 create mode 100644 examples/kim/log.12Dec2018.in.kim.lj.newton-off.4 create mode 100644 examples/kim/log.12Dec2018.in.kim.lj.newton-on.1 create mode 100644 examples/kim/log.12Dec2018.in.kim.lj.newton-on.4 diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 1e0d207a7e..4abbeb4732 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -590,8 +590,8 @@ if(PKG_KIM) enable_language(Fortran) include(ExternalProject) ExternalProject_Add(kim_build - URL https://s3.openkim.org/kim-api/kim-api-v2.0.0-beta.2.txz - URL_MD5 1fbdbb734059cf0dc9d807e6dd6cc8ea + URL https://s3.openkim.org/kim-api/kim-api-v2-2.0.0-beta.3.txz + URL_MD5 67c103a00e84865848d004837262c76e BINARY_DIR build CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} @@ -601,7 +601,7 @@ if(PKG_KIM) ) ExternalProject_get_property(kim_build INSTALL_DIR) set(KIM-API-V2_INCLUDE_DIRS ${INSTALL_DIR}/include/kim-api-v2) - set(KIM-API-V2_LIBRARIES ${INSTALL_DIR}/lib/libkim-api-v2.2${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(KIM-API-V2_LDFLAGS ${INSTALL_DIR}/lib/libkim-api-v2.2${CMAKE_SHARED_LIBRARY_SUFFIX}) list(APPEND LAMMPS_DEPS kim_build) else() find_package(KIM-API-V2) diff --git a/examples/kim/log.11Jul2018.kim.lj.newton-off.ubuntu.1 b/examples/kim/log.11Jul2018.kim.lj.newton-off.ubuntu.1 deleted file mode 100644 index c8c1919de5..0000000000 --- a/examples/kim/log.11Jul2018.kim.lj.newton-off.ubuntu.1 +++ /dev/null @@ -1,68 +0,0 @@ --------------------------------------------------------------------------- -[[5713,1],0]: A high-performance Open MPI point-to-point messaging module -was unable to find any relevant network interfaces: - -Module: OpenFabrics (openib) - Host: ubuntu-artful - -Another transport will be used instead, although this may result in -lower performance. - -NOTE: You can disable this warning by setting the MCA parameter -btl_base_warn_component_unused to 0. --------------------------------------------------------------------------- -LAMMPS (22 Jun 2018) -Lattice spacing in x,y,z = 4.43 4.43 4.43 -Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) - 1 by 1 by 1 MPI processor grid -Created 32000 atoms - Time spent = 0.00256546 secs -WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) -WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 8.45 - ghost atom cutoff = 8.45 - binsize = 4.225, bins = 21 21 21 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair kim, perpetual - attributes: half, newton off, cut 8.45 - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard -Setting up Verlet run ... - Unit style : metal - Current step : 0 - Time step : 0.001 -Per MPI rank memory allocation (min/avg/max) = 21.26 | 21.26 | 21.26 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 200 6290.8194 0 7118.0584 129712.25 - 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 2.69522 on 1 procs for 100 steps with 32000 atoms - -Performance: 3.206 ns/day, 7.487 hours/ns, 37.103 timesteps/s -99.8% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.3655 | 2.3655 | 2.3655 | 0.0 | 87.77 -Neigh | 0.28659 | 0.28659 | 0.28659 | 0.0 | 10.63 -Comm | 0.0061924 | 0.0061924 | 0.0061924 | 0.0 | 0.23 -Output | 0.00034901 | 0.00034901 | 0.00034901 | 0.0 | 0.01 -Modify | 0.025061 | 0.025061 | 0.025061 | 0.0 | 0.93 -Other | | 0.01157 | | | 0.43 - -Nlocal: 32000 ave 32000 max 32000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 19911 ave 19911 max 19911 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 2.3705e+06 ave 2.3705e+06 max 2.3705e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 2370499 -Ave neighs/atom = 74.0781 -Neighbor list builds = 3 -Dangerous builds = 0 -Total wall time: 0:00:02 diff --git a/examples/kim/log.11Jul2018.kim.lj.newton-off.ubuntu.4 b/examples/kim/log.11Jul2018.kim.lj.newton-off.ubuntu.4 deleted file mode 100644 index c8d5faeb20..0000000000 --- a/examples/kim/log.11Jul2018.kim.lj.newton-off.ubuntu.4 +++ /dev/null @@ -1,74 +0,0 @@ --------------------------------------------------------------------------- -[[5673,1],0]: A high-performance Open MPI point-to-point messaging module -was unable to find any relevant network interfaces: - -Module: OpenFabrics (openib) - Host: ubuntu-artful - -Another transport will be used instead, although this may result in -lower performance. - -NOTE: You can disable this warning by setting the MCA parameter -btl_base_warn_component_unused to 0. --------------------------------------------------------------------------- -LAMMPS (22 Jun 2018) -Lattice spacing in x,y,z = 4.43 4.43 4.43 -Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) - 1 by 2 by 2 MPI processor grid -Created 32000 atoms - Time spent = 0.00215514 secs -WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) -WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) -WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) -WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) -WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) -WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) -WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) -WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 8.45 - ghost atom cutoff = 8.45 - binsize = 4.225, bins = 21 21 21 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair kim, perpetual - attributes: half, newton off, cut 8.45 - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard -Setting up Verlet run ... - Unit style : metal - Current step : 0 - Time step : 0.001 -Per MPI rank memory allocation (min/avg/max) = 8.528 | 8.528 | 8.528 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 200 6290.8194 0 7118.0584 129712.25 - 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 3.06157 on 4 procs for 100 steps with 32000 atoms - -Performance: 2.822 ns/day, 8.504 hours/ns, 32.663 timesteps/s -24.4% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.9964 | 2.0369 | 2.084 | 2.5 | 66.53 -Neigh | 0.25048 | 0.27467 | 0.29605 | 3.1 | 8.97 -Comm | 0.66611 | 0.71603 | 0.74496 | 3.6 | 23.39 -Output | 0.00048383 | 0.00070085 | 0.00098836 | 0.0 | 0.02 -Modify | 0.0064885 | 0.0065907 | 0.006806 | 0.2 | 0.22 -Other | | 0.02664 | | | 0.87 - -Nlocal: 8000 ave 8018 max 7967 min -Histogram: 1 0 0 0 0 0 1 0 0 2 -Nghost: 9131 ave 9164 max 9113 min -Histogram: 2 0 0 1 0 0 0 0 0 1 -Neighs: 630904 ave 632094 max 628209 min -Histogram: 1 0 0 0 0 0 0 1 0 2 - -Total # of neighbors = 2523614 -Ave neighs/atom = 78.8629 -Neighbor list builds = 3 -Dangerous builds = 0 -Total wall time: 0:00:03 diff --git a/examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.1 b/examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.1 deleted file mode 100644 index 21af1a6299..0000000000 --- a/examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.1 +++ /dev/null @@ -1,68 +0,0 @@ --------------------------------------------------------------------------- -[[5690,1],0]: A high-performance Open MPI point-to-point messaging module -was unable to find any relevant network interfaces: - -Module: OpenFabrics (openib) - Host: ubuntu-artful - -Another transport will be used instead, although this may result in -lower performance. - -NOTE: You can disable this warning by setting the MCA parameter -btl_base_warn_component_unused to 0. --------------------------------------------------------------------------- -LAMMPS (22 Jun 2018) -Lattice spacing in x,y,z = 4.43 4.43 4.43 -Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) - 1 by 1 by 1 MPI processor grid -Created 32000 atoms - Time spent = 0.00258302 secs -WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) -WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 8.45 - ghost atom cutoff = 8.45 - binsize = 4.225, bins = 21 21 21 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair kim, perpetual - attributes: half, newton off, cut 8.45 - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard -Setting up Verlet run ... - Unit style : metal - Current step : 0 - Time step : 0.001 -Per MPI rank memory allocation (min/avg/max) = 20.87 | 20.87 | 20.87 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 200 6290.8194 0 7118.0584 129712.25 - 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 2.7052 on 1 procs for 100 steps with 32000 atoms - -Performance: 3.194 ns/day, 7.514 hours/ns, 36.966 timesteps/s -99.6% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 2.3715 | 2.3715 | 2.3715 | 0.0 | 87.67 -Neigh | 0.28386 | 0.28386 | 0.28386 | 0.0 | 10.49 -Comm | 0.012808 | 0.012808 | 0.012808 | 0.0 | 0.47 -Output | 0.00033716 | 0.00033716 | 0.00033716 | 0.0 | 0.01 -Modify | 0.02349 | 0.02349 | 0.02349 | 0.0 | 0.87 -Other | | 0.01317 | | | 0.49 - -Nlocal: 32000 ave 32000 max 32000 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 19911 ave 19911 max 19911 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 2.3705e+06 ave 2.3705e+06 max 2.3705e+06 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 2370499 -Ave neighs/atom = 74.0781 -Neighbor list builds = 3 -Dangerous builds = 0 -Total wall time: 0:00:02 diff --git a/examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.4 b/examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.4 deleted file mode 100644 index 1214436d4d..0000000000 --- a/examples/kim/log.11Jul2018.kim.lj.newton-on.ubuntu.4 +++ /dev/null @@ -1,74 +0,0 @@ --------------------------------------------------------------------------- -[[5682,1],0]: A high-performance Open MPI point-to-point messaging module -was unable to find any relevant network interfaces: - -Module: OpenFabrics (openib) - Host: ubuntu-artful - -Another transport will be used instead, although this may result in -lower performance. - -NOTE: You can disable this warning by setting the MCA parameter -btl_base_warn_component_unused to 0. --------------------------------------------------------------------------- -LAMMPS (22 Jun 2018) -Lattice spacing in x,y,z = 4.43 4.43 4.43 -Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) - 1 by 2 by 2 MPI processor grid -Created 32000 atoms - Time spent = 0.00322684 secs -WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) -WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) -WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) -WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) -WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) -WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) -WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (../pair_kim.cpp:955) -WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (../pair_kim.cpp:959) -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 8.45 - ghost atom cutoff = 8.45 - binsize = 4.225, bins = 21 21 21 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair kim, perpetual - attributes: half, newton off, cut 8.45 - pair build: half/bin/newtoff - stencil: half/bin/3d/newtoff - bin: standard -Setting up Verlet run ... - Unit style : metal - Current step : 0 - Time step : 0.001 -Per MPI rank memory allocation (min/avg/max) = 8.263 | 8.263 | 8.263 Mbytes -Step Temp E_pair E_mol TotEng Press - 0 200 6290.8194 0 7118.0584 129712.25 - 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 3.1366 on 4 procs for 100 steps with 32000 atoms - -Performance: 2.755 ns/day, 8.713 hours/ns, 31.882 timesteps/s -23.7% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 1.3641 | 1.4213 | 1.4783 | 3.5 | 45.31 -Neigh | 0.25408 | 0.27714 | 0.29697 | 3.2 | 8.84 -Comm | 1.3588 | 1.4045 | 1.4806 | 4.0 | 44.78 -Output | 0.00055232 | 0.00072915 | 0.00087484 | 0.0 | 0.02 -Modify | 0.0061178 | 0.0062019 | 0.0062811 | 0.1 | 0.20 -Other | | 0.02673 | | | 0.85 - -Nlocal: 8000 ave 8018 max 7967 min -Histogram: 1 0 0 0 0 0 1 0 0 2 -Nghost: 9131 ave 9164 max 9113 min -Histogram: 2 0 0 1 0 0 0 0 0 1 -Neighs: 630904 ave 632094 max 628209 min -Histogram: 1 0 0 0 0 0 0 1 0 2 - -Total # of neighbors = 2523614 -Ave neighs/atom = 78.8629 -Neighbor list builds = 3 -Dangerous builds = 0 -Total wall time: 0:00:03 diff --git a/examples/kim/log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.1 b/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-off.1 similarity index 56% rename from examples/kim/log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.1 rename to examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-off.1 index bf5864cb08..0b67cc1ccb 100644 --- a/examples/kim/log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.1 +++ b/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-off.1 @@ -1,22 +1,11 @@ --------------------------------------------------------------------------- -[[6124,1],0]: A high-performance Open MPI point-to-point messaging module -was unable to find any relevant network interfaces: - -Module: OpenFabrics (openib) - Host: ubuntu-artful - -Another transport will be used instead, although this may result in -lower performance. - -NOTE: You can disable this warning by setting the MCA parameter -btl_base_warn_component_unused to 0. --------------------------------------------------------------------------- -LAMMPS (22 Jun 2018) +LAMMPS (24 Oct 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 1 by 1 MPI processor grid Created 32000 atoms - Time spent = 0.00263722 secs + Time spent = 0.00307703 secs Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -37,20 +26,20 @@ Per MPI rank memory allocation (min/avg/max) = 20.37 | 20.37 | 20.37 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 2.59913 on 1 procs for 100 steps with 32000 atoms +Loop time of 2.58348 on 1 procs for 100 steps with 32000 atoms -Performance: 3.324 ns/day, 7.220 hours/ns, 38.474 timesteps/s -99.4% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 3.344 ns/day, 7.176 hours/ns, 38.707 timesteps/s +99.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 | 2.2753 | 2.2753 | 2.2753 | 0.0 | 87.54 -Neigh | 0.28456 | 0.28456 | 0.28456 | 0.0 | 10.95 -Comm | 0.0055908 | 0.0055908 | 0.0055908 | 0.0 | 0.22 -Output | 0.00034594 | 0.00034594 | 0.00034594 | 0.0 | 0.01 -Modify | 0.023011 | 0.023011 | 0.023011 | 0.0 | 0.89 -Other | | 0.01037 | | | 0.40 +Pair | 2.2621 | 2.2621 | 2.2621 | 0.0 | 87.56 +Neigh | 0.28294 | 0.28294 | 0.28294 | 0.0 | 10.95 +Comm | 0.0057185 | 0.0057185 | 0.0057185 | 0.0 | 0.22 +Output | 0.00010109 | 0.00010109 | 0.00010109 | 0.0 | 0.00 +Modify | 0.023396 | 0.023396 | 0.023396 | 0.0 | 0.91 +Other | | 0.009175 | | | 0.36 Nlocal: 32000 ave 32000 max 32000 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/kim/log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.4 b/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-off.4 similarity index 55% rename from examples/kim/log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.4 rename to examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-off.4 index 7f51d447fd..e2ee8e39bb 100644 --- a/examples/kim/log.11Jul2018.kim.lj.lmp.newton-off.ubuntu.4 +++ b/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-off.4 @@ -1,22 +1,11 @@ --------------------------------------------------------------------------- -[[6116,1],1]: A high-performance Open MPI point-to-point messaging module -was unable to find any relevant network interfaces: - -Module: OpenFabrics (openib) - Host: ubuntu-artful - -Another transport will be used instead, although this may result in -lower performance. - -NOTE: You can disable this warning by setting the MCA parameter -btl_base_warn_component_unused to 0. --------------------------------------------------------------------------- -LAMMPS (22 Jun 2018) +LAMMPS (24 Oct 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 2 by 2 MPI processor grid Created 32000 atoms - Time spent = 0.00125703 secs + Time spent = 0.000934124 secs Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -37,20 +26,20 @@ Per MPI rank memory allocation (min/avg/max) = 8.013 | 8.013 | 8.013 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 2.99901 on 4 procs for 100 steps with 32000 atoms +Loop time of 0.76167 on 4 procs for 100 steps with 32000 atoms -Performance: 2.881 ns/day, 8.331 hours/ns, 33.344 timesteps/s -24.4% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 11.343 ns/day, 2.116 hours/ns, 131.290 timesteps/s +99.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.3704 | 1.4012 | 1.439 | 2.3 | 46.72 -Neigh | 0.252 | 0.27028 | 0.28236 | 2.2 | 9.01 -Comm | 0.66355 | 0.73942 | 0.82223 | 6.5 | 24.66 -Output | 0.0037821 | 0.0090774 | 0.016142 | 5.1 | 0.30 -Modify | 0.0058855 | 0.019317 | 0.044855 | 11.4 | 0.64 -Other | | 0.5597 | | | 18.66 +Pair | 0.65549 | 0.6589 | 0.66089 | 0.3 | 86.51 +Neigh | 0.075691 | 0.075959 | 0.07641 | 0.1 | 9.97 +Comm | 0.0073049 | 0.007397 | 0.0074785 | 0.1 | 0.97 +Output | 5.6982e-05 | 0.00014746 | 0.00024986 | 0.0 | 0.02 +Modify | 0.0068338 | 0.0068703 | 0.0068941 | 0.0 | 0.90 +Other | | 0.0124 | | | 1.63 Nlocal: 8000 ave 8018 max 7967 min Histogram: 1 0 0 0 0 0 1 0 0 2 @@ -63,4 +52,4 @@ Total # of neighbors = 2523614 Ave neighs/atom = 78.8629 Neighbor list builds = 3 Dangerous builds = 0 -Total wall time: 0:00:03 +Total wall time: 0:00:00 diff --git a/examples/kim/log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.1 b/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-on.1 similarity index 56% rename from examples/kim/log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.1 rename to examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-on.1 index 7be22a7f60..91731438de 100644 --- a/examples/kim/log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.1 +++ b/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-on.1 @@ -1,22 +1,11 @@ --------------------------------------------------------------------------- -[[5635,1],0]: A high-performance Open MPI point-to-point messaging module -was unable to find any relevant network interfaces: - -Module: OpenFabrics (openib) - Host: ubuntu-artful - -Another transport will be used instead, although this may result in -lower performance. - -NOTE: You can disable this warning by setting the MCA parameter -btl_base_warn_component_unused to 0. --------------------------------------------------------------------------- -LAMMPS (22 Jun 2018) +LAMMPS (24 Oct 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 1 by 1 MPI processor grid Created 32000 atoms - Time spent = 0.00226572 secs + Time spent = 0.00311494 secs Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -37,20 +26,20 @@ Per MPI rank memory allocation (min/avg/max) = 19.23 | 19.23 | 19.23 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 2.26274 on 1 procs for 100 steps with 32000 atoms +Loop time of 2.22646 on 1 procs for 100 steps with 32000 atoms -Performance: 3.818 ns/day, 6.285 hours/ns, 44.194 timesteps/s -99.0% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 3.881 ns/day, 6.185 hours/ns, 44.914 timesteps/s +99.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 | 2.0589 | 2.0589 | 2.0589 | 0.0 | 90.99 -Neigh | 0.15362 | 0.15362 | 0.15362 | 0.0 | 6.79 -Comm | 0.012277 | 0.012277 | 0.012277 | 0.0 | 0.54 -Output | 0.0003387 | 0.0003387 | 0.0003387 | 0.0 | 0.01 -Modify | 0.02416 | 0.02416 | 0.02416 | 0.0 | 1.07 -Other | | 0.01346 | | | 0.59 +Pair | 2.0344 | 2.0344 | 2.0344 | 0.0 | 91.38 +Neigh | 0.14575 | 0.14575 | 0.14575 | 0.0 | 6.55 +Comm | 0.01127 | 0.01127 | 0.01127 | 0.0 | 0.51 +Output | 0.000103 | 0.000103 | 0.000103 | 0.0 | 0.00 +Modify | 0.024057 | 0.024057 | 0.024057 | 0.0 | 1.08 +Other | | 0.01083 | | | 0.49 Nlocal: 32000 ave 32000 max 32000 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/kim/log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.4 b/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-on.4 similarity index 55% rename from examples/kim/log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.4 rename to examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-on.4 index d910afbbc2..92eb8ba8bc 100644 --- a/examples/kim/log.11Jul2018.kim.lj.lmp.newton-on.ubuntu.4 +++ b/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-on.4 @@ -1,22 +1,11 @@ --------------------------------------------------------------------------- -[[5659,1],0]: A high-performance Open MPI point-to-point messaging module -was unable to find any relevant network interfaces: - -Module: OpenFabrics (openib) - Host: ubuntu-artful - -Another transport will be used instead, although this may result in -lower performance. - -NOTE: You can disable this warning by setting the MCA parameter -btl_base_warn_component_unused to 0. --------------------------------------------------------------------------- -LAMMPS (22 Jun 2018) +LAMMPS (24 Oct 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 2 by 2 MPI processor grid Created 32000 atoms - Time spent = 0.00213171 secs + Time spent = 0.000946045 secs Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -37,20 +26,20 @@ Per MPI rank memory allocation (min/avg/max) = 7.632 | 7.632 | 7.632 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 2.44628 on 4 procs for 100 steps with 32000 atoms +Loop time of 0.639437 on 4 procs for 100 steps with 32000 atoms -Performance: 3.532 ns/day, 6.795 hours/ns, 40.878 timesteps/s -24.2% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 13.512 ns/day, 1.776 hours/ns, 156.388 timesteps/s +99.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.98717 | 1.0434 | 1.1582 | 6.6 | 42.65 -Neigh | 0.10195 | 0.12588 | 0.15258 | 5.2 | 5.15 -Comm | 1.1525 | 1.2449 | 1.3061 | 5.1 | 50.89 -Output | 0.0005828 | 0.00075188 | 0.00087256 | 0.0 | 0.03 -Modify | 0.0057955 | 0.0059132 | 0.006044 | 0.1 | 0.24 -Other | | 0.02542 | | | 1.04 +Pair | 0.55655 | 0.55752 | 0.55833 | 0.1 | 87.19 +Neigh | 0.040557 | 0.040752 | 0.041148 | 0.1 | 6.37 +Comm | 0.024693 | 0.025886 | 0.026853 | 0.5 | 4.05 +Output | 4.6015e-05 | 5.1558e-05 | 6.0081e-05 | 0.0 | 0.01 +Modify | 0.0088108 | 0.0089263 | 0.0090554 | 0.1 | 1.40 +Other | | 0.006306 | | | 0.99 Nlocal: 8000 ave 8018 max 7967 min Histogram: 1 0 0 0 0 0 1 0 0 2 @@ -63,4 +52,4 @@ Total # of neighbors = 2126875 Ave neighs/atom = 66.4648 Neighbor list builds = 3 Dangerous builds = 0 -Total wall time: 0:00:02 +Total wall time: 0:00:00 diff --git a/examples/kim/log.12Dec2018.in.kim.lj.newton-off.1 b/examples/kim/log.12Dec2018.in.kim.lj.newton-off.1 new file mode 100644 index 0000000000..c25368b917 --- /dev/null +++ b/examples/kim/log.12Dec2018.in.kim.lj.newton-off.1 @@ -0,0 +1,59 @@ +LAMMPS (24 Oct 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +Lattice spacing in x,y,z = 4.43 4.43 4.43 +Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) + 1 by 1 by 1 MPI processor grid +Created 32000 atoms + Time spent = 0.00450015 secs +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:1102) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 8.45 + ghost atom cutoff = 8.45 + binsize = 4.225, bins = 21 21 21 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair kim, perpetual + attributes: full, newton off, cut 8.45 + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Setting up Verlet run ... + Unit style : metal + Current step : 0 + Time step : 0.001 +Per MPI rank memory allocation (min/avg/max) = 28.51 | 28.51 | 28.51 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 200 6290.8194 0 7118.0584 129712.25 + 100 95.179725 6718.814 0 7112.496 133346.59 +Loop time of 3.35585 on 1 procs for 100 steps with 32000 atoms + +Performance: 2.575 ns/day, 9.322 hours/ns, 29.799 timesteps/s +99.2% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.9239 | 2.9239 | 2.9239 | 0.0 | 87.13 +Neigh | 0.38492 | 0.38492 | 0.38492 | 0.0 | 11.47 +Comm | 0.0072038 | 0.0072038 | 0.0072038 | 0.0 | 0.21 +Output | 0.00010204 | 0.00010204 | 0.00010204 | 0.0 | 0.00 +Modify | 0.028316 | 0.028316 | 0.028316 | 0.0 | 0.84 +Other | | 0.01146 | | | 0.34 + +Nlocal: 32000 ave 32000 max 32000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 19911 ave 19911 max 19911 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 4.25375e+06 ave 4.25375e+06 max 4.25375e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 4253750 +Ave neighs/atom = 132.93 +Neighbor list builds = 3 +Dangerous builds = 0 +Total wall time: 0:00:03 diff --git a/examples/kim/log.12Dec2018.in.kim.lj.newton-off.4 b/examples/kim/log.12Dec2018.in.kim.lj.newton-off.4 new file mode 100644 index 0000000000..c8c52d6e09 --- /dev/null +++ b/examples/kim/log.12Dec2018.in.kim.lj.newton-off.4 @@ -0,0 +1,65 @@ +LAMMPS (24 Oct 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +Lattice spacing in x,y,z = 4.43 4.43 4.43 +Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) + 1 by 2 by 2 MPI processor grid +Created 32000 atoms + Time spent = 0.00106215 secs +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:1102) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:1102) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:1102) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:1102) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 8.45 + ghost atom cutoff = 8.45 + binsize = 4.225, bins = 21 21 21 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair kim, perpetual + attributes: full, newton off, cut 8.45 + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Setting up Verlet run ... + Unit style : metal + Current step : 0 + Time step : 0.001 +Per MPI rank memory allocation (min/avg/max) = 10.05 | 10.05 | 10.05 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 200 6290.8194 0 7118.0584 129712.25 + 100 95.179725 6718.814 0 7112.496 133346.59 +Loop time of 0.930494 on 4 procs for 100 steps with 32000 atoms + +Performance: 9.285 ns/day, 2.585 hours/ns, 107.470 timesteps/s +99.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.80926 | 0.81195 | 0.81464 | 0.3 | 87.26 +Neigh | 0.089949 | 0.092688 | 0.095287 | 0.8 | 9.96 +Comm | 0.007302 | 0.0074284 | 0.0075471 | 0.1 | 0.80 +Output | 0.00012898 | 0.00014371 | 0.00016093 | 0.0 | 0.02 +Modify | 0.011517 | 0.011761 | 0.011959 | 0.2 | 1.26 +Other | | 0.006522 | | | 0.70 + +Nlocal: 8000 ave 8018 max 7967 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 9131 ave 9164 max 9113 min +Histogram: 2 0 0 1 0 0 0 0 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 1.06344e+06 ave 1.06594e+06 max 1.05881e+06 min +Histogram: 1 0 0 0 0 0 1 0 0 2 + +Total # of neighbors = 4253750 +Ave neighs/atom = 132.93 +Neighbor list builds = 3 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/kim/log.12Dec2018.in.kim.lj.newton-on.1 b/examples/kim/log.12Dec2018.in.kim.lj.newton-on.1 new file mode 100644 index 0000000000..eec26307ac --- /dev/null +++ b/examples/kim/log.12Dec2018.in.kim.lj.newton-on.1 @@ -0,0 +1,59 @@ +LAMMPS (24 Oct 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +Lattice spacing in x,y,z = 4.43 4.43 4.43 +Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) + 1 by 1 by 1 MPI processor grid +Created 32000 atoms + Time spent = 0.0030508 secs +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:1102) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 8.45 + ghost atom cutoff = 8.45 + binsize = 4.225, bins = 21 21 21 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair kim, perpetual + attributes: full, newton off, cut 8.45 + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Setting up Verlet run ... + Unit style : metal + Current step : 0 + Time step : 0.001 +Per MPI rank memory allocation (min/avg/max) = 28.12 | 28.12 | 28.12 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 200 6290.8194 0 7118.0584 129712.25 + 100 95.179725 6718.814 0 7112.496 133346.59 +Loop time of 2.97001 on 1 procs for 100 steps with 32000 atoms + +Performance: 2.909 ns/day, 8.250 hours/ns, 33.670 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.5982 | 2.5982 | 2.5982 | 0.0 | 87.48 +Neigh | 0.32516 | 0.32516 | 0.32516 | 0.0 | 10.95 +Comm | 0.012059 | 0.012059 | 0.012059 | 0.0 | 0.41 +Output | 0.000103 | 0.000103 | 0.000103 | 0.0 | 0.00 +Modify | 0.023878 | 0.023878 | 0.023878 | 0.0 | 0.80 +Other | | 0.01058 | | | 0.36 + +Nlocal: 32000 ave 32000 max 32000 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 19911 ave 19911 max 19911 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 4.25375e+06 ave 4.25375e+06 max 4.25375e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 4253750 +Ave neighs/atom = 132.93 +Neighbor list builds = 3 +Dangerous builds = 0 +Total wall time: 0:00:03 diff --git a/examples/kim/log.12Dec2018.in.kim.lj.newton-on.4 b/examples/kim/log.12Dec2018.in.kim.lj.newton-on.4 new file mode 100644 index 0000000000..6c0da32ba4 --- /dev/null +++ b/examples/kim/log.12Dec2018.in.kim.lj.newton-on.4 @@ -0,0 +1,65 @@ +LAMMPS (24 Oct 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +Lattice spacing in x,y,z = 4.43 4.43 4.43 +Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) + 1 by 2 by 2 MPI processor grid +Created 32000 atoms + Time spent = 0.000946999 secs +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:1102) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:1102) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:1102) +WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) +WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:1102) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 8.45 + ghost atom cutoff = 8.45 + binsize = 4.225, bins = 21 21 21 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair kim, perpetual + attributes: full, newton off, cut 8.45 + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Setting up Verlet run ... + Unit style : metal + Current step : 0 + Time step : 0.001 +Per MPI rank memory allocation (min/avg/max) = 9.789 | 9.789 | 9.789 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 200 6290.8194 0 7118.0584 129712.25 + 100 95.179725 6718.814 0 7112.496 133346.59 +Loop time of 0.891065 on 4 procs for 100 steps with 32000 atoms + +Performance: 9.696 ns/day, 2.475 hours/ns, 112.225 timesteps/s +99.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.75777 | 0.75864 | 0.75996 | 0.1 | 85.14 +Neigh | 0.088332 | 0.088883 | 0.089737 | 0.2 | 9.97 +Comm | 0.027187 | 0.02829 | 0.029602 | 0.6 | 3.17 +Output | 4.9114e-05 | 5.4777e-05 | 6.6042e-05 | 0.0 | 0.01 +Modify | 0.0088358 | 0.0089488 | 0.0091376 | 0.1 | 1.00 +Other | | 0.00625 | | | 0.70 + +Nlocal: 8000 ave 8018 max 7967 min +Histogram: 1 0 0 0 0 0 1 0 0 2 +Nghost: 9131 ave 9164 max 9113 min +Histogram: 2 0 0 1 0 0 0 0 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 1.06344e+06 ave 1.06594e+06 max 1.05881e+06 min +Histogram: 1 0 0 0 0 0 1 0 0 2 + +Total # of neighbors = 4253750 +Ave neighs/atom = 132.93 +Neighbor list builds = 3 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/lib/kim/.gitignore b/lib/kim/.gitignore index c1f57fe64c..bfd4b35d87 100644 --- a/lib/kim/.gitignore +++ b/lib/kim/.gitignore @@ -1,3 +1,2 @@ -/Makefile.KIM_DIR -/Makefile.KIM_Config +/kim-prefix.txt /installed-kim-api-* diff --git a/lib/kim/Install.py b/lib/kim/Install.py index 815827b645..b1dcee1a36 100644 --- a/lib/kim/Install.py +++ b/lib/kim/Install.py @@ -21,7 +21,7 @@ Syntax from lib dir: python Install.py -b -v version -a kim-name specify one or more options, order does not matter -v = version of KIM API library to use - default = kim-api-v2.0.0-beta.2 (current as of November 2018) + default = kim-api-v2.0.0-beta.3 (current as of December 2018) -b = download and build base KIM API library with example Models this will delete any previous installation in the current folder -n = do NOT download and build base KIM API library. @@ -36,9 +36,9 @@ specify one or more options, order does not matter Examples: make lib-kim args="-b" # install KIM API lib with only example models -make lib-kim args="-a Glue_Ercolessi_Adams_Al__MO_324507536345_002" # Ditto plus one model +make lib-kim args="-a EAM_ErcolessiAdams_1994_Al__MO_324507536345_002" # Ditto plus one model make lib-kim args="-b -a everything" # install KIM API lib with all models -make lib-kim args="-n -a EAM_Dynamo_Ackland_W__MO_141627196590_003" # only add one model or model driver +make lib-kim args="-n -a EAM_Dynamo_Ackland_2003_W__MO_141627196590_005" # only add one model or model driver See the list of KIM model drivers here: https://openkim.org/kim-items/model-drivers/alphabetical @@ -109,7 +109,7 @@ nargs = len(args) if nargs == 0: error() thisdir = os.environ['PWD'] -version = "kim-api-v2.0.0-beta.2" +version = "kim-api-v2-2.0.0-beta.3" buildflag = False everythingflag = False From 540026ca00d4b637e54a3d3892cdf9979a86688b Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Sun, 16 Dec 2018 15:53:51 -0600 Subject: [PATCH 042/143] Update CMakeLists.txt to avoid merge conflicts --- cmake/CMakeLists.txt | 203 +++++++++++++++++++++++++++++++++---------- 1 file changed, 159 insertions(+), 44 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 4abbeb4732..1936b50a56 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -11,6 +11,10 @@ get_filename_component(LAMMPS_LIB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../lib get_filename_component(LAMMPS_LIB_BINARY_DIR ${CMAKE_BINARY_DIR}/lib ABSOLUTE) get_filename_component(LAMMPS_DOC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../doc ABSOLUTE) +# by default, install into $HOME/.local (not /usr/local), so that no root access (and sudo!!) is needed +if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/.local" CACHE PATH "default install path" FORCE ) +endif() # To avoid conflicts with the conventional Makefile build system, we build everything here file(GLOB LIB_SOURCES ${LAMMPS_SOURCE_DIR}/[^.]*.cpp) @@ -75,6 +79,7 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS) #release comes with -O3 by default set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE) endif(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS) +string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE) # check for files auto-generated by make-based buildsystem # this is fast, so check for it all the time @@ -171,8 +176,9 @@ set(DEFAULT_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS DIPOLE GRANULAR USER-BOCS USER-CGDNA USER-MESO USER-CGSDK USER-COLVARS USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-LB USER-MANIFOLD USER-MEAMC USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF - USER-PHONON USER-PTM USER-QTB USER-REAXC USER-SCAFACOS USER-SMD USER-SMTBQ - USER-SPH USER-TALLY USER-UEF USER-VTK USER-QUIP USER-QMMM) + USER-PHONON USER-PLUMED USER-PTM USER-QTB USER-REAXC USER-SCAFACOS + USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK + USER-QUIP USER-QMMM) set(ACCEL_PACKAGES USER-OMP KOKKOS OPT USER-INTEL GPU) set(OTHER_PACKAGES CORESHELL QEQ) foreach(PKG ${DEFAULT_PACKAGES}) @@ -215,7 +221,7 @@ else() endif() -set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS size limit") +set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallsmall: all 32-bit, smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)") set(LAMMPS_SIZES_VALUES smallbig bigbig smallsmall) set_property(CACHE LAMMPS_SIZES PROPERTY STRINGS ${LAMMPS_SIZES_VALUES}) validate_option(LAMMPS_SIZES LAMMPS_SIZES_VALUES) @@ -303,7 +309,7 @@ pkg_depends(USER-SCAFACOS MPI) find_package(OpenMP QUIET) option(BUILD_OMP "Build with OpenMP support" ${OpenMP_FOUND}) -if(BUILD_OMP OR PKG_USER-OMP OR PKG_KOKKOS OR PKG_USER-INTEL) +if(BUILD_OMP OR PKG_KOKKOS OR PKG_USER-INTEL) find_package(OpenMP REQUIRED) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") @@ -421,16 +427,30 @@ if(WITH_FFMPEG) add_definitions(-DLAMMPS_FFMPEG) endif() +if(BUILD_SHARED_LIBS) + set(CONFIGURE_REQUEST_PIC "--with-pic") + set(CMAKE_REQUEST_PIC "-DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE}") + set(CUDA_REQUEST_PIC "-Xcompiler ${CMAKE_SHARED_LIBRARY_CXX_FLAGS}") +else() + set(CONFIGURE_REQUEST_PIC) + set(CMAKE_REQUEST_PIC) + set(CUDA_REQUEST_PIC) +endif() + + if(PKG_VORONOI) - option(DOWNLOAD_VORO "Download voro++ (instead of using the system's one)" OFF) + option(DOWNLOAD_VORO "Download and compile the Voro++ library instead of using an already installed one" OFF) if(DOWNLOAD_VORO) + message(STATUS "Voro++ download requested - we will build our own") include(ExternalProject) if(BUILD_SHARED_LIBS) - set(VORO_BUILD_OPTIONS "CFLAGS=-fPIC") + set(VORO_BUILD_CFLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}") else() - set(VORO_BUILD_OPTIONS) + set(VORO_BUILD_CFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}") endif() + string(APPEND VORO_BUILD_CFLAGS ${CMAKE_CXX_FLAGS}) + set(VORO_BUILD_OPTIONS CXX=${CMAKE_CXX_COMPILER} CFLAGS=${VORO_BUILD_CFLAGS}) ExternalProject_Add(voro_build URL http://math.lbl.gov/voro++/download/dir/voro++-0.4.6.tar.gz @@ -444,7 +464,7 @@ if(PKG_VORONOI) else() find_package(VORO) if(NOT VORO_FOUND) - message(FATAL_ERROR "VORO not found, help CMake to find it by setting VORO_LIBRARY and VORO_INCLUDE_DIR, or set DOWNLOAD_VORO=ON to download it") + message(FATAL_ERROR "Voro++ library not found. Help CMake to find it by setting VORO_LIBRARY and VORO_INCLUDE_DIR, or set DOWNLOAD_VORO=ON to download it") endif() endif() include_directories(${VORO_INCLUDE_DIRS}) @@ -452,26 +472,26 @@ if(PKG_VORONOI) endif() if(PKG_LATTE) - option(DOWNLOAD_LATTE "Download latte (instead of using the system's one)" OFF) + option(DOWNLOAD_LATTE "Download the LATTE library instead of using an already installed one" OFF) if(DOWNLOAD_LATTE) if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR message(FATAL_ERROR "For downlading LATTE you need at least cmake-3.7") endif() - message(STATUS "LATTE not found - we will build our own") + message(STATUS "LATTE download requested - we will build our own") include(ExternalProject) ExternalProject_Add(latte_build URL https://github.com/lanl/LATTE/archive/v1.2.1.tar.gz URL_MD5 85ac414fdada2d04619c8f936344df14 SOURCE_SUBDIR cmake - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} - ) + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} + ) ExternalProject_get_property(latte_build INSTALL_DIR) set(LATTE_LIBRARIES ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/liblatte.a) list(APPEND LAMMPS_DEPS latte_build) else() find_package(LATTE) if(NOT LATTE_FOUND) - message(FATAL_ERROR "LATTE not found, help CMake to find it by setting LATTE_LIBRARY, or set DOWNLOAD_LATTE=ON to download it") + message(FATAL_ERROR "LATTE library not found, help CMake to find it by setting LATTE_LIBRARY, or set DOWNLOAD_LATTE=ON to download it") endif() endif() list(APPEND LAMMPS_LINK_LIBS ${LATTE_LIBRARIES} ${LAPACK_LIBRARIES}) @@ -479,24 +499,22 @@ endif() if(PKG_USER-SCAFACOS) find_package(GSL REQUIRED) - option(DOWNLOAD_SCAFACOS "Download ScaFaCoS (instead of using the system's one)" OFF) + option(DOWNLOAD_SCAFACOS "Download ScaFaCoS library instead of using an already installed one" OFF) if(DOWNLOAD_SCAFACOS) + message(STATUS "ScaFaCoS download requested - we will build our own") include(ExternalProject) ExternalProject_Add(scafacos_build URL https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz URL_MD5 bd46d74e3296bd8a444d731bb10c1738 - CONFIGURE_COMMAND /configure --prefix= - --disable-doc + CONFIGURE_COMMAND /configure --prefix= --disable-doc --enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m - --with-internal-fftw - --with-internal-pfft - --with-internal-pnfft - $<$:--with-pic> + --with-internal-fftw --with-internal-pfft + --with-internal-pnfft ${CONFIGURE_REQUEST_PIC} FC=${CMAKE_MPI_Fortran_COMPILER} CXX=${CMAKE_MPI_CXX_COMPILER} CC=${CMAKE_MPI_C_COMPILER} F77= - ) + ) ExternalProject_get_property(scafacos_build INSTALL_DIR) set(SCAFACOS_BUILD_DIR ${INSTALL_DIR}) set(SCAFACOS_INCLUDE_DIRS ${SCAFACOS_BUILD_DIR}/include) @@ -528,6 +546,54 @@ if(PKG_USER-SCAFACOS) include_directories(${SCAFACOS_INCLUDE_DIRS}) endif() +if(PKG_USER-PLUMED) + find_package(GSL REQUIRED) + set(PLUMED_MODE "static" CACHE STRING "Linkage mode for Plumed2 library") + set(PLUMED_MODE_VALUES static shared runtime) + set_property(CACHE PLUMED_MODE PROPERTY STRINGS ${PLUMED_MODE_VALUES}) + validate_option(PLUMED_MODE PLUMED_MODE_VALUES) + string(TOUPPER ${PLUMED_MODE} PLUMED_MODE) + + option(DOWNLOAD_PLUMED "Download Plumed package instead of using an already installed one" OFF) + if(DOWNLOAD_PLUMED) + message(STATUS "PLUMED download requested - we will build our own") + include(ExternalProject) + ExternalProject_Add(plumed_build + URL https://github.com/plumed/plumed2/releases/download/v2.4.3/plumed-src-2.4.3.tgz + URL_MD5 b1be7c48971627febc11c61b70767fc5 + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND /configure --prefix= ${CONFIGURE_REQUEST_PIC}) + ExternalProject_get_property(plumed_build INSTALL_DIR) + set(PLUMED_INSTALL_DIR ${INSTALL_DIR}) + list(APPEND LAMMPS_DEPS plumed_build) + if(PLUMED_MODE STREQUAL "STATIC") + add_definitions(-D__PLUMED_WRAPPER_CXX=1) + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/plumed/obj/kernel.o + "${PLUMED_INSTALL_DIR}/lib/plumed/obj/PlumedStatic.o" ${GSL_LIBRARIES} ${CMAKE_DL_LIBS}) + elseif(PLUMED_MODE STREQUAL "SHARED") + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumed.so ${CMAKE_DL_LIBS}) + elseif(PLUMED_MODE STREQUAL "RUNTIME") + add_definitions(-D__PLUMED_HAS_DLOPEN=1 -D__PLUMED_DEFAULT_KERNEL=${PLUMED_INSTALL_DIR}/lib/libplumedKernel.so) + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumedWrapper.a -rdynamic ${CMAKE_DL_LIBS}) + endif() + set(PLUMED_INCLUDE_DIRS "${PLUMED_INSTALL_DIR}/include") + else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(PLUMED plumed REQUIRED) + if(PLUMED_MODE STREQUAL "STATIC") + add_definitions(-D__PLUMED_WRAPPER_CXX=1) + include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.static) + elseif(PLUMED_MODE STREQUAL "SHARED") + include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.shared) + elseif(PLUMED_MODE STREQUAL "RUNTIME") + add_definitions(-D__PLUMED_HAS_DLOPEN=1 -D__PLUMED_DEFAULT_KERNEL=${PLUMED_LIBDIR}/libplumedKernel.so) + include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.runtime) + endif() + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_LOAD}) + endif() + include_directories(${PLUMED_INCLUDE_DIRS}) +endif() + if(PKG_USER-MOLFILE) add_library(molfile INTERFACE) target_include_directories(molfile INTERFACE ${LAMMPS_LIB_SOURCE_DIR}/molfile) @@ -543,8 +609,9 @@ if(PKG_USER-NETCDF) endif() if(PKG_USER-SMD) - option(DOWNLOAD_EIGEN3 "Download Eigen3 (instead of using the system's one)" OFF) + option(DOWNLOAD_EIGEN3 "Download Eigen3 instead of using an already installed one)" OFF) if(DOWNLOAD_EIGEN3) + message(STATUS "Eigen3 download requested - we will build our own") include(ExternalProject) ExternalProject_Add(Eigen3_build URL http://bitbucket.org/eigen/eigen/get/3.3.4.tar.gz @@ -584,8 +651,9 @@ if(PKG_USER-VTK) endif() if(PKG_KIM) - option(DOWNLOAD_KIM "Download kim-api (instead of using the system's one)" OFF) + option(DOWNLOAD_KIM "Download KIM-API v2 from OpenKIM instead of using an already installed one" OFF) if(DOWNLOAD_KIM) + message(STATUS "KIM-API v2 download requested - we will build our own") enable_language(C) enable_language(Fortran) include(ExternalProject) @@ -606,7 +674,7 @@ if(PKG_KIM) else() find_package(KIM-API-V2) if(NOT KIM-API-V2_FOUND) - message(FATAL_ERROR "KIM not found, help CMake to find it by setting PKG_CONFIG_PATH, or set DOWNLOAD_KIM=ON to download it") + message(FATAL_ERROR "KIM-API v2 not found, help CMake to find it by setting PKG_CONFIG_PATH, or set DOWNLOAD_KIM=ON to download it") endif() endif() list(APPEND LAMMPS_LINK_LIBS "${KIM-API-V2_LDFLAGS}") @@ -619,12 +687,7 @@ if(PKG_MESSAGE) ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.c ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.cpp) - if(BUILD_SHARED_LIBS) - add_library(cslib SHARED ${cslib_SOURCES}) - else() - add_library(cslib STATIC ${cslib_SOURCES}) - endif() - + add_library(cslib STATIC ${cslib_SOURCES}) if(BUILD_MPI) target_compile_definitions(cslib PRIVATE -DMPI_YES) set_target_properties(cslib PROPERTIES OUTPUT_NAME "csmpi") @@ -649,10 +712,10 @@ endif() if(PKG_MSCG) find_package(GSL REQUIRED) - option(DOWNLOAD_MSCG "Download latte (instead of using the system's one)" OFF) + option(DOWNLOAD_MSCG "Download MSCG library instead of using an already installed one)" OFF) if(DOWNLOAD_MSCG) if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR - message(FATAL_ERROR "For downlading LATTE you need at least cmake-3.7") + message(FATAL_ERROR "For downlading MSCG you need at least cmake-3.7") endif() include(ExternalProject) if(NOT LAPACK_FOUND) @@ -662,7 +725,7 @@ if(PKG_MSCG) URL https://github.com/uchicago-voth/MSCG-release/archive/1.7.3.1.tar.gz URL_MD5 8c45e269ee13f60b303edd7823866a91 SOURCE_SUBDIR src/CMake - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= -DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE} ${EXTRA_MSCG_OPTS} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} ${EXTRA_MSCG_OPTS} BUILD_COMMAND make mscg INSTALL_COMMAND "" ) ExternalProject_get_property(mscg_build BINARY_DIR) @@ -710,7 +773,7 @@ set(MATH_LIBRARIES "m" CACHE STRING "math library") mark_as_advanced( MATH_LIBRARIES ) include(CheckLibraryExists) if (CMAKE_VERSION VERSION_LESS "3.4") - enable_language(C) # check_library_exists isn't supported without a c compiler before v3.4 + enable_language(C) # check_library_exists isn't supported without a C compiler before v3.4 endif() # RB: disabled this check because it breaks with KOKKOS CUDA enabled #foreach(FUNC sin cos) @@ -748,6 +811,13 @@ foreach(PKG ${DEFAULT_PACKAGES}) endif() endforeach() +# packages that need defines set +foreach(PKG MPIIO) + if(PKG_${PKG}) + add_definitions(-DLMP_${PKG}) + endif() +endforeach() + # dedicated check for entire contents of accelerator packages foreach(PKG ${ACCEL_PACKAGES}) set(${PKG}_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/${PKG}) @@ -776,7 +846,7 @@ foreach(SIMPLE_LIB REAX MEAM POEMS USER-ATC USER-AWPMD USER-COLVARS USER-H5MD if(PKG_LIB STREQUAL awpmd) target_include_directories(awpmd PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/awpmd/systems/interact ${LAMMPS_LIB_SOURCE_DIR}/awpmd/ivutils/include) elseif(PKG_LIB STREQUAL h5md) - target_include_directories(h5md PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/h5md/include) + target_include_directories(h5md PUBLIC ${LAMMPS_LIB_SOURCE_DIR}/h5md/include ${HDF5_INCLUDE_DIRS}) elseif(PKG_LIB STREQUAL colvars) target_compile_options(colvars PRIVATE -DLEPTON) target_include_directories(colvars PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/colvars/lepton/include) @@ -792,6 +862,9 @@ if(PKG_USER-AWPMD) endif() if(PKG_USER-ATC) + if(LAMMPS_SIZES STREQUAL BIGBIG) + message(FATAL_ERROR "The USER-ATC Package is not compatible with -DLAMMPS_BIGBIG") + endif() target_link_libraries(atc ${LAPACK_LIBRARIES}) endif() @@ -799,6 +872,7 @@ if(PKG_USER-H5MD) find_package(HDF5 REQUIRED) target_link_libraries(h5md ${HDF5_LIBRARIES}) target_include_directories(h5md PRIVATE ${HDF5_INCLUDE_DIRS}) + include_directories(${HDF5_INCLUDE_DIRS}) endif() @@ -884,6 +958,20 @@ if(PKG_USER-OMP) include_directories(${USER-OMP_SOURCES_DIR}) endif() +# Fix rigid/meso requires RIGID to be installed +if(PKG_USER-SDPD) + set(USER-SDPD_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-SDPD) + + get_property(hlist GLOBAL PROPERTY FIX) + if(NOT PKG_RIGID) + list(REMOVE_ITEM hlist ${USER-SDPD_SOURCES_DIR}/fix_rigid_meso.h) + list(REMOVE_ITEM LIB_SOURCES ${USER-SDPD_SOURCES_DIR}/fix_rigid_meso.cpp) + endif() + set_property(GLOBAL PROPERTY FIX "${hlist}") + + include_directories(${USER-SDPD_SOURCES_DIR}) +endif() + if(PKG_KOKKOS) set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos) set(LAMMPS_LIB_KOKKOS_BIN_DIR ${LAMMPS_LIB_BINARY_DIR}/kokkos) @@ -961,7 +1049,7 @@ if(PKG_USER-INTEL) endif() if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) - message(FATAL_ERROR "USER-INTEL is needed at least 2016 intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}") + message(FATAL_ERROR "USER-INTEL needs at least a 2016 intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}") endif() if(NOT BUILD_OMP) @@ -1061,11 +1149,11 @@ if(PKG_GPU) find_package(CUDA REQUIRED) find_program(BIN2C bin2c) if(NOT BIN2C) - message(FATAL_ERROR "Couldn't find bin2c, use -DBIN2C helping cmake to find it.") + message(FATAL_ERROR "Could not find bin2c, use -DBIN2C=/path/to/bin2c to help cmake finding it.") endif() option(CUDPP_OPT "Enable CUDPP_OPT" ON) - set(GPU_ARCH "sm_30" CACHE STRING "LAMMPS GPU CUDA SM architecture (e.g. sm_60)") + set(GPU_ARCH "sm_30" CACHE STRING "LAMMPS GPU CUDA SM primary architecture (e.g. sm_60)") file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu ${CMAKE_CURRENT_SOURCE_DIR}/gpu/[^.]*.cu) list(REMOVE_ITEM GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_pppm.cu) @@ -1078,11 +1166,39 @@ if(PKG_GPU) file(GLOB GPU_LIB_CUDPP_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/[^.]*.cu) endif() - cuda_compile_cubin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS - -DUNIX -O3 -Xptxas -v --use_fast_math -DNV_KERNEL -DUCL_CUDADR -arch=${GPU_ARCH} -D_${GPU_PREC_SETTING}) + # build arch/gencode commands for nvcc based on CUDA toolkit version and use choice + # --arch translates directly instead of JIT, so this should be for the preferred or most common architecture + set(GPU_CUDA_GENCODE "-arch=${GPU_ARCH} ") + # Fermi (GPU Arch 2.x) is supported by CUDA 3.2 to CUDA 8.0 + if((CUDA_VERSION VERSION_GREATER "3.1") AND (CUDA_VERSION VERSION_LESS "9.0")) + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_20,code=[sm_20,compute_20] ") + endif() + # Kepler (GPU Arch 3.x) is supported by CUDA 5 and later + if(CUDA_VERSION VERSION_GREATER "4.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_30,code=[sm_30,compute_30] -gencode arch=compute_35,code=[sm_35,compute_35] ") + endif() + # Maxwell (GPU Arch 5.x) is supported by CUDA 6 and later + if(CUDA_VERSION VERSION_GREATER "5.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52] ") + endif() + # Pascal (GPU Arch 6.x) is supported by CUDA 8 and later + if(CUDA_VERSION VERSION_GREATER "7.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_60,code=[sm_60,compute_60] -gencode arch=compute_61,code=[sm_61,compute_61] ") + endif() + # Volta (GPU Arch 7.0) is supported by CUDA 9 and later + if(CUDA_VERSION VERSION_GREATER "8.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_70,code=[sm_70,compute_70] ") + endif() + # Turing (GPU Arch 7.5) is supported by CUDA 10 and later + if(CUDA_VERSION VERSION_GREATER "9.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_75,code=[sm_75,compute_75] ") + endif() - cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS $<$:-Xcompiler=-fPIC> - -DUNIX -O3 -Xptxas -v --use_fast_math -DUCL_CUDADR -arch=${GPU_ARCH} -D_${GPU_PREC_SETTING}) + cuda_compile_fatbin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS + -DUNIX -O3 --use_fast_math -Wno-deprecated-gpu-targets -DNV_KERNEL -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) + + cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS ${CUDA_REQUEST_PIC} + -DUNIX -O3 --use_fast_math -Wno-deprecated-gpu-targets -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) foreach(CU_OBJ ${GPU_GEN_OBJS}) get_filename_component(CU_NAME ${CU_OBJ} NAME_WE) @@ -1351,7 +1467,6 @@ foreach(PKG ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES} ${OTHER_PACKAGES}) endif() endforeach() -string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE) get_directory_property(CPPFLAGS DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS) include(FeatureSummary) feature_summary(DESCRIPTION "The following packages have been found:" WHAT PACKAGES_FOUND) @@ -1382,7 +1497,7 @@ endif() if(CMAKE_EXE_LINKER_FLAGS) message(STATUS "Linker flags: Executable ${CMAKE_EXE_LINKER_FLAGS}") - endif() +endif() if(BUILD_SHARED_LIBS) message(STATUS "Shared libraries ${CMAKE_SHARED_LINKER_FLAGS}") else() From 682b456aae90f9e4a1867e460a7c71ea55de2491 Mon Sep 17 00:00:00 2001 From: casievers Date: Fri, 1 Feb 2019 16:18:17 -0800 Subject: [PATCH 043/143] Optimized (but not working) Dynamical Matrix command) --- src/USER-PHONON/Install.sh | 4 + src/USER-PHONON/dynamical_matrix.cpp | 489 +++++++++++++++++++++++++ src/USER-PHONON/dynamical_matrix.h | 72 ++++ src/USER-PHONON/third_order.cpp | 529 +++++++++++++++++++++++++++ src/USER-PHONON/third_order.h | 71 ++++ 5 files changed, 1165 insertions(+) create mode 100644 src/USER-PHONON/dynamical_matrix.cpp create mode 100644 src/USER-PHONON/dynamical_matrix.h create mode 100644 src/USER-PHONON/third_order.cpp create mode 100644 src/USER-PHONON/third_order.h diff --git a/src/USER-PHONON/Install.sh b/src/USER-PHONON/Install.sh index 3428415443..a73f529cfa 100755 --- a/src/USER-PHONON/Install.sh +++ b/src/USER-PHONON/Install.sh @@ -40,3 +40,7 @@ fi action fix_phonon.cpp fft3d_wrap.h action fix_phonon.h fft3d_wrap.h +action dynamical_matrix.cpp +action dynamical_matrix.h +action third_order.cpp +action third_order.h diff --git a/src/USER-PHONON/dynamical_matrix.cpp b/src/USER-PHONON/dynamical_matrix.cpp new file mode 100644 index 0000000000..d1b53eee01 --- /dev/null +++ b/src/USER-PHONON/dynamical_matrix.cpp @@ -0,0 +1,489 @@ +// +// Created by charlie sievers on 6/21/18. +// + +#include +#include +#include "dynamical_matrix.h" +#include "atom.h" +#include "modify.h" +#include "domain.h" +#include "comm.h" +#include "group.h" +#include "force.h" +#include "math_extra.h" +#include "memory.h" +#include "bond.h" +#include "angle.h" +#include "dihedral.h" +#include "improper.h" +#include "kspace.h" +#include "update.h" +#include "neighbor.h" +#include "pair.h" +#include "timer.h" +#include "finish.h" + + +using namespace LAMMPS_NS; +enum{REGULAR,ESKM}; + +/* ---------------------------------------------------------------------- */ + +DynamicalMatrix::DynamicalMatrix(LAMMPS *lmp) : Pointers(lmp), fp(NULL) +{ + external_force_clear = 1; +} + +/* ---------------------------------------------------------------------- */ + +DynamicalMatrix::~DynamicalMatrix() +{ + if (fp && me == 0) fclose(fp); + memory->destroy(dynmat); + memory->destroy(final_dynmat); + fp = NULL; +} + +/* ---------------------------------------------------------------------- + setup without output or one-time post-init setup + flag = 0 = just force calculation + flag = 1 = reneighbor and force calculation +------------------------------------------------------------------------- */ + +void DynamicalMatrix::setup() +{ + // setup domain, communication and neighboring + // acquire ghosts + // build neighbor lists + if (triclinic) domain->x2lamda(atom->nlocal); + domain->pbc(); + domain->reset_box(); + comm->setup(); + if (neighbor->style) neighbor->setup_bins(); + comm->exchange(); + comm->borders(); + if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); + domain->image_check(); + domain->box_too_small_check(); + neighbor->build(1); + neighbor->ncalls = 0; + neighbor->every = 2; // build every this many steps + neighbor->delay = 1; + neighbor->ago = 0; + neighbor->ndanger = 0; + + // compute all forces + force_clear(); + external_force_clear = 0; + + eflag=0; + vflag=0; + if (pair_compute_flag) force->pair->compute(eflag,vflag); + else if (force->pair) force->pair->compute_dummy(eflag,vflag); + + if (atom->molecular) { + if (force->bond) force->bond->compute(eflag,vflag); + if (force->angle) force->angle->compute(eflag,vflag); + if (force->dihedral) force->dihedral->compute(eflag,vflag); + if (force->improper) force->improper->compute(eflag,vflag); + } + + if (force->kspace) { + force->kspace->setup(); + if (kspace_compute_flag) force->kspace->compute(eflag,vflag); + else force->kspace->compute_dummy(eflag,vflag); + } + + //modify->setup_pre_reverse(eflag,vflag); + if (force->newton) comm->reverse_comm(); +} + +/* ---------------------------------------------------------------------- */ + +void DynamicalMatrix::command(int narg, char **arg) +{ + MPI_Comm_rank(world,&me); + + if (domain->box_exist == 0) + error->all(FLERR,"Dynamical_matrix command before simulation box is defined"); + if (narg < 2) error->all(FLERR,"Illegal dynamical_matrix command"); + + lmp->init(); + + // orthogonal vs triclinic simulation box + + triclinic = domain->triclinic; + + if (force->pair && force->pair->compute_flag) pair_compute_flag = 1; + else pair_compute_flag = 0; + if (force->kspace && force->kspace->compute_flag) kspace_compute_flag = 1; + else kspace_compute_flag = 0; + + // group and style + + igroup = group->find(arg[0]); + if (igroup == -1) error->all(FLERR,"Could not find dynamical matrix group ID"); + groupbit = group->bitmask[igroup]; + dynlen = (group->count(igroup))*3; + memory->create(dynmat,int(dynlen),int(dynlen),"dynamic_matrix:dynmat"); + update->setupflag = 1; + + int style = -1; + if (strcmp(arg[1],"regular") == 0) style = REGULAR; + else if (strcmp(arg[1],"eskm") == 0) style = ESKM; + else error->all(FLERR,"Illegal Dynamical Matrix command"); + del = force->numeric(FLERR, arg[2]); + + // set option defaults + + binaryflag = 0; + scaleflag = 0; + compressed = 0; + file_flag = 0; + file_opened = 0; + conversion = 1; + + // read options from end of input line + if (style == REGULAR) options(narg-3,&arg[3]); //COME BACK + else if (style == ESKM) options(narg-3,&arg[3]); //COME BACK + else if (comm->me == 0 && screen) fprintf(screen,"Illegal Dynamical Matrix command\n"); + + // move atoms by 3-vector or specified variable(s) + + if (style == REGULAR) { + setup(); + calculateMatrix(); + if (me ==0) writeMatrix(); + } + + if (style == ESKM) { + setup(); + convert_units(update->unit_style); + conversion = conv_energy/conv_distance/conv_mass; + calculateMatrix(); + if (me ==0) writeMatrix(); + } + + Finish finish(lmp); + finish.end(1); +} + +/* ---------------------------------------------------------------------- + parse optional parameters +------------------------------------------------------------------------- */ + +void DynamicalMatrix::options(int narg, char **arg) +{ + if (narg < 0) error->all(FLERR,"Illegal dynamical_matrix command"); + int iarg = 0; + const char* filename = "dynmat.dyn"; + while (iarg < narg) { + if (strcmp(arg[iarg],"binary") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal dynamical_matrix command"); + if (strcmp(arg[iarg+1],"gzip") == 0) { + compressed = 1; + } + else if (strcmp(arg[iarg+1],"yes") == 0) { + binaryflag = 1; + } + iarg += 2; + } + else if (strcmp(arg[iarg],"file") == 0) { + if (iarg+2 > narg) error->all(FLERR, "Illegal dynamical_matrix command"); + filename = arg[iarg + 1]; + file_flag = 1; + iarg += 2; + } else error->all(FLERR,"Illegal dynamical_matrix command"); + } + if (file_flag == 1) { + openfile(filename); + } +} + +/* ---------------------------------------------------------------------- + generic opening of a file + ASCII or binary or gzipped + some derived classes override this function +------------------------------------------------------------------------- */ + +void DynamicalMatrix::openfile(const char* filename) +{ + // if file already opened, return + if (me!=0) return; + if (file_opened) return; + + if (compressed) { +#ifdef LAMMPS_GZIP + char gzip[128]; + sprintf(gzip,"gzip -6 > %s",filename); +#ifdef _WIN32 + fp = _popen(gzip,"wb"); +#else + fp = popen(gzip,"w"); +#endif +#else + error->one(FLERR,"Cannot open gzipped file"); +#endif + } else if (binaryflag) { + fp = fopen(filename,"wb"); + } else { + fp = fopen(filename,"w"); + } + + if (fp == NULL) error->one(FLERR,"Cannot open dump file"); + + file_opened = 1; +} + +/* ---------------------------------------------------------------------- + create dynamical matrix +------------------------------------------------------------------------- */ + +void DynamicalMatrix::calculateMatrix() +{ + int local_idx; // local index + int local_jdx; // second local index + int natoms = atom->natoms; + int *mask = atom->mask; + int *type = atom->type; + double imass; // dynamical matrix element + double *m = atom->mass; + double **f = atom->f; + + //initialize dynmat to all zeros + for (int i=0; i < dynlen; i++) + for (int j=0; j < dynlen; j++) + dynmat[i][j] = 0.; + + energy_force(0); + + if (comm->me == 0 && screen) fprintf(screen,"Calculating Dynamical Matrix...\n"); + + for (int i=1; i<=natoms; i++){ + local_idx = atom->map(i); + if (local_idx >= 0){ + for (int alpha=0; alpha<3; alpha++){ + displace_atom(local_idx, alpha, 1); + energy_force(0); + for (int j=1; j<=natoms; j++){ + local_jdx = atom->map(j); + if (local_jdx >= 0){ + for (int beta=0; beta<3; beta++){ + dynmat[(i-1)*3+alpha][(j-1)*3+beta] += -f[j-1][beta]; + } + } + } + displace_atom(local_idx,alpha,-2); + energy_force(0); + for (int j=1; j<=natoms; j++){ + local_jdx = atom->map(j); + if (local_jdx >= 0){ + for (int beta=0; beta<3; beta++){ + if (atom->rmass_flag == 1) + imass = sqrt(m[i] * m[j]); + else + imass = sqrt(m[type[i]] * m[type[j]]); + //dynmat has length dynlen + //dynlen = (group->count(igroup))*3; + //currently dynmat is being called to natoms*3 + //Also with this implementation + //I am not recovering the correct dynamical matrix + //if I have more than 1 core + dynmat[(i-1)*3+alpha][(j-1)*3+beta] -= -f[j-1][beta]; + dynmat[(i-1)*3+alpha][(j-1)*3+beta] /= (2 * del * imass); + dynmat[(i-1)*3+alpha][(j-1)*3+beta] *= conversion; + } + } + } + displace_atom(local_idx,alpha,1); + } + } + } + + + memory->create(final_dynmat,int(dynlen),int(dynlen),"dynamic_matrix_buffer:buf"); + for (int i = 0; i < dynlen; i++) + MPI_Reduce(dynmat[i], final_dynmat[i], int(dynlen), MPI_DOUBLE, MPI_SUM, 0, world); + + if (screen && me ==0 ) fprintf(screen,"Finished Calculating Dynamical Matrix\n"); +} + +/* ---------------------------------------------------------------------- + write dynamical matrix +------------------------------------------------------------------------- */ + +void DynamicalMatrix::writeMatrix() +{ + // print file comment lines + if (!binaryflag && fp) { + clearerr(fp); + for (int i = 0; i < dynlen; i++) { + for (int j = 0; j < dynlen; j++) { + if ((j+1)%3==0) fprintf(fp, "%4.8f\n", final_dynmat[j][i]); + else fprintf(fp, "%4.8f ",final_dynmat[j][i]); + } + } + } + if (ferror(fp)) + error->one(FLERR,"Error writing to file"); + + if (binaryflag && fp) { + clearerr(fp); + fwrite(&final_dynmat[0], sizeof(double), dynlen * dynlen, fp); + if (ferror(fp)) + error->one(FLERR, "Error writing to binary file"); + } +} + +/* ---------------------------------------------------------------------- + Displace atoms + ---------------------------------------------------------------------- */ + +void DynamicalMatrix::displace_atom(int local_idx, int direction, int magnitude) +{ + double **x = atom->x; + int *sametag = atom->sametag; + int j = local_idx; + + x[local_idx][direction] += del*magnitude; + + while (sametag[j] >= 0){ + j = sametag[j]; + x[j][direction] += del*magnitude; + } +} + + +/* ---------------------------------------------------------------------- + evaluate potential energy and forces + may migrate atoms due to reneighboring + return new energy, which should include nextra_global dof + return negative gradient stored in atom->f + return negative gradient for nextra_global dof in fextra +------------------------------------------------------------------------- */ + +void DynamicalMatrix::energy_force(int resetflag) +{ + // check for reneighboring + // always communicate since atoms move + int nflag = neighbor->check_distance(); + + if (nflag == 0) { + //if (comm->me == 0 && screen) fprintf(screen,"b\n"); + timer->stamp(); + comm->forward_comm(); + timer->stamp(Timer::COMM); + //if (comm->me == 0 && screen) fprintf(screen,"c\n"); + } else { + if (triclinic) domain->x2lamda(atom->nlocal); + domain->pbc(); + if (domain->box_change) { + domain->reset_box(); + comm->setup(); + if (neighbor->style) neighbor->setup_bins(); + } + timer->stamp(); + comm->borders(); + if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); + timer->stamp(Timer::COMM); + neighbor->build(1); + timer->stamp(Timer::NEIGH); + } + force_clear(); + + if (pair_compute_flag) { + force->pair->compute(eflag,vflag); + timer->stamp(Timer::PAIR); + } + if (atom->molecular) { + if (force->bond) force->bond->compute(eflag,vflag); + if (force->angle) force->angle->compute(eflag,vflag); + if (force->dihedral) force->dihedral->compute(eflag,vflag); + if (force->improper) force->improper->compute(eflag,vflag); + timer->stamp(Timer::BOND); + } + if (kspace_compute_flag) { + force->kspace->compute(eflag,vflag); + timer->stamp(Timer::KSPACE); + } + if (force->newton) { + comm->reverse_comm(); + timer->stamp(Timer::COMM); + } +} + +/* ---------------------------------------------------------------------- + clear force on own & ghost atoms + clear other arrays as needed +------------------------------------------------------------------------- */ + +void DynamicalMatrix::force_clear() +{ + if (external_force_clear) return; + + // clear global force array + // if either newton flag is set, also include ghosts + + size_t nbytes = sizeof(double) * atom->nlocal; + if (force->newton) nbytes += sizeof(double) * atom->nghost; + + if (nbytes) { + memset(&atom->f[0][0],0,3*nbytes); + } +} + +/* ---------------------------------------------------------------------- */ + +void DynamicalMatrix::convert_units(const char *style) +{ + // physical constants from: + // http://physics.nist.gov/cuu/Constants/Table/allascii.txt + // using thermochemical calorie = 4.184 J + + if (strcmp(style,"lj") == 0) { + error->all(FLERR,"Conversion Not Set"); + //conversion = 1; // lj -> 10 J/mol + + } else if (strcmp(style,"real") == 0) { + conv_energy = 418.4; // kcal/mol -> 10 J/mol + conv_mass = 1; // g/mol -> g/mol + conv_distance = 1; // angstrom -> angstrom + + } else if (strcmp(style,"metal") == 0) { + conv_energy = 9648.5; // eV -> 10 J/mol + conv_mass = 1; // g/mol -> g/mol + conv_distance = 1; // angstrom -> angstrom + + } else if (strcmp(style,"si") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Multiplication by Large Float"); + conv_energy = 6.022E22; // J -> 10 J/mol + conv_mass = 6.022E26; // kg -> g/mol + conv_distance = 1E-10; // meter -> angstrom + + } else if (strcmp(style,"cgs") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Multiplication by Large Float"); + conv_energy = 6.022E12; // Erg -> 10 J/mol + conv_mass = 6.022E23; // g -> g/mol + conv_distance = 1E-7; // centimeter -> angstrom + + } else if (strcmp(style,"electron") == 0) { + conv_energy = 262550; // Hartree -> 10 J/mol + conv_mass = 1; // amu -> g/mol + conv_distance = 0.529177249; // bohr -> angstrom + + } else if (strcmp(style,"micro") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Untested Conversion"); + conv_energy = 6.022E10; // picogram-micrometer^2/microsecond^2 -> 10 J/mol + conv_mass = 6.022E11; // pg -> g/mol + conv_distance = 1E-4; // micrometer -> angstrom + + } else if (strcmp(style,"nano") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Untested Conversion"); + conv_energy = 6.022E4; // attogram-nanometer^2/nanosecond^2 -> 10 J/mol + conv_mass = 6.022E5; // ag -> g/mol + conv_distance = 0.1; // angstrom -> angstrom + + } else error->all(FLERR,"Units Type Conversion Not Found"); + +} diff --git a/src/USER-PHONON/dynamical_matrix.h b/src/USER-PHONON/dynamical_matrix.h new file mode 100644 index 0000000000..237c3f7d27 --- /dev/null +++ b/src/USER-PHONON/dynamical_matrix.h @@ -0,0 +1,72 @@ +// +// Created by charlie sievers on 6/21/18. +// + +#ifdef COMMAND_CLASS + +CommandStyle(dynamical_matrix,DynamicalMatrix) + +#else + +#ifndef LMP_DYNAMICAL_MATRIX_H +#define LMP_DYNAMICAL_MATRIX_H + +#include "pointers.h" + +namespace LAMMPS_NS { + + class DynamicalMatrix : protected Pointers { + public: + DynamicalMatrix(class LAMMPS *); + virtual ~DynamicalMatrix(); + void command(int, char **); + void setup(); + + protected: + int eflag,vflag; // flags for energy/virial computation + int external_force_clear; // clear forces locally or externally + + + int triclinic; // 0 if domain is orthog, 1 if triclinic + int pairflag; + + int pair_compute_flag; // 0 if pair->compute is skipped + int kspace_compute_flag; // 0 if kspace->compute is skipped + + int nvec; // local atomic dof = length of xvec + + void energy_force(int); + void force_clear(); + virtual void openfile(const char* filename); + + private: + void options(int, char **); + void calculateMatrix(); + void writeMatrix(); + void convert_units(const char *style); + void displace_atom(int local_idx, int direction, int magnitude); + + double conversion; + double conv_energy; + double conv_distance; + double conv_mass; + double del; + int igroup,groupbit; + int scaleflag; + int me; + bigint dynlen; + double **dynmat; + double **final_dynmat; + + int compressed; // 1 if dump file is written compressed, 0 no + int binaryflag; // 1 if dump file is written binary, 0 no + int file_opened; // 1 if openfile method has been called, 0 no + int file_flag; // 1 custom file name, 0 dynmat.dat + + FILE *fp; + }; +} + + +#endif //LMP_DYNAMICAL_MATRIX_H +#endif \ No newline at end of file diff --git a/src/USER-PHONON/third_order.cpp b/src/USER-PHONON/third_order.cpp new file mode 100644 index 0000000000..6fb8589c3b --- /dev/null +++ b/src/USER-PHONON/third_order.cpp @@ -0,0 +1,529 @@ +// +// Created by charlie sievers on 7/5/18. +// + + +#include +#include +#include "third_order.h" +#include "atom.h" +#include "complex" +#include "domain.h" +#include "comm.h" +#include "group.h" +#include "force.h" +#include "math_extra.h" +#include "bond.h" +#include "angle.h" +#include "dihedral.h" +#include "improper.h" +#include "kspace.h" +#include "update.h" +#include "neighbor.h" +#include "pair.h" +#include "timer.h" +#include "finish.h" + + +using namespace LAMMPS_NS; +enum{REGULAR,BALLISTICO}; + +/* ---------------------------------------------------------------------- */ + +ThirdOrder::ThirdOrder(LAMMPS *lmp) : Pointers(lmp), fp(NULL) +{ + external_force_clear = 1; +} + +/* ---------------------------------------------------------------------- */ + +ThirdOrder::~ThirdOrder() +{ + if (fp) fclose(fp); + fp = NULL; +} + +/* ---------------------------------------------------------------------- + setup without output or one-time post-init setup + flag = 0 = just force calculation + flag = 1 = reneighbor and force calculation +------------------------------------------------------------------------- */ + +void ThirdOrder::setup() +{ + // setup domain, communication and neighboring + // acquire ghosts + // build neighbor lists + if (triclinic) domain->x2lamda(atom->nlocal); + domain->pbc(); + domain->reset_box(); + comm->setup(); + if (neighbor->style) neighbor->setup_bins(); + comm->exchange(); + comm->borders(); + if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); + domain->image_check(); + domain->box_too_small_check(); + neighbor->build(1); + neighbor->ncalls = 0; + neighbor->every = 3; // build every this many steps + neighbor->delay = 1; + neighbor->ago = 0; + neighbor->ndanger = 0; + + // compute all forces + force_clear(); + external_force_clear = 0; + + eflag=0; + vflag=0; + if (pair_compute_flag) force->pair->compute(eflag,vflag); + else if (force->pair) force->pair->compute_dummy(eflag,vflag); + + if (atom->molecular) { + if (force->bond) force->bond->compute(eflag,vflag); + if (force->angle) force->angle->compute(eflag,vflag); + if (force->dihedral) force->dihedral->compute(eflag,vflag); + if (force->improper) force->improper->compute(eflag,vflag); + } + + if (force->kspace) { + force->kspace->setup(); + if (kspace_compute_flag) force->kspace->compute(eflag,vflag); + else force->kspace->compute_dummy(eflag,vflag); + } + + if (force->newton) comm->reverse_comm(); +} + +/* ---------------------------------------------------------------------- */ + +void ThirdOrder::command(int narg, char **arg) +{ + MPI_Comm_rank(world,&me); + + if (domain->box_exist == 0) + error->all(FLERR,"Dynamical_matrix command before simulation box is defined"); + if (narg < 2) error->all(FLERR,"Illegal dynamical_matrix command"); + + lmp->init(); + + // orthogonal vs triclinic simulation box + + triclinic = domain->triclinic; + + if (force->pair && force->pair->compute_flag) pair_compute_flag = 1; + else pair_compute_flag = 0; + if (force->kspace && force->kspace->compute_flag) kspace_compute_flag = 1; + else kspace_compute_flag = 0; + + // group and style + + igroup = group->find(arg[0]); + if (igroup == -1) error->all(FLERR,"Could not find dynamical matrix group ID"); + groupbit = group->bitmask[igroup]; + update->setupflag = 1; + + int style = -1; + if (strcmp(arg[1],"regular") == 0) style = REGULAR; + else if (strcmp(arg[1],"ballistico") == 0) style = BALLISTICO; + else error->all(FLERR,"Illegal Dynamical Matrix command"); + + // set option defaults + + binaryflag = 0; + scaleflag = 0; + compressed = 0; + file_flag = 0; + file_opened = 0; + conversion = 1; + + // read options from end of input line + if (style == REGULAR) options(narg-3,&arg[3]); //COME BACK + else if (style == BALLISTICO) options(narg-3,&arg[3]); //COME BACK + else if (comm->me == 0 && screen) fprintf(screen,"Illegal Dynamical Matrix command\n"); + del = force->numeric(FLERR, arg[2]); + + // move atoms by 3-vector or specified variable(s) + + if (style == REGULAR) { + setup(); + calculateMatrix(); + } + + if (style == BALLISTICO) { + setup(); + convert_units(update->unit_style); + conversion = conv_energy/conv_distance/conv_distance; + calculateMatrix(); + } + + Finish finish(lmp); + finish.end(1); +} + +/* ---------------------------------------------------------------------- + parse optional parameters +------------------------------------------------------------------------- */ + +void ThirdOrder::options(int narg, char **arg) +{ + if (narg < 0) error->all(FLERR,"Illegal dynamical_matrix command"); + int iarg = 0; + const char *filename = "third_order.txt"; + std::stringstream fss; + + while (iarg < narg) { + if (strcmp(arg[iarg],"file") == 0) { + if (iarg+2 > narg) error->all(FLERR, "Illegal dynamical_matrix command"); + fss << arg[iarg + 1] << me; + filename = fss.str().c_str(); + file_flag = 1; + iarg += 2; + } + else if (strcmp(arg[iarg],"binary") == 0) { + if (iarg + 2 > narg) error->all(FLERR, "Illegal dynamical_matrix command"); + if (strcmp(arg[iarg+1],"gzip") == 0) { + compressed = 1; + } + else if (strcmp(arg[iarg+1],"yes") == 0) { + binaryflag = 1; + } + iarg += 2; + } else error->all(FLERR,"Illegal dynamical_matrix command"); + } + if (file_flag == 1) { + openfile(filename); + } +} + +/* ---------------------------------------------------------------------- + generic opening of a file + ASCII or binary or gzipped + some derived classes override this function +------------------------------------------------------------------------- */ + +void ThirdOrder::openfile(const char* filename) +{ + // if file already opened, return + if (file_opened) return; + + if (compressed) { +#ifdef LAMMPS_GZIP + char gzip[128]; + sprintf(gzip,"gzip -6 > %s",filename); +#ifdef _WIN32 + fp = _popen(gzip,"wb"); +#else + fp = popen(gzip,"w"); +#endif +#else + error->one(FLERR,"Cannot open gzipped file"); +#endif + } else if (binaryflag) { + fp = fopen(filename,"wb"); + } else { + fp = fopen(filename,"w"); + } + + if (fp == NULL) error->one(FLERR,"Cannot open dump file"); + + file_opened = 1; +} + +/* ---------------------------------------------------------------------- + create dynamical matrix +------------------------------------------------------------------------- */ + +void ThirdOrder::calculateMatrix() +{ + int local_idx; // local index + int local_jdx; // second local index + int local_kdx; // third local index + int natoms = atom->natoms; + int *mask = atom->mask; + double **f = atom->f; + + energy_force(0); + + if (comm->me == 0 && screen) fprintf(screen,"Calculating Anharmonic Dynamical Matrix...\n"); + + for (int i=1; i<=natoms; i++){ + local_idx = atom->map(i); + if (local_idx >= 0 && mask[local_idx] && groupbit){ + for (int alpha=0; alpha<3; alpha++){ + displace_atom(local_idx, alpha, 1); + for (int j=1; j<=natoms; j++){ + local_jdx = atom->map(j); + if (local_jdx >= 0&& mask[local_jdx] && groupbit){ + for (int beta=0; beta<3; beta++){ + } + } + } + displace_atom(local_idx,alpha,-2); + for (int j=1; j<=natoms; j++){ + local_jdx = atom->map(j); + if (local_jdx >= 0 && mask[local_jdx] && groupbit){ + for (int beta=0; beta<3; beta++){ + + } + } + } + displace_atom(local_idx,alpha,1); + } + } + } + + //for (int proc1=0; proc1 < comm->nprocs; proc1++) { + // plocal1 = atom->nlocal; // 1 proc nlocal = 8 + // MPI_Bcast(&plocal1, 1, MPI_INT, proc1, MPI_COMM_WORLD); // plocal1 = 8 + // for (int i = 0; i < plocal1; i++) { + // if (me==proc1 & mask[i] & groupbit) + // group_flag_1 = 1; + // MPI_Bcast(&group_flag_1, 1, MPI_INT, proc1, MPI_COMM_WORLD); + // if (group_flag_1) { + // if (me == proc1) id1 = aid[i]; + // MPI_Bcast(&id1, 1, MPI_INT, proc1, MPI_COMM_WORLD); + // for (int alpha = 0; alpha < 3; alpha++) { + // for (int proc2 = 0; proc2 < comm->nprocs; proc2++) { + // plocal2 = atom->nlocal; + // MPI_Bcast(&plocal2, 1, MPI_INT, proc2, MPI_COMM_WORLD); + // for (int j = 0; j < plocal2; j++) { + // if (me==proc2 & mask[j] & groupbit) + // group_flag_2 = 1; + // MPI_Bcast(&group_flag_2, 1, MPI_INT, proc2, MPI_COMM_WORLD); + // if (mask[j] & groupbit) { + // if (me == proc2) id2 = aid[j]; + // MPI_Bcast(&id2, 1, MPI_INT, proc2, MPI_COMM_WORLD); + // for (int beta = 0; beta < 3; beta++) { +// + // if (me == proc1) x[i][alpha] += del; +// + // if (me == proc2) x[j][beta] += del; + // energy_force(0); +//// + // for (int gamma = 0; gamma < 3; gamma++) { + // for (int k = 0; k < nlocal; k++) + // if (mask[k] & groupbit) { + // first_derv[k*3+gamma] = f[k][gamma]; + // } + // } +// + // if (me == proc2) x[j][beta] -= 2 * del; + // energy_force(0); +//// + // for (int gamma = 0; gamma < 3; gamma++) { + // for (int k = 0; k < nlocal; k++) + // if (mask[k] & groupbit) { + // first_derv[k*3+gamma] -= f[k][gamma]; + // } + // } +// + // if (me == proc2) x[j][beta] += 2 * del; +// + // if (me == proc1) x[i][alpha] -= 2 * del; +// + // energy_force(0); +//// + // for (int gamma = 0; gamma < 3; gamma++) { + // for (int k = 0; k < nlocal; k++) + // if (mask[k] & groupbit) { + // first_derv[k*3+gamma] -= f[k][gamma]; + // } + // } +//// + // if (me == proc2) x[j][beta] -= 2 * del; + // energy_force(0); +//// + // for (int k = 0; k < nlocal; k++) + // if (mask[k] & groupbit) { + // for (int gamma = 0; gamma < 3; gamma++) { + // first_derv[k*3+gamma] += f[k][gamma]; + // first_derv[k*3+gamma] /= -4*del*del; + // } + // double norm = pow(first_derv[k*3], 2) + // + pow(first_derv[k*3+1], 2) + // + pow(first_derv[k+3+2], 2); + // if (fp && norm > 1.0e-16) + // fprintf(fp, + // "%d %d %d %d %d %7.8f %7.8f %7.8f\n", + // id1, alpha + 1, id2, beta + 1, aid[k], + // first_derv[k*3] * conversion, + // first_derv[k*3+1] * conversion, + // first_derv[k*3+2] * conversion); + // } +//// + // if (me == proc2) x[j][beta] += del; +// + // if (me == proc1) x[i][alpha] += del; + // } + // } + // } + // } +//// + // } + // } + // } + //} +// + + if (screen && me ==0 ) fprintf(screen,"Finished Calculating Third Order Tensor\n"); + +} + +/* ---------------------------------------------------------------------- + Displace atoms + ---------------------------------------------------------------------- */ + +void ThirdOrder::displace_atom(int local_idx, int direction, int magnitude) +{ + double **x = atom->x; + int *sametag = atom->sametag; + int j = local_idx; + + x[local_idx][direction] += del*magnitude; + + while (sametag[j] >= 0){ + j = sametag[j]; + x[j][direction] += del*magnitude; + } +} + +/* ---------------------------------------------------------------------- + evaluate potential energy and forces + may migrate atoms due to reneighboring + return new energy, which should include nextra_global dof + return negative gradient stored in atom->f + return negative gradient for nextra_global dof in fextra +------------------------------------------------------------------------- */ + +void ThirdOrder::energy_force(int resetflag) +{ + // check for reneighboring + // always communicate since atoms move + int nflag = neighbor->decide(); + + if (nflag == 0) { + timer->stamp(); + comm->forward_comm(); + timer->stamp(Timer::COMM); + } else { + if (triclinic) domain->x2lamda(atom->nlocal); + domain->pbc(); + if (domain->box_change) { + domain->reset_box(); + comm->setup(); + if (neighbor->style) neighbor->setup_bins(); + } + timer->stamp(); + + comm->borders(); + if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); + timer->stamp(Timer::COMM); + + neighbor->build(1); + timer->stamp(Timer::NEIGH); + } + + force_clear(); + + timer->stamp(); + + if (pair_compute_flag) { + force->pair->compute(eflag,vflag); + timer->stamp(Timer::PAIR); + } + + if (atom->molecular) { + if (force->bond) force->bond->compute(eflag,vflag); + if (force->angle) force->angle->compute(eflag,vflag); + if (force->dihedral) force->dihedral->compute(eflag,vflag); + if (force->improper) force->improper->compute(eflag,vflag); + timer->stamp(Timer::BOND); + } + + if (kspace_compute_flag) { + force->kspace->compute(eflag,vflag); + timer->stamp(Timer::KSPACE); + } + + if (force->newton) { + comm->reverse_comm(); + timer->stamp(Timer::COMM); + } +} + +/* ---------------------------------------------------------------------- + clear force on own & ghost atoms + clear other arrays as needed +------------------------------------------------------------------------- */ + +void ThirdOrder::force_clear() +{ + if (external_force_clear) return; + + // clear global force array + // if either newton flag is set, also include ghosts + + size_t nbytes = sizeof(double) * atom->nlocal; + if (force->newton) nbytes += sizeof(double) * atom->nghost; + + if (nbytes) { + memset(&atom->f[0][0],0,3*nbytes); + } +} + +/* ---------------------------------------------------------------------- */ + +void ThirdOrder::convert_units(const char *style) +{ + // physical constants from: + // http://physics.nist.gov/cuu/Constants/Table/allascii.txt + // using thermochemical calorie = 4.184 J + + if (strcmp(style,"lj") == 0) { + error->all(FLERR,"Conversion Not Set"); + //conversion = 1; // lj -> 10 J/mol + + } else if (strcmp(style,"real") == 0) { + conv_energy = 418.4; // kcal/mol -> 10 J/mol + conv_mass = 1; // g/mol -> g/mol + conv_distance = 1; // angstrom -> angstrom + + } else if (strcmp(style,"metal") == 0) { + conv_energy = 9648.5; // eV -> 10 J/mol + conv_mass = 1; // g/mol -> g/mol + conv_distance = 1; // angstrom -> angstrom + + } else if (strcmp(style,"si") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Multiplication by Large Float"); + conv_energy = 6.022E22; // J -> 10 J/mol + conv_mass = 6.022E26; // kg -> g/mol + conv_distance = 1E-10; // meter -> angstrom + + } else if (strcmp(style,"cgs") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Multiplication by Large Float"); + conv_energy = 6.022E12; // Erg -> 10 J/mol + conv_mass = 6.022E23; // g -> g/mol + conv_distance = 1E-7; // centimeter -> angstrom + + } else if (strcmp(style,"electron") == 0) { + conv_energy = 262550; // Hartree -> 10 J/mol + conv_mass = 1; // amu -> g/mol + conv_distance = 0.529177249; // bohr -> angstrom + + } else if (strcmp(style,"micro") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Untested Conversion"); + conv_energy = 6.022E10; // picogram-micrometer^2/microsecond^2 -> 10 J/mol + conv_mass = 6.022E11; // pg -> g/mol + conv_distance = 1E-4; // micrometer -> angstrom + + } else if (strcmp(style,"nano") == 0) { + if (comm->me) error->warning(FLERR,"Conversion Warning: Untested Conversion"); + conv_energy = 6.022E4; // attogram-nanometer^2/nanosecond^2 -> 10 J/mol + conv_mass = 6.022E5; // ag -> g/mol + conv_distance = 0.1; // angstrom -> angstrom + + } else error->all(FLERR,"Units Type Conversion Not Found"); + +} diff --git a/src/USER-PHONON/third_order.h b/src/USER-PHONON/third_order.h new file mode 100644 index 0000000000..0bbdc21939 --- /dev/null +++ b/src/USER-PHONON/third_order.h @@ -0,0 +1,71 @@ +// +// Created by charlie sievers on 7/5/18. +// + + +#ifdef COMMAND_CLASS + +CommandStyle(third_order,ThirdOrder) + +#else + +#ifndef LMP_THIRD_ORDER_H +#define LMP_THIRD_ORDER_H + +#include "pointers.h" + +namespace LAMMPS_NS { + + class ThirdOrder : protected Pointers { + public: + ThirdOrder(class LAMMPS *); + virtual ~ThirdOrder(); + void command(int, char **); + void setup(); + + protected: + int eflag,vflag; // flags for energy/virial computation + int external_force_clear; // clear forces locally or externally + + + int triclinic; // 0 if domain is orthog, 1 if triclinic + int pairflag; + + int pair_compute_flag; // 0 if pair->compute is skipped + int kspace_compute_flag; // 0 if kspace->compute is skipped + + int nvec; // local atomic dof = length of xvec + + void energy_force(int); + void force_clear(); + virtual void openfile(const char* filename); + + + private: + void options(int, char **); + void calculateMatrix(); + void convert_units(const char *style); + void displace_atom(int local_idx, int direction, int magnitude); + + double conversion; + double conv_energy; + double conv_distance; + double conv_mass; + double del; + int igroup,groupbit; + int scaleflag; + int me; + + int compressed; // 1 if dump file is written compressed, 0 no + int binaryflag; // 1 if dump file is written binary, 0 no + int file_opened; // 1 if openfile method has been called, 0 no + int file_flag; // 1 custom file name, 0 dynmat.dat + + FILE *fp; + }; +} + + +#endif //LMP_THIRD_ORDER_H +#endif + From adebe90315bfdf6190848b0cba3d55365e3f90a4 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Fri, 1 Feb 2019 21:55:29 -0800 Subject: [PATCH 044/143] Optimized Dynamical Matrix --- .../phonon/dynamical_matrix_command/Manual.md | 48 + .../phonon/dynamical_matrix_command/README.md | 21 + .../dynamical_matrix_command/Si.opt.tersoff | 66 + .../dynamical_matrix_command/ff-silicon.lmp | 19 + .../dynamical_matrix_command/in.silicon | 89 + .../lmp_bank/amorphous_silicon.lmp | 534 ++ .../lmp_bank/silicon_216.lmp | 238 + .../lmp_bank/silicon_512.lmp | 534 ++ .../lmp_bank/silicon_8.lmp | 29 + .../results/dynmat.dat | 192 + .../results/out.silicon | 58 + .../silicon_input_file.lmp | 29 + .../USER/phonon/third_order_command/Manual.md | 48 + .../USER/phonon/third_order_command/README.md | 25 + .../phonon/third_order_command/Si.opt.tersoff | 66 + .../phonon/third_order_command/combine.sh | 17 + .../phonon/third_order_command/ff-silicon.lmp | 19 + .../phonon/third_order_command/in.silicon | 84 + .../lmp_bank/silicon_216.lmp | 238 + .../lmp_bank/silicon_512.lmp | 534 ++ .../lmp_bank/silicon_8.lmp | 29 + .../third_order_command/results/out.silicon | 58 + .../third_order_command/results/third_order | 4608 +++++++++++++++++ .../silicon_input_file.lmp | 29 + src/USER-PHONON/dynamical_matrix.cpp | 58 +- 25 files changed, 7642 insertions(+), 28 deletions(-) create mode 100755 examples/USER/phonon/dynamical_matrix_command/Manual.md create mode 100755 examples/USER/phonon/dynamical_matrix_command/README.md create mode 100755 examples/USER/phonon/dynamical_matrix_command/Si.opt.tersoff create mode 100755 examples/USER/phonon/dynamical_matrix_command/ff-silicon.lmp create mode 100755 examples/USER/phonon/dynamical_matrix_command/in.silicon create mode 100755 examples/USER/phonon/dynamical_matrix_command/lmp_bank/amorphous_silicon.lmp create mode 100755 examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_216.lmp create mode 100755 examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_512.lmp create mode 100755 examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_8.lmp create mode 100755 examples/USER/phonon/dynamical_matrix_command/results/dynmat.dat create mode 100755 examples/USER/phonon/dynamical_matrix_command/results/out.silicon create mode 100755 examples/USER/phonon/dynamical_matrix_command/silicon_input_file.lmp create mode 100755 examples/USER/phonon/third_order_command/Manual.md create mode 100755 examples/USER/phonon/third_order_command/README.md create mode 100755 examples/USER/phonon/third_order_command/Si.opt.tersoff create mode 100755 examples/USER/phonon/third_order_command/combine.sh create mode 100755 examples/USER/phonon/third_order_command/ff-silicon.lmp create mode 100755 examples/USER/phonon/third_order_command/in.silicon create mode 100755 examples/USER/phonon/third_order_command/lmp_bank/silicon_216.lmp create mode 100755 examples/USER/phonon/third_order_command/lmp_bank/silicon_512.lmp create mode 100755 examples/USER/phonon/third_order_command/lmp_bank/silicon_8.lmp create mode 100755 examples/USER/phonon/third_order_command/results/out.silicon create mode 100755 examples/USER/phonon/third_order_command/results/third_order create mode 100755 examples/USER/phonon/third_order_command/silicon_input_file.lmp diff --git a/examples/USER/phonon/dynamical_matrix_command/Manual.md b/examples/USER/phonon/dynamical_matrix_command/Manual.md new file mode 100755 index 0000000000..c361f80325 --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/Manual.md @@ -0,0 +1,48 @@ +# dynamical_matrix command + +## Syntax + +``` +dynamical_matrix group-ID style args keyword value ... +``` + +* group-ID = ID of group of atoms to displace +* style = *regular* or *eskm* +``` +*regular* args = gamma + gamma = finite difference displacement length +*eskm* args = gamma + gamma = finite difference displacement length +``` +* zero or more keyword/value pairs may be appended +* keyword = *file* or *binary* +``` +*file* value = output_file + output_file = name of file to dump the dynamical matrix into +*binary* values = *yes* or *no* or *gzip* +``` + +## Examples + +``` +dynamical_matrix 1 regular 0.000001 +dynamical_matrix 1 eskm 0.000001 +dynamical_matrix 3 regular 0.00004 file dynmat.dat +dynamical_matrix 5 eskm 0.00000001 file dynamical.dat binary yes +``` + +## Description + +Calculate the dynamical matrix of the selected group. + +## Restrictions + +None + +## Related commands + +None + +## Default + +The option defaults are file = "dynmat.dyn", binary = no diff --git a/examples/USER/phonon/dynamical_matrix_command/README.md b/examples/USER/phonon/dynamical_matrix_command/README.md new file mode 100755 index 0000000000..8981c1e63a --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/README.md @@ -0,0 +1,21 @@ +# LAMMPS LATTICE DYNAMICS COMMANDS + +## DYNAMICAL MATRIX CALCULATOR + +This directory contains the ingredients to calculate a dynamical matrix. + +Example: +``` +NP=4 #number of processors +mpirun -np $NP lmp_mpi < in.silicon > out.silicon +``` + +To test out a different silicon example: +``` +LMP_FILE=amorphous_silicon.lmp +cp lmp_bank/$LMP_FILE ./silicon_input_file.lmp +NP=4 #number of processors +mpirun -np $NP lmp_mpi < in.silicon > out.silicon +``` + +## Requires: MANYBODY and MOLECULE packages diff --git a/examples/USER/phonon/dynamical_matrix_command/Si.opt.tersoff b/examples/USER/phonon/dynamical_matrix_command/Si.opt.tersoff new file mode 100755 index 0000000000..3bc19f0581 --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/Si.opt.tersoff @@ -0,0 +1,66 @@ +# Tersoff parameters for various elements and mixtures +# multiple entries can be added to this file, LAMMPS reads the ones it needs +# these entries are in LAMMPS "metal" units: +# A,B = eV; lambda1,lambda2,lambda3 = 1/Angstroms; R,D = Angstroms +# other quantities are unitless + +# Aidan Thompson (athomps at sandia.gov) takes full blame for this +# file. It specifies various potentials published by J. Tersoff for +# silicon, carbon and germanium. Since Tersoff published several +# different silicon potentials, I refer to them using atom types +# Si(B), Si(C) and Si(D). The last two are almost almost identical but +# refer to two different publications. These names should be used in +# the LAMMPS command when the file is invoked. For example: +# pair_coeff * * SiCGe.tersoff Si(B). The Si(D), C and Ge potentials +# can be used pure silicon, pure carbon, pure germanium, binary SiC, +# and binary SiGe, but not binary GeC or ternary SiGeC. LAMMPS will +# generate an error if this file is used with any combination +# involving C and Ge, since there are no entries for the GeC +# interactions (Tersoff did not publish parameters for this +# cross-interaction.) + +# format of a single entry (one or more lines): +# element 1, element 2, element 3, +# m, gamma, lambda3, c, d, costheta0, n, beta, lambda2, B, R, D, lambda1, A + +# The original Tersoff potential for Silicon, Si(B) +# J. Tersoff, PRB, 37, 6991 (1988) + +Si(B) Si(B) Si(B) 3.0 1.0 1.3258 4.8381 2.0417 0.0000 22.956 + 0.33675 1.3258 95.373 3.0 0.2 3.2394 3264.7 + +# The later Tersoff potential for Silicon, Si(C) +# J. Tersoff, PRB, 38, 9902 (1988) + +Si(C) Si(C) Si(C) 3.0 1.0 1.7322 1.0039e5 16.218 -0.59826 0.78734 + 1.0999e-6 1.7322 471.18 2.85 0.15 2.4799 1830.8 + +# The later Tersoff potential for Carbon, Silicon, and Germanium +# J. Tersoff, PRB, 39, 5566 (1989) + errata (PRB 41, 3248) +# The Si and C parameters are very close to those in SiC.tersoff + +C C C 3.0 1.0 0.0 3.8049e4 4.3484 -0.57058 0.72751 1.5724e-7 2.2119 346.74 1.95 0.15 3.4879 1393.6 +Si(D) Si(D) Si(D) 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 1.1000e-6 1.7322 471.18 2.85 0.15 2.4799 1830.8 +Ge Ge Ge 3.0 1.0 0.0 1.0643e5 15.652 -0.43884 0.75627 9.0166e-7 1.7047 419.23 2.95 0.15 2.4451 1769.0 + +C Si(D) Si(D) 3.0 1.0 0.0 3.8049e4 4.3484 -0.57058 0.72751 1.5724e-7 1.97205 395.1451 2.3573 0.1527 2.9839 1597.3111 +C Si(D) C 3.0 1.0 0.0 3.8049e4 4.3484 -0.57058 0.72751 0.0 0.0 0.0 1.95 0.15 0.0 0.0 +C C Si(D) 3.0 1.0 0.0 3.8049e4 4.3484 -0.57058 0.72751 0.0 0.0 0.0 2.3573 0.1527 0.0 0.0 + +Si(D) C C 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 1.1000e-6 1.97205 395.1451 2.3573 0.1527 2.9839 1597.3111 +Si(D) Si(D) C 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 0.0 0.0 0.0 2.3573 0.1527 0.0 0.0 +Si(D) C Si(D) 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 0.0 0.0 0.0 2.85 0.15 0.0 0.0 + +Si(D) Ge Ge 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 1.1000e-6 1.71845 444.7177 2.8996 0.1500 2.4625 1799.6347 +Si(D) Si(D) Ge 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 0.0 0.0 0.0 2.8996 0.1500 0.0 0.0 +Si(D) Ge Si(D) 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 0.0 0.0 0.0 2.85 0.15 0.0 0.0 + +Ge Si(D) Si(D) 3.0 1.0 0.0 1.0643e5 15.652 -0.43884 0.75627 9.0166e-7 1.71845 444.7177 2.8996 0.1500 2.4625 1799.6347 +Ge Si(D) Ge 3.0 1.0 0.0 1.0643e5 15.652 -0.43884 0.75627 0.0 0.0 0.0 2.95 0.15 0.0 0.0 +Ge Ge Si(D) 3.0 1.0 0.0 1.0643e5 15.652 -0.43884 0.75627 0.0 0.0 0.0 2.8996 0.1500 0.0 0.0 + +# Optimized Tersoff for Carbon: Lindsay and Broido PRB 81, 205441 (2010) +# element 1, element 2, element 3, +# m, gamma, lambda3, c, d, costheta0, n, beta, lambda2, B, R, D, lambda1, A +C(O) C(O) C(O) 3.0 1.0 0.0 3.8049e4 4.3484 -0.930 0.72751 1.5724e-7 2.2119 430.0 1.95 0.15 3.4879 1393.6 + diff --git a/examples/USER/phonon/dynamical_matrix_command/ff-silicon.lmp b/examples/USER/phonon/dynamical_matrix_command/ff-silicon.lmp new file mode 100755 index 0000000000..f3b895f168 --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/ff-silicon.lmp @@ -0,0 +1,19 @@ +############################# +#Atoms types - mass - charge# +############################# +#@ 1 atom types #!THIS LINE IS NECESSARY DON'T SPEND HOURS FINDING THAT OUT!# + +variable Si equal 1 + +############# +#Atom Masses# +############# + +mass ${Si} 28.08550 + +########################### +#Pair Potentials - Tersoff# +########################### + +pair_style tersoff +pair_coeff * * Si.opt.tersoff Si(D) diff --git a/examples/USER/phonon/dynamical_matrix_command/in.silicon b/examples/USER/phonon/dynamical_matrix_command/in.silicon new file mode 100755 index 0000000000..cda0ee8c58 --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/in.silicon @@ -0,0 +1,89 @@ +###############################mm +# Atom style - charge/vdw/bonded# +################################# +atom_style full + +############################################## +#Units Metal : eV - ps - angstrom - bar# +# Real : kcal/mol - fs - angstrom - atm# +############################################## +units metal + +############ +#Run number# +############ +variable run_no equal 0 # is it a restart? +variable res_no equal ${run_no}-1 # restart file number + +####################################### +#Random Seeds and Domain Decomposition# +####################################### +variable iseed0 equal 2357 +variable iseed1 equal 26488 +variable iseed2 equal 10669 +processors * * * + +########### +#Data File# +########### +variable inpfile string silicon_input_file.lmp +variable resfile string final_restart.${res_no} +variable ff_file string ff-silicon.lmp + +########## +#Run Type# +########## +variable minimise equal 0 #Energy Minimization + +############################### +#Molecular Dynamics Parameters# +############################### +neighbor 1 bin + +################################ +#Energy Minimization Parameters# +################################ +variable mtraj equal 1 # trajectory output frequency - all system +variable etol equal 1e-5 # % change in energy +variable ftol equal 1e-5 # max force threshold (force units) +variable maxiter equal 10000 # max # of iterations + +######################## +#3D Periodic Simulation# +######################## +boundary p p p + +############################# +#Reading the input structure# +############################# +if "${run_no} == 0" then "read_data ${inpfile}" else "read_restart ${resfile}" + +############# +#Force Field# +############# +include ${ff_file} + +###################### +#Thermodynamic Output# +###################### +variable str_basic string 'step time pe temp press' + +##################### +#Energy Minimization# +##################### +if "${minimise} <= 0 || ${run_no} > 0" then "jump SELF end_minimise" + print "Doing CG minimisation" + dump mdcd all dcd ${mtraj} min.dcd + dump_modify mdcd unwrap yes + min_style cg + min_modify line quadratic + minimize ${etol} ${ftol} ${maxiter} ${maxiter} + reset_timestep 0 + undump mdcd +label end_minimise + +################## +#Dynamical Matrix# +################## +dynamical_matrix all eskm 0.000001 file dynmat.dat binary no + diff --git a/examples/USER/phonon/dynamical_matrix_command/lmp_bank/amorphous_silicon.lmp b/examples/USER/phonon/dynamical_matrix_command/lmp_bank/amorphous_silicon.lmp new file mode 100755 index 0000000000..036ece0279 --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/lmp_bank/amorphous_silicon.lmp @@ -0,0 +1,534 @@ +LAMMPS description + + 512 atoms + 0 bonds + 0 angles + 0 dihedrals + 0 impropers + + 1 atom types + 0 bond types + 0 angle types + 0 dihedral types + 0 improper types + + + 0.0000000 21.848000 xlo xhi + 0.0000000 21.848000 ylo yhi + 0.0000000 21.848000 zlo zhi + + Atoms + + 1 1 1 0.0000000 6.2030000 5.5980000 12.9980000 + 2 2 1 0.0000000 21.3100000 5.6310000 21.1380000 + 3 3 1 0.0000000 19.5320000 6.1170000 3.6940000 + 4 4 1 0.0000000 4.3700000 14.0260000 0.0900000 + 5 5 1 0.0000000 10.1930000 7.4590000 2.3530000 + 6 6 1 0.0000000 17.5070000 14.1860000 3.6790000 + 7 7 1 0.0000000 11.2050000 15.9160000 15.0480000 + 8 8 1 0.0000000 8.6050000 19.8970000 21.0040000 + 9 9 1 0.0000000 15.0360000 17.5650000 1.3640000 + 10 10 1 0.0000000 12.0450000 3.3600000 7.2720000 + 11 11 1 0.0000000 7.1330000 17.4130000 18.0480000 + 12 12 1 0.0000000 8.7340000 6.3830000 3.8480000 + 13 13 1 0.0000000 13.0940000 3.2490000 3.5840000 + 14 14 1 0.0000000 11.3200000 7.2770000 20.4120000 + 15 15 1 0.0000000 19.7770000 8.9110000 0.3000000 + 16 16 1 0.0000000 11.9710000 20.8500000 1.5140000 + 17 17 1 0.0000000 10.4480000 10.3650000 15.4040000 + 18 18 1 0.0000000 9.2060000 9.4670000 10.2240000 + 19 19 1 0.0000000 8.4360000 13.6240000 17.6570000 + 20 20 1 0.0000000 18.2020000 21.1230000 0.1380000 + 21 21 1 0.0000000 3.2970000 19.5740000 14.7410000 + 22 22 1 0.0000000 12.5330000 17.3580000 7.5960000 + 23 23 1 0.0000000 1.4040000 18.1060000 3.1510000 + 24 24 1 0.0000000 17.7440000 13.1530000 16.7940000 + 25 25 1 0.0000000 12.1070000 12.6630000 18.0340000 + 26 26 1 0.0000000 8.7270000 17.1140000 10.4200000 + 27 27 1 0.0000000 13.2330000 16.0380000 13.9210000 + 28 28 1 0.0000000 15.2360000 14.8650000 7.0150000 + 29 29 1 0.0000000 5.5190000 20.8660000 19.9260000 + 30 30 1 0.0000000 16.5810000 9.7460000 15.1710000 + 31 31 1 0.0000000 2.0500000 13.8550000 21.8010000 + 32 32 1 0.0000000 21.2670000 20.8970000 13.6740000 + 33 33 1 0.0000000 9.6900000 6.7650000 0.1950000 + 34 34 1 0.0000000 11.2570000 13.2440000 2.8190000 + 35 35 1 0.0000000 10.7810000 12.7310000 12.1920000 + 36 36 1 0.0000000 16.2630000 7.4100000 1.5360000 + 37 37 1 0.0000000 19.6100000 18.1440000 19.6830000 + 38 38 1 0.0000000 8.1790000 0.1200000 10.1620000 + 39 39 1 0.0000000 17.0520000 20.4210000 15.0450000 + 40 40 1 0.0000000 12.3690000 12.6710000 4.8320000 + 41 41 1 0.0000000 7.8300000 16.6790000 14.2470000 + 42 42 1 0.0000000 1.6790000 9.9500000 1.2660000 + 43 43 1 0.0000000 16.6160000 14.6580000 13.2790000 + 44 44 1 0.0000000 13.7430000 11.9730000 21.5360000 + 45 45 1 0.0000000 5.2590000 15.1850000 9.5720000 + 46 46 1 0.0000000 20.5980000 14.7930000 20.4140000 + 47 47 1 0.0000000 1.5640000 16.8080000 13.0450000 + 48 48 1 0.0000000 21.3670000 11.4610000 20.6420000 + 49 49 1 0.0000000 14.5890000 5.9510000 7.1950000 + 50 50 1 0.0000000 1.0870000 13.5410000 11.3300000 + 51 51 1 0.0000000 6.2040000 4.8970000 16.9420000 + 52 52 1 0.0000000 0.4800000 4.1450000 0.8710000 + 53 53 1 0.0000000 2.0120000 5.7530000 1.8950000 + 54 54 1 0.0000000 9.8460000 19.1320000 7.3060000 + 55 55 1 0.0000000 18.3760000 21.3430000 4.0940000 + 56 56 1 0.0000000 5.2900000 6.5400000 5.3620000 + 57 57 1 0.0000000 1.4110000 6.5750000 4.0580000 + 58 58 1 0.0000000 16.1600000 15.1390000 11.0380000 + 59 59 1 0.0000000 21.0670000 18.3830000 8.6900000 + 60 60 1 0.0000000 18.0250000 17.7750000 1.4340000 + 61 61 1 0.0000000 19.0570000 16.2190000 6.6410000 + 62 62 1 0.0000000 5.1170000 16.5510000 11.5540000 + 63 63 1 0.0000000 14.4810000 7.8720000 12.6320000 + 64 64 1 0.0000000 11.7990000 10.9690000 13.5430000 + 65 65 1 0.0000000 11.2980000 18.5410000 1.5740000 + 66 66 1 0.0000000 16.1280000 19.0390000 19.6440000 + 67 67 1 0.0000000 6.0950000 7.0580000 9.6530000 + 68 68 1 0.0000000 5.3890000 20.2540000 10.7060000 + 69 69 1 0.0000000 17.9160000 18.9070000 21.1540000 + 70 70 1 0.0000000 13.0780000 2.1790000 17.4030000 + 71 71 1 0.0000000 8.0450000 14.3440000 14.0640000 + 72 72 1 0.0000000 14.4380000 6.8780000 14.6950000 + 73 73 1 0.0000000 0.4570000 21.6180000 8.3670000 + 74 74 1 0.0000000 6.4350000 16.9720000 21.7330000 + 75 75 1 0.0000000 8.0530000 4.0310000 20.1860000 + 76 76 1 0.0000000 6.8130000 19.7870000 12.5790000 + 77 77 1 0.0000000 19.0490000 10.8480000 6.0760000 + 78 78 1 0.0000000 2.2540000 7.7370000 0.5320000 + 79 79 1 0.0000000 16.3920000 9.0880000 3.1430000 + 80 80 1 0.0000000 2.3620000 2.5500000 7.5690000 + 81 81 1 0.0000000 16.4560000 18.5670000 3.1120000 + 82 82 1 0.0000000 8.9560000 21.0830000 12.3020000 + 83 83 1 0.0000000 20.5540000 8.9280000 5.9480000 + 84 84 1 0.0000000 13.5930000 8.4890000 16.2370000 + 85 85 1 0.0000000 9.5270000 18.0720000 3.0190000 + 86 86 1 0.0000000 11.3690000 15.3870000 7.1310000 + 87 87 1 0.0000000 8.3670000 13.3960000 11.8610000 + 88 88 1 0.0000000 14.6370000 11.4110000 11.4870000 + 89 89 1 0.0000000 8.4720000 16.0650000 2.4300000 + 90 90 1 0.0000000 8.2360000 5.2200000 18.1710000 + 91 91 1 0.0000000 11.0620000 2.8760000 0.4170000 + 92 92 1 0.0000000 14.0830000 1.3550000 14.0190000 + 93 93 1 0.0000000 20.5600000 4.1900000 19.4660000 + 94 94 1 0.0000000 4.6340000 13.0980000 10.3670000 + 95 95 1 0.0000000 19.9860000 15.5670000 11.7860000 + 96 96 1 0.0000000 21.5070000 4.1860000 14.8350000 + 97 97 1 0.0000000 3.3000000 11.2060000 2.5350000 + 98 98 1 0.0000000 19.2680000 21.0240000 10.9110000 + 99 99 1 0.0000000 12.2370000 19.4650000 19.9000000 + 100 100 1 0.0000000 8.3790000 9.6670000 14.5440000 + 101 101 1 0.0000000 5.4520000 19.1660000 5.6940000 + 102 102 1 0.0000000 15.8720000 15.4140000 0.3070000 + 103 103 1 0.0000000 6.9830000 19.1480000 0.5830000 + 104 104 1 0.0000000 7.9760000 18.3420000 8.5250000 + 105 105 1 0.0000000 13.9710000 6.7570000 1.1860000 + 106 106 1 0.0000000 18.7050000 7.2110000 9.2350000 + 107 107 1 0.0000000 3.2430000 13.6330000 12.1990000 + 108 108 1 0.0000000 1.9830000 10.8340000 5.4640000 + 109 109 1 0.0000000 16.5770000 5.0400000 11.4490000 + 110 110 1 0.0000000 9.5130000 6.2390000 14.3030000 + 111 111 1 0.0000000 14.1990000 4.0910000 16.7750000 + 112 112 1 0.0000000 8.0160000 3.5600000 2.0280000 + 113 113 1 0.0000000 7.9650000 12.1700000 7.8050000 + 114 114 1 0.0000000 0.3770000 0.0320000 15.5780000 + 115 115 1 0.0000000 19.0860000 17.5690000 12.6230000 + 116 116 1 0.0000000 17.2970000 16.8030000 13.9660000 + 117 117 1 0.0000000 6.7180000 10.5880000 19.5790000 + 118 118 1 0.0000000 21.3930000 21.2940000 6.2410000 + 119 119 1 0.0000000 16.0260000 18.7640000 13.6100000 + 120 120 1 0.0000000 3.1880000 2.1990000 18.5690000 + 121 121 1 0.0000000 20.7860000 13.7840000 4.4870000 + 122 122 1 0.0000000 18.3540000 11.7960000 11.0710000 + 123 123 1 0.0000000 19.3210000 0.4960000 5.9630000 + 124 124 1 0.0000000 3.7260000 13.4120000 18.4840000 + 125 125 1 0.0000000 4.4280000 4.9270000 18.4730000 + 126 126 1 0.0000000 2.7040000 21.7660000 15.2940000 + 127 127 1 0.0000000 9.3640000 14.3230000 3.7130000 + 128 128 1 0.0000000 20.5800000 3.3360000 7.9310000 + 129 129 1 0.0000000 2.4060000 4.1320000 17.3120000 + 130 130 1 0.0000000 0.9210000 2.6080000 11.0930000 + 131 131 1 0.0000000 13.7900000 9.5610000 8.2490000 + 132 132 1 0.0000000 5.5210000 8.6760000 2.5590000 + 133 133 1 0.0000000 11.1320000 11.1160000 6.1310000 + 134 134 1 0.0000000 1.6180000 6.5650000 10.7690000 + 135 135 1 0.0000000 21.0480000 17.3880000 3.1250000 + 136 136 1 0.0000000 2.5950000 13.3430000 3.3870000 + 137 137 1 0.0000000 1.8600000 4.7830000 14.1190000 + 138 138 1 0.0000000 1.2420000 12.9340000 9.0760000 + 139 139 1 0.0000000 2.2650000 8.2300000 7.4350000 + 140 140 1 0.0000000 10.9360000 17.8140000 10.9520000 + 141 141 1 0.0000000 10.3160000 13.8030000 14.5060000 + 142 142 1 0.0000000 11.0500000 2.5760000 12.8090000 + 143 143 1 0.0000000 18.3430000 15.3950000 10.0190000 + 144 144 1 0.0000000 8.2990000 0.3320000 5.4980000 + 145 145 1 0.0000000 17.9730000 3.4330000 17.4260000 + 146 146 1 0.0000000 0.8080000 7.5530000 20.4740000 + 147 147 1 0.0000000 20.6320000 14.4730000 6.7080000 + 148 148 1 0.0000000 19.3400000 2.8450000 5.9340000 + 149 149 1 0.0000000 5.2100000 0.9290000 6.2580000 + 150 150 1 0.0000000 8.6370000 4.0920000 9.2870000 + 151 151 1 0.0000000 16.5730000 2.0050000 1.7720000 + 152 152 1 0.0000000 14.6570000 14.1440000 14.4910000 + 153 153 1 0.0000000 11.1610000 6.0610000 15.8870000 + 154 154 1 0.0000000 3.8100000 4.2040000 2.1350000 + 155 155 1 0.0000000 18.6920000 11.8180000 18.5170000 + 156 156 1 0.0000000 20.4240000 10.6340000 10.7960000 + 157 157 1 0.0000000 8.9050000 9.9220000 20.2310000 + 158 158 1 0.0000000 7.7940000 19.5410000 2.7410000 + 159 159 1 0.0000000 2.7600000 18.2100000 9.0140000 + 160 160 1 0.0000000 11.7480000 5.0280000 4.3170000 + 161 161 1 0.0000000 20.6470000 3.0010000 2.1470000 + 162 162 1 0.0000000 6.5680000 11.9510000 11.1410000 + 163 163 1 0.0000000 18.0300000 5.6700000 13.1650000 + 164 164 1 0.0000000 15.8950000 17.4810000 17.7940000 + 165 165 1 0.0000000 0.6840000 12.2180000 4.0930000 + 166 166 1 0.0000000 0.9170000 0.0080000 0.9710000 + 167 167 1 0.0000000 1.5850000 18.4470000 16.1470000 + 168 168 1 0.0000000 13.1970000 2.0830000 5.6040000 + 169 169 1 0.0000000 13.4220000 1.6690000 19.6280000 + 170 170 1 0.0000000 7.2980000 15.5410000 6.4330000 + 171 171 1 0.0000000 11.8930000 0.1240000 5.2450000 + 172 172 1 0.0000000 21.5410000 5.4260000 7.3690000 + 173 173 1 0.0000000 6.2310000 17.4900000 7.1340000 + 174 174 1 0.0000000 20.3880000 18.7320000 14.2000000 + 175 175 1 0.0000000 15.0410000 20.5060000 3.2370000 + 176 176 1 0.0000000 19.8180000 7.0070000 7.1800000 + 177 177 1 0.0000000 8.4660000 2.7180000 5.7470000 + 178 178 1 0.0000000 5.4480000 10.4180000 6.1220000 + 179 179 1 0.0000000 10.8570000 0.2910000 3.1650000 + 180 180 1 0.0000000 7.1820000 12.9370000 19.5560000 + 181 181 1 0.0000000 21.6620000 11.8360000 12.5450000 + 182 182 1 0.0000000 10.9080000 11.2050000 1.6360000 + 183 183 1 0.0000000 11.2840000 8.4420000 16.6070000 + 184 184 1 0.0000000 8.0040000 7.5690000 15.4890000 + 185 185 1 0.0000000 8.0790000 6.2840000 8.6400000 + 186 186 1 0.0000000 18.9520000 12.1530000 4.0530000 + 187 187 1 0.0000000 10.3010000 12.0820000 8.1320000 + 188 188 1 0.0000000 14.4560000 11.6780000 4.7170000 + 189 189 1 0.0000000 7.1020000 21.2750000 15.8180000 + 190 190 1 0.0000000 13.1170000 20.7170000 9.0870000 + 191 191 1 0.0000000 5.3560000 2.2610000 12.5060000 + 192 192 1 0.0000000 17.3690000 11.1000000 2.4870000 + 193 193 1 0.0000000 15.9510000 5.0030000 20.2280000 + 194 194 1 0.0000000 3.3320000 11.8950000 8.8170000 + 195 195 1 0.0000000 8.2450000 1.7100000 19.8310000 + 196 196 1 0.0000000 9.0600000 15.9380000 18.2990000 + 197 197 1 0.0000000 10.3120000 12.4780000 16.5400000 + 198 198 1 0.0000000 21.2690000 2.1440000 16.1630000 + 199 199 1 0.0000000 20.7920000 11.3890000 2.6870000 + 200 200 1 0.0000000 5.5190000 10.8650000 12.9180000 + 201 201 1 0.0000000 13.1600000 14.6530000 5.7980000 + 202 202 1 0.0000000 9.4110000 4.0280000 3.9640000 + 203 203 1 0.0000000 10.1160000 21.3800000 6.7070000 + 204 204 1 0.0000000 18.8050000 17.5440000 8.7540000 + 205 205 1 0.0000000 0.2690000 20.1700000 17.2400000 + 206 206 1 0.0000000 14.6190000 13.4340000 10.3480000 + 207 207 1 0.0000000 14.9800000 3.6520000 2.2770000 + 208 208 1 0.0000000 10.4210000 1.4390000 14.8540000 + 209 209 1 0.0000000 2.8950000 8.5990000 11.0640000 + 210 210 1 0.0000000 8.3350000 0.6070000 14.2020000 + 211 211 1 0.0000000 5.6790000 2.9730000 15.7800000 + 212 212 1 0.0000000 7.9000000 8.2920000 21.6460000 + 213 213 1 0.0000000 1.7820000 17.8720000 5.4810000 + 214 214 1 0.0000000 7.1130000 2.5790000 13.9770000 + 215 215 1 0.0000000 14.4580000 4.6660000 0.2210000 + 216 216 1 0.0000000 2.6400000 9.9660000 17.7570000 + 217 217 1 0.0000000 12.9280000 10.2110000 10.3600000 + 218 218 1 0.0000000 0.5090000 2.0800000 8.8230000 + 219 219 1 0.0000000 0.9650000 20.6540000 11.9240000 + 220 220 1 0.0000000 19.5740000 21.0310000 2.1230000 + 221 221 1 0.0000000 18.6770000 7.8820000 12.9890000 + 222 222 1 0.0000000 17.1700000 3.9160000 5.7110000 + 223 223 1 0.0000000 7.0920000 12.0700000 1.6960000 + 224 224 1 0.0000000 2.6840000 17.0880000 1.3490000 + 225 225 1 0.0000000 5.4860000 16.7240000 19.5970000 + 226 226 1 0.0000000 16.3220000 3.8420000 15.8790000 + 227 227 1 0.0000000 3.8940000 2.4920000 0.4900000 + 228 228 1 0.0000000 13.2430000 3.5150000 13.0570000 + 229 229 1 0.0000000 13.3010000 21.5940000 12.5150000 + 230 230 1 0.0000000 4.9010000 11.9630000 0.9870000 + 231 231 1 0.0000000 12.6700000 14.8980000 18.4670000 + 232 232 1 0.0000000 6.4220000 6.6170000 3.2980000 + 233 233 1 0.0000000 16.6360000 5.9910000 15.0630000 + 234 234 1 0.0000000 17.9000000 15.3980000 1.6090000 + 235 235 1 0.0000000 18.1580000 0.8480000 9.7210000 + 236 236 1 0.0000000 20.2850000 4.8230000 12.9090000 + 237 237 1 0.0000000 1.6610000 2.7360000 5.3350000 + 238 238 1 0.0000000 5.8340000 0.9980000 16.9740000 + 239 239 1 0.0000000 9.0090000 7.7870000 5.7310000 + 240 240 1 0.0000000 16.1890000 4.3150000 7.8490000 + 241 241 1 0.0000000 16.5840000 8.9600000 12.9530000 + 242 242 1 0.0000000 4.8520000 10.4780000 21.0310000 + 243 243 1 0.0000000 2.7810000 16.7740000 17.2520000 + 244 244 1 0.0000000 19.7990000 10.0200000 15.9170000 + 245 245 1 0.0000000 3.1690000 7.6710000 5.2800000 + 246 246 1 0.0000000 15.1980000 2.3520000 8.6870000 + 247 247 1 0.0000000 16.3130000 2.2040000 14.2110000 + 248 248 1 0.0000000 6.3140000 2.9350000 6.7010000 + 249 249 1 0.0000000 8.2590000 4.5060000 13.2730000 + 250 250 1 0.0000000 13.9300000 18.2210000 14.4470000 + 251 251 1 0.0000000 20.2210000 7.9620000 14.8160000 + 252 252 1 0.0000000 1.6700000 11.5910000 21.3490000 + 253 253 1 0.0000000 11.2380000 16.3450000 17.3670000 + 254 254 1 0.0000000 2.0800000 20.2850000 2.3410000 + 255 255 1 0.0000000 13.5570000 16.5190000 4.3840000 + 256 256 1 0.0000000 7.4220000 19.6120000 18.9900000 + 257 257 1 0.0000000 12.9300000 16.8740000 2.1540000 + 258 258 1 0.0000000 14.8300000 17.0150000 10.5830000 + 259 259 1 0.0000000 9.9680000 16.3050000 20.5360000 + 260 260 1 0.0000000 20.9510000 14.9180000 15.5360000 + 261 261 1 0.0000000 21.2710000 0.7830000 2.5700000 + 262 262 1 0.0000000 7.5010000 11.4110000 5.6070000 + 263 263 1 0.0000000 15.1820000 11.1410000 6.9920000 + 264 264 1 0.0000000 12.3430000 6.8350000 2.9520000 + 265 265 1 0.0000000 15.6910000 17.3040000 4.9430000 + 266 266 1 0.0000000 6.2450000 1.4930000 10.4630000 + 267 267 1 0.0000000 15.3140000 20.7570000 16.6390000 + 268 268 1 0.0000000 18.2310000 18.8700000 10.8220000 + 269 269 1 0.0000000 19.9080000 8.2790000 11.0020000 + 270 270 1 0.0000000 16.2580000 5.0600000 3.6820000 + 271 271 1 0.0000000 3.6660000 15.6980000 13.3000000 + 272 272 1 0.0000000 21.3440000 9.2620000 2.0490000 + 273 273 1 0.0000000 21.6340000 20.9700000 20.9670000 + 274 274 1 0.0000000 20.4570000 2.7200000 11.7840000 + 275 275 1 0.0000000 4.3450000 15.9260000 15.6130000 + 276 276 1 0.0000000 18.5090000 3.3140000 1.1410000 + 277 277 1 0.0000000 0.4070000 15.7920000 11.2970000 + 278 278 1 0.0000000 13.3440000 8.1980000 4.5520000 + 279 279 1 0.0000000 8.5380000 21.6840000 3.2560000 + 280 280 1 0.0000000 2.2890000 0.7680000 11.6890000 + 281 281 1 0.0000000 21.5990000 18.8900000 6.4050000 + 282 282 1 0.0000000 14.9140000 7.5570000 8.8670000 + 283 283 1 0.0000000 21.3690000 18.6450000 21.2590000 + 284 284 1 0.0000000 10.9470000 5.8950000 10.8840000 + 285 285 1 0.0000000 2.6280000 15.7990000 6.4350000 + 286 286 1 0.0000000 11.9940000 15.1200000 20.8540000 + 287 287 1 0.0000000 16.6450000 10.2270000 10.9850000 + 288 288 1 0.0000000 13.0310000 2.8900000 9.3200000 + 289 289 1 0.0000000 12.4260000 19.8280000 13.6940000 + 290 290 1 0.0000000 19.8890000 19.6500000 17.8410000 + 291 291 1 0.0000000 4.0230000 9.6810000 4.2830000 + 292 292 1 0.0000000 2.6590000 21.3600000 4.2810000 + 293 293 1 0.0000000 6.4930000 3.2770000 9.0110000 + 294 294 1 0.0000000 21.3560000 20.3330000 10.0560000 + 295 295 1 0.0000000 14.3030000 20.6610000 0.9740000 + 296 296 1 0.0000000 4.4890000 8.4620000 0.4180000 + 297 297 1 0.0000000 6.5630000 7.5730000 11.8490000 + 298 298 1 0.0000000 3.4090000 1.4420000 13.6640000 + 299 299 1 0.0000000 15.6340000 1.9640000 5.3770000 + 300 300 1 0.0000000 11.9210000 0.8170000 9.6710000 + 301 301 1 0.0000000 20.9660000 9.2330000 20.1270000 + 302 302 1 0.0000000 1.6280000 6.2090000 8.4340000 + 303 303 1 0.0000000 0.5530000 9.8060000 7.0560000 + 304 304 1 0.0000000 11.5710000 18.9280000 8.9830000 + 305 305 1 0.0000000 4.2490000 7.9910000 14.8160000 + 306 306 1 0.0000000 19.7300000 12.4900000 7.6500000 + 307 307 1 0.0000000 10.8450000 14.1880000 9.0020000 + 308 308 1 0.0000000 10.8070000 11.1620000 10.2560000 + 309 309 1 0.0000000 4.7040000 8.6980000 12.6030000 + 310 310 1 0.0000000 3.7570000 12.0590000 6.5220000 + 311 311 1 0.0000000 9.7910000 2.9010000 7.6620000 + 312 312 1 0.0000000 3.7810000 14.0810000 5.2770000 + 313 313 1 0.0000000 4.0640000 19.1000000 1.8260000 + 314 314 1 0.0000000 21.7520000 10.6160000 14.7710000 + 315 315 1 0.0000000 1.3090000 11.5200000 16.3780000 + 316 316 1 0.0000000 5.1840000 20.6560000 0.4260000 + 317 317 1 0.0000000 10.7630000 2.3920000 17.0100000 + 318 318 1 0.0000000 4.7970000 15.9920000 1.2450000 + 319 319 1 0.0000000 11.1370000 0.4590000 11.8330000 + 320 320 1 0.0000000 14.5870000 13.6170000 1.1610000 + 321 321 1 0.0000000 9.8660000 0.7940000 8.6450000 + 322 322 1 0.0000000 17.7650000 19.2430000 7.2990000 + 323 323 1 0.0000000 6.0610000 1.2430000 19.3000000 + 324 324 1 0.0000000 18.2200000 12.8760000 13.2170000 + 325 325 1 0.0000000 18.0460000 13.1700000 9.1450000 + 326 326 1 0.0000000 3.3530000 3.3130000 15.2040000 + 327 327 1 0.0000000 10.4090000 19.4890000 16.3660000 + 328 328 1 0.0000000 15.6710000 1.1260000 19.9260000 + 329 329 1 0.0000000 10.8900000 7.3650000 7.1060000 + 330 330 1 0.0000000 13.4480000 20.2870000 5.0130000 + 331 331 1 0.0000000 16.0530000 0.3050000 0.2340000 + 332 332 1 0.0000000 9.8430000 17.8410000 14.6670000 + 333 333 1 0.0000000 13.0150000 10.2370000 1.1400000 + 334 334 1 0.0000000 4.2090000 16.6330000 8.0040000 + 335 335 1 0.0000000 4.5530000 4.3630000 11.8090000 + 336 336 1 0.0000000 12.4370000 18.2310000 5.4180000 + 337 337 1 0.0000000 4.6660000 4.4220000 5.9770000 + 338 338 1 0.0000000 9.5670000 9.6790000 2.7600000 + 339 339 1 0.0000000 17.6640000 17.0250000 16.2770000 + 340 340 1 0.0000000 20.3640000 13.8280000 13.4210000 + 341 341 1 0.0000000 10.0140000 7.4130000 9.2700000 + 342 342 1 0.0000000 2.1350000 7.0370000 14.8450000 + 343 343 1 0.0000000 10.1280000 17.9060000 5.2690000 + 344 344 1 0.0000000 9.9640000 11.7180000 21.3790000 + 345 345 1 0.0000000 3.9300000 18.4910000 10.9740000 + 346 346 1 0.0000000 4.4370000 0.9780000 3.9700000 + 347 347 1 0.0000000 3.3540000 11.6180000 13.2880000 + 348 348 1 0.0000000 10.1490000 8.5100000 18.7440000 + 349 349 1 0.0000000 20.0030000 12.0850000 0.6000000 + 350 350 1 0.0000000 8.1370000 7.5880000 17.8300000 + 351 351 1 0.0000000 4.9940000 4.9580000 9.5900000 + 352 352 1 0.0000000 5.3170000 14.3610000 19.8350000 + 353 353 1 0.0000000 9.3030000 10.0320000 5.0540000 + 354 354 1 0.0000000 15.9060000 19.0210000 11.2850000 + 355 355 1 0.0000000 4.7750000 3.1100000 20.1740000 + 356 356 1 0.0000000 12.3120000 9.1080000 6.4970000 + 357 357 1 0.0000000 10.4810000 4.6620000 17.6350000 + 358 358 1 0.0000000 4.7080000 13.6970000 16.3300000 + 359 359 1 0.0000000 12.2970000 5.5490000 6.5760000 + 360 360 1 0.0000000 17.9900000 5.6590000 1.9370000 + 361 361 1 0.0000000 15.7760000 13.0220000 8.3090000 + 362 362 1 0.0000000 17.0960000 9.8020000 6.8980000 + 363 363 1 0.0000000 14.4040000 20.5780000 7.1330000 + 364 364 1 0.0000000 10.5700000 7.4740000 12.5610000 + 365 365 1 0.0000000 7.1880000 17.4800000 12.1560000 + 366 366 1 0.0000000 19.2640000 6.6050000 0.0900000 + 367 367 1 0.0000000 2.4860000 20.3860000 7.9620000 + 368 368 1 0.0000000 1.6540000 17.4650000 21.0330000 + 369 369 1 0.0000000 0.8570000 14.9180000 7.7750000 + 370 370 1 0.0000000 15.6360000 3.0200000 12.0780000 + 371 371 1 0.0000000 20.9520000 6.0750000 16.1620000 + 372 372 1 0.0000000 6.5150000 10.9720000 15.0530000 + 373 373 1 0.0000000 1.6150000 2.1220000 0.1040000 + 374 374 1 0.0000000 12.4880000 14.7040000 1.3780000 + 375 375 1 0.0000000 1.8720000 14.8200000 18.2130000 + 376 376 1 0.0000000 1.3840000 6.3060000 16.9560000 + 377 377 1 0.0000000 13.1420000 8.3550000 21.5020000 + 378 378 1 0.0000000 10.3950000 19.1540000 12.7720000 + 379 379 1 0.0000000 18.9350000 15.8660000 19.2180000 + 380 380 1 0.0000000 19.6110000 0.3890000 20.4600000 + 381 381 1 0.0000000 1.6460000 14.9430000 1.9780000 + 382 382 1 0.0000000 16.9420000 8.7780000 9.0500000 + 383 383 1 0.0000000 15.0770000 11.3050000 19.7190000 + 384 384 1 0.0000000 6.2370000 17.3890000 15.8170000 + 385 385 1 0.0000000 14.6890000 16.8390000 8.2540000 + 386 386 1 0.0000000 5.9660000 6.4540000 15.1720000 + 387 387 1 0.0000000 6.1100000 4.8320000 21.2820000 + 388 388 1 0.0000000 5.9710000 14.6570000 4.7110000 + 389 389 1 0.0000000 3.1780000 19.7080000 5.8410000 + 390 390 1 0.0000000 5.7600000 19.5340000 14.8080000 + 391 391 1 0.0000000 18.1190000 11.5110000 15.1550000 + 392 392 1 0.0000000 17.0450000 3.0230000 19.5700000 + 393 393 1 0.0000000 11.7520000 21.8180000 19.7610000 + 394 394 1 0.0000000 15.5870000 18.5610000 6.9700000 + 395 395 1 0.0000000 6.0680000 8.8370000 18.0920000 + 396 396 1 0.0000000 14.2730000 18.8060000 21.1250000 + 397 397 1 0.0000000 14.8640000 7.7480000 18.0510000 + 398 398 1 0.0000000 7.1970000 14.3360000 8.4160000 + 399 399 1 0.0000000 12.4080000 8.9750000 12.3640000 + 400 400 1 0.0000000 15.7690000 0.5910000 7.2330000 + 401 401 1 0.0000000 14.1880000 18.6730000 16.7170000 + 402 402 1 0.0000000 0.1070000 17.0650000 14.8780000 + 403 403 1 0.0000000 1.2690000 21.0730000 19.1580000 + 404 404 1 0.0000000 8.3320000 15.5390000 0.1550000 + 405 405 1 0.0000000 3.4890000 20.2250000 18.9410000 + 406 406 1 0.0000000 16.7760000 7.8120000 16.6050000 + 407 407 1 0.0000000 0.5070000 4.7570000 5.2510000 + 408 408 1 0.0000000 19.1810000 3.0200000 9.7780000 + 409 409 1 0.0000000 4.7160000 9.7900000 16.3110000 + 410 410 1 0.0000000 2.4040000 18.9600000 12.6390000 + 411 411 1 0.0000000 3.3380000 4.6500000 7.9680000 + 412 412 1 0.0000000 17.7990000 4.9620000 9.4940000 + 413 413 1 0.0000000 12.7390000 16.3390000 11.5840000 + 414 414 1 0.0000000 17.5550000 6.7730000 20.3200000 + 415 415 1 0.0000000 14.1770000 9.8840000 3.2060000 + 416 416 1 0.0000000 14.4790000 10.5810000 15.6890000 + 417 417 1 0.0000000 14.7570000 21.0200000 10.8010000 + 418 418 1 0.0000000 19.6820000 0.5930000 12.8140000 + 419 419 1 0.0000000 8.6600000 0.3420000 21.6710000 + 420 420 1 0.0000000 9.6300000 4.0130000 11.4620000 + 421 421 1 0.0000000 21.1990000 7.8220000 3.8780000 + 422 422 1 0.0000000 1.0220000 15.3220000 20.3160000 + 423 423 1 0.0000000 19.5230000 9.5210000 18.2400000 + 424 424 1 0.0000000 6.0420000 4.8470000 1.8140000 + 425 425 1 0.0000000 19.0970000 2.7310000 20.7130000 + 426 426 1 0.0000000 20.7220000 12.9310000 18.9570000 + 427 427 1 0.0000000 12.0420000 5.2830000 19.3670000 + 428 428 1 0.0000000 12.3510000 14.1340000 10.8070000 + 429 429 1 0.0000000 0.6760000 0.6980000 4.6080000 + 430 430 1 0.0000000 17.9010000 21.6070000 7.6530000 + 431 431 1 0.0000000 12.9910000 4.6940000 10.9090000 + 432 432 1 0.0000000 4.1650000 0.3790000 10.2450000 + 433 433 1 0.0000000 11.0350000 2.5880000 2.7230000 + 434 434 1 0.0000000 0.8260000 16.8030000 9.2410000 + 435 435 1 0.0000000 1.2930000 1.5320000 19.6910000 + 436 436 1 0.0000000 3.6360000 0.6300000 7.9720000 + 437 437 1 0.0000000 18.7690000 21.6650000 18.3160000 + 438 438 1 0.0000000 15.9900000 1.2130000 10.5660000 + 439 439 1 0.0000000 3.6880000 0.2170000 17.3680000 + 440 440 1 0.0000000 15.4550000 13.7970000 16.7760000 + 441 441 1 0.0000000 13.6260000 0.3920000 16.0690000 + 442 442 1 0.0000000 2.2090000 7.7760000 18.5900000 + 443 443 1 0.0000000 7.5390000 1.2670000 1.6990000 + 444 444 1 0.0000000 5.8870000 7.1350000 20.9610000 + 445 445 1 0.0000000 3.5460000 9.4970000 8.9750000 + 446 446 1 0.0000000 1.7030000 10.1450000 12.4300000 + 447 447 1 0.0000000 4.5220000 7.2320000 19.0140000 + 448 448 1 0.0000000 12.0790000 18.5320000 17.7390000 + 449 449 1 0.0000000 11.8150000 12.7440000 20.4040000 + 450 450 1 0.0000000 14.1450000 16.3300000 20.6400000 + 451 451 1 0.0000000 13.9790000 11.9100000 13.7820000 + 452 452 1 0.0000000 5.7860000 9.0870000 8.2180000 + 453 453 1 0.0000000 5.7610000 18.5920000 3.4730000 + 454 454 1 0.0000000 17.1860000 12.2100000 20.2580000 + 455 455 1 0.0000000 19.9590000 17.8190000 5.1360000 + 456 456 1 0.0000000 17.0590000 15.4900000 5.5810000 + 457 457 1 0.0000000 3.6710000 3.1920000 4.2290000 + 458 458 1 0.0000000 9.3110000 4.4320000 0.2320000 + 459 459 1 0.0000000 7.2900000 10.5480000 9.3640000 + 460 460 1 0.0000000 3.1990000 11.3340000 19.5640000 + 461 461 1 0.0000000 18.7960000 19.0310000 15.8960000 + 462 462 1 0.0000000 16.4530000 21.1730000 18.6370000 + 463 463 1 0.0000000 19.0360000 1.4790000 16.6070000 + 464 464 1 0.0000000 15.1190000 6.7220000 5.0610000 + 465 465 1 0.0000000 14.6980000 6.3460000 10.8900000 + 466 466 1 0.0000000 9.5270000 15.6660000 5.6890000 + 467 467 1 0.0000000 9.8670000 0.7250000 18.4290000 + 468 468 1 0.0000000 3.5070000 11.8220000 15.5670000 + 469 469 1 0.0000000 5.2170000 0.8530000 1.6550000 + 470 470 1 0.0000000 14.2830000 11.9310000 17.5860000 + 471 471 1 0.0000000 21.4650000 11.2840000 8.7140000 + 472 472 1 0.0000000 0.2700000 13.5140000 17.1240000 + 473 473 1 0.0000000 8.7330000 20.7300000 17.4130000 + 474 474 1 0.0000000 7.4140000 12.9760000 3.8660000 + 475 475 1 0.0000000 8.5520000 8.7210000 12.3480000 + 476 476 1 0.0000000 7.4770000 9.7280000 1.7090000 + 477 477 1 0.0000000 16.9200000 14.6800000 20.0740000 + 478 478 1 0.0000000 6.5920000 20.9910000 6.6400000 + 479 479 1 0.0000000 18.3870000 7.4290000 18.2380000 + 480 480 1 0.0000000 21.2320000 15.1360000 2.5810000 + 481 481 1 0.0000000 16.7390000 8.6780000 21.4380000 + 482 482 1 0.0000000 18.2260000 6.2380000 5.6140000 + 483 483 1 0.0000000 12.7550000 3.5820000 20.8720000 + 484 484 1 0.0000000 14.8870000 9.0010000 20.0300000 + 485 485 1 0.0000000 6.1970000 16.3000000 3.0880000 + 486 486 1 0.0000000 6.9450000 13.1810000 15.8140000 + 487 487 1 0.0000000 20.1770000 18.7700000 1.5020000 + 488 488 1 0.0000000 19.8750000 14.4220000 0.7710000 + 489 489 1 0.0000000 13.0770000 5.0280000 14.9330000 + 490 490 1 0.0000000 10.9540000 0.5380000 0.0170000 + 491 491 1 0.0000000 0.3310000 3.0520000 18.1720000 + 492 492 1 0.0000000 8.8200000 14.8310000 10.0110000 + 493 493 1 0.0000000 6.9570000 20.3870000 8.9230000 + 494 494 1 0.0000000 21.4900000 6.8560000 12.0490000 + 495 495 1 0.0000000 8.1550000 13.1990000 21.7210000 + 496 496 1 0.0000000 2.1970000 4.5290000 11.8290000 + 497 497 1 0.0000000 14.2880000 5.5560000 18.5960000 + 498 498 1 0.0000000 15.0910000 15.4110000 18.5470000 + 499 499 1 0.0000000 18.9760000 15.1930000 16.8970000 + 500 500 1 0.0000000 19.4100000 5.3490000 17.7540000 + 501 501 1 0.0000000 0.5430000 8.3990000 13.7700000 + 502 502 1 0.0000000 18.0770000 19.1690000 4.8770000 + 503 503 1 0.0000000 3.3760000 17.8650000 19.2940000 + 504 504 1 0.0000000 16.3760000 0.5870000 3.6340000 + 505 505 1 0.0000000 10.4990000 18.5190000 21.1770000 + 506 506 1 0.0000000 15.7320000 12.7570000 3.0200000 + 507 507 1 0.0000000 16.9190000 8.1780000 5.2430000 + 508 508 1 0.0000000 6.9450000 7.4210000 6.8040000 + 509 509 1 0.0000000 11.6120000 21.2610000 15.3620000 + 510 510 1 0.0000000 18.0500000 0.6840000 14.5470000 + 511 511 1 0.0000000 20.4340000 4.0240000 4.2040000 + 512 512 1 0.0000000 18.0190000 10.7210000 0.2160000 + diff --git a/examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_216.lmp b/examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_216.lmp new file mode 100755 index 0000000000..893d75e69b --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_216.lmp @@ -0,0 +1,238 @@ +LAMMPS description + + 216 atoms + 0 bonds + 0 angles + 0 dihedrals + 0 impropers + + 1 atom types + 0 bond types + 0 angle types + 0 dihedral types + 0 improper types + + + 0.0000000 16.293000 xlo xhi + 0.0000000 16.293000 ylo yhi + 0.0000000 16.293000 zlo zhi + + Atoms + + 1 1 1 0.0000000 0.0000000 0.0000000 0.0000000 + 2 2 1 0.0000000 0.0000000 2.7160000 2.7160000 + 3 3 1 0.0000000 2.7160000 2.7160000 0.0000000 + 4 4 1 0.0000000 2.7160000 0.0000000 2.7160000 + 5 5 1 0.0000000 4.0730000 1.3580000 4.0730000 + 6 6 1 0.0000000 1.3580000 1.3580000 1.3580000 + 7 7 1 0.0000000 1.3580000 4.0730000 4.0730000 + 8 8 1 0.0000000 4.0730000 4.0730000 1.3580000 + 9 9 1 0.0000000 0.0000000 0.0000000 5.4310000 + 10 10 1 0.0000000 0.0000000 2.7160000 8.1460000 + 11 11 1 0.0000000 2.7160000 2.7160000 5.4310000 + 12 12 1 0.0000000 2.7160000 0.0000000 8.1460000 + 13 13 1 0.0000000 4.0730000 1.3580000 9.5040000 + 14 14 1 0.0000000 1.3580000 1.3580000 6.7890000 + 15 15 1 0.0000000 1.3580000 4.0730000 9.5040000 + 16 16 1 0.0000000 4.0730000 4.0730000 6.7890000 + 17 17 1 0.0000000 0.0000000 0.0000000 10.8620000 + 18 18 1 0.0000000 0.0000000 2.7160000 13.5780000 + 19 19 1 0.0000000 2.7160000 2.7160000 10.8620000 + 20 20 1 0.0000000 2.7160000 0.0000000 13.5780000 + 21 21 1 0.0000000 4.0730000 1.3580000 14.9350000 + 22 22 1 0.0000000 1.3580000 1.3580000 12.2200000 + 23 23 1 0.0000000 1.3580000 4.0730000 14.9350000 + 24 24 1 0.0000000 4.0730000 4.0730000 12.2200000 + 25 25 1 0.0000000 0.0000000 5.4310000 0.0000000 + 26 26 1 0.0000000 0.0000000 8.1460000 2.7160000 + 27 27 1 0.0000000 2.7160000 8.1460000 0.0000000 + 28 28 1 0.0000000 2.7160000 5.4310000 2.7160000 + 29 29 1 0.0000000 4.0730000 6.7890000 4.0730000 + 30 30 1 0.0000000 1.3580000 6.7890000 1.3580000 + 31 31 1 0.0000000 1.3580000 9.5040000 4.0730000 + 32 32 1 0.0000000 4.0730000 9.5040000 1.3580000 + 33 33 1 0.0000000 0.0000000 5.4310000 5.4310000 + 34 34 1 0.0000000 0.0000000 8.1460000 8.1460000 + 35 35 1 0.0000000 2.7160000 8.1460000 5.4310000 + 36 36 1 0.0000000 2.7160000 5.4310000 8.1460000 + 37 37 1 0.0000000 4.0730000 6.7890000 9.5040000 + 38 38 1 0.0000000 1.3580000 6.7890000 6.7890000 + 39 39 1 0.0000000 1.3580000 9.5040000 9.5040000 + 40 40 1 0.0000000 4.0730000 9.5040000 6.7890000 + 41 41 1 0.0000000 0.0000000 5.4310000 10.8620000 + 42 42 1 0.0000000 0.0000000 8.1460000 13.5780000 + 43 43 1 0.0000000 2.7160000 8.1460000 10.8620000 + 44 44 1 0.0000000 2.7160000 5.4310000 13.5780000 + 45 45 1 0.0000000 4.0730000 6.7890000 14.9350000 + 46 46 1 0.0000000 1.3580000 6.7890000 12.2200000 + 47 47 1 0.0000000 1.3580000 9.5040000 14.9350000 + 48 48 1 0.0000000 4.0730000 9.5040000 12.2200000 + 49 49 1 0.0000000 0.0000000 10.8620000 0.0000000 + 50 50 1 0.0000000 0.0000000 13.5780000 2.7160000 + 51 51 1 0.0000000 2.7160000 13.5780000 0.0000000 + 52 52 1 0.0000000 2.7160000 10.8620000 2.7160000 + 53 53 1 0.0000000 4.0730000 12.2200000 4.0730000 + 54 54 1 0.0000000 1.3580000 12.2200000 1.3580000 + 55 55 1 0.0000000 1.3580000 14.9350000 4.0730000 + 56 56 1 0.0000000 4.0730000 14.9350000 1.3580000 + 57 57 1 0.0000000 0.0000000 10.8620000 5.4310000 + 58 58 1 0.0000000 0.0000000 13.5780000 8.1460000 + 59 59 1 0.0000000 2.7160000 13.5780000 5.4310000 + 60 60 1 0.0000000 2.7160000 10.8620000 8.1460000 + 61 61 1 0.0000000 4.0730000 12.2200000 9.5040000 + 62 62 1 0.0000000 1.3580000 12.2200000 6.7890000 + 63 63 1 0.0000000 1.3580000 14.9350000 9.5040000 + 64 64 1 0.0000000 4.0730000 14.9350000 6.7890000 + 65 65 1 0.0000000 0.0000000 10.8620000 10.8620000 + 66 66 1 0.0000000 0.0000000 13.5780000 13.5780000 + 67 67 1 0.0000000 2.7160000 13.5780000 10.8620000 + 68 68 1 0.0000000 2.7160000 10.8620000 13.5780000 + 69 69 1 0.0000000 4.0730000 12.2200000 14.9350000 + 70 70 1 0.0000000 1.3580000 12.2200000 12.2200000 + 71 71 1 0.0000000 1.3580000 14.9350000 14.9350000 + 72 72 1 0.0000000 4.0730000 14.9350000 12.2200000 + 73 73 1 0.0000000 5.4310000 0.0000000 0.0000000 + 74 74 1 0.0000000 5.4310000 2.7160000 2.7160000 + 75 75 1 0.0000000 8.1460000 2.7160000 0.0000000 + 76 76 1 0.0000000 8.1460000 0.0000000 2.7160000 + 77 77 1 0.0000000 9.5040000 1.3580000 4.0730000 + 78 78 1 0.0000000 6.7890000 1.3580000 1.3580000 + 79 79 1 0.0000000 6.7890000 4.0730000 4.0730000 + 80 80 1 0.0000000 9.5040000 4.0730000 1.3580000 + 81 81 1 0.0000000 5.4310000 0.0000000 5.4310000 + 82 82 1 0.0000000 5.4310000 2.7160000 8.1460000 + 83 83 1 0.0000000 8.1460000 2.7160000 5.4310000 + 84 84 1 0.0000000 8.1460000 0.0000000 8.1460000 + 85 85 1 0.0000000 9.5040000 1.3580000 9.5040000 + 86 86 1 0.0000000 6.7890000 1.3580000 6.7890000 + 87 87 1 0.0000000 6.7890000 4.0730000 9.5040000 + 88 88 1 0.0000000 9.5040000 4.0730000 6.7890000 + 89 89 1 0.0000000 5.4310000 0.0000000 10.8620000 + 90 90 1 0.0000000 5.4310000 2.7160000 13.5780000 + 91 91 1 0.0000000 8.1460000 2.7160000 10.8620000 + 92 92 1 0.0000000 8.1460000 0.0000000 13.5780000 + 93 93 1 0.0000000 9.5040000 1.3580000 14.9350000 + 94 94 1 0.0000000 6.7890000 1.3580000 12.2200000 + 95 95 1 0.0000000 6.7890000 4.0730000 14.9350000 + 96 96 1 0.0000000 9.5040000 4.0730000 12.2200000 + 97 97 1 0.0000000 5.4310000 5.4310000 0.0000000 + 98 98 1 0.0000000 5.4310000 8.1460000 2.7160000 + 99 99 1 0.0000000 8.1460000 8.1460000 0.0000000 + 100 100 1 0.0000000 8.1460000 5.4310000 2.7160000 + 101 101 1 0.0000000 9.5040000 6.7890000 4.0730000 + 102 102 1 0.0000000 6.7890000 6.7890000 1.3580000 + 103 103 1 0.0000000 6.7890000 9.5040000 4.0730000 + 104 104 1 0.0000000 9.5040000 9.5040000 1.3580000 + 105 105 1 0.0000000 5.4310000 5.4310000 5.4310000 + 106 106 1 0.0000000 5.4310000 8.1460000 8.1460000 + 107 107 1 0.0000000 8.1460000 8.1460000 5.4310000 + 108 108 1 0.0000000 8.1460000 5.4310000 8.1460000 + 109 109 1 0.0000000 9.5040000 6.7890000 9.5040000 + 110 110 1 0.0000000 6.7890000 6.7890000 6.7890000 + 111 111 1 0.0000000 6.7890000 9.5040000 9.5040000 + 112 112 1 0.0000000 9.5040000 9.5040000 6.7890000 + 113 113 1 0.0000000 5.4310000 5.4310000 10.8620000 + 114 114 1 0.0000000 5.4310000 8.1460000 13.5780000 + 115 115 1 0.0000000 8.1460000 8.1460000 10.8620000 + 116 116 1 0.0000000 8.1460000 5.4310000 13.5780000 + 117 117 1 0.0000000 9.5040000 6.7890000 14.9350000 + 118 118 1 0.0000000 6.7890000 6.7890000 12.2200000 + 119 119 1 0.0000000 6.7890000 9.5040000 14.9350000 + 120 120 1 0.0000000 9.5040000 9.5040000 12.2200000 + 121 121 1 0.0000000 5.4310000 10.8620000 0.0000000 + 122 122 1 0.0000000 5.4310000 13.5780000 2.7160000 + 123 123 1 0.0000000 8.1460000 13.5780000 0.0000000 + 124 124 1 0.0000000 8.1460000 10.8620000 2.7160000 + 125 125 1 0.0000000 9.5040000 12.2200000 4.0730000 + 126 126 1 0.0000000 6.7890000 12.2200000 1.3580000 + 127 127 1 0.0000000 6.7890000 14.9350000 4.0730000 + 128 128 1 0.0000000 9.5040000 14.9350000 1.3580000 + 129 129 1 0.0000000 5.4310000 10.8620000 5.4310000 + 130 130 1 0.0000000 5.4310000 13.5780000 8.1460000 + 131 131 1 0.0000000 8.1460000 13.5780000 5.4310000 + 132 132 1 0.0000000 8.1460000 10.8620000 8.1460000 + 133 133 1 0.0000000 9.5040000 12.2200000 9.5040000 + 134 134 1 0.0000000 6.7890000 12.2200000 6.7890000 + 135 135 1 0.0000000 6.7890000 14.9350000 9.5040000 + 136 136 1 0.0000000 9.5040000 14.9350000 6.7890000 + 137 137 1 0.0000000 5.4310000 10.8620000 10.8620000 + 138 138 1 0.0000000 5.4310000 13.5780000 13.5780000 + 139 139 1 0.0000000 8.1460000 13.5780000 10.8620000 + 140 140 1 0.0000000 8.1460000 10.8620000 13.5780000 + 141 141 1 0.0000000 9.5040000 12.2200000 14.9350000 + 142 142 1 0.0000000 6.7890000 12.2200000 12.2200000 + 143 143 1 0.0000000 6.7890000 14.9350000 14.9350000 + 144 144 1 0.0000000 9.5040000 14.9350000 12.2200000 + 145 145 1 0.0000000 10.8620000 0.0000000 0.0000000 + 146 146 1 0.0000000 10.8620000 2.7160000 2.7160000 + 147 147 1 0.0000000 13.5780000 2.7160000 0.0000000 + 148 148 1 0.0000000 13.5780000 0.0000000 2.7160000 + 149 149 1 0.0000000 14.9350000 1.3580000 4.0730000 + 150 150 1 0.0000000 12.2200000 1.3580000 1.3580000 + 151 151 1 0.0000000 12.2200000 4.0730000 4.0730000 + 152 152 1 0.0000000 14.9350000 4.0730000 1.3580000 + 153 153 1 0.0000000 10.8620000 0.0000000 5.4310000 + 154 154 1 0.0000000 10.8620000 2.7160000 8.1460000 + 155 155 1 0.0000000 13.5780000 2.7160000 5.4310000 + 156 156 1 0.0000000 13.5780000 0.0000000 8.1460000 + 157 157 1 0.0000000 14.9350000 1.3580000 9.5040000 + 158 158 1 0.0000000 12.2200000 1.3580000 6.7890000 + 159 159 1 0.0000000 12.2200000 4.0730000 9.5040000 + 160 160 1 0.0000000 14.9350000 4.0730000 6.7890000 + 161 161 1 0.0000000 10.8620000 0.0000000 10.8620000 + 162 162 1 0.0000000 10.8620000 2.7160000 13.5780000 + 163 163 1 0.0000000 13.5780000 2.7160000 10.8620000 + 164 164 1 0.0000000 13.5780000 0.0000000 13.5780000 + 165 165 1 0.0000000 14.9350000 1.3580000 14.9350000 + 166 166 1 0.0000000 12.2200000 1.3580000 12.2200000 + 167 167 1 0.0000000 12.2200000 4.0730000 14.9350000 + 168 168 1 0.0000000 14.9350000 4.0730000 12.2200000 + 169 169 1 0.0000000 10.8620000 5.4310000 0.0000000 + 170 170 1 0.0000000 10.8620000 8.1460000 2.7160000 + 171 171 1 0.0000000 13.5780000 8.1460000 0.0000000 + 172 172 1 0.0000000 13.5780000 5.4310000 2.7160000 + 173 173 1 0.0000000 14.9350000 6.7890000 4.0730000 + 174 174 1 0.0000000 12.2200000 6.7890000 1.3580000 + 175 175 1 0.0000000 12.2200000 9.5040000 4.0730000 + 176 176 1 0.0000000 14.9350000 9.5040000 1.3580000 + 177 177 1 0.0000000 10.8620000 5.4310000 5.4310000 + 178 178 1 0.0000000 10.8620000 8.1460000 8.1460000 + 179 179 1 0.0000000 13.5780000 8.1460000 5.4310000 + 180 180 1 0.0000000 13.5780000 5.4310000 8.1460000 + 181 181 1 0.0000000 14.9350000 6.7890000 9.5040000 + 182 182 1 0.0000000 12.2200000 6.7890000 6.7890000 + 183 183 1 0.0000000 12.2200000 9.5040000 9.5040000 + 184 184 1 0.0000000 14.9350000 9.5040000 6.7890000 + 185 185 1 0.0000000 10.8620000 5.4310000 10.8620000 + 186 186 1 0.0000000 10.8620000 8.1460000 13.5780000 + 187 187 1 0.0000000 13.5780000 8.1460000 10.8620000 + 188 188 1 0.0000000 13.5780000 5.4310000 13.5780000 + 189 189 1 0.0000000 14.9350000 6.7890000 14.9350000 + 190 190 1 0.0000000 12.2200000 6.7890000 12.2200000 + 191 191 1 0.0000000 12.2200000 9.5040000 14.9350000 + 192 192 1 0.0000000 14.9350000 9.5040000 12.2200000 + 193 193 1 0.0000000 10.8620000 10.8620000 0.0000000 + 194 194 1 0.0000000 10.8620000 13.5780000 2.7160000 + 195 195 1 0.0000000 13.5780000 13.5780000 0.0000000 + 196 196 1 0.0000000 13.5780000 10.8620000 2.7160000 + 197 197 1 0.0000000 14.9350000 12.2200000 4.0730000 + 198 198 1 0.0000000 12.2200000 12.2200000 1.3580000 + 199 199 1 0.0000000 12.2200000 14.9350000 4.0730000 + 200 200 1 0.0000000 14.9350000 14.9350000 1.3580000 + 201 201 1 0.0000000 10.8620000 10.8620000 5.4310000 + 202 202 1 0.0000000 10.8620000 13.5780000 8.1460000 + 203 203 1 0.0000000 13.5780000 13.5780000 5.4310000 + 204 204 1 0.0000000 13.5780000 10.8620000 8.1460000 + 205 205 1 0.0000000 14.9350000 12.2200000 9.5040000 + 206 206 1 0.0000000 12.2200000 12.2200000 6.7890000 + 207 207 1 0.0000000 12.2200000 14.9350000 9.5040000 + 208 208 1 0.0000000 14.9350000 14.9350000 6.7890000 + 209 209 1 0.0000000 10.8620000 10.8620000 10.8620000 + 210 210 1 0.0000000 10.8620000 13.5780000 13.5780000 + 211 211 1 0.0000000 13.5780000 13.5780000 10.8620000 + 212 212 1 0.0000000 13.5780000 10.8620000 13.5780000 + 213 213 1 0.0000000 14.9350000 12.2200000 14.9350000 + 214 214 1 0.0000000 12.2200000 12.2200000 12.2200000 + 215 215 1 0.0000000 12.2200000 14.9350000 14.9350000 + 216 216 1 0.0000000 14.9350000 14.9350000 12.2200000 + diff --git a/examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_512.lmp b/examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_512.lmp new file mode 100755 index 0000000000..8c1ecd30bd --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_512.lmp @@ -0,0 +1,534 @@ +LAMMPS description + + 512 atoms + 0 bonds + 0 angles + 0 dihedrals + 0 impropers + + 1 atom types + 0 bond types + 0 angle types + 0 dihedral types + 0 improper types + + + 0.0000000 21.724000 xlo xhi + 0.0000000 21.724000 ylo yhi + 0.0000000 21.724000 zlo zhi + + Atoms + + 1 1 1 0.0000000 0.0000000 0.0000000 0.0000000 + 2 2 1 0.0000000 0.0000000 2.7150000 2.7150000 + 3 3 1 0.0000000 2.7150000 2.7150000 0.0000000 + 4 4 1 0.0000000 2.7150000 0.0000000 2.7150000 + 5 5 1 0.0000000 4.0730000 1.3580000 4.0730000 + 6 6 1 0.0000000 1.3580000 1.3580000 1.3580000 + 7 7 1 0.0000000 1.3580000 4.0730000 4.0730000 + 8 8 1 0.0000000 4.0730000 4.0730000 1.3580000 + 9 9 1 0.0000000 0.0000000 0.0000000 5.4310000 + 10 10 1 0.0000000 0.0000000 2.7150000 8.1460000 + 11 11 1 0.0000000 2.7150000 2.7150000 5.4310000 + 12 12 1 0.0000000 2.7150000 0.0000000 8.1460000 + 13 13 1 0.0000000 4.0730000 1.3580000 9.5040000 + 14 14 1 0.0000000 1.3580000 1.3580000 6.7890000 + 15 15 1 0.0000000 1.3580000 4.0730000 9.5040000 + 16 16 1 0.0000000 4.0730000 4.0730000 6.7890000 + 17 17 1 0.0000000 0.0000000 0.0000000 10.8620000 + 18 18 1 0.0000000 0.0000000 2.7150000 13.5770000 + 19 19 1 0.0000000 2.7150000 2.7150000 10.8620000 + 20 20 1 0.0000000 2.7150000 0.0000000 13.5770000 + 21 21 1 0.0000000 4.0730000 1.3580000 14.9350000 + 22 22 1 0.0000000 1.3580000 1.3580000 12.2200000 + 23 23 1 0.0000000 1.3580000 4.0730000 14.9350000 + 24 24 1 0.0000000 4.0730000 4.0730000 12.2200000 + 25 25 1 0.0000000 0.0000000 0.0000000 16.2930000 + 26 26 1 0.0000000 0.0000000 2.7150000 19.0080000 + 27 27 1 0.0000000 2.7150000 2.7150000 16.2930000 + 28 28 1 0.0000000 2.7150000 0.0000000 19.0080000 + 29 29 1 0.0000000 4.0730000 1.3580000 20.3660000 + 30 30 1 0.0000000 1.3580000 1.3580000 17.6510000 + 31 31 1 0.0000000 1.3580000 4.0730000 20.3660000 + 32 32 1 0.0000000 4.0730000 4.0730000 17.6510000 + 33 33 1 0.0000000 0.0000000 5.4310000 0.0000000 + 34 34 1 0.0000000 0.0000000 8.1460000 2.7150000 + 35 35 1 0.0000000 2.7150000 8.1460000 0.0000000 + 36 36 1 0.0000000 2.7150000 5.4310000 2.7150000 + 37 37 1 0.0000000 4.0730000 6.7890000 4.0730000 + 38 38 1 0.0000000 1.3580000 6.7890000 1.3580000 + 39 39 1 0.0000000 1.3580000 9.5040000 4.0730000 + 40 40 1 0.0000000 4.0730000 9.5040000 1.3580000 + 41 41 1 0.0000000 0.0000000 5.4310000 5.4310000 + 42 42 1 0.0000000 0.0000000 8.1460000 8.1460000 + 43 43 1 0.0000000 2.7150000 8.1460000 5.4310000 + 44 44 1 0.0000000 2.7150000 5.4310000 8.1460000 + 45 45 1 0.0000000 4.0730000 6.7890000 9.5040000 + 46 46 1 0.0000000 1.3580000 6.7890000 6.7890000 + 47 47 1 0.0000000 1.3580000 9.5040000 9.5040000 + 48 48 1 0.0000000 4.0730000 9.5040000 6.7890000 + 49 49 1 0.0000000 0.0000000 5.4310000 10.8620000 + 50 50 1 0.0000000 0.0000000 8.1460000 13.5770000 + 51 51 1 0.0000000 2.7150000 8.1460000 10.8620000 + 52 52 1 0.0000000 2.7150000 5.4310000 13.5770000 + 53 53 1 0.0000000 4.0730000 6.7890000 14.9350000 + 54 54 1 0.0000000 1.3580000 6.7890000 12.2200000 + 55 55 1 0.0000000 1.3580000 9.5040000 14.9350000 + 56 56 1 0.0000000 4.0730000 9.5040000 12.2200000 + 57 57 1 0.0000000 0.0000000 5.4310000 16.2930000 + 58 58 1 0.0000000 0.0000000 8.1460000 19.0080000 + 59 59 1 0.0000000 2.7150000 8.1460000 16.2930000 + 60 60 1 0.0000000 2.7150000 5.4310000 19.0080000 + 61 61 1 0.0000000 4.0730000 6.7890000 20.3660000 + 62 62 1 0.0000000 1.3580000 6.7890000 17.6510000 + 63 63 1 0.0000000 1.3580000 9.5040000 20.3660000 + 64 64 1 0.0000000 4.0730000 9.5040000 17.6510000 + 65 65 1 0.0000000 0.0000000 10.8620000 0.0000000 + 66 66 1 0.0000000 0.0000000 13.5770000 2.7150000 + 67 67 1 0.0000000 2.7150000 13.5770000 0.0000000 + 68 68 1 0.0000000 2.7150000 10.8620000 2.7150000 + 69 69 1 0.0000000 4.0730000 12.2200000 4.0730000 + 70 70 1 0.0000000 1.3580000 12.2200000 1.3580000 + 71 71 1 0.0000000 1.3580000 14.9350000 4.0730000 + 72 72 1 0.0000000 4.0730000 14.9350000 1.3580000 + 73 73 1 0.0000000 0.0000000 10.8620000 5.4310000 + 74 74 1 0.0000000 0.0000000 13.5770000 8.1460000 + 75 75 1 0.0000000 2.7150000 13.5770000 5.4310000 + 76 76 1 0.0000000 2.7150000 10.8620000 8.1460000 + 77 77 1 0.0000000 4.0730000 12.2200000 9.5040000 + 78 78 1 0.0000000 1.3580000 12.2200000 6.7890000 + 79 79 1 0.0000000 1.3580000 14.9350000 9.5040000 + 80 80 1 0.0000000 4.0730000 14.9350000 6.7890000 + 81 81 1 0.0000000 0.0000000 10.8620000 10.8620000 + 82 82 1 0.0000000 0.0000000 13.5770000 13.5770000 + 83 83 1 0.0000000 2.7150000 13.5770000 10.8620000 + 84 84 1 0.0000000 2.7150000 10.8620000 13.5770000 + 85 85 1 0.0000000 4.0730000 12.2200000 14.9350000 + 86 86 1 0.0000000 1.3580000 12.2200000 12.2200000 + 87 87 1 0.0000000 1.3580000 14.9350000 14.9350000 + 88 88 1 0.0000000 4.0730000 14.9350000 12.2200000 + 89 89 1 0.0000000 0.0000000 10.8620000 16.2930000 + 90 90 1 0.0000000 0.0000000 13.5770000 19.0080000 + 91 91 1 0.0000000 2.7150000 13.5770000 16.2930000 + 92 92 1 0.0000000 2.7150000 10.8620000 19.0080000 + 93 93 1 0.0000000 4.0730000 12.2200000 20.3660000 + 94 94 1 0.0000000 1.3580000 12.2200000 17.6510000 + 95 95 1 0.0000000 1.3580000 14.9350000 20.3660000 + 96 96 1 0.0000000 4.0730000 14.9350000 17.6510000 + 97 97 1 0.0000000 0.0000000 16.2930000 0.0000000 + 98 98 1 0.0000000 0.0000000 19.0080000 2.7150000 + 99 99 1 0.0000000 2.7150000 19.0080000 0.0000000 + 100 100 1 0.0000000 2.7150000 16.2930000 2.7150000 + 101 101 1 0.0000000 4.0730000 17.6510000 4.0730000 + 102 102 1 0.0000000 1.3580000 17.6510000 1.3580000 + 103 103 1 0.0000000 1.3580000 20.3660000 4.0730000 + 104 104 1 0.0000000 4.0730000 20.3660000 1.3580000 + 105 105 1 0.0000000 0.0000000 16.2930000 5.4310000 + 106 106 1 0.0000000 0.0000000 19.0080000 8.1460000 + 107 107 1 0.0000000 2.7150000 19.0080000 5.4310000 + 108 108 1 0.0000000 2.7150000 16.2930000 8.1460000 + 109 109 1 0.0000000 4.0730000 17.6510000 9.5040000 + 110 110 1 0.0000000 1.3580000 17.6510000 6.7890000 + 111 111 1 0.0000000 1.3580000 20.3660000 9.5040000 + 112 112 1 0.0000000 4.0730000 20.3660000 6.7890000 + 113 113 1 0.0000000 0.0000000 16.2930000 10.8620000 + 114 114 1 0.0000000 0.0000000 19.0080000 13.5770000 + 115 115 1 0.0000000 2.7150000 19.0080000 10.8620000 + 116 116 1 0.0000000 2.7150000 16.2930000 13.5770000 + 117 117 1 0.0000000 4.0730000 17.6510000 14.9350000 + 118 118 1 0.0000000 1.3580000 17.6510000 12.2200000 + 119 119 1 0.0000000 1.3580000 20.3660000 14.9350000 + 120 120 1 0.0000000 4.0730000 20.3660000 12.2200000 + 121 121 1 0.0000000 0.0000000 16.2930000 16.2930000 + 122 122 1 0.0000000 0.0000000 19.0080000 19.0080000 + 123 123 1 0.0000000 2.7150000 19.0080000 16.2930000 + 124 124 1 0.0000000 2.7150000 16.2930000 19.0080000 + 125 125 1 0.0000000 4.0730000 17.6510000 20.3660000 + 126 126 1 0.0000000 1.3580000 17.6510000 17.6510000 + 127 127 1 0.0000000 1.3580000 20.3660000 20.3660000 + 128 128 1 0.0000000 4.0730000 20.3660000 17.6510000 + 129 129 1 0.0000000 5.4310000 0.0000000 0.0000000 + 130 130 1 0.0000000 5.4310000 2.7150000 2.7150000 + 131 131 1 0.0000000 8.1460000 2.7150000 0.0000000 + 132 132 1 0.0000000 8.1460000 0.0000000 2.7150000 + 133 133 1 0.0000000 9.5040000 1.3580000 4.0730000 + 134 134 1 0.0000000 6.7890000 1.3580000 1.3580000 + 135 135 1 0.0000000 6.7890000 4.0730000 4.0730000 + 136 136 1 0.0000000 9.5040000 4.0730000 1.3580000 + 137 137 1 0.0000000 5.4310000 0.0000000 5.4310000 + 138 138 1 0.0000000 5.4310000 2.7150000 8.1460000 + 139 139 1 0.0000000 8.1460000 2.7150000 5.4310000 + 140 140 1 0.0000000 8.1460000 0.0000000 8.1460000 + 141 141 1 0.0000000 9.5040000 1.3580000 9.5040000 + 142 142 1 0.0000000 6.7890000 1.3580000 6.7890000 + 143 143 1 0.0000000 6.7890000 4.0730000 9.5040000 + 144 144 1 0.0000000 9.5040000 4.0730000 6.7890000 + 145 145 1 0.0000000 5.4310000 0.0000000 10.8620000 + 146 146 1 0.0000000 5.4310000 2.7150000 13.5770000 + 147 147 1 0.0000000 8.1460000 2.7150000 10.8620000 + 148 148 1 0.0000000 8.1460000 0.0000000 13.5770000 + 149 149 1 0.0000000 9.5040000 1.3580000 14.9350000 + 150 150 1 0.0000000 6.7890000 1.3580000 12.2200000 + 151 151 1 0.0000000 6.7890000 4.0730000 14.9350000 + 152 152 1 0.0000000 9.5040000 4.0730000 12.2200000 + 153 153 1 0.0000000 5.4310000 0.0000000 16.2930000 + 154 154 1 0.0000000 5.4310000 2.7150000 19.0080000 + 155 155 1 0.0000000 8.1460000 2.7150000 16.2930000 + 156 156 1 0.0000000 8.1460000 0.0000000 19.0080000 + 157 157 1 0.0000000 9.5040000 1.3580000 20.3660000 + 158 158 1 0.0000000 6.7890000 1.3580000 17.6510000 + 159 159 1 0.0000000 6.7890000 4.0730000 20.3660000 + 160 160 1 0.0000000 9.5040000 4.0730000 17.6510000 + 161 161 1 0.0000000 5.4310000 5.4310000 0.0000000 + 162 162 1 0.0000000 5.4310000 8.1460000 2.7150000 + 163 163 1 0.0000000 8.1460000 8.1460000 0.0000000 + 164 164 1 0.0000000 8.1460000 5.4310000 2.7150000 + 165 165 1 0.0000000 9.5040000 6.7890000 4.0730000 + 166 166 1 0.0000000 6.7890000 6.7890000 1.3580000 + 167 167 1 0.0000000 6.7890000 9.5040000 4.0730000 + 168 168 1 0.0000000 9.5040000 9.5040000 1.3580000 + 169 169 1 0.0000000 5.4310000 5.4310000 5.4310000 + 170 170 1 0.0000000 5.4310000 8.1460000 8.1460000 + 171 171 1 0.0000000 8.1460000 8.1460000 5.4310000 + 172 172 1 0.0000000 8.1460000 5.4310000 8.1460000 + 173 173 1 0.0000000 9.5040000 6.7890000 9.5040000 + 174 174 1 0.0000000 6.7890000 6.7890000 6.7890000 + 175 175 1 0.0000000 6.7890000 9.5040000 9.5040000 + 176 176 1 0.0000000 9.5040000 9.5040000 6.7890000 + 177 177 1 0.0000000 5.4310000 5.4310000 10.8620000 + 178 178 1 0.0000000 5.4310000 8.1460000 13.5770000 + 179 179 1 0.0000000 8.1460000 8.1460000 10.8620000 + 180 180 1 0.0000000 8.1460000 5.4310000 13.5770000 + 181 181 1 0.0000000 9.5040000 6.7890000 14.9350000 + 182 182 1 0.0000000 6.7890000 6.7890000 12.2200000 + 183 183 1 0.0000000 6.7890000 9.5040000 14.9350000 + 184 184 1 0.0000000 9.5040000 9.5040000 12.2200000 + 185 185 1 0.0000000 5.4310000 5.4310000 16.2930000 + 186 186 1 0.0000000 5.4310000 8.1460000 19.0080000 + 187 187 1 0.0000000 8.1460000 8.1460000 16.2930000 + 188 188 1 0.0000000 8.1460000 5.4310000 19.0080000 + 189 189 1 0.0000000 9.5040000 6.7890000 20.3660000 + 190 190 1 0.0000000 6.7890000 6.7890000 17.6510000 + 191 191 1 0.0000000 6.7890000 9.5040000 20.3660000 + 192 192 1 0.0000000 9.5040000 9.5040000 17.6510000 + 193 193 1 0.0000000 5.4310000 10.8620000 0.0000000 + 194 194 1 0.0000000 5.4310000 13.5770000 2.7150000 + 195 195 1 0.0000000 8.1460000 13.5770000 0.0000000 + 196 196 1 0.0000000 8.1460000 10.8620000 2.7150000 + 197 197 1 0.0000000 9.5040000 12.2200000 4.0730000 + 198 198 1 0.0000000 6.7890000 12.2200000 1.3580000 + 199 199 1 0.0000000 6.7890000 14.9350000 4.0730000 + 200 200 1 0.0000000 9.5040000 14.9350000 1.3580000 + 201 201 1 0.0000000 5.4310000 10.8620000 5.4310000 + 202 202 1 0.0000000 5.4310000 13.5770000 8.1460000 + 203 203 1 0.0000000 8.1460000 13.5770000 5.4310000 + 204 204 1 0.0000000 8.1460000 10.8620000 8.1460000 + 205 205 1 0.0000000 9.5040000 12.2200000 9.5040000 + 206 206 1 0.0000000 6.7890000 12.2200000 6.7890000 + 207 207 1 0.0000000 6.7890000 14.9350000 9.5040000 + 208 208 1 0.0000000 9.5040000 14.9350000 6.7890000 + 209 209 1 0.0000000 5.4310000 10.8620000 10.8620000 + 210 210 1 0.0000000 5.4310000 13.5770000 13.5770000 + 211 211 1 0.0000000 8.1460000 13.5770000 10.8620000 + 212 212 1 0.0000000 8.1460000 10.8620000 13.5770000 + 213 213 1 0.0000000 9.5040000 12.2200000 14.9350000 + 214 214 1 0.0000000 6.7890000 12.2200000 12.2200000 + 215 215 1 0.0000000 6.7890000 14.9350000 14.9350000 + 216 216 1 0.0000000 9.5040000 14.9350000 12.2200000 + 217 217 1 0.0000000 5.4310000 10.8620000 16.2930000 + 218 218 1 0.0000000 5.4310000 13.5770000 19.0080000 + 219 219 1 0.0000000 8.1460000 13.5770000 16.2930000 + 220 220 1 0.0000000 8.1460000 10.8620000 19.0080000 + 221 221 1 0.0000000 9.5040000 12.2200000 20.3660000 + 222 222 1 0.0000000 6.7890000 12.2200000 17.6510000 + 223 223 1 0.0000000 6.7890000 14.9350000 20.3660000 + 224 224 1 0.0000000 9.5040000 14.9350000 17.6510000 + 225 225 1 0.0000000 5.4310000 16.2930000 0.0000000 + 226 226 1 0.0000000 5.4310000 19.0080000 2.7150000 + 227 227 1 0.0000000 8.1460000 19.0080000 0.0000000 + 228 228 1 0.0000000 8.1460000 16.2930000 2.7150000 + 229 229 1 0.0000000 9.5040000 17.6510000 4.0730000 + 230 230 1 0.0000000 6.7890000 17.6510000 1.3580000 + 231 231 1 0.0000000 6.7890000 20.3660000 4.0730000 + 232 232 1 0.0000000 9.5040000 20.3660000 1.3580000 + 233 233 1 0.0000000 5.4310000 16.2930000 5.4310000 + 234 234 1 0.0000000 5.4310000 19.0080000 8.1460000 + 235 235 1 0.0000000 8.1460000 19.0080000 5.4310000 + 236 236 1 0.0000000 8.1460000 16.2930000 8.1460000 + 237 237 1 0.0000000 9.5040000 17.6510000 9.5040000 + 238 238 1 0.0000000 6.7890000 17.6510000 6.7890000 + 239 239 1 0.0000000 6.7890000 20.3660000 9.5040000 + 240 240 1 0.0000000 9.5040000 20.3660000 6.7890000 + 241 241 1 0.0000000 5.4310000 16.2930000 10.8620000 + 242 242 1 0.0000000 5.4310000 19.0080000 13.5770000 + 243 243 1 0.0000000 8.1460000 19.0080000 10.8620000 + 244 244 1 0.0000000 8.1460000 16.2930000 13.5770000 + 245 245 1 0.0000000 9.5040000 17.6510000 14.9350000 + 246 246 1 0.0000000 6.7890000 17.6510000 12.2200000 + 247 247 1 0.0000000 6.7890000 20.3660000 14.9350000 + 248 248 1 0.0000000 9.5040000 20.3660000 12.2200000 + 249 249 1 0.0000000 5.4310000 16.2930000 16.2930000 + 250 250 1 0.0000000 5.4310000 19.0080000 19.0080000 + 251 251 1 0.0000000 8.1460000 19.0080000 16.2930000 + 252 252 1 0.0000000 8.1460000 16.2930000 19.0080000 + 253 253 1 0.0000000 9.5040000 17.6510000 20.3660000 + 254 254 1 0.0000000 6.7890000 17.6510000 17.6510000 + 255 255 1 0.0000000 6.7890000 20.3660000 20.3660000 + 256 256 1 0.0000000 9.5040000 20.3660000 17.6510000 + 257 257 1 0.0000000 10.8620000 0.0000000 0.0000000 + 258 258 1 0.0000000 10.8620000 2.7150000 2.7150000 + 259 259 1 0.0000000 13.5770000 2.7150000 0.0000000 + 260 260 1 0.0000000 13.5770000 0.0000000 2.7150000 + 261 261 1 0.0000000 14.9350000 1.3580000 4.0730000 + 262 262 1 0.0000000 12.2200000 1.3580000 1.3580000 + 263 263 1 0.0000000 12.2200000 4.0730000 4.0730000 + 264 264 1 0.0000000 14.9350000 4.0730000 1.3580000 + 265 265 1 0.0000000 10.8620000 0.0000000 5.4310000 + 266 266 1 0.0000000 10.8620000 2.7150000 8.1460000 + 267 267 1 0.0000000 13.5770000 2.7150000 5.4310000 + 268 268 1 0.0000000 13.5770000 0.0000000 8.1460000 + 269 269 1 0.0000000 14.9350000 1.3580000 9.5040000 + 270 270 1 0.0000000 12.2200000 1.3580000 6.7890000 + 271 271 1 0.0000000 12.2200000 4.0730000 9.5040000 + 272 272 1 0.0000000 14.9350000 4.0730000 6.7890000 + 273 273 1 0.0000000 10.8620000 0.0000000 10.8620000 + 274 274 1 0.0000000 10.8620000 2.7150000 13.5770000 + 275 275 1 0.0000000 13.5770000 2.7150000 10.8620000 + 276 276 1 0.0000000 13.5770000 0.0000000 13.5770000 + 277 277 1 0.0000000 14.9350000 1.3580000 14.9350000 + 278 278 1 0.0000000 12.2200000 1.3580000 12.2200000 + 279 279 1 0.0000000 12.2200000 4.0730000 14.9350000 + 280 280 1 0.0000000 14.9350000 4.0730000 12.2200000 + 281 281 1 0.0000000 10.8620000 0.0000000 16.2930000 + 282 282 1 0.0000000 10.8620000 2.7150000 19.0080000 + 283 283 1 0.0000000 13.5770000 2.7150000 16.2930000 + 284 284 1 0.0000000 13.5770000 0.0000000 19.0080000 + 285 285 1 0.0000000 14.9350000 1.3580000 20.3660000 + 286 286 1 0.0000000 12.2200000 1.3580000 17.6510000 + 287 287 1 0.0000000 12.2200000 4.0730000 20.3660000 + 288 288 1 0.0000000 14.9350000 4.0730000 17.6510000 + 289 289 1 0.0000000 10.8620000 5.4310000 0.0000000 + 290 290 1 0.0000000 10.8620000 8.1460000 2.7150000 + 291 291 1 0.0000000 13.5770000 8.1460000 0.0000000 + 292 292 1 0.0000000 13.5770000 5.4310000 2.7150000 + 293 293 1 0.0000000 14.9350000 6.7890000 4.0730000 + 294 294 1 0.0000000 12.2200000 6.7890000 1.3580000 + 295 295 1 0.0000000 12.2200000 9.5040000 4.0730000 + 296 296 1 0.0000000 14.9350000 9.5040000 1.3580000 + 297 297 1 0.0000000 10.8620000 5.4310000 5.4310000 + 298 298 1 0.0000000 10.8620000 8.1460000 8.1460000 + 299 299 1 0.0000000 13.5770000 8.1460000 5.4310000 + 300 300 1 0.0000000 13.5770000 5.4310000 8.1460000 + 301 301 1 0.0000000 14.9350000 6.7890000 9.5040000 + 302 302 1 0.0000000 12.2200000 6.7890000 6.7890000 + 303 303 1 0.0000000 12.2200000 9.5040000 9.5040000 + 304 304 1 0.0000000 14.9350000 9.5040000 6.7890000 + 305 305 1 0.0000000 10.8620000 5.4310000 10.8620000 + 306 306 1 0.0000000 10.8620000 8.1460000 13.5770000 + 307 307 1 0.0000000 13.5770000 8.1460000 10.8620000 + 308 308 1 0.0000000 13.5770000 5.4310000 13.5770000 + 309 309 1 0.0000000 14.9350000 6.7890000 14.9350000 + 310 310 1 0.0000000 12.2200000 6.7890000 12.2200000 + 311 311 1 0.0000000 12.2200000 9.5040000 14.9350000 + 312 312 1 0.0000000 14.9350000 9.5040000 12.2200000 + 313 313 1 0.0000000 10.8620000 5.4310000 16.2930000 + 314 314 1 0.0000000 10.8620000 8.1460000 19.0080000 + 315 315 1 0.0000000 13.5770000 8.1460000 16.2930000 + 316 316 1 0.0000000 13.5770000 5.4310000 19.0080000 + 317 317 1 0.0000000 14.9350000 6.7890000 20.3660000 + 318 318 1 0.0000000 12.2200000 6.7890000 17.6510000 + 319 319 1 0.0000000 12.2200000 9.5040000 20.3660000 + 320 320 1 0.0000000 14.9350000 9.5040000 17.6510000 + 321 321 1 0.0000000 10.8620000 10.8620000 0.0000000 + 322 322 1 0.0000000 10.8620000 13.5770000 2.7150000 + 323 323 1 0.0000000 13.5770000 13.5770000 0.0000000 + 324 324 1 0.0000000 13.5770000 10.8620000 2.7150000 + 325 325 1 0.0000000 14.9350000 12.2200000 4.0730000 + 326 326 1 0.0000000 12.2200000 12.2200000 1.3580000 + 327 327 1 0.0000000 12.2200000 14.9350000 4.0730000 + 328 328 1 0.0000000 14.9350000 14.9350000 1.3580000 + 329 329 1 0.0000000 10.8620000 10.8620000 5.4310000 + 330 330 1 0.0000000 10.8620000 13.5770000 8.1460000 + 331 331 1 0.0000000 13.5770000 13.5770000 5.4310000 + 332 332 1 0.0000000 13.5770000 10.8620000 8.1460000 + 333 333 1 0.0000000 14.9350000 12.2200000 9.5040000 + 334 334 1 0.0000000 12.2200000 12.2200000 6.7890000 + 335 335 1 0.0000000 12.2200000 14.9350000 9.5040000 + 336 336 1 0.0000000 14.9350000 14.9350000 6.7890000 + 337 337 1 0.0000000 10.8620000 10.8620000 10.8620000 + 338 338 1 0.0000000 10.8620000 13.5770000 13.5770000 + 339 339 1 0.0000000 13.5770000 13.5770000 10.8620000 + 340 340 1 0.0000000 13.5770000 10.8620000 13.5770000 + 341 341 1 0.0000000 14.9350000 12.2200000 14.9350000 + 342 342 1 0.0000000 12.2200000 12.2200000 12.2200000 + 343 343 1 0.0000000 12.2200000 14.9350000 14.9350000 + 344 344 1 0.0000000 14.9350000 14.9350000 12.2200000 + 345 345 1 0.0000000 10.8620000 10.8620000 16.2930000 + 346 346 1 0.0000000 10.8620000 13.5770000 19.0080000 + 347 347 1 0.0000000 13.5770000 13.5770000 16.2930000 + 348 348 1 0.0000000 13.5770000 10.8620000 19.0080000 + 349 349 1 0.0000000 14.9350000 12.2200000 20.3660000 + 350 350 1 0.0000000 12.2200000 12.2200000 17.6510000 + 351 351 1 0.0000000 12.2200000 14.9350000 20.3660000 + 352 352 1 0.0000000 14.9350000 14.9350000 17.6510000 + 353 353 1 0.0000000 10.8620000 16.2930000 0.0000000 + 354 354 1 0.0000000 10.8620000 19.0080000 2.7150000 + 355 355 1 0.0000000 13.5770000 19.0080000 0.0000000 + 356 356 1 0.0000000 13.5770000 16.2930000 2.7150000 + 357 357 1 0.0000000 14.9350000 17.6510000 4.0730000 + 358 358 1 0.0000000 12.2200000 17.6510000 1.3580000 + 359 359 1 0.0000000 12.2200000 20.3660000 4.0730000 + 360 360 1 0.0000000 14.9350000 20.3660000 1.3580000 + 361 361 1 0.0000000 10.8620000 16.2930000 5.4310000 + 362 362 1 0.0000000 10.8620000 19.0080000 8.1460000 + 363 363 1 0.0000000 13.5770000 19.0080000 5.4310000 + 364 364 1 0.0000000 13.5770000 16.2930000 8.1460000 + 365 365 1 0.0000000 14.9350000 17.6510000 9.5040000 + 366 366 1 0.0000000 12.2200000 17.6510000 6.7890000 + 367 367 1 0.0000000 12.2200000 20.3660000 9.5040000 + 368 368 1 0.0000000 14.9350000 20.3660000 6.7890000 + 369 369 1 0.0000000 10.8620000 16.2930000 10.8620000 + 370 370 1 0.0000000 10.8620000 19.0080000 13.5770000 + 371 371 1 0.0000000 13.5770000 19.0080000 10.8620000 + 372 372 1 0.0000000 13.5770000 16.2930000 13.5770000 + 373 373 1 0.0000000 14.9350000 17.6510000 14.9350000 + 374 374 1 0.0000000 12.2200000 17.6510000 12.2200000 + 375 375 1 0.0000000 12.2200000 20.3660000 14.9350000 + 376 376 1 0.0000000 14.9350000 20.3660000 12.2200000 + 377 377 1 0.0000000 10.8620000 16.2930000 16.2930000 + 378 378 1 0.0000000 10.8620000 19.0080000 19.0080000 + 379 379 1 0.0000000 13.5770000 19.0080000 16.2930000 + 380 380 1 0.0000000 13.5770000 16.2930000 19.0080000 + 381 381 1 0.0000000 14.9350000 17.6510000 20.3660000 + 382 382 1 0.0000000 12.2200000 17.6510000 17.6510000 + 383 383 1 0.0000000 12.2200000 20.3660000 20.3660000 + 384 384 1 0.0000000 14.9350000 20.3660000 17.6510000 + 385 385 1 0.0000000 16.2930000 0.0000000 0.0000000 + 386 386 1 0.0000000 16.2930000 2.7150000 2.7150000 + 387 387 1 0.0000000 19.0080000 2.7150000 0.0000000 + 388 388 1 0.0000000 19.0080000 0.0000000 2.7150000 + 389 389 1 0.0000000 20.3660000 1.3580000 4.0730000 + 390 390 1 0.0000000 17.6510000 1.3580000 1.3580000 + 391 391 1 0.0000000 17.6510000 4.0730000 4.0730000 + 392 392 1 0.0000000 20.3660000 4.0730000 1.3580000 + 393 393 1 0.0000000 16.2930000 0.0000000 5.4310000 + 394 394 1 0.0000000 16.2930000 2.7150000 8.1460000 + 395 395 1 0.0000000 19.0080000 2.7150000 5.4310000 + 396 396 1 0.0000000 19.0080000 0.0000000 8.1460000 + 397 397 1 0.0000000 20.3660000 1.3580000 9.5040000 + 398 398 1 0.0000000 17.6510000 1.3580000 6.7890000 + 399 399 1 0.0000000 17.6510000 4.0730000 9.5040000 + 400 400 1 0.0000000 20.3660000 4.0730000 6.7890000 + 401 401 1 0.0000000 16.2930000 0.0000000 10.8620000 + 402 402 1 0.0000000 16.2930000 2.7150000 13.5770000 + 403 403 1 0.0000000 19.0080000 2.7150000 10.8620000 + 404 404 1 0.0000000 19.0080000 0.0000000 13.5770000 + 405 405 1 0.0000000 20.3660000 1.3580000 14.9350000 + 406 406 1 0.0000000 17.6510000 1.3580000 12.2200000 + 407 407 1 0.0000000 17.6510000 4.0730000 14.9350000 + 408 408 1 0.0000000 20.3660000 4.0730000 12.2200000 + 409 409 1 0.0000000 16.2930000 0.0000000 16.2930000 + 410 410 1 0.0000000 16.2930000 2.7150000 19.0080000 + 411 411 1 0.0000000 19.0080000 2.7150000 16.2930000 + 412 412 1 0.0000000 19.0080000 0.0000000 19.0080000 + 413 413 1 0.0000000 20.3660000 1.3580000 20.3660000 + 414 414 1 0.0000000 17.6510000 1.3580000 17.6510000 + 415 415 1 0.0000000 17.6510000 4.0730000 20.3660000 + 416 416 1 0.0000000 20.3660000 4.0730000 17.6510000 + 417 417 1 0.0000000 16.2930000 5.4310000 0.0000000 + 418 418 1 0.0000000 16.2930000 8.1460000 2.7150000 + 419 419 1 0.0000000 19.0080000 8.1460000 0.0000000 + 420 420 1 0.0000000 19.0080000 5.4310000 2.7150000 + 421 421 1 0.0000000 20.3660000 6.7890000 4.0730000 + 422 422 1 0.0000000 17.6510000 6.7890000 1.3580000 + 423 423 1 0.0000000 17.6510000 9.5040000 4.0730000 + 424 424 1 0.0000000 20.3660000 9.5040000 1.3580000 + 425 425 1 0.0000000 16.2930000 5.4310000 5.4310000 + 426 426 1 0.0000000 16.2930000 8.1460000 8.1460000 + 427 427 1 0.0000000 19.0080000 8.1460000 5.4310000 + 428 428 1 0.0000000 19.0080000 5.4310000 8.1460000 + 429 429 1 0.0000000 20.3660000 6.7890000 9.5040000 + 430 430 1 0.0000000 17.6510000 6.7890000 6.7890000 + 431 431 1 0.0000000 17.6510000 9.5040000 9.5040000 + 432 432 1 0.0000000 20.3660000 9.5040000 6.7890000 + 433 433 1 0.0000000 16.2930000 5.4310000 10.8620000 + 434 434 1 0.0000000 16.2930000 8.1460000 13.5770000 + 435 435 1 0.0000000 19.0080000 8.1460000 10.8620000 + 436 436 1 0.0000000 19.0080000 5.4310000 13.5770000 + 437 437 1 0.0000000 20.3660000 6.7890000 14.9350000 + 438 438 1 0.0000000 17.6510000 6.7890000 12.2200000 + 439 439 1 0.0000000 17.6510000 9.5040000 14.9350000 + 440 440 1 0.0000000 20.3660000 9.5040000 12.2200000 + 441 441 1 0.0000000 16.2930000 5.4310000 16.2930000 + 442 442 1 0.0000000 16.2930000 8.1460000 19.0080000 + 443 443 1 0.0000000 19.0080000 8.1460000 16.2930000 + 444 444 1 0.0000000 19.0080000 5.4310000 19.0080000 + 445 445 1 0.0000000 20.3660000 6.7890000 20.3660000 + 446 446 1 0.0000000 17.6510000 6.7890000 17.6510000 + 447 447 1 0.0000000 17.6510000 9.5040000 20.3660000 + 448 448 1 0.0000000 20.3660000 9.5040000 17.6510000 + 449 449 1 0.0000000 16.2930000 10.8620000 0.0000000 + 450 450 1 0.0000000 16.2930000 13.5770000 2.7150000 + 451 451 1 0.0000000 19.0080000 13.5770000 0.0000000 + 452 452 1 0.0000000 19.0080000 10.8620000 2.7150000 + 453 453 1 0.0000000 20.3660000 12.2200000 4.0730000 + 454 454 1 0.0000000 17.6510000 12.2200000 1.3580000 + 455 455 1 0.0000000 17.6510000 14.9350000 4.0730000 + 456 456 1 0.0000000 20.3660000 14.9350000 1.3580000 + 457 457 1 0.0000000 16.2930000 10.8620000 5.4310000 + 458 458 1 0.0000000 16.2930000 13.5770000 8.1460000 + 459 459 1 0.0000000 19.0080000 13.5770000 5.4310000 + 460 460 1 0.0000000 19.0080000 10.8620000 8.1460000 + 461 461 1 0.0000000 20.3660000 12.2200000 9.5040000 + 462 462 1 0.0000000 17.6510000 12.2200000 6.7890000 + 463 463 1 0.0000000 17.6510000 14.9350000 9.5040000 + 464 464 1 0.0000000 20.3660000 14.9350000 6.7890000 + 465 465 1 0.0000000 16.2930000 10.8620000 10.8620000 + 466 466 1 0.0000000 16.2930000 13.5770000 13.5770000 + 467 467 1 0.0000000 19.0080000 13.5770000 10.8620000 + 468 468 1 0.0000000 19.0080000 10.8620000 13.5770000 + 469 469 1 0.0000000 20.3660000 12.2200000 14.9350000 + 470 470 1 0.0000000 17.6510000 12.2200000 12.2200000 + 471 471 1 0.0000000 17.6510000 14.9350000 14.9350000 + 472 472 1 0.0000000 20.3660000 14.9350000 12.2200000 + 473 473 1 0.0000000 16.2930000 10.8620000 16.2930000 + 474 474 1 0.0000000 16.2930000 13.5770000 19.0080000 + 475 475 1 0.0000000 19.0080000 13.5770000 16.2930000 + 476 476 1 0.0000000 19.0080000 10.8620000 19.0080000 + 477 477 1 0.0000000 20.3660000 12.2200000 20.3660000 + 478 478 1 0.0000000 17.6510000 12.2200000 17.6510000 + 479 479 1 0.0000000 17.6510000 14.9350000 20.3660000 + 480 480 1 0.0000000 20.3660000 14.9350000 17.6510000 + 481 481 1 0.0000000 16.2930000 16.2930000 0.0000000 + 482 482 1 0.0000000 16.2930000 19.0080000 2.7150000 + 483 483 1 0.0000000 19.0080000 19.0080000 0.0000000 + 484 484 1 0.0000000 19.0080000 16.2930000 2.7150000 + 485 485 1 0.0000000 20.3660000 17.6510000 4.0730000 + 486 486 1 0.0000000 17.6510000 17.6510000 1.3580000 + 487 487 1 0.0000000 17.6510000 20.3660000 4.0730000 + 488 488 1 0.0000000 20.3660000 20.3660000 1.3580000 + 489 489 1 0.0000000 16.2930000 16.2930000 5.4310000 + 490 490 1 0.0000000 16.2930000 19.0080000 8.1460000 + 491 491 1 0.0000000 19.0080000 19.0080000 5.4310000 + 492 492 1 0.0000000 19.0080000 16.2930000 8.1460000 + 493 493 1 0.0000000 20.3660000 17.6510000 9.5040000 + 494 494 1 0.0000000 17.6510000 17.6510000 6.7890000 + 495 495 1 0.0000000 17.6510000 20.3660000 9.5040000 + 496 496 1 0.0000000 20.3660000 20.3660000 6.7890000 + 497 497 1 0.0000000 16.2930000 16.2930000 10.8620000 + 498 498 1 0.0000000 16.2930000 19.0080000 13.5770000 + 499 499 1 0.0000000 19.0080000 19.0080000 10.8620000 + 500 500 1 0.0000000 19.0080000 16.2930000 13.5770000 + 501 501 1 0.0000000 20.3660000 17.6510000 14.9350000 + 502 502 1 0.0000000 17.6510000 17.6510000 12.2200000 + 503 503 1 0.0000000 17.6510000 20.3660000 14.9350000 + 504 504 1 0.0000000 20.3660000 20.3660000 12.2200000 + 505 505 1 0.0000000 16.2930000 16.2930000 16.2930000 + 506 506 1 0.0000000 16.2930000 19.0080000 19.0080000 + 507 507 1 0.0000000 19.0080000 19.0080000 16.2930000 + 508 508 1 0.0000000 19.0080000 16.2930000 19.0080000 + 509 509 1 0.0000000 20.3660000 17.6510000 20.3660000 + 510 510 1 0.0000000 17.6510000 17.6510000 17.6510000 + 511 511 1 0.0000000 17.6510000 20.3660000 20.3660000 + 512 512 1 0.0000000 20.3660000 20.3660000 17.6510000 + diff --git a/examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_8.lmp b/examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_8.lmp new file mode 100755 index 0000000000..5066049895 --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_8.lmp @@ -0,0 +1,29 @@ +LAMMPS description + + 8 atoms + 0 bonds + 0 angles + 0 dihedrals + 0 impropers + + 1 atom types + 0 bond types + 0 angle types + 0 dihedral types + 0 improper types + + + 0.0000000 5.4310000 xlo xhi + 0.0000000 5.4310000 ylo yhi + 0.0000000 5.4310000 zlo zhi + + Atoms + + 1 1 1 0.0000000 0.0000000 0.0000000 0.0000000 + 2 2 1 0.0000000 1.3577500 1.3577500 1.3572000 + 3 3 1 0.0000000 2.7155000 2.7155000 0.0000000 + 4 4 1 0.0000000 4.0732500 4.0732500 1.3572000 + 5 5 1 0.0000000 2.7155000 0.0000000 2.7144000 + 6 6 1 0.0000000 4.0732500 1.3577500 4.0732500 + 7 7 1 0.0000000 0.0000000 2.7155000 2.7155000 + 8 8 1 0.0000000 1.3577500 4.0732500 4.0732500 diff --git a/examples/USER/phonon/dynamical_matrix_command/results/dynmat.dat b/examples/USER/phonon/dynamical_matrix_command/results/dynmat.dat new file mode 100755 index 0000000000..676f897416 --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/results/dynmat.dat @@ -0,0 +1,192 @@ +5409.83472486 3.05075234 0.00000214 +-1277.48270695 -863.24917964 -862.95613831 +-193.14095266 0.11071645 0.00000015 +-1277.48270619 -863.24917934 862.95613793 +-193.17613831 0.34066975 -0.00000031 +-1276.01088244 861.54715125 -861.62537402 +83.46959051 -0.09801326 0.00000000 +-1276.01088167 861.54715064 861.62537387 +3.05073556 5409.83419867 0.00000137 +-863.13224993 -1277.34160622 -862.92133430 +0.12865796 -193.14095472 -0.00000023 +-863.13224825 -1277.34160485 862.92133392 +-0.23661028 83.46934214 -0.00000046 +861.66402909 -1276.15172701 861.66024333 +-0.00634065 -193.17585981 -0.00000015 +861.66402909 -1276.15172686 -861.66024394 +0.00000031 0.00000031 5410.11037330 +-862.89766079 -862.97973912 -1277.71823542 +0.00000000 -0.00000008 83.84059083 +862.89766018 862.97973851 -1277.71823557 +0.00000015 0.00000015 -193.17558390 +-861.60900269 861.52691291 -1276.08157137 +-0.00000015 -0.00000031 -193.17573821 +861.60900330 -861.52691284 -1276.08157236 +-1277.48271824 -863.13225435 -862.89768596 +5409.83567916 3.04882502 2.82007861 +-1277.34161080 -863.24919475 862.97975804 +-193.14089260 0.11950100 0.11994134 +-1277.52243157 863.24943259 -863.11331046 +-193.17597070 0.16713301 -0.02106496 +-1274.64156872 859.96385388 860.17328202 +83.46945758 -0.16730525 -0.06100253 +-863.24919444 -1277.34161103 -862.97975804 +3.04882666 5409.83567944 -2.82007731 +-863.13225496 -1277.48271916 862.89768688 +0.11950094 -193.14089255 -0.11994043 +863.24943320 -1277.52243118 863.11331076 +-0.16730522 83.46945778 0.06100314 +859.96385365 -1274.64156819 -860.17328225 +0.16713979 -193.17596607 0.02106008 +-862.95611199 -862.92132598 -1277.71824411 +2.82004085 -2.82004013 5410.11000835 +862.92132743 862.95611344 -1277.71824587 +-0.11994722 0.11994786 83.84083834 +-862.88110757 862.88110699 -1277.34764097 +0.02099713 0.06108924 -193.17561785 +860.25587487 -860.25587502 -1274.81548840 +-0.06108897 -0.02099687 -193.17561808 +-193.14095465 0.12865765 0.00000015 +-1277.34160508 -863.13224794 862.92133361 +5409.83419867 3.05073968 0.00000092 +-1277.34160584 -863.13224924 -862.92133483 +83.46934214 -0.23660998 -0.00000076 +-1276.15172724 861.66402917 861.66024325 +-193.17585988 -0.00634042 -0.00000031 +-1276.15172694 861.66402940 -861.66024325 +0.11071645 -193.14095243 0.00000046 +-863.24917949 -1277.48270718 862.95613831 +3.05075524 5409.83472478 -0.00000046 +-863.24918117 -1277.48270825 -862.95613923 +0.34066922 -193.17613823 0.00000046 +861.54715094 -1276.01088228 -861.62537295 +-0.09801303 83.46959035 0.00000015 +861.54713538 -1276.01088145 861.62537387 +-0.00000046 -0.00000023 83.84059068 +862.97973867 862.89766010 -1277.71823633 +-0.00000214 -0.00000053 5410.11037574 +-862.97973943 -862.89766079 -1277.71823633 +0.00000015 0.00000008 -193.17558374 +861.52691291 -861.60900269 -1276.08157198 +-0.00000015 -0.00000015 -193.17573814 +-861.52691368 861.60900261 -1276.08157243 +-1277.48271786 -863.13225450 862.89768520 +-193.14089232 0.11950085 -0.11994115 +-1277.34161255 -863.24919673 -862.97975957 +5409.83568051 3.04882517 -2.82007644 +-1277.52243110 863.24943259 863.11330990 +83.46945732 -0.16730494 0.06100319 +-1274.64156796 859.96385342 -860.17328103 +-193.17597041 0.16713331 0.02106477 +-863.24919482 -1277.34161057 862.97975774 +0.11950077 -193.14089270 0.11994160 +-863.13225473 -1277.48271839 -862.89768673 +3.04882502 5409.83568081 2.82007903 +863.24943084 -1277.52242966 -863.11330868 +0.16713324 -193.17597064 -0.02106522 +859.96385510 -1274.64156926 860.17328255 +-0.16730411 83.46945641 -0.06100350 +862.95611161 862.92132537 -1277.71824365 +0.11994725 -0.11994740 83.84083859 +-862.92132606 -862.95611207 -1277.71824548 +-2.82003936 2.82004013 5410.11000806 +862.88110509 -862.88110547 -1277.34764015 +0.06108893 0.02099703 -193.17561792 +-860.25587388 860.25587441 -1274.81548916 +-0.02099726 -0.06108878 -193.17561777 +-193.17613465 -0.23660693 0.00000015 +-1277.52241409 863.24943328 -862.88111478 +83.46934549 0.34066334 -0.00000015 +-1277.52241425 863.24943335 862.88111508 +5404.58897235 -9.71806749 0.00000015 +-1273.31333522 -858.38273960 -858.96245956 +-193.21062369 -0.11938368 0.00000000 +-1273.31333598 -858.38273967 858.96245926 +0.34066342 83.46934572 0.00000015 +863.24943335 -1277.52241402 862.88111478 +-0.23660723 -193.17613480 -0.00000046 +863.24943320 -1277.52241425 -862.88111432 +-9.71806582 5404.58897135 -0.00000183 +-858.38273891 -1273.31333552 -858.96245926 +-0.11938338 -193.21062369 0.00000000 +-858.38273937 -1273.31333598 858.96245987 +-0.00000031 -0.00000008 -193.17559595 +-863.11328229 863.11328297 -1277.34763999 +0.00000000 -0.00000015 -193.17559595 +863.11328305 -863.11328282 -1277.34763984 +0.00000122 -0.00000259 5404.30470550 +-858.80486827 -858.80486866 -1273.17865241 +-0.00000031 0.00000000 83.09905870 +858.80486827 858.80486812 -1273.17865272 +-1276.01089136 861.66402482 -861.60900483 +-193.17596134 -0.16730494 0.02099535 +-1276.15175745 861.54714988 861.52691337 +83.46947097 0.16714109 0.06108436 +-1273.31334651 -858.38273311 -858.80488185 +5404.58493608 -3.04507687 -2.81778617 +-1276.19187193 -861.66399965 861.74280750 +-193.21058304 -0.11920641 -0.12012575 +861.54714972 -1276.15175730 861.52691337 +0.16714140 83.46947120 0.06108451 +861.66402345 -1276.01089022 -861.60900330 +-0.16730487 -193.17596164 0.02099489 +-858.38273281 -1273.31334681 -858.80488063 +-3.04507603 5404.58493554 -2.81778617 +-861.66400079 -1276.19187270 861.74280887 +-0.11920511 -193.21058281 -0.12012498 +-861.62536929 861.66025668 -1276.08157121 +-0.02106026 0.06099877 -193.17561197 +861.66025752 -861.62537051 -1276.08157274 +0.06099923 -0.02106049 -193.17561227 +-858.96244980 -858.96244965 -1273.17866523 +-2.81780608 -2.81780615 5404.30474272 +861.58531232 861.58531248 -1275.71087663 +0.12013467 0.12013460 83.09915619 +83.46958166 -0.00634218 -0.00000023 +-1274.64157002 859.96383191 860.25587098 +-193.17585332 -0.09802844 0.00000023 +-1274.64157155 859.96383290 -860.25587243 +-193.21062064 -0.11939070 -0.00000008 +-1276.19189573 -861.66398638 861.58531118 +5404.58377546 3.62403097 0.00000015 +-1276.19189558 -861.66398615 -861.58531103 +-0.09802859 -193.17585355 -0.00000015 +859.96383206 -1274.64156979 -860.25587113 +-0.00634187 83.46958204 -0.00000008 +859.96383282 -1274.64157132 860.25587212 +-0.11939055 -193.21062041 0.00000000 +-861.66398576 -1276.19189528 861.58531087 +3.62402982 5404.58377698 -0.00000076 +-861.66398927 -1276.19189772 -861.58531331 +0.00000000 0.00000000 -193.17573654 +860.17327676 -860.17327637 -1274.81551212 +0.00000031 0.00000023 -193.17573676 +-860.17327615 860.17327645 -1274.81551258 +0.00000000 0.00000015 83.09907327 +861.74281299 861.74281299 -1275.71086763 +-0.00000046 -0.00000015 5404.30514861 +-861.74281406 -861.74281421 -1275.71086938 +-1276.01088968 861.66402284 861.60900330 +83.46947136 0.16714109 -0.06108436 +-1276.15175722 861.54714957 -861.52691391 +-193.17596141 -0.16730510 -0.02099527 +-1273.31334666 -858.38273281 858.80488124 +-193.21058304 -0.11920641 0.12012636 +-1276.19187285 -861.66400087 -861.74280773 +5404.58493638 -3.04507565 2.81778602 +861.54715133 -1276.15175913 -861.52691490 +-0.16730502 -193.17596118 -0.02099497 +861.66402314 -1276.01088976 861.60900383 +0.16714125 83.46947151 -0.06108497 +-858.38273296 -1273.31334681 858.80488139 +-0.11920686 -193.21058311 0.12012605 +-861.66400079 -1276.19187255 -861.74280811 +-3.04506703 5404.58493432 2.81779319 +861.62536952 -861.66025637 -1276.08157175 +-0.06099938 0.02106080 -193.17561235 +-861.66025645 861.62536929 -1276.08157213 +0.02106049 -0.06099862 -193.17561189 +858.96245049 858.96245041 -1273.17866553 +-0.12013444 -0.12013475 83.09915550 +-861.58531232 -861.58531217 -1275.71087655 +2.81780737 2.81780753 5404.30474547 diff --git a/examples/USER/phonon/dynamical_matrix_command/results/out.silicon b/examples/USER/phonon/dynamical_matrix_command/results/out.silicon new file mode 100755 index 0000000000..9920ddac51 --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/results/out.silicon @@ -0,0 +1,58 @@ +LAMMPS (16 Jul 2018) +Reading data file ... + orthogonal box = (0 0 0) to (5.431 5.431 5.431) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 8 atoms +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4 + ghost atom cutoff = 4 + binsize = 2, bins = 3 3 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair tersoff, perpetual + attributes: full, newton on + pair build: full/bin + stencil: full/bin/3d + bin: standard +Calculating Dynamical Matrix... +Dynamical Matrix calculation took 0.001183 seconds +Finished Calculating Dynamical Matrix +Loop time of 1.22396e+06 on 4 procs for 0 steps with 8 atoms + +0.0% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.00016781 | 0.00041345 | 0.00051464 | 0.0 | 0.00 +Bond | 1.9255e-06 | 2.1775e-06 | 2.4787e-06 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.00056143 | 0.00066602 | 0.00090865 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 1.224e+06 | | |100.00 + +Nlocal: 2 ave 3 max 1 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Nghost: 56 ave 57 max 55 min +Histogram: 1 0 0 0 0 2 0 0 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 32 ave 48 max 16 min +Histogram: 1 0 0 0 0 2 0 0 0 1 + +Total # of neighbors = 128 +Ave neighs/atom = 16 +Ave special neighs/atom = 0 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/USER/phonon/dynamical_matrix_command/silicon_input_file.lmp b/examples/USER/phonon/dynamical_matrix_command/silicon_input_file.lmp new file mode 100755 index 0000000000..5066049895 --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/silicon_input_file.lmp @@ -0,0 +1,29 @@ +LAMMPS description + + 8 atoms + 0 bonds + 0 angles + 0 dihedrals + 0 impropers + + 1 atom types + 0 bond types + 0 angle types + 0 dihedral types + 0 improper types + + + 0.0000000 5.4310000 xlo xhi + 0.0000000 5.4310000 ylo yhi + 0.0000000 5.4310000 zlo zhi + + Atoms + + 1 1 1 0.0000000 0.0000000 0.0000000 0.0000000 + 2 2 1 0.0000000 1.3577500 1.3577500 1.3572000 + 3 3 1 0.0000000 2.7155000 2.7155000 0.0000000 + 4 4 1 0.0000000 4.0732500 4.0732500 1.3572000 + 5 5 1 0.0000000 2.7155000 0.0000000 2.7144000 + 6 6 1 0.0000000 4.0732500 1.3577500 4.0732500 + 7 7 1 0.0000000 0.0000000 2.7155000 2.7155000 + 8 8 1 0.0000000 1.3577500 4.0732500 4.0732500 diff --git a/examples/USER/phonon/third_order_command/Manual.md b/examples/USER/phonon/third_order_command/Manual.md new file mode 100755 index 0000000000..49340cb54d --- /dev/null +++ b/examples/USER/phonon/third_order_command/Manual.md @@ -0,0 +1,48 @@ +# third_order command + +## Syntax + +``` +third_order group-ID style args keyword value ... +``` + +* group-ID = ID of group of atoms to displace +* style = *regular* or *ballistico* +``` +*regular* args = gamma + gamma = finite difference displacement length +*ballistico* args = gamma + gamma = finite difference displacement length +``` +* zero or more keyword/value pairs may be appended +* keyword = *file* or *binary* +``` +*file* value = output_file + output_file = name of file to dump the dynamical matrix into +*binary* values = *no* or *gzip* +``` + +## Examples + +``` +third_order 1 regular 0.000001 +third_order 1 ballistico 0.000001 +third_order 3 regular 0.00004 file third_order.dat +third_order 5 ballistico 0.00000001 file third_order.dat binary gzip +``` + +## Description + +Calculate the finite difference third order tensor of the selected group. + +## Restrictions + +None + +## Related commands + +None + +## Default + +The option defaults are file = "third_order.dat", binary = no diff --git a/examples/USER/phonon/third_order_command/README.md b/examples/USER/phonon/third_order_command/README.md new file mode 100755 index 0000000000..a9604e4575 --- /dev/null +++ b/examples/USER/phonon/third_order_command/README.md @@ -0,0 +1,25 @@ +# LAMMPS LATTICE DYNAMICS COMMANDS + +## THIRD ORDER TENSOR CALCULATOR + +This directory contains the ingredients to calculate a third order tensor. + +Example: +``` +$THIRD_ORDER=third_order #tensor output file +NP=4 #number of processors +mpirun -np $NP lmp_mpi < in.silicon > out.silicon +combine.sh third_order +``` + +To test out a different silicon example: +``` +$THIRD_ORDER=third_order +$LMP_FILE=amorphous_silicon.lmp +cp lmp_bank/$LMP_FILE ./silicon_input_file.lmp +NP=4 #number of processors +mpirun -np $NP lmp_mpi < in.silicon > out.silicon +bash combine.sh $THIRD_ORDER +``` + +## Requires: MANYBODY and MOLECULE packages diff --git a/examples/USER/phonon/third_order_command/Si.opt.tersoff b/examples/USER/phonon/third_order_command/Si.opt.tersoff new file mode 100755 index 0000000000..3bc19f0581 --- /dev/null +++ b/examples/USER/phonon/third_order_command/Si.opt.tersoff @@ -0,0 +1,66 @@ +# Tersoff parameters for various elements and mixtures +# multiple entries can be added to this file, LAMMPS reads the ones it needs +# these entries are in LAMMPS "metal" units: +# A,B = eV; lambda1,lambda2,lambda3 = 1/Angstroms; R,D = Angstroms +# other quantities are unitless + +# Aidan Thompson (athomps at sandia.gov) takes full blame for this +# file. It specifies various potentials published by J. Tersoff for +# silicon, carbon and germanium. Since Tersoff published several +# different silicon potentials, I refer to them using atom types +# Si(B), Si(C) and Si(D). The last two are almost almost identical but +# refer to two different publications. These names should be used in +# the LAMMPS command when the file is invoked. For example: +# pair_coeff * * SiCGe.tersoff Si(B). The Si(D), C and Ge potentials +# can be used pure silicon, pure carbon, pure germanium, binary SiC, +# and binary SiGe, but not binary GeC or ternary SiGeC. LAMMPS will +# generate an error if this file is used with any combination +# involving C and Ge, since there are no entries for the GeC +# interactions (Tersoff did not publish parameters for this +# cross-interaction.) + +# format of a single entry (one or more lines): +# element 1, element 2, element 3, +# m, gamma, lambda3, c, d, costheta0, n, beta, lambda2, B, R, D, lambda1, A + +# The original Tersoff potential for Silicon, Si(B) +# J. Tersoff, PRB, 37, 6991 (1988) + +Si(B) Si(B) Si(B) 3.0 1.0 1.3258 4.8381 2.0417 0.0000 22.956 + 0.33675 1.3258 95.373 3.0 0.2 3.2394 3264.7 + +# The later Tersoff potential for Silicon, Si(C) +# J. Tersoff, PRB, 38, 9902 (1988) + +Si(C) Si(C) Si(C) 3.0 1.0 1.7322 1.0039e5 16.218 -0.59826 0.78734 + 1.0999e-6 1.7322 471.18 2.85 0.15 2.4799 1830.8 + +# The later Tersoff potential for Carbon, Silicon, and Germanium +# J. Tersoff, PRB, 39, 5566 (1989) + errata (PRB 41, 3248) +# The Si and C parameters are very close to those in SiC.tersoff + +C C C 3.0 1.0 0.0 3.8049e4 4.3484 -0.57058 0.72751 1.5724e-7 2.2119 346.74 1.95 0.15 3.4879 1393.6 +Si(D) Si(D) Si(D) 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 1.1000e-6 1.7322 471.18 2.85 0.15 2.4799 1830.8 +Ge Ge Ge 3.0 1.0 0.0 1.0643e5 15.652 -0.43884 0.75627 9.0166e-7 1.7047 419.23 2.95 0.15 2.4451 1769.0 + +C Si(D) Si(D) 3.0 1.0 0.0 3.8049e4 4.3484 -0.57058 0.72751 1.5724e-7 1.97205 395.1451 2.3573 0.1527 2.9839 1597.3111 +C Si(D) C 3.0 1.0 0.0 3.8049e4 4.3484 -0.57058 0.72751 0.0 0.0 0.0 1.95 0.15 0.0 0.0 +C C Si(D) 3.0 1.0 0.0 3.8049e4 4.3484 -0.57058 0.72751 0.0 0.0 0.0 2.3573 0.1527 0.0 0.0 + +Si(D) C C 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 1.1000e-6 1.97205 395.1451 2.3573 0.1527 2.9839 1597.3111 +Si(D) Si(D) C 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 0.0 0.0 0.0 2.3573 0.1527 0.0 0.0 +Si(D) C Si(D) 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 0.0 0.0 0.0 2.85 0.15 0.0 0.0 + +Si(D) Ge Ge 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 1.1000e-6 1.71845 444.7177 2.8996 0.1500 2.4625 1799.6347 +Si(D) Si(D) Ge 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 0.0 0.0 0.0 2.8996 0.1500 0.0 0.0 +Si(D) Ge Si(D) 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 0.0 0.0 0.0 2.85 0.15 0.0 0.0 + +Ge Si(D) Si(D) 3.0 1.0 0.0 1.0643e5 15.652 -0.43884 0.75627 9.0166e-7 1.71845 444.7177 2.8996 0.1500 2.4625 1799.6347 +Ge Si(D) Ge 3.0 1.0 0.0 1.0643e5 15.652 -0.43884 0.75627 0.0 0.0 0.0 2.95 0.15 0.0 0.0 +Ge Ge Si(D) 3.0 1.0 0.0 1.0643e5 15.652 -0.43884 0.75627 0.0 0.0 0.0 2.8996 0.1500 0.0 0.0 + +# Optimized Tersoff for Carbon: Lindsay and Broido PRB 81, 205441 (2010) +# element 1, element 2, element 3, +# m, gamma, lambda3, c, d, costheta0, n, beta, lambda2, B, R, D, lambda1, A +C(O) C(O) C(O) 3.0 1.0 0.0 3.8049e4 4.3484 -0.930 0.72751 1.5724e-7 2.2119 430.0 1.95 0.15 3.4879 1393.6 + diff --git a/examples/USER/phonon/third_order_command/combine.sh b/examples/USER/phonon/third_order_command/combine.sh new file mode 100755 index 0000000000..3eca2537be --- /dev/null +++ b/examples/USER/phonon/third_order_command/combine.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +#This script takes one argument +#The argument is the base name for the split up tensor +#The script then combines and sorts the tensor +#$1 file name + +echo "$1" +[ -f $1 ] && rm $1 + +for i in $(ls ./$1*); do + cat $i >> temp + rm $i +done + +sort temp | sort -s -n -k 3 | sort -s -n -k 1 > $1 +rm temp diff --git a/examples/USER/phonon/third_order_command/ff-silicon.lmp b/examples/USER/phonon/third_order_command/ff-silicon.lmp new file mode 100755 index 0000000000..f3b895f168 --- /dev/null +++ b/examples/USER/phonon/third_order_command/ff-silicon.lmp @@ -0,0 +1,19 @@ +############################# +#Atoms types - mass - charge# +############################# +#@ 1 atom types #!THIS LINE IS NECESSARY DON'T SPEND HOURS FINDING THAT OUT!# + +variable Si equal 1 + +############# +#Atom Masses# +############# + +mass ${Si} 28.08550 + +########################### +#Pair Potentials - Tersoff# +########################### + +pair_style tersoff +pair_coeff * * Si.opt.tersoff Si(D) diff --git a/examples/USER/phonon/third_order_command/in.silicon b/examples/USER/phonon/third_order_command/in.silicon new file mode 100755 index 0000000000..b8a9e214c4 --- /dev/null +++ b/examples/USER/phonon/third_order_command/in.silicon @@ -0,0 +1,84 @@ +###############################mm +# Atom style - charge/vdw/bonded# +################################# +atom_style full + +############################################## +#Units Metal : eV - ps - angstrom - bar# +# Real : kcal/mol - fs - angstrom - atm# +############################################## +units metal + +############ +#Run number# +############ +variable run_no equal 0 # is it a restart? +variable res_no equal ${run_no}-1 # restart file number + +####################################### +#Random Seeds and Domain Decomposition# +####################################### +variable iseed0 equal 2357 +variable iseed1 equal 26488 +variable iseed2 equal 10669 +processors * * 1 + +########### +#Data File# +########### +variable inpfile string silicon_input_file.lmp +variable resfile string final_restart.${res_no} +variable ff_file string ff-silicon.lmp + +########## +#Run Type# +########## +variable minimise equal 0 #Energy Minimization + +############################### +#Molecular Dynamics Parameters# +############################### +neighbor 1 bin + +################################ +#Energy Minimization Parameters# +################################ +variable mtraj equal 1 # trajectory output frequency - all system +variable etol equal 1e-5 # % change in energy +variable ftol equal 1e-5 # max force threshold (force units) +variable maxiter equal 10000 # max # of iterations + +######################## +#3D Periodic Simulation# +######################## +boundary p p p + +############################# +#Reading the input structure# +############################# +if "${run_no} == 0" then "read_data ${inpfile}" else "read_restart ${resfile}" + +############# +#Force Field# +############# +include ${ff_file} + +##################### +#Energy Minimization# +##################### +if "${minimise} <= 0 || ${run_no} > 0" then "jump SELF end_minimise" + print "Doing CG minimisation" + dump mdcd all dcd ${mtraj} min.dcd + dump_modify mdcd unwrap yes + min_style cg + min_modify line quadratic + minimize ${etol} ${ftol} ${maxiter} ${maxiter} + reset_timestep 0 + undump mdcd +label end_minimise + +################## +#Dynamical Matrix# +################## +third_order all ballistico 0.00001 file third_order binary no + diff --git a/examples/USER/phonon/third_order_command/lmp_bank/silicon_216.lmp b/examples/USER/phonon/third_order_command/lmp_bank/silicon_216.lmp new file mode 100755 index 0000000000..893d75e69b --- /dev/null +++ b/examples/USER/phonon/third_order_command/lmp_bank/silicon_216.lmp @@ -0,0 +1,238 @@ +LAMMPS description + + 216 atoms + 0 bonds + 0 angles + 0 dihedrals + 0 impropers + + 1 atom types + 0 bond types + 0 angle types + 0 dihedral types + 0 improper types + + + 0.0000000 16.293000 xlo xhi + 0.0000000 16.293000 ylo yhi + 0.0000000 16.293000 zlo zhi + + Atoms + + 1 1 1 0.0000000 0.0000000 0.0000000 0.0000000 + 2 2 1 0.0000000 0.0000000 2.7160000 2.7160000 + 3 3 1 0.0000000 2.7160000 2.7160000 0.0000000 + 4 4 1 0.0000000 2.7160000 0.0000000 2.7160000 + 5 5 1 0.0000000 4.0730000 1.3580000 4.0730000 + 6 6 1 0.0000000 1.3580000 1.3580000 1.3580000 + 7 7 1 0.0000000 1.3580000 4.0730000 4.0730000 + 8 8 1 0.0000000 4.0730000 4.0730000 1.3580000 + 9 9 1 0.0000000 0.0000000 0.0000000 5.4310000 + 10 10 1 0.0000000 0.0000000 2.7160000 8.1460000 + 11 11 1 0.0000000 2.7160000 2.7160000 5.4310000 + 12 12 1 0.0000000 2.7160000 0.0000000 8.1460000 + 13 13 1 0.0000000 4.0730000 1.3580000 9.5040000 + 14 14 1 0.0000000 1.3580000 1.3580000 6.7890000 + 15 15 1 0.0000000 1.3580000 4.0730000 9.5040000 + 16 16 1 0.0000000 4.0730000 4.0730000 6.7890000 + 17 17 1 0.0000000 0.0000000 0.0000000 10.8620000 + 18 18 1 0.0000000 0.0000000 2.7160000 13.5780000 + 19 19 1 0.0000000 2.7160000 2.7160000 10.8620000 + 20 20 1 0.0000000 2.7160000 0.0000000 13.5780000 + 21 21 1 0.0000000 4.0730000 1.3580000 14.9350000 + 22 22 1 0.0000000 1.3580000 1.3580000 12.2200000 + 23 23 1 0.0000000 1.3580000 4.0730000 14.9350000 + 24 24 1 0.0000000 4.0730000 4.0730000 12.2200000 + 25 25 1 0.0000000 0.0000000 5.4310000 0.0000000 + 26 26 1 0.0000000 0.0000000 8.1460000 2.7160000 + 27 27 1 0.0000000 2.7160000 8.1460000 0.0000000 + 28 28 1 0.0000000 2.7160000 5.4310000 2.7160000 + 29 29 1 0.0000000 4.0730000 6.7890000 4.0730000 + 30 30 1 0.0000000 1.3580000 6.7890000 1.3580000 + 31 31 1 0.0000000 1.3580000 9.5040000 4.0730000 + 32 32 1 0.0000000 4.0730000 9.5040000 1.3580000 + 33 33 1 0.0000000 0.0000000 5.4310000 5.4310000 + 34 34 1 0.0000000 0.0000000 8.1460000 8.1460000 + 35 35 1 0.0000000 2.7160000 8.1460000 5.4310000 + 36 36 1 0.0000000 2.7160000 5.4310000 8.1460000 + 37 37 1 0.0000000 4.0730000 6.7890000 9.5040000 + 38 38 1 0.0000000 1.3580000 6.7890000 6.7890000 + 39 39 1 0.0000000 1.3580000 9.5040000 9.5040000 + 40 40 1 0.0000000 4.0730000 9.5040000 6.7890000 + 41 41 1 0.0000000 0.0000000 5.4310000 10.8620000 + 42 42 1 0.0000000 0.0000000 8.1460000 13.5780000 + 43 43 1 0.0000000 2.7160000 8.1460000 10.8620000 + 44 44 1 0.0000000 2.7160000 5.4310000 13.5780000 + 45 45 1 0.0000000 4.0730000 6.7890000 14.9350000 + 46 46 1 0.0000000 1.3580000 6.7890000 12.2200000 + 47 47 1 0.0000000 1.3580000 9.5040000 14.9350000 + 48 48 1 0.0000000 4.0730000 9.5040000 12.2200000 + 49 49 1 0.0000000 0.0000000 10.8620000 0.0000000 + 50 50 1 0.0000000 0.0000000 13.5780000 2.7160000 + 51 51 1 0.0000000 2.7160000 13.5780000 0.0000000 + 52 52 1 0.0000000 2.7160000 10.8620000 2.7160000 + 53 53 1 0.0000000 4.0730000 12.2200000 4.0730000 + 54 54 1 0.0000000 1.3580000 12.2200000 1.3580000 + 55 55 1 0.0000000 1.3580000 14.9350000 4.0730000 + 56 56 1 0.0000000 4.0730000 14.9350000 1.3580000 + 57 57 1 0.0000000 0.0000000 10.8620000 5.4310000 + 58 58 1 0.0000000 0.0000000 13.5780000 8.1460000 + 59 59 1 0.0000000 2.7160000 13.5780000 5.4310000 + 60 60 1 0.0000000 2.7160000 10.8620000 8.1460000 + 61 61 1 0.0000000 4.0730000 12.2200000 9.5040000 + 62 62 1 0.0000000 1.3580000 12.2200000 6.7890000 + 63 63 1 0.0000000 1.3580000 14.9350000 9.5040000 + 64 64 1 0.0000000 4.0730000 14.9350000 6.7890000 + 65 65 1 0.0000000 0.0000000 10.8620000 10.8620000 + 66 66 1 0.0000000 0.0000000 13.5780000 13.5780000 + 67 67 1 0.0000000 2.7160000 13.5780000 10.8620000 + 68 68 1 0.0000000 2.7160000 10.8620000 13.5780000 + 69 69 1 0.0000000 4.0730000 12.2200000 14.9350000 + 70 70 1 0.0000000 1.3580000 12.2200000 12.2200000 + 71 71 1 0.0000000 1.3580000 14.9350000 14.9350000 + 72 72 1 0.0000000 4.0730000 14.9350000 12.2200000 + 73 73 1 0.0000000 5.4310000 0.0000000 0.0000000 + 74 74 1 0.0000000 5.4310000 2.7160000 2.7160000 + 75 75 1 0.0000000 8.1460000 2.7160000 0.0000000 + 76 76 1 0.0000000 8.1460000 0.0000000 2.7160000 + 77 77 1 0.0000000 9.5040000 1.3580000 4.0730000 + 78 78 1 0.0000000 6.7890000 1.3580000 1.3580000 + 79 79 1 0.0000000 6.7890000 4.0730000 4.0730000 + 80 80 1 0.0000000 9.5040000 4.0730000 1.3580000 + 81 81 1 0.0000000 5.4310000 0.0000000 5.4310000 + 82 82 1 0.0000000 5.4310000 2.7160000 8.1460000 + 83 83 1 0.0000000 8.1460000 2.7160000 5.4310000 + 84 84 1 0.0000000 8.1460000 0.0000000 8.1460000 + 85 85 1 0.0000000 9.5040000 1.3580000 9.5040000 + 86 86 1 0.0000000 6.7890000 1.3580000 6.7890000 + 87 87 1 0.0000000 6.7890000 4.0730000 9.5040000 + 88 88 1 0.0000000 9.5040000 4.0730000 6.7890000 + 89 89 1 0.0000000 5.4310000 0.0000000 10.8620000 + 90 90 1 0.0000000 5.4310000 2.7160000 13.5780000 + 91 91 1 0.0000000 8.1460000 2.7160000 10.8620000 + 92 92 1 0.0000000 8.1460000 0.0000000 13.5780000 + 93 93 1 0.0000000 9.5040000 1.3580000 14.9350000 + 94 94 1 0.0000000 6.7890000 1.3580000 12.2200000 + 95 95 1 0.0000000 6.7890000 4.0730000 14.9350000 + 96 96 1 0.0000000 9.5040000 4.0730000 12.2200000 + 97 97 1 0.0000000 5.4310000 5.4310000 0.0000000 + 98 98 1 0.0000000 5.4310000 8.1460000 2.7160000 + 99 99 1 0.0000000 8.1460000 8.1460000 0.0000000 + 100 100 1 0.0000000 8.1460000 5.4310000 2.7160000 + 101 101 1 0.0000000 9.5040000 6.7890000 4.0730000 + 102 102 1 0.0000000 6.7890000 6.7890000 1.3580000 + 103 103 1 0.0000000 6.7890000 9.5040000 4.0730000 + 104 104 1 0.0000000 9.5040000 9.5040000 1.3580000 + 105 105 1 0.0000000 5.4310000 5.4310000 5.4310000 + 106 106 1 0.0000000 5.4310000 8.1460000 8.1460000 + 107 107 1 0.0000000 8.1460000 8.1460000 5.4310000 + 108 108 1 0.0000000 8.1460000 5.4310000 8.1460000 + 109 109 1 0.0000000 9.5040000 6.7890000 9.5040000 + 110 110 1 0.0000000 6.7890000 6.7890000 6.7890000 + 111 111 1 0.0000000 6.7890000 9.5040000 9.5040000 + 112 112 1 0.0000000 9.5040000 9.5040000 6.7890000 + 113 113 1 0.0000000 5.4310000 5.4310000 10.8620000 + 114 114 1 0.0000000 5.4310000 8.1460000 13.5780000 + 115 115 1 0.0000000 8.1460000 8.1460000 10.8620000 + 116 116 1 0.0000000 8.1460000 5.4310000 13.5780000 + 117 117 1 0.0000000 9.5040000 6.7890000 14.9350000 + 118 118 1 0.0000000 6.7890000 6.7890000 12.2200000 + 119 119 1 0.0000000 6.7890000 9.5040000 14.9350000 + 120 120 1 0.0000000 9.5040000 9.5040000 12.2200000 + 121 121 1 0.0000000 5.4310000 10.8620000 0.0000000 + 122 122 1 0.0000000 5.4310000 13.5780000 2.7160000 + 123 123 1 0.0000000 8.1460000 13.5780000 0.0000000 + 124 124 1 0.0000000 8.1460000 10.8620000 2.7160000 + 125 125 1 0.0000000 9.5040000 12.2200000 4.0730000 + 126 126 1 0.0000000 6.7890000 12.2200000 1.3580000 + 127 127 1 0.0000000 6.7890000 14.9350000 4.0730000 + 128 128 1 0.0000000 9.5040000 14.9350000 1.3580000 + 129 129 1 0.0000000 5.4310000 10.8620000 5.4310000 + 130 130 1 0.0000000 5.4310000 13.5780000 8.1460000 + 131 131 1 0.0000000 8.1460000 13.5780000 5.4310000 + 132 132 1 0.0000000 8.1460000 10.8620000 8.1460000 + 133 133 1 0.0000000 9.5040000 12.2200000 9.5040000 + 134 134 1 0.0000000 6.7890000 12.2200000 6.7890000 + 135 135 1 0.0000000 6.7890000 14.9350000 9.5040000 + 136 136 1 0.0000000 9.5040000 14.9350000 6.7890000 + 137 137 1 0.0000000 5.4310000 10.8620000 10.8620000 + 138 138 1 0.0000000 5.4310000 13.5780000 13.5780000 + 139 139 1 0.0000000 8.1460000 13.5780000 10.8620000 + 140 140 1 0.0000000 8.1460000 10.8620000 13.5780000 + 141 141 1 0.0000000 9.5040000 12.2200000 14.9350000 + 142 142 1 0.0000000 6.7890000 12.2200000 12.2200000 + 143 143 1 0.0000000 6.7890000 14.9350000 14.9350000 + 144 144 1 0.0000000 9.5040000 14.9350000 12.2200000 + 145 145 1 0.0000000 10.8620000 0.0000000 0.0000000 + 146 146 1 0.0000000 10.8620000 2.7160000 2.7160000 + 147 147 1 0.0000000 13.5780000 2.7160000 0.0000000 + 148 148 1 0.0000000 13.5780000 0.0000000 2.7160000 + 149 149 1 0.0000000 14.9350000 1.3580000 4.0730000 + 150 150 1 0.0000000 12.2200000 1.3580000 1.3580000 + 151 151 1 0.0000000 12.2200000 4.0730000 4.0730000 + 152 152 1 0.0000000 14.9350000 4.0730000 1.3580000 + 153 153 1 0.0000000 10.8620000 0.0000000 5.4310000 + 154 154 1 0.0000000 10.8620000 2.7160000 8.1460000 + 155 155 1 0.0000000 13.5780000 2.7160000 5.4310000 + 156 156 1 0.0000000 13.5780000 0.0000000 8.1460000 + 157 157 1 0.0000000 14.9350000 1.3580000 9.5040000 + 158 158 1 0.0000000 12.2200000 1.3580000 6.7890000 + 159 159 1 0.0000000 12.2200000 4.0730000 9.5040000 + 160 160 1 0.0000000 14.9350000 4.0730000 6.7890000 + 161 161 1 0.0000000 10.8620000 0.0000000 10.8620000 + 162 162 1 0.0000000 10.8620000 2.7160000 13.5780000 + 163 163 1 0.0000000 13.5780000 2.7160000 10.8620000 + 164 164 1 0.0000000 13.5780000 0.0000000 13.5780000 + 165 165 1 0.0000000 14.9350000 1.3580000 14.9350000 + 166 166 1 0.0000000 12.2200000 1.3580000 12.2200000 + 167 167 1 0.0000000 12.2200000 4.0730000 14.9350000 + 168 168 1 0.0000000 14.9350000 4.0730000 12.2200000 + 169 169 1 0.0000000 10.8620000 5.4310000 0.0000000 + 170 170 1 0.0000000 10.8620000 8.1460000 2.7160000 + 171 171 1 0.0000000 13.5780000 8.1460000 0.0000000 + 172 172 1 0.0000000 13.5780000 5.4310000 2.7160000 + 173 173 1 0.0000000 14.9350000 6.7890000 4.0730000 + 174 174 1 0.0000000 12.2200000 6.7890000 1.3580000 + 175 175 1 0.0000000 12.2200000 9.5040000 4.0730000 + 176 176 1 0.0000000 14.9350000 9.5040000 1.3580000 + 177 177 1 0.0000000 10.8620000 5.4310000 5.4310000 + 178 178 1 0.0000000 10.8620000 8.1460000 8.1460000 + 179 179 1 0.0000000 13.5780000 8.1460000 5.4310000 + 180 180 1 0.0000000 13.5780000 5.4310000 8.1460000 + 181 181 1 0.0000000 14.9350000 6.7890000 9.5040000 + 182 182 1 0.0000000 12.2200000 6.7890000 6.7890000 + 183 183 1 0.0000000 12.2200000 9.5040000 9.5040000 + 184 184 1 0.0000000 14.9350000 9.5040000 6.7890000 + 185 185 1 0.0000000 10.8620000 5.4310000 10.8620000 + 186 186 1 0.0000000 10.8620000 8.1460000 13.5780000 + 187 187 1 0.0000000 13.5780000 8.1460000 10.8620000 + 188 188 1 0.0000000 13.5780000 5.4310000 13.5780000 + 189 189 1 0.0000000 14.9350000 6.7890000 14.9350000 + 190 190 1 0.0000000 12.2200000 6.7890000 12.2200000 + 191 191 1 0.0000000 12.2200000 9.5040000 14.9350000 + 192 192 1 0.0000000 14.9350000 9.5040000 12.2200000 + 193 193 1 0.0000000 10.8620000 10.8620000 0.0000000 + 194 194 1 0.0000000 10.8620000 13.5780000 2.7160000 + 195 195 1 0.0000000 13.5780000 13.5780000 0.0000000 + 196 196 1 0.0000000 13.5780000 10.8620000 2.7160000 + 197 197 1 0.0000000 14.9350000 12.2200000 4.0730000 + 198 198 1 0.0000000 12.2200000 12.2200000 1.3580000 + 199 199 1 0.0000000 12.2200000 14.9350000 4.0730000 + 200 200 1 0.0000000 14.9350000 14.9350000 1.3580000 + 201 201 1 0.0000000 10.8620000 10.8620000 5.4310000 + 202 202 1 0.0000000 10.8620000 13.5780000 8.1460000 + 203 203 1 0.0000000 13.5780000 13.5780000 5.4310000 + 204 204 1 0.0000000 13.5780000 10.8620000 8.1460000 + 205 205 1 0.0000000 14.9350000 12.2200000 9.5040000 + 206 206 1 0.0000000 12.2200000 12.2200000 6.7890000 + 207 207 1 0.0000000 12.2200000 14.9350000 9.5040000 + 208 208 1 0.0000000 14.9350000 14.9350000 6.7890000 + 209 209 1 0.0000000 10.8620000 10.8620000 10.8620000 + 210 210 1 0.0000000 10.8620000 13.5780000 13.5780000 + 211 211 1 0.0000000 13.5780000 13.5780000 10.8620000 + 212 212 1 0.0000000 13.5780000 10.8620000 13.5780000 + 213 213 1 0.0000000 14.9350000 12.2200000 14.9350000 + 214 214 1 0.0000000 12.2200000 12.2200000 12.2200000 + 215 215 1 0.0000000 12.2200000 14.9350000 14.9350000 + 216 216 1 0.0000000 14.9350000 14.9350000 12.2200000 + diff --git a/examples/USER/phonon/third_order_command/lmp_bank/silicon_512.lmp b/examples/USER/phonon/third_order_command/lmp_bank/silicon_512.lmp new file mode 100755 index 0000000000..8c1ecd30bd --- /dev/null +++ b/examples/USER/phonon/third_order_command/lmp_bank/silicon_512.lmp @@ -0,0 +1,534 @@ +LAMMPS description + + 512 atoms + 0 bonds + 0 angles + 0 dihedrals + 0 impropers + + 1 atom types + 0 bond types + 0 angle types + 0 dihedral types + 0 improper types + + + 0.0000000 21.724000 xlo xhi + 0.0000000 21.724000 ylo yhi + 0.0000000 21.724000 zlo zhi + + Atoms + + 1 1 1 0.0000000 0.0000000 0.0000000 0.0000000 + 2 2 1 0.0000000 0.0000000 2.7150000 2.7150000 + 3 3 1 0.0000000 2.7150000 2.7150000 0.0000000 + 4 4 1 0.0000000 2.7150000 0.0000000 2.7150000 + 5 5 1 0.0000000 4.0730000 1.3580000 4.0730000 + 6 6 1 0.0000000 1.3580000 1.3580000 1.3580000 + 7 7 1 0.0000000 1.3580000 4.0730000 4.0730000 + 8 8 1 0.0000000 4.0730000 4.0730000 1.3580000 + 9 9 1 0.0000000 0.0000000 0.0000000 5.4310000 + 10 10 1 0.0000000 0.0000000 2.7150000 8.1460000 + 11 11 1 0.0000000 2.7150000 2.7150000 5.4310000 + 12 12 1 0.0000000 2.7150000 0.0000000 8.1460000 + 13 13 1 0.0000000 4.0730000 1.3580000 9.5040000 + 14 14 1 0.0000000 1.3580000 1.3580000 6.7890000 + 15 15 1 0.0000000 1.3580000 4.0730000 9.5040000 + 16 16 1 0.0000000 4.0730000 4.0730000 6.7890000 + 17 17 1 0.0000000 0.0000000 0.0000000 10.8620000 + 18 18 1 0.0000000 0.0000000 2.7150000 13.5770000 + 19 19 1 0.0000000 2.7150000 2.7150000 10.8620000 + 20 20 1 0.0000000 2.7150000 0.0000000 13.5770000 + 21 21 1 0.0000000 4.0730000 1.3580000 14.9350000 + 22 22 1 0.0000000 1.3580000 1.3580000 12.2200000 + 23 23 1 0.0000000 1.3580000 4.0730000 14.9350000 + 24 24 1 0.0000000 4.0730000 4.0730000 12.2200000 + 25 25 1 0.0000000 0.0000000 0.0000000 16.2930000 + 26 26 1 0.0000000 0.0000000 2.7150000 19.0080000 + 27 27 1 0.0000000 2.7150000 2.7150000 16.2930000 + 28 28 1 0.0000000 2.7150000 0.0000000 19.0080000 + 29 29 1 0.0000000 4.0730000 1.3580000 20.3660000 + 30 30 1 0.0000000 1.3580000 1.3580000 17.6510000 + 31 31 1 0.0000000 1.3580000 4.0730000 20.3660000 + 32 32 1 0.0000000 4.0730000 4.0730000 17.6510000 + 33 33 1 0.0000000 0.0000000 5.4310000 0.0000000 + 34 34 1 0.0000000 0.0000000 8.1460000 2.7150000 + 35 35 1 0.0000000 2.7150000 8.1460000 0.0000000 + 36 36 1 0.0000000 2.7150000 5.4310000 2.7150000 + 37 37 1 0.0000000 4.0730000 6.7890000 4.0730000 + 38 38 1 0.0000000 1.3580000 6.7890000 1.3580000 + 39 39 1 0.0000000 1.3580000 9.5040000 4.0730000 + 40 40 1 0.0000000 4.0730000 9.5040000 1.3580000 + 41 41 1 0.0000000 0.0000000 5.4310000 5.4310000 + 42 42 1 0.0000000 0.0000000 8.1460000 8.1460000 + 43 43 1 0.0000000 2.7150000 8.1460000 5.4310000 + 44 44 1 0.0000000 2.7150000 5.4310000 8.1460000 + 45 45 1 0.0000000 4.0730000 6.7890000 9.5040000 + 46 46 1 0.0000000 1.3580000 6.7890000 6.7890000 + 47 47 1 0.0000000 1.3580000 9.5040000 9.5040000 + 48 48 1 0.0000000 4.0730000 9.5040000 6.7890000 + 49 49 1 0.0000000 0.0000000 5.4310000 10.8620000 + 50 50 1 0.0000000 0.0000000 8.1460000 13.5770000 + 51 51 1 0.0000000 2.7150000 8.1460000 10.8620000 + 52 52 1 0.0000000 2.7150000 5.4310000 13.5770000 + 53 53 1 0.0000000 4.0730000 6.7890000 14.9350000 + 54 54 1 0.0000000 1.3580000 6.7890000 12.2200000 + 55 55 1 0.0000000 1.3580000 9.5040000 14.9350000 + 56 56 1 0.0000000 4.0730000 9.5040000 12.2200000 + 57 57 1 0.0000000 0.0000000 5.4310000 16.2930000 + 58 58 1 0.0000000 0.0000000 8.1460000 19.0080000 + 59 59 1 0.0000000 2.7150000 8.1460000 16.2930000 + 60 60 1 0.0000000 2.7150000 5.4310000 19.0080000 + 61 61 1 0.0000000 4.0730000 6.7890000 20.3660000 + 62 62 1 0.0000000 1.3580000 6.7890000 17.6510000 + 63 63 1 0.0000000 1.3580000 9.5040000 20.3660000 + 64 64 1 0.0000000 4.0730000 9.5040000 17.6510000 + 65 65 1 0.0000000 0.0000000 10.8620000 0.0000000 + 66 66 1 0.0000000 0.0000000 13.5770000 2.7150000 + 67 67 1 0.0000000 2.7150000 13.5770000 0.0000000 + 68 68 1 0.0000000 2.7150000 10.8620000 2.7150000 + 69 69 1 0.0000000 4.0730000 12.2200000 4.0730000 + 70 70 1 0.0000000 1.3580000 12.2200000 1.3580000 + 71 71 1 0.0000000 1.3580000 14.9350000 4.0730000 + 72 72 1 0.0000000 4.0730000 14.9350000 1.3580000 + 73 73 1 0.0000000 0.0000000 10.8620000 5.4310000 + 74 74 1 0.0000000 0.0000000 13.5770000 8.1460000 + 75 75 1 0.0000000 2.7150000 13.5770000 5.4310000 + 76 76 1 0.0000000 2.7150000 10.8620000 8.1460000 + 77 77 1 0.0000000 4.0730000 12.2200000 9.5040000 + 78 78 1 0.0000000 1.3580000 12.2200000 6.7890000 + 79 79 1 0.0000000 1.3580000 14.9350000 9.5040000 + 80 80 1 0.0000000 4.0730000 14.9350000 6.7890000 + 81 81 1 0.0000000 0.0000000 10.8620000 10.8620000 + 82 82 1 0.0000000 0.0000000 13.5770000 13.5770000 + 83 83 1 0.0000000 2.7150000 13.5770000 10.8620000 + 84 84 1 0.0000000 2.7150000 10.8620000 13.5770000 + 85 85 1 0.0000000 4.0730000 12.2200000 14.9350000 + 86 86 1 0.0000000 1.3580000 12.2200000 12.2200000 + 87 87 1 0.0000000 1.3580000 14.9350000 14.9350000 + 88 88 1 0.0000000 4.0730000 14.9350000 12.2200000 + 89 89 1 0.0000000 0.0000000 10.8620000 16.2930000 + 90 90 1 0.0000000 0.0000000 13.5770000 19.0080000 + 91 91 1 0.0000000 2.7150000 13.5770000 16.2930000 + 92 92 1 0.0000000 2.7150000 10.8620000 19.0080000 + 93 93 1 0.0000000 4.0730000 12.2200000 20.3660000 + 94 94 1 0.0000000 1.3580000 12.2200000 17.6510000 + 95 95 1 0.0000000 1.3580000 14.9350000 20.3660000 + 96 96 1 0.0000000 4.0730000 14.9350000 17.6510000 + 97 97 1 0.0000000 0.0000000 16.2930000 0.0000000 + 98 98 1 0.0000000 0.0000000 19.0080000 2.7150000 + 99 99 1 0.0000000 2.7150000 19.0080000 0.0000000 + 100 100 1 0.0000000 2.7150000 16.2930000 2.7150000 + 101 101 1 0.0000000 4.0730000 17.6510000 4.0730000 + 102 102 1 0.0000000 1.3580000 17.6510000 1.3580000 + 103 103 1 0.0000000 1.3580000 20.3660000 4.0730000 + 104 104 1 0.0000000 4.0730000 20.3660000 1.3580000 + 105 105 1 0.0000000 0.0000000 16.2930000 5.4310000 + 106 106 1 0.0000000 0.0000000 19.0080000 8.1460000 + 107 107 1 0.0000000 2.7150000 19.0080000 5.4310000 + 108 108 1 0.0000000 2.7150000 16.2930000 8.1460000 + 109 109 1 0.0000000 4.0730000 17.6510000 9.5040000 + 110 110 1 0.0000000 1.3580000 17.6510000 6.7890000 + 111 111 1 0.0000000 1.3580000 20.3660000 9.5040000 + 112 112 1 0.0000000 4.0730000 20.3660000 6.7890000 + 113 113 1 0.0000000 0.0000000 16.2930000 10.8620000 + 114 114 1 0.0000000 0.0000000 19.0080000 13.5770000 + 115 115 1 0.0000000 2.7150000 19.0080000 10.8620000 + 116 116 1 0.0000000 2.7150000 16.2930000 13.5770000 + 117 117 1 0.0000000 4.0730000 17.6510000 14.9350000 + 118 118 1 0.0000000 1.3580000 17.6510000 12.2200000 + 119 119 1 0.0000000 1.3580000 20.3660000 14.9350000 + 120 120 1 0.0000000 4.0730000 20.3660000 12.2200000 + 121 121 1 0.0000000 0.0000000 16.2930000 16.2930000 + 122 122 1 0.0000000 0.0000000 19.0080000 19.0080000 + 123 123 1 0.0000000 2.7150000 19.0080000 16.2930000 + 124 124 1 0.0000000 2.7150000 16.2930000 19.0080000 + 125 125 1 0.0000000 4.0730000 17.6510000 20.3660000 + 126 126 1 0.0000000 1.3580000 17.6510000 17.6510000 + 127 127 1 0.0000000 1.3580000 20.3660000 20.3660000 + 128 128 1 0.0000000 4.0730000 20.3660000 17.6510000 + 129 129 1 0.0000000 5.4310000 0.0000000 0.0000000 + 130 130 1 0.0000000 5.4310000 2.7150000 2.7150000 + 131 131 1 0.0000000 8.1460000 2.7150000 0.0000000 + 132 132 1 0.0000000 8.1460000 0.0000000 2.7150000 + 133 133 1 0.0000000 9.5040000 1.3580000 4.0730000 + 134 134 1 0.0000000 6.7890000 1.3580000 1.3580000 + 135 135 1 0.0000000 6.7890000 4.0730000 4.0730000 + 136 136 1 0.0000000 9.5040000 4.0730000 1.3580000 + 137 137 1 0.0000000 5.4310000 0.0000000 5.4310000 + 138 138 1 0.0000000 5.4310000 2.7150000 8.1460000 + 139 139 1 0.0000000 8.1460000 2.7150000 5.4310000 + 140 140 1 0.0000000 8.1460000 0.0000000 8.1460000 + 141 141 1 0.0000000 9.5040000 1.3580000 9.5040000 + 142 142 1 0.0000000 6.7890000 1.3580000 6.7890000 + 143 143 1 0.0000000 6.7890000 4.0730000 9.5040000 + 144 144 1 0.0000000 9.5040000 4.0730000 6.7890000 + 145 145 1 0.0000000 5.4310000 0.0000000 10.8620000 + 146 146 1 0.0000000 5.4310000 2.7150000 13.5770000 + 147 147 1 0.0000000 8.1460000 2.7150000 10.8620000 + 148 148 1 0.0000000 8.1460000 0.0000000 13.5770000 + 149 149 1 0.0000000 9.5040000 1.3580000 14.9350000 + 150 150 1 0.0000000 6.7890000 1.3580000 12.2200000 + 151 151 1 0.0000000 6.7890000 4.0730000 14.9350000 + 152 152 1 0.0000000 9.5040000 4.0730000 12.2200000 + 153 153 1 0.0000000 5.4310000 0.0000000 16.2930000 + 154 154 1 0.0000000 5.4310000 2.7150000 19.0080000 + 155 155 1 0.0000000 8.1460000 2.7150000 16.2930000 + 156 156 1 0.0000000 8.1460000 0.0000000 19.0080000 + 157 157 1 0.0000000 9.5040000 1.3580000 20.3660000 + 158 158 1 0.0000000 6.7890000 1.3580000 17.6510000 + 159 159 1 0.0000000 6.7890000 4.0730000 20.3660000 + 160 160 1 0.0000000 9.5040000 4.0730000 17.6510000 + 161 161 1 0.0000000 5.4310000 5.4310000 0.0000000 + 162 162 1 0.0000000 5.4310000 8.1460000 2.7150000 + 163 163 1 0.0000000 8.1460000 8.1460000 0.0000000 + 164 164 1 0.0000000 8.1460000 5.4310000 2.7150000 + 165 165 1 0.0000000 9.5040000 6.7890000 4.0730000 + 166 166 1 0.0000000 6.7890000 6.7890000 1.3580000 + 167 167 1 0.0000000 6.7890000 9.5040000 4.0730000 + 168 168 1 0.0000000 9.5040000 9.5040000 1.3580000 + 169 169 1 0.0000000 5.4310000 5.4310000 5.4310000 + 170 170 1 0.0000000 5.4310000 8.1460000 8.1460000 + 171 171 1 0.0000000 8.1460000 8.1460000 5.4310000 + 172 172 1 0.0000000 8.1460000 5.4310000 8.1460000 + 173 173 1 0.0000000 9.5040000 6.7890000 9.5040000 + 174 174 1 0.0000000 6.7890000 6.7890000 6.7890000 + 175 175 1 0.0000000 6.7890000 9.5040000 9.5040000 + 176 176 1 0.0000000 9.5040000 9.5040000 6.7890000 + 177 177 1 0.0000000 5.4310000 5.4310000 10.8620000 + 178 178 1 0.0000000 5.4310000 8.1460000 13.5770000 + 179 179 1 0.0000000 8.1460000 8.1460000 10.8620000 + 180 180 1 0.0000000 8.1460000 5.4310000 13.5770000 + 181 181 1 0.0000000 9.5040000 6.7890000 14.9350000 + 182 182 1 0.0000000 6.7890000 6.7890000 12.2200000 + 183 183 1 0.0000000 6.7890000 9.5040000 14.9350000 + 184 184 1 0.0000000 9.5040000 9.5040000 12.2200000 + 185 185 1 0.0000000 5.4310000 5.4310000 16.2930000 + 186 186 1 0.0000000 5.4310000 8.1460000 19.0080000 + 187 187 1 0.0000000 8.1460000 8.1460000 16.2930000 + 188 188 1 0.0000000 8.1460000 5.4310000 19.0080000 + 189 189 1 0.0000000 9.5040000 6.7890000 20.3660000 + 190 190 1 0.0000000 6.7890000 6.7890000 17.6510000 + 191 191 1 0.0000000 6.7890000 9.5040000 20.3660000 + 192 192 1 0.0000000 9.5040000 9.5040000 17.6510000 + 193 193 1 0.0000000 5.4310000 10.8620000 0.0000000 + 194 194 1 0.0000000 5.4310000 13.5770000 2.7150000 + 195 195 1 0.0000000 8.1460000 13.5770000 0.0000000 + 196 196 1 0.0000000 8.1460000 10.8620000 2.7150000 + 197 197 1 0.0000000 9.5040000 12.2200000 4.0730000 + 198 198 1 0.0000000 6.7890000 12.2200000 1.3580000 + 199 199 1 0.0000000 6.7890000 14.9350000 4.0730000 + 200 200 1 0.0000000 9.5040000 14.9350000 1.3580000 + 201 201 1 0.0000000 5.4310000 10.8620000 5.4310000 + 202 202 1 0.0000000 5.4310000 13.5770000 8.1460000 + 203 203 1 0.0000000 8.1460000 13.5770000 5.4310000 + 204 204 1 0.0000000 8.1460000 10.8620000 8.1460000 + 205 205 1 0.0000000 9.5040000 12.2200000 9.5040000 + 206 206 1 0.0000000 6.7890000 12.2200000 6.7890000 + 207 207 1 0.0000000 6.7890000 14.9350000 9.5040000 + 208 208 1 0.0000000 9.5040000 14.9350000 6.7890000 + 209 209 1 0.0000000 5.4310000 10.8620000 10.8620000 + 210 210 1 0.0000000 5.4310000 13.5770000 13.5770000 + 211 211 1 0.0000000 8.1460000 13.5770000 10.8620000 + 212 212 1 0.0000000 8.1460000 10.8620000 13.5770000 + 213 213 1 0.0000000 9.5040000 12.2200000 14.9350000 + 214 214 1 0.0000000 6.7890000 12.2200000 12.2200000 + 215 215 1 0.0000000 6.7890000 14.9350000 14.9350000 + 216 216 1 0.0000000 9.5040000 14.9350000 12.2200000 + 217 217 1 0.0000000 5.4310000 10.8620000 16.2930000 + 218 218 1 0.0000000 5.4310000 13.5770000 19.0080000 + 219 219 1 0.0000000 8.1460000 13.5770000 16.2930000 + 220 220 1 0.0000000 8.1460000 10.8620000 19.0080000 + 221 221 1 0.0000000 9.5040000 12.2200000 20.3660000 + 222 222 1 0.0000000 6.7890000 12.2200000 17.6510000 + 223 223 1 0.0000000 6.7890000 14.9350000 20.3660000 + 224 224 1 0.0000000 9.5040000 14.9350000 17.6510000 + 225 225 1 0.0000000 5.4310000 16.2930000 0.0000000 + 226 226 1 0.0000000 5.4310000 19.0080000 2.7150000 + 227 227 1 0.0000000 8.1460000 19.0080000 0.0000000 + 228 228 1 0.0000000 8.1460000 16.2930000 2.7150000 + 229 229 1 0.0000000 9.5040000 17.6510000 4.0730000 + 230 230 1 0.0000000 6.7890000 17.6510000 1.3580000 + 231 231 1 0.0000000 6.7890000 20.3660000 4.0730000 + 232 232 1 0.0000000 9.5040000 20.3660000 1.3580000 + 233 233 1 0.0000000 5.4310000 16.2930000 5.4310000 + 234 234 1 0.0000000 5.4310000 19.0080000 8.1460000 + 235 235 1 0.0000000 8.1460000 19.0080000 5.4310000 + 236 236 1 0.0000000 8.1460000 16.2930000 8.1460000 + 237 237 1 0.0000000 9.5040000 17.6510000 9.5040000 + 238 238 1 0.0000000 6.7890000 17.6510000 6.7890000 + 239 239 1 0.0000000 6.7890000 20.3660000 9.5040000 + 240 240 1 0.0000000 9.5040000 20.3660000 6.7890000 + 241 241 1 0.0000000 5.4310000 16.2930000 10.8620000 + 242 242 1 0.0000000 5.4310000 19.0080000 13.5770000 + 243 243 1 0.0000000 8.1460000 19.0080000 10.8620000 + 244 244 1 0.0000000 8.1460000 16.2930000 13.5770000 + 245 245 1 0.0000000 9.5040000 17.6510000 14.9350000 + 246 246 1 0.0000000 6.7890000 17.6510000 12.2200000 + 247 247 1 0.0000000 6.7890000 20.3660000 14.9350000 + 248 248 1 0.0000000 9.5040000 20.3660000 12.2200000 + 249 249 1 0.0000000 5.4310000 16.2930000 16.2930000 + 250 250 1 0.0000000 5.4310000 19.0080000 19.0080000 + 251 251 1 0.0000000 8.1460000 19.0080000 16.2930000 + 252 252 1 0.0000000 8.1460000 16.2930000 19.0080000 + 253 253 1 0.0000000 9.5040000 17.6510000 20.3660000 + 254 254 1 0.0000000 6.7890000 17.6510000 17.6510000 + 255 255 1 0.0000000 6.7890000 20.3660000 20.3660000 + 256 256 1 0.0000000 9.5040000 20.3660000 17.6510000 + 257 257 1 0.0000000 10.8620000 0.0000000 0.0000000 + 258 258 1 0.0000000 10.8620000 2.7150000 2.7150000 + 259 259 1 0.0000000 13.5770000 2.7150000 0.0000000 + 260 260 1 0.0000000 13.5770000 0.0000000 2.7150000 + 261 261 1 0.0000000 14.9350000 1.3580000 4.0730000 + 262 262 1 0.0000000 12.2200000 1.3580000 1.3580000 + 263 263 1 0.0000000 12.2200000 4.0730000 4.0730000 + 264 264 1 0.0000000 14.9350000 4.0730000 1.3580000 + 265 265 1 0.0000000 10.8620000 0.0000000 5.4310000 + 266 266 1 0.0000000 10.8620000 2.7150000 8.1460000 + 267 267 1 0.0000000 13.5770000 2.7150000 5.4310000 + 268 268 1 0.0000000 13.5770000 0.0000000 8.1460000 + 269 269 1 0.0000000 14.9350000 1.3580000 9.5040000 + 270 270 1 0.0000000 12.2200000 1.3580000 6.7890000 + 271 271 1 0.0000000 12.2200000 4.0730000 9.5040000 + 272 272 1 0.0000000 14.9350000 4.0730000 6.7890000 + 273 273 1 0.0000000 10.8620000 0.0000000 10.8620000 + 274 274 1 0.0000000 10.8620000 2.7150000 13.5770000 + 275 275 1 0.0000000 13.5770000 2.7150000 10.8620000 + 276 276 1 0.0000000 13.5770000 0.0000000 13.5770000 + 277 277 1 0.0000000 14.9350000 1.3580000 14.9350000 + 278 278 1 0.0000000 12.2200000 1.3580000 12.2200000 + 279 279 1 0.0000000 12.2200000 4.0730000 14.9350000 + 280 280 1 0.0000000 14.9350000 4.0730000 12.2200000 + 281 281 1 0.0000000 10.8620000 0.0000000 16.2930000 + 282 282 1 0.0000000 10.8620000 2.7150000 19.0080000 + 283 283 1 0.0000000 13.5770000 2.7150000 16.2930000 + 284 284 1 0.0000000 13.5770000 0.0000000 19.0080000 + 285 285 1 0.0000000 14.9350000 1.3580000 20.3660000 + 286 286 1 0.0000000 12.2200000 1.3580000 17.6510000 + 287 287 1 0.0000000 12.2200000 4.0730000 20.3660000 + 288 288 1 0.0000000 14.9350000 4.0730000 17.6510000 + 289 289 1 0.0000000 10.8620000 5.4310000 0.0000000 + 290 290 1 0.0000000 10.8620000 8.1460000 2.7150000 + 291 291 1 0.0000000 13.5770000 8.1460000 0.0000000 + 292 292 1 0.0000000 13.5770000 5.4310000 2.7150000 + 293 293 1 0.0000000 14.9350000 6.7890000 4.0730000 + 294 294 1 0.0000000 12.2200000 6.7890000 1.3580000 + 295 295 1 0.0000000 12.2200000 9.5040000 4.0730000 + 296 296 1 0.0000000 14.9350000 9.5040000 1.3580000 + 297 297 1 0.0000000 10.8620000 5.4310000 5.4310000 + 298 298 1 0.0000000 10.8620000 8.1460000 8.1460000 + 299 299 1 0.0000000 13.5770000 8.1460000 5.4310000 + 300 300 1 0.0000000 13.5770000 5.4310000 8.1460000 + 301 301 1 0.0000000 14.9350000 6.7890000 9.5040000 + 302 302 1 0.0000000 12.2200000 6.7890000 6.7890000 + 303 303 1 0.0000000 12.2200000 9.5040000 9.5040000 + 304 304 1 0.0000000 14.9350000 9.5040000 6.7890000 + 305 305 1 0.0000000 10.8620000 5.4310000 10.8620000 + 306 306 1 0.0000000 10.8620000 8.1460000 13.5770000 + 307 307 1 0.0000000 13.5770000 8.1460000 10.8620000 + 308 308 1 0.0000000 13.5770000 5.4310000 13.5770000 + 309 309 1 0.0000000 14.9350000 6.7890000 14.9350000 + 310 310 1 0.0000000 12.2200000 6.7890000 12.2200000 + 311 311 1 0.0000000 12.2200000 9.5040000 14.9350000 + 312 312 1 0.0000000 14.9350000 9.5040000 12.2200000 + 313 313 1 0.0000000 10.8620000 5.4310000 16.2930000 + 314 314 1 0.0000000 10.8620000 8.1460000 19.0080000 + 315 315 1 0.0000000 13.5770000 8.1460000 16.2930000 + 316 316 1 0.0000000 13.5770000 5.4310000 19.0080000 + 317 317 1 0.0000000 14.9350000 6.7890000 20.3660000 + 318 318 1 0.0000000 12.2200000 6.7890000 17.6510000 + 319 319 1 0.0000000 12.2200000 9.5040000 20.3660000 + 320 320 1 0.0000000 14.9350000 9.5040000 17.6510000 + 321 321 1 0.0000000 10.8620000 10.8620000 0.0000000 + 322 322 1 0.0000000 10.8620000 13.5770000 2.7150000 + 323 323 1 0.0000000 13.5770000 13.5770000 0.0000000 + 324 324 1 0.0000000 13.5770000 10.8620000 2.7150000 + 325 325 1 0.0000000 14.9350000 12.2200000 4.0730000 + 326 326 1 0.0000000 12.2200000 12.2200000 1.3580000 + 327 327 1 0.0000000 12.2200000 14.9350000 4.0730000 + 328 328 1 0.0000000 14.9350000 14.9350000 1.3580000 + 329 329 1 0.0000000 10.8620000 10.8620000 5.4310000 + 330 330 1 0.0000000 10.8620000 13.5770000 8.1460000 + 331 331 1 0.0000000 13.5770000 13.5770000 5.4310000 + 332 332 1 0.0000000 13.5770000 10.8620000 8.1460000 + 333 333 1 0.0000000 14.9350000 12.2200000 9.5040000 + 334 334 1 0.0000000 12.2200000 12.2200000 6.7890000 + 335 335 1 0.0000000 12.2200000 14.9350000 9.5040000 + 336 336 1 0.0000000 14.9350000 14.9350000 6.7890000 + 337 337 1 0.0000000 10.8620000 10.8620000 10.8620000 + 338 338 1 0.0000000 10.8620000 13.5770000 13.5770000 + 339 339 1 0.0000000 13.5770000 13.5770000 10.8620000 + 340 340 1 0.0000000 13.5770000 10.8620000 13.5770000 + 341 341 1 0.0000000 14.9350000 12.2200000 14.9350000 + 342 342 1 0.0000000 12.2200000 12.2200000 12.2200000 + 343 343 1 0.0000000 12.2200000 14.9350000 14.9350000 + 344 344 1 0.0000000 14.9350000 14.9350000 12.2200000 + 345 345 1 0.0000000 10.8620000 10.8620000 16.2930000 + 346 346 1 0.0000000 10.8620000 13.5770000 19.0080000 + 347 347 1 0.0000000 13.5770000 13.5770000 16.2930000 + 348 348 1 0.0000000 13.5770000 10.8620000 19.0080000 + 349 349 1 0.0000000 14.9350000 12.2200000 20.3660000 + 350 350 1 0.0000000 12.2200000 12.2200000 17.6510000 + 351 351 1 0.0000000 12.2200000 14.9350000 20.3660000 + 352 352 1 0.0000000 14.9350000 14.9350000 17.6510000 + 353 353 1 0.0000000 10.8620000 16.2930000 0.0000000 + 354 354 1 0.0000000 10.8620000 19.0080000 2.7150000 + 355 355 1 0.0000000 13.5770000 19.0080000 0.0000000 + 356 356 1 0.0000000 13.5770000 16.2930000 2.7150000 + 357 357 1 0.0000000 14.9350000 17.6510000 4.0730000 + 358 358 1 0.0000000 12.2200000 17.6510000 1.3580000 + 359 359 1 0.0000000 12.2200000 20.3660000 4.0730000 + 360 360 1 0.0000000 14.9350000 20.3660000 1.3580000 + 361 361 1 0.0000000 10.8620000 16.2930000 5.4310000 + 362 362 1 0.0000000 10.8620000 19.0080000 8.1460000 + 363 363 1 0.0000000 13.5770000 19.0080000 5.4310000 + 364 364 1 0.0000000 13.5770000 16.2930000 8.1460000 + 365 365 1 0.0000000 14.9350000 17.6510000 9.5040000 + 366 366 1 0.0000000 12.2200000 17.6510000 6.7890000 + 367 367 1 0.0000000 12.2200000 20.3660000 9.5040000 + 368 368 1 0.0000000 14.9350000 20.3660000 6.7890000 + 369 369 1 0.0000000 10.8620000 16.2930000 10.8620000 + 370 370 1 0.0000000 10.8620000 19.0080000 13.5770000 + 371 371 1 0.0000000 13.5770000 19.0080000 10.8620000 + 372 372 1 0.0000000 13.5770000 16.2930000 13.5770000 + 373 373 1 0.0000000 14.9350000 17.6510000 14.9350000 + 374 374 1 0.0000000 12.2200000 17.6510000 12.2200000 + 375 375 1 0.0000000 12.2200000 20.3660000 14.9350000 + 376 376 1 0.0000000 14.9350000 20.3660000 12.2200000 + 377 377 1 0.0000000 10.8620000 16.2930000 16.2930000 + 378 378 1 0.0000000 10.8620000 19.0080000 19.0080000 + 379 379 1 0.0000000 13.5770000 19.0080000 16.2930000 + 380 380 1 0.0000000 13.5770000 16.2930000 19.0080000 + 381 381 1 0.0000000 14.9350000 17.6510000 20.3660000 + 382 382 1 0.0000000 12.2200000 17.6510000 17.6510000 + 383 383 1 0.0000000 12.2200000 20.3660000 20.3660000 + 384 384 1 0.0000000 14.9350000 20.3660000 17.6510000 + 385 385 1 0.0000000 16.2930000 0.0000000 0.0000000 + 386 386 1 0.0000000 16.2930000 2.7150000 2.7150000 + 387 387 1 0.0000000 19.0080000 2.7150000 0.0000000 + 388 388 1 0.0000000 19.0080000 0.0000000 2.7150000 + 389 389 1 0.0000000 20.3660000 1.3580000 4.0730000 + 390 390 1 0.0000000 17.6510000 1.3580000 1.3580000 + 391 391 1 0.0000000 17.6510000 4.0730000 4.0730000 + 392 392 1 0.0000000 20.3660000 4.0730000 1.3580000 + 393 393 1 0.0000000 16.2930000 0.0000000 5.4310000 + 394 394 1 0.0000000 16.2930000 2.7150000 8.1460000 + 395 395 1 0.0000000 19.0080000 2.7150000 5.4310000 + 396 396 1 0.0000000 19.0080000 0.0000000 8.1460000 + 397 397 1 0.0000000 20.3660000 1.3580000 9.5040000 + 398 398 1 0.0000000 17.6510000 1.3580000 6.7890000 + 399 399 1 0.0000000 17.6510000 4.0730000 9.5040000 + 400 400 1 0.0000000 20.3660000 4.0730000 6.7890000 + 401 401 1 0.0000000 16.2930000 0.0000000 10.8620000 + 402 402 1 0.0000000 16.2930000 2.7150000 13.5770000 + 403 403 1 0.0000000 19.0080000 2.7150000 10.8620000 + 404 404 1 0.0000000 19.0080000 0.0000000 13.5770000 + 405 405 1 0.0000000 20.3660000 1.3580000 14.9350000 + 406 406 1 0.0000000 17.6510000 1.3580000 12.2200000 + 407 407 1 0.0000000 17.6510000 4.0730000 14.9350000 + 408 408 1 0.0000000 20.3660000 4.0730000 12.2200000 + 409 409 1 0.0000000 16.2930000 0.0000000 16.2930000 + 410 410 1 0.0000000 16.2930000 2.7150000 19.0080000 + 411 411 1 0.0000000 19.0080000 2.7150000 16.2930000 + 412 412 1 0.0000000 19.0080000 0.0000000 19.0080000 + 413 413 1 0.0000000 20.3660000 1.3580000 20.3660000 + 414 414 1 0.0000000 17.6510000 1.3580000 17.6510000 + 415 415 1 0.0000000 17.6510000 4.0730000 20.3660000 + 416 416 1 0.0000000 20.3660000 4.0730000 17.6510000 + 417 417 1 0.0000000 16.2930000 5.4310000 0.0000000 + 418 418 1 0.0000000 16.2930000 8.1460000 2.7150000 + 419 419 1 0.0000000 19.0080000 8.1460000 0.0000000 + 420 420 1 0.0000000 19.0080000 5.4310000 2.7150000 + 421 421 1 0.0000000 20.3660000 6.7890000 4.0730000 + 422 422 1 0.0000000 17.6510000 6.7890000 1.3580000 + 423 423 1 0.0000000 17.6510000 9.5040000 4.0730000 + 424 424 1 0.0000000 20.3660000 9.5040000 1.3580000 + 425 425 1 0.0000000 16.2930000 5.4310000 5.4310000 + 426 426 1 0.0000000 16.2930000 8.1460000 8.1460000 + 427 427 1 0.0000000 19.0080000 8.1460000 5.4310000 + 428 428 1 0.0000000 19.0080000 5.4310000 8.1460000 + 429 429 1 0.0000000 20.3660000 6.7890000 9.5040000 + 430 430 1 0.0000000 17.6510000 6.7890000 6.7890000 + 431 431 1 0.0000000 17.6510000 9.5040000 9.5040000 + 432 432 1 0.0000000 20.3660000 9.5040000 6.7890000 + 433 433 1 0.0000000 16.2930000 5.4310000 10.8620000 + 434 434 1 0.0000000 16.2930000 8.1460000 13.5770000 + 435 435 1 0.0000000 19.0080000 8.1460000 10.8620000 + 436 436 1 0.0000000 19.0080000 5.4310000 13.5770000 + 437 437 1 0.0000000 20.3660000 6.7890000 14.9350000 + 438 438 1 0.0000000 17.6510000 6.7890000 12.2200000 + 439 439 1 0.0000000 17.6510000 9.5040000 14.9350000 + 440 440 1 0.0000000 20.3660000 9.5040000 12.2200000 + 441 441 1 0.0000000 16.2930000 5.4310000 16.2930000 + 442 442 1 0.0000000 16.2930000 8.1460000 19.0080000 + 443 443 1 0.0000000 19.0080000 8.1460000 16.2930000 + 444 444 1 0.0000000 19.0080000 5.4310000 19.0080000 + 445 445 1 0.0000000 20.3660000 6.7890000 20.3660000 + 446 446 1 0.0000000 17.6510000 6.7890000 17.6510000 + 447 447 1 0.0000000 17.6510000 9.5040000 20.3660000 + 448 448 1 0.0000000 20.3660000 9.5040000 17.6510000 + 449 449 1 0.0000000 16.2930000 10.8620000 0.0000000 + 450 450 1 0.0000000 16.2930000 13.5770000 2.7150000 + 451 451 1 0.0000000 19.0080000 13.5770000 0.0000000 + 452 452 1 0.0000000 19.0080000 10.8620000 2.7150000 + 453 453 1 0.0000000 20.3660000 12.2200000 4.0730000 + 454 454 1 0.0000000 17.6510000 12.2200000 1.3580000 + 455 455 1 0.0000000 17.6510000 14.9350000 4.0730000 + 456 456 1 0.0000000 20.3660000 14.9350000 1.3580000 + 457 457 1 0.0000000 16.2930000 10.8620000 5.4310000 + 458 458 1 0.0000000 16.2930000 13.5770000 8.1460000 + 459 459 1 0.0000000 19.0080000 13.5770000 5.4310000 + 460 460 1 0.0000000 19.0080000 10.8620000 8.1460000 + 461 461 1 0.0000000 20.3660000 12.2200000 9.5040000 + 462 462 1 0.0000000 17.6510000 12.2200000 6.7890000 + 463 463 1 0.0000000 17.6510000 14.9350000 9.5040000 + 464 464 1 0.0000000 20.3660000 14.9350000 6.7890000 + 465 465 1 0.0000000 16.2930000 10.8620000 10.8620000 + 466 466 1 0.0000000 16.2930000 13.5770000 13.5770000 + 467 467 1 0.0000000 19.0080000 13.5770000 10.8620000 + 468 468 1 0.0000000 19.0080000 10.8620000 13.5770000 + 469 469 1 0.0000000 20.3660000 12.2200000 14.9350000 + 470 470 1 0.0000000 17.6510000 12.2200000 12.2200000 + 471 471 1 0.0000000 17.6510000 14.9350000 14.9350000 + 472 472 1 0.0000000 20.3660000 14.9350000 12.2200000 + 473 473 1 0.0000000 16.2930000 10.8620000 16.2930000 + 474 474 1 0.0000000 16.2930000 13.5770000 19.0080000 + 475 475 1 0.0000000 19.0080000 13.5770000 16.2930000 + 476 476 1 0.0000000 19.0080000 10.8620000 19.0080000 + 477 477 1 0.0000000 20.3660000 12.2200000 20.3660000 + 478 478 1 0.0000000 17.6510000 12.2200000 17.6510000 + 479 479 1 0.0000000 17.6510000 14.9350000 20.3660000 + 480 480 1 0.0000000 20.3660000 14.9350000 17.6510000 + 481 481 1 0.0000000 16.2930000 16.2930000 0.0000000 + 482 482 1 0.0000000 16.2930000 19.0080000 2.7150000 + 483 483 1 0.0000000 19.0080000 19.0080000 0.0000000 + 484 484 1 0.0000000 19.0080000 16.2930000 2.7150000 + 485 485 1 0.0000000 20.3660000 17.6510000 4.0730000 + 486 486 1 0.0000000 17.6510000 17.6510000 1.3580000 + 487 487 1 0.0000000 17.6510000 20.3660000 4.0730000 + 488 488 1 0.0000000 20.3660000 20.3660000 1.3580000 + 489 489 1 0.0000000 16.2930000 16.2930000 5.4310000 + 490 490 1 0.0000000 16.2930000 19.0080000 8.1460000 + 491 491 1 0.0000000 19.0080000 19.0080000 5.4310000 + 492 492 1 0.0000000 19.0080000 16.2930000 8.1460000 + 493 493 1 0.0000000 20.3660000 17.6510000 9.5040000 + 494 494 1 0.0000000 17.6510000 17.6510000 6.7890000 + 495 495 1 0.0000000 17.6510000 20.3660000 9.5040000 + 496 496 1 0.0000000 20.3660000 20.3660000 6.7890000 + 497 497 1 0.0000000 16.2930000 16.2930000 10.8620000 + 498 498 1 0.0000000 16.2930000 19.0080000 13.5770000 + 499 499 1 0.0000000 19.0080000 19.0080000 10.8620000 + 500 500 1 0.0000000 19.0080000 16.2930000 13.5770000 + 501 501 1 0.0000000 20.3660000 17.6510000 14.9350000 + 502 502 1 0.0000000 17.6510000 17.6510000 12.2200000 + 503 503 1 0.0000000 17.6510000 20.3660000 14.9350000 + 504 504 1 0.0000000 20.3660000 20.3660000 12.2200000 + 505 505 1 0.0000000 16.2930000 16.2930000 16.2930000 + 506 506 1 0.0000000 16.2930000 19.0080000 19.0080000 + 507 507 1 0.0000000 19.0080000 19.0080000 16.2930000 + 508 508 1 0.0000000 19.0080000 16.2930000 19.0080000 + 509 509 1 0.0000000 20.3660000 17.6510000 20.3660000 + 510 510 1 0.0000000 17.6510000 17.6510000 17.6510000 + 511 511 1 0.0000000 17.6510000 20.3660000 20.3660000 + 512 512 1 0.0000000 20.3660000 20.3660000 17.6510000 + diff --git a/examples/USER/phonon/third_order_command/lmp_bank/silicon_8.lmp b/examples/USER/phonon/third_order_command/lmp_bank/silicon_8.lmp new file mode 100755 index 0000000000..5066049895 --- /dev/null +++ b/examples/USER/phonon/third_order_command/lmp_bank/silicon_8.lmp @@ -0,0 +1,29 @@ +LAMMPS description + + 8 atoms + 0 bonds + 0 angles + 0 dihedrals + 0 impropers + + 1 atom types + 0 bond types + 0 angle types + 0 dihedral types + 0 improper types + + + 0.0000000 5.4310000 xlo xhi + 0.0000000 5.4310000 ylo yhi + 0.0000000 5.4310000 zlo zhi + + Atoms + + 1 1 1 0.0000000 0.0000000 0.0000000 0.0000000 + 2 2 1 0.0000000 1.3577500 1.3577500 1.3572000 + 3 3 1 0.0000000 2.7155000 2.7155000 0.0000000 + 4 4 1 0.0000000 4.0732500 4.0732500 1.3572000 + 5 5 1 0.0000000 2.7155000 0.0000000 2.7144000 + 6 6 1 0.0000000 4.0732500 1.3577500 4.0732500 + 7 7 1 0.0000000 0.0000000 2.7155000 2.7155000 + 8 8 1 0.0000000 1.3577500 4.0732500 4.0732500 diff --git a/examples/USER/phonon/third_order_command/results/out.silicon b/examples/USER/phonon/third_order_command/results/out.silicon new file mode 100755 index 0000000000..0729dc549c --- /dev/null +++ b/examples/USER/phonon/third_order_command/results/out.silicon @@ -0,0 +1,58 @@ +LAMMPS (16 Jul 2018) +Reading data file ... + orthogonal box = (0 0 0) to (5.431 5.431 5.431) + 2 by 2 by 1 MPI processor grid + reading atoms ... + 8 atoms +Finding 1-2 1-3 1-4 neighbors ... + special bond factors lj: 0 0 0 + special bond factors coul: 0 0 0 + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors +Neighbor list info ... + update every 1 steps, delay 10 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 4 + ghost atom cutoff = 4 + binsize = 2, bins = 3 3 3 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair tersoff, perpetual + attributes: full, newton on + pair build: full/bin + stencil: full/bin/3d + bin: standard +Calculating Anharmonic Dynamical Matrix... +Third Order calculation took 0.043923 seconds +Finished Calculating Third Order Tensor +Loop time of 1.22619e+06 on 4 procs for 0 steps with 8 atoms + +0.0% CPU use with 4 MPI tasks x no OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 0.013707 | 0.016582 | 0.019588 | 2.2 | 0.00 +Bond | 8.1341e-05 | 8.7207e-05 | 9.3228e-05 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.019285 | 0.022435 | 0.025684 | 2.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 1.226e+06 | | |100.00 + +Nlocal: 2 ave 2 max 2 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 56 ave 56 max 56 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 32 ave 32 max 32 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 128 +Ave neighs/atom = 16 +Ave special neighs/atom = 0 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:00 diff --git a/examples/USER/phonon/third_order_command/results/third_order b/examples/USER/phonon/third_order_command/results/third_order new file mode 100755 index 0000000000..276896aa1f --- /dev/null +++ b/examples/USER/phonon/third_order_command/results/third_order @@ -0,0 +1,4608 @@ +1 1 1 1 1 -0.08569589 0.16067980 137.35980742 +1 1 1 1 2 -74170.35399415 -67130.60762609 -67084.85673024 +1 1 1 1 3 -0.10711987 -0.00000000 -5.61308111 +1 1 1 1 4 74170.34328216 67130.75759390 -67084.54608262 +1 1 1 1 5 -0.00000000 -0.00000000 -15.01820557 +1 1 1 1 6 74116.35486843 -67012.24017136 67025.88724261 +1 1 1 1 7 -0.00000000 -0.00000000 1.11404663 +1 1 1 1 8 -74116.23703657 67011.98308368 67025.60873095 +1 1 1 2 1 -0.23566371 -0.27851166 329269.69018077 +1 1 1 2 2 -72106.38979127 -72095.95631608 -80899.99905481 +1 1 1 2 3 -0.05355993 -0.00000000 -11783.78540967 +1 1 1 2 4 72106.62545498 72096.21340376 -80900.41682229 +1 1 1 2 5 -0.03213596 -0.00000000 2960.49323056 +1 1 1 2 6 -71998.20943604 72010.66747675 -80803.98751664 +1 1 1 2 7 0.02142397 -0.00000000 2961.59656521 +1 1 1 2 8 71998.19872405 -72010.69961271 -80803.91253273 +1 1 1 3 1 141.59104222 329281.45194233 0.41776749 +1 1 1 3 2 -72074.53234237 -80911.53586465 -72064.09886718 +1 1 1 3 3 3.98485911 2969.85550707 0.02142397 +1 1 1 3 4 -72074.54305436 -80911.38589683 72064.09886718 +1 1 1 3 5 -9.64078817 -11781.34307667 0.02142397 +1 1 1 3 6 72006.30769810 -80801.86654325 72002.14073522 +1 1 1 3 7 0.14996782 2957.19393861 0.04284795 +1 1 1 3 8 72006.66119367 -80802.35929464 -72002.55850270 +1 2 1 1 1 -0.40705550 -0.47132742 329270.04367633 +1 2 1 1 2 -72106.28267140 -72095.84919621 -80899.90264692 +1 2 1 1 3 -0.01071199 0.02142397 -11783.93537749 +1 2 1 1 4 72106.66830293 72096.21340376 -80900.26685448 +1 2 1 1 5 0.02142397 -0.04284795 2960.53607851 +1 2 1 1 6 -71998.40225180 72010.90314046 -80804.15890843 +1 2 1 1 7 0.02142397 -0.00000000 2961.59656521 +1 2 1 1 8 71998.34869187 -72010.95670040 -80804.09463651 +1 2 1 2 1 -0.04284795 0.67485517 115.02531483 +1 2 1 2 2 -67122.33797224 -74173.02127888 -67083.27135618 +1 2 1 2 3 -0.02142397 -0.00000000 -9.94072380 +1 2 1 2 4 67121.93091674 74172.77490318 -67083.11067638 +1 2 1 2 5 0.05355993 0.06427192 9.89787585 +1 2 1 2 6 67020.89545674 -74109.38136498 67027.62258448 +1 2 1 2 7 0.02142397 0.05355993 -3.84560328 +1 2 1 2 8 -67020.63836905 74109.15641326 67027.31193686 +1 2 1 3 1 329282.72666877 112.65796573 -0.08569589 +1 2 1 3 2 -80915.37075594 -72065.54498540 -72064.36666685 +1 2 1 3 3 2970.09117078 3.04220427 0.14996782 +1 2 1 3 4 -80913.63541407 -72065.98417686 72064.89155420 +1 2 1 3 5 2958.71504075 -9.59794022 -0.14996782 +1 2 1 3 6 -80800.75249661 72013.73110499 -72002.46209482 +1 2 1 3 7 -11780.59323759 -2.52802890 -0.67485517 +1 2 1 3 8 -80801.13812814 72014.00961665 72002.82630238 +1 3 1 1 1 140.26275585 329282.54456499 0.53559934 +1 3 1 1 2 -72074.61803826 -80911.60013657 -72064.25954698 +1 3 1 1 3 3.90987520 2969.74838720 -0.02142397 +1 3 1 1 4 -72074.26454270 -80911.32162491 72063.88462744 +1 3 1 1 5 -9.58722823 -11781.32165269 0.04284795 +1 3 1 1 6 72007.00397725 -80802.53068643 72002.74060648 +1 3 1 1 7 0.06427192 2957.16180265 -0.00000000 +1 3 1 1 8 72007.17536904 -80802.77706213 -72002.90128628 +1 3 1 2 1 329282.94090850 111.04045572 0.63200722 +1 3 1 2 2 -80915.52072376 -72065.59854533 -72064.48449870 +1 3 1 2 3 2969.99476290 2.93508440 -0.04284795 +1 3 1 2 4 -80913.01411883 -72065.17006586 72064.14171512 +1 3 1 2 5 2958.13659346 -10.43347519 0.42847947 +1 3 1 2 6 -80801.11670417 72014.05246460 -72002.80487840 +1 3 1 2 7 -11780.50754169 -2.72084466 -0.54631133 +1 3 1 2 8 -80800.85961648 72016.01275819 72002.63348661 +1 3 1 3 1 0.29993563 0.22495172 -12.59729654 +1 3 1 3 2 -67096.11502842 -67094.33683860 -74102.86847698 +1 3 1 3 3 -0.02142397 -0.04284795 1.13547061 +1 3 1 3 4 67095.81509279 67094.12259887 -74102.69708519 +1 3 1 3 5 -0.01071199 0.02142397 6.64143185 +1 3 1 3 6 67033.98550467 -67031.45747577 74105.22511409 +1 3 1 3 7 0.06427192 0.04284795 -0.27851166 +1 3 1 3 8 -67033.98550467 67031.28608399 74105.19297812 +1 1 2 1 1 -74175.17438824 -72109.17490785 -72075.08936569 +1 1 2 1 2 74174.06034160 72107.35387009 72071.88648162 +1 1 2 1 3 -0.43919146 538.62012295 1558.31557547 +1 1 2 1 4 -0.35349557 -538.98433050 -1559.15111044 +1 1 2 1 5 -0.36420755 1559.70813376 538.94148255 +1 1 2 1 6 -0.12854384 -1560.65078860 -539.26284216 +1 1 2 1 7 -9470.57469669 -3063.11406462 -3059.55768498 +1 1 2 1 8 9472.97418175 3066.31694869 3063.78891979 +1 1 2 2 1 -67136.04931541 -72094.55304580 -80912.33926366 +1 1 2 2 2 72108.78927633 67119.37075188 80912.66062327 +1 1 2 2 3 0.12854384 -537.80601195 3074.38307479 +1 1 2 2 4 538.66297089 -0.51417537 -3074.31880286 +1 1 2 2 5 -888.64500536 3068.44863407 94.71538776 +1 1 2 2 6 -1558.04777580 -0.68556716 -3077.83233455 +1 1 2 2 7 -1.34971034 1557.43719255 3075.86132897 +1 1 2 2 8 -3063.41400025 888.27008582 -93.10858973 +1 1 2 3 1 -67090.58764320 -80900.65248600 -72062.44922120 +1 1 2 3 2 72070.46178737 80911.33233690 67094.67962218 +1 1 2 3 3 -893.59394329 83.29640977 3055.78706561 +1 1 2 3 4 -1559.26894230 -3074.61873850 -0.59987126 +1 1 2 3 5 0.09640788 3080.91738677 -536.26348584 +1 1 2 3 6 535.97426219 -3081.11020253 0.40705550 +1 1 2 3 7 2.59230082 3075.91488891 1559.82596561 +1 1 2 3 8 -3065.72778941 -94.97247544 888.65571735 +1 2 2 1 1 -72106.94681459 -67126.03360770 -80913.12123870 +1 2 2 1 2 67141.76951639 72094.19955023 80912.06075200 +1 2 2 1 3 -539.33782607 0.81411100 3074.21168300 +1 2 2 1 4 -0.52488736 538.66297089 -3074.36165081 +1 2 2 1 5 1559.22609435 1.82103777 3080.51033127 +1 2 2 1 6 888.24866185 -3063.37115230 -93.06574178 +1 2 2 1 7 3058.20797464 -887.99157416 91.65175952 +1 2 2 1 8 -0.68556716 -1558.01563984 -3077.80019859 +1 2 2 2 1 -72096.51333939 -74176.32057083 -72068.06230231 +1 2 2 2 2 72097.11321066 74179.99478232 72069.75479623 +1 2 2 2 3 539.58420176 0.83553497 1559.92237350 +1 2 2 2 4 -539.03789043 -0.38563153 -1559.19395839 +1 2 2 2 5 -3068.12727446 -9477.28040046 -3066.73471617 +1 2 2 2 6 3066.27410074 9473.03845367 3063.79963178 +1 2 2 2 7 1561.40062768 0.28922365 539.62704971 +1 2 2 2 8 -1560.62936463 -0.13925583 -539.18785825 +1 2 2 3 1 -80898.98141606 -67086.42068032 -72061.12093483 +1 2 2 3 2 80909.30777138 72063.89533942 67096.43638803 +1 2 2 3 3 82.96433818 -893.33685560 3055.82991356 +1 2 2 3 4 -3074.65087446 -1559.32250223 -0.51417537 +1 2 2 3 5 3079.44984457 2.18524532 1557.22295281 +1 2 2 3 6 -94.92962749 -3065.77063736 888.60215741 +1 2 2 3 7 3077.91803045 2.61372479 -536.88478108 +1 2 2 3 8 -3081.11020253 535.98497418 0.33207159 +1 3 2 1 1 -72074.61803826 -80912.03932803 -67095.49373318 +1 3 2 1 2 67095.17237358 80902.98769914 72062.60990100 +1 3 2 1 3 1560.09376528 3074.55446658 0.55702332 +1 3 2 1 4 893.75462309 -83.27498580 -3055.65852177 +1 3 2 1 5 -535.98497418 3081.32444227 0.36420755 +1 3 2 1 6 -1.04977471 -3079.24631682 536.43487763 +1 3 2 1 7 3063.56396806 94.23334835 -889.21274066 +1 3 2 1 8 -1.07119869 -3078.63573357 -1559.47247005 +1 3 2 2 1 -80910.85029749 -72067.94447046 -67097.26121101 +1 3 2 2 2 80903.20193888 67084.63177851 72063.35974008 +1 3 2 2 3 3074.38307479 1558.70120699 0.29993563 +1 3 2 2 4 -83.26427381 893.74391110 -3055.63709779 +1 3 2 2 5 95.32597101 3067.67737102 -887.93801423 +1 3 2 2 6 -3078.63573357 -1.07119869 -1559.49389402 +1 3 2 2 7 3079.13919695 -534.68882377 0.25708768 +1 3 2 2 8 -3079.24631682 -1.03906272 536.42416564 +1 3 2 3 1 -72064.05601923 -72064.52734665 -74113.78399158 +1 3 2 3 2 72063.22048425 72066.00560083 74113.03415250 +1 3 2 3 3 -3055.10149845 -3055.55140190 -9478.75865465 +1 3 2 3 4 3055.31573819 3055.31573819 9478.65153478 +1 3 2 3 5 539.07002640 1555.42333902 -1.69249392 +1 3 2 3 6 -538.30947533 -1556.36599386 2.82796453 +1 3 2 3 7 1556.32314591 538.11665957 -3.12790016 +1 3 2 3 8 -1556.38741783 -538.30947533 2.82796453 +1 1 3 1 1 -0.04284795 -0.11783186 8.28036584 +1 1 3 1 2 -0.59987126 -0.00000000 -897.62165034 +1 1 3 1 3 0.01071199 0.02142397 8.03399014 +1 1 3 1 4 0.71770312 -0.08569589 -897.27886676 +1 1 3 1 5 0.05355993 0.04284795 2.27094121 +1 1 3 1 6 -0.68556716 -0.10711987 887.72377449 +1 1 3 1 7 -0.02142397 -0.00000000 1.26401445 +1 1 3 1 8 0.66414318 0.06427192 887.68092654 +1 1 3 2 1 -0.02142397 0.08569589 2968.58078064 +1 1 3 2 2 538.32018732 -538.32018732 85.43880714 +1 1 3 2 3 0.01071199 0.02142397 2968.54864468 +1 1 3 2 4 -538.30947533 538.32018732 85.52450304 +1 1 3 2 5 -0.06427192 -0.06427192 -3372.04776546 +1 1 3 2 6 538.38445924 538.25591539 89.29512241 +1 1 3 2 7 0.02142397 0.02142397 -2914.08890352 +1 1 3 2 8 -538.27733937 -538.30947533 89.25227446 +1 1 3 3 1 -6.23437635 -11785.64929538 -0.03213596 +1 1 3 3 2 1558.93687070 3074.91867413 3058.37936643 +1 1 3 3 3 5.55952118 2970.56249821 -0.04284795 +1 1 3 3 4 1559.02256660 3074.85440221 -3058.22939861 +1 1 3 3 5 0.74983908 -2915.35291796 -0.00000000 +1 1 3 3 6 -1559.30107826 3076.86825574 -3062.21425772 +1 1 3 3 7 0.62129524 -573.29482439 -0.01071199 +1 1 3 3 8 -1559.38677415 3076.90039170 3062.23568169 +1 2 3 1 1 -0.04284795 0.05355993 2968.54864468 +1 2 3 1 2 -539.11287434 538.98433050 85.03175164 +1 2 3 1 3 0.03213596 -0.02142397 2968.54864468 +1 2 3 1 4 539.09145037 -539.02717845 85.09602356 +1 2 3 1 5 0.01071199 0.02142397 -2914.00320762 +1 2 3 1 6 -537.57034824 -537.63462016 89.59505804 +1 2 3 1 7 0.02142397 -0.00000000 -3372.06918943 +1 2 3 1 8 537.61319618 537.57034824 89.45580221 +1 2 3 2 1 -0.02142397 -0.08569589 8.09826206 +1 2 3 2 2 0.04284795 0.68556716 -897.55737842 +1 2 3 2 3 0.04284795 -0.00000000 8.29107782 +1 2 3 2 4 -0.04284795 -0.66414318 -897.45025855 +1 2 3 2 5 -0.09640788 0.06427192 2.22809327 +1 2 3 2 6 -0.12854384 -0.66414318 887.76662244 +1 2 3 2 7 -0.00000000 -0.04284795 1.24259047 +1 2 3 2 8 0.12854384 0.57844729 887.45597482 +1 2 3 3 1 -11785.58502346 -11.39755401 0.05355993 +1 2 3 3 2 3074.81155426 1560.56509271 3058.33651848 +1 2 3 3 3 2970.42324238 5.74162495 -0.02142397 +1 2 3 3 4 3074.92938612 1560.54366873 -3058.18655066 +1 2 3 3 5 -573.21984048 -0.64271921 -0.04284795 +1 2 3 3 6 3076.93252766 -1557.95136791 3062.29995362 +1 2 3 3 7 -2915.35291796 0.93194286 0.03213596 +1 2 3 3 8 3076.99679958 -1557.88709599 -3062.38564951 +1 3 3 1 1 5.84874482 2970.57321019 -0.05355993 +1 3 3 1 2 1560.52224476 3074.89725015 -3058.31509451 +1 3 3 1 3 -11.38684202 -11785.64929538 0.02142397 +1 3 3 1 4 1560.46868482 3074.89725015 3058.22939861 +1 3 3 1 5 -0.64271921 -573.24126446 -0.04284795 +1 3 3 1 6 -1557.92994394 3076.95395163 3062.29995362 +1 3 3 1 7 0.87838292 -2915.31007002 0.01071199 +1 3 3 1 8 -1557.84424805 3077.00751156 -3062.35351355 +1 3 3 2 1 2970.51965026 5.62379310 0.02142397 +1 3 3 2 2 3075.02579400 1559.04399057 -3058.50791027 +1 3 3 2 3 -11785.63858339 -6.36292019 -0.02142397 +1 3 3 2 4 3074.98294605 1559.00114263 3058.40079040 +1 3 3 2 5 -2915.36362995 0.68556716 0.02142397 +1 3 3 2 6 3076.86825574 -1559.45104607 -3062.29995362 +1 3 3 2 7 -573.30553638 0.65343120 0.07498391 +1 3 3 2 8 3076.82540779 -1559.41891011 3062.05357792 +1 3 3 3 1 0.02142397 -0.02142397 3.99557110 +1 3 3 3 2 0.12854384 -0.14996782 -9480.12978896 +1 3 3 3 3 0.01071199 -0.04284795 4.11340295 +1 3 3 3 4 -0.11783186 0.21423974 -9480.02266909 +1 3 3 3 5 -0.03213596 -0.04284795 2.63514877 +1 3 3 3 6 0.17139179 0.17139179 9473.93826056 +1 3 3 3 7 -0.04284795 -0.01071199 1.81032578 +1 3 3 3 8 -0.12854384 -0.18210378 9473.88470063 +1 1 4 1 1 74175.53859579 72109.64623527 -72075.37858933 +1 1 4 1 2 0.38563153 539.01646646 -1559.19395839 +1 1 4 1 3 0.43919146 -538.55585103 1558.25130355 +1 1 4 1 4 -74174.42454916 -72107.78234956 72072.32567308 +1 1 4 1 5 0.35349557 -1559.70813376 538.96290653 +1 1 4 1 6 -9473.02774168 -3066.32766067 3063.77820780 +1 1 4 1 7 9470.57469669 3063.09264064 -3059.56839697 +1 1 4 1 8 0.12854384 1560.64007661 -539.19857024 +1 1 4 2 1 67136.69203462 72095.08864514 -80912.77845512 +1 1 4 2 2 -538.66297089 0.54631133 -3074.35093883 +1 1 4 2 3 -0.11783186 537.82743592 3074.51161863 +1 1 4 2 4 -72109.31416368 -67119.98133513 80913.20693460 +1 1 4 2 5 888.67714132 -3068.49148202 94.73681173 +1 1 4 2 6 3063.40328826 -888.25937383 -93.10858973 +1 1 4 2 7 1.32828637 -1557.45861652 3075.82919301 +1 1 4 2 8 1558.01563984 0.65343120 -3077.82162257 +1 1 4 3 1 -67090.65191512 -80900.84530177 72062.58847703 +1 1 4 3 2 -1559.32250223 -3074.66158644 0.51417537 +1 1 4 3 3 -893.62607925 83.29640977 -3055.78706561 +1 1 4 3 4 72070.57961922 80911.49301670 -67094.76531808 +1 1 4 3 5 0.07498391 3080.85311485 536.26348584 +1 1 4 3 6 -3065.74921338 -94.95105147 -888.66642933 +1 1 4 3 7 2.59230082 3075.91488891 -1559.81525363 +1 1 4 3 8 535.96355021 -3081.13162650 -0.33207159 +1 2 4 1 1 72107.56810982 67126.64419095 -80913.82822983 +1 2 4 1 2 0.53559934 -538.63083493 -3074.35093883 +1 2 4 1 3 539.32711408 -0.79268703 3074.16883505 +1 2 4 1 4 -67142.43365957 -72094.82084547 80912.58563936 +1 2 4 1 5 -1559.23680634 -1.79961379 3080.44605934 +1 2 4 1 6 0.68556716 1558.03706381 -3077.81091058 +1 2 4 1 7 -3058.22939861 888.00228615 91.66247150 +1 2 4 1 8 -888.25937383 3063.38186429 -93.10858973 +1 2 4 2 1 72096.32052363 74176.06348314 -72067.88019853 +1 2 4 2 2 539.00575447 0.38563153 -1559.21538236 +1 2 4 2 3 -539.56277779 -0.83553497 1560.00806939 +1 2 4 2 4 -72096.73829112 -74179.71627066 72069.56198047 +1 2 4 2 5 3068.15941042 9477.28040046 -3066.62759630 +1 2 4 2 6 1560.67221257 0.08569589 -539.17714626 +1 2 4 2 7 -1561.46489960 -0.25708768 539.63776170 +1 2 4 2 8 -3066.32766067 -9473.00631771 3063.81034376 +1 2 4 3 1 -80898.55293658 -67086.00291283 72060.77815125 +1 2 4 3 2 -3074.66158644 -1559.30107826 0.52488736 +1 2 4 3 3 82.97505016 -893.35827957 -3055.91560945 +1 2 4 3 4 80908.90071588 72063.49899591 -67096.11502842 +1 2 4 3 5 3079.44984457 2.18524532 -1557.20152883 +1 2 4 3 6 -3081.11020253 535.98497418 -0.29993563 +1 2 4 3 7 3077.91803045 2.60301281 536.90620505 +1 2 4 3 8 -94.95105147 -3065.73850140 -888.68785331 +1 3 4 1 1 -72074.72515813 -80912.17858386 67095.54729312 +1 3 4 1 2 893.78675905 -83.20000189 3055.80848958 +1 3 4 1 3 1560.10447727 3074.55446658 -0.51417537 +1 3 4 1 4 67095.30091742 80903.13766695 -72062.59918902 +1 3 4 1 5 -535.98497418 3081.32444227 -0.29993563 +1 3 4 1 6 -1.08191067 -3078.64644555 1559.45104607 +1 3 4 1 7 3063.58539204 94.23334835 889.22345265 +1 3 4 1 8 -1.09262266 -3079.24631682 -536.45630160 +1 3 4 2 1 -80910.78602557 -72067.71951873 67097.07910724 +1 3 4 2 2 -83.18928990 893.78675905 3055.80848958 +1 3 4 2 3 3074.40449876 1558.70120699 -0.34278358 +1 3 4 2 4 80903.01983510 67084.28899493 -72063.26333220 +1 3 4 2 5 95.28312306 3067.72021896 887.87374231 +1 3 4 2 6 -3079.25702880 -1.09262266 -536.43487763 +1 3 4 2 7 3079.16062092 -534.65668781 -0.28922365 +1 3 4 2 8 -3078.60359761 -1.07119869 1559.44033409 +1 3 4 3 1 72063.67038770 72064.06673121 -74113.23768025 +1 3 4 3 2 -3055.27289024 -3055.28360223 9478.69438273 +1 3 4 3 3 3055.10149845 3055.52997792 -9478.73723067 +1 3 4 3 4 -72062.68488491 -72065.59854533 74112.61638501 +1 3 4 3 5 -539.04860242 -1555.38049107 -1.75676584 +1 3 4 3 6 1556.38741783 538.34161129 2.87081248 +1 3 4 3 7 -1556.32314591 -538.12737155 -3.14932413 +1 3 4 3 8 538.36303526 1556.38741783 2.82796453 +1 1 5 1 1 -0.04284795 0.12854384 -9.14803677 +1 1 5 1 2 -0.85695895 -890.25180339 -0.25708768 +1 1 5 1 3 -0.04284795 -0.04284795 0.94265484 +1 1 5 1 4 0.83553497 890.23037941 -0.08569589 +1 1 5 1 5 -0.01071199 -0.02142397 13.26143972 +1 1 5 1 6 -0.55702332 -889.58766020 -2.52802890 +1 1 5 1 7 0.02142397 0.02142397 0.41776749 +1 1 5 1 8 0.53559934 889.57694822 -2.50660492 +1 1 5 2 1 -0.04284795 -0.02142397 -11786.34557453 +1 1 5 2 2 1560.77933244 3069.28416904 3081.34586624 +1 1 5 2 3 0.01071199 -0.06427192 -2915.33149399 +1 1 5 2 4 -1560.81146840 -3069.32701699 3081.62437790 +1 1 5 2 5 -0.05355993 0.02142397 2966.14915962 +1 1 5 2 6 1558.05848778 -3056.34408893 3073.69750763 +1 1 5 2 7 0.10711987 -0.04284795 -574.38744705 +1 1 5 2 8 -1558.07991176 3056.32266495 3073.71893160 +1 1 5 3 1 -12.89723217 2960.13973500 -0.01071199 +1 1 5 3 2 538.34161129 94.00839662 -536.54199750 +1 1 5 3 3 1.45683021 -3372.02634149 0.12854384 +1 1 5 3 4 538.25591539 93.98697265 536.71338929 +1 1 5 3 5 14.45047026 2963.40689099 -0.02142397 +1 1 5 3 6 -539.51992984 87.23842093 536.11351802 +1 1 5 3 7 -0.47132742 -2914.42097511 0.07498391 +1 1 5 3 8 -539.51992984 87.42052471 -536.00639816 +1 2 5 1 1 -0.00000000 0.07498391 2959.63627162 +1 2 5 1 2 1560.45797284 -3069.54125673 3080.44605934 +1 2 5 1 3 0.06427192 -0.00000000 -573.09129664 +1 2 5 1 4 -1560.52224476 3069.45556083 3080.29609153 +1 2 5 1 5 0.01071199 -0.02142397 -11776.30844285 +1 2 5 1 6 1553.10954986 3059.40771717 3071.89789384 +1 2 5 1 7 -0.02142397 -0.00000000 -2914.77447067 +1 2 5 1 8 -1553.08812588 -3059.43985313 3071.76934999 +1 2 5 2 1 -0.00000000 -0.04284795 -8.79454121 +1 2 5 2 2 0.89980690 -9474.64525169 0.83553497 +1 2 5 2 3 0.02142397 -0.04284795 -0.25708768 +1 2 5 2 4 -0.86767094 9474.60240375 0.98550279 +1 2 5 2 5 0.08569589 0.02142397 13.41140754 +1 2 5 2 6 -0.06427192 -9456.17778636 -3.12790016 +1 2 5 2 7 0.04284795 0.03213596 -0.11783186 +1 2 5 2 8 -0.06427192 9456.22063431 -2.93508440 +1 2 5 3 1 2960.70747030 14.27907848 0.02142397 +1 2 5 3 2 3081.15305048 -3068.66287381 1558.33699944 +1 2 5 3 3 -2913.87466378 2.05670148 0.02142397 +1 2 5 3 4 3081.18518644 -3068.62002586 -1558.12275970 +1 2 5 3 5 -11774.21960541 16.62500360 0.02142397 +1 2 5 3 6 3069.88404031 3053.00194903 1560.52224476 +1 2 5 3 7 -574.69809467 -1.49967816 0.01071199 +1 2 5 3 8 3069.88404031 3053.05550896 -1560.61865264 +1 3 5 1 1 -12.49017667 2960.33255076 -0.07498391 +1 3 5 1 2 -536.09209405 94.73681173 538.32018732 +1 3 5 1 3 -0.23566371 -2914.62450286 -0.02142397 +1 3 5 1 4 -536.08138206 94.86535557 -538.42730718 +1 3 5 1 5 16.60357962 2963.59970675 -0.10711987 +1 3 5 1 6 534.72095973 87.49550862 -537.61319618 +1 3 5 1 7 -1.15689458 -3373.67598746 -0.03213596 +1 3 5 1 8 534.69953576 87.46337266 537.66675612 +1 3 5 2 1 -11787.12754957 -8.03399014 0.01071199 +1 3 5 2 2 3081.77434571 3069.28416904 1556.34456989 +1 3 5 2 3 -572.91990485 0.87838292 -0.02142397 +1 3 5 2 4 3081.74220975 3069.32701699 -1556.32314591 +1 3 5 2 5 2963.80323450 -7.96971822 0.10711987 +1 3 5 2 6 3074.42592273 -3061.35729877 1557.22295281 +1 3 5 2 7 -2916.01706115 -0.79268703 0.03213596 +1 3 5 2 8 3074.34022684 -3061.43228268 -1557.42648056 +1 3 5 3 1 -0.02142397 0.06427192 8.23751789 +1 3 5 3 2 -0.12854384 -886.35264017 -2.12097340 +1 3 5 3 3 -0.03213596 -0.06427192 2.54945287 +1 3 5 3 4 0.13925583 886.43833607 -2.22809327 +1 3 5 3 5 0.03213596 0.02142397 -10.17638751 +1 3 5 3 6 0.14996782 -891.38727399 3.04220427 +1 3 5 3 7 -0.00000000 -0.01071199 -2.17453333 +1 3 5 3 8 -0.14996782 891.26944214 2.83867652 +1 1 6 1 1 74116.23703657 -72002.14073522 72008.75003111 +1 1 6 1 2 0.40705550 -1558.13347169 535.67432656 +1 1 6 1 3 -1.28543842 538.64154692 -1558.85117481 +1 1 6 1 4 -9473.03845367 3064.52804688 -3066.00630107 +1 1 6 1 5 -1.07119869 1557.56573639 -539.66989766 +1 1 6 1 6 -74108.24589438 71998.04875624 -71998.13445213 +1 1 6 1 7 9466.48271771 -3061.73221831 3061.35729877 +1 1 6 1 8 0.44990345 -536.77766121 1556.92301718 +1 1 6 2 1 -67015.21810371 72015.84136640 -80796.89618135 +1 1 6 2 2 -1561.93622702 -1.75676584 -3081.76363373 +1 1 6 2 3 -0.53559934 538.51300308 3077.36100713 +1 1 6 2 4 -3066.00630107 -889.33057252 -95.12244326 +1 1 6 2 5 -891.70863360 -3053.55897234 86.12437430 +1 1 6 2 6 71998.32726790 -67051.53173914 80811.14312386 +1 1 6 2 7 0.42847947 -1557.60858433 3076.37550434 +1 1 6 2 8 536.67054134 -0.59987126 -3076.98608759 +1 1 6 3 1 67029.42219827 -80800.94531238 72003.74753324 +1 1 6 3 2 -540.03410521 -3079.38557265 -0.87838292 +1 1 6 3 3 888.95565298 90.49486493 -3062.77128104 +1 1 6 3 4 3063.40328826 -93.02289383 -888.83782112 +1 1 6 3 5 -1.48896617 3074.85440221 536.71338929 +1 1 6 3 6 -71997.32034113 80808.37943125 -67028.09391190 +1 1 6 3 7 -0.62129524 3076.85754375 -1559.46175806 +1 1 6 3 8 1557.69428023 -3077.28602322 -0.32135961 +1 2 6 1 1 -72004.24028464 67024.60180419 -80796.21061419 +1 2 6 1 2 889.39484444 3065.98487709 -95.07959531 +1 2 6 1 3 -537.82743592 0.36420755 3077.46812700 +1 2 6 1 4 1.75676584 1561.87195510 -3081.75292174 +1 2 6 1 5 1553.38806151 0.21423974 3070.18397594 +1 2 6 1 6 67035.54945475 -72006.46837791 80811.48590744 +1 2 6 1 7 3061.37872275 889.96257974 90.79480057 +1 2 6 1 8 0.59987126 -536.63840538 -3077.00751156 +1 2 6 2 1 72013.43116936 -74113.97680734 72014.96298348 +1 2 6 2 2 -3064.50662291 9473.03845367 -3065.95274113 +1 2 6 2 3 -537.93455579 -0.02142397 -1557.37292062 +1 2 6 2 4 1558.11204772 -0.40705550 535.68503855 +1 2 6 2 5 3057.04036807 -9458.66296731 3055.05865050 +1 2 6 2 6 -72005.10795558 74101.32595087 -72001.66940780 +1 2 6 2 7 -1557.77997612 -0.73912709 -537.59177221 +1 2 6 2 8 536.77766121 -0.43919146 1556.92301718 +1 2 6 3 1 -80801.90939119 67032.57152241 -72004.34740451 +1 2 6 3 2 -93.04431781 3063.43542422 888.84853311 +1 2 6 3 3 90.76266461 889.07348483 3062.79270501 +1 2 6 3 4 -3079.39628463 -540.05552919 0.87838292 +1 2 6 3 5 3072.65844490 -1.92815763 1561.37920371 +1 2 6 3 6 80810.32901286 -72001.45516806 67026.44426593 +1 2 6 3 7 3077.85375853 0.82482299 -536.22063789 +1 2 6 3 8 -3077.29673521 1557.70499222 0.35349557 +1 3 6 1 1 72007.60384851 -80795.10727954 67033.68556904 +1 3 6 1 2 -1.41398226 -3078.11084621 -538.18093149 +1 3 6 1 3 -1558.01563984 3077.59667084 0.34278358 +1 3 6 1 4 -2.82796453 -3080.16754769 1557.11583294 +1 3 6 1 5 536.20992591 3076.73971189 1.84246174 +1 3 6 1 6 -67028.08319992 80799.85268972 -72006.44695393 +1 3 6 1 7 -3061.97859401 91.86599925 890.54102703 +1 3 6 1 8 -891.51581784 -92.62655032 3061.14305904 +1 3 6 2 1 -80797.28181287 72014.55592798 -67032.51796247 +1 3 6 2 2 -3080.16754769 -2.82796453 -1557.07298499 +1 3 6 2 3 3077.28602322 -1559.83667760 -0.21423974 +1 3 6 2 4 -3078.13227018 -1.45683021 538.25591539 +1 3 6 2 5 89.83072175 -3058.57218219 -892.13711307 +1 3 6 2 6 80803.91253273 -67036.53495754 72005.35433127 +1 3 6 2 7 3077.12534342 536.01711014 -0.62129524 +1 3 6 2 8 -92.61583833 -891.49439386 -3061.14305904 +1 3 6 3 1 72000.76960090 -72000.16972964 74100.53326384 +1 3 6 3 2 536.32775776 -1559.33321422 2.37806108 +1 3 6 3 3 3063.01765673 -3062.57846527 9469.52492198 +1 3 6 3 4 1559.33321422 -536.32775776 2.35663711 +1 3 6 3 5 -536.91691704 1558.61551110 3.59922758 +1 3 6 3 6 -72003.52258152 72000.74817693 -74115.18726186 +1 3 6 3 7 -1557.73712818 537.81672393 2.24951724 +1 3 6 3 8 -3061.31445083 3061.36801076 -9465.42223101 +1 1 7 1 1 -0.10711987 -0.01071199 -5.12032972 +1 1 7 1 2 -9468.71081098 0.10711987 2.99935632 +1 1 7 1 3 -0.00000000 -0.00000000 0.53559934 +1 1 7 1 4 9468.73223495 -0.00000000 2.99935632 +1 1 7 1 5 0.05355993 -0.02142397 -0.19281576 +1 1 7 1 6 9470.91748027 0.92123087 -0.85695895 +1 1 7 1 7 -0.02142397 0.03213596 0.44990345 +1 1 7 1 8 -9470.85320835 -0.80339901 -0.84624696 +1 1 7 2 1 -0.00000000 -0.04284795 2957.22607457 +1 1 7 2 2 -3063.56396806 1556.47311373 3075.77563308 +1 1 7 2 3 0.01071199 -0.06427192 -573.32696035 +1 1 7 2 4 3063.56396806 -1556.53738565 3075.68993718 +1 1 7 2 5 -0.00000000 -0.06427192 -2914.26029531 +1 1 7 2 6 -3061.01451519 -1557.18010486 3076.39692831 +1 1 7 2 7 -0.00000000 0.07498391 -11773.68400607 +1 1 7 2 8 3061.03593917 1557.23366480 3076.37550434 +1 1 7 3 1 -1.04977471 2959.47559181 0.04284795 +1 1 7 3 2 -3058.85069385 3075.02579400 1559.60101389 +1 1 7 3 3 0.29993563 -2913.63900007 0.02142397 +1 1 7 3 4 -3058.91496577 3075.04721797 -1559.49389402 +1 1 7 3 5 0.48203941 -574.78379056 -0.00000000 +1 1 7 3 6 3060.60745969 3075.98987281 -1559.06541455 +1 1 7 3 7 -3.06362824 -11773.01986288 0.02142397 +1 1 7 3 8 3060.58603572 3075.97916083 1559.27965428 +1 2 7 1 1 -0.10711987 -0.03213596 -11783.72113775 +1 2 7 1 2 3060.50033982 1561.37920371 3077.55382289 +1 2 7 1 3 0.04284795 0.04284795 -2915.07440631 +1 2 7 1 4 -3060.44677989 -1561.40062768 3077.46812700 +1 2 7 1 5 0.03213596 -0.00000000 -574.65524672 +1 2 7 1 6 3060.82169943 -1557.45861652 3077.57524687 +1 2 7 1 7 0.04284795 -0.09640788 2963.47116291 +1 2 7 1 8 -3060.84312340 1557.54431241 3077.50026296 +1 2 7 2 1 -0.00000000 0.01071199 -2.18524532 +1 2 7 2 2 -888.96636496 0.55702332 2.37806108 +1 2 7 2 3 0.03213596 0.08569589 0.83553497 +1 2 7 2 4 888.97707695 -0.55702332 2.52802890 +1 2 7 2 5 -0.00000000 0.04284795 -1.97100558 +1 2 7 2 6 888.60215741 -0.89980690 0.21423974 +1 2 7 2 7 -0.08569589 -0.00000000 -1.89602167 +1 2 7 2 8 -888.62358139 0.88909491 0.26779967 +1 2 7 3 1 2962.01433270 -2.46375698 -0.12854384 +1 2 7 3 2 89.68075393 539.79844150 -536.49914955 +1 2 7 3 3 -3371.56572605 0.44990345 -0.00000000 +1 2 7 3 4 89.60577003 539.69132163 536.62769339 +1 2 7 3 5 -2914.09961550 0.04284795 -0.00000000 +1 2 7 3 6 89.63790599 -537.97740374 -536.15636597 +1 2 7 3 7 2965.29220067 -1.54252611 0.04284795 +1 2 7 3 8 89.55221009 -538.00953970 536.02782213 +1 3 7 1 1 -1.77818982 -11783.09984251 -0.00000000 +1 3 7 1 2 3062.98552077 3079.58910040 1556.38741783 +1 3 7 1 3 0.77126305 -573.54120009 0.08569589 +1 3 7 1 4 3062.95338481 3079.65337232 -1556.38741783 +1 3 7 1 5 -0.80339901 -2915.58858168 0.14996782 +1 3 7 1 6 -3061.20733096 3076.65401600 -1557.30864870 +1 3 7 1 7 -1.71391790 2959.94691923 0.02142397 +1 3 7 1 8 -3061.16448301 3076.60045606 1557.14796890 +1 3 7 2 1 2960.34326275 -1.67106995 -0.01071199 +1 3 7 2 2 91.99454309 -534.93519947 538.25591539 +1 3 7 2 3 -2914.64592683 0.72841511 -0.00000000 +1 3 7 2 4 91.96240713 -534.91377550 -538.06309963 +1 3 7 2 5 -3373.75097137 -1.11404663 0.08569589 +1 3 7 2 6 90.36632109 535.96355021 537.76316400 +1 3 7 2 7 2963.53543483 -0.08569589 0.02142397 +1 3 7 2 8 90.36632109 535.98497418 -537.92384380 +1 3 7 3 1 -0.02142397 -0.00000000 4.86324203 +1 3 7 3 2 -890.89452260 -0.10711987 -2.91366042 +1 3 7 3 3 -0.03213596 -0.04284795 2.18524532 +1 3 7 3 4 890.90523459 0.17139179 -2.82796453 +1 3 7 3 5 0.02142397 0.04284795 -2.48518095 +1 3 7 3 6 889.00921291 -0.14996782 1.97100558 +1 3 7 3 7 0.02142397 -0.04284795 -2.76369261 +1 3 7 3 8 -888.96636496 0.13925583 1.91744565 +1 1 8 1 1 -74116.62266810 72002.53707873 72009.10352667 +1 1 8 1 2 9473.05987764 -3064.52804688 -3065.97416511 +1 1 8 1 3 1.28543842 -538.62012295 -1558.87259878 +1 1 8 1 4 -0.41776749 1558.14418368 535.68503855 +1 1 8 1 5 1.00692676 -1557.63000831 -539.62704971 +1 1 8 1 6 -0.41776749 536.77766121 1556.98728910 +1 1 8 1 7 -9466.52556566 3061.68937036 3061.34658679 +1 1 8 1 8 74108.63152590 -71998.39153982 -71998.71289942 +1 1 8 2 1 67015.38949550 -72015.88421435 -80797.08899711 +1 1 8 2 2 3066.00630107 889.36270848 -95.13315524 +1 1 8 2 3 0.56773530 -538.55585103 3077.31815918 +1 1 8 2 4 1561.91480305 1.67106995 -3081.79576969 +1 1 8 2 5 891.70863360 3053.51612440 86.14579827 +1 1 8 2 6 -536.63840538 0.57844729 -3076.95395163 +1 1 8 2 7 -0.44990345 1557.65143228 3076.38621633 +1 1 8 2 8 -71998.52008366 67051.57458708 80811.05742797 +1 1 8 3 1 67029.10083867 -80800.48469694 -72003.19050993 +1 1 8 3 2 3063.39257627 -93.01218185 888.82710914 +1 1 8 3 3 888.99850093 90.55913686 3062.74985706 +1 1 8 3 4 -540.04481720 -3079.41770861 0.81411100 +1 1 8 3 5 -1.53181412 3074.76870631 -536.79908518 +1 1 8 3 6 1557.69428023 -3077.27531124 0.32135961 +1 1 8 3 7 -0.64271921 3076.84683176 1559.45104607 +1 1 8 3 8 -71997.02040550 80807.99379973 67027.80468826 +1 2 8 1 1 72004.28313259 -67024.49468432 -80796.04993438 +1 2 8 1 2 -1.73534187 -1561.94693901 -3081.76363373 +1 2 8 1 3 537.80601195 -0.38563153 3077.48955097 +1 2 8 1 4 -889.36270848 -3066.02772504 -95.10101928 +1 2 8 1 5 -1553.37734953 -0.27851166 3070.09828004 +1 2 8 1 6 -0.62129524 536.64911737 -3076.95395163 +1 2 8 1 7 -3061.31445083 -889.93044378 90.81622454 +1 2 8 1 8 -67035.54945475 72006.25413817 80811.43234751 +1 2 8 2 1 -72014.20243241 74114.51240669 72015.47715885 +1 2 8 2 2 -1558.14418368 0.41776749 535.66361458 +1 2 8 2 3 537.76316400 -0.06427192 -1557.28722473 +1 2 8 2 4 3064.53875887 -9473.01702969 -3065.98487709 +1 2 8 2 5 -3057.19033589 9458.79151115 3054.95153063 +1 2 8 2 6 -536.78837320 0.42847947 1557.00871307 +1 2 8 2 7 1556.85874526 0.08569589 -538.25591539 +1 2 8 2 8 72007.26106493 -74101.13313511 -72001.42303210 +1 2 8 3 1 -80801.50233569 67032.10019499 72003.81180517 +1 2 8 3 2 -3079.43913258 -540.07695316 -0.84624696 +1 2 8 3 3 90.75195262 889.07348483 -3062.79270501 +1 2 8 3 4 -93.02289383 3063.43542422 -888.81639715 +1 2 8 3 5 3072.60488497 -1.92815763 -1561.42205165 +1 2 8 3 6 -3077.27531124 1557.69428023 -0.29993563 +1 2 8 3 7 3077.81091058 0.83553497 536.22063789 +1 2 8 3 8 80809.98622928 -72001.19808037 -67025.84439466 +1 3 8 1 1 72007.94663209 -80795.42863915 -67033.99621666 +1 3 8 1 2 -2.82796453 -3080.16754769 -1557.09440897 +1 3 8 1 3 -1558.07991176 3077.55382289 -0.34278358 +1 3 8 1 4 -1.44611823 -3078.15369416 538.32018732 +1 3 8 1 5 536.27419783 3076.69686395 -1.90673366 +1 3 8 1 6 -891.52652982 -92.55156641 -3061.16448301 +1 3 8 1 7 -3061.93574606 91.88742323 -890.49817908 +1 3 8 1 8 -67028.43669548 80800.18476131 72006.76831354 +1 3 8 2 1 -80797.49605261 72014.83443964 67032.65721830 +1 3 8 2 2 -3078.11084621 -1.41398226 -538.19164347 +1 3 8 2 3 3077.30744720 -1559.79382965 0.17139179 +1 3 8 2 4 -3080.12469974 -2.82796453 1557.11583294 +1 3 8 2 5 89.78787380 -3058.57218219 892.22280897 +1 3 8 2 6 -92.57299038 -891.53724181 3061.20733096 +1 3 8 2 7 3077.12534342 536.01711014 0.65343120 +1 3 8 2 8 80804.13748446 -67036.68492536 -72005.84708267 +1 3 8 3 1 -72001.69083177 72000.93028070 74101.21883100 +1 3 8 3 2 -1559.32250223 536.32775776 2.39948506 +1 3 8 3 3 -3063.21047250 3062.49276938 9469.61061787 +1 3 8 3 4 -536.31704577 1559.34392621 2.33521313 +1 3 8 3 5 536.70267730 -1558.55123918 3.51353169 +1 3 8 3 6 3061.33587480 -3061.31445083 -9465.39009505 +1 3 8 3 7 1556.79447333 -538.44873116 1.58537405 +1 3 8 3 8 72005.69711485 -72000.76960090 -74115.17654987 +2 1 1 1 1 -74175.43147592 -72109.42128355 -72075.29289344 +2 1 1 1 2 74174.16746147 72107.66451771 72072.25068917 +2 1 1 1 3 -0.44990345 538.62012295 1558.31557547 +2 1 1 1 4 -0.38563153 -538.98433050 -1559.19395839 +2 1 1 1 5 -0.36420755 1559.72955773 539.00575447 +2 1 1 1 6 -0.13925583 -1560.62936463 -539.24141818 +2 1 1 1 7 -9470.57469669 -3063.15691256 -3059.60053293 +2 1 1 1 8 9472.99560572 3066.29552471 3063.75678383 +2 1 1 2 1 -72107.50383790 -67126.57991903 -80913.63541407 +2 1 1 2 2 67142.32653970 72094.79942150 80912.69275923 +2 1 1 2 3 -539.35925004 0.79268703 3074.21168300 +2 1 1 2 4 -0.52488736 538.66297089 -3074.38307479 +2 1 1 2 5 1559.23680634 1.79961379 3080.44605934 +2 1 1 2 6 888.25937383 -3063.39257627 -93.13001370 +2 1 1 2 7 3058.18655066 -887.94872621 91.65175952 +2 1 1 2 8 -0.68556716 -1557.99421586 -3077.84304654 +2 1 1 3 1 -72074.51091840 -80912.05004002 -67095.51515716 +2 1 1 3 2 67095.21522152 80902.98769914 72062.55634107 +2 1 1 3 3 1560.06162932 3074.55446658 0.53559934 +2 1 1 3 4 893.72248713 -83.25356182 -3055.63709779 +2 1 1 3 5 -536.00639816 3081.32444227 0.25708768 +2 1 1 3 6 -1.09262266 -3079.24631682 536.52057352 +2 1 1 3 7 3063.60681601 94.22263636 -889.20202868 +2 1 1 3 8 -1.11404663 -3078.61430959 -1559.44033409 +2 2 1 1 1 -67136.54206680 -72095.02437322 -80912.89628698 +2 2 1 1 2 72109.26060375 67119.83136731 80913.26049453 +2 2 1 1 3 0.13925583 -537.76316400 3074.46877068 +2 2 1 1 4 538.63083493 -0.51417537 -3074.34022684 +2 2 1 1 5 -888.67714132 3068.44863407 94.67253981 +2 2 1 1 6 -1558.04777580 -0.70699113 -3077.81091058 +2 2 1 1 7 -1.32828637 1557.44790453 3075.85061698 +2 2 1 1 8 -3063.41400025 888.24866185 -93.06574178 +2 2 1 2 1 -72096.40621952 -74176.12775507 -72067.75165469 +2 2 1 2 2 72096.74900310 74179.82339053 72069.50842054 +2 2 1 2 3 539.56277779 0.83553497 1560.05091734 +2 2 1 2 4 -538.98433050 -0.36420755 -1559.23680634 +2 2 1 2 5 -3068.15941042 -9477.25897649 -3066.69186823 +2 2 1 2 6 3066.30623670 9473.01702969 3063.77820780 +2 2 1 2 7 1561.42205165 0.23566371 539.62704971 +2 2 1 2 8 -1560.67221257 -0.13925583 -539.17714626 +2 2 1 3 1 -80910.72175365 -72067.80521463 -67097.01483532 +2 2 1 3 2 80903.07339503 67084.37469083 72063.07051644 +2 2 1 3 3 3074.41521075 1558.65835905 0.38563153 +2 2 1 3 4 -83.23213785 893.78675905 -3055.76564164 +2 2 1 3 5 95.28312306 3067.72021896 -887.89516628 +2 2 1 3 6 -3078.63573357 -1.09262266 -1559.47247005 +2 2 1 3 7 3079.16062092 -534.67811179 0.29993563 +2 2 1 3 8 -3079.22489284 -1.09262266 536.44558962 +2 3 1 1 1 -67090.71618705 -80900.89886170 -72062.63132498 +2 3 1 1 2 72070.67602710 80911.55728862 67094.80816602 +2 3 1 1 3 -893.60465527 83.31783374 3055.82991356 +2 3 1 1 4 -1559.30107826 -3074.68301042 -0.51417537 +2 3 1 1 5 0.05355993 3080.78884292 -536.26348584 +2 3 1 1 6 535.98497418 -3081.15305048 0.38563153 +2 3 1 1 7 2.59230082 3075.90417692 1559.79382965 +2 3 1 1 8 -3065.68494146 -94.96176345 888.66642933 +2 3 1 2 1 -80900.00976679 -67087.20265536 -72062.08501365 +2 3 1 2 2 80911.66440849 72064.10957916 67096.63991578 +2 3 1 2 3 82.79294639 -893.25115971 3055.78706561 +2 3 1 2 4 -3074.65087446 -1559.34392621 -0.51417537 +2 3 1 2 5 3079.28916476 2.07812545 1557.43719255 +2 3 1 2 6 -94.96176345 -3065.72778941 888.64500536 +2 3 1 2 7 3076.95395163 3.31000394 -536.24206187 +2 3 1 2 8 -3081.13162650 535.98497418 0.33207159 +2 3 1 3 1 -72064.22741102 -72064.68802645 -74113.93395940 +2 3 1 3 2 72063.41330002 72066.18770461 74113.30195217 +2 3 1 3 3 -3055.08007448 -3055.48712998 -9478.78007862 +2 3 1 3 4 3055.25146627 3055.23004229 9478.69438273 +2 3 1 3 5 539.02717845 1555.42333902 -1.73534187 +2 3 1 3 6 -538.32018732 -1556.40884181 2.84938850 +2 3 1 3 7 1556.32314591 538.10594758 -3.12790016 +2 3 1 3 8 -1556.36599386 -538.32018732 2.84938850 +2 1 2 1 1 74168.12590089 67132.22513610 67087.80252662 +2 1 2 1 2 112.32589414 -216.86417384 -124.98746260 +2 1 2 1 3 -74173.55687822 -67116.61777126 67078.07604256 +2 1 2 1 4 -1.77818982 5.63450508 6.59858390 +2 1 2 1 5 -74164.99800073 67112.22585665 -67087.88822252 +2 1 2 1 6 0.67485517 7.73405451 8.56958948 +2 1 2 1 7 74056.16421430 -66920.70624370 -66963.33995138 +2 1 2 1 8 2.95650837 -3.65278752 -4.61686633 +2 1 2 2 1 72106.96823856 72098.22725729 80899.65627123 +2 1 2 2 2 -223.10926218 223.90194920 -329274.64983068 +2 1 2 2 3 -72098.58075286 -72107.33244611 80900.26685448 +2 1 2 2 4 0.94265484 -0.83553497 11785.47790359 +2 1 2 2 5 72111.43513708 -72111.33872920 80901.83080456 +2 1 2 2 6 2.34592512 0.06427192 -2959.91478327 +2 1 2 2 7 -71899.86268474 71899.95909263 80707.23685139 +2 1 2 2 8 -0.08569589 -2.36734909 -2959.85051135 +2 1 2 3 1 72073.58968753 80913.77466990 72065.05223400 +2 1 2 3 2 -129.25083337 -329284.87977812 109.93712107 +2 1 2 3 3 72069.91547604 80913.33547844 -72064.80585831 +2 1 2 3 4 -4.45618653 -2968.84858031 8.54816551 +2 1 2 3 5 -72080.29539130 80898.51008863 -72064.18456307 +2 1 2 3 6 6.60929589 11783.18553841 1.22116650 +2 1 2 3 7 -71939.00428470 80702.24506551 71944.24244628 +2 1 2 3 8 2.91366042 -2957.46173828 -0.27851166 +2 2 2 1 1 72107.07535843 72098.53790491 80899.89193494 +2 2 2 1 2 -221.71670389 221.02042474 -329275.43180572 +2 2 2 1 3 -72098.35580113 -72107.09678240 80899.68840719 +2 2 2 1 4 0.74983908 -1.32828637 11785.19939193 +2 2 2 1 5 72110.97452164 -72110.84597780 80901.35947714 +2 2 2 1 6 1.10333465 -1.79961379 -2958.58649690 +2 2 2 1 7 -71900.09834845 71904.34029525 80707.24756337 +2 2 2 1 8 0.14996782 -2.78511658 -2959.80766341 +2 2 2 2 1 67116.29641165 74173.12839875 67077.72254699 +2 2 2 2 2 217.71042080 -112.00453454 -125.21241433 +2 2 2 2 3 -67132.45008783 -74168.27586870 67088.12388623 +2 2 2 2 4 -5.64521707 1.84246174 6.72712774 +2 2 2 2 5 -67112.09731280 74164.95515278 -67087.80252662 +2 2 2 2 6 3.51353169 -3.04220427 -4.62757832 +2 2 2 2 7 66920.43844403 -74055.76787078 -66963.14713561 +2 2 2 2 8 -7.81975040 -0.80339901 8.59101346 +2 2 2 3 1 80913.27120652 72067.65524681 72064.59161857 +2 2 2 3 2 -329283.26226811 -127.06558805 -110.50485638 +2 2 2 3 3 80914.07460553 72073.86819919 -72060.86384715 +2 2 2 3 4 -2970.25185059 -5.52738522 -10.28350738 +2 2 2 3 5 80898.42439274 -72080.25254335 72063.94889936 +2 2 2 3 6 -2958.29727326 4.04913103 -0.66414318 +2 2 2 3 7 80702.52357717 -71939.23994842 -71944.44597403 +2 2 2 3 8 11783.42120212 6.55573595 -1.66035796 +2 3 2 1 1 72073.86819919 80913.86036579 72065.34145765 +2 3 2 1 2 -125.65160579 -329281.95540571 105.93083799 +2 3 2 1 3 72066.89469574 80912.24285578 -72059.55698475 +2 3 2 1 4 -5.29172151 -2970.13401873 6.57715993 +2 3 2 1 5 -72080.32752726 80898.31727287 -72064.14171512 +2 3 2 1 6 6.70570377 11783.33550622 1.04977471 +2 3 2 1 7 -71941.01813823 80701.88085796 71944.09247846 +2 3 2 1 8 4.82039408 -2957.61170610 0.61058325 +2 3 2 2 1 80913.22835857 72069.79764418 72064.60233056 +2 3 2 2 2 -329283.45508387 -126.72280447 -111.57605506 +2 3 2 2 3 80914.07460553 72071.57583400 -72060.90669509 +2 3 2 2 4 -2970.28398655 -5.46311330 -10.45489917 +2 3 2 2 5 80898.46724069 -72080.12399951 72063.75608360 +2 3 2 2 6 -2958.27584929 3.96343514 0.59987126 +2 3 2 2 7 80702.69496896 -71939.53988405 -71944.78875761 +2 3 2 2 8 11783.37835417 6.53431198 -1.54252611 +2 3 2 3 1 67092.85858442 67093.52272760 74101.72229438 +2 3 2 3 2 105.49164653 -104.55970367 5.58094515 +2 3 2 3 3 -67093.96191906 -67093.15852005 74102.09721392 +2 3 2 3 4 -2.28165320 2.35663711 -4.45618653 +2 3 2 3 5 -67082.33941333 67082.38226127 -74073.73187274 +2 3 2 3 6 -0.74983908 -1.71391790 -4.79897011 +2 3 2 3 7 66979.46149159 -66979.44006762 -74121.37879026 +2 3 2 3 8 1.69249392 0.78197504 -4.72398620 +2 1 3 1 1 -0.81411100 -539.53064183 1559.94379747 +2 1 3 1 2 -74179.75911861 -72096.84541098 72069.47628458 +2 1 3 1 3 74176.10633109 72096.36337158 -72067.86948655 +2 1 3 1 4 0.36420755 538.96290653 -1559.23680634 +2 1 3 1 5 9477.30182443 3068.12727446 -3066.67044425 +2 1 3 1 6 0.10711987 1560.65078860 -539.11287434 +2 1 3 1 7 -0.29993563 -1561.43276364 539.63776170 +2 1 3 1 8 -9473.01702969 -3066.29552471 3063.76749581 +2 1 3 2 1 537.82743592 -0.10711987 3074.36165081 +2 1 3 2 2 -67119.78851937 -72109.14277189 80913.09981473 +2 1 3 2 3 72095.00294925 67136.52064283 -80912.71418320 +2 1 3 2 4 0.51417537 -538.70581884 -3074.34022684 +2 1 3 2 5 -3068.48077003 888.68785331 94.62969186 +2 1 3 2 6 -888.27008582 3063.37115230 -93.15143767 +2 1 3 2 7 -1557.45861652 1.38184630 3075.86132897 +2 1 3 2 8 0.64271921 1558.00492785 -3077.81091058 +2 1 3 3 1 1558.67978302 3074.40449876 -0.31064762 +2 1 3 3 2 67084.31041891 80902.81630735 -72062.98482054 +2 1 3 3 3 -72067.65524681 -80910.63605775 67096.88629147 +2 1 3 3 4 893.78675905 -83.23213785 3055.74421766 +2 1 3 3 5 3067.72021896 95.31525902 887.93801423 +2 1 3 3 6 -1.03906272 -3079.24631682 -536.52057352 +2 1 3 3 7 -534.67811179 3079.13919695 -0.26779967 +2 1 3 3 8 -1.04977471 -3078.61430959 1559.45104607 +2 2 3 1 1 -0.81411100 539.36996203 3074.26524293 +2 2 3 1 2 -72094.99223726 -67142.54077944 80912.70347121 +2 2 3 1 3 67126.66561492 72107.61095777 -80913.99962162 +2 2 3 1 4 -538.63083493 0.53559934 -3074.29737889 +2 2 3 1 5 -1.76747783 -1559.27965428 3080.53175524 +2 2 3 1 6 1557.99421586 0.70699113 -3077.81091058 +2 2 3 1 7 888.00228615 -3058.19726265 91.65175952 +2 2 3 1 8 3063.43542422 -888.25937383 -93.09787774 +2 2 3 2 1 -538.62012295 0.42847947 1558.30486348 +2 2 3 2 2 -72107.71807764 -74174.33885326 72072.29353712 +2 2 3 2 3 72109.50697945 74175.47432387 -72075.34645337 +2 2 3 2 4 538.97361851 0.36420755 -1559.19395839 +2 2 3 2 5 -1559.68670978 0.34278358 538.98433050 +2 2 3 2 6 -3066.29552471 -9473.05987764 3063.77820780 +2 2 3 2 7 3063.11406462 9470.57469669 -3059.60053293 +2 2 3 2 8 1560.62936463 0.12854384 -539.20928222 +2 2 3 3 1 3074.55446658 1560.10447727 -0.53559934 +2 2 3 3 2 80902.88057927 67095.07596570 -72062.42779723 +2 2 3 3 3 -80911.90007220 -72074.42522250 67095.40803729 +2 2 3 3 4 -83.26427381 893.74391110 3055.74421766 +2 2 3 3 5 3081.32444227 -535.96355021 -0.36420755 +2 2 3 3 6 -3078.63573357 -1.02835074 1559.47247005 +2 2 3 3 7 94.22263636 3063.62823999 889.23416464 +2 2 3 3 8 -3079.26774079 -1.04977471 -536.49914955 +2 3 3 1 1 -893.35827957 82.95362619 -3055.86204952 +2 3 3 1 2 72064.09886718 80909.45773920 -67096.52208392 +2 3 3 1 3 -67086.40996833 -80898.98141606 72061.18520675 +2 3 3 1 4 -1559.30107826 -3074.68301042 0.47132742 +2 3 3 1 5 2.18524532 3079.41770861 -1557.30864870 +2 3 3 1 6 535.95283822 -3081.13162650 -0.36420755 +2 3 3 1 7 2.63514877 3077.89660647 536.88478108 +2 3 3 1 8 -3065.72778941 -94.96176345 -888.60215741 +2 3 3 2 1 83.25356182 -893.61536726 -3055.86204952 +2 3 3 2 2 80911.12880915 72070.21541167 -67094.42253450 +2 3 3 2 3 -80900.47038223 -67090.39482744 72062.25640544 +2 3 3 2 4 -3074.67229843 -1559.34392621 0.47132742 +2 3 3 2 5 3080.84240286 0.10711987 536.26348584 +2 3 3 2 6 -94.96176345 -3065.70636543 -888.62358139 +2 3 3 2 7 3075.90417692 2.62443678 -1559.80454164 +2 3 3 2 8 -3081.13162650 535.95283822 -0.34278358 +2 3 3 3 1 3055.44428203 3055.24075428 -9478.87648650 +2 3 3 3 2 -72065.91990494 -72065.25576176 74112.89489667 +2 3 3 3 3 72065.13792990 72064.93440215 -74114.18033509 +2 3 3 3 4 -3055.29431421 -3055.29431421 9478.69438273 +2 3 3 3 5 -1555.32693114 -538.83436268 -1.73534187 +2 3 3 3 6 538.34161129 1556.38741783 2.76369261 +2 3 3 3 7 -538.72724282 -1555.42333902 -2.48518095 +2 3 3 3 8 1556.36599386 538.34161129 2.78511658 +2 1 4 1 1 -0.04284795 0.04284795 897.62165034 +2 1 4 1 2 -0.68556716 0.47132742 -5.48453727 +2 1 4 1 3 -0.06427192 0.12854384 897.66449829 +2 1 4 1 4 0.81411100 -0.44990345 -5.59165714 +2 1 4 1 5 -0.00000000 -0.00000000 -894.83653376 +2 1 4 1 6 -0.07498391 -0.32135961 -1.19974253 +2 1 4 1 7 0.04284795 -0.00000000 -886.58830388 +2 1 4 1 8 -0.00000000 0.27851166 -1.17831855 +2 1 4 2 1 -538.68439487 538.70581884 -83.01789811 +2 1 4 2 2 6.76997569 -1.42469425 -2969.41631561 +2 1 4 2 3 538.57727500 -538.59869897 -80.72553292 +2 1 4 2 4 -2.81725254 5.44168932 -2969.55557144 +2 1 4 2 5 -540.24834495 -540.24834495 -83.12501798 +2 1 4 2 6 -0.27851166 -0.06427192 3371.85494970 +2 1 4 2 7 535.55649471 535.55649471 -99.79286952 +2 1 4 2 8 0.98550279 0.85695895 2913.94964769 +2 1 4 3 1 -1559.83667760 -3074.96152208 -3058.42221437 +2 1 4 3 2 8.82667717 11785.60644743 6.17010443 +2 1 4 3 3 -1559.79382965 -3074.87582618 3058.40079040 +2 1 4 3 4 -5.74162495 -2970.54107423 0.85695895 +2 1 4 3 5 1560.82218039 -3075.15433784 3060.02901240 +2 1 4 3 6 -0.81411100 2915.31007002 -1.07119869 +2 1 4 3 7 1556.38741783 -3078.66786953 -3064.48519893 +2 1 4 3 8 -0.02142397 573.20912850 -1.28543842 +2 2 4 1 1 538.62012295 -538.70581884 -83.03932209 +2 2 4 1 2 2.20666929 -4.78825812 -2970.38039443 +2 2 4 1 3 -538.55585103 538.66297089 -80.89692471 +2 2 4 1 4 -6.07369655 0.92123087 -2970.34825847 +2 2 4 1 5 540.26976892 540.24834495 -80.89692471 +2 2 4 1 6 -0.94265484 -0.66414318 2913.74611994 +2 2 4 1 7 -535.66361458 -535.62076663 -99.94283734 +2 2 4 1 8 0.17139179 -0.06427192 3371.72640585 +2 2 4 2 1 -0.00000000 0.02142397 897.60022637 +2 2 4 2 2 -0.44990345 0.69627915 -5.50596124 +2 2 4 2 3 0.06427192 0.08569589 897.57880239 +2 2 4 2 4 0.51417537 -0.85695895 -5.46311330 +2 2 4 2 5 0.04284795 0.02142397 -895.00792555 +2 2 4 2 6 -0.26779967 -0.00000000 -1.19974253 +2 2 4 2 7 -0.04284795 0.08569589 -886.48118401 +2 2 4 2 8 0.27851166 -0.06427192 -1.29615041 +2 2 4 3 1 -3074.87582618 -1559.92237350 -3058.22939861 +2 2 4 3 2 11785.64929538 8.88023710 -6.13796847 +2 2 4 3 3 -3074.85440221 -1559.79382965 3058.35794245 +2 2 4 3 4 -2970.40181840 -5.69877701 -0.77126305 +2 2 4 3 5 -3075.21860976 1560.77933244 -3059.77192472 +2 2 4 3 6 573.08058465 -0.06427192 1.19974253 +2 2 4 3 7 -3078.62502158 1556.51596168 3064.54947085 +2 2 4 3 8 2915.22437412 -0.71770312 1.04977471 +2 3 4 1 1 -1559.75098171 -3074.94009810 3058.29367053 +2 3 4 1 2 -5.67735303 -2970.50893827 -0.72841511 +2 3 4 1 3 -1559.77240568 -3074.81155426 -3058.31509451 +2 3 4 1 4 8.76240525 11785.60644743 -6.14868045 +2 3 4 1 5 1560.75790847 -3075.21860976 -3059.81477267 +2 3 4 1 6 -0.04284795 573.19841651 1.24259047 +2 3 4 1 7 1556.49453770 -3078.73214145 3064.46377496 +2 3 4 1 8 -0.74983908 2915.35291796 1.03906272 +2 3 4 2 1 -3074.96152208 -1559.81525363 3058.29367053 +2 3 4 2 2 -2970.47680231 -5.67735303 0.63200722 +2 3 4 2 3 -3074.94009810 -1559.79382965 -3058.22939861 +2 3 4 2 4 11785.60644743 8.84810114 6.10583251 +2 3 4 2 5 -3075.19718579 1560.75790847 3059.81477267 +2 3 4 2 6 2915.33149399 -0.79268703 -1.09262266 +2 3 4 2 7 -3078.66786953 1556.51596168 -3064.46377496 +2 3 4 2 8 573.19841651 0.04284795 -1.30686240 +2 3 4 3 1 -0.04284795 -0.02142397 9480.08694102 +2 3 4 3 2 9.46939638 -9.45868439 -6.74855172 +2 3 4 3 3 -0.04284795 -0.02142397 9480.27975678 +2 3 4 3 4 -9.41583644 9.55509227 -6.66285582 +2 3 4 3 5 0.04284795 0.04284795 -9484.05037615 +2 3 4 3 6 -1.27472644 -1.32828637 -2.61372479 +2 3 4 3 7 -0.04284795 0.04284795 -9457.20613710 +2 3 4 3 8 1.24259047 1.33899836 -2.63514877 +2 1 5 1 1 -1.37113432 1559.48318203 -536.74552525 +2 1 5 1 2 -74173.56759021 72113.86675809 -72082.25568489 +2 1 5 1 3 9477.44108026 -3068.12727446 3067.24889154 +2 1 5 1 4 0.21423974 -540.84821621 1560.26515707 +2 1 5 1 5 74163.21981091 -72101.89075679 72063.22048425 +2 1 5 1 6 -1.04977471 -1561.03642013 541.72659913 +2 1 5 1 7 -1.13547061 538.39517122 -1558.10133573 +2 1 5 1 8 -9463.80472100 3060.09328432 -3055.18719435 +2 1 5 2 1 1560.02949336 -0.37491954 3080.53175524 +2 1 5 2 2 67117.81751378 -72109.50697945 80902.50565973 +2 1 5 2 3 3068.91996149 888.06655807 94.88677954 +2 1 5 2 4 -0.52488736 -540.18407303 -3074.68301042 +2 1 5 2 5 -72100.32680671 67159.12293509 -80923.66183376 +2 1 5 2 6 889.54481225 3054.26596348 -86.85278940 +2 1 5 2 7 -533.90684873 -3.63136354 3077.32887117 +2 1 5 2 8 -1.56395008 1552.14547104 -3070.03400812 +2 1 5 3 1 537.93455579 3080.68172306 -0.39634351 +2 1 5 3 2 -67092.28013713 80902.75203543 -72062.01002974 +2 1 5 3 3 -3066.95966790 94.73681173 888.06655807 +2 1 5 3 4 -891.08733836 -81.19686035 3057.41528761 +2 1 5 3 5 72059.81407243 -80921.73367613 67085.81009707 +2 1 5 3 6 3.05291625 -3077.59667084 -534.78523165 +2 1 5 3 7 -1556.53738565 3074.92938612 3.52424367 +2 1 5 3 8 6.08440853 -3072.58346099 1562.17189073 +2 2 5 1 1 -888.08798204 -3068.91996149 94.89749153 +2 2 5 1 2 72109.53911541 -67117.89249769 80902.48423576 +2 2 5 1 3 0.39634351 -1560.05091734 3080.57460319 +2 2 5 1 4 540.16264905 0.55702332 -3074.64016247 +2 2 5 1 5 -67159.14435906 72100.39107863 -80923.83322555 +2 2 5 1 6 -1552.10262309 1.60679803 -3070.05543210 +2 2 5 1 7 3.64207553 533.90684873 3077.29673521 +2 2 5 1 8 -3054.30881142 -889.57694822 -86.90634934 +2 2 5 2 1 3068.10585049 -9477.40894430 3067.23817955 +2 2 5 2 2 -72113.93103002 74173.47118233 -72082.21283694 +2 2 5 2 3 -1559.47247005 1.43540624 -536.73481326 +2 2 5 2 4 540.79465628 -0.23566371 1560.30800502 +2 2 5 2 5 72101.93360474 -74163.28408283 72063.02766849 +2 2 5 2 6 -3060.05043638 9463.82614497 -3055.18719435 +2 2 5 2 7 -538.38445924 1.13547061 -1558.10133573 +2 2 5 2 8 1560.99357218 1.01763875 541.66232721 +2 2 5 3 1 94.71538776 -3066.95966790 -888.12011800 +2 2 5 3 2 80902.81630735 -67092.44081693 72062.11714961 +2 2 5 3 3 3080.68172306 537.91313182 0.36420755 +2 2 5 3 4 -81.17543637 -891.10876234 -3057.45813556 +2 2 5 3 5 -80921.89435593 72059.87834435 -67085.87436899 +2 2 5 3 6 -3072.57274901 6.08440853 -1562.15046676 +2 2 5 3 7 3074.94009810 -1556.53738565 -3.53495566 +2 2 5 3 8 -3077.61809482 3.05291625 534.84950358 +2 3 5 1 1 -0.94265484 3079.87832404 538.45944314 +2 3 5 1 2 -72076.28910821 80899.54915136 -67091.74453778 +2 3 5 1 3 -0.27851166 3080.51033127 -1555.12340339 +2 3 5 1 4 1560.82218039 -3074.44734671 0.47132742 +2 3 5 1 5 67094.89386192 -80910.01476251 72055.57212564 +2 3 5 1 6 -530.70396466 -3076.84683176 0.51417537 +2 3 5 1 7 889.63050815 93.59062914 -3056.76185641 +2 3 5 1 8 3062.81412898 -92.15522290 -891.29086611 +2 3 5 2 1 3080.51033127 -0.26779967 1555.09126742 +2 3 5 2 2 80899.49559142 -72076.25697225 67091.74453778 +2 3 5 2 3 3079.86761205 -1.00692676 -538.44873116 +2 3 5 2 4 -3074.42592273 1560.86502834 -0.42847947 +2 3 5 2 5 -80910.05761046 67094.85101397 -72055.33646193 +2 3 5 2 6 -92.11237495 3062.77128104 891.32300207 +2 3 5 2 7 93.60134112 889.66264411 3056.79399237 +2 3 5 2 8 -3076.86825574 -530.67182870 -0.50346338 +2 3 5 3 1 -536.90620505 1557.46932851 -2.82796453 +2 3 5 3 2 -72066.43408031 72066.63760806 -74083.89754826 +2 3 5 3 3 -1557.42648056 536.90620505 -2.82796453 +2 3 5 3 4 -3056.79399237 3057.11535198 -9483.08629733 +2 3 5 3 5 72059.12850528 -72061.37802251 74120.17904773 +2 3 5 3 6 540.67682442 -1552.85246217 -6.34149622 +2 3 5 3 7 3064.05671946 -3064.05671946 9465.69003069 +2 3 5 3 8 1553.62372523 -539.85200144 -6.90923152 +2 1 6 1 1 0.12854384 886.41691209 -1.15689458 +2 1 6 1 2 0.08569589 2.37806108 8.83738915 +2 1 6 1 3 -0.21423974 -886.45976004 -1.19974253 +2 1 6 1 4 0.08569589 -0.04284795 -0.29993563 +2 1 6 1 5 -0.47132742 891.28015412 3.34213990 +2 1 6 1 6 0.20352775 -2.29236519 -8.86952511 +2 1 6 1 7 -0.08569589 -891.30157810 -1.09262266 +2 1 6 1 8 0.19281576 0.04284795 0.33207159 +2 1 6 2 1 -1561.16496397 -3065.98487709 -3079.41770861 +2 1 6 2 2 6.98421543 -0.08569589 11784.99586418 +2 1 6 2 3 1561.14354000 3065.92060517 -3079.22489284 +2 1 6 2 4 -0.18210378 -0.10711987 2915.26722207 +2 1 6 2 5 -1560.37227694 3055.76564164 -3077.03964753 +2 1 6 2 6 -2.32450115 3.83489129 -2964.86372120 +2 1 6 2 7 1555.18767531 -3059.10778153 -3074.06171518 +2 1 6 2 8 0.79268703 -0.23566371 574.52670288 +2 1 6 3 1 -539.04860242 -90.73052865 536.58484545 +2 1 6 3 2 6.42719211 -2961.02882991 -0.50346338 +2 1 6 3 3 -539.09145037 -90.75195262 -536.54199750 +2 1 6 3 4 -0.80339901 3371.85494970 -0.53559934 +2 1 6 3 5 542.28362245 -86.98133325 -534.31390423 +2 1 6 3 6 -5.13104170 -2964.30669788 -1.39255829 +2 1 6 3 7 535.36367894 -92.25163078 537.76316400 +2 1 6 3 8 -0.00000000 2914.30314325 -1.11404663 +2 2 6 1 1 -1558.52981520 3063.30688038 -3078.06799826 +2 2 6 1 2 1.75676584 4.67042627 -2955.29791694 +2 2 6 1 3 1558.44411931 -3063.19976051 -3078.15369416 +2 2 6 1 4 -0.67485517 -0.06427192 573.66974393 +2 2 6 1 5 -1552.65964641 -3060.92881930 -3072.66915689 +2 2 6 1 6 -6.28793628 0.74983908 11771.78798439 +2 2 6 1 7 1557.77997612 3055.33716216 -3075.58281731 +2 2 6 1 8 0.08569589 0.12854384 2914.09961550 +2 2 6 2 1 -0.42847947 9471.68874332 -1.97100558 +2 2 6 2 2 -0.02142397 -3.06362824 6.94136748 +2 2 6 2 3 0.44990345 -9471.62447140 -1.97100558 +2 2 6 2 4 -0.81411100 0.10711987 -0.21423974 +2 2 6 2 5 1.17831855 9463.44051345 5.78447290 +2 2 6 2 6 0.01071199 3.14932413 -6.98421543 +2 2 6 2 7 0.36420755 -9463.44051345 -1.94958161 +2 2 6 2 8 -0.79268703 -0.10711987 0.12854384 +2 2 6 3 1 -3078.11084621 3061.63581043 -1559.04399057 +2 2 6 3 2 -2959.50772777 -3.92058719 1.53181412 +2 2 6 3 3 -3078.15369416 3061.59296248 1559.06541455 +2 2 6 3 4 2913.71398398 -0.62129524 1.00692676 +2 2 6 3 5 -3070.37679170 -3054.33023540 -1562.40755445 +2 2 6 3 6 11772.96630295 -4.02770706 1.54252611 +2 2 6 3 7 -3075.56139334 -3061.35729877 1557.35149665 +2 2 6 3 8 574.78379056 1.11404663 1.03906272 +2 3 6 1 1 535.49222279 -94.37260418 -538.34161129 +2 3 6 1 2 5.12032972 -2955.72639641 -2.58158883 +2 3 6 1 3 535.57791868 -94.39402815 538.29876334 +2 3 6 1 4 0.03213596 2915.50288578 -1.28543842 +2 3 6 1 5 -531.78587534 -98.05752765 539.75559355 +2 3 6 1 6 -6.44861609 -2959.05782433 0.83553497 +2 3 6 1 7 -538.77009076 -88.41673949 -536.04924610 +2 3 6 1 8 0.79268703 3374.69362621 -0.55702332 +2 3 6 2 1 -3080.61745113 -3069.39128891 -1556.34456989 +2 3 6 2 2 11786.37771049 8.56958948 -3.54566765 +2 3 6 2 3 -3080.70314703 -3069.43413686 1556.32314591 +2 3 6 2 4 572.99488876 -0.14996782 -1.26401445 +2 3 6 2 5 -3078.08942224 3060.28610009 -1554.73777186 +2 3 6 2 6 -2963.12837933 8.44104564 0.36420755 +2 3 6 2 7 -3073.01194047 3060.07186035 1559.85810157 +2 3 6 2 8 2916.01706115 1.43540624 -0.68556716 +2 3 6 3 1 0.12854384 885.32428943 2.46375698 +2 3 6 3 2 -2.39948506 3.48139573 -2.67799671 +2 3 6 3 3 -0.17139179 -885.36713738 2.48518095 +2 3 6 3 4 1.07119869 -0.08569589 -1.86388571 +2 3 6 3 5 -0.42847947 890.10183557 -7.45554285 +2 3 6 3 6 1.42469425 1.94958161 2.63514877 +2 3 6 3 7 -0.34278358 -896.80753934 2.50660492 +2 3 6 3 8 0.66414318 1.27472644 1.84246174 +2 1 7 1 1 -9469.58919390 3060.51105181 3063.71393588 +2 1 7 1 2 74060.92033646 -71905.42220592 -71940.73962657 +2 1 7 1 3 -0.19281576 -1555.80897054 -535.51364676 +2 1 7 1 4 -0.69627915 535.94212623 1555.65900273 +2 1 7 1 5 -1.01763875 -534.44244807 -1556.40884181 +2 1 7 1 6 -0.96407882 1554.24502046 535.79215842 +2 1 7 1 7 -74051.60090790 71902.41213761 71937.42962264 +2 1 7 1 8 9463.16200179 -3057.43671158 -3059.97545247 +2 1 7 2 1 -3065.19219007 -890.86238664 93.19428562 +2 1 7 2 2 -66918.29604666 71901.25524303 80696.62127241 +2 1 7 2 3 -1561.19709993 0.66414318 3079.20346887 +2 1 7 2 4 0.35349557 535.42795087 -3078.30366197 +2 1 7 2 5 538.17021950 -2.74226863 3075.53996937 +2 1 7 2 6 -890.29465133 -3058.82926988 -90.85907249 +2 1 7 2 7 71896.13491332 -66927.43337144 -80700.32761986 +2 1 7 2 8 0.12854384 -1557.40505658 -3075.04721797 +2 1 7 3 1 -3060.50033982 90.22706526 -890.13397153 +2 1 7 3 2 -66969.62788766 80709.22928094 71950.99099799 +2 1 7 3 3 540.01268124 3075.39000155 -0.49275140 +2 1 7 3 4 -884.81011407 -101.65675524 -3065.12791814 +2 1 7 3 5 -1559.93308548 3079.56767642 1.77818982 +2 1 7 3 6 -0.85695895 -3073.03336444 537.46322837 +2 1 7 3 7 71939.62557994 -80702.99490459 -66976.26931951 +2 1 7 3 8 -3.96343514 -3076.83611978 -1558.30486348 +2 2 7 1 1 0.21423974 1561.78625921 3079.80334013 +2 2 7 1 2 -71903.80469591 66918.51028640 80696.89978407 +2 2 7 1 3 891.04449041 3065.10649417 93.32282946 +2 2 7 1 4 -535.42795087 -0.42847947 -3078.34650992 +2 2 7 1 5 2.99935632 -538.12737155 3075.41142552 +2 2 7 1 6 1557.39434460 -0.14996782 -3075.04721797 +2 2 7 1 7 66928.72952185 -71897.00258425 -80701.29169868 +2 2 7 1 8 3058.76499795 890.24109140 -90.79480057 +2 2 7 2 1 1555.83039452 0.23566371 -535.47079881 +2 2 7 2 2 71905.26152612 -74060.84535255 -71940.55752280 +2 2 7 2 3 -3060.53247578 9469.65346582 3063.69251191 +2 2 7 2 4 -535.97426219 0.70699113 1555.59473081 +2 2 7 2 5 534.44244807 0.96407882 -1556.51596168 +2 2 7 2 6 3057.43671158 -9463.14057781 -3060.02901240 +2 2 7 2 7 -71902.24074582 74051.44022810 71937.32250277 +2 2 7 2 8 -1554.18074854 1.02835074 535.80287040 +2 2 7 3 1 3075.39000155 539.99125726 0.47132742 +2 2 7 3 2 80709.40067273 -66969.85283938 -71951.14096581 +2 2 7 3 3 90.21635328 -3060.52176380 890.12325954 +2 2 7 3 4 -101.65675524 -884.78869009 3065.04222225 +2 2 7 3 5 3079.64266033 -1559.90094952 -1.79961379 +2 2 7 3 6 -3076.85754375 -4.02770706 1558.31557547 +2 2 7 3 7 -80703.27341625 71939.86124365 66976.37643938 +2 2 7 3 8 -3073.03336444 -0.83553497 -537.45251638 +2 3 7 1 1 3.53495566 3077.93945442 1556.83732128 +2 3 7 1 2 -71942.21788076 80699.11716535 66981.27181737 +2 3 7 1 3 2.48518095 3075.53996937 -537.99882771 +2 3 7 1 4 1556.86945724 -3078.90353324 0.51417537 +2 3 7 1 5 891.39798598 92.57299038 3063.88532767 +2 3 7 1 6 -538.50229109 -3072.51918907 -0.29993563 +2 3 7 1 7 66969.13513626 -80705.09445401 -71954.82588929 +2 3 7 1 8 3057.32959172 -88.63097922 890.76597876 +2 3 7 2 1 3075.51854539 2.47446896 538.03096367 +2 3 7 2 2 80699.28855714 -71942.34642460 -66981.41107320 +2 3 7 2 3 3077.88589449 3.51353169 -1556.85874526 +2 3 7 2 4 -3078.93566920 1556.83732128 -0.47132742 +2 3 7 2 5 92.50871846 891.38727399 -3063.79963178 +2 3 7 2 6 -88.57741929 3057.39386364 -890.72313081 +2 3 7 2 7 -80705.30869375 66969.18869620 71955.05084101 +2 3 7 2 8 -3072.51918907 -538.44873116 0.36420755 +2 3 7 3 1 1559.10826249 -536.75623723 -3.21359606 +2 3 7 3 2 71946.24558782 -71946.22416384 -74126.15633640 +2 3 7 3 3 536.79908518 -1559.08683852 -3.21359606 +2 3 7 3 4 3067.70950698 -3067.69879499 -9458.19163989 +2 3 7 3 5 -3058.14370272 3058.20797464 9466.35417387 +2 3 7 3 6 -536.20992591 1559.45104607 2.91366042 +2 3 7 3 7 -71955.95064791 71956.00420784 74118.46512984 +2 3 7 3 8 -1559.42962210 536.20992591 2.99935632 +2 1 8 1 1 9471.64589538 -0.38563153 -1.99242955 +2 1 8 1 2 3.02078029 0.02142397 6.95207947 +2 1 8 1 3 -9471.53877551 0.38563153 -1.97100558 +2 1 8 1 4 -0.08569589 0.81411100 -0.23566371 +2 1 8 1 5 -9463.50478537 -1.19974253 5.74162495 +2 1 8 1 6 0.13925583 0.77126305 0.25708768 +2 1 8 1 7 9463.48336139 -0.49275140 -1.99242955 +2 1 8 1 8 -3.08505221 0.06427192 -6.88780755 +2 1 8 2 1 3063.32830435 -1558.52981520 -3077.98230237 +2 1 8 2 2 -4.69185024 -1.77818982 -2955.30862893 +2 1 8 2 3 -3063.22118448 1558.50839123 -3078.17511813 +2 1 8 2 4 0.08569589 0.68556716 573.75543983 +2 1 8 2 5 3060.84312340 1552.55252654 -3072.58346099 +2 1 8 2 6 -0.04284795 -0.19281576 2914.04605557 +2 1 8 2 7 -3055.20861832 -1557.71570420 -3075.58281731 +2 1 8 2 8 -0.81411100 6.39505615 11771.69157651 +2 1 8 3 1 3061.50726659 -3078.08942224 -1559.04399057 +2 1 8 3 2 -4.77754614 -2958.82216061 -0.83553497 +2 1 8 3 3 3061.61438646 -3078.08942224 1558.89402276 +2 1 8 3 4 -0.79268703 2913.66042404 -0.85695895 +2 1 8 3 5 -3054.39450732 -3070.33394376 1562.55752226 +2 1 8 3 6 0.95336683 574.82663851 -1.11404663 +2 1 8 3 7 -3059.08635756 -3075.43284950 -1557.28722473 +2 1 8 3 8 -4.94893793 11772.39856764 -2.31378916 +2 2 8 1 1 -3065.96345312 -1561.10069205 -3079.46055655 +2 2 8 1 2 0.10711987 -6.98421543 11784.98515220 +2 2 8 1 3 3066.00630107 1561.12211602 -3079.16062092 +2 2 8 1 4 0.05355993 0.17139179 2915.28864604 +2 2 8 1 5 -3055.74421766 1560.26515707 -3076.99679958 +2 2 8 1 6 0.17139179 -0.77126305 574.46243096 +2 2 8 1 7 3059.12920551 -1555.18767531 -3074.14741108 +2 2 8 1 8 -3.79204335 2.48518095 -2964.81016127 +2 2 8 2 1 886.39548812 0.17139179 -1.09262266 +2 2 8 2 2 -2.42090903 -0.13925583 8.76240525 +2 2 8 2 3 -886.45976004 -0.25708768 -1.17831855 +2 2 8 2 4 -0.00000000 -0.06427192 -0.32135961 +2 2 8 2 5 -891.21588220 0.40705550 3.34213990 +2 2 8 2 6 -0.05355993 -0.06427192 0.27851166 +2 2 8 2 7 891.36585002 0.23566371 -1.09262266 +2 2 8 2 8 2.37806108 -0.18210378 -8.86952511 +2 2 8 3 1 -90.75195262 -539.02717845 536.60626942 +2 2 8 3 2 -2961.97148475 7.03777536 -0.23566371 +2 2 8 3 3 -90.81622454 -539.13429832 -536.62769339 +2 2 8 3 4 3371.66213393 -0.96407882 0.53559934 +2 2 8 3 5 -84.90320780 542.19792656 534.14251244 +2 2 8 3 6 2914.08890352 0.14996782 1.24259047 +2 2 8 3 7 -92.23020681 535.29940702 -537.78458797 +2 2 8 3 8 -2965.14223286 -5.70948899 1.94958161 +2 3 8 1 1 -3069.34844096 -3080.59602716 -1556.32314591 +2 3 8 1 2 8.50531756 11786.39913446 2.34592512 +2 3 8 1 3 -3069.26274507 -3080.59602716 1556.43026578 +2 3 8 1 4 -0.19281576 573.02702472 1.00692676 +2 3 8 1 5 3062.55704130 -3078.02515032 1554.60922802 +2 3 8 1 6 1.45683021 2916.01706115 1.04977471 +2 3 8 1 7 3057.84376708 -3072.90482060 -1559.90094952 +2 3 8 1 8 8.39819769 -2963.10695536 0.92123087 +2 3 8 2 1 -94.43687610 535.57791868 -538.32018732 +2 3 8 2 2 -2955.75853237 5.20602561 2.49589294 +2 3 8 2 3 -94.52257199 535.53507073 538.25591539 +2 3 8 2 4 2915.46003783 -0.02142397 1.28543842 +2 3 8 2 5 -98.03610368 -531.82872328 -539.62704971 +2 3 8 2 6 3374.60793032 0.74983908 0.47132742 +2 3 8 2 7 -88.45958743 -538.83436268 536.02782213 +2 3 8 2 8 -2958.99355240 -6.39505615 -0.91051888 +2 3 8 3 1 885.30286546 0.17139179 2.37806108 +2 3 8 3 2 -1.73534187 1.22116650 -2.57087684 +2 3 8 3 3 -885.36713738 -0.19281576 2.46375698 +2 3 8 3 4 0.52488736 -0.92123087 -1.79961379 +2 3 8 3 5 -892.24423294 0.40705550 -7.45554285 +2 3 8 3 6 -0.86767094 -0.72841511 1.75676584 +2 3 8 3 7 894.47232621 0.17139179 2.42090903 +2 3 8 3 8 -0.19281576 -0.09640788 2.64586075 +3 1 1 1 1 -0.04284795 0.08569589 4.69185024 +3 1 1 1 2 -0.64271921 -0.00000000 -897.66449829 +3 1 1 1 3 0.01071199 0.02142397 4.54188243 +3 1 1 1 4 0.67485517 -0.08569589 -897.49310650 +3 1 1 1 5 0.04284795 0.02142397 1.60679803 +3 1 1 1 6 -0.70699113 0.06427192 891.92287334 +3 1 1 1 7 -0.00000000 0.06427192 0.55702332 +3 1 1 1 8 0.62129524 -0.00000000 891.86931340 +3 1 1 2 1 0.06427192 0.02142397 2970.18757867 +3 1 1 2 2 -539.11287434 539.09145037 80.63983703 +3 1 1 2 3 0.06427192 0.08569589 2970.36968244 +3 1 1 2 4 538.97361851 -538.89863461 80.68268498 +3 1 1 2 5 0.02142397 -0.12854384 -2913.72469596 +3 1 1 2 6 -537.54892426 -537.63462016 91.65175952 +3 1 1 2 7 0.04284795 0.01071199 -3371.82281374 +3 1 1 2 8 537.61319618 537.65604413 91.69460746 +3 1 1 3 1 7.02706338 2969.23421184 0.11783186 +3 1 1 3 2 1560.54366873 3074.81155426 -3058.35794245 +3 1 1 3 3 -12.64014449 -11784.25673709 0.02142397 +3 1 1 3 4 1560.58651668 3074.83297823 3058.40079040 +3 1 1 3 5 -0.71770312 -573.39123227 0.08569589 +3 1 1 3 6 -1557.95136791 3077.01822355 3060.07186035 +3 1 1 3 7 1.00692676 -2915.16010220 -0.02142397 +3 1 1 3 8 -1557.84424805 3076.98608759 -3059.95402849 +3 2 1 1 1 0.04284795 -0.11783186 2970.23042661 +3 2 1 1 2 538.27733937 -538.34161129 81.04689253 +3 2 1 1 3 0.04284795 -0.00000000 2970.15544271 +3 2 1 1 4 -538.26662738 538.34161129 81.19686035 +3 2 1 1 5 -0.01071199 0.04284795 -3371.81210175 +3 2 1 1 6 538.19164347 538.32018732 91.52321567 +3 2 1 1 7 0.02142397 0.03213596 -2913.68184802 +3 2 1 1 8 -538.29876334 -538.34161129 91.42680779 +3 2 1 2 1 -0.14996782 -0.05355993 4.53117044 +3 2 1 2 2 -0.00000000 0.74983908 -897.49310650 +3 2 1 2 3 0.05355993 -0.08569589 4.71327422 +3 2 1 2 4 0.07498391 -0.72841511 -897.32171471 +3 2 1 2 5 0.06427192 0.04284795 1.58537405 +3 2 1 2 6 -0.23566371 -0.59987126 891.92287334 +3 2 1 2 7 0.02142397 0.03213596 0.46061543 +3 2 1 2 8 -0.00000000 0.62129524 891.85860142 +3 2 1 3 1 2969.12709197 6.95207947 0.01071199 +3 2 1 3 2 3074.91867413 1559.02256660 -3058.46506232 +3 2 1 3 3 -11784.26744908 -7.66978259 -0.04284795 +3 2 1 3 4 3074.96152208 1559.04399057 3058.31509451 +3 2 1 3 5 -2915.17081419 0.89980690 0.06427192 +3 2 1 3 6 3076.91110368 -1559.25823031 -3059.72907677 +3 2 1 3 7 -573.41265625 0.44990345 0.02142397 +3 2 1 3 8 3076.80398381 -1559.34392621 3059.88975657 +3 3 1 1 1 -7.58408669 -11784.32100901 -0.03213596 +3 3 1 1 2 1559.04399057 3074.96152208 3058.50791027 +3 3 1 1 3 6.89851953 2969.19136389 0.06427192 +3 3 1 1 4 1559.04399057 3075.02579400 -3058.44363835 +3 3 1 1 5 0.88909491 -2915.16010220 0.06427192 +3 3 1 1 6 -1559.38677415 3076.86825574 -3059.94331651 +3 3 1 1 7 0.53559934 -573.32696035 0.01071199 +3 3 1 1 8 -1559.40819813 3076.83611978 3059.93260452 +3 3 1 2 1 -11784.42812888 -12.51160064 0.07498391 +3 3 1 2 2 3074.94009810 1560.47939681 3058.25082259 +3 3 1 2 3 2969.15922793 7.15560722 -0.06427192 +3 3 1 2 4 3074.86511419 1560.58651668 -3058.10085477 +3 3 1 2 5 -573.27340042 -0.72841511 -0.06427192 +3 3 1 2 6 3076.91110368 -1557.95136791 3060.11470830 +3 3 1 2 7 -2915.22437412 1.00692676 -0.05355993 +3 3 1 2 8 3076.97537560 -1557.95136791 -3060.11470830 +3 3 1 3 1 -0.06427192 0.06427192 11.24758620 +3 3 1 3 2 0.10711987 -0.06427192 -9480.12978896 +3 3 1 3 3 0.02142397 -0.06427192 11.16189030 +3 3 1 3 4 -0.07498391 -0.00000000 -9480.06551704 +3 3 1 3 5 0.01071199 0.02142397 3.92058719 +3 3 1 3 6 0.17139179 0.12854384 9465.28297519 +3 3 1 3 7 -0.02142397 -0.02142397 3.11718817 +3 3 1 3 8 -0.21423974 -0.12854384 9465.26155121 +3 1 2 1 1 -0.85695895 -539.56277779 1559.91166151 +3 1 2 1 2 -74179.69484669 -72096.74900310 72069.39058868 +3 1 2 1 3 74175.97778725 72096.19197979 -72067.48385502 +3 1 2 1 4 0.37491954 538.98433050 -1559.15111044 +3 1 2 1 5 9477.31253642 3068.17012241 -3066.67044425 +3 1 2 1 6 0.16067980 1560.65078860 -539.21999421 +3 1 2 1 7 -0.25708768 -1561.43276364 539.66989766 +3 1 2 1 8 -9473.05987764 -3066.27410074 3063.74607184 +3 1 2 2 1 -0.57844729 538.99504249 3074.40449876 +3 1 2 2 2 -72093.98531050 -67136.92769833 80911.73939240 +3 1 2 2 3 67125.08024087 72103.30473906 -80912.20000783 +3 1 2 2 4 -538.69510686 0.74983908 -3074.38307479 +3 1 2 2 5 -1.98171757 -1559.53674197 3080.25324358 +3 1 2 2 6 1557.35149665 1.58537405 -3077.14676739 +3 1 2 2 7 889.24487662 -3060.01830042 90.39845705 +3 1 2 2 8 3063.49969614 -888.05584608 -93.03360582 +3 1 2 3 1 -893.33685560 82.97505016 -3055.85133753 +3 1 2 3 2 72063.69181167 80909.16851555 -67096.30784418 +3 1 2 3 3 -67086.14216866 -80898.70290440 72061.14235880 +3 1 2 3 4 -1559.26894230 -3074.64016247 0.59987126 +3 1 2 3 5 2.18524532 3079.46055655 -1557.26580076 +3 1 2 3 6 536.02782213 -3081.17447445 -0.34278358 +3 1 2 3 7 2.63514877 3077.88589449 536.89549306 +3 1 2 3 8 -3065.72778941 -94.97247544 -888.66642933 +3 2 2 1 1 537.89170784 -0.31064762 3074.43663472 +3 2 2 1 2 -67119.38146386 -72106.87183068 80913.15337466 +3 2 2 1 3 72091.97145697 67135.51371607 -80913.99962162 +3 2 2 1 4 1.34971034 -538.10594758 -3073.52611584 +3 2 2 1 5 -3068.60931387 888.49503754 94.60826789 +3 2 2 1 6 -887.97015019 3063.41400025 -92.91577396 +3 2 2 1 7 -1556.79447333 0.47132742 3075.22932175 +3 2 2 1 8 1.49967816 1557.42648056 -3076.98608759 +3 2 2 2 1 -538.64154692 0.42847947 1558.26201553 +3 2 2 2 2 -72107.65380572 -74174.14603750 72072.33638507 +3 2 2 2 3 72109.41057156 74175.38862797 -72075.34645337 +3 2 2 2 4 538.97361851 0.38563153 -1559.19395839 +3 2 2 2 5 -1559.71884575 0.36420755 538.92005858 +3 2 2 2 6 -3066.30623670 -9473.01702969 3063.82105575 +3 2 2 2 7 3063.13548859 9470.58540868 -3059.57910895 +3 2 2 2 8 1560.69363655 0.09640788 -539.20928222 +3 2 2 3 1 83.29640977 -893.59394329 -3055.82991356 +3 2 2 3 2 80911.27877696 72070.39751544 -67094.63677423 +3 2 2 3 3 -80900.57750210 -67090.39482744 72062.44922120 +3 2 2 3 4 -3074.67229843 -1559.30107826 0.47132742 +3 2 2 3 5 3080.88525081 0.10711987 536.28490981 +3 2 2 3 6 -94.95105147 -3065.77063736 -888.68785331 +3 2 2 3 7 3075.88275295 2.62443678 -1559.79382965 +3 2 2 3 8 -3081.13162650 535.98497418 -0.35349557 +3 3 2 1 1 1558.74405494 3074.40449876 -0.32135961 +3 3 2 1 2 67084.16045109 80902.76274741 -72062.98482054 +3 3 2 1 3 -72067.52670297 -80910.57178583 67096.80059558 +3 3 2 1 4 893.76533507 -83.21071387 3055.74421766 +3 3 2 1 5 3067.72021896 95.22956312 888.02371012 +3 3 2 1 6 -1.11404663 -3079.20346887 -536.39202968 +3 3 2 1 7 -534.72095973 3079.14990894 -0.26779967 +3 3 2 1 8 -1.02835074 -3078.63573357 1559.50460601 +3 3 2 2 1 3074.59731452 1560.11518926 -0.54631133 +3 3 2 2 2 80902.79488338 67095.00098179 -72062.32067736 +3 3 2 2 3 -80911.81437631 -72074.38237455 67095.25806947 +3 3 2 2 4 -83.22142586 893.78675905 3055.74421766 +3 3 2 2 5 3081.30301829 -535.98497418 -0.38563153 +3 3 2 2 6 -3078.64644555 -1.04977471 1559.49389402 +3 3 2 2 7 94.24406033 3063.59610402 889.20202868 +3 3 2 2 8 -3079.18204490 -1.11404663 -536.40274167 +3 3 2 3 1 3055.48712998 3055.31573819 -9478.86577451 +3 3 2 3 2 -72065.34145765 -72064.62375453 74112.07007368 +3 3 2 3 3 72065.08436997 72064.91297818 -74112.16648157 +3 3 2 3 4 -3055.92632144 -3055.93703342 9477.79457583 +3 3 2 3 5 -1555.29479517 -538.92005858 -1.64964598 +3 3 2 3 6 538.24520341 1556.45168975 2.59230082 +3 3 2 3 7 -538.77009076 -1555.44476299 -2.49589294 +3 3 2 3 8 1556.47311373 538.24520341 2.63514877 +3 1 3 1 1 0.64271921 -0.07498391 -11.75104958 +3 1 3 1 2 74172.21787986 67121.29890951 -67081.84666193 +3 1 3 1 3 3.37427586 -0.42847947 107.03417264 +3 1 3 1 4 -74176.08490712 -67120.94541395 -67081.37533451 +3 1 3 1 5 3.62065156 0.08569589 9.85502790 +3 1 3 1 6 -74114.57667861 67021.68814376 67030.98614835 +3 1 3 1 7 0.74983908 0.03213596 -4.16696289 +3 1 3 1 8 74110.19547598 -67021.61315986 67031.22181206 +3 1 3 2 1 -0.08569589 -0.20352775 -11785.57431147 +3 1 3 2 2 72096.29909966 72106.66830293 -80899.92407090 +3 1 3 2 3 -1.83174975 -3.29929195 329268.90820573 +3 1 3 2 4 -72094.36023004 -72104.91153709 -80898.81002427 +3 1 3 2 5 0.08569589 -0.12854384 2960.08617506 +3 1 3 2 6 72011.81365935 -71998.67005148 -80802.48783848 +3 1 3 2 7 -0.70699113 -0.91051888 2960.71818229 +3 1 3 2 8 -72011.28877199 72001.30520024 -80802.65923027 +3 1 3 3 1 4.69185024 2970.58392218 1.94958161 +3 1 3 3 2 -72069.49770855 -80912.14644790 72059.73908853 +3 1 3 3 3 111.45822321 329278.05624250 2.35663711 +3 1 3 3 4 -72068.66217357 -80911.19308107 -72063.00624452 +3 1 3 3 5 -8.89094909 2954.21600627 -0.29993563 +3 1 3 3 6 72017.66240417 -80799.61702601 -72002.26927906 +3 1 3 3 7 -1.58537405 -11781.05385302 0.28922365 +3 1 3 3 8 72014.75945573 -80798.96359481 72001.43374408 +3 2 3 1 1 -0.04284795 -0.21423974 -11785.60644743 +3 2 3 1 2 72094.69230163 72105.02936894 -80898.76717632 +3 2 3 1 3 0.84624696 -0.53559934 329269.31526123 +3 2 3 1 4 -72094.91725335 -72105.44713643 -80898.98141606 +3 2 3 1 5 0.05355993 -0.10711987 2960.10759904 +3 2 3 1 6 72012.35997067 -71999.78409811 -80803.40906935 +3 2 3 1 7 -0.70699113 -0.97479080 2960.64319838 +3 2 3 1 8 -72012.31712273 72001.85151157 -80803.26981352 +3 2 3 2 1 0.49275140 0.17139179 -6.94136748 +3 2 3 2 2 67130.41481032 74170.00049859 -67084.05333122 +3 2 3 2 3 5.58094515 0.98550279 133.83556374 +3 2 3 2 4 -67134.68889308 -74174.48882108 -67084.07475520 +3 2 3 2 5 3.82417931 0.29993563 -15.36098915 +3 2 3 2 6 -67016.97486955 74116.72978797 67028.92944688 +3 2 3 2 7 -1.19974253 0.93194286 -1.14618259 +3 2 3 2 8 67012.69007481 -74114.59810258 67028.84375098 +3 2 3 3 1 2972.70489558 6.17010443 0.10711987 +3 2 3 3 2 -80912.37139962 -72074.20027078 72059.29989706 +3 2 3 3 3 329275.20685400 138.95589346 0.66414318 +3 2 3 3 4 -80911.60013657 -72073.28975189 -72058.33581825 +3 2 3 3 5 -11779.81126255 -10.71198685 -0.06427192 +3 2 3 3 6 -80800.24903323 72005.41860319 72001.30520024 +3 2 3 3 7 2957.23678656 -0.95336683 -0.65343120 +3 2 3 3 8 -80800.98816032 72008.40724753 -72002.08717528 +3 3 3 1 1 5.93444072 2971.92292054 0.04284795 +3 3 3 1 2 -72069.26204484 -80911.93220816 72059.47128885 +3 3 3 1 3 110.68696015 329276.19235679 0.68556716 +3 3 3 1 4 -72068.94068523 -80911.53586465 -72059.10708130 +3 3 3 1 5 -9.04091690 2954.38739806 -0.66414318 +3 3 3 1 6 72017.40531648 -80799.35993832 -72002.01219137 +3 3 3 1 7 -1.39255829 -11781.28951673 -0.06427192 +3 3 3 1 8 72014.50236805 -80798.67437116 72001.34804819 +3 3 3 2 1 2972.61919968 6.15939244 0.19281576 +3 3 3 2 2 -80912.32855167 -72074.10386290 72059.29989706 +3 3 3 2 3 329275.39966976 139.19155717 0.85695895 +3 3 3 2 4 -80911.87864823 -72073.58968753 -72058.67860183 +3 3 3 2 5 -11779.85411049 -10.71198685 -0.14996782 +3 3 3 2 6 -80800.23832124 72005.37575525 72001.34804819 +3 3 3 2 7 2957.27963451 -0.98550279 -0.67485517 +3 3 3 2 8 -80801.03100827 72008.36439958 -72002.09788727 +3 3 3 3 1 0.62129524 0.04284795 1.09262266 +3 3 3 3 2 67094.78674205 67096.50065995 -74104.17533937 +3 3 3 3 3 3.98485911 0.59987126 -4.52045845 +3 3 3 3 4 -67098.84658507 -67098.38596963 -74104.02537156 +3 3 3 3 5 3.72777142 0.23566371 6.62000788 +3 3 3 3 6 -67033.97479269 67032.44297857 74102.71850916 +3 3 3 3 7 -0.00000000 0.89980690 -0.86767094 +3 3 3 3 8 67029.82925377 -67032.30372274 74103.00773281 +3 1 4 1 1 0.94265484 539.35925004 1559.84738959 +3 1 4 1 2 -0.34278358 -538.98433050 -1559.19395839 +3 1 4 1 3 -74176.69549037 -72097.19890655 -72068.66217357 +3 1 4 1 4 74179.78054258 72098.95567239 72069.56198047 +3 1 4 1 5 -9477.41965629 -3068.34151420 -3066.54190041 +3 1 4 1 6 9473.03845367 3066.28481272 3063.75678383 +3 1 4 1 7 0.89980690 1560.53295675 540.29119290 +3 1 4 1 8 -0.08569589 -1560.72577251 -539.16643428 +3 1 4 2 1 0.57844729 -539.01646646 3074.45805869 +3 1 4 2 2 538.44873116 -0.42847947 -3074.42592273 +3 1 4 2 3 -67122.94855549 -72105.46856040 -80912.30712770 +3 1 4 2 4 72093.73893480 67137.39902575 80911.92149617 +3 1 4 2 5 1.99242955 1559.55816594 3080.27466756 +3 1 4 2 6 -3064.30309516 888.90209304 -92.48729449 +3 1 4 2 7 -889.26630060 3060.01830042 90.38774507 +3 1 4 2 8 -1558.16560765 -0.77126305 -3077.73592667 +3 1 4 3 1 -893.31543163 82.95362619 3055.88347349 +3 1 4 3 2 -1559.40819813 -3074.46877068 -0.42847947 +3 1 4 3 3 -67086.38854436 -80901.01669356 -72061.07808688 +3 1 4 3 4 72064.54877062 80910.14330636 67097.05768326 +3 1 4 3 5 2.20666929 3079.46055655 1557.26580076 +3 1 4 3 6 -3065.64209351 -94.80108365 888.60215741 +3 1 4 3 7 2.63514877 3077.89660647 -536.89549306 +3 1 4 3 8 535.36367894 -3080.22110762 -0.29993563 +3 2 4 1 1 -537.87028387 0.28922365 3074.45805869 +3 2 4 1 2 -1.02835074 537.81672393 -3073.52611584 +3 2 4 1 3 -72094.59589375 -67133.64983035 -80914.49237302 +3 2 4 1 4 67120.01347109 72106.98966253 80913.54971818 +3 2 4 1 5 3068.57717791 -888.49503754 94.60826789 +3 2 4 1 6 -0.65343120 -1558.29415149 -3077.53239892 +3 2 4 1 7 1556.83732128 -0.43919146 3075.20789777 +3 2 4 1 8 888.79497318 -3064.20668728 -92.27305475 +3 2 4 2 1 539.00575447 -0.58915928 1558.46554328 +3 2 4 2 2 -539.00575447 -0.33207159 -1559.20467038 +3 2 4 2 3 -72107.23603823 -74173.80325392 -72073.71823137 +3 2 4 2 4 72102.90839554 74174.06034160 72071.96146553 +3 2 4 2 5 1561.55059550 -1.69249392 537.63462016 +3 2 4 2 6 -1560.68292456 -0.12854384 -539.15572229 +3 2 4 2 7 -3062.74985706 -9470.44615285 -3059.72907677 +3 2 4 2 8 3066.30623670 9473.01702969 3063.77820780 +3 2 4 3 1 83.31783374 -893.60465527 3055.82991356 +3 2 4 3 2 -3074.46877068 -1559.37606217 -0.42847947 +3 2 4 3 3 -80902.91271523 -67090.58764320 -72062.83485273 +3 2 4 3 4 80912.40353558 72071.06165863 67095.81509279 +3 2 4 3 5 3080.87453882 0.08569589 -536.26348584 +3 2 4 3 6 -3080.22110762 535.29940702 -0.27851166 +3 2 4 3 7 3075.90417692 2.62443678 1559.81525363 +3 2 4 3 8 -94.82250762 -3065.60995755 888.58073344 +3 3 4 1 1 1558.67978302 3074.40449876 0.28922365 +3 3 4 1 2 893.42255150 -83.06074606 -3055.91560945 +3 3 4 1 3 -72063.40258803 -80910.85029749 -67097.10053121 +3 3 4 1 4 67082.62863697 80901.74510866 72062.02074173 +3 3 4 1 5 3067.73093095 95.27241107 -887.95943820 +3 3 4 1 6 -2.84938850 -3077.33958316 -1558.14418368 +3 3 4 1 7 -534.67811179 3079.11777297 0.28922365 +3 3 4 1 8 -1.41398226 -3079.41770861 536.58484545 +3 3 4 2 1 3074.55446658 1560.07234131 0.56773530 +3 3 4 2 2 -83.06074606 893.41183951 -3055.93703342 +3 3 4 2 3 -80911.84651227 -72070.09757981 -67095.21522152 +3 3 4 2 4 80901.59514085 67093.32991184 72061.46371841 +3 3 4 2 5 3081.32444227 -535.98497418 0.32135961 +3 3 4 2 6 -3079.41770861 -1.45683021 536.60626942 +3 3 4 2 7 94.24406033 3063.60681601 -889.22345265 +3 3 4 2 8 -3077.31815918 -2.86010049 -1558.18703163 +3 3 4 3 1 -3055.42285806 -3055.26217825 -9478.83363855 +3 3 4 3 2 3056.06557727 3056.03344131 9478.00881557 +3 3 4 3 3 -72067.38744714 -72067.22676734 -74112.38072130 +3 3 4 3 4 72067.00181561 72066.24126455 74113.70900767 +3 3 4 3 5 1555.31621915 538.87721063 -1.69249392 +3 3 4 3 6 -1555.43405100 -538.70581884 1.88530969 +3 3 4 3 7 538.68439487 1555.42333902 -2.52802890 +3 3 4 3 8 -538.68439487 -1555.43405100 1.92815763 +3 1 5 1 1 -0.02142397 0.01071199 -0.12854384 +3 1 5 1 2 9474.64525169 -0.81411100 0.92123087 +3 1 5 1 3 0.09640788 -0.10711987 -8.67670935 +3 1 5 1 4 -9474.69881163 0.89980690 0.89980690 +3 1 5 1 5 0.08569589 0.02142397 13.38998357 +3 1 5 1 6 -9456.28490623 -0.00000000 -3.08505221 +3 1 5 1 7 0.02142397 0.03213596 -0.16067980 +3 1 5 1 8 9456.17778636 0.07498391 -3.09576420 +3 1 5 2 1 0.12854384 0.07498391 -573.11272061 +3 1 5 2 2 3069.58410468 -1560.52224476 3080.36036345 +3 1 5 2 3 0.99621478 -0.64271921 2958.99355240 +3 1 5 2 4 -3069.50912077 1560.52224476 3080.42463537 +3 1 5 2 5 0.88909491 0.55702332 -11775.53717979 +3 1 5 2 6 3057.22247185 1553.23809370 3071.89789384 +3 1 5 2 7 0.23566371 -0.11783186 -2914.66735081 +3 1 5 2 8 -3059.40771717 -1553.18453376 3071.72650205 +3 1 5 3 1 1.99242955 -2913.89608775 -0.04284795 +3 1 5 3 2 -3068.74856970 3081.19589842 -1558.05848778 +3 1 5 3 3 14.17195861 2960.92171004 -0.04284795 +3 1 5 3 4 -3068.69500977 3081.19589842 1558.37984739 +3 1 5 3 5 16.69998750 -11774.25174137 0.02142397 +3 1 5 3 6 3053.10906890 3069.81976839 1560.43654886 +3 1 5 3 7 -1.54252611 -574.69809467 -0.03213596 +3 1 5 3 8 3052.95910108 3069.83048037 -1560.50082079 +3 2 5 1 1 -0.12854384 -0.13925583 -2915.42790187 +3 2 5 1 2 -3069.24132110 -1560.80075642 3081.41013816 +3 2 5 1 3 -0.89980690 0.57844729 -11785.62787141 +3 2 5 1 4 3069.29488103 1560.82218039 3081.23874637 +3 2 5 1 5 -0.93194286 -0.66414318 2965.42074452 +3 2 5 1 6 -3054.05172374 1558.07991176 3073.61181173 +3 2 5 1 7 -0.17139179 0.07498391 -574.35531109 +3 2 5 1 8 3056.21554508 -1558.02635182 3073.75106756 +3 2 5 2 1 0.23566371 0.17139179 0.81411100 +3 2 5 2 2 890.27322736 0.89980690 -0.25708768 +3 2 5 2 3 0.91051888 -0.77126305 -8.41962167 +3 2 5 2 4 -890.25180339 -0.89980690 -0.08569589 +3 2 5 2 5 0.92123087 0.66414318 12.61872051 +3 2 5 2 6 -889.45911636 -0.55702332 -2.31378916 +3 2 5 2 7 0.17139179 -0.08569589 0.37491954 +3 2 5 2 8 887.31671899 0.54631133 -2.52802890 +3 2 5 3 1 -3372.09061341 1.34971034 0.10711987 +3 2 5 3 2 94.02982060 538.23449142 536.43487763 +3 2 5 3 3 2959.25064009 -12.23308899 0.64271921 +3 2 5 3 4 93.96554868 538.25591539 -536.62769339 +3 2 5 3 5 2962.47494813 13.75419112 -0.59987126 +3 2 5 3 6 89.53078612 -539.51992984 536.19921392 +3 2 5 3 7 -2914.66735081 -0.28922365 -0.01071199 +3 2 5 3 8 87.36696477 -539.57348978 -536.02782213 +3 3 5 1 1 0.72841511 -573.03773671 0.17139179 +3 3 5 1 2 3069.26274507 3081.79576969 -1556.45168975 +3 3 5 1 3 -8.98735697 -11786.31343857 0.68556716 +3 3 5 1 4 3069.31630500 3081.62437790 1556.40884181 +3 3 5 1 5 -8.90166107 2963.10695536 -0.66414318 +3 3 5 1 6 -3059.15062948 3074.55446658 1557.39434460 +3 3 5 1 7 -0.94265484 -2915.98492519 -0.07498391 +3 3 5 1 8 -3061.35729877 3074.46877068 -1557.36220864 +3 3 5 2 1 -2915.22437412 -0.32135961 -0.02142397 +3 3 5 2 2 94.71538776 -536.22063789 -538.29876334 +3 3 5 2 3 2957.64384206 -11.84745746 -0.64271921 +3 3 5 2 4 96.90063307 -536.28490981 538.42730718 +3 3 5 2 5 2960.80387818 16.02513233 0.66414318 +3 3 5 2 6 89.70217791 534.78523165 -537.78458797 +3 3 5 2 7 -3374.31870667 -1.07119869 0.09640788 +3 3 5 2 8 89.61648201 534.69953576 537.81672393 +3 3 5 3 1 0.17139179 -0.10711987 2.88152446 +3 3 5 3 2 888.55930946 0.08569589 -2.03527750 +3 3 5 3 3 0.89980690 0.64271921 10.13353956 +3 3 5 3 4 -890.69099485 -0.08569589 -2.27094121 +3 3 5 3 5 0.83553497 -0.66414318 -12.12596912 +3 3 5 3 6 -891.21588220 0.08569589 2.91366042 +3 3 5 3 7 0.17139179 0.05355993 -2.45304499 +3 3 5 3 8 891.32300207 -0.09640788 2.88152446 +3 1 6 1 1 -1.54252611 -536.68125333 -1558.99043064 +3 1 6 1 2 -0.04284795 1558.21916759 536.16707796 +3 1 6 1 3 -74117.21182737 72014.13816049 72010.47466099 +3 1 6 1 4 9473.78829275 -3064.07814343 -3064.99937430 +3 1 6 1 5 -9460.46258110 3056.06557727 3053.38758055 +3 1 6 1 6 74104.98945037 -72006.46837791 -71995.75639105 +3 1 6 1 7 -0.64271921 -1556.90159320 -538.74866679 +3 1 6 1 8 0.98550279 535.57791868 1558.62622309 +3 1 6 2 1 -0.44990345 -537.24898863 3076.66472799 +3 1 6 2 2 1562.06477087 1.86388571 -3081.60295392 +3 1 6 2 3 67024.11976478 -72004.13316477 -80798.58867527 +3 1 6 2 4 3065.93131716 889.26630060 -94.95105147 +3 1 6 2 5 -0.58915928 1552.85246217 3069.32701699 +3 1 6 2 6 -72004.77588398 67036.04220615 80814.39956786 +3 1 6 2 7 889.69478007 3061.36801076 90.54842487 +3 1 6 2 8 -536.00639816 -0.05355993 -3076.03272076 +3 1 6 3 1 888.43076562 91.43751978 3061.92503408 +3 1 6 3 2 -539.92698534 -3079.48198053 0.92123087 +3 1 6 3 3 67030.68621272 -80802.29502272 -72004.69018809 +3 1 6 3 4 3064.37807907 -92.42302257 889.48054033 +3 1 6 3 5 -1.83174975 3072.69058086 1561.12211602 +3 1 6 3 6 -72000.35183341 80809.42920596 67027.49404064 +3 1 6 3 7 0.72841511 3077.75735064 -536.42416564 +3 1 6 3 8 1557.84424805 -3077.17890335 0.23566371 +3 2 6 1 1 537.87028387 0.08569589 3076.40764030 +3 2 6 1 2 -889.22345265 -3065.89918120 -94.94033948 +3 2 6 1 3 72016.49479760 -67015.92509484 -80800.02408151 +3 2 6 1 4 -1.84246174 -1562.02192292 -3081.58152995 +3 2 6 1 5 -3053.48398844 -891.62293770 85.99583046 +3 2 6 1 6 -67052.13161040 71998.99141108 80813.84254455 +3 2 6 1 7 -1557.71570420 0.36420755 3076.20411255 +3 2 6 1 8 0.02142397 536.01711014 -3076.08628070 +3 2 6 2 1 537.39895645 -0.02142397 -1560.56509271 +3 2 6 2 2 3064.72086264 -9472.85634989 -3065.58853358 +3 2 6 2 3 -72000.95170468 74114.99444610 72002.82630238 +3 2 6 2 4 -1558.27272752 0.23566371 535.98497418 +3 2 6 2 5 1557.82282407 -0.85695895 -540.14122508 +3 2 6 2 6 71996.82758974 -74107.02472788 -71992.24285936 +3 2 6 2 7 -3061.95717004 9466.34346188 3060.99309122 +3 2 6 2 8 -535.49222279 -0.82482299 1558.73334295 +3 2 6 3 1 91.03046428 888.21652588 -3061.74293030 +3 2 6 3 2 -92.85150204 3063.33901634 -888.75212523 +3 2 6 3 3 -80804.00894062 67030.08634146 72004.54022027 +3 2 6 3 4 -3078.46434178 -539.39138600 -0.17139179 +3 2 6 3 5 3073.79391551 -2.31378916 536.32775776 +3 2 6 3 6 80810.84318823 -71997.40603703 -67030.32200517 +3 2 6 3 7 3076.76113587 -0.42847947 -1559.37606217 +3 2 6 3 8 -3077.12534342 1557.79068811 -0.36420755 +3 3 6 1 1 -1559.85810157 3077.32887117 -0.18210378 +3 3 6 1 2 -1.37113432 -3078.00372634 538.37374725 +3 3 6 1 3 72014.83443964 -80797.34608479 -67034.79961567 +3 3 6 1 4 -2.93508440 -3080.29609153 -1556.92301718 +3 3 6 1 5 -3058.51862226 89.83072175 -892.22280897 +3 3 6 1 6 -67037.15625278 80804.56596393 72006.40410598 +3 3 6 1 7 536.04924610 3077.12534342 -0.65343120 +3 3 6 1 8 -890.85167465 -93.22642158 -3060.23254015 +3 3 6 2 1 3077.03964753 -1558.29415149 0.54631133 +3 3 6 2 2 -3080.44605934 -2.87081248 1556.85874526 +3 3 6 2 3 -80795.49291107 72009.21064654 67037.41334046 +3 3 6 2 4 -3078.90353324 -1.94958161 -538.98433050 +3 3 6 2 5 3073.93317134 534.22820834 -0.04284795 +3 3 6 2 6 80805.85140235 -67027.64400845 -72006.31841009 +3 3 6 2 7 91.37324786 -3061.65723440 890.20895544 +3 3 6 2 8 -93.40852536 -890.94808253 3060.32894803 +3 3 6 3 1 -3063.00694475 3064.00315953 9468.50728323 +3 3 6 3 2 -536.37060571 1559.31179024 2.42090903 +3 3 6 3 3 -71999.58057036 72000.59820911 74099.69772887 +3 3 6 3 4 -1559.31179024 536.32775776 2.39948506 +3 3 6 3 5 1559.54745396 -535.96355021 3.94201116 +3 3 6 3 6 71998.74503538 -72005.93277856 -74113.02344051 +3 3 6 3 7 538.57727500 -1556.96586512 1.48896617 +3 3 6 3 8 3061.33587480 -3061.36801076 -9465.39009505 +3 1 7 1 1 0.06427192 -0.04284795 0.64271921 +3 1 7 1 2 -0.57844729 889.00921291 2.39948506 +3 1 7 1 3 0.08569589 0.06427192 -2.20666929 +3 1 7 1 4 0.55702332 -889.05206086 2.14239737 +3 1 7 1 5 -0.06427192 0.10711987 -1.92815763 +3 1 7 1 6 -0.83553497 888.60215741 0.21423974 +3 1 7 1 7 0.02142397 -0.04284795 -1.92815763 +3 1 7 1 8 0.85695895 -888.62358139 0.24637570 +3 1 7 2 1 0.06427192 0.18210378 -2915.08511829 +3 1 7 2 2 -1561.33635576 -3058.27224656 3077.57524687 +3 1 7 2 3 -0.62129524 0.87838292 -11783.14269046 +3 1 7 2 4 1561.35777973 3058.22939861 3077.85375853 +3 1 7 2 5 -0.09640788 0.10711987 -574.86948646 +3 1 7 2 6 -1557.37292062 3060.80027546 3077.38243110 +3 1 7 2 7 0.66414318 0.92123087 2962.94627555 +3 1 7 2 8 1557.39434460 -3063.01765673 3077.44670303 +3 1 7 3 1 0.70699113 -3372.07990142 -0.01071199 +3 1 7 3 2 539.79844150 91.80172733 536.58484545 +3 1 7 3 3 -3.94201116 2960.30041480 0.04284795 +3 1 7 3 4 539.83057746 91.84457528 -536.71338929 +3 1 7 3 5 -0.16067980 -2914.49595902 -0.04284795 +3 1 7 3 6 -538.06309963 89.42366625 -536.02782213 +3 1 7 3 7 -0.25708768 2963.38546701 -0.07498391 +3 1 7 3 8 -537.93455579 89.63790599 536.14565398 +3 2 7 1 1 -0.08569589 -0.19281576 -573.42336823 +3 2 7 1 2 -1556.45168975 3063.52112012 3075.66851321 +3 2 7 1 3 0.68556716 -0.96407882 2957.90092975 +3 2 7 1 4 1556.47311373 -3063.56396806 3075.96844884 +3 2 7 1 5 0.07498391 -0.17139179 -2914.53880696 +3 2 7 1 6 -1557.33007268 -3061.10021109 3076.35408037 +3 2 7 1 7 -0.62129524 -0.88909491 -11774.32672528 +3 2 7 1 8 1557.15868089 3063.25332045 3076.33265639 +3 2 7 2 1 -0.02142397 -0.03213596 0.66414318 +3 2 7 2 2 -0.08569589 9468.73223495 2.97793235 +3 2 7 2 3 -0.03213596 -0.02142397 -3.83489129 +3 2 7 2 4 0.12854384 -9468.68938700 2.78511658 +3 2 7 2 5 0.04284795 0.12854384 -0.32135961 +3 2 7 2 6 0.66414318 9468.71081098 -0.94265484 +3 2 7 2 7 -0.02142397 0.02142397 -0.93194286 +3 2 7 2 8 -0.79268703 -9468.67867502 -0.98550279 +3 2 7 3 1 -2913.78896788 0.06427192 0.02142397 +3 2 7 3 2 3074.98294605 -3058.85069385 -1559.68670978 +3 2 7 3 3 2960.15044698 -1.92815763 0.64271921 +3 2 7 3 4 3075.04721797 -3058.87211782 1559.45104607 +3 2 7 3 5 -574.76236659 0.32135961 -0.06427192 +3 2 7 3 6 3076.13984063 3060.54318777 -1559.36535018 +3 2 7 3 7 -11773.78041395 -4.17767487 -0.74983908 +3 2 7 3 8 3076.07556871 3062.82484097 1559.31179024 +3 3 7 1 1 0.85695895 -2914.62450286 0.04284795 +3 3 7 1 2 -534.87092755 92.03739104 -538.27733937 +3 3 7 1 3 -1.67106995 2960.27899083 -0.04284795 +3 3 7 1 4 -534.94591146 91.97311912 538.34161129 +3 3 7 1 5 -1.04977471 -3373.78310733 0.02142397 +3 3 7 1 6 535.89927829 90.40916904 537.91313182 +3 3 7 1 7 -0.00000000 2963.53543483 -0.02142397 +3 3 7 1 8 535.89927829 90.32347315 -537.87028387 +3 3 7 2 1 -573.45550419 1.02835074 -0.13925583 +3 3 7 2 2 3079.56767642 3062.94267283 -1556.38741783 +3 3 7 2 3 -11783.83896960 -0.87838292 -0.70699113 +3 3 7 2 4 3079.59981238 3062.98552077 1556.15175412 +3 3 7 2 5 -2915.63142962 -0.53559934 -0.00000000 +3 3 7 2 6 3076.56832010 -3061.07878711 -1557.18010486 +3 3 7 2 7 2960.57892646 -0.73912709 0.62129524 +3 3 7 2 8 3076.58974408 -3063.37115230 1557.19081685 +3 3 7 3 1 -0.02142397 -0.03213596 2.19595730 +3 3 7 3 2 0.19281576 890.91594657 -2.84938850 +3 3 7 3 3 -0.05355993 -0.00000000 4.77754614 +3 3 7 3 4 -0.10711987 -890.74455478 -2.78511658 +3 3 7 3 5 0.02142397 0.02142397 -2.48518095 +3 3 7 3 6 -0.14996782 888.96636496 1.97100558 +3 3 7 3 7 0.04284795 -0.01071199 -2.77440459 +3 3 7 3 8 0.08569589 -888.95565298 2.00314154 +3 1 8 1 1 1.22116650 536.49914955 -1559.18324640 +3 1 8 1 2 -9472.84563790 3064.68872668 -3065.65280550 +3 1 8 1 3 74113.44120800 -72013.13123373 72009.44631025 +3 1 8 1 4 0.21423974 -1558.31557547 535.98497418 +3 1 8 1 5 9458.56655943 -3057.37243966 3054.60874706 +3 1 8 1 6 -0.85695895 -535.44937484 1558.82975084 +3 1 8 1 7 0.23566371 1557.07298499 -538.60941096 +3 1 8 1 8 -74099.91196861 72006.06132240 -71995.43503145 +3 1 8 2 1 0.23566371 537.18471671 3076.51476017 +3 1 8 2 2 -3065.85633325 -889.27701258 -94.91891551 +3 1 8 2 3 -67025.19096347 72004.77588398 -80799.06000269 +3 1 8 2 4 -1562.04334689 -1.84246174 -3081.53868200 +3 1 8 2 5 -0.31064762 -1553.47375741 3069.92688826 +3 1 8 2 6 536.00639816 0.06427192 -3076.07556871 +3 1 8 2 7 -889.84474789 -3061.26089089 90.63412076 +3 1 8 2 8 72006.98255327 -67036.17074999 80814.66736753 +3 1 8 3 1 888.38791767 91.38395984 -3061.93574606 +3 1 8 3 2 3063.32830435 -92.83007807 -888.75212523 +3 1 8 3 3 67032.96786592 -80804.43742009 72004.60449219 +3 1 8 3 4 -539.45565792 -3078.47505376 -0.21423974 +3 1 8 3 5 -1.83174975 3072.75485278 -1561.20781192 +3 1 8 3 6 1557.79068811 -3077.12534342 -0.47132742 +3 1 8 3 7 0.74983908 3077.77877462 536.42416564 +3 1 8 3 8 -72001.94791945 80810.93959611 -67028.77947906 +3 2 8 1 1 -537.89170784 -0.11783186 3076.42906427 +3 2 8 1 2 1.79961379 1562.04334689 -3081.61366591 +3 2 8 1 3 -72016.45194965 67015.98936676 -80800.19547330 +3 2 8 1 4 889.26630060 3065.87775722 -94.95105147 +3 2 8 1 5 3053.47327645 891.66578565 85.93155854 +3 2 8 1 6 -0.04284795 -536.00639816 -3076.05414473 +3 2 8 1 7 1557.71570420 -0.34278358 3076.19340056 +3 2 8 1 8 67052.13161040 -71999.02354704 80814.09963223 +3 2 8 2 1 -537.46322837 -0.18210378 -1560.51153277 +3 2 8 2 2 1558.16560765 -0.06427192 536.11351802 +3 2 8 2 3 72001.62655985 -74118.18661818 72003.29762980 +3 2 8 2 4 -3064.07814343 9473.76686877 -3064.91367841 +3 2 8 2 5 -1557.73712818 0.66414318 -540.16264905 +3 2 8 2 6 535.57791868 0.96407882 1558.59408713 +3 2 8 2 7 3061.29302685 -9467.27540474 3060.36108400 +3 2 8 2 8 -71997.44888498 74110.18476400 -71992.83201864 +3 2 8 3 1 91.15900812 888.32364575 3061.85005017 +3 2 8 3 2 -3079.48198053 -539.83057746 0.89980690 +3 2 8 3 3 -80800.89175244 67027.19410501 -72003.70468530 +3 2 8 3 4 -92.35875065 3064.35665509 889.48054033 +3 2 8 3 5 3074.72585837 -1.64964598 -536.92762902 +3 2 8 3 6 -3077.16819137 1557.82282407 0.27851166 +3 2 8 3 7 3076.97537560 -0.46061543 1559.29036627 +3 2 8 3 8 80807.07256886 -71995.79923900 67028.83303900 +3 3 8 1 1 -1559.83667760 3077.32887117 0.14996782 +3 3 8 1 2 -2.84938850 -3080.47819531 1556.83732128 +3 3 8 1 3 72014.72731977 -80795.37507921 67034.92815952 +3 3 8 1 4 -1.97100558 -3078.90353324 -539.02717845 +3 3 8 1 5 -3058.50791027 89.78787380 892.22280897 +3 3 8 1 6 -890.95879452 -93.45137331 3060.37179598 +3 3 8 1 7 536.02782213 3077.09320746 0.65343120 +3 3 8 1 8 -67036.74919728 80803.78398889 -72005.93277856 +3 3 8 2 1 3077.21103932 -1558.18703163 -0.43919146 +3 3 8 2 2 -3077.98230237 -1.36042233 538.37374725 +3 3 8 2 3 -80796.64980565 72008.82501501 -67036.85631715 +3 3 8 2 4 -3080.28537954 -2.93508440 -1556.92301718 +3 3 8 2 5 3074.86511419 534.95662344 -0.62129524 +3 3 8 2 6 -93.24784556 -890.87309862 -3060.30752406 +3 3 8 2 7 91.48036773 -3061.79649023 -890.29465133 +3 3 8 2 8 80804.67308380 -67028.64022323 72007.03611321 +3 3 8 3 1 3063.17833654 -3063.88532767 9468.58226714 +3 3 8 3 2 1559.32250223 -536.33846975 2.41019704 +3 3 8 3 3 72000.45895328 -72001.15523243 74100.55468782 +3 3 8 3 4 536.33846975 -1559.30107826 2.39948506 +3 3 8 3 5 -1558.66907103 536.62769339 3.29929195 +3 3 8 3 6 -3061.37872275 3061.33587480 -9465.34724711 +3 3 8 3 7 -538.36303526 1556.91230519 1.42469425 +3 3 8 3 8 -72000.83387282 72005.80423472 -74113.00201654 +4 1 1 1 1 74175.26008413 72107.09678240 -72075.07865370 +4 1 1 1 2 0.32135961 539.16643428 -1559.26894230 +4 1 1 1 3 0.42847947 -538.62012295 1558.20845560 +4 1 1 1 4 -74173.53545425 -72106.60403101 72071.34017029 +4 1 1 1 5 0.37491954 -1559.70813376 538.92005858 +4 1 1 1 6 -9472.92062181 -3066.09199696 3063.86390370 +4 1 1 1 7 9470.53184874 3063.13548859 -3059.60053293 +4 1 1 1 8 -0.53559934 1561.58273146 -538.52371507 +4 1 1 2 1 72106.62545498 67123.79480245 -80913.06767877 +4 1 1 2 2 0.42847947 -538.47015513 -3074.44734671 +4 1 1 2 3 539.15572229 -0.66414318 3074.42592273 +4 1 1 2 4 -67139.60569504 -72093.92103857 80911.96434412 +4 1 1 2 5 -1559.39748614 -1.84246174 3080.44605934 +4 1 1 2 6 0.73912709 1558.20845560 -3077.74663866 +4 1 1 2 7 -3059.08635756 888.61286940 90.98761633 +4 1 1 2 8 -888.92351702 3064.33523112 -92.48729449 +4 1 1 3 1 -72073.35402382 -80911.05382524 67094.51894238 +4 1 1 3 2 893.78675905 -83.22142586 3055.75492965 +4 1 1 3 3 1560.28658105 3074.42592273 -0.59987126 +4 1 1 3 4 67092.82644846 80902.68776351 -72062.34210133 +4 1 1 3 5 -535.78144643 3081.38871419 -0.23566371 +4 1 1 3 6 -1.06048670 -3078.64644555 1559.47247005 +4 1 1 3 7 3064.50662291 93.62276510 889.83403590 +4 1 1 3 8 -1.09262266 -3079.24631682 -536.45630160 +4 2 1 1 1 67134.29254956 72094.91725335 -80912.69275923 +4 2 1 1 2 -538.47015513 0.42847947 -3074.43663472 +4 2 1 1 3 -0.10711987 537.82743592 3074.38307479 +4 2 1 1 4 -72108.24296500 -67119.16722413 80912.73560717 +4 2 1 1 5 888.66642933 -3068.42721010 94.71538776 +4 2 1 1 6 3064.30309516 -888.88066907 -92.46587052 +4 2 1 1 7 1.39255829 -1557.45861652 3075.88275295 +4 2 1 1 8 1558.18703163 0.74983908 -3077.70379071 +4 2 1 2 1 72092.97838373 74174.46739710 -72066.57333614 +4 2 1 2 2 539.17714626 0.26779967 -1559.32250223 +4 2 1 2 3 -539.41280997 -1.19974253 1560.13661323 +4 2 1 2 4 -72096.06343594 -74174.89587658 72068.94068523 +4 2 1 2 5 3069.44484885 9475.43793872 -3067.95588267 +4 2 1 2 6 1561.55059550 -0.47132742 -538.57727500 +4 2 1 2 7 -1561.63629139 -0.63200722 539.44494594 +4 2 1 2 8 -3066.07057299 -9472.96346976 3063.83176774 +4 2 1 3 1 -80907.35818977 -72066.79828786 67095.99719656 +4 2 1 3 2 -83.44637759 893.85103097 3055.82991356 +4 2 1 3 3 3074.57589055 1558.59408713 -0.38563153 +4 2 1 3 4 80899.66698321 67083.49630791 -72062.04216570 +4 2 1 3 5 95.48665081 3067.78449088 888.02371012 +4 2 1 3 6 -3080.15683570 -0.42847947 -537.14186876 +4 2 1 3 7 3080.03900384 -535.31011901 0.35349557 +4 2 1 3 8 -3078.79641337 -1.14618259 1559.37606217 +4 3 1 1 1 -67090.78045897 -80901.40232508 72062.95268458 +4 3 1 1 2 -1559.30107826 -3074.61873850 0.52488736 +4 3 1 1 3 -893.34756759 83.01789811 -3055.87276150 +4 3 1 1 4 72068.69430953 80914.12816547 -67095.10810166 +4 3 1 1 5 0.92123087 3079.99615590 535.68503855 +4 3 1 1 6 -3065.71707742 -94.95105147 -888.64500536 +4 3 1 1 7 3.44925977 3075.04721797 -1559.22609435 +4 3 1 1 8 536.00639816 -3081.11020253 -0.34278358 +4 3 1 2 1 -80900.84530177 -67087.74896669 72062.40637325 +4 3 1 2 2 -3074.61873850 -1559.29036627 0.52488736 +4 3 1 2 3 82.62155460 -893.18688778 -3055.78706561 +4 3 1 2 4 80913.74253394 72064.01317128 -67096.69347571 +4 3 1 2 5 3079.08563701 2.01385353 -1557.41576857 +4 3 1 2 6 -3081.14233849 536.00639816 -0.32135961 +4 3 1 2 7 3076.09699268 3.89916321 535.63147862 +4 3 1 2 8 -94.95105147 -3065.72778941 -888.64500536 +4 3 1 3 1 72061.67795815 72062.13857358 -74113.49476794 +4 3 1 3 2 -3055.20861832 -3055.20861832 9478.51227895 +4 3 1 3 3 3055.10149845 3055.57282587 -9478.69438273 +4 3 1 3 4 -72061.52799033 -72064.27025896 74111.50233838 +4 3 1 3 5 -539.02717845 -1555.40191504 -1.75676584 +4 3 1 3 6 1557.40505658 537.82743592 3.59922758 +4 3 1 3 7 -1556.30172194 -538.08452360 -3.13861215 +4 3 1 3 8 537.82743592 1557.40505658 3.58851560 +4 1 2 1 1 -0.02142397 -0.00000000 897.49310650 +4 1 2 1 2 -0.81411100 0.51417537 -5.49524926 +4 1 2 1 3 -0.02142397 -0.00000000 897.62165034 +4 1 2 1 4 0.84624696 -0.47132742 -5.44168932 +4 1 2 1 5 0.04284795 -0.04284795 -895.17931734 +4 1 2 1 6 0.01071199 -0.29993563 -1.32828637 +4 1 2 1 7 -0.04284795 -0.08569589 -886.63115183 +4 1 2 1 8 0.04284795 0.32135961 -1.24259047 +4 1 2 2 1 538.64154692 -538.57727500 -82.99647414 +4 1 2 2 2 1.47825419 -5.47382528 -2969.45916356 +4 1 2 2 3 -538.74866679 538.72724282 -83.03932209 +4 1 2 2 4 -5.47382528 1.56395008 -2969.46987555 +4 1 2 2 5 540.20549700 540.18407303 -80.89692471 +4 1 2 2 6 -0.73912709 -0.81411100 2913.96035967 +4 1 2 2 7 -535.70646252 -535.55649471 -99.87856542 +4 1 2 2 8 0.17139179 0.17139179 3371.86566168 +4 1 2 3 1 -1559.79382965 -3074.91867413 3058.48648630 +4 1 2 3 2 -5.03463382 -2969.84479509 -1.70320591 +4 1 2 3 3 -1559.77240568 -3074.89725015 -3056.17269714 +4 1 2 3 4 8.11968603 11785.02800014 -7.17703119 +4 1 2 3 5 1560.88645231 -3075.17576181 -3060.02901240 +4 1 2 3 6 -0.04284795 573.30553638 1.07119869 +4 1 2 3 7 1556.49453770 -3078.68929350 3064.50662291 +4 1 2 3 8 -0.77126305 2915.25651008 0.87838292 +4 2 2 1 1 -538.59869897 538.62012295 -83.01789811 +4 2 2 1 2 5.50596124 -1.55323809 -2969.43773959 +4 2 2 1 3 538.70581884 -538.64154692 -83.08217003 +4 2 2 1 4 -1.58537405 5.39884137 -2969.44845157 +4 2 2 1 5 -540.24834495 -540.22692098 -80.89692471 +4 2 2 1 6 -0.09640788 -0.06427192 3371.94064559 +4 2 2 1 7 535.51364676 535.59934265 -99.79286952 +4 2 2 1 8 0.74983908 0.83553497 2914.00320762 +4 2 2 2 1 -0.02142397 -0.06427192 897.40741060 +4 2 2 2 2 -0.49275140 0.79268703 -5.40955336 +4 2 2 2 3 0.06427192 0.04284795 897.57880239 +4 2 2 2 4 0.54631133 -0.83553497 -5.44168932 +4 2 2 2 5 0.04284795 0.02142397 -895.00792555 +4 2 2 2 6 -0.27851166 0.02142397 -1.17831855 +4 2 2 2 7 0.06427192 -0.04284795 -886.60972786 +4 2 2 2 8 0.27851166 -0.03213596 -1.14618259 +4 2 2 3 1 -3074.89725015 -1559.75098171 3058.22939861 +4 2 2 3 2 -2969.74838720 -5.06676978 -0.14996782 +4 2 2 3 3 -3075.02579400 -1559.75098171 -3056.17269714 +4 2 2 3 4 11784.94230425 8.09826206 5.29172151 +4 2 2 3 5 -3075.17576181 1560.86502834 3060.02901240 +4 2 2 3 6 2915.24579810 -0.68556716 -1.32828637 +4 2 2 3 7 -3078.66786953 1556.58023360 -3064.39950304 +4 2 2 3 8 573.24126446 -0.14996782 -1.51039015 +4 3 2 1 1 -1559.79382965 -3074.85440221 -3058.35794245 +4 3 2 1 2 8.76240525 11785.57431147 6.13796847 +4 3 2 1 3 -1559.77240568 -3074.85440221 3058.35794245 +4 3 2 1 4 -5.72020098 -2970.47680231 0.81411100 +4 3 2 1 5 1560.84360436 -3075.11148989 3059.85762061 +4 3 2 1 6 -0.85695895 2915.35291796 -0.98550279 +4 3 2 1 7 1556.58023360 -3078.71071747 -3064.50662291 +4 3 2 1 8 0.02142397 573.13414459 -1.26401445 +4 3 2 2 1 -3074.89725015 -1559.81525363 -3058.33651848 +4 3 2 2 2 11785.67071936 8.88023710 -6.14868045 +4 3 2 2 3 -3074.96152208 -1559.77240568 3058.35794245 +4 3 2 2 4 -2970.55178622 -5.72020098 -0.79268703 +4 3 2 2 5 -3075.17576181 1560.77933244 -3059.85762061 +4 3 2 2 6 573.15556856 -0.00000000 1.26401445 +4 3 2 2 7 -3078.62502158 1556.55880962 3064.46377496 +4 3 2 2 8 2915.31007002 -0.82482299 1.09262266 +4 3 2 3 1 0.02142397 0.04284795 9477.92311967 +4 3 2 3 2 10.06926764 -8.89094909 -7.55195073 +4 3 2 3 3 0.02142397 0.06427192 9480.19406088 +4 3 2 3 4 -10.10140360 8.80525319 -7.64835861 +4 3 2 3 5 -0.02142397 -0.00000000 -9481.99367468 +4 3 2 3 6 -1.34971034 -1.15689458 -2.89223645 +4 3 2 3 7 0.02142397 -0.02142397 -9454.99946781 +4 3 2 3 8 1.37113432 1.27472644 -2.92437241 +4 1 3 1 1 1.11404663 539.33782607 1559.91166151 +4 1 3 1 2 -0.98550279 -539.63776170 -1558.30486348 +4 1 3 1 3 -74175.68856360 -72096.66330721 -72070.11900379 +4 1 3 1 4 74178.28086442 72099.64123955 72070.54748326 +4 1 3 1 5 -9476.48771343 -3068.94138546 -3067.31316346 +4 1 3 1 6 9473.11343757 3066.24196478 3063.99244754 +4 1 3 1 7 1.11404663 1560.60794065 540.18407303 +4 1 3 1 8 -0.23566371 -1560.57580469 -539.02717845 +4 1 3 2 1 -537.97740374 0.28922365 3074.46877068 +4 1 3 2 2 -1.09262266 537.79529996 -3073.51540385 +4 1 3 2 3 -72094.52090984 -67133.64983035 -80914.36382918 +4 1 3 2 4 67120.10987897 72106.92539061 80913.67826202 +4 1 3 2 5 3068.55575394 -888.51646152 94.58684391 +4 1 3 2 6 -0.68556716 -1558.31557547 -3077.59667084 +4 1 3 2 7 1556.83732128 -0.44990345 3075.21860976 +4 1 3 2 8 888.79497318 -3064.20668728 -92.28376674 +4 1 3 3 1 1558.65835905 3074.39378677 0.33207159 +4 1 3 3 2 893.40112752 -83.06074606 -3055.92632144 +4 1 3 3 3 -72063.34902810 -80910.63605775 -67096.92913942 +4 1 3 3 4 67082.62863697 80901.68083674 72061.67795815 +4 1 3 3 5 3067.69879499 95.29383505 -887.95943820 +4 1 3 3 6 -2.87081248 -3077.38243110 -1558.18703163 +4 1 3 3 7 -534.67811179 3079.12848496 0.28922365 +4 1 3 3 8 -1.41398226 -3079.39628463 536.61698141 +4 2 3 1 1 0.44990345 -538.82365070 3074.52233062 +4 2 3 1 2 537.61319618 -0.99621478 -3073.61181173 +4 2 3 1 3 -67120.24913480 -72104.89011311 -80914.06389354 +4 2 3 1 4 72093.68537486 67135.27805235 80912.26427975 +4 2 3 1 5 2.02456552 1559.72955773 3080.16754769 +4 2 3 1 6 -3065.11720616 889.43769239 -91.65175952 +4 2 3 1 7 -889.90901981 3060.92881930 89.74502586 +4 2 3 1 8 -1558.44411931 -0.73912709 -3077.48955097 +4 2 3 2 1 538.83436268 -0.52488736 1558.35842341 +4 2 3 2 2 -539.51992984 -1.10333465 -1558.17631964 +4 2 3 2 3 -72110.97452164 -74174.93872452 -72077.06037127 +4 2 3 2 4 72107.21461426 74175.66713963 72073.84677521 +4 2 3 2 5 1560.61865264 -1.07119869 538.29876334 +4 2 3 2 6 -1559.64386184 -0.85695895 -539.69132163 +4 2 3 2 7 -3062.98552077 -9470.47828881 -3059.66480485 +4 2 3 2 8 3066.37050862 9473.19913347 3063.87461568 +4 2 3 3 1 3074.61873850 1560.09376528 0.57844729 +4 2 3 3 2 -83.10359401 893.41183951 -3055.90489746 +4 2 3 3 3 -80911.79295233 -72070.01188392 -67095.21522152 +4 2 3 3 4 80901.47730899 67093.20136800 72061.07808688 +4 2 3 3 5 3081.31373028 -535.96355021 0.29993563 +4 2 3 3 6 -3079.41770861 -1.41398226 536.58484545 +4 2 3 3 7 94.20121239 3063.58539204 -889.24487662 +4 2 3 3 8 -3077.36100713 -2.88152446 -1558.19774361 +4 3 3 1 1 -893.35827957 82.96433818 3055.88347349 +4 3 3 1 2 -1559.57958992 -3074.39378677 -0.48203941 +4 3 3 1 3 -67084.21401103 -80901.08096548 -72060.94954304 +4 3 3 1 4 72063.67038770 80909.58628304 67096.45781200 +4 3 3 1 5 2.21738128 3079.48198053 1557.20152883 +4 3 3 1 6 -3066.55261240 -94.17978841 889.22345265 +4 3 3 1 7 2.67799671 3077.90731846 -536.87406909 +4 3 3 1 8 535.10659126 -3080.32822749 -0.23566371 +4 3 3 2 1 83.51064951 -893.69035117 3055.93703342 +4 3 3 2 2 -3074.40449876 -1559.57958992 -0.48203941 +4 3 3 2 3 -80901.88436449 -67087.65255881 -72061.63511020 +4 3 3 2 4 80909.41489125 72070.16185173 67094.65819821 +4 3 3 2 5 3081.80648168 -0.59987126 -536.92762902 +4 3 3 2 6 -3080.32822749 535.17086318 -0.27851166 +4 3 3 2 7 3076.03272076 2.72084466 1559.70813376 +4 3 3 2 8 -94.15836444 -3066.55261240 889.20202868 +4 3 3 3 1 -3055.52997792 -3055.10149845 -9478.78007862 +4 3 3 3 2 3055.93703342 3055.92632144 9477.76243987 +4 3 3 3 3 -72064.25954698 -72063.75608360 -74111.05243493 +4 3 3 3 4 72065.14864189 72062.25640544 74111.86654593 +4 3 3 3 5 1555.38049107 539.07002640 -1.69249392 +4 3 3 3 6 -1556.44097777 -538.29876334 2.63514877 +4 3 3 3 7 538.12737155 1556.36599386 -3.14932413 +4 3 3 3 8 -538.29876334 -1556.44097777 2.61372479 +4 1 4 1 1 -74167.86881320 -67132.10730425 67088.54165371 +4 1 4 1 2 2.12097340 -5.62379310 7.29486305 +4 1 4 1 3 74174.06034160 67119.38146386 67080.43267967 +4 1 4 1 4 -115.00389085 213.51132196 -123.83056802 +4 1 4 1 5 74170.60036985 -67112.39724844 -67088.53094173 +4 1 4 1 6 -1.14618259 3.74919540 -8.50531756 +4 1 4 1 7 -74062.48428654 66921.46679477 -66963.46849522 +4 1 4 1 8 -0.36420755 -7.75547848 8.25894186 +4 1 4 2 1 -72109.04636401 -72098.14156139 80899.57057533 +4 1 4 2 2 -1.04977471 2.06741346 11786.03492691 +4 1 4 2 3 72098.14156139 72106.94681459 80899.83837500 +4 1 4 2 4 224.35185265 -222.12375939 -329275.61390950 +4 1 4 2 5 -72115.45213215 72109.00351606 80901.80938058 +4 1 4 2 6 1.77818982 2.80654056 -2957.25821053 +4 1 4 2 7 71902.15504993 -71902.15504993 80705.06231805 +4 1 4 2 8 -0.74983908 1.71391790 -2959.42203188 +4 1 4 3 1 72071.85434566 80911.31091292 -72063.58469181 +4 1 4 3 2 -5.01320985 -2970.33754648 -6.90923152 +4 1 4 3 3 72067.01252760 80914.34240520 72060.00688820 +4 1 4 3 4 -122.05237820 -329280.77708716 -108.19106722 +4 1 4 3 5 -72081.31303005 80900.65248600 72062.59918902 +4 1 4 3 6 6.70570377 -2956.65833927 -0.27851166 +4 1 4 3 7 -71944.31743018 80700.02768423 -71944.98157337 +4 1 4 3 8 7.02706338 11781.39663660 1.52110213 +4 2 4 1 1 -72109.41057156 -72098.72000868 80899.81695103 +4 2 4 1 2 -0.42847947 1.36042233 11785.11369604 +4 2 4 1 3 72098.07728947 72106.58260703 80899.66698321 +4 2 4 1 4 223.35563787 -219.03870717 -329277.49921918 +4 2 4 1 5 -72115.58067599 72108.76785235 80901.98077237 +4 2 4 1 6 1.69249392 2.72084466 -2957.42960232 +4 2 4 1 7 71903.05485683 -71903.27980855 80708.00811444 +4 2 4 1 8 -0.79268703 1.81032578 -2959.59342367 +4 2 4 2 1 -67118.22456928 -74175.37791599 67079.97206423 +4 2 4 2 2 5.48453727 -1.55323809 7.11275927 +4 2 4 2 3 67135.19235646 74168.57580433 67091.05897063 +4 2 4 2 4 -220.20631374 114.48971549 -124.04480776 +4 2 4 2 5 67118.71732068 -74169.04713176 -67089.64498836 +4 2 4 2 6 6.95207947 0.57844729 6.55573595 +4 2 4 2 7 -66924.08051956 74057.52463663 -66964.67894973 +4 2 4 2 8 -3.83489129 4.91680197 -6.14868045 +4 2 4 3 1 80912.67133525 72070.05473187 -72065.10579394 +4 2 4 3 2 -2970.15544271 -4.95964991 10.48703513 +4 2 4 3 3 80912.01790406 72068.21227013 72057.73594698 +4 2 4 3 4 -329277.20999554 -122.99503305 112.11165440 +4 2 4 3 5 80896.86044266 -72079.95260772 -72061.65653417 +4 2 4 3 6 11782.30715548 7.66978259 1.11404663 +4 2 4 3 7 80700.12409211 -71944.87445350 71945.33506893 +4 2 4 3 8 -2956.48694748 6.60929589 -0.02142397 +4 3 4 1 1 72071.68295387 80911.37518484 -72063.56326783 +4 3 4 1 2 -4.97036190 -2970.33754648 -6.88780755 +4 3 4 1 3 72066.86255978 80914.12816547 72059.62125667 +4 3 4 1 4 -122.02024224 -329280.15579192 -108.46957887 +4 3 4 1 5 -72081.28089409 80900.58821408 72062.81342875 +4 3 4 1 6 6.69499178 -2956.65833927 -0.21423974 +4 3 4 1 7 -71943.97464660 80699.85629244 -71944.61736582 +4 3 4 1 8 7.09133530 11781.30022872 1.48896617 +4 3 4 2 1 80912.49994346 72069.87262809 -72065.06294599 +4 3 4 2 2 -2970.11259476 -4.95964991 10.51917109 +4 3 4 2 3 80912.02861604 72068.21227013 72057.77879493 +4 3 4 2 4 -329277.27426746 -122.84506523 111.29754340 +4 3 4 2 5 80896.81759471 -72079.84548785 -72061.42087046 +4 3 4 2 6 11782.24288356 7.77690246 0.96407882 +4 3 4 2 7 80700.35975583 -71944.96014939 71945.57073265 +4 3 4 2 8 -2956.50837145 6.59858390 -0.09640788 +4 3 4 3 1 -67096.30784418 -67097.92535420 74105.35365793 +4 3 4 3 2 4.34906666 -1.46754220 -7.12347126 +4 3 4 3 3 67094.73318212 67093.13709607 74109.12427730 +4 3 4 3 4 -107.88041960 110.91191188 4.58473037 +4 3 4 3 5 67086.95627966 -67087.33119920 -74078.23090722 +4 3 4 3 6 -0.88909491 -1.11404663 -5.99871264 +4 3 4 3 7 -66981.47534512 66981.07900160 -74121.55018205 +4 3 4 3 8 0.64271921 2.61372479 -5.98800065 +4 1 5 1 1 1.30686240 -1559.55816594 -536.92762902 +4 1 5 1 2 -0.21423974 540.80536827 1560.30800502 +4 1 5 1 3 -9477.32324841 3068.19154638 3067.05607578 +4 1 5 1 4 74173.47118233 -72113.84533412 -72079.65267209 +4 1 5 1 5 -74162.65207560 72101.22661361 72062.02074173 +4 1 5 1 6 9463.84756895 -3060.07186035 -3055.14434640 +4 1 5 1 7 0.55702332 -537.76316400 -1559.04399057 +4 1 5 1 8 1.04977471 1561.01499615 541.65161523 +4 1 5 2 1 -1560.00806939 0.37491954 3080.60673915 +4 1 5 2 2 0.23566371 539.92698534 -3074.61873850 +4 1 5 2 3 -3068.90924950 -888.08798204 94.95105147 +4 1 5 2 4 -67118.25670525 72109.47484348 80903.18051490 +4 1 5 2 5 72102.62988389 -67157.19477746 -80923.70468171 +4 1 5 2 6 0.73912709 -1552.98100601 -3070.56960747 +4 1 5 2 7 533.88542476 3.67421149 3077.27531124 +4 1 5 2 8 -890.38034723 -3055.08007448 -86.33861404 +4 1 5 3 1 537.95597976 3080.69243504 0.36420755 +4 1 5 3 2 -890.89452260 -81.12187644 -3057.53311947 +4 1 5 3 3 -3066.99180386 94.69396378 -888.06655807 +4 1 5 3 4 -67091.70168984 80902.47352377 72061.63511020 +4 1 5 3 5 72057.84306685 -80921.94791587 -67086.28142449 +4 1 5 3 6 7.01635139 -3071.96216576 -1561.50774755 +4 1 5 3 7 -1556.53738565 3074.92938612 -3.53495566 +4 1 5 3 8 3.23502003 -3077.67165475 534.88163954 +4 2 5 1 1 888.06655807 3068.93067348 94.88677954 +4 2 5 1 2 -540.16264905 -0.47132742 -3074.66158644 +4 2 5 1 3 -0.39634351 1559.98664542 3080.46748332 +4 2 5 1 4 -72109.92474693 67118.39596107 80902.75203543 +4 2 5 1 5 67159.65853443 -72100.92667798 -80924.24028106 +4 2 5 1 6 3054.27667546 889.54481225 -86.89563735 +4 2 5 1 7 -3.66349950 -533.89613675 3077.30744720 +4 2 5 1 8 1552.14547104 -1.60679803 -3069.96973620 +4 2 5 2 1 -3069.32701699 9475.36295481 3068.47005804 +4 2 5 2 2 -540.71967237 0.14996782 1560.14732522 +4 2 5 2 3 1560.64007661 -1.00692676 -536.15636597 +4 2 5 2 4 72113.71679028 -74171.01813734 -72081.98788522 +4 2 5 2 5 -72101.65509308 74162.74848349 72060.64960741 +4 2 5 2 6 -1560.04020535 -0.57844729 542.36931835 +4 2 5 2 7 537.74174003 -0.78197504 -1559.24751832 +4 2 5 2 8 3059.64338088 -9464.82235975 -3054.46949123 +4 2 5 3 1 94.67253981 -3066.99180386 888.12011800 +4 2 5 3 2 -81.13258843 -891.18374624 3057.27603178 +4 2 5 3 3 3080.62816312 537.97740374 -0.47132742 +4 2 5 3 4 80904.42310538 -67093.73696734 -72063.28475617 +4 2 5 3 5 -80923.98319337 72062.10643762 67085.91721694 +4 2 5 3 6 -3076.60045606 3.51353169 -534.09966450 +4 2 5 3 7 3074.96152208 -1556.52667366 3.55637964 +4 2 5 3 8 -3072.99051650 5.07748177 1562.87888187 +4 3 5 1 1 -1.58537405 3078.94638119 -537.81672393 +4 3 5 1 2 1560.58651668 -3074.75799433 -0.68556716 +4 3 5 1 3 -0.21423974 3080.31751550 1555.20909928 +4 3 5 1 4 -72075.29289344 80900.22400653 67090.52337128 +4 3 5 1 5 67095.81509279 -80906.99398222 -72056.42908459 +4 3 5 1 6 3062.98552077 -92.48729449 891.40869797 +4 3 5 1 7 889.60908418 93.36567741 3056.70829648 +4 3 5 1 8 -531.95726712 -3078.65715754 0.74983908 +4 3 5 2 1 3080.63887511 -0.43919146 -1554.99485954 +4 3 5 2 2 -3074.68301042 1560.53295675 0.50346338 +4 3 5 2 3 3080.78884292 -0.27851166 539.11287434 +4 3 5 2 4 80897.57814578 -72076.97467537 -67092.08732136 +4 3 5 2 5 -80907.37961375 67096.80059558 72055.31503796 +4 3 5 2 6 -3077.67165475 -531.48593970 -0.04284795 +4 3 5 2 7 93.68703702 889.83403590 -3056.89040025 +4 3 5 2 8 -92.91577396 3062.02144196 -890.78740273 +4 3 5 3 1 536.94905300 -1557.46932851 -2.79582857 +4 3 5 3 2 3057.07250403 -3056.72972045 -9482.87205760 +4 3 5 3 3 1557.45861652 -536.92762902 -2.78511658 +4 3 5 3 4 72065.11650593 -72064.76301036 -74082.62282182 +4 3 5 3 5 -72059.20348918 72057.02895585 74119.92196005 +4 3 5 3 6 -1553.81654099 540.29119290 -7.06991132 +4 3 5 3 7 -3064.09956741 3064.05671946 9465.71145466 +4 3 5 3 8 -539.43423395 1554.64136398 -7.60551067 +4 1 6 1 1 -9471.68874332 0.42847947 -1.88530969 +4 1 6 1 2 0.53559934 -0.61058325 -0.10711987 +4 1 6 1 3 9471.73159127 -0.44990345 -2.05670148 +4 1 6 1 4 -1.21045451 -1.39255829 6.94136748 +4 1 6 1 5 9461.21242018 1.22116650 5.87016880 +4 1 6 1 6 4.89537799 1.32828637 -6.87709556 +4 1 6 1 7 -9465.60433479 0.40705550 -1.94958161 +4 1 6 1 8 0.19281576 -0.89980690 0.14996782 +4 1 6 2 1 -3065.44927775 1558.55123918 -3077.98230237 +4 1 6 2 2 -0.66414318 -0.73912709 573.18770452 +4 1 6 2 3 3067.67737102 -1558.48696726 -3078.06799826 +4 1 6 2 4 1.92815763 2.44233300 -2958.47937704 +4 1 6 2 5 -3060.86454738 -1552.70249436 -3072.54061305 +4 1 6 2 6 -1.88530969 -6.91994351 11774.93730853 +4 1 6 2 7 3059.62195690 1557.82282407 -3075.45427347 +4 1 6 2 8 -0.44990345 0.17139179 2914.44239908 +4 1 6 3 1 3061.65723440 -3078.00372634 1559.04399057 +4 1 6 3 2 -1.11404663 2913.81039186 0.54631133 +4 1 6 3 3 3065.94202915 -3078.08942224 -1558.97971865 +4 1 6 3 4 -6.56644794 -2960.02190314 -1.64964598 +4 1 6 3 5 -3056.66544853 -3070.33394376 -1562.62179418 +4 1 6 3 6 -6.72712774 11773.54475024 4.77754614 +4 1 6 3 7 -3056.96538416 -3075.53996937 1557.26580076 +4 1 6 3 8 0.51417537 574.76236659 1.45683021 +4 2 6 1 1 3065.89918120 1561.14354000 -3079.48198053 +4 2 6 1 2 -0.02142397 -0.17139179 2915.20295015 +4 2 6 1 3 -3065.87775722 -1561.07926808 -3079.48198053 +4 2 6 1 4 -0.07498391 7.00563940 11783.82825762 +4 2 6 1 5 3053.62324426 -1560.28658105 -3077.03964753 +4 2 6 1 6 3.81346732 -2.39948506 -2963.36404304 +4 2 6 1 7 -3057.15819993 1555.16625133 -3074.08313915 +4 2 6 1 8 -0.23566371 0.70699113 574.67667069 +4 2 6 2 1 -890.70170683 -0.17139179 -1.15689458 +4 2 6 2 2 0.57844729 0.02142397 -0.55702332 +4 2 6 2 3 886.26694428 0.08569589 -1.15689458 +4 2 6 2 4 5.06676978 0.83553497 6.96279145 +4 2 6 2 5 889.07348483 -0.40705550 3.29929195 +4 2 6 2 6 0.43919146 -0.44990345 -6.87709556 +4 2 6 2 7 -891.34442605 -0.17139179 -1.07119869 +4 2 6 2 8 0.59987126 0.20352775 0.62129524 +4 2 6 3 1 -90.70910467 -539.02717845 -536.64911737 +4 2 6 3 2 3371.64070996 -0.82482299 -0.77126305 +4 2 6 3 3 -90.77337659 -539.15572229 536.62769339 +4 2 6 3 4 -2961.93934879 6.98421543 -0.96407882 +4 2 6 3 5 -87.04560517 542.28362245 -534.31390423 +4 2 6 3 6 -2965.24935273 -5.74162495 -0.53559934 +4 2 6 3 7 -89.98068957 535.36367894 537.80601195 +4 2 6 3 8 2914.02463160 0.11783186 -1.01763875 +4 3 6 1 1 -3065.06364622 -3080.70314703 1556.38741783 +4 3 6 1 2 -0.72841511 573.31624836 -0.78197504 +4 3 6 1 3 -3067.16319565 -3080.68172306 -1556.40884181 +4 3 6 1 4 5.81660886 11784.47097683 -0.34278358 +4 3 6 1 5 3064.78513457 -3078.00372634 -1554.78061981 +4 3 6 1 6 5.73091297 -2961.15737375 -2.91366042 +4 3 6 1 7 3055.67994574 -3072.94766855 1559.92237350 +4 3 6 1 8 0.81411100 2915.69570154 -1.17831855 +4 3 6 2 1 -96.57927347 535.49222279 538.19164347 +4 3 6 2 2 2915.50288578 -0.24637570 -1.30686240 +4 3 6 2 3 -94.41545212 535.55649471 -538.21306745 +4 3 6 2 4 -2955.74782039 6.42719211 -2.48518095 +4 3 6 2 5 -95.87228234 -531.74302739 539.49850587 +4 3 6 2 6 -2958.95070446 -7.62693464 0.89980690 +4 3 6 2 7 -88.56670730 -538.77009076 -536.00639816 +4 3 6 2 8 3374.57579436 0.98550279 -0.43919146 +4 3 6 3 1 -885.38856136 -0.10711987 2.42090903 +4 3 6 3 2 -0.89980690 0.91051888 -1.99242955 +4 3 6 3 3 887.57380667 0.19281576 2.61372479 +4 3 6 3 4 -0.18210378 -1.24259047 -3.96343514 +4 3 6 3 5 892.20138499 -0.59987126 -7.41269490 +4 3 6 3 6 -1.61751001 0.10711987 3.87773924 +4 3 6 3 7 -892.13711307 -0.08569589 2.44233300 +4 3 6 3 8 0.55702332 0.74983908 1.96029359 +4 1 7 1 1 9469.50349801 -3060.32894803 3063.82105575 +4 1 7 1 2 0.64271921 -536.16707796 1555.77683458 +4 1 7 1 3 0.87838292 1556.77304936 -534.87092755 +4 1 7 1 4 -74060.30975321 71902.24074582 -71939.98978750 +4 1 7 1 5 1.09262266 534.61383986 -1556.60165757 +4 1 7 1 6 -9463.10844185 3057.22247185 -3060.00758843 +4 1 7 1 7 74050.93676471 -71899.38064533 71936.81903939 +4 1 7 1 8 0.34278358 -1555.12340339 535.12801523 +4 1 7 2 1 3064.20668728 890.15539551 93.68703702 +4 1 7 2 2 -0.38563153 -535.46008683 -3078.36793390 +4 1 7 2 3 1561.08998006 -0.51417537 3079.05350105 +4 1 7 2 4 66920.29918820 -71901.25524303 80698.90292561 +4 1 7 2 5 -537.74174003 2.07812545 3074.42592273 +4 1 7 2 6 -0.11783186 1557.43719255 -3075.00437002 +4 1 7 2 7 -71897.54889558 66928.76165781 -80701.76302610 +4 1 7 2 8 890.23037941 3058.80784590 -90.81622454 +4 1 7 3 1 -3059.57910895 90.83764851 889.48054033 +4 1 7 3 2 -884.51017843 -101.45322749 3065.36358186 +4 1 7 3 3 540.19478501 3075.30430566 0.47132742 +4 1 7 3 4 -66970.30274283 80708.32947404 -71949.58772772 +4 1 7 3 5 -1559.75098171 3079.71764424 -1.64964598 +4 1 7 3 6 -2.21738128 -3075.60424129 1556.98728910 +4 1 7 3 7 71936.66907157 -80703.77687963 66976.95488667 +4 1 7 3 8 -0.47132742 -3073.19404425 -537.62390817 +4 2 7 1 1 -0.44990345 -1561.74341126 3079.73906821 +4 2 7 1 2 535.81358239 0.53559934 -3078.19654211 +4 2 7 1 3 -890.35892326 -3064.14241535 93.70846099 +4 2 7 1 4 71905.44362989 -66921.68103450 80700.27405993 +4 2 7 1 5 -2.24951724 537.65604413 3074.40449876 +4 2 7 1 6 -3056.98680814 -889.00921291 -92.10166296 +4 2 7 1 7 -66934.21405912 71898.48083844 -80702.48072922 +4 2 7 1 8 -1557.05156102 -0.05355993 -3075.19718579 +4 2 7 2 1 -1555.93751439 -0.06427192 -535.36367894 +4 2 7 2 2 536.02782213 -0.58915928 1555.58401882 +4 2 7 2 3 3061.16448301 -9468.73223495 3064.35665509 +4 2 7 2 4 -71906.13990904 74059.80628983 -71941.46804168 +4 2 7 2 5 -534.33532821 -0.81411100 -1556.58023360 +4 2 7 2 6 1554.09505265 -0.74983908 535.89927829 +4 2 7 2 7 71901.76941840 -74052.84349837 71936.95829522 +4 2 7 2 8 -3056.81541635 9464.09394464 -3059.30059730 +4 2 7 3 1 3076.31123242 540.66611244 -1.14618259 +4 2 7 3 2 -101.95669087 -884.86367400 -3065.44927775 +4 2 7 3 3 90.40916904 -3060.60745969 -890.20895544 +4 2 7 3 4 80704.86950229 -66967.82827387 71949.52345579 +4 2 7 3 5 3079.81405212 -1559.81525363 1.90673366 +4 2 7 3 6 -3074.95081009 -1.90673366 538.83436268 +4 2 7 3 7 -80698.02454269 71937.30107879 -66975.86226401 +4 2 7 3 8 -3076.54689613 -2.86010049 -1557.45861652 +4 3 7 1 1 5.48453727 3079.31058874 -1557.96207990 +4 3 7 1 2 1556.96586512 -3078.74285344 -0.55702332 +4 3 7 1 3 2.77440459 3075.30430566 537.95597976 +4 3 7 1 4 -71947.45604233 80700.16694006 -66984.34615759 +4 3 7 1 5 891.07662637 93.36567741 -3062.70700912 +4 3 7 1 6 3057.27603178 -88.43816346 -890.61601094 +4 3 7 1 7 66971.77028503 -80709.42209670 71957.31107024 +4 3 7 1 8 -537.80601195 -3071.57653423 0.99621478 +4 3 7 2 1 3075.56139334 2.24951724 -538.30947533 +4 3 7 2 2 -3078.64644555 1557.10512095 0.46061543 +4 3 7 2 3 3077.35029514 2.72084466 1556.10890618 +4 3 7 2 4 80699.50279688 -71939.83981968 66983.63916646 +4 3 7 2 5 93.09787774 890.53031505 3062.98552077 +4 3 7 2 6 -3071.65151814 -537.67746810 -0.87838292 +4 3 7 2 7 -80707.36539523 66966.68209127 -71955.26508075 +4 3 7 2 8 -87.73117233 3058.17583868 891.34442605 +4 3 7 3 1 -1559.30107826 537.32397254 -2.94579638 +4 3 7 3 2 -3067.63452307 3067.61309909 -9457.99882413 +4 3 7 3 3 -534.90306351 1561.78625921 -1.28543842 +4 3 7 3 4 -71944.41383807 71937.89023807 -74124.67808221 +4 3 7 3 5 3058.44363835 -3057.56525543 9466.09708619 +4 3 7 3 6 1560.44726085 -535.77073444 2.18524532 +4 3 7 3 7 71951.70870111 -71950.78747024 74116.21561260 +4 3 7 3 8 535.79215842 -1560.43654886 2.24951724 +4 1 8 1 1 -0.19281576 -886.43833607 -1.15689458 +4 1 8 1 2 -0.00000000 0.23566371 -0.35349557 +4 1 8 1 3 0.10711987 886.37406415 -1.37113432 +4 1 8 1 4 -0.81411100 -1.41398226 8.20538193 +4 1 8 1 5 0.42847947 -891.19445823 3.34213990 +4 1 8 1 6 -0.20352775 0.19281576 0.34278358 +4 1 8 1 7 0.23566371 888.98778894 -1.09262266 +4 1 8 1 8 0.38563153 3.27786798 -8.23751789 +4 1 8 2 1 1561.14354000 3065.96345312 -3079.41770861 +4 1 8 2 2 0.06427192 -0.09640788 2915.23508611 +4 1 8 2 3 -1561.14354000 -3065.96345312 -3079.39628463 +4 1 8 2 4 -6.39505615 -0.72841511 11784.34243299 +4 1 8 2 5 1560.30800502 -3053.68751619 -3076.99679958 +4 1 8 2 6 -0.68556716 0.06427192 574.69809467 +4 1 8 2 7 -1555.14482736 3059.10778153 -3074.08313915 +4 1 8 2 8 1.84246174 -4.65971428 -2964.22100199 +4 1 8 3 1 -538.98433050 -90.73052865 -536.60626942 +4 1 8 3 2 -0.81411100 3371.73711784 0.61058325 +4 1 8 3 3 -539.09145037 -90.75195262 536.62769339 +4 1 8 3 4 6.39505615 -2961.07167785 0.34278358 +4 1 8 3 5 542.24077450 -87.06702914 534.14251244 +4 1 8 3 6 0.10711987 2914.21744736 1.17831855 +4 1 8 3 7 535.29940702 -92.12308694 -537.76316400 +4 1 8 3 8 -5.14175369 -2964.29598590 1.31757438 +4 2 8 1 1 1558.50839123 -3065.49212570 -3078.08942224 +4 2 8 1 2 1.00692676 0.31064762 573.34838433 +4 2 8 1 3 -1558.55123918 3067.63452307 -3077.93945442 +4 2 8 1 4 -3.79204335 -3.79204335 -2957.10824272 +4 2 8 1 5 1552.70249436 3058.59360616 -3072.54061305 +4 2 8 1 6 -0.40705550 -0.02142397 2914.30314325 +4 2 8 1 7 -1557.73712818 -3057.43671158 -3075.58281731 +4 2 8 1 8 8.29107782 0.14996782 11773.71614203 +4 2 8 2 1 0.42847947 -9471.62447140 -1.92815763 +4 2 8 2 2 0.89980690 -0.31064762 -0.23566371 +4 2 8 2 3 -0.42847947 9473.93826056 -1.97100558 +4 2 8 2 4 -0.57844729 2.14239737 6.25580032 +4 2 8 2 5 -1.17831855 -9463.44051345 5.65592906 +4 2 8 2 6 0.69627915 -0.14996782 0.36420755 +4 2 8 2 7 -0.32135961 9463.56905729 -1.97100558 +4 2 8 2 8 0.72841511 -4.01699507 -6.23437635 +4 2 8 3 1 -3078.11084621 3061.63581043 1558.97971865 +4 2 8 3 2 2913.91751173 -0.94265484 -1.18903054 +4 2 8 3 3 -3078.02515032 3065.98487709 -1558.80832686 +4 2 8 3 4 -2960.77174222 -5.76304893 -2.87081248 +4 2 8 3 5 -3070.37679170 -3054.45877924 1562.49325034 +4 2 8 3 6 574.69809467 0.70699113 -0.79268703 +4 2 8 3 7 -3075.45427347 -3061.29302685 -1557.33007268 +4 2 8 3 8 11774.25174137 -5.83803283 -0.42847947 +4 3 8 1 1 535.47079881 -96.60069744 538.38445924 +4 3 8 1 2 -0.44990345 2915.17081419 0.94265484 +4 3 8 1 3 535.53507073 -94.47972404 -538.25591539 +4 3 8 1 4 7.70191855 -2957.60099411 -0.02142397 +4 3 8 1 5 -531.87157123 -91.58748759 -539.45565792 +4 3 8 1 6 1.18903054 3374.34013065 0.92123087 +4 3 8 1 7 -538.70581884 -88.48101141 536.02782213 +4 3 8 1 8 -8.86952511 -2960.78245421 1.60679803 +4 3 8 2 1 -3080.68172306 -3064.99937430 1556.28029797 +4 3 8 2 2 573.32696035 -0.81411100 1.18903054 +4 3 8 2 3 -3080.63887511 -3067.18461962 -1556.40884181 +4 3 8 2 4 11784.55667272 5.76304893 2.93508440 +4 3 8 2 5 -3078.04657429 3062.59988925 1554.60922802 +4 3 8 2 6 2915.72783750 0.92123087 0.79268703 +4 3 8 2 7 -3072.92624457 3057.97231093 -1559.92237350 +4 3 8 2 8 -2961.24306964 5.69877701 0.25708768 +4 3 8 3 1 -0.10711987 -885.36713738 2.48518095 +4 3 8 3 2 -0.85695895 0.19281576 -2.08883744 +4 3 8 3 3 0.12854384 887.61665462 2.52802890 +4 3 8 3 4 0.54631133 -2.54945287 -4.62757832 +4 3 8 3 5 0.38563153 -890.08041160 -7.36984695 +4 3 8 3 6 -0.84624696 -1.09262266 2.01385353 +4 3 8 3 7 0.23566371 892.22280897 2.52802890 +4 3 8 3 8 0.57844729 -1.04977471 4.59544236 +5 1 1 1 1 -0.02142397 -0.03213596 -9.10518883 +5 1 1 1 2 -0.83553497 -890.29465133 -0.14996782 +5 1 1 1 3 0.03213596 -0.04284795 0.87838292 +5 1 1 1 4 0.88909491 890.14468352 -0.29993563 +5 1 1 1 5 -0.11783186 -0.06427192 13.28286370 +5 1 1 1 6 -0.62129524 -889.56623623 -2.35663711 +5 1 1 1 7 0.06427192 0.04284795 0.43919146 +5 1 1 1 8 0.53559934 889.50196431 -2.49589294 +5 1 1 2 1 1.24259047 -1.84246174 2959.80766341 +5 1 1 2 2 1560.54366873 -3071.70507807 3080.36036345 +5 1 1 2 3 -0.16067980 -0.34278358 -573.00560075 +5 1 1 2 4 -1560.55438072 3071.70507807 3080.42463537 +5 1 1 2 5 -1.24259047 -1.82103777 -11776.28701887 +5 1 1 2 6 1553.15239780 3059.42914114 3071.76934999 +5 1 1 2 7 0.14996782 -0.32135961 -2914.66735081 +5 1 1 2 8 -1553.10954986 -3055.03722653 3071.87646986 +5 1 1 3 1 -13.11147191 2961.20022170 0.61058325 +5 1 1 3 2 -536.04924610 94.73681173 538.23449142 +5 1 1 3 3 -0.22495172 -2914.47453504 0.17139179 +5 1 1 3 4 -536.15636597 94.75823570 -538.17021950 +5 1 1 3 5 17.32128274 2964.45666570 -0.68556716 +5 1 1 3 6 534.67811179 87.36696477 -537.69889208 +5 1 1 3 7 -1.24259047 -3373.61171554 -0.07498391 +5 1 1 3 8 534.72095973 85.31026330 537.84885989 +5 2 1 1 1 -1.30686240 1.78890180 -11786.34557453 +5 2 1 1 2 1560.86502834 3071.46941436 3081.45298611 +5 2 1 1 3 0.17139179 0.34278358 -2915.31007002 +5 2 1 1 4 -1560.79004443 -3071.38371847 3081.45298611 +5 2 1 1 5 1.31757438 1.73534187 2966.06346373 +5 2 1 1 6 1558.07991176 -3056.30124098 3073.65465968 +5 2 1 1 7 -0.19281576 0.36420755 -574.32317513 +5 2 1 1 8 -1558.05848778 3051.86647842 3073.59038776 +5 2 1 2 1 -0.00000000 -0.04284795 -8.81596518 +5 2 1 2 2 0.79268703 -9474.68809964 0.85695895 +5 2 1 2 3 -0.04284795 -0.04284795 -0.17139179 +5 2 1 2 4 -0.80339901 9474.62382772 1.11404663 +5 2 1 2 5 -0.00000000 -0.00000000 13.36855959 +5 2 1 2 6 -0.12854384 -9456.11351444 -2.91366042 +5 2 1 2 7 -0.06427192 0.02142397 -0.20352775 +5 2 1 2 8 0.06427192 9456.19921033 -2.96722036 +5 2 1 3 1 -11784.51382478 -4.48832249 -0.02142397 +5 2 1 3 2 3081.75292174 3064.99937430 1556.30172194 +5 2 1 3 3 -573.29482439 1.69249392 0.02142397 +5 2 1 3 4 3081.80648168 3065.04222225 -1556.32314591 +5 2 1 3 5 2961.16808574 -4.32764269 -0.04284795 +5 2 1 3 6 3074.46877068 -3061.35729877 1557.35149665 +5 2 1 3 7 -2915.73854949 -0.08569589 0.01071199 +5 2 1 3 8 3074.53304260 -3061.34658679 -1557.33007268 +5 3 1 1 1 -12.21166501 2959.22921612 -0.58915928 +5 3 1 1 2 538.27733937 94.05124457 -536.52057352 +5 3 1 1 3 1.39255829 -3372.17630930 -0.10711987 +5 3 1 1 4 538.19164347 94.00839662 536.45630160 +5 3 1 1 5 13.76490311 2962.50708409 0.64271921 +5 3 1 1 6 -539.45565792 87.28126888 536.07067008 +5 3 1 1 7 -0.29993563 -2914.66735081 0.07498391 +5 3 1 1 8 -539.54135382 89.50936214 -536.02782213 +5 3 1 2 1 2958.07232153 10.61557897 -0.03213596 +5 3 1 2 2 3081.15305048 -3064.33523112 1558.27272752 +5 3 1 2 3 -2913.56401616 1.26401445 0.02142397 +5 3 1 2 4 3081.17447445 -3064.24953522 -1558.29415149 +5 3 1 2 5 -11771.71300049 13.11147191 0.02142397 +5 3 1 2 6 3069.81976839 3052.95910108 1560.60794065 +5 3 1 2 7 -574.99803030 -2.23880525 0.03213596 +5 3 1 2 8 3069.84119236 3052.93767711 -1560.51153277 +5 3 1 3 1 0.04284795 0.02142397 8.22680590 +5 3 1 3 2 -0.10711987 -886.33121620 -1.94958161 +5 3 1 3 3 0.02142397 0.06427192 2.63514877 +5 3 1 3 4 0.12854384 886.43833607 -2.05670148 +5 3 1 3 5 0.04284795 0.04284795 -10.32635533 +5 3 1 3 6 0.14996782 -891.30157810 2.91366042 +5 3 1 3 7 0.02142397 -0.03213596 -2.23880525 +5 3 1 3 8 -0.21423974 891.24801816 2.94579638 +5 1 2 1 1 -1.30686240 1559.55816594 -536.94905300 +5 1 2 1 2 -74173.54616623 72114.10242181 -72080.03830361 +5 1 2 1 3 9477.33396039 -3068.19154638 3067.09892373 +5 1 2 1 4 0.21423974 -540.82679224 1560.32942900 +5 1 2 1 5 74162.80204342 -72101.41942937 72062.32067736 +5 1 2 1 6 -1.03906272 -1561.01499615 541.68375119 +5 1 2 1 7 -0.49275140 537.69889208 -1559.06541455 +5 1 2 1 8 -9463.82614497 3060.06114836 -3055.20861832 +5 1 2 2 1 -888.13082999 -3068.93067348 94.91891551 +5 1 2 2 2 72109.71050720 -67118.04246551 80902.60206761 +5 1 2 2 3 0.37491954 -1560.07234131 3080.55317921 +5 1 2 2 4 540.15193707 0.51417537 -3074.64016247 +5 1 2 2 5 -67159.40144675 72100.60531837 -80923.96176940 +5 1 2 2 6 -1552.13475905 1.52110213 -3069.96973620 +5 1 2 2 7 3.68492348 533.86400078 3077.29673521 +5 1 2 2 8 -3054.28738745 -889.59837219 -86.90634934 +5 1 2 3 1 -0.96407882 3079.87832404 538.44873116 +5 1 2 3 2 -72076.78185961 80900.02047878 -67092.25871315 +5 1 2 3 3 -0.25708768 3080.53175524 -1555.10197941 +5 1 2 3 4 1560.81146840 -3074.42592273 0.47132742 +5 1 2 3 5 67095.39732530 -80910.50751391 72055.91490922 +5 1 2 3 6 -530.69325268 -3076.84683176 0.42847947 +5 1 2 3 7 889.67335610 93.55849317 -3056.79399237 +5 1 2 3 8 3062.79270501 -92.16593488 -891.29086611 +5 2 2 1 1 1560.02949336 -0.34278358 3080.55317921 +5 2 2 1 2 67116.25356370 -72107.95374135 80901.40232508 +5 2 2 1 3 3068.87711354 888.06655807 94.95105147 +5 2 2 1 4 -0.61058325 -540.11980111 -3074.89725015 +5 2 2 1 5 -72098.23796928 67157.04480964 -80923.70468171 +5 2 2 1 6 889.99471570 3055.25146627 -86.12437430 +5 2 2 1 7 -533.88542476 -3.66349950 3077.27531124 +5 2 2 1 8 -2.57087684 1551.70627958 -3069.28416904 +5 2 2 2 1 3068.21297036 -9477.30182443 3067.09892373 +5 2 2 2 2 -72113.95245399 74173.65328610 -72080.02759163 +5 2 2 2 3 -1559.56887793 1.30686240 -536.92762902 +5 2 2 2 4 540.81608025 -0.23566371 1560.30800502 +5 2 2 2 5 72101.40871738 -74162.81275541 72062.36352530 +5 2 2 2 6 -3060.07186035 9463.84756895 -3055.18719435 +5 2 2 2 7 -537.67746810 0.50346338 -1559.04399057 +5 2 2 2 8 1560.97214821 1.01763875 541.68375119 +5 2 2 3 1 3080.48890729 -0.29993563 1555.09126742 +5 2 2 3 2 80900.03119077 -72076.84613153 67092.29084911 +5 2 2 3 3 3079.86761205 -0.96407882 -538.42730718 +5 2 2 3 4 -3074.40449876 1560.80075642 -0.40705550 +5 2 2 3 5 -80910.51822590 67095.42946126 -72055.91490922 +5 2 2 3 6 -92.09095098 3062.81412898 891.23730618 +5 2 2 3 7 93.55849317 889.69478007 3056.82612833 +5 2 2 3 8 -3076.91110368 -530.67182870 -0.46061543 +5 3 2 1 1 537.91313182 3080.69243504 -0.37491954 +5 3 2 1 2 -67092.62292071 80902.98769914 -72062.15999755 +5 3 2 1 3 -3066.97037988 94.71538776 888.08798204 +5 3 2 1 4 -891.09805035 -81.21828432 3057.39386364 +5 3 2 1 5 72060.04973614 -80922.01218779 67086.06718475 +5 3 2 1 6 3.08505221 -3077.55382289 -534.82807960 +5 3 2 1 7 -1556.55880962 3074.97223406 3.57780361 +5 3 2 1 8 6.06298456 -3072.57274901 1562.17189073 +5 3 2 2 1 94.73681173 -3066.95966790 -888.13082999 +5 3 2 2 2 80903.00912311 -67092.44081693 72062.20284550 +5 3 2 2 3 3080.67101107 537.89170784 0.40705550 +5 3 2 2 4 -81.22899631 -891.04449041 -3057.41528761 +5 3 2 2 5 -80922.00147580 72060.00688820 -67086.04576078 +5 3 2 2 6 -3072.59417298 6.06298456 -1562.15046676 +5 3 2 2 7 3075.00437002 -1556.56952161 -3.54566765 +5 3 2 2 8 -3077.53239892 3.07434023 534.81736761 +5 3 2 3 1 -536.86335710 1557.44790453 -2.81725254 +5 3 2 3 2 -72066.28411249 72066.61618409 -74083.90826025 +5 3 2 3 3 -1557.44790453 536.94905300 -2.82796453 +5 3 2 3 4 -3056.81541635 3057.09392801 -9483.02202541 +5 3 2 3 5 72059.08565733 -72061.33517457 74120.22189568 +5 3 2 3 6 540.68753641 -1552.85246217 -6.34149622 +5 3 2 3 7 3064.03529549 -3064.05671946 9465.72216665 +5 3 2 3 8 1553.68799715 -539.86271342 -6.89851953 +5 1 3 1 1 -0.06427192 0.02142397 -0.26779967 +5 1 3 1 2 9474.66667567 -0.81411100 0.81411100 +5 1 3 1 3 -0.04284795 -0.02142397 -8.76240525 +5 1 3 1 4 -9474.62382772 0.70699113 0.47132742 +5 1 3 1 5 0.05355993 -0.02142397 13.47567946 +5 1 3 1 6 -9456.19921033 -0.02142397 -2.82796453 +5 1 3 1 7 0.04284795 0.05355993 -0.14996782 +5 1 3 1 8 9456.13493841 -0.00000000 -3.07434023 +5 1 3 2 1 -0.00000000 -0.01071199 -2915.58858168 +5 1 3 2 2 -3069.28416904 -1560.73648450 3081.34586624 +5 1 3 2 3 -0.02142397 -0.00000000 -11786.27059062 +5 1 3 2 4 3069.24132110 1560.77933244 3081.23874637 +5 1 3 2 5 -0.04284795 -0.00000000 2965.97776783 +5 1 3 2 6 -3056.27981700 1558.10133573 3073.61181173 +5 1 3 2 7 0.02142397 0.06427192 -574.32317513 +5 1 3 2 8 3056.32266495 -1558.04777580 3073.62252372 +5 1 3 3 1 0.77126305 -573.03773671 0.02142397 +5 1 3 3 2 3069.30559302 3081.73149777 -1556.32314591 +5 1 3 3 3 -9.03020492 -11786.35628651 0.55702332 +5 1 3 3 4 3069.30559302 3081.79576969 1556.28029797 +5 1 3 3 5 -8.85881313 2963.14980330 -0.62129524 +5 1 3 3 6 -3059.15062948 3074.46877068 1557.26580076 +5 1 3 3 7 -0.85695895 -2916.01706115 -0.02142397 +5 1 3 3 8 -3061.44299467 3074.31880286 -1557.37292062 +5 2 3 1 1 -0.00000000 -0.01071199 -573.01631273 +5 2 3 1 2 3069.39128891 -1560.56509271 3080.57460319 +5 2 3 1 3 0.05355993 -0.06427192 2959.63627162 +5 2 3 1 4 -3069.53054474 1560.45797284 3080.51033127 +5 2 3 1 5 0.04284795 -0.04284795 -11776.37271477 +5 2 3 1 6 3059.40771717 1553.10954986 3071.94074178 +5 2 3 1 7 0.04284795 -0.00000000 -2914.74233471 +5 2 3 1 8 -3059.38629319 -1553.09883787 3071.76934999 +5 2 3 2 1 0.08569589 -0.05355993 1.00692676 +5 2 3 2 2 890.20895544 0.85695895 -0.19281576 +5 2 3 2 3 -0.00000000 -0.14996782 -7.88402232 +5 2 3 2 4 -890.19824345 -0.92123087 0.17139179 +5 2 3 2 5 -0.06427192 -0.04284795 12.08312117 +5 2 3 2 6 -887.48811078 -0.40705550 -2.52802890 +5 2 3 2 7 0.08569589 0.02142397 0.21423974 +5 2 3 2 8 887.38099091 0.57844729 -2.46375698 +5 2 3 3 1 -2915.01013439 -0.34278358 -0.03213596 +5 2 3 3 2 94.77965968 -536.09209405 -538.29876334 +5 2 3 3 3 2958.49008902 -11.20473825 0.12854384 +5 2 3 3 4 94.80108365 -536.11351802 538.29876334 +5 2 3 3 5 2961.76795700 15.44668504 -0.04284795 +5 2 3 3 6 89.61648201 534.74238371 -537.78458797 +5 2 3 3 7 -3374.10446694 -0.95336683 -0.00000000 +5 2 3 3 8 89.70217791 534.71024775 537.74174003 +5 3 3 1 1 1.92815763 -2913.87466378 0.02142397 +5 3 3 1 2 -3068.74856970 3081.11020253 -1558.22987957 +5 3 3 1 3 14.19338258 2960.87886209 -0.06427192 +5 3 3 1 4 -3068.67358579 3081.21732240 1558.16560765 +5 3 3 1 5 16.67856353 -11774.20889342 -0.00000000 +5 3 3 1 6 3053.08764492 3069.84119236 1560.65078860 +5 3 3 1 7 -1.47825419 -574.68738268 -0.05355993 +5 3 3 1 8 3052.98052505 3069.83048037 -1560.55438072 +5 3 3 2 1 -3372.13346135 1.29615041 -0.00000000 +5 3 3 2 2 94.05124457 538.27733937 536.60626942 +5 3 3 2 3 2959.32562400 -12.16881707 0.72841511 +5 3 3 2 4 94.01910861 538.25591539 -536.54199750 +5 3 3 2 5 2962.52850807 13.71134317 -0.57844729 +5 3 3 2 6 89.53078612 -539.47708190 536.02782213 +5 3 3 2 7 -2914.64592683 -0.31064762 -0.10711987 +5 3 3 2 8 87.38838875 -539.54135382 -536.04924610 +5 3 3 3 1 0.14996782 -0.11783186 2.69942069 +5 3 3 3 2 886.39548812 0.10711987 -2.03527750 +5 3 3 3 3 0.97479080 0.66414318 8.84810114 +5 3 3 3 4 -888.46290158 -0.02142397 -1.84246174 +5 3 3 3 5 0.92123087 -0.59987126 -10.92622659 +5 3 3 3 6 -891.32300207 0.08569589 2.95650837 +5 3 3 3 7 0.14996782 0.07498391 -2.28165320 +5 3 3 3 8 891.28015412 -0.08569589 2.81725254 +5 1 4 1 1 1.28543842 -1559.56887793 -536.91691704 +5 1 4 1 2 -0.34278358 540.64468846 1560.22230913 +5 1 4 1 3 -9477.33396039 3068.19154638 3067.09892373 +5 1 4 1 4 74173.97464571 -72114.61659717 -72080.20969540 +5 1 4 1 5 -74162.52353176 72103.32616303 72061.87077391 +5 1 4 1 6 9463.94397683 -3060.22182817 -3055.10149845 +5 1 4 1 7 0.53559934 -537.76316400 -1559.02256660 +5 1 4 1 8 0.36420755 1560.10447727 542.32647040 +5 1 4 2 1 888.04513410 3068.93067348 94.89749153 +5 1 4 2 2 -540.16264905 -0.53559934 -3074.64016247 +5 1 4 2 3 -0.35349557 1560.05091734 3080.46748332 +5 1 4 2 4 -72109.66765925 67117.96748160 80902.68776351 +5 1 4 2 5 67159.33717483 -72100.41250261 -80923.76895363 +5 1 4 2 6 3054.26596348 889.56623623 -86.89563735 +5 1 4 2 7 -3.64207553 -533.89613675 3077.28602322 +5 1 4 2 8 1552.14547104 -1.56395008 -3070.03400812 +5 1 4 3 1 -0.89980690 3079.84618808 -538.47015513 +5 1 4 3 2 1560.86502834 -3074.46877068 -0.46061543 +5 1 4 3 3 -0.28922365 3080.53175524 1555.08055544 +5 1 4 3 4 -72076.52477192 80899.60271129 67091.98020149 +5 1 4 3 5 67095.01169377 -80910.10045841 -72055.57212564 +5 1 4 3 6 3062.79270501 -92.12308694 891.23730618 +5 1 4 3 7 889.73762802 93.55849317 3056.79399237 +5 1 4 3 8 -530.71467665 -3076.86825574 -0.49275140 +5 2 4 1 1 -1560.00806939 0.36420755 3080.55317921 +5 2 4 1 2 0.64271921 540.07695316 -3074.81155426 +5 2 4 1 3 -3068.90924950 -888.04513410 94.86535557 +5 2 4 1 4 -67116.39281953 72107.97516533 80901.33805316 +5 2 4 1 5 72098.30224120 -67157.10908156 -80923.87607350 +5 2 4 1 6 2.58158883 -1551.67414362 -3069.24132110 +5 2 4 1 7 533.94969668 3.65278752 3077.29673521 +5 2 4 1 8 -890.01613968 -3055.26217825 -86.18864622 +5 2 4 2 1 -3068.25581831 9477.33396039 3067.09892373 +5 2 4 2 2 -540.65540045 0.28922365 1560.21159714 +5 2 4 2 3 1559.59030190 -1.30686240 -536.97047697 +5 2 4 2 4 72115.03436466 -74174.42454916 -72080.83099064 +5 2 4 2 5 -72103.56182674 74162.87702733 72062.02074173 +5 2 4 2 6 -1560.14732522 -0.40705550 542.28362245 +5 2 4 2 7 537.76316400 -0.54631133 -1559.03327859 +5 2 4 2 8 3060.22182817 -9463.93326484 -3055.06936249 +5 2 4 3 1 3080.48890729 -0.29993563 -1555.11269140 +5 2 4 3 2 -3074.68301042 1560.55438072 0.46061543 +5 2 4 3 3 3079.88903603 -0.92123087 538.47015513 +5 2 4 3 4 80899.31348765 -72076.63189179 -67091.89450560 +5 2 4 3 5 -80907.86165316 67097.03625929 72055.50785372 +5 2 4 3 6 -3077.70379071 -531.46451573 -0.00000000 +5 2 4 3 7 93.62276510 889.69478007 -3056.79399237 +5 2 4 3 8 -92.91577396 3062.00001798 -890.76597876 +5 3 4 1 1 537.91313182 3080.66029908 0.43919146 +5 3 4 1 2 -891.15161028 -81.20757233 -3057.43671158 +5 3 4 1 3 -3066.95966790 94.71538776 -888.10940602 +5 3 4 1 4 -67092.34440905 80902.83773132 72062.17070954 +5 3 4 1 5 72059.95332826 -80921.90506792 -67086.06718475 +5 3 4 1 6 6.06298456 -3072.60488497 -1562.19331471 +5 3 4 1 7 -1556.51596168 3074.95081009 -3.55637964 +5 3 4 1 8 3.10647619 -3077.56453488 534.79594364 +5 3 4 2 1 94.73681173 -3066.94895591 888.10940602 +5 3 4 2 2 -81.19686035 -891.10876234 3057.44742357 +5 3 4 2 3 3080.68172306 537.95597976 -0.38563153 +5 3 4 2 4 80902.84844331 -67092.36583302 -72062.02074173 +5 3 4 2 5 -80921.91577991 72059.92119230 67085.89579296 +5 3 4 2 6 -3077.54311091 3.10647619 -534.74238371 +5 3 4 2 7 3074.96152208 -1556.56952161 3.53495566 +5 3 4 2 8 -3072.60488497 6.08440853 1562.17189073 +5 3 4 3 1 536.88478108 -1557.44790453 -2.76369261 +5 3 4 3 2 3057.02965608 -3056.72972045 -9482.85063362 +5 3 4 3 3 1557.44790453 -536.88478108 -2.82796453 +5 3 4 3 4 72064.98796208 -72064.74158639 -74082.62282182 +5 3 4 3 5 -72059.06423335 72056.85756406 74120.05050389 +5 3 4 3 6 -1553.84867695 540.24834495 -7.11275927 +5 3 4 3 7 -3064.05671946 3064.03529549 9465.70074267 +5 3 4 3 8 -539.39138600 1554.68421192 -7.66978259 +5 1 5 1 1 0.77126305 -1.06048670 16.05726829 +5 1 5 1 2 74158.14232914 -67155.81293115 67095.98648458 +5 1 5 1 3 -0.26779967 0.04284795 -8.09826206 +5 1 5 1 4 -74157.97093735 67155.84506711 67095.77224484 +5 1 5 1 5 -2.11026141 -1.92815763 -387.68822819 +5 1 5 1 6 -73990.13552734 -66819.74576761 -66907.41266802 +5 1 5 1 7 1.37113432 1.03906272 8.13039802 +5 1 5 1 8 73990.15695131 66821.92030094 -66912.20092614 +5 1 5 2 1 -0.00000000 0.08569589 2959.14352022 +5 1 5 2 2 -72101.71936500 72101.71936500 -80905.50501605 +5 1 5 2 3 0.01071199 -0.06427192 2959.10067227 +5 1 5 2 4 72101.88004481 -72101.89075679 -80905.79423969 +5 1 5 2 5 -0.06427192 0.29993563 328882.97674338 +5 1 5 2 6 -71808.43587695 -71808.42516497 -80608.60087644 +5 1 5 2 7 0.06427192 -0.08569589 -11773.06271083 +5 1 5 2 8 71808.40374099 71808.26448516 -80608.27951684 +5 1 5 3 1 14.41833430 -11771.85225631 -1.25330246 +5 1 5 3 2 72062.59918902 -80922.22642753 72055.34717392 +5 1 5 3 3 12.57587257 2960.87886209 -0.19281576 +5 1 5 3 4 72062.17070954 -80921.94791587 -72054.97225438 +5 1 5 3 5 -387.76321210 328883.51234273 1.00692676 +5 1 5 3 6 -71879.94910118 -80593.49697498 -71890.75749592 +5 1 5 3 7 -4.11340295 2953.94820660 0.07498391 +5 1 5 3 8 -71879.85269330 -80588.96580454 71890.48969625 +5 2 5 1 1 -0.00000000 0.02142397 2959.18636817 +5 2 5 1 2 -72101.74078898 72101.63366911 -80905.55857598 +5 2 5 1 3 -0.01071199 -0.04284795 2959.16494419 +5 2 5 1 4 72101.86933282 -72101.91218077 -80905.62284790 +5 2 5 1 5 -0.09640788 0.25708768 328883.16955915 +5 2 5 1 6 -71808.35018106 -71808.53228483 -80608.51518055 +5 2 5 1 7 0.02142397 -0.08569589 -11773.00915089 +5 2 5 1 8 71808.42516497 71808.39302900 -80608.39734869 +5 2 5 2 1 0.12854384 -0.09640788 -7.85188636 +5 2 5 2 2 67156.12357877 -74158.05663324 67095.99719656 +5 2 5 2 3 -0.22495172 0.10711987 18.08183381 +5 2 5 2 4 -67155.74865923 74157.99236132 67095.85794074 +5 2 5 2 5 -1.47825419 -1.02835074 -389.61638582 +5 2 5 2 6 -66817.62479421 -73990.13552734 -66907.71260365 +5 2 5 2 7 1.37113432 1.30686240 7.93758226 +5 2 5 2 8 66817.64621819 73990.07125541 -66912.26519806 +5 2 5 3 1 2965.52786438 18.09254579 0.05355993 +5 2 5 3 2 -80923.68325774 72056.15057293 -72055.21863007 +5 2 5 3 3 -11768.79934006 15.44668504 -0.00000000 +5 2 5 3 4 -80923.01911455 72055.52927769 72054.52235093 +5 2 5 3 5 328878.97046030 -384.32466432 0.29993563 +5 2 5 3 6 -80591.86875298 -71878.63152680 -71889.60060134 +5 2 5 3 7 2955.18008508 -3.02078029 -0.01071199 +5 2 5 3 8 -80592.25438450 -71879.03858230 71889.96480889 +5 3 5 1 1 14.50403020 -11771.85225631 -1.28543842 +5 3 5 1 2 72062.38494928 -80922.01218779 72055.16507014 +5 3 5 1 3 12.51160064 2960.90028606 -0.19281576 +5 3 5 1 4 72062.24569345 -80921.92649189 -72055.10079822 +5 3 5 1 5 -387.61324428 328883.38379888 1.52110213 +5 3 5 1 6 -71880.03479708 -80593.66836677 -71890.67180002 +5 3 5 1 7 -4.09197898 2954.00176653 0.22495172 +5 3 5 1 8 -71879.80984535 -80588.98722851 71890.51112022 +5 3 5 2 1 2965.48501644 18.11396977 0.02142397 +5 3 5 2 2 -80923.81180158 72056.08630101 -72055.24005405 +5 3 5 2 3 -11768.74578013 15.55380491 0.06427192 +5 3 5 2 4 -80922.76202687 72055.05795027 72054.09387145 +5 3 5 2 5 328878.61696473 -384.17469650 0.59987126 +5 3 5 2 6 -80591.80448106 -71878.58867885 -71889.34351365 +5 3 5 2 7 2955.26578098 -3.03149228 -0.00000000 +5 3 5 2 8 -80592.34008040 -71879.08143025 71889.85768902 +5 3 5 3 1 0.85695895 -1.04977471 -9.97285976 +5 3 5 3 2 67081.95378180 -67081.96449379 74113.44120800 +5 3 5 3 3 -0.27851166 -0.04284795 -9.23373267 +5 3 5 3 4 -67081.82523796 67081.99662975 74113.32337615 +5 3 5 3 5 -2.04598949 -1.90673366 28.47246106 +5 3 5 3 6 -66906.80208477 -66906.72710086 -74110.49541162 +5 3 5 3 7 1.39255829 1.07119869 -10.62629096 +5 3 5 3 8 66906.83422073 66909.01946604 -74114.80163033 +5 1 6 1 1 -0.96407882 1553.77369304 534.26034430 +5 1 6 1 2 -0.62129524 -1552.55252654 -531.60377156 +5 1 6 1 3 -9459.56277421 -3053.08764492 -3057.90803901 +5 1 6 1 4 9463.10844185 3055.52997792 3062.21425772 +5 1 6 1 5 -73991.82802126 -71805.44723262 -71878.37443912 +5 1 6 1 6 73991.34598185 71801.89085298 71869.24782632 +5 1 6 1 7 -0.92123087 533.96040867 1555.38049107 +5 1 6 1 8 -0.70699113 -533.93898469 -1553.50589337 +5 1 6 2 1 -890.89452260 3056.08700124 90.58056083 +5 1 6 2 2 -1559.83667760 0.82482299 -3077.51097495 +5 1 6 2 3 0.64271921 1557.43719255 3074.04029121 +5 1 6 2 4 -3059.60053293 889.52338828 -93.55849317 +5 1 6 2 5 -66822.94865168 -71804.35460996 -80591.07606595 +5 1 6 2 6 71802.79065988 66839.32727958 80599.21717596 +5 1 6 2 7 -2.67799671 -537.82743592 3077.45741501 +5 1 6 2 8 532.68568223 -1.10333465 -3079.13919695 +5 1 6 3 1 -3.89916321 3073.27974014 -538.95219454 +5 1 6 3 2 542.86206974 -3070.77313522 -0.07498391 +5 1 6 3 3 -4.30621871 3075.06864194 1558.01563984 +5 1 6 3 4 -3054.25525149 -87.21699696 890.10183557 +5 1 6 3 5 -66913.49707655 -80606.32993523 -71895.12798655 +5 1 6 3 6 71873.00773370 80595.38228466 66916.28219313 +5 1 6 3 7 -885.60280109 101.50678742 3068.98423341 +5 1 6 3 8 -1554.43783623 -3080.94952273 0.49275140 +5 2 6 1 1 1558.31557547 -0.20352775 3074.65087446 +5 2 6 1 2 889.73762802 -3059.54697299 -93.65490106 +5 2 6 1 3 3057.00823211 -891.79432949 90.02353751 +5 2 6 1 4 1.69249392 -1560.52224476 -3078.06799826 +5 2 6 1 5 -71806.19707170 -66823.21645135 -80591.16176184 +5 2 6 1 6 66838.00970519 71805.74716825 80599.73135133 +5 2 6 1 7 -537.52750029 -2.93508440 3077.40385508 +5 2 6 1 8 -0.85695895 532.57856236 -3079.06421304 +5 2 6 2 1 -3053.13049287 -9459.53063825 -3057.89732702 +5 2 6 2 2 3055.44428203 9463.12986583 3062.19283375 +5 2 6 2 3 1553.78440503 -0.87838292 534.27105629 +5 2 6 2 4 -1552.57395051 -0.66414318 -531.59305957 +5 2 6 2 5 -71806.10066382 -73992.47074047 -71878.76007064 +5 2 6 2 6 71802.52286021 73992.02083702 71869.80484963 +5 2 6 2 7 534.01396860 -0.86767094 1555.41262703 +5 2 6 2 8 -533.92827271 -0.72841511 -1553.47375741 +5 2 6 3 1 3074.68301042 -4.55259441 1558.21916759 +5 2 6 3 2 -87.23842093 -3054.21240354 890.11254756 +5 2 6 3 3 3071.41585443 -2.61372479 -537.65604413 +5 2 6 3 4 -3070.77313522 542.81922179 -0.06427192 +5 2 6 3 5 -80608.76155624 -66915.48950610 -71896.92760035 +5 2 6 3 6 80600.23481471 71873.74686080 66916.92491234 +5 2 6 3 7 101.05688397 -885.42069732 3068.80212964 +5 2 6 3 8 -3080.91738677 -1554.39498828 0.50346338 +5 3 6 1 1 -539.32711408 3069.44484885 0.35349557 +5 3 6 1 2 3.77061937 -3073.14048431 539.64847369 +5 3 6 1 3 3053.62324426 86.55285377 -891.32300207 +5 3 6 1 4 5.84874482 -3077.12534342 -1554.86631570 +5 3 6 1 5 -71877.87097573 -80588.71942884 -66910.19778460 +5 3 6 1 6 66912.12594223 80611.81447250 71886.60124502 +5 3 6 1 7 1558.22987957 3080.91738677 2.52802890 +5 3 6 1 8 883.63179551 -109.74430531 -3072.56203702 +5 3 6 2 1 86.55285377 3053.75178811 -891.32300207 +5 3 6 2 2 -3076.48262421 4.88466601 -1554.29858040 +5 3 6 2 3 3069.41271289 -539.32711408 0.34278358 +5 3 6 2 4 -3073.23689219 3.59922758 539.73416958 +5 3 6 2 5 -80588.69800487 -71875.71786638 -66910.32632844 +5 3 6 2 6 80611.33243309 66911.16186341 71885.95852581 +5 3 6 2 7 3080.85311485 1558.15489566 2.54945287 +5 3 6 2 8 -109.64789743 883.39613180 -3072.64773292 +5 3 6 3 1 536.17778994 1560.17946118 3.10647619 +5 3 6 3 2 -533.47836926 -1563.91794459 -6.05227257 +5 3 6 3 3 1560.20088515 536.24206187 3.04220427 +5 3 6 3 4 -1563.11454558 -534.27105629 -6.64143185 +5 3 6 3 5 -71893.03914912 -71890.90746373 -74117.05114757 +5 3 6 3 6 71886.49412515 71886.21561349 74133.84754296 +5 3 6 3 7 -3064.48519893 -3064.43163900 -9458.98432692 +5 3 6 3 8 3071.12663078 3070.84811912 9448.22949211 +5 1 7 1 1 -0.12854384 0.06427192 -0.77126305 +5 1 7 1 2 -0.77126305 2.42090903 890.08041160 +5 1 7 1 3 0.10711987 -0.12854384 -0.98550279 +5 1 7 1 4 0.76055107 -2.37806108 889.82332391 +5 1 7 1 5 0.62129524 0.59987126 -4.90608998 +5 1 7 1 6 -0.83553497 -2.22809327 -886.52403196 +5 1 7 1 7 -0.64271921 -0.68556716 -2.32450115 +5 1 7 1 8 0.81411100 2.39948506 -884.39234658 +5 1 7 2 1 -0.08569589 -0.05355993 -3374.52223442 +5 1 7 2 2 537.95597976 534.74238371 91.58748759 +5 1 7 2 3 0.07498391 0.06427192 -2915.86709333 +5 1 7 2 4 -537.92384380 -534.74238371 93.70846099 +5 1 7 2 5 0.65343120 -0.55702332 2950.74532253 +5 1 7 2 6 533.99254463 -537.27041260 101.93526689 +5 1 7 2 7 -0.59987126 0.64271921 2950.69176259 +5 1 7 2 8 -534.05681655 537.23827664 102.05309875 +5 1 7 3 1 0.38563153 -2914.59236690 0.18210378 +5 1 7 3 2 -1558.95829468 3078.60359761 -3060.97166725 +5 1 7 3 3 0.32135961 -574.37673506 0.17139179 +5 1 7 3 4 -1558.94758269 3078.60359761 3060.92881930 +5 1 7 3 5 11.74033759 -11775.06585237 0.77126305 +5 1 7 3 6 1555.18767531 3076.61116805 3068.55575394 +5 1 7 3 7 -4.79897011 2953.48759116 0.85695895 +5 1 7 3 8 1555.12340339 3076.76113587 -3070.80527118 +5 2 7 1 1 -0.06427192 -0.09640788 -2915.96350122 +5 2 7 1 2 -534.69953576 -537.97740374 91.35182388 +5 2 7 1 3 0.05355993 0.08569589 -3374.53294641 +5 2 7 1 4 534.78523165 537.99882771 93.40852536 +5 2 7 1 5 0.56773530 -0.62129524 2950.78817047 +5 2 7 1 6 -537.29183658 534.03539257 101.89241895 +5 2 7 1 7 -0.62129524 0.67485517 2950.67033862 +5 2 7 1 8 537.33468452 -533.96040867 102.01025080 +5 2 7 2 1 -0.08569589 0.16067980 -0.97479080 +5 2 7 2 2 -2.39948506 0.77126305 890.27322736 +5 2 7 2 3 0.11783186 -0.04284795 -0.77126305 +5 2 7 2 4 2.37806108 -0.66414318 890.16610749 +5 2 7 2 5 0.66414318 0.64271921 -4.92751395 +5 2 7 2 6 -2.39948506 -0.77126305 -886.43833607 +5 2 7 2 7 -0.53559934 -0.68556716 -2.41019704 +5 2 7 2 8 2.39948506 0.74983908 -884.39234658 +5 2 7 3 1 -574.50527891 0.34278358 0.17139179 +5 2 7 3 2 3078.51790171 -1558.95829468 3060.99309122 +5 2 7 3 3 -2914.61379087 0.42847947 0.08569589 +5 2 7 3 4 3078.57146165 -1558.87259878 -3060.97166725 +5 2 7 3 5 -11775.08727634 11.74033759 0.85695895 +5 2 7 3 6 3076.71828792 1555.14482736 3068.59860189 +5 2 7 3 7 2953.40189527 -4.77754614 0.87838292 +5 2 7 3 8 3076.80398381 1555.13411537 -3070.77313522 +5 3 7 1 1 -0.66414318 -574.54812685 0.23566371 +5 3 7 1 2 -1556.28029797 3074.74728234 3062.49276938 +5 3 7 1 3 -1.67106995 -2914.36741517 0.21423974 +5 3 7 1 4 -1556.21602604 3074.83297823 -3062.68558514 +5 3 7 1 5 -4.23123481 2952.11645684 0.83553497 +5 3 7 1 6 1557.90851997 3080.51033127 -3066.84183604 +5 3 7 1 7 3.27786798 -11773.74827799 0.84624696 +5 3 7 1 8 1557.88709599 3080.63887511 3064.72086264 +5 3 7 2 1 -2914.41026312 -1.83174975 0.23566371 +5 3 7 2 2 3074.68301042 -1556.25887399 -3062.62131322 +5 3 7 2 3 -574.67667069 -0.70699113 0.12854384 +5 3 7 2 4 3074.69372240 -1556.21602604 3062.34280156 +5 3 7 2 5 2952.10574486 -4.13482693 0.89980690 +5 3 7 2 6 3080.57460319 1557.92994394 -3066.92753194 +5 3 7 2 7 -11773.71614203 3.32071592 0.94265484 +5 3 7 2 8 3080.55317921 1557.96207990 3064.77442258 +5 3 7 3 1 -0.21423974 0.16067980 -3.01006831 +5 3 7 3 2 3.10647619 -3.14932413 9467.72530819 +5 3 7 3 3 0.16067980 -0.23566371 -2.84938850 +5 3 7 3 4 -3.13861215 3.12790016 9467.55391640 +5 3 7 3 5 1.24259047 1.28543842 -13.28286370 +5 3 7 3 6 3.08505221 3.08505221 -9459.36995844 +5 3 7 3 7 -1.19974253 -1.19974253 -1.88530969 +5 3 7 3 8 -3.10647619 -3.01006831 -9455.16014761 +5 1 8 1 1 0.29993563 -1552.85246217 534.90306351 +5 1 8 1 2 -9463.14057781 -3055.46570600 3062.19283375 +5 1 8 1 3 9459.61633414 3053.30188466 -3057.77949516 +5 1 8 1 4 0.66414318 1552.59537449 -531.55021162 +5 1 8 1 5 73992.54572438 71806.34703952 -71878.82434256 +5 1 8 1 6 0.74983908 533.94969668 -1553.49518138 +5 1 8 1 7 0.77126305 -533.75688092 1555.30550716 +5 1 8 1 8 -73991.44238973 -71804.18321817 71869.36565817 +5 1 8 2 1 891.73005757 -3056.94396019 90.00211354 +5 1 8 2 2 3059.64338088 -889.53410027 -93.55849317 +5 1 8 2 3 0.16067980 -1558.27272752 3074.66158644 +5 1 8 2 4 1559.89023753 -0.83553497 -3077.46812700 +5 1 8 2 5 66823.24858731 71804.11894625 -80591.20460979 +5 1 8 2 6 -532.71781819 1.04977471 -3079.09634900 +5 1 8 2 7 2.97793235 537.58106022 3077.42527905 +5 1 8 2 8 -71804.91163328 -66837.13132227 80599.13148006 +5 1 8 3 1 -2.54945287 3071.42656641 537.67746810 +5 1 8 3 2 -3054.22311553 -87.21699696 -890.12325954 +5 1 8 3 3 -4.50974647 3074.70443439 -1558.20845560 +5 1 8 3 4 542.84064577 -3070.80527118 0.08569589 +5 1 8 3 5 -66915.05031464 -80608.23666889 71896.43484895 +5 1 8 3 6 -1554.41641225 -3080.96023471 -0.47132742 +5 1 8 3 7 -885.38856136 101.15329185 -3068.78070566 +5 1 8 3 8 71873.33980530 80600.00986299 -66916.57141678 +5 2 8 1 1 -1557.48004049 -0.55702332 3074.13669909 +5 2 8 1 2 -1.60679803 1560.71506052 -3078.04657429 +5 2 8 1 3 -3056.10842521 890.85167465 90.53771288 +5 2 8 1 4 -890.38034723 3060.41464393 -93.06574178 +5 2 8 1 5 71806.51843131 66820.70984643 -80591.14033787 +5 2 8 1 6 0.78197504 -532.42859455 -3079.13919695 +5 2 8 1 7 537.78458797 2.71013267 3077.41456707 +5 2 8 1 8 -66839.56294329 -71802.41574034 80599.13148006 +5 2 8 2 1 3052.48777366 9460.41973315 -3057.34030370 +5 2 8 2 2 1552.57395051 0.66414318 -531.61448355 +5 2 8 2 3 -1553.69870913 1.13547061 534.35675218 +5 2 8 2 4 -3055.44428203 -9463.16200179 3062.19283375 +5 2 8 2 5 71806.12208779 73992.68498021 -71878.86719051 +5 2 8 2 6 533.92827271 0.72841511 -1553.49518138 +5 2 8 2 7 -534.01396860 1.06048670 1555.32693114 +5 2 8 2 8 -71801.91227696 -73993.55265114 71869.18355440 +5 2 8 3 1 3073.37614802 -2.74226863 -1556.89088122 +5 2 8 3 2 -3070.76242323 542.81922179 0.07498391 +5 2 8 3 3 3071.64080615 -2.22809327 537.84885989 +5 2 8 3 4 -87.23842093 -3054.24453950 -890.08041160 +5 2 8 3 5 -80607.18689418 -66913.32568476 71895.51361808 +5 2 8 3 6 -3080.93881074 -1554.39498828 -0.47132742 +5 2 8 3 7 100.94976410 -885.04577778 -3068.96280944 +5 2 8 3 8 80600.09555888 71869.11928247 -66916.71067260 +5 3 8 1 1 -539.28426613 3069.38057693 -0.37491954 +5 3 8 1 2 5.84874482 -3077.11463143 1554.90916365 +5 3 8 1 3 3053.63395625 86.57427775 891.30157810 +5 3 8 1 4 3.77061937 -3073.14048431 -539.66989766 +5 3 8 1 5 -71877.63531202 -80588.44091718 66910.15493665 +5 3 8 1 6 883.57823558 -109.71216935 3072.58346099 +5 3 8 1 7 1558.20845560 3080.87453882 -2.54945287 +5 3 8 1 8 66911.91170249 80611.54667283 -71886.24774945 +5 3 8 2 1 86.57427775 3053.65538023 891.34442605 +5 3 8 2 2 -3073.16190828 3.58851560 -539.77701753 +5 3 8 2 3 3069.42342487 -539.28426613 -0.29993563 +5 3 8 2 4 -3076.52547216 4.92751395 1554.28786841 +5 3 8 2 5 -80588.40878122 -71875.54647459 66910.24063255 +5 3 8 2 6 -109.64789743 883.37470783 3072.66915689 +5 3 8 2 7 3080.89596279 1558.16560765 -2.57087684 +5 3 8 2 8 80610.91466560 66911.06545553 -71885.70143812 +5 3 8 3 1 -536.75623723 -1559.35463819 3.94201116 +5 3 8 3 2 1563.15739352 534.28176827 -6.59858390 +5 3 8 3 3 -1560.15803721 -535.98497418 3.40641182 +5 3 8 3 4 533.47836926 1563.90723260 -6.17010443 +5 3 8 3 5 71893.06057309 71891.14312744 -74116.75121194 +5 3 8 3 6 -3071.10520681 -3070.80527118 9448.22949211 +5 3 8 3 7 3064.97795033 3065.21361404 -9458.15950393 +5 3 8 3 8 -71886.55839707 -71888.36872285 74131.80155347 +6 1 1 1 1 74113.83755151 -72001.92649548 72006.23271419 +6 1 1 1 2 0.49275140 -1558.28343951 535.74931047 +6 1 1 1 3 -0.62129524 537.95597976 -1559.68670978 +6 1 1 1 4 -9472.03152690 3065.23503801 -3066.41335657 +6 1 1 1 5 -0.95336683 1557.77997612 -539.79844150 +6 1 1 1 6 -74107.15327172 71997.17037332 -71995.04939992 +6 1 1 1 7 9466.41844579 -3061.80720222 3061.16448301 +6 1 1 1 8 -0.02142397 -536.08138206 1557.85496003 +6 1 1 2 1 -72004.34740451 67024.50539631 -80796.18919021 +6 1 1 2 2 889.35199649 3066.01701305 -95.09030729 +6 1 1 2 3 -537.75245201 0.34278358 3077.44670303 +6 1 1 2 4 1.77818982 1561.95765100 -3081.64580187 +6 1 1 2 5 1553.42019748 0.21423974 3070.14112799 +6 1 1 2 6 67035.67799859 -72006.46837791 80811.55017936 +6 1 1 2 7 3061.33587480 889.93044378 90.86978447 +6 1 1 2 8 0.57844729 -536.67054134 -3076.99679958 +6 1 1 3 1 72007.83951222 -80795.30009530 67033.78197692 +6 1 1 3 2 -1.39255829 -3078.06799826 -538.18093149 +6 1 1 3 3 -1558.04777580 3077.53239892 0.27851166 +6 1 1 3 4 -2.86010049 -3080.14612371 1557.13725691 +6 1 1 3 5 536.22063789 3076.67543997 1.88530969 +6 1 1 3 6 -67028.31886363 80799.95980959 -72006.42552996 +6 1 1 3 7 -3061.97859401 91.88742323 890.48746710 +6 1 1 3 8 -891.51581784 -92.55156641 3061.18590698 +6 2 1 1 1 -67017.46762094 72015.89492634 -80796.97116525 +6 2 1 1 2 -1561.78625921 -1.85317373 -3081.82790565 +6 2 1 1 3 -0.57844729 538.57727500 3077.33958316 +6 2 1 1 4 -3065.10649417 -888.70927728 -95.70089055 +6 2 1 1 5 -891.71934559 -3053.55897234 86.16722225 +6 2 1 1 6 71999.35561863 -67052.19588232 80811.67872320 +6 2 1 1 7 0.44990345 -1557.58716036 3076.32194441 +6 2 1 1 8 536.88478108 -0.51417537 -3076.93252766 +6 2 1 2 1 72011.80294736 -74112.61638501 72011.03168430 +6 2 1 2 2 -3064.61374278 9472.93133380 -3065.78134934 +6 2 1 2 3 -537.46322837 -0.70699113 -1558.44411931 +6 2 1 2 4 1558.21916759 -0.34278358 535.87785431 +6 2 1 2 5 3056.94396019 -9458.51299949 3054.97295461 +6 2 1 2 6 -72002.16215919 74100.51183987 -71998.43438777 +6 2 1 2 7 -1558.82975084 -1.47825419 -537.10973280 +6 2 1 2 8 536.13494200 0.16067980 1557.81211209 +6 2 1 3 1 -80798.84576295 72015.87350236 -67033.67485705 +6 2 1 3 2 -3080.18897166 -2.88152446 -1557.11583294 +6 2 1 3 3 3077.13605541 -1559.92237350 -0.25708768 +6 2 1 3 4 -3078.10013422 -1.41398226 538.17021950 +6 2 1 3 5 89.61648201 -3058.44363835 -892.09426513 +6 2 1 3 6 80806.74049726 -67036.98486099 72006.25413817 +6 2 1 3 7 3076.16126460 535.37439093 -0.02142397 +6 2 1 3 8 -92.57299038 -891.53724181 -3061.19661897 +6 3 1 1 1 67029.91494967 -80801.69515146 72004.17601272 +6 3 1 1 2 -540.07695316 -3079.37486066 -0.85695895 +6 3 1 1 3 888.90209304 90.36632109 -3062.66416117 +6 3 1 1 4 3063.45684820 -93.02289383 -888.81639715 +6 3 1 1 5 -2.19595730 3073.89032339 536.15636597 +6 3 1 1 6 -71997.19179729 80810.32901286 -67028.00821601 +6 3 1 1 7 -0.51417537 3076.69686395 -1559.55816594 +6 3 1 1 8 1557.71570420 -3077.29673521 -0.34278358 +6 3 1 2 1 -80804.71593175 67032.88217003 -72004.62591617 +6 3 1 2 2 -92.80865410 3063.38186429 888.76283721 +6 3 1 2 3 90.61269679 889.00921291 3062.72843309 +6 3 1 2 4 -3078.46434178 -539.45565792 0.19281576 +6 3 1 2 5 3072.49776510 -1.86388571 1561.55059550 +6 3 1 2 6 80813.09270547 -72002.07646330 67026.70135361 +6 3 1 2 7 3076.97537560 0.19281576 -535.59934265 +6 3 1 2 8 -3077.12534342 1557.80140010 0.42847947 +6 3 1 3 1 71999.93406592 -71999.81623407 74099.97624053 +6 3 1 3 2 536.34918173 -1559.29036627 2.34592512 +6 3 1 3 3 3062.88911289 -3062.70700912 9469.33210622 +6 3 1 3 4 1559.34392621 -536.30633379 2.33521313 +6 3 1 3 5 -537.06688485 1558.74405494 3.72777142 +6 3 1 3 6 -72001.54086395 72000.79102487 -74115.23010981 +6 3 1 3 7 -1558.61551110 537.17400472 2.88152446 +6 3 1 3 8 -3061.33587480 3061.33587480 -9465.43294300 +6 1 2 1 1 0.14996782 886.35264017 -1.09262266 +6 1 2 1 2 0.17139179 2.39948506 8.77311723 +6 1 2 1 3 -0.25708768 -886.41691209 -1.02835074 +6 1 2 1 4 0.13925583 -0.00000000 -0.36420755 +6 1 2 1 5 -0.40705550 891.28015412 3.25644400 +6 1 2 1 6 0.13925583 -2.29236519 -8.82667717 +6 1 2 1 7 -0.12854384 -891.36585002 -1.09262266 +6 1 2 1 8 0.12854384 0.08569589 0.29993563 +6 1 2 2 1 -1558.50839123 3063.32830435 -3078.06799826 +6 1 2 2 2 1.82103777 4.73469819 -2955.21222105 +6 1 2 2 3 1558.67978302 -3063.28545641 -3078.11084621 +6 1 2 2 4 -0.66414318 -0.06427192 573.69116790 +6 1 2 2 5 -1552.65964641 -3060.80027546 -3072.41206920 +6 1 2 2 6 -6.35220820 0.70699113 11771.70228850 +6 1 2 2 7 1557.65143228 3055.29431421 -3075.62566526 +6 1 2 2 8 0.06427192 0.11783186 2914.09961550 +6 1 2 3 1 535.49222279 -92.25163078 -538.25591539 +6 1 2 3 2 6.34149622 -2959.42203188 -1.27472644 +6 1 2 3 3 535.57791868 -94.50114802 538.08452360 +6 1 2 3 4 -0.18210378 2914.83874260 -1.07119869 +6 1 2 3 5 -531.85014726 -91.52321567 539.58420176 +6 1 2 3 6 -7.61622265 -2962.63562793 -0.38563153 +6 1 2 3 7 -538.77009076 -88.52385935 -536.00639816 +6 1 2 3 8 0.92123087 3373.89022720 -0.63200722 +6 2 2 1 1 -1561.14354000 -3065.92060517 -3079.61052437 +6 2 2 1 2 6.34149622 0.83553497 11784.49240080 +6 2 2 1 3 1561.16496397 3065.96345312 -3079.56767642 +6 2 2 1 4 -0.13925583 0.08569589 2915.24579810 +6 2 2 1 5 -1560.30800502 3053.53754837 -3077.08249547 +6 2 2 1 6 -1.69249392 4.64900229 -2964.13530609 +6 2 2 1 7 1555.20909928 -3059.30059730 -3074.14741108 +6 2 2 1 8 0.70699113 -0.11783186 574.59097480 +6 2 2 2 1 -0.36420755 9473.85256467 -1.99242955 +6 2 2 2 2 -0.68556716 -4.01699507 6.33078423 +6 2 2 2 3 0.44990345 -9471.66731935 -1.88530969 +6 2 2 2 4 -0.66414318 -0.02142397 -0.23566371 +6 2 2 2 5 1.15689458 9463.50478537 5.74162495 +6 2 2 2 6 0.51417537 2.16382134 -6.27722430 +6 2 2 2 7 0.51417537 -9463.48336139 -1.99242955 +6 2 2 2 8 -0.81411100 -0.31064762 0.29993563 +6 2 2 3 1 -3080.68172306 -3067.16319565 -1556.43026578 +6 2 2 3 2 11785.79926320 7.56266272 -2.91366042 +6 2 2 3 3 -3080.70314703 -3069.36986494 1556.28029797 +6 2 2 3 4 573.11272061 -0.32135961 -1.13547061 +6 2 2 3 5 -3078.08942224 3062.57846527 -1554.60922802 +6 2 2 3 6 -2962.35711628 7.47696682 -0.19281576 +6 2 2 3 7 -3072.96909252 3057.82234311 1559.83667760 +6 2 2 3 8 2915.93136525 1.29615041 -0.76055107 +6 3 2 1 1 -539.07002640 -90.75195262 536.56342147 +6 3 2 1 2 6.47004006 -2961.05025388 -0.42847947 +6 3 2 1 3 -538.98433050 -90.88049646 -536.54199750 +6 3 2 1 4 -0.78197504 3371.83352572 -0.62129524 +6 3 2 1 5 542.24077450 -87.02418119 -534.18536039 +6 3 2 1 6 -5.08819376 -2964.28527391 -1.26401445 +6 3 2 1 7 535.19228715 -92.16593488 537.72031605 +6 3 2 1 8 0.04284795 2914.21744736 -1.08191067 +6 3 2 2 1 -3078.13227018 3061.57153851 -1558.97971865 +6 3 2 2 2 -2959.55057572 -3.88845123 1.52110213 +6 3 2 2 3 -3078.11084621 3061.48584261 1558.93687070 +6 3 2 2 4 2913.72469596 -0.53559934 0.96407882 +6 3 2 2 5 -3070.33394376 -3054.39450732 -1562.53609829 +6 3 2 2 6 11772.94487897 -3.98485911 1.60679803 +6 3 2 2 7 -3075.47569744 -3061.44299467 1557.33007268 +6 3 2 2 8 574.69809467 1.08191067 1.01763875 +6 3 2 3 1 0.10711987 885.32428943 2.57087684 +6 3 2 3 2 -1.22116650 1.61751001 -3.87773924 +6 3 2 3 3 -0.12854384 -885.40998533 2.48518095 +6 3 2 3 4 0.97479080 -0.47132742 -1.90673366 +6 3 2 3 5 -0.47132742 890.10183557 -7.32699901 +6 3 2 3 6 0.07498391 0.19281576 3.94201116 +6 3 2 3 7 -0.21423974 -892.26565692 2.42090903 +6 3 2 3 8 0.74983908 0.86767094 1.98171757 +6 1 3 1 1 -0.87838292 -537.30254856 -1558.04777580 +6 1 3 1 2 -0.14996782 1558.30486348 536.01711014 +6 1 3 1 3 -74115.85140504 72014.97369547 72011.54585967 +6 1 3 1 4 9472.87777386 -3064.69943867 -3065.55639762 +6 1 3 1 5 -9460.51614104 3056.00130535 3053.43042850 +6 1 3 1 6 74104.26103527 -72005.99705048 -71997.49173292 +6 1 3 1 7 -0.49275140 -1556.81589731 -538.58798699 +6 1 3 1 8 0.85695895 535.47079881 1558.76547892 +6 1 3 2 1 538.57727500 -0.53559934 3077.28602322 +6 1 3 2 2 -889.24487662 -3065.89918120 -94.94033948 +6 1 3 2 3 72016.10916607 -67015.60373523 -80799.33851435 +6 1 3 2 4 -1.82103777 -1562.04334689 -3081.53868200 +6 1 3 2 5 -3053.55897234 -891.70863360 86.21007019 +6 1 3 2 6 -67052.36727411 71999.33419466 80812.21432255 +6 1 3 2 7 -1557.60858433 0.46061543 3076.39692831 +6 1 3 2 8 0.02142397 536.01711014 -3076.11841666 +6 1 3 3 1 -1559.77240568 3077.32887117 -0.17139179 +6 1 3 3 2 -1.39255829 -3078.07871025 538.40588321 +6 1 3 3 3 72015.19864719 -80797.75314029 -67035.14239925 +6 1 3 3 4 -2.93508440 -3080.21039563 -1556.92301718 +6 1 3 3 5 -3058.52933424 89.85214572 -892.13711307 +6 1 3 3 6 -67037.62758020 80805.05871533 72006.91828135 +6 1 3 3 7 536.04924610 3077.13605541 -0.62129524 +6 1 3 3 8 -890.83025068 -93.24784556 -3060.23254015 +6 2 3 1 1 0.19281576 -537.87028387 3077.59667084 +6 2 3 1 2 1561.91480305 1.73534187 -3081.77434571 +6 2 3 1 3 67023.36992570 -72003.36190172 -80795.28938332 +6 2 3 1 4 3066.00630107 889.37342047 -95.07959531 +6 2 3 1 5 -0.65343120 1552.78819025 3069.58410468 +6 2 3 1 6 -72004.07960484 67035.39948694 80811.31451565 +6 2 3 1 7 889.78047597 3061.44299467 90.73052865 +6 2 3 1 8 -536.64911737 0.59987126 -3077.00751156 +6 2 3 2 1 538.02025168 -0.68556716 -1559.64386184 +6 2 3 2 2 3064.65659072 -9472.86706188 -3065.59924557 +6 2 3 2 3 -72001.80866362 74115.74428517 72003.72610927 +6 2 3 2 4 -1558.27272752 0.19281576 536.02782213 +6 2 3 2 5 1557.71570420 -0.98550279 -539.84128945 +6 2 3 2 6 71996.88114967 -74107.15327172 -71994.57807250 +6 2 3 2 7 -3061.87147414 9466.45058175 3061.14305904 +6 2 3 2 8 -535.47079881 -0.83553497 1558.78690289 +6 2 3 3 1 3076.99679958 -1558.28343951 0.49275140 +6 2 3 3 2 -3080.36036345 -2.81725254 1556.80518532 +6 2 3 3 3 -80795.66430286 72009.53200615 67037.97036378 +6 2 3 3 4 -3078.92495721 -1.99242955 -539.02717845 +6 2 3 3 5 3073.98673127 534.33532821 -0.00000000 +6 2 3 3 6 80806.00137017 -67027.96536806 -72006.76831354 +6 2 3 3 7 91.39467183 -3061.70008235 890.16610749 +6 2 3 3 8 -93.42994933 -890.94808253 3060.32894803 +6 3 3 1 1 888.40934165 91.44823176 3061.93574606 +6 3 3 1 2 -539.88413740 -3079.44984457 0.89980690 +6 3 3 1 3 67030.78262060 -80802.25217477 -72004.92585180 +6 3 3 1 4 3064.35665509 -92.35875065 889.48054033 +6 3 3 1 5 -1.83174975 3072.77627676 1561.29350781 +6 3 3 1 6 -72000.46966527 80809.45062994 67027.53688859 +6 3 3 1 7 0.74983908 3077.80019859 -536.42416564 +6 3 3 1 8 1557.86567202 -3077.22175130 0.24637570 +6 3 3 2 1 91.00904030 888.22723787 -3061.72150633 +6 3 3 2 2 -92.80865410 3063.37115230 -888.78426119 +6 3 3 2 3 -80804.21246837 67030.08634146 72004.66876411 +6 3 3 2 4 -3078.46434178 -539.41280997 -0.17139179 +6 3 3 2 5 3073.79391551 -2.31378916 536.32775776 +6 3 3 2 6 80810.86461220 -71997.42746100 -67030.32200517 +6 3 3 2 7 3076.78255984 -0.37491954 -1559.40819813 +6 3 3 2 8 -3077.08249547 1557.77997612 -0.41776749 +6 3 3 3 1 -3062.42849746 3063.36044031 9469.44993807 +6 3 3 3 2 -536.30633379 1559.32250223 2.37806108 +6 3 3 3 3 -72000.33040944 72001.32662422 74100.83319948 +6 3 3 3 4 -1559.31179024 536.30633379 2.31378916 +6 3 3 3 5 1559.47247005 -536.04924610 4.15625090 +6 3 3 3 6 71998.75574737 -72005.97562651 -74115.16583788 +6 3 3 3 7 538.66297089 -1556.82660929 1.63893399 +6 3 3 3 8 3061.33587480 -3061.34658679 -9465.37938307 +6 1 4 1 1 -9471.60304743 0.40705550 -2.03527750 +6 1 4 1 2 0.14996782 -0.62129524 -0.07498391 +6 1 4 1 3 9473.91683659 -0.40705550 -1.88530969 +6 1 4 1 4 -3.07434023 -1.43540624 6.87709556 +6 1 4 1 5 9463.41908947 1.26401445 5.82732085 +6 1 4 1 6 3.12790016 1.30686240 -6.85567159 +6 1 4 1 7 -9465.73287863 0.42847947 -2.03527750 +6 1 4 1 8 -0.10711987 -0.95336683 0.19281576 +6 1 4 2 1 3066.00630107 1561.10069205 -3079.50340450 +6 1 4 2 2 -0.08569589 -0.05355993 2915.09583028 +6 1 4 2 3 -3063.82105575 -1561.12211602 -3079.52482848 +6 1 4 2 4 -0.03213596 5.76304893 11783.78540967 +6 1 4 2 5 3053.64466824 -1560.37227694 -3077.03964753 +6 1 4 2 6 3.79204335 -1.11404663 -2963.51401086 +6 1 4 2 7 -3059.21490140 1555.18767531 -3074.08313915 +6 1 4 2 8 -0.21423974 0.61058325 574.69809467 +6 1 4 3 1 -3065.02079828 -3080.63887511 1556.40884181 +6 1 4 3 2 -0.49275140 573.36980830 -0.94265484 +6 1 4 3 3 -3067.18461962 -3080.70314703 -1556.36599386 +6 1 4 3 4 6.69499178 11783.80683364 -0.98550279 +6 1 4 3 5 3062.64273719 -3078.04657429 -1554.69492391 +6 1 4 3 6 6.63071986 -2960.45038262 -2.07812545 +6 1 4 3 7 3055.57282587 -3072.92624457 1559.90094952 +6 1 4 3 8 1.15689458 2915.63142962 -1.06048670 +6 2 4 1 1 -3065.47070172 1558.52981520 -3078.11084621 +6 2 4 1 2 -0.36420755 -0.83553497 573.34838433 +6 2 4 1 3 3065.38500583 -1558.46554328 -3078.02515032 +6 2 4 1 4 2.83867652 3.06362824 -2957.81523385 +6 2 4 1 5 -3060.86454738 -1552.59537449 -3072.75485278 +6 2 4 1 6 -0.93194286 -7.69120656 11774.29458932 +6 2 4 1 7 3059.60053293 1557.73712818 -3075.58281731 +6 2 4 1 8 -0.21423974 0.27851166 2914.35670319 +6 2 4 2 1 -886.37406415 -0.14996782 -1.22116650 +6 2 4 2 2 -0.08569589 0.09640788 -0.26779967 +6 2 4 2 3 886.35264017 0.10711987 -1.11404663 +6 2 4 2 4 2.36734909 0.21423974 8.76240525 +6 2 4 2 5 891.21588220 -0.47132742 3.29929195 +6 2 4 2 6 -2.32450115 0.23566371 -8.80525319 +6 2 4 2 7 -891.25873015 -0.17139179 -1.00692676 +6 2 4 2 8 0.08569589 0.07498391 0.27851166 +6 2 4 3 1 -96.62212141 535.49222279 538.29876334 +6 2 4 3 2 2915.35291796 -0.07498391 -1.41398226 +6 2 4 3 3 -92.25163078 535.49222279 -538.34161129 +6 2 4 3 4 -2956.61549132 5.80589687 -3.23502003 +6 2 4 3 5 -95.85085836 -531.78587534 539.45565792 +6 2 4 3 6 -2959.88264731 -7.04848735 1.47825419 +6 2 4 3 7 -88.45958743 -538.77009076 -536.02782213 +6 2 4 3 8 3374.40440257 0.86767094 -0.29993563 +6 3 4 1 1 3061.50726659 -3078.17511813 1558.95829468 +6 3 4 1 2 -0.96407882 2913.74611994 0.69627915 +6 3 4 1 3 3063.73535985 -3078.06799826 -1558.89402276 +6 3 4 1 4 -5.72020098 -2959.44345585 -1.00692676 +6 3 4 1 5 -3056.57975264 -3070.26967183 -1562.62179418 +6 3 4 1 6 -5.83803283 11772.90203103 4.11340295 +6 3 4 1 7 -3056.92253622 -3075.51854539 1557.35149665 +6 3 4 1 8 0.70699113 574.76236659 1.43540624 +6 3 4 2 1 -90.75195262 -539.04860242 -536.49914955 +6 3 4 2 2 3371.42647022 -0.93194286 -0.61058325 +6 3 4 2 3 -90.75195262 -539.02717845 536.71338929 +6 3 4 2 4 -2962.88200363 7.66978259 -0.53559934 +6 3 4 2 5 -84.83893588 542.26219848 -534.18536039 +6 3 4 2 6 -2966.17058360 -6.32007224 -1.28543842 +6 3 4 2 7 -90.00211354 535.23513510 537.82743592 +6 3 4 2 8 2913.85323981 0.23566371 -1.19974253 +6 3 4 3 1 -885.30286546 -0.10711987 2.42090903 +6 3 4 3 2 -0.77126305 0.97479080 -2.08883744 +6 3 4 3 3 887.53095873 0.17139179 2.48518095 +6 3 4 3 4 -0.21423974 -1.13547061 -3.81346732 +6 3 4 3 5 892.30850486 -0.47132742 -7.45554285 +6 3 4 3 6 -1.61751001 0.12854384 3.92058719 +6 3 4 3 7 -892.28708089 -0.17139179 2.44233300 +6 3 4 3 8 0.42847947 0.79268703 1.96029359 +6 1 5 1 1 -0.87838292 1553.68799715 534.31390423 +6 1 5 1 2 -0.64271921 -1552.60608647 -531.60377156 +6 1 5 1 3 -9459.57348619 -3053.10906890 -3057.90803901 +6 1 5 1 4 9463.14057781 3055.44428203 3062.17140977 +6 1 5 1 5 -73991.75303735 -71805.36153673 -71877.94595964 +6 1 5 1 6 73991.22814999 71801.93370093 71869.20497837 +6 1 5 1 7 -0.89980690 533.93898469 1555.42333902 +6 1 5 1 8 -0.70699113 -533.93898469 -1553.49518138 +6 1 5 2 1 1558.37984739 -0.21423974 3074.67229843 +6 1 5 2 2 889.58766020 -3059.58982094 -93.55849317 +6 1 5 2 3 3056.93324820 -891.81575347 90.04496149 +6 1 5 2 4 0.81411100 -1559.85810157 -3077.48955097 +6 1 5 2 5 -71803.86185857 -66823.04505956 -80590.94752211 +6 1 5 2 6 66836.87423459 71804.78308944 80598.87439238 +6 1 5 2 7 -537.57034824 -2.94579638 3077.39314309 +6 1 5 2 8 -1.04977471 532.70710620 -3079.16062092 +6 1 5 3 1 -539.11287434 3069.48769679 0.32135961 +6 1 5 3 2 3.79204335 -3073.15119630 539.62704971 +6 1 5 3 3 3054.56589911 85.93155854 -892.00856923 +6 1 5 3 4 5.83803283 -3077.14676739 -1554.97343557 +6 1 5 3 5 -71877.08900069 -80588.14098155 -66909.68360923 +6 1 5 3 6 66910.07995274 80611.85732045 71886.68694091 +6 1 5 3 7 1558.37984739 3080.79955491 2.63514877 +6 1 5 3 8 883.56752359 -109.74430531 -3072.59417298 +6 2 5 1 1 -890.91594657 3056.14056118 90.54842487 +6 2 5 1 2 -1560.11518926 0.74983908 -3077.40385508 +6 2 5 1 3 0.61058325 1557.50146447 3074.06171518 +6 2 5 1 4 -3060.48962784 890.18753147 -92.89434999 +6 2 5 1 5 -66820.81696630 -71804.46172983 -80591.11891390 +6 2 5 1 6 71801.78373312 66838.74883229 80598.74584854 +6 2 5 1 7 -2.72084466 -537.81672393 3077.43599104 +6 2 5 1 8 532.53571441 -0.95336683 -3079.24631682 +6 2 5 2 1 -3053.30188466 -9459.64847010 -3057.79020715 +6 2 5 2 2 3055.46570600 9463.12986583 3062.20354573 +6 2 5 2 3 1552.85246217 -0.25708768 534.91377550 +6 2 5 2 4 -1552.61679846 -0.64271921 -531.63590752 +6 2 5 2 5 -71806.62555117 -73992.68498021 -71879.01715833 +6 2 5 2 6 71804.30105003 73991.54950960 71869.63345784 +6 2 5 2 7 533.75688092 -0.81411100 1555.32693114 +6 2 5 2 8 -533.94969668 -0.70699113 -1553.49518138 +6 2 5 3 1 86.42430993 3053.54826036 -891.22659419 +6 2 5 3 2 -3076.28980845 4.97036190 -1554.36285232 +6 2 5 3 3 3068.44863407 -538.68439487 0.94265484 +6 2 5 3 4 -3072.30494934 2.95650837 539.17714626 +6 2 5 3 5 -80591.60095331 -71876.12492188 -66910.66911202 +6 2 5 3 6 80614.12826166 66911.76173468 71886.42985323 +6 2 5 3 7 3080.70314703 1558.29415149 2.47446896 +6 2 5 3 8 -109.49792961 883.28901193 -3072.56203702 +6 3 5 1 1 -3.87773924 3073.26902815 -538.97361851 +6 3 5 1 2 542.84064577 -3070.80527118 -0.04284795 +6 3 5 1 3 -4.34906666 3075.02579400 1558.05848778 +6 3 5 1 4 -3054.26596348 -87.23842093 890.16610749 +6 3 5 1 5 -66913.88270808 -80606.67271881 -71895.51361808 +6 3 5 1 6 71873.55404503 80595.83218811 66916.83921645 +6 3 5 1 7 -885.58137712 101.47465146 3069.01636937 +6 3 5 1 8 -1554.41641225 -3080.92809875 0.49275140 +6 3 5 2 1 3073.91174736 -3.68492348 1557.70499222 +6 3 5 2 2 -87.21699696 -3054.24453950 890.14468352 +6 3 5 2 3 3070.64459137 -1.75676584 -537.09902081 +6 3 5 2 4 -3070.79455919 542.81922179 -0.04284795 +6 3 5 2 5 -80608.42948465 -66914.67539510 -71896.45627292 +6 3 5 2 6 80602.07727645 71871.11171203 66916.53928081 +6 3 5 2 7 100.88549218 -885.18503361 3068.82355361 +6 3 5 2 8 -3080.93881074 -1554.38427629 0.47132742 +6 3 5 3 1 535.34225497 1561.00428417 2.81725254 +6 3 5 3 2 -533.45694528 -1563.89652062 -6.07369655 +6 3 5 3 3 1559.45104607 536.92762902 3.81346732 +6 3 5 3 4 -1563.13596955 -534.27105629 -6.53431198 +6 3 5 3 5 -71892.86775733 -71890.20047260 -74116.23703657 +6 3 5 3 6 71888.96859411 71884.39457573 74132.30501685 +6 3 5 3 7 -3065.29930993 -3064.78513457 -9458.09523201 +6 3 5 3 8 3071.21232668 3070.83740714 9448.26162808 +6 1 6 1 1 -74108.86718962 67033.99621666 -67027.94394409 +6 1 6 1 2 0.94265484 -7.85188636 -8.58030147 +6 1 6 1 3 74100.05122443 -67048.70377461 -67036.38498973 +6 1 6 1 4 3.67421149 3.17074811 5.16317766 +6 1 6 1 5 73986.62199565 66835.49238828 66912.55442171 +6 1 6 1 6 120.60625998 218.71734757 126.29432500 +6 1 6 1 7 -74102.76135711 -67030.26844523 67035.78511846 +6 1 6 1 8 -0.29993563 -4.61686633 -6.82353563 +6 1 6 2 1 71997.72739663 -72005.91135459 80806.21560991 +6 1 6 2 2 -3.70634745 1.02835074 -2960.10759904 +6 1 6 2 3 -72005.90064260 71997.66312471 80804.07321254 +6 1 6 2 4 -2.50660492 -0.59987126 -2960.06475109 +6 1 6 2 5 71805.62933640 71801.24813377 80611.08605739 +6 1 6 2 6 219.38149075 221.69527991 -328882.41972007 +6 1 6 2 7 -72008.63219925 -72012.83129810 80808.80791073 +6 1 6 2 8 -2.24951724 -2.37806108 11772.36643168 +6 1 6 3 1 -71994.25671289 80814.11034422 -72003.69397331 +6 1 6 3 2 -9.12661280 11771.12384121 -0.88909491 +6 1 6 3 3 -71997.77024458 80814.46383978 72003.19050993 +6 1 6 3 4 -7.32699901 -2964.62805749 -1.41398226 +6 1 6 3 5 71865.99138231 80595.68222030 71885.44435044 +6 1 6 3 6 126.64782056 -328878.02780546 115.13243470 +6 1 6 3 7 72010.58178086 80799.48848216 -72005.41860319 +6 1 6 3 8 5.09890574 -2952.14859281 7.96971822 +6 2 6 1 1 71997.98448432 -72006.48980188 80806.76192124 +6 2 6 1 2 -3.64207553 0.99621478 -2960.13973500 +6 2 6 1 3 -72005.86850664 71997.29891716 80803.90182075 +6 2 6 1 4 -2.47446896 -0.57844729 -2960.08617506 +6 2 6 1 5 71805.05088911 71800.43402277 80610.40049023 +6 2 6 1 6 219.60644248 223.98764510 -328882.22690430 +6 2 6 1 7 -72008.73931912 -72013.22764161 80809.01143848 +6 2 6 1 8 -2.29236519 -2.41019704 11772.27002380 +6 2 6 2 1 -67051.63885901 74101.29381491 -67037.45618841 +6 2 6 2 2 3.59922758 3.70634745 5.31314548 +6 2 6 2 3 67035.00314342 -74109.18854922 -67028.58666330 +6 2 6 2 4 -6.14868045 1.09262266 -7.28415106 +6 2 6 2 5 66839.43439945 73988.12167381 66914.09694781 +6 2 6 2 6 218.62093968 117.68188757 125.30882221 +6 2 6 2 7 -67034.73534375 -74102.69708519 67035.95651025 +6 2 6 2 8 -4.11340295 -0.34278358 -7.03777536 +6 2 6 3 1 80810.80034028 -71998.15587611 72003.28691781 +6 2 6 3 2 -2964.13530609 -7.68049457 -1.53181412 +6 2 6 3 3 80812.82490580 -71994.81373621 -72004.45452438 +6 2 6 3 4 11774.00536567 -7.19845517 -1.58537405 +6 2 6 3 5 80596.59273918 71866.76264537 71886.21561349 +6 2 6 3 6 -328878.56340480 124.62325505 115.75372993 +6 2 6 3 7 80800.32401714 72011.14951616 -72006.03989843 +6 2 6 3 8 -2951.62370545 5.37741740 8.05541411 +6 3 6 1 1 -71993.80680944 80814.76377542 -72003.28691781 +6 3 6 1 2 -8.95522101 11771.27380902 -0.73912709 +6 3 6 1 3 -71996.84901371 80814.72092747 72001.17665640 +6 3 6 1 4 -7.53052676 -2964.67090544 -1.24259047 +6 3 6 1 5 71869.04429857 80598.61730469 71888.22946702 +6 3 6 1 6 121.34538707 -328881.92696867 111.68317493 +6 3 6 1 7 72011.16022815 80800.04550548 -72004.90442782 +6 3 6 1 8 5.76304893 -2952.74846407 8.92308505 +6 3 6 2 1 80810.54325260 -71997.84522849 72003.58685344 +6 3 6 2 2 -2964.26384994 -7.83046239 -1.66035796 +6 3 6 2 3 80812.81419381 -71994.98512800 -72001.81937561 +6 3 6 2 4 11774.05892561 -7.06991132 -1.73534187 +6 3 6 2 5 80597.86746561 71868.09093174 71888.01522728 +6 3 6 2 6 -328877.37437426 124.04480776 110.18349677 +6 3 6 2 7 80798.52440335 72009.45702224 -72003.74753324 +6 3 6 2 8 -2952.30927261 6.09512052 7.20916715 +6 3 6 3 1 -67028.88659893 67027.62258448 -74118.59367368 +6 3 6 3 2 -1.15689458 3.41712381 3.37427586 +6 3 6 3 3 67026.88345739 -67030.23630927 -74119.04357713 +6 3 6 3 4 5.25958554 -1.58537405 4.49903448 +6 3 6 3 5 66910.30490447 66909.74788115 74140.36043096 +6 3 6 3 6 108.66239464 110.80479201 -4.97036190 +6 3 6 3 7 -67020.57409713 -67018.93516314 74089.93910885 +6 3 6 3 8 -0.53559934 -0.84624696 4.67042627 +6 1 7 1 1 9466.54698963 3061.53940255 -3062.02144196 +6 1 7 1 2 -0.32135961 1557.50146447 -538.84507467 +6 1 7 1 3 -1.54252611 -1556.58023360 536.17778994 +6 1 7 1 4 -9464.88663167 -3057.84376708 3056.60117661 +6 1 7 1 5 -1.51039015 -537.67746810 1557.05156102 +6 1 7 1 6 -74103.55404414 -72014.41667215 72011.99576312 +6 1 7 1 7 74104.92517845 72008.84643899 -72003.20122192 +6 1 7 1 8 0.19281576 538.52371507 -1557.84424805 +6 1 7 2 1 -3060.65030764 889.20202868 91.95169515 +6 1 7 2 2 -890.29465133 3057.07250403 -88.71667512 +6 1 7 2 3 -1557.69428023 1.24259047 3076.82540779 +6 1 7 2 4 0.97479080 1554.78061981 -3072.62630894 +6 1 7 2 5 533.77830489 -2.69942069 3080.03900384 +6 1 7 2 6 -67034.12476050 -72011.84579531 80799.93838561 +6 1 7 2 7 72008.20371978 67050.69620416 -80809.91124537 +6 1 7 2 8 -0.21423974 -538.32018732 -3077.42527905 +6 1 7 3 1 3060.37179598 91.28755196 889.26630060 +6 1 7 3 2 -1.13547061 -3075.53996937 -535.94212623 +6 1 7 3 3 -538.63083493 3076.54689613 -0.17139179 +6 1 7 3 4 -2.08883744 -3073.89032339 1559.83667760 +6 1 7 3 5 1553.95579682 3075.92560089 1.67106995 +6 1 7 3 6 67039.09512240 80805.25153109 -71999.59128235 +6 1 7 3 7 -72000.44824129 -80809.11855834 67022.12733523 +6 1 7 3 8 888.70927728 -90.38774507 3062.77128104 +6 2 7 1 1 1.24259047 -1557.94065593 3076.79327183 +6 2 7 1 2 1554.67349994 0.87838292 -3072.77627676 +6 2 7 1 3 889.84474789 -3061.44299467 91.33039991 +6 2 7 1 4 3056.18340912 -889.60908418 -89.33797035 +6 2 7 1 5 -2.62443678 533.54264118 3080.12469974 +6 2 7 1 6 -72012.83129810 -67032.50725049 80800.36686509 +6 2 7 1 7 67052.02449053 72007.28248891 -80809.11855834 +6 2 7 1 8 -538.51300308 -0.13925583 -3077.35029514 +6 2 7 2 1 -1558.42269534 -0.23566371 534.83879159 +6 2 7 2 2 -3057.97231093 -9464.96161558 3056.54761668 +6 2 7 2 3 3061.10021109 9466.39702182 -3062.10713785 +6 2 7 2 4 1556.60165757 0.32135961 -539.45565792 +6 2 7 2 5 -538.03096367 -1.37113432 1557.26580076 +6 2 7 2 6 -72011.13880417 -74104.51812295 72013.10980975 +6 2 7 2 7 72009.48915820 74104.06821950 -72002.17287118 +6 2 7 2 8 538.34161129 0.26779967 -1557.80140010 +6 2 7 3 1 3075.79705705 -537.82743592 -0.69627915 +6 2 7 3 2 -3074.14741108 -2.16382134 1559.78311767 +6 2 7 3 3 90.50557692 3061.27160288 889.86617186 +6 2 7 3 4 -3076.40764030 -0.57844729 -536.54199750 +6 2 7 3 5 3075.63637725 1554.20217252 1.67106995 +6 2 7 3 6 80806.34415375 67036.08505410 -71998.84144327 +6 2 7 3 7 -80807.22253667 -71999.84837003 67021.89167151 +6 2 7 3 8 -90.53771288 888.81639715 3062.85697693 +6 3 7 1 1 -1.24259047 3077.84304654 -1557.54431241 +6 3 7 1 2 534.95662344 -3075.06864194 0.04284795 +6 3 7 1 3 -0.22495172 3076.84683176 538.12737155 +6 3 7 1 4 -3059.61124492 -90.79480057 -890.89452260 +6 3 7 1 5 -885.96700865 100.47843668 -3064.52804688 +6 3 7 1 6 72010.33540516 80798.86718693 -67021.60244787 +6 3 7 1 7 -67039.12725836 -80811.10027591 71996.83830172 +6 3 7 1 8 -1559.02256660 -3077.14676739 -0.44990345 +6 3 7 2 1 3075.94702487 0.40705550 537.43109241 +6 3 7 2 2 -90.98761633 -3059.70765280 -890.93737055 +6 3 7 2 3 3077.62880680 -1.28543842 -1557.65143228 +6 3 7 2 4 -3075.94702487 535.59934265 -0.59987126 +6 3 7 2 5 100.25348496 -885.90273672 -3064.48519893 +6 3 7 2 6 80800.01336952 72009.38203833 -67020.80976084 +6 3 7 2 7 -80809.60059775 -67039.59858578 71997.30962915 +6 3 7 2 8 -3077.29673521 -1558.91544673 -0.33207159 +6 3 7 3 1 -1560.54366873 -534.96733543 1.55323809 +6 3 7 3 2 536.39202968 1559.38677415 3.96343514 +6 3 7 3 3 -536.60626942 -1558.85117481 2.69942069 +6 3 7 3 4 1557.76926414 538.02025168 2.91366042 +6 3 7 3 5 3070.62316740 3071.12663078 -9457.27040902 +6 3 7 3 6 -71998.86286724 -72002.82630238 74085.98638570 +6 3 7 3 7 71993.69968958 71989.92907020 -74110.13120406 +6 3 7 3 8 -3062.42849746 -3061.86076215 9470.25333708 +6 1 8 1 1 0.02142397 0.08569589 -890.03756365 +6 1 8 1 2 0.34278358 0.38563153 1.22116650 +6 1 8 1 3 -0.06427192 -0.06427192 -894.32235839 +6 1 8 1 4 -0.29993563 -0.27851166 1.17831855 +6 1 8 1 5 -0.08569589 -0.04284795 883.56752359 +6 1 8 1 6 -3.35285189 -0.42847947 5.50596124 +6 1 8 1 7 0.06427192 -0.04284795 887.53095873 +6 1 8 1 8 3.40641182 0.47132742 5.53809720 +6 1 8 2 1 -536.49914955 -536.39202968 -91.28755196 +6 1 8 2 2 -0.02142397 0.19281576 3374.16873886 +6 1 8 2 3 536.52057352 536.37060571 -93.32282946 +6 1 8 2 4 -0.77126305 0.66414318 2915.58858168 +6 1 8 2 5 -533.30697747 533.28555349 -110.29061664 +6 1 8 2 6 -5.42026535 -0.29993563 -2952.50208837 +6 1 8 2 7 537.87028387 -537.97740374 -89.42366625 +6 1 8 2 8 1.54252611 4.15625090 -2952.57707228 +6 1 8 3 1 1557.56573639 -3076.71828792 3060.67173161 +6 1 8 3 2 0.40705550 2914.32456723 -1.03906272 +6 1 8 3 3 1557.63000831 -3076.76113587 -3058.65787809 +6 1 8 3 4 0.47132742 574.74094262 -1.26401445 +6 1 8 3 5 -1554.39498828 -3080.38178742 -3071.16947873 +6 1 8 3 6 -6.22366436 11773.20196666 6.08440853 +6 1 8 3 7 -1558.63693507 -3077.03964753 3064.37807907 +6 1 8 3 8 3.08505221 -2951.43088969 0.69627915 +6 2 8 1 1 536.37060571 536.39202968 -91.37324786 +6 2 8 1 2 0.85695895 -0.58915928 2915.58858168 +6 2 8 1 3 -536.43487763 -536.30633379 -93.53706920 +6 2 8 1 4 -0.06427192 -0.06427192 3374.14731488 +6 2 8 1 5 533.24270555 -533.30697747 -110.29061664 +6 2 8 1 6 -1.49967816 -4.24194679 -2952.58778427 +6 2 8 1 7 -537.91313182 537.91313182 -89.40224228 +6 2 8 1 8 5.42026535 0.28922365 -2952.45924042 +6 2 8 2 1 0.02142397 0.02142397 -889.97329173 +6 2 8 2 2 -0.17139179 0.05355993 1.19974253 +6 2 8 2 3 0.08569589 0.02142397 -894.49375018 +6 2 8 2 4 0.01071199 0.10711987 1.30686240 +6 2 8 2 5 0.02142397 -0.02142397 883.48182770 +6 2 8 2 6 -3.05291625 -0.68556716 5.42026535 +6 2 8 2 7 -0.02142397 -0.06427192 887.48811078 +6 2 8 2 8 3.06362824 0.74983908 5.54880919 +6 2 8 3 1 -3076.76113587 1557.60858433 -3060.80027546 +6 2 8 3 2 574.71951864 0.39634351 -0.87838292 +6 2 8 3 3 -3076.67543997 1557.65143228 3058.61503014 +6 2 8 3 4 2914.34599120 0.42847947 -0.70699113 +6 2 8 3 5 -3080.42463537 -1554.35214033 -3070.91239105 +6 2 8 3 6 11773.14840672 -6.34149622 8.05541411 +6 2 8 3 7 -3076.88967971 -1558.72263097 3064.44235099 +6 2 8 3 8 -2951.45231366 3.14932413 2.53874088 +6 3 8 1 1 1557.63000831 -3076.67543997 -3060.69315559 +6 3 8 1 2 0.32135961 574.65524672 1.09262266 +6 3 8 1 3 1557.71570420 -3076.69686395 3060.62888367 +6 3 8 1 4 0.55702332 2914.36741517 0.89980690 +6 3 8 1 5 -1554.43783623 -3080.42463537 3071.08378284 +6 3 8 1 6 3.80275533 -2952.05218492 -1.49967816 +6 3 8 1 7 -1558.72263097 -3076.99679958 -3064.42092701 +6 3 8 1 8 -6.89851953 11773.72685401 -7.03777536 +6 3 8 2 1 -3076.71828792 1557.60858433 3060.75742751 +6 3 8 2 2 2914.45311107 0.51417537 0.73912709 +6 3 8 2 3 -3076.80398381 1557.56573639 -3060.58603572 +6 3 8 2 4 574.58026281 0.34278358 1.09262266 +6 3 8 2 5 -3080.36036345 -1554.39498828 3071.21232668 +6 3 8 2 6 -2952.08432088 3.83489129 -1.56395008 +6 3 8 2 7 -3076.91110368 -1558.55123918 -3064.39950304 +6 3 8 2 8 11773.75898997 -6.91994351 -6.98421543 +6 3 8 3 1 -0.02142397 -0.06427192 -9469.88912953 +6 3 8 3 2 -1.69249392 0.93194286 2.36734909 +6 3 8 3 3 -0.02142397 -0.04284795 -9461.16957223 +6 3 8 3 4 1.69249392 -0.96407882 2.39948506 +6 3 8 3 5 0.04284795 0.08569589 9444.71596043 +6 3 8 3 6 11.97600130 6.87709556 4.90608998 +6 3 8 3 7 -0.00000000 -0.14996782 9471.79586319 +6 3 8 3 8 -11.99742528 -6.80211165 4.92751395 +7 1 1 1 1 -0.02142397 -0.03213596 -5.18460164 +7 1 1 1 2 -9468.73223495 0.06427192 3.06362824 +7 1 1 1 3 0.02142397 0.02142397 0.51417537 +7 1 1 1 4 9468.76437091 -0.02142397 2.93508440 +7 1 1 1 5 -0.02142397 0.02142397 -0.14996782 +7 1 1 1 6 9470.91748027 0.66414318 -0.85695895 +7 1 1 1 7 0.08569589 -0.03213596 0.38563153 +7 1 1 1 8 -9470.85320835 -0.77126305 -0.83553497 +7 1 1 2 1 0.04284795 0.07498391 -11783.73184973 +7 1 1 2 2 3060.43606790 1561.33635576 3077.53239892 +7 1 1 2 3 -0.02142397 0.08569589 -2915.16010220 +7 1 1 2 4 -3060.43606790 -1561.29350781 3077.61809482 +7 1 1 2 5 -0.02142397 -0.04284795 -574.71951864 +7 1 1 2 6 3060.80027546 -1557.43719255 3077.51097495 +7 1 1 2 7 -0.00000000 0.05355993 2963.54614682 +7 1 1 2 8 -3060.82169943 1557.50146447 3077.36100713 +7 1 1 3 1 -1.77818982 -11783.18553841 0.04284795 +7 1 1 3 2 3062.94267283 3079.61052437 1556.34456989 +7 1 1 3 3 0.73912709 -573.58404804 0.02142397 +7 1 1 3 4 3062.94267283 3079.63194834 -1556.21602604 +7 1 1 3 5 -0.80339901 -2915.61000565 -0.00000000 +7 1 1 3 6 -3061.18590698 3076.58974408 -1557.39434460 +7 1 1 3 7 -1.67106995 2959.93620725 0.02142397 +7 1 1 3 8 -3061.20733096 3076.62188004 1557.31936069 +7 2 1 1 1 -0.06427192 -0.05355993 2957.22607457 +7 2 1 1 2 -3063.52112012 1556.38741783 3075.68993718 +7 2 1 1 3 -0.00000000 0.02142397 -573.36980830 +7 2 1 1 4 3063.47827217 -1556.38741783 3075.45427347 +7 2 1 1 5 0.10711987 -0.00000000 -2914.26029531 +7 2 1 1 6 -3061.07878711 -1557.15868089 3076.43977626 +7 2 1 1 7 -0.04284795 -0.01071199 -11773.64115812 +7 2 1 1 8 3061.05736314 1557.21224082 3076.40764030 +7 2 1 2 1 -0.04284795 0.02142397 -2.08883744 +7 2 1 2 2 -888.96636496 0.53559934 2.46375698 +7 2 1 2 3 0.04284795 0.02142397 0.72841511 +7 2 1 2 4 889.03063689 -0.55702332 2.31378916 +7 2 1 2 5 -0.04284795 -0.00000000 -1.97100558 +7 2 1 2 6 888.62358139 -0.92123087 -0.00000000 +7 2 1 2 7 -0.02142397 0.03213596 -1.86388571 +7 2 1 2 8 -888.60215741 0.92123087 0.29993563 +7 2 1 3 1 2960.34326275 -1.68178194 -0.06427192 +7 2 1 3 2 92.01596707 -534.87092755 538.25591539 +7 2 1 3 3 -2914.67806279 0.70699113 -0.02142397 +7 2 1 3 4 92.02667905 -534.93519947 -538.12737155 +7 2 1 3 5 -3373.81524329 -1.07119869 0.19281576 +7 2 1 3 6 90.40916904 535.83500637 537.78458797 +7 2 1 3 7 2963.47116291 -0.05355993 0.03213596 +7 2 1 3 8 90.30204917 535.93141425 -537.81672393 +7 3 1 1 1 -1.02835074 2959.38989592 -0.02142397 +7 3 1 1 2 -3058.87211782 3075.02579400 1559.60101389 +7 3 1 1 3 0.26779967 -2913.70327199 -0.10711987 +7 3 1 1 4 -3058.88282981 3074.94009810 -1559.53674197 +7 3 1 1 5 0.40705550 -574.91233441 0.02142397 +7 3 1 1 6 3060.65030764 3076.03272076 -1559.23680634 +7 3 1 1 7 -3.19217208 -11772.98772692 -0.04284795 +7 3 1 1 8 3060.67173161 3076.07556871 1559.22609435 +7 3 1 2 1 2962.05718064 -2.52802890 0.03213596 +7 3 1 2 2 89.53078612 539.75559355 -536.47772558 +7 3 1 2 3 -3371.54430208 0.55702332 -0.02142397 +7 3 1 2 4 89.61648201 539.75559355 536.62769339 +7 3 1 2 5 -2914.04605557 0.10711987 0.04284795 +7 3 1 2 6 89.59505804 -538.04167566 -536.13494200 +7 3 1 2 7 2965.18508081 -1.56395008 -0.03213596 +7 3 1 2 8 89.61648201 -537.96669175 536.02782213 +7 3 1 3 1 -0.17139179 -0.06427192 4.86324203 +7 3 1 3 2 -890.85167465 -0.14996782 -2.89223645 +7 3 1 3 3 0.04284795 0.02142397 2.16382134 +7 3 1 3 4 890.84096266 0.27851166 -2.74226863 +7 3 1 3 5 -0.05355993 -0.02142397 -2.46375698 +7 3 1 3 6 888.94494099 -0.12854384 1.92815763 +7 3 1 3 7 0.04284795 -0.04284795 -2.71013267 +7 3 1 3 8 -889.00921291 0.11783186 2.02456552 +7 1 2 1 1 -9469.63204185 3060.52176380 3063.70322389 +7 1 2 1 2 74061.56305567 -71906.32201282 -71941.36092181 +7 1 2 1 3 -0.23566371 -1555.85181849 -535.47079881 +7 1 2 1 4 -0.86767094 535.79215842 1555.63757875 +7 1 2 1 5 -0.97479080 -534.48529602 -1556.49453770 +7 1 2 1 6 -1.63893399 1553.28094165 536.41345366 +7 1 2 1 7 -74051.57948392 71904.77948671 71937.50460655 +7 1 2 1 8 9463.26912166 -3057.64023933 -3059.86833260 +7 1 2 2 1 0.32135961 1561.90409106 3079.65337232 +7 1 2 2 2 -71903.50476027 66918.12465487 80698.69939786 +7 1 2 2 3 890.95879452 3065.06364622 93.13001370 +7 1 2 2 4 -535.43866285 -0.36420755 -3078.30366197 +7 1 2 2 5 2.35663711 -537.50607631 3074.53304260 +7 1 2 2 6 1557.34078466 -0.10711987 -3075.02579400 +7 1 2 2 7 66929.13657735 -71897.27038392 -80701.79516206 +7 1 2 2 8 3058.78642193 890.25180339 -90.83764851 +7 1 2 3 1 3.68492348 3078.04657429 1556.69806545 +7 1 2 3 2 -71942.56066434 80699.36354105 66983.76771030 +7 1 2 3 3 2.42090903 3075.49712142 -538.23449142 +7 1 2 3 4 1556.83732128 -3078.92495721 0.47132742 +7 1 2 3 5 890.72313081 93.15143767 3062.87840091 +7 1 2 3 6 -538.50229109 -3072.51918907 -0.27851166 +7 1 2 3 7 66969.97067124 -80706.03710886 -71956.21844758 +7 1 2 3 8 3057.35101569 -88.59884326 890.78740273 +7 2 2 1 1 -3064.22811125 -890.16610749 93.64418907 +7 2 2 1 2 -66921.18828311 71901.97294615 80699.45994893 +7 2 2 1 3 -1561.08998006 0.51417537 3079.07492503 +7 2 2 1 4 0.19281576 535.29940702 -3078.23939005 +7 2 2 1 5 537.73102804 -2.05670148 3074.49019465 +7 2 2 1 6 -890.45533114 -3058.76499795 -90.85907249 +7 2 2 1 7 71899.94838064 -66928.81521775 -80701.81658604 +7 2 2 1 8 -0.79268703 -1558.05848778 -3075.65780122 +7 2 2 2 1 1555.76612260 0.38563153 -535.53507073 +7 2 2 2 2 71905.39006996 -74063.19127767 -71940.86817042 +7 2 2 2 3 -3059.85762061 9470.53184874 3063.07121667 +7 2 2 2 4 -535.97426219 0.70699113 1555.65900273 +7 2 2 2 5 534.53885596 1.19974253 -1556.40884181 +7 2 2 2 6 3057.52240748 -9463.20484974 -3059.96474048 +7 2 2 2 7 -71903.18340067 74052.50071479 71938.10447781 +7 2 2 2 8 -1554.22359649 0.98550279 535.76002246 +7 2 2 3 1 3075.47569744 2.39948506 538.19164347 +7 2 2 3 2 80699.20286125 -71942.28215268 -66983.64987845 +7 2 2 3 3 3077.99301436 3.59922758 -1556.68735347 +7 2 2 3 4 -3078.87139728 1556.77304936 -0.40705550 +7 2 2 3 5 93.18357364 890.76597876 -3062.89982488 +7 2 2 3 6 -88.57741929 3057.37243966 -890.74455478 +7 2 2 3 7 -80705.80144515 66969.91711130 71955.92922393 +7 2 2 3 8 -3072.49776510 -538.48086712 0.32135961 +7 3 2 1 1 -3059.60053293 90.86978447 -889.53410027 +7 3 2 1 2 -66971.23468569 80709.01504120 71950.68035037 +7 3 2 1 3 540.17336104 3075.26145771 -0.38563153 +7 3 2 1 4 -884.69228221 -101.54963537 -3065.25646199 +7 3 2 1 5 -1559.77240568 3079.73906821 1.69249392 +7 3 2 1 6 -0.59987126 -3073.16190828 537.57034824 +7 3 2 1 7 71938.87574086 -80703.88399950 -66977.13699044 +7 3 2 1 8 -3.10647619 -3076.24696050 -1557.69428023 +7 3 2 2 1 3075.43284950 540.00196925 0.51417537 +7 3 2 2 2 80709.48636862 -66969.98138322 -71951.36591753 +7 3 2 2 3 90.28062520 -3060.50033982 890.10183557 +7 3 2 2 4 -101.67817921 -884.85296201 3065.21361404 +7 3 2 2 5 3079.64266033 -1559.92237350 -1.77818982 +7 3 2 2 6 -3076.85754375 -4.00628308 1558.33699944 +7 3 2 2 7 -80703.46623201 71940.03263544 66976.52640719 +7 3 2 2 8 -3072.99051650 -0.78197504 -537.44180439 +7 3 2 3 1 1559.00114263 -536.80979717 -3.22430804 +7 3 2 3 2 71946.00992411 -71945.95636417 -74125.82426480 +7 3 2 3 3 536.80979717 -1559.06541455 -3.19217208 +7 3 2 3 4 3067.75235492 -3067.67737102 -9458.21306386 +7 3 2 3 5 -3058.12227874 3058.14370272 9466.35417387 +7 3 2 3 6 -536.25277385 1559.38677415 2.97793235 +7 3 2 3 7 -71955.67213625 71955.71498420 74118.09021030 +7 3 2 3 8 -1559.40819813 536.26348584 3.02078029 +7 1 3 1 1 -0.12854384 -0.02142397 0.63200722 +7 1 3 1 2 -0.55702332 889.00921291 2.37806108 +7 1 3 1 3 -0.03213596 -0.00000000 -2.22809327 +7 1 3 1 4 0.50346338 -889.00921291 2.52802890 +7 1 3 1 5 0.01071199 0.08569589 -1.97100558 +7 1 3 1 6 -0.87838292 888.70927728 0.29993563 +7 1 3 1 7 -0.00000000 0.04284795 -1.91744565 +7 1 3 1 8 0.85695895 -888.58073344 0.26779967 +7 1 3 2 1 -0.00000000 -0.06427192 -573.47692817 +7 1 3 2 2 -1556.45168975 3063.47827217 3075.73278513 +7 1 3 2 3 -0.00000000 -0.02142397 2957.12966669 +7 1 3 2 4 1556.44097777 -3063.58539204 3075.75420910 +7 1 3 2 5 -0.03213596 -0.04284795 -2914.34599120 +7 1 3 2 6 -1557.22295281 -3061.05736314 3076.31123242 +7 1 3 2 7 -0.12854384 0.02142397 -11773.73756600 +7 1 3 2 8 1557.26580076 3061.05736314 3076.41835229 +7 1 3 3 1 0.62129524 -2914.64592683 -0.01071199 +7 1 3 3 2 -534.89235152 91.97311912 -538.21306745 +7 1 3 3 3 -1.74605386 2960.32183877 -0.06427192 +7 1 3 3 4 -534.96733543 91.86599925 538.38445924 +7 1 3 3 5 -1.04977471 -3373.76168336 0.04284795 +7 1 3 3 6 535.89927829 90.36632109 537.61319618 +7 1 3 3 7 -0.10711987 2963.59970675 -0.00000000 +7 1 3 3 8 536.00639816 90.23777725 -537.87028387 +7 2 3 1 1 -0.00000000 0.03213596 -2914.98871041 +7 2 3 1 2 -1561.29350781 -3058.29367053 3077.46812700 +7 2 3 1 3 0.03213596 -0.08569589 -11782.43569933 +7 2 3 1 4 1561.28279583 3058.35794245 3077.63951879 +7 2 3 1 5 0.05355993 -0.06427192 -574.97660633 +7 2 3 1 6 -1557.45861652 3060.80027546 3077.33958316 +7 2 3 1 7 0.04284795 0.06427192 2962.26070839 +7 2 3 1 8 1557.39434460 -3060.82169943 3077.31815918 +7 2 3 2 1 -0.04284795 0.05355993 0.65343120 +7 2 3 2 2 -0.08569589 9468.66796303 3.06362824 +7 2 3 2 3 -0.00000000 0.02142397 -3.92058719 +7 2 3 2 4 0.05355993 -9468.77508290 2.87081248 +7 2 3 2 5 0.02142397 0.02142397 -0.29993563 +7 2 3 2 6 0.81411100 9468.58226714 -1.02835074 +7 2 3 2 7 0.08569589 -0.02142397 -0.85695895 +7 2 3 2 8 -0.77126305 -9468.67867502 -0.89980690 +7 2 3 3 1 -573.51977611 0.71770312 -0.04284795 +7 2 3 3 2 3079.65337232 3062.89982488 -1556.32314591 +7 2 3 3 3 -11783.20696238 -1.82103777 -0.10711987 +7 2 3 3 4 3079.66408430 3062.87840091 1556.40884181 +7 2 3 3 5 -2915.64214161 -0.77126305 -0.00000000 +7 2 3 3 6 3076.58974408 -3061.14305904 -1557.22295281 +7 2 3 3 7 2959.89335930 -1.59608604 0.05355993 +7 2 3 3 8 3076.54689613 -3061.28231486 1557.22295281 +7 3 3 1 1 0.59987126 -3372.01562950 0.05355993 +7 3 3 1 2 539.75559355 91.84457528 536.45630160 +7 3 3 1 3 -3.70634745 2960.27899083 0.08569589 +7 3 3 1 4 539.74488157 91.78030336 -536.58484545 +7 3 3 1 5 -0.18210378 -2914.51738299 0.02142397 +7 3 3 1 6 -537.95597976 89.53078612 -535.94212623 +7 3 3 1 7 -0.21423974 2963.36404304 0.05355993 +7 3 3 1 8 -538.02025168 89.56292208 536.15636597 +7 3 3 2 1 -2913.72469596 0.19281576 -0.04284795 +7 3 3 2 2 3075.02579400 -3058.89354180 -1559.70813376 +7 3 3 2 3 2959.58271168 -1.04977471 0.08569589 +7 3 3 2 4 3075.01508201 -3058.82926988 1559.62243786 +7 3 3 2 5 -574.90162242 0.53559934 0.04284795 +7 3 3 2 6 3076.07556871 3060.62888367 -1559.19395839 +7 3 3 2 7 -11772.92345500 -3.19217208 0.02142397 +7 3 3 2 8 3075.98987281 3060.59674771 1559.15111044 +7 3 3 3 1 -0.06427192 0.02142397 2.28165320 +7 3 3 3 2 0.17139179 890.78740273 -2.97793235 +7 3 3 3 3 0.01071199 -0.02142397 4.73469819 +7 3 3 3 4 -0.11783186 -890.74455478 -2.78511658 +7 3 3 3 5 -0.03213596 0.10711987 -2.46375698 +7 3 3 3 6 -0.14996782 888.90209304 2.14239737 +7 3 3 3 7 0.04284795 -0.06427192 -2.74226863 +7 3 3 3 8 0.10711987 -889.04134887 2.03527750 +7 1 4 1 1 9469.61061787 -3060.53247578 3063.70322389 +7 1 4 1 2 0.83553497 -535.79215842 1555.59473081 +7 1 4 1 3 0.23566371 1555.85181849 -535.38510292 +7 1 4 1 4 -74061.54163170 71906.24702891 -71941.29664989 +7 1 4 1 5 0.98550279 534.44244807 -1556.49453770 +7 1 4 1 6 -9463.22627371 3057.65095132 -3059.94331651 +7 1 4 1 7 74051.42951611 -71904.56524697 71937.45104661 +7 1 4 1 8 1.62822200 -1553.29165363 536.41345366 +7 1 4 2 1 -0.19281576 -1561.79697119 3079.83547609 +7 1 4 2 2 535.40652689 0.37491954 -3078.38935787 +7 1 4 2 3 -891.06591439 -3065.14934212 93.32282946 +7 1 4 2 4 71903.59045617 -66918.33889461 80696.65340837 +7 1 4 2 5 -2.97793235 538.14879553 3075.36857758 +7 1 4 2 6 -3058.87211782 -890.29465133 -90.75195262 +7 1 4 2 7 -66928.62240198 71896.98116028 -80701.09888292 +7 1 4 2 8 -1557.43719255 0.14996782 -3075.02579400 +7 1 4 3 1 3.57780361 3077.92874243 -1556.90159320 +7 1 4 3 2 1556.81589731 -3078.90353324 -0.46061543 +7 1 4 3 3 2.48518095 3075.53996937 537.99882771 +7 1 4 3 4 -71942.22859275 80699.11716535 -66981.23968141 +7 1 4 3 5 891.35513803 92.55156641 -3063.82105575 +7 1 4 3 6 3057.34030370 -88.56670730 -890.85167465 +7 1 4 3 7 66969.11371229 -80705.05160607 71954.96514512 +7 1 4 3 8 -538.49157911 -3072.49776510 0.32135961 +7 2 4 1 1 3064.33523112 890.27322736 93.85842881 +7 2 4 1 2 -0.17139179 -535.35296696 -3078.27152601 +7 2 4 1 3 1561.03642013 -0.55702332 3079.22489284 +7 2 4 1 4 66921.22041907 -71902.04793006 80697.25327964 +7 2 4 1 5 -538.40588321 2.74226863 3075.41142552 +7 2 4 1 6 0.81411100 1558.03706381 -3075.66851321 +7 2 4 1 7 -71899.32708540 66928.17249854 -80700.88464318 +7 2 4 1 8 890.44461915 3058.66859007 -90.93405640 +7 2 4 2 1 -1555.72327465 -0.40705550 -535.54578272 +7 2 4 2 2 535.94212623 -0.77126305 1555.66971471 +7 2 4 2 3 3059.91118055 -9470.51042477 3063.11406462 +7 2 4 2 4 -71905.26152612 74062.84849409 -71940.58965876 +7 2 4 2 5 -534.53885596 -1.15689458 -1556.40884181 +7 2 4 2 6 1554.25573245 -0.94265484 535.74931047 +7 2 4 2 7 71902.90488901 -74052.17935519 71937.87952608 +7 2 4 2 8 -3057.43671158 9463.18342576 -3059.95402849 +7 2 4 3 1 3075.49712142 2.47446896 -537.96669175 +7 2 4 3 2 -3078.90353324 1556.82660929 0.47132742 +7 2 4 3 3 3077.96087839 3.55637964 1556.88016923 +7 2 4 3 4 80699.42781297 -71942.41069652 66981.71100883 +7 2 4 3 5 92.54085442 891.32300207 3063.75678383 +7 2 4 3 6 -3072.45491715 -538.47015513 -0.29993563 +7 2 4 3 7 -80705.37296567 66969.40293593 -71955.20080883 +7 2 4 3 8 -88.60955525 3057.35101569 890.78740273 +7 3 4 1 1 -3059.60053293 90.88049646 889.51267629 +7 3 4 1 2 -884.66014625 -101.53892338 3065.24575000 +7 3 4 1 3 540.16264905 3075.32572963 0.29993563 +7 3 4 1 4 -66971.19183774 80708.95076928 -71950.53038256 +7 3 4 1 5 -1559.74026972 3079.69622027 -1.75676584 +7 3 4 1 6 -3.09576420 -3076.22553652 1557.65143228 +7 3 4 1 7 71938.79004497 -80704.01254334 66977.15841442 +7 3 4 1 8 -0.62129524 -3073.09763636 -537.49536433 +7 3 4 2 1 3075.34715360 540.05552919 -0.50346338 +7 3 4 2 2 -101.54963537 -884.67085824 -3065.24575000 +7 3 4 2 3 90.23777725 -3060.47891585 -890.20895544 +7 3 4 2 4 80709.01504120 -66968.96374447 71950.61607845 +7 3 4 2 5 3079.61052437 -1559.90094952 1.82103777 +7 3 4 2 6 -3073.14048431 -0.62129524 537.48465234 +7 3 4 2 7 -80703.29484022 71937.99735794 -66976.47284726 +7 3 4 2 8 -3076.24696050 -3.10647619 -1557.70499222 +7 3 4 3 1 -1559.06541455 536.82050916 -3.22430804 +7 3 4 3 2 -3067.69879499 3067.69879499 -9458.20235188 +7 3 4 3 3 -536.78837320 1559.04399057 -3.21359606 +7 3 4 3 4 -71945.75283642 71945.79568437 -74125.70643295 +7 3 4 3 5 3058.11156676 -3058.16512669 9466.39702182 +7 3 4 3 6 1559.46175806 -536.19921392 2.99935632 +7 3 4 3 7 71955.58644035 -71955.57572837 74117.97237844 +7 3 4 3 8 536.19921392 -1559.44033409 2.95650837 +7 1 5 1 1 0.04284795 -0.00000000 -0.63200722 +7 1 5 1 2 -0.77126305 2.33521313 890.12325954 +7 1 5 1 3 0.03213596 -0.08569589 -0.83553497 +7 1 5 1 4 0.81411100 -2.33521313 890.03756365 +7 1 5 1 5 -0.03213596 -0.02142397 -4.00628308 +7 1 5 1 6 -0.74983908 -2.35663711 -886.69542375 +7 1 5 1 7 -0.02142397 0.03213596 -1.41398226 +7 1 5 1 8 0.72841511 2.42090903 -886.62043984 +7 1 5 2 1 -0.02142397 -0.10711987 -2915.89922929 +7 1 5 2 2 -534.76380768 -537.93455579 91.37324786 +7 1 5 2 3 0.12854384 0.14996782 -3374.53294641 +7 1 5 2 4 534.72095973 537.99882771 93.49422125 +7 1 5 2 5 0.62129524 -0.64271921 2950.72389855 +7 1 5 2 6 -537.24898863 533.90684873 101.89241895 +7 1 5 2 7 -0.59987126 0.61058325 2950.72389855 +7 1 5 2 8 537.14186876 -534.06752853 101.95669087 +7 1 5 3 1 -0.83553497 -574.62311076 0.02142397 +7 1 5 3 2 -1556.13033015 3074.79013029 3062.57846527 +7 1 5 3 3 -1.64964598 -2914.51738299 -0.00000000 +7 1 5 3 4 -1556.22673803 3074.81155426 -3062.68558514 +7 1 5 3 5 -3.57780361 2952.82344798 -0.04284795 +7 1 5 3 6 1557.90851997 3080.63887511 -3066.84183604 +7 1 5 3 7 2.72084466 -11774.38028521 -0.01071199 +7 1 5 3 8 1557.88709599 3080.61745113 3066.88468399 +7 2 5 1 1 -0.08569589 -0.16067980 -3374.50081045 +7 2 5 1 2 537.95597976 534.78523165 91.56606362 +7 2 5 1 3 0.05355993 0.08569589 -2915.93136525 +7 2 5 1 4 -537.99882771 -534.76380768 93.57991715 +7 2 5 1 5 0.66414318 -0.70699113 2950.72389855 +7 2 5 1 6 533.94969668 -537.37753247 101.97811484 +7 2 5 1 7 -0.57844729 0.59987126 2950.61677869 +7 2 5 1 8 -533.97112065 537.25970062 102.01025080 +7 2 5 2 1 -0.00000000 0.09640788 -0.80339901 +7 2 5 2 2 -2.39948506 0.83553497 890.16610749 +7 2 5 2 3 -0.06427192 0.02142397 -0.62129524 +7 2 5 2 4 2.37806108 -0.77126305 890.03756365 +7 2 5 2 5 -0.01071199 -0.08569589 -3.98485911 +7 2 5 2 6 -2.42090903 -0.81411100 -886.65257580 +7 2 5 2 7 -0.00000000 -0.03213596 -1.43540624 +7 2 5 2 8 2.44233300 0.74983908 -886.55616792 +7 2 5 3 1 -2914.58165491 -1.71391790 0.03213596 +7 2 5 3 2 3074.68301042 -1556.19460207 -3062.55704130 +7 2 5 3 3 -574.54812685 -0.79268703 0.02142397 +7 2 5 3 4 3074.75799433 -1556.32314591 3062.51419335 +7 2 5 3 5 2952.75917606 -3.51353169 -0.04284795 +7 2 5 3 6 3080.63887511 1557.95136791 -3066.84183604 +7 2 5 3 7 -11774.33743726 2.71013267 0.01071199 +7 2 5 3 8 3080.63887511 1557.91923195 3066.88468399 +7 3 5 1 1 0.38563153 -2914.49595902 -0.10711987 +7 3 5 1 2 -1559.02256660 3078.58217363 -3060.92881930 +7 3 5 1 3 0.37491954 -574.59097480 -0.04284795 +7 3 5 1 4 -1558.92615872 3078.56074966 3061.05736314 +7 3 5 1 5 12.29736091 -11774.44455713 0.06427192 +7 3 5 1 6 1555.10197941 3076.71828792 3068.59860189 +7 3 5 1 7 -5.42026535 2952.75917606 -0.04284795 +7 3 5 1 8 1555.20909928 3076.77184785 -3068.51290599 +7 3 5 2 1 -574.54812685 0.43919146 0.05355993 +7 3 5 2 2 3078.66786953 -1559.00114263 3060.84312340 +7 3 5 2 3 -2914.45311107 0.29993563 0.04284795 +7 3 5 2 4 3078.66786953 -1558.89402276 -3061.10021109 +7 3 5 2 5 -11774.39099720 12.38305680 0.04284795 +7 3 5 2 6 3076.73971189 1555.12340339 3068.64144983 +7 3 5 2 7 2952.69490413 -5.43097733 0.03213596 +7 3 5 2 8 3076.78255984 1555.15553935 -3068.51290599 +7 3 5 3 1 -0.00000000 -0.04284795 -2.49589294 +7 3 5 3 2 3.08505221 -3.04220427 9467.74673216 +7 3 5 3 3 0.01071199 -0.04284795 -2.52802890 +7 3 5 3 4 -3.09576420 3.02078029 9467.51106845 +7 3 5 3 5 -0.03213596 -0.00000000 -11.44040196 +7 3 5 3 6 3.04220427 3.08505221 -9459.49850228 +7 3 5 3 7 -0.04284795 -0.02142397 -0.16067980 +7 3 5 3 8 -3.04220427 -3.04220427 -9459.30568652 +7 1 6 1 1 9466.46129374 3061.60367447 -3061.80720222 +7 1 6 1 2 -0.32135961 1557.51217645 -538.83436268 +7 1 6 1 3 -1.45683021 -1556.70877744 536.30633379 +7 1 6 1 4 -9464.87591968 -3057.82234311 3056.51548071 +7 1 6 1 5 -0.89980690 -536.97047697 1557.95136791 +7 1 6 1 6 -74103.85397977 -72014.58806394 72010.34611715 +7 1 6 1 7 74104.53954693 72008.48223143 -72002.55850270 +7 1 6 1 8 0.23566371 538.51300308 -1557.86567202 +7 1 6 2 1 1.17831855 -1557.84424805 3076.75042388 +7 1 6 2 2 1554.37356431 0.81411100 -3072.79770073 +7 1 6 2 3 889.83403590 -3061.52869056 91.39467183 +7 1 6 2 4 3055.25146627 -889.07348483 -90.02353751 +7 1 6 2 5 -2.58158883 533.54264118 3080.08185179 +7 1 6 2 6 -72014.05246460 -67033.49275328 80801.22382403 +7 1 6 2 7 67054.63821532 72007.59313652 -80809.37564603 +7 1 6 2 8 -538.72724282 -0.11783186 -3077.32887117 +7 1 6 3 1 -1.26401445 3077.80019859 -1557.50146447 +7 1 6 3 2 534.95662344 -3075.09006592 0.02142397 +7 1 6 3 3 -0.25708768 3076.88967971 538.12737155 +7 1 6 3 4 -3059.62195690 -90.79480057 -890.89452260 +7 1 6 3 5 -885.97772063 100.47843668 -3064.57089483 +7 1 6 3 6 72010.31398119 80799.03857872 -67021.49532800 +7 1 6 3 7 -67039.25580220 -80811.22881975 71996.92399762 +7 1 6 3 8 -1559.06541455 -3077.14676739 -0.46061543 +7 2 6 1 1 -3061.55011454 889.89830782 91.34111190 +7 2 6 1 2 -890.38034723 3057.09392801 -88.71667512 +7 2 6 1 3 -1557.85496003 1.15689458 3076.73971189 +7 2 6 1 4 0.99621478 1554.73777186 -3072.64773292 +7 2 6 1 5 533.62833707 -2.57087684 3080.16754769 +7 2 6 1 6 -67031.98236313 -72012.08145902 80799.78841780 +7 2 6 1 7 72007.32533685 67050.06419694 -80809.27923815 +7 2 6 1 8 -0.21423974 -538.32018732 -3077.45741501 +7 2 6 2 1 -1557.50146447 -0.88909491 535.51364676 +7 2 6 2 2 -3057.97231093 -9464.96161558 3056.47263277 +7 2 6 2 3 3061.38943473 9466.41844579 -3062.12856183 +7 2 6 2 4 1556.56952161 0.38563153 -539.51992984 +7 2 6 2 5 -537.79529996 -1.39255829 1557.05156102 +7 2 6 2 6 -72013.51686525 -74104.45385103 72013.23835360 +7 2 6 2 7 72010.49608496 74104.67880276 -72002.91199827 +7 2 6 2 8 538.34161129 0.31064762 -1557.75855215 +7 2 6 3 1 3076.93252766 -0.22495172 538.12737155 +7 2 6 3 2 -91.00904030 -3059.71836478 -890.94808253 +7 2 6 3 3 3077.84304654 -1.24259047 -1557.52288844 +7 2 6 3 4 -3075.94702487 535.53507073 -0.59987126 +7 2 6 3 5 100.45701271 -885.96700865 -3064.57089483 +7 2 6 3 6 80798.04236394 72009.78909383 -67021.04542455 +7 2 6 3 7 -80808.89360662 -67039.12725836 71996.89186166 +7 2 6 3 8 -3077.27531124 -1558.94758269 -0.34278358 +7 3 6 1 1 3061.33587480 90.66625672 889.93044378 +7 3 6 1 2 -1.17831855 -3075.56139334 -535.97426219 +7 3 6 1 3 -538.45944314 3076.69686395 -0.04284795 +7 3 6 1 4 -2.03527750 -3073.95459531 1559.90094952 +7 3 6 1 5 1554.11647662 3075.83990500 1.58537405 +7 3 6 1 6 67036.67421337 80805.08013930 -71999.39846658 +7 3 6 1 7 -71999.18422685 -80808.28302337 67021.28108826 +7 3 6 1 8 888.70927728 -90.40916904 3062.74985706 +7 3 6 2 1 3076.69686395 -538.44873116 0.02142397 +7 3 6 2 2 -3074.14741108 -2.17453333 1559.80454164 +7 3 6 2 3 90.59127282 3061.27160288 889.97329173 +7 3 6 2 4 -3076.40764030 -0.57844729 -536.62769339 +7 3 6 2 5 3075.76492109 1554.13790059 1.58537405 +7 3 6 2 6 80804.25531631 67036.27786986 -71998.77717134 +7 3 6 2 7 -80806.15133799 -71999.23778678 67021.30251224 +7 3 6 2 8 -90.60198480 888.82710914 3062.82484097 +7 3 6 3 1 -1559.47247005 -535.66361458 2.04598949 +7 3 6 3 2 536.34918173 1559.47247005 3.84560328 +7 3 6 3 3 -536.53128551 -1558.72263097 2.54945287 +7 3 6 3 4 1557.88709599 537.97740374 2.74226863 +7 3 6 3 5 3070.17326395 3070.41963965 -9458.21306386 +7 3 6 3 6 -72000.45895328 -72002.03361535 74086.95046451 +7 3 6 3 7 71995.11367184 71991.04311684 -74109.46706088 +7 3 6 3 8 -3063.04979270 -3062.49276938 9469.33210622 +7 1 7 1 1 -0.02142397 0.01071199 -2.65657274 +7 1 7 1 2 -74052.67210658 66926.62997243 66965.96438815 +7 1 7 1 3 0.03213596 -0.02142397 0.08569589 +7 1 7 1 4 74052.53285075 -66926.73709230 66966.00723610 +7 1 7 1 5 -0.09640788 0.02142397 3.55637964 +7 1 7 1 6 74102.02223002 67046.64707313 -67035.09955130 +7 1 7 1 7 0.12854384 -0.06427192 137.28482351 +7 1 7 1 8 -74102.14006187 -67046.68992108 -67035.15311124 +7 1 7 2 1 0.17139179 0.05355993 2964.03889821 +7 1 7 2 2 71893.37122071 -71893.38193270 -80701.97726584 +7 1 7 2 3 0.08569589 -0.00000000 2964.02818623 +7 1 7 2 4 -71893.46762859 71893.45691661 -80702.13794564 +7 1 7 2 5 0.03213596 -0.00000000 -11772.30215976 +7 1 7 2 6 72009.09281468 72009.08210270 -80812.21432255 +7 1 7 2 7 0.21423974 0.03213596 328872.88605177 +7 1 7 2 8 -72009.03925475 -72009.10352667 -80812.11791466 +7 1 7 3 1 -4.94893793 2963.50329887 0.28922365 +7 1 7 3 2 71939.49703610 -80703.33768817 -71955.35077664 +7 1 7 3 3 -3.37427586 -11772.17361592 0.21423974 +7 1 7 3 4 71939.37920424 -80703.18772035 71953.01556351 +7 1 7 3 5 -2.88152446 2953.63755898 0.94265484 +7 1 7 3 6 -71999.40917857 -80812.08577870 71993.89250534 +7 1 7 3 7 131.20041498 328885.77257195 1.11404663 +7 1 7 3 8 -71999.54843440 -80812.07506672 -71993.93535329 +7 2 7 1 1 0.02142397 -0.08569589 2964.02818623 +7 2 7 1 2 71893.41406866 -71893.46762859 -80702.11652167 +7 2 7 1 3 0.06427192 0.04284795 2963.96391430 +7 2 7 1 4 -71893.42478064 71893.37122071 -80702.15936962 +7 2 7 1 5 0.04284795 -0.04284795 -11772.34500771 +7 2 7 1 6 72008.95355886 72009.12495064 -80812.04293076 +7 2 7 1 7 -0.06427192 -0.03213596 328872.57540415 +7 2 7 1 8 -72008.88928693 -72008.85715097 -80811.95723486 +7 2 7 2 1 -0.96407882 0.58915928 0.81411100 +7 2 7 2 2 -66929.43651299 74053.48621758 66966.64995531 +7 2 7 2 3 -0.17139179 -0.06427192 -2.44233300 +7 2 7 2 4 66928.85806570 -74052.35074698 66965.79299637 +7 2 7 2 5 -0.19281576 0.12854384 3.51353169 +7 2 7 2 6 67049.45361369 74102.69708519 -67035.95651025 +7 2 7 2 7 -0.74983908 -2.74226863 136.74922417 +7 2 7 2 8 -67046.88273684 -74101.88297419 -67035.29236707 +7 2 7 3 1 -11768.59581231 -0.77126305 -0.27851166 +7 2 7 3 2 -80707.08688357 71938.37227748 71954.81517730 +7 2 7 3 3 2964.18886603 -5.46311330 -0.17139179 +7 2 7 3 4 -80707.04403562 71938.38298947 -71952.47996417 +7 2 7 3 5 2954.39811004 -2.52802890 -1.00692676 +7 2 7 3 6 -80812.59995407 -72000.57678514 71994.38525674 +7 2 7 3 7 328889.12542384 132.78578903 -0.97479080 +7 2 7 3 8 -80812.51425818 -72000.38396937 -71994.21386495 +7 3 7 1 1 -4.99178587 2963.49258688 0.16067980 +7 3 7 1 2 71939.21852444 -80703.08060049 -71954.99728108 +7 3 7 1 3 -3.27786798 -11772.19503989 0.23566371 +7 3 7 1 4 71939.62557994 -80703.61619983 71953.35834709 +7 3 7 1 5 -2.84938850 2953.70183090 1.00692676 +7 3 7 1 6 -71999.86979400 -80812.27859447 71994.10674508 +7 3 7 1 7 131.39323074 328885.95467573 -0.00000000 +7 3 7 1 8 -71999.46273850 -80812.05364274 -71993.76396150 +7 3 7 2 1 -11768.46726847 -0.86767094 -0.24637570 +7 3 7 2 2 -80706.82979588 71938.14732576 71954.52595365 +7 3 7 2 3 2964.21029000 -5.29172151 -0.14996782 +7 3 7 2 4 -80707.33325927 71938.64007715 -71952.95129159 +7 3 7 2 5 2954.45166998 -2.44233300 -0.85695895 +7 3 7 2 6 -80813.00700957 -72000.94099269 71994.68519237 +7 3 7 2 7 328889.61817523 133.25711645 -0.78197504 +7 3 7 2 8 -80812.62137805 -72000.46966527 -71994.25671289 +7 3 7 3 1 -0.92123087 0.59987126 -1.52110213 +7 3 7 3 2 -66970.35630276 66970.27060687 74116.12991670 +7 3 7 3 3 -0.09640788 -0.08569589 -0.98550279 +7 3 7 3 4 66969.92782329 -66969.67073561 74117.73671473 +7 3 7 3 5 0.42847947 -0.57844729 -2.99935632 +7 3 7 3 6 67024.37685246 67022.41655887 -74107.68887106 +7 3 7 3 7 -1.09262266 -0.42847947 -12.96150409 +7 3 7 3 8 -67022.30943900 -67022.36299894 -74107.73171901 +7 1 8 1 1 -9466.52556566 -3061.57153851 -3062.05357792 +7 1 8 1 2 9464.87591968 3057.76878318 3056.61188860 +7 1 8 1 3 1.46754220 1556.64450552 536.19921392 +7 1 8 1 4 0.29993563 -1557.48004049 -538.89863461 +7 1 8 1 5 1.55323809 537.67746810 1557.09440897 +7 1 8 1 6 -0.23566371 -538.53442705 -1557.82282407 +7 1 8 1 7 -74105.52504972 -72009.39275032 -72003.72610927 +7 1 8 1 8 74103.98252361 72014.89871156 72012.72417823 +7 1 8 2 1 -1.19974253 1557.89780798 3076.75042388 +7 1 8 2 2 -3055.27289024 889.05206086 -89.99140155 +7 1 8 2 3 -889.87688385 3061.52869056 91.39467183 +7 1 8 2 4 -1554.42712424 -0.72841511 -3072.88339663 +7 1 8 2 5 2.61372479 -533.64976105 3080.16754769 +7 1 8 2 6 538.73795480 0.04284795 -3077.21103932 +7 1 8 2 7 -67054.57394340 -72007.56100056 -80809.35422206 +7 1 8 2 8 72014.05246460 67033.43919334 80801.09528019 +7 1 8 3 1 -1.17831855 3077.85375853 1557.53360043 +7 1 8 3 2 -3059.64338088 -90.81622454 890.87309862 +7 1 8 3 3 -0.25708768 3076.91110368 -538.17021950 +7 1 8 3 4 534.92448748 -3075.04721797 -0.04284795 +7 1 8 3 5 -885.96700865 100.43558873 3064.57089483 +7 1 8 3 6 -1558.99043064 -3077.08249547 0.42847947 +7 1 8 3 7 -67039.02013849 -80811.04671598 -71996.72046987 +7 1 8 3 8 72010.21757330 80798.76006706 67021.50603999 +7 2 8 1 1 3061.46441864 -889.86617186 91.37324786 +7 2 8 1 2 -0.96407882 -1554.76990782 -3072.63702093 +7 2 8 1 3 1557.86567202 -1.17831855 3076.69686395 +7 2 8 1 4 890.36963524 -3057.09392801 -88.69525114 +7 2 8 1 5 -533.60691310 2.59230082 3080.12469974 +7 2 8 1 6 0.26779967 538.34161129 -3077.53239892 +7 2 8 1 7 -72007.04682520 -67049.91422912 -80809.05428642 +7 2 8 1 8 67031.82168333 72011.88864325 80799.62773799 +7 2 8 2 1 1556.58023360 1.55323809 536.14565398 +7 2 8 2 2 -1556.60165757 -0.32135961 -539.44494594 +7 2 8 2 3 -3061.47513063 -9466.54698963 -3062.00001798 +7 2 8 2 4 3057.98302291 9464.98303955 3056.51548071 +7 2 8 2 5 537.63462016 1.49967816 1557.11583294 +7 2 8 2 6 -538.33089930 -0.36420755 -1557.75855215 +7 2 8 2 7 -72011.71725146 -74105.63216959 -72003.80109318 +7 2 8 2 8 72015.85207839 74104.74307468 72013.35618545 +7 2 8 3 1 3076.88967971 -0.26779967 -538.13808354 +7 2 8 3 2 -3075.96844884 535.57791868 0.61058325 +7 2 8 3 3 3077.86447051 -1.24259047 1557.56573639 +7 2 8 3 4 -90.99832832 -3059.79334869 890.91594657 +7 2 8 3 5 100.46772470 -885.98843262 3064.54947085 +7 2 8 3 6 -3077.27531124 -1558.93687070 0.29993563 +7 2 8 3 7 -80809.00072649 -67039.17010631 -71996.87043768 +7 2 8 3 8 80797.98880400 72009.68197396 67020.93830468 +7 3 8 1 1 3061.33587480 90.63412076 -889.89830782 +7 3 8 1 2 -2.07812545 -3073.96530730 -1559.90094952 +7 3 8 1 3 -538.43801917 3076.65401600 0.08569589 +7 3 8 1 4 -1.16760657 -3075.53996937 535.94212623 +7 3 8 1 5 1554.07362867 3075.77563308 -1.56395008 +7 3 8 1 6 888.71998927 -90.28062520 -3062.77128104 +7 3 8 1 7 -71999.24849877 -80808.37943125 -67021.17396840 +7 3 8 1 8 67036.70634933 80805.06942731 71999.41989056 +7 3 8 2 1 3076.69686395 -538.44873116 0.01071199 +7 3 8 2 2 -3076.39692831 -0.52488736 536.62769339 +7 3 8 2 3 90.66625672 3061.27160288 -889.99471570 +7 3 8 2 4 -3074.17954704 -2.18524532 -1559.77240568 +7 3 8 2 5 3075.79705705 1554.11647662 -1.56395008 +7 3 8 2 6 -90.54842487 888.88066907 -3062.83555296 +7 3 8 2 7 -80805.93709825 -71999.17351486 -67021.20610436 +7 3 8 2 8 80804.11606048 67036.09576608 71998.86286724 +7 3 8 3 1 1559.49389402 535.68503855 2.06741346 +7 3 8 3 2 -1557.84424805 -537.94526778 2.73155665 +7 3 8 3 3 536.47772558 1558.70120699 2.50660492 +7 3 8 3 4 -536.31704577 -1559.49389402 3.87773924 +7 3 8 3 5 -3070.15183998 -3070.37679170 -9458.21306386 +7 3 8 3 6 3063.03908071 3062.51419335 9469.33210622 +7 3 8 3 7 -71995.11367184 -71990.98955690 -74109.30638108 +7 3 8 3 8 72000.34112143 72001.92649548 74087.11114432 +8 1 1 1 1 -74115.87282902 72001.84079958 72005.95420254 +8 1 1 1 2 9472.97418175 -3064.58160682 -3065.79206133 +8 1 1 1 3 0.61058325 -538.02025168 -1559.70813376 +8 1 1 1 4 -0.34278358 1558.20845560 535.83500637 +8 1 1 1 5 0.95336683 -1557.71570420 -539.81986547 +8 1 1 1 6 0.17139179 536.11351802 1557.82282407 +8 1 1 1 7 -9466.39702182 3061.81791421 3061.18590698 +8 1 1 1 8 74107.92453477 -71997.60956478 -71995.41360747 +8 1 1 2 1 72004.19743669 -67024.52682028 -80796.04993438 +8 1 1 2 2 -1.73534187 -1561.91480305 -3081.73149777 +8 1 1 2 3 537.77387599 -0.36420755 3077.46812700 +8 1 1 2 4 -889.37342047 -3066.02772504 -95.12244326 +8 1 1 2 5 -1553.40948549 -0.25708768 3070.09828004 +8 1 1 2 6 -0.66414318 536.75623723 -3077.03964753 +8 1 1 2 7 -3061.31445083 -889.88759583 90.81622454 +8 1 1 2 8 -67035.52803078 72006.32912208 80811.48590744 +8 1 1 3 1 72007.81808825 -80795.24653537 -67033.79268891 +8 1 1 3 2 -2.84938850 -3080.14612371 -1557.04084903 +8 1 1 3 3 -1558.03706381 3077.63951879 -0.36420755 +8 1 1 3 4 -1.43540624 -3078.11084621 538.19164347 +8 1 1 3 5 536.18850193 3076.65401600 -1.92815763 +8 1 1 3 6 -891.54795380 -92.59441436 -3061.18590698 +8 1 1 3 7 -3061.95717004 91.85528727 -890.47675511 +8 1 1 3 8 -67028.22245575 80799.92767362 72006.51122585 +8 2 1 1 1 67015.53946331 -72016.08774210 -80797.22825294 +8 2 1 1 2 3066.00630107 889.36270848 -95.10101928 +8 2 1 1 3 0.56773530 -538.53442705 3077.36100713 +8 2 1 1 4 1561.95765100 1.71391790 -3081.75292174 +8 2 1 1 5 891.74076956 3053.51612440 86.08152635 +8 2 1 1 6 -536.68125333 0.59987126 -3076.99679958 +8 2 1 1 7 -0.47132742 1557.60858433 3076.34336838 +8 2 1 1 8 -71998.56293161 67051.78882682 80811.25024373 +8 2 1 2 1 -72012.35997067 74112.81991276 72011.38517987 +8 2 1 2 2 -1558.18703163 0.32135961 535.82429438 +8 2 1 2 3 537.31326055 0.57844729 -1558.31557547 +8 2 1 2 4 3064.61374278 -9472.95275777 -3065.77063736 +8 2 1 2 5 -3057.07250403 9458.64154334 3054.80156282 +8 2 1 2 6 -536.15636597 -0.12854384 1557.80140010 +8 2 1 2 7 1557.84424805 0.82482299 -537.75245201 +8 2 1 2 8 72004.04746888 -74100.13692033 -71998.05946823 +8 2 1 3 1 -80797.45320466 72014.82372765 67032.58223439 +8 2 1 3 2 -3078.13227018 -1.45683021 -538.22377943 +8 2 1 3 3 3077.35029514 -1559.83667760 0.17139179 +8 2 1 3 4 -3080.15683570 -2.84938850 1557.11583294 +8 2 1 3 5 89.76644983 -3058.55075822 892.24423294 +8 2 1 3 6 -92.59441436 -891.51581784 3061.20733096 +8 2 1 3 7 3077.14676739 536.03853412 0.64271921 +8 2 1 3 8 80804.09463651 -67036.59922946 -72005.72925081 +8 3 1 1 1 67029.59359006 -80803.52690121 -72004.05818086 +8 3 1 1 2 3063.39257627 -92.84079006 888.77354920 +8 3 1 1 3 888.89138106 90.30204917 3062.64273719 +8 3 1 1 4 -539.39138600 -3078.51790171 0.25708768 +8 3 1 1 5 -2.19595730 3073.89032339 -536.13494200 +8 3 1 1 6 1557.82282407 -3077.12534342 0.44990345 +8 3 1 1 7 -0.53559934 3076.69686395 1559.55816594 +8 3 1 1 8 -71997.62027676 80811.11098790 67028.44740747 +8 3 1 2 1 -80800.98816032 67031.39320385 72003.26549384 +8 3 1 2 2 -3079.37486066 -540.05552919 -0.84624696 +8 3 1 2 3 90.69839269 888.90209304 -3062.92124885 +8 3 1 2 4 -92.99075787 3063.47827217 -888.88066907 +8 3 1 2 5 3071.98358973 -2.93508440 -1560.71506052 +8 3 1 2 6 -3077.31815918 1557.71570420 -0.32135961 +8 3 1 2 7 3077.96087839 0.64271921 536.33846975 +8 3 1 2 8 80810.05050120 -71999.13066691 -67026.02649844 +8 3 1 3 1 -72000.85529679 72000.30898546 74100.67251967 +8 3 1 3 2 -1559.30107826 536.35989372 2.35663711 +8 3 1 3 3 -3063.00694475 3062.57846527 9469.46065006 +8 3 1 3 4 -536.34918173 1559.30107826 2.33521313 +8 3 1 3 5 536.88478108 -1558.65835905 3.66349950 +8 3 1 3 6 3061.34658679 -3061.33587480 -9465.43294300 +8 3 1 3 7 1557.71570420 -537.85957188 2.19595730 +8 3 1 3 8 72003.68326132 -72000.76960090 -74115.27295775 +8 1 2 1 1 9471.68874332 -0.47132742 -2.07812545 +8 1 2 1 2 3.08505221 0.09640788 6.97350344 +8 1 2 1 3 -9471.73159127 0.38563153 -1.94958161 +8 1 2 1 4 -0.10711987 0.81411100 -0.23566371 +8 1 2 1 5 -9463.46193742 -1.19974253 5.78447290 +8 1 2 1 6 0.09640788 0.79268703 0.17139179 +8 1 2 1 7 9463.48336139 -0.40705550 -1.92815763 +8 1 2 1 8 -3.14932413 0.06427192 -6.81282364 +8 1 2 2 1 -3065.94202915 -1561.07926808 -3079.54625245 +8 1 2 2 2 0.08569589 -6.93065549 11785.04942412 +8 1 2 2 3 3066.04914901 1561.10069205 -3079.43913258 +8 1 2 2 4 0.05355993 0.21423974 2915.20295015 +8 1 2 2 5 -3055.74421766 1560.37227694 -3077.10391945 +8 1 2 2 6 0.19281576 -0.79268703 574.37673506 +8 1 2 2 7 3059.08635756 -1555.20909928 -3074.10456313 +8 1 2 2 8 -3.74919540 2.42090903 -2964.73517736 +8 1 2 3 1 -3069.41271289 -3080.59602716 -1556.45168975 +8 1 2 3 2 8.52674154 11786.34557453 2.33521313 +8 1 2 3 3 -3069.39128891 -3080.68172306 1556.58023360 +8 1 2 3 4 -0.18210378 573.04844869 1.09262266 +8 1 2 3 5 3062.64273719 -3077.98230237 1554.78061981 +8 1 2 3 6 1.40327028 2915.95278923 0.81411100 +8 1 2 3 7 3057.86519106 -3072.88339663 -1559.85810157 +8 1 2 3 8 8.37677372 -2963.10695536 0.85695895 +8 2 2 1 1 3063.22118448 -1558.52981520 -3077.96087839 +8 2 2 1 2 -2.91366042 -3.08505221 -2956.56193139 +8 2 2 1 3 -3063.26403243 1558.46554328 -3077.96087839 +8 2 2 1 4 0.43919146 0.85695895 573.51977611 +8 2 2 1 5 3060.88597135 1552.57395051 -3072.51918907 +8 2 2 1 6 0.21423974 -0.36420755 2914.21744736 +8 2 2 1 7 -3059.55768498 -1557.71570420 -3075.56139334 +8 2 2 1 8 0.89980690 7.61622265 11772.99843891 +8 2 2 2 1 886.30979223 0.12854384 -1.11404663 +8 2 2 2 2 -2.39948506 -0.18210378 8.79454121 +8 2 2 2 3 -886.50260799 -0.19281576 -0.98550279 +8 2 2 2 4 0.01071199 -0.14996782 -0.36420755 +8 2 2 2 5 -891.28015412 0.49275140 3.34213990 +8 2 2 2 6 0.03213596 -0.21423974 0.32135961 +8 2 2 2 7 891.25873015 0.19281576 -1.07119869 +8 2 2 2 8 2.31378916 -0.20352775 -8.88023710 +8 2 2 3 1 -94.45830007 535.51364676 -538.23449142 +8 2 2 3 2 -2956.65833927 4.53117044 3.13861215 +8 2 2 3 3 -92.20878283 535.40652689 538.17021950 +8 2 2 3 4 2915.34220598 0.08569589 1.41398226 +8 2 2 3 5 -98.03610368 -531.78587534 -539.54135382 +8 2 2 3 6 3374.43653853 0.85695895 0.34278358 +8 2 2 3 7 -88.48101141 -538.72724282 536.11351802 +8 2 2 3 8 -2959.82908738 -5.74162495 -1.52110213 +8 3 2 1 1 3061.52869056 -3078.06799826 -1558.95829468 +8 3 2 1 2 -3.85631527 -2959.50772777 -0.19281576 +8 3 2 1 3 3061.65723440 -3078.04657429 1559.06541455 +8 3 2 1 4 -0.51417537 2913.70327199 -0.83553497 +8 3 2 1 5 -3056.62260058 -3070.33394376 1562.40755445 +8 3 2 1 6 1.06048670 574.80521454 -1.28543842 +8 3 2 1 7 -3059.12920551 -3075.51854539 -1557.24437678 +8 3 2 1 8 -3.98485911 11773.03057487 -2.94579638 +8 3 2 2 1 -90.73052865 -539.07002640 536.45630160 +8 3 2 2 2 -2962.01433270 7.06991132 -0.17139179 +8 3 2 2 3 -90.75195262 -539.04860242 -536.62769339 +8 3 2 2 4 3371.58715003 -0.87838292 0.62129524 +8 3 2 2 5 -84.79608793 542.19792656 534.24963231 +8 3 2 2 6 2914.01391961 0.04284795 1.22116650 +8 3 2 2 7 -92.20878283 535.19228715 -537.82743592 +8 3 2 2 8 -2965.24935273 -5.73091297 1.93886962 +8 3 2 3 1 885.32428943 0.17139179 2.37806108 +8 3 2 3 2 -0.70699113 0.55702332 -3.27786798 +8 3 2 3 3 -885.36713738 -0.17139179 2.42090903 +8 3 2 3 4 0.70699113 -0.85695895 -1.86388571 +8 3 2 3 5 -892.32992884 0.47132742 -7.34842298 +8 3 2 3 6 -0.66414318 -0.87838292 1.90673366 +8 3 2 3 7 892.30850486 0.12854384 2.44233300 +8 3 2 3 8 0.79268703 0.46061543 3.22430804 +8 1 3 1 1 0.55702332 537.13115677 -1558.27272752 +8 1 3 1 2 -9472.95275777 3064.60303079 -3065.70636543 +8 1 3 1 3 74113.75185562 -72013.62398512 72012.23142683 +8 1 3 1 4 0.29993563 -1558.20845560 535.81358239 +8 1 3 1 5 9458.70581526 -3057.30816774 3054.71586692 +8 1 3 1 6 -0.20352775 -536.13494200 1557.86567202 +8 1 3 1 7 0.19281576 1556.93372916 -538.43801917 +8 1 3 1 8 -74100.38329603 72006.41481797 -71998.22014803 +8 1 3 2 1 -538.53442705 0.54631133 3077.36100713 +8 1 3 2 2 1.69249392 1561.93622702 -3081.71007379 +8 1 3 2 3 -72015.61641468 67015.13240781 -80796.83190942 +8 1 3 2 4 889.36270848 3066.02772504 -95.12244326 +8 1 3 2 5 3053.54826036 891.73005757 86.12437430 +8 1 3 2 6 0.58915928 -536.64911737 -3076.99679958 +8 1 3 2 7 1557.56573639 -0.43919146 3076.37550434 +8 1 3 2 8 67051.25322748 -71998.26299598 80810.76820432 +8 1 3 3 1 -1559.83667760 3077.26459925 0.17139179 +8 1 3 3 2 -2.89223645 -3080.19968365 1557.07298499 +8 1 3 3 3 72014.64162387 -80797.36750877 67032.40013062 +8 1 3 3 4 -1.43540624 -3078.11084621 -538.17021950 +8 1 3 3 5 -3058.51862226 89.87356970 892.17996102 +8 1 3 3 6 -891.52652982 -92.57299038 3061.12163506 +8 1 3 3 7 536.00639816 3077.10391945 0.62129524 +8 1 3 3 8 -67036.44926165 80803.96609267 -72005.49358710 +8 2 3 1 1 -0.34278358 537.85957188 3077.48955097 +8 2 3 1 2 -3065.96345312 -889.34128450 -95.09030729 +8 2 3 1 3 -67024.46254836 72004.09031682 -80795.88925458 +8 2 3 1 4 -1561.93622702 -1.77818982 -3081.75292174 +8 2 3 1 5 -0.21423974 -1553.40948549 3070.05543210 +8 2 3 1 6 536.67054134 -0.51417537 -3076.97537560 +8 2 3 1 7 -889.95186776 -3061.34658679 90.85907249 +8 2 3 1 8 72006.31841009 -67035.52803078 80811.49661943 +8 2 3 2 1 -538.06309963 0.41776749 -1559.62243786 +8 2 3 2 2 1558.16560765 -0.31064762 535.81358239 +8 2 3 2 3 72002.70847052 -74116.87975578 72006.74688956 +8 2 3 2 4 -3064.59231880 9472.95275777 -3065.77063736 +8 2 3 2 5 -1557.61929632 0.77126305 -539.90556137 +8 2 3 2 6 536.15636597 0.14996782 1557.77997612 +8 2 3 2 7 3061.20733096 -9467.33967666 3060.54318777 +8 2 3 2 8 -71997.89878842 74110.20618797 -71995.68140714 +8 2 3 3 1 3077.16819137 -1558.17631964 -0.47132742 +8 2 3 3 2 -3078.00372634 -1.34971034 538.38445924 +8 2 3 3 3 -80797.09970910 72009.10352667 -67037.19910073 +8 2 3 3 4 -3080.25324358 -2.95650837 -1556.88016923 +8 2 3 3 5 3074.86511419 534.99947139 -0.66414318 +8 2 3 3 6 -93.24784556 -890.85167465 -3060.28610009 +8 2 3 3 7 91.56606362 -3061.77506626 -890.29465133 +8 2 3 3 8 80804.97301943 -67028.86517496 72007.52886460 +8 3 3 1 1 888.43076562 91.44823176 -3061.82862619 +8 3 3 1 2 3063.32830435 -93.13001370 -889.01992490 +8 3 3 1 3 67032.64650632 -80802.16647888 72006.93970533 +8 3 3 1 4 -539.95912130 -3079.31058874 -1.02835074 +8 3 3 1 5 -1.86388571 3072.69058086 -1561.14354000 +8 3 3 1 6 1558.31557547 -3077.85375853 -1.19974253 +8 3 3 1 7 0.70699113 3077.73592667 536.39202968 +8 3 3 1 8 -72001.77652766 80810.60752452 -67028.96158284 +8 3 3 2 1 91.22328004 888.34506973 3061.85005017 +8 3 3 2 2 -3079.50340450 -539.91627336 0.93194286 +8 3 3 2 3 -80801.08456820 67027.49404064 -72004.24028464 +8 3 3 2 4 -92.38017462 3064.37807907 889.48054033 +8 3 3 2 5 3074.74728234 -1.67106995 -536.88478108 +8 3 3 2 6 -3077.22175130 1557.88709599 0.27851166 +8 3 3 2 7 3076.97537560 -0.48203941 1559.30107826 +8 3 3 2 8 80807.32965654 -71996.03490271 67029.37935033 +8 3 3 3 1 3062.49276938 -3063.22118448 9469.54634595 +8 3 3 3 2 1559.30107826 -536.37060571 2.34592512 +8 3 3 3 3 72001.01597660 -72001.60513587 74101.21883100 +8 3 3 3 4 536.31704577 -1559.32250223 2.35663711 +8 3 3 3 5 -1558.56195116 536.71338929 3.49210771 +8 3 3 3 6 -3061.32516281 3061.33587480 -9465.49721492 +8 3 3 3 7 -538.47015513 1556.80518532 1.57466207 +8 3 3 3 8 -72000.74817693 72005.72925081 -74115.16583788 +8 1 4 1 1 -0.21423974 -886.43833607 -1.15689458 +8 1 4 1 2 0.06427192 0.35349557 -0.42847947 +8 1 4 1 3 0.17139179 886.35264017 -1.11404663 +8 1 4 1 4 -0.78197504 -1.49967816 8.18395796 +8 1 4 1 5 0.47132742 -891.25873015 3.42783579 +8 1 4 1 6 -0.21423974 0.10711987 0.47132742 +8 1 4 1 7 0.10711987 889.07348483 -1.15689458 +8 1 4 1 8 0.42847947 3.35285189 -8.22680590 +8 1 4 2 1 1558.44411931 -3063.32830435 -3077.96087839 +8 1 4 2 2 0.68556716 0.12854384 573.69116790 +8 1 4 2 3 -1558.48696726 3063.37115230 -3077.98230237 +8 1 4 2 4 -1.78890180 -4.64900229 -2955.24435701 +8 1 4 2 5 1552.63822244 3060.92881930 -3072.79770073 +8 1 4 2 6 -0.17139179 -0.17139179 2914.15317544 +8 1 4 2 7 -1557.71570420 -3055.25146627 -3075.56139334 +8 1 4 2 8 6.38434416 -0.83553497 11771.72371247 +8 1 4 3 1 535.55649471 -94.39402815 538.29876334 +8 1 4 3 2 -0.04284795 2914.96728644 1.04977471 +8 1 4 3 3 535.49222279 -92.27305475 -538.42730718 +8 1 4 3 4 5.79518489 -2958.47937704 0.66414318 +8 1 4 3 5 -531.87157123 -93.75130894 -539.45565792 +8 1 4 3 6 0.86767094 3374.01877104 0.72841511 +8 1 4 3 7 -538.85578666 -88.45958743 536.02782213 +8 1 4 3 8 -6.98421543 -2961.69297309 0.98550279 +8 2 4 1 1 1561.10069205 3065.96345312 -3079.41770861 +8 2 4 1 2 0.10711987 0.12854384 2915.32078200 +8 2 4 1 3 -1561.18638794 -3068.14869844 -3079.35343669 +8 2 4 1 4 -5.72020098 0.10711987 11785.07084809 +8 2 4 1 5 1560.35085297 -3053.62324426 -3076.99679958 +8 2 4 1 6 -0.61058325 0.25708768 574.61239877 +8 2 4 1 7 -1555.25194723 3059.04350961 -3074.12598710 +8 2 4 1 8 1.09262266 -3.71705944 -2964.77802531 +8 2 4 2 1 0.47132742 -9471.71016730 -1.94958161 +8 2 4 2 2 0.77126305 -0.53559934 -0.18210378 +8 2 4 2 3 -0.38563153 9473.85256467 -1.97100558 +8 2 4 2 4 -0.04284795 1.26401445 6.94136748 +8 2 4 2 5 -1.24259047 -9463.44051345 5.57023316 +8 2 4 2 6 0.70699113 -0.25708768 0.19281576 +8 2 4 2 7 -0.25708768 9465.62575876 -1.92815763 +8 2 4 2 8 -0.04284795 -4.90608998 -6.87709556 +8 2 4 3 1 -3080.63887511 -3065.02079828 1556.40884181 +8 2 4 3 2 573.30553638 -0.71770312 1.17831855 +8 2 4 3 3 -3080.70314703 -3067.27031552 -1556.49453770 +8 2 4 3 4 11784.49240080 5.87016880 2.97793235 +8 2 4 3 5 -3078.08942224 3062.59988925 1554.52353212 +8 2 4 3 6 2915.73854949 0.92123087 0.72841511 +8 2 4 3 7 -3073.03336444 3057.90803901 -1559.90094952 +8 2 4 3 8 -2961.09310183 5.68806502 0.24637570 +8 3 4 1 1 -539.07002640 -90.68768070 -536.49914955 +8 3 4 1 2 -0.81411100 3371.80138976 0.61058325 +8 3 4 1 3 -538.96290653 -90.77337659 536.54199750 +8 3 4 1 4 6.39505615 -2961.07167785 0.47132742 +8 3 4 1 5 542.26219848 -86.98133325 534.27105629 +8 3 4 1 6 0.03213596 2914.26029531 1.17831855 +8 3 4 1 7 535.19228715 -92.14451091 -537.80601195 +8 3 4 1 8 -5.07748177 -2964.37096980 1.25330246 +8 3 4 2 1 -3078.02515032 3061.59296248 1559.12968647 +8 3 4 2 2 2913.78896788 -0.72841511 -1.11404663 +8 3 4 2 3 -3078.15369416 3063.73535985 -1559.06541455 +8 3 4 2 4 -2960.10759904 -4.77754614 -2.14239737 +8 3 4 2 5 -3070.33394376 -3054.41593129 1562.49325034 +8 3 4 2 6 574.69809467 0.87838292 -0.92123087 +8 3 4 2 7 -3075.53996937 -3061.37872275 -1557.39434460 +8 3 4 2 8 11773.69471805 -5.00249786 -1.03906272 +8 3 4 3 1 -0.12854384 -885.32428943 2.46375698 +8 3 4 3 2 -0.96407882 0.49275140 -2.00314154 +8 3 4 3 3 0.12854384 885.28144149 2.44233300 +8 3 4 3 4 1.17831855 -1.60679803 -3.92058719 +8 3 4 3 5 0.42847947 -890.12325954 -7.41269490 +8 3 4 3 6 -0.76055107 -0.89980690 1.99242955 +8 3 4 3 7 0.08569589 892.20138499 2.48518095 +8 3 4 3 8 -0.08569589 -0.18210378 3.88845123 +8 1 5 1 1 0.89980690 -1553.73084509 534.31390423 +8 1 5 1 2 -9463.14057781 -3055.47641799 3062.18212176 +8 1 5 1 3 9459.57348619 3053.17334082 -3057.88661503 +8 1 5 1 4 0.58915928 1552.59537449 -531.52878765 +8 1 5 1 5 73992.05297298 71805.66147236 -71878.46013501 +8 1 5 1 6 0.73912709 533.97112065 -1553.53802933 +8 1 5 1 7 0.89980690 -533.97112065 1555.41262703 +8 1 5 1 8 -73991.61378152 -71802.12651670 71869.40850612 +8 1 5 2 1 -1558.10133573 0.33207159 3074.74728234 +8 1 5 2 2 -1.60679803 1560.40441290 -3078.28223800 +8 1 5 2 3 -3056.03344131 891.13018631 90.62340878 +8 1 5 2 4 -889.84474789 3059.66480485 -93.70846099 +8 1 5 2 5 71807.34325429 66823.92344248 -80589.70493163 +8 1 5 2 6 0.24637570 -533.22128157 -3079.95330795 +8 1 5 2 7 537.69889208 2.87081248 3077.29673521 +8 1 5 2 8 -66839.71291110 -71805.01875315 80599.04578417 +8 1 5 3 1 -539.34853805 3069.46627282 -0.25708768 +8 1 5 3 2 5.72020098 -3077.06107150 1555.13411537 +8 1 5 3 3 3053.65538023 86.57427775 891.32300207 +8 1 5 3 4 3.88845123 -3073.18333226 -539.41280997 +8 1 5 3 5 -71878.03165554 -80588.86939666 66908.24820299 +8 1 5 3 6 884.22095479 -109.09087411 3073.52611584 +8 1 5 3 7 1558.22987957 3080.91738677 -2.52802890 +8 1 5 3 8 66911.63319084 80611.27887315 -71885.91567786 +8 2 5 1 1 891.73005757 -3056.87968827 90.04496149 +8 2 5 1 2 3059.68622882 -889.63050815 -93.72988496 +8 2 5 1 3 0.14996782 -1558.27272752 3074.57589055 +8 2 5 1 4 1559.78311767 -0.74983908 -3077.72521468 +8 2 5 1 5 66823.27001128 71804.16179420 -80589.04078845 +8 2 5 1 6 -533.32840144 0.40705550 -3079.99615590 +8 2 5 1 7 2.95650837 537.54892426 3077.41456707 +8 2 5 1 8 -71804.31176201 -66836.57429896 80598.45662489 +8 2 5 2 1 3053.08764492 9459.57348619 -3057.89732702 +8 2 5 2 2 1552.59537449 0.64271921 -531.58234758 +8 2 5 2 3 -1553.75226907 0.89980690 534.27105629 +8 2 5 2 4 -3055.48712998 -9463.14057781 3062.23568169 +8 2 5 2 5 71805.51150454 73991.95656510 -71878.31016719 +8 2 5 2 6 533.93898469 0.74983908 -1553.45233344 +8 2 5 2 7 -533.97112065 0.86767094 1555.40191504 +8 2 5 2 8 -71801.89085298 -73991.48523768 71869.25853830 +8 2 5 3 1 86.53142980 3053.69822817 891.32300207 +8 2 5 3 2 -3073.26902815 3.67421149 -539.56277779 +8 2 5 3 3 3069.42342487 -539.28426613 -0.32135961 +8 2 5 3 4 -3076.40764030 4.82039408 1554.50210815 +8 2 5 3 5 -80588.73014083 -71875.71786638 66908.07681120 +8 2 5 3 6 -109.02660219 884.03885101 3073.52611584 +8 2 5 3 7 3080.91738677 1558.20845560 -2.51731691 +8 2 5 3 8 80610.55045805 66910.65840003 -71885.03729494 +8 3 5 1 1 -2.52802890 3071.37300648 537.61319618 +8 3 5 1 2 -3054.18026758 -87.31340484 -890.29465133 +8 3 5 1 3 -4.50974647 3074.68301042 -1558.12275970 +8 3 5 1 4 542.73352590 -3070.69815131 -0.12854384 +8 3 5 1 5 -66915.01817868 -80608.27951684 71898.53439837 +8 3 5 1 6 -1555.05913146 -3081.62437790 -1.45683021 +8 3 5 1 7 -885.45283328 101.12115589 -3068.78070566 +8 3 5 1 8 71873.93967656 80600.67400617 -66917.49264764 +8 3 5 2 1 3073.46184392 -2.67799671 -1556.92301718 +8 3 5 2 2 -3070.71957528 542.75494987 -0.11783186 +8 3 5 2 3 3071.61938218 -2.16382134 537.89170784 +8 3 5 2 4 -87.32411683 -3054.11599566 -890.35892326 +8 3 5 2 5 -80607.59394968 -66913.73274026 71897.91310314 +8 3 5 2 6 -3081.61366591 -1555.05913146 -1.41398226 +8 3 5 2 7 100.92834013 -885.08862572 -3068.98423341 +8 3 5 2 8 80601.08106167 71870.16905719 -66918.14607884 +8 3 5 3 1 -536.79908518 -1559.33321422 3.94201116 +8 3 5 3 2 1563.07169763 534.27105629 -6.56644794 +8 3 5 3 3 -1560.16874919 -535.94212623 3.38498785 +8 3 5 3 4 533.46765727 1563.95008055 -6.06298456 +8 3 5 3 5 71892.70707753 71890.86461579 -74116.34415644 +8 3 5 3 6 -3071.10520681 -3070.84811912 9448.22949211 +8 3 5 3 7 3064.97795033 3065.24575000 -9458.18092790 +8 3 5 3 8 -71886.12991760 -71888.13305914 74131.61944969 +8 1 6 1 1 -0.04284795 -0.00000000 -890.03756365 +8 1 6 1 2 0.19281576 0.17139179 0.84624696 +8 1 6 1 3 -0.02142397 -0.00000000 -889.95186776 +8 1 6 1 4 -0.17139179 -0.08569589 0.89980690 +8 1 6 1 5 0.08569589 0.02142397 883.43897975 +8 1 6 1 6 -2.02456552 -1.79961379 3.55637964 +8 1 6 1 7 0.04284795 0.02142397 887.55238270 +8 1 6 1 8 2.01385353 1.77818982 3.70634745 +8 1 6 2 1 536.37060571 536.41345366 -91.33039991 +8 1 6 2 2 0.79268703 -0.58915928 2915.63142962 +8 1 6 2 3 -536.43487763 -536.49914955 -93.53706920 +8 1 6 2 4 0.06427192 -0.21423974 3374.36155462 +8 1 6 2 5 533.32840144 -533.30697747 -112.60440580 +8 1 6 2 6 -0.91051888 -3.53495566 -2951.64512942 +8 1 6 2 7 -537.97740374 537.95597976 -89.35939433 +8 1 6 2 8 4.84181806 -0.34278358 -2951.55943353 +8 1 6 3 1 1557.65143228 -3076.63259203 -3060.73600354 +8 1 6 3 2 0.29993563 574.86948646 1.08191067 +8 1 6 3 3 1557.65143228 -3076.65401600 3058.65787809 +8 1 6 3 4 0.48203941 2914.26029531 0.89980690 +8 1 6 3 5 -1554.35214033 -3080.42463537 3070.95523899 +8 1 6 3 6 3.80275533 -2950.76674650 -1.62822200 +8 1 6 3 7 -1558.67978302 -3077.06107150 -3062.21425772 +8 1 6 3 8 -6.81282364 11772.46283957 -7.05919934 +8 2 6 1 1 -536.37060571 -536.37060571 -91.33039991 +8 2 6 1 2 -0.08569589 0.14996782 3374.37226661 +8 2 6 1 3 536.37060571 536.39202968 -93.36567741 +8 2 6 1 4 -0.79268703 0.59987126 2915.67427757 +8 2 6 1 5 -533.24270555 533.28555349 -112.56155785 +8 2 6 1 6 -4.83110607 0.34278358 -2951.62370545 +8 2 6 1 7 537.97740374 -537.93455579 -89.35939433 +8 2 6 1 8 0.92123087 3.57780361 -2951.58085750 +8 2 6 2 1 0.04284795 0.08569589 -890.05898762 +8 2 6 2 2 0.06427192 -0.01071199 1.28543842 +8 2 6 2 3 0.06427192 0.02142397 -894.49375018 +8 2 6 2 4 -0.02142397 -0.00000000 1.24259047 +8 2 6 2 5 -0.02142397 -0.02142397 883.31043591 +8 2 6 2 6 -3.10647619 -0.79268703 5.52738522 +8 2 6 2 7 -0.14996782 0.04284795 887.57380667 +8 2 6 2 8 3.08505221 0.72841511 5.51667323 +8 2 6 3 1 -3076.71828792 1557.60858433 3060.73600354 +8 2 6 3 2 2914.19602338 0.54631133 0.54631133 +8 2 6 3 3 -3076.63259203 1557.67285626 -3058.65787809 +8 2 6 3 4 574.83735050 0.27851166 0.70699113 +8 2 6 3 5 -3080.46748332 -1554.39498828 3071.25517462 +8 2 6 3 6 -2950.77745849 3.87773924 -3.47068374 +8 2 6 3 7 -3076.95395163 -1558.63693507 -3062.14998580 +8 2 6 3 8 11772.51639950 -6.94136748 -8.90166107 +8 3 6 1 1 1557.65143228 -3076.71828792 3060.65030764 +8 3 6 1 2 0.55702332 2914.23887133 -0.85695895 +8 3 6 1 3 1557.54431241 -3076.76113587 -3058.65787809 +8 3 6 1 4 0.35349557 574.82663851 -1.11404663 +8 3 6 1 5 -1554.35214033 -3080.48890729 -3071.16947873 +8 3 6 1 6 -6.86638357 11772.53782347 7.11275927 +8 3 6 1 7 -1558.74405494 -3076.95395163 3062.21425772 +8 3 6 1 8 3.77061937 -2950.79888246 1.56395008 +8 3 6 2 1 -3076.73971189 1557.63000831 -3060.82169943 +8 3 6 2 2 574.82663851 0.50346338 -0.94265484 +8 3 6 2 3 -3076.71828792 1557.56573639 3058.65787809 +8 3 6 2 4 2914.24958332 0.47132742 -0.72841511 +8 3 6 2 5 -3080.44605934 -1554.43783623 -3071.12663078 +8 3 6 2 6 11773.15911871 -6.17010443 7.94829424 +8 3 6 2 7 -3077.08249547 -1558.65835905 3064.46377496 +8 3 6 2 8 -2951.45231366 3.20288407 2.52802890 +8 3 6 3 1 -0.00000000 0.04284795 -9469.88912953 +8 3 6 3 2 -1.32828637 1.16760657 3.02078029 +8 3 6 3 3 0.06427192 0.08569589 -9469.99624940 +8 3 6 3 4 1.24259047 -1.26401445 3.06362824 +8 3 6 3 5 -0.00000000 -0.00000000 9444.75880837 +8 3 6 3 6 9.36227651 9.38370048 8.56958948 +8 3 6 3 7 0.04284795 -0.04284795 9471.86013511 +8 3 6 3 8 -9.44797240 -9.38370048 8.52674154 +8 1 7 1 1 -9466.50414169 -3061.52869056 -3062.05357792 +8 1 7 1 2 9464.89734366 3057.79020715 3056.56904065 +8 1 7 1 3 1.48896617 1556.53738565 536.11351802 +8 1 7 1 4 0.27851166 -1557.43719255 -538.85578666 +8 1 7 1 5 1.49967816 537.65604413 1557.05156102 +8 1 7 1 6 -0.21423974 -538.55585103 -1557.82282407 +8 1 7 1 7 -74105.07514627 -72009.16779859 -72003.50115755 +8 1 7 1 8 74103.76828387 72014.65233586 72012.37068266 +8 1 7 2 1 3061.52869056 -889.86617186 91.33039991 +8 1 7 2 2 -0.96407882 -1554.76990782 -3072.66915689 +8 1 7 2 3 1557.90851997 -1.13547061 3076.78255984 +8 1 7 2 4 890.31607531 -3057.11535198 -88.71667512 +8 1 7 2 5 -533.64976105 2.63514877 3080.18897166 +8 1 7 2 6 0.26779967 538.38445924 -3077.53239892 +8 1 7 2 7 -72007.32533685 -67050.01063700 -80809.16140629 +8 1 7 2 8 67031.95022717 72012.04932306 80799.74556985 +8 1 7 3 1 3061.31445083 90.62340878 -889.91973179 +8 1 7 3 2 -2.05670148 -3073.98673127 -1559.90094952 +8 1 7 3 3 -538.45944314 3076.67543997 -0.06427192 +8 1 7 3 4 -1.16760657 -3075.49712142 535.85643034 +8 1 7 3 5 1554.15932457 3075.79705705 -1.60679803 +8 1 7 3 6 888.75212523 -90.34489712 -3062.77128104 +8 1 7 3 7 -71999.11995492 -80808.28302337 -67021.20610436 +8 1 7 3 8 67036.64207741 80805.02657937 71999.40917857 +8 2 7 1 1 -1.17831855 1557.91923195 3076.72899991 +8 2 7 1 2 -3056.21554508 889.73762802 -89.32725837 +8 2 7 1 3 -889.86617186 3061.48584261 91.35182388 +8 2 7 1 4 -1554.59851603 -0.87838292 -3072.73342881 +8 2 7 1 5 2.64586075 -533.58548913 3080.08185179 +8 2 7 1 6 538.55585103 0.17139179 -3077.38243110 +8 2 7 1 7 -67052.13161040 -72007.22892897 -80809.03286245 +8 2 7 1 8 72012.72417823 67032.37870664 80800.28116919 +8 2 7 2 1 1557.43719255 0.70699113 535.59934265 +8 2 7 2 2 -1556.55880962 -0.34278358 -539.48779388 +8 2 7 2 3 -3060.69315559 -9467.40394858 -3061.40014672 +8 2 7 2 4 3057.98302291 9464.96161558 3056.45120879 +8 2 7 2 5 537.92384380 1.28543842 1557.15868089 +8 2 7 2 6 -538.36303526 -0.34278358 -1557.77997612 +8 2 7 2 7 -72011.18165212 -74105.65359356 -72003.56542947 +8 2 7 2 8 72013.43116936 74106.77835218 72013.15265770 +8 2 7 3 1 3076.69686395 -538.40588321 -0.02142397 +8 2 7 3 2 -3076.46120024 -0.52488736 536.60626942 +8 2 7 3 3 90.66625672 3061.31445083 -889.90901981 +8 2 7 3 4 -3074.16883505 -2.18524532 -1559.68670978 +8 2 7 3 5 3075.79705705 1554.15932457 -1.54252611 +8 2 7 3 6 -90.54842487 888.79497318 -3062.87840091 +8 2 7 3 7 -80806.51554554 -71999.59128235 -67021.60244787 +8 2 7 3 8 80804.48026804 67036.44926165 71999.11995492 +8 3 7 1 1 -1.26401445 3077.82162257 1557.54431241 +8 3 7 1 2 -3059.64338088 -90.82693653 890.85167465 +8 3 7 1 3 -0.21423974 3076.86825574 -538.14879553 +8 3 7 1 4 534.91377550 -3075.11148989 -0.02142397 +8 3 7 1 5 -885.99914461 100.47843668 3064.57089483 +8 3 7 1 6 -1558.97971865 -3077.06107150 0.40705550 +8 3 7 1 7 -67039.08441041 -80810.96102008 -71996.66690993 +8 3 7 1 8 72010.17472536 80798.69579514 67021.52746396 +8 3 7 2 1 3076.82540779 -0.20352775 -538.14879553 +8 3 7 2 2 -3076.88967971 536.22063789 1.25330246 +8 3 7 2 3 3077.88589449 -1.22116650 1557.52288844 +8 3 7 2 4 -91.19114408 -3059.79334869 891.04449041 +8 3 7 2 5 100.47843668 -885.94558467 3064.48519893 +8 3 7 2 6 -3077.50026296 -1558.80832686 0.29993563 +8 3 7 2 7 -80806.79405720 -67039.27722618 -71996.83830172 +8 3 7 2 8 80797.19611698 72009.09281468 67020.41341733 +8 3 7 3 1 1559.60101389 535.57791868 2.20666929 +8 3 7 3 2 -1557.86567202 -537.98811572 2.71013267 +8 3 7 3 3 536.44558962 1558.76547892 2.76369261 +8 3 7 3 4 -536.30633379 -1559.49389402 3.83489129 +8 3 7 3 5 -3070.79455919 -3071.12663078 -9457.31325697 +8 3 7 3 6 3063.01765673 3062.55704130 9469.35353019 +8 3 7 3 7 -71994.68519237 -71990.52894147 -74108.67437385 +8 3 7 3 8 72000.57678514 72002.17287118 74085.15085072 +8 1 8 1 1 74108.80291769 -67033.86767282 -67025.90866658 +8 1 8 1 2 -3.74919540 -3.32071592 4.95964991 +8 1 8 1 3 -74100.09407238 67048.96086229 -67036.34214178 +8 1 8 1 4 -0.42847947 6.79139966 -9.49082035 +8 1 8 1 5 -73987.00762717 -66833.67135052 66912.89720528 +8 1 8 1 6 -0.13925583 4.88466601 -7.49839080 +8 1 8 1 7 74102.84705300 67030.41841305 67035.75298250 +8 1 8 1 8 -120.25276441 -220.12061784 125.99438937 +8 1 8 2 1 -71998.26299598 72006.72546559 80806.82619316 +8 1 8 2 2 2.37806108 0.43919146 -2960.32183877 +8 1 8 2 3 72005.60070697 -71997.25606921 80805.87282633 +8 1 8 2 4 3.72777142 -0.89980690 -2960.27899083 +8 1 8 2 5 -71805.23299288 -71800.56256662 80610.40049023 +8 1 8 2 6 2.89223645 1.84246174 11771.35950492 +8 1 8 2 7 72008.63219925 72013.14194571 80808.95787854 +8 1 8 2 8 -219.87424215 -223.70913344 -328883.09457524 +8 1 8 3 1 -71993.87108137 80814.38885588 72003.47973357 +8 1 8 3 2 -7.36984695 -2964.74588934 1.69249392 +8 1 8 3 3 -71999.11995492 80816.26345358 -72004.30455656 +8 1 8 3 4 -9.12661280 11771.27380902 1.07119869 +8 1 8 3 5 71865.80927854 80595.91788401 -71885.10156686 +8 1 8 3 6 4.52045845 -2952.73775208 -7.06991132 +8 1 8 3 7 72012.25285081 80801.49162371 72004.78659597 +8 1 8 3 8 127.02274010 -328881.83056079 -114.39330760 +8 2 8 1 1 -71998.07018021 72006.52193784 80806.55839349 +8 2 8 1 2 2.42090903 0.42847947 -2960.30041480 +8 2 8 1 3 72005.90064260 -71997.38461305 80806.12991401 +8 2 8 1 4 3.69563546 -0.92123087 -2960.30041480 +8 2 8 1 5 -71805.11516103 -71800.51971867 80610.42191421 +8 2 8 1 6 2.82796453 1.64964598 11771.55232068 +8 2 8 1 7 72008.50365541 72013.13123373 80808.89360662 +8 2 8 1 8 -220.30272162 -223.11997416 -328883.21240709 +8 2 8 2 1 67049.81782124 -74100.98316729 -67035.01385541 +8 2 8 2 2 5.20602561 0.99621478 -8.11968603 +8 2 8 2 3 -67033.01071387 74108.03165464 -67027.08698514 +8 2 8 2 4 -3.77061937 -4.13482693 5.03463382 +8 2 8 2 5 -66833.22144707 -73986.87908333 66912.57584568 +8 2 8 2 6 3.31000394 1.19974253 -7.77690246 +8 2 8 2 7 67035.07812733 74102.60067731 67035.88152634 +8 2 8 2 8 -223.36634986 -120.74551581 124.91247869 +8 2 8 3 1 80814.65665555 -71997.99519630 -72003.32976576 +8 2 8 3 2 11772.19503989 -9.80146797 1.74605386 +8 2 8 3 3 80814.47455177 -71994.53522455 72004.13316477 +8 2 8 3 4 -2964.61734550 -7.30557503 1.75676584 +8 2 8 3 5 80593.21846332 71865.81999052 -71885.20868673 +8 2 8 3 6 -2952.57707228 4.43476256 -7.13418324 +8 2 8 3 7 80799.57417806 72010.67818874 72003.22264589 +8 2 8 3 8 -328876.91375882 128.64025012 -115.12172271 +8 3 8 1 1 -71993.91392931 80810.03978921 72003.31905377 +8 3 8 1 2 -7.45554285 -2964.12459411 1.36042233 +8 3 8 1 3 -71999.54843440 80816.67050908 -72004.69018809 +8 3 8 1 4 -8.52674154 11773.97322971 -0.85695895 +8 3 8 1 5 71865.78785456 80595.98215593 -71885.25153468 +8 3 8 1 6 4.70256223 -2952.24500069 -6.83424761 +8 3 8 1 7 72012.25285081 80799.44563422 72004.86157988 +8 3 8 1 8 126.80850037 -328879.72029938 -112.21877427 +8 3 8 2 1 80814.24960005 -71997.29891716 -72002.78345443 +8 3 8 2 2 11773.09484679 -10.47632314 1.11404663 +8 3 8 2 3 80814.34600793 -71994.23528892 72004.04746888 +8 3 8 2 4 -2964.47808967 -7.15560722 1.56395008 +8 3 8 2 5 80594.00043836 71866.80549331 -71885.93710183 +8 3 8 2 6 -2952.52351235 4.39191461 -7.06991132 +8 3 8 2 7 80797.49605261 72010.98883636 72003.52258152 +8 3 8 2 8 -328876.37815948 126.85134831 -114.42544356 +8 3 8 3 1 67028.69378317 -67026.93701732 -74118.22946612 +8 3 8 3 2 -4.45618653 2.31378916 3.62065156 +8 3 8 3 3 -67026.84060944 67028.80090304 -74118.52940176 +8 3 8 3 4 1.44611823 -3.64207553 3.06362824 +8 3 8 3 5 -66906.88778066 -66906.98418854 74137.23253080 +8 3 8 3 6 1.30686240 1.67106995 3.85631527 +8 3 8 3 7 67020.44555329 67018.21746002 74090.72108389 +8 3 8 3 8 -113.37566885 -113.37566885 -1.74605386 diff --git a/examples/USER/phonon/third_order_command/silicon_input_file.lmp b/examples/USER/phonon/third_order_command/silicon_input_file.lmp new file mode 100755 index 0000000000..5066049895 --- /dev/null +++ b/examples/USER/phonon/third_order_command/silicon_input_file.lmp @@ -0,0 +1,29 @@ +LAMMPS description + + 8 atoms + 0 bonds + 0 angles + 0 dihedrals + 0 impropers + + 1 atom types + 0 bond types + 0 angle types + 0 dihedral types + 0 improper types + + + 0.0000000 5.4310000 xlo xhi + 0.0000000 5.4310000 ylo yhi + 0.0000000 5.4310000 zlo zhi + + Atoms + + 1 1 1 0.0000000 0.0000000 0.0000000 0.0000000 + 2 2 1 0.0000000 1.3577500 1.3577500 1.3572000 + 3 3 1 0.0000000 2.7155000 2.7155000 0.0000000 + 4 4 1 0.0000000 4.0732500 4.0732500 1.3572000 + 5 5 1 0.0000000 2.7155000 0.0000000 2.7144000 + 6 6 1 0.0000000 4.0732500 1.3577500 4.0732500 + 7 7 1 0.0000000 0.0000000 2.7155000 2.7155000 + 8 8 1 0.0000000 1.3577500 4.0732500 4.0732500 diff --git a/src/USER-PHONON/dynamical_matrix.cpp b/src/USER-PHONON/dynamical_matrix.cpp index d1b53eee01..3271a6ee37 100644 --- a/src/USER-PHONON/dynamical_matrix.cpp +++ b/src/USER-PHONON/dynamical_matrix.cpp @@ -244,7 +244,8 @@ void DynamicalMatrix::calculateMatrix() { int local_idx; // local index int local_jdx; // second local index - int natoms = atom->natoms; + int nlocal = atom->nlocal; + bigint natoms = atom->natoms; int *mask = atom->mask; int *type = atom->type; double imass; // dynamical matrix element @@ -262,13 +263,14 @@ void DynamicalMatrix::calculateMatrix() for (int i=1; i<=natoms; i++){ local_idx = atom->map(i); + //if (screen) fprintf(screen, "local idx = %i on proc %i with %i local\n",local_idx, comm->me, nlocal); if (local_idx >= 0){ for (int alpha=0; alpha<3; alpha++){ displace_atom(local_idx, alpha, 1); energy_force(0); for (int j=1; j<=natoms; j++){ local_jdx = atom->map(j); - if (local_jdx >= 0){ + if (local_jdx >= 0 && local_idx < nlocal){ for (int beta=0; beta<3; beta++){ dynmat[(i-1)*3+alpha][(j-1)*3+beta] += -f[j-1][beta]; } @@ -278,7 +280,7 @@ void DynamicalMatrix::calculateMatrix() energy_force(0); for (int j=1; j<=natoms; j++){ local_jdx = atom->map(j); - if (local_jdx >= 0){ + if (local_jdx >= 0 && local_idx < nlocal){ for (int beta=0; beta<3; beta++){ if (atom->rmass_flag == 1) imass = sqrt(m[i] * m[j]); @@ -365,31 +367,31 @@ void DynamicalMatrix::displace_atom(int local_idx, int direction, int magnitude) void DynamicalMatrix::energy_force(int resetflag) { - // check for reneighboring - // always communicate since atoms move - int nflag = neighbor->check_distance(); - - if (nflag == 0) { - //if (comm->me == 0 && screen) fprintf(screen,"b\n"); - timer->stamp(); - comm->forward_comm(); - timer->stamp(Timer::COMM); - //if (comm->me == 0 && screen) fprintf(screen,"c\n"); - } else { - if (triclinic) domain->x2lamda(atom->nlocal); - domain->pbc(); - if (domain->box_change) { - domain->reset_box(); - comm->setup(); - if (neighbor->style) neighbor->setup_bins(); - } - timer->stamp(); - comm->borders(); - if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); - timer->stamp(Timer::COMM); - neighbor->build(1); - timer->stamp(Timer::NEIGH); - } + //// check for reneighboring + //// always communicate since atoms move + //int nflag = neighbor->check_distance(); +// + //if (nflag == 0) { + ////if (comm->me == 0 && screen) fprintf(screen,"b\n"); + // timer->stamp(); + // comm->forward_comm(); + // timer->stamp(Timer::COMM); + ////if (comm->me == 0 && screen) fprintf(screen,"c\n"); + //} else { + // if (triclinic) domain->x2lamda(atom->nlocal); + // domain->pbc(); + // if (domain->box_change) { + // domain->reset_box(); + // comm->setup(); + // if (neighbor->style) neighbor->setup_bins(); + // } + // timer->stamp(); + // comm->borders(); + // if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); + // timer->stamp(Timer::COMM); + // neighbor->build(1); + // timer->stamp(Timer::NEIGH); + //} force_clear(); if (pair_compute_flag) { From 562bc4e5841be3785b8332e83e854f5bf98a2485 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Sat, 2 Feb 2019 13:05:26 +0100 Subject: [PATCH 045/143] Update install.py --- python/install.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/python/install.py b/python/install.py index 9308506fd2..4c1560101e 100644 --- a/python/install.py +++ b/python/install.py @@ -36,7 +36,10 @@ if pydir: str = "cp ../src/liblammps.so %s" % pydir print(str) try: - shutil.copyfile("../src/liblammps.so", os.path.join(pydir,"liblammps.so") ) + if sys.platform == 'darwin': + shutil.copyfile("../src/liblammps.dylib", os.path.join(pydir,"liblammps.dylib") ) + else: + shutil.copyfile("../src/liblammps.so", os.path.join(pydir,"liblammps.so") ) except shutil.Error: pass # source and destination are identical sys.exit() From 7c2a61ad4c4a65fa94f21fac1ef4693f666fb6c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Sat, 2 Feb 2019 17:55:09 +0100 Subject: [PATCH 046/143] Define lib_ext --- python/install.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/python/install.py b/python/install.py index 4c1560101e..2cd6562557 100644 --- a/python/install.py +++ b/python/install.py @@ -22,6 +22,11 @@ else: pydir = "" # copy lammps.py to pydir if it exists # if pydir not specified, install in site-packages via distutils setup() +if sys.platform == 'darwin': + lib_ext = ".dylib" +else: + lib_ext = ".so" + if pydir: if not os.path.isdir(pydir): print( "ERROR: pydir %s does not exist" % pydir) @@ -36,10 +41,7 @@ if pydir: str = "cp ../src/liblammps.so %s" % pydir print(str) try: - if sys.platform == 'darwin': - shutil.copyfile("../src/liblammps.dylib", os.path.join(pydir,"liblammps.dylib") ) - else: - shutil.copyfile("../src/liblammps.so", os.path.join(pydir,"liblammps.so") ) + shutil.copyfile("../src/liblammps" + lib_ext, os.path.join(pydir,"liblammps" + lib_ext) ) except shutil.Error: pass # source and destination are identical sys.exit() @@ -68,7 +70,7 @@ try: url = "http://lammps.sandia.gov", description = "LAMMPS molecular dynamics library", py_modules = ["lammps"], - data_files = [(get_python_lib(), ["../src/liblammps.so"])]) + data_files = [(get_python_lib(), ["../src/liblammps" + lib_ext])]) except: tryuser=True print ("Installation into global site-packages dir failed.\nTrying user site dir %s now." % site.USER_SITE) @@ -84,7 +86,7 @@ if tryuser: url = "http://lammps.sandia.gov", description = "LAMMPS molecular dynamics library", py_modules = ["lammps"], - data_files = [(site.USER_SITE, ["../src/liblammps.so"])]) + data_files = [(site.USER_SITE, ["../src/liblammps" + lib_ext])]) except: print("Installation into user site package dir failed.\nGo to ../python and install manually.") From 5c3e3f381bba628d781aa328b53745cc1ffff909 Mon Sep 17 00:00:00 2001 From: charlie sievers Date: Sun, 3 Feb 2019 09:13:37 -0800 Subject: [PATCH 047/143] added a groupmap --- src/USER-PHONON/dynamical_matrix.cpp | 124 ++++++++++++++++++--------- src/USER-PHONON/dynamical_matrix.h | 2 + 2 files changed, 85 insertions(+), 41 deletions(-) diff --git a/src/USER-PHONON/dynamical_matrix.cpp b/src/USER-PHONON/dynamical_matrix.cpp index 3271a6ee37..a7d8620d00 100644 --- a/src/USER-PHONON/dynamical_matrix.cpp +++ b/src/USER-PHONON/dynamical_matrix.cpp @@ -40,6 +40,7 @@ DynamicalMatrix::DynamicalMatrix(LAMMPS *lmp) : Pointers(lmp), fp(NULL) DynamicalMatrix::~DynamicalMatrix() { if (fp && me == 0) fclose(fp); + memory->destroy(groupmap); memory->destroy(dynmat); memory->destroy(final_dynmat); fp = NULL; @@ -97,6 +98,13 @@ void DynamicalMatrix::setup() //modify->setup_pre_reverse(eflag,vflag); if (force->newton) comm->reverse_comm(); + + //if all then skip communication groupmap population + if (group->count(igroup) == atom->natoms) + for (int i=0; inatoms; i++) + groupmap[i] = i; + else + create_groupmap(); } /* ---------------------------------------------------------------------- */ @@ -126,6 +134,7 @@ void DynamicalMatrix::command(int narg, char **arg) if (igroup == -1) error->all(FLERR,"Could not find dynamical matrix group ID"); groupbit = group->bitmask[igroup]; dynlen = (group->count(igroup))*3; + memory->create(groupmap,atom->natoms,"total_group_map:totalgm"); memory->create(dynmat,int(dynlen),int(dynlen),"dynamic_matrix:dynmat"); update->setupflag = 1; @@ -246,8 +255,8 @@ void DynamicalMatrix::calculateMatrix() int local_jdx; // second local index int nlocal = atom->nlocal; bigint natoms = atom->natoms; - int *mask = atom->mask; int *type = atom->type; + int *gm = groupmap; double imass; // dynamical matrix element double *m = atom->mass; double **f = atom->f; @@ -263,16 +272,15 @@ void DynamicalMatrix::calculateMatrix() for (int i=1; i<=natoms; i++){ local_idx = atom->map(i); - //if (screen) fprintf(screen, "local idx = %i on proc %i with %i local\n",local_idx, comm->me, nlocal); if (local_idx >= 0){ for (int alpha=0; alpha<3; alpha++){ displace_atom(local_idx, alpha, 1); energy_force(0); for (int j=1; j<=natoms; j++){ local_jdx = atom->map(j); - if (local_jdx >= 0 && local_idx < nlocal){ + if (local_jdx >= 0 && local_idx < nlocal && gm[i-1] >= 0 && gm[j-1] >= 0){ for (int beta=0; beta<3; beta++){ - dynmat[(i-1)*3+alpha][(j-1)*3+beta] += -f[j-1][beta]; + dynmat[(gm[i-1])*3+alpha][(gm[j-1])*3+beta] += -f[j-1][beta]; } } } @@ -280,21 +288,15 @@ void DynamicalMatrix::calculateMatrix() energy_force(0); for (int j=1; j<=natoms; j++){ local_jdx = atom->map(j); - if (local_jdx >= 0 && local_idx < nlocal){ + if (local_jdx >= 0 && local_idx < nlocal && gm[i-1] >= 0 && gm[j-1] >= 0){ for (int beta=0; beta<3; beta++){ if (atom->rmass_flag == 1) - imass = sqrt(m[i] * m[j]); + imass = sqrt(m[local_idx] * m[local_jdx]); else - imass = sqrt(m[type[i]] * m[type[j]]); - //dynmat has length dynlen - //dynlen = (group->count(igroup))*3; - //currently dynmat is being called to natoms*3 - //Also with this implementation - //I am not recovering the correct dynamical matrix - //if I have more than 1 core - dynmat[(i-1)*3+alpha][(j-1)*3+beta] -= -f[j-1][beta]; - dynmat[(i-1)*3+alpha][(j-1)*3+beta] /= (2 * del * imass); - dynmat[(i-1)*3+alpha][(j-1)*3+beta] *= conversion; + imass = sqrt(m[type[local_idx]] * m[type[local_jdx]]); + dynmat[(gm[i-1])*3+alpha][(gm[j-1])*3+beta] -= -f[j-1][beta]; + dynmat[(gm[i-1])*3+alpha][(gm[j-1])*3+beta] /= (2 * del * imass); + dynmat[(gm[i-1])*3+alpha][(gm[j-1])*3+beta] *= conversion; } } } @@ -367,31 +369,6 @@ void DynamicalMatrix::displace_atom(int local_idx, int direction, int magnitude) void DynamicalMatrix::energy_force(int resetflag) { - //// check for reneighboring - //// always communicate since atoms move - //int nflag = neighbor->check_distance(); -// - //if (nflag == 0) { - ////if (comm->me == 0 && screen) fprintf(screen,"b\n"); - // timer->stamp(); - // comm->forward_comm(); - // timer->stamp(Timer::COMM); - ////if (comm->me == 0 && screen) fprintf(screen,"c\n"); - //} else { - // if (triclinic) domain->x2lamda(atom->nlocal); - // domain->pbc(); - // if (domain->box_change) { - // domain->reset_box(); - // comm->setup(); - // if (neighbor->style) neighbor->setup_bins(); - // } - // timer->stamp(); - // comm->borders(); - // if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); - // timer->stamp(Timer::COMM); - // neighbor->build(1); - // timer->stamp(Timer::NEIGH); - //} force_clear(); if (pair_compute_flag) { @@ -489,3 +466,68 @@ void DynamicalMatrix::convert_units(const char *style) } else error->all(FLERR,"Units Type Conversion Not Found"); } + +/* ---------------------------------------------------------------------- */ + +void DynamicalMatrix::create_groupmap() +{ + //Create a group map which maps atom order onto group + + int local_idx; // local index + int gid = 0; //group index + int nlocal = atom->nlocal; + int *mask = atom->mask; + bigint natoms = atom->natoms; + int *recv = new int[comm->nprocs]; + int *displs = new int[comm->nprocs]; + int *temp_groupmap = new int[natoms]; + + //find number of local atoms in the group (final_gid) + for (int i=1; i<=natoms; i++){ + local_idx = atom->map(i); + if (mask[local_idx] & groupbit && local_idx < nlocal) + gid += 1; // gid at the end of loop is final_Gid + } + //create an array of length final_gid + int *sub_groupmap = new int[gid]; + + gid = 0; + //create a map between global atom id and group atom id for each proc + for (int i=1; i<=natoms; i++){ + local_idx = atom->map(i); + if (mask[local_idx] & groupbit && local_idx < nlocal){ + sub_groupmap[gid] = i; + gid += 1; + } + } + + //populate arrays for Allgatherv + for (int i=0; inprocs; i++){ + recv[i] = 0; + } + recv[comm->me] = gid; + MPI_Allreduce(recv,displs,4,MPI_INT,MPI_SUM,world); + for (int i=0; inprocs; i++){ + recv[i]=displs[i]; + if (i>0) displs[i] = displs[i-1]+recv[i-1]; + else displs[i] = 0; + } + + //combine subgroup maps into total temporary groupmap + MPI_Allgatherv(sub_groupmap,gid,MPI_INT,temp_groupmap,recv,displs,MPI_INT,world); + std::sort(temp_groupmap,temp_groupmap+group->count(igroup)); + + //populate member groupmap based on temp groupmap + for (int i=0; i Date: Sun, 3 Feb 2019 12:43:48 -0600 Subject: [PATCH 048/143] Some adjustments to kim Install.py --- lib/kim/Install.py | 165 +++++++++++++++++++++------------------------ 1 file changed, 77 insertions(+), 88 deletions(-) diff --git a/lib/kim/Install.py b/lib/kim/Install.py index e7e2128f48..544fe2b65d 100644 --- a/lib/kim/Install.py +++ b/lib/kim/Install.py @@ -1,46 +1,43 @@ #!/usr/bin/env python -# install.py tool to download, compile, and setup the kim-api library -# used to automate the steps described in the README file in this dir +""" +Install.py tool to download, compile, and setup the kim-api library +used to automate the steps described in the README file in this dir +""" from __future__ import print_function -import sys,os,re,subprocess,shutil +import sys, os, subprocess, shutil +from argparse import ArgumentParser + sys.path.append('..') -from install_helpers import error,fullpath,which,geturl +from install_helpers import fullpath, geturl + +parser = ArgumentParser(prog='Install.py', + description="LAMMPS library build wrapper script") + +# settings + +thisdir = fullpath('.') +version = "kim-api-v2-2.0.0-beta.3" # help message -help = """ -Syntax from src dir: make lib-kim args="-b -v version -a kim-name" +HELP = """ +Syntax from src dir: make lib-kim args="-b -v version -a kim-name" or: make lib-kim args="-b -a everything" or: make lib-kim args="-n -a kim-name" - or: make lib-kim args="-p /home/bob/kim -a kim-name" -Syntax from lib dir: python Install.py -b -v version -a kim-name + or: make lib-kim args="-p /usr/local/open-kim -a kim-name" +Syntax from lib dir: python Install.py -b -v version -a kim-name or: python Install.py -b -a everything or: python Install.py -n -a kim-name - or: python Install.py -p /home/bob/kim -a kim-name - -specify one or more options, order does not matter - - -v = version of KIM API library to use - default = kim-api-v2.0.0-beta.3 (current as of December 2018) - -b = download and build base KIM API library with example Models - this will delete any previous installation in the current folder - -n = do NOT download and build base KIM API library. - Use an existing installation - -p = specify install prefix of KIM API installation (implies -n) - -a = add single KIM model or model driver with kim-name - to existing KIM API lib (see example below). - If kim-name = everything, then rebuild KIM API library with - *all* available OpenKIM Models (make take a long time). - -vv = be more verbose about what is happening while the script runs + or: python Install.py -p /usr/local/open-kim -a kim-name Examples: make lib-kim args="-b" # install KIM API lib with only example models -make lib-kim args="-a EAM_ErcolessiAdams_1994_Al__MO_324507536345_002" # Ditto plus one model +make lib-kim args="-b -a Glue_Ercolessi_Adams_Al__MO_324507536345_001" # Ditto plus one model make lib-kim args="-b -a everything" # install KIM API lib with all models -make lib-kim args="-n -a EAM_Dynamo_Ackland_2003_W__MO_141627196590_005" # only add one model or model driver +make lib-kim args="-n -a EAM_Dynamo_Ackland_W__MO_141627196590_002" # only add one model or model driver See the list of KIM model drivers here: https://openkim.org/kim-items/model-drivers/alphabetical @@ -53,62 +50,49 @@ https://openkim.org/kim-api in the "What is in the KIM API source package?" section """ -# parse args +pgroup = parser.add_mutually_exclusive_group() +pgroup.add_argument("-b", "--build", action="store_true", + help="download and build base KIM API library with example Models.") +pgroup.add_argument("-n", "--nobuild", action="store_true", + help="use the previously downloaded and compiled base KIM API.") +pgroup.add_argument("-p", "--path", + help="specify location of existing KIM API installation.") +parser.add_argument("-v", "--version", default=version, + help="set version of KIM API library to download and build (default: %s)" % version) +parser.add_argument("-a", "--add", + help="add single KIM model or model driver. If adding 'everything', then all available OpenKIM models are added (may take a long time)") +parser.add_argument("-vv", "--verbose", action="store_true", + help="be more verbose about is happening while this script runs") -args = sys.argv[1:] -nargs = len(args) -if nargs == 0: error(help=help) +args = parser.parse_args() -thisdir = fullpath('.') -version = "kim-api-v2-2.0.0-beta.3" +# print help message and exit, if neither build nor path options are given +if not args.build and not args.path and not args.nobuild: + parser.print_help() + sys.exit(HELP) -buildflag = False +buildflag = args.build +pathflag = args.path is not None +addflag = args.add is not None +addmodelname = args.add everythingflag = False -addflag = False -verboseflag = False -pathflag = False +if addflag and addmodelname == "everything": + everythingflag = True + buildflag = True +verboseflag = args.verbose -iarg = 0 -while iarg < len(args): - if args[iarg] == "-v": - if iarg+2 > len(args): error(help=help) - version = args[iarg+1] - iarg += 2 - elif args[iarg] == "-b": - buildflag = True - iarg += 1 - elif args[iarg] == "-n": - buildflag = False - iarg += 1 - elif args[iarg] == "-p": - if iarg+2 > len(args): error(help=help) - kimdir = fullpath(args[iarg+1]) - pathflag = True - buildflag = False - iarg += 2 - elif args[iarg] == "-a": - addflag = True - if iarg+2 > len(args): error(help=help) - addmodelname = args[iarg+1] - if addmodelname == "everything": - buildflag = True - everythingflag = True - addflag = False - iarg += 2 - elif args[iarg] == "-vv": - verboseflag = True - iarg += 1 - else: error(help=help) +if pathflag: + buildflag = False + kimdir = args.path + if not os.path.isdir(kimdir): + sys.exit("KIM API path %s does not exist" % kimdir) + kimdir = fullpath(kimdir) url = "https://s3.openkim.org/kim-api/%s.txz" % version # set KIM API directory if pathflag: - if not os.path.isdir(kimdir): - print("\nkim-api is not installed at %s" % kimdir) - error(help=help) - # configure LAMMPS to use existing kim-api installation with open("%s/kim-prefix.txt" % thisdir, 'w') as pffile: pffile.write("%s" % kimdir) @@ -116,6 +100,8 @@ if pathflag: print("Created %s/kim-prefix.txt\n using %s" % (thisdir,kimdir)) else: kimdir = os.path.join(os.path.abspath(thisdir), "installed-" + version) + if args.nobuild and not os.path.isdir(kimdir): + sys.exit("Cannot use -n/--nobuild without first building the KIM API with -b") # download KIM tarball, unpack, build KIM if buildflag: @@ -136,10 +122,10 @@ if buildflag: # download entire kim-api tarball print("Downloading kim-api tarball ...") - geturl(url,"%s/%s.txz" % (thisdir,version)) + geturl(url, "%s/%s.txz" % (thisdir, version)) print("Unpacking kim-api tarball ...") - cmd = 'cd "%s"; rm -rf "%s"; tar -xJvf %s.txz' % (thisdir,version,version) - subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + cmd = 'cd "%s"; rm -rf "%s"; tar -xJvf %s.txz' % (thisdir, version, version) + subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) # configure kim-api @@ -150,29 +136,32 @@ if buildflag: # build kim-api print("Building kim-api ...") - cmd = 'cd "%s/%s/build" && make' % (thisdir,version) - txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - if verboseflag: print(txt.decode("UTF-8")) + cmd = 'cd "%s/%s/build" && make' % (thisdir, version) + txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) + if verboseflag: + print(txt.decode("UTF-8")) # install kim-api print("Installing kim-api ...") - cmd = 'cd "%s/%s/build" && make install' % (thisdir,version) - txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - if verboseflag: print(txt.decode("UTF-8")) + cmd = 'cd "%s/%s/build" && make install' % (thisdir, version) + txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) + if verboseflag: + print(txt.decode("UTF-8")) # remove source files print("Removing kim-api source and build files ...") - cmd = 'cd "%s"; rm -rf %s; rm -rf %s.txz' % (thisdir,version,version) - subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) + cmd = 'cd "%s"; rm -rf %s; rm -rf %s.txz' % (thisdir, version, version) + subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) # add all OpenKIM models, if desired if everythingflag: print("Adding all OpenKIM models, this will take a while ...") cmd = '%s/bin/kim-api-v2-collections-management install system OpenKIM' % (kimdir) - txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - if verboseflag: print(txt.decode("UTF-8")) + txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) + if verboseflag: + print(txt.decode("UTF-8")) # add single OpenKIM model if addflag: @@ -183,10 +172,10 @@ if addflag: kimdir = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) if not os.path.isdir(kimdir): - print("\nkim-api is not installed") - error(help=help) + sys.exit("\nkim-api is not installed") # download single model cmd = '%s/bin/kim-api-v2-collections-management install system %s' % (kimdir.decode("UTF-8"), addmodelname) - txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) - if verboseflag: print (txt.decode("UTF-8")) + txt = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True) + if verboseflag: + print(txt.decode("UTF-8")) From b9d8b5f501d94034632333d988c1adb686ba3f49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Mon, 4 Feb 2019 09:23:29 +0100 Subject: [PATCH 049/143] lib extension for Mac Os X --- python/lammps.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/python/lammps.py b/python/lammps.py index c393ee7ec7..3d5fc7a6b2 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -85,14 +85,19 @@ class lammps(object): # fall back to loading with a relative path, # typically requires LD_LIBRARY_PATH to be set appropriately + if sys.platform == 'darwin': + lib_ext = ".dylib" + else: + lib_ext = ".so" + if not self.lib: try: - if not name: self.lib = CDLL(join(modpath,"liblammps.so"),RTLD_GLOBAL) - else: self.lib = CDLL(join(modpath,"liblammps_%s.so" % name), + if not name: self.lib = CDLL(join(modpath,"liblammps" + lib_ext),RTLD_GLOBAL) + else: self.lib = CDLL(join(modpath,"liblammps_%s" % name + lib_ext), RTLD_GLOBAL) except: - if not name: self.lib = CDLL("liblammps.so",RTLD_GLOBAL) - else: self.lib = CDLL("liblammps_%s.so" % name,RTLD_GLOBAL) + if not name: self.lib = CDLL("liblammps" + lib_ext,RTLD_GLOBAL) + else: self.lib = CDLL("liblammps_%s" % name + lib_ext,RTLD_GLOBAL) # define ctypes API for each library method # NOTE: should add one of these for each lib function From 9915a6725f3c8ec3e66a86d8d49c1eb502d599db Mon Sep 17 00:00:00 2001 From: Theophile Chirac Date: Mon, 4 Feb 2019 17:21:59 +0100 Subject: [PATCH 050/143] Commit JT 020419 - correct in magelec (if iiall(FLERR,"Incorrect args in pair_style command"); - } /* ---------------------------------------------------------------------- @@ -287,7 +286,7 @@ void PairSpinMagelec::compute(int eflag, int vflag) // compute me interaction if (rsq <= local_cut2) { - compute_magelec(i,j,rsq,eij,fmi,spj); + compute_magelec(i,j,eij,fmi,spj); if (lattice_flag) { compute_magelec_mech(i,j,fi,spi,spj); } @@ -332,55 +331,63 @@ void PairSpinMagelec::compute_single_pair(int ii, double fmi[3]) double delx,dely,delz; double spj[3]; - int i,j,jnum,itype,jtype; + int i,j,inum,jnum,itype,jtype; int *ilist,*jlist,*numneigh,**firstneigh; double rsq, inorm; + inum = list->inum; ilist = list->ilist; numneigh = list->numneigh; firstneigh = list->firstneigh; - i = ilist[ii]; - itype = type[i]; + // compute pair if - xi[0] = x[i][0]; - xi[1] = x[i][1]; - xi[2] = x[i][2]; + if (ii < inum) { - jlist = firstneigh[i]; - jnum = numneigh[i]; - - for (int jj = 0; jj < jnum; jj++) { - - j = jlist[jj]; - j &= NEIGHMASK; - jtype = type[j]; - local_cut2 = cut_spin_magelec[itype][jtype]*cut_spin_magelec[itype][jtype]; - - spj[0] = sp[j][0]; - spj[1] = sp[j][1]; - spj[2] = sp[j][2]; - - delx = xi[0] - x[j][0]; - dely = xi[1] - x[j][1]; - delz = xi[2] - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; - inorm = 1.0/sqrt(rsq); - eij[0] = -inorm*delx; - eij[1] = -inorm*dely; - eij[2] = -inorm*delz; - - if (rsq <= local_cut2) { - compute_magelec(i,j,rsq,eij,fmi,spj); + i = ilist[ii]; + itype = type[i]; + + xi[0] = xi[1] = xi[2] = 0.0; + xi[0] = x[i][0]; + xi[1] = x[i][1]; + xi[2] = x[i][2]; + + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (int jj = 0; jj < jnum; jj++) { + + j = jlist[jj]; + j &= NEIGHMASK; + jtype = type[j]; + local_cut2 = cut_spin_magelec[itype][jtype]*cut_spin_magelec[itype][jtype]; + + spj[0] = sp[j][0]; + spj[1] = sp[j][1]; + spj[2] = sp[j][2]; + + delx = xi[0] - x[j][0]; + dely = xi[1] - x[j][1]; + delz = xi[2] - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + inorm = 1.0/sqrt(rsq); + eij[0] = -inorm*delx; + eij[1] = -inorm*dely; + eij[2] = -inorm*delz; + + if (rsq <= local_cut2) { + compute_magelec(i,j,eij,fmi,spj); + } + } + } - } } /* ---------------------------------------------------------------------- */ -void PairSpinMagelec::compute_magelec(int i, int j, double /*rsq*/, double eij[3], double fmi[3], double spj[3]) +void PairSpinMagelec::compute_magelec(int i, int j, double eij[3], double fmi[3], double spj[3]) { int *type = atom->type; int itype, jtype; diff --git a/src/SPIN/pair_spin_magelec.h b/src/SPIN/pair_spin_magelec.h index ce13476271..5e72a4c35e 100644 --- a/src/SPIN/pair_spin_magelec.h +++ b/src/SPIN/pair_spin_magelec.h @@ -37,7 +37,7 @@ class PairSpinMagelec : public PairSpin { void compute(int, int); void compute_single_pair(int, double *); - void compute_magelec(int, int, double, double *, double *, double *); + void compute_magelec(int, int, double *, double *, double *); void compute_magelec_mech(int, int, double *, double *, double *); void write_restart(FILE *); From 8ec9b6fb64930cc3798c4efd684f05f2f2e28296 Mon Sep 17 00:00:00 2001 From: casievers Date: Tue, 5 Feb 2019 11:49:15 -0800 Subject: [PATCH 051/143] Memory Use Reduction --- src/USER-PHONON/dynamical_matrix.cpp | 131 +++++++++++++++------------ src/USER-PHONON/dynamical_matrix.h | 8 +- 2 files changed, 77 insertions(+), 62 deletions(-) diff --git a/src/USER-PHONON/dynamical_matrix.cpp b/src/USER-PHONON/dynamical_matrix.cpp index a7d8620d00..7d4caad226 100644 --- a/src/USER-PHONON/dynamical_matrix.cpp +++ b/src/USER-PHONON/dynamical_matrix.cpp @@ -23,6 +23,7 @@ #include "pair.h" #include "timer.h" #include "finish.h" +#include using namespace LAMMPS_NS; @@ -41,8 +42,6 @@ DynamicalMatrix::~DynamicalMatrix() { if (fp && me == 0) fclose(fp); memory->destroy(groupmap); - memory->destroy(dynmat); - memory->destroy(final_dynmat); fp = NULL; } @@ -75,32 +74,13 @@ void DynamicalMatrix::setup() neighbor->ndanger = 0; // compute all forces - force_clear(); external_force_clear = 0; - eflag=0; vflag=0; - if (pair_compute_flag) force->pair->compute(eflag,vflag); - else if (force->pair) force->pair->compute_dummy(eflag,vflag); - - if (atom->molecular) { - if (force->bond) force->bond->compute(eflag,vflag); - if (force->angle) force->angle->compute(eflag,vflag); - if (force->dihedral) force->dihedral->compute(eflag,vflag); - if (force->improper) force->improper->compute(eflag,vflag); - } - - if (force->kspace) { - force->kspace->setup(); - if (kspace_compute_flag) force->kspace->compute(eflag,vflag); - else force->kspace->compute_dummy(eflag,vflag); - } - - //modify->setup_pre_reverse(eflag,vflag); - if (force->newton) comm->reverse_comm(); + update_force(); //if all then skip communication groupmap population - if (group->count(igroup) == atom->natoms) + if (ngatoms == atom->natoms) for (int i=0; inatoms; i++) groupmap[i] = i; else @@ -133,9 +113,9 @@ void DynamicalMatrix::command(int narg, char **arg) igroup = group->find(arg[0]); if (igroup == -1) error->all(FLERR,"Could not find dynamical matrix group ID"); groupbit = group->bitmask[igroup]; - dynlen = (group->count(igroup))*3; + ngatoms = group->count(igroup); + dynlen = (ngatoms)*3; memory->create(groupmap,atom->natoms,"total_group_map:totalgm"); - memory->create(dynmat,int(dynlen),int(dynlen),"dynamic_matrix:dynmat"); update->setupflag = 1; int style = -1; @@ -162,16 +142,20 @@ void DynamicalMatrix::command(int narg, char **arg) if (style == REGULAR) { setup(); + timer->init(); + timer->barrier_start(); calculateMatrix(); - if (me ==0) writeMatrix(); + timer->barrier_stop(); } if (style == ESKM) { setup(); convert_units(update->unit_style); conversion = conv_energy/conv_distance/conv_mass; + timer->init(); + timer->barrier_start(); calculateMatrix(); - if (me ==0) writeMatrix(); + timer->barrier_stop(); } Finish finish(lmp); @@ -219,7 +203,7 @@ void DynamicalMatrix::options(int narg, char **arg) void DynamicalMatrix::openfile(const char* filename) { // if file already opened, return - if (me!=0) return; + //if (me!=0) return; if (file_opened) return; if (compressed) { @@ -261,54 +245,68 @@ void DynamicalMatrix::calculateMatrix() double *m = atom->mass; double **f = atom->f; - //initialize dynmat to all zeros - for (int i=0; i < dynlen; i++) - for (int j=0; j < dynlen; j++) - dynmat[i][j] = 0.; + double **dynmat = new double*[3]; + for (int i=0; i<3; i++) + dynmat[i] = new double[dynlen]; - energy_force(0); + double **fdynmat = new double*[3]; + for (int i=0; i<3; i++) + fdynmat[i] = new double[dynlen]; + + //initialize dynmat to all zeros + dynmat_clear(dynmat); if (comm->me == 0 && screen) fprintf(screen,"Calculating Dynamical Matrix...\n"); - for (int i=1; i<=natoms; i++){ + for (bigint i=1; i<=natoms; i++){ local_idx = atom->map(i); if (local_idx >= 0){ - for (int alpha=0; alpha<3; alpha++){ + for (bigint alpha=0; alpha<3; alpha++){ displace_atom(local_idx, alpha, 1); - energy_force(0); - for (int j=1; j<=natoms; j++){ + update_force(); + for (bigint j=1; j<=natoms; j++){ local_jdx = atom->map(j); - if (local_jdx >= 0 && local_idx < nlocal && gm[i-1] >= 0 && gm[j-1] >= 0){ + if (local_jdx >= 0 && local_jdx < nlocal + && gm[i-1] >= 0 && gm[j-1] >= 0){ for (int beta=0; beta<3; beta++){ - dynmat[(gm[i-1])*3+alpha][(gm[j-1])*3+beta] += -f[j-1][beta]; + dynmat[alpha][(gm[j-1])*3+beta] = -f[local_jdx][beta]; } } } displace_atom(local_idx,alpha,-2); - energy_force(0); - for (int j=1; j<=natoms; j++){ + update_force(); + for (bigint j=1; j<=natoms; j++){ local_jdx = atom->map(j); - if (local_jdx >= 0 && local_idx < nlocal && gm[i-1] >= 0 && gm[j-1] >= 0){ - for (int beta=0; beta<3; beta++){ + if (local_jdx >= 0 && local_jdx < nlocal + && gm[i-1] >= 0 && gm[j-1] >= 0){ + for (bigint beta=0; beta<3; beta++){ if (atom->rmass_flag == 1) imass = sqrt(m[local_idx] * m[local_jdx]); else imass = sqrt(m[type[local_idx]] * m[type[local_jdx]]); - dynmat[(gm[i-1])*3+alpha][(gm[j-1])*3+beta] -= -f[j-1][beta]; - dynmat[(gm[i-1])*3+alpha][(gm[j-1])*3+beta] /= (2 * del * imass); - dynmat[(gm[i-1])*3+alpha][(gm[j-1])*3+beta] *= conversion; + dynmat[alpha][(gm[j-1])*3+beta] -= -f[local_jdx][beta]; + dynmat[alpha][(gm[j-1])*3+beta] /= (2 * del * imass); + dynmat[alpha][(gm[j-1])*3+beta] *= conversion; } } } displace_atom(local_idx,alpha,1); } + for (int k=0; k<3; k++) + MPI_Reduce(dynmat[k],fdynmat[k],dynlen,MPI_DOUBLE,MPI_SUM,0,world); + if (me == 0) + writeMatrix(fdynmat); + dynmat_clear(dynmat); } } + for (int i=0; i < 3; i++) + delete [] dynmat[i]; + delete [] dynmat; - memory->create(final_dynmat,int(dynlen),int(dynlen),"dynamic_matrix_buffer:buf"); - for (int i = 0; i < dynlen; i++) - MPI_Reduce(dynmat[i], final_dynmat[i], int(dynlen), MPI_DOUBLE, MPI_SUM, 0, world); + for (int i=0; i < 3; i++) + delete [] fdynmat[i]; + delete [] fdynmat; if (screen && me ==0 ) fprintf(screen,"Finished Calculating Dynamical Matrix\n"); } @@ -317,15 +315,17 @@ void DynamicalMatrix::calculateMatrix() write dynamical matrix ------------------------------------------------------------------------- */ -void DynamicalMatrix::writeMatrix() +void DynamicalMatrix::writeMatrix(double **dynmat) { + if (me != 0) + return; // print file comment lines if (!binaryflag && fp) { clearerr(fp); - for (int i = 0; i < dynlen; i++) { + for (int i = 0; i < 3; i++) { for (int j = 0; j < dynlen; j++) { - if ((j+1)%3==0) fprintf(fp, "%4.8f\n", final_dynmat[j][i]); - else fprintf(fp, "%4.8f ",final_dynmat[j][i]); + if ((j+1)%3==0) fprintf(fp, "%4.8f\n", dynmat[i][j]); + else fprintf(fp, "%4.8f ",dynmat[i][j]); } } } @@ -334,7 +334,7 @@ void DynamicalMatrix::writeMatrix() if (binaryflag && fp) { clearerr(fp); - fwrite(&final_dynmat[0], sizeof(double), dynlen * dynlen, fp); + fwrite(&dynmat[0], sizeof(double), 3 * dynlen, fp); if (ferror(fp)) error->one(FLERR, "Error writing to binary file"); } @@ -367,7 +367,7 @@ void DynamicalMatrix::displace_atom(int local_idx, int direction, int magnitude) return negative gradient for nextra_global dof in fextra ------------------------------------------------------------------------- */ -void DynamicalMatrix::energy_force(int resetflag) +void DynamicalMatrix::update_force() { force_clear(); @@ -412,6 +412,21 @@ void DynamicalMatrix::force_clear() } } +/* ---------------------------------------------------------------------- + clear dynmat needed +------------------------------------------------------------------------- */ + +void DynamicalMatrix::dynmat_clear(double **dynmat) +{ + + size_t nbytes = sizeof(double) * dynlen; + + if (nbytes) { + for (int i=0; i<3; i++) + memset(&dynmat[i][0],0,nbytes); + } +} + /* ---------------------------------------------------------------------- */ void DynamicalMatrix::convert_units(const char *style) @@ -485,7 +500,7 @@ void DynamicalMatrix::create_groupmap() //find number of local atoms in the group (final_gid) for (int i=1; i<=natoms; i++){ local_idx = atom->map(i); - if (mask[local_idx] & groupbit && local_idx < nlocal) + if ((local_idx >= 0) && (local_idx < nlocal) && mask[local_idx] & groupbit) gid += 1; // gid at the end of loop is final_Gid } //create an array of length final_gid @@ -495,7 +510,7 @@ void DynamicalMatrix::create_groupmap() //create a map between global atom id and group atom id for each proc for (int i=1; i<=natoms; i++){ local_idx = atom->map(i); - if (mask[local_idx] & groupbit && local_idx < nlocal){ + if ((local_idx >= 0) && (local_idx < nlocal) && mask[local_idx] & groupbit){ sub_groupmap[gid] = i; gid += 1; } @@ -515,7 +530,7 @@ void DynamicalMatrix::create_groupmap() //combine subgroup maps into total temporary groupmap MPI_Allgatherv(sub_groupmap,gid,MPI_INT,temp_groupmap,recv,displs,MPI_INT,world); - std::sort(temp_groupmap,temp_groupmap+group->count(igroup)); + std::sort(temp_groupmap,temp_groupmap+ngatoms); //populate member groupmap based on temp groupmap for (int i=0; i Date: Tue, 5 Feb 2019 17:52:28 -0800 Subject: [PATCH 052/143] minor dynmat changes and start of third order changes --- src/USER-PHONON/dynamical_matrix.cpp | 76 +++++----- src/USER-PHONON/dynamical_matrix.h | 2 +- src/USER-PHONON/third_order.cpp | 201 ++++++++++++++++++--------- src/USER-PHONON/third_order.h | 5 +- 4 files changed, 180 insertions(+), 104 deletions(-) diff --git a/src/USER-PHONON/dynamical_matrix.cpp b/src/USER-PHONON/dynamical_matrix.cpp index 7d4caad226..854d46adca 100644 --- a/src/USER-PHONON/dynamical_matrix.cpp +++ b/src/USER-PHONON/dynamical_matrix.cpp @@ -80,7 +80,7 @@ void DynamicalMatrix::setup() update_force(); //if all then skip communication groupmap population - if (ngatoms == atom->natoms) + if (gcount == atom->natoms) for (int i=0; inatoms; i++) groupmap[i] = i; else @@ -113,8 +113,8 @@ void DynamicalMatrix::command(int narg, char **arg) igroup = group->find(arg[0]); if (igroup == -1) error->all(FLERR,"Could not find dynamical matrix group ID"); groupbit = group->bitmask[igroup]; - ngatoms = group->count(igroup); - dynlen = (ngatoms)*3; + gcount = group->count(igroup); + dynlen = (gcount)*3; memory->create(groupmap,atom->natoms,"total_group_map:totalgm"); update->setupflag = 1; @@ -260,44 +260,42 @@ void DynamicalMatrix::calculateMatrix() for (bigint i=1; i<=natoms; i++){ local_idx = atom->map(i); - if (local_idx >= 0){ - for (bigint alpha=0; alpha<3; alpha++){ - displace_atom(local_idx, alpha, 1); - update_force(); - for (bigint j=1; j<=natoms; j++){ - local_jdx = atom->map(j); - if (local_jdx >= 0 && local_jdx < nlocal - && gm[i-1] >= 0 && gm[j-1] >= 0){ - for (int beta=0; beta<3; beta++){ - dynmat[alpha][(gm[j-1])*3+beta] = -f[local_jdx][beta]; - } + for (bigint alpha=0; alpha<3; alpha++){ + displace_atom(local_idx, alpha, 1); + update_force(); + for (bigint j=1; j<=natoms; j++){ + local_jdx = atom->map(j); + if (local_idx >= 0 && local_jdx >= 0 && local_jdx < nlocal + && gm[i-1] >= 0 && gm[j-1] >= 0){ + for (int beta=0; beta<3; beta++){ + dynmat[alpha][(gm[j-1])*3+beta] = -f[local_jdx][beta]; } } - displace_atom(local_idx,alpha,-2); - update_force(); - for (bigint j=1; j<=natoms; j++){ - local_jdx = atom->map(j); - if (local_jdx >= 0 && local_jdx < nlocal - && gm[i-1] >= 0 && gm[j-1] >= 0){ - for (bigint beta=0; beta<3; beta++){ - if (atom->rmass_flag == 1) - imass = sqrt(m[local_idx] * m[local_jdx]); - else - imass = sqrt(m[type[local_idx]] * m[type[local_jdx]]); - dynmat[alpha][(gm[j-1])*3+beta] -= -f[local_jdx][beta]; - dynmat[alpha][(gm[j-1])*3+beta] /= (2 * del * imass); - dynmat[alpha][(gm[j-1])*3+beta] *= conversion; - } - } - } - displace_atom(local_idx,alpha,1); } - for (int k=0; k<3; k++) - MPI_Reduce(dynmat[k],fdynmat[k],dynlen,MPI_DOUBLE,MPI_SUM,0,world); - if (me == 0) - writeMatrix(fdynmat); - dynmat_clear(dynmat); + displace_atom(local_idx,alpha,-2); + update_force(); + for (bigint j=1; j<=natoms; j++){ + local_jdx = atom->map(j); + if (local_idx >= 0 && local_jdx >= 0 && local_jdx < nlocal + && gm[i-1] >= 0 && gm[j-1] >= 0){ + for (bigint beta=0; beta<3; beta++){ + if (atom->rmass_flag == 1) + imass = sqrt(m[local_idx] * m[local_jdx]); + else + imass = sqrt(m[type[local_idx]] * m[type[local_jdx]]); + dynmat[alpha][(gm[j-1])*3+beta] -= -f[local_jdx][beta]; + dynmat[alpha][(gm[j-1])*3+beta] /= (2 * del * imass); + dynmat[alpha][(gm[j-1])*3+beta] *= conversion; + } + } + } + displace_atom(local_idx,alpha,1); } + for (int k=0; k<3; k++) + MPI_Reduce(dynmat[k],fdynmat[k],dynlen,MPI_DOUBLE,MPI_SUM,0,world); + if (me == 0) + writeMatrix(fdynmat); + dynmat_clear(dynmat); } for (int i=0; i < 3; i++) @@ -530,7 +528,7 @@ void DynamicalMatrix::create_groupmap() //combine subgroup maps into total temporary groupmap MPI_Allgatherv(sub_groupmap,gid,MPI_INT,temp_groupmap,recv,displs,MPI_INT,world); - std::sort(temp_groupmap,temp_groupmap+ngatoms); + std::sort(temp_groupmap,temp_groupmap+gcount); //populate member groupmap based on temp groupmap for (int i=0; i using namespace LAMMPS_NS; @@ -72,28 +73,16 @@ void ThirdOrder::setup() neighbor->ndanger = 0; // compute all forces - force_clear(); + update_force(); external_force_clear = 0; - eflag=0; vflag=0; - if (pair_compute_flag) force->pair->compute(eflag,vflag); - else if (force->pair) force->pair->compute_dummy(eflag,vflag); - if (atom->molecular) { - if (force->bond) force->bond->compute(eflag,vflag); - if (force->angle) force->angle->compute(eflag,vflag); - if (force->dihedral) force->dihedral->compute(eflag,vflag); - if (force->improper) force->improper->compute(eflag,vflag); - } - - if (force->kspace) { - force->kspace->setup(); - if (kspace_compute_flag) force->kspace->compute(eflag,vflag); - else force->kspace->compute_dummy(eflag,vflag); - } - - if (force->newton) comm->reverse_comm(); + if (gcount == atom->natoms) + for (int i=0; inatoms; i++) + groupmap[i] = i; + else + create_groupmap(); } /* ---------------------------------------------------------------------- */ @@ -148,14 +137,20 @@ void ThirdOrder::command(int narg, char **arg) if (style == REGULAR) { setup(); + timer->init(); + timer->barrier_start(); calculateMatrix(); + timer->barrier_stop(); } if (style == BALLISTICO) { setup(); convert_units(update->unit_style); conversion = conv_energy/conv_distance/conv_distance; + timer->init(); + timer->barrier_start(); calculateMatrix(); + timer->barrier_stop(); } Finish finish(lmp); @@ -240,37 +235,78 @@ void ThirdOrder::calculateMatrix() int local_idx; // local index int local_jdx; // second local index int local_kdx; // third local index + int nlocal = atom->nlocal; int natoms = atom->natoms; - int *mask = atom->mask; + int *gm = groupmap; double **f = atom->f; - energy_force(0); + update_force(); if (comm->me == 0 && screen) fprintf(screen,"Calculating Anharmonic Dynamical Matrix...\n"); - for (int i=1; i<=natoms; i++){ + for (bigint i=1; i<=natoms; i++){ local_idx = atom->map(i); - if (local_idx >= 0 && mask[local_idx] && groupbit){ - for (int alpha=0; alpha<3; alpha++){ - displace_atom(local_idx, alpha, 1); - for (int j=1; j<=natoms; j++){ - local_jdx = atom->map(j); - if (local_jdx >= 0&& mask[local_jdx] && groupbit){ - for (int beta=0; beta<3; beta++){ + for (bigint alpha=0; alpha<3; alpha++){ + displace_atom(local_idx, alpha, 1); + for (bigint j=1; j<=natoms; j++){ + local_jdx = atom->map(j); + for (int beta=0; beta<3; beta++){ + displace_atom(local_jdx, beta, 1); + update_force(); + for (bigint k=1; k<=natoms; k++){ + local_kdx = atom->map(k); + for (int gamma=0; gamma<3; gamma++){ + if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 + && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 + && local_kdx < nlocal) { + //first_derv[k*3+gamma] = f[k][gamma]; + } } } - } - displace_atom(local_idx,alpha,-2); - for (int j=1; j<=natoms; j++){ - local_jdx = atom->map(j); - if (local_jdx >= 0 && mask[local_jdx] && groupbit){ - for (int beta=0; beta<3; beta++){ - + displace_atom(local_jdx, beta, -2); + update_force(); + for (bigint k=1; k<=natoms; k++){ + local_kdx = atom->map(k); + for (int gamma=0; gamma<3; gamma++){ + if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 + && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 + && local_kdx < nlocal) { + } } } + displace_atom(local_jdx, beta, 1); } - displace_atom(local_idx,alpha,1); } + displace_atom(local_idx,alpha,-2); + for (bigint j=1; j<=natoms; j++){ + local_jdx = atom->map(j); + for (int beta=0; beta<3; beta++){ + displace_atom(local_jdx, beta, 1); + update_force(); + for (bigint k=1; k<=natoms; k++){ + local_kdx = atom->map(k); + for (int gamma=0; gamma<3; gamma++){ + if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 + && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 + && local_kdx < nlocal) { + } + } + } + displace_atom(local_jdx, beta, -2); + update_force(); + for (bigint k=1; k<=natoms; k++){ + local_kdx = atom->map(k); + for (int gamma=0; gamma<3; gamma++){ + if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 + && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 + && local_kdx < nlocal) { + } + } + } + displace_atom(local_jdx, beta, 1); + } + } + displace_atom(local_idx,alpha,1); } } @@ -397,34 +433,8 @@ void ThirdOrder::displace_atom(int local_idx, int direction, int magnitude) return negative gradient for nextra_global dof in fextra ------------------------------------------------------------------------- */ -void ThirdOrder::energy_force(int resetflag) +void ThirdOrder::update_force() { - // check for reneighboring - // always communicate since atoms move - int nflag = neighbor->decide(); - - if (nflag == 0) { - timer->stamp(); - comm->forward_comm(); - timer->stamp(Timer::COMM); - } else { - if (triclinic) domain->x2lamda(atom->nlocal); - domain->pbc(); - if (domain->box_change) { - domain->reset_box(); - comm->setup(); - if (neighbor->style) neighbor->setup_bins(); - } - timer->stamp(); - - comm->borders(); - if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); - timer->stamp(Timer::COMM); - - neighbor->build(1); - timer->stamp(Timer::NEIGH); - } - force_clear(); timer->stamp(); @@ -527,3 +537,68 @@ void ThirdOrder::convert_units(const char *style) } else error->all(FLERR,"Units Type Conversion Not Found"); } + +/* ---------------------------------------------------------------------- */ + +void ThirdOrder::create_groupmap() +{ + //Create a group map which maps atom order onto group + + int local_idx; // local index + int gid = 0; //group index + int nlocal = atom->nlocal; + int *mask = atom->mask; + bigint natoms = atom->natoms; + int *recv = new int[comm->nprocs]; + int *displs = new int[comm->nprocs]; + int *temp_groupmap = new int[natoms]; + + //find number of local atoms in the group (final_gid) + for (int i=1; i<=natoms; i++){ + local_idx = atom->map(i); + if ((local_idx >= 0) && (local_idx < nlocal) && mask[local_idx] & groupbit) + gid += 1; // gid at the end of loop is final_Gid + } + //create an array of length final_gid + int *sub_groupmap = new int[gid]; + + gid = 0; + //create a map between global atom id and group atom id for each proc + for (int i=1; i<=natoms; i++){ + local_idx = atom->map(i); + if ((local_idx >= 0) && (local_idx < nlocal) && mask[local_idx] & groupbit){ + sub_groupmap[gid] = i; + gid += 1; + } + } + + //populate arrays for Allgatherv + for (int i=0; inprocs; i++){ + recv[i] = 0; + } + recv[comm->me] = gid; + MPI_Allreduce(recv,displs,4,MPI_INT,MPI_SUM,world); + for (int i=0; inprocs; i++){ + recv[i]=displs[i]; + if (i>0) displs[i] = displs[i-1]+recv[i-1]; + else displs[i] = 0; + } + + //combine subgroup maps into total temporary groupmap + MPI_Allgatherv(sub_groupmap,gid,MPI_INT,temp_groupmap,recv,displs,MPI_INT,world); + std::sort(temp_groupmap,temp_groupmap+gcount); + + //populate member groupmap based on temp groupmap + for (int i=0; i Date: Wed, 6 Feb 2019 12:05:41 -0800 Subject: [PATCH 053/143] third order tensor calculator --- src/USER-PHONON/dynamical_matrix.cpp | 14 ++- src/USER-PHONON/third_order.cpp | 167 ++++++++++----------------- src/USER-PHONON/third_order.h | 2 + 3 files changed, 70 insertions(+), 113 deletions(-) diff --git a/src/USER-PHONON/dynamical_matrix.cpp b/src/USER-PHONON/dynamical_matrix.cpp index 854d46adca..da98a23a7d 100644 --- a/src/USER-PHONON/dynamical_matrix.cpp +++ b/src/USER-PHONON/dynamical_matrix.cpp @@ -81,7 +81,7 @@ void DynamicalMatrix::setup() //if all then skip communication groupmap population if (gcount == atom->natoms) - for (int i=0; inatoms; i++) + for (bigint i=0; inatoms; i++) groupmap[i] = i; else create_groupmap(); @@ -268,7 +268,7 @@ void DynamicalMatrix::calculateMatrix() if (local_idx >= 0 && local_jdx >= 0 && local_jdx < nlocal && gm[i-1] >= 0 && gm[j-1] >= 0){ for (int beta=0; beta<3; beta++){ - dynmat[alpha][(gm[j-1])*3+beta] = -f[local_jdx][beta]; + dynmat[alpha][(gm[j-1])*3+beta] -= f[local_jdx][beta]; } } } @@ -321,7 +321,7 @@ void DynamicalMatrix::writeMatrix(double **dynmat) if (!binaryflag && fp) { clearerr(fp); for (int i = 0; i < 3; i++) { - for (int j = 0; j < dynlen; j++) { + for (bigint j = 0; j < dynlen; j++) { if ((j+1)%3==0) fprintf(fp, "%4.8f\n", dynmat[i][j]); else fprintf(fp, "%4.8f ",dynmat[i][j]); } @@ -344,6 +344,8 @@ void DynamicalMatrix::writeMatrix(double **dynmat) void DynamicalMatrix::displace_atom(int local_idx, int direction, int magnitude) { + if (local_idx < 0) return; + double **x = atom->x; int *sametag = atom->sametag; int j = local_idx; @@ -496,7 +498,7 @@ void DynamicalMatrix::create_groupmap() int *temp_groupmap = new int[natoms]; //find number of local atoms in the group (final_gid) - for (int i=1; i<=natoms; i++){ + for (bigint i=1; i<=natoms; i++){ local_idx = atom->map(i); if ((local_idx >= 0) && (local_idx < nlocal) && mask[local_idx] & groupbit) gid += 1; // gid at the end of loop is final_Gid @@ -506,7 +508,7 @@ void DynamicalMatrix::create_groupmap() gid = 0; //create a map between global atom id and group atom id for each proc - for (int i=1; i<=natoms; i++){ + for (bigint i=1; i<=natoms; i++){ local_idx = atom->map(i); if ((local_idx >= 0) && (local_idx < nlocal) && mask[local_idx] & groupbit){ sub_groupmap[gid] = i; @@ -531,7 +533,7 @@ void DynamicalMatrix::create_groupmap() std::sort(temp_groupmap,temp_groupmap+gcount); //populate member groupmap based on temp groupmap - for (int i=0; inatoms) - for (int i=0; inatoms; i++) + for (bigint i=0; inatoms; i++) groupmap[i] = i; else create_groupmap(); @@ -111,6 +111,8 @@ void ThirdOrder::command(int narg, char **arg) igroup = group->find(arg[0]); if (igroup == -1) error->all(FLERR,"Could not find dynamical matrix group ID"); groupbit = group->bitmask[igroup]; + gcount = group->count(igroup); + dynlen = (gcount)*3; update->setupflag = 1; int style = -1; @@ -187,7 +189,7 @@ void ThirdOrder::options(int narg, char **arg) iarg += 2; } else error->all(FLERR,"Illegal dynamical_matrix command"); } - if (file_flag == 1) { + if (file_flag == 1 and me == 0) { openfile(filename); } } @@ -240,17 +242,20 @@ void ThirdOrder::calculateMatrix() int *gm = groupmap; double **f = atom->f; - update_force(); + double *dynmat = new double[3*dynlen]; + double *fdynmat = new double[3*dynlen]; + memset(&dynmat[0],0,dynlen*sizeof(double)); + memset(&fdynmat[0],0,dynlen*sizeof(double)); if (comm->me == 0 && screen) fprintf(screen,"Calculating Anharmonic Dynamical Matrix...\n"); for (bigint i=1; i<=natoms; i++){ local_idx = atom->map(i); for (bigint alpha=0; alpha<3; alpha++){ - displace_atom(local_idx, alpha, 1); for (bigint j=1; j<=natoms; j++){ local_jdx = atom->map(j); for (int beta=0; beta<3; beta++){ + displace_atom(local_idx, alpha, 1); displace_atom(local_jdx, beta, 1); update_force(); for (bigint k=1; k<=natoms; k++){ @@ -259,7 +264,7 @@ void ThirdOrder::calculateMatrix() if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 && local_kdx < nlocal) { - //first_derv[k*3+gamma] = f[k][gamma]; + dynmat[gm[k-1]*3+gamma] += f[local_kdx][gamma]; } } } @@ -271,16 +276,12 @@ void ThirdOrder::calculateMatrix() if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 && local_kdx < nlocal) { + dynmat[gm[k-1]*3+gamma] -= f[local_kdx][gamma]; } } } displace_atom(local_jdx, beta, 1); - } - } - displace_atom(local_idx,alpha,-2); - for (bigint j=1; j<=natoms; j++){ - local_jdx = atom->map(j); - for (int beta=0; beta<3; beta++){ + displace_atom(local_idx,alpha,-2); displace_atom(local_jdx, beta, 1); update_force(); for (bigint k=1; k<=natoms; k++){ @@ -289,6 +290,7 @@ void ThirdOrder::calculateMatrix() if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 && local_kdx < nlocal) { + dynmat[gm[k-1]*3+gamma] -= f[local_kdx][gamma]; } } } @@ -300,119 +302,70 @@ void ThirdOrder::calculateMatrix() if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 && local_kdx < nlocal) { + dynmat[gm[k-1]*3+gamma] += f[local_kdx][gamma]; + dynmat[gm[k-1]*3+gamma] /= -(4 * del * del); } } } displace_atom(local_jdx, beta, 1); + displace_atom(local_idx, alpha, 1); + MPI_Reduce(dynmat,fdynmat,3*dynlen,MPI_DOUBLE,MPI_SUM,0,world); + if (me == 0){ + writeMatrix(fdynmat, gm[i-1], alpha, gm[j-1], beta); + } + memset(&dynmat[0],0,dynlen*sizeof(double)); } } - displace_atom(local_idx,alpha,1); } } - //for (int proc1=0; proc1 < comm->nprocs; proc1++) { - // plocal1 = atom->nlocal; // 1 proc nlocal = 8 - // MPI_Bcast(&plocal1, 1, MPI_INT, proc1, MPI_COMM_WORLD); // plocal1 = 8 - // for (int i = 0; i < plocal1; i++) { - // if (me==proc1 & mask[i] & groupbit) - // group_flag_1 = 1; - // MPI_Bcast(&group_flag_1, 1, MPI_INT, proc1, MPI_COMM_WORLD); - // if (group_flag_1) { - // if (me == proc1) id1 = aid[i]; - // MPI_Bcast(&id1, 1, MPI_INT, proc1, MPI_COMM_WORLD); - // for (int alpha = 0; alpha < 3; alpha++) { - // for (int proc2 = 0; proc2 < comm->nprocs; proc2++) { - // plocal2 = atom->nlocal; - // MPI_Bcast(&plocal2, 1, MPI_INT, proc2, MPI_COMM_WORLD); - // for (int j = 0; j < plocal2; j++) { - // if (me==proc2 & mask[j] & groupbit) - // group_flag_2 = 1; - // MPI_Bcast(&group_flag_2, 1, MPI_INT, proc2, MPI_COMM_WORLD); - // if (mask[j] & groupbit) { - // if (me == proc2) id2 = aid[j]; - // MPI_Bcast(&id2, 1, MPI_INT, proc2, MPI_COMM_WORLD); - // for (int beta = 0; beta < 3; beta++) { -// - // if (me == proc1) x[i][alpha] += del; -// - // if (me == proc2) x[j][beta] += del; - // energy_force(0); -//// - // for (int gamma = 0; gamma < 3; gamma++) { - // for (int k = 0; k < nlocal; k++) - // if (mask[k] & groupbit) { - // first_derv[k*3+gamma] = f[k][gamma]; - // } - // } -// - // if (me == proc2) x[j][beta] -= 2 * del; - // energy_force(0); -//// - // for (int gamma = 0; gamma < 3; gamma++) { - // for (int k = 0; k < nlocal; k++) - // if (mask[k] & groupbit) { - // first_derv[k*3+gamma] -= f[k][gamma]; - // } - // } -// - // if (me == proc2) x[j][beta] += 2 * del; -// - // if (me == proc1) x[i][alpha] -= 2 * del; -// - // energy_force(0); -//// - // for (int gamma = 0; gamma < 3; gamma++) { - // for (int k = 0; k < nlocal; k++) - // if (mask[k] & groupbit) { - // first_derv[k*3+gamma] -= f[k][gamma]; - // } - // } -//// - // if (me == proc2) x[j][beta] -= 2 * del; - // energy_force(0); -//// - // for (int k = 0; k < nlocal; k++) - // if (mask[k] & groupbit) { - // for (int gamma = 0; gamma < 3; gamma++) { - // first_derv[k*3+gamma] += f[k][gamma]; - // first_derv[k*3+gamma] /= -4*del*del; - // } - // double norm = pow(first_derv[k*3], 2) - // + pow(first_derv[k*3+1], 2) - // + pow(first_derv[k+3+2], 2); - // if (fp && norm > 1.0e-16) - // fprintf(fp, - // "%d %d %d %d %d %7.8f %7.8f %7.8f\n", - // id1, alpha + 1, id2, beta + 1, aid[k], - // first_derv[k*3] * conversion, - // first_derv[k*3+1] * conversion, - // first_derv[k*3+2] * conversion); - // } -//// - // if (me == proc2) x[j][beta] += del; -// - // if (me == proc1) x[i][alpha] += del; - // } - // } - // } - // } -//// - // } - // } - // } - //} -// + delete [] dynmat; + delete [] fdynmat; if (screen && me ==0 ) fprintf(screen,"Finished Calculating Third Order Tensor\n"); } +/* ---------------------------------------------------------------------- + write dynamical matrix +------------------------------------------------------------------------- */ + +void ThirdOrder::writeMatrix(double *dynmat, int i, int a, int j, int b) +{ + if (me != 0) + return; + + if (!binaryflag && fp) { + clearerr(fp); + for (int k = 0; k < gcount; k++){ + double norm = pow(dynmat[k*3], 2) + + pow(dynmat[k*3+1], 2) + + pow(dynmat[k+3+2], 2); + if (norm > 1.0e-16) + fprintf(fp, + "%d %d %d %d %d %7.8f %7.8f %7.8f\n", + i+1, a + 1, j+1, b + 1, groupmap[k]+1, + dynmat[k*3] * conversion, + dynmat[k*3+1] * conversion, + dynmat[k*3+2] * conversion); + } + } + else if (binaryflag && fp){ + clearerr(fp); + fwrite(&dynmat[0], sizeof(double), dynlen, fp); + } + if (ferror(fp)) error->one(FLERR,"Error writing to file"); + +} + /* ---------------------------------------------------------------------- Displace atoms ---------------------------------------------------------------------- */ void ThirdOrder::displace_atom(int local_idx, int direction, int magnitude) { + if (local_idx < 0) return; + double **x = atom->x; int *sametag = atom->sametag; int j = local_idx; @@ -554,7 +507,7 @@ void ThirdOrder::create_groupmap() int *temp_groupmap = new int[natoms]; //find number of local atoms in the group (final_gid) - for (int i=1; i<=natoms; i++){ + for (bigint i=1; i<=natoms; i++){ local_idx = atom->map(i); if ((local_idx >= 0) && (local_idx < nlocal) && mask[local_idx] & groupbit) gid += 1; // gid at the end of loop is final_Gid @@ -564,7 +517,7 @@ void ThirdOrder::create_groupmap() gid = 0; //create a map between global atom id and group atom id for each proc - for (int i=1; i<=natoms; i++){ + for (bigint i=1; i<=natoms; i++){ local_idx = atom->map(i); if ((local_idx >= 0) && (local_idx < nlocal) && mask[local_idx] & groupbit){ sub_groupmap[gid] = i; @@ -589,7 +542,7 @@ void ThirdOrder::create_groupmap() std::sort(temp_groupmap,temp_groupmap+gcount); //populate member groupmap based on temp groupmap - for (int i=0; i Date: Wed, 6 Feb 2019 16:56:09 -0800 Subject: [PATCH 054/143] Add support for Sphinx+PDF+MathJax --- doc/.gitignore | 1 + doc/Makefile | 38 +++++++++++++++++++++++--------- doc/src/JPG/coul_soft.jpg | Bin 12676 -> 38635 bytes doc/src/JPG/lj_soft.jpg | Bin 12313 -> 35805 bytes doc/src/JPG/uef_frames.jpg | Bin 12271 -> 37518 bytes doc/utils/sphinx-config/conf.py | 6 +++-- 6 files changed, 33 insertions(+), 12 deletions(-) diff --git a/doc/.gitignore b/doc/.gitignore index 7d30949237..96112ac19c 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -1,3 +1,4 @@ +/latex /html /spelling /LAMMPS.epub diff --git a/doc/Makefile b/doc/Makefile index d117c2d98c..3bb4c44502 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -56,7 +56,7 @@ clean-all: clean rm -rf $(BUILDDIR)/* utils/txt2html/txt2html.exe clean: - rm -rf $(RSTDIR) html old epub + rm -rf $(RSTDIR) html old epub latex rm -rf spelling clean-spelling: @@ -115,21 +115,39 @@ mobi: epub @ebook-convert LAMMPS.epub LAMMPS.mobi @echo "Conversion finished. The MOBI manual file is created." -pdf: utils/txt2html/txt2html.exe +pdf: $(OBJECTS) $(ANCHORCHECK) + @(\ + . $(VENV)/bin/activate ;\ + cp -r src/* $(RSTDIR)/ ;\ + sphinx-build $(SPHINXEXTRA) -b latex -c utils/sphinx-config -d $(BUILDDIR)/doctrees $(RSTDIR) latex ;\ + echo "############################################" ;\ + doc_anchor_check src/*.txt ;\ + echo "############################################" ;\ + deactivate ;\ + ) + @cd latex && \ + sed -i '' 's/\\begin{equation}//g' LAMMPS.tex && \ + sed -i '' 's/\\end{equation}//g' LAMMPS.tex && \ + make && \ + mv LAMMPS.pdf ../Manual.pdf && \ + cd ../; @(\ - set -e; \ cd src/Developer; \ pdflatex developer; \ pdflatex developer; \ mv developer.pdf ../../Developer.pdf; \ - cd ..; \ - ../utils/txt2html/txt2html.exe -b *.txt; \ - htmldoc --batch lammps.book; \ - for s in `echo *.txt | sed -e 's/ \(pairs\|bonds\|angles\|dihedrals\|impropers\|commands_list\|fixes\|computes\).txt/ /g' | sed -e 's,\.txt,\.html,g'` ; \ - do grep -q ^$$s lammps.book || \ - echo WARNING: doc file $$s missing in src/lammps.book; done; \ - rm *.html; \ + cd ../../; \ ) + @rm -rf latex/_sources + @rm -rf latex/PDF + @rm -rf latex/USER + @cp -r src/PDF latex/PDF + @cp -r src/USER latex/USER + @rm -rf latex/PDF/.[sg]* + @rm -rf latex/USER/.[sg]* + @rm -rf latex/USER/*/.[sg]* + @rm -rf latex/USER/*/*.[sg]* + @echo "Build finished. Manual.pdf and Developer.pdf are in this directory." old: utils/txt2html/txt2html.exe @rm -rf old diff --git a/doc/src/JPG/coul_soft.jpg b/doc/src/JPG/coul_soft.jpg index d2cc4c0c9af061cd00618ce42821a845073fbe2c..618d23b3060498b188b937ece2682f5f5911137f 100644 GIT binary patch literal 38635 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 literal 12676 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 z z(2+)(=T>km&M1|{afq~0*tyGA7c7ZDaJHU`Z>VpbX18VbtjkHL&?k|eokhJSRq-ESC$9XfodRm>?I zr0$BG010Gzn2}d9(p~ly2~haK1fMsakWU>hj=e%!n}dK$GL}v)hhdda7``Bzd?2>) zNY1k*_3P2*_aNAPIfWjeQ^}roMjPt+F(tc1w=l|xGiTojcB?JZMm_5AOT;AHL2kHU#x>~T(O%l^mti_! z%6O|GccmR~HManj40s z`saXz)L4gYWI~e{H8(^1F41>=GFqgMDE$8*4Y(hBVTC++tbX2nL#?`>OKta$DJK!9*F(C}~PiA!gJf zn4Su?mj|jK7qFa!575b$Lh;`QQ6^9ccl;rfpsq$#(}mh^yKAnZ%&p#SdRz^Y%!g;- zG}I8KGR)n};kC1;4v6HEL+jfkm14X5tE(M3TytHxAlw2SmWfKi(H{*7S$e=u4Ylg0 z0y)fa9Z{a3I2 zTVreiZ0=cZ%PDV@-w|ffw2Y@LO0>+b^r*#K!kWubAc;yd9OPj2!R3B7BZJ1_#>Nap@Ea(pgg!CbMN^5afV;({?X)9NPhf50FfL z+)hd}#SddJv;>r5DRh`0h~Vo1&M5Z) z8QJ-tNP@Y|W^7eO^1s{7_S|0@V6u?UgVn#sJ}Lmg1C=&s#&jNuJvMW4vJci=qXs<` zU#CFT@*sRnaeh`7%w4TxPRISTQaEbysWWR9eQMd%M56ZmH;{BIF?kaTiCX9BHUiHG zB|jH<+1N+ozv2N9b8wMY=Qqn1r<7pjxjsAHE^=!?0s*i%@i7chQE^%X`iV}#6qf9`r-PZ#E?!JF;?fZ$$^;@qwarflA zp({CNx2~;?W2B22UD4M-5<=QrfZmrLeq7HIrXB~TEEBfyEmma;zg{~=JD!3Ke%dJ7 zXcoy$CqH7wj@Ea8!}$MXmVf65p-ZaOD#3?i?^V)Wx+v+GOEk9UJnM5PgK&M3EtDs9 zXFpGzDVHe?TX%Vp$XXUuTubMf%T)Xnc!_xngjKF^<||+ZhaG%y4f!0qMRRL)&K1nG zY!2vHw0l6M14}Nr7uIkIsF#2{FVe6O0()gLkr6obag(z@u-jG~e z%80hM5l?Jsdr6gR8wZq2HU|GOFOB^iHM4JZdb|~4i2+1i1Oz(BRXn}m@Cfwa#_>V} zu&;>v*%W{W?_lvrm?6?F;ITwg23Mo!0<1&mPBblP&>QT&Vy0^bTAan0=VXw+5;A*S ZBx`pPu}5Rslm;g)|MLG7q=C0n{|jy)j^O|R diff --git a/doc/src/JPG/lj_soft.jpg b/doc/src/JPG/lj_soft.jpg index 47c6a04b9183d3af54795000ccde6732c6f075d6..98404f857d351a86433f2a20ebcbb0eeeea43748 100644 GIT binary patch literal 35805 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

&#tUwf{xCOt!Qe?M#i0)8bmwlkmZ?smdA%y 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 a^({P#@!7KBe}Xgr#jE`9F?ZYd@&5~Z%L_gL literal 12313 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

S5OqUqwpi^IIVL}t1h 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 diff --git a/doc/utils/sphinx-config/conf.py b/doc/utils/sphinx-config/conf.py index 3056687ff8..736aac3eb9 100644 --- a/doc/utils/sphinx-config/conf.py +++ b/doc/utils/sphinx-config/conf.py @@ -211,7 +211,9 @@ latex_elements = { #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. -#'preamble': '', +'preamble': r''' +\setcounter{tocdepth}{2} +''' } # Grouping the document tree into LaTeX files. List of tuples @@ -229,7 +231,7 @@ latex_documents = [ # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False - +latex_toplevel_sectioning = 'part' # If true, show page references after internal links. #latex_show_pagerefs = False From 7c1fb847f4a006a8713e48939910a368f82819b8 Mon Sep 17 00:00:00 2001 From: efetis Date: Wed, 6 Feb 2019 17:32:47 -0800 Subject: [PATCH 055/143] Slight tweak to sed in doc/Makefile --- doc/Makefile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/Makefile b/doc/Makefile index 3bb4c44502..a38186666a 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -126,8 +126,13 @@ pdf: $(OBJECTS) $(ANCHORCHECK) deactivate ;\ ) @cd latex && \ - sed -i '' 's/\\begin{equation}//g' LAMMPS.tex && \ - sed -i '' 's/\\end{equation}//g' LAMMPS.tex && \ + sed 's/latexmk -pdf -dvi- -ps-/pdflatex/g' Makefile > temp && \ + mv temp Makefile && \ + sed 's/\\begin{equation}//g' LAMMPS.tex > tmp.tex && \ + mv tmp.tex LAMMPS.tex && \ + sed 's/\\end{equation}//g' LAMMPS.tex > tmp.tex && \ + mv tmp.tex LAMMPS.tex && \ + make && \ make && \ mv LAMMPS.pdf ../Manual.pdf && \ cd ../; From 927dc262b21f048576fe5de7ea1c1214c3654f4d Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 6 Feb 2019 23:41:45 -0600 Subject: [PATCH 056/143] Update CMake & Install.py for KIM API v2 --- cmake/CMakeLists.txt | 4 ++-- lib/kim/Install.py | 10 +++------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index ae2510c68b..ffef5d07c5 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -663,8 +663,8 @@ if(PKG_KIM) enable_language(Fortran) include(ExternalProject) ExternalProject_Add(kim_build - URL https://s3.openkim.org/kim-api/kim-api-v2-2.0.0-beta.3.txz - URL_MD5 67c103a00e84865848d004837262c76e + URL https://s3.openkim.org/kim-api/kim-api-v2-2.0.0.txz + URL_MD5 1ff8f563ad5991f7a2a25b35a13d7308 BINARY_DIR build CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} diff --git a/lib/kim/Install.py b/lib/kim/Install.py index 544fe2b65d..e2465eec85 100644 --- a/lib/kim/Install.py +++ b/lib/kim/Install.py @@ -18,7 +18,7 @@ parser = ArgumentParser(prog='Install.py', # settings thisdir = fullpath('.') -version = "kim-api-v2-2.0.0-beta.3" +version = "kim-api-v2-2.0.0" # help message @@ -35,19 +35,15 @@ Syntax from lib dir: python Install.py -b -v version -a kim-name Examples: make lib-kim args="-b" # install KIM API lib with only example models -make lib-kim args="-b -a Glue_Ercolessi_Adams_Al__MO_324507536345_001" # Ditto plus one model +make lib-kim args="-b -a EAM_ErcolessiAdams_1994_Al__MO_324507536345_002" # Ditto plus one model make lib-kim args="-b -a everything" # install KIM API lib with all models -make lib-kim args="-n -a EAM_Dynamo_Ackland_W__MO_141627196590_002" # only add one model or model driver +make lib-kim args="-n -a EAM_Dynamo_Ackland_2003_W__MO_141627196590_005" # only add one model or model driver See the list of KIM model drivers here: https://openkim.org/kim-items/model-drivers/alphabetical See the list of all KIM models here: https://openkim.org/kim-items/models/by-model-drivers - -See the list of example KIM models included by default here: -https://openkim.org/kim-api -in the "What is in the KIM API source package?" section """ pgroup = parser.add_mutually_exclusive_group() From 6068a719ff4d6641a5f703594da83b7d8fadcf65 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 6 Feb 2019 23:53:47 -0600 Subject: [PATCH 057/143] Updated example/kim/log.* files --- ... log.06Feb2019.in.kim.lj.lmp.newton-off.1} | 24 +++++++++---------- ... log.06Feb2019.in.kim.lj.lmp.newton-off.4} | 22 ++++++++--------- ...> log.06Feb2019.in.kim.lj.lmp.newton-on.1} | 20 ++++++++-------- ...> log.06Feb2019.in.kim.lj.lmp.newton-on.4} | 22 ++++++++--------- ...1 => log.06Feb2019.in.kim.lj.newton-off.1} | 22 ++++++++--------- ...4 => log.06Feb2019.in.kim.lj.newton-off.4} | 22 ++++++++--------- ....1 => log.06Feb2019.in.kim.lj.newton-on.1} | 22 ++++++++--------- ....4 => log.06Feb2019.in.kim.lj.newton-on.4} | 22 ++++++++--------- 8 files changed, 88 insertions(+), 88 deletions(-) rename examples/kim/{log.12Dec2018.in.kim.lj.lmp.newton-off.1 => log.06Feb2019.in.kim.lj.lmp.newton-off.1} (71%) rename examples/kim/{log.12Dec2018.in.kim.lj.lmp.newton-off.4 => log.06Feb2019.in.kim.lj.lmp.newton-off.4} (71%) rename examples/kim/{log.12Dec2018.in.kim.lj.lmp.newton-on.1 => log.06Feb2019.in.kim.lj.lmp.newton-on.1} (74%) rename examples/kim/{log.12Dec2018.in.kim.lj.lmp.newton-on.4 => log.06Feb2019.in.kim.lj.lmp.newton-on.4} (71%) rename examples/kim/{log.12Dec2018.in.kim.lj.newton-off.1 => log.06Feb2019.in.kim.lj.newton-off.1} (75%) rename examples/kim/{log.12Dec2018.in.kim.lj.newton-off.4 => log.06Feb2019.in.kim.lj.newton-off.4} (80%) rename examples/kim/{log.12Dec2018.in.kim.lj.newton-on.1 => log.06Feb2019.in.kim.lj.newton-on.1} (75%) rename examples/kim/{log.12Dec2018.in.kim.lj.newton-on.4 => log.06Feb2019.in.kim.lj.newton-on.4} (80%) diff --git a/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-off.1 b/examples/kim/log.06Feb2019.in.kim.lj.lmp.newton-off.1 similarity index 71% rename from examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-off.1 rename to examples/kim/log.06Feb2019.in.kim.lj.lmp.newton-off.1 index 0b67cc1ccb..5925fd750d 100644 --- a/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-off.1 +++ b/examples/kim/log.06Feb2019.in.kim.lj.lmp.newton-off.1 @@ -1,11 +1,11 @@ -LAMMPS (24 Oct 2018) +LAMMPS (1 Feb 2019) OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 1 by 1 MPI processor grid Created 32000 atoms - Time spent = 0.00307703 secs + Time spent = 0.004499 secs Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -26,20 +26,20 @@ Per MPI rank memory allocation (min/avg/max) = 20.37 | 20.37 | 20.37 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 2.58348 on 1 procs for 100 steps with 32000 atoms +Loop time of 2.92885 on 1 procs for 100 steps with 32000 atoms -Performance: 3.344 ns/day, 7.176 hours/ns, 38.707 timesteps/s -99.9% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 2.950 ns/day, 8.136 hours/ns, 34.143 timesteps/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 | 2.2621 | 2.2621 | 2.2621 | 0.0 | 87.56 -Neigh | 0.28294 | 0.28294 | 0.28294 | 0.0 | 10.95 -Comm | 0.0057185 | 0.0057185 | 0.0057185 | 0.0 | 0.22 -Output | 0.00010109 | 0.00010109 | 0.00010109 | 0.0 | 0.00 -Modify | 0.023396 | 0.023396 | 0.023396 | 0.0 | 0.91 -Other | | 0.009175 | | | 0.36 +Pair | 2.5638 | 2.5638 | 2.5638 | 0.0 | 87.54 +Neigh | 0.31935 | 0.31935 | 0.31935 | 0.0 | 10.90 +Comm | 0.006833 | 0.006833 | 0.006833 | 0.0 | 0.23 +Output | 0.000107 | 0.000107 | 0.000107 | 0.0 | 0.00 +Modify | 0.027806 | 0.027806 | 0.027806 | 0.0 | 0.95 +Other | | 0.01091 | | | 0.37 Nlocal: 32000 ave 32000 max 32000 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -52,4 +52,4 @@ Total # of neighbors = 2370499 Ave neighs/atom = 74.0781 Neighbor list builds = 3 Dangerous builds = 0 -Total wall time: 0:00:02 +Total wall time: 0:00:03 diff --git a/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-off.4 b/examples/kim/log.06Feb2019.in.kim.lj.lmp.newton-off.4 similarity index 71% rename from examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-off.4 rename to examples/kim/log.06Feb2019.in.kim.lj.lmp.newton-off.4 index e2ee8e39bb..c1ca108c7b 100644 --- a/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-off.4 +++ b/examples/kim/log.06Feb2019.in.kim.lj.lmp.newton-off.4 @@ -1,11 +1,11 @@ -LAMMPS (24 Oct 2018) +LAMMPS (1 Feb 2019) OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 2 by 2 MPI processor grid Created 32000 atoms - Time spent = 0.000934124 secs + Time spent = 0.001039 secs Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -26,20 +26,20 @@ Per MPI rank memory allocation (min/avg/max) = 8.013 | 8.013 | 8.013 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 0.76167 on 4 procs for 100 steps with 32000 atoms +Loop time of 0.778581 on 4 procs for 100 steps with 32000 atoms -Performance: 11.343 ns/day, 2.116 hours/ns, 131.290 timesteps/s -99.7% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 11.097 ns/day, 2.163 hours/ns, 128.439 timesteps/s +99.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.65549 | 0.6589 | 0.66089 | 0.3 | 86.51 -Neigh | 0.075691 | 0.075959 | 0.07641 | 0.1 | 9.97 -Comm | 0.0073049 | 0.007397 | 0.0074785 | 0.1 | 0.97 -Output | 5.6982e-05 | 0.00014746 | 0.00024986 | 0.0 | 0.02 -Modify | 0.0068338 | 0.0068703 | 0.0068941 | 0.0 | 0.90 -Other | | 0.0124 | | | 1.63 +Pair | 0.65171 | 0.65891 | 0.67656 | 1.3 | 84.63 +Neigh | 0.07924 | 0.079548 | 0.07997 | 0.1 | 10.22 +Comm | 0.006755 | 0.0069015 | 0.007072 | 0.2 | 0.89 +Output | 4.6e-05 | 9.725e-05 | 0.000203 | 0.0 | 0.01 +Modify | 0.006841 | 0.006941 | 0.007015 | 0.1 | 0.89 +Other | | 0.02618 | | | 3.36 Nlocal: 8000 ave 8018 max 7967 min Histogram: 1 0 0 0 0 0 1 0 0 2 diff --git a/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-on.1 b/examples/kim/log.06Feb2019.in.kim.lj.lmp.newton-on.1 similarity index 74% rename from examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-on.1 rename to examples/kim/log.06Feb2019.in.kim.lj.lmp.newton-on.1 index 91731438de..53555743d7 100644 --- a/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-on.1 +++ b/examples/kim/log.06Feb2019.in.kim.lj.lmp.newton-on.1 @@ -1,11 +1,11 @@ -LAMMPS (24 Oct 2018) +LAMMPS (1 Feb 2019) OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 1 by 1 MPI processor grid Created 32000 atoms - Time spent = 0.00311494 secs + Time spent = 0.003479 secs Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -26,20 +26,20 @@ Per MPI rank memory allocation (min/avg/max) = 19.23 | 19.23 | 19.23 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 2.22646 on 1 procs for 100 steps with 32000 atoms +Loop time of 2.17978 on 1 procs for 100 steps with 32000 atoms -Performance: 3.881 ns/day, 6.185 hours/ns, 44.914 timesteps/s +Performance: 3.964 ns/day, 6.055 hours/ns, 45.876 timesteps/s 99.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 | 2.0344 | 2.0344 | 2.0344 | 0.0 | 91.38 -Neigh | 0.14575 | 0.14575 | 0.14575 | 0.0 | 6.55 -Comm | 0.01127 | 0.01127 | 0.01127 | 0.0 | 0.51 -Output | 0.000103 | 0.000103 | 0.000103 | 0.0 | 0.00 -Modify | 0.024057 | 0.024057 | 0.024057 | 0.0 | 1.08 -Other | | 0.01083 | | | 0.49 +Pair | 1.9892 | 1.9892 | 1.9892 | 0.0 | 91.26 +Neigh | 0.14506 | 0.14506 | 0.14506 | 0.0 | 6.65 +Comm | 0.011049 | 0.011049 | 0.011049 | 0.0 | 0.51 +Output | 9.1e-05 | 9.1e-05 | 9.1e-05 | 0.0 | 0.00 +Modify | 0.02347 | 0.02347 | 0.02347 | 0.0 | 1.08 +Other | | 0.01094 | | | 0.50 Nlocal: 32000 ave 32000 max 32000 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-on.4 b/examples/kim/log.06Feb2019.in.kim.lj.lmp.newton-on.4 similarity index 71% rename from examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-on.4 rename to examples/kim/log.06Feb2019.in.kim.lj.lmp.newton-on.4 index 92eb8ba8bc..f0fdf66193 100644 --- a/examples/kim/log.12Dec2018.in.kim.lj.lmp.newton-on.4 +++ b/examples/kim/log.06Feb2019.in.kim.lj.lmp.newton-on.4 @@ -1,11 +1,11 @@ -LAMMPS (24 Oct 2018) +LAMMPS (1 Feb 2019) OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 2 by 2 MPI processor grid Created 32000 atoms - Time spent = 0.000946045 secs + Time spent = 0.000919 secs Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -26,20 +26,20 @@ Per MPI rank memory allocation (min/avg/max) = 7.632 | 7.632 | 7.632 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 0.639437 on 4 procs for 100 steps with 32000 atoms +Loop time of 0.63515 on 4 procs for 100 steps with 32000 atoms -Performance: 13.512 ns/day, 1.776 hours/ns, 156.388 timesteps/s -99.7% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 13.603 ns/day, 1.764 hours/ns, 157.443 timesteps/s +99.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.55655 | 0.55752 | 0.55833 | 0.1 | 87.19 -Neigh | 0.040557 | 0.040752 | 0.041148 | 0.1 | 6.37 -Comm | 0.024693 | 0.025886 | 0.026853 | 0.5 | 4.05 -Output | 4.6015e-05 | 5.1558e-05 | 6.0081e-05 | 0.0 | 0.01 -Modify | 0.0088108 | 0.0089263 | 0.0090554 | 0.1 | 1.40 -Other | | 0.006306 | | | 0.99 +Pair | 0.55365 | 0.5566 | 0.55868 | 0.2 | 87.63 +Neigh | 0.041495 | 0.0418 | 0.04211 | 0.1 | 6.58 +Comm | 0.019086 | 0.021075 | 0.023898 | 1.2 | 3.32 +Output | 4.4e-05 | 5.025e-05 | 6e-05 | 0.0 | 0.01 +Modify | 0.009315 | 0.0093595 | 0.009422 | 0.0 | 1.47 +Other | | 0.006263 | | | 0.99 Nlocal: 8000 ave 8018 max 7967 min Histogram: 1 0 0 0 0 0 1 0 0 2 diff --git a/examples/kim/log.12Dec2018.in.kim.lj.newton-off.1 b/examples/kim/log.06Feb2019.in.kim.lj.newton-off.1 similarity index 75% rename from examples/kim/log.12Dec2018.in.kim.lj.newton-off.1 rename to examples/kim/log.06Feb2019.in.kim.lj.newton-off.1 index c25368b917..0ab258fe0d 100644 --- a/examples/kim/log.12Dec2018.in.kim.lj.newton-off.1 +++ b/examples/kim/log.06Feb2019.in.kim.lj.newton-off.1 @@ -1,11 +1,11 @@ -LAMMPS (24 Oct 2018) +LAMMPS (1 Feb 2019) OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 1 by 1 MPI processor grid Created 32000 atoms - Time spent = 0.00450015 secs + Time spent = 0.003446 secs WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:1102) Neighbor list info ... @@ -28,20 +28,20 @@ Per MPI rank memory allocation (min/avg/max) = 28.51 | 28.51 | 28.51 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 3.35585 on 1 procs for 100 steps with 32000 atoms +Loop time of 3.01669 on 1 procs for 100 steps with 32000 atoms -Performance: 2.575 ns/day, 9.322 hours/ns, 29.799 timesteps/s -99.2% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 2.864 ns/day, 8.380 hours/ns, 33.149 timesteps/s +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.9239 | 2.9239 | 2.9239 | 0.0 | 87.13 -Neigh | 0.38492 | 0.38492 | 0.38492 | 0.0 | 11.47 -Comm | 0.0072038 | 0.0072038 | 0.0072038 | 0.0 | 0.21 -Output | 0.00010204 | 0.00010204 | 0.00010204 | 0.0 | 0.00 -Modify | 0.028316 | 0.028316 | 0.028316 | 0.0 | 0.84 -Other | | 0.01146 | | | 0.34 +Pair | 2.6562 | 2.6562 | 2.6562 | 0.0 | 88.05 +Neigh | 0.31903 | 0.31903 | 0.31903 | 0.0 | 10.58 +Comm | 0.00634 | 0.00634 | 0.00634 | 0.0 | 0.21 +Output | 9.1e-05 | 9.1e-05 | 9.1e-05 | 0.0 | 0.00 +Modify | 0.024723 | 0.024723 | 0.024723 | 0.0 | 0.82 +Other | | 0.01032 | | | 0.34 Nlocal: 32000 ave 32000 max 32000 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/kim/log.12Dec2018.in.kim.lj.newton-off.4 b/examples/kim/log.06Feb2019.in.kim.lj.newton-off.4 similarity index 80% rename from examples/kim/log.12Dec2018.in.kim.lj.newton-off.4 rename to examples/kim/log.06Feb2019.in.kim.lj.newton-off.4 index c8c52d6e09..c17ea6afb7 100644 --- a/examples/kim/log.12Dec2018.in.kim.lj.newton-off.4 +++ b/examples/kim/log.06Feb2019.in.kim.lj.newton-off.4 @@ -1,11 +1,11 @@ -LAMMPS (24 Oct 2018) +LAMMPS (1 Feb 2019) OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 2 by 2 MPI processor grid Created 32000 atoms - Time spent = 0.00106215 secs + Time spent = 0.000921 secs WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:1102) WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) @@ -34,20 +34,20 @@ Per MPI rank memory allocation (min/avg/max) = 10.05 | 10.05 | 10.05 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 0.930494 on 4 procs for 100 steps with 32000 atoms +Loop time of 0.890192 on 4 procs for 100 steps with 32000 atoms -Performance: 9.285 ns/day, 2.585 hours/ns, 107.470 timesteps/s -99.5% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 9.706 ns/day, 2.473 hours/ns, 112.335 timesteps/s +99.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.80926 | 0.81195 | 0.81464 | 0.3 | 87.26 -Neigh | 0.089949 | 0.092688 | 0.095287 | 0.8 | 9.96 -Comm | 0.007302 | 0.0074284 | 0.0075471 | 0.1 | 0.80 -Output | 0.00012898 | 0.00014371 | 0.00016093 | 0.0 | 0.02 -Modify | 0.011517 | 0.011761 | 0.011959 | 0.2 | 1.26 -Other | | 0.006522 | | | 0.70 +Pair | 0.77867 | 0.77906 | 0.7794 | 0.0 | 87.52 +Neigh | 0.087831 | 0.088176 | 0.088805 | 0.1 | 9.91 +Comm | 0.006358 | 0.0065898 | 0.006815 | 0.3 | 0.74 +Output | 4.9e-05 | 5.975e-05 | 6.8e-05 | 0.0 | 0.01 +Modify | 0.010265 | 0.010429 | 0.010678 | 0.2 | 1.17 +Other | | 0.005874 | | | 0.66 Nlocal: 8000 ave 8018 max 7967 min Histogram: 1 0 0 0 0 0 1 0 0 2 diff --git a/examples/kim/log.12Dec2018.in.kim.lj.newton-on.1 b/examples/kim/log.06Feb2019.in.kim.lj.newton-on.1 similarity index 75% rename from examples/kim/log.12Dec2018.in.kim.lj.newton-on.1 rename to examples/kim/log.06Feb2019.in.kim.lj.newton-on.1 index eec26307ac..59d018e12a 100644 --- a/examples/kim/log.12Dec2018.in.kim.lj.newton-on.1 +++ b/examples/kim/log.06Feb2019.in.kim.lj.newton-on.1 @@ -1,11 +1,11 @@ -LAMMPS (24 Oct 2018) +LAMMPS (1 Feb 2019) OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 1 by 1 MPI processor grid Created 32000 atoms - Time spent = 0.0030508 secs + Time spent = 0.003089 secs WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:1102) Neighbor list info ... @@ -28,20 +28,20 @@ Per MPI rank memory allocation (min/avg/max) = 28.12 | 28.12 | 28.12 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 2.97001 on 1 procs for 100 steps with 32000 atoms +Loop time of 3.05849 on 1 procs for 100 steps with 32000 atoms -Performance: 2.909 ns/day, 8.250 hours/ns, 33.670 timesteps/s -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 2.825 ns/day, 8.496 hours/ns, 32.696 timesteps/s +99.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 | 2.5982 | 2.5982 | 2.5982 | 0.0 | 87.48 -Neigh | 0.32516 | 0.32516 | 0.32516 | 0.0 | 10.95 -Comm | 0.012059 | 0.012059 | 0.012059 | 0.0 | 0.41 -Output | 0.000103 | 0.000103 | 0.000103 | 0.0 | 0.00 -Modify | 0.023878 | 0.023878 | 0.023878 | 0.0 | 0.80 -Other | | 0.01058 | | | 0.36 +Pair | 2.6786 | 2.6786 | 2.6786 | 0.0 | 87.58 +Neigh | 0.33105 | 0.33105 | 0.33105 | 0.0 | 10.82 +Comm | 0.012602 | 0.012602 | 0.012602 | 0.0 | 0.41 +Output | 9.5e-05 | 9.5e-05 | 9.5e-05 | 0.0 | 0.00 +Modify | 0.024858 | 0.024858 | 0.024858 | 0.0 | 0.81 +Other | | 0.01132 | | | 0.37 Nlocal: 32000 ave 32000 max 32000 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/kim/log.12Dec2018.in.kim.lj.newton-on.4 b/examples/kim/log.06Feb2019.in.kim.lj.newton-on.4 similarity index 80% rename from examples/kim/log.12Dec2018.in.kim.lj.newton-on.4 rename to examples/kim/log.06Feb2019.in.kim.lj.newton-on.4 index 6c0da32ba4..da8c9f0faa 100644 --- a/examples/kim/log.12Dec2018.in.kim.lj.newton-on.4 +++ b/examples/kim/log.06Feb2019.in.kim.lj.newton-on.4 @@ -1,11 +1,11 @@ -LAMMPS (24 Oct 2018) +LAMMPS (1 Feb 2019) OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task Lattice spacing in x,y,z = 4.43 4.43 4.43 Created orthogonal box = (0 0 0) to (88.6 88.6 88.6) 1 by 2 by 2 MPI processor grid Created 32000 atoms - Time spent = 0.000946999 secs + Time spent = 0.000893 secs WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) WARNING: KIM Model does not provide `partialParticleVirial'; virial per atom will be zero (src/KIM/pair_kim.cpp:1102) WARNING: KIM Model does not provide `partialParticleEnergy'; energy per atom will be zero (src/KIM/pair_kim.cpp:1097) @@ -34,20 +34,20 @@ Per MPI rank memory allocation (min/avg/max) = 9.789 | 9.789 | 9.789 Mbytes Step Temp E_pair E_mol TotEng Press 0 200 6290.8194 0 7118.0584 129712.25 100 95.179725 6718.814 0 7112.496 133346.59 -Loop time of 0.891065 on 4 procs for 100 steps with 32000 atoms +Loop time of 0.903182 on 4 procs for 100 steps with 32000 atoms -Performance: 9.696 ns/day, 2.475 hours/ns, 112.225 timesteps/s -99.8% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 9.566 ns/day, 2.509 hours/ns, 110.720 timesteps/s +99.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.75777 | 0.75864 | 0.75996 | 0.1 | 85.14 -Neigh | 0.088332 | 0.088883 | 0.089737 | 0.2 | 9.97 -Comm | 0.027187 | 0.02829 | 0.029602 | 0.6 | 3.17 -Output | 4.9114e-05 | 5.4777e-05 | 6.6042e-05 | 0.0 | 0.01 -Modify | 0.0088358 | 0.0089488 | 0.0091376 | 0.1 | 1.00 -Other | | 0.00625 | | | 0.70 +Pair | 0.76173 | 0.76349 | 0.76597 | 0.2 | 84.53 +Neigh | 0.088773 | 0.088938 | 0.089074 | 0.0 | 9.85 +Comm | 0.032018 | 0.03452 | 0.03638 | 0.9 | 3.82 +Output | 4e-05 | 4.425e-05 | 5.2e-05 | 0.0 | 0.00 +Modify | 0.009278 | 0.0093917 | 0.009528 | 0.1 | 1.04 +Other | | 0.006797 | | | 0.75 Nlocal: 8000 ave 8018 max 7967 min Histogram: 1 0 0 0 0 0 1 0 0 2 From 622eb4790220dfca53e40edf537ee4782cd94db6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Feb 2019 01:16:48 -0500 Subject: [PATCH 058/143] some small tweaks, fixes for typos, and url corrections for the manual --- doc/.gitignore | 1 + doc/src/Install_windows.txt | 2 +- doc/src/Manual.txt | 10 ++-------- doc/utils/sphinx-config/conf.py | 2 +- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/doc/.gitignore b/doc/.gitignore index 96112ac19c..920c5b9830 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -1,5 +1,6 @@ /latex /html +/latex /spelling /LAMMPS.epub /LAMMPS.mobi diff --git a/doc/src/Install_windows.txt b/doc/src/Install_windows.txt index 78de4f09f7..7d5aab34f5 100644 --- a/doc/src/Install_windows.txt +++ b/doc/src/Install_windows.txt @@ -12,7 +12,7 @@ Download an executable for Windows :h3 Pre-compiled Windows installers which install LAMMPS executables on a Windows system can be downloaded from this site: -"http://rpm.lammps.org/windows.html"_http://rpm.lammps.org/windows.html +"http://packages.lammps.org/windows.html"_http://packages.lammps.org/windows.html Note that each installer package has a date in its name, which corresponds to the LAMMPS version of the same date. Installers for diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index b477ce9cf0..f5c6f914c7 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -37,27 +37,21 @@ LAMMPS is an open-source code, distributed freely under the terms of the GNU Public License (GPL). The "LAMMPS website"_lws has a variety of information about the code. -It includes links to an on-line version of this manual, a "mail +It includes links to an on-line version of this manual, a "mailing list"_http://lammps.sandia.gov/mail.html where users can post -questions, and a "GitHub site"https://github.com/lammps/lammps where +questions, and a "GitHub site"_https://github.com/lammps/lammps where all LAMMPS development is coordinated. :line -"PDF file"_Manual.pdf of the entire manual, generated by -"htmldoc"_http://freecode.com/projects/htmldoc - The content for this manual is part of the LAMMPS distribution. You can build a local copy of the Manual as HTML pages or a PDF file, by following the steps on the "Manual build"_Manual_build.html doc page. - There is also a "Developer.pdf"_Developer.pdf document which gives a brief description of the basic code structure of LAMMPS. :line -This manual is organized into the following sections. - Once you are familiar with LAMMPS, you may want to bookmark "this page"_Commands.html since it gives quick access to a doc page for every LAMMPS command. diff --git a/doc/utils/sphinx-config/conf.py b/doc/utils/sphinx-config/conf.py index 736aac3eb9..29de3af156 100644 --- a/doc/utils/sphinx-config/conf.py +++ b/doc/utils/sphinx-config/conf.py @@ -221,7 +221,7 @@ latex_elements = { # author, documentclass [howto, manual, or own class]). latex_documents = [ ('Manual', 'LAMMPS.tex', 'LAMMPS Documentation', - 'Steve Plimpton', 'manual'), + 'The LAMMPS Developers', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of From 0fade44b43f89d39448700f6150acc5c60a43ade Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Sat, 9 Feb 2019 08:45:03 +0100 Subject: [PATCH 059/143] Update install.py --- python/install.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/install.py b/python/install.py index 2cd6562557..5a97b6106d 100644 --- a/python/install.py +++ b/python/install.py @@ -22,7 +22,7 @@ else: pydir = "" # copy lammps.py to pydir if it exists # if pydir not specified, install in site-packages via distutils setup() -if sys.platform == 'darwin': +if 'liblammps.dylib' in os.listdir('../src/'): lib_ext = ".dylib" else: lib_ext = ".so" From 277f8356b1f34e3e449871c376706b2db1a724f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Sat, 9 Feb 2019 08:46:22 +0100 Subject: [PATCH 060/143] Update lammps.py --- python/lammps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/lammps.py b/python/lammps.py index 3d5fc7a6b2..c5c7dca33d 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -85,7 +85,7 @@ class lammps(object): # fall back to loading with a relative path, # typically requires LD_LIBRARY_PATH to be set appropriately - if sys.platform == 'darwin': + if 'liblammps.dylib' in os.listdir(modpath): lib_ext = ".dylib" else: lib_ext = ".so" From 4b8621e7ef9927058653d6f9cd48882a042c6563 Mon Sep 17 00:00:00 2001 From: casievers Date: Mon, 11 Feb 2019 19:46:22 -0800 Subject: [PATCH 061/143] Added additional tutorials for the dynamical matrix calculator --- .../dynamical_matrix_command/GaAs/GaAs.py | 39 +++++++++++++ .../dynamical_matrix_command/GaN/GaN.py | 39 +++++++++++++ .../dynamical_matrix_command/Quartz/quartz.py | 57 +++++++++++++++++++ .../{ => Silicon}/README.md | 4 +- .../{ => Silicon}/Si.opt.tersoff | 0 .../{ => Silicon}/ff-silicon.lmp | 0 .../{ => Silicon}/in.silicon | 0 .../lmp_bank/amorphous_silicon.lmp | 0 .../{ => Silicon}/lmp_bank/silicon_216.lmp | 0 .../{ => Silicon}/lmp_bank/silicon_512.lmp | 0 .../{ => Silicon}/lmp_bank/silicon_8.lmp | 0 .../{ => Silicon}/results/dynmat.dat | 0 .../{ => Silicon}/results/out.silicon | 0 .../{ => Silicon}/silicon_input_file.lmp | 0 .../{ => silicon}/Manual.md | 0 .../{ => silicon}/README.md | 4 +- .../{ => silicon}/Si.opt.tersoff | 0 .../{ => silicon}/combine.sh | 0 .../{ => silicon}/ff-silicon.lmp | 0 .../{ => silicon}/in.silicon | 0 .../{ => silicon}/lmp_bank/silicon_216.lmp | 0 .../{ => silicon}/lmp_bank/silicon_512.lmp | 0 .../{ => silicon}/lmp_bank/silicon_8.lmp | 0 .../{ => silicon}/results/out.silicon | 0 .../{ => silicon}/results/third_order | 0 .../{ => silicon}/silicon_input_file.lmp | 0 src/USER-PHONON/third_order.cpp | 13 ++--- 27 files changed, 144 insertions(+), 12 deletions(-) create mode 100644 examples/USER/phonon/dynamical_matrix_command/GaAs/GaAs.py create mode 100644 examples/USER/phonon/dynamical_matrix_command/GaN/GaN.py create mode 100644 examples/USER/phonon/dynamical_matrix_command/Quartz/quartz.py rename examples/USER/phonon/dynamical_matrix_command/{ => Silicon}/README.md (77%) rename examples/USER/phonon/dynamical_matrix_command/{ => Silicon}/Si.opt.tersoff (100%) rename examples/USER/phonon/dynamical_matrix_command/{ => Silicon}/ff-silicon.lmp (100%) rename examples/USER/phonon/dynamical_matrix_command/{ => Silicon}/in.silicon (100%) rename examples/USER/phonon/dynamical_matrix_command/{ => Silicon}/lmp_bank/amorphous_silicon.lmp (100%) rename examples/USER/phonon/dynamical_matrix_command/{ => Silicon}/lmp_bank/silicon_216.lmp (100%) rename examples/USER/phonon/dynamical_matrix_command/{ => Silicon}/lmp_bank/silicon_512.lmp (100%) rename examples/USER/phonon/dynamical_matrix_command/{ => Silicon}/lmp_bank/silicon_8.lmp (100%) rename examples/USER/phonon/dynamical_matrix_command/{ => Silicon}/results/dynmat.dat (100%) rename examples/USER/phonon/dynamical_matrix_command/{ => Silicon}/results/out.silicon (100%) rename examples/USER/phonon/dynamical_matrix_command/{ => Silicon}/silicon_input_file.lmp (100%) rename examples/USER/phonon/third_order_command/{ => silicon}/Manual.md (100%) rename examples/USER/phonon/third_order_command/{ => silicon}/README.md (82%) rename examples/USER/phonon/third_order_command/{ => silicon}/Si.opt.tersoff (100%) rename examples/USER/phonon/third_order_command/{ => silicon}/combine.sh (100%) rename examples/USER/phonon/third_order_command/{ => silicon}/ff-silicon.lmp (100%) rename examples/USER/phonon/third_order_command/{ => silicon}/in.silicon (100%) rename examples/USER/phonon/third_order_command/{ => silicon}/lmp_bank/silicon_216.lmp (100%) rename examples/USER/phonon/third_order_command/{ => silicon}/lmp_bank/silicon_512.lmp (100%) rename examples/USER/phonon/third_order_command/{ => silicon}/lmp_bank/silicon_8.lmp (100%) rename examples/USER/phonon/third_order_command/{ => silicon}/results/out.silicon (100%) rename examples/USER/phonon/third_order_command/{ => silicon}/results/third_order (100%) rename examples/USER/phonon/third_order_command/{ => silicon}/silicon_input_file.lmp (100%) diff --git a/examples/USER/phonon/dynamical_matrix_command/GaAs/GaAs.py b/examples/USER/phonon/dynamical_matrix_command/GaAs/GaAs.py new file mode 100644 index 0000000000..1e9d58a71b --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/GaAs/GaAs.py @@ -0,0 +1,39 @@ +from ase import Atoms, Atom +from ase.calculators.lammpslib import LAMMPSlib +import numpy as np +import matplotlib.pyplot as plt +from mpi4py import MPI + +comm = MPI.COMM_WORLD +rank = comm.Get_rank() + +GaAs = Atoms([Atom('Ga', (0.0, 0.0, 0.0)), + Atom('As', (1.413425, 1.413425, 1.413425))], + cell=[(0.0, 2.82685, 2.82685), (2.82685, 0.0, 2.82685), (2.82685, 2.82685, 0.0)], + pbc=True,) + +cmds = ["pair_style bop", "pair_coeff * * ../../../../../potentials/GaAs.bop.table Ga As", + "comm_modify cutoff 12"] + +mends = ["info system", + "dynamical_matrix all eskm 0.000001 file dynmat.dat binary no", + "neigh_modify delay 0"] + +N = 5 +GaAs = GaAs.repeat([N, N, N]) + +lammps = LAMMPSlib(lmpcmds=cmds, atom_types={'Ga': 1, 'As': 2}, amendments=mends, log_file='lammps.log') + +GaAs.set_calculator(lammps) +GaAs.get_potential_energy() + +if rank == 0: + dynmat = np.loadtxt("dynmat.dat") + dynmat = dynmat.reshape(([int(3*(len(dynmat)/3)**0.5), int(3*(len(dynmat)/3)**0.5)])) + eigv = np.linalg.eigvals(dynmat) + eigv.sort() + eigv = np.sqrt(np.abs(eigv))/(2*np.pi) + plt.hist(eigv, 80) + plt.xlabel('Frequency (THz)') + plt.show() + diff --git a/examples/USER/phonon/dynamical_matrix_command/GaN/GaN.py b/examples/USER/phonon/dynamical_matrix_command/GaN/GaN.py new file mode 100644 index 0000000000..52e14ca47d --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/GaN/GaN.py @@ -0,0 +1,39 @@ +from ase import Atoms, Atom +from ase.calculators.lammpslib import LAMMPSlib +import numpy as np +import matplotlib.pyplot as plt +from mpi4py import MPI + +comm = MPI.COMM_WORLD +rank = comm.Get_rank() + +GaN = Atoms([Atom('Ga', (1.59, 0.917986928012, 0.0)), + Atom('Ga', (1.59, -0.917986928012, 2.583)), + Atom('N', (1.59, 0.917986928012, 1.98891)), + Atom('N', (1.59, -0.917986928012, 4.57191))], + cell=[(1.59, -2.75396078403, 0.0), (1.59, 2.75396078403, 0.0), (0.0, 0.0, 5.166)], + pbc=True) + +cmds = ["pair_style tersoff", "pair_coeff * * ../../../../../potentials/GaN.tersoff Ga N"] + +mends = ["info system", + "dynamical_matrix all eskm 0.000001 file dynmat.dat binary no", + "neigh_modify delay 0"] + +N = 6 +GaN = GaN.repeat([N, N, N]) + +lammps = LAMMPSlib(lmpcmds=cmds, atom_types={'Ga': 1, 'N': 2}, amendments=mends, log_file='lammps.log') + +GaN.set_calculator(lammps) +GaN.get_potential_energy() + +if rank == 0: + dynmat = np.loadtxt("dynmat.dat") + dynmat = dynmat.reshape(([int(3*(len(dynmat)/3)**0.5), int(3*(len(dynmat)/3)**0.5)])) + eigv = np.linalg.eigvals(dynmat) + eigv.sort() + eigv = np.sqrt(np.abs(eigv))/(2*np.pi) + plt.hist(eigv, 80) + plt.xlabel('Frequency (THz)') + plt.show() diff --git a/examples/USER/phonon/dynamical_matrix_command/Quartz/quartz.py b/examples/USER/phonon/dynamical_matrix_command/Quartz/quartz.py new file mode 100644 index 0000000000..79a81aa95c --- /dev/null +++ b/examples/USER/phonon/dynamical_matrix_command/Quartz/quartz.py @@ -0,0 +1,57 @@ +from ase import Atoms, Atom +from ase.calculators.lammpslib import LAMMPSlib +import numpy as np +import matplotlib.pyplot as plt +from mpi4py import MPI + +comm = MPI.COMM_WORLD +rank = comm.Get_rank() + +quartz = Atoms( + [Atom('Si', (1.1545226, -1.99969180169, 0.0)), + Atom('Si', (1.1545226, 1.99969180169, 3.6036)), + Atom('Si', (2.6069548, 2.15247249027e-16, 1.8018)), + Atom('O', (1.6724232, -0.624132037742, 0.64378314)), + Atom('O', (1.6724232, 0.624132037742, 2.9598186618)), + Atom('O', (2.1623026, -2.49695388906, 4.2473849418)), + Atom('O', (3.5392742, 1.13629495821, 1.1580150582)), + Atom('O', (3.5392742, -1.13629495821, 2.4455813382)), + Atom('O', (2.1623026, 2.49695388906, 4.76161686))], + cell=[(2.458, -4.257380885, 0.0), (2.458, 4.257380885, 0.0), (0.0, 0.0, 5.4054)], + pbc=True, + ) + +# number of repeats +N = 3 +quartz = quartz.repeat([N, N, N]) + +header = ['units metal', + 'atom_style charge', + 'atom_modify map array sort 0 0'] + +cmds = ["pair_style buck/coul/long 10.0 8.0", + "pair_coeff 1 1 0 1 0", + "pair_coeff 1 2 18003.7572 0.20520 133.5381", + "pair_coeff 2 2 1388.7730 0.36232 175.0000", + "kspace_style ewald 1.0e-12", + "set type 1 charge 2.4", + "set type 2 charge -1.2"] + +mends = ["dynamical_matrix all eskm 0.000001 file dynmat.dat binary no", + "neigh_modify delay 0"] + + +lammps = LAMMPSlib(lmpcmds=cmds, lammps_header=header, amendments=mends, log_file='lammps.log') + +quartz.set_calculator(lammps) +quartz.get_potential_energy() + +if rank == 0: + dynmat = np.loadtxt("dynmat.dat") + dynmat = dynmat.reshape(([int(3*(len(dynmat)/3)**0.5), int(3*(len(dynmat)/3)**0.5)])) + eigv = np.linalg.eigvals(dynmat) + eigv.sort() + plt.hist(33*np.sqrt(np.abs(eigv))/(2*np.pi), 80) + plt.xlabel('Frequency (cm-1)') + plt.show() + diff --git a/examples/USER/phonon/dynamical_matrix_command/README.md b/examples/USER/phonon/dynamical_matrix_command/Silicon/README.md similarity index 77% rename from examples/USER/phonon/dynamical_matrix_command/README.md rename to examples/USER/phonon/dynamical_matrix_command/Silicon/README.md index 8981c1e63a..15ae158c62 100755 --- a/examples/USER/phonon/dynamical_matrix_command/README.md +++ b/examples/USER/phonon/dynamical_matrix_command/Silicon/README.md @@ -7,7 +7,7 @@ This directory contains the ingredients to calculate a dynamical matrix. Example: ``` NP=4 #number of processors -mpirun -np $NP lmp_mpi < in.silicon > out.silicon +mpirun -np $NP lmp_mpi -in in.silicon -out out.silicon ``` To test out a different silicon example: @@ -15,7 +15,7 @@ To test out a different silicon example: LMP_FILE=amorphous_silicon.lmp cp lmp_bank/$LMP_FILE ./silicon_input_file.lmp NP=4 #number of processors -mpirun -np $NP lmp_mpi < in.silicon > out.silicon +mpirun -np $NP lmp_mpi -in in.silicon -out out.silicon ``` ## Requires: MANYBODY and MOLECULE packages diff --git a/examples/USER/phonon/dynamical_matrix_command/Si.opt.tersoff b/examples/USER/phonon/dynamical_matrix_command/Silicon/Si.opt.tersoff similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/Si.opt.tersoff rename to examples/USER/phonon/dynamical_matrix_command/Silicon/Si.opt.tersoff diff --git a/examples/USER/phonon/dynamical_matrix_command/ff-silicon.lmp b/examples/USER/phonon/dynamical_matrix_command/Silicon/ff-silicon.lmp similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/ff-silicon.lmp rename to examples/USER/phonon/dynamical_matrix_command/Silicon/ff-silicon.lmp diff --git a/examples/USER/phonon/dynamical_matrix_command/in.silicon b/examples/USER/phonon/dynamical_matrix_command/Silicon/in.silicon similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/in.silicon rename to examples/USER/phonon/dynamical_matrix_command/Silicon/in.silicon diff --git a/examples/USER/phonon/dynamical_matrix_command/lmp_bank/amorphous_silicon.lmp b/examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/amorphous_silicon.lmp similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/lmp_bank/amorphous_silicon.lmp rename to examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/amorphous_silicon.lmp diff --git a/examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_216.lmp b/examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/silicon_216.lmp similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_216.lmp rename to examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/silicon_216.lmp diff --git a/examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_512.lmp b/examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/silicon_512.lmp similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_512.lmp rename to examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/silicon_512.lmp diff --git a/examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_8.lmp b/examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/silicon_8.lmp similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/lmp_bank/silicon_8.lmp rename to examples/USER/phonon/dynamical_matrix_command/Silicon/lmp_bank/silicon_8.lmp diff --git a/examples/USER/phonon/dynamical_matrix_command/results/dynmat.dat b/examples/USER/phonon/dynamical_matrix_command/Silicon/results/dynmat.dat similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/results/dynmat.dat rename to examples/USER/phonon/dynamical_matrix_command/Silicon/results/dynmat.dat diff --git a/examples/USER/phonon/dynamical_matrix_command/results/out.silicon b/examples/USER/phonon/dynamical_matrix_command/Silicon/results/out.silicon similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/results/out.silicon rename to examples/USER/phonon/dynamical_matrix_command/Silicon/results/out.silicon diff --git a/examples/USER/phonon/dynamical_matrix_command/silicon_input_file.lmp b/examples/USER/phonon/dynamical_matrix_command/Silicon/silicon_input_file.lmp similarity index 100% rename from examples/USER/phonon/dynamical_matrix_command/silicon_input_file.lmp rename to examples/USER/phonon/dynamical_matrix_command/Silicon/silicon_input_file.lmp diff --git a/examples/USER/phonon/third_order_command/Manual.md b/examples/USER/phonon/third_order_command/silicon/Manual.md similarity index 100% rename from examples/USER/phonon/third_order_command/Manual.md rename to examples/USER/phonon/third_order_command/silicon/Manual.md diff --git a/examples/USER/phonon/third_order_command/README.md b/examples/USER/phonon/third_order_command/silicon/README.md similarity index 82% rename from examples/USER/phonon/third_order_command/README.md rename to examples/USER/phonon/third_order_command/silicon/README.md index a9604e4575..c938734393 100755 --- a/examples/USER/phonon/third_order_command/README.md +++ b/examples/USER/phonon/third_order_command/silicon/README.md @@ -8,7 +8,7 @@ Example: ``` $THIRD_ORDER=third_order #tensor output file NP=4 #number of processors -mpirun -np $NP lmp_mpi < in.silicon > out.silicon +mpirun -np $NP lmp_mpi -in in.silicon -out out.silicon combine.sh third_order ``` @@ -18,7 +18,7 @@ $THIRD_ORDER=third_order $LMP_FILE=amorphous_silicon.lmp cp lmp_bank/$LMP_FILE ./silicon_input_file.lmp NP=4 #number of processors -mpirun -np $NP lmp_mpi < in.silicon > out.silicon +mpirun -np $NP lmp_mpi -in in.silicon -out out.silicon bash combine.sh $THIRD_ORDER ``` diff --git a/examples/USER/phonon/third_order_command/Si.opt.tersoff b/examples/USER/phonon/third_order_command/silicon/Si.opt.tersoff similarity index 100% rename from examples/USER/phonon/third_order_command/Si.opt.tersoff rename to examples/USER/phonon/third_order_command/silicon/Si.opt.tersoff diff --git a/examples/USER/phonon/third_order_command/combine.sh b/examples/USER/phonon/third_order_command/silicon/combine.sh similarity index 100% rename from examples/USER/phonon/third_order_command/combine.sh rename to examples/USER/phonon/third_order_command/silicon/combine.sh diff --git a/examples/USER/phonon/third_order_command/ff-silicon.lmp b/examples/USER/phonon/third_order_command/silicon/ff-silicon.lmp similarity index 100% rename from examples/USER/phonon/third_order_command/ff-silicon.lmp rename to examples/USER/phonon/third_order_command/silicon/ff-silicon.lmp diff --git a/examples/USER/phonon/third_order_command/in.silicon b/examples/USER/phonon/third_order_command/silicon/in.silicon similarity index 100% rename from examples/USER/phonon/third_order_command/in.silicon rename to examples/USER/phonon/third_order_command/silicon/in.silicon diff --git a/examples/USER/phonon/third_order_command/lmp_bank/silicon_216.lmp b/examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_216.lmp similarity index 100% rename from examples/USER/phonon/third_order_command/lmp_bank/silicon_216.lmp rename to examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_216.lmp diff --git a/examples/USER/phonon/third_order_command/lmp_bank/silicon_512.lmp b/examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_512.lmp similarity index 100% rename from examples/USER/phonon/third_order_command/lmp_bank/silicon_512.lmp rename to examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_512.lmp diff --git a/examples/USER/phonon/third_order_command/lmp_bank/silicon_8.lmp b/examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_8.lmp similarity index 100% rename from examples/USER/phonon/third_order_command/lmp_bank/silicon_8.lmp rename to examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_8.lmp diff --git a/examples/USER/phonon/third_order_command/results/out.silicon b/examples/USER/phonon/third_order_command/silicon/results/out.silicon similarity index 100% rename from examples/USER/phonon/third_order_command/results/out.silicon rename to examples/USER/phonon/third_order_command/silicon/results/out.silicon diff --git a/examples/USER/phonon/third_order_command/results/third_order b/examples/USER/phonon/third_order_command/silicon/results/third_order similarity index 100% rename from examples/USER/phonon/third_order_command/results/third_order rename to examples/USER/phonon/third_order_command/silicon/results/third_order diff --git a/examples/USER/phonon/third_order_command/silicon_input_file.lmp b/examples/USER/phonon/third_order_command/silicon/silicon_input_file.lmp similarity index 100% rename from examples/USER/phonon/third_order_command/silicon_input_file.lmp rename to examples/USER/phonon/third_order_command/silicon/silicon_input_file.lmp diff --git a/src/USER-PHONON/third_order.cpp b/src/USER-PHONON/third_order.cpp index b2a684e6da..41382e64cb 100644 --- a/src/USER-PHONON/third_order.cpp +++ b/src/USER-PHONON/third_order.cpp @@ -168,13 +168,11 @@ void ThirdOrder::options(int narg, char **arg) if (narg < 0) error->all(FLERR,"Illegal dynamical_matrix command"); int iarg = 0; const char *filename = "third_order.txt"; - std::stringstream fss; while (iarg < narg) { if (strcmp(arg[iarg],"file") == 0) { if (iarg+2 > narg) error->all(FLERR, "Illegal dynamical_matrix command"); - fss << arg[iarg + 1] << me; - filename = fss.str().c_str(); + filename = arg[iarg + 1]; file_flag = 1; iarg += 2; } @@ -189,7 +187,7 @@ void ThirdOrder::options(int narg, char **arg) iarg += 2; } else error->all(FLERR,"Illegal dynamical_matrix command"); } - if (file_flag == 1 and me == 0) { + if (file_flag == 1 && me == 0) { openfile(filename); } } @@ -338,10 +336,9 @@ void ThirdOrder::writeMatrix(double *dynmat, int i, int a, int j, int b) if (!binaryflag && fp) { clearerr(fp); for (int k = 0; k < gcount; k++){ - double norm = pow(dynmat[k*3], 2) - + pow(dynmat[k*3+1], 2) - + pow(dynmat[k+3+2], 2); - if (norm > 1.0e-16) + if (dynmat[k*3] > 1.0e-16 + && dynmat[k*3+1] > 1.0e-16 + && dynmat[k*3+2] > 1.0e-16) fprintf(fp, "%d %d %d %d %d %7.8f %7.8f %7.8f\n", i+1, a + 1, j+1, b + 1, groupmap[k]+1, From e7c1ca1fca7ac8b91c9ce4fc3b1036f2eca0b3d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Tue, 12 Feb 2019 08:07:28 +0100 Subject: [PATCH 062/143] Revert changes --- python/install.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/python/install.py b/python/install.py index 5a97b6106d..feb6527352 100644 --- a/python/install.py +++ b/python/install.py @@ -22,11 +22,6 @@ else: pydir = "" # copy lammps.py to pydir if it exists # if pydir not specified, install in site-packages via distutils setup() -if 'liblammps.dylib' in os.listdir('../src/'): - lib_ext = ".dylib" -else: - lib_ext = ".so" - if pydir: if not os.path.isdir(pydir): print( "ERROR: pydir %s does not exist" % pydir) @@ -41,7 +36,7 @@ if pydir: str = "cp ../src/liblammps.so %s" % pydir print(str) try: - shutil.copyfile("../src/liblammps" + lib_ext, os.path.join(pydir,"liblammps" + lib_ext) ) + shutil.copyfile("../src/liblammps.so", os.path.join(pydir,"liblammps.so") ) except shutil.Error: pass # source and destination are identical sys.exit() @@ -70,7 +65,7 @@ try: url = "http://lammps.sandia.gov", description = "LAMMPS molecular dynamics library", py_modules = ["lammps"], - data_files = [(get_python_lib(), ["../src/liblammps" + lib_ext])]) + data_files = [(get_python_lib(), ["../src/liblammps.so"])]) except: tryuser=True print ("Installation into global site-packages dir failed.\nTrying user site dir %s now." % site.USER_SITE) @@ -86,9 +81,8 @@ if tryuser: url = "http://lammps.sandia.gov", description = "LAMMPS molecular dynamics library", py_modules = ["lammps"], - data_files = [(site.USER_SITE, ["../src/liblammps" + lib_ext])]) + data_files = [(site.USER_SITE, ["../src/liblammps.so"])]) except: print("Installation into user site package dir failed.\nGo to ../python and install manually.") - From f5e3c538802d4504b074d46c4da142724f1842c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Tue, 12 Feb 2019 08:08:22 +0100 Subject: [PATCH 063/143] Update install.py --- python/install.py | 1 + 1 file changed, 1 insertion(+) diff --git a/python/install.py b/python/install.py index feb6527352..9308506fd2 100644 --- a/python/install.py +++ b/python/install.py @@ -86,3 +86,4 @@ if tryuser: print("Installation into user site package dir failed.\nGo to ../python and install manually.") + From e582c0d4e5eec1b5e22954e3249719e69827deb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jan=C3=9Fen?= Date: Tue, 12 Feb 2019 08:20:54 +0100 Subject: [PATCH 064/143] Update lammps.py --- python/lammps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/lammps.py b/python/lammps.py index c5c7dca33d..9b3790f2db 100644 --- a/python/lammps.py +++ b/python/lammps.py @@ -85,7 +85,7 @@ class lammps(object): # fall back to loading with a relative path, # typically requires LD_LIBRARY_PATH to be set appropriately - if 'liblammps.dylib' in os.listdir(modpath): + if any([f.startswith('liblammps') and f.endswith('.dylib') for f in os.listdir(modpath)]): lib_ext = ".dylib" else: lib_ext = ".so" From 88b62fa6bdf80f1b3ed5db4d807fadfc376f2742 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 13 Feb 2019 12:43:35 -0500 Subject: [PATCH 065/143] add old style PDF build to "make old" target. this will create the old style Manual.pdf in the old folder and put Developer.pdf there, too. --- doc/Makefile | 14 +++++++++++++- doc/src/lammps.book | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/doc/Makefile b/doc/Makefile index a38186666a..044e358bd5 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -39,7 +39,7 @@ help: @echo "Please use \`make ' where is one of" @echo " html create HTML doc pages in html dir" @echo " pdf create Developer.pdf and Manual.pdf in this dir" - @echo " old create old-style HTML doc pages in old dir" + @echo " old create old-style HTML doc pages and Manual.pdf in old dir" @echo " fetch fetch HTML and PDF files from LAMMPS web site" @echo " epub create ePUB format manual for e-book readers" @echo " mobi convert ePUB to MOBI format manual for e-book readers (e.g. Kindle)" @@ -162,6 +162,18 @@ old: utils/txt2html/txt2html.exe cp Eqs/*.jpg ../old/Eqs; \ cp JPG/* ../old/JPG; \ cp PDF/* ../old/PDF; + @( set -e;\ + cd src/Developer; \ + pdflatex developer; \ + pdflatex developer; \ + mv developer.pdf ../../old/Developer.pdf; \ + cd ../../old; \ + for s in `echo ../src/*.txt | sed -e 's,\.\./src/,,g' -e 's/ \(pairs\|bonds\|angles\|dihedrals\|impropers\|commands_list\|fixes\|computes\).txt/ /g' | sed -e 's,\.txt,\.html,g'` ; \ + do grep -q ^$$s ../src/lammps.book || \ + echo WARNING: doc file $$s missing in src/lammps.book; done; \ + htmldoc --batch ../src/lammps.book; \ + ) + fetch: @rm -rf html_www Manual_www.pdf Developer_www.pdf diff --git a/doc/src/lammps.book b/doc/src/lammps.book index 02a55e3810..4c24719870 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -1,5 +1,5 @@ #HTMLDOC 1.8.28 --t pdf14 -f "../Manual.pdf" --book --toclevels 4 --no-numbered --toctitle "Table of Contents" --title --textcolor #000000 --linkcolor #0000ff --linkstyle plain --bodycolor #ffffff --size Universal --left 1.00in --right 0.50in --top 0.50in --bottom 0.50in --header .t. --header1 ... --footer ..1 --nup 1 --tocheader .t. --tocfooter ..i --portrait --color --no-pscommands --no-xrxcomments --compression=9 --jpeg=0 --fontsize 11.0 --fontspacing 1.2 --headingfont Sans --bodyfont Serif --headfootsize 11.0 --headfootfont Sans-Bold --charset iso-8859-15 --links --embedfonts --pagemode document --pagelayout single --firstpage c1 --pageeffect none --pageduration 10 --effectduration 1.0 --no-encryption --permissions all --owner-password "" --user-password "" --browserwidth 680 --no-strict --no-overflow +-t pdf14 -f "Manual.pdf" --book --toclevels 4 --no-numbered --toctitle "Table of Contents" --title --textcolor #000000 --linkcolor #0000ff --linkstyle plain --bodycolor #ffffff --size Universal --left 1.00in --right 0.50in --top 0.50in --bottom 0.50in --header .t. --header1 ... --footer ..1 --nup 1 --tocheader .t. --tocfooter ..i --portrait --color --no-pscommands --no-xrxcomments --compression=9 --jpeg=0 --fontsize 11.0 --fontspacing 1.2 --headingfont Sans --bodyfont Serif --headfootsize 11.0 --headfootfont Sans-Bold --charset iso-8859-15 --links --embedfonts --pagemode document --pagelayout single --firstpage c1 --pageeffect none --pageduration 10 --effectduration 1.0 --no-encryption --permissions all --owner-password "" --user-password "" --browserwidth 680 --no-strict --no-overflow Manual.html Intro.html Intro_overview.html From 01088559308210647ef8a604f8cd023c64e3f663 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 14 Feb 2019 02:54:02 -0500 Subject: [PATCH 066/143] update .gitignore for the doc folder --- doc/.gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/.gitignore b/doc/.gitignore index 920c5b9830..88679898a8 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -1,4 +1,4 @@ -/latex +/old /html /latex /spelling From b3a7a534a99b85c97b863f46c13684bf1422fbf2 Mon Sep 17 00:00:00 2001 From: Donatas Surblys Date: Thu, 14 Feb 2019 18:54:59 +0900 Subject: [PATCH 067/143] make fix langevin correctly account for energy with 'zero yes' --- src/fix_langevin.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index d829982274..d49ad61371 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -605,6 +605,11 @@ void FixLangevin::post_force_untemplated f[i][0] -= fsumall[0]; f[i][1] -= fsumall[1]; f[i][2] -= fsumall[2]; + if (Tp_TALLY) { + flangevin[i][0] -= fsumall[0]; + flangevin[i][1] -= fsumall[1]; + flangevin[i][2] -= fsumall[2]; + } } } } From 8020f5b9650f078c8aad2ec0c83cf67a02bd0901 Mon Sep 17 00:00:00 2001 From: Donatas Surblys Date: Thu, 14 Feb 2019 18:54:59 +0900 Subject: [PATCH 068/143] remove warning messages when using 'tally yes zero yes' with fix langevin --- src/fix_langevin.cpp | 2 -- src/fix_langevin.h | 6 ------ 2 files changed, 8 deletions(-) diff --git a/src/fix_langevin.cpp b/src/fix_langevin.cpp index d49ad61371..36ea47daf6 100644 --- a/src/fix_langevin.cpp +++ b/src/fix_langevin.cpp @@ -177,8 +177,6 @@ FixLangevin::FixLangevin(LAMMPS *lmp, int narg, char **arg) : } } - if (tallyflag && zeroflag && comm->me == 0) - error->warning(FLERR,"Energy tally does not account for 'zero yes'"); } /* ---------------------------------------------------------------------- */ diff --git a/src/fix_langevin.h b/src/fix_langevin.h index 2883ac9ea2..024e7a9539 100644 --- a/src/fix_langevin.h +++ b/src/fix_langevin.h @@ -104,12 +104,6 @@ E: Fix langevin period must be > 0.0 The time window for temperature relaxation must be > 0 -W: Energy tally does not account for 'zero yes' - -The energy removed by using the 'zero yes' flag is not accounted -for in the energy tally and thus energy conservation cannot be -monitored in this case. - E: Fix langevin omega requires atom style sphere Self-explanatory. From d0ed6f2bf54354cbaf8ee6e915542b51eb272fb3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 14 Feb 2019 05:45:52 -0500 Subject: [PATCH 069/143] reflect changes to fix langevin also in the manual --- doc/src/Errors_warnings.txt | 6 ------ doc/src/fix_langevin.txt | 4 ---- 2 files changed, 10 deletions(-) diff --git a/doc/src/Errors_warnings.txt b/doc/src/Errors_warnings.txt index 079688c639..47dd597af8 100644 --- a/doc/src/Errors_warnings.txt +++ b/doc/src/Errors_warnings.txt @@ -178,12 +178,6 @@ When using fixes like box/relax, the potential energy used by the minimizer is augmented by an additional energy provided by the fix. Thus the printed converged energy may be different from the total potential energy. :dd -{Energy tally does not account for 'zero yes'} :dt - -The energy removed by using the 'zero yes' flag is not accounted -for in the energy tally and thus energy conservation cannot be -monitored in this case. :dd - {Estimated error in splitting of dispersion coeffs is %g} :dt Error is greater than 0.0001 percent. :dd diff --git a/doc/src/fix_langevin.txt b/doc/src/fix_langevin.txt index 85c97a3436..861eed4a6f 100644 --- a/doc/src/fix_langevin.txt +++ b/doc/src/fix_langevin.txt @@ -217,10 +217,6 @@ the particles. As described below, this energy can then be printed out or added to the potential energy of the system to monitor energy conservation. -NOTE: this accumulated energy does NOT include kinetic energy removed -by the {zero} flag. LAMMPS will print a warning when both options are -active. - The keyword {zero} can be used to eliminate drift due to the thermostat. Because the random forces on different atoms are independent, they do not sum exactly to zero. As a result, this fix From e95cf4e9176ca92b769e250e2c02f069a8b790d3 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Thu, 14 Feb 2019 13:38:28 -0600 Subject: [PATCH 070/143] Some various doc updates for kim-api support --- cmake/Modules/FindKIM-API-V2.cmake | 5 ----- doc/src/pair_kim.txt | 6 +++--- lib/kim/README | 16 ++++++++-------- src/KIM/pair_kim.cpp | 2 +- src/KIM/pair_kim.h | 2 +- 5 files changed, 13 insertions(+), 18 deletions(-) diff --git a/cmake/Modules/FindKIM-API-V2.cmake b/cmake/Modules/FindKIM-API-V2.cmake index 0cc947e139..6ca6e068df 100644 --- a/cmake/Modules/FindKIM-API-V2.cmake +++ b/cmake/Modules/FindKIM-API-V2.cmake @@ -28,11 +28,6 @@ # Ryan S. Elliott # -# -# Release: This file is part of the kim-api.git repository. -# - - # - Find KIM-API-V2 # # sets standard pkg_check_modules variables plus: diff --git a/doc/src/pair_kim.txt b/doc/src/pair_kim.txt index 0c05913117..67ab0b6c07 100644 --- a/doc/src/pair_kim.txt +++ b/doc/src/pair_kim.txt @@ -48,8 +48,8 @@ building LAMMPS. See the examples/kim dir for an input script that uses a KIM model (potential) for Lennard-Jones. Note, for this example input script, the example models -shipped with with kim-api package must be installed. See the "Making -LAMMPS"_Section_start.html#start_3 section and the ./lib/kim/README for details +shipped with with kim-api package must be installed. See the "Build +package"_Build_package.html section and the ./lib/kim/README for details on how to build LAMMSPS with the kim-api and how to install the example models. :line @@ -115,7 +115,7 @@ LAMMPS was built with that package. See the "Build package"_Build_package.html doc page for more info. This current version of pair_style kim is compatible with the -kim-api package version 2.0.0-beta.2 and higher. +kim-api package version 2.0.0 and higher. [Related commands:] diff --git a/lib/kim/README b/lib/kim/README index 7cf8f9bb7d..0e51a30870 100644 --- a/lib/kim/README +++ b/lib/kim/README @@ -20,17 +20,17 @@ Instructions: 1. Configure lammps for use with the kim-api library installed in this directory # replace X.Y.Z as appropriate here and below -$ printf "${PWD}/installed-kim-api-vX.Y.Z" > ./kim-prefix.txt +$ printf "${PWD}/installed-kim-api-vX-X.Y.Z" > ./kim-prefix.txt 2. Download and unpack the kim-api -$ wget http://s3.openkim.org/kim-api/kim-api-vX.Y.Z.txz -$ tar zxvf kim-api-vX.Y.Z.txz +$ wget http://s3.openkim.org/kim-api/kim-api-vX-X.Y.Z.txz +$ tar zxvf kim-api-vX-X.Y.Z.txz # configure the kim-api -$ cd kim-api-vX.Y.Z +$ cd kim-api-vX-X.Y.Z $ mkdir build && cd build -$ cmake .. -DCMAKE_INSTALL_PREFIX=${PWD}/../../installed-kim-api-vX.Y.Z +$ cmake .. -DCMAKE_INSTALL_PREFIX=${PWD}/../../installed-kim-api-vX-X.Y.Z 3. Build and install the kim-api and model @@ -40,13 +40,13 @@ $ make install 4. Remove source and build files $ cd ../../ -$ rm -rf kim-api-vX.Y.Z -$ rm -rf kim-api-vX.Y.Z.txz +$ rm -rf kim-api-vX-X.Y.Z +$ rm -rf kim-api-vX-X.Y.Z.txz 5. To add items do the following (replace the kim item name with your desired value) -$ source ${PWD}/kim-api-vX.Y.Z/bin/kim-api-vX-activate +$ source ${PWD}/kim-api-vX-X.Y.Z/bin/kim-api-vX-activate $ kim-api-vX-collections-management install system Pair_Johnson_Fe__MO_857282754307_002 diff --git a/src/KIM/pair_kim.cpp b/src/KIM/pair_kim.cpp index 6981b028b2..a4517b848c 100644 --- a/src/KIM/pair_kim.cpp +++ b/src/KIM/pair_kim.cpp @@ -50,7 +50,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the kim-api-v2.0.0-beta.2 (and newer) package + Designed for use with the kim-api-v2-2.0.0 (and newer) package ------------------------------------------------------------------------- */ #include diff --git a/src/KIM/pair_kim.h b/src/KIM/pair_kim.h index a23d5cd317..a6f882347d 100644 --- a/src/KIM/pair_kim.h +++ b/src/KIM/pair_kim.h @@ -50,7 +50,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Designed for use with the kim-api-v2.0.0-beta.2 (and newer) package + Designed for use with the kim-api-v2-2.0.0 (and newer) package ------------------------------------------------------------------------- */ #ifdef PAIR_CLASS From c193a9aee902a8a5f7eac683d04be3051fb377fe Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Thu, 14 Feb 2019 19:28:18 -0600 Subject: [PATCH 071/143] Updated Errors_messages.txt & false_positives.txt --- doc/src/Errors_messages.txt | 2 -- doc/utils/sphinx-config/false_positives.txt | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/src/Errors_messages.txt b/doc/src/Errors_messages.txt index dab46874fb..fb5003e602 100644 --- a/doc/src/Errors_messages.txt +++ b/doc/src/Errors_messages.txt @@ -10179,8 +10179,6 @@ valid. :dd Self-explanatory. :dd -{Unrecognized virial argument in pair_style command} :dt - {Unsupported mixing rule in kspace_style ewald/disp} :dt Only geometric mixing is supported. :dd diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 5844dd3454..b76ec11f8d 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1384,6 +1384,7 @@ libfftw libgcc libgpu libjpeg +libkim liblammps Liblammps liblink From afa50ab61a4fc4511dd3bce2ab8b955c20f6e27c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 15 Feb 2019 02:21:07 -0500 Subject: [PATCH 072/143] update pathspec when linking KIM API from downloaded archive --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index b40c9aaeb2..c49dcfae71 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -674,7 +674,7 @@ if(PKG_KIM) ) ExternalProject_get_property(kim_build INSTALL_DIR) set(KIM-API-V2_INCLUDE_DIRS ${INSTALL_DIR}/include/kim-api-v2) - set(KIM-API-V2_LDFLAGS ${INSTALL_DIR}/lib/libkim-api-v2.2${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(KIM-API-V2_LDFLAGS ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libkim-api-v2${CMAKE_SHARED_LIBRARY_SUFFIX}) list(APPEND LAMMPS_DEPS kim_build) else() find_package(KIM-API-V2) From c2725f5a49a3368885a467ac9bbbba8c278a4c53 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 15 Feb 2019 03:53:09 -0500 Subject: [PATCH 073/143] forward build type setting to compiling downloaded KIM API --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index c49dcfae71..30c8171f28 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -670,7 +670,7 @@ if(PKG_KIM) -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} -DCMAKE_INSTALL_PREFIX= - -DCMAKE_BUILD_TYPE=Release + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} ) ExternalProject_get_property(kim_build INSTALL_DIR) set(KIM-API-V2_INCLUDE_DIRS ${INSTALL_DIR}/include/kim-api-v2) From 318dd347379085ed6ce38c89f5af57cb03338727 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 17 Feb 2019 15:00:04 -0500 Subject: [PATCH 074/143] correct cut-n-paste error --- src/atom_vec_body.cpp | 2 +- src/atom_vec_ellipsoid.cpp | 2 +- src/atom_vec_line.cpp | 2 +- src/atom_vec_tri.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/atom_vec_body.cpp b/src/atom_vec_body.cpp index 5a277627ee..893a4c7dc4 100644 --- a/src/atom_vec_body.cpp +++ b/src/atom_vec_body.cpp @@ -1286,7 +1286,7 @@ void AtomVecBody::data_atom(double *coord, imageint imagetmp, char **values) body[nlocal] = atoi(values[2]); if (body[nlocal] == 0) body[nlocal] = -1; else if (body[nlocal] == 1) body[nlocal] = 0; - else error->one(FLERR,"Invalid atom type in Atoms section of data file"); + else error->one(FLERR,"Invalid bodyflag in Atoms section of data file"); rmass[nlocal] = atof(values[3]); if (rmass[nlocal] <= 0.0) diff --git a/src/atom_vec_ellipsoid.cpp b/src/atom_vec_ellipsoid.cpp index c569f89a09..2bf3f683d0 100644 --- a/src/atom_vec_ellipsoid.cpp +++ b/src/atom_vec_ellipsoid.cpp @@ -1148,7 +1148,7 @@ void AtomVecEllipsoid::data_atom(double *coord, imageint imagetmp, ellipsoid[nlocal] = atoi(values[2]); if (ellipsoid[nlocal] == 0) ellipsoid[nlocal] = -1; else if (ellipsoid[nlocal] == 1) ellipsoid[nlocal] = 0; - else error->one(FLERR,"Invalid atom type in Atoms section of data file"); + else error->one(FLERR,"Invalid ellipsoidflag in Atoms section of data file"); rmass[nlocal] = atof(values[3]); if (rmass[nlocal] <= 0.0) diff --git a/src/atom_vec_line.cpp b/src/atom_vec_line.cpp index 9babfe3735..020b622c93 100644 --- a/src/atom_vec_line.cpp +++ b/src/atom_vec_line.cpp @@ -1044,7 +1044,7 @@ void AtomVecLine::data_atom(double *coord, imageint imagetmp, char **values) line[nlocal] = atoi(values[3]); if (line[nlocal] == 0) line[nlocal] = -1; else if (line[nlocal] == 1) line[nlocal] = 0; - else error->one(FLERR,"Invalid atom type in Atoms section of data file"); + else error->one(FLERR,"Invalid lineflag in Atoms section of data file"); rmass[nlocal] = atof(values[4]); if (rmass[nlocal] <= 0.0) diff --git a/src/atom_vec_tri.cpp b/src/atom_vec_tri.cpp index 2c31b95cfe..8fbe0a92dc 100644 --- a/src/atom_vec_tri.cpp +++ b/src/atom_vec_tri.cpp @@ -1443,7 +1443,7 @@ void AtomVecTri::data_atom(double *coord, imageint imagetmp, char **values) tri[nlocal] = atoi(values[3]); if (tri[nlocal] == 0) tri[nlocal] = -1; else if (tri[nlocal] == 1) tri[nlocal] = 0; - else error->one(FLERR,"Invalid atom type in Atoms section of data file"); + else error->one(FLERR,"Invalid triflag in Atoms section of data file"); rmass[nlocal] = atof(values[4]); if (rmass[nlocal] <= 0.0) From 09de4fb9536d21939a952c23b734aaa344c17f10 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 17 Feb 2019 15:01:13 -0500 Subject: [PATCH 075/143] add support for checking consistency of atom bonus data --- src/atom.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ src/atom.h | 6 ++++++ 2 files changed, 46 insertions(+) diff --git a/src/atom.cpp b/src/atom.cpp index be4d12d52e..a149268767 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -58,6 +58,7 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp) natoms = 0; nlocal = nghost = nmax = 0; ntypes = 0; + nellipsoids = nlines = ntris = nbodies = 0; nbondtypes = nangletypes = ndihedraltypes = nimpropertypes = 0; nbonds = nangles = ndihedrals = nimpropers = 0; @@ -738,6 +739,45 @@ int Atom::tag_consecutive() return 1; } +/* ---------------------------------------------------------------------- + check that bonus data settings are valid + error if number of atoms with ellipsoid/line/tri/body flags + are consistent with global setting. +------------------------------------------------------------------------- */ + +void Atom::bonus_check() +{ + bigint local_ellipsoids = 0, local_lines = 0, local_tris = 0; + bigint local_bodies = 0, num_global; + + for (int i = 0; i < nlocal; ++i) { + if (ellipsoid && (ellipsoid[i] >=0)) ++local_ellipsoids; + if (line && (line[i] >=0)) ++local_lines; + if (tri && (tri[i] >=0)) ++local_tris; + if (body && (body[i] >=0)) ++local_bodies; + } + + MPI_Allreduce(&local_ellipsoids,&num_global,1,MPI_LMP_BIGINT,MPI_MIN,world); + if (nellipsoids != num_global) + error->all(FLERR,"Inconsistent 'ellipsoids' header value and number of " + "atoms with enabled ellipsoid flags"); + + MPI_Allreduce(&local_lines,&num_global,1,MPI_LMP_BIGINT,MPI_MIN,world); + if (nlines != num_global) + error->all(FLERR,"Inconsistent 'lines' header value and number of " + "atoms with enabled line flags"); + + MPI_Allreduce(&local_tris,&num_global,1,MPI_LMP_BIGINT,MPI_MIN,world); + if (ntris != num_global) + error->all(FLERR,"Inconsistent 'tris' header value and number of " + "atoms with enabled tri flags"); + + MPI_Allreduce(&local_bodies,&num_global,1,MPI_LMP_BIGINT,MPI_MIN,world); + if (nbodies != num_global) + error->all(FLERR,"Inconsistent 'bodies' header value and number of " + "atoms with enabled body flags"); +} + /* ---------------------------------------------------------------------- count and return words in a single line make copy of line before using strtok so as not to change line diff --git a/src/atom.h b/src/atom.h index 324ad0f2d2..b2a657cf1a 100644 --- a/src/atom.h +++ b/src/atom.h @@ -34,6 +34,10 @@ class Atom : protected Pointers { int tag_enable; // 0/1 if atom ID tags are defined int molecular; // 0 = atomic, 1 = standard molecular system, // 2 = molecule template system + bigint nellipsoids; // number of ellipsoids + bigint nlines; // number of lines + bigint ntris; // number of triangles + bigint nbodies; // number of bodies bigint nbonds,nangles,ndihedrals,nimpropers; int ntypes,nbondtypes,nangletypes,ndihedraltypes,nimpropertypes; @@ -233,6 +237,8 @@ class Atom : protected Pointers { void tag_extend(); int tag_consecutive(); + void bonus_check(); + int parse_data(const char *); int count_words(const char *); int count_words(const char *, char *); From d89084841285547b3be999c297124bcf85c460c2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 17 Feb 2019 15:03:59 -0500 Subject: [PATCH 076/143] add a check for consistent bonus data --- src/read_data.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/read_data.cpp b/src/read_data.cpp index a640368fb0..2f4484010b 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -396,7 +396,8 @@ void ReadData::command(int narg, char **arg) // values in this data file - natoms = ntypes = 0; + natoms = 0; + ntypes = 0; nbonds = nangles = ndihedrals = nimpropers = 0; nbondtypes = nangletypes = ndihedraltypes = nimpropertypes = 0; @@ -993,18 +994,29 @@ void ReadData::header(int firstpass) if (!avec_ellipsoid) error->all(FLERR,"No ellipsoids allowed with this atom style"); sscanf(line,BIGINT_FORMAT,&nellipsoids); + if (addflag == NONE) atom->nellipsoids = nellipsoids; + else if (firstpass) atom->nellipsoids += nellipsoids; + } else if (strstr(line,"lines")) { if (!avec_line) error->all(FLERR,"No lines allowed with this atom style"); sscanf(line,BIGINT_FORMAT,&nlines); + if (addflag == NONE) atom->nlines = nlines; + else if (firstpass) atom->nlines += nlines; + } else if (strstr(line,"triangles")) { if (!avec_tri) error->all(FLERR,"No triangles allowed with this atom style"); sscanf(line,BIGINT_FORMAT,&ntris); + if (addflag == NONE) atom->ntris = ntris; + else if (firstpass) atom->ntris += ntris; + } else if (strstr(line,"bodies")) { if (!avec_body) error->all(FLERR,"No bodies allowed with this atom style"); sscanf(line,BIGINT_FORMAT,&nbodies); + if (addflag == NONE) atom->nbodies = nbodies; + else if (firstpass) atom->nbodies += nbodies; } else if (strstr(line,"bonds")) { sscanf(line,BIGINT_FORMAT,&nbonds); @@ -1084,6 +1096,10 @@ void ReadData::header(int firstpass) // error check on total system size if (atom->natoms < 0 || atom->natoms >= MAXBIGINT || + atom->nellipsoids < 0 || atom->nellipsoids >= MAXBIGINT || + atom->nlines < 0 || atom->nlines >= MAXBIGINT || + atom->ntris < 0 || atom->ntris >= MAXBIGINT || + atom->nbodies < 0 || atom->nbodies >= MAXBIGINT || atom->nbonds < 0 || atom->nbonds >= MAXBIGINT || atom->nangles < 0 || atom->nangles >= MAXBIGINT || atom->ndihedrals < 0 || atom->ndihedrals >= MAXBIGINT || @@ -1174,6 +1190,10 @@ void ReadData::atoms() atom->tag_check(); + // check that bonus data has been reserved as needed + + atom->bonus_check(); + // create global mapping of atoms if (atom->map_style) { From 7d0c0bc9849ec95d3cd7fdfa3fc3c170010bfee5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 17 Feb 2019 17:14:01 -0500 Subject: [PATCH 077/143] make nlocal_bonus accessible --- src/atom_vec_body.h | 4 +++- src/atom_vec_ellipsoid.h | 4 +++- src/atom_vec_line.h | 4 +++- src/atom_vec_tri.h | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/atom_vec_body.h b/src/atom_vec_body.h index 3244b0f64d..7cc052b6c5 100644 --- a/src/atom_vec_body.h +++ b/src/atom_vec_body.h @@ -92,6 +92,8 @@ class AtomVecBody : public AtomVec { double radius_body(int, int, int *, double *); void set_quat(int, double *); + int nlocal_bonus; + private: tagint *tag; int *type,*mask; @@ -102,7 +104,7 @@ class AtomVecBody : public AtomVec { double **angmom,**torque; int *body; - int nlocal_bonus,nghost_bonus,nmax_bonus; + int nghost_bonus,nmax_bonus; int intdoubleratio; // sizeof(double) / sizeof(int) MyPoolChunk *icp; diff --git a/src/atom_vec_ellipsoid.h b/src/atom_vec_ellipsoid.h index 6beb68b176..d71859624e 100644 --- a/src/atom_vec_ellipsoid.h +++ b/src/atom_vec_ellipsoid.h @@ -83,6 +83,8 @@ class AtomVecEllipsoid : public AtomVec { void set_shape(int, double, double, double); + int nlocal_bonus; + private: tagint *tag; int *type,*mask; @@ -92,7 +94,7 @@ class AtomVecEllipsoid : public AtomVec { double **angmom,**torque; int *ellipsoid; - int nlocal_bonus,nghost_bonus,nmax_bonus; + int nghost_bonus,nmax_bonus; void grow_bonus(); void copy_bonus(int, int); diff --git a/src/atom_vec_line.h b/src/atom_vec_line.h index 7f07532fa4..6c8701cfc2 100644 --- a/src/atom_vec_line.h +++ b/src/atom_vec_line.h @@ -83,6 +83,8 @@ class AtomVecLine : public AtomVec { void set_length(int, double); + int nlocal_bonus; + private: tagint *tag; int *type,*mask; @@ -93,7 +95,7 @@ class AtomVecLine : public AtomVec { double **omega,**torque; int *line; - int nlocal_bonus,nghost_bonus,nmax_bonus; + int nghost_bonus,nmax_bonus; void grow_bonus(); void copy_bonus(int, int); diff --git a/src/atom_vec_tri.h b/src/atom_vec_tri.h index 390efc7c10..81b4c1ada9 100644 --- a/src/atom_vec_tri.h +++ b/src/atom_vec_tri.h @@ -85,6 +85,8 @@ class AtomVecTri : public AtomVec { void set_equilateral(int, double); + int nlocal_bonus; + private: tagint *tag; int *type,*mask; @@ -95,7 +97,7 @@ class AtomVecTri : public AtomVec { double **omega,**angmom,**torque; int *tri; - int nlocal_bonus,nghost_bonus,nmax_bonus; + int nghost_bonus,nmax_bonus; void grow_bonus(); void copy_bonus(int, int); From 07c1942b1396fe965552aba0cc81e603e500cc7c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 17 Feb 2019 17:14:45 -0500 Subject: [PATCH 078/143] update global bonus data counters after deleting atoms --- src/delete_atoms.cpp | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/src/delete_atoms.cpp b/src/delete_atoms.cpp index ec713b8b84..9259ca4f4b 100644 --- a/src/delete_atoms.cpp +++ b/src/delete_atoms.cpp @@ -16,6 +16,10 @@ #include "delete_atoms.h" #include "atom.h" #include "atom_vec.h" +#include "atom_vec_ellipsoid.h" +#include "atom_vec_line.h" +#include "atom_vec_tri.h" +#include "atom_vec_body.h" #include "molecule.h" #include "comm.h" #include "domain.h" @@ -121,11 +125,39 @@ void DeleteAtoms::command(int narg, char **arg) } // reset atom->natoms and also topology counts - // reset atom->map if it exists - // set nghost to 0 so old ghosts of deleted atoms won't be mapped bigint nblocal = atom->nlocal; MPI_Allreduce(&nblocal,&atom->natoms,1,MPI_LMP_BIGINT,MPI_SUM,world); + + // reset bonus data counts + + AtomVecEllipsoid *avec_ellipsoid = + (AtomVecEllipsoid *) atom->style_match("ellipsoid"); + AtomVecLine *avec_line = (AtomVecLine *) atom->style_match("line"); + AtomVecTri *avec_tri = (AtomVecTri *) atom->style_match("tri"); + AtomVecBody *avec_body = (AtomVecBody *) atom->style_match("body"); + bigint nlocal_bonus; + + if (atom->nellipsoids > 0) { + nlocal_bonus = avec_ellipsoid->nlocal_bonus; + MPI_Allreduce(&nlocal_bonus,&atom->nellipsoids,1,MPI_LMP_BIGINT,MPI_MIN,world); + } + if (atom->nlines > 0) { + nlocal_bonus = avec_line->nlocal_bonus; + MPI_Allreduce(&nlocal_bonus,&atom->nlines,1,MPI_LMP_BIGINT,MPI_MIN,world); + } + if (atom->ntris > 0) { + nlocal_bonus = avec_tri->nlocal_bonus; + MPI_Allreduce(&nlocal_bonus,&atom->ntris,1,MPI_LMP_BIGINT,MPI_MIN,world); + } + if (atom->nbodies > 0) { + nlocal_bonus = avec_body->nlocal_bonus; + MPI_Allreduce(&nlocal_bonus,&atom->nbodies,1,MPI_LMP_BIGINT,MPI_MIN,world); + } + + // reset atom->map if it exists + // set nghost to 0 so old ghosts of deleted atoms won't be mapped + if (atom->map_style) { atom->nghost = 0; atom->map_init(); From 7b47c82452d8de1629f51b830e2df71981c390ce Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 17 Feb 2019 18:50:35 -0500 Subject: [PATCH 079/143] update global bonus data counters --- src/set.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/set.cpp b/src/set.cpp index 34b86ea328..00b2d8a9b0 100644 --- a/src/set.cpp +++ b/src/set.cpp @@ -964,6 +964,21 @@ void Set::set(int keyword) count++; } + // update bonus data numbers + if (keyword == SHAPE) { + bigint nlocal_bonus = avec_ellipsoid->nlocal_bonus; + MPI_Allreduce(&nlocal_bonus,&atom->nellipsoids,1, + MPI_LMP_BIGINT,MPI_SUM,world); + } + if (keyword == LENGTH) { + bigint nlocal_bonus = avec_line->nlocal_bonus; + MPI_Allreduce(&nlocal_bonus,&atom->nlines,1,MPI_LMP_BIGINT,MPI_SUM,world); + } + if (keyword == TRI) { + bigint nlocal_bonus = avec_tri->nlocal_bonus; + MPI_Allreduce(&nlocal_bonus,&atom->ntris,1,MPI_LMP_BIGINT,MPI_SUM,world); + } + // clear up per-atom memory if allocated memory->destroy(vec1); From a0450fbd2b411916aea033617ba275f31ea2ec26 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 17 Feb 2019 18:51:15 -0500 Subject: [PATCH 080/143] fix copy-n-modify error --- src/delete_atoms.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/delete_atoms.cpp b/src/delete_atoms.cpp index 9259ca4f4b..41df167f07 100644 --- a/src/delete_atoms.cpp +++ b/src/delete_atoms.cpp @@ -140,19 +140,19 @@ void DeleteAtoms::command(int narg, char **arg) if (atom->nellipsoids > 0) { nlocal_bonus = avec_ellipsoid->nlocal_bonus; - MPI_Allreduce(&nlocal_bonus,&atom->nellipsoids,1,MPI_LMP_BIGINT,MPI_MIN,world); + MPI_Allreduce(&nlocal_bonus,&atom->nellipsoids,1,MPI_LMP_BIGINT,MPI_SUM,world); } if (atom->nlines > 0) { nlocal_bonus = avec_line->nlocal_bonus; - MPI_Allreduce(&nlocal_bonus,&atom->nlines,1,MPI_LMP_BIGINT,MPI_MIN,world); + MPI_Allreduce(&nlocal_bonus,&atom->nlines,1,MPI_LMP_BIGINT,MPI_SUM,world); } if (atom->ntris > 0) { nlocal_bonus = avec_tri->nlocal_bonus; - MPI_Allreduce(&nlocal_bonus,&atom->ntris,1,MPI_LMP_BIGINT,MPI_MIN,world); + MPI_Allreduce(&nlocal_bonus,&atom->ntris,1,MPI_LMP_BIGINT,MPI_SUM,world); } if (atom->nbodies > 0) { nlocal_bonus = avec_body->nlocal_bonus; - MPI_Allreduce(&nlocal_bonus,&atom->nbodies,1,MPI_LMP_BIGINT,MPI_MIN,world); + MPI_Allreduce(&nlocal_bonus,&atom->nbodies,1,MPI_LMP_BIGINT,MPI_SUM,world); } // reset atom->map if it exists From 8db88b1c02a6b9e26e2eafad986707efb06ab85a Mon Sep 17 00:00:00 2001 From: Norbert Podhorszki Date: Thu, 24 Jan 2019 13:48:08 -0500 Subject: [PATCH 081/143] Added initial untested ADIOS 2.x code with cmake building problems --- cmake/CMakeLists.txt | 48 +++- runconf | 22 ++ src/USER-ADIOS/Install.sh | 89 +++++++ src/USER-ADIOS/README | 16 ++ src/USER-ADIOS/dump_atom_adios.cpp | 314 ++++++++++++++++++++++++ src/USER-ADIOS/dump_atom_adios.h | 70 ++++++ src/USER-ADIOS/dump_custom_adios.cpp | 354 +++++++++++++++++++++++++++ src/USER-ADIOS/dump_custom_adios.h | 94 +++++++ 8 files changed, 1005 insertions(+), 2 deletions(-) create mode 100644 runconf create mode 100644 src/USER-ADIOS/Install.sh create mode 100644 src/USER-ADIOS/README create mode 100644 src/USER-ADIOS/dump_atom_adios.cpp create mode 100644 src/USER-ADIOS/dump_atom_adios.h create mode 100644 src/USER-ADIOS/dump_custom_adios.cpp create mode 100644 src/USER-ADIOS/dump_custom_adios.h diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 9ad64a59ed..5010643fd8 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -2,7 +2,22 @@ # CMake build system # This file is part of LAMMPS # Created by Christoph Junghans and Richard Berger -cmake_minimum_required(VERSION 2.8.12) +if(PKG_USER-ADIOS) + message(STATUS "Force newer standards because using ADIOS") + cmake_minimum_required(VERSION 3.6) + # Force C++11 and C99 + set(CMAKE_CXX_STANDARD 11) + set(CMAKE_CXX_STANDARD_REQUIRED True) + # Use meta-compile features if available, otherwise use specific language + # features +# if(NOT (CMAKE_VERSION VERSION_LESS 3.9)) +# set(ADIOS2_CXX11_FEATURES cxx_std_11) +# else() +# set(ADIOS2_CXX11_FEATURES cxx_auto_type cxx_nullptr) +# endif() +else() + cmake_minimum_required(VERSION 2.8.12) +endif() project(lammps CXX) set(SOVERSION 0) @@ -178,7 +193,7 @@ set(DEFAULT_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS DIPOLE GRANULAR USER-MEAMC USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF USER-PHONON USER-PLUMED USER-PTM USER-QTB USER-REAXC USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK - USER-QUIP USER-QMMM USER-YAFF) + USER-QUIP USER-QMMM USER-YAFF USER-ADIOS) set(ACCEL_PACKAGES USER-OMP KOKKOS OPT USER-INTEL GPU) set(OTHER_PACKAGES CORESHELL QEQ) foreach(PKG ${DEFAULT_PACKAGES}) @@ -613,6 +628,7 @@ if(PKG_USER-NETCDF) add_definitions(-DLMP_HAS_NETCDF -DNC_64BIT_DATA=0x0020) endif() + if(PKG_USER-SMD) option(DOWNLOAD_EIGEN3 "Download Eigen3 instead of using an already installed one)" OFF) if(DOWNLOAD_EIGEN3) @@ -1354,6 +1370,34 @@ if(BUILD_EXE) endif() endif() +#if(PKG_USER-ADIOS) +# cmake_minimum_required(VERSION 3.6) +# enable_language(C) +# +# find_package(ADIOS2 REQUIRED) +## find_package(MPI REQUIRED) +# include_directories(${ADIOS2_INCLUDE_DIRS}) +## include_directories(/opt/adios2/include) +## list(APPEND LAMMPS_LINK_LIBS ${ADIOS2_LIBRARIES}) +# list(APPEND LAMMPS_LINK_LIBS ${MPI_C_LIBRARIES}) +# if(BUILD_LIB) +## target_link_libraries(lammps adios2::adios2 MPI::MPI_C) +## #target_include_directories(lammps PRIVATE ${ADIOS_INCLUDE_DIRS}) +# elseif(BUILD_EXE) +## target_link_libraries(lmp adios2::adios2 MPI::MPI_C) +# endif() +#endif(PKG_USER-ADIOS) + +if(PKG_USER-ADIOS) + enable_language(C) + find_package(ADIOS2 REQUIRED) + if(BUILD_LIB) + target_link_libraries(lammps adios2::adios2) + elseif(BUILD_EXE) + target_link_libraries(lmp adios2::adios2) + endif() +endif() + ############################################################################### # Build documentation ############################################################################### diff --git a/runconf b/runconf new file mode 100644 index 0000000000..bb313981c5 --- /dev/null +++ b/runconf @@ -0,0 +1,22 @@ + +# -D LAMMPS_SIZES=value # smallbig (default) or bigbig or smallsmall + +export HDF5_ROOT=/opt/hdf5-serial +export ADIOS2_DIR=/opt/adios2 + +cmake -D CMAKE_INSTALL_PREFIX=/opt/lammps \ + -D CMAKE_BUILD_TYPE=Debug \ + -D BUILD_MPI=yes \ + -D LAMMPS_MACHINE=adiosvm \ + -D BUILD_EXE=yes \ + -D BUILD_LIB=no \ + -D BUILD_SHARED_LIBS=no \ + -D BUILD_DOC=no \ + -D LAMMPS_SIZES=smallbig \ + -D PKG_USER-H5MD=yes \ + -D PKG_USER-ADIOS=yes \ + ../cmake + + + + diff --git a/src/USER-ADIOS/Install.sh b/src/USER-ADIOS/Install.sh new file mode 100644 index 0000000000..cae755406b --- /dev/null +++ b/src/USER-ADIOS/Install.sh @@ -0,0 +1,89 @@ +# Install/unInstall package files in LAMMPS +# mode = 0/1/2 for uninstall/install/update + +mode=$1 + +# arg1 = file, arg2 = file it depends on + +action () { + if (test $mode = 0) then + rm -f ../$1 + elif (! cmp -s $1 ../$1) then + if (test -z "$2" || test -e ../$2) then + cp $1 .. + if (test $mode = 2) then + echo " updating src/$1" + fi + fi + elif (test -n "$2") then + if (test ! -e ../$2) then + rm -f ../$1 + fi + fi +} + +for file in *.cpp *.h; do + action $file +done + +# edit 2 Makefile.package files to include/exclude package info + +if (test $1 = 1) then + +# if (test -z "$ADIOS_DIR") then +# if command -v adios_config; then +# ADIOS_DIR=`adios_config -d` +# else +# echo "ERROR: ADIOS_DIR environment variable needs to point to ADIOS" \ +# " installation directory or adios_config should be in PATH" +# fi +# fi +# ADIOS_INC=-I${ADIOS_DIR}/include +# ADIOS_LIB=`${ADIOS_DIR}/bin/adios_config -l` +# +# echo "adios_SYSINC=${ADIOS_INC} +#adios_SYSLIB=${ADIOS_LIB} +#adios_SYSPATH=${ADIOS_DIR} +#" > ../Makefile.adios + + + if (test -e ../Makefile.package) then + sed -i -e 's/[^ \t]*adios[^ \t]* //g' ../Makefile.package + sed -i -e 's/-DLMP_ADIOS //g' ../Makefile.package + sed -i -e '/^adios_SYS.*$/d' ../Makefile.package +# sed -i -e '4 i \ +#adios_SYSINC='"${ADIOS_INC}"' +#' ../Makefile.package +# sed -i -e '5 i \ +#adios_SYSLIB='"${ADIOS_LIB}"' +#' ../Makefile.package +# sed -i -e '6 i \ +#adios_SYSPATH='"${ADIOS_DIR}"' +#' ../Makefile.package + sed -i -e 's|^PKG_INC =[ \t]*|&-DLMP_ADIOS |' ../Makefile.package + sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(adios_SYSINC) |' ../Makefile.package + sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(adios_SYSLIB) |' ../Makefile.package + sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(adios_SYSPATH) |' ../Makefile.package + fi + + if (test -e ../Makefile.package.settings) then + sed -i -e '/^include.*adios.*$/d' ../Makefile.package.settings + # multiline form needed for BSD sed on Macs + sed -i -e '4 i \ +include ..\/..\/lib\/adios\/Makefile.lammps +' ../Makefile.package.settings + fi + +elif (test $1 = 0) then + + if (test -e ../Makefile.package) then + sed -i -e 's/[^ \t]*adios[^ \t]* //g' ../Makefile.package + sed -i -e 's/-DLMP_ADIOS //g' ../Makefile.package + sed -i -e '/^adios_SYS.*$/d' ../Makefile.package + fi + + if (test -e ../Makefile.package.settings) then + sed -i -e '/^include.*adios.*$/d' ../Makefile.package.settings + fi + +fi diff --git a/src/USER-ADIOS/README b/src/USER-ADIOS/README new file mode 100644 index 0000000000..49717a741f --- /dev/null +++ b/src/USER-ADIOS/README @@ -0,0 +1,16 @@ +This package provides the adios dump and restart styles. + +See the doc page for the "dump adios" and "restart adios" commands. +These styles require having ADIOS 2.x itself installed on your system. + +Configure LAMMPS with CMake + a. set the environment variable + ADIOS2_DIR + to the ADIOS 2.x installation path + b. use the cmake option + -D PKG_USER-ADIOS=yes + +The person who created this package is Norbert Podhorszki (Oak Ridge National Laboratory); +If you need help, please submit a ticket at the OLCF ticket user support mentioning his name in the ticket. +https://www.olcf.ornl.gov/support/submit-ticket + diff --git a/src/USER-ADIOS/dump_atom_adios.cpp b/src/USER-ADIOS/dump_atom_adios.cpp new file mode 100644 index 0000000000..b6ace357ac --- /dev/null +++ b/src/USER-ADIOS/dump_atom_adios.cpp @@ -0,0 +1,314 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Norbert Podhorszki (ORNL) +------------------------------------------------------------------------- */ + +#include +#include "dump_atom_adios.h" +#include "domain.h" +#include "atom.h" +#include "update.h" +#include "group.h" +#include "memory.h" +#include "universe.h" +#include "error.h" + + +using namespace LAMMPS_NS; + +#define MAX_TEXT_HEADER_SIZE 4096 +#define DUMP_BUF_CHUNK_SIZE 16384 +#define DUMP_BUF_INCREMENT_SIZE 4096 + +/* ---------------------------------------------------------------------- */ + +DumpAtomADIOS::DumpAtomADIOS(LAMMPS *lmp, int narg, char **arg) : + DumpAtom(lmp, narg, arg) +{ + ad = new adios2::ADIOS("adios2_config.xml", world, adios2::DebugON); + groupSize = 0; +} + +/* ---------------------------------------------------------------------- */ + +DumpAtomADIOS::~DumpAtomADIOS() +{ + if (fh) + { + fh.Close(); + } +} + +/* ---------------------------------------------------------------------- */ + +void DumpAtomADIOS::openfile() +{ + if (multifile) { + // if one file per timestep, replace '*' with current timestep + char *filestar = strdup(filename); + char *filecurrent = new char[strlen(filestar) + 16]; + char *ptr = strchr(filestar,'*'); + *ptr = '\0'; + if (padflag == 0) + sprintf(filecurrent,"%s" BIGINT_FORMAT "%s", + filestar,update->ntimestep,ptr+1); + else { + char bif[8],pad[16]; + strcpy(bif,BIGINT_FORMAT); + sprintf(pad,"%%s%%0%d%s%%s",padflag,&bif[1]); + sprintf(filecurrent,pad,filestar,update->ntimestep,ptr+1); + } + fh = io.Open(filecurrent, adios2::Mode::Write, world); + if (!fh) { + char str[128]; + sprintf(str,"Cannot open dump file %s",filecurrent); + error->one(FLERR,str); + } + free(filestar); + delete [] filecurrent; + } + else + { + if (!singlefile_opened) + { + fh = io.Open(filename, adios2::Mode::Write, world); + if (!fh) { + char str[128]; + sprintf(str,"Cannot open dump file %s",filename); + error->one(FLERR,str); + } + singlefile_opened = 1; + } + + } +} + +/* ---------------------------------------------------------------------- */ + +void DumpAtomADIOS::write() +{ + if (domain->triclinic == 0) { + boxxlo = domain->boxlo[0]; + boxxhi = domain->boxhi[0]; + boxylo = domain->boxlo[1]; + boxyhi = domain->boxhi[1]; + boxzlo = domain->boxlo[2]; + boxzhi = domain->boxhi[2]; + } else { + boxxlo = domain->boxlo_bound[0]; + boxxhi = domain->boxhi_bound[0]; + boxylo = domain->boxlo_bound[1]; + boxyhi = domain->boxhi_bound[1]; + boxzlo = domain->boxlo_bound[2]; + boxzhi = domain->boxhi_bound[2]; + boxxy = domain->xy; + boxxz = domain->xz; + boxyz = domain->yz; + } + + // nme = # of dump lines this proc contributes to dump + + nme = count(); + + // ntotal = total # of atoms in snapshot + // atomOffset = sum of # of atoms up to this proc (exclusive prefix sum) + + bigint bnme = nme; + MPI_Allreduce(&bnme,&ntotal,1,MPI_LMP_BIGINT,MPI_SUM,world); + + bigint atomOffset; // sum of all atoms on processes 0..me-1 + MPI_Scan (&bnme, &atomOffset, 1, MPI_LMP_BIGINT, MPI_SUM, world); + atomOffset -= nme; // exclusive prefix sum needed + + // Now we know the global size and the local subset size and offset + // of the atoms table + size_t nAtomsGlobal = static_cast(ntotal); + size_t startRow = static_cast(atomOffset); + size_t nAtomsLocal = static_cast(nme); + size_t nColumns = static_cast(size_one); + varAtoms.SetShape({nAtomsGlobal,nColumns}); + varAtoms.SetSelection({{startRow, 0}, {nAtomsLocal,nColumns}}); + + // insure buf is sized for packing + // adios does not limit per-process data size so nme*size_one is not constrained to int + // if sorting on IDs also request ID list from pack() + // sort buf as needed + + if (nme > maxbuf) { + maxbuf = nme; + memory->destroy(buf); + memory->create(buf,(maxbuf*size_one),"dump:buf"); + } + if (sort_flag && sortcol == 0 && nme > maxids) { + maxids = nme; + memory->destroy(ids); + memory->create(ids,maxids,"dump:ids"); + } + + if (sort_flag && sortcol == 0) pack(ids); + else pack(NULL); + if (sort_flag) sort(); + + // Calculate data size written by this process + groupSize = nme * size_one * sizeof(double); // size of atoms data on this process + groupSize += 3*sizeof(uint64_t) + 1*sizeof(int); // scalars written by each process + if (me == 0) { + groupSize += 1*sizeof(uint64_t) + 1*sizeof(int) + 6*sizeof(double); // scalars + if (domain->triclinic) { + groupSize += 3*sizeof(double); // boxxy, boxxz, boxyz + } + } + + openfile(); + fh.BeginStep(); + // write info on data as scalars (by me==0) + if (me == 0) { + fh.Put("ntimestep", update->ntimestep); + fh.Put("nprocs", nprocs); + + fh.Put("boxxlo", boxxlo); + fh.Put("boxxhi", boxxhi); + fh.Put("boxylo", boxylo); + fh.Put("boxyhi", boxyhi); + fh.Put("boxzlo", boxzlo); + fh.Put("boxzhi", boxzhi); + + if (domain->triclinic) { + fh.Put("boxxy", boxxy); + fh.Put("boxxz", boxxz); + fh.Put("boxyz", boxyz); + } + } + // Everyone needs to write scalar variables that are used as dimensions and offsets of arrays + fh.Put("natoms", ntotal); + fh.Put("ncolumns", size_one); + fh.Put("nme", bnme); + fh.Put("offset", atomOffset); + // now write the atoms + fh.Put("atoms", buf); + fh.EndStep();// I/O will happen now... + + if (multifile) + { + fh.Close(); + } +} + +/* ---------------------------------------------------------------------- */ + +void DumpAtomADIOS::init_style() +{ + if (image_flag == 0) size_one = 5; + else size_one = 8; + + // setup boundary string + + domain->boundary_string(boundstr); + + // remove % from filename since ADIOS always writes a global file with data/metadata + int len = strlen(filename); + char *ptr = strchr(filename,'%'); + if (ptr) { + *ptr = '\0'; + char *s = new char[len-1]; + sprintf(s,"%s%s",filename,ptr+1); + strncpy(filename,s,len); + } + + // setup column string + + if (scale_flag == 0 && image_flag == 0) + columns = (char *) "id type x y z"; + else if (scale_flag == 0 && image_flag == 1) + columns = (char *) "id type x y z ix iy iz"; + else if (scale_flag == 1 && image_flag == 0) + columns = (char *) "id type xs ys zs"; + else if (scale_flag == 1 && image_flag == 1) + columns = (char *) "id type xs ys zs ix iy iz"; + + // setup function ptrs + + if (scale_flag == 1 && image_flag == 0 && domain->triclinic == 0) + pack_choice = &DumpAtomADIOS::pack_scale_noimage; + else if (scale_flag == 1 && image_flag == 1 && domain->triclinic == 0) + pack_choice = &DumpAtomADIOS::pack_scale_image; + else if (scale_flag == 1 && image_flag == 0 && domain->triclinic == 1) + pack_choice = &DumpAtomADIOS::pack_scale_noimage_triclinic; + else if (scale_flag == 1 && image_flag == 1 && domain->triclinic == 1) + pack_choice = &DumpAtomADIOS::pack_scale_image_triclinic; + else if (scale_flag == 0 && image_flag == 0) + pack_choice = &DumpAtomADIOS::pack_noscale_noimage; + else if (scale_flag == 0 && image_flag == 1) + pack_choice = &DumpAtomADIOS::pack_noscale_image; + + /* Define the group of variables for the atom style here since it's a fixed set */ + adios2::IO io = ad->DeclareIO(ioName); + if (!io.InConfigFile()) + { + // if not defined by user, we can change the default settings + // BPFile is the default writer + io.SetEngine("BPFile"); + int num_aggregators = multiproc; + if (num_aggregators == 0) + num_aggregators = 1; + char nstreams[128]; + sprintf (nstreams, "%d", num_aggregators); + io.SetParameters({{"substreams", nstreams}}); + if (me==0 && screen) fprintf(screen, "ADIOS method for %s is n-to-m (aggregation with %s writers)\n", filename, nstreams); + } + + + io.DefineVariable("ntimestep"); + io.DefineVariable("natoms"); + + io.DefineVariable("nprocs"); + io.DefineVariable("ncolumns"); + + io.DefineVariable("boxxlo"); + io.DefineVariable("boxxhi"); + io.DefineVariable("boxylo"); + io.DefineVariable("boxyhi"); + io.DefineVariable("boxzlo"); + io.DefineVariable("boxzhi"); + + io.DefineVariable("boxxy"); + io.DefineVariable("boxxz"); + io.DefineVariable("boxyz"); + + io.DefineAttribute("triclinic", domain->triclinic); + io.DefineAttribute("scaled", scale_flag); + io.DefineAttribute("image", image_flag); + + int *boundaryptr = reinterpret_cast(domain->boundary); + io.DefineAttribute("boundary", boundaryptr, 6); + + io.DefineAttribute("columns", columns); + io.DefineAttribute("boundarystr", boundstr); + io.DefineAttribute("LAMMPS/dump_style", "atom"); + io.DefineAttribute("LAMMPS/version", universe->version); + io.DefineAttribute("LAMMPS/num_ver", universe->num_ver); + + io.DefineVariable("nme", {adios2::LocalValueDim}); // local dimension variable + io.DefineVariable("offset", {adios2::LocalValueDim}); // local dimension variable + + // atom table size is not known at the moment + // it will be correctly defined at the moment of write + size_t UnknownSizeYet = 1; + size_t nColumns = static_cast(size_one); + varAtoms = io.DefineVariable("atoms", + {UnknownSizeYet,nColumns}, + {UnknownSizeYet, 0}, + {UnknownSizeYet,nColumns}); +} diff --git a/src/USER-ADIOS/dump_atom_adios.h b/src/USER-ADIOS/dump_atom_adios.h new file mode 100644 index 0000000000..a3999bea76 --- /dev/null +++ b/src/USER-ADIOS/dump_atom_adios.h @@ -0,0 +1,70 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef DUMP_CLASS + +DumpStyle(atom/adios,DumpAtomADIOS) + +#else + +#ifndef LMP_DUMP_ATOM_ADIOS_H +#define LMP_DUMP_ATOM_ADIOS_H + +#include "dump_atom.h" +#include +#include +#include "adios2.h" + +namespace LAMMPS_NS { + +class DumpAtomADIOS : public DumpAtom { + + public: + DumpAtomADIOS(class LAMMPS *, int, char **); + virtual ~DumpAtomADIOS(); + + protected: + + const std::string ioName="atom"; // name of adios group, referrable in adios2_config.xml + adios2::ADIOS *ad = nullptr; // adios object + adios2::IO io; // adios group of variables and attributes in this dump + adios2::Engine fh; // adios file/stream handle object + adios2::Variable varAtoms; // one ADIOS output variable we need to change + uint64_t groupSize; // pre-calculate # of bytes written per processor in a step before writing anything + uint64_t groupTotalSize; // ADIOS buffer size returned by adios_group_size(), valid only if size is > default 16MB ADIOS buffer + std::string filecurrent; // name of file for this round (with % and * replaced) + + virtual void openfile(); + virtual void write(); + virtual void init_style(); + +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Cannot open dump file %s + +The output file for the dump command cannot be opened. Check that the +path and name are correct. + +E: Too much per-proc info for dump + +Number of local atoms times number of columns must fit in a 32-bit +integer for dump. + +*/ diff --git a/src/USER-ADIOS/dump_custom_adios.cpp b/src/USER-ADIOS/dump_custom_adios.cpp new file mode 100644 index 0000000000..738e6dc076 --- /dev/null +++ b/src/USER-ADIOS/dump_custom_adios.cpp @@ -0,0 +1,354 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Contributing author: Paul Coffman (IBM) +------------------------------------------------------------------------- */ + +#include +#include +#include +#include "dump_custom_adios.h" +#include "atom.h" +#include "force.h" +#include "domain.h" +#include "region.h" +#include "group.h" +#include "input.h" +#include "variable.h" +#include "update.h" +#include "modify.h" +#include "compute.h" +#include "fix.h" +#include "universe.h" +#include "memory.h" +#include "error.h" +#include + +using namespace LAMMPS_NS; + +#define MAX_TEXT_HEADER_SIZE 4096 +#define DUMP_BUF_CHUNK_SIZE 16384 +#define DUMP_BUF_INCREMENT_SIZE 4096 + +enum{ID,MOL,TYPE,ELEMENT,MASS, + X,Y,Z,XS,YS,ZS,XSTRI,YSTRI,ZSTRI,XU,YU,ZU,XUTRI,YUTRI,ZUTRI, + XSU,YSU,ZSU,XSUTRI,YSUTRI,ZSUTRI, + IX,IY,IZ, + VX,VY,VZ,FX,FY,FZ, + Q,MUX,MUY,MUZ,MU,RADIUS,DIAMETER, + OMEGAX,OMEGAY,OMEGAZ,ANGMOMX,ANGMOMY,ANGMOMZ, + TQX,TQY,TQZ,SPIN,ERADIUS,ERVEL,ERFORCE, + COMPUTE,FIX,VARIABLE}; +enum{LT,LE,GT,GE,EQ,NEQ}; +enum{INT,DOUBLE,STRING,BIGINT}; // same as in DumpCustom + +/* ---------------------------------------------------------------------- */ + +DumpCustomADIOS::DumpCustomADIOS(LAMMPS *lmp, int narg, char **arg) : + DumpCustom(lmp, narg, arg) +{ + ad = new adios2::ADIOS("adios2_config.xml", world, adios2::DebugON); + groupsize = 0; + //if (screen) fprintf(screen, "DumpCustomADIOS constructor: nvariable=%d id_variable=%p, variables=%p, nfield=%d, earg=%p\n", nvariable, id_variable, variable, nfield, earg); + columnNames.reserve(nfield); + for (int i = 0; i < nfield; ++i) { + columnNames[i]=std::string(earg[i]); + //if (screen) fprintf(screen, "earg[%d] = '%s'\n", i, earg[i]); + } +} + +/* ---------------------------------------------------------------------- */ + +DumpCustomADIOS::~DumpCustomADIOS() +{ + columnNames.clear(); + if (fh) + { + fh.Close(); + } +} + +/* ---------------------------------------------------------------------- */ + +void DumpCustomADIOS::openfile() +{ + if (multifile) { + // if one file per timestep, replace '*' with current timestep + char *filestar = strdup(filename); + char *filecurrent = new char[strlen(filestar) + 16]; + char *ptr = strchr(filestar,'*'); + *ptr = '\0'; + if (padflag == 0) + sprintf(filecurrent,"%s" BIGINT_FORMAT "%s", + filestar,update->ntimestep,ptr+1); + else { + char bif[8],pad[16]; + strcpy(bif,BIGINT_FORMAT); + sprintf(pad,"%%s%%0%d%s%%s",padflag,&bif[1]); + sprintf(filecurrent,pad,filestar,update->ntimestep,ptr+1); + } + fh = io.Open(filecurrent, adios2::Mode::Write, world); + if (!fh) { + char str[128]; + sprintf(str,"Cannot open dump file %s",filecurrent); + error->one(FLERR,str); + } + free(filestar); + delete [] filecurrent; + } + else + { + if (!singlefile_opened) + { + fh = io.Open(filename, adios2::Mode::Write, world); + if (!fh) { + char str[128]; + sprintf(str,"Cannot open dump file %s",filename); + error->one(FLERR,str); + } + singlefile_opened = 1; + } + + } +} + +/* ---------------------------------------------------------------------- */ + +void DumpCustomADIOS::write() +{ + if (domain->triclinic == 0) { + boxxlo = domain->boxlo[0]; + boxxhi = domain->boxhi[0]; + boxylo = domain->boxlo[1]; + boxyhi = domain->boxhi[1]; + boxzlo = domain->boxlo[2]; + boxzhi = domain->boxhi[2]; + } else { + boxxlo = domain->boxlo_bound[0]; + boxxhi = domain->boxhi_bound[0]; + boxylo = domain->boxlo_bound[1]; + boxyhi = domain->boxhi_bound[1]; + boxzlo = domain->boxlo_bound[2]; + boxzhi = domain->boxhi_bound[2]; + boxxy = domain->xy; + boxxz = domain->xz; + boxyz = domain->yz; + } + + // nme = # of dump lines this proc contributes to dump + + nme = count(); + + // ntotal = total # of atoms in snapshot + // atomOffset = sum of # of atoms up to this proc (exclusive prefix sum) + + bigint bnme = nme; + MPI_Allreduce(&bnme,&ntotal,1,MPI_LMP_BIGINT,MPI_SUM,world); + + bigint atomOffset; // sum of all atoms on processes 0..me-1 + MPI_Scan (&bnme, &atomOffset, 1, MPI_LMP_BIGINT, MPI_SUM, world); + atomOffset -= nme; // exclusive prefix sum needed + + // Now we know the global size and the local subset size and offset + // of the atoms table + size_t nAtomsGlobal = static_cast(ntotal); + size_t startRow = static_cast(atomOffset); + size_t nAtomsLocal = static_cast(nme); + size_t nColumns = static_cast(size_one); + varAtoms.SetShape({nAtomsGlobal,nColumns}); + varAtoms.SetSelection({{startRow, 0}, {nAtomsLocal,nColumns}}); + + // insure filewriter proc can receive everyone's info + // limit nmax*size_one to int since used as arg in MPI_Rsend() below + // pack my data into buf + // if sorting on IDs also request ID list from pack() + // sort buf as needed + + if (nme > maxbuf) { + if ((bigint) nme * size_one > MAXSMALLINT) + error->all(FLERR,"Too much per-proc info for dump"); + maxbuf = nme; + memory->destroy(buf); + memory->create(buf,(maxbuf*size_one),"dump:buf"); + } + if (sort_flag && sortcol == 0 && nme > maxids) { + maxids = nme; + memory->destroy(ids); + memory->create(ids,maxids,"dump:ids"); + } + + if (sort_flag && sortcol == 0) pack(ids); + else pack(NULL); + if (sort_flag) sort(); + + // Calculate data size written by this process + groupsize = nme * size_one * sizeof(double); // size of atoms data on this process + groupsize += 3*sizeof(uint64_t) + 1*sizeof(int); // scalars written by each process + if (me == 0) { + groupsize += 1*sizeof(uint64_t) + 1*sizeof(int) + 6*sizeof(double); // scalars + if (domain->triclinic) { + groupsize += 3*sizeof(double); // boxxy, boxxz, boxyz + } + } + + openfile(); + fh.BeginStep(); + // write info on data as scalars (by me==0) + if (me == 0) { + fh.Put("ntimestep", update->ntimestep); + fh.Put("nprocs", nprocs); + + fh.Put("boxxlo", boxxlo); + fh.Put("boxxhi", boxxhi); + fh.Put("boxylo", boxylo); + fh.Put("boxyhi", boxyhi); + fh.Put("boxzlo", boxzlo); + fh.Put("boxzhi", boxzhi); + + if (domain->triclinic) { + fh.Put("boxxy", boxxy); + fh.Put("boxxz", boxxz); + fh.Put("boxyz", boxyz); + } + } + // Everyone needs to write scalar variables that are used as dimensions and offsets of arrays + fh.Put("natoms", ntotal); + fh.Put("ncolumns", size_one); + fh.Put("nme", bnme); + fh.Put("offset", atomOffset); + // now write the atoms + fh.Put("atoms", buf); + fh.EndStep();// I/O will happen now... + + if (multifile) + { + fh.Close(); + } +} + +/* ---------------------------------------------------------------------- */ + +void DumpCustomADIOS::init_style() +{ + + // setup boundary string + + domain->boundary_string(boundstr); + + // remove % from filename since ADIOS always writes a global file with data/metadata + int len = strlen(filename); + char *ptr = strchr(filename,'%'); + if (ptr) { + *ptr = '\0'; + char *s = new char[len-1]; + sprintf(s,"%s%s",filename,ptr+1); + strncpy(filename,s,len); + } + + /* The next four loops are copied from dump_custom_mpiio, but nothing is done with them. + * It is unclear why we need them here. + * For metadata, variable[] will be written out as an ADIOS attribute if nvariable>0 + */ + // find current ptr for each compute,fix,variable + // check that fix frequency is acceptable + int icompute; + for (int i = 0; i < ncompute; i++) { + icompute = modify->find_compute(id_compute[i]); + if (icompute < 0) error->all(FLERR,"Could not find dump custom compute ID"); + compute[i] = modify->compute[icompute]; + } + + int ifix; + for (int i = 0; i < nfix; i++) { + ifix = modify->find_fix(id_fix[i]); + if (ifix < 0) error->all(FLERR,"Could not find dump custom fix ID"); + fix[i] = modify->fix[ifix]; + if (nevery % modify->fix[ifix]->peratom_freq) + error->all(FLERR,"Dump custom and fix not computed at compatible times"); + } + + int ivariable; + for (int i = 0; i < nvariable; i++) { + ivariable = input->variable->find(id_variable[i]); + if (ivariable < 0) + error->all(FLERR,"Could not find dump custom variable name"); + variable[i] = ivariable; + } + + // set index and check validity of region + if (iregion >= 0) { + iregion = domain->find_region(idregion); + if (iregion == -1) + error->all(FLERR,"Region ID for dump custom does not exist"); + } + + /* Define the group of variables for the atom style here since it's a fixed set */ + adios2::IO io = ad->DeclareIO(ioName); + if (!io.InConfigFile()) + { + // if not defined by user, we can change the default settings + // BPFile is the default writer + io.SetEngine("BPFile"); + int num_aggregators = multiproc; + if (num_aggregators == 0) + num_aggregators = 1; + char nstreams[128]; + sprintf (nstreams, "%d", num_aggregators); + io.SetParameters({{"substreams", nstreams}}); + if (me==0 && screen) fprintf(screen, "ADIOS method for %s is n-to-m (aggregation with %s writers)\n", filename, nstreams); + } + + + io.DefineVariable("ntimestep"); + io.DefineVariable("natoms"); + + io.DefineVariable("nprocs"); + io.DefineVariable("ncolumns"); + + io.DefineVariable("boxxlo"); + io.DefineVariable("boxxhi"); + io.DefineVariable("boxylo"); + io.DefineVariable("boxyhi"); + io.DefineVariable("boxzlo"); + io.DefineVariable("boxzhi"); + + io.DefineVariable("boxxy"); + io.DefineVariable("boxxz"); + io.DefineVariable("boxyz"); + + io.DefineAttribute("triclinic", domain->triclinic); + + int *boundaryptr = reinterpret_cast(domain->boundary); + io.DefineAttribute("boundary", boundaryptr, 6); + + size_t nColumns = static_cast(size_one); + io.DefineAttribute("columns", columnNames.data(), nColumns); + io.DefineAttribute("columnstr", columns); + io.DefineAttribute("boundarystr", boundstr); + io.DefineAttribute("LAMMPS/dump_style", "atom"); + io.DefineAttribute("LAMMPS/version", universe->version); + io.DefineAttribute("LAMMPS/num_ver", universe->num_ver); + + io.DefineVariable("nme", {adios2::LocalValueDim}); // local dimension variable + io.DefineVariable("offset", {adios2::LocalValueDim}); // local dimension variable + + // atom table size is not known at the moment + // it will be correctly defined at the moment of write + size_t UnknownSizeYet = 1; + varAtoms = io.DefineVariable("atoms", + {UnknownSizeYet,nColumns}, + {UnknownSizeYet, 0}, + {UnknownSizeYet,nColumns}); + +} diff --git a/src/USER-ADIOS/dump_custom_adios.h b/src/USER-ADIOS/dump_custom_adios.h new file mode 100644 index 0000000000..2461e20b2e --- /dev/null +++ b/src/USER-ADIOS/dump_custom_adios.h @@ -0,0 +1,94 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifdef DUMP_CLASS + +DumpStyle(custom/adios,DumpCustomADIOS) + +#else + +#ifndef LMP_DUMP_CUSTOM_ADIOS_H +#define LMP_DUMP_CUSTOM_ADIOS_H + +#include "dump_custom.h" +#include +#include +#include "adios2.h" + +namespace LAMMPS_NS { + +class DumpCustomADIOS : public DumpCustom { + public: + DumpCustomADIOS(class LAMMPS *, int, char **); + virtual ~DumpCustomADIOS(); + + protected: + + const std::string ioName="custom"; // name of adios group, referrable in adios2_config.xml + adios2::ADIOS *ad = nullptr; // adios object + adios2::IO io; // adios group of variables and attributes in this dump + adios2::Engine fh; // adios file/stream handle object + adios2::Variable varAtoms; // one ADIOS output variable we need to change + uint64_t groupsize; // pre-calculate # of bytes written per processor in a step before writing anything + std::vectorcolumnNames; // list of column names for the atom table (individual list of 'columns' string) + + virtual void openfile(); + virtual void write(); + virtual void init_style(); + +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Cannot open dump file %s + +The output file for the dump command cannot be opened. Check that the +path and name are correct. + +E: Too much per-proc info for dump + +Number of local atoms times number of columns must fit in a 32-bit +integer for dump. + +E: Dump_modify format string is too short + +There are more fields to be dumped in a line of output than your +format string specifies. + +E: Could not find dump custom compute ID + +Self-explanatory. + +E: Could not find dump custom fix ID + +Self-explanatory. + +E: Dump custom and fix not computed at compatible times + +The fix must produce per-atom quantities on timesteps that dump custom +needs them. + +E: Could not find dump custom variable name + +Self-explanatory. + +E: Region ID for dump custom does not exist + +Self-explanatory. + +*/ From 24234d3a0bc43ba1ba22800c0fb9fafd24464309 Mon Sep 17 00:00:00 2001 From: Norbert Podhorszki Date: Thu, 24 Jan 2019 14:14:50 -0500 Subject: [PATCH 082/143] Fixed cmake build for ADIOS 2.x --- cmake/CMakeLists.txt | 38 +++++++++++--------------------------- runconf | 2 +- 2 files changed, 12 insertions(+), 28 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 5010643fd8..bf2a176d58 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -216,6 +216,17 @@ endif() include_directories(${LAMMPS_SOURCE_DIR}) + +if(PKG_USER-ADIOS) + # The search for ADIOS2 must come before MPI because + # it includes its own MPI search with the latest FindMPI.cmake + # script that defines the MPI::MPI_C target + enable_language(C) + find_package(ADIOS2 REQUIRED) + list(APPEND LAMMPS_LINK_LIBS adios2::adios2) +endif() + + # do MPI detection after language activation, if MPI for these language is required find_package(MPI QUIET) option(BUILD_MPI "Build MPI version" ${MPI_FOUND}) @@ -1370,33 +1381,6 @@ if(BUILD_EXE) endif() endif() -#if(PKG_USER-ADIOS) -# cmake_minimum_required(VERSION 3.6) -# enable_language(C) -# -# find_package(ADIOS2 REQUIRED) -## find_package(MPI REQUIRED) -# include_directories(${ADIOS2_INCLUDE_DIRS}) -## include_directories(/opt/adios2/include) -## list(APPEND LAMMPS_LINK_LIBS ${ADIOS2_LIBRARIES}) -# list(APPEND LAMMPS_LINK_LIBS ${MPI_C_LIBRARIES}) -# if(BUILD_LIB) -## target_link_libraries(lammps adios2::adios2 MPI::MPI_C) -## #target_include_directories(lammps PRIVATE ${ADIOS_INCLUDE_DIRS}) -# elseif(BUILD_EXE) -## target_link_libraries(lmp adios2::adios2 MPI::MPI_C) -# endif() -#endif(PKG_USER-ADIOS) - -if(PKG_USER-ADIOS) - enable_language(C) - find_package(ADIOS2 REQUIRED) - if(BUILD_LIB) - target_link_libraries(lammps adios2::adios2) - elseif(BUILD_EXE) - target_link_libraries(lmp adios2::adios2) - endif() -endif() ############################################################################### # Build documentation diff --git a/runconf b/runconf index bb313981c5..18f05f38a5 100644 --- a/runconf +++ b/runconf @@ -1,7 +1,7 @@ # -D LAMMPS_SIZES=value # smallbig (default) or bigbig or smallsmall -export HDF5_ROOT=/opt/hdf5-serial +export HDF5_ROOT=/opt/hdf5-parallel export ADIOS2_DIR=/opt/adios2 cmake -D CMAKE_INSTALL_PREFIX=/opt/lammps \ From 200fed9d4c484318002779e728d33ad234d7cb55 Mon Sep 17 00:00:00 2001 From: Norbert Podhorszki Date: Thu, 24 Jan 2019 15:00:32 -0500 Subject: [PATCH 083/143] Fix basic errors in USER-ADIOS code --- src/USER-ADIOS/dump_atom_adios.cpp | 2 +- src/USER-ADIOS/dump_custom_adios.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/USER-ADIOS/dump_atom_adios.cpp b/src/USER-ADIOS/dump_atom_adios.cpp index b6ace357ac..e7a5f05e9d 100644 --- a/src/USER-ADIOS/dump_atom_adios.cpp +++ b/src/USER-ADIOS/dump_atom_adios.cpp @@ -254,7 +254,7 @@ void DumpAtomADIOS::init_style() pack_choice = &DumpAtomADIOS::pack_noscale_image; /* Define the group of variables for the atom style here since it's a fixed set */ - adios2::IO io = ad->DeclareIO(ioName); + io = ad->DeclareIO(ioName); if (!io.InConfigFile()) { // if not defined by user, we can change the default settings diff --git a/src/USER-ADIOS/dump_custom_adios.cpp b/src/USER-ADIOS/dump_custom_adios.cpp index 738e6dc076..5f54b987b1 100644 --- a/src/USER-ADIOS/dump_custom_adios.cpp +++ b/src/USER-ADIOS/dump_custom_adios.cpp @@ -63,7 +63,7 @@ DumpCustomADIOS::DumpCustomADIOS(LAMMPS *lmp, int narg, char **arg) : //if (screen) fprintf(screen, "DumpCustomADIOS constructor: nvariable=%d id_variable=%p, variables=%p, nfield=%d, earg=%p\n", nvariable, id_variable, variable, nfield, earg); columnNames.reserve(nfield); for (int i = 0; i < nfield; ++i) { - columnNames[i]=std::string(earg[i]); + columnNames.push_back(earg[i]); //if (screen) fprintf(screen, "earg[%d] = '%s'\n", i, earg[i]); } } @@ -294,7 +294,7 @@ void DumpCustomADIOS::init_style() } /* Define the group of variables for the atom style here since it's a fixed set */ - adios2::IO io = ad->DeclareIO(ioName); + io = ad->DeclareIO(ioName); if (!io.InConfigFile()) { // if not defined by user, we can change the default settings From 410d79d8b7d8ce4f01db038e10bd2a043a8dcdfd Mon Sep 17 00:00:00 2001 From: Norbert Podhorszki Date: Thu, 24 Jan 2019 15:01:15 -0500 Subject: [PATCH 084/143] Add an example for USER/adios based on the balance example --- examples/USER/adios/adios2_config.xml | 45 ++++++++++ examples/USER/adios/in.adios_balance | 56 +++++++++++++ examples/USER/adios/log.balance | 114 ++++++++++++++++++++++++++ 3 files changed, 215 insertions(+) create mode 100644 examples/USER/adios/adios2_config.xml create mode 100644 examples/USER/adios/in.adios_balance create mode 100644 examples/USER/adios/log.balance diff --git a/examples/USER/adios/adios2_config.xml b/examples/USER/adios/adios2_config.xml new file mode 100644 index 0000000000..5e1908eb52 --- /dev/null +++ b/examples/USER/adios/adios2_config.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/USER/adios/in.adios_balance b/examples/USER/adios/in.adios_balance new file mode 100644 index 0000000000..b44870afbb --- /dev/null +++ b/examples/USER/adios/in.adios_balance @@ -0,0 +1,56 @@ +# 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 +region box block 0 $x 0 $y -0.5 0.5 +create_box 1 box +region circle sphere $(v_d/2+1) $(v_d/2/sqrt(3.0)+1) 0.0 $(v_d/2) +create_atoms 1 region circle +mass 1 1.0 + +velocity all create 0.5 87287 loop geom +velocity all set $v $w 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 3 all wall/lj93 ylo 0.0 1 1 2.5 yhi $y 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 balance.dump id v_p x y z +dump 3 all custom/adios 50 balance_custom.bp id v_p x y z +dump 4 all atom/adios 50 balance_atom.bp + +#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 200 diff --git a/examples/USER/adios/log.balance b/examples/USER/adios/log.balance new file mode 100644 index 0000000000..162ecf7741 --- /dev/null +++ b/examples/USER/adios/log.balance @@ -0,0 +1,114 @@ +LAMMPS (4 Jan 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + 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.00171804 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 balance.dump id v_p x y z +dump 3 all custom/adios 50 balance_custom.bp id v_p x y z +dump 4 all atom/adios 50 balance_atom.bp + +#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 200 +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) = 4.926 | 4.933 | 4.944 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 +Loop time of 0.0992351 on 4 procs for 200 steps with 361 atoms + +Performance: 870660.046 tau/day, 2015.417 timesteps/s +32.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.0078368 | 0.0081607 | 0.0085468 | 0.3 | 8.22 +Neigh | 0.002804 | 0.0045915 | 0.0092173 | 3.9 | 4.63 +Comm | 0.044407 | 0.05352 | 0.062051 | 3.0 | 53.93 +Output | 0.011406 | 0.012025 | 0.01342 | 0.7 | 12.12 +Modify | 0.006305 | 0.0064294 | 0.0066617 | 0.2 | 6.48 +Other | | 0.01451 | | | 14.62 + +Nlocal: 90.25 ave 91 max 90 min +Histogram: 3 0 0 0 0 0 0 0 0 1 +Nghost: 58.25 ave 64 max 51 min +Histogram: 1 0 0 0 0 0 2 0 0 1 +Neighs: 730.75 ave 801 max 671 min +Histogram: 1 0 1 0 0 1 0 0 0 1 + +Total # of neighbors = 2923 +Ave neighs/atom = 8.09695 +Neighbor list builds = 60 +Dangerous builds = 0 +Total wall time: 0:00:00 From a4b9542ba95581a299c421e8d0b20545af06df68 Mon Sep 17 00:00:00 2001 From: Norbert Podhorszki Date: Wed, 6 Feb 2019 14:32:01 -0500 Subject: [PATCH 085/143] remove personal runconf file. cleanup ADIOS2 xml config file for example --- examples/USER/adios/adios2_config.xml | 17 ++--------------- runconf | 22 ---------------------- 2 files changed, 2 insertions(+), 37 deletions(-) delete mode 100644 runconf diff --git a/examples/USER/adios/adios2_config.xml b/examples/USER/adios/adios2_config.xml index 5e1908eb52..7462731d43 100644 --- a/examples/USER/adios/adios2_config.xml +++ b/examples/USER/adios/adios2_config.xml @@ -4,25 +4,12 @@ - - diff --git a/runconf b/runconf deleted file mode 100644 index 18f05f38a5..0000000000 --- a/runconf +++ /dev/null @@ -1,22 +0,0 @@ - -# -D LAMMPS_SIZES=value # smallbig (default) or bigbig or smallsmall - -export HDF5_ROOT=/opt/hdf5-parallel -export ADIOS2_DIR=/opt/adios2 - -cmake -D CMAKE_INSTALL_PREFIX=/opt/lammps \ - -D CMAKE_BUILD_TYPE=Debug \ - -D BUILD_MPI=yes \ - -D LAMMPS_MACHINE=adiosvm \ - -D BUILD_EXE=yes \ - -D BUILD_LIB=no \ - -D BUILD_SHARED_LIBS=no \ - -D BUILD_DOC=no \ - -D LAMMPS_SIZES=smallbig \ - -D PKG_USER-H5MD=yes \ - -D PKG_USER-ADIOS=yes \ - ../cmake - - - - From 9c52a3754681686500412345c4dad983745cc19e Mon Sep 17 00:00:00 2001 From: Norbert Podhorszki Date: Thu, 7 Feb 2019 16:38:36 -0500 Subject: [PATCH 086/143] PIMPL implementation of USER-ADIOS to hide internal data from style header file --- cmake/CMakeLists.txt | 9 +- src/USER-ADIOS/dump_atom_adios.cpp | 275 ++++++++++--------- src/USER-ADIOS/dump_atom_adios.h | 58 ++-- src/USER-ADIOS/dump_custom_adios.cpp | 384 ++++++++++++++++----------- src/USER-ADIOS/dump_custom_adios.h | 85 +++--- 5 files changed, 447 insertions(+), 364 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index bf2a176d58..e5d362fe52 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -3,18 +3,11 @@ # This file is part of LAMMPS # Created by Christoph Junghans and Richard Berger if(PKG_USER-ADIOS) - message(STATUS "Force newer standards because using ADIOS") + message(STATUS "Force newer standards because of using ADIOS") cmake_minimum_required(VERSION 3.6) # Force C++11 and C99 set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED True) - # Use meta-compile features if available, otherwise use specific language - # features -# if(NOT (CMAKE_VERSION VERSION_LESS 3.9)) -# set(ADIOS2_CXX11_FEATURES cxx_std_11) -# else() -# set(ADIOS2_CXX11_FEATURES cxx_auto_type cxx_nullptr) -# endif() else() cmake_minimum_required(VERSION 2.8.12) endif() diff --git a/src/USER-ADIOS/dump_atom_adios.cpp b/src/USER-ADIOS/dump_atom_adios.cpp index e7a5f05e9d..55d6c5fbf9 100644 --- a/src/USER-ADIOS/dump_atom_adios.cpp +++ b/src/USER-ADIOS/dump_atom_adios.cpp @@ -15,16 +15,17 @@ Contributing author: Norbert Podhorszki (ORNL) ------------------------------------------------------------------------- */ -#include #include "dump_atom_adios.h" -#include "domain.h" #include "atom.h" -#include "update.h" +#include "domain.h" +#include "error.h" #include "group.h" #include "memory.h" #include "universe.h" -#include "error.h" +#include "update.h" +#include +#include "adios2.h" using namespace LAMMPS_NS; @@ -32,23 +33,44 @@ using namespace LAMMPS_NS; #define DUMP_BUF_CHUNK_SIZE 16384 #define DUMP_BUF_INCREMENT_SIZE 4096 +namespace LAMMPS_NS +{ +class DumpAtomADIOSInternal +{ + +public: + DumpAtomADIOSInternal(){}; + ~DumpAtomADIOSInternal() = default; + + // name of adios group, referrable in adios2_config.xml + const std::string ioName = "atom"; + adios2::ADIOS *ad = nullptr; // adios object + adios2::IO io; // adios group of variables and attributes in this dump + adios2::Engine fh; // adios file/stream handle object + // one ADIOS output variable we need to change every step + adios2::Variable varAtoms; +}; +} + /* ---------------------------------------------------------------------- */ -DumpAtomADIOS::DumpAtomADIOS(LAMMPS *lmp, int narg, char **arg) : - DumpAtom(lmp, narg, arg) +DumpAtomADIOS::DumpAtomADIOS(LAMMPS *lmp, int narg, char **arg) +: DumpAtom(lmp, narg, arg) { - ad = new adios2::ADIOS("adios2_config.xml", world, adios2::DebugON); - groupSize = 0; + internal = new DumpAtomADIOSInternal(); + internal->ad = + new adios2::ADIOS("adios2_config.xml", world, adios2::DebugON); } /* ---------------------------------------------------------------------- */ DumpAtomADIOS::~DumpAtomADIOS() { - if (fh) - { - fh.Close(); + if (internal->fh) { + internal->fh.Close(); } + delete internal->ad; + delete internal; } /* ---------------------------------------------------------------------- */ @@ -59,39 +81,39 @@ void DumpAtomADIOS::openfile() // if one file per timestep, replace '*' with current timestep char *filestar = strdup(filename); char *filecurrent = new char[strlen(filestar) + 16]; - char *ptr = strchr(filestar,'*'); + char *ptr = strchr(filestar, '*'); *ptr = '\0'; if (padflag == 0) - sprintf(filecurrent,"%s" BIGINT_FORMAT "%s", - filestar,update->ntimestep,ptr+1); + snprintf(filecurrent, sizeof(filecurrent), "%s" BIGINT_FORMAT "%s", + filestar, update->ntimestep, ptr + 1); else { - char bif[8],pad[16]; - strcpy(bif,BIGINT_FORMAT); - sprintf(pad,"%%s%%0%d%s%%s",padflag,&bif[1]); - sprintf(filecurrent,pad,filestar,update->ntimestep,ptr+1); + char bif[8], pad[16]; + strcpy(bif, BIGINT_FORMAT); + snprintf(pad, sizeof(pad), "%%s%%0%d%s%%s", padflag, &bif[1]); + snprintf(filecurrent, sizeof(filecurrent), pad, filestar, + update->ntimestep, ptr + 1); } - fh = io.Open(filecurrent, adios2::Mode::Write, world); - if (!fh) { + internal->fh = + internal->io.Open(filecurrent, adios2::Mode::Write, world); + if (!internal->fh) { char str[128]; - sprintf(str,"Cannot open dump file %s",filecurrent); - error->one(FLERR,str); + snprintf(str, sizeof(str), "Cannot open dump file %s", filecurrent); + error->one(FLERR, str); } free(filestar); - delete [] filecurrent; - } - else - { - if (!singlefile_opened) - { - fh = io.Open(filename, adios2::Mode::Write, world); - if (!fh) { + delete[] filecurrent; + } else { + if (!singlefile_opened) { + internal->fh = + internal->io.Open(filename, adios2::Mode::Write, world); + if (!internal->fh) { char str[128]; - sprintf(str,"Cannot open dump file %s",filename); - error->one(FLERR,str); + snprintf(str, sizeof(str), "Cannot open dump file %s", + filename); + error->one(FLERR, str); } singlefile_opened = 1; } - } } @@ -126,83 +148,77 @@ void DumpAtomADIOS::write() // atomOffset = sum of # of atoms up to this proc (exclusive prefix sum) bigint bnme = nme; - MPI_Allreduce(&bnme,&ntotal,1,MPI_LMP_BIGINT,MPI_SUM,world); + MPI_Allreduce(&bnme, &ntotal, 1, MPI_LMP_BIGINT, MPI_SUM, world); bigint atomOffset; // sum of all atoms on processes 0..me-1 - MPI_Scan (&bnme, &atomOffset, 1, MPI_LMP_BIGINT, MPI_SUM, world); + MPI_Scan(&bnme, &atomOffset, 1, MPI_LMP_BIGINT, MPI_SUM, world); atomOffset -= nme; // exclusive prefix sum needed // Now we know the global size and the local subset size and offset - // of the atoms table + // of the atoms table size_t nAtomsGlobal = static_cast(ntotal); size_t startRow = static_cast(atomOffset); size_t nAtomsLocal = static_cast(nme); size_t nColumns = static_cast(size_one); - varAtoms.SetShape({nAtomsGlobal,nColumns}); - varAtoms.SetSelection({{startRow, 0}, {nAtomsLocal,nColumns}}); + internal->varAtoms.SetShape({nAtomsGlobal, nColumns}); + internal->varAtoms.SetSelection({{startRow, 0}, {nAtomsLocal, nColumns}}); // insure buf is sized for packing - // adios does not limit per-process data size so nme*size_one is not constrained to int + // adios does not limit per-process data size so nme*size_one is not + // constrained to int // if sorting on IDs also request ID list from pack() // sort buf as needed if (nme > maxbuf) { maxbuf = nme; memory->destroy(buf); - memory->create(buf,(maxbuf*size_one),"dump:buf"); + memory->create(buf, (maxbuf * size_one), "dump:buf"); } if (sort_flag && sortcol == 0 && nme > maxids) { maxids = nme; memory->destroy(ids); - memory->create(ids,maxids,"dump:ids"); + memory->create(ids, maxids, "dump:ids"); } - if (sort_flag && sortcol == 0) pack(ids); - else pack(NULL); - if (sort_flag) sort(); - - // Calculate data size written by this process - groupSize = nme * size_one * sizeof(double); // size of atoms data on this process - groupSize += 3*sizeof(uint64_t) + 1*sizeof(int); // scalars written by each process - if (me == 0) { - groupSize += 1*sizeof(uint64_t) + 1*sizeof(int) + 6*sizeof(double); // scalars - if (domain->triclinic) { - groupSize += 3*sizeof(double); // boxxy, boxxz, boxyz - } - } + if (sort_flag && sortcol == 0) + pack(ids); + else + pack(NULL); + if (sort_flag) + sort(); openfile(); - fh.BeginStep(); + internal->fh.BeginStep(); // write info on data as scalars (by me==0) if (me == 0) { - fh.Put("ntimestep", update->ntimestep); - fh.Put("nprocs", nprocs); + internal->fh.Put("ntimestep", update->ntimestep); + internal->fh.Put("nprocs", nprocs); - fh.Put("boxxlo", boxxlo); - fh.Put("boxxhi", boxxhi); - fh.Put("boxylo", boxylo); - fh.Put("boxyhi", boxyhi); - fh.Put("boxzlo", boxzlo); - fh.Put("boxzhi", boxzhi); + internal->fh.Put("boxxlo", boxxlo); + internal->fh.Put("boxxhi", boxxhi); + internal->fh.Put("boxylo", boxylo); + internal->fh.Put("boxyhi", boxyhi); + internal->fh.Put("boxzlo", boxzlo); + internal->fh.Put("boxzhi", boxzhi); if (domain->triclinic) { - fh.Put("boxxy", boxxy); - fh.Put("boxxz", boxxz); - fh.Put("boxyz", boxyz); + internal->fh.Put("boxxy", boxxy); + internal->fh.Put("boxxz", boxxz); + internal->fh.Put("boxyz", boxyz); } } - // Everyone needs to write scalar variables that are used as dimensions and offsets of arrays - fh.Put("natoms", ntotal); - fh.Put("ncolumns", size_one); - fh.Put("nme", bnme); - fh.Put("offset", atomOffset); + // Everyone needs to write scalar variables that are used as dimensions and + // offsets of arrays + internal->fh.Put("natoms", ntotal); + internal->fh.Put("ncolumns", size_one); + internal->fh.Put("nme", bnme); + internal->fh.Put("offset", atomOffset); // now write the atoms - fh.Put("atoms", buf); - fh.EndStep();// I/O will happen now... + internal->fh.Put(internal->varAtoms, buf); + internal->fh.EndStep(); // I/O will happen now... - if (multifile) - { - fh.Close(); + if (multifile) { + internal->fh.Close(); } } @@ -210,33 +226,36 @@ void DumpAtomADIOS::write() void DumpAtomADIOS::init_style() { - if (image_flag == 0) size_one = 5; - else size_one = 8; + if (image_flag == 0) + size_one = 5; + else + size_one = 8; // setup boundary string domain->boundary_string(boundstr); - // remove % from filename since ADIOS always writes a global file with data/metadata + // remove % from filename since ADIOS always writes a global file with + // data/metadata int len = strlen(filename); - char *ptr = strchr(filename,'%'); + char *ptr = strchr(filename, '%'); if (ptr) { *ptr = '\0'; - char *s = new char[len-1]; - sprintf(s,"%s%s",filename,ptr+1); - strncpy(filename,s,len); + char *s = new char[len - 1]; + snprintf(s, sizeof(s), "%s%s", filename, ptr + 1); + strncpy(filename, s, len); } // setup column string if (scale_flag == 0 && image_flag == 0) - columns = (char *) "id type x y z"; + columns = (char *)"id type x y z"; else if (scale_flag == 0 && image_flag == 1) - columns = (char *) "id type x y z ix iy iz"; + columns = (char *)"id type x y z ix iy iz"; else if (scale_flag == 1 && image_flag == 0) - columns = (char *) "id type xs ys zs"; + columns = (char *)"id type xs ys zs"; else if (scale_flag == 1 && image_flag == 1) - columns = (char *) "id type xs ys zs ix iy iz"; + columns = (char *)"id type xs ys zs ix iy iz"; // setup function ptrs @@ -253,62 +272,68 @@ void DumpAtomADIOS::init_style() else if (scale_flag == 0 && image_flag == 1) pack_choice = &DumpAtomADIOS::pack_noscale_image; - /* Define the group of variables for the atom style here since it's a fixed set */ - io = ad->DeclareIO(ioName); - if (!io.InConfigFile()) - { + /* Define the group of variables for the atom style here since it's a fixed + * set */ + internal->io = internal->ad->DeclareIO(internal->ioName); + if (!internal->io.InConfigFile()) { // if not defined by user, we can change the default settings // BPFile is the default writer - io.SetEngine("BPFile"); + internal->io.SetEngine("BPFile"); int num_aggregators = multiproc; if (num_aggregators == 0) num_aggregators = 1; char nstreams[128]; - sprintf (nstreams, "%d", num_aggregators); - io.SetParameters({{"substreams", nstreams}}); - if (me==0 && screen) fprintf(screen, "ADIOS method for %s is n-to-m (aggregation with %s writers)\n", filename, nstreams); + snprintf(nstreams, sizeof(nstreams), "%d", num_aggregators); + internal->io.SetParameters({{"substreams", nstreams}}); + if (me == 0 && screen) + fprintf( + screen, + "ADIOS method for %s is n-to-m (aggregation with %s writers)\n", + filename, nstreams); } + internal->io.DefineVariable("ntimestep"); + internal->io.DefineVariable("natoms"); - io.DefineVariable("ntimestep"); - io.DefineVariable("natoms"); + internal->io.DefineVariable("nprocs"); + internal->io.DefineVariable("ncolumns"); - io.DefineVariable("nprocs"); - io.DefineVariable("ncolumns"); + internal->io.DefineVariable("boxxlo"); + internal->io.DefineVariable("boxxhi"); + internal->io.DefineVariable("boxylo"); + internal->io.DefineVariable("boxyhi"); + internal->io.DefineVariable("boxzlo"); + internal->io.DefineVariable("boxzhi"); - io.DefineVariable("boxxlo"); - io.DefineVariable("boxxhi"); - io.DefineVariable("boxylo"); - io.DefineVariable("boxyhi"); - io.DefineVariable("boxzlo"); - io.DefineVariable("boxzhi"); + internal->io.DefineVariable("boxxy"); + internal->io.DefineVariable("boxxz"); + internal->io.DefineVariable("boxyz"); - io.DefineVariable("boxxy"); - io.DefineVariable("boxxz"); - io.DefineVariable("boxyz"); + internal->io.DefineAttribute("triclinic", domain->triclinic); + internal->io.DefineAttribute("scaled", scale_flag); + internal->io.DefineAttribute("image", image_flag); - io.DefineAttribute("triclinic", domain->triclinic); - io.DefineAttribute("scaled", scale_flag); - io.DefineAttribute("image", image_flag); + int *boundaryptr = reinterpret_cast(domain->boundary); + internal->io.DefineAttribute("boundary", boundaryptr, 6); - int *boundaryptr = reinterpret_cast(domain->boundary); - io.DefineAttribute("boundary", boundaryptr, 6); + internal->io.DefineAttribute("columns", columns); + internal->io.DefineAttribute("boundarystr", boundstr); + internal->io.DefineAttribute("LAMMPS/dump_style", "atom"); + internal->io.DefineAttribute("LAMMPS/version", + universe->version); + internal->io.DefineAttribute("LAMMPS/num_ver", + universe->num_ver); - io.DefineAttribute("columns", columns); - io.DefineAttribute("boundarystr", boundstr); - io.DefineAttribute("LAMMPS/dump_style", "atom"); - io.DefineAttribute("LAMMPS/version", universe->version); - io.DefineAttribute("LAMMPS/num_ver", universe->num_ver); - - io.DefineVariable("nme", {adios2::LocalValueDim}); // local dimension variable - io.DefineVariable("offset", {adios2::LocalValueDim}); // local dimension variable + internal->io.DefineVariable( + "nme", {adios2::LocalValueDim}); // local dimension variable + internal->io.DefineVariable( + "offset", {adios2::LocalValueDim}); // local dimension variable // atom table size is not known at the moment // it will be correctly defined at the moment of write size_t UnknownSizeYet = 1; size_t nColumns = static_cast(size_one); - varAtoms = io.DefineVariable("atoms", - {UnknownSizeYet,nColumns}, - {UnknownSizeYet, 0}, - {UnknownSizeYet,nColumns}); + internal->varAtoms = internal->io.DefineVariable( + "atoms", {UnknownSizeYet, nColumns}, {UnknownSizeYet, 0}, + {UnknownSizeYet, nColumns}); } diff --git a/src/USER-ADIOS/dump_atom_adios.h b/src/USER-ADIOS/dump_atom_adios.h index a3999bea76..dc6bc519bb 100644 --- a/src/USER-ADIOS/dump_atom_adios.h +++ b/src/USER-ADIOS/dump_atom_adios.h @@ -12,59 +12,51 @@ ------------------------------------------------------------------------- */ #ifdef DUMP_CLASS - -DumpStyle(atom/adios,DumpAtomADIOS) - +// clang-format off +DumpStyle(atom/adios, DumpAtomADIOS) +// clang-format on #else #ifndef LMP_DUMP_ATOM_ADIOS_H #define LMP_DUMP_ATOM_ADIOS_H #include "dump_atom.h" -#include -#include -#include "adios2.h" -namespace LAMMPS_NS { +namespace LAMMPS_NS +{ -class DumpAtomADIOS : public DumpAtom { +class DumpAtomADIOSInternal; - public: - DumpAtomADIOS(class LAMMPS *, int, char **); - virtual ~DumpAtomADIOS(); +class DumpAtomADIOS : public DumpAtom +{ - protected: +public: + DumpAtomADIOS(class LAMMPS *, int, char **); + virtual ~DumpAtomADIOS(); - const std::string ioName="atom"; // name of adios group, referrable in adios2_config.xml - adios2::ADIOS *ad = nullptr; // adios object - adios2::IO io; // adios group of variables and attributes in this dump - adios2::Engine fh; // adios file/stream handle object - adios2::Variable varAtoms; // one ADIOS output variable we need to change - uint64_t groupSize; // pre-calculate # of bytes written per processor in a step before writing anything - uint64_t groupTotalSize; // ADIOS buffer size returned by adios_group_size(), valid only if size is > default 16MB ADIOS buffer - std::string filecurrent; // name of file for this round (with % and * replaced) - - virtual void openfile(); - virtual void write(); - virtual void init_style(); +protected: + virtual void openfile(); + virtual void write(); + virtual void init_style(); +private: + DumpAtomADIOSInternal *internal; }; - } #endif #endif -/* ERROR/WARNING messages: + /* ERROR/WARNING messages: -E: Cannot open dump file %s + E: Cannot open dump file %s -The output file for the dump command cannot be opened. Check that the -path and name are correct. + The output file for the dump command cannot be opened. Check that the + path and name are correct. -E: Too much per-proc info for dump + E: Too much per-proc info for dump -Number of local atoms times number of columns must fit in a 32-bit -integer for dump. + Number of local atoms times number of columns must fit in a 32-bit + integer for dump. -*/ + */ diff --git a/src/USER-ADIOS/dump_custom_adios.cpp b/src/USER-ADIOS/dump_custom_adios.cpp index 5f54b987b1..5b76688098 100644 --- a/src/USER-ADIOS/dump_custom_adios.cpp +++ b/src/USER-ADIOS/dump_custom_adios.cpp @@ -15,25 +15,25 @@ Contributing author: Paul Coffman (IBM) ------------------------------------------------------------------------- */ -#include -#include -#include #include "dump_custom_adios.h" #include "atom.h" -#include "force.h" +#include "compute.h" #include "domain.h" -#include "region.h" +#include "error.h" +#include "fix.h" +#include "force.h" #include "group.h" #include "input.h" -#include "variable.h" -#include "update.h" -#include "modify.h" -#include "compute.h" -#include "fix.h" -#include "universe.h" #include "memory.h" -#include "error.h" -#include +#include "modify.h" +#include "region.h" +#include "universe.h" +#include "update.h" +#include "variable.h" +#include +#include + +#include "adios2.h" using namespace LAMMPS_NS; @@ -41,30 +41,107 @@ using namespace LAMMPS_NS; #define DUMP_BUF_CHUNK_SIZE 16384 #define DUMP_BUF_INCREMENT_SIZE 4096 -enum{ID,MOL,TYPE,ELEMENT,MASS, - X,Y,Z,XS,YS,ZS,XSTRI,YSTRI,ZSTRI,XU,YU,ZU,XUTRI,YUTRI,ZUTRI, - XSU,YSU,ZSU,XSUTRI,YSUTRI,ZSUTRI, - IX,IY,IZ, - VX,VY,VZ,FX,FY,FZ, - Q,MUX,MUY,MUZ,MU,RADIUS,DIAMETER, - OMEGAX,OMEGAY,OMEGAZ,ANGMOMX,ANGMOMY,ANGMOMZ, - TQX,TQY,TQZ,SPIN,ERADIUS,ERVEL,ERFORCE, - COMPUTE,FIX,VARIABLE}; -enum{LT,LE,GT,GE,EQ,NEQ}; -enum{INT,DOUBLE,STRING,BIGINT}; // same as in DumpCustom +enum { + ID, + MOL, + TYPE, + ELEMENT, + MASS, + X, + Y, + Z, + XS, + YS, + ZS, + XSTRI, + YSTRI, + ZSTRI, + XU, + YU, + ZU, + XUTRI, + YUTRI, + ZUTRI, + XSU, + YSU, + ZSU, + XSUTRI, + YSUTRI, + ZSUTRI, + IX, + IY, + IZ, + VX, + VY, + VZ, + FX, + FY, + FZ, + Q, + MUX, + MUY, + MUZ, + MU, + RADIUS, + DIAMETER, + OMEGAX, + OMEGAY, + OMEGAZ, + ANGMOMX, + ANGMOMY, + ANGMOMZ, + TQX, + TQY, + TQZ, + SPIN, + ERADIUS, + ERVEL, + ERFORCE, + COMPUTE, + FIX, + VARIABLE +}; +enum { LT, LE, GT, GE, EQ, NEQ }; +enum { INT, DOUBLE, STRING, BIGINT }; // same as in DumpCustom + +namespace LAMMPS_NS +{ +class DumpCustomADIOSInternal +{ + +public: + DumpCustomADIOSInternal(){}; + ~DumpCustomADIOSInternal() = default; + + // name of adios group, referrable in adios2_config.xml + const std::string ioName = "custom"; + adios2::ADIOS *ad = nullptr; // adios object + adios2::IO io; // adios group of variables and attributes in this dump + adios2::Engine fh; // adios file/stream handle object + // one ADIOS output variable we need to change every step + adios2::Variable varAtoms; + // list of column names for the atom table + // (individual list of 'columns' string) + std::vector columnNames; +}; +} /* ---------------------------------------------------------------------- */ -DumpCustomADIOS::DumpCustomADIOS(LAMMPS *lmp, int narg, char **arg) : - DumpCustom(lmp, narg, arg) +DumpCustomADIOS::DumpCustomADIOS(LAMMPS *lmp, int narg, char **arg) +: DumpCustom(lmp, narg, arg) { - ad = new adios2::ADIOS("adios2_config.xml", world, adios2::DebugON); - groupsize = 0; - //if (screen) fprintf(screen, "DumpCustomADIOS constructor: nvariable=%d id_variable=%p, variables=%p, nfield=%d, earg=%p\n", nvariable, id_variable, variable, nfield, earg); - columnNames.reserve(nfield); + internal = new DumpCustomADIOSInternal(); + internal->ad = + new adios2::ADIOS("adios2_config.xml", world, adios2::DebugON); + + // if (screen) fprintf(screen, "DumpCustomADIOS constructor: nvariable=%d + // id_variable=%p, variables=%p, nfield=%d, earg=%p\n", nvariable, + // id_variable, variable, nfield, earg); + internal->columnNames.reserve(nfield); for (int i = 0; i < nfield; ++i) { - columnNames.push_back(earg[i]); - //if (screen) fprintf(screen, "earg[%d] = '%s'\n", i, earg[i]); + internal->columnNames.push_back(earg[i]); + // if (screen) fprintf(screen, "earg[%d] = '%s'\n", i, earg[i]); } } @@ -72,11 +149,11 @@ DumpCustomADIOS::DumpCustomADIOS(LAMMPS *lmp, int narg, char **arg) : DumpCustomADIOS::~DumpCustomADIOS() { - columnNames.clear(); - if (fh) - { - fh.Close(); + internal->columnNames.clear(); + if (internal->fh) { + internal->fh.Close(); } + delete internal->ad; } /* ---------------------------------------------------------------------- */ @@ -87,39 +164,37 @@ void DumpCustomADIOS::openfile() // if one file per timestep, replace '*' with current timestep char *filestar = strdup(filename); char *filecurrent = new char[strlen(filestar) + 16]; - char *ptr = strchr(filestar,'*'); + char *ptr = strchr(filestar, '*'); *ptr = '\0'; if (padflag == 0) - sprintf(filecurrent,"%s" BIGINT_FORMAT "%s", - filestar,update->ntimestep,ptr+1); + sprintf(filecurrent, "%s" BIGINT_FORMAT "%s", filestar, + update->ntimestep, ptr + 1); else { - char bif[8],pad[16]; - strcpy(bif,BIGINT_FORMAT); - sprintf(pad,"%%s%%0%d%s%%s",padflag,&bif[1]); - sprintf(filecurrent,pad,filestar,update->ntimestep,ptr+1); + char bif[8], pad[16]; + strcpy(bif, BIGINT_FORMAT); + sprintf(pad, "%%s%%0%d%s%%s", padflag, &bif[1]); + sprintf(filecurrent, pad, filestar, update->ntimestep, ptr + 1); } - fh = io.Open(filecurrent, adios2::Mode::Write, world); - if (!fh) { + internal->fh = + internal->io.Open(filecurrent, adios2::Mode::Write, world); + if (!internal->fh) { char str[128]; - sprintf(str,"Cannot open dump file %s",filecurrent); - error->one(FLERR,str); + sprintf(str, "Cannot open dump file %s", filecurrent); + error->one(FLERR, str); } free(filestar); - delete [] filecurrent; - } - else - { - if (!singlefile_opened) - { - fh = io.Open(filename, adios2::Mode::Write, world); - if (!fh) { + delete[] filecurrent; + } else { + if (!singlefile_opened) { + internal->fh = + internal->io.Open(filename, adios2::Mode::Write, world); + if (!internal->fh) { char str[128]; - sprintf(str,"Cannot open dump file %s",filename); - error->one(FLERR,str); + sprintf(str, "Cannot open dump file %s", filename); + error->one(FLERR, str); } singlefile_opened = 1; } - } } @@ -154,20 +229,20 @@ void DumpCustomADIOS::write() // atomOffset = sum of # of atoms up to this proc (exclusive prefix sum) bigint bnme = nme; - MPI_Allreduce(&bnme,&ntotal,1,MPI_LMP_BIGINT,MPI_SUM,world); + MPI_Allreduce(&bnme, &ntotal, 1, MPI_LMP_BIGINT, MPI_SUM, world); bigint atomOffset; // sum of all atoms on processes 0..me-1 - MPI_Scan (&bnme, &atomOffset, 1, MPI_LMP_BIGINT, MPI_SUM, world); + MPI_Scan(&bnme, &atomOffset, 1, MPI_LMP_BIGINT, MPI_SUM, world); atomOffset -= nme; // exclusive prefix sum needed // Now we know the global size and the local subset size and offset - // of the atoms table + // of the atoms table size_t nAtomsGlobal = static_cast(ntotal); size_t startRow = static_cast(atomOffset); size_t nAtomsLocal = static_cast(nme); size_t nColumns = static_cast(size_one); - varAtoms.SetShape({nAtomsGlobal,nColumns}); - varAtoms.SetSelection({{startRow, 0}, {nAtomsLocal,nColumns}}); + internal->varAtoms.SetShape({nAtomsGlobal, nColumns}); + internal->varAtoms.SetSelection({{startRow, 0}, {nAtomsLocal, nColumns}}); // insure filewriter proc can receive everyone's info // limit nmax*size_one to int since used as arg in MPI_Rsend() below @@ -176,64 +251,57 @@ void DumpCustomADIOS::write() // sort buf as needed if (nme > maxbuf) { - if ((bigint) nme * size_one > MAXSMALLINT) - error->all(FLERR,"Too much per-proc info for dump"); + if ((bigint)nme * size_one > MAXSMALLINT) + error->all(FLERR, "Too much per-proc info for dump"); maxbuf = nme; memory->destroy(buf); - memory->create(buf,(maxbuf*size_one),"dump:buf"); + memory->create(buf, (maxbuf * size_one), "dump:buf"); } if (sort_flag && sortcol == 0 && nme > maxids) { maxids = nme; memory->destroy(ids); - memory->create(ids,maxids,"dump:ids"); + memory->create(ids, maxids, "dump:ids"); } - if (sort_flag && sortcol == 0) pack(ids); - else pack(NULL); - if (sort_flag) sort(); - - // Calculate data size written by this process - groupsize = nme * size_one * sizeof(double); // size of atoms data on this process - groupsize += 3*sizeof(uint64_t) + 1*sizeof(int); // scalars written by each process - if (me == 0) { - groupsize += 1*sizeof(uint64_t) + 1*sizeof(int) + 6*sizeof(double); // scalars - if (domain->triclinic) { - groupsize += 3*sizeof(double); // boxxy, boxxz, boxyz - } - } + if (sort_flag && sortcol == 0) + pack(ids); + else + pack(NULL); + if (sort_flag) + sort(); openfile(); - fh.BeginStep(); + internal->fh.BeginStep(); // write info on data as scalars (by me==0) if (me == 0) { - fh.Put("ntimestep", update->ntimestep); - fh.Put("nprocs", nprocs); + internal->fh.Put("ntimestep", update->ntimestep); + internal->fh.Put("nprocs", nprocs); - fh.Put("boxxlo", boxxlo); - fh.Put("boxxhi", boxxhi); - fh.Put("boxylo", boxylo); - fh.Put("boxyhi", boxyhi); - fh.Put("boxzlo", boxzlo); - fh.Put("boxzhi", boxzhi); + internal->fh.Put("boxxlo", boxxlo); + internal->fh.Put("boxxhi", boxxhi); + internal->fh.Put("boxylo", boxylo); + internal->fh.Put("boxyhi", boxyhi); + internal->fh.Put("boxzlo", boxzlo); + internal->fh.Put("boxzhi", boxzhi); if (domain->triclinic) { - fh.Put("boxxy", boxxy); - fh.Put("boxxz", boxxz); - fh.Put("boxyz", boxyz); + internal->fh.Put("boxxy", boxxy); + internal->fh.Put("boxxz", boxxz); + internal->fh.Put("boxyz", boxyz); } } - // Everyone needs to write scalar variables that are used as dimensions and offsets of arrays - fh.Put("natoms", ntotal); - fh.Put("ncolumns", size_one); - fh.Put("nme", bnme); - fh.Put("offset", atomOffset); + // Everyone needs to write scalar variables that are used as dimensions and + // offsets of arrays + internal->fh.Put("natoms", ntotal); + internal->fh.Put("ncolumns", size_one); + internal->fh.Put("nme", bnme); + internal->fh.Put("offset", atomOffset); // now write the atoms - fh.Put("atoms", buf); - fh.EndStep();// I/O will happen now... + internal->fh.Put("atoms", buf); + internal->fh.EndStep(); // I/O will happen now... - if (multifile) - { - fh.Close(); + if (multifile) { + internal->fh.Close(); } } @@ -246,43 +314,49 @@ void DumpCustomADIOS::init_style() domain->boundary_string(boundstr); - // remove % from filename since ADIOS always writes a global file with data/metadata + // remove % from filename since ADIOS always writes a global file with + // data/metadata int len = strlen(filename); - char *ptr = strchr(filename,'%'); + char *ptr = strchr(filename, '%'); if (ptr) { *ptr = '\0'; - char *s = new char[len-1]; - sprintf(s,"%s%s",filename,ptr+1); - strncpy(filename,s,len); + char *s = new char[len - 1]; + sprintf(s, "%s%s", filename, ptr + 1); + strncpy(filename, s, len); } - /* The next four loops are copied from dump_custom_mpiio, but nothing is done with them. + /* The next four loops are copied from dump_custom_mpiio, but nothing is + * done with them. * It is unclear why we need them here. - * For metadata, variable[] will be written out as an ADIOS attribute if nvariable>0 + * For metadata, variable[] will be written out as an ADIOS attribute if + * nvariable>0 */ // find current ptr for each compute,fix,variable // check that fix frequency is acceptable int icompute; for (int i = 0; i < ncompute; i++) { icompute = modify->find_compute(id_compute[i]); - if (icompute < 0) error->all(FLERR,"Could not find dump custom compute ID"); + if (icompute < 0) + error->all(FLERR, "Could not find dump custom compute ID"); compute[i] = modify->compute[icompute]; } int ifix; for (int i = 0; i < nfix; i++) { ifix = modify->find_fix(id_fix[i]); - if (ifix < 0) error->all(FLERR,"Could not find dump custom fix ID"); + if (ifix < 0) + error->all(FLERR, "Could not find dump custom fix ID"); fix[i] = modify->fix[ifix]; if (nevery % modify->fix[ifix]->peratom_freq) - error->all(FLERR,"Dump custom and fix not computed at compatible times"); + error->all(FLERR, + "Dump custom and fix not computed at compatible times"); } int ivariable; for (int i = 0; i < nvariable; i++) { ivariable = input->variable->find(id_variable[i]); if (ivariable < 0) - error->all(FLERR,"Could not find dump custom variable name"); + error->all(FLERR, "Could not find dump custom variable name"); variable[i] = ivariable; } @@ -290,65 +364,71 @@ void DumpCustomADIOS::init_style() if (iregion >= 0) { iregion = domain->find_region(idregion); if (iregion == -1) - error->all(FLERR,"Region ID for dump custom does not exist"); + error->all(FLERR, "Region ID for dump custom does not exist"); } - /* Define the group of variables for the atom style here since it's a fixed set */ - io = ad->DeclareIO(ioName); - if (!io.InConfigFile()) - { + /* Define the group of variables for the atom style here since it's a fixed + * set */ + internal->io = internal->ad->DeclareIO(internal->ioName); + if (!internal->io.InConfigFile()) { // if not defined by user, we can change the default settings // BPFile is the default writer - io.SetEngine("BPFile"); + internal->io.SetEngine("BPFile"); int num_aggregators = multiproc; if (num_aggregators == 0) num_aggregators = 1; char nstreams[128]; - sprintf (nstreams, "%d", num_aggregators); - io.SetParameters({{"substreams", nstreams}}); - if (me==0 && screen) fprintf(screen, "ADIOS method for %s is n-to-m (aggregation with %s writers)\n", filename, nstreams); + sprintf(nstreams, "%d", num_aggregators); + internal->io.SetParameters({{"substreams", nstreams}}); + if (me == 0 && screen) + fprintf( + screen, + "ADIOS method for %s is n-to-m (aggregation with %s writers)\n", + filename, nstreams); } + internal->io.DefineVariable("ntimestep"); + internal->io.DefineVariable("natoms"); - io.DefineVariable("ntimestep"); - io.DefineVariable("natoms"); + internal->io.DefineVariable("nprocs"); + internal->io.DefineVariable("ncolumns"); - io.DefineVariable("nprocs"); - io.DefineVariable("ncolumns"); + internal->io.DefineVariable("boxxlo"); + internal->io.DefineVariable("boxxhi"); + internal->io.DefineVariable("boxylo"); + internal->io.DefineVariable("boxyhi"); + internal->io.DefineVariable("boxzlo"); + internal->io.DefineVariable("boxzhi"); - io.DefineVariable("boxxlo"); - io.DefineVariable("boxxhi"); - io.DefineVariable("boxylo"); - io.DefineVariable("boxyhi"); - io.DefineVariable("boxzlo"); - io.DefineVariable("boxzhi"); + internal->io.DefineVariable("boxxy"); + internal->io.DefineVariable("boxxz"); + internal->io.DefineVariable("boxyz"); - io.DefineVariable("boxxy"); - io.DefineVariable("boxxz"); - io.DefineVariable("boxyz"); + internal->io.DefineAttribute("triclinic", domain->triclinic); - io.DefineAttribute("triclinic", domain->triclinic); - - int *boundaryptr = reinterpret_cast(domain->boundary); - io.DefineAttribute("boundary", boundaryptr, 6); + int *boundaryptr = reinterpret_cast(domain->boundary); + internal->io.DefineAttribute("boundary", boundaryptr, 6); size_t nColumns = static_cast(size_one); - io.DefineAttribute("columns", columnNames.data(), nColumns); - io.DefineAttribute("columnstr", columns); - io.DefineAttribute("boundarystr", boundstr); - io.DefineAttribute("LAMMPS/dump_style", "atom"); - io.DefineAttribute("LAMMPS/version", universe->version); - io.DefineAttribute("LAMMPS/num_ver", universe->num_ver); + internal->io.DefineAttribute( + "columns", internal->columnNames.data(), nColumns); + internal->io.DefineAttribute("columnstr", columns); + internal->io.DefineAttribute("boundarystr", boundstr); + internal->io.DefineAttribute("LAMMPS/dump_style", "atom"); + internal->io.DefineAttribute("LAMMPS/version", + universe->version); + internal->io.DefineAttribute("LAMMPS/num_ver", + universe->num_ver); - io.DefineVariable("nme", {adios2::LocalValueDim}); // local dimension variable - io.DefineVariable("offset", {adios2::LocalValueDim}); // local dimension variable + internal->io.DefineVariable( + "nme", {adios2::LocalValueDim}); // local dimension variable + internal->io.DefineVariable( + "offset", {adios2::LocalValueDim}); // local dimension variable // atom table size is not known at the moment // it will be correctly defined at the moment of write size_t UnknownSizeYet = 1; - varAtoms = io.DefineVariable("atoms", - {UnknownSizeYet,nColumns}, - {UnknownSizeYet, 0}, - {UnknownSizeYet,nColumns}); - + internal->varAtoms = internal->io.DefineVariable( + "atoms", {UnknownSizeYet, nColumns}, {UnknownSizeYet, 0}, + {UnknownSizeYet, nColumns}); } diff --git a/src/USER-ADIOS/dump_custom_adios.h b/src/USER-ADIOS/dump_custom_adios.h index 2461e20b2e..d5d41eb8c7 100644 --- a/src/USER-ADIOS/dump_custom_adios.h +++ b/src/USER-ADIOS/dump_custom_adios.h @@ -12,83 +12,76 @@ ------------------------------------------------------------------------- */ #ifdef DUMP_CLASS - -DumpStyle(custom/adios,DumpCustomADIOS) - +// clang-format off +DumpStyle(custom/adios, DumpCustomADIOS) +// clang-format on #else #ifndef LMP_DUMP_CUSTOM_ADIOS_H #define LMP_DUMP_CUSTOM_ADIOS_H #include "dump_custom.h" -#include -#include -#include "adios2.h" -namespace LAMMPS_NS { +namespace LAMMPS_NS +{ -class DumpCustomADIOS : public DumpCustom { - public: - DumpCustomADIOS(class LAMMPS *, int, char **); - virtual ~DumpCustomADIOS(); +class DumpCustomADIOSInternal; - protected: +class DumpCustomADIOS : public DumpCustom +{ +public: + DumpCustomADIOS(class LAMMPS *, int, char **); + virtual ~DumpCustomADIOS(); - const std::string ioName="custom"; // name of adios group, referrable in adios2_config.xml - adios2::ADIOS *ad = nullptr; // adios object - adios2::IO io; // adios group of variables and attributes in this dump - adios2::Engine fh; // adios file/stream handle object - adios2::Variable varAtoms; // one ADIOS output variable we need to change - uint64_t groupsize; // pre-calculate # of bytes written per processor in a step before writing anything - std::vectorcolumnNames; // list of column names for the atom table (individual list of 'columns' string) - - virtual void openfile(); - virtual void write(); - virtual void init_style(); +protected: + virtual void openfile(); + virtual void write(); + virtual void init_style(); +private: + DumpCustomADIOSInternal *internal; }; - } #endif #endif -/* ERROR/WARNING messages: + /* ERROR/WARNING messages: -E: Cannot open dump file %s + E: Cannot open dump file %s -The output file for the dump command cannot be opened. Check that the -path and name are correct. + The output file for the dump command cannot be opened. Check that the + path and name are correct. -E: Too much per-proc info for dump + E: Too much per-proc info for dump -Number of local atoms times number of columns must fit in a 32-bit -integer for dump. + Number of local atoms times number of columns must fit in a 32-bit + integer for dump. -E: Dump_modify format string is too short + E: Dump_modify format string is too short -There are more fields to be dumped in a line of output than your -format string specifies. + There are more fields to be dumped in a line of output than your + format string specifies. -E: Could not find dump custom compute ID + E: Could not find dump custom compute ID -Self-explanatory. + Self-explanatory. -E: Could not find dump custom fix ID + E: Could not find dump custom fix ID -Self-explanatory. + Self-explanatory. -E: Dump custom and fix not computed at compatible times + E: Dump custom and fix not computed at compatible times -The fix must produce per-atom quantities on timesteps that dump custom -needs them. + The fix must produce per-atom quantities on timesteps that dump custom + needs them. -E: Could not find dump custom variable name + E: Could not find dump custom variable name -Self-explanatory. + Self-explanatory. -E: Region ID for dump custom does not exist + E: Region ID for dump custom does not exist -Self-explanatory. + Self-explanatory. -*/ + */ From 75fe967876cfc49538624693383cb5b8c575a469 Mon Sep 17 00:00:00 2001 From: Norbert Podhorszki Date: Sun, 10 Feb 2019 19:19:49 -0500 Subject: [PATCH 087/143] remove fluff about adios in CMakeLists.txt. --- cmake/CMakeLists.txt | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index e5d362fe52..69f56e0216 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -2,15 +2,7 @@ # CMake build system # This file is part of LAMMPS # Created by Christoph Junghans and Richard Berger -if(PKG_USER-ADIOS) - message(STATUS "Force newer standards because of using ADIOS") - cmake_minimum_required(VERSION 3.6) - # Force C++11 and C99 - set(CMAKE_CXX_STANDARD 11) - set(CMAKE_CXX_STANDARD_REQUIRED True) -else() - cmake_minimum_required(VERSION 2.8.12) -endif() +cmake_minimum_required(VERSION 2.8.12) project(lammps CXX) set(SOVERSION 0) From 1179beb54330b061d84ecaea61e2586ae09b72e7 Mon Sep 17 00:00:00 2001 From: Norbert Podhorszki Date: Wed, 20 Feb 2019 14:42:28 -0500 Subject: [PATCH 088/143] Makefile build support for USER-ADIOS and build documentation --- doc/src/Build_extras.txt | 23 ++++++++++ doc/src/Build_package.txt | 1 + doc/src/Packages_details.txt | 26 +++++++++++ doc/src/Packages_user.txt | 1 + src/Makefile | 2 +- src/USER-ADIOS/Install.sh | 86 +++++++++++++++++++----------------- 6 files changed, 97 insertions(+), 42 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 09841bd9d4..4a12930304 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -37,6 +37,7 @@ This is the list of packages that may require additional steps. "POEMS"_#poems, "PYTHON"_#python, "VORONOI"_#voronoi, +"USER-ADIOS"_#user-adios, "USER-ATC"_#user-atc, "USER-AWPMD"_#user-awpmd, "USER-COLVARS"_#user-colvars, @@ -576,6 +577,28 @@ the lib/voronoi/Makefile.lammps file. :line +USER-ADIOS package :h4,link(user-adios) + +The USER-ADIOS package requires the "ADIOS I/O library"_https://github.com/ornladios/ADIOS2, version 2.3.1 or newer. +Make sure that you have ADIOS built with/without MPI if you build LAMMPS with/without MPI, respectively. + +[CMake build]: + +-D ADIOS2_DIR=path # path is where ADIOS 2.x is installed +-D PKG_USER-ADIOS=yes :pre + +[Traditional make]: + +Turn on the USER-ADIOS package before building LAMMPS. If the ADIOS 2.x software is installed in PATH, there is nothing else to do: + +make yes-user-adios :pre + +otherwise, set ADIOS2_DIR environment variable when turning on the package: + +ADIOS2_DIR=path make yes-user-adios # path is where ADIOS 2.x is installed :pre + +:line + USER-ATC package :h4,link(user-atc) The USER-ATC package requires the MANYBODY package also be installed. diff --git a/doc/src/Build_package.txt b/doc/src/Build_package.txt index 01c82d724e..c5eca96edb 100644 --- a/doc/src/Build_package.txt +++ b/doc/src/Build_package.txt @@ -48,6 +48,7 @@ packages: "POEMS"_Build_extras.html#poems, "PYTHON"_Build_extras.html#python, "VORONOI"_Build_extras.html#voronoi, +"USER-ADIOS"_Build_extras.html#user-adios, "USER-ATC"_Build_extras.html#user-atc, "USER-AWPMD"_Build_extras.html#user-awpmd, "USER-COLVARS"_Build_extras.html#user-colvars, diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 7d3d6d13e2..4e3fd1968f 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -63,6 +63,7 @@ as contained in the file name. "SRD"_#PKG-SRD, "VORONOI"_#PKG-VORONOI :tb(c=6,ea=c) +"USER-ADIOS"_#PKG-USER-ADIOS, "USER-ATC"_#PKG-USER-ATC, "USER-AWPMD"_#PKG-USER-AWPMD, "USER-BOCS"_#PKG-USER-BOCS, @@ -975,6 +976,31 @@ examples/voronoi :ul :line +USER-ADIOS package :link(PKG-USER-ADIOS),h4 + +[Contents:] + +ADIOS is a high-performance I/O library. This package implements the +dump "atom/adios" and dump "custom/adios" commands to write data using +the ADIOS library. + +[Authors:] Norbert Podhorszki (ORNL) from the ADIOS developer team. + +[Install:] + +This package has "specific installation +instructions"_Build_extras.html#user-adios on the "Build +extras"_Build_extras.html doc page. + +[Supporting info:] + +src/USER-ADIOS: filenames -> commands +src/USER-ADIOS/README +examples/USER/adios +https://github.com/ornladios/ADIOS2 :ul + +:line + USER-ATC package :link(PKG-USER-ATC),h4 [Contents:] diff --git a/doc/src/Packages_user.txt b/doc/src/Packages_user.txt index 4a702e971f..4210f617ef 100644 --- a/doc/src/Packages_user.txt +++ b/doc/src/Packages_user.txt @@ -38,6 +38,7 @@ int = internal library: provided with LAMMPS, but you may need to build it ext = external library: you will need to download and install it on your machine :ul Package, Description, Doc page, Example, Library +"USER-ADIOS"_Packages_details.html#PKG-USER-ADIOS, dump output via ADIOS, "dump adios"_dump_adios.html, USER/adios, ext "USER-ATC"_Packages_details.html#PKG-USER-ATC, Atom-to-Continuum coupling, "fix atc"_fix_atc.html, USER/atc, int "USER-AWPMD"_Packages_details.html#PKG-USER-AWPMD, wave packet MD, "pair_style awpmd/cut"_pair_awpmd.html, USER/awpmd, int "USER-BOCS"_Packages_details.html#PKG-USER-BOCS, BOCS bottom up coarse graining, "fix bocs"_fix_bocs.html, USER/bocs, no diff --git a/src/Makefile b/src/Makefile index 1f0a294e8a..3e224cd6ab 100644 --- a/src/Makefile +++ b/src/Makefile @@ -58,7 +58,7 @@ PACKAGE = asphere body class2 colloid compress coreshell dipole gpu \ molecule mpiio mscg opt peri poems \ python qeq replica rigid shock snap spin srd voronoi -PACKUSER = user-atc user-awpmd user-bocs user-cgdna user-cgsdk user-colvars \ +PACKUSER = user-adios user-atc user-awpmd user-bocs user-cgdna user-cgsdk user-colvars \ user-diffraction user-dpd user-drude user-eff user-fep user-h5md \ user-intel user-lb user-manifold user-meamc user-meso \ user-mgpt user-misc user-mofff user-molfile \ diff --git a/src/USER-ADIOS/Install.sh b/src/USER-ADIOS/Install.sh index cae755406b..8ea971c233 100644 --- a/src/USER-ADIOS/Install.sh +++ b/src/USER-ADIOS/Install.sh @@ -30,60 +30,64 @@ done if (test $1 = 1) then -# if (test -z "$ADIOS_DIR") then -# if command -v adios_config; then -# ADIOS_DIR=`adios_config -d` -# else -# echo "ERROR: ADIOS_DIR environment variable needs to point to ADIOS" \ -# " installation directory or adios_config should be in PATH" -# fi -# fi -# ADIOS_INC=-I${ADIOS_DIR}/include -# ADIOS_LIB=`${ADIOS_DIR}/bin/adios_config -l` -# -# echo "adios_SYSINC=${ADIOS_INC} -#adios_SYSLIB=${ADIOS_LIB} -#adios_SYSPATH=${ADIOS_DIR} -#" > ../Makefile.adios - - - if (test -e ../Makefile.package) then - sed -i -e 's/[^ \t]*adios[^ \t]* //g' ../Makefile.package - sed -i -e 's/-DLMP_ADIOS //g' ../Makefile.package - sed -i -e '/^adios_SYS.*$/d' ../Makefile.package -# sed -i -e '4 i \ -#adios_SYSINC='"${ADIOS_INC}"' -#' ../Makefile.package -# sed -i -e '5 i \ -#adios_SYSLIB='"${ADIOS_LIB}"' -#' ../Makefile.package -# sed -i -e '6 i \ -#adios_SYSPATH='"${ADIOS_DIR}"' -#' ../Makefile.package - sed -i -e 's|^PKG_INC =[ \t]*|&-DLMP_ADIOS |' ../Makefile.package - sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(adios_SYSINC) |' ../Makefile.package - sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(adios_SYSLIB) |' ../Makefile.package - sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(adios_SYSPATH) |' ../Makefile.package + CONFIGSCRIPT=none + if ( test `which adios2-config` ) then + CONFIGSCRIPT=adios2-config + elif ( ! test -z "$ADIOS2_DIR" ) then + if ( test `which $ADIOS2_DIR/bin/adios2-config` ) then + CONFIGSCRIPT=$ADIOS2_DIR/bin/adios2-config + else + echo "ERROR: ADIOS2_DIR environment variable is set but" \ + "\$ADIOS2_DIR/bin/adios2-config does not exist" + fi + elif ( ! test -z "$ADIOS_DIR" ) then + if ( test `which $ADIOS_DIR/bin/adios2-config` ) then + CONFIGSCRIPT=$ADIOS_DIR/bin/adios2-config + else + echo "ERROR: ADIOS_DIR environment variable is set but" \ + "\$ADIOS_DIR/bin/adios2-config does not exist" + fi + else + echo "ERROR: ADIOS2_DIR environment variable must point to ADIOS 2.x" \ + "installation directory or adios2-config should be in PATH" fi - if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*adios.*$/d' ../Makefile.package.settings - # multiline form needed for BSD sed on Macs - sed -i -e '4 i \ -include ..\/..\/lib\/adios\/Makefile.lammps + if [ "$CONFIGSCRIPT" != "none" ]; then + ADIOS2_INC=`$CONFIGSCRIPT --cxx-flags` + ADIOS2_LIB=`$CONFIGSCRIPT --cxx-libs` + + echo "adios_SYSINC=${ADIOS2_INC} +adios_SYSLIB=${ADIOS2_LIB} +" > Makefile.lammps + + + if (test -e ../Makefile.package) then + sed -i -e 's/[^ \t]*adios[^ \t]* //g' ../Makefile.package + sed -i -e '/^adios_SYS.*$/d' ../Makefile.package + sed -i -e 's|^PKG_SYSINC =[ \t]*|&$(adios_SYSINC) |' ../Makefile.package + sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(adios_SYSLIB) |' ../Makefile.package + fi + + if (test -e ../Makefile.package.settings) then + sed -i -e '/^include.*ADIOS.*$/d' ../Makefile.package.settings + # multiline form needed for BSD sed on Macs + sed -i -e '4 i \ +include ../USER-ADIOS/Makefile.lammps ' ../Makefile.package.settings + fi fi elif (test $1 = 0) then if (test -e ../Makefile.package) then sed -i -e 's/[^ \t]*adios[^ \t]* //g' ../Makefile.package - sed -i -e 's/-DLMP_ADIOS //g' ../Makefile.package sed -i -e '/^adios_SYS.*$/d' ../Makefile.package fi if (test -e ../Makefile.package.settings) then - sed -i -e '/^include.*adios.*$/d' ../Makefile.package.settings + sed -i -e '/^include.*ADIOS.*$/d' ../Makefile.package.settings fi + rm -f Makefile.lammps + fi From 2de01cef45519adbc57edad6dd038aaa42fecef0 Mon Sep 17 00:00:00 2001 From: Norbert Podhorszki Date: Wed, 20 Feb 2019 16:21:07 -0500 Subject: [PATCH 089/143] Dump atom/adios and dump custom/adios command notifications --- doc/src/Commands_all.txt | 1 + doc/src/commands_list.txt | 1 + doc/src/dump.txt | 5 +- doc/src/dump_adios.txt | 73 ++++++++++++++++++++++++++++ examples/USER/adios/in.adios_balance | 1 + 5 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 doc/src/dump_adios.txt diff --git a/doc/src/Commands_all.txt b/doc/src/Commands_all.txt index f137ccffd9..e6f364f2c9 100644 --- a/doc/src/Commands_all.txt +++ b/doc/src/Commands_all.txt @@ -48,6 +48,7 @@ An alphabetic list of all general LAMMPS commands. "dimension"_dimension.html, "displace_atoms"_displace_atoms.html, "dump"_dump.html, +"dump adios"_dump_adios.html, "dump image"_dump_image.html, "dump_modify"_dump_modify.html, "dump movie"_dump_image.html, diff --git a/doc/src/commands_list.txt b/doc/src/commands_list.txt index 78fa9fbf87..9b3185bda8 100644 --- a/doc/src/commands_list.txt +++ b/doc/src/commands_list.txt @@ -32,6 +32,7 @@ Commands :h1 dimension displace_atoms dump + dump_adios dump_cfg_uef dump_h5md dump_image diff --git a/doc/src/dump.txt b/doc/src/dump.txt index 9999f5bbff..a776ff70fc 100644 --- a/doc/src/dump.txt +++ b/doc/src/dump.txt @@ -13,6 +13,7 @@ dump command :h3 "dump netcdf"_dump_netcdf.html command :h3 "dump image"_dump_image.html command :h3 "dump movie"_dump_image.html command :h3 +"dump adios"_dump_adios.html command :h3 [Syntax:] @@ -27,10 +28,12 @@ args = list of arguments for a particular style :l {atom} args = none {atom/gz} args = none {atom/mpiio} args = none + {atom/adios} args = none, discussed on "dump adios"_dump_adios.html doc page {cfg} args = same as {custom} args, see below {cfg/gz} args = same as {custom} args, see below {cfg/mpiio} args = same as {custom} args, see below {custom}, {custom/gz}, {custom/mpiio} args = see below + {custom/adios} args = same as {custom} args, discussed on "dump adios"_dump_adios.html doc page {dcd} args = none {h5md} args = discussed on "dump h5md"_dump_h5md.html doc page {image} args = discussed on "dump image"_dump_image.html doc page @@ -653,7 +656,7 @@ package"_Build_package.html doc page for more info. [Related commands:] -"dump h5md"_dump_h5md.html, "dump image"_dump_image.html, +"dump adios"_dump_adios.html "dump h5md"_dump_h5md.html, "dump image"_dump_image.html, "dump molfile"_dump_molfile.html, "dump_modify"_dump_modify.html, "undump"_undump.html diff --git a/doc/src/dump_adios.txt b/doc/src/dump_adios.txt new file mode 100644 index 0000000000..d6424d664a --- /dev/null +++ b/doc/src/dump_adios.txt @@ -0,0 +1,73 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +dump atoms/adios command :h3 +dump custom/adios command :h3 + +[Syntax:] + +dump ID group-ID atoms/adios N file.bp :pre +dump ID group-ID custom/adios N file.bp args :pre + +ID = user-assigned name for the dump :ulb,l +group-ID = ID of the group of atoms to be imaged :l +adios = style of dump command (other styles {atom} or {cfg} or {dcd} or {xtc} or {xyz} or {local} or {custom} are discussed on the "dump"_dump.html doc page) :l +N = dump every this many timesteps :l +file.bp = name of file/stream to write to :l +args = same options as in "{dump custom}"_dump.html command :l +:ule + + +[Examples:] + +dump adios1 all atom/adios 100 atoms.bp +dump 4a all custom/adios 100 dump_adios.bp id v_p x y z +dump 2 subgroup custom/adios 100 dump_adios.bp mass type xs ys zs vx vy vz :pre + +[Description:] + +Dump a snapshot of atom coordinates every N timesteps in the +"ADIOS"_adios based "BP" file format, or using different I/O solutions in ADIOS, +to a stream that can be read on-line by another program. +ADIOS-BP files are binary, portable and self-describing. + +:link(adios,https://github.com/ornladios/ADIOS2) + + +[Use from write_dump:] + +It is possible to use these dump styles with the +"write_dump"_write_dump.html command. In this case, the sub-intervals +must not be set at all. The write_dump command can be used to +create a new file at each individual dump. + +dump 4 all atom/adios 100 dump.bp +write_dump all atom/adios singledump.bp :pre + +:line + +[Restrictions:] + +The number of atoms per snapshot CAN change with the adios style. +When using the ADIOS tool 'bpls' to list the content of a .bp file, +bpls will print "__" for the size of the output table indicating that +its size is changing every step. + +The {atom/adios} and {custom/adios} dump styles are part of the USER-adios package. +They are only enabled if LAMMPS was built with that package. See the +"Build package"_Build_package.html doc page for more info. + + +:line + +[Related commands:] + +"dump"_dump.html, "dump_modify"_dump_modify.html, "undump"_undump.html + +:line + diff --git a/examples/USER/adios/in.adios_balance b/examples/USER/adios/in.adios_balance index b44870afbb..d89ae52b41 100644 --- a/examples/USER/adios/in.adios_balance +++ b/examples/USER/adios/in.adios_balance @@ -54,3 +54,4 @@ thermo_style custom step temp epair press f_10[3] f_10 thermo 100 run 200 +write_dump all atom/adios balance_atom_final.bp From a5f20305d49667d0815eed056064a55142694e96 Mon Sep 17 00:00:00 2001 From: Norbert Podhorszki Date: Wed, 20 Feb 2019 16:28:51 -0500 Subject: [PATCH 090/143] Add user-adios to PACKLIB and PACKEXT --- src/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Makefile b/src/Makefile index 3e224cd6ab..f954d84e5d 100644 --- a/src/Makefile +++ b/src/Makefile @@ -68,7 +68,7 @@ PACKUSER = user-adios user-atc user-awpmd user-bocs user-cgdna user-cgsdk user-c PACKLIB = compress gpu kim kokkos latte message mpiio mscg poems \ python voronoi \ - user-atc user-awpmd user-colvars user-h5md user-lb user-molfile \ + user-adios user-atc user-awpmd user-colvars user-h5md user-lb user-molfile \ user-netcdf user-plumed user-qmmm user-quip user-scafacos \ user-smd user-vtk @@ -77,7 +77,7 @@ PACKSYS = compress mpiio python user-lb PACKINT = gpu kokkos message poems user-atc user-awpmd user-colvars PACKEXT = kim latte mscg voronoi \ - user-h5md user-molfile user-netcdf user-plumed user-qmmm user-quip \ + user-adios user-h5md user-molfile user-netcdf user-plumed user-qmmm user-quip \ user-smd user-vtk PACKALL = $(PACKAGE) $(PACKUSER) From 3ad268739b003e6168eeb89920707a0b5c0393d6 Mon Sep 17 00:00:00 2001 From: Norbert Podhorszki Date: Wed, 20 Feb 2019 17:02:48 -0500 Subject: [PATCH 091/143] Add dump adios to PDF build. Update example config with better documentation --- doc/src/dump_adios.txt | 2 +- doc/src/lammps.book | 1 + examples/USER/adios/adios2_config.xml | 9 +++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/doc/src/dump_adios.txt b/doc/src/dump_adios.txt index d6424d664a..3d08d6c13a 100644 --- a/doc/src/dump_adios.txt +++ b/doc/src/dump_adios.txt @@ -55,7 +55,7 @@ write_dump all atom/adios singledump.bp :pre The number of atoms per snapshot CAN change with the adios style. When using the ADIOS tool 'bpls' to list the content of a .bp file, -bpls will print "__" for the size of the output table indicating that +bpls will print {__} for the size of the output table indicating that its size is changing every step. The {atom/adios} and {custom/adios} dump styles are part of the USER-adios package. diff --git a/doc/src/lammps.book b/doc/src/lammps.book index 02a55e3810..d15d287742 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -150,6 +150,7 @@ dielectric.html dimension.html displace_atoms.html dump.html +dump_adios.html dump_h5md.html dump_image.html dump_modify.html diff --git a/examples/USER/adios/adios2_config.xml b/examples/USER/adios/adios2_config.xml index 7462731d43..4b9cd9b9b5 100644 --- a/examples/USER/adios/adios2_config.xml +++ b/examples/USER/adios/adios2_config.xml @@ -6,8 +6,15 @@ + + + The 'substreams' parameter in BPFile controls how many + files on disk are created. This number should be proportional + to the number of servers in the parallel file system, + NOT to the number of processes. + substreams=1 is generally a very inefficient setting for large parallel runs. --> LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -8 Feb 2019 version :c,h2 +28 Feb 2019 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/src/version.h b/src/version.h index f15fa13e02..0539f757c9 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "8 Feb 2019" +#define LAMMPS_VERSION "28 Feb 2019" From 54e5c763338e958c8da3920a11cc99b606c406e6 Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 27 Feb 2019 15:50:08 -0600 Subject: [PATCH 107/143] Bump KIM API version to 2.0.1 --- cmake/CMakeLists.txt | 4 ++-- lib/kim/Install.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 30c8171f28..96cf6aa8b6 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -663,8 +663,8 @@ if(PKG_KIM) enable_language(Fortran) include(ExternalProject) ExternalProject_Add(kim_build - URL https://s3.openkim.org/kim-api/kim-api-v2-2.0.0.txz - URL_MD5 1ff8f563ad5991f7a2a25b35a13d7308 + URL https://s3.openkim.org/kim-api/kim-api-v2-2.0.1.txz + URL_MD5 289c57f0c3bc2a549662283cac1c4ef1 BINARY_DIR build CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} diff --git a/lib/kim/Install.py b/lib/kim/Install.py index e2465eec85..7a3d9c148d 100644 --- a/lib/kim/Install.py +++ b/lib/kim/Install.py @@ -18,7 +18,7 @@ parser = ArgumentParser(prog='Install.py', # settings thisdir = fullpath('.') -version = "kim-api-v2-2.0.0" +version = "kim-api-v2-2.0.1" # help message From 6bd56c2a85aad06f1451fbdd93c51a3803054033 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 27 Feb 2019 17:08:13 -0500 Subject: [PATCH 108/143] update author attribution --- src/USER-ADIOS/dump_custom_adios.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/USER-ADIOS/dump_custom_adios.cpp b/src/USER-ADIOS/dump_custom_adios.cpp index 5b76688098..cd14195d45 100644 --- a/src/USER-ADIOS/dump_custom_adios.cpp +++ b/src/USER-ADIOS/dump_custom_adios.cpp @@ -12,7 +12,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Paul Coffman (IBM) + Contributing author: Norbert Podhorszki (ORNL) ------------------------------------------------------------------------- */ #include "dump_custom_adios.h" From b60f0f754cc82c1353f272ad358826f80284267f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 27 Feb 2019 17:18:08 -0500 Subject: [PATCH 109/143] small tweaks to USER-ADIOS docs --- doc/src/Build_extras.txt | 8 ++++++-- doc/src/dump_adios.txt | 6 +++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 4a12930304..0fa87f4b60 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -579,8 +579,12 @@ the lib/voronoi/Makefile.lammps file. USER-ADIOS package :h4,link(user-adios) -The USER-ADIOS package requires the "ADIOS I/O library"_https://github.com/ornladios/ADIOS2, version 2.3.1 or newer. -Make sure that you have ADIOS built with/without MPI if you build LAMMPS with/without MPI, respectively. +The USER-ADIOS package requires the "ADIOS I/O library"_https://github.com/ornladios/ADIOS2, +version 2.3.1 or newer. Make sure that you have ADIOS built either with or +without MPI to match if you build LAMMPS with or without MPI. +ADIOS compilation settings for LAMMPS are automatically detected, if the PATH +and LD_LIBRARY_PATH environment variables have been updated for the local ADIOS +installation and the instructions below are followed for the respective build systems. [CMake build]: diff --git a/doc/src/dump_adios.txt b/doc/src/dump_adios.txt index 7425264ea4..e3c919db5a 100644 --- a/doc/src/dump_adios.txt +++ b/doc/src/dump_adios.txt @@ -58,9 +58,9 @@ When using the ADIOS tool 'bpls' to list the content of a .bp file, bpls will print {__} for the size of the output table indicating that its size is changing every step. -The {atom/adios} and {custom/adios} dump styles are part of the USER-adios package. -They are only enabled if LAMMPS was built with that package. See the -"Build package"_Build_package.html doc page for more info. +The {atom/adios} and {custom/adios} dump styles are part of the USER-ADIOS +package. They are only enabled if LAMMPS was built with that package. +See the "Build package"_Build_package.html doc page for more info. :line From 286112ffbc5e3b48620957abb1508078a8326e6c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Feb 2019 11:00:55 -0500 Subject: [PATCH 110/143] count each force computation as one simulation step. this avoids accessing uninitialized data, too. --- .../phonon/dynamical_matrix_command/Manual.md | 48 ------------------- src/USER-PHONON/dynamical_matrix.cpp | 4 +- src/USER-PHONON/third_order.cpp | 4 +- 3 files changed, 6 insertions(+), 50 deletions(-) delete mode 100755 examples/USER/phonon/dynamical_matrix_command/Manual.md diff --git a/examples/USER/phonon/dynamical_matrix_command/Manual.md b/examples/USER/phonon/dynamical_matrix_command/Manual.md deleted file mode 100755 index c361f80325..0000000000 --- a/examples/USER/phonon/dynamical_matrix_command/Manual.md +++ /dev/null @@ -1,48 +0,0 @@ -# dynamical_matrix command - -## Syntax - -``` -dynamical_matrix group-ID style args keyword value ... -``` - -* group-ID = ID of group of atoms to displace -* style = *regular* or *eskm* -``` -*regular* args = gamma - gamma = finite difference displacement length -*eskm* args = gamma - gamma = finite difference displacement length -``` -* zero or more keyword/value pairs may be appended -* keyword = *file* or *binary* -``` -*file* value = output_file - output_file = name of file to dump the dynamical matrix into -*binary* values = *yes* or *no* or *gzip* -``` - -## Examples - -``` -dynamical_matrix 1 regular 0.000001 -dynamical_matrix 1 eskm 0.000001 -dynamical_matrix 3 regular 0.00004 file dynmat.dat -dynamical_matrix 5 eskm 0.00000001 file dynamical.dat binary yes -``` - -## Description - -Calculate the dynamical matrix of the selected group. - -## Restrictions - -None - -## Related commands - -None - -## Default - -The option defaults are file = "dynmat.dyn", binary = no diff --git a/src/USER-PHONON/dynamical_matrix.cpp b/src/USER-PHONON/dynamical_matrix.cpp index da98a23a7d..cef59b3a63 100644 --- a/src/USER-PHONON/dynamical_matrix.cpp +++ b/src/USER-PHONON/dynamical_matrix.cpp @@ -258,6 +258,7 @@ void DynamicalMatrix::calculateMatrix() if (comm->me == 0 && screen) fprintf(screen,"Calculating Dynamical Matrix...\n"); + update->nsteps = 0; for (bigint i=1; i<=natoms; i++){ local_idx = atom->map(i); for (bigint alpha=0; alpha<3; alpha++){ @@ -390,6 +391,7 @@ void DynamicalMatrix::update_force() comm->reverse_comm(); timer->stamp(Timer::COMM); } + ++ update->nsteps; } /* ---------------------------------------------------------------------- @@ -545,4 +547,4 @@ void DynamicalMatrix::create_groupmap() delete[] displs; delete[] sub_groupmap; delete[] temp_groupmap; -} \ No newline at end of file +} diff --git a/src/USER-PHONON/third_order.cpp b/src/USER-PHONON/third_order.cpp index 41382e64cb..b4d2032a04 100644 --- a/src/USER-PHONON/third_order.cpp +++ b/src/USER-PHONON/third_order.cpp @@ -247,6 +247,7 @@ void ThirdOrder::calculateMatrix() if (comm->me == 0 && screen) fprintf(screen,"Calculating Anharmonic Dynamical Matrix...\n"); + update->nsteps = 0; for (bigint i=1; i<=natoms; i++){ local_idx = atom->map(i); for (bigint alpha=0; alpha<3; alpha++){ @@ -411,6 +412,7 @@ void ThirdOrder::update_force() comm->reverse_comm(); timer->stamp(Timer::COMM); } + ++ update->nsteps; } /* ---------------------------------------------------------------------- @@ -551,4 +553,4 @@ void ThirdOrder::create_groupmap() delete[] displs; delete[] sub_groupmap; delete[] temp_groupmap; -} \ No newline at end of file +} From 16946d8c6d02adc64b7f608610a4de616e23225c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Feb 2019 14:45:07 -0500 Subject: [PATCH 111/143] integrate dynamical_matrix command into LAMMPS manual --- doc/src/Commands_all.txt | 1 + doc/src/commands_list.txt | 1 + doc/src/dynamical_matrix.txt | 52 +++++++++++++++++++++ doc/src/lammps.book | 1 + doc/utils/sphinx-config/false_positives.txt | 2 + src/USER-PHONON/README | 22 ++++++--- 6 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 doc/src/dynamical_matrix.txt diff --git a/doc/src/Commands_all.txt b/doc/src/Commands_all.txt index f137ccffd9..ff86cd842a 100644 --- a/doc/src/Commands_all.txt +++ b/doc/src/Commands_all.txt @@ -54,6 +54,7 @@ An alphabetic list of all general LAMMPS commands. "dump netcdf"_dump_netcdf.html, "dump netcdf/mpiio"_dump_netcdf.html, "dump vtk"_dump_vtk.html, +"dynamical_matrix"_dynamical_matrix.html, "echo"_echo.html, "fix"_fix.html, "fix_modify"_fix_modify.html, diff --git a/doc/src/commands_list.txt b/doc/src/commands_list.txt index 78fa9fbf87..81f088d3d3 100644 --- a/doc/src/commands_list.txt +++ b/doc/src/commands_list.txt @@ -39,6 +39,7 @@ Commands :h1 dump_molfile dump_netcdf dump_vtk + dynamical_matrix echo fix fix_modify diff --git a/doc/src/dynamical_matrix.txt b/doc/src/dynamical_matrix.txt new file mode 100644 index 0000000000..a7dc4e442e --- /dev/null +++ b/doc/src/dynamical_matrix.txt @@ -0,0 +1,52 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +dynamical_matrix command :h3 + +[Syntax:] + +dynamical_matrix group-ID style gamma args keyword value ... :pre + +group-ID = ID of group of atoms to displace :ulb,l +style = {regular} or {eskm} :l +gamma = finite different displacement length (distance units) :l +one or more keyword/arg pairs may be appended :l + keyword = {file} or {binary} + {file} name = name of output file for the dynamical matrix + {binary} arg = {yes} or {no} or {gzip} :pre +:ule + +[Examples:] + +dynamical_matrix 1 regular 0.000001 +dynamical_matrix 1 eskm 0.000001 +dynamical_matrix 3 regular 0.00004 file dynmat.dat +dynamical_matrix 5 eskm 0.00000001 file dynamical.dat binary yes :pre + +[Description:] + +Calculate the dynamical matrix of the selected group. + +[Restrictions:] + +The command collects the entire dynamical matrix a single MPI rank, +so the memory requirements can be very significant for large systems. + +This command assumes a periodic system. + +This command is part of the USER-PHONON package. It is only enabled if +LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +[Related commands:] + +"fix phonon"_fix_phonon.html + +[Default:] + +The default settings are file = "dynmat.dyn", binary = no diff --git a/doc/src/lammps.book b/doc/src/lammps.book index 5ae3456ad4..827cafed75 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -157,6 +157,7 @@ dump_molfile.html dump_netcdf.html dump_vtk.html dump_cfg_uef.html +dynamical_matrix.html echo.html group.html group2ndx.html diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 8807b2d680..bbfdf946f4 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -625,8 +625,10 @@ dVx dW dx dy +dyn dyne dynes +dynmat Dyre Dzyaloshinskii Eaa diff --git a/src/USER-PHONON/README b/src/USER-PHONON/README index 2212eaaebd..b1ffcb9b09 100644 --- a/src/USER-PHONON/README +++ b/src/USER-PHONON/README @@ -1,19 +1,24 @@ This package contains a fix phonon command that calculates dynamical -matrices, which can then be used to compute phonon dispersion -relations, directly from molecular dynamics simulations. +matrices from finite temperature MD simulations, which can then be +used to compute phonon dispersion relations, directly from molecular +dynamics simulations. -See the doc page for the fix phonon command for detailed usage -instructions. +It also contains two commands to compute the dynamical matrix and +the corresponding third order matrix at pre-optimized positions +through finite differences. + +See the doc page for the fix phonon command or the dynamical_matrix +third_order commands for detailed usage instructions. Use of this package requires building LAMMPS with FFT suppport, as described in doc/Section_start.html. -There are example scripts for using this package in +There are example scripts for using commands in this package in examples/USER/phonon. There is an auxiliary post-processing tool in tools/phonon that will compute phonon frequencies and dispersion relations from the dynamical -matrices output by this command. +matrices output by the fix phonon command. There is also an alternative code, dump2phonon, available which enables one to use the functions of fix-phonon by reading in atom-style dump @@ -21,6 +26,9 @@ files of lammps (which can be converted from the trajectories of any other MD code): https://github.com/lingtikong/dump2phonon -The person who created this package is Ling-Ti Kong (konglt at +The person who created fix phonon is Ling-Ti Kong (konglt at sjtu.edu.cn) at Shanghai Jiao Tong University. Contact him directly if you have questions. + +The person who created dynamical_matrix and third_order is +Charlie Sievers at UC Davis. From 9298fe7868c293a5b6fbca1753c9f07747913e2b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Feb 2019 14:45:42 -0500 Subject: [PATCH 112/143] fix segfault and copy-n-modify issues with third order command --- src/USER-PHONON/third_order.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/USER-PHONON/third_order.cpp b/src/USER-PHONON/third_order.cpp index b4d2032a04..f7d72687c6 100644 --- a/src/USER-PHONON/third_order.cpp +++ b/src/USER-PHONON/third_order.cpp @@ -13,6 +13,7 @@ #include "group.h" #include "force.h" #include "math_extra.h" +#include "memory.h" #include "bond.h" #include "angle.h" #include "dihedral.h" @@ -40,7 +41,8 @@ ThirdOrder::ThirdOrder(LAMMPS *lmp) : Pointers(lmp), fp(NULL) ThirdOrder::~ThirdOrder() { - if (fp) fclose(fp); + if (fp && me == 0) fclose(fp); + memory->destroy(groupmap); fp = NULL; } @@ -73,10 +75,11 @@ void ThirdOrder::setup() neighbor->ndanger = 0; // compute all forces - update_force(); + external_force_clear = 0; eflag=0; vflag=0; + update_force(); if (gcount == atom->natoms) for (bigint i=0; inatoms; i++) @@ -92,8 +95,8 @@ void ThirdOrder::command(int narg, char **arg) MPI_Comm_rank(world,&me); if (domain->box_exist == 0) - error->all(FLERR,"Dynamical_matrix command before simulation box is defined"); - if (narg < 2) error->all(FLERR,"Illegal dynamical_matrix command"); + error->all(FLERR,"Third_order command before simulation box is defined"); + if (narg < 2) error->all(FLERR,"Illegal third_oreder command"); lmp->init(); @@ -109,10 +112,11 @@ void ThirdOrder::command(int narg, char **arg) // group and style igroup = group->find(arg[0]); - if (igroup == -1) error->all(FLERR,"Could not find dynamical matrix group ID"); + if (igroup == -1) error->all(FLERR,"Could not find third_order group ID"); groupbit = group->bitmask[igroup]; gcount = group->count(igroup); dynlen = (gcount)*3; + memory->create(groupmap,atom->natoms,"total_group_map:totalgm"); update->setupflag = 1; int style = -1; From 7062bc862eea91a173bec63e4d6a14c0d496d7a7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Feb 2019 15:21:48 -0500 Subject: [PATCH 113/143] remove third_order command and ASE based examples to be added in a new pull request --- .../dynamical_matrix_command/GaAs/GaAs.py | 39 - .../dynamical_matrix_command/GaN/GaN.py | 39 - .../dynamical_matrix_command/Quartz/quartz.py | 57 - .../third_order_command/silicon/Manual.md | 48 - .../third_order_command/silicon/README.md | 25 - .../silicon/Si.opt.tersoff | 66 - .../third_order_command/silicon/combine.sh | 17 - .../silicon/ff-silicon.lmp | 19 - .../third_order_command/silicon/in.silicon | 84 - .../silicon/lmp_bank/silicon_216.lmp | 238 - .../silicon/lmp_bank/silicon_512.lmp | 534 -- .../silicon/lmp_bank/silicon_8.lmp | 29 - .../silicon/results/out.silicon | 58 - .../silicon/results/third_order | 4608 ----------------- .../silicon/silicon_input_file.lmp | 29 - src/USER-PHONON/README | 11 +- src/USER-PHONON/third_order.cpp | 560 -- src/USER-PHONON/third_order.h | 76 - 18 files changed, 5 insertions(+), 6532 deletions(-) delete mode 100644 examples/USER/phonon/dynamical_matrix_command/GaAs/GaAs.py delete mode 100644 examples/USER/phonon/dynamical_matrix_command/GaN/GaN.py delete mode 100644 examples/USER/phonon/dynamical_matrix_command/Quartz/quartz.py delete mode 100755 examples/USER/phonon/third_order_command/silicon/Manual.md delete mode 100755 examples/USER/phonon/third_order_command/silicon/README.md delete mode 100755 examples/USER/phonon/third_order_command/silicon/Si.opt.tersoff delete mode 100755 examples/USER/phonon/third_order_command/silicon/combine.sh delete mode 100755 examples/USER/phonon/third_order_command/silicon/ff-silicon.lmp delete mode 100755 examples/USER/phonon/third_order_command/silicon/in.silicon delete mode 100755 examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_216.lmp delete mode 100755 examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_512.lmp delete mode 100755 examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_8.lmp delete mode 100755 examples/USER/phonon/third_order_command/silicon/results/out.silicon delete mode 100755 examples/USER/phonon/third_order_command/silicon/results/third_order delete mode 100755 examples/USER/phonon/third_order_command/silicon/silicon_input_file.lmp delete mode 100644 src/USER-PHONON/third_order.cpp delete mode 100644 src/USER-PHONON/third_order.h diff --git a/examples/USER/phonon/dynamical_matrix_command/GaAs/GaAs.py b/examples/USER/phonon/dynamical_matrix_command/GaAs/GaAs.py deleted file mode 100644 index 1e9d58a71b..0000000000 --- a/examples/USER/phonon/dynamical_matrix_command/GaAs/GaAs.py +++ /dev/null @@ -1,39 +0,0 @@ -from ase import Atoms, Atom -from ase.calculators.lammpslib import LAMMPSlib -import numpy as np -import matplotlib.pyplot as plt -from mpi4py import MPI - -comm = MPI.COMM_WORLD -rank = comm.Get_rank() - -GaAs = Atoms([Atom('Ga', (0.0, 0.0, 0.0)), - Atom('As', (1.413425, 1.413425, 1.413425))], - cell=[(0.0, 2.82685, 2.82685), (2.82685, 0.0, 2.82685), (2.82685, 2.82685, 0.0)], - pbc=True,) - -cmds = ["pair_style bop", "pair_coeff * * ../../../../../potentials/GaAs.bop.table Ga As", - "comm_modify cutoff 12"] - -mends = ["info system", - "dynamical_matrix all eskm 0.000001 file dynmat.dat binary no", - "neigh_modify delay 0"] - -N = 5 -GaAs = GaAs.repeat([N, N, N]) - -lammps = LAMMPSlib(lmpcmds=cmds, atom_types={'Ga': 1, 'As': 2}, amendments=mends, log_file='lammps.log') - -GaAs.set_calculator(lammps) -GaAs.get_potential_energy() - -if rank == 0: - dynmat = np.loadtxt("dynmat.dat") - dynmat = dynmat.reshape(([int(3*(len(dynmat)/3)**0.5), int(3*(len(dynmat)/3)**0.5)])) - eigv = np.linalg.eigvals(dynmat) - eigv.sort() - eigv = np.sqrt(np.abs(eigv))/(2*np.pi) - plt.hist(eigv, 80) - plt.xlabel('Frequency (THz)') - plt.show() - diff --git a/examples/USER/phonon/dynamical_matrix_command/GaN/GaN.py b/examples/USER/phonon/dynamical_matrix_command/GaN/GaN.py deleted file mode 100644 index 52e14ca47d..0000000000 --- a/examples/USER/phonon/dynamical_matrix_command/GaN/GaN.py +++ /dev/null @@ -1,39 +0,0 @@ -from ase import Atoms, Atom -from ase.calculators.lammpslib import LAMMPSlib -import numpy as np -import matplotlib.pyplot as plt -from mpi4py import MPI - -comm = MPI.COMM_WORLD -rank = comm.Get_rank() - -GaN = Atoms([Atom('Ga', (1.59, 0.917986928012, 0.0)), - Atom('Ga', (1.59, -0.917986928012, 2.583)), - Atom('N', (1.59, 0.917986928012, 1.98891)), - Atom('N', (1.59, -0.917986928012, 4.57191))], - cell=[(1.59, -2.75396078403, 0.0), (1.59, 2.75396078403, 0.0), (0.0, 0.0, 5.166)], - pbc=True) - -cmds = ["pair_style tersoff", "pair_coeff * * ../../../../../potentials/GaN.tersoff Ga N"] - -mends = ["info system", - "dynamical_matrix all eskm 0.000001 file dynmat.dat binary no", - "neigh_modify delay 0"] - -N = 6 -GaN = GaN.repeat([N, N, N]) - -lammps = LAMMPSlib(lmpcmds=cmds, atom_types={'Ga': 1, 'N': 2}, amendments=mends, log_file='lammps.log') - -GaN.set_calculator(lammps) -GaN.get_potential_energy() - -if rank == 0: - dynmat = np.loadtxt("dynmat.dat") - dynmat = dynmat.reshape(([int(3*(len(dynmat)/3)**0.5), int(3*(len(dynmat)/3)**0.5)])) - eigv = np.linalg.eigvals(dynmat) - eigv.sort() - eigv = np.sqrt(np.abs(eigv))/(2*np.pi) - plt.hist(eigv, 80) - plt.xlabel('Frequency (THz)') - plt.show() diff --git a/examples/USER/phonon/dynamical_matrix_command/Quartz/quartz.py b/examples/USER/phonon/dynamical_matrix_command/Quartz/quartz.py deleted file mode 100644 index 79a81aa95c..0000000000 --- a/examples/USER/phonon/dynamical_matrix_command/Quartz/quartz.py +++ /dev/null @@ -1,57 +0,0 @@ -from ase import Atoms, Atom -from ase.calculators.lammpslib import LAMMPSlib -import numpy as np -import matplotlib.pyplot as plt -from mpi4py import MPI - -comm = MPI.COMM_WORLD -rank = comm.Get_rank() - -quartz = Atoms( - [Atom('Si', (1.1545226, -1.99969180169, 0.0)), - Atom('Si', (1.1545226, 1.99969180169, 3.6036)), - Atom('Si', (2.6069548, 2.15247249027e-16, 1.8018)), - Atom('O', (1.6724232, -0.624132037742, 0.64378314)), - Atom('O', (1.6724232, 0.624132037742, 2.9598186618)), - Atom('O', (2.1623026, -2.49695388906, 4.2473849418)), - Atom('O', (3.5392742, 1.13629495821, 1.1580150582)), - Atom('O', (3.5392742, -1.13629495821, 2.4455813382)), - Atom('O', (2.1623026, 2.49695388906, 4.76161686))], - cell=[(2.458, -4.257380885, 0.0), (2.458, 4.257380885, 0.0), (0.0, 0.0, 5.4054)], - pbc=True, - ) - -# number of repeats -N = 3 -quartz = quartz.repeat([N, N, N]) - -header = ['units metal', - 'atom_style charge', - 'atom_modify map array sort 0 0'] - -cmds = ["pair_style buck/coul/long 10.0 8.0", - "pair_coeff 1 1 0 1 0", - "pair_coeff 1 2 18003.7572 0.20520 133.5381", - "pair_coeff 2 2 1388.7730 0.36232 175.0000", - "kspace_style ewald 1.0e-12", - "set type 1 charge 2.4", - "set type 2 charge -1.2"] - -mends = ["dynamical_matrix all eskm 0.000001 file dynmat.dat binary no", - "neigh_modify delay 0"] - - -lammps = LAMMPSlib(lmpcmds=cmds, lammps_header=header, amendments=mends, log_file='lammps.log') - -quartz.set_calculator(lammps) -quartz.get_potential_energy() - -if rank == 0: - dynmat = np.loadtxt("dynmat.dat") - dynmat = dynmat.reshape(([int(3*(len(dynmat)/3)**0.5), int(3*(len(dynmat)/3)**0.5)])) - eigv = np.linalg.eigvals(dynmat) - eigv.sort() - plt.hist(33*np.sqrt(np.abs(eigv))/(2*np.pi), 80) - plt.xlabel('Frequency (cm-1)') - plt.show() - diff --git a/examples/USER/phonon/third_order_command/silicon/Manual.md b/examples/USER/phonon/third_order_command/silicon/Manual.md deleted file mode 100755 index 49340cb54d..0000000000 --- a/examples/USER/phonon/third_order_command/silicon/Manual.md +++ /dev/null @@ -1,48 +0,0 @@ -# third_order command - -## Syntax - -``` -third_order group-ID style args keyword value ... -``` - -* group-ID = ID of group of atoms to displace -* style = *regular* or *ballistico* -``` -*regular* args = gamma - gamma = finite difference displacement length -*ballistico* args = gamma - gamma = finite difference displacement length -``` -* zero or more keyword/value pairs may be appended -* keyword = *file* or *binary* -``` -*file* value = output_file - output_file = name of file to dump the dynamical matrix into -*binary* values = *no* or *gzip* -``` - -## Examples - -``` -third_order 1 regular 0.000001 -third_order 1 ballistico 0.000001 -third_order 3 regular 0.00004 file third_order.dat -third_order 5 ballistico 0.00000001 file third_order.dat binary gzip -``` - -## Description - -Calculate the finite difference third order tensor of the selected group. - -## Restrictions - -None - -## Related commands - -None - -## Default - -The option defaults are file = "third_order.dat", binary = no diff --git a/examples/USER/phonon/third_order_command/silicon/README.md b/examples/USER/phonon/third_order_command/silicon/README.md deleted file mode 100755 index c938734393..0000000000 --- a/examples/USER/phonon/third_order_command/silicon/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# LAMMPS LATTICE DYNAMICS COMMANDS - -## THIRD ORDER TENSOR CALCULATOR - -This directory contains the ingredients to calculate a third order tensor. - -Example: -``` -$THIRD_ORDER=third_order #tensor output file -NP=4 #number of processors -mpirun -np $NP lmp_mpi -in in.silicon -out out.silicon -combine.sh third_order -``` - -To test out a different silicon example: -``` -$THIRD_ORDER=third_order -$LMP_FILE=amorphous_silicon.lmp -cp lmp_bank/$LMP_FILE ./silicon_input_file.lmp -NP=4 #number of processors -mpirun -np $NP lmp_mpi -in in.silicon -out out.silicon -bash combine.sh $THIRD_ORDER -``` - -## Requires: MANYBODY and MOLECULE packages diff --git a/examples/USER/phonon/third_order_command/silicon/Si.opt.tersoff b/examples/USER/phonon/third_order_command/silicon/Si.opt.tersoff deleted file mode 100755 index 3bc19f0581..0000000000 --- a/examples/USER/phonon/third_order_command/silicon/Si.opt.tersoff +++ /dev/null @@ -1,66 +0,0 @@ -# Tersoff parameters for various elements and mixtures -# multiple entries can be added to this file, LAMMPS reads the ones it needs -# these entries are in LAMMPS "metal" units: -# A,B = eV; lambda1,lambda2,lambda3 = 1/Angstroms; R,D = Angstroms -# other quantities are unitless - -# Aidan Thompson (athomps at sandia.gov) takes full blame for this -# file. It specifies various potentials published by J. Tersoff for -# silicon, carbon and germanium. Since Tersoff published several -# different silicon potentials, I refer to them using atom types -# Si(B), Si(C) and Si(D). The last two are almost almost identical but -# refer to two different publications. These names should be used in -# the LAMMPS command when the file is invoked. For example: -# pair_coeff * * SiCGe.tersoff Si(B). The Si(D), C and Ge potentials -# can be used pure silicon, pure carbon, pure germanium, binary SiC, -# and binary SiGe, but not binary GeC or ternary SiGeC. LAMMPS will -# generate an error if this file is used with any combination -# involving C and Ge, since there are no entries for the GeC -# interactions (Tersoff did not publish parameters for this -# cross-interaction.) - -# format of a single entry (one or more lines): -# element 1, element 2, element 3, -# m, gamma, lambda3, c, d, costheta0, n, beta, lambda2, B, R, D, lambda1, A - -# The original Tersoff potential for Silicon, Si(B) -# J. Tersoff, PRB, 37, 6991 (1988) - -Si(B) Si(B) Si(B) 3.0 1.0 1.3258 4.8381 2.0417 0.0000 22.956 - 0.33675 1.3258 95.373 3.0 0.2 3.2394 3264.7 - -# The later Tersoff potential for Silicon, Si(C) -# J. Tersoff, PRB, 38, 9902 (1988) - -Si(C) Si(C) Si(C) 3.0 1.0 1.7322 1.0039e5 16.218 -0.59826 0.78734 - 1.0999e-6 1.7322 471.18 2.85 0.15 2.4799 1830.8 - -# The later Tersoff potential for Carbon, Silicon, and Germanium -# J. Tersoff, PRB, 39, 5566 (1989) + errata (PRB 41, 3248) -# The Si and C parameters are very close to those in SiC.tersoff - -C C C 3.0 1.0 0.0 3.8049e4 4.3484 -0.57058 0.72751 1.5724e-7 2.2119 346.74 1.95 0.15 3.4879 1393.6 -Si(D) Si(D) Si(D) 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 1.1000e-6 1.7322 471.18 2.85 0.15 2.4799 1830.8 -Ge Ge Ge 3.0 1.0 0.0 1.0643e5 15.652 -0.43884 0.75627 9.0166e-7 1.7047 419.23 2.95 0.15 2.4451 1769.0 - -C Si(D) Si(D) 3.0 1.0 0.0 3.8049e4 4.3484 -0.57058 0.72751 1.5724e-7 1.97205 395.1451 2.3573 0.1527 2.9839 1597.3111 -C Si(D) C 3.0 1.0 0.0 3.8049e4 4.3484 -0.57058 0.72751 0.0 0.0 0.0 1.95 0.15 0.0 0.0 -C C Si(D) 3.0 1.0 0.0 3.8049e4 4.3484 -0.57058 0.72751 0.0 0.0 0.0 2.3573 0.1527 0.0 0.0 - -Si(D) C C 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 1.1000e-6 1.97205 395.1451 2.3573 0.1527 2.9839 1597.3111 -Si(D) Si(D) C 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 0.0 0.0 0.0 2.3573 0.1527 0.0 0.0 -Si(D) C Si(D) 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 0.0 0.0 0.0 2.85 0.15 0.0 0.0 - -Si(D) Ge Ge 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 1.1000e-6 1.71845 444.7177 2.8996 0.1500 2.4625 1799.6347 -Si(D) Si(D) Ge 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 0.0 0.0 0.0 2.8996 0.1500 0.0 0.0 -Si(D) Ge Si(D) 3.0 1.0 0.0 1.0039e5 16.217 -0.59825 0.78734 0.0 0.0 0.0 2.85 0.15 0.0 0.0 - -Ge Si(D) Si(D) 3.0 1.0 0.0 1.0643e5 15.652 -0.43884 0.75627 9.0166e-7 1.71845 444.7177 2.8996 0.1500 2.4625 1799.6347 -Ge Si(D) Ge 3.0 1.0 0.0 1.0643e5 15.652 -0.43884 0.75627 0.0 0.0 0.0 2.95 0.15 0.0 0.0 -Ge Ge Si(D) 3.0 1.0 0.0 1.0643e5 15.652 -0.43884 0.75627 0.0 0.0 0.0 2.8996 0.1500 0.0 0.0 - -# Optimized Tersoff for Carbon: Lindsay and Broido PRB 81, 205441 (2010) -# element 1, element 2, element 3, -# m, gamma, lambda3, c, d, costheta0, n, beta, lambda2, B, R, D, lambda1, A -C(O) C(O) C(O) 3.0 1.0 0.0 3.8049e4 4.3484 -0.930 0.72751 1.5724e-7 2.2119 430.0 1.95 0.15 3.4879 1393.6 - diff --git a/examples/USER/phonon/third_order_command/silicon/combine.sh b/examples/USER/phonon/third_order_command/silicon/combine.sh deleted file mode 100755 index 3eca2537be..0000000000 --- a/examples/USER/phonon/third_order_command/silicon/combine.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -#This script takes one argument -#The argument is the base name for the split up tensor -#The script then combines and sorts the tensor -#$1 file name - -echo "$1" -[ -f $1 ] && rm $1 - -for i in $(ls ./$1*); do - cat $i >> temp - rm $i -done - -sort temp | sort -s -n -k 3 | sort -s -n -k 1 > $1 -rm temp diff --git a/examples/USER/phonon/third_order_command/silicon/ff-silicon.lmp b/examples/USER/phonon/third_order_command/silicon/ff-silicon.lmp deleted file mode 100755 index f3b895f168..0000000000 --- a/examples/USER/phonon/third_order_command/silicon/ff-silicon.lmp +++ /dev/null @@ -1,19 +0,0 @@ -############################# -#Atoms types - mass - charge# -############################# -#@ 1 atom types #!THIS LINE IS NECESSARY DON'T SPEND HOURS FINDING THAT OUT!# - -variable Si equal 1 - -############# -#Atom Masses# -############# - -mass ${Si} 28.08550 - -########################### -#Pair Potentials - Tersoff# -########################### - -pair_style tersoff -pair_coeff * * Si.opt.tersoff Si(D) diff --git a/examples/USER/phonon/third_order_command/silicon/in.silicon b/examples/USER/phonon/third_order_command/silicon/in.silicon deleted file mode 100755 index b8a9e214c4..0000000000 --- a/examples/USER/phonon/third_order_command/silicon/in.silicon +++ /dev/null @@ -1,84 +0,0 @@ -###############################mm -# Atom style - charge/vdw/bonded# -################################# -atom_style full - -############################################## -#Units Metal : eV - ps - angstrom - bar# -# Real : kcal/mol - fs - angstrom - atm# -############################################## -units metal - -############ -#Run number# -############ -variable run_no equal 0 # is it a restart? -variable res_no equal ${run_no}-1 # restart file number - -####################################### -#Random Seeds and Domain Decomposition# -####################################### -variable iseed0 equal 2357 -variable iseed1 equal 26488 -variable iseed2 equal 10669 -processors * * 1 - -########### -#Data File# -########### -variable inpfile string silicon_input_file.lmp -variable resfile string final_restart.${res_no} -variable ff_file string ff-silicon.lmp - -########## -#Run Type# -########## -variable minimise equal 0 #Energy Minimization - -############################### -#Molecular Dynamics Parameters# -############################### -neighbor 1 bin - -################################ -#Energy Minimization Parameters# -################################ -variable mtraj equal 1 # trajectory output frequency - all system -variable etol equal 1e-5 # % change in energy -variable ftol equal 1e-5 # max force threshold (force units) -variable maxiter equal 10000 # max # of iterations - -######################## -#3D Periodic Simulation# -######################## -boundary p p p - -############################# -#Reading the input structure# -############################# -if "${run_no} == 0" then "read_data ${inpfile}" else "read_restart ${resfile}" - -############# -#Force Field# -############# -include ${ff_file} - -##################### -#Energy Minimization# -##################### -if "${minimise} <= 0 || ${run_no} > 0" then "jump SELF end_minimise" - print "Doing CG minimisation" - dump mdcd all dcd ${mtraj} min.dcd - dump_modify mdcd unwrap yes - min_style cg - min_modify line quadratic - minimize ${etol} ${ftol} ${maxiter} ${maxiter} - reset_timestep 0 - undump mdcd -label end_minimise - -################## -#Dynamical Matrix# -################## -third_order all ballistico 0.00001 file third_order binary no - diff --git a/examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_216.lmp b/examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_216.lmp deleted file mode 100755 index 893d75e69b..0000000000 --- a/examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_216.lmp +++ /dev/null @@ -1,238 +0,0 @@ -LAMMPS description - - 216 atoms - 0 bonds - 0 angles - 0 dihedrals - 0 impropers - - 1 atom types - 0 bond types - 0 angle types - 0 dihedral types - 0 improper types - - - 0.0000000 16.293000 xlo xhi - 0.0000000 16.293000 ylo yhi - 0.0000000 16.293000 zlo zhi - - Atoms - - 1 1 1 0.0000000 0.0000000 0.0000000 0.0000000 - 2 2 1 0.0000000 0.0000000 2.7160000 2.7160000 - 3 3 1 0.0000000 2.7160000 2.7160000 0.0000000 - 4 4 1 0.0000000 2.7160000 0.0000000 2.7160000 - 5 5 1 0.0000000 4.0730000 1.3580000 4.0730000 - 6 6 1 0.0000000 1.3580000 1.3580000 1.3580000 - 7 7 1 0.0000000 1.3580000 4.0730000 4.0730000 - 8 8 1 0.0000000 4.0730000 4.0730000 1.3580000 - 9 9 1 0.0000000 0.0000000 0.0000000 5.4310000 - 10 10 1 0.0000000 0.0000000 2.7160000 8.1460000 - 11 11 1 0.0000000 2.7160000 2.7160000 5.4310000 - 12 12 1 0.0000000 2.7160000 0.0000000 8.1460000 - 13 13 1 0.0000000 4.0730000 1.3580000 9.5040000 - 14 14 1 0.0000000 1.3580000 1.3580000 6.7890000 - 15 15 1 0.0000000 1.3580000 4.0730000 9.5040000 - 16 16 1 0.0000000 4.0730000 4.0730000 6.7890000 - 17 17 1 0.0000000 0.0000000 0.0000000 10.8620000 - 18 18 1 0.0000000 0.0000000 2.7160000 13.5780000 - 19 19 1 0.0000000 2.7160000 2.7160000 10.8620000 - 20 20 1 0.0000000 2.7160000 0.0000000 13.5780000 - 21 21 1 0.0000000 4.0730000 1.3580000 14.9350000 - 22 22 1 0.0000000 1.3580000 1.3580000 12.2200000 - 23 23 1 0.0000000 1.3580000 4.0730000 14.9350000 - 24 24 1 0.0000000 4.0730000 4.0730000 12.2200000 - 25 25 1 0.0000000 0.0000000 5.4310000 0.0000000 - 26 26 1 0.0000000 0.0000000 8.1460000 2.7160000 - 27 27 1 0.0000000 2.7160000 8.1460000 0.0000000 - 28 28 1 0.0000000 2.7160000 5.4310000 2.7160000 - 29 29 1 0.0000000 4.0730000 6.7890000 4.0730000 - 30 30 1 0.0000000 1.3580000 6.7890000 1.3580000 - 31 31 1 0.0000000 1.3580000 9.5040000 4.0730000 - 32 32 1 0.0000000 4.0730000 9.5040000 1.3580000 - 33 33 1 0.0000000 0.0000000 5.4310000 5.4310000 - 34 34 1 0.0000000 0.0000000 8.1460000 8.1460000 - 35 35 1 0.0000000 2.7160000 8.1460000 5.4310000 - 36 36 1 0.0000000 2.7160000 5.4310000 8.1460000 - 37 37 1 0.0000000 4.0730000 6.7890000 9.5040000 - 38 38 1 0.0000000 1.3580000 6.7890000 6.7890000 - 39 39 1 0.0000000 1.3580000 9.5040000 9.5040000 - 40 40 1 0.0000000 4.0730000 9.5040000 6.7890000 - 41 41 1 0.0000000 0.0000000 5.4310000 10.8620000 - 42 42 1 0.0000000 0.0000000 8.1460000 13.5780000 - 43 43 1 0.0000000 2.7160000 8.1460000 10.8620000 - 44 44 1 0.0000000 2.7160000 5.4310000 13.5780000 - 45 45 1 0.0000000 4.0730000 6.7890000 14.9350000 - 46 46 1 0.0000000 1.3580000 6.7890000 12.2200000 - 47 47 1 0.0000000 1.3580000 9.5040000 14.9350000 - 48 48 1 0.0000000 4.0730000 9.5040000 12.2200000 - 49 49 1 0.0000000 0.0000000 10.8620000 0.0000000 - 50 50 1 0.0000000 0.0000000 13.5780000 2.7160000 - 51 51 1 0.0000000 2.7160000 13.5780000 0.0000000 - 52 52 1 0.0000000 2.7160000 10.8620000 2.7160000 - 53 53 1 0.0000000 4.0730000 12.2200000 4.0730000 - 54 54 1 0.0000000 1.3580000 12.2200000 1.3580000 - 55 55 1 0.0000000 1.3580000 14.9350000 4.0730000 - 56 56 1 0.0000000 4.0730000 14.9350000 1.3580000 - 57 57 1 0.0000000 0.0000000 10.8620000 5.4310000 - 58 58 1 0.0000000 0.0000000 13.5780000 8.1460000 - 59 59 1 0.0000000 2.7160000 13.5780000 5.4310000 - 60 60 1 0.0000000 2.7160000 10.8620000 8.1460000 - 61 61 1 0.0000000 4.0730000 12.2200000 9.5040000 - 62 62 1 0.0000000 1.3580000 12.2200000 6.7890000 - 63 63 1 0.0000000 1.3580000 14.9350000 9.5040000 - 64 64 1 0.0000000 4.0730000 14.9350000 6.7890000 - 65 65 1 0.0000000 0.0000000 10.8620000 10.8620000 - 66 66 1 0.0000000 0.0000000 13.5780000 13.5780000 - 67 67 1 0.0000000 2.7160000 13.5780000 10.8620000 - 68 68 1 0.0000000 2.7160000 10.8620000 13.5780000 - 69 69 1 0.0000000 4.0730000 12.2200000 14.9350000 - 70 70 1 0.0000000 1.3580000 12.2200000 12.2200000 - 71 71 1 0.0000000 1.3580000 14.9350000 14.9350000 - 72 72 1 0.0000000 4.0730000 14.9350000 12.2200000 - 73 73 1 0.0000000 5.4310000 0.0000000 0.0000000 - 74 74 1 0.0000000 5.4310000 2.7160000 2.7160000 - 75 75 1 0.0000000 8.1460000 2.7160000 0.0000000 - 76 76 1 0.0000000 8.1460000 0.0000000 2.7160000 - 77 77 1 0.0000000 9.5040000 1.3580000 4.0730000 - 78 78 1 0.0000000 6.7890000 1.3580000 1.3580000 - 79 79 1 0.0000000 6.7890000 4.0730000 4.0730000 - 80 80 1 0.0000000 9.5040000 4.0730000 1.3580000 - 81 81 1 0.0000000 5.4310000 0.0000000 5.4310000 - 82 82 1 0.0000000 5.4310000 2.7160000 8.1460000 - 83 83 1 0.0000000 8.1460000 2.7160000 5.4310000 - 84 84 1 0.0000000 8.1460000 0.0000000 8.1460000 - 85 85 1 0.0000000 9.5040000 1.3580000 9.5040000 - 86 86 1 0.0000000 6.7890000 1.3580000 6.7890000 - 87 87 1 0.0000000 6.7890000 4.0730000 9.5040000 - 88 88 1 0.0000000 9.5040000 4.0730000 6.7890000 - 89 89 1 0.0000000 5.4310000 0.0000000 10.8620000 - 90 90 1 0.0000000 5.4310000 2.7160000 13.5780000 - 91 91 1 0.0000000 8.1460000 2.7160000 10.8620000 - 92 92 1 0.0000000 8.1460000 0.0000000 13.5780000 - 93 93 1 0.0000000 9.5040000 1.3580000 14.9350000 - 94 94 1 0.0000000 6.7890000 1.3580000 12.2200000 - 95 95 1 0.0000000 6.7890000 4.0730000 14.9350000 - 96 96 1 0.0000000 9.5040000 4.0730000 12.2200000 - 97 97 1 0.0000000 5.4310000 5.4310000 0.0000000 - 98 98 1 0.0000000 5.4310000 8.1460000 2.7160000 - 99 99 1 0.0000000 8.1460000 8.1460000 0.0000000 - 100 100 1 0.0000000 8.1460000 5.4310000 2.7160000 - 101 101 1 0.0000000 9.5040000 6.7890000 4.0730000 - 102 102 1 0.0000000 6.7890000 6.7890000 1.3580000 - 103 103 1 0.0000000 6.7890000 9.5040000 4.0730000 - 104 104 1 0.0000000 9.5040000 9.5040000 1.3580000 - 105 105 1 0.0000000 5.4310000 5.4310000 5.4310000 - 106 106 1 0.0000000 5.4310000 8.1460000 8.1460000 - 107 107 1 0.0000000 8.1460000 8.1460000 5.4310000 - 108 108 1 0.0000000 8.1460000 5.4310000 8.1460000 - 109 109 1 0.0000000 9.5040000 6.7890000 9.5040000 - 110 110 1 0.0000000 6.7890000 6.7890000 6.7890000 - 111 111 1 0.0000000 6.7890000 9.5040000 9.5040000 - 112 112 1 0.0000000 9.5040000 9.5040000 6.7890000 - 113 113 1 0.0000000 5.4310000 5.4310000 10.8620000 - 114 114 1 0.0000000 5.4310000 8.1460000 13.5780000 - 115 115 1 0.0000000 8.1460000 8.1460000 10.8620000 - 116 116 1 0.0000000 8.1460000 5.4310000 13.5780000 - 117 117 1 0.0000000 9.5040000 6.7890000 14.9350000 - 118 118 1 0.0000000 6.7890000 6.7890000 12.2200000 - 119 119 1 0.0000000 6.7890000 9.5040000 14.9350000 - 120 120 1 0.0000000 9.5040000 9.5040000 12.2200000 - 121 121 1 0.0000000 5.4310000 10.8620000 0.0000000 - 122 122 1 0.0000000 5.4310000 13.5780000 2.7160000 - 123 123 1 0.0000000 8.1460000 13.5780000 0.0000000 - 124 124 1 0.0000000 8.1460000 10.8620000 2.7160000 - 125 125 1 0.0000000 9.5040000 12.2200000 4.0730000 - 126 126 1 0.0000000 6.7890000 12.2200000 1.3580000 - 127 127 1 0.0000000 6.7890000 14.9350000 4.0730000 - 128 128 1 0.0000000 9.5040000 14.9350000 1.3580000 - 129 129 1 0.0000000 5.4310000 10.8620000 5.4310000 - 130 130 1 0.0000000 5.4310000 13.5780000 8.1460000 - 131 131 1 0.0000000 8.1460000 13.5780000 5.4310000 - 132 132 1 0.0000000 8.1460000 10.8620000 8.1460000 - 133 133 1 0.0000000 9.5040000 12.2200000 9.5040000 - 134 134 1 0.0000000 6.7890000 12.2200000 6.7890000 - 135 135 1 0.0000000 6.7890000 14.9350000 9.5040000 - 136 136 1 0.0000000 9.5040000 14.9350000 6.7890000 - 137 137 1 0.0000000 5.4310000 10.8620000 10.8620000 - 138 138 1 0.0000000 5.4310000 13.5780000 13.5780000 - 139 139 1 0.0000000 8.1460000 13.5780000 10.8620000 - 140 140 1 0.0000000 8.1460000 10.8620000 13.5780000 - 141 141 1 0.0000000 9.5040000 12.2200000 14.9350000 - 142 142 1 0.0000000 6.7890000 12.2200000 12.2200000 - 143 143 1 0.0000000 6.7890000 14.9350000 14.9350000 - 144 144 1 0.0000000 9.5040000 14.9350000 12.2200000 - 145 145 1 0.0000000 10.8620000 0.0000000 0.0000000 - 146 146 1 0.0000000 10.8620000 2.7160000 2.7160000 - 147 147 1 0.0000000 13.5780000 2.7160000 0.0000000 - 148 148 1 0.0000000 13.5780000 0.0000000 2.7160000 - 149 149 1 0.0000000 14.9350000 1.3580000 4.0730000 - 150 150 1 0.0000000 12.2200000 1.3580000 1.3580000 - 151 151 1 0.0000000 12.2200000 4.0730000 4.0730000 - 152 152 1 0.0000000 14.9350000 4.0730000 1.3580000 - 153 153 1 0.0000000 10.8620000 0.0000000 5.4310000 - 154 154 1 0.0000000 10.8620000 2.7160000 8.1460000 - 155 155 1 0.0000000 13.5780000 2.7160000 5.4310000 - 156 156 1 0.0000000 13.5780000 0.0000000 8.1460000 - 157 157 1 0.0000000 14.9350000 1.3580000 9.5040000 - 158 158 1 0.0000000 12.2200000 1.3580000 6.7890000 - 159 159 1 0.0000000 12.2200000 4.0730000 9.5040000 - 160 160 1 0.0000000 14.9350000 4.0730000 6.7890000 - 161 161 1 0.0000000 10.8620000 0.0000000 10.8620000 - 162 162 1 0.0000000 10.8620000 2.7160000 13.5780000 - 163 163 1 0.0000000 13.5780000 2.7160000 10.8620000 - 164 164 1 0.0000000 13.5780000 0.0000000 13.5780000 - 165 165 1 0.0000000 14.9350000 1.3580000 14.9350000 - 166 166 1 0.0000000 12.2200000 1.3580000 12.2200000 - 167 167 1 0.0000000 12.2200000 4.0730000 14.9350000 - 168 168 1 0.0000000 14.9350000 4.0730000 12.2200000 - 169 169 1 0.0000000 10.8620000 5.4310000 0.0000000 - 170 170 1 0.0000000 10.8620000 8.1460000 2.7160000 - 171 171 1 0.0000000 13.5780000 8.1460000 0.0000000 - 172 172 1 0.0000000 13.5780000 5.4310000 2.7160000 - 173 173 1 0.0000000 14.9350000 6.7890000 4.0730000 - 174 174 1 0.0000000 12.2200000 6.7890000 1.3580000 - 175 175 1 0.0000000 12.2200000 9.5040000 4.0730000 - 176 176 1 0.0000000 14.9350000 9.5040000 1.3580000 - 177 177 1 0.0000000 10.8620000 5.4310000 5.4310000 - 178 178 1 0.0000000 10.8620000 8.1460000 8.1460000 - 179 179 1 0.0000000 13.5780000 8.1460000 5.4310000 - 180 180 1 0.0000000 13.5780000 5.4310000 8.1460000 - 181 181 1 0.0000000 14.9350000 6.7890000 9.5040000 - 182 182 1 0.0000000 12.2200000 6.7890000 6.7890000 - 183 183 1 0.0000000 12.2200000 9.5040000 9.5040000 - 184 184 1 0.0000000 14.9350000 9.5040000 6.7890000 - 185 185 1 0.0000000 10.8620000 5.4310000 10.8620000 - 186 186 1 0.0000000 10.8620000 8.1460000 13.5780000 - 187 187 1 0.0000000 13.5780000 8.1460000 10.8620000 - 188 188 1 0.0000000 13.5780000 5.4310000 13.5780000 - 189 189 1 0.0000000 14.9350000 6.7890000 14.9350000 - 190 190 1 0.0000000 12.2200000 6.7890000 12.2200000 - 191 191 1 0.0000000 12.2200000 9.5040000 14.9350000 - 192 192 1 0.0000000 14.9350000 9.5040000 12.2200000 - 193 193 1 0.0000000 10.8620000 10.8620000 0.0000000 - 194 194 1 0.0000000 10.8620000 13.5780000 2.7160000 - 195 195 1 0.0000000 13.5780000 13.5780000 0.0000000 - 196 196 1 0.0000000 13.5780000 10.8620000 2.7160000 - 197 197 1 0.0000000 14.9350000 12.2200000 4.0730000 - 198 198 1 0.0000000 12.2200000 12.2200000 1.3580000 - 199 199 1 0.0000000 12.2200000 14.9350000 4.0730000 - 200 200 1 0.0000000 14.9350000 14.9350000 1.3580000 - 201 201 1 0.0000000 10.8620000 10.8620000 5.4310000 - 202 202 1 0.0000000 10.8620000 13.5780000 8.1460000 - 203 203 1 0.0000000 13.5780000 13.5780000 5.4310000 - 204 204 1 0.0000000 13.5780000 10.8620000 8.1460000 - 205 205 1 0.0000000 14.9350000 12.2200000 9.5040000 - 206 206 1 0.0000000 12.2200000 12.2200000 6.7890000 - 207 207 1 0.0000000 12.2200000 14.9350000 9.5040000 - 208 208 1 0.0000000 14.9350000 14.9350000 6.7890000 - 209 209 1 0.0000000 10.8620000 10.8620000 10.8620000 - 210 210 1 0.0000000 10.8620000 13.5780000 13.5780000 - 211 211 1 0.0000000 13.5780000 13.5780000 10.8620000 - 212 212 1 0.0000000 13.5780000 10.8620000 13.5780000 - 213 213 1 0.0000000 14.9350000 12.2200000 14.9350000 - 214 214 1 0.0000000 12.2200000 12.2200000 12.2200000 - 215 215 1 0.0000000 12.2200000 14.9350000 14.9350000 - 216 216 1 0.0000000 14.9350000 14.9350000 12.2200000 - diff --git a/examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_512.lmp b/examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_512.lmp deleted file mode 100755 index 8c1ecd30bd..0000000000 --- a/examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_512.lmp +++ /dev/null @@ -1,534 +0,0 @@ -LAMMPS description - - 512 atoms - 0 bonds - 0 angles - 0 dihedrals - 0 impropers - - 1 atom types - 0 bond types - 0 angle types - 0 dihedral types - 0 improper types - - - 0.0000000 21.724000 xlo xhi - 0.0000000 21.724000 ylo yhi - 0.0000000 21.724000 zlo zhi - - Atoms - - 1 1 1 0.0000000 0.0000000 0.0000000 0.0000000 - 2 2 1 0.0000000 0.0000000 2.7150000 2.7150000 - 3 3 1 0.0000000 2.7150000 2.7150000 0.0000000 - 4 4 1 0.0000000 2.7150000 0.0000000 2.7150000 - 5 5 1 0.0000000 4.0730000 1.3580000 4.0730000 - 6 6 1 0.0000000 1.3580000 1.3580000 1.3580000 - 7 7 1 0.0000000 1.3580000 4.0730000 4.0730000 - 8 8 1 0.0000000 4.0730000 4.0730000 1.3580000 - 9 9 1 0.0000000 0.0000000 0.0000000 5.4310000 - 10 10 1 0.0000000 0.0000000 2.7150000 8.1460000 - 11 11 1 0.0000000 2.7150000 2.7150000 5.4310000 - 12 12 1 0.0000000 2.7150000 0.0000000 8.1460000 - 13 13 1 0.0000000 4.0730000 1.3580000 9.5040000 - 14 14 1 0.0000000 1.3580000 1.3580000 6.7890000 - 15 15 1 0.0000000 1.3580000 4.0730000 9.5040000 - 16 16 1 0.0000000 4.0730000 4.0730000 6.7890000 - 17 17 1 0.0000000 0.0000000 0.0000000 10.8620000 - 18 18 1 0.0000000 0.0000000 2.7150000 13.5770000 - 19 19 1 0.0000000 2.7150000 2.7150000 10.8620000 - 20 20 1 0.0000000 2.7150000 0.0000000 13.5770000 - 21 21 1 0.0000000 4.0730000 1.3580000 14.9350000 - 22 22 1 0.0000000 1.3580000 1.3580000 12.2200000 - 23 23 1 0.0000000 1.3580000 4.0730000 14.9350000 - 24 24 1 0.0000000 4.0730000 4.0730000 12.2200000 - 25 25 1 0.0000000 0.0000000 0.0000000 16.2930000 - 26 26 1 0.0000000 0.0000000 2.7150000 19.0080000 - 27 27 1 0.0000000 2.7150000 2.7150000 16.2930000 - 28 28 1 0.0000000 2.7150000 0.0000000 19.0080000 - 29 29 1 0.0000000 4.0730000 1.3580000 20.3660000 - 30 30 1 0.0000000 1.3580000 1.3580000 17.6510000 - 31 31 1 0.0000000 1.3580000 4.0730000 20.3660000 - 32 32 1 0.0000000 4.0730000 4.0730000 17.6510000 - 33 33 1 0.0000000 0.0000000 5.4310000 0.0000000 - 34 34 1 0.0000000 0.0000000 8.1460000 2.7150000 - 35 35 1 0.0000000 2.7150000 8.1460000 0.0000000 - 36 36 1 0.0000000 2.7150000 5.4310000 2.7150000 - 37 37 1 0.0000000 4.0730000 6.7890000 4.0730000 - 38 38 1 0.0000000 1.3580000 6.7890000 1.3580000 - 39 39 1 0.0000000 1.3580000 9.5040000 4.0730000 - 40 40 1 0.0000000 4.0730000 9.5040000 1.3580000 - 41 41 1 0.0000000 0.0000000 5.4310000 5.4310000 - 42 42 1 0.0000000 0.0000000 8.1460000 8.1460000 - 43 43 1 0.0000000 2.7150000 8.1460000 5.4310000 - 44 44 1 0.0000000 2.7150000 5.4310000 8.1460000 - 45 45 1 0.0000000 4.0730000 6.7890000 9.5040000 - 46 46 1 0.0000000 1.3580000 6.7890000 6.7890000 - 47 47 1 0.0000000 1.3580000 9.5040000 9.5040000 - 48 48 1 0.0000000 4.0730000 9.5040000 6.7890000 - 49 49 1 0.0000000 0.0000000 5.4310000 10.8620000 - 50 50 1 0.0000000 0.0000000 8.1460000 13.5770000 - 51 51 1 0.0000000 2.7150000 8.1460000 10.8620000 - 52 52 1 0.0000000 2.7150000 5.4310000 13.5770000 - 53 53 1 0.0000000 4.0730000 6.7890000 14.9350000 - 54 54 1 0.0000000 1.3580000 6.7890000 12.2200000 - 55 55 1 0.0000000 1.3580000 9.5040000 14.9350000 - 56 56 1 0.0000000 4.0730000 9.5040000 12.2200000 - 57 57 1 0.0000000 0.0000000 5.4310000 16.2930000 - 58 58 1 0.0000000 0.0000000 8.1460000 19.0080000 - 59 59 1 0.0000000 2.7150000 8.1460000 16.2930000 - 60 60 1 0.0000000 2.7150000 5.4310000 19.0080000 - 61 61 1 0.0000000 4.0730000 6.7890000 20.3660000 - 62 62 1 0.0000000 1.3580000 6.7890000 17.6510000 - 63 63 1 0.0000000 1.3580000 9.5040000 20.3660000 - 64 64 1 0.0000000 4.0730000 9.5040000 17.6510000 - 65 65 1 0.0000000 0.0000000 10.8620000 0.0000000 - 66 66 1 0.0000000 0.0000000 13.5770000 2.7150000 - 67 67 1 0.0000000 2.7150000 13.5770000 0.0000000 - 68 68 1 0.0000000 2.7150000 10.8620000 2.7150000 - 69 69 1 0.0000000 4.0730000 12.2200000 4.0730000 - 70 70 1 0.0000000 1.3580000 12.2200000 1.3580000 - 71 71 1 0.0000000 1.3580000 14.9350000 4.0730000 - 72 72 1 0.0000000 4.0730000 14.9350000 1.3580000 - 73 73 1 0.0000000 0.0000000 10.8620000 5.4310000 - 74 74 1 0.0000000 0.0000000 13.5770000 8.1460000 - 75 75 1 0.0000000 2.7150000 13.5770000 5.4310000 - 76 76 1 0.0000000 2.7150000 10.8620000 8.1460000 - 77 77 1 0.0000000 4.0730000 12.2200000 9.5040000 - 78 78 1 0.0000000 1.3580000 12.2200000 6.7890000 - 79 79 1 0.0000000 1.3580000 14.9350000 9.5040000 - 80 80 1 0.0000000 4.0730000 14.9350000 6.7890000 - 81 81 1 0.0000000 0.0000000 10.8620000 10.8620000 - 82 82 1 0.0000000 0.0000000 13.5770000 13.5770000 - 83 83 1 0.0000000 2.7150000 13.5770000 10.8620000 - 84 84 1 0.0000000 2.7150000 10.8620000 13.5770000 - 85 85 1 0.0000000 4.0730000 12.2200000 14.9350000 - 86 86 1 0.0000000 1.3580000 12.2200000 12.2200000 - 87 87 1 0.0000000 1.3580000 14.9350000 14.9350000 - 88 88 1 0.0000000 4.0730000 14.9350000 12.2200000 - 89 89 1 0.0000000 0.0000000 10.8620000 16.2930000 - 90 90 1 0.0000000 0.0000000 13.5770000 19.0080000 - 91 91 1 0.0000000 2.7150000 13.5770000 16.2930000 - 92 92 1 0.0000000 2.7150000 10.8620000 19.0080000 - 93 93 1 0.0000000 4.0730000 12.2200000 20.3660000 - 94 94 1 0.0000000 1.3580000 12.2200000 17.6510000 - 95 95 1 0.0000000 1.3580000 14.9350000 20.3660000 - 96 96 1 0.0000000 4.0730000 14.9350000 17.6510000 - 97 97 1 0.0000000 0.0000000 16.2930000 0.0000000 - 98 98 1 0.0000000 0.0000000 19.0080000 2.7150000 - 99 99 1 0.0000000 2.7150000 19.0080000 0.0000000 - 100 100 1 0.0000000 2.7150000 16.2930000 2.7150000 - 101 101 1 0.0000000 4.0730000 17.6510000 4.0730000 - 102 102 1 0.0000000 1.3580000 17.6510000 1.3580000 - 103 103 1 0.0000000 1.3580000 20.3660000 4.0730000 - 104 104 1 0.0000000 4.0730000 20.3660000 1.3580000 - 105 105 1 0.0000000 0.0000000 16.2930000 5.4310000 - 106 106 1 0.0000000 0.0000000 19.0080000 8.1460000 - 107 107 1 0.0000000 2.7150000 19.0080000 5.4310000 - 108 108 1 0.0000000 2.7150000 16.2930000 8.1460000 - 109 109 1 0.0000000 4.0730000 17.6510000 9.5040000 - 110 110 1 0.0000000 1.3580000 17.6510000 6.7890000 - 111 111 1 0.0000000 1.3580000 20.3660000 9.5040000 - 112 112 1 0.0000000 4.0730000 20.3660000 6.7890000 - 113 113 1 0.0000000 0.0000000 16.2930000 10.8620000 - 114 114 1 0.0000000 0.0000000 19.0080000 13.5770000 - 115 115 1 0.0000000 2.7150000 19.0080000 10.8620000 - 116 116 1 0.0000000 2.7150000 16.2930000 13.5770000 - 117 117 1 0.0000000 4.0730000 17.6510000 14.9350000 - 118 118 1 0.0000000 1.3580000 17.6510000 12.2200000 - 119 119 1 0.0000000 1.3580000 20.3660000 14.9350000 - 120 120 1 0.0000000 4.0730000 20.3660000 12.2200000 - 121 121 1 0.0000000 0.0000000 16.2930000 16.2930000 - 122 122 1 0.0000000 0.0000000 19.0080000 19.0080000 - 123 123 1 0.0000000 2.7150000 19.0080000 16.2930000 - 124 124 1 0.0000000 2.7150000 16.2930000 19.0080000 - 125 125 1 0.0000000 4.0730000 17.6510000 20.3660000 - 126 126 1 0.0000000 1.3580000 17.6510000 17.6510000 - 127 127 1 0.0000000 1.3580000 20.3660000 20.3660000 - 128 128 1 0.0000000 4.0730000 20.3660000 17.6510000 - 129 129 1 0.0000000 5.4310000 0.0000000 0.0000000 - 130 130 1 0.0000000 5.4310000 2.7150000 2.7150000 - 131 131 1 0.0000000 8.1460000 2.7150000 0.0000000 - 132 132 1 0.0000000 8.1460000 0.0000000 2.7150000 - 133 133 1 0.0000000 9.5040000 1.3580000 4.0730000 - 134 134 1 0.0000000 6.7890000 1.3580000 1.3580000 - 135 135 1 0.0000000 6.7890000 4.0730000 4.0730000 - 136 136 1 0.0000000 9.5040000 4.0730000 1.3580000 - 137 137 1 0.0000000 5.4310000 0.0000000 5.4310000 - 138 138 1 0.0000000 5.4310000 2.7150000 8.1460000 - 139 139 1 0.0000000 8.1460000 2.7150000 5.4310000 - 140 140 1 0.0000000 8.1460000 0.0000000 8.1460000 - 141 141 1 0.0000000 9.5040000 1.3580000 9.5040000 - 142 142 1 0.0000000 6.7890000 1.3580000 6.7890000 - 143 143 1 0.0000000 6.7890000 4.0730000 9.5040000 - 144 144 1 0.0000000 9.5040000 4.0730000 6.7890000 - 145 145 1 0.0000000 5.4310000 0.0000000 10.8620000 - 146 146 1 0.0000000 5.4310000 2.7150000 13.5770000 - 147 147 1 0.0000000 8.1460000 2.7150000 10.8620000 - 148 148 1 0.0000000 8.1460000 0.0000000 13.5770000 - 149 149 1 0.0000000 9.5040000 1.3580000 14.9350000 - 150 150 1 0.0000000 6.7890000 1.3580000 12.2200000 - 151 151 1 0.0000000 6.7890000 4.0730000 14.9350000 - 152 152 1 0.0000000 9.5040000 4.0730000 12.2200000 - 153 153 1 0.0000000 5.4310000 0.0000000 16.2930000 - 154 154 1 0.0000000 5.4310000 2.7150000 19.0080000 - 155 155 1 0.0000000 8.1460000 2.7150000 16.2930000 - 156 156 1 0.0000000 8.1460000 0.0000000 19.0080000 - 157 157 1 0.0000000 9.5040000 1.3580000 20.3660000 - 158 158 1 0.0000000 6.7890000 1.3580000 17.6510000 - 159 159 1 0.0000000 6.7890000 4.0730000 20.3660000 - 160 160 1 0.0000000 9.5040000 4.0730000 17.6510000 - 161 161 1 0.0000000 5.4310000 5.4310000 0.0000000 - 162 162 1 0.0000000 5.4310000 8.1460000 2.7150000 - 163 163 1 0.0000000 8.1460000 8.1460000 0.0000000 - 164 164 1 0.0000000 8.1460000 5.4310000 2.7150000 - 165 165 1 0.0000000 9.5040000 6.7890000 4.0730000 - 166 166 1 0.0000000 6.7890000 6.7890000 1.3580000 - 167 167 1 0.0000000 6.7890000 9.5040000 4.0730000 - 168 168 1 0.0000000 9.5040000 9.5040000 1.3580000 - 169 169 1 0.0000000 5.4310000 5.4310000 5.4310000 - 170 170 1 0.0000000 5.4310000 8.1460000 8.1460000 - 171 171 1 0.0000000 8.1460000 8.1460000 5.4310000 - 172 172 1 0.0000000 8.1460000 5.4310000 8.1460000 - 173 173 1 0.0000000 9.5040000 6.7890000 9.5040000 - 174 174 1 0.0000000 6.7890000 6.7890000 6.7890000 - 175 175 1 0.0000000 6.7890000 9.5040000 9.5040000 - 176 176 1 0.0000000 9.5040000 9.5040000 6.7890000 - 177 177 1 0.0000000 5.4310000 5.4310000 10.8620000 - 178 178 1 0.0000000 5.4310000 8.1460000 13.5770000 - 179 179 1 0.0000000 8.1460000 8.1460000 10.8620000 - 180 180 1 0.0000000 8.1460000 5.4310000 13.5770000 - 181 181 1 0.0000000 9.5040000 6.7890000 14.9350000 - 182 182 1 0.0000000 6.7890000 6.7890000 12.2200000 - 183 183 1 0.0000000 6.7890000 9.5040000 14.9350000 - 184 184 1 0.0000000 9.5040000 9.5040000 12.2200000 - 185 185 1 0.0000000 5.4310000 5.4310000 16.2930000 - 186 186 1 0.0000000 5.4310000 8.1460000 19.0080000 - 187 187 1 0.0000000 8.1460000 8.1460000 16.2930000 - 188 188 1 0.0000000 8.1460000 5.4310000 19.0080000 - 189 189 1 0.0000000 9.5040000 6.7890000 20.3660000 - 190 190 1 0.0000000 6.7890000 6.7890000 17.6510000 - 191 191 1 0.0000000 6.7890000 9.5040000 20.3660000 - 192 192 1 0.0000000 9.5040000 9.5040000 17.6510000 - 193 193 1 0.0000000 5.4310000 10.8620000 0.0000000 - 194 194 1 0.0000000 5.4310000 13.5770000 2.7150000 - 195 195 1 0.0000000 8.1460000 13.5770000 0.0000000 - 196 196 1 0.0000000 8.1460000 10.8620000 2.7150000 - 197 197 1 0.0000000 9.5040000 12.2200000 4.0730000 - 198 198 1 0.0000000 6.7890000 12.2200000 1.3580000 - 199 199 1 0.0000000 6.7890000 14.9350000 4.0730000 - 200 200 1 0.0000000 9.5040000 14.9350000 1.3580000 - 201 201 1 0.0000000 5.4310000 10.8620000 5.4310000 - 202 202 1 0.0000000 5.4310000 13.5770000 8.1460000 - 203 203 1 0.0000000 8.1460000 13.5770000 5.4310000 - 204 204 1 0.0000000 8.1460000 10.8620000 8.1460000 - 205 205 1 0.0000000 9.5040000 12.2200000 9.5040000 - 206 206 1 0.0000000 6.7890000 12.2200000 6.7890000 - 207 207 1 0.0000000 6.7890000 14.9350000 9.5040000 - 208 208 1 0.0000000 9.5040000 14.9350000 6.7890000 - 209 209 1 0.0000000 5.4310000 10.8620000 10.8620000 - 210 210 1 0.0000000 5.4310000 13.5770000 13.5770000 - 211 211 1 0.0000000 8.1460000 13.5770000 10.8620000 - 212 212 1 0.0000000 8.1460000 10.8620000 13.5770000 - 213 213 1 0.0000000 9.5040000 12.2200000 14.9350000 - 214 214 1 0.0000000 6.7890000 12.2200000 12.2200000 - 215 215 1 0.0000000 6.7890000 14.9350000 14.9350000 - 216 216 1 0.0000000 9.5040000 14.9350000 12.2200000 - 217 217 1 0.0000000 5.4310000 10.8620000 16.2930000 - 218 218 1 0.0000000 5.4310000 13.5770000 19.0080000 - 219 219 1 0.0000000 8.1460000 13.5770000 16.2930000 - 220 220 1 0.0000000 8.1460000 10.8620000 19.0080000 - 221 221 1 0.0000000 9.5040000 12.2200000 20.3660000 - 222 222 1 0.0000000 6.7890000 12.2200000 17.6510000 - 223 223 1 0.0000000 6.7890000 14.9350000 20.3660000 - 224 224 1 0.0000000 9.5040000 14.9350000 17.6510000 - 225 225 1 0.0000000 5.4310000 16.2930000 0.0000000 - 226 226 1 0.0000000 5.4310000 19.0080000 2.7150000 - 227 227 1 0.0000000 8.1460000 19.0080000 0.0000000 - 228 228 1 0.0000000 8.1460000 16.2930000 2.7150000 - 229 229 1 0.0000000 9.5040000 17.6510000 4.0730000 - 230 230 1 0.0000000 6.7890000 17.6510000 1.3580000 - 231 231 1 0.0000000 6.7890000 20.3660000 4.0730000 - 232 232 1 0.0000000 9.5040000 20.3660000 1.3580000 - 233 233 1 0.0000000 5.4310000 16.2930000 5.4310000 - 234 234 1 0.0000000 5.4310000 19.0080000 8.1460000 - 235 235 1 0.0000000 8.1460000 19.0080000 5.4310000 - 236 236 1 0.0000000 8.1460000 16.2930000 8.1460000 - 237 237 1 0.0000000 9.5040000 17.6510000 9.5040000 - 238 238 1 0.0000000 6.7890000 17.6510000 6.7890000 - 239 239 1 0.0000000 6.7890000 20.3660000 9.5040000 - 240 240 1 0.0000000 9.5040000 20.3660000 6.7890000 - 241 241 1 0.0000000 5.4310000 16.2930000 10.8620000 - 242 242 1 0.0000000 5.4310000 19.0080000 13.5770000 - 243 243 1 0.0000000 8.1460000 19.0080000 10.8620000 - 244 244 1 0.0000000 8.1460000 16.2930000 13.5770000 - 245 245 1 0.0000000 9.5040000 17.6510000 14.9350000 - 246 246 1 0.0000000 6.7890000 17.6510000 12.2200000 - 247 247 1 0.0000000 6.7890000 20.3660000 14.9350000 - 248 248 1 0.0000000 9.5040000 20.3660000 12.2200000 - 249 249 1 0.0000000 5.4310000 16.2930000 16.2930000 - 250 250 1 0.0000000 5.4310000 19.0080000 19.0080000 - 251 251 1 0.0000000 8.1460000 19.0080000 16.2930000 - 252 252 1 0.0000000 8.1460000 16.2930000 19.0080000 - 253 253 1 0.0000000 9.5040000 17.6510000 20.3660000 - 254 254 1 0.0000000 6.7890000 17.6510000 17.6510000 - 255 255 1 0.0000000 6.7890000 20.3660000 20.3660000 - 256 256 1 0.0000000 9.5040000 20.3660000 17.6510000 - 257 257 1 0.0000000 10.8620000 0.0000000 0.0000000 - 258 258 1 0.0000000 10.8620000 2.7150000 2.7150000 - 259 259 1 0.0000000 13.5770000 2.7150000 0.0000000 - 260 260 1 0.0000000 13.5770000 0.0000000 2.7150000 - 261 261 1 0.0000000 14.9350000 1.3580000 4.0730000 - 262 262 1 0.0000000 12.2200000 1.3580000 1.3580000 - 263 263 1 0.0000000 12.2200000 4.0730000 4.0730000 - 264 264 1 0.0000000 14.9350000 4.0730000 1.3580000 - 265 265 1 0.0000000 10.8620000 0.0000000 5.4310000 - 266 266 1 0.0000000 10.8620000 2.7150000 8.1460000 - 267 267 1 0.0000000 13.5770000 2.7150000 5.4310000 - 268 268 1 0.0000000 13.5770000 0.0000000 8.1460000 - 269 269 1 0.0000000 14.9350000 1.3580000 9.5040000 - 270 270 1 0.0000000 12.2200000 1.3580000 6.7890000 - 271 271 1 0.0000000 12.2200000 4.0730000 9.5040000 - 272 272 1 0.0000000 14.9350000 4.0730000 6.7890000 - 273 273 1 0.0000000 10.8620000 0.0000000 10.8620000 - 274 274 1 0.0000000 10.8620000 2.7150000 13.5770000 - 275 275 1 0.0000000 13.5770000 2.7150000 10.8620000 - 276 276 1 0.0000000 13.5770000 0.0000000 13.5770000 - 277 277 1 0.0000000 14.9350000 1.3580000 14.9350000 - 278 278 1 0.0000000 12.2200000 1.3580000 12.2200000 - 279 279 1 0.0000000 12.2200000 4.0730000 14.9350000 - 280 280 1 0.0000000 14.9350000 4.0730000 12.2200000 - 281 281 1 0.0000000 10.8620000 0.0000000 16.2930000 - 282 282 1 0.0000000 10.8620000 2.7150000 19.0080000 - 283 283 1 0.0000000 13.5770000 2.7150000 16.2930000 - 284 284 1 0.0000000 13.5770000 0.0000000 19.0080000 - 285 285 1 0.0000000 14.9350000 1.3580000 20.3660000 - 286 286 1 0.0000000 12.2200000 1.3580000 17.6510000 - 287 287 1 0.0000000 12.2200000 4.0730000 20.3660000 - 288 288 1 0.0000000 14.9350000 4.0730000 17.6510000 - 289 289 1 0.0000000 10.8620000 5.4310000 0.0000000 - 290 290 1 0.0000000 10.8620000 8.1460000 2.7150000 - 291 291 1 0.0000000 13.5770000 8.1460000 0.0000000 - 292 292 1 0.0000000 13.5770000 5.4310000 2.7150000 - 293 293 1 0.0000000 14.9350000 6.7890000 4.0730000 - 294 294 1 0.0000000 12.2200000 6.7890000 1.3580000 - 295 295 1 0.0000000 12.2200000 9.5040000 4.0730000 - 296 296 1 0.0000000 14.9350000 9.5040000 1.3580000 - 297 297 1 0.0000000 10.8620000 5.4310000 5.4310000 - 298 298 1 0.0000000 10.8620000 8.1460000 8.1460000 - 299 299 1 0.0000000 13.5770000 8.1460000 5.4310000 - 300 300 1 0.0000000 13.5770000 5.4310000 8.1460000 - 301 301 1 0.0000000 14.9350000 6.7890000 9.5040000 - 302 302 1 0.0000000 12.2200000 6.7890000 6.7890000 - 303 303 1 0.0000000 12.2200000 9.5040000 9.5040000 - 304 304 1 0.0000000 14.9350000 9.5040000 6.7890000 - 305 305 1 0.0000000 10.8620000 5.4310000 10.8620000 - 306 306 1 0.0000000 10.8620000 8.1460000 13.5770000 - 307 307 1 0.0000000 13.5770000 8.1460000 10.8620000 - 308 308 1 0.0000000 13.5770000 5.4310000 13.5770000 - 309 309 1 0.0000000 14.9350000 6.7890000 14.9350000 - 310 310 1 0.0000000 12.2200000 6.7890000 12.2200000 - 311 311 1 0.0000000 12.2200000 9.5040000 14.9350000 - 312 312 1 0.0000000 14.9350000 9.5040000 12.2200000 - 313 313 1 0.0000000 10.8620000 5.4310000 16.2930000 - 314 314 1 0.0000000 10.8620000 8.1460000 19.0080000 - 315 315 1 0.0000000 13.5770000 8.1460000 16.2930000 - 316 316 1 0.0000000 13.5770000 5.4310000 19.0080000 - 317 317 1 0.0000000 14.9350000 6.7890000 20.3660000 - 318 318 1 0.0000000 12.2200000 6.7890000 17.6510000 - 319 319 1 0.0000000 12.2200000 9.5040000 20.3660000 - 320 320 1 0.0000000 14.9350000 9.5040000 17.6510000 - 321 321 1 0.0000000 10.8620000 10.8620000 0.0000000 - 322 322 1 0.0000000 10.8620000 13.5770000 2.7150000 - 323 323 1 0.0000000 13.5770000 13.5770000 0.0000000 - 324 324 1 0.0000000 13.5770000 10.8620000 2.7150000 - 325 325 1 0.0000000 14.9350000 12.2200000 4.0730000 - 326 326 1 0.0000000 12.2200000 12.2200000 1.3580000 - 327 327 1 0.0000000 12.2200000 14.9350000 4.0730000 - 328 328 1 0.0000000 14.9350000 14.9350000 1.3580000 - 329 329 1 0.0000000 10.8620000 10.8620000 5.4310000 - 330 330 1 0.0000000 10.8620000 13.5770000 8.1460000 - 331 331 1 0.0000000 13.5770000 13.5770000 5.4310000 - 332 332 1 0.0000000 13.5770000 10.8620000 8.1460000 - 333 333 1 0.0000000 14.9350000 12.2200000 9.5040000 - 334 334 1 0.0000000 12.2200000 12.2200000 6.7890000 - 335 335 1 0.0000000 12.2200000 14.9350000 9.5040000 - 336 336 1 0.0000000 14.9350000 14.9350000 6.7890000 - 337 337 1 0.0000000 10.8620000 10.8620000 10.8620000 - 338 338 1 0.0000000 10.8620000 13.5770000 13.5770000 - 339 339 1 0.0000000 13.5770000 13.5770000 10.8620000 - 340 340 1 0.0000000 13.5770000 10.8620000 13.5770000 - 341 341 1 0.0000000 14.9350000 12.2200000 14.9350000 - 342 342 1 0.0000000 12.2200000 12.2200000 12.2200000 - 343 343 1 0.0000000 12.2200000 14.9350000 14.9350000 - 344 344 1 0.0000000 14.9350000 14.9350000 12.2200000 - 345 345 1 0.0000000 10.8620000 10.8620000 16.2930000 - 346 346 1 0.0000000 10.8620000 13.5770000 19.0080000 - 347 347 1 0.0000000 13.5770000 13.5770000 16.2930000 - 348 348 1 0.0000000 13.5770000 10.8620000 19.0080000 - 349 349 1 0.0000000 14.9350000 12.2200000 20.3660000 - 350 350 1 0.0000000 12.2200000 12.2200000 17.6510000 - 351 351 1 0.0000000 12.2200000 14.9350000 20.3660000 - 352 352 1 0.0000000 14.9350000 14.9350000 17.6510000 - 353 353 1 0.0000000 10.8620000 16.2930000 0.0000000 - 354 354 1 0.0000000 10.8620000 19.0080000 2.7150000 - 355 355 1 0.0000000 13.5770000 19.0080000 0.0000000 - 356 356 1 0.0000000 13.5770000 16.2930000 2.7150000 - 357 357 1 0.0000000 14.9350000 17.6510000 4.0730000 - 358 358 1 0.0000000 12.2200000 17.6510000 1.3580000 - 359 359 1 0.0000000 12.2200000 20.3660000 4.0730000 - 360 360 1 0.0000000 14.9350000 20.3660000 1.3580000 - 361 361 1 0.0000000 10.8620000 16.2930000 5.4310000 - 362 362 1 0.0000000 10.8620000 19.0080000 8.1460000 - 363 363 1 0.0000000 13.5770000 19.0080000 5.4310000 - 364 364 1 0.0000000 13.5770000 16.2930000 8.1460000 - 365 365 1 0.0000000 14.9350000 17.6510000 9.5040000 - 366 366 1 0.0000000 12.2200000 17.6510000 6.7890000 - 367 367 1 0.0000000 12.2200000 20.3660000 9.5040000 - 368 368 1 0.0000000 14.9350000 20.3660000 6.7890000 - 369 369 1 0.0000000 10.8620000 16.2930000 10.8620000 - 370 370 1 0.0000000 10.8620000 19.0080000 13.5770000 - 371 371 1 0.0000000 13.5770000 19.0080000 10.8620000 - 372 372 1 0.0000000 13.5770000 16.2930000 13.5770000 - 373 373 1 0.0000000 14.9350000 17.6510000 14.9350000 - 374 374 1 0.0000000 12.2200000 17.6510000 12.2200000 - 375 375 1 0.0000000 12.2200000 20.3660000 14.9350000 - 376 376 1 0.0000000 14.9350000 20.3660000 12.2200000 - 377 377 1 0.0000000 10.8620000 16.2930000 16.2930000 - 378 378 1 0.0000000 10.8620000 19.0080000 19.0080000 - 379 379 1 0.0000000 13.5770000 19.0080000 16.2930000 - 380 380 1 0.0000000 13.5770000 16.2930000 19.0080000 - 381 381 1 0.0000000 14.9350000 17.6510000 20.3660000 - 382 382 1 0.0000000 12.2200000 17.6510000 17.6510000 - 383 383 1 0.0000000 12.2200000 20.3660000 20.3660000 - 384 384 1 0.0000000 14.9350000 20.3660000 17.6510000 - 385 385 1 0.0000000 16.2930000 0.0000000 0.0000000 - 386 386 1 0.0000000 16.2930000 2.7150000 2.7150000 - 387 387 1 0.0000000 19.0080000 2.7150000 0.0000000 - 388 388 1 0.0000000 19.0080000 0.0000000 2.7150000 - 389 389 1 0.0000000 20.3660000 1.3580000 4.0730000 - 390 390 1 0.0000000 17.6510000 1.3580000 1.3580000 - 391 391 1 0.0000000 17.6510000 4.0730000 4.0730000 - 392 392 1 0.0000000 20.3660000 4.0730000 1.3580000 - 393 393 1 0.0000000 16.2930000 0.0000000 5.4310000 - 394 394 1 0.0000000 16.2930000 2.7150000 8.1460000 - 395 395 1 0.0000000 19.0080000 2.7150000 5.4310000 - 396 396 1 0.0000000 19.0080000 0.0000000 8.1460000 - 397 397 1 0.0000000 20.3660000 1.3580000 9.5040000 - 398 398 1 0.0000000 17.6510000 1.3580000 6.7890000 - 399 399 1 0.0000000 17.6510000 4.0730000 9.5040000 - 400 400 1 0.0000000 20.3660000 4.0730000 6.7890000 - 401 401 1 0.0000000 16.2930000 0.0000000 10.8620000 - 402 402 1 0.0000000 16.2930000 2.7150000 13.5770000 - 403 403 1 0.0000000 19.0080000 2.7150000 10.8620000 - 404 404 1 0.0000000 19.0080000 0.0000000 13.5770000 - 405 405 1 0.0000000 20.3660000 1.3580000 14.9350000 - 406 406 1 0.0000000 17.6510000 1.3580000 12.2200000 - 407 407 1 0.0000000 17.6510000 4.0730000 14.9350000 - 408 408 1 0.0000000 20.3660000 4.0730000 12.2200000 - 409 409 1 0.0000000 16.2930000 0.0000000 16.2930000 - 410 410 1 0.0000000 16.2930000 2.7150000 19.0080000 - 411 411 1 0.0000000 19.0080000 2.7150000 16.2930000 - 412 412 1 0.0000000 19.0080000 0.0000000 19.0080000 - 413 413 1 0.0000000 20.3660000 1.3580000 20.3660000 - 414 414 1 0.0000000 17.6510000 1.3580000 17.6510000 - 415 415 1 0.0000000 17.6510000 4.0730000 20.3660000 - 416 416 1 0.0000000 20.3660000 4.0730000 17.6510000 - 417 417 1 0.0000000 16.2930000 5.4310000 0.0000000 - 418 418 1 0.0000000 16.2930000 8.1460000 2.7150000 - 419 419 1 0.0000000 19.0080000 8.1460000 0.0000000 - 420 420 1 0.0000000 19.0080000 5.4310000 2.7150000 - 421 421 1 0.0000000 20.3660000 6.7890000 4.0730000 - 422 422 1 0.0000000 17.6510000 6.7890000 1.3580000 - 423 423 1 0.0000000 17.6510000 9.5040000 4.0730000 - 424 424 1 0.0000000 20.3660000 9.5040000 1.3580000 - 425 425 1 0.0000000 16.2930000 5.4310000 5.4310000 - 426 426 1 0.0000000 16.2930000 8.1460000 8.1460000 - 427 427 1 0.0000000 19.0080000 8.1460000 5.4310000 - 428 428 1 0.0000000 19.0080000 5.4310000 8.1460000 - 429 429 1 0.0000000 20.3660000 6.7890000 9.5040000 - 430 430 1 0.0000000 17.6510000 6.7890000 6.7890000 - 431 431 1 0.0000000 17.6510000 9.5040000 9.5040000 - 432 432 1 0.0000000 20.3660000 9.5040000 6.7890000 - 433 433 1 0.0000000 16.2930000 5.4310000 10.8620000 - 434 434 1 0.0000000 16.2930000 8.1460000 13.5770000 - 435 435 1 0.0000000 19.0080000 8.1460000 10.8620000 - 436 436 1 0.0000000 19.0080000 5.4310000 13.5770000 - 437 437 1 0.0000000 20.3660000 6.7890000 14.9350000 - 438 438 1 0.0000000 17.6510000 6.7890000 12.2200000 - 439 439 1 0.0000000 17.6510000 9.5040000 14.9350000 - 440 440 1 0.0000000 20.3660000 9.5040000 12.2200000 - 441 441 1 0.0000000 16.2930000 5.4310000 16.2930000 - 442 442 1 0.0000000 16.2930000 8.1460000 19.0080000 - 443 443 1 0.0000000 19.0080000 8.1460000 16.2930000 - 444 444 1 0.0000000 19.0080000 5.4310000 19.0080000 - 445 445 1 0.0000000 20.3660000 6.7890000 20.3660000 - 446 446 1 0.0000000 17.6510000 6.7890000 17.6510000 - 447 447 1 0.0000000 17.6510000 9.5040000 20.3660000 - 448 448 1 0.0000000 20.3660000 9.5040000 17.6510000 - 449 449 1 0.0000000 16.2930000 10.8620000 0.0000000 - 450 450 1 0.0000000 16.2930000 13.5770000 2.7150000 - 451 451 1 0.0000000 19.0080000 13.5770000 0.0000000 - 452 452 1 0.0000000 19.0080000 10.8620000 2.7150000 - 453 453 1 0.0000000 20.3660000 12.2200000 4.0730000 - 454 454 1 0.0000000 17.6510000 12.2200000 1.3580000 - 455 455 1 0.0000000 17.6510000 14.9350000 4.0730000 - 456 456 1 0.0000000 20.3660000 14.9350000 1.3580000 - 457 457 1 0.0000000 16.2930000 10.8620000 5.4310000 - 458 458 1 0.0000000 16.2930000 13.5770000 8.1460000 - 459 459 1 0.0000000 19.0080000 13.5770000 5.4310000 - 460 460 1 0.0000000 19.0080000 10.8620000 8.1460000 - 461 461 1 0.0000000 20.3660000 12.2200000 9.5040000 - 462 462 1 0.0000000 17.6510000 12.2200000 6.7890000 - 463 463 1 0.0000000 17.6510000 14.9350000 9.5040000 - 464 464 1 0.0000000 20.3660000 14.9350000 6.7890000 - 465 465 1 0.0000000 16.2930000 10.8620000 10.8620000 - 466 466 1 0.0000000 16.2930000 13.5770000 13.5770000 - 467 467 1 0.0000000 19.0080000 13.5770000 10.8620000 - 468 468 1 0.0000000 19.0080000 10.8620000 13.5770000 - 469 469 1 0.0000000 20.3660000 12.2200000 14.9350000 - 470 470 1 0.0000000 17.6510000 12.2200000 12.2200000 - 471 471 1 0.0000000 17.6510000 14.9350000 14.9350000 - 472 472 1 0.0000000 20.3660000 14.9350000 12.2200000 - 473 473 1 0.0000000 16.2930000 10.8620000 16.2930000 - 474 474 1 0.0000000 16.2930000 13.5770000 19.0080000 - 475 475 1 0.0000000 19.0080000 13.5770000 16.2930000 - 476 476 1 0.0000000 19.0080000 10.8620000 19.0080000 - 477 477 1 0.0000000 20.3660000 12.2200000 20.3660000 - 478 478 1 0.0000000 17.6510000 12.2200000 17.6510000 - 479 479 1 0.0000000 17.6510000 14.9350000 20.3660000 - 480 480 1 0.0000000 20.3660000 14.9350000 17.6510000 - 481 481 1 0.0000000 16.2930000 16.2930000 0.0000000 - 482 482 1 0.0000000 16.2930000 19.0080000 2.7150000 - 483 483 1 0.0000000 19.0080000 19.0080000 0.0000000 - 484 484 1 0.0000000 19.0080000 16.2930000 2.7150000 - 485 485 1 0.0000000 20.3660000 17.6510000 4.0730000 - 486 486 1 0.0000000 17.6510000 17.6510000 1.3580000 - 487 487 1 0.0000000 17.6510000 20.3660000 4.0730000 - 488 488 1 0.0000000 20.3660000 20.3660000 1.3580000 - 489 489 1 0.0000000 16.2930000 16.2930000 5.4310000 - 490 490 1 0.0000000 16.2930000 19.0080000 8.1460000 - 491 491 1 0.0000000 19.0080000 19.0080000 5.4310000 - 492 492 1 0.0000000 19.0080000 16.2930000 8.1460000 - 493 493 1 0.0000000 20.3660000 17.6510000 9.5040000 - 494 494 1 0.0000000 17.6510000 17.6510000 6.7890000 - 495 495 1 0.0000000 17.6510000 20.3660000 9.5040000 - 496 496 1 0.0000000 20.3660000 20.3660000 6.7890000 - 497 497 1 0.0000000 16.2930000 16.2930000 10.8620000 - 498 498 1 0.0000000 16.2930000 19.0080000 13.5770000 - 499 499 1 0.0000000 19.0080000 19.0080000 10.8620000 - 500 500 1 0.0000000 19.0080000 16.2930000 13.5770000 - 501 501 1 0.0000000 20.3660000 17.6510000 14.9350000 - 502 502 1 0.0000000 17.6510000 17.6510000 12.2200000 - 503 503 1 0.0000000 17.6510000 20.3660000 14.9350000 - 504 504 1 0.0000000 20.3660000 20.3660000 12.2200000 - 505 505 1 0.0000000 16.2930000 16.2930000 16.2930000 - 506 506 1 0.0000000 16.2930000 19.0080000 19.0080000 - 507 507 1 0.0000000 19.0080000 19.0080000 16.2930000 - 508 508 1 0.0000000 19.0080000 16.2930000 19.0080000 - 509 509 1 0.0000000 20.3660000 17.6510000 20.3660000 - 510 510 1 0.0000000 17.6510000 17.6510000 17.6510000 - 511 511 1 0.0000000 17.6510000 20.3660000 20.3660000 - 512 512 1 0.0000000 20.3660000 20.3660000 17.6510000 - diff --git a/examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_8.lmp b/examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_8.lmp deleted file mode 100755 index 5066049895..0000000000 --- a/examples/USER/phonon/third_order_command/silicon/lmp_bank/silicon_8.lmp +++ /dev/null @@ -1,29 +0,0 @@ -LAMMPS description - - 8 atoms - 0 bonds - 0 angles - 0 dihedrals - 0 impropers - - 1 atom types - 0 bond types - 0 angle types - 0 dihedral types - 0 improper types - - - 0.0000000 5.4310000 xlo xhi - 0.0000000 5.4310000 ylo yhi - 0.0000000 5.4310000 zlo zhi - - Atoms - - 1 1 1 0.0000000 0.0000000 0.0000000 0.0000000 - 2 2 1 0.0000000 1.3577500 1.3577500 1.3572000 - 3 3 1 0.0000000 2.7155000 2.7155000 0.0000000 - 4 4 1 0.0000000 4.0732500 4.0732500 1.3572000 - 5 5 1 0.0000000 2.7155000 0.0000000 2.7144000 - 6 6 1 0.0000000 4.0732500 1.3577500 4.0732500 - 7 7 1 0.0000000 0.0000000 2.7155000 2.7155000 - 8 8 1 0.0000000 1.3577500 4.0732500 4.0732500 diff --git a/examples/USER/phonon/third_order_command/silicon/results/out.silicon b/examples/USER/phonon/third_order_command/silicon/results/out.silicon deleted file mode 100755 index 0729dc549c..0000000000 --- a/examples/USER/phonon/third_order_command/silicon/results/out.silicon +++ /dev/null @@ -1,58 +0,0 @@ -LAMMPS (16 Jul 2018) -Reading data file ... - orthogonal box = (0 0 0) to (5.431 5.431 5.431) - 2 by 2 by 1 MPI processor grid - reading atoms ... - 8 atoms -Finding 1-2 1-3 1-4 neighbors ... - special bond factors lj: 0 0 0 - special bond factors coul: 0 0 0 - 0 = max # of 1-2 neighbors - 0 = max # of 1-3 neighbors - 0 = max # of 1-4 neighbors - 1 = max # of special neighbors -Neighbor list info ... - update every 1 steps, delay 10 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 4 - ghost atom cutoff = 4 - binsize = 2, bins = 3 3 3 - 1 neighbor lists, perpetual/occasional/extra = 1 0 0 - (1) pair tersoff, perpetual - attributes: full, newton on - pair build: full/bin - stencil: full/bin/3d - bin: standard -Calculating Anharmonic Dynamical Matrix... -Third Order calculation took 0.043923 seconds -Finished Calculating Third Order Tensor -Loop time of 1.22619e+06 on 4 procs for 0 steps with 8 atoms - -0.0% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 0.013707 | 0.016582 | 0.019588 | 2.2 | 0.00 -Bond | 8.1341e-05 | 8.7207e-05 | 9.3228e-05 | 0.0 | 0.00 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.019285 | 0.022435 | 0.025684 | 2.0 | 0.00 -Output | 0 | 0 | 0 | 0.0 | 0.00 -Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 1.226e+06 | | |100.00 - -Nlocal: 2 ave 2 max 2 min -Histogram: 4 0 0 0 0 0 0 0 0 0 -Nghost: 56 ave 56 max 56 min -Histogram: 4 0 0 0 0 0 0 0 0 0 -Neighs: 0 ave 0 max 0 min -Histogram: 4 0 0 0 0 0 0 0 0 0 -FullNghs: 32 ave 32 max 32 min -Histogram: 4 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 128 -Ave neighs/atom = 16 -Ave special neighs/atom = 0 -Neighbor list builds = 0 -Dangerous builds = 0 -Total wall time: 0:00:00 diff --git a/examples/USER/phonon/third_order_command/silicon/results/third_order b/examples/USER/phonon/third_order_command/silicon/results/third_order deleted file mode 100755 index 276896aa1f..0000000000 --- a/examples/USER/phonon/third_order_command/silicon/results/third_order +++ /dev/null @@ -1,4608 +0,0 @@ -1 1 1 1 1 -0.08569589 0.16067980 137.35980742 -1 1 1 1 2 -74170.35399415 -67130.60762609 -67084.85673024 -1 1 1 1 3 -0.10711987 -0.00000000 -5.61308111 -1 1 1 1 4 74170.34328216 67130.75759390 -67084.54608262 -1 1 1 1 5 -0.00000000 -0.00000000 -15.01820557 -1 1 1 1 6 74116.35486843 -67012.24017136 67025.88724261 -1 1 1 1 7 -0.00000000 -0.00000000 1.11404663 -1 1 1 1 8 -74116.23703657 67011.98308368 67025.60873095 -1 1 1 2 1 -0.23566371 -0.27851166 329269.69018077 -1 1 1 2 2 -72106.38979127 -72095.95631608 -80899.99905481 -1 1 1 2 3 -0.05355993 -0.00000000 -11783.78540967 -1 1 1 2 4 72106.62545498 72096.21340376 -80900.41682229 -1 1 1 2 5 -0.03213596 -0.00000000 2960.49323056 -1 1 1 2 6 -71998.20943604 72010.66747675 -80803.98751664 -1 1 1 2 7 0.02142397 -0.00000000 2961.59656521 -1 1 1 2 8 71998.19872405 -72010.69961271 -80803.91253273 -1 1 1 3 1 141.59104222 329281.45194233 0.41776749 -1 1 1 3 2 -72074.53234237 -80911.53586465 -72064.09886718 -1 1 1 3 3 3.98485911 2969.85550707 0.02142397 -1 1 1 3 4 -72074.54305436 -80911.38589683 72064.09886718 -1 1 1 3 5 -9.64078817 -11781.34307667 0.02142397 -1 1 1 3 6 72006.30769810 -80801.86654325 72002.14073522 -1 1 1 3 7 0.14996782 2957.19393861 0.04284795 -1 1 1 3 8 72006.66119367 -80802.35929464 -72002.55850270 -1 2 1 1 1 -0.40705550 -0.47132742 329270.04367633 -1 2 1 1 2 -72106.28267140 -72095.84919621 -80899.90264692 -1 2 1 1 3 -0.01071199 0.02142397 -11783.93537749 -1 2 1 1 4 72106.66830293 72096.21340376 -80900.26685448 -1 2 1 1 5 0.02142397 -0.04284795 2960.53607851 -1 2 1 1 6 -71998.40225180 72010.90314046 -80804.15890843 -1 2 1 1 7 0.02142397 -0.00000000 2961.59656521 -1 2 1 1 8 71998.34869187 -72010.95670040 -80804.09463651 -1 2 1 2 1 -0.04284795 0.67485517 115.02531483 -1 2 1 2 2 -67122.33797224 -74173.02127888 -67083.27135618 -1 2 1 2 3 -0.02142397 -0.00000000 -9.94072380 -1 2 1 2 4 67121.93091674 74172.77490318 -67083.11067638 -1 2 1 2 5 0.05355993 0.06427192 9.89787585 -1 2 1 2 6 67020.89545674 -74109.38136498 67027.62258448 -1 2 1 2 7 0.02142397 0.05355993 -3.84560328 -1 2 1 2 8 -67020.63836905 74109.15641326 67027.31193686 -1 2 1 3 1 329282.72666877 112.65796573 -0.08569589 -1 2 1 3 2 -80915.37075594 -72065.54498540 -72064.36666685 -1 2 1 3 3 2970.09117078 3.04220427 0.14996782 -1 2 1 3 4 -80913.63541407 -72065.98417686 72064.89155420 -1 2 1 3 5 2958.71504075 -9.59794022 -0.14996782 -1 2 1 3 6 -80800.75249661 72013.73110499 -72002.46209482 -1 2 1 3 7 -11780.59323759 -2.52802890 -0.67485517 -1 2 1 3 8 -80801.13812814 72014.00961665 72002.82630238 -1 3 1 1 1 140.26275585 329282.54456499 0.53559934 -1 3 1 1 2 -72074.61803826 -80911.60013657 -72064.25954698 -1 3 1 1 3 3.90987520 2969.74838720 -0.02142397 -1 3 1 1 4 -72074.26454270 -80911.32162491 72063.88462744 -1 3 1 1 5 -9.58722823 -11781.32165269 0.04284795 -1 3 1 1 6 72007.00397725 -80802.53068643 72002.74060648 -1 3 1 1 7 0.06427192 2957.16180265 -0.00000000 -1 3 1 1 8 72007.17536904 -80802.77706213 -72002.90128628 -1 3 1 2 1 329282.94090850 111.04045572 0.63200722 -1 3 1 2 2 -80915.52072376 -72065.59854533 -72064.48449870 -1 3 1 2 3 2969.99476290 2.93508440 -0.04284795 -1 3 1 2 4 -80913.01411883 -72065.17006586 72064.14171512 -1 3 1 2 5 2958.13659346 -10.43347519 0.42847947 -1 3 1 2 6 -80801.11670417 72014.05246460 -72002.80487840 -1 3 1 2 7 -11780.50754169 -2.72084466 -0.54631133 -1 3 1 2 8 -80800.85961648 72016.01275819 72002.63348661 -1 3 1 3 1 0.29993563 0.22495172 -12.59729654 -1 3 1 3 2 -67096.11502842 -67094.33683860 -74102.86847698 -1 3 1 3 3 -0.02142397 -0.04284795 1.13547061 -1 3 1 3 4 67095.81509279 67094.12259887 -74102.69708519 -1 3 1 3 5 -0.01071199 0.02142397 6.64143185 -1 3 1 3 6 67033.98550467 -67031.45747577 74105.22511409 -1 3 1 3 7 0.06427192 0.04284795 -0.27851166 -1 3 1 3 8 -67033.98550467 67031.28608399 74105.19297812 -1 1 2 1 1 -74175.17438824 -72109.17490785 -72075.08936569 -1 1 2 1 2 74174.06034160 72107.35387009 72071.88648162 -1 1 2 1 3 -0.43919146 538.62012295 1558.31557547 -1 1 2 1 4 -0.35349557 -538.98433050 -1559.15111044 -1 1 2 1 5 -0.36420755 1559.70813376 538.94148255 -1 1 2 1 6 -0.12854384 -1560.65078860 -539.26284216 -1 1 2 1 7 -9470.57469669 -3063.11406462 -3059.55768498 -1 1 2 1 8 9472.97418175 3066.31694869 3063.78891979 -1 1 2 2 1 -67136.04931541 -72094.55304580 -80912.33926366 -1 1 2 2 2 72108.78927633 67119.37075188 80912.66062327 -1 1 2 2 3 0.12854384 -537.80601195 3074.38307479 -1 1 2 2 4 538.66297089 -0.51417537 -3074.31880286 -1 1 2 2 5 -888.64500536 3068.44863407 94.71538776 -1 1 2 2 6 -1558.04777580 -0.68556716 -3077.83233455 -1 1 2 2 7 -1.34971034 1557.43719255 3075.86132897 -1 1 2 2 8 -3063.41400025 888.27008582 -93.10858973 -1 1 2 3 1 -67090.58764320 -80900.65248600 -72062.44922120 -1 1 2 3 2 72070.46178737 80911.33233690 67094.67962218 -1 1 2 3 3 -893.59394329 83.29640977 3055.78706561 -1 1 2 3 4 -1559.26894230 -3074.61873850 -0.59987126 -1 1 2 3 5 0.09640788 3080.91738677 -536.26348584 -1 1 2 3 6 535.97426219 -3081.11020253 0.40705550 -1 1 2 3 7 2.59230082 3075.91488891 1559.82596561 -1 1 2 3 8 -3065.72778941 -94.97247544 888.65571735 -1 2 2 1 1 -72106.94681459 -67126.03360770 -80913.12123870 -1 2 2 1 2 67141.76951639 72094.19955023 80912.06075200 -1 2 2 1 3 -539.33782607 0.81411100 3074.21168300 -1 2 2 1 4 -0.52488736 538.66297089 -3074.36165081 -1 2 2 1 5 1559.22609435 1.82103777 3080.51033127 -1 2 2 1 6 888.24866185 -3063.37115230 -93.06574178 -1 2 2 1 7 3058.20797464 -887.99157416 91.65175952 -1 2 2 1 8 -0.68556716 -1558.01563984 -3077.80019859 -1 2 2 2 1 -72096.51333939 -74176.32057083 -72068.06230231 -1 2 2 2 2 72097.11321066 74179.99478232 72069.75479623 -1 2 2 2 3 539.58420176 0.83553497 1559.92237350 -1 2 2 2 4 -539.03789043 -0.38563153 -1559.19395839 -1 2 2 2 5 -3068.12727446 -9477.28040046 -3066.73471617 -1 2 2 2 6 3066.27410074 9473.03845367 3063.79963178 -1 2 2 2 7 1561.40062768 0.28922365 539.62704971 -1 2 2 2 8 -1560.62936463 -0.13925583 -539.18785825 -1 2 2 3 1 -80898.98141606 -67086.42068032 -72061.12093483 -1 2 2 3 2 80909.30777138 72063.89533942 67096.43638803 -1 2 2 3 3 82.96433818 -893.33685560 3055.82991356 -1 2 2 3 4 -3074.65087446 -1559.32250223 -0.51417537 -1 2 2 3 5 3079.44984457 2.18524532 1557.22295281 -1 2 2 3 6 -94.92962749 -3065.77063736 888.60215741 -1 2 2 3 7 3077.91803045 2.61372479 -536.88478108 -1 2 2 3 8 -3081.11020253 535.98497418 0.33207159 -1 3 2 1 1 -72074.61803826 -80912.03932803 -67095.49373318 -1 3 2 1 2 67095.17237358 80902.98769914 72062.60990100 -1 3 2 1 3 1560.09376528 3074.55446658 0.55702332 -1 3 2 1 4 893.75462309 -83.27498580 -3055.65852177 -1 3 2 1 5 -535.98497418 3081.32444227 0.36420755 -1 3 2 1 6 -1.04977471 -3079.24631682 536.43487763 -1 3 2 1 7 3063.56396806 94.23334835 -889.21274066 -1 3 2 1 8 -1.07119869 -3078.63573357 -1559.47247005 -1 3 2 2 1 -80910.85029749 -72067.94447046 -67097.26121101 -1 3 2 2 2 80903.20193888 67084.63177851 72063.35974008 -1 3 2 2 3 3074.38307479 1558.70120699 0.29993563 -1 3 2 2 4 -83.26427381 893.74391110 -3055.63709779 -1 3 2 2 5 95.32597101 3067.67737102 -887.93801423 -1 3 2 2 6 -3078.63573357 -1.07119869 -1559.49389402 -1 3 2 2 7 3079.13919695 -534.68882377 0.25708768 -1 3 2 2 8 -3079.24631682 -1.03906272 536.42416564 -1 3 2 3 1 -72064.05601923 -72064.52734665 -74113.78399158 -1 3 2 3 2 72063.22048425 72066.00560083 74113.03415250 -1 3 2 3 3 -3055.10149845 -3055.55140190 -9478.75865465 -1 3 2 3 4 3055.31573819 3055.31573819 9478.65153478 -1 3 2 3 5 539.07002640 1555.42333902 -1.69249392 -1 3 2 3 6 -538.30947533 -1556.36599386 2.82796453 -1 3 2 3 7 1556.32314591 538.11665957 -3.12790016 -1 3 2 3 8 -1556.38741783 -538.30947533 2.82796453 -1 1 3 1 1 -0.04284795 -0.11783186 8.28036584 -1 1 3 1 2 -0.59987126 -0.00000000 -897.62165034 -1 1 3 1 3 0.01071199 0.02142397 8.03399014 -1 1 3 1 4 0.71770312 -0.08569589 -897.27886676 -1 1 3 1 5 0.05355993 0.04284795 2.27094121 -1 1 3 1 6 -0.68556716 -0.10711987 887.72377449 -1 1 3 1 7 -0.02142397 -0.00000000 1.26401445 -1 1 3 1 8 0.66414318 0.06427192 887.68092654 -1 1 3 2 1 -0.02142397 0.08569589 2968.58078064 -1 1 3 2 2 538.32018732 -538.32018732 85.43880714 -1 1 3 2 3 0.01071199 0.02142397 2968.54864468 -1 1 3 2 4 -538.30947533 538.32018732 85.52450304 -1 1 3 2 5 -0.06427192 -0.06427192 -3372.04776546 -1 1 3 2 6 538.38445924 538.25591539 89.29512241 -1 1 3 2 7 0.02142397 0.02142397 -2914.08890352 -1 1 3 2 8 -538.27733937 -538.30947533 89.25227446 -1 1 3 3 1 -6.23437635 -11785.64929538 -0.03213596 -1 1 3 3 2 1558.93687070 3074.91867413 3058.37936643 -1 1 3 3 3 5.55952118 2970.56249821 -0.04284795 -1 1 3 3 4 1559.02256660 3074.85440221 -3058.22939861 -1 1 3 3 5 0.74983908 -2915.35291796 -0.00000000 -1 1 3 3 6 -1559.30107826 3076.86825574 -3062.21425772 -1 1 3 3 7 0.62129524 -573.29482439 -0.01071199 -1 1 3 3 8 -1559.38677415 3076.90039170 3062.23568169 -1 2 3 1 1 -0.04284795 0.05355993 2968.54864468 -1 2 3 1 2 -539.11287434 538.98433050 85.03175164 -1 2 3 1 3 0.03213596 -0.02142397 2968.54864468 -1 2 3 1 4 539.09145037 -539.02717845 85.09602356 -1 2 3 1 5 0.01071199 0.02142397 -2914.00320762 -1 2 3 1 6 -537.57034824 -537.63462016 89.59505804 -1 2 3 1 7 0.02142397 -0.00000000 -3372.06918943 -1 2 3 1 8 537.61319618 537.57034824 89.45580221 -1 2 3 2 1 -0.02142397 -0.08569589 8.09826206 -1 2 3 2 2 0.04284795 0.68556716 -897.55737842 -1 2 3 2 3 0.04284795 -0.00000000 8.29107782 -1 2 3 2 4 -0.04284795 -0.66414318 -897.45025855 -1 2 3 2 5 -0.09640788 0.06427192 2.22809327 -1 2 3 2 6 -0.12854384 -0.66414318 887.76662244 -1 2 3 2 7 -0.00000000 -0.04284795 1.24259047 -1 2 3 2 8 0.12854384 0.57844729 887.45597482 -1 2 3 3 1 -11785.58502346 -11.39755401 0.05355993 -1 2 3 3 2 3074.81155426 1560.56509271 3058.33651848 -1 2 3 3 3 2970.42324238 5.74162495 -0.02142397 -1 2 3 3 4 3074.92938612 1560.54366873 -3058.18655066 -1 2 3 3 5 -573.21984048 -0.64271921 -0.04284795 -1 2 3 3 6 3076.93252766 -1557.95136791 3062.29995362 -1 2 3 3 7 -2915.35291796 0.93194286 0.03213596 -1 2 3 3 8 3076.99679958 -1557.88709599 -3062.38564951 -1 3 3 1 1 5.84874482 2970.57321019 -0.05355993 -1 3 3 1 2 1560.52224476 3074.89725015 -3058.31509451 -1 3 3 1 3 -11.38684202 -11785.64929538 0.02142397 -1 3 3 1 4 1560.46868482 3074.89725015 3058.22939861 -1 3 3 1 5 -0.64271921 -573.24126446 -0.04284795 -1 3 3 1 6 -1557.92994394 3076.95395163 3062.29995362 -1 3 3 1 7 0.87838292 -2915.31007002 0.01071199 -1 3 3 1 8 -1557.84424805 3077.00751156 -3062.35351355 -1 3 3 2 1 2970.51965026 5.62379310 0.02142397 -1 3 3 2 2 3075.02579400 1559.04399057 -3058.50791027 -1 3 3 2 3 -11785.63858339 -6.36292019 -0.02142397 -1 3 3 2 4 3074.98294605 1559.00114263 3058.40079040 -1 3 3 2 5 -2915.36362995 0.68556716 0.02142397 -1 3 3 2 6 3076.86825574 -1559.45104607 -3062.29995362 -1 3 3 2 7 -573.30553638 0.65343120 0.07498391 -1 3 3 2 8 3076.82540779 -1559.41891011 3062.05357792 -1 3 3 3 1 0.02142397 -0.02142397 3.99557110 -1 3 3 3 2 0.12854384 -0.14996782 -9480.12978896 -1 3 3 3 3 0.01071199 -0.04284795 4.11340295 -1 3 3 3 4 -0.11783186 0.21423974 -9480.02266909 -1 3 3 3 5 -0.03213596 -0.04284795 2.63514877 -1 3 3 3 6 0.17139179 0.17139179 9473.93826056 -1 3 3 3 7 -0.04284795 -0.01071199 1.81032578 -1 3 3 3 8 -0.12854384 -0.18210378 9473.88470063 -1 1 4 1 1 74175.53859579 72109.64623527 -72075.37858933 -1 1 4 1 2 0.38563153 539.01646646 -1559.19395839 -1 1 4 1 3 0.43919146 -538.55585103 1558.25130355 -1 1 4 1 4 -74174.42454916 -72107.78234956 72072.32567308 -1 1 4 1 5 0.35349557 -1559.70813376 538.96290653 -1 1 4 1 6 -9473.02774168 -3066.32766067 3063.77820780 -1 1 4 1 7 9470.57469669 3063.09264064 -3059.56839697 -1 1 4 1 8 0.12854384 1560.64007661 -539.19857024 -1 1 4 2 1 67136.69203462 72095.08864514 -80912.77845512 -1 1 4 2 2 -538.66297089 0.54631133 -3074.35093883 -1 1 4 2 3 -0.11783186 537.82743592 3074.51161863 -1 1 4 2 4 -72109.31416368 -67119.98133513 80913.20693460 -1 1 4 2 5 888.67714132 -3068.49148202 94.73681173 -1 1 4 2 6 3063.40328826 -888.25937383 -93.10858973 -1 1 4 2 7 1.32828637 -1557.45861652 3075.82919301 -1 1 4 2 8 1558.01563984 0.65343120 -3077.82162257 -1 1 4 3 1 -67090.65191512 -80900.84530177 72062.58847703 -1 1 4 3 2 -1559.32250223 -3074.66158644 0.51417537 -1 1 4 3 3 -893.62607925 83.29640977 -3055.78706561 -1 1 4 3 4 72070.57961922 80911.49301670 -67094.76531808 -1 1 4 3 5 0.07498391 3080.85311485 536.26348584 -1 1 4 3 6 -3065.74921338 -94.95105147 -888.66642933 -1 1 4 3 7 2.59230082 3075.91488891 -1559.81525363 -1 1 4 3 8 535.96355021 -3081.13162650 -0.33207159 -1 2 4 1 1 72107.56810982 67126.64419095 -80913.82822983 -1 2 4 1 2 0.53559934 -538.63083493 -3074.35093883 -1 2 4 1 3 539.32711408 -0.79268703 3074.16883505 -1 2 4 1 4 -67142.43365957 -72094.82084547 80912.58563936 -1 2 4 1 5 -1559.23680634 -1.79961379 3080.44605934 -1 2 4 1 6 0.68556716 1558.03706381 -3077.81091058 -1 2 4 1 7 -3058.22939861 888.00228615 91.66247150 -1 2 4 1 8 -888.25937383 3063.38186429 -93.10858973 -1 2 4 2 1 72096.32052363 74176.06348314 -72067.88019853 -1 2 4 2 2 539.00575447 0.38563153 -1559.21538236 -1 2 4 2 3 -539.56277779 -0.83553497 1560.00806939 -1 2 4 2 4 -72096.73829112 -74179.71627066 72069.56198047 -1 2 4 2 5 3068.15941042 9477.28040046 -3066.62759630 -1 2 4 2 6 1560.67221257 0.08569589 -539.17714626 -1 2 4 2 7 -1561.46489960 -0.25708768 539.63776170 -1 2 4 2 8 -3066.32766067 -9473.00631771 3063.81034376 -1 2 4 3 1 -80898.55293658 -67086.00291283 72060.77815125 -1 2 4 3 2 -3074.66158644 -1559.30107826 0.52488736 -1 2 4 3 3 82.97505016 -893.35827957 -3055.91560945 -1 2 4 3 4 80908.90071588 72063.49899591 -67096.11502842 -1 2 4 3 5 3079.44984457 2.18524532 -1557.20152883 -1 2 4 3 6 -3081.11020253 535.98497418 -0.29993563 -1 2 4 3 7 3077.91803045 2.60301281 536.90620505 -1 2 4 3 8 -94.95105147 -3065.73850140 -888.68785331 -1 3 4 1 1 -72074.72515813 -80912.17858386 67095.54729312 -1 3 4 1 2 893.78675905 -83.20000189 3055.80848958 -1 3 4 1 3 1560.10447727 3074.55446658 -0.51417537 -1 3 4 1 4 67095.30091742 80903.13766695 -72062.59918902 -1 3 4 1 5 -535.98497418 3081.32444227 -0.29993563 -1 3 4 1 6 -1.08191067 -3078.64644555 1559.45104607 -1 3 4 1 7 3063.58539204 94.23334835 889.22345265 -1 3 4 1 8 -1.09262266 -3079.24631682 -536.45630160 -1 3 4 2 1 -80910.78602557 -72067.71951873 67097.07910724 -1 3 4 2 2 -83.18928990 893.78675905 3055.80848958 -1 3 4 2 3 3074.40449876 1558.70120699 -0.34278358 -1 3 4 2 4 80903.01983510 67084.28899493 -72063.26333220 -1 3 4 2 5 95.28312306 3067.72021896 887.87374231 -1 3 4 2 6 -3079.25702880 -1.09262266 -536.43487763 -1 3 4 2 7 3079.16062092 -534.65668781 -0.28922365 -1 3 4 2 8 -3078.60359761 -1.07119869 1559.44033409 -1 3 4 3 1 72063.67038770 72064.06673121 -74113.23768025 -1 3 4 3 2 -3055.27289024 -3055.28360223 9478.69438273 -1 3 4 3 3 3055.10149845 3055.52997792 -9478.73723067 -1 3 4 3 4 -72062.68488491 -72065.59854533 74112.61638501 -1 3 4 3 5 -539.04860242 -1555.38049107 -1.75676584 -1 3 4 3 6 1556.38741783 538.34161129 2.87081248 -1 3 4 3 7 -1556.32314591 -538.12737155 -3.14932413 -1 3 4 3 8 538.36303526 1556.38741783 2.82796453 -1 1 5 1 1 -0.04284795 0.12854384 -9.14803677 -1 1 5 1 2 -0.85695895 -890.25180339 -0.25708768 -1 1 5 1 3 -0.04284795 -0.04284795 0.94265484 -1 1 5 1 4 0.83553497 890.23037941 -0.08569589 -1 1 5 1 5 -0.01071199 -0.02142397 13.26143972 -1 1 5 1 6 -0.55702332 -889.58766020 -2.52802890 -1 1 5 1 7 0.02142397 0.02142397 0.41776749 -1 1 5 1 8 0.53559934 889.57694822 -2.50660492 -1 1 5 2 1 -0.04284795 -0.02142397 -11786.34557453 -1 1 5 2 2 1560.77933244 3069.28416904 3081.34586624 -1 1 5 2 3 0.01071199 -0.06427192 -2915.33149399 -1 1 5 2 4 -1560.81146840 -3069.32701699 3081.62437790 -1 1 5 2 5 -0.05355993 0.02142397 2966.14915962 -1 1 5 2 6 1558.05848778 -3056.34408893 3073.69750763 -1 1 5 2 7 0.10711987 -0.04284795 -574.38744705 -1 1 5 2 8 -1558.07991176 3056.32266495 3073.71893160 -1 1 5 3 1 -12.89723217 2960.13973500 -0.01071199 -1 1 5 3 2 538.34161129 94.00839662 -536.54199750 -1 1 5 3 3 1.45683021 -3372.02634149 0.12854384 -1 1 5 3 4 538.25591539 93.98697265 536.71338929 -1 1 5 3 5 14.45047026 2963.40689099 -0.02142397 -1 1 5 3 6 -539.51992984 87.23842093 536.11351802 -1 1 5 3 7 -0.47132742 -2914.42097511 0.07498391 -1 1 5 3 8 -539.51992984 87.42052471 -536.00639816 -1 2 5 1 1 -0.00000000 0.07498391 2959.63627162 -1 2 5 1 2 1560.45797284 -3069.54125673 3080.44605934 -1 2 5 1 3 0.06427192 -0.00000000 -573.09129664 -1 2 5 1 4 -1560.52224476 3069.45556083 3080.29609153 -1 2 5 1 5 0.01071199 -0.02142397 -11776.30844285 -1 2 5 1 6 1553.10954986 3059.40771717 3071.89789384 -1 2 5 1 7 -0.02142397 -0.00000000 -2914.77447067 -1 2 5 1 8 -1553.08812588 -3059.43985313 3071.76934999 -1 2 5 2 1 -0.00000000 -0.04284795 -8.79454121 -1 2 5 2 2 0.89980690 -9474.64525169 0.83553497 -1 2 5 2 3 0.02142397 -0.04284795 -0.25708768 -1 2 5 2 4 -0.86767094 9474.60240375 0.98550279 -1 2 5 2 5 0.08569589 0.02142397 13.41140754 -1 2 5 2 6 -0.06427192 -9456.17778636 -3.12790016 -1 2 5 2 7 0.04284795 0.03213596 -0.11783186 -1 2 5 2 8 -0.06427192 9456.22063431 -2.93508440 -1 2 5 3 1 2960.70747030 14.27907848 0.02142397 -1 2 5 3 2 3081.15305048 -3068.66287381 1558.33699944 -1 2 5 3 3 -2913.87466378 2.05670148 0.02142397 -1 2 5 3 4 3081.18518644 -3068.62002586 -1558.12275970 -1 2 5 3 5 -11774.21960541 16.62500360 0.02142397 -1 2 5 3 6 3069.88404031 3053.00194903 1560.52224476 -1 2 5 3 7 -574.69809467 -1.49967816 0.01071199 -1 2 5 3 8 3069.88404031 3053.05550896 -1560.61865264 -1 3 5 1 1 -12.49017667 2960.33255076 -0.07498391 -1 3 5 1 2 -536.09209405 94.73681173 538.32018732 -1 3 5 1 3 -0.23566371 -2914.62450286 -0.02142397 -1 3 5 1 4 -536.08138206 94.86535557 -538.42730718 -1 3 5 1 5 16.60357962 2963.59970675 -0.10711987 -1 3 5 1 6 534.72095973 87.49550862 -537.61319618 -1 3 5 1 7 -1.15689458 -3373.67598746 -0.03213596 -1 3 5 1 8 534.69953576 87.46337266 537.66675612 -1 3 5 2 1 -11787.12754957 -8.03399014 0.01071199 -1 3 5 2 2 3081.77434571 3069.28416904 1556.34456989 -1 3 5 2 3 -572.91990485 0.87838292 -0.02142397 -1 3 5 2 4 3081.74220975 3069.32701699 -1556.32314591 -1 3 5 2 5 2963.80323450 -7.96971822 0.10711987 -1 3 5 2 6 3074.42592273 -3061.35729877 1557.22295281 -1 3 5 2 7 -2916.01706115 -0.79268703 0.03213596 -1 3 5 2 8 3074.34022684 -3061.43228268 -1557.42648056 -1 3 5 3 1 -0.02142397 0.06427192 8.23751789 -1 3 5 3 2 -0.12854384 -886.35264017 -2.12097340 -1 3 5 3 3 -0.03213596 -0.06427192 2.54945287 -1 3 5 3 4 0.13925583 886.43833607 -2.22809327 -1 3 5 3 5 0.03213596 0.02142397 -10.17638751 -1 3 5 3 6 0.14996782 -891.38727399 3.04220427 -1 3 5 3 7 -0.00000000 -0.01071199 -2.17453333 -1 3 5 3 8 -0.14996782 891.26944214 2.83867652 -1 1 6 1 1 74116.23703657 -72002.14073522 72008.75003111 -1 1 6 1 2 0.40705550 -1558.13347169 535.67432656 -1 1 6 1 3 -1.28543842 538.64154692 -1558.85117481 -1 1 6 1 4 -9473.03845367 3064.52804688 -3066.00630107 -1 1 6 1 5 -1.07119869 1557.56573639 -539.66989766 -1 1 6 1 6 -74108.24589438 71998.04875624 -71998.13445213 -1 1 6 1 7 9466.48271771 -3061.73221831 3061.35729877 -1 1 6 1 8 0.44990345 -536.77766121 1556.92301718 -1 1 6 2 1 -67015.21810371 72015.84136640 -80796.89618135 -1 1 6 2 2 -1561.93622702 -1.75676584 -3081.76363373 -1 1 6 2 3 -0.53559934 538.51300308 3077.36100713 -1 1 6 2 4 -3066.00630107 -889.33057252 -95.12244326 -1 1 6 2 5 -891.70863360 -3053.55897234 86.12437430 -1 1 6 2 6 71998.32726790 -67051.53173914 80811.14312386 -1 1 6 2 7 0.42847947 -1557.60858433 3076.37550434 -1 1 6 2 8 536.67054134 -0.59987126 -3076.98608759 -1 1 6 3 1 67029.42219827 -80800.94531238 72003.74753324 -1 1 6 3 2 -540.03410521 -3079.38557265 -0.87838292 -1 1 6 3 3 888.95565298 90.49486493 -3062.77128104 -1 1 6 3 4 3063.40328826 -93.02289383 -888.83782112 -1 1 6 3 5 -1.48896617 3074.85440221 536.71338929 -1 1 6 3 6 -71997.32034113 80808.37943125 -67028.09391190 -1 1 6 3 7 -0.62129524 3076.85754375 -1559.46175806 -1 1 6 3 8 1557.69428023 -3077.28602322 -0.32135961 -1 2 6 1 1 -72004.24028464 67024.60180419 -80796.21061419 -1 2 6 1 2 889.39484444 3065.98487709 -95.07959531 -1 2 6 1 3 -537.82743592 0.36420755 3077.46812700 -1 2 6 1 4 1.75676584 1561.87195510 -3081.75292174 -1 2 6 1 5 1553.38806151 0.21423974 3070.18397594 -1 2 6 1 6 67035.54945475 -72006.46837791 80811.48590744 -1 2 6 1 7 3061.37872275 889.96257974 90.79480057 -1 2 6 1 8 0.59987126 -536.63840538 -3077.00751156 -1 2 6 2 1 72013.43116936 -74113.97680734 72014.96298348 -1 2 6 2 2 -3064.50662291 9473.03845367 -3065.95274113 -1 2 6 2 3 -537.93455579 -0.02142397 -1557.37292062 -1 2 6 2 4 1558.11204772 -0.40705550 535.68503855 -1 2 6 2 5 3057.04036807 -9458.66296731 3055.05865050 -1 2 6 2 6 -72005.10795558 74101.32595087 -72001.66940780 -1 2 6 2 7 -1557.77997612 -0.73912709 -537.59177221 -1 2 6 2 8 536.77766121 -0.43919146 1556.92301718 -1 2 6 3 1 -80801.90939119 67032.57152241 -72004.34740451 -1 2 6 3 2 -93.04431781 3063.43542422 888.84853311 -1 2 6 3 3 90.76266461 889.07348483 3062.79270501 -1 2 6 3 4 -3079.39628463 -540.05552919 0.87838292 -1 2 6 3 5 3072.65844490 -1.92815763 1561.37920371 -1 2 6 3 6 80810.32901286 -72001.45516806 67026.44426593 -1 2 6 3 7 3077.85375853 0.82482299 -536.22063789 -1 2 6 3 8 -3077.29673521 1557.70499222 0.35349557 -1 3 6 1 1 72007.60384851 -80795.10727954 67033.68556904 -1 3 6 1 2 -1.41398226 -3078.11084621 -538.18093149 -1 3 6 1 3 -1558.01563984 3077.59667084 0.34278358 -1 3 6 1 4 -2.82796453 -3080.16754769 1557.11583294 -1 3 6 1 5 536.20992591 3076.73971189 1.84246174 -1 3 6 1 6 -67028.08319992 80799.85268972 -72006.44695393 -1 3 6 1 7 -3061.97859401 91.86599925 890.54102703 -1 3 6 1 8 -891.51581784 -92.62655032 3061.14305904 -1 3 6 2 1 -80797.28181287 72014.55592798 -67032.51796247 -1 3 6 2 2 -3080.16754769 -2.82796453 -1557.07298499 -1 3 6 2 3 3077.28602322 -1559.83667760 -0.21423974 -1 3 6 2 4 -3078.13227018 -1.45683021 538.25591539 -1 3 6 2 5 89.83072175 -3058.57218219 -892.13711307 -1 3 6 2 6 80803.91253273 -67036.53495754 72005.35433127 -1 3 6 2 7 3077.12534342 536.01711014 -0.62129524 -1 3 6 2 8 -92.61583833 -891.49439386 -3061.14305904 -1 3 6 3 1 72000.76960090 -72000.16972964 74100.53326384 -1 3 6 3 2 536.32775776 -1559.33321422 2.37806108 -1 3 6 3 3 3063.01765673 -3062.57846527 9469.52492198 -1 3 6 3 4 1559.33321422 -536.32775776 2.35663711 -1 3 6 3 5 -536.91691704 1558.61551110 3.59922758 -1 3 6 3 6 -72003.52258152 72000.74817693 -74115.18726186 -1 3 6 3 7 -1557.73712818 537.81672393 2.24951724 -1 3 6 3 8 -3061.31445083 3061.36801076 -9465.42223101 -1 1 7 1 1 -0.10711987 -0.01071199 -5.12032972 -1 1 7 1 2 -9468.71081098 0.10711987 2.99935632 -1 1 7 1 3 -0.00000000 -0.00000000 0.53559934 -1 1 7 1 4 9468.73223495 -0.00000000 2.99935632 -1 1 7 1 5 0.05355993 -0.02142397 -0.19281576 -1 1 7 1 6 9470.91748027 0.92123087 -0.85695895 -1 1 7 1 7 -0.02142397 0.03213596 0.44990345 -1 1 7 1 8 -9470.85320835 -0.80339901 -0.84624696 -1 1 7 2 1 -0.00000000 -0.04284795 2957.22607457 -1 1 7 2 2 -3063.56396806 1556.47311373 3075.77563308 -1 1 7 2 3 0.01071199 -0.06427192 -573.32696035 -1 1 7 2 4 3063.56396806 -1556.53738565 3075.68993718 -1 1 7 2 5 -0.00000000 -0.06427192 -2914.26029531 -1 1 7 2 6 -3061.01451519 -1557.18010486 3076.39692831 -1 1 7 2 7 -0.00000000 0.07498391 -11773.68400607 -1 1 7 2 8 3061.03593917 1557.23366480 3076.37550434 -1 1 7 3 1 -1.04977471 2959.47559181 0.04284795 -1 1 7 3 2 -3058.85069385 3075.02579400 1559.60101389 -1 1 7 3 3 0.29993563 -2913.63900007 0.02142397 -1 1 7 3 4 -3058.91496577 3075.04721797 -1559.49389402 -1 1 7 3 5 0.48203941 -574.78379056 -0.00000000 -1 1 7 3 6 3060.60745969 3075.98987281 -1559.06541455 -1 1 7 3 7 -3.06362824 -11773.01986288 0.02142397 -1 1 7 3 8 3060.58603572 3075.97916083 1559.27965428 -1 2 7 1 1 -0.10711987 -0.03213596 -11783.72113775 -1 2 7 1 2 3060.50033982 1561.37920371 3077.55382289 -1 2 7 1 3 0.04284795 0.04284795 -2915.07440631 -1 2 7 1 4 -3060.44677989 -1561.40062768 3077.46812700 -1 2 7 1 5 0.03213596 -0.00000000 -574.65524672 -1 2 7 1 6 3060.82169943 -1557.45861652 3077.57524687 -1 2 7 1 7 0.04284795 -0.09640788 2963.47116291 -1 2 7 1 8 -3060.84312340 1557.54431241 3077.50026296 -1 2 7 2 1 -0.00000000 0.01071199 -2.18524532 -1 2 7 2 2 -888.96636496 0.55702332 2.37806108 -1 2 7 2 3 0.03213596 0.08569589 0.83553497 -1 2 7 2 4 888.97707695 -0.55702332 2.52802890 -1 2 7 2 5 -0.00000000 0.04284795 -1.97100558 -1 2 7 2 6 888.60215741 -0.89980690 0.21423974 -1 2 7 2 7 -0.08569589 -0.00000000 -1.89602167 -1 2 7 2 8 -888.62358139 0.88909491 0.26779967 -1 2 7 3 1 2962.01433270 -2.46375698 -0.12854384 -1 2 7 3 2 89.68075393 539.79844150 -536.49914955 -1 2 7 3 3 -3371.56572605 0.44990345 -0.00000000 -1 2 7 3 4 89.60577003 539.69132163 536.62769339 -1 2 7 3 5 -2914.09961550 0.04284795 -0.00000000 -1 2 7 3 6 89.63790599 -537.97740374 -536.15636597 -1 2 7 3 7 2965.29220067 -1.54252611 0.04284795 -1 2 7 3 8 89.55221009 -538.00953970 536.02782213 -1 3 7 1 1 -1.77818982 -11783.09984251 -0.00000000 -1 3 7 1 2 3062.98552077 3079.58910040 1556.38741783 -1 3 7 1 3 0.77126305 -573.54120009 0.08569589 -1 3 7 1 4 3062.95338481 3079.65337232 -1556.38741783 -1 3 7 1 5 -0.80339901 -2915.58858168 0.14996782 -1 3 7 1 6 -3061.20733096 3076.65401600 -1557.30864870 -1 3 7 1 7 -1.71391790 2959.94691923 0.02142397 -1 3 7 1 8 -3061.16448301 3076.60045606 1557.14796890 -1 3 7 2 1 2960.34326275 -1.67106995 -0.01071199 -1 3 7 2 2 91.99454309 -534.93519947 538.25591539 -1 3 7 2 3 -2914.64592683 0.72841511 -0.00000000 -1 3 7 2 4 91.96240713 -534.91377550 -538.06309963 -1 3 7 2 5 -3373.75097137 -1.11404663 0.08569589 -1 3 7 2 6 90.36632109 535.96355021 537.76316400 -1 3 7 2 7 2963.53543483 -0.08569589 0.02142397 -1 3 7 2 8 90.36632109 535.98497418 -537.92384380 -1 3 7 3 1 -0.02142397 -0.00000000 4.86324203 -1 3 7 3 2 -890.89452260 -0.10711987 -2.91366042 -1 3 7 3 3 -0.03213596 -0.04284795 2.18524532 -1 3 7 3 4 890.90523459 0.17139179 -2.82796453 -1 3 7 3 5 0.02142397 0.04284795 -2.48518095 -1 3 7 3 6 889.00921291 -0.14996782 1.97100558 -1 3 7 3 7 0.02142397 -0.04284795 -2.76369261 -1 3 7 3 8 -888.96636496 0.13925583 1.91744565 -1 1 8 1 1 -74116.62266810 72002.53707873 72009.10352667 -1 1 8 1 2 9473.05987764 -3064.52804688 -3065.97416511 -1 1 8 1 3 1.28543842 -538.62012295 -1558.87259878 -1 1 8 1 4 -0.41776749 1558.14418368 535.68503855 -1 1 8 1 5 1.00692676 -1557.63000831 -539.62704971 -1 1 8 1 6 -0.41776749 536.77766121 1556.98728910 -1 1 8 1 7 -9466.52556566 3061.68937036 3061.34658679 -1 1 8 1 8 74108.63152590 -71998.39153982 -71998.71289942 -1 1 8 2 1 67015.38949550 -72015.88421435 -80797.08899711 -1 1 8 2 2 3066.00630107 889.36270848 -95.13315524 -1 1 8 2 3 0.56773530 -538.55585103 3077.31815918 -1 1 8 2 4 1561.91480305 1.67106995 -3081.79576969 -1 1 8 2 5 891.70863360 3053.51612440 86.14579827 -1 1 8 2 6 -536.63840538 0.57844729 -3076.95395163 -1 1 8 2 7 -0.44990345 1557.65143228 3076.38621633 -1 1 8 2 8 -71998.52008366 67051.57458708 80811.05742797 -1 1 8 3 1 67029.10083867 -80800.48469694 -72003.19050993 -1 1 8 3 2 3063.39257627 -93.01218185 888.82710914 -1 1 8 3 3 888.99850093 90.55913686 3062.74985706 -1 1 8 3 4 -540.04481720 -3079.41770861 0.81411100 -1 1 8 3 5 -1.53181412 3074.76870631 -536.79908518 -1 1 8 3 6 1557.69428023 -3077.27531124 0.32135961 -1 1 8 3 7 -0.64271921 3076.84683176 1559.45104607 -1 1 8 3 8 -71997.02040550 80807.99379973 67027.80468826 -1 2 8 1 1 72004.28313259 -67024.49468432 -80796.04993438 -1 2 8 1 2 -1.73534187 -1561.94693901 -3081.76363373 -1 2 8 1 3 537.80601195 -0.38563153 3077.48955097 -1 2 8 1 4 -889.36270848 -3066.02772504 -95.10101928 -1 2 8 1 5 -1553.37734953 -0.27851166 3070.09828004 -1 2 8 1 6 -0.62129524 536.64911737 -3076.95395163 -1 2 8 1 7 -3061.31445083 -889.93044378 90.81622454 -1 2 8 1 8 -67035.54945475 72006.25413817 80811.43234751 -1 2 8 2 1 -72014.20243241 74114.51240669 72015.47715885 -1 2 8 2 2 -1558.14418368 0.41776749 535.66361458 -1 2 8 2 3 537.76316400 -0.06427192 -1557.28722473 -1 2 8 2 4 3064.53875887 -9473.01702969 -3065.98487709 -1 2 8 2 5 -3057.19033589 9458.79151115 3054.95153063 -1 2 8 2 6 -536.78837320 0.42847947 1557.00871307 -1 2 8 2 7 1556.85874526 0.08569589 -538.25591539 -1 2 8 2 8 72007.26106493 -74101.13313511 -72001.42303210 -1 2 8 3 1 -80801.50233569 67032.10019499 72003.81180517 -1 2 8 3 2 -3079.43913258 -540.07695316 -0.84624696 -1 2 8 3 3 90.75195262 889.07348483 -3062.79270501 -1 2 8 3 4 -93.02289383 3063.43542422 -888.81639715 -1 2 8 3 5 3072.60488497 -1.92815763 -1561.42205165 -1 2 8 3 6 -3077.27531124 1557.69428023 -0.29993563 -1 2 8 3 7 3077.81091058 0.83553497 536.22063789 -1 2 8 3 8 80809.98622928 -72001.19808037 -67025.84439466 -1 3 8 1 1 72007.94663209 -80795.42863915 -67033.99621666 -1 3 8 1 2 -2.82796453 -3080.16754769 -1557.09440897 -1 3 8 1 3 -1558.07991176 3077.55382289 -0.34278358 -1 3 8 1 4 -1.44611823 -3078.15369416 538.32018732 -1 3 8 1 5 536.27419783 3076.69686395 -1.90673366 -1 3 8 1 6 -891.52652982 -92.55156641 -3061.16448301 -1 3 8 1 7 -3061.93574606 91.88742323 -890.49817908 -1 3 8 1 8 -67028.43669548 80800.18476131 72006.76831354 -1 3 8 2 1 -80797.49605261 72014.83443964 67032.65721830 -1 3 8 2 2 -3078.11084621 -1.41398226 -538.19164347 -1 3 8 2 3 3077.30744720 -1559.79382965 0.17139179 -1 3 8 2 4 -3080.12469974 -2.82796453 1557.11583294 -1 3 8 2 5 89.78787380 -3058.57218219 892.22280897 -1 3 8 2 6 -92.57299038 -891.53724181 3061.20733096 -1 3 8 2 7 3077.12534342 536.01711014 0.65343120 -1 3 8 2 8 80804.13748446 -67036.68492536 -72005.84708267 -1 3 8 3 1 -72001.69083177 72000.93028070 74101.21883100 -1 3 8 3 2 -1559.32250223 536.32775776 2.39948506 -1 3 8 3 3 -3063.21047250 3062.49276938 9469.61061787 -1 3 8 3 4 -536.31704577 1559.34392621 2.33521313 -1 3 8 3 5 536.70267730 -1558.55123918 3.51353169 -1 3 8 3 6 3061.33587480 -3061.31445083 -9465.39009505 -1 3 8 3 7 1556.79447333 -538.44873116 1.58537405 -1 3 8 3 8 72005.69711485 -72000.76960090 -74115.17654987 -2 1 1 1 1 -74175.43147592 -72109.42128355 -72075.29289344 -2 1 1 1 2 74174.16746147 72107.66451771 72072.25068917 -2 1 1 1 3 -0.44990345 538.62012295 1558.31557547 -2 1 1 1 4 -0.38563153 -538.98433050 -1559.19395839 -2 1 1 1 5 -0.36420755 1559.72955773 539.00575447 -2 1 1 1 6 -0.13925583 -1560.62936463 -539.24141818 -2 1 1 1 7 -9470.57469669 -3063.15691256 -3059.60053293 -2 1 1 1 8 9472.99560572 3066.29552471 3063.75678383 -2 1 1 2 1 -72107.50383790 -67126.57991903 -80913.63541407 -2 1 1 2 2 67142.32653970 72094.79942150 80912.69275923 -2 1 1 2 3 -539.35925004 0.79268703 3074.21168300 -2 1 1 2 4 -0.52488736 538.66297089 -3074.38307479 -2 1 1 2 5 1559.23680634 1.79961379 3080.44605934 -2 1 1 2 6 888.25937383 -3063.39257627 -93.13001370 -2 1 1 2 7 3058.18655066 -887.94872621 91.65175952 -2 1 1 2 8 -0.68556716 -1557.99421586 -3077.84304654 -2 1 1 3 1 -72074.51091840 -80912.05004002 -67095.51515716 -2 1 1 3 2 67095.21522152 80902.98769914 72062.55634107 -2 1 1 3 3 1560.06162932 3074.55446658 0.53559934 -2 1 1 3 4 893.72248713 -83.25356182 -3055.63709779 -2 1 1 3 5 -536.00639816 3081.32444227 0.25708768 -2 1 1 3 6 -1.09262266 -3079.24631682 536.52057352 -2 1 1 3 7 3063.60681601 94.22263636 -889.20202868 -2 1 1 3 8 -1.11404663 -3078.61430959 -1559.44033409 -2 2 1 1 1 -67136.54206680 -72095.02437322 -80912.89628698 -2 2 1 1 2 72109.26060375 67119.83136731 80913.26049453 -2 2 1 1 3 0.13925583 -537.76316400 3074.46877068 -2 2 1 1 4 538.63083493 -0.51417537 -3074.34022684 -2 2 1 1 5 -888.67714132 3068.44863407 94.67253981 -2 2 1 1 6 -1558.04777580 -0.70699113 -3077.81091058 -2 2 1 1 7 -1.32828637 1557.44790453 3075.85061698 -2 2 1 1 8 -3063.41400025 888.24866185 -93.06574178 -2 2 1 2 1 -72096.40621952 -74176.12775507 -72067.75165469 -2 2 1 2 2 72096.74900310 74179.82339053 72069.50842054 -2 2 1 2 3 539.56277779 0.83553497 1560.05091734 -2 2 1 2 4 -538.98433050 -0.36420755 -1559.23680634 -2 2 1 2 5 -3068.15941042 -9477.25897649 -3066.69186823 -2 2 1 2 6 3066.30623670 9473.01702969 3063.77820780 -2 2 1 2 7 1561.42205165 0.23566371 539.62704971 -2 2 1 2 8 -1560.67221257 -0.13925583 -539.17714626 -2 2 1 3 1 -80910.72175365 -72067.80521463 -67097.01483532 -2 2 1 3 2 80903.07339503 67084.37469083 72063.07051644 -2 2 1 3 3 3074.41521075 1558.65835905 0.38563153 -2 2 1 3 4 -83.23213785 893.78675905 -3055.76564164 -2 2 1 3 5 95.28312306 3067.72021896 -887.89516628 -2 2 1 3 6 -3078.63573357 -1.09262266 -1559.47247005 -2 2 1 3 7 3079.16062092 -534.67811179 0.29993563 -2 2 1 3 8 -3079.22489284 -1.09262266 536.44558962 -2 3 1 1 1 -67090.71618705 -80900.89886170 -72062.63132498 -2 3 1 1 2 72070.67602710 80911.55728862 67094.80816602 -2 3 1 1 3 -893.60465527 83.31783374 3055.82991356 -2 3 1 1 4 -1559.30107826 -3074.68301042 -0.51417537 -2 3 1 1 5 0.05355993 3080.78884292 -536.26348584 -2 3 1 1 6 535.98497418 -3081.15305048 0.38563153 -2 3 1 1 7 2.59230082 3075.90417692 1559.79382965 -2 3 1 1 8 -3065.68494146 -94.96176345 888.66642933 -2 3 1 2 1 -80900.00976679 -67087.20265536 -72062.08501365 -2 3 1 2 2 80911.66440849 72064.10957916 67096.63991578 -2 3 1 2 3 82.79294639 -893.25115971 3055.78706561 -2 3 1 2 4 -3074.65087446 -1559.34392621 -0.51417537 -2 3 1 2 5 3079.28916476 2.07812545 1557.43719255 -2 3 1 2 6 -94.96176345 -3065.72778941 888.64500536 -2 3 1 2 7 3076.95395163 3.31000394 -536.24206187 -2 3 1 2 8 -3081.13162650 535.98497418 0.33207159 -2 3 1 3 1 -72064.22741102 -72064.68802645 -74113.93395940 -2 3 1 3 2 72063.41330002 72066.18770461 74113.30195217 -2 3 1 3 3 -3055.08007448 -3055.48712998 -9478.78007862 -2 3 1 3 4 3055.25146627 3055.23004229 9478.69438273 -2 3 1 3 5 539.02717845 1555.42333902 -1.73534187 -2 3 1 3 6 -538.32018732 -1556.40884181 2.84938850 -2 3 1 3 7 1556.32314591 538.10594758 -3.12790016 -2 3 1 3 8 -1556.36599386 -538.32018732 2.84938850 -2 1 2 1 1 74168.12590089 67132.22513610 67087.80252662 -2 1 2 1 2 112.32589414 -216.86417384 -124.98746260 -2 1 2 1 3 -74173.55687822 -67116.61777126 67078.07604256 -2 1 2 1 4 -1.77818982 5.63450508 6.59858390 -2 1 2 1 5 -74164.99800073 67112.22585665 -67087.88822252 -2 1 2 1 6 0.67485517 7.73405451 8.56958948 -2 1 2 1 7 74056.16421430 -66920.70624370 -66963.33995138 -2 1 2 1 8 2.95650837 -3.65278752 -4.61686633 -2 1 2 2 1 72106.96823856 72098.22725729 80899.65627123 -2 1 2 2 2 -223.10926218 223.90194920 -329274.64983068 -2 1 2 2 3 -72098.58075286 -72107.33244611 80900.26685448 -2 1 2 2 4 0.94265484 -0.83553497 11785.47790359 -2 1 2 2 5 72111.43513708 -72111.33872920 80901.83080456 -2 1 2 2 6 2.34592512 0.06427192 -2959.91478327 -2 1 2 2 7 -71899.86268474 71899.95909263 80707.23685139 -2 1 2 2 8 -0.08569589 -2.36734909 -2959.85051135 -2 1 2 3 1 72073.58968753 80913.77466990 72065.05223400 -2 1 2 3 2 -129.25083337 -329284.87977812 109.93712107 -2 1 2 3 3 72069.91547604 80913.33547844 -72064.80585831 -2 1 2 3 4 -4.45618653 -2968.84858031 8.54816551 -2 1 2 3 5 -72080.29539130 80898.51008863 -72064.18456307 -2 1 2 3 6 6.60929589 11783.18553841 1.22116650 -2 1 2 3 7 -71939.00428470 80702.24506551 71944.24244628 -2 1 2 3 8 2.91366042 -2957.46173828 -0.27851166 -2 2 2 1 1 72107.07535843 72098.53790491 80899.89193494 -2 2 2 1 2 -221.71670389 221.02042474 -329275.43180572 -2 2 2 1 3 -72098.35580113 -72107.09678240 80899.68840719 -2 2 2 1 4 0.74983908 -1.32828637 11785.19939193 -2 2 2 1 5 72110.97452164 -72110.84597780 80901.35947714 -2 2 2 1 6 1.10333465 -1.79961379 -2958.58649690 -2 2 2 1 7 -71900.09834845 71904.34029525 80707.24756337 -2 2 2 1 8 0.14996782 -2.78511658 -2959.80766341 -2 2 2 2 1 67116.29641165 74173.12839875 67077.72254699 -2 2 2 2 2 217.71042080 -112.00453454 -125.21241433 -2 2 2 2 3 -67132.45008783 -74168.27586870 67088.12388623 -2 2 2 2 4 -5.64521707 1.84246174 6.72712774 -2 2 2 2 5 -67112.09731280 74164.95515278 -67087.80252662 -2 2 2 2 6 3.51353169 -3.04220427 -4.62757832 -2 2 2 2 7 66920.43844403 -74055.76787078 -66963.14713561 -2 2 2 2 8 -7.81975040 -0.80339901 8.59101346 -2 2 2 3 1 80913.27120652 72067.65524681 72064.59161857 -2 2 2 3 2 -329283.26226811 -127.06558805 -110.50485638 -2 2 2 3 3 80914.07460553 72073.86819919 -72060.86384715 -2 2 2 3 4 -2970.25185059 -5.52738522 -10.28350738 -2 2 2 3 5 80898.42439274 -72080.25254335 72063.94889936 -2 2 2 3 6 -2958.29727326 4.04913103 -0.66414318 -2 2 2 3 7 80702.52357717 -71939.23994842 -71944.44597403 -2 2 2 3 8 11783.42120212 6.55573595 -1.66035796 -2 3 2 1 1 72073.86819919 80913.86036579 72065.34145765 -2 3 2 1 2 -125.65160579 -329281.95540571 105.93083799 -2 3 2 1 3 72066.89469574 80912.24285578 -72059.55698475 -2 3 2 1 4 -5.29172151 -2970.13401873 6.57715993 -2 3 2 1 5 -72080.32752726 80898.31727287 -72064.14171512 -2 3 2 1 6 6.70570377 11783.33550622 1.04977471 -2 3 2 1 7 -71941.01813823 80701.88085796 71944.09247846 -2 3 2 1 8 4.82039408 -2957.61170610 0.61058325 -2 3 2 2 1 80913.22835857 72069.79764418 72064.60233056 -2 3 2 2 2 -329283.45508387 -126.72280447 -111.57605506 -2 3 2 2 3 80914.07460553 72071.57583400 -72060.90669509 -2 3 2 2 4 -2970.28398655 -5.46311330 -10.45489917 -2 3 2 2 5 80898.46724069 -72080.12399951 72063.75608360 -2 3 2 2 6 -2958.27584929 3.96343514 0.59987126 -2 3 2 2 7 80702.69496896 -71939.53988405 -71944.78875761 -2 3 2 2 8 11783.37835417 6.53431198 -1.54252611 -2 3 2 3 1 67092.85858442 67093.52272760 74101.72229438 -2 3 2 3 2 105.49164653 -104.55970367 5.58094515 -2 3 2 3 3 -67093.96191906 -67093.15852005 74102.09721392 -2 3 2 3 4 -2.28165320 2.35663711 -4.45618653 -2 3 2 3 5 -67082.33941333 67082.38226127 -74073.73187274 -2 3 2 3 6 -0.74983908 -1.71391790 -4.79897011 -2 3 2 3 7 66979.46149159 -66979.44006762 -74121.37879026 -2 3 2 3 8 1.69249392 0.78197504 -4.72398620 -2 1 3 1 1 -0.81411100 -539.53064183 1559.94379747 -2 1 3 1 2 -74179.75911861 -72096.84541098 72069.47628458 -2 1 3 1 3 74176.10633109 72096.36337158 -72067.86948655 -2 1 3 1 4 0.36420755 538.96290653 -1559.23680634 -2 1 3 1 5 9477.30182443 3068.12727446 -3066.67044425 -2 1 3 1 6 0.10711987 1560.65078860 -539.11287434 -2 1 3 1 7 -0.29993563 -1561.43276364 539.63776170 -2 1 3 1 8 -9473.01702969 -3066.29552471 3063.76749581 -2 1 3 2 1 537.82743592 -0.10711987 3074.36165081 -2 1 3 2 2 -67119.78851937 -72109.14277189 80913.09981473 -2 1 3 2 3 72095.00294925 67136.52064283 -80912.71418320 -2 1 3 2 4 0.51417537 -538.70581884 -3074.34022684 -2 1 3 2 5 -3068.48077003 888.68785331 94.62969186 -2 1 3 2 6 -888.27008582 3063.37115230 -93.15143767 -2 1 3 2 7 -1557.45861652 1.38184630 3075.86132897 -2 1 3 2 8 0.64271921 1558.00492785 -3077.81091058 -2 1 3 3 1 1558.67978302 3074.40449876 -0.31064762 -2 1 3 3 2 67084.31041891 80902.81630735 -72062.98482054 -2 1 3 3 3 -72067.65524681 -80910.63605775 67096.88629147 -2 1 3 3 4 893.78675905 -83.23213785 3055.74421766 -2 1 3 3 5 3067.72021896 95.31525902 887.93801423 -2 1 3 3 6 -1.03906272 -3079.24631682 -536.52057352 -2 1 3 3 7 -534.67811179 3079.13919695 -0.26779967 -2 1 3 3 8 -1.04977471 -3078.61430959 1559.45104607 -2 2 3 1 1 -0.81411100 539.36996203 3074.26524293 -2 2 3 1 2 -72094.99223726 -67142.54077944 80912.70347121 -2 2 3 1 3 67126.66561492 72107.61095777 -80913.99962162 -2 2 3 1 4 -538.63083493 0.53559934 -3074.29737889 -2 2 3 1 5 -1.76747783 -1559.27965428 3080.53175524 -2 2 3 1 6 1557.99421586 0.70699113 -3077.81091058 -2 2 3 1 7 888.00228615 -3058.19726265 91.65175952 -2 2 3 1 8 3063.43542422 -888.25937383 -93.09787774 -2 2 3 2 1 -538.62012295 0.42847947 1558.30486348 -2 2 3 2 2 -72107.71807764 -74174.33885326 72072.29353712 -2 2 3 2 3 72109.50697945 74175.47432387 -72075.34645337 -2 2 3 2 4 538.97361851 0.36420755 -1559.19395839 -2 2 3 2 5 -1559.68670978 0.34278358 538.98433050 -2 2 3 2 6 -3066.29552471 -9473.05987764 3063.77820780 -2 2 3 2 7 3063.11406462 9470.57469669 -3059.60053293 -2 2 3 2 8 1560.62936463 0.12854384 -539.20928222 -2 2 3 3 1 3074.55446658 1560.10447727 -0.53559934 -2 2 3 3 2 80902.88057927 67095.07596570 -72062.42779723 -2 2 3 3 3 -80911.90007220 -72074.42522250 67095.40803729 -2 2 3 3 4 -83.26427381 893.74391110 3055.74421766 -2 2 3 3 5 3081.32444227 -535.96355021 -0.36420755 -2 2 3 3 6 -3078.63573357 -1.02835074 1559.47247005 -2 2 3 3 7 94.22263636 3063.62823999 889.23416464 -2 2 3 3 8 -3079.26774079 -1.04977471 -536.49914955 -2 3 3 1 1 -893.35827957 82.95362619 -3055.86204952 -2 3 3 1 2 72064.09886718 80909.45773920 -67096.52208392 -2 3 3 1 3 -67086.40996833 -80898.98141606 72061.18520675 -2 3 3 1 4 -1559.30107826 -3074.68301042 0.47132742 -2 3 3 1 5 2.18524532 3079.41770861 -1557.30864870 -2 3 3 1 6 535.95283822 -3081.13162650 -0.36420755 -2 3 3 1 7 2.63514877 3077.89660647 536.88478108 -2 3 3 1 8 -3065.72778941 -94.96176345 -888.60215741 -2 3 3 2 1 83.25356182 -893.61536726 -3055.86204952 -2 3 3 2 2 80911.12880915 72070.21541167 -67094.42253450 -2 3 3 2 3 -80900.47038223 -67090.39482744 72062.25640544 -2 3 3 2 4 -3074.67229843 -1559.34392621 0.47132742 -2 3 3 2 5 3080.84240286 0.10711987 536.26348584 -2 3 3 2 6 -94.96176345 -3065.70636543 -888.62358139 -2 3 3 2 7 3075.90417692 2.62443678 -1559.80454164 -2 3 3 2 8 -3081.13162650 535.95283822 -0.34278358 -2 3 3 3 1 3055.44428203 3055.24075428 -9478.87648650 -2 3 3 3 2 -72065.91990494 -72065.25576176 74112.89489667 -2 3 3 3 3 72065.13792990 72064.93440215 -74114.18033509 -2 3 3 3 4 -3055.29431421 -3055.29431421 9478.69438273 -2 3 3 3 5 -1555.32693114 -538.83436268 -1.73534187 -2 3 3 3 6 538.34161129 1556.38741783 2.76369261 -2 3 3 3 7 -538.72724282 -1555.42333902 -2.48518095 -2 3 3 3 8 1556.36599386 538.34161129 2.78511658 -2 1 4 1 1 -0.04284795 0.04284795 897.62165034 -2 1 4 1 2 -0.68556716 0.47132742 -5.48453727 -2 1 4 1 3 -0.06427192 0.12854384 897.66449829 -2 1 4 1 4 0.81411100 -0.44990345 -5.59165714 -2 1 4 1 5 -0.00000000 -0.00000000 -894.83653376 -2 1 4 1 6 -0.07498391 -0.32135961 -1.19974253 -2 1 4 1 7 0.04284795 -0.00000000 -886.58830388 -2 1 4 1 8 -0.00000000 0.27851166 -1.17831855 -2 1 4 2 1 -538.68439487 538.70581884 -83.01789811 -2 1 4 2 2 6.76997569 -1.42469425 -2969.41631561 -2 1 4 2 3 538.57727500 -538.59869897 -80.72553292 -2 1 4 2 4 -2.81725254 5.44168932 -2969.55557144 -2 1 4 2 5 -540.24834495 -540.24834495 -83.12501798 -2 1 4 2 6 -0.27851166 -0.06427192 3371.85494970 -2 1 4 2 7 535.55649471 535.55649471 -99.79286952 -2 1 4 2 8 0.98550279 0.85695895 2913.94964769 -2 1 4 3 1 -1559.83667760 -3074.96152208 -3058.42221437 -2 1 4 3 2 8.82667717 11785.60644743 6.17010443 -2 1 4 3 3 -1559.79382965 -3074.87582618 3058.40079040 -2 1 4 3 4 -5.74162495 -2970.54107423 0.85695895 -2 1 4 3 5 1560.82218039 -3075.15433784 3060.02901240 -2 1 4 3 6 -0.81411100 2915.31007002 -1.07119869 -2 1 4 3 7 1556.38741783 -3078.66786953 -3064.48519893 -2 1 4 3 8 -0.02142397 573.20912850 -1.28543842 -2 2 4 1 1 538.62012295 -538.70581884 -83.03932209 -2 2 4 1 2 2.20666929 -4.78825812 -2970.38039443 -2 2 4 1 3 -538.55585103 538.66297089 -80.89692471 -2 2 4 1 4 -6.07369655 0.92123087 -2970.34825847 -2 2 4 1 5 540.26976892 540.24834495 -80.89692471 -2 2 4 1 6 -0.94265484 -0.66414318 2913.74611994 -2 2 4 1 7 -535.66361458 -535.62076663 -99.94283734 -2 2 4 1 8 0.17139179 -0.06427192 3371.72640585 -2 2 4 2 1 -0.00000000 0.02142397 897.60022637 -2 2 4 2 2 -0.44990345 0.69627915 -5.50596124 -2 2 4 2 3 0.06427192 0.08569589 897.57880239 -2 2 4 2 4 0.51417537 -0.85695895 -5.46311330 -2 2 4 2 5 0.04284795 0.02142397 -895.00792555 -2 2 4 2 6 -0.26779967 -0.00000000 -1.19974253 -2 2 4 2 7 -0.04284795 0.08569589 -886.48118401 -2 2 4 2 8 0.27851166 -0.06427192 -1.29615041 -2 2 4 3 1 -3074.87582618 -1559.92237350 -3058.22939861 -2 2 4 3 2 11785.64929538 8.88023710 -6.13796847 -2 2 4 3 3 -3074.85440221 -1559.79382965 3058.35794245 -2 2 4 3 4 -2970.40181840 -5.69877701 -0.77126305 -2 2 4 3 5 -3075.21860976 1560.77933244 -3059.77192472 -2 2 4 3 6 573.08058465 -0.06427192 1.19974253 -2 2 4 3 7 -3078.62502158 1556.51596168 3064.54947085 -2 2 4 3 8 2915.22437412 -0.71770312 1.04977471 -2 3 4 1 1 -1559.75098171 -3074.94009810 3058.29367053 -2 3 4 1 2 -5.67735303 -2970.50893827 -0.72841511 -2 3 4 1 3 -1559.77240568 -3074.81155426 -3058.31509451 -2 3 4 1 4 8.76240525 11785.60644743 -6.14868045 -2 3 4 1 5 1560.75790847 -3075.21860976 -3059.81477267 -2 3 4 1 6 -0.04284795 573.19841651 1.24259047 -2 3 4 1 7 1556.49453770 -3078.73214145 3064.46377496 -2 3 4 1 8 -0.74983908 2915.35291796 1.03906272 -2 3 4 2 1 -3074.96152208 -1559.81525363 3058.29367053 -2 3 4 2 2 -2970.47680231 -5.67735303 0.63200722 -2 3 4 2 3 -3074.94009810 -1559.79382965 -3058.22939861 -2 3 4 2 4 11785.60644743 8.84810114 6.10583251 -2 3 4 2 5 -3075.19718579 1560.75790847 3059.81477267 -2 3 4 2 6 2915.33149399 -0.79268703 -1.09262266 -2 3 4 2 7 -3078.66786953 1556.51596168 -3064.46377496 -2 3 4 2 8 573.19841651 0.04284795 -1.30686240 -2 3 4 3 1 -0.04284795 -0.02142397 9480.08694102 -2 3 4 3 2 9.46939638 -9.45868439 -6.74855172 -2 3 4 3 3 -0.04284795 -0.02142397 9480.27975678 -2 3 4 3 4 -9.41583644 9.55509227 -6.66285582 -2 3 4 3 5 0.04284795 0.04284795 -9484.05037615 -2 3 4 3 6 -1.27472644 -1.32828637 -2.61372479 -2 3 4 3 7 -0.04284795 0.04284795 -9457.20613710 -2 3 4 3 8 1.24259047 1.33899836 -2.63514877 -2 1 5 1 1 -1.37113432 1559.48318203 -536.74552525 -2 1 5 1 2 -74173.56759021 72113.86675809 -72082.25568489 -2 1 5 1 3 9477.44108026 -3068.12727446 3067.24889154 -2 1 5 1 4 0.21423974 -540.84821621 1560.26515707 -2 1 5 1 5 74163.21981091 -72101.89075679 72063.22048425 -2 1 5 1 6 -1.04977471 -1561.03642013 541.72659913 -2 1 5 1 7 -1.13547061 538.39517122 -1558.10133573 -2 1 5 1 8 -9463.80472100 3060.09328432 -3055.18719435 -2 1 5 2 1 1560.02949336 -0.37491954 3080.53175524 -2 1 5 2 2 67117.81751378 -72109.50697945 80902.50565973 -2 1 5 2 3 3068.91996149 888.06655807 94.88677954 -2 1 5 2 4 -0.52488736 -540.18407303 -3074.68301042 -2 1 5 2 5 -72100.32680671 67159.12293509 -80923.66183376 -2 1 5 2 6 889.54481225 3054.26596348 -86.85278940 -2 1 5 2 7 -533.90684873 -3.63136354 3077.32887117 -2 1 5 2 8 -1.56395008 1552.14547104 -3070.03400812 -2 1 5 3 1 537.93455579 3080.68172306 -0.39634351 -2 1 5 3 2 -67092.28013713 80902.75203543 -72062.01002974 -2 1 5 3 3 -3066.95966790 94.73681173 888.06655807 -2 1 5 3 4 -891.08733836 -81.19686035 3057.41528761 -2 1 5 3 5 72059.81407243 -80921.73367613 67085.81009707 -2 1 5 3 6 3.05291625 -3077.59667084 -534.78523165 -2 1 5 3 7 -1556.53738565 3074.92938612 3.52424367 -2 1 5 3 8 6.08440853 -3072.58346099 1562.17189073 -2 2 5 1 1 -888.08798204 -3068.91996149 94.89749153 -2 2 5 1 2 72109.53911541 -67117.89249769 80902.48423576 -2 2 5 1 3 0.39634351 -1560.05091734 3080.57460319 -2 2 5 1 4 540.16264905 0.55702332 -3074.64016247 -2 2 5 1 5 -67159.14435906 72100.39107863 -80923.83322555 -2 2 5 1 6 -1552.10262309 1.60679803 -3070.05543210 -2 2 5 1 7 3.64207553 533.90684873 3077.29673521 -2 2 5 1 8 -3054.30881142 -889.57694822 -86.90634934 -2 2 5 2 1 3068.10585049 -9477.40894430 3067.23817955 -2 2 5 2 2 -72113.93103002 74173.47118233 -72082.21283694 -2 2 5 2 3 -1559.47247005 1.43540624 -536.73481326 -2 2 5 2 4 540.79465628 -0.23566371 1560.30800502 -2 2 5 2 5 72101.93360474 -74163.28408283 72063.02766849 -2 2 5 2 6 -3060.05043638 9463.82614497 -3055.18719435 -2 2 5 2 7 -538.38445924 1.13547061 -1558.10133573 -2 2 5 2 8 1560.99357218 1.01763875 541.66232721 -2 2 5 3 1 94.71538776 -3066.95966790 -888.12011800 -2 2 5 3 2 80902.81630735 -67092.44081693 72062.11714961 -2 2 5 3 3 3080.68172306 537.91313182 0.36420755 -2 2 5 3 4 -81.17543637 -891.10876234 -3057.45813556 -2 2 5 3 5 -80921.89435593 72059.87834435 -67085.87436899 -2 2 5 3 6 -3072.57274901 6.08440853 -1562.15046676 -2 2 5 3 7 3074.94009810 -1556.53738565 -3.53495566 -2 2 5 3 8 -3077.61809482 3.05291625 534.84950358 -2 3 5 1 1 -0.94265484 3079.87832404 538.45944314 -2 3 5 1 2 -72076.28910821 80899.54915136 -67091.74453778 -2 3 5 1 3 -0.27851166 3080.51033127 -1555.12340339 -2 3 5 1 4 1560.82218039 -3074.44734671 0.47132742 -2 3 5 1 5 67094.89386192 -80910.01476251 72055.57212564 -2 3 5 1 6 -530.70396466 -3076.84683176 0.51417537 -2 3 5 1 7 889.63050815 93.59062914 -3056.76185641 -2 3 5 1 8 3062.81412898 -92.15522290 -891.29086611 -2 3 5 2 1 3080.51033127 -0.26779967 1555.09126742 -2 3 5 2 2 80899.49559142 -72076.25697225 67091.74453778 -2 3 5 2 3 3079.86761205 -1.00692676 -538.44873116 -2 3 5 2 4 -3074.42592273 1560.86502834 -0.42847947 -2 3 5 2 5 -80910.05761046 67094.85101397 -72055.33646193 -2 3 5 2 6 -92.11237495 3062.77128104 891.32300207 -2 3 5 2 7 93.60134112 889.66264411 3056.79399237 -2 3 5 2 8 -3076.86825574 -530.67182870 -0.50346338 -2 3 5 3 1 -536.90620505 1557.46932851 -2.82796453 -2 3 5 3 2 -72066.43408031 72066.63760806 -74083.89754826 -2 3 5 3 3 -1557.42648056 536.90620505 -2.82796453 -2 3 5 3 4 -3056.79399237 3057.11535198 -9483.08629733 -2 3 5 3 5 72059.12850528 -72061.37802251 74120.17904773 -2 3 5 3 6 540.67682442 -1552.85246217 -6.34149622 -2 3 5 3 7 3064.05671946 -3064.05671946 9465.69003069 -2 3 5 3 8 1553.62372523 -539.85200144 -6.90923152 -2 1 6 1 1 0.12854384 886.41691209 -1.15689458 -2 1 6 1 2 0.08569589 2.37806108 8.83738915 -2 1 6 1 3 -0.21423974 -886.45976004 -1.19974253 -2 1 6 1 4 0.08569589 -0.04284795 -0.29993563 -2 1 6 1 5 -0.47132742 891.28015412 3.34213990 -2 1 6 1 6 0.20352775 -2.29236519 -8.86952511 -2 1 6 1 7 -0.08569589 -891.30157810 -1.09262266 -2 1 6 1 8 0.19281576 0.04284795 0.33207159 -2 1 6 2 1 -1561.16496397 -3065.98487709 -3079.41770861 -2 1 6 2 2 6.98421543 -0.08569589 11784.99586418 -2 1 6 2 3 1561.14354000 3065.92060517 -3079.22489284 -2 1 6 2 4 -0.18210378 -0.10711987 2915.26722207 -2 1 6 2 5 -1560.37227694 3055.76564164 -3077.03964753 -2 1 6 2 6 -2.32450115 3.83489129 -2964.86372120 -2 1 6 2 7 1555.18767531 -3059.10778153 -3074.06171518 -2 1 6 2 8 0.79268703 -0.23566371 574.52670288 -2 1 6 3 1 -539.04860242 -90.73052865 536.58484545 -2 1 6 3 2 6.42719211 -2961.02882991 -0.50346338 -2 1 6 3 3 -539.09145037 -90.75195262 -536.54199750 -2 1 6 3 4 -0.80339901 3371.85494970 -0.53559934 -2 1 6 3 5 542.28362245 -86.98133325 -534.31390423 -2 1 6 3 6 -5.13104170 -2964.30669788 -1.39255829 -2 1 6 3 7 535.36367894 -92.25163078 537.76316400 -2 1 6 3 8 -0.00000000 2914.30314325 -1.11404663 -2 2 6 1 1 -1558.52981520 3063.30688038 -3078.06799826 -2 2 6 1 2 1.75676584 4.67042627 -2955.29791694 -2 2 6 1 3 1558.44411931 -3063.19976051 -3078.15369416 -2 2 6 1 4 -0.67485517 -0.06427192 573.66974393 -2 2 6 1 5 -1552.65964641 -3060.92881930 -3072.66915689 -2 2 6 1 6 -6.28793628 0.74983908 11771.78798439 -2 2 6 1 7 1557.77997612 3055.33716216 -3075.58281731 -2 2 6 1 8 0.08569589 0.12854384 2914.09961550 -2 2 6 2 1 -0.42847947 9471.68874332 -1.97100558 -2 2 6 2 2 -0.02142397 -3.06362824 6.94136748 -2 2 6 2 3 0.44990345 -9471.62447140 -1.97100558 -2 2 6 2 4 -0.81411100 0.10711987 -0.21423974 -2 2 6 2 5 1.17831855 9463.44051345 5.78447290 -2 2 6 2 6 0.01071199 3.14932413 -6.98421543 -2 2 6 2 7 0.36420755 -9463.44051345 -1.94958161 -2 2 6 2 8 -0.79268703 -0.10711987 0.12854384 -2 2 6 3 1 -3078.11084621 3061.63581043 -1559.04399057 -2 2 6 3 2 -2959.50772777 -3.92058719 1.53181412 -2 2 6 3 3 -3078.15369416 3061.59296248 1559.06541455 -2 2 6 3 4 2913.71398398 -0.62129524 1.00692676 -2 2 6 3 5 -3070.37679170 -3054.33023540 -1562.40755445 -2 2 6 3 6 11772.96630295 -4.02770706 1.54252611 -2 2 6 3 7 -3075.56139334 -3061.35729877 1557.35149665 -2 2 6 3 8 574.78379056 1.11404663 1.03906272 -2 3 6 1 1 535.49222279 -94.37260418 -538.34161129 -2 3 6 1 2 5.12032972 -2955.72639641 -2.58158883 -2 3 6 1 3 535.57791868 -94.39402815 538.29876334 -2 3 6 1 4 0.03213596 2915.50288578 -1.28543842 -2 3 6 1 5 -531.78587534 -98.05752765 539.75559355 -2 3 6 1 6 -6.44861609 -2959.05782433 0.83553497 -2 3 6 1 7 -538.77009076 -88.41673949 -536.04924610 -2 3 6 1 8 0.79268703 3374.69362621 -0.55702332 -2 3 6 2 1 -3080.61745113 -3069.39128891 -1556.34456989 -2 3 6 2 2 11786.37771049 8.56958948 -3.54566765 -2 3 6 2 3 -3080.70314703 -3069.43413686 1556.32314591 -2 3 6 2 4 572.99488876 -0.14996782 -1.26401445 -2 3 6 2 5 -3078.08942224 3060.28610009 -1554.73777186 -2 3 6 2 6 -2963.12837933 8.44104564 0.36420755 -2 3 6 2 7 -3073.01194047 3060.07186035 1559.85810157 -2 3 6 2 8 2916.01706115 1.43540624 -0.68556716 -2 3 6 3 1 0.12854384 885.32428943 2.46375698 -2 3 6 3 2 -2.39948506 3.48139573 -2.67799671 -2 3 6 3 3 -0.17139179 -885.36713738 2.48518095 -2 3 6 3 4 1.07119869 -0.08569589 -1.86388571 -2 3 6 3 5 -0.42847947 890.10183557 -7.45554285 -2 3 6 3 6 1.42469425 1.94958161 2.63514877 -2 3 6 3 7 -0.34278358 -896.80753934 2.50660492 -2 3 6 3 8 0.66414318 1.27472644 1.84246174 -2 1 7 1 1 -9469.58919390 3060.51105181 3063.71393588 -2 1 7 1 2 74060.92033646 -71905.42220592 -71940.73962657 -2 1 7 1 3 -0.19281576 -1555.80897054 -535.51364676 -2 1 7 1 4 -0.69627915 535.94212623 1555.65900273 -2 1 7 1 5 -1.01763875 -534.44244807 -1556.40884181 -2 1 7 1 6 -0.96407882 1554.24502046 535.79215842 -2 1 7 1 7 -74051.60090790 71902.41213761 71937.42962264 -2 1 7 1 8 9463.16200179 -3057.43671158 -3059.97545247 -2 1 7 2 1 -3065.19219007 -890.86238664 93.19428562 -2 1 7 2 2 -66918.29604666 71901.25524303 80696.62127241 -2 1 7 2 3 -1561.19709993 0.66414318 3079.20346887 -2 1 7 2 4 0.35349557 535.42795087 -3078.30366197 -2 1 7 2 5 538.17021950 -2.74226863 3075.53996937 -2 1 7 2 6 -890.29465133 -3058.82926988 -90.85907249 -2 1 7 2 7 71896.13491332 -66927.43337144 -80700.32761986 -2 1 7 2 8 0.12854384 -1557.40505658 -3075.04721797 -2 1 7 3 1 -3060.50033982 90.22706526 -890.13397153 -2 1 7 3 2 -66969.62788766 80709.22928094 71950.99099799 -2 1 7 3 3 540.01268124 3075.39000155 -0.49275140 -2 1 7 3 4 -884.81011407 -101.65675524 -3065.12791814 -2 1 7 3 5 -1559.93308548 3079.56767642 1.77818982 -2 1 7 3 6 -0.85695895 -3073.03336444 537.46322837 -2 1 7 3 7 71939.62557994 -80702.99490459 -66976.26931951 -2 1 7 3 8 -3.96343514 -3076.83611978 -1558.30486348 -2 2 7 1 1 0.21423974 1561.78625921 3079.80334013 -2 2 7 1 2 -71903.80469591 66918.51028640 80696.89978407 -2 2 7 1 3 891.04449041 3065.10649417 93.32282946 -2 2 7 1 4 -535.42795087 -0.42847947 -3078.34650992 -2 2 7 1 5 2.99935632 -538.12737155 3075.41142552 -2 2 7 1 6 1557.39434460 -0.14996782 -3075.04721797 -2 2 7 1 7 66928.72952185 -71897.00258425 -80701.29169868 -2 2 7 1 8 3058.76499795 890.24109140 -90.79480057 -2 2 7 2 1 1555.83039452 0.23566371 -535.47079881 -2 2 7 2 2 71905.26152612 -74060.84535255 -71940.55752280 -2 2 7 2 3 -3060.53247578 9469.65346582 3063.69251191 -2 2 7 2 4 -535.97426219 0.70699113 1555.59473081 -2 2 7 2 5 534.44244807 0.96407882 -1556.51596168 -2 2 7 2 6 3057.43671158 -9463.14057781 -3060.02901240 -2 2 7 2 7 -71902.24074582 74051.44022810 71937.32250277 -2 2 7 2 8 -1554.18074854 1.02835074 535.80287040 -2 2 7 3 1 3075.39000155 539.99125726 0.47132742 -2 2 7 3 2 80709.40067273 -66969.85283938 -71951.14096581 -2 2 7 3 3 90.21635328 -3060.52176380 890.12325954 -2 2 7 3 4 -101.65675524 -884.78869009 3065.04222225 -2 2 7 3 5 3079.64266033 -1559.90094952 -1.79961379 -2 2 7 3 6 -3076.85754375 -4.02770706 1558.31557547 -2 2 7 3 7 -80703.27341625 71939.86124365 66976.37643938 -2 2 7 3 8 -3073.03336444 -0.83553497 -537.45251638 -2 3 7 1 1 3.53495566 3077.93945442 1556.83732128 -2 3 7 1 2 -71942.21788076 80699.11716535 66981.27181737 -2 3 7 1 3 2.48518095 3075.53996937 -537.99882771 -2 3 7 1 4 1556.86945724 -3078.90353324 0.51417537 -2 3 7 1 5 891.39798598 92.57299038 3063.88532767 -2 3 7 1 6 -538.50229109 -3072.51918907 -0.29993563 -2 3 7 1 7 66969.13513626 -80705.09445401 -71954.82588929 -2 3 7 1 8 3057.32959172 -88.63097922 890.76597876 -2 3 7 2 1 3075.51854539 2.47446896 538.03096367 -2 3 7 2 2 80699.28855714 -71942.34642460 -66981.41107320 -2 3 7 2 3 3077.88589449 3.51353169 -1556.85874526 -2 3 7 2 4 -3078.93566920 1556.83732128 -0.47132742 -2 3 7 2 5 92.50871846 891.38727399 -3063.79963178 -2 3 7 2 6 -88.57741929 3057.39386364 -890.72313081 -2 3 7 2 7 -80705.30869375 66969.18869620 71955.05084101 -2 3 7 2 8 -3072.51918907 -538.44873116 0.36420755 -2 3 7 3 1 1559.10826249 -536.75623723 -3.21359606 -2 3 7 3 2 71946.24558782 -71946.22416384 -74126.15633640 -2 3 7 3 3 536.79908518 -1559.08683852 -3.21359606 -2 3 7 3 4 3067.70950698 -3067.69879499 -9458.19163989 -2 3 7 3 5 -3058.14370272 3058.20797464 9466.35417387 -2 3 7 3 6 -536.20992591 1559.45104607 2.91366042 -2 3 7 3 7 -71955.95064791 71956.00420784 74118.46512984 -2 3 7 3 8 -1559.42962210 536.20992591 2.99935632 -2 1 8 1 1 9471.64589538 -0.38563153 -1.99242955 -2 1 8 1 2 3.02078029 0.02142397 6.95207947 -2 1 8 1 3 -9471.53877551 0.38563153 -1.97100558 -2 1 8 1 4 -0.08569589 0.81411100 -0.23566371 -2 1 8 1 5 -9463.50478537 -1.19974253 5.74162495 -2 1 8 1 6 0.13925583 0.77126305 0.25708768 -2 1 8 1 7 9463.48336139 -0.49275140 -1.99242955 -2 1 8 1 8 -3.08505221 0.06427192 -6.88780755 -2 1 8 2 1 3063.32830435 -1558.52981520 -3077.98230237 -2 1 8 2 2 -4.69185024 -1.77818982 -2955.30862893 -2 1 8 2 3 -3063.22118448 1558.50839123 -3078.17511813 -2 1 8 2 4 0.08569589 0.68556716 573.75543983 -2 1 8 2 5 3060.84312340 1552.55252654 -3072.58346099 -2 1 8 2 6 -0.04284795 -0.19281576 2914.04605557 -2 1 8 2 7 -3055.20861832 -1557.71570420 -3075.58281731 -2 1 8 2 8 -0.81411100 6.39505615 11771.69157651 -2 1 8 3 1 3061.50726659 -3078.08942224 -1559.04399057 -2 1 8 3 2 -4.77754614 -2958.82216061 -0.83553497 -2 1 8 3 3 3061.61438646 -3078.08942224 1558.89402276 -2 1 8 3 4 -0.79268703 2913.66042404 -0.85695895 -2 1 8 3 5 -3054.39450732 -3070.33394376 1562.55752226 -2 1 8 3 6 0.95336683 574.82663851 -1.11404663 -2 1 8 3 7 -3059.08635756 -3075.43284950 -1557.28722473 -2 1 8 3 8 -4.94893793 11772.39856764 -2.31378916 -2 2 8 1 1 -3065.96345312 -1561.10069205 -3079.46055655 -2 2 8 1 2 0.10711987 -6.98421543 11784.98515220 -2 2 8 1 3 3066.00630107 1561.12211602 -3079.16062092 -2 2 8 1 4 0.05355993 0.17139179 2915.28864604 -2 2 8 1 5 -3055.74421766 1560.26515707 -3076.99679958 -2 2 8 1 6 0.17139179 -0.77126305 574.46243096 -2 2 8 1 7 3059.12920551 -1555.18767531 -3074.14741108 -2 2 8 1 8 -3.79204335 2.48518095 -2964.81016127 -2 2 8 2 1 886.39548812 0.17139179 -1.09262266 -2 2 8 2 2 -2.42090903 -0.13925583 8.76240525 -2 2 8 2 3 -886.45976004 -0.25708768 -1.17831855 -2 2 8 2 4 -0.00000000 -0.06427192 -0.32135961 -2 2 8 2 5 -891.21588220 0.40705550 3.34213990 -2 2 8 2 6 -0.05355993 -0.06427192 0.27851166 -2 2 8 2 7 891.36585002 0.23566371 -1.09262266 -2 2 8 2 8 2.37806108 -0.18210378 -8.86952511 -2 2 8 3 1 -90.75195262 -539.02717845 536.60626942 -2 2 8 3 2 -2961.97148475 7.03777536 -0.23566371 -2 2 8 3 3 -90.81622454 -539.13429832 -536.62769339 -2 2 8 3 4 3371.66213393 -0.96407882 0.53559934 -2 2 8 3 5 -84.90320780 542.19792656 534.14251244 -2 2 8 3 6 2914.08890352 0.14996782 1.24259047 -2 2 8 3 7 -92.23020681 535.29940702 -537.78458797 -2 2 8 3 8 -2965.14223286 -5.70948899 1.94958161 -2 3 8 1 1 -3069.34844096 -3080.59602716 -1556.32314591 -2 3 8 1 2 8.50531756 11786.39913446 2.34592512 -2 3 8 1 3 -3069.26274507 -3080.59602716 1556.43026578 -2 3 8 1 4 -0.19281576 573.02702472 1.00692676 -2 3 8 1 5 3062.55704130 -3078.02515032 1554.60922802 -2 3 8 1 6 1.45683021 2916.01706115 1.04977471 -2 3 8 1 7 3057.84376708 -3072.90482060 -1559.90094952 -2 3 8 1 8 8.39819769 -2963.10695536 0.92123087 -2 3 8 2 1 -94.43687610 535.57791868 -538.32018732 -2 3 8 2 2 -2955.75853237 5.20602561 2.49589294 -2 3 8 2 3 -94.52257199 535.53507073 538.25591539 -2 3 8 2 4 2915.46003783 -0.02142397 1.28543842 -2 3 8 2 5 -98.03610368 -531.82872328 -539.62704971 -2 3 8 2 6 3374.60793032 0.74983908 0.47132742 -2 3 8 2 7 -88.45958743 -538.83436268 536.02782213 -2 3 8 2 8 -2958.99355240 -6.39505615 -0.91051888 -2 3 8 3 1 885.30286546 0.17139179 2.37806108 -2 3 8 3 2 -1.73534187 1.22116650 -2.57087684 -2 3 8 3 3 -885.36713738 -0.19281576 2.46375698 -2 3 8 3 4 0.52488736 -0.92123087 -1.79961379 -2 3 8 3 5 -892.24423294 0.40705550 -7.45554285 -2 3 8 3 6 -0.86767094 -0.72841511 1.75676584 -2 3 8 3 7 894.47232621 0.17139179 2.42090903 -2 3 8 3 8 -0.19281576 -0.09640788 2.64586075 -3 1 1 1 1 -0.04284795 0.08569589 4.69185024 -3 1 1 1 2 -0.64271921 -0.00000000 -897.66449829 -3 1 1 1 3 0.01071199 0.02142397 4.54188243 -3 1 1 1 4 0.67485517 -0.08569589 -897.49310650 -3 1 1 1 5 0.04284795 0.02142397 1.60679803 -3 1 1 1 6 -0.70699113 0.06427192 891.92287334 -3 1 1 1 7 -0.00000000 0.06427192 0.55702332 -3 1 1 1 8 0.62129524 -0.00000000 891.86931340 -3 1 1 2 1 0.06427192 0.02142397 2970.18757867 -3 1 1 2 2 -539.11287434 539.09145037 80.63983703 -3 1 1 2 3 0.06427192 0.08569589 2970.36968244 -3 1 1 2 4 538.97361851 -538.89863461 80.68268498 -3 1 1 2 5 0.02142397 -0.12854384 -2913.72469596 -3 1 1 2 6 -537.54892426 -537.63462016 91.65175952 -3 1 1 2 7 0.04284795 0.01071199 -3371.82281374 -3 1 1 2 8 537.61319618 537.65604413 91.69460746 -3 1 1 3 1 7.02706338 2969.23421184 0.11783186 -3 1 1 3 2 1560.54366873 3074.81155426 -3058.35794245 -3 1 1 3 3 -12.64014449 -11784.25673709 0.02142397 -3 1 1 3 4 1560.58651668 3074.83297823 3058.40079040 -3 1 1 3 5 -0.71770312 -573.39123227 0.08569589 -3 1 1 3 6 -1557.95136791 3077.01822355 3060.07186035 -3 1 1 3 7 1.00692676 -2915.16010220 -0.02142397 -3 1 1 3 8 -1557.84424805 3076.98608759 -3059.95402849 -3 2 1 1 1 0.04284795 -0.11783186 2970.23042661 -3 2 1 1 2 538.27733937 -538.34161129 81.04689253 -3 2 1 1 3 0.04284795 -0.00000000 2970.15544271 -3 2 1 1 4 -538.26662738 538.34161129 81.19686035 -3 2 1 1 5 -0.01071199 0.04284795 -3371.81210175 -3 2 1 1 6 538.19164347 538.32018732 91.52321567 -3 2 1 1 7 0.02142397 0.03213596 -2913.68184802 -3 2 1 1 8 -538.29876334 -538.34161129 91.42680779 -3 2 1 2 1 -0.14996782 -0.05355993 4.53117044 -3 2 1 2 2 -0.00000000 0.74983908 -897.49310650 -3 2 1 2 3 0.05355993 -0.08569589 4.71327422 -3 2 1 2 4 0.07498391 -0.72841511 -897.32171471 -3 2 1 2 5 0.06427192 0.04284795 1.58537405 -3 2 1 2 6 -0.23566371 -0.59987126 891.92287334 -3 2 1 2 7 0.02142397 0.03213596 0.46061543 -3 2 1 2 8 -0.00000000 0.62129524 891.85860142 -3 2 1 3 1 2969.12709197 6.95207947 0.01071199 -3 2 1 3 2 3074.91867413 1559.02256660 -3058.46506232 -3 2 1 3 3 -11784.26744908 -7.66978259 -0.04284795 -3 2 1 3 4 3074.96152208 1559.04399057 3058.31509451 -3 2 1 3 5 -2915.17081419 0.89980690 0.06427192 -3 2 1 3 6 3076.91110368 -1559.25823031 -3059.72907677 -3 2 1 3 7 -573.41265625 0.44990345 0.02142397 -3 2 1 3 8 3076.80398381 -1559.34392621 3059.88975657 -3 3 1 1 1 -7.58408669 -11784.32100901 -0.03213596 -3 3 1 1 2 1559.04399057 3074.96152208 3058.50791027 -3 3 1 1 3 6.89851953 2969.19136389 0.06427192 -3 3 1 1 4 1559.04399057 3075.02579400 -3058.44363835 -3 3 1 1 5 0.88909491 -2915.16010220 0.06427192 -3 3 1 1 6 -1559.38677415 3076.86825574 -3059.94331651 -3 3 1 1 7 0.53559934 -573.32696035 0.01071199 -3 3 1 1 8 -1559.40819813 3076.83611978 3059.93260452 -3 3 1 2 1 -11784.42812888 -12.51160064 0.07498391 -3 3 1 2 2 3074.94009810 1560.47939681 3058.25082259 -3 3 1 2 3 2969.15922793 7.15560722 -0.06427192 -3 3 1 2 4 3074.86511419 1560.58651668 -3058.10085477 -3 3 1 2 5 -573.27340042 -0.72841511 -0.06427192 -3 3 1 2 6 3076.91110368 -1557.95136791 3060.11470830 -3 3 1 2 7 -2915.22437412 1.00692676 -0.05355993 -3 3 1 2 8 3076.97537560 -1557.95136791 -3060.11470830 -3 3 1 3 1 -0.06427192 0.06427192 11.24758620 -3 3 1 3 2 0.10711987 -0.06427192 -9480.12978896 -3 3 1 3 3 0.02142397 -0.06427192 11.16189030 -3 3 1 3 4 -0.07498391 -0.00000000 -9480.06551704 -3 3 1 3 5 0.01071199 0.02142397 3.92058719 -3 3 1 3 6 0.17139179 0.12854384 9465.28297519 -3 3 1 3 7 -0.02142397 -0.02142397 3.11718817 -3 3 1 3 8 -0.21423974 -0.12854384 9465.26155121 -3 1 2 1 1 -0.85695895 -539.56277779 1559.91166151 -3 1 2 1 2 -74179.69484669 -72096.74900310 72069.39058868 -3 1 2 1 3 74175.97778725 72096.19197979 -72067.48385502 -3 1 2 1 4 0.37491954 538.98433050 -1559.15111044 -3 1 2 1 5 9477.31253642 3068.17012241 -3066.67044425 -3 1 2 1 6 0.16067980 1560.65078860 -539.21999421 -3 1 2 1 7 -0.25708768 -1561.43276364 539.66989766 -3 1 2 1 8 -9473.05987764 -3066.27410074 3063.74607184 -3 1 2 2 1 -0.57844729 538.99504249 3074.40449876 -3 1 2 2 2 -72093.98531050 -67136.92769833 80911.73939240 -3 1 2 2 3 67125.08024087 72103.30473906 -80912.20000783 -3 1 2 2 4 -538.69510686 0.74983908 -3074.38307479 -3 1 2 2 5 -1.98171757 -1559.53674197 3080.25324358 -3 1 2 2 6 1557.35149665 1.58537405 -3077.14676739 -3 1 2 2 7 889.24487662 -3060.01830042 90.39845705 -3 1 2 2 8 3063.49969614 -888.05584608 -93.03360582 -3 1 2 3 1 -893.33685560 82.97505016 -3055.85133753 -3 1 2 3 2 72063.69181167 80909.16851555 -67096.30784418 -3 1 2 3 3 -67086.14216866 -80898.70290440 72061.14235880 -3 1 2 3 4 -1559.26894230 -3074.64016247 0.59987126 -3 1 2 3 5 2.18524532 3079.46055655 -1557.26580076 -3 1 2 3 6 536.02782213 -3081.17447445 -0.34278358 -3 1 2 3 7 2.63514877 3077.88589449 536.89549306 -3 1 2 3 8 -3065.72778941 -94.97247544 -888.66642933 -3 2 2 1 1 537.89170784 -0.31064762 3074.43663472 -3 2 2 1 2 -67119.38146386 -72106.87183068 80913.15337466 -3 2 2 1 3 72091.97145697 67135.51371607 -80913.99962162 -3 2 2 1 4 1.34971034 -538.10594758 -3073.52611584 -3 2 2 1 5 -3068.60931387 888.49503754 94.60826789 -3 2 2 1 6 -887.97015019 3063.41400025 -92.91577396 -3 2 2 1 7 -1556.79447333 0.47132742 3075.22932175 -3 2 2 1 8 1.49967816 1557.42648056 -3076.98608759 -3 2 2 2 1 -538.64154692 0.42847947 1558.26201553 -3 2 2 2 2 -72107.65380572 -74174.14603750 72072.33638507 -3 2 2 2 3 72109.41057156 74175.38862797 -72075.34645337 -3 2 2 2 4 538.97361851 0.38563153 -1559.19395839 -3 2 2 2 5 -1559.71884575 0.36420755 538.92005858 -3 2 2 2 6 -3066.30623670 -9473.01702969 3063.82105575 -3 2 2 2 7 3063.13548859 9470.58540868 -3059.57910895 -3 2 2 2 8 1560.69363655 0.09640788 -539.20928222 -3 2 2 3 1 83.29640977 -893.59394329 -3055.82991356 -3 2 2 3 2 80911.27877696 72070.39751544 -67094.63677423 -3 2 2 3 3 -80900.57750210 -67090.39482744 72062.44922120 -3 2 2 3 4 -3074.67229843 -1559.30107826 0.47132742 -3 2 2 3 5 3080.88525081 0.10711987 536.28490981 -3 2 2 3 6 -94.95105147 -3065.77063736 -888.68785331 -3 2 2 3 7 3075.88275295 2.62443678 -1559.79382965 -3 2 2 3 8 -3081.13162650 535.98497418 -0.35349557 -3 3 2 1 1 1558.74405494 3074.40449876 -0.32135961 -3 3 2 1 2 67084.16045109 80902.76274741 -72062.98482054 -3 3 2 1 3 -72067.52670297 -80910.57178583 67096.80059558 -3 3 2 1 4 893.76533507 -83.21071387 3055.74421766 -3 3 2 1 5 3067.72021896 95.22956312 888.02371012 -3 3 2 1 6 -1.11404663 -3079.20346887 -536.39202968 -3 3 2 1 7 -534.72095973 3079.14990894 -0.26779967 -3 3 2 1 8 -1.02835074 -3078.63573357 1559.50460601 -3 3 2 2 1 3074.59731452 1560.11518926 -0.54631133 -3 3 2 2 2 80902.79488338 67095.00098179 -72062.32067736 -3 3 2 2 3 -80911.81437631 -72074.38237455 67095.25806947 -3 3 2 2 4 -83.22142586 893.78675905 3055.74421766 -3 3 2 2 5 3081.30301829 -535.98497418 -0.38563153 -3 3 2 2 6 -3078.64644555 -1.04977471 1559.49389402 -3 3 2 2 7 94.24406033 3063.59610402 889.20202868 -3 3 2 2 8 -3079.18204490 -1.11404663 -536.40274167 -3 3 2 3 1 3055.48712998 3055.31573819 -9478.86577451 -3 3 2 3 2 -72065.34145765 -72064.62375453 74112.07007368 -3 3 2 3 3 72065.08436997 72064.91297818 -74112.16648157 -3 3 2 3 4 -3055.92632144 -3055.93703342 9477.79457583 -3 3 2 3 5 -1555.29479517 -538.92005858 -1.64964598 -3 3 2 3 6 538.24520341 1556.45168975 2.59230082 -3 3 2 3 7 -538.77009076 -1555.44476299 -2.49589294 -3 3 2 3 8 1556.47311373 538.24520341 2.63514877 -3 1 3 1 1 0.64271921 -0.07498391 -11.75104958 -3 1 3 1 2 74172.21787986 67121.29890951 -67081.84666193 -3 1 3 1 3 3.37427586 -0.42847947 107.03417264 -3 1 3 1 4 -74176.08490712 -67120.94541395 -67081.37533451 -3 1 3 1 5 3.62065156 0.08569589 9.85502790 -3 1 3 1 6 -74114.57667861 67021.68814376 67030.98614835 -3 1 3 1 7 0.74983908 0.03213596 -4.16696289 -3 1 3 1 8 74110.19547598 -67021.61315986 67031.22181206 -3 1 3 2 1 -0.08569589 -0.20352775 -11785.57431147 -3 1 3 2 2 72096.29909966 72106.66830293 -80899.92407090 -3 1 3 2 3 -1.83174975 -3.29929195 329268.90820573 -3 1 3 2 4 -72094.36023004 -72104.91153709 -80898.81002427 -3 1 3 2 5 0.08569589 -0.12854384 2960.08617506 -3 1 3 2 6 72011.81365935 -71998.67005148 -80802.48783848 -3 1 3 2 7 -0.70699113 -0.91051888 2960.71818229 -3 1 3 2 8 -72011.28877199 72001.30520024 -80802.65923027 -3 1 3 3 1 4.69185024 2970.58392218 1.94958161 -3 1 3 3 2 -72069.49770855 -80912.14644790 72059.73908853 -3 1 3 3 3 111.45822321 329278.05624250 2.35663711 -3 1 3 3 4 -72068.66217357 -80911.19308107 -72063.00624452 -3 1 3 3 5 -8.89094909 2954.21600627 -0.29993563 -3 1 3 3 6 72017.66240417 -80799.61702601 -72002.26927906 -3 1 3 3 7 -1.58537405 -11781.05385302 0.28922365 -3 1 3 3 8 72014.75945573 -80798.96359481 72001.43374408 -3 2 3 1 1 -0.04284795 -0.21423974 -11785.60644743 -3 2 3 1 2 72094.69230163 72105.02936894 -80898.76717632 -3 2 3 1 3 0.84624696 -0.53559934 329269.31526123 -3 2 3 1 4 -72094.91725335 -72105.44713643 -80898.98141606 -3 2 3 1 5 0.05355993 -0.10711987 2960.10759904 -3 2 3 1 6 72012.35997067 -71999.78409811 -80803.40906935 -3 2 3 1 7 -0.70699113 -0.97479080 2960.64319838 -3 2 3 1 8 -72012.31712273 72001.85151157 -80803.26981352 -3 2 3 2 1 0.49275140 0.17139179 -6.94136748 -3 2 3 2 2 67130.41481032 74170.00049859 -67084.05333122 -3 2 3 2 3 5.58094515 0.98550279 133.83556374 -3 2 3 2 4 -67134.68889308 -74174.48882108 -67084.07475520 -3 2 3 2 5 3.82417931 0.29993563 -15.36098915 -3 2 3 2 6 -67016.97486955 74116.72978797 67028.92944688 -3 2 3 2 7 -1.19974253 0.93194286 -1.14618259 -3 2 3 2 8 67012.69007481 -74114.59810258 67028.84375098 -3 2 3 3 1 2972.70489558 6.17010443 0.10711987 -3 2 3 3 2 -80912.37139962 -72074.20027078 72059.29989706 -3 2 3 3 3 329275.20685400 138.95589346 0.66414318 -3 2 3 3 4 -80911.60013657 -72073.28975189 -72058.33581825 -3 2 3 3 5 -11779.81126255 -10.71198685 -0.06427192 -3 2 3 3 6 -80800.24903323 72005.41860319 72001.30520024 -3 2 3 3 7 2957.23678656 -0.95336683 -0.65343120 -3 2 3 3 8 -80800.98816032 72008.40724753 -72002.08717528 -3 3 3 1 1 5.93444072 2971.92292054 0.04284795 -3 3 3 1 2 -72069.26204484 -80911.93220816 72059.47128885 -3 3 3 1 3 110.68696015 329276.19235679 0.68556716 -3 3 3 1 4 -72068.94068523 -80911.53586465 -72059.10708130 -3 3 3 1 5 -9.04091690 2954.38739806 -0.66414318 -3 3 3 1 6 72017.40531648 -80799.35993832 -72002.01219137 -3 3 3 1 7 -1.39255829 -11781.28951673 -0.06427192 -3 3 3 1 8 72014.50236805 -80798.67437116 72001.34804819 -3 3 3 2 1 2972.61919968 6.15939244 0.19281576 -3 3 3 2 2 -80912.32855167 -72074.10386290 72059.29989706 -3 3 3 2 3 329275.39966976 139.19155717 0.85695895 -3 3 3 2 4 -80911.87864823 -72073.58968753 -72058.67860183 -3 3 3 2 5 -11779.85411049 -10.71198685 -0.14996782 -3 3 3 2 6 -80800.23832124 72005.37575525 72001.34804819 -3 3 3 2 7 2957.27963451 -0.98550279 -0.67485517 -3 3 3 2 8 -80801.03100827 72008.36439958 -72002.09788727 -3 3 3 3 1 0.62129524 0.04284795 1.09262266 -3 3 3 3 2 67094.78674205 67096.50065995 -74104.17533937 -3 3 3 3 3 3.98485911 0.59987126 -4.52045845 -3 3 3 3 4 -67098.84658507 -67098.38596963 -74104.02537156 -3 3 3 3 5 3.72777142 0.23566371 6.62000788 -3 3 3 3 6 -67033.97479269 67032.44297857 74102.71850916 -3 3 3 3 7 -0.00000000 0.89980690 -0.86767094 -3 3 3 3 8 67029.82925377 -67032.30372274 74103.00773281 -3 1 4 1 1 0.94265484 539.35925004 1559.84738959 -3 1 4 1 2 -0.34278358 -538.98433050 -1559.19395839 -3 1 4 1 3 -74176.69549037 -72097.19890655 -72068.66217357 -3 1 4 1 4 74179.78054258 72098.95567239 72069.56198047 -3 1 4 1 5 -9477.41965629 -3068.34151420 -3066.54190041 -3 1 4 1 6 9473.03845367 3066.28481272 3063.75678383 -3 1 4 1 7 0.89980690 1560.53295675 540.29119290 -3 1 4 1 8 -0.08569589 -1560.72577251 -539.16643428 -3 1 4 2 1 0.57844729 -539.01646646 3074.45805869 -3 1 4 2 2 538.44873116 -0.42847947 -3074.42592273 -3 1 4 2 3 -67122.94855549 -72105.46856040 -80912.30712770 -3 1 4 2 4 72093.73893480 67137.39902575 80911.92149617 -3 1 4 2 5 1.99242955 1559.55816594 3080.27466756 -3 1 4 2 6 -3064.30309516 888.90209304 -92.48729449 -3 1 4 2 7 -889.26630060 3060.01830042 90.38774507 -3 1 4 2 8 -1558.16560765 -0.77126305 -3077.73592667 -3 1 4 3 1 -893.31543163 82.95362619 3055.88347349 -3 1 4 3 2 -1559.40819813 -3074.46877068 -0.42847947 -3 1 4 3 3 -67086.38854436 -80901.01669356 -72061.07808688 -3 1 4 3 4 72064.54877062 80910.14330636 67097.05768326 -3 1 4 3 5 2.20666929 3079.46055655 1557.26580076 -3 1 4 3 6 -3065.64209351 -94.80108365 888.60215741 -3 1 4 3 7 2.63514877 3077.89660647 -536.89549306 -3 1 4 3 8 535.36367894 -3080.22110762 -0.29993563 -3 2 4 1 1 -537.87028387 0.28922365 3074.45805869 -3 2 4 1 2 -1.02835074 537.81672393 -3073.52611584 -3 2 4 1 3 -72094.59589375 -67133.64983035 -80914.49237302 -3 2 4 1 4 67120.01347109 72106.98966253 80913.54971818 -3 2 4 1 5 3068.57717791 -888.49503754 94.60826789 -3 2 4 1 6 -0.65343120 -1558.29415149 -3077.53239892 -3 2 4 1 7 1556.83732128 -0.43919146 3075.20789777 -3 2 4 1 8 888.79497318 -3064.20668728 -92.27305475 -3 2 4 2 1 539.00575447 -0.58915928 1558.46554328 -3 2 4 2 2 -539.00575447 -0.33207159 -1559.20467038 -3 2 4 2 3 -72107.23603823 -74173.80325392 -72073.71823137 -3 2 4 2 4 72102.90839554 74174.06034160 72071.96146553 -3 2 4 2 5 1561.55059550 -1.69249392 537.63462016 -3 2 4 2 6 -1560.68292456 -0.12854384 -539.15572229 -3 2 4 2 7 -3062.74985706 -9470.44615285 -3059.72907677 -3 2 4 2 8 3066.30623670 9473.01702969 3063.77820780 -3 2 4 3 1 83.31783374 -893.60465527 3055.82991356 -3 2 4 3 2 -3074.46877068 -1559.37606217 -0.42847947 -3 2 4 3 3 -80902.91271523 -67090.58764320 -72062.83485273 -3 2 4 3 4 80912.40353558 72071.06165863 67095.81509279 -3 2 4 3 5 3080.87453882 0.08569589 -536.26348584 -3 2 4 3 6 -3080.22110762 535.29940702 -0.27851166 -3 2 4 3 7 3075.90417692 2.62443678 1559.81525363 -3 2 4 3 8 -94.82250762 -3065.60995755 888.58073344 -3 3 4 1 1 1558.67978302 3074.40449876 0.28922365 -3 3 4 1 2 893.42255150 -83.06074606 -3055.91560945 -3 3 4 1 3 -72063.40258803 -80910.85029749 -67097.10053121 -3 3 4 1 4 67082.62863697 80901.74510866 72062.02074173 -3 3 4 1 5 3067.73093095 95.27241107 -887.95943820 -3 3 4 1 6 -2.84938850 -3077.33958316 -1558.14418368 -3 3 4 1 7 -534.67811179 3079.11777297 0.28922365 -3 3 4 1 8 -1.41398226 -3079.41770861 536.58484545 -3 3 4 2 1 3074.55446658 1560.07234131 0.56773530 -3 3 4 2 2 -83.06074606 893.41183951 -3055.93703342 -3 3 4 2 3 -80911.84651227 -72070.09757981 -67095.21522152 -3 3 4 2 4 80901.59514085 67093.32991184 72061.46371841 -3 3 4 2 5 3081.32444227 -535.98497418 0.32135961 -3 3 4 2 6 -3079.41770861 -1.45683021 536.60626942 -3 3 4 2 7 94.24406033 3063.60681601 -889.22345265 -3 3 4 2 8 -3077.31815918 -2.86010049 -1558.18703163 -3 3 4 3 1 -3055.42285806 -3055.26217825 -9478.83363855 -3 3 4 3 2 3056.06557727 3056.03344131 9478.00881557 -3 3 4 3 3 -72067.38744714 -72067.22676734 -74112.38072130 -3 3 4 3 4 72067.00181561 72066.24126455 74113.70900767 -3 3 4 3 5 1555.31621915 538.87721063 -1.69249392 -3 3 4 3 6 -1555.43405100 -538.70581884 1.88530969 -3 3 4 3 7 538.68439487 1555.42333902 -2.52802890 -3 3 4 3 8 -538.68439487 -1555.43405100 1.92815763 -3 1 5 1 1 -0.02142397 0.01071199 -0.12854384 -3 1 5 1 2 9474.64525169 -0.81411100 0.92123087 -3 1 5 1 3 0.09640788 -0.10711987 -8.67670935 -3 1 5 1 4 -9474.69881163 0.89980690 0.89980690 -3 1 5 1 5 0.08569589 0.02142397 13.38998357 -3 1 5 1 6 -9456.28490623 -0.00000000 -3.08505221 -3 1 5 1 7 0.02142397 0.03213596 -0.16067980 -3 1 5 1 8 9456.17778636 0.07498391 -3.09576420 -3 1 5 2 1 0.12854384 0.07498391 -573.11272061 -3 1 5 2 2 3069.58410468 -1560.52224476 3080.36036345 -3 1 5 2 3 0.99621478 -0.64271921 2958.99355240 -3 1 5 2 4 -3069.50912077 1560.52224476 3080.42463537 -3 1 5 2 5 0.88909491 0.55702332 -11775.53717979 -3 1 5 2 6 3057.22247185 1553.23809370 3071.89789384 -3 1 5 2 7 0.23566371 -0.11783186 -2914.66735081 -3 1 5 2 8 -3059.40771717 -1553.18453376 3071.72650205 -3 1 5 3 1 1.99242955 -2913.89608775 -0.04284795 -3 1 5 3 2 -3068.74856970 3081.19589842 -1558.05848778 -3 1 5 3 3 14.17195861 2960.92171004 -0.04284795 -3 1 5 3 4 -3068.69500977 3081.19589842 1558.37984739 -3 1 5 3 5 16.69998750 -11774.25174137 0.02142397 -3 1 5 3 6 3053.10906890 3069.81976839 1560.43654886 -3 1 5 3 7 -1.54252611 -574.69809467 -0.03213596 -3 1 5 3 8 3052.95910108 3069.83048037 -1560.50082079 -3 2 5 1 1 -0.12854384 -0.13925583 -2915.42790187 -3 2 5 1 2 -3069.24132110 -1560.80075642 3081.41013816 -3 2 5 1 3 -0.89980690 0.57844729 -11785.62787141 -3 2 5 1 4 3069.29488103 1560.82218039 3081.23874637 -3 2 5 1 5 -0.93194286 -0.66414318 2965.42074452 -3 2 5 1 6 -3054.05172374 1558.07991176 3073.61181173 -3 2 5 1 7 -0.17139179 0.07498391 -574.35531109 -3 2 5 1 8 3056.21554508 -1558.02635182 3073.75106756 -3 2 5 2 1 0.23566371 0.17139179 0.81411100 -3 2 5 2 2 890.27322736 0.89980690 -0.25708768 -3 2 5 2 3 0.91051888 -0.77126305 -8.41962167 -3 2 5 2 4 -890.25180339 -0.89980690 -0.08569589 -3 2 5 2 5 0.92123087 0.66414318 12.61872051 -3 2 5 2 6 -889.45911636 -0.55702332 -2.31378916 -3 2 5 2 7 0.17139179 -0.08569589 0.37491954 -3 2 5 2 8 887.31671899 0.54631133 -2.52802890 -3 2 5 3 1 -3372.09061341 1.34971034 0.10711987 -3 2 5 3 2 94.02982060 538.23449142 536.43487763 -3 2 5 3 3 2959.25064009 -12.23308899 0.64271921 -3 2 5 3 4 93.96554868 538.25591539 -536.62769339 -3 2 5 3 5 2962.47494813 13.75419112 -0.59987126 -3 2 5 3 6 89.53078612 -539.51992984 536.19921392 -3 2 5 3 7 -2914.66735081 -0.28922365 -0.01071199 -3 2 5 3 8 87.36696477 -539.57348978 -536.02782213 -3 3 5 1 1 0.72841511 -573.03773671 0.17139179 -3 3 5 1 2 3069.26274507 3081.79576969 -1556.45168975 -3 3 5 1 3 -8.98735697 -11786.31343857 0.68556716 -3 3 5 1 4 3069.31630500 3081.62437790 1556.40884181 -3 3 5 1 5 -8.90166107 2963.10695536 -0.66414318 -3 3 5 1 6 -3059.15062948 3074.55446658 1557.39434460 -3 3 5 1 7 -0.94265484 -2915.98492519 -0.07498391 -3 3 5 1 8 -3061.35729877 3074.46877068 -1557.36220864 -3 3 5 2 1 -2915.22437412 -0.32135961 -0.02142397 -3 3 5 2 2 94.71538776 -536.22063789 -538.29876334 -3 3 5 2 3 2957.64384206 -11.84745746 -0.64271921 -3 3 5 2 4 96.90063307 -536.28490981 538.42730718 -3 3 5 2 5 2960.80387818 16.02513233 0.66414318 -3 3 5 2 6 89.70217791 534.78523165 -537.78458797 -3 3 5 2 7 -3374.31870667 -1.07119869 0.09640788 -3 3 5 2 8 89.61648201 534.69953576 537.81672393 -3 3 5 3 1 0.17139179 -0.10711987 2.88152446 -3 3 5 3 2 888.55930946 0.08569589 -2.03527750 -3 3 5 3 3 0.89980690 0.64271921 10.13353956 -3 3 5 3 4 -890.69099485 -0.08569589 -2.27094121 -3 3 5 3 5 0.83553497 -0.66414318 -12.12596912 -3 3 5 3 6 -891.21588220 0.08569589 2.91366042 -3 3 5 3 7 0.17139179 0.05355993 -2.45304499 -3 3 5 3 8 891.32300207 -0.09640788 2.88152446 -3 1 6 1 1 -1.54252611 -536.68125333 -1558.99043064 -3 1 6 1 2 -0.04284795 1558.21916759 536.16707796 -3 1 6 1 3 -74117.21182737 72014.13816049 72010.47466099 -3 1 6 1 4 9473.78829275 -3064.07814343 -3064.99937430 -3 1 6 1 5 -9460.46258110 3056.06557727 3053.38758055 -3 1 6 1 6 74104.98945037 -72006.46837791 -71995.75639105 -3 1 6 1 7 -0.64271921 -1556.90159320 -538.74866679 -3 1 6 1 8 0.98550279 535.57791868 1558.62622309 -3 1 6 2 1 -0.44990345 -537.24898863 3076.66472799 -3 1 6 2 2 1562.06477087 1.86388571 -3081.60295392 -3 1 6 2 3 67024.11976478 -72004.13316477 -80798.58867527 -3 1 6 2 4 3065.93131716 889.26630060 -94.95105147 -3 1 6 2 5 -0.58915928 1552.85246217 3069.32701699 -3 1 6 2 6 -72004.77588398 67036.04220615 80814.39956786 -3 1 6 2 7 889.69478007 3061.36801076 90.54842487 -3 1 6 2 8 -536.00639816 -0.05355993 -3076.03272076 -3 1 6 3 1 888.43076562 91.43751978 3061.92503408 -3 1 6 3 2 -539.92698534 -3079.48198053 0.92123087 -3 1 6 3 3 67030.68621272 -80802.29502272 -72004.69018809 -3 1 6 3 4 3064.37807907 -92.42302257 889.48054033 -3 1 6 3 5 -1.83174975 3072.69058086 1561.12211602 -3 1 6 3 6 -72000.35183341 80809.42920596 67027.49404064 -3 1 6 3 7 0.72841511 3077.75735064 -536.42416564 -3 1 6 3 8 1557.84424805 -3077.17890335 0.23566371 -3 2 6 1 1 537.87028387 0.08569589 3076.40764030 -3 2 6 1 2 -889.22345265 -3065.89918120 -94.94033948 -3 2 6 1 3 72016.49479760 -67015.92509484 -80800.02408151 -3 2 6 1 4 -1.84246174 -1562.02192292 -3081.58152995 -3 2 6 1 5 -3053.48398844 -891.62293770 85.99583046 -3 2 6 1 6 -67052.13161040 71998.99141108 80813.84254455 -3 2 6 1 7 -1557.71570420 0.36420755 3076.20411255 -3 2 6 1 8 0.02142397 536.01711014 -3076.08628070 -3 2 6 2 1 537.39895645 -0.02142397 -1560.56509271 -3 2 6 2 2 3064.72086264 -9472.85634989 -3065.58853358 -3 2 6 2 3 -72000.95170468 74114.99444610 72002.82630238 -3 2 6 2 4 -1558.27272752 0.23566371 535.98497418 -3 2 6 2 5 1557.82282407 -0.85695895 -540.14122508 -3 2 6 2 6 71996.82758974 -74107.02472788 -71992.24285936 -3 2 6 2 7 -3061.95717004 9466.34346188 3060.99309122 -3 2 6 2 8 -535.49222279 -0.82482299 1558.73334295 -3 2 6 3 1 91.03046428 888.21652588 -3061.74293030 -3 2 6 3 2 -92.85150204 3063.33901634 -888.75212523 -3 2 6 3 3 -80804.00894062 67030.08634146 72004.54022027 -3 2 6 3 4 -3078.46434178 -539.39138600 -0.17139179 -3 2 6 3 5 3073.79391551 -2.31378916 536.32775776 -3 2 6 3 6 80810.84318823 -71997.40603703 -67030.32200517 -3 2 6 3 7 3076.76113587 -0.42847947 -1559.37606217 -3 2 6 3 8 -3077.12534342 1557.79068811 -0.36420755 -3 3 6 1 1 -1559.85810157 3077.32887117 -0.18210378 -3 3 6 1 2 -1.37113432 -3078.00372634 538.37374725 -3 3 6 1 3 72014.83443964 -80797.34608479 -67034.79961567 -3 3 6 1 4 -2.93508440 -3080.29609153 -1556.92301718 -3 3 6 1 5 -3058.51862226 89.83072175 -892.22280897 -3 3 6 1 6 -67037.15625278 80804.56596393 72006.40410598 -3 3 6 1 7 536.04924610 3077.12534342 -0.65343120 -3 3 6 1 8 -890.85167465 -93.22642158 -3060.23254015 -3 3 6 2 1 3077.03964753 -1558.29415149 0.54631133 -3 3 6 2 2 -3080.44605934 -2.87081248 1556.85874526 -3 3 6 2 3 -80795.49291107 72009.21064654 67037.41334046 -3 3 6 2 4 -3078.90353324 -1.94958161 -538.98433050 -3 3 6 2 5 3073.93317134 534.22820834 -0.04284795 -3 3 6 2 6 80805.85140235 -67027.64400845 -72006.31841009 -3 3 6 2 7 91.37324786 -3061.65723440 890.20895544 -3 3 6 2 8 -93.40852536 -890.94808253 3060.32894803 -3 3 6 3 1 -3063.00694475 3064.00315953 9468.50728323 -3 3 6 3 2 -536.37060571 1559.31179024 2.42090903 -3 3 6 3 3 -71999.58057036 72000.59820911 74099.69772887 -3 3 6 3 4 -1559.31179024 536.32775776 2.39948506 -3 3 6 3 5 1559.54745396 -535.96355021 3.94201116 -3 3 6 3 6 71998.74503538 -72005.93277856 -74113.02344051 -3 3 6 3 7 538.57727500 -1556.96586512 1.48896617 -3 3 6 3 8 3061.33587480 -3061.36801076 -9465.39009505 -3 1 7 1 1 0.06427192 -0.04284795 0.64271921 -3 1 7 1 2 -0.57844729 889.00921291 2.39948506 -3 1 7 1 3 0.08569589 0.06427192 -2.20666929 -3 1 7 1 4 0.55702332 -889.05206086 2.14239737 -3 1 7 1 5 -0.06427192 0.10711987 -1.92815763 -3 1 7 1 6 -0.83553497 888.60215741 0.21423974 -3 1 7 1 7 0.02142397 -0.04284795 -1.92815763 -3 1 7 1 8 0.85695895 -888.62358139 0.24637570 -3 1 7 2 1 0.06427192 0.18210378 -2915.08511829 -3 1 7 2 2 -1561.33635576 -3058.27224656 3077.57524687 -3 1 7 2 3 -0.62129524 0.87838292 -11783.14269046 -3 1 7 2 4 1561.35777973 3058.22939861 3077.85375853 -3 1 7 2 5 -0.09640788 0.10711987 -574.86948646 -3 1 7 2 6 -1557.37292062 3060.80027546 3077.38243110 -3 1 7 2 7 0.66414318 0.92123087 2962.94627555 -3 1 7 2 8 1557.39434460 -3063.01765673 3077.44670303 -3 1 7 3 1 0.70699113 -3372.07990142 -0.01071199 -3 1 7 3 2 539.79844150 91.80172733 536.58484545 -3 1 7 3 3 -3.94201116 2960.30041480 0.04284795 -3 1 7 3 4 539.83057746 91.84457528 -536.71338929 -3 1 7 3 5 -0.16067980 -2914.49595902 -0.04284795 -3 1 7 3 6 -538.06309963 89.42366625 -536.02782213 -3 1 7 3 7 -0.25708768 2963.38546701 -0.07498391 -3 1 7 3 8 -537.93455579 89.63790599 536.14565398 -3 2 7 1 1 -0.08569589 -0.19281576 -573.42336823 -3 2 7 1 2 -1556.45168975 3063.52112012 3075.66851321 -3 2 7 1 3 0.68556716 -0.96407882 2957.90092975 -3 2 7 1 4 1556.47311373 -3063.56396806 3075.96844884 -3 2 7 1 5 0.07498391 -0.17139179 -2914.53880696 -3 2 7 1 6 -1557.33007268 -3061.10021109 3076.35408037 -3 2 7 1 7 -0.62129524 -0.88909491 -11774.32672528 -3 2 7 1 8 1557.15868089 3063.25332045 3076.33265639 -3 2 7 2 1 -0.02142397 -0.03213596 0.66414318 -3 2 7 2 2 -0.08569589 9468.73223495 2.97793235 -3 2 7 2 3 -0.03213596 -0.02142397 -3.83489129 -3 2 7 2 4 0.12854384 -9468.68938700 2.78511658 -3 2 7 2 5 0.04284795 0.12854384 -0.32135961 -3 2 7 2 6 0.66414318 9468.71081098 -0.94265484 -3 2 7 2 7 -0.02142397 0.02142397 -0.93194286 -3 2 7 2 8 -0.79268703 -9468.67867502 -0.98550279 -3 2 7 3 1 -2913.78896788 0.06427192 0.02142397 -3 2 7 3 2 3074.98294605 -3058.85069385 -1559.68670978 -3 2 7 3 3 2960.15044698 -1.92815763 0.64271921 -3 2 7 3 4 3075.04721797 -3058.87211782 1559.45104607 -3 2 7 3 5 -574.76236659 0.32135961 -0.06427192 -3 2 7 3 6 3076.13984063 3060.54318777 -1559.36535018 -3 2 7 3 7 -11773.78041395 -4.17767487 -0.74983908 -3 2 7 3 8 3076.07556871 3062.82484097 1559.31179024 -3 3 7 1 1 0.85695895 -2914.62450286 0.04284795 -3 3 7 1 2 -534.87092755 92.03739104 -538.27733937 -3 3 7 1 3 -1.67106995 2960.27899083 -0.04284795 -3 3 7 1 4 -534.94591146 91.97311912 538.34161129 -3 3 7 1 5 -1.04977471 -3373.78310733 0.02142397 -3 3 7 1 6 535.89927829 90.40916904 537.91313182 -3 3 7 1 7 -0.00000000 2963.53543483 -0.02142397 -3 3 7 1 8 535.89927829 90.32347315 -537.87028387 -3 3 7 2 1 -573.45550419 1.02835074 -0.13925583 -3 3 7 2 2 3079.56767642 3062.94267283 -1556.38741783 -3 3 7 2 3 -11783.83896960 -0.87838292 -0.70699113 -3 3 7 2 4 3079.59981238 3062.98552077 1556.15175412 -3 3 7 2 5 -2915.63142962 -0.53559934 -0.00000000 -3 3 7 2 6 3076.56832010 -3061.07878711 -1557.18010486 -3 3 7 2 7 2960.57892646 -0.73912709 0.62129524 -3 3 7 2 8 3076.58974408 -3063.37115230 1557.19081685 -3 3 7 3 1 -0.02142397 -0.03213596 2.19595730 -3 3 7 3 2 0.19281576 890.91594657 -2.84938850 -3 3 7 3 3 -0.05355993 -0.00000000 4.77754614 -3 3 7 3 4 -0.10711987 -890.74455478 -2.78511658 -3 3 7 3 5 0.02142397 0.02142397 -2.48518095 -3 3 7 3 6 -0.14996782 888.96636496 1.97100558 -3 3 7 3 7 0.04284795 -0.01071199 -2.77440459 -3 3 7 3 8 0.08569589 -888.95565298 2.00314154 -3 1 8 1 1 1.22116650 536.49914955 -1559.18324640 -3 1 8 1 2 -9472.84563790 3064.68872668 -3065.65280550 -3 1 8 1 3 74113.44120800 -72013.13123373 72009.44631025 -3 1 8 1 4 0.21423974 -1558.31557547 535.98497418 -3 1 8 1 5 9458.56655943 -3057.37243966 3054.60874706 -3 1 8 1 6 -0.85695895 -535.44937484 1558.82975084 -3 1 8 1 7 0.23566371 1557.07298499 -538.60941096 -3 1 8 1 8 -74099.91196861 72006.06132240 -71995.43503145 -3 1 8 2 1 0.23566371 537.18471671 3076.51476017 -3 1 8 2 2 -3065.85633325 -889.27701258 -94.91891551 -3 1 8 2 3 -67025.19096347 72004.77588398 -80799.06000269 -3 1 8 2 4 -1562.04334689 -1.84246174 -3081.53868200 -3 1 8 2 5 -0.31064762 -1553.47375741 3069.92688826 -3 1 8 2 6 536.00639816 0.06427192 -3076.07556871 -3 1 8 2 7 -889.84474789 -3061.26089089 90.63412076 -3 1 8 2 8 72006.98255327 -67036.17074999 80814.66736753 -3 1 8 3 1 888.38791767 91.38395984 -3061.93574606 -3 1 8 3 2 3063.32830435 -92.83007807 -888.75212523 -3 1 8 3 3 67032.96786592 -80804.43742009 72004.60449219 -3 1 8 3 4 -539.45565792 -3078.47505376 -0.21423974 -3 1 8 3 5 -1.83174975 3072.75485278 -1561.20781192 -3 1 8 3 6 1557.79068811 -3077.12534342 -0.47132742 -3 1 8 3 7 0.74983908 3077.77877462 536.42416564 -3 1 8 3 8 -72001.94791945 80810.93959611 -67028.77947906 -3 2 8 1 1 -537.89170784 -0.11783186 3076.42906427 -3 2 8 1 2 1.79961379 1562.04334689 -3081.61366591 -3 2 8 1 3 -72016.45194965 67015.98936676 -80800.19547330 -3 2 8 1 4 889.26630060 3065.87775722 -94.95105147 -3 2 8 1 5 3053.47327645 891.66578565 85.93155854 -3 2 8 1 6 -0.04284795 -536.00639816 -3076.05414473 -3 2 8 1 7 1557.71570420 -0.34278358 3076.19340056 -3 2 8 1 8 67052.13161040 -71999.02354704 80814.09963223 -3 2 8 2 1 -537.46322837 -0.18210378 -1560.51153277 -3 2 8 2 2 1558.16560765 -0.06427192 536.11351802 -3 2 8 2 3 72001.62655985 -74118.18661818 72003.29762980 -3 2 8 2 4 -3064.07814343 9473.76686877 -3064.91367841 -3 2 8 2 5 -1557.73712818 0.66414318 -540.16264905 -3 2 8 2 6 535.57791868 0.96407882 1558.59408713 -3 2 8 2 7 3061.29302685 -9467.27540474 3060.36108400 -3 2 8 2 8 -71997.44888498 74110.18476400 -71992.83201864 -3 2 8 3 1 91.15900812 888.32364575 3061.85005017 -3 2 8 3 2 -3079.48198053 -539.83057746 0.89980690 -3 2 8 3 3 -80800.89175244 67027.19410501 -72003.70468530 -3 2 8 3 4 -92.35875065 3064.35665509 889.48054033 -3 2 8 3 5 3074.72585837 -1.64964598 -536.92762902 -3 2 8 3 6 -3077.16819137 1557.82282407 0.27851166 -3 2 8 3 7 3076.97537560 -0.46061543 1559.29036627 -3 2 8 3 8 80807.07256886 -71995.79923900 67028.83303900 -3 3 8 1 1 -1559.83667760 3077.32887117 0.14996782 -3 3 8 1 2 -2.84938850 -3080.47819531 1556.83732128 -3 3 8 1 3 72014.72731977 -80795.37507921 67034.92815952 -3 3 8 1 4 -1.97100558 -3078.90353324 -539.02717845 -3 3 8 1 5 -3058.50791027 89.78787380 892.22280897 -3 3 8 1 6 -890.95879452 -93.45137331 3060.37179598 -3 3 8 1 7 536.02782213 3077.09320746 0.65343120 -3 3 8 1 8 -67036.74919728 80803.78398889 -72005.93277856 -3 3 8 2 1 3077.21103932 -1558.18703163 -0.43919146 -3 3 8 2 2 -3077.98230237 -1.36042233 538.37374725 -3 3 8 2 3 -80796.64980565 72008.82501501 -67036.85631715 -3 3 8 2 4 -3080.28537954 -2.93508440 -1556.92301718 -3 3 8 2 5 3074.86511419 534.95662344 -0.62129524 -3 3 8 2 6 -93.24784556 -890.87309862 -3060.30752406 -3 3 8 2 7 91.48036773 -3061.79649023 -890.29465133 -3 3 8 2 8 80804.67308380 -67028.64022323 72007.03611321 -3 3 8 3 1 3063.17833654 -3063.88532767 9468.58226714 -3 3 8 3 2 1559.32250223 -536.33846975 2.41019704 -3 3 8 3 3 72000.45895328 -72001.15523243 74100.55468782 -3 3 8 3 4 536.33846975 -1559.30107826 2.39948506 -3 3 8 3 5 -1558.66907103 536.62769339 3.29929195 -3 3 8 3 6 -3061.37872275 3061.33587480 -9465.34724711 -3 3 8 3 7 -538.36303526 1556.91230519 1.42469425 -3 3 8 3 8 -72000.83387282 72005.80423472 -74113.00201654 -4 1 1 1 1 74175.26008413 72107.09678240 -72075.07865370 -4 1 1 1 2 0.32135961 539.16643428 -1559.26894230 -4 1 1 1 3 0.42847947 -538.62012295 1558.20845560 -4 1 1 1 4 -74173.53545425 -72106.60403101 72071.34017029 -4 1 1 1 5 0.37491954 -1559.70813376 538.92005858 -4 1 1 1 6 -9472.92062181 -3066.09199696 3063.86390370 -4 1 1 1 7 9470.53184874 3063.13548859 -3059.60053293 -4 1 1 1 8 -0.53559934 1561.58273146 -538.52371507 -4 1 1 2 1 72106.62545498 67123.79480245 -80913.06767877 -4 1 1 2 2 0.42847947 -538.47015513 -3074.44734671 -4 1 1 2 3 539.15572229 -0.66414318 3074.42592273 -4 1 1 2 4 -67139.60569504 -72093.92103857 80911.96434412 -4 1 1 2 5 -1559.39748614 -1.84246174 3080.44605934 -4 1 1 2 6 0.73912709 1558.20845560 -3077.74663866 -4 1 1 2 7 -3059.08635756 888.61286940 90.98761633 -4 1 1 2 8 -888.92351702 3064.33523112 -92.48729449 -4 1 1 3 1 -72073.35402382 -80911.05382524 67094.51894238 -4 1 1 3 2 893.78675905 -83.22142586 3055.75492965 -4 1 1 3 3 1560.28658105 3074.42592273 -0.59987126 -4 1 1 3 4 67092.82644846 80902.68776351 -72062.34210133 -4 1 1 3 5 -535.78144643 3081.38871419 -0.23566371 -4 1 1 3 6 -1.06048670 -3078.64644555 1559.47247005 -4 1 1 3 7 3064.50662291 93.62276510 889.83403590 -4 1 1 3 8 -1.09262266 -3079.24631682 -536.45630160 -4 2 1 1 1 67134.29254956 72094.91725335 -80912.69275923 -4 2 1 1 2 -538.47015513 0.42847947 -3074.43663472 -4 2 1 1 3 -0.10711987 537.82743592 3074.38307479 -4 2 1 1 4 -72108.24296500 -67119.16722413 80912.73560717 -4 2 1 1 5 888.66642933 -3068.42721010 94.71538776 -4 2 1 1 6 3064.30309516 -888.88066907 -92.46587052 -4 2 1 1 7 1.39255829 -1557.45861652 3075.88275295 -4 2 1 1 8 1558.18703163 0.74983908 -3077.70379071 -4 2 1 2 1 72092.97838373 74174.46739710 -72066.57333614 -4 2 1 2 2 539.17714626 0.26779967 -1559.32250223 -4 2 1 2 3 -539.41280997 -1.19974253 1560.13661323 -4 2 1 2 4 -72096.06343594 -74174.89587658 72068.94068523 -4 2 1 2 5 3069.44484885 9475.43793872 -3067.95588267 -4 2 1 2 6 1561.55059550 -0.47132742 -538.57727500 -4 2 1 2 7 -1561.63629139 -0.63200722 539.44494594 -4 2 1 2 8 -3066.07057299 -9472.96346976 3063.83176774 -4 2 1 3 1 -80907.35818977 -72066.79828786 67095.99719656 -4 2 1 3 2 -83.44637759 893.85103097 3055.82991356 -4 2 1 3 3 3074.57589055 1558.59408713 -0.38563153 -4 2 1 3 4 80899.66698321 67083.49630791 -72062.04216570 -4 2 1 3 5 95.48665081 3067.78449088 888.02371012 -4 2 1 3 6 -3080.15683570 -0.42847947 -537.14186876 -4 2 1 3 7 3080.03900384 -535.31011901 0.35349557 -4 2 1 3 8 -3078.79641337 -1.14618259 1559.37606217 -4 3 1 1 1 -67090.78045897 -80901.40232508 72062.95268458 -4 3 1 1 2 -1559.30107826 -3074.61873850 0.52488736 -4 3 1 1 3 -893.34756759 83.01789811 -3055.87276150 -4 3 1 1 4 72068.69430953 80914.12816547 -67095.10810166 -4 3 1 1 5 0.92123087 3079.99615590 535.68503855 -4 3 1 1 6 -3065.71707742 -94.95105147 -888.64500536 -4 3 1 1 7 3.44925977 3075.04721797 -1559.22609435 -4 3 1 1 8 536.00639816 -3081.11020253 -0.34278358 -4 3 1 2 1 -80900.84530177 -67087.74896669 72062.40637325 -4 3 1 2 2 -3074.61873850 -1559.29036627 0.52488736 -4 3 1 2 3 82.62155460 -893.18688778 -3055.78706561 -4 3 1 2 4 80913.74253394 72064.01317128 -67096.69347571 -4 3 1 2 5 3079.08563701 2.01385353 -1557.41576857 -4 3 1 2 6 -3081.14233849 536.00639816 -0.32135961 -4 3 1 2 7 3076.09699268 3.89916321 535.63147862 -4 3 1 2 8 -94.95105147 -3065.72778941 -888.64500536 -4 3 1 3 1 72061.67795815 72062.13857358 -74113.49476794 -4 3 1 3 2 -3055.20861832 -3055.20861832 9478.51227895 -4 3 1 3 3 3055.10149845 3055.57282587 -9478.69438273 -4 3 1 3 4 -72061.52799033 -72064.27025896 74111.50233838 -4 3 1 3 5 -539.02717845 -1555.40191504 -1.75676584 -4 3 1 3 6 1557.40505658 537.82743592 3.59922758 -4 3 1 3 7 -1556.30172194 -538.08452360 -3.13861215 -4 3 1 3 8 537.82743592 1557.40505658 3.58851560 -4 1 2 1 1 -0.02142397 -0.00000000 897.49310650 -4 1 2 1 2 -0.81411100 0.51417537 -5.49524926 -4 1 2 1 3 -0.02142397 -0.00000000 897.62165034 -4 1 2 1 4 0.84624696 -0.47132742 -5.44168932 -4 1 2 1 5 0.04284795 -0.04284795 -895.17931734 -4 1 2 1 6 0.01071199 -0.29993563 -1.32828637 -4 1 2 1 7 -0.04284795 -0.08569589 -886.63115183 -4 1 2 1 8 0.04284795 0.32135961 -1.24259047 -4 1 2 2 1 538.64154692 -538.57727500 -82.99647414 -4 1 2 2 2 1.47825419 -5.47382528 -2969.45916356 -4 1 2 2 3 -538.74866679 538.72724282 -83.03932209 -4 1 2 2 4 -5.47382528 1.56395008 -2969.46987555 -4 1 2 2 5 540.20549700 540.18407303 -80.89692471 -4 1 2 2 6 -0.73912709 -0.81411100 2913.96035967 -4 1 2 2 7 -535.70646252 -535.55649471 -99.87856542 -4 1 2 2 8 0.17139179 0.17139179 3371.86566168 -4 1 2 3 1 -1559.79382965 -3074.91867413 3058.48648630 -4 1 2 3 2 -5.03463382 -2969.84479509 -1.70320591 -4 1 2 3 3 -1559.77240568 -3074.89725015 -3056.17269714 -4 1 2 3 4 8.11968603 11785.02800014 -7.17703119 -4 1 2 3 5 1560.88645231 -3075.17576181 -3060.02901240 -4 1 2 3 6 -0.04284795 573.30553638 1.07119869 -4 1 2 3 7 1556.49453770 -3078.68929350 3064.50662291 -4 1 2 3 8 -0.77126305 2915.25651008 0.87838292 -4 2 2 1 1 -538.59869897 538.62012295 -83.01789811 -4 2 2 1 2 5.50596124 -1.55323809 -2969.43773959 -4 2 2 1 3 538.70581884 -538.64154692 -83.08217003 -4 2 2 1 4 -1.58537405 5.39884137 -2969.44845157 -4 2 2 1 5 -540.24834495 -540.22692098 -80.89692471 -4 2 2 1 6 -0.09640788 -0.06427192 3371.94064559 -4 2 2 1 7 535.51364676 535.59934265 -99.79286952 -4 2 2 1 8 0.74983908 0.83553497 2914.00320762 -4 2 2 2 1 -0.02142397 -0.06427192 897.40741060 -4 2 2 2 2 -0.49275140 0.79268703 -5.40955336 -4 2 2 2 3 0.06427192 0.04284795 897.57880239 -4 2 2 2 4 0.54631133 -0.83553497 -5.44168932 -4 2 2 2 5 0.04284795 0.02142397 -895.00792555 -4 2 2 2 6 -0.27851166 0.02142397 -1.17831855 -4 2 2 2 7 0.06427192 -0.04284795 -886.60972786 -4 2 2 2 8 0.27851166 -0.03213596 -1.14618259 -4 2 2 3 1 -3074.89725015 -1559.75098171 3058.22939861 -4 2 2 3 2 -2969.74838720 -5.06676978 -0.14996782 -4 2 2 3 3 -3075.02579400 -1559.75098171 -3056.17269714 -4 2 2 3 4 11784.94230425 8.09826206 5.29172151 -4 2 2 3 5 -3075.17576181 1560.86502834 3060.02901240 -4 2 2 3 6 2915.24579810 -0.68556716 -1.32828637 -4 2 2 3 7 -3078.66786953 1556.58023360 -3064.39950304 -4 2 2 3 8 573.24126446 -0.14996782 -1.51039015 -4 3 2 1 1 -1559.79382965 -3074.85440221 -3058.35794245 -4 3 2 1 2 8.76240525 11785.57431147 6.13796847 -4 3 2 1 3 -1559.77240568 -3074.85440221 3058.35794245 -4 3 2 1 4 -5.72020098 -2970.47680231 0.81411100 -4 3 2 1 5 1560.84360436 -3075.11148989 3059.85762061 -4 3 2 1 6 -0.85695895 2915.35291796 -0.98550279 -4 3 2 1 7 1556.58023360 -3078.71071747 -3064.50662291 -4 3 2 1 8 0.02142397 573.13414459 -1.26401445 -4 3 2 2 1 -3074.89725015 -1559.81525363 -3058.33651848 -4 3 2 2 2 11785.67071936 8.88023710 -6.14868045 -4 3 2 2 3 -3074.96152208 -1559.77240568 3058.35794245 -4 3 2 2 4 -2970.55178622 -5.72020098 -0.79268703 -4 3 2 2 5 -3075.17576181 1560.77933244 -3059.85762061 -4 3 2 2 6 573.15556856 -0.00000000 1.26401445 -4 3 2 2 7 -3078.62502158 1556.55880962 3064.46377496 -4 3 2 2 8 2915.31007002 -0.82482299 1.09262266 -4 3 2 3 1 0.02142397 0.04284795 9477.92311967 -4 3 2 3 2 10.06926764 -8.89094909 -7.55195073 -4 3 2 3 3 0.02142397 0.06427192 9480.19406088 -4 3 2 3 4 -10.10140360 8.80525319 -7.64835861 -4 3 2 3 5 -0.02142397 -0.00000000 -9481.99367468 -4 3 2 3 6 -1.34971034 -1.15689458 -2.89223645 -4 3 2 3 7 0.02142397 -0.02142397 -9454.99946781 -4 3 2 3 8 1.37113432 1.27472644 -2.92437241 -4 1 3 1 1 1.11404663 539.33782607 1559.91166151 -4 1 3 1 2 -0.98550279 -539.63776170 -1558.30486348 -4 1 3 1 3 -74175.68856360 -72096.66330721 -72070.11900379 -4 1 3 1 4 74178.28086442 72099.64123955 72070.54748326 -4 1 3 1 5 -9476.48771343 -3068.94138546 -3067.31316346 -4 1 3 1 6 9473.11343757 3066.24196478 3063.99244754 -4 1 3 1 7 1.11404663 1560.60794065 540.18407303 -4 1 3 1 8 -0.23566371 -1560.57580469 -539.02717845 -4 1 3 2 1 -537.97740374 0.28922365 3074.46877068 -4 1 3 2 2 -1.09262266 537.79529996 -3073.51540385 -4 1 3 2 3 -72094.52090984 -67133.64983035 -80914.36382918 -4 1 3 2 4 67120.10987897 72106.92539061 80913.67826202 -4 1 3 2 5 3068.55575394 -888.51646152 94.58684391 -4 1 3 2 6 -0.68556716 -1558.31557547 -3077.59667084 -4 1 3 2 7 1556.83732128 -0.44990345 3075.21860976 -4 1 3 2 8 888.79497318 -3064.20668728 -92.28376674 -4 1 3 3 1 1558.65835905 3074.39378677 0.33207159 -4 1 3 3 2 893.40112752 -83.06074606 -3055.92632144 -4 1 3 3 3 -72063.34902810 -80910.63605775 -67096.92913942 -4 1 3 3 4 67082.62863697 80901.68083674 72061.67795815 -4 1 3 3 5 3067.69879499 95.29383505 -887.95943820 -4 1 3 3 6 -2.87081248 -3077.38243110 -1558.18703163 -4 1 3 3 7 -534.67811179 3079.12848496 0.28922365 -4 1 3 3 8 -1.41398226 -3079.39628463 536.61698141 -4 2 3 1 1 0.44990345 -538.82365070 3074.52233062 -4 2 3 1 2 537.61319618 -0.99621478 -3073.61181173 -4 2 3 1 3 -67120.24913480 -72104.89011311 -80914.06389354 -4 2 3 1 4 72093.68537486 67135.27805235 80912.26427975 -4 2 3 1 5 2.02456552 1559.72955773 3080.16754769 -4 2 3 1 6 -3065.11720616 889.43769239 -91.65175952 -4 2 3 1 7 -889.90901981 3060.92881930 89.74502586 -4 2 3 1 8 -1558.44411931 -0.73912709 -3077.48955097 -4 2 3 2 1 538.83436268 -0.52488736 1558.35842341 -4 2 3 2 2 -539.51992984 -1.10333465 -1558.17631964 -4 2 3 2 3 -72110.97452164 -74174.93872452 -72077.06037127 -4 2 3 2 4 72107.21461426 74175.66713963 72073.84677521 -4 2 3 2 5 1560.61865264 -1.07119869 538.29876334 -4 2 3 2 6 -1559.64386184 -0.85695895 -539.69132163 -4 2 3 2 7 -3062.98552077 -9470.47828881 -3059.66480485 -4 2 3 2 8 3066.37050862 9473.19913347 3063.87461568 -4 2 3 3 1 3074.61873850 1560.09376528 0.57844729 -4 2 3 3 2 -83.10359401 893.41183951 -3055.90489746 -4 2 3 3 3 -80911.79295233 -72070.01188392 -67095.21522152 -4 2 3 3 4 80901.47730899 67093.20136800 72061.07808688 -4 2 3 3 5 3081.31373028 -535.96355021 0.29993563 -4 2 3 3 6 -3079.41770861 -1.41398226 536.58484545 -4 2 3 3 7 94.20121239 3063.58539204 -889.24487662 -4 2 3 3 8 -3077.36100713 -2.88152446 -1558.19774361 -4 3 3 1 1 -893.35827957 82.96433818 3055.88347349 -4 3 3 1 2 -1559.57958992 -3074.39378677 -0.48203941 -4 3 3 1 3 -67084.21401103 -80901.08096548 -72060.94954304 -4 3 3 1 4 72063.67038770 80909.58628304 67096.45781200 -4 3 3 1 5 2.21738128 3079.48198053 1557.20152883 -4 3 3 1 6 -3066.55261240 -94.17978841 889.22345265 -4 3 3 1 7 2.67799671 3077.90731846 -536.87406909 -4 3 3 1 8 535.10659126 -3080.32822749 -0.23566371 -4 3 3 2 1 83.51064951 -893.69035117 3055.93703342 -4 3 3 2 2 -3074.40449876 -1559.57958992 -0.48203941 -4 3 3 2 3 -80901.88436449 -67087.65255881 -72061.63511020 -4 3 3 2 4 80909.41489125 72070.16185173 67094.65819821 -4 3 3 2 5 3081.80648168 -0.59987126 -536.92762902 -4 3 3 2 6 -3080.32822749 535.17086318 -0.27851166 -4 3 3 2 7 3076.03272076 2.72084466 1559.70813376 -4 3 3 2 8 -94.15836444 -3066.55261240 889.20202868 -4 3 3 3 1 -3055.52997792 -3055.10149845 -9478.78007862 -4 3 3 3 2 3055.93703342 3055.92632144 9477.76243987 -4 3 3 3 3 -72064.25954698 -72063.75608360 -74111.05243493 -4 3 3 3 4 72065.14864189 72062.25640544 74111.86654593 -4 3 3 3 5 1555.38049107 539.07002640 -1.69249392 -4 3 3 3 6 -1556.44097777 -538.29876334 2.63514877 -4 3 3 3 7 538.12737155 1556.36599386 -3.14932413 -4 3 3 3 8 -538.29876334 -1556.44097777 2.61372479 -4 1 4 1 1 -74167.86881320 -67132.10730425 67088.54165371 -4 1 4 1 2 2.12097340 -5.62379310 7.29486305 -4 1 4 1 3 74174.06034160 67119.38146386 67080.43267967 -4 1 4 1 4 -115.00389085 213.51132196 -123.83056802 -4 1 4 1 5 74170.60036985 -67112.39724844 -67088.53094173 -4 1 4 1 6 -1.14618259 3.74919540 -8.50531756 -4 1 4 1 7 -74062.48428654 66921.46679477 -66963.46849522 -4 1 4 1 8 -0.36420755 -7.75547848 8.25894186 -4 1 4 2 1 -72109.04636401 -72098.14156139 80899.57057533 -4 1 4 2 2 -1.04977471 2.06741346 11786.03492691 -4 1 4 2 3 72098.14156139 72106.94681459 80899.83837500 -4 1 4 2 4 224.35185265 -222.12375939 -329275.61390950 -4 1 4 2 5 -72115.45213215 72109.00351606 80901.80938058 -4 1 4 2 6 1.77818982 2.80654056 -2957.25821053 -4 1 4 2 7 71902.15504993 -71902.15504993 80705.06231805 -4 1 4 2 8 -0.74983908 1.71391790 -2959.42203188 -4 1 4 3 1 72071.85434566 80911.31091292 -72063.58469181 -4 1 4 3 2 -5.01320985 -2970.33754648 -6.90923152 -4 1 4 3 3 72067.01252760 80914.34240520 72060.00688820 -4 1 4 3 4 -122.05237820 -329280.77708716 -108.19106722 -4 1 4 3 5 -72081.31303005 80900.65248600 72062.59918902 -4 1 4 3 6 6.70570377 -2956.65833927 -0.27851166 -4 1 4 3 7 -71944.31743018 80700.02768423 -71944.98157337 -4 1 4 3 8 7.02706338 11781.39663660 1.52110213 -4 2 4 1 1 -72109.41057156 -72098.72000868 80899.81695103 -4 2 4 1 2 -0.42847947 1.36042233 11785.11369604 -4 2 4 1 3 72098.07728947 72106.58260703 80899.66698321 -4 2 4 1 4 223.35563787 -219.03870717 -329277.49921918 -4 2 4 1 5 -72115.58067599 72108.76785235 80901.98077237 -4 2 4 1 6 1.69249392 2.72084466 -2957.42960232 -4 2 4 1 7 71903.05485683 -71903.27980855 80708.00811444 -4 2 4 1 8 -0.79268703 1.81032578 -2959.59342367 -4 2 4 2 1 -67118.22456928 -74175.37791599 67079.97206423 -4 2 4 2 2 5.48453727 -1.55323809 7.11275927 -4 2 4 2 3 67135.19235646 74168.57580433 67091.05897063 -4 2 4 2 4 -220.20631374 114.48971549 -124.04480776 -4 2 4 2 5 67118.71732068 -74169.04713176 -67089.64498836 -4 2 4 2 6 6.95207947 0.57844729 6.55573595 -4 2 4 2 7 -66924.08051956 74057.52463663 -66964.67894973 -4 2 4 2 8 -3.83489129 4.91680197 -6.14868045 -4 2 4 3 1 80912.67133525 72070.05473187 -72065.10579394 -4 2 4 3 2 -2970.15544271 -4.95964991 10.48703513 -4 2 4 3 3 80912.01790406 72068.21227013 72057.73594698 -4 2 4 3 4 -329277.20999554 -122.99503305 112.11165440 -4 2 4 3 5 80896.86044266 -72079.95260772 -72061.65653417 -4 2 4 3 6 11782.30715548 7.66978259 1.11404663 -4 2 4 3 7 80700.12409211 -71944.87445350 71945.33506893 -4 2 4 3 8 -2956.48694748 6.60929589 -0.02142397 -4 3 4 1 1 72071.68295387 80911.37518484 -72063.56326783 -4 3 4 1 2 -4.97036190 -2970.33754648 -6.88780755 -4 3 4 1 3 72066.86255978 80914.12816547 72059.62125667 -4 3 4 1 4 -122.02024224 -329280.15579192 -108.46957887 -4 3 4 1 5 -72081.28089409 80900.58821408 72062.81342875 -4 3 4 1 6 6.69499178 -2956.65833927 -0.21423974 -4 3 4 1 7 -71943.97464660 80699.85629244 -71944.61736582 -4 3 4 1 8 7.09133530 11781.30022872 1.48896617 -4 3 4 2 1 80912.49994346 72069.87262809 -72065.06294599 -4 3 4 2 2 -2970.11259476 -4.95964991 10.51917109 -4 3 4 2 3 80912.02861604 72068.21227013 72057.77879493 -4 3 4 2 4 -329277.27426746 -122.84506523 111.29754340 -4 3 4 2 5 80896.81759471 -72079.84548785 -72061.42087046 -4 3 4 2 6 11782.24288356 7.77690246 0.96407882 -4 3 4 2 7 80700.35975583 -71944.96014939 71945.57073265 -4 3 4 2 8 -2956.50837145 6.59858390 -0.09640788 -4 3 4 3 1 -67096.30784418 -67097.92535420 74105.35365793 -4 3 4 3 2 4.34906666 -1.46754220 -7.12347126 -4 3 4 3 3 67094.73318212 67093.13709607 74109.12427730 -4 3 4 3 4 -107.88041960 110.91191188 4.58473037 -4 3 4 3 5 67086.95627966 -67087.33119920 -74078.23090722 -4 3 4 3 6 -0.88909491 -1.11404663 -5.99871264 -4 3 4 3 7 -66981.47534512 66981.07900160 -74121.55018205 -4 3 4 3 8 0.64271921 2.61372479 -5.98800065 -4 1 5 1 1 1.30686240 -1559.55816594 -536.92762902 -4 1 5 1 2 -0.21423974 540.80536827 1560.30800502 -4 1 5 1 3 -9477.32324841 3068.19154638 3067.05607578 -4 1 5 1 4 74173.47118233 -72113.84533412 -72079.65267209 -4 1 5 1 5 -74162.65207560 72101.22661361 72062.02074173 -4 1 5 1 6 9463.84756895 -3060.07186035 -3055.14434640 -4 1 5 1 7 0.55702332 -537.76316400 -1559.04399057 -4 1 5 1 8 1.04977471 1561.01499615 541.65161523 -4 1 5 2 1 -1560.00806939 0.37491954 3080.60673915 -4 1 5 2 2 0.23566371 539.92698534 -3074.61873850 -4 1 5 2 3 -3068.90924950 -888.08798204 94.95105147 -4 1 5 2 4 -67118.25670525 72109.47484348 80903.18051490 -4 1 5 2 5 72102.62988389 -67157.19477746 -80923.70468171 -4 1 5 2 6 0.73912709 -1552.98100601 -3070.56960747 -4 1 5 2 7 533.88542476 3.67421149 3077.27531124 -4 1 5 2 8 -890.38034723 -3055.08007448 -86.33861404 -4 1 5 3 1 537.95597976 3080.69243504 0.36420755 -4 1 5 3 2 -890.89452260 -81.12187644 -3057.53311947 -4 1 5 3 3 -3066.99180386 94.69396378 -888.06655807 -4 1 5 3 4 -67091.70168984 80902.47352377 72061.63511020 -4 1 5 3 5 72057.84306685 -80921.94791587 -67086.28142449 -4 1 5 3 6 7.01635139 -3071.96216576 -1561.50774755 -4 1 5 3 7 -1556.53738565 3074.92938612 -3.53495566 -4 1 5 3 8 3.23502003 -3077.67165475 534.88163954 -4 2 5 1 1 888.06655807 3068.93067348 94.88677954 -4 2 5 1 2 -540.16264905 -0.47132742 -3074.66158644 -4 2 5 1 3 -0.39634351 1559.98664542 3080.46748332 -4 2 5 1 4 -72109.92474693 67118.39596107 80902.75203543 -4 2 5 1 5 67159.65853443 -72100.92667798 -80924.24028106 -4 2 5 1 6 3054.27667546 889.54481225 -86.89563735 -4 2 5 1 7 -3.66349950 -533.89613675 3077.30744720 -4 2 5 1 8 1552.14547104 -1.60679803 -3069.96973620 -4 2 5 2 1 -3069.32701699 9475.36295481 3068.47005804 -4 2 5 2 2 -540.71967237 0.14996782 1560.14732522 -4 2 5 2 3 1560.64007661 -1.00692676 -536.15636597 -4 2 5 2 4 72113.71679028 -74171.01813734 -72081.98788522 -4 2 5 2 5 -72101.65509308 74162.74848349 72060.64960741 -4 2 5 2 6 -1560.04020535 -0.57844729 542.36931835 -4 2 5 2 7 537.74174003 -0.78197504 -1559.24751832 -4 2 5 2 8 3059.64338088 -9464.82235975 -3054.46949123 -4 2 5 3 1 94.67253981 -3066.99180386 888.12011800 -4 2 5 3 2 -81.13258843 -891.18374624 3057.27603178 -4 2 5 3 3 3080.62816312 537.97740374 -0.47132742 -4 2 5 3 4 80904.42310538 -67093.73696734 -72063.28475617 -4 2 5 3 5 -80923.98319337 72062.10643762 67085.91721694 -4 2 5 3 6 -3076.60045606 3.51353169 -534.09966450 -4 2 5 3 7 3074.96152208 -1556.52667366 3.55637964 -4 2 5 3 8 -3072.99051650 5.07748177 1562.87888187 -4 3 5 1 1 -1.58537405 3078.94638119 -537.81672393 -4 3 5 1 2 1560.58651668 -3074.75799433 -0.68556716 -4 3 5 1 3 -0.21423974 3080.31751550 1555.20909928 -4 3 5 1 4 -72075.29289344 80900.22400653 67090.52337128 -4 3 5 1 5 67095.81509279 -80906.99398222 -72056.42908459 -4 3 5 1 6 3062.98552077 -92.48729449 891.40869797 -4 3 5 1 7 889.60908418 93.36567741 3056.70829648 -4 3 5 1 8 -531.95726712 -3078.65715754 0.74983908 -4 3 5 2 1 3080.63887511 -0.43919146 -1554.99485954 -4 3 5 2 2 -3074.68301042 1560.53295675 0.50346338 -4 3 5 2 3 3080.78884292 -0.27851166 539.11287434 -4 3 5 2 4 80897.57814578 -72076.97467537 -67092.08732136 -4 3 5 2 5 -80907.37961375 67096.80059558 72055.31503796 -4 3 5 2 6 -3077.67165475 -531.48593970 -0.04284795 -4 3 5 2 7 93.68703702 889.83403590 -3056.89040025 -4 3 5 2 8 -92.91577396 3062.02144196 -890.78740273 -4 3 5 3 1 536.94905300 -1557.46932851 -2.79582857 -4 3 5 3 2 3057.07250403 -3056.72972045 -9482.87205760 -4 3 5 3 3 1557.45861652 -536.92762902 -2.78511658 -4 3 5 3 4 72065.11650593 -72064.76301036 -74082.62282182 -4 3 5 3 5 -72059.20348918 72057.02895585 74119.92196005 -4 3 5 3 6 -1553.81654099 540.29119290 -7.06991132 -4 3 5 3 7 -3064.09956741 3064.05671946 9465.71145466 -4 3 5 3 8 -539.43423395 1554.64136398 -7.60551067 -4 1 6 1 1 -9471.68874332 0.42847947 -1.88530969 -4 1 6 1 2 0.53559934 -0.61058325 -0.10711987 -4 1 6 1 3 9471.73159127 -0.44990345 -2.05670148 -4 1 6 1 4 -1.21045451 -1.39255829 6.94136748 -4 1 6 1 5 9461.21242018 1.22116650 5.87016880 -4 1 6 1 6 4.89537799 1.32828637 -6.87709556 -4 1 6 1 7 -9465.60433479 0.40705550 -1.94958161 -4 1 6 1 8 0.19281576 -0.89980690 0.14996782 -4 1 6 2 1 -3065.44927775 1558.55123918 -3077.98230237 -4 1 6 2 2 -0.66414318 -0.73912709 573.18770452 -4 1 6 2 3 3067.67737102 -1558.48696726 -3078.06799826 -4 1 6 2 4 1.92815763 2.44233300 -2958.47937704 -4 1 6 2 5 -3060.86454738 -1552.70249436 -3072.54061305 -4 1 6 2 6 -1.88530969 -6.91994351 11774.93730853 -4 1 6 2 7 3059.62195690 1557.82282407 -3075.45427347 -4 1 6 2 8 -0.44990345 0.17139179 2914.44239908 -4 1 6 3 1 3061.65723440 -3078.00372634 1559.04399057 -4 1 6 3 2 -1.11404663 2913.81039186 0.54631133 -4 1 6 3 3 3065.94202915 -3078.08942224 -1558.97971865 -4 1 6 3 4 -6.56644794 -2960.02190314 -1.64964598 -4 1 6 3 5 -3056.66544853 -3070.33394376 -1562.62179418 -4 1 6 3 6 -6.72712774 11773.54475024 4.77754614 -4 1 6 3 7 -3056.96538416 -3075.53996937 1557.26580076 -4 1 6 3 8 0.51417537 574.76236659 1.45683021 -4 2 6 1 1 3065.89918120 1561.14354000 -3079.48198053 -4 2 6 1 2 -0.02142397 -0.17139179 2915.20295015 -4 2 6 1 3 -3065.87775722 -1561.07926808 -3079.48198053 -4 2 6 1 4 -0.07498391 7.00563940 11783.82825762 -4 2 6 1 5 3053.62324426 -1560.28658105 -3077.03964753 -4 2 6 1 6 3.81346732 -2.39948506 -2963.36404304 -4 2 6 1 7 -3057.15819993 1555.16625133 -3074.08313915 -4 2 6 1 8 -0.23566371 0.70699113 574.67667069 -4 2 6 2 1 -890.70170683 -0.17139179 -1.15689458 -4 2 6 2 2 0.57844729 0.02142397 -0.55702332 -4 2 6 2 3 886.26694428 0.08569589 -1.15689458 -4 2 6 2 4 5.06676978 0.83553497 6.96279145 -4 2 6 2 5 889.07348483 -0.40705550 3.29929195 -4 2 6 2 6 0.43919146 -0.44990345 -6.87709556 -4 2 6 2 7 -891.34442605 -0.17139179 -1.07119869 -4 2 6 2 8 0.59987126 0.20352775 0.62129524 -4 2 6 3 1 -90.70910467 -539.02717845 -536.64911737 -4 2 6 3 2 3371.64070996 -0.82482299 -0.77126305 -4 2 6 3 3 -90.77337659 -539.15572229 536.62769339 -4 2 6 3 4 -2961.93934879 6.98421543 -0.96407882 -4 2 6 3 5 -87.04560517 542.28362245 -534.31390423 -4 2 6 3 6 -2965.24935273 -5.74162495 -0.53559934 -4 2 6 3 7 -89.98068957 535.36367894 537.80601195 -4 2 6 3 8 2914.02463160 0.11783186 -1.01763875 -4 3 6 1 1 -3065.06364622 -3080.70314703 1556.38741783 -4 3 6 1 2 -0.72841511 573.31624836 -0.78197504 -4 3 6 1 3 -3067.16319565 -3080.68172306 -1556.40884181 -4 3 6 1 4 5.81660886 11784.47097683 -0.34278358 -4 3 6 1 5 3064.78513457 -3078.00372634 -1554.78061981 -4 3 6 1 6 5.73091297 -2961.15737375 -2.91366042 -4 3 6 1 7 3055.67994574 -3072.94766855 1559.92237350 -4 3 6 1 8 0.81411100 2915.69570154 -1.17831855 -4 3 6 2 1 -96.57927347 535.49222279 538.19164347 -4 3 6 2 2 2915.50288578 -0.24637570 -1.30686240 -4 3 6 2 3 -94.41545212 535.55649471 -538.21306745 -4 3 6 2 4 -2955.74782039 6.42719211 -2.48518095 -4 3 6 2 5 -95.87228234 -531.74302739 539.49850587 -4 3 6 2 6 -2958.95070446 -7.62693464 0.89980690 -4 3 6 2 7 -88.56670730 -538.77009076 -536.00639816 -4 3 6 2 8 3374.57579436 0.98550279 -0.43919146 -4 3 6 3 1 -885.38856136 -0.10711987 2.42090903 -4 3 6 3 2 -0.89980690 0.91051888 -1.99242955 -4 3 6 3 3 887.57380667 0.19281576 2.61372479 -4 3 6 3 4 -0.18210378 -1.24259047 -3.96343514 -4 3 6 3 5 892.20138499 -0.59987126 -7.41269490 -4 3 6 3 6 -1.61751001 0.10711987 3.87773924 -4 3 6 3 7 -892.13711307 -0.08569589 2.44233300 -4 3 6 3 8 0.55702332 0.74983908 1.96029359 -4 1 7 1 1 9469.50349801 -3060.32894803 3063.82105575 -4 1 7 1 2 0.64271921 -536.16707796 1555.77683458 -4 1 7 1 3 0.87838292 1556.77304936 -534.87092755 -4 1 7 1 4 -74060.30975321 71902.24074582 -71939.98978750 -4 1 7 1 5 1.09262266 534.61383986 -1556.60165757 -4 1 7 1 6 -9463.10844185 3057.22247185 -3060.00758843 -4 1 7 1 7 74050.93676471 -71899.38064533 71936.81903939 -4 1 7 1 8 0.34278358 -1555.12340339 535.12801523 -4 1 7 2 1 3064.20668728 890.15539551 93.68703702 -4 1 7 2 2 -0.38563153 -535.46008683 -3078.36793390 -4 1 7 2 3 1561.08998006 -0.51417537 3079.05350105 -4 1 7 2 4 66920.29918820 -71901.25524303 80698.90292561 -4 1 7 2 5 -537.74174003 2.07812545 3074.42592273 -4 1 7 2 6 -0.11783186 1557.43719255 -3075.00437002 -4 1 7 2 7 -71897.54889558 66928.76165781 -80701.76302610 -4 1 7 2 8 890.23037941 3058.80784590 -90.81622454 -4 1 7 3 1 -3059.57910895 90.83764851 889.48054033 -4 1 7 3 2 -884.51017843 -101.45322749 3065.36358186 -4 1 7 3 3 540.19478501 3075.30430566 0.47132742 -4 1 7 3 4 -66970.30274283 80708.32947404 -71949.58772772 -4 1 7 3 5 -1559.75098171 3079.71764424 -1.64964598 -4 1 7 3 6 -2.21738128 -3075.60424129 1556.98728910 -4 1 7 3 7 71936.66907157 -80703.77687963 66976.95488667 -4 1 7 3 8 -0.47132742 -3073.19404425 -537.62390817 -4 2 7 1 1 -0.44990345 -1561.74341126 3079.73906821 -4 2 7 1 2 535.81358239 0.53559934 -3078.19654211 -4 2 7 1 3 -890.35892326 -3064.14241535 93.70846099 -4 2 7 1 4 71905.44362989 -66921.68103450 80700.27405993 -4 2 7 1 5 -2.24951724 537.65604413 3074.40449876 -4 2 7 1 6 -3056.98680814 -889.00921291 -92.10166296 -4 2 7 1 7 -66934.21405912 71898.48083844 -80702.48072922 -4 2 7 1 8 -1557.05156102 -0.05355993 -3075.19718579 -4 2 7 2 1 -1555.93751439 -0.06427192 -535.36367894 -4 2 7 2 2 536.02782213 -0.58915928 1555.58401882 -4 2 7 2 3 3061.16448301 -9468.73223495 3064.35665509 -4 2 7 2 4 -71906.13990904 74059.80628983 -71941.46804168 -4 2 7 2 5 -534.33532821 -0.81411100 -1556.58023360 -4 2 7 2 6 1554.09505265 -0.74983908 535.89927829 -4 2 7 2 7 71901.76941840 -74052.84349837 71936.95829522 -4 2 7 2 8 -3056.81541635 9464.09394464 -3059.30059730 -4 2 7 3 1 3076.31123242 540.66611244 -1.14618259 -4 2 7 3 2 -101.95669087 -884.86367400 -3065.44927775 -4 2 7 3 3 90.40916904 -3060.60745969 -890.20895544 -4 2 7 3 4 80704.86950229 -66967.82827387 71949.52345579 -4 2 7 3 5 3079.81405212 -1559.81525363 1.90673366 -4 2 7 3 6 -3074.95081009 -1.90673366 538.83436268 -4 2 7 3 7 -80698.02454269 71937.30107879 -66975.86226401 -4 2 7 3 8 -3076.54689613 -2.86010049 -1557.45861652 -4 3 7 1 1 5.48453727 3079.31058874 -1557.96207990 -4 3 7 1 2 1556.96586512 -3078.74285344 -0.55702332 -4 3 7 1 3 2.77440459 3075.30430566 537.95597976 -4 3 7 1 4 -71947.45604233 80700.16694006 -66984.34615759 -4 3 7 1 5 891.07662637 93.36567741 -3062.70700912 -4 3 7 1 6 3057.27603178 -88.43816346 -890.61601094 -4 3 7 1 7 66971.77028503 -80709.42209670 71957.31107024 -4 3 7 1 8 -537.80601195 -3071.57653423 0.99621478 -4 3 7 2 1 3075.56139334 2.24951724 -538.30947533 -4 3 7 2 2 -3078.64644555 1557.10512095 0.46061543 -4 3 7 2 3 3077.35029514 2.72084466 1556.10890618 -4 3 7 2 4 80699.50279688 -71939.83981968 66983.63916646 -4 3 7 2 5 93.09787774 890.53031505 3062.98552077 -4 3 7 2 6 -3071.65151814 -537.67746810 -0.87838292 -4 3 7 2 7 -80707.36539523 66966.68209127 -71955.26508075 -4 3 7 2 8 -87.73117233 3058.17583868 891.34442605 -4 3 7 3 1 -1559.30107826 537.32397254 -2.94579638 -4 3 7 3 2 -3067.63452307 3067.61309909 -9457.99882413 -4 3 7 3 3 -534.90306351 1561.78625921 -1.28543842 -4 3 7 3 4 -71944.41383807 71937.89023807 -74124.67808221 -4 3 7 3 5 3058.44363835 -3057.56525543 9466.09708619 -4 3 7 3 6 1560.44726085 -535.77073444 2.18524532 -4 3 7 3 7 71951.70870111 -71950.78747024 74116.21561260 -4 3 7 3 8 535.79215842 -1560.43654886 2.24951724 -4 1 8 1 1 -0.19281576 -886.43833607 -1.15689458 -4 1 8 1 2 -0.00000000 0.23566371 -0.35349557 -4 1 8 1 3 0.10711987 886.37406415 -1.37113432 -4 1 8 1 4 -0.81411100 -1.41398226 8.20538193 -4 1 8 1 5 0.42847947 -891.19445823 3.34213990 -4 1 8 1 6 -0.20352775 0.19281576 0.34278358 -4 1 8 1 7 0.23566371 888.98778894 -1.09262266 -4 1 8 1 8 0.38563153 3.27786798 -8.23751789 -4 1 8 2 1 1561.14354000 3065.96345312 -3079.41770861 -4 1 8 2 2 0.06427192 -0.09640788 2915.23508611 -4 1 8 2 3 -1561.14354000 -3065.96345312 -3079.39628463 -4 1 8 2 4 -6.39505615 -0.72841511 11784.34243299 -4 1 8 2 5 1560.30800502 -3053.68751619 -3076.99679958 -4 1 8 2 6 -0.68556716 0.06427192 574.69809467 -4 1 8 2 7 -1555.14482736 3059.10778153 -3074.08313915 -4 1 8 2 8 1.84246174 -4.65971428 -2964.22100199 -4 1 8 3 1 -538.98433050 -90.73052865 -536.60626942 -4 1 8 3 2 -0.81411100 3371.73711784 0.61058325 -4 1 8 3 3 -539.09145037 -90.75195262 536.62769339 -4 1 8 3 4 6.39505615 -2961.07167785 0.34278358 -4 1 8 3 5 542.24077450 -87.06702914 534.14251244 -4 1 8 3 6 0.10711987 2914.21744736 1.17831855 -4 1 8 3 7 535.29940702 -92.12308694 -537.76316400 -4 1 8 3 8 -5.14175369 -2964.29598590 1.31757438 -4 2 8 1 1 1558.50839123 -3065.49212570 -3078.08942224 -4 2 8 1 2 1.00692676 0.31064762 573.34838433 -4 2 8 1 3 -1558.55123918 3067.63452307 -3077.93945442 -4 2 8 1 4 -3.79204335 -3.79204335 -2957.10824272 -4 2 8 1 5 1552.70249436 3058.59360616 -3072.54061305 -4 2 8 1 6 -0.40705550 -0.02142397 2914.30314325 -4 2 8 1 7 -1557.73712818 -3057.43671158 -3075.58281731 -4 2 8 1 8 8.29107782 0.14996782 11773.71614203 -4 2 8 2 1 0.42847947 -9471.62447140 -1.92815763 -4 2 8 2 2 0.89980690 -0.31064762 -0.23566371 -4 2 8 2 3 -0.42847947 9473.93826056 -1.97100558 -4 2 8 2 4 -0.57844729 2.14239737 6.25580032 -4 2 8 2 5 -1.17831855 -9463.44051345 5.65592906 -4 2 8 2 6 0.69627915 -0.14996782 0.36420755 -4 2 8 2 7 -0.32135961 9463.56905729 -1.97100558 -4 2 8 2 8 0.72841511 -4.01699507 -6.23437635 -4 2 8 3 1 -3078.11084621 3061.63581043 1558.97971865 -4 2 8 3 2 2913.91751173 -0.94265484 -1.18903054 -4 2 8 3 3 -3078.02515032 3065.98487709 -1558.80832686 -4 2 8 3 4 -2960.77174222 -5.76304893 -2.87081248 -4 2 8 3 5 -3070.37679170 -3054.45877924 1562.49325034 -4 2 8 3 6 574.69809467 0.70699113 -0.79268703 -4 2 8 3 7 -3075.45427347 -3061.29302685 -1557.33007268 -4 2 8 3 8 11774.25174137 -5.83803283 -0.42847947 -4 3 8 1 1 535.47079881 -96.60069744 538.38445924 -4 3 8 1 2 -0.44990345 2915.17081419 0.94265484 -4 3 8 1 3 535.53507073 -94.47972404 -538.25591539 -4 3 8 1 4 7.70191855 -2957.60099411 -0.02142397 -4 3 8 1 5 -531.87157123 -91.58748759 -539.45565792 -4 3 8 1 6 1.18903054 3374.34013065 0.92123087 -4 3 8 1 7 -538.70581884 -88.48101141 536.02782213 -4 3 8 1 8 -8.86952511 -2960.78245421 1.60679803 -4 3 8 2 1 -3080.68172306 -3064.99937430 1556.28029797 -4 3 8 2 2 573.32696035 -0.81411100 1.18903054 -4 3 8 2 3 -3080.63887511 -3067.18461962 -1556.40884181 -4 3 8 2 4 11784.55667272 5.76304893 2.93508440 -4 3 8 2 5 -3078.04657429 3062.59988925 1554.60922802 -4 3 8 2 6 2915.72783750 0.92123087 0.79268703 -4 3 8 2 7 -3072.92624457 3057.97231093 -1559.92237350 -4 3 8 2 8 -2961.24306964 5.69877701 0.25708768 -4 3 8 3 1 -0.10711987 -885.36713738 2.48518095 -4 3 8 3 2 -0.85695895 0.19281576 -2.08883744 -4 3 8 3 3 0.12854384 887.61665462 2.52802890 -4 3 8 3 4 0.54631133 -2.54945287 -4.62757832 -4 3 8 3 5 0.38563153 -890.08041160 -7.36984695 -4 3 8 3 6 -0.84624696 -1.09262266 2.01385353 -4 3 8 3 7 0.23566371 892.22280897 2.52802890 -4 3 8 3 8 0.57844729 -1.04977471 4.59544236 -5 1 1 1 1 -0.02142397 -0.03213596 -9.10518883 -5 1 1 1 2 -0.83553497 -890.29465133 -0.14996782 -5 1 1 1 3 0.03213596 -0.04284795 0.87838292 -5 1 1 1 4 0.88909491 890.14468352 -0.29993563 -5 1 1 1 5 -0.11783186 -0.06427192 13.28286370 -5 1 1 1 6 -0.62129524 -889.56623623 -2.35663711 -5 1 1 1 7 0.06427192 0.04284795 0.43919146 -5 1 1 1 8 0.53559934 889.50196431 -2.49589294 -5 1 1 2 1 1.24259047 -1.84246174 2959.80766341 -5 1 1 2 2 1560.54366873 -3071.70507807 3080.36036345 -5 1 1 2 3 -0.16067980 -0.34278358 -573.00560075 -5 1 1 2 4 -1560.55438072 3071.70507807 3080.42463537 -5 1 1 2 5 -1.24259047 -1.82103777 -11776.28701887 -5 1 1 2 6 1553.15239780 3059.42914114 3071.76934999 -5 1 1 2 7 0.14996782 -0.32135961 -2914.66735081 -5 1 1 2 8 -1553.10954986 -3055.03722653 3071.87646986 -5 1 1 3 1 -13.11147191 2961.20022170 0.61058325 -5 1 1 3 2 -536.04924610 94.73681173 538.23449142 -5 1 1 3 3 -0.22495172 -2914.47453504 0.17139179 -5 1 1 3 4 -536.15636597 94.75823570 -538.17021950 -5 1 1 3 5 17.32128274 2964.45666570 -0.68556716 -5 1 1 3 6 534.67811179 87.36696477 -537.69889208 -5 1 1 3 7 -1.24259047 -3373.61171554 -0.07498391 -5 1 1 3 8 534.72095973 85.31026330 537.84885989 -5 2 1 1 1 -1.30686240 1.78890180 -11786.34557453 -5 2 1 1 2 1560.86502834 3071.46941436 3081.45298611 -5 2 1 1 3 0.17139179 0.34278358 -2915.31007002 -5 2 1 1 4 -1560.79004443 -3071.38371847 3081.45298611 -5 2 1 1 5 1.31757438 1.73534187 2966.06346373 -5 2 1 1 6 1558.07991176 -3056.30124098 3073.65465968 -5 2 1 1 7 -0.19281576 0.36420755 -574.32317513 -5 2 1 1 8 -1558.05848778 3051.86647842 3073.59038776 -5 2 1 2 1 -0.00000000 -0.04284795 -8.81596518 -5 2 1 2 2 0.79268703 -9474.68809964 0.85695895 -5 2 1 2 3 -0.04284795 -0.04284795 -0.17139179 -5 2 1 2 4 -0.80339901 9474.62382772 1.11404663 -5 2 1 2 5 -0.00000000 -0.00000000 13.36855959 -5 2 1 2 6 -0.12854384 -9456.11351444 -2.91366042 -5 2 1 2 7 -0.06427192 0.02142397 -0.20352775 -5 2 1 2 8 0.06427192 9456.19921033 -2.96722036 -5 2 1 3 1 -11784.51382478 -4.48832249 -0.02142397 -5 2 1 3 2 3081.75292174 3064.99937430 1556.30172194 -5 2 1 3 3 -573.29482439 1.69249392 0.02142397 -5 2 1 3 4 3081.80648168 3065.04222225 -1556.32314591 -5 2 1 3 5 2961.16808574 -4.32764269 -0.04284795 -5 2 1 3 6 3074.46877068 -3061.35729877 1557.35149665 -5 2 1 3 7 -2915.73854949 -0.08569589 0.01071199 -5 2 1 3 8 3074.53304260 -3061.34658679 -1557.33007268 -5 3 1 1 1 -12.21166501 2959.22921612 -0.58915928 -5 3 1 1 2 538.27733937 94.05124457 -536.52057352 -5 3 1 1 3 1.39255829 -3372.17630930 -0.10711987 -5 3 1 1 4 538.19164347 94.00839662 536.45630160 -5 3 1 1 5 13.76490311 2962.50708409 0.64271921 -5 3 1 1 6 -539.45565792 87.28126888 536.07067008 -5 3 1 1 7 -0.29993563 -2914.66735081 0.07498391 -5 3 1 1 8 -539.54135382 89.50936214 -536.02782213 -5 3 1 2 1 2958.07232153 10.61557897 -0.03213596 -5 3 1 2 2 3081.15305048 -3064.33523112 1558.27272752 -5 3 1 2 3 -2913.56401616 1.26401445 0.02142397 -5 3 1 2 4 3081.17447445 -3064.24953522 -1558.29415149 -5 3 1 2 5 -11771.71300049 13.11147191 0.02142397 -5 3 1 2 6 3069.81976839 3052.95910108 1560.60794065 -5 3 1 2 7 -574.99803030 -2.23880525 0.03213596 -5 3 1 2 8 3069.84119236 3052.93767711 -1560.51153277 -5 3 1 3 1 0.04284795 0.02142397 8.22680590 -5 3 1 3 2 -0.10711987 -886.33121620 -1.94958161 -5 3 1 3 3 0.02142397 0.06427192 2.63514877 -5 3 1 3 4 0.12854384 886.43833607 -2.05670148 -5 3 1 3 5 0.04284795 0.04284795 -10.32635533 -5 3 1 3 6 0.14996782 -891.30157810 2.91366042 -5 3 1 3 7 0.02142397 -0.03213596 -2.23880525 -5 3 1 3 8 -0.21423974 891.24801816 2.94579638 -5 1 2 1 1 -1.30686240 1559.55816594 -536.94905300 -5 1 2 1 2 -74173.54616623 72114.10242181 -72080.03830361 -5 1 2 1 3 9477.33396039 -3068.19154638 3067.09892373 -5 1 2 1 4 0.21423974 -540.82679224 1560.32942900 -5 1 2 1 5 74162.80204342 -72101.41942937 72062.32067736 -5 1 2 1 6 -1.03906272 -1561.01499615 541.68375119 -5 1 2 1 7 -0.49275140 537.69889208 -1559.06541455 -5 1 2 1 8 -9463.82614497 3060.06114836 -3055.20861832 -5 1 2 2 1 -888.13082999 -3068.93067348 94.91891551 -5 1 2 2 2 72109.71050720 -67118.04246551 80902.60206761 -5 1 2 2 3 0.37491954 -1560.07234131 3080.55317921 -5 1 2 2 4 540.15193707 0.51417537 -3074.64016247 -5 1 2 2 5 -67159.40144675 72100.60531837 -80923.96176940 -5 1 2 2 6 -1552.13475905 1.52110213 -3069.96973620 -5 1 2 2 7 3.68492348 533.86400078 3077.29673521 -5 1 2 2 8 -3054.28738745 -889.59837219 -86.90634934 -5 1 2 3 1 -0.96407882 3079.87832404 538.44873116 -5 1 2 3 2 -72076.78185961 80900.02047878 -67092.25871315 -5 1 2 3 3 -0.25708768 3080.53175524 -1555.10197941 -5 1 2 3 4 1560.81146840 -3074.42592273 0.47132742 -5 1 2 3 5 67095.39732530 -80910.50751391 72055.91490922 -5 1 2 3 6 -530.69325268 -3076.84683176 0.42847947 -5 1 2 3 7 889.67335610 93.55849317 -3056.79399237 -5 1 2 3 8 3062.79270501 -92.16593488 -891.29086611 -5 2 2 1 1 1560.02949336 -0.34278358 3080.55317921 -5 2 2 1 2 67116.25356370 -72107.95374135 80901.40232508 -5 2 2 1 3 3068.87711354 888.06655807 94.95105147 -5 2 2 1 4 -0.61058325 -540.11980111 -3074.89725015 -5 2 2 1 5 -72098.23796928 67157.04480964 -80923.70468171 -5 2 2 1 6 889.99471570 3055.25146627 -86.12437430 -5 2 2 1 7 -533.88542476 -3.66349950 3077.27531124 -5 2 2 1 8 -2.57087684 1551.70627958 -3069.28416904 -5 2 2 2 1 3068.21297036 -9477.30182443 3067.09892373 -5 2 2 2 2 -72113.95245399 74173.65328610 -72080.02759163 -5 2 2 2 3 -1559.56887793 1.30686240 -536.92762902 -5 2 2 2 4 540.81608025 -0.23566371 1560.30800502 -5 2 2 2 5 72101.40871738 -74162.81275541 72062.36352530 -5 2 2 2 6 -3060.07186035 9463.84756895 -3055.18719435 -5 2 2 2 7 -537.67746810 0.50346338 -1559.04399057 -5 2 2 2 8 1560.97214821 1.01763875 541.68375119 -5 2 2 3 1 3080.48890729 -0.29993563 1555.09126742 -5 2 2 3 2 80900.03119077 -72076.84613153 67092.29084911 -5 2 2 3 3 3079.86761205 -0.96407882 -538.42730718 -5 2 2 3 4 -3074.40449876 1560.80075642 -0.40705550 -5 2 2 3 5 -80910.51822590 67095.42946126 -72055.91490922 -5 2 2 3 6 -92.09095098 3062.81412898 891.23730618 -5 2 2 3 7 93.55849317 889.69478007 3056.82612833 -5 2 2 3 8 -3076.91110368 -530.67182870 -0.46061543 -5 3 2 1 1 537.91313182 3080.69243504 -0.37491954 -5 3 2 1 2 -67092.62292071 80902.98769914 -72062.15999755 -5 3 2 1 3 -3066.97037988 94.71538776 888.08798204 -5 3 2 1 4 -891.09805035 -81.21828432 3057.39386364 -5 3 2 1 5 72060.04973614 -80922.01218779 67086.06718475 -5 3 2 1 6 3.08505221 -3077.55382289 -534.82807960 -5 3 2 1 7 -1556.55880962 3074.97223406 3.57780361 -5 3 2 1 8 6.06298456 -3072.57274901 1562.17189073 -5 3 2 2 1 94.73681173 -3066.95966790 -888.13082999 -5 3 2 2 2 80903.00912311 -67092.44081693 72062.20284550 -5 3 2 2 3 3080.67101107 537.89170784 0.40705550 -5 3 2 2 4 -81.22899631 -891.04449041 -3057.41528761 -5 3 2 2 5 -80922.00147580 72060.00688820 -67086.04576078 -5 3 2 2 6 -3072.59417298 6.06298456 -1562.15046676 -5 3 2 2 7 3075.00437002 -1556.56952161 -3.54566765 -5 3 2 2 8 -3077.53239892 3.07434023 534.81736761 -5 3 2 3 1 -536.86335710 1557.44790453 -2.81725254 -5 3 2 3 2 -72066.28411249 72066.61618409 -74083.90826025 -5 3 2 3 3 -1557.44790453 536.94905300 -2.82796453 -5 3 2 3 4 -3056.81541635 3057.09392801 -9483.02202541 -5 3 2 3 5 72059.08565733 -72061.33517457 74120.22189568 -5 3 2 3 6 540.68753641 -1552.85246217 -6.34149622 -5 3 2 3 7 3064.03529549 -3064.05671946 9465.72216665 -5 3 2 3 8 1553.68799715 -539.86271342 -6.89851953 -5 1 3 1 1 -0.06427192 0.02142397 -0.26779967 -5 1 3 1 2 9474.66667567 -0.81411100 0.81411100 -5 1 3 1 3 -0.04284795 -0.02142397 -8.76240525 -5 1 3 1 4 -9474.62382772 0.70699113 0.47132742 -5 1 3 1 5 0.05355993 -0.02142397 13.47567946 -5 1 3 1 6 -9456.19921033 -0.02142397 -2.82796453 -5 1 3 1 7 0.04284795 0.05355993 -0.14996782 -5 1 3 1 8 9456.13493841 -0.00000000 -3.07434023 -5 1 3 2 1 -0.00000000 -0.01071199 -2915.58858168 -5 1 3 2 2 -3069.28416904 -1560.73648450 3081.34586624 -5 1 3 2 3 -0.02142397 -0.00000000 -11786.27059062 -5 1 3 2 4 3069.24132110 1560.77933244 3081.23874637 -5 1 3 2 5 -0.04284795 -0.00000000 2965.97776783 -5 1 3 2 6 -3056.27981700 1558.10133573 3073.61181173 -5 1 3 2 7 0.02142397 0.06427192 -574.32317513 -5 1 3 2 8 3056.32266495 -1558.04777580 3073.62252372 -5 1 3 3 1 0.77126305 -573.03773671 0.02142397 -5 1 3 3 2 3069.30559302 3081.73149777 -1556.32314591 -5 1 3 3 3 -9.03020492 -11786.35628651 0.55702332 -5 1 3 3 4 3069.30559302 3081.79576969 1556.28029797 -5 1 3 3 5 -8.85881313 2963.14980330 -0.62129524 -5 1 3 3 6 -3059.15062948 3074.46877068 1557.26580076 -5 1 3 3 7 -0.85695895 -2916.01706115 -0.02142397 -5 1 3 3 8 -3061.44299467 3074.31880286 -1557.37292062 -5 2 3 1 1 -0.00000000 -0.01071199 -573.01631273 -5 2 3 1 2 3069.39128891 -1560.56509271 3080.57460319 -5 2 3 1 3 0.05355993 -0.06427192 2959.63627162 -5 2 3 1 4 -3069.53054474 1560.45797284 3080.51033127 -5 2 3 1 5 0.04284795 -0.04284795 -11776.37271477 -5 2 3 1 6 3059.40771717 1553.10954986 3071.94074178 -5 2 3 1 7 0.04284795 -0.00000000 -2914.74233471 -5 2 3 1 8 -3059.38629319 -1553.09883787 3071.76934999 -5 2 3 2 1 0.08569589 -0.05355993 1.00692676 -5 2 3 2 2 890.20895544 0.85695895 -0.19281576 -5 2 3 2 3 -0.00000000 -0.14996782 -7.88402232 -5 2 3 2 4 -890.19824345 -0.92123087 0.17139179 -5 2 3 2 5 -0.06427192 -0.04284795 12.08312117 -5 2 3 2 6 -887.48811078 -0.40705550 -2.52802890 -5 2 3 2 7 0.08569589 0.02142397 0.21423974 -5 2 3 2 8 887.38099091 0.57844729 -2.46375698 -5 2 3 3 1 -2915.01013439 -0.34278358 -0.03213596 -5 2 3 3 2 94.77965968 -536.09209405 -538.29876334 -5 2 3 3 3 2958.49008902 -11.20473825 0.12854384 -5 2 3 3 4 94.80108365 -536.11351802 538.29876334 -5 2 3 3 5 2961.76795700 15.44668504 -0.04284795 -5 2 3 3 6 89.61648201 534.74238371 -537.78458797 -5 2 3 3 7 -3374.10446694 -0.95336683 -0.00000000 -5 2 3 3 8 89.70217791 534.71024775 537.74174003 -5 3 3 1 1 1.92815763 -2913.87466378 0.02142397 -5 3 3 1 2 -3068.74856970 3081.11020253 -1558.22987957 -5 3 3 1 3 14.19338258 2960.87886209 -0.06427192 -5 3 3 1 4 -3068.67358579 3081.21732240 1558.16560765 -5 3 3 1 5 16.67856353 -11774.20889342 -0.00000000 -5 3 3 1 6 3053.08764492 3069.84119236 1560.65078860 -5 3 3 1 7 -1.47825419 -574.68738268 -0.05355993 -5 3 3 1 8 3052.98052505 3069.83048037 -1560.55438072 -5 3 3 2 1 -3372.13346135 1.29615041 -0.00000000 -5 3 3 2 2 94.05124457 538.27733937 536.60626942 -5 3 3 2 3 2959.32562400 -12.16881707 0.72841511 -5 3 3 2 4 94.01910861 538.25591539 -536.54199750 -5 3 3 2 5 2962.52850807 13.71134317 -0.57844729 -5 3 3 2 6 89.53078612 -539.47708190 536.02782213 -5 3 3 2 7 -2914.64592683 -0.31064762 -0.10711987 -5 3 3 2 8 87.38838875 -539.54135382 -536.04924610 -5 3 3 3 1 0.14996782 -0.11783186 2.69942069 -5 3 3 3 2 886.39548812 0.10711987 -2.03527750 -5 3 3 3 3 0.97479080 0.66414318 8.84810114 -5 3 3 3 4 -888.46290158 -0.02142397 -1.84246174 -5 3 3 3 5 0.92123087 -0.59987126 -10.92622659 -5 3 3 3 6 -891.32300207 0.08569589 2.95650837 -5 3 3 3 7 0.14996782 0.07498391 -2.28165320 -5 3 3 3 8 891.28015412 -0.08569589 2.81725254 -5 1 4 1 1 1.28543842 -1559.56887793 -536.91691704 -5 1 4 1 2 -0.34278358 540.64468846 1560.22230913 -5 1 4 1 3 -9477.33396039 3068.19154638 3067.09892373 -5 1 4 1 4 74173.97464571 -72114.61659717 -72080.20969540 -5 1 4 1 5 -74162.52353176 72103.32616303 72061.87077391 -5 1 4 1 6 9463.94397683 -3060.22182817 -3055.10149845 -5 1 4 1 7 0.53559934 -537.76316400 -1559.02256660 -5 1 4 1 8 0.36420755 1560.10447727 542.32647040 -5 1 4 2 1 888.04513410 3068.93067348 94.89749153 -5 1 4 2 2 -540.16264905 -0.53559934 -3074.64016247 -5 1 4 2 3 -0.35349557 1560.05091734 3080.46748332 -5 1 4 2 4 -72109.66765925 67117.96748160 80902.68776351 -5 1 4 2 5 67159.33717483 -72100.41250261 -80923.76895363 -5 1 4 2 6 3054.26596348 889.56623623 -86.89563735 -5 1 4 2 7 -3.64207553 -533.89613675 3077.28602322 -5 1 4 2 8 1552.14547104 -1.56395008 -3070.03400812 -5 1 4 3 1 -0.89980690 3079.84618808 -538.47015513 -5 1 4 3 2 1560.86502834 -3074.46877068 -0.46061543 -5 1 4 3 3 -0.28922365 3080.53175524 1555.08055544 -5 1 4 3 4 -72076.52477192 80899.60271129 67091.98020149 -5 1 4 3 5 67095.01169377 -80910.10045841 -72055.57212564 -5 1 4 3 6 3062.79270501 -92.12308694 891.23730618 -5 1 4 3 7 889.73762802 93.55849317 3056.79399237 -5 1 4 3 8 -530.71467665 -3076.86825574 -0.49275140 -5 2 4 1 1 -1560.00806939 0.36420755 3080.55317921 -5 2 4 1 2 0.64271921 540.07695316 -3074.81155426 -5 2 4 1 3 -3068.90924950 -888.04513410 94.86535557 -5 2 4 1 4 -67116.39281953 72107.97516533 80901.33805316 -5 2 4 1 5 72098.30224120 -67157.10908156 -80923.87607350 -5 2 4 1 6 2.58158883 -1551.67414362 -3069.24132110 -5 2 4 1 7 533.94969668 3.65278752 3077.29673521 -5 2 4 1 8 -890.01613968 -3055.26217825 -86.18864622 -5 2 4 2 1 -3068.25581831 9477.33396039 3067.09892373 -5 2 4 2 2 -540.65540045 0.28922365 1560.21159714 -5 2 4 2 3 1559.59030190 -1.30686240 -536.97047697 -5 2 4 2 4 72115.03436466 -74174.42454916 -72080.83099064 -5 2 4 2 5 -72103.56182674 74162.87702733 72062.02074173 -5 2 4 2 6 -1560.14732522 -0.40705550 542.28362245 -5 2 4 2 7 537.76316400 -0.54631133 -1559.03327859 -5 2 4 2 8 3060.22182817 -9463.93326484 -3055.06936249 -5 2 4 3 1 3080.48890729 -0.29993563 -1555.11269140 -5 2 4 3 2 -3074.68301042 1560.55438072 0.46061543 -5 2 4 3 3 3079.88903603 -0.92123087 538.47015513 -5 2 4 3 4 80899.31348765 -72076.63189179 -67091.89450560 -5 2 4 3 5 -80907.86165316 67097.03625929 72055.50785372 -5 2 4 3 6 -3077.70379071 -531.46451573 -0.00000000 -5 2 4 3 7 93.62276510 889.69478007 -3056.79399237 -5 2 4 3 8 -92.91577396 3062.00001798 -890.76597876 -5 3 4 1 1 537.91313182 3080.66029908 0.43919146 -5 3 4 1 2 -891.15161028 -81.20757233 -3057.43671158 -5 3 4 1 3 -3066.95966790 94.71538776 -888.10940602 -5 3 4 1 4 -67092.34440905 80902.83773132 72062.17070954 -5 3 4 1 5 72059.95332826 -80921.90506792 -67086.06718475 -5 3 4 1 6 6.06298456 -3072.60488497 -1562.19331471 -5 3 4 1 7 -1556.51596168 3074.95081009 -3.55637964 -5 3 4 1 8 3.10647619 -3077.56453488 534.79594364 -5 3 4 2 1 94.73681173 -3066.94895591 888.10940602 -5 3 4 2 2 -81.19686035 -891.10876234 3057.44742357 -5 3 4 2 3 3080.68172306 537.95597976 -0.38563153 -5 3 4 2 4 80902.84844331 -67092.36583302 -72062.02074173 -5 3 4 2 5 -80921.91577991 72059.92119230 67085.89579296 -5 3 4 2 6 -3077.54311091 3.10647619 -534.74238371 -5 3 4 2 7 3074.96152208 -1556.56952161 3.53495566 -5 3 4 2 8 -3072.60488497 6.08440853 1562.17189073 -5 3 4 3 1 536.88478108 -1557.44790453 -2.76369261 -5 3 4 3 2 3057.02965608 -3056.72972045 -9482.85063362 -5 3 4 3 3 1557.44790453 -536.88478108 -2.82796453 -5 3 4 3 4 72064.98796208 -72064.74158639 -74082.62282182 -5 3 4 3 5 -72059.06423335 72056.85756406 74120.05050389 -5 3 4 3 6 -1553.84867695 540.24834495 -7.11275927 -5 3 4 3 7 -3064.05671946 3064.03529549 9465.70074267 -5 3 4 3 8 -539.39138600 1554.68421192 -7.66978259 -5 1 5 1 1 0.77126305 -1.06048670 16.05726829 -5 1 5 1 2 74158.14232914 -67155.81293115 67095.98648458 -5 1 5 1 3 -0.26779967 0.04284795 -8.09826206 -5 1 5 1 4 -74157.97093735 67155.84506711 67095.77224484 -5 1 5 1 5 -2.11026141 -1.92815763 -387.68822819 -5 1 5 1 6 -73990.13552734 -66819.74576761 -66907.41266802 -5 1 5 1 7 1.37113432 1.03906272 8.13039802 -5 1 5 1 8 73990.15695131 66821.92030094 -66912.20092614 -5 1 5 2 1 -0.00000000 0.08569589 2959.14352022 -5 1 5 2 2 -72101.71936500 72101.71936500 -80905.50501605 -5 1 5 2 3 0.01071199 -0.06427192 2959.10067227 -5 1 5 2 4 72101.88004481 -72101.89075679 -80905.79423969 -5 1 5 2 5 -0.06427192 0.29993563 328882.97674338 -5 1 5 2 6 -71808.43587695 -71808.42516497 -80608.60087644 -5 1 5 2 7 0.06427192 -0.08569589 -11773.06271083 -5 1 5 2 8 71808.40374099 71808.26448516 -80608.27951684 -5 1 5 3 1 14.41833430 -11771.85225631 -1.25330246 -5 1 5 3 2 72062.59918902 -80922.22642753 72055.34717392 -5 1 5 3 3 12.57587257 2960.87886209 -0.19281576 -5 1 5 3 4 72062.17070954 -80921.94791587 -72054.97225438 -5 1 5 3 5 -387.76321210 328883.51234273 1.00692676 -5 1 5 3 6 -71879.94910118 -80593.49697498 -71890.75749592 -5 1 5 3 7 -4.11340295 2953.94820660 0.07498391 -5 1 5 3 8 -71879.85269330 -80588.96580454 71890.48969625 -5 2 5 1 1 -0.00000000 0.02142397 2959.18636817 -5 2 5 1 2 -72101.74078898 72101.63366911 -80905.55857598 -5 2 5 1 3 -0.01071199 -0.04284795 2959.16494419 -5 2 5 1 4 72101.86933282 -72101.91218077 -80905.62284790 -5 2 5 1 5 -0.09640788 0.25708768 328883.16955915 -5 2 5 1 6 -71808.35018106 -71808.53228483 -80608.51518055 -5 2 5 1 7 0.02142397 -0.08569589 -11773.00915089 -5 2 5 1 8 71808.42516497 71808.39302900 -80608.39734869 -5 2 5 2 1 0.12854384 -0.09640788 -7.85188636 -5 2 5 2 2 67156.12357877 -74158.05663324 67095.99719656 -5 2 5 2 3 -0.22495172 0.10711987 18.08183381 -5 2 5 2 4 -67155.74865923 74157.99236132 67095.85794074 -5 2 5 2 5 -1.47825419 -1.02835074 -389.61638582 -5 2 5 2 6 -66817.62479421 -73990.13552734 -66907.71260365 -5 2 5 2 7 1.37113432 1.30686240 7.93758226 -5 2 5 2 8 66817.64621819 73990.07125541 -66912.26519806 -5 2 5 3 1 2965.52786438 18.09254579 0.05355993 -5 2 5 3 2 -80923.68325774 72056.15057293 -72055.21863007 -5 2 5 3 3 -11768.79934006 15.44668504 -0.00000000 -5 2 5 3 4 -80923.01911455 72055.52927769 72054.52235093 -5 2 5 3 5 328878.97046030 -384.32466432 0.29993563 -5 2 5 3 6 -80591.86875298 -71878.63152680 -71889.60060134 -5 2 5 3 7 2955.18008508 -3.02078029 -0.01071199 -5 2 5 3 8 -80592.25438450 -71879.03858230 71889.96480889 -5 3 5 1 1 14.50403020 -11771.85225631 -1.28543842 -5 3 5 1 2 72062.38494928 -80922.01218779 72055.16507014 -5 3 5 1 3 12.51160064 2960.90028606 -0.19281576 -5 3 5 1 4 72062.24569345 -80921.92649189 -72055.10079822 -5 3 5 1 5 -387.61324428 328883.38379888 1.52110213 -5 3 5 1 6 -71880.03479708 -80593.66836677 -71890.67180002 -5 3 5 1 7 -4.09197898 2954.00176653 0.22495172 -5 3 5 1 8 -71879.80984535 -80588.98722851 71890.51112022 -5 3 5 2 1 2965.48501644 18.11396977 0.02142397 -5 3 5 2 2 -80923.81180158 72056.08630101 -72055.24005405 -5 3 5 2 3 -11768.74578013 15.55380491 0.06427192 -5 3 5 2 4 -80922.76202687 72055.05795027 72054.09387145 -5 3 5 2 5 328878.61696473 -384.17469650 0.59987126 -5 3 5 2 6 -80591.80448106 -71878.58867885 -71889.34351365 -5 3 5 2 7 2955.26578098 -3.03149228 -0.00000000 -5 3 5 2 8 -80592.34008040 -71879.08143025 71889.85768902 -5 3 5 3 1 0.85695895 -1.04977471 -9.97285976 -5 3 5 3 2 67081.95378180 -67081.96449379 74113.44120800 -5 3 5 3 3 -0.27851166 -0.04284795 -9.23373267 -5 3 5 3 4 -67081.82523796 67081.99662975 74113.32337615 -5 3 5 3 5 -2.04598949 -1.90673366 28.47246106 -5 3 5 3 6 -66906.80208477 -66906.72710086 -74110.49541162 -5 3 5 3 7 1.39255829 1.07119869 -10.62629096 -5 3 5 3 8 66906.83422073 66909.01946604 -74114.80163033 -5 1 6 1 1 -0.96407882 1553.77369304 534.26034430 -5 1 6 1 2 -0.62129524 -1552.55252654 -531.60377156 -5 1 6 1 3 -9459.56277421 -3053.08764492 -3057.90803901 -5 1 6 1 4 9463.10844185 3055.52997792 3062.21425772 -5 1 6 1 5 -73991.82802126 -71805.44723262 -71878.37443912 -5 1 6 1 6 73991.34598185 71801.89085298 71869.24782632 -5 1 6 1 7 -0.92123087 533.96040867 1555.38049107 -5 1 6 1 8 -0.70699113 -533.93898469 -1553.50589337 -5 1 6 2 1 -890.89452260 3056.08700124 90.58056083 -5 1 6 2 2 -1559.83667760 0.82482299 -3077.51097495 -5 1 6 2 3 0.64271921 1557.43719255 3074.04029121 -5 1 6 2 4 -3059.60053293 889.52338828 -93.55849317 -5 1 6 2 5 -66822.94865168 -71804.35460996 -80591.07606595 -5 1 6 2 6 71802.79065988 66839.32727958 80599.21717596 -5 1 6 2 7 -2.67799671 -537.82743592 3077.45741501 -5 1 6 2 8 532.68568223 -1.10333465 -3079.13919695 -5 1 6 3 1 -3.89916321 3073.27974014 -538.95219454 -5 1 6 3 2 542.86206974 -3070.77313522 -0.07498391 -5 1 6 3 3 -4.30621871 3075.06864194 1558.01563984 -5 1 6 3 4 -3054.25525149 -87.21699696 890.10183557 -5 1 6 3 5 -66913.49707655 -80606.32993523 -71895.12798655 -5 1 6 3 6 71873.00773370 80595.38228466 66916.28219313 -5 1 6 3 7 -885.60280109 101.50678742 3068.98423341 -5 1 6 3 8 -1554.43783623 -3080.94952273 0.49275140 -5 2 6 1 1 1558.31557547 -0.20352775 3074.65087446 -5 2 6 1 2 889.73762802 -3059.54697299 -93.65490106 -5 2 6 1 3 3057.00823211 -891.79432949 90.02353751 -5 2 6 1 4 1.69249392 -1560.52224476 -3078.06799826 -5 2 6 1 5 -71806.19707170 -66823.21645135 -80591.16176184 -5 2 6 1 6 66838.00970519 71805.74716825 80599.73135133 -5 2 6 1 7 -537.52750029 -2.93508440 3077.40385508 -5 2 6 1 8 -0.85695895 532.57856236 -3079.06421304 -5 2 6 2 1 -3053.13049287 -9459.53063825 -3057.89732702 -5 2 6 2 2 3055.44428203 9463.12986583 3062.19283375 -5 2 6 2 3 1553.78440503 -0.87838292 534.27105629 -5 2 6 2 4 -1552.57395051 -0.66414318 -531.59305957 -5 2 6 2 5 -71806.10066382 -73992.47074047 -71878.76007064 -5 2 6 2 6 71802.52286021 73992.02083702 71869.80484963 -5 2 6 2 7 534.01396860 -0.86767094 1555.41262703 -5 2 6 2 8 -533.92827271 -0.72841511 -1553.47375741 -5 2 6 3 1 3074.68301042 -4.55259441 1558.21916759 -5 2 6 3 2 -87.23842093 -3054.21240354 890.11254756 -5 2 6 3 3 3071.41585443 -2.61372479 -537.65604413 -5 2 6 3 4 -3070.77313522 542.81922179 -0.06427192 -5 2 6 3 5 -80608.76155624 -66915.48950610 -71896.92760035 -5 2 6 3 6 80600.23481471 71873.74686080 66916.92491234 -5 2 6 3 7 101.05688397 -885.42069732 3068.80212964 -5 2 6 3 8 -3080.91738677 -1554.39498828 0.50346338 -5 3 6 1 1 -539.32711408 3069.44484885 0.35349557 -5 3 6 1 2 3.77061937 -3073.14048431 539.64847369 -5 3 6 1 3 3053.62324426 86.55285377 -891.32300207 -5 3 6 1 4 5.84874482 -3077.12534342 -1554.86631570 -5 3 6 1 5 -71877.87097573 -80588.71942884 -66910.19778460 -5 3 6 1 6 66912.12594223 80611.81447250 71886.60124502 -5 3 6 1 7 1558.22987957 3080.91738677 2.52802890 -5 3 6 1 8 883.63179551 -109.74430531 -3072.56203702 -5 3 6 2 1 86.55285377 3053.75178811 -891.32300207 -5 3 6 2 2 -3076.48262421 4.88466601 -1554.29858040 -5 3 6 2 3 3069.41271289 -539.32711408 0.34278358 -5 3 6 2 4 -3073.23689219 3.59922758 539.73416958 -5 3 6 2 5 -80588.69800487 -71875.71786638 -66910.32632844 -5 3 6 2 6 80611.33243309 66911.16186341 71885.95852581 -5 3 6 2 7 3080.85311485 1558.15489566 2.54945287 -5 3 6 2 8 -109.64789743 883.39613180 -3072.64773292 -5 3 6 3 1 536.17778994 1560.17946118 3.10647619 -5 3 6 3 2 -533.47836926 -1563.91794459 -6.05227257 -5 3 6 3 3 1560.20088515 536.24206187 3.04220427 -5 3 6 3 4 -1563.11454558 -534.27105629 -6.64143185 -5 3 6 3 5 -71893.03914912 -71890.90746373 -74117.05114757 -5 3 6 3 6 71886.49412515 71886.21561349 74133.84754296 -5 3 6 3 7 -3064.48519893 -3064.43163900 -9458.98432692 -5 3 6 3 8 3071.12663078 3070.84811912 9448.22949211 -5 1 7 1 1 -0.12854384 0.06427192 -0.77126305 -5 1 7 1 2 -0.77126305 2.42090903 890.08041160 -5 1 7 1 3 0.10711987 -0.12854384 -0.98550279 -5 1 7 1 4 0.76055107 -2.37806108 889.82332391 -5 1 7 1 5 0.62129524 0.59987126 -4.90608998 -5 1 7 1 6 -0.83553497 -2.22809327 -886.52403196 -5 1 7 1 7 -0.64271921 -0.68556716 -2.32450115 -5 1 7 1 8 0.81411100 2.39948506 -884.39234658 -5 1 7 2 1 -0.08569589 -0.05355993 -3374.52223442 -5 1 7 2 2 537.95597976 534.74238371 91.58748759 -5 1 7 2 3 0.07498391 0.06427192 -2915.86709333 -5 1 7 2 4 -537.92384380 -534.74238371 93.70846099 -5 1 7 2 5 0.65343120 -0.55702332 2950.74532253 -5 1 7 2 6 533.99254463 -537.27041260 101.93526689 -5 1 7 2 7 -0.59987126 0.64271921 2950.69176259 -5 1 7 2 8 -534.05681655 537.23827664 102.05309875 -5 1 7 3 1 0.38563153 -2914.59236690 0.18210378 -5 1 7 3 2 -1558.95829468 3078.60359761 -3060.97166725 -5 1 7 3 3 0.32135961 -574.37673506 0.17139179 -5 1 7 3 4 -1558.94758269 3078.60359761 3060.92881930 -5 1 7 3 5 11.74033759 -11775.06585237 0.77126305 -5 1 7 3 6 1555.18767531 3076.61116805 3068.55575394 -5 1 7 3 7 -4.79897011 2953.48759116 0.85695895 -5 1 7 3 8 1555.12340339 3076.76113587 -3070.80527118 -5 2 7 1 1 -0.06427192 -0.09640788 -2915.96350122 -5 2 7 1 2 -534.69953576 -537.97740374 91.35182388 -5 2 7 1 3 0.05355993 0.08569589 -3374.53294641 -5 2 7 1 4 534.78523165 537.99882771 93.40852536 -5 2 7 1 5 0.56773530 -0.62129524 2950.78817047 -5 2 7 1 6 -537.29183658 534.03539257 101.89241895 -5 2 7 1 7 -0.62129524 0.67485517 2950.67033862 -5 2 7 1 8 537.33468452 -533.96040867 102.01025080 -5 2 7 2 1 -0.08569589 0.16067980 -0.97479080 -5 2 7 2 2 -2.39948506 0.77126305 890.27322736 -5 2 7 2 3 0.11783186 -0.04284795 -0.77126305 -5 2 7 2 4 2.37806108 -0.66414318 890.16610749 -5 2 7 2 5 0.66414318 0.64271921 -4.92751395 -5 2 7 2 6 -2.39948506 -0.77126305 -886.43833607 -5 2 7 2 7 -0.53559934 -0.68556716 -2.41019704 -5 2 7 2 8 2.39948506 0.74983908 -884.39234658 -5 2 7 3 1 -574.50527891 0.34278358 0.17139179 -5 2 7 3 2 3078.51790171 -1558.95829468 3060.99309122 -5 2 7 3 3 -2914.61379087 0.42847947 0.08569589 -5 2 7 3 4 3078.57146165 -1558.87259878 -3060.97166725 -5 2 7 3 5 -11775.08727634 11.74033759 0.85695895 -5 2 7 3 6 3076.71828792 1555.14482736 3068.59860189 -5 2 7 3 7 2953.40189527 -4.77754614 0.87838292 -5 2 7 3 8 3076.80398381 1555.13411537 -3070.77313522 -5 3 7 1 1 -0.66414318 -574.54812685 0.23566371 -5 3 7 1 2 -1556.28029797 3074.74728234 3062.49276938 -5 3 7 1 3 -1.67106995 -2914.36741517 0.21423974 -5 3 7 1 4 -1556.21602604 3074.83297823 -3062.68558514 -5 3 7 1 5 -4.23123481 2952.11645684 0.83553497 -5 3 7 1 6 1557.90851997 3080.51033127 -3066.84183604 -5 3 7 1 7 3.27786798 -11773.74827799 0.84624696 -5 3 7 1 8 1557.88709599 3080.63887511 3064.72086264 -5 3 7 2 1 -2914.41026312 -1.83174975 0.23566371 -5 3 7 2 2 3074.68301042 -1556.25887399 -3062.62131322 -5 3 7 2 3 -574.67667069 -0.70699113 0.12854384 -5 3 7 2 4 3074.69372240 -1556.21602604 3062.34280156 -5 3 7 2 5 2952.10574486 -4.13482693 0.89980690 -5 3 7 2 6 3080.57460319 1557.92994394 -3066.92753194 -5 3 7 2 7 -11773.71614203 3.32071592 0.94265484 -5 3 7 2 8 3080.55317921 1557.96207990 3064.77442258 -5 3 7 3 1 -0.21423974 0.16067980 -3.01006831 -5 3 7 3 2 3.10647619 -3.14932413 9467.72530819 -5 3 7 3 3 0.16067980 -0.23566371 -2.84938850 -5 3 7 3 4 -3.13861215 3.12790016 9467.55391640 -5 3 7 3 5 1.24259047 1.28543842 -13.28286370 -5 3 7 3 6 3.08505221 3.08505221 -9459.36995844 -5 3 7 3 7 -1.19974253 -1.19974253 -1.88530969 -5 3 7 3 8 -3.10647619 -3.01006831 -9455.16014761 -5 1 8 1 1 0.29993563 -1552.85246217 534.90306351 -5 1 8 1 2 -9463.14057781 -3055.46570600 3062.19283375 -5 1 8 1 3 9459.61633414 3053.30188466 -3057.77949516 -5 1 8 1 4 0.66414318 1552.59537449 -531.55021162 -5 1 8 1 5 73992.54572438 71806.34703952 -71878.82434256 -5 1 8 1 6 0.74983908 533.94969668 -1553.49518138 -5 1 8 1 7 0.77126305 -533.75688092 1555.30550716 -5 1 8 1 8 -73991.44238973 -71804.18321817 71869.36565817 -5 1 8 2 1 891.73005757 -3056.94396019 90.00211354 -5 1 8 2 2 3059.64338088 -889.53410027 -93.55849317 -5 1 8 2 3 0.16067980 -1558.27272752 3074.66158644 -5 1 8 2 4 1559.89023753 -0.83553497 -3077.46812700 -5 1 8 2 5 66823.24858731 71804.11894625 -80591.20460979 -5 1 8 2 6 -532.71781819 1.04977471 -3079.09634900 -5 1 8 2 7 2.97793235 537.58106022 3077.42527905 -5 1 8 2 8 -71804.91163328 -66837.13132227 80599.13148006 -5 1 8 3 1 -2.54945287 3071.42656641 537.67746810 -5 1 8 3 2 -3054.22311553 -87.21699696 -890.12325954 -5 1 8 3 3 -4.50974647 3074.70443439 -1558.20845560 -5 1 8 3 4 542.84064577 -3070.80527118 0.08569589 -5 1 8 3 5 -66915.05031464 -80608.23666889 71896.43484895 -5 1 8 3 6 -1554.41641225 -3080.96023471 -0.47132742 -5 1 8 3 7 -885.38856136 101.15329185 -3068.78070566 -5 1 8 3 8 71873.33980530 80600.00986299 -66916.57141678 -5 2 8 1 1 -1557.48004049 -0.55702332 3074.13669909 -5 2 8 1 2 -1.60679803 1560.71506052 -3078.04657429 -5 2 8 1 3 -3056.10842521 890.85167465 90.53771288 -5 2 8 1 4 -890.38034723 3060.41464393 -93.06574178 -5 2 8 1 5 71806.51843131 66820.70984643 -80591.14033787 -5 2 8 1 6 0.78197504 -532.42859455 -3079.13919695 -5 2 8 1 7 537.78458797 2.71013267 3077.41456707 -5 2 8 1 8 -66839.56294329 -71802.41574034 80599.13148006 -5 2 8 2 1 3052.48777366 9460.41973315 -3057.34030370 -5 2 8 2 2 1552.57395051 0.66414318 -531.61448355 -5 2 8 2 3 -1553.69870913 1.13547061 534.35675218 -5 2 8 2 4 -3055.44428203 -9463.16200179 3062.19283375 -5 2 8 2 5 71806.12208779 73992.68498021 -71878.86719051 -5 2 8 2 6 533.92827271 0.72841511 -1553.49518138 -5 2 8 2 7 -534.01396860 1.06048670 1555.32693114 -5 2 8 2 8 -71801.91227696 -73993.55265114 71869.18355440 -5 2 8 3 1 3073.37614802 -2.74226863 -1556.89088122 -5 2 8 3 2 -3070.76242323 542.81922179 0.07498391 -5 2 8 3 3 3071.64080615 -2.22809327 537.84885989 -5 2 8 3 4 -87.23842093 -3054.24453950 -890.08041160 -5 2 8 3 5 -80607.18689418 -66913.32568476 71895.51361808 -5 2 8 3 6 -3080.93881074 -1554.39498828 -0.47132742 -5 2 8 3 7 100.94976410 -885.04577778 -3068.96280944 -5 2 8 3 8 80600.09555888 71869.11928247 -66916.71067260 -5 3 8 1 1 -539.28426613 3069.38057693 -0.37491954 -5 3 8 1 2 5.84874482 -3077.11463143 1554.90916365 -5 3 8 1 3 3053.63395625 86.57427775 891.30157810 -5 3 8 1 4 3.77061937 -3073.14048431 -539.66989766 -5 3 8 1 5 -71877.63531202 -80588.44091718 66910.15493665 -5 3 8 1 6 883.57823558 -109.71216935 3072.58346099 -5 3 8 1 7 1558.20845560 3080.87453882 -2.54945287 -5 3 8 1 8 66911.91170249 80611.54667283 -71886.24774945 -5 3 8 2 1 86.57427775 3053.65538023 891.34442605 -5 3 8 2 2 -3073.16190828 3.58851560 -539.77701753 -5 3 8 2 3 3069.42342487 -539.28426613 -0.29993563 -5 3 8 2 4 -3076.52547216 4.92751395 1554.28786841 -5 3 8 2 5 -80588.40878122 -71875.54647459 66910.24063255 -5 3 8 2 6 -109.64789743 883.37470783 3072.66915689 -5 3 8 2 7 3080.89596279 1558.16560765 -2.57087684 -5 3 8 2 8 80610.91466560 66911.06545553 -71885.70143812 -5 3 8 3 1 -536.75623723 -1559.35463819 3.94201116 -5 3 8 3 2 1563.15739352 534.28176827 -6.59858390 -5 3 8 3 3 -1560.15803721 -535.98497418 3.40641182 -5 3 8 3 4 533.47836926 1563.90723260 -6.17010443 -5 3 8 3 5 71893.06057309 71891.14312744 -74116.75121194 -5 3 8 3 6 -3071.10520681 -3070.80527118 9448.22949211 -5 3 8 3 7 3064.97795033 3065.21361404 -9458.15950393 -5 3 8 3 8 -71886.55839707 -71888.36872285 74131.80155347 -6 1 1 1 1 74113.83755151 -72001.92649548 72006.23271419 -6 1 1 1 2 0.49275140 -1558.28343951 535.74931047 -6 1 1 1 3 -0.62129524 537.95597976 -1559.68670978 -6 1 1 1 4 -9472.03152690 3065.23503801 -3066.41335657 -6 1 1 1 5 -0.95336683 1557.77997612 -539.79844150 -6 1 1 1 6 -74107.15327172 71997.17037332 -71995.04939992 -6 1 1 1 7 9466.41844579 -3061.80720222 3061.16448301 -6 1 1 1 8 -0.02142397 -536.08138206 1557.85496003 -6 1 1 2 1 -72004.34740451 67024.50539631 -80796.18919021 -6 1 1 2 2 889.35199649 3066.01701305 -95.09030729 -6 1 1 2 3 -537.75245201 0.34278358 3077.44670303 -6 1 1 2 4 1.77818982 1561.95765100 -3081.64580187 -6 1 1 2 5 1553.42019748 0.21423974 3070.14112799 -6 1 1 2 6 67035.67799859 -72006.46837791 80811.55017936 -6 1 1 2 7 3061.33587480 889.93044378 90.86978447 -6 1 1 2 8 0.57844729 -536.67054134 -3076.99679958 -6 1 1 3 1 72007.83951222 -80795.30009530 67033.78197692 -6 1 1 3 2 -1.39255829 -3078.06799826 -538.18093149 -6 1 1 3 3 -1558.04777580 3077.53239892 0.27851166 -6 1 1 3 4 -2.86010049 -3080.14612371 1557.13725691 -6 1 1 3 5 536.22063789 3076.67543997 1.88530969 -6 1 1 3 6 -67028.31886363 80799.95980959 -72006.42552996 -6 1 1 3 7 -3061.97859401 91.88742323 890.48746710 -6 1 1 3 8 -891.51581784 -92.55156641 3061.18590698 -6 2 1 1 1 -67017.46762094 72015.89492634 -80796.97116525 -6 2 1 1 2 -1561.78625921 -1.85317373 -3081.82790565 -6 2 1 1 3 -0.57844729 538.57727500 3077.33958316 -6 2 1 1 4 -3065.10649417 -888.70927728 -95.70089055 -6 2 1 1 5 -891.71934559 -3053.55897234 86.16722225 -6 2 1 1 6 71999.35561863 -67052.19588232 80811.67872320 -6 2 1 1 7 0.44990345 -1557.58716036 3076.32194441 -6 2 1 1 8 536.88478108 -0.51417537 -3076.93252766 -6 2 1 2 1 72011.80294736 -74112.61638501 72011.03168430 -6 2 1 2 2 -3064.61374278 9472.93133380 -3065.78134934 -6 2 1 2 3 -537.46322837 -0.70699113 -1558.44411931 -6 2 1 2 4 1558.21916759 -0.34278358 535.87785431 -6 2 1 2 5 3056.94396019 -9458.51299949 3054.97295461 -6 2 1 2 6 -72002.16215919 74100.51183987 -71998.43438777 -6 2 1 2 7 -1558.82975084 -1.47825419 -537.10973280 -6 2 1 2 8 536.13494200 0.16067980 1557.81211209 -6 2 1 3 1 -80798.84576295 72015.87350236 -67033.67485705 -6 2 1 3 2 -3080.18897166 -2.88152446 -1557.11583294 -6 2 1 3 3 3077.13605541 -1559.92237350 -0.25708768 -6 2 1 3 4 -3078.10013422 -1.41398226 538.17021950 -6 2 1 3 5 89.61648201 -3058.44363835 -892.09426513 -6 2 1 3 6 80806.74049726 -67036.98486099 72006.25413817 -6 2 1 3 7 3076.16126460 535.37439093 -0.02142397 -6 2 1 3 8 -92.57299038 -891.53724181 -3061.19661897 -6 3 1 1 1 67029.91494967 -80801.69515146 72004.17601272 -6 3 1 1 2 -540.07695316 -3079.37486066 -0.85695895 -6 3 1 1 3 888.90209304 90.36632109 -3062.66416117 -6 3 1 1 4 3063.45684820 -93.02289383 -888.81639715 -6 3 1 1 5 -2.19595730 3073.89032339 536.15636597 -6 3 1 1 6 -71997.19179729 80810.32901286 -67028.00821601 -6 3 1 1 7 -0.51417537 3076.69686395 -1559.55816594 -6 3 1 1 8 1557.71570420 -3077.29673521 -0.34278358 -6 3 1 2 1 -80804.71593175 67032.88217003 -72004.62591617 -6 3 1 2 2 -92.80865410 3063.38186429 888.76283721 -6 3 1 2 3 90.61269679 889.00921291 3062.72843309 -6 3 1 2 4 -3078.46434178 -539.45565792 0.19281576 -6 3 1 2 5 3072.49776510 -1.86388571 1561.55059550 -6 3 1 2 6 80813.09270547 -72002.07646330 67026.70135361 -6 3 1 2 7 3076.97537560 0.19281576 -535.59934265 -6 3 1 2 8 -3077.12534342 1557.80140010 0.42847947 -6 3 1 3 1 71999.93406592 -71999.81623407 74099.97624053 -6 3 1 3 2 536.34918173 -1559.29036627 2.34592512 -6 3 1 3 3 3062.88911289 -3062.70700912 9469.33210622 -6 3 1 3 4 1559.34392621 -536.30633379 2.33521313 -6 3 1 3 5 -537.06688485 1558.74405494 3.72777142 -6 3 1 3 6 -72001.54086395 72000.79102487 -74115.23010981 -6 3 1 3 7 -1558.61551110 537.17400472 2.88152446 -6 3 1 3 8 -3061.33587480 3061.33587480 -9465.43294300 -6 1 2 1 1 0.14996782 886.35264017 -1.09262266 -6 1 2 1 2 0.17139179 2.39948506 8.77311723 -6 1 2 1 3 -0.25708768 -886.41691209 -1.02835074 -6 1 2 1 4 0.13925583 -0.00000000 -0.36420755 -6 1 2 1 5 -0.40705550 891.28015412 3.25644400 -6 1 2 1 6 0.13925583 -2.29236519 -8.82667717 -6 1 2 1 7 -0.12854384 -891.36585002 -1.09262266 -6 1 2 1 8 0.12854384 0.08569589 0.29993563 -6 1 2 2 1 -1558.50839123 3063.32830435 -3078.06799826 -6 1 2 2 2 1.82103777 4.73469819 -2955.21222105 -6 1 2 2 3 1558.67978302 -3063.28545641 -3078.11084621 -6 1 2 2 4 -0.66414318 -0.06427192 573.69116790 -6 1 2 2 5 -1552.65964641 -3060.80027546 -3072.41206920 -6 1 2 2 6 -6.35220820 0.70699113 11771.70228850 -6 1 2 2 7 1557.65143228 3055.29431421 -3075.62566526 -6 1 2 2 8 0.06427192 0.11783186 2914.09961550 -6 1 2 3 1 535.49222279 -92.25163078 -538.25591539 -6 1 2 3 2 6.34149622 -2959.42203188 -1.27472644 -6 1 2 3 3 535.57791868 -94.50114802 538.08452360 -6 1 2 3 4 -0.18210378 2914.83874260 -1.07119869 -6 1 2 3 5 -531.85014726 -91.52321567 539.58420176 -6 1 2 3 6 -7.61622265 -2962.63562793 -0.38563153 -6 1 2 3 7 -538.77009076 -88.52385935 -536.00639816 -6 1 2 3 8 0.92123087 3373.89022720 -0.63200722 -6 2 2 1 1 -1561.14354000 -3065.92060517 -3079.61052437 -6 2 2 1 2 6.34149622 0.83553497 11784.49240080 -6 2 2 1 3 1561.16496397 3065.96345312 -3079.56767642 -6 2 2 1 4 -0.13925583 0.08569589 2915.24579810 -6 2 2 1 5 -1560.30800502 3053.53754837 -3077.08249547 -6 2 2 1 6 -1.69249392 4.64900229 -2964.13530609 -6 2 2 1 7 1555.20909928 -3059.30059730 -3074.14741108 -6 2 2 1 8 0.70699113 -0.11783186 574.59097480 -6 2 2 2 1 -0.36420755 9473.85256467 -1.99242955 -6 2 2 2 2 -0.68556716 -4.01699507 6.33078423 -6 2 2 2 3 0.44990345 -9471.66731935 -1.88530969 -6 2 2 2 4 -0.66414318 -0.02142397 -0.23566371 -6 2 2 2 5 1.15689458 9463.50478537 5.74162495 -6 2 2 2 6 0.51417537 2.16382134 -6.27722430 -6 2 2 2 7 0.51417537 -9463.48336139 -1.99242955 -6 2 2 2 8 -0.81411100 -0.31064762 0.29993563 -6 2 2 3 1 -3080.68172306 -3067.16319565 -1556.43026578 -6 2 2 3 2 11785.79926320 7.56266272 -2.91366042 -6 2 2 3 3 -3080.70314703 -3069.36986494 1556.28029797 -6 2 2 3 4 573.11272061 -0.32135961 -1.13547061 -6 2 2 3 5 -3078.08942224 3062.57846527 -1554.60922802 -6 2 2 3 6 -2962.35711628 7.47696682 -0.19281576 -6 2 2 3 7 -3072.96909252 3057.82234311 1559.83667760 -6 2 2 3 8 2915.93136525 1.29615041 -0.76055107 -6 3 2 1 1 -539.07002640 -90.75195262 536.56342147 -6 3 2 1 2 6.47004006 -2961.05025388 -0.42847947 -6 3 2 1 3 -538.98433050 -90.88049646 -536.54199750 -6 3 2 1 4 -0.78197504 3371.83352572 -0.62129524 -6 3 2 1 5 542.24077450 -87.02418119 -534.18536039 -6 3 2 1 6 -5.08819376 -2964.28527391 -1.26401445 -6 3 2 1 7 535.19228715 -92.16593488 537.72031605 -6 3 2 1 8 0.04284795 2914.21744736 -1.08191067 -6 3 2 2 1 -3078.13227018 3061.57153851 -1558.97971865 -6 3 2 2 2 -2959.55057572 -3.88845123 1.52110213 -6 3 2 2 3 -3078.11084621 3061.48584261 1558.93687070 -6 3 2 2 4 2913.72469596 -0.53559934 0.96407882 -6 3 2 2 5 -3070.33394376 -3054.39450732 -1562.53609829 -6 3 2 2 6 11772.94487897 -3.98485911 1.60679803 -6 3 2 2 7 -3075.47569744 -3061.44299467 1557.33007268 -6 3 2 2 8 574.69809467 1.08191067 1.01763875 -6 3 2 3 1 0.10711987 885.32428943 2.57087684 -6 3 2 3 2 -1.22116650 1.61751001 -3.87773924 -6 3 2 3 3 -0.12854384 -885.40998533 2.48518095 -6 3 2 3 4 0.97479080 -0.47132742 -1.90673366 -6 3 2 3 5 -0.47132742 890.10183557 -7.32699901 -6 3 2 3 6 0.07498391 0.19281576 3.94201116 -6 3 2 3 7 -0.21423974 -892.26565692 2.42090903 -6 3 2 3 8 0.74983908 0.86767094 1.98171757 -6 1 3 1 1 -0.87838292 -537.30254856 -1558.04777580 -6 1 3 1 2 -0.14996782 1558.30486348 536.01711014 -6 1 3 1 3 -74115.85140504 72014.97369547 72011.54585967 -6 1 3 1 4 9472.87777386 -3064.69943867 -3065.55639762 -6 1 3 1 5 -9460.51614104 3056.00130535 3053.43042850 -6 1 3 1 6 74104.26103527 -72005.99705048 -71997.49173292 -6 1 3 1 7 -0.49275140 -1556.81589731 -538.58798699 -6 1 3 1 8 0.85695895 535.47079881 1558.76547892 -6 1 3 2 1 538.57727500 -0.53559934 3077.28602322 -6 1 3 2 2 -889.24487662 -3065.89918120 -94.94033948 -6 1 3 2 3 72016.10916607 -67015.60373523 -80799.33851435 -6 1 3 2 4 -1.82103777 -1562.04334689 -3081.53868200 -6 1 3 2 5 -3053.55897234 -891.70863360 86.21007019 -6 1 3 2 6 -67052.36727411 71999.33419466 80812.21432255 -6 1 3 2 7 -1557.60858433 0.46061543 3076.39692831 -6 1 3 2 8 0.02142397 536.01711014 -3076.11841666 -6 1 3 3 1 -1559.77240568 3077.32887117 -0.17139179 -6 1 3 3 2 -1.39255829 -3078.07871025 538.40588321 -6 1 3 3 3 72015.19864719 -80797.75314029 -67035.14239925 -6 1 3 3 4 -2.93508440 -3080.21039563 -1556.92301718 -6 1 3 3 5 -3058.52933424 89.85214572 -892.13711307 -6 1 3 3 6 -67037.62758020 80805.05871533 72006.91828135 -6 1 3 3 7 536.04924610 3077.13605541 -0.62129524 -6 1 3 3 8 -890.83025068 -93.24784556 -3060.23254015 -6 2 3 1 1 0.19281576 -537.87028387 3077.59667084 -6 2 3 1 2 1561.91480305 1.73534187 -3081.77434571 -6 2 3 1 3 67023.36992570 -72003.36190172 -80795.28938332 -6 2 3 1 4 3066.00630107 889.37342047 -95.07959531 -6 2 3 1 5 -0.65343120 1552.78819025 3069.58410468 -6 2 3 1 6 -72004.07960484 67035.39948694 80811.31451565 -6 2 3 1 7 889.78047597 3061.44299467 90.73052865 -6 2 3 1 8 -536.64911737 0.59987126 -3077.00751156 -6 2 3 2 1 538.02025168 -0.68556716 -1559.64386184 -6 2 3 2 2 3064.65659072 -9472.86706188 -3065.59924557 -6 2 3 2 3 -72001.80866362 74115.74428517 72003.72610927 -6 2 3 2 4 -1558.27272752 0.19281576 536.02782213 -6 2 3 2 5 1557.71570420 -0.98550279 -539.84128945 -6 2 3 2 6 71996.88114967 -74107.15327172 -71994.57807250 -6 2 3 2 7 -3061.87147414 9466.45058175 3061.14305904 -6 2 3 2 8 -535.47079881 -0.83553497 1558.78690289 -6 2 3 3 1 3076.99679958 -1558.28343951 0.49275140 -6 2 3 3 2 -3080.36036345 -2.81725254 1556.80518532 -6 2 3 3 3 -80795.66430286 72009.53200615 67037.97036378 -6 2 3 3 4 -3078.92495721 -1.99242955 -539.02717845 -6 2 3 3 5 3073.98673127 534.33532821 -0.00000000 -6 2 3 3 6 80806.00137017 -67027.96536806 -72006.76831354 -6 2 3 3 7 91.39467183 -3061.70008235 890.16610749 -6 2 3 3 8 -93.42994933 -890.94808253 3060.32894803 -6 3 3 1 1 888.40934165 91.44823176 3061.93574606 -6 3 3 1 2 -539.88413740 -3079.44984457 0.89980690 -6 3 3 1 3 67030.78262060 -80802.25217477 -72004.92585180 -6 3 3 1 4 3064.35665509 -92.35875065 889.48054033 -6 3 3 1 5 -1.83174975 3072.77627676 1561.29350781 -6 3 3 1 6 -72000.46966527 80809.45062994 67027.53688859 -6 3 3 1 7 0.74983908 3077.80019859 -536.42416564 -6 3 3 1 8 1557.86567202 -3077.22175130 0.24637570 -6 3 3 2 1 91.00904030 888.22723787 -3061.72150633 -6 3 3 2 2 -92.80865410 3063.37115230 -888.78426119 -6 3 3 2 3 -80804.21246837 67030.08634146 72004.66876411 -6 3 3 2 4 -3078.46434178 -539.41280997 -0.17139179 -6 3 3 2 5 3073.79391551 -2.31378916 536.32775776 -6 3 3 2 6 80810.86461220 -71997.42746100 -67030.32200517 -6 3 3 2 7 3076.78255984 -0.37491954 -1559.40819813 -6 3 3 2 8 -3077.08249547 1557.77997612 -0.41776749 -6 3 3 3 1 -3062.42849746 3063.36044031 9469.44993807 -6 3 3 3 2 -536.30633379 1559.32250223 2.37806108 -6 3 3 3 3 -72000.33040944 72001.32662422 74100.83319948 -6 3 3 3 4 -1559.31179024 536.30633379 2.31378916 -6 3 3 3 5 1559.47247005 -536.04924610 4.15625090 -6 3 3 3 6 71998.75574737 -72005.97562651 -74115.16583788 -6 3 3 3 7 538.66297089 -1556.82660929 1.63893399 -6 3 3 3 8 3061.33587480 -3061.34658679 -9465.37938307 -6 1 4 1 1 -9471.60304743 0.40705550 -2.03527750 -6 1 4 1 2 0.14996782 -0.62129524 -0.07498391 -6 1 4 1 3 9473.91683659 -0.40705550 -1.88530969 -6 1 4 1 4 -3.07434023 -1.43540624 6.87709556 -6 1 4 1 5 9463.41908947 1.26401445 5.82732085 -6 1 4 1 6 3.12790016 1.30686240 -6.85567159 -6 1 4 1 7 -9465.73287863 0.42847947 -2.03527750 -6 1 4 1 8 -0.10711987 -0.95336683 0.19281576 -6 1 4 2 1 3066.00630107 1561.10069205 -3079.50340450 -6 1 4 2 2 -0.08569589 -0.05355993 2915.09583028 -6 1 4 2 3 -3063.82105575 -1561.12211602 -3079.52482848 -6 1 4 2 4 -0.03213596 5.76304893 11783.78540967 -6 1 4 2 5 3053.64466824 -1560.37227694 -3077.03964753 -6 1 4 2 6 3.79204335 -1.11404663 -2963.51401086 -6 1 4 2 7 -3059.21490140 1555.18767531 -3074.08313915 -6 1 4 2 8 -0.21423974 0.61058325 574.69809467 -6 1 4 3 1 -3065.02079828 -3080.63887511 1556.40884181 -6 1 4 3 2 -0.49275140 573.36980830 -0.94265484 -6 1 4 3 3 -3067.18461962 -3080.70314703 -1556.36599386 -6 1 4 3 4 6.69499178 11783.80683364 -0.98550279 -6 1 4 3 5 3062.64273719 -3078.04657429 -1554.69492391 -6 1 4 3 6 6.63071986 -2960.45038262 -2.07812545 -6 1 4 3 7 3055.57282587 -3072.92624457 1559.90094952 -6 1 4 3 8 1.15689458 2915.63142962 -1.06048670 -6 2 4 1 1 -3065.47070172 1558.52981520 -3078.11084621 -6 2 4 1 2 -0.36420755 -0.83553497 573.34838433 -6 2 4 1 3 3065.38500583 -1558.46554328 -3078.02515032 -6 2 4 1 4 2.83867652 3.06362824 -2957.81523385 -6 2 4 1 5 -3060.86454738 -1552.59537449 -3072.75485278 -6 2 4 1 6 -0.93194286 -7.69120656 11774.29458932 -6 2 4 1 7 3059.60053293 1557.73712818 -3075.58281731 -6 2 4 1 8 -0.21423974 0.27851166 2914.35670319 -6 2 4 2 1 -886.37406415 -0.14996782 -1.22116650 -6 2 4 2 2 -0.08569589 0.09640788 -0.26779967 -6 2 4 2 3 886.35264017 0.10711987 -1.11404663 -6 2 4 2 4 2.36734909 0.21423974 8.76240525 -6 2 4 2 5 891.21588220 -0.47132742 3.29929195 -6 2 4 2 6 -2.32450115 0.23566371 -8.80525319 -6 2 4 2 7 -891.25873015 -0.17139179 -1.00692676 -6 2 4 2 8 0.08569589 0.07498391 0.27851166 -6 2 4 3 1 -96.62212141 535.49222279 538.29876334 -6 2 4 3 2 2915.35291796 -0.07498391 -1.41398226 -6 2 4 3 3 -92.25163078 535.49222279 -538.34161129 -6 2 4 3 4 -2956.61549132 5.80589687 -3.23502003 -6 2 4 3 5 -95.85085836 -531.78587534 539.45565792 -6 2 4 3 6 -2959.88264731 -7.04848735 1.47825419 -6 2 4 3 7 -88.45958743 -538.77009076 -536.02782213 -6 2 4 3 8 3374.40440257 0.86767094 -0.29993563 -6 3 4 1 1 3061.50726659 -3078.17511813 1558.95829468 -6 3 4 1 2 -0.96407882 2913.74611994 0.69627915 -6 3 4 1 3 3063.73535985 -3078.06799826 -1558.89402276 -6 3 4 1 4 -5.72020098 -2959.44345585 -1.00692676 -6 3 4 1 5 -3056.57975264 -3070.26967183 -1562.62179418 -6 3 4 1 6 -5.83803283 11772.90203103 4.11340295 -6 3 4 1 7 -3056.92253622 -3075.51854539 1557.35149665 -6 3 4 1 8 0.70699113 574.76236659 1.43540624 -6 3 4 2 1 -90.75195262 -539.04860242 -536.49914955 -6 3 4 2 2 3371.42647022 -0.93194286 -0.61058325 -6 3 4 2 3 -90.75195262 -539.02717845 536.71338929 -6 3 4 2 4 -2962.88200363 7.66978259 -0.53559934 -6 3 4 2 5 -84.83893588 542.26219848 -534.18536039 -6 3 4 2 6 -2966.17058360 -6.32007224 -1.28543842 -6 3 4 2 7 -90.00211354 535.23513510 537.82743592 -6 3 4 2 8 2913.85323981 0.23566371 -1.19974253 -6 3 4 3 1 -885.30286546 -0.10711987 2.42090903 -6 3 4 3 2 -0.77126305 0.97479080 -2.08883744 -6 3 4 3 3 887.53095873 0.17139179 2.48518095 -6 3 4 3 4 -0.21423974 -1.13547061 -3.81346732 -6 3 4 3 5 892.30850486 -0.47132742 -7.45554285 -6 3 4 3 6 -1.61751001 0.12854384 3.92058719 -6 3 4 3 7 -892.28708089 -0.17139179 2.44233300 -6 3 4 3 8 0.42847947 0.79268703 1.96029359 -6 1 5 1 1 -0.87838292 1553.68799715 534.31390423 -6 1 5 1 2 -0.64271921 -1552.60608647 -531.60377156 -6 1 5 1 3 -9459.57348619 -3053.10906890 -3057.90803901 -6 1 5 1 4 9463.14057781 3055.44428203 3062.17140977 -6 1 5 1 5 -73991.75303735 -71805.36153673 -71877.94595964 -6 1 5 1 6 73991.22814999 71801.93370093 71869.20497837 -6 1 5 1 7 -0.89980690 533.93898469 1555.42333902 -6 1 5 1 8 -0.70699113 -533.93898469 -1553.49518138 -6 1 5 2 1 1558.37984739 -0.21423974 3074.67229843 -6 1 5 2 2 889.58766020 -3059.58982094 -93.55849317 -6 1 5 2 3 3056.93324820 -891.81575347 90.04496149 -6 1 5 2 4 0.81411100 -1559.85810157 -3077.48955097 -6 1 5 2 5 -71803.86185857 -66823.04505956 -80590.94752211 -6 1 5 2 6 66836.87423459 71804.78308944 80598.87439238 -6 1 5 2 7 -537.57034824 -2.94579638 3077.39314309 -6 1 5 2 8 -1.04977471 532.70710620 -3079.16062092 -6 1 5 3 1 -539.11287434 3069.48769679 0.32135961 -6 1 5 3 2 3.79204335 -3073.15119630 539.62704971 -6 1 5 3 3 3054.56589911 85.93155854 -892.00856923 -6 1 5 3 4 5.83803283 -3077.14676739 -1554.97343557 -6 1 5 3 5 -71877.08900069 -80588.14098155 -66909.68360923 -6 1 5 3 6 66910.07995274 80611.85732045 71886.68694091 -6 1 5 3 7 1558.37984739 3080.79955491 2.63514877 -6 1 5 3 8 883.56752359 -109.74430531 -3072.59417298 -6 2 5 1 1 -890.91594657 3056.14056118 90.54842487 -6 2 5 1 2 -1560.11518926 0.74983908 -3077.40385508 -6 2 5 1 3 0.61058325 1557.50146447 3074.06171518 -6 2 5 1 4 -3060.48962784 890.18753147 -92.89434999 -6 2 5 1 5 -66820.81696630 -71804.46172983 -80591.11891390 -6 2 5 1 6 71801.78373312 66838.74883229 80598.74584854 -6 2 5 1 7 -2.72084466 -537.81672393 3077.43599104 -6 2 5 1 8 532.53571441 -0.95336683 -3079.24631682 -6 2 5 2 1 -3053.30188466 -9459.64847010 -3057.79020715 -6 2 5 2 2 3055.46570600 9463.12986583 3062.20354573 -6 2 5 2 3 1552.85246217 -0.25708768 534.91377550 -6 2 5 2 4 -1552.61679846 -0.64271921 -531.63590752 -6 2 5 2 5 -71806.62555117 -73992.68498021 -71879.01715833 -6 2 5 2 6 71804.30105003 73991.54950960 71869.63345784 -6 2 5 2 7 533.75688092 -0.81411100 1555.32693114 -6 2 5 2 8 -533.94969668 -0.70699113 -1553.49518138 -6 2 5 3 1 86.42430993 3053.54826036 -891.22659419 -6 2 5 3 2 -3076.28980845 4.97036190 -1554.36285232 -6 2 5 3 3 3068.44863407 -538.68439487 0.94265484 -6 2 5 3 4 -3072.30494934 2.95650837 539.17714626 -6 2 5 3 5 -80591.60095331 -71876.12492188 -66910.66911202 -6 2 5 3 6 80614.12826166 66911.76173468 71886.42985323 -6 2 5 3 7 3080.70314703 1558.29415149 2.47446896 -6 2 5 3 8 -109.49792961 883.28901193 -3072.56203702 -6 3 5 1 1 -3.87773924 3073.26902815 -538.97361851 -6 3 5 1 2 542.84064577 -3070.80527118 -0.04284795 -6 3 5 1 3 -4.34906666 3075.02579400 1558.05848778 -6 3 5 1 4 -3054.26596348 -87.23842093 890.16610749 -6 3 5 1 5 -66913.88270808 -80606.67271881 -71895.51361808 -6 3 5 1 6 71873.55404503 80595.83218811 66916.83921645 -6 3 5 1 7 -885.58137712 101.47465146 3069.01636937 -6 3 5 1 8 -1554.41641225 -3080.92809875 0.49275140 -6 3 5 2 1 3073.91174736 -3.68492348 1557.70499222 -6 3 5 2 2 -87.21699696 -3054.24453950 890.14468352 -6 3 5 2 3 3070.64459137 -1.75676584 -537.09902081 -6 3 5 2 4 -3070.79455919 542.81922179 -0.04284795 -6 3 5 2 5 -80608.42948465 -66914.67539510 -71896.45627292 -6 3 5 2 6 80602.07727645 71871.11171203 66916.53928081 -6 3 5 2 7 100.88549218 -885.18503361 3068.82355361 -6 3 5 2 8 -3080.93881074 -1554.38427629 0.47132742 -6 3 5 3 1 535.34225497 1561.00428417 2.81725254 -6 3 5 3 2 -533.45694528 -1563.89652062 -6.07369655 -6 3 5 3 3 1559.45104607 536.92762902 3.81346732 -6 3 5 3 4 -1563.13596955 -534.27105629 -6.53431198 -6 3 5 3 5 -71892.86775733 -71890.20047260 -74116.23703657 -6 3 5 3 6 71888.96859411 71884.39457573 74132.30501685 -6 3 5 3 7 -3065.29930993 -3064.78513457 -9458.09523201 -6 3 5 3 8 3071.21232668 3070.83740714 9448.26162808 -6 1 6 1 1 -74108.86718962 67033.99621666 -67027.94394409 -6 1 6 1 2 0.94265484 -7.85188636 -8.58030147 -6 1 6 1 3 74100.05122443 -67048.70377461 -67036.38498973 -6 1 6 1 4 3.67421149 3.17074811 5.16317766 -6 1 6 1 5 73986.62199565 66835.49238828 66912.55442171 -6 1 6 1 6 120.60625998 218.71734757 126.29432500 -6 1 6 1 7 -74102.76135711 -67030.26844523 67035.78511846 -6 1 6 1 8 -0.29993563 -4.61686633 -6.82353563 -6 1 6 2 1 71997.72739663 -72005.91135459 80806.21560991 -6 1 6 2 2 -3.70634745 1.02835074 -2960.10759904 -6 1 6 2 3 -72005.90064260 71997.66312471 80804.07321254 -6 1 6 2 4 -2.50660492 -0.59987126 -2960.06475109 -6 1 6 2 5 71805.62933640 71801.24813377 80611.08605739 -6 1 6 2 6 219.38149075 221.69527991 -328882.41972007 -6 1 6 2 7 -72008.63219925 -72012.83129810 80808.80791073 -6 1 6 2 8 -2.24951724 -2.37806108 11772.36643168 -6 1 6 3 1 -71994.25671289 80814.11034422 -72003.69397331 -6 1 6 3 2 -9.12661280 11771.12384121 -0.88909491 -6 1 6 3 3 -71997.77024458 80814.46383978 72003.19050993 -6 1 6 3 4 -7.32699901 -2964.62805749 -1.41398226 -6 1 6 3 5 71865.99138231 80595.68222030 71885.44435044 -6 1 6 3 6 126.64782056 -328878.02780546 115.13243470 -6 1 6 3 7 72010.58178086 80799.48848216 -72005.41860319 -6 1 6 3 8 5.09890574 -2952.14859281 7.96971822 -6 2 6 1 1 71997.98448432 -72006.48980188 80806.76192124 -6 2 6 1 2 -3.64207553 0.99621478 -2960.13973500 -6 2 6 1 3 -72005.86850664 71997.29891716 80803.90182075 -6 2 6 1 4 -2.47446896 -0.57844729 -2960.08617506 -6 2 6 1 5 71805.05088911 71800.43402277 80610.40049023 -6 2 6 1 6 219.60644248 223.98764510 -328882.22690430 -6 2 6 1 7 -72008.73931912 -72013.22764161 80809.01143848 -6 2 6 1 8 -2.29236519 -2.41019704 11772.27002380 -6 2 6 2 1 -67051.63885901 74101.29381491 -67037.45618841 -6 2 6 2 2 3.59922758 3.70634745 5.31314548 -6 2 6 2 3 67035.00314342 -74109.18854922 -67028.58666330 -6 2 6 2 4 -6.14868045 1.09262266 -7.28415106 -6 2 6 2 5 66839.43439945 73988.12167381 66914.09694781 -6 2 6 2 6 218.62093968 117.68188757 125.30882221 -6 2 6 2 7 -67034.73534375 -74102.69708519 67035.95651025 -6 2 6 2 8 -4.11340295 -0.34278358 -7.03777536 -6 2 6 3 1 80810.80034028 -71998.15587611 72003.28691781 -6 2 6 3 2 -2964.13530609 -7.68049457 -1.53181412 -6 2 6 3 3 80812.82490580 -71994.81373621 -72004.45452438 -6 2 6 3 4 11774.00536567 -7.19845517 -1.58537405 -6 2 6 3 5 80596.59273918 71866.76264537 71886.21561349 -6 2 6 3 6 -328878.56340480 124.62325505 115.75372993 -6 2 6 3 7 80800.32401714 72011.14951616 -72006.03989843 -6 2 6 3 8 -2951.62370545 5.37741740 8.05541411 -6 3 6 1 1 -71993.80680944 80814.76377542 -72003.28691781 -6 3 6 1 2 -8.95522101 11771.27380902 -0.73912709 -6 3 6 1 3 -71996.84901371 80814.72092747 72001.17665640 -6 3 6 1 4 -7.53052676 -2964.67090544 -1.24259047 -6 3 6 1 5 71869.04429857 80598.61730469 71888.22946702 -6 3 6 1 6 121.34538707 -328881.92696867 111.68317493 -6 3 6 1 7 72011.16022815 80800.04550548 -72004.90442782 -6 3 6 1 8 5.76304893 -2952.74846407 8.92308505 -6 3 6 2 1 80810.54325260 -71997.84522849 72003.58685344 -6 3 6 2 2 -2964.26384994 -7.83046239 -1.66035796 -6 3 6 2 3 80812.81419381 -71994.98512800 -72001.81937561 -6 3 6 2 4 11774.05892561 -7.06991132 -1.73534187 -6 3 6 2 5 80597.86746561 71868.09093174 71888.01522728 -6 3 6 2 6 -328877.37437426 124.04480776 110.18349677 -6 3 6 2 7 80798.52440335 72009.45702224 -72003.74753324 -6 3 6 2 8 -2952.30927261 6.09512052 7.20916715 -6 3 6 3 1 -67028.88659893 67027.62258448 -74118.59367368 -6 3 6 3 2 -1.15689458 3.41712381 3.37427586 -6 3 6 3 3 67026.88345739 -67030.23630927 -74119.04357713 -6 3 6 3 4 5.25958554 -1.58537405 4.49903448 -6 3 6 3 5 66910.30490447 66909.74788115 74140.36043096 -6 3 6 3 6 108.66239464 110.80479201 -4.97036190 -6 3 6 3 7 -67020.57409713 -67018.93516314 74089.93910885 -6 3 6 3 8 -0.53559934 -0.84624696 4.67042627 -6 1 7 1 1 9466.54698963 3061.53940255 -3062.02144196 -6 1 7 1 2 -0.32135961 1557.50146447 -538.84507467 -6 1 7 1 3 -1.54252611 -1556.58023360 536.17778994 -6 1 7 1 4 -9464.88663167 -3057.84376708 3056.60117661 -6 1 7 1 5 -1.51039015 -537.67746810 1557.05156102 -6 1 7 1 6 -74103.55404414 -72014.41667215 72011.99576312 -6 1 7 1 7 74104.92517845 72008.84643899 -72003.20122192 -6 1 7 1 8 0.19281576 538.52371507 -1557.84424805 -6 1 7 2 1 -3060.65030764 889.20202868 91.95169515 -6 1 7 2 2 -890.29465133 3057.07250403 -88.71667512 -6 1 7 2 3 -1557.69428023 1.24259047 3076.82540779 -6 1 7 2 4 0.97479080 1554.78061981 -3072.62630894 -6 1 7 2 5 533.77830489 -2.69942069 3080.03900384 -6 1 7 2 6 -67034.12476050 -72011.84579531 80799.93838561 -6 1 7 2 7 72008.20371978 67050.69620416 -80809.91124537 -6 1 7 2 8 -0.21423974 -538.32018732 -3077.42527905 -6 1 7 3 1 3060.37179598 91.28755196 889.26630060 -6 1 7 3 2 -1.13547061 -3075.53996937 -535.94212623 -6 1 7 3 3 -538.63083493 3076.54689613 -0.17139179 -6 1 7 3 4 -2.08883744 -3073.89032339 1559.83667760 -6 1 7 3 5 1553.95579682 3075.92560089 1.67106995 -6 1 7 3 6 67039.09512240 80805.25153109 -71999.59128235 -6 1 7 3 7 -72000.44824129 -80809.11855834 67022.12733523 -6 1 7 3 8 888.70927728 -90.38774507 3062.77128104 -6 2 7 1 1 1.24259047 -1557.94065593 3076.79327183 -6 2 7 1 2 1554.67349994 0.87838292 -3072.77627676 -6 2 7 1 3 889.84474789 -3061.44299467 91.33039991 -6 2 7 1 4 3056.18340912 -889.60908418 -89.33797035 -6 2 7 1 5 -2.62443678 533.54264118 3080.12469974 -6 2 7 1 6 -72012.83129810 -67032.50725049 80800.36686509 -6 2 7 1 7 67052.02449053 72007.28248891 -80809.11855834 -6 2 7 1 8 -538.51300308 -0.13925583 -3077.35029514 -6 2 7 2 1 -1558.42269534 -0.23566371 534.83879159 -6 2 7 2 2 -3057.97231093 -9464.96161558 3056.54761668 -6 2 7 2 3 3061.10021109 9466.39702182 -3062.10713785 -6 2 7 2 4 1556.60165757 0.32135961 -539.45565792 -6 2 7 2 5 -538.03096367 -1.37113432 1557.26580076 -6 2 7 2 6 -72011.13880417 -74104.51812295 72013.10980975 -6 2 7 2 7 72009.48915820 74104.06821950 -72002.17287118 -6 2 7 2 8 538.34161129 0.26779967 -1557.80140010 -6 2 7 3 1 3075.79705705 -537.82743592 -0.69627915 -6 2 7 3 2 -3074.14741108 -2.16382134 1559.78311767 -6 2 7 3 3 90.50557692 3061.27160288 889.86617186 -6 2 7 3 4 -3076.40764030 -0.57844729 -536.54199750 -6 2 7 3 5 3075.63637725 1554.20217252 1.67106995 -6 2 7 3 6 80806.34415375 67036.08505410 -71998.84144327 -6 2 7 3 7 -80807.22253667 -71999.84837003 67021.89167151 -6 2 7 3 8 -90.53771288 888.81639715 3062.85697693 -6 3 7 1 1 -1.24259047 3077.84304654 -1557.54431241 -6 3 7 1 2 534.95662344 -3075.06864194 0.04284795 -6 3 7 1 3 -0.22495172 3076.84683176 538.12737155 -6 3 7 1 4 -3059.61124492 -90.79480057 -890.89452260 -6 3 7 1 5 -885.96700865 100.47843668 -3064.52804688 -6 3 7 1 6 72010.33540516 80798.86718693 -67021.60244787 -6 3 7 1 7 -67039.12725836 -80811.10027591 71996.83830172 -6 3 7 1 8 -1559.02256660 -3077.14676739 -0.44990345 -6 3 7 2 1 3075.94702487 0.40705550 537.43109241 -6 3 7 2 2 -90.98761633 -3059.70765280 -890.93737055 -6 3 7 2 3 3077.62880680 -1.28543842 -1557.65143228 -6 3 7 2 4 -3075.94702487 535.59934265 -0.59987126 -6 3 7 2 5 100.25348496 -885.90273672 -3064.48519893 -6 3 7 2 6 80800.01336952 72009.38203833 -67020.80976084 -6 3 7 2 7 -80809.60059775 -67039.59858578 71997.30962915 -6 3 7 2 8 -3077.29673521 -1558.91544673 -0.33207159 -6 3 7 3 1 -1560.54366873 -534.96733543 1.55323809 -6 3 7 3 2 536.39202968 1559.38677415 3.96343514 -6 3 7 3 3 -536.60626942 -1558.85117481 2.69942069 -6 3 7 3 4 1557.76926414 538.02025168 2.91366042 -6 3 7 3 5 3070.62316740 3071.12663078 -9457.27040902 -6 3 7 3 6 -71998.86286724 -72002.82630238 74085.98638570 -6 3 7 3 7 71993.69968958 71989.92907020 -74110.13120406 -6 3 7 3 8 -3062.42849746 -3061.86076215 9470.25333708 -6 1 8 1 1 0.02142397 0.08569589 -890.03756365 -6 1 8 1 2 0.34278358 0.38563153 1.22116650 -6 1 8 1 3 -0.06427192 -0.06427192 -894.32235839 -6 1 8 1 4 -0.29993563 -0.27851166 1.17831855 -6 1 8 1 5 -0.08569589 -0.04284795 883.56752359 -6 1 8 1 6 -3.35285189 -0.42847947 5.50596124 -6 1 8 1 7 0.06427192 -0.04284795 887.53095873 -6 1 8 1 8 3.40641182 0.47132742 5.53809720 -6 1 8 2 1 -536.49914955 -536.39202968 -91.28755196 -6 1 8 2 2 -0.02142397 0.19281576 3374.16873886 -6 1 8 2 3 536.52057352 536.37060571 -93.32282946 -6 1 8 2 4 -0.77126305 0.66414318 2915.58858168 -6 1 8 2 5 -533.30697747 533.28555349 -110.29061664 -6 1 8 2 6 -5.42026535 -0.29993563 -2952.50208837 -6 1 8 2 7 537.87028387 -537.97740374 -89.42366625 -6 1 8 2 8 1.54252611 4.15625090 -2952.57707228 -6 1 8 3 1 1557.56573639 -3076.71828792 3060.67173161 -6 1 8 3 2 0.40705550 2914.32456723 -1.03906272 -6 1 8 3 3 1557.63000831 -3076.76113587 -3058.65787809 -6 1 8 3 4 0.47132742 574.74094262 -1.26401445 -6 1 8 3 5 -1554.39498828 -3080.38178742 -3071.16947873 -6 1 8 3 6 -6.22366436 11773.20196666 6.08440853 -6 1 8 3 7 -1558.63693507 -3077.03964753 3064.37807907 -6 1 8 3 8 3.08505221 -2951.43088969 0.69627915 -6 2 8 1 1 536.37060571 536.39202968 -91.37324786 -6 2 8 1 2 0.85695895 -0.58915928 2915.58858168 -6 2 8 1 3 -536.43487763 -536.30633379 -93.53706920 -6 2 8 1 4 -0.06427192 -0.06427192 3374.14731488 -6 2 8 1 5 533.24270555 -533.30697747 -110.29061664 -6 2 8 1 6 -1.49967816 -4.24194679 -2952.58778427 -6 2 8 1 7 -537.91313182 537.91313182 -89.40224228 -6 2 8 1 8 5.42026535 0.28922365 -2952.45924042 -6 2 8 2 1 0.02142397 0.02142397 -889.97329173 -6 2 8 2 2 -0.17139179 0.05355993 1.19974253 -6 2 8 2 3 0.08569589 0.02142397 -894.49375018 -6 2 8 2 4 0.01071199 0.10711987 1.30686240 -6 2 8 2 5 0.02142397 -0.02142397 883.48182770 -6 2 8 2 6 -3.05291625 -0.68556716 5.42026535 -6 2 8 2 7 -0.02142397 -0.06427192 887.48811078 -6 2 8 2 8 3.06362824 0.74983908 5.54880919 -6 2 8 3 1 -3076.76113587 1557.60858433 -3060.80027546 -6 2 8 3 2 574.71951864 0.39634351 -0.87838292 -6 2 8 3 3 -3076.67543997 1557.65143228 3058.61503014 -6 2 8 3 4 2914.34599120 0.42847947 -0.70699113 -6 2 8 3 5 -3080.42463537 -1554.35214033 -3070.91239105 -6 2 8 3 6 11773.14840672 -6.34149622 8.05541411 -6 2 8 3 7 -3076.88967971 -1558.72263097 3064.44235099 -6 2 8 3 8 -2951.45231366 3.14932413 2.53874088 -6 3 8 1 1 1557.63000831 -3076.67543997 -3060.69315559 -6 3 8 1 2 0.32135961 574.65524672 1.09262266 -6 3 8 1 3 1557.71570420 -3076.69686395 3060.62888367 -6 3 8 1 4 0.55702332 2914.36741517 0.89980690 -6 3 8 1 5 -1554.43783623 -3080.42463537 3071.08378284 -6 3 8 1 6 3.80275533 -2952.05218492 -1.49967816 -6 3 8 1 7 -1558.72263097 -3076.99679958 -3064.42092701 -6 3 8 1 8 -6.89851953 11773.72685401 -7.03777536 -6 3 8 2 1 -3076.71828792 1557.60858433 3060.75742751 -6 3 8 2 2 2914.45311107 0.51417537 0.73912709 -6 3 8 2 3 -3076.80398381 1557.56573639 -3060.58603572 -6 3 8 2 4 574.58026281 0.34278358 1.09262266 -6 3 8 2 5 -3080.36036345 -1554.39498828 3071.21232668 -6 3 8 2 6 -2952.08432088 3.83489129 -1.56395008 -6 3 8 2 7 -3076.91110368 -1558.55123918 -3064.39950304 -6 3 8 2 8 11773.75898997 -6.91994351 -6.98421543 -6 3 8 3 1 -0.02142397 -0.06427192 -9469.88912953 -6 3 8 3 2 -1.69249392 0.93194286 2.36734909 -6 3 8 3 3 -0.02142397 -0.04284795 -9461.16957223 -6 3 8 3 4 1.69249392 -0.96407882 2.39948506 -6 3 8 3 5 0.04284795 0.08569589 9444.71596043 -6 3 8 3 6 11.97600130 6.87709556 4.90608998 -6 3 8 3 7 -0.00000000 -0.14996782 9471.79586319 -6 3 8 3 8 -11.99742528 -6.80211165 4.92751395 -7 1 1 1 1 -0.02142397 -0.03213596 -5.18460164 -7 1 1 1 2 -9468.73223495 0.06427192 3.06362824 -7 1 1 1 3 0.02142397 0.02142397 0.51417537 -7 1 1 1 4 9468.76437091 -0.02142397 2.93508440 -7 1 1 1 5 -0.02142397 0.02142397 -0.14996782 -7 1 1 1 6 9470.91748027 0.66414318 -0.85695895 -7 1 1 1 7 0.08569589 -0.03213596 0.38563153 -7 1 1 1 8 -9470.85320835 -0.77126305 -0.83553497 -7 1 1 2 1 0.04284795 0.07498391 -11783.73184973 -7 1 1 2 2 3060.43606790 1561.33635576 3077.53239892 -7 1 1 2 3 -0.02142397 0.08569589 -2915.16010220 -7 1 1 2 4 -3060.43606790 -1561.29350781 3077.61809482 -7 1 1 2 5 -0.02142397 -0.04284795 -574.71951864 -7 1 1 2 6 3060.80027546 -1557.43719255 3077.51097495 -7 1 1 2 7 -0.00000000 0.05355993 2963.54614682 -7 1 1 2 8 -3060.82169943 1557.50146447 3077.36100713 -7 1 1 3 1 -1.77818982 -11783.18553841 0.04284795 -7 1 1 3 2 3062.94267283 3079.61052437 1556.34456989 -7 1 1 3 3 0.73912709 -573.58404804 0.02142397 -7 1 1 3 4 3062.94267283 3079.63194834 -1556.21602604 -7 1 1 3 5 -0.80339901 -2915.61000565 -0.00000000 -7 1 1 3 6 -3061.18590698 3076.58974408 -1557.39434460 -7 1 1 3 7 -1.67106995 2959.93620725 0.02142397 -7 1 1 3 8 -3061.20733096 3076.62188004 1557.31936069 -7 2 1 1 1 -0.06427192 -0.05355993 2957.22607457 -7 2 1 1 2 -3063.52112012 1556.38741783 3075.68993718 -7 2 1 1 3 -0.00000000 0.02142397 -573.36980830 -7 2 1 1 4 3063.47827217 -1556.38741783 3075.45427347 -7 2 1 1 5 0.10711987 -0.00000000 -2914.26029531 -7 2 1 1 6 -3061.07878711 -1557.15868089 3076.43977626 -7 2 1 1 7 -0.04284795 -0.01071199 -11773.64115812 -7 2 1 1 8 3061.05736314 1557.21224082 3076.40764030 -7 2 1 2 1 -0.04284795 0.02142397 -2.08883744 -7 2 1 2 2 -888.96636496 0.53559934 2.46375698 -7 2 1 2 3 0.04284795 0.02142397 0.72841511 -7 2 1 2 4 889.03063689 -0.55702332 2.31378916 -7 2 1 2 5 -0.04284795 -0.00000000 -1.97100558 -7 2 1 2 6 888.62358139 -0.92123087 -0.00000000 -7 2 1 2 7 -0.02142397 0.03213596 -1.86388571 -7 2 1 2 8 -888.60215741 0.92123087 0.29993563 -7 2 1 3 1 2960.34326275 -1.68178194 -0.06427192 -7 2 1 3 2 92.01596707 -534.87092755 538.25591539 -7 2 1 3 3 -2914.67806279 0.70699113 -0.02142397 -7 2 1 3 4 92.02667905 -534.93519947 -538.12737155 -7 2 1 3 5 -3373.81524329 -1.07119869 0.19281576 -7 2 1 3 6 90.40916904 535.83500637 537.78458797 -7 2 1 3 7 2963.47116291 -0.05355993 0.03213596 -7 2 1 3 8 90.30204917 535.93141425 -537.81672393 -7 3 1 1 1 -1.02835074 2959.38989592 -0.02142397 -7 3 1 1 2 -3058.87211782 3075.02579400 1559.60101389 -7 3 1 1 3 0.26779967 -2913.70327199 -0.10711987 -7 3 1 1 4 -3058.88282981 3074.94009810 -1559.53674197 -7 3 1 1 5 0.40705550 -574.91233441 0.02142397 -7 3 1 1 6 3060.65030764 3076.03272076 -1559.23680634 -7 3 1 1 7 -3.19217208 -11772.98772692 -0.04284795 -7 3 1 1 8 3060.67173161 3076.07556871 1559.22609435 -7 3 1 2 1 2962.05718064 -2.52802890 0.03213596 -7 3 1 2 2 89.53078612 539.75559355 -536.47772558 -7 3 1 2 3 -3371.54430208 0.55702332 -0.02142397 -7 3 1 2 4 89.61648201 539.75559355 536.62769339 -7 3 1 2 5 -2914.04605557 0.10711987 0.04284795 -7 3 1 2 6 89.59505804 -538.04167566 -536.13494200 -7 3 1 2 7 2965.18508081 -1.56395008 -0.03213596 -7 3 1 2 8 89.61648201 -537.96669175 536.02782213 -7 3 1 3 1 -0.17139179 -0.06427192 4.86324203 -7 3 1 3 2 -890.85167465 -0.14996782 -2.89223645 -7 3 1 3 3 0.04284795 0.02142397 2.16382134 -7 3 1 3 4 890.84096266 0.27851166 -2.74226863 -7 3 1 3 5 -0.05355993 -0.02142397 -2.46375698 -7 3 1 3 6 888.94494099 -0.12854384 1.92815763 -7 3 1 3 7 0.04284795 -0.04284795 -2.71013267 -7 3 1 3 8 -889.00921291 0.11783186 2.02456552 -7 1 2 1 1 -9469.63204185 3060.52176380 3063.70322389 -7 1 2 1 2 74061.56305567 -71906.32201282 -71941.36092181 -7 1 2 1 3 -0.23566371 -1555.85181849 -535.47079881 -7 1 2 1 4 -0.86767094 535.79215842 1555.63757875 -7 1 2 1 5 -0.97479080 -534.48529602 -1556.49453770 -7 1 2 1 6 -1.63893399 1553.28094165 536.41345366 -7 1 2 1 7 -74051.57948392 71904.77948671 71937.50460655 -7 1 2 1 8 9463.26912166 -3057.64023933 -3059.86833260 -7 1 2 2 1 0.32135961 1561.90409106 3079.65337232 -7 1 2 2 2 -71903.50476027 66918.12465487 80698.69939786 -7 1 2 2 3 890.95879452 3065.06364622 93.13001370 -7 1 2 2 4 -535.43866285 -0.36420755 -3078.30366197 -7 1 2 2 5 2.35663711 -537.50607631 3074.53304260 -7 1 2 2 6 1557.34078466 -0.10711987 -3075.02579400 -7 1 2 2 7 66929.13657735 -71897.27038392 -80701.79516206 -7 1 2 2 8 3058.78642193 890.25180339 -90.83764851 -7 1 2 3 1 3.68492348 3078.04657429 1556.69806545 -7 1 2 3 2 -71942.56066434 80699.36354105 66983.76771030 -7 1 2 3 3 2.42090903 3075.49712142 -538.23449142 -7 1 2 3 4 1556.83732128 -3078.92495721 0.47132742 -7 1 2 3 5 890.72313081 93.15143767 3062.87840091 -7 1 2 3 6 -538.50229109 -3072.51918907 -0.27851166 -7 1 2 3 7 66969.97067124 -80706.03710886 -71956.21844758 -7 1 2 3 8 3057.35101569 -88.59884326 890.78740273 -7 2 2 1 1 -3064.22811125 -890.16610749 93.64418907 -7 2 2 1 2 -66921.18828311 71901.97294615 80699.45994893 -7 2 2 1 3 -1561.08998006 0.51417537 3079.07492503 -7 2 2 1 4 0.19281576 535.29940702 -3078.23939005 -7 2 2 1 5 537.73102804 -2.05670148 3074.49019465 -7 2 2 1 6 -890.45533114 -3058.76499795 -90.85907249 -7 2 2 1 7 71899.94838064 -66928.81521775 -80701.81658604 -7 2 2 1 8 -0.79268703 -1558.05848778 -3075.65780122 -7 2 2 2 1 1555.76612260 0.38563153 -535.53507073 -7 2 2 2 2 71905.39006996 -74063.19127767 -71940.86817042 -7 2 2 2 3 -3059.85762061 9470.53184874 3063.07121667 -7 2 2 2 4 -535.97426219 0.70699113 1555.65900273 -7 2 2 2 5 534.53885596 1.19974253 -1556.40884181 -7 2 2 2 6 3057.52240748 -9463.20484974 -3059.96474048 -7 2 2 2 7 -71903.18340067 74052.50071479 71938.10447781 -7 2 2 2 8 -1554.22359649 0.98550279 535.76002246 -7 2 2 3 1 3075.47569744 2.39948506 538.19164347 -7 2 2 3 2 80699.20286125 -71942.28215268 -66983.64987845 -7 2 2 3 3 3077.99301436 3.59922758 -1556.68735347 -7 2 2 3 4 -3078.87139728 1556.77304936 -0.40705550 -7 2 2 3 5 93.18357364 890.76597876 -3062.89982488 -7 2 2 3 6 -88.57741929 3057.37243966 -890.74455478 -7 2 2 3 7 -80705.80144515 66969.91711130 71955.92922393 -7 2 2 3 8 -3072.49776510 -538.48086712 0.32135961 -7 3 2 1 1 -3059.60053293 90.86978447 -889.53410027 -7 3 2 1 2 -66971.23468569 80709.01504120 71950.68035037 -7 3 2 1 3 540.17336104 3075.26145771 -0.38563153 -7 3 2 1 4 -884.69228221 -101.54963537 -3065.25646199 -7 3 2 1 5 -1559.77240568 3079.73906821 1.69249392 -7 3 2 1 6 -0.59987126 -3073.16190828 537.57034824 -7 3 2 1 7 71938.87574086 -80703.88399950 -66977.13699044 -7 3 2 1 8 -3.10647619 -3076.24696050 -1557.69428023 -7 3 2 2 1 3075.43284950 540.00196925 0.51417537 -7 3 2 2 2 80709.48636862 -66969.98138322 -71951.36591753 -7 3 2 2 3 90.28062520 -3060.50033982 890.10183557 -7 3 2 2 4 -101.67817921 -884.85296201 3065.21361404 -7 3 2 2 5 3079.64266033 -1559.92237350 -1.77818982 -7 3 2 2 6 -3076.85754375 -4.00628308 1558.33699944 -7 3 2 2 7 -80703.46623201 71940.03263544 66976.52640719 -7 3 2 2 8 -3072.99051650 -0.78197504 -537.44180439 -7 3 2 3 1 1559.00114263 -536.80979717 -3.22430804 -7 3 2 3 2 71946.00992411 -71945.95636417 -74125.82426480 -7 3 2 3 3 536.80979717 -1559.06541455 -3.19217208 -7 3 2 3 4 3067.75235492 -3067.67737102 -9458.21306386 -7 3 2 3 5 -3058.12227874 3058.14370272 9466.35417387 -7 3 2 3 6 -536.25277385 1559.38677415 2.97793235 -7 3 2 3 7 -71955.67213625 71955.71498420 74118.09021030 -7 3 2 3 8 -1559.40819813 536.26348584 3.02078029 -7 1 3 1 1 -0.12854384 -0.02142397 0.63200722 -7 1 3 1 2 -0.55702332 889.00921291 2.37806108 -7 1 3 1 3 -0.03213596 -0.00000000 -2.22809327 -7 1 3 1 4 0.50346338 -889.00921291 2.52802890 -7 1 3 1 5 0.01071199 0.08569589 -1.97100558 -7 1 3 1 6 -0.87838292 888.70927728 0.29993563 -7 1 3 1 7 -0.00000000 0.04284795 -1.91744565 -7 1 3 1 8 0.85695895 -888.58073344 0.26779967 -7 1 3 2 1 -0.00000000 -0.06427192 -573.47692817 -7 1 3 2 2 -1556.45168975 3063.47827217 3075.73278513 -7 1 3 2 3 -0.00000000 -0.02142397 2957.12966669 -7 1 3 2 4 1556.44097777 -3063.58539204 3075.75420910 -7 1 3 2 5 -0.03213596 -0.04284795 -2914.34599120 -7 1 3 2 6 -1557.22295281 -3061.05736314 3076.31123242 -7 1 3 2 7 -0.12854384 0.02142397 -11773.73756600 -7 1 3 2 8 1557.26580076 3061.05736314 3076.41835229 -7 1 3 3 1 0.62129524 -2914.64592683 -0.01071199 -7 1 3 3 2 -534.89235152 91.97311912 -538.21306745 -7 1 3 3 3 -1.74605386 2960.32183877 -0.06427192 -7 1 3 3 4 -534.96733543 91.86599925 538.38445924 -7 1 3 3 5 -1.04977471 -3373.76168336 0.04284795 -7 1 3 3 6 535.89927829 90.36632109 537.61319618 -7 1 3 3 7 -0.10711987 2963.59970675 -0.00000000 -7 1 3 3 8 536.00639816 90.23777725 -537.87028387 -7 2 3 1 1 -0.00000000 0.03213596 -2914.98871041 -7 2 3 1 2 -1561.29350781 -3058.29367053 3077.46812700 -7 2 3 1 3 0.03213596 -0.08569589 -11782.43569933 -7 2 3 1 4 1561.28279583 3058.35794245 3077.63951879 -7 2 3 1 5 0.05355993 -0.06427192 -574.97660633 -7 2 3 1 6 -1557.45861652 3060.80027546 3077.33958316 -7 2 3 1 7 0.04284795 0.06427192 2962.26070839 -7 2 3 1 8 1557.39434460 -3060.82169943 3077.31815918 -7 2 3 2 1 -0.04284795 0.05355993 0.65343120 -7 2 3 2 2 -0.08569589 9468.66796303 3.06362824 -7 2 3 2 3 -0.00000000 0.02142397 -3.92058719 -7 2 3 2 4 0.05355993 -9468.77508290 2.87081248 -7 2 3 2 5 0.02142397 0.02142397 -0.29993563 -7 2 3 2 6 0.81411100 9468.58226714 -1.02835074 -7 2 3 2 7 0.08569589 -0.02142397 -0.85695895 -7 2 3 2 8 -0.77126305 -9468.67867502 -0.89980690 -7 2 3 3 1 -573.51977611 0.71770312 -0.04284795 -7 2 3 3 2 3079.65337232 3062.89982488 -1556.32314591 -7 2 3 3 3 -11783.20696238 -1.82103777 -0.10711987 -7 2 3 3 4 3079.66408430 3062.87840091 1556.40884181 -7 2 3 3 5 -2915.64214161 -0.77126305 -0.00000000 -7 2 3 3 6 3076.58974408 -3061.14305904 -1557.22295281 -7 2 3 3 7 2959.89335930 -1.59608604 0.05355993 -7 2 3 3 8 3076.54689613 -3061.28231486 1557.22295281 -7 3 3 1 1 0.59987126 -3372.01562950 0.05355993 -7 3 3 1 2 539.75559355 91.84457528 536.45630160 -7 3 3 1 3 -3.70634745 2960.27899083 0.08569589 -7 3 3 1 4 539.74488157 91.78030336 -536.58484545 -7 3 3 1 5 -0.18210378 -2914.51738299 0.02142397 -7 3 3 1 6 -537.95597976 89.53078612 -535.94212623 -7 3 3 1 7 -0.21423974 2963.36404304 0.05355993 -7 3 3 1 8 -538.02025168 89.56292208 536.15636597 -7 3 3 2 1 -2913.72469596 0.19281576 -0.04284795 -7 3 3 2 2 3075.02579400 -3058.89354180 -1559.70813376 -7 3 3 2 3 2959.58271168 -1.04977471 0.08569589 -7 3 3 2 4 3075.01508201 -3058.82926988 1559.62243786 -7 3 3 2 5 -574.90162242 0.53559934 0.04284795 -7 3 3 2 6 3076.07556871 3060.62888367 -1559.19395839 -7 3 3 2 7 -11772.92345500 -3.19217208 0.02142397 -7 3 3 2 8 3075.98987281 3060.59674771 1559.15111044 -7 3 3 3 1 -0.06427192 0.02142397 2.28165320 -7 3 3 3 2 0.17139179 890.78740273 -2.97793235 -7 3 3 3 3 0.01071199 -0.02142397 4.73469819 -7 3 3 3 4 -0.11783186 -890.74455478 -2.78511658 -7 3 3 3 5 -0.03213596 0.10711987 -2.46375698 -7 3 3 3 6 -0.14996782 888.90209304 2.14239737 -7 3 3 3 7 0.04284795 -0.06427192 -2.74226863 -7 3 3 3 8 0.10711987 -889.04134887 2.03527750 -7 1 4 1 1 9469.61061787 -3060.53247578 3063.70322389 -7 1 4 1 2 0.83553497 -535.79215842 1555.59473081 -7 1 4 1 3 0.23566371 1555.85181849 -535.38510292 -7 1 4 1 4 -74061.54163170 71906.24702891 -71941.29664989 -7 1 4 1 5 0.98550279 534.44244807 -1556.49453770 -7 1 4 1 6 -9463.22627371 3057.65095132 -3059.94331651 -7 1 4 1 7 74051.42951611 -71904.56524697 71937.45104661 -7 1 4 1 8 1.62822200 -1553.29165363 536.41345366 -7 1 4 2 1 -0.19281576 -1561.79697119 3079.83547609 -7 1 4 2 2 535.40652689 0.37491954 -3078.38935787 -7 1 4 2 3 -891.06591439 -3065.14934212 93.32282946 -7 1 4 2 4 71903.59045617 -66918.33889461 80696.65340837 -7 1 4 2 5 -2.97793235 538.14879553 3075.36857758 -7 1 4 2 6 -3058.87211782 -890.29465133 -90.75195262 -7 1 4 2 7 -66928.62240198 71896.98116028 -80701.09888292 -7 1 4 2 8 -1557.43719255 0.14996782 -3075.02579400 -7 1 4 3 1 3.57780361 3077.92874243 -1556.90159320 -7 1 4 3 2 1556.81589731 -3078.90353324 -0.46061543 -7 1 4 3 3 2.48518095 3075.53996937 537.99882771 -7 1 4 3 4 -71942.22859275 80699.11716535 -66981.23968141 -7 1 4 3 5 891.35513803 92.55156641 -3063.82105575 -7 1 4 3 6 3057.34030370 -88.56670730 -890.85167465 -7 1 4 3 7 66969.11371229 -80705.05160607 71954.96514512 -7 1 4 3 8 -538.49157911 -3072.49776510 0.32135961 -7 2 4 1 1 3064.33523112 890.27322736 93.85842881 -7 2 4 1 2 -0.17139179 -535.35296696 -3078.27152601 -7 2 4 1 3 1561.03642013 -0.55702332 3079.22489284 -7 2 4 1 4 66921.22041907 -71902.04793006 80697.25327964 -7 2 4 1 5 -538.40588321 2.74226863 3075.41142552 -7 2 4 1 6 0.81411100 1558.03706381 -3075.66851321 -7 2 4 1 7 -71899.32708540 66928.17249854 -80700.88464318 -7 2 4 1 8 890.44461915 3058.66859007 -90.93405640 -7 2 4 2 1 -1555.72327465 -0.40705550 -535.54578272 -7 2 4 2 2 535.94212623 -0.77126305 1555.66971471 -7 2 4 2 3 3059.91118055 -9470.51042477 3063.11406462 -7 2 4 2 4 -71905.26152612 74062.84849409 -71940.58965876 -7 2 4 2 5 -534.53885596 -1.15689458 -1556.40884181 -7 2 4 2 6 1554.25573245 -0.94265484 535.74931047 -7 2 4 2 7 71902.90488901 -74052.17935519 71937.87952608 -7 2 4 2 8 -3057.43671158 9463.18342576 -3059.95402849 -7 2 4 3 1 3075.49712142 2.47446896 -537.96669175 -7 2 4 3 2 -3078.90353324 1556.82660929 0.47132742 -7 2 4 3 3 3077.96087839 3.55637964 1556.88016923 -7 2 4 3 4 80699.42781297 -71942.41069652 66981.71100883 -7 2 4 3 5 92.54085442 891.32300207 3063.75678383 -7 2 4 3 6 -3072.45491715 -538.47015513 -0.29993563 -7 2 4 3 7 -80705.37296567 66969.40293593 -71955.20080883 -7 2 4 3 8 -88.60955525 3057.35101569 890.78740273 -7 3 4 1 1 -3059.60053293 90.88049646 889.51267629 -7 3 4 1 2 -884.66014625 -101.53892338 3065.24575000 -7 3 4 1 3 540.16264905 3075.32572963 0.29993563 -7 3 4 1 4 -66971.19183774 80708.95076928 -71950.53038256 -7 3 4 1 5 -1559.74026972 3079.69622027 -1.75676584 -7 3 4 1 6 -3.09576420 -3076.22553652 1557.65143228 -7 3 4 1 7 71938.79004497 -80704.01254334 66977.15841442 -7 3 4 1 8 -0.62129524 -3073.09763636 -537.49536433 -7 3 4 2 1 3075.34715360 540.05552919 -0.50346338 -7 3 4 2 2 -101.54963537 -884.67085824 -3065.24575000 -7 3 4 2 3 90.23777725 -3060.47891585 -890.20895544 -7 3 4 2 4 80709.01504120 -66968.96374447 71950.61607845 -7 3 4 2 5 3079.61052437 -1559.90094952 1.82103777 -7 3 4 2 6 -3073.14048431 -0.62129524 537.48465234 -7 3 4 2 7 -80703.29484022 71937.99735794 -66976.47284726 -7 3 4 2 8 -3076.24696050 -3.10647619 -1557.70499222 -7 3 4 3 1 -1559.06541455 536.82050916 -3.22430804 -7 3 4 3 2 -3067.69879499 3067.69879499 -9458.20235188 -7 3 4 3 3 -536.78837320 1559.04399057 -3.21359606 -7 3 4 3 4 -71945.75283642 71945.79568437 -74125.70643295 -7 3 4 3 5 3058.11156676 -3058.16512669 9466.39702182 -7 3 4 3 6 1559.46175806 -536.19921392 2.99935632 -7 3 4 3 7 71955.58644035 -71955.57572837 74117.97237844 -7 3 4 3 8 536.19921392 -1559.44033409 2.95650837 -7 1 5 1 1 0.04284795 -0.00000000 -0.63200722 -7 1 5 1 2 -0.77126305 2.33521313 890.12325954 -7 1 5 1 3 0.03213596 -0.08569589 -0.83553497 -7 1 5 1 4 0.81411100 -2.33521313 890.03756365 -7 1 5 1 5 -0.03213596 -0.02142397 -4.00628308 -7 1 5 1 6 -0.74983908 -2.35663711 -886.69542375 -7 1 5 1 7 -0.02142397 0.03213596 -1.41398226 -7 1 5 1 8 0.72841511 2.42090903 -886.62043984 -7 1 5 2 1 -0.02142397 -0.10711987 -2915.89922929 -7 1 5 2 2 -534.76380768 -537.93455579 91.37324786 -7 1 5 2 3 0.12854384 0.14996782 -3374.53294641 -7 1 5 2 4 534.72095973 537.99882771 93.49422125 -7 1 5 2 5 0.62129524 -0.64271921 2950.72389855 -7 1 5 2 6 -537.24898863 533.90684873 101.89241895 -7 1 5 2 7 -0.59987126 0.61058325 2950.72389855 -7 1 5 2 8 537.14186876 -534.06752853 101.95669087 -7 1 5 3 1 -0.83553497 -574.62311076 0.02142397 -7 1 5 3 2 -1556.13033015 3074.79013029 3062.57846527 -7 1 5 3 3 -1.64964598 -2914.51738299 -0.00000000 -7 1 5 3 4 -1556.22673803 3074.81155426 -3062.68558514 -7 1 5 3 5 -3.57780361 2952.82344798 -0.04284795 -7 1 5 3 6 1557.90851997 3080.63887511 -3066.84183604 -7 1 5 3 7 2.72084466 -11774.38028521 -0.01071199 -7 1 5 3 8 1557.88709599 3080.61745113 3066.88468399 -7 2 5 1 1 -0.08569589 -0.16067980 -3374.50081045 -7 2 5 1 2 537.95597976 534.78523165 91.56606362 -7 2 5 1 3 0.05355993 0.08569589 -2915.93136525 -7 2 5 1 4 -537.99882771 -534.76380768 93.57991715 -7 2 5 1 5 0.66414318 -0.70699113 2950.72389855 -7 2 5 1 6 533.94969668 -537.37753247 101.97811484 -7 2 5 1 7 -0.57844729 0.59987126 2950.61677869 -7 2 5 1 8 -533.97112065 537.25970062 102.01025080 -7 2 5 2 1 -0.00000000 0.09640788 -0.80339901 -7 2 5 2 2 -2.39948506 0.83553497 890.16610749 -7 2 5 2 3 -0.06427192 0.02142397 -0.62129524 -7 2 5 2 4 2.37806108 -0.77126305 890.03756365 -7 2 5 2 5 -0.01071199 -0.08569589 -3.98485911 -7 2 5 2 6 -2.42090903 -0.81411100 -886.65257580 -7 2 5 2 7 -0.00000000 -0.03213596 -1.43540624 -7 2 5 2 8 2.44233300 0.74983908 -886.55616792 -7 2 5 3 1 -2914.58165491 -1.71391790 0.03213596 -7 2 5 3 2 3074.68301042 -1556.19460207 -3062.55704130 -7 2 5 3 3 -574.54812685 -0.79268703 0.02142397 -7 2 5 3 4 3074.75799433 -1556.32314591 3062.51419335 -7 2 5 3 5 2952.75917606 -3.51353169 -0.04284795 -7 2 5 3 6 3080.63887511 1557.95136791 -3066.84183604 -7 2 5 3 7 -11774.33743726 2.71013267 0.01071199 -7 2 5 3 8 3080.63887511 1557.91923195 3066.88468399 -7 3 5 1 1 0.38563153 -2914.49595902 -0.10711987 -7 3 5 1 2 -1559.02256660 3078.58217363 -3060.92881930 -7 3 5 1 3 0.37491954 -574.59097480 -0.04284795 -7 3 5 1 4 -1558.92615872 3078.56074966 3061.05736314 -7 3 5 1 5 12.29736091 -11774.44455713 0.06427192 -7 3 5 1 6 1555.10197941 3076.71828792 3068.59860189 -7 3 5 1 7 -5.42026535 2952.75917606 -0.04284795 -7 3 5 1 8 1555.20909928 3076.77184785 -3068.51290599 -7 3 5 2 1 -574.54812685 0.43919146 0.05355993 -7 3 5 2 2 3078.66786953 -1559.00114263 3060.84312340 -7 3 5 2 3 -2914.45311107 0.29993563 0.04284795 -7 3 5 2 4 3078.66786953 -1558.89402276 -3061.10021109 -7 3 5 2 5 -11774.39099720 12.38305680 0.04284795 -7 3 5 2 6 3076.73971189 1555.12340339 3068.64144983 -7 3 5 2 7 2952.69490413 -5.43097733 0.03213596 -7 3 5 2 8 3076.78255984 1555.15553935 -3068.51290599 -7 3 5 3 1 -0.00000000 -0.04284795 -2.49589294 -7 3 5 3 2 3.08505221 -3.04220427 9467.74673216 -7 3 5 3 3 0.01071199 -0.04284795 -2.52802890 -7 3 5 3 4 -3.09576420 3.02078029 9467.51106845 -7 3 5 3 5 -0.03213596 -0.00000000 -11.44040196 -7 3 5 3 6 3.04220427 3.08505221 -9459.49850228 -7 3 5 3 7 -0.04284795 -0.02142397 -0.16067980 -7 3 5 3 8 -3.04220427 -3.04220427 -9459.30568652 -7 1 6 1 1 9466.46129374 3061.60367447 -3061.80720222 -7 1 6 1 2 -0.32135961 1557.51217645 -538.83436268 -7 1 6 1 3 -1.45683021 -1556.70877744 536.30633379 -7 1 6 1 4 -9464.87591968 -3057.82234311 3056.51548071 -7 1 6 1 5 -0.89980690 -536.97047697 1557.95136791 -7 1 6 1 6 -74103.85397977 -72014.58806394 72010.34611715 -7 1 6 1 7 74104.53954693 72008.48223143 -72002.55850270 -7 1 6 1 8 0.23566371 538.51300308 -1557.86567202 -7 1 6 2 1 1.17831855 -1557.84424805 3076.75042388 -7 1 6 2 2 1554.37356431 0.81411100 -3072.79770073 -7 1 6 2 3 889.83403590 -3061.52869056 91.39467183 -7 1 6 2 4 3055.25146627 -889.07348483 -90.02353751 -7 1 6 2 5 -2.58158883 533.54264118 3080.08185179 -7 1 6 2 6 -72014.05246460 -67033.49275328 80801.22382403 -7 1 6 2 7 67054.63821532 72007.59313652 -80809.37564603 -7 1 6 2 8 -538.72724282 -0.11783186 -3077.32887117 -7 1 6 3 1 -1.26401445 3077.80019859 -1557.50146447 -7 1 6 3 2 534.95662344 -3075.09006592 0.02142397 -7 1 6 3 3 -0.25708768 3076.88967971 538.12737155 -7 1 6 3 4 -3059.62195690 -90.79480057 -890.89452260 -7 1 6 3 5 -885.97772063 100.47843668 -3064.57089483 -7 1 6 3 6 72010.31398119 80799.03857872 -67021.49532800 -7 1 6 3 7 -67039.25580220 -80811.22881975 71996.92399762 -7 1 6 3 8 -1559.06541455 -3077.14676739 -0.46061543 -7 2 6 1 1 -3061.55011454 889.89830782 91.34111190 -7 2 6 1 2 -890.38034723 3057.09392801 -88.71667512 -7 2 6 1 3 -1557.85496003 1.15689458 3076.73971189 -7 2 6 1 4 0.99621478 1554.73777186 -3072.64773292 -7 2 6 1 5 533.62833707 -2.57087684 3080.16754769 -7 2 6 1 6 -67031.98236313 -72012.08145902 80799.78841780 -7 2 6 1 7 72007.32533685 67050.06419694 -80809.27923815 -7 2 6 1 8 -0.21423974 -538.32018732 -3077.45741501 -7 2 6 2 1 -1557.50146447 -0.88909491 535.51364676 -7 2 6 2 2 -3057.97231093 -9464.96161558 3056.47263277 -7 2 6 2 3 3061.38943473 9466.41844579 -3062.12856183 -7 2 6 2 4 1556.56952161 0.38563153 -539.51992984 -7 2 6 2 5 -537.79529996 -1.39255829 1557.05156102 -7 2 6 2 6 -72013.51686525 -74104.45385103 72013.23835360 -7 2 6 2 7 72010.49608496 74104.67880276 -72002.91199827 -7 2 6 2 8 538.34161129 0.31064762 -1557.75855215 -7 2 6 3 1 3076.93252766 -0.22495172 538.12737155 -7 2 6 3 2 -91.00904030 -3059.71836478 -890.94808253 -7 2 6 3 3 3077.84304654 -1.24259047 -1557.52288844 -7 2 6 3 4 -3075.94702487 535.53507073 -0.59987126 -7 2 6 3 5 100.45701271 -885.96700865 -3064.57089483 -7 2 6 3 6 80798.04236394 72009.78909383 -67021.04542455 -7 2 6 3 7 -80808.89360662 -67039.12725836 71996.89186166 -7 2 6 3 8 -3077.27531124 -1558.94758269 -0.34278358 -7 3 6 1 1 3061.33587480 90.66625672 889.93044378 -7 3 6 1 2 -1.17831855 -3075.56139334 -535.97426219 -7 3 6 1 3 -538.45944314 3076.69686395 -0.04284795 -7 3 6 1 4 -2.03527750 -3073.95459531 1559.90094952 -7 3 6 1 5 1554.11647662 3075.83990500 1.58537405 -7 3 6 1 6 67036.67421337 80805.08013930 -71999.39846658 -7 3 6 1 7 -71999.18422685 -80808.28302337 67021.28108826 -7 3 6 1 8 888.70927728 -90.40916904 3062.74985706 -7 3 6 2 1 3076.69686395 -538.44873116 0.02142397 -7 3 6 2 2 -3074.14741108 -2.17453333 1559.80454164 -7 3 6 2 3 90.59127282 3061.27160288 889.97329173 -7 3 6 2 4 -3076.40764030 -0.57844729 -536.62769339 -7 3 6 2 5 3075.76492109 1554.13790059 1.58537405 -7 3 6 2 6 80804.25531631 67036.27786986 -71998.77717134 -7 3 6 2 7 -80806.15133799 -71999.23778678 67021.30251224 -7 3 6 2 8 -90.60198480 888.82710914 3062.82484097 -7 3 6 3 1 -1559.47247005 -535.66361458 2.04598949 -7 3 6 3 2 536.34918173 1559.47247005 3.84560328 -7 3 6 3 3 -536.53128551 -1558.72263097 2.54945287 -7 3 6 3 4 1557.88709599 537.97740374 2.74226863 -7 3 6 3 5 3070.17326395 3070.41963965 -9458.21306386 -7 3 6 3 6 -72000.45895328 -72002.03361535 74086.95046451 -7 3 6 3 7 71995.11367184 71991.04311684 -74109.46706088 -7 3 6 3 8 -3063.04979270 -3062.49276938 9469.33210622 -7 1 7 1 1 -0.02142397 0.01071199 -2.65657274 -7 1 7 1 2 -74052.67210658 66926.62997243 66965.96438815 -7 1 7 1 3 0.03213596 -0.02142397 0.08569589 -7 1 7 1 4 74052.53285075 -66926.73709230 66966.00723610 -7 1 7 1 5 -0.09640788 0.02142397 3.55637964 -7 1 7 1 6 74102.02223002 67046.64707313 -67035.09955130 -7 1 7 1 7 0.12854384 -0.06427192 137.28482351 -7 1 7 1 8 -74102.14006187 -67046.68992108 -67035.15311124 -7 1 7 2 1 0.17139179 0.05355993 2964.03889821 -7 1 7 2 2 71893.37122071 -71893.38193270 -80701.97726584 -7 1 7 2 3 0.08569589 -0.00000000 2964.02818623 -7 1 7 2 4 -71893.46762859 71893.45691661 -80702.13794564 -7 1 7 2 5 0.03213596 -0.00000000 -11772.30215976 -7 1 7 2 6 72009.09281468 72009.08210270 -80812.21432255 -7 1 7 2 7 0.21423974 0.03213596 328872.88605177 -7 1 7 2 8 -72009.03925475 -72009.10352667 -80812.11791466 -7 1 7 3 1 -4.94893793 2963.50329887 0.28922365 -7 1 7 3 2 71939.49703610 -80703.33768817 -71955.35077664 -7 1 7 3 3 -3.37427586 -11772.17361592 0.21423974 -7 1 7 3 4 71939.37920424 -80703.18772035 71953.01556351 -7 1 7 3 5 -2.88152446 2953.63755898 0.94265484 -7 1 7 3 6 -71999.40917857 -80812.08577870 71993.89250534 -7 1 7 3 7 131.20041498 328885.77257195 1.11404663 -7 1 7 3 8 -71999.54843440 -80812.07506672 -71993.93535329 -7 2 7 1 1 0.02142397 -0.08569589 2964.02818623 -7 2 7 1 2 71893.41406866 -71893.46762859 -80702.11652167 -7 2 7 1 3 0.06427192 0.04284795 2963.96391430 -7 2 7 1 4 -71893.42478064 71893.37122071 -80702.15936962 -7 2 7 1 5 0.04284795 -0.04284795 -11772.34500771 -7 2 7 1 6 72008.95355886 72009.12495064 -80812.04293076 -7 2 7 1 7 -0.06427192 -0.03213596 328872.57540415 -7 2 7 1 8 -72008.88928693 -72008.85715097 -80811.95723486 -7 2 7 2 1 -0.96407882 0.58915928 0.81411100 -7 2 7 2 2 -66929.43651299 74053.48621758 66966.64995531 -7 2 7 2 3 -0.17139179 -0.06427192 -2.44233300 -7 2 7 2 4 66928.85806570 -74052.35074698 66965.79299637 -7 2 7 2 5 -0.19281576 0.12854384 3.51353169 -7 2 7 2 6 67049.45361369 74102.69708519 -67035.95651025 -7 2 7 2 7 -0.74983908 -2.74226863 136.74922417 -7 2 7 2 8 -67046.88273684 -74101.88297419 -67035.29236707 -7 2 7 3 1 -11768.59581231 -0.77126305 -0.27851166 -7 2 7 3 2 -80707.08688357 71938.37227748 71954.81517730 -7 2 7 3 3 2964.18886603 -5.46311330 -0.17139179 -7 2 7 3 4 -80707.04403562 71938.38298947 -71952.47996417 -7 2 7 3 5 2954.39811004 -2.52802890 -1.00692676 -7 2 7 3 6 -80812.59995407 -72000.57678514 71994.38525674 -7 2 7 3 7 328889.12542384 132.78578903 -0.97479080 -7 2 7 3 8 -80812.51425818 -72000.38396937 -71994.21386495 -7 3 7 1 1 -4.99178587 2963.49258688 0.16067980 -7 3 7 1 2 71939.21852444 -80703.08060049 -71954.99728108 -7 3 7 1 3 -3.27786798 -11772.19503989 0.23566371 -7 3 7 1 4 71939.62557994 -80703.61619983 71953.35834709 -7 3 7 1 5 -2.84938850 2953.70183090 1.00692676 -7 3 7 1 6 -71999.86979400 -80812.27859447 71994.10674508 -7 3 7 1 7 131.39323074 328885.95467573 -0.00000000 -7 3 7 1 8 -71999.46273850 -80812.05364274 -71993.76396150 -7 3 7 2 1 -11768.46726847 -0.86767094 -0.24637570 -7 3 7 2 2 -80706.82979588 71938.14732576 71954.52595365 -7 3 7 2 3 2964.21029000 -5.29172151 -0.14996782 -7 3 7 2 4 -80707.33325927 71938.64007715 -71952.95129159 -7 3 7 2 5 2954.45166998 -2.44233300 -0.85695895 -7 3 7 2 6 -80813.00700957 -72000.94099269 71994.68519237 -7 3 7 2 7 328889.61817523 133.25711645 -0.78197504 -7 3 7 2 8 -80812.62137805 -72000.46966527 -71994.25671289 -7 3 7 3 1 -0.92123087 0.59987126 -1.52110213 -7 3 7 3 2 -66970.35630276 66970.27060687 74116.12991670 -7 3 7 3 3 -0.09640788 -0.08569589 -0.98550279 -7 3 7 3 4 66969.92782329 -66969.67073561 74117.73671473 -7 3 7 3 5 0.42847947 -0.57844729 -2.99935632 -7 3 7 3 6 67024.37685246 67022.41655887 -74107.68887106 -7 3 7 3 7 -1.09262266 -0.42847947 -12.96150409 -7 3 7 3 8 -67022.30943900 -67022.36299894 -74107.73171901 -7 1 8 1 1 -9466.52556566 -3061.57153851 -3062.05357792 -7 1 8 1 2 9464.87591968 3057.76878318 3056.61188860 -7 1 8 1 3 1.46754220 1556.64450552 536.19921392 -7 1 8 1 4 0.29993563 -1557.48004049 -538.89863461 -7 1 8 1 5 1.55323809 537.67746810 1557.09440897 -7 1 8 1 6 -0.23566371 -538.53442705 -1557.82282407 -7 1 8 1 7 -74105.52504972 -72009.39275032 -72003.72610927 -7 1 8 1 8 74103.98252361 72014.89871156 72012.72417823 -7 1 8 2 1 -1.19974253 1557.89780798 3076.75042388 -7 1 8 2 2 -3055.27289024 889.05206086 -89.99140155 -7 1 8 2 3 -889.87688385 3061.52869056 91.39467183 -7 1 8 2 4 -1554.42712424 -0.72841511 -3072.88339663 -7 1 8 2 5 2.61372479 -533.64976105 3080.16754769 -7 1 8 2 6 538.73795480 0.04284795 -3077.21103932 -7 1 8 2 7 -67054.57394340 -72007.56100056 -80809.35422206 -7 1 8 2 8 72014.05246460 67033.43919334 80801.09528019 -7 1 8 3 1 -1.17831855 3077.85375853 1557.53360043 -7 1 8 3 2 -3059.64338088 -90.81622454 890.87309862 -7 1 8 3 3 -0.25708768 3076.91110368 -538.17021950 -7 1 8 3 4 534.92448748 -3075.04721797 -0.04284795 -7 1 8 3 5 -885.96700865 100.43558873 3064.57089483 -7 1 8 3 6 -1558.99043064 -3077.08249547 0.42847947 -7 1 8 3 7 -67039.02013849 -80811.04671598 -71996.72046987 -7 1 8 3 8 72010.21757330 80798.76006706 67021.50603999 -7 2 8 1 1 3061.46441864 -889.86617186 91.37324786 -7 2 8 1 2 -0.96407882 -1554.76990782 -3072.63702093 -7 2 8 1 3 1557.86567202 -1.17831855 3076.69686395 -7 2 8 1 4 890.36963524 -3057.09392801 -88.69525114 -7 2 8 1 5 -533.60691310 2.59230082 3080.12469974 -7 2 8 1 6 0.26779967 538.34161129 -3077.53239892 -7 2 8 1 7 -72007.04682520 -67049.91422912 -80809.05428642 -7 2 8 1 8 67031.82168333 72011.88864325 80799.62773799 -7 2 8 2 1 1556.58023360 1.55323809 536.14565398 -7 2 8 2 2 -1556.60165757 -0.32135961 -539.44494594 -7 2 8 2 3 -3061.47513063 -9466.54698963 -3062.00001798 -7 2 8 2 4 3057.98302291 9464.98303955 3056.51548071 -7 2 8 2 5 537.63462016 1.49967816 1557.11583294 -7 2 8 2 6 -538.33089930 -0.36420755 -1557.75855215 -7 2 8 2 7 -72011.71725146 -74105.63216959 -72003.80109318 -7 2 8 2 8 72015.85207839 74104.74307468 72013.35618545 -7 2 8 3 1 3076.88967971 -0.26779967 -538.13808354 -7 2 8 3 2 -3075.96844884 535.57791868 0.61058325 -7 2 8 3 3 3077.86447051 -1.24259047 1557.56573639 -7 2 8 3 4 -90.99832832 -3059.79334869 890.91594657 -7 2 8 3 5 100.46772470 -885.98843262 3064.54947085 -7 2 8 3 6 -3077.27531124 -1558.93687070 0.29993563 -7 2 8 3 7 -80809.00072649 -67039.17010631 -71996.87043768 -7 2 8 3 8 80797.98880400 72009.68197396 67020.93830468 -7 3 8 1 1 3061.33587480 90.63412076 -889.89830782 -7 3 8 1 2 -2.07812545 -3073.96530730 -1559.90094952 -7 3 8 1 3 -538.43801917 3076.65401600 0.08569589 -7 3 8 1 4 -1.16760657 -3075.53996937 535.94212623 -7 3 8 1 5 1554.07362867 3075.77563308 -1.56395008 -7 3 8 1 6 888.71998927 -90.28062520 -3062.77128104 -7 3 8 1 7 -71999.24849877 -80808.37943125 -67021.17396840 -7 3 8 1 8 67036.70634933 80805.06942731 71999.41989056 -7 3 8 2 1 3076.69686395 -538.44873116 0.01071199 -7 3 8 2 2 -3076.39692831 -0.52488736 536.62769339 -7 3 8 2 3 90.66625672 3061.27160288 -889.99471570 -7 3 8 2 4 -3074.17954704 -2.18524532 -1559.77240568 -7 3 8 2 5 3075.79705705 1554.11647662 -1.56395008 -7 3 8 2 6 -90.54842487 888.88066907 -3062.83555296 -7 3 8 2 7 -80805.93709825 -71999.17351486 -67021.20610436 -7 3 8 2 8 80804.11606048 67036.09576608 71998.86286724 -7 3 8 3 1 1559.49389402 535.68503855 2.06741346 -7 3 8 3 2 -1557.84424805 -537.94526778 2.73155665 -7 3 8 3 3 536.47772558 1558.70120699 2.50660492 -7 3 8 3 4 -536.31704577 -1559.49389402 3.87773924 -7 3 8 3 5 -3070.15183998 -3070.37679170 -9458.21306386 -7 3 8 3 6 3063.03908071 3062.51419335 9469.33210622 -7 3 8 3 7 -71995.11367184 -71990.98955690 -74109.30638108 -7 3 8 3 8 72000.34112143 72001.92649548 74087.11114432 -8 1 1 1 1 -74115.87282902 72001.84079958 72005.95420254 -8 1 1 1 2 9472.97418175 -3064.58160682 -3065.79206133 -8 1 1 1 3 0.61058325 -538.02025168 -1559.70813376 -8 1 1 1 4 -0.34278358 1558.20845560 535.83500637 -8 1 1 1 5 0.95336683 -1557.71570420 -539.81986547 -8 1 1 1 6 0.17139179 536.11351802 1557.82282407 -8 1 1 1 7 -9466.39702182 3061.81791421 3061.18590698 -8 1 1 1 8 74107.92453477 -71997.60956478 -71995.41360747 -8 1 1 2 1 72004.19743669 -67024.52682028 -80796.04993438 -8 1 1 2 2 -1.73534187 -1561.91480305 -3081.73149777 -8 1 1 2 3 537.77387599 -0.36420755 3077.46812700 -8 1 1 2 4 -889.37342047 -3066.02772504 -95.12244326 -8 1 1 2 5 -1553.40948549 -0.25708768 3070.09828004 -8 1 1 2 6 -0.66414318 536.75623723 -3077.03964753 -8 1 1 2 7 -3061.31445083 -889.88759583 90.81622454 -8 1 1 2 8 -67035.52803078 72006.32912208 80811.48590744 -8 1 1 3 1 72007.81808825 -80795.24653537 -67033.79268891 -8 1 1 3 2 -2.84938850 -3080.14612371 -1557.04084903 -8 1 1 3 3 -1558.03706381 3077.63951879 -0.36420755 -8 1 1 3 4 -1.43540624 -3078.11084621 538.19164347 -8 1 1 3 5 536.18850193 3076.65401600 -1.92815763 -8 1 1 3 6 -891.54795380 -92.59441436 -3061.18590698 -8 1 1 3 7 -3061.95717004 91.85528727 -890.47675511 -8 1 1 3 8 -67028.22245575 80799.92767362 72006.51122585 -8 2 1 1 1 67015.53946331 -72016.08774210 -80797.22825294 -8 2 1 1 2 3066.00630107 889.36270848 -95.10101928 -8 2 1 1 3 0.56773530 -538.53442705 3077.36100713 -8 2 1 1 4 1561.95765100 1.71391790 -3081.75292174 -8 2 1 1 5 891.74076956 3053.51612440 86.08152635 -8 2 1 1 6 -536.68125333 0.59987126 -3076.99679958 -8 2 1 1 7 -0.47132742 1557.60858433 3076.34336838 -8 2 1 1 8 -71998.56293161 67051.78882682 80811.25024373 -8 2 1 2 1 -72012.35997067 74112.81991276 72011.38517987 -8 2 1 2 2 -1558.18703163 0.32135961 535.82429438 -8 2 1 2 3 537.31326055 0.57844729 -1558.31557547 -8 2 1 2 4 3064.61374278 -9472.95275777 -3065.77063736 -8 2 1 2 5 -3057.07250403 9458.64154334 3054.80156282 -8 2 1 2 6 -536.15636597 -0.12854384 1557.80140010 -8 2 1 2 7 1557.84424805 0.82482299 -537.75245201 -8 2 1 2 8 72004.04746888 -74100.13692033 -71998.05946823 -8 2 1 3 1 -80797.45320466 72014.82372765 67032.58223439 -8 2 1 3 2 -3078.13227018 -1.45683021 -538.22377943 -8 2 1 3 3 3077.35029514 -1559.83667760 0.17139179 -8 2 1 3 4 -3080.15683570 -2.84938850 1557.11583294 -8 2 1 3 5 89.76644983 -3058.55075822 892.24423294 -8 2 1 3 6 -92.59441436 -891.51581784 3061.20733096 -8 2 1 3 7 3077.14676739 536.03853412 0.64271921 -8 2 1 3 8 80804.09463651 -67036.59922946 -72005.72925081 -8 3 1 1 1 67029.59359006 -80803.52690121 -72004.05818086 -8 3 1 1 2 3063.39257627 -92.84079006 888.77354920 -8 3 1 1 3 888.89138106 90.30204917 3062.64273719 -8 3 1 1 4 -539.39138600 -3078.51790171 0.25708768 -8 3 1 1 5 -2.19595730 3073.89032339 -536.13494200 -8 3 1 1 6 1557.82282407 -3077.12534342 0.44990345 -8 3 1 1 7 -0.53559934 3076.69686395 1559.55816594 -8 3 1 1 8 -71997.62027676 80811.11098790 67028.44740747 -8 3 1 2 1 -80800.98816032 67031.39320385 72003.26549384 -8 3 1 2 2 -3079.37486066 -540.05552919 -0.84624696 -8 3 1 2 3 90.69839269 888.90209304 -3062.92124885 -8 3 1 2 4 -92.99075787 3063.47827217 -888.88066907 -8 3 1 2 5 3071.98358973 -2.93508440 -1560.71506052 -8 3 1 2 6 -3077.31815918 1557.71570420 -0.32135961 -8 3 1 2 7 3077.96087839 0.64271921 536.33846975 -8 3 1 2 8 80810.05050120 -71999.13066691 -67026.02649844 -8 3 1 3 1 -72000.85529679 72000.30898546 74100.67251967 -8 3 1 3 2 -1559.30107826 536.35989372 2.35663711 -8 3 1 3 3 -3063.00694475 3062.57846527 9469.46065006 -8 3 1 3 4 -536.34918173 1559.30107826 2.33521313 -8 3 1 3 5 536.88478108 -1558.65835905 3.66349950 -8 3 1 3 6 3061.34658679 -3061.33587480 -9465.43294300 -8 3 1 3 7 1557.71570420 -537.85957188 2.19595730 -8 3 1 3 8 72003.68326132 -72000.76960090 -74115.27295775 -8 1 2 1 1 9471.68874332 -0.47132742 -2.07812545 -8 1 2 1 2 3.08505221 0.09640788 6.97350344 -8 1 2 1 3 -9471.73159127 0.38563153 -1.94958161 -8 1 2 1 4 -0.10711987 0.81411100 -0.23566371 -8 1 2 1 5 -9463.46193742 -1.19974253 5.78447290 -8 1 2 1 6 0.09640788 0.79268703 0.17139179 -8 1 2 1 7 9463.48336139 -0.40705550 -1.92815763 -8 1 2 1 8 -3.14932413 0.06427192 -6.81282364 -8 1 2 2 1 -3065.94202915 -1561.07926808 -3079.54625245 -8 1 2 2 2 0.08569589 -6.93065549 11785.04942412 -8 1 2 2 3 3066.04914901 1561.10069205 -3079.43913258 -8 1 2 2 4 0.05355993 0.21423974 2915.20295015 -8 1 2 2 5 -3055.74421766 1560.37227694 -3077.10391945 -8 1 2 2 6 0.19281576 -0.79268703 574.37673506 -8 1 2 2 7 3059.08635756 -1555.20909928 -3074.10456313 -8 1 2 2 8 -3.74919540 2.42090903 -2964.73517736 -8 1 2 3 1 -3069.41271289 -3080.59602716 -1556.45168975 -8 1 2 3 2 8.52674154 11786.34557453 2.33521313 -8 1 2 3 3 -3069.39128891 -3080.68172306 1556.58023360 -8 1 2 3 4 -0.18210378 573.04844869 1.09262266 -8 1 2 3 5 3062.64273719 -3077.98230237 1554.78061981 -8 1 2 3 6 1.40327028 2915.95278923 0.81411100 -8 1 2 3 7 3057.86519106 -3072.88339663 -1559.85810157 -8 1 2 3 8 8.37677372 -2963.10695536 0.85695895 -8 2 2 1 1 3063.22118448 -1558.52981520 -3077.96087839 -8 2 2 1 2 -2.91366042 -3.08505221 -2956.56193139 -8 2 2 1 3 -3063.26403243 1558.46554328 -3077.96087839 -8 2 2 1 4 0.43919146 0.85695895 573.51977611 -8 2 2 1 5 3060.88597135 1552.57395051 -3072.51918907 -8 2 2 1 6 0.21423974 -0.36420755 2914.21744736 -8 2 2 1 7 -3059.55768498 -1557.71570420 -3075.56139334 -8 2 2 1 8 0.89980690 7.61622265 11772.99843891 -8 2 2 2 1 886.30979223 0.12854384 -1.11404663 -8 2 2 2 2 -2.39948506 -0.18210378 8.79454121 -8 2 2 2 3 -886.50260799 -0.19281576 -0.98550279 -8 2 2 2 4 0.01071199 -0.14996782 -0.36420755 -8 2 2 2 5 -891.28015412 0.49275140 3.34213990 -8 2 2 2 6 0.03213596 -0.21423974 0.32135961 -8 2 2 2 7 891.25873015 0.19281576 -1.07119869 -8 2 2 2 8 2.31378916 -0.20352775 -8.88023710 -8 2 2 3 1 -94.45830007 535.51364676 -538.23449142 -8 2 2 3 2 -2956.65833927 4.53117044 3.13861215 -8 2 2 3 3 -92.20878283 535.40652689 538.17021950 -8 2 2 3 4 2915.34220598 0.08569589 1.41398226 -8 2 2 3 5 -98.03610368 -531.78587534 -539.54135382 -8 2 2 3 6 3374.43653853 0.85695895 0.34278358 -8 2 2 3 7 -88.48101141 -538.72724282 536.11351802 -8 2 2 3 8 -2959.82908738 -5.74162495 -1.52110213 -8 3 2 1 1 3061.52869056 -3078.06799826 -1558.95829468 -8 3 2 1 2 -3.85631527 -2959.50772777 -0.19281576 -8 3 2 1 3 3061.65723440 -3078.04657429 1559.06541455 -8 3 2 1 4 -0.51417537 2913.70327199 -0.83553497 -8 3 2 1 5 -3056.62260058 -3070.33394376 1562.40755445 -8 3 2 1 6 1.06048670 574.80521454 -1.28543842 -8 3 2 1 7 -3059.12920551 -3075.51854539 -1557.24437678 -8 3 2 1 8 -3.98485911 11773.03057487 -2.94579638 -8 3 2 2 1 -90.73052865 -539.07002640 536.45630160 -8 3 2 2 2 -2962.01433270 7.06991132 -0.17139179 -8 3 2 2 3 -90.75195262 -539.04860242 -536.62769339 -8 3 2 2 4 3371.58715003 -0.87838292 0.62129524 -8 3 2 2 5 -84.79608793 542.19792656 534.24963231 -8 3 2 2 6 2914.01391961 0.04284795 1.22116650 -8 3 2 2 7 -92.20878283 535.19228715 -537.82743592 -8 3 2 2 8 -2965.24935273 -5.73091297 1.93886962 -8 3 2 3 1 885.32428943 0.17139179 2.37806108 -8 3 2 3 2 -0.70699113 0.55702332 -3.27786798 -8 3 2 3 3 -885.36713738 -0.17139179 2.42090903 -8 3 2 3 4 0.70699113 -0.85695895 -1.86388571 -8 3 2 3 5 -892.32992884 0.47132742 -7.34842298 -8 3 2 3 6 -0.66414318 -0.87838292 1.90673366 -8 3 2 3 7 892.30850486 0.12854384 2.44233300 -8 3 2 3 8 0.79268703 0.46061543 3.22430804 -8 1 3 1 1 0.55702332 537.13115677 -1558.27272752 -8 1 3 1 2 -9472.95275777 3064.60303079 -3065.70636543 -8 1 3 1 3 74113.75185562 -72013.62398512 72012.23142683 -8 1 3 1 4 0.29993563 -1558.20845560 535.81358239 -8 1 3 1 5 9458.70581526 -3057.30816774 3054.71586692 -8 1 3 1 6 -0.20352775 -536.13494200 1557.86567202 -8 1 3 1 7 0.19281576 1556.93372916 -538.43801917 -8 1 3 1 8 -74100.38329603 72006.41481797 -71998.22014803 -8 1 3 2 1 -538.53442705 0.54631133 3077.36100713 -8 1 3 2 2 1.69249392 1561.93622702 -3081.71007379 -8 1 3 2 3 -72015.61641468 67015.13240781 -80796.83190942 -8 1 3 2 4 889.36270848 3066.02772504 -95.12244326 -8 1 3 2 5 3053.54826036 891.73005757 86.12437430 -8 1 3 2 6 0.58915928 -536.64911737 -3076.99679958 -8 1 3 2 7 1557.56573639 -0.43919146 3076.37550434 -8 1 3 2 8 67051.25322748 -71998.26299598 80810.76820432 -8 1 3 3 1 -1559.83667760 3077.26459925 0.17139179 -8 1 3 3 2 -2.89223645 -3080.19968365 1557.07298499 -8 1 3 3 3 72014.64162387 -80797.36750877 67032.40013062 -8 1 3 3 4 -1.43540624 -3078.11084621 -538.17021950 -8 1 3 3 5 -3058.51862226 89.87356970 892.17996102 -8 1 3 3 6 -891.52652982 -92.57299038 3061.12163506 -8 1 3 3 7 536.00639816 3077.10391945 0.62129524 -8 1 3 3 8 -67036.44926165 80803.96609267 -72005.49358710 -8 2 3 1 1 -0.34278358 537.85957188 3077.48955097 -8 2 3 1 2 -3065.96345312 -889.34128450 -95.09030729 -8 2 3 1 3 -67024.46254836 72004.09031682 -80795.88925458 -8 2 3 1 4 -1561.93622702 -1.77818982 -3081.75292174 -8 2 3 1 5 -0.21423974 -1553.40948549 3070.05543210 -8 2 3 1 6 536.67054134 -0.51417537 -3076.97537560 -8 2 3 1 7 -889.95186776 -3061.34658679 90.85907249 -8 2 3 1 8 72006.31841009 -67035.52803078 80811.49661943 -8 2 3 2 1 -538.06309963 0.41776749 -1559.62243786 -8 2 3 2 2 1558.16560765 -0.31064762 535.81358239 -8 2 3 2 3 72002.70847052 -74116.87975578 72006.74688956 -8 2 3 2 4 -3064.59231880 9472.95275777 -3065.77063736 -8 2 3 2 5 -1557.61929632 0.77126305 -539.90556137 -8 2 3 2 6 536.15636597 0.14996782 1557.77997612 -8 2 3 2 7 3061.20733096 -9467.33967666 3060.54318777 -8 2 3 2 8 -71997.89878842 74110.20618797 -71995.68140714 -8 2 3 3 1 3077.16819137 -1558.17631964 -0.47132742 -8 2 3 3 2 -3078.00372634 -1.34971034 538.38445924 -8 2 3 3 3 -80797.09970910 72009.10352667 -67037.19910073 -8 2 3 3 4 -3080.25324358 -2.95650837 -1556.88016923 -8 2 3 3 5 3074.86511419 534.99947139 -0.66414318 -8 2 3 3 6 -93.24784556 -890.85167465 -3060.28610009 -8 2 3 3 7 91.56606362 -3061.77506626 -890.29465133 -8 2 3 3 8 80804.97301943 -67028.86517496 72007.52886460 -8 3 3 1 1 888.43076562 91.44823176 -3061.82862619 -8 3 3 1 2 3063.32830435 -93.13001370 -889.01992490 -8 3 3 1 3 67032.64650632 -80802.16647888 72006.93970533 -8 3 3 1 4 -539.95912130 -3079.31058874 -1.02835074 -8 3 3 1 5 -1.86388571 3072.69058086 -1561.14354000 -8 3 3 1 6 1558.31557547 -3077.85375853 -1.19974253 -8 3 3 1 7 0.70699113 3077.73592667 536.39202968 -8 3 3 1 8 -72001.77652766 80810.60752452 -67028.96158284 -8 3 3 2 1 91.22328004 888.34506973 3061.85005017 -8 3 3 2 2 -3079.50340450 -539.91627336 0.93194286 -8 3 3 2 3 -80801.08456820 67027.49404064 -72004.24028464 -8 3 3 2 4 -92.38017462 3064.37807907 889.48054033 -8 3 3 2 5 3074.74728234 -1.67106995 -536.88478108 -8 3 3 2 6 -3077.22175130 1557.88709599 0.27851166 -8 3 3 2 7 3076.97537560 -0.48203941 1559.30107826 -8 3 3 2 8 80807.32965654 -71996.03490271 67029.37935033 -8 3 3 3 1 3062.49276938 -3063.22118448 9469.54634595 -8 3 3 3 2 1559.30107826 -536.37060571 2.34592512 -8 3 3 3 3 72001.01597660 -72001.60513587 74101.21883100 -8 3 3 3 4 536.31704577 -1559.32250223 2.35663711 -8 3 3 3 5 -1558.56195116 536.71338929 3.49210771 -8 3 3 3 6 -3061.32516281 3061.33587480 -9465.49721492 -8 3 3 3 7 -538.47015513 1556.80518532 1.57466207 -8 3 3 3 8 -72000.74817693 72005.72925081 -74115.16583788 -8 1 4 1 1 -0.21423974 -886.43833607 -1.15689458 -8 1 4 1 2 0.06427192 0.35349557 -0.42847947 -8 1 4 1 3 0.17139179 886.35264017 -1.11404663 -8 1 4 1 4 -0.78197504 -1.49967816 8.18395796 -8 1 4 1 5 0.47132742 -891.25873015 3.42783579 -8 1 4 1 6 -0.21423974 0.10711987 0.47132742 -8 1 4 1 7 0.10711987 889.07348483 -1.15689458 -8 1 4 1 8 0.42847947 3.35285189 -8.22680590 -8 1 4 2 1 1558.44411931 -3063.32830435 -3077.96087839 -8 1 4 2 2 0.68556716 0.12854384 573.69116790 -8 1 4 2 3 -1558.48696726 3063.37115230 -3077.98230237 -8 1 4 2 4 -1.78890180 -4.64900229 -2955.24435701 -8 1 4 2 5 1552.63822244 3060.92881930 -3072.79770073 -8 1 4 2 6 -0.17139179 -0.17139179 2914.15317544 -8 1 4 2 7 -1557.71570420 -3055.25146627 -3075.56139334 -8 1 4 2 8 6.38434416 -0.83553497 11771.72371247 -8 1 4 3 1 535.55649471 -94.39402815 538.29876334 -8 1 4 3 2 -0.04284795 2914.96728644 1.04977471 -8 1 4 3 3 535.49222279 -92.27305475 -538.42730718 -8 1 4 3 4 5.79518489 -2958.47937704 0.66414318 -8 1 4 3 5 -531.87157123 -93.75130894 -539.45565792 -8 1 4 3 6 0.86767094 3374.01877104 0.72841511 -8 1 4 3 7 -538.85578666 -88.45958743 536.02782213 -8 1 4 3 8 -6.98421543 -2961.69297309 0.98550279 -8 2 4 1 1 1561.10069205 3065.96345312 -3079.41770861 -8 2 4 1 2 0.10711987 0.12854384 2915.32078200 -8 2 4 1 3 -1561.18638794 -3068.14869844 -3079.35343669 -8 2 4 1 4 -5.72020098 0.10711987 11785.07084809 -8 2 4 1 5 1560.35085297 -3053.62324426 -3076.99679958 -8 2 4 1 6 -0.61058325 0.25708768 574.61239877 -8 2 4 1 7 -1555.25194723 3059.04350961 -3074.12598710 -8 2 4 1 8 1.09262266 -3.71705944 -2964.77802531 -8 2 4 2 1 0.47132742 -9471.71016730 -1.94958161 -8 2 4 2 2 0.77126305 -0.53559934 -0.18210378 -8 2 4 2 3 -0.38563153 9473.85256467 -1.97100558 -8 2 4 2 4 -0.04284795 1.26401445 6.94136748 -8 2 4 2 5 -1.24259047 -9463.44051345 5.57023316 -8 2 4 2 6 0.70699113 -0.25708768 0.19281576 -8 2 4 2 7 -0.25708768 9465.62575876 -1.92815763 -8 2 4 2 8 -0.04284795 -4.90608998 -6.87709556 -8 2 4 3 1 -3080.63887511 -3065.02079828 1556.40884181 -8 2 4 3 2 573.30553638 -0.71770312 1.17831855 -8 2 4 3 3 -3080.70314703 -3067.27031552 -1556.49453770 -8 2 4 3 4 11784.49240080 5.87016880 2.97793235 -8 2 4 3 5 -3078.08942224 3062.59988925 1554.52353212 -8 2 4 3 6 2915.73854949 0.92123087 0.72841511 -8 2 4 3 7 -3073.03336444 3057.90803901 -1559.90094952 -8 2 4 3 8 -2961.09310183 5.68806502 0.24637570 -8 3 4 1 1 -539.07002640 -90.68768070 -536.49914955 -8 3 4 1 2 -0.81411100 3371.80138976 0.61058325 -8 3 4 1 3 -538.96290653 -90.77337659 536.54199750 -8 3 4 1 4 6.39505615 -2961.07167785 0.47132742 -8 3 4 1 5 542.26219848 -86.98133325 534.27105629 -8 3 4 1 6 0.03213596 2914.26029531 1.17831855 -8 3 4 1 7 535.19228715 -92.14451091 -537.80601195 -8 3 4 1 8 -5.07748177 -2964.37096980 1.25330246 -8 3 4 2 1 -3078.02515032 3061.59296248 1559.12968647 -8 3 4 2 2 2913.78896788 -0.72841511 -1.11404663 -8 3 4 2 3 -3078.15369416 3063.73535985 -1559.06541455 -8 3 4 2 4 -2960.10759904 -4.77754614 -2.14239737 -8 3 4 2 5 -3070.33394376 -3054.41593129 1562.49325034 -8 3 4 2 6 574.69809467 0.87838292 -0.92123087 -8 3 4 2 7 -3075.53996937 -3061.37872275 -1557.39434460 -8 3 4 2 8 11773.69471805 -5.00249786 -1.03906272 -8 3 4 3 1 -0.12854384 -885.32428943 2.46375698 -8 3 4 3 2 -0.96407882 0.49275140 -2.00314154 -8 3 4 3 3 0.12854384 885.28144149 2.44233300 -8 3 4 3 4 1.17831855 -1.60679803 -3.92058719 -8 3 4 3 5 0.42847947 -890.12325954 -7.41269490 -8 3 4 3 6 -0.76055107 -0.89980690 1.99242955 -8 3 4 3 7 0.08569589 892.20138499 2.48518095 -8 3 4 3 8 -0.08569589 -0.18210378 3.88845123 -8 1 5 1 1 0.89980690 -1553.73084509 534.31390423 -8 1 5 1 2 -9463.14057781 -3055.47641799 3062.18212176 -8 1 5 1 3 9459.57348619 3053.17334082 -3057.88661503 -8 1 5 1 4 0.58915928 1552.59537449 -531.52878765 -8 1 5 1 5 73992.05297298 71805.66147236 -71878.46013501 -8 1 5 1 6 0.73912709 533.97112065 -1553.53802933 -8 1 5 1 7 0.89980690 -533.97112065 1555.41262703 -8 1 5 1 8 -73991.61378152 -71802.12651670 71869.40850612 -8 1 5 2 1 -1558.10133573 0.33207159 3074.74728234 -8 1 5 2 2 -1.60679803 1560.40441290 -3078.28223800 -8 1 5 2 3 -3056.03344131 891.13018631 90.62340878 -8 1 5 2 4 -889.84474789 3059.66480485 -93.70846099 -8 1 5 2 5 71807.34325429 66823.92344248 -80589.70493163 -8 1 5 2 6 0.24637570 -533.22128157 -3079.95330795 -8 1 5 2 7 537.69889208 2.87081248 3077.29673521 -8 1 5 2 8 -66839.71291110 -71805.01875315 80599.04578417 -8 1 5 3 1 -539.34853805 3069.46627282 -0.25708768 -8 1 5 3 2 5.72020098 -3077.06107150 1555.13411537 -8 1 5 3 3 3053.65538023 86.57427775 891.32300207 -8 1 5 3 4 3.88845123 -3073.18333226 -539.41280997 -8 1 5 3 5 -71878.03165554 -80588.86939666 66908.24820299 -8 1 5 3 6 884.22095479 -109.09087411 3073.52611584 -8 1 5 3 7 1558.22987957 3080.91738677 -2.52802890 -8 1 5 3 8 66911.63319084 80611.27887315 -71885.91567786 -8 2 5 1 1 891.73005757 -3056.87968827 90.04496149 -8 2 5 1 2 3059.68622882 -889.63050815 -93.72988496 -8 2 5 1 3 0.14996782 -1558.27272752 3074.57589055 -8 2 5 1 4 1559.78311767 -0.74983908 -3077.72521468 -8 2 5 1 5 66823.27001128 71804.16179420 -80589.04078845 -8 2 5 1 6 -533.32840144 0.40705550 -3079.99615590 -8 2 5 1 7 2.95650837 537.54892426 3077.41456707 -8 2 5 1 8 -71804.31176201 -66836.57429896 80598.45662489 -8 2 5 2 1 3053.08764492 9459.57348619 -3057.89732702 -8 2 5 2 2 1552.59537449 0.64271921 -531.58234758 -8 2 5 2 3 -1553.75226907 0.89980690 534.27105629 -8 2 5 2 4 -3055.48712998 -9463.14057781 3062.23568169 -8 2 5 2 5 71805.51150454 73991.95656510 -71878.31016719 -8 2 5 2 6 533.93898469 0.74983908 -1553.45233344 -8 2 5 2 7 -533.97112065 0.86767094 1555.40191504 -8 2 5 2 8 -71801.89085298 -73991.48523768 71869.25853830 -8 2 5 3 1 86.53142980 3053.69822817 891.32300207 -8 2 5 3 2 -3073.26902815 3.67421149 -539.56277779 -8 2 5 3 3 3069.42342487 -539.28426613 -0.32135961 -8 2 5 3 4 -3076.40764030 4.82039408 1554.50210815 -8 2 5 3 5 -80588.73014083 -71875.71786638 66908.07681120 -8 2 5 3 6 -109.02660219 884.03885101 3073.52611584 -8 2 5 3 7 3080.91738677 1558.20845560 -2.51731691 -8 2 5 3 8 80610.55045805 66910.65840003 -71885.03729494 -8 3 5 1 1 -2.52802890 3071.37300648 537.61319618 -8 3 5 1 2 -3054.18026758 -87.31340484 -890.29465133 -8 3 5 1 3 -4.50974647 3074.68301042 -1558.12275970 -8 3 5 1 4 542.73352590 -3070.69815131 -0.12854384 -8 3 5 1 5 -66915.01817868 -80608.27951684 71898.53439837 -8 3 5 1 6 -1555.05913146 -3081.62437790 -1.45683021 -8 3 5 1 7 -885.45283328 101.12115589 -3068.78070566 -8 3 5 1 8 71873.93967656 80600.67400617 -66917.49264764 -8 3 5 2 1 3073.46184392 -2.67799671 -1556.92301718 -8 3 5 2 2 -3070.71957528 542.75494987 -0.11783186 -8 3 5 2 3 3071.61938218 -2.16382134 537.89170784 -8 3 5 2 4 -87.32411683 -3054.11599566 -890.35892326 -8 3 5 2 5 -80607.59394968 -66913.73274026 71897.91310314 -8 3 5 2 6 -3081.61366591 -1555.05913146 -1.41398226 -8 3 5 2 7 100.92834013 -885.08862572 -3068.98423341 -8 3 5 2 8 80601.08106167 71870.16905719 -66918.14607884 -8 3 5 3 1 -536.79908518 -1559.33321422 3.94201116 -8 3 5 3 2 1563.07169763 534.27105629 -6.56644794 -8 3 5 3 3 -1560.16874919 -535.94212623 3.38498785 -8 3 5 3 4 533.46765727 1563.95008055 -6.06298456 -8 3 5 3 5 71892.70707753 71890.86461579 -74116.34415644 -8 3 5 3 6 -3071.10520681 -3070.84811912 9448.22949211 -8 3 5 3 7 3064.97795033 3065.24575000 -9458.18092790 -8 3 5 3 8 -71886.12991760 -71888.13305914 74131.61944969 -8 1 6 1 1 -0.04284795 -0.00000000 -890.03756365 -8 1 6 1 2 0.19281576 0.17139179 0.84624696 -8 1 6 1 3 -0.02142397 -0.00000000 -889.95186776 -8 1 6 1 4 -0.17139179 -0.08569589 0.89980690 -8 1 6 1 5 0.08569589 0.02142397 883.43897975 -8 1 6 1 6 -2.02456552 -1.79961379 3.55637964 -8 1 6 1 7 0.04284795 0.02142397 887.55238270 -8 1 6 1 8 2.01385353 1.77818982 3.70634745 -8 1 6 2 1 536.37060571 536.41345366 -91.33039991 -8 1 6 2 2 0.79268703 -0.58915928 2915.63142962 -8 1 6 2 3 -536.43487763 -536.49914955 -93.53706920 -8 1 6 2 4 0.06427192 -0.21423974 3374.36155462 -8 1 6 2 5 533.32840144 -533.30697747 -112.60440580 -8 1 6 2 6 -0.91051888 -3.53495566 -2951.64512942 -8 1 6 2 7 -537.97740374 537.95597976 -89.35939433 -8 1 6 2 8 4.84181806 -0.34278358 -2951.55943353 -8 1 6 3 1 1557.65143228 -3076.63259203 -3060.73600354 -8 1 6 3 2 0.29993563 574.86948646 1.08191067 -8 1 6 3 3 1557.65143228 -3076.65401600 3058.65787809 -8 1 6 3 4 0.48203941 2914.26029531 0.89980690 -8 1 6 3 5 -1554.35214033 -3080.42463537 3070.95523899 -8 1 6 3 6 3.80275533 -2950.76674650 -1.62822200 -8 1 6 3 7 -1558.67978302 -3077.06107150 -3062.21425772 -8 1 6 3 8 -6.81282364 11772.46283957 -7.05919934 -8 2 6 1 1 -536.37060571 -536.37060571 -91.33039991 -8 2 6 1 2 -0.08569589 0.14996782 3374.37226661 -8 2 6 1 3 536.37060571 536.39202968 -93.36567741 -8 2 6 1 4 -0.79268703 0.59987126 2915.67427757 -8 2 6 1 5 -533.24270555 533.28555349 -112.56155785 -8 2 6 1 6 -4.83110607 0.34278358 -2951.62370545 -8 2 6 1 7 537.97740374 -537.93455579 -89.35939433 -8 2 6 1 8 0.92123087 3.57780361 -2951.58085750 -8 2 6 2 1 0.04284795 0.08569589 -890.05898762 -8 2 6 2 2 0.06427192 -0.01071199 1.28543842 -8 2 6 2 3 0.06427192 0.02142397 -894.49375018 -8 2 6 2 4 -0.02142397 -0.00000000 1.24259047 -8 2 6 2 5 -0.02142397 -0.02142397 883.31043591 -8 2 6 2 6 -3.10647619 -0.79268703 5.52738522 -8 2 6 2 7 -0.14996782 0.04284795 887.57380667 -8 2 6 2 8 3.08505221 0.72841511 5.51667323 -8 2 6 3 1 -3076.71828792 1557.60858433 3060.73600354 -8 2 6 3 2 2914.19602338 0.54631133 0.54631133 -8 2 6 3 3 -3076.63259203 1557.67285626 -3058.65787809 -8 2 6 3 4 574.83735050 0.27851166 0.70699113 -8 2 6 3 5 -3080.46748332 -1554.39498828 3071.25517462 -8 2 6 3 6 -2950.77745849 3.87773924 -3.47068374 -8 2 6 3 7 -3076.95395163 -1558.63693507 -3062.14998580 -8 2 6 3 8 11772.51639950 -6.94136748 -8.90166107 -8 3 6 1 1 1557.65143228 -3076.71828792 3060.65030764 -8 3 6 1 2 0.55702332 2914.23887133 -0.85695895 -8 3 6 1 3 1557.54431241 -3076.76113587 -3058.65787809 -8 3 6 1 4 0.35349557 574.82663851 -1.11404663 -8 3 6 1 5 -1554.35214033 -3080.48890729 -3071.16947873 -8 3 6 1 6 -6.86638357 11772.53782347 7.11275927 -8 3 6 1 7 -1558.74405494 -3076.95395163 3062.21425772 -8 3 6 1 8 3.77061937 -2950.79888246 1.56395008 -8 3 6 2 1 -3076.73971189 1557.63000831 -3060.82169943 -8 3 6 2 2 574.82663851 0.50346338 -0.94265484 -8 3 6 2 3 -3076.71828792 1557.56573639 3058.65787809 -8 3 6 2 4 2914.24958332 0.47132742 -0.72841511 -8 3 6 2 5 -3080.44605934 -1554.43783623 -3071.12663078 -8 3 6 2 6 11773.15911871 -6.17010443 7.94829424 -8 3 6 2 7 -3077.08249547 -1558.65835905 3064.46377496 -8 3 6 2 8 -2951.45231366 3.20288407 2.52802890 -8 3 6 3 1 -0.00000000 0.04284795 -9469.88912953 -8 3 6 3 2 -1.32828637 1.16760657 3.02078029 -8 3 6 3 3 0.06427192 0.08569589 -9469.99624940 -8 3 6 3 4 1.24259047 -1.26401445 3.06362824 -8 3 6 3 5 -0.00000000 -0.00000000 9444.75880837 -8 3 6 3 6 9.36227651 9.38370048 8.56958948 -8 3 6 3 7 0.04284795 -0.04284795 9471.86013511 -8 3 6 3 8 -9.44797240 -9.38370048 8.52674154 -8 1 7 1 1 -9466.50414169 -3061.52869056 -3062.05357792 -8 1 7 1 2 9464.89734366 3057.79020715 3056.56904065 -8 1 7 1 3 1.48896617 1556.53738565 536.11351802 -8 1 7 1 4 0.27851166 -1557.43719255 -538.85578666 -8 1 7 1 5 1.49967816 537.65604413 1557.05156102 -8 1 7 1 6 -0.21423974 -538.55585103 -1557.82282407 -8 1 7 1 7 -74105.07514627 -72009.16779859 -72003.50115755 -8 1 7 1 8 74103.76828387 72014.65233586 72012.37068266 -8 1 7 2 1 3061.52869056 -889.86617186 91.33039991 -8 1 7 2 2 -0.96407882 -1554.76990782 -3072.66915689 -8 1 7 2 3 1557.90851997 -1.13547061 3076.78255984 -8 1 7 2 4 890.31607531 -3057.11535198 -88.71667512 -8 1 7 2 5 -533.64976105 2.63514877 3080.18897166 -8 1 7 2 6 0.26779967 538.38445924 -3077.53239892 -8 1 7 2 7 -72007.32533685 -67050.01063700 -80809.16140629 -8 1 7 2 8 67031.95022717 72012.04932306 80799.74556985 -8 1 7 3 1 3061.31445083 90.62340878 -889.91973179 -8 1 7 3 2 -2.05670148 -3073.98673127 -1559.90094952 -8 1 7 3 3 -538.45944314 3076.67543997 -0.06427192 -8 1 7 3 4 -1.16760657 -3075.49712142 535.85643034 -8 1 7 3 5 1554.15932457 3075.79705705 -1.60679803 -8 1 7 3 6 888.75212523 -90.34489712 -3062.77128104 -8 1 7 3 7 -71999.11995492 -80808.28302337 -67021.20610436 -8 1 7 3 8 67036.64207741 80805.02657937 71999.40917857 -8 2 7 1 1 -1.17831855 1557.91923195 3076.72899991 -8 2 7 1 2 -3056.21554508 889.73762802 -89.32725837 -8 2 7 1 3 -889.86617186 3061.48584261 91.35182388 -8 2 7 1 4 -1554.59851603 -0.87838292 -3072.73342881 -8 2 7 1 5 2.64586075 -533.58548913 3080.08185179 -8 2 7 1 6 538.55585103 0.17139179 -3077.38243110 -8 2 7 1 7 -67052.13161040 -72007.22892897 -80809.03286245 -8 2 7 1 8 72012.72417823 67032.37870664 80800.28116919 -8 2 7 2 1 1557.43719255 0.70699113 535.59934265 -8 2 7 2 2 -1556.55880962 -0.34278358 -539.48779388 -8 2 7 2 3 -3060.69315559 -9467.40394858 -3061.40014672 -8 2 7 2 4 3057.98302291 9464.96161558 3056.45120879 -8 2 7 2 5 537.92384380 1.28543842 1557.15868089 -8 2 7 2 6 -538.36303526 -0.34278358 -1557.77997612 -8 2 7 2 7 -72011.18165212 -74105.65359356 -72003.56542947 -8 2 7 2 8 72013.43116936 74106.77835218 72013.15265770 -8 2 7 3 1 3076.69686395 -538.40588321 -0.02142397 -8 2 7 3 2 -3076.46120024 -0.52488736 536.60626942 -8 2 7 3 3 90.66625672 3061.31445083 -889.90901981 -8 2 7 3 4 -3074.16883505 -2.18524532 -1559.68670978 -8 2 7 3 5 3075.79705705 1554.15932457 -1.54252611 -8 2 7 3 6 -90.54842487 888.79497318 -3062.87840091 -8 2 7 3 7 -80806.51554554 -71999.59128235 -67021.60244787 -8 2 7 3 8 80804.48026804 67036.44926165 71999.11995492 -8 3 7 1 1 -1.26401445 3077.82162257 1557.54431241 -8 3 7 1 2 -3059.64338088 -90.82693653 890.85167465 -8 3 7 1 3 -0.21423974 3076.86825574 -538.14879553 -8 3 7 1 4 534.91377550 -3075.11148989 -0.02142397 -8 3 7 1 5 -885.99914461 100.47843668 3064.57089483 -8 3 7 1 6 -1558.97971865 -3077.06107150 0.40705550 -8 3 7 1 7 -67039.08441041 -80810.96102008 -71996.66690993 -8 3 7 1 8 72010.17472536 80798.69579514 67021.52746396 -8 3 7 2 1 3076.82540779 -0.20352775 -538.14879553 -8 3 7 2 2 -3076.88967971 536.22063789 1.25330246 -8 3 7 2 3 3077.88589449 -1.22116650 1557.52288844 -8 3 7 2 4 -91.19114408 -3059.79334869 891.04449041 -8 3 7 2 5 100.47843668 -885.94558467 3064.48519893 -8 3 7 2 6 -3077.50026296 -1558.80832686 0.29993563 -8 3 7 2 7 -80806.79405720 -67039.27722618 -71996.83830172 -8 3 7 2 8 80797.19611698 72009.09281468 67020.41341733 -8 3 7 3 1 1559.60101389 535.57791868 2.20666929 -8 3 7 3 2 -1557.86567202 -537.98811572 2.71013267 -8 3 7 3 3 536.44558962 1558.76547892 2.76369261 -8 3 7 3 4 -536.30633379 -1559.49389402 3.83489129 -8 3 7 3 5 -3070.79455919 -3071.12663078 -9457.31325697 -8 3 7 3 6 3063.01765673 3062.55704130 9469.35353019 -8 3 7 3 7 -71994.68519237 -71990.52894147 -74108.67437385 -8 3 7 3 8 72000.57678514 72002.17287118 74085.15085072 -8 1 8 1 1 74108.80291769 -67033.86767282 -67025.90866658 -8 1 8 1 2 -3.74919540 -3.32071592 4.95964991 -8 1 8 1 3 -74100.09407238 67048.96086229 -67036.34214178 -8 1 8 1 4 -0.42847947 6.79139966 -9.49082035 -8 1 8 1 5 -73987.00762717 -66833.67135052 66912.89720528 -8 1 8 1 6 -0.13925583 4.88466601 -7.49839080 -8 1 8 1 7 74102.84705300 67030.41841305 67035.75298250 -8 1 8 1 8 -120.25276441 -220.12061784 125.99438937 -8 1 8 2 1 -71998.26299598 72006.72546559 80806.82619316 -8 1 8 2 2 2.37806108 0.43919146 -2960.32183877 -8 1 8 2 3 72005.60070697 -71997.25606921 80805.87282633 -8 1 8 2 4 3.72777142 -0.89980690 -2960.27899083 -8 1 8 2 5 -71805.23299288 -71800.56256662 80610.40049023 -8 1 8 2 6 2.89223645 1.84246174 11771.35950492 -8 1 8 2 7 72008.63219925 72013.14194571 80808.95787854 -8 1 8 2 8 -219.87424215 -223.70913344 -328883.09457524 -8 1 8 3 1 -71993.87108137 80814.38885588 72003.47973357 -8 1 8 3 2 -7.36984695 -2964.74588934 1.69249392 -8 1 8 3 3 -71999.11995492 80816.26345358 -72004.30455656 -8 1 8 3 4 -9.12661280 11771.27380902 1.07119869 -8 1 8 3 5 71865.80927854 80595.91788401 -71885.10156686 -8 1 8 3 6 4.52045845 -2952.73775208 -7.06991132 -8 1 8 3 7 72012.25285081 80801.49162371 72004.78659597 -8 1 8 3 8 127.02274010 -328881.83056079 -114.39330760 -8 2 8 1 1 -71998.07018021 72006.52193784 80806.55839349 -8 2 8 1 2 2.42090903 0.42847947 -2960.30041480 -8 2 8 1 3 72005.90064260 -71997.38461305 80806.12991401 -8 2 8 1 4 3.69563546 -0.92123087 -2960.30041480 -8 2 8 1 5 -71805.11516103 -71800.51971867 80610.42191421 -8 2 8 1 6 2.82796453 1.64964598 11771.55232068 -8 2 8 1 7 72008.50365541 72013.13123373 80808.89360662 -8 2 8 1 8 -220.30272162 -223.11997416 -328883.21240709 -8 2 8 2 1 67049.81782124 -74100.98316729 -67035.01385541 -8 2 8 2 2 5.20602561 0.99621478 -8.11968603 -8 2 8 2 3 -67033.01071387 74108.03165464 -67027.08698514 -8 2 8 2 4 -3.77061937 -4.13482693 5.03463382 -8 2 8 2 5 -66833.22144707 -73986.87908333 66912.57584568 -8 2 8 2 6 3.31000394 1.19974253 -7.77690246 -8 2 8 2 7 67035.07812733 74102.60067731 67035.88152634 -8 2 8 2 8 -223.36634986 -120.74551581 124.91247869 -8 2 8 3 1 80814.65665555 -71997.99519630 -72003.32976576 -8 2 8 3 2 11772.19503989 -9.80146797 1.74605386 -8 2 8 3 3 80814.47455177 -71994.53522455 72004.13316477 -8 2 8 3 4 -2964.61734550 -7.30557503 1.75676584 -8 2 8 3 5 80593.21846332 71865.81999052 -71885.20868673 -8 2 8 3 6 -2952.57707228 4.43476256 -7.13418324 -8 2 8 3 7 80799.57417806 72010.67818874 72003.22264589 -8 2 8 3 8 -328876.91375882 128.64025012 -115.12172271 -8 3 8 1 1 -71993.91392931 80810.03978921 72003.31905377 -8 3 8 1 2 -7.45554285 -2964.12459411 1.36042233 -8 3 8 1 3 -71999.54843440 80816.67050908 -72004.69018809 -8 3 8 1 4 -8.52674154 11773.97322971 -0.85695895 -8 3 8 1 5 71865.78785456 80595.98215593 -71885.25153468 -8 3 8 1 6 4.70256223 -2952.24500069 -6.83424761 -8 3 8 1 7 72012.25285081 80799.44563422 72004.86157988 -8 3 8 1 8 126.80850037 -328879.72029938 -112.21877427 -8 3 8 2 1 80814.24960005 -71997.29891716 -72002.78345443 -8 3 8 2 2 11773.09484679 -10.47632314 1.11404663 -8 3 8 2 3 80814.34600793 -71994.23528892 72004.04746888 -8 3 8 2 4 -2964.47808967 -7.15560722 1.56395008 -8 3 8 2 5 80594.00043836 71866.80549331 -71885.93710183 -8 3 8 2 6 -2952.52351235 4.39191461 -7.06991132 -8 3 8 2 7 80797.49605261 72010.98883636 72003.52258152 -8 3 8 2 8 -328876.37815948 126.85134831 -114.42544356 -8 3 8 3 1 67028.69378317 -67026.93701732 -74118.22946612 -8 3 8 3 2 -4.45618653 2.31378916 3.62065156 -8 3 8 3 3 -67026.84060944 67028.80090304 -74118.52940176 -8 3 8 3 4 1.44611823 -3.64207553 3.06362824 -8 3 8 3 5 -66906.88778066 -66906.98418854 74137.23253080 -8 3 8 3 6 1.30686240 1.67106995 3.85631527 -8 3 8 3 7 67020.44555329 67018.21746002 74090.72108389 -8 3 8 3 8 -113.37566885 -113.37566885 -1.74605386 diff --git a/examples/USER/phonon/third_order_command/silicon/silicon_input_file.lmp b/examples/USER/phonon/third_order_command/silicon/silicon_input_file.lmp deleted file mode 100755 index 5066049895..0000000000 --- a/examples/USER/phonon/third_order_command/silicon/silicon_input_file.lmp +++ /dev/null @@ -1,29 +0,0 @@ -LAMMPS description - - 8 atoms - 0 bonds - 0 angles - 0 dihedrals - 0 impropers - - 1 atom types - 0 bond types - 0 angle types - 0 dihedral types - 0 improper types - - - 0.0000000 5.4310000 xlo xhi - 0.0000000 5.4310000 ylo yhi - 0.0000000 5.4310000 zlo zhi - - Atoms - - 1 1 1 0.0000000 0.0000000 0.0000000 0.0000000 - 2 2 1 0.0000000 1.3577500 1.3577500 1.3572000 - 3 3 1 0.0000000 2.7155000 2.7155000 0.0000000 - 4 4 1 0.0000000 4.0732500 4.0732500 1.3572000 - 5 5 1 0.0000000 2.7155000 0.0000000 2.7144000 - 6 6 1 0.0000000 4.0732500 1.3577500 4.0732500 - 7 7 1 0.0000000 0.0000000 2.7155000 2.7155000 - 8 8 1 0.0000000 1.3577500 4.0732500 4.0732500 diff --git a/src/USER-PHONON/README b/src/USER-PHONON/README index b1ffcb9b09..697f4ca086 100644 --- a/src/USER-PHONON/README +++ b/src/USER-PHONON/README @@ -3,12 +3,11 @@ matrices from finite temperature MD simulations, which can then be used to compute phonon dispersion relations, directly from molecular dynamics simulations. -It also contains two commands to compute the dynamical matrix and -the corresponding third order matrix at pre-optimized positions -through finite differences. +It also contains a command to compute the dynamical matrix at +pre-optimized positions through finite differences. See the doc page for the fix phonon command or the dynamical_matrix -third_order commands for detailed usage instructions. +command for detailed usage instructions. Use of this package requires building LAMMPS with FFT suppport, as described in doc/Section_start.html. @@ -30,5 +29,5 @@ The person who created fix phonon is Ling-Ti Kong (konglt at sjtu.edu.cn) at Shanghai Jiao Tong University. Contact him directly if you have questions. -The person who created dynamical_matrix and third_order is -Charlie Sievers at UC Davis. +The person who created the dynamical_matrix command is Charlie Sievers +at UC Davis. Contact him directly if you have questions about his code. diff --git a/src/USER-PHONON/third_order.cpp b/src/USER-PHONON/third_order.cpp deleted file mode 100644 index f7d72687c6..0000000000 --- a/src/USER-PHONON/third_order.cpp +++ /dev/null @@ -1,560 +0,0 @@ -// -// Created by charlie sievers on 7/5/18. -// - - -#include -#include -#include "third_order.h" -#include "atom.h" -#include "complex" -#include "domain.h" -#include "comm.h" -#include "group.h" -#include "force.h" -#include "math_extra.h" -#include "memory.h" -#include "bond.h" -#include "angle.h" -#include "dihedral.h" -#include "improper.h" -#include "kspace.h" -#include "update.h" -#include "neighbor.h" -#include "pair.h" -#include "timer.h" -#include "finish.h" -#include - - -using namespace LAMMPS_NS; -enum{REGULAR,BALLISTICO}; - -/* ---------------------------------------------------------------------- */ - -ThirdOrder::ThirdOrder(LAMMPS *lmp) : Pointers(lmp), fp(NULL) -{ - external_force_clear = 1; -} - -/* ---------------------------------------------------------------------- */ - -ThirdOrder::~ThirdOrder() -{ - if (fp && me == 0) fclose(fp); - memory->destroy(groupmap); - fp = NULL; -} - -/* ---------------------------------------------------------------------- - setup without output or one-time post-init setup - flag = 0 = just force calculation - flag = 1 = reneighbor and force calculation -------------------------------------------------------------------------- */ - -void ThirdOrder::setup() -{ - // setup domain, communication and neighboring - // acquire ghosts - // build neighbor lists - if (triclinic) domain->x2lamda(atom->nlocal); - domain->pbc(); - domain->reset_box(); - comm->setup(); - if (neighbor->style) neighbor->setup_bins(); - comm->exchange(); - comm->borders(); - if (triclinic) domain->lamda2x(atom->nlocal+atom->nghost); - domain->image_check(); - domain->box_too_small_check(); - neighbor->build(1); - neighbor->ncalls = 0; - neighbor->every = 3; // build every this many steps - neighbor->delay = 1; - neighbor->ago = 0; - neighbor->ndanger = 0; - - // compute all forces - - external_force_clear = 0; - eflag=0; - vflag=0; - update_force(); - - if (gcount == atom->natoms) - for (bigint i=0; inatoms; i++) - groupmap[i] = i; - else - create_groupmap(); -} - -/* ---------------------------------------------------------------------- */ - -void ThirdOrder::command(int narg, char **arg) -{ - MPI_Comm_rank(world,&me); - - if (domain->box_exist == 0) - error->all(FLERR,"Third_order command before simulation box is defined"); - if (narg < 2) error->all(FLERR,"Illegal third_oreder command"); - - lmp->init(); - - // orthogonal vs triclinic simulation box - - triclinic = domain->triclinic; - - if (force->pair && force->pair->compute_flag) pair_compute_flag = 1; - else pair_compute_flag = 0; - if (force->kspace && force->kspace->compute_flag) kspace_compute_flag = 1; - else kspace_compute_flag = 0; - - // group and style - - igroup = group->find(arg[0]); - if (igroup == -1) error->all(FLERR,"Could not find third_order group ID"); - groupbit = group->bitmask[igroup]; - gcount = group->count(igroup); - dynlen = (gcount)*3; - memory->create(groupmap,atom->natoms,"total_group_map:totalgm"); - update->setupflag = 1; - - int style = -1; - if (strcmp(arg[1],"regular") == 0) style = REGULAR; - else if (strcmp(arg[1],"ballistico") == 0) style = BALLISTICO; - else error->all(FLERR,"Illegal Dynamical Matrix command"); - - // set option defaults - - binaryflag = 0; - scaleflag = 0; - compressed = 0; - file_flag = 0; - file_opened = 0; - conversion = 1; - - // read options from end of input line - if (style == REGULAR) options(narg-3,&arg[3]); //COME BACK - else if (style == BALLISTICO) options(narg-3,&arg[3]); //COME BACK - else if (comm->me == 0 && screen) fprintf(screen,"Illegal Dynamical Matrix command\n"); - del = force->numeric(FLERR, arg[2]); - - // move atoms by 3-vector or specified variable(s) - - if (style == REGULAR) { - setup(); - timer->init(); - timer->barrier_start(); - calculateMatrix(); - timer->barrier_stop(); - } - - if (style == BALLISTICO) { - setup(); - convert_units(update->unit_style); - conversion = conv_energy/conv_distance/conv_distance; - timer->init(); - timer->barrier_start(); - calculateMatrix(); - timer->barrier_stop(); - } - - Finish finish(lmp); - finish.end(1); -} - -/* ---------------------------------------------------------------------- - parse optional parameters -------------------------------------------------------------------------- */ - -void ThirdOrder::options(int narg, char **arg) -{ - if (narg < 0) error->all(FLERR,"Illegal dynamical_matrix command"); - int iarg = 0; - const char *filename = "third_order.txt"; - - while (iarg < narg) { - if (strcmp(arg[iarg],"file") == 0) { - if (iarg+2 > narg) error->all(FLERR, "Illegal dynamical_matrix command"); - filename = arg[iarg + 1]; - file_flag = 1; - iarg += 2; - } - else if (strcmp(arg[iarg],"binary") == 0) { - if (iarg + 2 > narg) error->all(FLERR, "Illegal dynamical_matrix command"); - if (strcmp(arg[iarg+1],"gzip") == 0) { - compressed = 1; - } - else if (strcmp(arg[iarg+1],"yes") == 0) { - binaryflag = 1; - } - iarg += 2; - } else error->all(FLERR,"Illegal dynamical_matrix command"); - } - if (file_flag == 1 && me == 0) { - openfile(filename); - } -} - -/* ---------------------------------------------------------------------- - generic opening of a file - ASCII or binary or gzipped - some derived classes override this function -------------------------------------------------------------------------- */ - -void ThirdOrder::openfile(const char* filename) -{ - // if file already opened, return - if (file_opened) return; - - if (compressed) { -#ifdef LAMMPS_GZIP - char gzip[128]; - sprintf(gzip,"gzip -6 > %s",filename); -#ifdef _WIN32 - fp = _popen(gzip,"wb"); -#else - fp = popen(gzip,"w"); -#endif -#else - error->one(FLERR,"Cannot open gzipped file"); -#endif - } else if (binaryflag) { - fp = fopen(filename,"wb"); - } else { - fp = fopen(filename,"w"); - } - - if (fp == NULL) error->one(FLERR,"Cannot open dump file"); - - file_opened = 1; -} - -/* ---------------------------------------------------------------------- - create dynamical matrix -------------------------------------------------------------------------- */ - -void ThirdOrder::calculateMatrix() -{ - int local_idx; // local index - int local_jdx; // second local index - int local_kdx; // third local index - int nlocal = atom->nlocal; - int natoms = atom->natoms; - int *gm = groupmap; - double **f = atom->f; - - double *dynmat = new double[3*dynlen]; - double *fdynmat = new double[3*dynlen]; - memset(&dynmat[0],0,dynlen*sizeof(double)); - memset(&fdynmat[0],0,dynlen*sizeof(double)); - - if (comm->me == 0 && screen) fprintf(screen,"Calculating Anharmonic Dynamical Matrix...\n"); - - update->nsteps = 0; - for (bigint i=1; i<=natoms; i++){ - local_idx = atom->map(i); - for (bigint alpha=0; alpha<3; alpha++){ - for (bigint j=1; j<=natoms; j++){ - local_jdx = atom->map(j); - for (int beta=0; beta<3; beta++){ - displace_atom(local_idx, alpha, 1); - displace_atom(local_jdx, beta, 1); - update_force(); - for (bigint k=1; k<=natoms; k++){ - local_kdx = atom->map(k); - for (int gamma=0; gamma<3; gamma++){ - if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 - && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 - && local_kdx < nlocal) { - dynmat[gm[k-1]*3+gamma] += f[local_kdx][gamma]; - } - } - } - displace_atom(local_jdx, beta, -2); - update_force(); - for (bigint k=1; k<=natoms; k++){ - local_kdx = atom->map(k); - for (int gamma=0; gamma<3; gamma++){ - if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 - && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 - && local_kdx < nlocal) { - dynmat[gm[k-1]*3+gamma] -= f[local_kdx][gamma]; - } - } - } - displace_atom(local_jdx, beta, 1); - displace_atom(local_idx,alpha,-2); - displace_atom(local_jdx, beta, 1); - update_force(); - for (bigint k=1; k<=natoms; k++){ - local_kdx = atom->map(k); - for (int gamma=0; gamma<3; gamma++){ - if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 - && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 - && local_kdx < nlocal) { - dynmat[gm[k-1]*3+gamma] -= f[local_kdx][gamma]; - } - } - } - displace_atom(local_jdx, beta, -2); - update_force(); - for (bigint k=1; k<=natoms; k++){ - local_kdx = atom->map(k); - for (int gamma=0; gamma<3; gamma++){ - if (local_idx >= 0 && local_jdx >= 0 && local_kdx >= 0 - && gm[i-1] >= 0 && gm[j-1] >= 0 && gm[k-1] >= 0 - && local_kdx < nlocal) { - dynmat[gm[k-1]*3+gamma] += f[local_kdx][gamma]; - dynmat[gm[k-1]*3+gamma] /= -(4 * del * del); - } - } - } - displace_atom(local_jdx, beta, 1); - displace_atom(local_idx, alpha, 1); - MPI_Reduce(dynmat,fdynmat,3*dynlen,MPI_DOUBLE,MPI_SUM,0,world); - if (me == 0){ - writeMatrix(fdynmat, gm[i-1], alpha, gm[j-1], beta); - } - memset(&dynmat[0],0,dynlen*sizeof(double)); - } - } - } - } - - delete [] dynmat; - delete [] fdynmat; - - if (screen && me ==0 ) fprintf(screen,"Finished Calculating Third Order Tensor\n"); - -} - -/* ---------------------------------------------------------------------- - write dynamical matrix -------------------------------------------------------------------------- */ - -void ThirdOrder::writeMatrix(double *dynmat, int i, int a, int j, int b) -{ - if (me != 0) - return; - - if (!binaryflag && fp) { - clearerr(fp); - for (int k = 0; k < gcount; k++){ - if (dynmat[k*3] > 1.0e-16 - && dynmat[k*3+1] > 1.0e-16 - && dynmat[k*3+2] > 1.0e-16) - fprintf(fp, - "%d %d %d %d %d %7.8f %7.8f %7.8f\n", - i+1, a + 1, j+1, b + 1, groupmap[k]+1, - dynmat[k*3] * conversion, - dynmat[k*3+1] * conversion, - dynmat[k*3+2] * conversion); - } - } - else if (binaryflag && fp){ - clearerr(fp); - fwrite(&dynmat[0], sizeof(double), dynlen, fp); - } - if (ferror(fp)) error->one(FLERR,"Error writing to file"); - -} - -/* ---------------------------------------------------------------------- - Displace atoms - ---------------------------------------------------------------------- */ - -void ThirdOrder::displace_atom(int local_idx, int direction, int magnitude) -{ - if (local_idx < 0) return; - - double **x = atom->x; - int *sametag = atom->sametag; - int j = local_idx; - - x[local_idx][direction] += del*magnitude; - - while (sametag[j] >= 0){ - j = sametag[j]; - x[j][direction] += del*magnitude; - } -} - -/* ---------------------------------------------------------------------- - evaluate potential energy and forces - may migrate atoms due to reneighboring - return new energy, which should include nextra_global dof - return negative gradient stored in atom->f - return negative gradient for nextra_global dof in fextra -------------------------------------------------------------------------- */ - -void ThirdOrder::update_force() -{ - force_clear(); - - timer->stamp(); - - if (pair_compute_flag) { - force->pair->compute(eflag,vflag); - timer->stamp(Timer::PAIR); - } - - if (atom->molecular) { - if (force->bond) force->bond->compute(eflag,vflag); - if (force->angle) force->angle->compute(eflag,vflag); - if (force->dihedral) force->dihedral->compute(eflag,vflag); - if (force->improper) force->improper->compute(eflag,vflag); - timer->stamp(Timer::BOND); - } - - if (kspace_compute_flag) { - force->kspace->compute(eflag,vflag); - timer->stamp(Timer::KSPACE); - } - - if (force->newton) { - comm->reverse_comm(); - timer->stamp(Timer::COMM); - } - ++ update->nsteps; -} - -/* ---------------------------------------------------------------------- - clear force on own & ghost atoms - clear other arrays as needed -------------------------------------------------------------------------- */ - -void ThirdOrder::force_clear() -{ - if (external_force_clear) return; - - // clear global force array - // if either newton flag is set, also include ghosts - - size_t nbytes = sizeof(double) * atom->nlocal; - if (force->newton) nbytes += sizeof(double) * atom->nghost; - - if (nbytes) { - memset(&atom->f[0][0],0,3*nbytes); - } -} - -/* ---------------------------------------------------------------------- */ - -void ThirdOrder::convert_units(const char *style) -{ - // physical constants from: - // http://physics.nist.gov/cuu/Constants/Table/allascii.txt - // using thermochemical calorie = 4.184 J - - if (strcmp(style,"lj") == 0) { - error->all(FLERR,"Conversion Not Set"); - //conversion = 1; // lj -> 10 J/mol - - } else if (strcmp(style,"real") == 0) { - conv_energy = 418.4; // kcal/mol -> 10 J/mol - conv_mass = 1; // g/mol -> g/mol - conv_distance = 1; // angstrom -> angstrom - - } else if (strcmp(style,"metal") == 0) { - conv_energy = 9648.5; // eV -> 10 J/mol - conv_mass = 1; // g/mol -> g/mol - conv_distance = 1; // angstrom -> angstrom - - } else if (strcmp(style,"si") == 0) { - if (comm->me) error->warning(FLERR,"Conversion Warning: Multiplication by Large Float"); - conv_energy = 6.022E22; // J -> 10 J/mol - conv_mass = 6.022E26; // kg -> g/mol - conv_distance = 1E-10; // meter -> angstrom - - } else if (strcmp(style,"cgs") == 0) { - if (comm->me) error->warning(FLERR,"Conversion Warning: Multiplication by Large Float"); - conv_energy = 6.022E12; // Erg -> 10 J/mol - conv_mass = 6.022E23; // g -> g/mol - conv_distance = 1E-7; // centimeter -> angstrom - - } else if (strcmp(style,"electron") == 0) { - conv_energy = 262550; // Hartree -> 10 J/mol - conv_mass = 1; // amu -> g/mol - conv_distance = 0.529177249; // bohr -> angstrom - - } else if (strcmp(style,"micro") == 0) { - if (comm->me) error->warning(FLERR,"Conversion Warning: Untested Conversion"); - conv_energy = 6.022E10; // picogram-micrometer^2/microsecond^2 -> 10 J/mol - conv_mass = 6.022E11; // pg -> g/mol - conv_distance = 1E-4; // micrometer -> angstrom - - } else if (strcmp(style,"nano") == 0) { - if (comm->me) error->warning(FLERR,"Conversion Warning: Untested Conversion"); - conv_energy = 6.022E4; // attogram-nanometer^2/nanosecond^2 -> 10 J/mol - conv_mass = 6.022E5; // ag -> g/mol - conv_distance = 0.1; // angstrom -> angstrom - - } else error->all(FLERR,"Units Type Conversion Not Found"); - -} - -/* ---------------------------------------------------------------------- */ - -void ThirdOrder::create_groupmap() -{ - //Create a group map which maps atom order onto group - - int local_idx; // local index - int gid = 0; //group index - int nlocal = atom->nlocal; - int *mask = atom->mask; - bigint natoms = atom->natoms; - int *recv = new int[comm->nprocs]; - int *displs = new int[comm->nprocs]; - int *temp_groupmap = new int[natoms]; - - //find number of local atoms in the group (final_gid) - for (bigint i=1; i<=natoms; i++){ - local_idx = atom->map(i); - if ((local_idx >= 0) && (local_idx < nlocal) && mask[local_idx] & groupbit) - gid += 1; // gid at the end of loop is final_Gid - } - //create an array of length final_gid - int *sub_groupmap = new int[gid]; - - gid = 0; - //create a map between global atom id and group atom id for each proc - for (bigint i=1; i<=natoms; i++){ - local_idx = atom->map(i); - if ((local_idx >= 0) && (local_idx < nlocal) && mask[local_idx] & groupbit){ - sub_groupmap[gid] = i; - gid += 1; - } - } - - //populate arrays for Allgatherv - for (int i=0; inprocs; i++){ - recv[i] = 0; - } - recv[comm->me] = gid; - MPI_Allreduce(recv,displs,4,MPI_INT,MPI_SUM,world); - for (int i=0; inprocs; i++){ - recv[i]=displs[i]; - if (i>0) displs[i] = displs[i-1]+recv[i-1]; - else displs[i] = 0; - } - - //combine subgroup maps into total temporary groupmap - MPI_Allgatherv(sub_groupmap,gid,MPI_INT,temp_groupmap,recv,displs,MPI_INT,world); - std::sort(temp_groupmap,temp_groupmap+gcount); - - //populate member groupmap based on temp groupmap - for (bigint i=0; icompute is skipped - int kspace_compute_flag; // 0 if kspace->compute is skipped - - int nvec; // local atomic dof = length of xvec - - void update_force(); - void force_clear(); - virtual void openfile(const char* filename); - - - private: - void options(int, char **); - void create_groupmap(); - void calculateMatrix(); - void convert_units(const char *style); - void displace_atom(int local_idx, int direction, int magnitude); - void writeMatrix(double *, int, int, int, int); - - double conversion; - double conv_energy; - double conv_distance; - double conv_mass; - double del; - int igroup,groupbit; - bigint dynlen; - int scaleflag; - int me; - int gcount; // number of atoms in group - int *groupmap; - - int compressed; // 1 if dump file is written compressed, 0 no - int binaryflag; // 1 if dump file is written binary, 0 no - int file_opened; // 1 if openfile method has been called, 0 no - int file_flag; // 1 custom file name, 0 dynmat.dat - - FILE *fp; - }; -} - - -#endif //LMP_THIRD_ORDER_H -#endif - From 1d2eab5e1b6443e70338b8b4a9d33157fc41efe4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Feb 2019 15:26:36 -0500 Subject: [PATCH 114/143] update attribution information in Package details documentation --- doc/src/Packages_details.txt | 7 ++++++- src/USER-PHONON/README | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index ebfe01d8a7..f5e8c4edbf 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -1700,14 +1700,19 @@ USER-PHONON package :link(PKG-USER-PHONON),h4 A "fix phonon"_fix_phonon.html command that calculates dynamical matrices, which can then be used to compute phonon dispersion relations, directly from molecular dynamics simulations. +And a "dynamical_matrix" command to compute the dynamical matrix +from finite differences. + +[Authors:] Ling-Ti Kong (Shanghai Jiao Tong University) for "fix phonon" +and Charlie Sievers (UC Davis) for "dynamical_matrix" -[Author:] Ling-Ti Kong (Shanghai Jiao Tong University). [Supporting info:] src/USER-PHONON: filenames -> commands src/USER-PHONON/README "fix phonon"_fix_phonon.html +"dynamical_matrix"_dynamical_matrix.html examples/USER/phonon :ul :line diff --git a/src/USER-PHONON/README b/src/USER-PHONON/README index 697f4ca086..b554eacd5e 100644 --- a/src/USER-PHONON/README +++ b/src/USER-PHONON/README @@ -30,4 +30,5 @@ sjtu.edu.cn) at Shanghai Jiao Tong University. Contact him directly if you have questions. The person who created the dynamical_matrix command is Charlie Sievers -at UC Davis. Contact him directly if you have questions about his code. +(charliesievers at cox.net) at UC Davis. Contact him directly if you +have questions about his code. From 5fd033c0a255024cc6cfe24c431ee4f8164955c9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Feb 2019 15:49:48 -0500 Subject: [PATCH 115/143] add one more false positive required by recent changes --- doc/utils/sphinx-config/false_positives.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index bbfdf946f4..99c7831192 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -2433,6 +2433,7 @@ shockvel si SiC Siepmann +Sievers Sij Sikandar Silbert From 50fef541c24740cd51c0448f165f2de8548cc8fd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Feb 2019 15:50:59 -0500 Subject: [PATCH 116/143] add x-ref --- doc/src/fix_phonon.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/src/fix_phonon.txt b/doc/src/fix_phonon.txt index 23d4d09552..73f2f4600b 100644 --- a/doc/src/fix_phonon.txt +++ b/doc/src/fix_phonon.txt @@ -179,7 +179,8 @@ settings"_Build_settings.html doc page for details. [Related commands:] -"compute msd"_compute_msd.html +"compute msd"_compute_msd.html, +"dynamical_matrix"_dynamical_matrix.html [Default:] From c555f7e2ed98ae2e33ce30d9ae9fbad36676418d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Feb 2019 17:52:53 -0500 Subject: [PATCH 117/143] update permissions --- examples/USER/smtbq/data.Alpha | 0 examples/USER/smtbq/ffield.smtbq.Al | 0 examples/USER/smtbq/ffield.smtbq.Al2O3 | 0 examples/USER/smtbq/ffield.smtbq.TiO2 | 0 examples/USER/smtbq/in.smtbq.Al | 0 examples/USER/smtbq/in.smtbq.Al2O3 | 0 examples/USER/smtbq/in.smtbq.TiO2 | 0 7 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 examples/USER/smtbq/data.Alpha mode change 100755 => 100644 examples/USER/smtbq/ffield.smtbq.Al mode change 100755 => 100644 examples/USER/smtbq/ffield.smtbq.Al2O3 mode change 100755 => 100644 examples/USER/smtbq/ffield.smtbq.TiO2 mode change 100755 => 100644 examples/USER/smtbq/in.smtbq.Al mode change 100755 => 100644 examples/USER/smtbq/in.smtbq.Al2O3 mode change 100755 => 100644 examples/USER/smtbq/in.smtbq.TiO2 diff --git a/examples/USER/smtbq/data.Alpha b/examples/USER/smtbq/data.Alpha old mode 100755 new mode 100644 diff --git a/examples/USER/smtbq/ffield.smtbq.Al b/examples/USER/smtbq/ffield.smtbq.Al old mode 100755 new mode 100644 diff --git a/examples/USER/smtbq/ffield.smtbq.Al2O3 b/examples/USER/smtbq/ffield.smtbq.Al2O3 old mode 100755 new mode 100644 diff --git a/examples/USER/smtbq/ffield.smtbq.TiO2 b/examples/USER/smtbq/ffield.smtbq.TiO2 old mode 100755 new mode 100644 diff --git a/examples/USER/smtbq/in.smtbq.Al b/examples/USER/smtbq/in.smtbq.Al old mode 100755 new mode 100644 diff --git a/examples/USER/smtbq/in.smtbq.Al2O3 b/examples/USER/smtbq/in.smtbq.Al2O3 old mode 100755 new mode 100644 diff --git a/examples/USER/smtbq/in.smtbq.TiO2 b/examples/USER/smtbq/in.smtbq.TiO2 old mode 100755 new mode 100644 From fbc9cf83542a87449981e52773e2d7d4a1d5610b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Feb 2019 17:53:17 -0500 Subject: [PATCH 118/143] fix huge memory leak --- src/USER-SMTBQ/pair_smtbq.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/USER-SMTBQ/pair_smtbq.cpp b/src/USER-SMTBQ/pair_smtbq.cpp index c2690dc864..0c259c950a 100644 --- a/src/USER-SMTBQ/pair_smtbq.cpp +++ b/src/USER-SMTBQ/pair_smtbq.cpp @@ -187,6 +187,16 @@ PairSMTBQ::~PairSMTBQ() memory->destroy(potqn); memory->destroy(dpotqn); + memory->destroy(fafbOxOxSurf); + memory->destroy(dfafbOxOxSurf); + memory->destroy(fafbTiOxSurf); + memory->destroy(dfafbTiOxSurf); + + memory->destroy(fafbOxOxBB); + memory->destroy(dfafbOxOxBB); + memory->destroy(fafbTiOxBB); + memory->destroy(dfafbTiOxBB); + memory->destroy(ecov); memory->destroy(sbcov); memory->destroy(coord); From 47b0c77dd9e8ba58555259152f36e50887345dc9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Feb 2019 17:53:50 -0500 Subject: [PATCH 119/143] replace variable length arrays with std::vector --- src/USER-SMTBQ/pair_smtbq.cpp | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/USER-SMTBQ/pair_smtbq.cpp b/src/USER-SMTBQ/pair_smtbq.cpp index 0c259c950a..1931754427 100644 --- a/src/USER-SMTBQ/pair_smtbq.cpp +++ b/src/USER-SMTBQ/pair_smtbq.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include "pair_smtbq.h" #include "atom.h" #include "comm.h" @@ -252,7 +253,7 @@ void PairSMTBQ::allocate() global settings ------------------------------------------------------------------------- */ -void PairSMTBQ::settings(int narg, char **/*arg*/) +void PairSMTBQ::settings(int narg, char ** /* arg */) { if (narg > 0) error->all(FLERR,"Illegal pair_style command"); } @@ -2539,10 +2540,10 @@ void PairSMTBQ::Charge() // --------------------------- - double enegtotall[nteam+1],enegchkall[nteam+1],enegmaxall[nteam+1],qtota[nteam+1],qtotc[nteam+1]; - double qtotcll[nteam+1],qtotall[nteam+1]; - double sigmaa[nteam+1],sigmac[nteam+1],sigmaall[nteam+1],sigmacll[nteam+1]; - int end[nteam+1], nQEq[nteam+1],nQEqc[nteam+1],nQEqa[nteam+1]; + std::vector enegtotall(nteam+1),enegchkall(nteam+1),enegmaxall(nteam+1); + std::vector qtotcll(nteam+1),qtotall(nteam+1),qtota(nteam+1),qtotc(nteam+1); + std::vector sigmaa(nteam+1),sigmac(nteam+1),sigmaall(nteam+1),sigmacll(nteam+1); + std::vector end(nteam+1), nQEq(nteam+1),nQEqc(nteam+1),nQEqa(nteam+1); iloop = 0; @@ -2553,9 +2554,7 @@ void PairSMTBQ::Charge() dtq = 0.0006; // 0.0006 dtq2 = 0.5*dtq*dtq/qmass; - double enegchk[nteam+1]; - double enegtot[nteam+1]; - double enegmax[nteam+1]; + std::vector enegchk(nteam+1),enegtot(nteam+1),enegmax(nteam+1); @@ -2580,12 +2579,12 @@ void PairSMTBQ::Charge() if (itype == 0) { qtota[gp] += q[i]; nQEqa[gp] += 1; } } - MPI_Allreduce(nQEq,nQEqall,nteam+1,MPI_INT,MPI_SUM,world); - MPI_Allreduce(nQEqc,nQEqcall,nteam+1,MPI_INT,MPI_SUM,world); - MPI_Allreduce(nQEqa,nQEqaall,nteam+1,MPI_INT,MPI_SUM,world); + MPI_Allreduce(nQEq.data(),nQEqall,nteam+1,MPI_INT,MPI_SUM,world); + MPI_Allreduce(nQEqc.data(),nQEqcall,nteam+1,MPI_INT,MPI_SUM,world); + MPI_Allreduce(nQEqa.data(),nQEqaall,nteam+1,MPI_INT,MPI_SUM,world); - MPI_Allreduce(qtotc,qtotcll,nteam+1,MPI_DOUBLE,MPI_SUM,world); - MPI_Allreduce(qtota,qtotall,nteam+1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(qtotc.data(),qtotcll.data(),nteam+1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(qtota.data(),qtotall.data(),nteam+1,MPI_DOUBLE,MPI_SUM,world); MPI_Allreduce(&qtot,&qtotll,1,MPI_DOUBLE,MPI_SUM,world); @@ -2704,8 +2703,8 @@ void PairSMTBQ::Charge() } // Boucle local - MPI_Allreduce(enegchk,enegchkall,nteam+1,MPI_DOUBLE,MPI_SUM,world); - MPI_Allreduce(enegmax,enegmaxall,nteam+1,MPI_DOUBLE,MPI_MAX,world); + MPI_Allreduce(enegchk.data(),enegchkall.data(),nteam+1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(enegmax.data(),enegmaxall.data(),nteam+1,MPI_DOUBLE,MPI_MAX,world); for (gp = 0; gp < nteam+1; gp++) { @@ -2793,8 +2792,8 @@ void PairSMTBQ::Charge() if (itype == 1) sigmac[gp] += (q[i]-TransfAll[gp+cluster])*(q[i]-TransfAll[gp+cluster]); } - MPI_Allreduce(sigmaa,sigmaall,nteam+1,MPI_DOUBLE,MPI_SUM,world); - MPI_Allreduce(sigmac,sigmacll,nteam+1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(sigmaa.data(),sigmaall.data(),nteam+1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(sigmac.data(),sigmacll.data(),nteam+1,MPI_DOUBLE,MPI_SUM,world); for (gp = 1; gp < nteam+1; gp++) { sigmaall[gp] = sqrt(sigmaall[gp]/static_cast(nQEqaall[gp])) ; From d8845b681778adb5776165f19e99b730eb4ff66c Mon Sep 17 00:00:00 2001 From: mkanski Date: Fri, 1 Mar 2019 13:13:11 +0100 Subject: [PATCH 120/143] Added initialization of the entire num_bonds and num_hbonds arrays --- src/USER-REAXC/fix_reaxc.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/USER-REAXC/fix_reaxc.cpp b/src/USER-REAXC/fix_reaxc.cpp index c470173663..1323ff4da7 100644 --- a/src/USER-REAXC/fix_reaxc.cpp +++ b/src/USER-REAXC/fix_reaxc.cpp @@ -49,8 +49,7 @@ FixReaxC::FixReaxC(LAMMPS *lmp,int narg, char **arg) : // initialize arrays to MIN so atom migration is OK the 1st time - int nlocal = atom->nlocal; - for (int i = 0; i < nlocal; i++) + for (int i = 0; i < atom->nmax; i++) num_bonds[i] = num_hbonds[i] = MIN_REAX_BONDS; // set comm sizes needed by this fix From 0f0a65bb4803332b86f3eb53dec6e303c60b386c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 27 Feb 2019 17:49:34 -0500 Subject: [PATCH 121/143] plug small memory leak in USER-ADIOS --- src/USER-ADIOS/dump_custom_adios.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/USER-ADIOS/dump_custom_adios.cpp b/src/USER-ADIOS/dump_custom_adios.cpp index cd14195d45..67f3deeb64 100644 --- a/src/USER-ADIOS/dump_custom_adios.cpp +++ b/src/USER-ADIOS/dump_custom_adios.cpp @@ -154,6 +154,7 @@ DumpCustomADIOS::~DumpCustomADIOS() internal->fh.Close(); } delete internal->ad; + delete internal; } /* ---------------------------------------------------------------------- */ From 30ee2f3d78655b3145cf271202158b252630ab3a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 28 Feb 2019 19:27:55 -0500 Subject: [PATCH 122/143] avoid windows portability issues with int32_t --- src/USER-PTM/compute_ptm_atom.h | 2 +- src/USER-PTM/ptm_neighbour_ordering.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/USER-PTM/compute_ptm_atom.h b/src/USER-PTM/compute_ptm_atom.h index 5c10e0c443..586d7a44cd 100644 --- a/src/USER-PTM/compute_ptm_atom.h +++ b/src/USER-PTM/compute_ptm_atom.h @@ -35,7 +35,7 @@ class ComputePTMAtom : public Compute { private: int nmax; - int32_t input_flags; + smallint input_flags; double rmsd_threshold; class NeighList *list; double **output; diff --git a/src/USER-PTM/ptm_neighbour_ordering.h b/src/USER-PTM/ptm_neighbour_ordering.h index 4a4fb8ce8b..2a619880bb 100644 --- a/src/USER-PTM/ptm_neighbour_ordering.h +++ b/src/USER-PTM/ptm_neighbour_ordering.h @@ -11,6 +11,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI #define PTM_NEIGHBOUR_ORDERING_H #include +#include namespace ptm { From 5ecbb8bd0130881b97370e24f7a48ef2daf5b77d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 1 Mar 2019 09:46:13 -0500 Subject: [PATCH 123/143] fix int vs. bigint issue and add NULL file pointer check to dynamical_matrix --- src/USER-PHONON/dynamical_matrix.cpp | 5 +++-- src/USER-PHONON/dynamical_matrix.h | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/USER-PHONON/dynamical_matrix.cpp b/src/USER-PHONON/dynamical_matrix.cpp index cef59b3a63..372f4e4e31 100644 --- a/src/USER-PHONON/dynamical_matrix.cpp +++ b/src/USER-PHONON/dynamical_matrix.cpp @@ -316,9 +316,10 @@ void DynamicalMatrix::calculateMatrix() void DynamicalMatrix::writeMatrix(double **dynmat) { - if (me != 0) - return; + if (me != 0 || fp == NULL) return; + // print file comment lines + if (!binaryflag && fp) { clearerr(fp); for (int i = 0; i < 3; i++) { diff --git a/src/USER-PHONON/dynamical_matrix.h b/src/USER-PHONON/dynamical_matrix.h index 187968c8f7..56de814e97 100644 --- a/src/USER-PHONON/dynamical_matrix.h +++ b/src/USER-PHONON/dynamical_matrix.h @@ -54,10 +54,10 @@ namespace LAMMPS_NS { double conv_mass; double del; int igroup,groupbit; - int gcount; // number of atoms in group + bigint gcount; // number of atoms in group + bigint dynlen; // rank of dynamical matrix int scaleflag; int me; - bigint dynlen; int *groupmap; int compressed; // 1 if dump file is written compressed, 0 no @@ -71,4 +71,4 @@ namespace LAMMPS_NS { #endif //LMP_DYNAMICAL_MATRIX_H -#endif \ No newline at end of file +#endif From ab0c35be9357d36f3d0600206679753fb14a86ae Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 4 Mar 2019 08:04:11 -0700 Subject: [PATCH 124/143] Commit JT 030419 - correction of pair_spin calculations - corrects an error between i and ii lists in single/pair calc. --- src/SPIN/pair_spin_dmi.cpp | 104 ++++++++++++++++++----------- src/SPIN/pair_spin_exchange.cpp | 88 +++++++++++++++--------- src/SPIN/pair_spin_magelec.cpp | 56 ++++++++++------ src/SPIN/pair_spin_neel.cpp | 114 ++++++++++++++++++++------------ 4 files changed, 228 insertions(+), 134 deletions(-) diff --git a/src/SPIN/pair_spin_dmi.cpp b/src/SPIN/pair_spin_dmi.cpp index 18682fdb9f..8496e40f99 100644 --- a/src/SPIN/pair_spin_dmi.cpp +++ b/src/SPIN/pair_spin_dmi.cpp @@ -329,7 +329,9 @@ void PairSpinDmi::compute(int eflag, int vflag) } -/* ---------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + update the pair interactions fmi acting on the spin ii +------------------------------------------------------------------------- */ void PairSpinDmi::compute_single_pair(int ii, double fmi[3]) { @@ -341,52 +343,76 @@ void PairSpinDmi::compute_single_pair(int ii, double fmi[3]) double delx,dely,delz; double spj[3]; - int i,j,jnum,itype,jtype; - int *ilist,*jlist,*numneigh,**firstneigh; + int i,j,jnum,itype,jtype,ntypes; + int k,locflag; + int *jlist,*numneigh,**firstneigh; double rsq, inorm; - ilist = list->ilist; numneigh = list->numneigh; firstneigh = list->firstneigh; + + // check if interaction applies to type of ii - i = ilist[ii]; - itype = type[i]; - - xi[0] = x[i][0]; - xi[1] = x[i][1]; - xi[2] = x[i][2]; - - jlist = firstneigh[i]; - jnum = numneigh[i]; - - for (int jj = 0; jj < jnum; jj++) { - - j = jlist[jj]; - j &= NEIGHMASK; - jtype = type[j]; - - spj[0] = sp[j][0]; - spj[1] = sp[j][1]; - spj[2] = sp[j][2]; - - delx = xi[0] - x[j][0]; - dely = xi[1] - x[j][1]; - delz = xi[2] - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; - inorm = 1.0/sqrt(rsq); - eij[0] = -inorm*delx; - eij[1] = -inorm*dely; - eij[2] = -inorm*delz; - - local_cut2 = cut_spin_dmi[itype][jtype]*cut_spin_dmi[itype][jtype]; - - if (rsq <= local_cut2) { - compute_dmi(i,j,eij,fmi,spj); - } - + itype = type[ii]; + ntypes = atom->ntypes; + locflag = 0; + k = 1; + while (k <= ntypes) { + if (k <= itype) { + if (setflag[k][itype] == 1) { + locflag =1; + break; + } + k++; + } else if (k > itype) { + if (setflag[itype][k] == 1) { + locflag =1; + break; + } + k++; + } else error->all(FLERR,"Wrong type number"); } + // if interaction applies to type ii, + // locflag = 1 and compute pair interaction + + //i = ilist[ii]; + if (locflag == 1) { + + xi[0] = x[ii][0]; + xi[1] = x[ii][1]; + xi[2] = x[ii][2]; + + jlist = firstneigh[ii]; + jnum = numneigh[ii]; + + for (int jj = 0; jj < jnum; jj++) { + + j = jlist[jj]; + j &= NEIGHMASK; + jtype = type[j]; + + spj[0] = sp[j][0]; + spj[1] = sp[j][1]; + spj[2] = sp[j][2]; + + delx = xi[0] - x[j][0]; + dely = xi[1] - x[j][1]; + delz = xi[2] - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + inorm = 1.0/sqrt(rsq); + eij[0] = -inorm*delx; + eij[1] = -inorm*dely; + eij[2] = -inorm*delz; + + local_cut2 = cut_spin_dmi[itype][jtype]*cut_spin_dmi[itype][jtype]; + + if (rsq <= local_cut2) { + compute_dmi(ii,j,eij,fmi,spj); + } + } + } } /* ---------------------------------------------------------------------- diff --git a/src/SPIN/pair_spin_exchange.cpp b/src/SPIN/pair_spin_exchange.cpp index 67229c2423..b2955aafb2 100644 --- a/src/SPIN/pair_spin_exchange.cpp +++ b/src/SPIN/pair_spin_exchange.cpp @@ -318,7 +318,6 @@ void PairSpinExchange::compute(int eflag, int vflag) void PairSpinExchange::compute_single_pair(int ii, double fmi[3]) { - int *type = atom->type; double **x = atom->x; double **sp = atom->sp; @@ -327,46 +326,70 @@ void PairSpinExchange::compute_single_pair(int ii, double fmi[3]) double delx,dely,delz; double spj[3]; - int i,j,jnum,itype,jtype; - int *ilist,*jlist,*numneigh,**firstneigh; + int i,j,jnum,itype,jtype,ntypes; + int k,locflag; + int *jlist,*numneigh,**firstneigh; double rsq; - ilist = list->ilist; numneigh = list->numneigh; firstneigh = list->firstneigh; - i = ilist[ii]; - itype = type[i]; + // check if interaction applies to type of ii - xi[0] = x[i][0]; - xi[1] = x[i][1]; - xi[2] = x[i][2]; - - jlist = firstneigh[i]; - jnum = numneigh[i]; - - for (int jj = 0; jj < jnum; jj++) { - - j = jlist[jj]; - j &= NEIGHMASK; - jtype = type[j]; - local_cut2 = cut_spin_exchange[itype][jtype]*cut_spin_exchange[itype][jtype]; - - spj[0] = sp[j][0]; - spj[1] = sp[j][1]; - spj[2] = sp[j][2]; - - delx = xi[0] - x[j][0]; - dely = xi[1] - x[j][1]; - delz = xi[2] - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; - - if (rsq <= local_cut2) { - compute_exchange(i,j,rsq,fmi,spj); - } + itype = type[ii]; + ntypes = atom->ntypes; + locflag = 0; + k = 1; + while (k <= ntypes) { + if (k <= itype) { + if (setflag[k][itype] == 1) { + locflag =1; + break; + } + k++; + } else if (k > itype) { + if (setflag[itype][k] == 1) { + locflag =1; + break; + } + k++; + } else error->all(FLERR,"Wrong type number"); } + // if interaction applies to type ii, + // locflag = 1 and compute pair interaction + + if (locflag == 1) { + + xi[0] = x[ii][0]; + xi[1] = x[ii][1]; + xi[2] = x[ii][2]; + + jlist = firstneigh[ii]; + jnum = numneigh[ii]; + + for (int jj = 0; jj < jnum; jj++) { + + j = jlist[jj]; + j &= NEIGHMASK; + jtype = type[j]; + local_cut2 = cut_spin_exchange[itype][jtype]*cut_spin_exchange[itype][jtype]; + + spj[0] = sp[j][0]; + spj[1] = sp[j][1]; + spj[2] = sp[j][2]; + + delx = xi[0] - x[j][0]; + dely = xi[1] - x[j][1]; + delz = xi[2] - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + + if (rsq <= local_cut2) { + compute_exchange(ii,j,rsq,fmi,spj); + } + } + } } /* ---------------------------------------------------------------------- @@ -528,3 +551,4 @@ void PairSpinExchange::read_restart_settings(FILE *fp) MPI_Bcast(&mix_flag,1,MPI_INT,0,world); } + diff --git a/src/SPIN/pair_spin_magelec.cpp b/src/SPIN/pair_spin_magelec.cpp index f85d69e222..a7357f61e3 100644 --- a/src/SPIN/pair_spin_magelec.cpp +++ b/src/SPIN/pair_spin_magelec.cpp @@ -319,7 +319,9 @@ void PairSpinMagelec::compute(int eflag, int vflag) } -/* ---------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + update the pair interactions fmi acting on the spin ii +------------------------------------------------------------------------- */ void PairSpinMagelec::compute_single_pair(int ii, double fmi[3]) { @@ -331,30 +333,48 @@ void PairSpinMagelec::compute_single_pair(int ii, double fmi[3]) double delx,dely,delz; double spj[3]; - int i,j,inum,jnum,itype,jtype; - int *ilist,*jlist,*numneigh,**firstneigh; + int i,j,jnum,itype,jtype,ntypes; + int k,locflag; + int *jlist,*numneigh,**firstneigh; double rsq, inorm; - inum = list->inum; - ilist = list->ilist; numneigh = list->numneigh; firstneigh = list->firstneigh; + + // check if interaction applies to type of ii - // compute pair if + itype = type[ii]; + ntypes = atom->ntypes; + locflag = 0; + k = 1; + while (k <= ntypes) { + if (k <= itype) { + if (setflag[k][itype] == 1) { + locflag =1; + break; + } + k++; + } else if (k > itype) { + if (setflag[itype][k] == 1) { + locflag =1; + break; + } + k++; + } else error->all(FLERR,"Wrong type number"); + } - if (ii < inum) { + // if interaction applies to type ii, + // locflag = 1 and compute pair interaction - i = ilist[ii]; - itype = type[i]; + if (locflag == 1) { - xi[0] = xi[1] = xi[2] = 0.0; - xi[0] = x[i][0]; - xi[1] = x[i][1]; - xi[2] = x[i][2]; + xi[0] = x[ii][0]; + xi[1] = x[ii][1]; + xi[2] = x[ii][2]; - jlist = firstneigh[i]; - jnum = numneigh[i]; + jlist = firstneigh[ii]; + jnum = numneigh[ii]; for (int jj = 0; jj < jnum; jj++) { @@ -377,12 +397,10 @@ void PairSpinMagelec::compute_single_pair(int ii, double fmi[3]) eij[2] = -inorm*delz; if (rsq <= local_cut2) { - compute_magelec(i,j,eij,fmi,spj); + compute_magelec(ii,j,eij,fmi,spj); } } - - } - + } } /* ---------------------------------------------------------------------- */ diff --git a/src/SPIN/pair_spin_neel.cpp b/src/SPIN/pair_spin_neel.cpp index 55f537cf4f..bd12832a8d 100644 --- a/src/SPIN/pair_spin_neel.cpp +++ b/src/SPIN/pair_spin_neel.cpp @@ -330,7 +330,9 @@ void PairSpinNeel::compute(int eflag, int vflag) } -/* ---------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + update the pair interactions fmi acting on the spin ii +------------------------------------------------------------------------- */ void PairSpinNeel::compute_single_pair(int ii, double fmi[3]) { @@ -342,57 +344,81 @@ void PairSpinNeel::compute_single_pair(int ii, double fmi[3]) double xi[3], rij[3], eij[3]; double spi[3], spj[3]; - int i,j,jnum,itype,jtype; - int *ilist,*jlist,*numneigh,**firstneigh; + int i,j,jnum,itype,jtype,ntypes; + int k,locflag; + int *jlist,*numneigh,**firstneigh; double rsq, inorm; - ilist = list->ilist; numneigh = list->numneigh; firstneigh = list->firstneigh; + + // check if interaction applies to type of ii - i = ilist[ii]; - itype = type[i]; - - spi[0] = sp[i][0]; - spi[1] = sp[i][1]; - spi[2] = sp[i][2]; - - xi[0] = x[i][0]; - xi[1] = x[i][1]; - xi[2] = x[i][2]; - - eij[0] = eij[1] = eij[2] = 0.0; - - jlist = firstneigh[i]; - jnum = numneigh[i]; - - for (int jj = 0; jj < jnum; jj++) { - - j = jlist[jj]; - j &= NEIGHMASK; - jtype = type[j]; - - local_cut2 = cut_spin_neel[itype][jtype]*cut_spin_neel[itype][jtype]; - - spj[0] = sp[j][0]; - spj[1] = sp[j][1]; - spj[2] = sp[j][2]; - - rij[0] = x[j][0] - xi[0]; - rij[1] = x[j][1] - xi[1]; - rij[2] = x[j][2] - xi[2]; - rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; - inorm = 1.0/sqrt(rsq); - eij[0] = inorm*rij[0]; - eij[1] = inorm*rij[1]; - eij[2] = inorm*rij[2]; - - if (rsq <= local_cut2) { - compute_neel(i,j,rsq,eij,fmi,spi,spj); - } + itype = type[ii]; + ntypes = atom->ntypes; + locflag = 0; + k = 1; + while (k <= ntypes) { + if (k <= itype) { + if (setflag[k][itype] == 1) { + locflag =1; + break; + } + k++; + } else if (k > itype) { + if (setflag[itype][k] == 1) { + locflag =1; + break; + } + k++; + } else error->all(FLERR,"Wrong type number"); } + // if interaction applies to type ii, + // locflag = 1 and compute pair interaction + + if (locflag == 1) { + + spi[0] = sp[ii][0]; + spi[1] = sp[ii][1]; + spi[2] = sp[ii][2]; + + xi[0] = x[ii][0]; + xi[1] = x[ii][1]; + xi[2] = x[ii][2]; + + eij[0] = eij[1] = eij[2] = 0.0; + + jlist = firstneigh[ii]; + jnum = numneigh[ii]; + + for (int jj = 0; jj < jnum; jj++) { + + j = jlist[jj]; + j &= NEIGHMASK; + jtype = type[j]; + + local_cut2 = cut_spin_neel[itype][jtype]*cut_spin_neel[itype][jtype]; + + spj[0] = sp[j][0]; + spj[1] = sp[j][1]; + spj[2] = sp[j][2]; + + rij[0] = x[j][0] - xi[0]; + rij[1] = x[j][1] - xi[1]; + rij[2] = x[j][2] - xi[2]; + rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + inorm = 1.0/sqrt(rsq); + eij[0] = inorm*rij[0]; + eij[1] = inorm*rij[1]; + eij[2] = inorm*rij[2]; + + if (rsq <= local_cut2) { + compute_neel(ii,j,rsq,eij,fmi,spi,spj); + } + } + } } /* ---------------------------------------------------------------------- */ From 0d1524526a807b618617b1af5a0930f1bebd6a7b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 4 Mar 2019 17:26:55 -0500 Subject: [PATCH 125/143] work around the remaining variable length array cases. fix an off-by-one error, too. --- src/USER-SMTBQ/pair_smtbq.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/USER-SMTBQ/pair_smtbq.cpp b/src/USER-SMTBQ/pair_smtbq.cpp index 1931754427..f3b85e9a9b 100644 --- a/src/USER-SMTBQ/pair_smtbq.cpp +++ b/src/USER-SMTBQ/pair_smtbq.cpp @@ -2895,11 +2895,12 @@ void PairSMTBQ::groupSurface_QEq() void PairSMTBQ::groupQEqAllParallel_QEq() { int ii,i,jj,j,kk,k,itype,jtype,ktype,jnum,m,gp,zz,z,kgp; - int iproc,team_elt[10][nproc],team_QEq[10][nproc][5]; + int iproc; // ,team_elt[10][nproc],team_QEq[10][nproc][5]; + int **team_elt,***team_QEq; int *ilist,*jlist,*numneigh,**firstneigh,ngp,igp; double delr[3],xtmp,ytmp,ztmp,rsq; int **flag_gp, *nelt, **tab_gp; - int QEq,QEqall[nproc]; + int QEq,*QEqall; double **x = atom->x; int *type = atom->type; @@ -2927,6 +2928,9 @@ void PairSMTBQ::groupQEqAllParallel_QEq() memory->create(nelt,nall,"pair:nelt"); memory->create(tab_gp,10,nall,"pair:flag_gp"); + memory->create(team_elt,10,nproc,"pair:team_elt"); + memory->create(team_QEq,10,nproc,5,"pair:team_QEq"); + memory->create(QEqall,nproc,"pair:QEqall"); for (i = 0; i < nall ; i++) { flag_QEq[i] = 0; } for (i = 0; i < 10*nproc; i++) { @@ -3002,6 +3006,9 @@ void PairSMTBQ::groupQEqAllParallel_QEq() memory->destroy(tab_gp); memory->destroy(nelt); + memory->destroy(team_elt); + memory->destroy(team_QEq); + memory->destroy(QEqall); return; } // ::::::::::::::::::::::::::::::::::::::::::::::::::::::: @@ -3339,6 +3346,9 @@ void PairSMTBQ::groupQEqAllParallel_QEq() memory->destroy(tab_gp); memory->destroy(nelt); + memory->destroy(team_elt); + memory->destroy(team_QEq); + memory->destroy(QEqall); } /* ---------------------------------------------------------------------- */ @@ -3346,7 +3356,8 @@ void PairSMTBQ::groupQEqAllParallel_QEq() void PairSMTBQ::Init_charge(int * /*nQEq*/, int * /*nQEqa*/, int * /*nQEqc*/) { int ii,i,gp,itype; - int *ilist,test[nteam],init[nteam]; + int *ilist; + std::vector test(cluster),init(cluster); double bound,tot,totll; int inum = list->inum; @@ -3376,7 +3387,8 @@ void PairSMTBQ::Init_charge(int * /*nQEq*/, int * /*nQEqa*/, int * /*nQEqc*/) } } - MPI_Allreduce(test,init,nteam+1,MPI_INT,MPI_SUM,world); + // TODO + MPI_Allreduce(test.data(),init.data(),cluster,MPI_INT,MPI_SUM,world); // On fait que sur les atomes hybrides!!! // ---------------------------------------- From 6ed8fbbd515ddae8543b6342433f73728f8ef3b5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 4 Mar 2019 18:01:55 -0500 Subject: [PATCH 126/143] handle uninitialized data access issues and out-of-bounds access for single element calculations --- src/USER-SMTBQ/pair_smtbq.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/USER-SMTBQ/pair_smtbq.cpp b/src/USER-SMTBQ/pair_smtbq.cpp index f3b85e9a9b..91ba612986 100644 --- a/src/USER-SMTBQ/pair_smtbq.cpp +++ b/src/USER-SMTBQ/pair_smtbq.cpp @@ -405,7 +405,13 @@ void PairSMTBQ::read_file(char *file) verbose = 1; verbose = 0; - // open file on all processors + coordOxBB = 0.0; + coordOxBulk = 0.0; + coordOxSurf = 0.0; + ROxBB = 0.0; + ROxSurf = 0.0; + + // open file on all processors FILE *fp; fp = force->open_potential(file); if ( fp == NULL ) { @@ -455,14 +461,12 @@ void PairSMTBQ::read_file(char *file) // load up parameter settings and error check their values - if (nparams == maxparam) { - maxparam += DELTA; - params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), + nparams = maxparam = num_atom_types; + params = (Param *) memory->create(params,maxparam*sizeof(Param), "pair:params"); - maxintparam += m; - intparams = (Intparam *) memory->srealloc(intparams,(maxintparam+1)*sizeof(Intparam), + maxintparam = m; + intparams = (Intparam *) memory->create(intparams,(maxintparam+1)*sizeof(Intparam), "pair:intparams"); - } for (i=0; i < num_atom_types; i++) params[i].nom = (char*) malloc(sizeof(char)*3); @@ -839,7 +843,8 @@ void PairSMTBQ::read_file(char *file) } //A adapter au STO - ncov = min((params[0].sto)*(params[0].n0),(params[1].sto)*(params[1].n0)); + for (i=1,ncov=params[0].sto*params[0].n0; i < nparams; ++i) + ncov = min(ncov,(params[1].sto)*(params[1].n0)); if (verbose) printf (" Parametre ncov = %f\n",ncov); if (verbose) printf (" ********************************************* \n"); From fa7b5ecfa3c284c3724d3cf3dcd05126be134c47 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Mar 2019 00:45:40 -0500 Subject: [PATCH 127/143] disable chimet array in pair style smtbq, which was never set anywhere --- src/USER-SMTBQ/pair_smtbq.cpp | 10 ++-------- src/USER-SMTBQ/pair_smtbq.h | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/USER-SMTBQ/pair_smtbq.cpp b/src/USER-SMTBQ/pair_smtbq.cpp index 91ba612986..5c3189fc31 100644 --- a/src/USER-SMTBQ/pair_smtbq.cpp +++ b/src/USER-SMTBQ/pair_smtbq.cpp @@ -123,7 +123,6 @@ PairSMTBQ::PairSMTBQ(LAMMPS *lmp) : Pair(lmp) sbcov = NULL; coord = NULL; sbmet = NULL; - chimet = NULL; ecov = NULL; potmad = NULL; @@ -210,7 +209,6 @@ PairSMTBQ::~PairSMTBQ() memory->destroy(potmad); memory->destroy(potself); memory->destroy(potcov); - memory->destroy(chimet); memory->destroy(nvsm); memory->destroy(vsm);; @@ -875,7 +873,6 @@ void PairSMTBQ::compute(int eflag, int vflag) memory->destroy(sbcov); memory->destroy(coord); memory->destroy(sbmet); - memory->destroy(chimet); memory->destroy(flag_QEq); memory->destroy(qf); memory->destroy(q1); @@ -891,7 +888,6 @@ void PairSMTBQ::compute(int eflag, int vflag) memory->create(sbcov,nmax,"pair:sbcov"); memory->create(coord,nmax,"pair:coord"); memory->create(sbmet,nmax,"pair:sbmet"); - memory->create(chimet,nmax,"pair:chimet"); memory->create(flag_QEq,nmax,"pair:flag_QEq"); memory->create(qf,nmax,"pair:qf"); memory->create(q1,nmax,"pair:q1"); @@ -1328,10 +1324,7 @@ void PairSMTBQ::tabqeq() memory->create(sbcov,nmax,"pair:sbcov"); memory->create(coord,nmax,"pair:coord"); memory->create(sbmet,nmax,"pair:sbmet"); - memory->create(chimet,nmax,"pair:chimet"); - // memory->create(nvsm,nmax,"pair:nvsm"); - // memory->create(vsm,nmax,nmax,"pair:vsm"); memory->create(flag_QEq,nmax,"pair:flag_QEq"); memory->create(qf,nmax,"pair:qf"); @@ -2681,7 +2674,8 @@ void PairSMTBQ::Charge() gp = flag_QEq[i]; qf[i] = 0.0; - qf[i] = potself[i]+potmad[i]+potcov[i]+chimet[i] ; + // AK: chimet is not set anywhere + qf[i] = potself[i]+potmad[i]+potcov[i]; // +chimet[i]; Transf[gp] += qf[i]; } diff --git a/src/USER-SMTBQ/pair_smtbq.h b/src/USER-SMTBQ/pair_smtbq.h index ac8ed70ac0..05e4b67242 100644 --- a/src/USER-SMTBQ/pair_smtbq.h +++ b/src/USER-SMTBQ/pair_smtbq.h @@ -90,7 +90,7 @@ protected: double coordOxBulk,coordOxSurf,ROxSurf,coordOxBB,ROxBB; // Covalent interaction - double *ecov, *potmad, *potself, *potcov, *chimet; + double *ecov, *potmad, *potself, *potcov; //, *chimet; double **tabsmb,**dtabsmb, **tabsmr, **dtabsmr, *sbcov, *sbmet; double ncov; From 1e573bd557e6b79b0d94fc7bed1b048f76b2c2ac Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Mar 2019 08:35:53 -0500 Subject: [PATCH 128/143] when compiling LAMMPS in a git checkout, embed and print git branch and revision info into the executable --- cmake/CMakeLists.txt | 28 +++++++++++++++++++++++++++- src/Makefile | 21 +++++++++++++++++++-- src/Purge.list | 1 + src/info.cpp | 10 +++++++--- src/lammps.cpp | 5 +++++ src/lammps.h | 1 + 6 files changed, 60 insertions(+), 6 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index d9c87bdf5b..f54cf9d887 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -11,6 +11,8 @@ get_filename_component(LAMMPS_LIB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../lib get_filename_component(LAMMPS_LIB_BINARY_DIR ${CMAKE_BINARY_DIR}/lib ABSOLUTE) get_filename_component(LAMMPS_DOC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../doc ABSOLUTE) +find_package(Git) + # by default, install into $HOME/.local (not /usr/local), so that no root access (and sudo!!) is needed if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/.local" CACHE PATH "default install path" FORCE ) @@ -85,7 +87,7 @@ string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE) # this is fast, so check for it all the time message(STATUS "Running check for auto-generated files from make-based build system") file(GLOB SRC_AUTOGEN_FILES ${LAMMPS_SOURCE_DIR}/style_*.h) -list(APPEND SRC_AUTOGEN_FILES ${LAMMPS_SOURCE_DIR}/lmpinstalledpkgs.h) +list(APPEND SRC_AUTOGEN_FILES ${LAMMPS_SOURCE_DIR}/lmpinstalledpkgs.h ${LAMMPS_SOURCE_DIR}/lmpgitversion.h) foreach(_SRC ${SRC_AUTOGEN_FILES}) get_filename_component(FILENAME "${_SRC}" NAME) if(EXISTS ${LAMMPS_SOURCE_DIR}/${FILENAME}) @@ -1326,6 +1328,30 @@ message(STATUS "Generating lmpinstalledpkgs.h...") file(WRITE "${LAMMPS_STYLE_HEADERS_DIR}/lmpinstalledpkgs.h.tmp" "${temp}" ) execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${LAMMPS_STYLE_HEADERS_DIR}/lmpinstalledpkgs.h.tmp" "${LAMMPS_STYLE_HEADERS_DIR}/lmpinstalledpkgs.h") +###################################### +# Generate lmpgitversion.h +###################################### +set(temp "#ifndef LMP_GIT_VERSION_H\n#define LMP_GIT_VERSION_H\n") +set(temp "${temp}const char LAMMPS_NS::LAMMPS::git_version[] =") +if(GIT_FOUND) + execute_process(COMMAND ${GIT_EXECUTABLE} describe HEAD + OUTPUT_VARIABLE temp_git_version + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD + OUTPUT_VARIABLE temp_git_branch + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + set(temp_git "${temp_git_branch} / ${temp_git_version}") +else() + set(temp_git "") +endif() + +set(temp "${temp} \"${temp_git}\";\n#endif\n\n") +message(STATUS "Generating lmpgitversion.h...") +file(WRITE "${LAMMPS_STYLE_HEADERS_DIR}/lmpgitversion.h.tmp" "${temp}" ) +execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${LAMMPS_STYLE_HEADERS_DIR}/lmpgitversion.h.tmp" "${LAMMPS_STYLE_HEADERS_DIR}/lmpgitversion.h") + ########################################### # Actually add executable and lib to build ############################################ diff --git a/src/Makefile b/src/Makefile index f954d84e5d..058a415238 100644 --- a/src/Makefile +++ b/src/Makefile @@ -19,7 +19,7 @@ OBJDIR = Obj_$@ OBJSHDIR = Obj_shared_$@ SRC = $(wildcard *.cpp) -INC = $(filter-out lmpinstalledpkgs.h,$(wildcard *.h)) +INC = $(filter-out lmpinstalledpkgs.h lmpgitversion.h,$(wildcard *.h)) OBJ = $(SRC:.cpp=.o) SRCLIB = $(filter-out main.cpp,$(SRC)) @@ -167,6 +167,23 @@ lmpinstalledpkgs.h: $(SRC) $(INC) mv ${TMPNAME}.lmpinstalled lmpinstalledpkgs.h || rm ${TMPNAME}.lmpinstalled ; \ else mv ${TMPNAME}.lmpinstalled lmpinstalledpkgs.h ; fi +gitversion: + @echo 'Gathering git version information' + @echo '#ifndef LMP_GIT_VERSION_H' > ${TMPNAME}.lmpgitversion + @echo '#define LMP_GIT_VERSION_H' >> ${TMPNAME}.lmpgitversion + @echo 'const char LAMMPS_NS::LAMMPS::git_version[] = ' >> ${TMPNAME}.lmpgitversion + @if (type git && git describe HEAD ) >> /dev/null 2>> /dev/null ; then \ + export v1=$$(git rev-parse --abbrev-ref HEAD); export v2=$$(git describe HEAD); \ + echo "\"$${v1} / $${v2}\";" >> ${TMPNAME}.lmpgitversion ; \ + else \ + echo '"";' >> ${TMPNAME}.lmpgitversion ; \ + fi + @echo '#endif' >> ${TMPNAME}.lmpgitversion + @if [ -f lmpgitversion.h ]; \ + then test "`diff --brief ${TMPNAME}.lmpgitversion lmpgitversion.h`" != "" && \ + mv ${TMPNAME}.lmpgitversion lmpgitversion.h || rm ${TMPNAME}.lmpgitversion ; \ + else mv ${TMPNAME}.lmpgitversion lmpgitversion.h ; fi + # Build LAMMPS in one of 4 modes # exe = exe with static compile in Obj_machine (default) # shexe = exe with shared compile in Obj_shared_machine @@ -180,7 +197,7 @@ lmpinstalledpkgs.h: $(SRC) $(INC) -f MAKE/MACHINES/Makefile.$@ -o -f MAKE/MINE/Makefile.$@ @if [ ! -d $(objdir) ]; then mkdir $(objdir); fi @$(SHELL) Make.sh style - @$(MAKE) $(MFLAGS) lmpinstalledpkgs.h + @$(MAKE) $(MFLAGS) lmpinstalledpkgs.h gitversion @echo 'Compiling LAMMPS for machine $@' @if [ -f MAKE/MACHINES/Makefile.$@ ]; \ then cp MAKE/MACHINES/Makefile.$@ $(objdir)/Makefile; fi diff --git a/src/Purge.list b/src/Purge.list index 32b42f5ef1..59c35efca5 100644 --- a/src/Purge.list +++ b/src/Purge.list @@ -24,6 +24,7 @@ style_nstencil.h style_ntopo.h # other auto-generated files lmpinstalledpkgs.h +lmpgitversion.h # renamed on 7 January 2019 pair_lebedeva.cpp pair_lebedeva.h diff --git a/src/info.cpp b/src/info.cpp index 983a1e9e92..f17a00b8d2 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -260,9 +260,13 @@ void Info::command(int narg, char **arg) fprintf(out,"Printed on %s\n",ctime(&now)); if (flags & CONFIG) { - fprintf(out,"\nLAMMPS version: %s / %s\n\n", - universe->version, universe->num_ver); - + if (strlen(lmp->git_version) > 0) { + fprintf(out,"\nLAMMPS version: %s / %s\nGit revision: %s\n\n", + universe->version, universe->num_ver,lmp->git_version); + } else { + fprintf(out,"\nLAMMPS version: %s / %s\n\n", + universe->version, universe->num_ver); + } const char *infobuf = get_os_info(); fprintf(out,"OS information: %s\n\n",infobuf); delete[] infobuf; diff --git a/src/lammps.cpp b/src/lammps.cpp index 8a23a4297b..80ea1d8c9d 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -52,6 +52,7 @@ #include "error.h" #include "lmpinstalledpkgs.h" +#include "lmpgitversion.h" using namespace LAMMPS_NS; @@ -418,6 +419,10 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : if ((universe->me == 0) && !helpflag) { if (screen) fprintf(screen,"LAMMPS (%s)\n",universe->version); if (logfile) fprintf(logfile,"LAMMPS (%s)\n",universe->version); + if (strlen(git_version) > 0) { + if (screen) fprintf(screen,"Git revision (%s)\n",git_version); + if (logfile) fprintf(logfile,"Git revision (%s)\n",git_version); + } } // universe is one or more worlds, as setup by partition switch diff --git a/src/lammps.h b/src/lammps.h index 151b4fc49b..7ae7ab7ecb 100644 --- a/src/lammps.h +++ b/src/lammps.h @@ -64,6 +64,7 @@ class LAMMPS { class CiteMe *citeme; // citation info static const char * installed_packages[]; + static const char git_version[]; LAMMPS(int, char **, MPI_Comm); ~LAMMPS(); From 1c7d1919882e76a688ab2e37962a51c999bbbdbf Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Mar 2019 09:03:12 -0500 Subject: [PATCH 129/143] also print git version (if available) in multi-partition runs and in help message --- src/lammps.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/lammps.cpp b/src/lammps.cpp index 80ea1d8c9d..126a88b3e1 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -497,11 +497,15 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : if ((universe->me == 0) && (!helpflag)) { if (universe->uscreen) { fprintf(universe->uscreen,"LAMMPS (%s)\n",universe->version); + if (strlen(git_version) > 0) + fprintf(universe->uscreen,"Git revision (%s)\n",git_version); fprintf(universe->uscreen,"Running on %d partitions of processors\n", universe->nworlds); } if (universe->ulogfile) { fprintf(universe->ulogfile,"LAMMPS (%s)\n",universe->version); + if (strlen(git_version) > 0) + fprintf(universe->ulogfile,"Git revision (%s)\n",git_version); fprintf(universe->ulogfile,"Running on %d partitions of processors\n", universe->nworlds); } @@ -510,10 +514,14 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : if ((me == 0) && (!helpflag)) { if (screen) { fprintf(screen,"LAMMPS (%s)\n",universe->version); + if (strlen(git_version) > 0) + fprintf(screen,"Git revision (%s)\n",git_version); fprintf(screen,"Processor partition = %d\n",universe->iworld); } if (logfile) { fprintf(logfile,"LAMMPS (%s)\n",universe->version); + if (strlen(git_version) > 0) + fprintf(logfile,"Git revision (%s)\n",git_version); fprintf(logfile,"Processor partition = %d\n",universe->iworld); } } @@ -903,9 +911,16 @@ void LAMMPS::help() // general help message about command line and flags + if (strlen(git_version) > 0) { + fprintf(fp, + "\nLarge-scale Atomic/Molecular Massively Parallel Simulator - " + LAMMPS_VERSION "\nGit revision (%s)\n\n",git_version); + } else { + fprintf(fp, + "\nLarge-scale Atomic/Molecular Massively Parallel Simulator - " + LAMMPS_VERSION "\n\n"); + } fprintf(fp, - "\nLarge-scale Atomic/Molecular Massively Parallel Simulator - " - LAMMPS_VERSION "\n\n" "Usage example: %s -var t 300 -echo screen -in in.alloy\n\n" "List of command line options supported by this LAMMPS executable:\n\n" "-echo none/screen/log/both : echoing of input script (-e)\n" From bfa950a7e906b0f09233b72f177a978887fdeaa7 Mon Sep 17 00:00:00 2001 From: mkanski Date: Tue, 5 Mar 2019 22:40:10 +0100 Subject: [PATCH 130/143] Added initialization for grown arrays --- src/USER-REAXC/fix_reaxc.cpp | 12 ++++++++---- src/USER-REAXC/fix_reaxc.h | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/USER-REAXC/fix_reaxc.cpp b/src/USER-REAXC/fix_reaxc.cpp index 1323ff4da7..361733f3ca 100644 --- a/src/USER-REAXC/fix_reaxc.cpp +++ b/src/USER-REAXC/fix_reaxc.cpp @@ -41,16 +41,15 @@ FixReaxC::FixReaxC(LAMMPS *lmp,int narg, char **arg) : { // perform initial allocation of atom-based arrays // register with atom class - + + oldnmax = 0; num_bonds = NULL; num_hbonds = NULL; grow_arrays(atom->nmax); atom->add_callback(0); // initialize arrays to MIN so atom migration is OK the 1st time - - for (int i = 0; i < atom->nmax; i++) - num_bonds[i] = num_hbonds[i] = MIN_REAX_BONDS; + // it is done in grow_arrays() now // set comm sizes needed by this fix @@ -98,6 +97,11 @@ void FixReaxC::grow_arrays(int nmax) { memory->grow(num_bonds,nmax,"reaxc:num_bonds"); memory->grow(num_hbonds,nmax,"reaxc:num_hbonds"); + for (int i = oldnmax; i < nmax; i++) { + num_hbonds[i] = MIN_REAX_HBONDS; + num_bonds[i] = MIN_REAX_BONDS; + } + oldnmax = nmax; } /* ---------------------------------------------------------------------- diff --git a/src/USER-REAXC/fix_reaxc.h b/src/USER-REAXC/fix_reaxc.h index 0e173f5ece..6a37002847 100644 --- a/src/USER-REAXC/fix_reaxc.h +++ b/src/USER-REAXC/fix_reaxc.h @@ -56,6 +56,7 @@ class FixReaxC : public Fix { int maxhbonds; // max # of Hbonds for any atom int *num_bonds; // # of bonds for each atom int *num_hbonds; // # of Hbonds for each atom + int oldnmax; // arrays' size before growing }; } From c5a3b034ce54ad213fe1c30f4636dc922f5607cf Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 5 Mar 2019 17:29:34 -0500 Subject: [PATCH 131/143] implement various suggestions to improve the use of git information gathered --- cmake/CMakeLists.txt | 36 ++++++++++++++++++++++++++---------- src/Makefile | 18 +++++++++++++----- src/info.cpp | 7 ++++--- src/lammps.cpp | 22 ++++------------------ src/lammps.h | 6 +++++- 5 files changed, 52 insertions(+), 37 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index f54cf9d887..ec32049445 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1332,22 +1332,38 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${LAMMPS_STYLE_HE # Generate lmpgitversion.h ###################################### set(temp "#ifndef LMP_GIT_VERSION_H\n#define LMP_GIT_VERSION_H\n") -set(temp "${temp}const char LAMMPS_NS::LAMMPS::git_version[] =") +set(temp_git_commit "(unknown)") +set(temp_git_branch "(unknown)") +set(temp_git_describe "(unknown)") +set(temp_git_info "false") if(GIT_FOUND) execute_process(COMMAND ${GIT_EXECUTABLE} describe HEAD - OUTPUT_VARIABLE temp_git_version + RESULT_VARIABLE temp_in_git_checkout ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD - OUTPUT_VARIABLE temp_git_branch - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - set(temp_git "${temp_git_branch} / ${temp_git_version}") -else() - set(temp_git "") + if(temp_in_git_checkout EQUAL 0) + set(temp_git_info "true") + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD + OUTPUT_VARIABLE temp_git_commit + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD + OUTPUT_VARIABLE temp_git_branch + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${GIT_EXECUTABLE} describe --dirty=-modified + OUTPUT_VARIABLE temp_git_describe + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + endif() endif() -set(temp "${temp} \"${temp_git}\";\n#endif\n\n") +set(temp "${temp}const bool LAMMPS_NS::LAMMPS::has_git_info = ${temp_git_info};\n") +set(temp "${temp}const char LAMMPS_NS::LAMMPS::git_commit[] = \"${temp_git_commit}\";\n") +set(temp "${temp}const char LAMMPS_NS::LAMMPS::git_branch[] = \"${temp_git_branch}\";\n") +set(temp "${temp}const char LAMMPS_NS::LAMMPS::git_descriptor[] = \"${temp_git_describe}\";\n") +set(temp "${temp}#endif\n\n") + message(STATUS "Generating lmpgitversion.h...") file(WRITE "${LAMMPS_STYLE_HEADERS_DIR}/lmpgitversion.h.tmp" "${temp}" ) execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${LAMMPS_STYLE_HEADERS_DIR}/lmpgitversion.h.tmp" "${LAMMPS_STYLE_HEADERS_DIR}/lmpgitversion.h") diff --git a/src/Makefile b/src/Makefile index 058a415238..f720abe6ec 100644 --- a/src/Makefile +++ b/src/Makefile @@ -171,13 +171,21 @@ gitversion: @echo 'Gathering git version information' @echo '#ifndef LMP_GIT_VERSION_H' > ${TMPNAME}.lmpgitversion @echo '#define LMP_GIT_VERSION_H' >> ${TMPNAME}.lmpgitversion - @echo 'const char LAMMPS_NS::LAMMPS::git_version[] = ' >> ${TMPNAME}.lmpgitversion @if (type git && git describe HEAD ) >> /dev/null 2>> /dev/null ; then \ - export v1=$$(git rev-parse --abbrev-ref HEAD); export v2=$$(git describe HEAD); \ - echo "\"$${v1} / $${v2}\";" >> ${TMPNAME}.lmpgitversion ; \ + git='true'; \ + commit=$$(git rev-parse HEAD); \ + branch=$$(git rev-parse --abbrev-ref HEAD); \ + describe=$$(git describe --dirty=-modified); \ else \ - echo '"";' >> ${TMPNAME}.lmpgitversion ; \ - fi + git='false' ; \ + commit='(unknown)' ; \ + branch='(unknown)' ; \ + describe='(unknown)' ; \ + fi ; \ + echo "const bool LAMMPS_NS::LAMMPS::has_git_info = $${git};" >> ${TMPNAME}.lmpgitversion ; \ + echo "const char LAMMPS_NS::LAMMPS::git_commit[] = \"$${commit}\";" >> ${TMPNAME}.lmpgitversion ; \ + echo "const char LAMMPS_NS::LAMMPS::git_branch[] = \"$${branch}\";" >> ${TMPNAME}.lmpgitversion ; \ + echo "const char LAMMPS_NS::LAMMPS::git_descriptor[] = \"$${describe}\";" >> ${TMPNAME}.lmpgitversion @echo '#endif' >> ${TMPNAME}.lmpgitversion @if [ -f lmpgitversion.h ]; \ then test "`diff --brief ${TMPNAME}.lmpgitversion lmpgitversion.h`" != "" && \ diff --git a/src/info.cpp b/src/info.cpp index f17a00b8d2..3d8a8d7b9e 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -260,9 +260,10 @@ void Info::command(int narg, char **arg) fprintf(out,"Printed on %s\n",ctime(&now)); if (flags & CONFIG) { - if (strlen(lmp->git_version) > 0) { - fprintf(out,"\nLAMMPS version: %s / %s\nGit revision: %s\n\n", - universe->version, universe->num_ver,lmp->git_version); + if (lmp->has_git_info) { + fprintf(out,"\nLAMMPS version: %s / %s\nGit info: %s / %s / %s\n\n", + universe->version, universe->num_ver,lmp->git_branch, + lmp->git_descriptor,lmp->git_commit); } else { fprintf(out,"\nLAMMPS version: %s / %s\n\n", universe->version, universe->num_ver); diff --git a/src/lammps.cpp b/src/lammps.cpp index 126a88b3e1..2b3f001b09 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -419,10 +419,6 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : if ((universe->me == 0) && !helpflag) { if (screen) fprintf(screen,"LAMMPS (%s)\n",universe->version); if (logfile) fprintf(logfile,"LAMMPS (%s)\n",universe->version); - if (strlen(git_version) > 0) { - if (screen) fprintf(screen,"Git revision (%s)\n",git_version); - if (logfile) fprintf(logfile,"Git revision (%s)\n",git_version); - } } // universe is one or more worlds, as setup by partition switch @@ -497,15 +493,11 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : if ((universe->me == 0) && (!helpflag)) { if (universe->uscreen) { fprintf(universe->uscreen,"LAMMPS (%s)\n",universe->version); - if (strlen(git_version) > 0) - fprintf(universe->uscreen,"Git revision (%s)\n",git_version); fprintf(universe->uscreen,"Running on %d partitions of processors\n", universe->nworlds); } if (universe->ulogfile) { fprintf(universe->ulogfile,"LAMMPS (%s)\n",universe->version); - if (strlen(git_version) > 0) - fprintf(universe->ulogfile,"Git revision (%s)\n",git_version); fprintf(universe->ulogfile,"Running on %d partitions of processors\n", universe->nworlds); } @@ -514,14 +506,10 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : if ((me == 0) && (!helpflag)) { if (screen) { fprintf(screen,"LAMMPS (%s)\n",universe->version); - if (strlen(git_version) > 0) - fprintf(screen,"Git revision (%s)\n",git_version); fprintf(screen,"Processor partition = %d\n",universe->iworld); } if (logfile) { fprintf(logfile,"LAMMPS (%s)\n",universe->version); - if (strlen(git_version) > 0) - fprintf(logfile,"Git revision (%s)\n",git_version); fprintf(logfile,"Processor partition = %d\n",universe->iworld); } } @@ -911,13 +899,11 @@ void LAMMPS::help() // general help message about command line and flags - if (strlen(git_version) > 0) { - fprintf(fp, - "\nLarge-scale Atomic/Molecular Massively Parallel Simulator - " - LAMMPS_VERSION "\nGit revision (%s)\n\n",git_version); + if (has_git_info) { + fprintf(fp,"\nLarge-scale Atomic/Molecular Massively Parallel Simulator - " + LAMMPS_VERSION "\nGit info (%s / %s)\n\n",git_branch, git_descriptor); } else { - fprintf(fp, - "\nLarge-scale Atomic/Molecular Massively Parallel Simulator - " + fprintf(fp,"\nLarge-scale Atomic/Molecular Massively Parallel Simulator - " LAMMPS_VERSION "\n\n"); } fprintf(fp, diff --git a/src/lammps.h b/src/lammps.h index 7ae7ab7ecb..2e052e5ed2 100644 --- a/src/lammps.h +++ b/src/lammps.h @@ -64,7 +64,11 @@ class LAMMPS { class CiteMe *citeme; // citation info static const char * installed_packages[]; - static const char git_version[]; + + static const bool has_git_info; + static const char git_commit[]; + static const char git_branch[]; + static const char git_descriptor[]; LAMMPS(int, char **, MPI_Comm); ~LAMMPS(); From b628e3b1b612a9ffbfd18d2a45439f339634631c Mon Sep 17 00:00:00 2001 From: "Ryan S. Elliott" Date: Wed, 6 Mar 2019 10:26:03 -0600 Subject: [PATCH 132/143] Update openkim.org urls in various places --- doc/src/Build_extras.txt | 8 ++------ doc/src/pair_kim.txt | 8 ++------ lib/kim/Install.py | 4 ++-- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 8691f64a09..cbbd9db2f3 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -181,14 +181,10 @@ library with all its models, may take around 30 min to build. Of course you only need to do that once. See the list of KIM model drivers here: -https://openkim.org/kim-items/model-drivers/alphabetical +https://openkim.org/browse/model-drivers/alphabetical See the list of all KIM models here: -https://openkim.org/kim-items/models/by-model-drivers - -See the list of example KIM models included by default here: -https://openkim.org/kim-api on the "What is in the KIM API source -package?" page. +https://openkim.org/browse/models/by-model-drivers [CMake build]: diff --git a/doc/src/pair_kim.txt b/doc/src/pair_kim.txt index 67ab0b6c07..c5d42403e3 100644 --- a/doc/src/pair_kim.txt +++ b/doc/src/pair_kim.txt @@ -31,14 +31,10 @@ element or alloy and set of parameters, e.g. EAM for Cu with a specific EAM potential file. See the current list of "KIM model -drivers"_https://openkim.org/kim-items/model-drivers/alphabetical. +drivers"_https://openkim.org/browse/model-drivers/alphabetical. See the current list of all "KIM -models"_https://openkim.org/kim-items/models/by-model-drivers - -See the list of "example KIM models"_https://openkim.org/kim-api which -are included in the KIM library by default, in the "What is in the KIM -API source package?" section. +models"_https://openkim.org/browse/models/by-model-drivers To use this pair style, you must first download and install the KIM API library from the "OpenKIM website"_https://openkim.org. The KIM diff --git a/lib/kim/Install.py b/lib/kim/Install.py index 7a3d9c148d..dfb6bc53dc 100644 --- a/lib/kim/Install.py +++ b/lib/kim/Install.py @@ -40,10 +40,10 @@ make lib-kim args="-b -a everything" # install KIM API lib with all models make lib-kim args="-n -a EAM_Dynamo_Ackland_2003_W__MO_141627196590_005" # only add one model or model driver See the list of KIM model drivers here: -https://openkim.org/kim-items/model-drivers/alphabetical +https://openkim.org/browse/model-drivers/alphabetical See the list of all KIM models here: -https://openkim.org/kim-items/models/by-model-drivers +https://openkim.org/browse/models/by-model-drivers """ pgroup = parser.add_mutually_exclusive_group() From 436e02aa6e0b7cee95d35a6cf2d56e051c7b58ee Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Mar 2019 16:59:17 -0500 Subject: [PATCH 133/143] small corrections/clarifications to the pull request template --- .github/PULL_REQUEST_TEMPLATE.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 83892035c0..9e43aa0244 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -4,7 +4,7 @@ _Briefly describe the new feature(s), enhancement(s), or bugfix(es) included in **Related Issues** -__If this addresses an open GitHub Issue, mention the issue number here. Use the phrases `fixes #221` or `closes #135`, when you want those issues to be automatically closed when the pull request is merged_ +_If this addresses an open GitHub issue for this project, please mention the issue number here, and describe the relation. Use the phrases `fixes #221` or `closes #135`, when you want an issue to be automatically closed when the pull request is merged_ **Author(s)** @@ -16,7 +16,7 @@ By submitting this pull request, I agree, that my contribution will be included **Backward Compatibility** -_Please state whether any changes in the pull request break backward compatibility for inputs, and - if yes - explain what has been changed and why_ +_Please state whether any changes in the pull request will break backward compatibility for inputs, and - if yes - explain what has been changed and why_ **Implementation Notes** @@ -24,7 +24,7 @@ _Provide any relevant details about how the changes are implemented, how correct **Post Submission Checklist** -_Please check the fields below as they are completed **after** the pull request has been submitted_ +_Please check the fields below as they are completed **after** the pull request has been submitted. Delete lines that don't apply_ - [ ] The feature or features in this pull request is complete - [ ] Licensing information is complete From fe56cf04bca5db169502d59801876eb5401c6a66 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Mar 2019 17:04:14 -0500 Subject: [PATCH 134/143] simplify the detection of whether the source folder is checked out from a local git repo --- cmake/CMakeLists.txt | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index ec32049445..1b0272c5e7 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1336,26 +1336,20 @@ set(temp_git_commit "(unknown)") set(temp_git_branch "(unknown)") set(temp_git_describe "(unknown)") set(temp_git_info "false") -if(GIT_FOUND) - execute_process(COMMAND ${GIT_EXECUTABLE} describe HEAD - RESULT_VARIABLE temp_in_git_checkout +if(GIT_FOUND AND EXISTS ${CMAKE_SOURCE_DIR}/.git) + set(temp_git_info "true") + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD + OUTPUT_VARIABLE temp_git_commit + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD + OUTPUT_VARIABLE temp_git_branch + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${GIT_EXECUTABLE} describe --dirty=-modified + OUTPUT_VARIABLE temp_git_describe ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - if(temp_in_git_checkout EQUAL 0) - set(temp_git_info "true") - execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD - OUTPUT_VARIABLE temp_git_commit - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD - OUTPUT_VARIABLE temp_git_branch - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND ${GIT_EXECUTABLE} describe --dirty=-modified - OUTPUT_VARIABLE temp_git_describe - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE) - endif() endif() set(temp "${temp}const bool LAMMPS_NS::LAMMPS::has_git_info = ${temp_git_info};\n") From 2918dae87e23745aa7f20f81e2a5b32abe8176f1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Mar 2019 17:12:41 -0500 Subject: [PATCH 135/143] correct variable name and path to find the local .git folder --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 1b0272c5e7..12a34fabc1 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1336,7 +1336,7 @@ set(temp_git_commit "(unknown)") set(temp_git_branch "(unknown)") set(temp_git_describe "(unknown)") set(temp_git_info "false") -if(GIT_FOUND AND EXISTS ${CMAKE_SOURCE_DIR}/.git) +if(GIT_FOUND AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git) set(temp_git_info "true") execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD OUTPUT_VARIABLE temp_git_commit From 4e632d1b79e59d1b7bdd644a63289487412e7f55 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Mar 2019 17:32:08 -0500 Subject: [PATCH 136/143] implement another suggestion from @junghans --- cmake/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 12a34fabc1..f6f822676e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1338,15 +1338,15 @@ set(temp_git_describe "(unknown)") set(temp_git_info "false") if(GIT_FOUND AND EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../.git) set(temp_git_info "true") - execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD + execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR}/../.git rev-parse HEAD OUTPUT_VARIABLE temp_git_commit ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD + execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR}/../.git rev-parse --abbrev-ref HEAD OUTPUT_VARIABLE temp_git_branch ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND ${GIT_EXECUTABLE} describe --dirty=-modified + execute_process(COMMAND ${GIT_EXECUTABLE} -C ${CMAKE_CURRENT_SOURCE_DIR}/../.git describe --dirty=-modified OUTPUT_VARIABLE temp_git_describe ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) From 9408dd6e925c38819b6b207775a5b21ca720f0c6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 6 Mar 2019 18:41:43 -0500 Subject: [PATCH 137/143] use simpler way whether we are inside a git checkout in conventional build --- src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index f720abe6ec..f1030ae08f 100644 --- a/src/Makefile +++ b/src/Makefile @@ -171,7 +171,7 @@ gitversion: @echo 'Gathering git version information' @echo '#ifndef LMP_GIT_VERSION_H' > ${TMPNAME}.lmpgitversion @echo '#define LMP_GIT_VERSION_H' >> ${TMPNAME}.lmpgitversion - @if (type git && git describe HEAD ) >> /dev/null 2>> /dev/null ; then \ + @if (type git && test -e ../.git ) >> /dev/null 2>> /dev/null ; then \ git='true'; \ commit=$$(git rev-parse HEAD); \ branch=$$(git rev-parse --abbrev-ref HEAD); \ From f0e48931e40d833ab964b7abcfb5a08df5f4a3d7 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 7 Mar 2019 10:17:32 -0700 Subject: [PATCH 138/143] Remove deprecated KOKKO_HAVE macros --- src/KOKKOS/angle_charmm_kokkos.cpp | 2 +- src/KOKKOS/angle_class2_kokkos.cpp | 2 +- src/KOKKOS/angle_cosine_kokkos.cpp | 2 +- src/KOKKOS/angle_harmonic_kokkos.cpp | 2 +- src/KOKKOS/atom_vec_kokkos.h | 2 +- src/KOKKOS/bond_class2_kokkos.cpp | 2 +- src/KOKKOS/bond_fene_kokkos.cpp | 2 +- src/KOKKOS/bond_harmonic_kokkos.cpp | 2 +- src/KOKKOS/compute_temp_kokkos.cpp | 2 +- src/KOKKOS/dihedral_charmm_kokkos.cpp | 2 +- src/KOKKOS/dihedral_class2_kokkos.cpp | 2 +- src/KOKKOS/dihedral_opls_kokkos.cpp | 2 +- src/KOKKOS/fix_dpd_energy_kokkos.cpp | 2 +- src/KOKKOS/fix_enforce2d_kokkos.cpp | 2 +- src/KOKKOS/fix_eos_table_rx_kokkos.cpp | 2 +- src/KOKKOS/fix_freeze_kokkos.cpp | 2 +- src/KOKKOS/fix_gravity_kokkos.cpp | 2 +- src/KOKKOS/fix_langevin_kokkos.cpp | 2 +- src/KOKKOS/fix_momentum_kokkos.cpp | 2 +- src/KOKKOS/fix_neigh_history_kokkos.cpp | 2 +- src/KOKKOS/fix_nh_kokkos.cpp | 2 +- src/KOKKOS/fix_nph_kokkos.cpp | 2 +- src/KOKKOS/fix_npt_kokkos.cpp | 2 +- src/KOKKOS/fix_nve_kokkos.cpp | 2 +- src/KOKKOS/fix_nve_sphere_kokkos.cpp | 2 +- src/KOKKOS/fix_nvt_kokkos.cpp | 2 +- src/KOKKOS/fix_qeq_reax_kokkos.cpp | 2 +- src/KOKKOS/fix_rx_kokkos.cpp | 2 +- src/KOKKOS/fix_setforce_kokkos.cpp | 2 +- src/KOKKOS/fix_shardlow_kokkos.cpp | 2 +- src/KOKKOS/fix_wall_lj93_kokkos.cpp | 2 +- src/KOKKOS/fix_wall_reflect_kokkos.cpp | 2 +- src/KOKKOS/gridcomm_kokkos.cpp | 2 +- src/KOKKOS/improper_class2_kokkos.cpp | 2 +- src/KOKKOS/improper_harmonic_kokkos.cpp | 2 +- src/KOKKOS/kokkos.cpp | 10 +++++----- src/KOKKOS/kokkos_type.h | 10 +++++----- src/KOKKOS/nbin_kokkos.cpp | 2 +- src/KOKKOS/nbin_ssa_kokkos.cpp | 2 +- src/KOKKOS/neigh_bond_kokkos.cpp | 2 +- src/KOKKOS/neigh_list_kokkos.cpp | 2 +- src/KOKKOS/npair_copy_kokkos.cpp | 2 +- src/KOKKOS/npair_halffull_kokkos.cpp | 2 +- src/KOKKOS/npair_kokkos.cpp | 16 ++++++++-------- src/KOKKOS/npair_kokkos.h | 6 +++--- src/KOKKOS/npair_skip_kokkos.cpp | 2 +- src/KOKKOS/npair_ssa_kokkos.cpp | 2 +- src/KOKKOS/pair_buck_coul_cut_kokkos.cpp | 2 +- src/KOKKOS/pair_buck_coul_long_kokkos.cpp | 2 +- src/KOKKOS/pair_buck_kokkos.cpp | 2 +- src/KOKKOS/pair_coul_cut_kokkos.cpp | 2 +- src/KOKKOS/pair_coul_debye_kokkos.cpp | 2 +- src/KOKKOS/pair_coul_dsf_kokkos.cpp | 2 +- src/KOKKOS/pair_coul_long_kokkos.cpp | 2 +- src/KOKKOS/pair_coul_wolf_kokkos.cpp | 2 +- src/KOKKOS/pair_dpd_fdt_energy_kokkos.cpp | 2 +- src/KOKKOS/pair_eam_alloy_kokkos.cpp | 2 +- src/KOKKOS/pair_eam_fs_kokkos.cpp | 2 +- src/KOKKOS/pair_eam_kokkos.cpp | 2 +- src/KOKKOS/pair_exp6_rx_kokkos.cpp | 16 ++++++++-------- src/KOKKOS/pair_gran_hooke_history_kokkos.cpp | 2 +- ...air_lj_charmm_coul_charmm_implicit_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_class2_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_cut_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_expand_kokkos.cpp | 2 +- .../pair_lj_gromacs_coul_gromacs_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_gromacs_kokkos.cpp | 2 +- src/KOKKOS/pair_lj_sdk_kokkos.cpp | 2 +- src/KOKKOS/pair_morse_kokkos.cpp | 2 +- src/KOKKOS/pair_multi_lucy_rx_kokkos.cpp | 2 +- src/KOKKOS/pair_reaxc_kokkos.cpp | 2 +- src/KOKKOS/pair_snap_kokkos.cpp | 2 +- src/KOKKOS/pair_sw_kokkos.cpp | 2 +- src/KOKKOS/pair_table_kokkos.cpp | 2 +- src/KOKKOS/pair_table_rx_kokkos.cpp | 2 +- src/KOKKOS/pair_tersoff_kokkos.cpp | 2 +- src/KOKKOS/pair_tersoff_mod_kokkos.cpp | 2 +- src/KOKKOS/pair_tersoff_zbl_kokkos.cpp | 2 +- src/KOKKOS/pair_vashishta_kokkos.cpp | 2 +- src/KOKKOS/pair_yukawa_kokkos.cpp | 2 +- src/KOKKOS/pair_zbl_kokkos.cpp | 2 +- src/KOKKOS/pppm_kokkos.cpp | 4 ++-- src/KOKKOS/rand_pool_wrap_kokkos.h | 2 +- src/KOKKOS/region_block_kokkos.cpp | 2 +- 92 files changed, 117 insertions(+), 117 deletions(-) diff --git a/src/KOKKOS/angle_charmm_kokkos.cpp b/src/KOKKOS/angle_charmm_kokkos.cpp index 7a83e0d654..ec2955b28d 100644 --- a/src/KOKKOS/angle_charmm_kokkos.cpp +++ b/src/KOKKOS/angle_charmm_kokkos.cpp @@ -447,7 +447,7 @@ void AngleCharmmKokkos::ev_tally(EV_FLOAT &ev, const int i, const in namespace LAMMPS_NS { template class AngleCharmmKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class AngleCharmmKokkos; #endif } diff --git a/src/KOKKOS/angle_class2_kokkos.cpp b/src/KOKKOS/angle_class2_kokkos.cpp index 289753a3ee..fe5b1895fe 100644 --- a/src/KOKKOS/angle_class2_kokkos.cpp +++ b/src/KOKKOS/angle_class2_kokkos.cpp @@ -598,7 +598,7 @@ void AngleClass2Kokkos::ev_tally(EV_FLOAT &ev, const int i, const in namespace LAMMPS_NS { template class AngleClass2Kokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class AngleClass2Kokkos; #endif } diff --git a/src/KOKKOS/angle_cosine_kokkos.cpp b/src/KOKKOS/angle_cosine_kokkos.cpp index d22ad20f55..08faa254f4 100644 --- a/src/KOKKOS/angle_cosine_kokkos.cpp +++ b/src/KOKKOS/angle_cosine_kokkos.cpp @@ -387,7 +387,7 @@ void AngleCosineKokkos::ev_tally(EV_FLOAT &ev, const int i, const in namespace LAMMPS_NS { template class AngleCosineKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class AngleCosineKokkos; #endif } diff --git a/src/KOKKOS/angle_harmonic_kokkos.cpp b/src/KOKKOS/angle_harmonic_kokkos.cpp index 250397c8e3..8cdab2063a 100644 --- a/src/KOKKOS/angle_harmonic_kokkos.cpp +++ b/src/KOKKOS/angle_harmonic_kokkos.cpp @@ -405,7 +405,7 @@ void AngleHarmonicKokkos::ev_tally(EV_FLOAT &ev, const int i, const namespace LAMMPS_NS { template class AngleHarmonicKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class AngleHarmonicKokkos; #endif } diff --git a/src/KOKKOS/atom_vec_kokkos.h b/src/KOKKOS/atom_vec_kokkos.h index efe55c47ad..51ae226cc3 100644 --- a/src/KOKKOS/atom_vec_kokkos.h +++ b/src/KOKKOS/atom_vec_kokkos.h @@ -125,7 +125,7 @@ class AtomVecKokkos : public AtomVec { size_t buffer_size; void* buffer; - #ifdef KOKKOS_HAVE_CUDA + #ifdef KOKKOS_ENABLE_CUDA template Kokkos::View::ev_tally(EV_FLOAT &ev, const int &i, const in namespace LAMMPS_NS { template class BondClass2Kokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class BondClass2Kokkos; #endif } diff --git a/src/KOKKOS/bond_fene_kokkos.cpp b/src/KOKKOS/bond_fene_kokkos.cpp index 4342223f7e..d37943ba82 100644 --- a/src/KOKKOS/bond_fene_kokkos.cpp +++ b/src/KOKKOS/bond_fene_kokkos.cpp @@ -401,7 +401,7 @@ void BondFENEKokkos::ev_tally(EV_FLOAT &ev, const int &i, const int namespace LAMMPS_NS { template class BondFENEKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class BondFENEKokkos; #endif } diff --git a/src/KOKKOS/bond_harmonic_kokkos.cpp b/src/KOKKOS/bond_harmonic_kokkos.cpp index 35b957ffd3..6cdd4fe856 100644 --- a/src/KOKKOS/bond_harmonic_kokkos.cpp +++ b/src/KOKKOS/bond_harmonic_kokkos.cpp @@ -340,7 +340,7 @@ void BondHarmonicKokkos::ev_tally(EV_FLOAT &ev, const int &i, const namespace LAMMPS_NS { template class BondHarmonicKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class BondHarmonicKokkos; #endif } diff --git a/src/KOKKOS/compute_temp_kokkos.cpp b/src/KOKKOS/compute_temp_kokkos.cpp index d94c6e76b5..7b76f54f57 100644 --- a/src/KOKKOS/compute_temp_kokkos.cpp +++ b/src/KOKKOS/compute_temp_kokkos.cpp @@ -153,7 +153,7 @@ void ComputeTempKokkos::operator()(TagComputeTempVector, cons namespace LAMMPS_NS { template class ComputeTempKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class ComputeTempKokkos; #endif } diff --git a/src/KOKKOS/dihedral_charmm_kokkos.cpp b/src/KOKKOS/dihedral_charmm_kokkos.cpp index 9e25dda894..3931309dc1 100644 --- a/src/KOKKOS/dihedral_charmm_kokkos.cpp +++ b/src/KOKKOS/dihedral_charmm_kokkos.cpp @@ -786,7 +786,7 @@ void DihedralCharmmKokkos::ev_tally(EVM_FLOAT &evm, const int i, con namespace LAMMPS_NS { template class DihedralCharmmKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class DihedralCharmmKokkos; #endif } diff --git a/src/KOKKOS/dihedral_class2_kokkos.cpp b/src/KOKKOS/dihedral_class2_kokkos.cpp index de1d9c5458..c7db07a6cb 100644 --- a/src/KOKKOS/dihedral_class2_kokkos.cpp +++ b/src/KOKKOS/dihedral_class2_kokkos.cpp @@ -1127,7 +1127,7 @@ void DihedralClass2Kokkos::ev_tally(EV_FLOAT &ev, const int i1, cons namespace LAMMPS_NS { template class DihedralClass2Kokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class DihedralClass2Kokkos; #endif } diff --git a/src/KOKKOS/dihedral_opls_kokkos.cpp b/src/KOKKOS/dihedral_opls_kokkos.cpp index 3f34c2f5f3..9d01cf1a54 100644 --- a/src/KOKKOS/dihedral_opls_kokkos.cpp +++ b/src/KOKKOS/dihedral_opls_kokkos.cpp @@ -536,7 +536,7 @@ void DihedralOPLSKokkos::ev_tally(EV_FLOAT &ev, const int i1, const namespace LAMMPS_NS { template class DihedralOPLSKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class DihedralOPLSKokkos; #endif } diff --git a/src/KOKKOS/fix_dpd_energy_kokkos.cpp b/src/KOKKOS/fix_dpd_energy_kokkos.cpp index b12c6a476e..d092cb4802 100644 --- a/src/KOKKOS/fix_dpd_energy_kokkos.cpp +++ b/src/KOKKOS/fix_dpd_energy_kokkos.cpp @@ -90,7 +90,7 @@ void FixDPDenergyKokkos::final_integrate() namespace LAMMPS_NS { template class FixDPDenergyKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixDPDenergyKokkos; #endif } diff --git a/src/KOKKOS/fix_enforce2d_kokkos.cpp b/src/KOKKOS/fix_enforce2d_kokkos.cpp index f4f239123b..346e440f55 100644 --- a/src/KOKKOS/fix_enforce2d_kokkos.cpp +++ b/src/KOKKOS/fix_enforce2d_kokkos.cpp @@ -162,7 +162,7 @@ void FixEnforce2DKokkos::post_force_item( int i ) const namespace LAMMPS_NS { template class FixEnforce2DKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixEnforce2DKokkos; #endif } diff --git a/src/KOKKOS/fix_eos_table_rx_kokkos.cpp b/src/KOKKOS/fix_eos_table_rx_kokkos.cpp index 39f612ec46..2f730d1193 100644 --- a/src/KOKKOS/fix_eos_table_rx_kokkos.cpp +++ b/src/KOKKOS/fix_eos_table_rx_kokkos.cpp @@ -563,7 +563,7 @@ void FixEOStableRXKokkos::create_kokkos_tables() namespace LAMMPS_NS { template class FixEOStableRXKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixEOStableRXKokkos; #endif } diff --git a/src/KOKKOS/fix_freeze_kokkos.cpp b/src/KOKKOS/fix_freeze_kokkos.cpp index ccf7c7ff85..fb0c3841e6 100644 --- a/src/KOKKOS/fix_freeze_kokkos.cpp +++ b/src/KOKKOS/fix_freeze_kokkos.cpp @@ -118,7 +118,7 @@ void FixFreezeKokkos::operator()(const int i, OriginalForce &origina namespace LAMMPS_NS { template class FixFreezeKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixFreezeKokkos; #endif } diff --git a/src/KOKKOS/fix_gravity_kokkos.cpp b/src/KOKKOS/fix_gravity_kokkos.cpp index 2aff7af56c..5d3b4f62fb 100644 --- a/src/KOKKOS/fix_gravity_kokkos.cpp +++ b/src/KOKKOS/fix_gravity_kokkos.cpp @@ -115,7 +115,7 @@ void FixGravityKokkos::operator()(TagFixGravityMass, const int i, do namespace LAMMPS_NS { template class FixGravityKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixGravityKokkos; #endif } diff --git a/src/KOKKOS/fix_langevin_kokkos.cpp b/src/KOKKOS/fix_langevin_kokkos.cpp index 63b749a556..0947fee693 100644 --- a/src/KOKKOS/fix_langevin_kokkos.cpp +++ b/src/KOKKOS/fix_langevin_kokkos.cpp @@ -774,7 +774,7 @@ void FixLangevinKokkos::cleanup_copy() namespace LAMMPS_NS { template class FixLangevinKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixLangevinKokkos; #endif } diff --git a/src/KOKKOS/fix_momentum_kokkos.cpp b/src/KOKKOS/fix_momentum_kokkos.cpp index 493dffc3d9..38500531ca 100644 --- a/src/KOKKOS/fix_momentum_kokkos.cpp +++ b/src/KOKKOS/fix_momentum_kokkos.cpp @@ -199,7 +199,7 @@ void FixMomentumKokkos::end_of_step() namespace LAMMPS_NS { template class FixMomentumKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixMomentumKokkos; #endif } diff --git a/src/KOKKOS/fix_neigh_history_kokkos.cpp b/src/KOKKOS/fix_neigh_history_kokkos.cpp index ea0bd138f4..5f53950fe6 100644 --- a/src/KOKKOS/fix_neigh_history_kokkos.cpp +++ b/src/KOKKOS/fix_neigh_history_kokkos.cpp @@ -329,7 +329,7 @@ int FixNeighHistoryKokkos::unpack_exchange(int nlocal, double *buf) namespace LAMMPS_NS { template class FixNeighHistoryKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixNeighHistoryKokkos; #endif } diff --git a/src/KOKKOS/fix_nh_kokkos.cpp b/src/KOKKOS/fix_nh_kokkos.cpp index 9e86e47bc9..ba6e8919ea 100644 --- a/src/KOKKOS/fix_nh_kokkos.cpp +++ b/src/KOKKOS/fix_nh_kokkos.cpp @@ -733,7 +733,7 @@ void FixNHKokkos::pre_exchange() namespace LAMMPS_NS { template class FixNHKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixNHKokkos; #endif } diff --git a/src/KOKKOS/fix_nph_kokkos.cpp b/src/KOKKOS/fix_nph_kokkos.cpp index ed825ad9ee..c5072e6ae9 100644 --- a/src/KOKKOS/fix_nph_kokkos.cpp +++ b/src/KOKKOS/fix_nph_kokkos.cpp @@ -71,7 +71,7 @@ FixNPHKokkos::FixNPHKokkos(LAMMPS *lmp, int narg, char **arg) : namespace LAMMPS_NS { template class FixNPHKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixNPHKokkos; #endif } diff --git a/src/KOKKOS/fix_npt_kokkos.cpp b/src/KOKKOS/fix_npt_kokkos.cpp index b33e733aee..c488c8e4f3 100644 --- a/src/KOKKOS/fix_npt_kokkos.cpp +++ b/src/KOKKOS/fix_npt_kokkos.cpp @@ -71,7 +71,7 @@ FixNPTKokkos::FixNPTKokkos(LAMMPS *lmp, int narg, char **arg) : namespace LAMMPS_NS { template class FixNPTKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixNPTKokkos; #endif } diff --git a/src/KOKKOS/fix_nve_kokkos.cpp b/src/KOKKOS/fix_nve_kokkos.cpp index 621f16f420..052bf411d6 100644 --- a/src/KOKKOS/fix_nve_kokkos.cpp +++ b/src/KOKKOS/fix_nve_kokkos.cpp @@ -172,7 +172,7 @@ void FixNVEKokkos::cleanup_copy() namespace LAMMPS_NS { template class FixNVEKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixNVEKokkos; #endif } diff --git a/src/KOKKOS/fix_nve_sphere_kokkos.cpp b/src/KOKKOS/fix_nve_sphere_kokkos.cpp index 9c408d0630..95945a858f 100644 --- a/src/KOKKOS/fix_nve_sphere_kokkos.cpp +++ b/src/KOKKOS/fix_nve_sphere_kokkos.cpp @@ -149,7 +149,7 @@ void FixNVESphereKokkos::final_integrate_item(const int i) const namespace LAMMPS_NS { template class FixNVESphereKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixNVESphereKokkos; #endif } diff --git a/src/KOKKOS/fix_nvt_kokkos.cpp b/src/KOKKOS/fix_nvt_kokkos.cpp index 8b2d936274..4db42a62fb 100644 --- a/src/KOKKOS/fix_nvt_kokkos.cpp +++ b/src/KOKKOS/fix_nvt_kokkos.cpp @@ -52,7 +52,7 @@ FixNVTKokkos::FixNVTKokkos(LAMMPS *lmp, int narg, char **arg) : namespace LAMMPS_NS { template class FixNVTKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixNVTKokkos; #endif } diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.cpp b/src/KOKKOS/fix_qeq_reax_kokkos.cpp index 52a90eda01..9969ab7257 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reax_kokkos.cpp @@ -1266,7 +1266,7 @@ int FixQEqReaxKokkos::unpack_exchange(int nlocal, double *buf) namespace LAMMPS_NS { template class FixQEqReaxKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixQEqReaxKokkos; #endif } diff --git a/src/KOKKOS/fix_rx_kokkos.cpp b/src/KOKKOS/fix_rx_kokkos.cpp index f636f6454d..80333e1e9b 100644 --- a/src/KOKKOS/fix_rx_kokkos.cpp +++ b/src/KOKKOS/fix_rx_kokkos.cpp @@ -2276,7 +2276,7 @@ void FixRxKokkos::unpack_reverse_comm(int n, int *list, double *buf) namespace LAMMPS_NS { template class FixRxKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixRxKokkos; #endif } diff --git a/src/KOKKOS/fix_setforce_kokkos.cpp b/src/KOKKOS/fix_setforce_kokkos.cpp index 5150c71249..5d15b88d76 100644 --- a/src/KOKKOS/fix_setforce_kokkos.cpp +++ b/src/KOKKOS/fix_setforce_kokkos.cpp @@ -184,7 +184,7 @@ void FixSetForceKokkos::operator()(TagFixSetForceNonConstant, const namespace LAMMPS_NS { template class FixSetForceKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixSetForceKokkos; #endif } diff --git a/src/KOKKOS/fix_shardlow_kokkos.cpp b/src/KOKKOS/fix_shardlow_kokkos.cpp index 99e51ebe38..968f877abd 100644 --- a/src/KOKKOS/fix_shardlow_kokkos.cpp +++ b/src/KOKKOS/fix_shardlow_kokkos.cpp @@ -808,7 +808,7 @@ double FixShardlowKokkos::memory_usage() namespace LAMMPS_NS { template class FixShardlowKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixShardlowKokkos; #endif } diff --git a/src/KOKKOS/fix_wall_lj93_kokkos.cpp b/src/KOKKOS/fix_wall_lj93_kokkos.cpp index 3aaa45f8a8..5dbb054175 100644 --- a/src/KOKKOS/fix_wall_lj93_kokkos.cpp +++ b/src/KOKKOS/fix_wall_lj93_kokkos.cpp @@ -98,7 +98,7 @@ void FixWallLJ93Kokkos::wall_particle_item(int i, value_type ewall) namespace LAMMPS_NS { template class FixWallLJ93Kokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixWallLJ93Kokkos; #endif } diff --git a/src/KOKKOS/fix_wall_reflect_kokkos.cpp b/src/KOKKOS/fix_wall_reflect_kokkos.cpp index 2516ac6577..75a5c1a81e 100644 --- a/src/KOKKOS/fix_wall_reflect_kokkos.cpp +++ b/src/KOKKOS/fix_wall_reflect_kokkos.cpp @@ -107,7 +107,7 @@ void FixWallReflectKokkos::operator()(TagFixWallReflectPostIntegrate namespace LAMMPS_NS { template class FixWallReflectKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class FixWallReflectKokkos; #endif } diff --git a/src/KOKKOS/gridcomm_kokkos.cpp b/src/KOKKOS/gridcomm_kokkos.cpp index 64a9d6992f..14b84a5733 100644 --- a/src/KOKKOS/gridcomm_kokkos.cpp +++ b/src/KOKKOS/gridcomm_kokkos.cpp @@ -652,7 +652,7 @@ double GridCommKokkos::memory_usage() namespace LAMMPS_NS { template class GridCommKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class GridCommKokkos; #endif } diff --git a/src/KOKKOS/improper_class2_kokkos.cpp b/src/KOKKOS/improper_class2_kokkos.cpp index 2a7e8076d4..e3af52b494 100644 --- a/src/KOKKOS/improper_class2_kokkos.cpp +++ b/src/KOKKOS/improper_class2_kokkos.cpp @@ -1134,7 +1134,7 @@ void ImproperClass2Kokkos::ev_tally(EV_FLOAT &ev, const int i1, cons namespace LAMMPS_NS { template class ImproperClass2Kokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class ImproperClass2Kokkos; #endif } diff --git a/src/KOKKOS/improper_harmonic_kokkos.cpp b/src/KOKKOS/improper_harmonic_kokkos.cpp index b364d0b0c7..4d41f3ef48 100644 --- a/src/KOKKOS/improper_harmonic_kokkos.cpp +++ b/src/KOKKOS/improper_harmonic_kokkos.cpp @@ -484,7 +484,7 @@ void ImproperHarmonicKokkos::ev_tally(EV_FLOAT &ev, const int i1, co namespace LAMMPS_NS { template class ImproperHarmonicKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class ImproperHarmonicKokkos; #endif } diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 9973b5a688..295fddc6e7 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -26,7 +26,7 @@ #include "error.h" #include "memory_kokkos.h" -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA // for detecting GPU-direct support: // the function int have_gpu_direct() @@ -55,7 +55,7 @@ GPU_DIRECT_UNKNOWN GPU_DIRECT_UNKNOWN #endif -#endif // KOKKOS_HAVE_CUDA +#endif // KOKKOS_ENABLE_CUDA using namespace LAMMPS_NS; @@ -92,7 +92,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) } else if (strcmp(arg[iarg],"g") == 0 || strcmp(arg[iarg],"gpus") == 0) { -#ifndef KOKKOS_HAVE_CUDA +#ifndef KOKKOS_ENABLE_CUDA error->all(FLERR,"GPUs are requested but Kokkos has not been compiled for CUDA"); #endif if (iarg+2 > narg) error->all(FLERR,"Invalid Kokkos command-line args"); @@ -142,7 +142,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) if (logfile) fprintf(logfile," will use up to %d GPU(s) per node\n",ngpu); } -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA if (ngpu <= 0) error->all(FLERR,"Kokkos has been compiled for CUDA but no GPUs are requested"); @@ -166,7 +166,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) } #endif -#ifndef KOKKOS_HAVE_SERIAL +#ifndef KOKKOS_ENABLE_SERIAL if (num_threads == 1) error->warning(FLERR,"When using a single thread, the Kokkos Serial backend " "(i.e. Makefile.kokkos_mpi_only) gives better performance " diff --git a/src/KOKKOS/kokkos_type.h b/src/KOKKOS/kokkos_type.h index b88c92ff73..eb432cefae 100644 --- a/src/KOKKOS/kokkos_type.h +++ b/src/KOKKOS/kokkos_type.h @@ -24,7 +24,7 @@ enum{FULL=1u,HALFTHREAD=2u,HALF=4u,N2=8u}; -#if defined(KOKKOS_HAVE_CXX11) +#if defined(KOKKOS_ENABLE_CXX11) #undef ISFINITE #define ISFINITE(x) std::isfinite(x) #endif @@ -201,7 +201,7 @@ template<> struct ExecutionSpaceFromDevice { static const LAMMPS_NS::ExecutionSpace space = LAMMPS_NS::Host; }; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template<> struct ExecutionSpaceFromDevice { static const LAMMPS_NS::ExecutionSpace space = LAMMPS_NS::Device; @@ -776,7 +776,7 @@ typedef tdual_int_64::t_dev_um t_int_64_um; }; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template <> struct ArrayTypes { @@ -1087,12 +1087,12 @@ struct params_lj_coul { F_FLOAT cut_ljsq,cut_coulsq,lj1,lj2,lj3,lj4,offset; }; -#if defined(KOKKOS_HAVE_CXX11) +#if defined(KOKKOS_ENABLE_CXX11) #undef ISFINITE #define ISFINITE(x) std::isfinite(x) #endif -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA #define LAMMPS_LAMBDA [=] __device__ #else #define LAMMPS_LAMBDA [=] diff --git a/src/KOKKOS/nbin_kokkos.cpp b/src/KOKKOS/nbin_kokkos.cpp index c35c349675..090519a5a8 100644 --- a/src/KOKKOS/nbin_kokkos.cpp +++ b/src/KOKKOS/nbin_kokkos.cpp @@ -146,7 +146,7 @@ void NBinKokkos::binatomsItem(const int &i) const namespace LAMMPS_NS { template class NBinKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class NBinKokkos; #endif } diff --git a/src/KOKKOS/nbin_ssa_kokkos.cpp b/src/KOKKOS/nbin_ssa_kokkos.cpp index d040ee2c83..ecf0e08535 100644 --- a/src/KOKKOS/nbin_ssa_kokkos.cpp +++ b/src/KOKKOS/nbin_ssa_kokkos.cpp @@ -301,7 +301,7 @@ void NBinSSAKokkos::sortBin( namespace LAMMPS_NS { template class NBinSSAKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class NBinSSAKokkos; #endif } diff --git a/src/KOKKOS/neigh_bond_kokkos.cpp b/src/KOKKOS/neigh_bond_kokkos.cpp index 615dc94ee2..05a6fd605c 100644 --- a/src/KOKKOS/neigh_bond_kokkos.cpp +++ b/src/KOKKOS/neigh_bond_kokkos.cpp @@ -1301,7 +1301,7 @@ void NeighBondKokkos::update_domain_variables() namespace LAMMPS_NS { template class NeighBondKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class NeighBondKokkos; #endif } diff --git a/src/KOKKOS/neigh_list_kokkos.cpp b/src/KOKKOS/neigh_list_kokkos.cpp index 93cf0af937..1c78fe3a68 100644 --- a/src/KOKKOS/neigh_list_kokkos.cpp +++ b/src/KOKKOS/neigh_list_kokkos.cpp @@ -53,7 +53,7 @@ void NeighListKokkos::grow(int nmax) namespace LAMMPS_NS { template class NeighListKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class NeighListKokkos; #endif } diff --git a/src/KOKKOS/npair_copy_kokkos.cpp b/src/KOKKOS/npair_copy_kokkos.cpp index 8702816033..7dde05745c 100644 --- a/src/KOKKOS/npair_copy_kokkos.cpp +++ b/src/KOKKOS/npair_copy_kokkos.cpp @@ -53,7 +53,7 @@ void NPairCopyKokkos::build(NeighList *list) namespace LAMMPS_NS { template class NPairCopyKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class NPairCopyKokkos; #endif } diff --git a/src/KOKKOS/npair_halffull_kokkos.cpp b/src/KOKKOS/npair_halffull_kokkos.cpp index 67481985da..cc8f663ef2 100644 --- a/src/KOKKOS/npair_halffull_kokkos.cpp +++ b/src/KOKKOS/npair_halffull_kokkos.cpp @@ -121,7 +121,7 @@ void NPairHalffullKokkos::operator()(TagNPairHalffullCompute, namespace LAMMPS_NS { template class NPairHalffullKokkos; template class NPairHalffullKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class NPairHalffullKokkos; template class NPairHalffullKokkos; #endif diff --git a/src/KOKKOS/npair_kokkos.cpp b/src/KOKKOS/npair_kokkos.cpp index 88017c3f9d..5e1b7b0414 100644 --- a/src/KOKKOS/npair_kokkos.cpp +++ b/src/KOKKOS/npair_kokkos.cpp @@ -187,7 +187,7 @@ void NPairKokkos::build(NeighList *list_) Kokkos::deep_copy(data.resize, data.h_resize); Kokkos::deep_copy(data.new_maxneighs, data.h_new_maxneighs); -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA #define BINS_PER_BLOCK 2 const int factor = atoms_per_bin<64?2:1; Kokkos::TeamPolicy config((mbins+factor-1)/factor,atoms_per_bin*factor); @@ -202,7 +202,7 @@ void NPairKokkos::build(NeighList *list_) if (newton_pair) { if (SIZE) { NPairKokkosBuildFunctorSize f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA if (ExecutionSpaceFromDevice::space == Device) Kokkos::parallel_for(config, f); else @@ -212,7 +212,7 @@ void NPairKokkos::build(NeighList *list_) #endif } else { NPairKokkosBuildFunctor f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA if (ExecutionSpaceFromDevice::space == Device) Kokkos::parallel_for(config, f); else @@ -224,7 +224,7 @@ void NPairKokkos::build(NeighList *list_) } else { if (SIZE) { NPairKokkosBuildFunctorSize f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA if (ExecutionSpaceFromDevice::space == Device) Kokkos::parallel_for(config, f); else @@ -234,7 +234,7 @@ void NPairKokkos::build(NeighList *list_) #endif } else { NPairKokkosBuildFunctor f(data,atoms_per_bin * 5 * sizeof(X_FLOAT) * factor); -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA if (ExecutionSpaceFromDevice::space == Device) Kokkos::parallel_for(config, f); else @@ -470,7 +470,7 @@ void NeighborKokkosExecute:: /* ---------------------------------------------------------------------- */ -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA extern __shared__ X_FLOAT sharedmem[]; /* ---------------------------------------------------------------------- */ @@ -910,7 +910,7 @@ void NeighborKokkosExecute:: /* ---------------------------------------------------------------------- */ -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template template __device__ inline void NeighborKokkosExecute::build_ItemSizeCuda(typename Kokkos::TeamPolicy::member_type dev) const @@ -1093,7 +1093,7 @@ template class NPairKokkos; template class NPairKokkos; template class NPairKokkos; template class NPairKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class NPairKokkos; template class NPairKokkos; template class NPairKokkos; diff --git a/src/KOKKOS/npair_kokkos.h b/src/KOKKOS/npair_kokkos.h index 970e40c9fc..62138bd524 100644 --- a/src/KOKKOS/npair_kokkos.h +++ b/src/KOKKOS/npair_kokkos.h @@ -311,7 +311,7 @@ class NeighborKokkosExecute KOKKOS_FUNCTION void build_ItemSize(const int &i) const; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template __device__ inline void build_ItemCuda(typename Kokkos::TeamPolicy::member_type dev) const; @@ -388,7 +388,7 @@ struct NPairKokkosBuildFunctor { void operator() (const int & i) const { c.template build_Item(i); } -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA __device__ inline void operator() (typename Kokkos::TeamPolicy::member_type dev) const { @@ -449,7 +449,7 @@ struct NPairKokkosBuildFunctorSize { c.template build_ItemSize(i); } -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA __device__ inline void operator() (typename Kokkos::TeamPolicy::member_type dev) const { c.template build_ItemSizeCuda(dev); diff --git a/src/KOKKOS/npair_skip_kokkos.cpp b/src/KOKKOS/npair_skip_kokkos.cpp index c537afaa6b..e614e624c9 100644 --- a/src/KOKKOS/npair_skip_kokkos.cpp +++ b/src/KOKKOS/npair_skip_kokkos.cpp @@ -151,7 +151,7 @@ void NPairSkipKokkos::operator()(TagNPairSkipCountLocal, const int & namespace LAMMPS_NS { template class NPairSkipKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class NPairSkipKokkos; #endif } diff --git a/src/KOKKOS/npair_ssa_kokkos.cpp b/src/KOKKOS/npair_ssa_kokkos.cpp index d17e341f15..5234c4e6d2 100644 --- a/src/KOKKOS/npair_ssa_kokkos.cpp +++ b/src/KOKKOS/npair_ssa_kokkos.cpp @@ -751,7 +751,7 @@ void NPairSSAKokkosExecute::build_ghosts_onePhase(int workPhase) con namespace LAMMPS_NS { template class NPairSSAKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class NPairSSAKokkos; #endif } diff --git a/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp b/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp index 9c12d2c978..18d09965be 100644 --- a/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_buck_coul_cut_kokkos.cpp @@ -360,7 +360,7 @@ double PairBuckCoulCutKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairBuckCoulCutKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairBuckCoulCutKokkos; #endif } diff --git a/src/KOKKOS/pair_buck_coul_long_kokkos.cpp b/src/KOKKOS/pair_buck_coul_long_kokkos.cpp index 4978d3d7fc..0b44a83ebb 100644 --- a/src/KOKKOS/pair_buck_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_buck_coul_long_kokkos.cpp @@ -522,7 +522,7 @@ double PairBuckCoulLongKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairBuckCoulLongKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairBuckCoulLongKokkos; #endif } diff --git a/src/KOKKOS/pair_buck_kokkos.cpp b/src/KOKKOS/pair_buck_kokkos.cpp index 8785700186..999aefe4c3 100644 --- a/src/KOKKOS/pair_buck_kokkos.cpp +++ b/src/KOKKOS/pair_buck_kokkos.cpp @@ -274,7 +274,7 @@ double PairBuckKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairBuckKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairBuckKokkos; #endif } diff --git a/src/KOKKOS/pair_coul_cut_kokkos.cpp b/src/KOKKOS/pair_coul_cut_kokkos.cpp index b6e36d4f0d..7d29adc625 100644 --- a/src/KOKKOS/pair_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_coul_cut_kokkos.cpp @@ -280,7 +280,7 @@ double PairCoulCutKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairCoulCutKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairCoulCutKokkos; #endif } diff --git a/src/KOKKOS/pair_coul_debye_kokkos.cpp b/src/KOKKOS/pair_coul_debye_kokkos.cpp index 5d15be7d76..3de83b5bc4 100644 --- a/src/KOKKOS/pair_coul_debye_kokkos.cpp +++ b/src/KOKKOS/pair_coul_debye_kokkos.cpp @@ -323,7 +323,7 @@ double PairCoulDebyeKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairCoulDebyeKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairCoulDebyeKokkos; #endif } diff --git a/src/KOKKOS/pair_coul_dsf_kokkos.cpp b/src/KOKKOS/pair_coul_dsf_kokkos.cpp index a714f665f7..7d03ee4968 100644 --- a/src/KOKKOS/pair_coul_dsf_kokkos.cpp +++ b/src/KOKKOS/pair_coul_dsf_kokkos.cpp @@ -422,7 +422,7 @@ int PairCoulDSFKokkos::sbmask(const int& j) const { namespace LAMMPS_NS { template class PairCoulDSFKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairCoulDSFKokkos; #endif } diff --git a/src/KOKKOS/pair_coul_long_kokkos.cpp b/src/KOKKOS/pair_coul_long_kokkos.cpp index 1e8c6c5f4e..73b9521da0 100644 --- a/src/KOKKOS/pair_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_coul_long_kokkos.cpp @@ -471,7 +471,7 @@ double PairCoulLongKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairCoulLongKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairCoulLongKokkos; #endif } diff --git a/src/KOKKOS/pair_coul_wolf_kokkos.cpp b/src/KOKKOS/pair_coul_wolf_kokkos.cpp index 2bff824c3d..fe9c581cc1 100644 --- a/src/KOKKOS/pair_coul_wolf_kokkos.cpp +++ b/src/KOKKOS/pair_coul_wolf_kokkos.cpp @@ -424,7 +424,7 @@ int PairCoulWolfKokkos::sbmask(const int& j) const { namespace LAMMPS_NS { template class PairCoulWolfKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairCoulWolfKokkos; #endif } diff --git a/src/KOKKOS/pair_dpd_fdt_energy_kokkos.cpp b/src/KOKKOS/pair_dpd_fdt_energy_kokkos.cpp index 3282c9da1e..d2fcc81ea4 100644 --- a/src/KOKKOS/pair_dpd_fdt_energy_kokkos.cpp +++ b/src/KOKKOS/pair_dpd_fdt_energy_kokkos.cpp @@ -795,7 +795,7 @@ int PairDPDfdtEnergyKokkos::sbmask(const int& j) const { namespace LAMMPS_NS { template class PairDPDfdtEnergyKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairDPDfdtEnergyKokkos; #endif } diff --git a/src/KOKKOS/pair_eam_alloy_kokkos.cpp b/src/KOKKOS/pair_eam_alloy_kokkos.cpp index e198ddb85a..6039282141 100644 --- a/src/KOKKOS/pair_eam_alloy_kokkos.cpp +++ b/src/KOKKOS/pair_eam_alloy_kokkos.cpp @@ -1199,7 +1199,7 @@ void PairEAMAlloyKokkos::file2array_alloy() namespace LAMMPS_NS { template class PairEAMAlloyKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairEAMAlloyKokkos; #endif } diff --git a/src/KOKKOS/pair_eam_fs_kokkos.cpp b/src/KOKKOS/pair_eam_fs_kokkos.cpp index f5e4445db3..81d9ba8326 100644 --- a/src/KOKKOS/pair_eam_fs_kokkos.cpp +++ b/src/KOKKOS/pair_eam_fs_kokkos.cpp @@ -1208,7 +1208,7 @@ void PairEAMFSKokkos::file2array_fs() namespace LAMMPS_NS { template class PairEAMFSKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairEAMFSKokkos; #endif } diff --git a/src/KOKKOS/pair_eam_kokkos.cpp b/src/KOKKOS/pair_eam_kokkos.cpp index 6ef3d99ac3..22383f57c5 100644 --- a/src/KOKKOS/pair_eam_kokkos.cpp +++ b/src/KOKKOS/pair_eam_kokkos.cpp @@ -899,7 +899,7 @@ void PairEAMKokkos::ev_tally(EV_FLOAT &ev, const int &i, const int & namespace LAMMPS_NS { template class PairEAMKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairEAMKokkos; #endif } diff --git a/src/KOKKOS/pair_exp6_rx_kokkos.cpp b/src/KOKKOS/pair_exp6_rx_kokkos.cpp index f38feea5f4..df24a5f4c7 100644 --- a/src/KOKKOS/pair_exp6_rx_kokkos.cpp +++ b/src/KOKKOS/pair_exp6_rx_kokkos.cpp @@ -232,7 +232,7 @@ void PairExp6rxKokkos::compute(int eflag_in, int vflag_in) } else Kokkos::parallel_for(Kokkos::RangePolicy(0,np_total),*this); -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA Kokkos::parallel_for(Kokkos::RangePolicy(0,np_total),*this); #else int errorFlag = 0; @@ -277,7 +277,7 @@ void PairExp6rxKokkos::compute(int eflag_in, int vflag_in) EV_FLOAT ev; -#ifdef KOKKOS_HAVE_CUDA // Use atomics +#ifdef KOKKOS_ENABLE_CUDA // Use atomics if (neighflag == HALF) { if (newton_pair) { @@ -814,7 +814,7 @@ void PairExp6rxKokkos::operator()(TagPairExp6rxComputeNoAtomics unique_token_type; unique_token_type unique_token; @@ -1156,7 +1156,7 @@ void PairExp6rxKokkos::operator()(TagPairExp6rxComputeNoAtomics::vectorized_operator(const int &ii, EV_FLOAT& Kokkos::View::value> > a_uCGnew = uCGnew; int tid = 0; -#ifndef KOKKOS_HAVE_CUDA +#ifndef KOKKOS_ENABLE_CUDA typedef Kokkos::Experimental::UniqueToken< DeviceType, Kokkos::Experimental::UniqueTokenScope::Global> unique_token_type; unique_token_type unique_token; @@ -1623,7 +1623,7 @@ void PairExp6rxKokkos::vectorized_operator(const int &ii, EV_FLOAT& t_uCGnew(tid,i) += uCGnew_i; } -#ifndef KOKKOS_HAVE_CUDA +#ifndef KOKKOS_ENABLE_CUDA unique_token.release(tid); #endif } @@ -2128,7 +2128,7 @@ void partition_range( const int begin, const int end, int &thread_begin, int &th /* ---------------------------------------------------------------------- */ -#ifndef KOKKOS_HAVE_CUDA +#ifndef KOKKOS_ENABLE_CUDA template template void PairExp6rxKokkos::getMixingWeightsVect(const int np_total, int errorFlag, @@ -2654,7 +2654,7 @@ int PairExp6rxKokkos::sbmask(const int& j) const { namespace LAMMPS_NS { template class PairExp6rxKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairExp6rxKokkos; #endif } diff --git a/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp b/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp index 09e6c709a4..189407b541 100644 --- a/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp +++ b/src/KOKKOS/pair_gran_hooke_history_kokkos.cpp @@ -581,7 +581,7 @@ void PairGranHookeHistoryKokkos::ev_tally_xyz_atom(EV_FLOAT &ev, int namespace LAMMPS_NS { template class PairGranHookeHistoryKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairGranHookeHistoryKokkos; #endif } diff --git a/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.cpp b/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.cpp index d0d290d1f1..ce7df2bec1 100644 --- a/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.cpp +++ b/src/KOKKOS/pair_lj_charmm_coul_charmm_implicit_kokkos.cpp @@ -528,7 +528,7 @@ double PairLJCharmmCoulCharmmImplicitKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairLJCharmmCoulCharmmImplicitKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairLJCharmmCoulCharmmImplicitKokkos; #endif } diff --git a/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp b/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp index 2203dfa2a0..b31282e595 100644 --- a/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp +++ b/src/KOKKOS/pair_lj_charmm_coul_charmm_kokkos.cpp @@ -529,7 +529,7 @@ double PairLJCharmmCoulCharmmKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairLJCharmmCoulCharmmKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairLJCharmmCoulCharmmKokkos; #endif } diff --git a/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp b/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp index e1ecfbac3c..5d8a202aa4 100644 --- a/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_lj_charmm_coul_long_kokkos.cpp @@ -536,7 +536,7 @@ double PairLJCharmmCoulLongKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairLJCharmmCoulLongKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairLJCharmmCoulLongKokkos; #endif } diff --git a/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp b/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp index abd0183e21..6eb3028101 100644 --- a/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_coul_cut_kokkos.cpp @@ -364,7 +364,7 @@ double PairLJClass2CoulCutKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairLJClass2CoulCutKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairLJClass2CoulCutKokkos; #endif } diff --git a/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp b/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp index 5f850689d4..a388694876 100644 --- a/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_coul_long_kokkos.cpp @@ -517,7 +517,7 @@ double PairLJClass2CoulLongKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairLJClass2CoulLongKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairLJClass2CoulLongKokkos; #endif } diff --git a/src/KOKKOS/pair_lj_class2_kokkos.cpp b/src/KOKKOS/pair_lj_class2_kokkos.cpp index 063753f1f8..33d1477443 100644 --- a/src/KOKKOS/pair_lj_class2_kokkos.cpp +++ b/src/KOKKOS/pair_lj_class2_kokkos.cpp @@ -292,7 +292,7 @@ double PairLJClass2Kokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairLJClass2Kokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairLJClass2Kokkos; #endif } diff --git a/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp index a2067f8cf9..6001fabbed 100644 --- a/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_cut_kokkos.cpp @@ -357,7 +357,7 @@ double PairLJCutCoulCutKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairLJCutCoulCutKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairLJCutCoulCutKokkos; #endif } diff --git a/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp index 277f1f658c..10923bc5da 100644 --- a/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_debye_kokkos.cpp @@ -386,7 +386,7 @@ double PairLJCutCoulDebyeKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairLJCutCoulDebyeKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairLJCutCoulDebyeKokkos; #endif } diff --git a/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp index 165bd97276..47aa2ea7cc 100644 --- a/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_dsf_kokkos.cpp @@ -377,7 +377,7 @@ double PairLJCutCoulDSFKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairLJCutCoulDSFKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairLJCutCoulDSFKokkos; #endif } diff --git a/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp b/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp index d02e83eb11..fa36cb1866 100644 --- a/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_coul_long_kokkos.cpp @@ -515,7 +515,7 @@ double PairLJCutCoulLongKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairLJCutCoulLongKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairLJCutCoulLongKokkos; #endif } diff --git a/src/KOKKOS/pair_lj_cut_kokkos.cpp b/src/KOKKOS/pair_lj_cut_kokkos.cpp index daaab8d29e..9b0ff902af 100644 --- a/src/KOKKOS/pair_lj_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_kokkos.cpp @@ -289,7 +289,7 @@ double PairLJCutKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairLJCutKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairLJCutKokkos; #endif } diff --git a/src/KOKKOS/pair_lj_expand_kokkos.cpp b/src/KOKKOS/pair_lj_expand_kokkos.cpp index 55c8b200ef..3b8b9343d8 100644 --- a/src/KOKKOS/pair_lj_expand_kokkos.cpp +++ b/src/KOKKOS/pair_lj_expand_kokkos.cpp @@ -297,7 +297,7 @@ double PairLJExpandKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairLJExpandKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairLJExpandKokkos; #endif } diff --git a/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp b/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp index b7fb5acccb..d06ad9b44e 100644 --- a/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp +++ b/src/KOKKOS/pair_lj_gromacs_coul_gromacs_kokkos.cpp @@ -516,7 +516,7 @@ double PairLJGromacsCoulGromacsKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairLJGromacsCoulGromacsKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairLJGromacsCoulGromacsKokkos; #endif } diff --git a/src/KOKKOS/pair_lj_gromacs_kokkos.cpp b/src/KOKKOS/pair_lj_gromacs_kokkos.cpp index 5d2725ccdd..d447846333 100644 --- a/src/KOKKOS/pair_lj_gromacs_kokkos.cpp +++ b/src/KOKKOS/pair_lj_gromacs_kokkos.cpp @@ -348,7 +348,7 @@ double PairLJGromacsKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairLJGromacsKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairLJGromacsKokkos; #endif } diff --git a/src/KOKKOS/pair_lj_sdk_kokkos.cpp b/src/KOKKOS/pair_lj_sdk_kokkos.cpp index 8f719582fa..990e464341 100644 --- a/src/KOKKOS/pair_lj_sdk_kokkos.cpp +++ b/src/KOKKOS/pair_lj_sdk_kokkos.cpp @@ -326,7 +326,7 @@ double PairLJSDKKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairLJSDKKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairLJSDKKokkos; #endif } diff --git a/src/KOKKOS/pair_morse_kokkos.cpp b/src/KOKKOS/pair_morse_kokkos.cpp index 97c5f9be84..ab5eb817a1 100644 --- a/src/KOKKOS/pair_morse_kokkos.cpp +++ b/src/KOKKOS/pair_morse_kokkos.cpp @@ -303,7 +303,7 @@ double PairMorseKokkos::init_one(int i, int j) namespace LAMMPS_NS { template class PairMorseKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairMorseKokkos; #endif } diff --git a/src/KOKKOS/pair_multi_lucy_rx_kokkos.cpp b/src/KOKKOS/pair_multi_lucy_rx_kokkos.cpp index a6af26cb0f..5f19d73dfa 100644 --- a/src/KOKKOS/pair_multi_lucy_rx_kokkos.cpp +++ b/src/KOKKOS/pair_multi_lucy_rx_kokkos.cpp @@ -993,7 +993,7 @@ void PairMultiLucyRXKokkos::settings(int narg, char **arg) namespace LAMMPS_NS { template class PairMultiLucyRXKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairMultiLucyRXKokkos; #endif } diff --git a/src/KOKKOS/pair_reaxc_kokkos.cpp b/src/KOKKOS/pair_reaxc_kokkos.cpp index 9930894f45..56d2ebd8aa 100644 --- a/src/KOKKOS/pair_reaxc_kokkos.cpp +++ b/src/KOKKOS/pair_reaxc_kokkos.cpp @@ -4292,7 +4292,7 @@ void PairReaxCKokkos::operator()(PairReaxFindBondSpecies, const int } template class PairReaxCKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairReaxCKokkos; #endif } diff --git a/src/KOKKOS/pair_snap_kokkos.cpp b/src/KOKKOS/pair_snap_kokkos.cpp index 32510721d3..76d6aa5462 100644 --- a/src/KOKKOS/pair_snap_kokkos.cpp +++ b/src/KOKKOS/pair_snap_kokkos.cpp @@ -16,7 +16,7 @@ namespace LAMMPS_NS { template class PairSNAPKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairSNAPKokkos; #endif } diff --git a/src/KOKKOS/pair_sw_kokkos.cpp b/src/KOKKOS/pair_sw_kokkos.cpp index 5452d2293f..24022475ab 100644 --- a/src/KOKKOS/pair_sw_kokkos.cpp +++ b/src/KOKKOS/pair_sw_kokkos.cpp @@ -972,7 +972,7 @@ void PairSWKokkos::ev_tally3_atom(EV_FLOAT &ev, const int &i, namespace LAMMPS_NS { template class PairSWKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairSWKokkos; #endif } diff --git a/src/KOKKOS/pair_table_kokkos.cpp b/src/KOKKOS/pair_table_kokkos.cpp index b72df04c5f..9522e94706 100644 --- a/src/KOKKOS/pair_table_kokkos.cpp +++ b/src/KOKKOS/pair_table_kokkos.cpp @@ -550,7 +550,7 @@ void PairTableKokkos::cleanup_copy() { namespace LAMMPS_NS { template class PairTableKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairTableKokkos; #endif diff --git a/src/KOKKOS/pair_table_rx_kokkos.cpp b/src/KOKKOS/pair_table_rx_kokkos.cpp index 30ca54986b..376984afa2 100644 --- a/src/KOKKOS/pair_table_rx_kokkos.cpp +++ b/src/KOKKOS/pair_table_rx_kokkos.cpp @@ -1301,7 +1301,7 @@ void PairTableRXKokkos::cleanup_copy() { namespace LAMMPS_NS { template class PairTableRXKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairTableRXKokkos; #endif diff --git a/src/KOKKOS/pair_tersoff_kokkos.cpp b/src/KOKKOS/pair_tersoff_kokkos.cpp index c3e1494d0b..a6668ca064 100644 --- a/src/KOKKOS/pair_tersoff_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_kokkos.cpp @@ -1289,7 +1289,7 @@ int PairTersoffKokkos::sbmask(const int& j) const { namespace LAMMPS_NS { template class PairTersoffKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairTersoffKokkos; #endif } diff --git a/src/KOKKOS/pair_tersoff_mod_kokkos.cpp b/src/KOKKOS/pair_tersoff_mod_kokkos.cpp index 61493794ba..303d2bdfda 100644 --- a/src/KOKKOS/pair_tersoff_mod_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_mod_kokkos.cpp @@ -1292,7 +1292,7 @@ int PairTersoffMODKokkos::sbmask(const int& j) const { namespace LAMMPS_NS { template class PairTersoffMODKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairTersoffMODKokkos; #endif } diff --git a/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp b/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp index f51da2afde..ad4a2d444e 100644 --- a/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp +++ b/src/KOKKOS/pair_tersoff_zbl_kokkos.cpp @@ -1386,7 +1386,7 @@ int PairTersoffZBLKokkos::sbmask(const int& j) const { namespace LAMMPS_NS { template class PairTersoffZBLKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairTersoffZBLKokkos; #endif } diff --git a/src/KOKKOS/pair_vashishta_kokkos.cpp b/src/KOKKOS/pair_vashishta_kokkos.cpp index 3d4bd22a3c..78ab8bfc85 100644 --- a/src/KOKKOS/pair_vashishta_kokkos.cpp +++ b/src/KOKKOS/pair_vashishta_kokkos.cpp @@ -947,7 +947,7 @@ void PairVashishtaKokkos::ev_tally3_atom(EV_FLOAT &ev, const int &i, namespace LAMMPS_NS { template class PairVashishtaKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairVashishtaKokkos; #endif } diff --git a/src/KOKKOS/pair_yukawa_kokkos.cpp b/src/KOKKOS/pair_yukawa_kokkos.cpp index 8fc2fda120..951613a33e 100644 --- a/src/KOKKOS/pair_yukawa_kokkos.cpp +++ b/src/KOKKOS/pair_yukawa_kokkos.cpp @@ -295,7 +295,7 @@ compute_evdwl(const F_FLOAT& rsq, const int& i, const int&j, namespace LAMMPS_NS { template class PairYukawaKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairYukawaKokkos; #endif } diff --git a/src/KOKKOS/pair_zbl_kokkos.cpp b/src/KOKKOS/pair_zbl_kokkos.cpp index f57d5eaad0..bcf33b405d 100644 --- a/src/KOKKOS/pair_zbl_kokkos.cpp +++ b/src/KOKKOS/pair_zbl_kokkos.cpp @@ -433,7 +433,7 @@ void PairZBLKokkos::cleanup_copy() { namespace LAMMPS_NS { template class PairZBLKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PairZBLKokkos; #endif } diff --git a/src/KOKKOS/pppm_kokkos.cpp b/src/KOKKOS/pppm_kokkos.cpp index 7a02e973b1..bcac29ba9b 100644 --- a/src/KOKKOS/pppm_kokkos.cpp +++ b/src/KOKKOS/pppm_kokkos.cpp @@ -1648,7 +1648,7 @@ void PPPMKokkos::make_rho() nlocal = atomKK->nlocal; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA copymode = 1; Kokkos::parallel_for(Kokkos::RangePolicy(0,nlocal),*this); copymode = 0; @@ -3121,7 +3121,7 @@ double PPPMKokkos::memory_usage() namespace LAMMPS_NS { template class PPPMKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class PPPMKokkos; #endif } diff --git a/src/KOKKOS/rand_pool_wrap_kokkos.h b/src/KOKKOS/rand_pool_wrap_kokkos.h index 12255a8a62..c1461c5216 100644 --- a/src/KOKKOS/rand_pool_wrap_kokkos.h +++ b/src/KOKKOS/rand_pool_wrap_kokkos.h @@ -50,7 +50,7 @@ class RandPoolWrap : protected Pointers { KOKKOS_INLINE_FUNCTION RandWrap get_state() const { -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA error->all(FLERR,"Cannot use Marsaglia RNG with GPUs"); #endif diff --git a/src/KOKKOS/region_block_kokkos.cpp b/src/KOKKOS/region_block_kokkos.cpp index 8ff6e8937d..730ef81466 100644 --- a/src/KOKKOS/region_block_kokkos.cpp +++ b/src/KOKKOS/region_block_kokkos.cpp @@ -167,7 +167,7 @@ void RegBlockKokkos::rotate(double &x, double &y, double &z, double namespace LAMMPS_NS { template class RegBlockKokkos; -#ifdef KOKKOS_HAVE_CUDA +#ifdef KOKKOS_ENABLE_CUDA template class RegBlockKokkos; #endif } From 0edc588458d571e3664614ab33e55f320f1ed8f3 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 7 Mar 2019 10:23:17 -0700 Subject: [PATCH 139/143] Replace deprecated Kokkos capacity() with span() --- src/KOKKOS/atom_vec_kokkos.h | 20 ++++++++++---------- src/KOKKOS/kokkos_type.h | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/KOKKOS/atom_vec_kokkos.h b/src/KOKKOS/atom_vec_kokkos.h index 51ae226cc3..b36edf4e2d 100644 --- a/src/KOKKOS/atom_vec_kokkos.h +++ b/src/KOKKOS/atom_vec_kokkos.h @@ -139,11 +139,11 @@ class AtomVecKokkos : public AtomVec { Kokkos::CudaHostPinnedSpace,typename ViewType::memory_space>::type, Kokkos::MemoryTraits > mirror_type; if (buffer_size == 0) { - buffer = Kokkos::kokkos_malloc(src.capacity()); - buffer_size = src.capacity(); - } else if (buffer_size < src.capacity()) { - buffer = Kokkos::kokkos_realloc(buffer,src.capacity()); - buffer_size = src.capacity(); + buffer = Kokkos::kokkos_malloc(src.span()); + buffer_size = src.span(); + } else if (buffer_size < src.span()) { + buffer = Kokkos::kokkos_realloc(buffer,src.span()); + buffer_size = src.span(); } return mirror_type( buffer , src.extent(0) , @@ -165,11 +165,11 @@ class AtomVecKokkos : public AtomVec { Kokkos::CudaHostPinnedSpace,typename ViewType::memory_space>::type, Kokkos::MemoryTraits > mirror_type; if (buffer_size == 0) { - buffer = Kokkos::kokkos_malloc(src.capacity()*sizeof(typename ViewType::value_type)); - buffer_size = src.capacity(); - } else if (buffer_size < src.capacity()) { - buffer = Kokkos::kokkos_realloc(buffer,src.capacity()*sizeof(typename ViewType::value_type)); - buffer_size = src.capacity(); + buffer = Kokkos::kokkos_malloc(src.span()*sizeof(typename ViewType::value_type)); + buffer_size = src.span(); + } else if (buffer_size < src.span()) { + buffer = Kokkos::kokkos_realloc(buffer,src.span()*sizeof(typename ViewType::value_type)); + buffer_size = src.span(); } mirror_type tmp_view( (typename ViewType::value_type*)buffer , src.extent(0) , diff --git a/src/KOKKOS/kokkos_type.h b/src/KOKKOS/kokkos_type.h index eb432cefae..ff96684edc 100644 --- a/src/KOKKOS/kokkos_type.h +++ b/src/KOKKOS/kokkos_type.h @@ -1074,7 +1074,7 @@ void memset_kokkos (ViewType &view) { #ifndef KOKKOS_USING_DEPRECATED_VIEW Kokkos::parallel_for(view.span()*sizeof(typename ViewType::value_type)/4, f); #else - Kokkos::parallel_for(view.capacity()*sizeof(typename ViewType::value_type)/4, f); + Kokkos::parallel_for(view.span()*sizeof(typename ViewType::value_type)/4, f); #endif ViewType::execution_space::fence(); } From 9cb2a5619490b52a70edb886226f9cf379995a2c Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 7 Mar 2019 10:47:40 -0700 Subject: [PATCH 140/143] Remove deprecated Kokkos code --- src/KOKKOS/atom_vec_kokkos.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/KOKKOS/atom_vec_kokkos.h b/src/KOKKOS/atom_vec_kokkos.h index b36edf4e2d..58f21b9cd4 100644 --- a/src/KOKKOS/atom_vec_kokkos.h +++ b/src/KOKKOS/atom_vec_kokkos.h @@ -157,7 +157,7 @@ class AtomVecKokkos : public AtomVec { } template - void perform_async_copy(const ViewType& src, unsigned int space) { + void perform_async_copy(ViewType& src, unsigned int space) { typedef Kokkos::View Date: Thu, 7 Mar 2019 15:11:33 -0500 Subject: [PATCH 141/143] fix a memory leak in fix bocs --- src/USER-BOCS/fix_bocs.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/USER-BOCS/fix_bocs.cpp b/src/USER-BOCS/fix_bocs.cpp index bf11b1d6ba..7bdb8933e3 100644 --- a/src/USER-BOCS/fix_bocs.cpp +++ b/src/USER-BOCS/fix_bocs.cpp @@ -697,6 +697,11 @@ int FixBocs::read_F_table( char *filename, int p_basis_type ) "of %d in read_F_table",p_basis_type); error->all(FLERR,errmsg); } + // cleanup + for (i = 0; i < N_columns; ++i) { + free(data[i]); + } + free(data); return n_entries; } From a5c93e75a5280464c234ebaa50c652037ee8553e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Mar 2019 15:12:22 -0500 Subject: [PATCH 142/143] ignore src/lmpgitversion.h --- src/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/src/.gitignore b/src/.gitignore index 9670d1ca20..d405cb209e 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -6,6 +6,7 @@ /style_*.h /lmpinstalledpkgs.h +/lmpgitversion.h /*_gpu.h /*_gpu.cpp From e62746ef27dd6e55919383f9da625fc720515967 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 7 Mar 2019 15:38:23 -0500 Subject: [PATCH 143/143] protect group command against options that require unavailble properties resulting in segfaults --- src/group.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/group.cpp b/src/group.cpp index 3bc3f3d7bf..6c19af8bc6 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -207,6 +207,12 @@ void Group::assign(int narg, char **arg) else if (strcmp(arg[1],"molecule") == 0) category = MOLECULE; else if (strcmp(arg[1],"id") == 0) category = ID; + if ((category == MOLECULE) && (!atom->molecular)) + error->all(FLERR,"Group command requires atom attribute molecule"); + + if ((category == ID) && (!atom->tag_enable)) + error->all(FLERR,"Group command requires atom IDs"); + // args = logical condition if (narg > 3 && @@ -362,10 +368,13 @@ void Group::assign(int narg, char **arg) } else if (strcmp(arg[1],"include") == 0) { if (narg != 3) error->all(FLERR,"Illegal group command"); - if (strcmp(arg[2],"molecule") != 0) - error->all(FLERR,"Illegal group command"); + if (strcmp(arg[2],"molecule") == 0) { + if (!atom->molecular) + error->all(FLERR,"Group command requires atom attribute molecule"); - add_molecules(igroup,bit); + add_molecules(igroup,bit); + + } else error->all(FLERR,"Illegal group command"); // style = subtract